diff --git a/workspace/v20.1.0/support-context-and-intents/js/provider.bundle.js b/workspace/v20.1.0/support-context-and-intents/js/provider.bundle.js index 2fb52a526..29f9cb639 100644 --- a/workspace/v20.1.0/support-context-and-intents/js/provider.bundle.js +++ b/workspace/v20.1.0/support-context-and-intents/js/provider.bundle.js @@ -228,6 +228,8 @@ const isFormData = (thing) => { */ const isURLSearchParams = kindOfTest('URLSearchParams'); +const [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest); + /** * Trim excess whitespace off the beginning and end of a string * @@ -616,8 +618,7 @@ const toObjectSet = (arrayOrString, delimiter) => { const noop = () => {}; const toFiniteNumber = (value, defaultValue) => { - value = +value; - return Number.isFinite(value) ? value : defaultValue; + return value != null && Number.isFinite(value = +value) ? value : defaultValue; }; const ALPHA = 'abcdefghijklmnopqrstuvwxyz'; @@ -687,6 +688,36 @@ const isAsyncFn = kindOfTest('AsyncFunction'); const isThenable = (thing) => thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch); +// original code +// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34 + +const _setImmediate = ((setImmediateSupported, postMessageSupported) => { + if (setImmediateSupported) { + return setImmediate; + } + + return postMessageSupported ? ((token, callbacks) => { + _global.addEventListener("message", ({source, data}) => { + if (source === _global && data === token) { + callbacks.length && callbacks.shift()(); + } + }, false); + + return (cb) => { + callbacks.push(cb); + _global.postMessage(token, "*"); + } + })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb); +})( + typeof setImmediate === 'function', + isFunction(_global.postMessage) +); + +const asap = typeof queueMicrotask !== 'undefined' ? + queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate); + +// ********************* + var utils$1 = { isArray, isArrayBuffer, @@ -698,6 +729,10 @@ var utils$1 = { isBoolean, isObject, isPlainObject, + isReadableStream, + isRequest, + isResponse, + isHeaders, isUndefined, isDate, isFile, @@ -738,7 +773,9 @@ var utils$1 = { isSpecCompliantForm, toJSONObject, isAsyncFn, - isThenable + isThenable, + setImmediate: _setImmediate, + asap }; /** @@ -752,7 +789,7 @@ var utils$1 = { * * @returns {Error} The created error. */ -function AxiosError(message, code, config, request, response) { +function AxiosError$1(message, code, config, request, response) { Error.call(this); if (Error.captureStackTrace) { @@ -766,10 +803,13 @@ function AxiosError(message, code, config, request, response) { 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$1.inherits(AxiosError, Error, { +utils$1.inherits(AxiosError$1, Error, { toJSON: function toJSON() { return { // Standard @@ -786,12 +826,12 @@ utils$1.inherits(AxiosError, Error, { // Axios config: utils$1.toJSONObject(this.config), code: this.code, - status: this.response && this.response.status ? this.response.status : null + status: this.status }; } }); -const prototype$1 = AxiosError.prototype; +const prototype$1 = AxiosError$1.prototype; const descriptors = {}; [ @@ -812,11 +852,11 @@ const descriptors = {}; descriptors[code] = {value: code}; }); -Object.defineProperties(AxiosError, descriptors); +Object.defineProperties(AxiosError$1, descriptors); Object.defineProperty(prototype$1, 'isAxiosError', {value: true}); // eslint-disable-next-line func-names -AxiosError.from = (error, code, config, request, response, customProps) => { +AxiosError$1.from = (error, code, config, request, response, customProps) => { const axiosError = Object.create(prototype$1); utils$1.toFlatObject(error, axiosError, function filter(obj) { @@ -825,7 +865,7 @@ AxiosError.from = (error, code, config, request, response, customProps) => { return prop !== 'isAxiosError'; }); - AxiosError.call(axiosError, error.message, code, config, request, response); + AxiosError$1.call(axiosError, error.message, code, config, request, response); axiosError.cause = error; @@ -917,7 +957,7 @@ const predicates = utils$1.toFlatObject(utils$1, {}, null, function filter(prop) * * @returns */ -function toFormData(obj, formData, options) { +function toFormData$1(obj, formData, options) { if (!utils$1.isObject(obj)) { throw new TypeError('target must be an object'); } @@ -955,7 +995,7 @@ function toFormData(obj, formData, options) { } if (!useBlob && utils$1.isBlob(value)) { - throw new AxiosError('Blob is not supported. Use a Buffer instead.'); + throw new AxiosError$1('Blob is not supported. Use a Buffer instead.'); } if (utils$1.isArrayBuffer(value) || utils$1.isTypedArray(value)) { @@ -1084,7 +1124,7 @@ function encode$1(str) { function AxiosURLSearchParams(params, options) { this._pairs = []; - params && toFormData(params, this, options); + params && toFormData$1(params, this, options); } const prototype = AxiosURLSearchParams.prototype; @@ -1252,6 +1292,8 @@ var platform$1 = { const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined'; +const _navigator = typeof navigator === 'object' && navigator || undefined; + /** * Determine if we're running in a standard browser environment * @@ -1269,10 +1311,8 @@ const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'unde * * @returns {boolean} */ -const hasStandardBrowserEnv = ( - (product) => { - return hasBrowserEnv && ['ReactNative', 'NativeScript', 'NS'].indexOf(product) < 0 - })(typeof navigator !== 'undefined' && navigator.product); +const hasStandardBrowserEnv = hasBrowserEnv && + (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0); /** * Determine if we're running in a standard browser webWorker environment @@ -1292,11 +1332,15 @@ const hasStandardBrowserWebWorkerEnv = (() => { ); })(); +const origin = hasBrowserEnv && window.location.href || 'http://localhost'; + var utils = /*#__PURE__*/Object.freeze({ __proto__: null, hasBrowserEnv: hasBrowserEnv, hasStandardBrowserEnv: hasStandardBrowserEnv, - hasStandardBrowserWebWorkerEnv: hasStandardBrowserWebWorkerEnv + hasStandardBrowserWebWorkerEnv: hasStandardBrowserWebWorkerEnv, + navigator: _navigator, + origin: origin }); var platform = { @@ -1305,7 +1349,7 @@ var platform = { }; function toURLEncodedForm(data, options) { - return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({ + return toFormData$1(data, new platform.classes.URLSearchParams(), Object.assign({ visitor: function(value, key, path, helpers) { if (platform.isNode && utils$1.isBuffer(value)) { this.append(key, value.toString('base64')); @@ -1429,14 +1473,14 @@ function stringifySafely(rawValue, parser, encoder) { } } - return (encoder || JSON.stringify)(rawValue); + return (0, JSON.stringify)(rawValue); } const defaults = { transitional: transitionalDefaults, - adapter: ['xhr', 'http'], + adapter: ['xhr', 'http', 'fetch'], transformRequest: [function transformRequest(data, headers) { const contentType = headers.getContentType() || ''; @@ -1457,7 +1501,8 @@ const defaults = { utils$1.isBuffer(data) || utils$1.isStream(data) || utils$1.isFile(data) || - utils$1.isBlob(data) + utils$1.isBlob(data) || + utils$1.isReadableStream(data) ) { return data; } @@ -1479,7 +1524,7 @@ const defaults = { if ((isFileList = utils$1.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) { const _FormData = this.env && this.env.FormData; - return toFormData( + return toFormData$1( isFileList ? {'files[]': data} : data, _FormData && new _FormData(), this.formSerializer @@ -1500,6 +1545,10 @@ const defaults = { const forcedJSONParsing = transitional && transitional.forcedJSONParsing; const JSONRequested = this.responseType === 'json'; + if (utils$1.isResponse(data) || utils$1.isReadableStream(data)) { + return data; + } + if (data && utils$1.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) { const silentJSONParsing = transitional && transitional.silentJSONParsing; const strictJSONParsing = !silentJSONParsing && JSONRequested; @@ -1509,7 +1558,7 @@ const defaults = { } catch (e) { if (strictJSONParsing) { if (e.name === 'SyntaxError') { - throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response); + throw AxiosError$1.from(e, AxiosError$1.ERR_BAD_RESPONSE, this, null, this.response); } throw e; } @@ -1552,8 +1601,6 @@ utils$1.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => { defaults.headers[method] = {}; }); -var defaults$1 = defaults; - // RawAxiosHeaders whose duplicates are ignored by node // c.f. https://nodejs.org/api/http.html#http_message_headers const ignoreDuplicateOf = utils$1.toObjectSet([ @@ -1674,7 +1721,7 @@ function buildAccessors(obj, header) { }); } -class AxiosHeaders { +let AxiosHeaders$1 = class AxiosHeaders { constructor(headers) { headers && this.set(headers); } @@ -1703,6 +1750,10 @@ class AxiosHeaders { setHeaders(header, valueOrRewrite); } else if(utils$1.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) { setHeaders(parseHeaders(header), valueOrRewrite); + } else if (utils$1.isHeaders(header)) { + for (const [key, value] of header.entries()) { + setHeader(value, key, rewrite); + } } else { header != null && setHeader(valueOrRewrite, header, rewrite); } @@ -1881,12 +1932,12 @@ class AxiosHeaders { return this; } -} +}; -AxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']); +AxiosHeaders$1.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']); // reserved names hotfix -utils$1.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => { +utils$1.reduceDescriptors(AxiosHeaders$1.prototype, ({value}, key) => { let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set` return { get: () => value, @@ -1896,9 +1947,7 @@ utils$1.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => { } }); -utils$1.freezeMethods(AxiosHeaders); - -var AxiosHeaders$1 = AxiosHeaders; +utils$1.freezeMethods(AxiosHeaders$1); /** * Transform the data for a request or a response @@ -1909,7 +1958,7 @@ var AxiosHeaders$1 = AxiosHeaders; * @returns {*} The resulting transformed data */ function transformData(fns, response) { - const config = this || defaults$1; + const config = this || defaults; const context = response || config; const headers = AxiosHeaders$1.from(context.headers); let data = context.data; @@ -1923,7 +1972,7 @@ function transformData(fns, response) { return data; } -function isCancel(value) { +function isCancel$1(value) { return !!(value && value.__CANCEL__); } @@ -1936,13 +1985,13 @@ function isCancel(value) { * * @returns {CanceledError} The created error. */ -function CanceledError(message, config, request) { +function CanceledError$1(message, config, request) { // eslint-disable-next-line no-eq-null,eqeqeq - AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request); + AxiosError$1.call(this, message == null ? 'canceled' : message, AxiosError$1.ERR_CANCELED, config, request); this.name = 'CanceledError'; } -utils$1.inherits(CanceledError, AxiosError, { +utils$1.inherits(CanceledError$1, AxiosError$1, { __CANCEL__: true }); @@ -1960,9 +2009,9 @@ function settle(resolve, reject, response) { if (!response.status || !validateStatus || validateStatus(response.status)) { resolve(response); } else { - reject(new AxiosError( + reject(new AxiosError$1( 'Request failed with status code ' + response.status, - [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4], + [AxiosError$1.ERR_BAD_REQUEST, AxiosError$1.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4], response.config, response.request, response @@ -1970,96 +2019,153 @@ function settle(resolve, reject, response) { } } -var cookies = platform.hasStandardBrowserEnv ? +function parseProtocol(url) { + const match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url); + return match && match[1] || ''; +} - // Standard browser envs support document.cookie - { - write(name, value, expires, path, domain, secure) { - const cookie = [name + '=' + encodeURIComponent(value)]; +/** + * Calculate data maxRate + * @param {Number} [samplesCount= 10] + * @param {Number} [min= 1000] + * @returns {Function} + */ +function speedometer(samplesCount, min) { + samplesCount = samplesCount || 10; + const bytes = new Array(samplesCount); + const timestamps = new Array(samplesCount); + let head = 0; + let tail = 0; + let firstSampleTS; - utils$1.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString()); + min = min !== undefined ? min : 1000; - utils$1.isString(path) && cookie.push('path=' + path); + return function push(chunkLength) { + const now = Date.now(); - utils$1.isString(domain) && cookie.push('domain=' + domain); + const startedAt = timestamps[tail]; - secure === true && cookie.push('secure'); + if (!firstSampleTS) { + firstSampleTS = now; + } - document.cookie = cookie.join('; '); - }, + bytes[head] = chunkLength; + timestamps[head] = now; - read(name) { - const match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)')); - return (match ? decodeURIComponent(match[3]) : null); - }, + let i = tail; + let bytesCount = 0; - remove(name) { - this.write(name, '', Date.now() - 86400000); + while (i !== head) { + bytesCount += bytes[i++]; + i = i % samplesCount; } - } - : + head = (head + 1) % samplesCount; - // Non-standard browser env (web workers, react-native) lack needed support. - { - write() {}, - read() { - return null; - }, - remove() {} - }; + if (head === tail) { + tail = (tail + 1) % samplesCount; + } -/** - * Determines whether the specified URL is absolute - * - * @param {string} url The URL to test - * - * @returns {boolean} True if the specified URL is absolute, otherwise false - */ -function isAbsoluteURL(url) { - // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL). - // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed - // by any combination of letters, digits, plus, period, or hyphen. - return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url); -} + if (now - firstSampleTS < min) { + return; + } -/** - * Creates a new URL by combining the specified URLs - * - * @param {string} baseURL The base URL - * @param {string} relativeURL The relative URL - * - * @returns {string} The combined URL - */ -function combineURLs(baseURL, relativeURL) { - return relativeURL - ? baseURL.replace(/\/?\/$/, '') + '/' + relativeURL.replace(/^\/+/, '') - : baseURL; + const passed = startedAt && now - startedAt; + + return passed ? Math.round(bytesCount * 1000 / passed) : undefined; + }; } /** - * Creates a new URL by combining the baseURL with the requestedURL, - * only when the requestedURL is not already an absolute URL. - * If the requestURL is absolute, this function returns the requestedURL untouched. - * - * @param {string} baseURL The base URL - * @param {string} requestedURL Absolute or relative URL to combine - * - * @returns {string} The combined full path + * Throttle decorator + * @param {Function} fn + * @param {Number} freq + * @return {Function} */ -function buildFullPath(baseURL, requestedURL) { - if (baseURL && !isAbsoluteURL(requestedURL)) { - return combineURLs(baseURL, requestedURL); - } - return requestedURL; +function throttle(fn, freq) { + let timestamp = 0; + let threshold = 1000 / freq; + let lastArgs; + let timer; + + const invoke = (args, now = Date.now()) => { + timestamp = now; + lastArgs = null; + if (timer) { + clearTimeout(timer); + timer = null; + } + fn.apply(null, args); + }; + + const throttled = (...args) => { + const now = Date.now(); + const passed = now - timestamp; + if ( passed >= threshold) { + invoke(args, now); + } else { + lastArgs = args; + if (!timer) { + timer = setTimeout(() => { + timer = null; + invoke(lastArgs); + }, threshold - passed); + } + } + }; + + const flush = () => lastArgs && invoke(lastArgs); + + return [throttled, flush]; } +const progressEventReducer = (listener, isDownloadStream, freq = 3) => { + let bytesNotified = 0; + const _speedometer = speedometer(50, 250); + + return throttle(e => { + const loaded = e.loaded; + const total = e.lengthComputable ? e.total : undefined; + const progressBytes = loaded - bytesNotified; + const rate = _speedometer(progressBytes); + const inRange = loaded <= total; + + bytesNotified = loaded; + + const data = { + loaded, + total, + progress: total ? (loaded / total) : undefined, + bytes: progressBytes, + rate: rate ? rate : undefined, + estimated: rate && total && inRange ? (total - loaded) / rate : undefined, + event: e, + lengthComputable: total != null, + [isDownloadStream ? 'download' : 'upload']: true + }; + + listener(data); + }, freq); +}; + +const progressEventDecorator = (total, throttled) => { + const lengthComputable = total != null; + + return [(loaded) => throttled[0]({ + lengthComputable, + total, + loaded + }), throttled[1]]; +}; + +const asyncDecorator = (fn) => (...args) => utils$1.asap(() => fn(...args)); + var isURLSameOrigin = platform.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.navigator && /(msie|trident)/i.test(platform.navigator.userAgent); const urlParsingNode = document.createElement('a'); let originURL; @@ -2117,137 +2223,267 @@ var isURLSameOrigin = platform.hasStandardBrowserEnv ? }; })(); -function parseProtocol(url) { - const match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url); - return match && match[1] || ''; -} - -/** - * Calculate data maxRate - * @param {Number} [samplesCount= 10] - * @param {Number} [min= 1000] - * @returns {Function} - */ -function speedometer(samplesCount, min) { - samplesCount = samplesCount || 10; - const bytes = new Array(samplesCount); - const timestamps = new Array(samplesCount); - let head = 0; - let tail = 0; - let firstSampleTS; - - min = min !== undefined ? min : 1000; - - return function push(chunkLength) { - const now = Date.now(); +var cookies = platform.hasStandardBrowserEnv ? - const startedAt = timestamps[tail]; + // Standard browser envs support document.cookie + { + write(name, value, expires, path, domain, secure) { + const cookie = [name + '=' + encodeURIComponent(value)]; - if (!firstSampleTS) { - firstSampleTS = now; - } + utils$1.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString()); - bytes[head] = chunkLength; - timestamps[head] = now; + utils$1.isString(path) && cookie.push('path=' + path); - let i = tail; - let bytesCount = 0; + utils$1.isString(domain) && cookie.push('domain=' + domain); - while (i !== head) { - bytesCount += bytes[i++]; - i = i % samplesCount; - } + secure === true && cookie.push('secure'); - head = (head + 1) % samplesCount; + document.cookie = cookie.join('; '); + }, - if (head === tail) { - tail = (tail + 1) % samplesCount; - } + read(name) { + const match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)')); + return (match ? decodeURIComponent(match[3]) : null); + }, - if (now - firstSampleTS < min) { - return; + remove(name) { + this.write(name, '', Date.now() - 86400000); } + } - const passed = startedAt && now - startedAt; + : - return passed ? Math.round(bytesCount * 1000 / passed) : undefined; + // Non-standard browser env (web workers, react-native) lack needed support. + { + write() {}, + read() { + return null; + }, + remove() {} }; -} - -function progressEventReducer(listener, isDownloadStream) { - let bytesNotified = 0; - const _speedometer = speedometer(50, 250); - return e => { - const loaded = e.loaded; - const total = e.lengthComputable ? e.total : undefined; - const progressBytes = loaded - bytesNotified; - const rate = _speedometer(progressBytes); - const inRange = loaded <= total; +/** + * Determines whether the specified URL is absolute + * + * @param {string} url The URL to test + * + * @returns {boolean} True if the specified URL is absolute, otherwise false + */ +function isAbsoluteURL(url) { + // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL). + // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed + // by any combination of letters, digits, plus, period, or hyphen. + return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url); +} - bytesNotified = loaded; +/** + * Creates a new URL by combining the specified URLs + * + * @param {string} baseURL The base URL + * @param {string} relativeURL The relative URL + * + * @returns {string} The combined URL + */ +function combineURLs(baseURL, relativeURL) { + return relativeURL + ? baseURL.replace(/\/?\/$/, '') + '/' + relativeURL.replace(/^\/+/, '') + : baseURL; +} - const data = { - loaded, - total, - progress: total ? (loaded / total) : undefined, - bytes: progressBytes, - rate: rate ? rate : undefined, - estimated: rate && total && inRange ? (total - loaded) / rate : undefined, - event: e - }; +/** + * Creates a new URL by combining the baseURL with the requestedURL, + * only when the requestedURL is not already an absolute URL. + * If the requestURL is absolute, this function returns the requestedURL untouched. + * + * @param {string} baseURL The base URL + * @param {string} requestedURL Absolute or relative URL to combine + * + * @returns {string} The combined full path + */ +function buildFullPath(baseURL, requestedURL) { + if (baseURL && !isAbsoluteURL(requestedURL)) { + return combineURLs(baseURL, requestedURL); + } + return requestedURL; +} - data[isDownloadStream ? 'download' : 'upload'] = true; +const headersToObject = (thing) => thing instanceof AxiosHeaders$1 ? { ...thing } : thing; - listener(data); +/** + * Config-specific merge-function which creates a new config-object + * by merging two configuration objects together. + * + * @param {Object} config1 + * @param {Object} config2 + * + * @returns {Object} New object resulting from merging config2 to config1 + */ +function mergeConfig$1(config1, config2) { + // eslint-disable-next-line no-param-reassign + config2 = config2 || {}; + const config = {}; + + function getMergedValue(target, source, caseless) { + if (utils$1.isPlainObject(target) && utils$1.isPlainObject(source)) { + return utils$1.merge.call({caseless}, target, source); + } else if (utils$1.isPlainObject(source)) { + return utils$1.merge({}, source); + } else if (utils$1.isArray(source)) { + return source.slice(); + } + return source; + } + + // eslint-disable-next-line consistent-return + function mergeDeepProperties(a, b, caseless) { + if (!utils$1.isUndefined(b)) { + return getMergedValue(a, b, caseless); + } else if (!utils$1.isUndefined(a)) { + return getMergedValue(undefined, a, caseless); + } + } + + // eslint-disable-next-line consistent-return + function valueFromConfig2(a, b) { + if (!utils$1.isUndefined(b)) { + return getMergedValue(undefined, b); + } + } + + // eslint-disable-next-line consistent-return + function defaultToConfig2(a, b) { + if (!utils$1.isUndefined(b)) { + return getMergedValue(undefined, b); + } else if (!utils$1.isUndefined(a)) { + return getMergedValue(undefined, a); + } + } + + // eslint-disable-next-line consistent-return + function mergeDirectKeys(a, b, prop) { + if (prop in config2) { + return getMergedValue(a, b); + } else if (prop in config1) { + return getMergedValue(undefined, a); + } + } + + const mergeMap = { + url: valueFromConfig2, + method: valueFromConfig2, + data: valueFromConfig2, + baseURL: defaultToConfig2, + transformRequest: defaultToConfig2, + transformResponse: defaultToConfig2, + paramsSerializer: defaultToConfig2, + timeout: defaultToConfig2, + timeoutMessage: defaultToConfig2, + withCredentials: defaultToConfig2, + withXSRFToken: defaultToConfig2, + adapter: defaultToConfig2, + responseType: defaultToConfig2, + xsrfCookieName: defaultToConfig2, + xsrfHeaderName: defaultToConfig2, + onUploadProgress: defaultToConfig2, + onDownloadProgress: defaultToConfig2, + decompress: defaultToConfig2, + maxContentLength: defaultToConfig2, + maxBodyLength: defaultToConfig2, + beforeRedirect: defaultToConfig2, + transport: defaultToConfig2, + httpAgent: defaultToConfig2, + httpsAgent: defaultToConfig2, + cancelToken: defaultToConfig2, + socketPath: defaultToConfig2, + responseEncoding: defaultToConfig2, + validateStatus: mergeDirectKeys, + headers: (a, b) => mergeDeepProperties(headersToObject(a), headersToObject(b), true) }; + + utils$1.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) { + const merge = mergeMap[prop] || mergeDeepProperties; + const configValue = merge(config1[prop], config2[prop], prop); + (utils$1.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue); + }); + + return config; } -const isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined'; +var resolveConfig = (config) => { + const newConfig = mergeConfig$1({}, config); -var xhrAdapter = isXHRAdapterSupported && function (config) { - return new Promise(function dispatchXhrRequest(resolve, reject) { - let requestData = config.data; - const requestHeaders = AxiosHeaders$1.from(config.headers).normalize(); - let {responseType, withXSRFToken} = config; - let onCanceled; - function done() { - if (config.cancelToken) { - config.cancelToken.unsubscribe(onCanceled); - } + let {data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth} = newConfig; - if (config.signal) { - config.signal.removeEventListener('abort', onCanceled); - } + newConfig.headers = headers = AxiosHeaders$1.from(headers); + + newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url), config.params, config.paramsSerializer); + + // HTTP basic authentication + if (auth) { + headers.set('Authorization', 'Basic ' + + btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : '')) + ); + } + + let contentType; + + if (utils$1.isFormData(data)) { + if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) { + headers.setContentType(undefined); // Let the browser set it + } else if ((contentType = headers.getContentType()) !== false) { + // fix semicolon duplication issue for ReactNative FormData implementation + const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : []; + headers.setContentType([type || 'multipart/form-data', ...tokens].join('; ')); } + } + + // Add xsrf header + // This is only done if running in a standard browser environment. + // Specifically not if we're in a web worker, or react-native. + + if (platform.hasStandardBrowserEnv) { + withXSRFToken && utils$1.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig)); - let contentType; + if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) { + // Add xsrf header + const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName); - if (utils$1.isFormData(requestData)) { - if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) { - requestHeaders.setContentType(false); // Let the browser set it - } else if ((contentType = requestHeaders.getContentType()) !== false) { - // fix semicolon duplication issue for ReactNative FormData implementation - const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : []; - requestHeaders.setContentType([type || 'multipart/form-data', ...tokens].join('; ')); + if (xsrfValue) { + headers.set(xsrfHeaderName, xsrfValue); } } + } - let request = new XMLHttpRequest(); + return newConfig; +}; + +const isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined'; + +var xhrAdapter = isXHRAdapterSupported && function (config) { + return new Promise(function dispatchXhrRequest(resolve, reject) { + const _config = resolveConfig(config); + let requestData = _config.data; + const requestHeaders = AxiosHeaders$1.from(_config.headers).normalize(); + let {responseType, onUploadProgress, onDownloadProgress} = _config; + let onCanceled; + let uploadThrottled, downloadThrottled; + let flushUpload, flushDownload; + + function done() { + flushUpload && flushUpload(); // flush events + flushDownload && flushDownload(); // flush events + + _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled); - // HTTP basic authentication - if (config.auth) { - const username = config.auth.username || ''; - const password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : ''; - requestHeaders.set('Authorization', 'Basic ' + btoa(username + ':' + password)); + _config.signal && _config.signal.removeEventListener('abort', onCanceled); } - const fullPath = buildFullPath(config.baseURL, config.url); + let request = new XMLHttpRequest(); - request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true); + request.open(_config.method.toUpperCase(), _config.url, true); // Set the request timeout in MS - request.timeout = config.timeout; + request.timeout = _config.timeout; function onloadend() { if (!request) { @@ -2309,7 +2545,7 @@ var xhrAdapter = isXHRAdapterSupported && function (config) { return; } - reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request)); + reject(new AxiosError$1('Request aborted', AxiosError$1.ECONNABORTED, config, request)); // Clean up request request = null; @@ -2319,7 +2555,7 @@ var xhrAdapter = isXHRAdapterSupported && function (config) { request.onerror = function handleError() { // Real errors are hidden from us by the browser // onerror should only fire if it's a network error - reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request)); + reject(new AxiosError$1('Network Error', AxiosError$1.ERR_NETWORK, config, request)); // Clean up request request = null; @@ -2327,14 +2563,14 @@ var xhrAdapter = isXHRAdapterSupported && function (config) { // Handle timeout request.ontimeout = function handleTimeout() { - let timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded'; - const transitional = config.transitional || transitionalDefaults; - if (config.timeoutErrorMessage) { - timeoutErrorMessage = config.timeoutErrorMessage; + let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded'; + const transitional = _config.transitional || transitionalDefaults; + if (_config.timeoutErrorMessage) { + timeoutErrorMessage = _config.timeoutErrorMessage; } - reject(new AxiosError( + reject(new AxiosError$1( timeoutErrorMessage, - transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED, + transitional.clarifyTimeoutError ? AxiosError$1.ETIMEDOUT : AxiosError$1.ECONNABORTED, config, request)); @@ -2342,22 +2578,6 @@ var xhrAdapter = isXHRAdapterSupported && function (config) { request = null; }; - // Add xsrf header - // This is only done if running in a standard browser environment. - // Specifically not if we're in a web worker, or react-native. - if(platform.hasStandardBrowserEnv) { - withXSRFToken && utils$1.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(config)); - - if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(fullPath))) { - // Add xsrf header - const xsrfValue = config.xsrfHeaderName && config.xsrfCookieName && cookies.read(config.xsrfCookieName); - - if (xsrfValue) { - requestHeaders.set(config.xsrfHeaderName, xsrfValue); - } - } - } - // Remove Content-Type if data is undefined requestData === undefined && requestHeaders.setContentType(null); @@ -2369,47 +2589,52 @@ var xhrAdapter = isXHRAdapterSupported && function (config) { } // Add withCredentials to request if needed - if (!utils$1.isUndefined(config.withCredentials)) { - request.withCredentials = !!config.withCredentials; + if (!utils$1.isUndefined(_config.withCredentials)) { + request.withCredentials = !!_config.withCredentials; } // Add responseType to request if needed if (responseType && responseType !== 'json') { - request.responseType = config.responseType; + request.responseType = _config.responseType; } // Handle progress if needed - if (typeof config.onDownloadProgress === 'function') { - request.addEventListener('progress', progressEventReducer(config.onDownloadProgress, true)); + if (onDownloadProgress) { + ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true)); + request.addEventListener('progress', downloadThrottled); } // Not all browsers support upload events - if (typeof config.onUploadProgress === 'function' && request.upload) { - request.upload.addEventListener('progress', progressEventReducer(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) { + if (_config.cancelToken || _config.signal) { // Handle cancellation // eslint-disable-next-line func-names onCanceled = cancel => { if (!request) { return; } - reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel); + reject(!cancel || cancel.type ? new CanceledError$1(null, config, request) : cancel); request.abort(); request = null; }; - config.cancelToken && config.cancelToken.subscribe(onCanceled); - if (config.signal) { - config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled); + _config.cancelToken && _config.cancelToken.subscribe(onCanceled); + if (_config.signal) { + _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled); } } - const protocol = parseProtocol(fullPath); + const protocol = parseProtocol(_config.url); if (protocol && platform.protocols.indexOf(protocol) === -1) { - reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config)); + reject(new AxiosError$1('Unsupported protocol ' + protocol + ':', AxiosError$1.ERR_BAD_REQUEST, config)); return; } @@ -2419,9 +2644,358 @@ var xhrAdapter = isXHRAdapterSupported && function (config) { }); }; +const composeSignals = (signals, timeout) => { + const {length} = (signals = signals ? signals.filter(Boolean) : []); + + if (timeout || length) { + let controller = new AbortController(); + + let aborted; + + const onabort = function (reason) { + if (!aborted) { + aborted = true; + unsubscribe(); + const err = reason instanceof Error ? reason : this.reason; + controller.abort(err instanceof AxiosError$1 ? err : new CanceledError$1(err instanceof Error ? err.message : err)); + } + }; + + let timer = timeout && setTimeout(() => { + timer = null; + onabort(new AxiosError$1(`timeout ${timeout} of ms exceeded`, AxiosError$1.ETIMEDOUT)); + }, timeout); + + const unsubscribe = () => { + if (signals) { + timer && clearTimeout(timer); + timer = null; + signals.forEach(signal => { + signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort); + }); + signals = null; + } + }; + + signals.forEach((signal) => signal.addEventListener('abort', onabort)); + + const {signal} = controller; + + signal.unsubscribe = () => utils$1.asap(unsubscribe); + + return signal; + } +}; + +const streamChunk = function* (chunk, chunkSize) { + let len = chunk.byteLength; + + if (len < chunkSize) { + yield chunk; + return; + } + + let pos = 0; + let end; + + while (pos < len) { + end = pos + chunkSize; + yield chunk.slice(pos, end); + pos = end; + } +}; + +const readBytes = async function* (iterable, chunkSize) { + for await (const chunk of readStream(iterable)) { + yield* streamChunk(chunk, chunkSize); + } +}; + +const readStream = async function* (stream) { + if (stream[Symbol.asyncIterator]) { + yield* stream; + return; + } + + const reader = stream.getReader(); + try { + for (;;) { + const {done, value} = await reader.read(); + if (done) { + break; + } + yield value; + } + } finally { + await reader.cancel(); + } +}; + +const trackStream = (stream, chunkSize, onProgress, onFinish) => { + const iterator = readBytes(stream, chunkSize); + + let bytes = 0; + let done; + let _onFinish = (e) => { + if (!done) { + done = true; + onFinish && onFinish(e); + } + }; + + return new ReadableStream({ + async pull(controller) { + try { + const {done, value} = await iterator.next(); + + if (done) { + _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; + } + }, + cancel(reason) { + _onFinish(reason); + return iterator.return(); + } + }, { + highWaterMark: 2 + }) +}; + +const isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function'; +const isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function'; + +// used only inside the fetch adapter +const encodeText = isFetchSupported && (typeof TextEncoder === 'function' ? + ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) : + async (str) => new Uint8Array(await new Response(str).arrayBuffer()) +); + +const test = (fn, ...args) => { + try { + return !!fn(...args); + } catch (e) { + return false + } +}; + +const supportsRequestStream = isReadableStreamSupported && test(() => { + let duplexAccessed = false; + + const hasContentType = new Request(platform.origin, { + body: new ReadableStream(), + method: 'POST', + get duplex() { + duplexAccessed = true; + return 'half'; + }, + }).headers.has('Content-Type'); + + return duplexAccessed && !hasContentType; +}); + +const DEFAULT_CHUNK_SIZE = 64 * 1024; + +const supportsResponseStream = isReadableStreamSupported && + test(() => utils$1.isReadableStream(new Response('').body)); + + +const resolvers = { + stream: supportsResponseStream && ((res) => res.body) +}; + +isFetchSupported && (((res) => { + ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => { + !resolvers[type] && (resolvers[type] = utils$1.isFunction(res[type]) ? (res) => res[type]() : + (_, config) => { + throw new AxiosError$1(`Response type '${type}' is not supported`, AxiosError$1.ERR_NOT_SUPPORT, config); + }); + }); +})(new Response)); + +const getBodyLength = async (body) => { + if (body == null) { + return 0; + } + + if(utils$1.isBlob(body)) { + return body.size; + } + + if(utils$1.isSpecCompliantForm(body)) { + const _request = new Request(platform.origin, { + method: 'POST', + body, + }); + return (await _request.arrayBuffer()).byteLength; + } + + if(utils$1.isArrayBufferView(body) || utils$1.isArrayBuffer(body)) { + return body.byteLength; + } + + if(utils$1.isURLSearchParams(body)) { + body = body + ''; + } + + if(utils$1.isString(body)) { + return (await encodeText(body)).byteLength; + } +}; + +const resolveBodyLength = async (headers, body) => { + const length = utils$1.toFiniteNumber(headers.getContentLength()); + + return length == null ? getBodyLength(body) : length; +}; + +var fetchAdapter = isFetchSupported && (async (config) => { + let { + url, + method, + data, + signal, + cancelToken, + timeout, + onDownloadProgress, + onUploadProgress, + responseType, + headers, + withCredentials = 'same-origin', + fetchOptions + } = resolveConfig(config); + + responseType = responseType ? (responseType + '').toLowerCase() : 'text'; + + let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout); + + let request; + + const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => { + composedSignal.unsubscribe(); + }); + + let requestContentLength; + + try { + if ( + onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' && + (requestContentLength = await resolveBodyLength(headers, data)) !== 0 + ) { + let _request = new Request(url, { + method: 'POST', + body: data, + duplex: "half" + }); + + let contentTypeHeader; + + if (utils$1.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) { + headers.setContentType(contentTypeHeader); + } + + if (_request.body) { + const [onProgress, flush] = progressEventDecorator( + requestContentLength, + progressEventReducer(asyncDecorator(onUploadProgress)) + ); + + data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush); + } + } + + if (!utils$1.isString(withCredentials)) { + withCredentials = withCredentials ? 'include' : 'omit'; + } + + // Cloudflare Workers throws when credentials are defined + // see https://github.com/cloudflare/workerd/issues/902 + const isCredentialsSupported = "credentials" in Request.prototype; + request = new Request(url, { + ...fetchOptions, + signal: composedSignal, + method: method.toUpperCase(), + headers: headers.normalize().toJSON(), + body: data, + duplex: "half", + credentials: isCredentialsSupported ? withCredentials : undefined + }); + + let response = await fetch(request); + + const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response'); + + if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) { + const options = {}; + + ['status', 'statusText', 'headers'].forEach(prop => { + options[prop] = response[prop]; + }); + + const responseContentLength = utils$1.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, onProgress, () => { + flush && flush(); + unsubscribe && unsubscribe(); + }), + options + ); + } + + responseType = responseType || 'text'; + + let responseData = await resolvers[utils$1.findKey(resolvers, responseType) || 'text'](response, config); + + !isStreamResponse && unsubscribe && unsubscribe(); + + return await new Promise((resolve, reject) => { + settle(resolve, reject, { + data: responseData, + headers: AxiosHeaders$1.from(response.headers), + status: response.status, + statusText: response.statusText, + config, + request + }); + }) + } catch (err) { + unsubscribe && unsubscribe(); + + if (err && err.name === 'TypeError' && /fetch/i.test(err.message)) { + throw Object.assign( + new AxiosError$1('Network Error', AxiosError$1.ERR_NETWORK, config, request), + { + cause: err.cause || err + } + ) + } + + throw AxiosError$1.from(err, err && err.code, config, request); + } +}); + const knownAdapters = { http: httpAdapter, - xhr: xhrAdapter + xhr: xhrAdapter, + fetch: fetchAdapter }; utils$1.forEach(knownAdapters, (fn, value) => { @@ -2459,7 +3033,7 @@ var adapters = { adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()]; if (adapter === undefined) { - throw new AxiosError(`Unknown adapter '${id}'`); + throw new AxiosError$1(`Unknown adapter '${id}'`); } } @@ -2481,7 +3055,7 @@ var adapters = { (reasons.length > 1 ? 'since :\n' + reasons.map(renderReason).join('\n') : ' ' + renderReason(reasons[0])) : 'as no adapter specified'; - throw new AxiosError( + throw new AxiosError$1( `There is no suitable adapter to dispatch the request ` + s, 'ERR_NOT_SUPPORT' ); @@ -2505,7 +3079,7 @@ function throwIfCancellationRequested(config) { } if (config.signal && config.signal.aborted) { - throw new CanceledError(null, config); + throw new CanceledError$1(null, config); } } @@ -2531,7 +3105,7 @@ function dispatchRequest(config) { config.headers.setContentType('application/x-www-form-urlencoded', false); } - const adapter = adapters.getAdapter(config.adapter || defaults$1.adapter); + const adapter = adapters.getAdapter(config.adapter || defaults.adapter); return adapter(config).then(function onAdapterResolution(response) { throwIfCancellationRequested(config); @@ -2547,7 +3121,7 @@ function dispatchRequest(config) { return response; }, function onAdapterRejection(reason) { - if (!isCancel(reason)) { + if (!isCancel$1(reason)) { throwIfCancellationRequested(config); // Transform response data @@ -2565,109 +3139,7 @@ function dispatchRequest(config) { }); } -const headersToObject = (thing) => thing instanceof AxiosHeaders$1 ? { ...thing } : thing; - -/** - * Config-specific merge-function which creates a new config-object - * by merging two configuration objects together. - * - * @param {Object} config1 - * @param {Object} config2 - * - * @returns {Object} New object resulting from merging config2 to config1 - */ -function mergeConfig(config1, config2) { - // eslint-disable-next-line no-param-reassign - config2 = config2 || {}; - const config = {}; - - function getMergedValue(target, source, caseless) { - if (utils$1.isPlainObject(target) && utils$1.isPlainObject(source)) { - return utils$1.merge.call({caseless}, target, source); - } else if (utils$1.isPlainObject(source)) { - return utils$1.merge({}, source); - } else if (utils$1.isArray(source)) { - return source.slice(); - } - return source; - } - - // eslint-disable-next-line consistent-return - function mergeDeepProperties(a, b, caseless) { - if (!utils$1.isUndefined(b)) { - return getMergedValue(a, b, caseless); - } else if (!utils$1.isUndefined(a)) { - return getMergedValue(undefined, a, caseless); - } - } - - // eslint-disable-next-line consistent-return - function valueFromConfig2(a, b) { - if (!utils$1.isUndefined(b)) { - return getMergedValue(undefined, b); - } - } - - // eslint-disable-next-line consistent-return - function defaultToConfig2(a, b) { - if (!utils$1.isUndefined(b)) { - return getMergedValue(undefined, b); - } else if (!utils$1.isUndefined(a)) { - return getMergedValue(undefined, a); - } - } - - // eslint-disable-next-line consistent-return - function mergeDirectKeys(a, b, prop) { - if (prop in config2) { - return getMergedValue(a, b); - } else if (prop in config1) { - return getMergedValue(undefined, a); - } - } - - const mergeMap = { - url: valueFromConfig2, - method: valueFromConfig2, - data: valueFromConfig2, - baseURL: defaultToConfig2, - transformRequest: defaultToConfig2, - transformResponse: defaultToConfig2, - paramsSerializer: defaultToConfig2, - timeout: defaultToConfig2, - timeoutMessage: defaultToConfig2, - withCredentials: defaultToConfig2, - withXSRFToken: defaultToConfig2, - adapter: defaultToConfig2, - responseType: defaultToConfig2, - xsrfCookieName: defaultToConfig2, - xsrfHeaderName: defaultToConfig2, - onUploadProgress: defaultToConfig2, - onDownloadProgress: defaultToConfig2, - decompress: defaultToConfig2, - maxContentLength: defaultToConfig2, - maxBodyLength: defaultToConfig2, - beforeRedirect: defaultToConfig2, - transport: defaultToConfig2, - httpAgent: defaultToConfig2, - httpsAgent: defaultToConfig2, - cancelToken: defaultToConfig2, - socketPath: defaultToConfig2, - responseEncoding: defaultToConfig2, - validateStatus: mergeDirectKeys, - headers: (a, b) => mergeDeepProperties(headersToObject(a), headersToObject(b), true) - }; - - utils$1.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) { - const merge = mergeMap[prop] || mergeDeepProperties; - const configValue = merge(config1[prop], config2[prop], prop); - (utils$1.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue); - }); - - return config; -} - -const VERSION = "1.6.8"; +const VERSION$1 = "1.7.7"; const validators$1 = {}; @@ -2691,15 +3163,15 @@ const deprecatedWarnings = {}; */ validators$1.transitional = function transitional(validator, version, message) { function formatMessage(opt, desc) { - return '[Axios v' + VERSION + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : ''); + return '[Axios v' + VERSION$1 + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : ''); } // eslint-disable-next-line func-names return (value, opt, opts) => { if (validator === false) { - throw new AxiosError( + throw new AxiosError$1( formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')), - AxiosError.ERR_DEPRECATED + AxiosError$1.ERR_DEPRECATED ); } @@ -2730,7 +3202,7 @@ validators$1.transitional = function transitional(validator, version, message) { function assertOptions(options, schema, allowUnknown) { if (typeof options !== 'object') { - throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE); + throw new AxiosError$1('options must be an object', AxiosError$1.ERR_BAD_OPTION_VALUE); } const keys = Object.keys(options); let i = keys.length; @@ -2741,12 +3213,12 @@ function assertOptions(options, schema, allowUnknown) { const value = options[opt]; const result = value === undefined || validator(value, opt, options); if (result !== true) { - throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE); + throw new AxiosError$1('option ' + opt + ' must be ' + result, AxiosError$1.ERR_BAD_OPTION_VALUE); } continue; } if (allowUnknown !== true) { - throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION); + throw new AxiosError$1('Unknown option ' + opt, AxiosError$1.ERR_BAD_OPTION); } } } @@ -2765,7 +3237,7 @@ const validators = validator.validators; * * @return {Axios} A new instance of Axios */ -class Axios { +let Axios$1 = class Axios { constructor(instanceConfig) { this.defaults = instanceConfig; this.interceptors = { @@ -2793,12 +3265,15 @@ class Axios { // slice off the Error: ... line const stack = dummy.stack ? dummy.stack.replace(/^.+\n/, '') : ''; - - if (!err.stack) { - err.stack = stack; - // match without the 2 top stack lines - } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\n.+\n/, ''))) { - err.stack += '\n' + stack; + try { + if (!err.stack) { + err.stack = stack; + // match without the 2 top stack lines + } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\n.+\n/, ''))) { + err.stack += '\n' + stack; + } + } catch (e) { + // ignore the case where "stack" is an un-writable property } } @@ -2816,7 +3291,7 @@ class Axios { config = configOrUrl || {}; } - config = mergeConfig(this.defaults, config); + config = mergeConfig$1(this.defaults, config); const {transitional, paramsSerializer, headers} = config; @@ -2930,17 +3405,17 @@ class Axios { } getUri(config) { - config = mergeConfig(this.defaults, config); + config = mergeConfig$1(this.defaults, config); const fullPath = buildFullPath(config.baseURL, config.url); return buildURL(fullPath, config.params, config.paramsSerializer); } -} +}; // Provide aliases for supported request methods utils$1.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) { /*eslint func-names:0*/ - Axios.prototype[method] = function(url, config) { - return this.request(mergeConfig(config || {}, { + Axios$1.prototype[method] = function(url, config) { + return this.request(mergeConfig$1(config || {}, { method, url, data: (config || {}).data @@ -2953,7 +3428,7 @@ utils$1.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) function generateHTTPMethod(isForm) { return function httpMethod(url, data, config) { - return this.request(mergeConfig(config || {}, { + return this.request(mergeConfig$1(config || {}, { method, headers: isForm ? { 'Content-Type': 'multipart/form-data' @@ -2964,13 +3439,11 @@ utils$1.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) }; } - Axios.prototype[method] = generateHTTPMethod(); + Axios$1.prototype[method] = generateHTTPMethod(); - Axios.prototype[method + 'Form'] = generateHTTPMethod(true); + Axios$1.prototype[method + 'Form'] = generateHTTPMethod(true); }); -var Axios$1 = Axios; - /** * A `CancelToken` is an object that can be used to request cancellation of an operation. * @@ -2978,7 +3451,7 @@ var Axios$1 = Axios; * * @returns {CancelToken} */ -class CancelToken { +let CancelToken$1 = class CancelToken { constructor(executor) { if (typeof executor !== 'function') { throw new TypeError('executor must be a function.'); @@ -3026,7 +3499,7 @@ class CancelToken { return; } - token.reason = new CanceledError(message, config, request); + token.reason = new CanceledError$1(message, config, request); resolvePromise(token.reason); }); } @@ -3071,6 +3544,20 @@ class CancelToken { } } + toAbortSignal() { + const controller = new AbortController(); + + const abort = (err) => { + controller.abort(err); + }; + + this.subscribe(abort); + + controller.signal.unsubscribe = () => this.unsubscribe(abort); + + return controller.signal; + } + /** * Returns an object that contains a new `CancelToken` and a function that, when called, * cancels the `CancelToken`. @@ -3085,9 +3572,7 @@ class CancelToken { cancel }; } -} - -var CancelToken$1 = CancelToken; +}; /** * Syntactic sugar for invoking a function and expanding an array for arguments. @@ -3110,7 +3595,7 @@ var CancelToken$1 = CancelToken; * * @returns {Function} */ -function spread(callback) { +function spread$1(callback) { return function wrap(arr) { return callback.apply(null, arr); }; @@ -3123,11 +3608,11 @@ function spread(callback) { * * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false */ -function isAxiosError(payload) { +function isAxiosError$1(payload) { return utils$1.isObject(payload) && (payload.isAxiosError === true); } -const HttpStatusCode = { +const HttpStatusCode$1 = { Continue: 100, SwitchingProtocols: 101, Processing: 102, @@ -3193,12 +3678,10 @@ const HttpStatusCode = { NetworkAuthenticationRequired: 511, }; -Object.entries(HttpStatusCode).forEach(([key, value]) => { - HttpStatusCode[value] = key; +Object.entries(HttpStatusCode$1).forEach(([key, value]) => { + HttpStatusCode$1[value] = key; }); -var HttpStatusCode$1 = HttpStatusCode; - /** * Create an instance of Axios * @@ -3218,27 +3701,27 @@ function createInstance(defaultConfig) { // Factory for creating new instances instance.create = function create(instanceConfig) { - return createInstance(mergeConfig(defaultConfig, instanceConfig)); + return createInstance(mergeConfig$1(defaultConfig, instanceConfig)); }; return instance; } // Create the default instance to be exported -const axios = createInstance(defaults$1); +const axios = createInstance(defaults); // Expose Axios class to allow class inheritance axios.Axios = Axios$1; // Expose Cancel & CancelToken -axios.CanceledError = CanceledError; +axios.CanceledError = CanceledError$1; axios.CancelToken = CancelToken$1; -axios.isCancel = isCancel; -axios.VERSION = VERSION; -axios.toFormData = toFormData; +axios.isCancel = isCancel$1; +axios.VERSION = VERSION$1; +axios.toFormData = toFormData$1; // Expose AxiosError class -axios.AxiosError = AxiosError; +axios.AxiosError = AxiosError$1; // alias for CanceledError for backward compatibility axios.Cancel = axios.CanceledError; @@ -3248,13 +3731,13 @@ axios.all = function all(promises) { return Promise.all(promises); }; -axios.spread = spread; +axios.spread = spread$1; // Expose isAxiosError -axios.isAxiosError = isAxiosError; +axios.isAxiosError = isAxiosError$1; // Expose mergeConfig -axios.mergeConfig = mergeConfig; +axios.mergeConfig = mergeConfig$1; axios.AxiosHeaders = AxiosHeaders$1; @@ -3266,153 +3749,274 @@ axios.HttpStatusCode = HttpStatusCode$1; axios.default = axios; -var ds=Object.defineProperty;var zg=Object.getOwnPropertyDescriptor;var Kg=Object.getOwnPropertyNames;var Gg=Object.prototype.hasOwnProperty;var we=(t,e)=>()=>(t&&(e=t(t=0)),e);var M=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),Qt=(t,e)=>{for(var r in e)ds(t,r,{get:e[r],enumerable:!0});},Qg=(t,e,r,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Kg(e))!Gg.call(t,n)&&n!==r&&ds(t,n,{get:()=>e[n],enumerable:!(i=zg(e,n))||i.enumerable});return t};var X=t=>Qg(ds({},"__esModule",{value:!0}),t);var B,_=we(()=>{B={deviceMemory:8,hardwareConcurrency:8,language:"en-US"};});var P={};Qt(P,{_debugEnd:()=>yu,_debugProcess:()=>gu,_events:()=>ku,_eventsCount:()=>xu,_exiting:()=>Yl,_fatalExceptions:()=>cu,_getActiveHandles:()=>eu,_getActiveRequests:()=>Zl,_kill:()=>ru,_linkedBinding:()=>Gl,_maxListeners:()=>Ou,_preload_modules:()=>Cu,_rawDebug:()=>zl,_startProfilerIdleNotifier:()=>bu,_stopProfilerIdleNotifier:()=>wu,_tickCallback:()=>pu,abort:()=>Eu,addListener:()=>Mu,allowedNodeEnvironmentFlags:()=>lu,arch:()=>xl,argv:()=>Ul,argv0:()=>Ru,assert:()=>uu,binding:()=>Fl,chdir:()=>Hl,config:()=>Jl,cpuUsage:()=>Fi,cwd:()=>$l,debugPort:()=>Tu,default:()=>$u,dlopen:()=>Xl,domain:()=>Ql,emit:()=>Du,emitWarning:()=>jl,env:()=>Ll,execArgv:()=>Nl,execPath:()=>Iu,exit:()=>ou,features:()=>fu,hasUncaughtExceptionCaptureCallback:()=>du,hrtime:()=>ji,kill:()=>su,listeners:()=>Wu,memoryUsage:()=>nu,moduleLoadList:()=>Kl,nextTick:()=>Pl,off:()=>Uu,on:()=>bt,once:()=>Lu,openStdin:()=>au,pid:()=>Su,platform:()=>Ml,ppid:()=>Au,prependListener:()=>ju,prependOnceListener:()=>Fu,reallyExit:()=>tu,release:()=>Vl,removeAllListeners:()=>qu,removeListener:()=>Nu,resourceUsage:()=>iu,setSourceMapsEnabled:()=>Bu,setUncaughtExceptionCaptureCallback:()=>hu,stderr:()=>mu,stdin:()=>vu,stdout:()=>_u,title:()=>kl,umask:()=>Wl,uptime:()=>Pu,version:()=>ql,versions:()=>Dl});function ys(t){throw new Error("Node.js process "+t+" is not supported by JSPM core outside of Node.js")}function Yg(){!xr||!Yt||(xr=!1,Yt.length?yt=Yt.concat(yt):Di=-1,yt.length&&Bl());}function Bl(){if(!xr){var t=setTimeout(Yg,0);xr=!0;for(var e=yt.length;e;){for(Yt=yt,yt=[];++Di1)for(var r=1;r{v();m();_();yt=[],xr=!1,Di=-1;Ol.prototype.run=function(){this.fun.apply(null,this.array);};kl="browser",xl="x64",Ml="browser",Ll={PATH:"/usr/bin",LANG:B.language+".UTF-8",PWD:"/",HOME:"/home",TMP:"/tmp"},Ul=["/usr/bin/node"],Nl=[],ql="v16.8.0",Dl={},jl=function(t,e){console.warn((e?e+": ":"")+t);},Fl=function(t){ys("binding");},Wl=function(t){return 0},$l=function(){return "/"},Hl=function(t){},Vl={name:"node",sourceUrl:"",headersUrl:"",libUrl:""};zl=ve,Kl=[];Ql={},Yl=!1,Jl={};tu=ve,ru=ve,Fi=function(){return {}},iu=Fi,nu=Fi,su=ve,ou=ve,au=ve,lu={};fu={inspector:!1,debug:!1,uv:!1,ipv6:!1,tls_alpn:!1,tls_sni:!1,tls_ocsp:!1,tls:!1,cached_builtins:!0},cu=ve,hu=ve;pu=ve,gu=ve,yu=ve,bu=ve,wu=ve,_u=void 0,mu=void 0,vu=void 0,Eu=ve,Su=2,Au=1,Iu="/bin/usr/node",Tu=9229,Ru="node",Cu=[],Bu=ve,Mt={now:typeof performance<"u"?performance.now.bind(performance):void 0,timing:typeof performance<"u"?performance.timing:void 0};Mt.now===void 0&&(ps=Date.now(),Mt.timing&&Mt.timing.navigationStart&&(ps=Mt.timing.navigationStart),Mt.now=()=>Date.now()-ps);gs=1e9;ji.bigint=function(t){var e=ji(t);return typeof BigInt>"u"?e[0]*gs+e[1]:BigInt(e[0]*gs)+BigInt(e[1])};Ou=10,ku={},xu=0;Mu=bt,Lu=bt,Uu=bt,Nu=bt,qu=bt,Du=ve,ju=bt,Fu=bt;$u={version:ql,versions:Dl,arch:xl,platform:Ml,release:Vl,_rawDebug:zl,moduleLoadList:Kl,binding:Fl,_linkedBinding:Gl,_events:ku,_eventsCount:xu,_maxListeners:Ou,on:bt,addListener:Mu,once:Lu,off:Uu,removeListener:Nu,removeAllListeners:qu,emit:Du,prependListener:ju,prependOnceListener:Fu,listeners:Wu,domain:Ql,_exiting:Yl,config:Jl,dlopen:Xl,uptime:Pu,_getActiveRequests:Zl,_getActiveHandles:eu,reallyExit:tu,_kill:ru,cpuUsage:Fi,resourceUsage:iu,memoryUsage:nu,kill:su,exit:ou,openStdin:au,allowedNodeEnvironmentFlags:lu,assert:uu,features:fu,_fatalExceptions:cu,setUncaughtExceptionCaptureCallback:hu,hasUncaughtExceptionCaptureCallback:du,emitWarning:jl,nextTick:Pl,_tickCallback:pu,_debugProcess:gu,_debugEnd:yu,_startProfilerIdleNotifier:bu,_stopProfilerIdleNotifier:wu,stdout:_u,stdin:vu,stderr:mu,abort:Eu,umask:Wl,chdir:Hl,cwd:$l,env:Ll,title:kl,argv:Ul,execArgv:Nl,pid:Su,ppid:Au,execPath:Iu,debugPort:Tu,hrtime:ji,argv0:Ru,_preload_modules:Cu,setSourceMapsEnabled:Bu};});var m=we(()=>{Hu();});var _e={};Qt(_e,{Buffer:()=>x,INSPECT_MAX_BYTES:()=>ey,default:()=>Lt,kMaxLength:()=>ty});function Jg(){if(Vu)return ui;Vu=!0,ui.byteLength=a,ui.toByteArray=c,ui.fromByteArray=g;for(var t=[],e=[],r=typeof Uint8Array<"u"?Uint8Array:Array,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",n=0,o=i.length;n0)throw new Error("Invalid string. Length must be a multiple of 4");var E=y.indexOf("=");E===-1&&(E=w);var S=E===w?0:4-E%4;return [E,S]}function a(y){var w=s(y),E=w[0],S=w[1];return (E+S)*3/4-S}function u(y,w,E){return (w+E)*3/4-E}function c(y){var w,E=s(y),S=E[0],I=E[1],C=new r(u(y,S,I)),R=0,U=I>0?S-4:S,N;for(N=0;N>16&255,C[R++]=w>>8&255,C[R++]=w&255;return I===2&&(w=e[y.charCodeAt(N)]<<2|e[y.charCodeAt(N+1)]>>4,C[R++]=w&255),I===1&&(w=e[y.charCodeAt(N)]<<10|e[y.charCodeAt(N+1)]<<4|e[y.charCodeAt(N+2)]>>2,C[R++]=w>>8&255,C[R++]=w&255),C}function h(y){return t[y>>18&63]+t[y>>12&63]+t[y>>6&63]+t[y&63]}function d(y,w,E){for(var S,I=[],C=w;CU?U:R+C));return S===1?(w=y[E-1],I.push(t[w>>2]+t[w<<4&63]+"==")):S===2&&(w=(y[E-2]<<8)+y[E-1],I.push(t[w>>10]+t[w>>4&63]+t[w<<2&63]+"=")),I.join("")}return ui}function Xg(){if(zu)return Wi;zu=!0;return Wi.read=function(t,e,r,i,n){var o,s,a=n*8-i-1,u=(1<>1,h=-7,d=r?n-1:0,g=r?-1:1,y=t[e+d];for(d+=g,o=y&(1<<-h)-1,y>>=-h,h+=a;h>0;o=o*256+t[e+d],d+=g,h-=8);for(s=o&(1<<-h)-1,o>>=-h,h+=i;h>0;s=s*256+t[e+d],d+=g,h-=8);if(o===0)o=1-c;else {if(o===u)return s?NaN:(y?-1:1)*(1/0);s=s+Math.pow(2,i),o=o-c;}return (y?-1:1)*s*Math.pow(2,o-i)},Wi.write=function(t,e,r,i,n,o){var s,a,u,c=o*8-n-1,h=(1<>1,g=n===23?Math.pow(2,-24)-Math.pow(2,-77):0,y=i?0:o-1,w=i?1:-1,E=e<0||e===0&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=h):(s=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-s))<1&&(s--,u*=2),s+d>=1?e+=g/u:e+=g*Math.pow(2,1-d),e*u>=2&&(s++,u/=2),s+d>=h?(a=0,s=h):s+d>=1?(a=(e*u-1)*Math.pow(2,n),s=s+d):(a=e*Math.pow(2,d-1)*Math.pow(2,n),s=0));n>=8;t[r+y]=a&255,y+=w,a/=256,n-=8);for(s=s<0;t[r+y]=s&255,y+=w,s/=256,c-=8);t[r+y-w]|=E*128;},Wi}function Zg(){if(Ku)return Jt;Ku=!0;let t=Jg(),e=Xg(),r=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):null;Jt.Buffer=s,Jt.SlowBuffer=I,Jt.INSPECT_MAX_BYTES=50;let i=2147483647;Jt.kMaxLength=i,s.TYPED_ARRAY_SUPPORT=n(),!s.TYPED_ARRAY_SUPPORT&&typeof console<"u"&&typeof console.error=="function"&&console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.");function n(){try{let p=new Uint8Array(1),l={foo:function(){return 42}};return Object.setPrototypeOf(l,Uint8Array.prototype),Object.setPrototypeOf(p,l),p.foo()===42}catch{return !1}}Object.defineProperty(s.prototype,"parent",{enumerable:!0,get:function(){if(s.isBuffer(this))return this.buffer}}),Object.defineProperty(s.prototype,"offset",{enumerable:!0,get:function(){if(s.isBuffer(this))return this.byteOffset}});function o(p){if(p>i)throw new RangeError('The value "'+p+'" is invalid for option "size"');let l=new Uint8Array(p);return Object.setPrototypeOf(l,s.prototype),l}function s(p,l,f){if(typeof p=="number"){if(typeof l=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return h(p)}return a(p,l,f)}s.poolSize=8192;function a(p,l,f){if(typeof p=="string")return d(p,l);if(ArrayBuffer.isView(p))return y(p);if(p==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof p);if(Ye(p,ArrayBuffer)||p&&Ye(p.buffer,ArrayBuffer)||typeof SharedArrayBuffer<"u"&&(Ye(p,SharedArrayBuffer)||p&&Ye(p.buffer,SharedArrayBuffer)))return w(p,l,f);if(typeof p=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');let b=p.valueOf&&p.valueOf();if(b!=null&&b!==p)return s.from(b,l,f);let A=E(p);if(A)return A;if(typeof Symbol<"u"&&Symbol.toPrimitive!=null&&typeof p[Symbol.toPrimitive]=="function")return s.from(p[Symbol.toPrimitive]("string"),l,f);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof p)}s.from=function(p,l,f){return a(p,l,f)},Object.setPrototypeOf(s.prototype,Uint8Array.prototype),Object.setPrototypeOf(s,Uint8Array);function u(p){if(typeof p!="number")throw new TypeError('"size" argument must be of type number');if(p<0)throw new RangeError('The value "'+p+'" is invalid for option "size"')}function c(p,l,f){return u(p),p<=0?o(p):l!==void 0?typeof f=="string"?o(p).fill(l,f):o(p).fill(l):o(p)}s.alloc=function(p,l,f){return c(p,l,f)};function h(p){return u(p),o(p<0?0:S(p)|0)}s.allocUnsafe=function(p){return h(p)},s.allocUnsafeSlow=function(p){return h(p)};function d(p,l){if((typeof l!="string"||l==="")&&(l="utf8"),!s.isEncoding(l))throw new TypeError("Unknown encoding: "+l);let f=C(p,l)|0,b=o(f),A=b.write(p,l);return A!==f&&(b=b.slice(0,A)),b}function g(p){let l=p.length<0?0:S(p.length)|0,f=o(l);for(let b=0;b=i)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i.toString(16)+" bytes");return p|0}function I(p){return +p!=p&&(p=0),s.alloc(+p)}s.isBuffer=function(l){return l!=null&&l._isBuffer===!0&&l!==s.prototype},s.compare=function(l,f){if(Ye(l,Uint8Array)&&(l=s.from(l,l.offset,l.byteLength)),Ye(f,Uint8Array)&&(f=s.from(f,f.offset,f.byteLength)),!s.isBuffer(l)||!s.isBuffer(f))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(l===f)return 0;let b=l.length,A=f.length;for(let T=0,O=Math.min(b,A);TA.length?(s.isBuffer(O)||(O=s.from(O)),O.copy(A,T)):Uint8Array.prototype.set.call(A,O,T);else if(s.isBuffer(O))O.copy(A,T);else throw new TypeError('"list" argument must be an Array of Buffers');T+=O.length;}return A};function C(p,l){if(s.isBuffer(p))return p.length;if(ArrayBuffer.isView(p)||Ye(p,ArrayBuffer))return p.byteLength;if(typeof p!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof p);let f=p.length,b=arguments.length>2&&arguments[2]===!0;if(!b&&f===0)return 0;let A=!1;for(;;)switch(l){case"ascii":case"latin1":case"binary":return f;case"utf8":case"utf-8":return cs(p).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return f*2;case"hex":return f>>>1;case"base64":return Cl(p).length;default:if(A)return b?-1:cs(p).length;l=(""+l).toLowerCase(),A=!0;}}s.byteLength=C;function R(p,l,f){let b=!1;if((l===void 0||l<0)&&(l=0),l>this.length||((f===void 0||f>this.length)&&(f=this.length),f<=0)||(f>>>=0,l>>>=0,f<=l))return "";for(p||(p="utf8");;)switch(p){case"hex":return Ng(this,l,f);case"utf8":case"utf-8":return Cr(this,l,f);case"ascii":return us(this,l,f);case"latin1":case"binary":return Ug(this,l,f);case"base64":return pe(this,l,f);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return qg(this,l,f);default:if(b)throw new TypeError("Unknown encoding: "+p);p=(p+"").toLowerCase(),b=!0;}}s.prototype._isBuffer=!0;function U(p,l,f){let b=p[l];p[l]=p[f],p[f]=b;}s.prototype.swap16=function(){let l=this.length;if(l%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let f=0;ff&&(l+=" ... "),""},r&&(s.prototype[r]=s.prototype.inspect),s.prototype.compare=function(l,f,b,A,T){if(Ye(l,Uint8Array)&&(l=s.from(l,l.offset,l.byteLength)),!s.isBuffer(l))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof l);if(f===void 0&&(f=0),b===void 0&&(b=l?l.length:0),A===void 0&&(A=0),T===void 0&&(T=this.length),f<0||b>l.length||A<0||T>this.length)throw new RangeError("out of range index");if(A>=T&&f>=b)return 0;if(A>=T)return -1;if(f>=b)return 1;if(f>>>=0,b>>>=0,A>>>=0,T>>>=0,this===l)return 0;let O=T-A,$=b-f,se=Math.min(O,$),te=this.slice(A,T),oe=l.slice(f,b);for(let J=0;J2147483647?f=2147483647:f<-2147483648&&(f=-2147483648),f=+f,hs(f)&&(f=A?0:p.length-1),f<0&&(f=p.length+f),f>=p.length){if(A)return -1;f=p.length-1;}else if(f<0)if(A)f=0;else return -1;if(typeof l=="string"&&(l=s.from(l,b)),s.isBuffer(l))return l.length===0?-1:W(p,l,f,b,A);if(typeof l=="number")return l=l&255,typeof Uint8Array.prototype.indexOf=="function"?A?Uint8Array.prototype.indexOf.call(p,l,f):Uint8Array.prototype.lastIndexOf.call(p,l,f):W(p,[l],f,b,A);throw new TypeError("val must be string, number or Buffer")}function W(p,l,f,b,A){let T=1,O=p.length,$=l.length;if(b!==void 0&&(b=String(b).toLowerCase(),b==="ucs2"||b==="ucs-2"||b==="utf16le"||b==="utf-16le")){if(p.length<2||l.length<2)return -1;T=2,O/=2,$/=2,f/=2;}function se(oe,J){return T===1?oe[J]:oe.readUInt16BE(J*T)}let te;if(A){let oe=-1;for(te=f;teO&&(f=O-$),te=f;te>=0;te--){let oe=!0;for(let J=0;J<$;J++)if(se(p,te+J)!==se(l,J)){oe=!1;break}if(oe)return te}return -1}s.prototype.includes=function(l,f,b){return this.indexOf(l,f,b)!==-1},s.prototype.indexOf=function(l,f,b){return N(this,l,f,b,!0)},s.prototype.lastIndexOf=function(l,f,b){return N(this,l,f,b,!1)};function K(p,l,f,b){f=Number(f)||0;let A=p.length-f;b?(b=Number(b),b>A&&(b=A)):b=A;let T=l.length;b>T/2&&(b=T/2);let O;for(O=0;O>>0,isFinite(b)?(b=b>>>0,A===void 0&&(A="utf8")):(A=b,b=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");let T=this.length-f;if((b===void 0||b>T)&&(b=T),l.length>0&&(b<0||f<0)||f>this.length)throw new RangeError("Attempt to write outside buffer bounds");A||(A="utf8");let O=!1;for(;;)switch(A){case"hex":return K(this,l,f,b);case"utf8":case"utf-8":return z(this,l,f,b);case"ascii":case"latin1":case"binary":return Q(this,l,f,b);case"base64":return de(this,l,f,b);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Gt(this,l,f,b);default:if(O)throw new TypeError("Unknown encoding: "+A);A=(""+A).toLowerCase(),O=!0;}},s.prototype.toJSON=function(){return {type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function pe(p,l,f){return l===0&&f===p.length?t.fromByteArray(p):t.fromByteArray(p.slice(l,f))}function Cr(p,l,f){f=Math.min(p.length,f);let b=[],A=l;for(;A239?4:T>223?3:T>191?2:1;if(A+$<=f){let se,te,oe,J;switch($){case 1:T<128&&(O=T);break;case 2:se=p[A+1],(se&192)===128&&(J=(T&31)<<6|se&63,J>127&&(O=J));break;case 3:se=p[A+1],te=p[A+2],(se&192)===128&&(te&192)===128&&(J=(T&15)<<12|(se&63)<<6|te&63,J>2047&&(J<55296||J>57343)&&(O=J));break;case 4:se=p[A+1],te=p[A+2],oe=p[A+3],(se&192)===128&&(te&192)===128&&(oe&192)===128&&(J=(T&15)<<18|(se&63)<<12|(te&63)<<6|oe&63,J>65535&&J<1114112&&(O=J));}}O===null?(O=65533,$=1):O>65535&&(O-=65536,b.push(O>>>10&1023|55296),O=56320|O&1023),b.push(O),A+=$;}return Pr(b)}let Br=4096;function Pr(p){let l=p.length;if(l<=Br)return String.fromCharCode.apply(String,p);let f="",b=0;for(;bb)&&(f=b);let A="";for(let T=l;Tb&&(l=b),f<0?(f+=b,f<0&&(f=0)):f>b&&(f=b),ff)throw new RangeError("Trying to access beyond buffer length")}s.prototype.readUintLE=s.prototype.readUIntLE=function(l,f,b){l=l>>>0,f=f>>>0,b||ge(l,f,this.length);let A=this[l],T=1,O=0;for(;++O>>0,f=f>>>0,b||ge(l,f,this.length);let A=this[l+--f],T=1;for(;f>0&&(T*=256);)A+=this[l+--f]*T;return A},s.prototype.readUint8=s.prototype.readUInt8=function(l,f){return l=l>>>0,f||ge(l,1,this.length),this[l]},s.prototype.readUint16LE=s.prototype.readUInt16LE=function(l,f){return l=l>>>0,f||ge(l,2,this.length),this[l]|this[l+1]<<8},s.prototype.readUint16BE=s.prototype.readUInt16BE=function(l,f){return l=l>>>0,f||ge(l,2,this.length),this[l]<<8|this[l+1]},s.prototype.readUint32LE=s.prototype.readUInt32LE=function(l,f){return l=l>>>0,f||ge(l,4,this.length),(this[l]|this[l+1]<<8|this[l+2]<<16)+this[l+3]*16777216},s.prototype.readUint32BE=s.prototype.readUInt32BE=function(l,f){return l=l>>>0,f||ge(l,4,this.length),this[l]*16777216+(this[l+1]<<16|this[l+2]<<8|this[l+3])},s.prototype.readBigUInt64LE=xt(function(l){l=l>>>0,kr(l,"offset");let f=this[l],b=this[l+7];(f===void 0||b===void 0)&&li(l,this.length-8);let A=f+this[++l]*2**8+this[++l]*2**16+this[++l]*2**24,T=this[++l]+this[++l]*2**8+this[++l]*2**16+b*2**24;return BigInt(A)+(BigInt(T)<>>0,kr(l,"offset");let f=this[l],b=this[l+7];(f===void 0||b===void 0)&&li(l,this.length-8);let A=f*2**24+this[++l]*2**16+this[++l]*2**8+this[++l],T=this[++l]*2**24+this[++l]*2**16+this[++l]*2**8+b;return (BigInt(A)<>>0,f=f>>>0,b||ge(l,f,this.length);let A=this[l],T=1,O=0;for(;++O=T&&(A-=Math.pow(2,8*f)),A},s.prototype.readIntBE=function(l,f,b){l=l>>>0,f=f>>>0,b||ge(l,f,this.length);let A=f,T=1,O=this[l+--A];for(;A>0&&(T*=256);)O+=this[l+--A]*T;return T*=128,O>=T&&(O-=Math.pow(2,8*f)),O},s.prototype.readInt8=function(l,f){return l=l>>>0,f||ge(l,1,this.length),this[l]&128?(255-this[l]+1)*-1:this[l]},s.prototype.readInt16LE=function(l,f){l=l>>>0,f||ge(l,2,this.length);let b=this[l]|this[l+1]<<8;return b&32768?b|4294901760:b},s.prototype.readInt16BE=function(l,f){l=l>>>0,f||ge(l,2,this.length);let b=this[l+1]|this[l]<<8;return b&32768?b|4294901760:b},s.prototype.readInt32LE=function(l,f){return l=l>>>0,f||ge(l,4,this.length),this[l]|this[l+1]<<8|this[l+2]<<16|this[l+3]<<24},s.prototype.readInt32BE=function(l,f){return l=l>>>0,f||ge(l,4,this.length),this[l]<<24|this[l+1]<<16|this[l+2]<<8|this[l+3]},s.prototype.readBigInt64LE=xt(function(l){l=l>>>0,kr(l,"offset");let f=this[l],b=this[l+7];(f===void 0||b===void 0)&&li(l,this.length-8);let A=this[l+4]+this[l+5]*2**8+this[l+6]*2**16+(b<<24);return (BigInt(A)<>>0,kr(l,"offset");let f=this[l],b=this[l+7];(f===void 0||b===void 0)&&li(l,this.length-8);let A=(f<<24)+this[++l]*2**16+this[++l]*2**8+this[++l];return (BigInt(A)<>>0,f||ge(l,4,this.length),e.read(this,l,!0,23,4)},s.prototype.readFloatBE=function(l,f){return l=l>>>0,f||ge(l,4,this.length),e.read(this,l,!1,23,4)},s.prototype.readDoubleLE=function(l,f){return l=l>>>0,f||ge(l,8,this.length),e.read(this,l,!0,52,8)},s.prototype.readDoubleBE=function(l,f){return l=l>>>0,f||ge(l,8,this.length),e.read(this,l,!1,52,8)};function Ce(p,l,f,b,A,T){if(!s.isBuffer(p))throw new TypeError('"buffer" argument must be a Buffer instance');if(l>A||lp.length)throw new RangeError("Index out of range")}s.prototype.writeUintLE=s.prototype.writeUIntLE=function(l,f,b,A){if(l=+l,f=f>>>0,b=b>>>0,!A){let $=Math.pow(2,8*b)-1;Ce(this,l,f,b,$,0);}let T=1,O=0;for(this[f]=l&255;++O>>0,b=b>>>0,!A){let $=Math.pow(2,8*b)-1;Ce(this,l,f,b,$,0);}let T=b-1,O=1;for(this[f+T]=l&255;--T>=0&&(O*=256);)this[f+T]=l/O&255;return f+b},s.prototype.writeUint8=s.prototype.writeUInt8=function(l,f,b){return l=+l,f=f>>>0,b||Ce(this,l,f,1,255,0),this[f]=l&255,f+1},s.prototype.writeUint16LE=s.prototype.writeUInt16LE=function(l,f,b){return l=+l,f=f>>>0,b||Ce(this,l,f,2,65535,0),this[f]=l&255,this[f+1]=l>>>8,f+2},s.prototype.writeUint16BE=s.prototype.writeUInt16BE=function(l,f,b){return l=+l,f=f>>>0,b||Ce(this,l,f,2,65535,0),this[f]=l>>>8,this[f+1]=l&255,f+2},s.prototype.writeUint32LE=s.prototype.writeUInt32LE=function(l,f,b){return l=+l,f=f>>>0,b||Ce(this,l,f,4,4294967295,0),this[f+3]=l>>>24,this[f+2]=l>>>16,this[f+1]=l>>>8,this[f]=l&255,f+4},s.prototype.writeUint32BE=s.prototype.writeUInt32BE=function(l,f,b){return l=+l,f=f>>>0,b||Ce(this,l,f,4,4294967295,0),this[f]=l>>>24,this[f+1]=l>>>16,this[f+2]=l>>>8,this[f+3]=l&255,f+4};function vl(p,l,f,b,A){Rl(l,b,A,p,f,7);let T=Number(l&BigInt(4294967295));p[f++]=T,T=T>>8,p[f++]=T,T=T>>8,p[f++]=T,T=T>>8,p[f++]=T;let O=Number(l>>BigInt(32)&BigInt(4294967295));return p[f++]=O,O=O>>8,p[f++]=O,O=O>>8,p[f++]=O,O=O>>8,p[f++]=O,f}function El(p,l,f,b,A){Rl(l,b,A,p,f,7);let T=Number(l&BigInt(4294967295));p[f+7]=T,T=T>>8,p[f+6]=T,T=T>>8,p[f+5]=T,T=T>>8,p[f+4]=T;let O=Number(l>>BigInt(32)&BigInt(4294967295));return p[f+3]=O,O=O>>8,p[f+2]=O,O=O>>8,p[f+1]=O,O=O>>8,p[f]=O,f+8}s.prototype.writeBigUInt64LE=xt(function(l,f=0){return vl(this,l,f,BigInt(0),BigInt("0xffffffffffffffff"))}),s.prototype.writeBigUInt64BE=xt(function(l,f=0){return El(this,l,f,BigInt(0),BigInt("0xffffffffffffffff"))}),s.prototype.writeIntLE=function(l,f,b,A){if(l=+l,f=f>>>0,!A){let se=Math.pow(2,8*b-1);Ce(this,l,f,b,se-1,-se);}let T=0,O=1,$=0;for(this[f]=l&255;++T>0)-$&255;return f+b},s.prototype.writeIntBE=function(l,f,b,A){if(l=+l,f=f>>>0,!A){let se=Math.pow(2,8*b-1);Ce(this,l,f,b,se-1,-se);}let T=b-1,O=1,$=0;for(this[f+T]=l&255;--T>=0&&(O*=256);)l<0&&$===0&&this[f+T+1]!==0&&($=1),this[f+T]=(l/O>>0)-$&255;return f+b},s.prototype.writeInt8=function(l,f,b){return l=+l,f=f>>>0,b||Ce(this,l,f,1,127,-128),l<0&&(l=255+l+1),this[f]=l&255,f+1},s.prototype.writeInt16LE=function(l,f,b){return l=+l,f=f>>>0,b||Ce(this,l,f,2,32767,-32768),this[f]=l&255,this[f+1]=l>>>8,f+2},s.prototype.writeInt16BE=function(l,f,b){return l=+l,f=f>>>0,b||Ce(this,l,f,2,32767,-32768),this[f]=l>>>8,this[f+1]=l&255,f+2},s.prototype.writeInt32LE=function(l,f,b){return l=+l,f=f>>>0,b||Ce(this,l,f,4,2147483647,-2147483648),this[f]=l&255,this[f+1]=l>>>8,this[f+2]=l>>>16,this[f+3]=l>>>24,f+4},s.prototype.writeInt32BE=function(l,f,b){return l=+l,f=f>>>0,b||Ce(this,l,f,4,2147483647,-2147483648),l<0&&(l=4294967295+l+1),this[f]=l>>>24,this[f+1]=l>>>16,this[f+2]=l>>>8,this[f+3]=l&255,f+4},s.prototype.writeBigInt64LE=xt(function(l,f=0){return vl(this,l,f,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),s.prototype.writeBigInt64BE=xt(function(l,f=0){return El(this,l,f,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});function Sl(p,l,f,b,A,T){if(f+b>p.length)throw new RangeError("Index out of range");if(f<0)throw new RangeError("Index out of range")}function Al(p,l,f,b,A){return l=+l,f=f>>>0,A||Sl(p,l,f,4),e.write(p,l,f,b,23,4),f+4}s.prototype.writeFloatLE=function(l,f,b){return Al(this,l,f,!0,b)},s.prototype.writeFloatBE=function(l,f,b){return Al(this,l,f,!1,b)};function Il(p,l,f,b,A){return l=+l,f=f>>>0,A||Sl(p,l,f,8),e.write(p,l,f,b,52,8),f+8}s.prototype.writeDoubleLE=function(l,f,b){return Il(this,l,f,!0,b)},s.prototype.writeDoubleBE=function(l,f,b){return Il(this,l,f,!1,b)},s.prototype.copy=function(l,f,b,A){if(!s.isBuffer(l))throw new TypeError("argument should be a Buffer");if(b||(b=0),!A&&A!==0&&(A=this.length),f>=l.length&&(f=l.length),f||(f=0),A>0&&A=this.length)throw new RangeError("Index out of range");if(A<0)throw new RangeError("sourceEnd out of bounds");A>this.length&&(A=this.length),l.length-f>>0,b=b===void 0?this.length:b>>>0,l||(l=0);let T;if(typeof l=="number")for(T=f;T2**32?A=Tl(String(f)):typeof f=="bigint"&&(A=String(f),(f>BigInt(2)**BigInt(32)||f<-(BigInt(2)**BigInt(32)))&&(A=Tl(A)),A+="n"),b+=` It must be ${l}. Received ${A}`,b},RangeError);function Tl(p){let l="",f=p.length,b=p[0]==="-"?1:0;for(;f>=b+4;f-=3)l=`_${p.slice(f-3,f)}${l}`;return `${p.slice(0,f)}${l}`}function Dg(p,l,f){kr(l,"offset"),(p[l]===void 0||p[l+f]===void 0)&&li(l,p.length-(f+1));}function Rl(p,l,f,b,A,T){if(p>f||p3?l===0||l===BigInt(0)?$=`>= 0${O} and < 2${O} ** ${(T+1)*8}${O}`:$=`>= -(2${O} ** ${(T+1)*8-1}${O}) and < 2 ** ${(T+1)*8-1}${O}`:$=`>= ${l}${O} and <= ${f}${O}`,new Or.ERR_OUT_OF_RANGE("value",$,p)}Dg(b,A,T);}function kr(p,l){if(typeof p!="number")throw new Or.ERR_INVALID_ARG_TYPE(l,"number",p)}function li(p,l,f){throw Math.floor(p)!==p?(kr(p,f),new Or.ERR_OUT_OF_RANGE(f||"offset","an integer",p)):l<0?new Or.ERR_BUFFER_OUT_OF_BOUNDS:new Or.ERR_OUT_OF_RANGE(f||"offset",`>= ${f?1:0} and <= ${l}`,p)}let jg=/[^+/0-9A-Za-z-_]/g;function Fg(p){if(p=p.split("=")[0],p=p.trim().replace(jg,""),p.length<2)return "";for(;p.length%4!==0;)p=p+"=";return p}function cs(p,l){l=l||1/0;let f,b=p.length,A=null,T=[];for(let O=0;O55295&&f<57344){if(!A){if(f>56319){(l-=3)>-1&&T.push(239,191,189);continue}else if(O+1===b){(l-=3)>-1&&T.push(239,191,189);continue}A=f;continue}if(f<56320){(l-=3)>-1&&T.push(239,191,189),A=f;continue}f=(A-55296<<10|f-56320)+65536;}else A&&(l-=3)>-1&&T.push(239,191,189);if(A=null,f<128){if((l-=1)<0)break;T.push(f);}else if(f<2048){if((l-=2)<0)break;T.push(f>>6|192,f&63|128);}else if(f<65536){if((l-=3)<0)break;T.push(f>>12|224,f>>6&63|128,f&63|128);}else if(f<1114112){if((l-=4)<0)break;T.push(f>>18|240,f>>12&63|128,f>>6&63|128,f&63|128);}else throw new Error("Invalid code point")}return T}function Wg(p){let l=[];for(let f=0;f>8,A=f%256,T.push(A),T.push(b);return T}function Cl(p){return t.toByteArray(Fg(p))}function qi(p,l,f,b){let A;for(A=0;A=l.length||A>=p.length);++A)l[A+f]=p[A];return A}function Ye(p,l){return p instanceof l||p!=null&&p.constructor!=null&&p.constructor.name!=null&&p.constructor.name===l.name}function hs(p){return p!==p}let Hg=function(){let p="0123456789abcdef",l=new Array(256);for(let f=0;f<16;++f){let b=f*16;for(let A=0;A<16;++A)l[b+A]=p[f]+p[A];}return l}();function xt(p){return typeof BigInt>"u"?Vg:p}function Vg(){throw new Error("BigInt not supported")}return Jt}var ui,Vu,Wi,zu,Jt,Ku,Lt,x,ey,ty,ye=we(()=>{v();m();_();ui={},Vu=!1;Wi={},zu=!1;Jt={},Ku=!1;Lt=Zg();Lt.Buffer;Lt.SlowBuffer;Lt.INSPECT_MAX_BYTES;Lt.kMaxLength;x=Lt.Buffer,ey=Lt.INSPECT_MAX_BYTES,ty=Lt.kMaxLength;});var v=we(()=>{ye();});var Gu=M(ws=>{v();m();_();Object.defineProperty(ws,"__esModule",{value:!0});var bs=class{constructor(e){this.aliasToTopic={},this.max=e;}put(e,r){return r===0||r>this.max?!1:(this.aliasToTopic[r]=e,this.length=Object.keys(this.aliasToTopic).length,!0)}getTopicByAlias(e){return this.aliasToTopic[e]}clear(){this.aliasToTopic={};}};ws.default=bs;});var ce=M((PA,Qu)=>{v();m();_();Qu.exports={ArrayIsArray(t){return Array.isArray(t)},ArrayPrototypeIncludes(t,e){return t.includes(e)},ArrayPrototypeIndexOf(t,e){return t.indexOf(e)},ArrayPrototypeJoin(t,e){return t.join(e)},ArrayPrototypeMap(t,e){return t.map(e)},ArrayPrototypePop(t,e){return t.pop(e)},ArrayPrototypePush(t,e){return t.push(e)},ArrayPrototypeSlice(t,e,r){return t.slice(e,r)},Error,FunctionPrototypeCall(t,e,...r){return t.call(e,...r)},FunctionPrototypeSymbolHasInstance(t,e){return Function.prototype[Symbol.hasInstance].call(t,e)},MathFloor:Math.floor,Number,NumberIsInteger:Number.isInteger,NumberIsNaN:Number.isNaN,NumberMAX_SAFE_INTEGER:Number.MAX_SAFE_INTEGER,NumberMIN_SAFE_INTEGER:Number.MIN_SAFE_INTEGER,NumberParseInt:Number.parseInt,ObjectDefineProperties(t,e){return Object.defineProperties(t,e)},ObjectDefineProperty(t,e,r){return Object.defineProperty(t,e,r)},ObjectGetOwnPropertyDescriptor(t,e){return Object.getOwnPropertyDescriptor(t,e)},ObjectKeys(t){return Object.keys(t)},ObjectSetPrototypeOf(t,e){return Object.setPrototypeOf(t,e)},Promise,PromisePrototypeCatch(t,e){return t.catch(e)},PromisePrototypeThen(t,e,r){return t.then(e,r)},PromiseReject(t){return Promise.reject(t)},ReflectApply:Reflect.apply,RegExpPrototypeTest(t,e){return t.test(e)},SafeSet:Set,String,StringPrototypeSlice(t,e,r){return t.slice(e,r)},StringPrototypeToLowerCase(t){return t.toLowerCase()},StringPrototypeToUpperCase(t){return t.toUpperCase()},StringPrototypeTrim(t){return t.trim()},Symbol,SymbolFor:Symbol.for,SymbolAsyncIterator:Symbol.asyncIterator,SymbolHasInstance:Symbol.hasInstance,SymbolIterator:Symbol.iterator,TypedArrayPrototypeSet(t,e,r){return t.set(e,r)},Uint8Array};});var Je=M((jA,ms)=>{v();m();_();var ry=(ye(),X(_e)),iy=Object.getPrototypeOf(async function(){}).constructor,Yu=globalThis.Blob||ry.Blob,ny=typeof Yu<"u"?function(e){return e instanceof Yu}:function(e){return !1},_s=class extends Error{constructor(e){if(!Array.isArray(e))throw new TypeError(`Expected input to be an Array, got ${typeof e}`);let r="";for(let i=0;i{t=i,e=n;}),resolve:t,reject:e}},promisify(t){return new Promise((e,r)=>{t((i,...n)=>i?r(i):e(...n));})},debuglog(){return function(){}},format(t,...e){return t.replace(/%([sdifj])/g,function(...[r,i]){let n=e.shift();return i==="f"?n.toFixed(6):i==="j"?JSON.stringify(n):i==="s"&&typeof n=="object"?`${n.constructor!==Object?n.constructor.name:""} {}`.trim():n.toString()})},inspect(t){switch(typeof t){case"string":if(t.includes("'"))if(t.includes('"')){if(!t.includes("`")&&!t.includes("${"))return `\`${t}\``}else return `"${t}"`;return `'${t}'`;case"number":return isNaN(t)?"NaN":Object.is(t,-0)?String(t):t;case"bigint":return `${String(t)}n`;case"boolean":case"undefined":return String(t);case"object":return "{}"}},types:{isAsyncFunction(t){return t instanceof iy},isArrayBufferView(t){return ArrayBuffer.isView(t)}},isBlob:ny};ms.exports.promisify.custom=Symbol.for("nodejs.util.promisify.custom");});var Hi=M((YA,$i)=>{v();m();_();var{AbortController:Ju,AbortSignal:sy}=typeof self<"u"?self:typeof window<"u"?window:void 0;$i.exports=Ju;$i.exports.AbortSignal=sy;$i.exports.default=Ju;});var Se=M((oI,ef)=>{v();m();_();var{format:oy,inspect:Vi,AggregateError:ay}=Je(),ly=globalThis.AggregateError||ay,uy=Symbol("kIsNodeError"),fy=["string","function","number","object","Function","Object","boolean","bigint","symbol"],cy=/^([A-Z][a-z0-9]*)+$/,hy="__node_internal_",zi={};function Xt(t,e){if(!t)throw new zi.ERR_INTERNAL_ASSERTION(e)}function Xu(t){let e="",r=t.length,i=t[0]==="-"?1:0;for(;r>=i+4;r-=3)e=`_${t.slice(r-3,r)}${e}`;return `${t.slice(0,r)}${e}`}function dy(t,e,r){if(typeof e=="function")return Xt(e.length<=r.length,`Code: ${t}; The provided arguments length (${r.length}) does not match the required ones (${e.length}).`),e(...r);let i=(e.match(/%[dfijoOs]/g)||[]).length;return Xt(i===r.length,`Code: ${t}; The provided arguments length (${r.length}) does not match the required ones (${i}).`),r.length===0?e:oy(e,...r)}function me(t,e,r){r||(r=Error);class i extends r{constructor(...o){super(dy(t,e,o));}toString(){return `${this.name} [${t}]: ${this.message}`}}Object.defineProperties(i.prototype,{name:{value:r.name,writable:!0,enumerable:!1,configurable:!0},toString:{value(){return `${this.name} [${t}]: ${this.message}`},writable:!0,enumerable:!1,configurable:!0}}),i.prototype.code=t,i.prototype[uy]=!0,zi[t]=i;}function Zu(t){let e=hy+t.name;return Object.defineProperty(t,"name",{value:e}),t}function py(t,e){if(t&&e&&t!==e){if(Array.isArray(e.errors))return e.errors.push(t),e;let r=new ly([e,t],e.message);return r.code=e.code,r}return t||e}var vs=class extends Error{constructor(e="The operation was aborted",r=void 0){if(r!==void 0&&typeof r!="object")throw new zi.ERR_INVALID_ARG_TYPE("options","Object",r);super(e,r),this.code="ABORT_ERR",this.name="AbortError";}};me("ERR_ASSERTION","%s",Error);me("ERR_INVALID_ARG_TYPE",(t,e,r)=>{Xt(typeof t=="string","'name' must be a string"),Array.isArray(e)||(e=[e]);let i="The ";t.endsWith(" argument")?i+=`${t} `:i+=`"${t}" ${t.includes(".")?"property":"argument"} `,i+="must be ";let n=[],o=[],s=[];for(let u of e)Xt(typeof u=="string","All expected entries have to be of type string"),fy.includes(u)?n.push(u.toLowerCase()):cy.test(u)?o.push(u):(Xt(u!=="object",'The value "object" should be written as "Object"'),s.push(u));if(o.length>0){let u=n.indexOf("object");u!==-1&&(n.splice(n,u,1),o.push("Object"));}if(n.length>0){switch(n.length){case 1:i+=`of type ${n[0]}`;break;case 2:i+=`one of type ${n[0]} or ${n[1]}`;break;default:{let u=n.pop();i+=`one of type ${n.join(", ")}, or ${u}`;}}(o.length>0||s.length>0)&&(i+=" or ");}if(o.length>0){switch(o.length){case 1:i+=`an instance of ${o[0]}`;break;case 2:i+=`an instance of ${o[0]} or ${o[1]}`;break;default:{let u=o.pop();i+=`an instance of ${o.join(", ")}, or ${u}`;}}s.length>0&&(i+=" or ");}switch(s.length){case 0:break;case 1:s[0].toLowerCase()!==s[0]&&(i+="an "),i+=`${s[0]}`;break;case 2:i+=`one of ${s[0]} or ${s[1]}`;break;default:{let u=s.pop();i+=`one of ${s.join(", ")}, or ${u}`;}}if(r==null)i+=`. Received ${r}`;else if(typeof r=="function"&&r.name)i+=`. Received function ${r.name}`;else if(typeof r=="object"){var a;if((a=r.constructor)!==null&&a!==void 0&&a.name)i+=`. Received an instance of ${r.constructor.name}`;else {let u=Vi(r,{depth:-1});i+=`. Received ${u}`;}}else {let u=Vi(r,{colors:!1});u.length>25&&(u=`${u.slice(0,25)}...`),i+=`. Received type ${typeof r} (${u})`;}return i},TypeError);me("ERR_INVALID_ARG_VALUE",(t,e,r="is invalid")=>{let i=Vi(e);return i.length>128&&(i=i.slice(0,128)+"..."),`The ${t.includes(".")?"property":"argument"} '${t}' ${r}. Received ${i}`},TypeError);me("ERR_INVALID_RETURN_VALUE",(t,e,r)=>{var i;let n=r!=null&&(i=r.constructor)!==null&&i!==void 0&&i.name?`instance of ${r.constructor.name}`:`type ${typeof r}`;return `Expected ${t} to be returned from the "${e}" function but got ${n}.`},TypeError);me("ERR_MISSING_ARGS",(...t)=>{Xt(t.length>0,"At least one arg needs to be specified");let e,r=t.length;switch(t=(Array.isArray(t)?t:[t]).map(i=>`"${i}"`).join(" or "),r){case 1:e+=`The ${t[0]} argument`;break;case 2:e+=`The ${t[0]} and ${t[1]} arguments`;break;default:{let i=t.pop();e+=`The ${t.join(", ")}, and ${i} arguments`;}break}return `${e} must be specified`},TypeError);me("ERR_OUT_OF_RANGE",(t,e,r)=>{Xt(e,'Missing "range" argument');let i;return Number.isInteger(r)&&Math.abs(r)>2**32?i=Xu(String(r)):typeof r=="bigint"?(i=String(r),(r>2n**32n||r<-(2n**32n))&&(i=Xu(i)),i+="n"):i=Vi(r),`The value of "${t}" is out of range. It must be ${e}. Received ${i}`},RangeError);me("ERR_MULTIPLE_CALLBACK","Callback called multiple times",Error);me("ERR_METHOD_NOT_IMPLEMENTED","The %s method is not implemented",Error);me("ERR_STREAM_ALREADY_FINISHED","Cannot call %s after a stream was finished",Error);me("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable",Error);me("ERR_STREAM_DESTROYED","Cannot call %s after a stream was destroyed",Error);me("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError);me("ERR_STREAM_PREMATURE_CLOSE","Premature close",Error);me("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF",Error);me("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event",Error);me("ERR_STREAM_WRITE_AFTER_END","write after end",Error);me("ERR_UNKNOWN_ENCODING","Unknown encoding: %s",TypeError);ef.exports={AbortError:vs,aggregateTwoErrors:Zu(py),hideStackFrames:Zu,codes:zi};});var fi=M((yI,ff)=>{v();m();_();var{ArrayIsArray:Ss,ArrayPrototypeIncludes:sf,ArrayPrototypeJoin:of,ArrayPrototypeMap:gy,NumberIsInteger:As,NumberIsNaN:yy,NumberMAX_SAFE_INTEGER:by,NumberMIN_SAFE_INTEGER:wy,NumberParseInt:_y,ObjectPrototypeHasOwnProperty:my,RegExpPrototypeExec:af,String:vy,StringPrototypeToUpperCase:Ey,StringPrototypeTrim:Sy}=ce(),{hideStackFrames:Ue,codes:{ERR_SOCKET_BAD_PORT:Ay,ERR_INVALID_ARG_TYPE:Ae,ERR_INVALID_ARG_VALUE:Mr,ERR_OUT_OF_RANGE:Zt,ERR_UNKNOWN_SIGNAL:tf}}=Se(),{normalizeEncoding:Iy}=Je(),{isAsyncFunction:Ty,isArrayBufferView:Ry}=Je().types,rf={};function Cy(t){return t===(t|0)}function By(t){return t===t>>>0}var Py=/^[0-7]+$/,Oy="must be a 32-bit unsigned integer or an octal string";function ky(t,e,r){if(typeof t>"u"&&(t=r),typeof t=="string"){if(af(Py,t)===null)throw new Mr(e,t,Oy);t=_y(t,8);}return lf(t,e),t}var xy=Ue((t,e,r=wy,i=by)=>{if(typeof t!="number")throw new Ae(e,"number",t);if(!As(t))throw new Zt(e,"an integer",t);if(ti)throw new Zt(e,`>= ${r} && <= ${i}`,t)}),My=Ue((t,e,r=-2147483648,i=2147483647)=>{if(typeof t!="number")throw new Ae(e,"number",t);if(!As(t))throw new Zt(e,"an integer",t);if(ti)throw new Zt(e,`>= ${r} && <= ${i}`,t)}),lf=Ue((t,e,r=!1)=>{if(typeof t!="number")throw new Ae(e,"number",t);if(!As(t))throw new Zt(e,"an integer",t);let i=r?1:0,n=4294967295;if(tn)throw new Zt(e,`>= ${i} && <= ${n}`,t)});function Is(t,e){if(typeof t!="string")throw new Ae(e,"string",t)}function Ly(t,e,r=void 0,i){if(typeof t!="number")throw new Ae(e,"number",t);if(r!=null&&ti||(r!=null||i!=null)&&yy(t))throw new Zt(e,`${r!=null?`>= ${r}`:""}${r!=null&&i!=null?" && ":""}${i!=null?`<= ${i}`:""}`,t)}var Uy=Ue((t,e,r)=>{if(!sf(r,t)){let n="must be one of: "+of(gy(r,o=>typeof o=="string"?`'${o}'`:vy(o)),", ");throw new Mr(e,t,n)}});function uf(t,e){if(typeof t!="boolean")throw new Ae(e,"boolean",t)}function Es(t,e,r){return t==null||!my(t,e)?r:t[e]}var Ny=Ue((t,e,r=null)=>{let i=Es(r,"allowArray",!1),n=Es(r,"allowFunction",!1);if(!Es(r,"nullable",!1)&&t===null||!i&&Ss(t)||typeof t!="object"&&(!n||typeof t!="function"))throw new Ae(e,"Object",t)}),qy=Ue((t,e)=>{if(t!=null&&typeof t!="object"&&typeof t!="function")throw new Ae(e,"a dictionary",t)}),Ts=Ue((t,e,r=0)=>{if(!Ss(t))throw new Ae(e,"Array",t);if(t.length{if(!Ry(t))throw new Ae(e,["Buffer","TypedArray","DataView"],t)});function $y(t,e){let r=Iy(e),i=t.length;if(r==="hex"&&i%2!==0)throw new Mr("encoding",e,`is invalid for data of length ${i}`)}function Hy(t,e="Port",r=!0){if(typeof t!="number"&&typeof t!="string"||typeof t=="string"&&Sy(t).length===0||+t!==+t>>>0||t>65535||t===0&&!r)throw new Ay(e,t,r);return t|0}var Vy=Ue((t,e)=>{if(t!==void 0&&(t===null||typeof t!="object"||!("aborted"in t)))throw new Ae(e,"AbortSignal",t)}),zy=Ue((t,e)=>{if(typeof t!="function")throw new Ae(e,"Function",t)}),Ky=Ue((t,e)=>{if(typeof t!="function"||Ty(t))throw new Ae(e,"Function",t)}),Gy=Ue((t,e)=>{if(t!==void 0)throw new Ae(e,"undefined",t)});function Qy(t,e,r){if(!sf(r,t))throw new Ae(e,`('${of(r,"|")}')`,t)}var Yy=/^(?:<[^>]*>)(?:\s*;\s*[^;"\s]+(?:=(")?[^;"\s]*\1)?)*$/;function nf(t,e){if(typeof t>"u"||!af(Yy,t))throw new Mr(e,t,'must be an array or string of format "; rel=preload; as=style"')}function Jy(t){if(typeof t=="string")return nf(t,"hints"),t;if(Ss(t)){let e=t.length,r="";if(e===0)return r;for(let i=0;i; rel=preload; as=style"')}ff.exports={isInt32:Cy,isUint32:By,parseFileMode:ky,validateArray:Ts,validateStringArray:Dy,validateBooleanArray:jy,validateBoolean:uf,validateBuffer:Wy,validateDictionary:qy,validateEncoding:$y,validateFunction:zy,validateInt32:My,validateInteger:xy,validateNumber:Ly,validateObject:Ny,validateOneOf:Uy,validatePlainFunction:Ky,validatePort:Hy,validateSignalName:Fy,validateString:Is,validateUint32:lf,validateUndefined:Gy,validateUnion:Qy,validateAbortSignal:Vy,validateLinkHeaderValue:Jy};});var Ut=M((TI,pf)=>{v();m();_();var ae=pf.exports={},Xe,Ze;function Rs(){throw new Error("setTimeout has not been defined")}function Cs(){throw new Error("clearTimeout has not been defined")}(function(){try{typeof setTimeout=="function"?Xe=setTimeout:Xe=Rs;}catch{Xe=Rs;}try{typeof clearTimeout=="function"?Ze=clearTimeout:Ze=Cs;}catch{Ze=Cs;}})();function cf(t){if(Xe===setTimeout)return setTimeout(t,0);if((Xe===Rs||!Xe)&&setTimeout)return Xe=setTimeout,setTimeout(t,0);try{return Xe(t,0)}catch{try{return Xe.call(null,t,0)}catch{return Xe.call(this,t,0)}}}function Xy(t){if(Ze===clearTimeout)return clearTimeout(t);if((Ze===Cs||!Ze)&&clearTimeout)return Ze=clearTimeout,clearTimeout(t);try{return Ze(t)}catch{try{return Ze.call(null,t)}catch{return Ze.call(this,t)}}}var wt=[],Lr=!1,er,Ki=-1;function Zy(){!Lr||!er||(Lr=!1,er.length?wt=er.concat(wt):Ki=-1,wt.length&&hf());}function hf(){if(!Lr){var t=cf(Zy);Lr=!0;for(var e=wt.length;e;){for(er=wt,wt=[];++Ki1)for(var r=1;r{v();m();_();var{Symbol:Gi,SymbolAsyncIterator:gf,SymbolIterator:yf,SymbolFor:bf}=ce(),wf=Gi("kDestroyed"),_f=Gi("kIsErrored"),Bs=Gi("kIsReadable"),mf=Gi("kIsDisturbed"),eb=bf("nodejs.webstream.isClosedPromise"),tb=bf("nodejs.webstream.controllerErrorFunction");function Qi(t,e=!1){var r;return !!(t&&typeof t.pipe=="function"&&typeof t.on=="function"&&(!e||typeof t.pause=="function"&&typeof t.resume=="function")&&(!t._writableState||((r=t._readableState)===null||r===void 0?void 0:r.readable)!==!1)&&(!t._writableState||t._readableState))}function Yi(t){var e;return !!(t&&typeof t.write=="function"&&typeof t.on=="function"&&(!t._readableState||((e=t._writableState)===null||e===void 0?void 0:e.writable)!==!1))}function rb(t){return !!(t&&typeof t.pipe=="function"&&t._readableState&&typeof t.on=="function"&&typeof t.write=="function")}function et(t){return t&&(t._readableState||t._writableState||typeof t.write=="function"&&typeof t.on=="function"||typeof t.pipe=="function"&&typeof t.on=="function")}function vf(t){return !!(t&&!et(t)&&typeof t.pipeThrough=="function"&&typeof t.getReader=="function"&&typeof t.cancel=="function")}function Ef(t){return !!(t&&!et(t)&&typeof t.getWriter=="function"&&typeof t.abort=="function")}function Sf(t){return !!(t&&!et(t)&&typeof t.readable=="object"&&typeof t.writable=="object")}function ib(t){return vf(t)||Ef(t)||Sf(t)}function nb(t,e){return t==null?!1:e===!0?typeof t[gf]=="function":e===!1?typeof t[yf]=="function":typeof t[gf]=="function"||typeof t[yf]=="function"}function Ji(t){if(!et(t))return null;let e=t._writableState,r=t._readableState,i=e||r;return !!(t.destroyed||t[wf]||i!=null&&i.destroyed)}function Af(t){if(!Yi(t))return null;if(t.writableEnded===!0)return !0;let e=t._writableState;return e!=null&&e.errored?!1:typeof e?.ended!="boolean"?null:e.ended}function sb(t,e){if(!Yi(t))return null;if(t.writableFinished===!0)return !0;let r=t._writableState;return r!=null&&r.errored?!1:typeof r?.finished!="boolean"?null:!!(r.finished||e===!1&&r.ended===!0&&r.length===0)}function ob(t){if(!Qi(t))return null;if(t.readableEnded===!0)return !0;let e=t._readableState;return !e||e.errored?!1:typeof e?.ended!="boolean"?null:e.ended}function If(t,e){if(!Qi(t))return null;let r=t._readableState;return r!=null&&r.errored?!1:typeof r?.endEmitted!="boolean"?null:!!(r.endEmitted||e===!1&&r.ended===!0&&r.length===0)}function Tf(t){return t&&t[Bs]!=null?t[Bs]:typeof t?.readable!="boolean"?null:Ji(t)?!1:Qi(t)&&t.readable&&!If(t)}function Rf(t){return typeof t?.writable!="boolean"?null:Ji(t)?!1:Yi(t)&&t.writable&&!Af(t)}function ab(t,e){return et(t)?Ji(t)?!0:!(e?.readable!==!1&&Tf(t)||e?.writable!==!1&&Rf(t)):null}function lb(t){var e,r;return et(t)?t.writableErrored?t.writableErrored:(e=(r=t._writableState)===null||r===void 0?void 0:r.errored)!==null&&e!==void 0?e:null:null}function ub(t){var e,r;return et(t)?t.readableErrored?t.readableErrored:(e=(r=t._readableState)===null||r===void 0?void 0:r.errored)!==null&&e!==void 0?e:null:null}function fb(t){if(!et(t))return null;if(typeof t.closed=="boolean")return t.closed;let e=t._writableState,r=t._readableState;return typeof e?.closed=="boolean"||typeof r?.closed=="boolean"?e?.closed||r?.closed:typeof t._closed=="boolean"&&Cf(t)?t._closed:null}function Cf(t){return typeof t._closed=="boolean"&&typeof t._defaultKeepAlive=="boolean"&&typeof t._removedConnection=="boolean"&&typeof t._removedContLen=="boolean"}function Bf(t){return typeof t._sent100=="boolean"&&Cf(t)}function cb(t){var e;return typeof t._consuming=="boolean"&&typeof t._dumped=="boolean"&&((e=t.req)===null||e===void 0?void 0:e.upgradeOrConnect)===void 0}function hb(t){if(!et(t))return null;let e=t._writableState,r=t._readableState,i=e||r;return !i&&Bf(t)||!!(i&&i.autoDestroy&&i.emitClose&&i.closed===!1)}function db(t){var e;return !!(t&&((e=t[mf])!==null&&e!==void 0?e:t.readableDidRead||t.readableAborted))}function pb(t){var e,r,i,n,o,s,a,u,c,h;return !!(t&&((e=(r=(i=(n=(o=(s=t[_f])!==null&&s!==void 0?s:t.readableErrored)!==null&&o!==void 0?o:t.writableErrored)!==null&&n!==void 0?n:(a=t._readableState)===null||a===void 0?void 0:a.errorEmitted)!==null&&i!==void 0?i:(u=t._writableState)===null||u===void 0?void 0:u.errorEmitted)!==null&&r!==void 0?r:(c=t._readableState)===null||c===void 0?void 0:c.errored)!==null&&e!==void 0?e:!((h=t._writableState)===null||h===void 0)&&h.errored))}Pf.exports={kDestroyed:wf,isDisturbed:db,kIsDisturbed:mf,isErrored:pb,kIsErrored:_f,isReadable:Tf,kIsReadable:Bs,kIsClosedPromise:eb,kControllerErrorFunction:tb,isClosed:fb,isDestroyed:Ji,isDuplexNodeStream:rb,isFinished:ab,isIterable:nb,isReadableNodeStream:Qi,isReadableStream:vf,isReadableEnded:ob,isReadableFinished:If,isReadableErrored:ub,isNodeStream:et,isWebStream:ib,isWritable:Rf,isWritableNodeStream:Yi,isWritableStream:Ef,isWritableEnded:Af,isWritableFinished:sb,isWritableErrored:lb,isServerRequest:cb,isServerResponse:Bf,willEmitClose:hb,isTransformStream:Sf};});var mt=M((zI,Ms)=>{v();m();_();var Nt=Ut(),{AbortError:Df,codes:gb}=Se(),{ERR_INVALID_ARG_TYPE:yb,ERR_STREAM_PREMATURE_CLOSE:Of}=gb,{kEmptyObject:Os,once:ks}=Je(),{validateAbortSignal:bb,validateFunction:wb,validateObject:_b,validateBoolean:mb}=fi(),{Promise:vb,PromisePrototypeThen:Eb}=ce(),{isClosed:Sb,isReadable:kf,isReadableNodeStream:Ps,isReadableStream:Ab,isReadableFinished:xf,isReadableErrored:Mf,isWritable:Lf,isWritableNodeStream:Uf,isWritableStream:Ib,isWritableFinished:Nf,isWritableErrored:qf,isNodeStream:Tb,willEmitClose:Rb,kIsClosedPromise:Cb}=tt();function Bb(t){return t.setHeader&&typeof t.abort=="function"}var xs=()=>{};function jf(t,e,r){var i,n;if(arguments.length===2?(r=e,e=Os):e==null?e=Os:_b(e,"options"),wb(r,"callback"),bb(e.signal,"options.signal"),r=ks(r),Ab(t)||Ib(t))return Pb(t,e,r);if(!Tb(t))throw new yb("stream",["ReadableStream","WritableStream","Stream"],t);let o=(i=e.readable)!==null&&i!==void 0?i:Ps(t),s=(n=e.writable)!==null&&n!==void 0?n:Uf(t),a=t._writableState,u=t._readableState,c=()=>{t.writable||g();},h=Rb(t)&&Ps(t)===o&&Uf(t)===s,d=Nf(t,!1),g=()=>{d=!0,t.destroyed&&(h=!1),!(h&&(!t.readable||o))&&(!o||y)&&r.call(t);},y=xf(t,!1),w=()=>{y=!0,t.destroyed&&(h=!1),!(h&&(!t.writable||s))&&(!s||d)&&r.call(t);},E=N=>{r.call(t,N);},S=Sb(t),I=()=>{S=!0;let N=qf(t)||Mf(t);if(N&&typeof N!="boolean")return r.call(t,N);if(o&&!y&&Ps(t,!0)&&!xf(t,!1))return r.call(t,new Of);if(s&&!d&&!Nf(t,!1))return r.call(t,new Of);r.call(t);},C=()=>{S=!0;let N=qf(t)||Mf(t);if(N&&typeof N!="boolean")return r.call(t,N);r.call(t);},R=()=>{t.req.on("finish",g);};Bb(t)?(t.on("complete",g),h||t.on("abort",I),t.req?R():t.on("request",R)):s&&!a&&(t.on("end",c),t.on("close",c)),!h&&typeof t.aborted=="boolean"&&t.on("aborted",I),t.on("end",w),t.on("finish",g),e.error!==!1&&t.on("error",E),t.on("close",I),S?Nt.nextTick(I):a!=null&&a.errorEmitted||u!=null&&u.errorEmitted?h||Nt.nextTick(C):(!o&&(!h||kf(t))&&(d||Lf(t)===!1)||!s&&(!h||Lf(t))&&(y||kf(t)===!1)||u&&t.req&&t.aborted)&&Nt.nextTick(C);let U=()=>{r=xs,t.removeListener("aborted",I),t.removeListener("complete",g),t.removeListener("abort",I),t.removeListener("request",R),t.req&&t.req.removeListener("finish",g),t.removeListener("end",c),t.removeListener("close",c),t.removeListener("finish",g),t.removeListener("end",w),t.removeListener("error",E),t.removeListener("close",I);};if(e.signal&&!S){let N=()=>{let W=r;U(),W.call(t,new Df(void 0,{cause:e.signal.reason}));};if(e.signal.aborted)Nt.nextTick(N);else {let W=r;r=ks((...K)=>{e.signal.removeEventListener("abort",N),W.apply(t,K);}),e.signal.addEventListener("abort",N);}}return U}function Pb(t,e,r){let i=!1,n=xs;if(e.signal)if(n=()=>{i=!0,r.call(t,new Df(void 0,{cause:e.signal.reason}));},e.signal.aborted)Nt.nextTick(n);else {let s=r;r=ks((...a)=>{e.signal.removeEventListener("abort",n),s.apply(t,a);}),e.signal.addEventListener("abort",n);}let o=(...s)=>{i||Nt.nextTick(()=>r.apply(t,s));};return Eb(t[Cb].promise,o,o),xs}function Ob(t,e){var r;let i=!1;return e===null&&(e=Os),(r=e)!==null&&r!==void 0&&r.cleanup&&(mb(e.cleanup,"cleanup"),i=e.cleanup),new vb((n,o)=>{let s=jf(t,e,a=>{i&&s(),a?o(a):n();});})}Ms.exports=jf;Ms.exports.finished=Ob;});var tr=M((rT,Gf)=>{v();m();_();var rt=Ut(),{aggregateTwoErrors:kb,codes:{ERR_MULTIPLE_CALLBACK:xb},AbortError:Mb}=Se(),{Symbol:$f}=ce(),{kDestroyed:Lb,isDestroyed:Ub,isFinished:Nb,isServerRequest:qb}=tt(),Hf=$f("kDestroy"),Ls=$f("kConstruct");function Vf(t,e,r){t&&(t.stack,e&&!e.errored&&(e.errored=t),r&&!r.errored&&(r.errored=t));}function Db(t,e){let r=this._readableState,i=this._writableState,n=i||r;return i!=null&&i.destroyed||r!=null&&r.destroyed?(typeof e=="function"&&e(),this):(Vf(t,i,r),i&&(i.destroyed=!0),r&&(r.destroyed=!0),n.constructed?Ff(this,t,e):this.once(Hf,function(o){Ff(this,kb(o,t),e);}),this)}function Ff(t,e,r){let i=!1;function n(o){if(i)return;i=!0;let s=t._readableState,a=t._writableState;Vf(o,a,s),a&&(a.closed=!0),s&&(s.closed=!0),typeof r=="function"&&r(o),o?rt.nextTick(jb,t,o):rt.nextTick(zf,t);}try{t._destroy(e||null,n);}catch(o){n(o);}}function jb(t,e){Us(t,e),zf(t);}function zf(t){let e=t._readableState,r=t._writableState;r&&(r.closeEmitted=!0),e&&(e.closeEmitted=!0),(r!=null&&r.emitClose||e!=null&&e.emitClose)&&t.emit("close");}function Us(t,e){let r=t._readableState,i=t._writableState;i!=null&&i.errorEmitted||r!=null&&r.errorEmitted||(i&&(i.errorEmitted=!0),r&&(r.errorEmitted=!0),t.emit("error",e));}function Fb(){let t=this._readableState,e=this._writableState;t&&(t.constructed=!0,t.closed=!1,t.closeEmitted=!1,t.destroyed=!1,t.errored=null,t.errorEmitted=!1,t.reading=!1,t.ended=t.readable===!1,t.endEmitted=t.readable===!1),e&&(e.constructed=!0,e.destroyed=!1,e.closed=!1,e.closeEmitted=!1,e.errored=null,e.errorEmitted=!1,e.finalCalled=!1,e.prefinished=!1,e.ended=e.writable===!1,e.ending=e.writable===!1,e.finished=e.writable===!1);}function Ns(t,e,r){let i=t._readableState,n=t._writableState;if(n!=null&&n.destroyed||i!=null&&i.destroyed)return this;i!=null&&i.autoDestroy||n!=null&&n.autoDestroy?t.destroy(e):e&&(e.stack,n&&!n.errored&&(n.errored=e),i&&!i.errored&&(i.errored=e),r?rt.nextTick(Us,t,e):Us(t,e));}function Wb(t,e){if(typeof t._construct!="function")return;let r=t._readableState,i=t._writableState;r&&(r.constructed=!1),i&&(i.constructed=!1),t.once(Ls,e),!(t.listenerCount(Ls)>1)&&rt.nextTick($b,t);}function $b(t){let e=!1;function r(i){if(e){Ns(t,i??new xb);return}e=!0;let n=t._readableState,o=t._writableState,s=o||n;n&&(n.constructed=!0),o&&(o.constructed=!0),s.destroyed?t.emit(Hf,i):i?Ns(t,i,!0):rt.nextTick(Hb,t);}try{t._construct(i=>{rt.nextTick(r,i);});}catch(i){rt.nextTick(r,i);}}function Hb(t){t.emit(Ls);}function Wf(t){return t?.setHeader&&typeof t.abort=="function"}function Kf(t){t.emit("close");}function Vb(t,e){t.emit("error",e),rt.nextTick(Kf,t);}function zb(t,e){!t||Ub(t)||(!e&&!Nb(t)&&(e=new Mb),qb(t)?(t.socket=null,t.destroy(e)):Wf(t)?t.abort():Wf(t.req)?t.req.abort():typeof t.destroy=="function"?t.destroy(e):typeof t.close=="function"?t.close():e?rt.nextTick(Vb,t,e):rt.nextTick(Kf,t),t.destroyed||(t[Lb]=!0));}Gf.exports={construct:Wb,destroyer:zb,destroy:Db,undestroy:Fb,errorOrDestroy:Ns};});function Y(){Y.init.call(this);}function Xi(t){if(typeof t!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof t)}function nc(t){return t._maxListeners===void 0?Y.defaultMaxListeners:t._maxListeners}function Xf(t,e,r,i){var n,o,s,a;if(Xi(r),(o=t._events)===void 0?(o=t._events=Object.create(null),t._eventsCount=0):(o.newListener!==void 0&&(t.emit("newListener",e,r.listener?r.listener:r),o=t._events),s=o[e]),s===void 0)s=o[e]=r,++t._eventsCount;else if(typeof s=="function"?s=o[e]=i?[r,s]:[s,r]:i?s.unshift(r):s.push(r),(n=nc(t))>0&&s.length>n&&!s.warned){s.warned=!0;var u=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");u.name="MaxListenersExceededWarning",u.emitter=t,u.type=e,u.count=s.length,a=u,console&&console.warn&&console.warn(a);}return t}function Kb(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function Zf(t,e,r){var i={fired:!1,wrapFn:void 0,target:t,type:e,listener:r},n=Kb.bind(i);return n.listener=r,i.wrapFn=n,n}function ec(t,e,r){var i=t._events;if(i===void 0)return [];var n=i[e];return n===void 0?[]:typeof n=="function"?r?[n.listener||n]:[n]:r?function(o){for(var s=new Array(o.length),a=0;a{v();m();_();Ur=typeof Reflect=="object"?Reflect:null,Qf=Ur&&typeof Ur.apply=="function"?Ur.apply:function(t,e,r){return Function.prototype.apply.call(t,e,r)};ic=Ur&&typeof Ur.ownKeys=="function"?Ur.ownKeys:Object.getOwnPropertySymbols?function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:function(t){return Object.getOwnPropertyNames(t)};Yf=Number.isNaN||function(t){return t!=t};rc=Y,Y.EventEmitter=Y,Y.prototype._events=void 0,Y.prototype._eventsCount=0,Y.prototype._maxListeners=void 0;Jf=10;Object.defineProperty(Y,"defaultMaxListeners",{enumerable:!0,get:function(){return Jf},set:function(t){if(typeof t!="number"||t<0||Yf(t))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+t+".");Jf=t;}}),Y.init=function(){this._events!==void 0&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0;},Y.prototype.setMaxListeners=function(t){if(typeof t!="number"||t<0||Yf(t))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+t+".");return this._maxListeners=t,this},Y.prototype.getMaxListeners=function(){return nc(this)},Y.prototype.emit=function(t){for(var e=[],r=1;r0&&(o=e[0]),o instanceof Error)throw o;var s=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw s.context=o,s}var a=n[t];if(a===void 0)return !1;if(typeof a=="function")Qf(a,this,e);else {var u=a.length,c=sc(a,u);for(r=0;r=0;o--)if(r[o]===e||r[o].listener===e){s=r[o].listener,n=o;break}if(n<0)return this;n===0?r.shift():function(a,u){for(;u+1=0;i--)this.removeListener(t,e[i]);return this},Y.prototype.listeners=function(t){return ec(this,t,!0)},Y.prototype.rawListeners=function(t){return ec(this,t,!1)},Y.listenerCount=function(t,e){return typeof t.listenerCount=="function"?t.listenerCount(e):tc.call(t,e)},Y.prototype.listenerCount=tc,Y.prototype.eventNames=function(){return this._eventsCount>0?ic(this._events):[]};Be=rc;Be.EventEmitter;Be.defaultMaxListeners;Be.init;Be.listenerCount;Be.EventEmitter;Be.defaultMaxListeners;Be.init;Be.listenerCount;});var rr={};Qt(rr,{EventEmitter:()=>Gb,default:()=>Be,defaultMaxListeners:()=>Qb,init:()=>Yb,listenerCount:()=>Jb,on:()=>Xb,once:()=>Zb});var Gb,Qb,Yb,Jb,Xb,Zb,ir=we(()=>{v();m();_();qs();qs();Be.once=function(t,e){return new Promise((r,i)=>{function n(...s){o!==void 0&&t.removeListener("error",o),r(s);}let o;e!=="error"&&(o=s=>{t.removeListener(name,n),i(s);},t.once("error",o)),t.once(e,n);})};Be.on=function(t,e){let r=[],i=[],n=null,o=!1,s={async next(){let c=r.shift();if(c)return createIterResult(c,!1);if(n){let h=Promise.reject(n);return n=null,h}return o?createIterResult(void 0,!0):new Promise((h,d)=>i.push({resolve:h,reject:d}))},async return(){t.removeListener(e,a),t.removeListener("error",u),o=!0;for(let c of i)c.resolve(createIterResult(void 0,!0));return createIterResult(void 0,!0)},throw(c){n=c,t.removeListener(e,a),t.removeListener("error",u);},[Symbol.asyncIterator](){return this}};return t.on(e,a),t.on("error",u),s;function a(...c){let h=i.shift();h?h.resolve(createIterResult(c,!1)):r.push(c);}function u(c){o=!0;let h=i.shift();h?h.reject(c):n=c,s.return();}};({EventEmitter:Gb,defaultMaxListeners:Qb,init:Yb,listenerCount:Jb,on:Xb,once:Zb}=Be);});var tn=M((xT,ac)=>{v();m();_();var{ArrayIsArray:ew,ObjectSetPrototypeOf:oc}=ce(),{EventEmitter:Zi}=(ir(),X(rr));function en(t){Zi.call(this,t);}oc(en.prototype,Zi.prototype);oc(en,Zi);en.prototype.pipe=function(t,e){let r=this;function i(h){t.writable&&t.write(h)===!1&&r.pause&&r.pause();}r.on("data",i);function n(){r.readable&&r.resume&&r.resume();}t.on("drain",n),!t._isStdio&&(!e||e.end!==!1)&&(r.on("end",s),r.on("close",a));let o=!1;function s(){o||(o=!0,t.end());}function a(){o||(o=!0,typeof t.destroy=="function"&&t.destroy());}function u(h){c(),Zi.listenerCount(this,"error")===0&&this.emit("error",h);}Ds(r,"error",u),Ds(t,"error",u);function c(){r.removeListener("data",i),t.removeListener("drain",n),r.removeListener("end",s),r.removeListener("close",a),r.removeListener("error",u),t.removeListener("error",u),r.removeListener("end",c),r.removeListener("close",c),t.removeListener("close",c);}return r.on("end",c),r.on("close",c),t.on("close",c),t.emit("pipe",r),t};function Ds(t,e,r){if(typeof t.prependListener=="function")return t.prependListener(e,r);!t._events||!t._events[e]?t.on(e,r):ew(t._events[e])?t._events[e].unshift(r):t._events[e]=[r,t._events[e]];}ac.exports={Stream:en,prependListener:Ds};});var ci=M(($T,rn)=>{v();m();_();var{AbortError:lc,codes:tw}=Se(),{isNodeStream:uc,isWebStream:rw,kControllerErrorFunction:iw}=tt(),nw=mt(),{ERR_INVALID_ARG_TYPE:fc}=tw,sw=(t,e)=>{if(typeof t!="object"||!("aborted"in t))throw new fc(e,"AbortSignal",t)};rn.exports.addAbortSignal=function(e,r){if(sw(e,"signal"),!uc(r)&&!rw(r))throw new fc("stream",["ReadableStream","WritableStream","Stream"],r);return rn.exports.addAbortSignalNoValidate(e,r)};rn.exports.addAbortSignalNoValidate=function(t,e){if(typeof t!="object"||!("aborted"in t))return e;let r=uc(e)?()=>{e.destroy(new lc(void 0,{cause:t.reason}));}:()=>{e[iw](new lc(void 0,{cause:t.reason}));};return t.aborted?r():(t.addEventListener("abort",r),nw(e,()=>t.removeEventListener("abort",r))),e};});var dc=M((e2,hc)=>{v();m();_();var{StringPrototypeSlice:cc,SymbolIterator:ow,TypedArrayPrototypeSet:nn,Uint8Array:aw}=ce(),{Buffer:js}=(ye(),X(_e)),{inspect:lw}=Je();hc.exports=class{constructor(){this.head=null,this.tail=null,this.length=0;}push(e){let r={data:e,next:null};this.length>0?this.tail.next=r:this.head=r,this.tail=r,++this.length;}unshift(e){let r={data:e,next:this.head};this.length===0&&(this.tail=r),this.head=r,++this.length;}shift(){if(this.length===0)return;let e=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,e}clear(){this.head=this.tail=null,this.length=0;}join(e){if(this.length===0)return "";let r=this.head,i=""+r.data;for(;(r=r.next)!==null;)i+=e+r.data;return i}concat(e){if(this.length===0)return js.alloc(0);let r=js.allocUnsafe(e>>>0),i=this.head,n=0;for(;i;)nn(r,i.data,n),n+=i.data.length,i=i.next;return r}consume(e,r){let i=this.head.data;if(eo.length)r+=o,e-=o.length;else {e===o.length?(r+=o,++n,i.next?this.head=i.next:this.head=this.tail=null):(r+=cc(o,0,e),this.head=i,i.data=cc(o,e));break}++n;}while((i=i.next)!==null);return this.length-=n,r}_getBuffer(e){let r=js.allocUnsafe(e),i=e,n=this.head,o=0;do{let s=n.data;if(e>s.length)nn(r,s,i-e),e-=s.length;else {e===s.length?(nn(r,s,i-e),++o,n.next?this.head=n.next:this.head=this.tail=null):(nn(r,new aw(s.buffer,s.byteOffset,e),i-e),this.head=n,n.data=s.slice(e));break}++o;}while((n=n.next)!==null);return this.length-=o,r}[Symbol.for("nodejs.util.inspect.custom")](e,r){return lw(this,{...r,depth:0,customInspect:!1})}};});var sn=M((f2,gc)=>{v();m();_();var{MathFloor:uw,NumberIsInteger:fw}=ce(),{ERR_INVALID_ARG_VALUE:cw}=Se().codes;function hw(t,e,r){return t.highWaterMark!=null?t.highWaterMark:e?t[r]:null}function pc(t){return t?16:16*1024}function dw(t,e,r,i){let n=hw(e,i,r);if(n!=null){if(!fw(n)||n<0){let o=i?`options.${r}`:"options.highWaterMark";throw new cw(o,n)}return uw(n)}return pc(t.objectMode)}gc.exports={getHighWaterMark:dw,getDefaultHighWaterMark:pc};});function wc(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return r===-1&&(r=e),[r,r===e?0:4-r%4]}function pw(t,e,r){for(var i,n,o=[],s=e;s>18&63]+$e[n>>12&63]+$e[n>>6&63]+$e[63&n]);return o.join("")}function vt(t){if(t>2147483647)throw new RangeError('The value "'+t+'" is invalid for option "size"');var e=new Uint8Array(t);return Object.setPrototypeOf(e,k.prototype),e}function k(t,e,r){if(typeof t=="number"){if(typeof e=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return Hs(t)}return Cc(t,e,r)}function Cc(t,e,r){if(typeof t=="string")return function(o,s){if(typeof s=="string"&&s!==""||(s="utf8"),!k.isEncoding(s))throw new TypeError("Unknown encoding: "+s);var a=0|Pc(o,s),u=vt(a),c=u.write(o,s);return c!==a&&(u=u.slice(0,c)),u}(t,e);if(ArrayBuffer.isView(t))return Fs(t);if(t==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);if(Et(t,ArrayBuffer)||t&&Et(t.buffer,ArrayBuffer)||typeof SharedArrayBuffer<"u"&&(Et(t,SharedArrayBuffer)||t&&Et(t.buffer,SharedArrayBuffer)))return mc(t,e,r);if(typeof t=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');var i=t.valueOf&&t.valueOf();if(i!=null&&i!==t)return k.from(i,e,r);var n=function(o){if(k.isBuffer(o)){var s=0|Ks(o.length),a=vt(s);return a.length===0||o.copy(a,0,0,s),a}if(o.length!==void 0)return typeof o.length!="number"||Gs(o.length)?vt(0):Fs(o);if(o.type==="Buffer"&&Array.isArray(o.data))return Fs(o.data)}(t);if(n)return n;if(typeof Symbol<"u"&&Symbol.toPrimitive!=null&&typeof t[Symbol.toPrimitive]=="function")return k.from(t[Symbol.toPrimitive]("string"),e,r);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t)}function Bc(t){if(typeof t!="number")throw new TypeError('"size" argument must be of type number');if(t<0)throw new RangeError('The value "'+t+'" is invalid for option "size"')}function Hs(t){return Bc(t),vt(t<0?0:0|Ks(t))}function Fs(t){for(var e=t.length<0?0:0|Ks(t.length),r=vt(e),i=0;i=2147483647)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+2147483647 .toString(16)+" bytes");return 0|t}function Pc(t,e){if(k.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||Et(t,ArrayBuffer))return t.byteLength;if(typeof t!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);var r=t.length,i=arguments.length>2&&arguments[2]===!0;if(!i&&r===0)return 0;for(var n=!1;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return Vs(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return Mc(t).length;default:if(n)return i?-1:Vs(t).length;e=(""+e).toLowerCase(),n=!0;}}function yw(t,e,r){var i=!1;if((e===void 0||e<0)&&(e=0),e>this.length||((r===void 0||r>this.length)&&(r=this.length),r<=0)||(r>>>=0)<=(e>>>=0))return "";for(t||(t="utf8");;)switch(t){case"hex":return Iw(this,e,r);case"utf8":case"utf-8":return kc(this,e,r);case"ascii":return Sw(this,e,r);case"latin1":case"binary":return Aw(this,e,r);case"base64":return Ew(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Tw(this,e,r);default:if(i)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),i=!0;}}function sr(t,e,r){var i=t[e];t[e]=t[r],t[r]=i;}function vc(t,e,r,i,n){if(t.length===0)return -1;if(typeof r=="string"?(i=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),Gs(r=+r)&&(r=n?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(n)return -1;r=t.length-1;}else if(r<0){if(!n)return -1;r=0;}if(typeof e=="string"&&(e=k.from(e,i)),k.isBuffer(e))return e.length===0?-1:Ec(t,e,r,i,n);if(typeof e=="number")return e&=255,typeof Uint8Array.prototype.indexOf=="function"?n?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):Ec(t,[e],r,i,n);throw new TypeError("val must be string, number or Buffer")}function Ec(t,e,r,i,n){var o,s=1,a=t.length,u=e.length;if(i!==void 0&&((i=String(i).toLowerCase())==="ucs2"||i==="ucs-2"||i==="utf16le"||i==="utf-16le")){if(t.length<2||e.length<2)return -1;s=2,a/=2,u/=2,r/=2;}function c(y,w){return s===1?y[w]:y.readUInt16BE(w*s)}if(n){var h=-1;for(o=r;oa&&(r=a-u),o=r;o>=0;o--){for(var d=!0,g=0;gn&&(i=n):i=n;var o=e.length;i>o/2&&(i=o/2);for(var s=0;s>8,u=s%256,c.push(u),c.push(a);return c}(e,t.length-r),t,r,i)}function Ew(t,e,r){return e===0&&r===t.length?$s.fromByteArray(t):$s.fromByteArray(t.slice(e,r))}function kc(t,e,r){r=Math.min(t.length,r);for(var i=[],n=e;n239?4:c>223?3:c>191?2:1;if(n+d<=r)switch(d){case 1:c<128&&(h=c);break;case 2:(192&(o=t[n+1]))==128&&(u=(31&c)<<6|63&o)>127&&(h=u);break;case 3:o=t[n+1],s=t[n+2],(192&o)==128&&(192&s)==128&&(u=(15&c)<<12|(63&o)<<6|63&s)>2047&&(u<55296||u>57343)&&(h=u);break;case 4:o=t[n+1],s=t[n+2],a=t[n+3],(192&o)==128&&(192&s)==128&&(192&a)==128&&(u=(15&c)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&u<1114112&&(h=u);}h===null?(h=65533,d=1):h>65535&&(h-=65536,i.push(h>>>10&1023|55296),h=56320|1023&h),i.push(h),n+=d;}return function(g){var y=g.length;if(y<=4096)return String.fromCharCode.apply(String,g);for(var w="",E=0;Ei)&&(r=i);for(var n="",o=e;or)throw new RangeError("Trying to access beyond buffer length")}function Pe(t,e,r,i,n,o){if(!k.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>n||et.length)throw new RangeError("Index out of range")}function xc(t,e,r,i,n,o){if(r+i>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function Sc(t,e,r,i,n){return e=+e,r>>>=0,n||xc(t,0,r,4),Nr.write(t,e,r,i,23,4),r+4}function Ac(t,e,r,i,n){return e=+e,r>>>=0,n||xc(t,0,r,8),Nr.write(t,e,r,i,52,8),r+8}function Vs(t,e){var r;e=e||1/0;for(var i=t.length,n=null,o=[],s=0;s55295&&r<57344){if(!n){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===i){(e-=3)>-1&&o.push(239,191,189);continue}n=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),n=r;continue}r=65536+(n-55296<<10|r-56320);}else n&&(e-=3)>-1&&o.push(239,191,189);if(n=null,r<128){if((e-=1)<0)break;o.push(r);}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128);}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128);}else {if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128);}}return o}function Mc(t){return $s.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(Rw,"")).length<2)return "";for(;e.length%4!=0;)e+="=";return e}(t))}function un(t,e,r,i){for(var n=0;n=e.length||n>=t.length);++n)e[n+r]=t[n];return n}function Et(t,e){return t instanceof e||t!=null&&t.constructor!=null&&t.constructor.name!=null&&t.constructor.name===e.name}function Gs(t){return t!=t}function Ic(t,e){for(var r in t)e[r]=t[r];}function or(t,e,r){return it(t,e,r)}function hi(t){var e;switch(this.encoding=function(r){var i=function(n){if(!n)return "utf8";for(var o;;)switch(n){case"utf8":case"utf-8":return "utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return "utf16le";case"latin1":case"binary":return "latin1";case"base64":case"ascii":case"hex":return n;default:if(o)return;n=(""+n).toLowerCase(),o=!0;}}(r);if(typeof i!="string"&&(zs.isEncoding===Tc||!Tc(r)))throw new Error("Unknown encoding: "+r);return i||r}(t),this.encoding){case"utf16le":this.text=Ow,this.end=kw,e=4;break;case"utf8":this.fillLast=Pw,e=4;break;case"base64":this.text=xw,this.end=Mw,e=3;break;default:return this.write=Lw,this.end=Uw,void 0}this.lastNeed=0,this.lastTotal=0,this.lastChar=zs.allocUnsafe(e);}function Ws(t){return t<=127?0:t>>5==6?2:t>>4==14?3:t>>3==30?4:t>>6==2?-1:-2}function Pw(t){var e=this.lastTotal-this.lastNeed,r=function(i,n,o){if((192&n[0])!=128)return i.lastNeed=0,"\uFFFD";if(i.lastNeed>1&&n.length>1){if((192&n[1])!=128)return i.lastNeed=1,"\uFFFD";if(i.lastNeed>2&&n.length>2&&(192&n[2])!=128)return i.lastNeed=2,"\uFFFD"}}(this,t);return r!==void 0?r:this.lastNeed<=t.length?(t.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(t.copy(this.lastChar,e,0,t.length),this.lastNeed-=t.length,void 0)}function Ow(t,e){if((t.length-e)%2==0){var r=t.toString("utf16le",e);if(r){var i=r.charCodeAt(r.length-1);if(i>=55296&&i<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=t[t.length-1],t.toString("utf16le",e,t.length-1)}function kw(t){var e=t&&t.length?this.write(t):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return e+this.lastChar.toString("utf16le",0,r)}return e}function xw(t,e){var r=(t.length-e)%3;return r===0?t.toString("base64",e):(this.lastNeed=3-r,this.lastTotal=3,r===1?this.lastChar[0]=t[t.length-1]:(this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1]),t.toString("base64",e,t.length-r))}function Mw(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+this.lastChar.toString("base64",0,3-this.lastNeed):e}function Lw(t){return t.toString(this.encoding)}function Uw(t){return t&&t.length?this.write(t):""}var Rc,$e,ke,yc,on,nr,bc,gw,St,$s,Nr,_c,Rw,Cw,an,ln,it,Bw,ar,zs,Tc,Qs=we(()=>{v();m();_();for(Rc={byteLength:function(t){var e=wc(t),r=e[0],i=e[1];return 3*(r+i)/4-i},toByteArray:function(t){var e,r,i=wc(t),n=i[0],o=i[1],s=new yc(function(c,h,d){return 3*(h+d)/4-d}(0,n,o)),a=0,u=o>0?n-4:n;for(r=0;r>16&255,s[a++]=e>>8&255,s[a++]=255&e;return o===2&&(e=ke[t.charCodeAt(r)]<<2|ke[t.charCodeAt(r+1)]>>4,s[a++]=255&e),o===1&&(e=ke[t.charCodeAt(r)]<<10|ke[t.charCodeAt(r+1)]<<4|ke[t.charCodeAt(r+2)]>>2,s[a++]=e>>8&255,s[a++]=255&e),s},fromByteArray:function(t){for(var e,r=t.length,i=r%3,n=[],o=0,s=r-i;os?s:o+16383));return i===1?(e=t[r-1],n.push($e[e>>2]+$e[e<<4&63]+"==")):i===2&&(e=(t[r-2]<<8)+t[r-1],n.push($e[e>>10]+$e[e>>4&63]+$e[e<<2&63]+"=")),n.join("")}},$e=[],ke=[],yc=typeof Uint8Array<"u"?Uint8Array:Array,on="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",nr=0,bc=on.length;nr>1,h=-7,d=r?n-1:0,g=r?-1:1,y=t[e+d];for(d+=g,o=y&(1<<-h)-1,y>>=-h,h+=a;h>0;o=256*o+t[e+d],d+=g,h-=8);for(s=o&(1<<-h)-1,o>>=-h,h+=i;h>0;s=256*s+t[e+d],d+=g,h-=8);if(o===0)o=1-c;else {if(o===u)return s?NaN:1/0*(y?-1:1);s+=Math.pow(2,i),o-=c;}return (y?-1:1)*s*Math.pow(2,o-i)},write:function(t,e,r,i,n,o){var s,a,u,c=8*o-n-1,h=(1<>1,g=n===23?Math.pow(2,-24)-Math.pow(2,-77):0,y=i?0:o-1,w=i?1:-1,E=e<0||e===0&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=h):(s=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-s))<1&&(s--,u*=2),(e+=s+d>=1?g/u:g*Math.pow(2,1-d))*u>=2&&(s++,u/=2),s+d>=h?(a=0,s=h):s+d>=1?(a=(e*u-1)*Math.pow(2,n),s+=d):(a=e*Math.pow(2,d-1)*Math.pow(2,n),s=0));n>=8;t[r+y]=255&a,y+=w,a/=256,n-=8);for(s=s<0;t[r+y]=255&s,y+=w,s/=256,c-=8);t[r+y-w]|=128*E;}},St={},$s=Rc,Nr=gw,_c=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):null;St.Buffer=k,St.SlowBuffer=function(t){return +t!=t&&(t=0),k.alloc(+t)},St.INSPECT_MAX_BYTES=50;St.kMaxLength=2147483647,k.TYPED_ARRAY_SUPPORT=function(){try{var t=new Uint8Array(1),e={foo:function(){return 42}};return Object.setPrototypeOf(e,Uint8Array.prototype),Object.setPrototypeOf(t,e),t.foo()===42}catch{return !1}}(),k.TYPED_ARRAY_SUPPORT||typeof console>"u"||typeof console.error!="function"||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),Object.defineProperty(k.prototype,"parent",{enumerable:!0,get:function(){if(k.isBuffer(this))return this.buffer}}),Object.defineProperty(k.prototype,"offset",{enumerable:!0,get:function(){if(k.isBuffer(this))return this.byteOffset}}),k.poolSize=8192,k.from=function(t,e,r){return Cc(t,e,r)},Object.setPrototypeOf(k.prototype,Uint8Array.prototype),Object.setPrototypeOf(k,Uint8Array),k.alloc=function(t,e,r){return function(i,n,o){return Bc(i),i<=0?vt(i):n!==void 0?typeof o=="string"?vt(i).fill(n,o):vt(i).fill(n):vt(i)}(t,e,r)},k.allocUnsafe=function(t){return Hs(t)},k.allocUnsafeSlow=function(t){return Hs(t)},k.isBuffer=function(t){return t!=null&&t._isBuffer===!0&&t!==k.prototype},k.compare=function(t,e){if(Et(t,Uint8Array)&&(t=k.from(t,t.offset,t.byteLength)),Et(e,Uint8Array)&&(e=k.from(e,e.offset,e.byteLength)),!k.isBuffer(t)||!k.isBuffer(e))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(t===e)return 0;for(var r=t.length,i=e.length,n=0,o=Math.min(r,i);ne&&(t+=" ... "),""},_c&&(k.prototype[_c]=k.prototype.inspect),k.prototype.compare=function(t,e,r,i,n){if(Et(t,Uint8Array)&&(t=k.from(t,t.offset,t.byteLength)),!k.isBuffer(t))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(e===void 0&&(e=0),r===void 0&&(r=t?t.length:0),i===void 0&&(i=0),n===void 0&&(n=this.length),e<0||r>t.length||i<0||n>this.length)throw new RangeError("out of range index");if(i>=n&&e>=r)return 0;if(i>=n)return -1;if(e>=r)return 1;if(this===t)return 0;for(var o=(n>>>=0)-(i>>>=0),s=(r>>>=0)-(e>>>=0),a=Math.min(o,s),u=this.slice(i,n),c=t.slice(e,r),h=0;h>>=0,isFinite(r)?(r>>>=0,i===void 0&&(i="utf8")):(i=r,r=void 0);}var n=this.length-e;if((r===void 0||r>n)&&(r=n),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");i||(i="utf8");for(var o=!1;;)switch(i){case"hex":return bw(this,t,e,r);case"utf8":case"utf-8":return ww(this,t,e,r);case"ascii":return Oc(this,t,e,r);case"latin1":case"binary":return _w(this,t,e,r);case"base64":return mw(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return vw(this,t,e,r);default:if(o)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase(),o=!0;}},k.prototype.toJSON=function(){return {type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};k.prototype.slice=function(t,e){var r=this.length;(t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=e===void 0?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e>>=0,e>>>=0,r||be(t,e,this.length);for(var i=this[t],n=1,o=0;++o>>=0,e>>>=0,r||be(t,e,this.length);for(var i=this[t+--e],n=1;e>0&&(n*=256);)i+=this[t+--e]*n;return i},k.prototype.readUInt8=function(t,e){return t>>>=0,e||be(t,1,this.length),this[t]},k.prototype.readUInt16LE=function(t,e){return t>>>=0,e||be(t,2,this.length),this[t]|this[t+1]<<8},k.prototype.readUInt16BE=function(t,e){return t>>>=0,e||be(t,2,this.length),this[t]<<8|this[t+1]},k.prototype.readUInt32LE=function(t,e){return t>>>=0,e||be(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},k.prototype.readUInt32BE=function(t,e){return t>>>=0,e||be(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},k.prototype.readIntLE=function(t,e,r){t>>>=0,e>>>=0,r||be(t,e,this.length);for(var i=this[t],n=1,o=0;++o=(n*=128)&&(i-=Math.pow(2,8*e)),i},k.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||be(t,e,this.length);for(var i=e,n=1,o=this[t+--i];i>0&&(n*=256);)o+=this[t+--i]*n;return o>=(n*=128)&&(o-=Math.pow(2,8*e)),o},k.prototype.readInt8=function(t,e){return t>>>=0,e||be(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},k.prototype.readInt16LE=function(t,e){t>>>=0,e||be(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},k.prototype.readInt16BE=function(t,e){t>>>=0,e||be(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},k.prototype.readInt32LE=function(t,e){return t>>>=0,e||be(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},k.prototype.readInt32BE=function(t,e){return t>>>=0,e||be(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},k.prototype.readFloatLE=function(t,e){return t>>>=0,e||be(t,4,this.length),Nr.read(this,t,!0,23,4)},k.prototype.readFloatBE=function(t,e){return t>>>=0,e||be(t,4,this.length),Nr.read(this,t,!1,23,4)},k.prototype.readDoubleLE=function(t,e){return t>>>=0,e||be(t,8,this.length),Nr.read(this,t,!0,52,8)},k.prototype.readDoubleBE=function(t,e){return t>>>=0,e||be(t,8,this.length),Nr.read(this,t,!1,52,8)},k.prototype.writeUIntLE=function(t,e,r,i){t=+t,e>>>=0,r>>>=0,i||Pe(this,t,e,r,Math.pow(2,8*r)-1,0);var n=1,o=0;for(this[e]=255&t;++o>>=0,r>>>=0,i||Pe(this,t,e,r,Math.pow(2,8*r)-1,0);var n=r-1,o=1;for(this[e+n]=255&t;--n>=0&&(o*=256);)this[e+n]=t/o&255;return e+r},k.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,1,255,0),this[e]=255&t,e+1},k.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},k.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},k.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},k.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},k.prototype.writeIntLE=function(t,e,r,i){if(t=+t,e>>>=0,!i){var n=Math.pow(2,8*r-1);Pe(this,t,e,r,n-1,-n);}var o=0,s=1,a=0;for(this[e]=255&t;++o>0)-a&255;return e+r},k.prototype.writeIntBE=function(t,e,r,i){if(t=+t,e>>>=0,!i){var n=Math.pow(2,8*r-1);Pe(this,t,e,r,n-1,-n);}var o=r-1,s=1,a=0;for(this[e+o]=255&t;--o>=0&&(s*=256);)t<0&&a===0&&this[e+o+1]!==0&&(a=1),this[e+o]=(t/s>>0)-a&255;return e+r},k.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},k.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},k.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},k.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},k.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},k.prototype.writeFloatLE=function(t,e,r){return Sc(this,t,e,!0,r)},k.prototype.writeFloatBE=function(t,e,r){return Sc(this,t,e,!1,r)},k.prototype.writeDoubleLE=function(t,e,r){return Ac(this,t,e,!0,r)},k.prototype.writeDoubleBE=function(t,e,r){return Ac(this,t,e,!1,r)},k.prototype.copy=function(t,e,r,i){if(!k.isBuffer(t))throw new TypeError("argument should be a Buffer");if(r||(r=0),i||i===0||(i=this.length),e>=t.length&&(e=t.length),e||(e=0),i>0&&i=this.length)throw new RangeError("Index out of range");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),t.length-e=0;--o)t[o+e]=this[o+r];else Uint8Array.prototype.set.call(t,this.subarray(r,i),e);return n},k.prototype.fill=function(t,e,r,i){if(typeof t=="string"){if(typeof e=="string"?(i=e,e=0,r=this.length):typeof r=="string"&&(i=r,r=this.length),i!==void 0&&typeof i!="string")throw new TypeError("encoding must be a string");if(typeof i=="string"&&!k.isEncoding(i))throw new TypeError("Unknown encoding: "+i);if(t.length===1){var n=t.charCodeAt(0);(i==="utf8"&&n<128||i==="latin1")&&(t=n);}}else typeof t=="number"?t&=255:typeof t=="boolean"&&(t=Number(t));if(e<0||this.length>>=0,r=r===void 0?this.length:r>>>0,t||(t=0),typeof t=="number")for(o=e;o=0?(u>0&&(n.lastNeed=u-1),u):--a=0?(u>0&&(n.lastNeed=u-2),u):--a=0?(u>0&&(u===2?u=0:n.lastNeed=u-3),u):0}(this,t,e);if(!this.lastNeed)return t.toString("utf8",e);this.lastTotal=r;var i=t.length-(r-this.lastNeed);return t.copy(this.lastChar,0,i),t.toString("utf8",e,i)},hi.prototype.fillLast=function(t){if(this.lastNeed<=t.length)return t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,t.length),this.lastNeed-=t.length;};ar.StringDecoder;ar.StringDecoder;});var Lc={};Qt(Lc,{StringDecoder:()=>Nw,default:()=>ar});var Nw,Uc=we(()=>{v();m();_();Qs();Qs();Nw=ar.StringDecoder;});var Ys=M((F2,jc)=>{v();m();_();var Nc=Ut(),{PromisePrototypeThen:qw,SymbolAsyncIterator:qc,SymbolIterator:Dc}=ce(),{Buffer:Dw}=(ye(),X(_e)),{ERR_INVALID_ARG_TYPE:jw,ERR_STREAM_NULL_VALUES:Fw}=Se().codes;function Ww(t,e,r){let i;if(typeof e=="string"||e instanceof Dw)return new t({objectMode:!0,...r,read(){this.push(e),this.push(null);}});let n;if(e&&e[qc])n=!0,i=e[qc]();else if(e&&e[Dc])n=!1,i=e[Dc]();else throw new jw("iterable",["Iterable"],e);let o=new t({objectMode:!0,highWaterMark:1,...r}),s=!1;o._read=function(){s||(s=!0,u());},o._destroy=function(c,h){qw(a(c),()=>Nc.nextTick(h,c),d=>Nc.nextTick(h,d||c));};async function a(c){let h=c!=null,d=typeof i.throw=="function";if(h&&d){let{value:g,done:y}=await i.throw(c);if(await g,y)return}if(typeof i.return=="function"){let{value:g}=await i.return();await g;}}async function u(){for(;;){try{let{value:c,done:h}=n?await i.next():i.next();if(h)o.push(null);else {let d=c&&typeof c.then=="function"?await c:c;if(d===null)throw s=!1,new Fw;if(o.push(d))continue;s=!1;}}catch(c){o.destroy(c);}break}}return o}jc.exports=Ww;});var di=M((J2,Zc)=>{v();m();_();var He=Ut(),{ArrayPrototypeIndexOf:$w,NumberIsInteger:Hw,NumberIsNaN:Vw,NumberParseInt:zw,ObjectDefineProperties:$c,ObjectKeys:Kw,ObjectSetPrototypeOf:Hc,Promise:Gw,SafeSet:Qw,SymbolAsyncIterator:Yw,Symbol:Jw}=ce();Zc.exports=F;F.ReadableState=ro;var{EventEmitter:Xw}=(ir(),X(rr)),{Stream:qt,prependListener:Zw}=tn(),{Buffer:Js}=(ye(),X(_e)),{addAbortSignal:e_}=ci(),t_=mt(),H=Je().debuglog("stream",t=>{H=t;}),r_=dc(),Dr=tr(),{getHighWaterMark:i_,getDefaultHighWaterMark:n_}=sn(),{aggregateTwoErrors:Fc,codes:{ERR_INVALID_ARG_TYPE:s_,ERR_METHOD_NOT_IMPLEMENTED:o_,ERR_OUT_OF_RANGE:a_,ERR_STREAM_PUSH_AFTER_EOF:l_,ERR_STREAM_UNSHIFT_AFTER_END_EVENT:u_}}=Se(),{validateObject:f_}=fi(),lr=Jw("kPaused"),{StringDecoder:Vc}=(Uc(),X(Lc)),c_=Ys();Hc(F.prototype,qt.prototype);Hc(F,qt);var Xs=()=>{},{errorOrDestroy:qr}=Dr;function ro(t,e,r){typeof r!="boolean"&&(r=e instanceof nt()),this.objectMode=!!(t&&t.objectMode),r&&(this.objectMode=this.objectMode||!!(t&&t.readableObjectMode)),this.highWaterMark=t?i_(this,t,"readableHighWaterMark",r):n_(!1),this.buffer=new r_,this.length=0,this.pipes=[],this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.constructed=!0,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this[lr]=null,this.errorEmitted=!1,this.emitClose=!t||t.emitClose!==!1,this.autoDestroy=!t||t.autoDestroy!==!1,this.destroyed=!1,this.errored=null,this.closed=!1,this.closeEmitted=!1,this.defaultEncoding=t&&t.defaultEncoding||"utf8",this.awaitDrainWriters=null,this.multiAwaitDrain=!1,this.readingMore=!1,this.dataEmitted=!1,this.decoder=null,this.encoding=null,t&&t.encoding&&(this.decoder=new Vc(t.encoding),this.encoding=t.encoding);}function F(t){if(!(this instanceof F))return new F(t);let e=this instanceof nt();this._readableState=new ro(t,this,e),t&&(typeof t.read=="function"&&(this._read=t.read),typeof t.destroy=="function"&&(this._destroy=t.destroy),typeof t.construct=="function"&&(this._construct=t.construct),t.signal&&!e&&e_(t.signal,this)),qt.call(this,t),Dr.construct(this,()=>{this._readableState.needReadable&&fn(this,this._readableState);});}F.prototype.destroy=Dr.destroy;F.prototype._undestroy=Dr.undestroy;F.prototype._destroy=function(t,e){e(t);};F.prototype[Xw.captureRejectionSymbol]=function(t){this.destroy(t);};F.prototype.push=function(t,e){return zc(this,t,e,!1)};F.prototype.unshift=function(t,e){return zc(this,t,e,!0)};function zc(t,e,r,i){H("readableAddChunk",e);let n=t._readableState,o;if(n.objectMode||(typeof e=="string"?(r=r||n.defaultEncoding,n.encoding!==r&&(i&&n.encoding?e=Js.from(e,r).toString(n.encoding):(e=Js.from(e,r),r=""))):e instanceof Js?r="":qt._isUint8Array(e)?(e=qt._uint8ArrayToBuffer(e),r=""):e!=null&&(o=new s_("chunk",["string","Buffer","Uint8Array"],e))),o)qr(t,o);else if(e===null)n.reading=!1,p_(t,n);else if(n.objectMode||e&&e.length>0)if(i)if(n.endEmitted)qr(t,new u_);else {if(n.destroyed||n.errored)return !1;Zs(t,n,e,!0);}else if(n.ended)qr(t,new l_);else {if(n.destroyed||n.errored)return !1;n.reading=!1,n.decoder&&!r?(e=n.decoder.write(e),n.objectMode||e.length!==0?Zs(t,n,e,!1):fn(t,n)):Zs(t,n,e,!1);}else i||(n.reading=!1,fn(t,n));return !n.ended&&(n.length0?(e.multiAwaitDrain?e.awaitDrainWriters.clear():e.awaitDrainWriters=null,e.dataEmitted=!0,t.emit("data",r)):(e.length+=e.objectMode?1:r.length,i?e.buffer.unshift(r):e.buffer.push(r),e.needReadable&&cn(t)),fn(t,e);}F.prototype.isPaused=function(){let t=this._readableState;return t[lr]===!0||t.flowing===!1};F.prototype.setEncoding=function(t){let e=new Vc(t);this._readableState.decoder=e,this._readableState.encoding=this._readableState.decoder.encoding;let r=this._readableState.buffer,i="";for(let n of r)i+=e.write(n);return r.clear(),i!==""&&r.push(i),this._readableState.length=i.length,this};var h_=1073741824;function d_(t){if(t>h_)throw new a_("size","<= 1GiB",t);return t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++,t}function Wc(t,e){return t<=0||e.length===0&&e.ended?0:e.objectMode?1:Vw(t)?e.flowing&&e.length?e.buffer.first().length:e.length:t<=e.length?t:e.ended?e.length:0}F.prototype.read=function(t){H("read",t),t===void 0?t=NaN:Hw(t)||(t=zw(t,10));let e=this._readableState,r=t;if(t>e.highWaterMark&&(e.highWaterMark=d_(t)),t!==0&&(e.emittedReadable=!1),t===0&&e.needReadable&&((e.highWaterMark!==0?e.length>=e.highWaterMark:e.length>0)||e.ended))return H("read: emitReadable",e.length,e.ended),e.length===0&&e.ended?eo(this):cn(this),null;if(t=Wc(t,e),t===0&&e.ended)return e.length===0&&eo(this),null;let i=e.needReadable;if(H("need readable",i),(e.length===0||e.length-t0?n=Jc(t,e):n=null,n===null?(e.needReadable=e.length<=e.highWaterMark,t=0):(e.length-=t,e.multiAwaitDrain?e.awaitDrainWriters.clear():e.awaitDrainWriters=null),e.length===0&&(e.ended||(e.needReadable=!0),r!==t&&e.ended&&eo(this)),n!==null&&!e.errorEmitted&&!e.closeEmitted&&(e.dataEmitted=!0,this.emit("data",n)),n};function p_(t,e){if(H("onEofChunk"),!e.ended){if(e.decoder){let r=e.decoder.end();r&&r.length&&(e.buffer.push(r),e.length+=e.objectMode?1:r.length);}e.ended=!0,e.sync?cn(t):(e.needReadable=!1,e.emittedReadable=!0,Kc(t));}}function cn(t){let e=t._readableState;H("emitReadable",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||(H("emitReadable",e.flowing),e.emittedReadable=!0,He.nextTick(Kc,t));}function Kc(t){let e=t._readableState;H("emitReadable_",e.destroyed,e.length,e.ended),!e.destroyed&&!e.errored&&(e.length||e.ended)&&(t.emit("readable"),e.emittedReadable=!1),e.needReadable=!e.flowing&&!e.ended&&e.length<=e.highWaterMark,Qc(t);}function fn(t,e){!e.readingMore&&e.constructed&&(e.readingMore=!0,He.nextTick(g_,t,e));}function g_(t,e){for(;!e.reading&&!e.ended&&(e.length1&&i.pipes.includes(t)&&(H("false write response, pause",i.awaitDrainWriters.size),i.awaitDrainWriters.add(t)),r.pause()),u||(u=y_(r,t),t.on("drain",u));}r.on("data",g);function g(I){H("ondata");let C=t.write(I);H("dest.write",C),C===!1&&d();}function y(I){if(H("onerror",I),S(),t.removeListener("error",y),t.listenerCount("error")===0){let C=t._writableState||t._readableState;C&&!C.errorEmitted?qr(t,I):t.emit("error",I);}}Zw(t,"error",y);function w(){t.removeListener("finish",E),S();}t.once("close",w);function E(){H("onfinish"),t.removeListener("close",w),S();}t.once("finish",E);function S(){H("unpipe"),r.unpipe(t);}return t.emit("pipe",r),t.writableNeedDrain===!0?i.flowing&&d():i.flowing||(H("pipe resume"),r.resume()),t};function y_(t,e){return function(){let i=t._readableState;i.awaitDrainWriters===e?(H("pipeOnDrain",1),i.awaitDrainWriters=null):i.multiAwaitDrain&&(H("pipeOnDrain",i.awaitDrainWriters.size),i.awaitDrainWriters.delete(e)),(!i.awaitDrainWriters||i.awaitDrainWriters.size===0)&&t.listenerCount("data")&&t.resume();}}F.prototype.unpipe=function(t){let e=this._readableState,r={hasUnpiped:!1};if(e.pipes.length===0)return this;if(!t){let n=e.pipes;e.pipes=[],this.pause();for(let o=0;o0,i.flowing!==!1&&this.resume()):t==="readable"&&!i.endEmitted&&!i.readableListening&&(i.readableListening=i.needReadable=!0,i.flowing=!1,i.emittedReadable=!1,H("on readable",i.length,i.reading),i.length?cn(this):i.reading||He.nextTick(b_,this)),r};F.prototype.addListener=F.prototype.on;F.prototype.removeListener=function(t,e){let r=qt.prototype.removeListener.call(this,t,e);return t==="readable"&&He.nextTick(Gc,this),r};F.prototype.off=F.prototype.removeListener;F.prototype.removeAllListeners=function(t){let e=qt.prototype.removeAllListeners.apply(this,arguments);return (t==="readable"||t===void 0)&&He.nextTick(Gc,this),e};function Gc(t){let e=t._readableState;e.readableListening=t.listenerCount("readable")>0,e.resumeScheduled&&e[lr]===!1?e.flowing=!0:t.listenerCount("data")>0?t.resume():e.readableListening||(e.flowing=null);}function b_(t){H("readable nexttick read 0"),t.read(0);}F.prototype.resume=function(){let t=this._readableState;return t.flowing||(H("resume"),t.flowing=!t.readableListening,w_(this,t)),t[lr]=!1,this};function w_(t,e){e.resumeScheduled||(e.resumeScheduled=!0,He.nextTick(__,t,e));}function __(t,e){H("resume",e.reading),e.reading||t.read(0),e.resumeScheduled=!1,t.emit("resume"),Qc(t),e.flowing&&!e.reading&&t.read(0);}F.prototype.pause=function(){return H("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&(H("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState[lr]=!0,this};function Qc(t){let e=t._readableState;for(H("flow",e.flowing);e.flowing&&t.read()!==null;);}F.prototype.wrap=function(t){let e=!1;t.on("data",i=>{!this.push(i)&&t.pause&&(e=!0,t.pause());}),t.on("end",()=>{this.push(null);}),t.on("error",i=>{qr(this,i);}),t.on("close",()=>{this.destroy();}),t.on("destroy",()=>{this.destroy();}),this._read=()=>{e&&t.resume&&(e=!1,t.resume());};let r=Kw(t);for(let i=1;i{n=s?Fc(n,s):null,r(),r=Xs;});try{for(;;){let s=t.destroyed?null:t.read();if(s!==null)yield s;else {if(n)throw n;if(n===null)return;await new Gw(i);}}}catch(s){throw n=Fc(n,s),n}finally{(n||e?.destroyOnReturn!==!1)&&(n===void 0||t._readableState.autoDestroy)?Dr.destroyer(t,null):(t.off("readable",i),o());}}$c(F.prototype,{readable:{__proto__:null,get(){let t=this._readableState;return !!t&&t.readable!==!1&&!t.destroyed&&!t.errorEmitted&&!t.endEmitted},set(t){this._readableState&&(this._readableState.readable=!!t);}},readableDidRead:{__proto__:null,enumerable:!1,get:function(){return this._readableState.dataEmitted}},readableAborted:{__proto__:null,enumerable:!1,get:function(){return !!(this._readableState.readable!==!1&&(this._readableState.destroyed||this._readableState.errored)&&!this._readableState.endEmitted)}},readableHighWaterMark:{__proto__:null,enumerable:!1,get:function(){return this._readableState.highWaterMark}},readableBuffer:{__proto__:null,enumerable:!1,get:function(){return this._readableState&&this._readableState.buffer}},readableFlowing:{__proto__:null,enumerable:!1,get:function(){return this._readableState.flowing},set:function(t){this._readableState&&(this._readableState.flowing=t);}},readableLength:{__proto__:null,enumerable:!1,get(){return this._readableState.length}},readableObjectMode:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.objectMode:!1}},readableEncoding:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.encoding:null}},errored:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.errored:null}},closed:{__proto__:null,get(){return this._readableState?this._readableState.closed:!1}},destroyed:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.destroyed:!1},set(t){this._readableState&&(this._readableState.destroyed=t);}},readableEnded:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.endEmitted:!1}}});$c(ro.prototype,{pipesCount:{__proto__:null,get(){return this.pipes.length}},paused:{__proto__:null,get(){return this[lr]!==!1},set(t){this[lr]=!!t;}}});F._fromList=Jc;function Jc(t,e){if(e.length===0)return null;let r;return e.objectMode?r=e.buffer.shift():!t||t>=e.length?(e.decoder?r=e.buffer.join(""):e.buffer.length===1?r=e.buffer.first():r=e.buffer.concat(e.length),e.buffer.clear()):r=e.buffer.consume(t,e.decoder),r}function eo(t){let e=t._readableState;H("endReadable",e.endEmitted),e.endEmitted||(e.ended=!0,He.nextTick(v_,e,t));}function v_(t,e){if(H("endReadableNT",t.endEmitted,t.length),!t.errored&&!t.closeEmitted&&!t.endEmitted&&t.length===0){if(t.endEmitted=!0,e.emit("end"),e.writable&&e.allowHalfOpen===!1)He.nextTick(E_,e);else if(t.autoDestroy){let r=e._writableState;(!r||r.autoDestroy&&(r.finished||r.writable===!1))&&e.destroy();}}}function E_(t){t.writable&&!t.writableEnded&&!t.destroyed&&t.end();}F.from=function(t,e){return c_(F,t,e)};var to;function Xc(){return to===void 0&&(to={}),to}F.fromWeb=function(t,e){return Xc().newStreamReadableFromReadableStream(t,e)};F.toWeb=function(t,e){return Xc().newReadableStreamFromStreamReadable(t,e)};F.wrap=function(t,e){var r,i;return new F({objectMode:(r=(i=t.readableObjectMode)!==null&&i!==void 0?i:t.objectMode)!==null&&r!==void 0?r:!0,...e,destroy(n,o){Dr.destroyer(t,n),o(n);}}).wrap(t)};});var uo=M((aR,ch)=>{v();m();_();var ur=Ut(),{ArrayPrototypeSlice:rh,Error:S_,FunctionPrototypeSymbolHasInstance:ih,ObjectDefineProperty:nh,ObjectDefineProperties:A_,ObjectSetPrototypeOf:sh,StringPrototypeToLowerCase:I_,Symbol:T_,SymbolHasInstance:R_}=ce();ch.exports=ie;ie.WritableState=yi;var{EventEmitter:C_}=(ir(),X(rr)),pi=tn().Stream,{Buffer:hn}=(ye(),X(_e)),gn=tr(),{addAbortSignal:B_}=ci(),{getHighWaterMark:P_,getDefaultHighWaterMark:O_}=sn(),{ERR_INVALID_ARG_TYPE:k_,ERR_METHOD_NOT_IMPLEMENTED:x_,ERR_MULTIPLE_CALLBACK:oh,ERR_STREAM_CANNOT_PIPE:M_,ERR_STREAM_DESTROYED:gi,ERR_STREAM_ALREADY_FINISHED:L_,ERR_STREAM_NULL_VALUES:U_,ERR_STREAM_WRITE_AFTER_END:N_,ERR_UNKNOWN_ENCODING:ah}=Se().codes,{errorOrDestroy:jr}=gn;sh(ie.prototype,pi.prototype);sh(ie,pi);function so(){}var Fr=T_("kOnFinished");function yi(t,e,r){typeof r!="boolean"&&(r=e instanceof nt()),this.objectMode=!!(t&&t.objectMode),r&&(this.objectMode=this.objectMode||!!(t&&t.writableObjectMode)),this.highWaterMark=t?P_(this,t,"writableHighWaterMark",r):O_(!1),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;let i=!!(t&&t.decodeStrings===!1);this.decodeStrings=!i,this.defaultEncoding=t&&t.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=D_.bind(void 0,e),this.writecb=null,this.writelen=0,this.afterWriteTickInfo=null,pn(this),this.pendingcb=0,this.constructed=!0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=!t||t.emitClose!==!1,this.autoDestroy=!t||t.autoDestroy!==!1,this.errored=null,this.closed=!1,this.closeEmitted=!1,this[Fr]=[];}function pn(t){t.buffered=[],t.bufferedIndex=0,t.allBuffers=!0,t.allNoop=!0;}yi.prototype.getBuffer=function(){return rh(this.buffered,this.bufferedIndex)};nh(yi.prototype,"bufferedRequestCount",{__proto__:null,get(){return this.buffered.length-this.bufferedIndex}});function ie(t){let e=this instanceof nt();if(!e&&!ih(ie,this))return new ie(t);this._writableState=new yi(t,this,e),t&&(typeof t.write=="function"&&(this._write=t.write),typeof t.writev=="function"&&(this._writev=t.writev),typeof t.destroy=="function"&&(this._destroy=t.destroy),typeof t.final=="function"&&(this._final=t.final),typeof t.construct=="function"&&(this._construct=t.construct),t.signal&&B_(t.signal,this)),pi.call(this,t),gn.construct(this,()=>{let r=this._writableState;r.writing||ao(this,r),lo(this,r);});}nh(ie,R_,{__proto__:null,value:function(t){return ih(this,t)?!0:this!==ie?!1:t&&t._writableState instanceof yi}});ie.prototype.pipe=function(){jr(this,new M_);};function lh(t,e,r,i){let n=t._writableState;if(typeof r=="function")i=r,r=n.defaultEncoding;else {if(!r)r=n.defaultEncoding;else if(r!=="buffer"&&!hn.isEncoding(r))throw new ah(r);typeof i!="function"&&(i=so);}if(e===null)throw new U_;if(!n.objectMode)if(typeof e=="string")n.decodeStrings!==!1&&(e=hn.from(e,r),r="buffer");else if(e instanceof hn)r="buffer";else if(pi._isUint8Array(e))e=pi._uint8ArrayToBuffer(e),r="buffer";else throw new k_("chunk",["string","Buffer","Uint8Array"],e);let o;return n.ending?o=new N_:n.destroyed&&(o=new gi("write")),o?(ur.nextTick(i,o),jr(t,o,!0),o):(n.pendingcb++,q_(t,n,e,r,i))}ie.prototype.write=function(t,e,r){return lh(this,t,e,r)===!0};ie.prototype.cork=function(){this._writableState.corked++;};ie.prototype.uncork=function(){let t=this._writableState;t.corked&&(t.corked--,t.writing||ao(this,t));};ie.prototype.setDefaultEncoding=function(e){if(typeof e=="string"&&(e=I_(e)),!hn.isEncoding(e))throw new ah(e);return this._writableState.defaultEncoding=e,this};function q_(t,e,r,i,n){let o=e.objectMode?1:r.length;e.length+=o;let s=e.lengthr.bufferedIndex&&ao(t,r),i?r.afterWriteTickInfo!==null&&r.afterWriteTickInfo.cb===n?r.afterWriteTickInfo.count++:(r.afterWriteTickInfo={count:1,cb:n,stream:t,state:r},ur.nextTick(j_,r.afterWriteTickInfo)):uh(t,r,1,n));}function j_({stream:t,state:e,count:r,cb:i}){return e.afterWriteTickInfo=null,uh(t,e,r,i)}function uh(t,e,r,i){for(!e.ending&&!t.destroyed&&e.length===0&&e.needDrain&&(e.needDrain=!1,t.emit("drain"));r-- >0;)e.pendingcb--,i();e.destroyed&&oo(e),lo(t,e);}function oo(t){if(t.writing)return;for(let n=t.bufferedIndex;n1&&t._writev){e.pendingcb-=o-1;let a=e.allNoop?so:c=>{for(let h=s;h256?(r.splice(0,s),e.bufferedIndex=0):e.bufferedIndex=s;}e.bufferProcessing=!1;}ie.prototype._write=function(t,e,r){if(this._writev)this._writev([{chunk:t,encoding:e}],r);else throw new x_("_write()")};ie.prototype._writev=null;ie.prototype.end=function(t,e,r){let i=this._writableState;typeof t=="function"?(r=t,t=null,e=null):typeof e=="function"&&(r=e,e=null);let n;if(t!=null){let o=lh(this,t,e);o instanceof S_&&(n=o);}return i.corked&&(i.corked=1,this.uncork()),n||(!i.errored&&!i.ending?(i.ending=!0,lo(this,i,!0),i.ended=!0):i.finished?n=new L_("end"):i.destroyed&&(n=new gi("end"))),typeof r=="function"&&(n||i.finished?ur.nextTick(r,n):i[Fr].push(r)),this};function dn(t){return t.ending&&!t.destroyed&&t.constructed&&t.length===0&&!t.errored&&t.buffered.length===0&&!t.finished&&!t.writing&&!t.errorEmitted&&!t.closeEmitted}function F_(t,e){let r=!1;function i(n){if(r){jr(t,n??oh());return}if(r=!0,e.pendingcb--,n){let o=e[Fr].splice(0);for(let s=0;s{dn(n)?no(i,n):n.pendingcb--;},t,e)):dn(e)&&(e.pendingcb++,no(t,e))));}function no(t,e){e.pendingcb--,e.finished=!0;let r=e[Fr].splice(0);for(let i=0;i{v();m();_();var fo=Ut(),H_=(ye(),X(_e)),{isReadable:V_,isWritable:z_,isIterable:hh,isNodeStream:K_,isReadableNodeStream:dh,isWritableNodeStream:ph,isDuplexNodeStream:G_}=tt(),gh=mt(),{AbortError:vh,codes:{ERR_INVALID_ARG_TYPE:Q_,ERR_INVALID_RETURN_VALUE:yh}}=Se(),{destroyer:Wr}=tr(),Y_=nt(),J_=di(),{createDeferredPromise:bh}=Je(),wh=Ys(),_h=globalThis.Blob||H_.Blob,X_=typeof _h<"u"?function(e){return e instanceof _h}:function(e){return !1},Z_=globalThis.AbortController||Hi().AbortController,{FunctionPrototypeCall:mh}=ce(),fr=class extends Y_{constructor(e){super(e),e?.readable===!1&&(this._readableState.readable=!1,this._readableState.ended=!0,this._readableState.endEmitted=!0),e?.writable===!1&&(this._writableState.writable=!1,this._writableState.ending=!0,this._writableState.ended=!0,this._writableState.finished=!0);}};Eh.exports=function t(e,r){if(G_(e))return e;if(dh(e))return yn({readable:e});if(ph(e))return yn({writable:e});if(K_(e))return yn({writable:!1,readable:!1});if(typeof e=="function"){let{value:n,write:o,final:s,destroy:a}=e0(e);if(hh(n))return wh(fr,n,{objectMode:!0,write:o,final:s,destroy:a});let u=n?.then;if(typeof u=="function"){let c,h=mh(u,n,d=>{if(d!=null)throw new yh("nully","body",d)},d=>{Wr(c,d);});return c=new fr({objectMode:!0,readable:!1,write:o,final(d){s(async()=>{try{await h,fo.nextTick(d,null);}catch(g){fo.nextTick(d,g);}});},destroy:a})}throw new yh("Iterable, AsyncIterable or AsyncFunction",r,n)}if(X_(e))return t(e.arrayBuffer());if(hh(e))return wh(fr,e,{objectMode:!0,writable:!1});if(typeof e?.writable=="object"||typeof e?.readable=="object"){let n=e!=null&&e.readable?dh(e?.readable)?e?.readable:t(e.readable):void 0,o=e!=null&&e.writable?ph(e?.writable)?e?.writable:t(e.writable):void 0;return yn({readable:n,writable:o})}let i=e?.then;if(typeof i=="function"){let n;return mh(i,e,o=>{o!=null&&n.push(o),n.push(null);},o=>{Wr(n,o);}),n=new fr({objectMode:!0,writable:!1,read(){}})}throw new Q_(r,["Blob","ReadableStream","WritableStream","Stream","Iterable","AsyncIterable","Function","{ readable, writable } pair","Promise"],e)};function e0(t){let{promise:e,resolve:r}=bh(),i=new Z_,n=i.signal;return {value:t(async function*(){for(;;){let s=e;e=null;let{chunk:a,done:u,cb:c}=await s;if(fo.nextTick(c),u)return;if(n.aborted)throw new vh(void 0,{cause:n.reason});(({promise:e,resolve:r}=bh())),yield a;}}(),{signal:n}),write(s,a,u){let c=r;r=null,c({chunk:s,done:!1,cb:u});},final(s){let a=r;r=null,a({done:!0,cb:s});},destroy(s,a){i.abort(),a(s);}}}function yn(t){let e=t.readable&&typeof t.readable.read!="function"?J_.wrap(t.readable):t.readable,r=t.writable,i=!!V_(e),n=!!z_(r),o,s,a,u,c;function h(d){let g=u;u=null,g?g(d):d&&c.destroy(d);}return c=new fr({readableObjectMode:!!(e!=null&&e.readableObjectMode),writableObjectMode:!!(r!=null&&r.writableObjectMode),readable:i,writable:n}),n&&(gh(r,d=>{n=!1,d&&Wr(e,d),h(d);}),c._write=function(d,g,y){r.write(d,g)?y():o=y;},c._final=function(d){r.end(),s=d;},r.on("drain",function(){if(o){let d=o;o=null,d();}}),r.on("finish",function(){if(s){let d=s;s=null,d();}})),i&&(gh(e,d=>{i=!1,d&&Wr(e,d),h(d);}),e.on("readable",function(){if(a){let d=a;a=null,d();}}),e.on("end",function(){c.push(null);}),c._read=function(){for(;;){let d=e.read();if(d===null){a=c._read;return}if(!c.push(d))return}}),c._destroy=function(d,g){!d&&u!==null&&(d=new vh),a=null,o=null,s=null,u===null?g(d):(u=g,Wr(r,d),Wr(e,d));},c}});var nt=M((RR,Th)=>{v();m();_();var{ObjectDefineProperties:t0,ObjectGetOwnPropertyDescriptor:At,ObjectKeys:r0,ObjectSetPrototypeOf:Ah}=ce();Th.exports=Ve;var po=di(),Ne=uo();Ah(Ve.prototype,po.prototype);Ah(Ve,po);{let t=r0(Ne.prototype);for(let e=0;e{v();m();_();var{ObjectSetPrototypeOf:Rh,Symbol:i0}=ce();Ch.exports=It;var{ERR_METHOD_NOT_IMPLEMENTED:n0}=Se().codes,yo=nt(),{getHighWaterMark:s0}=sn();Rh(It.prototype,yo.prototype);Rh(It,yo);var bi=i0("kCallback");function It(t){if(!(this instanceof It))return new It(t);let e=t?s0(this,t,"readableHighWaterMark",!0):null;e===0&&(t={...t,highWaterMark:null,readableHighWaterMark:e,writableHighWaterMark:t.writableHighWaterMark||0}),yo.call(this,t),this._readableState.sync=!1,this[bi]=null,t&&(typeof t.transform=="function"&&(this._transform=t.transform),typeof t.flush=="function"&&(this._flush=t.flush)),this.on("prefinish",o0);}function go(t){typeof this._flush=="function"&&!this.destroyed?this._flush((e,r)=>{if(e){t?t(e):this.destroy(e);return}r!=null&&this.push(r),this.push(null),t&&t();}):(this.push(null),t&&t());}function o0(){this._final!==go&&go.call(this);}It.prototype._final=go;It.prototype._transform=function(t,e,r){throw new n0("_transform()")};It.prototype._write=function(t,e,r){let i=this._readableState,n=this._writableState,o=i.length;this._transform(t,e,(s,a)=>{if(s){r(s);return}a!=null&&this.push(a),n.ended||o===i.length||i.length{v();m();_();var{ObjectSetPrototypeOf:Bh}=ce();Ph.exports=$r;var wo=bo();Bh($r.prototype,wo.prototype);Bh($r,wo);function $r(t){if(!(this instanceof $r))return new $r(t);wo.call(this,t);}$r.prototype._transform=function(t,e,r){r(null,t);};});var mn=M((iC,Lh)=>{v();m();_();var wi=Ut(),{ArrayIsArray:a0,Promise:l0,SymbolAsyncIterator:u0}=ce(),_n=mt(),{once:f0}=Je(),c0=tr(),Oh=nt(),{aggregateTwoErrors:h0,codes:{ERR_INVALID_ARG_TYPE:Ro,ERR_INVALID_RETURN_VALUE:mo,ERR_MISSING_ARGS:d0,ERR_STREAM_DESTROYED:p0,ERR_STREAM_PREMATURE_CLOSE:g0},AbortError:y0}=Se(),{validateFunction:b0,validateAbortSignal:w0}=fi(),{isIterable:cr,isReadable:vo,isReadableNodeStream:wn,isNodeStream:kh,isTransformStream:Hr,isWebStream:_0,isReadableStream:Eo,isReadableEnded:m0}=tt(),v0=globalThis.AbortController||Hi().AbortController,So,Ao;function xh(t,e,r){let i=!1;t.on("close",()=>{i=!0;});let n=_n(t,{readable:e,writable:r},o=>{i=!o;});return {destroy:o=>{i||(i=!0,c0.destroyer(t,o||new p0("pipe")));},cleanup:n}}function E0(t){return b0(t[t.length-1],"streams[stream.length - 1]"),t.pop()}function Io(t){if(cr(t))return t;if(wn(t))return S0(t);throw new Ro("val",["Readable","Iterable","AsyncIterable"],t)}async function*S0(t){Ao||(Ao=di()),yield*Ao.prototype[u0].call(t);}async function bn(t,e,r,{end:i}){let n,o=null,s=c=>{if(c&&(n=c),o){let h=o;o=null,h();}},a=()=>new l0((c,h)=>{n?h(n):o=()=>{n?h(n):c();};});e.on("drain",s);let u=_n(e,{readable:!1},s);try{e.writableNeedDrain&&await a();for await(let c of t)e.write(c)||await a();i&&e.end(),await a(),r();}catch(c){r(n!==c?h0(n,c):c);}finally{u(),e.off("drain",s);}}async function To(t,e,r,{end:i}){Hr(e)&&(e=e.writable);let n=e.getWriter();try{for await(let o of t)await n.ready,n.write(o).catch(()=>{});await n.ready,i&&await n.close(),r();}catch(o){try{await n.abort(o),r(o);}catch(s){r(s);}}}function A0(...t){return Mh(t,f0(E0(t)))}function Mh(t,e,r){if(t.length===1&&a0(t[0])&&(t=t[0]),t.length<2)throw new d0("streams");let i=new v0,n=i.signal,o=r?.signal,s=[];w0(o,"options.signal");function a(){y(new y0);}o?.addEventListener("abort",a);let u,c,h=[],d=0;function g(C){y(C,--d===0);}function y(C,R){if(C&&(!u||u.code==="ERR_STREAM_PREMATURE_CLOSE")&&(u=C),!(!u&&!R)){for(;h.length;)h.shift()(u);o?.removeEventListener("abort",a),i.abort(),R&&(u||s.forEach(U=>U()),wi.nextTick(e,u,c));}}let w;for(let C=0;C0,W=U||r?.end!==!1,K=C===t.length-1;if(kh(R)){let z=function(Q){Q&&Q.name!=="AbortError"&&Q.code!=="ERR_STREAM_PREMATURE_CLOSE"&&g(Q);};if(W){let{destroy:Q,cleanup:de}=xh(R,U,N);h.push(Q),vo(R)&&K&&s.push(de);}R.on("error",z),vo(R)&&K&&s.push(()=>{R.removeListener("error",z);});}if(C===0)if(typeof R=="function"){if(w=R({signal:n}),!cr(w))throw new mo("Iterable, AsyncIterable or Stream","source",w)}else cr(R)||wn(R)||Hr(R)?w=R:w=Oh.from(R);else if(typeof R=="function"){if(Hr(w)){var E;w=Io((E=w)===null||E===void 0?void 0:E.readable);}else w=Io(w);if(w=R(w,{signal:n}),U){if(!cr(w,!0))throw new mo("AsyncIterable",`transform[${C-1}]`,w)}else {var S;So||(So=_o());let z=new So({objectMode:!0}),Q=(S=w)===null||S===void 0?void 0:S.then;if(typeof Q=="function")d++,Q.call(w,pe=>{c=pe,pe!=null&&z.write(pe),W&&z.end(),wi.nextTick(g);},pe=>{z.destroy(pe),wi.nextTick(g,pe);});else if(cr(w,!0))d++,bn(w,z,g,{end:W});else if(Eo(w)||Hr(w)){let pe=w.readable||w;d++,bn(pe,z,g,{end:W});}else throw new mo("AsyncIterable or Promise","destination",w);w=z;let{destroy:de,cleanup:Gt}=xh(w,!1,!0);h.push(de),K&&s.push(Gt);}}else if(kh(R)){if(wn(w)){d+=2;let z=I0(w,R,g,{end:W});vo(R)&&K&&s.push(z);}else if(Hr(w)||Eo(w)){let z=w.readable||w;d++,bn(z,R,g,{end:W});}else if(cr(w))d++,bn(w,R,g,{end:W});else throw new Ro("val",["Readable","Iterable","AsyncIterable","ReadableStream","TransformStream"],w);w=R;}else if(_0(R)){if(wn(w))d++,To(Io(w),R,g,{end:W});else if(Eo(w)||cr(w))d++,To(w,R,g,{end:W});else if(Hr(w))d++,To(w.readable,R,g,{end:W});else throw new Ro("val",["Readable","Iterable","AsyncIterable","ReadableStream","TransformStream"],w);w=R;}else w=Oh.from(R);}return (n!=null&&n.aborted||o!=null&&o.aborted)&&wi.nextTick(a),w}function I0(t,e,r,{end:i}){let n=!1;if(e.on("close",()=>{n||r(new g0);}),t.pipe(e,{end:!1}),i){let s=function(){n=!0,e.end();};m0(t)?wi.nextTick(s):t.once("end",s);}else r();return _n(t,{readable:!0,writable:!1},s=>{let a=t._readableState;s&&s.code==="ERR_STREAM_PREMATURE_CLOSE"&&a&&a.ended&&!a.errored&&!a.errorEmitted?t.once("end",r).once("error",r):r(s);}),_n(e,{readable:!1,writable:!0},r)}Lh.exports={pipelineImpl:Mh,pipeline:A0};});var Bo=M((dC,Fh)=>{v();m();_();var{pipeline:T0}=mn(),vn=nt(),{destroyer:R0}=tr(),{isNodeStream:En,isReadable:Uh,isWritable:Nh,isWebStream:Co,isTransformStream:hr,isWritableStream:qh,isReadableStream:Dh}=tt(),{AbortError:C0,codes:{ERR_INVALID_ARG_VALUE:jh,ERR_MISSING_ARGS:B0}}=Se(),P0=mt();Fh.exports=function(...e){if(e.length===0)throw new B0("streams");if(e.length===1)return vn.from(e[0]);let r=[...e];if(typeof e[0]=="function"&&(e[0]=vn.from(e[0])),typeof e[e.length-1]=="function"){let y=e.length-1;e[y]=vn.from(e[y]);}for(let y=0;y0&&!(Nh(e[y])||qh(e[y])||hr(e[y])))throw new jh(`streams[${y}]`,r[y],"must be writable")}let i,n,o,s,a;function u(y){let w=s;s=null,w?w(y):y?a.destroy(y):!g&&!d&&a.destroy();}let c=e[0],h=T0(e,u),d=!!(Nh(c)||qh(c)||hr(c)),g=!!(Uh(h)||Dh(h)||hr(h));if(a=new vn({writableObjectMode:!!(c!=null&&c.writableObjectMode),readableObjectMode:!!(h!=null&&h.writableObjectMode),writable:d,readable:g}),d){if(En(c))a._write=function(w,E,S){c.write(w,E)?S():i=S;},a._final=function(w){c.end(),n=w;},c.on("drain",function(){if(i){let w=i;i=null,w();}});else if(Co(c)){let E=(hr(c)?c.writable:c).getWriter();a._write=async function(S,I,C){try{await E.ready,E.write(S).catch(()=>{}),C();}catch(R){C(R);}},a._final=async function(S){try{await E.ready,E.close().catch(()=>{}),n=S;}catch(I){S(I);}};}let y=hr(h)?h.readable:h;P0(y,()=>{if(n){let w=n;n=null,w();}});}if(g){if(En(h))h.on("readable",function(){if(o){let y=o;o=null,y();}}),h.on("end",function(){a.push(null);}),a._read=function(){for(;;){let y=h.read();if(y===null){o=a._read;return}if(!a.push(y))return}};else if(Co(h)){let w=(hr(h)?h.readable:h).getReader();a._read=async function(){for(;;)try{let{value:E,done:S}=await w.read();if(!a.push(E))return;if(S){a.push(null);return}}catch{return}};}}return a._destroy=function(y,w){!y&&s!==null&&(y=new C0),o=null,i=null,n=null,s===null?w(y):(s=w,En(h)&&R0(h,y));},a};});var Qh=M((SC,ko)=>{v();m();_();var Vh=globalThis.AbortController||Hi().AbortController,{codes:{ERR_INVALID_ARG_VALUE:O0,ERR_INVALID_ARG_TYPE:_i,ERR_MISSING_ARGS:k0,ERR_OUT_OF_RANGE:x0},AbortError:st}=Se(),{validateAbortSignal:dr,validateInteger:M0,validateObject:pr}=fi(),L0=ce().Symbol("kWeak"),{finished:U0}=mt(),N0=Bo(),{addAbortSignalNoValidate:q0}=ci(),{isWritable:D0,isNodeStream:j0}=tt(),{ArrayPrototypePush:F0,MathFloor:W0,Number:$0,NumberIsNaN:H0,Promise:Wh,PromiseReject:$h,PromisePrototypeThen:V0,Symbol:zh}=ce(),Sn=zh("kEmpty"),Hh=zh("kEof");function z0(t,e){if(e!=null&&pr(e,"options"),e?.signal!=null&&dr(e.signal,"options.signal"),j0(t)&&!D0(t))throw new O0("stream",t,"must be writable");let r=N0(this,t);return e!=null&&e.signal&&q0(e.signal,r),r}function An(t,e){if(typeof t!="function")throw new _i("fn",["Function","AsyncFunction"],t);e!=null&&pr(e,"options"),e?.signal!=null&&dr(e.signal,"options.signal");let r=1;return e?.concurrency!=null&&(r=W0(e.concurrency)),M0(r,"concurrency",1),async function*(){var n,o;let s=new Vh,a=this,u=[],c=s.signal,h={signal:c},d=()=>s.abort();e!=null&&(n=e.signal)!==null&&n!==void 0&&n.aborted&&d(),e==null||(o=e.signal)===null||o===void 0||o.addEventListener("abort",d);let g,y,w=!1;function E(){w=!0;}async function S(){try{for await(let R of a){var I;if(w)return;if(c.aborted)throw new st;try{R=t(R,h);}catch(U){R=$h(U);}R!==Sn&&(typeof((I=R)===null||I===void 0?void 0:I.catch)=="function"&&R.catch(E),u.push(R),g&&(g(),g=null),!w&&u.length&&u.length>=r&&await new Wh(U=>{y=U;}));}u.push(Hh);}catch(R){let U=$h(R);V0(U,void 0,E),u.push(U);}finally{var C;w=!0,g&&(g(),g=null),e==null||(C=e.signal)===null||C===void 0||C.removeEventListener("abort",d);}}S();try{for(;;){for(;u.length>0;){let I=await u[0];if(I===Hh)return;if(c.aborted)throw new st;I!==Sn&&(yield I),u.shift(),y&&(y(),y=null);}await new Wh(I=>{g=I;});}}finally{s.abort(),w=!0,y&&(y(),y=null);}}.call(this)}function K0(t=void 0){return t!=null&&pr(t,"options"),t?.signal!=null&&dr(t.signal,"options.signal"),async function*(){let r=0;for await(let n of this){var i;if(t!=null&&(i=t.signal)!==null&&i!==void 0&&i.aborted)throw new st({cause:t.signal.reason});yield [r++,n];}}.call(this)}async function Kh(t,e=void 0){for await(let r of Oo.call(this,t,e))return !0;return !1}async function G0(t,e=void 0){if(typeof t!="function")throw new _i("fn",["Function","AsyncFunction"],t);return !await Kh.call(this,async(...r)=>!await t(...r),e)}async function Q0(t,e){for await(let r of Oo.call(this,t,e))return r}async function Y0(t,e){if(typeof t!="function")throw new _i("fn",["Function","AsyncFunction"],t);async function r(i,n){return await t(i,n),Sn}for await(let i of An.call(this,r,e));}function Oo(t,e){if(typeof t!="function")throw new _i("fn",["Function","AsyncFunction"],t);async function r(i,n){return await t(i,n)?i:Sn}return An.call(this,r,e)}var Po=class extends k0{constructor(){super("reduce"),this.message="Reduce of an empty stream requires an initial value";}};async function J0(t,e,r){var i;if(typeof t!="function")throw new _i("reducer",["Function","AsyncFunction"],t);r!=null&&pr(r,"options"),r?.signal!=null&&dr(r.signal,"options.signal");let n=arguments.length>1;if(r!=null&&(i=r.signal)!==null&&i!==void 0&&i.aborted){let c=new st(void 0,{cause:r.signal.reason});throw this.once("error",()=>{}),await U0(this.destroy(c)),c}let o=new Vh,s=o.signal;if(r!=null&&r.signal){let c={once:!0,[L0]:this};r.signal.addEventListener("abort",()=>o.abort(),c);}let a=!1;try{for await(let c of this){var u;if(a=!0,r!=null&&(u=r.signal)!==null&&u!==void 0&&u.aborted)throw new st;n?e=await t(e,c,{signal:s}):(e=c,n=!0);}if(!a&&!n)throw new Po}finally{o.abort();}return e}async function X0(t){t!=null&&pr(t,"options"),t?.signal!=null&&dr(t.signal,"options.signal");let e=[];for await(let i of this){var r;if(t!=null&&(r=t.signal)!==null&&r!==void 0&&r.aborted)throw new st(void 0,{cause:t.signal.reason});F0(e,i);}return e}function Z0(t,e){let r=An.call(this,t,e);return async function*(){for await(let n of r)yield*n;}.call(this)}function Gh(t){if(t=$0(t),H0(t))return 0;if(t<0)throw new x0("number",">= 0",t);return t}function em(t,e=void 0){return e!=null&&pr(e,"options"),e?.signal!=null&&dr(e.signal,"options.signal"),t=Gh(t),async function*(){var i;if(e!=null&&(i=e.signal)!==null&&i!==void 0&&i.aborted)throw new st;for await(let o of this){var n;if(e!=null&&(n=e.signal)!==null&&n!==void 0&&n.aborted)throw new st;t--<=0&&(yield o);}}.call(this)}function tm(t,e=void 0){return e!=null&&pr(e,"options"),e?.signal!=null&&dr(e.signal,"options.signal"),t=Gh(t),async function*(){var i;if(e!=null&&(i=e.signal)!==null&&i!==void 0&&i.aborted)throw new st;for await(let o of this){var n;if(e!=null&&(n=e.signal)!==null&&n!==void 0&&n.aborted)throw new st;if(t-- >0)yield o;else return}}.call(this)}ko.exports.streamReturningOperators={asIndexedPairs:K0,drop:em,filter:Oo,flatMap:Z0,map:An,take:tm,compose:z0};ko.exports.promiseReturningOperators={every:G0,forEach:Y0,reduce:J0,toArray:X0,some:Kh,find:Q0};});var xo=M((xC,Yh)=>{v();m();_();var{ArrayPrototypePop:rm,Promise:im}=ce(),{isIterable:nm,isNodeStream:sm,isWebStream:om}=tt(),{pipelineImpl:am}=mn(),{finished:lm}=mt();Mo();function um(...t){return new im((e,r)=>{let i,n,o=t[t.length-1];if(o&&typeof o=="object"&&!sm(o)&&!nm(o)&&!om(o)){let s=rm(t);i=s.signal,n=s.end;}am(t,(s,a)=>{s?r(s):e(a);},{signal:i,end:n});})}Yh.exports={finished:lm,pipeline:um};});var Mo=M(($C,sd)=>{v();m();_();var{Buffer:fm}=(ye(),X(_e)),{ObjectDefineProperty:Tt,ObjectKeys:Zh,ReflectApply:ed}=ce(),{promisify:{custom:td}}=Je(),{streamReturningOperators:Jh,promiseReturningOperators:Xh}=Qh(),{codes:{ERR_ILLEGAL_CONSTRUCTOR:rd}}=Se(),cm=Bo(),{pipeline:id}=mn(),{destroyer:hm}=tr(),nd=mt(),Lo=xo(),Uo=tt(),le=sd.exports=tn().Stream;le.isDisturbed=Uo.isDisturbed;le.isErrored=Uo.isErrored;le.isReadable=Uo.isReadable;le.Readable=di();for(let t of Zh(Jh)){let r=function(...i){if(new.target)throw rd();return le.Readable.from(ed(e,this,i))};let e=Jh[t];Tt(r,"name",{__proto__:null,value:e.name}),Tt(r,"length",{__proto__:null,value:e.length}),Tt(le.Readable.prototype,t,{__proto__:null,value:r,enumerable:!1,configurable:!0,writable:!0});}for(let t of Zh(Xh)){let r=function(...n){if(new.target)throw rd();return ed(e,this,n)};let e=Xh[t];Tt(r,"name",{__proto__:null,value:e.name}),Tt(r,"length",{__proto__:null,value:e.length}),Tt(le.Readable.prototype,t,{__proto__:null,value:r,enumerable:!1,configurable:!0,writable:!0});}le.Writable=uo();le.Duplex=nt();le.Transform=bo();le.PassThrough=_o();le.pipeline=id;var{addAbortSignal:dm}=ci();le.addAbortSignal=dm;le.finished=nd;le.destroy=hm;le.compose=cm;Tt(le,"promises",{__proto__:null,configurable:!0,enumerable:!0,get(){return Lo}});Tt(id,td,{__proto__:null,enumerable:!0,get(){return Lo.pipeline}});Tt(nd,td,{__proto__:null,enumerable:!0,get(){return Lo.finished}});le.Stream=le;le._isUint8Array=function(e){return e instanceof Uint8Array};le._uint8ArrayToBuffer=function(e){return fm.from(e.buffer,e.byteOffset,e.byteLength)};});var Dt=M((ZC,ue)=>{v();m();_();var he=Mo(),pm=xo(),gm=he.Readable.destroy;ue.exports=he.Readable;ue.exports._uint8ArrayToBuffer=he._uint8ArrayToBuffer;ue.exports._isUint8Array=he._isUint8Array;ue.exports.isDisturbed=he.isDisturbed;ue.exports.isErrored=he.isErrored;ue.exports.isReadable=he.isReadable;ue.exports.Readable=he.Readable;ue.exports.Writable=he.Writable;ue.exports.Duplex=he.Duplex;ue.exports.Transform=he.Transform;ue.exports.PassThrough=he.PassThrough;ue.exports.addAbortSignal=he.addAbortSignal;ue.exports.finished=he.finished;ue.exports.destroy=he.destroy;ue.exports.destroy=gm;ue.exports.pipeline=he.pipeline;ue.exports.compose=he.compose;Object.defineProperty(he,"promises",{configurable:!0,enumerable:!0,get(){return pm}});ue.exports.Stream=he.Stream;ue.exports.default=ue.exports;});var od=M((uB,qo)=>{v();m();_();typeof Object.create=="function"?qo.exports=function(e,r){r&&(e.super_=r,e.prototype=Object.create(r.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}));}:qo.exports=function(e,r){if(r){e.super_=r;var i=function(){};i.prototype=r.prototype,e.prototype=new i,e.prototype.constructor=e;}};});var ud=M((_B,ld)=>{v();m();_();var{Buffer:ze}=(ye(),X(_e)),ad=Symbol.for("BufferList");function ee(t){if(!(this instanceof ee))return new ee(t);ee._init.call(this,t);}ee._init=function(e){Object.defineProperty(this,ad,{value:!0}),this._bufs=[],this.length=0,e&&this.append(e);};ee.prototype._new=function(e){return new ee(e)};ee.prototype._offset=function(e){if(e===0)return [0,0];let r=0;for(let i=0;ithis.length||e<0)return;let r=this._offset(e);return this._bufs[r[0]][r[1]]};ee.prototype.slice=function(e,r){return typeof e=="number"&&e<0&&(e+=this.length),typeof r=="number"&&r<0&&(r+=this.length),this.copy(null,0,e,r)};ee.prototype.copy=function(e,r,i,n){if((typeof i!="number"||i<0)&&(i=0),(typeof n!="number"||n>this.length)&&(n=this.length),i>=this.length||n<=0)return e||ze.alloc(0);let o=!!e,s=this._offset(i),a=n-i,u=a,c=o&&r||0,h=s[1];if(i===0&&n===this.length){if(!o)return this._bufs.length===1?this._bufs[0]:ze.concat(this._bufs,this.length);for(let d=0;dg)this._bufs[d].copy(e,c,h),c+=g;else {this._bufs[d].copy(e,c,h,h+u),c+=g;break}u-=g,h&&(h=0);}return e.length>c?e.slice(0,c):e};ee.prototype.shallowSlice=function(e,r){if(e=e||0,r=typeof r!="number"?this.length:r,e<0&&(e+=this.length),r<0&&(r+=this.length),e===r)return this._new();let i=this._offset(e),n=this._offset(r),o=this._bufs.slice(i[0],n[0]+1);return n[1]===0?o.pop():o[o.length-1]=o[o.length-1].slice(0,n[1]),i[1]!==0&&(o[0]=o[0].slice(i[1])),this._new(o)};ee.prototype.toString=function(e,r,i){return this.slice(r,i).toString(e)};ee.prototype.consume=function(e){if(e=Math.trunc(e),Number.isNaN(e)||e<=0)return this;for(;this._bufs.length;)if(e>=this._bufs[0].length)e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift();else {this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}return this};ee.prototype.duplicate=function(){let e=this._new();for(let r=0;rthis.length?this.length:e;let i=this._offset(e),n=i[0],o=i[1];for(;n=t.length){let u=s.indexOf(t,o);if(u!==-1)return this._reverseOffset([n,u]);o=s.length-t.length+1;}else {let u=this._reverseOffset([n,o]);if(this._match(u,t))return u;o++;}o=0;}return -1};ee.prototype._match=function(t,e){if(this.length-t{v();m();_();var Do=Dt().Duplex,ym=od(),mi=ud();function Ee(t){if(!(this instanceof Ee))return new Ee(t);if(typeof t=="function"){this._callback=t;let e=function(i){this._callback&&(this._callback(i),this._callback=null);}.bind(this);this.on("pipe",function(i){i.on("error",e);}),this.on("unpipe",function(i){i.removeListener("error",e);}),t=null;}mi._init.call(this,t),Do.call(this);}ym(Ee,Do);Object.assign(Ee.prototype,mi.prototype);Ee.prototype._new=function(e){return new Ee(e)};Ee.prototype._write=function(e,r,i){this._appendBuffer(e),typeof i=="function"&&i();};Ee.prototype._read=function(e){if(!this.length)return this.push(null);e=Math.min(e,this.length),this.push(this.slice(0,e)),this.consume(e);};Ee.prototype.end=function(e){Do.prototype.end.call(this,e),this._callback&&(this._callback(null,this.slice()),this._callback=null);};Ee.prototype._destroy=function(e,r){this._bufs.length=0,this.length=0,r(e);};Ee.prototype._isBufferList=function(e){return e instanceof Ee||e instanceof mi||Ee.isBufferList(e)};Ee.isBufferList=mi.isBufferList;In.exports=Ee;In.exports.BufferListStream=Ee;In.exports.BufferList=mi;});var hd=M((DB,cd)=>{v();m();_();var jo=class{constructor(){this.cmd=null,this.retain=!1,this.qos=0,this.dup=!1,this.length=-1,this.topic=null,this.payload=null;}};cd.exports=jo;});var Fo=M((QB,dd)=>{v();m();_();var L=dd.exports,{Buffer:Oe}=(ye(),X(_e));L.types={0:"reserved",1:"connect",2:"connack",3:"publish",4:"puback",5:"pubrec",6:"pubrel",7:"pubcomp",8:"subscribe",9:"suback",10:"unsubscribe",11:"unsuback",12:"pingreq",13:"pingresp",14:"disconnect",15:"auth"};L.requiredHeaderFlags={1:0,2:0,4:0,5:0,6:2,7:0,8:2,9:0,10:2,11:0,12:0,13:0,14:0,15:0};L.requiredHeaderFlagsErrors={};for(let t in L.requiredHeaderFlags){let e=L.requiredHeaderFlags[t];L.requiredHeaderFlagsErrors[t]="Invalid header flag bits, must be 0x"+e.toString(16)+" for "+L.types[t]+" packet";}L.codes={};for(let t in L.types){let e=L.types[t];L.codes[e]=t;}L.CMD_SHIFT=4;L.CMD_MASK=240;L.DUP_MASK=8;L.QOS_MASK=3;L.QOS_SHIFT=1;L.RETAIN_MASK=1;L.VARBYTEINT_MASK=127;L.VARBYTEINT_FIN_MASK=128;L.VARBYTEINT_MAX=268435455;L.SESSIONPRESENT_MASK=1;L.SESSIONPRESENT_HEADER=Oe.from([L.SESSIONPRESENT_MASK]);L.CONNACK_HEADER=Oe.from([L.codes.connack<[0,1].map(r=>[0,1].map(i=>{let n=Oe.alloc(1);return n.writeUInt8(L.codes[t]<Oe.from([t]));L.EMPTY={pingreq:Oe.from([L.codes.pingreq<<4,0]),pingresp:Oe.from([L.codes.pingresp<<4,0]),disconnect:Oe.from([L.codes.disconnect<<4,0])};L.MQTT5_PUBACK_PUBREC_CODES={0:"Success",16:"No matching subscribers",128:"Unspecified error",131:"Implementation specific error",135:"Not authorized",144:"Topic Name invalid",145:"Packet identifier in use",151:"Quota exceeded",153:"Payload format invalid"};L.MQTT5_PUBREL_PUBCOMP_CODES={0:"Success",146:"Packet Identifier not found"};L.MQTT5_SUBACK_CODES={0:"Granted QoS 0",1:"Granted QoS 1",2:"Granted QoS 2",128:"Unspecified error",131:"Implementation specific error",135:"Not authorized",143:"Topic Filter invalid",145:"Packet Identifier in use",151:"Quota exceeded",158:"Shared Subscriptions not supported",161:"Subscription Identifiers not supported",162:"Wildcard Subscriptions not supported"};L.MQTT5_UNSUBACK_CODES={0:"Success",17:"No subscription existed",128:"Unspecified error",131:"Implementation specific error",135:"Not authorized",143:"Topic Filter invalid",145:"Packet Identifier in use"};L.MQTT5_DISCONNECT_CODES={0:"Normal disconnection",4:"Disconnect with Will Message",128:"Unspecified error",129:"Malformed Packet",130:"Protocol Error",131:"Implementation specific error",135:"Not authorized",137:"Server busy",139:"Server shutting down",141:"Keep Alive timeout",142:"Session taken over",143:"Topic Filter invalid",144:"Topic Name invalid",147:"Receive Maximum exceeded",148:"Topic Alias invalid",149:"Packet too large",150:"Message rate too high",151:"Quota exceeded",152:"Administrative action",153:"Payload format invalid",154:"Retain not supported",155:"QoS not supported",156:"Use another server",157:"Server moved",158:"Shared Subscriptions not supported",159:"Connection rate exceeded",160:"Maximum connect time",161:"Subscription Identifiers not supported",162:"Wildcard Subscriptions not supported"};L.MQTT5_AUTH_CODES={0:"Success",24:"Continue authentication",25:"Re-authenticate"};});var gd=M((sP,pd)=>{v();m();_();var Vr=1e3,zr=Vr*60,Kr=zr*60,gr=Kr*24,bm=gr*7,wm=gr*365.25;pd.exports=function(t,e){e=e||{};var r=typeof t;if(r==="string"&&t.length>0)return _m(t);if(r==="number"&&isFinite(t))return e.long?vm(t):mm(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))};function _m(t){if(t=String(t),!(t.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(t);if(e){var r=parseFloat(e[1]),i=(e[2]||"ms").toLowerCase();switch(i){case"years":case"year":case"yrs":case"yr":case"y":return r*wm;case"weeks":case"week":case"w":return r*bm;case"days":case"day":case"d":return r*gr;case"hours":case"hour":case"hrs":case"hr":case"h":return r*Kr;case"minutes":case"minute":case"mins":case"min":case"m":return r*zr;case"seconds":case"second":case"secs":case"sec":case"s":return r*Vr;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}}}function mm(t){var e=Math.abs(t);return e>=gr?Math.round(t/gr)+"d":e>=Kr?Math.round(t/Kr)+"h":e>=zr?Math.round(t/zr)+"m":e>=Vr?Math.round(t/Vr)+"s":t+"ms"}function vm(t){var e=Math.abs(t);return e>=gr?Tn(t,e,gr,"day"):e>=Kr?Tn(t,e,Kr,"hour"):e>=zr?Tn(t,e,zr,"minute"):e>=Vr?Tn(t,e,Vr,"second"):t+" ms"}function Tn(t,e,r,i){var n=e>=r*1.5;return Math.round(t/r)+" "+i+(n?"s":"")}});var bd=M((gP,yd)=>{v();m();_();function Em(t){r.debug=r,r.default=r,r.coerce=u,r.disable=o,r.enable=n,r.enabled=s,r.humanize=gd(),r.destroy=c,Object.keys(t).forEach(h=>{r[h]=t[h];}),r.names=[],r.skips=[],r.formatters={};function e(h){let d=0;for(let g=0;g{if(W==="%%")return "%";U++;let z=r.formatters[K];if(typeof z=="function"){let Q=S[U];W=z.call(I,Q),S.splice(U,1),U--;}return W}),r.formatArgs.call(I,S),(I.log||r.log).apply(I,S);}return E.namespace=h,E.useColors=r.useColors(),E.color=r.selectColor(h),E.extend=i,E.destroy=r.destroy,Object.defineProperty(E,"enabled",{enumerable:!0,configurable:!1,get:()=>g!==null?g:(y!==r.namespaces&&(y=r.namespaces,w=r.enabled(h)),w),set:S=>{g=S;}}),typeof r.init=="function"&&r.init(E),E}function i(h,d){let g=r(this.namespace+(typeof d>"u"?":":d)+h);return g.log=this.log,g}function n(h){r.save(h),r.namespaces=h,r.names=[],r.skips=[];let d,g=(typeof h=="string"?h:"").split(/[\s,]+/),y=g.length;for(d=0;d"-"+d)].join(",");return r.enable(""),h}function s(h){if(h[h.length-1]==="*")return !0;let d,g;for(d=0,g=r.skips.length;d{v();m();_();xe.formatArgs=Am;xe.save=Im;xe.load=Tm;xe.useColors=Sm;xe.storage=Rm();xe.destroy=(()=>{let t=!1;return ()=>{t||(t=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."));}})();xe.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function Sm(){return typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)?!0:typeof B<"u"&&B.userAgent&&B.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)?!1:typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof B<"u"&&B.userAgent&&B.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof B<"u"&&B.userAgent&&B.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function Am(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+Rn.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;t.splice(1,0,e,"color: inherit");let r=0,i=0;t[0].replace(/%[a-zA-Z%]/g,n=>{n!=="%%"&&(r++,n==="%c"&&(i=r));}),t.splice(i,0,e);}xe.log=console.debug||console.log||(()=>{});function Im(t){try{t?xe.storage.setItem("debug",t):xe.storage.removeItem("debug");}catch{}}function Tm(){let t;try{t=xe.storage.getItem("debug");}catch{}return !t&&typeof P<"u"&&"env"in P&&(t=P.env.DEBUG),t}function Rm(){try{return localStorage}catch{}}Rn.exports=bd()(xe);var{formatters:Cm}=Rn.exports;Cm.j=function(t){try{return JSON.stringify(t)}catch(e){return "[UnexpectedJSONParseError]: "+e.message}};});var md=M((MP,_d)=>{v();m();_();var Bm=fd(),{EventEmitter:Pm}=(ir(),X(rr)),wd=hd(),V=Fo(),D=ot()("mqtt-packet:parser"),Wo=class t extends Pm{constructor(){super(),this.parser=this.constructor.parser;}static parser(e){return this instanceof t?(this.settings=e||{},this._states=["_parseHeader","_parseLength","_parsePayload","_newPacket"],this._resetState(),this):new t().parser(e)}_resetState(){D("_resetState: resetting packet, error, _list, and _stateCounter"),this.packet=new wd,this.error=null,this._list=Bm(),this._stateCounter=0;}parse(e){for(this.error&&this._resetState(),this._list.append(e),D("parse: current state: %s",this._states[this._stateCounter]);(this.packet.length!==-1||this._list.length>0)&&this[this._states[this._stateCounter]]()&&!this.error;)this._stateCounter++,D("parse: state complete. _stateCounter is now: %d",this._stateCounter),D("parse: packet.length: %d, buffer list length: %d",this.packet.length,this._list.length),this._stateCounter>=this._states.length&&(this._stateCounter=0);return D("parse: exited while loop. packet: %d, buffer list length: %d",this.packet.length,this._list.length),this._list.length}_parseHeader(){let e=this._list.readUInt8(0),r=e>>V.CMD_SHIFT;this.packet.cmd=V.types[r];let i=e&15,n=V.requiredHeaderFlags[r];return n!=null&&i!==n?this._emitError(new Error(V.requiredHeaderFlagsErrors[r])):(this.packet.retain=(e&V.RETAIN_MASK)!==0,this.packet.qos=e>>V.QOS_SHIFT&V.QOS_MASK,this.packet.qos>2?this._emitError(new Error("Packet must not have both QoS bits set to 1")):(this.packet.dup=(e&V.DUP_MASK)!==0,D("_parseHeader: packet: %o",this.packet),this._list.consume(1),!0))}_parseLength(){let e=this._parseVarByteNum(!0);return e&&(this.packet.length=e.value,this._list.consume(e.bytes)),D("_parseLength %d",e.value),!!e}_parsePayload(){D("_parsePayload: payload %O",this._list);let e=!1;if(this.packet.length===0||this._list.length>=this.packet.length){switch(this._pos=0,this.packet.cmd){case"connect":this._parseConnect();break;case"connack":this._parseConnack();break;case"publish":this._parsePublish();break;case"puback":case"pubrec":case"pubrel":case"pubcomp":this._parseConfirmation();break;case"subscribe":this._parseSubscribe();break;case"suback":this._parseSuback();break;case"unsubscribe":this._parseUnsubscribe();break;case"unsuback":this._parseUnsuback();break;case"pingreq":case"pingresp":break;case"disconnect":this._parseDisconnect();break;case"auth":this._parseAuth();break;default:this._emitError(new Error("Not supported"));}e=!0;}return D("_parsePayload complete result: %s",e),e}_parseConnect(){D("_parseConnect");let e,r,i,n,o={},s=this.packet,a=this._parseString();if(a===null)return this._emitError(new Error("Cannot parse protocolId"));if(a!=="MQTT"&&a!=="MQIsdp")return this._emitError(new Error("Invalid protocolId"));if(s.protocolId=a,this._pos>=this._list.length)return this._emitError(new Error("Packet too short"));if(s.protocolVersion=this._list.readUInt8(this._pos),s.protocolVersion>=128&&(s.bridgeMode=!0,s.protocolVersion=s.protocolVersion-128),s.protocolVersion!==3&&s.protocolVersion!==4&&s.protocolVersion!==5)return this._emitError(new Error("Invalid protocol version"));if(this._pos++,this._pos>=this._list.length)return this._emitError(new Error("Packet too short"));if(this._list.readUInt8(this._pos)&1)return this._emitError(new Error("Connect flag bit 0 must be 0, but got 1"));o.username=this._list.readUInt8(this._pos)&V.USERNAME_MASK,o.password=this._list.readUInt8(this._pos)&V.PASSWORD_MASK,o.will=this._list.readUInt8(this._pos)&V.WILL_FLAG_MASK;let u=!!(this._list.readUInt8(this._pos)&V.WILL_RETAIN_MASK),c=(this._list.readUInt8(this._pos)&V.WILL_QOS_MASK)>>V.WILL_QOS_SHIFT;if(o.will)s.will={},s.will.retain=u,s.will.qos=c;else {if(u)return this._emitError(new Error("Will Retain Flag must be set to zero when Will Flag is set to 0"));if(c)return this._emitError(new Error("Will QoS must be set to zero when Will Flag is set to 0"))}if(s.clean=(this._list.readUInt8(this._pos)&V.CLEAN_SESSION_MASK)!==0,this._pos++,s.keepalive=this._parseNum(),s.keepalive===-1)return this._emitError(new Error("Packet too short"));if(s.protocolVersion===5){let d=this._parseProperties();Object.getOwnPropertyNames(d).length&&(s.properties=d);}let h=this._parseString();if(h===null)return this._emitError(new Error("Packet too short"));if(s.clientId=h,D("_parseConnect: packet.clientId: %s",s.clientId),o.will){if(s.protocolVersion===5){let d=this._parseProperties();Object.getOwnPropertyNames(d).length&&(s.will.properties=d);}if(e=this._parseString(),e===null)return this._emitError(new Error("Cannot parse will topic"));if(s.will.topic=e,D("_parseConnect: packet.will.topic: %s",s.will.topic),r=this._parseBuffer(),r===null)return this._emitError(new Error("Cannot parse will payload"));s.will.payload=r,D("_parseConnect: packet.will.paylaod: %s",s.will.payload);}if(o.username){if(n=this._parseString(),n===null)return this._emitError(new Error("Cannot parse username"));s.username=n,D("_parseConnect: packet.username: %s",s.username);}if(o.password){if(i=this._parseBuffer(),i===null)return this._emitError(new Error("Cannot parse password"));s.password=i;}return this.settings=s,D("_parseConnect: complete"),s}_parseConnack(){D("_parseConnack");let e=this.packet;if(this._list.length<1)return null;let r=this._list.readUInt8(this._pos++);if(r>1)return this._emitError(new Error("Invalid connack flags, bits 7-1 must be set to 0"));if(e.sessionPresent=!!(r&V.SESSIONPRESENT_MASK),this.settings.protocolVersion===5)this._list.length>=2?e.reasonCode=this._list.readUInt8(this._pos++):e.reasonCode=0;else {if(this._list.length<2)return null;e.returnCode=this._list.readUInt8(this._pos++);}if(e.returnCode===-1||e.reasonCode===-1)return this._emitError(new Error("Cannot parse return code"));if(this.settings.protocolVersion===5){let i=this._parseProperties();Object.getOwnPropertyNames(i).length&&(e.properties=i);}D("_parseConnack: complete");}_parsePublish(){D("_parsePublish");let e=this.packet;if(e.topic=this._parseString(),e.topic===null)return this._emitError(new Error("Cannot parse topic"));if(!(e.qos>0&&!this._parseMessageId())){if(this.settings.protocolVersion===5){let r=this._parseProperties();Object.getOwnPropertyNames(r).length&&(e.properties=r);}e.payload=this._list.slice(this._pos,e.length),D("_parsePublish: payload from buffer list: %o",e.payload);}}_parseSubscribe(){D("_parseSubscribe");let e=this.packet,r,i,n,o,s,a,u;if(e.subscriptions=[],!!this._parseMessageId()){if(this.settings.protocolVersion===5){let c=this._parseProperties();Object.getOwnPropertyNames(c).length&&(e.properties=c);}if(e.length<=0)return this._emitError(new Error("Malformed subscribe, no payload specified"));for(;this._pos=e.length)return this._emitError(new Error("Malformed Subscribe Payload"));if(i=this._parseByte(),this.settings.protocolVersion===5){if(i&192)return this._emitError(new Error("Invalid subscribe topic flag bits, bits 7-6 must be 0"))}else if(i&252)return this._emitError(new Error("Invalid subscribe topic flag bits, bits 7-2 must be 0"));if(n=i&V.SUBSCRIBE_OPTIONS_QOS_MASK,n>2)return this._emitError(new Error("Invalid subscribe QoS, must be <= 2"));if(a=(i>>V.SUBSCRIBE_OPTIONS_NL_SHIFT&V.SUBSCRIBE_OPTIONS_NL_MASK)!==0,s=(i>>V.SUBSCRIBE_OPTIONS_RAP_SHIFT&V.SUBSCRIBE_OPTIONS_RAP_MASK)!==0,o=i>>V.SUBSCRIBE_OPTIONS_RH_SHIFT&V.SUBSCRIBE_OPTIONS_RH_MASK,o>2)return this._emitError(new Error("Invalid retain handling, must be <= 2"));u={topic:r,qos:n},this.settings.protocolVersion===5?(u.nl=a,u.rap=s,u.rh=o):this.settings.bridgeMode&&(u.rh=0,u.rap=!0,u.nl=!0),D("_parseSubscribe: push subscription `%s` to subscription",u),e.subscriptions.push(u);}}}_parseSuback(){D("_parseSuback");let e=this.packet;if(this.packet.granted=[],!!this._parseMessageId()){if(this.settings.protocolVersion===5){let r=this._parseProperties();Object.getOwnPropertyNames(r).length&&(e.properties=r);}if(e.length<=0)return this._emitError(new Error("Malformed suback, no payload specified"));for(;this._pos2&&r!==128)return this._emitError(new Error("Invalid suback QoS, must be 0, 1, 2 or 128"));this.packet.granted.push(r);}}}_parseUnsubscribe(){D("_parseUnsubscribe");let e=this.packet;if(e.unsubscriptions=[],!!this._parseMessageId()){if(this.settings.protocolVersion===5){let r=this._parseProperties();Object.getOwnPropertyNames(r).length&&(e.properties=r);}if(e.length<=0)return this._emitError(new Error("Malformed unsubscribe, no payload specified"));for(;this._pos2){switch(e.reasonCode=this._parseByte(),this.packet.cmd){case"puback":case"pubrec":if(!V.MQTT5_PUBACK_PUBREC_CODES[e.reasonCode])return this._emitError(new Error("Invalid "+this.packet.cmd+" reason code"));break;case"pubrel":case"pubcomp":if(!V.MQTT5_PUBREL_PUBCOMP_CODES[e.reasonCode])return this._emitError(new Error("Invalid "+this.packet.cmd+" reason code"));break}D("_parseConfirmation: packet.reasonCode `%d`",e.reasonCode);}else e.reasonCode=0;if(e.length>3){let r=this._parseProperties();Object.getOwnPropertyNames(r).length&&(e.properties=r);}}return !0}_parseDisconnect(){let e=this.packet;if(D("_parseDisconnect"),this.settings.protocolVersion===5){this._list.length>0?(e.reasonCode=this._parseByte(),V.MQTT5_DISCONNECT_CODES[e.reasonCode]||this._emitError(new Error("Invalid disconnect reason code"))):e.reasonCode=0;let r=this._parseProperties();Object.getOwnPropertyNames(r).length&&(e.properties=r);}return D("_parseDisconnect result: true"),!0}_parseAuth(){D("_parseAuth");let e=this.packet;if(this.settings.protocolVersion!==5)return this._emitError(new Error("Not supported auth packet for this version MQTT"));if(e.reasonCode=this._parseByte(),!V.MQTT5_AUTH_CODES[e.reasonCode])return this._emitError(new Error("Invalid auth reason code"));let r=this._parseProperties();return Object.getOwnPropertyNames(r).length&&(e.properties=r),D("_parseAuth: result: true"),!0}_parseMessageId(){let e=this.packet;return e.messageId=this._parseNum(),e.messageId===null?(this._emitError(new Error("Cannot parse messageId")),!1):(D("_parseMessageId: packet.messageId %d",e.messageId),!0)}_parseString(e){let r=this._parseNum(),i=r+this._pos;if(r===-1||i>this._list.length||i>this.packet.length)return null;let n=this._list.toString("utf8",this._pos,i);return this._pos+=r,D("_parseString: result: %s",n),n}_parseStringPair(){return D("_parseStringPair"),{name:this._parseString(),value:this._parseString()}}_parseBuffer(){let e=this._parseNum(),r=e+this._pos;if(e===-1||r>this._list.length||r>this.packet.length)return null;let i=this._list.slice(this._pos,r);return this._pos+=e,D("_parseBuffer: result: %o",i),i}_parseNum(){if(this._list.length-this._pos<2)return -1;let e=this._list.readUInt16BE(this._pos);return this._pos+=2,D("_parseNum: result: %s",e),e}_parse4ByteNum(){if(this._list.length-this._pos<4)return -1;let e=this._list.readUInt32BE(this._pos);return this._pos+=4,D("_parse4ByteNum: result: %s",e),e}_parseVarByteNum(e){D("_parseVarByteNum");let r=4,i=0,n=1,o=0,s=!1,a,u=this._pos?this._pos:0;for(;i=i&&this._emitError(new Error("Invalid variable byte integer")),u&&(this._pos+=i),s?e?s={bytes:i,value:o}:s=o:s=!1,D("_parseVarByteNum: result: %o",s),s}_parseByte(){let e;return this._pos{v();m();_();var{Buffer:vi}=(ye(),X(_e)),Om=65536,vd={},km=vi.isBuffer(vi.from([1,2]).subarray(0,1));function Ed(t){let e=vi.allocUnsafe(2);return e.writeUInt8(t>>8,0),e.writeUInt8(t&255,0+1),e}function xm(){for(let t=0;t0&&(r=r|128),n.writeUInt8(r,i++);while(t>0&&i<4);return t>0&&(i=0),km?n.subarray(0,i):n.slice(0,i)}function Lm(t){let e=vi.allocUnsafe(4);return e.writeUInt32BE(t,0),e}Sd.exports={cache:vd,generateCache:xm,generateNumber:Ed,genBufVariableByteInt:Mm,generate4ByteBuffer:Lm};});var Id=M((eO,$o)=>{v();m();_();typeof P>"u"||!P.version||P.version.indexOf("v0.")===0||P.version.indexOf("v1.")===0&&P.version.indexOf("v1.8.")!==0?$o.exports={nextTick:Um}:$o.exports=P;function Um(t,e,r,i){if(typeof t!="function")throw new TypeError('"callback" argument must be a function');var n=arguments.length,o,s;switch(n){case 0:case 1:return P.nextTick(t);case 2:return P.nextTick(function(){t.call(null,e);});case 3:return P.nextTick(function(){t.call(null,e,r);});case 4:return P.nextTick(function(){t.call(null,e,r,i);});default:for(o=new Array(n-1),s=0;s{v();m();_();var j=Fo(),{Buffer:q}=(ye(),X(_e)),Nm=q.allocUnsafe(0),qm=q.from([0]),Ei=Ad(),Dm=Id().nextTick,qe=ot()("mqtt-packet:writeToStream"),Cn=Ei.cache,jm=Ei.generateNumber,Fm=Ei.generateCache,Ho=Ei.genBufVariableByteInt,Wm=Ei.generate4ByteBuffer,Ie=Vo,Bn=!0;function Od(t,e,r){switch(qe("generate called"),e.cork&&(e.cork(),Dm($m,e)),Bn&&(Bn=!1,Fm()),qe("generate: packet.cmd: %s",t.cmd),t.cmd){case"connect":return Hm(t,e);case"connack":return Vm(t,e,r);case"publish":return zm(t,e,r);case"puback":case"pubrec":case"pubrel":case"pubcomp":return Km(t,e,r);case"subscribe":return Gm(t,e,r);case"suback":return Qm(t,e,r);case"unsubscribe":return Ym(t,e,r);case"unsuback":return Jm(t,e,r);case"pingreq":case"pingresp":return Xm(t,e);case"disconnect":return Zm(t,e,r);case"auth":return e1(t,e,r);default:return e.destroy(new Error("Unknown command")),!1}}Object.defineProperty(Od,"cacheNumbers",{get(){return Ie===Vo},set(t){t?((!Cn||Object.keys(Cn).length===0)&&(Bn=!0),Ie=Vo):(Bn=!1,Ie=t1);}});function $m(t){t.uncork();}function Hm(t,e,r){let i=t||{},n=i.protocolId||"MQTT",o=i.protocolVersion||4,s=i.will,a=i.clean,u=i.keepalive||0,c=i.clientId||"",h=i.username,d=i.password,g=i.properties;a===void 0&&(a=!0);let y=0;if(!n||typeof n!="string"&&!q.isBuffer(n))return e.destroy(new Error("Invalid protocolId")),!1;if(y+=n.length+2,o!==3&&o!==4&&o!==5)return e.destroy(new Error("Invalid protocol version")),!1;if(y+=1,(typeof c=="string"||q.isBuffer(c))&&(c||o>=4)&&(c||a))y+=q.byteLength(c)+2;else {if(o<4)return e.destroy(new Error("clientId must be supplied before 3.1.1")),!1;if(a*1===0)return e.destroy(new Error("clientId must be given if cleanSession set to 0")),!1}if(typeof u!="number"||u<0||u>65535||u%1!==0)return e.destroy(new Error("Invalid keepalive")),!1;y+=2,y+=1;let w,E;if(o===5){if(w=Ft(e,g),!w)return !1;y+=w.length;}if(s){if(typeof s!="object")return e.destroy(new Error("Invalid will")),!1;if(!s.topic||typeof s.topic!="string")return e.destroy(new Error("Invalid will topic")),!1;if(y+=q.byteLength(s.topic)+2,y+=2,s.payload)if(s.payload.length>=0)typeof s.payload=="string"?y+=q.byteLength(s.payload):y+=s.payload.length;else return e.destroy(new Error("Invalid will payload")),!1;if(E={},o===5){if(E=Ft(e,s.properties),!E)return !1;y+=E.length;}}let S=!1;if(h!=null)if(Pd(h))S=!0,y+=q.byteLength(h)+2;else return e.destroy(new Error("Invalid username")),!1;if(d!=null){if(!S)return e.destroy(new Error("Username is required to use password")),!1;if(Pd(d))y+=kd(d)+2;else return e.destroy(new Error("Invalid password")),!1}e.write(j.CONNECT_HEADER),De(e,y),Gr(e,n),i.bridgeMode&&(o+=128),e.write(o===131?j.VERSION131:o===132?j.VERSION132:o===4?j.VERSION4:o===5?j.VERSION5:j.VERSION3);let I=0;return I|=h!=null?j.USERNAME_MASK:0,I|=d!=null?j.PASSWORD_MASK:0,I|=s&&s.retain?j.WILL_RETAIN_MASK:0,I|=s&&s.qos?s.qos<0&&Ie(e,c),g?.write(),qe("publish: payload: %o",u),e.write(u)}function Km(t,e,r){let i=r?r.protocolVersion:4,n=t||{},o=n.cmd||"puback",s=n.messageId,a=n.dup&&o==="pubrel"?j.DUP_MASK:0,u=0,c=n.reasonCode,h=n.properties,d=i===5?3:2;if(o==="pubrel"&&(u=1),typeof s!="number")return e.destroy(new Error("Invalid messageId")),!1;let g=null;if(i===5&&typeof h=="object"){if(g=Si(e,h,r,d),!g)return !1;d+=g.length;}return e.write(j.ACKS[o][u][a][0]),d===3&&(d+=c!==0?1:-1),De(e,d),Ie(e,s),i===5&&d!==2&&e.write(q.from([c])),g!==null?g.write():d===4&&e.write(q.from([0])),!0}function Gm(t,e,r){qe("subscribe: packet: ");let i=r?r.protocolVersion:4,n=t||{},o=n.dup?j.DUP_MASK:0,s=n.messageId,a=n.subscriptions,u=n.properties,c=0;if(typeof s!="number")return e.destroy(new Error("Invalid messageId")),!1;c+=2;let h=null;if(i===5){if(h=Ft(e,u),!h)return !1;c+=h.length;}if(typeof a=="object"&&a.length)for(let g=0;g2)return e.destroy(new Error("Invalid subscriptions - invalid Retain Handling")),!1}c+=q.byteLength(y)+2+1;}else return e.destroy(new Error("Invalid subscriptions")),!1;qe("subscribe: writing to stream: %o",j.SUBSCRIBE_HEADER),e.write(j.SUBSCRIBE_HEADER[1][o?1:0][0]),De(e,c),Ie(e,s),h!==null&&h.write();let d=!0;for(let g of a){let y=g.topic,w=g.qos,E=+g.nl,S=+g.rap,I=g.rh,C;yr(e,y),C=j.SUBSCRIBE_OPTIONS_QOS[w],i===5&&(C|=E?j.SUBSCRIBE_OPTIONS_NL:0,C|=S?j.SUBSCRIBE_OPTIONS_RAP:0,C|=I?j.SUBSCRIBE_OPTIONS_RH[I]:0),d=e.write(q.from([C]));}return d}function Qm(t,e,r){let i=r?r.protocolVersion:4,n=t||{},o=n.messageId,s=n.granted,a=n.properties,u=0;if(typeof o!="number")return e.destroy(new Error("Invalid messageId")),!1;if(u+=2,typeof s=="object"&&s.length)for(let h=0;hj.VARBYTEINT_MAX)return t.destroy(new Error(`Invalid variable byte integer: ${e}`)),!1;let r=Td[e];return r||(r=Ho(e),e<16384&&(Td[e]=r)),qe("writeVarByteInt: writing to stream: %o",r),t.write(r)}function yr(t,e){let r=q.byteLength(e);return Ie(t,r),qe("writeString: %s",e),t.write(e,"utf8")}function Rd(t,e,r){yr(t,e),yr(t,r);}function Vo(t,e){return qe("writeNumberCached: number: %d",e),qe("writeNumberCached: %o",Cn[e]),t.write(Cn[e])}function t1(t,e){let r=jm(e);return qe("writeNumberGenerated: %o",r),t.write(r)}function r1(t,e){let r=Wm(e);return qe("write4ByteNumber: %o",r),t.write(r)}function Gr(t,e){typeof e=="string"?yr(t,e):e?(Ie(t,e.length),t.write(e)):Ie(t,0);}function Ft(t,e){if(typeof e!="object"||e.length!=null)return {length:1,write(){Bd(t,{},0);}};let r=0;function i(o,s){let a=j.propertiesTypes[o],u=0;switch(a){case"byte":{if(typeof s!="boolean")return t.destroy(new Error(`Invalid ${o}: ${s}`)),!1;u+=1+1;break}case"int8":{if(typeof s!="number"||s<0||s>255)return t.destroy(new Error(`Invalid ${o}: ${s}`)),!1;u+=1+1;break}case"binary":{if(s&&s===null)return t.destroy(new Error(`Invalid ${o}: ${s}`)),!1;u+=1+q.byteLength(s)+2;break}case"int16":{if(typeof s!="number"||s<0||s>65535)return t.destroy(new Error(`Invalid ${o}: ${s}`)),!1;u+=1+2;break}case"int32":{if(typeof s!="number"||s<0||s>4294967295)return t.destroy(new Error(`Invalid ${o}: ${s}`)),!1;u+=1+4;break}case"var":{if(typeof s!="number"||s<0||s>268435455)return t.destroy(new Error(`Invalid ${o}: ${s}`)),!1;u+=1+q.byteLength(Ho(s));break}case"string":{if(typeof s!="string")return t.destroy(new Error(`Invalid ${o}: ${s}`)),!1;u+=1+2+q.byteLength(s.toString());break}case"pair":{if(typeof s!="object")return t.destroy(new Error(`Invalid ${o}: ${s}`)),!1;u+=Object.getOwnPropertyNames(s).reduce((c,h)=>{let d=s[h];return Array.isArray(d)?c+=d.reduce((g,y)=>(g+=1+2+q.byteLength(h.toString())+2+q.byteLength(y.toString()),g),0):c+=1+2+q.byteLength(h.toString())+2+q.byteLength(s[h].toString()),c},0);break}default:return t.destroy(new Error(`Invalid property ${o}: ${s}`)),!1}return u}if(e)for(let o in e){let s=0,a=0,u=e[o];if(Array.isArray(u))for(let c=0;co;){let a=n.shift();if(a&&e[a])delete e[a],s=Ft(t,e);else return !1}return s}function Cd(t,e,r){switch(j.propertiesTypes[e]){case"byte":{t.write(q.from([j.properties[e]])),t.write(q.from([+r]));break}case"int8":{t.write(q.from([j.properties[e]])),t.write(q.from([r]));break}case"binary":{t.write(q.from([j.properties[e]])),Gr(t,r);break}case"int16":{t.write(q.from([j.properties[e]])),Ie(t,r);break}case"int32":{t.write(q.from([j.properties[e]])),r1(t,r);break}case"var":{t.write(q.from([j.properties[e]])),De(t,r);break}case"string":{t.write(q.from([j.properties[e]])),yr(t,r);break}case"pair":{Object.getOwnPropertyNames(r).forEach(n=>{let o=r[n];Array.isArray(o)?o.forEach(s=>{t.write(q.from([j.properties[e]])),Rd(t,n.toString(),s.toString());}):(t.write(q.from([j.properties[e]])),Rd(t,n.toString(),o.toString()));});break}default:return t.destroy(new Error(`Invalid property ${e} value: ${r}`)),!1}}function Bd(t,e,r){De(t,r);for(let i in e)if(Object.prototype.hasOwnProperty.call(e,i)&&e[i]!==null){let n=e[i];if(Array.isArray(n))for(let o=0;o{v();m();_();var i1=zo(),{EventEmitter:n1}=(ir(),X(rr)),{Buffer:Md}=(ye(),X(_e));function s1(t,e){let r=new Ko;return i1(t,r,e),r.concat()}var Ko=class extends n1{constructor(){super(),this._array=new Array(20),this._i=0;}write(e){return this._array[this._i++]=e,!0}concat(){let e=0,r=new Array(this._array.length),i=this._array,n=0,o;for(o=0;o{v();m();_();Pn.parser=md().parser;Pn.generate=Ud();Pn.writeToStream=zo();});var Yo=M(Qo=>{v();m();_();Object.defineProperty(Qo,"__esModule",{value:!0});var Go=class{constructor(){this.nextId=Math.max(1,Math.floor(Math.random()*65535));}allocate(){let e=this.nextId++;return this.nextId===65536&&(this.nextId=1),e}getLastAllocated(){return this.nextId===1?65535:this.nextId-1}register(e){return !0}deallocate(e){}clear(){}};Qo.default=Go;});var Dd=M((YO,qd)=>{v();m();_();qd.exports=o1;function Qr(t){return t instanceof x?x.from(t):new t.constructor(t.buffer.slice(),t.byteOffset,t.length)}function o1(t){if(t=t||{},t.circles)return a1(t);return t.proto?i:r;function e(n,o){for(var s=Object.keys(n),a=new Array(s.length),u=0;u{v();m();_();jd.exports=Dd()();});var $d=M(Yr=>{v();m();_();Object.defineProperty(Yr,"__esModule",{value:!0});Yr.validateTopics=Yr.validateTopic=void 0;function Wd(t){let e=t.split("/");for(let r=0;r{v();m();_();Object.defineProperty(Xo,"__esModule",{value:!0});var u1=Dt(),f1={objectMode:!0},c1={clean:!0},Jo=class{constructor(e){this.options=e||{},this.options=Object.assign(Object.assign({},c1),e),this._inflights=new Map;}put(e,r){return this._inflights.set(e.messageId,e),r&&r(),this}createStream(){let e=new u1.Readable(f1),r=[],i=!1,n=0;return this._inflights.forEach((o,s)=>{r.push(o);}),e._read=()=>{!i&&n{if(!i)return i=!0,setTimeout(()=>{e.emit("close");},0),e},e}del(e,r){let i=this._inflights.get(e.messageId);return i?(this._inflights.delete(e.messageId),r(null,i)):r&&r(new Error("missing packet")),this}get(e,r){let i=this._inflights.get(e.messageId);return i?r(null,i):r&&r(new Error("missing packet")),this}close(e){this.options.clean&&(this._inflights=null),e&&e();}};Xo.default=Jo;});var Vd=M(ea=>{v();m();_();Object.defineProperty(ea,"__esModule",{value:!0});var Hd=[0,16,128,131,135,144,145,151,153],h1=(t,e,r)=>{t.log("handlePublish: packet %o",e),r=typeof r<"u"?r:t.noop;let i=e.topic.toString(),n=e.payload,{qos:o}=e,{messageId:s}=e,{options:a}=t;if(t.options.protocolVersion===5){let u;if(e.properties&&(u=e.properties.topicAlias),typeof u<"u")if(i.length===0)if(u>0&&u<=65535){let c=t.topicAliasRecv.getTopicByAlias(u);if(c)i=c,t.log("handlePublish :: topic complemented by alias. topic: %s - alias: %d",i,u);else {t.log("handlePublish :: unregistered topic alias. alias: %d",u),t.emit("error",new Error("Received unregistered Topic Alias"));return}}else {t.log("handlePublish :: topic alias out of range. alias: %d",u),t.emit("error",new Error("Received Topic Alias is out of range"));return}else if(t.topicAliasRecv.put(i,u))t.log("handlePublish :: registered topic: %s - alias: %d",i,u);else {t.log("handlePublish :: topic alias out of range. alias: %d",u),t.emit("error",new Error("Received Topic Alias is out of range"));return}}switch(t.log("handlePublish: qos %d",o),o){case 2:{a.customHandleAcks(i,n,e,(u,c)=>{if(typeof u=="number"&&(c=u,u=null),u)return t.emit("error",u);if(Hd.indexOf(c)===-1)return t.emit("error",new Error("Wrong reason code for pubrec"));c?t._sendPacket({cmd:"pubrec",messageId:s,reasonCode:c},r):t.incomingStore.put(e,()=>{t._sendPacket({cmd:"pubrec",messageId:s},r);});});break}case 1:{a.customHandleAcks(i,n,e,(u,c)=>{if(typeof u=="number"&&(c=u,u=null),u)return t.emit("error",u);if(Hd.indexOf(c)===-1)return t.emit("error",new Error("Wrong reason code for puback"));c||t.emit("message",i,n,e),t.handleMessage(e,h=>{if(h)return r&&r(h);t._sendPacket({cmd:"puback",messageId:s,reasonCode:c},r);});});break}case 0:t.emit("message",i,n,e),t.handleMessage(e,r);break;default:t.log("handlePublish: unknown QoS. Doing nothing.");break}};ea.default=h1;});var Jr=M(Wt=>{v();m();_();Object.defineProperty(Wt,"__esModule",{value:!0});Wt.nextTick=Wt.applyMixin=Wt.ErrorWithReasonCode=void 0;var ta=class t extends Error{constructor(e,r){super(e),this.code=r,Object.setPrototypeOf(this,t.prototype),Object.getPrototypeOf(this).name="ErrorWithReasonCode";}};Wt.ErrorWithReasonCode=ta;function d1(t,e,r=!1){var i;let n=[e];for(;;){let o=n[0],s=Object.getPrototypeOf(o);if(s?.prototype)n.unshift(s);else break}for(let o of n)for(let s of Object.getOwnPropertyNames(o.prototype))(r||s!=="constructor")&&Object.defineProperty(t.prototype,s,(i=Object.getOwnPropertyDescriptor(o.prototype,s))!==null&&i!==void 0?i:Object.create(null));}Wt.applyMixin=d1;Wt.nextTick=typeof(P===null||P===void 0?void 0:P.nextTick)=="function"?P.nextTick:t=>{setTimeout(t,0);};});var Ai=M(br=>{v();m();_();Object.defineProperty(br,"__esModule",{value:!0});br.ReasonCodes=void 0;br.ReasonCodes={0:"",1:"Unacceptable protocol version",2:"Identifier rejected",3:"Server unavailable",4:"Bad username or password",5:"Not authorized",16:"No matching subscribers",17:"No subscription existed",128:"Unspecified error",129:"Malformed Packet",130:"Protocol Error",131:"Implementation specific error",132:"Unsupported Protocol Version",133:"Client Identifier not valid",134:"Bad User Name or Password",135:"Not authorized",136:"Server unavailable",137:"Server busy",138:"Banned",139:"Server shutting down",140:"Bad authentication method",141:"Keep Alive timeout",142:"Session taken over",143:"Topic Filter invalid",144:"Topic Name invalid",145:"Packet identifier in use",146:"Packet Identifier not found",147:"Receive Maximum exceeded",148:"Topic Alias invalid",149:"Packet too large",150:"Message rate too high",151:"Quota exceeded",152:"Administrative action",153:"Payload format invalid",154:"Retain not supported",155:"QoS not supported",156:"Use another server",157:"Server moved",158:"Shared Subscriptions not supported",159:"Connection rate exceeded",160:"Maximum connect time",161:"Subscription Identifiers not supported",162:"Wildcard Subscriptions not supported"};var p1=(t,e)=>{let{messageId:r}=e,i=e.cmd,n=null,o=t.outgoing[r]?t.outgoing[r].cb:null,s;if(!o){t.log("_handleAck :: Server sent an ack in error. Ignoring.");return}switch(t.log("_handleAck :: packet type",i),i){case"pubcomp":case"puback":{let a=e.reasonCode;a&&a>0&&a!==16?(s=new Error(`Publish error: ${br.ReasonCodes[a]}`),s.code=a,t._removeOutgoingAndStoreMessage(r,()=>{o(s,e);})):t._removeOutgoingAndStoreMessage(r,o);break}case"pubrec":{n={cmd:"pubrel",qos:2,messageId:r};let a=e.reasonCode;a&&a>0&&a!==16?(s=new Error(`Publish error: ${br.ReasonCodes[a]}`),s.code=a,t._removeOutgoingAndStoreMessage(r,()=>{o(s,e);})):t._sendPacket(n);break}case"suback":{delete t.outgoing[r],t.messageIdProvider.deallocate(r);let a=e.granted;for(let u=0;u{delete t._resubscribeTopics[h];});}delete t.messageIdToTopic[r],t._invokeStoreProcessingQueue(),o(null,e);break}case"unsuback":{delete t.outgoing[r],t.messageIdProvider.deallocate(r),t._invokeStoreProcessingQueue(),o(null);break}default:t.emit("error",new Error("unrecognized packet type"));}t.disconnecting&&Object.keys(t.outgoing).length===0&&t.emit("outgoingEmpty");};br.default=p1;});var Kd=M(ra=>{v();m();_();Object.defineProperty(ra,"__esModule",{value:!0});var zd=Jr(),g1=Ai(),y1=(t,e)=>{let{options:r}=t,i=r.protocolVersion,n=i===5?e.reasonCode:e.returnCode;if(i!==5){let o=new zd.ErrorWithReasonCode(`Protocol error: Auth packets are only supported in MQTT 5. Your version:${i}`,n);t.emit("error",o);return}t.handleAuth(e,(o,s)=>{if(o){t.emit("error",o);return}if(n===24)t.reconnecting=!1,t._sendPacket(s);else {let a=new zd.ErrorWithReasonCode(`Connection refused: ${g1.ReasonCodes[n]}`,n);t.emit("error",a);}});};ra.default=y1;});var Xd=M(kn=>{v();m();_();Object.defineProperty(kn,"__esModule",{value:!0});kn.LRUCache=void 0;var Ii=typeof performance=="object"&&performance&&typeof performance.now=="function"?performance:Date,Qd=new Set,ia=typeof P=="object"&&P?P:{},Yd=(t,e,r,i)=>{typeof ia.emitWarning=="function"?ia.emitWarning(t,e,r,i):console.error(`[${r}] ${e}: ${t}`);},On=globalThis.AbortController,Gd=globalThis.AbortSignal;if(typeof On>"u"){Gd=class{onabort;_onabort=[];reason;aborted=!1;addEventListener(i,n){this._onabort.push(n);}},On=class{constructor(){e();}signal=new Gd;abort(i){if(!this.signal.aborted){this.signal.reason=i,this.signal.aborted=!0;for(let n of this.signal._onabort)n(i);this.signal.onabort?.(i);}}};let t=ia.env?.LRU_CACHE_IGNORE_AC_WARNING!=="1",e=()=>{t&&(t=!1,Yd("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.","NO_ABORT_CONTROLLER","ENOTSUP",e));};}var b1=t=>!Qd.has(t),$t=t=>t&&t===Math.floor(t)&&t>0&&isFinite(t),Jd=t=>$t(t)?t<=Math.pow(2,8)?Uint8Array:t<=Math.pow(2,16)?Uint16Array:t<=Math.pow(2,32)?Uint32Array:t<=Number.MAX_SAFE_INTEGER?Xr:null:null,Xr=class extends Array{constructor(e){super(e),this.fill(0);}},na=class t{heap;length;static#l=!1;static create(e){let r=Jd(e);if(!r)return [];t.#l=!0;let i=new t(e,r);return t.#l=!1,i}constructor(e,r){if(!t.#l)throw new TypeError("instantiate Stack using Stack.create(n)");this.heap=new r(e),this.length=0;}push(e){this.heap[this.length++]=e;}pop(){return this.heap[--this.length]}},sa=class t{#l;#c;#p;#g;#B;ttl;ttlResolution;ttlAutopurge;updateAgeOnGet;updateAgeOnHas;allowStale;noDisposeOnSet;noUpdateTTL;maxEntrySize;sizeCalculation;noDeleteOnFetchRejection;noDeleteOnStaleGet;allowStaleOnFetchAbort;allowStaleOnFetchRejection;ignoreFetchAbort;#i;#y;#n;#r;#e;#u;#h;#a;#s;#b;#o;#E;#S;#w;#_;#I;#f;static unsafeExposeInternals(e){return {starts:e.#S,ttls:e.#w,sizes:e.#E,keyMap:e.#n,keyList:e.#r,valList:e.#e,next:e.#u,prev:e.#h,get head(){return e.#a},get tail(){return e.#s},free:e.#b,isBackgroundFetch:r=>e.#t(r),backgroundFetch:(r,i,n,o)=>e.#k(r,i,n,o),moveToTail:r=>e.#C(r),indexes:r=>e.#m(r),rindexes:r=>e.#v(r),isStale:r=>e.#d(r)}}get max(){return this.#l}get maxSize(){return this.#c}get calculatedSize(){return this.#y}get size(){return this.#i}get fetchMethod(){return this.#B}get dispose(){return this.#p}get disposeAfter(){return this.#g}constructor(e){let{max:r=0,ttl:i,ttlResolution:n=1,ttlAutopurge:o,updateAgeOnGet:s,updateAgeOnHas:a,allowStale:u,dispose:c,disposeAfter:h,noDisposeOnSet:d,noUpdateTTL:g,maxSize:y=0,maxEntrySize:w=0,sizeCalculation:E,fetchMethod:S,noDeleteOnFetchRejection:I,noDeleteOnStaleGet:C,allowStaleOnFetchRejection:R,allowStaleOnFetchAbort:U,ignoreFetchAbort:N}=e;if(r!==0&&!$t(r))throw new TypeError("max option must be a nonnegative integer");let W=r?Jd(r):Array;if(!W)throw new Error("invalid max value: "+r);if(this.#l=r,this.#c=y,this.maxEntrySize=w||this.#c,this.sizeCalculation=E,this.sizeCalculation){if(!this.#c&&!this.maxEntrySize)throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize");if(typeof this.sizeCalculation!="function")throw new TypeError("sizeCalculation set to non-function")}if(S!==void 0&&typeof S!="function")throw new TypeError("fetchMethod must be a function if specified");if(this.#B=S,this.#I=!!S,this.#n=new Map,this.#r=new Array(r).fill(void 0),this.#e=new Array(r).fill(void 0),this.#u=new W(r),this.#h=new W(r),this.#a=0,this.#s=0,this.#b=na.create(r),this.#i=0,this.#y=0,typeof c=="function"&&(this.#p=c),typeof h=="function"?(this.#g=h,this.#o=[]):(this.#g=void 0,this.#o=void 0),this.#_=!!this.#p,this.#f=!!this.#g,this.noDisposeOnSet=!!d,this.noUpdateTTL=!!g,this.noDeleteOnFetchRejection=!!I,this.allowStaleOnFetchRejection=!!R,this.allowStaleOnFetchAbort=!!U,this.ignoreFetchAbort=!!N,this.maxEntrySize!==0){if(this.#c!==0&&!$t(this.#c))throw new TypeError("maxSize must be a positive integer if specified");if(!$t(this.maxEntrySize))throw new TypeError("maxEntrySize must be a positive integer if specified");this.#q();}if(this.allowStale=!!u,this.noDeleteOnStaleGet=!!C,this.updateAgeOnGet=!!s,this.updateAgeOnHas=!!a,this.ttlResolution=$t(n)||n===0?n:1,this.ttlAutopurge=!!o,this.ttl=i||0,this.ttl){if(!$t(this.ttl))throw new TypeError("ttl must be a positive integer if specified");this.#x();}if(this.#l===0&&this.ttl===0&&this.#c===0)throw new TypeError("At least one of max, maxSize, or ttl is required");if(!this.ttlAutopurge&&!this.#l&&!this.#c){let K="LRU_CACHE_UNBOUNDED";b1(K)&&(Qd.add(K),Yd("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",K,t));}}getRemainingTTL(e){return this.#n.has(e)?1/0:0}#x(){let e=new Xr(this.#l),r=new Xr(this.#l);this.#w=e,this.#S=r,this.#M=(o,s,a=Ii.now())=>{if(r[o]=s!==0?a:0,e[o]=s,s!==0&&this.ttlAutopurge){let u=setTimeout(()=>{this.#d(o)&&this.delete(this.#r[o]);},s+1);u.unref&&u.unref();}},this.#T=o=>{r[o]=e[o]!==0?Ii.now():0;},this.#A=(o,s)=>{if(e[s]){let a=e[s],u=r[s];o.ttl=a,o.start=u,o.now=i||n();let c=o.now-u;o.remainingTTL=a-c;}};let i=0,n=()=>{let o=Ii.now();if(this.ttlResolution>0){i=o;let s=setTimeout(()=>i=0,this.ttlResolution);s.unref&&s.unref();}return o};this.getRemainingTTL=o=>{let s=this.#n.get(o);if(s===void 0)return 0;let a=e[s],u=r[s];if(a===0||u===0)return 1/0;let c=(i||n())-u;return a-c},this.#d=o=>e[o]!==0&&r[o]!==0&&(i||n())-r[o]>e[o];}#T=()=>{};#A=()=>{};#M=()=>{};#d=()=>!1;#q(){let e=new Xr(this.#l);this.#y=0,this.#E=e,this.#R=r=>{this.#y-=e[r],e[r]=0;},this.#L=(r,i,n,o)=>{if(this.#t(i))return 0;if(!$t(n))if(o){if(typeof o!="function")throw new TypeError("sizeCalculation must be a function");if(n=o(i,r),!$t(n))throw new TypeError("sizeCalculation return invalid (expect positive integer)")}else throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.");return n},this.#P=(r,i,n)=>{if(e[r]=i,this.#c){let o=this.#c-e[r];for(;this.#y>o;)this.#O(!0);}this.#y+=e[r],n&&(n.entrySize=i,n.totalCalculatedSize=this.#y);};}#R=e=>{};#P=(e,r,i)=>{};#L=(e,r,i,n)=>{if(i||n)throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");return 0};*#m({allowStale:e=this.allowStale}={}){if(this.#i)for(let r=this.#s;!(!this.#U(r)||((e||!this.#d(r))&&(yield r),r===this.#a));)r=this.#h[r];}*#v({allowStale:e=this.allowStale}={}){if(this.#i)for(let r=this.#a;!(!this.#U(r)||((e||!this.#d(r))&&(yield r),r===this.#s));)r=this.#u[r];}#U(e){return e!==void 0&&this.#n.get(this.#r[e])===e}*entries(){for(let e of this.#m())this.#e[e]!==void 0&&this.#r[e]!==void 0&&!this.#t(this.#e[e])&&(yield [this.#r[e],this.#e[e]]);}*rentries(){for(let e of this.#v())this.#e[e]!==void 0&&this.#r[e]!==void 0&&!this.#t(this.#e[e])&&(yield [this.#r[e],this.#e[e]]);}*keys(){for(let e of this.#m()){let r=this.#r[e];r!==void 0&&!this.#t(this.#e[e])&&(yield r);}}*rkeys(){for(let e of this.#v()){let r=this.#r[e];r!==void 0&&!this.#t(this.#e[e])&&(yield r);}}*values(){for(let e of this.#m())this.#e[e]!==void 0&&!this.#t(this.#e[e])&&(yield this.#e[e]);}*rvalues(){for(let e of this.#v())this.#e[e]!==void 0&&!this.#t(this.#e[e])&&(yield this.#e[e]);}[Symbol.iterator](){return this.entries()}find(e,r={}){for(let i of this.#m()){let n=this.#e[i],o=this.#t(n)?n.__staleWhileFetching:n;if(o!==void 0&&e(o,this.#r[i],this))return this.get(this.#r[i],r)}}forEach(e,r=this){for(let i of this.#m()){let n=this.#e[i],o=this.#t(n)?n.__staleWhileFetching:n;o!==void 0&&e.call(r,o,this.#r[i],this);}}rforEach(e,r=this){for(let i of this.#v()){let n=this.#e[i],o=this.#t(n)?n.__staleWhileFetching:n;o!==void 0&&e.call(r,o,this.#r[i],this);}}purgeStale(){let e=!1;for(let r of this.#v({allowStale:!0}))this.#d(r)&&(this.delete(this.#r[r]),e=!0);return e}dump(){let e=[];for(let r of this.#m({allowStale:!0})){let i=this.#r[r],n=this.#e[r],o=this.#t(n)?n.__staleWhileFetching:n;if(o===void 0||i===void 0)continue;let s={value:o};if(this.#w&&this.#S){s.ttl=this.#w[r];let a=Ii.now()-this.#S[r];s.start=Math.floor(Date.now()-a);}this.#E&&(s.size=this.#E[r]),e.unshift([i,s]);}return e}load(e){this.clear();for(let[r,i]of e){if(i.start){let n=Date.now()-i.start;i.start=Ii.now()-n;}this.set(r,i.value,i);}}set(e,r,i={}){if(r===void 0)return this.delete(e),this;let{ttl:n=this.ttl,start:o,noDisposeOnSet:s=this.noDisposeOnSet,sizeCalculation:a=this.sizeCalculation,status:u}=i,{noUpdateTTL:c=this.noUpdateTTL}=i,h=this.#L(e,r,i.size||0,a);if(this.maxEntrySize&&h>this.maxEntrySize)return u&&(u.set="miss",u.maxEntrySizeExceeded=!0),this.delete(e),this;let d=this.#i===0?void 0:this.#n.get(e);if(d===void 0)d=this.#i===0?this.#s:this.#b.length!==0?this.#b.pop():this.#i===this.#l?this.#O(!1):this.#i,this.#r[d]=e,this.#e[d]=r,this.#n.set(e,d),this.#u[this.#s]=d,this.#h[d]=this.#s,this.#s=d,this.#i++,this.#P(d,h,u),u&&(u.set="add"),c=!1;else {this.#C(d);let g=this.#e[d];if(r!==g){if(this.#I&&this.#t(g)){g.__abortController.abort(new Error("replaced"));let{__staleWhileFetching:y}=g;y!==void 0&&!s&&(this.#_&&this.#p?.(y,e,"set"),this.#f&&this.#o?.push([y,e,"set"]));}else s||(this.#_&&this.#p?.(g,e,"set"),this.#f&&this.#o?.push([g,e,"set"]));if(this.#R(d),this.#P(d,h,u),this.#e[d]=r,u){u.set="replace";let y=g&&this.#t(g)?g.__staleWhileFetching:g;y!==void 0&&(u.oldValue=y);}}else u&&(u.set="update");}if(n!==0&&!this.#w&&this.#x(),this.#w&&(c||this.#M(d,n,o),u&&this.#A(u,d)),!s&&this.#f&&this.#o){let g=this.#o,y;for(;y=g?.shift();)this.#g?.(...y);}return this}pop(){try{for(;this.#i;){let e=this.#e[this.#a];if(this.#O(!0),this.#t(e)){if(e.__staleWhileFetching)return e.__staleWhileFetching}else if(e!==void 0)return e}}finally{if(this.#f&&this.#o){let e=this.#o,r;for(;r=e?.shift();)this.#g?.(...r);}}}#O(e){let r=this.#a,i=this.#r[r],n=this.#e[r];return this.#I&&this.#t(n)?n.__abortController.abort(new Error("evicted")):(this.#_||this.#f)&&(this.#_&&this.#p?.(n,i,"evict"),this.#f&&this.#o?.push([n,i,"evict"])),this.#R(r),e&&(this.#r[r]=void 0,this.#e[r]=void 0,this.#b.push(r)),this.#i===1?(this.#a=this.#s=0,this.#b.length=0):this.#a=this.#u[r],this.#n.delete(i),this.#i--,r}has(e,r={}){let{updateAgeOnHas:i=this.updateAgeOnHas,status:n}=r,o=this.#n.get(e);if(o!==void 0){let s=this.#e[o];if(this.#t(s)&&s.__staleWhileFetching===void 0)return !1;if(this.#d(o))n&&(n.has="stale",this.#A(n,o));else return i&&this.#T(o),n&&(n.has="hit",this.#A(n,o)),!0}else n&&(n.has="miss");return !1}peek(e,r={}){let{allowStale:i=this.allowStale}=r,n=this.#n.get(e);if(n!==void 0&&(i||!this.#d(n))){let o=this.#e[n];return this.#t(o)?o.__staleWhileFetching:o}}#k(e,r,i,n){let o=r===void 0?void 0:this.#e[r];if(this.#t(o))return o;let s=new On,{signal:a}=i;a?.addEventListener("abort",()=>s.abort(a.reason),{signal:s.signal});let u={signal:s.signal,options:i,context:n},c=(E,S=!1)=>{let{aborted:I}=s.signal,C=i.ignoreFetchAbort&&E!==void 0;if(i.status&&(I&&!S?(i.status.fetchAborted=!0,i.status.fetchError=s.signal.reason,C&&(i.status.fetchAbortIgnored=!0)):i.status.fetchResolved=!0),I&&!C&&!S)return d(s.signal.reason);let R=y;return this.#e[r]===y&&(E===void 0?R.__staleWhileFetching?this.#e[r]=R.__staleWhileFetching:this.delete(e):(i.status&&(i.status.fetchUpdated=!0),this.set(e,E,u.options))),E},h=E=>(i.status&&(i.status.fetchRejected=!0,i.status.fetchError=E),d(E)),d=E=>{let{aborted:S}=s.signal,I=S&&i.allowStaleOnFetchAbort,C=I||i.allowStaleOnFetchRejection,R=C||i.noDeleteOnFetchRejection,U=y;if(this.#e[r]===y&&(!R||U.__staleWhileFetching===void 0?this.delete(e):I||(this.#e[r]=U.__staleWhileFetching)),C)return i.status&&U.__staleWhileFetching!==void 0&&(i.status.returnedStale=!0),U.__staleWhileFetching;if(U.__returned===U)throw E},g=(E,S)=>{let I=this.#B?.(e,o,u);I&&I instanceof Promise&&I.then(C=>E(C===void 0?void 0:C),S),s.signal.addEventListener("abort",()=>{(!i.ignoreFetchAbort||i.allowStaleOnFetchAbort)&&(E(void 0),i.allowStaleOnFetchAbort&&(E=C=>c(C,!0)));});};i.status&&(i.status.fetchDispatched=!0);let y=new Promise(g).then(c,h),w=Object.assign(y,{__abortController:s,__staleWhileFetching:o,__returned:void 0});return r===void 0?(this.set(e,w,{...u.options,status:void 0}),r=this.#n.get(e)):this.#e[r]=w,w}#t(e){if(!this.#I)return !1;let r=e;return !!r&&r instanceof Promise&&r.hasOwnProperty("__staleWhileFetching")&&r.__abortController instanceof On}async fetch(e,r={}){let{allowStale:i=this.allowStale,updateAgeOnGet:n=this.updateAgeOnGet,noDeleteOnStaleGet:o=this.noDeleteOnStaleGet,ttl:s=this.ttl,noDisposeOnSet:a=this.noDisposeOnSet,size:u=0,sizeCalculation:c=this.sizeCalculation,noUpdateTTL:h=this.noUpdateTTL,noDeleteOnFetchRejection:d=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:g=this.allowStaleOnFetchRejection,ignoreFetchAbort:y=this.ignoreFetchAbort,allowStaleOnFetchAbort:w=this.allowStaleOnFetchAbort,context:E,forceRefresh:S=!1,status:I,signal:C}=r;if(!this.#I)return I&&(I.fetch="get"),this.get(e,{allowStale:i,updateAgeOnGet:n,noDeleteOnStaleGet:o,status:I});let R={allowStale:i,updateAgeOnGet:n,noDeleteOnStaleGet:o,ttl:s,noDisposeOnSet:a,size:u,sizeCalculation:c,noUpdateTTL:h,noDeleteOnFetchRejection:d,allowStaleOnFetchRejection:g,allowStaleOnFetchAbort:w,ignoreFetchAbort:y,status:I,signal:C},U=this.#n.get(e);if(U===void 0){I&&(I.fetch="miss");let N=this.#k(e,U,R,E);return N.__returned=N}else {let N=this.#e[U];if(this.#t(N)){let de=i&&N.__staleWhileFetching!==void 0;return I&&(I.fetch="inflight",de&&(I.returnedStale=!0)),de?N.__staleWhileFetching:N.__returned=N}let W=this.#d(U);if(!S&&!W)return I&&(I.fetch="hit"),this.#C(U),n&&this.#T(U),I&&this.#A(I,U),N;let K=this.#k(e,U,R,E),Q=K.__staleWhileFetching!==void 0&&i;return I&&(I.fetch=W?"stale":"refresh",Q&&W&&(I.returnedStale=!0)),Q?K.__staleWhileFetching:K.__returned=K}}get(e,r={}){let{allowStale:i=this.allowStale,updateAgeOnGet:n=this.updateAgeOnGet,noDeleteOnStaleGet:o=this.noDeleteOnStaleGet,status:s}=r,a=this.#n.get(e);if(a!==void 0){let u=this.#e[a],c=this.#t(u);return s&&this.#A(s,a),this.#d(a)?(s&&(s.get="stale"),c?(s&&i&&u.__staleWhileFetching!==void 0&&(s.returnedStale=!0),i?u.__staleWhileFetching:void 0):(o||this.delete(e),s&&i&&(s.returnedStale=!0),i?u:void 0)):(s&&(s.get="hit"),c?u.__staleWhileFetching:(this.#C(a),n&&this.#T(a),u))}else s&&(s.get="miss");}#N(e,r){this.#h[r]=e,this.#u[e]=r;}#C(e){e!==this.#s&&(e===this.#a?this.#a=this.#u[e]:this.#N(this.#h[e],this.#u[e]),this.#N(this.#s,e),this.#s=e);}delete(e){let r=!1;if(this.#i!==0){let i=this.#n.get(e);if(i!==void 0)if(r=!0,this.#i===1)this.clear();else {this.#R(i);let n=this.#e[i];this.#t(n)?n.__abortController.abort(new Error("deleted")):(this.#_||this.#f)&&(this.#_&&this.#p?.(n,e,"delete"),this.#f&&this.#o?.push([n,e,"delete"])),this.#n.delete(e),this.#r[i]=void 0,this.#e[i]=void 0,i===this.#s?this.#s=this.#h[i]:i===this.#a?this.#a=this.#u[i]:(this.#u[this.#h[i]]=this.#u[i],this.#h[this.#u[i]]=this.#h[i]),this.#i--,this.#b.push(i);}}if(this.#f&&this.#o?.length){let i=this.#o,n;for(;n=i?.shift();)this.#g?.(...n);}return r}clear(){for(let e of this.#v({allowStale:!0})){let r=this.#e[e];if(this.#t(r))r.__abortController.abort(new Error("deleted"));else {let i=this.#r[e];this.#_&&this.#p?.(r,i,"delete"),this.#f&&this.#o?.push([r,i,"delete"]);}}if(this.#n.clear(),this.#e.fill(void 0),this.#r.fill(void 0),this.#w&&this.#S&&(this.#w.fill(0),this.#S.fill(0)),this.#E&&this.#E.fill(0),this.#a=0,this.#s=0,this.#b.length=0,this.#y=0,this.#i=0,this.#f&&this.#o){let e=this.#o,r;for(;r=e?.shift();)this.#g?.(...r);}}};kn.LRUCache=sa;});var at=M(Ht=>{v();m();_();Object.defineProperty(Ht,"t",{value:!0});Ht.ContainerIterator=Ht.Container=Ht.Base=void 0;var oa=class{constructor(e=0){this.iteratorType=e;}equals(e){return this.o===e.o}};Ht.ContainerIterator=oa;var xn=class{constructor(){this.i=0;}get length(){return this.i}size(){return this.i}empty(){return this.i===0}};Ht.Base=xn;var aa=class extends xn{};Ht.Container=aa;});var Zd=M(Mn=>{v();m();_();Object.defineProperty(Mn,"t",{value:!0});Mn.default=void 0;var w1=at(),la=class extends w1.Base{constructor(e=[]){super(),this.S=[];let r=this;e.forEach(function(i){r.push(i);});}clear(){this.i=0,this.S=[];}push(e){return this.S.push(e),this.i+=1,this.i}pop(){if(this.i!==0)return this.i-=1,this.S.pop()}top(){return this.S[this.i-1]}},_1=la;Mn.default=_1;});var ep=M(Ln=>{v();m();_();Object.defineProperty(Ln,"t",{value:!0});Ln.default=void 0;var m1=at(),ua=class extends m1.Base{constructor(e=[]){super(),this.j=0,this.q=[];let r=this;e.forEach(function(i){r.push(i);});}clear(){this.q=[],this.i=this.j=0;}push(e){let r=this.q.length;if(this.j/r>.5&&this.j+this.i>=r&&r>4096){let i=this.i;for(let n=0;n{v();m();_();Object.defineProperty(Un,"t",{value:!0});Un.default=void 0;var E1=at(),fa=class extends E1.Base{constructor(e=[],r=function(n,o){return n>o?-1:n>1;for(let o=this.i-1>>1;o>=0;--o)this.k(o,n);}m(e){let r=this.C[e];for(;e>0;){let i=e-1>>1,n=this.C[i];if(this.v(n,r)<=0)break;this.C[e]=n,e=i;}this.C[e]=r;}k(e,r){let i=this.C[e];for(;e0&&(n=o,s=this.C[o]),this.v(s,i)>=0)break;this.C[e]=s,e=n;}this.C[e]=i;}clear(){this.i=0,this.C.length=0;}push(e){this.C.push(e),this.m(this.i),this.i+=1;}pop(){if(this.i===0)return;let e=this.C[0],r=this.C.pop();return this.i-=1,this.i&&(this.C[0]=r,this.k(0,this.i>>1)),e}top(){return this.C[0]}find(e){return this.C.indexOf(e)>=0}remove(e){let r=this.C.indexOf(e);return r<0?!1:(r===0?this.pop():r===this.i-1?(this.C.pop(),this.i-=1):(this.C.splice(r,1,this.C.pop()),this.i-=1,this.m(r),this.k(r,this.i>>1)),!0)}updateItem(e){let r=this.C.indexOf(e);return r<0?!1:(this.m(r),this.k(r,this.i>>1),!0)}toArray(){return [...this.C]}},S1=fa;Un.default=S1;});var qn=M(Nn=>{v();m();_();Object.defineProperty(Nn,"t",{value:!0});Nn.default=void 0;var A1=at(),ca=class extends A1.Container{},I1=ca;Nn.default=I1;});var lt=M(ha=>{v();m();_();Object.defineProperty(ha,"t",{value:!0});ha.throwIteratorAccessError=T1;function T1(){throw new RangeError("Iterator access denied!")}});var pa=M(jn=>{v();m();_();Object.defineProperty(jn,"t",{value:!0});jn.RandomIterator=void 0;var R1=at(),Dn=lt(),da=class extends R1.ContainerIterator{constructor(e,r){super(r),this.o=e,this.iteratorType===0?(this.pre=function(){return this.o===0&&(0, Dn.throwIteratorAccessError)(),this.o-=1,this},this.next=function(){return this.o===this.container.size()&&(0, Dn.throwIteratorAccessError)(),this.o+=1,this}):(this.pre=function(){return this.o===this.container.size()-1&&(0, Dn.throwIteratorAccessError)(),this.o+=1,this},this.next=function(){return this.o===-1&&(0, Dn.throwIteratorAccessError)(),this.o-=1,this});}get pointer(){return this.container.getElementByPos(this.o)}set pointer(e){this.container.setElementByPos(this.o,e);}};jn.RandomIterator=da;});var rp=M(Fn=>{v();m();_();Object.defineProperty(Fn,"t",{value:!0});Fn.default=void 0;var C1=P1(qn()),B1=pa();function P1(t){return t&&t.t?t:{default:t}}var wr=class t extends B1.RandomIterator{constructor(e,r,i){super(e,i),this.container=r;}copy(){return new t(this.o,this.container,this.iteratorType)}},ga=class extends C1.default{constructor(e=[],r=!0){if(super(),Array.isArray(e))this.J=r?[...e]:e,this.i=e.length;else {this.J=[];let i=this;e.forEach(function(n){i.pushBack(n);});}}clear(){this.i=0,this.J.length=0;}begin(){return new wr(0,this)}end(){return new wr(this.i,this)}rBegin(){return new wr(this.i-1,this,1)}rEnd(){return new wr(-1,this,1)}front(){return this.J[0]}back(){return this.J[this.i-1]}getElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;return this.J[e]}eraseElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;return this.J.splice(e,1),this.i-=1,this.i}eraseElementByValue(e){let r=0;for(let i=0;ithis.i-1)throw new RangeError;this.J[e]=r;}insert(e,r,i=1){if(e<0||e>this.i)throw new RangeError;return this.J.splice(e,0,...new Array(i).fill(r)),this.i+=i,this.i}find(e){for(let r=0;r{v();m();_();Object.defineProperty(Wn,"t",{value:!0});Wn.default=void 0;var k1=M1(qn()),x1=at(),_r=lt();function M1(t){return t&&t.t?t:{default:t}}var mr=class t extends x1.ContainerIterator{constructor(e,r,i,n){super(n),this.o=e,this.h=r,this.container=i,this.iteratorType===0?(this.pre=function(){return this.o.L===this.h&&(0, _r.throwIteratorAccessError)(),this.o=this.o.L,this},this.next=function(){return this.o===this.h&&(0, _r.throwIteratorAccessError)(),this.o=this.o.B,this}):(this.pre=function(){return this.o.B===this.h&&(0, _r.throwIteratorAccessError)(),this.o=this.o.B,this},this.next=function(){return this.o===this.h&&(0, _r.throwIteratorAccessError)(),this.o=this.o.L,this});}get pointer(){return this.o===this.h&&(0, _r.throwIteratorAccessError)(),this.o.l}set pointer(e){this.o===this.h&&(0, _r.throwIteratorAccessError)(),this.o.l=e;}copy(){return new t(this.o,this.h,this.container,this.iteratorType)}},ya=class extends k1.default{constructor(e=[]){super(),this.h={},this.p=this._=this.h.L=this.h.B=this.h;let r=this;e.forEach(function(i){r.pushBack(i);});}V(e){let{L:r,B:i}=e;r.B=i,i.L=r,e===this.p&&(this.p=i),e===this._&&(this._=r),this.i-=1;}G(e,r){let i=r.B,n={l:e,L:r,B:i};r.B=n,i.L=n,r===this.h&&(this.p=n),i===this.h&&(this._=n),this.i+=1;}clear(){this.i=0,this.p=this._=this.h.L=this.h.B=this.h;}begin(){return new mr(this.p,this.h,this)}end(){return new mr(this.h,this.h,this)}rBegin(){return new mr(this._,this.h,this,1)}rEnd(){return new mr(this.h,this.h,this,1)}front(){return this.p.l}back(){return this._.l}getElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let r=this.p;for(;e--;)r=r.B;return r.l}eraseElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let r=this.p;for(;e--;)r=r.B;return this.V(r),this.i}eraseElementByValue(e){let r=this.p;for(;r!==this.h;)r.l===e&&this.V(r),r=r.B;return this.i}eraseElementByIterator(e){let r=e.o;return r===this.h&&(0, _r.throwIteratorAccessError)(),e=e.next(),this.V(r),e}pushBack(e){return this.G(e,this._),this.i}popBack(){if(this.i===0)return;let e=this._.l;return this.V(this._),e}pushFront(e){return this.G(e,this.h),this.i}popFront(){if(this.i===0)return;let e=this.p.l;return this.V(this.p),e}setElementByPos(e,r){if(e<0||e>this.i-1)throw new RangeError;let i=this.p;for(;e--;)i=i.B;i.l=r;}insert(e,r,i=1){if(e<0||e>this.i)throw new RangeError;if(i<=0)return this.i;if(e===0)for(;i--;)this.pushFront(r);else if(e===this.i)for(;i--;)this.pushBack(r);else {let n=this.p;for(let s=1;s{v();m();_();Object.defineProperty($n,"t",{value:!0});$n.default=void 0;var U1=q1(qn()),N1=pa();function q1(t){return t&&t.t?t:{default:t}}var vr=class t extends N1.RandomIterator{constructor(e,r,i){super(e,i),this.container=r;}copy(){return new t(this.o,this.container,this.iteratorType)}},ba=class extends U1.default{constructor(e=[],r=4096){super(),this.j=0,this.D=0,this.R=0,this.N=0,this.P=0,this.A=[];let i=(()=>{if(typeof e.length=="number")return e.length;if(typeof e.size=="number")return e.size;if(typeof e.size=="function")return e.size();throw new TypeError("Cannot get the length or size of the container")})();this.F=r,this.P=Math.max(Math.ceil(i/this.F),1);for(let s=0;s>1)-(n>>1),this.D=this.N=this.F-i%this.F>>1;let o=this;e.forEach(function(s){o.pushBack(s);});}T(){let e=[],r=Math.max(this.P>>1,1);for(let i=0;i>1;}begin(){return new vr(0,this)}end(){return new vr(this.i,this)}rBegin(){return new vr(this.i-1,this,1)}rEnd(){return new vr(-1,this,1)}front(){if(this.i!==0)return this.A[this.j][this.D]}back(){if(this.i!==0)return this.A[this.R][this.N]}pushBack(e){return this.i&&(this.N0?this.N-=1:this.R>0?(this.R-=1,this.N=this.F-1):(this.R=this.P-1,this.N=this.F-1)),this.i-=1,e}pushFront(e){return this.i&&(this.D>0?this.D-=1:this.j>0?(this.j-=1,this.D=this.F-1):(this.j=this.P-1,this.D=this.F-1),this.j===this.R&&this.D===this.N&&this.T()),this.i+=1,this.A[this.j][this.D]=e,this.i}popFront(){if(this.i===0)return;let e=this.A[this.j][this.D];return this.i!==1&&(this.Dthis.i-1)throw new RangeError;let{curNodeBucketIndex:r,curNodePointerIndex:i}=this.O(e);return this.A[r][i]}setElementByPos(e,r){if(e<0||e>this.i-1)throw new RangeError;let{curNodeBucketIndex:i,curNodePointerIndex:n}=this.O(e);this.A[i][n]=r;}insert(e,r,i=1){if(e<0||e>this.i)throw new RangeError;if(e===0)for(;i--;)this.pushFront(r);else if(e===this.i)for(;i--;)this.pushBack(r);else {let n=[];for(let o=e;othis.i-1)throw new RangeError;if(e===0)this.popFront();else if(e===this.i-1)this.popBack();else {let r=[];for(let n=e+1;ne;)this.popBack();return this.i}sort(e){let r=[];for(let i=0;i{v();m();_();Object.defineProperty(Zr,"t",{value:!0});Zr.TreeNodeEnableIndex=Zr.TreeNode=void 0;var Hn=class{constructor(e,r){this.ee=1,this.u=void 0,this.l=void 0,this.U=void 0,this.W=void 0,this.tt=void 0,this.u=e,this.l=r;}L(){let e=this;if(e.ee===1&&e.tt.tt===e)e=e.W;else if(e.U)for(e=e.U;e.W;)e=e.W;else {let r=e.tt;for(;r.U===e;)e=r,r=e.tt;e=r;}return e}B(){let e=this;if(e.W){for(e=e.W;e.U;)e=e.U;return e}else {let r=e.tt;for(;r.W===e;)e=r,r=e.tt;return e.W!==r?r:e}}te(){let e=this.tt,r=this.W,i=r.U;return e.tt===this?e.tt=r:e.U===this?e.U=r:e.W=r,r.tt=e,r.U=this,this.tt=r,this.W=i,i&&(i.tt=this),r}se(){let e=this.tt,r=this.U,i=r.W;return e.tt===this?e.tt=r:e.U===this?e.U=r:e.W=r,r.tt=e,r.W=this,this.tt=r,this.U=i,i&&(i.tt=this),r}};Zr.TreeNode=Hn;var wa=class extends Hn{constructor(){super(...arguments),this.rt=1;}te(){let e=super.te();return this.ie(),e.ie(),e}se(){let e=super.se();return this.ie(),e.ie(),e}ie(){this.rt=1,this.U&&(this.rt+=this.U.rt),this.W&&(this.rt+=this.W.rt);}};Zr.TreeNodeEnableIndex=wa;});var ma=M(Vn=>{v();m();_();Object.defineProperty(Vn,"t",{value:!0});Vn.default=void 0;var op=sp(),j1=at(),ap=lt(),_a=class extends j1.Container{constructor(e=function(i,n){return in?1:0},r=!1){super(),this.Y=void 0,this.v=e,r?(this.re=op.TreeNodeEnableIndex,this.M=function(i,n,o){let s=this.ne(i,n,o);if(s){let a=s.tt;for(;a!==this.h;)a.rt+=1,a=a.tt;let u=this.he(s);if(u){let{parentNode:c,grandParent:h,curNode:d}=u;c.ie(),h.ie(),d.ie();}}return this.i},this.V=function(i){let n=this.fe(i);for(;n!==this.h;)n.rt-=1,n=n.tt;}):(this.re=op.TreeNode,this.M=function(i,n,o){let s=this.ne(i,n,o);return s&&this.he(s),this.i},this.V=this.fe),this.h=new this.re;}X(e,r){let i=this.h;for(;e;){let n=this.v(e.u,r);if(n<0)e=e.W;else if(n>0)i=e,e=e.U;else return e}return i}Z(e,r){let i=this.h;for(;e;)this.v(e.u,r)<=0?e=e.W:(i=e,e=e.U);return i}$(e,r){let i=this.h;for(;e;){let n=this.v(e.u,r);if(n<0)i=e,e=e.W;else if(n>0)e=e.U;else return e}return i}rr(e,r){let i=this.h;for(;e;)this.v(e.u,r)<0?(i=e,e=e.W):e=e.U;return i}ue(e){for(;;){let r=e.tt;if(r===this.h)return;if(e.ee===1){e.ee=0;return}if(e===r.U){let i=r.W;if(i.ee===1)i.ee=0,r.ee=1,r===this.Y?this.Y=r.te():r.te();else if(i.W&&i.W.ee===1){i.ee=r.ee,r.ee=0,i.W.ee=0,r===this.Y?this.Y=r.te():r.te();return}else i.U&&i.U.ee===1?(i.ee=1,i.U.ee=0,i.se()):(i.ee=1,e=r);}else {let i=r.U;if(i.ee===1)i.ee=0,r.ee=1,r===this.Y?this.Y=r.se():r.se();else if(i.U&&i.U.ee===1){i.ee=r.ee,r.ee=0,i.U.ee=0,r===this.Y?this.Y=r.se():r.se();return}else i.W&&i.W.ee===1?(i.ee=1,i.W.ee=0,i.te()):(i.ee=1,e=r);}}}fe(e){if(this.i===1)return this.clear(),this.h;let r=e;for(;r.U||r.W;){if(r.W)for(r=r.W;r.U;)r=r.U;else r=r.U;[e.u,r.u]=[r.u,e.u],[e.l,r.l]=[r.l,e.l],e=r;}this.h.U===r?this.h.U=r.tt:this.h.W===r&&(this.h.W=r.tt),this.ue(r);let i=r.tt;return r===i.U?i.U=void 0:i.W=void 0,this.i-=1,this.Y.ee=0,i}oe(e,r){return e===void 0?!1:this.oe(e.U,r)||r(e)?!0:this.oe(e.W,r)}he(e){for(;;){let r=e.tt;if(r.ee===0)return;let i=r.tt;if(r===i.U){let n=i.W;if(n&&n.ee===1){if(n.ee=r.ee=0,i===this.Y)return;i.ee=1,e=i;continue}else if(e===r.W){if(e.ee=0,e.U&&(e.U.tt=r),e.W&&(e.W.tt=i),r.W=e.U,i.U=e.W,e.U=r,e.W=i,i===this.Y)this.Y=e,this.h.tt=e;else {let o=i.tt;o.U===i?o.U=e:o.W=e;}return e.tt=i.tt,r.tt=e,i.tt=e,i.ee=1,{parentNode:r,grandParent:i,curNode:e}}else r.ee=0,i===this.Y?this.Y=i.se():i.se(),i.ee=1;}else {let n=i.U;if(n&&n.ee===1){if(n.ee=r.ee=0,i===this.Y)return;i.ee=1,e=i;continue}else if(e===r.U){if(e.ee=0,e.U&&(e.U.tt=i),e.W&&(e.W.tt=r),i.W=e.U,r.U=e.W,e.U=i,e.W=r,i===this.Y)this.Y=e,this.h.tt=e;else {let o=i.tt;o.U===i?o.U=e:o.W=e;}return e.tt=i.tt,r.tt=e,i.tt=e,i.ee=1,{parentNode:r,grandParent:i,curNode:e}}else r.ee=0,i===this.Y?this.Y=i.te():i.te(),i.ee=1;}return}}ne(e,r,i){if(this.Y===void 0){this.i+=1,this.Y=new this.re(e,r),this.Y.ee=0,this.Y.tt=this.h,this.h.tt=this.Y,this.h.U=this.Y,this.h.W=this.Y;return}let n,o=this.h.U,s=this.v(o.u,e);if(s===0){o.l=r;return}else if(s>0)o.U=new this.re(e,r),o.U.tt=o,n=o.U,this.h.U=n;else {let a=this.h.W,u=this.v(a.u,e);if(u===0){a.l=r;return}else if(u<0)a.W=new this.re(e,r),a.W.tt=a,n=a.W,this.h.W=n;else {if(i!==void 0){let c=i.o;if(c!==this.h){let h=this.v(c.u,e);if(h===0){c.l=r;return}else if(h>0){let d=c.L(),g=this.v(d.u,e);if(g===0){d.l=r;return}else g<0&&(n=new this.re(e,r),d.W===void 0?(d.W=n,n.tt=d):(c.U=n,n.tt=c));}}}if(n===void 0)for(n=this.Y;;){let c=this.v(n.u,e);if(c>0){if(n.U===void 0){n.U=new this.re(e,r),n.U.tt=n,n=n.U;break}n=n.U;}else if(c<0){if(n.W===void 0){n.W=new this.re(e,r),n.W.tt=n,n=n.W;break}n=n.W;}else {n.l=r;return}}}}return this.i+=1,n}I(e,r){for(;e;){let i=this.v(e.u,r);if(i<0)e=e.W;else if(i>0)e=e.U;else return e}return e||this.h}clear(){this.i=0,this.Y=void 0,this.h.tt=void 0,this.h.U=this.h.W=void 0;}updateKeyByIterator(e,r){let i=e.o;if(i===this.h&&(0, ap.throwIteratorAccessError)(),this.i===1)return i.u=r,!0;if(i===this.h.U)return this.v(i.B().u,r)>0?(i.u=r,!0):!1;if(i===this.h.W)return this.v(i.L().u,r)<0?(i.u=r,!0):!1;let n=i.L().u;if(this.v(n,r)>=0)return !1;let o=i.B().u;return this.v(o,r)<=0?!1:(i.u=r,!0)}eraseElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let r=0,i=this;return this.oe(this.Y,function(n){return e===r?(i.V(n),!0):(r+=1,!1)}),this.i}eraseElementByKey(e){if(this.i===0)return !1;let r=this.I(this.Y,e);return r===this.h?!1:(this.V(r),!0)}eraseElementByIterator(e){let r=e.o;r===this.h&&(0, ap.throwIteratorAccessError)();let i=r.W===void 0;return e.iteratorType===0?i&&e.next():(!i||r.U===void 0)&&e.next(),this.V(r),e}forEach(e){let r=0;for(let i of this)e(i,r++,this);}getElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let r,i=0;for(let n of this){if(i===e){r=n;break}i+=1;}return r}getHeight(){if(this.i===0)return 0;let e=function(r){return r?Math.max(e(r.U),e(r.W))+1:0};return e(this.Y)}},F1=_a;Vn.default=F1;});var Ea=M(Kn=>{v();m();_();Object.defineProperty(Kn,"t",{value:!0});Kn.default=void 0;var W1=at(),zn=lt(),va=class extends W1.ContainerIterator{constructor(e,r,i){super(i),this.o=e,this.h=r,this.iteratorType===0?(this.pre=function(){return this.o===this.h.U&&(0, zn.throwIteratorAccessError)(),this.o=this.o.L(),this},this.next=function(){return this.o===this.h&&(0, zn.throwIteratorAccessError)(),this.o=this.o.B(),this}):(this.pre=function(){return this.o===this.h.W&&(0, zn.throwIteratorAccessError)(),this.o=this.o.B(),this},this.next=function(){return this.o===this.h&&(0, zn.throwIteratorAccessError)(),this.o=this.o.L(),this});}get index(){let e=this.o,r=this.h.tt;if(e===this.h)return r?r.rt-1:0;let i=0;for(e.U&&(i+=e.U.rt);e!==r;){let n=e.tt;e===n.W&&(i+=1,n.U&&(i+=n.U.rt)),e=n;}return i}},$1=va;Kn.default=$1;});var up=M(Gn=>{v();m();_();Object.defineProperty(Gn,"t",{value:!0});Gn.default=void 0;var H1=lp(ma()),V1=lp(Ea()),z1=lt();function lp(t){return t&&t.t?t:{default:t}}var Ke=class t extends V1.default{constructor(e,r,i,n){super(e,r,n),this.container=i;}get pointer(){return this.o===this.h&&(0, z1.throwIteratorAccessError)(),this.o.u}copy(){return new t(this.o,this.h,this.container,this.iteratorType)}},Sa=class extends H1.default{constructor(e=[],r,i){super(r,i);let n=this;e.forEach(function(o){n.insert(o);});}*K(e){e!==void 0&&(yield*this.K(e.U),yield e.u,yield*this.K(e.W));}begin(){return new Ke(this.h.U||this.h,this.h,this)}end(){return new Ke(this.h,this.h,this)}rBegin(){return new Ke(this.h.W||this.h,this.h,this,1)}rEnd(){return new Ke(this.h,this.h,this,1)}front(){return this.h.U?this.h.U.u:void 0}back(){return this.h.W?this.h.W.u:void 0}insert(e,r){return this.M(e,void 0,r)}find(e){let r=this.I(this.Y,e);return new Ke(r,this.h,this)}lowerBound(e){let r=this.X(this.Y,e);return new Ke(r,this.h,this)}upperBound(e){let r=this.Z(this.Y,e);return new Ke(r,this.h,this)}reverseLowerBound(e){let r=this.$(this.Y,e);return new Ke(r,this.h,this)}reverseUpperBound(e){let r=this.rr(this.Y,e);return new Ke(r,this.h,this)}union(e){let r=this;return e.forEach(function(i){r.insert(i);}),this.i}[Symbol.iterator](){return this.K(this.Y)}},K1=Sa;Gn.default=K1;});var cp=M(Qn=>{v();m();_();Object.defineProperty(Qn,"t",{value:!0});Qn.default=void 0;var G1=fp(ma()),Q1=fp(Ea()),Y1=lt();function fp(t){return t&&t.t?t:{default:t}}var Ge=class t extends Q1.default{constructor(e,r,i,n){super(e,r,n),this.container=i;}get pointer(){this.o===this.h&&(0, Y1.throwIteratorAccessError)();let e=this;return new Proxy([],{get(r,i){if(i==="0")return e.o.u;if(i==="1")return e.o.l},set(r,i,n){if(i!=="1")throw new TypeError("props must be 1");return e.o.l=n,!0}})}copy(){return new t(this.o,this.h,this.container,this.iteratorType)}},Aa=class extends G1.default{constructor(e=[],r,i){super(r,i);let n=this;e.forEach(function(o){n.setElement(o[0],o[1]);});}*K(e){e!==void 0&&(yield*this.K(e.U),yield [e.u,e.l],yield*this.K(e.W));}begin(){return new Ge(this.h.U||this.h,this.h,this)}end(){return new Ge(this.h,this.h,this)}rBegin(){return new Ge(this.h.W||this.h,this.h,this,1)}rEnd(){return new Ge(this.h,this.h,this,1)}front(){if(this.i===0)return;let e=this.h.U;return [e.u,e.l]}back(){if(this.i===0)return;let e=this.h.W;return [e.u,e.l]}lowerBound(e){let r=this.X(this.Y,e);return new Ge(r,this.h,this)}upperBound(e){let r=this.Z(this.Y,e);return new Ge(r,this.h,this)}reverseLowerBound(e){let r=this.$(this.Y,e);return new Ge(r,this.h,this)}reverseUpperBound(e){let r=this.rr(this.Y,e);return new Ge(r,this.h,this)}setElement(e,r,i){return this.M(e,r,i)}find(e){let r=this.I(this.Y,e);return new Ge(r,this.h,this)}getElementByKey(e){return this.I(this.Y,e).l}union(e){let r=this;return e.forEach(function(i){r.setElement(i[0],i[1]);}),this.i}[Symbol.iterator](){return this.K(this.Y)}},J1=Aa;Qn.default=J1;});var Ta=M(Ia=>{v();m();_();Object.defineProperty(Ia,"t",{value:!0});Ia.default=X1;function X1(t){let e=typeof t;return e==="object"&&t!==null||e==="function"}});var Pa=M(ei=>{v();m();_();Object.defineProperty(ei,"t",{value:!0});ei.HashContainerIterator=ei.HashContainer=void 0;var hp=at(),Ra=Z1(Ta()),Ti=lt();function Z1(t){return t&&t.t?t:{default:t}}var Ca=class extends hp.ContainerIterator{constructor(e,r,i){super(i),this.o=e,this.h=r,this.iteratorType===0?(this.pre=function(){return this.o.L===this.h&&(0, Ti.throwIteratorAccessError)(),this.o=this.o.L,this},this.next=function(){return this.o===this.h&&(0, Ti.throwIteratorAccessError)(),this.o=this.o.B,this}):(this.pre=function(){return this.o.B===this.h&&(0, Ti.throwIteratorAccessError)(),this.o=this.o.B,this},this.next=function(){return this.o===this.h&&(0, Ti.throwIteratorAccessError)(),this.o=this.o.L,this});}};ei.HashContainerIterator=Ca;var Ba=class extends hp.Container{constructor(){super(),this.H=[],this.g={},this.HASH_TAG=Symbol("@@HASH_TAG"),Object.setPrototypeOf(this.g,null),this.h={},this.h.L=this.h.B=this.p=this._=this.h;}V(e){let{L:r,B:i}=e;r.B=i,i.L=r,e===this.p&&(this.p=i),e===this._&&(this._=r),this.i-=1;}M(e,r,i){i===void 0&&(i=(0, Ra.default)(e));let n;if(i){let o=e[this.HASH_TAG];if(o!==void 0)return this.H[o].l=r,this.i;Object.defineProperty(e,this.HASH_TAG,{value:this.H.length,configurable:!0}),n={u:e,l:r,L:this._,B:this.h},this.H.push(n);}else {let o=this.g[e];if(o)return o.l=r,this.i;n={u:e,l:r,L:this._,B:this.h},this.g[e]=n;}return this.i===0?(this.p=n,this.h.B=n):this._.B=n,this._=n,this.h.L=n,++this.i}I(e,r){if(r===void 0&&(r=(0, Ra.default)(e)),r){let i=e[this.HASH_TAG];return i===void 0?this.h:this.H[i]}else return this.g[e]||this.h}clear(){let e=this.HASH_TAG;this.H.forEach(function(r){delete r.u[e];}),this.H=[],this.g={},Object.setPrototypeOf(this.g,null),this.i=0,this.p=this._=this.h.L=this.h.B=this.h;}eraseElementByKey(e,r){let i;if(r===void 0&&(r=(0, Ra.default)(e)),r){let n=e[this.HASH_TAG];if(n===void 0)return !1;delete e[this.HASH_TAG],i=this.H[n],delete this.H[n];}else {if(i=this.g[e],i===void 0)return !1;delete this.g[e];}return this.V(i),!0}eraseElementByIterator(e){let r=e.o;return r===this.h&&(0, Ti.throwIteratorAccessError)(),this.V(r),e.next()}eraseElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let r=this.p;for(;e--;)r=r.B;return this.V(r),this.i}};ei.HashContainer=Ba;});var pp=M(Yn=>{v();m();_();Object.defineProperty(Yn,"t",{value:!0});Yn.default=void 0;var dp=Pa(),ev=lt(),Er=class t extends dp.HashContainerIterator{constructor(e,r,i,n){super(e,r,n),this.container=i;}get pointer(){return this.o===this.h&&(0, ev.throwIteratorAccessError)(),this.o.u}copy(){return new t(this.o,this.h,this.container,this.iteratorType)}},Oa=class extends dp.HashContainer{constructor(e=[]){super();let r=this;e.forEach(function(i){r.insert(i);});}begin(){return new Er(this.p,this.h,this)}end(){return new Er(this.h,this.h,this)}rBegin(){return new Er(this._,this.h,this,1)}rEnd(){return new Er(this.h,this.h,this,1)}front(){return this.p.u}back(){return this._.u}insert(e,r){return this.M(e,void 0,r)}getElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let r=this.p;for(;e--;)r=r.B;return r.u}find(e,r){let i=this.I(e,r);return new Er(i,this.h,this)}forEach(e){let r=0,i=this.p;for(;i!==this.h;)e(i.u,r++,this),i=i.B;}[Symbol.iterator](){return function*(){let e=this.p;for(;e!==this.h;)yield e.u,e=e.B;}.bind(this)()}},tv=Oa;Yn.default=tv;});var yp=M(Jn=>{v();m();_();Object.defineProperty(Jn,"t",{value:!0});Jn.default=void 0;var gp=Pa(),rv=nv(Ta()),iv=lt();function nv(t){return t&&t.t?t:{default:t}}var Sr=class t extends gp.HashContainerIterator{constructor(e,r,i,n){super(e,r,n),this.container=i;}get pointer(){this.o===this.h&&(0, iv.throwIteratorAccessError)();let e=this;return new Proxy([],{get(r,i){if(i==="0")return e.o.u;if(i==="1")return e.o.l},set(r,i,n){if(i!=="1")throw new TypeError("props must be 1");return e.o.l=n,!0}})}copy(){return new t(this.o,this.h,this.container,this.iteratorType)}},ka=class extends gp.HashContainer{constructor(e=[]){super();let r=this;e.forEach(function(i){r.setElement(i[0],i[1]);});}begin(){return new Sr(this.p,this.h,this)}end(){return new Sr(this.h,this.h,this)}rBegin(){return new Sr(this._,this.h,this,1)}rEnd(){return new Sr(this.h,this.h,this,1)}front(){if(this.i!==0)return [this.p.u,this.p.l]}back(){if(this.i!==0)return [this._.u,this._.l]}setElement(e,r,i){return this.M(e,r,i)}getElementByKey(e,r){if(r===void 0&&(r=(0, rv.default)(e)),r){let n=e[this.HASH_TAG];return n!==void 0?this.H[n].l:void 0}let i=this.g[e];return i?i.l:void 0}getElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let r=this.p;for(;e--;)r=r.B;return [r.u,r.l]}find(e,r){let i=this.I(e,r);return new Sr(i,this.h,this)}forEach(e){let r=0,i=this.p;for(;i!==this.h;)e([i.u,i.l],r++,this),i=i.B;}[Symbol.iterator](){return function*(){let e=this.p;for(;e!==this.h;)yield [e.u,e.l],e=e.B;}.bind(this)()}},sv=ka;Jn.default=sv;});var bp=M(je=>{v();m();_();Object.defineProperty(je,"t",{value:!0});Object.defineProperty(je,"Deque",{enumerable:!0,get:function(){return cv.default}});Object.defineProperty(je,"HashMap",{enumerable:!0,get:function(){return gv.default}});Object.defineProperty(je,"HashSet",{enumerable:!0,get:function(){return pv.default}});Object.defineProperty(je,"LinkList",{enumerable:!0,get:function(){return fv.default}});Object.defineProperty(je,"OrderedMap",{enumerable:!0,get:function(){return dv.default}});Object.defineProperty(je,"OrderedSet",{enumerable:!0,get:function(){return hv.default}});Object.defineProperty(je,"PriorityQueue",{enumerable:!0,get:function(){return lv.default}});Object.defineProperty(je,"Queue",{enumerable:!0,get:function(){return av.default}});Object.defineProperty(je,"Stack",{enumerable:!0,get:function(){return ov.default}});Object.defineProperty(je,"Vector",{enumerable:!0,get:function(){return uv.default}});var ov=ut(Zd()),av=ut(ep()),lv=ut(tp()),uv=ut(rp()),fv=ut(ip()),cv=ut(np()),hv=ut(up()),dv=ut(cp()),pv=ut(pp()),gv=ut(yp());function ut(t){return t&&t.t?t:{default:t}}});var _p=M((mN,wp)=>{v();m();_();var yv=bp().OrderedSet,ft=ot()("number-allocator:trace"),bv=ot()("number-allocator:error");function Te(t,e){this.low=t,this.high=e;}Te.prototype.equals=function(t){return this.low===t.low&&this.high===t.high};Te.prototype.compare=function(t){return this.lowr.compare(i)),ft("Create"),this.clear();}ct.prototype.firstVacant=function(){return this.ss.size()===0?null:this.ss.front().low};ct.prototype.alloc=function(){if(this.ss.size()===0)return ft("alloc():empty"),null;let t=this.ss.begin(),e=t.pointer.low,r=t.pointer.high,i=e;return i+1<=r?this.ss.updateKeyByIterator(t,new Te(e+1,r)):this.ss.eraseElementByPos(0),ft("alloc():"+i),i};ct.prototype.use=function(t){let e=new Te(t,t),r=this.ss.lowerBound(e);if(!r.equals(this.ss.end())){let i=r.pointer.low,n=r.pointer.high;return r.pointer.equals(e)?(this.ss.eraseElementByIterator(r),ft("use():"+t),!0):i>t?!1:i===t?(this.ss.updateKeyByIterator(r,new Te(i+1,n)),ft("use():"+t),!0):n===t?(this.ss.updateKeyByIterator(r,new Te(i,n-1)),ft("use():"+t),!0):(this.ss.updateKeyByIterator(r,new Te(t+1,n)),this.ss.insert(new Te(i,t-1)),ft("use():"+t),!0)}return ft("use():failed"),!1};ct.prototype.free=function(t){if(tthis.max){bv("free():"+t+" is out of range");return}let e=new Te(t,t),r=this.ss.upperBound(e);if(r.equals(this.ss.end())){if(r.equals(this.ss.begin())){this.ss.insert(e);return}r.pre();let i=r.pointer.high;r.pointer.high+1===t?this.ss.updateKeyByIterator(r,new Te(i,t)):this.ss.insert(e);}else if(r.equals(this.ss.begin()))if(t+1===r.pointer.low){let i=r.pointer.high;this.ss.updateKeyByIterator(r,new Te(t,i));}else this.ss.insert(e);else {let i=r.pointer.low,n=r.pointer.high;r.pre();let o=r.pointer.low;r.pointer.high+1===t?t+1===i?(this.ss.eraseElementByIterator(r),this.ss.updateKeyByIterator(r,new Te(o,n))):this.ss.updateKeyByIterator(r,new Te(o,t)):t+1===i?(this.ss.eraseElementByIterator(r.next()),this.ss.insert(new Te(t,n))):this.ss.insert(e);}ft("free():"+t);};ct.prototype.clear=function(){ft("clear()"),this.ss.clear(),this.ss.insert(new Te(this.min,this.max));};ct.prototype.intervalCount=function(){return this.ss.size()};ct.prototype.dump=function(){console.log("length:"+this.ss.size());for(let t of this.ss)console.log(t);};wp.exports=ct;});var xa=M((PN,mp)=>{v();m();_();var wv=_p();mp.exports.NumberAllocator=wv;});var vp=M(La=>{v();m();_();Object.defineProperty(La,"__esModule",{value:!0});var _v=Xd(),mv=xa(),Ma=class{constructor(e){e>0&&(this.aliasToTopic=new _v.LRUCache({max:e}),this.topicToAlias={},this.numberAllocator=new mv.NumberAllocator(1,e),this.max=e,this.length=0);}put(e,r){if(r===0||r>this.max)return !1;let i=this.aliasToTopic.get(r);return i&&delete this.topicToAlias[i],this.aliasToTopic.set(r,e),this.topicToAlias[e]=r,this.numberAllocator.use(r),this.length=this.aliasToTopic.size,!0}getTopicByAlias(e){return this.aliasToTopic.get(e)}getAliasByTopic(e){let r=this.topicToAlias[e];return typeof r<"u"&&this.aliasToTopic.get(r),r}clear(){this.aliasToTopic.clear(),this.topicToAlias={},this.numberAllocator.clear(),this.length=0;}getLruAlias(){let e=this.numberAllocator.firstVacant();return e||[...this.aliasToTopic.keys()][this.aliasToTopic.size-1]}};La.default=Ma;});var Ep=M(Ri=>{v();m();_();var vv=Ri&&Ri.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Ri,"__esModule",{value:!0});var Ev=Ai(),Sv=vv(vp()),Av=Jr(),Iv=(t,e)=>{t.log("_handleConnack");let{options:r}=t,n=r.protocolVersion===5?e.reasonCode:e.returnCode;if(clearTimeout(t.connackTimer),delete t.topicAliasSend,e.properties){if(e.properties.topicAliasMaximum){if(e.properties.topicAliasMaximum>65535){t.emit("error",new Error("topicAliasMaximum from broker is out of range"));return}e.properties.topicAliasMaximum>0&&(t.topicAliasSend=new Sv.default(e.properties.topicAliasMaximum));}e.properties.serverKeepAlive&&r.keepalive&&(r.keepalive=e.properties.serverKeepAlive,t._shiftPingInterval()),e.properties.maximumPacketSize&&(r.properties||(r.properties={}),r.properties.maximumPacketSize=e.properties.maximumPacketSize);}if(n===0)t.reconnecting=!1,t._onConnect(e);else if(n>0){let o=new Av.ErrorWithReasonCode(`Connection refused: ${Ev.ReasonCodes[n]}`,n);t.emit("error",o);}};Ri.default=Iv;});var Sp=M(Ua=>{v();m();_();Object.defineProperty(Ua,"__esModule",{value:!0});var Tv=(t,e,r)=>{t.log("handling pubrel packet");let i=typeof r<"u"?r:t.noop,{messageId:n}=e,o={cmd:"pubcomp",messageId:n};t.incomingStore.get(e,(s,a)=>{s?t._sendPacket(o,i):(t.emit("message",a.topic,a.payload,a),t.handleMessage(a,u=>{if(u)return i(u);t.incomingStore.del(a,t.noop),t._sendPacket(o,i);}));});};Ua.default=Tv;});var Ap=M(Ci=>{v();m();_();var Bi=Ci&&Ci.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Ci,"__esModule",{value:!0});var Rv=Bi(Vd()),Cv=Bi(Kd()),Bv=Bi(Ep()),Pv=Bi(Ai()),Ov=Bi(Sp()),kv=(t,e,r)=>{let{options:i}=t;if(i.protocolVersion===5&&i.properties&&i.properties.maximumPacketSize&&i.properties.maximumPacketSize{v();m();_();var xv=ti&&ti.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(ti,"__esModule",{value:!0});ti.TypedEventEmitter=void 0;var Mv=xv((ir(),X(rr))),Lv=Jr(),Xn=class{};ti.TypedEventEmitter=Xn;(0, Lv.applyMixin)(Xn,Mv.default);});var Pi=M(Ar=>{v();m();_();Object.defineProperty(Ar,"__esModule",{value:!0});Ar.isReactNativeBrowser=Ar.isWebWorker=void 0;var Uv=()=>typeof window<"u"&&typeof window.document<"u",Tp=()=>{var t,e;return !!(typeof self=="object"&&(!((e=(t=self?.constructor)===null||t===void 0?void 0:t.name)===null||e===void 0)&&e.includes("WorkerGlobalScope")))},Rp=()=>typeof B<"u"&&B.product==="ReactNative",Nv=Uv()||Tp()||Rp();Ar.isWebWorker=Tp();Ar.isReactNativeBrowser=Rp();Ar.default=Nv;});var Bp=M((Zn,Cp)=>{v();m();_();(function(t,e){typeof Zn=="object"&&typeof Cp<"u"?e(Zn):typeof define=="function"&&__webpack_require__.amdO?define(["exports"],e):(t=typeof globalThis<"u"?globalThis:t||self,e(t.fastUniqueNumbers={}));})(Zn,function(t){var e=function(g){return function(y){var w=g(y);return y.add(w),w}},r=function(g){return function(y,w){return g.set(y,w),w}},i=Number.MAX_SAFE_INTEGER===void 0?9007199254740991:Number.MAX_SAFE_INTEGER,n=536870912,o=n*2,s=function(g,y){return function(w){var E=y.get(w),S=E===void 0?w.size:Ei)throw new Error("Congratulations, you created a collection of unique numbers which uses all available integers!");for(;w.has(S);)S=Math.floor(Math.random()*i);return g(w,S)}},a=new WeakMap,u=r(a),c=s(u,a),h=e(c);t.addUniqueNumber=h,t.generateUniqueNumber=c;});});var Op=M((es,Pp)=>{v();m();_();(function(t,e){typeof es=="object"&&typeof Pp<"u"?e(es,Bp()):typeof define=="function"&&__webpack_require__.amdO?define(["exports","fast-unique-numbers"],e):(t=typeof globalThis<"u"?globalThis:t||self,e(t.workerTimersBroker={},t.fastUniqueNumbers));})(es,function(t,e){var r=function(s){return s.method!==void 0&&s.method==="call"},i=function(s){return s.error===null&&typeof s.id=="number"},n=function(s){var a=new Map([[0,function(){}]]),u=new Map([[0,function(){}]]),c=new Map,h=new Worker(s);h.addEventListener("message",function(E){var S=E.data;if(r(S)){var I=S.params,C=I.timerId,R=I.timerType;if(R==="interval"){var U=a.get(C);if(typeof U=="number"){var N=c.get(U);if(N===void 0||N.timerId!==C||N.timerType!==R)throw new Error("The timer is in an undefined state.")}else if(typeof U<"u")U();else throw new Error("The timer is in an undefined state.")}else if(R==="timeout"){var W=u.get(C);if(typeof W=="number"){var K=c.get(W);if(K===void 0||K.timerId!==C||K.timerType!==R)throw new Error("The timer is in an undefined state.")}else if(typeof W<"u")W(),u.delete(C);else throw new Error("The timer is in an undefined state.")}}else if(i(S)){var z=S.id,Q=c.get(z);if(Q===void 0)throw new Error("The timer is in an undefined state.");var de=Q.timerId,Gt=Q.timerType;c.delete(z),Gt==="interval"?a.delete(de):u.delete(de);}else {var pe=S.error.message;throw new Error(pe)}});var d=function(S){var I=e.generateUniqueNumber(c);c.set(I,{timerId:S,timerType:"interval"}),a.set(S,I),h.postMessage({id:I,method:"clear",params:{timerId:S,timerType:"interval"}});},g=function(S){var I=e.generateUniqueNumber(c);c.set(I,{timerId:S,timerType:"timeout"}),u.set(S,I),h.postMessage({id:I,method:"clear",params:{timerId:S,timerType:"timeout"}});},y=function(S){var I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,C=e.generateUniqueNumber(a);return a.set(C,function(){S(),typeof a.get(C)=="function"&&h.postMessage({id:null,method:"set",params:{delay:I,now:performance.now(),timerId:C,timerType:"interval"}});}),h.postMessage({id:null,method:"set",params:{delay:I,now:performance.now(),timerId:C,timerType:"interval"}}),C},w=function(S){var I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,C=e.generateUniqueNumber(u);return u.set(C,S),h.postMessage({id:null,method:"set",params:{delay:I,now:performance.now(),timerId:C,timerType:"timeout"}}),C};return {clearInterval:d,clearTimeout:g,setInterval:y,setTimeout:w}};t.load=n;});});var xp=M((ts,kp)=>{v();m();_();(function(t,e){typeof ts=="object"&&typeof kp<"u"?e(ts,Op()):typeof define=="function"&&__webpack_require__.amdO?define(["exports","worker-timers-broker"],e):(t=typeof globalThis<"u"?globalThis:t||self,e(t.workerTimers={},t.workerTimersBroker));})(ts,function(t,e){var r=function(h,d){var g=null;return function(){if(g!==null)return g;var y=new Blob([d],{type:"application/javascript; charset=utf-8"}),w=URL.createObjectURL(y);return g=h(w),setTimeout(function(){return URL.revokeObjectURL(w)}),g}},i=`(()=>{var e={472:(e,t,r)=>{var o,i;void 0===(i="function"==typeof(o=function(){"use strict";var e=new Map,t=new Map,r=function(t){var r=e.get(t);if(void 0===r)throw new Error('There is no interval scheduled with the given id "'.concat(t,'".'));clearTimeout(r),e.delete(t)},o=function(e){var r=t.get(e);if(void 0===r)throw new Error('There is no timeout scheduled with the given id "'.concat(e,'".'));clearTimeout(r),t.delete(e)},i=function(e,t){var r,o=performance.now();return{expected:o+(r=e-Math.max(0,o-t)),remainingDelay:r}},n=function e(t,r,o,i){var n=performance.now();n>o?postMessage({id:null,method:"call",params:{timerId:r,timerType:i}}):t.set(r,setTimeout(e,o-n,t,r,o,i))},a=function(t,r,o){var a=i(t,o),s=a.expected,d=a.remainingDelay;e.set(r,setTimeout(n,d,e,r,s,"interval"))},s=function(e,r,o){var a=i(e,o),s=a.expected,d=a.remainingDelay;t.set(r,setTimeout(n,d,t,r,s,"timeout"))};addEventListener("message",(function(e){var t=e.data;try{if("clear"===t.method){var i=t.id,n=t.params,d=n.timerId,c=n.timerType;if("interval"===c)r(d),postMessage({error:null,id:i});else{if("timeout"!==c)throw new Error('The given type "'.concat(c,'" is not supported'));o(d),postMessage({error:null,id:i})}}else{if("set"!==t.method)throw new Error('The given method "'.concat(t.method,'" is not supported'));var u=t.params,l=u.delay,p=u.now,m=u.timerId,v=u.timerType;if("interval"===v)a(l,m,p);else{if("timeout"!==v)throw new Error('The given type "'.concat(v,'" is not supported'));s(l,m,p)}}}catch(e){postMessage({error:{message:e.message},id:t.id,result:null})}}))})?o.call(t,r,t,e):o)||(e.exports=i)}},t={};function r(o){var i=t[o];if(void 0!==i)return i.exports;var n=t[o]={exports:{}};return e[o](n,n.exports,r),n.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var o in t)r.o(t,o)&&!r.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{"use strict";r(472)})()})();`,n=r(e.load,i),o=function(h){return n().clearInterval(h)},s=function(h){return n().clearTimeout(h)},a=function(){var h;return (h=n()).setInterval.apply(h,arguments)},u=function(){var h;return (h=n()).setTimeout.apply(h,arguments)};t.clearInterval=o,t.clearTimeout=s,t.setInterval=a,t.setTimeout=u;});});var Np=M(Rt=>{v();m();_();var qv=Rt&&Rt.__createBinding||(Object.create?function(t,e,r,i){i===void 0&&(i=r);var n=Object.getOwnPropertyDescriptor(e,r);(!n||("get"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,i,n);}:function(t,e,r,i){i===void 0&&(i=r),t[i]=e[r];}),Dv=Rt&&Rt.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e});}:function(t,e){t.default=e;}),jv=Rt&&Rt.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.prototype.hasOwnProperty.call(t,r)&&qv(e,t,r);return Dv(e,t),e};Object.defineProperty(Rt,"__esModule",{value:!0});var Na=jv(Pi()),Mp=xp(),Lp={set:Mp.setTimeout,clear:Mp.clearTimeout},Up={set:(t,e)=>setTimeout(t,e),clear:t=>clearTimeout(t)},Fv=t=>{switch(t){case"native":return Up;case"worker":return Lp;case"auto":default:return Na.default&&!Na.isWebWorker&&!Na.isReactNativeBrowser?Lp:Up}};Rt.default=Fv;});var Da=M(Oi=>{v();m();_();var Wv=Oi&&Oi.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Oi,"__esModule",{value:!0});var $v=Wv(Np()),qa=class{constructor(e,r,i){this.keepalive=e*1e3,this.checkPing=r,this.timer=(0, $v.default)(i),this.reschedule();}clear(){this.timerId&&(this.timer.clear(this.timerId),this.timerId=null);}reschedule(){this.clear(),this.timerId=this.timer.set(()=>{this.checkPing(),this.timerId&&this.reschedule();},this.keepalive);}};Oi.default=qa;});var ns=M(Qe=>{v();m();_();var Hv=Qe&&Qe.__createBinding||(Object.create?function(t,e,r,i){i===void 0&&(i=r);var n=Object.getOwnPropertyDescriptor(e,r);(!n||("get"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,i,n);}:function(t,e,r,i){i===void 0&&(i=r),t[i]=e[r];}),Vv=Qe&&Qe.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e});}:function(t,e){t.default=e;}),Wp=Qe&&Qe.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.prototype.hasOwnProperty.call(t,r)&&Hv(e,t,r);return Vv(e,t),e},Vt=Qe&&Qe.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Qe,"__esModule",{value:!0});var zv=Vt(Gu()),ja=Vt(Nd()),Kv=Vt(Yo()),Gv=Dt(),qp=Vt(Fd()),Dp=Wp($d()),Qv=Vt(ot()),rs=Vt(Zo()),Yv=Vt(Ap()),Wa=Jr(),Jv=Ip(),Xv=Vt(Da()),jp=Wp(Pi()),Fa=globalThis.setImmediate||((...t)=>{let e=t.shift();(0, Wa.nextTick)(()=>{e(...t);});}),Fp={keepalive:60,reschedulePings:!0,protocolId:"MQTT",protocolVersion:4,reconnectPeriod:1e3,connectTimeout:30*1e3,clean:!0,resubscribe:!0,writeCache:!0,timerVariant:"auto"},is=class t extends Jv.TypedEventEmitter{static defaultId(){return `mqttjs_${Math.random().toString(16).substr(2,8)}`}constructor(e,r){super(),this.options=r||{};for(let i in Fp)typeof this.options[i]>"u"?this.options[i]=Fp[i]:this.options[i]=r[i];this.log=this.options.log||(0, Qv.default)("mqttjs:client"),this.noop=this._noop.bind(this),this.log("MqttClient :: version:",t.VERSION),jp.isWebWorker?this.log("MqttClient :: environment","webworker"):this.log("MqttClient :: environment",jp.default?"browser":"node"),this.log("MqttClient :: options.protocol",r.protocol),this.log("MqttClient :: options.protocolVersion",r.protocolVersion),this.log("MqttClient :: options.username",r.username),this.log("MqttClient :: options.keepalive",r.keepalive),this.log("MqttClient :: options.reconnectPeriod",r.reconnectPeriod),this.log("MqttClient :: options.rejectUnauthorized",r.rejectUnauthorized),this.log("MqttClient :: options.properties.topicAliasMaximum",r.properties?r.properties.topicAliasMaximum:void 0),this.options.clientId=typeof r.clientId=="string"?r.clientId:t.defaultId(),this.log("MqttClient :: clientId",this.options.clientId),this.options.customHandleAcks=r.protocolVersion===5&&r.customHandleAcks?r.customHandleAcks:(...i)=>{i[3](null,0);},this.options.writeCache||(ja.default.writeToStream.cacheNumbers=!1),this.streamBuilder=e,this.messageIdProvider=typeof this.options.messageIdProvider>"u"?new Kv.default:this.options.messageIdProvider,this.outgoingStore=r.outgoingStore||new rs.default,this.incomingStore=r.incomingStore||new rs.default,this.queueQoSZero=r.queueQoSZero===void 0?!0:r.queueQoSZero,this._resubscribeTopics={},this.messageIdToTopic={},this.pingTimer=null,this.connected=!1,this.disconnecting=!1,this.reconnecting=!1,this.queue=[],this.connackTimer=null,this.reconnectTimer=null,this._storeProcessing=!1,this._packetIdsDuringStoreProcessing={},this._storeProcessingQueue=[],this.outgoing={},this._firstConnection=!0,r.properties&&r.properties.topicAliasMaximum>0&&(r.properties.topicAliasMaximum>65535?this.log("MqttClient :: options.properties.topicAliasMaximum is out of range"):this.topicAliasRecv=new zv.default(r.properties.topicAliasMaximum)),this.on("connect",()=>{let{queue:i}=this,n=()=>{let o=i.shift();this.log("deliver :: entry %o",o);let s=null;if(!o){this._resubscribe();return}s=o.packet,this.log("deliver :: call _sendPacket for %o",s);let a=!0;s.messageId&&s.messageId!==0&&(this.messageIdProvider.register(s.messageId)||(a=!1)),a?this._sendPacket(s,u=>{o.cb&&o.cb(u),n();}):(this.log("messageId: %d has already used. The message is skipped and removed.",s.messageId),n());};this.log("connect :: sending queued packets"),n();}),this.on("close",()=>{this.log("close :: connected set to `false`"),this.connected=!1,this.log("close :: clearing connackTimer"),clearTimeout(this.connackTimer),this.log("close :: clearing ping timer"),this.pingTimer&&(this.pingTimer.clear(),this.pingTimer=null),this.topicAliasRecv&&this.topicAliasRecv.clear(),this.log("close :: calling _setupReconnect"),this._setupReconnect();}),this.options.manualConnect||(this.log("MqttClient :: setting up stream"),this.connect());}handleAuth(e,r){r();}handleMessage(e,r){r();}_nextId(){return this.messageIdProvider.allocate()}getLastMessageId(){return this.messageIdProvider.getLastAllocated()}connect(){var e;let r=new Gv.Writable,i=ja.default.parser(this.options),n=null,o=[];this.log("connect :: calling method to clear reconnect"),this._clearReconnect(),this.log("connect :: using streamBuilder provided to client to create stream"),this.stream=this.streamBuilder(this),i.on("packet",h=>{this.log("parser :: on packet push to packets array."),o.push(h);});let s=()=>{this.log("work :: getting next packet in queue");let h=o.shift();if(h)this.log("work :: packet pulled from queue"),(0, Yv.default)(this,h,a);else {this.log("work :: no packets in queue");let d=n;n=null,this.log("work :: done flag is %s",!!d),d&&d();}},a=()=>{if(o.length)(0, Wa.nextTick)(s);else {let h=n;n=null,h();}};r._write=(h,d,g)=>{n=g,this.log("writable stream :: parsing buffer"),i.parse(h),s();};let u=h=>{this.log("streamErrorHandler :: error",h.message),h.code?(this.log("streamErrorHandler :: emitting error"),this.emit("error",h)):this.noop(h);};this.log("connect :: pipe stream to writable stream"),this.stream.pipe(r),this.stream.on("error",u),this.stream.on("close",()=>{this.log("(%s)stream :: on close",this.options.clientId),this._flushVolatile(),this.log("stream: emit close to MqttClient"),this.emit("close");}),this.log("connect: sending packet `connect`");let c={cmd:"connect",protocolId:this.options.protocolId,protocolVersion:this.options.protocolVersion,clean:this.options.clean,clientId:this.options.clientId,keepalive:this.options.keepalive,username:this.options.username,password:this.options.password,properties:this.options.properties};if(this.options.will&&(c.will=Object.assign(Object.assign({},this.options.will),{payload:(e=this.options.will)===null||e===void 0?void 0:e.payload})),this.topicAliasRecv&&(c.properties||(c.properties={}),this.topicAliasRecv&&(c.properties.topicAliasMaximum=this.topicAliasRecv.max)),this._writePacket(c),i.on("error",this.emit.bind(this,"error")),this.options.properties){if(!this.options.properties.authenticationMethod&&this.options.properties.authenticationData)return this.end(()=>this.emit("error",new Error("Packet has no Authentication Method"))),this;if(this.options.properties.authenticationMethod&&this.options.authPacket&&typeof this.options.authPacket=="object"){let h=Object.assign({cmd:"auth",reasonCode:0},this.options.authPacket);this._writePacket(h);}}return this.stream.setMaxListeners(1e3),clearTimeout(this.connackTimer),this.connackTimer=setTimeout(()=>{this.log("!!connectTimeout hit!! Calling _cleanUp with force `true`"),this.emit("error",new Error("connack timeout")),this._cleanUp(!0);},this.options.connectTimeout),this}publish(e,r,i,n){this.log("publish :: message `%s` to topic `%s`",r,e);let{options:o}=this;typeof i=="function"&&(n=i,i=null),i=i||{},i=Object.assign(Object.assign({},{qos:0,retain:!1,dup:!1}),i);let{qos:a,retain:u,dup:c,properties:h,cbStorePut:d}=i;if(this._checkDisconnecting(n))return this;let g=()=>{let y=0;if((a===1||a===2)&&(y=this._nextId(),y===null))return this.log("No messageId left"),!1;let w={cmd:"publish",topic:e,payload:r,qos:a,retain:u,messageId:y,dup:c};switch(o.protocolVersion===5&&(w.properties=h),this.log("publish :: qos",a),a){case 1:case 2:this.outgoing[w.messageId]={volatile:!1,cb:n||this.noop},this.log("MqttClient:publish: packet cmd: %s",w.cmd),this._sendPacket(w,void 0,d);break;default:this.log("MqttClient:publish: packet cmd: %s",w.cmd),this._sendPacket(w,n,d);break}return !0};return (this._storeProcessing||this._storeProcessingQueue.length>0||!g())&&this._storeProcessingQueue.push({invoke:g,cbStorePut:i.cbStorePut,callback:n}),this}publishAsync(e,r,i){return new Promise((n,o)=>{this.publish(e,r,i,(s,a)=>{s?o(s):n(a);});})}subscribe(e,r,i){let n=this.options.protocolVersion;typeof r=="function"&&(i=r),i=i||this.noop;let o=!1,s=[];typeof e=="string"?(e=[e],s=e):Array.isArray(e)?s=e:typeof e=="object"&&(o=e.resubscribe,delete e.resubscribe,s=Object.keys(e));let a=Dp.validateTopics(s);if(a!==null)return Fa(i,new Error(`Invalid topic ${a}`)),this;if(this._checkDisconnecting(i))return this.log("subscribe: discconecting true"),this;let u={qos:0};n===5&&(u.nl=!1,u.rap=!1,u.rh=0),r=Object.assign(Object.assign({},u),r);let c=r.properties,h=[],d=(y,w)=>{if(w=w||r,!Object.prototype.hasOwnProperty.call(this._resubscribeTopics,y)||this._resubscribeTopics[y].qos{this.log("subscribe: array topic %s",y),d(y);}):Object.keys(e).forEach(y=>{this.log("subscribe: object topic %s, %o",y,e[y]),d(y,e[y]);}),!h.length)return i(null,[]),this;let g=()=>{let y=this._nextId();if(y===null)return this.log("No messageId left"),!1;let w={cmd:"subscribe",subscriptions:h,messageId:y};if(c&&(w.properties=c),this.options.resubscribe){this.log("subscribe :: resubscribe true");let E=[];h.forEach(S=>{if(this.options.reconnectPeriod>0){let I={qos:S.qos};n===5&&(I.nl=S.nl||!1,I.rap=S.rap||!1,I.rh=S.rh||0,I.properties=S.properties),this._resubscribeTopics[S.topic]=I,E.push(S.topic);}}),this.messageIdToTopic[w.messageId]=E;}return this.outgoing[w.messageId]={volatile:!0,cb(E,S){if(!E){let{granted:I}=S;for(let C=0;C0||!g())&&this._storeProcessingQueue.push({invoke:g,callback:i}),this}subscribeAsync(e,r){return new Promise((i,n)=>{this.subscribe(e,r,(o,s)=>{o?n(o):i(s);});})}unsubscribe(e,r,i){typeof e=="string"&&(e=[e]),typeof r=="function"&&(i=r),i=i||this.noop;let n=Dp.validateTopics(e);if(n!==null)return Fa(i,new Error(`Invalid topic ${n}`)),this;if(this._checkDisconnecting(i))return this;let o=()=>{let s=this._nextId();if(s===null)return this.log("No messageId left"),!1;let a={cmd:"unsubscribe",messageId:s,unsubscriptions:[]};return typeof e=="string"?a.unsubscriptions=[e]:Array.isArray(e)&&(a.unsubscriptions=e),this.options.resubscribe&&a.unsubscriptions.forEach(u=>{delete this._resubscribeTopics[u];}),typeof r=="object"&&r.properties&&(a.properties=r.properties),this.outgoing[a.messageId]={volatile:!0,cb:i},this.log("unsubscribe: call _sendPacket"),this._sendPacket(a),!0};return (this._storeProcessing||this._storeProcessingQueue.length>0||!o())&&this._storeProcessingQueue.push({invoke:o,callback:i}),this}unsubscribeAsync(e,r){return new Promise((i,n)=>{this.unsubscribe(e,r,(o,s)=>{o?n(o):i(s);});})}end(e,r,i){this.log("end :: (%s)",this.options.clientId),(e==null||typeof e!="boolean")&&(i=i||r,r=e,e=!1),typeof r!="object"&&(i=i||r,r=null),this.log("end :: cb? %s",!!i),(!i||typeof i!="function")&&(i=this.noop);let n=()=>{this.log("end :: closeStores: closing incoming and outgoing stores"),this.disconnected=!0,this.incomingStore.close(s=>{this.outgoingStore.close(a=>{if(this.log("end :: closeStores: emitting end"),this.emit("end"),i){let u=s||a;this.log("end :: closeStores: invoking callback with args"),i(u);}});}),this._deferredReconnect&&this._deferredReconnect();},o=()=>{this.log("end :: (%s) :: finish :: calling _cleanUp with force %s",this.options.clientId,e),this._cleanUp(e,()=>{this.log("end :: finish :: calling process.nextTick on closeStores"),(0, Wa.nextTick)(n);},r);};return this.disconnecting?(i(),this):(this._clearReconnect(),this.disconnecting=!0,!e&&Object.keys(this.outgoing).length>0?(this.log("end :: (%s) :: calling finish in 10ms once outgoing is empty",this.options.clientId),this.once("outgoingEmpty",setTimeout.bind(null,o,10))):(this.log("end :: (%s) :: immediately calling finish",this.options.clientId),o()),this)}endAsync(e,r){return new Promise((i,n)=>{this.end(e,r,o=>{o?n(o):i();});})}removeOutgoingMessage(e){if(this.outgoing[e]){let{cb:r}=this.outgoing[e];this._removeOutgoingAndStoreMessage(e,()=>{r(new Error("Message removed"));});}return this}reconnect(e){this.log("client reconnect");let r=()=>{e?(this.options.incomingStore=e.incomingStore,this.options.outgoingStore=e.outgoingStore):(this.options.incomingStore=null,this.options.outgoingStore=null),this.incomingStore=this.options.incomingStore||new rs.default,this.outgoingStore=this.options.outgoingStore||new rs.default,this.disconnecting=!1,this.disconnected=!1,this._deferredReconnect=null,this._reconnect();};return this.disconnecting&&!this.disconnected?this._deferredReconnect=r:r(),this}_flushVolatile(){this.outgoing&&(this.log("_flushVolatile :: deleting volatile messages from the queue and setting their callbacks as error function"),Object.keys(this.outgoing).forEach(e=>{this.outgoing[e].volatile&&typeof this.outgoing[e].cb=="function"&&(this.outgoing[e].cb(new Error("Connection closed")),delete this.outgoing[e]);}));}_flush(){this.outgoing&&(this.log("_flush: queue exists? %b",!!this.outgoing),Object.keys(this.outgoing).forEach(e=>{typeof this.outgoing[e].cb=="function"&&(this.outgoing[e].cb(new Error("Connection closed")),delete this.outgoing[e]);}));}_removeTopicAliasAndRecoverTopicName(e){let r;e.properties&&(r=e.properties.topicAlias);let i=e.topic.toString();if(this.log("_removeTopicAliasAndRecoverTopicName :: alias %d, topic %o",r,i),i.length===0){if(typeof r>"u")return new Error("Unregistered Topic Alias");if(i=this.topicAliasSend.getTopicByAlias(r),typeof i>"u")return new Error("Unregistered Topic Alias");e.topic=i;}r&&delete e.properties.topicAlias;}_checkDisconnecting(e){return this.disconnecting&&(e&&e!==this.noop?e(new Error("client disconnecting")):this.emit("error",new Error("client disconnecting"))),this.disconnecting}_reconnect(){this.log("_reconnect: emitting reconnect to client"),this.emit("reconnect"),this.connected?(this.end(()=>{this.connect();}),this.log("client already connected. disconnecting first.")):(this.log("_reconnect: calling connect"),this.connect());}_setupReconnect(){!this.disconnecting&&!this.reconnectTimer&&this.options.reconnectPeriod>0?(this.reconnecting||(this.log("_setupReconnect :: emit `offline` state"),this.emit("offline"),this.log("_setupReconnect :: set `reconnecting` to `true`"),this.reconnecting=!0),this.log("_setupReconnect :: setting reconnectTimer for %d ms",this.options.reconnectPeriod),this.reconnectTimer=setInterval(()=>{this.log("reconnectTimer :: reconnect triggered!"),this._reconnect();},this.options.reconnectPeriod)):this.log("_setupReconnect :: doing nothing...");}_clearReconnect(){this.log("_clearReconnect : clearing reconnect timer"),this.reconnectTimer&&(clearInterval(this.reconnectTimer),this.reconnectTimer=null);}_cleanUp(e,r,i={}){if(r&&(this.log("_cleanUp :: done callback provided for on stream close"),this.stream.on("close",r)),this.log("_cleanUp :: forced? %s",e),e)this.options.reconnectPeriod===0&&this.options.clean&&this._flush(),this.log("_cleanUp :: (%s) :: destroying stream",this.options.clientId),this.stream.destroy();else {let n=Object.assign({cmd:"disconnect"},i);this.log("_cleanUp :: (%s) :: call _sendPacket with disconnect packet",this.options.clientId),this._sendPacket(n,()=>{this.log("_cleanUp :: (%s) :: destroying stream",this.options.clientId),Fa(()=>{this.stream.end(()=>{this.log("_cleanUp :: (%s) :: stream destroyed",this.options.clientId);});});});}!this.disconnecting&&!this.reconnecting&&(this.log("_cleanUp :: client not disconnecting/reconnecting. Clearing and resetting reconnect."),this._clearReconnect(),this._setupReconnect()),this.pingTimer&&(this.log("_cleanUp :: clearing pingTimer"),this.pingTimer.clear(),this.pingTimer=null),r&&!this.connected&&(this.log("_cleanUp :: (%s) :: removing stream `done` callback `close` listener",this.options.clientId),this.stream.removeListener("close",r),r());}_storeAndSend(e,r,i){this.log("storeAndSend :: store packet with cmd %s to outgoingStore",e.cmd);let n=e,o;if(n.cmd==="publish"&&(n=(0, qp.default)(e),o=this._removeTopicAliasAndRecoverTopicName(n),o))return r&&r(o);this.outgoingStore.put(n,s=>{if(s)return r&&r(s);i(),this._writePacket(e,r);});}_applyTopicAlias(e){if(this.options.protocolVersion===5&&e.cmd==="publish"){let r;e.properties&&(r=e.properties.topicAlias);let i=e.topic.toString();if(this.topicAliasSend)if(r){if(i.length!==0&&(this.log("applyTopicAlias :: register topic: %s - alias: %d",i,r),!this.topicAliasSend.put(i,r)))return this.log("applyTopicAlias :: error out of range. topic: %s - alias: %d",i,r),new Error("Sending Topic Alias out of range")}else i.length!==0&&(this.options.autoAssignTopicAlias?(r=this.topicAliasSend.getAliasByTopic(i),r?(e.topic="",e.properties=Object.assign(Object.assign({},e.properties),{topicAlias:r}),this.log("applyTopicAlias :: auto assign(use) topic: %s - alias: %d",i,r)):(r=this.topicAliasSend.getLruAlias(),this.topicAliasSend.put(i,r),e.properties=Object.assign(Object.assign({},e.properties),{topicAlias:r}),this.log("applyTopicAlias :: auto assign topic: %s - alias: %d",i,r))):this.options.autoUseTopicAlias&&(r=this.topicAliasSend.getAliasByTopic(i),r&&(e.topic="",e.properties=Object.assign(Object.assign({},e.properties),{topicAlias:r}),this.log("applyTopicAlias :: auto use topic: %s - alias: %d",i,r))));else if(r)return this.log("applyTopicAlias :: error out of range. topic: %s - alias: %d",i,r),new Error("Sending Topic Alias out of range")}}_noop(e){this.log("noop ::",e);}_writePacket(e,r){this.log("_writePacket :: packet: %O",e),this.log("_writePacket :: emitting `packetsend`"),this.emit("packetsend",e),this._shiftPingInterval(),this.log("_writePacket :: writing to stream");let i=ja.default.writeToStream(e,this.stream,this.options);this.log("_writePacket :: writeToStream result %s",i),!i&&r&&r!==this.noop?(this.log("_writePacket :: handle events on `drain` once through callback."),this.stream.once("drain",r)):r&&(this.log("_writePacket :: invoking cb"),r());}_sendPacket(e,r,i,n){this.log("_sendPacket :: (%s) :: start",this.options.clientId),i=i||this.noop,r=r||this.noop;let o=this._applyTopicAlias(e);if(o){r(o);return}if(!this.connected){if(e.cmd==="auth"){this._writePacket(e,r);return}this.log("_sendPacket :: client not connected. Storing packet offline."),this._storePacket(e,r,i);return}if(n){this._writePacket(e,r);return}switch(e.cmd){case"publish":break;case"pubrel":this._storeAndSend(e,r,i);return;default:this._writePacket(e,r);return}switch(e.qos){case 2:case 1:this._storeAndSend(e,r,i);break;case 0:default:this._writePacket(e,r);break}this.log("_sendPacket :: (%s) :: end",this.options.clientId);}_storePacket(e,r,i){this.log("_storePacket :: packet: %o",e),this.log("_storePacket :: cb? %s",!!r),i=i||this.noop;let n=e;if(n.cmd==="publish"){n=(0, qp.default)(e);let s=this._removeTopicAliasAndRecoverTopicName(n);if(s)return r&&r(s)}let o=n.qos||0;o===0&&this.queueQoSZero||n.cmd!=="publish"?this.queue.push({packet:n,cb:r}):o>0?(r=this.outgoing[n.messageId]?this.outgoing[n.messageId].cb:null,this.outgoingStore.put(n,s=>{if(s)return r&&r(s);i();})):r&&r(new Error("No connection to broker"));}_setupPingTimer(){this.log("_setupPingTimer :: keepalive %d (seconds)",this.options.keepalive),!this.pingTimer&&this.options.keepalive&&(this.pingResp=!0,this.pingTimer=new Xv.default(this.options.keepalive,()=>{this._checkPing();},this.options.timerVariant));}_shiftPingInterval(){this.pingTimer&&this.options.keepalive&&this.options.reschedulePings&&this.pingTimer.reschedule();}_checkPing(){this.log("_checkPing :: checking ping..."),this.pingResp?(this.log("_checkPing :: ping response received. Clearing flag and sending `pingreq`"),this.pingResp=!1,this._sendPacket({cmd:"pingreq"})):(this.emit("error",new Error("Keepalive timeout")),this.log("_checkPing :: calling _cleanUp with force true"),this._cleanUp(!0));}_resubscribe(){this.log("_resubscribe");let e=Object.keys(this._resubscribeTopics);if(!this._firstConnection&&(this.options.clean||this.options.protocolVersion>=4&&!this.connackPacket.sessionPresent)&&e.length>0)if(this.options.resubscribe)if(this.options.protocolVersion===5){this.log("_resubscribe: protocolVersion 5");for(let r=0;r{let i=this.outgoingStore.createStream(),n=()=>{i.destroy(),i=null,this._flushStoreProcessingQueue(),o();},o=()=>{this._storeProcessing=!1,this._packetIdsDuringStoreProcessing={};};this.once("close",n),i.on("error",a=>{o(),this._flushStoreProcessingQueue(),this.removeListener("close",n),this.emit("error",a);});let s=()=>{if(!i)return;let a=i.read(1),u;if(!a){i.once("readable",s);return}if(this._storeProcessing=!0,this._packetIdsDuringStoreProcessing[a.messageId]){s();return}!this.disconnecting&&!this.reconnectTimer?(u=this.outgoing[a.messageId]?this.outgoing[a.messageId].cb:null,this.outgoing[a.messageId]={volatile:!1,cb(c,h){u&&u(c,h),s();}},this._packetIdsDuringStoreProcessing[a.messageId]=!0,this.messageIdProvider.register(a.messageId)?this._sendPacket(a,void 0,void 0,!0):this.log("messageId: %d has already used.",a.messageId)):i.destroy&&i.destroy();};i.on("end",()=>{let a=!0;for(let u in this._packetIdsDuringStoreProcessing)if(!this._packetIdsDuringStoreProcessing[u]){a=!1;break}this.removeListener("close",n),a?(o(),this._invokeAllStoreProcessingQueue(),this.emit("connect",e)):r();}),s();};r();}_invokeStoreProcessingQueue(){if(!this._storeProcessing&&this._storeProcessingQueue.length>0){let e=this._storeProcessingQueue[0];if(e&&e.invoke())return this._storeProcessingQueue.shift(),!0}return !1}_invokeAllStoreProcessingQueue(){for(;this._invokeStoreProcessingQueue(););}_flushStoreProcessingQueue(){for(let e of this._storeProcessingQueue)e.cbStorePut&&e.cbStorePut(new Error("Connection closed")),e.callback&&e.callback(new Error("Connection closed"));this._storeProcessingQueue.splice(0);}_removeOutgoingAndStoreMessage(e,r){delete this.outgoing[e],this.outgoingStore.del({messageId:e},(i,n)=>{r(i,n),this.messageIdProvider.deallocate(e),this._invokeStoreProcessingQueue();});}};is.VERSION="5.5.2";Qe.default=is;});var $p=M(Ha=>{v();m();_();Object.defineProperty(Ha,"__esModule",{value:!0});var Zv=xa(),$a=class{constructor(){this.numberAllocator=new Zv.NumberAllocator(1,65535);}allocate(){return this.lastId=this.numberAllocator.alloc(),this.lastId}getLastAllocated(){return this.lastId}register(e){return this.numberAllocator.use(e)}deallocate(e){this.numberAllocator.free(e);}clear(){this.numberAllocator.clear();}};Ha.default=$a;});function Ir(t){throw new RangeError(iE[t])}function Hp(t,e){let r=t.split("@"),i="";r.length>1&&(i=r[0]+"@",t=r[1]);let n=function(o,s){let a=[],u=o.length;for(;u--;)a[u]=s(o[u]);return a}((t=t.replace(rE,".")).split("."),e).join(".");return i+n}function Gp(t){let e=[],r=0,i=t.length;for(;r=55296&&n<=56319&&r{v();m();_();eE=/^xn--/,tE=/[^\0-\x7E]/,rE=/[\x2E\u3002\uFF0E\uFF61]/g,iE={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},ht=Math.floor,Va=String.fromCharCode;Vp=function(t,e){return t+22+75*(t<26)-((e!=0)<<5)},Qp=function(t,e,r){let i=0;for(t=r?ht(t/700):t>>1,t+=ht(t/e);t>455;i+=36)t=ht(t/35);return ht(i+36*t/(t+38))},zp=function(t){let e=[],r=t.length,i=0,n=128,o=72,s=t.lastIndexOf("-");s<0&&(s=0);for(let u=0;u=128&&Ir("not-basic"),e.push(t.charCodeAt(u));for(let u=s>0?s+1:0;u=r&&Ir("invalid-input");let y=(a=t.charCodeAt(u++))-48<10?a-22:a-65<26?a-65:a-97<26?a-97:36;(y>=36||y>ht((2147483647-i)/d))&&Ir("overflow"),i+=y*d;let w=g<=o?1:g>=o+26?26:g-o;if(yht(2147483647/E)&&Ir("overflow"),d*=E;}let h=e.length+1;o=Qp(i-c,h,c==0),ht(i/h)>2147483647-n&&Ir("overflow"),n+=ht(i/h),i%=h,e.splice(i++,0,n);}var a;return String.fromCodePoint(...e)},Kp=function(t){let e=[],r=(t=Gp(t)).length,i=128,n=0,o=72;for(let u of t)u<128&&e.push(Va(u));let s=e.length,a=s;for(s&&e.push("-");a=i&&hht((2147483647-n)/c)&&Ir("overflow"),n+=(u-i)*c,i=u;for(let h of t)if(h2147483647&&Ir("overflow"),h==i){let d=n;for(let g=36;;g+=36){let y=g<=o?1:g>=o+26?26:g-o;if(dString.fromCodePoint(...t)},decode:zp,encode:Kp,toASCII:function(t){return Hp(t,function(e){return tE.test(e)?"xn--"+Kp(e):e})},toUnicode:function(t){return Hp(t,function(e){return eE.test(e)?zp(e.slice(4).toLowerCase()):e})}};zt.decode;zt.encode;zt.toASCII;zt.toUnicode;zt.ucs2;zt.version;});function nE(t,e){return Object.prototype.hasOwnProperty.call(t,e)}var sE,ki,oE,dt,Jp=we(()=>{v();m();_();sE=function(t,e,r,i){e=e||"&",r=r||"=";var n={};if(typeof t!="string"||t.length===0)return n;var o=/\+/g;t=t.split(e);var s=1e3;i&&typeof i.maxKeys=="number"&&(s=i.maxKeys);var a=t.length;s>0&&a>s&&(a=s);for(var u=0;u=0?(c=y.substr(0,w),h=y.substr(w+1)):(c=y,h=""),d=decodeURIComponent(c),g=decodeURIComponent(h),nE(n,d)?Array.isArray(n[d])?n[d].push(g):n[d]=[n[d],g]:n[d]=g;}return n},ki=function(t){switch(typeof t){case"string":return t;case"boolean":return t?"true":"false";case"number":return isFinite(t)?t:"";default:return ""}},oE=function(t,e,r,i){return e=e||"&",r=r||"=",t===null&&(t=void 0),typeof t=="object"?Object.keys(t).map(function(n){var o=encodeURIComponent(ki(n))+r;return Array.isArray(t[n])?t[n].map(function(s){return o+encodeURIComponent(ki(s))}).join(e):o+encodeURIComponent(ki(t[n]))}).join(e):i?encodeURIComponent(ki(i))+r+encodeURIComponent(ki(t)):""},dt={};dt.decode=dt.parse=sE,dt.encode=dt.stringify=oE;dt.decode;dt.encode;dt.parse;dt.stringify;});function za(){throw new Error("setTimeout has not been defined")}function Ka(){throw new Error("clearTimeout has not been defined")}function eg(t){if(Bt===setTimeout)return setTimeout(t,0);if((Bt===za||!Bt)&&setTimeout)return Bt=setTimeout,setTimeout(t,0);try{return Bt(t,0)}catch{try{return Bt.call(null,t,0)}catch{return Bt.call(this||ii,t,0)}}}function aE(){ri&&Tr&&(ri=!1,Tr.length?Ot=Tr.concat(Ot):ss=-1,Ot.length&&tg());}function tg(){if(!ri){var t=eg(aE);ri=!0;for(var e=Ot.length;e;){for(Tr=Ot,Ot=[];++ss{v();m();_();ii=typeof globalThis<"u"?globalThis:typeof self<"u"?self:__webpack_require__.g,fe=Zp={};(function(){try{Bt=typeof setTimeout=="function"?setTimeout:za;}catch{Bt=za;}try{Pt=typeof clearTimeout=="function"?clearTimeout:Ka;}catch{Pt=Ka;}})();Ot=[],ri=!1,ss=-1;fe.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r1)for(var I=1;I{v();m();_();Ga={},ig=!1,ni=typeof globalThis<"u"?globalThis:typeof self<"u"?self:__webpack_require__.g;re=lE();re.platform="browser";re.addListener;re.argv;re.binding;re.browser;re.chdir;re.cwd;re.emit;re.env;re.listeners;re.nextTick;re.off;re.on;re.once;re.prependListener;re.prependOnceListener;re.removeAllListeners;re.removeListener;re.title;re.umask;re.version;re.versions;});function uE(){if(ng)return Ya;ng=!0;var t=re;function e(o){if(typeof o!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(o))}function r(o,s){for(var a="",u=0,c=-1,h=0,d,g=0;g<=o.length;++g){if(g2){var y=a.lastIndexOf("/");if(y!==a.length-1){y===-1?(a="",u=0):(a=a.slice(0,y),u=a.length-1-a.lastIndexOf("/")),c=g,h=0;continue}}else if(a.length===2||a.length===1){a="",u=0,c=g,h=0;continue}}s&&(a.length>0?a+="/..":a="..",u=2);}else a.length>0?a+="/"+o.slice(c+1,g):a=o.slice(c+1,g),u=g-c-1;c=g,h=0;}else d===46&&h!==-1?++h:h=-1;}return a}function i(o,s){var a=s.dir||s.root,u=s.base||(s.name||"")+(s.ext||"");return a?a===s.root?a+u:a+o+u:u}var n={resolve:function(){for(var s="",a=!1,u,c=arguments.length-1;c>=-1&&!a;c--){var h;c>=0?h=arguments[c]:(u===void 0&&(u=t.cwd()),h=u),e(h),h.length!==0&&(s=h+"/"+s,a=h.charCodeAt(0)===47);}return s=r(s,!a),a?s.length>0?"/"+s:"/":s.length>0?s:"."},normalize:function(s){if(e(s),s.length===0)return ".";var a=s.charCodeAt(0)===47,u=s.charCodeAt(s.length-1)===47;return s=r(s,!a),s.length===0&&!a&&(s="."),s.length>0&&u&&(s+="/"),a?"/"+s:s},isAbsolute:function(s){return e(s),s.length>0&&s.charCodeAt(0)===47},join:function(){if(arguments.length===0)return ".";for(var s,a=0;a0&&(s===void 0?s=u:s+="/"+u);}return s===void 0?".":n.normalize(s)},relative:function(s,a){if(e(s),e(a),s===a||(s=n.resolve(s),a=n.resolve(a),s===a))return "";for(var u=1;uw){if(a.charCodeAt(d+S)===47)return a.slice(d+S+1);if(S===0)return a.slice(d+S)}else h>w&&(s.charCodeAt(u+S)===47?E=S:S===0&&(E=0));break}var I=s.charCodeAt(u+S),C=a.charCodeAt(d+S);if(I!==C)break;I===47&&(E=S);}var R="";for(S=u+E+1;S<=c;++S)(S===c||s.charCodeAt(S)===47)&&(R.length===0?R+="..":R+="/..");return R.length>0?R+a.slice(d+E):(d+=E,a.charCodeAt(d)===47&&++d,a.slice(d))},_makeLong:function(s){return s},dirname:function(s){if(e(s),s.length===0)return ".";for(var a=s.charCodeAt(0),u=a===47,c=-1,h=!0,d=s.length-1;d>=1;--d)if(a=s.charCodeAt(d),a===47){if(!h){c=d;break}}else h=!1;return c===-1?u?"/":".":u&&c===1?"//":s.slice(0,c)},basename:function(s,a){if(a!==void 0&&typeof a!="string")throw new TypeError('"ext" argument must be a string');e(s);var u=0,c=-1,h=!0,d;if(a!==void 0&&a.length>0&&a.length<=s.length){if(a.length===s.length&&a===s)return "";var g=a.length-1,y=-1;for(d=s.length-1;d>=0;--d){var w=s.charCodeAt(d);if(w===47){if(!h){u=d+1;break}}else y===-1&&(h=!1,y=d+1),g>=0&&(w===a.charCodeAt(g)?--g===-1&&(c=d):(g=-1,c=y));}return u===c?c=y:c===-1&&(c=s.length),s.slice(u,c)}else {for(d=s.length-1;d>=0;--d)if(s.charCodeAt(d)===47){if(!h){u=d+1;break}}else c===-1&&(h=!1,c=d+1);return c===-1?"":s.slice(u,c)}},extname:function(s){e(s);for(var a=-1,u=0,c=-1,h=!0,d=0,g=s.length-1;g>=0;--g){var y=s.charCodeAt(g);if(y===47){if(!h){u=g+1;break}continue}c===-1&&(h=!1,c=g+1),y===46?a===-1?a=g:d!==1&&(d=1):a!==-1&&(d=-1);}return a===-1||c===-1||d===0||d===1&&a===c-1&&a===u+1?"":s.slice(a,c)},format:function(s){if(s===null||typeof s!="object")throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof s);return i("/",s)},parse:function(s){e(s);var a={root:"",dir:"",base:"",ext:"",name:""};if(s.length===0)return a;var u=s.charCodeAt(0),c=u===47,h;c?(a.root="/",h=1):h=0;for(var d=-1,g=0,y=-1,w=!0,E=s.length-1,S=0;E>=h;--E){if(u=s.charCodeAt(E),u===47){if(!w){g=E+1;break}continue}y===-1&&(w=!1,y=E+1),u===46?d===-1?d=E:S!==1&&(S=1):d!==-1&&(S=-1);}return d===-1||y===-1||S===0||S===1&&d===y-1&&d===g+1?y!==-1&&(g===0&&c?a.base=a.name=s.slice(1,y):a.base=a.name=s.slice(g,y)):(g===0&&c?(a.name=s.slice(1,d),a.base=s.slice(1,y)):(a.name=s.slice(g,d),a.base=s.slice(g,y)),a.ext=s.slice(d,y)),g>0?a.dir=s.slice(0,g-1):c&&(a.dir="/"),a},sep:"/",delimiter:":",win32:null,posix:null};return n.posix=n,Ya=n,Ya}var Ya,ng,Ja,sg=we(()=>{v();m();_();Qa();Ya={},ng=!1;Ja=uE();});var dg={};Qt(dg,{URL:()=>DE,Url:()=>ME,default:()=>Z,fileURLToPath:()=>cg,format:()=>LE,parse:()=>qE,pathToFileURL:()=>hg,resolve:()=>UE,resolveObject:()=>NE});function Fe(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null;}function xi(t,e,r){if(t&&pt.isObject(t)&&t instanceof Fe)return t;var i=new Fe;return i.parse(t,e,r),i}function bE(){if(ug)return el;ug=!0;var t=ne;function e(o){if(typeof o!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(o))}function r(o,s){for(var a="",u=0,c=-1,h=0,d,g=0;g<=o.length;++g){if(g2){var y=a.lastIndexOf("/");if(y!==a.length-1){y===-1?(a="",u=0):(a=a.slice(0,y),u=a.length-1-a.lastIndexOf("/")),c=g,h=0;continue}}else if(a.length===2||a.length===1){a="",u=0,c=g,h=0;continue}}s&&(a.length>0?a+="/..":a="..",u=2);}else a.length>0?a+="/"+o.slice(c+1,g):a=o.slice(c+1,g),u=g-c-1;c=g,h=0;}else d===46&&h!==-1?++h:h=-1;}return a}function i(o,s){var a=s.dir||s.root,u=s.base||(s.name||"")+(s.ext||"");return a?a===s.root?a+u:a+o+u:u}var n={resolve:function(){for(var s="",a=!1,u,c=arguments.length-1;c>=-1&&!a;c--){var h;c>=0?h=arguments[c]:(u===void 0&&(u=t.cwd()),h=u),e(h),h.length!==0&&(s=h+"/"+s,a=h.charCodeAt(0)===47);}return s=r(s,!a),a?s.length>0?"/"+s:"/":s.length>0?s:"."},normalize:function(s){if(e(s),s.length===0)return ".";var a=s.charCodeAt(0)===47,u=s.charCodeAt(s.length-1)===47;return s=r(s,!a),s.length===0&&!a&&(s="."),s.length>0&&u&&(s+="/"),a?"/"+s:s},isAbsolute:function(s){return e(s),s.length>0&&s.charCodeAt(0)===47},join:function(){if(arguments.length===0)return ".";for(var s,a=0;a0&&(s===void 0?s=u:s+="/"+u);}return s===void 0?".":n.normalize(s)},relative:function(s,a){if(e(s),e(a),s===a||(s=n.resolve(s),a=n.resolve(a),s===a))return "";for(var u=1;uw){if(a.charCodeAt(d+S)===47)return a.slice(d+S+1);if(S===0)return a.slice(d+S)}else h>w&&(s.charCodeAt(u+S)===47?E=S:S===0&&(E=0));break}var I=s.charCodeAt(u+S),C=a.charCodeAt(d+S);if(I!==C)break;I===47&&(E=S);}var R="";for(S=u+E+1;S<=c;++S)(S===c||s.charCodeAt(S)===47)&&(R.length===0?R+="..":R+="/..");return R.length>0?R+a.slice(d+E):(d+=E,a.charCodeAt(d)===47&&++d,a.slice(d))},_makeLong:function(s){return s},dirname:function(s){if(e(s),s.length===0)return ".";for(var a=s.charCodeAt(0),u=a===47,c=-1,h=!0,d=s.length-1;d>=1;--d)if(a=s.charCodeAt(d),a===47){if(!h){c=d;break}}else h=!1;return c===-1?u?"/":".":u&&c===1?"//":s.slice(0,c)},basename:function(s,a){if(a!==void 0&&typeof a!="string")throw new TypeError('"ext" argument must be a string');e(s);var u=0,c=-1,h=!0,d;if(a!==void 0&&a.length>0&&a.length<=s.length){if(a.length===s.length&&a===s)return "";var g=a.length-1,y=-1;for(d=s.length-1;d>=0;--d){var w=s.charCodeAt(d);if(w===47){if(!h){u=d+1;break}}else y===-1&&(h=!1,y=d+1),g>=0&&(w===a.charCodeAt(g)?--g===-1&&(c=d):(g=-1,c=y));}return u===c?c=y:c===-1&&(c=s.length),s.slice(u,c)}else {for(d=s.length-1;d>=0;--d)if(s.charCodeAt(d)===47){if(!h){u=d+1;break}}else c===-1&&(h=!1,c=d+1);return c===-1?"":s.slice(u,c)}},extname:function(s){e(s);for(var a=-1,u=0,c=-1,h=!0,d=0,g=s.length-1;g>=0;--g){var y=s.charCodeAt(g);if(y===47){if(!h){u=g+1;break}continue}c===-1&&(h=!1,c=g+1),y===46?a===-1?a=g:d!==1&&(d=1):a!==-1&&(d=-1);}return a===-1||c===-1||d===0||d===1&&a===c-1&&a===u+1?"":s.slice(a,c)},format:function(s){if(s===null||typeof s!="object")throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof s);return i("/",s)},parse:function(s){e(s);var a={root:"",dir:"",base:"",ext:"",name:""};if(s.length===0)return a;var u=s.charCodeAt(0),c=u===47,h;c?(a.root="/",h=1):h=0;for(var d=-1,g=0,y=-1,w=!0,E=s.length-1,S=0;E>=h;--E){if(u=s.charCodeAt(E),u===47){if(!w){g=E+1;break}continue}y===-1&&(w=!1,y=E+1),u===46?d===-1?d=E:S!==1&&(S=1):d!==-1&&(S=-1);}return d===-1||y===-1||S===0||S===1&&d===y-1&&d===g+1?y!==-1&&(g===0&&c?a.base=a.name=s.slice(1,y):a.base=a.name=s.slice(g,y)):(g===0&&c?(a.name=s.slice(1,d),a.base=s.slice(1,y)):(a.name=s.slice(g,d),a.base=s.slice(g,y)),a.ext=s.slice(d,y)),g>0?a.dir=s.slice(0,g-1):c&&(a.dir="/"),a},sep:"/",delimiter:":",win32:null,posix:null};return n.posix=n,el=n,el}function BE(t){if(typeof t=="string")t=new URL(t);else if(!(t instanceof URL))throw new Deno.errors.InvalidData("invalid argument path , must be a string or URL");if(t.protocol!=="file:")throw new Deno.errors.InvalidData("invalid url scheme");return rl?PE(t):OE(t)}function PE(t){let e=t.hostname,r=t.pathname;for(let i=0;iEE||n!==":")throw new Deno.errors.InvalidData("file url path must be absolute");return r.slice(1)}}function OE(t){if(t.hostname!=="")throw new Deno.errors.InvalidData("invalid file url hostname");let e=t.pathname;for(let r=0;r$E||n!==":")throw new Deno.errors.InvalidData("file url path must be absolute");return r.slice(1)}}function JE(t){if(t.hostname!=="")throw new Deno.errors.InvalidData("invalid file url hostname");let e=t.pathname;for(let r=0;r{v();m();_();Yp();Jp();rg();sg();Qa();Z={},fE=zt,pt={isString:function(t){return typeof t=="string"},isObject:function(t){return typeof t=="object"&&t!==null},isNull:function(t){return t===null},isNullOrUndefined:function(t){return t==null}};Z.parse=xi,Z.resolve=function(t,e){return xi(t,!1,!0).resolve(e)},Z.resolveObject=function(t,e){return t?xi(t,!1,!0).resolveObject(e):e},Z.format=function(t){return pt.isString(t)&&(t=xi(t)),t instanceof Fe?t.format():Fe.prototype.format.call(t)},Z.Url=Fe;cE=/^([a-z0-9.+-]+:)/i,hE=/:[0-9]*$/,dE=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,pE=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r",` -`," "]),tl=["'"].concat(pE),og=["%","/","?",";","#"].concat(tl),ag=["/","?","#"],lg=/^[+a-z0-9A-Z_-]{0,63}$/,gE=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,yE={javascript:!0,"javascript:":!0},Xa={javascript:!0,"javascript:":!0},si={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},Za=dt;Fe.prototype.parse=function(t,e,r){if(!pt.isString(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var i=t.indexOf("?"),n=i!==-1&&i127?U+="x":U+=R[N];if(!U.match(lg)){var K=I.slice(0,w),z=I.slice(w+1),Q=R.match(gE);Q&&(K.push(Q[1]),z.unshift(Q[2])),z.length&&(s="/"+z.join(".")+s),this.hostname=K.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),S||(this.hostname=fE.toASCII(this.hostname));var de=this.port?":"+this.port:"",Gt=this.hostname||"";this.host=Gt+de,this.href+=this.host,S&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),s[0]!=="/"&&(s="/"+s));}if(!yE[c])for(w=0,C=tl.length;w0)&&r.host.split("@"))&&(r.auth=Q.shift(),r.host=r.hostname=Q.shift())),r.search=t.search,r.query=t.query,pt.isNull(r.pathname)&&pt.isNull(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r;if(!R.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var N=R.slice(-1)[0],W=(r.host||t.host||R.length>1)&&(N==="."||N==="..")||N==="",K=0,z=R.length;z>=0;z--)(N=R[z])==="."?R.splice(z,1):N===".."?(R.splice(z,1),K++):K&&(R.splice(z,1),K--);if(!I&&!C)for(;K--;K)R.unshift("..");!I||R[0]===""||R[0]&&R[0].charAt(0)==="/"||R.unshift(""),W&&R.join("/").substr(-1)!=="/"&&R.push("");var Q,de=R[0]===""||R[0]&&R[0].charAt(0)==="/";return U&&(r.hostname=r.host=de?"":R.length?R.shift():"",(Q=!!(r.host&&r.host.indexOf("@")>0)&&r.host.split("@"))&&(r.auth=Q.shift(),r.host=r.hostname=Q.shift())),(I=I||r.host&&R.length)&&!de&&R.unshift(""),R.length?r.pathname=R.join("/"):(r.pathname=null,r.path=null),pt.isNull(r.pathname)&&pt.isNull(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=t.auth||r.auth,r.slashes=r.slashes||t.slashes,r.href=r.format(),r},Fe.prototype.parseHost=function(){var t=this.host,e=hE.exec(t);e&&((e=e[0])!==":"&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t);};Z.Url;Z.format;Z.resolve;Z.resolveObject;el={},ug=!1;fg=bE(),wE=typeof Deno<"u"?Deno.build.os==="windows"?"win32":Deno.build.os:void 0;Z.URL=typeof URL<"u"?URL:null;Z.pathToFileURL=kE;Z.fileURLToPath=BE;Z.Url;Z.format;Z.resolve;Z.resolveObject;Z.URL;_E=92,mE=47,vE=97,EE=122,rl=wE==="win32",SE=/\//g,AE=/%/g,IE=/\\/g,TE=/\n/g,RE=/\r/g,CE=/\t/g;xE=typeof Deno<"u"?Deno.build.os==="windows"?"win32":Deno.build.os:void 0;Z.URL=typeof URL<"u"?URL:null;Z.pathToFileURL=hg;Z.fileURLToPath=cg;ME=Z.Url,LE=Z.format,UE=Z.resolve,NE=Z.resolveObject,qE=Z.parse,DE=Z.URL,jE=92,FE=47,WE=97,$E=122,il=xE==="win32",HE=/\//g,VE=/%/g,zE=/\\/g,KE=/\n/g,GE=/\r/g,QE=/\t/g;});var nl={};Qt(nl,{Server:()=>Me,Socket:()=>Me,Stream:()=>Me,_createServerHandle:()=>Me,_normalizeArgs:()=>Me,_setSimultaneousAccepts:()=>Me,connect:()=>Me,createConnection:()=>Me,createServer:()=>Me,default:()=>XE,isIP:()=>Me,isIPv4:()=>Me,isIPv6:()=>Me});function Me(){throw new Error("Node.js net module is not supported by JSPM core outside of Node.js")}var XE,sl=we(()=>{v();m();_();XE={_createServerHandle:Me,_normalizeArgs:Me,_setSimultaneousAccepts:Me,connect:Me,createConnection:Me,createServer:Me,isIP:Me,isIPv4:Me,isIPv6:Me,Server:Me,Socket:Me,Stream:Me};});var ol=M(Mi=>{v();m();_();var gg=Mi&&Mi.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Mi,"__esModule",{value:!0});var ZE=gg((sl(),X(nl))),eS=gg(ot()),tS=(0, eS.default)("mqttjs:tcp"),rS=(t,e)=>{e.port=e.port||1883,e.hostname=e.hostname||e.host||"localhost";let{port:r}=e,i=e.hostname;return tS("port %d and host %s",r,i),ZE.default.createConnection(r,i)};Mi.default=rS;});var yg={};Qt(yg,{default:()=>iS});var iS,bg=we(()=>{v();m();_();iS={};});var ll=M(Li=>{v();m();_();var al=Li&&Li.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Li,"__esModule",{value:!0});var nS=al((bg(),X(yg))),sS=al((sl(),X(nl))),oS=al(ot()),aS=(0, oS.default)("mqttjs:tls"),lS=(t,e)=>{e.port=e.port||8883,e.host=e.hostname||e.host||"localhost",sS.default.isIP(e.host)===0&&(e.servername=e.host),e.rejectUnauthorized=e.rejectUnauthorized!==!1,delete e.path,aS("port %d host %s rejectUnauthorized %b",e.port,e.host,e.rejectUnauthorized);let r=nS.default.connect(e);r.on("secureConnect",()=>{e.rejectUnauthorized&&!r.authorized?r.emit("error",new Error("TLS not authorized")):r.removeListener("error",i);});function i(n){e.rejectUnauthorized&&t.emit("error",n),r.end();}return r.on("error",i),r};Li.default=lS;});var os=M(oi=>{v();m();_();Object.defineProperty(oi,"__esModule",{value:!0});oi.BufferedDuplex=oi.writev=void 0;var uS=Dt(),wg=(ye(),X(_e));function _g(t,e){let r=new Array(t.length);for(let i=0;i{this.push(n);});}_read(e){this.proxy.read(e);}_write(e,r,i){this.isSocketOpen?this.writeToProxy(e,r,i):this.writeQueue.push({chunk:e,encoding:r,cb:i});}_final(e){this.writeQueue=[],this.proxy.end(e);}_destroy(e,r){this.writeQueue=[],this.proxy.destroy(),r(e);}socketReady(){this.emit("connect"),this.isSocketOpen=!0,this.processWriteQueue();}writeToProxy(e,r,i){this.proxy.write(e,r)===!1?this.proxy.once("drain",i):i();}processWriteQueue(){for(;this.writeQueue.length>0;){let{chunk:e,encoding:r,cb:i}=this.writeQueue.shift();this.writeToProxy(e,r,i);}}};oi.BufferedDuplex=ul;});var hl=M(cl=>{v();m();_();Object.defineProperty(cl,"__esModule",{value:!0});var mg=(ye(),X(_e)),fS=Dt(),cS=os(),gt,fl,Le;function hS(){let t=new fS.Transform;return t._write=(e,r,i)=>{gt.send({data:e.buffer,success(){i();},fail(n){i(new Error(n));}});},t._flush=e=>{gt.close({success(){e();}});},t}function dS(t){t.hostname||(t.hostname="localhost"),t.path||(t.path="/"),t.wsOptions||(t.wsOptions={});}function pS(t,e){let r=t.protocol==="wxs"?"wss":"ws",i=`${r}://${t.hostname}${t.path}`;return t.port&&t.port!==80&&t.port!==443&&(i=`${r}://${t.hostname}:${t.port}${t.path}`),typeof t.transformWsUrl=="function"&&(i=t.transformWsUrl(i,t,e)),i}function gS(){gt.onOpen(()=>{Le.socketReady();}),gt.onMessage(t=>{let{data:e}=t;e instanceof ArrayBuffer?e=mg.Buffer.from(e):e=mg.Buffer.from(e,"utf8"),fl.push(e);}),gt.onClose(()=>{Le.emit("close"),Le.end(),Le.destroy();}),gt.onError(t=>{let e=new Error(t.errMsg);Le.destroy(e);});}var yS=(t,e)=>{if(e.hostname=e.hostname||e.host,!e.hostname)throw new Error("Could not determine host. Specify host manually.");let r=e.protocolId==="MQIsdp"&&e.protocolVersion===3?"mqttv3.1":"mqtt";dS(e);let i=pS(e,t);gt=wx.connectSocket({url:i,protocols:[r]}),fl=hS(),Le=new cS.BufferedDuplex(e,fl,gt),Le._destroy=(o,s)=>{gt.close({success(){s&&s(o);}});};let n=Le.destroy;return Le.destroy=(o,s)=>(Le.destroy=n,setTimeout(()=>{gt.close({fail(){Le._destroy(o,s);}});},0),Le),gS(),Le};cl.default=yS;});var gl=M(pl=>{v();m();_();Object.defineProperty(pl,"__esModule",{value:!0});var dl=(ye(),X(_e)),bS=Dt(),wS=os(),kt,as,ai,vg=!1;function _S(){let t=new bS.Transform;return t._write=(e,r,i)=>{kt.sendSocketMessage({data:e.buffer,success(){i();},fail(){i(new Error);}});},t._flush=e=>{kt.closeSocket({success(){e();}});},t}function mS(t){t.hostname||(t.hostname="localhost"),t.path||(t.path="/"),t.wsOptions||(t.wsOptions={});}function vS(t,e){let r=t.protocol==="alis"?"wss":"ws",i=`${r}://${t.hostname}${t.path}`;return t.port&&t.port!==80&&t.port!==443&&(i=`${r}://${t.hostname}:${t.port}${t.path}`),typeof t.transformWsUrl=="function"&&(i=t.transformWsUrl(i,t,e)),i}function ES(){vg||(vg=!0,kt.onSocketOpen(()=>{ai.socketReady();}),kt.onSocketMessage(t=>{if(typeof t.data=="string"){let e=dl.Buffer.from(t.data,"base64");as.push(e);}else {let e=new FileReader;e.addEventListener("load",()=>{let r=e.result;r instanceof ArrayBuffer?r=dl.Buffer.from(r):r=dl.Buffer.from(r,"utf8"),as.push(r);}),e.readAsArrayBuffer(t.data);}}),kt.onSocketClose(()=>{ai.end(),ai.destroy();}),kt.onSocketError(t=>{ai.destroy(t);}));}var SS=(t,e)=>{if(e.hostname=e.hostname||e.host,!e.hostname)throw new Error("Could not determine host. Specify host manually.");let r=e.protocolId==="MQIsdp"&&e.protocolVersion===3?"mqttv3.1":"mqtt";mS(e);let i=vS(e,t);return kt=e.my,kt.connectSocket({url:i,protocols:r}),as=_S(),ai=new wS.BufferedDuplex(e,as,kt),ES(),ai};pl.default=SS;});var Sg=M((PD,Eg)=>{v();m();_();Eg.exports=function(){throw new Error("ws does not work in the browser. Browser clients must use the native WebSocket object")};});var _l=M(Ui=>{v();m();_();var wl=Ui&&Ui.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Ui,"__esModule",{value:!0});var yl=(ye(),X(_e)),Ag=wl(Sg()),AS=wl(ot()),IS=Dt(),Ig=wl(Pi()),bl=os(),Kt=(0, AS.default)("mqttjs:ws"),TS=["rejectUnauthorized","ca","cert","key","pfx","passphrase"];function Tg(t,e){let r=`${t.protocol}://${t.hostname}:${t.port}${t.path}`;return typeof t.transformWsUrl=="function"&&(r=t.transformWsUrl(r,t,e)),r}function Rg(t){let e=t;return t.hostname||(e.hostname="localhost"),t.port||(t.protocol==="wss"?e.port=443:e.port=80),t.path||(e.path="/"),t.wsOptions||(e.wsOptions={}),!Ig.default&&t.protocol==="wss"&&TS.forEach(r=>{Object.prototype.hasOwnProperty.call(t,r)&&!Object.prototype.hasOwnProperty.call(t.wsOptions,r)&&(e.wsOptions[r]=t[r]);}),e}function RS(t){let e=Rg(t);if(e.hostname||(e.hostname=e.host),!e.hostname){if(typeof document>"u")throw new Error("Could not determine host. Specify host manually.");let r=new URL(document.URL);e.hostname=r.hostname,e.port||(e.port=Number(r.port));}return e.objectMode===void 0&&(e.objectMode=!(e.binary===!0||e.binary===void 0)),e}function CS(t,e,r){Kt("createWebSocket"),Kt(`protocol: ${r.protocolId} ${r.protocolVersion}`);let i=r.protocolId==="MQIsdp"&&r.protocolVersion===3?"mqttv3.1":"mqtt";Kt(`creating new Websocket for url: ${e} and protocol: ${i}`);let n;return r.createWebsocket?n=r.createWebsocket(e,[i],r):n=new Ag.default(e,[i],r.wsOptions),n}function BS(t,e){let r=e.protocolId==="MQIsdp"&&e.protocolVersion===3?"mqttv3.1":"mqtt",i=Tg(e,t),n;return e.createWebsocket?n=e.createWebsocket(i,[r],e):n=new WebSocket(i,[r]),n.binaryType="arraybuffer",n}var PS=(t,e)=>{Kt("streamBuilder");let r=Rg(e),i=Tg(r,t),n=CS(t,i,r),o=Ag.default.createWebSocketStream(n,r.wsOptions);return o.url=i,n.on("close",()=>{o.destroy();}),o},OS=(t,e)=>{Kt("browserStreamBuilder");let r,n=RS(e).browserBufferSize||1024*512,o=e.browserBufferTimeout||1e3,s=!e.objectMode,a=BS(t,e),u=h(e,E,S);e.objectMode||(u._writev=bl.writev.bind(u)),u.on("close",()=>{a.close();});let c=typeof a.addEventListener<"u";a.readyState===a.OPEN?(r=u,r.socket=a):(r=new bl.BufferedDuplex(e,u,a),c?a.addEventListener("open",d):a.onopen=d),c?(a.addEventListener("close",g),a.addEventListener("error",y),a.addEventListener("message",w)):(a.onclose=g,a.onerror=y,a.onmessage=w);function h(I,C,R){let U=new IS.Transform({objectMode:I.objectMode});return U._write=C,U._flush=R,U}function d(){Kt("WebSocket onOpen"),r instanceof bl.BufferedDuplex&&r.socketReady();}function g(I){Kt("WebSocket onClose",I),r.end(),r.destroy();}function y(I){Kt("WebSocket onError",I);let C=new Error("WebSocket error");C.event=I,r.destroy(C);}function w(I){let{data:C}=I;C instanceof ArrayBuffer?C=yl.Buffer.from(C):C=yl.Buffer.from(C,"utf8"),u.push(C);}function E(I,C,R){if(a.bufferedAmount>n){setTimeout(E,o,I,C,R);return}s&&typeof I=="string"&&(I=yl.Buffer.from(I,"utf8"));try{a.send(I);}catch(U){return R(U)}R();}function S(I){a.close(),I();}return r};Ui.default=Ig.default?OS:PS;});var Pg=M(Rr=>{v();m();_();var ls=Rr&&Rr.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Rr,"__esModule",{value:!0});Rr.connectAsync=void 0;var kS=ls(ot()),xS=ls((pg(),X(dg))),MS=ls(ns()),LS=ls(Pi()),Cg=(0, kS.default)("mqttjs"),Re={};LS.default?(Re.wx=hl().default,Re.wxs=hl().default,Re.ali=gl().default,Re.alis=gl().default):(Re.mqtt=ol().default,Re.tcp=ol().default,Re.ssl=ll().default,Re.tls=Re.ssl,Re.mqtts=ll().default);Re.ws=_l().default;Re.wss=_l().default;function US(t){let e;t.auth&&(e=t.auth.match(/^(.+):(.+)$/),e?(t.username=e[1],t.password=e[2]):t.username=t.auth);}function Bg(t,e){if(Cg("connecting to an MQTT broker..."),typeof t=="object"&&!e&&(e=t,t=""),e=e||{},t&&typeof t=="string"){let n=xS.default.parse(t,!0);if(n.port!=null&&(n.port=Number(n.port)),e=Object.assign(Object.assign({},n),e),e.protocol===null)throw new Error("Missing protocol");e.protocol=e.protocol.replace(/:$/,"");}if(US(e),e.query&&typeof e.query.clientId=="string"&&(e.clientId=e.query.clientId),e.cert&&e.key)if(e.protocol){if(["mqtts","wss","wxs","alis"].indexOf(e.protocol)===-1)switch(e.protocol){case"mqtt":e.protocol="mqtts";break;case"ws":e.protocol="wss";break;case"wx":e.protocol="wxs";break;case"ali":e.protocol="alis";break;default:throw new Error(`Unknown protocol for secure connection: "${e.protocol}"!`)}}else throw new Error("Missing secure protocol key");if(!Re[e.protocol]){let n=["mqtts","wss"].indexOf(e.protocol)!==-1;e.protocol=["mqtt","mqtts","ws","wss","wx","wxs","ali","alis"].filter((o,s)=>n&&s%2===0?!1:typeof Re[o]=="function")[0];}if(e.clean===!1&&!e.clientId)throw new Error("Missing clientId for unclean clients");e.protocol&&(e.defaultProtocol=e.protocol);function r(n){return e.servers&&((!n._reconnectCount||n._reconnectCount===e.servers.length)&&(n._reconnectCount=0),e.host=e.servers[n._reconnectCount].host,e.port=e.servers[n._reconnectCount].port,e.protocol=e.servers[n._reconnectCount].protocol?e.servers[n._reconnectCount].protocol:e.defaultProtocol,e.hostname=e.host,n._reconnectCount++),Cg("calling streambuilder for",e.protocol),Re[e.protocol](n,e)}let i=new MS.default(r,e);return i.on("error",()=>{}),i}function NS(t,e,r=!0){return new Promise((i,n)=>{let o=Bg(t,e),s={connect:u=>{a(),i(o);},end:()=>{a(),i(o);},error:u=>{a(),o.end(),n(u);}};r===!1&&(s.close=()=>{s.error(new Error("Couldn't connect to server"));});function a(){Object.keys(s).forEach(u=>{o.off(u,s[u]);});}Object.keys(s).forEach(u=>{o.on(u,s[u]);});})}Rr.connectAsync=NS;Rr.default=Bg;});var ml=M(G=>{v();m();_();var Og=G&&G.__createBinding||(Object.create?function(t,e,r,i){i===void 0&&(i=r);var n=Object.getOwnPropertyDescriptor(e,r);(!n||("get"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,i,n);}:function(t,e,r,i){i===void 0&&(i=r),t[i]=e[r];}),qS=G&&G.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e});}:function(t,e){t.default=e;}),DS=G&&G.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.prototype.hasOwnProperty.call(t,r)&&Og(e,t,r);return qS(e,t),e},kg=G&&G.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Og(e,t,r);},Ni=G&&G.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(G,"__esModule",{value:!0});G.ReasonCodes=G.PingTimer=G.UniqueMessageIdProvider=G.DefaultMessageIdProvider=G.Store=G.MqttClient=G.connectAsync=G.connect=G.Client=void 0;var xg=Ni(ns());G.MqttClient=xg.default;var jS=Ni(Yo());G.DefaultMessageIdProvider=jS.default;var FS=Ni($p());G.UniqueMessageIdProvider=FS.default;var WS=Ni(Zo());G.Store=WS.default;var Mg=DS(Pg());G.connect=Mg.default;Object.defineProperty(G,"connectAsync",{enumerable:!0,get:function(){return Mg.connectAsync}});var $S=Ni(Da());G.PingTimer=$S.default;G.Client=xg.default;kg(ns(),G);kg(Jr(),G);var HS=Ai();Object.defineProperty(G,"ReasonCodes",{enumerable:!0,get:function(){return HS.ReasonCodes}});});var QS=M(We=>{v();m();_();var Lg=We&&We.__createBinding||(Object.create?function(t,e,r,i){i===void 0&&(i=r);var n=Object.getOwnPropertyDescriptor(e,r);(!n||("get"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,i,n);}:function(t,e,r,i){i===void 0&&(i=r),t[i]=e[r];}),VS=We&&We.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e});}:function(t,e){t.default=e;}),zS=We&&We.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.prototype.hasOwnProperty.call(t,r)&&Lg(e,t,r);return VS(e,t),e},KS=We&&We.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Lg(e,t,r);};Object.defineProperty(We,"__esModule",{value:!0});var GS=zS(ml());We.default=GS;KS(ml(),We);});var mqtt = QS(); +// This module is intended to unwrap Axios default export as named. +// Keep top-level export same with static properties +// so that it can keep same with es module or cjs +const { + Axios, + AxiosError, + CanceledError, + isCancel, + CancelToken, + VERSION, + all, + Cancel, + isAxiosError, + spread, + toFormData, + AxiosHeaders, + HttpStatusCode, + formToJSON, + getAdapter, + mergeConfig +} = axios; + +var ys=Object.defineProperty;var Kg=Object.getOwnPropertyDescriptor;var Gg=Object.getOwnPropertyNames;var Qg=Object.prototype.hasOwnProperty;var _e=(t,e)=>()=>(t&&(e=t(t=0)),e);var M=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),Jt=(t,e)=>{for(var r in e)ys(t,r,{get:e[r],enumerable:!0});},Yg=(t,e,r,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Gg(e))!Qg.call(t,n)&&n!==r&&ys(t,n,{get:()=>e[n],enumerable:!(i=Kg(e,n))||i.enumerable});return t};var X=t=>Yg(ys({},"__esModule",{value:!0}),t);var _=_e(()=>{});var B={};Jt(B,{_debugEnd:()=>yu,_debugProcess:()=>gu,_events:()=>Ou,_eventsCount:()=>xu,_exiting:()=>Yl,_fatalExceptions:()=>cu,_getActiveHandles:()=>eu,_getActiveRequests:()=>Zl,_kill:()=>ru,_linkedBinding:()=>Gl,_maxListeners:()=>ku,_preload_modules:()=>Cu,_rawDebug:()=>zl,_startProfilerIdleNotifier:()=>bu,_stopProfilerIdleNotifier:()=>wu,_tickCallback:()=>pu,abort:()=>Eu,addListener:()=>Mu,allowedNodeEnvironmentFlags:()=>lu,arch:()=>xl,argv:()=>Ul,argv0:()=>Ru,assert:()=>uu,binding:()=>Fl,chdir:()=>Hl,config:()=>Jl,cpuUsage:()=>$i,cwd:()=>$l,debugPort:()=>Tu,default:()=>$u,dlopen:()=>Xl,domain:()=>Ql,emit:()=>Du,emitWarning:()=>jl,env:()=>Ll,execArgv:()=>Nl,execPath:()=>Iu,exit:()=>ou,features:()=>fu,hasUncaughtExceptionCaptureCallback:()=>du,hrtime:()=>Wi,kill:()=>su,listeners:()=>Wu,memoryUsage:()=>nu,moduleLoadList:()=>Kl,nextTick:()=>Pl,off:()=>Uu,on:()=>wt,once:()=>Lu,openStdin:()=>au,pid:()=>Su,platform:()=>Ml,ppid:()=>Au,prependListener:()=>ju,prependOnceListener:()=>Fu,reallyExit:()=>tu,release:()=>Vl,removeAllListeners:()=>qu,removeListener:()=>Nu,resourceUsage:()=>iu,setSourceMapsEnabled:()=>Bu,setUncaughtExceptionCaptureCallback:()=>hu,stderr:()=>mu,stdin:()=>vu,stdout:()=>_u,title:()=>Ol,umask:()=>Wl,uptime:()=>Pu,version:()=>ql,versions:()=>Dl});function _s(t){throw new Error("Node.js process "+t+" is not supported by JSPM core outside of Node.js")}function Jg(){!Lr||!Xt||(Lr=!1,Xt.length?bt=Xt.concat(bt):Fi=-1,bt.length&&Bl());}function Bl(){if(!Lr){var t=setTimeout(Jg,0);Lr=!0;for(var e=bt.length;e;){for(Xt=bt,bt=[];++Fi1)for(var r=1;r{_();v();m();bt=[],Lr=!1,Fi=-1;kl.prototype.run=function(){this.fun.apply(null,this.array);};Ol="browser",xl="x64",Ml="browser",Ll={PATH:"/usr/bin",LANG:navigator.language+".UTF-8",PWD:"/",HOME:"/home",TMP:"/tmp"},Ul=["/usr/bin/node"],Nl=[],ql="v16.8.0",Dl={},jl=function(t,e){console.warn((e?e+": ":"")+t);},Fl=function(t){_s("binding");},Wl=function(t){return 0},$l=function(){return "/"},Hl=function(t){},Vl={name:"node",sourceUrl:"",headersUrl:"",libUrl:""};zl=Ee,Kl=[];Ql={},Yl=!1,Jl={};tu=Ee,ru=Ee,$i=function(){return {}},iu=$i,nu=$i,su=Ee,ou=Ee,au=Ee,lu={};fu={inspector:!1,debug:!1,uv:!1,ipv6:!1,tls_alpn:!1,tls_sni:!1,tls_ocsp:!1,tls:!1,cached_builtins:!0},cu=Ee,hu=Ee;pu=Ee,gu=Ee,yu=Ee,bu=Ee,wu=Ee,_u=void 0,mu=void 0,vu=void 0,Eu=Ee,Su=2,Au=1,Iu="/bin/usr/node",Tu=9229,Ru="node",Cu=[],Bu=Ee,Lt={now:typeof performance<"u"?performance.now.bind(performance):void 0,timing:typeof performance<"u"?performance.timing:void 0};Lt.now===void 0&&(bs=Date.now(),Lt.timing&&Lt.timing.navigationStart&&(bs=Lt.timing.navigationStart),Lt.now=()=>Date.now()-bs);ws=1e9;Wi.bigint=function(t){var e=Wi(t);return typeof BigInt>"u"?e[0]*ws+e[1]:BigInt(e[0]*ws)+BigInt(e[1])};ku=10,Ou={},xu=0;Mu=wt,Lu=wt,Uu=wt,Nu=wt,qu=wt,Du=Ee,ju=wt,Fu=wt;$u={version:ql,versions:Dl,arch:xl,platform:Ml,release:Vl,_rawDebug:zl,moduleLoadList:Kl,binding:Fl,_linkedBinding:Gl,_events:Ou,_eventsCount:xu,_maxListeners:ku,on:wt,addListener:Mu,once:Lu,off:Uu,removeListener:Nu,removeAllListeners:qu,emit:Du,prependListener:ju,prependOnceListener:Fu,listeners:Wu,domain:Ql,_exiting:Yl,config:Jl,dlopen:Xl,uptime:Pu,_getActiveRequests:Zl,_getActiveHandles:eu,reallyExit:tu,_kill:ru,cpuUsage:$i,resourceUsage:iu,memoryUsage:nu,kill:su,exit:ou,openStdin:au,allowedNodeEnvironmentFlags:lu,assert:uu,features:fu,_fatalExceptions:cu,setUncaughtExceptionCaptureCallback:hu,hasUncaughtExceptionCaptureCallback:du,emitWarning:jl,nextTick:Pl,_tickCallback:pu,_debugProcess:gu,_debugEnd:yu,_startProfilerIdleNotifier:bu,_stopProfilerIdleNotifier:wu,stdout:_u,stdin:vu,stderr:mu,abort:Eu,umask:Wl,chdir:Hl,cwd:$l,env:Ll,title:Ol,argv:Ul,execArgv:Nl,pid:Su,ppid:Au,execPath:Iu,debugPort:Tu,hrtime:Wi,argv0:Ru,_preload_modules:Cu,setSourceMapsEnabled:Bu};});var m=_e(()=>{Hu();});var me={};Jt(me,{Buffer:()=>x,INSPECT_MAX_BYTES:()=>ty,default:()=>Ut,kMaxLength:()=>ry});function Xg(){if(Vu)return ci;Vu=!0,ci.byteLength=a,ci.toByteArray=c,ci.fromByteArray=g;for(var t=[],e=[],r=typeof Uint8Array<"u"?Uint8Array:Array,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",n=0,o=i.length;n0)throw new Error("Invalid string. Length must be a multiple of 4");var S=y.indexOf("=");S===-1&&(S=w);var E=S===w?0:4-S%4;return [S,E]}function a(y){var w=s(y),S=w[0],E=w[1];return (S+E)*3/4-E}function l(y,w,S){return (w+S)*3/4-S}function c(y){var w,S=s(y),E=S[0],I=S[1],C=new r(l(y,E,I)),R=0,U=I>0?E-4:E,N;for(N=0;N>16&255,C[R++]=w>>8&255,C[R++]=w&255;return I===2&&(w=e[y.charCodeAt(N)]<<2|e[y.charCodeAt(N+1)]>>4,C[R++]=w&255),I===1&&(w=e[y.charCodeAt(N)]<<10|e[y.charCodeAt(N+1)]<<4|e[y.charCodeAt(N+2)]>>2,C[R++]=w>>8&255,C[R++]=w&255),C}function h(y){return t[y>>18&63]+t[y>>12&63]+t[y>>6&63]+t[y&63]}function d(y,w,S){for(var E,I=[],C=w;CU?U:R+C));return E===1?(w=y[S-1],I.push(t[w>>2]+t[w<<4&63]+"==")):E===2&&(w=(y[S-2]<<8)+y[S-1],I.push(t[w>>10]+t[w>>4&63]+t[w<<2&63]+"=")),I.join("")}return ci}function Zg(){if(zu)return Hi;zu=!0;return Hi.read=function(t,e,r,i,n){var o,s,a=n*8-i-1,l=(1<>1,h=-7,d=r?n-1:0,g=r?-1:1,y=t[e+d];for(d+=g,o=y&(1<<-h)-1,y>>=-h,h+=a;h>0;o=o*256+t[e+d],d+=g,h-=8);for(s=o&(1<<-h)-1,o>>=-h,h+=i;h>0;s=s*256+t[e+d],d+=g,h-=8);if(o===0)o=1-c;else {if(o===l)return s?NaN:(y?-1:1)*(1/0);s=s+Math.pow(2,i),o=o-c;}return (y?-1:1)*s*Math.pow(2,o-i)},Hi.write=function(t,e,r,i,n,o){var s,a,l,c=o*8-n-1,h=(1<>1,g=n===23?Math.pow(2,-24)-Math.pow(2,-77):0,y=i?0:o-1,w=i?1:-1,S=e<0||e===0&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=h):(s=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-s))<1&&(s--,l*=2),s+d>=1?e+=g/l:e+=g*Math.pow(2,1-d),e*l>=2&&(s++,l/=2),s+d>=h?(a=0,s=h):s+d>=1?(a=(e*l-1)*Math.pow(2,n),s=s+d):(a=e*Math.pow(2,d-1)*Math.pow(2,n),s=0));n>=8;t[r+y]=a&255,y+=w,a/=256,n-=8);for(s=s<0;t[r+y]=s&255,y+=w,s/=256,c-=8);t[r+y-w]|=S*128;},Hi}function ey(){if(Ku)return Zt;Ku=!0;let t=Xg(),e=Zg(),r=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):null;Zt.Buffer=s,Zt.SlowBuffer=I,Zt.INSPECT_MAX_BYTES=50;let i=2147483647;Zt.kMaxLength=i,s.TYPED_ARRAY_SUPPORT=n(),!s.TYPED_ARRAY_SUPPORT&&typeof console<"u"&&typeof console.error=="function"&&console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.");function n(){try{let p=new Uint8Array(1),u={foo:function(){return 42}};return Object.setPrototypeOf(u,Uint8Array.prototype),Object.setPrototypeOf(p,u),p.foo()===42}catch{return !1}}Object.defineProperty(s.prototype,"parent",{enumerable:!0,get:function(){if(s.isBuffer(this))return this.buffer}}),Object.defineProperty(s.prototype,"offset",{enumerable:!0,get:function(){if(s.isBuffer(this))return this.byteOffset}});function o(p){if(p>i)throw new RangeError('The value "'+p+'" is invalid for option "size"');let u=new Uint8Array(p);return Object.setPrototypeOf(u,s.prototype),u}function s(p,u,f){if(typeof p=="number"){if(typeof u=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return h(p)}return a(p,u,f)}s.poolSize=8192;function a(p,u,f){if(typeof p=="string")return d(p,u);if(ArrayBuffer.isView(p))return y(p);if(p==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof p);if(Ye(p,ArrayBuffer)||p&&Ye(p.buffer,ArrayBuffer)||typeof SharedArrayBuffer<"u"&&(Ye(p,SharedArrayBuffer)||p&&Ye(p.buffer,SharedArrayBuffer)))return w(p,u,f);if(typeof p=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');let b=p.valueOf&&p.valueOf();if(b!=null&&b!==p)return s.from(b,u,f);let A=S(p);if(A)return A;if(typeof Symbol<"u"&&Symbol.toPrimitive!=null&&typeof p[Symbol.toPrimitive]=="function")return s.from(p[Symbol.toPrimitive]("string"),u,f);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof p)}s.from=function(p,u,f){return a(p,u,f)},Object.setPrototypeOf(s.prototype,Uint8Array.prototype),Object.setPrototypeOf(s,Uint8Array);function l(p){if(typeof p!="number")throw new TypeError('"size" argument must be of type number');if(p<0)throw new RangeError('The value "'+p+'" is invalid for option "size"')}function c(p,u,f){return l(p),p<=0?o(p):u!==void 0?typeof f=="string"?o(p).fill(u,f):o(p).fill(u):o(p)}s.alloc=function(p,u,f){return c(p,u,f)};function h(p){return l(p),o(p<0?0:E(p)|0)}s.allocUnsafe=function(p){return h(p)},s.allocUnsafeSlow=function(p){return h(p)};function d(p,u){if((typeof u!="string"||u==="")&&(u="utf8"),!s.isEncoding(u))throw new TypeError("Unknown encoding: "+u);let f=C(p,u)|0,b=o(f),A=b.write(p,u);return A!==f&&(b=b.slice(0,A)),b}function g(p){let u=p.length<0?0:E(p.length)|0,f=o(u);for(let b=0;b=i)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i.toString(16)+" bytes");return p|0}function I(p){return +p!=p&&(p=0),s.alloc(+p)}s.isBuffer=function(u){return u!=null&&u._isBuffer===!0&&u!==s.prototype},s.compare=function(u,f){if(Ye(u,Uint8Array)&&(u=s.from(u,u.offset,u.byteLength)),Ye(f,Uint8Array)&&(f=s.from(f,f.offset,f.byteLength)),!s.isBuffer(u)||!s.isBuffer(f))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(u===f)return 0;let b=u.length,A=f.length;for(let T=0,P=Math.min(b,A);TA.length?(s.isBuffer(P)||(P=s.from(P)),P.copy(A,T)):Uint8Array.prototype.set.call(A,P,T);else if(s.isBuffer(P))P.copy(A,T);else throw new TypeError('"list" argument must be an Array of Buffers');T+=P.length;}return A};function C(p,u){if(s.isBuffer(p))return p.length;if(ArrayBuffer.isView(p)||Ye(p,ArrayBuffer))return p.byteLength;if(typeof p!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof p);let f=p.length,b=arguments.length>2&&arguments[2]===!0;if(!b&&f===0)return 0;let A=!1;for(;;)switch(u){case"ascii":case"latin1":case"binary":return f;case"utf8":case"utf-8":return ps(p).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return f*2;case"hex":return f>>>1;case"base64":return Cl(p).length;default:if(A)return b?-1:ps(p).length;u=(""+u).toLowerCase(),A=!0;}}s.byteLength=C;function R(p,u,f){let b=!1;if((u===void 0||u<0)&&(u=0),u>this.length||((f===void 0||f>this.length)&&(f=this.length),f<=0)||(f>>>=0,u>>>=0,f<=u))return "";for(p||(p="utf8");;)switch(p){case"hex":return qg(this,u,f);case"utf8":case"utf-8":return Pr(this,u,f);case"ascii":return hs(this,u,f);case"latin1":case"binary":return Ng(this,u,f);case"base64":return ge(this,u,f);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Dg(this,u,f);default:if(b)throw new TypeError("Unknown encoding: "+p);p=(p+"").toLowerCase(),b=!0;}}s.prototype._isBuffer=!0;function U(p,u,f){let b=p[u];p[u]=p[f],p[f]=b;}s.prototype.swap16=function(){let u=this.length;if(u%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let f=0;ff&&(u+=" ... "),""},r&&(s.prototype[r]=s.prototype.inspect),s.prototype.compare=function(u,f,b,A,T){if(Ye(u,Uint8Array)&&(u=s.from(u,u.offset,u.byteLength)),!s.isBuffer(u))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof u);if(f===void 0&&(f=0),b===void 0&&(b=u?u.length:0),A===void 0&&(A=0),T===void 0&&(T=this.length),f<0||b>u.length||A<0||T>this.length)throw new RangeError("out of range index");if(A>=T&&f>=b)return 0;if(A>=T)return -1;if(f>=b)return 1;if(f>>>=0,b>>>=0,A>>>=0,T>>>=0,this===u)return 0;let P=T-A,$=b-f,se=Math.min(P,$),te=this.slice(A,T),oe=u.slice(f,b);for(let J=0;J2147483647?f=2147483647:f<-2147483648&&(f=-2147483648),f=+f,gs(f)&&(f=A?0:p.length-1),f<0&&(f=p.length+f),f>=p.length){if(A)return -1;f=p.length-1;}else if(f<0)if(A)f=0;else return -1;if(typeof u=="string"&&(u=s.from(u,b)),s.isBuffer(u))return u.length===0?-1:W(p,u,f,b,A);if(typeof u=="number")return u=u&255,typeof Uint8Array.prototype.indexOf=="function"?A?Uint8Array.prototype.indexOf.call(p,u,f):Uint8Array.prototype.lastIndexOf.call(p,u,f):W(p,[u],f,b,A);throw new TypeError("val must be string, number or Buffer")}function W(p,u,f,b,A){let T=1,P=p.length,$=u.length;if(b!==void 0&&(b=String(b).toLowerCase(),b==="ucs2"||b==="ucs-2"||b==="utf16le"||b==="utf-16le")){if(p.length<2||u.length<2)return -1;T=2,P/=2,$/=2,f/=2;}function se(oe,J){return T===1?oe[J]:oe.readUInt16BE(J*T)}let te;if(A){let oe=-1;for(te=f;teP&&(f=P-$),te=f;te>=0;te--){let oe=!0;for(let J=0;J<$;J++)if(se(p,te+J)!==se(u,J)){oe=!1;break}if(oe)return te}return -1}s.prototype.includes=function(u,f,b){return this.indexOf(u,f,b)!==-1},s.prototype.indexOf=function(u,f,b){return N(this,u,f,b,!0)},s.prototype.lastIndexOf=function(u,f,b){return N(this,u,f,b,!1)};function K(p,u,f,b){f=Number(f)||0;let A=p.length-f;b?(b=Number(b),b>A&&(b=A)):b=A;let T=u.length;b>T/2&&(b=T/2);let P;for(P=0;P>>0,isFinite(b)?(b=b>>>0,A===void 0&&(A="utf8")):(A=b,b=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");let T=this.length-f;if((b===void 0||b>T)&&(b=T),u.length>0&&(b<0||f<0)||f>this.length)throw new RangeError("Attempt to write outside buffer bounds");A||(A="utf8");let P=!1;for(;;)switch(A){case"hex":return K(this,u,f,b);case"utf8":case"utf-8":return z(this,u,f,b);case"ascii":case"latin1":case"binary":return Q(this,u,f,b);case"base64":return pe(this,u,f,b);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Yt(this,u,f,b);default:if(P)throw new TypeError("Unknown encoding: "+A);A=(""+A).toLowerCase(),P=!0;}},s.prototype.toJSON=function(){return {type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function ge(p,u,f){return u===0&&f===p.length?t.fromByteArray(p):t.fromByteArray(p.slice(u,f))}function Pr(p,u,f){f=Math.min(p.length,f);let b=[],A=u;for(;A239?4:T>223?3:T>191?2:1;if(A+$<=f){let se,te,oe,J;switch($){case 1:T<128&&(P=T);break;case 2:se=p[A+1],(se&192)===128&&(J=(T&31)<<6|se&63,J>127&&(P=J));break;case 3:se=p[A+1],te=p[A+2],(se&192)===128&&(te&192)===128&&(J=(T&15)<<12|(se&63)<<6|te&63,J>2047&&(J<55296||J>57343)&&(P=J));break;case 4:se=p[A+1],te=p[A+2],oe=p[A+3],(se&192)===128&&(te&192)===128&&(oe&192)===128&&(J=(T&15)<<18|(se&63)<<12|(te&63)<<6|oe&63,J>65535&&J<1114112&&(P=J));}}P===null?(P=65533,$=1):P>65535&&(P-=65536,b.push(P>>>10&1023|55296),P=56320|P&1023),b.push(P),A+=$;}return Or(b)}let kr=4096;function Or(p){let u=p.length;if(u<=kr)return String.fromCharCode.apply(String,p);let f="",b=0;for(;bb)&&(f=b);let A="";for(let T=u;Tb&&(u=b),f<0?(f+=b,f<0&&(f=0)):f>b&&(f=b),ff)throw new RangeError("Trying to access beyond buffer length")}s.prototype.readUintLE=s.prototype.readUIntLE=function(u,f,b){u=u>>>0,f=f>>>0,b||ye(u,f,this.length);let A=this[u],T=1,P=0;for(;++P>>0,f=f>>>0,b||ye(u,f,this.length);let A=this[u+--f],T=1;for(;f>0&&(T*=256);)A+=this[u+--f]*T;return A},s.prototype.readUint8=s.prototype.readUInt8=function(u,f){return u=u>>>0,f||ye(u,1,this.length),this[u]},s.prototype.readUint16LE=s.prototype.readUInt16LE=function(u,f){return u=u>>>0,f||ye(u,2,this.length),this[u]|this[u+1]<<8},s.prototype.readUint16BE=s.prototype.readUInt16BE=function(u,f){return u=u>>>0,f||ye(u,2,this.length),this[u]<<8|this[u+1]},s.prototype.readUint32LE=s.prototype.readUInt32LE=function(u,f){return u=u>>>0,f||ye(u,4,this.length),(this[u]|this[u+1]<<8|this[u+2]<<16)+this[u+3]*16777216},s.prototype.readUint32BE=s.prototype.readUInt32BE=function(u,f){return u=u>>>0,f||ye(u,4,this.length),this[u]*16777216+(this[u+1]<<16|this[u+2]<<8|this[u+3])},s.prototype.readBigUInt64LE=Mt(function(u){u=u>>>0,Mr(u,"offset");let f=this[u],b=this[u+7];(f===void 0||b===void 0)&&fi(u,this.length-8);let A=f+this[++u]*2**8+this[++u]*2**16+this[++u]*2**24,T=this[++u]+this[++u]*2**8+this[++u]*2**16+b*2**24;return BigInt(A)+(BigInt(T)<>>0,Mr(u,"offset");let f=this[u],b=this[u+7];(f===void 0||b===void 0)&&fi(u,this.length-8);let A=f*2**24+this[++u]*2**16+this[++u]*2**8+this[++u],T=this[++u]*2**24+this[++u]*2**16+this[++u]*2**8+b;return (BigInt(A)<>>0,f=f>>>0,b||ye(u,f,this.length);let A=this[u],T=1,P=0;for(;++P=T&&(A-=Math.pow(2,8*f)),A},s.prototype.readIntBE=function(u,f,b){u=u>>>0,f=f>>>0,b||ye(u,f,this.length);let A=f,T=1,P=this[u+--A];for(;A>0&&(T*=256);)P+=this[u+--A]*T;return T*=128,P>=T&&(P-=Math.pow(2,8*f)),P},s.prototype.readInt8=function(u,f){return u=u>>>0,f||ye(u,1,this.length),this[u]&128?(255-this[u]+1)*-1:this[u]},s.prototype.readInt16LE=function(u,f){u=u>>>0,f||ye(u,2,this.length);let b=this[u]|this[u+1]<<8;return b&32768?b|4294901760:b},s.prototype.readInt16BE=function(u,f){u=u>>>0,f||ye(u,2,this.length);let b=this[u+1]|this[u]<<8;return b&32768?b|4294901760:b},s.prototype.readInt32LE=function(u,f){return u=u>>>0,f||ye(u,4,this.length),this[u]|this[u+1]<<8|this[u+2]<<16|this[u+3]<<24},s.prototype.readInt32BE=function(u,f){return u=u>>>0,f||ye(u,4,this.length),this[u]<<24|this[u+1]<<16|this[u+2]<<8|this[u+3]},s.prototype.readBigInt64LE=Mt(function(u){u=u>>>0,Mr(u,"offset");let f=this[u],b=this[u+7];(f===void 0||b===void 0)&&fi(u,this.length-8);let A=this[u+4]+this[u+5]*2**8+this[u+6]*2**16+(b<<24);return (BigInt(A)<>>0,Mr(u,"offset");let f=this[u],b=this[u+7];(f===void 0||b===void 0)&&fi(u,this.length-8);let A=(f<<24)+this[++u]*2**16+this[++u]*2**8+this[++u];return (BigInt(A)<>>0,f||ye(u,4,this.length),e.read(this,u,!0,23,4)},s.prototype.readFloatBE=function(u,f){return u=u>>>0,f||ye(u,4,this.length),e.read(this,u,!1,23,4)},s.prototype.readDoubleLE=function(u,f){return u=u>>>0,f||ye(u,8,this.length),e.read(this,u,!0,52,8)},s.prototype.readDoubleBE=function(u,f){return u=u>>>0,f||ye(u,8,this.length),e.read(this,u,!1,52,8)};function Ce(p,u,f,b,A,T){if(!s.isBuffer(p))throw new TypeError('"buffer" argument must be a Buffer instance');if(u>A||up.length)throw new RangeError("Index out of range")}s.prototype.writeUintLE=s.prototype.writeUIntLE=function(u,f,b,A){if(u=+u,f=f>>>0,b=b>>>0,!A){let $=Math.pow(2,8*b)-1;Ce(this,u,f,b,$,0);}let T=1,P=0;for(this[f]=u&255;++P>>0,b=b>>>0,!A){let $=Math.pow(2,8*b)-1;Ce(this,u,f,b,$,0);}let T=b-1,P=1;for(this[f+T]=u&255;--T>=0&&(P*=256);)this[f+T]=u/P&255;return f+b},s.prototype.writeUint8=s.prototype.writeUInt8=function(u,f,b){return u=+u,f=f>>>0,b||Ce(this,u,f,1,255,0),this[f]=u&255,f+1},s.prototype.writeUint16LE=s.prototype.writeUInt16LE=function(u,f,b){return u=+u,f=f>>>0,b||Ce(this,u,f,2,65535,0),this[f]=u&255,this[f+1]=u>>>8,f+2},s.prototype.writeUint16BE=s.prototype.writeUInt16BE=function(u,f,b){return u=+u,f=f>>>0,b||Ce(this,u,f,2,65535,0),this[f]=u>>>8,this[f+1]=u&255,f+2},s.prototype.writeUint32LE=s.prototype.writeUInt32LE=function(u,f,b){return u=+u,f=f>>>0,b||Ce(this,u,f,4,4294967295,0),this[f+3]=u>>>24,this[f+2]=u>>>16,this[f+1]=u>>>8,this[f]=u&255,f+4},s.prototype.writeUint32BE=s.prototype.writeUInt32BE=function(u,f,b){return u=+u,f=f>>>0,b||Ce(this,u,f,4,4294967295,0),this[f]=u>>>24,this[f+1]=u>>>16,this[f+2]=u>>>8,this[f+3]=u&255,f+4};function vl(p,u,f,b,A){Rl(u,b,A,p,f,7);let T=Number(u&BigInt(4294967295));p[f++]=T,T=T>>8,p[f++]=T,T=T>>8,p[f++]=T,T=T>>8,p[f++]=T;let P=Number(u>>BigInt(32)&BigInt(4294967295));return p[f++]=P,P=P>>8,p[f++]=P,P=P>>8,p[f++]=P,P=P>>8,p[f++]=P,f}function El(p,u,f,b,A){Rl(u,b,A,p,f,7);let T=Number(u&BigInt(4294967295));p[f+7]=T,T=T>>8,p[f+6]=T,T=T>>8,p[f+5]=T,T=T>>8,p[f+4]=T;let P=Number(u>>BigInt(32)&BigInt(4294967295));return p[f+3]=P,P=P>>8,p[f+2]=P,P=P>>8,p[f+1]=P,P=P>>8,p[f]=P,f+8}s.prototype.writeBigUInt64LE=Mt(function(u,f=0){return vl(this,u,f,BigInt(0),BigInt("0xffffffffffffffff"))}),s.prototype.writeBigUInt64BE=Mt(function(u,f=0){return El(this,u,f,BigInt(0),BigInt("0xffffffffffffffff"))}),s.prototype.writeIntLE=function(u,f,b,A){if(u=+u,f=f>>>0,!A){let se=Math.pow(2,8*b-1);Ce(this,u,f,b,se-1,-se);}let T=0,P=1,$=0;for(this[f]=u&255;++T>0)-$&255;return f+b},s.prototype.writeIntBE=function(u,f,b,A){if(u=+u,f=f>>>0,!A){let se=Math.pow(2,8*b-1);Ce(this,u,f,b,se-1,-se);}let T=b-1,P=1,$=0;for(this[f+T]=u&255;--T>=0&&(P*=256);)u<0&&$===0&&this[f+T+1]!==0&&($=1),this[f+T]=(u/P>>0)-$&255;return f+b},s.prototype.writeInt8=function(u,f,b){return u=+u,f=f>>>0,b||Ce(this,u,f,1,127,-128),u<0&&(u=255+u+1),this[f]=u&255,f+1},s.prototype.writeInt16LE=function(u,f,b){return u=+u,f=f>>>0,b||Ce(this,u,f,2,32767,-32768),this[f]=u&255,this[f+1]=u>>>8,f+2},s.prototype.writeInt16BE=function(u,f,b){return u=+u,f=f>>>0,b||Ce(this,u,f,2,32767,-32768),this[f]=u>>>8,this[f+1]=u&255,f+2},s.prototype.writeInt32LE=function(u,f,b){return u=+u,f=f>>>0,b||Ce(this,u,f,4,2147483647,-2147483648),this[f]=u&255,this[f+1]=u>>>8,this[f+2]=u>>>16,this[f+3]=u>>>24,f+4},s.prototype.writeInt32BE=function(u,f,b){return u=+u,f=f>>>0,b||Ce(this,u,f,4,2147483647,-2147483648),u<0&&(u=4294967295+u+1),this[f]=u>>>24,this[f+1]=u>>>16,this[f+2]=u>>>8,this[f+3]=u&255,f+4},s.prototype.writeBigInt64LE=Mt(function(u,f=0){return vl(this,u,f,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),s.prototype.writeBigInt64BE=Mt(function(u,f=0){return El(this,u,f,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});function Sl(p,u,f,b,A,T){if(f+b>p.length)throw new RangeError("Index out of range");if(f<0)throw new RangeError("Index out of range")}function Al(p,u,f,b,A){return u=+u,f=f>>>0,A||Sl(p,u,f,4),e.write(p,u,f,b,23,4),f+4}s.prototype.writeFloatLE=function(u,f,b){return Al(this,u,f,!0,b)},s.prototype.writeFloatBE=function(u,f,b){return Al(this,u,f,!1,b)};function Il(p,u,f,b,A){return u=+u,f=f>>>0,A||Sl(p,u,f,8),e.write(p,u,f,b,52,8),f+8}s.prototype.writeDoubleLE=function(u,f,b){return Il(this,u,f,!0,b)},s.prototype.writeDoubleBE=function(u,f,b){return Il(this,u,f,!1,b)},s.prototype.copy=function(u,f,b,A){if(!s.isBuffer(u))throw new TypeError("argument should be a Buffer");if(b||(b=0),!A&&A!==0&&(A=this.length),f>=u.length&&(f=u.length),f||(f=0),A>0&&A=this.length)throw new RangeError("Index out of range");if(A<0)throw new RangeError("sourceEnd out of bounds");A>this.length&&(A=this.length),u.length-f>>0,b=b===void 0?this.length:b>>>0,u||(u=0);let T;if(typeof u=="number")for(T=f;T2**32?A=Tl(String(f)):typeof f=="bigint"&&(A=String(f),(f>BigInt(2)**BigInt(32)||f<-(BigInt(2)**BigInt(32)))&&(A=Tl(A)),A+="n"),b+=` It must be ${u}. Received ${A}`,b},RangeError);function Tl(p){let u="",f=p.length,b=p[0]==="-"?1:0;for(;f>=b+4;f-=3)u=`_${p.slice(f-3,f)}${u}`;return `${p.slice(0,f)}${u}`}function jg(p,u,f){Mr(u,"offset"),(p[u]===void 0||p[u+f]===void 0)&&fi(u,p.length-(f+1));}function Rl(p,u,f,b,A,T){if(p>f||p= 0${P} and < 2${P} ** ${(T+1)*8}${P}`:$=`>= -(2${P} ** ${(T+1)*8-1}${P}) and < 2 ** ${(T+1)*8-1}${P}`,new xr.ERR_OUT_OF_RANGE("value",$,p)}jg(b,A,T);}function Mr(p,u){if(typeof p!="number")throw new xr.ERR_INVALID_ARG_TYPE(u,"number",p)}function fi(p,u,f){throw Math.floor(p)!==p?(Mr(p,f),new xr.ERR_OUT_OF_RANGE("offset","an integer",p)):u<0?new xr.ERR_BUFFER_OUT_OF_BOUNDS:new xr.ERR_OUT_OF_RANGE("offset",`>= ${0} and <= ${u}`,p)}let Fg=/[^+/0-9A-Za-z-_]/g;function Wg(p){if(p=p.split("=")[0],p=p.trim().replace(Fg,""),p.length<2)return "";for(;p.length%4!==0;)p=p+"=";return p}function ps(p,u){u=u||1/0;let f,b=p.length,A=null,T=[];for(let P=0;P55295&&f<57344){if(!A){if(f>56319){(u-=3)>-1&&T.push(239,191,189);continue}else if(P+1===b){(u-=3)>-1&&T.push(239,191,189);continue}A=f;continue}if(f<56320){(u-=3)>-1&&T.push(239,191,189),A=f;continue}f=(A-55296<<10|f-56320)+65536;}else A&&(u-=3)>-1&&T.push(239,191,189);if(A=null,f<128){if((u-=1)<0)break;T.push(f);}else if(f<2048){if((u-=2)<0)break;T.push(f>>6|192,f&63|128);}else if(f<65536){if((u-=3)<0)break;T.push(f>>12|224,f>>6&63|128,f&63|128);}else if(f<1114112){if((u-=4)<0)break;T.push(f>>18|240,f>>12&63|128,f>>6&63|128,f&63|128);}else throw new Error("Invalid code point")}return T}function $g(p){let u=[];for(let f=0;f>8,A=f%256,T.push(A),T.push(b);return T}function Cl(p){return t.toByteArray(Wg(p))}function ji(p,u,f,b){let A;for(A=0;A=u.length||A>=p.length);++A)u[A+f]=p[A];return A}function Ye(p,u){return p instanceof u||p!=null&&p.constructor!=null&&p.constructor.name!=null&&p.constructor.name===u.name}function gs(p){return p!==p}let Vg=function(){let p="0123456789abcdef",u=new Array(256);for(let f=0;f<16;++f){let b=f*16;for(let A=0;A<16;++A)u[b+A]=p[f]+p[A];}return u}();function Mt(p){return typeof BigInt>"u"?zg:p}function zg(){throw new Error("BigInt not supported")}return Zt}var ci,Vu,Hi,zu,Zt,Ku,Ut,x,ty,ry,be=_e(()=>{_();v();m();ci={},Vu=!1;Hi={},zu=!1;Zt={},Ku=!1;Ut=ey();Ut.Buffer;Ut.SlowBuffer;Ut.INSPECT_MAX_BYTES;Ut.kMaxLength;x=Ut.Buffer,ty=Ut.INSPECT_MAX_BYTES,ry=Ut.kMaxLength;});var v=_e(()=>{be();});var Gu=M(vs=>{_();v();m();Object.defineProperty(vs,"__esModule",{value:!0});var ms=class{constructor(e){this.aliasToTopic={},this.max=e;}put(e,r){return r===0||r>this.max?!1:(this.aliasToTopic[r]=e,this.length=Object.keys(this.aliasToTopic).length,!0)}getTopicByAlias(e){return this.aliasToTopic[e]}clear(){this.aliasToTopic={};}};vs.default=ms;});var ce=M((xA,Qu)=>{_();v();m();Qu.exports={ArrayIsArray(t){return Array.isArray(t)},ArrayPrototypeIncludes(t,e){return t.includes(e)},ArrayPrototypeIndexOf(t,e){return t.indexOf(e)},ArrayPrototypeJoin(t,e){return t.join(e)},ArrayPrototypeMap(t,e){return t.map(e)},ArrayPrototypePop(t,e){return t.pop(e)},ArrayPrototypePush(t,e){return t.push(e)},ArrayPrototypeSlice(t,e,r){return t.slice(e,r)},Error,FunctionPrototypeCall(t,e,...r){return t.call(e,...r)},FunctionPrototypeSymbolHasInstance(t,e){return Function.prototype[Symbol.hasInstance].call(t,e)},MathFloor:Math.floor,Number,NumberIsInteger:Number.isInteger,NumberIsNaN:Number.isNaN,NumberMAX_SAFE_INTEGER:Number.MAX_SAFE_INTEGER,NumberMIN_SAFE_INTEGER:Number.MIN_SAFE_INTEGER,NumberParseInt:Number.parseInt,ObjectDefineProperties(t,e){return Object.defineProperties(t,e)},ObjectDefineProperty(t,e,r){return Object.defineProperty(t,e,r)},ObjectGetOwnPropertyDescriptor(t,e){return Object.getOwnPropertyDescriptor(t,e)},ObjectKeys(t){return Object.keys(t)},ObjectSetPrototypeOf(t,e){return Object.setPrototypeOf(t,e)},Promise,PromisePrototypeCatch(t,e){return t.catch(e)},PromisePrototypeThen(t,e,r){return t.then(e,r)},PromiseReject(t){return Promise.reject(t)},ReflectApply:Reflect.apply,RegExpPrototypeTest(t,e){return t.test(e)},SafeSet:Set,String,StringPrototypeSlice(t,e,r){return t.slice(e,r)},StringPrototypeToLowerCase(t){return t.toLowerCase()},StringPrototypeToUpperCase(t){return t.toUpperCase()},StringPrototypeTrim(t){return t.trim()},Symbol,SymbolFor:Symbol.for,SymbolAsyncIterator:Symbol.asyncIterator,SymbolHasInstance:Symbol.hasInstance,SymbolIterator:Symbol.iterator,TypedArrayPrototypeSet(t,e,r){return t.set(e,r)},Uint8Array};});var Je=M(($A,Ss)=>{_();v();m();var iy=(be(),X(me)),ny=Object.getPrototypeOf(async function(){}).constructor,Yu=globalThis.Blob||iy.Blob,sy=typeof Yu<"u"?function(e){return e instanceof Yu}:function(e){return !1},Es=class extends Error{constructor(e){if(!Array.isArray(e))throw new TypeError(`Expected input to be an Array, got ${typeof e}`);let r="";for(let i=0;i{t=i,e=n;}),resolve:t,reject:e}},promisify(t){return new Promise((e,r)=>{t((i,...n)=>i?r(i):e(...n));})},debuglog(){return function(){}},format(t,...e){return t.replace(/%([sdifj])/g,function(...[r,i]){let n=e.shift();return i==="f"?n.toFixed(6):i==="j"?JSON.stringify(n):i==="s"&&typeof n=="object"?`${n.constructor!==Object?n.constructor.name:""} {}`.trim():n.toString()})},inspect(t){switch(typeof t){case"string":if(t.includes("'"))if(t.includes('"')){if(!t.includes("`")&&!t.includes("${"))return `\`${t}\``}else return `"${t}"`;return `'${t}'`;case"number":return isNaN(t)?"NaN":Object.is(t,-0)?String(t):t;case"bigint":return `${String(t)}n`;case"boolean":case"undefined":return String(t);case"object":return "{}"}},types:{isAsyncFunction(t){return t instanceof ny},isArrayBufferView(t){return ArrayBuffer.isView(t)}},isBlob:sy};Ss.exports.promisify.custom=Symbol.for("nodejs.util.promisify.custom");});var zi=M((ZA,Vi)=>{_();v();m();var{AbortController:Ju,AbortSignal:oy}=typeof self<"u"?self:typeof window<"u"?window:void 0;Vi.exports=Ju;Vi.exports.AbortSignal=oy;Vi.exports.default=Ju;});var Ae=M((uI,ef)=>{_();v();m();var{format:ay,inspect:Ki,AggregateError:ly}=Je(),uy=globalThis.AggregateError||ly,fy=Symbol("kIsNodeError"),cy=["string","function","number","object","Function","Object","boolean","bigint","symbol"],hy=/^([A-Z][a-z0-9]*)+$/,dy="__node_internal_",Gi={};function er(t,e){if(!t)throw new Gi.ERR_INTERNAL_ASSERTION(e)}function Xu(t){let e="",r=t.length,i=t[0]==="-"?1:0;for(;r>=i+4;r-=3)e=`_${t.slice(r-3,r)}${e}`;return `${t.slice(0,r)}${e}`}function py(t,e,r){if(typeof e=="function")return er(e.length<=r.length,`Code: ${t}; The provided arguments length (${r.length}) does not match the required ones (${e.length}).`),e(...r);let i=(e.match(/%[dfijoOs]/g)||[]).length;return er(i===r.length,`Code: ${t}; The provided arguments length (${r.length}) does not match the required ones (${i}).`),r.length===0?e:ay(e,...r)}function ve(t,e,r){r||(r=Error);class i extends r{constructor(...o){super(py(t,e,o));}toString(){return `${this.name} [${t}]: ${this.message}`}}Object.defineProperties(i.prototype,{name:{value:r.name,writable:!0,enumerable:!1,configurable:!0},toString:{value(){return `${this.name} [${t}]: ${this.message}`},writable:!0,enumerable:!1,configurable:!0}}),i.prototype.code=t,i.prototype[fy]=!0,Gi[t]=i;}function Zu(t){let e=dy+t.name;return Object.defineProperty(t,"name",{value:e}),t}function gy(t,e){if(t&&e&&t!==e){if(Array.isArray(e.errors))return e.errors.push(t),e;let r=new uy([e,t],e.message);return r.code=e.code,r}return t||e}var As=class extends Error{constructor(e="The operation was aborted",r=void 0){if(r!==void 0&&typeof r!="object")throw new Gi.ERR_INVALID_ARG_TYPE("options","Object",r);super(e,r),this.code="ABORT_ERR",this.name="AbortError";}};ve("ERR_ASSERTION","%s",Error);ve("ERR_INVALID_ARG_TYPE",(t,e,r)=>{er(typeof t=="string","'name' must be a string"),Array.isArray(e)||(e=[e]);let i="The ";t.endsWith(" argument")?i+=`${t} `:i+=`"${t}" ${t.includes(".")?"property":"argument"} `,i+="must be ";let n=[],o=[],s=[];for(let l of e)er(typeof l=="string","All expected entries have to be of type string"),cy.includes(l)?n.push(l.toLowerCase()):hy.test(l)?o.push(l):(er(l!=="object",'The value "object" should be written as "Object"'),s.push(l));if(o.length>0){let l=n.indexOf("object");l!==-1&&(n.splice(n,l,1),o.push("Object"));}if(n.length>0){switch(n.length){case 1:i+=`of type ${n[0]}`;break;case 2:i+=`one of type ${n[0]} or ${n[1]}`;break;default:{let l=n.pop();i+=`one of type ${n.join(", ")}, or ${l}`;}}(o.length>0||s.length>0)&&(i+=" or ");}if(o.length>0){switch(o.length){case 1:i+=`an instance of ${o[0]}`;break;case 2:i+=`an instance of ${o[0]} or ${o[1]}`;break;default:{let l=o.pop();i+=`an instance of ${o.join(", ")}, or ${l}`;}}s.length>0&&(i+=" or ");}switch(s.length){case 0:break;case 1:s[0].toLowerCase()!==s[0]&&(i+="an "),i+=`${s[0]}`;break;case 2:i+=`one of ${s[0]} or ${s[1]}`;break;default:{let l=s.pop();i+=`one of ${s.join(", ")}, or ${l}`;}}if(r==null)i+=`. Received ${r}`;else if(typeof r=="function"&&r.name)i+=`. Received function ${r.name}`;else if(typeof r=="object"){var a;if((a=r.constructor)!==null&&a!==void 0&&a.name)i+=`. Received an instance of ${r.constructor.name}`;else {let l=Ki(r,{depth:-1});i+=`. Received ${l}`;}}else {let l=Ki(r,{colors:!1});l.length>25&&(l=`${l.slice(0,25)}...`),i+=`. Received type ${typeof r} (${l})`;}return i},TypeError);ve("ERR_INVALID_ARG_VALUE",(t,e,r="is invalid")=>{let i=Ki(e);return i.length>128&&(i=i.slice(0,128)+"..."),`The ${t.includes(".")?"property":"argument"} '${t}' ${r}. Received ${i}`},TypeError);ve("ERR_INVALID_RETURN_VALUE",(t,e,r)=>{var i;let n=r!=null&&(i=r.constructor)!==null&&i!==void 0&&i.name?`instance of ${r.constructor.name}`:`type ${typeof r}`;return `Expected ${t} to be returned from the "${e}" function but got ${n}.`},TypeError);ve("ERR_MISSING_ARGS",(...t)=>{er(t.length>0,"At least one arg needs to be specified");let e,r=t.length;switch(t=(Array.isArray(t)?t:[t]).map(i=>`"${i}"`).join(" or "),r){case 1:e+=`The ${t[0]} argument`;break;case 2:e+=`The ${t[0]} and ${t[1]} arguments`;break;default:{let i=t.pop();e+=`The ${t.join(", ")}, and ${i} arguments`;}break}return `${e} must be specified`},TypeError);ve("ERR_OUT_OF_RANGE",(t,e,r)=>{er(e,'Missing "range" argument');let i;return Number.isInteger(r)&&Math.abs(r)>2**32?i=Xu(String(r)):typeof r=="bigint"?(i=String(r),(r>2n**32n||r<-(2n**32n))&&(i=Xu(i)),i+="n"):i=Ki(r),`The value of "${t}" is out of range. It must be ${e}. Received ${i}`},RangeError);ve("ERR_MULTIPLE_CALLBACK","Callback called multiple times",Error);ve("ERR_METHOD_NOT_IMPLEMENTED","The %s method is not implemented",Error);ve("ERR_STREAM_ALREADY_FINISHED","Cannot call %s after a stream was finished",Error);ve("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable",Error);ve("ERR_STREAM_DESTROYED","Cannot call %s after a stream was destroyed",Error);ve("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError);ve("ERR_STREAM_PREMATURE_CLOSE","Premature close",Error);ve("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF",Error);ve("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event",Error);ve("ERR_STREAM_WRITE_AFTER_END","write after end",Error);ve("ERR_UNKNOWN_ENCODING","Unknown encoding: %s",TypeError);ef.exports={AbortError:As,aggregateTwoErrors:Zu(gy),hideStackFrames:Zu,codes:Gi};});var hi=M((_I,ff)=>{_();v();m();var{ArrayIsArray:Ts,ArrayPrototypeIncludes:sf,ArrayPrototypeJoin:of,ArrayPrototypeMap:yy,NumberIsInteger:Rs,NumberIsNaN:by,NumberMAX_SAFE_INTEGER:wy,NumberMIN_SAFE_INTEGER:_y,NumberParseInt:my,ObjectPrototypeHasOwnProperty:vy,RegExpPrototypeExec:af,String:Ey,StringPrototypeToUpperCase:Sy,StringPrototypeTrim:Ay}=ce(),{hideStackFrames:Ue,codes:{ERR_SOCKET_BAD_PORT:Iy,ERR_INVALID_ARG_TYPE:Ie,ERR_INVALID_ARG_VALUE:Ur,ERR_OUT_OF_RANGE:tr,ERR_UNKNOWN_SIGNAL:tf}}=Ae(),{normalizeEncoding:Ty}=Je(),{isAsyncFunction:Ry,isArrayBufferView:Cy}=Je().types,rf={};function By(t){return t===(t|0)}function Py(t){return t===t>>>0}var ky=/^[0-7]+$/,Oy="must be a 32-bit unsigned integer or an octal string";function xy(t,e,r){if(typeof t>"u"&&(t=r),typeof t=="string"){if(af(ky,t)===null)throw new Ur(e,t,Oy);t=my(t,8);}return lf(t,e),t}var My=Ue((t,e,r=_y,i=wy)=>{if(typeof t!="number")throw new Ie(e,"number",t);if(!Rs(t))throw new tr(e,"an integer",t);if(ti)throw new tr(e,`>= ${r} && <= ${i}`,t)}),Ly=Ue((t,e,r=-2147483648,i=2147483647)=>{if(typeof t!="number")throw new Ie(e,"number",t);if(!Rs(t))throw new tr(e,"an integer",t);if(ti)throw new tr(e,`>= ${r} && <= ${i}`,t)}),lf=Ue((t,e,r=!1)=>{if(typeof t!="number")throw new Ie(e,"number",t);if(!Rs(t))throw new tr(e,"an integer",t);let i=r?1:0,n=4294967295;if(tn)throw new tr(e,`>= ${i} && <= ${n}`,t)});function Cs(t,e){if(typeof t!="string")throw new Ie(e,"string",t)}function Uy(t,e,r=void 0,i){if(typeof t!="number")throw new Ie(e,"number",t);if(r!=null&&ti||(r!=null||i!=null)&&by(t))throw new tr(e,`${r!=null?`>= ${r}`:""}${r!=null&&i!=null?" && ":""}${i!=null?`<= ${i}`:""}`,t)}var Ny=Ue((t,e,r)=>{if(!sf(r,t)){let n="must be one of: "+of(yy(r,o=>typeof o=="string"?`'${o}'`:Ey(o)),", ");throw new Ur(e,t,n)}});function uf(t,e){if(typeof t!="boolean")throw new Ie(e,"boolean",t)}function Is(t,e,r){return t==null||!vy(t,e)?r:t[e]}var qy=Ue((t,e,r=null)=>{let i=Is(r,"allowArray",!1),n=Is(r,"allowFunction",!1);if(!Is(r,"nullable",!1)&&t===null||!i&&Ts(t)||typeof t!="object"&&(!n||typeof t!="function"))throw new Ie(e,"Object",t)}),Dy=Ue((t,e)=>{if(t!=null&&typeof t!="object"&&typeof t!="function")throw new Ie(e,"a dictionary",t)}),Bs=Ue((t,e,r=0)=>{if(!Ts(t))throw new Ie(e,"Array",t);if(t.length{if(!Cy(t))throw new Ie(e,["Buffer","TypedArray","DataView"],t)});function Hy(t,e){let r=Ty(e),i=t.length;if(r==="hex"&&i%2!==0)throw new Ur("encoding",e,`is invalid for data of length ${i}`)}function Vy(t,e="Port",r=!0){if(typeof t!="number"&&typeof t!="string"||typeof t=="string"&&Ay(t).length===0||+t!==+t>>>0||t>65535||t===0&&!r)throw new Iy(e,t,r);return t|0}var zy=Ue((t,e)=>{if(t!==void 0&&(t===null||typeof t!="object"||!("aborted"in t)))throw new Ie(e,"AbortSignal",t)}),Ky=Ue((t,e)=>{if(typeof t!="function")throw new Ie(e,"Function",t)}),Gy=Ue((t,e)=>{if(typeof t!="function"||Ry(t))throw new Ie(e,"Function",t)}),Qy=Ue((t,e)=>{if(t!==void 0)throw new Ie(e,"undefined",t)});function Yy(t,e,r){if(!sf(r,t))throw new Ie(e,`('${of(r,"|")}')`,t)}var Jy=/^(?:<[^>]*>)(?:\s*;\s*[^;"\s]+(?:=(")?[^;"\s]*\1)?)*$/;function nf(t,e){if(typeof t>"u"||!af(Jy,t))throw new Ur(e,t,'must be an array or string of format "; rel=preload; as=style"')}function Xy(t){if(typeof t=="string")return nf(t,"hints"),t;if(Ts(t)){let e=t.length,r="";if(e===0)return r;for(let i=0;i; rel=preload; as=style"')}ff.exports={isInt32:By,isUint32:Py,parseFileMode:xy,validateArray:Bs,validateStringArray:jy,validateBooleanArray:Fy,validateBoolean:uf,validateBuffer:$y,validateDictionary:Dy,validateEncoding:Hy,validateFunction:Ky,validateInt32:Ly,validateInteger:My,validateNumber:Uy,validateObject:qy,validateOneOf:Ny,validatePlainFunction:Gy,validatePort:Vy,validateSignalName:Wy,validateString:Cs,validateUint32:lf,validateUndefined:Qy,validateUnion:Yy,validateAbortSignal:zy,validateLinkHeaderValue:Xy};});var Nt=M((BI,pf)=>{_();v();m();var ae=pf.exports={},Xe,Ze;function Ps(){throw new Error("setTimeout has not been defined")}function ks(){throw new Error("clearTimeout has not been defined")}(function(){try{typeof setTimeout=="function"?Xe=setTimeout:Xe=Ps;}catch{Xe=Ps;}try{typeof clearTimeout=="function"?Ze=clearTimeout:Ze=ks;}catch{Ze=ks;}})();function cf(t){if(Xe===setTimeout)return setTimeout(t,0);if((Xe===Ps||!Xe)&&setTimeout)return Xe=setTimeout,setTimeout(t,0);try{return Xe(t,0)}catch{try{return Xe.call(null,t,0)}catch{return Xe.call(this,t,0)}}}function Zy(t){if(Ze===clearTimeout)return clearTimeout(t);if((Ze===ks||!Ze)&&clearTimeout)return Ze=clearTimeout,clearTimeout(t);try{return Ze(t)}catch{try{return Ze.call(null,t)}catch{return Ze.call(this,t)}}}var _t=[],Nr=!1,rr,Qi=-1;function eb(){!Nr||!rr||(Nr=!1,rr.length?_t=rr.concat(_t):Qi=-1,_t.length&&hf());}function hf(){if(!Nr){var t=cf(eb);Nr=!0;for(var e=_t.length;e;){for(rr=_t,_t=[];++Qi1)for(var r=1;r{_();v();m();var{Symbol:Yi,SymbolAsyncIterator:gf,SymbolIterator:yf,SymbolFor:bf}=ce(),wf=Yi("kDestroyed"),_f=Yi("kIsErrored"),Os=Yi("kIsReadable"),mf=Yi("kIsDisturbed"),tb=bf("nodejs.webstream.isClosedPromise"),rb=bf("nodejs.webstream.controllerErrorFunction");function Ji(t,e=!1){var r;return !!(t&&typeof t.pipe=="function"&&typeof t.on=="function"&&(!e||typeof t.pause=="function"&&typeof t.resume=="function")&&(!t._writableState||((r=t._readableState)===null||r===void 0?void 0:r.readable)!==!1)&&(!t._writableState||t._readableState))}function Xi(t){var e;return !!(t&&typeof t.write=="function"&&typeof t.on=="function"&&(!t._readableState||((e=t._writableState)===null||e===void 0?void 0:e.writable)!==!1))}function ib(t){return !!(t&&typeof t.pipe=="function"&&t._readableState&&typeof t.on=="function"&&typeof t.write=="function")}function et(t){return t&&(t._readableState||t._writableState||typeof t.write=="function"&&typeof t.on=="function"||typeof t.pipe=="function"&&typeof t.on=="function")}function vf(t){return !!(t&&!et(t)&&typeof t.pipeThrough=="function"&&typeof t.getReader=="function"&&typeof t.cancel=="function")}function Ef(t){return !!(t&&!et(t)&&typeof t.getWriter=="function"&&typeof t.abort=="function")}function Sf(t){return !!(t&&!et(t)&&typeof t.readable=="object"&&typeof t.writable=="object")}function nb(t){return vf(t)||Ef(t)||Sf(t)}function sb(t,e){return t==null?!1:e===!0?typeof t[gf]=="function":e===!1?typeof t[yf]=="function":typeof t[gf]=="function"||typeof t[yf]=="function"}function Zi(t){if(!et(t))return null;let e=t._writableState,r=t._readableState,i=e||r;return !!(t.destroyed||t[wf]||i!=null&&i.destroyed)}function Af(t){if(!Xi(t))return null;if(t.writableEnded===!0)return !0;let e=t._writableState;return e!=null&&e.errored?!1:typeof e?.ended!="boolean"?null:e.ended}function ob(t,e){if(!Xi(t))return null;if(t.writableFinished===!0)return !0;let r=t._writableState;return r!=null&&r.errored?!1:typeof r?.finished!="boolean"?null:!!(r.finished||e===!1&&r.ended===!0&&r.length===0)}function ab(t){if(!Ji(t))return null;if(t.readableEnded===!0)return !0;let e=t._readableState;return !e||e.errored?!1:typeof e?.ended!="boolean"?null:e.ended}function If(t,e){if(!Ji(t))return null;let r=t._readableState;return r!=null&&r.errored?!1:typeof r?.endEmitted!="boolean"?null:!!(r.endEmitted||e===!1&&r.ended===!0&&r.length===0)}function Tf(t){return t&&t[Os]!=null?t[Os]:typeof t?.readable!="boolean"?null:Zi(t)?!1:Ji(t)&&t.readable&&!If(t)}function Rf(t){return typeof t?.writable!="boolean"?null:Zi(t)?!1:Xi(t)&&t.writable&&!Af(t)}function lb(t,e){return et(t)?Zi(t)?!0:!(e?.readable!==!1&&Tf(t)||e?.writable!==!1&&Rf(t)):null}function ub(t){var e,r;return et(t)?t.writableErrored?t.writableErrored:(e=(r=t._writableState)===null||r===void 0?void 0:r.errored)!==null&&e!==void 0?e:null:null}function fb(t){var e,r;return et(t)?t.readableErrored?t.readableErrored:(e=(r=t._readableState)===null||r===void 0?void 0:r.errored)!==null&&e!==void 0?e:null:null}function cb(t){if(!et(t))return null;if(typeof t.closed=="boolean")return t.closed;let e=t._writableState,r=t._readableState;return typeof e?.closed=="boolean"||typeof r?.closed=="boolean"?e?.closed||r?.closed:typeof t._closed=="boolean"&&Cf(t)?t._closed:null}function Cf(t){return typeof t._closed=="boolean"&&typeof t._defaultKeepAlive=="boolean"&&typeof t._removedConnection=="boolean"&&typeof t._removedContLen=="boolean"}function Bf(t){return typeof t._sent100=="boolean"&&Cf(t)}function hb(t){var e;return typeof t._consuming=="boolean"&&typeof t._dumped=="boolean"&&((e=t.req)===null||e===void 0?void 0:e.upgradeOrConnect)===void 0}function db(t){if(!et(t))return null;let e=t._writableState,r=t._readableState,i=e||r;return !i&&Bf(t)||!!(i&&i.autoDestroy&&i.emitClose&&i.closed===!1)}function pb(t){var e;return !!(t&&((e=t[mf])!==null&&e!==void 0?e:t.readableDidRead||t.readableAborted))}function gb(t){var e,r,i,n,o,s,a,l,c,h;return !!(t&&((e=(r=(i=(n=(o=(s=t[_f])!==null&&s!==void 0?s:t.readableErrored)!==null&&o!==void 0?o:t.writableErrored)!==null&&n!==void 0?n:(a=t._readableState)===null||a===void 0?void 0:a.errorEmitted)!==null&&i!==void 0?i:(l=t._writableState)===null||l===void 0?void 0:l.errorEmitted)!==null&&r!==void 0?r:(c=t._readableState)===null||c===void 0?void 0:c.errored)!==null&&e!==void 0?e:!((h=t._writableState)===null||h===void 0)&&h.errored))}Pf.exports={kDestroyed:wf,isDisturbed:pb,kIsDisturbed:mf,isErrored:gb,kIsErrored:_f,isReadable:Tf,kIsReadable:Os,kIsClosedPromise:tb,kControllerErrorFunction:rb,isClosed:cb,isDestroyed:Zi,isDuplexNodeStream:ib,isFinished:lb,isIterable:sb,isReadableNodeStream:Ji,isReadableStream:vf,isReadableEnded:ab,isReadableFinished:If,isReadableErrored:fb,isNodeStream:et,isWebStream:nb,isWritable:Rf,isWritableNodeStream:Xi,isWritableStream:Ef,isWritableEnded:Af,isWritableFinished:ob,isWritableErrored:ub,isServerRequest:hb,isServerResponse:Bf,willEmitClose:db,isTransformStream:Sf};});var vt=M((QI,Ns)=>{_();v();m();var qt=Nt(),{AbortError:Df,codes:yb}=Ae(),{ERR_INVALID_ARG_TYPE:bb,ERR_STREAM_PREMATURE_CLOSE:kf}=yb,{kEmptyObject:Ms,once:Ls}=Je(),{validateAbortSignal:wb,validateFunction:_b,validateObject:mb,validateBoolean:vb}=hi(),{Promise:Eb,PromisePrototypeThen:Sb}=ce(),{isClosed:Ab,isReadable:Of,isReadableNodeStream:xs,isReadableStream:Ib,isReadableFinished:xf,isReadableErrored:Mf,isWritable:Lf,isWritableNodeStream:Uf,isWritableStream:Tb,isWritableFinished:Nf,isWritableErrored:qf,isNodeStream:Rb,willEmitClose:Cb,kIsClosedPromise:Bb}=tt();function Pb(t){return t.setHeader&&typeof t.abort=="function"}var Us=()=>{};function jf(t,e,r){var i,n;if(arguments.length===2?(r=e,e=Ms):e==null?e=Ms:mb(e,"options"),_b(r,"callback"),wb(e.signal,"options.signal"),r=Ls(r),Ib(t)||Tb(t))return kb(t,e,r);if(!Rb(t))throw new bb("stream",["ReadableStream","WritableStream","Stream"],t);let o=(i=e.readable)!==null&&i!==void 0?i:xs(t),s=(n=e.writable)!==null&&n!==void 0?n:Uf(t),a=t._writableState,l=t._readableState,c=()=>{t.writable||g();},h=Cb(t)&&xs(t)===o&&Uf(t)===s,d=Nf(t,!1),g=()=>{d=!0,t.destroyed&&(h=!1),!(h&&(!t.readable||o))&&(!o||y)&&r.call(t);},y=xf(t,!1),w=()=>{y=!0,t.destroyed&&(h=!1),!(h&&(!t.writable||s))&&(!s||d)&&r.call(t);},S=N=>{r.call(t,N);},E=Ab(t),I=()=>{E=!0;let N=qf(t)||Mf(t);if(N&&typeof N!="boolean")return r.call(t,N);if(o&&!y&&xs(t,!0)&&!xf(t,!1))return r.call(t,new kf);if(s&&!d&&!Nf(t,!1))return r.call(t,new kf);r.call(t);},C=()=>{E=!0;let N=qf(t)||Mf(t);if(N&&typeof N!="boolean")return r.call(t,N);r.call(t);},R=()=>{t.req.on("finish",g);};Pb(t)?(t.on("complete",g),h||t.on("abort",I),t.req?R():t.on("request",R)):s&&!a&&(t.on("end",c),t.on("close",c)),!h&&typeof t.aborted=="boolean"&&t.on("aborted",I),t.on("end",w),t.on("finish",g),e.error!==!1&&t.on("error",S),t.on("close",I),E?qt.nextTick(I):a!=null&&a.errorEmitted||l!=null&&l.errorEmitted?h||qt.nextTick(C):(!o&&(!h||Of(t))&&(d||Lf(t)===!1)||!s&&(!h||Lf(t))&&(y||Of(t)===!1)||l&&t.req&&t.aborted)&&qt.nextTick(C);let U=()=>{r=Us,t.removeListener("aborted",I),t.removeListener("complete",g),t.removeListener("abort",I),t.removeListener("request",R),t.req&&t.req.removeListener("finish",g),t.removeListener("end",c),t.removeListener("close",c),t.removeListener("finish",g),t.removeListener("end",w),t.removeListener("error",S),t.removeListener("close",I);};if(e.signal&&!E){let N=()=>{let W=r;U(),W.call(t,new Df(void 0,{cause:e.signal.reason}));};if(e.signal.aborted)qt.nextTick(N);else {let W=r;r=Ls((...K)=>{e.signal.removeEventListener("abort",N),W.apply(t,K);}),e.signal.addEventListener("abort",N);}}return U}function kb(t,e,r){let i=!1,n=Us;if(e.signal)if(n=()=>{i=!0,r.call(t,new Df(void 0,{cause:e.signal.reason}));},e.signal.aborted)qt.nextTick(n);else {let s=r;r=Ls((...a)=>{e.signal.removeEventListener("abort",n),s.apply(t,a);}),e.signal.addEventListener("abort",n);}let o=(...s)=>{i||qt.nextTick(()=>r.apply(t,s));};return Sb(t[Bb].promise,o,o),Us}function Ob(t,e){var r;let i=!1;return e===null&&(e=Ms),(r=e)!==null&&r!==void 0&&r.cleanup&&(vb(e.cleanup,"cleanup"),i=e.cleanup),new Eb((n,o)=>{let s=jf(t,e,a=>{i&&s(),a?o(a):n();});})}Ns.exports=jf;Ns.exports.finished=Ob;});var ir=M((sT,Gf)=>{_();v();m();var rt=Nt(),{aggregateTwoErrors:xb,codes:{ERR_MULTIPLE_CALLBACK:Mb},AbortError:Lb}=Ae(),{Symbol:$f}=ce(),{kDestroyed:Ub,isDestroyed:Nb,isFinished:qb,isServerRequest:Db}=tt(),Hf=$f("kDestroy"),qs=$f("kConstruct");function Vf(t,e,r){t&&(t.stack,e&&!e.errored&&(e.errored=t),r&&!r.errored&&(r.errored=t));}function jb(t,e){let r=this._readableState,i=this._writableState,n=i||r;return i!=null&&i.destroyed||r!=null&&r.destroyed?(typeof e=="function"&&e(),this):(Vf(t,i,r),i&&(i.destroyed=!0),r&&(r.destroyed=!0),n.constructed?Ff(this,t,e):this.once(Hf,function(o){Ff(this,xb(o,t),e);}),this)}function Ff(t,e,r){let i=!1;function n(o){if(i)return;i=!0;let s=t._readableState,a=t._writableState;Vf(o,a,s),a&&(a.closed=!0),s&&(s.closed=!0),typeof r=="function"&&r(o),o?rt.nextTick(Fb,t,o):rt.nextTick(zf,t);}try{t._destroy(e||null,n);}catch(o){n(o);}}function Fb(t,e){Ds(t,e),zf(t);}function zf(t){let e=t._readableState,r=t._writableState;r&&(r.closeEmitted=!0),e&&(e.closeEmitted=!0),(r!=null&&r.emitClose||e!=null&&e.emitClose)&&t.emit("close");}function Ds(t,e){let r=t._readableState,i=t._writableState;i!=null&&i.errorEmitted||r!=null&&r.errorEmitted||(i&&(i.errorEmitted=!0),r&&(r.errorEmitted=!0),t.emit("error",e));}function Wb(){let t=this._readableState,e=this._writableState;t&&(t.constructed=!0,t.closed=!1,t.closeEmitted=!1,t.destroyed=!1,t.errored=null,t.errorEmitted=!1,t.reading=!1,t.ended=t.readable===!1,t.endEmitted=t.readable===!1),e&&(e.constructed=!0,e.destroyed=!1,e.closed=!1,e.closeEmitted=!1,e.errored=null,e.errorEmitted=!1,e.finalCalled=!1,e.prefinished=!1,e.ended=e.writable===!1,e.ending=e.writable===!1,e.finished=e.writable===!1);}function js(t,e,r){let i=t._readableState,n=t._writableState;if(n!=null&&n.destroyed||i!=null&&i.destroyed)return this;i!=null&&i.autoDestroy||n!=null&&n.autoDestroy?t.destroy(e):e&&(e.stack,n&&!n.errored&&(n.errored=e),i&&!i.errored&&(i.errored=e),r?rt.nextTick(Ds,t,e):Ds(t,e));}function $b(t,e){if(typeof t._construct!="function")return;let r=t._readableState,i=t._writableState;r&&(r.constructed=!1),i&&(i.constructed=!1),t.once(qs,e),!(t.listenerCount(qs)>1)&&rt.nextTick(Hb,t);}function Hb(t){let e=!1;function r(i){if(e){js(t,i??new Mb);return}e=!0;let n=t._readableState,o=t._writableState,s=o||n;n&&(n.constructed=!0),o&&(o.constructed=!0),s.destroyed?t.emit(Hf,i):i?js(t,i,!0):rt.nextTick(Vb,t);}try{t._construct(i=>{rt.nextTick(r,i);});}catch(i){rt.nextTick(r,i);}}function Vb(t){t.emit(qs);}function Wf(t){return t?.setHeader&&typeof t.abort=="function"}function Kf(t){t.emit("close");}function zb(t,e){t.emit("error",e),rt.nextTick(Kf,t);}function Kb(t,e){!t||Nb(t)||(!e&&!qb(t)&&(e=new Lb),Db(t)?(t.socket=null,t.destroy(e)):Wf(t)?t.abort():Wf(t.req)?t.req.abort():typeof t.destroy=="function"?t.destroy(e):typeof t.close=="function"?t.close():e?rt.nextTick(zb,t,e):rt.nextTick(Kf,t),t.destroyed||(t[Ub]=!0));}Gf.exports={construct:$b,destroyer:Kb,destroy:jb,undestroy:Wb,errorOrDestroy:js};});function Y(){Y.init.call(this);}function en(t){if(typeof t!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof t)}function nc(t){return t._maxListeners===void 0?Y.defaultMaxListeners:t._maxListeners}function Xf(t,e,r,i){var n,o,s,a;if(en(r),(o=t._events)===void 0?(o=t._events=Object.create(null),t._eventsCount=0):(o.newListener!==void 0&&(t.emit("newListener",e,r.listener?r.listener:r),o=t._events),s=o[e]),s===void 0)s=o[e]=r,++t._eventsCount;else if(typeof s=="function"?s=o[e]=i?[r,s]:[s,r]:i?s.unshift(r):s.push(r),(n=nc(t))>0&&s.length>n&&!s.warned){s.warned=!0;var l=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");l.name="MaxListenersExceededWarning",l.emitter=t,l.type=e,l.count=s.length,a=l,console&&console.warn&&console.warn(a);}return t}function Gb(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function Zf(t,e,r){var i={fired:!1,wrapFn:void 0,target:t,type:e,listener:r},n=Gb.bind(i);return n.listener=r,i.wrapFn=n,n}function ec(t,e,r){var i=t._events;if(i===void 0)return [];var n=i[e];return n===void 0?[]:typeof n=="function"?r?[n.listener||n]:[n]:r?function(o){for(var s=new Array(o.length),a=0;a{_();v();m();qr=typeof Reflect=="object"?Reflect:null,Qf=qr&&typeof qr.apply=="function"?qr.apply:function(t,e,r){return Function.prototype.apply.call(t,e,r)};ic=qr&&typeof qr.ownKeys=="function"?qr.ownKeys:Object.getOwnPropertySymbols?function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:function(t){return Object.getOwnPropertyNames(t)};Yf=Number.isNaN||function(t){return t!=t};rc=Y,Y.EventEmitter=Y,Y.prototype._events=void 0,Y.prototype._eventsCount=0,Y.prototype._maxListeners=void 0;Jf=10;Object.defineProperty(Y,"defaultMaxListeners",{enumerable:!0,get:function(){return Jf},set:function(t){if(typeof t!="number"||t<0||Yf(t))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+t+".");Jf=t;}}),Y.init=function(){this._events!==void 0&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0;},Y.prototype.setMaxListeners=function(t){if(typeof t!="number"||t<0||Yf(t))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+t+".");return this._maxListeners=t,this},Y.prototype.getMaxListeners=function(){return nc(this)},Y.prototype.emit=function(t){for(var e=[],r=1;r0&&(o=e[0]),o instanceof Error)throw o;var s=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw s.context=o,s}var a=n[t];if(a===void 0)return !1;if(typeof a=="function")Qf(a,this,e);else {var l=a.length,c=sc(a,l);for(r=0;r=0;o--)if(r[o]===e||r[o].listener===e){s=r[o].listener,n=o;break}if(n<0)return this;n===0?r.shift():function(a,l){for(;l+1=0;i--)this.removeListener(t,e[i]);return this},Y.prototype.listeners=function(t){return ec(this,t,!0)},Y.prototype.rawListeners=function(t){return ec(this,t,!1)},Y.listenerCount=function(t,e){return typeof t.listenerCount=="function"?t.listenerCount(e):tc.call(t,e)},Y.prototype.listenerCount=tc,Y.prototype.eventNames=function(){return this._eventsCount>0?ic(this._events):[]};Be=rc;Be.EventEmitter;Be.defaultMaxListeners;Be.init;Be.listenerCount;Be.EventEmitter;Be.defaultMaxListeners;Be.init;Be.listenerCount;});var nr={};Jt(nr,{EventEmitter:()=>Qb,default:()=>Be,defaultMaxListeners:()=>Yb,init:()=>Jb,listenerCount:()=>Xb,on:()=>Zb,once:()=>ew});var Qb,Yb,Jb,Xb,Zb,ew,sr=_e(()=>{_();v();m();Fs();Fs();Be.once=function(t,e){return new Promise((r,i)=>{function n(...s){o!==void 0&&t.removeListener("error",o),r(s);}let o;e!=="error"&&(o=s=>{t.removeListener(name,n),i(s);},t.once("error",o)),t.once(e,n);})};Be.on=function(t,e){let r=[],i=[],n=null,o=!1,s={async next(){let c=r.shift();if(c)return createIterResult(c,!1);if(n){let h=Promise.reject(n);return n=null,h}return o?createIterResult(void 0,!0):new Promise((h,d)=>i.push({resolve:h,reject:d}))},async return(){t.removeListener(e,a),t.removeListener("error",l),o=!0;for(let c of i)c.resolve(createIterResult(void 0,!0));return createIterResult(void 0,!0)},throw(c){n=c,t.removeListener(e,a),t.removeListener("error",l);},[Symbol.asyncIterator](){return this}};return t.on(e,a),t.on("error",l),s;function a(...c){let h=i.shift();h?h.resolve(createIterResult(c,!1)):r.push(c);}function l(c){o=!0;let h=i.shift();h?h.reject(c):n=c,s.return();}};({EventEmitter:Qb,defaultMaxListeners:Yb,init:Jb,listenerCount:Xb,on:Zb,once:ew}=Be);});var nn=M((UT,ac)=>{_();v();m();var{ArrayIsArray:tw,ObjectSetPrototypeOf:oc}=ce(),{EventEmitter:tn}=(sr(),X(nr));function rn(t){tn.call(this,t);}oc(rn.prototype,tn.prototype);oc(rn,tn);rn.prototype.pipe=function(t,e){let r=this;function i(h){t.writable&&t.write(h)===!1&&r.pause&&r.pause();}r.on("data",i);function n(){r.readable&&r.resume&&r.resume();}t.on("drain",n),!t._isStdio&&(!e||e.end!==!1)&&(r.on("end",s),r.on("close",a));let o=!1;function s(){o||(o=!0,t.end());}function a(){o||(o=!0,typeof t.destroy=="function"&&t.destroy());}function l(h){c(),tn.listenerCount(this,"error")===0&&this.emit("error",h);}Ws(r,"error",l),Ws(t,"error",l);function c(){r.removeListener("data",i),t.removeListener("drain",n),r.removeListener("end",s),r.removeListener("close",a),r.removeListener("error",l),t.removeListener("error",l),r.removeListener("end",c),r.removeListener("close",c),t.removeListener("close",c);}return r.on("end",c),r.on("close",c),t.on("close",c),t.emit("pipe",r),t};function Ws(t,e,r){if(typeof t.prependListener=="function")return t.prependListener(e,r);!t._events||!t._events[e]?t.on(e,r):tw(t._events[e])?t._events[e].unshift(r):t._events[e]=[r,t._events[e]];}ac.exports={Stream:rn,prependListener:Ws};});var di=M((zT,sn)=>{_();v();m();var{AbortError:lc,codes:rw}=Ae(),{isNodeStream:uc,isWebStream:iw,kControllerErrorFunction:nw}=tt(),sw=vt(),{ERR_INVALID_ARG_TYPE:fc}=rw,ow=(t,e)=>{if(typeof t!="object"||!("aborted"in t))throw new fc(e,"AbortSignal",t)};sn.exports.addAbortSignal=function(e,r){if(ow(e,"signal"),!uc(r)&&!iw(r))throw new fc("stream",["ReadableStream","WritableStream","Stream"],r);return sn.exports.addAbortSignalNoValidate(e,r)};sn.exports.addAbortSignalNoValidate=function(t,e){if(typeof t!="object"||!("aborted"in t))return e;let r=uc(e)?()=>{e.destroy(new lc(void 0,{cause:t.reason}));}:()=>{e[nw](new lc(void 0,{cause:t.reason}));};return t.aborted?r():(t.addEventListener("abort",r),sw(e,()=>t.removeEventListener("abort",r))),e};});var dc=M((i2,hc)=>{_();v();m();var{StringPrototypeSlice:cc,SymbolIterator:aw,TypedArrayPrototypeSet:on,Uint8Array:lw}=ce(),{Buffer:$s}=(be(),X(me)),{inspect:uw}=Je();hc.exports=class{constructor(){this.head=null,this.tail=null,this.length=0;}push(e){let r={data:e,next:null};this.length>0?this.tail.next=r:this.head=r,this.tail=r,++this.length;}unshift(e){let r={data:e,next:this.head};this.length===0&&(this.tail=r),this.head=r,++this.length;}shift(){if(this.length===0)return;let e=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,e}clear(){this.head=this.tail=null,this.length=0;}join(e){if(this.length===0)return "";let r=this.head,i=""+r.data;for(;(r=r.next)!==null;)i+=e+r.data;return i}concat(e){if(this.length===0)return $s.alloc(0);let r=$s.allocUnsafe(e>>>0),i=this.head,n=0;for(;i;)on(r,i.data,n),n+=i.data.length,i=i.next;return r}consume(e,r){let i=this.head.data;if(eo.length)r+=o,e-=o.length;else {e===o.length?(r+=o,++n,i.next?this.head=i.next:this.head=this.tail=null):(r+=cc(o,0,e),this.head=i,i.data=cc(o,e));break}++n;}while((i=i.next)!==null);return this.length-=n,r}_getBuffer(e){let r=$s.allocUnsafe(e),i=e,n=this.head,o=0;do{let s=n.data;if(e>s.length)on(r,s,i-e),e-=s.length;else {e===s.length?(on(r,s,i-e),++o,n.next?this.head=n.next:this.head=this.tail=null):(on(r,new lw(s.buffer,s.byteOffset,e),i-e),this.head=n,n.data=s.slice(e));break}++o;}while((n=n.next)!==null);return this.length-=o,r}[Symbol.for("nodejs.util.inspect.custom")](e,r){return uw(this,{...r,depth:0,customInspect:!1})}};});var an=M((d2,gc)=>{_();v();m();var{MathFloor:fw,NumberIsInteger:cw}=ce(),{ERR_INVALID_ARG_VALUE:hw}=Ae().codes;function dw(t,e,r){return t.highWaterMark!=null?t.highWaterMark:e?t[r]:null}function pc(t){return t?16:16*1024}function pw(t,e,r,i){let n=dw(e,i,r);if(n!=null){if(!cw(n)||n<0){let o=i?`options.${r}`:"options.highWaterMark";throw new hw(o,n)}return fw(n)}return pc(t.objectMode)}gc.exports={getHighWaterMark:pw,getDefaultHighWaterMark:pc};});function wc(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return r===-1&&(r=e),[r,r===e?0:4-r%4]}function gw(t,e,r){for(var i,n,o=[],s=e;s>18&63]+$e[n>>12&63]+$e[n>>6&63]+$e[63&n]);return o.join("")}function Et(t){if(t>2147483647)throw new RangeError('The value "'+t+'" is invalid for option "size"');var e=new Uint8Array(t);return Object.setPrototypeOf(e,O.prototype),e}function O(t,e,r){if(typeof t=="number"){if(typeof e=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return Ks(t)}return Cc(t,e,r)}function Cc(t,e,r){if(typeof t=="string")return function(o,s){if(typeof s=="string"&&s!==""||(s="utf8"),!O.isEncoding(s))throw new TypeError("Unknown encoding: "+s);var a=0|Pc(o,s),l=Et(a),c=l.write(o,s);return c!==a&&(l=l.slice(0,c)),l}(t,e);if(ArrayBuffer.isView(t))return Hs(t);if(t==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);if(St(t,ArrayBuffer)||t&&St(t.buffer,ArrayBuffer)||typeof SharedArrayBuffer<"u"&&(St(t,SharedArrayBuffer)||t&&St(t.buffer,SharedArrayBuffer)))return mc(t,e,r);if(typeof t=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');var i=t.valueOf&&t.valueOf();if(i!=null&&i!==t)return O.from(i,e,r);var n=function(o){if(O.isBuffer(o)){var s=0|Ys(o.length),a=Et(s);return a.length===0||o.copy(a,0,0,s),a}if(o.length!==void 0)return typeof o.length!="number"||Js(o.length)?Et(0):Hs(o);if(o.type==="Buffer"&&Array.isArray(o.data))return Hs(o.data)}(t);if(n)return n;if(typeof Symbol<"u"&&Symbol.toPrimitive!=null&&typeof t[Symbol.toPrimitive]=="function")return O.from(t[Symbol.toPrimitive]("string"),e,r);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t)}function Bc(t){if(typeof t!="number")throw new TypeError('"size" argument must be of type number');if(t<0)throw new RangeError('The value "'+t+'" is invalid for option "size"')}function Ks(t){return Bc(t),Et(t<0?0:0|Ys(t))}function Hs(t){for(var e=t.length<0?0:0|Ys(t.length),r=Et(e),i=0;i=2147483647)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+2147483647 .toString(16)+" bytes");return 0|t}function Pc(t,e){if(O.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||St(t,ArrayBuffer))return t.byteLength;if(typeof t!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);var r=t.length,i=arguments.length>2&&arguments[2]===!0;if(!i&&r===0)return 0;for(var n=!1;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return Gs(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return Mc(t).length;default:if(n)return i?-1:Gs(t).length;e=(""+e).toLowerCase(),n=!0;}}function bw(t,e,r){var i=!1;if((e===void 0||e<0)&&(e=0),e>this.length||((r===void 0||r>this.length)&&(r=this.length),r<=0)||(r>>>=0)<=(e>>>=0))return "";for(t||(t="utf8");;)switch(t){case"hex":return Tw(this,e,r);case"utf8":case"utf-8":return Oc(this,e,r);case"ascii":return Aw(this,e,r);case"latin1":case"binary":return Iw(this,e,r);case"base64":return Sw(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Rw(this,e,r);default:if(i)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),i=!0;}}function ar(t,e,r){var i=t[e];t[e]=t[r],t[r]=i;}function vc(t,e,r,i,n){if(t.length===0)return -1;if(typeof r=="string"?(i=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),Js(r=+r)&&(r=n?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(n)return -1;r=t.length-1;}else if(r<0){if(!n)return -1;r=0;}if(typeof e=="string"&&(e=O.from(e,i)),O.isBuffer(e))return e.length===0?-1:Ec(t,e,r,i,n);if(typeof e=="number")return e&=255,typeof Uint8Array.prototype.indexOf=="function"?n?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):Ec(t,[e],r,i,n);throw new TypeError("val must be string, number or Buffer")}function Ec(t,e,r,i,n){var o,s=1,a=t.length,l=e.length;if(i!==void 0&&((i=String(i).toLowerCase())==="ucs2"||i==="ucs-2"||i==="utf16le"||i==="utf-16le")){if(t.length<2||e.length<2)return -1;s=2,a/=2,l/=2,r/=2;}function c(y,w){return s===1?y[w]:y.readUInt16BE(w*s)}if(n){var h=-1;for(o=r;oa&&(r=a-l),o=r;o>=0;o--){for(var d=!0,g=0;gn&&(i=n):i=n;var o=e.length;i>o/2&&(i=o/2);for(var s=0;s>8,l=s%256,c.push(l),c.push(a);return c}(e,t.length-r),t,r,i)}function Sw(t,e,r){return e===0&&r===t.length?zs.fromByteArray(t):zs.fromByteArray(t.slice(e,r))}function Oc(t,e,r){r=Math.min(t.length,r);for(var i=[],n=e;n239?4:c>223?3:c>191?2:1;if(n+d<=r)switch(d){case 1:c<128&&(h=c);break;case 2:(192&(o=t[n+1]))==128&&(l=(31&c)<<6|63&o)>127&&(h=l);break;case 3:o=t[n+1],s=t[n+2],(192&o)==128&&(192&s)==128&&(l=(15&c)<<12|(63&o)<<6|63&s)>2047&&(l<55296||l>57343)&&(h=l);break;case 4:o=t[n+1],s=t[n+2],a=t[n+3],(192&o)==128&&(192&s)==128&&(192&a)==128&&(l=(15&c)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&l<1114112&&(h=l);}h===null?(h=65533,d=1):h>65535&&(h-=65536,i.push(h>>>10&1023|55296),h=56320|1023&h),i.push(h),n+=d;}return function(g){var y=g.length;if(y<=4096)return String.fromCharCode.apply(String,g);for(var w="",S=0;Si)&&(r=i);for(var n="",o=e;or)throw new RangeError("Trying to access beyond buffer length")}function Pe(t,e,r,i,n,o){if(!O.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>n||et.length)throw new RangeError("Index out of range")}function xc(t,e,r,i,n,o){if(r+i>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function Sc(t,e,r,i,n){return e=+e,r>>>=0,n||xc(t,0,r,4),Dr.write(t,e,r,i,23,4),r+4}function Ac(t,e,r,i,n){return e=+e,r>>>=0,n||xc(t,0,r,8),Dr.write(t,e,r,i,52,8),r+8}function Gs(t,e){var r;e=e||1/0;for(var i=t.length,n=null,o=[],s=0;s55295&&r<57344){if(!n){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===i){(e-=3)>-1&&o.push(239,191,189);continue}n=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),n=r;continue}r=65536+(n-55296<<10|r-56320);}else n&&(e-=3)>-1&&o.push(239,191,189);if(n=null,r<128){if((e-=1)<0)break;o.push(r);}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128);}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128);}else {if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128);}}return o}function Mc(t){return zs.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(Cw,"")).length<2)return "";for(;e.length%4!=0;)e+="=";return e}(t))}function cn(t,e,r,i){for(var n=0;n=e.length||n>=t.length);++n)e[n+r]=t[n];return n}function St(t,e){return t instanceof e||t!=null&&t.constructor!=null&&t.constructor.name!=null&&t.constructor.name===e.name}function Js(t){return t!=t}function Ic(t,e){for(var r in t)e[r]=t[r];}function lr(t,e,r){return it(t,e,r)}function pi(t){var e;switch(this.encoding=function(r){var i=function(n){if(!n)return "utf8";for(var o;;)switch(n){case"utf8":case"utf-8":return "utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return "utf16le";case"latin1":case"binary":return "latin1";case"base64":case"ascii":case"hex":return n;default:if(o)return;n=(""+n).toLowerCase(),o=!0;}}(r);if(typeof i!="string"&&(Qs.isEncoding===Tc||!Tc(r)))throw new Error("Unknown encoding: "+r);return i||r}(t),this.encoding){case"utf16le":this.text=Ow,this.end=xw,e=4;break;case"utf8":this.fillLast=kw,e=4;break;case"base64":this.text=Mw,this.end=Lw,e=3;break;default:return this.write=Uw,this.end=Nw,void 0}this.lastNeed=0,this.lastTotal=0,this.lastChar=Qs.allocUnsafe(e);}function Vs(t){return t<=127?0:t>>5==6?2:t>>4==14?3:t>>3==30?4:t>>6==2?-1:-2}function kw(t){var e=this.lastTotal-this.lastNeed,r=function(i,n,o){if((192&n[0])!=128)return i.lastNeed=0,"\uFFFD";if(i.lastNeed>1&&n.length>1){if((192&n[1])!=128)return i.lastNeed=1,"\uFFFD";if(i.lastNeed>2&&n.length>2&&(192&n[2])!=128)return i.lastNeed=2,"\uFFFD"}}(this,t);return r!==void 0?r:this.lastNeed<=t.length?(t.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(t.copy(this.lastChar,e,0,t.length),this.lastNeed-=t.length,void 0)}function Ow(t,e){if((t.length-e)%2==0){var r=t.toString("utf16le",e);if(r){var i=r.charCodeAt(r.length-1);if(i>=55296&&i<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=t[t.length-1],t.toString("utf16le",e,t.length-1)}function xw(t){var e=t&&t.length?this.write(t):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return e+this.lastChar.toString("utf16le",0,r)}return e}function Mw(t,e){var r=(t.length-e)%3;return r===0?t.toString("base64",e):(this.lastNeed=3-r,this.lastTotal=3,r===1?this.lastChar[0]=t[t.length-1]:(this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1]),t.toString("base64",e,t.length-r))}function Lw(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+this.lastChar.toString("base64",0,3-this.lastNeed):e}function Uw(t){return t.toString(this.encoding)}function Nw(t){return t&&t.length?this.write(t):""}var Rc,$e,Oe,yc,ln,or,bc,yw,At,zs,Dr,_c,Cw,Bw,un,fn,it,Pw,ur,Qs,Tc,Xs=_e(()=>{_();v();m();for(Rc={byteLength:function(t){var e=wc(t),r=e[0],i=e[1];return 3*(r+i)/4-i},toByteArray:function(t){var e,r,i=wc(t),n=i[0],o=i[1],s=new yc(function(c,h,d){return 3*(h+d)/4-d}(0,n,o)),a=0,l=o>0?n-4:n;for(r=0;r>16&255,s[a++]=e>>8&255,s[a++]=255&e;return o===2&&(e=Oe[t.charCodeAt(r)]<<2|Oe[t.charCodeAt(r+1)]>>4,s[a++]=255&e),o===1&&(e=Oe[t.charCodeAt(r)]<<10|Oe[t.charCodeAt(r+1)]<<4|Oe[t.charCodeAt(r+2)]>>2,s[a++]=e>>8&255,s[a++]=255&e),s},fromByteArray:function(t){for(var e,r=t.length,i=r%3,n=[],o=0,s=r-i;os?s:o+16383));return i===1?(e=t[r-1],n.push($e[e>>2]+$e[e<<4&63]+"==")):i===2&&(e=(t[r-2]<<8)+t[r-1],n.push($e[e>>10]+$e[e>>4&63]+$e[e<<2&63]+"=")),n.join("")}},$e=[],Oe=[],yc=typeof Uint8Array<"u"?Uint8Array:Array,ln="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",or=0,bc=ln.length;or>1,h=-7,d=r?n-1:0,g=r?-1:1,y=t[e+d];for(d+=g,o=y&(1<<-h)-1,y>>=-h,h+=a;h>0;o=256*o+t[e+d],d+=g,h-=8);for(s=o&(1<<-h)-1,o>>=-h,h+=i;h>0;s=256*s+t[e+d],d+=g,h-=8);if(o===0)o=1-c;else {if(o===l)return s?NaN:1/0*(y?-1:1);s+=Math.pow(2,i),o-=c;}return (y?-1:1)*s*Math.pow(2,o-i)},write:function(t,e,r,i,n,o){var s,a,l,c=8*o-n-1,h=(1<>1,g=n===23?Math.pow(2,-24)-Math.pow(2,-77):0,y=i?0:o-1,w=i?1:-1,S=e<0||e===0&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=h):(s=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-s))<1&&(s--,l*=2),(e+=s+d>=1?g/l:g*Math.pow(2,1-d))*l>=2&&(s++,l/=2),s+d>=h?(a=0,s=h):s+d>=1?(a=(e*l-1)*Math.pow(2,n),s+=d):(a=e*Math.pow(2,d-1)*Math.pow(2,n),s=0));n>=8;t[r+y]=255&a,y+=w,a/=256,n-=8);for(s=s<0;t[r+y]=255&s,y+=w,s/=256,c-=8);t[r+y-w]|=128*S;}},At={},zs=Rc,Dr=yw,_c=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):null;At.Buffer=O,At.SlowBuffer=function(t){return +t!=t&&(t=0),O.alloc(+t)},At.INSPECT_MAX_BYTES=50;At.kMaxLength=2147483647,O.TYPED_ARRAY_SUPPORT=function(){try{var t=new Uint8Array(1),e={foo:function(){return 42}};return Object.setPrototypeOf(e,Uint8Array.prototype),Object.setPrototypeOf(t,e),t.foo()===42}catch{return !1}}(),O.TYPED_ARRAY_SUPPORT||typeof console>"u"||typeof console.error!="function"||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),Object.defineProperty(O.prototype,"parent",{enumerable:!0,get:function(){if(O.isBuffer(this))return this.buffer}}),Object.defineProperty(O.prototype,"offset",{enumerable:!0,get:function(){if(O.isBuffer(this))return this.byteOffset}}),O.poolSize=8192,O.from=function(t,e,r){return Cc(t,e,r)},Object.setPrototypeOf(O.prototype,Uint8Array.prototype),Object.setPrototypeOf(O,Uint8Array),O.alloc=function(t,e,r){return function(i,n,o){return Bc(i),i<=0?Et(i):n!==void 0?typeof o=="string"?Et(i).fill(n,o):Et(i).fill(n):Et(i)}(t,e,r)},O.allocUnsafe=function(t){return Ks(t)},O.allocUnsafeSlow=function(t){return Ks(t)},O.isBuffer=function(t){return t!=null&&t._isBuffer===!0&&t!==O.prototype},O.compare=function(t,e){if(St(t,Uint8Array)&&(t=O.from(t,t.offset,t.byteLength)),St(e,Uint8Array)&&(e=O.from(e,e.offset,e.byteLength)),!O.isBuffer(t)||!O.isBuffer(e))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(t===e)return 0;for(var r=t.length,i=e.length,n=0,o=Math.min(r,i);ne&&(t+=" ... "),""},_c&&(O.prototype[_c]=O.prototype.inspect),O.prototype.compare=function(t,e,r,i,n){if(St(t,Uint8Array)&&(t=O.from(t,t.offset,t.byteLength)),!O.isBuffer(t))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(e===void 0&&(e=0),r===void 0&&(r=t?t.length:0),i===void 0&&(i=0),n===void 0&&(n=this.length),e<0||r>t.length||i<0||n>this.length)throw new RangeError("out of range index");if(i>=n&&e>=r)return 0;if(i>=n)return -1;if(e>=r)return 1;if(this===t)return 0;for(var o=(n>>>=0)-(i>>>=0),s=(r>>>=0)-(e>>>=0),a=Math.min(o,s),l=this.slice(i,n),c=t.slice(e,r),h=0;h>>=0,isFinite(r)?(r>>>=0,i===void 0&&(i="utf8")):(i=r,r=void 0);}var n=this.length-e;if((r===void 0||r>n)&&(r=n),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");i||(i="utf8");for(var o=!1;;)switch(i){case"hex":return ww(this,t,e,r);case"utf8":case"utf-8":return _w(this,t,e,r);case"ascii":return kc(this,t,e,r);case"latin1":case"binary":return mw(this,t,e,r);case"base64":return vw(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Ew(this,t,e,r);default:if(o)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase(),o=!0;}},O.prototype.toJSON=function(){return {type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};O.prototype.slice=function(t,e){var r=this.length;(t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=e===void 0?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e>>=0,e>>>=0,r||we(t,e,this.length);for(var i=this[t],n=1,o=0;++o>>=0,e>>>=0,r||we(t,e,this.length);for(var i=this[t+--e],n=1;e>0&&(n*=256);)i+=this[t+--e]*n;return i},O.prototype.readUInt8=function(t,e){return t>>>=0,e||we(t,1,this.length),this[t]},O.prototype.readUInt16LE=function(t,e){return t>>>=0,e||we(t,2,this.length),this[t]|this[t+1]<<8},O.prototype.readUInt16BE=function(t,e){return t>>>=0,e||we(t,2,this.length),this[t]<<8|this[t+1]},O.prototype.readUInt32LE=function(t,e){return t>>>=0,e||we(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},O.prototype.readUInt32BE=function(t,e){return t>>>=0,e||we(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},O.prototype.readIntLE=function(t,e,r){t>>>=0,e>>>=0,r||we(t,e,this.length);for(var i=this[t],n=1,o=0;++o=(n*=128)&&(i-=Math.pow(2,8*e)),i},O.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||we(t,e,this.length);for(var i=e,n=1,o=this[t+--i];i>0&&(n*=256);)o+=this[t+--i]*n;return o>=(n*=128)&&(o-=Math.pow(2,8*e)),o},O.prototype.readInt8=function(t,e){return t>>>=0,e||we(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},O.prototype.readInt16LE=function(t,e){t>>>=0,e||we(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},O.prototype.readInt16BE=function(t,e){t>>>=0,e||we(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},O.prototype.readInt32LE=function(t,e){return t>>>=0,e||we(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},O.prototype.readInt32BE=function(t,e){return t>>>=0,e||we(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},O.prototype.readFloatLE=function(t,e){return t>>>=0,e||we(t,4,this.length),Dr.read(this,t,!0,23,4)},O.prototype.readFloatBE=function(t,e){return t>>>=0,e||we(t,4,this.length),Dr.read(this,t,!1,23,4)},O.prototype.readDoubleLE=function(t,e){return t>>>=0,e||we(t,8,this.length),Dr.read(this,t,!0,52,8)},O.prototype.readDoubleBE=function(t,e){return t>>>=0,e||we(t,8,this.length),Dr.read(this,t,!1,52,8)},O.prototype.writeUIntLE=function(t,e,r,i){t=+t,e>>>=0,r>>>=0,i||Pe(this,t,e,r,Math.pow(2,8*r)-1,0);var n=1,o=0;for(this[e]=255&t;++o>>=0,r>>>=0,i||Pe(this,t,e,r,Math.pow(2,8*r)-1,0);var n=r-1,o=1;for(this[e+n]=255&t;--n>=0&&(o*=256);)this[e+n]=t/o&255;return e+r},O.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,1,255,0),this[e]=255&t,e+1},O.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},O.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},O.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},O.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},O.prototype.writeIntLE=function(t,e,r,i){if(t=+t,e>>>=0,!i){var n=Math.pow(2,8*r-1);Pe(this,t,e,r,n-1,-n);}var o=0,s=1,a=0;for(this[e]=255&t;++o>0)-a&255;return e+r},O.prototype.writeIntBE=function(t,e,r,i){if(t=+t,e>>>=0,!i){var n=Math.pow(2,8*r-1);Pe(this,t,e,r,n-1,-n);}var o=r-1,s=1,a=0;for(this[e+o]=255&t;--o>=0&&(s*=256);)t<0&&a===0&&this[e+o+1]!==0&&(a=1),this[e+o]=(t/s>>0)-a&255;return e+r},O.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},O.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},O.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},O.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},O.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},O.prototype.writeFloatLE=function(t,e,r){return Sc(this,t,e,!0,r)},O.prototype.writeFloatBE=function(t,e,r){return Sc(this,t,e,!1,r)},O.prototype.writeDoubleLE=function(t,e,r){return Ac(this,t,e,!0,r)},O.prototype.writeDoubleBE=function(t,e,r){return Ac(this,t,e,!1,r)},O.prototype.copy=function(t,e,r,i){if(!O.isBuffer(t))throw new TypeError("argument should be a Buffer");if(r||(r=0),i||i===0||(i=this.length),e>=t.length&&(e=t.length),e||(e=0),i>0&&i=this.length)throw new RangeError("Index out of range");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),t.length-e=0;--o)t[o+e]=this[o+r];else Uint8Array.prototype.set.call(t,this.subarray(r,i),e);return n},O.prototype.fill=function(t,e,r,i){if(typeof t=="string"){if(typeof e=="string"?(i=e,e=0,r=this.length):typeof r=="string"&&(i=r,r=this.length),i!==void 0&&typeof i!="string")throw new TypeError("encoding must be a string");if(typeof i=="string"&&!O.isEncoding(i))throw new TypeError("Unknown encoding: "+i);if(t.length===1){var n=t.charCodeAt(0);(i==="utf8"&&n<128||i==="latin1")&&(t=n);}}else typeof t=="number"?t&=255:typeof t=="boolean"&&(t=Number(t));if(e<0||this.length>>=0,r=r===void 0?this.length:r>>>0,t||(t=0),typeof t=="number")for(o=e;o=0?(l>0&&(n.lastNeed=l-1),l):--a=0?(l>0&&(n.lastNeed=l-2),l):--a=0?(l>0&&(l===2?l=0:n.lastNeed=l-3),l):0}(this,t,e);if(!this.lastNeed)return t.toString("utf8",e);this.lastTotal=r;var i=t.length-(r-this.lastNeed);return t.copy(this.lastChar,0,i),t.toString("utf8",e,i)},pi.prototype.fillLast=function(t){if(this.lastNeed<=t.length)return t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,t.length),this.lastNeed-=t.length;};ur.StringDecoder;ur.StringDecoder;});var Lc={};Jt(Lc,{StringDecoder:()=>qw,default:()=>ur});var qw,Uc=_e(()=>{_();v();m();Xs();Xs();qw=ur.StringDecoder;});var Zs=M((H2,jc)=>{_();v();m();var Nc=Nt(),{PromisePrototypeThen:Dw,SymbolAsyncIterator:qc,SymbolIterator:Dc}=ce(),{Buffer:jw}=(be(),X(me)),{ERR_INVALID_ARG_TYPE:Fw,ERR_STREAM_NULL_VALUES:Ww}=Ae().codes;function $w(t,e,r){let i;if(typeof e=="string"||e instanceof jw)return new t({objectMode:!0,...r,read(){this.push(e),this.push(null);}});let n;if(e&&e[qc])n=!0,i=e[qc]();else if(e&&e[Dc])n=!1,i=e[Dc]();else throw new Fw("iterable",["Iterable"],e);let o=new t({objectMode:!0,highWaterMark:1,...r}),s=!1;o._read=function(){s||(s=!0,l());},o._destroy=function(c,h){Dw(a(c),()=>Nc.nextTick(h,c),d=>Nc.nextTick(h,d||c));};async function a(c){let h=c!=null,d=typeof i.throw=="function";if(h&&d){let{value:g,done:y}=await i.throw(c);if(await g,y)return}if(typeof i.return=="function"){let{value:g}=await i.return();await g;}}async function l(){for(;;){try{let{value:c,done:h}=n?await i.next():i.next();if(h)o.push(null);else {let d=c&&typeof c.then=="function"?await c:c;if(d===null)throw s=!1,new Ww;if(o.push(d))continue;s=!1;}}catch(c){o.destroy(c);}break}}return o}jc.exports=$w;});var gi=M((eR,Zc)=>{_();v();m();var He=Nt(),{ArrayPrototypeIndexOf:Hw,NumberIsInteger:Vw,NumberIsNaN:zw,NumberParseInt:Kw,ObjectDefineProperties:$c,ObjectKeys:Gw,ObjectSetPrototypeOf:Hc,Promise:Qw,SafeSet:Yw,SymbolAsyncIterator:Jw,Symbol:Xw}=ce();Zc.exports=F;F.ReadableState=so;var{EventEmitter:Zw}=(sr(),X(nr)),{Stream:Dt,prependListener:e_}=nn(),{Buffer:eo}=(be(),X(me)),{addAbortSignal:t_}=di(),r_=vt(),H=Je().debuglog("stream",t=>{H=t;}),i_=dc(),Fr=ir(),{getHighWaterMark:n_,getDefaultHighWaterMark:s_}=an(),{aggregateTwoErrors:Fc,codes:{ERR_INVALID_ARG_TYPE:o_,ERR_METHOD_NOT_IMPLEMENTED:a_,ERR_OUT_OF_RANGE:l_,ERR_STREAM_PUSH_AFTER_EOF:u_,ERR_STREAM_UNSHIFT_AFTER_END_EVENT:f_}}=Ae(),{validateObject:c_}=hi(),fr=Xw("kPaused"),{StringDecoder:Vc}=(Uc(),X(Lc)),h_=Zs();Hc(F.prototype,Dt.prototype);Hc(F,Dt);var to=()=>{},{errorOrDestroy:jr}=Fr;function so(t,e,r){typeof r!="boolean"&&(r=e instanceof nt()),this.objectMode=!!(t&&t.objectMode),r&&(this.objectMode=this.objectMode||!!(t&&t.readableObjectMode)),this.highWaterMark=t?n_(this,t,"readableHighWaterMark",r):s_(!1),this.buffer=new i_,this.length=0,this.pipes=[],this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.constructed=!0,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this[fr]=null,this.errorEmitted=!1,this.emitClose=!t||t.emitClose!==!1,this.autoDestroy=!t||t.autoDestroy!==!1,this.destroyed=!1,this.errored=null,this.closed=!1,this.closeEmitted=!1,this.defaultEncoding=t&&t.defaultEncoding||"utf8",this.awaitDrainWriters=null,this.multiAwaitDrain=!1,this.readingMore=!1,this.dataEmitted=!1,this.decoder=null,this.encoding=null,t&&t.encoding&&(this.decoder=new Vc(t.encoding),this.encoding=t.encoding);}function F(t){if(!(this instanceof F))return new F(t);let e=this instanceof nt();this._readableState=new so(t,this,e),t&&(typeof t.read=="function"&&(this._read=t.read),typeof t.destroy=="function"&&(this._destroy=t.destroy),typeof t.construct=="function"&&(this._construct=t.construct),t.signal&&!e&&t_(t.signal,this)),Dt.call(this,t),Fr.construct(this,()=>{this._readableState.needReadable&&hn(this,this._readableState);});}F.prototype.destroy=Fr.destroy;F.prototype._undestroy=Fr.undestroy;F.prototype._destroy=function(t,e){e(t);};F.prototype[Zw.captureRejectionSymbol]=function(t){this.destroy(t);};F.prototype.push=function(t,e){return zc(this,t,e,!1)};F.prototype.unshift=function(t,e){return zc(this,t,e,!0)};function zc(t,e,r,i){H("readableAddChunk",e);let n=t._readableState,o;if(n.objectMode||(typeof e=="string"?(r=r||n.defaultEncoding,n.encoding!==r&&(i&&n.encoding?e=eo.from(e,r).toString(n.encoding):(e=eo.from(e,r),r=""))):e instanceof eo?r="":Dt._isUint8Array(e)?(e=Dt._uint8ArrayToBuffer(e),r=""):e!=null&&(o=new o_("chunk",["string","Buffer","Uint8Array"],e))),o)jr(t,o);else if(e===null)n.reading=!1,g_(t,n);else if(n.objectMode||e&&e.length>0)if(i)if(n.endEmitted)jr(t,new f_);else {if(n.destroyed||n.errored)return !1;ro(t,n,e,!0);}else if(n.ended)jr(t,new u_);else {if(n.destroyed||n.errored)return !1;n.reading=!1,n.decoder&&!r?(e=n.decoder.write(e),n.objectMode||e.length!==0?ro(t,n,e,!1):hn(t,n)):ro(t,n,e,!1);}else i||(n.reading=!1,hn(t,n));return !n.ended&&(n.length0?(e.multiAwaitDrain?e.awaitDrainWriters.clear():e.awaitDrainWriters=null,e.dataEmitted=!0,t.emit("data",r)):(e.length+=e.objectMode?1:r.length,i?e.buffer.unshift(r):e.buffer.push(r),e.needReadable&&dn(t)),hn(t,e);}F.prototype.isPaused=function(){let t=this._readableState;return t[fr]===!0||t.flowing===!1};F.prototype.setEncoding=function(t){let e=new Vc(t);this._readableState.decoder=e,this._readableState.encoding=this._readableState.decoder.encoding;let r=this._readableState.buffer,i="";for(let n of r)i+=e.write(n);return r.clear(),i!==""&&r.push(i),this._readableState.length=i.length,this};var d_=1073741824;function p_(t){if(t>d_)throw new l_("size","<= 1GiB",t);return t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++,t}function Wc(t,e){return t<=0||e.length===0&&e.ended?0:e.objectMode?1:zw(t)?e.flowing&&e.length?e.buffer.first().length:e.length:t<=e.length?t:e.ended?e.length:0}F.prototype.read=function(t){H("read",t),t===void 0?t=NaN:Vw(t)||(t=Kw(t,10));let e=this._readableState,r=t;if(t>e.highWaterMark&&(e.highWaterMark=p_(t)),t!==0&&(e.emittedReadable=!1),t===0&&e.needReadable&&((e.highWaterMark!==0?e.length>=e.highWaterMark:e.length>0)||e.ended))return H("read: emitReadable",e.length,e.ended),e.length===0&&e.ended?io(this):dn(this),null;if(t=Wc(t,e),t===0&&e.ended)return e.length===0&&io(this),null;let i=e.needReadable;if(H("need readable",i),(e.length===0||e.length-t0?n=Jc(t,e):n=null,n===null?(e.needReadable=e.length<=e.highWaterMark,t=0):(e.length-=t,e.multiAwaitDrain?e.awaitDrainWriters.clear():e.awaitDrainWriters=null),e.length===0&&(e.ended||(e.needReadable=!0),r!==t&&e.ended&&io(this)),n!==null&&!e.errorEmitted&&!e.closeEmitted&&(e.dataEmitted=!0,this.emit("data",n)),n};function g_(t,e){if(H("onEofChunk"),!e.ended){if(e.decoder){let r=e.decoder.end();r&&r.length&&(e.buffer.push(r),e.length+=e.objectMode?1:r.length);}e.ended=!0,e.sync?dn(t):(e.needReadable=!1,e.emittedReadable=!0,Kc(t));}}function dn(t){let e=t._readableState;H("emitReadable",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||(H("emitReadable",e.flowing),e.emittedReadable=!0,He.nextTick(Kc,t));}function Kc(t){let e=t._readableState;H("emitReadable_",e.destroyed,e.length,e.ended),!e.destroyed&&!e.errored&&(e.length||e.ended)&&(t.emit("readable"),e.emittedReadable=!1),e.needReadable=!e.flowing&&!e.ended&&e.length<=e.highWaterMark,Qc(t);}function hn(t,e){!e.readingMore&&e.constructed&&(e.readingMore=!0,He.nextTick(y_,t,e));}function y_(t,e){for(;!e.reading&&!e.ended&&(e.length1&&i.pipes.includes(t)&&(H("false write response, pause",i.awaitDrainWriters.size),i.awaitDrainWriters.add(t)),r.pause()),l||(l=b_(r,t),t.on("drain",l));}r.on("data",g);function g(I){H("ondata");let C=t.write(I);H("dest.write",C),C===!1&&d();}function y(I){if(H("onerror",I),E(),t.removeListener("error",y),t.listenerCount("error")===0){let C=t._writableState||t._readableState;C&&!C.errorEmitted?jr(t,I):t.emit("error",I);}}e_(t,"error",y);function w(){t.removeListener("finish",S),E();}t.once("close",w);function S(){H("onfinish"),t.removeListener("close",w),E();}t.once("finish",S);function E(){H("unpipe"),r.unpipe(t);}return t.emit("pipe",r),t.writableNeedDrain===!0?i.flowing&&d():i.flowing||(H("pipe resume"),r.resume()),t};function b_(t,e){return function(){let i=t._readableState;i.awaitDrainWriters===e?(H("pipeOnDrain",1),i.awaitDrainWriters=null):i.multiAwaitDrain&&(H("pipeOnDrain",i.awaitDrainWriters.size),i.awaitDrainWriters.delete(e)),(!i.awaitDrainWriters||i.awaitDrainWriters.size===0)&&t.listenerCount("data")&&t.resume();}}F.prototype.unpipe=function(t){let e=this._readableState,r={hasUnpiped:!1};if(e.pipes.length===0)return this;if(!t){let n=e.pipes;e.pipes=[],this.pause();for(let o=0;o0,i.flowing!==!1&&this.resume()):t==="readable"&&!i.endEmitted&&!i.readableListening&&(i.readableListening=i.needReadable=!0,i.flowing=!1,i.emittedReadable=!1,H("on readable",i.length,i.reading),i.length?dn(this):i.reading||He.nextTick(w_,this)),r};F.prototype.addListener=F.prototype.on;F.prototype.removeListener=function(t,e){let r=Dt.prototype.removeListener.call(this,t,e);return t==="readable"&&He.nextTick(Gc,this),r};F.prototype.off=F.prototype.removeListener;F.prototype.removeAllListeners=function(t){let e=Dt.prototype.removeAllListeners.apply(this,arguments);return (t==="readable"||t===void 0)&&He.nextTick(Gc,this),e};function Gc(t){let e=t._readableState;e.readableListening=t.listenerCount("readable")>0,e.resumeScheduled&&e[fr]===!1?e.flowing=!0:t.listenerCount("data")>0?t.resume():e.readableListening||(e.flowing=null);}function w_(t){H("readable nexttick read 0"),t.read(0);}F.prototype.resume=function(){let t=this._readableState;return t.flowing||(H("resume"),t.flowing=!t.readableListening,__(this,t)),t[fr]=!1,this};function __(t,e){e.resumeScheduled||(e.resumeScheduled=!0,He.nextTick(m_,t,e));}function m_(t,e){H("resume",e.reading),e.reading||t.read(0),e.resumeScheduled=!1,t.emit("resume"),Qc(t),e.flowing&&!e.reading&&t.read(0);}F.prototype.pause=function(){return H("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&(H("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState[fr]=!0,this};function Qc(t){let e=t._readableState;for(H("flow",e.flowing);e.flowing&&t.read()!==null;);}F.prototype.wrap=function(t){let e=!1;t.on("data",i=>{!this.push(i)&&t.pause&&(e=!0,t.pause());}),t.on("end",()=>{this.push(null);}),t.on("error",i=>{jr(this,i);}),t.on("close",()=>{this.destroy();}),t.on("destroy",()=>{this.destroy();}),this._read=()=>{e&&t.resume&&(e=!1,t.resume());};let r=Gw(t);for(let i=1;i{n=s?Fc(n,s):null,r(),r=to;});try{for(;;){let s=t.destroyed?null:t.read();if(s!==null)yield s;else {if(n)throw n;if(n===null)return;await new Qw(i);}}}catch(s){throw n=Fc(n,s),n}finally{(n||e?.destroyOnReturn!==!1)&&(n===void 0||t._readableState.autoDestroy)?Fr.destroyer(t,null):(t.off("readable",i),o());}}$c(F.prototype,{readable:{__proto__:null,get(){let t=this._readableState;return !!t&&t.readable!==!1&&!t.destroyed&&!t.errorEmitted&&!t.endEmitted},set(t){this._readableState&&(this._readableState.readable=!!t);}},readableDidRead:{__proto__:null,enumerable:!1,get:function(){return this._readableState.dataEmitted}},readableAborted:{__proto__:null,enumerable:!1,get:function(){return !!(this._readableState.readable!==!1&&(this._readableState.destroyed||this._readableState.errored)&&!this._readableState.endEmitted)}},readableHighWaterMark:{__proto__:null,enumerable:!1,get:function(){return this._readableState.highWaterMark}},readableBuffer:{__proto__:null,enumerable:!1,get:function(){return this._readableState&&this._readableState.buffer}},readableFlowing:{__proto__:null,enumerable:!1,get:function(){return this._readableState.flowing},set:function(t){this._readableState&&(this._readableState.flowing=t);}},readableLength:{__proto__:null,enumerable:!1,get(){return this._readableState.length}},readableObjectMode:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.objectMode:!1}},readableEncoding:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.encoding:null}},errored:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.errored:null}},closed:{__proto__:null,get(){return this._readableState?this._readableState.closed:!1}},destroyed:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.destroyed:!1},set(t){this._readableState&&(this._readableState.destroyed=t);}},readableEnded:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.endEmitted:!1}}});$c(so.prototype,{pipesCount:{__proto__:null,get(){return this.pipes.length}},paused:{__proto__:null,get(){return this[fr]!==!1},set(t){this[fr]=!!t;}}});F._fromList=Jc;function Jc(t,e){if(e.length===0)return null;let r;return e.objectMode?r=e.buffer.shift():!t||t>=e.length?(e.decoder?r=e.buffer.join(""):e.buffer.length===1?r=e.buffer.first():r=e.buffer.concat(e.length),e.buffer.clear()):r=e.buffer.consume(t,e.decoder),r}function io(t){let e=t._readableState;H("endReadable",e.endEmitted),e.endEmitted||(e.ended=!0,He.nextTick(E_,e,t));}function E_(t,e){if(H("endReadableNT",t.endEmitted,t.length),!t.errored&&!t.closeEmitted&&!t.endEmitted&&t.length===0){if(t.endEmitted=!0,e.emit("end"),e.writable&&e.allowHalfOpen===!1)He.nextTick(S_,e);else if(t.autoDestroy){let r=e._writableState;(!r||r.autoDestroy&&(r.finished||r.writable===!1))&&e.destroy();}}}function S_(t){t.writable&&!t.writableEnded&&!t.destroyed&&t.end();}F.from=function(t,e){return h_(F,t,e)};var no;function Xc(){return no===void 0&&(no={}),no}F.fromWeb=function(t,e){return Xc().newStreamReadableFromReadableStream(t,e)};F.toWeb=function(t,e){return Xc().newReadableStreamFromStreamReadable(t,e)};F.wrap=function(t,e){var r,i;return new F({objectMode:(r=(i=t.readableObjectMode)!==null&&i!==void 0?i:t.objectMode)!==null&&r!==void 0?r:!0,...e,destroy(n,o){Fr.destroyer(t,n),o(n);}}).wrap(t)};});var ho=M((fR,ch)=>{_();v();m();var cr=Nt(),{ArrayPrototypeSlice:rh,Error:A_,FunctionPrototypeSymbolHasInstance:ih,ObjectDefineProperty:nh,ObjectDefineProperties:I_,ObjectSetPrototypeOf:sh,StringPrototypeToLowerCase:T_,Symbol:R_,SymbolHasInstance:C_}=ce();ch.exports=ie;ie.WritableState=wi;var{EventEmitter:B_}=(sr(),X(nr)),yi=nn().Stream,{Buffer:pn}=(be(),X(me)),bn=ir(),{addAbortSignal:P_}=di(),{getHighWaterMark:k_,getDefaultHighWaterMark:O_}=an(),{ERR_INVALID_ARG_TYPE:x_,ERR_METHOD_NOT_IMPLEMENTED:M_,ERR_MULTIPLE_CALLBACK:oh,ERR_STREAM_CANNOT_PIPE:L_,ERR_STREAM_DESTROYED:bi,ERR_STREAM_ALREADY_FINISHED:U_,ERR_STREAM_NULL_VALUES:N_,ERR_STREAM_WRITE_AFTER_END:q_,ERR_UNKNOWN_ENCODING:ah}=Ae().codes,{errorOrDestroy:Wr}=bn;sh(ie.prototype,yi.prototype);sh(ie,yi);function lo(){}var $r=R_("kOnFinished");function wi(t,e,r){typeof r!="boolean"&&(r=e instanceof nt()),this.objectMode=!!(t&&t.objectMode),r&&(this.objectMode=this.objectMode||!!(t&&t.writableObjectMode)),this.highWaterMark=t?k_(this,t,"writableHighWaterMark",r):O_(!1),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;let i=!!(t&&t.decodeStrings===!1);this.decodeStrings=!i,this.defaultEncoding=t&&t.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=j_.bind(void 0,e),this.writecb=null,this.writelen=0,this.afterWriteTickInfo=null,yn(this),this.pendingcb=0,this.constructed=!0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=!t||t.emitClose!==!1,this.autoDestroy=!t||t.autoDestroy!==!1,this.errored=null,this.closed=!1,this.closeEmitted=!1,this[$r]=[];}function yn(t){t.buffered=[],t.bufferedIndex=0,t.allBuffers=!0,t.allNoop=!0;}wi.prototype.getBuffer=function(){return rh(this.buffered,this.bufferedIndex)};nh(wi.prototype,"bufferedRequestCount",{__proto__:null,get(){return this.buffered.length-this.bufferedIndex}});function ie(t){let e=this instanceof nt();if(!e&&!ih(ie,this))return new ie(t);this._writableState=new wi(t,this,e),t&&(typeof t.write=="function"&&(this._write=t.write),typeof t.writev=="function"&&(this._writev=t.writev),typeof t.destroy=="function"&&(this._destroy=t.destroy),typeof t.final=="function"&&(this._final=t.final),typeof t.construct=="function"&&(this._construct=t.construct),t.signal&&P_(t.signal,this)),yi.call(this,t),bn.construct(this,()=>{let r=this._writableState;r.writing||fo(this,r),co(this,r);});}nh(ie,C_,{__proto__:null,value:function(t){return ih(this,t)?!0:this!==ie?!1:t&&t._writableState instanceof wi}});ie.prototype.pipe=function(){Wr(this,new L_);};function lh(t,e,r,i){let n=t._writableState;if(typeof r=="function")i=r,r=n.defaultEncoding;else {if(!r)r=n.defaultEncoding;else if(r!=="buffer"&&!pn.isEncoding(r))throw new ah(r);typeof i!="function"&&(i=lo);}if(e===null)throw new N_;if(!n.objectMode)if(typeof e=="string")n.decodeStrings!==!1&&(e=pn.from(e,r),r="buffer");else if(e instanceof pn)r="buffer";else if(yi._isUint8Array(e))e=yi._uint8ArrayToBuffer(e),r="buffer";else throw new x_("chunk",["string","Buffer","Uint8Array"],e);let o;return n.ending?o=new q_:n.destroyed&&(o=new bi("write")),o?(cr.nextTick(i,o),Wr(t,o,!0),o):(n.pendingcb++,D_(t,n,e,r,i))}ie.prototype.write=function(t,e,r){return lh(this,t,e,r)===!0};ie.prototype.cork=function(){this._writableState.corked++;};ie.prototype.uncork=function(){let t=this._writableState;t.corked&&(t.corked--,t.writing||fo(this,t));};ie.prototype.setDefaultEncoding=function(e){if(typeof e=="string"&&(e=T_(e)),!pn.isEncoding(e))throw new ah(e);return this._writableState.defaultEncoding=e,this};function D_(t,e,r,i,n){let o=e.objectMode?1:r.length;e.length+=o;let s=e.lengthr.bufferedIndex&&fo(t,r),i?r.afterWriteTickInfo!==null&&r.afterWriteTickInfo.cb===n?r.afterWriteTickInfo.count++:(r.afterWriteTickInfo={count:1,cb:n,stream:t,state:r},cr.nextTick(F_,r.afterWriteTickInfo)):uh(t,r,1,n));}function F_({stream:t,state:e,count:r,cb:i}){return e.afterWriteTickInfo=null,uh(t,e,r,i)}function uh(t,e,r,i){for(!e.ending&&!t.destroyed&&e.length===0&&e.needDrain&&(e.needDrain=!1,t.emit("drain"));r-- >0;)e.pendingcb--,i();e.destroyed&&uo(e),co(t,e);}function uo(t){if(t.writing)return;for(let n=t.bufferedIndex;n1&&t._writev){e.pendingcb-=o-1;let a=e.allNoop?lo:c=>{for(let h=s;h256?(r.splice(0,s),e.bufferedIndex=0):e.bufferedIndex=s;}e.bufferProcessing=!1;}ie.prototype._write=function(t,e,r){if(this._writev)this._writev([{chunk:t,encoding:e}],r);else throw new M_("_write()")};ie.prototype._writev=null;ie.prototype.end=function(t,e,r){let i=this._writableState;typeof t=="function"?(r=t,t=null,e=null):typeof e=="function"&&(r=e,e=null);let n;if(t!=null){let o=lh(this,t,e);o instanceof A_&&(n=o);}return i.corked&&(i.corked=1,this.uncork()),n||(!i.errored&&!i.ending?(i.ending=!0,co(this,i,!0),i.ended=!0):i.finished?n=new U_("end"):i.destroyed&&(n=new bi("end"))),typeof r=="function"&&(n||i.finished?cr.nextTick(r,n):i[$r].push(r)),this};function gn(t){return t.ending&&!t.destroyed&&t.constructed&&t.length===0&&!t.errored&&t.buffered.length===0&&!t.finished&&!t.writing&&!t.errorEmitted&&!t.closeEmitted}function W_(t,e){let r=!1;function i(n){if(r){Wr(t,n??oh());return}if(r=!0,e.pendingcb--,n){let o=e[$r].splice(0);for(let s=0;s{gn(n)?ao(i,n):n.pendingcb--;},t,e)):gn(e)&&(e.pendingcb++,ao(t,e))));}function ao(t,e){e.pendingcb--,e.finished=!0;let r=e[$r].splice(0);for(let i=0;i{_();v();m();var po=Nt(),V_=(be(),X(me)),{isReadable:z_,isWritable:K_,isIterable:hh,isNodeStream:G_,isReadableNodeStream:dh,isWritableNodeStream:ph,isDuplexNodeStream:Q_}=tt(),gh=vt(),{AbortError:vh,codes:{ERR_INVALID_ARG_TYPE:Y_,ERR_INVALID_RETURN_VALUE:yh}}=Ae(),{destroyer:Hr}=ir(),J_=nt(),X_=gi(),{createDeferredPromise:bh}=Je(),wh=Zs(),_h=globalThis.Blob||V_.Blob,Z_=typeof _h<"u"?function(e){return e instanceof _h}:function(e){return !1},e0=globalThis.AbortController||zi().AbortController,{FunctionPrototypeCall:mh}=ce(),hr=class extends J_{constructor(e){super(e),e?.readable===!1&&(this._readableState.readable=!1,this._readableState.ended=!0,this._readableState.endEmitted=!0),e?.writable===!1&&(this._writableState.writable=!1,this._writableState.ending=!0,this._writableState.ended=!0,this._writableState.finished=!0);}};Eh.exports=function t(e,r){if(Q_(e))return e;if(dh(e))return wn({readable:e});if(ph(e))return wn({writable:e});if(G_(e))return wn({writable:!1,readable:!1});if(typeof e=="function"){let{value:n,write:o,final:s,destroy:a}=t0(e);if(hh(n))return wh(hr,n,{objectMode:!0,write:o,final:s,destroy:a});let l=n?.then;if(typeof l=="function"){let c,h=mh(l,n,d=>{if(d!=null)throw new yh("nully","body",d)},d=>{Hr(c,d);});return c=new hr({objectMode:!0,readable:!1,write:o,final(d){s(async()=>{try{await h,po.nextTick(d,null);}catch(g){po.nextTick(d,g);}});},destroy:a})}throw new yh("Iterable, AsyncIterable or AsyncFunction",r,n)}if(Z_(e))return t(e.arrayBuffer());if(hh(e))return wh(hr,e,{objectMode:!0,writable:!1});if(typeof e?.writable=="object"||typeof e?.readable=="object"){let n=e!=null&&e.readable?dh(e?.readable)?e?.readable:t(e.readable):void 0,o=e!=null&&e.writable?ph(e?.writable)?e?.writable:t(e.writable):void 0;return wn({readable:n,writable:o})}let i=e?.then;if(typeof i=="function"){let n;return mh(i,e,o=>{o!=null&&n.push(o),n.push(null);},o=>{Hr(n,o);}),n=new hr({objectMode:!0,writable:!1,read(){}})}throw new Y_(r,["Blob","ReadableStream","WritableStream","Stream","Iterable","AsyncIterable","Function","{ readable, writable } pair","Promise"],e)};function t0(t){let{promise:e,resolve:r}=bh(),i=new e0,n=i.signal;return {value:t(async function*(){for(;;){let s=e;e=null;let{chunk:a,done:l,cb:c}=await s;if(po.nextTick(c),l)return;if(n.aborted)throw new vh(void 0,{cause:n.reason});((({promise:e,resolve:r}=bh()))),yield a;}}(),{signal:n}),write(s,a,l){let c=r;r=null,c({chunk:s,done:!1,cb:l});},final(s){let a=r;r=null,a({done:!0,cb:s});},destroy(s,a){i.abort(),a(s);}}}function wn(t){let e=t.readable&&typeof t.readable.read!="function"?X_.wrap(t.readable):t.readable,r=t.writable,i=!!z_(e),n=!!K_(r),o,s,a,l,c;function h(d){let g=l;l=null,g?g(d):d&&c.destroy(d);}return c=new hr({readableObjectMode:!!(e!=null&&e.readableObjectMode),writableObjectMode:!!(r!=null&&r.writableObjectMode),readable:i,writable:n}),n&&(gh(r,d=>{n=!1,d&&Hr(e,d),h(d);}),c._write=function(d,g,y){r.write(d,g)?y():o=y;},c._final=function(d){r.end(),s=d;},r.on("drain",function(){if(o){let d=o;o=null,d();}}),r.on("finish",function(){if(s){let d=s;s=null,d();}})),i&&(gh(e,d=>{i=!1,d&&Hr(e,d),h(d);}),e.on("readable",function(){if(a){let d=a;a=null,d();}}),e.on("end",function(){c.push(null);}),c._read=function(){for(;;){let d=e.read();if(d===null){a=c._read;return}if(!c.push(d))return}}),c._destroy=function(d,g){!d&&l!==null&&(d=new vh),a=null,o=null,s=null,l===null?g(d):(l=g,Hr(r,d),Hr(e,d));},c}});var nt=M((PR,Th)=>{_();v();m();var{ObjectDefineProperties:r0,ObjectGetOwnPropertyDescriptor:It,ObjectKeys:i0,ObjectSetPrototypeOf:Ah}=ce();Th.exports=Ve;var bo=gi(),Ne=ho();Ah(Ve.prototype,bo.prototype);Ah(Ve,bo);{let t=i0(Ne.prototype);for(let e=0;e{_();v();m();var{ObjectSetPrototypeOf:Rh,Symbol:n0}=ce();Ch.exports=Tt;var{ERR_METHOD_NOT_IMPLEMENTED:s0}=Ae().codes,_o=nt(),{getHighWaterMark:o0}=an();Rh(Tt.prototype,_o.prototype);Rh(Tt,_o);var _i=n0("kCallback");function Tt(t){if(!(this instanceof Tt))return new Tt(t);let e=t?o0(this,t,"readableHighWaterMark",!0):null;e===0&&(t={...t,highWaterMark:null,readableHighWaterMark:e,writableHighWaterMark:t.writableHighWaterMark||0}),_o.call(this,t),this._readableState.sync=!1,this[_i]=null,t&&(typeof t.transform=="function"&&(this._transform=t.transform),typeof t.flush=="function"&&(this._flush=t.flush)),this.on("prefinish",a0);}function wo(t){typeof this._flush=="function"&&!this.destroyed?this._flush((e,r)=>{if(e){t?t(e):this.destroy(e);return}r!=null&&this.push(r),this.push(null),t&&t();}):(this.push(null),t&&t());}function a0(){this._final!==wo&&wo.call(this);}Tt.prototype._final=wo;Tt.prototype._transform=function(t,e,r){throw new s0("_transform()")};Tt.prototype._write=function(t,e,r){let i=this._readableState,n=this._writableState,o=i.length;this._transform(t,e,(s,a)=>{if(s){r(s);return}a!=null&&this.push(a),n.ended||o===i.length||i.length{_();v();m();var{ObjectSetPrototypeOf:Bh}=ce();Ph.exports=Vr;var vo=mo();Bh(Vr.prototype,vo.prototype);Bh(Vr,vo);function Vr(t){if(!(this instanceof Vr))return new Vr(t);vo.call(this,t);}Vr.prototype._transform=function(t,e,r){r(null,t);};});var En=M((oC,Lh)=>{_();v();m();var mi=Nt(),{ArrayIsArray:l0,Promise:u0,SymbolAsyncIterator:f0}=ce(),vn=vt(),{once:c0}=Je(),h0=ir(),kh=nt(),{aggregateTwoErrors:d0,codes:{ERR_INVALID_ARG_TYPE:Po,ERR_INVALID_RETURN_VALUE:So,ERR_MISSING_ARGS:p0,ERR_STREAM_DESTROYED:g0,ERR_STREAM_PREMATURE_CLOSE:y0},AbortError:b0}=Ae(),{validateFunction:w0,validateAbortSignal:_0}=hi(),{isIterable:dr,isReadable:Ao,isReadableNodeStream:mn,isNodeStream:Oh,isTransformStream:zr,isWebStream:m0,isReadableStream:Io,isReadableEnded:v0}=tt(),E0=globalThis.AbortController||zi().AbortController,To,Ro;function xh(t,e,r){let i=!1;t.on("close",()=>{i=!0;});let n=vn(t,{readable:e,writable:r},o=>{i=!o;});return {destroy:o=>{i||(i=!0,h0.destroyer(t,o||new g0("pipe")));},cleanup:n}}function S0(t){return w0(t[t.length-1],"streams[stream.length - 1]"),t.pop()}function Co(t){if(dr(t))return t;if(mn(t))return A0(t);throw new Po("val",["Readable","Iterable","AsyncIterable"],t)}async function*A0(t){Ro||(Ro=gi()),yield*Ro.prototype[f0].call(t);}async function _n(t,e,r,{end:i}){let n,o=null,s=c=>{if(c&&(n=c),o){let h=o;o=null,h();}},a=()=>new u0((c,h)=>{n?h(n):o=()=>{n?h(n):c();};});e.on("drain",s);let l=vn(e,{readable:!1},s);try{e.writableNeedDrain&&await a();for await(let c of t)e.write(c)||await a();i&&e.end(),await a(),r();}catch(c){r(n!==c?d0(n,c):c);}finally{l(),e.off("drain",s);}}async function Bo(t,e,r,{end:i}){zr(e)&&(e=e.writable);let n=e.getWriter();try{for await(let o of t)await n.ready,n.write(o).catch(()=>{});await n.ready,i&&await n.close(),r();}catch(o){try{await n.abort(o),r(o);}catch(s){r(s);}}}function I0(...t){return Mh(t,c0(S0(t)))}function Mh(t,e,r){if(t.length===1&&l0(t[0])&&(t=t[0]),t.length<2)throw new p0("streams");let i=new E0,n=i.signal,o=r?.signal,s=[];_0(o,"options.signal");function a(){y(new b0);}o?.addEventListener("abort",a);let l,c,h=[],d=0;function g(C){y(C,--d===0);}function y(C,R){if(C&&(!l||l.code==="ERR_STREAM_PREMATURE_CLOSE")&&(l=C),!(!l&&!R)){for(;h.length;)h.shift()(l);o?.removeEventListener("abort",a),i.abort(),R&&(l||s.forEach(U=>U()),mi.nextTick(e,l,c));}}let w;for(let C=0;C0,W=U||r?.end!==!1,K=C===t.length-1;if(Oh(R)){let z=function(Q){Q&&Q.name!=="AbortError"&&Q.code!=="ERR_STREAM_PREMATURE_CLOSE"&&g(Q);};if(W){let{destroy:Q,cleanup:pe}=xh(R,U,N);h.push(Q),Ao(R)&&K&&s.push(pe);}R.on("error",z),Ao(R)&&K&&s.push(()=>{R.removeListener("error",z);});}if(C===0)if(typeof R=="function"){if(w=R({signal:n}),!dr(w))throw new So("Iterable, AsyncIterable or Stream","source",w)}else dr(R)||mn(R)||zr(R)?w=R:w=kh.from(R);else if(typeof R=="function"){if(zr(w)){var S;w=Co((S=w)===null||S===void 0?void 0:S.readable);}else w=Co(w);if(w=R(w,{signal:n}),U){if(!dr(w,!0))throw new So("AsyncIterable",`transform[${C-1}]`,w)}else {var E;To||(To=Eo());let z=new To({objectMode:!0}),Q=(E=w)===null||E===void 0?void 0:E.then;if(typeof Q=="function")d++,Q.call(w,ge=>{c=ge,ge!=null&&z.write(ge),W&&z.end(),mi.nextTick(g);},ge=>{z.destroy(ge),mi.nextTick(g,ge);});else if(dr(w,!0))d++,_n(w,z,g,{end:W});else if(Io(w)||zr(w)){let ge=w.readable||w;d++,_n(ge,z,g,{end:W});}else throw new So("AsyncIterable or Promise","destination",w);w=z;let{destroy:pe,cleanup:Yt}=xh(w,!1,!0);h.push(pe),K&&s.push(Yt);}}else if(Oh(R)){if(mn(w)){d+=2;let z=T0(w,R,g,{end:W});Ao(R)&&K&&s.push(z);}else if(zr(w)||Io(w)){let z=w.readable||w;d++,_n(z,R,g,{end:W});}else if(dr(w))d++,_n(w,R,g,{end:W});else throw new Po("val",["Readable","Iterable","AsyncIterable","ReadableStream","TransformStream"],w);w=R;}else if(m0(R)){if(mn(w))d++,Bo(Co(w),R,g,{end:W});else if(Io(w)||dr(w))d++,Bo(w,R,g,{end:W});else if(zr(w))d++,Bo(w.readable,R,g,{end:W});else throw new Po("val",["Readable","Iterable","AsyncIterable","ReadableStream","TransformStream"],w);w=R;}else w=kh.from(R);}return (n!=null&&n.aborted||o!=null&&o.aborted)&&mi.nextTick(a),w}function T0(t,e,r,{end:i}){let n=!1;if(e.on("close",()=>{n||r(new y0);}),t.pipe(e,{end:!1}),i){let s=function(){n=!0,e.end();};v0(t)?mi.nextTick(s):t.once("end",s);}else r();return vn(t,{readable:!0,writable:!1},s=>{let a=t._readableState;s&&s.code==="ERR_STREAM_PREMATURE_CLOSE"&&a&&a.ended&&!a.errored&&!a.errorEmitted?t.once("end",r).once("error",r):r(s);}),vn(e,{readable:!1,writable:!0},r)}Lh.exports={pipelineImpl:Mh,pipeline:I0};});var Oo=M((yC,Fh)=>{_();v();m();var{pipeline:R0}=En(),Sn=nt(),{destroyer:C0}=ir(),{isNodeStream:An,isReadable:Uh,isWritable:Nh,isWebStream:ko,isTransformStream:pr,isWritableStream:qh,isReadableStream:Dh}=tt(),{AbortError:B0,codes:{ERR_INVALID_ARG_VALUE:jh,ERR_MISSING_ARGS:P0}}=Ae(),k0=vt();Fh.exports=function(...e){if(e.length===0)throw new P0("streams");if(e.length===1)return Sn.from(e[0]);let r=[...e];if(typeof e[0]=="function"&&(e[0]=Sn.from(e[0])),typeof e[e.length-1]=="function"){let y=e.length-1;e[y]=Sn.from(e[y]);}for(let y=0;y0&&!(Nh(e[y])||qh(e[y])||pr(e[y])))throw new jh(`streams[${y}]`,r[y],"must be writable")}let i,n,o,s,a;function l(y){let w=s;s=null,w?w(y):y?a.destroy(y):!g&&!d&&a.destroy();}let c=e[0],h=R0(e,l),d=!!(Nh(c)||qh(c)||pr(c)),g=!!(Uh(h)||Dh(h)||pr(h));if(a=new Sn({writableObjectMode:!!(c!=null&&c.writableObjectMode),readableObjectMode:!!(h!=null&&h.writableObjectMode),writable:d,readable:g}),d){if(An(c))a._write=function(w,S,E){c.write(w,S)?E():i=E;},a._final=function(w){c.end(),n=w;},c.on("drain",function(){if(i){let w=i;i=null,w();}});else if(ko(c)){let S=(pr(c)?c.writable:c).getWriter();a._write=async function(E,I,C){try{await S.ready,S.write(E).catch(()=>{}),C();}catch(R){C(R);}},a._final=async function(E){try{await S.ready,S.close().catch(()=>{}),n=E;}catch(I){E(I);}};}let y=pr(h)?h.readable:h;k0(y,()=>{if(n){let w=n;n=null,w();}});}if(g){if(An(h))h.on("readable",function(){if(o){let y=o;o=null,y();}}),h.on("end",function(){a.push(null);}),a._read=function(){for(;;){let y=h.read();if(y===null){o=a._read;return}if(!a.push(y))return}};else if(ko(h)){let w=(pr(h)?h.readable:h).getReader();a._read=async function(){for(;;)try{let{value:S,done:E}=await w.read();if(!a.push(S))return;if(E){a.push(null);return}}catch{return}};}}return a._destroy=function(y,w){!y&&s!==null&&(y=new B0),o=null,i=null,n=null,s===null?w(y):(s=w,An(h)&&C0(h,y));},a};});var Qh=M((TC,Lo)=>{_();v();m();var Vh=globalThis.AbortController||zi().AbortController,{codes:{ERR_INVALID_ARG_VALUE:O0,ERR_INVALID_ARG_TYPE:vi,ERR_MISSING_ARGS:x0,ERR_OUT_OF_RANGE:M0},AbortError:st}=Ae(),{validateAbortSignal:gr,validateInteger:L0,validateObject:yr}=hi(),U0=ce().Symbol("kWeak"),{finished:N0}=vt(),q0=Oo(),{addAbortSignalNoValidate:D0}=di(),{isWritable:j0,isNodeStream:F0}=tt(),{ArrayPrototypePush:W0,MathFloor:$0,Number:H0,NumberIsNaN:V0,Promise:Wh,PromiseReject:$h,PromisePrototypeThen:z0,Symbol:zh}=ce(),In=zh("kEmpty"),Hh=zh("kEof");function K0(t,e){if(e!=null&&yr(e,"options"),e?.signal!=null&&gr(e.signal,"options.signal"),F0(t)&&!j0(t))throw new O0("stream",t,"must be writable");let r=q0(this,t);return e!=null&&e.signal&&D0(e.signal,r),r}function Tn(t,e){if(typeof t!="function")throw new vi("fn",["Function","AsyncFunction"],t);e!=null&&yr(e,"options"),e?.signal!=null&&gr(e.signal,"options.signal");let r=1;return e?.concurrency!=null&&(r=$0(e.concurrency)),L0(r,"concurrency",1),async function*(){var n,o;let s=new Vh,a=this,l=[],c=s.signal,h={signal:c},d=()=>s.abort();e!=null&&(n=e.signal)!==null&&n!==void 0&&n.aborted&&d(),e==null||(o=e.signal)===null||o===void 0||o.addEventListener("abort",d);let g,y,w=!1;function S(){w=!0;}async function E(){try{for await(let R of a){var I;if(w)return;if(c.aborted)throw new st;try{R=t(R,h);}catch(U){R=$h(U);}R!==In&&(typeof((I=R)===null||I===void 0?void 0:I.catch)=="function"&&R.catch(S),l.push(R),g&&(g(),g=null),!w&&l.length&&l.length>=r&&await new Wh(U=>{y=U;}));}l.push(Hh);}catch(R){let U=$h(R);z0(U,void 0,S),l.push(U);}finally{var C;w=!0,g&&(g(),g=null),e==null||(C=e.signal)===null||C===void 0||C.removeEventListener("abort",d);}}E();try{for(;;){for(;l.length>0;){let I=await l[0];if(I===Hh)return;if(c.aborted)throw new st;I!==In&&(yield I),l.shift(),y&&(y(),y=null);}await new Wh(I=>{g=I;});}}finally{s.abort(),w=!0,y&&(y(),y=null);}}.call(this)}function G0(t=void 0){return t!=null&&yr(t,"options"),t?.signal!=null&&gr(t.signal,"options.signal"),async function*(){let r=0;for await(let n of this){var i;if(t!=null&&(i=t.signal)!==null&&i!==void 0&&i.aborted)throw new st({cause:t.signal.reason});yield [r++,n];}}.call(this)}async function Kh(t,e=void 0){for await(let r of Mo.call(this,t,e))return !0;return !1}async function Q0(t,e=void 0){if(typeof t!="function")throw new vi("fn",["Function","AsyncFunction"],t);return !await Kh.call(this,async(...r)=>!await t(...r),e)}async function Y0(t,e){for await(let r of Mo.call(this,t,e))return r}async function J0(t,e){if(typeof t!="function")throw new vi("fn",["Function","AsyncFunction"],t);async function r(i,n){return await t(i,n),In}for await(let i of Tn.call(this,r,e));}function Mo(t,e){if(typeof t!="function")throw new vi("fn",["Function","AsyncFunction"],t);async function r(i,n){return await t(i,n)?i:In}return Tn.call(this,r,e)}var xo=class extends x0{constructor(){super("reduce"),this.message="Reduce of an empty stream requires an initial value";}};async function X0(t,e,r){var i;if(typeof t!="function")throw new vi("reducer",["Function","AsyncFunction"],t);r!=null&&yr(r,"options"),r?.signal!=null&&gr(r.signal,"options.signal");let n=arguments.length>1;if(r!=null&&(i=r.signal)!==null&&i!==void 0&&i.aborted){let c=new st(void 0,{cause:r.signal.reason});throw this.once("error",()=>{}),await N0(this.destroy(c)),c}let o=new Vh,s=o.signal;if(r!=null&&r.signal){let c={once:!0,[U0]:this};r.signal.addEventListener("abort",()=>o.abort(),c);}let a=!1;try{for await(let c of this){var l;if(a=!0,r!=null&&(l=r.signal)!==null&&l!==void 0&&l.aborted)throw new st;n?e=await t(e,c,{signal:s}):(e=c,n=!0);}if(!a&&!n)throw new xo}finally{o.abort();}return e}async function Z0(t){t!=null&&yr(t,"options"),t?.signal!=null&&gr(t.signal,"options.signal");let e=[];for await(let i of this){var r;if(t!=null&&(r=t.signal)!==null&&r!==void 0&&r.aborted)throw new st(void 0,{cause:t.signal.reason});W0(e,i);}return e}function em(t,e){let r=Tn.call(this,t,e);return async function*(){for await(let n of r)yield*n;}.call(this)}function Gh(t){if(t=H0(t),V0(t))return 0;if(t<0)throw new M0("number",">= 0",t);return t}function tm(t,e=void 0){return e!=null&&yr(e,"options"),e?.signal!=null&&gr(e.signal,"options.signal"),t=Gh(t),async function*(){var i;if(e!=null&&(i=e.signal)!==null&&i!==void 0&&i.aborted)throw new st;for await(let o of this){var n;if(e!=null&&(n=e.signal)!==null&&n!==void 0&&n.aborted)throw new st;t--<=0&&(yield o);}}.call(this)}function rm(t,e=void 0){return e!=null&&yr(e,"options"),e?.signal!=null&&gr(e.signal,"options.signal"),t=Gh(t),async function*(){var i;if(e!=null&&(i=e.signal)!==null&&i!==void 0&&i.aborted)throw new st;for await(let o of this){var n;if(e!=null&&(n=e.signal)!==null&&n!==void 0&&n.aborted)throw new st;if(t-- >0)yield o;else return}}.call(this)}Lo.exports.streamReturningOperators={asIndexedPairs:G0,drop:tm,filter:Mo,flatMap:em,map:Tn,take:rm,compose:K0};Lo.exports.promiseReturningOperators={every:Q0,forEach:J0,reduce:X0,toArray:Z0,some:Kh,find:Y0};});var Uo=M((UC,Yh)=>{_();v();m();var{ArrayPrototypePop:im,Promise:nm}=ce(),{isIterable:sm,isNodeStream:om,isWebStream:am}=tt(),{pipelineImpl:lm}=En(),{finished:um}=vt();No();function fm(...t){return new nm((e,r)=>{let i,n,o=t[t.length-1];if(o&&typeof o=="object"&&!om(o)&&!sm(o)&&!am(o)){let s=im(t);i=s.signal,n=s.end;}lm(t,(s,a)=>{s?r(s):e(a);},{signal:i,end:n});})}Yh.exports={finished:um,pipeline:fm};});var No=M((zC,sd)=>{_();v();m();var{Buffer:cm}=(be(),X(me)),{ObjectDefineProperty:Rt,ObjectKeys:Zh,ReflectApply:ed}=ce(),{promisify:{custom:td}}=Je(),{streamReturningOperators:Jh,promiseReturningOperators:Xh}=Qh(),{codes:{ERR_ILLEGAL_CONSTRUCTOR:rd}}=Ae(),hm=Oo(),{pipeline:id}=En(),{destroyer:dm}=ir(),nd=vt(),qo=Uo(),Do=tt(),le=sd.exports=nn().Stream;le.isDisturbed=Do.isDisturbed;le.isErrored=Do.isErrored;le.isReadable=Do.isReadable;le.Readable=gi();for(let t of Zh(Jh)){let r=function(...i){if(new.target)throw rd();return le.Readable.from(ed(e,this,i))};let e=Jh[t];Rt(r,"name",{__proto__:null,value:e.name}),Rt(r,"length",{__proto__:null,value:e.length}),Rt(le.Readable.prototype,t,{__proto__:null,value:r,enumerable:!1,configurable:!0,writable:!0});}for(let t of Zh(Xh)){let r=function(...n){if(new.target)throw rd();return ed(e,this,n)};let e=Xh[t];Rt(r,"name",{__proto__:null,value:e.name}),Rt(r,"length",{__proto__:null,value:e.length}),Rt(le.Readable.prototype,t,{__proto__:null,value:r,enumerable:!1,configurable:!0,writable:!0});}le.Writable=ho();le.Duplex=nt();le.Transform=mo();le.PassThrough=Eo();le.pipeline=id;var{addAbortSignal:pm}=di();le.addAbortSignal=pm;le.finished=nd;le.destroy=dm;le.compose=hm;Rt(le,"promises",{__proto__:null,configurable:!0,enumerable:!0,get(){return qo}});Rt(id,td,{__proto__:null,enumerable:!0,get(){return qo.pipeline}});Rt(nd,td,{__proto__:null,enumerable:!0,get(){return qo.finished}});le.Stream=le;le._isUint8Array=function(e){return e instanceof Uint8Array};le._uint8ArrayToBuffer=function(e){return cm.from(e.buffer,e.byteOffset,e.byteLength)};});var jt=M((rB,ue)=>{_();v();m();var he=No(),gm=Uo(),ym=he.Readable.destroy;ue.exports=he.Readable;ue.exports._uint8ArrayToBuffer=he._uint8ArrayToBuffer;ue.exports._isUint8Array=he._isUint8Array;ue.exports.isDisturbed=he.isDisturbed;ue.exports.isErrored=he.isErrored;ue.exports.isReadable=he.isReadable;ue.exports.Readable=he.Readable;ue.exports.Writable=he.Writable;ue.exports.Duplex=he.Duplex;ue.exports.Transform=he.Transform;ue.exports.PassThrough=he.PassThrough;ue.exports.addAbortSignal=he.addAbortSignal;ue.exports.finished=he.finished;ue.exports.destroy=he.destroy;ue.exports.destroy=ym;ue.exports.pipeline=he.pipeline;ue.exports.compose=he.compose;Object.defineProperty(he,"promises",{configurable:!0,enumerable:!0,get(){return gm}});ue.exports.Stream=he.Stream;ue.exports.default=ue.exports;});var od=M((hB,Fo)=>{_();v();m();typeof Object.create=="function"?Fo.exports=function(e,r){r&&(e.super_=r,e.prototype=Object.create(r.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}));}:Fo.exports=function(e,r){if(r){e.super_=r;var i=function(){};i.prototype=r.prototype,e.prototype=new i,e.prototype.constructor=e;}};});var ud=M((EB,ld)=>{_();v();m();var{Buffer:ze}=(be(),X(me)),ad=Symbol.for("BufferList");function ee(t){if(!(this instanceof ee))return new ee(t);ee._init.call(this,t);}ee._init=function(e){Object.defineProperty(this,ad,{value:!0}),this._bufs=[],this.length=0,e&&this.append(e);};ee.prototype._new=function(e){return new ee(e)};ee.prototype._offset=function(e){if(e===0)return [0,0];let r=0;for(let i=0;ithis.length||e<0)return;let r=this._offset(e);return this._bufs[r[0]][r[1]]};ee.prototype.slice=function(e,r){return typeof e=="number"&&e<0&&(e+=this.length),typeof r=="number"&&r<0&&(r+=this.length),this.copy(null,0,e,r)};ee.prototype.copy=function(e,r,i,n){if((typeof i!="number"||i<0)&&(i=0),(typeof n!="number"||n>this.length)&&(n=this.length),i>=this.length||n<=0)return e||ze.alloc(0);let o=!!e,s=this._offset(i),a=n-i,l=a,c=o&&r||0,h=s[1];if(i===0&&n===this.length){if(!o)return this._bufs.length===1?this._bufs[0]:ze.concat(this._bufs,this.length);for(let d=0;dg)this._bufs[d].copy(e,c,h),c+=g;else {this._bufs[d].copy(e,c,h,h+l),c+=g;break}l-=g,h&&(h=0);}return e.length>c?e.slice(0,c):e};ee.prototype.shallowSlice=function(e,r){if(e=e||0,r=typeof r!="number"?this.length:r,e<0&&(e+=this.length),r<0&&(r+=this.length),e===r)return this._new();let i=this._offset(e),n=this._offset(r),o=this._bufs.slice(i[0],n[0]+1);return n[1]===0?o.pop():o[o.length-1]=o[o.length-1].slice(0,n[1]),i[1]!==0&&(o[0]=o[0].slice(i[1])),this._new(o)};ee.prototype.toString=function(e,r,i){return this.slice(r,i).toString(e)};ee.prototype.consume=function(e){if(e=Math.trunc(e),Number.isNaN(e)||e<=0)return this;for(;this._bufs.length;)if(e>=this._bufs[0].length)e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift();else {this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}return this};ee.prototype.duplicate=function(){let e=this._new();for(let r=0;rthis.length?this.length:e;let i=this._offset(e),n=i[0],o=i[1];for(;n=t.length){let l=s.indexOf(t,o);if(l!==-1)return this._reverseOffset([n,l]);o=s.length-t.length+1;}else {let l=this._reverseOffset([n,o]);if(this._match(l,t))return l;o++;}o=0;}return -1};ee.prototype._match=function(t,e){if(this.length-t{_();v();m();var Wo=jt().Duplex,bm=od(),Ei=ud();function Se(t){if(!(this instanceof Se))return new Se(t);if(typeof t=="function"){this._callback=t;let e=function(i){this._callback&&(this._callback(i),this._callback=null);}.bind(this);this.on("pipe",function(i){i.on("error",e);}),this.on("unpipe",function(i){i.removeListener("error",e);}),t=null;}Ei._init.call(this,t),Wo.call(this);}bm(Se,Wo);Object.assign(Se.prototype,Ei.prototype);Se.prototype._new=function(e){return new Se(e)};Se.prototype._write=function(e,r,i){this._appendBuffer(e),typeof i=="function"&&i();};Se.prototype._read=function(e){if(!this.length)return this.push(null);e=Math.min(e,this.length),this.push(this.slice(0,e)),this.consume(e);};Se.prototype.end=function(e){Wo.prototype.end.call(this,e),this._callback&&(this._callback(null,this.slice()),this._callback=null);};Se.prototype._destroy=function(e,r){this._bufs.length=0,this.length=0,r(e);};Se.prototype._isBufferList=function(e){return e instanceof Se||e instanceof Ei||Se.isBufferList(e)};Se.isBufferList=Ei.isBufferList;Rn.exports=Se;Rn.exports.BufferListStream=Se;Rn.exports.BufferList=Ei;});var hd=M((WB,cd)=>{_();v();m();var $o=class{constructor(){this.cmd=null,this.retain=!1,this.qos=0,this.dup=!1,this.length=-1,this.topic=null,this.payload=null;}};cd.exports=$o;});var Ho=M((XB,dd)=>{_();v();m();var L=dd.exports,{Buffer:ke}=(be(),X(me));L.types={0:"reserved",1:"connect",2:"connack",3:"publish",4:"puback",5:"pubrec",6:"pubrel",7:"pubcomp",8:"subscribe",9:"suback",10:"unsubscribe",11:"unsuback",12:"pingreq",13:"pingresp",14:"disconnect",15:"auth"};L.requiredHeaderFlags={1:0,2:0,4:0,5:0,6:2,7:0,8:2,9:0,10:2,11:0,12:0,13:0,14:0,15:0};L.requiredHeaderFlagsErrors={};for(let t in L.requiredHeaderFlags){let e=L.requiredHeaderFlags[t];L.requiredHeaderFlagsErrors[t]="Invalid header flag bits, must be 0x"+e.toString(16)+" for "+L.types[t]+" packet";}L.codes={};for(let t in L.types){let e=L.types[t];L.codes[e]=t;}L.CMD_SHIFT=4;L.CMD_MASK=240;L.DUP_MASK=8;L.QOS_MASK=3;L.QOS_SHIFT=1;L.RETAIN_MASK=1;L.VARBYTEINT_MASK=127;L.VARBYTEINT_FIN_MASK=128;L.VARBYTEINT_MAX=268435455;L.SESSIONPRESENT_MASK=1;L.SESSIONPRESENT_HEADER=ke.from([L.SESSIONPRESENT_MASK]);L.CONNACK_HEADER=ke.from([L.codes.connack<[0,1].map(r=>[0,1].map(i=>{let n=ke.alloc(1);return n.writeUInt8(L.codes[t]<ke.from([t]));L.EMPTY={pingreq:ke.from([L.codes.pingreq<<4,0]),pingresp:ke.from([L.codes.pingresp<<4,0]),disconnect:ke.from([L.codes.disconnect<<4,0])};L.MQTT5_PUBACK_PUBREC_CODES={0:"Success",16:"No matching subscribers",128:"Unspecified error",131:"Implementation specific error",135:"Not authorized",144:"Topic Name invalid",145:"Packet identifier in use",151:"Quota exceeded",153:"Payload format invalid"};L.MQTT5_PUBREL_PUBCOMP_CODES={0:"Success",146:"Packet Identifier not found"};L.MQTT5_SUBACK_CODES={0:"Granted QoS 0",1:"Granted QoS 1",2:"Granted QoS 2",128:"Unspecified error",131:"Implementation specific error",135:"Not authorized",143:"Topic Filter invalid",145:"Packet Identifier in use",151:"Quota exceeded",158:"Shared Subscriptions not supported",161:"Subscription Identifiers not supported",162:"Wildcard Subscriptions not supported"};L.MQTT5_UNSUBACK_CODES={0:"Success",17:"No subscription existed",128:"Unspecified error",131:"Implementation specific error",135:"Not authorized",143:"Topic Filter invalid",145:"Packet Identifier in use"};L.MQTT5_DISCONNECT_CODES={0:"Normal disconnection",4:"Disconnect with Will Message",128:"Unspecified error",129:"Malformed Packet",130:"Protocol Error",131:"Implementation specific error",135:"Not authorized",137:"Server busy",139:"Server shutting down",141:"Keep Alive timeout",142:"Session taken over",143:"Topic Filter invalid",144:"Topic Name invalid",147:"Receive Maximum exceeded",148:"Topic Alias invalid",149:"Packet too large",150:"Message rate too high",151:"Quota exceeded",152:"Administrative action",153:"Payload format invalid",154:"Retain not supported",155:"QoS not supported",156:"Use another server",157:"Server moved",158:"Shared Subscriptions not supported",159:"Connection rate exceeded",160:"Maximum connect time",161:"Subscription Identifiers not supported",162:"Wildcard Subscriptions not supported"};L.MQTT5_AUTH_CODES={0:"Success",24:"Continue authentication",25:"Re-authenticate"};});var gd=M((lP,pd)=>{_();v();m();var Kr=1e3,Gr=Kr*60,Qr=Gr*60,br=Qr*24,wm=br*7,_m=br*365.25;pd.exports=function(t,e){e=e||{};var r=typeof t;if(r==="string"&&t.length>0)return mm(t);if(r==="number"&&isFinite(t))return e.long?Em(t):vm(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))};function mm(t){if(t=String(t),!(t.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(t);if(e){var r=parseFloat(e[1]),i=(e[2]||"ms").toLowerCase();switch(i){case"years":case"year":case"yrs":case"yr":case"y":return r*_m;case"weeks":case"week":case"w":return r*wm;case"days":case"day":case"d":return r*br;case"hours":case"hour":case"hrs":case"hr":case"h":return r*Qr;case"minutes":case"minute":case"mins":case"min":case"m":return r*Gr;case"seconds":case"second":case"secs":case"sec":case"s":return r*Kr;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}}}function vm(t){var e=Math.abs(t);return e>=br?Math.round(t/br)+"d":e>=Qr?Math.round(t/Qr)+"h":e>=Gr?Math.round(t/Gr)+"m":e>=Kr?Math.round(t/Kr)+"s":t+"ms"}function Em(t){var e=Math.abs(t);return e>=br?Cn(t,e,br,"day"):e>=Qr?Cn(t,e,Qr,"hour"):e>=Gr?Cn(t,e,Gr,"minute"):e>=Kr?Cn(t,e,Kr,"second"):t+" ms"}function Cn(t,e,r,i){var n=e>=r*1.5;return Math.round(t/r)+" "+i+(n?"s":"")}});var bd=M((wP,yd)=>{_();v();m();function Sm(t){r.debug=r,r.default=r,r.coerce=l,r.disable=o,r.enable=n,r.enabled=s,r.humanize=gd(),r.destroy=c,Object.keys(t).forEach(h=>{r[h]=t[h];}),r.names=[],r.skips=[],r.formatters={};function e(h){let d=0;for(let g=0;g{if(W==="%%")return "%";U++;let z=r.formatters[K];if(typeof z=="function"){let Q=E[U];W=z.call(I,Q),E.splice(U,1),U--;}return W}),r.formatArgs.call(I,E),(I.log||r.log).apply(I,E);}return S.namespace=h,S.useColors=r.useColors(),S.color=r.selectColor(h),S.extend=i,S.destroy=r.destroy,Object.defineProperty(S,"enabled",{enumerable:!0,configurable:!1,get:()=>g!==null?g:(y!==r.namespaces&&(y=r.namespaces,w=r.enabled(h)),w),set:E=>{g=E;}}),typeof r.init=="function"&&r.init(S),S}function i(h,d){let g=r(this.namespace+(typeof d>"u"?":":d)+h);return g.log=this.log,g}function n(h){r.save(h),r.namespaces=h,r.names=[],r.skips=[];let d,g=(typeof h=="string"?h:"").split(/[\s,]+/),y=g.length;for(d=0;d"-"+d)].join(",");return r.enable(""),h}function s(h){if(h[h.length-1]==="*")return !0;let d,g;for(d=0,g=r.skips.length;d{_();v();m();xe.formatArgs=Im;xe.save=Tm;xe.load=Rm;xe.useColors=Am;xe.storage=Cm();xe.destroy=(()=>{let t=!1;return ()=>{t||(t=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."));}})();xe.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function Am(){return typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)?!0:typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)?!1:typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function Im(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+Bn.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;t.splice(1,0,e,"color: inherit");let r=0,i=0;t[0].replace(/%[a-zA-Z%]/g,n=>{n!=="%%"&&(r++,n==="%c"&&(i=r));}),t.splice(i,0,e);}xe.log=console.debug||console.log||(()=>{});function Tm(t){try{t?xe.storage.setItem("debug",t):xe.storage.removeItem("debug");}catch{}}function Rm(){let t;try{t=xe.storage.getItem("debug");}catch{}return !t&&typeof B<"u"&&"env"in B&&(t=B.env.DEBUG),t}function Cm(){try{return localStorage}catch{}}Bn.exports=bd()(xe);var{formatters:Bm}=Bn.exports;Bm.j=function(t){try{return JSON.stringify(t)}catch(e){return "[UnexpectedJSONParseError]: "+e.message}};});var md=M((NP,_d)=>{_();v();m();var Pm=fd(),{EventEmitter:km}=(sr(),X(nr)),wd=hd(),V=Ho(),D=ot()("mqtt-packet:parser"),Vo=class t extends km{constructor(){super(),this.parser=this.constructor.parser;}static parser(e){return this instanceof t?(this.settings=e||{},this._states=["_parseHeader","_parseLength","_parsePayload","_newPacket"],this._resetState(),this):new t().parser(e)}_resetState(){D("_resetState: resetting packet, error, _list, and _stateCounter"),this.packet=new wd,this.error=null,this._list=Pm(),this._stateCounter=0;}parse(e){for(this.error&&this._resetState(),this._list.append(e),D("parse: current state: %s",this._states[this._stateCounter]);(this.packet.length!==-1||this._list.length>0)&&this[this._states[this._stateCounter]]()&&!this.error;)this._stateCounter++,D("parse: state complete. _stateCounter is now: %d",this._stateCounter),D("parse: packet.length: %d, buffer list length: %d",this.packet.length,this._list.length),this._stateCounter>=this._states.length&&(this._stateCounter=0);return D("parse: exited while loop. packet: %d, buffer list length: %d",this.packet.length,this._list.length),this._list.length}_parseHeader(){let e=this._list.readUInt8(0),r=e>>V.CMD_SHIFT;this.packet.cmd=V.types[r];let i=e&15,n=V.requiredHeaderFlags[r];return n!=null&&i!==n?this._emitError(new Error(V.requiredHeaderFlagsErrors[r])):(this.packet.retain=(e&V.RETAIN_MASK)!==0,this.packet.qos=e>>V.QOS_SHIFT&V.QOS_MASK,this.packet.qos>2?this._emitError(new Error("Packet must not have both QoS bits set to 1")):(this.packet.dup=(e&V.DUP_MASK)!==0,D("_parseHeader: packet: %o",this.packet),this._list.consume(1),!0))}_parseLength(){let e=this._parseVarByteNum(!0);return e&&(this.packet.length=e.value,this._list.consume(e.bytes)),D("_parseLength %d",e.value),!!e}_parsePayload(){D("_parsePayload: payload %O",this._list);let e=!1;if(this.packet.length===0||this._list.length>=this.packet.length){switch(this._pos=0,this.packet.cmd){case"connect":this._parseConnect();break;case"connack":this._parseConnack();break;case"publish":this._parsePublish();break;case"puback":case"pubrec":case"pubrel":case"pubcomp":this._parseConfirmation();break;case"subscribe":this._parseSubscribe();break;case"suback":this._parseSuback();break;case"unsubscribe":this._parseUnsubscribe();break;case"unsuback":this._parseUnsuback();break;case"pingreq":case"pingresp":break;case"disconnect":this._parseDisconnect();break;case"auth":this._parseAuth();break;default:this._emitError(new Error("Not supported"));}e=!0;}return D("_parsePayload complete result: %s",e),e}_parseConnect(){D("_parseConnect");let e,r,i,n,o={},s=this.packet,a=this._parseString();if(a===null)return this._emitError(new Error("Cannot parse protocolId"));if(a!=="MQTT"&&a!=="MQIsdp")return this._emitError(new Error("Invalid protocolId"));if(s.protocolId=a,this._pos>=this._list.length)return this._emitError(new Error("Packet too short"));if(s.protocolVersion=this._list.readUInt8(this._pos),s.protocolVersion>=128&&(s.bridgeMode=!0,s.protocolVersion=s.protocolVersion-128),s.protocolVersion!==3&&s.protocolVersion!==4&&s.protocolVersion!==5)return this._emitError(new Error("Invalid protocol version"));if(this._pos++,this._pos>=this._list.length)return this._emitError(new Error("Packet too short"));if(this._list.readUInt8(this._pos)&1)return this._emitError(new Error("Connect flag bit 0 must be 0, but got 1"));o.username=this._list.readUInt8(this._pos)&V.USERNAME_MASK,o.password=this._list.readUInt8(this._pos)&V.PASSWORD_MASK,o.will=this._list.readUInt8(this._pos)&V.WILL_FLAG_MASK;let l=!!(this._list.readUInt8(this._pos)&V.WILL_RETAIN_MASK),c=(this._list.readUInt8(this._pos)&V.WILL_QOS_MASK)>>V.WILL_QOS_SHIFT;if(o.will)s.will={},s.will.retain=l,s.will.qos=c;else {if(l)return this._emitError(new Error("Will Retain Flag must be set to zero when Will Flag is set to 0"));if(c)return this._emitError(new Error("Will QoS must be set to zero when Will Flag is set to 0"))}if(s.clean=(this._list.readUInt8(this._pos)&V.CLEAN_SESSION_MASK)!==0,this._pos++,s.keepalive=this._parseNum(),s.keepalive===-1)return this._emitError(new Error("Packet too short"));if(s.protocolVersion===5){let d=this._parseProperties();Object.getOwnPropertyNames(d).length&&(s.properties=d);}let h=this._parseString();if(h===null)return this._emitError(new Error("Packet too short"));if(s.clientId=h,D("_parseConnect: packet.clientId: %s",s.clientId),o.will){if(s.protocolVersion===5){let d=this._parseProperties();Object.getOwnPropertyNames(d).length&&(s.will.properties=d);}if(e=this._parseString(),e===null)return this._emitError(new Error("Cannot parse will topic"));if(s.will.topic=e,D("_parseConnect: packet.will.topic: %s",s.will.topic),r=this._parseBuffer(),r===null)return this._emitError(new Error("Cannot parse will payload"));s.will.payload=r,D("_parseConnect: packet.will.paylaod: %s",s.will.payload);}if(o.username){if(n=this._parseString(),n===null)return this._emitError(new Error("Cannot parse username"));s.username=n,D("_parseConnect: packet.username: %s",s.username);}if(o.password){if(i=this._parseBuffer(),i===null)return this._emitError(new Error("Cannot parse password"));s.password=i;}return this.settings=s,D("_parseConnect: complete"),s}_parseConnack(){D("_parseConnack");let e=this.packet;if(this._list.length<1)return null;let r=this._list.readUInt8(this._pos++);if(r>1)return this._emitError(new Error("Invalid connack flags, bits 7-1 must be set to 0"));if(e.sessionPresent=!!(r&V.SESSIONPRESENT_MASK),this.settings.protocolVersion===5)this._list.length>=2?e.reasonCode=this._list.readUInt8(this._pos++):e.reasonCode=0;else {if(this._list.length<2)return null;e.returnCode=this._list.readUInt8(this._pos++);}if(e.returnCode===-1||e.reasonCode===-1)return this._emitError(new Error("Cannot parse return code"));if(this.settings.protocolVersion===5){let i=this._parseProperties();Object.getOwnPropertyNames(i).length&&(e.properties=i);}D("_parseConnack: complete");}_parsePublish(){D("_parsePublish");let e=this.packet;if(e.topic=this._parseString(),e.topic===null)return this._emitError(new Error("Cannot parse topic"));if(!(e.qos>0&&!this._parseMessageId())){if(this.settings.protocolVersion===5){let r=this._parseProperties();Object.getOwnPropertyNames(r).length&&(e.properties=r);}e.payload=this._list.slice(this._pos,e.length),D("_parsePublish: payload from buffer list: %o",e.payload);}}_parseSubscribe(){D("_parseSubscribe");let e=this.packet,r,i,n,o,s,a,l;if(e.subscriptions=[],!!this._parseMessageId()){if(this.settings.protocolVersion===5){let c=this._parseProperties();Object.getOwnPropertyNames(c).length&&(e.properties=c);}if(e.length<=0)return this._emitError(new Error("Malformed subscribe, no payload specified"));for(;this._pos=e.length)return this._emitError(new Error("Malformed Subscribe Payload"));if(i=this._parseByte(),this.settings.protocolVersion===5){if(i&192)return this._emitError(new Error("Invalid subscribe topic flag bits, bits 7-6 must be 0"))}else if(i&252)return this._emitError(new Error("Invalid subscribe topic flag bits, bits 7-2 must be 0"));if(n=i&V.SUBSCRIBE_OPTIONS_QOS_MASK,n>2)return this._emitError(new Error("Invalid subscribe QoS, must be <= 2"));if(a=(i>>V.SUBSCRIBE_OPTIONS_NL_SHIFT&V.SUBSCRIBE_OPTIONS_NL_MASK)!==0,s=(i>>V.SUBSCRIBE_OPTIONS_RAP_SHIFT&V.SUBSCRIBE_OPTIONS_RAP_MASK)!==0,o=i>>V.SUBSCRIBE_OPTIONS_RH_SHIFT&V.SUBSCRIBE_OPTIONS_RH_MASK,o>2)return this._emitError(new Error("Invalid retain handling, must be <= 2"));l={topic:r,qos:n},this.settings.protocolVersion===5?(l.nl=a,l.rap=s,l.rh=o):this.settings.bridgeMode&&(l.rh=0,l.rap=!0,l.nl=!0),D("_parseSubscribe: push subscription `%s` to subscription",l),e.subscriptions.push(l);}}}_parseSuback(){D("_parseSuback");let e=this.packet;if(this.packet.granted=[],!!this._parseMessageId()){if(this.settings.protocolVersion===5){let r=this._parseProperties();Object.getOwnPropertyNames(r).length&&(e.properties=r);}if(e.length<=0)return this._emitError(new Error("Malformed suback, no payload specified"));for(;this._pos2&&r!==128)return this._emitError(new Error("Invalid suback QoS, must be 0, 1, 2 or 128"));this.packet.granted.push(r);}}}_parseUnsubscribe(){D("_parseUnsubscribe");let e=this.packet;if(e.unsubscriptions=[],!!this._parseMessageId()){if(this.settings.protocolVersion===5){let r=this._parseProperties();Object.getOwnPropertyNames(r).length&&(e.properties=r);}if(e.length<=0)return this._emitError(new Error("Malformed unsubscribe, no payload specified"));for(;this._pos2){switch(e.reasonCode=this._parseByte(),this.packet.cmd){case"puback":case"pubrec":if(!V.MQTT5_PUBACK_PUBREC_CODES[e.reasonCode])return this._emitError(new Error("Invalid "+this.packet.cmd+" reason code"));break;case"pubrel":case"pubcomp":if(!V.MQTT5_PUBREL_PUBCOMP_CODES[e.reasonCode])return this._emitError(new Error("Invalid "+this.packet.cmd+" reason code"));break}D("_parseConfirmation: packet.reasonCode `%d`",e.reasonCode);}else e.reasonCode=0;if(e.length>3){let r=this._parseProperties();Object.getOwnPropertyNames(r).length&&(e.properties=r);}}return !0}_parseDisconnect(){let e=this.packet;if(D("_parseDisconnect"),this.settings.protocolVersion===5){this._list.length>0?(e.reasonCode=this._parseByte(),V.MQTT5_DISCONNECT_CODES[e.reasonCode]||this._emitError(new Error("Invalid disconnect reason code"))):e.reasonCode=0;let r=this._parseProperties();Object.getOwnPropertyNames(r).length&&(e.properties=r);}return D("_parseDisconnect result: true"),!0}_parseAuth(){D("_parseAuth");let e=this.packet;if(this.settings.protocolVersion!==5)return this._emitError(new Error("Not supported auth packet for this version MQTT"));if(e.reasonCode=this._parseByte(),!V.MQTT5_AUTH_CODES[e.reasonCode])return this._emitError(new Error("Invalid auth reason code"));let r=this._parseProperties();return Object.getOwnPropertyNames(r).length&&(e.properties=r),D("_parseAuth: result: true"),!0}_parseMessageId(){let e=this.packet;return e.messageId=this._parseNum(),e.messageId===null?(this._emitError(new Error("Cannot parse messageId")),!1):(D("_parseMessageId: packet.messageId %d",e.messageId),!0)}_parseString(e){let r=this._parseNum(),i=r+this._pos;if(r===-1||i>this._list.length||i>this.packet.length)return null;let n=this._list.toString("utf8",this._pos,i);return this._pos+=r,D("_parseString: result: %s",n),n}_parseStringPair(){return D("_parseStringPair"),{name:this._parseString(),value:this._parseString()}}_parseBuffer(){let e=this._parseNum(),r=e+this._pos;if(e===-1||r>this._list.length||r>this.packet.length)return null;let i=this._list.slice(this._pos,r);return this._pos+=e,D("_parseBuffer: result: %o",i),i}_parseNum(){if(this._list.length-this._pos<2)return -1;let e=this._list.readUInt16BE(this._pos);return this._pos+=2,D("_parseNum: result: %s",e),e}_parse4ByteNum(){if(this._list.length-this._pos<4)return -1;let e=this._list.readUInt32BE(this._pos);return this._pos+=4,D("_parse4ByteNum: result: %s",e),e}_parseVarByteNum(e){D("_parseVarByteNum");let r=4,i=0,n=1,o=0,s=!1,a,l=this._pos?this._pos:0;for(;i=i&&this._emitError(new Error("Invalid variable byte integer")),l&&(this._pos+=i),s?e?s={bytes:i,value:o}:s=o:s=!1,D("_parseVarByteNum: result: %o",s),s}_parseByte(){let e;return this._pos{_();v();m();var{Buffer:Si}=(be(),X(me)),Om=65536,vd={},xm=Si.isBuffer(Si.from([1,2]).subarray(0,1));function Ed(t){let e=Si.allocUnsafe(2);return e.writeUInt8(t>>8,0),e.writeUInt8(t&255,0+1),e}function Mm(){for(let t=0;t0&&(r=r|128),n.writeUInt8(r,i++);while(t>0&&i<4);return t>0&&(i=0),xm?n.subarray(0,i):n.slice(0,i)}function Um(t){let e=Si.allocUnsafe(4);return e.writeUInt32BE(t,0),e}Sd.exports={cache:vd,generateCache:Mm,generateNumber:Ed,genBufVariableByteInt:Lm,generate4ByteBuffer:Um};});var Id=M((ik,zo)=>{_();v();m();typeof B>"u"||!B.version||B.version.indexOf("v0.")===0||B.version.indexOf("v1.")===0&&B.version.indexOf("v1.8.")!==0?zo.exports={nextTick:Nm}:zo.exports=B;function Nm(t,e,r,i){if(typeof t!="function")throw new TypeError('"callback" argument must be a function');var n=arguments.length,o,s;switch(n){case 0:case 1:return B.nextTick(t);case 2:return B.nextTick(function(){t.call(null,e);});case 3:return B.nextTick(function(){t.call(null,e,r);});case 4:return B.nextTick(function(){t.call(null,e,r,i);});default:for(o=new Array(n-1),s=0;s{_();v();m();var j=Ho(),{Buffer:q}=(be(),X(me)),qm=q.allocUnsafe(0),Dm=q.from([0]),Ai=Ad(),jm=Id().nextTick,qe=ot()("mqtt-packet:writeToStream"),Pn=Ai.cache,Fm=Ai.generateNumber,Wm=Ai.generateCache,Ko=Ai.genBufVariableByteInt,$m=Ai.generate4ByteBuffer,Te=Go,kn=!0;function kd(t,e,r){switch(qe("generate called"),e.cork&&(e.cork(),jm(Hm,e)),kn&&(kn=!1,Wm()),qe("generate: packet.cmd: %s",t.cmd),t.cmd){case"connect":return Vm(t,e);case"connack":return zm(t,e,r);case"publish":return Km(t,e,r);case"puback":case"pubrec":case"pubrel":case"pubcomp":return Gm(t,e,r);case"subscribe":return Qm(t,e,r);case"suback":return Ym(t,e,r);case"unsubscribe":return Jm(t,e,r);case"unsuback":return Xm(t,e,r);case"pingreq":case"pingresp":return Zm(t,e);case"disconnect":return e1(t,e,r);case"auth":return t1(t,e,r);default:return e.destroy(new Error("Unknown command")),!1}}Object.defineProperty(kd,"cacheNumbers",{get(){return Te===Go},set(t){t?((!Pn||Object.keys(Pn).length===0)&&(kn=!0),Te=Go):(kn=!1,Te=r1);}});function Hm(t){t.uncork();}function Vm(t,e,r){let i=t||{},n=i.protocolId||"MQTT",o=i.protocolVersion||4,s=i.will,a=i.clean,l=i.keepalive||0,c=i.clientId||"",h=i.username,d=i.password,g=i.properties;a===void 0&&(a=!0);let y=0;if(!n||typeof n!="string"&&!q.isBuffer(n))return e.destroy(new Error("Invalid protocolId")),!1;if(y+=n.length+2,o!==3&&o!==4&&o!==5)return e.destroy(new Error("Invalid protocol version")),!1;if(y+=1,(typeof c=="string"||q.isBuffer(c))&&(c||o>=4)&&(c||a))y+=q.byteLength(c)+2;else {if(o<4)return e.destroy(new Error("clientId must be supplied before 3.1.1")),!1;if(a*1===0)return e.destroy(new Error("clientId must be given if cleanSession set to 0")),!1}if(typeof l!="number"||l<0||l>65535||l%1!==0)return e.destroy(new Error("Invalid keepalive")),!1;y+=2,y+=1;let w,S;if(o===5){if(w=Wt(e,g),!w)return !1;y+=w.length;}if(s){if(typeof s!="object")return e.destroy(new Error("Invalid will")),!1;if(!s.topic||typeof s.topic!="string")return e.destroy(new Error("Invalid will topic")),!1;if(y+=q.byteLength(s.topic)+2,y+=2,s.payload)if(s.payload.length>=0)typeof s.payload=="string"?y+=q.byteLength(s.payload):y+=s.payload.length;else return e.destroy(new Error("Invalid will payload")),!1;if(S={},o===5){if(S=Wt(e,s.properties),!S)return !1;y+=S.length;}}let E=!1;if(h!=null)if(Pd(h))E=!0,y+=q.byteLength(h)+2;else return e.destroy(new Error("Invalid username")),!1;if(d!=null){if(!E)return e.destroy(new Error("Username is required to use password")),!1;if(Pd(d))y+=Od(d)+2;else return e.destroy(new Error("Invalid password")),!1}e.write(j.CONNECT_HEADER),De(e,y),Yr(e,n),i.bridgeMode&&(o+=128),e.write(o===131?j.VERSION131:o===132?j.VERSION132:o===4?j.VERSION4:o===5?j.VERSION5:j.VERSION3);let I=0;return I|=h!=null?j.USERNAME_MASK:0,I|=d!=null?j.PASSWORD_MASK:0,I|=s&&s.retain?j.WILL_RETAIN_MASK:0,I|=s&&s.qos?s.qos<0&&Te(e,c),g?.write(),qe("publish: payload: %o",l),e.write(l)}function Gm(t,e,r){let i=r?r.protocolVersion:4,n=t||{},o=n.cmd||"puback",s=n.messageId,a=n.dup&&o==="pubrel"?j.DUP_MASK:0,l=0,c=n.reasonCode,h=n.properties,d=i===5?3:2;if(o==="pubrel"&&(l=1),typeof s!="number")return e.destroy(new Error("Invalid messageId")),!1;let g=null;if(i===5&&typeof h=="object"){if(g=Ii(e,h,r,d),!g)return !1;d+=g.length;}return e.write(j.ACKS[o][l][a][0]),d===3&&(d+=c!==0?1:-1),De(e,d),Te(e,s),i===5&&d!==2&&e.write(q.from([c])),g!==null?g.write():d===4&&e.write(q.from([0])),!0}function Qm(t,e,r){qe("subscribe: packet: ");let i=r?r.protocolVersion:4,n=t||{},o=n.dup?j.DUP_MASK:0,s=n.messageId,a=n.subscriptions,l=n.properties,c=0;if(typeof s!="number")return e.destroy(new Error("Invalid messageId")),!1;c+=2;let h=null;if(i===5){if(h=Wt(e,l),!h)return !1;c+=h.length;}if(typeof a=="object"&&a.length)for(let g=0;g2)return e.destroy(new Error("Invalid subscriptions - invalid Retain Handling")),!1}c+=q.byteLength(y)+2+1;}else return e.destroy(new Error("Invalid subscriptions")),!1;qe("subscribe: writing to stream: %o",j.SUBSCRIBE_HEADER),e.write(j.SUBSCRIBE_HEADER[1][o?1:0][0]),De(e,c),Te(e,s),h!==null&&h.write();let d=!0;for(let g of a){let y=g.topic,w=g.qos,S=+g.nl,E=+g.rap,I=g.rh,C;wr(e,y),C=j.SUBSCRIBE_OPTIONS_QOS[w],i===5&&(C|=S?j.SUBSCRIBE_OPTIONS_NL:0,C|=E?j.SUBSCRIBE_OPTIONS_RAP:0,C|=I?j.SUBSCRIBE_OPTIONS_RH[I]:0),d=e.write(q.from([C]));}return d}function Ym(t,e,r){let i=r?r.protocolVersion:4,n=t||{},o=n.messageId,s=n.granted,a=n.properties,l=0;if(typeof o!="number")return e.destroy(new Error("Invalid messageId")),!1;if(l+=2,typeof s=="object"&&s.length)for(let h=0;hj.VARBYTEINT_MAX)return t.destroy(new Error(`Invalid variable byte integer: ${e}`)),!1;let r=Td[e];return r||(r=Ko(e),e<16384&&(Td[e]=r)),qe("writeVarByteInt: writing to stream: %o",r),t.write(r)}function wr(t,e){let r=q.byteLength(e);return Te(t,r),qe("writeString: %s",e),t.write(e,"utf8")}function Rd(t,e,r){wr(t,e),wr(t,r);}function Go(t,e){return qe("writeNumberCached: number: %d",e),qe("writeNumberCached: %o",Pn[e]),t.write(Pn[e])}function r1(t,e){let r=Fm(e);return qe("writeNumberGenerated: %o",r),t.write(r)}function i1(t,e){let r=$m(e);return qe("write4ByteNumber: %o",r),t.write(r)}function Yr(t,e){typeof e=="string"?wr(t,e):e?(Te(t,e.length),t.write(e)):Te(t,0);}function Wt(t,e){if(typeof e!="object"||e.length!=null)return {length:1,write(){Bd(t,{},0);}};let r=0;function i(o,s){let a=j.propertiesTypes[o],l=0;switch(a){case"byte":{if(typeof s!="boolean")return t.destroy(new Error(`Invalid ${o}: ${s}`)),!1;l+=1+1;break}case"int8":{if(typeof s!="number"||s<0||s>255)return t.destroy(new Error(`Invalid ${o}: ${s}`)),!1;l+=1+1;break}case"binary":{if(s&&s===null)return t.destroy(new Error(`Invalid ${o}: ${s}`)),!1;l+=1+q.byteLength(s)+2;break}case"int16":{if(typeof s!="number"||s<0||s>65535)return t.destroy(new Error(`Invalid ${o}: ${s}`)),!1;l+=1+2;break}case"int32":{if(typeof s!="number"||s<0||s>4294967295)return t.destroy(new Error(`Invalid ${o}: ${s}`)),!1;l+=1+4;break}case"var":{if(typeof s!="number"||s<0||s>268435455)return t.destroy(new Error(`Invalid ${o}: ${s}`)),!1;l+=1+q.byteLength(Ko(s));break}case"string":{if(typeof s!="string")return t.destroy(new Error(`Invalid ${o}: ${s}`)),!1;l+=1+2+q.byteLength(s.toString());break}case"pair":{if(typeof s!="object")return t.destroy(new Error(`Invalid ${o}: ${s}`)),!1;l+=Object.getOwnPropertyNames(s).reduce((c,h)=>{let d=s[h];return Array.isArray(d)?c+=d.reduce((g,y)=>(g+=1+2+q.byteLength(h.toString())+2+q.byteLength(y.toString()),g),0):c+=1+2+q.byteLength(h.toString())+2+q.byteLength(s[h].toString()),c},0);break}default:return t.destroy(new Error(`Invalid property ${o}: ${s}`)),!1}return l}if(e)for(let o in e){let s=0,a=0,l=e[o];if(Array.isArray(l))for(let c=0;co;){let a=n.shift();if(a&&e[a])delete e[a],s=Wt(t,e);else return !1}return s}function Cd(t,e,r){switch(j.propertiesTypes[e]){case"byte":{t.write(q.from([j.properties[e]])),t.write(q.from([+r]));break}case"int8":{t.write(q.from([j.properties[e]])),t.write(q.from([r]));break}case"binary":{t.write(q.from([j.properties[e]])),Yr(t,r);break}case"int16":{t.write(q.from([j.properties[e]])),Te(t,r);break}case"int32":{t.write(q.from([j.properties[e]])),i1(t,r);break}case"var":{t.write(q.from([j.properties[e]])),De(t,r);break}case"string":{t.write(q.from([j.properties[e]])),wr(t,r);break}case"pair":{Object.getOwnPropertyNames(r).forEach(n=>{let o=r[n];Array.isArray(o)?o.forEach(s=>{t.write(q.from([j.properties[e]])),Rd(t,n.toString(),s.toString());}):(t.write(q.from([j.properties[e]])),Rd(t,n.toString(),o.toString()));});break}default:return t.destroy(new Error(`Invalid property ${e} value: ${r}`)),!1}}function Bd(t,e,r){De(t,r);for(let i in e)if(Object.prototype.hasOwnProperty.call(e,i)&&e[i]!==null){let n=e[i];if(Array.isArray(n))for(let o=0;o{_();v();m();var n1=Qo(),{EventEmitter:s1}=(sr(),X(nr)),{Buffer:Md}=(be(),X(me));function o1(t,e){let r=new Yo;return n1(t,r,e),r.concat()}var Yo=class extends s1{constructor(){super(),this._array=new Array(20),this._i=0;}write(e){return this._array[this._i++]=e,!0}concat(){let e=0,r=new Array(this._array.length),i=this._array,n=0,o;for(o=0;o{_();v();m();On.parser=md().parser;On.generate=Ud();On.writeToStream=Qo();});var Zo=M(Xo=>{_();v();m();Object.defineProperty(Xo,"__esModule",{value:!0});var Jo=class{constructor(){this.nextId=Math.max(1,Math.floor(Math.random()*65535));}allocate(){let e=this.nextId++;return this.nextId===65536&&(this.nextId=1),e}getLastAllocated(){return this.nextId===1?65535:this.nextId-1}register(e){return !0}deallocate(e){}clear(){}};Xo.default=Jo;});var Dd=M((Zk,qd)=>{_();v();m();qd.exports=a1;function Jr(t){return t instanceof x?x.from(t):new t.constructor(t.buffer.slice(),t.byteOffset,t.length)}function a1(t){if(t=t||{},t.circles)return l1(t);return t.proto?i:r;function e(n,o){for(var s=Object.keys(n),a=new Array(s.length),l=0;l{_();v();m();jd.exports=Dd()();});var $d=M(Xr=>{_();v();m();Object.defineProperty(Xr,"__esModule",{value:!0});Xr.validateTopics=Xr.validateTopic=void 0;function Wd(t){let e=t.split("/");for(let r=0;r{_();v();m();Object.defineProperty(ta,"__esModule",{value:!0});var f1=jt(),c1={objectMode:!0},h1={clean:!0},ea=class{constructor(e){this.options=e||{},this.options=Object.assign(Object.assign({},h1),e),this._inflights=new Map;}put(e,r){return this._inflights.set(e.messageId,e),r&&r(),this}createStream(){let e=new f1.Readable(c1),r=[],i=!1,n=0;return this._inflights.forEach((o,s)=>{r.push(o);}),e._read=()=>{!i&&n{if(!i)return i=!0,setTimeout(()=>{e.emit("close");},0),e},e}del(e,r){let i=this._inflights.get(e.messageId);return i?(this._inflights.delete(e.messageId),r(null,i)):r&&r(new Error("missing packet")),this}get(e,r){let i=this._inflights.get(e.messageId);return i?r(null,i):r&&r(new Error("missing packet")),this}close(e){this.options.clean&&(this._inflights=null),e&&e();}};ta.default=ea;});var Vd=M(ia=>{_();v();m();Object.defineProperty(ia,"__esModule",{value:!0});var Hd=[0,16,128,131,135,144,145,151,153],d1=(t,e,r)=>{t.log("handlePublish: packet %o",e),r=typeof r<"u"?r:t.noop;let i=e.topic.toString(),n=e.payload,{qos:o}=e,{messageId:s}=e,{options:a}=t;if(t.options.protocolVersion===5){let l;if(e.properties&&(l=e.properties.topicAlias),typeof l<"u")if(i.length===0)if(l>0&&l<=65535){let c=t.topicAliasRecv.getTopicByAlias(l);if(c)i=c,t.log("handlePublish :: topic complemented by alias. topic: %s - alias: %d",i,l);else {t.log("handlePublish :: unregistered topic alias. alias: %d",l),t.emit("error",new Error("Received unregistered Topic Alias"));return}}else {t.log("handlePublish :: topic alias out of range. alias: %d",l),t.emit("error",new Error("Received Topic Alias is out of range"));return}else if(t.topicAliasRecv.put(i,l))t.log("handlePublish :: registered topic: %s - alias: %d",i,l);else {t.log("handlePublish :: topic alias out of range. alias: %d",l),t.emit("error",new Error("Received Topic Alias is out of range"));return}}switch(t.log("handlePublish: qos %d",o),o){case 2:{a.customHandleAcks(i,n,e,(l,c)=>{if(typeof l=="number"&&(c=l,l=null),l)return t.emit("error",l);if(Hd.indexOf(c)===-1)return t.emit("error",new Error("Wrong reason code for pubrec"));c?t._sendPacket({cmd:"pubrec",messageId:s,reasonCode:c},r):t.incomingStore.put(e,()=>{t._sendPacket({cmd:"pubrec",messageId:s},r);});});break}case 1:{a.customHandleAcks(i,n,e,(l,c)=>{if(typeof l=="number"&&(c=l,l=null),l)return t.emit("error",l);if(Hd.indexOf(c)===-1)return t.emit("error",new Error("Wrong reason code for puback"));c||t.emit("message",i,n,e),t.handleMessage(e,h=>{if(h)return r&&r(h);t._sendPacket({cmd:"puback",messageId:s,reasonCode:c},r);});});break}case 0:t.emit("message",i,n,e),t.handleMessage(e,r);break;default:t.log("handlePublish: unknown QoS. Doing nothing.");break}};ia.default=d1;});var zd=M((QO,p1)=>{p1.exports={version:"5.10.1"};});var _r=M(at=>{_();v();m();Object.defineProperty(at,"__esModule",{value:!0});at.MQTTJS_VERSION=at.nextTick=at.applyMixin=at.ErrorWithReasonCode=void 0;var na=class t extends Error{constructor(e,r){super(e),this.code=r,Object.setPrototypeOf(this,t.prototype),Object.getPrototypeOf(this).name="ErrorWithReasonCode";}};at.ErrorWithReasonCode=na;function g1(t,e,r=!1){var i;let n=[e];for(;;){let o=n[0],s=Object.getPrototypeOf(o);if(s?.prototype)n.unshift(s);else break}for(let o of n)for(let s of Object.getOwnPropertyNames(o.prototype))(r||s!=="constructor")&&Object.defineProperty(t.prototype,s,(i=Object.getOwnPropertyDescriptor(o.prototype,s))!==null&&i!==void 0?i:Object.create(null));}at.applyMixin=g1;at.nextTick=typeof(B===null||B===void 0?void 0:B.nextTick)=="function"?B.nextTick:t=>{setTimeout(t,0);};at.MQTTJS_VERSION=zd().version;});var Ti=M($t=>{_();v();m();Object.defineProperty($t,"__esModule",{value:!0});$t.ReasonCodes=void 0;var Kd=_r();$t.ReasonCodes={0:"",1:"Unacceptable protocol version",2:"Identifier rejected",3:"Server unavailable",4:"Bad username or password",5:"Not authorized",16:"No matching subscribers",17:"No subscription existed",128:"Unspecified error",129:"Malformed Packet",130:"Protocol Error",131:"Implementation specific error",132:"Unsupported Protocol Version",133:"Client Identifier not valid",134:"Bad User Name or Password",135:"Not authorized",136:"Server unavailable",137:"Server busy",138:"Banned",139:"Server shutting down",140:"Bad authentication method",141:"Keep Alive timeout",142:"Session taken over",143:"Topic Filter invalid",144:"Topic Name invalid",145:"Packet identifier in use",146:"Packet Identifier not found",147:"Receive Maximum exceeded",148:"Topic Alias invalid",149:"Packet too large",150:"Message rate too high",151:"Quota exceeded",152:"Administrative action",153:"Payload format invalid",154:"Retain not supported",155:"QoS not supported",156:"Use another server",157:"Server moved",158:"Shared Subscriptions not supported",159:"Connection rate exceeded",160:"Maximum connect time",161:"Subscription Identifiers not supported",162:"Wildcard Subscriptions not supported"};var y1=(t,e)=>{let{messageId:r}=e,i=e.cmd,n=null,o=t.outgoing[r]?t.outgoing[r].cb:null,s=null;if(!o){t.log("_handleAck :: Server sent an ack in error. Ignoring.");return}switch(t.log("_handleAck :: packet type",i),i){case"pubcomp":case"puback":{let a=e.reasonCode;a&&a>0&&a!==16?(s=new Kd.ErrorWithReasonCode(`Publish error: ${$t.ReasonCodes[a]}`,a),t._removeOutgoingAndStoreMessage(r,()=>{o(s,e);})):t._removeOutgoingAndStoreMessage(r,o);break}case"pubrec":{n={cmd:"pubrel",qos:2,messageId:r};let a=e.reasonCode;a&&a>0&&a!==16?(s=new Kd.ErrorWithReasonCode(`Publish error: ${$t.ReasonCodes[a]}`,a),t._removeOutgoingAndStoreMessage(r,()=>{o(s,e);})):t._sendPacket(n);break}case"suback":{delete t.outgoing[r],t.messageIdProvider.deallocate(r);let a=e.granted;for(let l=0;l{delete t._resubscribeTopics[d];});}}delete t.messageIdToTopic[r],t._invokeStoreProcessingQueue(),o(s,e);break}case"unsuback":{delete t.outgoing[r],t.messageIdProvider.deallocate(r),t._invokeStoreProcessingQueue(),o(null,e);break}default:t.emit("error",new Error("unrecognized packet type"));}t.disconnecting&&Object.keys(t.outgoing).length===0&&t.emit("outgoingEmpty");};$t.default=y1;});var Qd=M(sa=>{_();v();m();Object.defineProperty(sa,"__esModule",{value:!0});var Gd=_r(),b1=Ti(),w1=(t,e)=>{let{options:r}=t,i=r.protocolVersion,n=i===5?e.reasonCode:e.returnCode;if(i!==5){let o=new Gd.ErrorWithReasonCode(`Protocol error: Auth packets are only supported in MQTT 5. Your version:${i}`,n);t.emit("error",o);return}t.handleAuth(e,(o,s)=>{if(o){t.emit("error",o);return}if(n===24)t.reconnecting=!1,t._sendPacket(s);else {let a=new Gd.ErrorWithReasonCode(`Connection refused: ${b1.ReasonCodes[n]}`,n);t.emit("error",a);}});};sa.default=w1;});var ep=M(Mn=>{_();v();m();Object.defineProperty(Mn,"__esModule",{value:!0});Mn.LRUCache=void 0;var Ri=typeof performance=="object"&&performance&&typeof performance.now=="function"?performance:Date,Jd=new Set,oa=typeof B=="object"&&B?B:{},Xd=(t,e,r,i)=>{typeof oa.emitWarning=="function"?oa.emitWarning(t,e,r,i):console.error(`[${r}] ${e}: ${t}`);},xn=globalThis.AbortController,Yd=globalThis.AbortSignal;if(typeof xn>"u"){Yd=class{onabort;_onabort=[];reason;aborted=!1;addEventListener(i,n){this._onabort.push(n);}},xn=class{constructor(){e();}signal=new Yd;abort(i){if(!this.signal.aborted){this.signal.reason=i,this.signal.aborted=!0;for(let n of this.signal._onabort)n(i);this.signal.onabort?.(i);}}};let t=oa.env?.LRU_CACHE_IGNORE_AC_WARNING!=="1",e=()=>{t&&(t=!1,Xd("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.","NO_ABORT_CONTROLLER","ENOTSUP",e));};}var _1=t=>!Jd.has(t),Ht=t=>t&&t===Math.floor(t)&&t>0&&isFinite(t),Zd=t=>Ht(t)?t<=Math.pow(2,8)?Uint8Array:t<=Math.pow(2,16)?Uint16Array:t<=Math.pow(2,32)?Uint32Array:t<=Number.MAX_SAFE_INTEGER?Zr:null:null,Zr=class extends Array{constructor(e){super(e),this.fill(0);}},aa=class t{heap;length;static#l=!1;static create(e){let r=Zd(e);if(!r)return [];t.#l=!0;let i=new t(e,r);return t.#l=!1,i}constructor(e,r){if(!t.#l)throw new TypeError("instantiate Stack using Stack.create(n)");this.heap=new r(e),this.length=0;}push(e){this.heap[this.length++]=e;}pop(){return this.heap[--this.length]}},la=class t{#l;#c;#p;#g;#B;ttl;ttlResolution;ttlAutopurge;updateAgeOnGet;updateAgeOnHas;allowStale;noDisposeOnSet;noUpdateTTL;maxEntrySize;sizeCalculation;noDeleteOnFetchRejection;noDeleteOnStaleGet;allowStaleOnFetchAbort;allowStaleOnFetchRejection;ignoreFetchAbort;#i;#y;#n;#r;#e;#u;#h;#a;#s;#b;#o;#E;#S;#w;#_;#I;#f;static unsafeExposeInternals(e){return {starts:e.#S,ttls:e.#w,sizes:e.#E,keyMap:e.#n,keyList:e.#r,valList:e.#e,next:e.#u,prev:e.#h,get head(){return e.#a},get tail(){return e.#s},free:e.#b,isBackgroundFetch:r=>e.#t(r),backgroundFetch:(r,i,n,o)=>e.#O(r,i,n,o),moveToTail:r=>e.#C(r),indexes:r=>e.#m(r),rindexes:r=>e.#v(r),isStale:r=>e.#d(r)}}get max(){return this.#l}get maxSize(){return this.#c}get calculatedSize(){return this.#y}get size(){return this.#i}get fetchMethod(){return this.#B}get dispose(){return this.#p}get disposeAfter(){return this.#g}constructor(e){let{max:r=0,ttl:i,ttlResolution:n=1,ttlAutopurge:o,updateAgeOnGet:s,updateAgeOnHas:a,allowStale:l,dispose:c,disposeAfter:h,noDisposeOnSet:d,noUpdateTTL:g,maxSize:y=0,maxEntrySize:w=0,sizeCalculation:S,fetchMethod:E,noDeleteOnFetchRejection:I,noDeleteOnStaleGet:C,allowStaleOnFetchRejection:R,allowStaleOnFetchAbort:U,ignoreFetchAbort:N}=e;if(r!==0&&!Ht(r))throw new TypeError("max option must be a nonnegative integer");let W=r?Zd(r):Array;if(!W)throw new Error("invalid max value: "+r);if(this.#l=r,this.#c=y,this.maxEntrySize=w||this.#c,this.sizeCalculation=S,this.sizeCalculation){if(!this.#c&&!this.maxEntrySize)throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize");if(typeof this.sizeCalculation!="function")throw new TypeError("sizeCalculation set to non-function")}if(E!==void 0&&typeof E!="function")throw new TypeError("fetchMethod must be a function if specified");if(this.#B=E,this.#I=!!E,this.#n=new Map,this.#r=new Array(r).fill(void 0),this.#e=new Array(r).fill(void 0),this.#u=new W(r),this.#h=new W(r),this.#a=0,this.#s=0,this.#b=aa.create(r),this.#i=0,this.#y=0,typeof c=="function"&&(this.#p=c),typeof h=="function"?(this.#g=h,this.#o=[]):(this.#g=void 0,this.#o=void 0),this.#_=!!this.#p,this.#f=!!this.#g,this.noDisposeOnSet=!!d,this.noUpdateTTL=!!g,this.noDeleteOnFetchRejection=!!I,this.allowStaleOnFetchRejection=!!R,this.allowStaleOnFetchAbort=!!U,this.ignoreFetchAbort=!!N,this.maxEntrySize!==0){if(this.#c!==0&&!Ht(this.#c))throw new TypeError("maxSize must be a positive integer if specified");if(!Ht(this.maxEntrySize))throw new TypeError("maxEntrySize must be a positive integer if specified");this.#q();}if(this.allowStale=!!l,this.noDeleteOnStaleGet=!!C,this.updateAgeOnGet=!!s,this.updateAgeOnHas=!!a,this.ttlResolution=Ht(n)||n===0?n:1,this.ttlAutopurge=!!o,this.ttl=i||0,this.ttl){if(!Ht(this.ttl))throw new TypeError("ttl must be a positive integer if specified");this.#x();}if(this.#l===0&&this.ttl===0&&this.#c===0)throw new TypeError("At least one of max, maxSize, or ttl is required");if(!this.ttlAutopurge&&!this.#l&&!this.#c){let K="LRU_CACHE_UNBOUNDED";_1(K)&&(Jd.add(K),Xd("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",K,t));}}getRemainingTTL(e){return this.#n.has(e)?1/0:0}#x(){let e=new Zr(this.#l),r=new Zr(this.#l);this.#w=e,this.#S=r,this.#M=(o,s,a=Ri.now())=>{if(r[o]=s!==0?a:0,e[o]=s,s!==0&&this.ttlAutopurge){let l=setTimeout(()=>{this.#d(o)&&this.delete(this.#r[o]);},s+1);l.unref&&l.unref();}},this.#T=o=>{r[o]=e[o]!==0?Ri.now():0;},this.#A=(o,s)=>{if(e[s]){let a=e[s],l=r[s];o.ttl=a,o.start=l,o.now=i||n();let c=o.now-l;o.remainingTTL=a-c;}};let i=0,n=()=>{let o=Ri.now();if(this.ttlResolution>0){i=o;let s=setTimeout(()=>i=0,this.ttlResolution);s.unref&&s.unref();}return o};this.getRemainingTTL=o=>{let s=this.#n.get(o);if(s===void 0)return 0;let a=e[s],l=r[s];if(a===0||l===0)return 1/0;let c=(i||n())-l;return a-c},this.#d=o=>e[o]!==0&&r[o]!==0&&(i||n())-r[o]>e[o];}#T=()=>{};#A=()=>{};#M=()=>{};#d=()=>!1;#q(){let e=new Zr(this.#l);this.#y=0,this.#E=e,this.#R=r=>{this.#y-=e[r],e[r]=0;},this.#L=(r,i,n,o)=>{if(this.#t(i))return 0;if(!Ht(n))if(o){if(typeof o!="function")throw new TypeError("sizeCalculation must be a function");if(n=o(i,r),!Ht(n))throw new TypeError("sizeCalculation return invalid (expect positive integer)")}else throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.");return n},this.#P=(r,i,n)=>{if(e[r]=i,this.#c){let o=this.#c-e[r];for(;this.#y>o;)this.#k(!0);}this.#y+=e[r],n&&(n.entrySize=i,n.totalCalculatedSize=this.#y);};}#R=e=>{};#P=(e,r,i)=>{};#L=(e,r,i,n)=>{if(i||n)throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");return 0};*#m({allowStale:e=this.allowStale}={}){if(this.#i)for(let r=this.#s;!(!this.#U(r)||((e||!this.#d(r))&&(yield r),r===this.#a));)r=this.#h[r];}*#v({allowStale:e=this.allowStale}={}){if(this.#i)for(let r=this.#a;!(!this.#U(r)||((e||!this.#d(r))&&(yield r),r===this.#s));)r=this.#u[r];}#U(e){return e!==void 0&&this.#n.get(this.#r[e])===e}*entries(){for(let e of this.#m())this.#e[e]!==void 0&&this.#r[e]!==void 0&&!this.#t(this.#e[e])&&(yield [this.#r[e],this.#e[e]]);}*rentries(){for(let e of this.#v())this.#e[e]!==void 0&&this.#r[e]!==void 0&&!this.#t(this.#e[e])&&(yield [this.#r[e],this.#e[e]]);}*keys(){for(let e of this.#m()){let r=this.#r[e];r!==void 0&&!this.#t(this.#e[e])&&(yield r);}}*rkeys(){for(let e of this.#v()){let r=this.#r[e];r!==void 0&&!this.#t(this.#e[e])&&(yield r);}}*values(){for(let e of this.#m())this.#e[e]!==void 0&&!this.#t(this.#e[e])&&(yield this.#e[e]);}*rvalues(){for(let e of this.#v())this.#e[e]!==void 0&&!this.#t(this.#e[e])&&(yield this.#e[e]);}[Symbol.iterator](){return this.entries()}find(e,r={}){for(let i of this.#m()){let n=this.#e[i],o=this.#t(n)?n.__staleWhileFetching:n;if(o!==void 0&&e(o,this.#r[i],this))return this.get(this.#r[i],r)}}forEach(e,r=this){for(let i of this.#m()){let n=this.#e[i],o=this.#t(n)?n.__staleWhileFetching:n;o!==void 0&&e.call(r,o,this.#r[i],this);}}rforEach(e,r=this){for(let i of this.#v()){let n=this.#e[i],o=this.#t(n)?n.__staleWhileFetching:n;o!==void 0&&e.call(r,o,this.#r[i],this);}}purgeStale(){let e=!1;for(let r of this.#v({allowStale:!0}))this.#d(r)&&(this.delete(this.#r[r]),e=!0);return e}dump(){let e=[];for(let r of this.#m({allowStale:!0})){let i=this.#r[r],n=this.#e[r],o=this.#t(n)?n.__staleWhileFetching:n;if(o===void 0||i===void 0)continue;let s={value:o};if(this.#w&&this.#S){s.ttl=this.#w[r];let a=Ri.now()-this.#S[r];s.start=Math.floor(Date.now()-a);}this.#E&&(s.size=this.#E[r]),e.unshift([i,s]);}return e}load(e){this.clear();for(let[r,i]of e){if(i.start){let n=Date.now()-i.start;i.start=Ri.now()-n;}this.set(r,i.value,i);}}set(e,r,i={}){if(r===void 0)return this.delete(e),this;let{ttl:n=this.ttl,start:o,noDisposeOnSet:s=this.noDisposeOnSet,sizeCalculation:a=this.sizeCalculation,status:l}=i,{noUpdateTTL:c=this.noUpdateTTL}=i,h=this.#L(e,r,i.size||0,a);if(this.maxEntrySize&&h>this.maxEntrySize)return l&&(l.set="miss",l.maxEntrySizeExceeded=!0),this.delete(e),this;let d=this.#i===0?void 0:this.#n.get(e);if(d===void 0)d=this.#i===0?this.#s:this.#b.length!==0?this.#b.pop():this.#i===this.#l?this.#k(!1):this.#i,this.#r[d]=e,this.#e[d]=r,this.#n.set(e,d),this.#u[this.#s]=d,this.#h[d]=this.#s,this.#s=d,this.#i++,this.#P(d,h,l),l&&(l.set="add"),c=!1;else {this.#C(d);let g=this.#e[d];if(r!==g){if(this.#I&&this.#t(g)){g.__abortController.abort(new Error("replaced"));let{__staleWhileFetching:y}=g;y!==void 0&&!s&&(this.#_&&this.#p?.(y,e,"set"),this.#f&&this.#o?.push([y,e,"set"]));}else s||(this.#_&&this.#p?.(g,e,"set"),this.#f&&this.#o?.push([g,e,"set"]));if(this.#R(d),this.#P(d,h,l),this.#e[d]=r,l){l.set="replace";let y=g&&this.#t(g)?g.__staleWhileFetching:g;y!==void 0&&(l.oldValue=y);}}else l&&(l.set="update");}if(n!==0&&!this.#w&&this.#x(),this.#w&&(c||this.#M(d,n,o),l&&this.#A(l,d)),!s&&this.#f&&this.#o){let g=this.#o,y;for(;y=g?.shift();)this.#g?.(...y);}return this}pop(){try{for(;this.#i;){let e=this.#e[this.#a];if(this.#k(!0),this.#t(e)){if(e.__staleWhileFetching)return e.__staleWhileFetching}else if(e!==void 0)return e}}finally{if(this.#f&&this.#o){let e=this.#o,r;for(;r=e?.shift();)this.#g?.(...r);}}}#k(e){let r=this.#a,i=this.#r[r],n=this.#e[r];return this.#I&&this.#t(n)?n.__abortController.abort(new Error("evicted")):(this.#_||this.#f)&&(this.#_&&this.#p?.(n,i,"evict"),this.#f&&this.#o?.push([n,i,"evict"])),this.#R(r),e&&(this.#r[r]=void 0,this.#e[r]=void 0,this.#b.push(r)),this.#i===1?(this.#a=this.#s=0,this.#b.length=0):this.#a=this.#u[r],this.#n.delete(i),this.#i--,r}has(e,r={}){let{updateAgeOnHas:i=this.updateAgeOnHas,status:n}=r,o=this.#n.get(e);if(o!==void 0){let s=this.#e[o];if(this.#t(s)&&s.__staleWhileFetching===void 0)return !1;if(this.#d(o))n&&(n.has="stale",this.#A(n,o));else return i&&this.#T(o),n&&(n.has="hit",this.#A(n,o)),!0}else n&&(n.has="miss");return !1}peek(e,r={}){let{allowStale:i=this.allowStale}=r,n=this.#n.get(e);if(n!==void 0&&(i||!this.#d(n))){let o=this.#e[n];return this.#t(o)?o.__staleWhileFetching:o}}#O(e,r,i,n){let o=r===void 0?void 0:this.#e[r];if(this.#t(o))return o;let s=new xn,{signal:a}=i;a?.addEventListener("abort",()=>s.abort(a.reason),{signal:s.signal});let l={signal:s.signal,options:i,context:n},c=(S,E=!1)=>{let{aborted:I}=s.signal,C=i.ignoreFetchAbort&&S!==void 0;if(i.status&&(I&&!E?(i.status.fetchAborted=!0,i.status.fetchError=s.signal.reason,C&&(i.status.fetchAbortIgnored=!0)):i.status.fetchResolved=!0),I&&!C&&!E)return d(s.signal.reason);let R=y;return this.#e[r]===y&&(S===void 0?R.__staleWhileFetching?this.#e[r]=R.__staleWhileFetching:this.delete(e):(i.status&&(i.status.fetchUpdated=!0),this.set(e,S,l.options))),S},h=S=>(i.status&&(i.status.fetchRejected=!0,i.status.fetchError=S),d(S)),d=S=>{let{aborted:E}=s.signal,I=E&&i.allowStaleOnFetchAbort,C=I||i.allowStaleOnFetchRejection,R=C||i.noDeleteOnFetchRejection,U=y;if(this.#e[r]===y&&(!R||U.__staleWhileFetching===void 0?this.delete(e):I||(this.#e[r]=U.__staleWhileFetching)),C)return i.status&&U.__staleWhileFetching!==void 0&&(i.status.returnedStale=!0),U.__staleWhileFetching;if(U.__returned===U)throw S},g=(S,E)=>{let I=this.#B?.(e,o,l);I&&I instanceof Promise&&I.then(C=>S(C===void 0?void 0:C),E),s.signal.addEventListener("abort",()=>{(!i.ignoreFetchAbort||i.allowStaleOnFetchAbort)&&(S(void 0),i.allowStaleOnFetchAbort&&(S=C=>c(C,!0)));});};i.status&&(i.status.fetchDispatched=!0);let y=new Promise(g).then(c,h),w=Object.assign(y,{__abortController:s,__staleWhileFetching:o,__returned:void 0});return r===void 0?(this.set(e,w,{...l.options,status:void 0}),r=this.#n.get(e)):this.#e[r]=w,w}#t(e){if(!this.#I)return !1;let r=e;return !!r&&r instanceof Promise&&r.hasOwnProperty("__staleWhileFetching")&&r.__abortController instanceof xn}async fetch(e,r={}){let{allowStale:i=this.allowStale,updateAgeOnGet:n=this.updateAgeOnGet,noDeleteOnStaleGet:o=this.noDeleteOnStaleGet,ttl:s=this.ttl,noDisposeOnSet:a=this.noDisposeOnSet,size:l=0,sizeCalculation:c=this.sizeCalculation,noUpdateTTL:h=this.noUpdateTTL,noDeleteOnFetchRejection:d=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:g=this.allowStaleOnFetchRejection,ignoreFetchAbort:y=this.ignoreFetchAbort,allowStaleOnFetchAbort:w=this.allowStaleOnFetchAbort,context:S,forceRefresh:E=!1,status:I,signal:C}=r;if(!this.#I)return I&&(I.fetch="get"),this.get(e,{allowStale:i,updateAgeOnGet:n,noDeleteOnStaleGet:o,status:I});let R={allowStale:i,updateAgeOnGet:n,noDeleteOnStaleGet:o,ttl:s,noDisposeOnSet:a,size:l,sizeCalculation:c,noUpdateTTL:h,noDeleteOnFetchRejection:d,allowStaleOnFetchRejection:g,allowStaleOnFetchAbort:w,ignoreFetchAbort:y,status:I,signal:C},U=this.#n.get(e);if(U===void 0){I&&(I.fetch="miss");let N=this.#O(e,U,R,S);return N.__returned=N}else {let N=this.#e[U];if(this.#t(N)){let pe=i&&N.__staleWhileFetching!==void 0;return I&&(I.fetch="inflight",pe&&(I.returnedStale=!0)),pe?N.__staleWhileFetching:N.__returned=N}let W=this.#d(U);if(!E&&!W)return I&&(I.fetch="hit"),this.#C(U),n&&this.#T(U),I&&this.#A(I,U),N;let K=this.#O(e,U,R,S),Q=K.__staleWhileFetching!==void 0&&i;return I&&(I.fetch=W?"stale":"refresh",Q&&W&&(I.returnedStale=!0)),Q?K.__staleWhileFetching:K.__returned=K}}get(e,r={}){let{allowStale:i=this.allowStale,updateAgeOnGet:n=this.updateAgeOnGet,noDeleteOnStaleGet:o=this.noDeleteOnStaleGet,status:s}=r,a=this.#n.get(e);if(a!==void 0){let l=this.#e[a],c=this.#t(l);return s&&this.#A(s,a),this.#d(a)?(s&&(s.get="stale"),c?(s&&i&&l.__staleWhileFetching!==void 0&&(s.returnedStale=!0),i?l.__staleWhileFetching:void 0):(o||this.delete(e),s&&i&&(s.returnedStale=!0),i?l:void 0)):(s&&(s.get="hit"),c?l.__staleWhileFetching:(this.#C(a),n&&this.#T(a),l))}else s&&(s.get="miss");}#N(e,r){this.#h[r]=e,this.#u[e]=r;}#C(e){e!==this.#s&&(e===this.#a?this.#a=this.#u[e]:this.#N(this.#h[e],this.#u[e]),this.#N(this.#s,e),this.#s=e);}delete(e){let r=!1;if(this.#i!==0){let i=this.#n.get(e);if(i!==void 0)if(r=!0,this.#i===1)this.clear();else {this.#R(i);let n=this.#e[i];this.#t(n)?n.__abortController.abort(new Error("deleted")):(this.#_||this.#f)&&(this.#_&&this.#p?.(n,e,"delete"),this.#f&&this.#o?.push([n,e,"delete"])),this.#n.delete(e),this.#r[i]=void 0,this.#e[i]=void 0,i===this.#s?this.#s=this.#h[i]:i===this.#a?this.#a=this.#u[i]:(this.#u[this.#h[i]]=this.#u[i],this.#h[this.#u[i]]=this.#h[i]),this.#i--,this.#b.push(i);}}if(this.#f&&this.#o?.length){let i=this.#o,n;for(;n=i?.shift();)this.#g?.(...n);}return r}clear(){for(let e of this.#v({allowStale:!0})){let r=this.#e[e];if(this.#t(r))r.__abortController.abort(new Error("deleted"));else {let i=this.#r[e];this.#_&&this.#p?.(r,i,"delete"),this.#f&&this.#o?.push([r,i,"delete"]);}}if(this.#n.clear(),this.#e.fill(void 0),this.#r.fill(void 0),this.#w&&this.#S&&(this.#w.fill(0),this.#S.fill(0)),this.#E&&this.#E.fill(0),this.#a=0,this.#s=0,this.#b.length=0,this.#y=0,this.#i=0,this.#f&&this.#o){let e=this.#o,r;for(;r=e?.shift();)this.#g?.(...r);}}};Mn.LRUCache=la;});var lt=M(Vt=>{_();v();m();Object.defineProperty(Vt,"t",{value:!0});Vt.ContainerIterator=Vt.Container=Vt.Base=void 0;var ua=class{constructor(e=0){this.iteratorType=e;}equals(e){return this.o===e.o}};Vt.ContainerIterator=ua;var Ln=class{constructor(){this.i=0;}get length(){return this.i}size(){return this.i}empty(){return this.i===0}};Vt.Base=Ln;var fa=class extends Ln{};Vt.Container=fa;});var tp=M(Un=>{_();v();m();Object.defineProperty(Un,"t",{value:!0});Un.default=void 0;var m1=lt(),ca=class extends m1.Base{constructor(e=[]){super(),this.S=[];let r=this;e.forEach(function(i){r.push(i);});}clear(){this.i=0,this.S=[];}push(e){return this.S.push(e),this.i+=1,this.i}pop(){if(this.i!==0)return this.i-=1,this.S.pop()}top(){return this.S[this.i-1]}},v1=ca;Un.default=v1;});var rp=M(Nn=>{_();v();m();Object.defineProperty(Nn,"t",{value:!0});Nn.default=void 0;var E1=lt(),ha=class extends E1.Base{constructor(e=[]){super(),this.j=0,this.q=[];let r=this;e.forEach(function(i){r.push(i);});}clear(){this.q=[],this.i=this.j=0;}push(e){let r=this.q.length;if(this.j/r>.5&&this.j+this.i>=r&&r>4096){let i=this.i;for(let n=0;n{_();v();m();Object.defineProperty(qn,"t",{value:!0});qn.default=void 0;var A1=lt(),da=class extends A1.Base{constructor(e=[],r=function(n,o){return n>o?-1:n>1;for(let o=this.i-1>>1;o>=0;--o)this.k(o,n);}m(e){let r=this.C[e];for(;e>0;){let i=e-1>>1,n=this.C[i];if(this.v(n,r)<=0)break;this.C[e]=n,e=i;}this.C[e]=r;}k(e,r){let i=this.C[e];for(;e0&&(n=o,s=this.C[o]),this.v(s,i)>=0)break;this.C[e]=s,e=n;}this.C[e]=i;}clear(){this.i=0,this.C.length=0;}push(e){this.C.push(e),this.m(this.i),this.i+=1;}pop(){if(this.i===0)return;let e=this.C[0],r=this.C.pop();return this.i-=1,this.i&&(this.C[0]=r,this.k(0,this.i>>1)),e}top(){return this.C[0]}find(e){return this.C.indexOf(e)>=0}remove(e){let r=this.C.indexOf(e);return r<0?!1:(r===0?this.pop():r===this.i-1?(this.C.pop(),this.i-=1):(this.C.splice(r,1,this.C.pop()),this.i-=1,this.m(r),this.k(r,this.i>>1)),!0)}updateItem(e){let r=this.C.indexOf(e);return r<0?!1:(this.m(r),this.k(r,this.i>>1),!0)}toArray(){return [...this.C]}},I1=da;qn.default=I1;});var jn=M(Dn=>{_();v();m();Object.defineProperty(Dn,"t",{value:!0});Dn.default=void 0;var T1=lt(),pa=class extends T1.Container{},R1=pa;Dn.default=R1;});var ut=M(ga=>{_();v();m();Object.defineProperty(ga,"t",{value:!0});ga.throwIteratorAccessError=C1;function C1(){throw new RangeError("Iterator access denied!")}});var ba=M(Wn=>{_();v();m();Object.defineProperty(Wn,"t",{value:!0});Wn.RandomIterator=void 0;var B1=lt(),Fn=ut(),ya=class extends B1.ContainerIterator{constructor(e,r){super(r),this.o=e,this.iteratorType===0?(this.pre=function(){return this.o===0&&(0, Fn.throwIteratorAccessError)(),this.o-=1,this},this.next=function(){return this.o===this.container.size()&&(0, Fn.throwIteratorAccessError)(),this.o+=1,this}):(this.pre=function(){return this.o===this.container.size()-1&&(0, Fn.throwIteratorAccessError)(),this.o+=1,this},this.next=function(){return this.o===-1&&(0, Fn.throwIteratorAccessError)(),this.o-=1,this});}get pointer(){return this.container.getElementByPos(this.o)}set pointer(e){this.container.setElementByPos(this.o,e);}};Wn.RandomIterator=ya;});var np=M($n=>{_();v();m();Object.defineProperty($n,"t",{value:!0});$n.default=void 0;var P1=O1(jn()),k1=ba();function O1(t){return t&&t.t?t:{default:t}}var mr=class t extends k1.RandomIterator{constructor(e,r,i){super(e,i),this.container=r;}copy(){return new t(this.o,this.container,this.iteratorType)}},wa=class extends P1.default{constructor(e=[],r=!0){if(super(),Array.isArray(e))this.J=r?[...e]:e,this.i=e.length;else {this.J=[];let i=this;e.forEach(function(n){i.pushBack(n);});}}clear(){this.i=0,this.J.length=0;}begin(){return new mr(0,this)}end(){return new mr(this.i,this)}rBegin(){return new mr(this.i-1,this,1)}rEnd(){return new mr(-1,this,1)}front(){return this.J[0]}back(){return this.J[this.i-1]}getElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;return this.J[e]}eraseElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;return this.J.splice(e,1),this.i-=1,this.i}eraseElementByValue(e){let r=0;for(let i=0;ithis.i-1)throw new RangeError;this.J[e]=r;}insert(e,r,i=1){if(e<0||e>this.i)throw new RangeError;return this.J.splice(e,0,...new Array(i).fill(r)),this.i+=i,this.i}find(e){for(let r=0;r{_();v();m();Object.defineProperty(Hn,"t",{value:!0});Hn.default=void 0;var M1=U1(jn()),L1=lt(),vr=ut();function U1(t){return t&&t.t?t:{default:t}}var Er=class t extends L1.ContainerIterator{constructor(e,r,i,n){super(n),this.o=e,this.h=r,this.container=i,this.iteratorType===0?(this.pre=function(){return this.o.L===this.h&&(0, vr.throwIteratorAccessError)(),this.o=this.o.L,this},this.next=function(){return this.o===this.h&&(0, vr.throwIteratorAccessError)(),this.o=this.o.B,this}):(this.pre=function(){return this.o.B===this.h&&(0, vr.throwIteratorAccessError)(),this.o=this.o.B,this},this.next=function(){return this.o===this.h&&(0, vr.throwIteratorAccessError)(),this.o=this.o.L,this});}get pointer(){return this.o===this.h&&(0, vr.throwIteratorAccessError)(),this.o.l}set pointer(e){this.o===this.h&&(0, vr.throwIteratorAccessError)(),this.o.l=e;}copy(){return new t(this.o,this.h,this.container,this.iteratorType)}},_a=class extends M1.default{constructor(e=[]){super(),this.h={},this.p=this._=this.h.L=this.h.B=this.h;let r=this;e.forEach(function(i){r.pushBack(i);});}V(e){let{L:r,B:i}=e;r.B=i,i.L=r,e===this.p&&(this.p=i),e===this._&&(this._=r),this.i-=1;}G(e,r){let i=r.B,n={l:e,L:r,B:i};r.B=n,i.L=n,r===this.h&&(this.p=n),i===this.h&&(this._=n),this.i+=1;}clear(){this.i=0,this.p=this._=this.h.L=this.h.B=this.h;}begin(){return new Er(this.p,this.h,this)}end(){return new Er(this.h,this.h,this)}rBegin(){return new Er(this._,this.h,this,1)}rEnd(){return new Er(this.h,this.h,this,1)}front(){return this.p.l}back(){return this._.l}getElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let r=this.p;for(;e--;)r=r.B;return r.l}eraseElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let r=this.p;for(;e--;)r=r.B;return this.V(r),this.i}eraseElementByValue(e){let r=this.p;for(;r!==this.h;)r.l===e&&this.V(r),r=r.B;return this.i}eraseElementByIterator(e){let r=e.o;return r===this.h&&(0, vr.throwIteratorAccessError)(),e=e.next(),this.V(r),e}pushBack(e){return this.G(e,this._),this.i}popBack(){if(this.i===0)return;let e=this._.l;return this.V(this._),e}pushFront(e){return this.G(e,this.h),this.i}popFront(){if(this.i===0)return;let e=this.p.l;return this.V(this.p),e}setElementByPos(e,r){if(e<0||e>this.i-1)throw new RangeError;let i=this.p;for(;e--;)i=i.B;i.l=r;}insert(e,r,i=1){if(e<0||e>this.i)throw new RangeError;if(i<=0)return this.i;if(e===0)for(;i--;)this.pushFront(r);else if(e===this.i)for(;i--;)this.pushBack(r);else {let n=this.p;for(let s=1;s{_();v();m();Object.defineProperty(Vn,"t",{value:!0});Vn.default=void 0;var q1=j1(jn()),D1=ba();function j1(t){return t&&t.t?t:{default:t}}var Sr=class t extends D1.RandomIterator{constructor(e,r,i){super(e,i),this.container=r;}copy(){return new t(this.o,this.container,this.iteratorType)}},ma=class extends q1.default{constructor(e=[],r=4096){super(),this.j=0,this.D=0,this.R=0,this.N=0,this.P=0,this.A=[];let i=(()=>{if(typeof e.length=="number")return e.length;if(typeof e.size=="number")return e.size;if(typeof e.size=="function")return e.size();throw new TypeError("Cannot get the length or size of the container")})();this.F=r,this.P=Math.max(Math.ceil(i/this.F),1);for(let s=0;s>1)-(n>>1),this.D=this.N=this.F-i%this.F>>1;let o=this;e.forEach(function(s){o.pushBack(s);});}T(){let e=[],r=Math.max(this.P>>1,1);for(let i=0;i>1;}begin(){return new Sr(0,this)}end(){return new Sr(this.i,this)}rBegin(){return new Sr(this.i-1,this,1)}rEnd(){return new Sr(-1,this,1)}front(){if(this.i!==0)return this.A[this.j][this.D]}back(){if(this.i!==0)return this.A[this.R][this.N]}pushBack(e){return this.i&&(this.N0?this.N-=1:this.R>0?(this.R-=1,this.N=this.F-1):(this.R=this.P-1,this.N=this.F-1)),this.i-=1,e}pushFront(e){return this.i&&(this.D>0?this.D-=1:this.j>0?(this.j-=1,this.D=this.F-1):(this.j=this.P-1,this.D=this.F-1),this.j===this.R&&this.D===this.N&&this.T()),this.i+=1,this.A[this.j][this.D]=e,this.i}popFront(){if(this.i===0)return;let e=this.A[this.j][this.D];return this.i!==1&&(this.Dthis.i-1)throw new RangeError;let{curNodeBucketIndex:r,curNodePointerIndex:i}=this.O(e);return this.A[r][i]}setElementByPos(e,r){if(e<0||e>this.i-1)throw new RangeError;let{curNodeBucketIndex:i,curNodePointerIndex:n}=this.O(e);this.A[i][n]=r;}insert(e,r,i=1){if(e<0||e>this.i)throw new RangeError;if(e===0)for(;i--;)this.pushFront(r);else if(e===this.i)for(;i--;)this.pushBack(r);else {let n=[];for(let o=e;othis.i-1)throw new RangeError;if(e===0)this.popFront();else if(e===this.i-1)this.popBack();else {let r=[];for(let n=e+1;ne;)this.popBack();return this.i}sort(e){let r=[];for(let i=0;i{_();v();m();Object.defineProperty(ei,"t",{value:!0});ei.TreeNodeEnableIndex=ei.TreeNode=void 0;var zn=class{constructor(e,r){this.ee=1,this.u=void 0,this.l=void 0,this.U=void 0,this.W=void 0,this.tt=void 0,this.u=e,this.l=r;}L(){let e=this;if(e.ee===1&&e.tt.tt===e)e=e.W;else if(e.U)for(e=e.U;e.W;)e=e.W;else {let r=e.tt;for(;r.U===e;)e=r,r=e.tt;e=r;}return e}B(){let e=this;if(e.W){for(e=e.W;e.U;)e=e.U;return e}else {let r=e.tt;for(;r.W===e;)e=r,r=e.tt;return e.W!==r?r:e}}te(){let e=this.tt,r=this.W,i=r.U;return e.tt===this?e.tt=r:e.U===this?e.U=r:e.W=r,r.tt=e,r.U=this,this.tt=r,this.W=i,i&&(i.tt=this),r}se(){let e=this.tt,r=this.U,i=r.W;return e.tt===this?e.tt=r:e.U===this?e.U=r:e.W=r,r.tt=e,r.W=this,this.tt=r,this.U=i,i&&(i.tt=this),r}};ei.TreeNode=zn;var va=class extends zn{constructor(){super(...arguments),this.rt=1;}te(){let e=super.te();return this.ie(),e.ie(),e}se(){let e=super.se();return this.ie(),e.ie(),e}ie(){this.rt=1,this.U&&(this.rt+=this.U.rt),this.W&&(this.rt+=this.W.rt);}};ei.TreeNodeEnableIndex=va;});var Sa=M(Kn=>{_();v();m();Object.defineProperty(Kn,"t",{value:!0});Kn.default=void 0;var lp=ap(),W1=lt(),up=ut(),Ea=class extends W1.Container{constructor(e=function(i,n){return in?1:0},r=!1){super(),this.Y=void 0,this.v=e,r?(this.re=lp.TreeNodeEnableIndex,this.M=function(i,n,o){let s=this.ne(i,n,o);if(s){let a=s.tt;for(;a!==this.h;)a.rt+=1,a=a.tt;let l=this.he(s);if(l){let{parentNode:c,grandParent:h,curNode:d}=l;c.ie(),h.ie(),d.ie();}}return this.i},this.V=function(i){let n=this.fe(i);for(;n!==this.h;)n.rt-=1,n=n.tt;}):(this.re=lp.TreeNode,this.M=function(i,n,o){let s=this.ne(i,n,o);return s&&this.he(s),this.i},this.V=this.fe),this.h=new this.re;}X(e,r){let i=this.h;for(;e;){let n=this.v(e.u,r);if(n<0)e=e.W;else if(n>0)i=e,e=e.U;else return e}return i}Z(e,r){let i=this.h;for(;e;)this.v(e.u,r)<=0?e=e.W:(i=e,e=e.U);return i}$(e,r){let i=this.h;for(;e;){let n=this.v(e.u,r);if(n<0)i=e,e=e.W;else if(n>0)e=e.U;else return e}return i}rr(e,r){let i=this.h;for(;e;)this.v(e.u,r)<0?(i=e,e=e.W):e=e.U;return i}ue(e){for(;;){let r=e.tt;if(r===this.h)return;if(e.ee===1){e.ee=0;return}if(e===r.U){let i=r.W;if(i.ee===1)i.ee=0,r.ee=1,r===this.Y?this.Y=r.te():r.te();else if(i.W&&i.W.ee===1){i.ee=r.ee,r.ee=0,i.W.ee=0,r===this.Y?this.Y=r.te():r.te();return}else i.U&&i.U.ee===1?(i.ee=1,i.U.ee=0,i.se()):(i.ee=1,e=r);}else {let i=r.U;if(i.ee===1)i.ee=0,r.ee=1,r===this.Y?this.Y=r.se():r.se();else if(i.U&&i.U.ee===1){i.ee=r.ee,r.ee=0,i.U.ee=0,r===this.Y?this.Y=r.se():r.se();return}else i.W&&i.W.ee===1?(i.ee=1,i.W.ee=0,i.te()):(i.ee=1,e=r);}}}fe(e){if(this.i===1)return this.clear(),this.h;let r=e;for(;r.U||r.W;){if(r.W)for(r=r.W;r.U;)r=r.U;else r=r.U;[e.u,r.u]=[r.u,e.u],[e.l,r.l]=[r.l,e.l],e=r;}this.h.U===r?this.h.U=r.tt:this.h.W===r&&(this.h.W=r.tt),this.ue(r);let i=r.tt;return r===i.U?i.U=void 0:i.W=void 0,this.i-=1,this.Y.ee=0,i}oe(e,r){return e===void 0?!1:this.oe(e.U,r)||r(e)?!0:this.oe(e.W,r)}he(e){for(;;){let r=e.tt;if(r.ee===0)return;let i=r.tt;if(r===i.U){let n=i.W;if(n&&n.ee===1){if(n.ee=r.ee=0,i===this.Y)return;i.ee=1,e=i;continue}else if(e===r.W){if(e.ee=0,e.U&&(e.U.tt=r),e.W&&(e.W.tt=i),r.W=e.U,i.U=e.W,e.U=r,e.W=i,i===this.Y)this.Y=e,this.h.tt=e;else {let o=i.tt;o.U===i?o.U=e:o.W=e;}return e.tt=i.tt,r.tt=e,i.tt=e,i.ee=1,{parentNode:r,grandParent:i,curNode:e}}else r.ee=0,i===this.Y?this.Y=i.se():i.se(),i.ee=1;}else {let n=i.U;if(n&&n.ee===1){if(n.ee=r.ee=0,i===this.Y)return;i.ee=1,e=i;continue}else if(e===r.U){if(e.ee=0,e.U&&(e.U.tt=i),e.W&&(e.W.tt=r),i.W=e.U,r.U=e.W,e.U=i,e.W=r,i===this.Y)this.Y=e,this.h.tt=e;else {let o=i.tt;o.U===i?o.U=e:o.W=e;}return e.tt=i.tt,r.tt=e,i.tt=e,i.ee=1,{parentNode:r,grandParent:i,curNode:e}}else r.ee=0,i===this.Y?this.Y=i.te():i.te(),i.ee=1;}return}}ne(e,r,i){if(this.Y===void 0){this.i+=1,this.Y=new this.re(e,r),this.Y.ee=0,this.Y.tt=this.h,this.h.tt=this.Y,this.h.U=this.Y,this.h.W=this.Y;return}let n,o=this.h.U,s=this.v(o.u,e);if(s===0){o.l=r;return}else if(s>0)o.U=new this.re(e,r),o.U.tt=o,n=o.U,this.h.U=n;else {let a=this.h.W,l=this.v(a.u,e);if(l===0){a.l=r;return}else if(l<0)a.W=new this.re(e,r),a.W.tt=a,n=a.W,this.h.W=n;else {if(i!==void 0){let c=i.o;if(c!==this.h){let h=this.v(c.u,e);if(h===0){c.l=r;return}else if(h>0){let d=c.L(),g=this.v(d.u,e);if(g===0){d.l=r;return}else g<0&&(n=new this.re(e,r),d.W===void 0?(d.W=n,n.tt=d):(c.U=n,n.tt=c));}}}if(n===void 0)for(n=this.Y;;){let c=this.v(n.u,e);if(c>0){if(n.U===void 0){n.U=new this.re(e,r),n.U.tt=n,n=n.U;break}n=n.U;}else if(c<0){if(n.W===void 0){n.W=new this.re(e,r),n.W.tt=n,n=n.W;break}n=n.W;}else {n.l=r;return}}}}return this.i+=1,n}I(e,r){for(;e;){let i=this.v(e.u,r);if(i<0)e=e.W;else if(i>0)e=e.U;else return e}return e||this.h}clear(){this.i=0,this.Y=void 0,this.h.tt=void 0,this.h.U=this.h.W=void 0;}updateKeyByIterator(e,r){let i=e.o;if(i===this.h&&(0, up.throwIteratorAccessError)(),this.i===1)return i.u=r,!0;if(i===this.h.U)return this.v(i.B().u,r)>0?(i.u=r,!0):!1;if(i===this.h.W)return this.v(i.L().u,r)<0?(i.u=r,!0):!1;let n=i.L().u;if(this.v(n,r)>=0)return !1;let o=i.B().u;return this.v(o,r)<=0?!1:(i.u=r,!0)}eraseElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let r=0,i=this;return this.oe(this.Y,function(n){return e===r?(i.V(n),!0):(r+=1,!1)}),this.i}eraseElementByKey(e){if(this.i===0)return !1;let r=this.I(this.Y,e);return r===this.h?!1:(this.V(r),!0)}eraseElementByIterator(e){let r=e.o;r===this.h&&(0, up.throwIteratorAccessError)();let i=r.W===void 0;return e.iteratorType===0?i&&e.next():(!i||r.U===void 0)&&e.next(),this.V(r),e}forEach(e){let r=0;for(let i of this)e(i,r++,this);}getElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let r,i=0;for(let n of this){if(i===e){r=n;break}i+=1;}return r}getHeight(){if(this.i===0)return 0;let e=function(r){return r?Math.max(e(r.U),e(r.W))+1:0};return e(this.Y)}},$1=Ea;Kn.default=$1;});var Ia=M(Qn=>{_();v();m();Object.defineProperty(Qn,"t",{value:!0});Qn.default=void 0;var H1=lt(),Gn=ut(),Aa=class extends H1.ContainerIterator{constructor(e,r,i){super(i),this.o=e,this.h=r,this.iteratorType===0?(this.pre=function(){return this.o===this.h.U&&(0, Gn.throwIteratorAccessError)(),this.o=this.o.L(),this},this.next=function(){return this.o===this.h&&(0, Gn.throwIteratorAccessError)(),this.o=this.o.B(),this}):(this.pre=function(){return this.o===this.h.W&&(0, Gn.throwIteratorAccessError)(),this.o=this.o.B(),this},this.next=function(){return this.o===this.h&&(0, Gn.throwIteratorAccessError)(),this.o=this.o.L(),this});}get index(){let e=this.o,r=this.h.tt;if(e===this.h)return r?r.rt-1:0;let i=0;for(e.U&&(i+=e.U.rt);e!==r;){let n=e.tt;e===n.W&&(i+=1,n.U&&(i+=n.U.rt)),e=n;}return i}},V1=Aa;Qn.default=V1;});var cp=M(Yn=>{_();v();m();Object.defineProperty(Yn,"t",{value:!0});Yn.default=void 0;var z1=fp(Sa()),K1=fp(Ia()),G1=ut();function fp(t){return t&&t.t?t:{default:t}}var Ke=class t extends K1.default{constructor(e,r,i,n){super(e,r,n),this.container=i;}get pointer(){return this.o===this.h&&(0, G1.throwIteratorAccessError)(),this.o.u}copy(){return new t(this.o,this.h,this.container,this.iteratorType)}},Ta=class extends z1.default{constructor(e=[],r,i){super(r,i);let n=this;e.forEach(function(o){n.insert(o);});}*K(e){e!==void 0&&(yield*this.K(e.U),yield e.u,yield*this.K(e.W));}begin(){return new Ke(this.h.U||this.h,this.h,this)}end(){return new Ke(this.h,this.h,this)}rBegin(){return new Ke(this.h.W||this.h,this.h,this,1)}rEnd(){return new Ke(this.h,this.h,this,1)}front(){return this.h.U?this.h.U.u:void 0}back(){return this.h.W?this.h.W.u:void 0}insert(e,r){return this.M(e,void 0,r)}find(e){let r=this.I(this.Y,e);return new Ke(r,this.h,this)}lowerBound(e){let r=this.X(this.Y,e);return new Ke(r,this.h,this)}upperBound(e){let r=this.Z(this.Y,e);return new Ke(r,this.h,this)}reverseLowerBound(e){let r=this.$(this.Y,e);return new Ke(r,this.h,this)}reverseUpperBound(e){let r=this.rr(this.Y,e);return new Ke(r,this.h,this)}union(e){let r=this;return e.forEach(function(i){r.insert(i);}),this.i}[Symbol.iterator](){return this.K(this.Y)}},Q1=Ta;Yn.default=Q1;});var dp=M(Jn=>{_();v();m();Object.defineProperty(Jn,"t",{value:!0});Jn.default=void 0;var Y1=hp(Sa()),J1=hp(Ia()),X1=ut();function hp(t){return t&&t.t?t:{default:t}}var Ge=class t extends J1.default{constructor(e,r,i,n){super(e,r,n),this.container=i;}get pointer(){this.o===this.h&&(0, X1.throwIteratorAccessError)();let e=this;return new Proxy([],{get(r,i){if(i==="0")return e.o.u;if(i==="1")return e.o.l},set(r,i,n){if(i!=="1")throw new TypeError("props must be 1");return e.o.l=n,!0}})}copy(){return new t(this.o,this.h,this.container,this.iteratorType)}},Ra=class extends Y1.default{constructor(e=[],r,i){super(r,i);let n=this;e.forEach(function(o){n.setElement(o[0],o[1]);});}*K(e){e!==void 0&&(yield*this.K(e.U),yield [e.u,e.l],yield*this.K(e.W));}begin(){return new Ge(this.h.U||this.h,this.h,this)}end(){return new Ge(this.h,this.h,this)}rBegin(){return new Ge(this.h.W||this.h,this.h,this,1)}rEnd(){return new Ge(this.h,this.h,this,1)}front(){if(this.i===0)return;let e=this.h.U;return [e.u,e.l]}back(){if(this.i===0)return;let e=this.h.W;return [e.u,e.l]}lowerBound(e){let r=this.X(this.Y,e);return new Ge(r,this.h,this)}upperBound(e){let r=this.Z(this.Y,e);return new Ge(r,this.h,this)}reverseLowerBound(e){let r=this.$(this.Y,e);return new Ge(r,this.h,this)}reverseUpperBound(e){let r=this.rr(this.Y,e);return new Ge(r,this.h,this)}setElement(e,r,i){return this.M(e,r,i)}find(e){let r=this.I(this.Y,e);return new Ge(r,this.h,this)}getElementByKey(e){return this.I(this.Y,e).l}union(e){let r=this;return e.forEach(function(i){r.setElement(i[0],i[1]);}),this.i}[Symbol.iterator](){return this.K(this.Y)}},Z1=Ra;Jn.default=Z1;});var Ba=M(Ca=>{_();v();m();Object.defineProperty(Ca,"t",{value:!0});Ca.default=ev;function ev(t){let e=typeof t;return e==="object"&&t!==null||e==="function"}});var xa=M(ti=>{_();v();m();Object.defineProperty(ti,"t",{value:!0});ti.HashContainerIterator=ti.HashContainer=void 0;var pp=lt(),Pa=tv(Ba()),Ci=ut();function tv(t){return t&&t.t?t:{default:t}}var ka=class extends pp.ContainerIterator{constructor(e,r,i){super(i),this.o=e,this.h=r,this.iteratorType===0?(this.pre=function(){return this.o.L===this.h&&(0, Ci.throwIteratorAccessError)(),this.o=this.o.L,this},this.next=function(){return this.o===this.h&&(0, Ci.throwIteratorAccessError)(),this.o=this.o.B,this}):(this.pre=function(){return this.o.B===this.h&&(0, Ci.throwIteratorAccessError)(),this.o=this.o.B,this},this.next=function(){return this.o===this.h&&(0, Ci.throwIteratorAccessError)(),this.o=this.o.L,this});}};ti.HashContainerIterator=ka;var Oa=class extends pp.Container{constructor(){super(),this.H=[],this.g={},this.HASH_TAG=Symbol("@@HASH_TAG"),Object.setPrototypeOf(this.g,null),this.h={},this.h.L=this.h.B=this.p=this._=this.h;}V(e){let{L:r,B:i}=e;r.B=i,i.L=r,e===this.p&&(this.p=i),e===this._&&(this._=r),this.i-=1;}M(e,r,i){i===void 0&&(i=(0, Pa.default)(e));let n;if(i){let o=e[this.HASH_TAG];if(o!==void 0)return this.H[o].l=r,this.i;Object.defineProperty(e,this.HASH_TAG,{value:this.H.length,configurable:!0}),n={u:e,l:r,L:this._,B:this.h},this.H.push(n);}else {let o=this.g[e];if(o)return o.l=r,this.i;n={u:e,l:r,L:this._,B:this.h},this.g[e]=n;}return this.i===0?(this.p=n,this.h.B=n):this._.B=n,this._=n,this.h.L=n,++this.i}I(e,r){if(r===void 0&&(r=(0, Pa.default)(e)),r){let i=e[this.HASH_TAG];return i===void 0?this.h:this.H[i]}else return this.g[e]||this.h}clear(){let e=this.HASH_TAG;this.H.forEach(function(r){delete r.u[e];}),this.H=[],this.g={},Object.setPrototypeOf(this.g,null),this.i=0,this.p=this._=this.h.L=this.h.B=this.h;}eraseElementByKey(e,r){let i;if(r===void 0&&(r=(0, Pa.default)(e)),r){let n=e[this.HASH_TAG];if(n===void 0)return !1;delete e[this.HASH_TAG],i=this.H[n],delete this.H[n];}else {if(i=this.g[e],i===void 0)return !1;delete this.g[e];}return this.V(i),!0}eraseElementByIterator(e){let r=e.o;return r===this.h&&(0, Ci.throwIteratorAccessError)(),this.V(r),e.next()}eraseElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let r=this.p;for(;e--;)r=r.B;return this.V(r),this.i}};ti.HashContainer=Oa;});var yp=M(Xn=>{_();v();m();Object.defineProperty(Xn,"t",{value:!0});Xn.default=void 0;var gp=xa(),rv=ut(),Ar=class t extends gp.HashContainerIterator{constructor(e,r,i,n){super(e,r,n),this.container=i;}get pointer(){return this.o===this.h&&(0, rv.throwIteratorAccessError)(),this.o.u}copy(){return new t(this.o,this.h,this.container,this.iteratorType)}},Ma=class extends gp.HashContainer{constructor(e=[]){super();let r=this;e.forEach(function(i){r.insert(i);});}begin(){return new Ar(this.p,this.h,this)}end(){return new Ar(this.h,this.h,this)}rBegin(){return new Ar(this._,this.h,this,1)}rEnd(){return new Ar(this.h,this.h,this,1)}front(){return this.p.u}back(){return this._.u}insert(e,r){return this.M(e,void 0,r)}getElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let r=this.p;for(;e--;)r=r.B;return r.u}find(e,r){let i=this.I(e,r);return new Ar(i,this.h,this)}forEach(e){let r=0,i=this.p;for(;i!==this.h;)e(i.u,r++,this),i=i.B;}[Symbol.iterator](){return function*(){let e=this.p;for(;e!==this.h;)yield e.u,e=e.B;}.bind(this)()}},iv=Ma;Xn.default=iv;});var wp=M(Zn=>{_();v();m();Object.defineProperty(Zn,"t",{value:!0});Zn.default=void 0;var bp=xa(),nv=ov(Ba()),sv=ut();function ov(t){return t&&t.t?t:{default:t}}var Ir=class t extends bp.HashContainerIterator{constructor(e,r,i,n){super(e,r,n),this.container=i;}get pointer(){this.o===this.h&&(0, sv.throwIteratorAccessError)();let e=this;return new Proxy([],{get(r,i){if(i==="0")return e.o.u;if(i==="1")return e.o.l},set(r,i,n){if(i!=="1")throw new TypeError("props must be 1");return e.o.l=n,!0}})}copy(){return new t(this.o,this.h,this.container,this.iteratorType)}},La=class extends bp.HashContainer{constructor(e=[]){super();let r=this;e.forEach(function(i){r.setElement(i[0],i[1]);});}begin(){return new Ir(this.p,this.h,this)}end(){return new Ir(this.h,this.h,this)}rBegin(){return new Ir(this._,this.h,this,1)}rEnd(){return new Ir(this.h,this.h,this,1)}front(){if(this.i!==0)return [this.p.u,this.p.l]}back(){if(this.i!==0)return [this._.u,this._.l]}setElement(e,r,i){return this.M(e,r,i)}getElementByKey(e,r){if(r===void 0&&(r=(0, nv.default)(e)),r){let n=e[this.HASH_TAG];return n!==void 0?this.H[n].l:void 0}let i=this.g[e];return i?i.l:void 0}getElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let r=this.p;for(;e--;)r=r.B;return [r.u,r.l]}find(e,r){let i=this.I(e,r);return new Ir(i,this.h,this)}forEach(e){let r=0,i=this.p;for(;i!==this.h;)e([i.u,i.l],r++,this),i=i.B;}[Symbol.iterator](){return function*(){let e=this.p;for(;e!==this.h;)yield [e.u,e.l],e=e.B;}.bind(this)()}},av=La;Zn.default=av;});var _p=M(je=>{_();v();m();Object.defineProperty(je,"t",{value:!0});Object.defineProperty(je,"Deque",{enumerable:!0,get:function(){return dv.default}});Object.defineProperty(je,"HashMap",{enumerable:!0,get:function(){return bv.default}});Object.defineProperty(je,"HashSet",{enumerable:!0,get:function(){return yv.default}});Object.defineProperty(je,"LinkList",{enumerable:!0,get:function(){return hv.default}});Object.defineProperty(je,"OrderedMap",{enumerable:!0,get:function(){return gv.default}});Object.defineProperty(je,"OrderedSet",{enumerable:!0,get:function(){return pv.default}});Object.defineProperty(je,"PriorityQueue",{enumerable:!0,get:function(){return fv.default}});Object.defineProperty(je,"Queue",{enumerable:!0,get:function(){return uv.default}});Object.defineProperty(je,"Stack",{enumerable:!0,get:function(){return lv.default}});Object.defineProperty(je,"Vector",{enumerable:!0,get:function(){return cv.default}});var lv=ft(tp()),uv=ft(rp()),fv=ft(ip()),cv=ft(np()),hv=ft(sp()),dv=ft(op()),pv=ft(cp()),gv=ft(dp()),yv=ft(yp()),bv=ft(wp());function ft(t){return t&&t.t?t:{default:t}}});var vp=M((AN,mp)=>{_();v();m();var wv=_p().OrderedSet,ct=ot()("number-allocator:trace"),_v=ot()("number-allocator:error");function Re(t,e){this.low=t,this.high=e;}Re.prototype.equals=function(t){return this.low===t.low&&this.high===t.high};Re.prototype.compare=function(t){return this.lowr.compare(i)),ct("Create"),this.clear();}ht.prototype.firstVacant=function(){return this.ss.size()===0?null:this.ss.front().low};ht.prototype.alloc=function(){if(this.ss.size()===0)return ct("alloc():empty"),null;let t=this.ss.begin(),e=t.pointer.low,r=t.pointer.high,i=e;return i+1<=r?this.ss.updateKeyByIterator(t,new Re(e+1,r)):this.ss.eraseElementByPos(0),ct("alloc():"+i),i};ht.prototype.use=function(t){let e=new Re(t,t),r=this.ss.lowerBound(e);if(!r.equals(this.ss.end())){let i=r.pointer.low,n=r.pointer.high;return r.pointer.equals(e)?(this.ss.eraseElementByIterator(r),ct("use():"+t),!0):i>t?!1:i===t?(this.ss.updateKeyByIterator(r,new Re(i+1,n)),ct("use():"+t),!0):n===t?(this.ss.updateKeyByIterator(r,new Re(i,n-1)),ct("use():"+t),!0):(this.ss.updateKeyByIterator(r,new Re(t+1,n)),this.ss.insert(new Re(i,t-1)),ct("use():"+t),!0)}return ct("use():failed"),!1};ht.prototype.free=function(t){if(tthis.max){_v("free():"+t+" is out of range");return}let e=new Re(t,t),r=this.ss.upperBound(e);if(r.equals(this.ss.end())){if(r.equals(this.ss.begin())){this.ss.insert(e);return}r.pre();let i=r.pointer.high;r.pointer.high+1===t?this.ss.updateKeyByIterator(r,new Re(i,t)):this.ss.insert(e);}else if(r.equals(this.ss.begin()))if(t+1===r.pointer.low){let i=r.pointer.high;this.ss.updateKeyByIterator(r,new Re(t,i));}else this.ss.insert(e);else {let i=r.pointer.low,n=r.pointer.high;r.pre();let o=r.pointer.low;r.pointer.high+1===t?t+1===i?(this.ss.eraseElementByIterator(r),this.ss.updateKeyByIterator(r,new Re(o,n))):this.ss.updateKeyByIterator(r,new Re(o,t)):t+1===i?(this.ss.eraseElementByIterator(r.next()),this.ss.insert(new Re(t,n))):this.ss.insert(e);}ct("free():"+t);};ht.prototype.clear=function(){ct("clear()"),this.ss.clear(),this.ss.insert(new Re(this.min,this.max));};ht.prototype.intervalCount=function(){return this.ss.size()};ht.prototype.dump=function(){console.log("length:"+this.ss.size());for(let t of this.ss)console.log(t);};mp.exports=ht;});var Ua=M((MN,Ep)=>{_();v();m();var mv=vp();Ep.exports.NumberAllocator=mv;});var Sp=M(qa=>{_();v();m();Object.defineProperty(qa,"__esModule",{value:!0});var vv=ep(),Ev=Ua(),Na=class{constructor(e){e>0&&(this.aliasToTopic=new vv.LRUCache({max:e}),this.topicToAlias={},this.numberAllocator=new Ev.NumberAllocator(1,e),this.max=e,this.length=0);}put(e,r){if(r===0||r>this.max)return !1;let i=this.aliasToTopic.get(r);return i&&delete this.topicToAlias[i],this.aliasToTopic.set(r,e),this.topicToAlias[e]=r,this.numberAllocator.use(r),this.length=this.aliasToTopic.size,!0}getTopicByAlias(e){return this.aliasToTopic.get(e)}getAliasByTopic(e){let r=this.topicToAlias[e];return typeof r<"u"&&this.aliasToTopic.get(r),r}clear(){this.aliasToTopic.clear(),this.topicToAlias={},this.numberAllocator.clear(),this.length=0;}getLruAlias(){let e=this.numberAllocator.firstVacant();return e||[...this.aliasToTopic.keys()][this.aliasToTopic.size-1]}};qa.default=Na;});var Ap=M(Bi=>{_();v();m();var Sv=Bi&&Bi.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Bi,"__esModule",{value:!0});var Av=Ti(),Iv=Sv(Sp()),Tv=_r(),Rv=(t,e)=>{t.log("_handleConnack");let{options:r}=t,n=r.protocolVersion===5?e.reasonCode:e.returnCode;if(clearTimeout(t.connackTimer),delete t.topicAliasSend,e.properties){if(e.properties.topicAliasMaximum){if(e.properties.topicAliasMaximum>65535){t.emit("error",new Error("topicAliasMaximum from broker is out of range"));return}e.properties.topicAliasMaximum>0&&(t.topicAliasSend=new Iv.default(e.properties.topicAliasMaximum));}e.properties.serverKeepAlive&&r.keepalive&&(r.keepalive=e.properties.serverKeepAlive),e.properties.maximumPacketSize&&(r.properties||(r.properties={}),r.properties.maximumPacketSize=e.properties.maximumPacketSize);}if(n===0)t.reconnecting=!1,t._onConnect(e);else if(n>0){let o=new Tv.ErrorWithReasonCode(`Connection refused: ${Av.ReasonCodes[n]}`,n);t.emit("error",o);}};Bi.default=Rv;});var Ip=M(Da=>{_();v();m();Object.defineProperty(Da,"__esModule",{value:!0});var Cv=(t,e,r)=>{t.log("handling pubrel packet");let i=typeof r<"u"?r:t.noop,{messageId:n}=e,o={cmd:"pubcomp",messageId:n};t.incomingStore.get(e,(s,a)=>{s?t._sendPacket(o,i):(t.emit("message",a.topic,a.payload,a),t.handleMessage(a,l=>{if(l)return i(l);t.incomingStore.del(a,t.noop),t._sendPacket(o,i);}));});};Da.default=Cv;});var Tp=M(Pi=>{_();v();m();var ki=Pi&&Pi.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Pi,"__esModule",{value:!0});var Bv=ki(Vd()),Pv=ki(Qd()),kv=ki(Ap()),Ov=ki(Ti()),xv=ki(Ip()),Mv=(t,e,r)=>{let{options:i}=t;if(i.protocolVersion===5&&i.properties&&i.properties.maximumPacketSize&&i.properties.maximumPacketSize{_();v();m();var Lv=ri&&ri.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(ri,"__esModule",{value:!0});ri.TypedEventEmitter=void 0;var Uv=Lv((sr(),X(nr))),Nv=_r(),es=class{};ri.TypedEventEmitter=es;(0, Nv.applyMixin)(es,Uv.default);});var Oi=M(Tr=>{_();v();m();Object.defineProperty(Tr,"__esModule",{value:!0});Tr.isReactNativeBrowser=Tr.isWebWorker=void 0;var qv=()=>{var t;return typeof window<"u"?typeof navigator<"u"&&((t=navigator.userAgent)===null||t===void 0?void 0:t.toLowerCase().indexOf(" electron/"))>-1&&(!(B===null||B===void 0)&&B.versions)?!Object.prototype.hasOwnProperty.call(B.versions,"electron"):typeof window.document<"u":!1},Cp=()=>{var t,e;return !!(typeof self=="object"&&(!((e=(t=self?.constructor)===null||t===void 0?void 0:t.name)===null||e===void 0)&&e.includes("WorkerGlobalScope")))},Bp=()=>typeof navigator<"u"&&navigator.product==="ReactNative",Dv=qv()||Cp()||Bp();Tr.isWebWorker=Cp();Tr.isReactNativeBrowser=Bp();Tr.default=Dv;});var kp=M((ts,Pp)=>{_();v();m();(function(t,e){typeof ts=="object"&&typeof Pp<"u"?e(ts):typeof define=="function"&&__webpack_require__.amdO?define(["exports"],e):(t=typeof globalThis<"u"?globalThis:t||self,e(t.fastUniqueNumbers={}));})(ts,function(t){var e=function(g){return function(y){var w=g(y);return y.add(w),w}},r=function(g){return function(y,w){return g.set(y,w),w}},i=Number.MAX_SAFE_INTEGER===void 0?9007199254740991:Number.MAX_SAFE_INTEGER,n=536870912,o=n*2,s=function(g,y){return function(w){var S=y.get(w),E=S===void 0?w.size:Si)throw new Error("Congratulations, you created a collection of unique numbers which uses all available integers!");for(;w.has(E);)E=Math.floor(Math.random()*i);return g(w,E)}},a=new WeakMap,l=r(a),c=s(l,a),h=e(c);t.addUniqueNumber=h,t.generateUniqueNumber=c;});});var xp=M((rs,Op)=>{_();v();m();(function(t,e){typeof rs=="object"&&typeof Op<"u"?e(rs,kp()):typeof define=="function"&&__webpack_require__.amdO?define(["exports","fast-unique-numbers"],e):(t=typeof globalThis<"u"?globalThis:t||self,e(t.workerTimersBroker={},t.fastUniqueNumbers));})(rs,function(t,e){var r=function(s){return s.method!==void 0&&s.method==="call"},i=function(s){return s.error===null&&typeof s.id=="number"},n=function(s){var a=new Map([[0,function(){}]]),l=new Map([[0,function(){}]]),c=new Map,h=new Worker(s);h.addEventListener("message",function(S){var E=S.data;if(r(E)){var I=E.params,C=I.timerId,R=I.timerType;if(R==="interval"){var U=a.get(C);if(typeof U=="number"){var N=c.get(U);if(N===void 0||N.timerId!==C||N.timerType!==R)throw new Error("The timer is in an undefined state.")}else if(typeof U<"u")U();else throw new Error("The timer is in an undefined state.")}else if(R==="timeout"){var W=l.get(C);if(typeof W=="number"){var K=c.get(W);if(K===void 0||K.timerId!==C||K.timerType!==R)throw new Error("The timer is in an undefined state.")}else if(typeof W<"u")W(),l.delete(C);else throw new Error("The timer is in an undefined state.")}}else if(i(E)){var z=E.id,Q=c.get(z);if(Q===void 0)throw new Error("The timer is in an undefined state.");var pe=Q.timerId,Yt=Q.timerType;c.delete(z),Yt==="interval"?a.delete(pe):l.delete(pe);}else {var ge=E.error.message;throw new Error(ge)}});var d=function(E){var I=e.generateUniqueNumber(c);c.set(I,{timerId:E,timerType:"interval"}),a.set(E,I),h.postMessage({id:I,method:"clear",params:{timerId:E,timerType:"interval"}});},g=function(E){var I=e.generateUniqueNumber(c);c.set(I,{timerId:E,timerType:"timeout"}),l.set(E,I),h.postMessage({id:I,method:"clear",params:{timerId:E,timerType:"timeout"}});},y=function(E){var I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,C=e.generateUniqueNumber(a);return a.set(C,function(){E(),typeof a.get(C)=="function"&&h.postMessage({id:null,method:"set",params:{delay:I,now:performance.now(),timerId:C,timerType:"interval"}});}),h.postMessage({id:null,method:"set",params:{delay:I,now:performance.now(),timerId:C,timerType:"interval"}}),C},w=function(E){var I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,C=e.generateUniqueNumber(l);return l.set(C,E),h.postMessage({id:null,method:"set",params:{delay:I,now:performance.now(),timerId:C,timerType:"timeout"}}),C};return {clearInterval:d,clearTimeout:g,setInterval:y,setTimeout:w}};t.load=n;});});var Lp=M((is,Mp)=>{_();v();m();(function(t,e){typeof is=="object"&&typeof Mp<"u"?e(is,xp()):typeof define=="function"&&__webpack_require__.amdO?define(["exports","worker-timers-broker"],e):(t=typeof globalThis<"u"?globalThis:t||self,e(t.workerTimers={},t.workerTimersBroker));})(is,function(t,e){var r=function(h,d){var g=null;return function(){if(g!==null)return g;var y=new Blob([d],{type:"application/javascript; charset=utf-8"}),w=URL.createObjectURL(y);return g=h(w),setTimeout(function(){return URL.revokeObjectURL(w)}),g}},i=`(()=>{var e={472:(e,t,r)=>{var o,i;void 0===(i="function"==typeof(o=function(){"use strict";var e=new Map,t=new Map,r=function(t){var r=e.get(t);if(void 0===r)throw new Error('There is no interval scheduled with the given id "'.concat(t,'".'));clearTimeout(r),e.delete(t)},o=function(e){var r=t.get(e);if(void 0===r)throw new Error('There is no timeout scheduled with the given id "'.concat(e,'".'));clearTimeout(r),t.delete(e)},i=function(e,t){var r,o=performance.now();return{expected:o+(r=e-Math.max(0,o-t)),remainingDelay:r}},n=function e(t,r,o,i){var n=performance.now();n>o?postMessage({id:null,method:"call",params:{timerId:r,timerType:i}}):t.set(r,setTimeout(e,o-n,t,r,o,i))},a=function(t,r,o){var a=i(t,o),s=a.expected,d=a.remainingDelay;e.set(r,setTimeout(n,d,e,r,s,"interval"))},s=function(e,r,o){var a=i(e,o),s=a.expected,d=a.remainingDelay;t.set(r,setTimeout(n,d,t,r,s,"timeout"))};addEventListener("message",(function(e){var t=e.data;try{if("clear"===t.method){var i=t.id,n=t.params,d=n.timerId,c=n.timerType;if("interval"===c)r(d),postMessage({error:null,id:i});else{if("timeout"!==c)throw new Error('The given type "'.concat(c,'" is not supported'));o(d),postMessage({error:null,id:i})}}else{if("set"!==t.method)throw new Error('The given method "'.concat(t.method,'" is not supported'));var u=t.params,l=u.delay,p=u.now,m=u.timerId,v=u.timerType;if("interval"===v)a(l,m,p);else{if("timeout"!==v)throw new Error('The given type "'.concat(v,'" is not supported'));s(l,m,p)}}}catch(e){postMessage({error:{message:e.message},id:t.id,result:null})}}))})?o.call(t,r,t,e):o)||(e.exports=i)}},t={};function r(o){var i=t[o];if(void 0!==i)return i.exports;var n=t[o]={exports:{}};return e[o](n,n.exports,r),n.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var o in t)r.o(t,o)&&!r.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{"use strict";r(472)})()})();`,n=r(e.load,i),o=function(h){return n().clearInterval(h)},s=function(h){return n().clearTimeout(h)},a=function(){var h;return (h=n()).setInterval.apply(h,arguments)},l=function(){var h;return (h=n()).setTimeout.apply(h,arguments)};t.clearInterval=o,t.clearTimeout=s,t.setInterval=a,t.setTimeout=l;});});var Dp=M(Ct=>{_();v();m();var jv=Ct&&Ct.__createBinding||(Object.create?function(t,e,r,i){i===void 0&&(i=r);var n=Object.getOwnPropertyDescriptor(e,r);(!n||("get"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,i,n);}:function(t,e,r,i){i===void 0&&(i=r),t[i]=e[r];}),Fv=Ct&&Ct.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e});}:function(t,e){t.default=e;}),Wv=Ct&&Ct.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.prototype.hasOwnProperty.call(t,r)&&jv(e,t,r);return Fv(e,t),e};Object.defineProperty(Ct,"__esModule",{value:!0});var ja=Wv(Oi()),Up=Lp(),Np={set:Up.setInterval,clear:Up.clearInterval},qp={set:(t,e)=>setInterval(t,e),clear:t=>clearInterval(t)},$v=t=>{switch(t){case"native":return qp;case"worker":return Np;case"auto":default:return ja.default&&!ja.isWebWorker&&!ja.isReactNativeBrowser?Np:qp}};Ct.default=$v;});var Wa=M(xi=>{_();v();m();var Hv=xi&&xi.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(xi,"__esModule",{value:!0});var Vv=Hv(Dp()),Fa=class{get keepaliveTimeoutTimestamp(){return this._keepaliveTimeoutTimestamp}get intervalEvery(){return this._intervalEvery}get keepalive(){return this._keepalive}constructor(e,r){this.destroyed=!1,this.client=e,this.timer=typeof r=="object"&&"set"in r&&"clear"in r?r:(0, Vv.default)(r),this.setKeepalive(e.options.keepalive);}clear(){this.timerId&&(this.timer.clear(this.timerId),this.timerId=null);}setKeepalive(e){if(e*=1e3,isNaN(e)||e<=0||e>2147483647)throw new Error(`Keepalive value must be an integer between 0 and 2147483647. Provided value is ${e}`);this._keepalive=e,this.reschedule(),this.client.log(`KeepaliveManager: set keepalive to ${e}ms`);}destroy(){this.clear(),this.destroyed=!0;}reschedule(){if(this.destroyed)return;this.clear(),this.counter=0;let e=Math.ceil(this._keepalive*1.5);this._keepaliveTimeoutTimestamp=Date.now()+e,this._intervalEvery=Math.ceil(this._keepalive/2),this.timerId=this.timer.set(()=>{this.destroyed||(this.counter+=1,this.counter===2?this.client.sendPing():this.counter>2&&this.client.onKeepaliveTimeout());},this._intervalEvery);}};xi.default=Fa;});var os=M(Qe=>{_();v();m();var zv=Qe&&Qe.__createBinding||(Object.create?function(t,e,r,i){i===void 0&&(i=r);var n=Object.getOwnPropertyDescriptor(e,r);(!n||("get"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,i,n);}:function(t,e,r,i){i===void 0&&(i=r),t[i]=e[r];}),Kv=Qe&&Qe.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e});}:function(t,e){t.default=e;}),Hp=Qe&&Qe.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.prototype.hasOwnProperty.call(t,r)&&zv(e,t,r);return Kv(e,t),e},zt=Qe&&Qe.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Qe,"__esModule",{value:!0});var Gv=zt(Gu()),$a=zt(Nd()),Qv=zt(Zo()),Yv=jt(),jp=zt(Fd()),Fp=Hp($d()),Jv=zt(ot()),ii=zt(ra()),Xv=zt(Tp()),ns=_r(),Zv=Rp(),eE=zt(Wa()),Wp=Hp(Oi()),Ha=globalThis.setImmediate||((...t)=>{let e=t.shift();(0, ns.nextTick)(()=>{e(...t);});}),$p={keepalive:60,reschedulePings:!0,protocolId:"MQTT",protocolVersion:4,reconnectPeriod:1e3,connectTimeout:30*1e3,clean:!0,resubscribe:!0,writeCache:!0,timerVariant:"auto"},ss=class t extends Zv.TypedEventEmitter{static defaultId(){return `mqttjs_${Math.random().toString(16).substr(2,8)}`}constructor(e,r){super(),this.options=r||{};for(let i in $p)typeof this.options[i]>"u"?this.options[i]=$p[i]:this.options[i]=r[i];this.log=this.options.log||(0, Jv.default)("mqttjs:client"),this.noop=this._noop.bind(this),this.log("MqttClient :: version:",t.VERSION),Wp.isWebWorker?this.log("MqttClient :: environment","webworker"):this.log("MqttClient :: environment",Wp.default?"browser":"node"),this.log("MqttClient :: options.protocol",r.protocol),this.log("MqttClient :: options.protocolVersion",r.protocolVersion),this.log("MqttClient :: options.username",r.username),this.log("MqttClient :: options.keepalive",r.keepalive),this.log("MqttClient :: options.reconnectPeriod",r.reconnectPeriod),this.log("MqttClient :: options.rejectUnauthorized",r.rejectUnauthorized),this.log("MqttClient :: options.properties.topicAliasMaximum",r.properties?r.properties.topicAliasMaximum:void 0),this.options.clientId=typeof r.clientId=="string"?r.clientId:t.defaultId(),this.log("MqttClient :: clientId",this.options.clientId),this.options.customHandleAcks=r.protocolVersion===5&&r.customHandleAcks?r.customHandleAcks:(...i)=>{i[3](null,0);},this.options.writeCache||($a.default.writeToStream.cacheNumbers=!1),this.streamBuilder=e,this.messageIdProvider=typeof this.options.messageIdProvider>"u"?new Qv.default:this.options.messageIdProvider,this.outgoingStore=r.outgoingStore||new ii.default,this.incomingStore=r.incomingStore||new ii.default,this.queueQoSZero=r.queueQoSZero===void 0?!0:r.queueQoSZero,this._resubscribeTopics={},this.messageIdToTopic={},this.keepaliveManager=null,this.connected=!1,this.disconnecting=!1,this.reconnecting=!1,this.queue=[],this.connackTimer=null,this.reconnectTimer=null,this._storeProcessing=!1,this._packetIdsDuringStoreProcessing={},this._storeProcessingQueue=[],this.outgoing={},this._firstConnection=!0,r.properties&&r.properties.topicAliasMaximum>0&&(r.properties.topicAliasMaximum>65535?this.log("MqttClient :: options.properties.topicAliasMaximum is out of range"):this.topicAliasRecv=new Gv.default(r.properties.topicAliasMaximum)),this.on("connect",()=>{let{queue:i}=this,n=()=>{let o=i.shift();this.log("deliver :: entry %o",o);let s=null;if(!o){this._resubscribe();return}s=o.packet,this.log("deliver :: call _sendPacket for %o",s);let a=!0;s.messageId&&s.messageId!==0&&(this.messageIdProvider.register(s.messageId)||(a=!1)),a?this._sendPacket(s,l=>{o.cb&&o.cb(l),n();}):(this.log("messageId: %d has already used. The message is skipped and removed.",s.messageId),n());};this.log("connect :: sending queued packets"),n();}),this.on("close",()=>{this.log("close :: connected set to `false`"),this.connected=!1,this.log("close :: clearing connackTimer"),clearTimeout(this.connackTimer),this._destroyKeepaliveManager(),this.topicAliasRecv&&this.topicAliasRecv.clear(),this.log("close :: calling _setupReconnect"),this._setupReconnect();}),this.options.manualConnect||(this.log("MqttClient :: setting up stream"),this.connect());}handleAuth(e,r){r();}handleMessage(e,r){r();}_nextId(){return this.messageIdProvider.allocate()}getLastMessageId(){return this.messageIdProvider.getLastAllocated()}connect(){var e;let r=new Yv.Writable,i=$a.default.parser(this.options),n=null,o=[];this.log("connect :: calling method to clear reconnect"),this._clearReconnect(),this.disconnected&&!this.reconnecting&&(this.incomingStore=this.options.incomingStore||new ii.default,this.outgoingStore=this.options.outgoingStore||new ii.default,this.disconnecting=!1,this.disconnected=!1),this.log("connect :: using streamBuilder provided to client to create stream"),this.stream=this.streamBuilder(this),i.on("packet",h=>{this.log("parser :: on packet push to packets array."),o.push(h);});let s=()=>{this.log("work :: getting next packet in queue");let h=o.shift();if(h)this.log("work :: packet pulled from queue"),(0, Xv.default)(this,h,a);else {this.log("work :: no packets in queue");let d=n;n=null,this.log("work :: done flag is %s",!!d),d&&d();}},a=()=>{if(o.length)(0, ns.nextTick)(s);else {let h=n;n=null,h();}};r._write=(h,d,g)=>{n=g,this.log("writable stream :: parsing buffer"),i.parse(h),s();};let l=h=>{this.log("streamErrorHandler :: error",h.message),h.code?(this.log("streamErrorHandler :: emitting error"),this.emit("error",h)):this.noop(h);};this.log("connect :: pipe stream to writable stream"),this.stream.pipe(r),this.stream.on("error",l),this.stream.on("close",()=>{this.log("(%s)stream :: on close",this.options.clientId),this._flushVolatile(),this.log("stream: emit close to MqttClient"),this.emit("close");}),this.log("connect: sending packet `connect`");let c={cmd:"connect",protocolId:this.options.protocolId,protocolVersion:this.options.protocolVersion,clean:this.options.clean,clientId:this.options.clientId,keepalive:this.options.keepalive,username:this.options.username,password:this.options.password,properties:this.options.properties};if(this.options.will&&(c.will=Object.assign(Object.assign({},this.options.will),{payload:(e=this.options.will)===null||e===void 0?void 0:e.payload})),this.topicAliasRecv&&(c.properties||(c.properties={}),this.topicAliasRecv&&(c.properties.topicAliasMaximum=this.topicAliasRecv.max)),this._writePacket(c),i.on("error",this.emit.bind(this,"error")),this.options.properties){if(!this.options.properties.authenticationMethod&&this.options.properties.authenticationData)return this.end(()=>this.emit("error",new Error("Packet has no Authentication Method"))),this;if(this.options.properties.authenticationMethod&&this.options.authPacket&&typeof this.options.authPacket=="object"){let h=Object.assign({cmd:"auth",reasonCode:0},this.options.authPacket);this._writePacket(h);}}return this.stream.setMaxListeners(1e3),clearTimeout(this.connackTimer),this.connackTimer=setTimeout(()=>{this.log("!!connectTimeout hit!! Calling _cleanUp with force `true`"),this.emit("error",new Error("connack timeout")),this._cleanUp(!0);},this.options.connectTimeout),this}publish(e,r,i,n){this.log("publish :: message `%s` to topic `%s`",r,e);let{options:o}=this;typeof i=="function"&&(n=i,i=null),i=i||{},i=Object.assign(Object.assign({},{qos:0,retain:!1,dup:!1}),i);let{qos:a,retain:l,dup:c,properties:h,cbStorePut:d}=i;if(this._checkDisconnecting(n))return this;let g=()=>{let y=0;if((a===1||a===2)&&(y=this._nextId(),y===null))return this.log("No messageId left"),!1;let w={cmd:"publish",topic:e,payload:r,qos:a,retain:l,messageId:y,dup:c};switch(o.protocolVersion===5&&(w.properties=h),this.log("publish :: qos",a),a){case 1:case 2:this.outgoing[w.messageId]={volatile:!1,cb:n||this.noop},this.log("MqttClient:publish: packet cmd: %s",w.cmd),this._sendPacket(w,void 0,d);break;default:this.log("MqttClient:publish: packet cmd: %s",w.cmd),this._sendPacket(w,n,d);break}return !0};return (this._storeProcessing||this._storeProcessingQueue.length>0||!g())&&this._storeProcessingQueue.push({invoke:g,cbStorePut:i.cbStorePut,callback:n}),this}publishAsync(e,r,i){return new Promise((n,o)=>{this.publish(e,r,i,(s,a)=>{s?o(s):n(a);});})}subscribe(e,r,i){let n=this.options.protocolVersion;typeof r=="function"&&(i=r),i=i||this.noop;let o=!1,s=[];typeof e=="string"?(e=[e],s=e):Array.isArray(e)?s=e:typeof e=="object"&&(o=e.resubscribe,delete e.resubscribe,s=Object.keys(e));let a=Fp.validateTopics(s);if(a!==null)return Ha(i,new Error(`Invalid topic ${a}`)),this;if(this._checkDisconnecting(i))return this.log("subscribe: discconecting true"),this;let l={qos:0};n===5&&(l.nl=!1,l.rap=!1,l.rh=0),r=Object.assign(Object.assign({},l),r);let c=r.properties,h=[],d=(y,w)=>{if(w=w||r,!Object.prototype.hasOwnProperty.call(this._resubscribeTopics,y)||this._resubscribeTopics[y].qos{this.log("subscribe: array topic %s",y),d(y);}):Object.keys(e).forEach(y=>{this.log("subscribe: object topic %s, %o",y,e[y]),d(y,e[y]);}),!h.length)return i(null,[]),this;let g=()=>{let y=this._nextId();if(y===null)return this.log("No messageId left"),!1;let w={cmd:"subscribe",subscriptions:h,messageId:y};if(c&&(w.properties=c),this.options.resubscribe){this.log("subscribe :: resubscribe true");let S=[];h.forEach(E=>{if(this.options.reconnectPeriod>0){let I={qos:E.qos};n===5&&(I.nl=E.nl||!1,I.rap=E.rap||!1,I.rh=E.rh||0,I.properties=E.properties),this._resubscribeTopics[E.topic]=I,S.push(E.topic);}}),this.messageIdToTopic[w.messageId]=S;}return this.outgoing[w.messageId]={volatile:!0,cb(S,E){if(!S){let{granted:I}=E;for(let C=0;C0||!g())&&this._storeProcessingQueue.push({invoke:g,callback:i}),this}subscribeAsync(e,r){return new Promise((i,n)=>{this.subscribe(e,r,(o,s)=>{o?n(o):i(s);});})}unsubscribe(e,r,i){typeof e=="string"&&(e=[e]),typeof r=="function"&&(i=r),i=i||this.noop;let n=Fp.validateTopics(e);if(n!==null)return Ha(i,new Error(`Invalid topic ${n}`)),this;if(this._checkDisconnecting(i))return this;let o=()=>{let s=this._nextId();if(s===null)return this.log("No messageId left"),!1;let a={cmd:"unsubscribe",messageId:s,unsubscriptions:[]};return typeof e=="string"?a.unsubscriptions=[e]:Array.isArray(e)&&(a.unsubscriptions=e),this.options.resubscribe&&a.unsubscriptions.forEach(l=>{delete this._resubscribeTopics[l];}),typeof r=="object"&&r.properties&&(a.properties=r.properties),this.outgoing[a.messageId]={volatile:!0,cb:i},this.log("unsubscribe: call _sendPacket"),this._sendPacket(a),!0};return (this._storeProcessing||this._storeProcessingQueue.length>0||!o())&&this._storeProcessingQueue.push({invoke:o,callback:i}),this}unsubscribeAsync(e,r){return new Promise((i,n)=>{this.unsubscribe(e,r,(o,s)=>{o?n(o):i(s);});})}end(e,r,i){this.log("end :: (%s)",this.options.clientId),(e==null||typeof e!="boolean")&&(i=i||r,r=e,e=!1),typeof r!="object"&&(i=i||r,r=null),this.log("end :: cb? %s",!!i),(!i||typeof i!="function")&&(i=this.noop);let n=()=>{this.log("end :: closeStores: closing incoming and outgoing stores"),this.disconnected=!0,this.incomingStore.close(s=>{this.outgoingStore.close(a=>{if(this.log("end :: closeStores: emitting end"),this.emit("end"),i){let l=s||a;this.log("end :: closeStores: invoking callback with args"),i(l);}});}),this._deferredReconnect?this._deferredReconnect():(this.options.reconnectPeriod===0||this.options.manualConnect)&&(this.disconnecting=!1);},o=()=>{this.log("end :: (%s) :: finish :: calling _cleanUp with force %s",this.options.clientId,e),this._cleanUp(e,()=>{this.log("end :: finish :: calling process.nextTick on closeStores"),(0, ns.nextTick)(n);},r);};return this.disconnecting?(i(),this):(this._clearReconnect(),this.disconnecting=!0,!e&&Object.keys(this.outgoing).length>0?(this.log("end :: (%s) :: calling finish in 10ms once outgoing is empty",this.options.clientId),this.once("outgoingEmpty",setTimeout.bind(null,o,10))):(this.log("end :: (%s) :: immediately calling finish",this.options.clientId),o()),this)}endAsync(e,r){return new Promise((i,n)=>{this.end(e,r,o=>{o?n(o):i();});})}removeOutgoingMessage(e){if(this.outgoing[e]){let{cb:r}=this.outgoing[e];this._removeOutgoingAndStoreMessage(e,()=>{r(new Error("Message removed"));});}return this}reconnect(e){this.log("client reconnect");let r=()=>{e?(this.options.incomingStore=e.incomingStore,this.options.outgoingStore=e.outgoingStore):(this.options.incomingStore=null,this.options.outgoingStore=null),this.incomingStore=this.options.incomingStore||new ii.default,this.outgoingStore=this.options.outgoingStore||new ii.default,this.disconnecting=!1,this.disconnected=!1,this._deferredReconnect=null,this._reconnect();};return this.disconnecting&&!this.disconnected?this._deferredReconnect=r:r(),this}_flushVolatile(){this.outgoing&&(this.log("_flushVolatile :: deleting volatile messages from the queue and setting their callbacks as error function"),Object.keys(this.outgoing).forEach(e=>{this.outgoing[e].volatile&&typeof this.outgoing[e].cb=="function"&&(this.outgoing[e].cb(new Error("Connection closed")),delete this.outgoing[e]);}));}_flush(){this.outgoing&&(this.log("_flush: queue exists? %b",!!this.outgoing),Object.keys(this.outgoing).forEach(e=>{typeof this.outgoing[e].cb=="function"&&(this.outgoing[e].cb(new Error("Connection closed")),delete this.outgoing[e]);}));}_removeTopicAliasAndRecoverTopicName(e){let r;e.properties&&(r=e.properties.topicAlias);let i=e.topic.toString();if(this.log("_removeTopicAliasAndRecoverTopicName :: alias %d, topic %o",r,i),i.length===0){if(typeof r>"u")return new Error("Unregistered Topic Alias");if(i=this.topicAliasSend.getTopicByAlias(r),typeof i>"u")return new Error("Unregistered Topic Alias");e.topic=i;}r&&delete e.properties.topicAlias;}_checkDisconnecting(e){return this.disconnecting&&(e&&e!==this.noop?e(new Error("client disconnecting")):this.emit("error",new Error("client disconnecting"))),this.disconnecting}_reconnect(){this.log("_reconnect: emitting reconnect to client"),this.emit("reconnect"),this.connected?(this.end(()=>{this.connect();}),this.log("client already connected. disconnecting first.")):(this.log("_reconnect: calling connect"),this.connect());}_setupReconnect(){!this.disconnecting&&!this.reconnectTimer&&this.options.reconnectPeriod>0?(this.reconnecting||(this.log("_setupReconnect :: emit `offline` state"),this.emit("offline"),this.log("_setupReconnect :: set `reconnecting` to `true`"),this.reconnecting=!0),this.log("_setupReconnect :: setting reconnectTimer for %d ms",this.options.reconnectPeriod),this.reconnectTimer=setInterval(()=>{this.log("reconnectTimer :: reconnect triggered!"),this._reconnect();},this.options.reconnectPeriod)):this.log("_setupReconnect :: doing nothing...");}_clearReconnect(){this.log("_clearReconnect : clearing reconnect timer"),this.reconnectTimer&&(clearInterval(this.reconnectTimer),this.reconnectTimer=null);}_cleanUp(e,r,i={}){if(r&&(this.log("_cleanUp :: done callback provided for on stream close"),this.stream.on("close",r)),this.log("_cleanUp :: forced? %s",e),e)this.options.reconnectPeriod===0&&this.options.clean&&this._flush(),this.log("_cleanUp :: (%s) :: destroying stream",this.options.clientId),this.stream.destroy();else {let n=Object.assign({cmd:"disconnect"},i);this.log("_cleanUp :: (%s) :: call _sendPacket with disconnect packet",this.options.clientId),this._sendPacket(n,()=>{this.log("_cleanUp :: (%s) :: destroying stream",this.options.clientId),Ha(()=>{this.stream.end(()=>{this.log("_cleanUp :: (%s) :: stream destroyed",this.options.clientId);});});});}!this.disconnecting&&!this.reconnecting&&(this.log("_cleanUp :: client not disconnecting/reconnecting. Clearing and resetting reconnect."),this._clearReconnect(),this._setupReconnect()),this._destroyKeepaliveManager(),r&&!this.connected&&(this.log("_cleanUp :: (%s) :: removing stream `done` callback `close` listener",this.options.clientId),this.stream.removeListener("close",r),r());}_storeAndSend(e,r,i){this.log("storeAndSend :: store packet with cmd %s to outgoingStore",e.cmd);let n=e,o;if(n.cmd==="publish"&&(n=(0, jp.default)(e),o=this._removeTopicAliasAndRecoverTopicName(n),o))return r&&r(o);this.outgoingStore.put(n,s=>{if(s)return r&&r(s);i(),this._writePacket(e,r);});}_applyTopicAlias(e){if(this.options.protocolVersion===5&&e.cmd==="publish"){let r;e.properties&&(r=e.properties.topicAlias);let i=e.topic.toString();if(this.topicAliasSend)if(r){if(i.length!==0&&(this.log("applyTopicAlias :: register topic: %s - alias: %d",i,r),!this.topicAliasSend.put(i,r)))return this.log("applyTopicAlias :: error out of range. topic: %s - alias: %d",i,r),new Error("Sending Topic Alias out of range")}else i.length!==0&&(this.options.autoAssignTopicAlias?(r=this.topicAliasSend.getAliasByTopic(i),r?(e.topic="",e.properties=Object.assign(Object.assign({},e.properties),{topicAlias:r}),this.log("applyTopicAlias :: auto assign(use) topic: %s - alias: %d",i,r)):(r=this.topicAliasSend.getLruAlias(),this.topicAliasSend.put(i,r),e.properties=Object.assign(Object.assign({},e.properties),{topicAlias:r}),this.log("applyTopicAlias :: auto assign topic: %s - alias: %d",i,r))):this.options.autoUseTopicAlias&&(r=this.topicAliasSend.getAliasByTopic(i),r&&(e.topic="",e.properties=Object.assign(Object.assign({},e.properties),{topicAlias:r}),this.log("applyTopicAlias :: auto use topic: %s - alias: %d",i,r))));else if(r)return this.log("applyTopicAlias :: error out of range. topic: %s - alias: %d",i,r),new Error("Sending Topic Alias out of range")}}_noop(e){this.log("noop ::",e);}_writePacket(e,r){this.log("_writePacket :: packet: %O",e),this.log("_writePacket :: emitting `packetsend`"),this.emit("packetsend",e),this.log("_writePacket :: writing to stream");let i=$a.default.writeToStream(e,this.stream,this.options);this.log("_writePacket :: writeToStream result %s",i),!i&&r&&r!==this.noop?(this.log("_writePacket :: handle events on `drain` once through callback."),this.stream.once("drain",r)):r&&(this.log("_writePacket :: invoking cb"),r());}_sendPacket(e,r,i,n){this.log("_sendPacket :: (%s) :: start",this.options.clientId),i=i||this.noop,r=r||this.noop;let o=this._applyTopicAlias(e);if(o){r(o);return}if(!this.connected){if(e.cmd==="auth"){this._writePacket(e,r);return}this.log("_sendPacket :: client not connected. Storing packet offline."),this._storePacket(e,r,i);return}if(n){this._writePacket(e,r);return}switch(e.cmd){case"publish":break;case"pubrel":this._storeAndSend(e,r,i);return;default:this._writePacket(e,r);return}switch(e.qos){case 2:case 1:this._storeAndSend(e,r,i);break;case 0:default:this._writePacket(e,r);break}this.log("_sendPacket :: (%s) :: end",this.options.clientId);}_storePacket(e,r,i){this.log("_storePacket :: packet: %o",e),this.log("_storePacket :: cb? %s",!!r),i=i||this.noop;let n=e;if(n.cmd==="publish"){n=(0, jp.default)(e);let s=this._removeTopicAliasAndRecoverTopicName(n);if(s)return r&&r(s)}let o=n.qos||0;o===0&&this.queueQoSZero||n.cmd!=="publish"?this.queue.push({packet:n,cb:r}):o>0?(r=this.outgoing[n.messageId]?this.outgoing[n.messageId].cb:null,this.outgoingStore.put(n,s=>{if(s)return r&&r(s);i();})):r&&r(new Error("No connection to broker"));}_setupKeepaliveManager(){this.log("_setupKeepaliveManager :: keepalive %d (seconds)",this.options.keepalive),!this.keepaliveManager&&this.options.keepalive&&(this.keepaliveManager=new eE.default(this,this.options.timerVariant));}_destroyKeepaliveManager(){this.keepaliveManager&&(this.log("_destroyKeepaliveManager :: destroying keepalive manager"),this.keepaliveManager.destroy(),this.keepaliveManager=null);}reschedulePing(e=!1){this.keepaliveManager&&this.options.keepalive&&(e||this.options.reschedulePings)&&this._reschedulePing();}_reschedulePing(){this.log("_reschedulePing :: rescheduling ping"),this.keepaliveManager.reschedule();}sendPing(){this.log("_sendPing :: sending pingreq"),this._sendPacket({cmd:"pingreq"});}onKeepaliveTimeout(){this.emit("error",new Error("Keepalive timeout")),this.log("onKeepaliveTimeout :: calling _cleanUp with force true"),this._cleanUp(!0);}_resubscribe(){this.log("_resubscribe");let e=Object.keys(this._resubscribeTopics);if(!this._firstConnection&&(this.options.clean||this.options.protocolVersion>=4&&!this.connackPacket.sessionPresent)&&e.length>0)if(this.options.resubscribe)if(this.options.protocolVersion===5){this.log("_resubscribe: protocolVersion 5");for(let r=0;r{let i=this.outgoingStore.createStream(),n=()=>{i.destroy(),i=null,this._flushStoreProcessingQueue(),o();},o=()=>{this._storeProcessing=!1,this._packetIdsDuringStoreProcessing={};};this.once("close",n),i.on("error",a=>{o(),this._flushStoreProcessingQueue(),this.removeListener("close",n),this.emit("error",a);});let s=()=>{if(!i)return;let a=i.read(1),l;if(!a){i.once("readable",s);return}if(this._storeProcessing=!0,this._packetIdsDuringStoreProcessing[a.messageId]){s();return}!this.disconnecting&&!this.reconnectTimer?(l=this.outgoing[a.messageId]?this.outgoing[a.messageId].cb:null,this.outgoing[a.messageId]={volatile:!1,cb(c,h){l&&l(c,h),s();}},this._packetIdsDuringStoreProcessing[a.messageId]=!0,this.messageIdProvider.register(a.messageId)?this._sendPacket(a,void 0,void 0,!0):this.log("messageId: %d has already used.",a.messageId)):i.destroy&&i.destroy();};i.on("end",()=>{let a=!0;for(let l in this._packetIdsDuringStoreProcessing)if(!this._packetIdsDuringStoreProcessing[l]){a=!1;break}this.removeListener("close",n),a?(o(),this._invokeAllStoreProcessingQueue(),this.emit("connect",e)):r();}),s();};r();}_invokeStoreProcessingQueue(){if(!this._storeProcessing&&this._storeProcessingQueue.length>0){let e=this._storeProcessingQueue[0];if(e&&e.invoke())return this._storeProcessingQueue.shift(),!0}return !1}_invokeAllStoreProcessingQueue(){for(;this._invokeStoreProcessingQueue(););}_flushStoreProcessingQueue(){for(let e of this._storeProcessingQueue)e.cbStorePut&&e.cbStorePut(new Error("Connection closed")),e.callback&&e.callback(new Error("Connection closed"));this._storeProcessingQueue.splice(0);}_removeOutgoingAndStoreMessage(e,r){delete this.outgoing[e],this.outgoingStore.del({messageId:e},(i,n)=>{r(i,n),this.messageIdProvider.deallocate(e),this._invokeStoreProcessingQueue();});}};ss.VERSION=ns.MQTTJS_VERSION;Qe.default=ss;});var Vp=M(za=>{_();v();m();Object.defineProperty(za,"__esModule",{value:!0});var tE=Ua(),Va=class{constructor(){this.numberAllocator=new tE.NumberAllocator(1,65535);}allocate(){return this.lastId=this.numberAllocator.alloc(),this.lastId}getLastAllocated(){return this.lastId}register(e){return this.numberAllocator.use(e)}deallocate(e){this.numberAllocator.free(e);}clear(){this.numberAllocator.clear();}};za.default=Va;});function Rr(t){throw new RangeError(sE[t])}function zp(t,e){let r=t.split("@"),i="";r.length>1&&(i=r[0]+"@",t=r[1]);let n=function(o,s){let a=[],l=o.length;for(;l--;)a[l]=s(o[l]);return a}((t=t.replace(nE,".")).split("."),e).join(".");return i+n}function Yp(t){let e=[],r=0,i=t.length;for(;r=55296&&n<=56319&&r{_();v();m();rE=/^xn--/,iE=/[^\0-\x7E]/,nE=/[\x2E\u3002\uFF0E\uFF61]/g,sE={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},dt=Math.floor,Ka=String.fromCharCode;Kp=function(t,e){return t+22+75*(t<26)-((e!=0)<<5)},Jp=function(t,e,r){let i=0;for(t=r?dt(t/700):t>>1,t+=dt(t/e);t>455;i+=36)t=dt(t/35);return dt(i+36*t/(t+38))},Gp=function(t){let e=[],r=t.length,i=0,n=128,o=72,s=t.lastIndexOf("-");s<0&&(s=0);for(let l=0;l=128&&Rr("not-basic"),e.push(t.charCodeAt(l));for(let l=s>0?s+1:0;l=r&&Rr("invalid-input");let y=(a=t.charCodeAt(l++))-48<10?a-22:a-65<26?a-65:a-97<26?a-97:36;(y>=36||y>dt((2147483647-i)/d))&&Rr("overflow"),i+=y*d;let w=g<=o?1:g>=o+26?26:g-o;if(ydt(2147483647/S)&&Rr("overflow"),d*=S;}let h=e.length+1;o=Jp(i-c,h,c==0),dt(i/h)>2147483647-n&&Rr("overflow"),n+=dt(i/h),i%=h,e.splice(i++,0,n);}var a;return String.fromCodePoint(...e)},Qp=function(t){let e=[],r=(t=Yp(t)).length,i=128,n=0,o=72;for(let l of t)l<128&&e.push(Ka(l));let s=e.length,a=s;for(s&&e.push("-");a=i&&hdt((2147483647-n)/c)&&Rr("overflow"),n+=(l-i)*c,i=l;for(let h of t)if(h2147483647&&Rr("overflow"),h==i){let d=n;for(let g=36;;g+=36){let y=g<=o?1:g>=o+26?26:g-o;if(dString.fromCodePoint(...t)},decode:Gp,encode:Qp,toASCII:function(t){return zp(t,function(e){return iE.test(e)?"xn--"+Qp(e):e})},toUnicode:function(t){return zp(t,function(e){return rE.test(e)?Gp(e.slice(4).toLowerCase()):e})}};Kt.decode;Kt.encode;Kt.toASCII;Kt.toUnicode;Kt.ucs2;Kt.version;});function oE(t,e){return Object.prototype.hasOwnProperty.call(t,e)}var aE,Mi,lE,pt,Zp=_e(()=>{_();v();m();aE=function(t,e,r,i){e=e||"&",r=r||"=";var n={};if(typeof t!="string"||t.length===0)return n;var o=/\+/g;t=t.split(e);var s=1e3;i&&typeof i.maxKeys=="number"&&(s=i.maxKeys);var a=t.length;s>0&&a>s&&(a=s);for(var l=0;l=0?(c=y.substr(0,w),h=y.substr(w+1)):(c=y,h=""),d=decodeURIComponent(c),g=decodeURIComponent(h),oE(n,d)?Array.isArray(n[d])?n[d].push(g):n[d]=[n[d],g]:n[d]=g;}return n},Mi=function(t){switch(typeof t){case"string":return t;case"boolean":return t?"true":"false";case"number":return isFinite(t)?t:"";default:return ""}},lE=function(t,e,r,i){return e=e||"&",r=r||"=",t===null&&(t=void 0),typeof t=="object"?Object.keys(t).map(function(n){var o=encodeURIComponent(Mi(n))+r;return Array.isArray(t[n])?t[n].map(function(s){return o+encodeURIComponent(Mi(s))}).join(e):o+encodeURIComponent(Mi(t[n]))}).join(e):i?encodeURIComponent(Mi(i))+r+encodeURIComponent(Mi(t)):""},pt={};pt.decode=pt.parse=aE,pt.encode=pt.stringify=lE;pt.decode;pt.encode;pt.parse;pt.stringify;});function Ga(){throw new Error("setTimeout has not been defined")}function Qa(){throw new Error("clearTimeout has not been defined")}function rg(t){if(Pt===setTimeout)return setTimeout(t,0);if((Pt===Ga||!Pt)&&setTimeout)return Pt=setTimeout,setTimeout(t,0);try{return Pt(t,0)}catch{try{return Pt.call(null,t,0)}catch{return Pt.call(this||si,t,0)}}}function uE(){ni&&Cr&&(ni=!1,Cr.length?Ot=Cr.concat(Ot):as=-1,Ot.length&&ig());}function ig(){if(!ni){var t=rg(uE);ni=!0;for(var e=Ot.length;e;){for(Cr=Ot,Ot=[];++as{_();v();m();si=typeof globalThis<"u"?globalThis:typeof self<"u"?self:__webpack_require__.g,fe=tg={};(function(){try{Pt=typeof setTimeout=="function"?setTimeout:Ga;}catch{Pt=Ga;}try{kt=typeof clearTimeout=="function"?clearTimeout:Qa;}catch{kt=Qa;}})();Ot=[],ni=!1,as=-1;fe.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r1)for(var I=1;I{_();v();m();Ya={},sg=!1,oi=typeof globalThis<"u"?globalThis:typeof self<"u"?self:__webpack_require__.g;re=fE();re.platform="browser";re.addListener;re.argv;re.binding;re.browser;re.chdir;re.cwd;re.emit;re.env;re.listeners;re.nextTick;re.off;re.on;re.once;re.prependListener;re.prependOnceListener;re.removeAllListeners;re.removeListener;re.title;re.umask;re.version;re.versions;});function cE(){if(og)return Xa;og=!0;var t=re;function e(o){if(typeof o!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(o))}function r(o,s){for(var a="",l=0,c=-1,h=0,d,g=0;g<=o.length;++g){if(g2){var y=a.lastIndexOf("/");if(y!==a.length-1){y===-1?(a="",l=0):(a=a.slice(0,y),l=a.length-1-a.lastIndexOf("/")),c=g,h=0;continue}}else if(a.length===2||a.length===1){a="",l=0,c=g,h=0;continue}}s&&(a.length>0?a+="/..":a="..",l=2);}else a.length>0?a+="/"+o.slice(c+1,g):a=o.slice(c+1,g),l=g-c-1;c=g,h=0;}else d===46&&h!==-1?++h:h=-1;}return a}function i(o,s){var a=s.dir||s.root,l=s.base||(s.name||"")+(s.ext||"");return a?a===s.root?a+l:a+o+l:l}var n={resolve:function(){for(var s="",a=!1,l,c=arguments.length-1;c>=-1&&!a;c--){var h;c>=0?h=arguments[c]:(l===void 0&&(l=t.cwd()),h=l),e(h),h.length!==0&&(s=h+"/"+s,a=h.charCodeAt(0)===47);}return s=r(s,!a),a?s.length>0?"/"+s:"/":s.length>0?s:"."},normalize:function(s){if(e(s),s.length===0)return ".";var a=s.charCodeAt(0)===47,l=s.charCodeAt(s.length-1)===47;return s=r(s,!a),s.length===0&&!a&&(s="."),s.length>0&&l&&(s+="/"),a?"/"+s:s},isAbsolute:function(s){return e(s),s.length>0&&s.charCodeAt(0)===47},join:function(){if(arguments.length===0)return ".";for(var s,a=0;a0&&(s===void 0?s=l:s+="/"+l);}return s===void 0?".":n.normalize(s)},relative:function(s,a){if(e(s),e(a),s===a||(s=n.resolve(s),a=n.resolve(a),s===a))return "";for(var l=1;lw){if(a.charCodeAt(d+E)===47)return a.slice(d+E+1);if(E===0)return a.slice(d+E)}else h>w&&(s.charCodeAt(l+E)===47?S=E:E===0&&(S=0));break}var I=s.charCodeAt(l+E),C=a.charCodeAt(d+E);if(I!==C)break;I===47&&(S=E);}var R="";for(E=l+S+1;E<=c;++E)(E===c||s.charCodeAt(E)===47)&&(R.length===0?R+="..":R+="/..");return R.length>0?R+a.slice(d+S):(d+=S,a.charCodeAt(d)===47&&++d,a.slice(d))},_makeLong:function(s){return s},dirname:function(s){if(e(s),s.length===0)return ".";for(var a=s.charCodeAt(0),l=a===47,c=-1,h=!0,d=s.length-1;d>=1;--d)if(a=s.charCodeAt(d),a===47){if(!h){c=d;break}}else h=!1;return c===-1?l?"/":".":l&&c===1?"//":s.slice(0,c)},basename:function(s,a){if(a!==void 0&&typeof a!="string")throw new TypeError('"ext" argument must be a string');e(s);var l=0,c=-1,h=!0,d;if(a!==void 0&&a.length>0&&a.length<=s.length){if(a.length===s.length&&a===s)return "";var g=a.length-1,y=-1;for(d=s.length-1;d>=0;--d){var w=s.charCodeAt(d);if(w===47){if(!h){l=d+1;break}}else y===-1&&(h=!1,y=d+1),g>=0&&(w===a.charCodeAt(g)?--g===-1&&(c=d):(g=-1,c=y));}return l===c?c=y:c===-1&&(c=s.length),s.slice(l,c)}else {for(d=s.length-1;d>=0;--d)if(s.charCodeAt(d)===47){if(!h){l=d+1;break}}else c===-1&&(h=!1,c=d+1);return c===-1?"":s.slice(l,c)}},extname:function(s){e(s);for(var a=-1,l=0,c=-1,h=!0,d=0,g=s.length-1;g>=0;--g){var y=s.charCodeAt(g);if(y===47){if(!h){l=g+1;break}continue}c===-1&&(h=!1,c=g+1),y===46?a===-1?a=g:d!==1&&(d=1):a!==-1&&(d=-1);}return a===-1||c===-1||d===0||d===1&&a===c-1&&a===l+1?"":s.slice(a,c)},format:function(s){if(s===null||typeof s!="object")throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof s);return i("/",s)},parse:function(s){e(s);var a={root:"",dir:"",base:"",ext:"",name:""};if(s.length===0)return a;var l=s.charCodeAt(0),c=l===47,h;c?(a.root="/",h=1):h=0;for(var d=-1,g=0,y=-1,w=!0,S=s.length-1,E=0;S>=h;--S){if(l=s.charCodeAt(S),l===47){if(!w){g=S+1;break}continue}y===-1&&(w=!1,y=S+1),l===46?d===-1?d=S:E!==1&&(E=1):d!==-1&&(E=-1);}return d===-1||y===-1||E===0||E===1&&d===y-1&&d===g+1?y!==-1&&(g===0&&c?a.base=a.name=s.slice(1,y):a.base=a.name=s.slice(g,y)):(g===0&&c?(a.name=s.slice(1,d),a.base=s.slice(1,y)):(a.name=s.slice(g,d),a.base=s.slice(g,y)),a.ext=s.slice(d,y)),g>0?a.dir=s.slice(0,g-1):c&&(a.dir="/"),a},sep:"/",delimiter:":",win32:null,posix:null};return n.posix=n,Xa=n,Xa}var Xa,og,Za,ag=_e(()=>{_();v();m();Ja();Xa={},og=!1;Za=cE();});var gg={};Jt(gg,{URL:()=>FE,Url:()=>UE,default:()=>Z,fileURLToPath:()=>dg,format:()=>NE,parse:()=>jE,pathToFileURL:()=>pg,resolve:()=>qE,resolveObject:()=>DE});function Fe(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null;}function Li(t,e,r){if(t&>.isObject(t)&&t instanceof Fe)return t;var i=new Fe;return i.parse(t,e,r),i}function _E(){if(cg)return rl;cg=!0;var t=ne;function e(o){if(typeof o!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(o))}function r(o,s){for(var a="",l=0,c=-1,h=0,d,g=0;g<=o.length;++g){if(g2){var y=a.lastIndexOf("/");if(y!==a.length-1){y===-1?(a="",l=0):(a=a.slice(0,y),l=a.length-1-a.lastIndexOf("/")),c=g,h=0;continue}}else if(a.length===2||a.length===1){a="",l=0,c=g,h=0;continue}}s&&(a.length>0?a+="/..":a="..",l=2);}else a.length>0?a+="/"+o.slice(c+1,g):a=o.slice(c+1,g),l=g-c-1;c=g,h=0;}else d===46&&h!==-1?++h:h=-1;}return a}function i(o,s){var a=s.dir||s.root,l=s.base||(s.name||"")+(s.ext||"");return a?a===s.root?a+l:a+o+l:l}var n={resolve:function(){for(var s="",a=!1,l,c=arguments.length-1;c>=-1&&!a;c--){var h;c>=0?h=arguments[c]:(l===void 0&&(l=t.cwd()),h=l),e(h),h.length!==0&&(s=h+"/"+s,a=h.charCodeAt(0)===47);}return s=r(s,!a),a?s.length>0?"/"+s:"/":s.length>0?s:"."},normalize:function(s){if(e(s),s.length===0)return ".";var a=s.charCodeAt(0)===47,l=s.charCodeAt(s.length-1)===47;return s=r(s,!a),s.length===0&&!a&&(s="."),s.length>0&&l&&(s+="/"),a?"/"+s:s},isAbsolute:function(s){return e(s),s.length>0&&s.charCodeAt(0)===47},join:function(){if(arguments.length===0)return ".";for(var s,a=0;a0&&(s===void 0?s=l:s+="/"+l);}return s===void 0?".":n.normalize(s)},relative:function(s,a){if(e(s),e(a),s===a||(s=n.resolve(s),a=n.resolve(a),s===a))return "";for(var l=1;lw){if(a.charCodeAt(d+E)===47)return a.slice(d+E+1);if(E===0)return a.slice(d+E)}else h>w&&(s.charCodeAt(l+E)===47?S=E:E===0&&(S=0));break}var I=s.charCodeAt(l+E),C=a.charCodeAt(d+E);if(I!==C)break;I===47&&(S=E);}var R="";for(E=l+S+1;E<=c;++E)(E===c||s.charCodeAt(E)===47)&&(R.length===0?R+="..":R+="/..");return R.length>0?R+a.slice(d+S):(d+=S,a.charCodeAt(d)===47&&++d,a.slice(d))},_makeLong:function(s){return s},dirname:function(s){if(e(s),s.length===0)return ".";for(var a=s.charCodeAt(0),l=a===47,c=-1,h=!0,d=s.length-1;d>=1;--d)if(a=s.charCodeAt(d),a===47){if(!h){c=d;break}}else h=!1;return c===-1?l?"/":".":l&&c===1?"//":s.slice(0,c)},basename:function(s,a){if(a!==void 0&&typeof a!="string")throw new TypeError('"ext" argument must be a string');e(s);var l=0,c=-1,h=!0,d;if(a!==void 0&&a.length>0&&a.length<=s.length){if(a.length===s.length&&a===s)return "";var g=a.length-1,y=-1;for(d=s.length-1;d>=0;--d){var w=s.charCodeAt(d);if(w===47){if(!h){l=d+1;break}}else y===-1&&(h=!1,y=d+1),g>=0&&(w===a.charCodeAt(g)?--g===-1&&(c=d):(g=-1,c=y));}return l===c?c=y:c===-1&&(c=s.length),s.slice(l,c)}else {for(d=s.length-1;d>=0;--d)if(s.charCodeAt(d)===47){if(!h){l=d+1;break}}else c===-1&&(h=!1,c=d+1);return c===-1?"":s.slice(l,c)}},extname:function(s){e(s);for(var a=-1,l=0,c=-1,h=!0,d=0,g=s.length-1;g>=0;--g){var y=s.charCodeAt(g);if(y===47){if(!h){l=g+1;break}continue}c===-1&&(h=!1,c=g+1),y===46?a===-1?a=g:d!==1&&(d=1):a!==-1&&(d=-1);}return a===-1||c===-1||d===0||d===1&&a===c-1&&a===l+1?"":s.slice(a,c)},format:function(s){if(s===null||typeof s!="object")throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof s);return i("/",s)},parse:function(s){e(s);var a={root:"",dir:"",base:"",ext:"",name:""};if(s.length===0)return a;var l=s.charCodeAt(0),c=l===47,h;c?(a.root="/",h=1):h=0;for(var d=-1,g=0,y=-1,w=!0,S=s.length-1,E=0;S>=h;--S){if(l=s.charCodeAt(S),l===47){if(!w){g=S+1;break}continue}y===-1&&(w=!1,y=S+1),l===46?d===-1?d=S:E!==1&&(E=1):d!==-1&&(E=-1);}return d===-1||y===-1||E===0||E===1&&d===y-1&&d===g+1?y!==-1&&(g===0&&c?a.base=a.name=s.slice(1,y):a.base=a.name=s.slice(g,y)):(g===0&&c?(a.name=s.slice(1,d),a.base=s.slice(1,y)):(a.name=s.slice(g,d),a.base=s.slice(g,y)),a.ext=s.slice(d,y)),g>0?a.dir=s.slice(0,g-1):c&&(a.dir="/"),a},sep:"/",delimiter:":",win32:null,posix:null};return n.posix=n,rl=n,rl}function kE(t){if(typeof t=="string")t=new URL(t);else if(!(t instanceof URL))throw new Deno.errors.InvalidData("invalid argument path , must be a string or URL");if(t.protocol!=="file:")throw new Deno.errors.InvalidData("invalid url scheme");return nl?OE(t):xE(t)}function OE(t){let e=t.hostname,r=t.pathname;for(let i=0;iAE||n!==":")throw new Deno.errors.InvalidData("file url path must be absolute");return r.slice(1)}}function xE(t){if(t.hostname!=="")throw new Deno.errors.InvalidData("invalid file url hostname");let e=t.pathname;for(let r=0;rVE||n!==":")throw new Deno.errors.InvalidData("file url path must be absolute");return r.slice(1)}}function ZE(t){if(t.hostname!=="")throw new Deno.errors.InvalidData("invalid file url hostname");let e=t.pathname;for(let r=0;r{_();v();m();Xp();Zp();ng();ag();Ja();Z={},hE=Kt,gt={isString:function(t){return typeof t=="string"},isObject:function(t){return typeof t=="object"&&t!==null},isNull:function(t){return t===null},isNullOrUndefined:function(t){return t==null}};Z.parse=Li,Z.resolve=function(t,e){return Li(t,!1,!0).resolve(e)},Z.resolveObject=function(t,e){return t?Li(t,!1,!0).resolveObject(e):e},Z.format=function(t){return gt.isString(t)&&(t=Li(t)),t instanceof Fe?t.format():Fe.prototype.format.call(t)},Z.Url=Fe;dE=/^([a-z0-9.+-]+:)/i,pE=/:[0-9]*$/,gE=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,yE=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r",` +`," "]),il=["'"].concat(yE),lg=["%","/","?",";","#"].concat(il),ug=["/","?","#"],fg=/^[+a-z0-9A-Z_-]{0,63}$/,bE=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,wE={javascript:!0,"javascript:":!0},el={javascript:!0,"javascript:":!0},ai={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},tl=pt;Fe.prototype.parse=function(t,e,r){if(!gt.isString(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var i=t.indexOf("?"),n=i!==-1&&i127?U+="x":U+=R[N];if(!U.match(fg)){var K=I.slice(0,w),z=I.slice(w+1),Q=R.match(bE);Q&&(K.push(Q[1]),z.unshift(Q[2])),z.length&&(s="/"+z.join(".")+s),this.hostname=K.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),E||(this.hostname=hE.toASCII(this.hostname));var pe=this.port?":"+this.port:"",Yt=this.hostname||"";this.host=Yt+pe,this.href+=this.host,E&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),s[0]!=="/"&&(s="/"+s));}if(!wE[c])for(w=0,C=il.length;w0)&&r.host.split("@"))&&(r.auth=Q.shift(),r.host=r.hostname=Q.shift())),r.search=t.search,r.query=t.query,gt.isNull(r.pathname)&>.isNull(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r;if(!R.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var N=R.slice(-1)[0],W=(r.host||t.host||R.length>1)&&(N==="."||N==="..")||N==="",K=0,z=R.length;z>=0;z--)(N=R[z])==="."?R.splice(z,1):N===".."?(R.splice(z,1),K++):K&&(R.splice(z,1),K--);if(!I&&!C)for(;K--;K)R.unshift("..");!I||R[0]===""||R[0]&&R[0].charAt(0)==="/"||R.unshift(""),W&&R.join("/").substr(-1)!=="/"&&R.push("");var Q,pe=R[0]===""||R[0]&&R[0].charAt(0)==="/";return U&&(r.hostname=r.host=pe?"":R.length?R.shift():"",(Q=!!(r.host&&r.host.indexOf("@")>0)&&r.host.split("@"))&&(r.auth=Q.shift(),r.host=r.hostname=Q.shift())),(I=I||r.host&&R.length)&&!pe&&R.unshift(""),R.length?r.pathname=R.join("/"):(r.pathname=null,r.path=null),gt.isNull(r.pathname)&>.isNull(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=t.auth||r.auth,r.slashes=r.slashes||t.slashes,r.href=r.format(),r},Fe.prototype.parseHost=function(){var t=this.host,e=pE.exec(t);e&&((e=e[0])!==":"&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t);};Z.Url;Z.format;Z.resolve;Z.resolveObject;rl={},cg=!1;hg=_E(),mE=typeof Deno<"u"?Deno.build.os==="windows"?"win32":Deno.build.os:void 0;Z.URL=typeof URL<"u"?URL:null;Z.pathToFileURL=ME;Z.fileURLToPath=kE;Z.Url;Z.format;Z.resolve;Z.resolveObject;Z.URL;vE=92,EE=47,SE=97,AE=122,nl=mE==="win32",IE=/\//g,TE=/%/g,RE=/\\/g,CE=/\n/g,BE=/\r/g,PE=/\t/g;LE=typeof Deno<"u"?Deno.build.os==="windows"?"win32":Deno.build.os:void 0;Z.URL=typeof URL<"u"?URL:null;Z.pathToFileURL=pg;Z.fileURLToPath=dg;UE=Z.Url,NE=Z.format,qE=Z.resolve,DE=Z.resolveObject,jE=Z.parse,FE=Z.URL,WE=92,$E=47,HE=97,VE=122,sl=LE==="win32",zE=/\//g,KE=/%/g,GE=/\\/g,QE=/\n/g,YE=/\r/g,JE=/\t/g;});var wg=M((m8,bg)=>{_();v();m();bg.exports=function(){throw new Error("ws does not work in the browser. Browser clients must use the native WebSocket object")};});var ls=M(li=>{_();v();m();Object.defineProperty(li,"__esModule",{value:!0});li.BufferedDuplex=li.writev=void 0;var eS=jt(),_g=(be(),X(me));function mg(t,e){let r=new Array(t.length);for(let i=0;i{this.destroyed||this.push(n);});}_read(e){this.proxy.read(e);}_write(e,r,i){this.isSocketOpen?this.writeToProxy(e,r,i):this.writeQueue.push({chunk:e,encoding:r,cb:i});}_final(e){this.writeQueue=[],this.proxy.end(e);}_destroy(e,r){this.writeQueue=[],this.proxy.destroy(),r(e);}socketReady(){this.emit("connect"),this.isSocketOpen=!0,this.processWriteQueue();}writeToProxy(e,r,i){this.proxy.write(e,r)===!1?this.proxy.once("drain",i):i();}processWriteQueue(){for(;this.writeQueue.length>0;){let{chunk:e,encoding:r,cb:i}=this.writeQueue.shift();this.writeToProxy(e,r,i);}}};li.BufferedDuplex=ol;});var Ui=M(Qt=>{_();v();m();var ll=Qt&&Qt.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Qt,"__esModule",{value:!0});Qt.streamBuilder=Qt.browserStreamBuilder=void 0;var us=(be(),X(me)),vg=ll(wg()),tS=ll(ot()),rS=jt(),iS=ll(Oi()),al=ls(),Gt=(0, tS.default)("mqttjs:ws"),nS=["rejectUnauthorized","ca","cert","key","pfx","passphrase"];function Eg(t,e){let r=`${t.protocol}://${t.hostname}:${t.port}${t.path}`;return typeof t.transformWsUrl=="function"&&(r=t.transformWsUrl(r,t,e)),r}function Sg(t){let e=t;return t.port||(t.protocol==="wss"?e.port=443:e.port=80),t.path||(e.path="/"),t.wsOptions||(e.wsOptions={}),!iS.default&&!t.forceNativeWebSocket&&t.protocol==="wss"&&nS.forEach(r=>{Object.prototype.hasOwnProperty.call(t,r)&&!Object.prototype.hasOwnProperty.call(t.wsOptions,r)&&(e.wsOptions[r]=t[r]);}),e}function sS(t){let e=Sg(t);if(e.hostname||(e.hostname=e.host),!e.hostname){if(typeof document>"u")throw new Error("Could not determine host. Specify host manually.");let r=new URL(document.URL);e.hostname=r.hostname,e.port||(e.port=Number(r.port));}return e.objectMode===void 0&&(e.objectMode=!(e.binary===!0||e.binary===void 0)),e}function oS(t,e,r){Gt("createWebSocket"),Gt(`protocol: ${r.protocolId} ${r.protocolVersion}`);let i=r.protocolId==="MQIsdp"&&r.protocolVersion===3?"mqttv3.1":"mqtt";Gt(`creating new Websocket for url: ${e} and protocol: ${i}`);let n;return r.createWebsocket?n=r.createWebsocket(e,[i],r):n=new vg.default(e,[i],r.wsOptions),n}function aS(t,e){let r=e.protocolId==="MQIsdp"&&e.protocolVersion===3?"mqttv3.1":"mqtt",i=Eg(e,t),n;return e.createWebsocket?n=e.createWebsocket(i,[r],e):n=new WebSocket(i,[r]),n.binaryType="arraybuffer",n}var lS=(t,e)=>{Gt("streamBuilder");let r=Sg(e);r.hostname=r.hostname||r.host||"localhost";let i=Eg(r,t),n=oS(t,i,r),o=vg.default.createWebSocketStream(n,r.wsOptions);return o.url=i,n.on("close",()=>{o.destroy();}),o};Qt.streamBuilder=lS;var uS=(t,e)=>{Gt("browserStreamBuilder");let r,n=sS(e).browserBufferSize||1024*512,o=e.browserBufferTimeout||1e3,s=!e.objectMode,a=aS(t,e),l=h(e,S,E);e.objectMode||(l._writev=al.writev.bind(l)),l.on("close",()=>{a.close();});let c=typeof a.addEventListener<"u";a.readyState===a.OPEN?(r=l,r.socket=a):(r=new al.BufferedDuplex(e,l,a),c?a.addEventListener("open",d):a.onopen=d),c?(a.addEventListener("close",g),a.addEventListener("error",y),a.addEventListener("message",w)):(a.onclose=g,a.onerror=y,a.onmessage=w);function h(I,C,R){let U=new rS.Transform({objectMode:I.objectMode});return U._write=C,U._flush=R,U}function d(){Gt("WebSocket onOpen"),r instanceof al.BufferedDuplex&&r.socketReady();}function g(I){Gt("WebSocket onClose",I),r.end(),r.destroy();}function y(I){Gt("WebSocket onError",I);let C=new Error("WebSocket error");C.event=I,r.destroy(C);}async function w(I){let{data:C}=I;C instanceof ArrayBuffer?C=us.Buffer.from(C):C instanceof Blob?C=us.Buffer.from(await new Response(C).arrayBuffer()):C=us.Buffer.from(C,"utf8"),l&&!l.destroyed&&l.push(C);}function S(I,C,R){if(a.bufferedAmount>n){setTimeout(S,o,I,C,R);return}s&&typeof I=="string"&&(I=us.Buffer.from(I,"utf8"));try{a.send(I);}catch(U){return R(U)}R();}function E(I){a.close(),I();}return r};Qt.browserStreamBuilder=uS;});var ul={};Jt(ul,{Server:()=>Me,Socket:()=>Me,Stream:()=>Me,_createServerHandle:()=>Me,_normalizeArgs:()=>Me,_setSimultaneousAccepts:()=>Me,connect:()=>Me,createConnection:()=>Me,createServer:()=>Me,default:()=>fS,isIP:()=>Me,isIPv4:()=>Me,isIPv6:()=>Me});function Me(){throw new Error("Node.js net module is not supported by JSPM core outside of Node.js")}var fS,fl=_e(()=>{_();v();m();fS={_createServerHandle:Me,_normalizeArgs:Me,_setSimultaneousAccepts:Me,connect:Me,createConnection:Me,createServer:Me,isIP:Me,isIPv4:Me,isIPv6:Me,Server:Me,Socket:Me,Stream:Me};});var cl=M(Ni=>{_();v();m();var Ag=Ni&&Ni.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Ni,"__esModule",{value:!0});var cS=Ag((fl(),X(ul))),hS=Ag(ot()),dS=(0, hS.default)("mqttjs:tcp"),pS=(t,e)=>{e.port=e.port||1883,e.hostname=e.hostname||e.host||"localhost";let{port:r,path:i}=e,n=e.hostname;return dS("port %d and host %s",r,n),cS.default.createConnection({port:r,host:n,path:i})};Ni.default=pS;});var Ig={};Jt(Ig,{default:()=>gS});var gS,Tg=_e(()=>{_();v();m();gS={};});var dl=M(qi=>{_();v();m();var hl=qi&&qi.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(qi,"__esModule",{value:!0});var yS=hl((Tg(),X(Ig))),bS=hl((fl(),X(ul))),wS=hl(ot()),_S=(0, wS.default)("mqttjs:tls"),mS=(t,e)=>{e.port=e.port||8883,e.host=e.hostname||e.host||"localhost",bS.default.isIP(e.host)===0&&(e.servername=e.host),e.rejectUnauthorized=e.rejectUnauthorized!==!1,delete e.path,_S("port %d host %s rejectUnauthorized %b",e.port,e.host,e.rejectUnauthorized);let r=yS.default.connect(e);r.on("secureConnect",()=>{e.rejectUnauthorized&&!r.authorized?r.emit("error",new Error("TLS not authorized")):r.removeListener("error",i);});function i(n){e.rejectUnauthorized&&t.emit("error",n),r.end();}return r.on("error",i),r};qi.default=mS;});var yl=M(gl=>{_();v();m();Object.defineProperty(gl,"__esModule",{value:!0});var Rg=(be(),X(me)),vS=jt(),ES=ls(),yt,pl,Le;function SS(){let t=new vS.Transform;return t._write=(e,r,i)=>{yt.send({data:e.buffer,success(){i();},fail(n){i(new Error(n));}});},t._flush=e=>{yt.close({success(){e();}});},t}function AS(t){t.hostname||(t.hostname="localhost"),t.path||(t.path="/"),t.wsOptions||(t.wsOptions={});}function IS(t,e){let r=t.protocol==="wxs"?"wss":"ws",i=`${r}://${t.hostname}${t.path}`;return t.port&&t.port!==80&&t.port!==443&&(i=`${r}://${t.hostname}:${t.port}${t.path}`),typeof t.transformWsUrl=="function"&&(i=t.transformWsUrl(i,t,e)),i}function TS(){yt.onOpen(()=>{Le.socketReady();}),yt.onMessage(t=>{let{data:e}=t;e instanceof ArrayBuffer?e=Rg.Buffer.from(e):e=Rg.Buffer.from(e,"utf8"),pl.push(e);}),yt.onClose(()=>{Le.emit("close"),Le.end(),Le.destroy();}),yt.onError(t=>{let e=new Error(t.errMsg);Le.destroy(e);});}var RS=(t,e)=>{if(e.hostname=e.hostname||e.host,!e.hostname)throw new Error("Could not determine host. Specify host manually.");let r=e.protocolId==="MQIsdp"&&e.protocolVersion===3?"mqttv3.1":"mqtt";AS(e);let i=IS(e,t);yt=wx.connectSocket({url:i,protocols:[r]}),pl=SS(),Le=new ES.BufferedDuplex(e,pl,yt),Le._destroy=(o,s)=>{yt.close({success(){s&&s(o);}});};let n=Le.destroy;return Le.destroy=(o,s)=>(Le.destroy=n,setTimeout(()=>{yt.close({fail(){Le._destroy(o,s);}});},0),Le),TS(),Le};gl.default=RS;});var _l=M(wl=>{_();v();m();Object.defineProperty(wl,"__esModule",{value:!0});var bl=(be(),X(me)),CS=jt(),BS=ls(),xt,fs,ui,Cg=!1;function PS(){let t=new CS.Transform;return t._write=(e,r,i)=>{xt.sendSocketMessage({data:e.buffer,success(){i();},fail(){i(new Error);}});},t._flush=e=>{xt.closeSocket({success(){e();}});},t}function kS(t){t.hostname||(t.hostname="localhost"),t.path||(t.path="/"),t.wsOptions||(t.wsOptions={});}function OS(t,e){let r=t.protocol==="alis"?"wss":"ws",i=`${r}://${t.hostname}${t.path}`;return t.port&&t.port!==80&&t.port!==443&&(i=`${r}://${t.hostname}:${t.port}${t.path}`),typeof t.transformWsUrl=="function"&&(i=t.transformWsUrl(i,t,e)),i}function xS(){Cg||(Cg=!0,xt.onSocketOpen(()=>{ui.socketReady();}),xt.onSocketMessage(t=>{if(typeof t.data=="string"){let e=bl.Buffer.from(t.data,"base64");fs.push(e);}else {let e=new FileReader;e.addEventListener("load",()=>{let r=e.result;r instanceof ArrayBuffer?r=bl.Buffer.from(r):r=bl.Buffer.from(r,"utf8"),fs.push(r);}),e.readAsArrayBuffer(t.data);}}),xt.onSocketClose(()=>{ui.end(),ui.destroy();}),xt.onSocketError(t=>{ui.destroy(t);}));}var MS=(t,e)=>{if(e.hostname=e.hostname||e.host,!e.hostname)throw new Error("Could not determine host. Specify host manually.");let r=e.protocolId==="MQIsdp"&&e.protocolVersion===3?"mqttv3.1":"mqtt";kS(e);let i=OS(e,t);return xt=e.my,xt.connectSocket({url:i,protocols:r}),fs=PS(),ui=new BS.BufferedDuplex(e,fs,xt),xS(),ui};wl.default=MS;});var kg=M(Br=>{_();v();m();var cs=Br&&Br.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Br,"__esModule",{value:!0});Br.connectAsync=void 0;var LS=cs(ot()),US=cs((yg(),X(gg))),NS=cs(os()),qS=cs(Oi());typeof(B===null||B===void 0?void 0:B.nextTick)!="function"&&(B.nextTick=setImmediate);var Bg=(0, LS.default)("mqttjs"),de=null;function DS(t){let e;t.auth&&(e=t.auth.match(/^(.+):(.+)$/),e?(t.username=e[1],t.password=e[2]):t.username=t.auth);}function Pg(t,e){var r,i,n,o;if(Bg("connecting to an MQTT broker..."),typeof t=="object"&&!e&&(e=t,t=""),e=e||{},t&&typeof t=="string"){let l=US.default.parse(t,!0),c={};if(l.port!=null&&(c.port=Number(l.port)),c.host=l.hostname,c.query=l.query,c.auth=l.auth,c.protocol=l.protocol,c.path=l.path,c.protocol=(r=c.protocol)===null||r===void 0?void 0:r.replace(/:$/,""),e=Object.assign(Object.assign({},c),e),!e.protocol)throw new Error("Missing protocol")}if(e.unixSocket=e.unixSocket||((i=e.protocol)===null||i===void 0?void 0:i.includes("+unix")),e.unixSocket?e.protocol=e.protocol.replace("+unix",""):!(!((n=e.protocol)===null||n===void 0)&&n.startsWith("ws"))&&!(!((o=e.protocol)===null||o===void 0)&&o.startsWith("wx"))&&delete e.path,DS(e),e.query&&typeof e.query.clientId=="string"&&(e.clientId=e.query.clientId),e.cert&&e.key)if(e.protocol){if(["mqtts","wss","wxs","alis"].indexOf(e.protocol)===-1)switch(e.protocol){case"mqtt":e.protocol="mqtts";break;case"ws":e.protocol="wss";break;case"wx":e.protocol="wxs";break;case"ali":e.protocol="alis";break;default:throw new Error(`Unknown protocol for secure connection: "${e.protocol}"!`)}}else throw new Error("Missing secure protocol key");if(de||(de={},!qS.default&&!e.forceNativeWebSocket?(de.ws=Ui().streamBuilder,de.wss=Ui().streamBuilder,de.mqtt=cl().default,de.tcp=cl().default,de.ssl=dl().default,de.tls=de.ssl,de.mqtts=dl().default):(de.ws=Ui().browserStreamBuilder,de.wss=Ui().browserStreamBuilder,de.wx=yl().default,de.wxs=yl().default,de.ali=_l().default,de.alis=_l().default)),!de[e.protocol]){let l=["mqtts","wss"].indexOf(e.protocol)!==-1;e.protocol=["mqtt","mqtts","ws","wss","wx","wxs","ali","alis"].filter((c,h)=>l&&h%2===0?!1:typeof de[c]=="function")[0];}if(e.clean===!1&&!e.clientId)throw new Error("Missing clientId for unclean clients");e.protocol&&(e.defaultProtocol=e.protocol);function s(l){return e.servers&&((!l._reconnectCount||l._reconnectCount===e.servers.length)&&(l._reconnectCount=0),e.host=e.servers[l._reconnectCount].host,e.port=e.servers[l._reconnectCount].port,e.protocol=e.servers[l._reconnectCount].protocol?e.servers[l._reconnectCount].protocol:e.defaultProtocol,e.hostname=e.host,l._reconnectCount++),Bg("calling streambuilder for",e.protocol),de[e.protocol](l,e)}let a=new NS.default(s,e);return a.on("error",()=>{}),a}function jS(t,e,r=!0){return new Promise((i,n)=>{let o=Pg(t,e),s={connect:l=>{a(),i(o);},end:()=>{a(),i(o);},error:l=>{a(),o.end(),n(l);}};r===!1&&(s.close=()=>{s.error(new Error("Couldn't connect to server"));});function a(){Object.keys(s).forEach(l=>{o.off(l,s[l]);});}Object.keys(s).forEach(l=>{o.on(l,s[l]);});})}Br.connectAsync=jS;Br.default=Pg;});var ml=M(G=>{_();v();m();var Og=G&&G.__createBinding||(Object.create?function(t,e,r,i){i===void 0&&(i=r);var n=Object.getOwnPropertyDescriptor(e,r);(!n||("get"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,i,n);}:function(t,e,r,i){i===void 0&&(i=r),t[i]=e[r];}),FS=G&&G.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e});}:function(t,e){t.default=e;}),WS=G&&G.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.prototype.hasOwnProperty.call(t,r)&&Og(e,t,r);return FS(e,t),e},xg=G&&G.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Og(e,t,r);},Di=G&&G.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(G,"__esModule",{value:!0});G.ReasonCodes=G.KeepaliveManager=G.UniqueMessageIdProvider=G.DefaultMessageIdProvider=G.Store=G.MqttClient=G.connectAsync=G.connect=G.Client=void 0;var Mg=Di(os());G.MqttClient=Mg.default;var $S=Di(Zo());G.DefaultMessageIdProvider=$S.default;var HS=Di(Vp());G.UniqueMessageIdProvider=HS.default;var VS=Di(ra());G.Store=VS.default;var Lg=WS(kg());G.connect=Lg.default;Object.defineProperty(G,"connectAsync",{enumerable:!0,get:function(){return Lg.connectAsync}});var zS=Di(Wa());G.KeepaliveManager=zS.default;G.Client=Mg.default;xg(os(),G);xg(_r(),G);var KS=Ti();Object.defineProperty(G,"ReasonCodes",{enumerable:!0,get:function(){return KS.ReasonCodes}});});var XS=M(We=>{_();v();m();var Ug=We&&We.__createBinding||(Object.create?function(t,e,r,i){i===void 0&&(i=r);var n=Object.getOwnPropertyDescriptor(e,r);(!n||("get"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,i,n);}:function(t,e,r,i){i===void 0&&(i=r),t[i]=e[r];}),GS=We&&We.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e});}:function(t,e){t.default=e;}),QS=We&&We.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.prototype.hasOwnProperty.call(t,r)&&Ug(e,t,r);return GS(e,t),e},YS=We&&We.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Ug(e,t,r);};Object.defineProperty(We,"__esModule",{value:!0});var JS=QS(ml());We.default=JS;YS(ml(),We);});var mqtt = XS(); /*! Bundled license information: @jspm/core/nodelibs/browser/buffer.js: (*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh *) */ +class CloudInteropAPIError extends Error { + code; + constructor(message = 'An unexpected error has occurred', code = 'UNEXPECTED_ERROR', cause) { + super(message, { cause: cause }); + this.name = this.constructor.name; + this.code = code; + } +} +class AuthorizationError extends CloudInteropAPIError { + constructor(message = 'Not authorized', code = 'ERR_UNAUTHORIZED') { + super(message, code, undefined); + } +} + +// Error codes as defined in https://docs.emqx.com/en/cloud/latest/connect_to_deployments/mqtt_client_error_codes.html +const BadUserNamePasswordError = 134; +/** + * Represents a single connection to a Cloud Interop service + * + * @export + * @class CloudInteropAPI + * @implements {Client} + */ class CloudInteropAPI { - connectParams; - _sessionDetails; - _mqttClient; - reconnectRetryLimit = 30; - reconnectRetries = 0; - contextListener; - constructor(connectParams) { - this.connectParams = connectParams; + #cloudInteropSettings; + #sessionDetails; + #mqttClient; + #reconnectRetryLimit = 30; + #keepAliveIntervalSeconds = 30; + #logger = (level, message) => { + console[level](message); + }; + #reconnectRetries = 0; + #connectionParams; + #eventListeners = new Map(); + #attemptingToReconnect = false; + constructor(cloudInteropSettings) { + this.#cloudInteropSettings = cloudInteropSettings; } get sessionDetails() { - return this._sessionDetails; + return this.#sessionDetails; } get mqttClient() { - return this._mqttClient; + return this.#mqttClient; } - async connect(params) { - const { userId, password, sourceId, platformId } = params; - let connectResponse; + /** + * Connects and creates a session on the Cloud Interop service + * + * @param {ConnectParameters} parameters - The parameters to use to connect + * @return {*} {Promise} + * @memberof CloudInteropAPI + * @throws {CloudInteropAPIError} - If an error occurs during connection + * @throws {AuthorizationError} - If the connection is unauthorized + */ + async connect(parameters) { + this.#validateConnectParams(parameters); + this.#connectionParams = parameters; + this.#reconnectRetryLimit = parameters.reconnectRetryLimit || this.#reconnectRetryLimit; + this.#keepAliveIntervalSeconds = parameters.keepAliveIntervalSeconds || this.#keepAliveIntervalSeconds; + this.#logger = parameters.logger || this.#logger; + const { sourceId, platformId } = this.#connectionParams; try { - connectResponse = await axios.post(`${this.connectParams.url}/sessions`, { - userId, + const createSessionResponse = await axios.post(`${this.#cloudInteropSettings.url}/api/sessions`, { sourceId, - platformId + platformId, + }, { + headers: this.#getRequestHeaders(), }); - if (connectResponse.status !== 200) { - throw new Error(`Failed to connect to Cloud Interop url: ${this.connectParams.url}`); + if (createSessionResponse.status !== 201) { + throw new CloudInteropAPIError(`Failed to connect to the Cloud Interop service: ${this.#cloudInteropSettings.url}`, 'ERR_CONNECT', createSessionResponse.status); } - const { sessionRootTopic } = connectResponse.data; - const lastWillPayload = { - userId, - sourceId, - platformId, - sessionId: connectResponse.data.sessionId - }; + this.#sessionDetails = createSessionResponse.data; + const sessionRootTopic = this.#sessionDetails.sessionRootTopic; const clientOptions = { - clientId: connectResponse.data.sessionId, + keepalive: this.#keepAliveIntervalSeconds, + clientId: this.#sessionDetails.sessionId, clean: true, protocolVersion: 5, + // The "will" message will be published on an unexpected disconnection + // The server can then tidy up. So it needs every for this client to do that, the session details is perfect will: { topic: 'interop/lastwill', - payload: buffer__WEBPACK_IMPORTED_MODULE_0__.Buffer.from(JSON.stringify(lastWillPayload)), + payload: buffer__WEBPACK_IMPORTED_MODULE_0__.Buffer.from(JSON.stringify(this.#sessionDetails)), qos: 0, - retain: false + retain: false, + properties: { + willDelayInterval: 10, + }, }, - username: userId, - password + username: this.#sessionDetails.token, }; - this._mqttClient = await mqtt.connectAsync(connectResponse.data.mqttUrl, clientOptions); - this._sessionDetails = connectResponse.data; - console.log(`Cloud Interop successfully connected to ${this.connectParams.url}`); - this._mqttClient.on('error', (error) => { - console.error(`Cloud Interop Error: ${error}`); - }); - this._mqttClient.stream.on('error', (error) => { - console.error(`Cloud Interop Connection Error: ${error}`); + this.#mqttClient = await mqtt.connectAsync(this.#sessionDetails.url, clientOptions); + this.#logger('log', `Cloud Interop successfully connected to ${this.#cloudInteropSettings.url}`); + this.#mqttClient.on('error', async (error) => { + // We will receive errors for each failed reconnection attempt + // We don't won't to disconnect on these else we will never reconnect + if (!this.#attemptingToReconnect) { + await this.#disconnect(false); + } + if (error instanceof mqtt.ErrorWithReasonCode) { + switch (error.code) { + case BadUserNamePasswordError: { + await this.#disconnect(false); + this.#logger('warn', `Session expired`); + this.#emitEvent('session-expired'); + return; + } + default: { + this.#logger('error', `Unknown Infrastructure Error Code ${error.code} : ${error.message}${this.#attemptingToReconnect ? ' during reconnection attempt' : ''}`); + // As we are in the middle of a reconnect, lets not emit an error to cut down on the event noise + if (!this.#attemptingToReconnect) { + this.#emitEvent('error', new CloudInteropAPIError(`Unknown Infrastructure Error Code ${error.code} : ${error.message}`, 'ERR_INFRASTRUCTURE', error)); + break; + } + } + } + } + else { + this.#logger('error', `Unknown Error${this.#attemptingToReconnect ? ' during reconnection attempt' : ''}: ${error}`); + // As we are in the middle of a reconnect, lets not emit an error to cut down on the event noise + if (!this.#attemptingToReconnect) { + this.#emitEvent('error', new CloudInteropAPIError(`Unknown Error`, 'ERR_UNKNOWN', error)); + } + } }); - this._mqttClient.on('reconnect', () => { - console.warn(`Cloud Interop attempting reconnection...`); - // Default reconnectPeriod = 30 seconds - // Attempt reconnection 30 times before ending session - this.reconnectRetries += 1; - if (this.reconnectRetries === this.reconnectRetryLimit) { - console.warn(`Cloud Interop reached max reconnection attempts...`); - this.disconnect(); + this.#mqttClient.on('reconnect', () => { + this.#attemptingToReconnect = true; + this.#reconnectRetries += 1; + this.#logger('debug', `Cloud Interop attempting reconnection - ${this.#reconnectRetries}...`); + if (this.#reconnectRetries === this.#reconnectRetryLimit) { + this.#logger('warn', `Cloud Interop reached max reconnection attempts - ${this.#reconnectRetryLimit}...`); + this.#disconnect(true); } + this.#emitEvent('reconnecting', this.#reconnectRetries); }); // Does not fire on initial connection, only successful reconnection attempts - this._mqttClient.on('connect', () => { - console.log(`Cloud Interop successfully reconnected`); - this.reconnectRetries = 0; + this.#mqttClient.on('connect', () => { + this.#logger('debug', `Cloud Interop successfully reconnected after ${this.#reconnectRetries} attempts`); + this.#reconnectRetries = 0; + this.#attemptingToReconnect = false; + this.#emitEvent('reconnected'); }); - this._mqttClient.on('message', (topic, message) => { - this.handleCommand(topic, message, this._sessionDetails); + this.#mqttClient.on('message', (topic, message) => { + if (!this.#sessionDetails) { + this.#logger('warn', 'Received message when session not connected'); + return; + } + this.#handleCommand(topic, message, this.#sessionDetails); }); // Subscribe to all context groups - this._mqttClient.subscribe(`${sessionRootTopic}/context-groups/#`); + this.#mqttClient.subscribe(`${sessionRootTopic}/context-groups/#`); // Listen out for global commands - this._mqttClient.subscribe(`${sessionRootTopic}/commands`); + this.#mqttClient.subscribe(`${sessionRootTopic}/commands`); } catch (error) { - console.warn(`Failed to connect to Cloud Interop at ${this.connectParams.url}`, error); + if (axios.isAxiosError(error)) { + if (error.response?.status === 401 || error.response?.status === 403) { + throw new AuthorizationError(); + } + throw new CloudInteropAPIError(); + } + throw error; } } + /** + * Disconnects from the Cloud Interop service + * + * @return {*} {Promise} + * @memberof CloudInteropAPI + * @throws {CloudInteropAPIError} - If an error occurs during disconnection + */ async disconnect() { - if (!this._sessionDetails) { + await this.#disconnect(true); + } + /** + * Publishes a new context for the given context group to the other connected sessions + * + * @param {string} contextGroup - The context group to publish to + * @param {object} context - The context to publish + * @return {*} {Promise} + * @memberof CloudInteropAPI + */ + async setContext(contextGroup, context) { + if (!this.#sessionDetails || !this.#connectionParams) { + throw new Error('Session not connected'); + } + const payload = { + context, + timestamp: Date.now(), + }; + await axios.post(`${this.#cloudInteropSettings.url}/api/context-groups/${this.#sessionDetails.sessionId}/${contextGroup}`, payload, { + headers: this.#getRequestHeaders(), + }); + } + addEventListener(type, callback) { + const listeners = this.#eventListeners.get(type) || []; + listeners.push(callback); + this.#eventListeners.set(type, listeners); + } + removeEventListener(type, callback) { + const listeners = this.#eventListeners.get(type) || []; + const index = listeners.indexOf(callback); + if (index !== -1) { + listeners.splice(index, 1); + } + this.#eventListeners.set(type, listeners); + } + async #disconnect(fireDisconnectedEvent) { + if (!this.#sessionDetails) { return; } try { - const disconnectResponse = await axios.delete(`${this.connectParams.url}/sessions/${this._sessionDetails.sessionId}`); + const disconnectResponse = await axios.delete(`${this.#cloudInteropSettings.url}/api/sessions/${this.#sessionDetails.sessionId}`, { + headers: this.#getRequestHeaders(), + }); if (disconnectResponse.status !== 200) { - console.warn(`Cloud Interop disconnection failed`, disconnectResponse); + throw new CloudInteropAPIError('Error during session tear down - unexpected status', 'ERR_DISCONNECT', disconnectResponse.status); } } - catch (error) { - console.warn(`Cloud Interop error during disconnection`, error); + catch { + throw new CloudInteropAPIError('Error during disconnection', 'ERR_DISCONNECT'); } finally { - this._mqttClient?.removeAllListeners(); - this._mqttClient?.end(true); - this._sessionDetails = undefined; - this._mqttClient = undefined; - this.reconnectRetries = 0; + this.#mqttClient?.removeAllListeners(); + await this.#mqttClient?.endAsync(true); + this.#sessionDetails = undefined; + this.#mqttClient = undefined; + this.#reconnectRetries = 0; + this.#attemptingToReconnect = false; + if (fireDisconnectedEvent) { + this.#emitEvent('disconnected'); + } } } - async setContext(contextGroup, context) { - if (!this._sessionDetails) { - return; - } - const { userId, sourceId } = this.connectParams; - const payload = { - userId, - sourceId, - context - }; - await axios.post(`${this.connectParams.url}/context-groups/${this._sessionDetails.sessionId}/${contextGroup}`, payload); - } - addContextListener(callback) { - this.contextListener = callback; - } - startIntentDiscovery(intentName, context) { - throw new Error('Method not implemented.'); - } - endIntentDiscovery(discoveryId) { - throw new Error('Method not implemented.'); - } - sendIntentDetail(discoveryId, intentDetail) { - throw new Error('Method not implemented.'); - } - raiseIntent(targetSession, intentInstanceId, context) { - throw new Error('Method not implemented.'); - } - addIntentDetailListener(callback) { - throw new Error('Method not implemented.'); - } - handleCommand(topic, message, sessionDetails) { + #handleCommand(topic, message, sessionDetails) { if (message.length === 0 || !sessionDetails) { // Ignore clean up messages return; @@ -3422,48 +4026,125 @@ class CloudInteropAPI { if (messageEnvelope.source.sessionId === sessionDetails.sessionId) { return; } - if (this.contextListener) { - const { channelName: contextGroup, payload: context, source } = messageEnvelope; - this.contextListener(contextGroup, context, source); - } + const { channelName: contextGroup, payload: context, source, history } = messageEnvelope; + this.#emitEvent('context', { contextGroup, context, source, history: { ...history, clientReceived: Date.now() } }); } } + #emitEvent(type, ...args) { + const listeners = this.#eventListeners.get(type) || []; + listeners.forEach((listener) => listener(...args)); + } + #validateConnectParams = (parameters) => { + if (!parameters) { + throw new Error('Connect parameters must be provided'); + } + if (parameters.authenticationType === 'jwt' && + (!parameters.jwtAuthenticationParameters?.jwtRequestCallback || !parameters.jwtAuthenticationParameters?.authenticationId)) { + throw new Error('jwtAuthenticationParameters must be provided when using jwt authentication'); + } + if (parameters.authenticationType === 'basic' && + (!parameters.basicAuthenticationParameters?.username || !parameters.basicAuthenticationParameters?.password)) { + throw new Error('basicAuthenticationParameters must be provided when using basic authentication'); + } + }; + #getRequestHeaders = () => { + if (!this.#connectionParams) { + throw new Error('Connect parameters must be provided'); + } + const headers = new AxiosHeaders(); + headers['Content-Type'] = 'application/json'; + if (this.#connectionParams.authenticationType === 'jwt' && this.#connectionParams.jwtAuthenticationParameters) { + const tokenResult = this.#connectionParams.jwtAuthenticationParameters.jwtRequestCallback(); + if (!tokenResult) { + throw new Error('jwtRequestCallback must return a token'); + } + headers['x-of-auth-id'] = this.#connectionParams.jwtAuthenticationParameters.authenticationId; + headers['Authorization'] = + typeof tokenResult === 'string' ? `Bearer ${tokenResult}` : `Bearer ${buffer__WEBPACK_IMPORTED_MODULE_0__.Buffer.from(JSON.stringify(tokenResult)).toString('base64')}`; + } + if (this.#connectionParams.authenticationType === 'basic' && this.#connectionParams.basicAuthenticationParameters) { + const { username, password } = this.#connectionParams.basicAuthenticationParameters; + headers['Authorization'] = `Basic ${buffer__WEBPACK_IMPORTED_MODULE_0__.Buffer.from(`${username}:${password}`).toString('base64')}`; + } + return headers; + }; } +/** + * Enhances InteropBroker with Cloud Interop functionality + * @param {CloudInteropOverrideParams} config Configuration to connect to the Cloud Interop service + */ async function cloudInteropOverride(config) { - const client = new CloudInteropAPI(config); + const { url, ...settings } = config; + const client = new CloudInteropAPI({ url }); try { - await client.connect(config); + await client.connect(settings); } catch (err) { - console.warn(err); - return (Base) => { - return class NoOpOverride extends Base { - constructor() { - super(); - } - }; - }; + // eslint-disable-next-line no-console + console.warn(`[CloudInteropOverride] Failed to connect to Cloud Interop Service. Call interopBroker.cloudReconnect() to attempt reconnection`, err); } return (Base) => { return class CloudInteropOverride extends Base { + contextListener; + setContextFilter = (context) => true; constructor() { super(); - client.addContextListener((contextGroup, context, source) => { + this.contextListener = (event) => { + const { contextGroup, context, source } = event; if (this.getContextGroups() .map(({ id }) => id) .includes(contextGroup) && client.sessionDetails?.sessionId !== source.sessionId) { super.setContextForGroup({ context: context }, contextGroup); } - }); + }; + client.addEventListener('context', this.contextListener); } async setContextForGroup({ context }, contextGroupId) { - client.setContext(contextGroupId, context); + if (this.cloudConnectionState === 'connected' && this.setContextFilter(context)) { + client.setContext(contextGroupId, context); + } super.setContextForGroup({ context }, contextGroupId); } - async cloudReconnect() { - await client.connect(config); + /** + * Attempts reconnection to the Cloud Interop service + * @param {ConnectParameters} settings Parameters for connecting to the Interop Service + * @return {*} {Promise} + * @throws {CloudInteropAPIError} + * @throws {AuthorizationError} + * @memberof CloudInteropOverride + */ + async cloudReconnect(settings) { + try { + if (this.cloudConnectionState === 'connected') { + await client.disconnect(); + } + await client.connect(settings || config); + } + catch (err) { + console.warn(`[CloudInteropOverride] Failed reconnection to Cloud Interop Service.`, err); + } + } + /** + * Sets the listener for context events coming from the Cloud Interop service + * @param listener Context event listener + * @return {*} {void} + * @memberof CloudInteropOverride + */ + setCloudContextListener(listener) { + client.removeEventListener('context', this.contextListener); + this.contextListener = listener; + client.addEventListener('context', this.contextListener); + } + /** + * Sets a filter that is applied to local context before it is forwarded to the Cloud Interop service + * @param filter + * @return {*} {void} + * @memberof CloudInteropOverride + */ + setCloudSetContextFilter(filter) { + this.setContextFilter = filter; } get cloudConnectionState() { if (client.mqttClient?.connected) { @@ -9493,4 +10174,4 @@ async function getManifestCustomSettings() { /******/ })() ; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUyxRQUFRO0FBQ2pCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdB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QUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwyQkFBMkIsbUJBQW1CO0FBQzlDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtB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QTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLE1BQU07QUFDL0MsTUFBTTtBQUNOO0FBQ0E7QUFDQSw4Q0FBOEMsTUFBTTtBQUNwRDtBQUNBLENBQUM7O0FBRUQsc0NBQXNDLE9BQU87O0FBRTdDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxXQUFXLFFBQVE7QUFDbkI7QUFDQTs7QUFFQTs7QUFFQSxvQkFBb0IsWUFBWTtBQUNoQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxtREFBbUQsR0FBRztBQUN0RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EseUNBQXlDLElBQUk7QUFDN0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNB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QUFPOztBQUVQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZDtBQUNBLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFVBQVU7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLFlBQVk7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSx3Q0FBd0MsU0FBUztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsaUJBQWlCO0FBQ2pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsY0FBYyxpQkFBaUI7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLFNBQVM7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixTQUFTO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixTQUFTO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELEVBQUU7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsa0JBQWtCLFNBQVM7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLGVBQWU7QUFDeEM7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EseUJBQXlCLFFBQVE7QUFDakM7QUFDQSxzQkFBc0IsZUFBZTtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsWUFBWTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsc0JBQXNCLFNBQVM7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHNCQUFzQixTQUFTO0FBQy9CO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHNCQUFzQixTQUFTO0FBQy9CO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixrQkFBa0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLG9CQUFvQixjQUFjO0FBQ2xDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx3REFBd0QsT0FBTztBQUMvRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esd0RBQXdELE9BQU87QUFDL0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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R0FBRyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM1QyxDQUFDLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxLQUFLLFVBQVUseUJBQXlCO0lBQ3ZDLCtDQUErQztJQUMvQyxNQUFNLEdBQUcsR0FBRyxNQUFNLEdBQUcsQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUM7SUFFL0MsbURBQW1EO0lBQ25ELE1BQU0sUUFBUSxHQUEyRCxNQUFNLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNqRyxPQUFPLFFBQVEsQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDO0FBQ3RDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tc3VwcG9ydC1jb250ZXh0LWFuZC1pbnRlbnRzLy4uLy4uL25vZGVfbW9kdWxlcy9Ab3BlbmZpbi9jbG91ZC1pbnRlcm9wL291dC9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tc3VwcG9ydC1jb250ZXh0LWFuZC1pbnRlbnRzLy4uLy4uL25vZGVfbW9kdWxlcy9Ab3BlbmZpbi93b3Jrc3BhY2UtcGxhdGZvcm0vaW5kZXguanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLXN1cHBvcnQtY29udGV4dC1hbmQtaW50ZW50cy8uLi8uLi9ub2RlX21vZHVsZXMvQG9wZW5maW4vd29ya3NwYWNlL2luZGV4LmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1zdXBwb3J0LWNvbnRleHQtYW5kLWludGVudHMvLi4vLi4vbm9kZV9tb2R1bGVzL2Jhc2U2NC1qcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tc3VwcG9ydC1jb250ZXh0LWFuZC1pbnRlbnRzLy4uLy4uL25vZGVfbW9kdWxlcy9idWZmZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLXN1cHBvcnQtY29udGV4dC1hbmQtaW50ZW50cy8uLi8uLi9ub2RlX21vZHVsZXMvaWVlZTc1NC9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tc3VwcG9ydC1jb250ZXh0LWFuZC1pbnRlbnRzLy4uLy4uL25vZGVfbW9kdWxlcy9pc2FycmF5L2luZGV4LmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1zdXBwb3J0LWNvbnRleHQtYW5kLWludGVudHMvLi9jbGllbnQvc3JjL2FwcHMudHMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLXN1cHBvcnQtY29udGV4dC1hbmQtaW50ZW50cy8uL2NsaWVudC9zcmMvaW50ZXJvcGJyb2tlci50cyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tc3VwcG9ydC1jb250ZXh0LWFuZC1pbnRlbnRzL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1zdXBwb3J0LWNvbnRleHQtYW5kLWludGVudHMvd2VicGFjay9ydW50aW1lL2FtZCBvcHRpb25zIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1zdXBwb3J0LWNvbnRleHQtYW5kLWludGVudHMvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLXN1cHBvcnQtY29udGV4dC1hbmQtaW50ZW50cy93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLXN1cHBvcnQtY29udGV4dC1hbmQtaW50ZW50cy93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1zdXBwb3J0LWNvbnRleHQtYW5kLWludGVudHMvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tc3VwcG9ydC1jb250ZXh0LWFuZC1pbnRlbnRzL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLXN1cHBvcnQtY29udGV4dC1hbmQtaW50ZW50cy8uL2NsaWVudC9zcmMvcHJvdmlkZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJztcblxuZnVuY3Rpb24gYmluZChmbiwgdGhpc0FyZykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcCgpIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuLy8gdXRpbHMgaXMgYSBsaWJyYXJ5IG9mIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBub24tc3BlY2lmaWMgdG8gYXhpb3NcblxuY29uc3Qge3RvU3RyaW5nfSA9IE9iamVjdC5wcm90b3R5cGU7XG5jb25zdCB7Z2V0UHJvdG90eXBlT2Z9ID0gT2JqZWN0O1xuXG5jb25zdCBraW5kT2YgPSAoY2FjaGUgPT4gdGhpbmcgPT4ge1xuICAgIGNvbnN0IHN0ciA9IHRvU3RyaW5nLmNhbGwodGhpbmcpO1xuICAgIHJldHVybiBjYWNoZVtzdHJdIHx8IChjYWNoZVtzdHJdID0gc3RyLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpKTtcbn0pKE9iamVjdC5jcmVhdGUobnVsbCkpO1xuXG5jb25zdCBraW5kT2ZUZXN0ID0gKHR5cGUpID0+IHtcbiAgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuICh0aGluZykgPT4ga2luZE9mKHRoaW5nKSA9PT0gdHlwZVxufTtcblxuY29uc3QgdHlwZU9mVGVzdCA9IHR5cGUgPT4gdGhpbmcgPT4gdHlwZW9mIHRoaW5nID09PSB0eXBlO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3Qge2lzQXJyYXl9ID0gQXJyYXk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNVbmRlZmluZWQgPSB0eXBlT2ZUZXN0KCd1bmRlZmluZWQnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0J1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsKSAmJiB2YWwuY29uc3RydWN0b3IgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbC5jb25zdHJ1Y3RvcilcbiAgICAmJiBpc0Z1bmN0aW9uKHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikgJiYgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNBcnJheUJ1ZmZlciA9IGtpbmRPZlRlc3QoJ0FycmF5QnVmZmVyJyk7XG5cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXJWaWV3KHZhbCkge1xuICBsZXQgcmVzdWx0O1xuICBpZiAoKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpICYmIChBcnJheUJ1ZmZlci5pc1ZpZXcpKSB7XG4gICAgcmVzdWx0ID0gQXJyYXlCdWZmZXIuaXNWaWV3KHZhbCk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gKHZhbCkgJiYgKHZhbC5idWZmZXIpICYmIChpc0FycmF5QnVmZmVyKHZhbC5idWZmZXIpKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyaW5nXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmluZywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzU3RyaW5nID0gdHlwZU9mVGVzdCgnc3RyaW5nJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGdW5jdGlvbiA9IHR5cGVPZlRlc3QoJ2Z1bmN0aW9uJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBOdW1iZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgTnVtYmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNOdW1iZXIgPSB0eXBlT2ZUZXN0KCdudW1iZXInKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNPYmplY3QgPSAodGhpbmcpID0+IHRoaW5nICE9PSBudWxsICYmIHR5cGVvZiB0aGluZyA9PT0gJ29iamVjdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCb29sZWFuXG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCb29sZWFuLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNCb29sZWFuID0gdGhpbmcgPT4gdGhpbmcgPT09IHRydWUgfHwgdGhpbmcgPT09IGZhbHNlO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzUGxhaW5PYmplY3QgPSAodmFsKSA9PiB7XG4gIGlmIChraW5kT2YodmFsKSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBwcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZih2YWwpO1xuICByZXR1cm4gKHByb3RvdHlwZSA9PT0gbnVsbCB8fCBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkgPT09IG51bGwpICYmICEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIHZhbCkgJiYgIShTeW1ib2wuaXRlcmF0b3IgaW4gdmFsKTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBEYXRlXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIERhdGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0RhdGUgPSBraW5kT2ZUZXN0KCdEYXRlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0ZpbGUgPSBraW5kT2ZUZXN0KCdGaWxlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCbG9iXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJsb2IsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Jsb2IgPSBraW5kT2ZUZXN0KCdCbG9iJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlTGlzdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGaWxlTGlzdCA9IGtpbmRPZlRlc3QoJ0ZpbGVMaXN0Jyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJlYW1cbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNTdHJlYW0gPSAodmFsKSA9PiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gRm9ybURhdGEsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Zvcm1EYXRhID0gKHRoaW5nKSA9PiB7XG4gIGxldCBraW5kO1xuICByZXR1cm4gdGhpbmcgJiYgKFxuICAgICh0eXBlb2YgRm9ybURhdGEgPT09ICdmdW5jdGlvbicgJiYgdGhpbmcgaW5zdGFuY2VvZiBGb3JtRGF0YSkgfHwgKFxuICAgICAgaXNGdW5jdGlvbih0aGluZy5hcHBlbmQpICYmIChcbiAgICAgICAgKGtpbmQgPSBraW5kT2YodGhpbmcpKSA9PT0gJ2Zvcm1kYXRhJyB8fFxuICAgICAgICAvLyBkZXRlY3QgZm9ybS1kYXRhIGluc3RhbmNlXG4gICAgICAgIChraW5kID09PSAnb2JqZWN0JyAmJiBpc0Z1bmN0aW9uKHRoaW5nLnRvU3RyaW5nKSAmJiB0aGluZy50b1N0cmluZygpID09PSAnW29iamVjdCBGb3JtRGF0YV0nKVxuICAgICAgKVxuICAgIClcbiAgKVxufTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzVVJMU2VhcmNoUGFyYW1zID0ga2luZE9mVGVzdCgnVVJMU2VhcmNoUGFyYW1zJyk7XG5cbi8qKlxuICogVHJpbSBleGNlc3Mgd2hpdGVzcGFjZSBvZmYgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgU3RyaW5nIHRvIHRyaW1cbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmNvbnN0IHRyaW0gPSAoc3RyKSA9PiBzdHIudHJpbSA/XG4gIHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csICcnKTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0IGludm9raW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiBgb2JqYCBpcyBhbiBBcnJheSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGluZGV4LCBhbmQgY29tcGxldGUgYXJyYXkgZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiAnb2JqJyBpcyBhbiBPYmplY3QgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBrZXksIGFuZCBjb21wbGV0ZSBvYmplY3QgZm9yIGVhY2ggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBjYWxsYmFjayB0byBpbnZva2UgZm9yIGVhY2ggaXRlbVxuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2FsbE93bktleXMgPSBmYWxzZV1cbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbiwge2FsbE93bktleXMgPSBmYWxzZX0gPSB7fSkge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBpO1xuICBsZXQgbDtcblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAoaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzXG4gICAgY29uc3Qga2V5cyA9IGFsbE93bktleXMgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopIDogT2JqZWN0LmtleXMob2JqKTtcbiAgICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQga2V5O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpba2V5XSwga2V5LCBvYmopO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kS2V5KG9iaiwga2V5KSB7XG4gIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgbGV0IF9rZXk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgX2tleSA9IGtleXNbaV07XG4gICAgaWYgKGtleSA9PT0gX2tleS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICByZXR1cm4gX2tleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IF9nbG9iYWwgPSAoKCkgPT4ge1xuICAvKmVzbGludCBuby11bmRlZjowKi9cbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZ2xvYmFsVGhpcztcbiAgcmV0dXJuIHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbClcbn0pKCk7XG5cbmNvbnN0IGlzQ29udGV4dERlZmluZWQgPSAoY29udGV4dCkgPT4gIWlzVW5kZWZpbmVkKGNvbnRleHQpICYmIGNvbnRleHQgIT09IF9nbG9iYWw7XG5cbi8qKlxuICogQWNjZXB0cyB2YXJhcmdzIGV4cGVjdGluZyBlYWNoIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCwgdGhlblxuICogaW1tdXRhYmx5IG1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiBlYWNoIG9iamVjdCBhbmQgcmV0dXJucyByZXN1bHQuXG4gKlxuICogV2hlbiBtdWx0aXBsZSBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUga2V5IHRoZSBsYXRlciBvYmplY3QgaW5cbiAqIHRoZSBhcmd1bWVudHMgbGlzdCB3aWxsIHRha2UgcHJlY2VkZW5jZS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgY29uc3Qge2Nhc2VsZXNzfSA9IGlzQ29udGV4dERlZmluZWQodGhpcykgJiYgdGhpcyB8fCB7fTtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGNvbnN0IGFzc2lnblZhbHVlID0gKHZhbCwga2V5KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0S2V5ID0gY2FzZWxlc3MgJiYgZmluZEtleShyZXN1bHQsIGtleSkgfHwga2V5O1xuICAgIGlmIChpc1BsYWluT2JqZWN0KHJlc3VsdFt0YXJnZXRLZXldKSAmJiBpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2UocmVzdWx0W3RhcmdldEtleV0sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2Uoe30sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsLnNsaWNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsO1xuICAgIH1cbiAgfTtcblxuICBmb3IgKGxldCBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBhcmd1bWVudHNbaV0gJiYgZm9yRWFjaChhcmd1bWVudHNbaV0sIGFzc2lnblZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEV4dGVuZHMgb2JqZWN0IGEgYnkgbXV0YWJseSBhZGRpbmcgdG8gaXQgdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGEgVGhlIG9iamVjdCB0byBiZSBleHRlbmRlZFxuICogQHBhcmFtIHtPYmplY3R9IGIgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbVxuICogQHBhcmFtIHtPYmplY3R9IHRoaXNBcmcgVGhlIG9iamVjdCB0byBiaW5kIGZ1bmN0aW9uIHRvXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBbYWxsT3duS2V5c11cbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSByZXN1bHRpbmcgdmFsdWUgb2Ygb2JqZWN0IGFcbiAqL1xuY29uc3QgZXh0ZW5kID0gKGEsIGIsIHRoaXNBcmcsIHthbGxPd25LZXlzfT0ge30pID0+IHtcbiAgZm9yRWFjaChiLCAodmFsLCBrZXkpID0+IHtcbiAgICBpZiAodGhpc0FyZyAmJiBpc0Z1bmN0aW9uKHZhbCkpIHtcbiAgICAgIGFba2V5XSA9IGJpbmQodmFsLCB0aGlzQXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYVtrZXldID0gdmFsO1xuICAgIH1cbiAgfSwge2FsbE93bktleXN9KTtcbiAgcmV0dXJuIGE7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBieXRlIG9yZGVyIG1hcmtlci4gVGhpcyBjYXRjaGVzIEVGIEJCIEJGICh0aGUgVVRGLTggQk9NKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IHdpdGggQk9NXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gY29udGVudCB2YWx1ZSB3aXRob3V0IEJPTVxuICovXG5jb25zdCBzdHJpcEJPTSA9IChjb250ZW50KSA9PiB7XG4gIGlmIChjb250ZW50LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xuICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKDEpO1xuICB9XG4gIHJldHVybiBjb250ZW50O1xufTtcblxuLyoqXG4gKiBJbmhlcml0IHRoZSBwcm90b3R5cGUgbWV0aG9kcyBmcm9tIG9uZSBjb25zdHJ1Y3RvciBpbnRvIGFub3RoZXJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdXBlckNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge29iamVjdH0gW3Byb3BzXVxuICogQHBhcmFtIHtvYmplY3R9IFtkZXNjcmlwdG9yc11cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuY29uc3QgaW5oZXJpdHMgPSAoY29uc3RydWN0b3IsIHN1cGVyQ29uc3RydWN0b3IsIHByb3BzLCBkZXNjcmlwdG9ycykgPT4ge1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlLCBkZXNjcmlwdG9ycyk7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uc3RydWN0b3IsICdzdXBlcicsIHtcbiAgICB2YWx1ZTogc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGVcbiAgfSk7XG4gIHByb3BzICYmIE9iamVjdC5hc3NpZ24oY29uc3RydWN0b3IucHJvdG90eXBlLCBwcm9wcyk7XG59O1xuXG4vKipcbiAqIFJlc29sdmUgb2JqZWN0IHdpdGggZGVlcCBwcm90b3R5cGUgY2hhaW4gdG8gYSBmbGF0IG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZU9iaiBzb3VyY2Ugb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gW2Rlc3RPYmpdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufEJvb2xlYW59IFtmaWx0ZXJdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJvcEZpbHRlcl1cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5jb25zdCB0b0ZsYXRPYmplY3QgPSAoc291cmNlT2JqLCBkZXN0T2JqLCBmaWx0ZXIsIHByb3BGaWx0ZXIpID0+IHtcbiAgbGV0IHByb3BzO1xuICBsZXQgaTtcbiAgbGV0IHByb3A7XG4gIGNvbnN0IG1lcmdlZCA9IHt9O1xuXG4gIGRlc3RPYmogPSBkZXN0T2JqIHx8IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgaWYgKHNvdXJjZU9iaiA9PSBudWxsKSByZXR1cm4gZGVzdE9iajtcblxuICBkbyB7XG4gICAgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VPYmopO1xuICAgIGkgPSBwcm9wcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgIHByb3AgPSBwcm9wc1tpXTtcbiAgICAgIGlmICgoIXByb3BGaWx0ZXIgfHwgcHJvcEZpbHRlcihwcm9wLCBzb3VyY2VPYmosIGRlc3RPYmopKSAmJiAhbWVyZ2VkW3Byb3BdKSB7XG4gICAgICAgIGRlc3RPYmpbcHJvcF0gPSBzb3VyY2VPYmpbcHJvcF07XG4gICAgICAgIG1lcmdlZFtwcm9wXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHNvdXJjZU9iaiA9IGZpbHRlciAhPT0gZmFsc2UgJiYgZ2V0UHJvdG90eXBlT2Yoc291cmNlT2JqKTtcbiAgfSB3aGlsZSAoc291cmNlT2JqICYmICghZmlsdGVyIHx8IGZpbHRlcihzb3VyY2VPYmosIGRlc3RPYmopKSAmJiBzb3VyY2VPYmogIT09IE9iamVjdC5wcm90b3R5cGUpO1xuXG4gIHJldHVybiBkZXN0T2JqO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBzdHJpbmcgZW5kcyB3aXRoIHRoZSBjaGFyYWN0ZXJzIG9mIGEgc3BlY2lmaWVkIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWFyY2hTdHJpbmdcbiAqIEBwYXJhbSB7TnVtYmVyfSBbcG9zaXRpb249IDBdXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGVuZHNXaXRoID0gKHN0ciwgc2VhcmNoU3RyaW5nLCBwb3NpdGlvbikgPT4ge1xuICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQgfHwgcG9zaXRpb24gPiBzdHIubGVuZ3RoKSB7XG4gICAgcG9zaXRpb24gPSBzdHIubGVuZ3RoO1xuICB9XG4gIHBvc2l0aW9uIC09IHNlYXJjaFN0cmluZy5sZW5ndGg7XG4gIGNvbnN0IGxhc3RJbmRleCA9IHN0ci5pbmRleE9mKHNlYXJjaFN0cmluZywgcG9zaXRpb24pO1xuICByZXR1cm4gbGFzdEluZGV4ICE9PSAtMSAmJiBsYXN0SW5kZXggPT09IHBvc2l0aW9uO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgbmV3IGFycmF5IGZyb20gYXJyYXkgbGlrZSBvYmplY3Qgb3IgbnVsbCBpZiBmYWlsZWRcbiAqXG4gKiBAcGFyYW0geyp9IFt0aGluZ11cbiAqXG4gKiBAcmV0dXJucyB7P0FycmF5fVxuICovXG5jb25zdCB0b0FycmF5ID0gKHRoaW5nKSA9PiB7XG4gIGlmICghdGhpbmcpIHJldHVybiBudWxsO1xuICBpZiAoaXNBcnJheSh0aGluZykpIHJldHVybiB0aGluZztcbiAgbGV0IGkgPSB0aGluZy5sZW5ndGg7XG4gIGlmICghaXNOdW1iZXIoaSkpIHJldHVybiBudWxsO1xuICBjb25zdCBhcnIgPSBuZXcgQXJyYXkoaSk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgYXJyW2ldID0gdGhpbmdbaV07XG4gIH1cbiAgcmV0dXJuIGFycjtcbn07XG5cbi8qKlxuICogQ2hlY2tpbmcgaWYgdGhlIFVpbnQ4QXJyYXkgZXhpc3RzIGFuZCBpZiBpdCBkb2VzLCBpdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgdGhlXG4gKiB0aGluZyBwYXNzZWQgaW4gaXMgYW4gaW5zdGFuY2Ugb2YgVWludDhBcnJheVxuICpcbiAqIEBwYXJhbSB7VHlwZWRBcnJheX1cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5jb25zdCBpc1R5cGVkQXJyYXkgPSAoVHlwZWRBcnJheSA9PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiB0aGluZyA9PiB7XG4gICAgcmV0dXJuIFR5cGVkQXJyYXkgJiYgdGhpbmcgaW5zdGFuY2VvZiBUeXBlZEFycmF5O1xuICB9O1xufSkodHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnICYmIGdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkpKTtcblxuLyoqXG4gKiBGb3IgZWFjaCBlbnRyeSBpbiB0aGUgb2JqZWN0LCBjYWxsIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBrZXkgYW5kIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5jb25zdCBmb3JFYWNoRW50cnkgPSAob2JqLCBmbikgPT4ge1xuICBjb25zdCBnZW5lcmF0b3IgPSBvYmogJiYgb2JqW1N5bWJvbC5pdGVyYXRvcl07XG5cbiAgY29uc3QgaXRlcmF0b3IgPSBnZW5lcmF0b3IuY2FsbChvYmopO1xuXG4gIGxldCByZXN1bHQ7XG5cbiAgd2hpbGUgKChyZXN1bHQgPSBpdGVyYXRvci5uZXh0KCkpICYmICFyZXN1bHQuZG9uZSkge1xuICAgIGNvbnN0IHBhaXIgPSByZXN1bHQudmFsdWU7XG4gICAgZm4uY2FsbChvYmosIHBhaXJbMF0sIHBhaXJbMV0pO1xuICB9XG59O1xuXG4vKipcbiAqIEl0IHRha2VzIGEgcmVndWxhciBleHByZXNzaW9uIGFuZCBhIHN0cmluZywgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgYWxsIHRoZSBtYXRjaGVzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlZ0V4cCAtIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggYWdhaW5zdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIHNlYXJjaC5cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXk8Ym9vbGVhbj59XG4gKi9cbmNvbnN0IG1hdGNoQWxsID0gKHJlZ0V4cCwgc3RyKSA9PiB7XG4gIGxldCBtYXRjaGVzO1xuICBjb25zdCBhcnIgPSBbXTtcblxuICB3aGlsZSAoKG1hdGNoZXMgPSByZWdFeHAuZXhlYyhzdHIpKSAhPT0gbnVsbCkge1xuICAgIGFyci5wdXNoKG1hdGNoZXMpO1xuICB9XG5cbiAgcmV0dXJuIGFycjtcbn07XG5cbi8qIENoZWNraW5nIGlmIHRoZSBraW5kT2ZUZXN0IGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHBhc3NlZCBhbiBIVE1MRm9ybUVsZW1lbnQuICovXG5jb25zdCBpc0hUTUxGb3JtID0ga2luZE9mVGVzdCgnSFRNTEZvcm1FbGVtZW50Jyk7XG5cbmNvbnN0IHRvQ2FtZWxDYXNlID0gc3RyID0+IHtcbiAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xcc10oW2EtelxcZF0pKFxcdyopL2csXG4gICAgZnVuY3Rpb24gcmVwbGFjZXIobSwgcDEsIHAyKSB7XG4gICAgICByZXR1cm4gcDEudG9VcHBlckNhc2UoKSArIHAyO1xuICAgIH1cbiAgKTtcbn07XG5cbi8qIENyZWF0aW5nIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGNoZWNrIGlmIGFuIG9iamVjdCBoYXMgYSBwcm9wZXJ0eS4gKi9cbmNvbnN0IGhhc093blByb3BlcnR5ID0gKCh7aGFzT3duUHJvcGVydHl9KSA9PiAob2JqLCBwcm9wKSA9PiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpKE9iamVjdC5wcm90b3R5cGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNSZWdFeHAgPSBraW5kT2ZUZXN0KCdSZWdFeHAnKTtcblxuY29uc3QgcmVkdWNlRGVzY3JpcHRvcnMgPSAob2JqLCByZWR1Y2VyKSA9PiB7XG4gIGNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqKTtcbiAgY29uc3QgcmVkdWNlZERlc2NyaXB0b3JzID0ge307XG5cbiAgZm9yRWFjaChkZXNjcmlwdG9ycywgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICBsZXQgcmV0O1xuICAgIGlmICgocmV0ID0gcmVkdWNlcihkZXNjcmlwdG9yLCBuYW1lLCBvYmopKSAhPT0gZmFsc2UpIHtcbiAgICAgIHJlZHVjZWREZXNjcmlwdG9yc1tuYW1lXSA9IHJldCB8fCBkZXNjcmlwdG9yO1xuICAgIH1cbiAgfSk7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqLCByZWR1Y2VkRGVzY3JpcHRvcnMpO1xufTtcblxuLyoqXG4gKiBNYWtlcyBhbGwgbWV0aG9kcyByZWFkLW9ubHlcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqL1xuXG5jb25zdCBmcmVlemVNZXRob2RzID0gKG9iaikgPT4ge1xuICByZWR1Y2VEZXNjcmlwdG9ycyhvYmosIChkZXNjcmlwdG9yLCBuYW1lKSA9PiB7XG4gICAgLy8gc2tpcCByZXN0cmljdGVkIHByb3BzIGluIHN0cmljdCBtb2RlXG4gICAgaWYgKGlzRnVuY3Rpb24ob2JqKSAmJiBbJ2FyZ3VtZW50cycsICdjYWxsZXInLCAnY2FsbGVlJ10uaW5kZXhPZihuYW1lKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IG9ialtuYW1lXTtcblxuICAgIGlmICghaXNGdW5jdGlvbih2YWx1ZSkpIHJldHVybjtcblxuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGZhbHNlO1xuXG4gICAgaWYgKCd3cml0YWJsZScgaW4gZGVzY3JpcHRvcikge1xuICAgICAgZGVzY3JpcHRvci53cml0YWJsZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghZGVzY3JpcHRvci5zZXQpIHtcbiAgICAgIGRlc2NyaXB0b3Iuc2V0ID0gKCkgPT4ge1xuICAgICAgICB0aHJvdyBFcnJvcignQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgXFwnJyArIG5hbWUgKyAnXFwnJyk7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG59O1xuXG5jb25zdCB0b09iamVjdFNldCA9IChhcnJheU9yU3RyaW5nLCBkZWxpbWl0ZXIpID0+IHtcbiAgY29uc3Qgb2JqID0ge307XG5cbiAgY29uc3QgZGVmaW5lID0gKGFycikgPT4ge1xuICAgIGFyci5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgIG9ialt2YWx1ZV0gPSB0cnVlO1xuICAgIH0pO1xuICB9O1xuXG4gIGlzQXJyYXkoYXJyYXlPclN0cmluZykgPyBkZWZpbmUoYXJyYXlPclN0cmluZykgOiBkZWZpbmUoU3RyaW5nKGFycmF5T3JTdHJpbmcpLnNwbGl0KGRlbGltaXRlcikpO1xuXG4gIHJldHVybiBvYmo7XG59O1xuXG5jb25zdCBub29wID0gKCkgPT4ge307XG5cbmNvbnN0IHRvRmluaXRlTnVtYmVyID0gKHZhbHVlLCBkZWZhdWx0VmFsdWUpID0+IHtcbiAgdmFsdWUgPSArdmFsdWU7XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpID8gdmFsdWUgOiBkZWZhdWx0VmFsdWU7XG59O1xuXG5jb25zdCBBTFBIQSA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eic7XG5cbmNvbnN0IERJR0lUID0gJzAxMjM0NTY3ODknO1xuXG5jb25zdCBBTFBIQUJFVCA9IHtcbiAgRElHSVQsXG4gIEFMUEhBLFxuICBBTFBIQV9ESUdJVDogQUxQSEEgKyBBTFBIQS50b1VwcGVyQ2FzZSgpICsgRElHSVRcbn07XG5cbmNvbnN0IGdlbmVyYXRlU3RyaW5nID0gKHNpemUgPSAxNiwgYWxwaGFiZXQgPSBBTFBIQUJFVC5BTFBIQV9ESUdJVCkgPT4ge1xuICBsZXQgc3RyID0gJyc7XG4gIGNvbnN0IHtsZW5ndGh9ID0gYWxwaGFiZXQ7XG4gIHdoaWxlIChzaXplLS0pIHtcbiAgICBzdHIgKz0gYWxwaGFiZXRbTWF0aC5yYW5kb20oKSAqIGxlbmd0aHwwXTtcbiAgfVxuXG4gIHJldHVybiBzdHI7XG59O1xuXG4vKipcbiAqIElmIHRoZSB0aGluZyBpcyBhIEZvcm1EYXRhIG9iamVjdCwgcmV0dXJuIHRydWUsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXG4gKlxuICogQHBhcmFtIHt1bmtub3dufSB0aGluZyAtIFRoZSB0aGluZyB0byBjaGVjay5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNTcGVjQ29tcGxpYW50Rm9ybSh0aGluZykge1xuICByZXR1cm4gISEodGhpbmcgJiYgaXNGdW5jdGlvbih0aGluZy5hcHBlbmQpICYmIHRoaW5nW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdGb3JtRGF0YScgJiYgdGhpbmdbU3ltYm9sLml0ZXJhdG9yXSk7XG59XG5cbmNvbnN0IHRvSlNPTk9iamVjdCA9IChvYmopID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgQXJyYXkoMTApO1xuXG4gIGNvbnN0IHZpc2l0ID0gKHNvdXJjZSwgaSkgPT4ge1xuXG4gICAgaWYgKGlzT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIGlmIChzdGFjay5pbmRleE9mKHNvdXJjZSkgPj0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmKCEoJ3RvSlNPTicgaW4gc291cmNlKSkge1xuICAgICAgICBzdGFja1tpXSA9IHNvdXJjZTtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gaXNBcnJheShzb3VyY2UpID8gW10gOiB7fTtcblxuICAgICAgICBmb3JFYWNoKHNvdXJjZSwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICBjb25zdCByZWR1Y2VkVmFsdWUgPSB2aXNpdCh2YWx1ZSwgaSArIDEpO1xuICAgICAgICAgICFpc1VuZGVmaW5lZChyZWR1Y2VkVmFsdWUpICYmICh0YXJnZXRba2V5XSA9IHJlZHVjZWRWYWx1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN0YWNrW2ldID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfTtcblxuICByZXR1cm4gdmlzaXQob2JqLCAwKTtcbn07XG5cbmNvbnN0IGlzQXN5bmNGbiA9IGtpbmRPZlRlc3QoJ0FzeW5jRnVuY3Rpb24nKTtcblxuY29uc3QgaXNUaGVuYWJsZSA9ICh0aGluZykgPT5cbiAgdGhpbmcgJiYgKGlzT2JqZWN0KHRoaW5nKSB8fCBpc0Z1bmN0aW9uKHRoaW5nKSkgJiYgaXNGdW5jdGlvbih0aGluZy50aGVuKSAmJiBpc0Z1bmN0aW9uKHRoaW5nLmNhdGNoKTtcblxudmFyIHV0aWxzJDEgPSB7XG4gIGlzQXJyYXksXG4gIGlzQXJyYXlCdWZmZXIsXG4gIGlzQnVmZmVyLFxuICBpc0Zvcm1EYXRhLFxuICBpc0FycmF5QnVmZmVyVmlldyxcbiAgaXNTdHJpbmcsXG4gIGlzTnVtYmVyLFxuICBpc0Jvb2xlYW4sXG4gIGlzT2JqZWN0LFxuICBpc1BsYWluT2JqZWN0LFxuICBpc1VuZGVmaW5lZCxcbiAgaXNEYXRlLFxuICBpc0ZpbGUsXG4gIGlzQmxvYixcbiAgaXNSZWdFeHAsXG4gIGlzRnVuY3Rpb24sXG4gIGlzU3RyZWFtLFxuICBpc1VSTFNlYXJjaFBhcmFtcyxcbiAgaXNUeXBlZEFycmF5LFxuICBpc0ZpbGVMaXN0LFxuICBmb3JFYWNoLFxuICBtZXJnZSxcbiAgZXh0ZW5kLFxuICB0cmltLFxuICBzdHJpcEJPTSxcbiAgaW5oZXJpdHMsXG4gIHRvRmxhdE9iamVjdCxcbiAga2luZE9mLFxuICBraW5kT2ZUZXN0LFxuICBlbmRzV2l0aCxcbiAgdG9BcnJheSxcbiAgZm9yRWFjaEVudHJ5LFxuICBtYXRjaEFsbCxcbiAgaXNIVE1MRm9ybSxcbiAgaGFzT3duUHJvcGVydHksXG4gIGhhc093blByb3A6IGhhc093blByb3BlcnR5LCAvLyBhbiBhbGlhcyB0byBhdm9pZCBFU0xpbnQgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIGRldGVjdGlvblxuICByZWR1Y2VEZXNjcmlwdG9ycyxcbiAgZnJlZXplTWV0aG9kcyxcbiAgdG9PYmplY3RTZXQsXG4gIHRvQ2FtZWxDYXNlLFxuICBub29wLFxuICB0b0Zpbml0ZU51bWJlcixcbiAgZmluZEtleSxcbiAgZ2xvYmFsOiBfZ2xvYmFsLFxuICBpc0NvbnRleHREZWZpbmVkLFxuICBBTFBIQUJFVCxcbiAgZ2VuZXJhdGVTdHJpbmcsXG4gIGlzU3BlY0NvbXBsaWFudEZvcm0sXG4gIHRvSlNPTk9iamVjdCxcbiAgaXNBc3luY0ZuLFxuICBpc1RoZW5hYmxlXG59O1xuXG4vKipcbiAqIENyZWF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSwgY29uZmlnLCBlcnJvciBjb2RlLCByZXF1ZXN0IGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gKiBAcGFyYW0ge09iamVjdH0gW2NvbmZpZ10gVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gKlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xuZnVuY3Rpb24gQXhpb3NFcnJvcihtZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIEVycm9yLmNhbGwodGhpcyk7XG5cbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5zdGFjayA9IChuZXcgRXJyb3IoKSkuc3RhY2s7XG4gIH1cblxuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICB0aGlzLm5hbWUgPSAnQXhpb3NFcnJvcic7XG4gIGNvZGUgJiYgKHRoaXMuY29kZSA9IGNvZGUpO1xuICBjb25maWcgJiYgKHRoaXMuY29uZmlnID0gY29uZmlnKTtcbiAgcmVxdWVzdCAmJiAodGhpcy5yZXF1ZXN0ID0gcmVxdWVzdCk7XG4gIHJlc3BvbnNlICYmICh0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2UpO1xufVxuXG51dGlscyQxLmluaGVyaXRzKEF4aW9zRXJyb3IsIEVycm9yLCB7XG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBTdGFuZGFyZFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgLy8gTWljcm9zb2Z0XG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIG51bWJlcjogdGhpcy5udW1iZXIsXG4gICAgICAvLyBNb3ppbGxhXG4gICAgICBmaWxlTmFtZTogdGhpcy5maWxlTmFtZSxcbiAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlcixcbiAgICAgIGNvbHVtbk51bWJlcjogdGhpcy5jb2x1bW5OdW1iZXIsXG4gICAgICBzdGFjazogdGhpcy5zdGFjayxcbiAgICAgIC8vIEF4aW9zXG4gICAgICBjb25maWc6IHV0aWxzJDEudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxcbiAgICAgIGNvZGU6IHRoaXMuY29kZSxcbiAgICAgIHN0YXR1czogdGhpcy5yZXNwb25zZSAmJiB0aGlzLnJlc3BvbnNlLnN0YXR1cyA/IHRoaXMucmVzcG9uc2Uuc3RhdHVzIDogbnVsbFxuICAgIH07XG4gIH1cbn0pO1xuXG5jb25zdCBwcm90b3R5cGUkMSA9IEF4aW9zRXJyb3IucHJvdG90eXBlO1xuY29uc3QgZGVzY3JpcHRvcnMgPSB7fTtcblxuW1xuICAnRVJSX0JBRF9PUFRJT05fVkFMVUUnLFxuICAnRVJSX0JBRF9PUFRJT04nLFxuICAnRUNPTk5BQk9SVEVEJyxcbiAgJ0VUSU1FRE9VVCcsXG4gICdFUlJfTkVUV09SSycsXG4gICdFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTJyxcbiAgJ0VSUl9ERVBSRUNBVEVEJyxcbiAgJ0VSUl9CQURfUkVTUE9OU0UnLFxuICAnRVJSX0JBRF9SRVFVRVNUJyxcbiAgJ0VSUl9DQU5DRUxFRCcsXG4gICdFUlJfTk9UX1NVUFBPUlQnLFxuICAnRVJSX0lOVkFMSURfVVJMJ1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbl0uZm9yRWFjaChjb2RlID0+IHtcbiAgZGVzY3JpcHRvcnNbY29kZV0gPSB7dmFsdWU6IGNvZGV9O1xufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEF4aW9zRXJyb3IsIGRlc2NyaXB0b3JzKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90b3R5cGUkMSwgJ2lzQXhpb3NFcnJvcicsIHt2YWx1ZTogdHJ1ZX0pO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuQXhpb3NFcnJvci5mcm9tID0gKGVycm9yLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlLCBjdXN0b21Qcm9wcykgPT4ge1xuICBjb25zdCBheGlvc0Vycm9yID0gT2JqZWN0LmNyZWF0ZShwcm90b3R5cGUkMSk7XG5cbiAgdXRpbHMkMS50b0ZsYXRPYmplY3QoZXJyb3IsIGF4aW9zRXJyb3IsIGZ1bmN0aW9uIGZpbHRlcihvYmopIHtcbiAgICByZXR1cm4gb2JqICE9PSBFcnJvci5wcm90b3R5cGU7XG4gIH0sIHByb3AgPT4ge1xuICAgIHJldHVybiBwcm9wICE9PSAnaXNBeGlvc0Vycm9yJztcbiAgfSk7XG5cbiAgQXhpb3NFcnJvci5jYWxsKGF4aW9zRXJyb3IsIGVycm9yLm1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpO1xuXG4gIGF4aW9zRXJyb3IuY2F1c2UgPSBlcnJvcjtcblxuICBheGlvc0Vycm9yLm5hbWUgPSBlcnJvci5uYW1lO1xuXG4gIGN1c3RvbVByb3BzICYmIE9iamVjdC5hc3NpZ24oYXhpb3NFcnJvciwgY3VzdG9tUHJvcHMpO1xuXG4gIHJldHVybiBheGlvc0Vycm9yO1xufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHN0cmljdFxudmFyIGh0dHBBZGFwdGVyID0gbnVsbDtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiB0aGluZyBpcyBhIGFycmF5IG9yIGpzIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGhpbmcgLSBUaGUgb2JqZWN0IG9yIGFycmF5IHRvIGJlIHZpc2l0ZWQuXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVmlzaXRhYmxlKHRoaW5nKSB7XG4gIHJldHVybiB1dGlscyQxLmlzUGxhaW5PYmplY3QodGhpbmcpIHx8IHV0aWxzJDEuaXNBcnJheSh0aGluZyk7XG59XG5cbi8qKlxuICogSXQgcmVtb3ZlcyB0aGUgYnJhY2tldHMgZnJvbSB0aGUgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIHBhcmFtZXRlci5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUga2V5IHdpdGhvdXQgdGhlIGJyYWNrZXRzLlxuICovXG5mdW5jdGlvbiByZW1vdmVCcmFja2V0cyhrZXkpIHtcbiAgcmV0dXJuIHV0aWxzJDEuZW5kc1dpdGgoa2V5LCAnW10nKSA/IGtleS5zbGljZSgwLCAtMikgOiBrZXk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBwYXRoLCBhIGtleSwgYW5kIGEgYm9vbGVhbiwgYW5kIHJldHVybnMgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBjdXJyZW50IGtleS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBjdXJyZW50IG9iamVjdCBiZWluZyBpdGVyYXRlZCBvdmVyLlxuICogQHBhcmFtIHtzdHJpbmd9IGRvdHMgLSBJZiB0cnVlLCB0aGUga2V5IHdpbGwgYmUgcmVuZGVyZWQgd2l0aCBkb3RzIGluc3RlYWQgb2YgYnJhY2tldHMuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHBhdGggdG8gdGhlIGN1cnJlbnQga2V5LlxuICovXG5mdW5jdGlvbiByZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSB7XG4gIGlmICghcGF0aCkgcmV0dXJuIGtleTtcbiAgcmV0dXJuIHBhdGguY29uY2F0KGtleSkubWFwKGZ1bmN0aW9uIGVhY2godG9rZW4sIGkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICB0b2tlbiA9IHJlbW92ZUJyYWNrZXRzKHRva2VuKTtcbiAgICByZXR1cm4gIWRvdHMgJiYgaSA/ICdbJyArIHRva2VuICsgJ10nIDogdG9rZW47XG4gIH0pLmpvaW4oZG90cyA/ICcuJyA6ICcnKTtcbn1cblxuLyoqXG4gKiBJZiB0aGUgYXJyYXkgaXMgYW4gYXJyYXkgYW5kIG5vbmUgb2YgaXRzIGVsZW1lbnRzIGFyZSB2aXNpdGFibGUsIHRoZW4gaXQncyBhIGZsYXQgYXJyYXkuXG4gKlxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcnIgLSBUaGUgYXJyYXkgdG8gY2hlY2tcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNGbGF0QXJyYXkoYXJyKSB7XG4gIHJldHVybiB1dGlscyQxLmlzQXJyYXkoYXJyKSAmJiAhYXJyLnNvbWUoaXNWaXNpdGFibGUpO1xufVxuXG5jb25zdCBwcmVkaWNhdGVzID0gdXRpbHMkMS50b0ZsYXRPYmplY3QodXRpbHMkMSwge30sIG51bGwsIGZ1bmN0aW9uIGZpbHRlcihwcm9wKSB7XG4gIHJldHVybiAvXmlzW0EtWl0vLnRlc3QocHJvcCk7XG59KTtcblxuLyoqXG4gKiBDb252ZXJ0IGEgZGF0YSBvYmplY3QgdG8gRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0gez9PYmplY3R9IFtmb3JtRGF0YV1cbiAqIEBwYXJhbSB7P09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy52aXNpdG9yXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5tZXRhVG9rZW5zID0gdHJ1ZV1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuZG90cyA9IGZhbHNlXVxuICogQHBhcmFtIHs/Qm9vbGVhbn0gW29wdGlvbnMuaW5kZXhlcyA9IGZhbHNlXVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKiovXG5cbi8qKlxuICogSXQgY29udmVydHMgYW4gb2JqZWN0IGludG8gYSBGb3JtRGF0YSBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdDxhbnksIGFueT59IG9iaiAtIFRoZSBvYmplY3QgdG8gY29udmVydCB0byBmb3JtIGRhdGEuXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybURhdGEgLSBUaGUgRm9ybURhdGEgb2JqZWN0IHRvIGFwcGVuZCB0by5cbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zXG4gKi9cbmZ1bmN0aW9uIHRvRm9ybURhdGEob2JqLCBmb3JtRGF0YSwgb3B0aW9ucykge1xuICBpZiAoIXV0aWxzJDEuaXNPYmplY3Qob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3RhcmdldCBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGZvcm1EYXRhID0gZm9ybURhdGEgfHwgbmV3IChGb3JtRGF0YSkoKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgb3B0aW9ucyA9IHV0aWxzJDEudG9GbGF0T2JqZWN0KG9wdGlvbnMsIHtcbiAgICBtZXRhVG9rZW5zOiB0cnVlLFxuICAgIGRvdHM6IGZhbHNlLFxuICAgIGluZGV4ZXM6IGZhbHNlXG4gIH0sIGZhbHNlLCBmdW5jdGlvbiBkZWZpbmVkKG9wdGlvbiwgc291cmNlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gICAgcmV0dXJuICF1dGlscyQxLmlzVW5kZWZpbmVkKHNvdXJjZVtvcHRpb25dKTtcbiAgfSk7XG5cbiAgY29uc3QgbWV0YVRva2VucyA9IG9wdGlvbnMubWV0YVRva2VucztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gIGNvbnN0IHZpc2l0b3IgPSBvcHRpb25zLnZpc2l0b3IgfHwgZGVmYXVsdFZpc2l0b3I7XG4gIGNvbnN0IGRvdHMgPSBvcHRpb25zLmRvdHM7XG4gIGNvbnN0IGluZGV4ZXMgPSBvcHRpb25zLmluZGV4ZXM7XG4gIGNvbnN0IF9CbG9iID0gb3B0aW9ucy5CbG9iIHx8IHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyAmJiBCbG9iO1xuICBjb25zdCB1c2VCbG9iID0gX0Jsb2IgJiYgdXRpbHMkMS5pc1NwZWNDb21wbGlhbnRGb3JtKGZvcm1EYXRhKTtcblxuICBpZiAoIXV0aWxzJDEuaXNGdW5jdGlvbih2aXNpdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3Zpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBmdW5jdGlvbiBjb252ZXJ0VmFsdWUodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiAnJztcblxuICAgIGlmICh1dGlscyQxLmlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b0lTT1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICghdXNlQmxvYiAmJiB1dGlscyQxLmlzQmxvYih2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLicpO1xuICAgIH1cblxuICAgIGlmICh1dGlscyQxLmlzQXJyYXlCdWZmZXIodmFsdWUpIHx8IHV0aWxzJDEuaXNUeXBlZEFycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHVzZUJsb2IgJiYgdHlwZW9mIEJsb2IgPT09ICdmdW5jdGlvbicgPyBuZXcgQmxvYihbdmFsdWVdKSA6IEJ1ZmZlci5mcm9tKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogRGVmYXVsdCB2aXNpdG9yLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0ga2V5XG4gICAqIEBwYXJhbSB7QXJyYXk8U3RyaW5nfE51bWJlcj59IHBhdGhcbiAgICogQHRoaXMge0Zvcm1EYXRhfVxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gcmV0dXJuIHRydWUgdG8gdmlzaXQgdGhlIGVhY2ggcHJvcCBvZiB0aGUgdmFsdWUgcmVjdXJzaXZlbHlcbiAgICovXG4gIGZ1bmN0aW9uIGRlZmF1bHRWaXNpdG9yKHZhbHVlLCBrZXksIHBhdGgpIHtcbiAgICBsZXQgYXJyID0gdmFsdWU7XG5cbiAgICBpZiAodmFsdWUgJiYgIXBhdGggJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHV0aWxzJDEuZW5kc1dpdGgoa2V5LCAne30nKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAga2V5ID0gbWV0YVRva2VucyA/IGtleSA6IGtleS5zbGljZSgwLCAtMik7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICB2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICh1dGlscyQxLmlzQXJyYXkodmFsdWUpICYmIGlzRmxhdEFycmF5KHZhbHVlKSkgfHxcbiAgICAgICAgKCh1dGlscyQxLmlzRmlsZUxpc3QodmFsdWUpIHx8IHV0aWxzJDEuZW5kc1dpdGgoa2V5LCAnW10nKSkgJiYgKGFyciA9IHV0aWxzJDEudG9BcnJheSh2YWx1ZSkpXG4gICAgICAgICkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGtleSA9IHJlbW92ZUJyYWNrZXRzKGtleSk7XG5cbiAgICAgICAgYXJyLmZvckVhY2goZnVuY3Rpb24gZWFjaChlbCwgaW5kZXgpIHtcbiAgICAgICAgICAhKHV0aWxzJDEuaXNVbmRlZmluZWQoZWwpIHx8IGVsID09PSBudWxsKSAmJiBmb3JtRGF0YS5hcHBlbmQoXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmVzdGVkLXRlcm5hcnlcbiAgICAgICAgICAgIGluZGV4ZXMgPT09IHRydWUgPyByZW5kZXJLZXkoW2tleV0sIGluZGV4LCBkb3RzKSA6IChpbmRleGVzID09PSBudWxsID8ga2V5IDoga2V5ICsgJ1tdJyksXG4gICAgICAgICAgICBjb252ZXJ0VmFsdWUoZWwpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNWaXNpdGFibGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQocmVuZGVyS2V5KHBhdGgsIGtleSwgZG90cyksIGNvbnZlcnRWYWx1ZSh2YWx1ZSkpO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgc3RhY2sgPSBbXTtcblxuICBjb25zdCBleHBvc2VkSGVscGVycyA9IE9iamVjdC5hc3NpZ24ocHJlZGljYXRlcywge1xuICAgIGRlZmF1bHRWaXNpdG9yLFxuICAgIGNvbnZlcnRWYWx1ZSxcbiAgICBpc1Zpc2l0YWJsZVxuICB9KTtcblxuICBmdW5jdGlvbiBidWlsZCh2YWx1ZSwgcGF0aCkge1xuICAgIGlmICh1dGlscyQxLmlzVW5kZWZpbmVkKHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgaWYgKHN0YWNrLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0NpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAnICsgcGF0aC5qb2luKCcuJykpO1xuICAgIH1cblxuICAgIHN0YWNrLnB1c2godmFsdWUpO1xuXG4gICAgdXRpbHMkMS5mb3JFYWNoKHZhbHVlLCBmdW5jdGlvbiBlYWNoKGVsLCBrZXkpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9ICEodXRpbHMkMS5pc1VuZGVmaW5lZChlbCkgfHwgZWwgPT09IG51bGwpICYmIHZpc2l0b3IuY2FsbChcbiAgICAgICAgZm9ybURhdGEsIGVsLCB1dGlscyQxLmlzU3RyaW5nKGtleSkgPyBrZXkudHJpbSgpIDoga2V5LCBwYXRoLCBleHBvc2VkSGVscGVyc1xuICAgICAgKTtcblxuICAgICAgaWYgKHJlc3VsdCA9PT0gdHJ1ZSkge1xuICAgICAgICBidWlsZChlbCwgcGF0aCA/IHBhdGguY29uY2F0KGtleSkgOiBba2V5XSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBzdGFjay5wb3AoKTtcbiAgfVxuXG4gIGlmICghdXRpbHMkMS5pc09iamVjdChvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZGF0YSBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgYnVpbGQob2JqKTtcblxuICByZXR1cm4gZm9ybURhdGE7XG59XG5cbi8qKlxuICogSXQgZW5jb2RlcyBhIHN0cmluZyBieSByZXBsYWNpbmcgYWxsIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IGluIHRoZSB1bnJlc2VydmVkIHNldCB3aXRoXG4gKiB0aGVpciBwZXJjZW50LWVuY29kZWQgZXF1aXZhbGVudHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHN0cmluZyB0byBlbmNvZGUuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGVuY29kZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBlbmNvZGUkMShzdHIpIHtcbiAgY29uc3QgY2hhck1hcCA9IHtcbiAgICAnISc6ICclMjEnLFxuICAgIFwiJ1wiOiAnJTI3JyxcbiAgICAnKCc6ICclMjgnLFxuICAgICcpJzogJyUyOScsXG4gICAgJ34nOiAnJTdFJyxcbiAgICAnJTIwJzogJysnLFxuICAgICclMDAnOiAnXFx4MDAnXG4gIH07XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC9bIScoKX5dfCUyMHwlMDAvZywgZnVuY3Rpb24gcmVwbGFjZXIobWF0Y2gpIHtcbiAgICByZXR1cm4gY2hhck1hcFttYXRjaF07XG4gIH0pO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgcGFyYW1zIG9iamVjdCBhbmQgY29udmVydHMgaXQgdG8gYSBGb3JtRGF0YSBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIHRvIGJlIGNvbnZlcnRlZCB0byBhIEZvcm1EYXRhIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdCBwYXNzZWQgdG8gdGhlIEF4aW9zIGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBBeGlvc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMsIG9wdGlvbnMpIHtcbiAgdGhpcy5fcGFpcnMgPSBbXTtcblxuICBwYXJhbXMgJiYgdG9Gb3JtRGF0YShwYXJhbXMsIHRoaXMsIG9wdGlvbnMpO1xufVxuXG5jb25zdCBwcm90b3R5cGUgPSBBeGlvc1VSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGU7XG5cbnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiBhcHBlbmQobmFtZSwgdmFsdWUpIHtcbiAgdGhpcy5fcGFpcnMucHVzaChbbmFtZSwgdmFsdWVdKTtcbn07XG5cbnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKGVuY29kZXIpIHtcbiAgY29uc3QgX2VuY29kZSA9IGVuY29kZXIgPyBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBlbmNvZGVyLmNhbGwodGhpcywgdmFsdWUsIGVuY29kZSQxKTtcbiAgfSA6IGVuY29kZSQxO1xuXG4gIHJldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24gZWFjaChwYWlyKSB7XG4gICAgcmV0dXJuIF9lbmNvZGUocGFpclswXSkgKyAnPScgKyBfZW5jb2RlKHBhaXJbMV0pO1xuICB9LCAnJykuam9pbignJicpO1xufTtcblxuLyoqXG4gKiBJdCByZXBsYWNlcyBhbGwgaW5zdGFuY2VzIG9mIHRoZSBjaGFyYWN0ZXJzIGA6YCwgYCRgLCBgLGAsIGArYCwgYFtgLCBhbmQgYF1gIHdpdGggdGhlaXJcbiAqIFVSSSBlbmNvZGVkIGNvdW50ZXJwYXJ0c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWwgVGhlIHZhbHVlIHRvIGJlIGVuY29kZWQuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGVuY29kZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZSh2YWwpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLlxuICAgIHJlcGxhY2UoLyUzQS9naSwgJzonKS5cbiAgICByZXBsYWNlKC8lMjQvZywgJyQnKS5cbiAgICByZXBsYWNlKC8lMkMvZ2ksICcsJykuXG4gICAgcmVwbGFjZSgvJTIwL2csICcrJykuXG4gICAgcmVwbGFjZSgvJTVCL2dpLCAnWycpLlxuICAgIHJlcGxhY2UoLyU1RC9naSwgJ10nKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIFVSTCBieSBhcHBlbmRpbmcgcGFyYW1zIHRvIHRoZSBlbmRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBiYXNlIG9mIHRoZSB1cmwgKGUuZy4sIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbSlcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBUaGUgcGFyYW1zIHRvIGJlIGFwcGVuZGVkXG4gKiBAcGFyYW0gez9vYmplY3R9IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHVybFxuICovXG5mdW5jdGlvbiBidWlsZFVSTCh1cmwsIHBhcmFtcywgb3B0aW9ucykge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIFxuICBjb25zdCBfZW5jb2RlID0gb3B0aW9ucyAmJiBvcHRpb25zLmVuY29kZSB8fCBlbmNvZGU7XG5cbiAgY29uc3Qgc2VyaWFsaXplRm4gPSBvcHRpb25zICYmIG9wdGlvbnMuc2VyaWFsaXplO1xuXG4gIGxldCBzZXJpYWxpemVkUGFyYW1zO1xuXG4gIGlmIChzZXJpYWxpemVGbikge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBzZXJpYWxpemVGbihwYXJhbXMsIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSB1dGlscyQxLmlzVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykgP1xuICAgICAgcGFyYW1zLnRvU3RyaW5nKCkgOlxuICAgICAgbmV3IEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgb3B0aW9ucykudG9TdHJpbmcoX2VuY29kZSk7XG4gIH1cblxuICBpZiAoc2VyaWFsaXplZFBhcmFtcykge1xuICAgIGNvbnN0IGhhc2htYXJrSW5kZXggPSB1cmwuaW5kZXhPZihcIiNcIik7XG5cbiAgICBpZiAoaGFzaG1hcmtJbmRleCAhPT0gLTEpIHtcbiAgICAgIHVybCA9IHVybC5zbGljZSgwLCBoYXNobWFya0luZGV4KTtcbiAgICB9XG4gICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemVkUGFyYW1zO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn1cblxuY2xhc3MgSW50ZXJjZXB0b3JNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBpbnRlcmNlcHRvciB0byB0aGUgc3RhY2tcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVsZmlsbGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHRoZW5gIGZvciBhIGBQcm9taXNlYFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3RlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGByZWplY3RgIGZvciBhIGBQcm9taXNlYFxuICAgKlxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IEFuIElEIHVzZWQgdG8gcmVtb3ZlIGludGVyY2VwdG9yIGxhdGVyXG4gICAqL1xuICB1c2UoZnVsZmlsbGVkLCByZWplY3RlZCwgb3B0aW9ucykge1xuICAgIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgICBmdWxmaWxsZWQsXG4gICAgICByZWplY3RlZCxcbiAgICAgIHN5bmNocm9ub3VzOiBvcHRpb25zID8gb3B0aW9ucy5zeW5jaHJvbm91cyA6IGZhbHNlLFxuICAgICAgcnVuV2hlbjogb3B0aW9ucyA/IG9wdGlvbnMucnVuV2hlbiA6IG51bGxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBpbnRlcmNlcHRvciBmcm9tIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcGFyYW0ge051bWJlcn0gaWQgVGhlIElEIHRoYXQgd2FzIHJldHVybmVkIGJ5IGB1c2VgXG4gICAqXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIGludGVyY2VwdG9yIHdhcyByZW1vdmVkLCBgZmFsc2VgIG90aGVyd2lzZVxuICAgKi9cbiAgZWplY3QoaWQpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcbiAgICAgIHRoaXMuaGFuZGxlcnNbaWRdID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIGludGVyY2VwdG9ycyBmcm9tIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGNsZWFyKCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXJzKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIHJlZ2lzdGVyZWQgaW50ZXJjZXB0b3JzXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHNraXBwaW5nIG92ZXIgYW55XG4gICAqIGludGVyY2VwdG9ycyB0aGF0IG1heSBoYXZlIGJlY29tZSBgbnVsbGAgY2FsbGluZyBgZWplY3RgLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBpbnRlcmNlcHRvclxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZvckVhY2goZm4pIHtcbiAgICB1dGlscyQxLmZvckVhY2godGhpcy5oYW5kbGVycywgZnVuY3Rpb24gZm9yRWFjaEhhbmRsZXIoaCkge1xuICAgICAgaWYgKGggIT09IG51bGwpIHtcbiAgICAgICAgZm4oaCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxudmFyIHRyYW5zaXRpb25hbERlZmF1bHRzID0ge1xuICBzaWxlbnRKU09OUGFyc2luZzogdHJ1ZSxcbiAgZm9yY2VkSlNPTlBhcnNpbmc6IHRydWUsXG4gIGNsYXJpZnlUaW1lb3V0RXJyb3I6IGZhbHNlXG59O1xuXG52YXIgVVJMU2VhcmNoUGFyYW1zJDEgPSB0eXBlb2YgVVJMU2VhcmNoUGFyYW1zICE9PSAndW5kZWZpbmVkJyA/IFVSTFNlYXJjaFBhcmFtcyA6IEF4aW9zVVJMU2VhcmNoUGFyYW1zO1xuXG52YXIgRm9ybURhdGEkMSA9IHR5cGVvZiBGb3JtRGF0YSAhPT0gJ3VuZGVmaW5lZCcgPyBGb3JtRGF0YSA6IG51bGw7XG5cbnZhciBCbG9iJDEgPSB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgPyBCbG9iIDogbnVsbDtcblxudmFyIHBsYXRmb3JtJDEgPSB7XG4gIGlzQnJvd3NlcjogdHJ1ZSxcbiAgY2xhc3Nlczoge1xuICAgIFVSTFNlYXJjaFBhcmFtczogVVJMU2VhcmNoUGFyYW1zJDEsXG4gICAgRm9ybURhdGE6IEZvcm1EYXRhJDEsXG4gICAgQmxvYjogQmxvYiQxXG4gIH0sXG4gIHByb3RvY29sczogWydodHRwJywgJ2h0dHBzJywgJ2ZpbGUnLCAnYmxvYicsICd1cmwnLCAnZGF0YSddXG59O1xuXG5jb25zdCBoYXNCcm93c2VyRW52ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJztcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBUaGlzIGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyLCBhbmQgcmVhY3QtbmF0aXZlLlxuICogQm90aCBlbnZpcm9ubWVudHMgc3VwcG9ydCBYTUxIdHRwUmVxdWVzdCwgYnV0IG5vdCBmdWxseSBzdGFuZGFyZCBnbG9iYWxzLlxuICpcbiAqIHdlYiB3b3JrZXJzOlxuICogIHR5cGVvZiB3aW5kb3cgLT4gdW5kZWZpbmVkXG4gKiAgdHlwZW9mIGRvY3VtZW50IC0+IHVuZGVmaW5lZFxuICpcbiAqIHJlYWN0LW5hdGl2ZTpcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnUmVhY3ROYXRpdmUnXG4gKiBuYXRpdmVzY3JpcHRcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnTmF0aXZlU2NyaXB0JyBvciAnTlMnXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGhhc1N0YW5kYXJkQnJvd3NlckVudiA9IChcbiAgKHByb2R1Y3QpID0+IHtcbiAgICByZXR1cm4gaGFzQnJvd3NlckVudiAmJiBbJ1JlYWN0TmF0aXZlJywgJ05hdGl2ZVNjcmlwdCcsICdOUyddLmluZGV4T2YocHJvZHVjdCkgPCAwXG4gIH0pKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci5wcm9kdWN0KTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgd2ViV29ya2VyIGVudmlyb25tZW50XG4gKlxuICogQWx0aG91Z2ggdGhlIGBpc1N0YW5kYXJkQnJvd3NlckVudmAgbWV0aG9kIGluZGljYXRlcyB0aGF0XG4gKiBgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXJgLCB0aGUgV2ViV29ya2VyIHdpbGwgc3RpbGwgYmVcbiAqIGZpbHRlcmVkIG91dCBkdWUgdG8gaXRzIGp1ZGdtZW50IHN0YW5kYXJkXG4gKiBgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ2AuXG4gKiBUaGlzIGxlYWRzIHRvIGEgcHJvYmxlbSB3aGVuIGF4aW9zIHBvc3QgYEZvcm1EYXRhYCBpbiB3ZWJXb3JrZXJcbiAqL1xuY29uc3QgaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52ID0gKCgpID0+IHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlICYmXG4gICAgdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cyA9PT0gJ2Z1bmN0aW9uJ1xuICApO1xufSkoKTtcblxudmFyIHV0aWxzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIGhhc0Jyb3dzZXJFbnY6IGhhc0Jyb3dzZXJFbnYsXG4gIGhhc1N0YW5kYXJkQnJvd3NlckVudjogaGFzU3RhbmRhcmRCcm93c2VyRW52LFxuICBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6IGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudlxufSk7XG5cbnZhciBwbGF0Zm9ybSA9IHtcbiAgLi4udXRpbHMsXG4gIC4uLnBsYXRmb3JtJDFcbn07XG5cbmZ1bmN0aW9uIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgb3B0aW9ucykge1xuICByZXR1cm4gdG9Gb3JtRGF0YShkYXRhLCBuZXcgcGxhdGZvcm0uY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMoKSwgT2JqZWN0LmFzc2lnbih7XG4gICAgdmlzaXRvcjogZnVuY3Rpb24odmFsdWUsIGtleSwgcGF0aCwgaGVscGVycykge1xuICAgICAgaWYgKHBsYXRmb3JtLmlzTm9kZSAmJiB1dGlscyQxLmlzQnVmZmVyKHZhbHVlKSkge1xuICAgICAgICB0aGlzLmFwcGVuZChrZXksIHZhbHVlLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGhlbHBlcnMuZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH0sIG9wdGlvbnMpKTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHN0cmluZyBsaWtlIGBmb29beF1beV1bel1gIGFuZCByZXR1cm5zIGFuIGFycmF5IGxpa2UgYFsnZm9vJywgJ3gnLCAneScsICd6J11cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKlxuICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqL1xuZnVuY3Rpb24gcGFyc2VQcm9wUGF0aChuYW1lKSB7XG4gIC8vIGZvb1t4XVt5XVt6XVxuICAvLyBmb28ueC55LnpcbiAgLy8gZm9vLXgteS16XG4gIC8vIGZvbyB4IHkgelxuICByZXR1cm4gdXRpbHMkMS5tYXRjaEFsbCgvXFx3K3xcXFsoXFx3KildL2csIG5hbWUpLm1hcChtYXRjaCA9PiB7XG4gICAgcmV0dXJuIG1hdGNoWzBdID09PSAnW10nID8gJycgOiBtYXRjaFsxXSB8fCBtYXRjaFswXTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ29udmVydCBhbiBhcnJheSB0byBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcnIgLSBUaGUgYXJyYXkgdG8gY29udmVydCB0byBhbiBvYmplY3QuXG4gKlxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggdGhlIHNhbWUga2V5cyBhbmQgdmFsdWVzIGFzIHRoZSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlUb09iamVjdChhcnIpIHtcbiAgY29uc3Qgb2JqID0ge307XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhcnIpO1xuICBsZXQgaTtcbiAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7XG4gIGxldCBrZXk7XG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGtleSA9IGtleXNbaV07XG4gICAgb2JqW2tleV0gPSBhcnJba2V5XTtcbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgRm9ybURhdGEgb2JqZWN0IGFuZCByZXR1cm5zIGEgSmF2YVNjcmlwdCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybURhdGEgVGhlIEZvcm1EYXRhIG9iamVjdCB0byBjb252ZXJ0IHRvIEpTT04uXG4gKlxuICogQHJldHVybnMge09iamVjdDxzdHJpbmcsIGFueT4gfCBudWxsfSBUaGUgY29udmVydGVkIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZm9ybURhdGFUb0pTT04oZm9ybURhdGEpIHtcbiAgZnVuY3Rpb24gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXQsIGluZGV4KSB7XG4gICAgbGV0IG5hbWUgPSBwYXRoW2luZGV4KytdO1xuXG4gICAgaWYgKG5hbWUgPT09ICdfX3Byb3RvX18nKSByZXR1cm4gdHJ1ZTtcblxuICAgIGNvbnN0IGlzTnVtZXJpY0tleSA9IE51bWJlci5pc0Zpbml0ZSgrbmFtZSk7XG4gICAgY29uc3QgaXNMYXN0ID0gaW5kZXggPj0gcGF0aC5sZW5ndGg7XG4gICAgbmFtZSA9ICFuYW1lICYmIHV0aWxzJDEuaXNBcnJheSh0YXJnZXQpID8gdGFyZ2V0Lmxlbmd0aCA6IG5hbWU7XG5cbiAgICBpZiAoaXNMYXN0KSB7XG4gICAgICBpZiAodXRpbHMkMS5oYXNPd25Qcm9wKHRhcmdldCwgbmFtZSkpIHtcbiAgICAgICAgdGFyZ2V0W25hbWVdID0gW3RhcmdldFtuYW1lXSwgdmFsdWVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W25hbWVdID0gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhaXNOdW1lcmljS2V5O1xuICAgIH1cblxuICAgIGlmICghdGFyZ2V0W25hbWVdIHx8ICF1dGlscyQxLmlzT2JqZWN0KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkUGF0aChwYXRoLCB2YWx1ZSwgdGFyZ2V0W25hbWVdLCBpbmRleCk7XG5cbiAgICBpZiAocmVzdWx0ICYmIHV0aWxzJDEuaXNBcnJheSh0YXJnZXRbbmFtZV0pKSB7XG4gICAgICB0YXJnZXRbbmFtZV0gPSBhcnJheVRvT2JqZWN0KHRhcmdldFtuYW1lXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gIH1cblxuICBpZiAodXRpbHMkMS5pc0Zvcm1EYXRhKGZvcm1EYXRhKSAmJiB1dGlscyQxLmlzRnVuY3Rpb24oZm9ybURhdGEuZW50cmllcykpIHtcbiAgICBjb25zdCBvYmogPSB7fTtcblxuICAgIHV0aWxzJDEuZm9yRWFjaEVudHJ5KGZvcm1EYXRhLCAobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgIGJ1aWxkUGF0aChwYXJzZVByb3BQYXRoKG5hbWUpLCB2YWx1ZSwgb2JqLCAwKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHN0cmluZywgdHJpZXMgdG8gcGFyc2UgaXQsIGFuZCBpZiBpdCBmYWlscywgaXQgcmV0dXJucyB0aGUgc3RyaW5naWZpZWQgdmVyc2lvblxuICogb2YgdGhlIGlucHV0XG4gKlxuICogQHBhcmFtIHthbnl9IHJhd1ZhbHVlIC0gVGhlIHZhbHVlIHRvIGJlIHN0cmluZ2lmaWVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyc2VyIC0gQSBmdW5jdGlvbiB0aGF0IHBhcnNlcyBhIHN0cmluZyBpbnRvIGEgSmF2YVNjcmlwdCBvYmplY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlbmNvZGVyIC0gQSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgdmFsdWUgYW5kIHJldHVybnMgYSBzdHJpbmcuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gQSBzdHJpbmdpZmllZCB2ZXJzaW9uIG9mIHRoZSByYXdWYWx1ZS5cbiAqL1xuZnVuY3Rpb24gc3RyaW5naWZ5U2FmZWx5KHJhd1ZhbHVlLCBwYXJzZXIsIGVuY29kZXIpIHtcbiAgaWYgKHV0aWxzJDEuaXNTdHJpbmcocmF3VmFsdWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIChwYXJzZXIgfHwgSlNPTi5wYXJzZSkocmF3VmFsdWUpO1xuICAgICAgcmV0dXJuIHV0aWxzJDEudHJpbShyYXdWYWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUubmFtZSAhPT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoZW5jb2RlciB8fCBKU09OLnN0cmluZ2lmeSkocmF3VmFsdWUpO1xufVxuXG5jb25zdCBkZWZhdWx0cyA9IHtcblxuICB0cmFuc2l0aW9uYWw6IHRyYW5zaXRpb25hbERlZmF1bHRzLFxuXG4gIGFkYXB0ZXI6IFsneGhyJywgJ2h0dHAnXSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSBoZWFkZXJzLmdldENvbnRlbnRUeXBlKCkgfHwgJyc7XG4gICAgY29uc3QgaGFzSlNPTkNvbnRlbnRUeXBlID0gY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24vanNvbicpID4gLTE7XG4gICAgY29uc3QgaXNPYmplY3RQYXlsb2FkID0gdXRpbHMkMS5pc09iamVjdChkYXRhKTtcblxuICAgIGlmIChpc09iamVjdFBheWxvYWQgJiYgdXRpbHMkMS5pc0hUTUxGb3JtKGRhdGEpKSB7XG4gICAgICBkYXRhID0gbmV3IEZvcm1EYXRhKGRhdGEpO1xuICAgIH1cblxuICAgIGNvbnN0IGlzRm9ybURhdGEgPSB1dGlscyQxLmlzRm9ybURhdGEoZGF0YSk7XG5cbiAgICBpZiAoaXNGb3JtRGF0YSkge1xuICAgICAgcmV0dXJuIGhhc0pTT05Db250ZW50VHlwZSA/IEpTT04uc3RyaW5naWZ5KGZvcm1EYXRhVG9KU09OKGRhdGEpKSA6IGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzJDEuaXNBcnJheUJ1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMkMS5pc0J1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMkMS5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMkMS5pc0ZpbGUoZGF0YSkgfHxcbiAgICAgIHV0aWxzJDEuaXNCbG9iKGRhdGEpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgaWYgKHV0aWxzJDEuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICB9XG4gICAgaWYgKHV0aWxzJDEuaXNVUkxTZWFyY2hQYXJhbXMoZGF0YSkpIHtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04JywgZmFsc2UpO1xuICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBsZXQgaXNGaWxlTGlzdDtcblxuICAgIGlmIChpc09iamVjdFBheWxvYWQpIHtcbiAgICAgIGlmIChjb250ZW50VHlwZS5pbmRleE9mKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKSA+IC0xKSB7XG4gICAgICAgIHJldHVybiB0b1VSTEVuY29kZWRGb3JtKGRhdGEsIHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICgoaXNGaWxlTGlzdCA9IHV0aWxzJDEuaXNGaWxlTGlzdChkYXRhKSkgfHwgY29udGVudFR5cGUuaW5kZXhPZignbXVsdGlwYXJ0L2Zvcm0tZGF0YScpID4gLTEpIHtcbiAgICAgICAgY29uc3QgX0Zvcm1EYXRhID0gdGhpcy5lbnYgJiYgdGhpcy5lbnYuRm9ybURhdGE7XG5cbiAgICAgICAgcmV0dXJuIHRvRm9ybURhdGEoXG4gICAgICAgICAgaXNGaWxlTGlzdCA/IHsnZmlsZXNbXSc6IGRhdGF9IDogZGF0YSxcbiAgICAgICAgICBfRm9ybURhdGEgJiYgbmV3IF9Gb3JtRGF0YSgpLFxuICAgICAgICAgIHRoaXMuZm9ybVNlcmlhbGl6ZXJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkIHx8IGhhc0pTT05Db250ZW50VHlwZSApIHtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL2pzb24nLCBmYWxzZSk7XG4gICAgICByZXR1cm4gc3RyaW5naWZ5U2FmZWx5KGRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICB0cmFuc2Zvcm1SZXNwb25zZTogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlKGRhdGEpIHtcbiAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSB0aGlzLnRyYW5zaXRpb25hbCB8fCBkZWZhdWx0cy50cmFuc2l0aW9uYWw7XG4gICAgY29uc3QgZm9yY2VkSlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLmZvcmNlZEpTT05QYXJzaW5nO1xuICAgIGNvbnN0IEpTT05SZXF1ZXN0ZWQgPSB0aGlzLnJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nO1xuXG4gICAgaWYgKGRhdGEgJiYgdXRpbHMkMS5pc1N0cmluZyhkYXRhKSAmJiAoKGZvcmNlZEpTT05QYXJzaW5nICYmICF0aGlzLnJlc3BvbnNlVHlwZSkgfHwgSlNPTlJlcXVlc3RlZCkpIHtcbiAgICAgIGNvbnN0IHNpbGVudEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5zaWxlbnRKU09OUGFyc2luZztcbiAgICAgIGNvbnN0IHN0cmljdEpTT05QYXJzaW5nID0gIXNpbGVudEpTT05QYXJzaW5nICYmIEpTT05SZXF1ZXN0ZWQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoc3RyaWN0SlNPTlBhcnNpbmcpIHtcbiAgICAgICAgICBpZiAoZS5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZSwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLCB0aGlzLCBudWxsLCB0aGlzLnJlc3BvbnNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICAvKipcbiAgICogQSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBhYm9ydCBhIHJlcXVlc3QuIElmIHNldCB0byAwIChkZWZhdWx0KSBhXG4gICAqIHRpbWVvdXQgaXMgbm90IGNyZWF0ZWQuXG4gICAqL1xuICB0aW1lb3V0OiAwLFxuXG4gIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXG4gIHhzcmZIZWFkZXJOYW1lOiAnWC1YU1JGLVRPS0VOJyxcblxuICBtYXhDb250ZW50TGVuZ3RoOiAtMSxcbiAgbWF4Qm9keUxlbmd0aDogLTEsXG5cbiAgZW52OiB7XG4gICAgRm9ybURhdGE6IHBsYXRmb3JtLmNsYXNzZXMuRm9ybURhdGEsXG4gICAgQmxvYjogcGxhdGZvcm0uY2xhc3Nlcy5CbG9iXG4gIH0sXG5cbiAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgfSxcblxuICBoZWFkZXJzOiB7XG4gICAgY29tbW9uOiB7XG4gICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKicsXG4gICAgICAnQ29udGVudC1UeXBlJzogdW5kZWZpbmVkXG4gICAgfVxuICB9XG59O1xuXG51dGlscyQxLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgKG1ldGhvZCkgPT4ge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB7fTtcbn0pO1xuXG52YXIgZGVmYXVsdHMkMSA9IGRlZmF1bHRzO1xuXG4vLyBSYXdBeGlvc0hlYWRlcnMgd2hvc2UgZHVwbGljYXRlcyBhcmUgaWdub3JlZCBieSBub2RlXG4vLyBjLmYuIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfbWVzc2FnZV9oZWFkZXJzXG5jb25zdCBpZ25vcmVEdXBsaWNhdGVPZiA9IHV0aWxzJDEudG9PYmplY3RTZXQoW1xuICAnYWdlJywgJ2F1dGhvcml6YXRpb24nLCAnY29udGVudC1sZW5ndGgnLCAnY29udGVudC10eXBlJywgJ2V0YWcnLFxuICAnZXhwaXJlcycsICdmcm9tJywgJ2hvc3QnLCAnaWYtbW9kaWZpZWQtc2luY2UnLCAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdsYXN0LW1vZGlmaWVkJywgJ2xvY2F0aW9uJywgJ21heC1mb3J3YXJkcycsICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLCAncmV0cnktYWZ0ZXInLCAndXNlci1hZ2VudCdcbl0pO1xuXG4vKipcbiAqIFBhcnNlIGhlYWRlcnMgaW50byBhbiBvYmplY3RcbiAqXG4gKiBgYGBcbiAqIERhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMDg6NTg6NDkgR01UXG4gKiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cbiAqIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAqIFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcmF3SGVhZGVycyBIZWFkZXJzIG5lZWRpbmcgdG8gYmUgcGFyc2VkXG4gKlxuICogQHJldHVybnMge09iamVjdH0gSGVhZGVycyBwYXJzZWQgaW50byBhbiBvYmplY3RcbiAqL1xudmFyIHBhcnNlSGVhZGVycyA9IHJhd0hlYWRlcnMgPT4ge1xuICBjb25zdCBwYXJzZWQgPSB7fTtcbiAgbGV0IGtleTtcbiAgbGV0IHZhbDtcbiAgbGV0IGk7XG5cbiAgcmF3SGVhZGVycyAmJiByYXdIZWFkZXJzLnNwbGl0KCdcXG4nKS5mb3JFYWNoKGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IGxpbmUuc3Vic3RyaW5nKDAsIGkpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbCA9IGxpbmUuc3Vic3RyaW5nKGkgKyAxKS50cmltKCk7XG5cbiAgICBpZiAoIWtleSB8fCAocGFyc2VkW2tleV0gJiYgaWdub3JlRHVwbGljYXRlT2Zba2V5XSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIGlmIChwYXJzZWRba2V5XSkge1xuICAgICAgICBwYXJzZWRba2V5XS5wdXNoKHZhbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IFt2YWxdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG5cbmNvbnN0ICRpbnRlcm5hbHMgPSBTeW1ib2woJ2ludGVybmFscycpO1xuXG5mdW5jdGlvbiBub3JtYWxpemVIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXIgJiYgU3RyaW5nKGhlYWRlcikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gZmFsc2UgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB1dGlscyQxLmlzQXJyYXkodmFsdWUpID8gdmFsdWUubWFwKG5vcm1hbGl6ZVZhbHVlKSA6IFN0cmluZyh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVG9rZW5zKHN0cikge1xuICBjb25zdCB0b2tlbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBjb25zdCB0b2tlbnNSRSA9IC8oW15cXHMsOz1dKylcXHMqKD86PVxccyooW14sO10rKSk/L2c7XG4gIGxldCBtYXRjaDtcblxuICB3aGlsZSAoKG1hdGNoID0gdG9rZW5zUkUuZXhlYyhzdHIpKSkge1xuICAgIHRva2Vuc1ttYXRjaFsxXV0gPSBtYXRjaFsyXTtcbiAgfVxuXG4gIHJldHVybiB0b2tlbnM7XG59XG5cbmNvbnN0IGlzVmFsaWRIZWFkZXJOYW1lID0gKHN0cikgPT4gL15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChzdHIudHJpbSgpKTtcblxuZnVuY3Rpb24gbWF0Y2hIZWFkZXJWYWx1ZShjb250ZXh0LCB2YWx1ZSwgaGVhZGVyLCBmaWx0ZXIsIGlzSGVhZGVyTmFtZUZpbHRlcikge1xuICBpZiAodXRpbHMkMS5pc0Z1bmN0aW9uKGZpbHRlcikpIHtcbiAgICByZXR1cm4gZmlsdGVyLmNhbGwodGhpcywgdmFsdWUsIGhlYWRlcik7XG4gIH1cblxuICBpZiAoaXNIZWFkZXJOYW1lRmlsdGVyKSB7XG4gICAgdmFsdWUgPSBoZWFkZXI7XG4gIH1cblxuICBpZiAoIXV0aWxzJDEuaXNTdHJpbmcodmFsdWUpKSByZXR1cm47XG5cbiAgaWYgKHV0aWxzJDEuaXNTdHJpbmcoZmlsdGVyKSkge1xuICAgIHJldHVybiB2YWx1ZS5pbmRleE9mKGZpbHRlcikgIT09IC0xO1xuICB9XG5cbiAgaWYgKHV0aWxzJDEuaXNSZWdFeHAoZmlsdGVyKSkge1xuICAgIHJldHVybiBmaWx0ZXIudGVzdCh2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0SGVhZGVyKGhlYWRlcikge1xuICByZXR1cm4gaGVhZGVyLnRyaW0oKVxuICAgIC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywgKHcsIGNoYXIsIHN0cikgPT4ge1xuICAgICAgcmV0dXJuIGNoYXIudG9VcHBlckNhc2UoKSArIHN0cjtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBY2Nlc3NvcnMob2JqLCBoZWFkZXIpIHtcbiAgY29uc3QgYWNjZXNzb3JOYW1lID0gdXRpbHMkMS50b0NhbWVsQ2FzZSgnICcgKyBoZWFkZXIpO1xuXG4gIFsnZ2V0JywgJ3NldCcsICdoYXMnXS5mb3JFYWNoKG1ldGhvZE5hbWUgPT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIG1ldGhvZE5hbWUgKyBhY2Nlc3Nvck5hbWUsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbihhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZE5hbWVdLmNhbGwodGhpcywgaGVhZGVyLCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgICAgIH0sXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNsYXNzIEF4aW9zSGVhZGVycyB7XG4gIGNvbnN0cnVjdG9yKGhlYWRlcnMpIHtcbiAgICBoZWFkZXJzICYmIHRoaXMuc2V0KGhlYWRlcnMpO1xuICB9XG5cbiAgc2V0KGhlYWRlciwgdmFsdWVPclJld3JpdGUsIHJld3JpdGUpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIHNldEhlYWRlcihfdmFsdWUsIF9oZWFkZXIsIF9yZXdyaXRlKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWxIZWFkZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkoc2VsZiwgbEhlYWRlcik7XG5cbiAgICAgIGlmKCFrZXkgfHwgc2VsZltrZXldID09PSB1bmRlZmluZWQgfHwgX3Jld3JpdGUgPT09IHRydWUgfHwgKF9yZXdyaXRlID09PSB1bmRlZmluZWQgJiYgc2VsZltrZXldICE9PSBmYWxzZSkpIHtcbiAgICAgICAgc2VsZltrZXkgfHwgX2hlYWRlcl0gPSBub3JtYWxpemVWYWx1ZShfdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNldEhlYWRlcnMgPSAoaGVhZGVycywgX3Jld3JpdGUpID0+XG4gICAgICB1dGlscyQxLmZvckVhY2goaGVhZGVycywgKF92YWx1ZSwgX2hlYWRlcikgPT4gc2V0SGVhZGVyKF92YWx1ZSwgX2hlYWRlciwgX3Jld3JpdGUpKTtcblxuICAgIGlmICh1dGlscyQxLmlzUGxhaW5PYmplY3QoaGVhZGVyKSB8fCBoZWFkZXIgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKSB7XG4gICAgICBzZXRIZWFkZXJzKGhlYWRlciwgdmFsdWVPclJld3JpdGUpO1xuICAgIH0gZWxzZSBpZih1dGlscyQxLmlzU3RyaW5nKGhlYWRlcikgJiYgKGhlYWRlciA9IGhlYWRlci50cmltKCkpICYmICFpc1ZhbGlkSGVhZGVyTmFtZShoZWFkZXIpKSB7XG4gICAgICBzZXRIZWFkZXJzKHBhcnNlSGVhZGVycyhoZWFkZXIpLCB2YWx1ZU9yUmV3cml0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWRlciAhPSBudWxsICYmIHNldEhlYWRlcih2YWx1ZU9yUmV3cml0ZSwgaGVhZGVyLCByZXdyaXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldChoZWFkZXIsIHBhcnNlcikge1xuICAgIGhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpO1xuXG4gICAgaWYgKGhlYWRlcikge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMkMS5maW5kS2V5KHRoaXMsIGhlYWRlcik7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW2tleV07XG5cbiAgICAgICAgaWYgKCFwYXJzZXIpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyc2VyID09PSB0cnVlKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlVG9rZW5zKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1dGlscyQxLmlzRnVuY3Rpb24ocGFyc2VyKSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZXIuY2FsbCh0aGlzLCB2YWx1ZSwga2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1dGlscyQxLmlzUmVnRXhwKHBhcnNlcikpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLmV4ZWModmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYXMoaGVhZGVyLCBtYXRjaGVyKSB7XG4gICAgaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKGhlYWRlcik7XG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkodGhpcywgaGVhZGVyKTtcblxuICAgICAgcmV0dXJuICEhKGtleSAmJiB0aGlzW2tleV0gIT09IHVuZGVmaW5lZCAmJiAoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZSh0aGlzLCB0aGlzW2tleV0sIGtleSwgbWF0Y2hlcikpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBkZWxldGUoaGVhZGVyLCBtYXRjaGVyKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgbGV0IGRlbGV0ZWQgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIGRlbGV0ZUhlYWRlcihfaGVhZGVyKSB7XG4gICAgICBfaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoX2hlYWRlcikge1xuICAgICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkoc2VsZiwgX2hlYWRlcik7XG5cbiAgICAgICAgaWYgKGtleSAmJiAoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZShzZWxmLCBzZWxmW2tleV0sIGtleSwgbWF0Y2hlcikpKSB7XG4gICAgICAgICAgZGVsZXRlIHNlbGZba2V5XTtcblxuICAgICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzJDEuaXNBcnJheShoZWFkZXIpKSB7XG4gICAgICBoZWFkZXIuZm9yRWFjaChkZWxldGVIZWFkZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGVIZWFkZXIoaGVhZGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZDtcbiAgfVxuXG4gIGNsZWFyKG1hdGNoZXIpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcyk7XG4gICAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuXG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgIGlmKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUodGhpcywgdGhpc1trZXldLCBrZXksIG1hdGNoZXIsIHRydWUpKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzW2tleV07XG4gICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgbm9ybWFsaXplKGZvcm1hdCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcblxuICAgIHV0aWxzJDEuZm9yRWFjaCh0aGlzLCAodmFsdWUsIGhlYWRlcikgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMkMS5maW5kS2V5KGhlYWRlcnMsIGhlYWRlcik7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgc2VsZltrZXldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuICAgICAgICBkZWxldGUgc2VsZltoZWFkZXJdO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBmb3JtYXQgPyBmb3JtYXRIZWFkZXIoaGVhZGVyKSA6IFN0cmluZyhoZWFkZXIpLnRyaW0oKTtcblxuICAgICAgaWYgKG5vcm1hbGl6ZWQgIT09IGhlYWRlcikge1xuICAgICAgICBkZWxldGUgc2VsZltoZWFkZXJdO1xuICAgICAgfVxuXG4gICAgICBzZWxmW25vcm1hbGl6ZWRdID0gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuXG4gICAgICBoZWFkZXJzW25vcm1hbGl6ZWRdID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgY29uY2F0KC4uLnRhcmdldHMpIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywgLi4udGFyZ2V0cyk7XG4gIH1cblxuICB0b0pTT04oYXNTdHJpbmdzKSB7XG4gICAgY29uc3Qgb2JqID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIHV0aWxzJDEuZm9yRWFjaCh0aGlzLCAodmFsdWUsIGhlYWRlcikgPT4ge1xuICAgICAgdmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gZmFsc2UgJiYgKG9ialtoZWFkZXJdID0gYXNTdHJpbmdzICYmIHV0aWxzJDEuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5qb2luKCcsICcpIDogdmFsdWUpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbaGVhZGVyLCB2YWx1ZV0pID0+IGhlYWRlciArICc6ICcgKyB2YWx1ZSkuam9pbignXFxuJyk7XG4gIH1cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdBeGlvc0hlYWRlcnMnO1xuICB9XG5cbiAgc3RhdGljIGZyb20odGhpbmcpIHtcbiAgICByZXR1cm4gdGhpbmcgaW5zdGFuY2VvZiB0aGlzID8gdGhpbmcgOiBuZXcgdGhpcyh0aGluZyk7XG4gIH1cblxuICBzdGF0aWMgY29uY2F0KGZpcnN0LCAuLi50YXJnZXRzKSB7XG4gICAgY29uc3QgY29tcHV0ZWQgPSBuZXcgdGhpcyhmaXJzdCk7XG5cbiAgICB0YXJnZXRzLmZvckVhY2goKHRhcmdldCkgPT4gY29tcHV0ZWQuc2V0KHRhcmdldCkpO1xuXG4gICAgcmV0dXJuIGNvbXB1dGVkO1xuICB9XG5cbiAgc3RhdGljIGFjY2Vzc29yKGhlYWRlcikge1xuICAgIGNvbnN0IGludGVybmFscyA9IHRoaXNbJGludGVybmFsc10gPSAodGhpc1skaW50ZXJuYWxzXSA9IHtcbiAgICAgIGFjY2Vzc29yczoge31cbiAgICB9KTtcblxuICAgIGNvbnN0IGFjY2Vzc29ycyA9IGludGVybmFscy5hY2Nlc3NvcnM7XG4gICAgY29uc3QgcHJvdG90eXBlID0gdGhpcy5wcm90b3R5cGU7XG5cbiAgICBmdW5jdGlvbiBkZWZpbmVBY2Nlc3NvcihfaGVhZGVyKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWFjY2Vzc29yc1tsSGVhZGVyXSkge1xuICAgICAgICBidWlsZEFjY2Vzc29ycyhwcm90b3R5cGUsIF9oZWFkZXIpO1xuICAgICAgICBhY2Nlc3NvcnNbbEhlYWRlcl0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHV0aWxzJDEuaXNBcnJheShoZWFkZXIpID8gaGVhZGVyLmZvckVhY2goZGVmaW5lQWNjZXNzb3IpIDogZGVmaW5lQWNjZXNzb3IoaGVhZGVyKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbkF4aW9zSGVhZGVycy5hY2Nlc3NvcihbJ0NvbnRlbnQtVHlwZScsICdDb250ZW50LUxlbmd0aCcsICdBY2NlcHQnLCAnQWNjZXB0LUVuY29kaW5nJywgJ1VzZXItQWdlbnQnLCAnQXV0aG9yaXphdGlvbiddKTtcblxuLy8gcmVzZXJ2ZWQgbmFtZXMgaG90Zml4XG51dGlscyQxLnJlZHVjZURlc2NyaXB0b3JzKEF4aW9zSGVhZGVycy5wcm90b3R5cGUsICh7dmFsdWV9LCBrZXkpID0+IHtcbiAgbGV0IG1hcHBlZCA9IGtleVswXS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpOyAvLyBtYXAgYHNldGAgPT4gYFNldGBcbiAgcmV0dXJuIHtcbiAgICBnZXQ6ICgpID0+IHZhbHVlLFxuICAgIHNldChoZWFkZXJWYWx1ZSkge1xuICAgICAgdGhpc1ttYXBwZWRdID0gaGVhZGVyVmFsdWU7XG4gICAgfVxuICB9XG59KTtcblxudXRpbHMkMS5mcmVlemVNZXRob2RzKEF4aW9zSGVhZGVycyk7XG5cbnZhciBBeGlvc0hlYWRlcnMkMSA9IEF4aW9zSGVhZGVycztcblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBvciBhIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIHtBcnJheXxGdW5jdGlvbn0gZm5zIEEgc2luZ2xlIGZ1bmN0aW9uIG9yIEFycmF5IG9mIGZ1bmN0aW9uc1xuICogQHBhcmFtIHs/T2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2Ugb2JqZWN0XG4gKlxuICogQHJldHVybnMgeyp9IFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgZGF0YVxuICovXG5mdW5jdGlvbiB0cmFuc2Zvcm1EYXRhKGZucywgcmVzcG9uc2UpIHtcbiAgY29uc3QgY29uZmlnID0gdGhpcyB8fCBkZWZhdWx0cyQxO1xuICBjb25zdCBjb250ZXh0ID0gcmVzcG9uc2UgfHwgY29uZmlnO1xuICBjb25zdCBoZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShjb250ZXh0LmhlYWRlcnMpO1xuICBsZXQgZGF0YSA9IGNvbnRleHQuZGF0YTtcblxuICB1dGlscyQxLmZvckVhY2goZm5zLCBmdW5jdGlvbiB0cmFuc2Zvcm0oZm4pIHtcbiAgICBkYXRhID0gZm4uY2FsbChjb25maWcsIGRhdGEsIGhlYWRlcnMubm9ybWFsaXplKCksIHJlc3BvbnNlID8gcmVzcG9uc2Uuc3RhdHVzIDogdW5kZWZpbmVkKTtcbiAgfSk7XG5cbiAgaGVhZGVycy5ub3JtYWxpemUoKTtcblxuICByZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gaXNDYW5jZWwodmFsdWUpIHtcbiAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl9fQ0FOQ0VMX18pO1xufVxuXG4vKipcbiAqIEEgYENhbmNlbGVkRXJyb3JgIGlzIGFuIG9iamVjdCB0aGF0IGlzIHRocm93biB3aGVuIGFuIG9wZXJhdGlvbiBpcyBjYW5jZWxlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZz19IG1lc3NhZ2UgVGhlIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge09iamVjdD19IGNvbmZpZyBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtPYmplY3Q9fSByZXF1ZXN0IFRoZSByZXF1ZXN0LlxuICpcbiAqIEByZXR1cm5zIHtDYW5jZWxlZEVycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsZWRFcnJvcihtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gIEF4aW9zRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlID09IG51bGwgPyAnY2FuY2VsZWQnIDogbWVzc2FnZSwgQXhpb3NFcnJvci5FUlJfQ0FOQ0VMRUQsIGNvbmZpZywgcmVxdWVzdCk7XG4gIHRoaXMubmFtZSA9ICdDYW5jZWxlZEVycm9yJztcbn1cblxudXRpbHMkMS5pbmhlcml0cyhDYW5jZWxlZEVycm9yLCBBeGlvc0Vycm9yLCB7XG4gIF9fQ0FOQ0VMX186IHRydWVcbn0pO1xuXG4vKipcbiAqIFJlc29sdmUgb3IgcmVqZWN0IGEgUHJvbWlzZSBiYXNlZCBvbiByZXNwb25zZSBzdGF0dXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZSBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3QgQSBmdW5jdGlvbiB0aGF0IHJlamVjdHMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSByZXNwb25zZS5cbiAqL1xuZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpIHtcbiAgY29uc3QgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIFtBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKHJlc3BvbnNlLnN0YXR1cyAvIDEwMCkgLSA0XSxcbiAgICAgIHJlc3BvbnNlLmNvbmZpZyxcbiAgICAgIHJlc3BvbnNlLnJlcXVlc3QsXG4gICAgICByZXNwb25zZVxuICAgICkpO1xuICB9XG59XG5cbnZhciBjb29raWVzID0gcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52ID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgc3VwcG9ydCBkb2N1bWVudC5jb29raWVcbiAge1xuICAgIHdyaXRlKG5hbWUsIHZhbHVlLCBleHBpcmVzLCBwYXRoLCBkb21haW4sIHNlY3VyZSkge1xuICAgICAgY29uc3QgY29va2llID0gW25hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpXTtcblxuICAgICAgdXRpbHMkMS5pc051bWJlcihleHBpcmVzKSAmJiBjb29raWUucHVzaCgnZXhwaXJlcz0nICsgbmV3IERhdGUoZXhwaXJlcykudG9HTVRTdHJpbmcoKSk7XG5cbiAgICAgIHV0aWxzJDEuaXNTdHJpbmcocGF0aCkgJiYgY29va2llLnB1c2goJ3BhdGg9JyArIHBhdGgpO1xuXG4gICAgICB1dGlscyQxLmlzU3RyaW5nKGRvbWFpbikgJiYgY29va2llLnB1c2goJ2RvbWFpbj0nICsgZG9tYWluKTtcblxuICAgICAgc2VjdXJlID09PSB0cnVlICYmIGNvb2tpZS5wdXNoKCdzZWN1cmUnKTtcblxuICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llLmpvaW4oJzsgJyk7XG4gICAgfSxcblxuICAgIHJlYWQobmFtZSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58O1xcXFxzKikoJyArIG5hbWUgKyAnKT0oW147XSopJykpO1xuICAgICAgcmV0dXJuIChtYXRjaCA/IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFszXSkgOiBudWxsKTtcbiAgICB9LFxuXG4gICAgcmVtb3ZlKG5hbWUpIHtcbiAgICAgIHRoaXMud3JpdGUobmFtZSwgJycsIERhdGUubm93KCkgLSA4NjQwMDAwMCk7XG4gICAgfVxuICB9XG5cbiAgOlxuXG4gIC8vIE5vbi1zdGFuZGFyZCBicm93c2VyIGVudiAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAge1xuICAgIHdyaXRlKCkge30sXG4gICAgcmVhZCgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgcmVtb3ZlKCkge31cbiAgfTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBYnNvbHV0ZVVSTCh1cmwpIHtcbiAgLy8gQSBVUkwgaXMgY29uc2lkZXJlZCBhYnNvbHV0ZSBpZiBpdCBiZWdpbnMgd2l0aCBcIjxzY2hlbWU+Oi8vXCIgb3IgXCIvL1wiIChwcm90b2NvbC1yZWxhdGl2ZSBVUkwpLlxuICAvLyBSRkMgMzk4NiBkZWZpbmVzIHNjaGVtZSBuYW1lIGFzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBiZWdpbm5pbmcgd2l0aCBhIGxldHRlciBhbmQgZm9sbG93ZWRcbiAgLy8gYnkgYW55IGNvbWJpbmF0aW9uIG9mIGxldHRlcnMsIGRpZ2l0cywgcGx1cywgcGVyaW9kLCBvciBoeXBoZW4uXG4gIHJldHVybiAvXihbYS16XVthLXpcXGQrXFwtLl0qOik/XFwvXFwvL2kudGVzdCh1cmwpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgc3BlY2lmaWVkIFVSTHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGl2ZVVSTCBUaGUgcmVsYXRpdmUgVVJMXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIFVSTFxuICovXG5mdW5jdGlvbiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZWxhdGl2ZVVSTCkge1xuICByZXR1cm4gcmVsYXRpdmVVUkxcbiAgICA/IGJhc2VVUkwucmVwbGFjZSgvXFwvP1xcLyQvLCAnJykgKyAnLycgKyByZWxhdGl2ZVVSTC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgIDogYmFzZVVSTDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIGJhc2VVUkwgd2l0aCB0aGUgcmVxdWVzdGVkVVJMLFxuICogb25seSB3aGVuIHRoZSByZXF1ZXN0ZWRVUkwgaXMgbm90IGFscmVhZHkgYW4gYWJzb2x1dGUgVVJMLlxuICogSWYgdGhlIHJlcXVlc3RVUkwgaXMgYWJzb2x1dGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVxdWVzdGVkVVJMIHVudG91Y2hlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0ZWRVUkwgQWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGNvbWJpbmVcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgZnVsbCBwYXRoXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkRnVsbFBhdGgoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKSB7XG4gIGlmIChiYXNlVVJMICYmICFpc0Fic29sdXRlVVJMKHJlcXVlc3RlZFVSTCkpIHtcbiAgICByZXR1cm4gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdGVkVVJMO1xufVxuXG52YXIgaXNVUkxTYW1lT3JpZ2luID0gcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52ID9cblxuLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIGhhdmUgZnVsbCBzdXBwb3J0IG9mIHRoZSBBUElzIG5lZWRlZCB0byB0ZXN0XG4vLyB3aGV0aGVyIHRoZSByZXF1ZXN0IFVSTCBpcyBvZiB0aGUgc2FtZSBvcmlnaW4gYXMgY3VycmVudCBsb2NhdGlvbi5cbiAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICBjb25zdCBtc2llID0gLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICBjb25zdCB1cmxQYXJzaW5nTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBsZXQgb3JpZ2luVVJMO1xuXG4gICAgLyoqXG4gICAgKiBQYXJzZSBhIFVSTCB0byBkaXNjb3ZlciBpdHMgY29tcG9uZW50c1xuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIFVSTCB0byBiZSBwYXJzZWRcbiAgICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAgKi9cbiAgICBmdW5jdGlvbiByZXNvbHZlVVJMKHVybCkge1xuICAgICAgbGV0IGhyZWYgPSB1cmw7XG5cbiAgICAgIGlmIChtc2llKSB7XG4gICAgICAgIC8vIElFIG5lZWRzIGF0dHJpYnV0ZSBzZXQgdHdpY2UgdG8gbm9ybWFsaXplIHByb3BlcnRpZXNcbiAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG4gICAgICAgIGhyZWYgPSB1cmxQYXJzaW5nTm9kZS5ocmVmO1xuICAgICAgfVxuXG4gICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcblxuICAgICAgLy8gdXJsUGFyc2luZ05vZGUgcHJvdmlkZXMgdGhlIFVybFV0aWxzIGludGVyZmFjZSAtIGh0dHA6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmx1dGlsc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaHJlZjogdXJsUGFyc2luZ05vZGUuaHJlZixcbiAgICAgICAgcHJvdG9jb2w6IHVybFBhcnNpbmdOb2RlLnByb3RvY29sID8gdXJsUGFyc2luZ05vZGUucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJykgOiAnJyxcbiAgICAgICAgaG9zdDogdXJsUGFyc2luZ05vZGUuaG9zdCxcbiAgICAgICAgc2VhcmNoOiB1cmxQYXJzaW5nTm9kZS5zZWFyY2ggPyB1cmxQYXJzaW5nTm9kZS5zZWFyY2gucmVwbGFjZSgvXlxcPy8sICcnKSA6ICcnLFxuICAgICAgICBoYXNoOiB1cmxQYXJzaW5nTm9kZS5oYXNoID8gdXJsUGFyc2luZ05vZGUuaGFzaC5yZXBsYWNlKC9eIy8sICcnKSA6ICcnLFxuICAgICAgICBob3N0bmFtZTogdXJsUGFyc2luZ05vZGUuaG9zdG5hbWUsXG4gICAgICAgIHBvcnQ6IHVybFBhcnNpbmdOb2RlLnBvcnQsXG4gICAgICAgIHBhdGhuYW1lOiAodXJsUGFyc2luZ05vZGUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpID9cbiAgICAgICAgICB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZSA6XG4gICAgICAgICAgJy8nICsgdXJsUGFyc2luZ05vZGUucGF0aG5hbWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgb3JpZ2luVVJMID0gcmVzb2x2ZVVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG5cbiAgICAvKipcbiAgICAqIERldGVybWluZSBpZiBhIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBjdXJyZW50IGxvY2F0aW9uXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHJlcXVlc3RVUkwgVGhlIFVSTCB0byB0ZXN0XG4gICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiwgb3RoZXJ3aXNlIGZhbHNlXG4gICAgKi9cbiAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKHJlcXVlc3RVUkwpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9ICh1dGlscyQxLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgcmV0dXJuIChwYXJzZWQucHJvdG9jb2wgPT09IG9yaWdpblVSTC5wcm90b2NvbCAmJlxuICAgICAgICAgIHBhcnNlZC5ob3N0ID09PSBvcmlnaW5VUkwuaG9zdCk7XG4gICAgfTtcbiAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52cyAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgfSkoKTtcblxuZnVuY3Rpb24gcGFyc2VQcm90b2NvbCh1cmwpIHtcbiAgY29uc3QgbWF0Y2ggPSAvXihbLStcXHddezEsMjV9KSg6P1xcL1xcL3w6KS8uZXhlYyh1cmwpO1xuICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIGRhdGEgbWF4UmF0ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtzYW1wbGVzQ291bnQ9IDEwXVxuICogQHBhcmFtIHtOdW1iZXJ9IFttaW49IDEwMDBdXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHNwZWVkb21ldGVyKHNhbXBsZXNDb3VudCwgbWluKSB7XG4gIHNhbXBsZXNDb3VudCA9IHNhbXBsZXNDb3VudCB8fCAxMDtcbiAgY29uc3QgYnl0ZXMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgY29uc3QgdGltZXN0YW1wcyA9IG5ldyBBcnJheShzYW1wbGVzQ291bnQpO1xuICBsZXQgaGVhZCA9IDA7XG4gIGxldCB0YWlsID0gMDtcbiAgbGV0IGZpcnN0U2FtcGxlVFM7XG5cbiAgbWluID0gbWluICE9PSB1bmRlZmluZWQgPyBtaW4gOiAxMDAwO1xuXG4gIHJldHVybiBmdW5jdGlvbiBwdXNoKGNodW5rTGVuZ3RoKSB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IHRpbWVzdGFtcHNbdGFpbF07XG5cbiAgICBpZiAoIWZpcnN0U2FtcGxlVFMpIHtcbiAgICAgIGZpcnN0U2FtcGxlVFMgPSBub3c7XG4gICAgfVxuXG4gICAgYnl0ZXNbaGVhZF0gPSBjaHVua0xlbmd0aDtcbiAgICB0aW1lc3RhbXBzW2hlYWRdID0gbm93O1xuXG4gICAgbGV0IGkgPSB0YWlsO1xuICAgIGxldCBieXRlc0NvdW50ID0gMDtcblxuICAgIHdoaWxlIChpICE9PSBoZWFkKSB7XG4gICAgICBieXRlc0NvdW50ICs9IGJ5dGVzW2krK107XG4gICAgICBpID0gaSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBoZWFkID0gKGhlYWQgKyAxKSAlIHNhbXBsZXNDb3VudDtcblxuICAgIGlmIChoZWFkID09PSB0YWlsKSB7XG4gICAgICB0YWlsID0gKHRhaWwgKyAxKSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBpZiAobm93IC0gZmlyc3RTYW1wbGVUUyA8IG1pbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhc3NlZCA9IHN0YXJ0ZWRBdCAmJiBub3cgLSBzdGFydGVkQXQ7XG5cbiAgICByZXR1cm4gcGFzc2VkID8gTWF0aC5yb3VuZChieXRlc0NvdW50ICogMTAwMCAvIHBhc3NlZCkgOiB1bmRlZmluZWQ7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHByb2dyZXNzRXZlbnRSZWR1Y2VyKGxpc3RlbmVyLCBpc0Rvd25sb2FkU3RyZWFtKSB7XG4gIGxldCBieXRlc05vdGlmaWVkID0gMDtcbiAgY29uc3QgX3NwZWVkb21ldGVyID0gc3BlZWRvbWV0ZXIoNTAsIDI1MCk7XG5cbiAgcmV0dXJuIGUgPT4ge1xuICAgIGNvbnN0IGxvYWRlZCA9IGUubG9hZGVkO1xuICAgIGNvbnN0IHRvdGFsID0gZS5sZW5ndGhDb21wdXRhYmxlID8gZS50b3RhbCA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBwcm9ncmVzc0J5dGVzID0gbG9hZGVkIC0gYnl0ZXNOb3RpZmllZDtcbiAgICBjb25zdCByYXRlID0gX3NwZWVkb21ldGVyKHByb2dyZXNzQnl0ZXMpO1xuICAgIGNvbnN0IGluUmFuZ2UgPSBsb2FkZWQgPD0gdG90YWw7XG5cbiAgICBieXRlc05vdGlmaWVkID0gbG9hZGVkO1xuXG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGxvYWRlZCxcbiAgICAgIHRvdGFsLFxuICAgICAgcHJvZ3Jlc3M6IHRvdGFsID8gKGxvYWRlZCAvIHRvdGFsKSA6IHVuZGVmaW5lZCxcbiAgICAgIGJ5dGVzOiBwcm9ncmVzc0J5dGVzLFxuICAgICAgcmF0ZTogcmF0ZSA/IHJhdGUgOiB1bmRlZmluZWQsXG4gICAgICBlc3RpbWF0ZWQ6IHJhdGUgJiYgdG90YWwgJiYgaW5SYW5nZSA/ICh0b3RhbCAtIGxvYWRlZCkgLyByYXRlIDogdW5kZWZpbmVkLFxuICAgICAgZXZlbnQ6IGVcbiAgICB9O1xuXG4gICAgZGF0YVtpc0Rvd25sb2FkU3RyZWFtID8gJ2Rvd25sb2FkJyA6ICd1cGxvYWQnXSA9IHRydWU7XG5cbiAgICBsaXN0ZW5lcihkYXRhKTtcbiAgfTtcbn1cblxuY29uc3QgaXNYSFJBZGFwdGVyU3VwcG9ydGVkID0gdHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJztcblxudmFyIHhockFkYXB0ZXIgPSBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgJiYgZnVuY3Rpb24gKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIGxldCByZXF1ZXN0RGF0YSA9IGNvbmZpZy5kYXRhO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShjb25maWcuaGVhZGVycykubm9ybWFsaXplKCk7XG4gICAgbGV0IHtyZXNwb25zZVR5cGUsIHdpdGhYU1JGVG9rZW59ID0gY29uZmlnO1xuICAgIGxldCBvbkNhbmNlbGVkO1xuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShvbkNhbmNlbGVkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgY29uZmlnLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBjb250ZW50VHlwZTtcblxuICAgIGlmICh1dGlscyQxLmlzRm9ybURhdGEocmVxdWVzdERhdGEpKSB7XG4gICAgICBpZiAocGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52IHx8IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudikge1xuICAgICAgICByZXF1ZXN0SGVhZGVycy5zZXRDb250ZW50VHlwZShmYWxzZSk7IC8vIExldCB0aGUgYnJvd3NlciBzZXQgaXRcbiAgICAgIH0gZWxzZSBpZiAoKGNvbnRlbnRUeXBlID0gcmVxdWVzdEhlYWRlcnMuZ2V0Q29udGVudFR5cGUoKSkgIT09IGZhbHNlKSB7XG4gICAgICAgIC8vIGZpeCBzZW1pY29sb24gZHVwbGljYXRpb24gaXNzdWUgZm9yIFJlYWN0TmF0aXZlIEZvcm1EYXRhIGltcGxlbWVudGF0aW9uXG4gICAgICAgIGNvbnN0IFt0eXBlLCAuLi50b2tlbnNdID0gY29udGVudFR5cGUgPyBjb250ZW50VHlwZS5zcGxpdCgnOycpLm1hcCh0b2tlbiA9PiB0b2tlbi50cmltKCkpLmZpbHRlcihCb29sZWFuKSA6IFtdO1xuICAgICAgICByZXF1ZXN0SGVhZGVycy5zZXRDb250ZW50VHlwZShbdHlwZSB8fCAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsIC4uLnRva2Vuc10uam9pbignOyAnKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICBpZiAoY29uZmlnLmF1dGgpIHtcbiAgICAgIGNvbnN0IHVzZXJuYW1lID0gY29uZmlnLmF1dGgudXNlcm5hbWUgfHwgJyc7XG4gICAgICBjb25zdCBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkID8gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGNvbmZpZy5hdXRoLnBhc3N3b3JkKSkgOiAnJztcbiAgICAgIHJlcXVlc3RIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCYXNpYyAnICsgYnRvYSh1c2VybmFtZSArICc6JyArIHBhc3N3b3JkKSk7XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcblxuICAgIHJlcXVlc3Qub3Blbihjb25maWcubWV0aG9kLnRvVXBwZXJDYXNlKCksIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplciksIHRydWUpO1xuXG4gICAgLy8gU2V0IHRoZSByZXF1ZXN0IHRpbWVvdXQgaW4gTVNcbiAgICByZXF1ZXN0LnRpbWVvdXQgPSBjb25maWcudGltZW91dDtcblxuICAgIGZ1bmN0aW9uIG9ubG9hZGVuZCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShcbiAgICAgICAgJ2dldEFsbFJlc3BvbnNlSGVhZGVycycgaW4gcmVxdWVzdCAmJiByZXF1ZXN0LmdldEFsbFJlc3BvbnNlSGVhZGVycygpXG4gICAgICApO1xuICAgICAgY29uc3QgcmVzcG9uc2VEYXRhID0gIXJlc3BvbnNlVHlwZSB8fCByZXNwb25zZVR5cGUgPT09ICd0ZXh0JyB8fCByZXNwb25zZVR5cGUgPT09ICdqc29uJyA/XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUZXh0IDogcmVxdWVzdC5yZXNwb25zZTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIHN0YXR1czogcmVxdWVzdC5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlcXVlc3Quc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcmVzcG9uc2VIZWFkZXJzLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3RcbiAgICAgIH07XG5cbiAgICAgIHNldHRsZShmdW5jdGlvbiBfcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgZnVuY3Rpb24gX3JlamVjdChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIHJlc3BvbnNlKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCdvbmxvYWRlbmQnIGluIHJlcXVlc3QpIHtcbiAgICAgIC8vIFVzZSBvbmxvYWRlbmQgaWYgYXZhaWxhYmxlXG4gICAgICByZXF1ZXN0Lm9ubG9hZGVuZCA9IG9ubG9hZGVuZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTGlzdGVuIGZvciByZWFkeSBzdGF0ZSB0byBlbXVsYXRlIG9ubG9hZGVuZFxuICAgICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVMb2FkKCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QgfHwgcmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIHJlcXVlc3QgZXJyb3JlZCBvdXQgYW5kIHdlIGRpZG4ndCBnZXQgYSByZXNwb25zZSwgdGhpcyB3aWxsIGJlXG4gICAgICAgIC8vIGhhbmRsZWQgYnkgb25lcnJvciBpbnN0ZWFkXG4gICAgICAgIC8vIFdpdGggb25lIGV4Y2VwdGlvbjogcmVxdWVzdCB0aGF0IHVzaW5nIGZpbGU6IHByb3RvY29sLCBtb3N0IGJyb3dzZXJzXG4gICAgICAgIC8vIHdpbGwgcmV0dXJuIHN0YXR1cyBhcyAwIGV2ZW4gdGhvdWdoIGl0J3MgYSBzdWNjZXNzZnVsIHJlcXVlc3RcbiAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAwICYmICEocmVxdWVzdC5yZXNwb25zZVVSTCAmJiByZXF1ZXN0LnJlc3BvbnNlVVJMLmluZGV4T2YoJ2ZpbGU6JykgPT09IDApKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlYWR5c3RhdGUgaGFuZGxlciBpcyBjYWxsaW5nIGJlZm9yZSBvbmVycm9yIG9yIG9udGltZW91dCBoYW5kbGVycyxcbiAgICAgICAgLy8gc28gd2Ugc2hvdWxkIGNhbGwgb25sb2FkZW5kIG9uIHRoZSBuZXh0ICd0aWNrJ1xuICAgICAgICBzZXRUaW1lb3V0KG9ubG9hZGVuZCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBicm93c2VyIHJlcXVlc3QgY2FuY2VsbGF0aW9uIChhcyBvcHBvc2VkIHRvIGEgbWFudWFsIGNhbmNlbGxhdGlvbilcbiAgICByZXF1ZXN0Lm9uYWJvcnQgPSBmdW5jdGlvbiBoYW5kbGVBYm9ydCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignUmVxdWVzdCBhYm9ydGVkJywgQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsIGNvbmZpZywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGxvdyBsZXZlbCBuZXR3b3JrIGVycm9yc1xuICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uIGhhbmRsZUVycm9yKCkge1xuICAgICAgLy8gUmVhbCBlcnJvcnMgYXJlIGhpZGRlbiBmcm9tIHVzIGJ5IHRoZSBicm93c2VyXG4gICAgICAvLyBvbmVycm9yIHNob3VsZCBvbmx5IGZpcmUgaWYgaXQncyBhIG5ldHdvcmsgZXJyb3JcbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignTmV0d29yayBFcnJvcicsIEF4aW9zRXJyb3IuRVJSX05FVFdPUkssIGNvbmZpZywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIHRpbWVvdXRcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7XG4gICAgICBsZXQgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0ID8gJ3RpbWVvdXQgb2YgJyArIGNvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJyA6ICd0aW1lb3V0IGV4Y2VlZGVkJztcbiAgICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IGNvbmZpZy50cmFuc2l0aW9uYWwgfHwgdHJhbnNpdGlvbmFsRGVmYXVsdHM7XG4gICAgICBpZiAoY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlLFxuICAgICAgICB0cmFuc2l0aW9uYWwuY2xhcmlmeVRpbWVvdXRFcnJvciA/IEF4aW9zRXJyb3IuRVRJTUVET1VUIDogQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gICAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS5cbiAgICBpZihwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYpIHtcbiAgICAgIHdpdGhYU1JGVG9rZW4gJiYgdXRpbHMkMS5pc0Z1bmN0aW9uKHdpdGhYU1JGVG9rZW4pICYmICh3aXRoWFNSRlRva2VuID0gd2l0aFhTUkZUb2tlbihjb25maWcpKTtcblxuICAgICAgaWYgKHdpdGhYU1JGVG9rZW4gfHwgKHdpdGhYU1JGVG9rZW4gIT09IGZhbHNlICYmIGlzVVJMU2FtZU9yaWdpbihmdWxsUGF0aCkpKSB7XG4gICAgICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgICAgICBjb25zdCB4c3JmVmFsdWUgPSBjb25maWcueHNyZkhlYWRlck5hbWUgJiYgY29uZmlnLnhzcmZDb29raWVOYW1lICYmIGNvb2tpZXMucmVhZChjb25maWcueHNyZkNvb2tpZU5hbWUpO1xuXG4gICAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgICByZXF1ZXN0SGVhZGVycy5zZXQoY29uZmlnLnhzcmZIZWFkZXJOYW1lLCB4c3JmVmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIENvbnRlbnQtVHlwZSBpZiBkYXRhIGlzIHVuZGVmaW5lZFxuICAgIHJlcXVlc3REYXRhID09PSB1bmRlZmluZWQgJiYgcmVxdWVzdEhlYWRlcnMuc2V0Q29udGVudFR5cGUobnVsbCk7XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMkMS5mb3JFYWNoKHJlcXVlc3RIZWFkZXJzLnRvSlNPTigpLCBmdW5jdGlvbiBzZXRSZXF1ZXN0SGVhZGVyKHZhbCwga2V5KSB7XG4gICAgICAgIHJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihrZXksIHZhbCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKCF1dGlscyQxLmlzVW5kZWZpbmVkKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMpKSB7XG4gICAgICByZXF1ZXN0LndpdGhDcmVkZW50aWFscyA9ICEhY29uZmlnLndpdGhDcmVkZW50aWFscztcbiAgICB9XG5cbiAgICAvLyBBZGQgcmVzcG9uc2VUeXBlIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKHJlc3BvbnNlVHlwZSAmJiByZXNwb25zZVR5cGUgIT09ICdqc29uJykge1xuICAgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSBjb25maWcucmVzcG9uc2VUeXBlO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBwcm9ncmVzcyBpZiBuZWVkZWRcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBwcm9ncmVzc0V2ZW50UmVkdWNlcihjb25maWcub25Eb3dubG9hZFByb2dyZXNzLCB0cnVlKSk7XG4gICAgfVxuXG4gICAgLy8gTm90IGFsbCBicm93c2VycyBzdXBwb3J0IHVwbG9hZCBldmVudHNcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nICYmIHJlcXVlc3QudXBsb2FkKSB7XG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHByb2dyZXNzRXZlbnRSZWR1Y2VyKGNvbmZpZy5vblVwbG9hZFByb2dyZXNzKSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbiB8fCBjb25maWcuc2lnbmFsKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgb25DYW5jZWxlZCA9IGNhbmNlbCA9PiB7XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoIWNhbmNlbCB8fCBjYW5jZWwudHlwZSA/IG5ldyBDYW5jZWxlZEVycm9yKG51bGwsIGNvbmZpZywgcmVxdWVzdCkgOiBjYW5jZWwpO1xuICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG4gICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgfTtcblxuICAgICAgY29uZmlnLmNhbmNlbFRva2VuICYmIGNvbmZpZy5jYW5jZWxUb2tlbi5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICBpZiAoY29uZmlnLnNpZ25hbCkge1xuICAgICAgICBjb25maWcuc2lnbmFsLmFib3J0ZWQgPyBvbkNhbmNlbGVkKCkgOiBjb25maWcuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcHJvdG9jb2wgPSBwYXJzZVByb3RvY29sKGZ1bGxQYXRoKTtcblxuICAgIGlmIChwcm90b2NvbCAmJiBwbGF0Zm9ybS5wcm90b2NvbHMuaW5kZXhPZihwcm90b2NvbCkgPT09IC0xKSB7XG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1Vuc3VwcG9ydGVkIHByb3RvY29sICcgKyBwcm90b2NvbCArICc6JywgQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsIGNvbmZpZykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSB8fCBudWxsKTtcbiAgfSk7XG59O1xuXG5jb25zdCBrbm93bkFkYXB0ZXJzID0ge1xuICBodHRwOiBodHRwQWRhcHRlcixcbiAgeGhyOiB4aHJBZGFwdGVyXG59O1xuXG51dGlscyQxLmZvckVhY2goa25vd25BZGFwdGVycywgKGZuLCB2YWx1ZSkgPT4ge1xuICBpZiAoZm4pIHtcbiAgICB0cnkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCAnbmFtZScsIHt2YWx1ZX0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sICdhZGFwdGVyTmFtZScsIHt2YWx1ZX0pO1xuICB9XG59KTtcblxuY29uc3QgcmVuZGVyUmVhc29uID0gKHJlYXNvbikgPT4gYC0gJHtyZWFzb259YDtcblxuY29uc3QgaXNSZXNvbHZlZEhhbmRsZSA9IChhZGFwdGVyKSA9PiB1dGlscyQxLmlzRnVuY3Rpb24oYWRhcHRlcikgfHwgYWRhcHRlciA9PT0gbnVsbCB8fCBhZGFwdGVyID09PSBmYWxzZTtcblxudmFyIGFkYXB0ZXJzID0ge1xuICBnZXRBZGFwdGVyOiAoYWRhcHRlcnMpID0+IHtcbiAgICBhZGFwdGVycyA9IHV0aWxzJDEuaXNBcnJheShhZGFwdGVycykgPyBhZGFwdGVycyA6IFthZGFwdGVyc107XG5cbiAgICBjb25zdCB7bGVuZ3RofSA9IGFkYXB0ZXJzO1xuICAgIGxldCBuYW1lT3JBZGFwdGVyO1xuICAgIGxldCBhZGFwdGVyO1xuXG4gICAgY29uc3QgcmVqZWN0ZWRSZWFzb25zID0ge307XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBuYW1lT3JBZGFwdGVyID0gYWRhcHRlcnNbaV07XG4gICAgICBsZXQgaWQ7XG5cbiAgICAgIGFkYXB0ZXIgPSBuYW1lT3JBZGFwdGVyO1xuXG4gICAgICBpZiAoIWlzUmVzb2x2ZWRIYW5kbGUobmFtZU9yQWRhcHRlcikpIHtcbiAgICAgICAgYWRhcHRlciA9IGtub3duQWRhcHRlcnNbKGlkID0gU3RyaW5nKG5hbWVPckFkYXB0ZXIpKS50b0xvd2VyQ2FzZSgpXTtcblxuICAgICAgICBpZiAoYWRhcHRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoYFVua25vd24gYWRhcHRlciAnJHtpZH0nYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGFkYXB0ZXIpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHJlamVjdGVkUmVhc29uc1tpZCB8fCAnIycgKyBpXSA9IGFkYXB0ZXI7XG4gICAgfVxuXG4gICAgaWYgKCFhZGFwdGVyKSB7XG5cbiAgICAgIGNvbnN0IHJlYXNvbnMgPSBPYmplY3QuZW50cmllcyhyZWplY3RlZFJlYXNvbnMpXG4gICAgICAgIC5tYXAoKFtpZCwgc3RhdGVdKSA9PiBgYWRhcHRlciAke2lkfSBgICtcbiAgICAgICAgICAoc3RhdGUgPT09IGZhbHNlID8gJ2lzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50JyA6ICdpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCcpXG4gICAgICAgICk7XG5cbiAgICAgIGxldCBzID0gbGVuZ3RoID9cbiAgICAgICAgKHJlYXNvbnMubGVuZ3RoID4gMSA/ICdzaW5jZSA6XFxuJyArIHJlYXNvbnMubWFwKHJlbmRlclJlYXNvbikuam9pbignXFxuJykgOiAnICcgKyByZW5kZXJSZWFzb24ocmVhc29uc1swXSkpIDpcbiAgICAgICAgJ2FzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkJztcblxuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGBUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0IGAgKyBzLFxuICAgICAgICAnRVJSX05PVF9TVVBQT1JUJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRhcHRlcjtcbiAgfSxcbiAgYWRhcHRlcnM6IGtub3duQWRhcHRlcnNcbn07XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cblxuICBpZiAoY29uZmlnLnNpZ25hbCAmJiBjb25maWcuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAqL1xuZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKGNvbmZpZy5oZWFkZXJzKTtcblxuICAvLyBUcmFuc2Zvcm0gcmVxdWVzdCBkYXRhXG4gIGNvbmZpZy5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgIGNvbmZpZyxcbiAgICBjb25maWcudHJhbnNmb3JtUmVxdWVzdFxuICApO1xuXG4gIGlmIChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10uaW5kZXhPZihjb25maWcubWV0aG9kKSAhPT0gLTEpIHtcbiAgICBjb25maWcuaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJywgZmFsc2UpO1xuICB9XG5cbiAgY29uc3QgYWRhcHRlciA9IGFkYXB0ZXJzLmdldEFkYXB0ZXIoY29uZmlnLmFkYXB0ZXIgfHwgZGVmYXVsdHMkMS5hZGFwdGVyKTtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgIGNvbmZpZyxcbiAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSxcbiAgICAgIHJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJlc3BvbnNlLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKHJlc3BvbnNlLmhlYWRlcnMpO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9LCBmdW5jdGlvbiBvbkFkYXB0ZXJSZWplY3Rpb24ocmVhc29uKSB7XG4gICAgaWYgKCFpc0NhbmNlbChyZWFzb24pKSB7XG4gICAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgICBpZiAocmVhc29uICYmIHJlYXNvbi5yZXNwb25zZSkge1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZVxuICAgICAgICApO1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20ocmVhc29uLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICB9KTtcbn1cblxuY29uc3QgaGVhZGVyc1RvT2JqZWN0ID0gKHRoaW5nKSA9PiB0aGluZyBpbnN0YW5jZW9mIEF4aW9zSGVhZGVycyQxID8geyAuLi50aGluZyB9IDogdGhpbmc7XG5cbi8qKlxuICogQ29uZmlnLXNwZWNpZmljIG1lcmdlLWZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYSBuZXcgY29uZmlnLW9iamVjdFxuICogYnkgbWVyZ2luZyB0d28gY29uZmlndXJhdGlvbiBvYmplY3RzIHRvZ2V0aGVyLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcxXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IE5ldyBvYmplY3QgcmVzdWx0aW5nIGZyb20gbWVyZ2luZyBjb25maWcyIHRvIGNvbmZpZzFcbiAqL1xuZnVuY3Rpb24gbWVyZ2VDb25maWcoY29uZmlnMSwgY29uZmlnMikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgY29uZmlnMiA9IGNvbmZpZzIgfHwge307XG4gIGNvbnN0IGNvbmZpZyA9IHt9O1xuXG4gIGZ1bmN0aW9uIGdldE1lcmdlZFZhbHVlKHRhcmdldCwgc291cmNlLCBjYXNlbGVzcykge1xuICAgIGlmICh1dGlscyQxLmlzUGxhaW5PYmplY3QodGFyZ2V0KSAmJiB1dGlscyQxLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzJDEubWVyZ2UuY2FsbCh7Y2FzZWxlc3N9LCB0YXJnZXQsIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscyQxLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzJDEubWVyZ2Uoe30sIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscyQxLmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHNvdXJjZS5zbGljZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGVlcFByb3BlcnRpZXMoYSwgYiwgY2FzZWxlc3MpIHtcbiAgICBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShhLCBiLCBjYXNlbGVzcyk7XG4gICAgfSBlbHNlIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChhKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSwgY2FzZWxlc3MpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiB2YWx1ZUZyb21Db25maWcyKGEsIGIpIHtcbiAgICBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBkZWZhdWx0VG9Db25maWcyKGEsIGIpIHtcbiAgICBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoYSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURpcmVjdEtleXMoYSwgYiwgcHJvcCkge1xuICAgIGlmIChwcm9wIGluIGNvbmZpZzIpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShhLCBiKTtcbiAgICB9IGVsc2UgaWYgKHByb3AgaW4gY29uZmlnMSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWVyZ2VNYXAgPSB7XG4gICAgdXJsOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIG1ldGhvZDogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBkYXRhOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIGJhc2VVUkw6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNmb3JtUmVxdWVzdDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc2Zvcm1SZXNwb25zZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBwYXJhbXNTZXJpYWxpemVyOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRpbWVvdXQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdGltZW91dE1lc3NhZ2U6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgd2l0aENyZWRlbnRpYWxzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHdpdGhYU1JGVG9rZW46IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgYWRhcHRlcjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICByZXNwb25zZVR5cGU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgeHNyZkNvb2tpZU5hbWU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgeHNyZkhlYWRlck5hbWU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgb25VcGxvYWRQcm9ncmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBvbkRvd25sb2FkUHJvZ3Jlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgZGVjb21wcmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBtYXhDb250ZW50TGVuZ3RoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG1heEJvZHlMZW5ndGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgYmVmb3JlUmVkaXJlY3Q6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNwb3J0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGh0dHBBZ2VudDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBodHRwc0FnZW50OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGNhbmNlbFRva2VuOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHNvY2tldFBhdGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcmVzcG9uc2VFbmNvZGluZzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB2YWxpZGF0ZVN0YXR1czogbWVyZ2VEaXJlY3RLZXlzLFxuICAgIGhlYWRlcnM6IChhLCBiKSA9PiBtZXJnZURlZXBQcm9wZXJ0aWVzKGhlYWRlcnNUb09iamVjdChhKSwgaGVhZGVyc1RvT2JqZWN0KGIpLCB0cnVlKVxuICB9O1xuXG4gIHV0aWxzJDEuZm9yRWFjaChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCBjb25maWcxLCBjb25maWcyKSksIGZ1bmN0aW9uIGNvbXB1dGVDb25maWdWYWx1ZShwcm9wKSB7XG4gICAgY29uc3QgbWVyZ2UgPSBtZXJnZU1hcFtwcm9wXSB8fCBtZXJnZURlZXBQcm9wZXJ0aWVzO1xuICAgIGNvbnN0IGNvbmZpZ1ZhbHVlID0gbWVyZ2UoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSwgcHJvcCk7XG4gICAgKHV0aWxzJDEuaXNVbmRlZmluZWQoY29uZmlnVmFsdWUpICYmIG1lcmdlICE9PSBtZXJnZURpcmVjdEtleXMpIHx8IChjb25maWdbcHJvcF0gPSBjb25maWdWYWx1ZSk7XG4gIH0pO1xuXG4gIHJldHVybiBjb25maWc7XG59XG5cbmNvbnN0IFZFUlNJT04gPSBcIjEuNi44XCI7XG5cbmNvbnN0IHZhbGlkYXRvcnMkMSA9IHt9O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuWydvYmplY3QnLCAnYm9vbGVhbicsICdudW1iZXInLCAnZnVuY3Rpb24nLCAnc3RyaW5nJywgJ3N5bWJvbCddLmZvckVhY2goKHR5cGUsIGkpID0+IHtcbiAgdmFsaWRhdG9ycyQxW3R5cGVdID0gZnVuY3Rpb24gdmFsaWRhdG9yKHRoaW5nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGluZyA9PT0gdHlwZSB8fCAnYScgKyAoaSA8IDEgPyAnbiAnIDogJyAnKSArIHR5cGU7XG4gIH07XG59KTtcblxuY29uc3QgZGVwcmVjYXRlZFdhcm5pbmdzID0ge307XG5cbi8qKlxuICogVHJhbnNpdGlvbmFsIG9wdGlvbiB2YWxpZGF0b3JcbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufGJvb2xlYW4/fSB2YWxpZGF0b3IgLSBzZXQgdG8gZmFsc2UgaWYgdGhlIHRyYW5zaXRpb25hbCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZFxuICogQHBhcmFtIHtzdHJpbmc/fSB2ZXJzaW9uIC0gZGVwcmVjYXRlZCB2ZXJzaW9uIC8gcmVtb3ZlZCBzaW5jZSB2ZXJzaW9uXG4gKiBAcGFyYW0ge3N0cmluZz99IG1lc3NhZ2UgLSBzb21lIG1lc3NhZ2Ugd2l0aCBhZGRpdGlvbmFsIGluZm9cbiAqXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbnZhbGlkYXRvcnMkMS50cmFuc2l0aW9uYWwgPSBmdW5jdGlvbiB0cmFuc2l0aW9uYWwodmFsaWRhdG9yLCB2ZXJzaW9uLCBtZXNzYWdlKSB7XG4gIGZ1bmN0aW9uIGZvcm1hdE1lc3NhZ2Uob3B0LCBkZXNjKSB7XG4gICAgcmV0dXJuICdbQXhpb3MgdicgKyBWRVJTSU9OICsgJ10gVHJhbnNpdGlvbmFsIG9wdGlvbiBcXCcnICsgb3B0ICsgJ1xcJycgKyBkZXNjICsgKG1lc3NhZ2UgPyAnLiAnICsgbWVzc2FnZSA6ICcnKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiAodmFsdWUsIG9wdCwgb3B0cykgPT4ge1xuICAgIGlmICh2YWxpZGF0b3IgPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgZm9ybWF0TWVzc2FnZShvcHQsICcgaGFzIGJlZW4gcmVtb3ZlZCcgKyAodmVyc2lvbiA/ICcgaW4gJyArIHZlcnNpb24gOiAnJykpLFxuICAgICAgICBBeGlvc0Vycm9yLkVSUl9ERVBSRUNBVEVEXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh2ZXJzaW9uICYmICFkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSkge1xuICAgICAgZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0gPSB0cnVlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgZm9ybWF0TWVzc2FnZShcbiAgICAgICAgICBvcHQsXG4gICAgICAgICAgJyBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYnICsgdmVyc2lvbiArICcgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUnXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRvciA/IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRzKSA6IHRydWU7XG4gIH07XG59O1xuXG4vKipcbiAqIEFzc2VydCBvYmplY3QncyBwcm9wZXJ0aWVzIHR5cGVcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtvYmplY3R9IHNjaGVtYVxuICogQHBhcmFtIHtib29sZWFuP30gYWxsb3dVbmtub3duXG4gKlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuXG5mdW5jdGlvbiBhc3NlcnRPcHRpb25zKG9wdGlvbnMsIHNjaGVtYSwgYWxsb3dVbmtub3duKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICB9XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcbiAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBjb25zdCBvcHQgPSBrZXlzW2ldO1xuICAgIGNvbnN0IHZhbGlkYXRvciA9IHNjaGVtYVtvcHRdO1xuICAgIGlmICh2YWxpZGF0b3IpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gb3B0aW9uc1tvcHRdO1xuICAgICAgY29uc3QgcmVzdWx0ID0gdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0aW9ucyk7XG4gICAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSB7XG4gICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb24gJyArIG9wdCArICcgbXVzdCBiZSAnICsgcmVzdWx0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoYWxsb3dVbmtub3duICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignVW5rbm93biBvcHRpb24gJyArIG9wdCwgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTik7XG4gICAgfVxuICB9XG59XG5cbnZhciB2YWxpZGF0b3IgPSB7XG4gIGFzc2VydE9wdGlvbnMsXG4gIHZhbGlkYXRvcnM6IHZhbGlkYXRvcnMkMVxufTtcblxuY29uc3QgdmFsaWRhdG9ycyA9IHZhbGlkYXRvci52YWxpZGF0b3JzO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZUNvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5jbGFzcyBBeGlvcyB7XG4gIGNvbnN0cnVjdG9yKGluc3RhbmNlQ29uZmlnKSB7XG4gICAgdGhpcy5kZWZhdWx0cyA9IGluc3RhbmNlQ29uZmlnO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzID0ge1xuICAgICAgcmVxdWVzdDogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpLFxuICAgICAgcmVzcG9uc2U6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGlzcGF0Y2ggYSByZXF1ZXN0XG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gY29uZmlnT3JVcmwgVGhlIGNvbmZpZyBzcGVjaWZpYyBmb3IgdGhpcyByZXF1ZXN0IChtZXJnZWQgd2l0aCB0aGlzLmRlZmF1bHRzKVxuICAgKiBAcGFyYW0gez9PYmplY3R9IGNvbmZpZ1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gICAqL1xuICBhc3luYyByZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgbGV0IGR1bW15O1xuXG4gICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlID8gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZHVtbXkgPSB7fSkgOiAoZHVtbXkgPSBuZXcgRXJyb3IoKSk7XG5cbiAgICAgICAgLy8gc2xpY2Ugb2ZmIHRoZSBFcnJvcjogLi4uIGxpbmVcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBkdW1teS5zdGFjayA/IGR1bW15LnN0YWNrLnJlcGxhY2UoL14uK1xcbi8sICcnKSA6ICcnO1xuXG4gICAgICAgIGlmICghZXJyLnN0YWNrKSB7XG4gICAgICAgICAgZXJyLnN0YWNrID0gc3RhY2s7XG4gICAgICAgICAgLy8gbWF0Y2ggd2l0aG91dCB0aGUgMiB0b3Agc3RhY2sgbGluZXNcbiAgICAgICAgfSBlbHNlIGlmIChzdGFjayAmJiAhU3RyaW5nKGVyci5zdGFjaykuZW5kc1dpdGgoc3RhY2sucmVwbGFjZSgvXi4rXFxuLitcXG4vLCAnJykpKSB7XG4gICAgICAgICAgZXJyLnN0YWNrICs9ICdcXG4nICsgc3RhY2s7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIF9yZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gICAgaWYgKHR5cGVvZiBjb25maWdPclVybCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICAgIGNvbmZpZy51cmwgPSBjb25maWdPclVybDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZmlnID0gY29uZmlnT3JVcmwgfHwge307XG4gICAgfVxuXG4gICAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcblxuICAgIGNvbnN0IHt0cmFuc2l0aW9uYWwsIHBhcmFtc1NlcmlhbGl6ZXIsIGhlYWRlcnN9ID0gY29uZmlnO1xuXG4gICAgaWYgKHRyYW5zaXRpb25hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyh0cmFuc2l0aW9uYWwsIHtcbiAgICAgICAgc2lsZW50SlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgIGZvcmNlZEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICBjbGFyaWZ5VGltZW91dEVycm9yOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pXG4gICAgICB9LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtc1NlcmlhbGl6ZXIgIT0gbnVsbCkge1xuICAgICAgaWYgKHV0aWxzJDEuaXNGdW5jdGlvbihwYXJhbXNTZXJpYWxpemVyKSkge1xuICAgICAgICBjb25maWcucGFyYW1zU2VyaWFsaXplciA9IHtcbiAgICAgICAgICBzZXJpYWxpemU6IHBhcmFtc1NlcmlhbGl6ZXJcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHBhcmFtc1NlcmlhbGl6ZXIsIHtcbiAgICAgICAgICBlbmNvZGU6IHZhbGlkYXRvcnMuZnVuY3Rpb24sXG4gICAgICAgICAgc2VyaWFsaXplOiB2YWxpZGF0b3JzLmZ1bmN0aW9uXG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCBjb25maWcubWV0aG9kXG4gICAgY29uZmlnLm1ldGhvZCA9IChjb25maWcubWV0aG9kIHx8IHRoaXMuZGVmYXVsdHMubWV0aG9kIHx8ICdnZXQnKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gRmxhdHRlbiBoZWFkZXJzXG4gICAgbGV0IGNvbnRleHRIZWFkZXJzID0gaGVhZGVycyAmJiB1dGlscyQxLm1lcmdlKFxuICAgICAgaGVhZGVycy5jb21tb24sXG4gICAgICBoZWFkZXJzW2NvbmZpZy5tZXRob2RdXG4gICAgKTtcblxuICAgIGhlYWRlcnMgJiYgdXRpbHMkMS5mb3JFYWNoKFxuICAgICAgWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnY29tbW9uJ10sXG4gICAgICAobWV0aG9kKSA9PiB7XG4gICAgICAgIGRlbGV0ZSBoZWFkZXJzW21ldGhvZF07XG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbmZpZy5oZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuY29uY2F0KGNvbnRleHRIZWFkZXJzLCBoZWFkZXJzKTtcblxuICAgIC8vIGZpbHRlciBvdXQgc2tpcHBlZCBpbnRlcmNlcHRvcnNcbiAgICBjb25zdCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICAgIGxldCBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSB0cnVlO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbiB1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvci5ydW5XaGVuID09PSAnZnVuY3Rpb24nICYmIGludGVyY2VwdG9yLnJ1bldoZW4oY29uZmlnKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3Iuc3luY2hyb25vdXM7XG5cbiAgICAgIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgICB0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uIHB1c2hSZXNwb25zZUludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnB1c2goaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgfSk7XG5cbiAgICBsZXQgcHJvbWlzZTtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGxlbjtcblxuICAgIGlmICghc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzKSB7XG4gICAgICBjb25zdCBjaGFpbiA9IFtkaXNwYXRjaFJlcXVlc3QuYmluZCh0aGlzKSwgdW5kZWZpbmVkXTtcbiAgICAgIGNoYWluLnVuc2hpZnQuYXBwbHkoY2hhaW4sIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluKTtcbiAgICAgIGNoYWluLnB1c2guYXBwbHkoY2hhaW4sIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbik7XG4gICAgICBsZW4gPSBjaGFpbi5sZW5ndGg7XG5cbiAgICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY29uZmlnKTtcblxuICAgICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihjaGFpbltpKytdLCBjaGFpbltpKytdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuXG4gICAgbGVuID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgbGV0IG5ld0NvbmZpZyA9IGNvbmZpZztcblxuICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIGNvbnN0IG9uRnVsZmlsbGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW5baSsrXTtcbiAgICAgIGNvbnN0IG9uUmVqZWN0ZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbltpKytdO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3Q29uZmlnID0gb25GdWxmaWxsZWQobmV3Q29uZmlnKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIG9uUmVqZWN0ZWQuY2FsbCh0aGlzLCBlcnJvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBwcm9taXNlID0gZGlzcGF0Y2hSZXF1ZXN0LmNhbGwodGhpcywgbmV3Q29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9XG5cbiAgICBpID0gMDtcbiAgICBsZW4gPSByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4ocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluW2krK10sIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbltpKytdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG4gIGdldFVyaShjb25maWcpIHtcbiAgICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG4gICAgcmV0dXJuIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG4gIH1cbn1cblxuLy8gUHJvdmlkZSBhbGlhc2VzIGZvciBzdXBwb3J0ZWQgcmVxdWVzdCBtZXRob2RzXG51dGlscyQxLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAnb3B0aW9ucyddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIGRhdGE6IChjb25maWcgfHwge30pLmRhdGFcbiAgICB9KSk7XG4gIH07XG59KTtcblxudXRpbHMkMS5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuXG4gIGZ1bmN0aW9uIGdlbmVyYXRlSFRUUE1ldGhvZChpc0Zvcm0pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaHR0cE1ldGhvZCh1cmwsIGRhdGEsIGNvbmZpZykge1xuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICBoZWFkZXJzOiBpc0Zvcm0gPyB7XG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJ1xuICAgICAgICB9IDoge30sXG4gICAgICAgIHVybCxcbiAgICAgICAgZGF0YVxuICAgICAgfSkpO1xuICAgIH07XG4gIH1cblxuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCgpO1xuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2QgKyAnRm9ybSddID0gZ2VuZXJhdGVIVFRQTWV0aG9kKHRydWUpO1xufSk7XG5cbnZhciBBeGlvcyQxID0gQXhpb3M7XG5cbi8qKlxuICogQSBgQ2FuY2VsVG9rZW5gIGlzIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgY2FuY2VsbGF0aW9uIG9mIGFuIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBleGVjdXRvciBUaGUgZXhlY3V0b3IgZnVuY3Rpb24uXG4gKlxuICogQHJldHVybnMge0NhbmNlbFRva2VufVxuICovXG5jbGFzcyBDYW5jZWxUb2tlbiB7XG4gIGNvbnN0cnVjdG9yKGV4ZWN1dG9yKSB7XG4gICAgaWYgKHR5cGVvZiBleGVjdXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLicpO1xuICAgIH1cblxuICAgIGxldCByZXNvbHZlUHJvbWlzZTtcblxuICAgIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VFeGVjdXRvcihyZXNvbHZlKSB7XG4gICAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gICAgfSk7XG5cbiAgICBjb25zdCB0b2tlbiA9IHRoaXM7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHRoaXMucHJvbWlzZS50aGVuKGNhbmNlbCA9PiB7XG4gICAgICBpZiAoIXRva2VuLl9saXN0ZW5lcnMpIHJldHVybjtcblxuICAgICAgbGV0IGkgPSB0b2tlbi5fbGlzdGVuZXJzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgICAgdG9rZW4uX2xpc3RlbmVyc1tpXShjYW5jZWwpO1xuICAgICAgfVxuICAgICAgdG9rZW4uX2xpc3RlbmVycyA9IG51bGw7XG4gICAgfSk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHRoaXMucHJvbWlzZS50aGVuID0gb25mdWxmaWxsZWQgPT4ge1xuICAgICAgbGV0IF9yZXNvbHZlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdG9rZW4uc3Vic2NyaWJlKHJlc29sdmUpO1xuICAgICAgICBfcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICB9KS50aGVuKG9uZnVsZmlsbGVkKTtcblxuICAgICAgcHJvbWlzZS5jYW5jZWwgPSBmdW5jdGlvbiByZWplY3QoKSB7XG4gICAgICAgIHRva2VuLnVuc3Vic2NyaWJlKF9yZXNvbHZlKTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH07XG5cbiAgICBleGVjdXRvcihmdW5jdGlvbiBjYW5jZWwobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KSB7XG4gICAgICBpZiAodG9rZW4ucmVhc29uKSB7XG4gICAgICAgIC8vIENhbmNlbGxhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZFxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRva2VuLnJlYXNvbiA9IG5ldyBDYW5jZWxlZEVycm9yKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCk7XG4gICAgICByZXNvbHZlUHJvbWlzZSh0b2tlbi5yZWFzb24pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICAgKi9cbiAgdGhyb3dJZlJlcXVlc3RlZCgpIHtcbiAgICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICAgIHRocm93IHRoaXMucmVhc29uO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gdGhlIGNhbmNlbCBzaWduYWxcbiAgICovXG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICBsaXN0ZW5lcih0aGlzLnJlYXNvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2xpc3RlbmVycykge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMgPSBbbGlzdGVuZXJdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbnN1YnNjcmliZSBmcm9tIHRoZSBjYW5jZWwgc2lnbmFsXG4gICAqL1xuXG4gIHVuc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKCF0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBuZXcgYENhbmNlbFRva2VuYCBhbmQgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCxcbiAgICogY2FuY2VscyB0aGUgYENhbmNlbFRva2VuYC5cbiAgICovXG4gIHN0YXRpYyBzb3VyY2UoKSB7XG4gICAgbGV0IGNhbmNlbDtcbiAgICBjb25zdCB0b2tlbiA9IG5ldyBDYW5jZWxUb2tlbihmdW5jdGlvbiBleGVjdXRvcihjKSB7XG4gICAgICBjYW5jZWwgPSBjO1xuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbixcbiAgICAgIGNhbmNlbFxuICAgIH07XG4gIH1cbn1cblxudmFyIENhbmNlbFRva2VuJDEgPSBDYW5jZWxUb2tlbjtcblxuLyoqXG4gKiBTeW50YWN0aWMgc3VnYXIgZm9yIGludm9raW5nIGEgZnVuY3Rpb24gYW5kIGV4cGFuZGluZyBhbiBhcnJheSBmb3IgYXJndW1lbnRzLlxuICpcbiAqIENvbW1vbiB1c2UgY2FzZSB3b3VsZCBiZSB0byB1c2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseWAuXG4gKlxuICogIGBgYGpzXG4gKiAgZnVuY3Rpb24gZih4LCB5LCB6KSB7fVxuICogIHZhciBhcmdzID0gWzEsIDIsIDNdO1xuICogIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gKiAgYGBgXG4gKlxuICogV2l0aCBgc3ByZWFkYCB0aGlzIGV4YW1wbGUgY2FuIGJlIHJlLXdyaXR0ZW4uXG4gKlxuICogIGBgYGpzXG4gKiAgc3ByZWFkKGZ1bmN0aW9uKHgsIHksIHopIHt9KShbMSwgMiwgM10pO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvc1xuICpcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvcywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXhpb3NFcnJvcihwYXlsb2FkKSB7XG4gIHJldHVybiB1dGlscyQxLmlzT2JqZWN0KHBheWxvYWQpICYmIChwYXlsb2FkLmlzQXhpb3NFcnJvciA9PT0gdHJ1ZSk7XG59XG5cbmNvbnN0IEh0dHBTdGF0dXNDb2RlID0ge1xuICBDb250aW51ZTogMTAwLFxuICBTd2l0Y2hpbmdQcm90b2NvbHM6IDEwMSxcbiAgUHJvY2Vzc2luZzogMTAyLFxuICBFYXJseUhpbnRzOiAxMDMsXG4gIE9rOiAyMDAsXG4gIENyZWF0ZWQ6IDIwMSxcbiAgQWNjZXB0ZWQ6IDIwMixcbiAgTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOiAyMDMsXG4gIE5vQ29udGVudDogMjA0LFxuICBSZXNldENvbnRlbnQ6IDIwNSxcbiAgUGFydGlhbENvbnRlbnQ6IDIwNixcbiAgTXVsdGlTdGF0dXM6IDIwNyxcbiAgQWxyZWFkeVJlcG9ydGVkOiAyMDgsXG4gIEltVXNlZDogMjI2LFxuICBNdWx0aXBsZUNob2ljZXM6IDMwMCxcbiAgTW92ZWRQZXJtYW5lbnRseTogMzAxLFxuICBGb3VuZDogMzAyLFxuICBTZWVPdGhlcjogMzAzLFxuICBOb3RNb2RpZmllZDogMzA0LFxuICBVc2VQcm94eTogMzA1LFxuICBVbnVzZWQ6IDMwNixcbiAgVGVtcG9yYXJ5UmVkaXJlY3Q6IDMwNyxcbiAgUGVybWFuZW50UmVkaXJlY3Q6IDMwOCxcbiAgQmFkUmVxdWVzdDogNDAwLFxuICBVbmF1dGhvcml6ZWQ6IDQwMSxcbiAgUGF5bWVudFJlcXVpcmVkOiA0MDIsXG4gIEZvcmJpZGRlbjogNDAzLFxuICBOb3RGb3VuZDogNDA0LFxuICBNZXRob2ROb3RBbGxvd2VkOiA0MDUsXG4gIE5vdEFjY2VwdGFibGU6IDQwNixcbiAgUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA0MDcsXG4gIFJlcXVlc3RUaW1lb3V0OiA0MDgsXG4gIENvbmZsaWN0OiA0MDksXG4gIEdvbmU6IDQxMCxcbiAgTGVuZ3RoUmVxdWlyZWQ6IDQxMSxcbiAgUHJlY29uZGl0aW9uRmFpbGVkOiA0MTIsXG4gIFBheWxvYWRUb29MYXJnZTogNDEzLFxuICBVcmlUb29Mb25nOiA0MTQsXG4gIFVuc3VwcG9ydGVkTWVkaWFUeXBlOiA0MTUsXG4gIFJhbmdlTm90U2F0aXNmaWFibGU6IDQxNixcbiAgRXhwZWN0YXRpb25GYWlsZWQ6IDQxNyxcbiAgSW1BVGVhcG90OiA0MTgsXG4gIE1pc2RpcmVjdGVkUmVxdWVzdDogNDIxLFxuICBVbnByb2Nlc3NhYmxlRW50aXR5OiA0MjIsXG4gIExvY2tlZDogNDIzLFxuICBGYWlsZWREZXBlbmRlbmN5OiA0MjQsXG4gIFRvb0Vhcmx5OiA0MjUsXG4gIFVwZ3JhZGVSZXF1aXJlZDogNDI2LFxuICBQcmVjb25kaXRpb25SZXF1aXJlZDogNDI4LFxuICBUb29NYW55UmVxdWVzdHM6IDQyOSxcbiAgUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOiA0MzEsXG4gIFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOiA0NTEsXG4gIEludGVybmFsU2VydmVyRXJyb3I6IDUwMCxcbiAgTm90SW1wbGVtZW50ZWQ6IDUwMSxcbiAgQmFkR2F0ZXdheTogNTAyLFxuICBTZXJ2aWNlVW5hdmFpbGFibGU6IDUwMyxcbiAgR2F0ZXdheVRpbWVvdXQ6IDUwNCxcbiAgSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6IDUwNSxcbiAgVmFyaWFudEFsc29OZWdvdGlhdGVzOiA1MDYsXG4gIEluc3VmZmljaWVudFN0b3JhZ2U6IDUwNyxcbiAgTG9vcERldGVjdGVkOiA1MDgsXG4gIE5vdEV4dGVuZGVkOiA1MTAsXG4gIE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA1MTEsXG59O1xuXG5PYmplY3QuZW50cmllcyhIdHRwU3RhdHVzQ29kZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gIEh0dHBTdGF0dXNDb2RlW3ZhbHVlXSA9IGtleTtcbn0pO1xuXG52YXIgSHR0cFN0YXR1c0NvZGUkMSA9IEh0dHBTdGF0dXNDb2RlO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0Q29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKlxuICogQHJldHVybnMge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZShkZWZhdWx0Q29uZmlnKSB7XG4gIGNvbnN0IGNvbnRleHQgPSBuZXcgQXhpb3MkMShkZWZhdWx0Q29uZmlnKTtcbiAgY29uc3QgaW5zdGFuY2UgPSBiaW5kKEF4aW9zJDEucHJvdG90eXBlLnJlcXVlc3QsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgYXhpb3MucHJvdG90eXBlIHRvIGluc3RhbmNlXG4gIHV0aWxzJDEuZXh0ZW5kKGluc3RhbmNlLCBBeGlvcyQxLnByb3RvdHlwZSwgY29udGV4dCwge2FsbE93bktleXM6IHRydWV9KTtcblxuICAvLyBDb3B5IGNvbnRleHQgdG8gaW5zdGFuY2VcbiAgdXRpbHMkMS5leHRlbmQoaW5zdGFuY2UsIGNvbnRleHQsIG51bGwsIHthbGxPd25LZXlzOiB0cnVlfSk7XG5cbiAgLy8gRmFjdG9yeSBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuICBpbnN0YW5jZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaW5zdGFuY2VDb25maWcpIHtcbiAgICByZXR1cm4gY3JlYXRlSW5zdGFuY2UobWVyZ2VDb25maWcoZGVmYXVsdENvbmZpZywgaW5zdGFuY2VDb25maWcpKTtcbiAgfTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxuY29uc3QgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyQxKTtcblxuLy8gRXhwb3NlIEF4aW9zIGNsYXNzIHRvIGFsbG93IGNsYXNzIGluaGVyaXRhbmNlXG5heGlvcy5BeGlvcyA9IEF4aW9zJDE7XG5cbi8vIEV4cG9zZSBDYW5jZWwgJiBDYW5jZWxUb2tlblxuYXhpb3MuQ2FuY2VsZWRFcnJvciA9IENhbmNlbGVkRXJyb3I7XG5heGlvcy5DYW5jZWxUb2tlbiA9IENhbmNlbFRva2VuJDE7XG5heGlvcy5pc0NhbmNlbCA9IGlzQ2FuY2VsO1xuYXhpb3MuVkVSU0lPTiA9IFZFUlNJT047XG5heGlvcy50b0Zvcm1EYXRhID0gdG9Gb3JtRGF0YTtcblxuLy8gRXhwb3NlIEF4aW9zRXJyb3IgY2xhc3NcbmF4aW9zLkF4aW9zRXJyb3IgPSBBeGlvc0Vycm9yO1xuXG4vLyBhbGlhcyBmb3IgQ2FuY2VsZWRFcnJvciBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuYXhpb3MuQ2FuY2VsID0gYXhpb3MuQ2FuY2VsZWRFcnJvcjtcblxuLy8gRXhwb3NlIGFsbC9zcHJlYWRcbmF4aW9zLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlcykge1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcblxuYXhpb3Muc3ByZWFkID0gc3ByZWFkO1xuXG4vLyBFeHBvc2UgaXNBeGlvc0Vycm9yXG5heGlvcy5pc0F4aW9zRXJyb3IgPSBpc0F4aW9zRXJyb3I7XG5cbi8vIEV4cG9zZSBtZXJnZUNvbmZpZ1xuYXhpb3MubWVyZ2VDb25maWcgPSBtZXJnZUNvbmZpZztcblxuYXhpb3MuQXhpb3NIZWFkZXJzID0gQXhpb3NIZWFkZXJzJDE7XG5cbmF4aW9zLmZvcm1Ub0pTT04gPSB0aGluZyA9PiBmb3JtRGF0YVRvSlNPTih1dGlscyQxLmlzSFRNTEZvcm0odGhpbmcpID8gbmV3IEZvcm1EYXRhKHRoaW5nKSA6IHRoaW5nKTtcblxuYXhpb3MuZ2V0QWRhcHRlciA9IGFkYXB0ZXJzLmdldEFkYXB0ZXI7XG5cbmF4aW9zLkh0dHBTdGF0dXNDb2RlID0gSHR0cFN0YXR1c0NvZGUkMTtcblxuYXhpb3MuZGVmYXVsdCA9IGF4aW9zO1xuXG52YXIgZHM9T2JqZWN0LmRlZmluZVByb3BlcnR5O3ZhciB6Zz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO3ZhciBLZz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lczt2YXIgR2c9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt2YXIgd2U9KHQsZSk9PigpPT4odCYmKGU9dCh0PTApKSxlKTt2YXIgTT0odCxlKT0+KCk9PihlfHx0KChlPXtleHBvcnRzOnt9fSkuZXhwb3J0cyxlKSxlLmV4cG9ydHMpLFF0PSh0LGUpPT57Zm9yKHZhciByIGluIGUpZHModCxyLHtnZXQ6ZVtyXSxlbnVtZXJhYmxlOiEwfSk7fSxRZz0odCxlLHIsaSk9PntpZihlJiZ0eXBlb2YgZT09XCJvYmplY3RcInx8dHlwZW9mIGU9PVwiZnVuY3Rpb25cIilmb3IobGV0IG4gb2YgS2coZSkpIUdnLmNhbGwodCxuKSYmbiE9PXImJmRzKHQsbix7Z2V0OigpPT5lW25dLGVudW1lcmFibGU6IShpPXpnKGUsbikpfHxpLmVudW1lcmFibGV9KTtyZXR1cm4gdH07dmFyIFg9dD0+UWcoZHMoe30sXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdCk7dmFyIEIsXz13ZSgoKT0+e0I9e2RldmljZU1lbW9yeTo4LGhhcmR3YXJlQ29uY3VycmVuY3k6OCxsYW5ndWFnZTpcImVuLVVTXCJ9O30pO3ZhciBQPXt9O1F0KFAse19kZWJ1Z0VuZDooKT0+eXUsX2RlYnVnUHJvY2VzczooKT0+Z3UsX2V2ZW50czooKT0+a3UsX2V2ZW50c0NvdW50OigpPT54dSxfZXhpdGluZzooKT0+WWwsX2ZhdGFsRXhjZXB0aW9uczooKT0+Y3UsX2dldEFjdGl2ZUhhbmRsZXM6KCk9PmV1LF9nZXRBY3RpdmVSZXF1ZXN0czooKT0+WmwsX2tpbGw6KCk9PnJ1LF9saW5rZWRCaW5kaW5nOigpPT5HbCxfbWF4TGlzdGVuZXJzOigpPT5PdSxfcHJlbG9hZF9tb2R1bGVzOigpPT5DdSxfcmF3RGVidWc6KCk9PnpsLF9zdGFydFByb2ZpbGVySWRsZU5vdGlmaWVyOigpPT5idSxfc3RvcFByb2ZpbGVySWRsZU5vdGlmaWVyOigpPT53dSxfdGlja0NhbGxiYWNrOigpPT5wdSxhYm9ydDooKT0+RXUsYWRkTGlzdGVuZXI6KCk9Pk11LGFsbG93ZWROb2RlRW52aXJvbm1lbnRGbGFnczooKT0+bHUsYXJjaDooKT0+eGwsYXJndjooKT0+VWwsYXJndjA6KCk9PlJ1LGFzc2VydDooKT0+dXUsYmluZGluZzooKT0+RmwsY2hkaXI6KCk9PkhsLGNvbmZpZzooKT0+SmwsY3B1VXNhZ2U6KCk9PkZpLGN3ZDooKT0+JGwsZGVidWdQb3J0OigpPT5UdSxkZWZhdWx0OigpPT4kdSxkbG9wZW46KCk9PlhsLGRvbWFpbjooKT0+UWwsZW1pdDooKT0+RHUsZW1pdFdhcm5pbmc6KCk9PmpsLGVudjooKT0+TGwsZXhlY0FyZ3Y6KCk9Pk5sLGV4ZWNQYXRoOigpPT5JdSxleGl0OigpPT5vdSxmZWF0dXJlczooKT0+ZnUsaGFzVW5jYXVnaHRFeGNlcHRpb25DYXB0dXJlQ2FsbGJhY2s6KCk9PmR1LGhydGltZTooKT0+amksa2lsbDooKT0+c3UsbGlzdGVuZXJzOigpPT5XdSxtZW1vcnlVc2FnZTooKT0+bnUsbW9kdWxlTG9hZExpc3Q6KCk9PktsLG5leHRUaWNrOigpPT5QbCxvZmY6KCk9PlV1LG9uOigpPT5idCxvbmNlOigpPT5MdSxvcGVuU3RkaW46KCk9PmF1LHBpZDooKT0+U3UscGxhdGZvcm06KCk9Pk1sLHBwaWQ6KCk9PkF1LHByZXBlbmRMaXN0ZW5lcjooKT0+anUscHJlcGVuZE9uY2VMaXN0ZW5lcjooKT0+RnUscmVhbGx5RXhpdDooKT0+dHUscmVsZWFzZTooKT0+VmwscmVtb3ZlQWxsTGlzdGVuZXJzOigpPT5xdSxyZW1vdmVMaXN0ZW5lcjooKT0+TnUscmVzb3VyY2VVc2FnZTooKT0+aXUsc2V0U291cmNlTWFwc0VuYWJsZWQ6KCk9PkJ1LHNldFVuY2F1Z2h0RXhjZXB0aW9uQ2FwdHVyZUNhbGxiYWNrOigpPT5odSxzdGRlcnI6KCk9Pm11LHN0ZGluOigpPT52dSxzdGRvdXQ6KCk9Pl91LHRpdGxlOigpPT5rbCx1bWFzazooKT0+V2wsdXB0aW1lOigpPT5QdSx2ZXJzaW9uOigpPT5xbCx2ZXJzaW9uczooKT0+RGx9KTtmdW5jdGlvbiB5cyh0KXt0aHJvdyBuZXcgRXJyb3IoXCJOb2RlLmpzIHByb2Nlc3MgXCIrdCtcIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IEpTUE0gY29yZSBvdXRzaWRlIG9mIE5vZGUuanNcIil9ZnVuY3Rpb24gWWcoKXsheHJ8fCFZdHx8KHhyPSExLFl0Lmxlbmd0aD95dD1ZdC5jb25jYXQoeXQpOkRpPS0xLHl0Lmxlbmd0aCYmQmwoKSk7fWZ1bmN0aW9uIEJsKCl7aWYoIXhyKXt2YXIgdD1zZXRUaW1lb3V0KFlnLDApO3hyPSEwO2Zvcih2YXIgZT15dC5sZW5ndGg7ZTspe2ZvcihZdD15dCx5dD1bXTsrK0RpPGU7KVl0JiZZdFtEaV0ucnVuKCk7RGk9LTEsZT15dC5sZW5ndGg7fVl0PW51bGwseHI9ITEsY2xlYXJUaW1lb3V0KHQpO319ZnVuY3Rpb24gUGwodCl7dmFyIGU9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZvcih2YXIgcj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspZVtyLTFdPWFyZ3VtZW50c1tyXTt5dC5wdXNoKG5ldyBPbCh0LGUpKSx5dC5sZW5ndGg9PT0xJiYheHImJnNldFRpbWVvdXQoQmwsMCk7fWZ1bmN0aW9uIE9sKHQsZSl7dGhpcy5mdW49dCx0aGlzLmFycmF5PWU7fWZ1bmN0aW9uIHZlKCl7fWZ1bmN0aW9uIEdsKHQpe3lzKFwiX2xpbmtlZEJpbmRpbmdcIik7fWZ1bmN0aW9uIFhsKHQpe3lzKFwiZGxvcGVuXCIpO31mdW5jdGlvbiBabCgpe3JldHVybiBbXX1mdW5jdGlvbiBldSgpe3JldHVybiBbXX1mdW5jdGlvbiB1dSh0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcihlfHxcImFzc2VydGlvbiBlcnJvclwiKX1mdW5jdGlvbiBkdSgpe3JldHVybiAhMX1mdW5jdGlvbiBQdSgpe3JldHVybiBNdC5ub3coKS8xZTN9ZnVuY3Rpb24gamkodCl7dmFyIGU9TWF0aC5mbG9vcigoRGF0ZS5ub3coKS1NdC5ub3coKSkqLjAwMSkscj1NdC5ub3coKSouMDAxLGk9TWF0aC5mbG9vcihyKStlLG49TWF0aC5mbG9vcihyJTEqMWU5KTtyZXR1cm4gdCYmKGk9aS10WzBdLG49bi10WzFdLG48MCYmKGktLSxuKz1ncykpLFtpLG5dfWZ1bmN0aW9uIGJ0KCl7cmV0dXJuICR1fWZ1bmN0aW9uIFd1KHQpe3JldHVybiBbXX12YXIgeXQseHIsWXQsRGksa2wseGwsTWwsTGwsVWwsTmwscWwsRGwsamwsRmwsV2wsJGwsSGwsVmwsemwsS2wsUWwsWWwsSmwsdHUscnUsRmksaXUsbnUsc3Usb3UsYXUsbHUsZnUsY3UsaHUscHUsZ3UseXUsYnUsd3UsX3UsbXUsdnUsRXUsU3UsQXUsSXUsVHUsUnUsQ3UsQnUsTXQscHMsZ3MsT3Usa3UseHUsTXUsTHUsVXUsTnUscXUsRHUsanUsRnUsJHUsSHU9d2UoKCk9Pnt2KCk7bSgpO18oKTt5dD1bXSx4cj0hMSxEaT0tMTtPbC5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dGhpcy5mdW4uYXBwbHkobnVsbCx0aGlzLmFycmF5KTt9O2tsPVwiYnJvd3NlclwiLHhsPVwieDY0XCIsTWw9XCJicm93c2VyXCIsTGw9e1BBVEg6XCIvdXNyL2JpblwiLExBTkc6Qi5sYW5ndWFnZStcIi5VVEYtOFwiLFBXRDpcIi9cIixIT01FOlwiL2hvbWVcIixUTVA6XCIvdG1wXCJ9LFVsPVtcIi91c3IvYmluL25vZGVcIl0sTmw9W10scWw9XCJ2MTYuOC4wXCIsRGw9e30samw9ZnVuY3Rpb24odCxlKXtjb25zb2xlLndhcm4oKGU/ZStcIjogXCI6XCJcIikrdCk7fSxGbD1mdW5jdGlvbih0KXt5cyhcImJpbmRpbmdcIik7fSxXbD1mdW5jdGlvbih0KXtyZXR1cm4gMH0sJGw9ZnVuY3Rpb24oKXtyZXR1cm4gXCIvXCJ9LEhsPWZ1bmN0aW9uKHQpe30sVmw9e25hbWU6XCJub2RlXCIsc291cmNlVXJsOlwiXCIsaGVhZGVyc1VybDpcIlwiLGxpYlVybDpcIlwifTt6bD12ZSxLbD1bXTtRbD17fSxZbD0hMSxKbD17fTt0dT12ZSxydT12ZSxGaT1mdW5jdGlvbigpe3JldHVybiB7fX0saXU9RmksbnU9Rmksc3U9dmUsb3U9dmUsYXU9dmUsbHU9e307ZnU9e2luc3BlY3RvcjohMSxkZWJ1ZzohMSx1djohMSxpcHY2OiExLHRsc19hbHBuOiExLHRsc19zbmk6ITEsdGxzX29jc3A6ITEsdGxzOiExLGNhY2hlZF9idWlsdGluczohMH0sY3U9dmUsaHU9dmU7cHU9dmUsZ3U9dmUseXU9dmUsYnU9dmUsd3U9dmUsX3U9dm9pZCAwLG11PXZvaWQgMCx2dT12b2lkIDAsRXU9dmUsU3U9MixBdT0xLEl1PVwiL2Jpbi91c3Ivbm9kZVwiLFR1PTkyMjksUnU9XCJub2RlXCIsQ3U9W10sQnU9dmUsTXQ9e25vdzp0eXBlb2YgcGVyZm9ybWFuY2U8XCJ1XCI/cGVyZm9ybWFuY2Uubm93LmJpbmQocGVyZm9ybWFuY2UpOnZvaWQgMCx0aW1pbmc6dHlwZW9mIHBlcmZvcm1hbmNlPFwidVwiP3BlcmZvcm1hbmNlLnRpbWluZzp2b2lkIDB9O010Lm5vdz09PXZvaWQgMCYmKHBzPURhdGUubm93KCksTXQudGltaW5nJiZNdC50aW1pbmcubmF2aWdhdGlvblN0YXJ0JiYocHM9TXQudGltaW5nLm5hdmlnYXRpb25TdGFydCksTXQubm93PSgpPT5EYXRlLm5vdygpLXBzKTtncz0xZTk7amkuYmlnaW50PWZ1bmN0aW9uKHQpe3ZhciBlPWppKHQpO3JldHVybiB0eXBlb2YgQmlnSW50PlwidVwiP2VbMF0qZ3MrZVsxXTpCaWdJbnQoZVswXSpncykrQmlnSW50KGVbMV0pfTtPdT0xMCxrdT17fSx4dT0wO011PWJ0LEx1PWJ0LFV1PWJ0LE51PWJ0LHF1PWJ0LER1PXZlLGp1PWJ0LEZ1PWJ0OyR1PXt2ZXJzaW9uOnFsLHZlcnNpb25zOkRsLGFyY2g6eGwscGxhdGZvcm06TWwscmVsZWFzZTpWbCxfcmF3RGVidWc6emwsbW9kdWxlTG9hZExpc3Q6S2wsYmluZGluZzpGbCxfbGlua2VkQmluZGluZzpHbCxfZXZlbnRzOmt1LF9ldmVudHNDb3VudDp4dSxfbWF4TGlzdGVuZXJzOk91LG9uOmJ0LGFkZExpc3RlbmVyOk11LG9uY2U6THUsb2ZmOlV1LHJlbW92ZUxpc3RlbmVyOk51LHJlbW92ZUFsbExpc3RlbmVyczpxdSxlbWl0OkR1LHByZXBlbmRMaXN0ZW5lcjpqdSxwcmVwZW5kT25jZUxpc3RlbmVyOkZ1LGxpc3RlbmVyczpXdSxkb21haW46UWwsX2V4aXRpbmc6WWwsY29uZmlnOkpsLGRsb3BlbjpYbCx1cHRpbWU6UHUsX2dldEFjdGl2ZVJlcXVlc3RzOlpsLF9nZXRBY3RpdmVIYW5kbGVzOmV1LHJlYWxseUV4aXQ6dHUsX2tpbGw6cnUsY3B1VXNhZ2U6RmkscmVzb3VyY2VVc2FnZTppdSxtZW1vcnlVc2FnZTpudSxraWxsOnN1LGV4aXQ6b3Usb3BlblN0ZGluOmF1LGFsbG93ZWROb2RlRW52aXJvbm1lbnRGbGFnczpsdSxhc3NlcnQ6dXUsZmVhdHVyZXM6ZnUsX2ZhdGFsRXhjZXB0aW9uczpjdSxzZXRVbmNhdWdodEV4Y2VwdGlvbkNhcHR1cmVDYWxsYmFjazpodSxoYXNVbmNhdWdodEV4Y2VwdGlvbkNhcHR1cmVDYWxsYmFjazpkdSxlbWl0V2FybmluZzpqbCxuZXh0VGljazpQbCxfdGlja0NhbGxiYWNrOnB1LF9kZWJ1Z1Byb2Nlc3M6Z3UsX2RlYnVnRW5kOnl1LF9zdGFydFByb2ZpbGVySWRsZU5vdGlmaWVyOmJ1LF9zdG9wUHJvZmlsZXJJZGxlTm90aWZpZXI6d3Usc3Rkb3V0Ol91LHN0ZGluOnZ1LHN0ZGVycjptdSxhYm9ydDpFdSx1bWFzazpXbCxjaGRpcjpIbCxjd2Q6JGwsZW52OkxsLHRpdGxlOmtsLGFyZ3Y6VWwsZXhlY0FyZ3Y6TmwscGlkOlN1LHBwaWQ6QXUsZXhlY1BhdGg6SXUsZGVidWdQb3J0OlR1LGhydGltZTpqaSxhcmd2MDpSdSxfcHJlbG9hZF9tb2R1bGVzOkN1LHNldFNvdXJjZU1hcHNFbmFibGVkOkJ1fTt9KTt2YXIgbT13ZSgoKT0+e0h1KCk7fSk7dmFyIF9lPXt9O1F0KF9lLHtCdWZmZXI6KCk9PngsSU5TUEVDVF9NQVhfQllURVM6KCk9PmV5LGRlZmF1bHQ6KCk9Pkx0LGtNYXhMZW5ndGg6KCk9PnR5fSk7ZnVuY3Rpb24gSmcoKXtpZihWdSlyZXR1cm4gdWk7VnU9ITAsdWkuYnl0ZUxlbmd0aD1hLHVpLnRvQnl0ZUFycmF5PWMsdWkuZnJvbUJ5dGVBcnJheT1nO2Zvcih2YXIgdD1bXSxlPVtdLHI9dHlwZW9mIFVpbnQ4QXJyYXk8XCJ1XCI/VWludDhBcnJheTpBcnJheSxpPVwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL1wiLG49MCxvPWkubGVuZ3RoO248bzsrK24pdFtuXT1pW25dLGVbaS5jaGFyQ29kZUF0KG4pXT1uO2VbXCItXCIuY2hhckNvZGVBdCgwKV09NjIsZVtcIl9cIi5jaGFyQ29kZUF0KDApXT02MztmdW5jdGlvbiBzKHkpe3ZhciB3PXkubGVuZ3RoO2lmKHclND4wKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDRcIik7dmFyIEU9eS5pbmRleE9mKFwiPVwiKTtFPT09LTEmJihFPXcpO3ZhciBTPUU9PT13PzA6NC1FJTQ7cmV0dXJuIFtFLFNdfWZ1bmN0aW9uIGEoeSl7dmFyIHc9cyh5KSxFPXdbMF0sUz13WzFdO3JldHVybiAoRStTKSozLzQtU31mdW5jdGlvbiB1KHksdyxFKXtyZXR1cm4gKHcrRSkqMy80LUV9ZnVuY3Rpb24gYyh5KXt2YXIgdyxFPXMoeSksUz1FWzBdLEk9RVsxXSxDPW5ldyByKHUoeSxTLEkpKSxSPTAsVT1JPjA/Uy00OlMsTjtmb3IoTj0wO048VTtOKz00KXc9ZVt5LmNoYXJDb2RlQXQoTildPDwxOHxlW3kuY2hhckNvZGVBdChOKzEpXTw8MTJ8ZVt5LmNoYXJDb2RlQXQoTisyKV08PDZ8ZVt5LmNoYXJDb2RlQXQoTiszKV0sQ1tSKytdPXc+PjE2JjI1NSxDW1IrK109dz4+OCYyNTUsQ1tSKytdPXcmMjU1O3JldHVybiBJPT09MiYmKHc9ZVt5LmNoYXJDb2RlQXQoTildPDwyfGVbeS5jaGFyQ29kZUF0KE4rMSldPj40LENbUisrXT13JjI1NSksST09PTEmJih3PWVbeS5jaGFyQ29kZUF0KE4pXTw8MTB8ZVt5LmNoYXJDb2RlQXQoTisxKV08PDR8ZVt5LmNoYXJDb2RlQXQoTisyKV0+PjIsQ1tSKytdPXc+PjgmMjU1LENbUisrXT13JjI1NSksQ31mdW5jdGlvbiBoKHkpe3JldHVybiB0W3k+PjE4JjYzXSt0W3k+PjEyJjYzXSt0W3k+PjYmNjNdK3RbeSY2M119ZnVuY3Rpb24gZCh5LHcsRSl7Zm9yKHZhciBTLEk9W10sQz13O0M8RTtDKz0zKVM9KHlbQ108PDE2JjE2NzExNjgwKSsoeVtDKzFdPDw4JjY1MjgwKSsoeVtDKzJdJjI1NSksSS5wdXNoKGgoUykpO3JldHVybiBJLmpvaW4oXCJcIil9ZnVuY3Rpb24gZyh5KXtmb3IodmFyIHcsRT15Lmxlbmd0aCxTPUUlMyxJPVtdLEM9MTYzODMsUj0wLFU9RS1TO1I8VTtSKz1DKUkucHVzaChkKHksUixSK0M+VT9VOlIrQykpO3JldHVybiBTPT09MT8odz15W0UtMV0sSS5wdXNoKHRbdz4+Ml0rdFt3PDw0JjYzXStcIj09XCIpKTpTPT09MiYmKHc9KHlbRS0yXTw8OCkreVtFLTFdLEkucHVzaCh0W3c+PjEwXSt0W3c+PjQmNjNdK3Rbdzw8MiY2M10rXCI9XCIpKSxJLmpvaW4oXCJcIil9cmV0dXJuIHVpfWZ1bmN0aW9uIFhnKCl7aWYoenUpcmV0dXJuIFdpO3p1PSEwO3JldHVybiBXaS5yZWFkPWZ1bmN0aW9uKHQsZSxyLGksbil7dmFyIG8scyxhPW4qOC1pLTEsdT0oMTw8YSktMSxjPXU+PjEsaD0tNyxkPXI/bi0xOjAsZz1yPy0xOjEseT10W2UrZF07Zm9yKGQrPWcsbz15JigxPDwtaCktMSx5Pj49LWgsaCs9YTtoPjA7bz1vKjI1Nit0W2UrZF0sZCs9ZyxoLT04KTtmb3Iocz1vJigxPDwtaCktMSxvPj49LWgsaCs9aTtoPjA7cz1zKjI1Nit0W2UrZF0sZCs9ZyxoLT04KTtpZihvPT09MClvPTEtYztlbHNlIHtpZihvPT09dSlyZXR1cm4gcz9OYU46KHk/LTE6MSkqKDEvMCk7cz1zK01hdGgucG93KDIsaSksbz1vLWM7fXJldHVybiAoeT8tMToxKSpzKk1hdGgucG93KDIsby1pKX0sV2kud3JpdGU9ZnVuY3Rpb24odCxlLHIsaSxuLG8pe3ZhciBzLGEsdSxjPW8qOC1uLTEsaD0oMTw8YyktMSxkPWg+PjEsZz1uPT09MjM/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLHk9aT8wOm8tMSx3PWk/MTotMSxFPWU8MHx8ZT09PTAmJjEvZTwwPzE6MDtmb3IoZT1NYXRoLmFicyhlKSxpc05hTihlKXx8ZT09PTEvMD8oYT1pc05hTihlKT8xOjAscz1oKToocz1NYXRoLmZsb29yKE1hdGgubG9nKGUpL01hdGguTE4yKSxlKih1PU1hdGgucG93KDIsLXMpKTwxJiYocy0tLHUqPTIpLHMrZD49MT9lKz1nL3U6ZSs9ZypNYXRoLnBvdygyLDEtZCksZSp1Pj0yJiYocysrLHUvPTIpLHMrZD49aD8oYT0wLHM9aCk6cytkPj0xPyhhPShlKnUtMSkqTWF0aC5wb3coMixuKSxzPXMrZCk6KGE9ZSpNYXRoLnBvdygyLGQtMSkqTWF0aC5wb3coMixuKSxzPTApKTtuPj04O3Rbcit5XT1hJjI1NSx5Kz13LGEvPTI1NixuLT04KTtmb3Iocz1zPDxufGEsYys9bjtjPjA7dFtyK3ldPXMmMjU1LHkrPXcscy89MjU2LGMtPTgpO3Rbcit5LXddfD1FKjEyODt9LFdpfWZ1bmN0aW9uIFpnKCl7aWYoS3UpcmV0dXJuIEp0O0t1PSEwO2xldCB0PUpnKCksZT1YZygpLHI9dHlwZW9mIFN5bWJvbD09XCJmdW5jdGlvblwiJiZ0eXBlb2YgU3ltYm9sLmZvcj09XCJmdW5jdGlvblwiP1N5bWJvbC5mb3IoXCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbVwiKTpudWxsO0p0LkJ1ZmZlcj1zLEp0LlNsb3dCdWZmZXI9SSxKdC5JTlNQRUNUX01BWF9CWVRFUz01MDtsZXQgaT0yMTQ3NDgzNjQ3O0p0LmtNYXhMZW5ndGg9aSxzLlRZUEVEX0FSUkFZX1NVUFBPUlQ9bigpLCFzLlRZUEVEX0FSUkFZX1NVUFBPUlQmJnR5cGVvZiBjb25zb2xlPFwidVwiJiZ0eXBlb2YgY29uc29sZS5lcnJvcj09XCJmdW5jdGlvblwiJiZjb25zb2xlLmVycm9yKFwiVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGBidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuXCIpO2Z1bmN0aW9uIG4oKXt0cnl7bGV0IHA9bmV3IFVpbnQ4QXJyYXkoMSksbD17Zm9vOmZ1bmN0aW9uKCl7cmV0dXJuIDQyfX07cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihsLFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YocCxsKSxwLmZvbygpPT09NDJ9Y2F0Y2h7cmV0dXJuICExfX1PYmplY3QuZGVmaW5lUHJvcGVydHkocy5wcm90b3R5cGUsXCJwYXJlbnRcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihzLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ1ZmZlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocy5wcm90b3R5cGUsXCJvZmZzZXRcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihzLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ5dGVPZmZzZXR9fSk7ZnVuY3Rpb24gbyhwKXtpZihwPmkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBcIicrcCsnXCIgaXMgaW52YWxpZCBmb3Igb3B0aW9uIFwic2l6ZVwiJyk7bGV0IGw9bmV3IFVpbnQ4QXJyYXkocCk7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihsLHMucHJvdG90eXBlKSxsfWZ1bmN0aW9uIHMocCxsLGYpe2lmKHR5cGVvZiBwPT1cIm51bWJlclwiKXtpZih0eXBlb2YgbD09XCJzdHJpbmdcIil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJzdHJpbmdcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO3JldHVybiBoKHApfXJldHVybiBhKHAsbCxmKX1zLnBvb2xTaXplPTgxOTI7ZnVuY3Rpb24gYShwLGwsZil7aWYodHlwZW9mIHA9PVwic3RyaW5nXCIpcmV0dXJuIGQocCxsKTtpZihBcnJheUJ1ZmZlci5pc1ZpZXcocCkpcmV0dXJuIHkocCk7aWYocD09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgXCIrdHlwZW9mIHApO2lmKFllKHAsQXJyYXlCdWZmZXIpfHxwJiZZZShwLmJ1ZmZlcixBcnJheUJ1ZmZlcil8fHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcjxcInVcIiYmKFllKHAsU2hhcmVkQXJyYXlCdWZmZXIpfHxwJiZZZShwLmJ1ZmZlcixTaGFyZWRBcnJheUJ1ZmZlcikpKXJldHVybiB3KHAsbCxmKTtpZih0eXBlb2YgcD09XCJudW1iZXJcIil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO2xldCBiPXAudmFsdWVPZiYmcC52YWx1ZU9mKCk7aWYoYiE9bnVsbCYmYiE9PXApcmV0dXJuIHMuZnJvbShiLGwsZik7bGV0IEE9RShwKTtpZihBKXJldHVybiBBO2lmKHR5cGVvZiBTeW1ib2w8XCJ1XCImJlN5bWJvbC50b1ByaW1pdGl2ZSE9bnVsbCYmdHlwZW9mIHBbU3ltYm9sLnRvUHJpbWl0aXZlXT09XCJmdW5jdGlvblwiKXJldHVybiBzLmZyb20ocFtTeW1ib2wudG9QcmltaXRpdmVdKFwic3RyaW5nXCIpLGwsZik7dGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlIFwiK3R5cGVvZiBwKX1zLmZyb209ZnVuY3Rpb24ocCxsLGYpe3JldHVybiBhKHAsbCxmKX0sT2JqZWN0LnNldFByb3RvdHlwZU9mKHMucHJvdG90eXBlLFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YocyxVaW50OEFycmF5KTtmdW5jdGlvbiB1KHApe2lmKHR5cGVvZiBwIT1cIm51bWJlclwiKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKTtpZihwPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBcIicrcCsnXCIgaXMgaW52YWxpZCBmb3Igb3B0aW9uIFwic2l6ZVwiJyl9ZnVuY3Rpb24gYyhwLGwsZil7cmV0dXJuIHUocCkscDw9MD9vKHApOmwhPT12b2lkIDA/dHlwZW9mIGY9PVwic3RyaW5nXCI/byhwKS5maWxsKGwsZik6byhwKS5maWxsKGwpOm8ocCl9cy5hbGxvYz1mdW5jdGlvbihwLGwsZil7cmV0dXJuIGMocCxsLGYpfTtmdW5jdGlvbiBoKHApe3JldHVybiB1KHApLG8ocDwwPzA6UyhwKXwwKX1zLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHApe3JldHVybiBoKHApfSxzLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihwKXtyZXR1cm4gaChwKX07ZnVuY3Rpb24gZChwLGwpe2lmKCh0eXBlb2YgbCE9XCJzdHJpbmdcInx8bD09PVwiXCIpJiYobD1cInV0ZjhcIiksIXMuaXNFbmNvZGluZyhsKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrbCk7bGV0IGY9QyhwLGwpfDAsYj1vKGYpLEE9Yi53cml0ZShwLGwpO3JldHVybiBBIT09ZiYmKGI9Yi5zbGljZSgwLEEpKSxifWZ1bmN0aW9uIGcocCl7bGV0IGw9cC5sZW5ndGg8MD8wOlMocC5sZW5ndGgpfDAsZj1vKGwpO2ZvcihsZXQgYj0wO2I8bDtiKz0xKWZbYl09cFtiXSYyNTU7cmV0dXJuIGZ9ZnVuY3Rpb24geShwKXtpZihZZShwLFVpbnQ4QXJyYXkpKXtsZXQgbD1uZXcgVWludDhBcnJheShwKTtyZXR1cm4gdyhsLmJ1ZmZlcixsLmJ5dGVPZmZzZXQsbC5ieXRlTGVuZ3RoKX1yZXR1cm4gZyhwKX1mdW5jdGlvbiB3KHAsbCxmKXtpZihsPDB8fHAuYnl0ZUxlbmd0aDxsKXRocm93IG5ldyBSYW5nZUVycm9yKCdcIm9mZnNldFwiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO2lmKHAuYnl0ZUxlbmd0aDxsKyhmfHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJsZW5ndGhcIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTtsZXQgYjtyZXR1cm4gbD09PXZvaWQgMCYmZj09PXZvaWQgMD9iPW5ldyBVaW50OEFycmF5KHApOmY9PT12b2lkIDA/Yj1uZXcgVWludDhBcnJheShwLGwpOmI9bmV3IFVpbnQ4QXJyYXkocCxsLGYpLE9iamVjdC5zZXRQcm90b3R5cGVPZihiLHMucHJvdG90eXBlKSxifWZ1bmN0aW9uIEUocCl7aWYocy5pc0J1ZmZlcihwKSl7bGV0IGw9UyhwLmxlbmd0aCl8MCxmPW8obCk7cmV0dXJuIGYubGVuZ3RoPT09MHx8cC5jb3B5KGYsMCwwLGwpLGZ9aWYocC5sZW5ndGghPT12b2lkIDApcmV0dXJuIHR5cGVvZiBwLmxlbmd0aCE9XCJudW1iZXJcInx8aHMocC5sZW5ndGgpP28oMCk6ZyhwKTtpZihwLnR5cGU9PT1cIkJ1ZmZlclwiJiZBcnJheS5pc0FycmF5KHAuZGF0YSkpcmV0dXJuIGcocC5kYXRhKX1mdW5jdGlvbiBTKHApe2lmKHA+PWkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4XCIraS50b1N0cmluZygxNikrXCIgYnl0ZXNcIik7cmV0dXJuIHB8MH1mdW5jdGlvbiBJKHApe3JldHVybiArcCE9cCYmKHA9MCkscy5hbGxvYygrcCl9cy5pc0J1ZmZlcj1mdW5jdGlvbihsKXtyZXR1cm4gbCE9bnVsbCYmbC5faXNCdWZmZXI9PT0hMCYmbCE9PXMucHJvdG90eXBlfSxzLmNvbXBhcmU9ZnVuY3Rpb24obCxmKXtpZihZZShsLFVpbnQ4QXJyYXkpJiYobD1zLmZyb20obCxsLm9mZnNldCxsLmJ5dGVMZW5ndGgpKSxZZShmLFVpbnQ4QXJyYXkpJiYoZj1zLmZyb20oZixmLm9mZnNldCxmLmJ5dGVMZW5ndGgpKSwhcy5pc0J1ZmZlcihsKXx8IXMuaXNCdWZmZXIoZikpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiYnVmMVwiLCBcImJ1ZjJcIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKGw9PT1mKXJldHVybiAwO2xldCBiPWwubGVuZ3RoLEE9Zi5sZW5ndGg7Zm9yKGxldCBUPTAsTz1NYXRoLm1pbihiLEEpO1Q8TzsrK1QpaWYobFtUXSE9PWZbVF0pe2I9bFtUXSxBPWZbVF07YnJlYWt9cmV0dXJuIGI8QT8tMTpBPGI/MTowfSxzLmlzRW5jb2Rpbmc9ZnVuY3Rpb24obCl7c3dpdGNoKFN0cmluZyhsKS50b0xvd2VyQ2FzZSgpKXtjYXNlXCJoZXhcIjpjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpjYXNlXCJhc2NpaVwiOmNhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOmNhc2VcImJhc2U2NFwiOmNhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiAhMDtkZWZhdWx0OnJldHVybiAhMX19LHMuY29uY2F0PWZ1bmN0aW9uKGwsZil7aWYoIUFycmF5LmlzQXJyYXkobCkpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYobC5sZW5ndGg9PT0wKXJldHVybiBzLmFsbG9jKDApO2xldCBiO2lmKGY9PT12b2lkIDApZm9yKGY9MCxiPTA7YjxsLmxlbmd0aDsrK2IpZis9bFtiXS5sZW5ndGg7bGV0IEE9cy5hbGxvY1Vuc2FmZShmKSxUPTA7Zm9yKGI9MDtiPGwubGVuZ3RoOysrYil7bGV0IE89bFtiXTtpZihZZShPLFVpbnQ4QXJyYXkpKVQrTy5sZW5ndGg+QS5sZW5ndGg/KHMuaXNCdWZmZXIoTyl8fChPPXMuZnJvbShPKSksTy5jb3B5KEEsVCkpOlVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKEEsTyxUKTtlbHNlIGlmKHMuaXNCdWZmZXIoTykpTy5jb3B5KEEsVCk7ZWxzZSB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtUKz1PLmxlbmd0aDt9cmV0dXJuIEF9O2Z1bmN0aW9uIEMocCxsKXtpZihzLmlzQnVmZmVyKHApKXJldHVybiBwLmxlbmd0aDtpZihBcnJheUJ1ZmZlci5pc1ZpZXcocCl8fFllKHAsQXJyYXlCdWZmZXIpKXJldHVybiBwLmJ5dGVMZW5ndGg7aWYodHlwZW9mIHAhPVwic3RyaW5nXCIpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwic3RyaW5nXCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3IgQXJyYXlCdWZmZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgcCk7bGV0IGY9cC5sZW5ndGgsYj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXT09PSEwO2lmKCFiJiZmPT09MClyZXR1cm4gMDtsZXQgQT0hMTtmb3IoOzspc3dpdGNoKGwpe2Nhc2VcImFzY2lpXCI6Y2FzZVwibGF0aW4xXCI6Y2FzZVwiYmluYXJ5XCI6cmV0dXJuIGY7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuIGNzKHApLmxlbmd0aDtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4gZioyO2Nhc2VcImhleFwiOnJldHVybiBmPj4+MTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4gQ2wocCkubGVuZ3RoO2RlZmF1bHQ6aWYoQSlyZXR1cm4gYj8tMTpjcyhwKS5sZW5ndGg7bD0oXCJcIitsKS50b0xvd2VyQ2FzZSgpLEE9ITA7fX1zLmJ5dGVMZW5ndGg9QztmdW5jdGlvbiBSKHAsbCxmKXtsZXQgYj0hMTtpZigobD09PXZvaWQgMHx8bDwwKSYmKGw9MCksbD50aGlzLmxlbmd0aHx8KChmPT09dm9pZCAwfHxmPnRoaXMubGVuZ3RoKSYmKGY9dGhpcy5sZW5ndGgpLGY8PTApfHwoZj4+Pj0wLGw+Pj49MCxmPD1sKSlyZXR1cm4gXCJcIjtmb3IocHx8KHA9XCJ1dGY4XCIpOzspc3dpdGNoKHApe2Nhc2VcImhleFwiOnJldHVybiBOZyh0aGlzLGwsZik7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuIENyKHRoaXMsbCxmKTtjYXNlXCJhc2NpaVwiOnJldHVybiB1cyh0aGlzLGwsZik7Y2FzZVwibGF0aW4xXCI6Y2FzZVwiYmluYXJ5XCI6cmV0dXJuIFVnKHRoaXMsbCxmKTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4gcGUodGhpcyxsLGYpO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiBxZyh0aGlzLGwsZik7ZGVmYXVsdDppZihiKXRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmtub3duIGVuY29kaW5nOiBcIitwKTtwPShwK1wiXCIpLnRvTG93ZXJDYXNlKCksYj0hMDt9fXMucHJvdG90eXBlLl9pc0J1ZmZlcj0hMDtmdW5jdGlvbiBVKHAsbCxmKXtsZXQgYj1wW2xdO3BbbF09cFtmXSxwW2ZdPWI7fXMucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe2xldCBsPXRoaXMubGVuZ3RoO2lmKGwlMiE9PTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0c1wiKTtmb3IobGV0IGY9MDtmPGw7Zis9MilVKHRoaXMsZixmKzEpO3JldHVybiB0aGlzfSxzLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXtsZXQgbD10aGlzLmxlbmd0aDtpZihsJTQhPT0wKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHNcIik7Zm9yKGxldCBmPTA7ZjxsO2YrPTQpVSh0aGlzLGYsZiszKSxVKHRoaXMsZisxLGYrMik7cmV0dXJuIHRoaXN9LHMucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe2xldCBsPXRoaXMubGVuZ3RoO2lmKGwlOCE9PTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0c1wiKTtmb3IobGV0IGY9MDtmPGw7Zis9OClVKHRoaXMsZixmKzcpLFUodGhpcyxmKzEsZis2KSxVKHRoaXMsZisyLGYrNSksVSh0aGlzLGYrMyxmKzQpO3JldHVybiB0aGlzfSxzLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe2xldCBsPXRoaXMubGVuZ3RoO3JldHVybiBsPT09MD9cIlwiOmFyZ3VtZW50cy5sZW5ndGg9PT0wP0NyKHRoaXMsMCxsKTpSLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0scy5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmc9cy5wcm90b3R5cGUudG9TdHJpbmcscy5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGwpe2lmKCFzLmlzQnVmZmVyKGwpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyXCIpO3JldHVybiB0aGlzPT09bD8hMDpzLmNvbXBhcmUodGhpcyxsKT09PTB9LHMucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtsZXQgbD1cIlwiLGY9SnQuSU5TUEVDVF9NQVhfQllURVM7cmV0dXJuIGw9dGhpcy50b1N0cmluZyhcImhleFwiLDAsZikucmVwbGFjZSgvKC57Mn0pL2csXCIkMSBcIikudHJpbSgpLHRoaXMubGVuZ3RoPmYmJihsKz1cIiAuLi4gXCIpLFwiPEJ1ZmZlciBcIitsK1wiPlwifSxyJiYocy5wcm90b3R5cGVbcl09cy5wcm90b3R5cGUuaW5zcGVjdCkscy5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihsLGYsYixBLFQpe2lmKFllKGwsVWludDhBcnJheSkmJihsPXMuZnJvbShsLGwub2Zmc2V0LGwuYnl0ZUxlbmd0aCkpLCFzLmlzQnVmZmVyKGwpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInRhcmdldFwiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgbCk7aWYoZj09PXZvaWQgMCYmKGY9MCksYj09PXZvaWQgMCYmKGI9bD9sLmxlbmd0aDowKSxBPT09dm9pZCAwJiYoQT0wKSxUPT09dm9pZCAwJiYoVD10aGlzLmxlbmd0aCksZjwwfHxiPmwubGVuZ3RofHxBPDB8fFQ+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJvdXQgb2YgcmFuZ2UgaW5kZXhcIik7aWYoQT49VCYmZj49YilyZXR1cm4gMDtpZihBPj1UKXJldHVybiAtMTtpZihmPj1iKXJldHVybiAxO2lmKGY+Pj49MCxiPj4+PTAsQT4+Pj0wLFQ+Pj49MCx0aGlzPT09bClyZXR1cm4gMDtsZXQgTz1ULUEsJD1iLWYsc2U9TWF0aC5taW4oTywkKSx0ZT10aGlzLnNsaWNlKEEsVCksb2U9bC5zbGljZShmLGIpO2ZvcihsZXQgSj0wO0o8c2U7KytKKWlmKHRlW0pdIT09b2VbSl0pe089dGVbSl0sJD1vZVtKXTticmVha31yZXR1cm4gTzwkPy0xOiQ8Tz8xOjB9O2Z1bmN0aW9uIE4ocCxsLGYsYixBKXtpZihwLmxlbmd0aD09PTApcmV0dXJuIC0xO2lmKHR5cGVvZiBmPT1cInN0cmluZ1wiPyhiPWYsZj0wKTpmPjIxNDc0ODM2NDc/Zj0yMTQ3NDgzNjQ3OmY8LTIxNDc0ODM2NDgmJihmPS0yMTQ3NDgzNjQ4KSxmPStmLGhzKGYpJiYoZj1BPzA6cC5sZW5ndGgtMSksZjwwJiYoZj1wLmxlbmd0aCtmKSxmPj1wLmxlbmd0aCl7aWYoQSlyZXR1cm4gLTE7Zj1wLmxlbmd0aC0xO31lbHNlIGlmKGY8MClpZihBKWY9MDtlbHNlIHJldHVybiAtMTtpZih0eXBlb2YgbD09XCJzdHJpbmdcIiYmKGw9cy5mcm9tKGwsYikpLHMuaXNCdWZmZXIobCkpcmV0dXJuIGwubGVuZ3RoPT09MD8tMTpXKHAsbCxmLGIsQSk7aWYodHlwZW9mIGw9PVwibnVtYmVyXCIpcmV0dXJuIGw9bCYyNTUsdHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y9PVwiZnVuY3Rpb25cIj9BP1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChwLGwsZik6VWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChwLGwsZik6VyhwLFtsXSxmLGIsQSk7dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlclwiKX1mdW5jdGlvbiBXKHAsbCxmLGIsQSl7bGV0IFQ9MSxPPXAubGVuZ3RoLCQ9bC5sZW5ndGg7aWYoYiE9PXZvaWQgMCYmKGI9U3RyaW5nKGIpLnRvTG93ZXJDYXNlKCksYj09PVwidWNzMlwifHxiPT09XCJ1Y3MtMlwifHxiPT09XCJ1dGYxNmxlXCJ8fGI9PT1cInV0Zi0xNmxlXCIpKXtpZihwLmxlbmd0aDwyfHxsLmxlbmd0aDwyKXJldHVybiAtMTtUPTIsTy89MiwkLz0yLGYvPTI7fWZ1bmN0aW9uIHNlKG9lLEope3JldHVybiBUPT09MT9vZVtKXTpvZS5yZWFkVUludDE2QkUoSipUKX1sZXQgdGU7aWYoQSl7bGV0IG9lPS0xO2Zvcih0ZT1mO3RlPE87dGUrKylpZihzZShwLHRlKT09PXNlKGwsb2U9PT0tMT8wOnRlLW9lKSl7aWYob2U9PT0tMSYmKG9lPXRlKSx0ZS1vZSsxPT09JClyZXR1cm4gb2UqVH1lbHNlIG9lIT09LTEmJih0ZS09dGUtb2UpLG9lPS0xO31lbHNlIGZvcihmKyQ+TyYmKGY9Ty0kKSx0ZT1mO3RlPj0wO3RlLS0pe2xldCBvZT0hMDtmb3IobGV0IEo9MDtKPCQ7SisrKWlmKHNlKHAsdGUrSikhPT1zZShsLEopKXtvZT0hMTticmVha31pZihvZSlyZXR1cm4gdGV9cmV0dXJuIC0xfXMucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGwsZixiKXtyZXR1cm4gdGhpcy5pbmRleE9mKGwsZixiKSE9PS0xfSxzLnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKGwsZixiKXtyZXR1cm4gTih0aGlzLGwsZixiLCEwKX0scy5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24obCxmLGIpe3JldHVybiBOKHRoaXMsbCxmLGIsITEpfTtmdW5jdGlvbiBLKHAsbCxmLGIpe2Y9TnVtYmVyKGYpfHwwO2xldCBBPXAubGVuZ3RoLWY7Yj8oYj1OdW1iZXIoYiksYj5BJiYoYj1BKSk6Yj1BO2xldCBUPWwubGVuZ3RoO2I+VC8yJiYoYj1ULzIpO2xldCBPO2ZvcihPPTA7TzxiOysrTyl7bGV0ICQ9cGFyc2VJbnQobC5zdWJzdHIoTyoyLDIpLDE2KTtpZihocygkKSlyZXR1cm4gTztwW2YrT109JDt9cmV0dXJuIE99ZnVuY3Rpb24geihwLGwsZixiKXtyZXR1cm4gcWkoY3MobCxwLmxlbmd0aC1mKSxwLGYsYil9ZnVuY3Rpb24gUShwLGwsZixiKXtyZXR1cm4gcWkoV2cobCkscCxmLGIpfWZ1bmN0aW9uIGRlKHAsbCxmLGIpe3JldHVybiBxaShDbChsKSxwLGYsYil9ZnVuY3Rpb24gR3QocCxsLGYsYil7cmV0dXJuIHFpKCRnKGwscC5sZW5ndGgtZikscCxmLGIpfXMucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGwsZixiLEEpe2lmKGY9PT12b2lkIDApQT1cInV0ZjhcIixiPXRoaXMubGVuZ3RoLGY9MDtlbHNlIGlmKGI9PT12b2lkIDAmJnR5cGVvZiBmPT1cInN0cmluZ1wiKUE9ZixiPXRoaXMubGVuZ3RoLGY9MDtlbHNlIGlmKGlzRmluaXRlKGYpKWY9Zj4+PjAsaXNGaW5pdGUoYik/KGI9Yj4+PjAsQT09PXZvaWQgMCYmKEE9XCJ1dGY4XCIpKTooQT1iLGI9dm9pZCAwKTtlbHNlIHRocm93IG5ldyBFcnJvcihcIkJ1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkXCIpO2xldCBUPXRoaXMubGVuZ3RoLWY7aWYoKGI9PT12b2lkIDB8fGI+VCkmJihiPVQpLGwubGVuZ3RoPjAmJihiPDB8fGY8MCl8fGY+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kc1wiKTtBfHwoQT1cInV0ZjhcIik7bGV0IE89ITE7Zm9yKDs7KXN3aXRjaChBKXtjYXNlXCJoZXhcIjpyZXR1cm4gSyh0aGlzLGwsZixiKTtjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpyZXR1cm4geih0aGlzLGwsZixiKTtjYXNlXCJhc2NpaVwiOmNhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOnJldHVybiBRKHRoaXMsbCxmLGIpO2Nhc2VcImJhc2U2NFwiOnJldHVybiBkZSh0aGlzLGwsZixiKTtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4gR3QodGhpcyxsLGYsYik7ZGVmYXVsdDppZihPKXRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmtub3duIGVuY29kaW5nOiBcIitBKTtBPShcIlwiK0EpLnRvTG93ZXJDYXNlKCksTz0hMDt9fSxzLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4ge3R5cGU6XCJCdWZmZXJcIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O2Z1bmN0aW9uIHBlKHAsbCxmKXtyZXR1cm4gbD09PTAmJmY9PT1wLmxlbmd0aD90LmZyb21CeXRlQXJyYXkocCk6dC5mcm9tQnl0ZUFycmF5KHAuc2xpY2UobCxmKSl9ZnVuY3Rpb24gQ3IocCxsLGYpe2Y9TWF0aC5taW4ocC5sZW5ndGgsZik7bGV0IGI9W10sQT1sO2Zvcig7QTxmOyl7bGV0IFQ9cFtBXSxPPW51bGwsJD1UPjIzOT80OlQ+MjIzPzM6VD4xOTE/MjoxO2lmKEErJDw9Zil7bGV0IHNlLHRlLG9lLEo7c3dpdGNoKCQpe2Nhc2UgMTpUPDEyOCYmKE89VCk7YnJlYWs7Y2FzZSAyOnNlPXBbQSsxXSwoc2UmMTkyKT09PTEyOCYmKEo9KFQmMzEpPDw2fHNlJjYzLEo+MTI3JiYoTz1KKSk7YnJlYWs7Y2FzZSAzOnNlPXBbQSsxXSx0ZT1wW0ErMl0sKHNlJjE5Mik9PT0xMjgmJih0ZSYxOTIpPT09MTI4JiYoSj0oVCYxNSk8PDEyfChzZSY2Myk8PDZ8dGUmNjMsSj4yMDQ3JiYoSjw1NTI5Nnx8Sj41NzM0MykmJihPPUopKTticmVhaztjYXNlIDQ6c2U9cFtBKzFdLHRlPXBbQSsyXSxvZT1wW0ErM10sKHNlJjE5Mik9PT0xMjgmJih0ZSYxOTIpPT09MTI4JiYob2UmMTkyKT09PTEyOCYmKEo9KFQmMTUpPDwxOHwoc2UmNjMpPDwxMnwodGUmNjMpPDw2fG9lJjYzLEo+NjU1MzUmJko8MTExNDExMiYmKE89SikpO319Tz09PW51bGw/KE89NjU1MzMsJD0xKTpPPjY1NTM1JiYoTy09NjU1MzYsYi5wdXNoKE8+Pj4xMCYxMDIzfDU1Mjk2KSxPPTU2MzIwfE8mMTAyMyksYi5wdXNoKE8pLEErPSQ7fXJldHVybiBQcihiKX1sZXQgQnI9NDA5NjtmdW5jdGlvbiBQcihwKXtsZXQgbD1wLmxlbmd0aDtpZihsPD1CcilyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcscCk7bGV0IGY9XCJcIixiPTA7Zm9yKDtiPGw7KWYrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLHAuc2xpY2UoYixiKz1CcikpO3JldHVybiBmfWZ1bmN0aW9uIHVzKHAsbCxmKXtsZXQgYj1cIlwiO2Y9TWF0aC5taW4ocC5sZW5ndGgsZik7Zm9yKGxldCBBPWw7QTxmOysrQSliKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHBbQV0mMTI3KTtyZXR1cm4gYn1mdW5jdGlvbiBVZyhwLGwsZil7bGV0IGI9XCJcIjtmPU1hdGgubWluKHAubGVuZ3RoLGYpO2ZvcihsZXQgQT1sO0E8ZjsrK0EpYis9U3RyaW5nLmZyb21DaGFyQ29kZShwW0FdKTtyZXR1cm4gYn1mdW5jdGlvbiBOZyhwLGwsZil7bGV0IGI9cC5sZW5ndGg7KCFsfHxsPDApJiYobD0wKSwoIWZ8fGY8MHx8Zj5iKSYmKGY9Yik7bGV0IEE9XCJcIjtmb3IobGV0IFQ9bDtUPGY7KytUKUErPUhnW3BbVF1dO3JldHVybiBBfWZ1bmN0aW9uIHFnKHAsbCxmKXtsZXQgYj1wLnNsaWNlKGwsZiksQT1cIlwiO2ZvcihsZXQgVD0wO1Q8Yi5sZW5ndGgtMTtUKz0yKUErPVN0cmluZy5mcm9tQ2hhckNvZGUoYltUXStiW1QrMV0qMjU2KTtyZXR1cm4gQX1zLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihsLGYpe2xldCBiPXRoaXMubGVuZ3RoO2w9fn5sLGY9Zj09PXZvaWQgMD9iOn5+ZixsPDA/KGwrPWIsbDwwJiYobD0wKSk6bD5iJiYobD1iKSxmPDA/KGYrPWIsZjwwJiYoZj0wKSk6Zj5iJiYoZj1iKSxmPGwmJihmPWwpO2xldCBBPXRoaXMuc3ViYXJyYXkobCxmKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKEEscy5wcm90b3R5cGUpLEF9O2Z1bmN0aW9uIGdlKHAsbCxmKXtpZihwJTEhPT0wfHxwPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJvZmZzZXQgaXMgbm90IHVpbnRcIik7aWYocCtsPmYpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoXCIpfXMucHJvdG90eXBlLnJlYWRVaW50TEU9cy5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihsLGYsYil7bD1sPj4+MCxmPWY+Pj4wLGJ8fGdlKGwsZix0aGlzLmxlbmd0aCk7bGV0IEE9dGhpc1tsXSxUPTEsTz0wO2Zvcig7KytPPGYmJihUKj0yNTYpOylBKz10aGlzW2wrT10qVDtyZXR1cm4gQX0scy5wcm90b3R5cGUucmVhZFVpbnRCRT1zLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKGwsZixiKXtsPWw+Pj4wLGY9Zj4+PjAsYnx8Z2UobCxmLHRoaXMubGVuZ3RoKTtsZXQgQT10aGlzW2wrLS1mXSxUPTE7Zm9yKDtmPjAmJihUKj0yNTYpOylBKz10aGlzW2wrLS1mXSpUO3JldHVybiBBfSxzLnByb3RvdHlwZS5yZWFkVWludDg9cy5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGwsZil7cmV0dXJuIGw9bD4+PjAsZnx8Z2UobCwxLHRoaXMubGVuZ3RoKSx0aGlzW2xdfSxzLnByb3RvdHlwZS5yZWFkVWludDE2TEU9cy5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKGwsZil7cmV0dXJuIGw9bD4+PjAsZnx8Z2UobCwyLHRoaXMubGVuZ3RoKSx0aGlzW2xdfHRoaXNbbCsxXTw8OH0scy5wcm90b3R5cGUucmVhZFVpbnQxNkJFPXMucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbihsLGYpe3JldHVybiBsPWw+Pj4wLGZ8fGdlKGwsMix0aGlzLmxlbmd0aCksdGhpc1tsXTw8OHx0aGlzW2wrMV19LHMucHJvdG90eXBlLnJlYWRVaW50MzJMRT1zLnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24obCxmKXtyZXR1cm4gbD1sPj4+MCxmfHxnZShsLDQsdGhpcy5sZW5ndGgpLCh0aGlzW2xdfHRoaXNbbCsxXTw8OHx0aGlzW2wrMl08PDE2KSt0aGlzW2wrM10qMTY3NzcyMTZ9LHMucHJvdG90eXBlLnJlYWRVaW50MzJCRT1zLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24obCxmKXtyZXR1cm4gbD1sPj4+MCxmfHxnZShsLDQsdGhpcy5sZW5ndGgpLHRoaXNbbF0qMTY3NzcyMTYrKHRoaXNbbCsxXTw8MTZ8dGhpc1tsKzJdPDw4fHRoaXNbbCszXSl9LHMucHJvdG90eXBlLnJlYWRCaWdVSW50NjRMRT14dChmdW5jdGlvbihsKXtsPWw+Pj4wLGtyKGwsXCJvZmZzZXRcIik7bGV0IGY9dGhpc1tsXSxiPXRoaXNbbCs3XTsoZj09PXZvaWQgMHx8Yj09PXZvaWQgMCkmJmxpKGwsdGhpcy5sZW5ndGgtOCk7bGV0IEE9Zit0aGlzWysrbF0qMioqOCt0aGlzWysrbF0qMioqMTYrdGhpc1srK2xdKjIqKjI0LFQ9dGhpc1srK2xdK3RoaXNbKytsXSoyKio4K3RoaXNbKytsXSoyKioxNitiKjIqKjI0O3JldHVybiBCaWdJbnQoQSkrKEJpZ0ludChUKTw8QmlnSW50KDMyKSl9KSxzLnByb3RvdHlwZS5yZWFkQmlnVUludDY0QkU9eHQoZnVuY3Rpb24obCl7bD1sPj4+MCxrcihsLFwib2Zmc2V0XCIpO2xldCBmPXRoaXNbbF0sYj10aGlzW2wrN107KGY9PT12b2lkIDB8fGI9PT12b2lkIDApJiZsaShsLHRoaXMubGVuZ3RoLTgpO2xldCBBPWYqMioqMjQrdGhpc1srK2xdKjIqKjE2K3RoaXNbKytsXSoyKio4K3RoaXNbKytsXSxUPXRoaXNbKytsXSoyKioyNCt0aGlzWysrbF0qMioqMTYrdGhpc1srK2xdKjIqKjgrYjtyZXR1cm4gKEJpZ0ludChBKTw8QmlnSW50KDMyKSkrQmlnSW50KFQpfSkscy5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKGwsZixiKXtsPWw+Pj4wLGY9Zj4+PjAsYnx8Z2UobCxmLHRoaXMubGVuZ3RoKTtsZXQgQT10aGlzW2xdLFQ9MSxPPTA7Zm9yKDsrK088ZiYmKFQqPTI1Nik7KUErPXRoaXNbbCtPXSpUO3JldHVybiBUKj0xMjgsQT49VCYmKEEtPU1hdGgucG93KDIsOCpmKSksQX0scy5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKGwsZixiKXtsPWw+Pj4wLGY9Zj4+PjAsYnx8Z2UobCxmLHRoaXMubGVuZ3RoKTtsZXQgQT1mLFQ9MSxPPXRoaXNbbCstLUFdO2Zvcig7QT4wJiYoVCo9MjU2KTspTys9dGhpc1tsKy0tQV0qVDtyZXR1cm4gVCo9MTI4LE8+PVQmJihPLT1NYXRoLnBvdygyLDgqZikpLE99LHMucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKGwsZil7cmV0dXJuIGw9bD4+PjAsZnx8Z2UobCwxLHRoaXMubGVuZ3RoKSx0aGlzW2xdJjEyOD8oMjU1LXRoaXNbbF0rMSkqLTE6dGhpc1tsXX0scy5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24obCxmKXtsPWw+Pj4wLGZ8fGdlKGwsMix0aGlzLmxlbmd0aCk7bGV0IGI9dGhpc1tsXXx0aGlzW2wrMV08PDg7cmV0dXJuIGImMzI3Njg/Ynw0Mjk0OTAxNzYwOmJ9LHMucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uKGwsZil7bD1sPj4+MCxmfHxnZShsLDIsdGhpcy5sZW5ndGgpO2xldCBiPXRoaXNbbCsxXXx0aGlzW2xdPDw4O3JldHVybiBiJjMyNzY4P2J8NDI5NDkwMTc2MDpifSxzLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihsLGYpe3JldHVybiBsPWw+Pj4wLGZ8fGdlKGwsNCx0aGlzLmxlbmd0aCksdGhpc1tsXXx0aGlzW2wrMV08PDh8dGhpc1tsKzJdPDwxNnx0aGlzW2wrM108PDI0fSxzLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihsLGYpe3JldHVybiBsPWw+Pj4wLGZ8fGdlKGwsNCx0aGlzLmxlbmd0aCksdGhpc1tsXTw8MjR8dGhpc1tsKzFdPDwxNnx0aGlzW2wrMl08PDh8dGhpc1tsKzNdfSxzLnByb3RvdHlwZS5yZWFkQmlnSW50NjRMRT14dChmdW5jdGlvbihsKXtsPWw+Pj4wLGtyKGwsXCJvZmZzZXRcIik7bGV0IGY9dGhpc1tsXSxiPXRoaXNbbCs3XTsoZj09PXZvaWQgMHx8Yj09PXZvaWQgMCkmJmxpKGwsdGhpcy5sZW5ndGgtOCk7bGV0IEE9dGhpc1tsKzRdK3RoaXNbbCs1XSoyKio4K3RoaXNbbCs2XSoyKioxNisoYjw8MjQpO3JldHVybiAoQmlnSW50KEEpPDxCaWdJbnQoMzIpKStCaWdJbnQoZit0aGlzWysrbF0qMioqOCt0aGlzWysrbF0qMioqMTYrdGhpc1srK2xdKjIqKjI0KX0pLHMucHJvdG90eXBlLnJlYWRCaWdJbnQ2NEJFPXh0KGZ1bmN0aW9uKGwpe2w9bD4+PjAsa3IobCxcIm9mZnNldFwiKTtsZXQgZj10aGlzW2xdLGI9dGhpc1tsKzddOyhmPT09dm9pZCAwfHxiPT09dm9pZCAwKSYmbGkobCx0aGlzLmxlbmd0aC04KTtsZXQgQT0oZjw8MjQpK3RoaXNbKytsXSoyKioxNit0aGlzWysrbF0qMioqOCt0aGlzWysrbF07cmV0dXJuIChCaWdJbnQoQSk8PEJpZ0ludCgzMikpK0JpZ0ludCh0aGlzWysrbF0qMioqMjQrdGhpc1srK2xdKjIqKjE2K3RoaXNbKytsXSoyKio4K2IpfSkscy5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24obCxmKXtyZXR1cm4gbD1sPj4+MCxmfHxnZShsLDQsdGhpcy5sZW5ndGgpLGUucmVhZCh0aGlzLGwsITAsMjMsNCl9LHMucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKGwsZil7cmV0dXJuIGw9bD4+PjAsZnx8Z2UobCw0LHRoaXMubGVuZ3RoKSxlLnJlYWQodGhpcyxsLCExLDIzLDQpfSxzLnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24obCxmKXtyZXR1cm4gbD1sPj4+MCxmfHxnZShsLDgsdGhpcy5sZW5ndGgpLGUucmVhZCh0aGlzLGwsITAsNTIsOCl9LHMucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihsLGYpe3JldHVybiBsPWw+Pj4wLGZ8fGdlKGwsOCx0aGlzLmxlbmd0aCksZS5yZWFkKHRoaXMsbCwhMSw1Miw4KX07ZnVuY3Rpb24gQ2UocCxsLGYsYixBLFQpe2lmKCFzLmlzQnVmZmVyKHApKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKGw+QXx8bDxUKXRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKGYrYj5wLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkluZGV4IG91dCBvZiByYW5nZVwiKX1zLnByb3RvdHlwZS53cml0ZVVpbnRMRT1zLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihsLGYsYixBKXtpZihsPStsLGY9Zj4+PjAsYj1iPj4+MCwhQSl7bGV0ICQ9TWF0aC5wb3coMiw4KmIpLTE7Q2UodGhpcyxsLGYsYiwkLDApO31sZXQgVD0xLE89MDtmb3IodGhpc1tmXT1sJjI1NTsrK088YiYmKFQqPTI1Nik7KXRoaXNbZitPXT1sL1QmMjU1O3JldHVybiBmK2J9LHMucHJvdG90eXBlLndyaXRlVWludEJFPXMucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKGwsZixiLEEpe2lmKGw9K2wsZj1mPj4+MCxiPWI+Pj4wLCFBKXtsZXQgJD1NYXRoLnBvdygyLDgqYiktMTtDZSh0aGlzLGwsZixiLCQsMCk7fWxldCBUPWItMSxPPTE7Zm9yKHRoaXNbZitUXT1sJjI1NTstLVQ+PTAmJihPKj0yNTYpOyl0aGlzW2YrVF09bC9PJjI1NTtyZXR1cm4gZitifSxzLnByb3RvdHlwZS53cml0ZVVpbnQ4PXMucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24obCxmLGIpe3JldHVybiBsPStsLGY9Zj4+PjAsYnx8Q2UodGhpcyxsLGYsMSwyNTUsMCksdGhpc1tmXT1sJjI1NSxmKzF9LHMucHJvdG90eXBlLndyaXRlVWludDE2TEU9cy5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihsLGYsYil7cmV0dXJuIGw9K2wsZj1mPj4+MCxifHxDZSh0aGlzLGwsZiwyLDY1NTM1LDApLHRoaXNbZl09bCYyNTUsdGhpc1tmKzFdPWw+Pj44LGYrMn0scy5wcm90b3R5cGUud3JpdGVVaW50MTZCRT1zLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKGwsZixiKXtyZXR1cm4gbD0rbCxmPWY+Pj4wLGJ8fENlKHRoaXMsbCxmLDIsNjU1MzUsMCksdGhpc1tmXT1sPj4+OCx0aGlzW2YrMV09bCYyNTUsZisyfSxzLnByb3RvdHlwZS53cml0ZVVpbnQzMkxFPXMucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24obCxmLGIpe3JldHVybiBsPStsLGY9Zj4+PjAsYnx8Q2UodGhpcyxsLGYsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbZiszXT1sPj4+MjQsdGhpc1tmKzJdPWw+Pj4xNix0aGlzW2YrMV09bD4+PjgsdGhpc1tmXT1sJjI1NSxmKzR9LHMucHJvdG90eXBlLndyaXRlVWludDMyQkU9cy5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihsLGYsYil7cmV0dXJuIGw9K2wsZj1mPj4+MCxifHxDZSh0aGlzLGwsZiw0LDQyOTQ5NjcyOTUsMCksdGhpc1tmXT1sPj4+MjQsdGhpc1tmKzFdPWw+Pj4xNix0aGlzW2YrMl09bD4+PjgsdGhpc1tmKzNdPWwmMjU1LGYrNH07ZnVuY3Rpb24gdmwocCxsLGYsYixBKXtSbChsLGIsQSxwLGYsNyk7bGV0IFQ9TnVtYmVyKGwmQmlnSW50KDQyOTQ5NjcyOTUpKTtwW2YrK109VCxUPVQ+PjgscFtmKytdPVQsVD1UPj44LHBbZisrXT1ULFQ9VD4+OCxwW2YrK109VDtsZXQgTz1OdW1iZXIobD4+QmlnSW50KDMyKSZCaWdJbnQoNDI5NDk2NzI5NSkpO3JldHVybiBwW2YrK109TyxPPU8+PjgscFtmKytdPU8sTz1PPj44LHBbZisrXT1PLE89Tz4+OCxwW2YrK109TyxmfWZ1bmN0aW9uIEVsKHAsbCxmLGIsQSl7UmwobCxiLEEscCxmLDcpO2xldCBUPU51bWJlcihsJkJpZ0ludCg0Mjk0OTY3Mjk1KSk7cFtmKzddPVQsVD1UPj44LHBbZis2XT1ULFQ9VD4+OCxwW2YrNV09VCxUPVQ+PjgscFtmKzRdPVQ7bGV0IE89TnVtYmVyKGw+PkJpZ0ludCgzMikmQmlnSW50KDQyOTQ5NjcyOTUpKTtyZXR1cm4gcFtmKzNdPU8sTz1PPj44LHBbZisyXT1PLE89Tz4+OCxwW2YrMV09TyxPPU8+PjgscFtmXT1PLGYrOH1zLnByb3RvdHlwZS53cml0ZUJpZ1VJbnQ2NExFPXh0KGZ1bmN0aW9uKGwsZj0wKXtyZXR1cm4gdmwodGhpcyxsLGYsQmlnSW50KDApLEJpZ0ludChcIjB4ZmZmZmZmZmZmZmZmZmZmZlwiKSl9KSxzLnByb3RvdHlwZS53cml0ZUJpZ1VJbnQ2NEJFPXh0KGZ1bmN0aW9uKGwsZj0wKXtyZXR1cm4gRWwodGhpcyxsLGYsQmlnSW50KDApLEJpZ0ludChcIjB4ZmZmZmZmZmZmZmZmZmZmZlwiKSl9KSxzLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKGwsZixiLEEpe2lmKGw9K2wsZj1mPj4+MCwhQSl7bGV0IHNlPU1hdGgucG93KDIsOCpiLTEpO0NlKHRoaXMsbCxmLGIsc2UtMSwtc2UpO31sZXQgVD0wLE89MSwkPTA7Zm9yKHRoaXNbZl09bCYyNTU7KytUPGImJihPKj0yNTYpOylsPDAmJiQ9PT0wJiZ0aGlzW2YrVC0xXSE9PTAmJigkPTEpLHRoaXNbZitUXT0obC9PPj4wKS0kJjI1NTtyZXR1cm4gZitifSxzLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKGwsZixiLEEpe2lmKGw9K2wsZj1mPj4+MCwhQSl7bGV0IHNlPU1hdGgucG93KDIsOCpiLTEpO0NlKHRoaXMsbCxmLGIsc2UtMSwtc2UpO31sZXQgVD1iLTEsTz0xLCQ9MDtmb3IodGhpc1tmK1RdPWwmMjU1Oy0tVD49MCYmKE8qPTI1Nik7KWw8MCYmJD09PTAmJnRoaXNbZitUKzFdIT09MCYmKCQ9MSksdGhpc1tmK1RdPShsL08+PjApLSQmMjU1O3JldHVybiBmK2J9LHMucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbihsLGYsYil7cmV0dXJuIGw9K2wsZj1mPj4+MCxifHxDZSh0aGlzLGwsZiwxLDEyNywtMTI4KSxsPDAmJihsPTI1NStsKzEpLHRoaXNbZl09bCYyNTUsZisxfSxzLnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24obCxmLGIpe3JldHVybiBsPStsLGY9Zj4+PjAsYnx8Q2UodGhpcyxsLGYsMiwzMjc2NywtMzI3NjgpLHRoaXNbZl09bCYyNTUsdGhpc1tmKzFdPWw+Pj44LGYrMn0scy5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKGwsZixiKXtyZXR1cm4gbD0rbCxmPWY+Pj4wLGJ8fENlKHRoaXMsbCxmLDIsMzI3NjcsLTMyNzY4KSx0aGlzW2ZdPWw+Pj44LHRoaXNbZisxXT1sJjI1NSxmKzJ9LHMucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihsLGYsYil7cmV0dXJuIGw9K2wsZj1mPj4+MCxifHxDZSh0aGlzLGwsZiw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHRoaXNbZl09bCYyNTUsdGhpc1tmKzFdPWw+Pj44LHRoaXNbZisyXT1sPj4+MTYsdGhpc1tmKzNdPWw+Pj4yNCxmKzR9LHMucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihsLGYsYil7cmV0dXJuIGw9K2wsZj1mPj4+MCxifHxDZSh0aGlzLGwsZiw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLGw8MCYmKGw9NDI5NDk2NzI5NStsKzEpLHRoaXNbZl09bD4+PjI0LHRoaXNbZisxXT1sPj4+MTYsdGhpc1tmKzJdPWw+Pj44LHRoaXNbZiszXT1sJjI1NSxmKzR9LHMucHJvdG90eXBlLndyaXRlQmlnSW50NjRMRT14dChmdW5jdGlvbihsLGY9MCl7cmV0dXJuIHZsKHRoaXMsbCxmLC1CaWdJbnQoXCIweDgwMDAwMDAwMDAwMDAwMDBcIiksQmlnSW50KFwiMHg3ZmZmZmZmZmZmZmZmZmZmXCIpKX0pLHMucHJvdG90eXBlLndyaXRlQmlnSW50NjRCRT14dChmdW5jdGlvbihsLGY9MCl7cmV0dXJuIEVsKHRoaXMsbCxmLC1CaWdJbnQoXCIweDgwMDAwMDAwMDAwMDAwMDBcIiksQmlnSW50KFwiMHg3ZmZmZmZmZmZmZmZmZmZmXCIpKX0pO2Z1bmN0aW9uIFNsKHAsbCxmLGIsQSxUKXtpZihmK2I+cC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbmRleCBvdXQgb2YgcmFuZ2VcIik7aWYoZjwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW5kZXggb3V0IG9mIHJhbmdlXCIpfWZ1bmN0aW9uIEFsKHAsbCxmLGIsQSl7cmV0dXJuIGw9K2wsZj1mPj4+MCxBfHxTbChwLGwsZiw0KSxlLndyaXRlKHAsbCxmLGIsMjMsNCksZis0fXMucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbihsLGYsYil7cmV0dXJuIEFsKHRoaXMsbCxmLCEwLGIpfSxzLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24obCxmLGIpe3JldHVybiBBbCh0aGlzLGwsZiwhMSxiKX07ZnVuY3Rpb24gSWwocCxsLGYsYixBKXtyZXR1cm4gbD0rbCxmPWY+Pj4wLEF8fFNsKHAsbCxmLDgpLGUud3JpdGUocCxsLGYsYiw1Miw4KSxmKzh9cy5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbihsLGYsYil7cmV0dXJuIElsKHRoaXMsbCxmLCEwLGIpfSxzLnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKGwsZixiKXtyZXR1cm4gSWwodGhpcyxsLGYsITEsYil9LHMucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24obCxmLGIsQSl7aWYoIXMuaXNCdWZmZXIobCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlclwiKTtpZihifHwoYj0wKSwhQSYmQSE9PTAmJihBPXRoaXMubGVuZ3RoKSxmPj1sLmxlbmd0aCYmKGY9bC5sZW5ndGgpLGZ8fChmPTApLEE+MCYmQTxiJiYoQT1iKSxBPT09Ynx8bC5sZW5ndGg9PT0wfHx0aGlzLmxlbmd0aD09PTApcmV0dXJuIDA7aWYoZjwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kc1wiKTtpZihiPDB8fGI+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW5kZXggb3V0IG9mIHJhbmdlXCIpO2lmKEE8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInNvdXJjZUVuZCBvdXQgb2YgYm91bmRzXCIpO0E+dGhpcy5sZW5ndGgmJihBPXRoaXMubGVuZ3RoKSxsLmxlbmd0aC1mPEEtYiYmKEE9bC5sZW5ndGgtZitiKTtsZXQgVD1BLWI7cmV0dXJuIHRoaXM9PT1sJiZ0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbj09XCJmdW5jdGlvblwiP3RoaXMuY29weVdpdGhpbihmLGIsQSk6VWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwobCx0aGlzLnN1YmFycmF5KGIsQSksZiksVH0scy5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihsLGYsYixBKXtpZih0eXBlb2YgbD09XCJzdHJpbmdcIil7aWYodHlwZW9mIGY9PVwic3RyaW5nXCI/KEE9ZixmPTAsYj10aGlzLmxlbmd0aCk6dHlwZW9mIGI9PVwic3RyaW5nXCImJihBPWIsYj10aGlzLmxlbmd0aCksQSE9PXZvaWQgMCYmdHlwZW9mIEEhPVwic3RyaW5nXCIpdGhyb3cgbmV3IFR5cGVFcnJvcihcImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmdcIik7aWYodHlwZW9mIEE9PVwic3RyaW5nXCImJiFzLmlzRW5jb2RpbmcoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK0EpO2lmKGwubGVuZ3RoPT09MSl7bGV0IE89bC5jaGFyQ29kZUF0KDApOyhBPT09XCJ1dGY4XCImJk88MTI4fHxBPT09XCJsYXRpbjFcIikmJihsPU8pO319ZWxzZSB0eXBlb2YgbD09XCJudW1iZXJcIj9sPWwmMjU1OnR5cGVvZiBsPT1cImJvb2xlYW5cIiYmKGw9TnVtYmVyKGwpKTtpZihmPDB8fHRoaXMubGVuZ3RoPGZ8fHRoaXMubGVuZ3RoPGIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJPdXQgb2YgcmFuZ2UgaW5kZXhcIik7aWYoYjw9ZilyZXR1cm4gdGhpcztmPWY+Pj4wLGI9Yj09PXZvaWQgMD90aGlzLmxlbmd0aDpiPj4+MCxsfHwobD0wKTtsZXQgVDtpZih0eXBlb2YgbD09XCJudW1iZXJcIilmb3IoVD1mO1Q8YjsrK1QpdGhpc1tUXT1sO2Vsc2Uge2xldCBPPXMuaXNCdWZmZXIobCk/bDpzLmZyb20obCxBKSwkPU8ubGVuZ3RoO2lmKCQ9PT0wKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSB2YWx1ZSBcIicrbCsnXCIgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgXCJ2YWx1ZVwiJyk7Zm9yKFQ9MDtUPGItZjsrK1QpdGhpc1tUK2ZdPU9bVCUkXTt9cmV0dXJuIHRoaXN9O2xldCBPcj17fTtmdW5jdGlvbiBmcyhwLGwsZil7T3JbcF09Y2xhc3MgZXh0ZW5kcyBme2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcIm1lc3NhZ2VcIix7dmFsdWU6bC5hcHBseSh0aGlzLGFyZ3VtZW50cyksd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdGhpcy5uYW1lPWAke3RoaXMubmFtZX0gWyR7cH1dYCx0aGlzLnN0YWNrLGRlbGV0ZSB0aGlzLm5hbWU7fWdldCBjb2RlKCl7cmV0dXJuIHB9c2V0IGNvZGUoQSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJjb2RlXCIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOkEsd3JpdGFibGU6ITB9KTt9dG9TdHJpbmcoKXtyZXR1cm4gYCR7dGhpcy5uYW1lfSBbJHtwfV06ICR7dGhpcy5tZXNzYWdlfWB9fTt9ZnMoXCJFUlJfQlVGRkVSX09VVF9PRl9CT1VORFNcIixmdW5jdGlvbihwKXtyZXR1cm4gcD9gJHtwfSBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHNgOlwiQXR0ZW1wdCB0byBhY2Nlc3MgbWVtb3J5IG91dHNpZGUgYnVmZmVyIGJvdW5kc1wifSxSYW5nZUVycm9yKSxmcyhcIkVSUl9JTlZBTElEX0FSR19UWVBFXCIsZnVuY3Rpb24ocCxsKXtyZXR1cm4gYFRoZSBcIiR7cH1cIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlICR7dHlwZW9mIGx9YH0sVHlwZUVycm9yKSxmcyhcIkVSUl9PVVRfT0ZfUkFOR0VcIixmdW5jdGlvbihwLGwsZil7bGV0IGI9YFRoZSB2YWx1ZSBvZiBcIiR7cH1cIiBpcyBvdXQgb2YgcmFuZ2UuYCxBPWY7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoZikmJk1hdGguYWJzKGYpPjIqKjMyP0E9VGwoU3RyaW5nKGYpKTp0eXBlb2YgZj09XCJiaWdpbnRcIiYmKEE9U3RyaW5nKGYpLChmPkJpZ0ludCgyKSoqQmlnSW50KDMyKXx8ZjwtKEJpZ0ludCgyKSoqQmlnSW50KDMyKSkpJiYoQT1UbChBKSksQSs9XCJuXCIpLGIrPWAgSXQgbXVzdCBiZSAke2x9LiBSZWNlaXZlZCAke0F9YCxifSxSYW5nZUVycm9yKTtmdW5jdGlvbiBUbChwKXtsZXQgbD1cIlwiLGY9cC5sZW5ndGgsYj1wWzBdPT09XCItXCI/MTowO2Zvcig7Zj49Yis0O2YtPTMpbD1gXyR7cC5zbGljZShmLTMsZil9JHtsfWA7cmV0dXJuIGAke3Auc2xpY2UoMCxmKX0ke2x9YH1mdW5jdGlvbiBEZyhwLGwsZil7a3IobCxcIm9mZnNldFwiKSwocFtsXT09PXZvaWQgMHx8cFtsK2ZdPT09dm9pZCAwKSYmbGkobCxwLmxlbmd0aC0oZisxKSk7fWZ1bmN0aW9uIFJsKHAsbCxmLGIsQSxUKXtpZihwPmZ8fHA8bCl7bGV0IE89dHlwZW9mIGw9PVwiYmlnaW50XCI/XCJuXCI6XCJcIiwkO3Rocm93IFQ+Mz9sPT09MHx8bD09PUJpZ0ludCgwKT8kPWA+PSAwJHtPfSBhbmQgPCAyJHtPfSAqKiAkeyhUKzEpKjh9JHtPfWA6JD1gPj0gLSgyJHtPfSAqKiAkeyhUKzEpKjgtMX0ke099KSBhbmQgPCAyICoqICR7KFQrMSkqOC0xfSR7T31gOiQ9YD49ICR7bH0ke099IGFuZCA8PSAke2Z9JHtPfWAsbmV3IE9yLkVSUl9PVVRfT0ZfUkFOR0UoXCJ2YWx1ZVwiLCQscCl9RGcoYixBLFQpO31mdW5jdGlvbiBrcihwLGwpe2lmKHR5cGVvZiBwIT1cIm51bWJlclwiKXRocm93IG5ldyBPci5FUlJfSU5WQUxJRF9BUkdfVFlQRShsLFwibnVtYmVyXCIscCl9ZnVuY3Rpb24gbGkocCxsLGYpe3Rocm93IE1hdGguZmxvb3IocCkhPT1wPyhrcihwLGYpLG5ldyBPci5FUlJfT1VUX09GX1JBTkdFKGZ8fFwib2Zmc2V0XCIsXCJhbiBpbnRlZ2VyXCIscCkpOmw8MD9uZXcgT3IuRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTOm5ldyBPci5FUlJfT1VUX09GX1JBTkdFKGZ8fFwib2Zmc2V0XCIsYD49ICR7Zj8xOjB9IGFuZCA8PSAke2x9YCxwKX1sZXQgamc9L1teKy8wLTlBLVphLXotX10vZztmdW5jdGlvbiBGZyhwKXtpZihwPXAuc3BsaXQoXCI9XCIpWzBdLHA9cC50cmltKCkucmVwbGFjZShqZyxcIlwiKSxwLmxlbmd0aDwyKXJldHVybiBcIlwiO2Zvcig7cC5sZW5ndGglNCE9PTA7KXA9cCtcIj1cIjtyZXR1cm4gcH1mdW5jdGlvbiBjcyhwLGwpe2w9bHx8MS8wO2xldCBmLGI9cC5sZW5ndGgsQT1udWxsLFQ9W107Zm9yKGxldCBPPTA7TzxiOysrTyl7aWYoZj1wLmNoYXJDb2RlQXQoTyksZj41NTI5NSYmZjw1NzM0NCl7aWYoIUEpe2lmKGY+NTYzMTkpeyhsLT0zKT4tMSYmVC5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1lbHNlIGlmKE8rMT09PWIpeyhsLT0zKT4tMSYmVC5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1BPWY7Y29udGludWV9aWYoZjw1NjMyMCl7KGwtPTMpPi0xJiZULnB1c2goMjM5LDE5MSwxODkpLEE9Zjtjb250aW51ZX1mPShBLTU1Mjk2PDwxMHxmLTU2MzIwKSs2NTUzNjt9ZWxzZSBBJiYobC09Myk+LTEmJlQucHVzaCgyMzksMTkxLDE4OSk7aWYoQT1udWxsLGY8MTI4KXtpZigobC09MSk8MClicmVhaztULnB1c2goZik7fWVsc2UgaWYoZjwyMDQ4KXtpZigobC09Mik8MClicmVhaztULnB1c2goZj4+NnwxOTIsZiY2M3wxMjgpO31lbHNlIGlmKGY8NjU1MzYpe2lmKChsLT0zKTwwKWJyZWFrO1QucHVzaChmPj4xMnwyMjQsZj4+NiY2M3wxMjgsZiY2M3wxMjgpO31lbHNlIGlmKGY8MTExNDExMil7aWYoKGwtPTQpPDApYnJlYWs7VC5wdXNoKGY+PjE4fDI0MCxmPj4xMiY2M3wxMjgsZj4+NiY2M3wxMjgsZiY2M3wxMjgpO31lbHNlIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY29kZSBwb2ludFwiKX1yZXR1cm4gVH1mdW5jdGlvbiBXZyhwKXtsZXQgbD1bXTtmb3IobGV0IGY9MDtmPHAubGVuZ3RoOysrZilsLnB1c2gocC5jaGFyQ29kZUF0KGYpJjI1NSk7cmV0dXJuIGx9ZnVuY3Rpb24gJGcocCxsKXtsZXQgZixiLEEsVD1bXTtmb3IobGV0IE89MDtPPHAubGVuZ3RoJiYhKChsLT0yKTwwKTsrK08pZj1wLmNoYXJDb2RlQXQoTyksYj1mPj44LEE9ZiUyNTYsVC5wdXNoKEEpLFQucHVzaChiKTtyZXR1cm4gVH1mdW5jdGlvbiBDbChwKXtyZXR1cm4gdC50b0J5dGVBcnJheShGZyhwKSl9ZnVuY3Rpb24gcWkocCxsLGYsYil7bGV0IEE7Zm9yKEE9MDtBPGImJiEoQStmPj1sLmxlbmd0aHx8QT49cC5sZW5ndGgpOysrQSlsW0ErZl09cFtBXTtyZXR1cm4gQX1mdW5jdGlvbiBZZShwLGwpe3JldHVybiBwIGluc3RhbmNlb2YgbHx8cCE9bnVsbCYmcC5jb25zdHJ1Y3RvciE9bnVsbCYmcC5jb25zdHJ1Y3Rvci5uYW1lIT1udWxsJiZwLmNvbnN0cnVjdG9yLm5hbWU9PT1sLm5hbWV9ZnVuY3Rpb24gaHMocCl7cmV0dXJuIHAhPT1wfWxldCBIZz1mdW5jdGlvbigpe2xldCBwPVwiMDEyMzQ1Njc4OWFiY2RlZlwiLGw9bmV3IEFycmF5KDI1Nik7Zm9yKGxldCBmPTA7ZjwxNjsrK2Ype2xldCBiPWYqMTY7Zm9yKGxldCBBPTA7QTwxNjsrK0EpbFtiK0FdPXBbZl0rcFtBXTt9cmV0dXJuIGx9KCk7ZnVuY3Rpb24geHQocCl7cmV0dXJuIHR5cGVvZiBCaWdJbnQ+XCJ1XCI/Vmc6cH1mdW5jdGlvbiBWZygpe3Rocm93IG5ldyBFcnJvcihcIkJpZ0ludCBub3Qgc3VwcG9ydGVkXCIpfXJldHVybiBKdH12YXIgdWksVnUsV2ksenUsSnQsS3UsTHQseCxleSx0eSx5ZT13ZSgoKT0+e3YoKTttKCk7XygpO3VpPXt9LFZ1PSExO1dpPXt9LHp1PSExO0p0PXt9LEt1PSExO0x0PVpnKCk7THQuQnVmZmVyO0x0LlNsb3dCdWZmZXI7THQuSU5TUEVDVF9NQVhfQllURVM7THQua01heExlbmd0aDt4PUx0LkJ1ZmZlcixleT1MdC5JTlNQRUNUX01BWF9CWVRFUyx0eT1MdC5rTWF4TGVuZ3RoO30pO3ZhciB2PXdlKCgpPT57eWUoKTt9KTt2YXIgR3U9TSh3cz0+e3YoKTttKCk7XygpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh3cyxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgYnM9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5hbGlhc1RvVG9waWM9e30sdGhpcy5tYXg9ZTt9cHV0KGUscil7cmV0dXJuIHI9PT0wfHxyPnRoaXMubWF4PyExOih0aGlzLmFsaWFzVG9Ub3BpY1tyXT1lLHRoaXMubGVuZ3RoPU9iamVjdC5rZXlzKHRoaXMuYWxpYXNUb1RvcGljKS5sZW5ndGgsITApfWdldFRvcGljQnlBbGlhcyhlKXtyZXR1cm4gdGhpcy5hbGlhc1RvVG9waWNbZV19Y2xlYXIoKXt0aGlzLmFsaWFzVG9Ub3BpYz17fTt9fTt3cy5kZWZhdWx0PWJzO30pO3ZhciBjZT1NKChQQSxRdSk9Pnt2KCk7bSgpO18oKTtRdS5leHBvcnRzPXtBcnJheUlzQXJyYXkodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCl9LEFycmF5UHJvdG90eXBlSW5jbHVkZXModCxlKXtyZXR1cm4gdC5pbmNsdWRlcyhlKX0sQXJyYXlQcm90b3R5cGVJbmRleE9mKHQsZSl7cmV0dXJuIHQuaW5kZXhPZihlKX0sQXJyYXlQcm90b3R5cGVKb2luKHQsZSl7cmV0dXJuIHQuam9pbihlKX0sQXJyYXlQcm90b3R5cGVNYXAodCxlKXtyZXR1cm4gdC5tYXAoZSl9LEFycmF5UHJvdG90eXBlUG9wKHQsZSl7cmV0dXJuIHQucG9wKGUpfSxBcnJheVByb3RvdHlwZVB1c2godCxlKXtyZXR1cm4gdC5wdXNoKGUpfSxBcnJheVByb3RvdHlwZVNsaWNlKHQsZSxyKXtyZXR1cm4gdC5zbGljZShlLHIpfSxFcnJvcixGdW5jdGlvblByb3RvdHlwZUNhbGwodCxlLC4uLnIpe3JldHVybiB0LmNhbGwoZSwuLi5yKX0sRnVuY3Rpb25Qcm90b3R5cGVTeW1ib2xIYXNJbnN0YW5jZSh0LGUpe3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXS5jYWxsKHQsZSl9LE1hdGhGbG9vcjpNYXRoLmZsb29yLE51bWJlcixOdW1iZXJJc0ludGVnZXI6TnVtYmVyLmlzSW50ZWdlcixOdW1iZXJJc05hTjpOdW1iZXIuaXNOYU4sTnVtYmVyTUFYX1NBRkVfSU5URUdFUjpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixOdW1iZXJNSU5fU0FGRV9JTlRFR0VSOk51bWJlci5NSU5fU0FGRV9JTlRFR0VSLE51bWJlclBhcnNlSW50Ok51bWJlci5wYXJzZUludCxPYmplY3REZWZpbmVQcm9wZXJ0aWVzKHQsZSl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsZSl9LE9iamVjdERlZmluZVByb3BlcnR5KHQsZSxyKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxyKX0sT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKX0sT2JqZWN0S2V5cyh0KXtyZXR1cm4gT2JqZWN0LmtleXModCl9LE9iamVjdFNldFByb3RvdHlwZU9mKHQsZSl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpfSxQcm9taXNlLFByb21pc2VQcm90b3R5cGVDYXRjaCh0LGUpe3JldHVybiB0LmNhdGNoKGUpfSxQcm9taXNlUHJvdG90eXBlVGhlbih0LGUscil7cmV0dXJuIHQudGhlbihlLHIpfSxQcm9taXNlUmVqZWN0KHQpe3JldHVybiBQcm9taXNlLnJlamVjdCh0KX0sUmVmbGVjdEFwcGx5OlJlZmxlY3QuYXBwbHksUmVnRXhwUHJvdG90eXBlVGVzdCh0LGUpe3JldHVybiB0LnRlc3QoZSl9LFNhZmVTZXQ6U2V0LFN0cmluZyxTdHJpbmdQcm90b3R5cGVTbGljZSh0LGUscil7cmV0dXJuIHQuc2xpY2UoZSxyKX0sU3RyaW5nUHJvdG90eXBlVG9Mb3dlckNhc2UodCl7cmV0dXJuIHQudG9Mb3dlckNhc2UoKX0sU3RyaW5nUHJvdG90eXBlVG9VcHBlckNhc2UodCl7cmV0dXJuIHQudG9VcHBlckNhc2UoKX0sU3RyaW5nUHJvdG90eXBlVHJpbSh0KXtyZXR1cm4gdC50cmltKCl9LFN5bWJvbCxTeW1ib2xGb3I6U3ltYm9sLmZvcixTeW1ib2xBc3luY0l0ZXJhdG9yOlN5bWJvbC5hc3luY0l0ZXJhdG9yLFN5bWJvbEhhc0luc3RhbmNlOlN5bWJvbC5oYXNJbnN0YW5jZSxTeW1ib2xJdGVyYXRvcjpTeW1ib2wuaXRlcmF0b3IsVHlwZWRBcnJheVByb3RvdHlwZVNldCh0LGUscil7cmV0dXJuIHQuc2V0KGUscil9LFVpbnQ4QXJyYXl9O30pO3ZhciBKZT1NKChqQSxtcyk9Pnt2KCk7bSgpO18oKTt2YXIgcnk9KHllKCksWChfZSkpLGl5PU9iamVjdC5nZXRQcm90b3R5cGVPZihhc3luYyBmdW5jdGlvbigpe30pLmNvbnN0cnVjdG9yLFl1PWdsb2JhbFRoaXMuQmxvYnx8cnkuQmxvYixueT10eXBlb2YgWXU8XCJ1XCI/ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBZdX06ZnVuY3Rpb24oZSl7cmV0dXJuICExfSxfcz1jbGFzcyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUpe2lmKCFBcnJheS5pc0FycmF5KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIGlucHV0IHRvIGJlIGFuIEFycmF5LCBnb3QgJHt0eXBlb2YgZX1gKTtsZXQgcj1cIlwiO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXIrPWAgICAgJHtlW2ldLnN0YWNrfVxuYDtzdXBlcihyKSx0aGlzLm5hbWU9XCJBZ2dyZWdhdGVFcnJvclwiLHRoaXMuZXJyb3JzPWU7fX07bXMuZXhwb3J0cz17QWdncmVnYXRlRXJyb3I6X3Msa0VtcHR5T2JqZWN0Ok9iamVjdC5mcmVlemUoe30pLG9uY2UodCl7bGV0IGU9ITE7cmV0dXJuIGZ1bmN0aW9uKC4uLnIpe2V8fChlPSEwLHQuYXBwbHkodGhpcyxyKSk7fX0sY3JlYXRlRGVmZXJyZWRQcm9taXNlOmZ1bmN0aW9uKCl7bGV0IHQsZTtyZXR1cm4ge3Byb21pc2U6bmV3IFByb21pc2UoKGksbik9Pnt0PWksZT1uO30pLHJlc29sdmU6dCxyZWplY3Q6ZX19LHByb21pc2lmeSh0KXtyZXR1cm4gbmV3IFByb21pc2UoKGUscik9Pnt0KChpLC4uLm4pPT5pP3IoaSk6ZSguLi5uKSk7fSl9LGRlYnVnbG9nKCl7cmV0dXJuIGZ1bmN0aW9uKCl7fX0sZm9ybWF0KHQsLi4uZSl7cmV0dXJuIHQucmVwbGFjZSgvJShbc2RpZmpdKS9nLGZ1bmN0aW9uKC4uLltyLGldKXtsZXQgbj1lLnNoaWZ0KCk7cmV0dXJuIGk9PT1cImZcIj9uLnRvRml4ZWQoNik6aT09PVwialwiP0pTT04uc3RyaW5naWZ5KG4pOmk9PT1cInNcIiYmdHlwZW9mIG49PVwib2JqZWN0XCI/YCR7bi5jb25zdHJ1Y3RvciE9PU9iamVjdD9uLmNvbnN0cnVjdG9yLm5hbWU6XCJcIn0ge31gLnRyaW0oKTpuLnRvU3RyaW5nKCl9KX0saW5zcGVjdCh0KXtzd2l0Y2godHlwZW9mIHQpe2Nhc2VcInN0cmluZ1wiOmlmKHQuaW5jbHVkZXMoXCInXCIpKWlmKHQuaW5jbHVkZXMoJ1wiJykpe2lmKCF0LmluY2x1ZGVzKFwiYFwiKSYmIXQuaW5jbHVkZXMoXCIke1wiKSlyZXR1cm4gYFxcYCR7dH1cXGBgfWVsc2UgcmV0dXJuIGBcIiR7dH1cImA7cmV0dXJuIGAnJHt0fSdgO2Nhc2VcIm51bWJlclwiOnJldHVybiBpc05hTih0KT9cIk5hTlwiOk9iamVjdC5pcyh0LC0wKT9TdHJpbmcodCk6dDtjYXNlXCJiaWdpbnRcIjpyZXR1cm4gYCR7U3RyaW5nKHQpfW5gO2Nhc2VcImJvb2xlYW5cIjpjYXNlXCJ1bmRlZmluZWRcIjpyZXR1cm4gU3RyaW5nKHQpO2Nhc2VcIm9iamVjdFwiOnJldHVybiBcInt9XCJ9fSx0eXBlczp7aXNBc3luY0Z1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgaXl9LGlzQXJyYXlCdWZmZXJWaWV3KHQpe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcodCl9fSxpc0Jsb2I6bnl9O21zLmV4cG9ydHMucHJvbWlzaWZ5LmN1c3RvbT1TeW1ib2wuZm9yKFwibm9kZWpzLnV0aWwucHJvbWlzaWZ5LmN1c3RvbVwiKTt9KTt2YXIgSGk9TSgoWUEsJGkpPT57digpO20oKTtfKCk7dmFye0Fib3J0Q29udHJvbGxlcjpKdSxBYm9ydFNpZ25hbDpzeX09dHlwZW9mIHNlbGY8XCJ1XCI/c2VsZjp0eXBlb2Ygd2luZG93PFwidVwiP3dpbmRvdzp2b2lkIDA7JGkuZXhwb3J0cz1KdTskaS5leHBvcnRzLkFib3J0U2lnbmFsPXN5OyRpLmV4cG9ydHMuZGVmYXVsdD1KdTt9KTt2YXIgU2U9TSgob0ksZWYpPT57digpO20oKTtfKCk7dmFye2Zvcm1hdDpveSxpbnNwZWN0OlZpLEFnZ3JlZ2F0ZUVycm9yOmF5fT1KZSgpLGx5PWdsb2JhbFRoaXMuQWdncmVnYXRlRXJyb3J8fGF5LHV5PVN5bWJvbChcImtJc05vZGVFcnJvclwiKSxmeT1bXCJzdHJpbmdcIixcImZ1bmN0aW9uXCIsXCJudW1iZXJcIixcIm9iamVjdFwiLFwiRnVuY3Rpb25cIixcIk9iamVjdFwiLFwiYm9vbGVhblwiLFwiYmlnaW50XCIsXCJzeW1ib2xcIl0sY3k9L14oW0EtWl1bYS16MC05XSopKyQvLGh5PVwiX19ub2RlX2ludGVybmFsX1wiLHppPXt9O2Z1bmN0aW9uIFh0KHQsZSl7aWYoIXQpdGhyb3cgbmV3IHppLkVSUl9JTlRFUk5BTF9BU1NFUlRJT04oZSl9ZnVuY3Rpb24gWHUodCl7bGV0IGU9XCJcIixyPXQubGVuZ3RoLGk9dFswXT09PVwiLVwiPzE6MDtmb3IoO3I+PWkrNDtyLT0zKWU9YF8ke3Quc2xpY2Uoci0zLHIpfSR7ZX1gO3JldHVybiBgJHt0LnNsaWNlKDAscil9JHtlfWB9ZnVuY3Rpb24gZHkodCxlLHIpe2lmKHR5cGVvZiBlPT1cImZ1bmN0aW9uXCIpcmV0dXJuIFh0KGUubGVuZ3RoPD1yLmxlbmd0aCxgQ29kZTogJHt0fTsgVGhlIHByb3ZpZGVkIGFyZ3VtZW50cyBsZW5ndGggKCR7ci5sZW5ndGh9KSBkb2VzIG5vdCBtYXRjaCB0aGUgcmVxdWlyZWQgb25lcyAoJHtlLmxlbmd0aH0pLmApLGUoLi4ucik7bGV0IGk9KGUubWF0Y2goLyVbZGZpam9Pc10vZyl8fFtdKS5sZW5ndGg7cmV0dXJuIFh0KGk9PT1yLmxlbmd0aCxgQ29kZTogJHt0fTsgVGhlIHByb3ZpZGVkIGFyZ3VtZW50cyBsZW5ndGggKCR7ci5sZW5ndGh9KSBkb2VzIG5vdCBtYXRjaCB0aGUgcmVxdWlyZWQgb25lcyAoJHtpfSkuYCksci5sZW5ndGg9PT0wP2U6b3koZSwuLi5yKX1mdW5jdGlvbiBtZSh0LGUscil7cnx8KHI9RXJyb3IpO2NsYXNzIGkgZXh0ZW5kcyBye2NvbnN0cnVjdG9yKC4uLm8pe3N1cGVyKGR5KHQsZSxvKSk7fXRvU3RyaW5nKCl7cmV0dXJuIGAke3RoaXMubmFtZX0gWyR7dH1dOiAke3RoaXMubWVzc2FnZX1gfX1PYmplY3QuZGVmaW5lUHJvcGVydGllcyhpLnByb3RvdHlwZSx7bmFtZTp7dmFsdWU6ci5uYW1lLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSx0b1N0cmluZzp7dmFsdWUoKXtyZXR1cm4gYCR7dGhpcy5uYW1lfSBbJHt0fV06ICR7dGhpcy5tZXNzYWdlfWB9LHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfX0pLGkucHJvdG90eXBlLmNvZGU9dCxpLnByb3RvdHlwZVt1eV09ITAsemlbdF09aTt9ZnVuY3Rpb24gWnUodCl7bGV0IGU9aHkrdC5uYW1lO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIm5hbWVcIix7dmFsdWU6ZX0pLHR9ZnVuY3Rpb24gcHkodCxlKXtpZih0JiZlJiZ0IT09ZSl7aWYoQXJyYXkuaXNBcnJheShlLmVycm9ycykpcmV0dXJuIGUuZXJyb3JzLnB1c2godCksZTtsZXQgcj1uZXcgbHkoW2UsdF0sZS5tZXNzYWdlKTtyZXR1cm4gci5jb2RlPWUuY29kZSxyfXJldHVybiB0fHxlfXZhciB2cz1jbGFzcyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGU9XCJUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkXCIscj12b2lkIDApe2lmKHIhPT12b2lkIDAmJnR5cGVvZiByIT1cIm9iamVjdFwiKXRocm93IG5ldyB6aS5FUlJfSU5WQUxJRF9BUkdfVFlQRShcIm9wdGlvbnNcIixcIk9iamVjdFwiLHIpO3N1cGVyKGUsciksdGhpcy5jb2RlPVwiQUJPUlRfRVJSXCIsdGhpcy5uYW1lPVwiQWJvcnRFcnJvclwiO319O21lKFwiRVJSX0FTU0VSVElPTlwiLFwiJXNcIixFcnJvcik7bWUoXCJFUlJfSU5WQUxJRF9BUkdfVFlQRVwiLCh0LGUscik9PntYdCh0eXBlb2YgdD09XCJzdHJpbmdcIixcIiduYW1lJyBtdXN0IGJlIGEgc3RyaW5nXCIpLEFycmF5LmlzQXJyYXkoZSl8fChlPVtlXSk7bGV0IGk9XCJUaGUgXCI7dC5lbmRzV2l0aChcIiBhcmd1bWVudFwiKT9pKz1gJHt0fSBgOmkrPWBcIiR7dH1cIiAke3QuaW5jbHVkZXMoXCIuXCIpP1wicHJvcGVydHlcIjpcImFyZ3VtZW50XCJ9IGAsaSs9XCJtdXN0IGJlIFwiO2xldCBuPVtdLG89W10scz1bXTtmb3IobGV0IHUgb2YgZSlYdCh0eXBlb2YgdT09XCJzdHJpbmdcIixcIkFsbCBleHBlY3RlZCBlbnRyaWVzIGhhdmUgdG8gYmUgb2YgdHlwZSBzdHJpbmdcIiksZnkuaW5jbHVkZXModSk/bi5wdXNoKHUudG9Mb3dlckNhc2UoKSk6Y3kudGVzdCh1KT9vLnB1c2godSk6KFh0KHUhPT1cIm9iamVjdFwiLCdUaGUgdmFsdWUgXCJvYmplY3RcIiBzaG91bGQgYmUgd3JpdHRlbiBhcyBcIk9iamVjdFwiJykscy5wdXNoKHUpKTtpZihvLmxlbmd0aD4wKXtsZXQgdT1uLmluZGV4T2YoXCJvYmplY3RcIik7dSE9PS0xJiYobi5zcGxpY2Uobix1LDEpLG8ucHVzaChcIk9iamVjdFwiKSk7fWlmKG4ubGVuZ3RoPjApe3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAxOmkrPWBvZiB0eXBlICR7blswXX1gO2JyZWFrO2Nhc2UgMjppKz1gb25lIG9mIHR5cGUgJHtuWzBdfSBvciAke25bMV19YDticmVhaztkZWZhdWx0OntsZXQgdT1uLnBvcCgpO2krPWBvbmUgb2YgdHlwZSAke24uam9pbihcIiwgXCIpfSwgb3IgJHt1fWA7fX0oby5sZW5ndGg+MHx8cy5sZW5ndGg+MCkmJihpKz1cIiBvciBcIik7fWlmKG8ubGVuZ3RoPjApe3N3aXRjaChvLmxlbmd0aCl7Y2FzZSAxOmkrPWBhbiBpbnN0YW5jZSBvZiAke29bMF19YDticmVhaztjYXNlIDI6aSs9YGFuIGluc3RhbmNlIG9mICR7b1swXX0gb3IgJHtvWzFdfWA7YnJlYWs7ZGVmYXVsdDp7bGV0IHU9by5wb3AoKTtpKz1gYW4gaW5zdGFuY2Ugb2YgJHtvLmpvaW4oXCIsIFwiKX0sIG9yICR7dX1gO319cy5sZW5ndGg+MCYmKGkrPVwiIG9yIFwiKTt9c3dpdGNoKHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnNbMF0udG9Mb3dlckNhc2UoKSE9PXNbMF0mJihpKz1cImFuIFwiKSxpKz1gJHtzWzBdfWA7YnJlYWs7Y2FzZSAyOmkrPWBvbmUgb2YgJHtzWzBdfSBvciAke3NbMV19YDticmVhaztkZWZhdWx0OntsZXQgdT1zLnBvcCgpO2krPWBvbmUgb2YgJHtzLmpvaW4oXCIsIFwiKX0sIG9yICR7dX1gO319aWYocj09bnVsbClpKz1gLiBSZWNlaXZlZCAke3J9YDtlbHNlIGlmKHR5cGVvZiByPT1cImZ1bmN0aW9uXCImJnIubmFtZSlpKz1gLiBSZWNlaXZlZCBmdW5jdGlvbiAke3IubmFtZX1gO2Vsc2UgaWYodHlwZW9mIHI9PVwib2JqZWN0XCIpe3ZhciBhO2lmKChhPXIuY29uc3RydWN0b3IpIT09bnVsbCYmYSE9PXZvaWQgMCYmYS5uYW1lKWkrPWAuIFJlY2VpdmVkIGFuIGluc3RhbmNlIG9mICR7ci5jb25zdHJ1Y3Rvci5uYW1lfWA7ZWxzZSB7bGV0IHU9Vmkocix7ZGVwdGg6LTF9KTtpKz1gLiBSZWNlaXZlZCAke3V9YDt9fWVsc2Uge2xldCB1PVZpKHIse2NvbG9yczohMX0pO3UubGVuZ3RoPjI1JiYodT1gJHt1LnNsaWNlKDAsMjUpfS4uLmApLGkrPWAuIFJlY2VpdmVkIHR5cGUgJHt0eXBlb2Ygcn0gKCR7dX0pYDt9cmV0dXJuIGl9LFR5cGVFcnJvcik7bWUoXCJFUlJfSU5WQUxJRF9BUkdfVkFMVUVcIiwodCxlLHI9XCJpcyBpbnZhbGlkXCIpPT57bGV0IGk9VmkoZSk7cmV0dXJuIGkubGVuZ3RoPjEyOCYmKGk9aS5zbGljZSgwLDEyOCkrXCIuLi5cIiksYFRoZSAke3QuaW5jbHVkZXMoXCIuXCIpP1wicHJvcGVydHlcIjpcImFyZ3VtZW50XCJ9ICcke3R9JyAke3J9LiBSZWNlaXZlZCAke2l9YH0sVHlwZUVycm9yKTttZShcIkVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRVwiLCh0LGUscik9Pnt2YXIgaTtsZXQgbj1yIT1udWxsJiYoaT1yLmNvbnN0cnVjdG9yKSE9PW51bGwmJmkhPT12b2lkIDAmJmkubmFtZT9gaW5zdGFuY2Ugb2YgJHtyLmNvbnN0cnVjdG9yLm5hbWV9YDpgdHlwZSAke3R5cGVvZiByfWA7cmV0dXJuIGBFeHBlY3RlZCAke3R9IHRvIGJlIHJldHVybmVkIGZyb20gdGhlIFwiJHtlfVwiIGZ1bmN0aW9uIGJ1dCBnb3QgJHtufS5gfSxUeXBlRXJyb3IpO21lKFwiRVJSX01JU1NJTkdfQVJHU1wiLCguLi50KT0+e1h0KHQubGVuZ3RoPjAsXCJBdCBsZWFzdCBvbmUgYXJnIG5lZWRzIHRvIGJlIHNwZWNpZmllZFwiKTtsZXQgZSxyPXQubGVuZ3RoO3N3aXRjaCh0PShBcnJheS5pc0FycmF5KHQpP3Q6W3RdKS5tYXAoaT0+YFwiJHtpfVwiYCkuam9pbihcIiBvciBcIikscil7Y2FzZSAxOmUrPWBUaGUgJHt0WzBdfSBhcmd1bWVudGA7YnJlYWs7Y2FzZSAyOmUrPWBUaGUgJHt0WzBdfSBhbmQgJHt0WzFdfSBhcmd1bWVudHNgO2JyZWFrO2RlZmF1bHQ6e2xldCBpPXQucG9wKCk7ZSs9YFRoZSAke3Quam9pbihcIiwgXCIpfSwgYW5kICR7aX0gYXJndW1lbnRzYDt9YnJlYWt9cmV0dXJuIGAke2V9IG11c3QgYmUgc3BlY2lmaWVkYH0sVHlwZUVycm9yKTttZShcIkVSUl9PVVRfT0ZfUkFOR0VcIiwodCxlLHIpPT57WHQoZSwnTWlzc2luZyBcInJhbmdlXCIgYXJndW1lbnQnKTtsZXQgaTtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihyKSYmTWF0aC5hYnMocik+MioqMzI/aT1YdShTdHJpbmcocikpOnR5cGVvZiByPT1cImJpZ2ludFwiPyhpPVN0cmluZyhyKSwocj4ybioqMzJufHxyPC0oMm4qKjMybikpJiYoaT1YdShpKSksaSs9XCJuXCIpOmk9VmkociksYFRoZSB2YWx1ZSBvZiBcIiR7dH1cIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgJHtlfS4gUmVjZWl2ZWQgJHtpfWB9LFJhbmdlRXJyb3IpO21lKFwiRVJSX01VTFRJUExFX0NBTExCQUNLXCIsXCJDYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXNcIixFcnJvcik7bWUoXCJFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRFwiLFwiVGhlICVzIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWRcIixFcnJvcik7bWUoXCJFUlJfU1RSRUFNX0FMUkVBRFlfRklOSVNIRURcIixcIkNhbm5vdCBjYWxsICVzIGFmdGVyIGEgc3RyZWFtIHdhcyBmaW5pc2hlZFwiLEVycm9yKTttZShcIkVSUl9TVFJFQU1fQ0FOTk9UX1BJUEVcIixcIkNhbm5vdCBwaXBlLCBub3QgcmVhZGFibGVcIixFcnJvcik7bWUoXCJFUlJfU1RSRUFNX0RFU1RST1lFRFwiLFwiQ2Fubm90IGNhbGwgJXMgYWZ0ZXIgYSBzdHJlYW0gd2FzIGRlc3Ryb3llZFwiLEVycm9yKTttZShcIkVSUl9TVFJFQU1fTlVMTF9WQUxVRVNcIixcIk1heSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtXCIsVHlwZUVycm9yKTttZShcIkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFXCIsXCJQcmVtYXR1cmUgY2xvc2VcIixFcnJvcik7bWUoXCJFUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GXCIsXCJzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRlwiLEVycm9yKTttZShcIkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlRcIixcInN0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50XCIsRXJyb3IpO21lKFwiRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkRcIixcIndyaXRlIGFmdGVyIGVuZFwiLEVycm9yKTttZShcIkVSUl9VTktOT1dOX0VOQ09ESU5HXCIsXCJVbmtub3duIGVuY29kaW5nOiAlc1wiLFR5cGVFcnJvcik7ZWYuZXhwb3J0cz17QWJvcnRFcnJvcjp2cyxhZ2dyZWdhdGVUd29FcnJvcnM6WnUocHkpLGhpZGVTdGFja0ZyYW1lczpadSxjb2Rlczp6aX07fSk7dmFyIGZpPU0oKHlJLGZmKT0+e3YoKTttKCk7XygpO3ZhcntBcnJheUlzQXJyYXk6U3MsQXJyYXlQcm90b3R5cGVJbmNsdWRlczpzZixBcnJheVByb3RvdHlwZUpvaW46b2YsQXJyYXlQcm90b3R5cGVNYXA6Z3ksTnVtYmVySXNJbnRlZ2VyOkFzLE51bWJlcklzTmFOOnl5LE51bWJlck1BWF9TQUZFX0lOVEVHRVI6YnksTnVtYmVyTUlOX1NBRkVfSU5URUdFUjp3eSxOdW1iZXJQYXJzZUludDpfeSxPYmplY3RQcm90b3R5cGVIYXNPd25Qcm9wZXJ0eTpteSxSZWdFeHBQcm90b3R5cGVFeGVjOmFmLFN0cmluZzp2eSxTdHJpbmdQcm90b3R5cGVUb1VwcGVyQ2FzZTpFeSxTdHJpbmdQcm90b3R5cGVUcmltOlN5fT1jZSgpLHtoaWRlU3RhY2tGcmFtZXM6VWUsY29kZXM6e0VSUl9TT0NLRVRfQkFEX1BPUlQ6QXksRVJSX0lOVkFMSURfQVJHX1RZUEU6QWUsRVJSX0lOVkFMSURfQVJHX1ZBTFVFOk1yLEVSUl9PVVRfT0ZfUkFOR0U6WnQsRVJSX1VOS05PV05fU0lHTkFMOnRmfX09U2UoKSx7bm9ybWFsaXplRW5jb2Rpbmc6SXl9PUplKCkse2lzQXN5bmNGdW5jdGlvbjpUeSxpc0FycmF5QnVmZmVyVmlldzpSeX09SmUoKS50eXBlcyxyZj17fTtmdW5jdGlvbiBDeSh0KXtyZXR1cm4gdD09PSh0fDApfWZ1bmN0aW9uIEJ5KHQpe3JldHVybiB0PT09dD4+PjB9dmFyIFB5PS9eWzAtN10rJC8sT3k9XCJtdXN0IGJlIGEgMzItYml0IHVuc2lnbmVkIGludGVnZXIgb3IgYW4gb2N0YWwgc3RyaW5nXCI7ZnVuY3Rpb24ga3kodCxlLHIpe2lmKHR5cGVvZiB0PlwidVwiJiYodD1yKSx0eXBlb2YgdD09XCJzdHJpbmdcIil7aWYoYWYoUHksdCk9PT1udWxsKXRocm93IG5ldyBNcihlLHQsT3kpO3Q9X3kodCw4KTt9cmV0dXJuIGxmKHQsZSksdH12YXIgeHk9VWUoKHQsZSxyPXd5LGk9YnkpPT57aWYodHlwZW9mIHQhPVwibnVtYmVyXCIpdGhyb3cgbmV3IEFlKGUsXCJudW1iZXJcIix0KTtpZighQXModCkpdGhyb3cgbmV3IFp0KGUsXCJhbiBpbnRlZ2VyXCIsdCk7aWYodDxyfHx0PmkpdGhyb3cgbmV3IFp0KGUsYD49ICR7cn0gJiYgPD0gJHtpfWAsdCl9KSxNeT1VZSgodCxlLHI9LTIxNDc0ODM2NDgsaT0yMTQ3NDgzNjQ3KT0+e2lmKHR5cGVvZiB0IT1cIm51bWJlclwiKXRocm93IG5ldyBBZShlLFwibnVtYmVyXCIsdCk7aWYoIUFzKHQpKXRocm93IG5ldyBadChlLFwiYW4gaW50ZWdlclwiLHQpO2lmKHQ8cnx8dD5pKXRocm93IG5ldyBadChlLGA+PSAke3J9ICYmIDw9ICR7aX1gLHQpfSksbGY9VWUoKHQsZSxyPSExKT0+e2lmKHR5cGVvZiB0IT1cIm51bWJlclwiKXRocm93IG5ldyBBZShlLFwibnVtYmVyXCIsdCk7aWYoIUFzKHQpKXRocm93IG5ldyBadChlLFwiYW4gaW50ZWdlclwiLHQpO2xldCBpPXI/MTowLG49NDI5NDk2NzI5NTtpZih0PGl8fHQ+bil0aHJvdyBuZXcgWnQoZSxgPj0gJHtpfSAmJiA8PSAke259YCx0KX0pO2Z1bmN0aW9uIElzKHQsZSl7aWYodHlwZW9mIHQhPVwic3RyaW5nXCIpdGhyb3cgbmV3IEFlKGUsXCJzdHJpbmdcIix0KX1mdW5jdGlvbiBMeSh0LGUscj12b2lkIDAsaSl7aWYodHlwZW9mIHQhPVwibnVtYmVyXCIpdGhyb3cgbmV3IEFlKGUsXCJudW1iZXJcIix0KTtpZihyIT1udWxsJiZ0PHJ8fGkhPW51bGwmJnQ+aXx8KHIhPW51bGx8fGkhPW51bGwpJiZ5eSh0KSl0aHJvdyBuZXcgWnQoZSxgJHtyIT1udWxsP2A+PSAke3J9YDpcIlwifSR7ciE9bnVsbCYmaSE9bnVsbD9cIiAmJiBcIjpcIlwifSR7aSE9bnVsbD9gPD0gJHtpfWA6XCJcIn1gLHQpfXZhciBVeT1VZSgodCxlLHIpPT57aWYoIXNmKHIsdCkpe2xldCBuPVwibXVzdCBiZSBvbmUgb2Y6IFwiK29mKGd5KHIsbz0+dHlwZW9mIG89PVwic3RyaW5nXCI/YCcke299J2A6dnkobykpLFwiLCBcIik7dGhyb3cgbmV3IE1yKGUsdCxuKX19KTtmdW5jdGlvbiB1Zih0LGUpe2lmKHR5cGVvZiB0IT1cImJvb2xlYW5cIil0aHJvdyBuZXcgQWUoZSxcImJvb2xlYW5cIix0KX1mdW5jdGlvbiBFcyh0LGUscil7cmV0dXJuIHQ9PW51bGx8fCFteSh0LGUpP3I6dFtlXX12YXIgTnk9VWUoKHQsZSxyPW51bGwpPT57bGV0IGk9RXMocixcImFsbG93QXJyYXlcIiwhMSksbj1FcyhyLFwiYWxsb3dGdW5jdGlvblwiLCExKTtpZighRXMocixcIm51bGxhYmxlXCIsITEpJiZ0PT09bnVsbHx8IWkmJlNzKHQpfHx0eXBlb2YgdCE9XCJvYmplY3RcIiYmKCFufHx0eXBlb2YgdCE9XCJmdW5jdGlvblwiKSl0aHJvdyBuZXcgQWUoZSxcIk9iamVjdFwiLHQpfSkscXk9VWUoKHQsZSk9PntpZih0IT1udWxsJiZ0eXBlb2YgdCE9XCJvYmplY3RcIiYmdHlwZW9mIHQhPVwiZnVuY3Rpb25cIil0aHJvdyBuZXcgQWUoZSxcImEgZGljdGlvbmFyeVwiLHQpfSksVHM9VWUoKHQsZSxyPTApPT57aWYoIVNzKHQpKXRocm93IG5ldyBBZShlLFwiQXJyYXlcIix0KTtpZih0Lmxlbmd0aDxyKXtsZXQgaT1gbXVzdCBiZSBsb25nZXIgdGhhbiAke3J9YDt0aHJvdyBuZXcgTXIoZSx0LGkpfX0pO2Z1bmN0aW9uIER5KHQsZSl7VHModCxlKTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKylJcyh0W3JdLGAke2V9WyR7cn1dYCk7fWZ1bmN0aW9uIGp5KHQsZSl7VHModCxlKTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl1Zih0W3JdLGAke2V9WyR7cn1dYCk7fWZ1bmN0aW9uIEZ5KHQsZT1cInNpZ25hbFwiKXtpZihJcyh0LGUpLHJmW3RdPT09dm9pZCAwKXRocm93IHJmW0V5KHQpXSE9PXZvaWQgMD9uZXcgdGYodCtcIiAoc2lnbmFscyBtdXN0IHVzZSBhbGwgY2FwaXRhbCBsZXR0ZXJzKVwiKTpuZXcgdGYodCl9dmFyIFd5PVVlKCh0LGU9XCJidWZmZXJcIik9PntpZighUnkodCkpdGhyb3cgbmV3IEFlKGUsW1wiQnVmZmVyXCIsXCJUeXBlZEFycmF5XCIsXCJEYXRhVmlld1wiXSx0KX0pO2Z1bmN0aW9uICR5KHQsZSl7bGV0IHI9SXkoZSksaT10Lmxlbmd0aDtpZihyPT09XCJoZXhcIiYmaSUyIT09MCl0aHJvdyBuZXcgTXIoXCJlbmNvZGluZ1wiLGUsYGlzIGludmFsaWQgZm9yIGRhdGEgb2YgbGVuZ3RoICR7aX1gKX1mdW5jdGlvbiBIeSh0LGU9XCJQb3J0XCIscj0hMCl7aWYodHlwZW9mIHQhPVwibnVtYmVyXCImJnR5cGVvZiB0IT1cInN0cmluZ1wifHx0eXBlb2YgdD09XCJzdHJpbmdcIiYmU3kodCkubGVuZ3RoPT09MHx8K3QhPT0rdD4+PjB8fHQ+NjU1MzV8fHQ9PT0wJiYhcil0aHJvdyBuZXcgQXkoZSx0LHIpO3JldHVybiB0fDB9dmFyIFZ5PVVlKCh0LGUpPT57aWYodCE9PXZvaWQgMCYmKHQ9PT1udWxsfHx0eXBlb2YgdCE9XCJvYmplY3RcInx8IShcImFib3J0ZWRcImluIHQpKSl0aHJvdyBuZXcgQWUoZSxcIkFib3J0U2lnbmFsXCIsdCl9KSx6eT1VZSgodCxlKT0+e2lmKHR5cGVvZiB0IT1cImZ1bmN0aW9uXCIpdGhyb3cgbmV3IEFlKGUsXCJGdW5jdGlvblwiLHQpfSksS3k9VWUoKHQsZSk9PntpZih0eXBlb2YgdCE9XCJmdW5jdGlvblwifHxUeSh0KSl0aHJvdyBuZXcgQWUoZSxcIkZ1bmN0aW9uXCIsdCl9KSxHeT1VZSgodCxlKT0+e2lmKHQhPT12b2lkIDApdGhyb3cgbmV3IEFlKGUsXCJ1bmRlZmluZWRcIix0KX0pO2Z1bmN0aW9uIFF5KHQsZSxyKXtpZighc2Yocix0KSl0aHJvdyBuZXcgQWUoZSxgKCcke29mKHIsXCJ8XCIpfScpYCx0KX12YXIgWXk9L14oPzo8W14+XSo+KSg/Olxccyo7XFxzKlteO1wiXFxzXSsoPzo9KFwiKT9bXjtcIlxcc10qXFwxKT8pKiQvO2Z1bmN0aW9uIG5mKHQsZSl7aWYodHlwZW9mIHQ+XCJ1XCJ8fCFhZihZeSx0KSl0aHJvdyBuZXcgTXIoZSx0LCdtdXN0IGJlIGFuIGFycmF5IG9yIHN0cmluZyBvZiBmb3JtYXQgXCI8L3N0eWxlcy5jc3M+OyByZWw9cHJlbG9hZDsgYXM9c3R5bGVcIicpfWZ1bmN0aW9uIEp5KHQpe2lmKHR5cGVvZiB0PT1cInN0cmluZ1wiKXJldHVybiBuZih0LFwiaGludHNcIiksdDtpZihTcyh0KSl7bGV0IGU9dC5sZW5ndGgscj1cIlwiO2lmKGU9PT0wKXJldHVybiByO2ZvcihsZXQgaT0wO2k8ZTtpKyspe2xldCBuPXRbaV07bmYobixcImhpbnRzXCIpLHIrPW4saSE9PWUtMSYmKHIrPVwiLCBcIik7fXJldHVybiByfXRocm93IG5ldyBNcihcImhpbnRzXCIsdCwnbXVzdCBiZSBhbiBhcnJheSBvciBzdHJpbmcgb2YgZm9ybWF0IFwiPC9zdHlsZXMuY3NzPjsgcmVsPXByZWxvYWQ7IGFzPXN0eWxlXCInKX1mZi5leHBvcnRzPXtpc0ludDMyOkN5LGlzVWludDMyOkJ5LHBhcnNlRmlsZU1vZGU6a3ksdmFsaWRhdGVBcnJheTpUcyx2YWxpZGF0ZVN0cmluZ0FycmF5OkR5LHZhbGlkYXRlQm9vbGVhbkFycmF5Omp5LHZhbGlkYXRlQm9vbGVhbjp1Zix2YWxpZGF0ZUJ1ZmZlcjpXeSx2YWxpZGF0ZURpY3Rpb25hcnk6cXksdmFsaWRhdGVFbmNvZGluZzokeSx2YWxpZGF0ZUZ1bmN0aW9uOnp5LHZhbGlkYXRlSW50MzI6TXksdmFsaWRhdGVJbnRlZ2VyOnh5LHZhbGlkYXRlTnVtYmVyOkx5LHZhbGlkYXRlT2JqZWN0Ok55LHZhbGlkYXRlT25lT2Y6VXksdmFsaWRhdGVQbGFpbkZ1bmN0aW9uOkt5LHZhbGlkYXRlUG9ydDpIeSx2YWxpZGF0ZVNpZ25hbE5hbWU6RnksdmFsaWRhdGVTdHJpbmc6SXMsdmFsaWRhdGVVaW50MzI6bGYsdmFsaWRhdGVVbmRlZmluZWQ6R3ksdmFsaWRhdGVVbmlvbjpReSx2YWxpZGF0ZUFib3J0U2lnbmFsOlZ5LHZhbGlkYXRlTGlua0hlYWRlclZhbHVlOkp5fTt9KTt2YXIgVXQ9TSgoVEkscGYpPT57digpO20oKTtfKCk7dmFyIGFlPXBmLmV4cG9ydHM9e30sWGUsWmU7ZnVuY3Rpb24gUnMoKXt0aHJvdyBuZXcgRXJyb3IoXCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkXCIpfWZ1bmN0aW9uIENzKCl7dGhyb3cgbmV3IEVycm9yKFwiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkXCIpfShmdW5jdGlvbigpe3RyeXt0eXBlb2Ygc2V0VGltZW91dD09XCJmdW5jdGlvblwiP1hlPXNldFRpbWVvdXQ6WGU9UnM7fWNhdGNoe1hlPVJzO310cnl7dHlwZW9mIGNsZWFyVGltZW91dD09XCJmdW5jdGlvblwiP1plPWNsZWFyVGltZW91dDpaZT1Dczt9Y2F0Y2h7WmU9Q3M7fX0pKCk7ZnVuY3Rpb24gY2YodCl7aWYoWGU9PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KHQsMCk7aWYoKFhlPT09UnN8fCFYZSkmJnNldFRpbWVvdXQpcmV0dXJuIFhlPXNldFRpbWVvdXQsc2V0VGltZW91dCh0LDApO3RyeXtyZXR1cm4gWGUodCwwKX1jYXRjaHt0cnl7cmV0dXJuIFhlLmNhbGwobnVsbCx0LDApfWNhdGNoe3JldHVybiBYZS5jYWxsKHRoaXMsdCwwKX19fWZ1bmN0aW9uIFh5KHQpe2lmKFplPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQodCk7aWYoKFplPT09Q3N8fCFaZSkmJmNsZWFyVGltZW91dClyZXR1cm4gWmU9Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dCh0KTt0cnl7cmV0dXJuIFplKHQpfWNhdGNoe3RyeXtyZXR1cm4gWmUuY2FsbChudWxsLHQpfWNhdGNoe3JldHVybiBaZS5jYWxsKHRoaXMsdCl9fX12YXIgd3Q9W10sTHI9ITEsZXIsS2k9LTE7ZnVuY3Rpb24gWnkoKXshTHJ8fCFlcnx8KExyPSExLGVyLmxlbmd0aD93dD1lci5jb25jYXQod3QpOktpPS0xLHd0Lmxlbmd0aCYmaGYoKSk7fWZ1bmN0aW9uIGhmKCl7aWYoIUxyKXt2YXIgdD1jZihaeSk7THI9ITA7Zm9yKHZhciBlPXd0Lmxlbmd0aDtlOyl7Zm9yKGVyPXd0LHd0PVtdOysrS2k8ZTspZXImJmVyW0tpXS5ydW4oKTtLaT0tMSxlPXd0Lmxlbmd0aDt9ZXI9bnVsbCxMcj0hMSxYeSh0KTt9fWFlLm5leHRUaWNrPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKWVbci0xXT1hcmd1bWVudHNbcl07d3QucHVzaChuZXcgZGYodCxlKSksd3QubGVuZ3RoPT09MSYmIUxyJiZjZihoZik7fTtmdW5jdGlvbiBkZih0LGUpe3RoaXMuZnVuPXQsdGhpcy5hcnJheT1lO31kZi5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dGhpcy5mdW4uYXBwbHkobnVsbCx0aGlzLmFycmF5KTt9O2FlLnRpdGxlPVwiYnJvd3NlclwiO2FlLmJyb3dzZXI9ITA7YWUuZW52PXt9O2FlLmFyZ3Y9W107YWUudmVyc2lvbj1cIlwiO2FlLnZlcnNpb25zPXt9O2Z1bmN0aW9uIF90KCl7fWFlLm9uPV90O2FlLmFkZExpc3RlbmVyPV90O2FlLm9uY2U9X3Q7YWUub2ZmPV90O2FlLnJlbW92ZUxpc3RlbmVyPV90O2FlLnJlbW92ZUFsbExpc3RlbmVycz1fdDthZS5lbWl0PV90O2FlLnByZXBlbmRMaXN0ZW5lcj1fdDthZS5wcmVwZW5kT25jZUxpc3RlbmVyPV90O2FlLmxpc3RlbmVycz1mdW5jdGlvbih0KXtyZXR1cm4gW119O2FlLmJpbmRpbmc9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKFwicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWRcIil9O2FlLmN3ZD1mdW5jdGlvbigpe3JldHVybiBcIi9cIn07YWUuY2hkaXI9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKFwicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkXCIpfTthZS51bWFzaz1mdW5jdGlvbigpe3JldHVybiAwfTt9KTt2YXIgdHQ9TSgoVUksUGYpPT57digpO20oKTtfKCk7dmFye1N5bWJvbDpHaSxTeW1ib2xBc3luY0l0ZXJhdG9yOmdmLFN5bWJvbEl0ZXJhdG9yOnlmLFN5bWJvbEZvcjpiZn09Y2UoKSx3Zj1HaShcImtEZXN0cm95ZWRcIiksX2Y9R2koXCJrSXNFcnJvcmVkXCIpLEJzPUdpKFwia0lzUmVhZGFibGVcIiksbWY9R2koXCJrSXNEaXN0dXJiZWRcIiksZWI9YmYoXCJub2RlanMud2Vic3RyZWFtLmlzQ2xvc2VkUHJvbWlzZVwiKSx0Yj1iZihcIm5vZGVqcy53ZWJzdHJlYW0uY29udHJvbGxlckVycm9yRnVuY3Rpb25cIik7ZnVuY3Rpb24gUWkodCxlPSExKXt2YXIgcjtyZXR1cm4gISEodCYmdHlwZW9mIHQucGlwZT09XCJmdW5jdGlvblwiJiZ0eXBlb2YgdC5vbj09XCJmdW5jdGlvblwiJiYoIWV8fHR5cGVvZiB0LnBhdXNlPT1cImZ1bmN0aW9uXCImJnR5cGVvZiB0LnJlc3VtZT09XCJmdW5jdGlvblwiKSYmKCF0Ll93cml0YWJsZVN0YXRlfHwoKHI9dC5fcmVhZGFibGVTdGF0ZSk9PT1udWxsfHxyPT09dm9pZCAwP3ZvaWQgMDpyLnJlYWRhYmxlKSE9PSExKSYmKCF0Ll93cml0YWJsZVN0YXRlfHx0Ll9yZWFkYWJsZVN0YXRlKSl9ZnVuY3Rpb24gWWkodCl7dmFyIGU7cmV0dXJuICEhKHQmJnR5cGVvZiB0LndyaXRlPT1cImZ1bmN0aW9uXCImJnR5cGVvZiB0Lm9uPT1cImZ1bmN0aW9uXCImJighdC5fcmVhZGFibGVTdGF0ZXx8KChlPXQuX3dyaXRhYmxlU3RhdGUpPT09bnVsbHx8ZT09PXZvaWQgMD92b2lkIDA6ZS53cml0YWJsZSkhPT0hMSkpfWZ1bmN0aW9uIHJiKHQpe3JldHVybiAhISh0JiZ0eXBlb2YgdC5waXBlPT1cImZ1bmN0aW9uXCImJnQuX3JlYWRhYmxlU3RhdGUmJnR5cGVvZiB0Lm9uPT1cImZ1bmN0aW9uXCImJnR5cGVvZiB0LndyaXRlPT1cImZ1bmN0aW9uXCIpfWZ1bmN0aW9uIGV0KHQpe3JldHVybiB0JiYodC5fcmVhZGFibGVTdGF0ZXx8dC5fd3JpdGFibGVTdGF0ZXx8dHlwZW9mIHQud3JpdGU9PVwiZnVuY3Rpb25cIiYmdHlwZW9mIHQub249PVwiZnVuY3Rpb25cInx8dHlwZW9mIHQucGlwZT09XCJmdW5jdGlvblwiJiZ0eXBlb2YgdC5vbj09XCJmdW5jdGlvblwiKX1mdW5jdGlvbiB2Zih0KXtyZXR1cm4gISEodCYmIWV0KHQpJiZ0eXBlb2YgdC5waXBlVGhyb3VnaD09XCJmdW5jdGlvblwiJiZ0eXBlb2YgdC5nZXRSZWFkZXI9PVwiZnVuY3Rpb25cIiYmdHlwZW9mIHQuY2FuY2VsPT1cImZ1bmN0aW9uXCIpfWZ1bmN0aW9uIEVmKHQpe3JldHVybiAhISh0JiYhZXQodCkmJnR5cGVvZiB0LmdldFdyaXRlcj09XCJmdW5jdGlvblwiJiZ0eXBlb2YgdC5hYm9ydD09XCJmdW5jdGlvblwiKX1mdW5jdGlvbiBTZih0KXtyZXR1cm4gISEodCYmIWV0KHQpJiZ0eXBlb2YgdC5yZWFkYWJsZT09XCJvYmplY3RcIiYmdHlwZW9mIHQud3JpdGFibGU9PVwib2JqZWN0XCIpfWZ1bmN0aW9uIGliKHQpe3JldHVybiB2Zih0KXx8RWYodCl8fFNmKHQpfWZ1bmN0aW9uIG5iKHQsZSl7cmV0dXJuIHQ9PW51bGw/ITE6ZT09PSEwP3R5cGVvZiB0W2dmXT09XCJmdW5jdGlvblwiOmU9PT0hMT90eXBlb2YgdFt5Zl09PVwiZnVuY3Rpb25cIjp0eXBlb2YgdFtnZl09PVwiZnVuY3Rpb25cInx8dHlwZW9mIHRbeWZdPT1cImZ1bmN0aW9uXCJ9ZnVuY3Rpb24gSmkodCl7aWYoIWV0KHQpKXJldHVybiBudWxsO2xldCBlPXQuX3dyaXRhYmxlU3RhdGUscj10Ll9yZWFkYWJsZVN0YXRlLGk9ZXx8cjtyZXR1cm4gISEodC5kZXN0cm95ZWR8fHRbd2ZdfHxpIT1udWxsJiZpLmRlc3Ryb3llZCl9ZnVuY3Rpb24gQWYodCl7aWYoIVlpKHQpKXJldHVybiBudWxsO2lmKHQud3JpdGFibGVFbmRlZD09PSEwKXJldHVybiAhMDtsZXQgZT10Ll93cml0YWJsZVN0YXRlO3JldHVybiBlIT1udWxsJiZlLmVycm9yZWQ/ITE6dHlwZW9mIGU/LmVuZGVkIT1cImJvb2xlYW5cIj9udWxsOmUuZW5kZWR9ZnVuY3Rpb24gc2IodCxlKXtpZighWWkodCkpcmV0dXJuIG51bGw7aWYodC53cml0YWJsZUZpbmlzaGVkPT09ITApcmV0dXJuICEwO2xldCByPXQuX3dyaXRhYmxlU3RhdGU7cmV0dXJuIHIhPW51bGwmJnIuZXJyb3JlZD8hMTp0eXBlb2Ygcj8uZmluaXNoZWQhPVwiYm9vbGVhblwiP251bGw6ISEoci5maW5pc2hlZHx8ZT09PSExJiZyLmVuZGVkPT09ITAmJnIubGVuZ3RoPT09MCl9ZnVuY3Rpb24gb2IodCl7aWYoIVFpKHQpKXJldHVybiBudWxsO2lmKHQucmVhZGFibGVFbmRlZD09PSEwKXJldHVybiAhMDtsZXQgZT10Ll9yZWFkYWJsZVN0YXRlO3JldHVybiAhZXx8ZS5lcnJvcmVkPyExOnR5cGVvZiBlPy5lbmRlZCE9XCJib29sZWFuXCI/bnVsbDplLmVuZGVkfWZ1bmN0aW9uIElmKHQsZSl7aWYoIVFpKHQpKXJldHVybiBudWxsO2xldCByPXQuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIHIhPW51bGwmJnIuZXJyb3JlZD8hMTp0eXBlb2Ygcj8uZW5kRW1pdHRlZCE9XCJib29sZWFuXCI/bnVsbDohIShyLmVuZEVtaXR0ZWR8fGU9PT0hMSYmci5lbmRlZD09PSEwJiZyLmxlbmd0aD09PTApfWZ1bmN0aW9uIFRmKHQpe3JldHVybiB0JiZ0W0JzXSE9bnVsbD90W0JzXTp0eXBlb2YgdD8ucmVhZGFibGUhPVwiYm9vbGVhblwiP251bGw6SmkodCk/ITE6UWkodCkmJnQucmVhZGFibGUmJiFJZih0KX1mdW5jdGlvbiBSZih0KXtyZXR1cm4gdHlwZW9mIHQ/LndyaXRhYmxlIT1cImJvb2xlYW5cIj9udWxsOkppKHQpPyExOllpKHQpJiZ0LndyaXRhYmxlJiYhQWYodCl9ZnVuY3Rpb24gYWIodCxlKXtyZXR1cm4gZXQodCk/SmkodCk/ITA6IShlPy5yZWFkYWJsZSE9PSExJiZUZih0KXx8ZT8ud3JpdGFibGUhPT0hMSYmUmYodCkpOm51bGx9ZnVuY3Rpb24gbGIodCl7dmFyIGUscjtyZXR1cm4gZXQodCk/dC53cml0YWJsZUVycm9yZWQ/dC53cml0YWJsZUVycm9yZWQ6KGU9KHI9dC5fd3JpdGFibGVTdGF0ZSk9PT1udWxsfHxyPT09dm9pZCAwP3ZvaWQgMDpyLmVycm9yZWQpIT09bnVsbCYmZSE9PXZvaWQgMD9lOm51bGw6bnVsbH1mdW5jdGlvbiB1Yih0KXt2YXIgZSxyO3JldHVybiBldCh0KT90LnJlYWRhYmxlRXJyb3JlZD90LnJlYWRhYmxlRXJyb3JlZDooZT0ocj10Ll9yZWFkYWJsZVN0YXRlKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIuZXJyb3JlZCkhPT1udWxsJiZlIT09dm9pZCAwP2U6bnVsbDpudWxsfWZ1bmN0aW9uIGZiKHQpe2lmKCFldCh0KSlyZXR1cm4gbnVsbDtpZih0eXBlb2YgdC5jbG9zZWQ9PVwiYm9vbGVhblwiKXJldHVybiB0LmNsb3NlZDtsZXQgZT10Ll93cml0YWJsZVN0YXRlLHI9dC5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gdHlwZW9mIGU/LmNsb3NlZD09XCJib29sZWFuXCJ8fHR5cGVvZiByPy5jbG9zZWQ9PVwiYm9vbGVhblwiP2U/LmNsb3NlZHx8cj8uY2xvc2VkOnR5cGVvZiB0Ll9jbG9zZWQ9PVwiYm9vbGVhblwiJiZDZih0KT90Ll9jbG9zZWQ6bnVsbH1mdW5jdGlvbiBDZih0KXtyZXR1cm4gdHlwZW9mIHQuX2Nsb3NlZD09XCJib29sZWFuXCImJnR5cGVvZiB0Ll9kZWZhdWx0S2VlcEFsaXZlPT1cImJvb2xlYW5cIiYmdHlwZW9mIHQuX3JlbW92ZWRDb25uZWN0aW9uPT1cImJvb2xlYW5cIiYmdHlwZW9mIHQuX3JlbW92ZWRDb250TGVuPT1cImJvb2xlYW5cIn1mdW5jdGlvbiBCZih0KXtyZXR1cm4gdHlwZW9mIHQuX3NlbnQxMDA9PVwiYm9vbGVhblwiJiZDZih0KX1mdW5jdGlvbiBjYih0KXt2YXIgZTtyZXR1cm4gdHlwZW9mIHQuX2NvbnN1bWluZz09XCJib29sZWFuXCImJnR5cGVvZiB0Ll9kdW1wZWQ9PVwiYm9vbGVhblwiJiYoKGU9dC5yZXEpPT09bnVsbHx8ZT09PXZvaWQgMD92b2lkIDA6ZS51cGdyYWRlT3JDb25uZWN0KT09PXZvaWQgMH1mdW5jdGlvbiBoYih0KXtpZighZXQodCkpcmV0dXJuIG51bGw7bGV0IGU9dC5fd3JpdGFibGVTdGF0ZSxyPXQuX3JlYWRhYmxlU3RhdGUsaT1lfHxyO3JldHVybiAhaSYmQmYodCl8fCEhKGkmJmkuYXV0b0Rlc3Ryb3kmJmkuZW1pdENsb3NlJiZpLmNsb3NlZD09PSExKX1mdW5jdGlvbiBkYih0KXt2YXIgZTtyZXR1cm4gISEodCYmKChlPXRbbWZdKSE9PW51bGwmJmUhPT12b2lkIDA/ZTp0LnJlYWRhYmxlRGlkUmVhZHx8dC5yZWFkYWJsZUFib3J0ZWQpKX1mdW5jdGlvbiBwYih0KXt2YXIgZSxyLGksbixvLHMsYSx1LGMsaDtyZXR1cm4gISEodCYmKChlPShyPShpPShuPShvPShzPXRbX2ZdKSE9PW51bGwmJnMhPT12b2lkIDA/czp0LnJlYWRhYmxlRXJyb3JlZCkhPT1udWxsJiZvIT09dm9pZCAwP286dC53cml0YWJsZUVycm9yZWQpIT09bnVsbCYmbiE9PXZvaWQgMD9uOihhPXQuX3JlYWRhYmxlU3RhdGUpPT09bnVsbHx8YT09PXZvaWQgMD92b2lkIDA6YS5lcnJvckVtaXR0ZWQpIT09bnVsbCYmaSE9PXZvaWQgMD9pOih1PXQuX3dyaXRhYmxlU3RhdGUpPT09bnVsbHx8dT09PXZvaWQgMD92b2lkIDA6dS5lcnJvckVtaXR0ZWQpIT09bnVsbCYmciE9PXZvaWQgMD9yOihjPXQuX3JlYWRhYmxlU3RhdGUpPT09bnVsbHx8Yz09PXZvaWQgMD92b2lkIDA6Yy5lcnJvcmVkKSE9PW51bGwmJmUhPT12b2lkIDA/ZTohKChoPXQuX3dyaXRhYmxlU3RhdGUpPT09bnVsbHx8aD09PXZvaWQgMCkmJmguZXJyb3JlZCkpfVBmLmV4cG9ydHM9e2tEZXN0cm95ZWQ6d2YsaXNEaXN0dXJiZWQ6ZGIsa0lzRGlzdHVyYmVkOm1mLGlzRXJyb3JlZDpwYixrSXNFcnJvcmVkOl9mLGlzUmVhZGFibGU6VGYsa0lzUmVhZGFibGU6QnMsa0lzQ2xvc2VkUHJvbWlzZTplYixrQ29udHJvbGxlckVycm9yRnVuY3Rpb246dGIsaXNDbG9zZWQ6ZmIsaXNEZXN0cm95ZWQ6SmksaXNEdXBsZXhOb2RlU3RyZWFtOnJiLGlzRmluaXNoZWQ6YWIsaXNJdGVyYWJsZTpuYixpc1JlYWRhYmxlTm9kZVN0cmVhbTpRaSxpc1JlYWRhYmxlU3RyZWFtOnZmLGlzUmVhZGFibGVFbmRlZDpvYixpc1JlYWRhYmxlRmluaXNoZWQ6SWYsaXNSZWFkYWJsZUVycm9yZWQ6dWIsaXNOb2RlU3RyZWFtOmV0LGlzV2ViU3RyZWFtOmliLGlzV3JpdGFibGU6UmYsaXNXcml0YWJsZU5vZGVTdHJlYW06WWksaXNXcml0YWJsZVN0cmVhbTpFZixpc1dyaXRhYmxlRW5kZWQ6QWYsaXNXcml0YWJsZUZpbmlzaGVkOnNiLGlzV3JpdGFibGVFcnJvcmVkOmxiLGlzU2VydmVyUmVxdWVzdDpjYixpc1NlcnZlclJlc3BvbnNlOkJmLHdpbGxFbWl0Q2xvc2U6aGIsaXNUcmFuc2Zvcm1TdHJlYW06U2Z9O30pO3ZhciBtdD1NKCh6SSxNcyk9Pnt2KCk7bSgpO18oKTt2YXIgTnQ9VXQoKSx7QWJvcnRFcnJvcjpEZixjb2RlczpnYn09U2UoKSx7RVJSX0lOVkFMSURfQVJHX1RZUEU6eWIsRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0U6T2Z9PWdiLHtrRW1wdHlPYmplY3Q6T3Msb25jZTprc309SmUoKSx7dmFsaWRhdGVBYm9ydFNpZ25hbDpiYix2YWxpZGF0ZUZ1bmN0aW9uOndiLHZhbGlkYXRlT2JqZWN0Ol9iLHZhbGlkYXRlQm9vbGVhbjptYn09ZmkoKSx7UHJvbWlzZTp2YixQcm9taXNlUHJvdG90eXBlVGhlbjpFYn09Y2UoKSx7aXNDbG9zZWQ6U2IsaXNSZWFkYWJsZTprZixpc1JlYWRhYmxlTm9kZVN0cmVhbTpQcyxpc1JlYWRhYmxlU3RyZWFtOkFiLGlzUmVhZGFibGVGaW5pc2hlZDp4Zixpc1JlYWRhYmxlRXJyb3JlZDpNZixpc1dyaXRhYmxlOkxmLGlzV3JpdGFibGVOb2RlU3RyZWFtOlVmLGlzV3JpdGFibGVTdHJlYW06SWIsaXNXcml0YWJsZUZpbmlzaGVkOk5mLGlzV3JpdGFibGVFcnJvcmVkOnFmLGlzTm9kZVN0cmVhbTpUYix3aWxsRW1pdENsb3NlOlJiLGtJc0Nsb3NlZFByb21pc2U6Q2J9PXR0KCk7ZnVuY3Rpb24gQmIodCl7cmV0dXJuIHQuc2V0SGVhZGVyJiZ0eXBlb2YgdC5hYm9ydD09XCJmdW5jdGlvblwifXZhciB4cz0oKT0+e307ZnVuY3Rpb24gamYodCxlLHIpe3ZhciBpLG47aWYoYXJndW1lbnRzLmxlbmd0aD09PTI/KHI9ZSxlPU9zKTplPT1udWxsP2U9T3M6X2IoZSxcIm9wdGlvbnNcIiksd2IocixcImNhbGxiYWNrXCIpLGJiKGUuc2lnbmFsLFwib3B0aW9ucy5zaWduYWxcIikscj1rcyhyKSxBYih0KXx8SWIodCkpcmV0dXJuIFBiKHQsZSxyKTtpZighVGIodCkpdGhyb3cgbmV3IHliKFwic3RyZWFtXCIsW1wiUmVhZGFibGVTdHJlYW1cIixcIldyaXRhYmxlU3RyZWFtXCIsXCJTdHJlYW1cIl0sdCk7bGV0IG89KGk9ZS5yZWFkYWJsZSkhPT1udWxsJiZpIT09dm9pZCAwP2k6UHModCkscz0obj1lLndyaXRhYmxlKSE9PW51bGwmJm4hPT12b2lkIDA/bjpVZih0KSxhPXQuX3dyaXRhYmxlU3RhdGUsdT10Ll9yZWFkYWJsZVN0YXRlLGM9KCk9Pnt0LndyaXRhYmxlfHxnKCk7fSxoPVJiKHQpJiZQcyh0KT09PW8mJlVmKHQpPT09cyxkPU5mKHQsITEpLGc9KCk9PntkPSEwLHQuZGVzdHJveWVkJiYoaD0hMSksIShoJiYoIXQucmVhZGFibGV8fG8pKSYmKCFvfHx5KSYmci5jYWxsKHQpO30seT14Zih0LCExKSx3PSgpPT57eT0hMCx0LmRlc3Ryb3llZCYmKGg9ITEpLCEoaCYmKCF0LndyaXRhYmxlfHxzKSkmJighc3x8ZCkmJnIuY2FsbCh0KTt9LEU9Tj0+e3IuY2FsbCh0LE4pO30sUz1TYih0KSxJPSgpPT57Uz0hMDtsZXQgTj1xZih0KXx8TWYodCk7aWYoTiYmdHlwZW9mIE4hPVwiYm9vbGVhblwiKXJldHVybiByLmNhbGwodCxOKTtpZihvJiYheSYmUHModCwhMCkmJiF4Zih0LCExKSlyZXR1cm4gci5jYWxsKHQsbmV3IE9mKTtpZihzJiYhZCYmIU5mKHQsITEpKXJldHVybiByLmNhbGwodCxuZXcgT2YpO3IuY2FsbCh0KTt9LEM9KCk9PntTPSEwO2xldCBOPXFmKHQpfHxNZih0KTtpZihOJiZ0eXBlb2YgTiE9XCJib29sZWFuXCIpcmV0dXJuIHIuY2FsbCh0LE4pO3IuY2FsbCh0KTt9LFI9KCk9Pnt0LnJlcS5vbihcImZpbmlzaFwiLGcpO307QmIodCk/KHQub24oXCJjb21wbGV0ZVwiLGcpLGh8fHQub24oXCJhYm9ydFwiLEkpLHQucmVxP1IoKTp0Lm9uKFwicmVxdWVzdFwiLFIpKTpzJiYhYSYmKHQub24oXCJlbmRcIixjKSx0Lm9uKFwiY2xvc2VcIixjKSksIWgmJnR5cGVvZiB0LmFib3J0ZWQ9PVwiYm9vbGVhblwiJiZ0Lm9uKFwiYWJvcnRlZFwiLEkpLHQub24oXCJlbmRcIix3KSx0Lm9uKFwiZmluaXNoXCIsZyksZS5lcnJvciE9PSExJiZ0Lm9uKFwiZXJyb3JcIixFKSx0Lm9uKFwiY2xvc2VcIixJKSxTP050Lm5leHRUaWNrKEkpOmEhPW51bGwmJmEuZXJyb3JFbWl0dGVkfHx1IT1udWxsJiZ1LmVycm9yRW1pdHRlZD9ofHxOdC5uZXh0VGljayhDKTooIW8mJighaHx8a2YodCkpJiYoZHx8TGYodCk9PT0hMSl8fCFzJiYoIWh8fExmKHQpKSYmKHl8fGtmKHQpPT09ITEpfHx1JiZ0LnJlcSYmdC5hYm9ydGVkKSYmTnQubmV4dFRpY2soQyk7bGV0IFU9KCk9PntyPXhzLHQucmVtb3ZlTGlzdGVuZXIoXCJhYm9ydGVkXCIsSSksdC5yZW1vdmVMaXN0ZW5lcihcImNvbXBsZXRlXCIsZyksdC5yZW1vdmVMaXN0ZW5lcihcImFib3J0XCIsSSksdC5yZW1vdmVMaXN0ZW5lcihcInJlcXVlc3RcIixSKSx0LnJlcSYmdC5yZXEucmVtb3ZlTGlzdGVuZXIoXCJmaW5pc2hcIixnKSx0LnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIsYyksdC5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsYyksdC5yZW1vdmVMaXN0ZW5lcihcImZpbmlzaFwiLGcpLHQucmVtb3ZlTGlzdGVuZXIoXCJlbmRcIix3KSx0LnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIixFKSx0LnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIixJKTt9O2lmKGUuc2lnbmFsJiYhUyl7bGV0IE49KCk9PntsZXQgVz1yO1UoKSxXLmNhbGwodCxuZXcgRGYodm9pZCAwLHtjYXVzZTplLnNpZ25hbC5yZWFzb259KSk7fTtpZihlLnNpZ25hbC5hYm9ydGVkKU50Lm5leHRUaWNrKE4pO2Vsc2Uge2xldCBXPXI7cj1rcygoLi4uSyk9PntlLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIixOKSxXLmFwcGx5KHQsSyk7fSksZS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsTik7fX1yZXR1cm4gVX1mdW5jdGlvbiBQYih0LGUscil7bGV0IGk9ITEsbj14cztpZihlLnNpZ25hbClpZihuPSgpPT57aT0hMCxyLmNhbGwodCxuZXcgRGYodm9pZCAwLHtjYXVzZTplLnNpZ25hbC5yZWFzb259KSk7fSxlLnNpZ25hbC5hYm9ydGVkKU50Lm5leHRUaWNrKG4pO2Vsc2Uge2xldCBzPXI7cj1rcygoLi4uYSk9PntlLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIixuKSxzLmFwcGx5KHQsYSk7fSksZS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsbik7fWxldCBvPSguLi5zKT0+e2l8fE50Lm5leHRUaWNrKCgpPT5yLmFwcGx5KHQscykpO307cmV0dXJuIEViKHRbQ2JdLnByb21pc2UsbyxvKSx4c31mdW5jdGlvbiBPYih0LGUpe3ZhciByO2xldCBpPSExO3JldHVybiBlPT09bnVsbCYmKGU9T3MpLChyPWUpIT09bnVsbCYmciE9PXZvaWQgMCYmci5jbGVhbnVwJiYobWIoZS5jbGVhbnVwLFwiY2xlYW51cFwiKSxpPWUuY2xlYW51cCksbmV3IHZiKChuLG8pPT57bGV0IHM9amYodCxlLGE9PntpJiZzKCksYT9vKGEpOm4oKTt9KTt9KX1Ncy5leHBvcnRzPWpmO01zLmV4cG9ydHMuZmluaXNoZWQ9T2I7fSk7dmFyIHRyPU0oKHJULEdmKT0+e3YoKTttKCk7XygpO3ZhciBydD1VdCgpLHthZ2dyZWdhdGVUd29FcnJvcnM6a2IsY29kZXM6e0VSUl9NVUxUSVBMRV9DQUxMQkFDSzp4Yn0sQWJvcnRFcnJvcjpNYn09U2UoKSx7U3ltYm9sOiRmfT1jZSgpLHtrRGVzdHJveWVkOkxiLGlzRGVzdHJveWVkOlViLGlzRmluaXNoZWQ6TmIsaXNTZXJ2ZXJSZXF1ZXN0OnFifT10dCgpLEhmPSRmKFwia0Rlc3Ryb3lcIiksTHM9JGYoXCJrQ29uc3RydWN0XCIpO2Z1bmN0aW9uIFZmKHQsZSxyKXt0JiYodC5zdGFjayxlJiYhZS5lcnJvcmVkJiYoZS5lcnJvcmVkPXQpLHImJiFyLmVycm9yZWQmJihyLmVycm9yZWQ9dCkpO31mdW5jdGlvbiBEYih0LGUpe2xldCByPXRoaXMuX3JlYWRhYmxlU3RhdGUsaT10aGlzLl93cml0YWJsZVN0YXRlLG49aXx8cjtyZXR1cm4gaSE9bnVsbCYmaS5kZXN0cm95ZWR8fHIhPW51bGwmJnIuZGVzdHJveWVkPyh0eXBlb2YgZT09XCJmdW5jdGlvblwiJiZlKCksdGhpcyk6KFZmKHQsaSxyKSxpJiYoaS5kZXN0cm95ZWQ9ITApLHImJihyLmRlc3Ryb3llZD0hMCksbi5jb25zdHJ1Y3RlZD9GZih0aGlzLHQsZSk6dGhpcy5vbmNlKEhmLGZ1bmN0aW9uKG8pe0ZmKHRoaXMsa2Iobyx0KSxlKTt9KSx0aGlzKX1mdW5jdGlvbiBGZih0LGUscil7bGV0IGk9ITE7ZnVuY3Rpb24gbihvKXtpZihpKXJldHVybjtpPSEwO2xldCBzPXQuX3JlYWRhYmxlU3RhdGUsYT10Ll93cml0YWJsZVN0YXRlO1ZmKG8sYSxzKSxhJiYoYS5jbG9zZWQ9ITApLHMmJihzLmNsb3NlZD0hMCksdHlwZW9mIHI9PVwiZnVuY3Rpb25cIiYmcihvKSxvP3J0Lm5leHRUaWNrKGpiLHQsbyk6cnQubmV4dFRpY2soemYsdCk7fXRyeXt0Ll9kZXN0cm95KGV8fG51bGwsbik7fWNhdGNoKG8pe24obyk7fX1mdW5jdGlvbiBqYih0LGUpe1VzKHQsZSksemYodCk7fWZ1bmN0aW9uIHpmKHQpe2xldCBlPXQuX3JlYWRhYmxlU3RhdGUscj10Ll93cml0YWJsZVN0YXRlO3ImJihyLmNsb3NlRW1pdHRlZD0hMCksZSYmKGUuY2xvc2VFbWl0dGVkPSEwKSwociE9bnVsbCYmci5lbWl0Q2xvc2V8fGUhPW51bGwmJmUuZW1pdENsb3NlKSYmdC5lbWl0KFwiY2xvc2VcIik7fWZ1bmN0aW9uIFVzKHQsZSl7bGV0IHI9dC5fcmVhZGFibGVTdGF0ZSxpPXQuX3dyaXRhYmxlU3RhdGU7aSE9bnVsbCYmaS5lcnJvckVtaXR0ZWR8fHIhPW51bGwmJnIuZXJyb3JFbWl0dGVkfHwoaSYmKGkuZXJyb3JFbWl0dGVkPSEwKSxyJiYoci5lcnJvckVtaXR0ZWQ9ITApLHQuZW1pdChcImVycm9yXCIsZSkpO31mdW5jdGlvbiBGYigpe2xldCB0PXRoaXMuX3JlYWRhYmxlU3RhdGUsZT10aGlzLl93cml0YWJsZVN0YXRlO3QmJih0LmNvbnN0cnVjdGVkPSEwLHQuY2xvc2VkPSExLHQuY2xvc2VFbWl0dGVkPSExLHQuZGVzdHJveWVkPSExLHQuZXJyb3JlZD1udWxsLHQuZXJyb3JFbWl0dGVkPSExLHQucmVhZGluZz0hMSx0LmVuZGVkPXQucmVhZGFibGU9PT0hMSx0LmVuZEVtaXR0ZWQ9dC5yZWFkYWJsZT09PSExKSxlJiYoZS5jb25zdHJ1Y3RlZD0hMCxlLmRlc3Ryb3llZD0hMSxlLmNsb3NlZD0hMSxlLmNsb3NlRW1pdHRlZD0hMSxlLmVycm9yZWQ9bnVsbCxlLmVycm9yRW1pdHRlZD0hMSxlLmZpbmFsQ2FsbGVkPSExLGUucHJlZmluaXNoZWQ9ITEsZS5lbmRlZD1lLndyaXRhYmxlPT09ITEsZS5lbmRpbmc9ZS53cml0YWJsZT09PSExLGUuZmluaXNoZWQ9ZS53cml0YWJsZT09PSExKTt9ZnVuY3Rpb24gTnModCxlLHIpe2xldCBpPXQuX3JlYWRhYmxlU3RhdGUsbj10Ll93cml0YWJsZVN0YXRlO2lmKG4hPW51bGwmJm4uZGVzdHJveWVkfHxpIT1udWxsJiZpLmRlc3Ryb3llZClyZXR1cm4gdGhpcztpIT1udWxsJiZpLmF1dG9EZXN0cm95fHxuIT1udWxsJiZuLmF1dG9EZXN0cm95P3QuZGVzdHJveShlKTplJiYoZS5zdGFjayxuJiYhbi5lcnJvcmVkJiYobi5lcnJvcmVkPWUpLGkmJiFpLmVycm9yZWQmJihpLmVycm9yZWQ9ZSkscj9ydC5uZXh0VGljayhVcyx0LGUpOlVzKHQsZSkpO31mdW5jdGlvbiBXYih0LGUpe2lmKHR5cGVvZiB0Ll9jb25zdHJ1Y3QhPVwiZnVuY3Rpb25cIilyZXR1cm47bGV0IHI9dC5fcmVhZGFibGVTdGF0ZSxpPXQuX3dyaXRhYmxlU3RhdGU7ciYmKHIuY29uc3RydWN0ZWQ9ITEpLGkmJihpLmNvbnN0cnVjdGVkPSExKSx0Lm9uY2UoTHMsZSksISh0Lmxpc3RlbmVyQ291bnQoTHMpPjEpJiZydC5uZXh0VGljaygkYix0KTt9ZnVuY3Rpb24gJGIodCl7bGV0IGU9ITE7ZnVuY3Rpb24gcihpKXtpZihlKXtOcyh0LGk/P25ldyB4Yik7cmV0dXJufWU9ITA7bGV0IG49dC5fcmVhZGFibGVTdGF0ZSxvPXQuX3dyaXRhYmxlU3RhdGUscz1vfHxuO24mJihuLmNvbnN0cnVjdGVkPSEwKSxvJiYoby5jb25zdHJ1Y3RlZD0hMCkscy5kZXN0cm95ZWQ/dC5lbWl0KEhmLGkpOmk/TnModCxpLCEwKTpydC5uZXh0VGljayhIYix0KTt9dHJ5e3QuX2NvbnN0cnVjdChpPT57cnQubmV4dFRpY2socixpKTt9KTt9Y2F0Y2goaSl7cnQubmV4dFRpY2socixpKTt9fWZ1bmN0aW9uIEhiKHQpe3QuZW1pdChMcyk7fWZ1bmN0aW9uIFdmKHQpe3JldHVybiB0Py5zZXRIZWFkZXImJnR5cGVvZiB0LmFib3J0PT1cImZ1bmN0aW9uXCJ9ZnVuY3Rpb24gS2YodCl7dC5lbWl0KFwiY2xvc2VcIik7fWZ1bmN0aW9uIFZiKHQsZSl7dC5lbWl0KFwiZXJyb3JcIixlKSxydC5uZXh0VGljayhLZix0KTt9ZnVuY3Rpb24gemIodCxlKXshdHx8VWIodCl8fCghZSYmIU5iKHQpJiYoZT1uZXcgTWIpLHFiKHQpPyh0LnNvY2tldD1udWxsLHQuZGVzdHJveShlKSk6V2YodCk/dC5hYm9ydCgpOldmKHQucmVxKT90LnJlcS5hYm9ydCgpOnR5cGVvZiB0LmRlc3Ryb3k9PVwiZnVuY3Rpb25cIj90LmRlc3Ryb3koZSk6dHlwZW9mIHQuY2xvc2U9PVwiZnVuY3Rpb25cIj90LmNsb3NlKCk6ZT9ydC5uZXh0VGljayhWYix0LGUpOnJ0Lm5leHRUaWNrKEtmLHQpLHQuZGVzdHJveWVkfHwodFtMYl09ITApKTt9R2YuZXhwb3J0cz17Y29uc3RydWN0OldiLGRlc3Ryb3llcjp6YixkZXN0cm95OkRiLHVuZGVzdHJveTpGYixlcnJvck9yRGVzdHJveTpOc307fSk7ZnVuY3Rpb24gWSgpe1kuaW5pdC5jYWxsKHRoaXMpO31mdW5jdGlvbiBYaSh0KXtpZih0eXBlb2YgdCE9XCJmdW5jdGlvblwiKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImxpc3RlbmVyXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIHQpfWZ1bmN0aW9uIG5jKHQpe3JldHVybiB0Ll9tYXhMaXN0ZW5lcnM9PT12b2lkIDA/WS5kZWZhdWx0TWF4TGlzdGVuZXJzOnQuX21heExpc3RlbmVyc31mdW5jdGlvbiBYZih0LGUscixpKXt2YXIgbixvLHMsYTtpZihYaShyKSwobz10Ll9ldmVudHMpPT09dm9pZCAwPyhvPXQuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHQuX2V2ZW50c0NvdW50PTApOihvLm5ld0xpc3RlbmVyIT09dm9pZCAwJiYodC5lbWl0KFwibmV3TGlzdGVuZXJcIixlLHIubGlzdGVuZXI/ci5saXN0ZW5lcjpyKSxvPXQuX2V2ZW50cykscz1vW2VdKSxzPT09dm9pZCAwKXM9b1tlXT1yLCsrdC5fZXZlbnRzQ291bnQ7ZWxzZSBpZih0eXBlb2Ygcz09XCJmdW5jdGlvblwiP3M9b1tlXT1pP1tyLHNdOltzLHJdOmk/cy51bnNoaWZ0KHIpOnMucHVzaChyKSwobj1uYyh0KSk+MCYmcy5sZW5ndGg+biYmIXMud2FybmVkKXtzLndhcm5lZD0hMDt2YXIgdT1uZXcgRXJyb3IoXCJQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuIFwiK3MubGVuZ3RoK1wiIFwiK1N0cmluZyhlKStcIiBsaXN0ZW5lcnMgYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0XCIpO3UubmFtZT1cIk1heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZ1wiLHUuZW1pdHRlcj10LHUudHlwZT1lLHUuY291bnQ9cy5sZW5ndGgsYT11LGNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKGEpO31yZXR1cm4gdH1mdW5jdGlvbiBLYigpe2lmKCF0aGlzLmZpcmVkKXJldHVybiB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsdGhpcy53cmFwRm4pLHRoaXMuZmlyZWQ9ITAsYXJndW1lbnRzLmxlbmd0aD09PTA/dGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTp0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gWmYodCxlLHIpe3ZhciBpPXtmaXJlZDohMSx3cmFwRm46dm9pZCAwLHRhcmdldDp0LHR5cGU6ZSxsaXN0ZW5lcjpyfSxuPUtiLmJpbmQoaSk7cmV0dXJuIG4ubGlzdGVuZXI9cixpLndyYXBGbj1uLG59ZnVuY3Rpb24gZWModCxlLHIpe3ZhciBpPXQuX2V2ZW50cztpZihpPT09dm9pZCAwKXJldHVybiBbXTt2YXIgbj1pW2VdO3JldHVybiBuPT09dm9pZCAwP1tdOnR5cGVvZiBuPT1cImZ1bmN0aW9uXCI/cj9bbi5saXN0ZW5lcnx8bl06W25dOnI/ZnVuY3Rpb24obyl7Zm9yKHZhciBzPW5ldyBBcnJheShvLmxlbmd0aCksYT0wO2E8cy5sZW5ndGg7KythKXNbYV09b1thXS5saXN0ZW5lcnx8b1thXTtyZXR1cm4gc30obik6c2MobixuLmxlbmd0aCl9ZnVuY3Rpb24gdGModCl7dmFyIGU9dGhpcy5fZXZlbnRzO2lmKGUhPT12b2lkIDApe3ZhciByPWVbdF07aWYodHlwZW9mIHI9PVwiZnVuY3Rpb25cIilyZXR1cm4gMTtpZihyIT09dm9pZCAwKXJldHVybiByLmxlbmd0aH1yZXR1cm4gMH1mdW5jdGlvbiBzYyh0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkoZSksaT0wO2k8ZTsrK2kpcltpXT10W2ldO3JldHVybiByfXZhciByYyxpYyxVcixRZixZZixKZixCZSxxcz13ZSgoKT0+e3YoKTttKCk7XygpO1VyPXR5cGVvZiBSZWZsZWN0PT1cIm9iamVjdFwiP1JlZmxlY3Q6bnVsbCxRZj1VciYmdHlwZW9mIFVyLmFwcGx5PT1cImZ1bmN0aW9uXCI/VXIuYXBwbHk6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbCh0LGUscil9O2ljPVVyJiZ0eXBlb2YgVXIub3duS2V5cz09XCJmdW5jdGlvblwiP1VyLm93bktleXM6T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz9mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModCkuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkpfTpmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModCl9O1lmPU51bWJlci5pc05hTnx8ZnVuY3Rpb24odCl7cmV0dXJuIHQhPXR9O3JjPVksWS5FdmVudEVtaXR0ZXI9WSxZLnByb3RvdHlwZS5fZXZlbnRzPXZvaWQgMCxZLnByb3RvdHlwZS5fZXZlbnRzQ291bnQ9MCxZLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzPXZvaWQgMDtKZj0xMDtPYmplY3QuZGVmaW5lUHJvcGVydHkoWSxcImRlZmF1bHRNYXhMaXN0ZW5lcnNcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSmZ9LHNldDpmdW5jdGlvbih0KXtpZih0eXBlb2YgdCE9XCJudW1iZXJcInx8dDwwfHxZZih0KSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiZGVmYXVsdE1heExpc3RlbmVyc1wiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcrdCtcIi5cIik7SmY9dDt9fSksWS5pbml0PWZ1bmN0aW9uKCl7dGhpcy5fZXZlbnRzIT09dm9pZCAwJiZ0aGlzLl9ldmVudHMhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykuX2V2ZW50c3x8KHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApLHRoaXMuX21heExpc3RlbmVycz10aGlzLl9tYXhMaXN0ZW5lcnN8fHZvaWQgMDt9LFkucHJvdG90eXBlLnNldE1heExpc3RlbmVycz1mdW5jdGlvbih0KXtpZih0eXBlb2YgdCE9XCJudW1iZXJcInx8dDwwfHxZZih0KSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiblwiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcrdCtcIi5cIik7cmV0dXJuIHRoaXMuX21heExpc3RlbmVycz10LHRoaXN9LFkucHJvdG90eXBlLmdldE1heExpc3RlbmVycz1mdW5jdGlvbigpe3JldHVybiBuYyh0aGlzKX0sWS5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspZS5wdXNoKGFyZ3VtZW50c1tyXSk7dmFyIGk9dD09PVwiZXJyb3JcIixuPXRoaXMuX2V2ZW50cztpZihuIT09dm9pZCAwKWk9aSYmbi5lcnJvcj09PXZvaWQgMDtlbHNlIGlmKCFpKXJldHVybiAhMTtpZihpKXt2YXIgbztpZihlLmxlbmd0aD4wJiYobz1lWzBdKSxvIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgbzt2YXIgcz1uZXcgRXJyb3IoXCJVbmhhbmRsZWQgZXJyb3IuXCIrKG8/XCIgKFwiK28ubWVzc2FnZStcIilcIjpcIlwiKSk7dGhyb3cgcy5jb250ZXh0PW8sc312YXIgYT1uW3RdO2lmKGE9PT12b2lkIDApcmV0dXJuICExO2lmKHR5cGVvZiBhPT1cImZ1bmN0aW9uXCIpUWYoYSx0aGlzLGUpO2Vsc2Uge3ZhciB1PWEubGVuZ3RoLGM9c2MoYSx1KTtmb3Iocj0wO3I8dTsrK3IpUWYoY1tyXSx0aGlzLGUpO31yZXR1cm4gITB9LFkucHJvdG90eXBlLmFkZExpc3RlbmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFhmKHRoaXMsdCxlLCExKX0sWS5wcm90b3R5cGUub249WS5wcm90b3R5cGUuYWRkTGlzdGVuZXIsWS5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFhmKHRoaXMsdCxlLCEwKX0sWS5wcm90b3R5cGUub25jZT1mdW5jdGlvbih0LGUpe3JldHVybiBYaShlKSx0aGlzLm9uKHQsWmYodGhpcyx0LGUpKSx0aGlzfSxZLnByb3RvdHlwZS5wcmVwZW5kT25jZUxpc3RlbmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFhpKGUpLHRoaXMucHJlcGVuZExpc3RlbmVyKHQsWmYodGhpcyx0LGUpKSx0aGlzfSxZLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe3ZhciByLGksbixvLHM7aWYoWGkoZSksKGk9dGhpcy5fZXZlbnRzKT09PXZvaWQgMClyZXR1cm4gdGhpcztpZigocj1pW3RdKT09PXZvaWQgMClyZXR1cm4gdGhpcztpZihyPT09ZXx8ci5saXN0ZW5lcj09PWUpLS10aGlzLl9ldmVudHNDb3VudD09MD90aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKTooZGVsZXRlIGlbdF0saS5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KFwicmVtb3ZlTGlzdGVuZXJcIix0LHIubGlzdGVuZXJ8fGUpKTtlbHNlIGlmKHR5cGVvZiByIT1cImZ1bmN0aW9uXCIpe2ZvcihuPS0xLG89ci5sZW5ndGgtMTtvPj0wO28tLSlpZihyW29dPT09ZXx8cltvXS5saXN0ZW5lcj09PWUpe3M9cltvXS5saXN0ZW5lcixuPW87YnJlYWt9aWYobjwwKXJldHVybiB0aGlzO249PT0wP3Iuc2hpZnQoKTpmdW5jdGlvbihhLHUpe2Zvcig7dSsxPGEubGVuZ3RoO3UrKylhW3VdPWFbdSsxXTthLnBvcCgpO30ocixuKSxyLmxlbmd0aD09PTEmJihpW3RdPXJbMF0pLGkucmVtb3ZlTGlzdGVuZXIhPT12b2lkIDAmJnRoaXMuZW1pdChcInJlbW92ZUxpc3RlbmVyXCIsdCxzfHxlKTt9cmV0dXJuIHRoaXN9LFkucHJvdG90eXBlLm9mZj1ZLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcixZLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24odCl7dmFyIGUscixpO2lmKChyPXRoaXMuX2V2ZW50cyk9PT12b2lkIDApcmV0dXJuIHRoaXM7aWYoci5yZW1vdmVMaXN0ZW5lcj09PXZvaWQgMClyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTA/KHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApOnJbdF0hPT12b2lkIDAmJigtLXRoaXMuX2V2ZW50c0NvdW50PT0wP3RoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpOmRlbGV0ZSByW3RdKSx0aGlzO2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0wKXt2YXIgbixvPU9iamVjdC5rZXlzKHIpO2ZvcihpPTA7aTxvLmxlbmd0aDsrK2kpKG49b1tpXSkhPT1cInJlbW92ZUxpc3RlbmVyXCImJnRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKG4pO3JldHVybiB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhcInJlbW92ZUxpc3RlbmVyXCIpLHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTAsdGhpc31pZih0eXBlb2YoZT1yW3RdKT09XCJmdW5jdGlvblwiKXRoaXMucmVtb3ZlTGlzdGVuZXIodCxlKTtlbHNlIGlmKGUhPT12b2lkIDApZm9yKGk9ZS5sZW5ndGgtMTtpPj0wO2ktLSl0aGlzLnJlbW92ZUxpc3RlbmVyKHQsZVtpXSk7cmV0dXJuIHRoaXN9LFkucHJvdG90eXBlLmxpc3RlbmVycz1mdW5jdGlvbih0KXtyZXR1cm4gZWModGhpcyx0LCEwKX0sWS5wcm90b3R5cGUucmF3TGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3JldHVybiBlYyh0aGlzLHQsITEpfSxZLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdHlwZW9mIHQubGlzdGVuZXJDb3VudD09XCJmdW5jdGlvblwiP3QubGlzdGVuZXJDb3VudChlKTp0Yy5jYWxsKHQsZSl9LFkucHJvdG90eXBlLmxpc3RlbmVyQ291bnQ9dGMsWS5wcm90b3R5cGUuZXZlbnROYW1lcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ldmVudHNDb3VudD4wP2ljKHRoaXMuX2V2ZW50cyk6W119O0JlPXJjO0JlLkV2ZW50RW1pdHRlcjtCZS5kZWZhdWx0TWF4TGlzdGVuZXJzO0JlLmluaXQ7QmUubGlzdGVuZXJDb3VudDtCZS5FdmVudEVtaXR0ZXI7QmUuZGVmYXVsdE1heExpc3RlbmVycztCZS5pbml0O0JlLmxpc3RlbmVyQ291bnQ7fSk7dmFyIHJyPXt9O1F0KHJyLHtFdmVudEVtaXR0ZXI6KCk9PkdiLGRlZmF1bHQ6KCk9PkJlLGRlZmF1bHRNYXhMaXN0ZW5lcnM6KCk9PlFiLGluaXQ6KCk9PlliLGxpc3RlbmVyQ291bnQ6KCk9PkpiLG9uOigpPT5YYixvbmNlOigpPT5aYn0pO3ZhciBHYixRYixZYixKYixYYixaYixpcj13ZSgoKT0+e3YoKTttKCk7XygpO3FzKCk7cXMoKTtCZS5vbmNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBQcm9taXNlKChyLGkpPT57ZnVuY3Rpb24gbiguLi5zKXtvIT09dm9pZCAwJiZ0LnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIixvKSxyKHMpO31sZXQgbztlIT09XCJlcnJvclwiJiYobz1zPT57dC5yZW1vdmVMaXN0ZW5lcihuYW1lLG4pLGkocyk7fSx0Lm9uY2UoXCJlcnJvclwiLG8pKSx0Lm9uY2UoZSxuKTt9KX07QmUub249ZnVuY3Rpb24odCxlKXtsZXQgcj1bXSxpPVtdLG49bnVsbCxvPSExLHM9e2FzeW5jIG5leHQoKXtsZXQgYz1yLnNoaWZ0KCk7aWYoYylyZXR1cm4gY3JlYXRlSXRlclJlc3VsdChjLCExKTtpZihuKXtsZXQgaD1Qcm9taXNlLnJlamVjdChuKTtyZXR1cm4gbj1udWxsLGh9cmV0dXJuIG8/Y3JlYXRlSXRlclJlc3VsdCh2b2lkIDAsITApOm5ldyBQcm9taXNlKChoLGQpPT5pLnB1c2goe3Jlc29sdmU6aCxyZWplY3Q6ZH0pKX0sYXN5bmMgcmV0dXJuKCl7dC5yZW1vdmVMaXN0ZW5lcihlLGEpLHQucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLHUpLG89ITA7Zm9yKGxldCBjIG9mIGkpYy5yZXNvbHZlKGNyZWF0ZUl0ZXJSZXN1bHQodm9pZCAwLCEwKSk7cmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHQodm9pZCAwLCEwKX0sdGhyb3coYyl7bj1jLHQucmVtb3ZlTGlzdGVuZXIoZSxhKSx0LnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIix1KTt9LFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKXtyZXR1cm4gdGhpc319O3JldHVybiB0Lm9uKGUsYSksdC5vbihcImVycm9yXCIsdSkscztmdW5jdGlvbiBhKC4uLmMpe2xldCBoPWkuc2hpZnQoKTtoP2gucmVzb2x2ZShjcmVhdGVJdGVyUmVzdWx0KGMsITEpKTpyLnB1c2goYyk7fWZ1bmN0aW9uIHUoYyl7bz0hMDtsZXQgaD1pLnNoaWZ0KCk7aD9oLnJlamVjdChjKTpuPWMscy5yZXR1cm4oKTt9fTsoe0V2ZW50RW1pdHRlcjpHYixkZWZhdWx0TWF4TGlzdGVuZXJzOlFiLGluaXQ6WWIsbGlzdGVuZXJDb3VudDpKYixvbjpYYixvbmNlOlpifT1CZSk7fSk7dmFyIHRuPU0oKHhULGFjKT0+e3YoKTttKCk7XygpO3ZhcntBcnJheUlzQXJyYXk6ZXcsT2JqZWN0U2V0UHJvdG90eXBlT2Y6b2N9PWNlKCkse0V2ZW50RW1pdHRlcjpaaX09KGlyKCksWChycikpO2Z1bmN0aW9uIGVuKHQpe1ppLmNhbGwodGhpcyx0KTt9b2MoZW4ucHJvdG90eXBlLFppLnByb3RvdHlwZSk7b2MoZW4sWmkpO2VuLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKHQsZSl7bGV0IHI9dGhpcztmdW5jdGlvbiBpKGgpe3Qud3JpdGFibGUmJnQud3JpdGUoaCk9PT0hMSYmci5wYXVzZSYmci5wYXVzZSgpO31yLm9uKFwiZGF0YVwiLGkpO2Z1bmN0aW9uIG4oKXtyLnJlYWRhYmxlJiZyLnJlc3VtZSYmci5yZXN1bWUoKTt9dC5vbihcImRyYWluXCIsbiksIXQuX2lzU3RkaW8mJighZXx8ZS5lbmQhPT0hMSkmJihyLm9uKFwiZW5kXCIscyksci5vbihcImNsb3NlXCIsYSkpO2xldCBvPSExO2Z1bmN0aW9uIHMoKXtvfHwobz0hMCx0LmVuZCgpKTt9ZnVuY3Rpb24gYSgpe298fChvPSEwLHR5cGVvZiB0LmRlc3Ryb3k9PVwiZnVuY3Rpb25cIiYmdC5kZXN0cm95KCkpO31mdW5jdGlvbiB1KGgpe2MoKSxaaS5saXN0ZW5lckNvdW50KHRoaXMsXCJlcnJvclwiKT09PTAmJnRoaXMuZW1pdChcImVycm9yXCIsaCk7fURzKHIsXCJlcnJvclwiLHUpLERzKHQsXCJlcnJvclwiLHUpO2Z1bmN0aW9uIGMoKXtyLnJlbW92ZUxpc3RlbmVyKFwiZGF0YVwiLGkpLHQucmVtb3ZlTGlzdGVuZXIoXCJkcmFpblwiLG4pLHIucmVtb3ZlTGlzdGVuZXIoXCJlbmRcIixzKSxyLnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIixhKSxyLnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIix1KSx0LnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIix1KSxyLnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIsYyksci5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsYyksdC5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsYyk7fXJldHVybiByLm9uKFwiZW5kXCIsYyksci5vbihcImNsb3NlXCIsYyksdC5vbihcImNsb3NlXCIsYyksdC5lbWl0KFwicGlwZVwiLHIpLHR9O2Z1bmN0aW9uIERzKHQsZSxyKXtpZih0eXBlb2YgdC5wcmVwZW5kTGlzdGVuZXI9PVwiZnVuY3Rpb25cIilyZXR1cm4gdC5wcmVwZW5kTGlzdGVuZXIoZSxyKTshdC5fZXZlbnRzfHwhdC5fZXZlbnRzW2VdP3Qub24oZSxyKTpldyh0Ll9ldmVudHNbZV0pP3QuX2V2ZW50c1tlXS51bnNoaWZ0KHIpOnQuX2V2ZW50c1tlXT1bcix0Ll9ldmVudHNbZV1dO31hYy5leHBvcnRzPXtTdHJlYW06ZW4scHJlcGVuZExpc3RlbmVyOkRzfTt9KTt2YXIgY2k9TSgoJFQscm4pPT57digpO20oKTtfKCk7dmFye0Fib3J0RXJyb3I6bGMsY29kZXM6dHd9PVNlKCkse2lzTm9kZVN0cmVhbTp1Yyxpc1dlYlN0cmVhbTpydyxrQ29udHJvbGxlckVycm9yRnVuY3Rpb246aXd9PXR0KCksbnc9bXQoKSx7RVJSX0lOVkFMSURfQVJHX1RZUEU6ZmN9PXR3LHN3PSh0LGUpPT57aWYodHlwZW9mIHQhPVwib2JqZWN0XCJ8fCEoXCJhYm9ydGVkXCJpbiB0KSl0aHJvdyBuZXcgZmMoZSxcIkFib3J0U2lnbmFsXCIsdCl9O3JuLmV4cG9ydHMuYWRkQWJvcnRTaWduYWw9ZnVuY3Rpb24oZSxyKXtpZihzdyhlLFwic2lnbmFsXCIpLCF1YyhyKSYmIXJ3KHIpKXRocm93IG5ldyBmYyhcInN0cmVhbVwiLFtcIlJlYWRhYmxlU3RyZWFtXCIsXCJXcml0YWJsZVN0cmVhbVwiLFwiU3RyZWFtXCJdLHIpO3JldHVybiBybi5leHBvcnRzLmFkZEFib3J0U2lnbmFsTm9WYWxpZGF0ZShlLHIpfTtybi5leHBvcnRzLmFkZEFib3J0U2lnbmFsTm9WYWxpZGF0ZT1mdW5jdGlvbih0LGUpe2lmKHR5cGVvZiB0IT1cIm9iamVjdFwifHwhKFwiYWJvcnRlZFwiaW4gdCkpcmV0dXJuIGU7bGV0IHI9dWMoZSk/KCk9PntlLmRlc3Ryb3kobmV3IGxjKHZvaWQgMCx7Y2F1c2U6dC5yZWFzb259KSk7fTooKT0+e2VbaXddKG5ldyBsYyh2b2lkIDAse2NhdXNlOnQucmVhc29ufSkpO307cmV0dXJuIHQuYWJvcnRlZD9yKCk6KHQuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsciksbncoZSwoKT0+dC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIixyKSkpLGV9O30pO3ZhciBkYz1NKChlMixoYyk9Pnt2KCk7bSgpO18oKTt2YXJ7U3RyaW5nUHJvdG90eXBlU2xpY2U6Y2MsU3ltYm9sSXRlcmF0b3I6b3csVHlwZWRBcnJheVByb3RvdHlwZVNldDpubixVaW50OEFycmF5OmF3fT1jZSgpLHtCdWZmZXI6anN9PSh5ZSgpLFgoX2UpKSx7aW5zcGVjdDpsd309SmUoKTtoYy5leHBvcnRzPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5oZWFkPW51bGwsdGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MDt9cHVzaChlKXtsZXQgcj17ZGF0YTplLG5leHQ6bnVsbH07dGhpcy5sZW5ndGg+MD90aGlzLnRhaWwubmV4dD1yOnRoaXMuaGVhZD1yLHRoaXMudGFpbD1yLCsrdGhpcy5sZW5ndGg7fXVuc2hpZnQoZSl7bGV0IHI9e2RhdGE6ZSxuZXh0OnRoaXMuaGVhZH07dGhpcy5sZW5ndGg9PT0wJiYodGhpcy50YWlsPXIpLHRoaXMuaGVhZD1yLCsrdGhpcy5sZW5ndGg7fXNoaWZ0KCl7aWYodGhpcy5sZW5ndGg9PT0wKXJldHVybjtsZXQgZT10aGlzLmhlYWQuZGF0YTtyZXR1cm4gdGhpcy5sZW5ndGg9PT0xP3RoaXMuaGVhZD10aGlzLnRhaWw9bnVsbDp0aGlzLmhlYWQ9dGhpcy5oZWFkLm5leHQsLS10aGlzLmxlbmd0aCxlfWNsZWFyKCl7dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTA7fWpvaW4oZSl7aWYodGhpcy5sZW5ndGg9PT0wKXJldHVybiBcIlwiO2xldCByPXRoaXMuaGVhZCxpPVwiXCIrci5kYXRhO2Zvcig7KHI9ci5uZXh0KSE9PW51bGw7KWkrPWUrci5kYXRhO3JldHVybiBpfWNvbmNhdChlKXtpZih0aGlzLmxlbmd0aD09PTApcmV0dXJuIGpzLmFsbG9jKDApO2xldCByPWpzLmFsbG9jVW5zYWZlKGU+Pj4wKSxpPXRoaXMuaGVhZCxuPTA7Zm9yKDtpOylubihyLGkuZGF0YSxuKSxuKz1pLmRhdGEubGVuZ3RoLGk9aS5uZXh0O3JldHVybiByfWNvbnN1bWUoZSxyKXtsZXQgaT10aGlzLmhlYWQuZGF0YTtpZihlPGkubGVuZ3RoKXtsZXQgbj1pLnNsaWNlKDAsZSk7cmV0dXJuIHRoaXMuaGVhZC5kYXRhPWkuc2xpY2UoZSksbn1yZXR1cm4gZT09PWkubGVuZ3RoP3RoaXMuc2hpZnQoKTpyP3RoaXMuX2dldFN0cmluZyhlKTp0aGlzLl9nZXRCdWZmZXIoZSl9Zmlyc3QoKXtyZXR1cm4gdGhpcy5oZWFkLmRhdGF9Kltvd10oKXtmb3IobGV0IGU9dGhpcy5oZWFkO2U7ZT1lLm5leHQpeWllbGQgZS5kYXRhO31fZ2V0U3RyaW5nKGUpe2xldCByPVwiXCIsaT10aGlzLmhlYWQsbj0wO2Rve2xldCBvPWkuZGF0YTtpZihlPm8ubGVuZ3RoKXIrPW8sZS09by5sZW5ndGg7ZWxzZSB7ZT09PW8ubGVuZ3RoPyhyKz1vLCsrbixpLm5leHQ/dGhpcy5oZWFkPWkubmV4dDp0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwpOihyKz1jYyhvLDAsZSksdGhpcy5oZWFkPWksaS5kYXRhPWNjKG8sZSkpO2JyZWFrfSsrbjt9d2hpbGUoKGk9aS5uZXh0KSE9PW51bGwpO3JldHVybiB0aGlzLmxlbmd0aC09bixyfV9nZXRCdWZmZXIoZSl7bGV0IHI9anMuYWxsb2NVbnNhZmUoZSksaT1lLG49dGhpcy5oZWFkLG89MDtkb3tsZXQgcz1uLmRhdGE7aWYoZT5zLmxlbmd0aClubihyLHMsaS1lKSxlLT1zLmxlbmd0aDtlbHNlIHtlPT09cy5sZW5ndGg/KG5uKHIscyxpLWUpLCsrbyxuLm5leHQ/dGhpcy5oZWFkPW4ubmV4dDp0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwpOihubihyLG5ldyBhdyhzLmJ1ZmZlcixzLmJ5dGVPZmZzZXQsZSksaS1lKSx0aGlzLmhlYWQ9bixuLmRhdGE9cy5zbGljZShlKSk7YnJlYWt9KytvO313aGlsZSgobj1uLm5leHQpIT09bnVsbCk7cmV0dXJuIHRoaXMubGVuZ3RoLT1vLHJ9W1N5bWJvbC5mb3IoXCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbVwiKV0oZSxyKXtyZXR1cm4gbHcodGhpcyx7Li4ucixkZXB0aDowLGN1c3RvbUluc3BlY3Q6ITF9KX19O30pO3ZhciBzbj1NKChmMixnYyk9Pnt2KCk7bSgpO18oKTt2YXJ7TWF0aEZsb29yOnV3LE51bWJlcklzSW50ZWdlcjpmd309Y2UoKSx7RVJSX0lOVkFMSURfQVJHX1ZBTFVFOmN3fT1TZSgpLmNvZGVzO2Z1bmN0aW9uIGh3KHQsZSxyKXtyZXR1cm4gdC5oaWdoV2F0ZXJNYXJrIT1udWxsP3QuaGlnaFdhdGVyTWFyazplP3Rbcl06bnVsbH1mdW5jdGlvbiBwYyh0KXtyZXR1cm4gdD8xNjoxNioxMDI0fWZ1bmN0aW9uIGR3KHQsZSxyLGkpe2xldCBuPWh3KGUsaSxyKTtpZihuIT1udWxsKXtpZighZncobil8fG48MCl7bGV0IG89aT9gb3B0aW9ucy4ke3J9YDpcIm9wdGlvbnMuaGlnaFdhdGVyTWFya1wiO3Rocm93IG5ldyBjdyhvLG4pfXJldHVybiB1dyhuKX1yZXR1cm4gcGModC5vYmplY3RNb2RlKX1nYy5leHBvcnRzPXtnZXRIaWdoV2F0ZXJNYXJrOmR3LGdldERlZmF1bHRIaWdoV2F0ZXJNYXJrOnBjfTt9KTtmdW5jdGlvbiB3Yyh0KXt2YXIgZT10Lmxlbmd0aDtpZihlJTQ+MCl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0XCIpO3ZhciByPXQuaW5kZXhPZihcIj1cIik7cmV0dXJuIHI9PT0tMSYmKHI9ZSksW3Iscj09PWU/MDo0LXIlNF19ZnVuY3Rpb24gcHcodCxlLHIpe2Zvcih2YXIgaSxuLG89W10scz1lO3M8cjtzKz0zKWk9KHRbc108PDE2JjE2NzExNjgwKSsodFtzKzFdPDw4JjY1MjgwKSsoMjU1JnRbcysyXSksby5wdXNoKCRlWyhuPWkpPj4xOCY2M10rJGVbbj4+MTImNjNdKyRlW24+PjYmNjNdKyRlWzYzJm5dKTtyZXR1cm4gby5qb2luKFwiXCIpfWZ1bmN0aW9uIHZ0KHQpe2lmKHQ+MjE0NzQ4MzY0Nyl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIFwiJyt0KydcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKTt2YXIgZT1uZXcgVWludDhBcnJheSh0KTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKGUsay5wcm90b3R5cGUpLGV9ZnVuY3Rpb24gayh0LGUscil7aWYodHlwZW9mIHQ9PVwibnVtYmVyXCIpe2lmKHR5cGVvZiBlPT1cInN0cmluZ1wiKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInN0cmluZ1wiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7cmV0dXJuIEhzKHQpfXJldHVybiBDYyh0LGUscil9ZnVuY3Rpb24gQ2ModCxlLHIpe2lmKHR5cGVvZiB0PT1cInN0cmluZ1wiKXJldHVybiBmdW5jdGlvbihvLHMpe2lmKHR5cGVvZiBzPT1cInN0cmluZ1wiJiZzIT09XCJcInx8KHM9XCJ1dGY4XCIpLCFrLmlzRW5jb2RpbmcocykpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK3MpO3ZhciBhPTB8UGMobyxzKSx1PXZ0KGEpLGM9dS53cml0ZShvLHMpO3JldHVybiBjIT09YSYmKHU9dS5zbGljZSgwLGMpKSx1fSh0LGUpO2lmKEFycmF5QnVmZmVyLmlzVmlldyh0KSlyZXR1cm4gRnModCk7aWYodD09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgXCIrdHlwZW9mIHQpO2lmKEV0KHQsQXJyYXlCdWZmZXIpfHx0JiZFdCh0LmJ1ZmZlcixBcnJheUJ1ZmZlcil8fHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcjxcInVcIiYmKEV0KHQsU2hhcmVkQXJyYXlCdWZmZXIpfHx0JiZFdCh0LmJ1ZmZlcixTaGFyZWRBcnJheUJ1ZmZlcikpKXJldHVybiBtYyh0LGUscik7aWYodHlwZW9mIHQ9PVwibnVtYmVyXCIpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwidmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTt2YXIgaT10LnZhbHVlT2YmJnQudmFsdWVPZigpO2lmKGkhPW51bGwmJmkhPT10KXJldHVybiBrLmZyb20oaSxlLHIpO3ZhciBuPWZ1bmN0aW9uKG8pe2lmKGsuaXNCdWZmZXIobykpe3ZhciBzPTB8S3Moby5sZW5ndGgpLGE9dnQocyk7cmV0dXJuIGEubGVuZ3RoPT09MHx8by5jb3B5KGEsMCwwLHMpLGF9aWYoby5sZW5ndGghPT12b2lkIDApcmV0dXJuIHR5cGVvZiBvLmxlbmd0aCE9XCJudW1iZXJcInx8R3Moby5sZW5ndGgpP3Z0KDApOkZzKG8pO2lmKG8udHlwZT09PVwiQnVmZmVyXCImJkFycmF5LmlzQXJyYXkoby5kYXRhKSlyZXR1cm4gRnMoby5kYXRhKX0odCk7aWYobilyZXR1cm4gbjtpZih0eXBlb2YgU3ltYm9sPFwidVwiJiZTeW1ib2wudG9QcmltaXRpdmUhPW51bGwmJnR5cGVvZiB0W1N5bWJvbC50b1ByaW1pdGl2ZV09PVwiZnVuY3Rpb25cIilyZXR1cm4gay5mcm9tKHRbU3ltYm9sLnRvUHJpbWl0aXZlXShcInN0cmluZ1wiKSxlLHIpO3Rocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSBcIit0eXBlb2YgdCl9ZnVuY3Rpb24gQmModCl7aWYodHlwZW9mIHQhPVwibnVtYmVyXCIpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlcicpO2lmKHQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIFwiJyt0KydcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKX1mdW5jdGlvbiBIcyh0KXtyZXR1cm4gQmModCksdnQodDwwPzA6MHxLcyh0KSl9ZnVuY3Rpb24gRnModCl7Zm9yKHZhciBlPXQubGVuZ3RoPDA/MDowfEtzKHQubGVuZ3RoKSxyPXZ0KGUpLGk9MDtpPGU7aSs9MSlyW2ldPTI1NSZ0W2ldO3JldHVybiByfWZ1bmN0aW9uIG1jKHQsZSxyKXtpZihlPDB8fHQuYnl0ZUxlbmd0aDxlKXRocm93IG5ldyBSYW5nZUVycm9yKCdcIm9mZnNldFwiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO2lmKHQuYnl0ZUxlbmd0aDxlKyhyfHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJsZW5ndGhcIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTt2YXIgaTtyZXR1cm4gaT1lPT09dm9pZCAwJiZyPT09dm9pZCAwP25ldyBVaW50OEFycmF5KHQpOnI9PT12b2lkIDA/bmV3IFVpbnQ4QXJyYXkodCxlKTpuZXcgVWludDhBcnJheSh0LGUsciksT2JqZWN0LnNldFByb3RvdHlwZU9mKGksay5wcm90b3R5cGUpLGl9ZnVuY3Rpb24gS3ModCl7aWYodD49MjE0NzQ4MzY0Nyl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHhcIisyMTQ3NDgzNjQ3IC50b1N0cmluZygxNikrXCIgYnl0ZXNcIik7cmV0dXJuIDB8dH1mdW5jdGlvbiBQYyh0LGUpe2lmKGsuaXNCdWZmZXIodCkpcmV0dXJuIHQubGVuZ3RoO2lmKEFycmF5QnVmZmVyLmlzVmlldyh0KXx8RXQodCxBcnJheUJ1ZmZlcikpcmV0dXJuIHQuYnl0ZUxlbmd0aDtpZih0eXBlb2YgdCE9XCJzdHJpbmdcIil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJzdHJpbmdcIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiB0KTt2YXIgcj10Lmxlbmd0aCxpPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdPT09ITA7aWYoIWkmJnI9PT0wKXJldHVybiAwO2Zvcih2YXIgbj0hMTs7KXN3aXRjaChlKXtjYXNlXCJhc2NpaVwiOmNhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOnJldHVybiByO2Nhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOnJldHVybiBWcyh0KS5sZW5ndGg7Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuIDIqcjtjYXNlXCJoZXhcIjpyZXR1cm4gcj4+PjE7Y2FzZVwiYmFzZTY0XCI6cmV0dXJuIE1jKHQpLmxlbmd0aDtkZWZhdWx0OmlmKG4pcmV0dXJuIGk/LTE6VnModCkubGVuZ3RoO2U9KFwiXCIrZSkudG9Mb3dlckNhc2UoKSxuPSEwO319ZnVuY3Rpb24geXcodCxlLHIpe3ZhciBpPSExO2lmKChlPT09dm9pZCAwfHxlPDApJiYoZT0wKSxlPnRoaXMubGVuZ3RofHwoKHI9PT12b2lkIDB8fHI+dGhpcy5sZW5ndGgpJiYocj10aGlzLmxlbmd0aCkscjw9MCl8fChyPj4+PTApPD0oZT4+Pj0wKSlyZXR1cm4gXCJcIjtmb3IodHx8KHQ9XCJ1dGY4XCIpOzspc3dpdGNoKHQpe2Nhc2VcImhleFwiOnJldHVybiBJdyh0aGlzLGUscik7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuIGtjKHRoaXMsZSxyKTtjYXNlXCJhc2NpaVwiOnJldHVybiBTdyh0aGlzLGUscik7Y2FzZVwibGF0aW4xXCI6Y2FzZVwiYmluYXJ5XCI6cmV0dXJuIEF3KHRoaXMsZSxyKTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4gRXcodGhpcyxlLHIpO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiBUdyh0aGlzLGUscik7ZGVmYXVsdDppZihpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmtub3duIGVuY29kaW5nOiBcIit0KTt0PSh0K1wiXCIpLnRvTG93ZXJDYXNlKCksaT0hMDt9fWZ1bmN0aW9uIHNyKHQsZSxyKXt2YXIgaT10W2VdO3RbZV09dFtyXSx0W3JdPWk7fWZ1bmN0aW9uIHZjKHQsZSxyLGksbil7aWYodC5sZW5ndGg9PT0wKXJldHVybiAtMTtpZih0eXBlb2Ygcj09XCJzdHJpbmdcIj8oaT1yLHI9MCk6cj4yMTQ3NDgzNjQ3P3I9MjE0NzQ4MzY0NzpyPC0yMTQ3NDgzNjQ4JiYocj0tMjE0NzQ4MzY0OCksR3Mocj0rcikmJihyPW4/MDp0Lmxlbmd0aC0xKSxyPDAmJihyPXQubGVuZ3RoK3IpLHI+PXQubGVuZ3RoKXtpZihuKXJldHVybiAtMTtyPXQubGVuZ3RoLTE7fWVsc2UgaWYocjwwKXtpZighbilyZXR1cm4gLTE7cj0wO31pZih0eXBlb2YgZT09XCJzdHJpbmdcIiYmKGU9ay5mcm9tKGUsaSkpLGsuaXNCdWZmZXIoZSkpcmV0dXJuIGUubGVuZ3RoPT09MD8tMTpFYyh0LGUscixpLG4pO2lmKHR5cGVvZiBlPT1cIm51bWJlclwiKXJldHVybiBlJj0yNTUsdHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y9PVwiZnVuY3Rpb25cIj9uP1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0LGUscik6VWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbCh0LGUscik6RWModCxbZV0scixpLG4pO3Rocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXJcIil9ZnVuY3Rpb24gRWModCxlLHIsaSxuKXt2YXIgbyxzPTEsYT10Lmxlbmd0aCx1PWUubGVuZ3RoO2lmKGkhPT12b2lkIDAmJigoaT1TdHJpbmcoaSkudG9Mb3dlckNhc2UoKSk9PT1cInVjczJcInx8aT09PVwidWNzLTJcInx8aT09PVwidXRmMTZsZVwifHxpPT09XCJ1dGYtMTZsZVwiKSl7aWYodC5sZW5ndGg8Mnx8ZS5sZW5ndGg8MilyZXR1cm4gLTE7cz0yLGEvPTIsdS89MixyLz0yO31mdW5jdGlvbiBjKHksdyl7cmV0dXJuIHM9PT0xP3lbd106eS5yZWFkVUludDE2QkUodypzKX1pZihuKXt2YXIgaD0tMTtmb3Iobz1yO288YTtvKyspaWYoYyh0LG8pPT09YyhlLGg9PT0tMT8wOm8taCkpe2lmKGg9PT0tMSYmKGg9byksby1oKzE9PT11KXJldHVybiBoKnN9ZWxzZSBoIT09LTEmJihvLT1vLWgpLGg9LTE7fWVsc2UgZm9yKHIrdT5hJiYocj1hLXUpLG89cjtvPj0wO28tLSl7Zm9yKHZhciBkPSEwLGc9MDtnPHU7ZysrKWlmKGModCxvK2cpIT09YyhlLGcpKXtkPSExO2JyZWFrfWlmKGQpcmV0dXJuIG99cmV0dXJuIC0xfWZ1bmN0aW9uIGJ3KHQsZSxyLGkpe3I9TnVtYmVyKHIpfHwwO3ZhciBuPXQubGVuZ3RoLXI7aT8oaT1OdW1iZXIoaSkpPm4mJihpPW4pOmk9bjt2YXIgbz1lLmxlbmd0aDtpPm8vMiYmKGk9by8yKTtmb3IodmFyIHM9MDtzPGk7KytzKXt2YXIgYT1wYXJzZUludChlLnN1YnN0cigyKnMsMiksMTYpO2lmKEdzKGEpKXJldHVybiBzO3RbcitzXT1hO31yZXR1cm4gc31mdW5jdGlvbiB3dyh0LGUscixpKXtyZXR1cm4gdW4oVnMoZSx0Lmxlbmd0aC1yKSx0LHIsaSl9ZnVuY3Rpb24gT2ModCxlLHIsaSl7cmV0dXJuIHVuKGZ1bmN0aW9uKG4pe2Zvcih2YXIgbz1bXSxzPTA7czxuLmxlbmd0aDsrK3Mpby5wdXNoKDI1NSZuLmNoYXJDb2RlQXQocykpO3JldHVybiBvfShlKSx0LHIsaSl9ZnVuY3Rpb24gX3codCxlLHIsaSl7cmV0dXJuIE9jKHQsZSxyLGkpfWZ1bmN0aW9uIG13KHQsZSxyLGkpe3JldHVybiB1bihNYyhlKSx0LHIsaSl9ZnVuY3Rpb24gdncodCxlLHIsaSl7cmV0dXJuIHVuKGZ1bmN0aW9uKG4sbyl7Zm9yKHZhciBzLGEsdSxjPVtdLGg9MDtoPG4ubGVuZ3RoJiYhKChvLT0yKTwwKTsrK2gpcz1uLmNoYXJDb2RlQXQoaCksYT1zPj44LHU9cyUyNTYsYy5wdXNoKHUpLGMucHVzaChhKTtyZXR1cm4gY30oZSx0Lmxlbmd0aC1yKSx0LHIsaSl9ZnVuY3Rpb24gRXcodCxlLHIpe3JldHVybiBlPT09MCYmcj09PXQubGVuZ3RoPyRzLmZyb21CeXRlQXJyYXkodCk6JHMuZnJvbUJ5dGVBcnJheSh0LnNsaWNlKGUscikpfWZ1bmN0aW9uIGtjKHQsZSxyKXtyPU1hdGgubWluKHQubGVuZ3RoLHIpO2Zvcih2YXIgaT1bXSxuPWU7bjxyOyl7dmFyIG8scyxhLHUsYz10W25dLGg9bnVsbCxkPWM+MjM5PzQ6Yz4yMjM/MzpjPjE5MT8yOjE7aWYobitkPD1yKXN3aXRjaChkKXtjYXNlIDE6YzwxMjgmJihoPWMpO2JyZWFrO2Nhc2UgMjooMTkyJihvPXRbbisxXSkpPT0xMjgmJih1PSgzMSZjKTw8Nnw2MyZvKT4xMjcmJihoPXUpO2JyZWFrO2Nhc2UgMzpvPXRbbisxXSxzPXRbbisyXSwoMTkyJm8pPT0xMjgmJigxOTImcyk9PTEyOCYmKHU9KDE1JmMpPDwxMnwoNjMmbyk8PDZ8NjMmcyk+MjA0NyYmKHU8NTUyOTZ8fHU+NTczNDMpJiYoaD11KTticmVhaztjYXNlIDQ6bz10W24rMV0scz10W24rMl0sYT10W24rM10sKDE5MiZvKT09MTI4JiYoMTkyJnMpPT0xMjgmJigxOTImYSk9PTEyOCYmKHU9KDE1JmMpPDwxOHwoNjMmbyk8PDEyfCg2MyZzKTw8Nnw2MyZhKT42NTUzNSYmdTwxMTE0MTEyJiYoaD11KTt9aD09PW51bGw/KGg9NjU1MzMsZD0xKTpoPjY1NTM1JiYoaC09NjU1MzYsaS5wdXNoKGg+Pj4xMCYxMDIzfDU1Mjk2KSxoPTU2MzIwfDEwMjMmaCksaS5wdXNoKGgpLG4rPWQ7fXJldHVybiBmdW5jdGlvbihnKXt2YXIgeT1nLmxlbmd0aDtpZih5PD00MDk2KXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxnKTtmb3IodmFyIHc9XCJcIixFPTA7RTx5Oyl3Kz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxnLnNsaWNlKEUsRSs9NDA5NikpO3JldHVybiB3fShpKX1mdW5jdGlvbiBTdyh0LGUscil7dmFyIGk9XCJcIjtyPU1hdGgubWluKHQubGVuZ3RoLHIpO2Zvcih2YXIgbj1lO248cjsrK24paSs9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmdFtuXSk7cmV0dXJuIGl9ZnVuY3Rpb24gQXcodCxlLHIpe3ZhciBpPVwiXCI7cj1NYXRoLm1pbih0Lmxlbmd0aCxyKTtmb3IodmFyIG49ZTtuPHI7KytuKWkrPVN0cmluZy5mcm9tQ2hhckNvZGUodFtuXSk7cmV0dXJuIGl9ZnVuY3Rpb24gSXcodCxlLHIpe3ZhciBpPXQubGVuZ3RoOyghZXx8ZTwwKSYmKGU9MCksKCFyfHxyPDB8fHI+aSkmJihyPWkpO2Zvcih2YXIgbj1cIlwiLG89ZTtvPHI7KytvKW4rPUN3W3Rbb11dO3JldHVybiBufWZ1bmN0aW9uIFR3KHQsZSxyKXtmb3IodmFyIGk9dC5zbGljZShlLHIpLG49XCJcIixvPTA7bzxpLmxlbmd0aDtvKz0yKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUoaVtvXSsyNTYqaVtvKzFdKTtyZXR1cm4gbn1mdW5jdGlvbiBiZSh0LGUscil7aWYodCUxIT0wfHx0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJvZmZzZXQgaXMgbm90IHVpbnRcIik7aWYodCtlPnIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoXCIpfWZ1bmN0aW9uIFBlKHQsZSxyLGksbixvKXtpZighay5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZihlPm58fGU8byl0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihyK2k+dC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbmRleCBvdXQgb2YgcmFuZ2VcIil9ZnVuY3Rpb24geGModCxlLHIsaSxuLG8pe2lmKHIraT50Lmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkluZGV4IG91dCBvZiByYW5nZVwiKTtpZihyPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbmRleCBvdXQgb2YgcmFuZ2VcIil9ZnVuY3Rpb24gU2ModCxlLHIsaSxuKXtyZXR1cm4gZT0rZSxyPj4+PTAsbnx8eGModCwwLHIsNCksTnIud3JpdGUodCxlLHIsaSwyMyw0KSxyKzR9ZnVuY3Rpb24gQWModCxlLHIsaSxuKXtyZXR1cm4gZT0rZSxyPj4+PTAsbnx8eGModCwwLHIsOCksTnIud3JpdGUodCxlLHIsaSw1Miw4KSxyKzh9ZnVuY3Rpb24gVnModCxlKXt2YXIgcjtlPWV8fDEvMDtmb3IodmFyIGk9dC5sZW5ndGgsbj1udWxsLG89W10scz0wO3M8aTsrK3Mpe2lmKChyPXQuY2hhckNvZGVBdChzKSk+NTUyOTUmJnI8NTczNDQpe2lmKCFuKXtpZihyPjU2MzE5KXsoZS09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYocysxPT09aSl7KGUtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfW49cjtjb250aW51ZX1pZihyPDU2MzIwKXsoZS09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSksbj1yO2NvbnRpbnVlfXI9NjU1MzYrKG4tNTUyOTY8PDEwfHItNTYzMjApO31lbHNlIG4mJihlLT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtpZihuPW51bGwscjwxMjgpe2lmKChlLT0xKTwwKWJyZWFrO28ucHVzaChyKTt9ZWxzZSBpZihyPDIwNDgpe2lmKChlLT0yKTwwKWJyZWFrO28ucHVzaChyPj42fDE5Miw2MyZyfDEyOCk7fWVsc2UgaWYocjw2NTUzNil7aWYoKGUtPTMpPDApYnJlYWs7by5wdXNoKHI+PjEyfDIyNCxyPj42JjYzfDEyOCw2MyZyfDEyOCk7fWVsc2Uge2lmKCEocjwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNvZGUgcG9pbnRcIik7aWYoKGUtPTQpPDApYnJlYWs7by5wdXNoKHI+PjE4fDI0MCxyPj4xMiY2M3wxMjgscj4+NiY2M3wxMjgsNjMmcnwxMjgpO319cmV0dXJuIG99ZnVuY3Rpb24gTWModCl7cmV0dXJuICRzLnRvQnl0ZUFycmF5KGZ1bmN0aW9uKGUpe2lmKChlPShlPWUuc3BsaXQoXCI9XCIpWzBdKS50cmltKCkucmVwbGFjZShSdyxcIlwiKSkubGVuZ3RoPDIpcmV0dXJuIFwiXCI7Zm9yKDtlLmxlbmd0aCU0IT0wOyllKz1cIj1cIjtyZXR1cm4gZX0odCkpfWZ1bmN0aW9uIHVuKHQsZSxyLGkpe2Zvcih2YXIgbj0wO248aSYmIShuK3I+PWUubGVuZ3RofHxuPj10Lmxlbmd0aCk7KytuKWVbbityXT10W25dO3JldHVybiBufWZ1bmN0aW9uIEV0KHQsZSl7cmV0dXJuIHQgaW5zdGFuY2VvZiBlfHx0IT1udWxsJiZ0LmNvbnN0cnVjdG9yIT1udWxsJiZ0LmNvbnN0cnVjdG9yLm5hbWUhPW51bGwmJnQuY29uc3RydWN0b3IubmFtZT09PWUubmFtZX1mdW5jdGlvbiBHcyh0KXtyZXR1cm4gdCE9dH1mdW5jdGlvbiBJYyh0LGUpe2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXTt9ZnVuY3Rpb24gb3IodCxlLHIpe3JldHVybiBpdCh0LGUscil9ZnVuY3Rpb24gaGkodCl7dmFyIGU7c3dpdGNoKHRoaXMuZW5jb2Rpbmc9ZnVuY3Rpb24ocil7dmFyIGk9ZnVuY3Rpb24obil7aWYoIW4pcmV0dXJuIFwidXRmOFwiO2Zvcih2YXIgbzs7KXN3aXRjaChuKXtjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpyZXR1cm4gXCJ1dGY4XCI7Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuIFwidXRmMTZsZVwiO2Nhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOnJldHVybiBcImxhdGluMVwiO2Nhc2VcImJhc2U2NFwiOmNhc2VcImFzY2lpXCI6Y2FzZVwiaGV4XCI6cmV0dXJuIG47ZGVmYXVsdDppZihvKXJldHVybjtuPShcIlwiK24pLnRvTG93ZXJDYXNlKCksbz0hMDt9fShyKTtpZih0eXBlb2YgaSE9XCJzdHJpbmdcIiYmKHpzLmlzRW5jb2Rpbmc9PT1UY3x8IVRjKHIpKSl0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGVuY29kaW5nOiBcIityKTtyZXR1cm4gaXx8cn0odCksdGhpcy5lbmNvZGluZyl7Y2FzZVwidXRmMTZsZVwiOnRoaXMudGV4dD1Pdyx0aGlzLmVuZD1rdyxlPTQ7YnJlYWs7Y2FzZVwidXRmOFwiOnRoaXMuZmlsbExhc3Q9UHcsZT00O2JyZWFrO2Nhc2VcImJhc2U2NFwiOnRoaXMudGV4dD14dyx0aGlzLmVuZD1NdyxlPTM7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdGhpcy53cml0ZT1Mdyx0aGlzLmVuZD1Vdyx2b2lkIDB9dGhpcy5sYXN0TmVlZD0wLHRoaXMubGFzdFRvdGFsPTAsdGhpcy5sYXN0Q2hhcj16cy5hbGxvY1Vuc2FmZShlKTt9ZnVuY3Rpb24gV3ModCl7cmV0dXJuIHQ8PTEyNz8wOnQ+PjU9PTY/Mjp0Pj40PT0xND8zOnQ+PjM9PTMwPzQ6dD4+Nj09Mj8tMTotMn1mdW5jdGlvbiBQdyh0KXt2YXIgZT10aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLHI9ZnVuY3Rpb24oaSxuLG8pe2lmKCgxOTImblswXSkhPTEyOClyZXR1cm4gaS5sYXN0TmVlZD0wLFwiXFx1RkZGRFwiO2lmKGkubGFzdE5lZWQ+MSYmbi5sZW5ndGg+MSl7aWYoKDE5MiZuWzFdKSE9MTI4KXJldHVybiBpLmxhc3ROZWVkPTEsXCJcXHVGRkZEXCI7aWYoaS5sYXN0TmVlZD4yJiZuLmxlbmd0aD4yJiYoMTkyJm5bMl0pIT0xMjgpcmV0dXJuIGkubGFzdE5lZWQ9MixcIlxcdUZGRkRcIn19KHRoaXMsdCk7cmV0dXJuIHIhPT12b2lkIDA/cjp0aGlzLmxhc3ROZWVkPD10Lmxlbmd0aD8odC5jb3B5KHRoaXMubGFzdENoYXIsZSwwLHRoaXMubGFzdE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMubGFzdFRvdGFsKSk6KHQuY29weSh0aGlzLmxhc3RDaGFyLGUsMCx0Lmxlbmd0aCksdGhpcy5sYXN0TmVlZC09dC5sZW5ndGgsdm9pZCAwKX1mdW5jdGlvbiBPdyh0LGUpe2lmKCh0Lmxlbmd0aC1lKSUyPT0wKXt2YXIgcj10LnRvU3RyaW5nKFwidXRmMTZsZVwiLGUpO2lmKHIpe3ZhciBpPXIuY2hhckNvZGVBdChyLmxlbmd0aC0xKTtpZihpPj01NTI5NiYmaTw9NTYzMTkpcmV0dXJuIHRoaXMubGFzdE5lZWQ9Mix0aGlzLmxhc3RUb3RhbD00LHRoaXMubGFzdENoYXJbMF09dFt0Lmxlbmd0aC0yXSx0aGlzLmxhc3RDaGFyWzFdPXRbdC5sZW5ndGgtMV0sci5zbGljZSgwLC0xKX1yZXR1cm4gcn1yZXR1cm4gdGhpcy5sYXN0TmVlZD0xLHRoaXMubGFzdFRvdGFsPTIsdGhpcy5sYXN0Q2hhclswXT10W3QubGVuZ3RoLTFdLHQudG9TdHJpbmcoXCJ1dGYxNmxlXCIsZSx0Lmxlbmd0aC0xKX1mdW5jdGlvbiBrdyh0KXt2YXIgZT10JiZ0Lmxlbmd0aD90aGlzLndyaXRlKHQpOlwiXCI7aWYodGhpcy5sYXN0TmVlZCl7dmFyIHI9dGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZDtyZXR1cm4gZSt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKFwidXRmMTZsZVwiLDAscil9cmV0dXJuIGV9ZnVuY3Rpb24geHcodCxlKXt2YXIgcj0odC5sZW5ndGgtZSklMztyZXR1cm4gcj09PTA/dC50b1N0cmluZyhcImJhc2U2NFwiLGUpOih0aGlzLmxhc3ROZWVkPTMtcix0aGlzLmxhc3RUb3RhbD0zLHI9PT0xP3RoaXMubGFzdENoYXJbMF09dFt0Lmxlbmd0aC0xXToodGhpcy5sYXN0Q2hhclswXT10W3QubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09dFt0Lmxlbmd0aC0xXSksdC50b1N0cmluZyhcImJhc2U2NFwiLGUsdC5sZW5ndGgtcikpfWZ1bmN0aW9uIE13KHQpe3ZhciBlPXQmJnQubGVuZ3RoP3RoaXMud3JpdGUodCk6XCJcIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9lK3RoaXMubGFzdENoYXIudG9TdHJpbmcoXCJiYXNlNjRcIiwwLDMtdGhpcy5sYXN0TmVlZCk6ZX1mdW5jdGlvbiBMdyh0KXtyZXR1cm4gdC50b1N0cmluZyh0aGlzLmVuY29kaW5nKX1mdW5jdGlvbiBVdyh0KXtyZXR1cm4gdCYmdC5sZW5ndGg/dGhpcy53cml0ZSh0KTpcIlwifXZhciBSYywkZSxrZSx5YyxvbixucixiYyxndyxTdCwkcyxOcixfYyxSdyxDdyxhbixsbixpdCxCdyxhcix6cyxUYyxRcz13ZSgoKT0+e3YoKTttKCk7XygpO2ZvcihSYz17Ynl0ZUxlbmd0aDpmdW5jdGlvbih0KXt2YXIgZT13Yyh0KSxyPWVbMF0saT1lWzFdO3JldHVybiAzKihyK2kpLzQtaX0sdG9CeXRlQXJyYXk6ZnVuY3Rpb24odCl7dmFyIGUscixpPXdjKHQpLG49aVswXSxvPWlbMV0scz1uZXcgeWMoZnVuY3Rpb24oYyxoLGQpe3JldHVybiAzKihoK2QpLzQtZH0oMCxuLG8pKSxhPTAsdT1vPjA/bi00Om47Zm9yKHI9MDtyPHU7cis9NCllPWtlW3QuY2hhckNvZGVBdChyKV08PDE4fGtlW3QuY2hhckNvZGVBdChyKzEpXTw8MTJ8a2VbdC5jaGFyQ29kZUF0KHIrMildPDw2fGtlW3QuY2hhckNvZGVBdChyKzMpXSxzW2ErK109ZT4+MTYmMjU1LHNbYSsrXT1lPj44JjI1NSxzW2ErK109MjU1JmU7cmV0dXJuIG89PT0yJiYoZT1rZVt0LmNoYXJDb2RlQXQocildPDwyfGtlW3QuY2hhckNvZGVBdChyKzEpXT4+NCxzW2ErK109MjU1JmUpLG89PT0xJiYoZT1rZVt0LmNoYXJDb2RlQXQocildPDwxMHxrZVt0LmNoYXJDb2RlQXQocisxKV08PDR8a2VbdC5jaGFyQ29kZUF0KHIrMildPj4yLHNbYSsrXT1lPj44JjI1NSxzW2ErK109MjU1JmUpLHN9LGZyb21CeXRlQXJyYXk6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9dC5sZW5ndGgsaT1yJTMsbj1bXSxvPTAscz1yLWk7bzxzO28rPTE2MzgzKW4ucHVzaChwdyh0LG8sbysxNjM4Mz5zP3M6bysxNjM4MykpO3JldHVybiBpPT09MT8oZT10W3ItMV0sbi5wdXNoKCRlW2U+PjJdKyRlW2U8PDQmNjNdK1wiPT1cIikpOmk9PT0yJiYoZT0odFtyLTJdPDw4KSt0W3ItMV0sbi5wdXNoKCRlW2U+PjEwXSskZVtlPj40JjYzXSskZVtlPDwyJjYzXStcIj1cIikpLG4uam9pbihcIlwiKX19LCRlPVtdLGtlPVtdLHljPXR5cGVvZiBVaW50OEFycmF5PFwidVwiP1VpbnQ4QXJyYXk6QXJyYXksb249XCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvXCIsbnI9MCxiYz1vbi5sZW5ndGg7bnI8YmM7KytucikkZVtucl09b25bbnJdLGtlW29uLmNoYXJDb2RlQXQobnIpXT1ucjtrZVtcIi1cIi5jaGFyQ29kZUF0KDApXT02MixrZVtcIl9cIi5jaGFyQ29kZUF0KDApXT02Mztndz17cmVhZDpmdW5jdGlvbih0LGUscixpLG4pe3ZhciBvLHMsYT04Km4taS0xLHU9KDE8PGEpLTEsYz11Pj4xLGg9LTcsZD1yP24tMTowLGc9cj8tMToxLHk9dFtlK2RdO2ZvcihkKz1nLG89eSYoMTw8LWgpLTEseT4+PS1oLGgrPWE7aD4wO289MjU2Km8rdFtlK2RdLGQrPWcsaC09OCk7Zm9yKHM9byYoMTw8LWgpLTEsbz4+PS1oLGgrPWk7aD4wO3M9MjU2KnMrdFtlK2RdLGQrPWcsaC09OCk7aWYobz09PTApbz0xLWM7ZWxzZSB7aWYobz09PXUpcmV0dXJuIHM/TmFOOjEvMCooeT8tMToxKTtzKz1NYXRoLnBvdygyLGkpLG8tPWM7fXJldHVybiAoeT8tMToxKSpzKk1hdGgucG93KDIsby1pKX0sd3JpdGU6ZnVuY3Rpb24odCxlLHIsaSxuLG8pe3ZhciBzLGEsdSxjPTgqby1uLTEsaD0oMTw8YyktMSxkPWg+PjEsZz1uPT09MjM/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLHk9aT8wOm8tMSx3PWk/MTotMSxFPWU8MHx8ZT09PTAmJjEvZTwwPzE6MDtmb3IoZT1NYXRoLmFicyhlKSxpc05hTihlKXx8ZT09PTEvMD8oYT1pc05hTihlKT8xOjAscz1oKToocz1NYXRoLmZsb29yKE1hdGgubG9nKGUpL01hdGguTE4yKSxlKih1PU1hdGgucG93KDIsLXMpKTwxJiYocy0tLHUqPTIpLChlKz1zK2Q+PTE/Zy91OmcqTWF0aC5wb3coMiwxLWQpKSp1Pj0yJiYocysrLHUvPTIpLHMrZD49aD8oYT0wLHM9aCk6cytkPj0xPyhhPShlKnUtMSkqTWF0aC5wb3coMixuKSxzKz1kKTooYT1lKk1hdGgucG93KDIsZC0xKSpNYXRoLnBvdygyLG4pLHM9MCkpO24+PTg7dFtyK3ldPTI1NSZhLHkrPXcsYS89MjU2LG4tPTgpO2ZvcihzPXM8PG58YSxjKz1uO2M+MDt0W3IreV09MjU1JnMseSs9dyxzLz0yNTYsYy09OCk7dFtyK3ktd118PTEyOCpFO319LFN0PXt9LCRzPVJjLE5yPWd3LF9jPXR5cGVvZiBTeW1ib2w9PVwiZnVuY3Rpb25cIiYmdHlwZW9mIFN5bWJvbC5mb3I9PVwiZnVuY3Rpb25cIj9TeW1ib2wuZm9yKFwibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b21cIik6bnVsbDtTdC5CdWZmZXI9ayxTdC5TbG93QnVmZmVyPWZ1bmN0aW9uKHQpe3JldHVybiArdCE9dCYmKHQ9MCksay5hbGxvYygrdCl9LFN0LklOU1BFQ1RfTUFYX0JZVEVTPTUwO1N0LmtNYXhMZW5ndGg9MjE0NzQ4MzY0NyxrLlRZUEVEX0FSUkFZX1NVUFBPUlQ9ZnVuY3Rpb24oKXt0cnl7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoMSksZT17Zm9vOmZ1bmN0aW9uKCl7cmV0dXJuIDQyfX07cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihlLFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKSx0LmZvbygpPT09NDJ9Y2F0Y2h7cmV0dXJuICExfX0oKSxrLlRZUEVEX0FSUkFZX1NVUFBPUlR8fHR5cGVvZiBjb25zb2xlPlwidVwifHx0eXBlb2YgY29uc29sZS5lcnJvciE9XCJmdW5jdGlvblwifHxjb25zb2xlLmVycm9yKFwiVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGBidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuXCIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShrLnByb3RvdHlwZSxcInBhcmVudFwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKGsuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShrLnByb3RvdHlwZSxcIm9mZnNldFwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKGsuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnl0ZU9mZnNldH19KSxrLnBvb2xTaXplPTgxOTIsay5mcm9tPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gQ2ModCxlLHIpfSxPYmplY3Quc2V0UHJvdG90eXBlT2Yoay5wcm90b3R5cGUsVWludDhBcnJheS5wcm90b3R5cGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihrLFVpbnQ4QXJyYXkpLGsuYWxsb2M9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBmdW5jdGlvbihpLG4sbyl7cmV0dXJuIEJjKGkpLGk8PTA/dnQoaSk6biE9PXZvaWQgMD90eXBlb2Ygbz09XCJzdHJpbmdcIj92dChpKS5maWxsKG4sbyk6dnQoaSkuZmlsbChuKTp2dChpKX0odCxlLHIpfSxrLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHQpe3JldHVybiBIcyh0KX0say5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24odCl7cmV0dXJuIEhzKHQpfSxrLmlzQnVmZmVyPWZ1bmN0aW9uKHQpe3JldHVybiB0IT1udWxsJiZ0Ll9pc0J1ZmZlcj09PSEwJiZ0IT09ay5wcm90b3R5cGV9LGsuY29tcGFyZT1mdW5jdGlvbih0LGUpe2lmKEV0KHQsVWludDhBcnJheSkmJih0PWsuZnJvbSh0LHQub2Zmc2V0LHQuYnl0ZUxlbmd0aCkpLEV0KGUsVWludDhBcnJheSkmJihlPWsuZnJvbShlLGUub2Zmc2V0LGUuYnl0ZUxlbmd0aCkpLCFrLmlzQnVmZmVyKHQpfHwhay5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJidWYxXCIsIFwiYnVmMlwiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7aWYodD09PWUpcmV0dXJuIDA7Zm9yKHZhciByPXQubGVuZ3RoLGk9ZS5sZW5ndGgsbj0wLG89TWF0aC5taW4ocixpKTtuPG87KytuKWlmKHRbbl0hPT1lW25dKXtyPXRbbl0saT1lW25dO2JyZWFrfXJldHVybiByPGk/LTE6aTxyPzE6MH0say5pc0VuY29kaW5nPWZ1bmN0aW9uKHQpe3N3aXRjaChTdHJpbmcodCkudG9Mb3dlckNhc2UoKSl7Y2FzZVwiaGV4XCI6Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6Y2FzZVwiYXNjaWlcIjpjYXNlXCJsYXRpbjFcIjpjYXNlXCJiaW5hcnlcIjpjYXNlXCJiYXNlNjRcIjpjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4gITA7ZGVmYXVsdDpyZXR1cm4gITF9fSxrLmNvbmNhdD1mdW5jdGlvbih0LGUpe2lmKCFBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lmKHQubGVuZ3RoPT09MClyZXR1cm4gay5hbGxvYygwKTt2YXIgcjtpZihlPT09dm9pZCAwKWZvcihlPTAscj0wO3I8dC5sZW5ndGg7KytyKWUrPXRbcl0ubGVuZ3RoO3ZhciBpPWsuYWxsb2NVbnNhZmUoZSksbj0wO2ZvcihyPTA7cjx0Lmxlbmd0aDsrK3Ipe3ZhciBvPXRbcl07aWYoRXQobyxVaW50OEFycmF5KSYmKG89ay5mcm9tKG8pKSwhay5pc0J1ZmZlcihvKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtvLmNvcHkoaSxuKSxuKz1vLmxlbmd0aDt9cmV0dXJuIGl9LGsuYnl0ZUxlbmd0aD1QYyxrLnByb3RvdHlwZS5faXNCdWZmZXI9ITAsay5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sZW5ndGg7aWYodCUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHNcIik7Zm9yKHZhciBlPTA7ZTx0O2UrPTIpc3IodGhpcyxlLGUrMSk7cmV0dXJuIHRoaXN9LGsucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe3ZhciB0PXRoaXMubGVuZ3RoO2lmKHQlNCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzXCIpO2Zvcih2YXIgZT0wO2U8dDtlKz00KXNyKHRoaXMsZSxlKzMpLHNyKHRoaXMsZSsxLGUrMik7cmV0dXJuIHRoaXN9LGsucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciB0PXRoaXMubGVuZ3RoO2lmKHQlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzXCIpO2Zvcih2YXIgZT0wO2U8dDtlKz04KXNyKHRoaXMsZSxlKzcpLHNyKHRoaXMsZSsxLGUrNiksc3IodGhpcyxlKzIsZSs1KSxzcih0aGlzLGUrMyxlKzQpO3JldHVybiB0aGlzfSxrLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciB0PXRoaXMubGVuZ3RoO3JldHVybiB0PT09MD9cIlwiOmFyZ3VtZW50cy5sZW5ndGg9PT0wP2tjKHRoaXMsMCx0KTp5dy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGsucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nPWsucHJvdG90eXBlLnRvU3RyaW5nLGsucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtpZighay5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlclwiKTtyZXR1cm4gdGhpcz09PXR8fGsuY29tcGFyZSh0aGlzLHQpPT09MH0say5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciB0PVwiXCIsZT1TdC5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gdD10aGlzLnRvU3RyaW5nKFwiaGV4XCIsMCxlKS5yZXBsYWNlKC8oLnsyfSkvZyxcIiQxIFwiKS50cmltKCksdGhpcy5sZW5ndGg+ZSYmKHQrPVwiIC4uLiBcIiksXCI8QnVmZmVyIFwiK3QrXCI+XCJ9LF9jJiYoay5wcm90b3R5cGVbX2NdPWsucHJvdG90eXBlLmluc3BlY3QpLGsucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24odCxlLHIsaSxuKXtpZihFdCh0LFVpbnQ4QXJyYXkpJiYodD1rLmZyb20odCx0Lm9mZnNldCx0LmJ5dGVMZW5ndGgpKSwhay5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJ0YXJnZXRcIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5LiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIHQpO2lmKGU9PT12b2lkIDAmJihlPTApLHI9PT12b2lkIDAmJihyPXQ/dC5sZW5ndGg6MCksaT09PXZvaWQgMCYmKGk9MCksbj09PXZvaWQgMCYmKG49dGhpcy5sZW5ndGgpLGU8MHx8cj50Lmxlbmd0aHx8aTwwfHxuPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwib3V0IG9mIHJhbmdlIGluZGV4XCIpO2lmKGk+PW4mJmU+PXIpcmV0dXJuIDA7aWYoaT49bilyZXR1cm4gLTE7aWYoZT49cilyZXR1cm4gMTtpZih0aGlzPT09dClyZXR1cm4gMDtmb3IodmFyIG89KG4+Pj49MCktKGk+Pj49MCkscz0ocj4+Pj0wKS0oZT4+Pj0wKSxhPU1hdGgubWluKG8scyksdT10aGlzLnNsaWNlKGksbiksYz10LnNsaWNlKGUsciksaD0wO2g8YTsrK2gpaWYodVtoXSE9PWNbaF0pe289dVtoXSxzPWNbaF07YnJlYWt9cmV0dXJuIG88cz8tMTpzPG8/MTowfSxrLnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuaW5kZXhPZih0LGUscikhPT0tMX0say5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHZjKHRoaXMsdCxlLHIsITApfSxrLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHZjKHRoaXMsdCxlLHIsITEpfSxrLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih0LGUscixpKXtpZihlPT09dm9pZCAwKWk9XCJ1dGY4XCIscj10aGlzLmxlbmd0aCxlPTA7ZWxzZSBpZihyPT09dm9pZCAwJiZ0eXBlb2YgZT09XCJzdHJpbmdcIilpPWUscj10aGlzLmxlbmd0aCxlPTA7ZWxzZSB7aWYoIWlzRmluaXRlKGUpKXRocm93IG5ldyBFcnJvcihcIkJ1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkXCIpO2U+Pj49MCxpc0Zpbml0ZShyKT8ocj4+Pj0wLGk9PT12b2lkIDAmJihpPVwidXRmOFwiKSk6KGk9cixyPXZvaWQgMCk7fXZhciBuPXRoaXMubGVuZ3RoLWU7aWYoKHI9PT12b2lkIDB8fHI+bikmJihyPW4pLHQubGVuZ3RoPjAmJihyPDB8fGU8MCl8fGU+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kc1wiKTtpfHwoaT1cInV0ZjhcIik7Zm9yKHZhciBvPSExOzspc3dpdGNoKGkpe2Nhc2VcImhleFwiOnJldHVybiBidyh0aGlzLHQsZSxyKTtjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpyZXR1cm4gd3codGhpcyx0LGUscik7Y2FzZVwiYXNjaWlcIjpyZXR1cm4gT2ModGhpcyx0LGUscik7Y2FzZVwibGF0aW4xXCI6Y2FzZVwiYmluYXJ5XCI6cmV0dXJuIF93KHRoaXMsdCxlLHIpO2Nhc2VcImJhc2U2NFwiOnJldHVybiBtdyh0aGlzLHQsZSxyKTtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4gdncodGhpcyx0LGUscik7ZGVmYXVsdDppZihvKXRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmtub3duIGVuY29kaW5nOiBcIitpKTtpPShcIlwiK2kpLnRvTG93ZXJDYXNlKCksbz0hMDt9fSxrLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4ge3R5cGU6XCJCdWZmZXJcIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O2sucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sZW5ndGg7KHQ9fn50KTwwPyh0Kz1yKTwwJiYodD0wKTp0PnImJih0PXIpLChlPWU9PT12b2lkIDA/cjp+fmUpPDA/KGUrPXIpPDAmJihlPTApOmU+ciYmKGU9ciksZTx0JiYoZT10KTt2YXIgaT10aGlzLnN1YmFycmF5KHQsZSk7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihpLGsucHJvdG90eXBlKSxpfSxrLnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKHQsZSxyKXt0Pj4+PTAsZT4+Pj0wLHJ8fGJlKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBpPXRoaXNbdF0sbj0xLG89MDsrK288ZSYmKG4qPTI1Nik7KWkrPXRoaXNbdCtvXSpuO3JldHVybiBpfSxrLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKHQsZSxyKXt0Pj4+PTAsZT4+Pj0wLHJ8fGJlKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBpPXRoaXNbdCstLWVdLG49MTtlPjAmJihuKj0yNTYpOylpKz10aGlzW3QrLS1lXSpuO3JldHVybiBpfSxrLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fGJlKHQsMSx0aGlzLmxlbmd0aCksdGhpc1t0XX0say5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxiZSh0LDIsdGhpcy5sZW5ndGgpLHRoaXNbdF18dGhpc1t0KzFdPDw4fSxrLnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fGJlKHQsMix0aGlzLmxlbmd0aCksdGhpc1t0XTw8OHx0aGlzW3QrMV19LGsucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8YmUodCw0LHRoaXMubGVuZ3RoKSwodGhpc1t0XXx0aGlzW3QrMV08PDh8dGhpc1t0KzJdPDwxNikrMTY3NzcyMTYqdGhpc1t0KzNdfSxrLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fGJlKHQsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1t0XSsodGhpc1t0KzFdPDwxNnx0aGlzW3QrMl08PDh8dGhpc1t0KzNdKX0say5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKHQsZSxyKXt0Pj4+PTAsZT4+Pj0wLHJ8fGJlKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBpPXRoaXNbdF0sbj0xLG89MDsrK288ZSYmKG4qPTI1Nik7KWkrPXRoaXNbdCtvXSpuO3JldHVybiBpPj0obio9MTI4KSYmKGktPU1hdGgucG93KDIsOCplKSksaX0say5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKHQsZSxyKXt0Pj4+PTAsZT4+Pj0wLHJ8fGJlKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBpPWUsbj0xLG89dGhpc1t0Ky0taV07aT4wJiYobio9MjU2KTspbys9dGhpc1t0Ky0taV0qbjtyZXR1cm4gbz49KG4qPTEyOCkmJihvLT1NYXRoLnBvdygyLDgqZSkpLG99LGsucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxiZSh0LDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW3RdPy0xKigyNTUtdGhpc1t0XSsxKTp0aGlzW3RdfSxrLnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbih0LGUpe3Q+Pj49MCxlfHxiZSh0LDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbdF18dGhpc1t0KzFdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxrLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbih0LGUpe3Q+Pj49MCxlfHxiZSh0LDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbdCsxXXx0aGlzW3RdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxrLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8YmUodCw0LHRoaXMubGVuZ3RoKSx0aGlzW3RdfHRoaXNbdCsxXTw8OHx0aGlzW3QrMl08PDE2fHRoaXNbdCszXTw8MjR9LGsucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxiZSh0LDQsdGhpcy5sZW5ndGgpLHRoaXNbdF08PDI0fHRoaXNbdCsxXTw8MTZ8dGhpc1t0KzJdPDw4fHRoaXNbdCszXX0say5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fGJlKHQsNCx0aGlzLmxlbmd0aCksTnIucmVhZCh0aGlzLHQsITAsMjMsNCl9LGsucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxiZSh0LDQsdGhpcy5sZW5ndGgpLE5yLnJlYWQodGhpcyx0LCExLDIzLDQpfSxrLnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fGJlKHQsOCx0aGlzLmxlbmd0aCksTnIucmVhZCh0aGlzLHQsITAsNTIsOCl9LGsucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8YmUodCw4LHRoaXMubGVuZ3RoKSxOci5yZWFkKHRoaXMsdCwhMSw1Miw4KX0say5wcm90b3R5cGUud3JpdGVVSW50TEU9ZnVuY3Rpb24odCxlLHIsaSl7dD0rdCxlPj4+PTAscj4+Pj0wLGl8fFBlKHRoaXMsdCxlLHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIG49MSxvPTA7Zm9yKHRoaXNbZV09MjU1JnQ7KytvPHImJihuKj0yNTYpOyl0aGlzW2Urb109dC9uJjI1NTtyZXR1cm4gZStyfSxrLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbih0LGUscixpKXt0PSt0LGU+Pj49MCxyPj4+PTAsaXx8UGUodGhpcyx0LGUscixNYXRoLnBvdygyLDgqciktMSwwKTt2YXIgbj1yLTEsbz0xO2Zvcih0aGlzW2Urbl09MjU1JnQ7LS1uPj0wJiYobyo9MjU2KTspdGhpc1tlK25dPXQvbyYyNTU7cmV0dXJuIGUrcn0say5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fFBlKHRoaXMsdCxlLDEsMjU1LDApLHRoaXNbZV09MjU1JnQsZSsxfSxrLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8UGUodGhpcyx0LGUsMiw2NTUzNSwwKSx0aGlzW2VdPTI1NSZ0LHRoaXNbZSsxXT10Pj4+OCxlKzJ9LGsucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxQZSh0aGlzLHQsZSwyLDY1NTM1LDApLHRoaXNbZV09dD4+PjgsdGhpc1tlKzFdPTI1NSZ0LGUrMn0say5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fFBlKHRoaXMsdCxlLDQsNDI5NDk2NzI5NSwwKSx0aGlzW2UrM109dD4+PjI0LHRoaXNbZSsyXT10Pj4+MTYsdGhpc1tlKzFdPXQ+Pj44LHRoaXNbZV09MjU1JnQsZSs0fSxrLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8UGUodGhpcyx0LGUsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbZV09dD4+PjI0LHRoaXNbZSsxXT10Pj4+MTYsdGhpc1tlKzJdPXQ+Pj44LHRoaXNbZSszXT0yNTUmdCxlKzR9LGsucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24odCxlLHIsaSl7aWYodD0rdCxlPj4+PTAsIWkpe3ZhciBuPU1hdGgucG93KDIsOCpyLTEpO1BlKHRoaXMsdCxlLHIsbi0xLC1uKTt9dmFyIG89MCxzPTEsYT0wO2Zvcih0aGlzW2VdPTI1NSZ0OysrbzxyJiYocyo9MjU2KTspdDwwJiZhPT09MCYmdGhpc1tlK28tMV0hPT0wJiYoYT0xKSx0aGlzW2Urb109KHQvcz4+MCktYSYyNTU7cmV0dXJuIGUrcn0say5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbih0LGUscixpKXtpZih0PSt0LGU+Pj49MCwhaSl7dmFyIG49TWF0aC5wb3coMiw4KnItMSk7UGUodGhpcyx0LGUscixuLTEsLW4pO312YXIgbz1yLTEscz0xLGE9MDtmb3IodGhpc1tlK29dPTI1NSZ0Oy0tbz49MCYmKHMqPTI1Nik7KXQ8MCYmYT09PTAmJnRoaXNbZStvKzFdIT09MCYmKGE9MSksdGhpc1tlK29dPSh0L3M+PjApLWEmMjU1O3JldHVybiBlK3J9LGsucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fFBlKHRoaXMsdCxlLDEsMTI3LC0xMjgpLHQ8MCYmKHQ9MjU1K3QrMSksdGhpc1tlXT0yNTUmdCxlKzF9LGsucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fFBlKHRoaXMsdCxlLDIsMzI3NjcsLTMyNzY4KSx0aGlzW2VdPTI1NSZ0LHRoaXNbZSsxXT10Pj4+OCxlKzJ9LGsucHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fFBlKHRoaXMsdCxlLDIsMzI3NjcsLTMyNzY4KSx0aGlzW2VdPXQ+Pj44LHRoaXNbZSsxXT0yNTUmdCxlKzJ9LGsucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fFBlKHRoaXMsdCxlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdGhpc1tlXT0yNTUmdCx0aGlzW2UrMV09dD4+PjgsdGhpc1tlKzJdPXQ+Pj4xNix0aGlzW2UrM109dD4+PjI0LGUrNH0say5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8UGUodGhpcyx0LGUsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0PDAmJih0PTQyOTQ5NjcyOTUrdCsxKSx0aGlzW2VdPXQ+Pj4yNCx0aGlzW2UrMV09dD4+PjE2LHRoaXNbZSsyXT10Pj4+OCx0aGlzW2UrM109MjU1JnQsZSs0fSxrLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBTYyh0aGlzLHQsZSwhMCxyKX0say5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gU2ModGhpcyx0LGUsITEscil9LGsucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBBYyh0aGlzLHQsZSwhMCxyKX0say5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIEFjKHRoaXMsdCxlLCExLHIpfSxrLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQsZSxyLGkpe2lmKCFrLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJhcmd1bWVudCBzaG91bGQgYmUgYSBCdWZmZXJcIik7aWYocnx8KHI9MCksaXx8aT09PTB8fChpPXRoaXMubGVuZ3RoKSxlPj10Lmxlbmd0aCYmKGU9dC5sZW5ndGgpLGV8fChlPTApLGk+MCYmaTxyJiYoaT1yKSxpPT09cnx8dC5sZW5ndGg9PT0wfHx0aGlzLmxlbmd0aD09PTApcmV0dXJuIDA7aWYoZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kc1wiKTtpZihyPDB8fHI+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW5kZXggb3V0IG9mIHJhbmdlXCIpO2lmKGk8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInNvdXJjZUVuZCBvdXQgb2YgYm91bmRzXCIpO2k+dGhpcy5sZW5ndGgmJihpPXRoaXMubGVuZ3RoKSx0Lmxlbmd0aC1lPGktciYmKGk9dC5sZW5ndGgtZStyKTt2YXIgbj1pLXI7aWYodGhpcz09PXQmJnR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluPT1cImZ1bmN0aW9uXCIpdGhpcy5jb3B5V2l0aGluKGUscixpKTtlbHNlIGlmKHRoaXM9PT10JiZyPGUmJmU8aSlmb3IodmFyIG89bi0xO28+PTA7LS1vKXRbbytlXT10aGlzW28rcl07ZWxzZSBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbCh0LHRoaXMuc3ViYXJyYXkocixpKSxlKTtyZXR1cm4gbn0say5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbih0LGUscixpKXtpZih0eXBlb2YgdD09XCJzdHJpbmdcIil7aWYodHlwZW9mIGU9PVwic3RyaW5nXCI/KGk9ZSxlPTAscj10aGlzLmxlbmd0aCk6dHlwZW9mIHI9PVwic3RyaW5nXCImJihpPXIscj10aGlzLmxlbmd0aCksaSE9PXZvaWQgMCYmdHlwZW9mIGkhPVwic3RyaW5nXCIpdGhyb3cgbmV3IFR5cGVFcnJvcihcImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmdcIik7aWYodHlwZW9mIGk9PVwic3RyaW5nXCImJiFrLmlzRW5jb2RpbmcoaSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK2kpO2lmKHQubGVuZ3RoPT09MSl7dmFyIG49dC5jaGFyQ29kZUF0KDApOyhpPT09XCJ1dGY4XCImJm48MTI4fHxpPT09XCJsYXRpbjFcIikmJih0PW4pO319ZWxzZSB0eXBlb2YgdD09XCJudW1iZXJcIj90Jj0yNTU6dHlwZW9mIHQ9PVwiYm9vbGVhblwiJiYodD1OdW1iZXIodCkpO2lmKGU8MHx8dGhpcy5sZW5ndGg8ZXx8dGhpcy5sZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIk91dCBvZiByYW5nZSBpbmRleFwiKTtpZihyPD1lKXJldHVybiB0aGlzO3ZhciBvO2lmKGU+Pj49MCxyPXI9PT12b2lkIDA/dGhpcy5sZW5ndGg6cj4+PjAsdHx8KHQ9MCksdHlwZW9mIHQ9PVwibnVtYmVyXCIpZm9yKG89ZTtvPHI7KytvKXRoaXNbb109dDtlbHNlIHt2YXIgcz1rLmlzQnVmZmVyKHQpP3Q6ay5mcm9tKHQsaSksYT1zLmxlbmd0aDtpZihhPT09MCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgXCInK3QrJ1wiIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50IFwidmFsdWVcIicpO2ZvcihvPTA7bzxyLWU7KytvKXRoaXNbbytlXT1zW28lYV07fXJldHVybiB0aGlzfTtSdz0vW14rLzAtOUEtWmEtei1fXS9nO0N3PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PW5ldyBBcnJheSgyNTYpLGU9MDtlPDE2OysrZSlmb3IodmFyIHI9MTYqZSxpPTA7aTwxNjsrK2kpdFtyK2ldPVwiMDEyMzQ1Njc4OWFiY2RlZlwiW2VdK1wiMDEyMzQ1Njc4OWFiY2RlZlwiW2ldO3JldHVybiB0fSgpO1N0LkJ1ZmZlcjtTdC5JTlNQRUNUX01BWF9CWVRFUztTdC5rTWF4TGVuZ3RoO2FuPXt9LGxuPVN0LGl0PWxuLkJ1ZmZlcjtpdC5mcm9tJiZpdC5hbGxvYyYmaXQuYWxsb2NVbnNhZmUmJml0LmFsbG9jVW5zYWZlU2xvdz9hbj1sbjooSWMobG4sYW4pLGFuLkJ1ZmZlcj1vciksb3IucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaXQucHJvdG90eXBlKSxJYyhpdCxvciksb3IuZnJvbT1mdW5jdGlvbih0LGUscil7aWYodHlwZW9mIHQ9PVwibnVtYmVyXCIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyXCIpO3JldHVybiBpdCh0LGUscil9LG9yLmFsbG9jPWZ1bmN0aW9uKHQsZSxyKXtpZih0eXBlb2YgdCE9XCJudW1iZXJcIil0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlclwiKTt2YXIgaT1pdCh0KTtyZXR1cm4gZSE9PXZvaWQgMD90eXBlb2Ygcj09XCJzdHJpbmdcIj9pLmZpbGwoZSxyKTppLmZpbGwoZSk6aS5maWxsKDApLGl9LG9yLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHQpe2lmKHR5cGVvZiB0IT1cIm51bWJlclwiKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyXCIpO3JldHVybiBpdCh0KX0sb3IuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKHQpe2lmKHR5cGVvZiB0IT1cIm51bWJlclwiKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyXCIpO3JldHVybiBsbi5TbG93QnVmZmVyKHQpfTtCdz1hbixhcj17fSx6cz1Cdy5CdWZmZXIsVGM9enMuaXNFbmNvZGluZ3x8ZnVuY3Rpb24odCl7c3dpdGNoKCh0PVwiXCIrdCkmJnQudG9Mb3dlckNhc2UoKSl7Y2FzZVwiaGV4XCI6Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6Y2FzZVwiYXNjaWlcIjpjYXNlXCJiaW5hcnlcIjpjYXNlXCJiYXNlNjRcIjpjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpjYXNlXCJyYXdcIjpyZXR1cm4gITA7ZGVmYXVsdDpyZXR1cm4gITF9fTthci5TdHJpbmdEZWNvZGVyPWhpLGhpLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih0KXtpZih0Lmxlbmd0aD09PTApcmV0dXJuIFwiXCI7dmFyIGUscjtpZih0aGlzLmxhc3ROZWVkKXtpZigoZT10aGlzLmZpbGxMYXN0KHQpKT09PXZvaWQgMClyZXR1cm4gXCJcIjtyPXRoaXMubGFzdE5lZWQsdGhpcy5sYXN0TmVlZD0wO31lbHNlIHI9MDtyZXR1cm4gcjx0Lmxlbmd0aD9lP2UrdGhpcy50ZXh0KHQscik6dGhpcy50ZXh0KHQscik6ZXx8XCJcIn0saGkucHJvdG90eXBlLmVuZD1mdW5jdGlvbih0KXt2YXIgZT10JiZ0Lmxlbmd0aD90aGlzLndyaXRlKHQpOlwiXCI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/ZStcIlxcdUZGRkRcIjplfSxoaS5wcm90b3R5cGUudGV4dD1mdW5jdGlvbih0LGUpe3ZhciByPWZ1bmN0aW9uKG4sbyxzKXt2YXIgYT1vLmxlbmd0aC0xO2lmKGE8cylyZXR1cm4gMDt2YXIgdT1XcyhvW2FdKTtyZXR1cm4gdT49MD8odT4wJiYobi5sYXN0TmVlZD11LTEpLHUpOi0tYTxzfHx1PT09LTI/MDoodT1XcyhvW2FdKSk+PTA/KHU+MCYmKG4ubGFzdE5lZWQ9dS0yKSx1KTotLWE8c3x8dT09PS0yPzA6KHU9V3Mob1thXSkpPj0wPyh1PjAmJih1PT09Mj91PTA6bi5sYXN0TmVlZD11LTMpLHUpOjB9KHRoaXMsdCxlKTtpZighdGhpcy5sYXN0TmVlZClyZXR1cm4gdC50b1N0cmluZyhcInV0ZjhcIixlKTt0aGlzLmxhc3RUb3RhbD1yO3ZhciBpPXQubGVuZ3RoLShyLXRoaXMubGFzdE5lZWQpO3JldHVybiB0LmNvcHkodGhpcy5sYXN0Q2hhciwwLGkpLHQudG9TdHJpbmcoXCJ1dGY4XCIsZSxpKX0saGkucHJvdG90eXBlLmZpbGxMYXN0PWZ1bmN0aW9uKHQpe2lmKHRoaXMubGFzdE5lZWQ8PXQubGVuZ3RoKXJldHVybiB0LmNvcHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpO3QuY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCx0Lmxlbmd0aCksdGhpcy5sYXN0TmVlZC09dC5sZW5ndGg7fTthci5TdHJpbmdEZWNvZGVyO2FyLlN0cmluZ0RlY29kZXI7fSk7dmFyIExjPXt9O1F0KExjLHtTdHJpbmdEZWNvZGVyOigpPT5OdyxkZWZhdWx0OigpPT5hcn0pO3ZhciBOdyxVYz13ZSgoKT0+e3YoKTttKCk7XygpO1FzKCk7UXMoKTtOdz1hci5TdHJpbmdEZWNvZGVyO30pO3ZhciBZcz1NKChGMixqYyk9Pnt2KCk7bSgpO18oKTt2YXIgTmM9VXQoKSx7UHJvbWlzZVByb3RvdHlwZVRoZW46cXcsU3ltYm9sQXN5bmNJdGVyYXRvcjpxYyxTeW1ib2xJdGVyYXRvcjpEY309Y2UoKSx7QnVmZmVyOkR3fT0oeWUoKSxYKF9lKSkse0VSUl9JTlZBTElEX0FSR19UWVBFOmp3LEVSUl9TVFJFQU1fTlVMTF9WQUxVRVM6Rnd9PVNlKCkuY29kZXM7ZnVuY3Rpb24gV3codCxlLHIpe2xldCBpO2lmKHR5cGVvZiBlPT1cInN0cmluZ1wifHxlIGluc3RhbmNlb2YgRHcpcmV0dXJuIG5ldyB0KHtvYmplY3RNb2RlOiEwLC4uLnIscmVhZCgpe3RoaXMucHVzaChlKSx0aGlzLnB1c2gobnVsbCk7fX0pO2xldCBuO2lmKGUmJmVbcWNdKW49ITAsaT1lW3FjXSgpO2Vsc2UgaWYoZSYmZVtEY10pbj0hMSxpPWVbRGNdKCk7ZWxzZSB0aHJvdyBuZXcgancoXCJpdGVyYWJsZVwiLFtcIkl0ZXJhYmxlXCJdLGUpO2xldCBvPW5ldyB0KHtvYmplY3RNb2RlOiEwLGhpZ2hXYXRlck1hcms6MSwuLi5yfSkscz0hMTtvLl9yZWFkPWZ1bmN0aW9uKCl7c3x8KHM9ITAsdSgpKTt9LG8uX2Rlc3Ryb3k9ZnVuY3Rpb24oYyxoKXtxdyhhKGMpLCgpPT5OYy5uZXh0VGljayhoLGMpLGQ9Pk5jLm5leHRUaWNrKGgsZHx8YykpO307YXN5bmMgZnVuY3Rpb24gYShjKXtsZXQgaD1jIT1udWxsLGQ9dHlwZW9mIGkudGhyb3c9PVwiZnVuY3Rpb25cIjtpZihoJiZkKXtsZXR7dmFsdWU6Zyxkb25lOnl9PWF3YWl0IGkudGhyb3coYyk7aWYoYXdhaXQgZyx5KXJldHVybn1pZih0eXBlb2YgaS5yZXR1cm49PVwiZnVuY3Rpb25cIil7bGV0e3ZhbHVlOmd9PWF3YWl0IGkucmV0dXJuKCk7YXdhaXQgZzt9fWFzeW5jIGZ1bmN0aW9uIHUoKXtmb3IoOzspe3RyeXtsZXR7dmFsdWU6Yyxkb25lOmh9PW4/YXdhaXQgaS5uZXh0KCk6aS5uZXh0KCk7aWYoaClvLnB1c2gobnVsbCk7ZWxzZSB7bGV0IGQ9YyYmdHlwZW9mIGMudGhlbj09XCJmdW5jdGlvblwiP2F3YWl0IGM6YztpZihkPT09bnVsbCl0aHJvdyBzPSExLG5ldyBGdztpZihvLnB1c2goZCkpY29udGludWU7cz0hMTt9fWNhdGNoKGMpe28uZGVzdHJveShjKTt9YnJlYWt9fXJldHVybiBvfWpjLmV4cG9ydHM9V3c7fSk7dmFyIGRpPU0oKEoyLFpjKT0+e3YoKTttKCk7XygpO3ZhciBIZT1VdCgpLHtBcnJheVByb3RvdHlwZUluZGV4T2Y6JHcsTnVtYmVySXNJbnRlZ2VyOkh3LE51bWJlcklzTmFOOlZ3LE51bWJlclBhcnNlSW50Onp3LE9iamVjdERlZmluZVByb3BlcnRpZXM6JGMsT2JqZWN0S2V5czpLdyxPYmplY3RTZXRQcm90b3R5cGVPZjpIYyxQcm9taXNlOkd3LFNhZmVTZXQ6UXcsU3ltYm9sQXN5bmNJdGVyYXRvcjpZdyxTeW1ib2w6Snd9PWNlKCk7WmMuZXhwb3J0cz1GO0YuUmVhZGFibGVTdGF0ZT1ybzt2YXJ7RXZlbnRFbWl0dGVyOlh3fT0oaXIoKSxYKHJyKSkse1N0cmVhbTpxdCxwcmVwZW5kTGlzdGVuZXI6Wnd9PXRuKCkse0J1ZmZlcjpKc309KHllKCksWChfZSkpLHthZGRBYm9ydFNpZ25hbDplX309Y2koKSx0Xz1tdCgpLEg9SmUoKS5kZWJ1Z2xvZyhcInN0cmVhbVwiLHQ9PntIPXQ7fSkscl89ZGMoKSxEcj10cigpLHtnZXRIaWdoV2F0ZXJNYXJrOmlfLGdldERlZmF1bHRIaWdoV2F0ZXJNYXJrOm5ffT1zbigpLHthZ2dyZWdhdGVUd29FcnJvcnM6RmMsY29kZXM6e0VSUl9JTlZBTElEX0FSR19UWVBFOnNfLEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEOm9fLEVSUl9PVVRfT0ZfUkFOR0U6YV8sRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRjpsXyxFUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UOnVffX09U2UoKSx7dmFsaWRhdGVPYmplY3Q6Zl99PWZpKCksbHI9SncoXCJrUGF1c2VkXCIpLHtTdHJpbmdEZWNvZGVyOlZjfT0oVWMoKSxYKExjKSksY189WXMoKTtIYyhGLnByb3RvdHlwZSxxdC5wcm90b3R5cGUpO0hjKEYscXQpO3ZhciBYcz0oKT0+e30se2Vycm9yT3JEZXN0cm95OnFyfT1EcjtmdW5jdGlvbiBybyh0LGUscil7dHlwZW9mIHIhPVwiYm9vbGVhblwiJiYocj1lIGluc3RhbmNlb2YgbnQoKSksdGhpcy5vYmplY3RNb2RlPSEhKHQmJnQub2JqZWN0TW9kZSksciYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhKHQmJnQucmVhZGFibGVPYmplY3RNb2RlKSksdGhpcy5oaWdoV2F0ZXJNYXJrPXQ/aV8odGhpcyx0LFwicmVhZGFibGVIaWdoV2F0ZXJNYXJrXCIscik6bl8oITEpLHRoaXMuYnVmZmVyPW5ldyByXyx0aGlzLmxlbmd0aD0wLHRoaXMucGlwZXM9W10sdGhpcy5mbG93aW5nPW51bGwsdGhpcy5lbmRlZD0hMSx0aGlzLmVuZEVtaXR0ZWQ9ITEsdGhpcy5yZWFkaW5nPSExLHRoaXMuY29uc3RydWN0ZWQ9ITAsdGhpcy5zeW5jPSEwLHRoaXMubmVlZFJlYWRhYmxlPSExLHRoaXMuZW1pdHRlZFJlYWRhYmxlPSExLHRoaXMucmVhZGFibGVMaXN0ZW5pbmc9ITEsdGhpcy5yZXN1bWVTY2hlZHVsZWQ9ITEsdGhpc1tscl09bnVsbCx0aGlzLmVycm9yRW1pdHRlZD0hMSx0aGlzLmVtaXRDbG9zZT0hdHx8dC5lbWl0Q2xvc2UhPT0hMSx0aGlzLmF1dG9EZXN0cm95PSF0fHx0LmF1dG9EZXN0cm95IT09ITEsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5lcnJvcmVkPW51bGwsdGhpcy5jbG9zZWQ9ITEsdGhpcy5jbG9zZUVtaXR0ZWQ9ITEsdGhpcy5kZWZhdWx0RW5jb2Rpbmc9dCYmdC5kZWZhdWx0RW5jb2Rpbmd8fFwidXRmOFwiLHRoaXMuYXdhaXREcmFpbldyaXRlcnM9bnVsbCx0aGlzLm11bHRpQXdhaXREcmFpbj0hMSx0aGlzLnJlYWRpbmdNb3JlPSExLHRoaXMuZGF0YUVtaXR0ZWQ9ITEsdGhpcy5kZWNvZGVyPW51bGwsdGhpcy5lbmNvZGluZz1udWxsLHQmJnQuZW5jb2RpbmcmJih0aGlzLmRlY29kZXI9bmV3IFZjKHQuZW5jb2RpbmcpLHRoaXMuZW5jb2Rpbmc9dC5lbmNvZGluZyk7fWZ1bmN0aW9uIEYodCl7aWYoISh0aGlzIGluc3RhbmNlb2YgRikpcmV0dXJuIG5ldyBGKHQpO2xldCBlPXRoaXMgaW5zdGFuY2VvZiBudCgpO3RoaXMuX3JlYWRhYmxlU3RhdGU9bmV3IHJvKHQsdGhpcyxlKSx0JiYodHlwZW9mIHQucmVhZD09XCJmdW5jdGlvblwiJiYodGhpcy5fcmVhZD10LnJlYWQpLHR5cGVvZiB0LmRlc3Ryb3k9PVwiZnVuY3Rpb25cIiYmKHRoaXMuX2Rlc3Ryb3k9dC5kZXN0cm95KSx0eXBlb2YgdC5jb25zdHJ1Y3Q9PVwiZnVuY3Rpb25cIiYmKHRoaXMuX2NvbnN0cnVjdD10LmNvbnN0cnVjdCksdC5zaWduYWwmJiFlJiZlXyh0LnNpZ25hbCx0aGlzKSkscXQuY2FsbCh0aGlzLHQpLERyLmNvbnN0cnVjdCh0aGlzLCgpPT57dGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGUmJmZuKHRoaXMsdGhpcy5fcmVhZGFibGVTdGF0ZSk7fSk7fUYucHJvdG90eXBlLmRlc3Ryb3k9RHIuZGVzdHJveTtGLnByb3RvdHlwZS5fdW5kZXN0cm95PURyLnVuZGVzdHJveTtGLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbih0LGUpe2UodCk7fTtGLnByb3RvdHlwZVtYdy5jYXB0dXJlUmVqZWN0aW9uU3ltYm9sXT1mdW5jdGlvbih0KXt0aGlzLmRlc3Ryb3kodCk7fTtGLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHpjKHRoaXMsdCxlLCExKX07Ri5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbih0LGUpe3JldHVybiB6Yyh0aGlzLHQsZSwhMCl9O2Z1bmN0aW9uIHpjKHQsZSxyLGkpe0goXCJyZWFkYWJsZUFkZENodW5rXCIsZSk7bGV0IG49dC5fcmVhZGFibGVTdGF0ZSxvO2lmKG4ub2JqZWN0TW9kZXx8KHR5cGVvZiBlPT1cInN0cmluZ1wiPyhyPXJ8fG4uZGVmYXVsdEVuY29kaW5nLG4uZW5jb2RpbmchPT1yJiYoaSYmbi5lbmNvZGluZz9lPUpzLmZyb20oZSxyKS50b1N0cmluZyhuLmVuY29kaW5nKTooZT1Kcy5mcm9tKGUscikscj1cIlwiKSkpOmUgaW5zdGFuY2VvZiBKcz9yPVwiXCI6cXQuX2lzVWludDhBcnJheShlKT8oZT1xdC5fdWludDhBcnJheVRvQnVmZmVyKGUpLHI9XCJcIik6ZSE9bnVsbCYmKG89bmV3IHNfKFwiY2h1bmtcIixbXCJzdHJpbmdcIixcIkJ1ZmZlclwiLFwiVWludDhBcnJheVwiXSxlKSkpLG8pcXIodCxvKTtlbHNlIGlmKGU9PT1udWxsKW4ucmVhZGluZz0hMSxwXyh0LG4pO2Vsc2UgaWYobi5vYmplY3RNb2RlfHxlJiZlLmxlbmd0aD4wKWlmKGkpaWYobi5lbmRFbWl0dGVkKXFyKHQsbmV3IHVfKTtlbHNlIHtpZihuLmRlc3Ryb3llZHx8bi5lcnJvcmVkKXJldHVybiAhMTtacyh0LG4sZSwhMCk7fWVsc2UgaWYobi5lbmRlZClxcih0LG5ldyBsXyk7ZWxzZSB7aWYobi5kZXN0cm95ZWR8fG4uZXJyb3JlZClyZXR1cm4gITE7bi5yZWFkaW5nPSExLG4uZGVjb2RlciYmIXI/KGU9bi5kZWNvZGVyLndyaXRlKGUpLG4ub2JqZWN0TW9kZXx8ZS5sZW5ndGghPT0wP1pzKHQsbixlLCExKTpmbih0LG4pKTpacyh0LG4sZSwhMSk7fWVsc2UgaXx8KG4ucmVhZGluZz0hMSxmbih0LG4pKTtyZXR1cm4gIW4uZW5kZWQmJihuLmxlbmd0aDxuLmhpZ2hXYXRlck1hcmt8fG4ubGVuZ3RoPT09MCl9ZnVuY3Rpb24gWnModCxlLHIsaSl7ZS5mbG93aW5nJiZlLmxlbmd0aD09PTAmJiFlLnN5bmMmJnQubGlzdGVuZXJDb3VudChcImRhdGFcIik+MD8oZS5tdWx0aUF3YWl0RHJhaW4/ZS5hd2FpdERyYWluV3JpdGVycy5jbGVhcigpOmUuYXdhaXREcmFpbldyaXRlcnM9bnVsbCxlLmRhdGFFbWl0dGVkPSEwLHQuZW1pdChcImRhdGFcIixyKSk6KGUubGVuZ3RoKz1lLm9iamVjdE1vZGU/MTpyLmxlbmd0aCxpP2UuYnVmZmVyLnVuc2hpZnQocik6ZS5idWZmZXIucHVzaChyKSxlLm5lZWRSZWFkYWJsZSYmY24odCkpLGZuKHQsZSk7fUYucHJvdG90eXBlLmlzUGF1c2VkPWZ1bmN0aW9uKCl7bGV0IHQ9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gdFtscl09PT0hMHx8dC5mbG93aW5nPT09ITF9O0YucHJvdG90eXBlLnNldEVuY29kaW5nPWZ1bmN0aW9uKHQpe2xldCBlPW5ldyBWYyh0KTt0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXI9ZSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nPXRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlci5lbmNvZGluZztsZXQgcj10aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlcixpPVwiXCI7Zm9yKGxldCBuIG9mIHIpaSs9ZS53cml0ZShuKTtyZXR1cm4gci5jbGVhcigpLGkhPT1cIlwiJiZyLnB1c2goaSksdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGg9aS5sZW5ndGgsdGhpc307dmFyIGhfPTEwNzM3NDE4MjQ7ZnVuY3Rpb24gZF8odCl7aWYodD5oXyl0aHJvdyBuZXcgYV8oXCJzaXplXCIsXCI8PSAxR2lCXCIsdCk7cmV0dXJuIHQtLSx0fD10Pj4+MSx0fD10Pj4+Mix0fD10Pj4+NCx0fD10Pj4+OCx0fD10Pj4+MTYsdCsrLHR9ZnVuY3Rpb24gV2ModCxlKXtyZXR1cm4gdDw9MHx8ZS5sZW5ndGg9PT0wJiZlLmVuZGVkPzA6ZS5vYmplY3RNb2RlPzE6VncodCk/ZS5mbG93aW5nJiZlLmxlbmd0aD9lLmJ1ZmZlci5maXJzdCgpLmxlbmd0aDplLmxlbmd0aDp0PD1lLmxlbmd0aD90OmUuZW5kZWQ/ZS5sZW5ndGg6MH1GLnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKHQpe0goXCJyZWFkXCIsdCksdD09PXZvaWQgMD90PU5hTjpIdyh0KXx8KHQ9encodCwxMCkpO2xldCBlPXRoaXMuX3JlYWRhYmxlU3RhdGUscj10O2lmKHQ+ZS5oaWdoV2F0ZXJNYXJrJiYoZS5oaWdoV2F0ZXJNYXJrPWRfKHQpKSx0IT09MCYmKGUuZW1pdHRlZFJlYWRhYmxlPSExKSx0PT09MCYmZS5uZWVkUmVhZGFibGUmJigoZS5oaWdoV2F0ZXJNYXJrIT09MD9lLmxlbmd0aD49ZS5oaWdoV2F0ZXJNYXJrOmUubGVuZ3RoPjApfHxlLmVuZGVkKSlyZXR1cm4gSChcInJlYWQ6IGVtaXRSZWFkYWJsZVwiLGUubGVuZ3RoLGUuZW5kZWQpLGUubGVuZ3RoPT09MCYmZS5lbmRlZD9lbyh0aGlzKTpjbih0aGlzKSxudWxsO2lmKHQ9V2ModCxlKSx0PT09MCYmZS5lbmRlZClyZXR1cm4gZS5sZW5ndGg9PT0wJiZlbyh0aGlzKSxudWxsO2xldCBpPWUubmVlZFJlYWRhYmxlO2lmKEgoXCJuZWVkIHJlYWRhYmxlXCIsaSksKGUubGVuZ3RoPT09MHx8ZS5sZW5ndGgtdDxlLmhpZ2hXYXRlck1hcmspJiYoaT0hMCxIKFwibGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmtcIixpKSksZS5lbmRlZHx8ZS5yZWFkaW5nfHxlLmRlc3Ryb3llZHx8ZS5lcnJvcmVkfHwhZS5jb25zdHJ1Y3RlZClpPSExLEgoXCJyZWFkaW5nLCBlbmRlZCBvciBjb25zdHJ1Y3RpbmdcIixpKTtlbHNlIGlmKGkpe0goXCJkbyByZWFkXCIpLGUucmVhZGluZz0hMCxlLnN5bmM9ITAsZS5sZW5ndGg9PT0wJiYoZS5uZWVkUmVhZGFibGU9ITApO3RyeXt0aGlzLl9yZWFkKGUuaGlnaFdhdGVyTWFyayk7fWNhdGNoKG8pe3FyKHRoaXMsbyk7fWUuc3luYz0hMSxlLnJlYWRpbmd8fCh0PVdjKHIsZSkpO31sZXQgbjtyZXR1cm4gdD4wP249SmModCxlKTpuPW51bGwsbj09PW51bGw/KGUubmVlZFJlYWRhYmxlPWUubGVuZ3RoPD1lLmhpZ2hXYXRlck1hcmssdD0wKTooZS5sZW5ndGgtPXQsZS5tdWx0aUF3YWl0RHJhaW4/ZS5hd2FpdERyYWluV3JpdGVycy5jbGVhcigpOmUuYXdhaXREcmFpbldyaXRlcnM9bnVsbCksZS5sZW5ndGg9PT0wJiYoZS5lbmRlZHx8KGUubmVlZFJlYWRhYmxlPSEwKSxyIT09dCYmZS5lbmRlZCYmZW8odGhpcykpLG4hPT1udWxsJiYhZS5lcnJvckVtaXR0ZWQmJiFlLmNsb3NlRW1pdHRlZCYmKGUuZGF0YUVtaXR0ZWQ9ITAsdGhpcy5lbWl0KFwiZGF0YVwiLG4pKSxufTtmdW5jdGlvbiBwXyh0LGUpe2lmKEgoXCJvbkVvZkNodW5rXCIpLCFlLmVuZGVkKXtpZihlLmRlY29kZXIpe2xldCByPWUuZGVjb2Rlci5lbmQoKTtyJiZyLmxlbmd0aCYmKGUuYnVmZmVyLnB1c2gociksZS5sZW5ndGgrPWUub2JqZWN0TW9kZT8xOnIubGVuZ3RoKTt9ZS5lbmRlZD0hMCxlLnN5bmM/Y24odCk6KGUubmVlZFJlYWRhYmxlPSExLGUuZW1pdHRlZFJlYWRhYmxlPSEwLEtjKHQpKTt9fWZ1bmN0aW9uIGNuKHQpe2xldCBlPXQuX3JlYWRhYmxlU3RhdGU7SChcImVtaXRSZWFkYWJsZVwiLGUubmVlZFJlYWRhYmxlLGUuZW1pdHRlZFJlYWRhYmxlKSxlLm5lZWRSZWFkYWJsZT0hMSxlLmVtaXR0ZWRSZWFkYWJsZXx8KEgoXCJlbWl0UmVhZGFibGVcIixlLmZsb3dpbmcpLGUuZW1pdHRlZFJlYWRhYmxlPSEwLEhlLm5leHRUaWNrKEtjLHQpKTt9ZnVuY3Rpb24gS2ModCl7bGV0IGU9dC5fcmVhZGFibGVTdGF0ZTtIKFwiZW1pdFJlYWRhYmxlX1wiLGUuZGVzdHJveWVkLGUubGVuZ3RoLGUuZW5kZWQpLCFlLmRlc3Ryb3llZCYmIWUuZXJyb3JlZCYmKGUubGVuZ3RofHxlLmVuZGVkKSYmKHQuZW1pdChcInJlYWRhYmxlXCIpLGUuZW1pdHRlZFJlYWRhYmxlPSExKSxlLm5lZWRSZWFkYWJsZT0hZS5mbG93aW5nJiYhZS5lbmRlZCYmZS5sZW5ndGg8PWUuaGlnaFdhdGVyTWFyayxRYyh0KTt9ZnVuY3Rpb24gZm4odCxlKXshZS5yZWFkaW5nTW9yZSYmZS5jb25zdHJ1Y3RlZCYmKGUucmVhZGluZ01vcmU9ITAsSGUubmV4dFRpY2soZ18sdCxlKSk7fWZ1bmN0aW9uIGdfKHQsZSl7Zm9yKDshZS5yZWFkaW5nJiYhZS5lbmRlZCYmKGUubGVuZ3RoPGUuaGlnaFdhdGVyTWFya3x8ZS5mbG93aW5nJiZlLmxlbmd0aD09PTApOyl7bGV0IHI9ZS5sZW5ndGg7aWYoSChcIm1heWJlUmVhZE1vcmUgcmVhZCAwXCIpLHQucmVhZCgwKSxyPT09ZS5sZW5ndGgpYnJlYWt9ZS5yZWFkaW5nTW9yZT0hMTt9Ri5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IG9fKFwiX3JlYWQoKVwiKX07Ri5wcm90b3R5cGUucGlwZT1mdW5jdGlvbih0LGUpe2xldCByPXRoaXMsaT10aGlzLl9yZWFkYWJsZVN0YXRlO2kucGlwZXMubGVuZ3RoPT09MSYmKGkubXVsdGlBd2FpdERyYWlufHwoaS5tdWx0aUF3YWl0RHJhaW49ITAsaS5hd2FpdERyYWluV3JpdGVycz1uZXcgUXcoaS5hd2FpdERyYWluV3JpdGVycz9baS5hd2FpdERyYWluV3JpdGVyc106W10pKSksaS5waXBlcy5wdXNoKHQpLEgoXCJwaXBlIGNvdW50PSVkIG9wdHM9JWpcIixpLnBpcGVzLmxlbmd0aCxlKTtsZXQgbz0oIWV8fGUuZW5kIT09ITEpJiZ0IT09SGUuc3Rkb3V0JiZ0IT09SGUuc3RkZXJyP2E6UztpLmVuZEVtaXR0ZWQ/SGUubmV4dFRpY2sobyk6ci5vbmNlKFwiZW5kXCIsbyksdC5vbihcInVucGlwZVwiLHMpO2Z1bmN0aW9uIHMoSSxDKXtIKFwib251bnBpcGVcIiksST09PXImJkMmJkMuaGFzVW5waXBlZD09PSExJiYoQy5oYXNVbnBpcGVkPSEwLGgoKSk7fWZ1bmN0aW9uIGEoKXtIKFwib25lbmRcIiksdC5lbmQoKTt9bGV0IHUsYz0hMTtmdW5jdGlvbiBoKCl7SChcImNsZWFudXBcIiksdC5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsdyksdC5yZW1vdmVMaXN0ZW5lcihcImZpbmlzaFwiLEUpLHUmJnQucmVtb3ZlTGlzdGVuZXIoXCJkcmFpblwiLHUpLHQucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLHkpLHQucmVtb3ZlTGlzdGVuZXIoXCJ1bnBpcGVcIixzKSxyLnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIsYSksci5yZW1vdmVMaXN0ZW5lcihcImVuZFwiLFMpLHIucmVtb3ZlTGlzdGVuZXIoXCJkYXRhXCIsZyksYz0hMCx1JiZpLmF3YWl0RHJhaW5Xcml0ZXJzJiYoIXQuX3dyaXRhYmxlU3RhdGV8fHQuX3dyaXRhYmxlU3RhdGUubmVlZERyYWluKSYmdSgpO31mdW5jdGlvbiBkKCl7Y3x8KGkucGlwZXMubGVuZ3RoPT09MSYmaS5waXBlc1swXT09PXQ/KEgoXCJmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2VcIiwwKSxpLmF3YWl0RHJhaW5Xcml0ZXJzPXQsaS5tdWx0aUF3YWl0RHJhaW49ITEpOmkucGlwZXMubGVuZ3RoPjEmJmkucGlwZXMuaW5jbHVkZXModCkmJihIKFwiZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlXCIsaS5hd2FpdERyYWluV3JpdGVycy5zaXplKSxpLmF3YWl0RHJhaW5Xcml0ZXJzLmFkZCh0KSksci5wYXVzZSgpKSx1fHwodT15XyhyLHQpLHQub24oXCJkcmFpblwiLHUpKTt9ci5vbihcImRhdGFcIixnKTtmdW5jdGlvbiBnKEkpe0goXCJvbmRhdGFcIik7bGV0IEM9dC53cml0ZShJKTtIKFwiZGVzdC53cml0ZVwiLEMpLEM9PT0hMSYmZCgpO31mdW5jdGlvbiB5KEkpe2lmKEgoXCJvbmVycm9yXCIsSSksUygpLHQucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLHkpLHQubGlzdGVuZXJDb3VudChcImVycm9yXCIpPT09MCl7bGV0IEM9dC5fd3JpdGFibGVTdGF0ZXx8dC5fcmVhZGFibGVTdGF0ZTtDJiYhQy5lcnJvckVtaXR0ZWQ/cXIodCxJKTp0LmVtaXQoXCJlcnJvclwiLEkpO319WncodCxcImVycm9yXCIseSk7ZnVuY3Rpb24gdygpe3QucmVtb3ZlTGlzdGVuZXIoXCJmaW5pc2hcIixFKSxTKCk7fXQub25jZShcImNsb3NlXCIsdyk7ZnVuY3Rpb24gRSgpe0goXCJvbmZpbmlzaFwiKSx0LnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIix3KSxTKCk7fXQub25jZShcImZpbmlzaFwiLEUpO2Z1bmN0aW9uIFMoKXtIKFwidW5waXBlXCIpLHIudW5waXBlKHQpO31yZXR1cm4gdC5lbWl0KFwicGlwZVwiLHIpLHQud3JpdGFibGVOZWVkRHJhaW49PT0hMD9pLmZsb3dpbmcmJmQoKTppLmZsb3dpbmd8fChIKFwicGlwZSByZXN1bWVcIiksci5yZXN1bWUoKSksdH07ZnVuY3Rpb24geV8odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtsZXQgaT10Ll9yZWFkYWJsZVN0YXRlO2kuYXdhaXREcmFpbldyaXRlcnM9PT1lPyhIKFwicGlwZU9uRHJhaW5cIiwxKSxpLmF3YWl0RHJhaW5Xcml0ZXJzPW51bGwpOmkubXVsdGlBd2FpdERyYWluJiYoSChcInBpcGVPbkRyYWluXCIsaS5hd2FpdERyYWluV3JpdGVycy5zaXplKSxpLmF3YWl0RHJhaW5Xcml0ZXJzLmRlbGV0ZShlKSksKCFpLmF3YWl0RHJhaW5Xcml0ZXJzfHxpLmF3YWl0RHJhaW5Xcml0ZXJzLnNpemU9PT0wKSYmdC5saXN0ZW5lckNvdW50KFwiZGF0YVwiKSYmdC5yZXN1bWUoKTt9fUYucHJvdG90eXBlLnVucGlwZT1mdW5jdGlvbih0KXtsZXQgZT10aGlzLl9yZWFkYWJsZVN0YXRlLHI9e2hhc1VucGlwZWQ6ITF9O2lmKGUucGlwZXMubGVuZ3RoPT09MClyZXR1cm4gdGhpcztpZighdCl7bGV0IG49ZS5waXBlcztlLnBpcGVzPVtdLHRoaXMucGF1c2UoKTtmb3IobGV0IG89MDtvPG4ubGVuZ3RoO28rKyluW29dLmVtaXQoXCJ1bnBpcGVcIix0aGlzLHtoYXNVbnBpcGVkOiExfSk7cmV0dXJuIHRoaXN9bGV0IGk9JHcoZS5waXBlcyx0KTtyZXR1cm4gaT09PS0xP3RoaXM6KGUucGlwZXMuc3BsaWNlKGksMSksZS5waXBlcy5sZW5ndGg9PT0wJiZ0aGlzLnBhdXNlKCksdC5lbWl0KFwidW5waXBlXCIsdGhpcyxyKSx0aGlzKX07Ri5wcm90b3R5cGUub249ZnVuY3Rpb24odCxlKXtsZXQgcj1xdC5wcm90b3R5cGUub24uY2FsbCh0aGlzLHQsZSksaT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiB0PT09XCJkYXRhXCI/KGkucmVhZGFibGVMaXN0ZW5pbmc9dGhpcy5saXN0ZW5lckNvdW50KFwicmVhZGFibGVcIik+MCxpLmZsb3dpbmchPT0hMSYmdGhpcy5yZXN1bWUoKSk6dD09PVwicmVhZGFibGVcIiYmIWkuZW5kRW1pdHRlZCYmIWkucmVhZGFibGVMaXN0ZW5pbmcmJihpLnJlYWRhYmxlTGlzdGVuaW5nPWkubmVlZFJlYWRhYmxlPSEwLGkuZmxvd2luZz0hMSxpLmVtaXR0ZWRSZWFkYWJsZT0hMSxIKFwib24gcmVhZGFibGVcIixpLmxlbmd0aCxpLnJlYWRpbmcpLGkubGVuZ3RoP2NuKHRoaXMpOmkucmVhZGluZ3x8SGUubmV4dFRpY2soYl8sdGhpcykpLHJ9O0YucHJvdG90eXBlLmFkZExpc3RlbmVyPUYucHJvdG90eXBlLm9uO0YucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKHQsZSl7bGV0IHI9cXQucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLmNhbGwodGhpcyx0LGUpO3JldHVybiB0PT09XCJyZWFkYWJsZVwiJiZIZS5uZXh0VGljayhHYyx0aGlzKSxyfTtGLnByb3RvdHlwZS5vZmY9Ri5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI7Ri5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKHQpe2xldCBlPXF0LnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiAodD09PVwicmVhZGFibGVcInx8dD09PXZvaWQgMCkmJkhlLm5leHRUaWNrKEdjLHRoaXMpLGV9O2Z1bmN0aW9uIEdjKHQpe2xldCBlPXQuX3JlYWRhYmxlU3RhdGU7ZS5yZWFkYWJsZUxpc3RlbmluZz10Lmxpc3RlbmVyQ291bnQoXCJyZWFkYWJsZVwiKT4wLGUucmVzdW1lU2NoZWR1bGVkJiZlW2xyXT09PSExP2UuZmxvd2luZz0hMDp0Lmxpc3RlbmVyQ291bnQoXCJkYXRhXCIpPjA/dC5yZXN1bWUoKTplLnJlYWRhYmxlTGlzdGVuaW5nfHwoZS5mbG93aW5nPW51bGwpO31mdW5jdGlvbiBiXyh0KXtIKFwicmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwXCIpLHQucmVhZCgwKTt9Ri5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7bGV0IHQ9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gdC5mbG93aW5nfHwoSChcInJlc3VtZVwiKSx0LmZsb3dpbmc9IXQucmVhZGFibGVMaXN0ZW5pbmcsd18odGhpcyx0KSksdFtscl09ITEsdGhpc307ZnVuY3Rpb24gd18odCxlKXtlLnJlc3VtZVNjaGVkdWxlZHx8KGUucmVzdW1lU2NoZWR1bGVkPSEwLEhlLm5leHRUaWNrKF9fLHQsZSkpO31mdW5jdGlvbiBfXyh0LGUpe0goXCJyZXN1bWVcIixlLnJlYWRpbmcpLGUucmVhZGluZ3x8dC5yZWFkKDApLGUucmVzdW1lU2NoZWR1bGVkPSExLHQuZW1pdChcInJlc3VtZVwiKSxRYyh0KSxlLmZsb3dpbmcmJiFlLnJlYWRpbmcmJnQucmVhZCgwKTt9Ri5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4gSChcImNhbGwgcGF1c2UgZmxvd2luZz0lalwiLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyksdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nIT09ITEmJihIKFwicGF1c2VcIiksdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPSExLHRoaXMuZW1pdChcInBhdXNlXCIpKSx0aGlzLl9yZWFkYWJsZVN0YXRlW2xyXT0hMCx0aGlzfTtmdW5jdGlvbiBRYyh0KXtsZXQgZT10Ll9yZWFkYWJsZVN0YXRlO2ZvcihIKFwiZmxvd1wiLGUuZmxvd2luZyk7ZS5mbG93aW5nJiZ0LnJlYWQoKSE9PW51bGw7KTt9Ri5wcm90b3R5cGUud3JhcD1mdW5jdGlvbih0KXtsZXQgZT0hMTt0Lm9uKFwiZGF0YVwiLGk9PnshdGhpcy5wdXNoKGkpJiZ0LnBhdXNlJiYoZT0hMCx0LnBhdXNlKCkpO30pLHQub24oXCJlbmRcIiwoKT0+e3RoaXMucHVzaChudWxsKTt9KSx0Lm9uKFwiZXJyb3JcIixpPT57cXIodGhpcyxpKTt9KSx0Lm9uKFwiY2xvc2VcIiwoKT0+e3RoaXMuZGVzdHJveSgpO30pLHQub24oXCJkZXN0cm95XCIsKCk9Pnt0aGlzLmRlc3Ryb3koKTt9KSx0aGlzLl9yZWFkPSgpPT57ZSYmdC5yZXN1bWUmJihlPSExLHQucmVzdW1lKCkpO307bGV0IHI9S3codCk7Zm9yKGxldCBpPTE7aTxyLmxlbmd0aDtpKyspe2xldCBuPXJbaV07dGhpc1tuXT09PXZvaWQgMCYmdHlwZW9mIHRbbl09PVwiZnVuY3Rpb25cIiYmKHRoaXNbbl09dFtuXS5iaW5kKHQpKTt9cmV0dXJuIHRoaXN9O0YucHJvdG90eXBlW1l3XT1mdW5jdGlvbigpe3JldHVybiBZYyh0aGlzKX07Ri5wcm90b3R5cGUuaXRlcmF0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHQhPT12b2lkIDAmJmZfKHQsXCJvcHRpb25zXCIpLFljKHRoaXMsdCl9O2Z1bmN0aW9uIFljKHQsZSl7dHlwZW9mIHQucmVhZCE9XCJmdW5jdGlvblwiJiYodD1GLndyYXAodCx7b2JqZWN0TW9kZTohMH0pKTtsZXQgcj1tXyh0LGUpO3JldHVybiByLnN0cmVhbT10LHJ9YXN5bmMgZnVuY3Rpb24qbV8odCxlKXtsZXQgcj1YcztmdW5jdGlvbiBpKHMpe3RoaXM9PT10PyhyKCkscj1Ycyk6cj1zO310Lm9uKFwicmVhZGFibGVcIixpKTtsZXQgbixvPXRfKHQse3dyaXRhYmxlOiExfSxzPT57bj1zP0ZjKG4scyk6bnVsbCxyKCkscj1Yczt9KTt0cnl7Zm9yKDs7KXtsZXQgcz10LmRlc3Ryb3llZD9udWxsOnQucmVhZCgpO2lmKHMhPT1udWxsKXlpZWxkIHM7ZWxzZSB7aWYobil0aHJvdyBuO2lmKG49PT1udWxsKXJldHVybjthd2FpdCBuZXcgR3coaSk7fX19Y2F0Y2gocyl7dGhyb3cgbj1GYyhuLHMpLG59ZmluYWxseXsobnx8ZT8uZGVzdHJveU9uUmV0dXJuIT09ITEpJiYobj09PXZvaWQgMHx8dC5fcmVhZGFibGVTdGF0ZS5hdXRvRGVzdHJveSk/RHIuZGVzdHJveWVyKHQsbnVsbCk6KHQub2ZmKFwicmVhZGFibGVcIixpKSxvKCkpO319JGMoRi5wcm90b3R5cGUse3JlYWRhYmxlOntfX3Byb3RvX186bnVsbCxnZXQoKXtsZXQgdD10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiAhIXQmJnQucmVhZGFibGUhPT0hMSYmIXQuZGVzdHJveWVkJiYhdC5lcnJvckVtaXR0ZWQmJiF0LmVuZEVtaXR0ZWR9LHNldCh0KXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkYWJsZT0hIXQpO319LHJlYWRhYmxlRGlkUmVhZDp7X19wcm90b19fOm51bGwsZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5kYXRhRW1pdHRlZH19LHJlYWRhYmxlQWJvcnRlZDp7X19wcm90b19fOm51bGwsZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gISEodGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkYWJsZSE9PSExJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR8fHRoaXMuX3JlYWRhYmxlU3RhdGUuZXJyb3JlZCkmJiF0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQpfX0scmVhZGFibGVIaWdoV2F0ZXJNYXJrOntfX3Byb3RvX186bnVsbCxlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSxyZWFkYWJsZUJ1ZmZlcjp7X19wcm90b19fOm51bGwsZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXJ9fSxyZWFkYWJsZUZsb3dpbmc6e19fcHJvdG9fXzpudWxsLGVudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZ30sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9dCk7fX0scmVhZGFibGVMZW5ndGg6e19fcHJvdG9fXzpudWxsLGVudW1lcmFibGU6ITEsZ2V0KCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RofX0scmVhZGFibGVPYmplY3RNb2RlOntfX3Byb3RvX186bnVsbCxlbnVtZXJhYmxlOiExLGdldCgpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlP3RoaXMuX3JlYWRhYmxlU3RhdGUub2JqZWN0TW9kZTohMX19LHJlYWRhYmxlRW5jb2Rpbmc6e19fcHJvdG9fXzpudWxsLGVudW1lcmFibGU6ITEsZ2V0KCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGU/dGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZzpudWxsfX0sZXJyb3JlZDp7X19wcm90b19fOm51bGwsZW51bWVyYWJsZTohMSxnZXQoKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZT90aGlzLl9yZWFkYWJsZVN0YXRlLmVycm9yZWQ6bnVsbH19LGNsb3NlZDp7X19wcm90b19fOm51bGwsZ2V0KCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGU/dGhpcy5fcmVhZGFibGVTdGF0ZS5jbG9zZWQ6ITF9fSxkZXN0cm95ZWQ6e19fcHJvdG9fXzpudWxsLGVudW1lcmFibGU6ITEsZ2V0KCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGU/dGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ6ITF9LHNldCh0KXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9dCk7fX0scmVhZGFibGVFbmRlZDp7X19wcm90b19fOm51bGwsZW51bWVyYWJsZTohMSxnZXQoKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZT90aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQ6ITF9fX0pOyRjKHJvLnByb3RvdHlwZSx7cGlwZXNDb3VudDp7X19wcm90b19fOm51bGwsZ2V0KCl7cmV0dXJuIHRoaXMucGlwZXMubGVuZ3RofX0scGF1c2VkOntfX3Byb3RvX186bnVsbCxnZXQoKXtyZXR1cm4gdGhpc1tscl0hPT0hMX0sc2V0KHQpe3RoaXNbbHJdPSEhdDt9fX0pO0YuX2Zyb21MaXN0PUpjO2Z1bmN0aW9uIEpjKHQsZSl7aWYoZS5sZW5ndGg9PT0wKXJldHVybiBudWxsO2xldCByO3JldHVybiBlLm9iamVjdE1vZGU/cj1lLmJ1ZmZlci5zaGlmdCgpOiF0fHx0Pj1lLmxlbmd0aD8oZS5kZWNvZGVyP3I9ZS5idWZmZXIuam9pbihcIlwiKTplLmJ1ZmZlci5sZW5ndGg9PT0xP3I9ZS5idWZmZXIuZmlyc3QoKTpyPWUuYnVmZmVyLmNvbmNhdChlLmxlbmd0aCksZS5idWZmZXIuY2xlYXIoKSk6cj1lLmJ1ZmZlci5jb25zdW1lKHQsZS5kZWNvZGVyKSxyfWZ1bmN0aW9uIGVvKHQpe2xldCBlPXQuX3JlYWRhYmxlU3RhdGU7SChcImVuZFJlYWRhYmxlXCIsZS5lbmRFbWl0dGVkKSxlLmVuZEVtaXR0ZWR8fChlLmVuZGVkPSEwLEhlLm5leHRUaWNrKHZfLGUsdCkpO31mdW5jdGlvbiB2Xyh0LGUpe2lmKEgoXCJlbmRSZWFkYWJsZU5UXCIsdC5lbmRFbWl0dGVkLHQubGVuZ3RoKSwhdC5lcnJvcmVkJiYhdC5jbG9zZUVtaXR0ZWQmJiF0LmVuZEVtaXR0ZWQmJnQubGVuZ3RoPT09MCl7aWYodC5lbmRFbWl0dGVkPSEwLGUuZW1pdChcImVuZFwiKSxlLndyaXRhYmxlJiZlLmFsbG93SGFsZk9wZW49PT0hMSlIZS5uZXh0VGljayhFXyxlKTtlbHNlIGlmKHQuYXV0b0Rlc3Ryb3kpe2xldCByPWUuX3dyaXRhYmxlU3RhdGU7KCFyfHxyLmF1dG9EZXN0cm95JiYoci5maW5pc2hlZHx8ci53cml0YWJsZT09PSExKSkmJmUuZGVzdHJveSgpO319fWZ1bmN0aW9uIEVfKHQpe3Qud3JpdGFibGUmJiF0LndyaXRhYmxlRW5kZWQmJiF0LmRlc3Ryb3llZCYmdC5lbmQoKTt9Ri5mcm9tPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGNfKEYsdCxlKX07dmFyIHRvO2Z1bmN0aW9uIFhjKCl7cmV0dXJuIHRvPT09dm9pZCAwJiYodG89e30pLHRvfUYuZnJvbVdlYj1mdW5jdGlvbih0LGUpe3JldHVybiBYYygpLm5ld1N0cmVhbVJlYWRhYmxlRnJvbVJlYWRhYmxlU3RyZWFtKHQsZSl9O0YudG9XZWI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gWGMoKS5uZXdSZWFkYWJsZVN0cmVhbUZyb21TdHJlYW1SZWFkYWJsZSh0LGUpfTtGLndyYXA9ZnVuY3Rpb24odCxlKXt2YXIgcixpO3JldHVybiBuZXcgRih7b2JqZWN0TW9kZToocj0oaT10LnJlYWRhYmxlT2JqZWN0TW9kZSkhPT1udWxsJiZpIT09dm9pZCAwP2k6dC5vYmplY3RNb2RlKSE9PW51bGwmJnIhPT12b2lkIDA/cjohMCwuLi5lLGRlc3Ryb3kobixvKXtEci5kZXN0cm95ZXIodCxuKSxvKG4pO319KS53cmFwKHQpfTt9KTt2YXIgdW89TSgoYVIsY2gpPT57digpO20oKTtfKCk7dmFyIHVyPVV0KCkse0FycmF5UHJvdG90eXBlU2xpY2U6cmgsRXJyb3I6U18sRnVuY3Rpb25Qcm90b3R5cGVTeW1ib2xIYXNJbnN0YW5jZTppaCxPYmplY3REZWZpbmVQcm9wZXJ0eTpuaCxPYmplY3REZWZpbmVQcm9wZXJ0aWVzOkFfLE9iamVjdFNldFByb3RvdHlwZU9mOnNoLFN0cmluZ1Byb3RvdHlwZVRvTG93ZXJDYXNlOklfLFN5bWJvbDpUXyxTeW1ib2xIYXNJbnN0YW5jZTpSX309Y2UoKTtjaC5leHBvcnRzPWllO2llLldyaXRhYmxlU3RhdGU9eWk7dmFye0V2ZW50RW1pdHRlcjpDX309KGlyKCksWChycikpLHBpPXRuKCkuU3RyZWFtLHtCdWZmZXI6aG59PSh5ZSgpLFgoX2UpKSxnbj10cigpLHthZGRBYm9ydFNpZ25hbDpCX309Y2koKSx7Z2V0SGlnaFdhdGVyTWFyazpQXyxnZXREZWZhdWx0SGlnaFdhdGVyTWFyazpPX309c24oKSx7RVJSX0lOVkFMSURfQVJHX1RZUEU6a18sRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQ6eF8sRVJSX01VTFRJUExFX0NBTExCQUNLOm9oLEVSUl9TVFJFQU1fQ0FOTk9UX1BJUEU6TV8sRVJSX1NUUkVBTV9ERVNUUk9ZRUQ6Z2ksRVJSX1NUUkVBTV9BTFJFQURZX0ZJTklTSEVEOkxfLEVSUl9TVFJFQU1fTlVMTF9WQUxVRVM6VV8sRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQ6Tl8sRVJSX1VOS05PV05fRU5DT0RJTkc6YWh9PVNlKCkuY29kZXMse2Vycm9yT3JEZXN0cm95OmpyfT1nbjtzaChpZS5wcm90b3R5cGUscGkucHJvdG90eXBlKTtzaChpZSxwaSk7ZnVuY3Rpb24gc28oKXt9dmFyIEZyPVRfKFwia09uRmluaXNoZWRcIik7ZnVuY3Rpb24geWkodCxlLHIpe3R5cGVvZiByIT1cImJvb2xlYW5cIiYmKHI9ZSBpbnN0YW5jZW9mIG50KCkpLHRoaXMub2JqZWN0TW9kZT0hISh0JiZ0Lm9iamVjdE1vZGUpLHImJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhISh0JiZ0LndyaXRhYmxlT2JqZWN0TW9kZSkpLHRoaXMuaGlnaFdhdGVyTWFyaz10P1BfKHRoaXMsdCxcIndyaXRhYmxlSGlnaFdhdGVyTWFya1wiLHIpOk9fKCExKSx0aGlzLmZpbmFsQ2FsbGVkPSExLHRoaXMubmVlZERyYWluPSExLHRoaXMuZW5kaW5nPSExLHRoaXMuZW5kZWQ9ITEsdGhpcy5maW5pc2hlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMTtsZXQgaT0hISh0JiZ0LmRlY29kZVN0cmluZ3M9PT0hMSk7dGhpcy5kZWNvZGVTdHJpbmdzPSFpLHRoaXMuZGVmYXVsdEVuY29kaW5nPXQmJnQuZGVmYXVsdEVuY29kaW5nfHxcInV0ZjhcIix0aGlzLmxlbmd0aD0wLHRoaXMud3JpdGluZz0hMSx0aGlzLmNvcmtlZD0wLHRoaXMuc3luYz0hMCx0aGlzLmJ1ZmZlclByb2Nlc3Npbmc9ITEsdGhpcy5vbndyaXRlPURfLmJpbmQodm9pZCAwLGUpLHRoaXMud3JpdGVjYj1udWxsLHRoaXMud3JpdGVsZW49MCx0aGlzLmFmdGVyV3JpdGVUaWNrSW5mbz1udWxsLHBuKHRoaXMpLHRoaXMucGVuZGluZ2NiPTAsdGhpcy5jb25zdHJ1Y3RlZD0hMCx0aGlzLnByZWZpbmlzaGVkPSExLHRoaXMuZXJyb3JFbWl0dGVkPSExLHRoaXMuZW1pdENsb3NlPSF0fHx0LmVtaXRDbG9zZSE9PSExLHRoaXMuYXV0b0Rlc3Ryb3k9IXR8fHQuYXV0b0Rlc3Ryb3khPT0hMSx0aGlzLmVycm9yZWQ9bnVsbCx0aGlzLmNsb3NlZD0hMSx0aGlzLmNsb3NlRW1pdHRlZD0hMSx0aGlzW0ZyXT1bXTt9ZnVuY3Rpb24gcG4odCl7dC5idWZmZXJlZD1bXSx0LmJ1ZmZlcmVkSW5kZXg9MCx0LmFsbEJ1ZmZlcnM9ITAsdC5hbGxOb29wPSEwO315aS5wcm90b3R5cGUuZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHJoKHRoaXMuYnVmZmVyZWQsdGhpcy5idWZmZXJlZEluZGV4KX07bmgoeWkucHJvdG90eXBlLFwiYnVmZmVyZWRSZXF1ZXN0Q291bnRcIix7X19wcm90b19fOm51bGwsZ2V0KCl7cmV0dXJuIHRoaXMuYnVmZmVyZWQubGVuZ3RoLXRoaXMuYnVmZmVyZWRJbmRleH19KTtmdW5jdGlvbiBpZSh0KXtsZXQgZT10aGlzIGluc3RhbmNlb2YgbnQoKTtpZighZSYmIWloKGllLHRoaXMpKXJldHVybiBuZXcgaWUodCk7dGhpcy5fd3JpdGFibGVTdGF0ZT1uZXcgeWkodCx0aGlzLGUpLHQmJih0eXBlb2YgdC53cml0ZT09XCJmdW5jdGlvblwiJiYodGhpcy5fd3JpdGU9dC53cml0ZSksdHlwZW9mIHQud3JpdGV2PT1cImZ1bmN0aW9uXCImJih0aGlzLl93cml0ZXY9dC53cml0ZXYpLHR5cGVvZiB0LmRlc3Ryb3k9PVwiZnVuY3Rpb25cIiYmKHRoaXMuX2Rlc3Ryb3k9dC5kZXN0cm95KSx0eXBlb2YgdC5maW5hbD09XCJmdW5jdGlvblwiJiYodGhpcy5fZmluYWw9dC5maW5hbCksdHlwZW9mIHQuY29uc3RydWN0PT1cImZ1bmN0aW9uXCImJih0aGlzLl9jb25zdHJ1Y3Q9dC5jb25zdHJ1Y3QpLHQuc2lnbmFsJiZCXyh0LnNpZ25hbCx0aGlzKSkscGkuY2FsbCh0aGlzLHQpLGduLmNvbnN0cnVjdCh0aGlzLCgpPT57bGV0IHI9dGhpcy5fd3JpdGFibGVTdGF0ZTtyLndyaXRpbmd8fGFvKHRoaXMsciksbG8odGhpcyxyKTt9KTt9bmgoaWUsUl8se19fcHJvdG9fXzpudWxsLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBpaCh0aGlzLHQpPyEwOnRoaXMhPT1pZT8hMTp0JiZ0Ll93cml0YWJsZVN0YXRlIGluc3RhbmNlb2YgeWl9fSk7aWUucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oKXtqcih0aGlzLG5ldyBNXyk7fTtmdW5jdGlvbiBsaCh0LGUscixpKXtsZXQgbj10Ll93cml0YWJsZVN0YXRlO2lmKHR5cGVvZiByPT1cImZ1bmN0aW9uXCIpaT1yLHI9bi5kZWZhdWx0RW5jb2Rpbmc7ZWxzZSB7aWYoIXIpcj1uLmRlZmF1bHRFbmNvZGluZztlbHNlIGlmKHIhPT1cImJ1ZmZlclwiJiYhaG4uaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgYWgocik7dHlwZW9mIGkhPVwiZnVuY3Rpb25cIiYmKGk9c28pO31pZihlPT09bnVsbCl0aHJvdyBuZXcgVV87aWYoIW4ub2JqZWN0TW9kZSlpZih0eXBlb2YgZT09XCJzdHJpbmdcIiluLmRlY29kZVN0cmluZ3MhPT0hMSYmKGU9aG4uZnJvbShlLHIpLHI9XCJidWZmZXJcIik7ZWxzZSBpZihlIGluc3RhbmNlb2YgaG4pcj1cImJ1ZmZlclwiO2Vsc2UgaWYocGkuX2lzVWludDhBcnJheShlKSllPXBpLl91aW50OEFycmF5VG9CdWZmZXIoZSkscj1cImJ1ZmZlclwiO2Vsc2UgdGhyb3cgbmV3IGtfKFwiY2h1bmtcIixbXCJzdHJpbmdcIixcIkJ1ZmZlclwiLFwiVWludDhBcnJheVwiXSxlKTtsZXQgbztyZXR1cm4gbi5lbmRpbmc/bz1uZXcgTl86bi5kZXN0cm95ZWQmJihvPW5ldyBnaShcIndyaXRlXCIpKSxvPyh1ci5uZXh0VGljayhpLG8pLGpyKHQsbywhMCksbyk6KG4ucGVuZGluZ2NiKysscV8odCxuLGUscixpKSl9aWUucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbGgodGhpcyx0LGUscik9PT0hMH07aWUucHJvdG90eXBlLmNvcms9ZnVuY3Rpb24oKXt0aGlzLl93cml0YWJsZVN0YXRlLmNvcmtlZCsrO307aWUucHJvdG90eXBlLnVuY29yaz1mdW5jdGlvbigpe2xldCB0PXRoaXMuX3dyaXRhYmxlU3RhdGU7dC5jb3JrZWQmJih0LmNvcmtlZC0tLHQud3JpdGluZ3x8YW8odGhpcyx0KSk7fTtpZS5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5nPWZ1bmN0aW9uKGUpe2lmKHR5cGVvZiBlPT1cInN0cmluZ1wiJiYoZT1JXyhlKSksIWhuLmlzRW5jb2RpbmcoZSkpdGhyb3cgbmV3IGFoKGUpO3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmRlZmF1bHRFbmNvZGluZz1lLHRoaXN9O2Z1bmN0aW9uIHFfKHQsZSxyLGksbil7bGV0IG89ZS5vYmplY3RNb2RlPzE6ci5sZW5ndGg7ZS5sZW5ndGgrPW87bGV0IHM9ZS5sZW5ndGg8ZS5oaWdoV2F0ZXJNYXJrO3JldHVybiBzfHwoZS5uZWVkRHJhaW49ITApLGUud3JpdGluZ3x8ZS5jb3JrZWR8fGUuZXJyb3JlZHx8IWUuY29uc3RydWN0ZWQ/KGUuYnVmZmVyZWQucHVzaCh7Y2h1bms6cixlbmNvZGluZzppLGNhbGxiYWNrOm59KSxlLmFsbEJ1ZmZlcnMmJmkhPT1cImJ1ZmZlclwiJiYoZS5hbGxCdWZmZXJzPSExKSxlLmFsbE5vb3AmJm4hPT1zbyYmKGUuYWxsTm9vcD0hMSkpOihlLndyaXRlbGVuPW8sZS53cml0ZWNiPW4sZS53cml0aW5nPSEwLGUuc3luYz0hMCx0Ll93cml0ZShyLGksZS5vbndyaXRlKSxlLnN5bmM9ITEpLHMmJiFlLmVycm9yZWQmJiFlLmRlc3Ryb3llZH1mdW5jdGlvbiBlaCh0LGUscixpLG4sbyxzKXtlLndyaXRlbGVuPWksZS53cml0ZWNiPXMsZS53cml0aW5nPSEwLGUuc3luYz0hMCxlLmRlc3Ryb3llZD9lLm9ud3JpdGUobmV3IGdpKFwid3JpdGVcIikpOnI/dC5fd3JpdGV2KG4sZS5vbndyaXRlKTp0Ll93cml0ZShuLG8sZS5vbndyaXRlKSxlLnN5bmM9ITE7fWZ1bmN0aW9uIHRoKHQsZSxyLGkpey0tZS5wZW5kaW5nY2IsaShyKSxvbyhlKSxqcih0LHIpO31mdW5jdGlvbiBEXyh0LGUpe2xldCByPXQuX3dyaXRhYmxlU3RhdGUsaT1yLnN5bmMsbj1yLndyaXRlY2I7aWYodHlwZW9mIG4hPVwiZnVuY3Rpb25cIil7anIodCxuZXcgb2gpO3JldHVybn1yLndyaXRpbmc9ITEsci53cml0ZWNiPW51bGwsci5sZW5ndGgtPXIud3JpdGVsZW4sci53cml0ZWxlbj0wLGU/KGUuc3RhY2ssci5lcnJvcmVkfHwoci5lcnJvcmVkPWUpLHQuX3JlYWRhYmxlU3RhdGUmJiF0Ll9yZWFkYWJsZVN0YXRlLmVycm9yZWQmJih0Ll9yZWFkYWJsZVN0YXRlLmVycm9yZWQ9ZSksaT91ci5uZXh0VGljayh0aCx0LHIsZSxuKTp0aCh0LHIsZSxuKSk6KHIuYnVmZmVyZWQubGVuZ3RoPnIuYnVmZmVyZWRJbmRleCYmYW8odCxyKSxpP3IuYWZ0ZXJXcml0ZVRpY2tJbmZvIT09bnVsbCYmci5hZnRlcldyaXRlVGlja0luZm8uY2I9PT1uP3IuYWZ0ZXJXcml0ZVRpY2tJbmZvLmNvdW50Kys6KHIuYWZ0ZXJXcml0ZVRpY2tJbmZvPXtjb3VudDoxLGNiOm4sc3RyZWFtOnQsc3RhdGU6cn0sdXIubmV4dFRpY2soal8sci5hZnRlcldyaXRlVGlja0luZm8pKTp1aCh0LHIsMSxuKSk7fWZ1bmN0aW9uIGpfKHtzdHJlYW06dCxzdGF0ZTplLGNvdW50OnIsY2I6aX0pe3JldHVybiBlLmFmdGVyV3JpdGVUaWNrSW5mbz1udWxsLHVoKHQsZSxyLGkpfWZ1bmN0aW9uIHVoKHQsZSxyLGkpe2ZvcighZS5lbmRpbmcmJiF0LmRlc3Ryb3llZCYmZS5sZW5ndGg9PT0wJiZlLm5lZWREcmFpbiYmKGUubmVlZERyYWluPSExLHQuZW1pdChcImRyYWluXCIpKTtyLS0gPjA7KWUucGVuZGluZ2NiLS0saSgpO2UuZGVzdHJveWVkJiZvbyhlKSxsbyh0LGUpO31mdW5jdGlvbiBvbyh0KXtpZih0LndyaXRpbmcpcmV0dXJuO2ZvcihsZXQgbj10LmJ1ZmZlcmVkSW5kZXg7bjx0LmJ1ZmZlcmVkLmxlbmd0aDsrK24pe3ZhciBlO2xldHtjaHVuazpvLGNhbGxiYWNrOnN9PXQuYnVmZmVyZWRbbl0sYT10Lm9iamVjdE1vZGU/MTpvLmxlbmd0aDt0Lmxlbmd0aC09YSxzKChlPXQuZXJyb3JlZCkhPT1udWxsJiZlIT09dm9pZCAwP2U6bmV3IGdpKFwid3JpdGVcIikpO31sZXQgcj10W0ZyXS5zcGxpY2UoMCk7Zm9yKGxldCBuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpO3Jbbl0oKGk9dC5lcnJvcmVkKSE9PW51bGwmJmkhPT12b2lkIDA/aTpuZXcgZ2koXCJlbmRcIikpO31wbih0KTt9ZnVuY3Rpb24gYW8odCxlKXtpZihlLmNvcmtlZHx8ZS5idWZmZXJQcm9jZXNzaW5nfHxlLmRlc3Ryb3llZHx8IWUuY29uc3RydWN0ZWQpcmV0dXJuO2xldHtidWZmZXJlZDpyLGJ1ZmZlcmVkSW5kZXg6aSxvYmplY3RNb2RlOm59PWUsbz1yLmxlbmd0aC1pO2lmKCFvKXJldHVybjtsZXQgcz1pO2lmKGUuYnVmZmVyUHJvY2Vzc2luZz0hMCxvPjEmJnQuX3dyaXRldil7ZS5wZW5kaW5nY2ItPW8tMTtsZXQgYT1lLmFsbE5vb3A/c286Yz0+e2ZvcihsZXQgaD1zO2g8ci5sZW5ndGg7KytoKXJbaF0uY2FsbGJhY2soYyk7fSx1PWUuYWxsTm9vcCYmcz09PTA/cjpyaChyLHMpO3UuYWxsQnVmZmVycz1lLmFsbEJ1ZmZlcnMsZWgodCxlLCEwLGUubGVuZ3RoLHUsXCJcIixhKSxwbihlKTt9ZWxzZSB7ZG97bGV0e2NodW5rOmEsZW5jb2Rpbmc6dSxjYWxsYmFjazpjfT1yW3NdO3JbcysrXT1udWxsO2xldCBoPW4/MTphLmxlbmd0aDtlaCh0LGUsITEsaCxhLHUsYyk7fXdoaWxlKHM8ci5sZW5ndGgmJiFlLndyaXRpbmcpO3M9PT1yLmxlbmd0aD9wbihlKTpzPjI1Nj8oci5zcGxpY2UoMCxzKSxlLmJ1ZmZlcmVkSW5kZXg9MCk6ZS5idWZmZXJlZEluZGV4PXM7fWUuYnVmZmVyUHJvY2Vzc2luZz0hMTt9aWUucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbih0LGUscil7aWYodGhpcy5fd3JpdGV2KXRoaXMuX3dyaXRldihbe2NodW5rOnQsZW5jb2Rpbmc6ZX1dLHIpO2Vsc2UgdGhyb3cgbmV3IHhfKFwiX3dyaXRlKClcIil9O2llLnByb3RvdHlwZS5fd3JpdGV2PW51bGw7aWUucHJvdG90eXBlLmVuZD1mdW5jdGlvbih0LGUscil7bGV0IGk9dGhpcy5fd3JpdGFibGVTdGF0ZTt0eXBlb2YgdD09XCJmdW5jdGlvblwiPyhyPXQsdD1udWxsLGU9bnVsbCk6dHlwZW9mIGU9PVwiZnVuY3Rpb25cIiYmKHI9ZSxlPW51bGwpO2xldCBuO2lmKHQhPW51bGwpe2xldCBvPWxoKHRoaXMsdCxlKTtvIGluc3RhbmNlb2YgU18mJihuPW8pO31yZXR1cm4gaS5jb3JrZWQmJihpLmNvcmtlZD0xLHRoaXMudW5jb3JrKCkpLG58fCghaS5lcnJvcmVkJiYhaS5lbmRpbmc/KGkuZW5kaW5nPSEwLGxvKHRoaXMsaSwhMCksaS5lbmRlZD0hMCk6aS5maW5pc2hlZD9uPW5ldyBMXyhcImVuZFwiKTppLmRlc3Ryb3llZCYmKG49bmV3IGdpKFwiZW5kXCIpKSksdHlwZW9mIHI9PVwiZnVuY3Rpb25cIiYmKG58fGkuZmluaXNoZWQ/dXIubmV4dFRpY2socixuKTppW0ZyXS5wdXNoKHIpKSx0aGlzfTtmdW5jdGlvbiBkbih0KXtyZXR1cm4gdC5lbmRpbmcmJiF0LmRlc3Ryb3llZCYmdC5jb25zdHJ1Y3RlZCYmdC5sZW5ndGg9PT0wJiYhdC5lcnJvcmVkJiZ0LmJ1ZmZlcmVkLmxlbmd0aD09PTAmJiF0LmZpbmlzaGVkJiYhdC53cml0aW5nJiYhdC5lcnJvckVtaXR0ZWQmJiF0LmNsb3NlRW1pdHRlZH1mdW5jdGlvbiBGXyh0LGUpe2xldCByPSExO2Z1bmN0aW9uIGkobil7aWYocil7anIodCxuPz9vaCgpKTtyZXR1cm59aWYocj0hMCxlLnBlbmRpbmdjYi0tLG4pe2xldCBvPWVbRnJdLnNwbGljZSgwKTtmb3IobGV0IHM9MDtzPG8ubGVuZ3RoO3MrKylvW3NdKG4pO2pyKHQsbixlLnN5bmMpO31lbHNlIGRuKGUpJiYoZS5wcmVmaW5pc2hlZD0hMCx0LmVtaXQoXCJwcmVmaW5pc2hcIiksZS5wZW5kaW5nY2IrKyx1ci5uZXh0VGljayhubyx0LGUpKTt9ZS5zeW5jPSEwLGUucGVuZGluZ2NiKys7dHJ5e3QuX2ZpbmFsKGkpO31jYXRjaChuKXtpKG4pO31lLnN5bmM9ITE7fWZ1bmN0aW9uIFdfKHQsZSl7IWUucHJlZmluaXNoZWQmJiFlLmZpbmFsQ2FsbGVkJiYodHlwZW9mIHQuX2ZpbmFsPT1cImZ1bmN0aW9uXCImJiFlLmRlc3Ryb3llZD8oZS5maW5hbENhbGxlZD0hMCxGXyh0LGUpKTooZS5wcmVmaW5pc2hlZD0hMCx0LmVtaXQoXCJwcmVmaW5pc2hcIikpKTt9ZnVuY3Rpb24gbG8odCxlLHIpe2RuKGUpJiYoV18odCxlKSxlLnBlbmRpbmdjYj09PTAmJihyPyhlLnBlbmRpbmdjYisrLHVyLm5leHRUaWNrKChpLG4pPT57ZG4obik/bm8oaSxuKTpuLnBlbmRpbmdjYi0tO30sdCxlKSk6ZG4oZSkmJihlLnBlbmRpbmdjYisrLG5vKHQsZSkpKSk7fWZ1bmN0aW9uIG5vKHQsZSl7ZS5wZW5kaW5nY2ItLSxlLmZpbmlzaGVkPSEwO2xldCByPWVbRnJdLnNwbGljZSgwKTtmb3IobGV0IGk9MDtpPHIubGVuZ3RoO2krKylyW2ldKCk7aWYodC5lbWl0KFwiZmluaXNoXCIpLGUuYXV0b0Rlc3Ryb3kpe2xldCBpPXQuX3JlYWRhYmxlU3RhdGU7KCFpfHxpLmF1dG9EZXN0cm95JiYoaS5lbmRFbWl0dGVkfHxpLnJlYWRhYmxlPT09ITEpKSYmdC5kZXN0cm95KCk7fX1BXyhpZS5wcm90b3R5cGUse2Nsb3NlZDp7X19wcm90b19fOm51bGwsZ2V0KCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGU/dGhpcy5fd3JpdGFibGVTdGF0ZS5jbG9zZWQ6ITF9fSxkZXN0cm95ZWQ6e19fcHJvdG9fXzpudWxsLGdldCgpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlP3RoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkOiExfSxzZXQodCl7dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPXQpO319LHdyaXRhYmxlOntfX3Byb3RvX186bnVsbCxnZXQoKXtsZXQgdD10aGlzLl93cml0YWJsZVN0YXRlO3JldHVybiAhIXQmJnQud3JpdGFibGUhPT0hMSYmIXQuZGVzdHJveWVkJiYhdC5lcnJvcmVkJiYhdC5lbmRpbmcmJiF0LmVuZGVkfSxzZXQodCl7dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUud3JpdGFibGU9ISF0KTt9fSx3cml0YWJsZUZpbmlzaGVkOntfX3Byb3RvX186bnVsbCxnZXQoKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZT90aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkOiExfX0sd3JpdGFibGVPYmplY3RNb2RlOntfX3Byb3RvX186bnVsbCxnZXQoKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZT90aGlzLl93cml0YWJsZVN0YXRlLm9iamVjdE1vZGU6ITF9fSx3cml0YWJsZUJ1ZmZlcjp7X19wcm90b19fOm51bGwsZ2V0KCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyKCl9fSx3cml0YWJsZUVuZGVkOntfX3Byb3RvX186bnVsbCxnZXQoKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZT90aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZzohMX19LHdyaXRhYmxlTmVlZERyYWluOntfX3Byb3RvX186bnVsbCxnZXQoKXtsZXQgdD10aGlzLl93cml0YWJsZVN0YXRlO3JldHVybiB0PyF0LmRlc3Ryb3llZCYmIXQuZW5kaW5nJiZ0Lm5lZWREcmFpbjohMX19LHdyaXRhYmxlSGlnaFdhdGVyTWFyazp7X19wcm90b19fOm51bGwsZ2V0KCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319LHdyaXRhYmxlQ29ya2VkOntfX3Byb3RvX186bnVsbCxnZXQoKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZT90aGlzLl93cml0YWJsZVN0YXRlLmNvcmtlZDowfX0sd3JpdGFibGVMZW5ndGg6e19fcHJvdG9fXzpudWxsLGdldCgpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aH19LGVycm9yZWQ6e19fcHJvdG9fXzpudWxsLGVudW1lcmFibGU6ITEsZ2V0KCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGU/dGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvcmVkOm51bGx9fSx3cml0YWJsZUFib3J0ZWQ6e19fcHJvdG9fXzpudWxsLGVudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuICEhKHRoaXMuX3dyaXRhYmxlU3RhdGUud3JpdGFibGUhPT0hMSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfHx0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yZWQpJiYhdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZCl9fX0pO3ZhciAkXz1nbi5kZXN0cm95O2llLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKHQsZSl7bGV0IHI9dGhpcy5fd3JpdGFibGVTdGF0ZTtyZXR1cm4gIXIuZGVzdHJveWVkJiYoci5idWZmZXJlZEluZGV4PHIuYnVmZmVyZWQubGVuZ3RofHxyW0ZyXS5sZW5ndGgpJiZ1ci5uZXh0VGljayhvbyxyKSwkXy5jYWxsKHRoaXMsdCxlKSx0aGlzfTtpZS5wcm90b3R5cGUuX3VuZGVzdHJveT1nbi51bmRlc3Ryb3k7aWUucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKHQsZSl7ZSh0KTt9O2llLnByb3RvdHlwZVtDXy5jYXB0dXJlUmVqZWN0aW9uU3ltYm9sXT1mdW5jdGlvbih0KXt0aGlzLmRlc3Ryb3kodCk7fTt2YXIgaW87ZnVuY3Rpb24gZmgoKXtyZXR1cm4gaW89PT12b2lkIDAmJihpbz17fSksaW99aWUuZnJvbVdlYj1mdW5jdGlvbih0LGUpe3JldHVybiBmaCgpLm5ld1N0cmVhbVdyaXRhYmxlRnJvbVdyaXRhYmxlU3RyZWFtKHQsZSl9O2llLnRvV2ViPWZ1bmN0aW9uKHQpe3JldHVybiBmaCgpLm5ld1dyaXRhYmxlU3RyZWFtRnJvbVN0cmVhbVdyaXRhYmxlKHQpfTt9KTt2YXIgU2g9TSgoYlIsRWgpPT57digpO20oKTtfKCk7dmFyIGZvPVV0KCksSF89KHllKCksWChfZSkpLHtpc1JlYWRhYmxlOlZfLGlzV3JpdGFibGU6el8saXNJdGVyYWJsZTpoaCxpc05vZGVTdHJlYW06S18saXNSZWFkYWJsZU5vZGVTdHJlYW06ZGgsaXNXcml0YWJsZU5vZGVTdHJlYW06cGgsaXNEdXBsZXhOb2RlU3RyZWFtOkdffT10dCgpLGdoPW10KCkse0Fib3J0RXJyb3I6dmgsY29kZXM6e0VSUl9JTlZBTElEX0FSR19UWVBFOlFfLEVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRTp5aH19PVNlKCkse2Rlc3Ryb3llcjpXcn09dHIoKSxZXz1udCgpLEpfPWRpKCkse2NyZWF0ZURlZmVycmVkUHJvbWlzZTpiaH09SmUoKSx3aD1ZcygpLF9oPWdsb2JhbFRoaXMuQmxvYnx8SF8uQmxvYixYXz10eXBlb2YgX2g8XCJ1XCI/ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBfaH06ZnVuY3Rpb24oZSl7cmV0dXJuICExfSxaXz1nbG9iYWxUaGlzLkFib3J0Q29udHJvbGxlcnx8SGkoKS5BYm9ydENvbnRyb2xsZXIse0Z1bmN0aW9uUHJvdG90eXBlQ2FsbDptaH09Y2UoKSxmcj1jbGFzcyBleHRlbmRzIFlfe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLGU/LnJlYWRhYmxlPT09ITEmJih0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRhYmxlPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kZWQ9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkPSEwKSxlPy53cml0YWJsZT09PSExJiYodGhpcy5fd3JpdGFibGVTdGF0ZS53cml0YWJsZT0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZz0hMCx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkPSEwLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ9ITApO319O0VoLmV4cG9ydHM9ZnVuY3Rpb24gdChlLHIpe2lmKEdfKGUpKXJldHVybiBlO2lmKGRoKGUpKXJldHVybiB5bih7cmVhZGFibGU6ZX0pO2lmKHBoKGUpKXJldHVybiB5bih7d3JpdGFibGU6ZX0pO2lmKEtfKGUpKXJldHVybiB5bih7d3JpdGFibGU6ITEscmVhZGFibGU6ITF9KTtpZih0eXBlb2YgZT09XCJmdW5jdGlvblwiKXtsZXR7dmFsdWU6bix3cml0ZTpvLGZpbmFsOnMsZGVzdHJveTphfT1lMChlKTtpZihoaChuKSlyZXR1cm4gd2goZnIsbix7b2JqZWN0TW9kZTohMCx3cml0ZTpvLGZpbmFsOnMsZGVzdHJveTphfSk7bGV0IHU9bj8udGhlbjtpZih0eXBlb2YgdT09XCJmdW5jdGlvblwiKXtsZXQgYyxoPW1oKHUsbixkPT57aWYoZCE9bnVsbCl0aHJvdyBuZXcgeWgoXCJudWxseVwiLFwiYm9keVwiLGQpfSxkPT57V3IoYyxkKTt9KTtyZXR1cm4gYz1uZXcgZnIoe29iamVjdE1vZGU6ITAscmVhZGFibGU6ITEsd3JpdGU6byxmaW5hbChkKXtzKGFzeW5jKCk9Pnt0cnl7YXdhaXQgaCxmby5uZXh0VGljayhkLG51bGwpO31jYXRjaChnKXtmby5uZXh0VGljayhkLGcpO319KTt9LGRlc3Ryb3k6YX0pfXRocm93IG5ldyB5aChcIkl0ZXJhYmxlLCBBc3luY0l0ZXJhYmxlIG9yIEFzeW5jRnVuY3Rpb25cIixyLG4pfWlmKFhfKGUpKXJldHVybiB0KGUuYXJyYXlCdWZmZXIoKSk7aWYoaGgoZSkpcmV0dXJuIHdoKGZyLGUse29iamVjdE1vZGU6ITAsd3JpdGFibGU6ITF9KTtpZih0eXBlb2YgZT8ud3JpdGFibGU9PVwib2JqZWN0XCJ8fHR5cGVvZiBlPy5yZWFkYWJsZT09XCJvYmplY3RcIil7bGV0IG49ZSE9bnVsbCYmZS5yZWFkYWJsZT9kaChlPy5yZWFkYWJsZSk/ZT8ucmVhZGFibGU6dChlLnJlYWRhYmxlKTp2b2lkIDAsbz1lIT1udWxsJiZlLndyaXRhYmxlP3BoKGU/LndyaXRhYmxlKT9lPy53cml0YWJsZTp0KGUud3JpdGFibGUpOnZvaWQgMDtyZXR1cm4geW4oe3JlYWRhYmxlOm4sd3JpdGFibGU6b30pfWxldCBpPWU/LnRoZW47aWYodHlwZW9mIGk9PVwiZnVuY3Rpb25cIil7bGV0IG47cmV0dXJuIG1oKGksZSxvPT57byE9bnVsbCYmbi5wdXNoKG8pLG4ucHVzaChudWxsKTt9LG89PntXcihuLG8pO30pLG49bmV3IGZyKHtvYmplY3RNb2RlOiEwLHdyaXRhYmxlOiExLHJlYWQoKXt9fSl9dGhyb3cgbmV3IFFfKHIsW1wiQmxvYlwiLFwiUmVhZGFibGVTdHJlYW1cIixcIldyaXRhYmxlU3RyZWFtXCIsXCJTdHJlYW1cIixcIkl0ZXJhYmxlXCIsXCJBc3luY0l0ZXJhYmxlXCIsXCJGdW5jdGlvblwiLFwieyByZWFkYWJsZSwgd3JpdGFibGUgfSBwYWlyXCIsXCJQcm9taXNlXCJdLGUpfTtmdW5jdGlvbiBlMCh0KXtsZXR7cHJvbWlzZTplLHJlc29sdmU6cn09YmgoKSxpPW5ldyBaXyxuPWkuc2lnbmFsO3JldHVybiB7dmFsdWU6dChhc3luYyBmdW5jdGlvbiooKXtmb3IoOzspe2xldCBzPWU7ZT1udWxsO2xldHtjaHVuazphLGRvbmU6dSxjYjpjfT1hd2FpdCBzO2lmKGZvLm5leHRUaWNrKGMpLHUpcmV0dXJuO2lmKG4uYWJvcnRlZCl0aHJvdyBuZXcgdmgodm9pZCAwLHtjYXVzZTpuLnJlYXNvbn0pOygoe3Byb21pc2U6ZSxyZXNvbHZlOnJ9PWJoKCkpKSx5aWVsZCBhO319KCkse3NpZ25hbDpufSksd3JpdGUocyxhLHUpe2xldCBjPXI7cj1udWxsLGMoe2NodW5rOnMsZG9uZTohMSxjYjp1fSk7fSxmaW5hbChzKXtsZXQgYT1yO3I9bnVsbCxhKHtkb25lOiEwLGNiOnN9KTt9LGRlc3Ryb3kocyxhKXtpLmFib3J0KCksYShzKTt9fX1mdW5jdGlvbiB5bih0KXtsZXQgZT10LnJlYWRhYmxlJiZ0eXBlb2YgdC5yZWFkYWJsZS5yZWFkIT1cImZ1bmN0aW9uXCI/Sl8ud3JhcCh0LnJlYWRhYmxlKTp0LnJlYWRhYmxlLHI9dC53cml0YWJsZSxpPSEhVl8oZSksbj0hIXpfKHIpLG8scyxhLHUsYztmdW5jdGlvbiBoKGQpe2xldCBnPXU7dT1udWxsLGc/ZyhkKTpkJiZjLmRlc3Ryb3koZCk7fXJldHVybiBjPW5ldyBmcih7cmVhZGFibGVPYmplY3RNb2RlOiEhKGUhPW51bGwmJmUucmVhZGFibGVPYmplY3RNb2RlKSx3cml0YWJsZU9iamVjdE1vZGU6ISEociE9bnVsbCYmci53cml0YWJsZU9iamVjdE1vZGUpLHJlYWRhYmxlOmksd3JpdGFibGU6bn0pLG4mJihnaChyLGQ9PntuPSExLGQmJldyKGUsZCksaChkKTt9KSxjLl93cml0ZT1mdW5jdGlvbihkLGcseSl7ci53cml0ZShkLGcpP3koKTpvPXk7fSxjLl9maW5hbD1mdW5jdGlvbihkKXtyLmVuZCgpLHM9ZDt9LHIub24oXCJkcmFpblwiLGZ1bmN0aW9uKCl7aWYobyl7bGV0IGQ9bztvPW51bGwsZCgpO319KSxyLm9uKFwiZmluaXNoXCIsZnVuY3Rpb24oKXtpZihzKXtsZXQgZD1zO3M9bnVsbCxkKCk7fX0pKSxpJiYoZ2goZSxkPT57aT0hMSxkJiZXcihlLGQpLGgoZCk7fSksZS5vbihcInJlYWRhYmxlXCIsZnVuY3Rpb24oKXtpZihhKXtsZXQgZD1hO2E9bnVsbCxkKCk7fX0pLGUub24oXCJlbmRcIixmdW5jdGlvbigpe2MucHVzaChudWxsKTt9KSxjLl9yZWFkPWZ1bmN0aW9uKCl7Zm9yKDs7KXtsZXQgZD1lLnJlYWQoKTtpZihkPT09bnVsbCl7YT1jLl9yZWFkO3JldHVybn1pZighYy5wdXNoKGQpKXJldHVybn19KSxjLl9kZXN0cm95PWZ1bmN0aW9uKGQsZyl7IWQmJnUhPT1udWxsJiYoZD1uZXcgdmgpLGE9bnVsbCxvPW51bGwscz1udWxsLHU9PT1udWxsP2coZCk6KHU9ZyxXcihyLGQpLFdyKGUsZCkpO30sY319KTt2YXIgbnQ9TSgoUlIsVGgpPT57digpO20oKTtfKCk7dmFye09iamVjdERlZmluZVByb3BlcnRpZXM6dDAsT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOkF0LE9iamVjdEtleXM6cjAsT2JqZWN0U2V0UHJvdG90eXBlT2Y6QWh9PWNlKCk7VGguZXhwb3J0cz1WZTt2YXIgcG89ZGkoKSxOZT11bygpO0FoKFZlLnByb3RvdHlwZSxwby5wcm90b3R5cGUpO0FoKFZlLHBvKTt7bGV0IHQ9cjAoTmUucHJvdG90eXBlKTtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl7bGV0IHI9dFtlXTtWZS5wcm90b3R5cGVbcl18fChWZS5wcm90b3R5cGVbcl09TmUucHJvdG90eXBlW3JdKTt9fWZ1bmN0aW9uIFZlKHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFZlKSlyZXR1cm4gbmV3IFZlKHQpO3BvLmNhbGwodGhpcyx0KSxOZS5jYWxsKHRoaXMsdCksdD8odGhpcy5hbGxvd0hhbGZPcGVuPXQuYWxsb3dIYWxmT3BlbiE9PSExLHQucmVhZGFibGU9PT0hMSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGFibGU9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZD0hMCx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQ9ITApLHQud3JpdGFibGU9PT0hMSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUud3JpdGFibGU9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmc9ITAsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZD0hMCx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkPSEwKSk6dGhpcy5hbGxvd0hhbGZPcGVuPSEwO310MChWZS5wcm90b3R5cGUse3dyaXRhYmxlOntfX3Byb3RvX186bnVsbCwuLi5BdChOZS5wcm90b3R5cGUsXCJ3cml0YWJsZVwiKX0sd3JpdGFibGVIaWdoV2F0ZXJNYXJrOntfX3Byb3RvX186bnVsbCwuLi5BdChOZS5wcm90b3R5cGUsXCJ3cml0YWJsZUhpZ2hXYXRlck1hcmtcIil9LHdyaXRhYmxlT2JqZWN0TW9kZTp7X19wcm90b19fOm51bGwsLi4uQXQoTmUucHJvdG90eXBlLFwid3JpdGFibGVPYmplY3RNb2RlXCIpfSx3cml0YWJsZUJ1ZmZlcjp7X19wcm90b19fOm51bGwsLi4uQXQoTmUucHJvdG90eXBlLFwid3JpdGFibGVCdWZmZXJcIil9LHdyaXRhYmxlTGVuZ3RoOntfX3Byb3RvX186bnVsbCwuLi5BdChOZS5wcm90b3R5cGUsXCJ3cml0YWJsZUxlbmd0aFwiKX0sd3JpdGFibGVGaW5pc2hlZDp7X19wcm90b19fOm51bGwsLi4uQXQoTmUucHJvdG90eXBlLFwid3JpdGFibGVGaW5pc2hlZFwiKX0sd3JpdGFibGVDb3JrZWQ6e19fcHJvdG9fXzpudWxsLC4uLkF0KE5lLnByb3RvdHlwZSxcIndyaXRhYmxlQ29ya2VkXCIpfSx3cml0YWJsZUVuZGVkOntfX3Byb3RvX186bnVsbCwuLi5BdChOZS5wcm90b3R5cGUsXCJ3cml0YWJsZUVuZGVkXCIpfSx3cml0YWJsZU5lZWREcmFpbjp7X19wcm90b19fOm51bGwsLi4uQXQoTmUucHJvdG90eXBlLFwid3JpdGFibGVOZWVkRHJhaW5cIil9LGRlc3Ryb3llZDp7X19wcm90b19fOm51bGwsZ2V0KCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGU9PT12b2lkIDB8fHRoaXMuX3dyaXRhYmxlU3RhdGU9PT12b2lkIDA/ITE6dGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQodCl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPXQsdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9dCk7fX19KTt2YXIgY287ZnVuY3Rpb24gSWgoKXtyZXR1cm4gY289PT12b2lkIDAmJihjbz17fSksY299VmUuZnJvbVdlYj1mdW5jdGlvbih0LGUpe3JldHVybiBJaCgpLm5ld1N0cmVhbUR1cGxleEZyb21SZWFkYWJsZVdyaXRhYmxlUGFpcih0LGUpfTtWZS50b1dlYj1mdW5jdGlvbih0KXtyZXR1cm4gSWgoKS5uZXdSZWFkYWJsZVdyaXRhYmxlUGFpckZyb21EdXBsZXgodCl9O3ZhciBobztWZS5mcm9tPWZ1bmN0aW9uKHQpe3JldHVybiBob3x8KGhvPVNoKCkpLGhvKHQsXCJib2R5XCIpfTt9KTt2YXIgYm89TSgoTlIsQ2gpPT57digpO20oKTtfKCk7dmFye09iamVjdFNldFByb3RvdHlwZU9mOlJoLFN5bWJvbDppMH09Y2UoKTtDaC5leHBvcnRzPUl0O3ZhcntFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRDpuMH09U2UoKS5jb2Rlcyx5bz1udCgpLHtnZXRIaWdoV2F0ZXJNYXJrOnMwfT1zbigpO1JoKEl0LnByb3RvdHlwZSx5by5wcm90b3R5cGUpO1JoKEl0LHlvKTt2YXIgYmk9aTAoXCJrQ2FsbGJhY2tcIik7ZnVuY3Rpb24gSXQodCl7aWYoISh0aGlzIGluc3RhbmNlb2YgSXQpKXJldHVybiBuZXcgSXQodCk7bGV0IGU9dD9zMCh0aGlzLHQsXCJyZWFkYWJsZUhpZ2hXYXRlck1hcmtcIiwhMCk6bnVsbDtlPT09MCYmKHQ9ey4uLnQsaGlnaFdhdGVyTWFyazpudWxsLHJlYWRhYmxlSGlnaFdhdGVyTWFyazplLHdyaXRhYmxlSGlnaFdhdGVyTWFyazp0LndyaXRhYmxlSGlnaFdhdGVyTWFya3x8MH0pLHlvLmNhbGwodGhpcyx0KSx0aGlzLl9yZWFkYWJsZVN0YXRlLnN5bmM9ITEsdGhpc1tiaV09bnVsbCx0JiYodHlwZW9mIHQudHJhbnNmb3JtPT1cImZ1bmN0aW9uXCImJih0aGlzLl90cmFuc2Zvcm09dC50cmFuc2Zvcm0pLHR5cGVvZiB0LmZsdXNoPT1cImZ1bmN0aW9uXCImJih0aGlzLl9mbHVzaD10LmZsdXNoKSksdGhpcy5vbihcInByZWZpbmlzaFwiLG8wKTt9ZnVuY3Rpb24gZ28odCl7dHlwZW9mIHRoaXMuX2ZsdXNoPT1cImZ1bmN0aW9uXCImJiF0aGlzLmRlc3Ryb3llZD90aGlzLl9mbHVzaCgoZSxyKT0+e2lmKGUpe3Q/dChlKTp0aGlzLmRlc3Ryb3koZSk7cmV0dXJufXIhPW51bGwmJnRoaXMucHVzaChyKSx0aGlzLnB1c2gobnVsbCksdCYmdCgpO30pOih0aGlzLnB1c2gobnVsbCksdCYmdCgpKTt9ZnVuY3Rpb24gbzAoKXt0aGlzLl9maW5hbCE9PWdvJiZnby5jYWxsKHRoaXMpO31JdC5wcm90b3R5cGUuX2ZpbmFsPWdvO0l0LnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXt0aHJvdyBuZXcgbjAoXCJfdHJhbnNmb3JtKClcIil9O0l0LnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24odCxlLHIpe2xldCBpPXRoaXMuX3JlYWRhYmxlU3RhdGUsbj10aGlzLl93cml0YWJsZVN0YXRlLG89aS5sZW5ndGg7dGhpcy5fdHJhbnNmb3JtKHQsZSwocyxhKT0+e2lmKHMpe3Iocyk7cmV0dXJufWEhPW51bGwmJnRoaXMucHVzaChhKSxuLmVuZGVkfHxvPT09aS5sZW5ndGh8fGkubGVuZ3RoPGkuaGlnaFdhdGVyTWFyaz9yKCk6dGhpc1tiaV09cjt9KTt9O0l0LnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbigpe2lmKHRoaXNbYmldKXtsZXQgdD10aGlzW2JpXTt0aGlzW2JpXT1udWxsLHQoKTt9fTt9KTt2YXIgX289TSgoS1IsUGgpPT57digpO20oKTtfKCk7dmFye09iamVjdFNldFByb3RvdHlwZU9mOkJofT1jZSgpO1BoLmV4cG9ydHM9JHI7dmFyIHdvPWJvKCk7QmgoJHIucHJvdG90eXBlLHdvLnByb3RvdHlwZSk7QmgoJHIsd28pO2Z1bmN0aW9uICRyKHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mICRyKSlyZXR1cm4gbmV3ICRyKHQpO3dvLmNhbGwodGhpcyx0KTt9JHIucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIpe3IobnVsbCx0KTt9O30pO3ZhciBtbj1NKChpQyxMaCk9Pnt2KCk7bSgpO18oKTt2YXIgd2k9VXQoKSx7QXJyYXlJc0FycmF5OmEwLFByb21pc2U6bDAsU3ltYm9sQXN5bmNJdGVyYXRvcjp1MH09Y2UoKSxfbj1tdCgpLHtvbmNlOmYwfT1KZSgpLGMwPXRyKCksT2g9bnQoKSx7YWdncmVnYXRlVHdvRXJyb3JzOmgwLGNvZGVzOntFUlJfSU5WQUxJRF9BUkdfVFlQRTpSbyxFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUU6bW8sRVJSX01JU1NJTkdfQVJHUzpkMCxFUlJfU1RSRUFNX0RFU1RST1lFRDpwMCxFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRTpnMH0sQWJvcnRFcnJvcjp5MH09U2UoKSx7dmFsaWRhdGVGdW5jdGlvbjpiMCx2YWxpZGF0ZUFib3J0U2lnbmFsOncwfT1maSgpLHtpc0l0ZXJhYmxlOmNyLGlzUmVhZGFibGU6dm8saXNSZWFkYWJsZU5vZGVTdHJlYW06d24saXNOb2RlU3RyZWFtOmtoLGlzVHJhbnNmb3JtU3RyZWFtOkhyLGlzV2ViU3RyZWFtOl8wLGlzUmVhZGFibGVTdHJlYW06RW8saXNSZWFkYWJsZUVuZGVkOm0wfT10dCgpLHYwPWdsb2JhbFRoaXMuQWJvcnRDb250cm9sbGVyfHxIaSgpLkFib3J0Q29udHJvbGxlcixTbyxBbztmdW5jdGlvbiB4aCh0LGUscil7bGV0IGk9ITE7dC5vbihcImNsb3NlXCIsKCk9PntpPSEwO30pO2xldCBuPV9uKHQse3JlYWRhYmxlOmUsd3JpdGFibGU6cn0sbz0+e2k9IW87fSk7cmV0dXJuIHtkZXN0cm95Om89PntpfHwoaT0hMCxjMC5kZXN0cm95ZXIodCxvfHxuZXcgcDAoXCJwaXBlXCIpKSk7fSxjbGVhbnVwOm59fWZ1bmN0aW9uIEUwKHQpe3JldHVybiBiMCh0W3QubGVuZ3RoLTFdLFwic3RyZWFtc1tzdHJlYW0ubGVuZ3RoIC0gMV1cIiksdC5wb3AoKX1mdW5jdGlvbiBJbyh0KXtpZihjcih0KSlyZXR1cm4gdDtpZih3bih0KSlyZXR1cm4gUzAodCk7dGhyb3cgbmV3IFJvKFwidmFsXCIsW1wiUmVhZGFibGVcIixcIkl0ZXJhYmxlXCIsXCJBc3luY0l0ZXJhYmxlXCJdLHQpfWFzeW5jIGZ1bmN0aW9uKlMwKHQpe0FvfHwoQW89ZGkoKSkseWllbGQqQW8ucHJvdG90eXBlW3UwXS5jYWxsKHQpO31hc3luYyBmdW5jdGlvbiBibih0LGUscix7ZW5kOml9KXtsZXQgbixvPW51bGwscz1jPT57aWYoYyYmKG49Yyksbyl7bGV0IGg9bztvPW51bGwsaCgpO319LGE9KCk9Pm5ldyBsMCgoYyxoKT0+e24/aChuKTpvPSgpPT57bj9oKG4pOmMoKTt9O30pO2Uub24oXCJkcmFpblwiLHMpO2xldCB1PV9uKGUse3JlYWRhYmxlOiExfSxzKTt0cnl7ZS53cml0YWJsZU5lZWREcmFpbiYmYXdhaXQgYSgpO2ZvciBhd2FpdChsZXQgYyBvZiB0KWUud3JpdGUoYyl8fGF3YWl0IGEoKTtpJiZlLmVuZCgpLGF3YWl0IGEoKSxyKCk7fWNhdGNoKGMpe3IobiE9PWM/aDAobixjKTpjKTt9ZmluYWxseXt1KCksZS5vZmYoXCJkcmFpblwiLHMpO319YXN5bmMgZnVuY3Rpb24gVG8odCxlLHIse2VuZDppfSl7SHIoZSkmJihlPWUud3JpdGFibGUpO2xldCBuPWUuZ2V0V3JpdGVyKCk7dHJ5e2ZvciBhd2FpdChsZXQgbyBvZiB0KWF3YWl0IG4ucmVhZHksbi53cml0ZShvKS5jYXRjaCgoKT0+e30pO2F3YWl0IG4ucmVhZHksaSYmYXdhaXQgbi5jbG9zZSgpLHIoKTt9Y2F0Y2gobyl7dHJ5e2F3YWl0IG4uYWJvcnQobykscihvKTt9Y2F0Y2gocyl7cihzKTt9fX1mdW5jdGlvbiBBMCguLi50KXtyZXR1cm4gTWgodCxmMChFMCh0KSkpfWZ1bmN0aW9uIE1oKHQsZSxyKXtpZih0Lmxlbmd0aD09PTEmJmEwKHRbMF0pJiYodD10WzBdKSx0Lmxlbmd0aDwyKXRocm93IG5ldyBkMChcInN0cmVhbXNcIik7bGV0IGk9bmV3IHYwLG49aS5zaWduYWwsbz1yPy5zaWduYWwscz1bXTt3MChvLFwib3B0aW9ucy5zaWduYWxcIik7ZnVuY3Rpb24gYSgpe3kobmV3IHkwKTt9bz8uYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsYSk7bGV0IHUsYyxoPVtdLGQ9MDtmdW5jdGlvbiBnKEMpe3koQywtLWQ9PT0wKTt9ZnVuY3Rpb24geShDLFIpe2lmKEMmJighdXx8dS5jb2RlPT09XCJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRVwiKSYmKHU9QyksISghdSYmIVIpKXtmb3IoO2gubGVuZ3RoOyloLnNoaWZ0KCkodSk7bz8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsYSksaS5hYm9ydCgpLFImJih1fHxzLmZvckVhY2goVT0+VSgpKSx3aS5uZXh0VGljayhlLHUsYykpO319bGV0IHc7Zm9yKGxldCBDPTA7Qzx0Lmxlbmd0aDtDKyspe2xldCBSPXRbQ10sVT1DPHQubGVuZ3RoLTEsTj1DPjAsVz1VfHxyPy5lbmQhPT0hMSxLPUM9PT10Lmxlbmd0aC0xO2lmKGtoKFIpKXtsZXQgej1mdW5jdGlvbihRKXtRJiZRLm5hbWUhPT1cIkFib3J0RXJyb3JcIiYmUS5jb2RlIT09XCJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRVwiJiZnKFEpO307aWYoVyl7bGV0e2Rlc3Ryb3k6USxjbGVhbnVwOmRlfT14aChSLFUsTik7aC5wdXNoKFEpLHZvKFIpJiZLJiZzLnB1c2goZGUpO31SLm9uKFwiZXJyb3JcIix6KSx2byhSKSYmSyYmcy5wdXNoKCgpPT57Ui5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIseik7fSk7fWlmKEM9PT0wKWlmKHR5cGVvZiBSPT1cImZ1bmN0aW9uXCIpe2lmKHc9Uih7c2lnbmFsOm59KSwhY3IodykpdGhyb3cgbmV3IG1vKFwiSXRlcmFibGUsIEFzeW5jSXRlcmFibGUgb3IgU3RyZWFtXCIsXCJzb3VyY2VcIix3KX1lbHNlIGNyKFIpfHx3bihSKXx8SHIoUik/dz1SOnc9T2guZnJvbShSKTtlbHNlIGlmKHR5cGVvZiBSPT1cImZ1bmN0aW9uXCIpe2lmKEhyKHcpKXt2YXIgRTt3PUlvKChFPXcpPT09bnVsbHx8RT09PXZvaWQgMD92b2lkIDA6RS5yZWFkYWJsZSk7fWVsc2Ugdz1Jbyh3KTtpZih3PVIodyx7c2lnbmFsOm59KSxVKXtpZighY3IodywhMCkpdGhyb3cgbmV3IG1vKFwiQXN5bmNJdGVyYWJsZVwiLGB0cmFuc2Zvcm1bJHtDLTF9XWAsdyl9ZWxzZSB7dmFyIFM7U298fChTbz1fbygpKTtsZXQgej1uZXcgU28oe29iamVjdE1vZGU6ITB9KSxRPShTPXcpPT09bnVsbHx8Uz09PXZvaWQgMD92b2lkIDA6Uy50aGVuO2lmKHR5cGVvZiBRPT1cImZ1bmN0aW9uXCIpZCsrLFEuY2FsbCh3LHBlPT57Yz1wZSxwZSE9bnVsbCYmei53cml0ZShwZSksVyYmei5lbmQoKSx3aS5uZXh0VGljayhnKTt9LHBlPT57ei5kZXN0cm95KHBlKSx3aS5uZXh0VGljayhnLHBlKTt9KTtlbHNlIGlmKGNyKHcsITApKWQrKyxibih3LHosZyx7ZW5kOld9KTtlbHNlIGlmKEVvKHcpfHxIcih3KSl7bGV0IHBlPXcucmVhZGFibGV8fHc7ZCsrLGJuKHBlLHosZyx7ZW5kOld9KTt9ZWxzZSB0aHJvdyBuZXcgbW8oXCJBc3luY0l0ZXJhYmxlIG9yIFByb21pc2VcIixcImRlc3RpbmF0aW9uXCIsdyk7dz16O2xldHtkZXN0cm95OmRlLGNsZWFudXA6R3R9PXhoKHcsITEsITApO2gucHVzaChkZSksSyYmcy5wdXNoKEd0KTt9fWVsc2UgaWYoa2goUikpe2lmKHduKHcpKXtkKz0yO2xldCB6PUkwKHcsUixnLHtlbmQ6V30pO3ZvKFIpJiZLJiZzLnB1c2goeik7fWVsc2UgaWYoSHIodyl8fEVvKHcpKXtsZXQgej13LnJlYWRhYmxlfHx3O2QrKyxibih6LFIsZyx7ZW5kOld9KTt9ZWxzZSBpZihjcih3KSlkKyssYm4odyxSLGcse2VuZDpXfSk7ZWxzZSB0aHJvdyBuZXcgUm8oXCJ2YWxcIixbXCJSZWFkYWJsZVwiLFwiSXRlcmFibGVcIixcIkFzeW5jSXRlcmFibGVcIixcIlJlYWRhYmxlU3RyZWFtXCIsXCJUcmFuc2Zvcm1TdHJlYW1cIl0sdyk7dz1SO31lbHNlIGlmKF8wKFIpKXtpZih3bih3KSlkKyssVG8oSW8odyksUixnLHtlbmQ6V30pO2Vsc2UgaWYoRW8odyl8fGNyKHcpKWQrKyxUbyh3LFIsZyx7ZW5kOld9KTtlbHNlIGlmKEhyKHcpKWQrKyxUbyh3LnJlYWRhYmxlLFIsZyx7ZW5kOld9KTtlbHNlIHRocm93IG5ldyBSbyhcInZhbFwiLFtcIlJlYWRhYmxlXCIsXCJJdGVyYWJsZVwiLFwiQXN5bmNJdGVyYWJsZVwiLFwiUmVhZGFibGVTdHJlYW1cIixcIlRyYW5zZm9ybVN0cmVhbVwiXSx3KTt3PVI7fWVsc2Ugdz1PaC5mcm9tKFIpO31yZXR1cm4gKG4hPW51bGwmJm4uYWJvcnRlZHx8byE9bnVsbCYmby5hYm9ydGVkKSYmd2kubmV4dFRpY2soYSksd31mdW5jdGlvbiBJMCh0LGUscix7ZW5kOml9KXtsZXQgbj0hMTtpZihlLm9uKFwiY2xvc2VcIiwoKT0+e258fHIobmV3IGcwKTt9KSx0LnBpcGUoZSx7ZW5kOiExfSksaSl7bGV0IHM9ZnVuY3Rpb24oKXtuPSEwLGUuZW5kKCk7fTttMCh0KT93aS5uZXh0VGljayhzKTp0Lm9uY2UoXCJlbmRcIixzKTt9ZWxzZSByKCk7cmV0dXJuIF9uKHQse3JlYWRhYmxlOiEwLHdyaXRhYmxlOiExfSxzPT57bGV0IGE9dC5fcmVhZGFibGVTdGF0ZTtzJiZzLmNvZGU9PT1cIkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFXCImJmEmJmEuZW5kZWQmJiFhLmVycm9yZWQmJiFhLmVycm9yRW1pdHRlZD90Lm9uY2UoXCJlbmRcIixyKS5vbmNlKFwiZXJyb3JcIixyKTpyKHMpO30pLF9uKGUse3JlYWRhYmxlOiExLHdyaXRhYmxlOiEwfSxyKX1MaC5leHBvcnRzPXtwaXBlbGluZUltcGw6TWgscGlwZWxpbmU6QTB9O30pO3ZhciBCbz1NKChkQyxGaCk9Pnt2KCk7bSgpO18oKTt2YXJ7cGlwZWxpbmU6VDB9PW1uKCksdm49bnQoKSx7ZGVzdHJveWVyOlIwfT10cigpLHtpc05vZGVTdHJlYW06RW4saXNSZWFkYWJsZTpVaCxpc1dyaXRhYmxlOk5oLGlzV2ViU3RyZWFtOkNvLGlzVHJhbnNmb3JtU3RyZWFtOmhyLGlzV3JpdGFibGVTdHJlYW06cWgsaXNSZWFkYWJsZVN0cmVhbTpEaH09dHQoKSx7QWJvcnRFcnJvcjpDMCxjb2Rlczp7RVJSX0lOVkFMSURfQVJHX1ZBTFVFOmpoLEVSUl9NSVNTSU5HX0FSR1M6QjB9fT1TZSgpLFAwPW10KCk7RmguZXhwb3J0cz1mdW5jdGlvbiguLi5lKXtpZihlLmxlbmd0aD09PTApdGhyb3cgbmV3IEIwKFwic3RyZWFtc1wiKTtpZihlLmxlbmd0aD09PTEpcmV0dXJuIHZuLmZyb20oZVswXSk7bGV0IHI9Wy4uLmVdO2lmKHR5cGVvZiBlWzBdPT1cImZ1bmN0aW9uXCImJihlWzBdPXZuLmZyb20oZVswXSkpLHR5cGVvZiBlW2UubGVuZ3RoLTFdPT1cImZ1bmN0aW9uXCIpe2xldCB5PWUubGVuZ3RoLTE7ZVt5XT12bi5mcm9tKGVbeV0pO31mb3IobGV0IHk9MDt5PGUubGVuZ3RoOysreSlpZighKCFFbihlW3ldKSYmIUNvKGVbeV0pKSl7aWYoeTxlLmxlbmd0aC0xJiYhKFVoKGVbeV0pfHxEaChlW3ldKXx8aHIoZVt5XSkpKXRocm93IG5ldyBqaChgc3RyZWFtc1ske3l9XWAsclt5XSxcIm11c3QgYmUgcmVhZGFibGVcIik7aWYoeT4wJiYhKE5oKGVbeV0pfHxxaChlW3ldKXx8aHIoZVt5XSkpKXRocm93IG5ldyBqaChgc3RyZWFtc1ske3l9XWAsclt5XSxcIm11c3QgYmUgd3JpdGFibGVcIil9bGV0IGksbixvLHMsYTtmdW5jdGlvbiB1KHkpe2xldCB3PXM7cz1udWxsLHc/dyh5KTp5P2EuZGVzdHJveSh5KTohZyYmIWQmJmEuZGVzdHJveSgpO31sZXQgYz1lWzBdLGg9VDAoZSx1KSxkPSEhKE5oKGMpfHxxaChjKXx8aHIoYykpLGc9ISEoVWgoaCl8fERoKGgpfHxocihoKSk7aWYoYT1uZXcgdm4oe3dyaXRhYmxlT2JqZWN0TW9kZTohIShjIT1udWxsJiZjLndyaXRhYmxlT2JqZWN0TW9kZSkscmVhZGFibGVPYmplY3RNb2RlOiEhKGghPW51bGwmJmgud3JpdGFibGVPYmplY3RNb2RlKSx3cml0YWJsZTpkLHJlYWRhYmxlOmd9KSxkKXtpZihFbihjKSlhLl93cml0ZT1mdW5jdGlvbih3LEUsUyl7Yy53cml0ZSh3LEUpP1MoKTppPVM7fSxhLl9maW5hbD1mdW5jdGlvbih3KXtjLmVuZCgpLG49dzt9LGMub24oXCJkcmFpblwiLGZ1bmN0aW9uKCl7aWYoaSl7bGV0IHc9aTtpPW51bGwsdygpO319KTtlbHNlIGlmKENvKGMpKXtsZXQgRT0oaHIoYyk/Yy53cml0YWJsZTpjKS5nZXRXcml0ZXIoKTthLl93cml0ZT1hc3luYyBmdW5jdGlvbihTLEksQyl7dHJ5e2F3YWl0IEUucmVhZHksRS53cml0ZShTKS5jYXRjaCgoKT0+e30pLEMoKTt9Y2F0Y2goUil7QyhSKTt9fSxhLl9maW5hbD1hc3luYyBmdW5jdGlvbihTKXt0cnl7YXdhaXQgRS5yZWFkeSxFLmNsb3NlKCkuY2F0Y2goKCk9Pnt9KSxuPVM7fWNhdGNoKEkpe1MoSSk7fX07fWxldCB5PWhyKGgpP2gucmVhZGFibGU6aDtQMCh5LCgpPT57aWYobil7bGV0IHc9bjtuPW51bGwsdygpO319KTt9aWYoZyl7aWYoRW4oaCkpaC5vbihcInJlYWRhYmxlXCIsZnVuY3Rpb24oKXtpZihvKXtsZXQgeT1vO289bnVsbCx5KCk7fX0pLGgub24oXCJlbmRcIixmdW5jdGlvbigpe2EucHVzaChudWxsKTt9KSxhLl9yZWFkPWZ1bmN0aW9uKCl7Zm9yKDs7KXtsZXQgeT1oLnJlYWQoKTtpZih5PT09bnVsbCl7bz1hLl9yZWFkO3JldHVybn1pZighYS5wdXNoKHkpKXJldHVybn19O2Vsc2UgaWYoQ28oaCkpe2xldCB3PShocihoKT9oLnJlYWRhYmxlOmgpLmdldFJlYWRlcigpO2EuX3JlYWQ9YXN5bmMgZnVuY3Rpb24oKXtmb3IoOzspdHJ5e2xldHt2YWx1ZTpFLGRvbmU6U309YXdhaXQgdy5yZWFkKCk7aWYoIWEucHVzaChFKSlyZXR1cm47aWYoUyl7YS5wdXNoKG51bGwpO3JldHVybn19Y2F0Y2h7cmV0dXJufX07fX1yZXR1cm4gYS5fZGVzdHJveT1mdW5jdGlvbih5LHcpeyF5JiZzIT09bnVsbCYmKHk9bmV3IEMwKSxvPW51bGwsaT1udWxsLG49bnVsbCxzPT09bnVsbD93KHkpOihzPXcsRW4oaCkmJlIwKGgseSkpO30sYX07fSk7dmFyIFFoPU0oKFNDLGtvKT0+e3YoKTttKCk7XygpO3ZhciBWaD1nbG9iYWxUaGlzLkFib3J0Q29udHJvbGxlcnx8SGkoKS5BYm9ydENvbnRyb2xsZXIse2NvZGVzOntFUlJfSU5WQUxJRF9BUkdfVkFMVUU6TzAsRVJSX0lOVkFMSURfQVJHX1RZUEU6X2ksRVJSX01JU1NJTkdfQVJHUzprMCxFUlJfT1VUX09GX1JBTkdFOngwfSxBYm9ydEVycm9yOnN0fT1TZSgpLHt2YWxpZGF0ZUFib3J0U2lnbmFsOmRyLHZhbGlkYXRlSW50ZWdlcjpNMCx2YWxpZGF0ZU9iamVjdDpwcn09ZmkoKSxMMD1jZSgpLlN5bWJvbChcImtXZWFrXCIpLHtmaW5pc2hlZDpVMH09bXQoKSxOMD1CbygpLHthZGRBYm9ydFNpZ25hbE5vVmFsaWRhdGU6cTB9PWNpKCkse2lzV3JpdGFibGU6RDAsaXNOb2RlU3RyZWFtOmowfT10dCgpLHtBcnJheVByb3RvdHlwZVB1c2g6RjAsTWF0aEZsb29yOlcwLE51bWJlcjokMCxOdW1iZXJJc05hTjpIMCxQcm9taXNlOldoLFByb21pc2VSZWplY3Q6JGgsUHJvbWlzZVByb3RvdHlwZVRoZW46VjAsU3ltYm9sOnpofT1jZSgpLFNuPXpoKFwia0VtcHR5XCIpLEhoPXpoKFwia0VvZlwiKTtmdW5jdGlvbiB6MCh0LGUpe2lmKGUhPW51bGwmJnByKGUsXCJvcHRpb25zXCIpLGU/LnNpZ25hbCE9bnVsbCYmZHIoZS5zaWduYWwsXCJvcHRpb25zLnNpZ25hbFwiKSxqMCh0KSYmIUQwKHQpKXRocm93IG5ldyBPMChcInN0cmVhbVwiLHQsXCJtdXN0IGJlIHdyaXRhYmxlXCIpO2xldCByPU4wKHRoaXMsdCk7cmV0dXJuIGUhPW51bGwmJmUuc2lnbmFsJiZxMChlLnNpZ25hbCxyKSxyfWZ1bmN0aW9uIEFuKHQsZSl7aWYodHlwZW9mIHQhPVwiZnVuY3Rpb25cIil0aHJvdyBuZXcgX2koXCJmblwiLFtcIkZ1bmN0aW9uXCIsXCJBc3luY0Z1bmN0aW9uXCJdLHQpO2UhPW51bGwmJnByKGUsXCJvcHRpb25zXCIpLGU/LnNpZ25hbCE9bnVsbCYmZHIoZS5zaWduYWwsXCJvcHRpb25zLnNpZ25hbFwiKTtsZXQgcj0xO3JldHVybiBlPy5jb25jdXJyZW5jeSE9bnVsbCYmKHI9VzAoZS5jb25jdXJyZW5jeSkpLE0wKHIsXCJjb25jdXJyZW5jeVwiLDEpLGFzeW5jIGZ1bmN0aW9uKigpe3ZhciBuLG87bGV0IHM9bmV3IFZoLGE9dGhpcyx1PVtdLGM9cy5zaWduYWwsaD17c2lnbmFsOmN9LGQ9KCk9PnMuYWJvcnQoKTtlIT1udWxsJiYobj1lLnNpZ25hbCkhPT1udWxsJiZuIT09dm9pZCAwJiZuLmFib3J0ZWQmJmQoKSxlPT1udWxsfHwobz1lLnNpZ25hbCk9PT1udWxsfHxvPT09dm9pZCAwfHxvLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLGQpO2xldCBnLHksdz0hMTtmdW5jdGlvbiBFKCl7dz0hMDt9YXN5bmMgZnVuY3Rpb24gUygpe3RyeXtmb3IgYXdhaXQobGV0IFIgb2YgYSl7dmFyIEk7aWYodylyZXR1cm47aWYoYy5hYm9ydGVkKXRocm93IG5ldyBzdDt0cnl7Uj10KFIsaCk7fWNhdGNoKFUpe1I9JGgoVSk7fVIhPT1TbiYmKHR5cGVvZigoST1SKT09PW51bGx8fEk9PT12b2lkIDA/dm9pZCAwOkkuY2F0Y2gpPT1cImZ1bmN0aW9uXCImJlIuY2F0Y2goRSksdS5wdXNoKFIpLGcmJihnKCksZz1udWxsKSwhdyYmdS5sZW5ndGgmJnUubGVuZ3RoPj1yJiZhd2FpdCBuZXcgV2goVT0+e3k9VTt9KSk7fXUucHVzaChIaCk7fWNhdGNoKFIpe2xldCBVPSRoKFIpO1YwKFUsdm9pZCAwLEUpLHUucHVzaChVKTt9ZmluYWxseXt2YXIgQzt3PSEwLGcmJihnKCksZz1udWxsKSxlPT1udWxsfHwoQz1lLnNpZ25hbCk9PT1udWxsfHxDPT09dm9pZCAwfHxDLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLGQpO319UygpO3RyeXtmb3IoOzspe2Zvcig7dS5sZW5ndGg+MDspe2xldCBJPWF3YWl0IHVbMF07aWYoST09PUhoKXJldHVybjtpZihjLmFib3J0ZWQpdGhyb3cgbmV3IHN0O0khPT1TbiYmKHlpZWxkIEkpLHUuc2hpZnQoKSx5JiYoeSgpLHk9bnVsbCk7fWF3YWl0IG5ldyBXaChJPT57Zz1JO30pO319ZmluYWxseXtzLmFib3J0KCksdz0hMCx5JiYoeSgpLHk9bnVsbCk7fX0uY2FsbCh0aGlzKX1mdW5jdGlvbiBLMCh0PXZvaWQgMCl7cmV0dXJuIHQhPW51bGwmJnByKHQsXCJvcHRpb25zXCIpLHQ/LnNpZ25hbCE9bnVsbCYmZHIodC5zaWduYWwsXCJvcHRpb25zLnNpZ25hbFwiKSxhc3luYyBmdW5jdGlvbiooKXtsZXQgcj0wO2ZvciBhd2FpdChsZXQgbiBvZiB0aGlzKXt2YXIgaTtpZih0IT1udWxsJiYoaT10LnNpZ25hbCkhPT1udWxsJiZpIT09dm9pZCAwJiZpLmFib3J0ZWQpdGhyb3cgbmV3IHN0KHtjYXVzZTp0LnNpZ25hbC5yZWFzb259KTt5aWVsZCBbcisrLG5dO319LmNhbGwodGhpcyl9YXN5bmMgZnVuY3Rpb24gS2godCxlPXZvaWQgMCl7Zm9yIGF3YWl0KGxldCByIG9mIE9vLmNhbGwodGhpcyx0LGUpKXJldHVybiAhMDtyZXR1cm4gITF9YXN5bmMgZnVuY3Rpb24gRzAodCxlPXZvaWQgMCl7aWYodHlwZW9mIHQhPVwiZnVuY3Rpb25cIil0aHJvdyBuZXcgX2koXCJmblwiLFtcIkZ1bmN0aW9uXCIsXCJBc3luY0Z1bmN0aW9uXCJdLHQpO3JldHVybiAhYXdhaXQgS2guY2FsbCh0aGlzLGFzeW5jKC4uLnIpPT4hYXdhaXQgdCguLi5yKSxlKX1hc3luYyBmdW5jdGlvbiBRMCh0LGUpe2ZvciBhd2FpdChsZXQgciBvZiBPby5jYWxsKHRoaXMsdCxlKSlyZXR1cm4gcn1hc3luYyBmdW5jdGlvbiBZMCh0LGUpe2lmKHR5cGVvZiB0IT1cImZ1bmN0aW9uXCIpdGhyb3cgbmV3IF9pKFwiZm5cIixbXCJGdW5jdGlvblwiLFwiQXN5bmNGdW5jdGlvblwiXSx0KTthc3luYyBmdW5jdGlvbiByKGksbil7cmV0dXJuIGF3YWl0IHQoaSxuKSxTbn1mb3IgYXdhaXQobGV0IGkgb2YgQW4uY2FsbCh0aGlzLHIsZSkpO31mdW5jdGlvbiBPbyh0LGUpe2lmKHR5cGVvZiB0IT1cImZ1bmN0aW9uXCIpdGhyb3cgbmV3IF9pKFwiZm5cIixbXCJGdW5jdGlvblwiLFwiQXN5bmNGdW5jdGlvblwiXSx0KTthc3luYyBmdW5jdGlvbiByKGksbil7cmV0dXJuIGF3YWl0IHQoaSxuKT9pOlNufXJldHVybiBBbi5jYWxsKHRoaXMscixlKX12YXIgUG89Y2xhc3MgZXh0ZW5kcyBrMHtjb25zdHJ1Y3Rvcigpe3N1cGVyKFwicmVkdWNlXCIpLHRoaXMubWVzc2FnZT1cIlJlZHVjZSBvZiBhbiBlbXB0eSBzdHJlYW0gcmVxdWlyZXMgYW4gaW5pdGlhbCB2YWx1ZVwiO319O2FzeW5jIGZ1bmN0aW9uIEowKHQsZSxyKXt2YXIgaTtpZih0eXBlb2YgdCE9XCJmdW5jdGlvblwiKXRocm93IG5ldyBfaShcInJlZHVjZXJcIixbXCJGdW5jdGlvblwiLFwiQXN5bmNGdW5jdGlvblwiXSx0KTtyIT1udWxsJiZwcihyLFwib3B0aW9uc1wiKSxyPy5zaWduYWwhPW51bGwmJmRyKHIuc2lnbmFsLFwib3B0aW9ucy5zaWduYWxcIik7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xO2lmKHIhPW51bGwmJihpPXIuc2lnbmFsKSE9PW51bGwmJmkhPT12b2lkIDAmJmkuYWJvcnRlZCl7bGV0IGM9bmV3IHN0KHZvaWQgMCx7Y2F1c2U6ci5zaWduYWwucmVhc29ufSk7dGhyb3cgdGhpcy5vbmNlKFwiZXJyb3JcIiwoKT0+e30pLGF3YWl0IFUwKHRoaXMuZGVzdHJveShjKSksY31sZXQgbz1uZXcgVmgscz1vLnNpZ25hbDtpZihyIT1udWxsJiZyLnNpZ25hbCl7bGV0IGM9e29uY2U6ITAsW0wwXTp0aGlzfTtyLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwoKT0+by5hYm9ydCgpLGMpO31sZXQgYT0hMTt0cnl7Zm9yIGF3YWl0KGxldCBjIG9mIHRoaXMpe3ZhciB1O2lmKGE9ITAsciE9bnVsbCYmKHU9ci5zaWduYWwpIT09bnVsbCYmdSE9PXZvaWQgMCYmdS5hYm9ydGVkKXRocm93IG5ldyBzdDtuP2U9YXdhaXQgdChlLGMse3NpZ25hbDpzfSk6KGU9YyxuPSEwKTt9aWYoIWEmJiFuKXRocm93IG5ldyBQb31maW5hbGx5e28uYWJvcnQoKTt9cmV0dXJuIGV9YXN5bmMgZnVuY3Rpb24gWDAodCl7dCE9bnVsbCYmcHIodCxcIm9wdGlvbnNcIiksdD8uc2lnbmFsIT1udWxsJiZkcih0LnNpZ25hbCxcIm9wdGlvbnMuc2lnbmFsXCIpO2xldCBlPVtdO2ZvciBhd2FpdChsZXQgaSBvZiB0aGlzKXt2YXIgcjtpZih0IT1udWxsJiYocj10LnNpZ25hbCkhPT1udWxsJiZyIT09dm9pZCAwJiZyLmFib3J0ZWQpdGhyb3cgbmV3IHN0KHZvaWQgMCx7Y2F1c2U6dC5zaWduYWwucmVhc29ufSk7RjAoZSxpKTt9cmV0dXJuIGV9ZnVuY3Rpb24gWjAodCxlKXtsZXQgcj1Bbi5jYWxsKHRoaXMsdCxlKTtyZXR1cm4gYXN5bmMgZnVuY3Rpb24qKCl7Zm9yIGF3YWl0KGxldCBuIG9mIHIpeWllbGQqbjt9LmNhbGwodGhpcyl9ZnVuY3Rpb24gR2godCl7aWYodD0kMCh0KSxIMCh0KSlyZXR1cm4gMDtpZih0PDApdGhyb3cgbmV3IHgwKFwibnVtYmVyXCIsXCI+PSAwXCIsdCk7cmV0dXJuIHR9ZnVuY3Rpb24gZW0odCxlPXZvaWQgMCl7cmV0dXJuIGUhPW51bGwmJnByKGUsXCJvcHRpb25zXCIpLGU/LnNpZ25hbCE9bnVsbCYmZHIoZS5zaWduYWwsXCJvcHRpb25zLnNpZ25hbFwiKSx0PUdoKHQpLGFzeW5jIGZ1bmN0aW9uKigpe3ZhciBpO2lmKGUhPW51bGwmJihpPWUuc2lnbmFsKSE9PW51bGwmJmkhPT12b2lkIDAmJmkuYWJvcnRlZCl0aHJvdyBuZXcgc3Q7Zm9yIGF3YWl0KGxldCBvIG9mIHRoaXMpe3ZhciBuO2lmKGUhPW51bGwmJihuPWUuc2lnbmFsKSE9PW51bGwmJm4hPT12b2lkIDAmJm4uYWJvcnRlZCl0aHJvdyBuZXcgc3Q7dC0tPD0wJiYoeWllbGQgbyk7fX0uY2FsbCh0aGlzKX1mdW5jdGlvbiB0bSh0LGU9dm9pZCAwKXtyZXR1cm4gZSE9bnVsbCYmcHIoZSxcIm9wdGlvbnNcIiksZT8uc2lnbmFsIT1udWxsJiZkcihlLnNpZ25hbCxcIm9wdGlvbnMuc2lnbmFsXCIpLHQ9R2godCksYXN5bmMgZnVuY3Rpb24qKCl7dmFyIGk7aWYoZSE9bnVsbCYmKGk9ZS5zaWduYWwpIT09bnVsbCYmaSE9PXZvaWQgMCYmaS5hYm9ydGVkKXRocm93IG5ldyBzdDtmb3IgYXdhaXQobGV0IG8gb2YgdGhpcyl7dmFyIG47aWYoZSE9bnVsbCYmKG49ZS5zaWduYWwpIT09bnVsbCYmbiE9PXZvaWQgMCYmbi5hYm9ydGVkKXRocm93IG5ldyBzdDtpZih0LS0gPjApeWllbGQgbztlbHNlIHJldHVybn19LmNhbGwodGhpcyl9a28uZXhwb3J0cy5zdHJlYW1SZXR1cm5pbmdPcGVyYXRvcnM9e2FzSW5kZXhlZFBhaXJzOkswLGRyb3A6ZW0sZmlsdGVyOk9vLGZsYXRNYXA6WjAsbWFwOkFuLHRha2U6dG0sY29tcG9zZTp6MH07a28uZXhwb3J0cy5wcm9taXNlUmV0dXJuaW5nT3BlcmF0b3JzPXtldmVyeTpHMCxmb3JFYWNoOlkwLHJlZHVjZTpKMCx0b0FycmF5OlgwLHNvbWU6S2gsZmluZDpRMH07fSk7dmFyIHhvPU0oKHhDLFloKT0+e3YoKTttKCk7XygpO3ZhcntBcnJheVByb3RvdHlwZVBvcDpybSxQcm9taXNlOmltfT1jZSgpLHtpc0l0ZXJhYmxlOm5tLGlzTm9kZVN0cmVhbTpzbSxpc1dlYlN0cmVhbTpvbX09dHQoKSx7cGlwZWxpbmVJbXBsOmFtfT1tbigpLHtmaW5pc2hlZDpsbX09bXQoKTtNbygpO2Z1bmN0aW9uIHVtKC4uLnQpe3JldHVybiBuZXcgaW0oKGUscik9PntsZXQgaSxuLG89dFt0Lmxlbmd0aC0xXTtpZihvJiZ0eXBlb2Ygbz09XCJvYmplY3RcIiYmIXNtKG8pJiYhbm0obykmJiFvbShvKSl7bGV0IHM9cm0odCk7aT1zLnNpZ25hbCxuPXMuZW5kO31hbSh0LChzLGEpPT57cz9yKHMpOmUoYSk7fSx7c2lnbmFsOmksZW5kOm59KTt9KX1ZaC5leHBvcnRzPXtmaW5pc2hlZDpsbSxwaXBlbGluZTp1bX07fSk7dmFyIE1vPU0oKCRDLHNkKT0+e3YoKTttKCk7XygpO3ZhcntCdWZmZXI6Zm19PSh5ZSgpLFgoX2UpKSx7T2JqZWN0RGVmaW5lUHJvcGVydHk6VHQsT2JqZWN0S2V5czpaaCxSZWZsZWN0QXBwbHk6ZWR9PWNlKCkse3Byb21pc2lmeTp7Y3VzdG9tOnRkfX09SmUoKSx7c3RyZWFtUmV0dXJuaW5nT3BlcmF0b3JzOkpoLHByb21pc2VSZXR1cm5pbmdPcGVyYXRvcnM6WGh9PVFoKCkse2NvZGVzOntFUlJfSUxMRUdBTF9DT05TVFJVQ1RPUjpyZH19PVNlKCksY209Qm8oKSx7cGlwZWxpbmU6aWR9PW1uKCkse2Rlc3Ryb3llcjpobX09dHIoKSxuZD1tdCgpLExvPXhvKCksVW89dHQoKSxsZT1zZC5leHBvcnRzPXRuKCkuU3RyZWFtO2xlLmlzRGlzdHVyYmVkPVVvLmlzRGlzdHVyYmVkO2xlLmlzRXJyb3JlZD1Vby5pc0Vycm9yZWQ7bGUuaXNSZWFkYWJsZT1Vby5pc1JlYWRhYmxlO2xlLlJlYWRhYmxlPWRpKCk7Zm9yKGxldCB0IG9mIFpoKEpoKSl7bGV0IHI9ZnVuY3Rpb24oLi4uaSl7aWYobmV3LnRhcmdldCl0aHJvdyByZCgpO3JldHVybiBsZS5SZWFkYWJsZS5mcm9tKGVkKGUsdGhpcyxpKSl9O2xldCBlPUpoW3RdO1R0KHIsXCJuYW1lXCIse19fcHJvdG9fXzpudWxsLHZhbHVlOmUubmFtZX0pLFR0KHIsXCJsZW5ndGhcIix7X19wcm90b19fOm51bGwsdmFsdWU6ZS5sZW5ndGh9KSxUdChsZS5SZWFkYWJsZS5wcm90b3R5cGUsdCx7X19wcm90b19fOm51bGwsdmFsdWU6cixlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pO31mb3IobGV0IHQgb2YgWmgoWGgpKXtsZXQgcj1mdW5jdGlvbiguLi5uKXtpZihuZXcudGFyZ2V0KXRocm93IHJkKCk7cmV0dXJuIGVkKGUsdGhpcyxuKX07bGV0IGU9WGhbdF07VHQocixcIm5hbWVcIix7X19wcm90b19fOm51bGwsdmFsdWU6ZS5uYW1lfSksVHQocixcImxlbmd0aFwiLHtfX3Byb3RvX186bnVsbCx2YWx1ZTplLmxlbmd0aH0pLFR0KGxlLlJlYWRhYmxlLnByb3RvdHlwZSx0LHtfX3Byb3RvX186bnVsbCx2YWx1ZTpyLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk7fWxlLldyaXRhYmxlPXVvKCk7bGUuRHVwbGV4PW50KCk7bGUuVHJhbnNmb3JtPWJvKCk7bGUuUGFzc1Rocm91Z2g9X28oKTtsZS5waXBlbGluZT1pZDt2YXJ7YWRkQWJvcnRTaWduYWw6ZG19PWNpKCk7bGUuYWRkQWJvcnRTaWduYWw9ZG07bGUuZmluaXNoZWQ9bmQ7bGUuZGVzdHJveT1obTtsZS5jb21wb3NlPWNtO1R0KGxlLFwicHJvbWlzZXNcIix7X19wcm90b19fOm51bGwsY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0KCl7cmV0dXJuIExvfX0pO1R0KGlkLHRkLHtfX3Byb3RvX186bnVsbCxlbnVtZXJhYmxlOiEwLGdldCgpe3JldHVybiBMby5waXBlbGluZX19KTtUdChuZCx0ZCx7X19wcm90b19fOm51bGwsZW51bWVyYWJsZTohMCxnZXQoKXtyZXR1cm4gTG8uZmluaXNoZWR9fSk7bGUuU3RyZWFtPWxlO2xlLl9pc1VpbnQ4QXJyYXk9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBVaW50OEFycmF5fTtsZS5fdWludDhBcnJheVRvQnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiBmbS5mcm9tKGUuYnVmZmVyLGUuYnl0ZU9mZnNldCxlLmJ5dGVMZW5ndGgpfTt9KTt2YXIgRHQ9TSgoWkMsdWUpPT57digpO20oKTtfKCk7dmFyIGhlPU1vKCkscG09eG8oKSxnbT1oZS5SZWFkYWJsZS5kZXN0cm95O3VlLmV4cG9ydHM9aGUuUmVhZGFibGU7dWUuZXhwb3J0cy5fdWludDhBcnJheVRvQnVmZmVyPWhlLl91aW50OEFycmF5VG9CdWZmZXI7dWUuZXhwb3J0cy5faXNVaW50OEFycmF5PWhlLl9pc1VpbnQ4QXJyYXk7dWUuZXhwb3J0cy5pc0Rpc3R1cmJlZD1oZS5pc0Rpc3R1cmJlZDt1ZS5leHBvcnRzLmlzRXJyb3JlZD1oZS5pc0Vycm9yZWQ7dWUuZXhwb3J0cy5pc1JlYWRhYmxlPWhlLmlzUmVhZGFibGU7dWUuZXhwb3J0cy5SZWFkYWJsZT1oZS5SZWFkYWJsZTt1ZS5leHBvcnRzLldyaXRhYmxlPWhlLldyaXRhYmxlO3VlLmV4cG9ydHMuRHVwbGV4PWhlLkR1cGxleDt1ZS5leHBvcnRzLlRyYW5zZm9ybT1oZS5UcmFuc2Zvcm07dWUuZXhwb3J0cy5QYXNzVGhyb3VnaD1oZS5QYXNzVGhyb3VnaDt1ZS5leHBvcnRzLmFkZEFib3J0U2lnbmFsPWhlLmFkZEFib3J0U2lnbmFsO3VlLmV4cG9ydHMuZmluaXNoZWQ9aGUuZmluaXNoZWQ7dWUuZXhwb3J0cy5kZXN0cm95PWhlLmRlc3Ryb3k7dWUuZXhwb3J0cy5kZXN0cm95PWdtO3VlLmV4cG9ydHMucGlwZWxpbmU9aGUucGlwZWxpbmU7dWUuZXhwb3J0cy5jb21wb3NlPWhlLmNvbXBvc2U7T2JqZWN0LmRlZmluZVByb3BlcnR5KGhlLFwicHJvbWlzZXNcIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0KCl7cmV0dXJuIHBtfX0pO3VlLmV4cG9ydHMuU3RyZWFtPWhlLlN0cmVhbTt1ZS5leHBvcnRzLmRlZmF1bHQ9dWUuZXhwb3J0czt9KTt2YXIgb2Q9TSgodUIscW8pPT57digpO20oKTtfKCk7dHlwZW9mIE9iamVjdC5jcmVhdGU9PVwiZnVuY3Rpb25cIj9xby5leHBvcnRzPWZ1bmN0aW9uKGUscil7ciYmKGUuc3VwZXJfPXIsZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShyLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSkpO306cW8uZXhwb3J0cz1mdW5jdGlvbihlLHIpe2lmKHIpe2Uuc3VwZXJfPXI7dmFyIGk9ZnVuY3Rpb24oKXt9O2kucHJvdG90eXBlPXIucHJvdG90eXBlLGUucHJvdG90eXBlPW5ldyBpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWU7fX07fSk7dmFyIHVkPU0oKF9CLGxkKT0+e3YoKTttKCk7XygpO3ZhcntCdWZmZXI6emV9PSh5ZSgpLFgoX2UpKSxhZD1TeW1ib2wuZm9yKFwiQnVmZmVyTGlzdFwiKTtmdW5jdGlvbiBlZSh0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBlZSkpcmV0dXJuIG5ldyBlZSh0KTtlZS5faW5pdC5jYWxsKHRoaXMsdCk7fWVlLl9pbml0PWZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGFkLHt2YWx1ZTohMH0pLHRoaXMuX2J1ZnM9W10sdGhpcy5sZW5ndGg9MCxlJiZ0aGlzLmFwcGVuZChlKTt9O2VlLnByb3RvdHlwZS5fbmV3PWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZWUoZSl9O2VlLnByb3RvdHlwZS5fb2Zmc2V0PWZ1bmN0aW9uKGUpe2lmKGU9PT0wKXJldHVybiBbMCwwXTtsZXQgcj0wO2ZvcihsZXQgaT0wO2k8dGhpcy5fYnVmcy5sZW5ndGg7aSsrKXtsZXQgbj1yK3RoaXMuX2J1ZnNbaV0ubGVuZ3RoO2lmKGU8bnx8aT09PXRoaXMuX2J1ZnMubGVuZ3RoLTEpcmV0dXJuIFtpLGUtcl07cj1uO319O2VlLnByb3RvdHlwZS5fcmV2ZXJzZU9mZnNldD1mdW5jdGlvbih0KXtsZXQgZT10WzBdLHI9dFsxXTtmb3IobGV0IGk9MDtpPGU7aSsrKXIrPXRoaXMuX2J1ZnNbaV0ubGVuZ3RoO3JldHVybiByfTtlZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe2lmKGU+dGhpcy5sZW5ndGh8fGU8MClyZXR1cm47bGV0IHI9dGhpcy5fb2Zmc2V0KGUpO3JldHVybiB0aGlzLl9idWZzW3JbMF1dW3JbMV1dfTtlZS5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdHlwZW9mIGU9PVwibnVtYmVyXCImJmU8MCYmKGUrPXRoaXMubGVuZ3RoKSx0eXBlb2Ygcj09XCJudW1iZXJcIiYmcjwwJiYocis9dGhpcy5sZW5ndGgpLHRoaXMuY29weShudWxsLDAsZSxyKX07ZWUucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZSxyLGksbil7aWYoKHR5cGVvZiBpIT1cIm51bWJlclwifHxpPDApJiYoaT0wKSwodHlwZW9mIG4hPVwibnVtYmVyXCJ8fG4+dGhpcy5sZW5ndGgpJiYobj10aGlzLmxlbmd0aCksaT49dGhpcy5sZW5ndGh8fG48PTApcmV0dXJuIGV8fHplLmFsbG9jKDApO2xldCBvPSEhZSxzPXRoaXMuX29mZnNldChpKSxhPW4taSx1PWEsYz1vJiZyfHwwLGg9c1sxXTtpZihpPT09MCYmbj09PXRoaXMubGVuZ3RoKXtpZighbylyZXR1cm4gdGhpcy5fYnVmcy5sZW5ndGg9PT0xP3RoaXMuX2J1ZnNbMF06emUuY29uY2F0KHRoaXMuX2J1ZnMsdGhpcy5sZW5ndGgpO2ZvcihsZXQgZD0wO2Q8dGhpcy5fYnVmcy5sZW5ndGg7ZCsrKXRoaXMuX2J1ZnNbZF0uY29weShlLGMpLGMrPXRoaXMuX2J1ZnNbZF0ubGVuZ3RoO3JldHVybiBlfWlmKHU8PXRoaXMuX2J1ZnNbc1swXV0ubGVuZ3RoLWgpcmV0dXJuIG8/dGhpcy5fYnVmc1tzWzBdXS5jb3B5KGUscixoLGgrdSk6dGhpcy5fYnVmc1tzWzBdXS5zbGljZShoLGgrdSk7b3x8KGU9emUuYWxsb2NVbnNhZmUoYSkpO2ZvcihsZXQgZD1zWzBdO2Q8dGhpcy5fYnVmcy5sZW5ndGg7ZCsrKXtsZXQgZz10aGlzLl9idWZzW2RdLmxlbmd0aC1oO2lmKHU+Zyl0aGlzLl9idWZzW2RdLmNvcHkoZSxjLGgpLGMrPWc7ZWxzZSB7dGhpcy5fYnVmc1tkXS5jb3B5KGUsYyxoLGgrdSksYys9ZzticmVha311LT1nLGgmJihoPTApO31yZXR1cm4gZS5sZW5ndGg+Yz9lLnNsaWNlKDAsYyk6ZX07ZWUucHJvdG90eXBlLnNoYWxsb3dTbGljZT1mdW5jdGlvbihlLHIpe2lmKGU9ZXx8MCxyPXR5cGVvZiByIT1cIm51bWJlclwiP3RoaXMubGVuZ3RoOnIsZTwwJiYoZSs9dGhpcy5sZW5ndGgpLHI8MCYmKHIrPXRoaXMubGVuZ3RoKSxlPT09cilyZXR1cm4gdGhpcy5fbmV3KCk7bGV0IGk9dGhpcy5fb2Zmc2V0KGUpLG49dGhpcy5fb2Zmc2V0KHIpLG89dGhpcy5fYnVmcy5zbGljZShpWzBdLG5bMF0rMSk7cmV0dXJuIG5bMV09PT0wP28ucG9wKCk6b1tvLmxlbmd0aC0xXT1vW28ubGVuZ3RoLTFdLnNsaWNlKDAsblsxXSksaVsxXSE9PTAmJihvWzBdPW9bMF0uc2xpY2UoaVsxXSkpLHRoaXMuX25ldyhvKX07ZWUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGUscixpKXtyZXR1cm4gdGhpcy5zbGljZShyLGkpLnRvU3RyaW5nKGUpfTtlZS5wcm90b3R5cGUuY29uc3VtZT1mdW5jdGlvbihlKXtpZihlPU1hdGgudHJ1bmMoZSksTnVtYmVyLmlzTmFOKGUpfHxlPD0wKXJldHVybiB0aGlzO2Zvcig7dGhpcy5fYnVmcy5sZW5ndGg7KWlmKGU+PXRoaXMuX2J1ZnNbMF0ubGVuZ3RoKWUtPXRoaXMuX2J1ZnNbMF0ubGVuZ3RoLHRoaXMubGVuZ3RoLT10aGlzLl9idWZzWzBdLmxlbmd0aCx0aGlzLl9idWZzLnNoaWZ0KCk7ZWxzZSB7dGhpcy5fYnVmc1swXT10aGlzLl9idWZzWzBdLnNsaWNlKGUpLHRoaXMubGVuZ3RoLT1lO2JyZWFrfXJldHVybiB0aGlzfTtlZS5wcm90b3R5cGUuZHVwbGljYXRlPWZ1bmN0aW9uKCl7bGV0IGU9dGhpcy5fbmV3KCk7Zm9yKGxldCByPTA7cjx0aGlzLl9idWZzLmxlbmd0aDtyKyspZS5hcHBlbmQodGhpcy5fYnVmc1tyXSk7cmV0dXJuIGV9O2VlLnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24oZSl7aWYoZT09bnVsbClyZXR1cm4gdGhpcztpZihlLmJ1ZmZlcil0aGlzLl9hcHBlbmRCdWZmZXIoemUuZnJvbShlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQsZS5ieXRlTGVuZ3RoKSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKWZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7cisrKXRoaXMuYXBwZW5kKGVbcl0pO2Vsc2UgaWYodGhpcy5faXNCdWZmZXJMaXN0KGUpKWZvcihsZXQgcj0wO3I8ZS5fYnVmcy5sZW5ndGg7cisrKXRoaXMuYXBwZW5kKGUuX2J1ZnNbcl0pO2Vsc2UgdHlwZW9mIGU9PVwibnVtYmVyXCImJihlPWUudG9TdHJpbmcoKSksdGhpcy5fYXBwZW5kQnVmZmVyKHplLmZyb20oZSkpO3JldHVybiB0aGlzfTtlZS5wcm90b3R5cGUuX2FwcGVuZEJ1ZmZlcj1mdW5jdGlvbihlKXt0aGlzLl9idWZzLnB1c2goZSksdGhpcy5sZW5ndGgrPWUubGVuZ3RoO307ZWUucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24odCxlLHIpe2lmKHI9PT12b2lkIDAmJnR5cGVvZiBlPT1cInN0cmluZ1wiJiYocj1lLGU9dm9pZCAwKSx0eXBlb2YgdD09XCJmdW5jdGlvblwifHxBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInZhbHVlXCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQnVmZmVyTGlzdCwgb3IgVWludDhBcnJheS4nKTtpZih0eXBlb2YgdD09XCJudW1iZXJcIj90PXplLmZyb20oW3RdKTp0eXBlb2YgdD09XCJzdHJpbmdcIj90PXplLmZyb20odCxyKTp0aGlzLl9pc0J1ZmZlckxpc3QodCk/dD10LnNsaWNlKCk6QXJyYXkuaXNBcnJheSh0LmJ1ZmZlcik/dD16ZS5mcm9tKHQuYnVmZmVyLHQuYnl0ZU9mZnNldCx0LmJ5dGVMZW5ndGgpOnplLmlzQnVmZmVyKHQpfHwodD16ZS5mcm9tKHQpKSxlPU51bWJlcihlfHwwKSxpc05hTihlKSYmKGU9MCksZTwwJiYoZT10aGlzLmxlbmd0aCtlKSxlPDAmJihlPTApLHQubGVuZ3RoPT09MClyZXR1cm4gZT50aGlzLmxlbmd0aD90aGlzLmxlbmd0aDplO2xldCBpPXRoaXMuX29mZnNldChlKSxuPWlbMF0sbz1pWzFdO2Zvcig7bjx0aGlzLl9idWZzLmxlbmd0aDtuKyspe2xldCBzPXRoaXMuX2J1ZnNbbl07Zm9yKDtvPHMubGVuZ3RoOylpZihzLmxlbmd0aC1vPj10Lmxlbmd0aCl7bGV0IHU9cy5pbmRleE9mKHQsbyk7aWYodSE9PS0xKXJldHVybiB0aGlzLl9yZXZlcnNlT2Zmc2V0KFtuLHVdKTtvPXMubGVuZ3RoLXQubGVuZ3RoKzE7fWVsc2Uge2xldCB1PXRoaXMuX3JldmVyc2VPZmZzZXQoW24sb10pO2lmKHRoaXMuX21hdGNoKHUsdCkpcmV0dXJuIHU7bysrO31vPTA7fXJldHVybiAtMX07ZWUucHJvdG90eXBlLl9tYXRjaD1mdW5jdGlvbih0LGUpe2lmKHRoaXMubGVuZ3RoLXQ8ZS5sZW5ndGgpcmV0dXJuICExO2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKHRoaXMuZ2V0KHQrcikhPT1lW3JdKXJldHVybiAhMTtyZXR1cm4gITB9OyhmdW5jdGlvbigpe2xldCB0PXtyZWFkRG91YmxlQkU6OCxyZWFkRG91YmxlTEU6OCxyZWFkRmxvYXRCRTo0LHJlYWRGbG9hdExFOjQscmVhZEJpZ0ludDY0QkU6OCxyZWFkQmlnSW50NjRMRTo4LHJlYWRCaWdVSW50NjRCRTo4LHJlYWRCaWdVSW50NjRMRTo4LHJlYWRJbnQzMkJFOjQscmVhZEludDMyTEU6NCxyZWFkVUludDMyQkU6NCxyZWFkVUludDMyTEU6NCxyZWFkSW50MTZCRToyLHJlYWRJbnQxNkxFOjIscmVhZFVJbnQxNkJFOjIscmVhZFVJbnQxNkxFOjIscmVhZEludDg6MSxyZWFkVUludDg6MSxyZWFkSW50QkU6bnVsbCxyZWFkSW50TEU6bnVsbCxyZWFkVUludEJFOm51bGwscmVhZFVJbnRMRTpudWxsfTtmb3IobGV0IGUgaW4gdCkoZnVuY3Rpb24ocil7dFtyXT09PW51bGw/ZWUucHJvdG90eXBlW3JdPWZ1bmN0aW9uKGksbil7cmV0dXJuIHRoaXMuc2xpY2UoaSxpK24pW3JdKDAsbil9OmVlLnByb3RvdHlwZVtyXT1mdW5jdGlvbihpPTApe3JldHVybiB0aGlzLnNsaWNlKGksaSt0W3JdKVtyXSgwKX07fSkoZSk7fSkoKTtlZS5wcm90b3R5cGUuX2lzQnVmZmVyTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGVlfHxlZS5pc0J1ZmZlckxpc3QoZSl9O2VlLmlzQnVmZmVyTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbCYmZVthZF19O2xkLmV4cG9ydHM9ZWU7fSk7dmFyIGZkPU0oKEJCLEluKT0+e3YoKTttKCk7XygpO3ZhciBEbz1EdCgpLkR1cGxleCx5bT1vZCgpLG1pPXVkKCk7ZnVuY3Rpb24gRWUodCl7aWYoISh0aGlzIGluc3RhbmNlb2YgRWUpKXJldHVybiBuZXcgRWUodCk7aWYodHlwZW9mIHQ9PVwiZnVuY3Rpb25cIil7dGhpcy5fY2FsbGJhY2s9dDtsZXQgZT1mdW5jdGlvbihpKXt0aGlzLl9jYWxsYmFjayYmKHRoaXMuX2NhbGxiYWNrKGkpLHRoaXMuX2NhbGxiYWNrPW51bGwpO30uYmluZCh0aGlzKTt0aGlzLm9uKFwicGlwZVwiLGZ1bmN0aW9uKGkpe2kub24oXCJlcnJvclwiLGUpO30pLHRoaXMub24oXCJ1bnBpcGVcIixmdW5jdGlvbihpKXtpLnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIixlKTt9KSx0PW51bGw7fW1pLl9pbml0LmNhbGwodGhpcyx0KSxEby5jYWxsKHRoaXMpO315bShFZSxEbyk7T2JqZWN0LmFzc2lnbihFZS5wcm90b3R5cGUsbWkucHJvdG90eXBlKTtFZS5wcm90b3R5cGUuX25ldz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IEVlKGUpfTtFZS5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKGUscixpKXt0aGlzLl9hcHBlbmRCdWZmZXIoZSksdHlwZW9mIGk9PVwiZnVuY3Rpb25cIiYmaSgpO307RWUucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmxlbmd0aClyZXR1cm4gdGhpcy5wdXNoKG51bGwpO2U9TWF0aC5taW4oZSx0aGlzLmxlbmd0aCksdGhpcy5wdXNoKHRoaXMuc2xpY2UoMCxlKSksdGhpcy5jb25zdW1lKGUpO307RWUucHJvdG90eXBlLmVuZD1mdW5jdGlvbihlKXtEby5wcm90b3R5cGUuZW5kLmNhbGwodGhpcyxlKSx0aGlzLl9jYWxsYmFjayYmKHRoaXMuX2NhbGxiYWNrKG51bGwsdGhpcy5zbGljZSgpKSx0aGlzLl9jYWxsYmFjaz1udWxsKTt9O0VlLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihlLHIpe3RoaXMuX2J1ZnMubGVuZ3RoPTAsdGhpcy5sZW5ndGg9MCxyKGUpO307RWUucHJvdG90eXBlLl9pc0J1ZmZlckxpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBFZXx8ZSBpbnN0YW5jZW9mIG1pfHxFZS5pc0J1ZmZlckxpc3QoZSl9O0VlLmlzQnVmZmVyTGlzdD1taS5pc0J1ZmZlckxpc3Q7SW4uZXhwb3J0cz1FZTtJbi5leHBvcnRzLkJ1ZmZlckxpc3RTdHJlYW09RWU7SW4uZXhwb3J0cy5CdWZmZXJMaXN0PW1pO30pO3ZhciBoZD1NKChEQixjZCk9Pnt2KCk7bSgpO18oKTt2YXIgam89Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmNtZD1udWxsLHRoaXMucmV0YWluPSExLHRoaXMucW9zPTAsdGhpcy5kdXA9ITEsdGhpcy5sZW5ndGg9LTEsdGhpcy50b3BpYz1udWxsLHRoaXMucGF5bG9hZD1udWxsO319O2NkLmV4cG9ydHM9am87fSk7dmFyIEZvPU0oKFFCLGRkKT0+e3YoKTttKCk7XygpO3ZhciBMPWRkLmV4cG9ydHMse0J1ZmZlcjpPZX09KHllKCksWChfZSkpO0wudHlwZXM9ezA6XCJyZXNlcnZlZFwiLDE6XCJjb25uZWN0XCIsMjpcImNvbm5hY2tcIiwzOlwicHVibGlzaFwiLDQ6XCJwdWJhY2tcIiw1OlwicHVicmVjXCIsNjpcInB1YnJlbFwiLDc6XCJwdWJjb21wXCIsODpcInN1YnNjcmliZVwiLDk6XCJzdWJhY2tcIiwxMDpcInVuc3Vic2NyaWJlXCIsMTE6XCJ1bnN1YmFja1wiLDEyOlwicGluZ3JlcVwiLDEzOlwicGluZ3Jlc3BcIiwxNDpcImRpc2Nvbm5lY3RcIiwxNTpcImF1dGhcIn07TC5yZXF1aXJlZEhlYWRlckZsYWdzPXsxOjAsMjowLDQ6MCw1OjAsNjoyLDc6MCw4OjIsOTowLDEwOjIsMTE6MCwxMjowLDEzOjAsMTQ6MCwxNTowfTtMLnJlcXVpcmVkSGVhZGVyRmxhZ3NFcnJvcnM9e307Zm9yKGxldCB0IGluIEwucmVxdWlyZWRIZWFkZXJGbGFncyl7bGV0IGU9TC5yZXF1aXJlZEhlYWRlckZsYWdzW3RdO0wucmVxdWlyZWRIZWFkZXJGbGFnc0Vycm9yc1t0XT1cIkludmFsaWQgaGVhZGVyIGZsYWcgYml0cywgbXVzdCBiZSAweFwiK2UudG9TdHJpbmcoMTYpK1wiIGZvciBcIitMLnR5cGVzW3RdK1wiIHBhY2tldFwiO31MLmNvZGVzPXt9O2ZvcihsZXQgdCBpbiBMLnR5cGVzKXtsZXQgZT1MLnR5cGVzW3RdO0wuY29kZXNbZV09dDt9TC5DTURfU0hJRlQ9NDtMLkNNRF9NQVNLPTI0MDtMLkRVUF9NQVNLPTg7TC5RT1NfTUFTSz0zO0wuUU9TX1NISUZUPTE7TC5SRVRBSU5fTUFTSz0xO0wuVkFSQllURUlOVF9NQVNLPTEyNztMLlZBUkJZVEVJTlRfRklOX01BU0s9MTI4O0wuVkFSQllURUlOVF9NQVg9MjY4NDM1NDU1O0wuU0VTU0lPTlBSRVNFTlRfTUFTSz0xO0wuU0VTU0lPTlBSRVNFTlRfSEVBREVSPU9lLmZyb20oW0wuU0VTU0lPTlBSRVNFTlRfTUFTS10pO0wuQ09OTkFDS19IRUFERVI9T2UuZnJvbShbTC5jb2Rlcy5jb25uYWNrPDxMLkNNRF9TSElGVF0pO0wuVVNFUk5BTUVfTUFTSz0xMjg7TC5QQVNTV09SRF9NQVNLPTY0O0wuV0lMTF9SRVRBSU5fTUFTSz0zMjtMLldJTExfUU9TX01BU0s9MjQ7TC5XSUxMX1FPU19TSElGVD0zO0wuV0lMTF9GTEFHX01BU0s9NDtMLkNMRUFOX1NFU1NJT05fTUFTSz0yO0wuQ09OTkVDVF9IRUFERVI9T2UuZnJvbShbTC5jb2Rlcy5jb25uZWN0PDxMLkNNRF9TSElGVF0pO0wucHJvcGVydGllcz17c2Vzc2lvbkV4cGlyeUludGVydmFsOjE3LHdpbGxEZWxheUludGVydmFsOjI0LHJlY2VpdmVNYXhpbXVtOjMzLG1heGltdW1QYWNrZXRTaXplOjM5LHRvcGljQWxpYXNNYXhpbXVtOjM0LHJlcXVlc3RSZXNwb25zZUluZm9ybWF0aW9uOjI1LHJlcXVlc3RQcm9ibGVtSW5mb3JtYXRpb246MjMsdXNlclByb3BlcnRpZXM6MzgsYXV0aGVudGljYXRpb25NZXRob2Q6MjEsYXV0aGVudGljYXRpb25EYXRhOjIyLHBheWxvYWRGb3JtYXRJbmRpY2F0b3I6MSxtZXNzYWdlRXhwaXJ5SW50ZXJ2YWw6Mixjb250ZW50VHlwZTozLHJlc3BvbnNlVG9waWM6OCxjb3JyZWxhdGlvbkRhdGE6OSxtYXhpbXVtUW9TOjM2LHJldGFpbkF2YWlsYWJsZTozNyxhc3NpZ25lZENsaWVudElkZW50aWZpZXI6MTgscmVhc29uU3RyaW5nOjMxLHdpbGRjYXJkU3Vic2NyaXB0aW9uQXZhaWxhYmxlOjQwLHN1YnNjcmlwdGlvbklkZW50aWZpZXJzQXZhaWxhYmxlOjQxLHNoYXJlZFN1YnNjcmlwdGlvbkF2YWlsYWJsZTo0MixzZXJ2ZXJLZWVwQWxpdmU6MTkscmVzcG9uc2VJbmZvcm1hdGlvbjoyNixzZXJ2ZXJSZWZlcmVuY2U6MjgsdG9waWNBbGlhczozNSxzdWJzY3JpcHRpb25JZGVudGlmaWVyOjExfTtMLnByb3BlcnRpZXNDb2Rlcz17fTtmb3IobGV0IHQgaW4gTC5wcm9wZXJ0aWVzKXtsZXQgZT1MLnByb3BlcnRpZXNbdF07TC5wcm9wZXJ0aWVzQ29kZXNbZV09dDt9TC5wcm9wZXJ0aWVzVHlwZXM9e3Nlc3Npb25FeHBpcnlJbnRlcnZhbDpcImludDMyXCIsd2lsbERlbGF5SW50ZXJ2YWw6XCJpbnQzMlwiLHJlY2VpdmVNYXhpbXVtOlwiaW50MTZcIixtYXhpbXVtUGFja2V0U2l6ZTpcImludDMyXCIsdG9waWNBbGlhc01heGltdW06XCJpbnQxNlwiLHJlcXVlc3RSZXNwb25zZUluZm9ybWF0aW9uOlwiYnl0ZVwiLHJlcXVlc3RQcm9ibGVtSW5mb3JtYXRpb246XCJieXRlXCIsdXNlclByb3BlcnRpZXM6XCJwYWlyXCIsYXV0aGVudGljYXRpb25NZXRob2Q6XCJzdHJpbmdcIixhdXRoZW50aWNhdGlvbkRhdGE6XCJiaW5hcnlcIixwYXlsb2FkRm9ybWF0SW5kaWNhdG9yOlwiYnl0ZVwiLG1lc3NhZ2VFeHBpcnlJbnRlcnZhbDpcImludDMyXCIsY29udGVudFR5cGU6XCJzdHJpbmdcIixyZXNwb25zZVRvcGljOlwic3RyaW5nXCIsY29ycmVsYXRpb25EYXRhOlwiYmluYXJ5XCIsbWF4aW11bVFvUzpcImludDhcIixyZXRhaW5BdmFpbGFibGU6XCJieXRlXCIsYXNzaWduZWRDbGllbnRJZGVudGlmaWVyOlwic3RyaW5nXCIscmVhc29uU3RyaW5nOlwic3RyaW5nXCIsd2lsZGNhcmRTdWJzY3JpcHRpb25BdmFpbGFibGU6XCJieXRlXCIsc3Vic2NyaXB0aW9uSWRlbnRpZmllcnNBdmFpbGFibGU6XCJieXRlXCIsc2hhcmVkU3Vic2NyaXB0aW9uQXZhaWxhYmxlOlwiYnl0ZVwiLHNlcnZlcktlZXBBbGl2ZTpcImludDE2XCIscmVzcG9uc2VJbmZvcm1hdGlvbjpcInN0cmluZ1wiLHNlcnZlclJlZmVyZW5jZTpcInN0cmluZ1wiLHRvcGljQWxpYXM6XCJpbnQxNlwiLHN1YnNjcmlwdGlvbklkZW50aWZpZXI6XCJ2YXJcIn07ZnVuY3Rpb24ganQodCl7cmV0dXJuIFswLDEsMl0ubWFwKGU9PlswLDFdLm1hcChyPT5bMCwxXS5tYXAoaT0+e2xldCBuPU9lLmFsbG9jKDEpO3JldHVybiBuLndyaXRlVUludDgoTC5jb2Rlc1t0XTw8TC5DTURfU0hJRlR8KHI/TC5EVVBfTUFTSzowKXxlPDxMLlFPU19TSElGVHxpLDAsITApLG59KSkpfUwuUFVCTElTSF9IRUFERVI9anQoXCJwdWJsaXNoXCIpO0wuU1VCU0NSSUJFX0hFQURFUj1qdChcInN1YnNjcmliZVwiKTtMLlNVQlNDUklCRV9PUFRJT05TX1FPU19NQVNLPTM7TC5TVUJTQ1JJQkVfT1BUSU9OU19OTF9NQVNLPTE7TC5TVUJTQ1JJQkVfT1BUSU9OU19OTF9TSElGVD0yO0wuU1VCU0NSSUJFX09QVElPTlNfUkFQX01BU0s9MTtMLlNVQlNDUklCRV9PUFRJT05TX1JBUF9TSElGVD0zO0wuU1VCU0NSSUJFX09QVElPTlNfUkhfTUFTSz0zO0wuU1VCU0NSSUJFX09QVElPTlNfUkhfU0hJRlQ9NDtMLlNVQlNDUklCRV9PUFRJT05TX1JIPVswLDE2LDMyXTtMLlNVQlNDUklCRV9PUFRJT05TX05MPTQ7TC5TVUJTQ1JJQkVfT1BUSU9OU19SQVA9ODtMLlNVQlNDUklCRV9PUFRJT05TX1FPUz1bMCwxLDJdO0wuVU5TVUJTQ1JJQkVfSEVBREVSPWp0KFwidW5zdWJzY3JpYmVcIik7TC5BQ0tTPXt1bnN1YmFjazpqdChcInVuc3ViYWNrXCIpLHB1YmFjazpqdChcInB1YmFja1wiKSxwdWJjb21wOmp0KFwicHViY29tcFwiKSxwdWJyZWw6anQoXCJwdWJyZWxcIikscHVicmVjOmp0KFwicHVicmVjXCIpfTtMLlNVQkFDS19IRUFERVI9T2UuZnJvbShbTC5jb2Rlcy5zdWJhY2s8PEwuQ01EX1NISUZUXSk7TC5WRVJTSU9OMz1PZS5mcm9tKFszXSk7TC5WRVJTSU9OND1PZS5mcm9tKFs0XSk7TC5WRVJTSU9ONT1PZS5mcm9tKFs1XSk7TC5WRVJTSU9OMTMxPU9lLmZyb20oWzEzMV0pO0wuVkVSU0lPTjEzMj1PZS5mcm9tKFsxMzJdKTtMLlFPUz1bMCwxLDJdLm1hcCh0PT5PZS5mcm9tKFt0XSkpO0wuRU1QVFk9e3BpbmdyZXE6T2UuZnJvbShbTC5jb2Rlcy5waW5ncmVxPDw0LDBdKSxwaW5ncmVzcDpPZS5mcm9tKFtMLmNvZGVzLnBpbmdyZXNwPDw0LDBdKSxkaXNjb25uZWN0Ok9lLmZyb20oW0wuY29kZXMuZGlzY29ubmVjdDw8NCwwXSl9O0wuTVFUVDVfUFVCQUNLX1BVQlJFQ19DT0RFUz17MDpcIlN1Y2Nlc3NcIiwxNjpcIk5vIG1hdGNoaW5nIHN1YnNjcmliZXJzXCIsMTI4OlwiVW5zcGVjaWZpZWQgZXJyb3JcIiwxMzE6XCJJbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBlcnJvclwiLDEzNTpcIk5vdCBhdXRob3JpemVkXCIsMTQ0OlwiVG9waWMgTmFtZSBpbnZhbGlkXCIsMTQ1OlwiUGFja2V0IGlkZW50aWZpZXIgaW4gdXNlXCIsMTUxOlwiUXVvdGEgZXhjZWVkZWRcIiwxNTM6XCJQYXlsb2FkIGZvcm1hdCBpbnZhbGlkXCJ9O0wuTVFUVDVfUFVCUkVMX1BVQkNPTVBfQ09ERVM9ezA6XCJTdWNjZXNzXCIsMTQ2OlwiUGFja2V0IElkZW50aWZpZXIgbm90IGZvdW5kXCJ9O0wuTVFUVDVfU1VCQUNLX0NPREVTPXswOlwiR3JhbnRlZCBRb1MgMFwiLDE6XCJHcmFudGVkIFFvUyAxXCIsMjpcIkdyYW50ZWQgUW9TIDJcIiwxMjg6XCJVbnNwZWNpZmllZCBlcnJvclwiLDEzMTpcIkltcGxlbWVudGF0aW9uIHNwZWNpZmljIGVycm9yXCIsMTM1OlwiTm90IGF1dGhvcml6ZWRcIiwxNDM6XCJUb3BpYyBGaWx0ZXIgaW52YWxpZFwiLDE0NTpcIlBhY2tldCBJZGVudGlmaWVyIGluIHVzZVwiLDE1MTpcIlF1b3RhIGV4Y2VlZGVkXCIsMTU4OlwiU2hhcmVkIFN1YnNjcmlwdGlvbnMgbm90IHN1cHBvcnRlZFwiLDE2MTpcIlN1YnNjcmlwdGlvbiBJZGVudGlmaWVycyBub3Qgc3VwcG9ydGVkXCIsMTYyOlwiV2lsZGNhcmQgU3Vic2NyaXB0aW9ucyBub3Qgc3VwcG9ydGVkXCJ9O0wuTVFUVDVfVU5TVUJBQ0tfQ09ERVM9ezA6XCJTdWNjZXNzXCIsMTc6XCJObyBzdWJzY3JpcHRpb24gZXhpc3RlZFwiLDEyODpcIlVuc3BlY2lmaWVkIGVycm9yXCIsMTMxOlwiSW1wbGVtZW50YXRpb24gc3BlY2lmaWMgZXJyb3JcIiwxMzU6XCJOb3QgYXV0aG9yaXplZFwiLDE0MzpcIlRvcGljIEZpbHRlciBpbnZhbGlkXCIsMTQ1OlwiUGFja2V0IElkZW50aWZpZXIgaW4gdXNlXCJ9O0wuTVFUVDVfRElTQ09OTkVDVF9DT0RFUz17MDpcIk5vcm1hbCBkaXNjb25uZWN0aW9uXCIsNDpcIkRpc2Nvbm5lY3Qgd2l0aCBXaWxsIE1lc3NhZ2VcIiwxMjg6XCJVbnNwZWNpZmllZCBlcnJvclwiLDEyOTpcIk1hbGZvcm1lZCBQYWNrZXRcIiwxMzA6XCJQcm90b2NvbCBFcnJvclwiLDEzMTpcIkltcGxlbWVudGF0aW9uIHNwZWNpZmljIGVycm9yXCIsMTM1OlwiTm90IGF1dGhvcml6ZWRcIiwxMzc6XCJTZXJ2ZXIgYnVzeVwiLDEzOTpcIlNlcnZlciBzaHV0dGluZyBkb3duXCIsMTQxOlwiS2VlcCBBbGl2ZSB0aW1lb3V0XCIsMTQyOlwiU2Vzc2lvbiB0YWtlbiBvdmVyXCIsMTQzOlwiVG9waWMgRmlsdGVyIGludmFsaWRcIiwxNDQ6XCJUb3BpYyBOYW1lIGludmFsaWRcIiwxNDc6XCJSZWNlaXZlIE1heGltdW0gZXhjZWVkZWRcIiwxNDg6XCJUb3BpYyBBbGlhcyBpbnZhbGlkXCIsMTQ5OlwiUGFja2V0IHRvbyBsYXJnZVwiLDE1MDpcIk1lc3NhZ2UgcmF0ZSB0b28gaGlnaFwiLDE1MTpcIlF1b3RhIGV4Y2VlZGVkXCIsMTUyOlwiQWRtaW5pc3RyYXRpdmUgYWN0aW9uXCIsMTUzOlwiUGF5bG9hZCBmb3JtYXQgaW52YWxpZFwiLDE1NDpcIlJldGFpbiBub3Qgc3VwcG9ydGVkXCIsMTU1OlwiUW9TIG5vdCBzdXBwb3J0ZWRcIiwxNTY6XCJVc2UgYW5vdGhlciBzZXJ2ZXJcIiwxNTc6XCJTZXJ2ZXIgbW92ZWRcIiwxNTg6XCJTaGFyZWQgU3Vic2NyaXB0aW9ucyBub3Qgc3VwcG9ydGVkXCIsMTU5OlwiQ29ubmVjdGlvbiByYXRlIGV4Y2VlZGVkXCIsMTYwOlwiTWF4aW11bSBjb25uZWN0IHRpbWVcIiwxNjE6XCJTdWJzY3JpcHRpb24gSWRlbnRpZmllcnMgbm90IHN1cHBvcnRlZFwiLDE2MjpcIldpbGRjYXJkIFN1YnNjcmlwdGlvbnMgbm90IHN1cHBvcnRlZFwifTtMLk1RVFQ1X0FVVEhfQ09ERVM9ezA6XCJTdWNjZXNzXCIsMjQ6XCJDb250aW51ZSBhdXRoZW50aWNhdGlvblwiLDI1OlwiUmUtYXV0aGVudGljYXRlXCJ9O30pO3ZhciBnZD1NKChzUCxwZCk9Pnt2KCk7bSgpO18oKTt2YXIgVnI9MWUzLHpyPVZyKjYwLEtyPXpyKjYwLGdyPUtyKjI0LGJtPWdyKjcsd209Z3IqMzY1LjI1O3BkLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlPWV8fHt9O3ZhciByPXR5cGVvZiB0O2lmKHI9PT1cInN0cmluZ1wiJiZ0Lmxlbmd0aD4wKXJldHVybiBfbSh0KTtpZihyPT09XCJudW1iZXJcIiYmaXNGaW5pdGUodCkpcmV0dXJuIGUubG9uZz92bSh0KTptbSh0KTt0aHJvdyBuZXcgRXJyb3IoXCJ2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIHZhbGlkIG51bWJlci4gdmFsPVwiK0pTT04uc3RyaW5naWZ5KHQpKX07ZnVuY3Rpb24gX20odCl7aWYodD1TdHJpbmcodCksISh0Lmxlbmd0aD4xMDApKXt2YXIgZT0vXigtPyg/OlxcZCspP1xcLj9cXGQrKSAqKG1pbGxpc2Vjb25kcz98bXNlY3M/fG1zfHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8d2Vla3M/fHd8eWVhcnM/fHlycz98eSk/JC9pLmV4ZWModCk7aWYoZSl7dmFyIHI9cGFyc2VGbG9hdChlWzFdKSxpPShlWzJdfHxcIm1zXCIpLnRvTG93ZXJDYXNlKCk7c3dpdGNoKGkpe2Nhc2VcInllYXJzXCI6Y2FzZVwieWVhclwiOmNhc2VcInlyc1wiOmNhc2VcInlyXCI6Y2FzZVwieVwiOnJldHVybiByKndtO2Nhc2VcIndlZWtzXCI6Y2FzZVwid2Vla1wiOmNhc2VcIndcIjpyZXR1cm4gcipibTtjYXNlXCJkYXlzXCI6Y2FzZVwiZGF5XCI6Y2FzZVwiZFwiOnJldHVybiByKmdyO2Nhc2VcImhvdXJzXCI6Y2FzZVwiaG91clwiOmNhc2VcImhyc1wiOmNhc2VcImhyXCI6Y2FzZVwiaFwiOnJldHVybiByKktyO2Nhc2VcIm1pbnV0ZXNcIjpjYXNlXCJtaW51dGVcIjpjYXNlXCJtaW5zXCI6Y2FzZVwibWluXCI6Y2FzZVwibVwiOnJldHVybiByKnpyO2Nhc2VcInNlY29uZHNcIjpjYXNlXCJzZWNvbmRcIjpjYXNlXCJzZWNzXCI6Y2FzZVwic2VjXCI6Y2FzZVwic1wiOnJldHVybiByKlZyO2Nhc2VcIm1pbGxpc2Vjb25kc1wiOmNhc2VcIm1pbGxpc2Vjb25kXCI6Y2FzZVwibXNlY3NcIjpjYXNlXCJtc2VjXCI6Y2FzZVwibXNcIjpyZXR1cm4gcjtkZWZhdWx0OnJldHVybn19fX1mdW5jdGlvbiBtbSh0KXt2YXIgZT1NYXRoLmFicyh0KTtyZXR1cm4gZT49Z3I/TWF0aC5yb3VuZCh0L2dyKStcImRcIjplPj1Lcj9NYXRoLnJvdW5kKHQvS3IpK1wiaFwiOmU+PXpyP01hdGgucm91bmQodC96cikrXCJtXCI6ZT49VnI/TWF0aC5yb3VuZCh0L1ZyKStcInNcIjp0K1wibXNcIn1mdW5jdGlvbiB2bSh0KXt2YXIgZT1NYXRoLmFicyh0KTtyZXR1cm4gZT49Z3I/VG4odCxlLGdyLFwiZGF5XCIpOmU+PUtyP1RuKHQsZSxLcixcImhvdXJcIik6ZT49enI/VG4odCxlLHpyLFwibWludXRlXCIpOmU+PVZyP1RuKHQsZSxWcixcInNlY29uZFwiKTp0K1wiIG1zXCJ9ZnVuY3Rpb24gVG4odCxlLHIsaSl7dmFyIG49ZT49cioxLjU7cmV0dXJuIE1hdGgucm91bmQodC9yKStcIiBcIitpKyhuP1wic1wiOlwiXCIpfX0pO3ZhciBiZD1NKChnUCx5ZCk9Pnt2KCk7bSgpO18oKTtmdW5jdGlvbiBFbSh0KXtyLmRlYnVnPXIsci5kZWZhdWx0PXIsci5jb2VyY2U9dSxyLmRpc2FibGU9byxyLmVuYWJsZT1uLHIuZW5hYmxlZD1zLHIuaHVtYW5pemU9Z2QoKSxyLmRlc3Ryb3k9YyxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGg9PntyW2hdPXRbaF07fSksci5uYW1lcz1bXSxyLnNraXBzPVtdLHIuZm9ybWF0dGVycz17fTtmdW5jdGlvbiBlKGgpe2xldCBkPTA7Zm9yKGxldCBnPTA7ZzxoLmxlbmd0aDtnKyspZD0oZDw8NSktZCtoLmNoYXJDb2RlQXQoZyksZHw9MDtyZXR1cm4gci5jb2xvcnNbTWF0aC5hYnMoZCklci5jb2xvcnMubGVuZ3RoXX1yLnNlbGVjdENvbG9yPWU7ZnVuY3Rpb24gcihoKXtsZXQgZCxnPW51bGwseSx3O2Z1bmN0aW9uIEUoLi4uUyl7aWYoIUUuZW5hYmxlZClyZXR1cm47bGV0IEk9RSxDPU51bWJlcihuZXcgRGF0ZSksUj1DLShkfHxDKTtJLmRpZmY9UixJLnByZXY9ZCxJLmN1cnI9QyxkPUMsU1swXT1yLmNvZXJjZShTWzBdKSx0eXBlb2YgU1swXSE9XCJzdHJpbmdcIiYmUy51bnNoaWZ0KFwiJU9cIik7bGV0IFU9MDtTWzBdPVNbMF0ucmVwbGFjZSgvJShbYS16QS1aJV0pL2csKFcsSyk9PntpZihXPT09XCIlJVwiKXJldHVybiBcIiVcIjtVKys7bGV0IHo9ci5mb3JtYXR0ZXJzW0tdO2lmKHR5cGVvZiB6PT1cImZ1bmN0aW9uXCIpe2xldCBRPVNbVV07Vz16LmNhbGwoSSxRKSxTLnNwbGljZShVLDEpLFUtLTt9cmV0dXJuIFd9KSxyLmZvcm1hdEFyZ3MuY2FsbChJLFMpLChJLmxvZ3x8ci5sb2cpLmFwcGx5KEksUyk7fXJldHVybiBFLm5hbWVzcGFjZT1oLEUudXNlQ29sb3JzPXIudXNlQ29sb3JzKCksRS5jb2xvcj1yLnNlbGVjdENvbG9yKGgpLEUuZXh0ZW5kPWksRS5kZXN0cm95PXIuZGVzdHJveSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRSxcImVuYWJsZWRcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITEsZ2V0OigpPT5nIT09bnVsbD9nOih5IT09ci5uYW1lc3BhY2VzJiYoeT1yLm5hbWVzcGFjZXMsdz1yLmVuYWJsZWQoaCkpLHcpLHNldDpTPT57Zz1TO319KSx0eXBlb2Ygci5pbml0PT1cImZ1bmN0aW9uXCImJnIuaW5pdChFKSxFfWZ1bmN0aW9uIGkoaCxkKXtsZXQgZz1yKHRoaXMubmFtZXNwYWNlKyh0eXBlb2YgZD5cInVcIj9cIjpcIjpkKStoKTtyZXR1cm4gZy5sb2c9dGhpcy5sb2csZ31mdW5jdGlvbiBuKGgpe3Iuc2F2ZShoKSxyLm5hbWVzcGFjZXM9aCxyLm5hbWVzPVtdLHIuc2tpcHM9W107bGV0IGQsZz0odHlwZW9mIGg9PVwic3RyaW5nXCI/aDpcIlwiKS5zcGxpdCgvW1xccyxdKy8pLHk9Zy5sZW5ndGg7Zm9yKGQ9MDtkPHk7ZCsrKWdbZF0mJihoPWdbZF0ucmVwbGFjZSgvXFwqL2csXCIuKj9cIiksaFswXT09PVwiLVwiP3Iuc2tpcHMucHVzaChuZXcgUmVnRXhwKFwiXlwiK2guc2xpY2UoMSkrXCIkXCIpKTpyLm5hbWVzLnB1c2gobmV3IFJlZ0V4cChcIl5cIitoK1wiJFwiKSkpO31mdW5jdGlvbiBvKCl7bGV0IGg9Wy4uLnIubmFtZXMubWFwKGEpLC4uLnIuc2tpcHMubWFwKGEpLm1hcChkPT5cIi1cIitkKV0uam9pbihcIixcIik7cmV0dXJuIHIuZW5hYmxlKFwiXCIpLGh9ZnVuY3Rpb24gcyhoKXtpZihoW2gubGVuZ3RoLTFdPT09XCIqXCIpcmV0dXJuICEwO2xldCBkLGc7Zm9yKGQ9MCxnPXIuc2tpcHMubGVuZ3RoO2Q8ZztkKyspaWYoci5za2lwc1tkXS50ZXN0KGgpKXJldHVybiAhMTtmb3IoZD0wLGc9ci5uYW1lcy5sZW5ndGg7ZDxnO2QrKylpZihyLm5hbWVzW2RdLnRlc3QoaCkpcmV0dXJuICEwO3JldHVybiAhMX1mdW5jdGlvbiBhKGgpe3JldHVybiBoLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIsaC50b1N0cmluZygpLmxlbmd0aC0yKS5yZXBsYWNlKC9cXC5cXCpcXD8kLyxcIipcIil9ZnVuY3Rpb24gdShoKXtyZXR1cm4gaCBpbnN0YW5jZW9mIEVycm9yP2guc3RhY2t8fGgubWVzc2FnZTpofWZ1bmN0aW9uIGMoKXtjb25zb2xlLndhcm4oXCJJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuXCIpO31yZXR1cm4gci5lbmFibGUoci5sb2FkKCkpLHJ9eWQuZXhwb3J0cz1FbTt9KTt2YXIgb3Q9TSgoeGUsUm4pPT57digpO20oKTtfKCk7eGUuZm9ybWF0QXJncz1BbTt4ZS5zYXZlPUltO3hlLmxvYWQ9VG07eGUudXNlQ29sb3JzPVNtO3hlLnN0b3JhZ2U9Um0oKTt4ZS5kZXN0cm95PSgoKT0+e2xldCB0PSExO3JldHVybiAoKT0+e3R8fCh0PSEwLGNvbnNvbGUud2FybihcIkluc3RhbmNlIG1ldGhvZCBgZGVidWcuZGVzdHJveSgpYCBpcyBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgZG9lcyBhbnl0aGluZy4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgYGRlYnVnYC5cIikpO319KSgpO3hlLmNvbG9ycz1bXCIjMDAwMENDXCIsXCIjMDAwMEZGXCIsXCIjMDAzM0NDXCIsXCIjMDAzM0ZGXCIsXCIjMDA2NkNDXCIsXCIjMDA2NkZGXCIsXCIjMDA5OUNDXCIsXCIjMDA5OUZGXCIsXCIjMDBDQzAwXCIsXCIjMDBDQzMzXCIsXCIjMDBDQzY2XCIsXCIjMDBDQzk5XCIsXCIjMDBDQ0NDXCIsXCIjMDBDQ0ZGXCIsXCIjMzMwMENDXCIsXCIjMzMwMEZGXCIsXCIjMzMzM0NDXCIsXCIjMzMzM0ZGXCIsXCIjMzM2NkNDXCIsXCIjMzM2NkZGXCIsXCIjMzM5OUNDXCIsXCIjMzM5OUZGXCIsXCIjMzNDQzAwXCIsXCIjMzNDQzMzXCIsXCIjMzNDQzY2XCIsXCIjMzNDQzk5XCIsXCIjMzNDQ0NDXCIsXCIjMzNDQ0ZGXCIsXCIjNjYwMENDXCIsXCIjNjYwMEZGXCIsXCIjNjYzM0NDXCIsXCIjNjYzM0ZGXCIsXCIjNjZDQzAwXCIsXCIjNjZDQzMzXCIsXCIjOTkwMENDXCIsXCIjOTkwMEZGXCIsXCIjOTkzM0NDXCIsXCIjOTkzM0ZGXCIsXCIjOTlDQzAwXCIsXCIjOTlDQzMzXCIsXCIjQ0MwMDAwXCIsXCIjQ0MwMDMzXCIsXCIjQ0MwMDY2XCIsXCIjQ0MwMDk5XCIsXCIjQ0MwMENDXCIsXCIjQ0MwMEZGXCIsXCIjQ0MzMzAwXCIsXCIjQ0MzMzMzXCIsXCIjQ0MzMzY2XCIsXCIjQ0MzMzk5XCIsXCIjQ0MzM0NDXCIsXCIjQ0MzM0ZGXCIsXCIjQ0M2NjAwXCIsXCIjQ0M2NjMzXCIsXCIjQ0M5OTAwXCIsXCIjQ0M5OTMzXCIsXCIjQ0NDQzAwXCIsXCIjQ0NDQzMzXCIsXCIjRkYwMDAwXCIsXCIjRkYwMDMzXCIsXCIjRkYwMDY2XCIsXCIjRkYwMDk5XCIsXCIjRkYwMENDXCIsXCIjRkYwMEZGXCIsXCIjRkYzMzAwXCIsXCIjRkYzMzMzXCIsXCIjRkYzMzY2XCIsXCIjRkYzMzk5XCIsXCIjRkYzM0NDXCIsXCIjRkYzM0ZGXCIsXCIjRkY2NjAwXCIsXCIjRkY2NjMzXCIsXCIjRkY5OTAwXCIsXCIjRkY5OTMzXCIsXCIjRkZDQzAwXCIsXCIjRkZDQzMzXCJdO2Z1bmN0aW9uIFNtKCl7cmV0dXJuIHR5cGVvZiB3aW5kb3c8XCJ1XCImJndpbmRvdy5wcm9jZXNzJiYod2luZG93LnByb2Nlc3MudHlwZT09PVwicmVuZGVyZXJcInx8d2luZG93LnByb2Nlc3MuX19ud2pzKT8hMDp0eXBlb2YgQjxcInVcIiYmQi51c2VyQWdlbnQmJkIudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goLyhlZGdlfHRyaWRlbnQpXFwvKFxcZCspLyk/ITE6dHlwZW9mIGRvY3VtZW50PFwidVwiJiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLldlYmtpdEFwcGVhcmFuY2V8fHR5cGVvZiB3aW5kb3c8XCJ1XCImJndpbmRvdy5jb25zb2xlJiYod2luZG93LmNvbnNvbGUuZmlyZWJ1Z3x8d2luZG93LmNvbnNvbGUuZXhjZXB0aW9uJiZ3aW5kb3cuY29uc29sZS50YWJsZSl8fHR5cGVvZiBCPFwidVwiJiZCLnVzZXJBZ2VudCYmQi51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS8pJiZwYXJzZUludChSZWdFeHAuJDEsMTApPj0zMXx8dHlwZW9mIEI8XCJ1XCImJkIudXNlckFnZW50JiZCLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9hcHBsZXdlYmtpdFxcLyhcXGQrKS8pfWZ1bmN0aW9uIEFtKHQpe2lmKHRbMF09KHRoaXMudXNlQ29sb3JzP1wiJWNcIjpcIlwiKSt0aGlzLm5hbWVzcGFjZSsodGhpcy51c2VDb2xvcnM/XCIgJWNcIjpcIiBcIikrdFswXSsodGhpcy51c2VDb2xvcnM/XCIlYyBcIjpcIiBcIikrXCIrXCIrUm4uZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpLCF0aGlzLnVzZUNvbG9ycylyZXR1cm47bGV0IGU9XCJjb2xvcjogXCIrdGhpcy5jb2xvcjt0LnNwbGljZSgxLDAsZSxcImNvbG9yOiBpbmhlcml0XCIpO2xldCByPTAsaT0wO3RbMF0ucmVwbGFjZSgvJVthLXpBLVolXS9nLG49PntuIT09XCIlJVwiJiYocisrLG49PT1cIiVjXCImJihpPXIpKTt9KSx0LnNwbGljZShpLDAsZSk7fXhlLmxvZz1jb25zb2xlLmRlYnVnfHxjb25zb2xlLmxvZ3x8KCgpPT57fSk7ZnVuY3Rpb24gSW0odCl7dHJ5e3Q/eGUuc3RvcmFnZS5zZXRJdGVtKFwiZGVidWdcIix0KTp4ZS5zdG9yYWdlLnJlbW92ZUl0ZW0oXCJkZWJ1Z1wiKTt9Y2F0Y2h7fX1mdW5jdGlvbiBUbSgpe2xldCB0O3RyeXt0PXhlLnN0b3JhZ2UuZ2V0SXRlbShcImRlYnVnXCIpO31jYXRjaHt9cmV0dXJuICF0JiZ0eXBlb2YgUDxcInVcIiYmXCJlbnZcImluIFAmJih0PVAuZW52LkRFQlVHKSx0fWZ1bmN0aW9uIFJtKCl7dHJ5e3JldHVybiBsb2NhbFN0b3JhZ2V9Y2F0Y2h7fX1Sbi5leHBvcnRzPWJkKCkoeGUpO3Zhcntmb3JtYXR0ZXJzOkNtfT1Sbi5leHBvcnRzO0NtLmo9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeSh0KX1jYXRjaChlKXtyZXR1cm4gXCJbVW5leHBlY3RlZEpTT05QYXJzZUVycm9yXTogXCIrZS5tZXNzYWdlfX07fSk7dmFyIG1kPU0oKE1QLF9kKT0+e3YoKTttKCk7XygpO3ZhciBCbT1mZCgpLHtFdmVudEVtaXR0ZXI6UG19PShpcigpLFgocnIpKSx3ZD1oZCgpLFY9Rm8oKSxEPW90KCkoXCJtcXR0LXBhY2tldDpwYXJzZXJcIiksV289Y2xhc3MgdCBleHRlbmRzIFBte2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnBhcnNlcj10aGlzLmNvbnN0cnVjdG9yLnBhcnNlcjt9c3RhdGljIHBhcnNlcihlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIHQ/KHRoaXMuc2V0dGluZ3M9ZXx8e30sdGhpcy5fc3RhdGVzPVtcIl9wYXJzZUhlYWRlclwiLFwiX3BhcnNlTGVuZ3RoXCIsXCJfcGFyc2VQYXlsb2FkXCIsXCJfbmV3UGFja2V0XCJdLHRoaXMuX3Jlc2V0U3RhdGUoKSx0aGlzKTpuZXcgdCgpLnBhcnNlcihlKX1fcmVzZXRTdGF0ZSgpe0QoXCJfcmVzZXRTdGF0ZTogcmVzZXR0aW5nIHBhY2tldCwgZXJyb3IsIF9saXN0LCBhbmQgX3N0YXRlQ291bnRlclwiKSx0aGlzLnBhY2tldD1uZXcgd2QsdGhpcy5lcnJvcj1udWxsLHRoaXMuX2xpc3Q9Qm0oKSx0aGlzLl9zdGF0ZUNvdW50ZXI9MDt9cGFyc2UoZSl7Zm9yKHRoaXMuZXJyb3ImJnRoaXMuX3Jlc2V0U3RhdGUoKSx0aGlzLl9saXN0LmFwcGVuZChlKSxEKFwicGFyc2U6IGN1cnJlbnQgc3RhdGU6ICVzXCIsdGhpcy5fc3RhdGVzW3RoaXMuX3N0YXRlQ291bnRlcl0pOyh0aGlzLnBhY2tldC5sZW5ndGghPT0tMXx8dGhpcy5fbGlzdC5sZW5ndGg+MCkmJnRoaXNbdGhpcy5fc3RhdGVzW3RoaXMuX3N0YXRlQ291bnRlcl1dKCkmJiF0aGlzLmVycm9yOyl0aGlzLl9zdGF0ZUNvdW50ZXIrKyxEKFwicGFyc2U6IHN0YXRlIGNvbXBsZXRlLiBfc3RhdGVDb3VudGVyIGlzIG5vdzogJWRcIix0aGlzLl9zdGF0ZUNvdW50ZXIpLEQoXCJwYXJzZTogcGFja2V0Lmxlbmd0aDogJWQsIGJ1ZmZlciBsaXN0IGxlbmd0aDogJWRcIix0aGlzLnBhY2tldC5sZW5ndGgsdGhpcy5fbGlzdC5sZW5ndGgpLHRoaXMuX3N0YXRlQ291bnRlcj49dGhpcy5fc3RhdGVzLmxlbmd0aCYmKHRoaXMuX3N0YXRlQ291bnRlcj0wKTtyZXR1cm4gRChcInBhcnNlOiBleGl0ZWQgd2hpbGUgbG9vcC4gcGFja2V0OiAlZCwgYnVmZmVyIGxpc3QgbGVuZ3RoOiAlZFwiLHRoaXMucGFja2V0Lmxlbmd0aCx0aGlzLl9saXN0Lmxlbmd0aCksdGhpcy5fbGlzdC5sZW5ndGh9X3BhcnNlSGVhZGVyKCl7bGV0IGU9dGhpcy5fbGlzdC5yZWFkVUludDgoMCkscj1lPj5WLkNNRF9TSElGVDt0aGlzLnBhY2tldC5jbWQ9Vi50eXBlc1tyXTtsZXQgaT1lJjE1LG49Vi5yZXF1aXJlZEhlYWRlckZsYWdzW3JdO3JldHVybiBuIT1udWxsJiZpIT09bj90aGlzLl9lbWl0RXJyb3IobmV3IEVycm9yKFYucmVxdWlyZWRIZWFkZXJGbGFnc0Vycm9yc1tyXSkpOih0aGlzLnBhY2tldC5yZXRhaW49KGUmVi5SRVRBSU5fTUFTSykhPT0wLHRoaXMucGFja2V0LnFvcz1lPj5WLlFPU19TSElGVCZWLlFPU19NQVNLLHRoaXMucGFja2V0LnFvcz4yP3RoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IoXCJQYWNrZXQgbXVzdCBub3QgaGF2ZSBib3RoIFFvUyBiaXRzIHNldCB0byAxXCIpKToodGhpcy5wYWNrZXQuZHVwPShlJlYuRFVQX01BU0spIT09MCxEKFwiX3BhcnNlSGVhZGVyOiBwYWNrZXQ6ICVvXCIsdGhpcy5wYWNrZXQpLHRoaXMuX2xpc3QuY29uc3VtZSgxKSwhMCkpfV9wYXJzZUxlbmd0aCgpe2xldCBlPXRoaXMuX3BhcnNlVmFyQnl0ZU51bSghMCk7cmV0dXJuIGUmJih0aGlzLnBhY2tldC5sZW5ndGg9ZS52YWx1ZSx0aGlzLl9saXN0LmNvbnN1bWUoZS5ieXRlcykpLEQoXCJfcGFyc2VMZW5ndGggJWRcIixlLnZhbHVlKSwhIWV9X3BhcnNlUGF5bG9hZCgpe0QoXCJfcGFyc2VQYXlsb2FkOiBwYXlsb2FkICVPXCIsdGhpcy5fbGlzdCk7bGV0IGU9ITE7aWYodGhpcy5wYWNrZXQubGVuZ3RoPT09MHx8dGhpcy5fbGlzdC5sZW5ndGg+PXRoaXMucGFja2V0Lmxlbmd0aCl7c3dpdGNoKHRoaXMuX3Bvcz0wLHRoaXMucGFja2V0LmNtZCl7Y2FzZVwiY29ubmVjdFwiOnRoaXMuX3BhcnNlQ29ubmVjdCgpO2JyZWFrO2Nhc2VcImNvbm5hY2tcIjp0aGlzLl9wYXJzZUNvbm5hY2soKTticmVhaztjYXNlXCJwdWJsaXNoXCI6dGhpcy5fcGFyc2VQdWJsaXNoKCk7YnJlYWs7Y2FzZVwicHViYWNrXCI6Y2FzZVwicHVicmVjXCI6Y2FzZVwicHVicmVsXCI6Y2FzZVwicHViY29tcFwiOnRoaXMuX3BhcnNlQ29uZmlybWF0aW9uKCk7YnJlYWs7Y2FzZVwic3Vic2NyaWJlXCI6dGhpcy5fcGFyc2VTdWJzY3JpYmUoKTticmVhaztjYXNlXCJzdWJhY2tcIjp0aGlzLl9wYXJzZVN1YmFjaygpO2JyZWFrO2Nhc2VcInVuc3Vic2NyaWJlXCI6dGhpcy5fcGFyc2VVbnN1YnNjcmliZSgpO2JyZWFrO2Nhc2VcInVuc3ViYWNrXCI6dGhpcy5fcGFyc2VVbnN1YmFjaygpO2JyZWFrO2Nhc2VcInBpbmdyZXFcIjpjYXNlXCJwaW5ncmVzcFwiOmJyZWFrO2Nhc2VcImRpc2Nvbm5lY3RcIjp0aGlzLl9wYXJzZURpc2Nvbm5lY3QoKTticmVhaztjYXNlXCJhdXRoXCI6dGhpcy5fcGFyc2VBdXRoKCk7YnJlYWs7ZGVmYXVsdDp0aGlzLl9lbWl0RXJyb3IobmV3IEVycm9yKFwiTm90IHN1cHBvcnRlZFwiKSk7fWU9ITA7fXJldHVybiBEKFwiX3BhcnNlUGF5bG9hZCBjb21wbGV0ZSByZXN1bHQ6ICVzXCIsZSksZX1fcGFyc2VDb25uZWN0KCl7RChcIl9wYXJzZUNvbm5lY3RcIik7bGV0IGUscixpLG4sbz17fSxzPXRoaXMucGFja2V0LGE9dGhpcy5fcGFyc2VTdHJpbmcoKTtpZihhPT09bnVsbClyZXR1cm4gdGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihcIkNhbm5vdCBwYXJzZSBwcm90b2NvbElkXCIpKTtpZihhIT09XCJNUVRUXCImJmEhPT1cIk1RSXNkcFwiKXJldHVybiB0aGlzLl9lbWl0RXJyb3IobmV3IEVycm9yKFwiSW52YWxpZCBwcm90b2NvbElkXCIpKTtpZihzLnByb3RvY29sSWQ9YSx0aGlzLl9wb3M+PXRoaXMuX2xpc3QubGVuZ3RoKXJldHVybiB0aGlzLl9lbWl0RXJyb3IobmV3IEVycm9yKFwiUGFja2V0IHRvbyBzaG9ydFwiKSk7aWYocy5wcm90b2NvbFZlcnNpb249dGhpcy5fbGlzdC5yZWFkVUludDgodGhpcy5fcG9zKSxzLnByb3RvY29sVmVyc2lvbj49MTI4JiYocy5icmlkZ2VNb2RlPSEwLHMucHJvdG9jb2xWZXJzaW9uPXMucHJvdG9jb2xWZXJzaW9uLTEyOCkscy5wcm90b2NvbFZlcnNpb24hPT0zJiZzLnByb3RvY29sVmVyc2lvbiE9PTQmJnMucHJvdG9jb2xWZXJzaW9uIT09NSlyZXR1cm4gdGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihcIkludmFsaWQgcHJvdG9jb2wgdmVyc2lvblwiKSk7aWYodGhpcy5fcG9zKyssdGhpcy5fcG9zPj10aGlzLl9saXN0Lmxlbmd0aClyZXR1cm4gdGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihcIlBhY2tldCB0b28gc2hvcnRcIikpO2lmKHRoaXMuX2xpc3QucmVhZFVJbnQ4KHRoaXMuX3BvcykmMSlyZXR1cm4gdGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihcIkNvbm5lY3QgZmxhZyBiaXQgMCBtdXN0IGJlIDAsIGJ1dCBnb3QgMVwiKSk7by51c2VybmFtZT10aGlzLl9saXN0LnJlYWRVSW50OCh0aGlzLl9wb3MpJlYuVVNFUk5BTUVfTUFTSyxvLnBhc3N3b3JkPXRoaXMuX2xpc3QucmVhZFVJbnQ4KHRoaXMuX3BvcykmVi5QQVNTV09SRF9NQVNLLG8ud2lsbD10aGlzLl9saXN0LnJlYWRVSW50OCh0aGlzLl9wb3MpJlYuV0lMTF9GTEFHX01BU0s7bGV0IHU9ISEodGhpcy5fbGlzdC5yZWFkVUludDgodGhpcy5fcG9zKSZWLldJTExfUkVUQUlOX01BU0spLGM9KHRoaXMuX2xpc3QucmVhZFVJbnQ4KHRoaXMuX3BvcykmVi5XSUxMX1FPU19NQVNLKT4+Vi5XSUxMX1FPU19TSElGVDtpZihvLndpbGwpcy53aWxsPXt9LHMud2lsbC5yZXRhaW49dSxzLndpbGwucW9zPWM7ZWxzZSB7aWYodSlyZXR1cm4gdGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihcIldpbGwgUmV0YWluIEZsYWcgbXVzdCBiZSBzZXQgdG8gemVybyB3aGVuIFdpbGwgRmxhZyBpcyBzZXQgdG8gMFwiKSk7aWYoYylyZXR1cm4gdGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihcIldpbGwgUW9TIG11c3QgYmUgc2V0IHRvIHplcm8gd2hlbiBXaWxsIEZsYWcgaXMgc2V0IHRvIDBcIikpfWlmKHMuY2xlYW49KHRoaXMuX2xpc3QucmVhZFVJbnQ4KHRoaXMuX3BvcykmVi5DTEVBTl9TRVNTSU9OX01BU0spIT09MCx0aGlzLl9wb3MrKyxzLmtlZXBhbGl2ZT10aGlzLl9wYXJzZU51bSgpLHMua2VlcGFsaXZlPT09LTEpcmV0dXJuIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IoXCJQYWNrZXQgdG9vIHNob3J0XCIpKTtpZihzLnByb3RvY29sVmVyc2lvbj09PTUpe2xldCBkPXRoaXMuX3BhcnNlUHJvcGVydGllcygpO09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGQpLmxlbmd0aCYmKHMucHJvcGVydGllcz1kKTt9bGV0IGg9dGhpcy5fcGFyc2VTdHJpbmcoKTtpZihoPT09bnVsbClyZXR1cm4gdGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihcIlBhY2tldCB0b28gc2hvcnRcIikpO2lmKHMuY2xpZW50SWQ9aCxEKFwiX3BhcnNlQ29ubmVjdDogcGFja2V0LmNsaWVudElkOiAlc1wiLHMuY2xpZW50SWQpLG8ud2lsbCl7aWYocy5wcm90b2NvbFZlcnNpb249PT01KXtsZXQgZD10aGlzLl9wYXJzZVByb3BlcnRpZXMoKTtPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhkKS5sZW5ndGgmJihzLndpbGwucHJvcGVydGllcz1kKTt9aWYoZT10aGlzLl9wYXJzZVN0cmluZygpLGU9PT1udWxsKXJldHVybiB0aGlzLl9lbWl0RXJyb3IobmV3IEVycm9yKFwiQ2Fubm90IHBhcnNlIHdpbGwgdG9waWNcIikpO2lmKHMud2lsbC50b3BpYz1lLEQoXCJfcGFyc2VDb25uZWN0OiBwYWNrZXQud2lsbC50b3BpYzogJXNcIixzLndpbGwudG9waWMpLHI9dGhpcy5fcGFyc2VCdWZmZXIoKSxyPT09bnVsbClyZXR1cm4gdGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihcIkNhbm5vdCBwYXJzZSB3aWxsIHBheWxvYWRcIikpO3Mud2lsbC5wYXlsb2FkPXIsRChcIl9wYXJzZUNvbm5lY3Q6IHBhY2tldC53aWxsLnBheWxhb2Q6ICVzXCIscy53aWxsLnBheWxvYWQpO31pZihvLnVzZXJuYW1lKXtpZihuPXRoaXMuX3BhcnNlU3RyaW5nKCksbj09PW51bGwpcmV0dXJuIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IoXCJDYW5ub3QgcGFyc2UgdXNlcm5hbWVcIikpO3MudXNlcm5hbWU9bixEKFwiX3BhcnNlQ29ubmVjdDogcGFja2V0LnVzZXJuYW1lOiAlc1wiLHMudXNlcm5hbWUpO31pZihvLnBhc3N3b3JkKXtpZihpPXRoaXMuX3BhcnNlQnVmZmVyKCksaT09PW51bGwpcmV0dXJuIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IoXCJDYW5ub3QgcGFyc2UgcGFzc3dvcmRcIikpO3MucGFzc3dvcmQ9aTt9cmV0dXJuIHRoaXMuc2V0dGluZ3M9cyxEKFwiX3BhcnNlQ29ubmVjdDogY29tcGxldGVcIiksc31fcGFyc2VDb25uYWNrKCl7RChcIl9wYXJzZUNvbm5hY2tcIik7bGV0IGU9dGhpcy5wYWNrZXQ7aWYodGhpcy5fbGlzdC5sZW5ndGg8MSlyZXR1cm4gbnVsbDtsZXQgcj10aGlzLl9saXN0LnJlYWRVSW50OCh0aGlzLl9wb3MrKyk7aWYocj4xKXJldHVybiB0aGlzLl9lbWl0RXJyb3IobmV3IEVycm9yKFwiSW52YWxpZCBjb25uYWNrIGZsYWdzLCBiaXRzIDctMSBtdXN0IGJlIHNldCB0byAwXCIpKTtpZihlLnNlc3Npb25QcmVzZW50PSEhKHImVi5TRVNTSU9OUFJFU0VOVF9NQVNLKSx0aGlzLnNldHRpbmdzLnByb3RvY29sVmVyc2lvbj09PTUpdGhpcy5fbGlzdC5sZW5ndGg+PTI/ZS5yZWFzb25Db2RlPXRoaXMuX2xpc3QucmVhZFVJbnQ4KHRoaXMuX3BvcysrKTplLnJlYXNvbkNvZGU9MDtlbHNlIHtpZih0aGlzLl9saXN0Lmxlbmd0aDwyKXJldHVybiBudWxsO2UucmV0dXJuQ29kZT10aGlzLl9saXN0LnJlYWRVSW50OCh0aGlzLl9wb3MrKyk7fWlmKGUucmV0dXJuQ29kZT09PS0xfHxlLnJlYXNvbkNvZGU9PT0tMSlyZXR1cm4gdGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihcIkNhbm5vdCBwYXJzZSByZXR1cm4gY29kZVwiKSk7aWYodGhpcy5zZXR0aW5ncy5wcm90b2NvbFZlcnNpb249PT01KXtsZXQgaT10aGlzLl9wYXJzZVByb3BlcnRpZXMoKTtPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhpKS5sZW5ndGgmJihlLnByb3BlcnRpZXM9aSk7fUQoXCJfcGFyc2VDb25uYWNrOiBjb21wbGV0ZVwiKTt9X3BhcnNlUHVibGlzaCgpe0QoXCJfcGFyc2VQdWJsaXNoXCIpO2xldCBlPXRoaXMucGFja2V0O2lmKGUudG9waWM9dGhpcy5fcGFyc2VTdHJpbmcoKSxlLnRvcGljPT09bnVsbClyZXR1cm4gdGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihcIkNhbm5vdCBwYXJzZSB0b3BpY1wiKSk7aWYoIShlLnFvcz4wJiYhdGhpcy5fcGFyc2VNZXNzYWdlSWQoKSkpe2lmKHRoaXMuc2V0dGluZ3MucHJvdG9jb2xWZXJzaW9uPT09NSl7bGV0IHI9dGhpcy5fcGFyc2VQcm9wZXJ0aWVzKCk7T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocikubGVuZ3RoJiYoZS5wcm9wZXJ0aWVzPXIpO31lLnBheWxvYWQ9dGhpcy5fbGlzdC5zbGljZSh0aGlzLl9wb3MsZS5sZW5ndGgpLEQoXCJfcGFyc2VQdWJsaXNoOiBwYXlsb2FkIGZyb20gYnVmZmVyIGxpc3Q6ICVvXCIsZS5wYXlsb2FkKTt9fV9wYXJzZVN1YnNjcmliZSgpe0QoXCJfcGFyc2VTdWJzY3JpYmVcIik7bGV0IGU9dGhpcy5wYWNrZXQscixpLG4sbyxzLGEsdTtpZihlLnN1YnNjcmlwdGlvbnM9W10sISF0aGlzLl9wYXJzZU1lc3NhZ2VJZCgpKXtpZih0aGlzLnNldHRpbmdzLnByb3RvY29sVmVyc2lvbj09PTUpe2xldCBjPXRoaXMuX3BhcnNlUHJvcGVydGllcygpO09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGMpLmxlbmd0aCYmKGUucHJvcGVydGllcz1jKTt9aWYoZS5sZW5ndGg8PTApcmV0dXJuIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IoXCJNYWxmb3JtZWQgc3Vic2NyaWJlLCBubyBwYXlsb2FkIHNwZWNpZmllZFwiKSk7Zm9yKDt0aGlzLl9wb3M8ZS5sZW5ndGg7KXtpZihyPXRoaXMuX3BhcnNlU3RyaW5nKCkscj09PW51bGwpcmV0dXJuIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IoXCJDYW5ub3QgcGFyc2UgdG9waWNcIikpO2lmKHRoaXMuX3Bvcz49ZS5sZW5ndGgpcmV0dXJuIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IoXCJNYWxmb3JtZWQgU3Vic2NyaWJlIFBheWxvYWRcIikpO2lmKGk9dGhpcy5fcGFyc2VCeXRlKCksdGhpcy5zZXR0aW5ncy5wcm90b2NvbFZlcnNpb249PT01KXtpZihpJjE5MilyZXR1cm4gdGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihcIkludmFsaWQgc3Vic2NyaWJlIHRvcGljIGZsYWcgYml0cywgYml0cyA3LTYgbXVzdCBiZSAwXCIpKX1lbHNlIGlmKGkmMjUyKXJldHVybiB0aGlzLl9lbWl0RXJyb3IobmV3IEVycm9yKFwiSW52YWxpZCBzdWJzY3JpYmUgdG9waWMgZmxhZyBiaXRzLCBiaXRzIDctMiBtdXN0IGJlIDBcIikpO2lmKG49aSZWLlNVQlNDUklCRV9PUFRJT05TX1FPU19NQVNLLG4+MilyZXR1cm4gdGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihcIkludmFsaWQgc3Vic2NyaWJlIFFvUywgbXVzdCBiZSA8PSAyXCIpKTtpZihhPShpPj5WLlNVQlNDUklCRV9PUFRJT05TX05MX1NISUZUJlYuU1VCU0NSSUJFX09QVElPTlNfTkxfTUFTSykhPT0wLHM9KGk+PlYuU1VCU0NSSUJFX09QVElPTlNfUkFQX1NISUZUJlYuU1VCU0NSSUJFX09QVElPTlNfUkFQX01BU0spIT09MCxvPWk+PlYuU1VCU0NSSUJFX09QVElPTlNfUkhfU0hJRlQmVi5TVUJTQ1JJQkVfT1BUSU9OU19SSF9NQVNLLG8+MilyZXR1cm4gdGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihcIkludmFsaWQgcmV0YWluIGhhbmRsaW5nLCBtdXN0IGJlIDw9IDJcIikpO3U9e3RvcGljOnIscW9zOm59LHRoaXMuc2V0dGluZ3MucHJvdG9jb2xWZXJzaW9uPT09NT8odS5ubD1hLHUucmFwPXMsdS5yaD1vKTp0aGlzLnNldHRpbmdzLmJyaWRnZU1vZGUmJih1LnJoPTAsdS5yYXA9ITAsdS5ubD0hMCksRChcIl9wYXJzZVN1YnNjcmliZTogcHVzaCBzdWJzY3JpcHRpb24gYCVzYCB0byBzdWJzY3JpcHRpb25cIix1KSxlLnN1YnNjcmlwdGlvbnMucHVzaCh1KTt9fX1fcGFyc2VTdWJhY2soKXtEKFwiX3BhcnNlU3ViYWNrXCIpO2xldCBlPXRoaXMucGFja2V0O2lmKHRoaXMucGFja2V0LmdyYW50ZWQ9W10sISF0aGlzLl9wYXJzZU1lc3NhZ2VJZCgpKXtpZih0aGlzLnNldHRpbmdzLnByb3RvY29sVmVyc2lvbj09PTUpe2xldCByPXRoaXMuX3BhcnNlUHJvcGVydGllcygpO09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHIpLmxlbmd0aCYmKGUucHJvcGVydGllcz1yKTt9aWYoZS5sZW5ndGg8PTApcmV0dXJuIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IoXCJNYWxmb3JtZWQgc3ViYWNrLCBubyBwYXlsb2FkIHNwZWNpZmllZFwiKSk7Zm9yKDt0aGlzLl9wb3M8dGhpcy5wYWNrZXQubGVuZ3RoOyl7bGV0IHI9dGhpcy5fbGlzdC5yZWFkVUludDgodGhpcy5fcG9zKyspO2lmKHRoaXMuc2V0dGluZ3MucHJvdG9jb2xWZXJzaW9uPT09NSl7aWYoIVYuTVFUVDVfU1VCQUNLX0NPREVTW3JdKXJldHVybiB0aGlzLl9lbWl0RXJyb3IobmV3IEVycm9yKFwiSW52YWxpZCBzdWJhY2sgY29kZVwiKSl9ZWxzZSBpZihyPjImJnIhPT0xMjgpcmV0dXJuIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IoXCJJbnZhbGlkIHN1YmFjayBRb1MsIG11c3QgYmUgMCwgMSwgMiBvciAxMjhcIikpO3RoaXMucGFja2V0LmdyYW50ZWQucHVzaChyKTt9fX1fcGFyc2VVbnN1YnNjcmliZSgpe0QoXCJfcGFyc2VVbnN1YnNjcmliZVwiKTtsZXQgZT10aGlzLnBhY2tldDtpZihlLnVuc3Vic2NyaXB0aW9ucz1bXSwhIXRoaXMuX3BhcnNlTWVzc2FnZUlkKCkpe2lmKHRoaXMuc2V0dGluZ3MucHJvdG9jb2xWZXJzaW9uPT09NSl7bGV0IHI9dGhpcy5fcGFyc2VQcm9wZXJ0aWVzKCk7T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocikubGVuZ3RoJiYoZS5wcm9wZXJ0aWVzPXIpO31pZihlLmxlbmd0aDw9MClyZXR1cm4gdGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihcIk1hbGZvcm1lZCB1bnN1YnNjcmliZSwgbm8gcGF5bG9hZCBzcGVjaWZpZWRcIikpO2Zvcig7dGhpcy5fcG9zPGUubGVuZ3RoOyl7bGV0IHI9dGhpcy5fcGFyc2VTdHJpbmcoKTtpZihyPT09bnVsbClyZXR1cm4gdGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihcIkNhbm5vdCBwYXJzZSB0b3BpY1wiKSk7RChcIl9wYXJzZVVuc3Vic2NyaWJlOiBwdXNoIHRvcGljIGAlc2AgdG8gdW5zdWJzY3JpcHRpb25zXCIsciksZS51bnN1YnNjcmlwdGlvbnMucHVzaChyKTt9fX1fcGFyc2VVbnN1YmFjaygpe0QoXCJfcGFyc2VVbnN1YmFja1wiKTtsZXQgZT10aGlzLnBhY2tldDtpZighdGhpcy5fcGFyc2VNZXNzYWdlSWQoKSlyZXR1cm4gdGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihcIkNhbm5vdCBwYXJzZSBtZXNzYWdlSWRcIikpO2lmKCh0aGlzLnNldHRpbmdzLnByb3RvY29sVmVyc2lvbj09PTN8fHRoaXMuc2V0dGluZ3MucHJvdG9jb2xWZXJzaW9uPT09NCkmJmUubGVuZ3RoIT09MilyZXR1cm4gdGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihcIk1hbGZvcm1lZCB1bnN1YmFjaywgcGF5bG9hZCBsZW5ndGggbXVzdCBiZSAyXCIpKTtpZihlLmxlbmd0aDw9MClyZXR1cm4gdGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihcIk1hbGZvcm1lZCB1bnN1YmFjaywgbm8gcGF5bG9hZCBzcGVjaWZpZWRcIikpO2lmKHRoaXMuc2V0dGluZ3MucHJvdG9jb2xWZXJzaW9uPT09NSl7bGV0IHI9dGhpcy5fcGFyc2VQcm9wZXJ0aWVzKCk7Zm9yKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHIpLmxlbmd0aCYmKGUucHJvcGVydGllcz1yKSxlLmdyYW50ZWQ9W107dGhpcy5fcG9zPHRoaXMucGFja2V0Lmxlbmd0aDspe2xldCBpPXRoaXMuX2xpc3QucmVhZFVJbnQ4KHRoaXMuX3BvcysrKTtpZighVi5NUVRUNV9VTlNVQkFDS19DT0RFU1tpXSlyZXR1cm4gdGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihcIkludmFsaWQgdW5zdWJhY2sgY29kZVwiKSk7dGhpcy5wYWNrZXQuZ3JhbnRlZC5wdXNoKGkpO319fV9wYXJzZUNvbmZpcm1hdGlvbigpe0QoXCJfcGFyc2VDb25maXJtYXRpb246IHBhY2tldC5jbWQ6IGAlc2BcIix0aGlzLnBhY2tldC5jbWQpO2xldCBlPXRoaXMucGFja2V0O2lmKHRoaXMuX3BhcnNlTWVzc2FnZUlkKCksdGhpcy5zZXR0aW5ncy5wcm90b2NvbFZlcnNpb249PT01KXtpZihlLmxlbmd0aD4yKXtzd2l0Y2goZS5yZWFzb25Db2RlPXRoaXMuX3BhcnNlQnl0ZSgpLHRoaXMucGFja2V0LmNtZCl7Y2FzZVwicHViYWNrXCI6Y2FzZVwicHVicmVjXCI6aWYoIVYuTVFUVDVfUFVCQUNLX1BVQlJFQ19DT0RFU1tlLnJlYXNvbkNvZGVdKXJldHVybiB0aGlzLl9lbWl0RXJyb3IobmV3IEVycm9yKFwiSW52YWxpZCBcIit0aGlzLnBhY2tldC5jbWQrXCIgcmVhc29uIGNvZGVcIikpO2JyZWFrO2Nhc2VcInB1YnJlbFwiOmNhc2VcInB1YmNvbXBcIjppZighVi5NUVRUNV9QVUJSRUxfUFVCQ09NUF9DT0RFU1tlLnJlYXNvbkNvZGVdKXJldHVybiB0aGlzLl9lbWl0RXJyb3IobmV3IEVycm9yKFwiSW52YWxpZCBcIit0aGlzLnBhY2tldC5jbWQrXCIgcmVhc29uIGNvZGVcIikpO2JyZWFrfUQoXCJfcGFyc2VDb25maXJtYXRpb246IHBhY2tldC5yZWFzb25Db2RlIGAlZGBcIixlLnJlYXNvbkNvZGUpO31lbHNlIGUucmVhc29uQ29kZT0wO2lmKGUubGVuZ3RoPjMpe2xldCByPXRoaXMuX3BhcnNlUHJvcGVydGllcygpO09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHIpLmxlbmd0aCYmKGUucHJvcGVydGllcz1yKTt9fXJldHVybiAhMH1fcGFyc2VEaXNjb25uZWN0KCl7bGV0IGU9dGhpcy5wYWNrZXQ7aWYoRChcIl9wYXJzZURpc2Nvbm5lY3RcIiksdGhpcy5zZXR0aW5ncy5wcm90b2NvbFZlcnNpb249PT01KXt0aGlzLl9saXN0Lmxlbmd0aD4wPyhlLnJlYXNvbkNvZGU9dGhpcy5fcGFyc2VCeXRlKCksVi5NUVRUNV9ESVNDT05ORUNUX0NPREVTW2UucmVhc29uQ29kZV18fHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IoXCJJbnZhbGlkIGRpc2Nvbm5lY3QgcmVhc29uIGNvZGVcIikpKTplLnJlYXNvbkNvZGU9MDtsZXQgcj10aGlzLl9wYXJzZVByb3BlcnRpZXMoKTtPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhyKS5sZW5ndGgmJihlLnByb3BlcnRpZXM9cik7fXJldHVybiBEKFwiX3BhcnNlRGlzY29ubmVjdCByZXN1bHQ6IHRydWVcIiksITB9X3BhcnNlQXV0aCgpe0QoXCJfcGFyc2VBdXRoXCIpO2xldCBlPXRoaXMucGFja2V0O2lmKHRoaXMuc2V0dGluZ3MucHJvdG9jb2xWZXJzaW9uIT09NSlyZXR1cm4gdGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihcIk5vdCBzdXBwb3J0ZWQgYXV0aCBwYWNrZXQgZm9yIHRoaXMgdmVyc2lvbiBNUVRUXCIpKTtpZihlLnJlYXNvbkNvZGU9dGhpcy5fcGFyc2VCeXRlKCksIVYuTVFUVDVfQVVUSF9DT0RFU1tlLnJlYXNvbkNvZGVdKXJldHVybiB0aGlzLl9lbWl0RXJyb3IobmV3IEVycm9yKFwiSW52YWxpZCBhdXRoIHJlYXNvbiBjb2RlXCIpKTtsZXQgcj10aGlzLl9wYXJzZVByb3BlcnRpZXMoKTtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocikubGVuZ3RoJiYoZS5wcm9wZXJ0aWVzPXIpLEQoXCJfcGFyc2VBdXRoOiByZXN1bHQ6IHRydWVcIiksITB9X3BhcnNlTWVzc2FnZUlkKCl7bGV0IGU9dGhpcy5wYWNrZXQ7cmV0dXJuIGUubWVzc2FnZUlkPXRoaXMuX3BhcnNlTnVtKCksZS5tZXNzYWdlSWQ9PT1udWxsPyh0aGlzLl9lbWl0RXJyb3IobmV3IEVycm9yKFwiQ2Fubm90IHBhcnNlIG1lc3NhZ2VJZFwiKSksITEpOihEKFwiX3BhcnNlTWVzc2FnZUlkOiBwYWNrZXQubWVzc2FnZUlkICVkXCIsZS5tZXNzYWdlSWQpLCEwKX1fcGFyc2VTdHJpbmcoZSl7bGV0IHI9dGhpcy5fcGFyc2VOdW0oKSxpPXIrdGhpcy5fcG9zO2lmKHI9PT0tMXx8aT50aGlzLl9saXN0Lmxlbmd0aHx8aT50aGlzLnBhY2tldC5sZW5ndGgpcmV0dXJuIG51bGw7bGV0IG49dGhpcy5fbGlzdC50b1N0cmluZyhcInV0ZjhcIix0aGlzLl9wb3MsaSk7cmV0dXJuIHRoaXMuX3Bvcys9cixEKFwiX3BhcnNlU3RyaW5nOiByZXN1bHQ6ICVzXCIsbiksbn1fcGFyc2VTdHJpbmdQYWlyKCl7cmV0dXJuIEQoXCJfcGFyc2VTdHJpbmdQYWlyXCIpLHtuYW1lOnRoaXMuX3BhcnNlU3RyaW5nKCksdmFsdWU6dGhpcy5fcGFyc2VTdHJpbmcoKX19X3BhcnNlQnVmZmVyKCl7bGV0IGU9dGhpcy5fcGFyc2VOdW0oKSxyPWUrdGhpcy5fcG9zO2lmKGU9PT0tMXx8cj50aGlzLl9saXN0Lmxlbmd0aHx8cj50aGlzLnBhY2tldC5sZW5ndGgpcmV0dXJuIG51bGw7bGV0IGk9dGhpcy5fbGlzdC5zbGljZSh0aGlzLl9wb3Mscik7cmV0dXJuIHRoaXMuX3Bvcys9ZSxEKFwiX3BhcnNlQnVmZmVyOiByZXN1bHQ6ICVvXCIsaSksaX1fcGFyc2VOdW0oKXtpZih0aGlzLl9saXN0Lmxlbmd0aC10aGlzLl9wb3M8MilyZXR1cm4gLTE7bGV0IGU9dGhpcy5fbGlzdC5yZWFkVUludDE2QkUodGhpcy5fcG9zKTtyZXR1cm4gdGhpcy5fcG9zKz0yLEQoXCJfcGFyc2VOdW06IHJlc3VsdDogJXNcIixlKSxlfV9wYXJzZTRCeXRlTnVtKCl7aWYodGhpcy5fbGlzdC5sZW5ndGgtdGhpcy5fcG9zPDQpcmV0dXJuIC0xO2xldCBlPXRoaXMuX2xpc3QucmVhZFVJbnQzMkJFKHRoaXMuX3Bvcyk7cmV0dXJuIHRoaXMuX3Bvcys9NCxEKFwiX3BhcnNlNEJ5dGVOdW06IHJlc3VsdDogJXNcIixlKSxlfV9wYXJzZVZhckJ5dGVOdW0oZSl7RChcIl9wYXJzZVZhckJ5dGVOdW1cIik7bGV0IHI9NCxpPTAsbj0xLG89MCxzPSExLGEsdT10aGlzLl9wb3M/dGhpcy5fcG9zOjA7Zm9yKDtpPHImJnUraTx0aGlzLl9saXN0Lmxlbmd0aDspe2lmKGE9dGhpcy5fbGlzdC5yZWFkVUludDgodStpKyspLG8rPW4qKGEmVi5WQVJCWVRFSU5UX01BU0spLG4qPTEyOCwhKGEmVi5WQVJCWVRFSU5UX0ZJTl9NQVNLKSl7cz0hMDticmVha31pZih0aGlzLl9saXN0Lmxlbmd0aDw9aSlicmVha31yZXR1cm4gIXMmJmk9PT1yJiZ0aGlzLl9saXN0Lmxlbmd0aD49aSYmdGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihcIkludmFsaWQgdmFyaWFibGUgYnl0ZSBpbnRlZ2VyXCIpKSx1JiYodGhpcy5fcG9zKz1pKSxzP2U/cz17Ynl0ZXM6aSx2YWx1ZTpvfTpzPW86cz0hMSxEKFwiX3BhcnNlVmFyQnl0ZU51bTogcmVzdWx0OiAlb1wiLHMpLHN9X3BhcnNlQnl0ZSgpe2xldCBlO3JldHVybiB0aGlzLl9wb3M8dGhpcy5fbGlzdC5sZW5ndGgmJihlPXRoaXMuX2xpc3QucmVhZFVJbnQ4KHRoaXMuX3BvcyksdGhpcy5fcG9zKyspLEQoXCJfcGFyc2VCeXRlOiByZXN1bHQ6ICVvXCIsZSksZX1fcGFyc2VCeVR5cGUoZSl7c3dpdGNoKEQoXCJfcGFyc2VCeVR5cGU6IHR5cGU6ICVzXCIsZSksZSl7Y2FzZVwiYnl0ZVwiOnJldHVybiB0aGlzLl9wYXJzZUJ5dGUoKSE9PTA7Y2FzZVwiaW50OFwiOnJldHVybiB0aGlzLl9wYXJzZUJ5dGUoKTtjYXNlXCJpbnQxNlwiOnJldHVybiB0aGlzLl9wYXJzZU51bSgpO2Nhc2VcImludDMyXCI6cmV0dXJuIHRoaXMuX3BhcnNlNEJ5dGVOdW0oKTtjYXNlXCJ2YXJcIjpyZXR1cm4gdGhpcy5fcGFyc2VWYXJCeXRlTnVtKCk7Y2FzZVwic3RyaW5nXCI6cmV0dXJuIHRoaXMuX3BhcnNlU3RyaW5nKCk7Y2FzZVwicGFpclwiOnJldHVybiB0aGlzLl9wYXJzZVN0cmluZ1BhaXIoKTtjYXNlXCJiaW5hcnlcIjpyZXR1cm4gdGhpcy5fcGFyc2VCdWZmZXIoKX19X3BhcnNlUHJvcGVydGllcygpe0QoXCJfcGFyc2VQcm9wZXJ0aWVzXCIpO2xldCBlPXRoaXMuX3BhcnNlVmFyQnl0ZU51bSgpLGk9dGhpcy5fcG9zK2Usbj17fTtmb3IoO3RoaXMuX3BvczxpOyl7bGV0IG89dGhpcy5fcGFyc2VCeXRlKCk7aWYoIW8pcmV0dXJuIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IoXCJDYW5ub3QgcGFyc2UgcHJvcGVydHkgY29kZSB0eXBlXCIpKSwhMTtsZXQgcz1WLnByb3BlcnRpZXNDb2Rlc1tvXTtpZighcylyZXR1cm4gdGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihcIlVua25vd24gcHJvcGVydHlcIikpLCExO2lmKHM9PT1cInVzZXJQcm9wZXJ0aWVzXCIpe25bc118fChuW3NdPU9iamVjdC5jcmVhdGUobnVsbCkpO2xldCBhPXRoaXMuX3BhcnNlQnlUeXBlKFYucHJvcGVydGllc1R5cGVzW3NdKTtpZihuW3NdW2EubmFtZV0paWYoQXJyYXkuaXNBcnJheShuW3NdW2EubmFtZV0pKW5bc11bYS5uYW1lXS5wdXNoKGEudmFsdWUpO2Vsc2Uge2xldCB1PW5bc11bYS5uYW1lXTtuW3NdW2EubmFtZV09W3VdLG5bc11bYS5uYW1lXS5wdXNoKGEudmFsdWUpO31lbHNlIG5bc11bYS5uYW1lXT1hLnZhbHVlO2NvbnRpbnVlfW5bc10/QXJyYXkuaXNBcnJheShuW3NdKT9uW3NdLnB1c2godGhpcy5fcGFyc2VCeVR5cGUoVi5wcm9wZXJ0aWVzVHlwZXNbc10pKToobltzXT1bbltzXV0sbltzXS5wdXNoKHRoaXMuX3BhcnNlQnlUeXBlKFYucHJvcGVydGllc1R5cGVzW3NdKSkpOm5bc109dGhpcy5fcGFyc2VCeVR5cGUoVi5wcm9wZXJ0aWVzVHlwZXNbc10pO31yZXR1cm4gbn1fbmV3UGFja2V0KCl7cmV0dXJuIEQoXCJfbmV3UGFja2V0XCIpLHRoaXMucGFja2V0JiYodGhpcy5fbGlzdC5jb25zdW1lKHRoaXMucGFja2V0Lmxlbmd0aCksRChcIl9uZXdQYWNrZXQ6IHBhcnNlciBlbWl0IHBhY2tldDogcGFja2V0LmNtZDogJXMsIHBhY2tldC5wYXlsb2FkOiAlcywgcGFja2V0Lmxlbmd0aDogJWRcIix0aGlzLnBhY2tldC5jbWQsdGhpcy5wYWNrZXQucGF5bG9hZCx0aGlzLnBhY2tldC5sZW5ndGgpLHRoaXMuZW1pdChcInBhY2tldFwiLHRoaXMucGFja2V0KSksRChcIl9uZXdQYWNrZXQ6IG5ldyBwYWNrZXRcIiksdGhpcy5wYWNrZXQ9bmV3IHdkLHRoaXMuX3Bvcz0wLCEwfV9lbWl0RXJyb3IoZSl7RChcIl9lbWl0RXJyb3JcIixlKSx0aGlzLmVycm9yPWUsdGhpcy5lbWl0KFwiZXJyb3JcIixlKTt9fTtfZC5leHBvcnRzPVdvO30pO3ZhciBBZD1NKChIUCxTZCk9Pnt2KCk7bSgpO18oKTt2YXJ7QnVmZmVyOnZpfT0oeWUoKSxYKF9lKSksT209NjU1MzYsdmQ9e30sa209dmkuaXNCdWZmZXIodmkuZnJvbShbMSwyXSkuc3ViYXJyYXkoMCwxKSk7ZnVuY3Rpb24gRWQodCl7bGV0IGU9dmkuYWxsb2NVbnNhZmUoMik7cmV0dXJuIGUud3JpdGVVSW50OCh0Pj44LDApLGUud3JpdGVVSW50OCh0JjI1NSwwKzEpLGV9ZnVuY3Rpb24geG0oKXtmb3IobGV0IHQ9MDt0PE9tO3QrKyl2ZFt0XT1FZCh0KTt9ZnVuY3Rpb24gTW0odCl7bGV0IHI9MCxpPTAsbj12aS5hbGxvY1Vuc2FmZSg0KTtkbyByPXQlMTI4fDAsdD10LzEyOHwwLHQ+MCYmKHI9cnwxMjgpLG4ud3JpdGVVSW50OChyLGkrKyk7d2hpbGUodD4wJiZpPDQpO3JldHVybiB0PjAmJihpPTApLGttP24uc3ViYXJyYXkoMCxpKTpuLnNsaWNlKDAsaSl9ZnVuY3Rpb24gTG0odCl7bGV0IGU9dmkuYWxsb2NVbnNhZmUoNCk7cmV0dXJuIGUud3JpdGVVSW50MzJCRSh0LDApLGV9U2QuZXhwb3J0cz17Y2FjaGU6dmQsZ2VuZXJhdGVDYWNoZTp4bSxnZW5lcmF0ZU51bWJlcjpFZCxnZW5CdWZWYXJpYWJsZUJ5dGVJbnQ6TW0sZ2VuZXJhdGU0Qnl0ZUJ1ZmZlcjpMbX07fSk7dmFyIElkPU0oKGVPLCRvKT0+e3YoKTttKCk7XygpO3R5cGVvZiBQPlwidVwifHwhUC52ZXJzaW9ufHxQLnZlcnNpb24uaW5kZXhPZihcInYwLlwiKT09PTB8fFAudmVyc2lvbi5pbmRleE9mKFwidjEuXCIpPT09MCYmUC52ZXJzaW9uLmluZGV4T2YoXCJ2MS44LlwiKSE9PTA/JG8uZXhwb3J0cz17bmV4dFRpY2s6VW19OiRvLmV4cG9ydHM9UDtmdW5jdGlvbiBVbSh0LGUscixpKXtpZih0eXBlb2YgdCE9XCJmdW5jdGlvblwiKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wiY2FsbGJhY2tcIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTt2YXIgbj1hcmd1bWVudHMubGVuZ3RoLG8scztzd2l0Y2gobil7Y2FzZSAwOmNhc2UgMTpyZXR1cm4gUC5uZXh0VGljayh0KTtjYXNlIDI6cmV0dXJuIFAubmV4dFRpY2soZnVuY3Rpb24oKXt0LmNhbGwobnVsbCxlKTt9KTtjYXNlIDM6cmV0dXJuIFAubmV4dFRpY2soZnVuY3Rpb24oKXt0LmNhbGwobnVsbCxlLHIpO30pO2Nhc2UgNDpyZXR1cm4gUC5uZXh0VGljayhmdW5jdGlvbigpe3QuY2FsbChudWxsLGUscixpKTt9KTtkZWZhdWx0OmZvcihvPW5ldyBBcnJheShuLTEpLHM9MDtzPG8ubGVuZ3RoOylvW3MrK109YXJndW1lbnRzW3NdO3JldHVybiBQLm5leHRUaWNrKGZ1bmN0aW9uKCl7dC5hcHBseShudWxsLG8pO30pfX19KTt2YXIgem89TSgoZk8seGQpPT57digpO20oKTtfKCk7dmFyIGo9Rm8oKSx7QnVmZmVyOnF9PSh5ZSgpLFgoX2UpKSxObT1xLmFsbG9jVW5zYWZlKDApLHFtPXEuZnJvbShbMF0pLEVpPUFkKCksRG09SWQoKS5uZXh0VGljayxxZT1vdCgpKFwibXF0dC1wYWNrZXQ6d3JpdGVUb1N0cmVhbVwiKSxDbj1FaS5jYWNoZSxqbT1FaS5nZW5lcmF0ZU51bWJlcixGbT1FaS5nZW5lcmF0ZUNhY2hlLEhvPUVpLmdlbkJ1ZlZhcmlhYmxlQnl0ZUludCxXbT1FaS5nZW5lcmF0ZTRCeXRlQnVmZmVyLEllPVZvLEJuPSEwO2Z1bmN0aW9uIE9kKHQsZSxyKXtzd2l0Y2gocWUoXCJnZW5lcmF0ZSBjYWxsZWRcIiksZS5jb3JrJiYoZS5jb3JrKCksRG0oJG0sZSkpLEJuJiYoQm49ITEsRm0oKSkscWUoXCJnZW5lcmF0ZTogcGFja2V0LmNtZDogJXNcIix0LmNtZCksdC5jbWQpe2Nhc2VcImNvbm5lY3RcIjpyZXR1cm4gSG0odCxlKTtjYXNlXCJjb25uYWNrXCI6cmV0dXJuIFZtKHQsZSxyKTtjYXNlXCJwdWJsaXNoXCI6cmV0dXJuIHptKHQsZSxyKTtjYXNlXCJwdWJhY2tcIjpjYXNlXCJwdWJyZWNcIjpjYXNlXCJwdWJyZWxcIjpjYXNlXCJwdWJjb21wXCI6cmV0dXJuIEttKHQsZSxyKTtjYXNlXCJzdWJzY3JpYmVcIjpyZXR1cm4gR20odCxlLHIpO2Nhc2VcInN1YmFja1wiOnJldHVybiBRbSh0LGUscik7Y2FzZVwidW5zdWJzY3JpYmVcIjpyZXR1cm4gWW0odCxlLHIpO2Nhc2VcInVuc3ViYWNrXCI6cmV0dXJuIEptKHQsZSxyKTtjYXNlXCJwaW5ncmVxXCI6Y2FzZVwicGluZ3Jlc3BcIjpyZXR1cm4gWG0odCxlKTtjYXNlXCJkaXNjb25uZWN0XCI6cmV0dXJuIFptKHQsZSxyKTtjYXNlXCJhdXRoXCI6cmV0dXJuIGUxKHQsZSxyKTtkZWZhdWx0OnJldHVybiBlLmRlc3Ryb3kobmV3IEVycm9yKFwiVW5rbm93biBjb21tYW5kXCIpKSwhMX19T2JqZWN0LmRlZmluZVByb3BlcnR5KE9kLFwiY2FjaGVOdW1iZXJzXCIse2dldCgpe3JldHVybiBJZT09PVZvfSxzZXQodCl7dD8oKCFDbnx8T2JqZWN0LmtleXMoQ24pLmxlbmd0aD09PTApJiYoQm49ITApLEllPVZvKTooQm49ITEsSWU9dDEpO319KTtmdW5jdGlvbiAkbSh0KXt0LnVuY29yaygpO31mdW5jdGlvbiBIbSh0LGUscil7bGV0IGk9dHx8e30sbj1pLnByb3RvY29sSWR8fFwiTVFUVFwiLG89aS5wcm90b2NvbFZlcnNpb258fDQscz1pLndpbGwsYT1pLmNsZWFuLHU9aS5rZWVwYWxpdmV8fDAsYz1pLmNsaWVudElkfHxcIlwiLGg9aS51c2VybmFtZSxkPWkucGFzc3dvcmQsZz1pLnByb3BlcnRpZXM7YT09PXZvaWQgMCYmKGE9ITApO2xldCB5PTA7aWYoIW58fHR5cGVvZiBuIT1cInN0cmluZ1wiJiYhcS5pc0J1ZmZlcihuKSlyZXR1cm4gZS5kZXN0cm95KG5ldyBFcnJvcihcIkludmFsaWQgcHJvdG9jb2xJZFwiKSksITE7aWYoeSs9bi5sZW5ndGgrMixvIT09MyYmbyE9PTQmJm8hPT01KXJldHVybiBlLmRlc3Ryb3kobmV3IEVycm9yKFwiSW52YWxpZCBwcm90b2NvbCB2ZXJzaW9uXCIpKSwhMTtpZih5Kz0xLCh0eXBlb2YgYz09XCJzdHJpbmdcInx8cS5pc0J1ZmZlcihjKSkmJihjfHxvPj00KSYmKGN8fGEpKXkrPXEuYnl0ZUxlbmd0aChjKSsyO2Vsc2Uge2lmKG88NClyZXR1cm4gZS5kZXN0cm95KG5ldyBFcnJvcihcImNsaWVudElkIG11c3QgYmUgc3VwcGxpZWQgYmVmb3JlIDMuMS4xXCIpKSwhMTtpZihhKjE9PT0wKXJldHVybiBlLmRlc3Ryb3kobmV3IEVycm9yKFwiY2xpZW50SWQgbXVzdCBiZSBnaXZlbiBpZiBjbGVhblNlc3Npb24gc2V0IHRvIDBcIikpLCExfWlmKHR5cGVvZiB1IT1cIm51bWJlclwifHx1PDB8fHU+NjU1MzV8fHUlMSE9PTApcmV0dXJuIGUuZGVzdHJveShuZXcgRXJyb3IoXCJJbnZhbGlkIGtlZXBhbGl2ZVwiKSksITE7eSs9Mix5Kz0xO2xldCB3LEU7aWYobz09PTUpe2lmKHc9RnQoZSxnKSwhdylyZXR1cm4gITE7eSs9dy5sZW5ndGg7fWlmKHMpe2lmKHR5cGVvZiBzIT1cIm9iamVjdFwiKXJldHVybiBlLmRlc3Ryb3kobmV3IEVycm9yKFwiSW52YWxpZCB3aWxsXCIpKSwhMTtpZighcy50b3BpY3x8dHlwZW9mIHMudG9waWMhPVwic3RyaW5nXCIpcmV0dXJuIGUuZGVzdHJveShuZXcgRXJyb3IoXCJJbnZhbGlkIHdpbGwgdG9waWNcIikpLCExO2lmKHkrPXEuYnl0ZUxlbmd0aChzLnRvcGljKSsyLHkrPTIscy5wYXlsb2FkKWlmKHMucGF5bG9hZC5sZW5ndGg+PTApdHlwZW9mIHMucGF5bG9hZD09XCJzdHJpbmdcIj95Kz1xLmJ5dGVMZW5ndGgocy5wYXlsb2FkKTp5Kz1zLnBheWxvYWQubGVuZ3RoO2Vsc2UgcmV0dXJuIGUuZGVzdHJveShuZXcgRXJyb3IoXCJJbnZhbGlkIHdpbGwgcGF5bG9hZFwiKSksITE7aWYoRT17fSxvPT09NSl7aWYoRT1GdChlLHMucHJvcGVydGllcyksIUUpcmV0dXJuICExO3krPUUubGVuZ3RoO319bGV0IFM9ITE7aWYoaCE9bnVsbClpZihQZChoKSlTPSEwLHkrPXEuYnl0ZUxlbmd0aChoKSsyO2Vsc2UgcmV0dXJuIGUuZGVzdHJveShuZXcgRXJyb3IoXCJJbnZhbGlkIHVzZXJuYW1lXCIpKSwhMTtpZihkIT1udWxsKXtpZighUylyZXR1cm4gZS5kZXN0cm95KG5ldyBFcnJvcihcIlVzZXJuYW1lIGlzIHJlcXVpcmVkIHRvIHVzZSBwYXNzd29yZFwiKSksITE7aWYoUGQoZCkpeSs9a2QoZCkrMjtlbHNlIHJldHVybiBlLmRlc3Ryb3kobmV3IEVycm9yKFwiSW52YWxpZCBwYXNzd29yZFwiKSksITF9ZS53cml0ZShqLkNPTk5FQ1RfSEVBREVSKSxEZShlLHkpLEdyKGUsbiksaS5icmlkZ2VNb2RlJiYobys9MTI4KSxlLndyaXRlKG89PT0xMzE/ai5WRVJTSU9OMTMxOm89PT0xMzI/ai5WRVJTSU9OMTMyOm89PT00P2ouVkVSU0lPTjQ6bz09PTU/ai5WRVJTSU9ONTpqLlZFUlNJT04zKTtsZXQgST0wO3JldHVybiBJfD1oIT1udWxsP2ouVVNFUk5BTUVfTUFTSzowLEl8PWQhPW51bGw/ai5QQVNTV09SRF9NQVNLOjAsSXw9cyYmcy5yZXRhaW4/ai5XSUxMX1JFVEFJTl9NQVNLOjAsSXw9cyYmcy5xb3M/cy5xb3M8PGouV0lMTF9RT1NfU0hJRlQ6MCxJfD1zP2ouV0lMTF9GTEFHX01BU0s6MCxJfD1hP2ouQ0xFQU5fU0VTU0lPTl9NQVNLOjAsZS53cml0ZShxLmZyb20oW0ldKSksSWUoZSx1KSxvPT09NSYmdy53cml0ZSgpLEdyKGUsYykscyYmKG89PT01JiZFLndyaXRlKCkseXIoZSxzLnRvcGljKSxHcihlLHMucGF5bG9hZCkpLGghPW51bGwmJkdyKGUsaCksZCE9bnVsbCYmR3IoZSxkKSwhMH1mdW5jdGlvbiBWbSh0LGUscil7bGV0IGk9cj9yLnByb3RvY29sVmVyc2lvbjo0LG49dHx8e30sbz1pPT09NT9uLnJlYXNvbkNvZGU6bi5yZXR1cm5Db2RlLHM9bi5wcm9wZXJ0aWVzLGE9MjtpZih0eXBlb2YgbyE9XCJudW1iZXJcIilyZXR1cm4gZS5kZXN0cm95KG5ldyBFcnJvcihcIkludmFsaWQgcmV0dXJuIGNvZGVcIikpLCExO2xldCB1PW51bGw7aWYoaT09PTUpe2lmKHU9RnQoZSxzKSwhdSlyZXR1cm4gITE7YSs9dS5sZW5ndGg7fXJldHVybiBlLndyaXRlKGouQ09OTkFDS19IRUFERVIpLERlKGUsYSksZS53cml0ZShuLnNlc3Npb25QcmVzZW50P2ouU0VTU0lPTlBSRVNFTlRfSEVBREVSOnFtKSxlLndyaXRlKHEuZnJvbShbb10pKSx1Py53cml0ZSgpLCEwfWZ1bmN0aW9uIHptKHQsZSxyKXtxZShcInB1Ymxpc2g6IHBhY2tldDogJW9cIix0KTtsZXQgaT1yP3IucHJvdG9jb2xWZXJzaW9uOjQsbj10fHx7fSxvPW4ucW9zfHwwLHM9bi5yZXRhaW4/ai5SRVRBSU5fTUFTSzowLGE9bi50b3BpYyx1PW4ucGF5bG9hZHx8Tm0sYz1uLm1lc3NhZ2VJZCxoPW4ucHJvcGVydGllcyxkPTA7aWYodHlwZW9mIGE9PVwic3RyaW5nXCIpZCs9cS5ieXRlTGVuZ3RoKGEpKzI7ZWxzZSBpZihxLmlzQnVmZmVyKGEpKWQrPWEubGVuZ3RoKzI7ZWxzZSByZXR1cm4gZS5kZXN0cm95KG5ldyBFcnJvcihcIkludmFsaWQgdG9waWNcIikpLCExO2lmKHEuaXNCdWZmZXIodSk/ZCs9dS5sZW5ndGg6ZCs9cS5ieXRlTGVuZ3RoKHUpLG8mJnR5cGVvZiBjIT1cIm51bWJlclwiKXJldHVybiBlLmRlc3Ryb3kobmV3IEVycm9yKFwiSW52YWxpZCBtZXNzYWdlSWRcIikpLCExO28mJihkKz0yKTtsZXQgZz1udWxsO2lmKGk9PT01KXtpZihnPUZ0KGUsaCksIWcpcmV0dXJuICExO2QrPWcubGVuZ3RoO31yZXR1cm4gZS53cml0ZShqLlBVQkxJU0hfSEVBREVSW29dW24uZHVwPzE6MF1bcz8xOjBdKSxEZShlLGQpLEllKGUsa2QoYSkpLGUud3JpdGUoYSksbz4wJiZJZShlLGMpLGc/LndyaXRlKCkscWUoXCJwdWJsaXNoOiBwYXlsb2FkOiAlb1wiLHUpLGUud3JpdGUodSl9ZnVuY3Rpb24gS20odCxlLHIpe2xldCBpPXI/ci5wcm90b2NvbFZlcnNpb246NCxuPXR8fHt9LG89bi5jbWR8fFwicHViYWNrXCIscz1uLm1lc3NhZ2VJZCxhPW4uZHVwJiZvPT09XCJwdWJyZWxcIj9qLkRVUF9NQVNLOjAsdT0wLGM9bi5yZWFzb25Db2RlLGg9bi5wcm9wZXJ0aWVzLGQ9aT09PTU/MzoyO2lmKG89PT1cInB1YnJlbFwiJiYodT0xKSx0eXBlb2YgcyE9XCJudW1iZXJcIilyZXR1cm4gZS5kZXN0cm95KG5ldyBFcnJvcihcIkludmFsaWQgbWVzc2FnZUlkXCIpKSwhMTtsZXQgZz1udWxsO2lmKGk9PT01JiZ0eXBlb2YgaD09XCJvYmplY3RcIil7aWYoZz1TaShlLGgscixkKSwhZylyZXR1cm4gITE7ZCs9Zy5sZW5ndGg7fXJldHVybiBlLndyaXRlKGouQUNLU1tvXVt1XVthXVswXSksZD09PTMmJihkKz1jIT09MD8xOi0xKSxEZShlLGQpLEllKGUscyksaT09PTUmJmQhPT0yJiZlLndyaXRlKHEuZnJvbShbY10pKSxnIT09bnVsbD9nLndyaXRlKCk6ZD09PTQmJmUud3JpdGUocS5mcm9tKFswXSkpLCEwfWZ1bmN0aW9uIEdtKHQsZSxyKXtxZShcInN1YnNjcmliZTogcGFja2V0OiBcIik7bGV0IGk9cj9yLnByb3RvY29sVmVyc2lvbjo0LG49dHx8e30sbz1uLmR1cD9qLkRVUF9NQVNLOjAscz1uLm1lc3NhZ2VJZCxhPW4uc3Vic2NyaXB0aW9ucyx1PW4ucHJvcGVydGllcyxjPTA7aWYodHlwZW9mIHMhPVwibnVtYmVyXCIpcmV0dXJuIGUuZGVzdHJveShuZXcgRXJyb3IoXCJJbnZhbGlkIG1lc3NhZ2VJZFwiKSksITE7Yys9MjtsZXQgaD1udWxsO2lmKGk9PT01KXtpZihoPUZ0KGUsdSksIWgpcmV0dXJuICExO2MrPWgubGVuZ3RoO31pZih0eXBlb2YgYT09XCJvYmplY3RcIiYmYS5sZW5ndGgpZm9yKGxldCBnPTA7ZzxhLmxlbmd0aDtnKz0xKXtsZXQgeT1hW2ddLnRvcGljLHc9YVtnXS5xb3M7aWYodHlwZW9mIHkhPVwic3RyaW5nXCIpcmV0dXJuIGUuZGVzdHJveShuZXcgRXJyb3IoXCJJbnZhbGlkIHN1YnNjcmlwdGlvbnMgLSBpbnZhbGlkIHRvcGljXCIpKSwhMTtpZih0eXBlb2YgdyE9XCJudW1iZXJcIilyZXR1cm4gZS5kZXN0cm95KG5ldyBFcnJvcihcIkludmFsaWQgc3Vic2NyaXB0aW9ucyAtIGludmFsaWQgcW9zXCIpKSwhMTtpZihpPT09NSl7aWYodHlwZW9mKGFbZ10ubmx8fCExKSE9XCJib29sZWFuXCIpcmV0dXJuIGUuZGVzdHJveShuZXcgRXJyb3IoXCJJbnZhbGlkIHN1YnNjcmlwdGlvbnMgLSBpbnZhbGlkIE5vIExvY2FsXCIpKSwhMTtpZih0eXBlb2YoYVtnXS5yYXB8fCExKSE9XCJib29sZWFuXCIpcmV0dXJuIGUuZGVzdHJveShuZXcgRXJyb3IoXCJJbnZhbGlkIHN1YnNjcmlwdGlvbnMgLSBpbnZhbGlkIFJldGFpbiBhcyBQdWJsaXNoZWRcIikpLCExO2xldCBJPWFbZ10ucmh8fDA7aWYodHlwZW9mIEkhPVwibnVtYmVyXCJ8fEk+MilyZXR1cm4gZS5kZXN0cm95KG5ldyBFcnJvcihcIkludmFsaWQgc3Vic2NyaXB0aW9ucyAtIGludmFsaWQgUmV0YWluIEhhbmRsaW5nXCIpKSwhMX1jKz1xLmJ5dGVMZW5ndGgoeSkrMisxO31lbHNlIHJldHVybiBlLmRlc3Ryb3kobmV3IEVycm9yKFwiSW52YWxpZCBzdWJzY3JpcHRpb25zXCIpKSwhMTtxZShcInN1YnNjcmliZTogd3JpdGluZyB0byBzdHJlYW06ICVvXCIsai5TVUJTQ1JJQkVfSEVBREVSKSxlLndyaXRlKGouU1VCU0NSSUJFX0hFQURFUlsxXVtvPzE6MF1bMF0pLERlKGUsYyksSWUoZSxzKSxoIT09bnVsbCYmaC53cml0ZSgpO2xldCBkPSEwO2ZvcihsZXQgZyBvZiBhKXtsZXQgeT1nLnRvcGljLHc9Zy5xb3MsRT0rZy5ubCxTPStnLnJhcCxJPWcucmgsQzt5cihlLHkpLEM9ai5TVUJTQ1JJQkVfT1BUSU9OU19RT1Nbd10saT09PTUmJihDfD1FP2ouU1VCU0NSSUJFX09QVElPTlNfTkw6MCxDfD1TP2ouU1VCU0NSSUJFX09QVElPTlNfUkFQOjAsQ3w9ST9qLlNVQlNDUklCRV9PUFRJT05TX1JIW0ldOjApLGQ9ZS53cml0ZShxLmZyb20oW0NdKSk7fXJldHVybiBkfWZ1bmN0aW9uIFFtKHQsZSxyKXtsZXQgaT1yP3IucHJvdG9jb2xWZXJzaW9uOjQsbj10fHx7fSxvPW4ubWVzc2FnZUlkLHM9bi5ncmFudGVkLGE9bi5wcm9wZXJ0aWVzLHU9MDtpZih0eXBlb2YgbyE9XCJudW1iZXJcIilyZXR1cm4gZS5kZXN0cm95KG5ldyBFcnJvcihcIkludmFsaWQgbWVzc2FnZUlkXCIpKSwhMTtpZih1Kz0yLHR5cGVvZiBzPT1cIm9iamVjdFwiJiZzLmxlbmd0aClmb3IobGV0IGg9MDtoPHMubGVuZ3RoO2grPTEpe2lmKHR5cGVvZiBzW2hdIT1cIm51bWJlclwiKXJldHVybiBlLmRlc3Ryb3kobmV3IEVycm9yKFwiSW52YWxpZCBxb3MgdmVjdG9yXCIpKSwhMTt1Kz0xO31lbHNlIHJldHVybiBlLmRlc3Ryb3kobmV3IEVycm9yKFwiSW52YWxpZCBxb3MgdmVjdG9yXCIpKSwhMTtsZXQgYz1udWxsO2lmKGk9PT01KXtpZihjPVNpKGUsYSxyLHUpLCFjKXJldHVybiAhMTt1Kz1jLmxlbmd0aDt9cmV0dXJuIGUud3JpdGUoai5TVUJBQ0tfSEVBREVSKSxEZShlLHUpLEllKGUsbyksYyE9PW51bGwmJmMud3JpdGUoKSxlLndyaXRlKHEuZnJvbShzKSl9ZnVuY3Rpb24gWW0odCxlLHIpe2xldCBpPXI/ci5wcm90b2NvbFZlcnNpb246NCxuPXR8fHt9LG89bi5tZXNzYWdlSWQscz1uLmR1cD9qLkRVUF9NQVNLOjAsYT1uLnVuc3Vic2NyaXB0aW9ucyx1PW4ucHJvcGVydGllcyxjPTA7aWYodHlwZW9mIG8hPVwibnVtYmVyXCIpcmV0dXJuIGUuZGVzdHJveShuZXcgRXJyb3IoXCJJbnZhbGlkIG1lc3NhZ2VJZFwiKSksITE7aWYoYys9Mix0eXBlb2YgYT09XCJvYmplY3RcIiYmYS5sZW5ndGgpZm9yKGxldCBnPTA7ZzxhLmxlbmd0aDtnKz0xKXtpZih0eXBlb2YgYVtnXSE9XCJzdHJpbmdcIilyZXR1cm4gZS5kZXN0cm95KG5ldyBFcnJvcihcIkludmFsaWQgdW5zdWJzY3JpcHRpb25zXCIpKSwhMTtjKz1xLmJ5dGVMZW5ndGgoYVtnXSkrMjt9ZWxzZSByZXR1cm4gZS5kZXN0cm95KG5ldyBFcnJvcihcIkludmFsaWQgdW5zdWJzY3JpcHRpb25zXCIpKSwhMTtsZXQgaD1udWxsO2lmKGk9PT01KXtpZihoPUZ0KGUsdSksIWgpcmV0dXJuICExO2MrPWgubGVuZ3RoO31lLndyaXRlKGouVU5TVUJTQ1JJQkVfSEVBREVSWzFdW3M/MTowXVswXSksRGUoZSxjKSxJZShlLG8pLGghPT1udWxsJiZoLndyaXRlKCk7bGV0IGQ9ITA7Zm9yKGxldCBnPTA7ZzxhLmxlbmd0aDtnKyspZD15cihlLGFbZ10pO3JldHVybiBkfWZ1bmN0aW9uIEptKHQsZSxyKXtsZXQgaT1yP3IucHJvdG9jb2xWZXJzaW9uOjQsbj10fHx7fSxvPW4ubWVzc2FnZUlkLHM9bi5kdXA/ai5EVVBfTUFTSzowLGE9bi5ncmFudGVkLHU9bi5wcm9wZXJ0aWVzLGM9bi5jbWQsaD0wLGQ9MjtpZih0eXBlb2YgbyE9XCJudW1iZXJcIilyZXR1cm4gZS5kZXN0cm95KG5ldyBFcnJvcihcIkludmFsaWQgbWVzc2FnZUlkXCIpKSwhMTtpZihpPT09NSlpZih0eXBlb2YgYT09XCJvYmplY3RcIiYmYS5sZW5ndGgpZm9yKGxldCB5PTA7eTxhLmxlbmd0aDt5Kz0xKXtpZih0eXBlb2YgYVt5XSE9XCJudW1iZXJcIilyZXR1cm4gZS5kZXN0cm95KG5ldyBFcnJvcihcIkludmFsaWQgcW9zIHZlY3RvclwiKSksITE7ZCs9MTt9ZWxzZSByZXR1cm4gZS5kZXN0cm95KG5ldyBFcnJvcihcIkludmFsaWQgcW9zIHZlY3RvclwiKSksITE7bGV0IGc9bnVsbDtpZihpPT09NSl7aWYoZz1TaShlLHUscixkKSwhZylyZXR1cm4gITE7ZCs9Zy5sZW5ndGg7fXJldHVybiBlLndyaXRlKGouQUNLU1tjXVtoXVtzXVswXSksRGUoZSxkKSxJZShlLG8pLGchPT1udWxsJiZnLndyaXRlKCksaT09PTUmJmUud3JpdGUocS5mcm9tKGEpKSwhMH1mdW5jdGlvbiBYbSh0LGUscil7cmV0dXJuIGUud3JpdGUoai5FTVBUWVt0LmNtZF0pfWZ1bmN0aW9uIFptKHQsZSxyKXtsZXQgaT1yP3IucHJvdG9jb2xWZXJzaW9uOjQsbj10fHx7fSxvPW4ucmVhc29uQ29kZSxzPW4ucHJvcGVydGllcyxhPWk9PT01PzE6MCx1PW51bGw7aWYoaT09PTUpe2lmKHU9U2koZSxzLHIsYSksIXUpcmV0dXJuICExO2ErPXUubGVuZ3RoO31yZXR1cm4gZS53cml0ZShxLmZyb20oW2ouY29kZXMuZGlzY29ubmVjdDw8NF0pKSxEZShlLGEpLGk9PT01JiZlLndyaXRlKHEuZnJvbShbb10pKSx1IT09bnVsbCYmdS53cml0ZSgpLCEwfWZ1bmN0aW9uIGUxKHQsZSxyKXtsZXQgaT1yP3IucHJvdG9jb2xWZXJzaW9uOjQsbj10fHx7fSxvPW4ucmVhc29uQ29kZSxzPW4ucHJvcGVydGllcyxhPWk9PT01PzE6MDtpIT09NSYmZS5kZXN0cm95KG5ldyBFcnJvcihcIkludmFsaWQgbXF0dCB2ZXJzaW9uIGZvciBhdXRoIHBhY2tldFwiKSk7bGV0IHU9U2koZSxzLHIsYSk7cmV0dXJuIHU/KGErPXUubGVuZ3RoLGUud3JpdGUocS5mcm9tKFtqLmNvZGVzLmF1dGg8PDRdKSksRGUoZSxhKSxlLndyaXRlKHEuZnJvbShbb10pKSx1IT09bnVsbCYmdS53cml0ZSgpLCEwKTohMX12YXIgVGQ9e307ZnVuY3Rpb24gRGUodCxlKXtpZihlPmouVkFSQllURUlOVF9NQVgpcmV0dXJuIHQuZGVzdHJveShuZXcgRXJyb3IoYEludmFsaWQgdmFyaWFibGUgYnl0ZSBpbnRlZ2VyOiAke2V9YCkpLCExO2xldCByPVRkW2VdO3JldHVybiByfHwocj1IbyhlKSxlPDE2Mzg0JiYoVGRbZV09cikpLHFlKFwid3JpdGVWYXJCeXRlSW50OiB3cml0aW5nIHRvIHN0cmVhbTogJW9cIixyKSx0LndyaXRlKHIpfWZ1bmN0aW9uIHlyKHQsZSl7bGV0IHI9cS5ieXRlTGVuZ3RoKGUpO3JldHVybiBJZSh0LHIpLHFlKFwid3JpdGVTdHJpbmc6ICVzXCIsZSksdC53cml0ZShlLFwidXRmOFwiKX1mdW5jdGlvbiBSZCh0LGUscil7eXIodCxlKSx5cih0LHIpO31mdW5jdGlvbiBWbyh0LGUpe3JldHVybiBxZShcIndyaXRlTnVtYmVyQ2FjaGVkOiBudW1iZXI6ICVkXCIsZSkscWUoXCJ3cml0ZU51bWJlckNhY2hlZDogJW9cIixDbltlXSksdC53cml0ZShDbltlXSl9ZnVuY3Rpb24gdDEodCxlKXtsZXQgcj1qbShlKTtyZXR1cm4gcWUoXCJ3cml0ZU51bWJlckdlbmVyYXRlZDogJW9cIixyKSx0LndyaXRlKHIpfWZ1bmN0aW9uIHIxKHQsZSl7bGV0IHI9V20oZSk7cmV0dXJuIHFlKFwid3JpdGU0Qnl0ZU51bWJlcjogJW9cIixyKSx0LndyaXRlKHIpfWZ1bmN0aW9uIEdyKHQsZSl7dHlwZW9mIGU9PVwic3RyaW5nXCI/eXIodCxlKTplPyhJZSh0LGUubGVuZ3RoKSx0LndyaXRlKGUpKTpJZSh0LDApO31mdW5jdGlvbiBGdCh0LGUpe2lmKHR5cGVvZiBlIT1cIm9iamVjdFwifHxlLmxlbmd0aCE9bnVsbClyZXR1cm4ge2xlbmd0aDoxLHdyaXRlKCl7QmQodCx7fSwwKTt9fTtsZXQgcj0wO2Z1bmN0aW9uIGkobyxzKXtsZXQgYT1qLnByb3BlcnRpZXNUeXBlc1tvXSx1PTA7c3dpdGNoKGEpe2Nhc2VcImJ5dGVcIjp7aWYodHlwZW9mIHMhPVwiYm9vbGVhblwiKXJldHVybiB0LmRlc3Ryb3kobmV3IEVycm9yKGBJbnZhbGlkICR7b306ICR7c31gKSksITE7dSs9MSsxO2JyZWFrfWNhc2VcImludDhcIjp7aWYodHlwZW9mIHMhPVwibnVtYmVyXCJ8fHM8MHx8cz4yNTUpcmV0dXJuIHQuZGVzdHJveShuZXcgRXJyb3IoYEludmFsaWQgJHtvfTogJHtzfWApKSwhMTt1Kz0xKzE7YnJlYWt9Y2FzZVwiYmluYXJ5XCI6e2lmKHMmJnM9PT1udWxsKXJldHVybiB0LmRlc3Ryb3kobmV3IEVycm9yKGBJbnZhbGlkICR7b306ICR7c31gKSksITE7dSs9MStxLmJ5dGVMZW5ndGgocykrMjticmVha31jYXNlXCJpbnQxNlwiOntpZih0eXBlb2YgcyE9XCJudW1iZXJcInx8czwwfHxzPjY1NTM1KXJldHVybiB0LmRlc3Ryb3kobmV3IEVycm9yKGBJbnZhbGlkICR7b306ICR7c31gKSksITE7dSs9MSsyO2JyZWFrfWNhc2VcImludDMyXCI6e2lmKHR5cGVvZiBzIT1cIm51bWJlclwifHxzPDB8fHM+NDI5NDk2NzI5NSlyZXR1cm4gdC5kZXN0cm95KG5ldyBFcnJvcihgSW52YWxpZCAke299OiAke3N9YCkpLCExO3UrPTErNDticmVha31jYXNlXCJ2YXJcIjp7aWYodHlwZW9mIHMhPVwibnVtYmVyXCJ8fHM8MHx8cz4yNjg0MzU0NTUpcmV0dXJuIHQuZGVzdHJveShuZXcgRXJyb3IoYEludmFsaWQgJHtvfTogJHtzfWApKSwhMTt1Kz0xK3EuYnl0ZUxlbmd0aChIbyhzKSk7YnJlYWt9Y2FzZVwic3RyaW5nXCI6e2lmKHR5cGVvZiBzIT1cInN0cmluZ1wiKXJldHVybiB0LmRlc3Ryb3kobmV3IEVycm9yKGBJbnZhbGlkICR7b306ICR7c31gKSksITE7dSs9MSsyK3EuYnl0ZUxlbmd0aChzLnRvU3RyaW5nKCkpO2JyZWFrfWNhc2VcInBhaXJcIjp7aWYodHlwZW9mIHMhPVwib2JqZWN0XCIpcmV0dXJuIHQuZGVzdHJveShuZXcgRXJyb3IoYEludmFsaWQgJHtvfTogJHtzfWApKSwhMTt1Kz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzKS5yZWR1Y2UoKGMsaCk9PntsZXQgZD1zW2hdO3JldHVybiBBcnJheS5pc0FycmF5KGQpP2MrPWQucmVkdWNlKChnLHkpPT4oZys9MSsyK3EuYnl0ZUxlbmd0aChoLnRvU3RyaW5nKCkpKzIrcS5ieXRlTGVuZ3RoKHkudG9TdHJpbmcoKSksZyksMCk6Yys9MSsyK3EuYnl0ZUxlbmd0aChoLnRvU3RyaW5nKCkpKzIrcS5ieXRlTGVuZ3RoKHNbaF0udG9TdHJpbmcoKSksY30sMCk7YnJlYWt9ZGVmYXVsdDpyZXR1cm4gdC5kZXN0cm95KG5ldyBFcnJvcihgSW52YWxpZCBwcm9wZXJ0eSAke299OiAke3N9YCkpLCExfXJldHVybiB1fWlmKGUpZm9yKGxldCBvIGluIGUpe2xldCBzPTAsYT0wLHU9ZVtvXTtpZihBcnJheS5pc0FycmF5KHUpKWZvcihsZXQgYz0wO2M8dS5sZW5ndGg7YysrKXtpZihhPWkobyx1W2NdKSwhYSlyZXR1cm4gITE7cys9YTt9ZWxzZSB7aWYoYT1pKG8sdSksIWEpcmV0dXJuICExO3M9YTt9aWYoIXMpcmV0dXJuICExO3IrPXM7fXJldHVybiB7bGVuZ3RoOnEuYnl0ZUxlbmd0aChIbyhyKSkrcix3cml0ZSgpe0JkKHQsZSxyKTt9fX1mdW5jdGlvbiBTaSh0LGUscixpKXtsZXQgbj1bXCJyZWFzb25TdHJpbmdcIixcInVzZXJQcm9wZXJ0aWVzXCJdLG89ciYmci5wcm9wZXJ0aWVzJiZyLnByb3BlcnRpZXMubWF4aW11bVBhY2tldFNpemU/ci5wcm9wZXJ0aWVzLm1heGltdW1QYWNrZXRTaXplOjAscz1GdCh0LGUpO2lmKG8pZm9yKDtpK3MubGVuZ3RoPm87KXtsZXQgYT1uLnNoaWZ0KCk7aWYoYSYmZVthXSlkZWxldGUgZVthXSxzPUZ0KHQsZSk7ZWxzZSByZXR1cm4gITF9cmV0dXJuIHN9ZnVuY3Rpb24gQ2QodCxlLHIpe3N3aXRjaChqLnByb3BlcnRpZXNUeXBlc1tlXSl7Y2FzZVwiYnl0ZVwiOnt0LndyaXRlKHEuZnJvbShbai5wcm9wZXJ0aWVzW2VdXSkpLHQud3JpdGUocS5mcm9tKFsrcl0pKTticmVha31jYXNlXCJpbnQ4XCI6e3Qud3JpdGUocS5mcm9tKFtqLnByb3BlcnRpZXNbZV1dKSksdC53cml0ZShxLmZyb20oW3JdKSk7YnJlYWt9Y2FzZVwiYmluYXJ5XCI6e3Qud3JpdGUocS5mcm9tKFtqLnByb3BlcnRpZXNbZV1dKSksR3IodCxyKTticmVha31jYXNlXCJpbnQxNlwiOnt0LndyaXRlKHEuZnJvbShbai5wcm9wZXJ0aWVzW2VdXSkpLEllKHQscik7YnJlYWt9Y2FzZVwiaW50MzJcIjp7dC53cml0ZShxLmZyb20oW2oucHJvcGVydGllc1tlXV0pKSxyMSh0LHIpO2JyZWFrfWNhc2VcInZhclwiOnt0LndyaXRlKHEuZnJvbShbai5wcm9wZXJ0aWVzW2VdXSkpLERlKHQscik7YnJlYWt9Y2FzZVwic3RyaW5nXCI6e3Qud3JpdGUocS5mcm9tKFtqLnByb3BlcnRpZXNbZV1dKSkseXIodCxyKTticmVha31jYXNlXCJwYWlyXCI6e09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHIpLmZvckVhY2gobj0+e2xldCBvPXJbbl07QXJyYXkuaXNBcnJheShvKT9vLmZvckVhY2gocz0+e3Qud3JpdGUocS5mcm9tKFtqLnByb3BlcnRpZXNbZV1dKSksUmQodCxuLnRvU3RyaW5nKCkscy50b1N0cmluZygpKTt9KToodC53cml0ZShxLmZyb20oW2oucHJvcGVydGllc1tlXV0pKSxSZCh0LG4udG9TdHJpbmcoKSxvLnRvU3RyaW5nKCkpKTt9KTticmVha31kZWZhdWx0OnJldHVybiB0LmRlc3Ryb3kobmV3IEVycm9yKGBJbnZhbGlkIHByb3BlcnR5ICR7ZX0gdmFsdWU6ICR7cn1gKSksITF9fWZ1bmN0aW9uIEJkKHQsZSxyKXtEZSh0LHIpO2ZvcihsZXQgaSBpbiBlKWlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGkpJiZlW2ldIT09bnVsbCl7bGV0IG49ZVtpXTtpZihBcnJheS5pc0FycmF5KG4pKWZvcihsZXQgbz0wO288bi5sZW5ndGg7bysrKUNkKHQsaSxuW29dKTtlbHNlIENkKHQsaSxuKTt9fWZ1bmN0aW9uIGtkKHQpe3JldHVybiB0P3QgaW5zdGFuY2VvZiBxP3QubGVuZ3RoOnEuYnl0ZUxlbmd0aCh0KTowfWZ1bmN0aW9uIFBkKHQpe3JldHVybiB0eXBlb2YgdD09XCJzdHJpbmdcInx8dCBpbnN0YW5jZW9mIHF9eGQuZXhwb3J0cz1PZDt9KTt2YXIgVWQ9TSgobU8sTGQpPT57digpO20oKTtfKCk7dmFyIGkxPXpvKCkse0V2ZW50RW1pdHRlcjpuMX09KGlyKCksWChycikpLHtCdWZmZXI6TWR9PSh5ZSgpLFgoX2UpKTtmdW5jdGlvbiBzMSh0LGUpe2xldCByPW5ldyBLbztyZXR1cm4gaTEodCxyLGUpLHIuY29uY2F0KCl9dmFyIEtvPWNsYXNzIGV4dGVuZHMgbjF7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX2FycmF5PW5ldyBBcnJheSgyMCksdGhpcy5faT0wO313cml0ZShlKXtyZXR1cm4gdGhpcy5fYXJyYXlbdGhpcy5faSsrXT1lLCEwfWNvbmNhdCgpe2xldCBlPTAscj1uZXcgQXJyYXkodGhpcy5fYXJyYXkubGVuZ3RoKSxpPXRoaXMuX2FycmF5LG49MCxvO2ZvcihvPTA7bzxpLmxlbmd0aCYmaVtvXSE9PXZvaWQgMDtvKyspdHlwZW9mIGlbb10hPVwic3RyaW5nXCI/cltvXT1pW29dLmxlbmd0aDpyW29dPU1kLmJ5dGVMZW5ndGgoaVtvXSksZSs9cltvXTtsZXQgcz1NZC5hbGxvY1Vuc2FmZShlKTtmb3Iobz0wO288aS5sZW5ndGgmJmlbb10hPT12b2lkIDA7bysrKXR5cGVvZiBpW29dIT1cInN0cmluZ1wiPyhpW29dLmNvcHkocyxuKSxuKz1yW29dKToocy53cml0ZShpW29dLG4pLG4rPXJbb10pO3JldHVybiBzfWRlc3Ryb3koZSl7ZSYmdGhpcy5lbWl0KFwiZXJyb3JcIixlKTt9fTtMZC5leHBvcnRzPXMxO30pO3ZhciBOZD1NKFBuPT57digpO20oKTtfKCk7UG4ucGFyc2VyPW1kKCkucGFyc2VyO1BuLmdlbmVyYXRlPVVkKCk7UG4ud3JpdGVUb1N0cmVhbT16bygpO30pO3ZhciBZbz1NKFFvPT57digpO20oKTtfKCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFFvLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBHbz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMubmV4dElkPU1hdGgubWF4KDEsTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjY1NTM1KSk7fWFsbG9jYXRlKCl7bGV0IGU9dGhpcy5uZXh0SWQrKztyZXR1cm4gdGhpcy5uZXh0SWQ9PT02NTUzNiYmKHRoaXMubmV4dElkPTEpLGV9Z2V0TGFzdEFsbG9jYXRlZCgpe3JldHVybiB0aGlzLm5leHRJZD09PTE/NjU1MzU6dGhpcy5uZXh0SWQtMX1yZWdpc3RlcihlKXtyZXR1cm4gITB9ZGVhbGxvY2F0ZShlKXt9Y2xlYXIoKXt9fTtRby5kZWZhdWx0PUdvO30pO3ZhciBEZD1NKChZTyxxZCk9Pnt2KCk7bSgpO18oKTtxZC5leHBvcnRzPW8xO2Z1bmN0aW9uIFFyKHQpe3JldHVybiB0IGluc3RhbmNlb2YgeD94LmZyb20odCk6bmV3IHQuY29uc3RydWN0b3IodC5idWZmZXIuc2xpY2UoKSx0LmJ5dGVPZmZzZXQsdC5sZW5ndGgpfWZ1bmN0aW9uIG8xKHQpe2lmKHQ9dHx8e30sdC5jaXJjbGVzKXJldHVybiBhMSh0KTtyZXR1cm4gdC5wcm90bz9pOnI7ZnVuY3Rpb24gZShuLG8pe2Zvcih2YXIgcz1PYmplY3Qua2V5cyhuKSxhPW5ldyBBcnJheShzLmxlbmd0aCksdT0wO3U8cy5sZW5ndGg7dSsrKXt2YXIgYz1zW3VdLGg9bltjXTt0eXBlb2YgaCE9XCJvYmplY3RcInx8aD09PW51bGw/YVtjXT1oOmggaW5zdGFuY2VvZiBEYXRlP2FbY109bmV3IERhdGUoaCk6QXJyYXlCdWZmZXIuaXNWaWV3KGgpP2FbY109UXIoaCk6YVtjXT1vKGgpO31yZXR1cm4gYX1mdW5jdGlvbiByKG4pe2lmKHR5cGVvZiBuIT1cIm9iamVjdFwifHxuPT09bnVsbClyZXR1cm4gbjtpZihuIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gbmV3IERhdGUobik7aWYoQXJyYXkuaXNBcnJheShuKSlyZXR1cm4gZShuLHIpO2lmKG4gaW5zdGFuY2VvZiBNYXApcmV0dXJuIG5ldyBNYXAoZShBcnJheS5mcm9tKG4pLHIpKTtpZihuIGluc3RhbmNlb2YgU2V0KXJldHVybiBuZXcgU2V0KGUoQXJyYXkuZnJvbShuKSxyKSk7dmFyIG89e307Zm9yKHZhciBzIGluIG4paWYoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobixzKSE9PSExKXt2YXIgYT1uW3NdO3R5cGVvZiBhIT1cIm9iamVjdFwifHxhPT09bnVsbD9vW3NdPWE6YSBpbnN0YW5jZW9mIERhdGU/b1tzXT1uZXcgRGF0ZShhKTphIGluc3RhbmNlb2YgTWFwP29bc109bmV3IE1hcChlKEFycmF5LmZyb20oYSkscikpOmEgaW5zdGFuY2VvZiBTZXQ/b1tzXT1uZXcgU2V0KGUoQXJyYXkuZnJvbShhKSxyKSk6QXJyYXlCdWZmZXIuaXNWaWV3KGEpP29bc109UXIoYSk6b1tzXT1yKGEpO31yZXR1cm4gb31mdW5jdGlvbiBpKG4pe2lmKHR5cGVvZiBuIT1cIm9iamVjdFwifHxuPT09bnVsbClyZXR1cm4gbjtpZihuIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gbmV3IERhdGUobik7aWYoQXJyYXkuaXNBcnJheShuKSlyZXR1cm4gZShuLGkpO2lmKG4gaW5zdGFuY2VvZiBNYXApcmV0dXJuIG5ldyBNYXAoZShBcnJheS5mcm9tKG4pLGkpKTtpZihuIGluc3RhbmNlb2YgU2V0KXJldHVybiBuZXcgU2V0KGUoQXJyYXkuZnJvbShuKSxpKSk7dmFyIG89e307Zm9yKHZhciBzIGluIG4pe3ZhciBhPW5bc107dHlwZW9mIGEhPVwib2JqZWN0XCJ8fGE9PT1udWxsP29bc109YTphIGluc3RhbmNlb2YgRGF0ZT9vW3NdPW5ldyBEYXRlKGEpOmEgaW5zdGFuY2VvZiBNYXA/b1tzXT1uZXcgTWFwKGUoQXJyYXkuZnJvbShhKSxpKSk6YSBpbnN0YW5jZW9mIFNldD9vW3NdPW5ldyBTZXQoZShBcnJheS5mcm9tKGEpLGkpKTpBcnJheUJ1ZmZlci5pc1ZpZXcoYSk/b1tzXT1RcihhKTpvW3NdPWkoYSk7fXJldHVybiBvfX1mdW5jdGlvbiBhMSh0KXt2YXIgZT1bXSxyPVtdO3JldHVybiB0LnByb3RvP286bjtmdW5jdGlvbiBpKHMsYSl7Zm9yKHZhciB1PU9iamVjdC5rZXlzKHMpLGM9bmV3IEFycmF5KHUubGVuZ3RoKSxoPTA7aDx1Lmxlbmd0aDtoKyspe3ZhciBkPXVbaF0sZz1zW2RdO2lmKHR5cGVvZiBnIT1cIm9iamVjdFwifHxnPT09bnVsbCljW2RdPWc7ZWxzZSBpZihnIGluc3RhbmNlb2YgRGF0ZSljW2RdPW5ldyBEYXRlKGcpO2Vsc2UgaWYoQXJyYXlCdWZmZXIuaXNWaWV3KGcpKWNbZF09UXIoZyk7ZWxzZSB7dmFyIHk9ZS5pbmRleE9mKGcpO3khPT0tMT9jW2RdPXJbeV06Y1tkXT1hKGcpO319cmV0dXJuIGN9ZnVuY3Rpb24gbihzKXtpZih0eXBlb2YgcyE9XCJvYmplY3RcInx8cz09PW51bGwpcmV0dXJuIHM7aWYocyBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIG5ldyBEYXRlKHMpO2lmKEFycmF5LmlzQXJyYXkocykpcmV0dXJuIGkocyxuKTtpZihzIGluc3RhbmNlb2YgTWFwKXJldHVybiBuZXcgTWFwKGkoQXJyYXkuZnJvbShzKSxuKSk7aWYocyBpbnN0YW5jZW9mIFNldClyZXR1cm4gbmV3IFNldChpKEFycmF5LmZyb20ocyksbikpO3ZhciBhPXt9O2UucHVzaChzKSxyLnB1c2goYSk7Zm9yKHZhciB1IGluIHMpaWYoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwocyx1KSE9PSExKXt2YXIgYz1zW3VdO2lmKHR5cGVvZiBjIT1cIm9iamVjdFwifHxjPT09bnVsbClhW3VdPWM7ZWxzZSBpZihjIGluc3RhbmNlb2YgRGF0ZSlhW3VdPW5ldyBEYXRlKGMpO2Vsc2UgaWYoYyBpbnN0YW5jZW9mIE1hcClhW3VdPW5ldyBNYXAoaShBcnJheS5mcm9tKGMpLG4pKTtlbHNlIGlmKGMgaW5zdGFuY2VvZiBTZXQpYVt1XT1uZXcgU2V0KGkoQXJyYXkuZnJvbShjKSxuKSk7ZWxzZSBpZihBcnJheUJ1ZmZlci5pc1ZpZXcoYykpYVt1XT1RcihjKTtlbHNlIHt2YXIgaD1lLmluZGV4T2YoYyk7aCE9PS0xP2FbdV09cltoXTphW3VdPW4oYyk7fX1yZXR1cm4gZS5wb3AoKSxyLnBvcCgpLGF9ZnVuY3Rpb24gbyhzKXtpZih0eXBlb2YgcyE9XCJvYmplY3RcInx8cz09PW51bGwpcmV0dXJuIHM7aWYocyBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIG5ldyBEYXRlKHMpO2lmKEFycmF5LmlzQXJyYXkocykpcmV0dXJuIGkocyxvKTtpZihzIGluc3RhbmNlb2YgTWFwKXJldHVybiBuZXcgTWFwKGkoQXJyYXkuZnJvbShzKSxvKSk7aWYocyBpbnN0YW5jZW9mIFNldClyZXR1cm4gbmV3IFNldChpKEFycmF5LmZyb20ocyksbykpO3ZhciBhPXt9O2UucHVzaChzKSxyLnB1c2goYSk7Zm9yKHZhciB1IGluIHMpe3ZhciBjPXNbdV07aWYodHlwZW9mIGMhPVwib2JqZWN0XCJ8fGM9PT1udWxsKWFbdV09YztlbHNlIGlmKGMgaW5zdGFuY2VvZiBEYXRlKWFbdV09bmV3IERhdGUoYyk7ZWxzZSBpZihjIGluc3RhbmNlb2YgTWFwKWFbdV09bmV3IE1hcChpKEFycmF5LmZyb20oYyksbykpO2Vsc2UgaWYoYyBpbnN0YW5jZW9mIFNldClhW3VdPW5ldyBTZXQoaShBcnJheS5mcm9tKGMpLG8pKTtlbHNlIGlmKEFycmF5QnVmZmVyLmlzVmlldyhjKSlhW3VdPVFyKGMpO2Vsc2Uge3ZhciBoPWUuaW5kZXhPZihjKTtoIT09LTE/YVt1XT1yW2hdOmFbdV09byhjKTt9fXJldHVybiBlLnBvcCgpLHIucG9wKCksYX19fSk7dmFyIEZkPU0oKG9rLGpkKT0+e3YoKTttKCk7XygpO2pkLmV4cG9ydHM9RGQoKSgpO30pO3ZhciAkZD1NKFlyPT57digpO20oKTtfKCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFlyLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO1lyLnZhbGlkYXRlVG9waWNzPVlyLnZhbGlkYXRlVG9waWM9dm9pZCAwO2Z1bmN0aW9uIFdkKHQpe2xldCBlPXQuc3BsaXQoXCIvXCIpO2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKGVbcl0hPT1cIitcIil7aWYoZVtyXT09PVwiI1wiKXJldHVybiByPT09ZS5sZW5ndGgtMTtpZihlW3JdLmluZGV4T2YoXCIrXCIpIT09LTF8fGVbcl0uaW5kZXhPZihcIiNcIikhPT0tMSlyZXR1cm4gITF9cmV0dXJuICEwfVlyLnZhbGlkYXRlVG9waWM9V2Q7ZnVuY3Rpb24gbDEodCl7aWYodC5sZW5ndGg9PT0wKXJldHVybiBcImVtcHR5X3RvcGljX2xpc3RcIjtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKylpZighV2QodFtlXSkpcmV0dXJuIHRbZV07cmV0dXJuIG51bGx9WXIudmFsaWRhdGVUb3BpY3M9bDE7fSk7dmFyIFpvPU0oWG89Pnt2KCk7bSgpO18oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWG8sXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIHUxPUR0KCksZjE9e29iamVjdE1vZGU6ITB9LGMxPXtjbGVhbjohMH0sSm89Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5vcHRpb25zPWV8fHt9LHRoaXMub3B0aW9ucz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYzEpLGUpLHRoaXMuX2luZmxpZ2h0cz1uZXcgTWFwO31wdXQoZSxyKXtyZXR1cm4gdGhpcy5faW5mbGlnaHRzLnNldChlLm1lc3NhZ2VJZCxlKSxyJiZyKCksdGhpc31jcmVhdGVTdHJlYW0oKXtsZXQgZT1uZXcgdTEuUmVhZGFibGUoZjEpLHI9W10saT0hMSxuPTA7cmV0dXJuIHRoaXMuX2luZmxpZ2h0cy5mb3JFYWNoKChvLHMpPT57ci5wdXNoKG8pO30pLGUuX3JlYWQ9KCk9PnshaSYmbjxyLmxlbmd0aD9lLnB1c2gocltuKytdKTplLnB1c2gobnVsbCk7fSxlLmRlc3Ryb3k9bz0+e2lmKCFpKXJldHVybiBpPSEwLHNldFRpbWVvdXQoKCk9PntlLmVtaXQoXCJjbG9zZVwiKTt9LDApLGV9LGV9ZGVsKGUscil7bGV0IGk9dGhpcy5faW5mbGlnaHRzLmdldChlLm1lc3NhZ2VJZCk7cmV0dXJuIGk/KHRoaXMuX2luZmxpZ2h0cy5kZWxldGUoZS5tZXNzYWdlSWQpLHIobnVsbCxpKSk6ciYmcihuZXcgRXJyb3IoXCJtaXNzaW5nIHBhY2tldFwiKSksdGhpc31nZXQoZSxyKXtsZXQgaT10aGlzLl9pbmZsaWdodHMuZ2V0KGUubWVzc2FnZUlkKTtyZXR1cm4gaT9yKG51bGwsaSk6ciYmcihuZXcgRXJyb3IoXCJtaXNzaW5nIHBhY2tldFwiKSksdGhpc31jbG9zZShlKXt0aGlzLm9wdGlvbnMuY2xlYW4mJih0aGlzLl9pbmZsaWdodHM9bnVsbCksZSYmZSgpO319O1hvLmRlZmF1bHQ9Sm87fSk7dmFyIFZkPU0oZWE9Pnt2KCk7bSgpO18oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZWEsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIEhkPVswLDE2LDEyOCwxMzEsMTM1LDE0NCwxNDUsMTUxLDE1M10saDE9KHQsZSxyKT0+e3QubG9nKFwiaGFuZGxlUHVibGlzaDogcGFja2V0ICVvXCIsZSkscj10eXBlb2YgcjxcInVcIj9yOnQubm9vcDtsZXQgaT1lLnRvcGljLnRvU3RyaW5nKCksbj1lLnBheWxvYWQse3FvczpvfT1lLHttZXNzYWdlSWQ6c309ZSx7b3B0aW9uczphfT10O2lmKHQub3B0aW9ucy5wcm90b2NvbFZlcnNpb249PT01KXtsZXQgdTtpZihlLnByb3BlcnRpZXMmJih1PWUucHJvcGVydGllcy50b3BpY0FsaWFzKSx0eXBlb2YgdTxcInVcIilpZihpLmxlbmd0aD09PTApaWYodT4wJiZ1PD02NTUzNSl7bGV0IGM9dC50b3BpY0FsaWFzUmVjdi5nZXRUb3BpY0J5QWxpYXModSk7aWYoYylpPWMsdC5sb2coXCJoYW5kbGVQdWJsaXNoIDo6IHRvcGljIGNvbXBsZW1lbnRlZCBieSBhbGlhcy4gdG9waWM6ICVzIC0gYWxpYXM6ICVkXCIsaSx1KTtlbHNlIHt0LmxvZyhcImhhbmRsZVB1Ymxpc2ggOjogdW5yZWdpc3RlcmVkIHRvcGljIGFsaWFzLiBhbGlhczogJWRcIix1KSx0LmVtaXQoXCJlcnJvclwiLG5ldyBFcnJvcihcIlJlY2VpdmVkIHVucmVnaXN0ZXJlZCBUb3BpYyBBbGlhc1wiKSk7cmV0dXJufX1lbHNlIHt0LmxvZyhcImhhbmRsZVB1Ymxpc2ggOjogdG9waWMgYWxpYXMgb3V0IG9mIHJhbmdlLiBhbGlhczogJWRcIix1KSx0LmVtaXQoXCJlcnJvclwiLG5ldyBFcnJvcihcIlJlY2VpdmVkIFRvcGljIEFsaWFzIGlzIG91dCBvZiByYW5nZVwiKSk7cmV0dXJufWVsc2UgaWYodC50b3BpY0FsaWFzUmVjdi5wdXQoaSx1KSl0LmxvZyhcImhhbmRsZVB1Ymxpc2ggOjogcmVnaXN0ZXJlZCB0b3BpYzogJXMgLSBhbGlhczogJWRcIixpLHUpO2Vsc2Uge3QubG9nKFwiaGFuZGxlUHVibGlzaCA6OiB0b3BpYyBhbGlhcyBvdXQgb2YgcmFuZ2UuIGFsaWFzOiAlZFwiLHUpLHQuZW1pdChcImVycm9yXCIsbmV3IEVycm9yKFwiUmVjZWl2ZWQgVG9waWMgQWxpYXMgaXMgb3V0IG9mIHJhbmdlXCIpKTtyZXR1cm59fXN3aXRjaCh0LmxvZyhcImhhbmRsZVB1Ymxpc2g6IHFvcyAlZFwiLG8pLG8pe2Nhc2UgMjp7YS5jdXN0b21IYW5kbGVBY2tzKGksbixlLCh1LGMpPT57aWYodHlwZW9mIHU9PVwibnVtYmVyXCImJihjPXUsdT1udWxsKSx1KXJldHVybiB0LmVtaXQoXCJlcnJvclwiLHUpO2lmKEhkLmluZGV4T2YoYyk9PT0tMSlyZXR1cm4gdC5lbWl0KFwiZXJyb3JcIixuZXcgRXJyb3IoXCJXcm9uZyByZWFzb24gY29kZSBmb3IgcHVicmVjXCIpKTtjP3QuX3NlbmRQYWNrZXQoe2NtZDpcInB1YnJlY1wiLG1lc3NhZ2VJZDpzLHJlYXNvbkNvZGU6Y30scik6dC5pbmNvbWluZ1N0b3JlLnB1dChlLCgpPT57dC5fc2VuZFBhY2tldCh7Y21kOlwicHVicmVjXCIsbWVzc2FnZUlkOnN9LHIpO30pO30pO2JyZWFrfWNhc2UgMTp7YS5jdXN0b21IYW5kbGVBY2tzKGksbixlLCh1LGMpPT57aWYodHlwZW9mIHU9PVwibnVtYmVyXCImJihjPXUsdT1udWxsKSx1KXJldHVybiB0LmVtaXQoXCJlcnJvclwiLHUpO2lmKEhkLmluZGV4T2YoYyk9PT0tMSlyZXR1cm4gdC5lbWl0KFwiZXJyb3JcIixuZXcgRXJyb3IoXCJXcm9uZyByZWFzb24gY29kZSBmb3IgcHViYWNrXCIpKTtjfHx0LmVtaXQoXCJtZXNzYWdlXCIsaSxuLGUpLHQuaGFuZGxlTWVzc2FnZShlLGg9PntpZihoKXJldHVybiByJiZyKGgpO3QuX3NlbmRQYWNrZXQoe2NtZDpcInB1YmFja1wiLG1lc3NhZ2VJZDpzLHJlYXNvbkNvZGU6Y30scik7fSk7fSk7YnJlYWt9Y2FzZSAwOnQuZW1pdChcIm1lc3NhZ2VcIixpLG4sZSksdC5oYW5kbGVNZXNzYWdlKGUscik7YnJlYWs7ZGVmYXVsdDp0LmxvZyhcImhhbmRsZVB1Ymxpc2g6IHVua25vd24gUW9TLiBEb2luZyBub3RoaW5nLlwiKTticmVha319O2VhLmRlZmF1bHQ9aDE7fSk7dmFyIEpyPU0oV3Q9Pnt2KCk7bSgpO18oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoV3QsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7V3QubmV4dFRpY2s9V3QuYXBwbHlNaXhpbj1XdC5FcnJvcldpdGhSZWFzb25Db2RlPXZvaWQgMDt2YXIgdGE9Y2xhc3MgdCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUscil7c3VwZXIoZSksdGhpcy5jb2RlPXIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsdC5wcm90b3R5cGUpLE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5uYW1lPVwiRXJyb3JXaXRoUmVhc29uQ29kZVwiO319O1d0LkVycm9yV2l0aFJlYXNvbkNvZGU9dGE7ZnVuY3Rpb24gZDEodCxlLHI9ITEpe3ZhciBpO2xldCBuPVtlXTtmb3IoOzspe2xldCBvPW5bMF0scz1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7aWYocz8ucHJvdG90eXBlKW4udW5zaGlmdChzKTtlbHNlIGJyZWFrfWZvcihsZXQgbyBvZiBuKWZvcihsZXQgcyBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvLnByb3RvdHlwZSkpKHJ8fHMhPT1cImNvbnN0cnVjdG9yXCIpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUscywoaT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG8ucHJvdG90eXBlLHMpKSE9PW51bGwmJmkhPT12b2lkIDA/aTpPYmplY3QuY3JlYXRlKG51bGwpKTt9V3QuYXBwbHlNaXhpbj1kMTtXdC5uZXh0VGljaz10eXBlb2YoUD09PW51bGx8fFA9PT12b2lkIDA/dm9pZCAwOlAubmV4dFRpY2spPT1cImZ1bmN0aW9uXCI/UC5uZXh0VGljazp0PT57c2V0VGltZW91dCh0LDApO307fSk7dmFyIEFpPU0oYnI9Pnt2KCk7bSgpO18oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYnIsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7YnIuUmVhc29uQ29kZXM9dm9pZCAwO2JyLlJlYXNvbkNvZGVzPXswOlwiXCIsMTpcIlVuYWNjZXB0YWJsZSBwcm90b2NvbCB2ZXJzaW9uXCIsMjpcIklkZW50aWZpZXIgcmVqZWN0ZWRcIiwzOlwiU2VydmVyIHVuYXZhaWxhYmxlXCIsNDpcIkJhZCB1c2VybmFtZSBvciBwYXNzd29yZFwiLDU6XCJOb3QgYXV0aG9yaXplZFwiLDE2OlwiTm8gbWF0Y2hpbmcgc3Vic2NyaWJlcnNcIiwxNzpcIk5vIHN1YnNjcmlwdGlvbiBleGlzdGVkXCIsMTI4OlwiVW5zcGVjaWZpZWQgZXJyb3JcIiwxMjk6XCJNYWxmb3JtZWQgUGFja2V0XCIsMTMwOlwiUHJvdG9jb2wgRXJyb3JcIiwxMzE6XCJJbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBlcnJvclwiLDEzMjpcIlVuc3VwcG9ydGVkIFByb3RvY29sIFZlcnNpb25cIiwxMzM6XCJDbGllbnQgSWRlbnRpZmllciBub3QgdmFsaWRcIiwxMzQ6XCJCYWQgVXNlciBOYW1lIG9yIFBhc3N3b3JkXCIsMTM1OlwiTm90IGF1dGhvcml6ZWRcIiwxMzY6XCJTZXJ2ZXIgdW5hdmFpbGFibGVcIiwxMzc6XCJTZXJ2ZXIgYnVzeVwiLDEzODpcIkJhbm5lZFwiLDEzOTpcIlNlcnZlciBzaHV0dGluZyBkb3duXCIsMTQwOlwiQmFkIGF1dGhlbnRpY2F0aW9uIG1ldGhvZFwiLDE0MTpcIktlZXAgQWxpdmUgdGltZW91dFwiLDE0MjpcIlNlc3Npb24gdGFrZW4gb3ZlclwiLDE0MzpcIlRvcGljIEZpbHRlciBpbnZhbGlkXCIsMTQ0OlwiVG9waWMgTmFtZSBpbnZhbGlkXCIsMTQ1OlwiUGFja2V0IGlkZW50aWZpZXIgaW4gdXNlXCIsMTQ2OlwiUGFja2V0IElkZW50aWZpZXIgbm90IGZvdW5kXCIsMTQ3OlwiUmVjZWl2ZSBNYXhpbXVtIGV4Y2VlZGVkXCIsMTQ4OlwiVG9waWMgQWxpYXMgaW52YWxpZFwiLDE0OTpcIlBhY2tldCB0b28gbGFyZ2VcIiwxNTA6XCJNZXNzYWdlIHJhdGUgdG9vIGhpZ2hcIiwxNTE6XCJRdW90YSBleGNlZWRlZFwiLDE1MjpcIkFkbWluaXN0cmF0aXZlIGFjdGlvblwiLDE1MzpcIlBheWxvYWQgZm9ybWF0IGludmFsaWRcIiwxNTQ6XCJSZXRhaW4gbm90IHN1cHBvcnRlZFwiLDE1NTpcIlFvUyBub3Qgc3VwcG9ydGVkXCIsMTU2OlwiVXNlIGFub3RoZXIgc2VydmVyXCIsMTU3OlwiU2VydmVyIG1vdmVkXCIsMTU4OlwiU2hhcmVkIFN1YnNjcmlwdGlvbnMgbm90IHN1cHBvcnRlZFwiLDE1OTpcIkNvbm5lY3Rpb24gcmF0ZSBleGNlZWRlZFwiLDE2MDpcIk1heGltdW0gY29ubmVjdCB0aW1lXCIsMTYxOlwiU3Vic2NyaXB0aW9uIElkZW50aWZpZXJzIG5vdCBzdXBwb3J0ZWRcIiwxNjI6XCJXaWxkY2FyZCBTdWJzY3JpcHRpb25zIG5vdCBzdXBwb3J0ZWRcIn07dmFyIHAxPSh0LGUpPT57bGV0e21lc3NhZ2VJZDpyfT1lLGk9ZS5jbWQsbj1udWxsLG89dC5vdXRnb2luZ1tyXT90Lm91dGdvaW5nW3JdLmNiOm51bGwscztpZighbyl7dC5sb2coXCJfaGFuZGxlQWNrIDo6IFNlcnZlciBzZW50IGFuIGFjayBpbiBlcnJvci4gSWdub3JpbmcuXCIpO3JldHVybn1zd2l0Y2godC5sb2coXCJfaGFuZGxlQWNrIDo6IHBhY2tldCB0eXBlXCIsaSksaSl7Y2FzZVwicHViY29tcFwiOmNhc2VcInB1YmFja1wiOntsZXQgYT1lLnJlYXNvbkNvZGU7YSYmYT4wJiZhIT09MTY/KHM9bmV3IEVycm9yKGBQdWJsaXNoIGVycm9yOiAke2JyLlJlYXNvbkNvZGVzW2FdfWApLHMuY29kZT1hLHQuX3JlbW92ZU91dGdvaW5nQW5kU3RvcmVNZXNzYWdlKHIsKCk9PntvKHMsZSk7fSkpOnQuX3JlbW92ZU91dGdvaW5nQW5kU3RvcmVNZXNzYWdlKHIsbyk7YnJlYWt9Y2FzZVwicHVicmVjXCI6e249e2NtZDpcInB1YnJlbFwiLHFvczoyLG1lc3NhZ2VJZDpyfTtsZXQgYT1lLnJlYXNvbkNvZGU7YSYmYT4wJiZhIT09MTY/KHM9bmV3IEVycm9yKGBQdWJsaXNoIGVycm9yOiAke2JyLlJlYXNvbkNvZGVzW2FdfWApLHMuY29kZT1hLHQuX3JlbW92ZU91dGdvaW5nQW5kU3RvcmVNZXNzYWdlKHIsKCk9PntvKHMsZSk7fSkpOnQuX3NlbmRQYWNrZXQobik7YnJlYWt9Y2FzZVwic3ViYWNrXCI6e2RlbGV0ZSB0Lm91dGdvaW5nW3JdLHQubWVzc2FnZUlkUHJvdmlkZXIuZGVhbGxvY2F0ZShyKTtsZXQgYT1lLmdyYW50ZWQ7Zm9yKGxldCB1PTA7dTxhLmxlbmd0aDt1KyspaWYoYVt1XSYxMjgpe2xldCBjPXQubWVzc2FnZUlkVG9Ub3BpY1tyXTtjJiZjLmZvckVhY2goaD0+e2RlbGV0ZSB0Ll9yZXN1YnNjcmliZVRvcGljc1toXTt9KTt9ZGVsZXRlIHQubWVzc2FnZUlkVG9Ub3BpY1tyXSx0Ll9pbnZva2VTdG9yZVByb2Nlc3NpbmdRdWV1ZSgpLG8obnVsbCxlKTticmVha31jYXNlXCJ1bnN1YmFja1wiOntkZWxldGUgdC5vdXRnb2luZ1tyXSx0Lm1lc3NhZ2VJZFByb3ZpZGVyLmRlYWxsb2NhdGUociksdC5faW52b2tlU3RvcmVQcm9jZXNzaW5nUXVldWUoKSxvKG51bGwpO2JyZWFrfWRlZmF1bHQ6dC5lbWl0KFwiZXJyb3JcIixuZXcgRXJyb3IoXCJ1bnJlY29nbml6ZWQgcGFja2V0IHR5cGVcIikpO310LmRpc2Nvbm5lY3RpbmcmJk9iamVjdC5rZXlzKHQub3V0Z29pbmcpLmxlbmd0aD09PTAmJnQuZW1pdChcIm91dGdvaW5nRW1wdHlcIik7fTtici5kZWZhdWx0PXAxO30pO3ZhciBLZD1NKHJhPT57digpO20oKTtfKCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHJhLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciB6ZD1KcigpLGcxPUFpKCkseTE9KHQsZSk9PntsZXR7b3B0aW9uczpyfT10LGk9ci5wcm90b2NvbFZlcnNpb24sbj1pPT09NT9lLnJlYXNvbkNvZGU6ZS5yZXR1cm5Db2RlO2lmKGkhPT01KXtsZXQgbz1uZXcgemQuRXJyb3JXaXRoUmVhc29uQ29kZShgUHJvdG9jb2wgZXJyb3I6IEF1dGggcGFja2V0cyBhcmUgb25seSBzdXBwb3J0ZWQgaW4gTVFUVCA1LiBZb3VyIHZlcnNpb246JHtpfWAsbik7dC5lbWl0KFwiZXJyb3JcIixvKTtyZXR1cm59dC5oYW5kbGVBdXRoKGUsKG8scyk9PntpZihvKXt0LmVtaXQoXCJlcnJvclwiLG8pO3JldHVybn1pZihuPT09MjQpdC5yZWNvbm5lY3Rpbmc9ITEsdC5fc2VuZFBhY2tldChzKTtlbHNlIHtsZXQgYT1uZXcgemQuRXJyb3JXaXRoUmVhc29uQ29kZShgQ29ubmVjdGlvbiByZWZ1c2VkOiAke2cxLlJlYXNvbkNvZGVzW25dfWAsbik7dC5lbWl0KFwiZXJyb3JcIixhKTt9fSk7fTtyYS5kZWZhdWx0PXkxO30pO3ZhciBYZD1NKGtuPT57digpO20oKTtfKCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGtuLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO2tuLkxSVUNhY2hlPXZvaWQgMDt2YXIgSWk9dHlwZW9mIHBlcmZvcm1hbmNlPT1cIm9iamVjdFwiJiZwZXJmb3JtYW5jZSYmdHlwZW9mIHBlcmZvcm1hbmNlLm5vdz09XCJmdW5jdGlvblwiP3BlcmZvcm1hbmNlOkRhdGUsUWQ9bmV3IFNldCxpYT10eXBlb2YgUD09XCJvYmplY3RcIiYmUD9QOnt9LFlkPSh0LGUscixpKT0+e3R5cGVvZiBpYS5lbWl0V2FybmluZz09XCJmdW5jdGlvblwiP2lhLmVtaXRXYXJuaW5nKHQsZSxyLGkpOmNvbnNvbGUuZXJyb3IoYFske3J9XSAke2V9OiAke3R9YCk7fSxPbj1nbG9iYWxUaGlzLkFib3J0Q29udHJvbGxlcixHZD1nbG9iYWxUaGlzLkFib3J0U2lnbmFsO2lmKHR5cGVvZiBPbj5cInVcIil7R2Q9Y2xhc3N7b25hYm9ydDtfb25hYm9ydD1bXTtyZWFzb247YWJvcnRlZD0hMTthZGRFdmVudExpc3RlbmVyKGksbil7dGhpcy5fb25hYm9ydC5wdXNoKG4pO319LE9uPWNsYXNze2NvbnN0cnVjdG9yKCl7ZSgpO31zaWduYWw9bmV3IEdkO2Fib3J0KGkpe2lmKCF0aGlzLnNpZ25hbC5hYm9ydGVkKXt0aGlzLnNpZ25hbC5yZWFzb249aSx0aGlzLnNpZ25hbC5hYm9ydGVkPSEwO2ZvcihsZXQgbiBvZiB0aGlzLnNpZ25hbC5fb25hYm9ydCluKGkpO3RoaXMuc2lnbmFsLm9uYWJvcnQ/LihpKTt9fX07bGV0IHQ9aWEuZW52Py5MUlVfQ0FDSEVfSUdOT1JFX0FDX1dBUk5JTkchPT1cIjFcIixlPSgpPT57dCYmKHQ9ITEsWWQoXCJBYm9ydENvbnRyb2xsZXIgaXMgbm90IGRlZmluZWQuIElmIHVzaW5nIGxydS1jYWNoZSBpbiBub2RlIDE0LCBsb2FkIGFuIEFib3J0Q29udHJvbGxlciBwb2x5ZmlsbCBmcm9tIHRoZSBgbm9kZS1hYm9ydC1jb250cm9sbGVyYCBwYWNrYWdlLiBBIG1pbmltYWwgcG9seWZpbGwgaXMgcHJvdmlkZWQgZm9yIHVzZSBieSBMUlVDYWNoZS5mZXRjaCgpLCBidXQgaXQgc2hvdWxkIG5vdCBiZSByZWxpZWQgdXBvbiBpbiBvdGhlciBjb250ZXh0cyAoZWcsIHBhc3NpbmcgaXQgdG8gb3RoZXIgQVBJcyB0aGF0IHVzZSBBYm9ydENvbnRyb2xsZXIvQWJvcnRTaWduYWwgbWlnaHQgaGF2ZSB1bmRlc2lyYWJsZSBlZmZlY3RzKS4gWW91IG1heSBkaXNhYmxlIHRoaXMgd2l0aCBMUlVfQ0FDSEVfSUdOT1JFX0FDX1dBUk5JTkc9MSBpbiB0aGUgZW52LlwiLFwiTk9fQUJPUlRfQ09OVFJPTExFUlwiLFwiRU5PVFNVUFwiLGUpKTt9O312YXIgYjE9dD0+IVFkLmhhcyh0KSwkdD10PT50JiZ0PT09TWF0aC5mbG9vcih0KSYmdD4wJiZpc0Zpbml0ZSh0KSxKZD10PT4kdCh0KT90PD1NYXRoLnBvdygyLDgpP1VpbnQ4QXJyYXk6dDw9TWF0aC5wb3coMiwxNik/VWludDE2QXJyYXk6dDw9TWF0aC5wb3coMiwzMik/VWludDMyQXJyYXk6dDw9TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI/WHI6bnVsbDpudWxsLFhyPWNsYXNzIGV4dGVuZHMgQXJyYXl7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5maWxsKDApO319LG5hPWNsYXNzIHR7aGVhcDtsZW5ndGg7c3RhdGljI2w9ITE7c3RhdGljIGNyZWF0ZShlKXtsZXQgcj1KZChlKTtpZighcilyZXR1cm4gW107dC4jbD0hMDtsZXQgaT1uZXcgdChlLHIpO3JldHVybiB0LiNsPSExLGl9Y29uc3RydWN0b3IoZSxyKXtpZighdC4jbCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW5zdGFudGlhdGUgU3RhY2sgdXNpbmcgU3RhY2suY3JlYXRlKG4pXCIpO3RoaXMuaGVhcD1uZXcgcihlKSx0aGlzLmxlbmd0aD0wO31wdXNoKGUpe3RoaXMuaGVhcFt0aGlzLmxlbmd0aCsrXT1lO31wb3AoKXtyZXR1cm4gdGhpcy5oZWFwWy0tdGhpcy5sZW5ndGhdfX0sc2E9Y2xhc3MgdHsjbDsjYzsjcDsjZzsjQjt0dGw7dHRsUmVzb2x1dGlvbjt0dGxBdXRvcHVyZ2U7dXBkYXRlQWdlT25HZXQ7dXBkYXRlQWdlT25IYXM7YWxsb3dTdGFsZTtub0Rpc3Bvc2VPblNldDtub1VwZGF0ZVRUTDttYXhFbnRyeVNpemU7c2l6ZUNhbGN1bGF0aW9uO25vRGVsZXRlT25GZXRjaFJlamVjdGlvbjtub0RlbGV0ZU9uU3RhbGVHZXQ7YWxsb3dTdGFsZU9uRmV0Y2hBYm9ydDthbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbjtpZ25vcmVGZXRjaEFib3J0OyNpOyN5OyNuOyNyOyNlOyN1OyNoOyNhOyNzOyNiOyNvOyNFOyNTOyN3OyNfOyNJOyNmO3N0YXRpYyB1bnNhZmVFeHBvc2VJbnRlcm5hbHMoZSl7cmV0dXJuIHtzdGFydHM6ZS4jUyx0dGxzOmUuI3csc2l6ZXM6ZS4jRSxrZXlNYXA6ZS4jbixrZXlMaXN0OmUuI3IsdmFsTGlzdDplLiNlLG5leHQ6ZS4jdSxwcmV2OmUuI2gsZ2V0IGhlYWQoKXtyZXR1cm4gZS4jYX0sZ2V0IHRhaWwoKXtyZXR1cm4gZS4jc30sZnJlZTplLiNiLGlzQmFja2dyb3VuZEZldGNoOnI9PmUuI3QociksYmFja2dyb3VuZEZldGNoOihyLGksbixvKT0+ZS4jayhyLGksbixvKSxtb3ZlVG9UYWlsOnI9PmUuI0MociksaW5kZXhlczpyPT5lLiNtKHIpLHJpbmRleGVzOnI9PmUuI3YociksaXNTdGFsZTpyPT5lLiNkKHIpfX1nZXQgbWF4KCl7cmV0dXJuIHRoaXMuI2x9Z2V0IG1heFNpemUoKXtyZXR1cm4gdGhpcy4jY31nZXQgY2FsY3VsYXRlZFNpemUoKXtyZXR1cm4gdGhpcy4jeX1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLiNpfWdldCBmZXRjaE1ldGhvZCgpe3JldHVybiB0aGlzLiNCfWdldCBkaXNwb3NlKCl7cmV0dXJuIHRoaXMuI3B9Z2V0IGRpc3Bvc2VBZnRlcigpe3JldHVybiB0aGlzLiNnfWNvbnN0cnVjdG9yKGUpe2xldHttYXg6cj0wLHR0bDppLHR0bFJlc29sdXRpb246bj0xLHR0bEF1dG9wdXJnZTpvLHVwZGF0ZUFnZU9uR2V0OnMsdXBkYXRlQWdlT25IYXM6YSxhbGxvd1N0YWxlOnUsZGlzcG9zZTpjLGRpc3Bvc2VBZnRlcjpoLG5vRGlzcG9zZU9uU2V0OmQsbm9VcGRhdGVUVEw6ZyxtYXhTaXplOnk9MCxtYXhFbnRyeVNpemU6dz0wLHNpemVDYWxjdWxhdGlvbjpFLGZldGNoTWV0aG9kOlMsbm9EZWxldGVPbkZldGNoUmVqZWN0aW9uOkksbm9EZWxldGVPblN0YWxlR2V0OkMsYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb246UixhbGxvd1N0YWxlT25GZXRjaEFib3J0OlUsaWdub3JlRmV0Y2hBYm9ydDpOfT1lO2lmKHIhPT0wJiYhJHQocikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIm1heCBvcHRpb24gbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXJcIik7bGV0IFc9cj9KZChyKTpBcnJheTtpZighVyl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIG1heCB2YWx1ZTogXCIrcik7aWYodGhpcy4jbD1yLHRoaXMuI2M9eSx0aGlzLm1heEVudHJ5U2l6ZT13fHx0aGlzLiNjLHRoaXMuc2l6ZUNhbGN1bGF0aW9uPUUsdGhpcy5zaXplQ2FsY3VsYXRpb24pe2lmKCF0aGlzLiNjJiYhdGhpcy5tYXhFbnRyeVNpemUpdGhyb3cgbmV3IFR5cGVFcnJvcihcImNhbm5vdCBzZXQgc2l6ZUNhbGN1bGF0aW9uIHdpdGhvdXQgc2V0dGluZyBtYXhTaXplIG9yIG1heEVudHJ5U2l6ZVwiKTtpZih0eXBlb2YgdGhpcy5zaXplQ2FsY3VsYXRpb24hPVwiZnVuY3Rpb25cIil0aHJvdyBuZXcgVHlwZUVycm9yKFwic2l6ZUNhbGN1bGF0aW9uIHNldCB0byBub24tZnVuY3Rpb25cIil9aWYoUyE9PXZvaWQgMCYmdHlwZW9mIFMhPVwiZnVuY3Rpb25cIil0aHJvdyBuZXcgVHlwZUVycm9yKFwiZmV0Y2hNZXRob2QgbXVzdCBiZSBhIGZ1bmN0aW9uIGlmIHNwZWNpZmllZFwiKTtpZih0aGlzLiNCPVMsdGhpcy4jST0hIVMsdGhpcy4jbj1uZXcgTWFwLHRoaXMuI3I9bmV3IEFycmF5KHIpLmZpbGwodm9pZCAwKSx0aGlzLiNlPW5ldyBBcnJheShyKS5maWxsKHZvaWQgMCksdGhpcy4jdT1uZXcgVyhyKSx0aGlzLiNoPW5ldyBXKHIpLHRoaXMuI2E9MCx0aGlzLiNzPTAsdGhpcy4jYj1uYS5jcmVhdGUociksdGhpcy4jaT0wLHRoaXMuI3k9MCx0eXBlb2YgYz09XCJmdW5jdGlvblwiJiYodGhpcy4jcD1jKSx0eXBlb2YgaD09XCJmdW5jdGlvblwiPyh0aGlzLiNnPWgsdGhpcy4jbz1bXSk6KHRoaXMuI2c9dm9pZCAwLHRoaXMuI289dm9pZCAwKSx0aGlzLiNfPSEhdGhpcy4jcCx0aGlzLiNmPSEhdGhpcy4jZyx0aGlzLm5vRGlzcG9zZU9uU2V0PSEhZCx0aGlzLm5vVXBkYXRlVFRMPSEhZyx0aGlzLm5vRGVsZXRlT25GZXRjaFJlamVjdGlvbj0hIUksdGhpcy5hbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbj0hIVIsdGhpcy5hbGxvd1N0YWxlT25GZXRjaEFib3J0PSEhVSx0aGlzLmlnbm9yZUZldGNoQWJvcnQ9ISFOLHRoaXMubWF4RW50cnlTaXplIT09MCl7aWYodGhpcy4jYyE9PTAmJiEkdCh0aGlzLiNjKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwibWF4U2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBpZiBzcGVjaWZpZWRcIik7aWYoISR0KHRoaXMubWF4RW50cnlTaXplKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwibWF4RW50cnlTaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIGlmIHNwZWNpZmllZFwiKTt0aGlzLiNxKCk7fWlmKHRoaXMuYWxsb3dTdGFsZT0hIXUsdGhpcy5ub0RlbGV0ZU9uU3RhbGVHZXQ9ISFDLHRoaXMudXBkYXRlQWdlT25HZXQ9ISFzLHRoaXMudXBkYXRlQWdlT25IYXM9ISFhLHRoaXMudHRsUmVzb2x1dGlvbj0kdChuKXx8bj09PTA/bjoxLHRoaXMudHRsQXV0b3B1cmdlPSEhbyx0aGlzLnR0bD1pfHwwLHRoaXMudHRsKXtpZighJHQodGhpcy50dGwpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJ0dGwgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgaWYgc3BlY2lmaWVkXCIpO3RoaXMuI3goKTt9aWYodGhpcy4jbD09PTAmJnRoaXMudHRsPT09MCYmdGhpcy4jYz09PTApdGhyb3cgbmV3IFR5cGVFcnJvcihcIkF0IGxlYXN0IG9uZSBvZiBtYXgsIG1heFNpemUsIG9yIHR0bCBpcyByZXF1aXJlZFwiKTtpZighdGhpcy50dGxBdXRvcHVyZ2UmJiF0aGlzLiNsJiYhdGhpcy4jYyl7bGV0IEs9XCJMUlVfQ0FDSEVfVU5CT1VOREVEXCI7YjEoSykmJihRZC5hZGQoSyksWWQoXCJUVEwgY2FjaGluZyB3aXRob3V0IHR0bEF1dG9wdXJnZSwgbWF4LCBvciBtYXhTaXplIGNhbiByZXN1bHQgaW4gdW5ib3VuZGVkIG1lbW9yeSBjb25zdW1wdGlvbi5cIixcIlVuYm91bmRlZENhY2hlV2FybmluZ1wiLEssdCkpO319Z2V0UmVtYWluaW5nVFRMKGUpe3JldHVybiB0aGlzLiNuLmhhcyhlKT8xLzA6MH0jeCgpe2xldCBlPW5ldyBYcih0aGlzLiNsKSxyPW5ldyBYcih0aGlzLiNsKTt0aGlzLiN3PWUsdGhpcy4jUz1yLHRoaXMuI009KG8scyxhPUlpLm5vdygpKT0+e2lmKHJbb109cyE9PTA/YTowLGVbb109cyxzIT09MCYmdGhpcy50dGxBdXRvcHVyZ2Upe2xldCB1PXNldFRpbWVvdXQoKCk9Pnt0aGlzLiNkKG8pJiZ0aGlzLmRlbGV0ZSh0aGlzLiNyW29dKTt9LHMrMSk7dS51bnJlZiYmdS51bnJlZigpO319LHRoaXMuI1Q9bz0+e3Jbb109ZVtvXSE9PTA/SWkubm93KCk6MDt9LHRoaXMuI0E9KG8scyk9PntpZihlW3NdKXtsZXQgYT1lW3NdLHU9cltzXTtvLnR0bD1hLG8uc3RhcnQ9dSxvLm5vdz1pfHxuKCk7bGV0IGM9by5ub3ctdTtvLnJlbWFpbmluZ1RUTD1hLWM7fX07bGV0IGk9MCxuPSgpPT57bGV0IG89SWkubm93KCk7aWYodGhpcy50dGxSZXNvbHV0aW9uPjApe2k9bztsZXQgcz1zZXRUaW1lb3V0KCgpPT5pPTAsdGhpcy50dGxSZXNvbHV0aW9uKTtzLnVucmVmJiZzLnVucmVmKCk7fXJldHVybiBvfTt0aGlzLmdldFJlbWFpbmluZ1RUTD1vPT57bGV0IHM9dGhpcy4jbi5nZXQobyk7aWYocz09PXZvaWQgMClyZXR1cm4gMDtsZXQgYT1lW3NdLHU9cltzXTtpZihhPT09MHx8dT09PTApcmV0dXJuIDEvMDtsZXQgYz0oaXx8bigpKS11O3JldHVybiBhLWN9LHRoaXMuI2Q9bz0+ZVtvXSE9PTAmJnJbb10hPT0wJiYoaXx8bigpKS1yW29dPmVbb107fSNUPSgpPT57fTsjQT0oKT0+e307I009KCk9Pnt9OyNkPSgpPT4hMTsjcSgpe2xldCBlPW5ldyBYcih0aGlzLiNsKTt0aGlzLiN5PTAsdGhpcy4jRT1lLHRoaXMuI1I9cj0+e3RoaXMuI3ktPWVbcl0sZVtyXT0wO30sdGhpcy4jTD0ocixpLG4sbyk9PntpZih0aGlzLiN0KGkpKXJldHVybiAwO2lmKCEkdChuKSlpZihvKXtpZih0eXBlb2YgbyE9XCJmdW5jdGlvblwiKXRocm93IG5ldyBUeXBlRXJyb3IoXCJzaXplQ2FsY3VsYXRpb24gbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO2lmKG49byhpLHIpLCEkdChuKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwic2l6ZUNhbGN1bGF0aW9uIHJldHVybiBpbnZhbGlkIChleHBlY3QgcG9zaXRpdmUgaW50ZWdlcilcIil9ZWxzZSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBzaXplIHZhbHVlIChtdXN0IGJlIHBvc2l0aXZlIGludGVnZXIpLiBXaGVuIG1heFNpemUgb3IgbWF4RW50cnlTaXplIGlzIHVzZWQsIHNpemVDYWxjdWxhdGlvbiBvciBzaXplIG11c3QgYmUgc2V0LlwiKTtyZXR1cm4gbn0sdGhpcy4jUD0ocixpLG4pPT57aWYoZVtyXT1pLHRoaXMuI2Mpe2xldCBvPXRoaXMuI2MtZVtyXTtmb3IoO3RoaXMuI3k+bzspdGhpcy4jTyghMCk7fXRoaXMuI3krPWVbcl0sbiYmKG4uZW50cnlTaXplPWksbi50b3RhbENhbGN1bGF0ZWRTaXplPXRoaXMuI3kpO307fSNSPWU9Pnt9OyNQPShlLHIsaSk9Pnt9OyNMPShlLHIsaSxuKT0+e2lmKGl8fG4pdGhyb3cgbmV3IFR5cGVFcnJvcihcImNhbm5vdCBzZXQgc2l6ZSB3aXRob3V0IHNldHRpbmcgbWF4U2l6ZSBvciBtYXhFbnRyeVNpemUgb24gY2FjaGVcIik7cmV0dXJuIDB9OyojbSh7YWxsb3dTdGFsZTplPXRoaXMuYWxsb3dTdGFsZX09e30pe2lmKHRoaXMuI2kpZm9yKGxldCByPXRoaXMuI3M7ISghdGhpcy4jVShyKXx8KChlfHwhdGhpcy4jZChyKSkmJih5aWVsZCByKSxyPT09dGhpcy4jYSkpOylyPXRoaXMuI2hbcl07fSojdih7YWxsb3dTdGFsZTplPXRoaXMuYWxsb3dTdGFsZX09e30pe2lmKHRoaXMuI2kpZm9yKGxldCByPXRoaXMuI2E7ISghdGhpcy4jVShyKXx8KChlfHwhdGhpcy4jZChyKSkmJih5aWVsZCByKSxyPT09dGhpcy4jcykpOylyPXRoaXMuI3Vbcl07fSNVKGUpe3JldHVybiBlIT09dm9pZCAwJiZ0aGlzLiNuLmdldCh0aGlzLiNyW2VdKT09PWV9KmVudHJpZXMoKXtmb3IobGV0IGUgb2YgdGhpcy4jbSgpKXRoaXMuI2VbZV0hPT12b2lkIDAmJnRoaXMuI3JbZV0hPT12b2lkIDAmJiF0aGlzLiN0KHRoaXMuI2VbZV0pJiYoeWllbGQgW3RoaXMuI3JbZV0sdGhpcy4jZVtlXV0pO30qcmVudHJpZXMoKXtmb3IobGV0IGUgb2YgdGhpcy4jdigpKXRoaXMuI2VbZV0hPT12b2lkIDAmJnRoaXMuI3JbZV0hPT12b2lkIDAmJiF0aGlzLiN0KHRoaXMuI2VbZV0pJiYoeWllbGQgW3RoaXMuI3JbZV0sdGhpcy4jZVtlXV0pO30qa2V5cygpe2ZvcihsZXQgZSBvZiB0aGlzLiNtKCkpe2xldCByPXRoaXMuI3JbZV07ciE9PXZvaWQgMCYmIXRoaXMuI3QodGhpcy4jZVtlXSkmJih5aWVsZCByKTt9fSpya2V5cygpe2ZvcihsZXQgZSBvZiB0aGlzLiN2KCkpe2xldCByPXRoaXMuI3JbZV07ciE9PXZvaWQgMCYmIXRoaXMuI3QodGhpcy4jZVtlXSkmJih5aWVsZCByKTt9fSp2YWx1ZXMoKXtmb3IobGV0IGUgb2YgdGhpcy4jbSgpKXRoaXMuI2VbZV0hPT12b2lkIDAmJiF0aGlzLiN0KHRoaXMuI2VbZV0pJiYoeWllbGQgdGhpcy4jZVtlXSk7fSpydmFsdWVzKCl7Zm9yKGxldCBlIG9mIHRoaXMuI3YoKSl0aGlzLiNlW2VdIT09dm9pZCAwJiYhdGhpcy4jdCh0aGlzLiNlW2VdKSYmKHlpZWxkIHRoaXMuI2VbZV0pO31bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiB0aGlzLmVudHJpZXMoKX1maW5kKGUscj17fSl7Zm9yKGxldCBpIG9mIHRoaXMuI20oKSl7bGV0IG49dGhpcy4jZVtpXSxvPXRoaXMuI3Qobik/bi5fX3N0YWxlV2hpbGVGZXRjaGluZzpuO2lmKG8hPT12b2lkIDAmJmUobyx0aGlzLiNyW2ldLHRoaXMpKXJldHVybiB0aGlzLmdldCh0aGlzLiNyW2ldLHIpfX1mb3JFYWNoKGUscj10aGlzKXtmb3IobGV0IGkgb2YgdGhpcy4jbSgpKXtsZXQgbj10aGlzLiNlW2ldLG89dGhpcy4jdChuKT9uLl9fc3RhbGVXaGlsZUZldGNoaW5nOm47byE9PXZvaWQgMCYmZS5jYWxsKHIsbyx0aGlzLiNyW2ldLHRoaXMpO319cmZvckVhY2goZSxyPXRoaXMpe2ZvcihsZXQgaSBvZiB0aGlzLiN2KCkpe2xldCBuPXRoaXMuI2VbaV0sbz10aGlzLiN0KG4pP24uX19zdGFsZVdoaWxlRmV0Y2hpbmc6bjtvIT09dm9pZCAwJiZlLmNhbGwocixvLHRoaXMuI3JbaV0sdGhpcyk7fX1wdXJnZVN0YWxlKCl7bGV0IGU9ITE7Zm9yKGxldCByIG9mIHRoaXMuI3Yoe2FsbG93U3RhbGU6ITB9KSl0aGlzLiNkKHIpJiYodGhpcy5kZWxldGUodGhpcy4jcltyXSksZT0hMCk7cmV0dXJuIGV9ZHVtcCgpe2xldCBlPVtdO2ZvcihsZXQgciBvZiB0aGlzLiNtKHthbGxvd1N0YWxlOiEwfSkpe2xldCBpPXRoaXMuI3Jbcl0sbj10aGlzLiNlW3JdLG89dGhpcy4jdChuKT9uLl9fc3RhbGVXaGlsZUZldGNoaW5nOm47aWYobz09PXZvaWQgMHx8aT09PXZvaWQgMCljb250aW51ZTtsZXQgcz17dmFsdWU6b307aWYodGhpcy4jdyYmdGhpcy4jUyl7cy50dGw9dGhpcy4jd1tyXTtsZXQgYT1JaS5ub3coKS10aGlzLiNTW3JdO3Muc3RhcnQ9TWF0aC5mbG9vcihEYXRlLm5vdygpLWEpO310aGlzLiNFJiYocy5zaXplPXRoaXMuI0Vbcl0pLGUudW5zaGlmdChbaSxzXSk7fXJldHVybiBlfWxvYWQoZSl7dGhpcy5jbGVhcigpO2ZvcihsZXRbcixpXW9mIGUpe2lmKGkuc3RhcnQpe2xldCBuPURhdGUubm93KCktaS5zdGFydDtpLnN0YXJ0PUlpLm5vdygpLW47fXRoaXMuc2V0KHIsaS52YWx1ZSxpKTt9fXNldChlLHIsaT17fSl7aWYocj09PXZvaWQgMClyZXR1cm4gdGhpcy5kZWxldGUoZSksdGhpcztsZXR7dHRsOm49dGhpcy50dGwsc3RhcnQ6byxub0Rpc3Bvc2VPblNldDpzPXRoaXMubm9EaXNwb3NlT25TZXQsc2l6ZUNhbGN1bGF0aW9uOmE9dGhpcy5zaXplQ2FsY3VsYXRpb24sc3RhdHVzOnV9PWkse25vVXBkYXRlVFRMOmM9dGhpcy5ub1VwZGF0ZVRUTH09aSxoPXRoaXMuI0woZSxyLGkuc2l6ZXx8MCxhKTtpZih0aGlzLm1heEVudHJ5U2l6ZSYmaD50aGlzLm1heEVudHJ5U2l6ZSlyZXR1cm4gdSYmKHUuc2V0PVwibWlzc1wiLHUubWF4RW50cnlTaXplRXhjZWVkZWQ9ITApLHRoaXMuZGVsZXRlKGUpLHRoaXM7bGV0IGQ9dGhpcy4jaT09PTA/dm9pZCAwOnRoaXMuI24uZ2V0KGUpO2lmKGQ9PT12b2lkIDApZD10aGlzLiNpPT09MD90aGlzLiNzOnRoaXMuI2IubGVuZ3RoIT09MD90aGlzLiNiLnBvcCgpOnRoaXMuI2k9PT10aGlzLiNsP3RoaXMuI08oITEpOnRoaXMuI2ksdGhpcy4jcltkXT1lLHRoaXMuI2VbZF09cix0aGlzLiNuLnNldChlLGQpLHRoaXMuI3VbdGhpcy4jc109ZCx0aGlzLiNoW2RdPXRoaXMuI3MsdGhpcy4jcz1kLHRoaXMuI2krKyx0aGlzLiNQKGQsaCx1KSx1JiYodS5zZXQ9XCJhZGRcIiksYz0hMTtlbHNlIHt0aGlzLiNDKGQpO2xldCBnPXRoaXMuI2VbZF07aWYociE9PWcpe2lmKHRoaXMuI0kmJnRoaXMuI3QoZykpe2cuX19hYm9ydENvbnRyb2xsZXIuYWJvcnQobmV3IEVycm9yKFwicmVwbGFjZWRcIikpO2xldHtfX3N0YWxlV2hpbGVGZXRjaGluZzp5fT1nO3khPT12b2lkIDAmJiFzJiYodGhpcy4jXyYmdGhpcy4jcD8uKHksZSxcInNldFwiKSx0aGlzLiNmJiZ0aGlzLiNvPy5wdXNoKFt5LGUsXCJzZXRcIl0pKTt9ZWxzZSBzfHwodGhpcy4jXyYmdGhpcy4jcD8uKGcsZSxcInNldFwiKSx0aGlzLiNmJiZ0aGlzLiNvPy5wdXNoKFtnLGUsXCJzZXRcIl0pKTtpZih0aGlzLiNSKGQpLHRoaXMuI1AoZCxoLHUpLHRoaXMuI2VbZF09cix1KXt1LnNldD1cInJlcGxhY2VcIjtsZXQgeT1nJiZ0aGlzLiN0KGcpP2cuX19zdGFsZVdoaWxlRmV0Y2hpbmc6Zzt5IT09dm9pZCAwJiYodS5vbGRWYWx1ZT15KTt9fWVsc2UgdSYmKHUuc2V0PVwidXBkYXRlXCIpO31pZihuIT09MCYmIXRoaXMuI3cmJnRoaXMuI3goKSx0aGlzLiN3JiYoY3x8dGhpcy4jTShkLG4sbyksdSYmdGhpcy4jQSh1LGQpKSwhcyYmdGhpcy4jZiYmdGhpcy4jbyl7bGV0IGc9dGhpcy4jbyx5O2Zvcig7eT1nPy5zaGlmdCgpOyl0aGlzLiNnPy4oLi4ueSk7fXJldHVybiB0aGlzfXBvcCgpe3RyeXtmb3IoO3RoaXMuI2k7KXtsZXQgZT10aGlzLiNlW3RoaXMuI2FdO2lmKHRoaXMuI08oITApLHRoaXMuI3QoZSkpe2lmKGUuX19zdGFsZVdoaWxlRmV0Y2hpbmcpcmV0dXJuIGUuX19zdGFsZVdoaWxlRmV0Y2hpbmd9ZWxzZSBpZihlIT09dm9pZCAwKXJldHVybiBlfX1maW5hbGx5e2lmKHRoaXMuI2YmJnRoaXMuI28pe2xldCBlPXRoaXMuI28scjtmb3IoO3I9ZT8uc2hpZnQoKTspdGhpcy4jZz8uKC4uLnIpO319fSNPKGUpe2xldCByPXRoaXMuI2EsaT10aGlzLiNyW3JdLG49dGhpcy4jZVtyXTtyZXR1cm4gdGhpcy4jSSYmdGhpcy4jdChuKT9uLl9fYWJvcnRDb250cm9sbGVyLmFib3J0KG5ldyBFcnJvcihcImV2aWN0ZWRcIikpOih0aGlzLiNffHx0aGlzLiNmKSYmKHRoaXMuI18mJnRoaXMuI3A/LihuLGksXCJldmljdFwiKSx0aGlzLiNmJiZ0aGlzLiNvPy5wdXNoKFtuLGksXCJldmljdFwiXSkpLHRoaXMuI1IociksZSYmKHRoaXMuI3Jbcl09dm9pZCAwLHRoaXMuI2Vbcl09dm9pZCAwLHRoaXMuI2IucHVzaChyKSksdGhpcy4jaT09PTE/KHRoaXMuI2E9dGhpcy4jcz0wLHRoaXMuI2IubGVuZ3RoPTApOnRoaXMuI2E9dGhpcy4jdVtyXSx0aGlzLiNuLmRlbGV0ZShpKSx0aGlzLiNpLS0scn1oYXMoZSxyPXt9KXtsZXR7dXBkYXRlQWdlT25IYXM6aT10aGlzLnVwZGF0ZUFnZU9uSGFzLHN0YXR1czpufT1yLG89dGhpcy4jbi5nZXQoZSk7aWYobyE9PXZvaWQgMCl7bGV0IHM9dGhpcy4jZVtvXTtpZih0aGlzLiN0KHMpJiZzLl9fc3RhbGVXaGlsZUZldGNoaW5nPT09dm9pZCAwKXJldHVybiAhMTtpZih0aGlzLiNkKG8pKW4mJihuLmhhcz1cInN0YWxlXCIsdGhpcy4jQShuLG8pKTtlbHNlIHJldHVybiBpJiZ0aGlzLiNUKG8pLG4mJihuLmhhcz1cImhpdFwiLHRoaXMuI0EobixvKSksITB9ZWxzZSBuJiYobi5oYXM9XCJtaXNzXCIpO3JldHVybiAhMX1wZWVrKGUscj17fSl7bGV0e2FsbG93U3RhbGU6aT10aGlzLmFsbG93U3RhbGV9PXIsbj10aGlzLiNuLmdldChlKTtpZihuIT09dm9pZCAwJiYoaXx8IXRoaXMuI2QobikpKXtsZXQgbz10aGlzLiNlW25dO3JldHVybiB0aGlzLiN0KG8pP28uX19zdGFsZVdoaWxlRmV0Y2hpbmc6b319I2soZSxyLGksbil7bGV0IG89cj09PXZvaWQgMD92b2lkIDA6dGhpcy4jZVtyXTtpZih0aGlzLiN0KG8pKXJldHVybiBvO2xldCBzPW5ldyBPbix7c2lnbmFsOmF9PWk7YT8uYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsKCk9PnMuYWJvcnQoYS5yZWFzb24pLHtzaWduYWw6cy5zaWduYWx9KTtsZXQgdT17c2lnbmFsOnMuc2lnbmFsLG9wdGlvbnM6aSxjb250ZXh0Om59LGM9KEUsUz0hMSk9PntsZXR7YWJvcnRlZDpJfT1zLnNpZ25hbCxDPWkuaWdub3JlRmV0Y2hBYm9ydCYmRSE9PXZvaWQgMDtpZihpLnN0YXR1cyYmKEkmJiFTPyhpLnN0YXR1cy5mZXRjaEFib3J0ZWQ9ITAsaS5zdGF0dXMuZmV0Y2hFcnJvcj1zLnNpZ25hbC5yZWFzb24sQyYmKGkuc3RhdHVzLmZldGNoQWJvcnRJZ25vcmVkPSEwKSk6aS5zdGF0dXMuZmV0Y2hSZXNvbHZlZD0hMCksSSYmIUMmJiFTKXJldHVybiBkKHMuc2lnbmFsLnJlYXNvbik7bGV0IFI9eTtyZXR1cm4gdGhpcy4jZVtyXT09PXkmJihFPT09dm9pZCAwP1IuX19zdGFsZVdoaWxlRmV0Y2hpbmc/dGhpcy4jZVtyXT1SLl9fc3RhbGVXaGlsZUZldGNoaW5nOnRoaXMuZGVsZXRlKGUpOihpLnN0YXR1cyYmKGkuc3RhdHVzLmZldGNoVXBkYXRlZD0hMCksdGhpcy5zZXQoZSxFLHUub3B0aW9ucykpKSxFfSxoPUU9PihpLnN0YXR1cyYmKGkuc3RhdHVzLmZldGNoUmVqZWN0ZWQ9ITAsaS5zdGF0dXMuZmV0Y2hFcnJvcj1FKSxkKEUpKSxkPUU9PntsZXR7YWJvcnRlZDpTfT1zLnNpZ25hbCxJPVMmJmkuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCxDPUl8fGkuYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb24sUj1DfHxpLm5vRGVsZXRlT25GZXRjaFJlamVjdGlvbixVPXk7aWYodGhpcy4jZVtyXT09PXkmJighUnx8VS5fX3N0YWxlV2hpbGVGZXRjaGluZz09PXZvaWQgMD90aGlzLmRlbGV0ZShlKTpJfHwodGhpcy4jZVtyXT1VLl9fc3RhbGVXaGlsZUZldGNoaW5nKSksQylyZXR1cm4gaS5zdGF0dXMmJlUuX19zdGFsZVdoaWxlRmV0Y2hpbmchPT12b2lkIDAmJihpLnN0YXR1cy5yZXR1cm5lZFN0YWxlPSEwKSxVLl9fc3RhbGVXaGlsZUZldGNoaW5nO2lmKFUuX19yZXR1cm5lZD09PVUpdGhyb3cgRX0sZz0oRSxTKT0+e2xldCBJPXRoaXMuI0I/LihlLG8sdSk7SSYmSSBpbnN0YW5jZW9mIFByb21pc2UmJkkudGhlbihDPT5FKEM9PT12b2lkIDA/dm9pZCAwOkMpLFMpLHMuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCgpPT57KCFpLmlnbm9yZUZldGNoQWJvcnR8fGkuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCkmJihFKHZvaWQgMCksaS5hbGxvd1N0YWxlT25GZXRjaEFib3J0JiYoRT1DPT5jKEMsITApKSk7fSk7fTtpLnN0YXR1cyYmKGkuc3RhdHVzLmZldGNoRGlzcGF0Y2hlZD0hMCk7bGV0IHk9bmV3IFByb21pc2UoZykudGhlbihjLGgpLHc9T2JqZWN0LmFzc2lnbih5LHtfX2Fib3J0Q29udHJvbGxlcjpzLF9fc3RhbGVXaGlsZUZldGNoaW5nOm8sX19yZXR1cm5lZDp2b2lkIDB9KTtyZXR1cm4gcj09PXZvaWQgMD8odGhpcy5zZXQoZSx3LHsuLi51Lm9wdGlvbnMsc3RhdHVzOnZvaWQgMH0pLHI9dGhpcy4jbi5nZXQoZSkpOnRoaXMuI2Vbcl09dyx3fSN0KGUpe2lmKCF0aGlzLiNJKXJldHVybiAhMTtsZXQgcj1lO3JldHVybiAhIXImJnIgaW5zdGFuY2VvZiBQcm9taXNlJiZyLmhhc093blByb3BlcnR5KFwiX19zdGFsZVdoaWxlRmV0Y2hpbmdcIikmJnIuX19hYm9ydENvbnRyb2xsZXIgaW5zdGFuY2VvZiBPbn1hc3luYyBmZXRjaChlLHI9e30pe2xldHthbGxvd1N0YWxlOmk9dGhpcy5hbGxvd1N0YWxlLHVwZGF0ZUFnZU9uR2V0Om49dGhpcy51cGRhdGVBZ2VPbkdldCxub0RlbGV0ZU9uU3RhbGVHZXQ6bz10aGlzLm5vRGVsZXRlT25TdGFsZUdldCx0dGw6cz10aGlzLnR0bCxub0Rpc3Bvc2VPblNldDphPXRoaXMubm9EaXNwb3NlT25TZXQsc2l6ZTp1PTAsc2l6ZUNhbGN1bGF0aW9uOmM9dGhpcy5zaXplQ2FsY3VsYXRpb24sbm9VcGRhdGVUVEw6aD10aGlzLm5vVXBkYXRlVFRMLG5vRGVsZXRlT25GZXRjaFJlamVjdGlvbjpkPXRoaXMubm9EZWxldGVPbkZldGNoUmVqZWN0aW9uLGFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uOmc9dGhpcy5hbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbixpZ25vcmVGZXRjaEFib3J0Onk9dGhpcy5pZ25vcmVGZXRjaEFib3J0LGFsbG93U3RhbGVPbkZldGNoQWJvcnQ6dz10aGlzLmFsbG93U3RhbGVPbkZldGNoQWJvcnQsY29udGV4dDpFLGZvcmNlUmVmcmVzaDpTPSExLHN0YXR1czpJLHNpZ25hbDpDfT1yO2lmKCF0aGlzLiNJKXJldHVybiBJJiYoSS5mZXRjaD1cImdldFwiKSx0aGlzLmdldChlLHthbGxvd1N0YWxlOmksdXBkYXRlQWdlT25HZXQ6bixub0RlbGV0ZU9uU3RhbGVHZXQ6byxzdGF0dXM6SX0pO2xldCBSPXthbGxvd1N0YWxlOmksdXBkYXRlQWdlT25HZXQ6bixub0RlbGV0ZU9uU3RhbGVHZXQ6byx0dGw6cyxub0Rpc3Bvc2VPblNldDphLHNpemU6dSxzaXplQ2FsY3VsYXRpb246Yyxub1VwZGF0ZVRUTDpoLG5vRGVsZXRlT25GZXRjaFJlamVjdGlvbjpkLGFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uOmcsYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydDp3LGlnbm9yZUZldGNoQWJvcnQ6eSxzdGF0dXM6SSxzaWduYWw6Q30sVT10aGlzLiNuLmdldChlKTtpZihVPT09dm9pZCAwKXtJJiYoSS5mZXRjaD1cIm1pc3NcIik7bGV0IE49dGhpcy4jayhlLFUsUixFKTtyZXR1cm4gTi5fX3JldHVybmVkPU59ZWxzZSB7bGV0IE49dGhpcy4jZVtVXTtpZih0aGlzLiN0KE4pKXtsZXQgZGU9aSYmTi5fX3N0YWxlV2hpbGVGZXRjaGluZyE9PXZvaWQgMDtyZXR1cm4gSSYmKEkuZmV0Y2g9XCJpbmZsaWdodFwiLGRlJiYoSS5yZXR1cm5lZFN0YWxlPSEwKSksZGU/Ti5fX3N0YWxlV2hpbGVGZXRjaGluZzpOLl9fcmV0dXJuZWQ9Tn1sZXQgVz10aGlzLiNkKFUpO2lmKCFTJiYhVylyZXR1cm4gSSYmKEkuZmV0Y2g9XCJoaXRcIiksdGhpcy4jQyhVKSxuJiZ0aGlzLiNUKFUpLEkmJnRoaXMuI0EoSSxVKSxOO2xldCBLPXRoaXMuI2soZSxVLFIsRSksUT1LLl9fc3RhbGVXaGlsZUZldGNoaW5nIT09dm9pZCAwJiZpO3JldHVybiBJJiYoSS5mZXRjaD1XP1wic3RhbGVcIjpcInJlZnJlc2hcIixRJiZXJiYoSS5yZXR1cm5lZFN0YWxlPSEwKSksUT9LLl9fc3RhbGVXaGlsZUZldGNoaW5nOksuX19yZXR1cm5lZD1LfX1nZXQoZSxyPXt9KXtsZXR7YWxsb3dTdGFsZTppPXRoaXMuYWxsb3dTdGFsZSx1cGRhdGVBZ2VPbkdldDpuPXRoaXMudXBkYXRlQWdlT25HZXQsbm9EZWxldGVPblN0YWxlR2V0Om89dGhpcy5ub0RlbGV0ZU9uU3RhbGVHZXQsc3RhdHVzOnN9PXIsYT10aGlzLiNuLmdldChlKTtpZihhIT09dm9pZCAwKXtsZXQgdT10aGlzLiNlW2FdLGM9dGhpcy4jdCh1KTtyZXR1cm4gcyYmdGhpcy4jQShzLGEpLHRoaXMuI2QoYSk/KHMmJihzLmdldD1cInN0YWxlXCIpLGM/KHMmJmkmJnUuX19zdGFsZVdoaWxlRmV0Y2hpbmchPT12b2lkIDAmJihzLnJldHVybmVkU3RhbGU9ITApLGk/dS5fX3N0YWxlV2hpbGVGZXRjaGluZzp2b2lkIDApOihvfHx0aGlzLmRlbGV0ZShlKSxzJiZpJiYocy5yZXR1cm5lZFN0YWxlPSEwKSxpP3U6dm9pZCAwKSk6KHMmJihzLmdldD1cImhpdFwiKSxjP3UuX19zdGFsZVdoaWxlRmV0Y2hpbmc6KHRoaXMuI0MoYSksbiYmdGhpcy4jVChhKSx1KSl9ZWxzZSBzJiYocy5nZXQ9XCJtaXNzXCIpO30jTihlLHIpe3RoaXMuI2hbcl09ZSx0aGlzLiN1W2VdPXI7fSNDKGUpe2UhPT10aGlzLiNzJiYoZT09PXRoaXMuI2E/dGhpcy4jYT10aGlzLiN1W2VdOnRoaXMuI04odGhpcy4jaFtlXSx0aGlzLiN1W2VdKSx0aGlzLiNOKHRoaXMuI3MsZSksdGhpcy4jcz1lKTt9ZGVsZXRlKGUpe2xldCByPSExO2lmKHRoaXMuI2khPT0wKXtsZXQgaT10aGlzLiNuLmdldChlKTtpZihpIT09dm9pZCAwKWlmKHI9ITAsdGhpcy4jaT09PTEpdGhpcy5jbGVhcigpO2Vsc2Uge3RoaXMuI1IoaSk7bGV0IG49dGhpcy4jZVtpXTt0aGlzLiN0KG4pP24uX19hYm9ydENvbnRyb2xsZXIuYWJvcnQobmV3IEVycm9yKFwiZGVsZXRlZFwiKSk6KHRoaXMuI198fHRoaXMuI2YpJiYodGhpcy4jXyYmdGhpcy4jcD8uKG4sZSxcImRlbGV0ZVwiKSx0aGlzLiNmJiZ0aGlzLiNvPy5wdXNoKFtuLGUsXCJkZWxldGVcIl0pKSx0aGlzLiNuLmRlbGV0ZShlKSx0aGlzLiNyW2ldPXZvaWQgMCx0aGlzLiNlW2ldPXZvaWQgMCxpPT09dGhpcy4jcz90aGlzLiNzPXRoaXMuI2hbaV06aT09PXRoaXMuI2E/dGhpcy4jYT10aGlzLiN1W2ldOih0aGlzLiN1W3RoaXMuI2hbaV1dPXRoaXMuI3VbaV0sdGhpcy4jaFt0aGlzLiN1W2ldXT10aGlzLiNoW2ldKSx0aGlzLiNpLS0sdGhpcy4jYi5wdXNoKGkpO319aWYodGhpcy4jZiYmdGhpcy4jbz8ubGVuZ3RoKXtsZXQgaT10aGlzLiNvLG47Zm9yKDtuPWk/LnNoaWZ0KCk7KXRoaXMuI2c/LiguLi5uKTt9cmV0dXJuIHJ9Y2xlYXIoKXtmb3IobGV0IGUgb2YgdGhpcy4jdih7YWxsb3dTdGFsZTohMH0pKXtsZXQgcj10aGlzLiNlW2VdO2lmKHRoaXMuI3Qocikpci5fX2Fib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IoXCJkZWxldGVkXCIpKTtlbHNlIHtsZXQgaT10aGlzLiNyW2VdO3RoaXMuI18mJnRoaXMuI3A/LihyLGksXCJkZWxldGVcIiksdGhpcy4jZiYmdGhpcy4jbz8ucHVzaChbcixpLFwiZGVsZXRlXCJdKTt9fWlmKHRoaXMuI24uY2xlYXIoKSx0aGlzLiNlLmZpbGwodm9pZCAwKSx0aGlzLiNyLmZpbGwodm9pZCAwKSx0aGlzLiN3JiZ0aGlzLiNTJiYodGhpcy4jdy5maWxsKDApLHRoaXMuI1MuZmlsbCgwKSksdGhpcy4jRSYmdGhpcy4jRS5maWxsKDApLHRoaXMuI2E9MCx0aGlzLiNzPTAsdGhpcy4jYi5sZW5ndGg9MCx0aGlzLiN5PTAsdGhpcy4jaT0wLHRoaXMuI2YmJnRoaXMuI28pe2xldCBlPXRoaXMuI28scjtmb3IoO3I9ZT8uc2hpZnQoKTspdGhpcy4jZz8uKC4uLnIpO319fTtrbi5MUlVDYWNoZT1zYTt9KTt2YXIgYXQ9TShIdD0+e3YoKTttKCk7XygpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShIdCxcInRcIix7dmFsdWU6ITB9KTtIdC5Db250YWluZXJJdGVyYXRvcj1IdC5Db250YWluZXI9SHQuQmFzZT12b2lkIDA7dmFyIG9hPWNsYXNze2NvbnN0cnVjdG9yKGU9MCl7dGhpcy5pdGVyYXRvclR5cGU9ZTt9ZXF1YWxzKGUpe3JldHVybiB0aGlzLm89PT1lLm99fTtIdC5Db250YWluZXJJdGVyYXRvcj1vYTt2YXIgeG49Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmk9MDt9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLml9c2l6ZSgpe3JldHVybiB0aGlzLml9ZW1wdHkoKXtyZXR1cm4gdGhpcy5pPT09MH19O0h0LkJhc2U9eG47dmFyIGFhPWNsYXNzIGV4dGVuZHMgeG57fTtIdC5Db250YWluZXI9YWE7fSk7dmFyIFpkPU0oTW49Pnt2KCk7bSgpO18oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTW4sXCJ0XCIse3ZhbHVlOiEwfSk7TW4uZGVmYXVsdD12b2lkIDA7dmFyIHcxPWF0KCksbGE9Y2xhc3MgZXh0ZW5kcyB3MS5CYXNle2NvbnN0cnVjdG9yKGU9W10pe3N1cGVyKCksdGhpcy5TPVtdO2xldCByPXRoaXM7ZS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3IucHVzaChpKTt9KTt9Y2xlYXIoKXt0aGlzLmk9MCx0aGlzLlM9W107fXB1c2goZSl7cmV0dXJuIHRoaXMuUy5wdXNoKGUpLHRoaXMuaSs9MSx0aGlzLml9cG9wKCl7aWYodGhpcy5pIT09MClyZXR1cm4gdGhpcy5pLT0xLHRoaXMuUy5wb3AoKX10b3AoKXtyZXR1cm4gdGhpcy5TW3RoaXMuaS0xXX19LF8xPWxhO01uLmRlZmF1bHQ9XzE7fSk7dmFyIGVwPU0oTG49Pnt2KCk7bSgpO18oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTG4sXCJ0XCIse3ZhbHVlOiEwfSk7TG4uZGVmYXVsdD12b2lkIDA7dmFyIG0xPWF0KCksdWE9Y2xhc3MgZXh0ZW5kcyBtMS5CYXNle2NvbnN0cnVjdG9yKGU9W10pe3N1cGVyKCksdGhpcy5qPTAsdGhpcy5xPVtdO2xldCByPXRoaXM7ZS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3IucHVzaChpKTt9KTt9Y2xlYXIoKXt0aGlzLnE9W10sdGhpcy5pPXRoaXMuaj0wO31wdXNoKGUpe2xldCByPXRoaXMucS5sZW5ndGg7aWYodGhpcy5qL3I+LjUmJnRoaXMuait0aGlzLmk+PXImJnI+NDA5Nil7bGV0IGk9dGhpcy5pO2ZvcihsZXQgbj0wO248aTsrK24pdGhpcy5xW25dPXRoaXMucVt0aGlzLmorbl07dGhpcy5qPTAsdGhpcy5xW3RoaXMuaV09ZTt9ZWxzZSB0aGlzLnFbdGhpcy5qK3RoaXMuaV09ZTtyZXR1cm4gKyt0aGlzLml9cG9wKCl7aWYodGhpcy5pPT09MClyZXR1cm47bGV0IGU9dGhpcy5xW3RoaXMuaisrXTtyZXR1cm4gdGhpcy5pLT0xLGV9ZnJvbnQoKXtpZih0aGlzLmkhPT0wKXJldHVybiB0aGlzLnFbdGhpcy5qXX19LHYxPXVhO0xuLmRlZmF1bHQ9djE7fSk7dmFyIHRwPU0oVW49Pnt2KCk7bSgpO18oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVW4sXCJ0XCIse3ZhbHVlOiEwfSk7VW4uZGVmYXVsdD12b2lkIDA7dmFyIEUxPWF0KCksZmE9Y2xhc3MgZXh0ZW5kcyBFMS5CYXNle2NvbnN0cnVjdG9yKGU9W10scj1mdW5jdGlvbihuLG8pe3JldHVybiBuPm8/LTE6bjxvPzE6MH0saT0hMCl7aWYoc3VwZXIoKSx0aGlzLnY9cixBcnJheS5pc0FycmF5KGUpKXRoaXMuQz1pP1suLi5lXTplO2Vsc2Uge3RoaXMuQz1bXTtsZXQgbz10aGlzO2UuZm9yRWFjaChmdW5jdGlvbihzKXtvLkMucHVzaChzKTt9KTt9dGhpcy5pPXRoaXMuQy5sZW5ndGg7bGV0IG49dGhpcy5pPj4xO2ZvcihsZXQgbz10aGlzLmktMT4+MTtvPj0wOy0tbyl0aGlzLmsobyxuKTt9bShlKXtsZXQgcj10aGlzLkNbZV07Zm9yKDtlPjA7KXtsZXQgaT1lLTE+PjEsbj10aGlzLkNbaV07aWYodGhpcy52KG4scik8PTApYnJlYWs7dGhpcy5DW2VdPW4sZT1pO310aGlzLkNbZV09cjt9ayhlLHIpe2xldCBpPXRoaXMuQ1tlXTtmb3IoO2U8cjspe2xldCBuPWU8PDF8MSxvPW4rMSxzPXRoaXMuQ1tuXTtpZihvPHRoaXMuaSYmdGhpcy52KHMsdGhpcy5DW29dKT4wJiYobj1vLHM9dGhpcy5DW29dKSx0aGlzLnYocyxpKT49MClicmVhazt0aGlzLkNbZV09cyxlPW47fXRoaXMuQ1tlXT1pO31jbGVhcigpe3RoaXMuaT0wLHRoaXMuQy5sZW5ndGg9MDt9cHVzaChlKXt0aGlzLkMucHVzaChlKSx0aGlzLm0odGhpcy5pKSx0aGlzLmkrPTE7fXBvcCgpe2lmKHRoaXMuaT09PTApcmV0dXJuO2xldCBlPXRoaXMuQ1swXSxyPXRoaXMuQy5wb3AoKTtyZXR1cm4gdGhpcy5pLT0xLHRoaXMuaSYmKHRoaXMuQ1swXT1yLHRoaXMuaygwLHRoaXMuaT4+MSkpLGV9dG9wKCl7cmV0dXJuIHRoaXMuQ1swXX1maW5kKGUpe3JldHVybiB0aGlzLkMuaW5kZXhPZihlKT49MH1yZW1vdmUoZSl7bGV0IHI9dGhpcy5DLmluZGV4T2YoZSk7cmV0dXJuIHI8MD8hMToocj09PTA/dGhpcy5wb3AoKTpyPT09dGhpcy5pLTE/KHRoaXMuQy5wb3AoKSx0aGlzLmktPTEpOih0aGlzLkMuc3BsaWNlKHIsMSx0aGlzLkMucG9wKCkpLHRoaXMuaS09MSx0aGlzLm0ociksdGhpcy5rKHIsdGhpcy5pPj4xKSksITApfXVwZGF0ZUl0ZW0oZSl7bGV0IHI9dGhpcy5DLmluZGV4T2YoZSk7cmV0dXJuIHI8MD8hMToodGhpcy5tKHIpLHRoaXMuayhyLHRoaXMuaT4+MSksITApfXRvQXJyYXkoKXtyZXR1cm4gWy4uLnRoaXMuQ119fSxTMT1mYTtVbi5kZWZhdWx0PVMxO30pO3ZhciBxbj1NKE5uPT57digpO20oKTtfKCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE5uLFwidFwiLHt2YWx1ZTohMH0pO05uLmRlZmF1bHQ9dm9pZCAwO3ZhciBBMT1hdCgpLGNhPWNsYXNzIGV4dGVuZHMgQTEuQ29udGFpbmVye30sSTE9Y2E7Tm4uZGVmYXVsdD1JMTt9KTt2YXIgbHQ9TShoYT0+e3YoKTttKCk7XygpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShoYSxcInRcIix7dmFsdWU6ITB9KTtoYS50aHJvd0l0ZXJhdG9yQWNjZXNzRXJyb3I9VDE7ZnVuY3Rpb24gVDEoKXt0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkl0ZXJhdG9yIGFjY2VzcyBkZW5pZWQhXCIpfX0pO3ZhciBwYT1NKGpuPT57digpO20oKTtfKCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGpuLFwidFwiLHt2YWx1ZTohMH0pO2puLlJhbmRvbUl0ZXJhdG9yPXZvaWQgMDt2YXIgUjE9YXQoKSxEbj1sdCgpLGRhPWNsYXNzIGV4dGVuZHMgUjEuQ29udGFpbmVySXRlcmF0b3J7Y29uc3RydWN0b3IoZSxyKXtzdXBlcihyKSx0aGlzLm89ZSx0aGlzLml0ZXJhdG9yVHlwZT09PTA/KHRoaXMucHJlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubz09PTAmJigwLCBEbi50aHJvd0l0ZXJhdG9yQWNjZXNzRXJyb3IpKCksdGhpcy5vLT0xLHRoaXN9LHRoaXMubmV4dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm89PT10aGlzLmNvbnRhaW5lci5zaXplKCkmJigwLCBEbi50aHJvd0l0ZXJhdG9yQWNjZXNzRXJyb3IpKCksdGhpcy5vKz0xLHRoaXN9KToodGhpcy5wcmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vPT09dGhpcy5jb250YWluZXIuc2l6ZSgpLTEmJigwLCBEbi50aHJvd0l0ZXJhdG9yQWNjZXNzRXJyb3IpKCksdGhpcy5vKz0xLHRoaXN9LHRoaXMubmV4dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm89PT0tMSYmKDAsIERuLnRocm93SXRlcmF0b3JBY2Nlc3NFcnJvcikoKSx0aGlzLm8tPTEsdGhpc30pO31nZXQgcG9pbnRlcigpe3JldHVybiB0aGlzLmNvbnRhaW5lci5nZXRFbGVtZW50QnlQb3ModGhpcy5vKX1zZXQgcG9pbnRlcihlKXt0aGlzLmNvbnRhaW5lci5zZXRFbGVtZW50QnlQb3ModGhpcy5vLGUpO319O2puLlJhbmRvbUl0ZXJhdG9yPWRhO30pO3ZhciBycD1NKEZuPT57digpO20oKTtfKCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KEZuLFwidFwiLHt2YWx1ZTohMH0pO0ZuLmRlZmF1bHQ9dm9pZCAwO3ZhciBDMT1QMShxbigpKSxCMT1wYSgpO2Z1bmN0aW9uIFAxKHQpe3JldHVybiB0JiZ0LnQ/dDp7ZGVmYXVsdDp0fX12YXIgd3I9Y2xhc3MgdCBleHRlbmRzIEIxLlJhbmRvbUl0ZXJhdG9ye2NvbnN0cnVjdG9yKGUscixpKXtzdXBlcihlLGkpLHRoaXMuY29udGFpbmVyPXI7fWNvcHkoKXtyZXR1cm4gbmV3IHQodGhpcy5vLHRoaXMuY29udGFpbmVyLHRoaXMuaXRlcmF0b3JUeXBlKX19LGdhPWNsYXNzIGV4dGVuZHMgQzEuZGVmYXVsdHtjb25zdHJ1Y3RvcihlPVtdLHI9ITApe2lmKHN1cGVyKCksQXJyYXkuaXNBcnJheShlKSl0aGlzLko9cj9bLi4uZV06ZSx0aGlzLmk9ZS5sZW5ndGg7ZWxzZSB7dGhpcy5KPVtdO2xldCBpPXRoaXM7ZS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2kucHVzaEJhY2sobik7fSk7fX1jbGVhcigpe3RoaXMuaT0wLHRoaXMuSi5sZW5ndGg9MDt9YmVnaW4oKXtyZXR1cm4gbmV3IHdyKDAsdGhpcyl9ZW5kKCl7cmV0dXJuIG5ldyB3cih0aGlzLmksdGhpcyl9ckJlZ2luKCl7cmV0dXJuIG5ldyB3cih0aGlzLmktMSx0aGlzLDEpfXJFbmQoKXtyZXR1cm4gbmV3IHdyKC0xLHRoaXMsMSl9ZnJvbnQoKXtyZXR1cm4gdGhpcy5KWzBdfWJhY2soKXtyZXR1cm4gdGhpcy5KW3RoaXMuaS0xXX1nZXRFbGVtZW50QnlQb3MoZSl7aWYoZTwwfHxlPnRoaXMuaS0xKXRocm93IG5ldyBSYW5nZUVycm9yO3JldHVybiB0aGlzLkpbZV19ZXJhc2VFbGVtZW50QnlQb3MoZSl7aWYoZTwwfHxlPnRoaXMuaS0xKXRocm93IG5ldyBSYW5nZUVycm9yO3JldHVybiB0aGlzLkouc3BsaWNlKGUsMSksdGhpcy5pLT0xLHRoaXMuaX1lcmFzZUVsZW1lbnRCeVZhbHVlKGUpe2xldCByPTA7Zm9yKGxldCBpPTA7aTx0aGlzLmk7KytpKXRoaXMuSltpXSE9PWUmJih0aGlzLkpbcisrXT10aGlzLkpbaV0pO3JldHVybiB0aGlzLmk9dGhpcy5KLmxlbmd0aD1yLHRoaXMuaX1lcmFzZUVsZW1lbnRCeUl0ZXJhdG9yKGUpe2xldCByPWUubztyZXR1cm4gZT1lLm5leHQoKSx0aGlzLmVyYXNlRWxlbWVudEJ5UG9zKHIpLGV9cHVzaEJhY2soZSl7cmV0dXJuIHRoaXMuSi5wdXNoKGUpLHRoaXMuaSs9MSx0aGlzLml9cG9wQmFjaygpe2lmKHRoaXMuaSE9PTApcmV0dXJuIHRoaXMuaS09MSx0aGlzLkoucG9wKCl9c2V0RWxlbWVudEJ5UG9zKGUscil7aWYoZTwwfHxlPnRoaXMuaS0xKXRocm93IG5ldyBSYW5nZUVycm9yO3RoaXMuSltlXT1yO31pbnNlcnQoZSxyLGk9MSl7aWYoZTwwfHxlPnRoaXMuaSl0aHJvdyBuZXcgUmFuZ2VFcnJvcjtyZXR1cm4gdGhpcy5KLnNwbGljZShlLDAsLi4ubmV3IEFycmF5KGkpLmZpbGwocikpLHRoaXMuaSs9aSx0aGlzLml9ZmluZChlKXtmb3IobGV0IHI9MDtyPHRoaXMuaTsrK3IpaWYodGhpcy5KW3JdPT09ZSlyZXR1cm4gbmV3IHdyKHIsdGhpcyk7cmV0dXJuIHRoaXMuZW5kKCl9cmV2ZXJzZSgpe3RoaXMuSi5yZXZlcnNlKCk7fXVuaXF1ZSgpe2xldCBlPTE7Zm9yKGxldCByPTE7cjx0aGlzLmk7KytyKXRoaXMuSltyXSE9PXRoaXMuSltyLTFdJiYodGhpcy5KW2UrK109dGhpcy5KW3JdKTtyZXR1cm4gdGhpcy5pPXRoaXMuSi5sZW5ndGg9ZSx0aGlzLml9c29ydChlKXt0aGlzLkouc29ydChlKTt9Zm9yRWFjaChlKXtmb3IobGV0IHI9MDtyPHRoaXMuaTsrK3IpZSh0aGlzLkpbcl0scix0aGlzKTt9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gZnVuY3Rpb24qKCl7eWllbGQqdGhpcy5KO30uYmluZCh0aGlzKSgpfX0sTzE9Z2E7Rm4uZGVmYXVsdD1PMTt9KTt2YXIgaXA9TShXbj0+e3YoKTttKCk7XygpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShXbixcInRcIix7dmFsdWU6ITB9KTtXbi5kZWZhdWx0PXZvaWQgMDt2YXIgazE9TTEocW4oKSkseDE9YXQoKSxfcj1sdCgpO2Z1bmN0aW9uIE0xKHQpe3JldHVybiB0JiZ0LnQ/dDp7ZGVmYXVsdDp0fX12YXIgbXI9Y2xhc3MgdCBleHRlbmRzIHgxLkNvbnRhaW5lckl0ZXJhdG9ye2NvbnN0cnVjdG9yKGUscixpLG4pe3N1cGVyKG4pLHRoaXMubz1lLHRoaXMuaD1yLHRoaXMuY29udGFpbmVyPWksdGhpcy5pdGVyYXRvclR5cGU9PT0wPyh0aGlzLnByZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm8uTD09PXRoaXMuaCYmKDAsIF9yLnRocm93SXRlcmF0b3JBY2Nlc3NFcnJvcikoKSx0aGlzLm89dGhpcy5vLkwsdGhpc30sdGhpcy5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubz09PXRoaXMuaCYmKDAsIF9yLnRocm93SXRlcmF0b3JBY2Nlc3NFcnJvcikoKSx0aGlzLm89dGhpcy5vLkIsdGhpc30pOih0aGlzLnByZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm8uQj09PXRoaXMuaCYmKDAsIF9yLnRocm93SXRlcmF0b3JBY2Nlc3NFcnJvcikoKSx0aGlzLm89dGhpcy5vLkIsdGhpc30sdGhpcy5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubz09PXRoaXMuaCYmKDAsIF9yLnRocm93SXRlcmF0b3JBY2Nlc3NFcnJvcikoKSx0aGlzLm89dGhpcy5vLkwsdGhpc30pO31nZXQgcG9pbnRlcigpe3JldHVybiB0aGlzLm89PT10aGlzLmgmJigwLCBfci50aHJvd0l0ZXJhdG9yQWNjZXNzRXJyb3IpKCksdGhpcy5vLmx9c2V0IHBvaW50ZXIoZSl7dGhpcy5vPT09dGhpcy5oJiYoMCwgX3IudGhyb3dJdGVyYXRvckFjY2Vzc0Vycm9yKSgpLHRoaXMuby5sPWU7fWNvcHkoKXtyZXR1cm4gbmV3IHQodGhpcy5vLHRoaXMuaCx0aGlzLmNvbnRhaW5lcix0aGlzLml0ZXJhdG9yVHlwZSl9fSx5YT1jbGFzcyBleHRlbmRzIGsxLmRlZmF1bHR7Y29uc3RydWN0b3IoZT1bXSl7c3VwZXIoKSx0aGlzLmg9e30sdGhpcy5wPXRoaXMuXz10aGlzLmguTD10aGlzLmguQj10aGlzLmg7bGV0IHI9dGhpcztlLmZvckVhY2goZnVuY3Rpb24oaSl7ci5wdXNoQmFjayhpKTt9KTt9VihlKXtsZXR7TDpyLEI6aX09ZTtyLkI9aSxpLkw9cixlPT09dGhpcy5wJiYodGhpcy5wPWkpLGU9PT10aGlzLl8mJih0aGlzLl89ciksdGhpcy5pLT0xO31HKGUscil7bGV0IGk9ci5CLG49e2w6ZSxMOnIsQjppfTtyLkI9bixpLkw9bixyPT09dGhpcy5oJiYodGhpcy5wPW4pLGk9PT10aGlzLmgmJih0aGlzLl89biksdGhpcy5pKz0xO31jbGVhcigpe3RoaXMuaT0wLHRoaXMucD10aGlzLl89dGhpcy5oLkw9dGhpcy5oLkI9dGhpcy5oO31iZWdpbigpe3JldHVybiBuZXcgbXIodGhpcy5wLHRoaXMuaCx0aGlzKX1lbmQoKXtyZXR1cm4gbmV3IG1yKHRoaXMuaCx0aGlzLmgsdGhpcyl9ckJlZ2luKCl7cmV0dXJuIG5ldyBtcih0aGlzLl8sdGhpcy5oLHRoaXMsMSl9ckVuZCgpe3JldHVybiBuZXcgbXIodGhpcy5oLHRoaXMuaCx0aGlzLDEpfWZyb250KCl7cmV0dXJuIHRoaXMucC5sfWJhY2soKXtyZXR1cm4gdGhpcy5fLmx9Z2V0RWxlbWVudEJ5UG9zKGUpe2lmKGU8MHx8ZT50aGlzLmktMSl0aHJvdyBuZXcgUmFuZ2VFcnJvcjtsZXQgcj10aGlzLnA7Zm9yKDtlLS07KXI9ci5CO3JldHVybiByLmx9ZXJhc2VFbGVtZW50QnlQb3MoZSl7aWYoZTwwfHxlPnRoaXMuaS0xKXRocm93IG5ldyBSYW5nZUVycm9yO2xldCByPXRoaXMucDtmb3IoO2UtLTspcj1yLkI7cmV0dXJuIHRoaXMuVihyKSx0aGlzLml9ZXJhc2VFbGVtZW50QnlWYWx1ZShlKXtsZXQgcj10aGlzLnA7Zm9yKDtyIT09dGhpcy5oOylyLmw9PT1lJiZ0aGlzLlYocikscj1yLkI7cmV0dXJuIHRoaXMuaX1lcmFzZUVsZW1lbnRCeUl0ZXJhdG9yKGUpe2xldCByPWUubztyZXR1cm4gcj09PXRoaXMuaCYmKDAsIF9yLnRocm93SXRlcmF0b3JBY2Nlc3NFcnJvcikoKSxlPWUubmV4dCgpLHRoaXMuVihyKSxlfXB1c2hCYWNrKGUpe3JldHVybiB0aGlzLkcoZSx0aGlzLl8pLHRoaXMuaX1wb3BCYWNrKCl7aWYodGhpcy5pPT09MClyZXR1cm47bGV0IGU9dGhpcy5fLmw7cmV0dXJuIHRoaXMuVih0aGlzLl8pLGV9cHVzaEZyb250KGUpe3JldHVybiB0aGlzLkcoZSx0aGlzLmgpLHRoaXMuaX1wb3BGcm9udCgpe2lmKHRoaXMuaT09PTApcmV0dXJuO2xldCBlPXRoaXMucC5sO3JldHVybiB0aGlzLlYodGhpcy5wKSxlfXNldEVsZW1lbnRCeVBvcyhlLHIpe2lmKGU8MHx8ZT50aGlzLmktMSl0aHJvdyBuZXcgUmFuZ2VFcnJvcjtsZXQgaT10aGlzLnA7Zm9yKDtlLS07KWk9aS5CO2kubD1yO31pbnNlcnQoZSxyLGk9MSl7aWYoZTwwfHxlPnRoaXMuaSl0aHJvdyBuZXcgUmFuZ2VFcnJvcjtpZihpPD0wKXJldHVybiB0aGlzLmk7aWYoZT09PTApZm9yKDtpLS07KXRoaXMucHVzaEZyb250KHIpO2Vsc2UgaWYoZT09PXRoaXMuaSlmb3IoO2ktLTspdGhpcy5wdXNoQmFjayhyKTtlbHNlIHtsZXQgbj10aGlzLnA7Zm9yKGxldCBzPTE7czxlOysrcyluPW4uQjtsZXQgbz1uLkI7Zm9yKHRoaXMuaSs9aTtpLS07KW4uQj17bDpyLEw6bn0sbi5CLkw9bixuPW4uQjtuLkI9byxvLkw9bjt9cmV0dXJuIHRoaXMuaX1maW5kKGUpe2xldCByPXRoaXMucDtmb3IoO3IhPT10aGlzLmg7KXtpZihyLmw9PT1lKXJldHVybiBuZXcgbXIocix0aGlzLmgsdGhpcyk7cj1yLkI7fXJldHVybiB0aGlzLmVuZCgpfXJldmVyc2UoKXtpZih0aGlzLmk8PTEpcmV0dXJuO2xldCBlPXRoaXMucCxyPXRoaXMuXyxpPTA7Zm9yKDtpPDwxPHRoaXMuaTspe2xldCBuPWUubDtlLmw9ci5sLHIubD1uLGU9ZS5CLHI9ci5MLGkrPTE7fX11bmlxdWUoKXtpZih0aGlzLmk8PTEpcmV0dXJuIHRoaXMuaTtsZXQgZT10aGlzLnA7Zm9yKDtlIT09dGhpcy5oOyl7bGV0IHI9ZTtmb3IoO3IuQiE9PXRoaXMuaCYmci5sPT09ci5CLmw7KXI9ci5CLHRoaXMuaS09MTtlLkI9ci5CLGUuQi5MPWUsZT1lLkI7fXJldHVybiB0aGlzLml9c29ydChlKXtpZih0aGlzLmk8PTEpcmV0dXJuO2xldCByPVtdO3RoaXMuZm9yRWFjaChmdW5jdGlvbihuKXtyLnB1c2gobik7fSksci5zb3J0KGUpO2xldCBpPXRoaXMucDtyLmZvckVhY2goZnVuY3Rpb24obil7aS5sPW4saT1pLkI7fSk7fW1lcmdlKGUpe2xldCByPXRoaXM7aWYodGhpcy5pPT09MCllLmZvckVhY2goZnVuY3Rpb24oaSl7ci5wdXNoQmFjayhpKTt9KTtlbHNlIHtsZXQgaT10aGlzLnA7ZS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2Zvcig7aSE9PXIuaCYmaS5sPD1uOylpPWkuQjtyLkcobixpLkwpO30pO31yZXR1cm4gdGhpcy5pfWZvckVhY2goZSl7bGV0IHI9dGhpcy5wLGk9MDtmb3IoO3IhPT10aGlzLmg7KWUoci5sLGkrKyx0aGlzKSxyPXIuQjt9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gZnVuY3Rpb24qKCl7aWYodGhpcy5pPT09MClyZXR1cm47bGV0IGU9dGhpcy5wO2Zvcig7ZSE9PXRoaXMuaDspeWllbGQgZS5sLGU9ZS5CO30uYmluZCh0aGlzKSgpfX0sTDE9eWE7V24uZGVmYXVsdD1MMTt9KTt2YXIgbnA9TSgkbj0+e3YoKTttKCk7XygpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkbixcInRcIix7dmFsdWU6ITB9KTskbi5kZWZhdWx0PXZvaWQgMDt2YXIgVTE9cTEocW4oKSksTjE9cGEoKTtmdW5jdGlvbiBxMSh0KXtyZXR1cm4gdCYmdC50P3Q6e2RlZmF1bHQ6dH19dmFyIHZyPWNsYXNzIHQgZXh0ZW5kcyBOMS5SYW5kb21JdGVyYXRvcntjb25zdHJ1Y3RvcihlLHIsaSl7c3VwZXIoZSxpKSx0aGlzLmNvbnRhaW5lcj1yO31jb3B5KCl7cmV0dXJuIG5ldyB0KHRoaXMubyx0aGlzLmNvbnRhaW5lcix0aGlzLml0ZXJhdG9yVHlwZSl9fSxiYT1jbGFzcyBleHRlbmRzIFUxLmRlZmF1bHR7Y29uc3RydWN0b3IoZT1bXSxyPTQwOTYpe3N1cGVyKCksdGhpcy5qPTAsdGhpcy5EPTAsdGhpcy5SPTAsdGhpcy5OPTAsdGhpcy5QPTAsdGhpcy5BPVtdO2xldCBpPSgoKT0+e2lmKHR5cGVvZiBlLmxlbmd0aD09XCJudW1iZXJcIilyZXR1cm4gZS5sZW5ndGg7aWYodHlwZW9mIGUuc2l6ZT09XCJudW1iZXJcIilyZXR1cm4gZS5zaXplO2lmKHR5cGVvZiBlLnNpemU9PVwiZnVuY3Rpb25cIilyZXR1cm4gZS5zaXplKCk7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBnZXQgdGhlIGxlbmd0aCBvciBzaXplIG9mIHRoZSBjb250YWluZXJcIil9KSgpO3RoaXMuRj1yLHRoaXMuUD1NYXRoLm1heChNYXRoLmNlaWwoaS90aGlzLkYpLDEpO2ZvcihsZXQgcz0wO3M8dGhpcy5QOysrcyl0aGlzLkEucHVzaChuZXcgQXJyYXkodGhpcy5GKSk7bGV0IG49TWF0aC5jZWlsKGkvdGhpcy5GKTt0aGlzLmo9dGhpcy5SPSh0aGlzLlA+PjEpLShuPj4xKSx0aGlzLkQ9dGhpcy5OPXRoaXMuRi1pJXRoaXMuRj4+MTtsZXQgbz10aGlzO2UuZm9yRWFjaChmdW5jdGlvbihzKXtvLnB1c2hCYWNrKHMpO30pO31UKCl7bGV0IGU9W10scj1NYXRoLm1heCh0aGlzLlA+PjEsMSk7Zm9yKGxldCBpPTA7aTxyOysraSllW2ldPW5ldyBBcnJheSh0aGlzLkYpO2ZvcihsZXQgaT10aGlzLmo7aTx0aGlzLlA7KytpKWVbZS5sZW5ndGhdPXRoaXMuQVtpXTtmb3IobGV0IGk9MDtpPHRoaXMuUjsrK2kpZVtlLmxlbmd0aF09dGhpcy5BW2ldO2VbZS5sZW5ndGhdPVsuLi50aGlzLkFbdGhpcy5SXV0sdGhpcy5qPXIsdGhpcy5SPWUubGVuZ3RoLTE7Zm9yKGxldCBpPTA7aTxyOysraSllW2UubGVuZ3RoXT1uZXcgQXJyYXkodGhpcy5GKTt0aGlzLkE9ZSx0aGlzLlA9ZS5sZW5ndGg7fU8oZSl7bGV0IHI9dGhpcy5EK2UrMSxpPXIldGhpcy5GLG49aS0xLG89dGhpcy5qKyhyLWkpL3RoaXMuRjtyZXR1cm4gaT09PTAmJihvLT0xKSxvJT10aGlzLlAsbjwwJiYobis9dGhpcy5GKSx7Y3VyTm9kZUJ1Y2tldEluZGV4Om8sY3VyTm9kZVBvaW50ZXJJbmRleDpufX1jbGVhcigpe3RoaXMuQT1bbmV3IEFycmF5KHRoaXMuRildLHRoaXMuUD0xLHRoaXMuaj10aGlzLlI9dGhpcy5pPTAsdGhpcy5EPXRoaXMuTj10aGlzLkY+PjE7fWJlZ2luKCl7cmV0dXJuIG5ldyB2cigwLHRoaXMpfWVuZCgpe3JldHVybiBuZXcgdnIodGhpcy5pLHRoaXMpfXJCZWdpbigpe3JldHVybiBuZXcgdnIodGhpcy5pLTEsdGhpcywxKX1yRW5kKCl7cmV0dXJuIG5ldyB2cigtMSx0aGlzLDEpfWZyb250KCl7aWYodGhpcy5pIT09MClyZXR1cm4gdGhpcy5BW3RoaXMual1bdGhpcy5EXX1iYWNrKCl7aWYodGhpcy5pIT09MClyZXR1cm4gdGhpcy5BW3RoaXMuUl1bdGhpcy5OXX1wdXNoQmFjayhlKXtyZXR1cm4gdGhpcy5pJiYodGhpcy5OPHRoaXMuRi0xP3RoaXMuTis9MTp0aGlzLlI8dGhpcy5QLTE/KHRoaXMuUis9MSx0aGlzLk49MCk6KHRoaXMuUj0wLHRoaXMuTj0wKSx0aGlzLlI9PT10aGlzLmomJnRoaXMuTj09PXRoaXMuRCYmdGhpcy5UKCkpLHRoaXMuaSs9MSx0aGlzLkFbdGhpcy5SXVt0aGlzLk5dPWUsdGhpcy5pfXBvcEJhY2soKXtpZih0aGlzLmk9PT0wKXJldHVybjtsZXQgZT10aGlzLkFbdGhpcy5SXVt0aGlzLk5dO3JldHVybiB0aGlzLmkhPT0xJiYodGhpcy5OPjA/dGhpcy5OLT0xOnRoaXMuUj4wPyh0aGlzLlItPTEsdGhpcy5OPXRoaXMuRi0xKToodGhpcy5SPXRoaXMuUC0xLHRoaXMuTj10aGlzLkYtMSkpLHRoaXMuaS09MSxlfXB1c2hGcm9udChlKXtyZXR1cm4gdGhpcy5pJiYodGhpcy5EPjA/dGhpcy5ELT0xOnRoaXMuaj4wPyh0aGlzLmotPTEsdGhpcy5EPXRoaXMuRi0xKToodGhpcy5qPXRoaXMuUC0xLHRoaXMuRD10aGlzLkYtMSksdGhpcy5qPT09dGhpcy5SJiZ0aGlzLkQ9PT10aGlzLk4mJnRoaXMuVCgpKSx0aGlzLmkrPTEsdGhpcy5BW3RoaXMual1bdGhpcy5EXT1lLHRoaXMuaX1wb3BGcm9udCgpe2lmKHRoaXMuaT09PTApcmV0dXJuO2xldCBlPXRoaXMuQVt0aGlzLmpdW3RoaXMuRF07cmV0dXJuIHRoaXMuaSE9PTEmJih0aGlzLkQ8dGhpcy5GLTE/dGhpcy5EKz0xOnRoaXMuajx0aGlzLlAtMT8odGhpcy5qKz0xLHRoaXMuRD0wKToodGhpcy5qPTAsdGhpcy5EPTApKSx0aGlzLmktPTEsZX1nZXRFbGVtZW50QnlQb3MoZSl7aWYoZTwwfHxlPnRoaXMuaS0xKXRocm93IG5ldyBSYW5nZUVycm9yO2xldHtjdXJOb2RlQnVja2V0SW5kZXg6cixjdXJOb2RlUG9pbnRlckluZGV4Oml9PXRoaXMuTyhlKTtyZXR1cm4gdGhpcy5BW3JdW2ldfXNldEVsZW1lbnRCeVBvcyhlLHIpe2lmKGU8MHx8ZT50aGlzLmktMSl0aHJvdyBuZXcgUmFuZ2VFcnJvcjtsZXR7Y3VyTm9kZUJ1Y2tldEluZGV4OmksY3VyTm9kZVBvaW50ZXJJbmRleDpufT10aGlzLk8oZSk7dGhpcy5BW2ldW25dPXI7fWluc2VydChlLHIsaT0xKXtpZihlPDB8fGU+dGhpcy5pKXRocm93IG5ldyBSYW5nZUVycm9yO2lmKGU9PT0wKWZvcig7aS0tOyl0aGlzLnB1c2hGcm9udChyKTtlbHNlIGlmKGU9PT10aGlzLmkpZm9yKDtpLS07KXRoaXMucHVzaEJhY2socik7ZWxzZSB7bGV0IG49W107Zm9yKGxldCBvPWU7bzx0aGlzLmk7KytvKW4ucHVzaCh0aGlzLmdldEVsZW1lbnRCeVBvcyhvKSk7dGhpcy5jdXQoZS0xKTtmb3IobGV0IG89MDtvPGk7KytvKXRoaXMucHVzaEJhY2socik7Zm9yKGxldCBvPTA7bzxuLmxlbmd0aDsrK28pdGhpcy5wdXNoQmFjayhuW29dKTt9cmV0dXJuIHRoaXMuaX1jdXQoZSl7aWYoZTwwKXJldHVybiB0aGlzLmNsZWFyKCksMDtsZXR7Y3VyTm9kZUJ1Y2tldEluZGV4OnIsY3VyTm9kZVBvaW50ZXJJbmRleDppfT10aGlzLk8oZSk7cmV0dXJuIHRoaXMuUj1yLHRoaXMuTj1pLHRoaXMuaT1lKzEsdGhpcy5pfWVyYXNlRWxlbWVudEJ5UG9zKGUpe2lmKGU8MHx8ZT50aGlzLmktMSl0aHJvdyBuZXcgUmFuZ2VFcnJvcjtpZihlPT09MCl0aGlzLnBvcEZyb250KCk7ZWxzZSBpZihlPT09dGhpcy5pLTEpdGhpcy5wb3BCYWNrKCk7ZWxzZSB7bGV0IHI9W107Zm9yKGxldCBuPWUrMTtuPHRoaXMuaTsrK24pci5wdXNoKHRoaXMuZ2V0RWxlbWVudEJ5UG9zKG4pKTt0aGlzLmN1dChlKSx0aGlzLnBvcEJhY2soKTtsZXQgaT10aGlzO3IuZm9yRWFjaChmdW5jdGlvbihuKXtpLnB1c2hCYWNrKG4pO30pO31yZXR1cm4gdGhpcy5pfWVyYXNlRWxlbWVudEJ5VmFsdWUoZSl7aWYodGhpcy5pPT09MClyZXR1cm4gMDtsZXQgcj1bXTtmb3IobGV0IG49MDtuPHRoaXMuaTsrK24pe2xldCBvPXRoaXMuZ2V0RWxlbWVudEJ5UG9zKG4pO28hPT1lJiZyLnB1c2gobyk7fWxldCBpPXIubGVuZ3RoO2ZvcihsZXQgbj0wO248aTsrK24pdGhpcy5zZXRFbGVtZW50QnlQb3MobixyW25dKTtyZXR1cm4gdGhpcy5jdXQoaS0xKX1lcmFzZUVsZW1lbnRCeUl0ZXJhdG9yKGUpe2xldCByPWUubztyZXR1cm4gdGhpcy5lcmFzZUVsZW1lbnRCeVBvcyhyKSxlPWUubmV4dCgpLGV9ZmluZChlKXtmb3IobGV0IHI9MDtyPHRoaXMuaTsrK3IpaWYodGhpcy5nZXRFbGVtZW50QnlQb3Mocik9PT1lKXJldHVybiBuZXcgdnIocix0aGlzKTtyZXR1cm4gdGhpcy5lbmQoKX1yZXZlcnNlKCl7bGV0IGU9MCxyPXRoaXMuaS0xO2Zvcig7ZTxyOyl7bGV0IGk9dGhpcy5nZXRFbGVtZW50QnlQb3MoZSk7dGhpcy5zZXRFbGVtZW50QnlQb3MoZSx0aGlzLmdldEVsZW1lbnRCeVBvcyhyKSksdGhpcy5zZXRFbGVtZW50QnlQb3MocixpKSxlKz0xLHItPTE7fX11bmlxdWUoKXtpZih0aGlzLmk8PTEpcmV0dXJuIHRoaXMuaTtsZXQgZT0xLHI9dGhpcy5nZXRFbGVtZW50QnlQb3MoMCk7Zm9yKGxldCBpPTE7aTx0aGlzLmk7KytpKXtsZXQgbj10aGlzLmdldEVsZW1lbnRCeVBvcyhpKTtuIT09ciYmKHI9bix0aGlzLnNldEVsZW1lbnRCeVBvcyhlKyssbikpO31mb3IoO3RoaXMuaT5lOyl0aGlzLnBvcEJhY2soKTtyZXR1cm4gdGhpcy5pfXNvcnQoZSl7bGV0IHI9W107Zm9yKGxldCBpPTA7aTx0aGlzLmk7KytpKXIucHVzaCh0aGlzLmdldEVsZW1lbnRCeVBvcyhpKSk7ci5zb3J0KGUpO2ZvcihsZXQgaT0wO2k8dGhpcy5pOysraSl0aGlzLnNldEVsZW1lbnRCeVBvcyhpLHJbaV0pO31zaHJpbmtUb0ZpdCgpe2lmKHRoaXMuaT09PTApcmV0dXJuO2xldCBlPVtdO3RoaXMuZm9yRWFjaChmdW5jdGlvbihyKXtlLnB1c2gocik7fSksdGhpcy5QPU1hdGgubWF4KE1hdGguY2VpbCh0aGlzLmkvdGhpcy5GKSwxKSx0aGlzLmk9dGhpcy5qPXRoaXMuUj10aGlzLkQ9dGhpcy5OPTAsdGhpcy5BPVtdO2ZvcihsZXQgcj0wO3I8dGhpcy5QOysrcil0aGlzLkEucHVzaChuZXcgQXJyYXkodGhpcy5GKSk7Zm9yKGxldCByPTA7cjxlLmxlbmd0aDsrK3IpdGhpcy5wdXNoQmFjayhlW3JdKTt9Zm9yRWFjaChlKXtmb3IobGV0IHI9MDtyPHRoaXMuaTsrK3IpZSh0aGlzLmdldEVsZW1lbnRCeVBvcyhyKSxyLHRoaXMpO31bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBmdW5jdGlvbiooKXtmb3IobGV0IGU9MDtlPHRoaXMuaTsrK2UpeWllbGQgdGhpcy5nZXRFbGVtZW50QnlQb3MoZSk7fS5iaW5kKHRoaXMpKCl9fSxEMT1iYTskbi5kZWZhdWx0PUQxO30pO3ZhciBzcD1NKFpyPT57digpO20oKTtfKCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFpyLFwidFwiLHt2YWx1ZTohMH0pO1pyLlRyZWVOb2RlRW5hYmxlSW5kZXg9WnIuVHJlZU5vZGU9dm9pZCAwO3ZhciBIbj1jbGFzc3tjb25zdHJ1Y3RvcihlLHIpe3RoaXMuZWU9MSx0aGlzLnU9dm9pZCAwLHRoaXMubD12b2lkIDAsdGhpcy5VPXZvaWQgMCx0aGlzLlc9dm9pZCAwLHRoaXMudHQ9dm9pZCAwLHRoaXMudT1lLHRoaXMubD1yO31MKCl7bGV0IGU9dGhpcztpZihlLmVlPT09MSYmZS50dC50dD09PWUpZT1lLlc7ZWxzZSBpZihlLlUpZm9yKGU9ZS5VO2UuVzspZT1lLlc7ZWxzZSB7bGV0IHI9ZS50dDtmb3IoO3IuVT09PWU7KWU9cixyPWUudHQ7ZT1yO31yZXR1cm4gZX1CKCl7bGV0IGU9dGhpcztpZihlLlcpe2ZvcihlPWUuVztlLlU7KWU9ZS5VO3JldHVybiBlfWVsc2Uge2xldCByPWUudHQ7Zm9yKDtyLlc9PT1lOyllPXIscj1lLnR0O3JldHVybiBlLlchPT1yP3I6ZX19dGUoKXtsZXQgZT10aGlzLnR0LHI9dGhpcy5XLGk9ci5VO3JldHVybiBlLnR0PT09dGhpcz9lLnR0PXI6ZS5VPT09dGhpcz9lLlU9cjplLlc9cixyLnR0PWUsci5VPXRoaXMsdGhpcy50dD1yLHRoaXMuVz1pLGkmJihpLnR0PXRoaXMpLHJ9c2UoKXtsZXQgZT10aGlzLnR0LHI9dGhpcy5VLGk9ci5XO3JldHVybiBlLnR0PT09dGhpcz9lLnR0PXI6ZS5VPT09dGhpcz9lLlU9cjplLlc9cixyLnR0PWUsci5XPXRoaXMsdGhpcy50dD1yLHRoaXMuVT1pLGkmJihpLnR0PXRoaXMpLHJ9fTtaci5UcmVlTm9kZT1Ibjt2YXIgd2E9Y2xhc3MgZXh0ZW5kcyBIbntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5ydD0xO310ZSgpe2xldCBlPXN1cGVyLnRlKCk7cmV0dXJuIHRoaXMuaWUoKSxlLmllKCksZX1zZSgpe2xldCBlPXN1cGVyLnNlKCk7cmV0dXJuIHRoaXMuaWUoKSxlLmllKCksZX1pZSgpe3RoaXMucnQ9MSx0aGlzLlUmJih0aGlzLnJ0Kz10aGlzLlUucnQpLHRoaXMuVyYmKHRoaXMucnQrPXRoaXMuVy5ydCk7fX07WnIuVHJlZU5vZGVFbmFibGVJbmRleD13YTt9KTt2YXIgbWE9TShWbj0+e3YoKTttKCk7XygpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShWbixcInRcIix7dmFsdWU6ITB9KTtWbi5kZWZhdWx0PXZvaWQgMDt2YXIgb3A9c3AoKSxqMT1hdCgpLGFwPWx0KCksX2E9Y2xhc3MgZXh0ZW5kcyBqMS5Db250YWluZXJ7Y29uc3RydWN0b3IoZT1mdW5jdGlvbihpLG4pe3JldHVybiBpPG4/LTE6aT5uPzE6MH0scj0hMSl7c3VwZXIoKSx0aGlzLlk9dm9pZCAwLHRoaXMudj1lLHI/KHRoaXMucmU9b3AuVHJlZU5vZGVFbmFibGVJbmRleCx0aGlzLk09ZnVuY3Rpb24oaSxuLG8pe2xldCBzPXRoaXMubmUoaSxuLG8pO2lmKHMpe2xldCBhPXMudHQ7Zm9yKDthIT09dGhpcy5oOylhLnJ0Kz0xLGE9YS50dDtsZXQgdT10aGlzLmhlKHMpO2lmKHUpe2xldHtwYXJlbnROb2RlOmMsZ3JhbmRQYXJlbnQ6aCxjdXJOb2RlOmR9PXU7Yy5pZSgpLGguaWUoKSxkLmllKCk7fX1yZXR1cm4gdGhpcy5pfSx0aGlzLlY9ZnVuY3Rpb24oaSl7bGV0IG49dGhpcy5mZShpKTtmb3IoO24hPT10aGlzLmg7KW4ucnQtPTEsbj1uLnR0O30pOih0aGlzLnJlPW9wLlRyZWVOb2RlLHRoaXMuTT1mdW5jdGlvbihpLG4sbyl7bGV0IHM9dGhpcy5uZShpLG4sbyk7cmV0dXJuIHMmJnRoaXMuaGUocyksdGhpcy5pfSx0aGlzLlY9dGhpcy5mZSksdGhpcy5oPW5ldyB0aGlzLnJlO31YKGUscil7bGV0IGk9dGhpcy5oO2Zvcig7ZTspe2xldCBuPXRoaXMudihlLnUscik7aWYobjwwKWU9ZS5XO2Vsc2UgaWYobj4wKWk9ZSxlPWUuVTtlbHNlIHJldHVybiBlfXJldHVybiBpfVooZSxyKXtsZXQgaT10aGlzLmg7Zm9yKDtlOyl0aGlzLnYoZS51LHIpPD0wP2U9ZS5XOihpPWUsZT1lLlUpO3JldHVybiBpfSQoZSxyKXtsZXQgaT10aGlzLmg7Zm9yKDtlOyl7bGV0IG49dGhpcy52KGUudSxyKTtpZihuPDApaT1lLGU9ZS5XO2Vsc2UgaWYobj4wKWU9ZS5VO2Vsc2UgcmV0dXJuIGV9cmV0dXJuIGl9cnIoZSxyKXtsZXQgaT10aGlzLmg7Zm9yKDtlOyl0aGlzLnYoZS51LHIpPDA/KGk9ZSxlPWUuVyk6ZT1lLlU7cmV0dXJuIGl9dWUoZSl7Zm9yKDs7KXtsZXQgcj1lLnR0O2lmKHI9PT10aGlzLmgpcmV0dXJuO2lmKGUuZWU9PT0xKXtlLmVlPTA7cmV0dXJufWlmKGU9PT1yLlUpe2xldCBpPXIuVztpZihpLmVlPT09MSlpLmVlPTAsci5lZT0xLHI9PT10aGlzLlk/dGhpcy5ZPXIudGUoKTpyLnRlKCk7ZWxzZSBpZihpLlcmJmkuVy5lZT09PTEpe2kuZWU9ci5lZSxyLmVlPTAsaS5XLmVlPTAscj09PXRoaXMuWT90aGlzLlk9ci50ZSgpOnIudGUoKTtyZXR1cm59ZWxzZSBpLlUmJmkuVS5lZT09PTE/KGkuZWU9MSxpLlUuZWU9MCxpLnNlKCkpOihpLmVlPTEsZT1yKTt9ZWxzZSB7bGV0IGk9ci5VO2lmKGkuZWU9PT0xKWkuZWU9MCxyLmVlPTEscj09PXRoaXMuWT90aGlzLlk9ci5zZSgpOnIuc2UoKTtlbHNlIGlmKGkuVSYmaS5VLmVlPT09MSl7aS5lZT1yLmVlLHIuZWU9MCxpLlUuZWU9MCxyPT09dGhpcy5ZP3RoaXMuWT1yLnNlKCk6ci5zZSgpO3JldHVybn1lbHNlIGkuVyYmaS5XLmVlPT09MT8oaS5lZT0xLGkuVy5lZT0wLGkudGUoKSk6KGkuZWU9MSxlPXIpO319fWZlKGUpe2lmKHRoaXMuaT09PTEpcmV0dXJuIHRoaXMuY2xlYXIoKSx0aGlzLmg7bGV0IHI9ZTtmb3IoO3IuVXx8ci5XOyl7aWYoci5XKWZvcihyPXIuVztyLlU7KXI9ci5VO2Vsc2Ugcj1yLlU7W2UudSxyLnVdPVtyLnUsZS51XSxbZS5sLHIubF09W3IubCxlLmxdLGU9cjt9dGhpcy5oLlU9PT1yP3RoaXMuaC5VPXIudHQ6dGhpcy5oLlc9PT1yJiYodGhpcy5oLlc9ci50dCksdGhpcy51ZShyKTtsZXQgaT1yLnR0O3JldHVybiByPT09aS5VP2kuVT12b2lkIDA6aS5XPXZvaWQgMCx0aGlzLmktPTEsdGhpcy5ZLmVlPTAsaX1vZShlLHIpe3JldHVybiBlPT09dm9pZCAwPyExOnRoaXMub2UoZS5VLHIpfHxyKGUpPyEwOnRoaXMub2UoZS5XLHIpfWhlKGUpe2Zvcig7Oyl7bGV0IHI9ZS50dDtpZihyLmVlPT09MClyZXR1cm47bGV0IGk9ci50dDtpZihyPT09aS5VKXtsZXQgbj1pLlc7aWYobiYmbi5lZT09PTEpe2lmKG4uZWU9ci5lZT0wLGk9PT10aGlzLlkpcmV0dXJuO2kuZWU9MSxlPWk7Y29udGludWV9ZWxzZSBpZihlPT09ci5XKXtpZihlLmVlPTAsZS5VJiYoZS5VLnR0PXIpLGUuVyYmKGUuVy50dD1pKSxyLlc9ZS5VLGkuVT1lLlcsZS5VPXIsZS5XPWksaT09PXRoaXMuWSl0aGlzLlk9ZSx0aGlzLmgudHQ9ZTtlbHNlIHtsZXQgbz1pLnR0O28uVT09PWk/by5VPWU6by5XPWU7fXJldHVybiBlLnR0PWkudHQsci50dD1lLGkudHQ9ZSxpLmVlPTEse3BhcmVudE5vZGU6cixncmFuZFBhcmVudDppLGN1ck5vZGU6ZX19ZWxzZSByLmVlPTAsaT09PXRoaXMuWT90aGlzLlk9aS5zZSgpOmkuc2UoKSxpLmVlPTE7fWVsc2Uge2xldCBuPWkuVTtpZihuJiZuLmVlPT09MSl7aWYobi5lZT1yLmVlPTAsaT09PXRoaXMuWSlyZXR1cm47aS5lZT0xLGU9aTtjb250aW51ZX1lbHNlIGlmKGU9PT1yLlUpe2lmKGUuZWU9MCxlLlUmJihlLlUudHQ9aSksZS5XJiYoZS5XLnR0PXIpLGkuVz1lLlUsci5VPWUuVyxlLlU9aSxlLlc9cixpPT09dGhpcy5ZKXRoaXMuWT1lLHRoaXMuaC50dD1lO2Vsc2Uge2xldCBvPWkudHQ7by5VPT09aT9vLlU9ZTpvLlc9ZTt9cmV0dXJuIGUudHQ9aS50dCxyLnR0PWUsaS50dD1lLGkuZWU9MSx7cGFyZW50Tm9kZTpyLGdyYW5kUGFyZW50OmksY3VyTm9kZTplfX1lbHNlIHIuZWU9MCxpPT09dGhpcy5ZP3RoaXMuWT1pLnRlKCk6aS50ZSgpLGkuZWU9MTt9cmV0dXJufX1uZShlLHIsaSl7aWYodGhpcy5ZPT09dm9pZCAwKXt0aGlzLmkrPTEsdGhpcy5ZPW5ldyB0aGlzLnJlKGUsciksdGhpcy5ZLmVlPTAsdGhpcy5ZLnR0PXRoaXMuaCx0aGlzLmgudHQ9dGhpcy5ZLHRoaXMuaC5VPXRoaXMuWSx0aGlzLmguVz10aGlzLlk7cmV0dXJufWxldCBuLG89dGhpcy5oLlUscz10aGlzLnYoby51LGUpO2lmKHM9PT0wKXtvLmw9cjtyZXR1cm59ZWxzZSBpZihzPjApby5VPW5ldyB0aGlzLnJlKGUsciksby5VLnR0PW8sbj1vLlUsdGhpcy5oLlU9bjtlbHNlIHtsZXQgYT10aGlzLmguVyx1PXRoaXMudihhLnUsZSk7aWYodT09PTApe2EubD1yO3JldHVybn1lbHNlIGlmKHU8MClhLlc9bmV3IHRoaXMucmUoZSxyKSxhLlcudHQ9YSxuPWEuVyx0aGlzLmguVz1uO2Vsc2Uge2lmKGkhPT12b2lkIDApe2xldCBjPWkubztpZihjIT09dGhpcy5oKXtsZXQgaD10aGlzLnYoYy51LGUpO2lmKGg9PT0wKXtjLmw9cjtyZXR1cm59ZWxzZSBpZihoPjApe2xldCBkPWMuTCgpLGc9dGhpcy52KGQudSxlKTtpZihnPT09MCl7ZC5sPXI7cmV0dXJufWVsc2UgZzwwJiYobj1uZXcgdGhpcy5yZShlLHIpLGQuVz09PXZvaWQgMD8oZC5XPW4sbi50dD1kKTooYy5VPW4sbi50dD1jKSk7fX19aWYobj09PXZvaWQgMClmb3Iobj10aGlzLlk7Oyl7bGV0IGM9dGhpcy52KG4udSxlKTtpZihjPjApe2lmKG4uVT09PXZvaWQgMCl7bi5VPW5ldyB0aGlzLnJlKGUsciksbi5VLnR0PW4sbj1uLlU7YnJlYWt9bj1uLlU7fWVsc2UgaWYoYzwwKXtpZihuLlc9PT12b2lkIDApe24uVz1uZXcgdGhpcy5yZShlLHIpLG4uVy50dD1uLG49bi5XO2JyZWFrfW49bi5XO31lbHNlIHtuLmw9cjtyZXR1cm59fX19cmV0dXJuIHRoaXMuaSs9MSxufUkoZSxyKXtmb3IoO2U7KXtsZXQgaT10aGlzLnYoZS51LHIpO2lmKGk8MCllPWUuVztlbHNlIGlmKGk+MCllPWUuVTtlbHNlIHJldHVybiBlfXJldHVybiBlfHx0aGlzLmh9Y2xlYXIoKXt0aGlzLmk9MCx0aGlzLlk9dm9pZCAwLHRoaXMuaC50dD12b2lkIDAsdGhpcy5oLlU9dGhpcy5oLlc9dm9pZCAwO311cGRhdGVLZXlCeUl0ZXJhdG9yKGUscil7bGV0IGk9ZS5vO2lmKGk9PT10aGlzLmgmJigwLCBhcC50aHJvd0l0ZXJhdG9yQWNjZXNzRXJyb3IpKCksdGhpcy5pPT09MSlyZXR1cm4gaS51PXIsITA7aWYoaT09PXRoaXMuaC5VKXJldHVybiB0aGlzLnYoaS5CKCkudSxyKT4wPyhpLnU9ciwhMCk6ITE7aWYoaT09PXRoaXMuaC5XKXJldHVybiB0aGlzLnYoaS5MKCkudSxyKTwwPyhpLnU9ciwhMCk6ITE7bGV0IG49aS5MKCkudTtpZih0aGlzLnYobixyKT49MClyZXR1cm4gITE7bGV0IG89aS5CKCkudTtyZXR1cm4gdGhpcy52KG8scik8PTA/ITE6KGkudT1yLCEwKX1lcmFzZUVsZW1lbnRCeVBvcyhlKXtpZihlPDB8fGU+dGhpcy5pLTEpdGhyb3cgbmV3IFJhbmdlRXJyb3I7bGV0IHI9MCxpPXRoaXM7cmV0dXJuIHRoaXMub2UodGhpcy5ZLGZ1bmN0aW9uKG4pe3JldHVybiBlPT09cj8oaS5WKG4pLCEwKToocis9MSwhMSl9KSx0aGlzLml9ZXJhc2VFbGVtZW50QnlLZXkoZSl7aWYodGhpcy5pPT09MClyZXR1cm4gITE7bGV0IHI9dGhpcy5JKHRoaXMuWSxlKTtyZXR1cm4gcj09PXRoaXMuaD8hMToodGhpcy5WKHIpLCEwKX1lcmFzZUVsZW1lbnRCeUl0ZXJhdG9yKGUpe2xldCByPWUubztyPT09dGhpcy5oJiYoMCwgYXAudGhyb3dJdGVyYXRvckFjY2Vzc0Vycm9yKSgpO2xldCBpPXIuVz09PXZvaWQgMDtyZXR1cm4gZS5pdGVyYXRvclR5cGU9PT0wP2kmJmUubmV4dCgpOighaXx8ci5VPT09dm9pZCAwKSYmZS5uZXh0KCksdGhpcy5WKHIpLGV9Zm9yRWFjaChlKXtsZXQgcj0wO2ZvcihsZXQgaSBvZiB0aGlzKWUoaSxyKyssdGhpcyk7fWdldEVsZW1lbnRCeVBvcyhlKXtpZihlPDB8fGU+dGhpcy5pLTEpdGhyb3cgbmV3IFJhbmdlRXJyb3I7bGV0IHIsaT0wO2ZvcihsZXQgbiBvZiB0aGlzKXtpZihpPT09ZSl7cj1uO2JyZWFrfWkrPTE7fXJldHVybiByfWdldEhlaWdodCgpe2lmKHRoaXMuaT09PTApcmV0dXJuIDA7bGV0IGU9ZnVuY3Rpb24ocil7cmV0dXJuIHI/TWF0aC5tYXgoZShyLlUpLGUoci5XKSkrMTowfTtyZXR1cm4gZSh0aGlzLlkpfX0sRjE9X2E7Vm4uZGVmYXVsdD1GMTt9KTt2YXIgRWE9TShLbj0+e3YoKTttKCk7XygpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShLbixcInRcIix7dmFsdWU6ITB9KTtLbi5kZWZhdWx0PXZvaWQgMDt2YXIgVzE9YXQoKSx6bj1sdCgpLHZhPWNsYXNzIGV4dGVuZHMgVzEuQ29udGFpbmVySXRlcmF0b3J7Y29uc3RydWN0b3IoZSxyLGkpe3N1cGVyKGkpLHRoaXMubz1lLHRoaXMuaD1yLHRoaXMuaXRlcmF0b3JUeXBlPT09MD8odGhpcy5wcmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vPT09dGhpcy5oLlUmJigwLCB6bi50aHJvd0l0ZXJhdG9yQWNjZXNzRXJyb3IpKCksdGhpcy5vPXRoaXMuby5MKCksdGhpc30sdGhpcy5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubz09PXRoaXMuaCYmKDAsIHpuLnRocm93SXRlcmF0b3JBY2Nlc3NFcnJvcikoKSx0aGlzLm89dGhpcy5vLkIoKSx0aGlzfSk6KHRoaXMucHJlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubz09PXRoaXMuaC5XJiYoMCwgem4udGhyb3dJdGVyYXRvckFjY2Vzc0Vycm9yKSgpLHRoaXMubz10aGlzLm8uQigpLHRoaXN9LHRoaXMubmV4dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm89PT10aGlzLmgmJigwLCB6bi50aHJvd0l0ZXJhdG9yQWNjZXNzRXJyb3IpKCksdGhpcy5vPXRoaXMuby5MKCksdGhpc30pO31nZXQgaW5kZXgoKXtsZXQgZT10aGlzLm8scj10aGlzLmgudHQ7aWYoZT09PXRoaXMuaClyZXR1cm4gcj9yLnJ0LTE6MDtsZXQgaT0wO2ZvcihlLlUmJihpKz1lLlUucnQpO2UhPT1yOyl7bGV0IG49ZS50dDtlPT09bi5XJiYoaSs9MSxuLlUmJihpKz1uLlUucnQpKSxlPW47fXJldHVybiBpfX0sJDE9dmE7S24uZGVmYXVsdD0kMTt9KTt2YXIgdXA9TShHbj0+e3YoKTttKCk7XygpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShHbixcInRcIix7dmFsdWU6ITB9KTtHbi5kZWZhdWx0PXZvaWQgMDt2YXIgSDE9bHAobWEoKSksVjE9bHAoRWEoKSksejE9bHQoKTtmdW5jdGlvbiBscCh0KXtyZXR1cm4gdCYmdC50P3Q6e2RlZmF1bHQ6dH19dmFyIEtlPWNsYXNzIHQgZXh0ZW5kcyBWMS5kZWZhdWx0e2NvbnN0cnVjdG9yKGUscixpLG4pe3N1cGVyKGUscixuKSx0aGlzLmNvbnRhaW5lcj1pO31nZXQgcG9pbnRlcigpe3JldHVybiB0aGlzLm89PT10aGlzLmgmJigwLCB6MS50aHJvd0l0ZXJhdG9yQWNjZXNzRXJyb3IpKCksdGhpcy5vLnV9Y29weSgpe3JldHVybiBuZXcgdCh0aGlzLm8sdGhpcy5oLHRoaXMuY29udGFpbmVyLHRoaXMuaXRlcmF0b3JUeXBlKX19LFNhPWNsYXNzIGV4dGVuZHMgSDEuZGVmYXVsdHtjb25zdHJ1Y3RvcihlPVtdLHIsaSl7c3VwZXIocixpKTtsZXQgbj10aGlzO2UuZm9yRWFjaChmdW5jdGlvbihvKXtuLmluc2VydChvKTt9KTt9KksoZSl7ZSE9PXZvaWQgMCYmKHlpZWxkKnRoaXMuSyhlLlUpLHlpZWxkIGUudSx5aWVsZCp0aGlzLksoZS5XKSk7fWJlZ2luKCl7cmV0dXJuIG5ldyBLZSh0aGlzLmguVXx8dGhpcy5oLHRoaXMuaCx0aGlzKX1lbmQoKXtyZXR1cm4gbmV3IEtlKHRoaXMuaCx0aGlzLmgsdGhpcyl9ckJlZ2luKCl7cmV0dXJuIG5ldyBLZSh0aGlzLmguV3x8dGhpcy5oLHRoaXMuaCx0aGlzLDEpfXJFbmQoKXtyZXR1cm4gbmV3IEtlKHRoaXMuaCx0aGlzLmgsdGhpcywxKX1mcm9udCgpe3JldHVybiB0aGlzLmguVT90aGlzLmguVS51OnZvaWQgMH1iYWNrKCl7cmV0dXJuIHRoaXMuaC5XP3RoaXMuaC5XLnU6dm9pZCAwfWluc2VydChlLHIpe3JldHVybiB0aGlzLk0oZSx2b2lkIDAscil9ZmluZChlKXtsZXQgcj10aGlzLkkodGhpcy5ZLGUpO3JldHVybiBuZXcgS2Uocix0aGlzLmgsdGhpcyl9bG93ZXJCb3VuZChlKXtsZXQgcj10aGlzLlgodGhpcy5ZLGUpO3JldHVybiBuZXcgS2Uocix0aGlzLmgsdGhpcyl9dXBwZXJCb3VuZChlKXtsZXQgcj10aGlzLloodGhpcy5ZLGUpO3JldHVybiBuZXcgS2Uocix0aGlzLmgsdGhpcyl9cmV2ZXJzZUxvd2VyQm91bmQoZSl7bGV0IHI9dGhpcy4kKHRoaXMuWSxlKTtyZXR1cm4gbmV3IEtlKHIsdGhpcy5oLHRoaXMpfXJldmVyc2VVcHBlckJvdW5kKGUpe2xldCByPXRoaXMucnIodGhpcy5ZLGUpO3JldHVybiBuZXcgS2Uocix0aGlzLmgsdGhpcyl9dW5pb24oZSl7bGV0IHI9dGhpcztyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3IuaW5zZXJ0KGkpO30pLHRoaXMuaX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiB0aGlzLksodGhpcy5ZKX19LEsxPVNhO0duLmRlZmF1bHQ9SzE7fSk7dmFyIGNwPU0oUW49Pnt2KCk7bSgpO18oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoUW4sXCJ0XCIse3ZhbHVlOiEwfSk7UW4uZGVmYXVsdD12b2lkIDA7dmFyIEcxPWZwKG1hKCkpLFExPWZwKEVhKCkpLFkxPWx0KCk7ZnVuY3Rpb24gZnAodCl7cmV0dXJuIHQmJnQudD90OntkZWZhdWx0OnR9fXZhciBHZT1jbGFzcyB0IGV4dGVuZHMgUTEuZGVmYXVsdHtjb25zdHJ1Y3RvcihlLHIsaSxuKXtzdXBlcihlLHIsbiksdGhpcy5jb250YWluZXI9aTt9Z2V0IHBvaW50ZXIoKXt0aGlzLm89PT10aGlzLmgmJigwLCBZMS50aHJvd0l0ZXJhdG9yQWNjZXNzRXJyb3IpKCk7bGV0IGU9dGhpcztyZXR1cm4gbmV3IFByb3h5KFtdLHtnZXQocixpKXtpZihpPT09XCIwXCIpcmV0dXJuIGUuby51O2lmKGk9PT1cIjFcIilyZXR1cm4gZS5vLmx9LHNldChyLGksbil7aWYoaSE9PVwiMVwiKXRocm93IG5ldyBUeXBlRXJyb3IoXCJwcm9wcyBtdXN0IGJlIDFcIik7cmV0dXJuIGUuby5sPW4sITB9fSl9Y29weSgpe3JldHVybiBuZXcgdCh0aGlzLm8sdGhpcy5oLHRoaXMuY29udGFpbmVyLHRoaXMuaXRlcmF0b3JUeXBlKX19LEFhPWNsYXNzIGV4dGVuZHMgRzEuZGVmYXVsdHtjb25zdHJ1Y3RvcihlPVtdLHIsaSl7c3VwZXIocixpKTtsZXQgbj10aGlzO2UuZm9yRWFjaChmdW5jdGlvbihvKXtuLnNldEVsZW1lbnQob1swXSxvWzFdKTt9KTt9KksoZSl7ZSE9PXZvaWQgMCYmKHlpZWxkKnRoaXMuSyhlLlUpLHlpZWxkIFtlLnUsZS5sXSx5aWVsZCp0aGlzLksoZS5XKSk7fWJlZ2luKCl7cmV0dXJuIG5ldyBHZSh0aGlzLmguVXx8dGhpcy5oLHRoaXMuaCx0aGlzKX1lbmQoKXtyZXR1cm4gbmV3IEdlKHRoaXMuaCx0aGlzLmgsdGhpcyl9ckJlZ2luKCl7cmV0dXJuIG5ldyBHZSh0aGlzLmguV3x8dGhpcy5oLHRoaXMuaCx0aGlzLDEpfXJFbmQoKXtyZXR1cm4gbmV3IEdlKHRoaXMuaCx0aGlzLmgsdGhpcywxKX1mcm9udCgpe2lmKHRoaXMuaT09PTApcmV0dXJuO2xldCBlPXRoaXMuaC5VO3JldHVybiBbZS51LGUubF19YmFjaygpe2lmKHRoaXMuaT09PTApcmV0dXJuO2xldCBlPXRoaXMuaC5XO3JldHVybiBbZS51LGUubF19bG93ZXJCb3VuZChlKXtsZXQgcj10aGlzLlgodGhpcy5ZLGUpO3JldHVybiBuZXcgR2Uocix0aGlzLmgsdGhpcyl9dXBwZXJCb3VuZChlKXtsZXQgcj10aGlzLloodGhpcy5ZLGUpO3JldHVybiBuZXcgR2Uocix0aGlzLmgsdGhpcyl9cmV2ZXJzZUxvd2VyQm91bmQoZSl7bGV0IHI9dGhpcy4kKHRoaXMuWSxlKTtyZXR1cm4gbmV3IEdlKHIsdGhpcy5oLHRoaXMpfXJldmVyc2VVcHBlckJvdW5kKGUpe2xldCByPXRoaXMucnIodGhpcy5ZLGUpO3JldHVybiBuZXcgR2Uocix0aGlzLmgsdGhpcyl9c2V0RWxlbWVudChlLHIsaSl7cmV0dXJuIHRoaXMuTShlLHIsaSl9ZmluZChlKXtsZXQgcj10aGlzLkkodGhpcy5ZLGUpO3JldHVybiBuZXcgR2Uocix0aGlzLmgsdGhpcyl9Z2V0RWxlbWVudEJ5S2V5KGUpe3JldHVybiB0aGlzLkkodGhpcy5ZLGUpLmx9dW5pb24oZSl7bGV0IHI9dGhpcztyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3Iuc2V0RWxlbWVudChpWzBdLGlbMV0pO30pLHRoaXMuaX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiB0aGlzLksodGhpcy5ZKX19LEoxPUFhO1FuLmRlZmF1bHQ9SjE7fSk7dmFyIFRhPU0oSWE9Pnt2KCk7bSgpO18oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSWEsXCJ0XCIse3ZhbHVlOiEwfSk7SWEuZGVmYXVsdD1YMTtmdW5jdGlvbiBYMSh0KXtsZXQgZT10eXBlb2YgdDtyZXR1cm4gZT09PVwib2JqZWN0XCImJnQhPT1udWxsfHxlPT09XCJmdW5jdGlvblwifX0pO3ZhciBQYT1NKGVpPT57digpO20oKTtfKCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGVpLFwidFwiLHt2YWx1ZTohMH0pO2VpLkhhc2hDb250YWluZXJJdGVyYXRvcj1laS5IYXNoQ29udGFpbmVyPXZvaWQgMDt2YXIgaHA9YXQoKSxSYT1aMShUYSgpKSxUaT1sdCgpO2Z1bmN0aW9uIFoxKHQpe3JldHVybiB0JiZ0LnQ/dDp7ZGVmYXVsdDp0fX12YXIgQ2E9Y2xhc3MgZXh0ZW5kcyBocC5Db250YWluZXJJdGVyYXRvcntjb25zdHJ1Y3RvcihlLHIsaSl7c3VwZXIoaSksdGhpcy5vPWUsdGhpcy5oPXIsdGhpcy5pdGVyYXRvclR5cGU9PT0wPyh0aGlzLnByZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm8uTD09PXRoaXMuaCYmKDAsIFRpLnRocm93SXRlcmF0b3JBY2Nlc3NFcnJvcikoKSx0aGlzLm89dGhpcy5vLkwsdGhpc30sdGhpcy5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubz09PXRoaXMuaCYmKDAsIFRpLnRocm93SXRlcmF0b3JBY2Nlc3NFcnJvcikoKSx0aGlzLm89dGhpcy5vLkIsdGhpc30pOih0aGlzLnByZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm8uQj09PXRoaXMuaCYmKDAsIFRpLnRocm93SXRlcmF0b3JBY2Nlc3NFcnJvcikoKSx0aGlzLm89dGhpcy5vLkIsdGhpc30sdGhpcy5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubz09PXRoaXMuaCYmKDAsIFRpLnRocm93SXRlcmF0b3JBY2Nlc3NFcnJvcikoKSx0aGlzLm89dGhpcy5vLkwsdGhpc30pO319O2VpLkhhc2hDb250YWluZXJJdGVyYXRvcj1DYTt2YXIgQmE9Y2xhc3MgZXh0ZW5kcyBocC5Db250YWluZXJ7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuSD1bXSx0aGlzLmc9e30sdGhpcy5IQVNIX1RBRz1TeW1ib2woXCJAQEhBU0hfVEFHXCIpLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLmcsbnVsbCksdGhpcy5oPXt9LHRoaXMuaC5MPXRoaXMuaC5CPXRoaXMucD10aGlzLl89dGhpcy5oO31WKGUpe2xldHtMOnIsQjppfT1lO3IuQj1pLGkuTD1yLGU9PT10aGlzLnAmJih0aGlzLnA9aSksZT09PXRoaXMuXyYmKHRoaXMuXz1yKSx0aGlzLmktPTE7fU0oZSxyLGkpe2k9PT12b2lkIDAmJihpPSgwLCBSYS5kZWZhdWx0KShlKSk7bGV0IG47aWYoaSl7bGV0IG89ZVt0aGlzLkhBU0hfVEFHXTtpZihvIT09dm9pZCAwKXJldHVybiB0aGlzLkhbb10ubD1yLHRoaXMuaTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0aGlzLkhBU0hfVEFHLHt2YWx1ZTp0aGlzLkgubGVuZ3RoLGNvbmZpZ3VyYWJsZTohMH0pLG49e3U6ZSxsOnIsTDp0aGlzLl8sQjp0aGlzLmh9LHRoaXMuSC5wdXNoKG4pO31lbHNlIHtsZXQgbz10aGlzLmdbZV07aWYobylyZXR1cm4gby5sPXIsdGhpcy5pO249e3U6ZSxsOnIsTDp0aGlzLl8sQjp0aGlzLmh9LHRoaXMuZ1tlXT1uO31yZXR1cm4gdGhpcy5pPT09MD8odGhpcy5wPW4sdGhpcy5oLkI9bik6dGhpcy5fLkI9bix0aGlzLl89bix0aGlzLmguTD1uLCsrdGhpcy5pfUkoZSxyKXtpZihyPT09dm9pZCAwJiYocj0oMCwgUmEuZGVmYXVsdCkoZSkpLHIpe2xldCBpPWVbdGhpcy5IQVNIX1RBR107cmV0dXJuIGk9PT12b2lkIDA/dGhpcy5oOnRoaXMuSFtpXX1lbHNlIHJldHVybiB0aGlzLmdbZV18fHRoaXMuaH1jbGVhcigpe2xldCBlPXRoaXMuSEFTSF9UQUc7dGhpcy5ILmZvckVhY2goZnVuY3Rpb24ocil7ZGVsZXRlIHIudVtlXTt9KSx0aGlzLkg9W10sdGhpcy5nPXt9LE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLmcsbnVsbCksdGhpcy5pPTAsdGhpcy5wPXRoaXMuXz10aGlzLmguTD10aGlzLmguQj10aGlzLmg7fWVyYXNlRWxlbWVudEJ5S2V5KGUscil7bGV0IGk7aWYocj09PXZvaWQgMCYmKHI9KDAsIFJhLmRlZmF1bHQpKGUpKSxyKXtsZXQgbj1lW3RoaXMuSEFTSF9UQUddO2lmKG49PT12b2lkIDApcmV0dXJuICExO2RlbGV0ZSBlW3RoaXMuSEFTSF9UQUddLGk9dGhpcy5IW25dLGRlbGV0ZSB0aGlzLkhbbl07fWVsc2Uge2lmKGk9dGhpcy5nW2VdLGk9PT12b2lkIDApcmV0dXJuICExO2RlbGV0ZSB0aGlzLmdbZV07fXJldHVybiB0aGlzLlYoaSksITB9ZXJhc2VFbGVtZW50QnlJdGVyYXRvcihlKXtsZXQgcj1lLm87cmV0dXJuIHI9PT10aGlzLmgmJigwLCBUaS50aHJvd0l0ZXJhdG9yQWNjZXNzRXJyb3IpKCksdGhpcy5WKHIpLGUubmV4dCgpfWVyYXNlRWxlbWVudEJ5UG9zKGUpe2lmKGU8MHx8ZT50aGlzLmktMSl0aHJvdyBuZXcgUmFuZ2VFcnJvcjtsZXQgcj10aGlzLnA7Zm9yKDtlLS07KXI9ci5CO3JldHVybiB0aGlzLlYociksdGhpcy5pfX07ZWkuSGFzaENvbnRhaW5lcj1CYTt9KTt2YXIgcHA9TShZbj0+e3YoKTttKCk7XygpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShZbixcInRcIix7dmFsdWU6ITB9KTtZbi5kZWZhdWx0PXZvaWQgMDt2YXIgZHA9UGEoKSxldj1sdCgpLEVyPWNsYXNzIHQgZXh0ZW5kcyBkcC5IYXNoQ29udGFpbmVySXRlcmF0b3J7Y29uc3RydWN0b3IoZSxyLGksbil7c3VwZXIoZSxyLG4pLHRoaXMuY29udGFpbmVyPWk7fWdldCBwb2ludGVyKCl7cmV0dXJuIHRoaXMubz09PXRoaXMuaCYmKDAsIGV2LnRocm93SXRlcmF0b3JBY2Nlc3NFcnJvcikoKSx0aGlzLm8udX1jb3B5KCl7cmV0dXJuIG5ldyB0KHRoaXMubyx0aGlzLmgsdGhpcy5jb250YWluZXIsdGhpcy5pdGVyYXRvclR5cGUpfX0sT2E9Y2xhc3MgZXh0ZW5kcyBkcC5IYXNoQ29udGFpbmVye2NvbnN0cnVjdG9yKGU9W10pe3N1cGVyKCk7bGV0IHI9dGhpcztlLmZvckVhY2goZnVuY3Rpb24oaSl7ci5pbnNlcnQoaSk7fSk7fWJlZ2luKCl7cmV0dXJuIG5ldyBFcih0aGlzLnAsdGhpcy5oLHRoaXMpfWVuZCgpe3JldHVybiBuZXcgRXIodGhpcy5oLHRoaXMuaCx0aGlzKX1yQmVnaW4oKXtyZXR1cm4gbmV3IEVyKHRoaXMuXyx0aGlzLmgsdGhpcywxKX1yRW5kKCl7cmV0dXJuIG5ldyBFcih0aGlzLmgsdGhpcy5oLHRoaXMsMSl9ZnJvbnQoKXtyZXR1cm4gdGhpcy5wLnV9YmFjaygpe3JldHVybiB0aGlzLl8udX1pbnNlcnQoZSxyKXtyZXR1cm4gdGhpcy5NKGUsdm9pZCAwLHIpfWdldEVsZW1lbnRCeVBvcyhlKXtpZihlPDB8fGU+dGhpcy5pLTEpdGhyb3cgbmV3IFJhbmdlRXJyb3I7bGV0IHI9dGhpcy5wO2Zvcig7ZS0tOylyPXIuQjtyZXR1cm4gci51fWZpbmQoZSxyKXtsZXQgaT10aGlzLkkoZSxyKTtyZXR1cm4gbmV3IEVyKGksdGhpcy5oLHRoaXMpfWZvckVhY2goZSl7bGV0IHI9MCxpPXRoaXMucDtmb3IoO2khPT10aGlzLmg7KWUoaS51LHIrKyx0aGlzKSxpPWkuQjt9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gZnVuY3Rpb24qKCl7bGV0IGU9dGhpcy5wO2Zvcig7ZSE9PXRoaXMuaDspeWllbGQgZS51LGU9ZS5CO30uYmluZCh0aGlzKSgpfX0sdHY9T2E7WW4uZGVmYXVsdD10djt9KTt2YXIgeXA9TShKbj0+e3YoKTttKCk7XygpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKbixcInRcIix7dmFsdWU6ITB9KTtKbi5kZWZhdWx0PXZvaWQgMDt2YXIgZ3A9UGEoKSxydj1udihUYSgpKSxpdj1sdCgpO2Z1bmN0aW9uIG52KHQpe3JldHVybiB0JiZ0LnQ/dDp7ZGVmYXVsdDp0fX12YXIgU3I9Y2xhc3MgdCBleHRlbmRzIGdwLkhhc2hDb250YWluZXJJdGVyYXRvcntjb25zdHJ1Y3RvcihlLHIsaSxuKXtzdXBlcihlLHIsbiksdGhpcy5jb250YWluZXI9aTt9Z2V0IHBvaW50ZXIoKXt0aGlzLm89PT10aGlzLmgmJigwLCBpdi50aHJvd0l0ZXJhdG9yQWNjZXNzRXJyb3IpKCk7bGV0IGU9dGhpcztyZXR1cm4gbmV3IFByb3h5KFtdLHtnZXQocixpKXtpZihpPT09XCIwXCIpcmV0dXJuIGUuby51O2lmKGk9PT1cIjFcIilyZXR1cm4gZS5vLmx9LHNldChyLGksbil7aWYoaSE9PVwiMVwiKXRocm93IG5ldyBUeXBlRXJyb3IoXCJwcm9wcyBtdXN0IGJlIDFcIik7cmV0dXJuIGUuby5sPW4sITB9fSl9Y29weSgpe3JldHVybiBuZXcgdCh0aGlzLm8sdGhpcy5oLHRoaXMuY29udGFpbmVyLHRoaXMuaXRlcmF0b3JUeXBlKX19LGthPWNsYXNzIGV4dGVuZHMgZ3AuSGFzaENvbnRhaW5lcntjb25zdHJ1Y3RvcihlPVtdKXtzdXBlcigpO2xldCByPXRoaXM7ZS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3Iuc2V0RWxlbWVudChpWzBdLGlbMV0pO30pO31iZWdpbigpe3JldHVybiBuZXcgU3IodGhpcy5wLHRoaXMuaCx0aGlzKX1lbmQoKXtyZXR1cm4gbmV3IFNyKHRoaXMuaCx0aGlzLmgsdGhpcyl9ckJlZ2luKCl7cmV0dXJuIG5ldyBTcih0aGlzLl8sdGhpcy5oLHRoaXMsMSl9ckVuZCgpe3JldHVybiBuZXcgU3IodGhpcy5oLHRoaXMuaCx0aGlzLDEpfWZyb250KCl7aWYodGhpcy5pIT09MClyZXR1cm4gW3RoaXMucC51LHRoaXMucC5sXX1iYWNrKCl7aWYodGhpcy5pIT09MClyZXR1cm4gW3RoaXMuXy51LHRoaXMuXy5sXX1zZXRFbGVtZW50KGUscixpKXtyZXR1cm4gdGhpcy5NKGUscixpKX1nZXRFbGVtZW50QnlLZXkoZSxyKXtpZihyPT09dm9pZCAwJiYocj0oMCwgcnYuZGVmYXVsdCkoZSkpLHIpe2xldCBuPWVbdGhpcy5IQVNIX1RBR107cmV0dXJuIG4hPT12b2lkIDA/dGhpcy5IW25dLmw6dm9pZCAwfWxldCBpPXRoaXMuZ1tlXTtyZXR1cm4gaT9pLmw6dm9pZCAwfWdldEVsZW1lbnRCeVBvcyhlKXtpZihlPDB8fGU+dGhpcy5pLTEpdGhyb3cgbmV3IFJhbmdlRXJyb3I7bGV0IHI9dGhpcy5wO2Zvcig7ZS0tOylyPXIuQjtyZXR1cm4gW3IudSxyLmxdfWZpbmQoZSxyKXtsZXQgaT10aGlzLkkoZSxyKTtyZXR1cm4gbmV3IFNyKGksdGhpcy5oLHRoaXMpfWZvckVhY2goZSl7bGV0IHI9MCxpPXRoaXMucDtmb3IoO2khPT10aGlzLmg7KWUoW2kudSxpLmxdLHIrKyx0aGlzKSxpPWkuQjt9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gZnVuY3Rpb24qKCl7bGV0IGU9dGhpcy5wO2Zvcig7ZSE9PXRoaXMuaDspeWllbGQgW2UudSxlLmxdLGU9ZS5CO30uYmluZCh0aGlzKSgpfX0sc3Y9a2E7Sm4uZGVmYXVsdD1zdjt9KTt2YXIgYnA9TShqZT0+e3YoKTttKCk7XygpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqZSxcInRcIix7dmFsdWU6ITB9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoamUsXCJEZXF1ZVwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBjdi5kZWZhdWx0fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqZSxcIkhhc2hNYXBcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZ3YuZGVmYXVsdH19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoamUsXCJIYXNoU2V0XCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHB2LmRlZmF1bHR9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGplLFwiTGlua0xpc3RcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZnYuZGVmYXVsdH19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoamUsXCJPcmRlcmVkTWFwXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGR2LmRlZmF1bHR9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGplLFwiT3JkZXJlZFNldFwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBodi5kZWZhdWx0fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqZSxcIlByaW9yaXR5UXVldWVcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbHYuZGVmYXVsdH19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoamUsXCJRdWV1ZVwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhdi5kZWZhdWx0fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqZSxcIlN0YWNrXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG92LmRlZmF1bHR9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGplLFwiVmVjdG9yXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHV2LmRlZmF1bHR9fSk7dmFyIG92PXV0KFpkKCkpLGF2PXV0KGVwKCkpLGx2PXV0KHRwKCkpLHV2PXV0KHJwKCkpLGZ2PXV0KGlwKCkpLGN2PXV0KG5wKCkpLGh2PXV0KHVwKCkpLGR2PXV0KGNwKCkpLHB2PXV0KHBwKCkpLGd2PXV0KHlwKCkpO2Z1bmN0aW9uIHV0KHQpe3JldHVybiB0JiZ0LnQ/dDp7ZGVmYXVsdDp0fX19KTt2YXIgX3A9TSgobU4sd3ApPT57digpO20oKTtfKCk7dmFyIHl2PWJwKCkuT3JkZXJlZFNldCxmdD1vdCgpKFwibnVtYmVyLWFsbG9jYXRvcjp0cmFjZVwiKSxidj1vdCgpKFwibnVtYmVyLWFsbG9jYXRvcjplcnJvclwiKTtmdW5jdGlvbiBUZSh0LGUpe3RoaXMubG93PXQsdGhpcy5oaWdoPWU7fVRlLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubG93PT09dC5sb3cmJnRoaXMuaGlnaD09PXQuaGlnaH07VGUucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubG93PHQubG93JiZ0aGlzLmhpZ2g8dC5sb3c/LTE6dC5sb3c8dGhpcy5sb3cmJnQuaGlnaDx0aGlzLmxvdz8xOjB9O2Z1bmN0aW9uIGN0KHQsZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgY3QpKXJldHVybiBuZXcgY3QodCxlKTt0aGlzLm1pbj10LHRoaXMubWF4PWUsdGhpcy5zcz1uZXcgeXYoW10sKHIsaSk9PnIuY29tcGFyZShpKSksZnQoXCJDcmVhdGVcIiksdGhpcy5jbGVhcigpO31jdC5wcm90b3R5cGUuZmlyc3RWYWNhbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zcy5zaXplKCk9PT0wP251bGw6dGhpcy5zcy5mcm9udCgpLmxvd307Y3QucHJvdG90eXBlLmFsbG9jPWZ1bmN0aW9uKCl7aWYodGhpcy5zcy5zaXplKCk9PT0wKXJldHVybiBmdChcImFsbG9jKCk6ZW1wdHlcIiksbnVsbDtsZXQgdD10aGlzLnNzLmJlZ2luKCksZT10LnBvaW50ZXIubG93LHI9dC5wb2ludGVyLmhpZ2gsaT1lO3JldHVybiBpKzE8PXI/dGhpcy5zcy51cGRhdGVLZXlCeUl0ZXJhdG9yKHQsbmV3IFRlKGUrMSxyKSk6dGhpcy5zcy5lcmFzZUVsZW1lbnRCeVBvcygwKSxmdChcImFsbG9jKCk6XCIraSksaX07Y3QucHJvdG90eXBlLnVzZT1mdW5jdGlvbih0KXtsZXQgZT1uZXcgVGUodCx0KSxyPXRoaXMuc3MubG93ZXJCb3VuZChlKTtpZighci5lcXVhbHModGhpcy5zcy5lbmQoKSkpe2xldCBpPXIucG9pbnRlci5sb3csbj1yLnBvaW50ZXIuaGlnaDtyZXR1cm4gci5wb2ludGVyLmVxdWFscyhlKT8odGhpcy5zcy5lcmFzZUVsZW1lbnRCeUl0ZXJhdG9yKHIpLGZ0KFwidXNlKCk6XCIrdCksITApOmk+dD8hMTppPT09dD8odGhpcy5zcy51cGRhdGVLZXlCeUl0ZXJhdG9yKHIsbmV3IFRlKGkrMSxuKSksZnQoXCJ1c2UoKTpcIit0KSwhMCk6bj09PXQ/KHRoaXMuc3MudXBkYXRlS2V5QnlJdGVyYXRvcihyLG5ldyBUZShpLG4tMSkpLGZ0KFwidXNlKCk6XCIrdCksITApOih0aGlzLnNzLnVwZGF0ZUtleUJ5SXRlcmF0b3IocixuZXcgVGUodCsxLG4pKSx0aGlzLnNzLmluc2VydChuZXcgVGUoaSx0LTEpKSxmdChcInVzZSgpOlwiK3QpLCEwKX1yZXR1cm4gZnQoXCJ1c2UoKTpmYWlsZWRcIiksITF9O2N0LnByb3RvdHlwZS5mcmVlPWZ1bmN0aW9uKHQpe2lmKHQ8dGhpcy5taW58fHQ+dGhpcy5tYXgpe2J2KFwiZnJlZSgpOlwiK3QrXCIgaXMgb3V0IG9mIHJhbmdlXCIpO3JldHVybn1sZXQgZT1uZXcgVGUodCx0KSxyPXRoaXMuc3MudXBwZXJCb3VuZChlKTtpZihyLmVxdWFscyh0aGlzLnNzLmVuZCgpKSl7aWYoci5lcXVhbHModGhpcy5zcy5iZWdpbigpKSl7dGhpcy5zcy5pbnNlcnQoZSk7cmV0dXJufXIucHJlKCk7bGV0IGk9ci5wb2ludGVyLmhpZ2g7ci5wb2ludGVyLmhpZ2grMT09PXQ/dGhpcy5zcy51cGRhdGVLZXlCeUl0ZXJhdG9yKHIsbmV3IFRlKGksdCkpOnRoaXMuc3MuaW5zZXJ0KGUpO31lbHNlIGlmKHIuZXF1YWxzKHRoaXMuc3MuYmVnaW4oKSkpaWYodCsxPT09ci5wb2ludGVyLmxvdyl7bGV0IGk9ci5wb2ludGVyLmhpZ2g7dGhpcy5zcy51cGRhdGVLZXlCeUl0ZXJhdG9yKHIsbmV3IFRlKHQsaSkpO31lbHNlIHRoaXMuc3MuaW5zZXJ0KGUpO2Vsc2Uge2xldCBpPXIucG9pbnRlci5sb3csbj1yLnBvaW50ZXIuaGlnaDtyLnByZSgpO2xldCBvPXIucG9pbnRlci5sb3c7ci5wb2ludGVyLmhpZ2grMT09PXQ/dCsxPT09aT8odGhpcy5zcy5lcmFzZUVsZW1lbnRCeUl0ZXJhdG9yKHIpLHRoaXMuc3MudXBkYXRlS2V5QnlJdGVyYXRvcihyLG5ldyBUZShvLG4pKSk6dGhpcy5zcy51cGRhdGVLZXlCeUl0ZXJhdG9yKHIsbmV3IFRlKG8sdCkpOnQrMT09PWk/KHRoaXMuc3MuZXJhc2VFbGVtZW50QnlJdGVyYXRvcihyLm5leHQoKSksdGhpcy5zcy5pbnNlcnQobmV3IFRlKHQsbikpKTp0aGlzLnNzLmluc2VydChlKTt9ZnQoXCJmcmVlKCk6XCIrdCk7fTtjdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtmdChcImNsZWFyKClcIiksdGhpcy5zcy5jbGVhcigpLHRoaXMuc3MuaW5zZXJ0KG5ldyBUZSh0aGlzLm1pbix0aGlzLm1heCkpO307Y3QucHJvdG90eXBlLmludGVydmFsQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zcy5zaXplKCl9O2N0LnByb3RvdHlwZS5kdW1wPWZ1bmN0aW9uKCl7Y29uc29sZS5sb2coXCJsZW5ndGg6XCIrdGhpcy5zcy5zaXplKCkpO2ZvcihsZXQgdCBvZiB0aGlzLnNzKWNvbnNvbGUubG9nKHQpO307d3AuZXhwb3J0cz1jdDt9KTt2YXIgeGE9TSgoUE4sbXApPT57digpO20oKTtfKCk7dmFyIHd2PV9wKCk7bXAuZXhwb3J0cy5OdW1iZXJBbGxvY2F0b3I9d3Y7fSk7dmFyIHZwPU0oTGE9Pnt2KCk7bSgpO18oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTGEsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIF92PVhkKCksbXY9eGEoKSxNYT1jbGFzc3tjb25zdHJ1Y3RvcihlKXtlPjAmJih0aGlzLmFsaWFzVG9Ub3BpYz1uZXcgX3YuTFJVQ2FjaGUoe21heDplfSksdGhpcy50b3BpY1RvQWxpYXM9e30sdGhpcy5udW1iZXJBbGxvY2F0b3I9bmV3IG12Lk51bWJlckFsbG9jYXRvcigxLGUpLHRoaXMubWF4PWUsdGhpcy5sZW5ndGg9MCk7fXB1dChlLHIpe2lmKHI9PT0wfHxyPnRoaXMubWF4KXJldHVybiAhMTtsZXQgaT10aGlzLmFsaWFzVG9Ub3BpYy5nZXQocik7cmV0dXJuIGkmJmRlbGV0ZSB0aGlzLnRvcGljVG9BbGlhc1tpXSx0aGlzLmFsaWFzVG9Ub3BpYy5zZXQocixlKSx0aGlzLnRvcGljVG9BbGlhc1tlXT1yLHRoaXMubnVtYmVyQWxsb2NhdG9yLnVzZShyKSx0aGlzLmxlbmd0aD10aGlzLmFsaWFzVG9Ub3BpYy5zaXplLCEwfWdldFRvcGljQnlBbGlhcyhlKXtyZXR1cm4gdGhpcy5hbGlhc1RvVG9waWMuZ2V0KGUpfWdldEFsaWFzQnlUb3BpYyhlKXtsZXQgcj10aGlzLnRvcGljVG9BbGlhc1tlXTtyZXR1cm4gdHlwZW9mIHI8XCJ1XCImJnRoaXMuYWxpYXNUb1RvcGljLmdldChyKSxyfWNsZWFyKCl7dGhpcy5hbGlhc1RvVG9waWMuY2xlYXIoKSx0aGlzLnRvcGljVG9BbGlhcz17fSx0aGlzLm51bWJlckFsbG9jYXRvci5jbGVhcigpLHRoaXMubGVuZ3RoPTA7fWdldExydUFsaWFzKCl7bGV0IGU9dGhpcy5udW1iZXJBbGxvY2F0b3IuZmlyc3RWYWNhbnQoKTtyZXR1cm4gZXx8Wy4uLnRoaXMuYWxpYXNUb1RvcGljLmtleXMoKV1bdGhpcy5hbGlhc1RvVG9waWMuc2l6ZS0xXX19O0xhLmRlZmF1bHQ9TWE7fSk7dmFyIEVwPU0oUmk9Pnt2KCk7bSgpO18oKTt2YXIgdnY9UmkmJlJpLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuX19lc01vZHVsZT90OntkZWZhdWx0OnR9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoUmksXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIEV2PUFpKCksU3Y9dnYodnAoKSksQXY9SnIoKSxJdj0odCxlKT0+e3QubG9nKFwiX2hhbmRsZUNvbm5hY2tcIik7bGV0e29wdGlvbnM6cn09dCxuPXIucHJvdG9jb2xWZXJzaW9uPT09NT9lLnJlYXNvbkNvZGU6ZS5yZXR1cm5Db2RlO2lmKGNsZWFyVGltZW91dCh0LmNvbm5hY2tUaW1lciksZGVsZXRlIHQudG9waWNBbGlhc1NlbmQsZS5wcm9wZXJ0aWVzKXtpZihlLnByb3BlcnRpZXMudG9waWNBbGlhc01heGltdW0pe2lmKGUucHJvcGVydGllcy50b3BpY0FsaWFzTWF4aW11bT42NTUzNSl7dC5lbWl0KFwiZXJyb3JcIixuZXcgRXJyb3IoXCJ0b3BpY0FsaWFzTWF4aW11bSBmcm9tIGJyb2tlciBpcyBvdXQgb2YgcmFuZ2VcIikpO3JldHVybn1lLnByb3BlcnRpZXMudG9waWNBbGlhc01heGltdW0+MCYmKHQudG9waWNBbGlhc1NlbmQ9bmV3IFN2LmRlZmF1bHQoZS5wcm9wZXJ0aWVzLnRvcGljQWxpYXNNYXhpbXVtKSk7fWUucHJvcGVydGllcy5zZXJ2ZXJLZWVwQWxpdmUmJnIua2VlcGFsaXZlJiYoci5rZWVwYWxpdmU9ZS5wcm9wZXJ0aWVzLnNlcnZlcktlZXBBbGl2ZSx0Ll9zaGlmdFBpbmdJbnRlcnZhbCgpKSxlLnByb3BlcnRpZXMubWF4aW11bVBhY2tldFNpemUmJihyLnByb3BlcnRpZXN8fChyLnByb3BlcnRpZXM9e30pLHIucHJvcGVydGllcy5tYXhpbXVtUGFja2V0U2l6ZT1lLnByb3BlcnRpZXMubWF4aW11bVBhY2tldFNpemUpO31pZihuPT09MCl0LnJlY29ubmVjdGluZz0hMSx0Ll9vbkNvbm5lY3QoZSk7ZWxzZSBpZihuPjApe2xldCBvPW5ldyBBdi5FcnJvcldpdGhSZWFzb25Db2RlKGBDb25uZWN0aW9uIHJlZnVzZWQ6ICR7RXYuUmVhc29uQ29kZXNbbl19YCxuKTt0LmVtaXQoXCJlcnJvclwiLG8pO319O1JpLmRlZmF1bHQ9SXY7fSk7dmFyIFNwPU0oVWE9Pnt2KCk7bSgpO18oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVWEsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIFR2PSh0LGUscik9Pnt0LmxvZyhcImhhbmRsaW5nIHB1YnJlbCBwYWNrZXRcIik7bGV0IGk9dHlwZW9mIHI8XCJ1XCI/cjp0Lm5vb3Ase21lc3NhZ2VJZDpufT1lLG89e2NtZDpcInB1YmNvbXBcIixtZXNzYWdlSWQ6bn07dC5pbmNvbWluZ1N0b3JlLmdldChlLChzLGEpPT57cz90Ll9zZW5kUGFja2V0KG8saSk6KHQuZW1pdChcIm1lc3NhZ2VcIixhLnRvcGljLGEucGF5bG9hZCxhKSx0LmhhbmRsZU1lc3NhZ2UoYSx1PT57aWYodSlyZXR1cm4gaSh1KTt0LmluY29taW5nU3RvcmUuZGVsKGEsdC5ub29wKSx0Ll9zZW5kUGFja2V0KG8saSk7fSkpO30pO307VWEuZGVmYXVsdD1Udjt9KTt2YXIgQXA9TShDaT0+e3YoKTttKCk7XygpO3ZhciBCaT1DaSYmQ2kuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlP3Q6e2RlZmF1bHQ6dH19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShDaSxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgUnY9QmkoVmQoKSksQ3Y9QmkoS2QoKSksQnY9QmkoRXAoKSksUHY9QmkoQWkoKSksT3Y9QmkoU3AoKSksa3Y9KHQsZSxyKT0+e2xldHtvcHRpb25zOml9PXQ7aWYoaS5wcm90b2NvbFZlcnNpb249PT01JiZpLnByb3BlcnRpZXMmJmkucHJvcGVydGllcy5tYXhpbXVtUGFja2V0U2l6ZSYmaS5wcm9wZXJ0aWVzLm1heGltdW1QYWNrZXRTaXplPGUubGVuZ3RoKXJldHVybiB0LmVtaXQoXCJlcnJvclwiLG5ldyBFcnJvcihgZXhjZWVkaW5nIHBhY2tldHMgc2l6ZSAke2UuY21kfWApKSx0LmVuZCh7cmVhc29uQ29kZToxNDkscHJvcGVydGllczp7cmVhc29uU3RyaW5nOlwiTWF4aW11bSBwYWNrZXQgc2l6ZSB3YXMgZXhjZWVkZWRcIn19KSx0O3N3aXRjaCh0LmxvZyhcIl9oYW5kbGVQYWNrZXQgOjogZW1pdHRpbmcgcGFja2V0cmVjZWl2ZVwiKSx0LmVtaXQoXCJwYWNrZXRyZWNlaXZlXCIsZSksZS5jbWQpe2Nhc2VcInB1Ymxpc2hcIjooMCwgUnYuZGVmYXVsdCkodCxlLHIpO2JyZWFrO2Nhc2VcInB1YmFja1wiOmNhc2VcInB1YnJlY1wiOmNhc2VcInB1YmNvbXBcIjpjYXNlXCJzdWJhY2tcIjpjYXNlXCJ1bnN1YmFja1wiOigwLCBQdi5kZWZhdWx0KSh0LGUpLHIoKTticmVhaztjYXNlXCJwdWJyZWxcIjooMCwgT3YuZGVmYXVsdCkodCxlLHIpO2JyZWFrO2Nhc2VcImNvbm5hY2tcIjooMCwgQnYuZGVmYXVsdCkodCxlKSxyKCk7YnJlYWs7Y2FzZVwiYXV0aFwiOigwLCBDdi5kZWZhdWx0KSh0LGUpLHIoKTticmVhaztjYXNlXCJwaW5ncmVzcFwiOnQucGluZ1Jlc3A9ITAscigpO2JyZWFrO2Nhc2VcImRpc2Nvbm5lY3RcIjp0LmVtaXQoXCJkaXNjb25uZWN0XCIsZSkscigpO2JyZWFrO2RlZmF1bHQ6dC5sb2coXCJfaGFuZGxlUGFja2V0IDo6IHVua25vd24gY29tbWFuZFwiKSxyKCk7YnJlYWt9fTtDaS5kZWZhdWx0PWt2O30pO3ZhciBJcD1NKHRpPT57digpO20oKTtfKCk7dmFyIHh2PXRpJiZ0aS5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7ZGVmYXVsdDp0fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHRpLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3RpLlR5cGVkRXZlbnRFbWl0dGVyPXZvaWQgMDt2YXIgTXY9eHYoKGlyKCksWChycikpKSxMdj1KcigpLFhuPWNsYXNze307dGkuVHlwZWRFdmVudEVtaXR0ZXI9WG47KDAsIEx2LmFwcGx5TWl4aW4pKFhuLE12LmRlZmF1bHQpO30pO3ZhciBQaT1NKEFyPT57digpO20oKTtfKCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KEFyLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO0FyLmlzUmVhY3ROYXRpdmVCcm93c2VyPUFyLmlzV2ViV29ya2VyPXZvaWQgMDt2YXIgVXY9KCk9PnR5cGVvZiB3aW5kb3c8XCJ1XCImJnR5cGVvZiB3aW5kb3cuZG9jdW1lbnQ8XCJ1XCIsVHA9KCk9Pnt2YXIgdCxlO3JldHVybiAhISh0eXBlb2Ygc2VsZj09XCJvYmplY3RcIiYmKCEoKGU9KHQ9c2VsZj8uY29uc3RydWN0b3IpPT09bnVsbHx8dD09PXZvaWQgMD92b2lkIDA6dC5uYW1lKT09PW51bGx8fGU9PT12b2lkIDApJiZlLmluY2x1ZGVzKFwiV29ya2VyR2xvYmFsU2NvcGVcIikpKX0sUnA9KCk9PnR5cGVvZiBCPFwidVwiJiZCLnByb2R1Y3Q9PT1cIlJlYWN0TmF0aXZlXCIsTnY9VXYoKXx8VHAoKXx8UnAoKTtBci5pc1dlYldvcmtlcj1UcCgpO0FyLmlzUmVhY3ROYXRpdmVCcm93c2VyPVJwKCk7QXIuZGVmYXVsdD1Odjt9KTt2YXIgQnA9TSgoWm4sQ3ApPT57digpO20oKTtfKCk7KGZ1bmN0aW9uKHQsZSl7dHlwZW9mIFpuPT1cIm9iamVjdFwiJiZ0eXBlb2YgQ3A8XCJ1XCI/ZShabik6dHlwZW9mIGRlZmluZT09XCJmdW5jdGlvblwiJiZkZWZpbmUuYW1kP2RlZmluZShbXCJleHBvcnRzXCJdLGUpOih0PXR5cGVvZiBnbG9iYWxUaGlzPFwidVwiP2dsb2JhbFRoaXM6dHx8c2VsZixlKHQuZmFzdFVuaXF1ZU51bWJlcnM9e30pKTt9KShabixmdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbihnKXtyZXR1cm4gZnVuY3Rpb24oeSl7dmFyIHc9Zyh5KTtyZXR1cm4geS5hZGQodyksd319LHI9ZnVuY3Rpb24oZyl7cmV0dXJuIGZ1bmN0aW9uKHksdyl7cmV0dXJuIGcuc2V0KHksdyksd319LGk9TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI9PT12b2lkIDA/OTAwNzE5OTI1NDc0MDk5MTpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixuPTUzNjg3MDkxMixvPW4qMixzPWZ1bmN0aW9uKGcseSl7cmV0dXJuIGZ1bmN0aW9uKHcpe3ZhciBFPXkuZ2V0KHcpLFM9RT09PXZvaWQgMD93LnNpemU6RTxvP0UrMTowO2lmKCF3LmhhcyhTKSlyZXR1cm4gZyh3LFMpO2lmKHcuc2l6ZTxuKXtmb3IoO3cuaGFzKFMpOylTPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpvKTtyZXR1cm4gZyh3LFMpfWlmKHcuc2l6ZT5pKXRocm93IG5ldyBFcnJvcihcIkNvbmdyYXR1bGF0aW9ucywgeW91IGNyZWF0ZWQgYSBjb2xsZWN0aW9uIG9mIHVuaXF1ZSBudW1iZXJzIHdoaWNoIHVzZXMgYWxsIGF2YWlsYWJsZSBpbnRlZ2VycyFcIik7Zm9yKDt3LmhhcyhTKTspUz1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqaSk7cmV0dXJuIGcodyxTKX19LGE9bmV3IFdlYWtNYXAsdT1yKGEpLGM9cyh1LGEpLGg9ZShjKTt0LmFkZFVuaXF1ZU51bWJlcj1oLHQuZ2VuZXJhdGVVbmlxdWVOdW1iZXI9Yzt9KTt9KTt2YXIgT3A9TSgoZXMsUHApPT57digpO20oKTtfKCk7KGZ1bmN0aW9uKHQsZSl7dHlwZW9mIGVzPT1cIm9iamVjdFwiJiZ0eXBlb2YgUHA8XCJ1XCI/ZShlcyxCcCgpKTp0eXBlb2YgZGVmaW5lPT1cImZ1bmN0aW9uXCImJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImV4cG9ydHNcIixcImZhc3QtdW5pcXVlLW51bWJlcnNcIl0sZSk6KHQ9dHlwZW9mIGdsb2JhbFRoaXM8XCJ1XCI/Z2xvYmFsVGhpczp0fHxzZWxmLGUodC53b3JrZXJUaW1lcnNCcm9rZXI9e30sdC5mYXN0VW5pcXVlTnVtYmVycykpO30pKGVzLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZnVuY3Rpb24ocyl7cmV0dXJuIHMubWV0aG9kIT09dm9pZCAwJiZzLm1ldGhvZD09PVwiY2FsbFwifSxpPWZ1bmN0aW9uKHMpe3JldHVybiBzLmVycm9yPT09bnVsbCYmdHlwZW9mIHMuaWQ9PVwibnVtYmVyXCJ9LG49ZnVuY3Rpb24ocyl7dmFyIGE9bmV3IE1hcChbWzAsZnVuY3Rpb24oKXt9XV0pLHU9bmV3IE1hcChbWzAsZnVuY3Rpb24oKXt9XV0pLGM9bmV3IE1hcCxoPW5ldyBXb3JrZXIocyk7aC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLGZ1bmN0aW9uKEUpe3ZhciBTPUUuZGF0YTtpZihyKFMpKXt2YXIgST1TLnBhcmFtcyxDPUkudGltZXJJZCxSPUkudGltZXJUeXBlO2lmKFI9PT1cImludGVydmFsXCIpe3ZhciBVPWEuZ2V0KEMpO2lmKHR5cGVvZiBVPT1cIm51bWJlclwiKXt2YXIgTj1jLmdldChVKTtpZihOPT09dm9pZCAwfHxOLnRpbWVySWQhPT1DfHxOLnRpbWVyVHlwZSE9PVIpdGhyb3cgbmV3IEVycm9yKFwiVGhlIHRpbWVyIGlzIGluIGFuIHVuZGVmaW5lZCBzdGF0ZS5cIil9ZWxzZSBpZih0eXBlb2YgVTxcInVcIilVKCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgdGltZXIgaXMgaW4gYW4gdW5kZWZpbmVkIHN0YXRlLlwiKX1lbHNlIGlmKFI9PT1cInRpbWVvdXRcIil7dmFyIFc9dS5nZXQoQyk7aWYodHlwZW9mIFc9PVwibnVtYmVyXCIpe3ZhciBLPWMuZ2V0KFcpO2lmKEs9PT12b2lkIDB8fEsudGltZXJJZCE9PUN8fEsudGltZXJUeXBlIT09Uil0aHJvdyBuZXcgRXJyb3IoXCJUaGUgdGltZXIgaXMgaW4gYW4gdW5kZWZpbmVkIHN0YXRlLlwiKX1lbHNlIGlmKHR5cGVvZiBXPFwidVwiKVcoKSx1LmRlbGV0ZShDKTtlbHNlIHRocm93IG5ldyBFcnJvcihcIlRoZSB0aW1lciBpcyBpbiBhbiB1bmRlZmluZWQgc3RhdGUuXCIpfX1lbHNlIGlmKGkoUykpe3ZhciB6PVMuaWQsUT1jLmdldCh6KTtpZihRPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihcIlRoZSB0aW1lciBpcyBpbiBhbiB1bmRlZmluZWQgc3RhdGUuXCIpO3ZhciBkZT1RLnRpbWVySWQsR3Q9US50aW1lclR5cGU7Yy5kZWxldGUoeiksR3Q9PT1cImludGVydmFsXCI/YS5kZWxldGUoZGUpOnUuZGVsZXRlKGRlKTt9ZWxzZSB7dmFyIHBlPVMuZXJyb3IubWVzc2FnZTt0aHJvdyBuZXcgRXJyb3IocGUpfX0pO3ZhciBkPWZ1bmN0aW9uKFMpe3ZhciBJPWUuZ2VuZXJhdGVVbmlxdWVOdW1iZXIoYyk7Yy5zZXQoSSx7dGltZXJJZDpTLHRpbWVyVHlwZTpcImludGVydmFsXCJ9KSxhLnNldChTLEkpLGgucG9zdE1lc3NhZ2Uoe2lkOkksbWV0aG9kOlwiY2xlYXJcIixwYXJhbXM6e3RpbWVySWQ6Uyx0aW1lclR5cGU6XCJpbnRlcnZhbFwifX0pO30sZz1mdW5jdGlvbihTKXt2YXIgST1lLmdlbmVyYXRlVW5pcXVlTnVtYmVyKGMpO2Muc2V0KEkse3RpbWVySWQ6Uyx0aW1lclR5cGU6XCJ0aW1lb3V0XCJ9KSx1LnNldChTLEkpLGgucG9zdE1lc3NhZ2Uoe2lkOkksbWV0aG9kOlwiY2xlYXJcIixwYXJhbXM6e3RpbWVySWQ6Uyx0aW1lclR5cGU6XCJ0aW1lb3V0XCJ9fSk7fSx5PWZ1bmN0aW9uKFMpe3ZhciBJPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowLEM9ZS5nZW5lcmF0ZVVuaXF1ZU51bWJlcihhKTtyZXR1cm4gYS5zZXQoQyxmdW5jdGlvbigpe1MoKSx0eXBlb2YgYS5nZXQoQyk9PVwiZnVuY3Rpb25cIiYmaC5wb3N0TWVzc2FnZSh7aWQ6bnVsbCxtZXRob2Q6XCJzZXRcIixwYXJhbXM6e2RlbGF5Okksbm93OnBlcmZvcm1hbmNlLm5vdygpLHRpbWVySWQ6Qyx0aW1lclR5cGU6XCJpbnRlcnZhbFwifX0pO30pLGgucG9zdE1lc3NhZ2Uoe2lkOm51bGwsbWV0aG9kOlwic2V0XCIscGFyYW1zOntkZWxheTpJLG5vdzpwZXJmb3JtYW5jZS5ub3coKSx0aW1lcklkOkMsdGltZXJUeXBlOlwiaW50ZXJ2YWxcIn19KSxDfSx3PWZ1bmN0aW9uKFMpe3ZhciBJPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowLEM9ZS5nZW5lcmF0ZVVuaXF1ZU51bWJlcih1KTtyZXR1cm4gdS5zZXQoQyxTKSxoLnBvc3RNZXNzYWdlKHtpZDpudWxsLG1ldGhvZDpcInNldFwiLHBhcmFtczp7ZGVsYXk6SSxub3c6cGVyZm9ybWFuY2Uubm93KCksdGltZXJJZDpDLHRpbWVyVHlwZTpcInRpbWVvdXRcIn19KSxDfTtyZXR1cm4ge2NsZWFySW50ZXJ2YWw6ZCxjbGVhclRpbWVvdXQ6ZyxzZXRJbnRlcnZhbDp5LHNldFRpbWVvdXQ6d319O3QubG9hZD1uO30pO30pO3ZhciB4cD1NKCh0cyxrcCk9Pnt2KCk7bSgpO18oKTsoZnVuY3Rpb24odCxlKXt0eXBlb2YgdHM9PVwib2JqZWN0XCImJnR5cGVvZiBrcDxcInVcIj9lKHRzLE9wKCkpOnR5cGVvZiBkZWZpbmU9PVwiZnVuY3Rpb25cIiYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZXhwb3J0c1wiLFwid29ya2VyLXRpbWVycy1icm9rZXJcIl0sZSk6KHQ9dHlwZW9mIGdsb2JhbFRoaXM8XCJ1XCI/Z2xvYmFsVGhpczp0fHxzZWxmLGUodC53b3JrZXJUaW1lcnM9e30sdC53b3JrZXJUaW1lcnNCcm9rZXIpKTt9KSh0cyxmdW5jdGlvbih0LGUpe3ZhciByPWZ1bmN0aW9uKGgsZCl7dmFyIGc9bnVsbDtyZXR1cm4gZnVuY3Rpb24oKXtpZihnIT09bnVsbClyZXR1cm4gZzt2YXIgeT1uZXcgQmxvYihbZF0se3R5cGU6XCJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0OyBjaGFyc2V0PXV0Zi04XCJ9KSx3PVVSTC5jcmVhdGVPYmplY3RVUkwoeSk7cmV0dXJuIGc9aCh3KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIFVSTC5yZXZva2VPYmplY3RVUkwodyl9KSxnfX0saT1gKCgpPT57dmFyIGU9ezQ3MjooZSx0LHIpPT57dmFyIG8saTt2b2lkIDA9PT0oaT1cImZ1bmN0aW9uXCI9PXR5cGVvZihvPWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGU9bmV3IE1hcCx0PW5ldyBNYXAscj1mdW5jdGlvbih0KXt2YXIgcj1lLmdldCh0KTtpZih2b2lkIDA9PT1yKXRocm93IG5ldyBFcnJvcignVGhlcmUgaXMgbm8gaW50ZXJ2YWwgc2NoZWR1bGVkIHdpdGggdGhlIGdpdmVuIGlkIFwiJy5jb25jYXQodCwnXCIuJykpO2NsZWFyVGltZW91dChyKSxlLmRlbGV0ZSh0KX0sbz1mdW5jdGlvbihlKXt2YXIgcj10LmdldChlKTtpZih2b2lkIDA9PT1yKXRocm93IG5ldyBFcnJvcignVGhlcmUgaXMgbm8gdGltZW91dCBzY2hlZHVsZWQgd2l0aCB0aGUgZ2l2ZW4gaWQgXCInLmNvbmNhdChlLCdcIi4nKSk7Y2xlYXJUaW1lb3V0KHIpLHQuZGVsZXRlKGUpfSxpPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbz1wZXJmb3JtYW5jZS5ub3coKTtyZXR1cm57ZXhwZWN0ZWQ6bysocj1lLU1hdGgubWF4KDAsby10KSkscmVtYWluaW5nRGVsYXk6cn19LG49ZnVuY3Rpb24gZSh0LHIsbyxpKXt2YXIgbj1wZXJmb3JtYW5jZS5ub3coKTtuPm8/cG9zdE1lc3NhZ2Uoe2lkOm51bGwsbWV0aG9kOlwiY2FsbFwiLHBhcmFtczp7dGltZXJJZDpyLHRpbWVyVHlwZTppfX0pOnQuc2V0KHIsc2V0VGltZW91dChlLG8tbix0LHIsbyxpKSl9LGE9ZnVuY3Rpb24odCxyLG8pe3ZhciBhPWkodCxvKSxzPWEuZXhwZWN0ZWQsZD1hLnJlbWFpbmluZ0RlbGF5O2Uuc2V0KHIsc2V0VGltZW91dChuLGQsZSxyLHMsXCJpbnRlcnZhbFwiKSl9LHM9ZnVuY3Rpb24oZSxyLG8pe3ZhciBhPWkoZSxvKSxzPWEuZXhwZWN0ZWQsZD1hLnJlbWFpbmluZ0RlbGF5O3Quc2V0KHIsc2V0VGltZW91dChuLGQsdCxyLHMsXCJ0aW1lb3V0XCIpKX07YWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kYXRhO3RyeXtpZihcImNsZWFyXCI9PT10Lm1ldGhvZCl7dmFyIGk9dC5pZCxuPXQucGFyYW1zLGQ9bi50aW1lcklkLGM9bi50aW1lclR5cGU7aWYoXCJpbnRlcnZhbFwiPT09YylyKGQpLHBvc3RNZXNzYWdlKHtlcnJvcjpudWxsLGlkOml9KTtlbHNle2lmKFwidGltZW91dFwiIT09Yyl0aHJvdyBuZXcgRXJyb3IoJ1RoZSBnaXZlbiB0eXBlIFwiJy5jb25jYXQoYywnXCIgaXMgbm90IHN1cHBvcnRlZCcpKTtvKGQpLHBvc3RNZXNzYWdlKHtlcnJvcjpudWxsLGlkOml9KX19ZWxzZXtpZihcInNldFwiIT09dC5tZXRob2QpdGhyb3cgbmV3IEVycm9yKCdUaGUgZ2l2ZW4gbWV0aG9kIFwiJy5jb25jYXQodC5tZXRob2QsJ1wiIGlzIG5vdCBzdXBwb3J0ZWQnKSk7dmFyIHU9dC5wYXJhbXMsbD11LmRlbGF5LHA9dS5ub3csbT11LnRpbWVySWQsdj11LnRpbWVyVHlwZTtpZihcImludGVydmFsXCI9PT12KWEobCxtLHApO2Vsc2V7aWYoXCJ0aW1lb3V0XCIhPT12KXRocm93IG5ldyBFcnJvcignVGhlIGdpdmVuIHR5cGUgXCInLmNvbmNhdCh2LCdcIiBpcyBub3Qgc3VwcG9ydGVkJykpO3MobCxtLHApfX19Y2F0Y2goZSl7cG9zdE1lc3NhZ2Uoe2Vycm9yOnttZXNzYWdlOmUubWVzc2FnZX0saWQ6dC5pZCxyZXN1bHQ6bnVsbH0pfX0pKX0pP28uY2FsbCh0LHIsdCxlKTpvKXx8KGUuZXhwb3J0cz1pKX19LHQ9e307ZnVuY3Rpb24gcihvKXt2YXIgaT10W29dO2lmKHZvaWQgMCE9PWkpcmV0dXJuIGkuZXhwb3J0czt2YXIgbj10W29dPXtleHBvcnRzOnt9fTtyZXR1cm4gZVtvXShuLG4uZXhwb3J0cyxyKSxuLmV4cG9ydHN9ci5uPWU9Pnt2YXIgdD1lJiZlLl9fZXNNb2R1bGU/KCk9PmUuZGVmYXVsdDooKT0+ZTtyZXR1cm4gci5kKHQse2E6dH0pLHR9LHIuZD0oZSx0KT0+e2Zvcih2YXIgbyBpbiB0KXIubyh0LG8pJiYhci5vKGUsbykmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG8se2VudW1lcmFibGU6ITAsZ2V0OnRbb119KX0sci5vPShlLHQpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KSwoKCk9PntcInVzZSBzdHJpY3RcIjtyKDQ3Mil9KSgpfSkoKTtgLG49cihlLmxvYWQsaSksbz1mdW5jdGlvbihoKXtyZXR1cm4gbigpLmNsZWFySW50ZXJ2YWwoaCl9LHM9ZnVuY3Rpb24oaCl7cmV0dXJuIG4oKS5jbGVhclRpbWVvdXQoaCl9LGE9ZnVuY3Rpb24oKXt2YXIgaDtyZXR1cm4gKGg9bigpKS5zZXRJbnRlcnZhbC5hcHBseShoLGFyZ3VtZW50cyl9LHU9ZnVuY3Rpb24oKXt2YXIgaDtyZXR1cm4gKGg9bigpKS5zZXRUaW1lb3V0LmFwcGx5KGgsYXJndW1lbnRzKX07dC5jbGVhckludGVydmFsPW8sdC5jbGVhclRpbWVvdXQ9cyx0LnNldEludGVydmFsPWEsdC5zZXRUaW1lb3V0PXU7fSk7fSk7dmFyIE5wPU0oUnQ9Pnt2KCk7bSgpO18oKTt2YXIgcXY9UnQmJlJ0Ll9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24odCxlLHIsaSl7aT09PXZvaWQgMCYmKGk9cik7dmFyIG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHIpOyghbnx8KFwiZ2V0XCJpbiBuPyFlLl9fZXNNb2R1bGU6bi53cml0YWJsZXx8bi5jb25maWd1cmFibGUpKSYmKG49e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGVbcl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsaSxuKTt9OmZ1bmN0aW9uKHQsZSxyLGkpe2k9PT12b2lkIDAmJihpPXIpLHRbaV09ZVtyXTt9KSxEdj1SdCYmUnQuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbih0LGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOmV9KTt9OmZ1bmN0aW9uKHQsZSl7dC5kZWZhdWx0PWU7fSksanY9UnQmJlJ0Ll9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24odCl7aWYodCYmdC5fX2VzTW9kdWxlKXJldHVybiB0O3ZhciBlPXt9O2lmKHQhPW51bGwpZm9yKHZhciByIGluIHQpciE9PVwiZGVmYXVsdFwiJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxyKSYmcXYoZSx0LHIpO3JldHVybiBEdihlLHQpLGV9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShSdCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgTmE9anYoUGkoKSksTXA9eHAoKSxMcD17c2V0Ok1wLnNldFRpbWVvdXQsY2xlYXI6TXAuY2xlYXJUaW1lb3V0fSxVcD17c2V0Oih0LGUpPT5zZXRUaW1lb3V0KHQsZSksY2xlYXI6dD0+Y2xlYXJUaW1lb3V0KHQpfSxGdj10PT57c3dpdGNoKHQpe2Nhc2VcIm5hdGl2ZVwiOnJldHVybiBVcDtjYXNlXCJ3b3JrZXJcIjpyZXR1cm4gTHA7Y2FzZVwiYXV0b1wiOmRlZmF1bHQ6cmV0dXJuIE5hLmRlZmF1bHQmJiFOYS5pc1dlYldvcmtlciYmIU5hLmlzUmVhY3ROYXRpdmVCcm93c2VyP0xwOlVwfX07UnQuZGVmYXVsdD1Gdjt9KTt2YXIgRGE9TShPaT0+e3YoKTttKCk7XygpO3ZhciBXdj1PaSYmT2kuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlP3Q6e2RlZmF1bHQ6dH19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPaSxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgJHY9V3YoTnAoKSkscWE9Y2xhc3N7Y29uc3RydWN0b3IoZSxyLGkpe3RoaXMua2VlcGFsaXZlPWUqMWUzLHRoaXMuY2hlY2tQaW5nPXIsdGhpcy50aW1lcj0oMCwgJHYuZGVmYXVsdCkoaSksdGhpcy5yZXNjaGVkdWxlKCk7fWNsZWFyKCl7dGhpcy50aW1lcklkJiYodGhpcy50aW1lci5jbGVhcih0aGlzLnRpbWVySWQpLHRoaXMudGltZXJJZD1udWxsKTt9cmVzY2hlZHVsZSgpe3RoaXMuY2xlYXIoKSx0aGlzLnRpbWVySWQ9dGhpcy50aW1lci5zZXQoKCk9Pnt0aGlzLmNoZWNrUGluZygpLHRoaXMudGltZXJJZCYmdGhpcy5yZXNjaGVkdWxlKCk7fSx0aGlzLmtlZXBhbGl2ZSk7fX07T2kuZGVmYXVsdD1xYTt9KTt2YXIgbnM9TShRZT0+e3YoKTttKCk7XygpO3ZhciBIdj1RZSYmUWUuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbih0LGUscixpKXtpPT09dm9pZCAwJiYoaT1yKTt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUscik7KCFufHwoXCJnZXRcImluIG4/IWUuX19lc01vZHVsZTpuLndyaXRhYmxlfHxuLmNvbmZpZ3VyYWJsZSkpJiYobj17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZVtyXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxpLG4pO306ZnVuY3Rpb24odCxlLHIsaSl7aT09PXZvaWQgMCYmKGk9ciksdFtpXT1lW3JdO30pLFZ2PVFlJiZRZS5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6ZX0pO306ZnVuY3Rpb24odCxlKXt0LmRlZmF1bHQ9ZTt9KSxXcD1RZSYmUWUuX19pbXBvcnRTdGFyfHxmdW5jdGlvbih0KXtpZih0JiZ0Ll9fZXNNb2R1bGUpcmV0dXJuIHQ7dmFyIGU9e307aWYodCE9bnVsbClmb3IodmFyIHIgaW4gdClyIT09XCJkZWZhdWx0XCImJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LHIpJiZIdihlLHQscik7cmV0dXJuIFZ2KGUsdCksZX0sVnQ9UWUmJlFlLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuX19lc01vZHVsZT90OntkZWZhdWx0OnR9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoUWUsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIHp2PVZ0KEd1KCkpLGphPVZ0KE5kKCkpLEt2PVZ0KFlvKCkpLEd2PUR0KCkscXA9VnQoRmQoKSksRHA9V3AoJGQoKSksUXY9VnQob3QoKSkscnM9VnQoWm8oKSksWXY9VnQoQXAoKSksV2E9SnIoKSxKdj1JcCgpLFh2PVZ0KERhKCkpLGpwPVdwKFBpKCkpLEZhPWdsb2JhbFRoaXMuc2V0SW1tZWRpYXRlfHwoKC4uLnQpPT57bGV0IGU9dC5zaGlmdCgpOygwLCBXYS5uZXh0VGljaykoKCk9PntlKC4uLnQpO30pO30pLEZwPXtrZWVwYWxpdmU6NjAscmVzY2hlZHVsZVBpbmdzOiEwLHByb3RvY29sSWQ6XCJNUVRUXCIscHJvdG9jb2xWZXJzaW9uOjQscmVjb25uZWN0UGVyaW9kOjFlMyxjb25uZWN0VGltZW91dDozMCoxZTMsY2xlYW46ITAscmVzdWJzY3JpYmU6ITAsd3JpdGVDYWNoZTohMCx0aW1lclZhcmlhbnQ6XCJhdXRvXCJ9LGlzPWNsYXNzIHQgZXh0ZW5kcyBKdi5UeXBlZEV2ZW50RW1pdHRlcntzdGF0aWMgZGVmYXVsdElkKCl7cmV0dXJuIGBtcXR0anNfJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDE2KS5zdWJzdHIoMiw4KX1gfWNvbnN0cnVjdG9yKGUscil7c3VwZXIoKSx0aGlzLm9wdGlvbnM9cnx8e307Zm9yKGxldCBpIGluIEZwKXR5cGVvZiB0aGlzLm9wdGlvbnNbaV0+XCJ1XCI/dGhpcy5vcHRpb25zW2ldPUZwW2ldOnRoaXMub3B0aW9uc1tpXT1yW2ldO3RoaXMubG9nPXRoaXMub3B0aW9ucy5sb2d8fCgwLCBRdi5kZWZhdWx0KShcIm1xdHRqczpjbGllbnRcIiksdGhpcy5ub29wPXRoaXMuX25vb3AuYmluZCh0aGlzKSx0aGlzLmxvZyhcIk1xdHRDbGllbnQgOjogdmVyc2lvbjpcIix0LlZFUlNJT04pLGpwLmlzV2ViV29ya2VyP3RoaXMubG9nKFwiTXF0dENsaWVudCA6OiBlbnZpcm9ubWVudFwiLFwid2Vid29ya2VyXCIpOnRoaXMubG9nKFwiTXF0dENsaWVudCA6OiBlbnZpcm9ubWVudFwiLGpwLmRlZmF1bHQ/XCJicm93c2VyXCI6XCJub2RlXCIpLHRoaXMubG9nKFwiTXF0dENsaWVudCA6OiBvcHRpb25zLnByb3RvY29sXCIsci5wcm90b2NvbCksdGhpcy5sb2coXCJNcXR0Q2xpZW50IDo6IG9wdGlvbnMucHJvdG9jb2xWZXJzaW9uXCIsci5wcm90b2NvbFZlcnNpb24pLHRoaXMubG9nKFwiTXF0dENsaWVudCA6OiBvcHRpb25zLnVzZXJuYW1lXCIsci51c2VybmFtZSksdGhpcy5sb2coXCJNcXR0Q2xpZW50IDo6IG9wdGlvbnMua2VlcGFsaXZlXCIsci5rZWVwYWxpdmUpLHRoaXMubG9nKFwiTXF0dENsaWVudCA6OiBvcHRpb25zLnJlY29ubmVjdFBlcmlvZFwiLHIucmVjb25uZWN0UGVyaW9kKSx0aGlzLmxvZyhcIk1xdHRDbGllbnQgOjogb3B0aW9ucy5yZWplY3RVbmF1dGhvcml6ZWRcIixyLnJlamVjdFVuYXV0aG9yaXplZCksdGhpcy5sb2coXCJNcXR0Q2xpZW50IDo6IG9wdGlvbnMucHJvcGVydGllcy50b3BpY0FsaWFzTWF4aW11bVwiLHIucHJvcGVydGllcz9yLnByb3BlcnRpZXMudG9waWNBbGlhc01heGltdW06dm9pZCAwKSx0aGlzLm9wdGlvbnMuY2xpZW50SWQ9dHlwZW9mIHIuY2xpZW50SWQ9PVwic3RyaW5nXCI/ci5jbGllbnRJZDp0LmRlZmF1bHRJZCgpLHRoaXMubG9nKFwiTXF0dENsaWVudCA6OiBjbGllbnRJZFwiLHRoaXMub3B0aW9ucy5jbGllbnRJZCksdGhpcy5vcHRpb25zLmN1c3RvbUhhbmRsZUFja3M9ci5wcm90b2NvbFZlcnNpb249PT01JiZyLmN1c3RvbUhhbmRsZUFja3M/ci5jdXN0b21IYW5kbGVBY2tzOiguLi5pKT0+e2lbM10obnVsbCwwKTt9LHRoaXMub3B0aW9ucy53cml0ZUNhY2hlfHwoamEuZGVmYXVsdC53cml0ZVRvU3RyZWFtLmNhY2hlTnVtYmVycz0hMSksdGhpcy5zdHJlYW1CdWlsZGVyPWUsdGhpcy5tZXNzYWdlSWRQcm92aWRlcj10eXBlb2YgdGhpcy5vcHRpb25zLm1lc3NhZ2VJZFByb3ZpZGVyPlwidVwiP25ldyBLdi5kZWZhdWx0OnRoaXMub3B0aW9ucy5tZXNzYWdlSWRQcm92aWRlcix0aGlzLm91dGdvaW5nU3RvcmU9ci5vdXRnb2luZ1N0b3JlfHxuZXcgcnMuZGVmYXVsdCx0aGlzLmluY29taW5nU3RvcmU9ci5pbmNvbWluZ1N0b3JlfHxuZXcgcnMuZGVmYXVsdCx0aGlzLnF1ZXVlUW9TWmVybz1yLnF1ZXVlUW9TWmVybz09PXZvaWQgMD8hMDpyLnF1ZXVlUW9TWmVybyx0aGlzLl9yZXN1YnNjcmliZVRvcGljcz17fSx0aGlzLm1lc3NhZ2VJZFRvVG9waWM9e30sdGhpcy5waW5nVGltZXI9bnVsbCx0aGlzLmNvbm5lY3RlZD0hMSx0aGlzLmRpc2Nvbm5lY3Rpbmc9ITEsdGhpcy5yZWNvbm5lY3Rpbmc9ITEsdGhpcy5xdWV1ZT1bXSx0aGlzLmNvbm5hY2tUaW1lcj1udWxsLHRoaXMucmVjb25uZWN0VGltZXI9bnVsbCx0aGlzLl9zdG9yZVByb2Nlc3Npbmc9ITEsdGhpcy5fcGFja2V0SWRzRHVyaW5nU3RvcmVQcm9jZXNzaW5nPXt9LHRoaXMuX3N0b3JlUHJvY2Vzc2luZ1F1ZXVlPVtdLHRoaXMub3V0Z29pbmc9e30sdGhpcy5fZmlyc3RDb25uZWN0aW9uPSEwLHIucHJvcGVydGllcyYmci5wcm9wZXJ0aWVzLnRvcGljQWxpYXNNYXhpbXVtPjAmJihyLnByb3BlcnRpZXMudG9waWNBbGlhc01heGltdW0+NjU1MzU/dGhpcy5sb2coXCJNcXR0Q2xpZW50IDo6IG9wdGlvbnMucHJvcGVydGllcy50b3BpY0FsaWFzTWF4aW11bSBpcyBvdXQgb2YgcmFuZ2VcIik6dGhpcy50b3BpY0FsaWFzUmVjdj1uZXcgenYuZGVmYXVsdChyLnByb3BlcnRpZXMudG9waWNBbGlhc01heGltdW0pKSx0aGlzLm9uKFwiY29ubmVjdFwiLCgpPT57bGV0e3F1ZXVlOml9PXRoaXMsbj0oKT0+e2xldCBvPWkuc2hpZnQoKTt0aGlzLmxvZyhcImRlbGl2ZXIgOjogZW50cnkgJW9cIixvKTtsZXQgcz1udWxsO2lmKCFvKXt0aGlzLl9yZXN1YnNjcmliZSgpO3JldHVybn1zPW8ucGFja2V0LHRoaXMubG9nKFwiZGVsaXZlciA6OiBjYWxsIF9zZW5kUGFja2V0IGZvciAlb1wiLHMpO2xldCBhPSEwO3MubWVzc2FnZUlkJiZzLm1lc3NhZ2VJZCE9PTAmJih0aGlzLm1lc3NhZ2VJZFByb3ZpZGVyLnJlZ2lzdGVyKHMubWVzc2FnZUlkKXx8KGE9ITEpKSxhP3RoaXMuX3NlbmRQYWNrZXQocyx1PT57by5jYiYmby5jYih1KSxuKCk7fSk6KHRoaXMubG9nKFwibWVzc2FnZUlkOiAlZCBoYXMgYWxyZWFkeSB1c2VkLiBUaGUgbWVzc2FnZSBpcyBza2lwcGVkIGFuZCByZW1vdmVkLlwiLHMubWVzc2FnZUlkKSxuKCkpO307dGhpcy5sb2coXCJjb25uZWN0IDo6IHNlbmRpbmcgcXVldWVkIHBhY2tldHNcIiksbigpO30pLHRoaXMub24oXCJjbG9zZVwiLCgpPT57dGhpcy5sb2coXCJjbG9zZSA6OiBjb25uZWN0ZWQgc2V0IHRvIGBmYWxzZWBcIiksdGhpcy5jb25uZWN0ZWQ9ITEsdGhpcy5sb2coXCJjbG9zZSA6OiBjbGVhcmluZyBjb25uYWNrVGltZXJcIiksY2xlYXJUaW1lb3V0KHRoaXMuY29ubmFja1RpbWVyKSx0aGlzLmxvZyhcImNsb3NlIDo6IGNsZWFyaW5nIHBpbmcgdGltZXJcIiksdGhpcy5waW5nVGltZXImJih0aGlzLnBpbmdUaW1lci5jbGVhcigpLHRoaXMucGluZ1RpbWVyPW51bGwpLHRoaXMudG9waWNBbGlhc1JlY3YmJnRoaXMudG9waWNBbGlhc1JlY3YuY2xlYXIoKSx0aGlzLmxvZyhcImNsb3NlIDo6IGNhbGxpbmcgX3NldHVwUmVjb25uZWN0XCIpLHRoaXMuX3NldHVwUmVjb25uZWN0KCk7fSksdGhpcy5vcHRpb25zLm1hbnVhbENvbm5lY3R8fCh0aGlzLmxvZyhcIk1xdHRDbGllbnQgOjogc2V0dGluZyB1cCBzdHJlYW1cIiksdGhpcy5jb25uZWN0KCkpO31oYW5kbGVBdXRoKGUscil7cigpO31oYW5kbGVNZXNzYWdlKGUscil7cigpO31fbmV4dElkKCl7cmV0dXJuIHRoaXMubWVzc2FnZUlkUHJvdmlkZXIuYWxsb2NhdGUoKX1nZXRMYXN0TWVzc2FnZUlkKCl7cmV0dXJuIHRoaXMubWVzc2FnZUlkUHJvdmlkZXIuZ2V0TGFzdEFsbG9jYXRlZCgpfWNvbm5lY3QoKXt2YXIgZTtsZXQgcj1uZXcgR3YuV3JpdGFibGUsaT1qYS5kZWZhdWx0LnBhcnNlcih0aGlzLm9wdGlvbnMpLG49bnVsbCxvPVtdO3RoaXMubG9nKFwiY29ubmVjdCA6OiBjYWxsaW5nIG1ldGhvZCB0byBjbGVhciByZWNvbm5lY3RcIiksdGhpcy5fY2xlYXJSZWNvbm5lY3QoKSx0aGlzLmxvZyhcImNvbm5lY3QgOjogdXNpbmcgc3RyZWFtQnVpbGRlciBwcm92aWRlZCB0byBjbGllbnQgdG8gY3JlYXRlIHN0cmVhbVwiKSx0aGlzLnN0cmVhbT10aGlzLnN0cmVhbUJ1aWxkZXIodGhpcyksaS5vbihcInBhY2tldFwiLGg9Pnt0aGlzLmxvZyhcInBhcnNlciA6OiBvbiBwYWNrZXQgcHVzaCB0byBwYWNrZXRzIGFycmF5LlwiKSxvLnB1c2goaCk7fSk7bGV0IHM9KCk9Pnt0aGlzLmxvZyhcIndvcmsgOjogZ2V0dGluZyBuZXh0IHBhY2tldCBpbiBxdWV1ZVwiKTtsZXQgaD1vLnNoaWZ0KCk7aWYoaCl0aGlzLmxvZyhcIndvcmsgOjogcGFja2V0IHB1bGxlZCBmcm9tIHF1ZXVlXCIpLCgwLCBZdi5kZWZhdWx0KSh0aGlzLGgsYSk7ZWxzZSB7dGhpcy5sb2coXCJ3b3JrIDo6IG5vIHBhY2tldHMgaW4gcXVldWVcIik7bGV0IGQ9bjtuPW51bGwsdGhpcy5sb2coXCJ3b3JrIDo6IGRvbmUgZmxhZyBpcyAlc1wiLCEhZCksZCYmZCgpO319LGE9KCk9PntpZihvLmxlbmd0aCkoMCwgV2EubmV4dFRpY2spKHMpO2Vsc2Uge2xldCBoPW47bj1udWxsLGgoKTt9fTtyLl93cml0ZT0oaCxkLGcpPT57bj1nLHRoaXMubG9nKFwid3JpdGFibGUgc3RyZWFtIDo6IHBhcnNpbmcgYnVmZmVyXCIpLGkucGFyc2UoaCkscygpO307bGV0IHU9aD0+e3RoaXMubG9nKFwic3RyZWFtRXJyb3JIYW5kbGVyIDo6IGVycm9yXCIsaC5tZXNzYWdlKSxoLmNvZGU/KHRoaXMubG9nKFwic3RyZWFtRXJyb3JIYW5kbGVyIDo6IGVtaXR0aW5nIGVycm9yXCIpLHRoaXMuZW1pdChcImVycm9yXCIsaCkpOnRoaXMubm9vcChoKTt9O3RoaXMubG9nKFwiY29ubmVjdCA6OiBwaXBlIHN0cmVhbSB0byB3cml0YWJsZSBzdHJlYW1cIiksdGhpcy5zdHJlYW0ucGlwZShyKSx0aGlzLnN0cmVhbS5vbihcImVycm9yXCIsdSksdGhpcy5zdHJlYW0ub24oXCJjbG9zZVwiLCgpPT57dGhpcy5sb2coXCIoJXMpc3RyZWFtIDo6IG9uIGNsb3NlXCIsdGhpcy5vcHRpb25zLmNsaWVudElkKSx0aGlzLl9mbHVzaFZvbGF0aWxlKCksdGhpcy5sb2coXCJzdHJlYW06IGVtaXQgY2xvc2UgdG8gTXF0dENsaWVudFwiKSx0aGlzLmVtaXQoXCJjbG9zZVwiKTt9KSx0aGlzLmxvZyhcImNvbm5lY3Q6IHNlbmRpbmcgcGFja2V0IGBjb25uZWN0YFwiKTtsZXQgYz17Y21kOlwiY29ubmVjdFwiLHByb3RvY29sSWQ6dGhpcy5vcHRpb25zLnByb3RvY29sSWQscHJvdG9jb2xWZXJzaW9uOnRoaXMub3B0aW9ucy5wcm90b2NvbFZlcnNpb24sY2xlYW46dGhpcy5vcHRpb25zLmNsZWFuLGNsaWVudElkOnRoaXMub3B0aW9ucy5jbGllbnRJZCxrZWVwYWxpdmU6dGhpcy5vcHRpb25zLmtlZXBhbGl2ZSx1c2VybmFtZTp0aGlzLm9wdGlvbnMudXNlcm5hbWUscGFzc3dvcmQ6dGhpcy5vcHRpb25zLnBhc3N3b3JkLHByb3BlcnRpZXM6dGhpcy5vcHRpb25zLnByb3BlcnRpZXN9O2lmKHRoaXMub3B0aW9ucy53aWxsJiYoYy53aWxsPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLm9wdGlvbnMud2lsbCkse3BheWxvYWQ6KGU9dGhpcy5vcHRpb25zLndpbGwpPT09bnVsbHx8ZT09PXZvaWQgMD92b2lkIDA6ZS5wYXlsb2FkfSkpLHRoaXMudG9waWNBbGlhc1JlY3YmJihjLnByb3BlcnRpZXN8fChjLnByb3BlcnRpZXM9e30pLHRoaXMudG9waWNBbGlhc1JlY3YmJihjLnByb3BlcnRpZXMudG9waWNBbGlhc01heGltdW09dGhpcy50b3BpY0FsaWFzUmVjdi5tYXgpKSx0aGlzLl93cml0ZVBhY2tldChjKSxpLm9uKFwiZXJyb3JcIix0aGlzLmVtaXQuYmluZCh0aGlzLFwiZXJyb3JcIikpLHRoaXMub3B0aW9ucy5wcm9wZXJ0aWVzKXtpZighdGhpcy5vcHRpb25zLnByb3BlcnRpZXMuYXV0aGVudGljYXRpb25NZXRob2QmJnRoaXMub3B0aW9ucy5wcm9wZXJ0aWVzLmF1dGhlbnRpY2F0aW9uRGF0YSlyZXR1cm4gdGhpcy5lbmQoKCk9PnRoaXMuZW1pdChcImVycm9yXCIsbmV3IEVycm9yKFwiUGFja2V0IGhhcyBubyBBdXRoZW50aWNhdGlvbiBNZXRob2RcIikpKSx0aGlzO2lmKHRoaXMub3B0aW9ucy5wcm9wZXJ0aWVzLmF1dGhlbnRpY2F0aW9uTWV0aG9kJiZ0aGlzLm9wdGlvbnMuYXV0aFBhY2tldCYmdHlwZW9mIHRoaXMub3B0aW9ucy5hdXRoUGFja2V0PT1cIm9iamVjdFwiKXtsZXQgaD1PYmplY3QuYXNzaWduKHtjbWQ6XCJhdXRoXCIscmVhc29uQ29kZTowfSx0aGlzLm9wdGlvbnMuYXV0aFBhY2tldCk7dGhpcy5fd3JpdGVQYWNrZXQoaCk7fX1yZXR1cm4gdGhpcy5zdHJlYW0uc2V0TWF4TGlzdGVuZXJzKDFlMyksY2xlYXJUaW1lb3V0KHRoaXMuY29ubmFja1RpbWVyKSx0aGlzLmNvbm5hY2tUaW1lcj1zZXRUaW1lb3V0KCgpPT57dGhpcy5sb2coXCIhIWNvbm5lY3RUaW1lb3V0IGhpdCEhIENhbGxpbmcgX2NsZWFuVXAgd2l0aCBmb3JjZSBgdHJ1ZWBcIiksdGhpcy5lbWl0KFwiZXJyb3JcIixuZXcgRXJyb3IoXCJjb25uYWNrIHRpbWVvdXRcIikpLHRoaXMuX2NsZWFuVXAoITApO30sdGhpcy5vcHRpb25zLmNvbm5lY3RUaW1lb3V0KSx0aGlzfXB1Ymxpc2goZSxyLGksbil7dGhpcy5sb2coXCJwdWJsaXNoIDo6IG1lc3NhZ2UgYCVzYCB0byB0b3BpYyBgJXNgXCIscixlKTtsZXR7b3B0aW9uczpvfT10aGlzO3R5cGVvZiBpPT1cImZ1bmN0aW9uXCImJihuPWksaT1udWxsKSxpPWl8fHt9LGk9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHtxb3M6MCxyZXRhaW46ITEsZHVwOiExfSksaSk7bGV0e3FvczphLHJldGFpbjp1LGR1cDpjLHByb3BlcnRpZXM6aCxjYlN0b3JlUHV0OmR9PWk7aWYodGhpcy5fY2hlY2tEaXNjb25uZWN0aW5nKG4pKXJldHVybiB0aGlzO2xldCBnPSgpPT57bGV0IHk9MDtpZigoYT09PTF8fGE9PT0yKSYmKHk9dGhpcy5fbmV4dElkKCkseT09PW51bGwpKXJldHVybiB0aGlzLmxvZyhcIk5vIG1lc3NhZ2VJZCBsZWZ0XCIpLCExO2xldCB3PXtjbWQ6XCJwdWJsaXNoXCIsdG9waWM6ZSxwYXlsb2FkOnIscW9zOmEscmV0YWluOnUsbWVzc2FnZUlkOnksZHVwOmN9O3N3aXRjaChvLnByb3RvY29sVmVyc2lvbj09PTUmJih3LnByb3BlcnRpZXM9aCksdGhpcy5sb2coXCJwdWJsaXNoIDo6IHFvc1wiLGEpLGEpe2Nhc2UgMTpjYXNlIDI6dGhpcy5vdXRnb2luZ1t3Lm1lc3NhZ2VJZF09e3ZvbGF0aWxlOiExLGNiOm58fHRoaXMubm9vcH0sdGhpcy5sb2coXCJNcXR0Q2xpZW50OnB1Ymxpc2g6IHBhY2tldCBjbWQ6ICVzXCIsdy5jbWQpLHRoaXMuX3NlbmRQYWNrZXQodyx2b2lkIDAsZCk7YnJlYWs7ZGVmYXVsdDp0aGlzLmxvZyhcIk1xdHRDbGllbnQ6cHVibGlzaDogcGFja2V0IGNtZDogJXNcIix3LmNtZCksdGhpcy5fc2VuZFBhY2tldCh3LG4sZCk7YnJlYWt9cmV0dXJuICEwfTtyZXR1cm4gKHRoaXMuX3N0b3JlUHJvY2Vzc2luZ3x8dGhpcy5fc3RvcmVQcm9jZXNzaW5nUXVldWUubGVuZ3RoPjB8fCFnKCkpJiZ0aGlzLl9zdG9yZVByb2Nlc3NpbmdRdWV1ZS5wdXNoKHtpbnZva2U6ZyxjYlN0b3JlUHV0OmkuY2JTdG9yZVB1dCxjYWxsYmFjazpufSksdGhpc31wdWJsaXNoQXN5bmMoZSxyLGkpe3JldHVybiBuZXcgUHJvbWlzZSgobixvKT0+e3RoaXMucHVibGlzaChlLHIsaSwocyxhKT0+e3M/byhzKTpuKGEpO30pO30pfXN1YnNjcmliZShlLHIsaSl7bGV0IG49dGhpcy5vcHRpb25zLnByb3RvY29sVmVyc2lvbjt0eXBlb2Ygcj09XCJmdW5jdGlvblwiJiYoaT1yKSxpPWl8fHRoaXMubm9vcDtsZXQgbz0hMSxzPVtdO3R5cGVvZiBlPT1cInN0cmluZ1wiPyhlPVtlXSxzPWUpOkFycmF5LmlzQXJyYXkoZSk/cz1lOnR5cGVvZiBlPT1cIm9iamVjdFwiJiYobz1lLnJlc3Vic2NyaWJlLGRlbGV0ZSBlLnJlc3Vic2NyaWJlLHM9T2JqZWN0LmtleXMoZSkpO2xldCBhPURwLnZhbGlkYXRlVG9waWNzKHMpO2lmKGEhPT1udWxsKXJldHVybiBGYShpLG5ldyBFcnJvcihgSW52YWxpZCB0b3BpYyAke2F9YCkpLHRoaXM7aWYodGhpcy5fY2hlY2tEaXNjb25uZWN0aW5nKGkpKXJldHVybiB0aGlzLmxvZyhcInN1YnNjcmliZTogZGlzY2NvbmVjdGluZyB0cnVlXCIpLHRoaXM7bGV0IHU9e3FvczowfTtuPT09NSYmKHUubmw9ITEsdS5yYXA9ITEsdS5yaD0wKSxyPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx1KSxyKTtsZXQgYz1yLnByb3BlcnRpZXMsaD1bXSxkPSh5LHcpPT57aWYodz13fHxyLCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5fcmVzdWJzY3JpYmVUb3BpY3MseSl8fHRoaXMuX3Jlc3Vic2NyaWJlVG9waWNzW3ldLnFvczx3LnFvc3x8byl7bGV0IEU9e3RvcGljOnkscW9zOncucW9zfTtuPT09NSYmKEUubmw9dy5ubCxFLnJhcD13LnJhcCxFLnJoPXcucmgsRS5wcm9wZXJ0aWVzPWMpLHRoaXMubG9nKFwic3Vic2NyaWJlOiBwdXNoaW5nIHRvcGljIGAlc2AgYW5kIHFvcyBgJXNgIHRvIHN1YnMgbGlzdFwiLEUudG9waWMsRS5xb3MpLGgucHVzaChFKTt9fTtpZihBcnJheS5pc0FycmF5KGUpP2UuZm9yRWFjaCh5PT57dGhpcy5sb2coXCJzdWJzY3JpYmU6IGFycmF5IHRvcGljICVzXCIseSksZCh5KTt9KTpPYmplY3Qua2V5cyhlKS5mb3JFYWNoKHk9Pnt0aGlzLmxvZyhcInN1YnNjcmliZTogb2JqZWN0IHRvcGljICVzLCAlb1wiLHksZVt5XSksZCh5LGVbeV0pO30pLCFoLmxlbmd0aClyZXR1cm4gaShudWxsLFtdKSx0aGlzO2xldCBnPSgpPT57bGV0IHk9dGhpcy5fbmV4dElkKCk7aWYoeT09PW51bGwpcmV0dXJuIHRoaXMubG9nKFwiTm8gbWVzc2FnZUlkIGxlZnRcIiksITE7bGV0IHc9e2NtZDpcInN1YnNjcmliZVwiLHN1YnNjcmlwdGlvbnM6aCxtZXNzYWdlSWQ6eX07aWYoYyYmKHcucHJvcGVydGllcz1jKSx0aGlzLm9wdGlvbnMucmVzdWJzY3JpYmUpe3RoaXMubG9nKFwic3Vic2NyaWJlIDo6IHJlc3Vic2NyaWJlIHRydWVcIik7bGV0IEU9W107aC5mb3JFYWNoKFM9PntpZih0aGlzLm9wdGlvbnMucmVjb25uZWN0UGVyaW9kPjApe2xldCBJPXtxb3M6Uy5xb3N9O249PT01JiYoSS5ubD1TLm5sfHwhMSxJLnJhcD1TLnJhcHx8ITEsSS5yaD1TLnJofHwwLEkucHJvcGVydGllcz1TLnByb3BlcnRpZXMpLHRoaXMuX3Jlc3Vic2NyaWJlVG9waWNzW1MudG9waWNdPUksRS5wdXNoKFMudG9waWMpO319KSx0aGlzLm1lc3NhZ2VJZFRvVG9waWNbdy5tZXNzYWdlSWRdPUU7fXJldHVybiB0aGlzLm91dGdvaW5nW3cubWVzc2FnZUlkXT17dm9sYXRpbGU6ITAsY2IoRSxTKXtpZighRSl7bGV0e2dyYW50ZWQ6SX09Uztmb3IobGV0IEM9MDtDPEkubGVuZ3RoO0MrPTEpaFtDXS5xb3M9SVtDXTt9aShFLGgpO319LHRoaXMubG9nKFwic3Vic2NyaWJlIDo6IGNhbGwgX3NlbmRQYWNrZXRcIiksdGhpcy5fc2VuZFBhY2tldCh3KSwhMH07cmV0dXJuICh0aGlzLl9zdG9yZVByb2Nlc3Npbmd8fHRoaXMuX3N0b3JlUHJvY2Vzc2luZ1F1ZXVlLmxlbmd0aD4wfHwhZygpKSYmdGhpcy5fc3RvcmVQcm9jZXNzaW5nUXVldWUucHVzaCh7aW52b2tlOmcsY2FsbGJhY2s6aX0pLHRoaXN9c3Vic2NyaWJlQXN5bmMoZSxyKXtyZXR1cm4gbmV3IFByb21pc2UoKGksbik9Pnt0aGlzLnN1YnNjcmliZShlLHIsKG8scyk9PntvP24obyk6aShzKTt9KTt9KX11bnN1YnNjcmliZShlLHIsaSl7dHlwZW9mIGU9PVwic3RyaW5nXCImJihlPVtlXSksdHlwZW9mIHI9PVwiZnVuY3Rpb25cIiYmKGk9ciksaT1pfHx0aGlzLm5vb3A7bGV0IG49RHAudmFsaWRhdGVUb3BpY3MoZSk7aWYobiE9PW51bGwpcmV0dXJuIEZhKGksbmV3IEVycm9yKGBJbnZhbGlkIHRvcGljICR7bn1gKSksdGhpcztpZih0aGlzLl9jaGVja0Rpc2Nvbm5lY3RpbmcoaSkpcmV0dXJuIHRoaXM7bGV0IG89KCk9PntsZXQgcz10aGlzLl9uZXh0SWQoKTtpZihzPT09bnVsbClyZXR1cm4gdGhpcy5sb2coXCJObyBtZXNzYWdlSWQgbGVmdFwiKSwhMTtsZXQgYT17Y21kOlwidW5zdWJzY3JpYmVcIixtZXNzYWdlSWQ6cyx1bnN1YnNjcmlwdGlvbnM6W119O3JldHVybiB0eXBlb2YgZT09XCJzdHJpbmdcIj9hLnVuc3Vic2NyaXB0aW9ucz1bZV06QXJyYXkuaXNBcnJheShlKSYmKGEudW5zdWJzY3JpcHRpb25zPWUpLHRoaXMub3B0aW9ucy5yZXN1YnNjcmliZSYmYS51bnN1YnNjcmlwdGlvbnMuZm9yRWFjaCh1PT57ZGVsZXRlIHRoaXMuX3Jlc3Vic2NyaWJlVG9waWNzW3VdO30pLHR5cGVvZiByPT1cIm9iamVjdFwiJiZyLnByb3BlcnRpZXMmJihhLnByb3BlcnRpZXM9ci5wcm9wZXJ0aWVzKSx0aGlzLm91dGdvaW5nW2EubWVzc2FnZUlkXT17dm9sYXRpbGU6ITAsY2I6aX0sdGhpcy5sb2coXCJ1bnN1YnNjcmliZTogY2FsbCBfc2VuZFBhY2tldFwiKSx0aGlzLl9zZW5kUGFja2V0KGEpLCEwfTtyZXR1cm4gKHRoaXMuX3N0b3JlUHJvY2Vzc2luZ3x8dGhpcy5fc3RvcmVQcm9jZXNzaW5nUXVldWUubGVuZ3RoPjB8fCFvKCkpJiZ0aGlzLl9zdG9yZVByb2Nlc3NpbmdRdWV1ZS5wdXNoKHtpbnZva2U6byxjYWxsYmFjazppfSksdGhpc311bnN1YnNjcmliZUFzeW5jKGUscil7cmV0dXJuIG5ldyBQcm9taXNlKChpLG4pPT57dGhpcy51bnN1YnNjcmliZShlLHIsKG8scyk9PntvP24obyk6aShzKTt9KTt9KX1lbmQoZSxyLGkpe3RoaXMubG9nKFwiZW5kIDo6ICglcylcIix0aGlzLm9wdGlvbnMuY2xpZW50SWQpLChlPT1udWxsfHx0eXBlb2YgZSE9XCJib29sZWFuXCIpJiYoaT1pfHxyLHI9ZSxlPSExKSx0eXBlb2YgciE9XCJvYmplY3RcIiYmKGk9aXx8cixyPW51bGwpLHRoaXMubG9nKFwiZW5kIDo6IGNiPyAlc1wiLCEhaSksKCFpfHx0eXBlb2YgaSE9XCJmdW5jdGlvblwiKSYmKGk9dGhpcy5ub29wKTtsZXQgbj0oKT0+e3RoaXMubG9nKFwiZW5kIDo6IGNsb3NlU3RvcmVzOiBjbG9zaW5nIGluY29taW5nIGFuZCBvdXRnb2luZyBzdG9yZXNcIiksdGhpcy5kaXNjb25uZWN0ZWQ9ITAsdGhpcy5pbmNvbWluZ1N0b3JlLmNsb3NlKHM9Pnt0aGlzLm91dGdvaW5nU3RvcmUuY2xvc2UoYT0+e2lmKHRoaXMubG9nKFwiZW5kIDo6IGNsb3NlU3RvcmVzOiBlbWl0dGluZyBlbmRcIiksdGhpcy5lbWl0KFwiZW5kXCIpLGkpe2xldCB1PXN8fGE7dGhpcy5sb2coXCJlbmQgOjogY2xvc2VTdG9yZXM6IGludm9raW5nIGNhbGxiYWNrIHdpdGggYXJnc1wiKSxpKHUpO319KTt9KSx0aGlzLl9kZWZlcnJlZFJlY29ubmVjdCYmdGhpcy5fZGVmZXJyZWRSZWNvbm5lY3QoKTt9LG89KCk9Pnt0aGlzLmxvZyhcImVuZCA6OiAoJXMpIDo6IGZpbmlzaCA6OiBjYWxsaW5nIF9jbGVhblVwIHdpdGggZm9yY2UgJXNcIix0aGlzLm9wdGlvbnMuY2xpZW50SWQsZSksdGhpcy5fY2xlYW5VcChlLCgpPT57dGhpcy5sb2coXCJlbmQgOjogZmluaXNoIDo6IGNhbGxpbmcgcHJvY2Vzcy5uZXh0VGljayBvbiBjbG9zZVN0b3Jlc1wiKSwoMCwgV2EubmV4dFRpY2spKG4pO30scik7fTtyZXR1cm4gdGhpcy5kaXNjb25uZWN0aW5nPyhpKCksdGhpcyk6KHRoaXMuX2NsZWFyUmVjb25uZWN0KCksdGhpcy5kaXNjb25uZWN0aW5nPSEwLCFlJiZPYmplY3Qua2V5cyh0aGlzLm91dGdvaW5nKS5sZW5ndGg+MD8odGhpcy5sb2coXCJlbmQgOjogKCVzKSA6OiBjYWxsaW5nIGZpbmlzaCBpbiAxMG1zIG9uY2Ugb3V0Z29pbmcgaXMgZW1wdHlcIix0aGlzLm9wdGlvbnMuY2xpZW50SWQpLHRoaXMub25jZShcIm91dGdvaW5nRW1wdHlcIixzZXRUaW1lb3V0LmJpbmQobnVsbCxvLDEwKSkpOih0aGlzLmxvZyhcImVuZCA6OiAoJXMpIDo6IGltbWVkaWF0ZWx5IGNhbGxpbmcgZmluaXNoXCIsdGhpcy5vcHRpb25zLmNsaWVudElkKSxvKCkpLHRoaXMpfWVuZEFzeW5jKGUscil7cmV0dXJuIG5ldyBQcm9taXNlKChpLG4pPT57dGhpcy5lbmQoZSxyLG89PntvP24obyk6aSgpO30pO30pfXJlbW92ZU91dGdvaW5nTWVzc2FnZShlKXtpZih0aGlzLm91dGdvaW5nW2VdKXtsZXR7Y2I6cn09dGhpcy5vdXRnb2luZ1tlXTt0aGlzLl9yZW1vdmVPdXRnb2luZ0FuZFN0b3JlTWVzc2FnZShlLCgpPT57cihuZXcgRXJyb3IoXCJNZXNzYWdlIHJlbW92ZWRcIikpO30pO31yZXR1cm4gdGhpc31yZWNvbm5lY3QoZSl7dGhpcy5sb2coXCJjbGllbnQgcmVjb25uZWN0XCIpO2xldCByPSgpPT57ZT8odGhpcy5vcHRpb25zLmluY29taW5nU3RvcmU9ZS5pbmNvbWluZ1N0b3JlLHRoaXMub3B0aW9ucy5vdXRnb2luZ1N0b3JlPWUub3V0Z29pbmdTdG9yZSk6KHRoaXMub3B0aW9ucy5pbmNvbWluZ1N0b3JlPW51bGwsdGhpcy5vcHRpb25zLm91dGdvaW5nU3RvcmU9bnVsbCksdGhpcy5pbmNvbWluZ1N0b3JlPXRoaXMub3B0aW9ucy5pbmNvbWluZ1N0b3JlfHxuZXcgcnMuZGVmYXVsdCx0aGlzLm91dGdvaW5nU3RvcmU9dGhpcy5vcHRpb25zLm91dGdvaW5nU3RvcmV8fG5ldyBycy5kZWZhdWx0LHRoaXMuZGlzY29ubmVjdGluZz0hMSx0aGlzLmRpc2Nvbm5lY3RlZD0hMSx0aGlzLl9kZWZlcnJlZFJlY29ubmVjdD1udWxsLHRoaXMuX3JlY29ubmVjdCgpO307cmV0dXJuIHRoaXMuZGlzY29ubmVjdGluZyYmIXRoaXMuZGlzY29ubmVjdGVkP3RoaXMuX2RlZmVycmVkUmVjb25uZWN0PXI6cigpLHRoaXN9X2ZsdXNoVm9sYXRpbGUoKXt0aGlzLm91dGdvaW5nJiYodGhpcy5sb2coXCJfZmx1c2hWb2xhdGlsZSA6OiBkZWxldGluZyB2b2xhdGlsZSBtZXNzYWdlcyBmcm9tIHRoZSBxdWV1ZSBhbmQgc2V0dGluZyB0aGVpciBjYWxsYmFja3MgYXMgZXJyb3IgZnVuY3Rpb25cIiksT2JqZWN0LmtleXModGhpcy5vdXRnb2luZykuZm9yRWFjaChlPT57dGhpcy5vdXRnb2luZ1tlXS52b2xhdGlsZSYmdHlwZW9mIHRoaXMub3V0Z29pbmdbZV0uY2I9PVwiZnVuY3Rpb25cIiYmKHRoaXMub3V0Z29pbmdbZV0uY2IobmV3IEVycm9yKFwiQ29ubmVjdGlvbiBjbG9zZWRcIikpLGRlbGV0ZSB0aGlzLm91dGdvaW5nW2VdKTt9KSk7fV9mbHVzaCgpe3RoaXMub3V0Z29pbmcmJih0aGlzLmxvZyhcIl9mbHVzaDogcXVldWUgZXhpc3RzPyAlYlwiLCEhdGhpcy5vdXRnb2luZyksT2JqZWN0LmtleXModGhpcy5vdXRnb2luZykuZm9yRWFjaChlPT57dHlwZW9mIHRoaXMub3V0Z29pbmdbZV0uY2I9PVwiZnVuY3Rpb25cIiYmKHRoaXMub3V0Z29pbmdbZV0uY2IobmV3IEVycm9yKFwiQ29ubmVjdGlvbiBjbG9zZWRcIikpLGRlbGV0ZSB0aGlzLm91dGdvaW5nW2VdKTt9KSk7fV9yZW1vdmVUb3BpY0FsaWFzQW5kUmVjb3ZlclRvcGljTmFtZShlKXtsZXQgcjtlLnByb3BlcnRpZXMmJihyPWUucHJvcGVydGllcy50b3BpY0FsaWFzKTtsZXQgaT1lLnRvcGljLnRvU3RyaW5nKCk7aWYodGhpcy5sb2coXCJfcmVtb3ZlVG9waWNBbGlhc0FuZFJlY292ZXJUb3BpY05hbWUgOjogYWxpYXMgJWQsIHRvcGljICVvXCIscixpKSxpLmxlbmd0aD09PTApe2lmKHR5cGVvZiByPlwidVwiKXJldHVybiBuZXcgRXJyb3IoXCJVbnJlZ2lzdGVyZWQgVG9waWMgQWxpYXNcIik7aWYoaT10aGlzLnRvcGljQWxpYXNTZW5kLmdldFRvcGljQnlBbGlhcyhyKSx0eXBlb2YgaT5cInVcIilyZXR1cm4gbmV3IEVycm9yKFwiVW5yZWdpc3RlcmVkIFRvcGljIEFsaWFzXCIpO2UudG9waWM9aTt9ciYmZGVsZXRlIGUucHJvcGVydGllcy50b3BpY0FsaWFzO31fY2hlY2tEaXNjb25uZWN0aW5nKGUpe3JldHVybiB0aGlzLmRpc2Nvbm5lY3RpbmcmJihlJiZlIT09dGhpcy5ub29wP2UobmV3IEVycm9yKFwiY2xpZW50IGRpc2Nvbm5lY3RpbmdcIikpOnRoaXMuZW1pdChcImVycm9yXCIsbmV3IEVycm9yKFwiY2xpZW50IGRpc2Nvbm5lY3RpbmdcIikpKSx0aGlzLmRpc2Nvbm5lY3Rpbmd9X3JlY29ubmVjdCgpe3RoaXMubG9nKFwiX3JlY29ubmVjdDogZW1pdHRpbmcgcmVjb25uZWN0IHRvIGNsaWVudFwiKSx0aGlzLmVtaXQoXCJyZWNvbm5lY3RcIiksdGhpcy5jb25uZWN0ZWQ/KHRoaXMuZW5kKCgpPT57dGhpcy5jb25uZWN0KCk7fSksdGhpcy5sb2coXCJjbGllbnQgYWxyZWFkeSBjb25uZWN0ZWQuIGRpc2Nvbm5lY3RpbmcgZmlyc3QuXCIpKToodGhpcy5sb2coXCJfcmVjb25uZWN0OiBjYWxsaW5nIGNvbm5lY3RcIiksdGhpcy5jb25uZWN0KCkpO31fc2V0dXBSZWNvbm5lY3QoKXshdGhpcy5kaXNjb25uZWN0aW5nJiYhdGhpcy5yZWNvbm5lY3RUaW1lciYmdGhpcy5vcHRpb25zLnJlY29ubmVjdFBlcmlvZD4wPyh0aGlzLnJlY29ubmVjdGluZ3x8KHRoaXMubG9nKFwiX3NldHVwUmVjb25uZWN0IDo6IGVtaXQgYG9mZmxpbmVgIHN0YXRlXCIpLHRoaXMuZW1pdChcIm9mZmxpbmVcIiksdGhpcy5sb2coXCJfc2V0dXBSZWNvbm5lY3QgOjogc2V0IGByZWNvbm5lY3RpbmdgIHRvIGB0cnVlYFwiKSx0aGlzLnJlY29ubmVjdGluZz0hMCksdGhpcy5sb2coXCJfc2V0dXBSZWNvbm5lY3QgOjogc2V0dGluZyByZWNvbm5lY3RUaW1lciBmb3IgJWQgbXNcIix0aGlzLm9wdGlvbnMucmVjb25uZWN0UGVyaW9kKSx0aGlzLnJlY29ubmVjdFRpbWVyPXNldEludGVydmFsKCgpPT57dGhpcy5sb2coXCJyZWNvbm5lY3RUaW1lciA6OiByZWNvbm5lY3QgdHJpZ2dlcmVkIVwiKSx0aGlzLl9yZWNvbm5lY3QoKTt9LHRoaXMub3B0aW9ucy5yZWNvbm5lY3RQZXJpb2QpKTp0aGlzLmxvZyhcIl9zZXR1cFJlY29ubmVjdCA6OiBkb2luZyBub3RoaW5nLi4uXCIpO31fY2xlYXJSZWNvbm5lY3QoKXt0aGlzLmxvZyhcIl9jbGVhclJlY29ubmVjdCA6IGNsZWFyaW5nIHJlY29ubmVjdCB0aW1lclwiKSx0aGlzLnJlY29ubmVjdFRpbWVyJiYoY2xlYXJJbnRlcnZhbCh0aGlzLnJlY29ubmVjdFRpbWVyKSx0aGlzLnJlY29ubmVjdFRpbWVyPW51bGwpO31fY2xlYW5VcChlLHIsaT17fSl7aWYociYmKHRoaXMubG9nKFwiX2NsZWFuVXAgOjogZG9uZSBjYWxsYmFjayBwcm92aWRlZCBmb3Igb24gc3RyZWFtIGNsb3NlXCIpLHRoaXMuc3RyZWFtLm9uKFwiY2xvc2VcIixyKSksdGhpcy5sb2coXCJfY2xlYW5VcCA6OiBmb3JjZWQ/ICVzXCIsZSksZSl0aGlzLm9wdGlvbnMucmVjb25uZWN0UGVyaW9kPT09MCYmdGhpcy5vcHRpb25zLmNsZWFuJiZ0aGlzLl9mbHVzaCgpLHRoaXMubG9nKFwiX2NsZWFuVXAgOjogKCVzKSA6OiBkZXN0cm95aW5nIHN0cmVhbVwiLHRoaXMub3B0aW9ucy5jbGllbnRJZCksdGhpcy5zdHJlYW0uZGVzdHJveSgpO2Vsc2Uge2xldCBuPU9iamVjdC5hc3NpZ24oe2NtZDpcImRpc2Nvbm5lY3RcIn0saSk7dGhpcy5sb2coXCJfY2xlYW5VcCA6OiAoJXMpIDo6IGNhbGwgX3NlbmRQYWNrZXQgd2l0aCBkaXNjb25uZWN0IHBhY2tldFwiLHRoaXMub3B0aW9ucy5jbGllbnRJZCksdGhpcy5fc2VuZFBhY2tldChuLCgpPT57dGhpcy5sb2coXCJfY2xlYW5VcCA6OiAoJXMpIDo6IGRlc3Ryb3lpbmcgc3RyZWFtXCIsdGhpcy5vcHRpb25zLmNsaWVudElkKSxGYSgoKT0+e3RoaXMuc3RyZWFtLmVuZCgoKT0+e3RoaXMubG9nKFwiX2NsZWFuVXAgOjogKCVzKSA6OiBzdHJlYW0gZGVzdHJveWVkXCIsdGhpcy5vcHRpb25zLmNsaWVudElkKTt9KTt9KTt9KTt9IXRoaXMuZGlzY29ubmVjdGluZyYmIXRoaXMucmVjb25uZWN0aW5nJiYodGhpcy5sb2coXCJfY2xlYW5VcCA6OiBjbGllbnQgbm90IGRpc2Nvbm5lY3RpbmcvcmVjb25uZWN0aW5nLiBDbGVhcmluZyBhbmQgcmVzZXR0aW5nIHJlY29ubmVjdC5cIiksdGhpcy5fY2xlYXJSZWNvbm5lY3QoKSx0aGlzLl9zZXR1cFJlY29ubmVjdCgpKSx0aGlzLnBpbmdUaW1lciYmKHRoaXMubG9nKFwiX2NsZWFuVXAgOjogY2xlYXJpbmcgcGluZ1RpbWVyXCIpLHRoaXMucGluZ1RpbWVyLmNsZWFyKCksdGhpcy5waW5nVGltZXI9bnVsbCksciYmIXRoaXMuY29ubmVjdGVkJiYodGhpcy5sb2coXCJfY2xlYW5VcCA6OiAoJXMpIDo6IHJlbW92aW5nIHN0cmVhbSBgZG9uZWAgY2FsbGJhY2sgYGNsb3NlYCBsaXN0ZW5lclwiLHRoaXMub3B0aW9ucy5jbGllbnRJZCksdGhpcy5zdHJlYW0ucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLHIpLHIoKSk7fV9zdG9yZUFuZFNlbmQoZSxyLGkpe3RoaXMubG9nKFwic3RvcmVBbmRTZW5kIDo6IHN0b3JlIHBhY2tldCB3aXRoIGNtZCAlcyB0byBvdXRnb2luZ1N0b3JlXCIsZS5jbWQpO2xldCBuPWUsbztpZihuLmNtZD09PVwicHVibGlzaFwiJiYobj0oMCwgcXAuZGVmYXVsdCkoZSksbz10aGlzLl9yZW1vdmVUb3BpY0FsaWFzQW5kUmVjb3ZlclRvcGljTmFtZShuKSxvKSlyZXR1cm4gciYmcihvKTt0aGlzLm91dGdvaW5nU3RvcmUucHV0KG4scz0+e2lmKHMpcmV0dXJuIHImJnIocyk7aSgpLHRoaXMuX3dyaXRlUGFja2V0KGUscik7fSk7fV9hcHBseVRvcGljQWxpYXMoZSl7aWYodGhpcy5vcHRpb25zLnByb3RvY29sVmVyc2lvbj09PTUmJmUuY21kPT09XCJwdWJsaXNoXCIpe2xldCByO2UucHJvcGVydGllcyYmKHI9ZS5wcm9wZXJ0aWVzLnRvcGljQWxpYXMpO2xldCBpPWUudG9waWMudG9TdHJpbmcoKTtpZih0aGlzLnRvcGljQWxpYXNTZW5kKWlmKHIpe2lmKGkubGVuZ3RoIT09MCYmKHRoaXMubG9nKFwiYXBwbHlUb3BpY0FsaWFzIDo6IHJlZ2lzdGVyIHRvcGljOiAlcyAtIGFsaWFzOiAlZFwiLGksciksIXRoaXMudG9waWNBbGlhc1NlbmQucHV0KGkscikpKXJldHVybiB0aGlzLmxvZyhcImFwcGx5VG9waWNBbGlhcyA6OiBlcnJvciBvdXQgb2YgcmFuZ2UuIHRvcGljOiAlcyAtIGFsaWFzOiAlZFwiLGksciksbmV3IEVycm9yKFwiU2VuZGluZyBUb3BpYyBBbGlhcyBvdXQgb2YgcmFuZ2VcIil9ZWxzZSBpLmxlbmd0aCE9PTAmJih0aGlzLm9wdGlvbnMuYXV0b0Fzc2lnblRvcGljQWxpYXM/KHI9dGhpcy50b3BpY0FsaWFzU2VuZC5nZXRBbGlhc0J5VG9waWMoaSkscj8oZS50b3BpYz1cIlwiLGUucHJvcGVydGllcz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZS5wcm9wZXJ0aWVzKSx7dG9waWNBbGlhczpyfSksdGhpcy5sb2coXCJhcHBseVRvcGljQWxpYXMgOjogYXV0byBhc3NpZ24odXNlKSB0b3BpYzogJXMgLSBhbGlhczogJWRcIixpLHIpKToocj10aGlzLnRvcGljQWxpYXNTZW5kLmdldExydUFsaWFzKCksdGhpcy50b3BpY0FsaWFzU2VuZC5wdXQoaSxyKSxlLnByb3BlcnRpZXM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUucHJvcGVydGllcykse3RvcGljQWxpYXM6cn0pLHRoaXMubG9nKFwiYXBwbHlUb3BpY0FsaWFzIDo6IGF1dG8gYXNzaWduIHRvcGljOiAlcyAtIGFsaWFzOiAlZFwiLGkscikpKTp0aGlzLm9wdGlvbnMuYXV0b1VzZVRvcGljQWxpYXMmJihyPXRoaXMudG9waWNBbGlhc1NlbmQuZ2V0QWxpYXNCeVRvcGljKGkpLHImJihlLnRvcGljPVwiXCIsZS5wcm9wZXJ0aWVzPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlLnByb3BlcnRpZXMpLHt0b3BpY0FsaWFzOnJ9KSx0aGlzLmxvZyhcImFwcGx5VG9waWNBbGlhcyA6OiBhdXRvIHVzZSB0b3BpYzogJXMgLSBhbGlhczogJWRcIixpLHIpKSkpO2Vsc2UgaWYocilyZXR1cm4gdGhpcy5sb2coXCJhcHBseVRvcGljQWxpYXMgOjogZXJyb3Igb3V0IG9mIHJhbmdlLiB0b3BpYzogJXMgLSBhbGlhczogJWRcIixpLHIpLG5ldyBFcnJvcihcIlNlbmRpbmcgVG9waWMgQWxpYXMgb3V0IG9mIHJhbmdlXCIpfX1fbm9vcChlKXt0aGlzLmxvZyhcIm5vb3AgOjpcIixlKTt9X3dyaXRlUGFja2V0KGUscil7dGhpcy5sb2coXCJfd3JpdGVQYWNrZXQgOjogcGFja2V0OiAlT1wiLGUpLHRoaXMubG9nKFwiX3dyaXRlUGFja2V0IDo6IGVtaXR0aW5nIGBwYWNrZXRzZW5kYFwiKSx0aGlzLmVtaXQoXCJwYWNrZXRzZW5kXCIsZSksdGhpcy5fc2hpZnRQaW5nSW50ZXJ2YWwoKSx0aGlzLmxvZyhcIl93cml0ZVBhY2tldCA6OiB3cml0aW5nIHRvIHN0cmVhbVwiKTtsZXQgaT1qYS5kZWZhdWx0LndyaXRlVG9TdHJlYW0oZSx0aGlzLnN0cmVhbSx0aGlzLm9wdGlvbnMpO3RoaXMubG9nKFwiX3dyaXRlUGFja2V0IDo6IHdyaXRlVG9TdHJlYW0gcmVzdWx0ICVzXCIsaSksIWkmJnImJnIhPT10aGlzLm5vb3A/KHRoaXMubG9nKFwiX3dyaXRlUGFja2V0IDo6IGhhbmRsZSBldmVudHMgb24gYGRyYWluYCBvbmNlIHRocm91Z2ggY2FsbGJhY2suXCIpLHRoaXMuc3RyZWFtLm9uY2UoXCJkcmFpblwiLHIpKTpyJiYodGhpcy5sb2coXCJfd3JpdGVQYWNrZXQgOjogaW52b2tpbmcgY2JcIikscigpKTt9X3NlbmRQYWNrZXQoZSxyLGksbil7dGhpcy5sb2coXCJfc2VuZFBhY2tldCA6OiAoJXMpIDo6ICBzdGFydFwiLHRoaXMub3B0aW9ucy5jbGllbnRJZCksaT1pfHx0aGlzLm5vb3Ascj1yfHx0aGlzLm5vb3A7bGV0IG89dGhpcy5fYXBwbHlUb3BpY0FsaWFzKGUpO2lmKG8pe3Iobyk7cmV0dXJufWlmKCF0aGlzLmNvbm5lY3RlZCl7aWYoZS5jbWQ9PT1cImF1dGhcIil7dGhpcy5fd3JpdGVQYWNrZXQoZSxyKTtyZXR1cm59dGhpcy5sb2coXCJfc2VuZFBhY2tldCA6OiBjbGllbnQgbm90IGNvbm5lY3RlZC4gU3RvcmluZyBwYWNrZXQgb2ZmbGluZS5cIiksdGhpcy5fc3RvcmVQYWNrZXQoZSxyLGkpO3JldHVybn1pZihuKXt0aGlzLl93cml0ZVBhY2tldChlLHIpO3JldHVybn1zd2l0Y2goZS5jbWQpe2Nhc2VcInB1Ymxpc2hcIjpicmVhaztjYXNlXCJwdWJyZWxcIjp0aGlzLl9zdG9yZUFuZFNlbmQoZSxyLGkpO3JldHVybjtkZWZhdWx0OnRoaXMuX3dyaXRlUGFja2V0KGUscik7cmV0dXJufXN3aXRjaChlLnFvcyl7Y2FzZSAyOmNhc2UgMTp0aGlzLl9zdG9yZUFuZFNlbmQoZSxyLGkpO2JyZWFrO2Nhc2UgMDpkZWZhdWx0OnRoaXMuX3dyaXRlUGFja2V0KGUscik7YnJlYWt9dGhpcy5sb2coXCJfc2VuZFBhY2tldCA6OiAoJXMpIDo6ICBlbmRcIix0aGlzLm9wdGlvbnMuY2xpZW50SWQpO31fc3RvcmVQYWNrZXQoZSxyLGkpe3RoaXMubG9nKFwiX3N0b3JlUGFja2V0IDo6IHBhY2tldDogJW9cIixlKSx0aGlzLmxvZyhcIl9zdG9yZVBhY2tldCA6OiBjYj8gJXNcIiwhIXIpLGk9aXx8dGhpcy5ub29wO2xldCBuPWU7aWYobi5jbWQ9PT1cInB1Ymxpc2hcIil7bj0oMCwgcXAuZGVmYXVsdCkoZSk7bGV0IHM9dGhpcy5fcmVtb3ZlVG9waWNBbGlhc0FuZFJlY292ZXJUb3BpY05hbWUobik7aWYocylyZXR1cm4gciYmcihzKX1sZXQgbz1uLnFvc3x8MDtvPT09MCYmdGhpcy5xdWV1ZVFvU1plcm98fG4uY21kIT09XCJwdWJsaXNoXCI/dGhpcy5xdWV1ZS5wdXNoKHtwYWNrZXQ6bixjYjpyfSk6bz4wPyhyPXRoaXMub3V0Z29pbmdbbi5tZXNzYWdlSWRdP3RoaXMub3V0Z29pbmdbbi5tZXNzYWdlSWRdLmNiOm51bGwsdGhpcy5vdXRnb2luZ1N0b3JlLnB1dChuLHM9PntpZihzKXJldHVybiByJiZyKHMpO2koKTt9KSk6ciYmcihuZXcgRXJyb3IoXCJObyBjb25uZWN0aW9uIHRvIGJyb2tlclwiKSk7fV9zZXR1cFBpbmdUaW1lcigpe3RoaXMubG9nKFwiX3NldHVwUGluZ1RpbWVyIDo6IGtlZXBhbGl2ZSAlZCAoc2Vjb25kcylcIix0aGlzLm9wdGlvbnMua2VlcGFsaXZlKSwhdGhpcy5waW5nVGltZXImJnRoaXMub3B0aW9ucy5rZWVwYWxpdmUmJih0aGlzLnBpbmdSZXNwPSEwLHRoaXMucGluZ1RpbWVyPW5ldyBYdi5kZWZhdWx0KHRoaXMub3B0aW9ucy5rZWVwYWxpdmUsKCk9Pnt0aGlzLl9jaGVja1BpbmcoKTt9LHRoaXMub3B0aW9ucy50aW1lclZhcmlhbnQpKTt9X3NoaWZ0UGluZ0ludGVydmFsKCl7dGhpcy5waW5nVGltZXImJnRoaXMub3B0aW9ucy5rZWVwYWxpdmUmJnRoaXMub3B0aW9ucy5yZXNjaGVkdWxlUGluZ3MmJnRoaXMucGluZ1RpbWVyLnJlc2NoZWR1bGUoKTt9X2NoZWNrUGluZygpe3RoaXMubG9nKFwiX2NoZWNrUGluZyA6OiBjaGVja2luZyBwaW5nLi4uXCIpLHRoaXMucGluZ1Jlc3A/KHRoaXMubG9nKFwiX2NoZWNrUGluZyA6OiBwaW5nIHJlc3BvbnNlIHJlY2VpdmVkLiBDbGVhcmluZyBmbGFnIGFuZCBzZW5kaW5nIGBwaW5ncmVxYFwiKSx0aGlzLnBpbmdSZXNwPSExLHRoaXMuX3NlbmRQYWNrZXQoe2NtZDpcInBpbmdyZXFcIn0pKToodGhpcy5lbWl0KFwiZXJyb3JcIixuZXcgRXJyb3IoXCJLZWVwYWxpdmUgdGltZW91dFwiKSksdGhpcy5sb2coXCJfY2hlY2tQaW5nIDo6IGNhbGxpbmcgX2NsZWFuVXAgd2l0aCBmb3JjZSB0cnVlXCIpLHRoaXMuX2NsZWFuVXAoITApKTt9X3Jlc3Vic2NyaWJlKCl7dGhpcy5sb2coXCJfcmVzdWJzY3JpYmVcIik7bGV0IGU9T2JqZWN0LmtleXModGhpcy5fcmVzdWJzY3JpYmVUb3BpY3MpO2lmKCF0aGlzLl9maXJzdENvbm5lY3Rpb24mJih0aGlzLm9wdGlvbnMuY2xlYW58fHRoaXMub3B0aW9ucy5wcm90b2NvbFZlcnNpb24+PTQmJiF0aGlzLmNvbm5hY2tQYWNrZXQuc2Vzc2lvblByZXNlbnQpJiZlLmxlbmd0aD4wKWlmKHRoaXMub3B0aW9ucy5yZXN1YnNjcmliZSlpZih0aGlzLm9wdGlvbnMucHJvdG9jb2xWZXJzaW9uPT09NSl7dGhpcy5sb2coXCJfcmVzdWJzY3JpYmU6IHByb3RvY29sVmVyc2lvbiA1XCIpO2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7cisrKXtsZXQgaT17fTtpW2Vbcl1dPXRoaXMuX3Jlc3Vic2NyaWJlVG9waWNzW2Vbcl1dLGkucmVzdWJzY3JpYmU9ITAsdGhpcy5zdWJzY3JpYmUoaSx7cHJvcGVydGllczppW2Vbcl1dLnByb3BlcnRpZXN9KTt9fWVsc2UgdGhpcy5fcmVzdWJzY3JpYmVUb3BpY3MucmVzdWJzY3JpYmU9ITAsdGhpcy5zdWJzY3JpYmUodGhpcy5fcmVzdWJzY3JpYmVUb3BpY3MpO2Vsc2UgdGhpcy5fcmVzdWJzY3JpYmVUb3BpY3M9e307dGhpcy5fZmlyc3RDb25uZWN0aW9uPSExO31fb25Db25uZWN0KGUpe2lmKHRoaXMuZGlzY29ubmVjdGVkKXt0aGlzLmVtaXQoXCJjb25uZWN0XCIsZSk7cmV0dXJufXRoaXMuY29ubmFja1BhY2tldD1lLHRoaXMubWVzc2FnZUlkUHJvdmlkZXIuY2xlYXIoKSx0aGlzLl9zZXR1cFBpbmdUaW1lcigpLHRoaXMuY29ubmVjdGVkPSEwO2xldCByPSgpPT57bGV0IGk9dGhpcy5vdXRnb2luZ1N0b3JlLmNyZWF0ZVN0cmVhbSgpLG49KCk9PntpLmRlc3Ryb3koKSxpPW51bGwsdGhpcy5fZmx1c2hTdG9yZVByb2Nlc3NpbmdRdWV1ZSgpLG8oKTt9LG89KCk9Pnt0aGlzLl9zdG9yZVByb2Nlc3Npbmc9ITEsdGhpcy5fcGFja2V0SWRzRHVyaW5nU3RvcmVQcm9jZXNzaW5nPXt9O307dGhpcy5vbmNlKFwiY2xvc2VcIixuKSxpLm9uKFwiZXJyb3JcIixhPT57bygpLHRoaXMuX2ZsdXNoU3RvcmVQcm9jZXNzaW5nUXVldWUoKSx0aGlzLnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIixuKSx0aGlzLmVtaXQoXCJlcnJvclwiLGEpO30pO2xldCBzPSgpPT57aWYoIWkpcmV0dXJuO2xldCBhPWkucmVhZCgxKSx1O2lmKCFhKXtpLm9uY2UoXCJyZWFkYWJsZVwiLHMpO3JldHVybn1pZih0aGlzLl9zdG9yZVByb2Nlc3Npbmc9ITAsdGhpcy5fcGFja2V0SWRzRHVyaW5nU3RvcmVQcm9jZXNzaW5nW2EubWVzc2FnZUlkXSl7cygpO3JldHVybn0hdGhpcy5kaXNjb25uZWN0aW5nJiYhdGhpcy5yZWNvbm5lY3RUaW1lcj8odT10aGlzLm91dGdvaW5nW2EubWVzc2FnZUlkXT90aGlzLm91dGdvaW5nW2EubWVzc2FnZUlkXS5jYjpudWxsLHRoaXMub3V0Z29pbmdbYS5tZXNzYWdlSWRdPXt2b2xhdGlsZTohMSxjYihjLGgpe3UmJnUoYyxoKSxzKCk7fX0sdGhpcy5fcGFja2V0SWRzRHVyaW5nU3RvcmVQcm9jZXNzaW5nW2EubWVzc2FnZUlkXT0hMCx0aGlzLm1lc3NhZ2VJZFByb3ZpZGVyLnJlZ2lzdGVyKGEubWVzc2FnZUlkKT90aGlzLl9zZW5kUGFja2V0KGEsdm9pZCAwLHZvaWQgMCwhMCk6dGhpcy5sb2coXCJtZXNzYWdlSWQ6ICVkIGhhcyBhbHJlYWR5IHVzZWQuXCIsYS5tZXNzYWdlSWQpKTppLmRlc3Ryb3kmJmkuZGVzdHJveSgpO307aS5vbihcImVuZFwiLCgpPT57bGV0IGE9ITA7Zm9yKGxldCB1IGluIHRoaXMuX3BhY2tldElkc0R1cmluZ1N0b3JlUHJvY2Vzc2luZylpZighdGhpcy5fcGFja2V0SWRzRHVyaW5nU3RvcmVQcm9jZXNzaW5nW3VdKXthPSExO2JyZWFrfXRoaXMucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLG4pLGE/KG8oKSx0aGlzLl9pbnZva2VBbGxTdG9yZVByb2Nlc3NpbmdRdWV1ZSgpLHRoaXMuZW1pdChcImNvbm5lY3RcIixlKSk6cigpO30pLHMoKTt9O3IoKTt9X2ludm9rZVN0b3JlUHJvY2Vzc2luZ1F1ZXVlKCl7aWYoIXRoaXMuX3N0b3JlUHJvY2Vzc2luZyYmdGhpcy5fc3RvcmVQcm9jZXNzaW5nUXVldWUubGVuZ3RoPjApe2xldCBlPXRoaXMuX3N0b3JlUHJvY2Vzc2luZ1F1ZXVlWzBdO2lmKGUmJmUuaW52b2tlKCkpcmV0dXJuIHRoaXMuX3N0b3JlUHJvY2Vzc2luZ1F1ZXVlLnNoaWZ0KCksITB9cmV0dXJuICExfV9pbnZva2VBbGxTdG9yZVByb2Nlc3NpbmdRdWV1ZSgpe2Zvcig7dGhpcy5faW52b2tlU3RvcmVQcm9jZXNzaW5nUXVldWUoKTspO31fZmx1c2hTdG9yZVByb2Nlc3NpbmdRdWV1ZSgpe2ZvcihsZXQgZSBvZiB0aGlzLl9zdG9yZVByb2Nlc3NpbmdRdWV1ZSllLmNiU3RvcmVQdXQmJmUuY2JTdG9yZVB1dChuZXcgRXJyb3IoXCJDb25uZWN0aW9uIGNsb3NlZFwiKSksZS5jYWxsYmFjayYmZS5jYWxsYmFjayhuZXcgRXJyb3IoXCJDb25uZWN0aW9uIGNsb3NlZFwiKSk7dGhpcy5fc3RvcmVQcm9jZXNzaW5nUXVldWUuc3BsaWNlKDApO31fcmVtb3ZlT3V0Z29pbmdBbmRTdG9yZU1lc3NhZ2UoZSxyKXtkZWxldGUgdGhpcy5vdXRnb2luZ1tlXSx0aGlzLm91dGdvaW5nU3RvcmUuZGVsKHttZXNzYWdlSWQ6ZX0sKGksbik9PntyKGksbiksdGhpcy5tZXNzYWdlSWRQcm92aWRlci5kZWFsbG9jYXRlKGUpLHRoaXMuX2ludm9rZVN0b3JlUHJvY2Vzc2luZ1F1ZXVlKCk7fSk7fX07aXMuVkVSU0lPTj1cIjUuNS4yXCI7UWUuZGVmYXVsdD1pczt9KTt2YXIgJHA9TShIYT0+e3YoKTttKCk7XygpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShIYSxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgWnY9eGEoKSwkYT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMubnVtYmVyQWxsb2NhdG9yPW5ldyBadi5OdW1iZXJBbGxvY2F0b3IoMSw2NTUzNSk7fWFsbG9jYXRlKCl7cmV0dXJuIHRoaXMubGFzdElkPXRoaXMubnVtYmVyQWxsb2NhdG9yLmFsbG9jKCksdGhpcy5sYXN0SWR9Z2V0TGFzdEFsbG9jYXRlZCgpe3JldHVybiB0aGlzLmxhc3RJZH1yZWdpc3RlcihlKXtyZXR1cm4gdGhpcy5udW1iZXJBbGxvY2F0b3IudXNlKGUpfWRlYWxsb2NhdGUoZSl7dGhpcy5udW1iZXJBbGxvY2F0b3IuZnJlZShlKTt9Y2xlYXIoKXt0aGlzLm51bWJlckFsbG9jYXRvci5jbGVhcigpO319O0hhLmRlZmF1bHQ9JGE7fSk7ZnVuY3Rpb24gSXIodCl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoaUVbdF0pfWZ1bmN0aW9uIEhwKHQsZSl7bGV0IHI9dC5zcGxpdChcIkBcIiksaT1cIlwiO3IubGVuZ3RoPjEmJihpPXJbMF0rXCJAXCIsdD1yWzFdKTtsZXQgbj1mdW5jdGlvbihvLHMpe2xldCBhPVtdLHU9by5sZW5ndGg7Zm9yKDt1LS07KWFbdV09cyhvW3VdKTtyZXR1cm4gYX0oKHQ9dC5yZXBsYWNlKHJFLFwiLlwiKSkuc3BsaXQoXCIuXCIpLGUpLmpvaW4oXCIuXCIpO3JldHVybiBpK259ZnVuY3Rpb24gR3AodCl7bGV0IGU9W10scj0wLGk9dC5sZW5ndGg7Zm9yKDtyPGk7KXtsZXQgbj10LmNoYXJDb2RlQXQocisrKTtpZihuPj01NTI5NiYmbjw9NTYzMTkmJnI8aSl7bGV0IG89dC5jaGFyQ29kZUF0KHIrKyk7KDY0NTEyJm8pPT01NjMyMD9lLnB1c2goKCgxMDIzJm4pPDwxMCkrKDEwMjMmbykrNjU1MzYpOihlLnB1c2gobiksci0tKTt9ZWxzZSBlLnB1c2gobik7fXJldHVybiBlfXZhciBlRSx0RSxyRSxpRSxodCxWYSxWcCxRcCx6cCxLcCx6dCxZcD13ZSgoKT0+e3YoKTttKCk7XygpO2VFPS9eeG4tLS8sdEU9L1teXFwwLVxceDdFXS8sckU9L1tcXHgyRVxcdTMwMDJcXHVGRjBFXFx1RkY2MV0vZyxpRT17b3ZlcmZsb3c6XCJPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8gcHJvY2Vzc1wiLFwibm90LWJhc2ljXCI6XCJJbGxlZ2FsIGlucHV0ID49IDB4ODAgKG5vdCBhIGJhc2ljIGNvZGUgcG9pbnQpXCIsXCJpbnZhbGlkLWlucHV0XCI6XCJJbnZhbGlkIGlucHV0XCJ9LGh0PU1hdGguZmxvb3IsVmE9U3RyaW5nLmZyb21DaGFyQ29kZTtWcD1mdW5jdGlvbih0LGUpe3JldHVybiB0KzIyKzc1Kih0PDI2KS0oKGUhPTApPDw1KX0sUXA9ZnVuY3Rpb24odCxlLHIpe2xldCBpPTA7Zm9yKHQ9cj9odCh0LzcwMCk6dD4+MSx0Kz1odCh0L2UpO3Q+NDU1O2krPTM2KXQ9aHQodC8zNSk7cmV0dXJuIGh0KGkrMzYqdC8odCszOCkpfSx6cD1mdW5jdGlvbih0KXtsZXQgZT1bXSxyPXQubGVuZ3RoLGk9MCxuPTEyOCxvPTcyLHM9dC5sYXN0SW5kZXhPZihcIi1cIik7czwwJiYocz0wKTtmb3IobGV0IHU9MDt1PHM7Kyt1KXQuY2hhckNvZGVBdCh1KT49MTI4JiZJcihcIm5vdC1iYXNpY1wiKSxlLnB1c2godC5jaGFyQ29kZUF0KHUpKTtmb3IobGV0IHU9cz4wP3MrMTowO3U8cjspe2xldCBjPWk7Zm9yKGxldCBkPTEsZz0zNjs7Zys9MzYpe3U+PXImJklyKFwiaW52YWxpZC1pbnB1dFwiKTtsZXQgeT0oYT10LmNoYXJDb2RlQXQodSsrKSktNDg8MTA/YS0yMjphLTY1PDI2P2EtNjU6YS05NzwyNj9hLTk3OjM2Oyh5Pj0zNnx8eT5odCgoMjE0NzQ4MzY0Ny1pKS9kKSkmJklyKFwib3ZlcmZsb3dcIiksaSs9eSpkO2xldCB3PWc8PW8/MTpnPj1vKzI2PzI2OmctbztpZih5PHcpYnJlYWs7bGV0IEU9MzYtdztkPmh0KDIxNDc0ODM2NDcvRSkmJklyKFwib3ZlcmZsb3dcIiksZCo9RTt9bGV0IGg9ZS5sZW5ndGgrMTtvPVFwKGktYyxoLGM9PTApLGh0KGkvaCk+MjE0NzQ4MzY0Ny1uJiZJcihcIm92ZXJmbG93XCIpLG4rPWh0KGkvaCksaSU9aCxlLnNwbGljZShpKyssMCxuKTt9dmFyIGE7cmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KC4uLmUpfSxLcD1mdW5jdGlvbih0KXtsZXQgZT1bXSxyPSh0PUdwKHQpKS5sZW5ndGgsaT0xMjgsbj0wLG89NzI7Zm9yKGxldCB1IG9mIHQpdTwxMjgmJmUucHVzaChWYSh1KSk7bGV0IHM9ZS5sZW5ndGgsYT1zO2ZvcihzJiZlLnB1c2goXCItXCIpO2E8cjspe2xldCB1PTIxNDc0ODM2NDc7Zm9yKGxldCBoIG9mIHQpaD49aSYmaDx1JiYodT1oKTtsZXQgYz1hKzE7dS1pPmh0KCgyMTQ3NDgzNjQ3LW4pL2MpJiZJcihcIm92ZXJmbG93XCIpLG4rPSh1LWkpKmMsaT11O2ZvcihsZXQgaCBvZiB0KWlmKGg8aSYmKytuPjIxNDc0ODM2NDcmJklyKFwib3ZlcmZsb3dcIiksaD09aSl7bGV0IGQ9bjtmb3IobGV0IGc9MzY7O2crPTM2KXtsZXQgeT1nPD1vPzE6Zz49bysyNj8yNjpnLW87aWYoZDx5KWJyZWFrO2xldCB3PWQteSxFPTM2LXk7ZS5wdXNoKFZhKFZwKHkrdyVFLDApKSksZD1odCh3L0UpO31lLnB1c2goVmEoVnAoZCwwKSkpLG89UXAobixjLGE9PXMpLG49MCwrK2E7fSsrbiwrK2k7fXJldHVybiBlLmpvaW4oXCJcIil9LHp0PXt2ZXJzaW9uOlwiMi4xLjBcIix1Y3MyOntkZWNvZGU6R3AsZW5jb2RlOnQ9PlN0cmluZy5mcm9tQ29kZVBvaW50KC4uLnQpfSxkZWNvZGU6enAsZW5jb2RlOktwLHRvQVNDSUk6ZnVuY3Rpb24odCl7cmV0dXJuIEhwKHQsZnVuY3Rpb24oZSl7cmV0dXJuIHRFLnRlc3QoZSk/XCJ4bi0tXCIrS3AoZSk6ZX0pfSx0b1VuaWNvZGU6ZnVuY3Rpb24odCl7cmV0dXJuIEhwKHQsZnVuY3Rpb24oZSl7cmV0dXJuIGVFLnRlc3QoZSk/enAoZS5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKTplfSl9fTt6dC5kZWNvZGU7enQuZW5jb2RlO3p0LnRvQVNDSUk7enQudG9Vbmljb2RlO3p0LnVjczI7enQudmVyc2lvbjt9KTtmdW5jdGlvbiBuRSh0LGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKX12YXIgc0Usa2ksb0UsZHQsSnA9d2UoKCk9Pnt2KCk7bSgpO18oKTtzRT1mdW5jdGlvbih0LGUscixpKXtlPWV8fFwiJlwiLHI9cnx8XCI9XCI7dmFyIG49e307aWYodHlwZW9mIHQhPVwic3RyaW5nXCJ8fHQubGVuZ3RoPT09MClyZXR1cm4gbjt2YXIgbz0vXFwrL2c7dD10LnNwbGl0KGUpO3ZhciBzPTFlMztpJiZ0eXBlb2YgaS5tYXhLZXlzPT1cIm51bWJlclwiJiYocz1pLm1heEtleXMpO3ZhciBhPXQubGVuZ3RoO3M+MCYmYT5zJiYoYT1zKTtmb3IodmFyIHU9MDt1PGE7Kyt1KXt2YXIgYyxoLGQsZyx5PXRbdV0ucmVwbGFjZShvLFwiJTIwXCIpLHc9eS5pbmRleE9mKHIpO3c+PTA/KGM9eS5zdWJzdHIoMCx3KSxoPXkuc3Vic3RyKHcrMSkpOihjPXksaD1cIlwiKSxkPWRlY29kZVVSSUNvbXBvbmVudChjKSxnPWRlY29kZVVSSUNvbXBvbmVudChoKSxuRShuLGQpP0FycmF5LmlzQXJyYXkobltkXSk/bltkXS5wdXNoKGcpOm5bZF09W25bZF0sZ106bltkXT1nO31yZXR1cm4gbn0sa2k9ZnVuY3Rpb24odCl7c3dpdGNoKHR5cGVvZiB0KXtjYXNlXCJzdHJpbmdcIjpyZXR1cm4gdDtjYXNlXCJib29sZWFuXCI6cmV0dXJuIHQ/XCJ0cnVlXCI6XCJmYWxzZVwiO2Nhc2VcIm51bWJlclwiOnJldHVybiBpc0Zpbml0ZSh0KT90OlwiXCI7ZGVmYXVsdDpyZXR1cm4gXCJcIn19LG9FPWZ1bmN0aW9uKHQsZSxyLGkpe3JldHVybiBlPWV8fFwiJlwiLHI9cnx8XCI9XCIsdD09PW51bGwmJih0PXZvaWQgMCksdHlwZW9mIHQ9PVwib2JqZWN0XCI/T2JqZWN0LmtleXModCkubWFwKGZ1bmN0aW9uKG4pe3ZhciBvPWVuY29kZVVSSUNvbXBvbmVudChraShuKSkrcjtyZXR1cm4gQXJyYXkuaXNBcnJheSh0W25dKT90W25dLm1hcChmdW5jdGlvbihzKXtyZXR1cm4gbytlbmNvZGVVUklDb21wb25lbnQoa2kocykpfSkuam9pbihlKTpvK2VuY29kZVVSSUNvbXBvbmVudChraSh0W25dKSl9KS5qb2luKGUpOmk/ZW5jb2RlVVJJQ29tcG9uZW50KGtpKGkpKStyK2VuY29kZVVSSUNvbXBvbmVudChraSh0KSk6XCJcIn0sZHQ9e307ZHQuZGVjb2RlPWR0LnBhcnNlPXNFLGR0LmVuY29kZT1kdC5zdHJpbmdpZnk9b0U7ZHQuZGVjb2RlO2R0LmVuY29kZTtkdC5wYXJzZTtkdC5zdHJpbmdpZnk7fSk7ZnVuY3Rpb24gemEoKXt0aHJvdyBuZXcgRXJyb3IoXCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkXCIpfWZ1bmN0aW9uIEthKCl7dGhyb3cgbmV3IEVycm9yKFwiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkXCIpfWZ1bmN0aW9uIGVnKHQpe2lmKEJ0PT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dCh0LDApO2lmKChCdD09PXphfHwhQnQpJiZzZXRUaW1lb3V0KXJldHVybiBCdD1zZXRUaW1lb3V0LHNldFRpbWVvdXQodCwwKTt0cnl7cmV0dXJuIEJ0KHQsMCl9Y2F0Y2h7dHJ5e3JldHVybiBCdC5jYWxsKG51bGwsdCwwKX1jYXRjaHtyZXR1cm4gQnQuY2FsbCh0aGlzfHxpaSx0LDApfX19ZnVuY3Rpb24gYUUoKXtyaSYmVHImJihyaT0hMSxUci5sZW5ndGg/T3Q9VHIuY29uY2F0KE90KTpzcz0tMSxPdC5sZW5ndGgmJnRnKCkpO31mdW5jdGlvbiB0Zygpe2lmKCFyaSl7dmFyIHQ9ZWcoYUUpO3JpPSEwO2Zvcih2YXIgZT1PdC5sZW5ndGg7ZTspe2ZvcihUcj1PdCxPdD1bXTsrK3NzPGU7KVRyJiZUcltzc10ucnVuKCk7c3M9LTEsZT1PdC5sZW5ndGg7fVRyPW51bGwscmk9ITEsZnVuY3Rpb24ocil7aWYoUHQ9PT1jbGVhclRpbWVvdXQpcmV0dXJuIGNsZWFyVGltZW91dChyKTtpZigoUHQ9PT1LYXx8IVB0KSYmY2xlYXJUaW1lb3V0KXJldHVybiBQdD1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KHIpO3RyeXtQdChyKTt9Y2F0Y2h7dHJ5e3JldHVybiBQdC5jYWxsKG51bGwscil9Y2F0Y2h7cmV0dXJuIFB0LmNhbGwodGhpc3x8aWkscil9fX0odCk7fX1mdW5jdGlvbiBYcCh0LGUpeyh0aGlzfHxpaSkuZnVuPXQsKHRoaXN8fGlpKS5hcnJheT1lO31mdW5jdGlvbiBDdCgpe312YXIgWnAsQnQsUHQsaWksZmUsVHIsT3Qscmksc3MsbmUscmc9d2UoKCk9Pnt2KCk7bSgpO18oKTtpaT10eXBlb2YgZ2xvYmFsVGhpczxcInVcIj9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmPFwidVwiP3NlbGY6Z2xvYmFsLGZlPVpwPXt9OyhmdW5jdGlvbigpe3RyeXtCdD10eXBlb2Ygc2V0VGltZW91dD09XCJmdW5jdGlvblwiP3NldFRpbWVvdXQ6emE7fWNhdGNoe0J0PXphO310cnl7UHQ9dHlwZW9mIGNsZWFyVGltZW91dD09XCJmdW5jdGlvblwiP2NsZWFyVGltZW91dDpLYTt9Y2F0Y2h7UHQ9S2E7fX0pKCk7T3Q9W10scmk9ITEsc3M9LTE7ZmUubmV4dFRpY2s9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZvcih2YXIgcj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspZVtyLTFdPWFyZ3VtZW50c1tyXTtPdC5wdXNoKG5ldyBYcCh0LGUpKSxPdC5sZW5ndGghPT0xfHxyaXx8ZWcodGcpO30sWHAucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpeyh0aGlzfHxpaSkuZnVuLmFwcGx5KG51bGwsKHRoaXN8fGlpKS5hcnJheSk7fSxmZS50aXRsZT1cImJyb3dzZXJcIixmZS5icm93c2VyPSEwLGZlLmVudj17fSxmZS5hcmd2PVtdLGZlLnZlcnNpb249XCJcIixmZS52ZXJzaW9ucz17fSxmZS5vbj1DdCxmZS5hZGRMaXN0ZW5lcj1DdCxmZS5vbmNlPUN0LGZlLm9mZj1DdCxmZS5yZW1vdmVMaXN0ZW5lcj1DdCxmZS5yZW1vdmVBbGxMaXN0ZW5lcnM9Q3QsZmUuZW1pdD1DdCxmZS5wcmVwZW5kTGlzdGVuZXI9Q3QsZmUucHJlcGVuZE9uY2VMaXN0ZW5lcj1DdCxmZS5saXN0ZW5lcnM9ZnVuY3Rpb24odCl7cmV0dXJuIFtdfSxmZS5iaW5kaW5nPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcihcInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkXCIpfSxmZS5jd2Q9ZnVuY3Rpb24oKXtyZXR1cm4gXCIvXCJ9LGZlLmNoZGlyPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcihcInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZFwiKX0sZmUudW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH07bmU9WnA7bmUuYWRkTGlzdGVuZXI7bmUuYXJndjtuZS5iaW5kaW5nO25lLmJyb3dzZXI7bmUuY2hkaXI7bmUuY3dkO25lLmVtaXQ7bmUuZW52O25lLmxpc3RlbmVycztuZS5uZXh0VGljaztuZS5vZmY7bmUub247bmUub25jZTtuZS5wcmVwZW5kTGlzdGVuZXI7bmUucHJlcGVuZE9uY2VMaXN0ZW5lcjtuZS5yZW1vdmVBbGxMaXN0ZW5lcnM7bmUucmVtb3ZlTGlzdGVuZXI7bmUudGl0bGU7bmUudW1hc2s7bmUudmVyc2lvbjtuZS52ZXJzaW9uczt9KTtmdW5jdGlvbiBsRSgpe2lmKGlnKXJldHVybiBHYTtpZz0hMDt2YXIgdD1HYT17fSxlLHI7ZnVuY3Rpb24gaSgpe3Rocm93IG5ldyBFcnJvcihcInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWRcIil9ZnVuY3Rpb24gbigpe3Rocm93IG5ldyBFcnJvcihcImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZFwiKX0oZnVuY3Rpb24oKXt0cnl7dHlwZW9mIHNldFRpbWVvdXQ9PVwiZnVuY3Rpb25cIj9lPXNldFRpbWVvdXQ6ZT1pO31jYXRjaHtlPWk7fXRyeXt0eXBlb2YgY2xlYXJUaW1lb3V0PT1cImZ1bmN0aW9uXCI/cj1jbGVhclRpbWVvdXQ6cj1uO31jYXRjaHtyPW47fX0pKCk7ZnVuY3Rpb24gbyhFKXtpZihlPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dChFLDApO2lmKChlPT09aXx8IWUpJiZzZXRUaW1lb3V0KXJldHVybiBlPXNldFRpbWVvdXQsc2V0VGltZW91dChFLDApO3RyeXtyZXR1cm4gZShFLDApfWNhdGNoe3RyeXtyZXR1cm4gZS5jYWxsKG51bGwsRSwwKX1jYXRjaHtyZXR1cm4gZS5jYWxsKHRoaXN8fG5pLEUsMCl9fX1mdW5jdGlvbiBzKEUpe2lmKHI9PT1jbGVhclRpbWVvdXQpcmV0dXJuIGNsZWFyVGltZW91dChFKTtpZigocj09PW58fCFyKSYmY2xlYXJUaW1lb3V0KXJldHVybiByPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQoRSk7dHJ5e3JldHVybiByKEUpfWNhdGNoe3RyeXtyZXR1cm4gci5jYWxsKG51bGwsRSl9Y2F0Y2h7cmV0dXJuIHIuY2FsbCh0aGlzfHxuaSxFKX19fXZhciBhPVtdLHU9ITEsYyxoPS0xO2Z1bmN0aW9uIGQoKXshdXx8IWN8fCh1PSExLGMubGVuZ3RoP2E9Yy5jb25jYXQoYSk6aD0tMSxhLmxlbmd0aCYmZygpKTt9ZnVuY3Rpb24gZygpe2lmKCF1KXt2YXIgRT1vKGQpO3U9ITA7Zm9yKHZhciBTPWEubGVuZ3RoO1M7KXtmb3IoYz1hLGE9W107KytoPFM7KWMmJmNbaF0ucnVuKCk7aD0tMSxTPWEubGVuZ3RoO31jPW51bGwsdT0hMSxzKEUpO319dC5uZXh0VGljaz1mdW5jdGlvbihFKXt2YXIgUz1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciBJPTE7STxhcmd1bWVudHMubGVuZ3RoO0krKylTW0ktMV09YXJndW1lbnRzW0ldO2EucHVzaChuZXcgeShFLFMpKSxhLmxlbmd0aD09PTEmJiF1JiZvKGcpO307ZnVuY3Rpb24geShFLFMpeyh0aGlzfHxuaSkuZnVuPUUsKHRoaXN8fG5pKS5hcnJheT1TO315LnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXsodGhpc3x8bmkpLmZ1bi5hcHBseShudWxsLCh0aGlzfHxuaSkuYXJyYXkpO30sdC50aXRsZT1cImJyb3dzZXJcIix0LmJyb3dzZXI9ITAsdC5lbnY9e30sdC5hcmd2PVtdLHQudmVyc2lvbj1cIlwiLHQudmVyc2lvbnM9e307ZnVuY3Rpb24gdygpe31yZXR1cm4gdC5vbj13LHQuYWRkTGlzdGVuZXI9dyx0Lm9uY2U9dyx0Lm9mZj13LHQucmVtb3ZlTGlzdGVuZXI9dyx0LnJlbW92ZUFsbExpc3RlbmVycz13LHQuZW1pdD13LHQucHJlcGVuZExpc3RlbmVyPXcsdC5wcmVwZW5kT25jZUxpc3RlbmVyPXcsdC5saXN0ZW5lcnM9ZnVuY3Rpb24oRSl7cmV0dXJuIFtdfSx0LmJpbmRpbmc9ZnVuY3Rpb24oRSl7dGhyb3cgbmV3IEVycm9yKFwicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWRcIil9LHQuY3dkPWZ1bmN0aW9uKCl7cmV0dXJuIFwiL1wifSx0LmNoZGlyPWZ1bmN0aW9uKEUpe3Rocm93IG5ldyBFcnJvcihcInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZFwiKX0sdC51bWFzaz1mdW5jdGlvbigpe3JldHVybiAwfSxHYX12YXIgR2EsaWcsbmkscmUsUWE9d2UoKCk9Pnt2KCk7bSgpO18oKTtHYT17fSxpZz0hMSxuaT10eXBlb2YgZ2xvYmFsVGhpczxcInVcIj9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmPFwidVwiP3NlbGY6Z2xvYmFsO3JlPWxFKCk7cmUucGxhdGZvcm09XCJicm93c2VyXCI7cmUuYWRkTGlzdGVuZXI7cmUuYXJndjtyZS5iaW5kaW5nO3JlLmJyb3dzZXI7cmUuY2hkaXI7cmUuY3dkO3JlLmVtaXQ7cmUuZW52O3JlLmxpc3RlbmVycztyZS5uZXh0VGljaztyZS5vZmY7cmUub247cmUub25jZTtyZS5wcmVwZW5kTGlzdGVuZXI7cmUucHJlcGVuZE9uY2VMaXN0ZW5lcjtyZS5yZW1vdmVBbGxMaXN0ZW5lcnM7cmUucmVtb3ZlTGlzdGVuZXI7cmUudGl0bGU7cmUudW1hc2s7cmUudmVyc2lvbjtyZS52ZXJzaW9uczt9KTtmdW5jdGlvbiB1RSgpe2lmKG5nKXJldHVybiBZYTtuZz0hMDt2YXIgdD1yZTtmdW5jdGlvbiBlKG8pe2lmKHR5cGVvZiBvIT1cInN0cmluZ1wiKXRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXRoIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkIFwiK0pTT04uc3RyaW5naWZ5KG8pKX1mdW5jdGlvbiByKG8scyl7Zm9yKHZhciBhPVwiXCIsdT0wLGM9LTEsaD0wLGQsZz0wO2c8PW8ubGVuZ3RoOysrZyl7aWYoZzxvLmxlbmd0aClkPW8uY2hhckNvZGVBdChnKTtlbHNlIHtpZihkPT09NDcpYnJlYWs7ZD00Nzt9aWYoZD09PTQ3KXtpZighKGM9PT1nLTF8fGg9PT0xKSlpZihjIT09Zy0xJiZoPT09Mil7aWYoYS5sZW5ndGg8Mnx8dSE9PTJ8fGEuY2hhckNvZGVBdChhLmxlbmd0aC0xKSE9PTQ2fHxhLmNoYXJDb2RlQXQoYS5sZW5ndGgtMikhPT00Nil7aWYoYS5sZW5ndGg+Mil7dmFyIHk9YS5sYXN0SW5kZXhPZihcIi9cIik7aWYoeSE9PWEubGVuZ3RoLTEpe3k9PT0tMT8oYT1cIlwiLHU9MCk6KGE9YS5zbGljZSgwLHkpLHU9YS5sZW5ndGgtMS1hLmxhc3RJbmRleE9mKFwiL1wiKSksYz1nLGg9MDtjb250aW51ZX19ZWxzZSBpZihhLmxlbmd0aD09PTJ8fGEubGVuZ3RoPT09MSl7YT1cIlwiLHU9MCxjPWcsaD0wO2NvbnRpbnVlfX1zJiYoYS5sZW5ndGg+MD9hKz1cIi8uLlwiOmE9XCIuLlwiLHU9Mik7fWVsc2UgYS5sZW5ndGg+MD9hKz1cIi9cIitvLnNsaWNlKGMrMSxnKTphPW8uc2xpY2UoYysxLGcpLHU9Zy1jLTE7Yz1nLGg9MDt9ZWxzZSBkPT09NDYmJmghPT0tMT8rK2g6aD0tMTt9cmV0dXJuIGF9ZnVuY3Rpb24gaShvLHMpe3ZhciBhPXMuZGlyfHxzLnJvb3QsdT1zLmJhc2V8fChzLm5hbWV8fFwiXCIpKyhzLmV4dHx8XCJcIik7cmV0dXJuIGE/YT09PXMucm9vdD9hK3U6YStvK3U6dX12YXIgbj17cmVzb2x2ZTpmdW5jdGlvbigpe2Zvcih2YXIgcz1cIlwiLGE9ITEsdSxjPWFyZ3VtZW50cy5sZW5ndGgtMTtjPj0tMSYmIWE7Yy0tKXt2YXIgaDtjPj0wP2g9YXJndW1lbnRzW2NdOih1PT09dm9pZCAwJiYodT10LmN3ZCgpKSxoPXUpLGUoaCksaC5sZW5ndGghPT0wJiYocz1oK1wiL1wiK3MsYT1oLmNoYXJDb2RlQXQoMCk9PT00Nyk7fXJldHVybiBzPXIocywhYSksYT9zLmxlbmd0aD4wP1wiL1wiK3M6XCIvXCI6cy5sZW5ndGg+MD9zOlwiLlwifSxub3JtYWxpemU6ZnVuY3Rpb24ocyl7aWYoZShzKSxzLmxlbmd0aD09PTApcmV0dXJuIFwiLlwiO3ZhciBhPXMuY2hhckNvZGVBdCgwKT09PTQ3LHU9cy5jaGFyQ29kZUF0KHMubGVuZ3RoLTEpPT09NDc7cmV0dXJuIHM9cihzLCFhKSxzLmxlbmd0aD09PTAmJiFhJiYocz1cIi5cIikscy5sZW5ndGg+MCYmdSYmKHMrPVwiL1wiKSxhP1wiL1wiK3M6c30saXNBYnNvbHV0ZTpmdW5jdGlvbihzKXtyZXR1cm4gZShzKSxzLmxlbmd0aD4wJiZzLmNoYXJDb2RlQXQoMCk9PT00N30sam9pbjpmdW5jdGlvbigpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0wKXJldHVybiBcIi5cIjtmb3IodmFyIHMsYT0wO2E8YXJndW1lbnRzLmxlbmd0aDsrK2Epe3ZhciB1PWFyZ3VtZW50c1thXTtlKHUpLHUubGVuZ3RoPjAmJihzPT09dm9pZCAwP3M9dTpzKz1cIi9cIit1KTt9cmV0dXJuIHM9PT12b2lkIDA/XCIuXCI6bi5ub3JtYWxpemUocyl9LHJlbGF0aXZlOmZ1bmN0aW9uKHMsYSl7aWYoZShzKSxlKGEpLHM9PT1hfHwocz1uLnJlc29sdmUocyksYT1uLnJlc29sdmUoYSkscz09PWEpKXJldHVybiBcIlwiO2Zvcih2YXIgdT0xO3U8cy5sZW5ndGgmJnMuY2hhckNvZGVBdCh1KT09PTQ3OysrdSk7Zm9yKHZhciBjPXMubGVuZ3RoLGg9Yy11LGQ9MTtkPGEubGVuZ3RoJiZhLmNoYXJDb2RlQXQoZCk9PT00NzsrK2QpO2Zvcih2YXIgZz1hLmxlbmd0aCx5PWctZCx3PWg8eT9oOnksRT0tMSxTPTA7Uzw9dzsrK1Mpe2lmKFM9PT13KXtpZih5Pncpe2lmKGEuY2hhckNvZGVBdChkK1MpPT09NDcpcmV0dXJuIGEuc2xpY2UoZCtTKzEpO2lmKFM9PT0wKXJldHVybiBhLnNsaWNlKGQrUyl9ZWxzZSBoPncmJihzLmNoYXJDb2RlQXQodStTKT09PTQ3P0U9UzpTPT09MCYmKEU9MCkpO2JyZWFrfXZhciBJPXMuY2hhckNvZGVBdCh1K1MpLEM9YS5jaGFyQ29kZUF0KGQrUyk7aWYoSSE9PUMpYnJlYWs7ST09PTQ3JiYoRT1TKTt9dmFyIFI9XCJcIjtmb3IoUz11K0UrMTtTPD1jOysrUykoUz09PWN8fHMuY2hhckNvZGVBdChTKT09PTQ3KSYmKFIubGVuZ3RoPT09MD9SKz1cIi4uXCI6Uis9XCIvLi5cIik7cmV0dXJuIFIubGVuZ3RoPjA/UithLnNsaWNlKGQrRSk6KGQrPUUsYS5jaGFyQ29kZUF0KGQpPT09NDcmJisrZCxhLnNsaWNlKGQpKX0sX21ha2VMb25nOmZ1bmN0aW9uKHMpe3JldHVybiBzfSxkaXJuYW1lOmZ1bmN0aW9uKHMpe2lmKGUocykscy5sZW5ndGg9PT0wKXJldHVybiBcIi5cIjtmb3IodmFyIGE9cy5jaGFyQ29kZUF0KDApLHU9YT09PTQ3LGM9LTEsaD0hMCxkPXMubGVuZ3RoLTE7ZD49MTstLWQpaWYoYT1zLmNoYXJDb2RlQXQoZCksYT09PTQ3KXtpZighaCl7Yz1kO2JyZWFrfX1lbHNlIGg9ITE7cmV0dXJuIGM9PT0tMT91P1wiL1wiOlwiLlwiOnUmJmM9PT0xP1wiLy9cIjpzLnNsaWNlKDAsYyl9LGJhc2VuYW1lOmZ1bmN0aW9uKHMsYSl7aWYoYSE9PXZvaWQgMCYmdHlwZW9mIGEhPVwic3RyaW5nXCIpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJleHRcIiBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJyk7ZShzKTt2YXIgdT0wLGM9LTEsaD0hMCxkO2lmKGEhPT12b2lkIDAmJmEubGVuZ3RoPjAmJmEubGVuZ3RoPD1zLmxlbmd0aCl7aWYoYS5sZW5ndGg9PT1zLmxlbmd0aCYmYT09PXMpcmV0dXJuIFwiXCI7dmFyIGc9YS5sZW5ndGgtMSx5PS0xO2ZvcihkPXMubGVuZ3RoLTE7ZD49MDstLWQpe3ZhciB3PXMuY2hhckNvZGVBdChkKTtpZih3PT09NDcpe2lmKCFoKXt1PWQrMTticmVha319ZWxzZSB5PT09LTEmJihoPSExLHk9ZCsxKSxnPj0wJiYodz09PWEuY2hhckNvZGVBdChnKT8tLWc9PT0tMSYmKGM9ZCk6KGc9LTEsYz15KSk7fXJldHVybiB1PT09Yz9jPXk6Yz09PS0xJiYoYz1zLmxlbmd0aCkscy5zbGljZSh1LGMpfWVsc2Uge2ZvcihkPXMubGVuZ3RoLTE7ZD49MDstLWQpaWYocy5jaGFyQ29kZUF0KGQpPT09NDcpe2lmKCFoKXt1PWQrMTticmVha319ZWxzZSBjPT09LTEmJihoPSExLGM9ZCsxKTtyZXR1cm4gYz09PS0xP1wiXCI6cy5zbGljZSh1LGMpfX0sZXh0bmFtZTpmdW5jdGlvbihzKXtlKHMpO2Zvcih2YXIgYT0tMSx1PTAsYz0tMSxoPSEwLGQ9MCxnPXMubGVuZ3RoLTE7Zz49MDstLWcpe3ZhciB5PXMuY2hhckNvZGVBdChnKTtpZih5PT09NDcpe2lmKCFoKXt1PWcrMTticmVha31jb250aW51ZX1jPT09LTEmJihoPSExLGM9ZysxKSx5PT09NDY/YT09PS0xP2E9ZzpkIT09MSYmKGQ9MSk6YSE9PS0xJiYoZD0tMSk7fXJldHVybiBhPT09LTF8fGM9PT0tMXx8ZD09PTB8fGQ9PT0xJiZhPT09Yy0xJiZhPT09dSsxP1wiXCI6cy5zbGljZShhLGMpfSxmb3JtYXQ6ZnVuY3Rpb24ocyl7aWYocz09PW51bGx8fHR5cGVvZiBzIT1cIm9iamVjdFwiKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInBhdGhPYmplY3RcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIHMpO3JldHVybiBpKFwiL1wiLHMpfSxwYXJzZTpmdW5jdGlvbihzKXtlKHMpO3ZhciBhPXtyb290OlwiXCIsZGlyOlwiXCIsYmFzZTpcIlwiLGV4dDpcIlwiLG5hbWU6XCJcIn07aWYocy5sZW5ndGg9PT0wKXJldHVybiBhO3ZhciB1PXMuY2hhckNvZGVBdCgwKSxjPXU9PT00NyxoO2M/KGEucm9vdD1cIi9cIixoPTEpOmg9MDtmb3IodmFyIGQ9LTEsZz0wLHk9LTEsdz0hMCxFPXMubGVuZ3RoLTEsUz0wO0U+PWg7LS1FKXtpZih1PXMuY2hhckNvZGVBdChFKSx1PT09NDcpe2lmKCF3KXtnPUUrMTticmVha31jb250aW51ZX15PT09LTEmJih3PSExLHk9RSsxKSx1PT09NDY/ZD09PS0xP2Q9RTpTIT09MSYmKFM9MSk6ZCE9PS0xJiYoUz0tMSk7fXJldHVybiBkPT09LTF8fHk9PT0tMXx8Uz09PTB8fFM9PT0xJiZkPT09eS0xJiZkPT09ZysxP3khPT0tMSYmKGc9PT0wJiZjP2EuYmFzZT1hLm5hbWU9cy5zbGljZSgxLHkpOmEuYmFzZT1hLm5hbWU9cy5zbGljZShnLHkpKTooZz09PTAmJmM/KGEubmFtZT1zLnNsaWNlKDEsZCksYS5iYXNlPXMuc2xpY2UoMSx5KSk6KGEubmFtZT1zLnNsaWNlKGcsZCksYS5iYXNlPXMuc2xpY2UoZyx5KSksYS5leHQ9cy5zbGljZShkLHkpKSxnPjA/YS5kaXI9cy5zbGljZSgwLGctMSk6YyYmKGEuZGlyPVwiL1wiKSxhfSxzZXA6XCIvXCIsZGVsaW1pdGVyOlwiOlwiLHdpbjMyOm51bGwscG9zaXg6bnVsbH07cmV0dXJuIG4ucG9zaXg9bixZYT1uLFlhfXZhciBZYSxuZyxKYSxzZz13ZSgoKT0+e3YoKTttKCk7XygpO1FhKCk7WWE9e30sbmc9ITE7SmE9dUUoKTt9KTt2YXIgZGc9e307UXQoZGcse1VSTDooKT0+REUsVXJsOigpPT5NRSxkZWZhdWx0OigpPT5aLGZpbGVVUkxUb1BhdGg6KCk9PmNnLGZvcm1hdDooKT0+TEUscGFyc2U6KCk9PnFFLHBhdGhUb0ZpbGVVUkw6KCk9PmhnLHJlc29sdmU6KCk9PlVFLHJlc29sdmVPYmplY3Q6KCk9Pk5FfSk7ZnVuY3Rpb24gRmUoKXt0aGlzLnByb3RvY29sPW51bGwsdGhpcy5zbGFzaGVzPW51bGwsdGhpcy5hdXRoPW51bGwsdGhpcy5ob3N0PW51bGwsdGhpcy5wb3J0PW51bGwsdGhpcy5ob3N0bmFtZT1udWxsLHRoaXMuaGFzaD1udWxsLHRoaXMuc2VhcmNoPW51bGwsdGhpcy5xdWVyeT1udWxsLHRoaXMucGF0aG5hbWU9bnVsbCx0aGlzLnBhdGg9bnVsbCx0aGlzLmhyZWY9bnVsbDt9ZnVuY3Rpb24geGkodCxlLHIpe2lmKHQmJnB0LmlzT2JqZWN0KHQpJiZ0IGluc3RhbmNlb2YgRmUpcmV0dXJuIHQ7dmFyIGk9bmV3IEZlO3JldHVybiBpLnBhcnNlKHQsZSxyKSxpfWZ1bmN0aW9uIGJFKCl7aWYodWcpcmV0dXJuIGVsO3VnPSEwO3ZhciB0PW5lO2Z1bmN0aW9uIGUobyl7aWYodHlwZW9mIG8hPVwic3RyaW5nXCIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhdGggbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgXCIrSlNPTi5zdHJpbmdpZnkobykpfWZ1bmN0aW9uIHIobyxzKXtmb3IodmFyIGE9XCJcIix1PTAsYz0tMSxoPTAsZCxnPTA7Zzw9by5sZW5ndGg7KytnKXtpZihnPG8ubGVuZ3RoKWQ9by5jaGFyQ29kZUF0KGcpO2Vsc2Uge2lmKGQ9PT00NylicmVhaztkPTQ3O31pZihkPT09NDcpe2lmKCEoYz09PWctMXx8aD09PTEpKWlmKGMhPT1nLTEmJmg9PT0yKXtpZihhLmxlbmd0aDwyfHx1IT09Mnx8YS5jaGFyQ29kZUF0KGEubGVuZ3RoLTEpIT09NDZ8fGEuY2hhckNvZGVBdChhLmxlbmd0aC0yKSE9PTQ2KXtpZihhLmxlbmd0aD4yKXt2YXIgeT1hLmxhc3RJbmRleE9mKFwiL1wiKTtpZih5IT09YS5sZW5ndGgtMSl7eT09PS0xPyhhPVwiXCIsdT0wKTooYT1hLnNsaWNlKDAseSksdT1hLmxlbmd0aC0xLWEubGFzdEluZGV4T2YoXCIvXCIpKSxjPWcsaD0wO2NvbnRpbnVlfX1lbHNlIGlmKGEubGVuZ3RoPT09Mnx8YS5sZW5ndGg9PT0xKXthPVwiXCIsdT0wLGM9ZyxoPTA7Y29udGludWV9fXMmJihhLmxlbmd0aD4wP2ErPVwiLy4uXCI6YT1cIi4uXCIsdT0yKTt9ZWxzZSBhLmxlbmd0aD4wP2ErPVwiL1wiK28uc2xpY2UoYysxLGcpOmE9by5zbGljZShjKzEsZyksdT1nLWMtMTtjPWcsaD0wO31lbHNlIGQ9PT00NiYmaCE9PS0xPysraDpoPS0xO31yZXR1cm4gYX1mdW5jdGlvbiBpKG8scyl7dmFyIGE9cy5kaXJ8fHMucm9vdCx1PXMuYmFzZXx8KHMubmFtZXx8XCJcIikrKHMuZXh0fHxcIlwiKTtyZXR1cm4gYT9hPT09cy5yb290P2ErdTphK28rdTp1fXZhciBuPXtyZXNvbHZlOmZ1bmN0aW9uKCl7Zm9yKHZhciBzPVwiXCIsYT0hMSx1LGM9YXJndW1lbnRzLmxlbmd0aC0xO2M+PS0xJiYhYTtjLS0pe3ZhciBoO2M+PTA/aD1hcmd1bWVudHNbY106KHU9PT12b2lkIDAmJih1PXQuY3dkKCkpLGg9dSksZShoKSxoLmxlbmd0aCE9PTAmJihzPWgrXCIvXCIrcyxhPWguY2hhckNvZGVBdCgwKT09PTQ3KTt9cmV0dXJuIHM9cihzLCFhKSxhP3MubGVuZ3RoPjA/XCIvXCIrczpcIi9cIjpzLmxlbmd0aD4wP3M6XCIuXCJ9LG5vcm1hbGl6ZTpmdW5jdGlvbihzKXtpZihlKHMpLHMubGVuZ3RoPT09MClyZXR1cm4gXCIuXCI7dmFyIGE9cy5jaGFyQ29kZUF0KDApPT09NDcsdT1zLmNoYXJDb2RlQXQocy5sZW5ndGgtMSk9PT00NztyZXR1cm4gcz1yKHMsIWEpLHMubGVuZ3RoPT09MCYmIWEmJihzPVwiLlwiKSxzLmxlbmd0aD4wJiZ1JiYocys9XCIvXCIpLGE/XCIvXCIrczpzfSxpc0Fic29sdXRlOmZ1bmN0aW9uKHMpe3JldHVybiBlKHMpLHMubGVuZ3RoPjAmJnMuY2hhckNvZGVBdCgwKT09PTQ3fSxqb2luOmZ1bmN0aW9uKCl7aWYoYXJndW1lbnRzLmxlbmd0aD09PTApcmV0dXJuIFwiLlwiO2Zvcih2YXIgcyxhPTA7YTxhcmd1bWVudHMubGVuZ3RoOysrYSl7dmFyIHU9YXJndW1lbnRzW2FdO2UodSksdS5sZW5ndGg+MCYmKHM9PT12b2lkIDA/cz11OnMrPVwiL1wiK3UpO31yZXR1cm4gcz09PXZvaWQgMD9cIi5cIjpuLm5vcm1hbGl6ZShzKX0scmVsYXRpdmU6ZnVuY3Rpb24ocyxhKXtpZihlKHMpLGUoYSkscz09PWF8fChzPW4ucmVzb2x2ZShzKSxhPW4ucmVzb2x2ZShhKSxzPT09YSkpcmV0dXJuIFwiXCI7Zm9yKHZhciB1PTE7dTxzLmxlbmd0aCYmcy5jaGFyQ29kZUF0KHUpPT09NDc7Kyt1KTtmb3IodmFyIGM9cy5sZW5ndGgsaD1jLXUsZD0xO2Q8YS5sZW5ndGgmJmEuY2hhckNvZGVBdChkKT09PTQ3OysrZCk7Zm9yKHZhciBnPWEubGVuZ3RoLHk9Zy1kLHc9aDx5P2g6eSxFPS0xLFM9MDtTPD13OysrUyl7aWYoUz09PXcpe2lmKHk+dyl7aWYoYS5jaGFyQ29kZUF0KGQrUyk9PT00NylyZXR1cm4gYS5zbGljZShkK1MrMSk7aWYoUz09PTApcmV0dXJuIGEuc2xpY2UoZCtTKX1lbHNlIGg+dyYmKHMuY2hhckNvZGVBdCh1K1MpPT09NDc/RT1TOlM9PT0wJiYoRT0wKSk7YnJlYWt9dmFyIEk9cy5jaGFyQ29kZUF0KHUrUyksQz1hLmNoYXJDb2RlQXQoZCtTKTtpZihJIT09QylicmVhaztJPT09NDcmJihFPVMpO312YXIgUj1cIlwiO2ZvcihTPXUrRSsxO1M8PWM7KytTKShTPT09Y3x8cy5jaGFyQ29kZUF0KFMpPT09NDcpJiYoUi5sZW5ndGg9PT0wP1IrPVwiLi5cIjpSKz1cIi8uLlwiKTtyZXR1cm4gUi5sZW5ndGg+MD9SK2Euc2xpY2UoZCtFKTooZCs9RSxhLmNoYXJDb2RlQXQoZCk9PT00NyYmKytkLGEuc2xpY2UoZCkpfSxfbWFrZUxvbmc6ZnVuY3Rpb24ocyl7cmV0dXJuIHN9LGRpcm5hbWU6ZnVuY3Rpb24ocyl7aWYoZShzKSxzLmxlbmd0aD09PTApcmV0dXJuIFwiLlwiO2Zvcih2YXIgYT1zLmNoYXJDb2RlQXQoMCksdT1hPT09NDcsYz0tMSxoPSEwLGQ9cy5sZW5ndGgtMTtkPj0xOy0tZClpZihhPXMuY2hhckNvZGVBdChkKSxhPT09NDcpe2lmKCFoKXtjPWQ7YnJlYWt9fWVsc2UgaD0hMTtyZXR1cm4gYz09PS0xP3U/XCIvXCI6XCIuXCI6dSYmYz09PTE/XCIvL1wiOnMuc2xpY2UoMCxjKX0sYmFzZW5hbWU6ZnVuY3Rpb24ocyxhKXtpZihhIT09dm9pZCAwJiZ0eXBlb2YgYSE9XCJzdHJpbmdcIil0aHJvdyBuZXcgVHlwZUVycm9yKCdcImV4dFwiIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnKTtlKHMpO3ZhciB1PTAsYz0tMSxoPSEwLGQ7aWYoYSE9PXZvaWQgMCYmYS5sZW5ndGg+MCYmYS5sZW5ndGg8PXMubGVuZ3RoKXtpZihhLmxlbmd0aD09PXMubGVuZ3RoJiZhPT09cylyZXR1cm4gXCJcIjt2YXIgZz1hLmxlbmd0aC0xLHk9LTE7Zm9yKGQ9cy5sZW5ndGgtMTtkPj0wOy0tZCl7dmFyIHc9cy5jaGFyQ29kZUF0KGQpO2lmKHc9PT00Nyl7aWYoIWgpe3U9ZCsxO2JyZWFrfX1lbHNlIHk9PT0tMSYmKGg9ITEseT1kKzEpLGc+PTAmJih3PT09YS5jaGFyQ29kZUF0KGcpPy0tZz09PS0xJiYoYz1kKTooZz0tMSxjPXkpKTt9cmV0dXJuIHU9PT1jP2M9eTpjPT09LTEmJihjPXMubGVuZ3RoKSxzLnNsaWNlKHUsYyl9ZWxzZSB7Zm9yKGQ9cy5sZW5ndGgtMTtkPj0wOy0tZClpZihzLmNoYXJDb2RlQXQoZCk9PT00Nyl7aWYoIWgpe3U9ZCsxO2JyZWFrfX1lbHNlIGM9PT0tMSYmKGg9ITEsYz1kKzEpO3JldHVybiBjPT09LTE/XCJcIjpzLnNsaWNlKHUsYyl9fSxleHRuYW1lOmZ1bmN0aW9uKHMpe2Uocyk7Zm9yKHZhciBhPS0xLHU9MCxjPS0xLGg9ITAsZD0wLGc9cy5sZW5ndGgtMTtnPj0wOy0tZyl7dmFyIHk9cy5jaGFyQ29kZUF0KGcpO2lmKHk9PT00Nyl7aWYoIWgpe3U9ZysxO2JyZWFrfWNvbnRpbnVlfWM9PT0tMSYmKGg9ITEsYz1nKzEpLHk9PT00Nj9hPT09LTE/YT1nOmQhPT0xJiYoZD0xKTphIT09LTEmJihkPS0xKTt9cmV0dXJuIGE9PT0tMXx8Yz09PS0xfHxkPT09MHx8ZD09PTEmJmE9PT1jLTEmJmE9PT11KzE/XCJcIjpzLnNsaWNlKGEsYyl9LGZvcm1hdDpmdW5jdGlvbihzKXtpZihzPT09bnVsbHx8dHlwZW9mIHMhPVwib2JqZWN0XCIpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwicGF0aE9iamVjdFwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2Ygcyk7cmV0dXJuIGkoXCIvXCIscyl9LHBhcnNlOmZ1bmN0aW9uKHMpe2Uocyk7dmFyIGE9e3Jvb3Q6XCJcIixkaXI6XCJcIixiYXNlOlwiXCIsZXh0OlwiXCIsbmFtZTpcIlwifTtpZihzLmxlbmd0aD09PTApcmV0dXJuIGE7dmFyIHU9cy5jaGFyQ29kZUF0KDApLGM9dT09PTQ3LGg7Yz8oYS5yb290PVwiL1wiLGg9MSk6aD0wO2Zvcih2YXIgZD0tMSxnPTAseT0tMSx3PSEwLEU9cy5sZW5ndGgtMSxTPTA7RT49aDstLUUpe2lmKHU9cy5jaGFyQ29kZUF0KEUpLHU9PT00Nyl7aWYoIXcpe2c9RSsxO2JyZWFrfWNvbnRpbnVlfXk9PT0tMSYmKHc9ITEseT1FKzEpLHU9PT00Nj9kPT09LTE/ZD1FOlMhPT0xJiYoUz0xKTpkIT09LTEmJihTPS0xKTt9cmV0dXJuIGQ9PT0tMXx8eT09PS0xfHxTPT09MHx8Uz09PTEmJmQ9PT15LTEmJmQ9PT1nKzE/eSE9PS0xJiYoZz09PTAmJmM/YS5iYXNlPWEubmFtZT1zLnNsaWNlKDEseSk6YS5iYXNlPWEubmFtZT1zLnNsaWNlKGcseSkpOihnPT09MCYmYz8oYS5uYW1lPXMuc2xpY2UoMSxkKSxhLmJhc2U9cy5zbGljZSgxLHkpKTooYS5uYW1lPXMuc2xpY2UoZyxkKSxhLmJhc2U9cy5zbGljZShnLHkpKSxhLmV4dD1zLnNsaWNlKGQseSkpLGc+MD9hLmRpcj1zLnNsaWNlKDAsZy0xKTpjJiYoYS5kaXI9XCIvXCIpLGF9LHNlcDpcIi9cIixkZWxpbWl0ZXI6XCI6XCIsd2luMzI6bnVsbCxwb3NpeDpudWxsfTtyZXR1cm4gbi5wb3NpeD1uLGVsPW4sZWx9ZnVuY3Rpb24gQkUodCl7aWYodHlwZW9mIHQ9PVwic3RyaW5nXCIpdD1uZXcgVVJMKHQpO2Vsc2UgaWYoISh0IGluc3RhbmNlb2YgVVJMKSl0aHJvdyBuZXcgRGVuby5lcnJvcnMuSW52YWxpZERhdGEoXCJpbnZhbGlkIGFyZ3VtZW50IHBhdGggLCBtdXN0IGJlIGEgc3RyaW5nIG9yIFVSTFwiKTtpZih0LnByb3RvY29sIT09XCJmaWxlOlwiKXRocm93IG5ldyBEZW5vLmVycm9ycy5JbnZhbGlkRGF0YShcImludmFsaWQgdXJsIHNjaGVtZVwiKTtyZXR1cm4gcmw/UEUodCk6T0UodCl9ZnVuY3Rpb24gUEUodCl7bGV0IGU9dC5ob3N0bmFtZSxyPXQucGF0aG5hbWU7Zm9yKGxldCBpPTA7aTxyLmxlbmd0aDtpKyspaWYocltpXT09PVwiJVwiKXtsZXQgbj1yLmNvZGVQb2ludEF0KGkrMil8fDMyO2lmKHJbaSsxXT09PVwiMlwiJiZuPT09MTAyfHxyW2krMV09PT1cIjVcIiYmbj09PTk5KXRocm93IG5ldyBEZW5vLmVycm9ycy5JbnZhbGlkRGF0YShcIm11c3Qgbm90IGluY2x1ZGUgZW5jb2RlZCBcXFxcIG9yIC8gY2hhcmFjdGVyc1wiKX1pZihyPXIucmVwbGFjZShTRSxcIlxcXFxcIikscj1kZWNvZGVVUklDb21wb25lbnQociksZSE9PVwiXCIpcmV0dXJuIGBcXFxcXFxcXCR7ZX0ke3J9YDt7bGV0IGk9ci5jb2RlUG9pbnRBdCgxKXwzMixuPXJbMl07aWYoaTx2RXx8aT5FRXx8biE9PVwiOlwiKXRocm93IG5ldyBEZW5vLmVycm9ycy5JbnZhbGlkRGF0YShcImZpbGUgdXJsIHBhdGggbXVzdCBiZSBhYnNvbHV0ZVwiKTtyZXR1cm4gci5zbGljZSgxKX19ZnVuY3Rpb24gT0UodCl7aWYodC5ob3N0bmFtZSE9PVwiXCIpdGhyb3cgbmV3IERlbm8uZXJyb3JzLkludmFsaWREYXRhKFwiaW52YWxpZCBmaWxlIHVybCBob3N0bmFtZVwiKTtsZXQgZT10LnBhdGhuYW1lO2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKGVbcl09PT1cIiVcIil7bGV0IGk9ZS5jb2RlUG9pbnRBdChyKzIpfHwzMjtpZihlW3IrMV09PT1cIjJcIiYmaT09PTEwMil0aHJvdyBuZXcgRGVuby5lcnJvcnMuSW52YWxpZERhdGEoXCJtdXN0IG5vdCBpbmNsdWRlIGVuY29kZWQgLyBjaGFyYWN0ZXJzXCIpfXJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZSl9ZnVuY3Rpb24ga0UodCl7bGV0IGU9ZmcucmVzb2x2ZSh0KSxyPXQuY2hhckNvZGVBdCh0Lmxlbmd0aC0xKTsocj09PW1FfHxybCYmcj09PV9FKSYmZVtlLmxlbmd0aC0xXSE9PWZnLnNlcCYmKGUrPVwiL1wiKTtsZXQgaT1uZXcgVVJMKFwiZmlsZTovL1wiKTtyZXR1cm4gZS5pbmNsdWRlcyhcIiVcIikmJihlPWUucmVwbGFjZShBRSxcIiUyNVwiKSksIXJsJiZlLmluY2x1ZGVzKFwiXFxcXFwiKSYmKGU9ZS5yZXBsYWNlKElFLFwiJTVDXCIpKSxlLmluY2x1ZGVzKGBcbmApJiYoZT1lLnJlcGxhY2UoVEUsXCIlMEFcIikpLGUuaW5jbHVkZXMoXCJcXHJcIikmJihlPWUucmVwbGFjZShSRSxcIiUwRFwiKSksZS5pbmNsdWRlcyhcIlx0XCIpJiYoZT1lLnJlcGxhY2UoQ0UsXCIlMDlcIikpLGkucGF0aG5hbWU9ZSxpfWZ1bmN0aW9uIGNnKHQpe2lmKHR5cGVvZiB0PT1cInN0cmluZ1wiKXQ9bmV3IFVSTCh0KTtlbHNlIGlmKCEodCBpbnN0YW5jZW9mIFVSTCkpdGhyb3cgbmV3IERlbm8uZXJyb3JzLkludmFsaWREYXRhKFwiaW52YWxpZCBhcmd1bWVudCBwYXRoICwgbXVzdCBiZSBhIHN0cmluZyBvciBVUkxcIik7aWYodC5wcm90b2NvbCE9PVwiZmlsZTpcIil0aHJvdyBuZXcgRGVuby5lcnJvcnMuSW52YWxpZERhdGEoXCJpbnZhbGlkIHVybCBzY2hlbWVcIik7cmV0dXJuIGlsP1lFKHQpOkpFKHQpfWZ1bmN0aW9uIFlFKHQpe2xldCBlPXQuaG9zdG5hbWUscj10LnBhdGhuYW1lO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKWlmKHJbaV09PT1cIiVcIil7bGV0IG49ci5jb2RlUG9pbnRBdChpKzIpfHwzMjtpZihyW2krMV09PT1cIjJcIiYmbj09PTEwMnx8cltpKzFdPT09XCI1XCImJm49PT05OSl0aHJvdyBuZXcgRGVuby5lcnJvcnMuSW52YWxpZERhdGEoXCJtdXN0IG5vdCBpbmNsdWRlIGVuY29kZWQgXFxcXCBvciAvIGNoYXJhY3RlcnNcIil9aWYocj1yLnJlcGxhY2UoSEUsXCJcXFxcXCIpLHI9ZGVjb2RlVVJJQ29tcG9uZW50KHIpLGUhPT1cIlwiKXJldHVybiBgXFxcXFxcXFwke2V9JHtyfWA7e2xldCBpPXIuY29kZVBvaW50QXQoMSl8MzIsbj1yWzJdO2lmKGk8V0V8fGk+JEV8fG4hPT1cIjpcIil0aHJvdyBuZXcgRGVuby5lcnJvcnMuSW52YWxpZERhdGEoXCJmaWxlIHVybCBwYXRoIG11c3QgYmUgYWJzb2x1dGVcIik7cmV0dXJuIHIuc2xpY2UoMSl9fWZ1bmN0aW9uIEpFKHQpe2lmKHQuaG9zdG5hbWUhPT1cIlwiKXRocm93IG5ldyBEZW5vLmVycm9ycy5JbnZhbGlkRGF0YShcImludmFsaWQgZmlsZSB1cmwgaG9zdG5hbWVcIik7bGV0IGU9dC5wYXRobmFtZTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKylpZihlW3JdPT09XCIlXCIpe2xldCBpPWUuY29kZVBvaW50QXQocisyKXx8MzI7aWYoZVtyKzFdPT09XCIyXCImJmk9PT0xMDIpdGhyb3cgbmV3IERlbm8uZXJyb3JzLkludmFsaWREYXRhKFwibXVzdCBub3QgaW5jbHVkZSBlbmNvZGVkIC8gY2hhcmFjdGVyc1wiKX1yZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGUpfWZ1bmN0aW9uIGhnKHQpe2xldCBlPUphLnJlc29sdmUodCkscj10LmNoYXJDb2RlQXQodC5sZW5ndGgtMSk7KHI9PT1GRXx8aWwmJnI9PT1qRSkmJmVbZS5sZW5ndGgtMV0hPT1KYS5zZXAmJihlKz1cIi9cIik7bGV0IGk9bmV3IFVSTChcImZpbGU6Ly9cIik7cmV0dXJuIGUuaW5jbHVkZXMoXCIlXCIpJiYoZT1lLnJlcGxhY2UoVkUsXCIlMjVcIikpLCFpbCYmZS5pbmNsdWRlcyhcIlxcXFxcIikmJihlPWUucmVwbGFjZSh6RSxcIiU1Q1wiKSksZS5pbmNsdWRlcyhgXG5gKSYmKGU9ZS5yZXBsYWNlKEtFLFwiJTBBXCIpKSxlLmluY2x1ZGVzKFwiXFxyXCIpJiYoZT1lLnJlcGxhY2UoR0UsXCIlMERcIikpLGUuaW5jbHVkZXMoXCJcdFwiKSYmKGU9ZS5yZXBsYWNlKFFFLFwiJTA5XCIpKSxpLnBhdGhuYW1lPWUsaX12YXIgWixmRSxwdCxjRSxoRSxkRSxwRSx0bCxvZyxhZyxsZyxnRSx5RSxYYSxzaSxaYSxlbCx1ZyxmZyx3RSxfRSxtRSx2RSxFRSxybCxTRSxBRSxJRSxURSxSRSxDRSx4RSxNRSxMRSxVRSxORSxxRSxERSxqRSxGRSxXRSwkRSxpbCxIRSxWRSx6RSxLRSxHRSxRRSxwZz13ZSgoKT0+e3YoKTttKCk7XygpO1lwKCk7SnAoKTtyZygpO3NnKCk7UWEoKTtaPXt9LGZFPXp0LHB0PXtpc1N0cmluZzpmdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHQ9PVwic3RyaW5nXCJ9LGlzT2JqZWN0OmZ1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdD09XCJvYmplY3RcIiYmdCE9PW51bGx9LGlzTnVsbDpmdW5jdGlvbih0KXtyZXR1cm4gdD09PW51bGx9LGlzTnVsbE9yVW5kZWZpbmVkOmZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsfX07Wi5wYXJzZT14aSxaLnJlc29sdmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4geGkodCwhMSwhMCkucmVzb2x2ZShlKX0sWi5yZXNvbHZlT2JqZWN0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ/eGkodCwhMSwhMCkucmVzb2x2ZU9iamVjdChlKTplfSxaLmZvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4gcHQuaXNTdHJpbmcodCkmJih0PXhpKHQpKSx0IGluc3RhbmNlb2YgRmU/dC5mb3JtYXQoKTpGZS5wcm90b3R5cGUuZm9ybWF0LmNhbGwodCl9LFouVXJsPUZlO2NFPS9eKFthLXowLTkuKy1dKzopL2ksaEU9LzpbMC05XSokLyxkRT0vXihcXC9cXC8/KD8hXFwvKVteXFw/XFxzXSopKFxcP1teXFxzXSopPyQvLHBFPVtcIntcIixcIn1cIixcInxcIixcIlxcXFxcIixcIl5cIixcImBcIl0uY29uY2F0KFtcIjxcIixcIj5cIiwnXCInLFwiYFwiLFwiIFwiLFwiXFxyXCIsYFxuYCxcIlx0XCJdKSx0bD1bXCInXCJdLmNvbmNhdChwRSksb2c9W1wiJVwiLFwiL1wiLFwiP1wiLFwiO1wiLFwiI1wiXS5jb25jYXQodGwpLGFnPVtcIi9cIixcIj9cIixcIiNcIl0sbGc9L15bK2EtejAtOUEtWl8tXXswLDYzfSQvLGdFPS9eKFsrYS16MC05QS1aXy1dezAsNjN9KSguKikkLyx5RT17amF2YXNjcmlwdDohMCxcImphdmFzY3JpcHQ6XCI6ITB9LFhhPXtqYXZhc2NyaXB0OiEwLFwiamF2YXNjcmlwdDpcIjohMH0sc2k9e2h0dHA6ITAsaHR0cHM6ITAsZnRwOiEwLGdvcGhlcjohMCxmaWxlOiEwLFwiaHR0cDpcIjohMCxcImh0dHBzOlwiOiEwLFwiZnRwOlwiOiEwLFwiZ29waGVyOlwiOiEwLFwiZmlsZTpcIjohMH0sWmE9ZHQ7RmUucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKHQsZSxyKXtpZighcHQuaXNTdHJpbmcodCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgXCIrdHlwZW9mIHQpO3ZhciBpPXQuaW5kZXhPZihcIj9cIiksbj1pIT09LTEmJmk8dC5pbmRleE9mKFwiI1wiKT9cIj9cIjpcIiNcIixvPXQuc3BsaXQobik7b1swXT1vWzBdLnJlcGxhY2UoL1xcXFwvZyxcIi9cIik7dmFyIHM9dD1vLmpvaW4obik7aWYocz1zLnRyaW0oKSwhciYmdC5zcGxpdChcIiNcIikubGVuZ3RoPT09MSl7dmFyIGE9ZEUuZXhlYyhzKTtpZihhKXJldHVybiB0aGlzLnBhdGg9cyx0aGlzLmhyZWY9cyx0aGlzLnBhdGhuYW1lPWFbMV0sYVsyXT8odGhpcy5zZWFyY2g9YVsyXSx0aGlzLnF1ZXJ5PWU/WmEucGFyc2UodGhpcy5zZWFyY2guc3Vic3RyKDEpKTp0aGlzLnNlYXJjaC5zdWJzdHIoMSkpOmUmJih0aGlzLnNlYXJjaD1cIlwiLHRoaXMucXVlcnk9e30pLHRoaXN9dmFyIHU9Y0UuZXhlYyhzKTtpZih1KXt2YXIgYz0odT11WzBdKS50b0xvd2VyQ2FzZSgpO3RoaXMucHJvdG9jb2w9YyxzPXMuc3Vic3RyKHUubGVuZ3RoKTt9aWYocnx8dXx8cy5tYXRjaCgvXlxcL1xcL1teQFxcL10rQFteQFxcL10rLykpe3ZhciBoPXMuc3Vic3RyKDAsMik9PT1cIi8vXCI7IWh8fHUmJlhhW3VdfHwocz1zLnN1YnN0cigyKSx0aGlzLnNsYXNoZXM9ITApO31pZighWGFbdV0mJihofHx1JiYhc2lbdV0pKXtmb3IodmFyIGQsZyx5PS0xLHc9MDt3PGFnLmxlbmd0aDt3KyspKEU9cy5pbmRleE9mKGFnW3ddKSkhPT0tMSYmKHk9PT0tMXx8RTx5KSYmKHk9RSk7Zm9yKChnPXk9PT0tMT9zLmxhc3RJbmRleE9mKFwiQFwiKTpzLmxhc3RJbmRleE9mKFwiQFwiLHkpKSE9PS0xJiYoZD1zLnNsaWNlKDAsZykscz1zLnNsaWNlKGcrMSksdGhpcy5hdXRoPWRlY29kZVVSSUNvbXBvbmVudChkKSkseT0tMSx3PTA7dzxvZy5sZW5ndGg7dysrKXt2YXIgRTsoRT1zLmluZGV4T2Yob2dbd10pKSE9PS0xJiYoeT09PS0xfHxFPHkpJiYoeT1FKTt9eT09PS0xJiYoeT1zLmxlbmd0aCksdGhpcy5ob3N0PXMuc2xpY2UoMCx5KSxzPXMuc2xpY2UoeSksdGhpcy5wYXJzZUhvc3QoKSx0aGlzLmhvc3RuYW1lPXRoaXMuaG9zdG5hbWV8fFwiXCI7dmFyIFM9dGhpcy5ob3N0bmFtZVswXT09PVwiW1wiJiZ0aGlzLmhvc3RuYW1lW3RoaXMuaG9zdG5hbWUubGVuZ3RoLTFdPT09XCJdXCI7aWYoIVMpZm9yKHZhciBJPXRoaXMuaG9zdG5hbWUuc3BsaXQoL1xcLi8pLEM9KHc9MCxJLmxlbmd0aCk7dzxDO3crKyl7dmFyIFI9SVt3XTtpZihSJiYhUi5tYXRjaChsZykpe2Zvcih2YXIgVT1cIlwiLE49MCxXPVIubGVuZ3RoO048VztOKyspUi5jaGFyQ29kZUF0KE4pPjEyNz9VKz1cInhcIjpVKz1SW05dO2lmKCFVLm1hdGNoKGxnKSl7dmFyIEs9SS5zbGljZSgwLHcpLHo9SS5zbGljZSh3KzEpLFE9Ui5tYXRjaChnRSk7USYmKEsucHVzaChRWzFdKSx6LnVuc2hpZnQoUVsyXSkpLHoubGVuZ3RoJiYocz1cIi9cIit6LmpvaW4oXCIuXCIpK3MpLHRoaXMuaG9zdG5hbWU9Sy5qb2luKFwiLlwiKTticmVha319fXRoaXMuaG9zdG5hbWUubGVuZ3RoPjI1NT90aGlzLmhvc3RuYW1lPVwiXCI6dGhpcy5ob3N0bmFtZT10aGlzLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCksU3x8KHRoaXMuaG9zdG5hbWU9ZkUudG9BU0NJSSh0aGlzLmhvc3RuYW1lKSk7dmFyIGRlPXRoaXMucG9ydD9cIjpcIit0aGlzLnBvcnQ6XCJcIixHdD10aGlzLmhvc3RuYW1lfHxcIlwiO3RoaXMuaG9zdD1HdCtkZSx0aGlzLmhyZWYrPXRoaXMuaG9zdCxTJiYodGhpcy5ob3N0bmFtZT10aGlzLmhvc3RuYW1lLnN1YnN0cigxLHRoaXMuaG9zdG5hbWUubGVuZ3RoLTIpLHNbMF0hPT1cIi9cIiYmKHM9XCIvXCIrcykpO31pZigheUVbY10pZm9yKHc9MCxDPXRsLmxlbmd0aDt3PEM7dysrKXt2YXIgcGU9dGxbd107aWYocy5pbmRleE9mKHBlKSE9PS0xKXt2YXIgQ3I9ZW5jb2RlVVJJQ29tcG9uZW50KHBlKTtDcj09PXBlJiYoQ3I9ZXNjYXBlKHBlKSkscz1zLnNwbGl0KHBlKS5qb2luKENyKTt9fXZhciBCcj1zLmluZGV4T2YoXCIjXCIpO0JyIT09LTEmJih0aGlzLmhhc2g9cy5zdWJzdHIoQnIpLHM9cy5zbGljZSgwLEJyKSk7dmFyIFByPXMuaW5kZXhPZihcIj9cIik7aWYoUHIhPT0tMT8odGhpcy5zZWFyY2g9cy5zdWJzdHIoUHIpLHRoaXMucXVlcnk9cy5zdWJzdHIoUHIrMSksZSYmKHRoaXMucXVlcnk9WmEucGFyc2UodGhpcy5xdWVyeSkpLHM9cy5zbGljZSgwLFByKSk6ZSYmKHRoaXMuc2VhcmNoPVwiXCIsdGhpcy5xdWVyeT17fSkscyYmKHRoaXMucGF0aG5hbWU9cyksc2lbY10mJnRoaXMuaG9zdG5hbWUmJiF0aGlzLnBhdGhuYW1lJiYodGhpcy5wYXRobmFtZT1cIi9cIiksdGhpcy5wYXRobmFtZXx8dGhpcy5zZWFyY2gpe2RlPXRoaXMucGF0aG5hbWV8fFwiXCI7dmFyIHVzPXRoaXMuc2VhcmNofHxcIlwiO3RoaXMucGF0aD1kZSt1czt9cmV0dXJuIHRoaXMuaHJlZj10aGlzLmZvcm1hdCgpLHRoaXN9LEZlLnByb3RvdHlwZS5mb3JtYXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmF1dGh8fFwiXCI7dCYmKHQ9KHQ9ZW5jb2RlVVJJQ29tcG9uZW50KHQpKS5yZXBsYWNlKC8lM0EvaSxcIjpcIiksdCs9XCJAXCIpO3ZhciBlPXRoaXMucHJvdG9jb2x8fFwiXCIscj10aGlzLnBhdGhuYW1lfHxcIlwiLGk9dGhpcy5oYXNofHxcIlwiLG49ITEsbz1cIlwiO3RoaXMuaG9zdD9uPXQrdGhpcy5ob3N0OnRoaXMuaG9zdG5hbWUmJihuPXQrKHRoaXMuaG9zdG5hbWUuaW5kZXhPZihcIjpcIik9PT0tMT90aGlzLmhvc3RuYW1lOlwiW1wiK3RoaXMuaG9zdG5hbWUrXCJdXCIpLHRoaXMucG9ydCYmKG4rPVwiOlwiK3RoaXMucG9ydCkpLHRoaXMucXVlcnkmJnB0LmlzT2JqZWN0KHRoaXMucXVlcnkpJiZPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5KS5sZW5ndGgmJihvPVphLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KSk7dmFyIHM9dGhpcy5zZWFyY2h8fG8mJlwiP1wiK298fFwiXCI7cmV0dXJuIGUmJmUuc3Vic3RyKC0xKSE9PVwiOlwiJiYoZSs9XCI6XCIpLHRoaXMuc2xhc2hlc3x8KCFlfHxzaVtlXSkmJm4hPT0hMT8obj1cIi8vXCIrKG58fFwiXCIpLHImJnIuY2hhckF0KDApIT09XCIvXCImJihyPVwiL1wiK3IpKTpufHwobj1cIlwiKSxpJiZpLmNoYXJBdCgwKSE9PVwiI1wiJiYoaT1cIiNcIitpKSxzJiZzLmNoYXJBdCgwKSE9PVwiP1wiJiYocz1cIj9cIitzKSxlK24rKHI9ci5yZXBsYWNlKC9bPyNdL2csZnVuY3Rpb24oYSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChhKX0pKSsocz1zLnJlcGxhY2UoXCIjXCIsXCIlMjNcIikpK2l9LEZlLnByb3RvdHlwZS5yZXNvbHZlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJlc29sdmVPYmplY3QoeGkodCwhMSwhMCkpLmZvcm1hdCgpfSxGZS5wcm90b3R5cGUucmVzb2x2ZU9iamVjdD1mdW5jdGlvbih0KXtpZihwdC5pc1N0cmluZyh0KSl7dmFyIGU9bmV3IEZlO2UucGFyc2UodCwhMSwhMCksdD1lO31mb3IodmFyIHI9bmV3IEZlLGk9T2JqZWN0LmtleXModGhpcyksbj0wO248aS5sZW5ndGg7bisrKXt2YXIgbz1pW25dO3Jbb109dGhpc1tvXTt9aWYoci5oYXNoPXQuaGFzaCx0LmhyZWY9PT1cIlwiKXJldHVybiByLmhyZWY9ci5mb3JtYXQoKSxyO2lmKHQuc2xhc2hlcyYmIXQucHJvdG9jb2wpe2Zvcih2YXIgcz1PYmplY3Qua2V5cyh0KSxhPTA7YTxzLmxlbmd0aDthKyspe3ZhciB1PXNbYV07dSE9PVwicHJvdG9jb2xcIiYmKHJbdV09dFt1XSk7fXJldHVybiBzaVtyLnByb3RvY29sXSYmci5ob3N0bmFtZSYmIXIucGF0aG5hbWUmJihyLnBhdGg9ci5wYXRobmFtZT1cIi9cIiksci5ocmVmPXIuZm9ybWF0KCkscn1pZih0LnByb3RvY29sJiZ0LnByb3RvY29sIT09ci5wcm90b2NvbCl7aWYoIXNpW3QucHJvdG9jb2xdKXtmb3IodmFyIGM9T2JqZWN0LmtleXModCksaD0wO2g8Yy5sZW5ndGg7aCsrKXt2YXIgZD1jW2hdO3JbZF09dFtkXTt9cmV0dXJuIHIuaHJlZj1yLmZvcm1hdCgpLHJ9aWYoci5wcm90b2NvbD10LnByb3RvY29sLHQuaG9zdHx8WGFbdC5wcm90b2NvbF0pci5wYXRobmFtZT10LnBhdGhuYW1lO2Vsc2Uge2Zvcih2YXIgZz0odC5wYXRobmFtZXx8XCJcIikuc3BsaXQoXCIvXCIpO2cubGVuZ3RoJiYhKHQuaG9zdD1nLnNoaWZ0KCkpOyk7dC5ob3N0fHwodC5ob3N0PVwiXCIpLHQuaG9zdG5hbWV8fCh0Lmhvc3RuYW1lPVwiXCIpLGdbMF0hPT1cIlwiJiZnLnVuc2hpZnQoXCJcIiksZy5sZW5ndGg8MiYmZy51bnNoaWZ0KFwiXCIpLHIucGF0aG5hbWU9Zy5qb2luKFwiL1wiKTt9aWYoci5zZWFyY2g9dC5zZWFyY2gsci5xdWVyeT10LnF1ZXJ5LHIuaG9zdD10Lmhvc3R8fFwiXCIsci5hdXRoPXQuYXV0aCxyLmhvc3RuYW1lPXQuaG9zdG5hbWV8fHQuaG9zdCxyLnBvcnQ9dC5wb3J0LHIucGF0aG5hbWV8fHIuc2VhcmNoKXt2YXIgeT1yLnBhdGhuYW1lfHxcIlwiLHc9ci5zZWFyY2h8fFwiXCI7ci5wYXRoPXkrdzt9cmV0dXJuIHIuc2xhc2hlcz1yLnNsYXNoZXN8fHQuc2xhc2hlcyxyLmhyZWY9ci5mb3JtYXQoKSxyfXZhciBFPXIucGF0aG5hbWUmJnIucGF0aG5hbWUuY2hhckF0KDApPT09XCIvXCIsUz10Lmhvc3R8fHQucGF0aG5hbWUmJnQucGF0aG5hbWUuY2hhckF0KDApPT09XCIvXCIsST1TfHxFfHxyLmhvc3QmJnQucGF0aG5hbWUsQz1JLFI9ci5wYXRobmFtZSYmci5wYXRobmFtZS5zcGxpdChcIi9cIil8fFtdLFU9KGc9dC5wYXRobmFtZSYmdC5wYXRobmFtZS5zcGxpdChcIi9cIil8fFtdLHIucHJvdG9jb2wmJiFzaVtyLnByb3RvY29sXSk7aWYoVSYmKHIuaG9zdG5hbWU9XCJcIixyLnBvcnQ9bnVsbCxyLmhvc3QmJihSWzBdPT09XCJcIj9SWzBdPXIuaG9zdDpSLnVuc2hpZnQoci5ob3N0KSksci5ob3N0PVwiXCIsdC5wcm90b2NvbCYmKHQuaG9zdG5hbWU9bnVsbCx0LnBvcnQ9bnVsbCx0Lmhvc3QmJihnWzBdPT09XCJcIj9nWzBdPXQuaG9zdDpnLnVuc2hpZnQodC5ob3N0KSksdC5ob3N0PW51bGwpLEk9SSYmKGdbMF09PT1cIlwifHxSWzBdPT09XCJcIikpLFMpci5ob3N0PXQuaG9zdHx8dC5ob3N0PT09XCJcIj90Lmhvc3Q6ci5ob3N0LHIuaG9zdG5hbWU9dC5ob3N0bmFtZXx8dC5ob3N0bmFtZT09PVwiXCI/dC5ob3N0bmFtZTpyLmhvc3RuYW1lLHIuc2VhcmNoPXQuc2VhcmNoLHIucXVlcnk9dC5xdWVyeSxSPWc7ZWxzZSBpZihnLmxlbmd0aClSfHwoUj1bXSksUi5wb3AoKSxSPVIuY29uY2F0KGcpLHIuc2VhcmNoPXQuc2VhcmNoLHIucXVlcnk9dC5xdWVyeTtlbHNlIGlmKCFwdC5pc051bGxPclVuZGVmaW5lZCh0LnNlYXJjaCkpcmV0dXJuIFUmJihyLmhvc3RuYW1lPXIuaG9zdD1SLnNoaWZ0KCksKFE9ISEoci5ob3N0JiZyLmhvc3QuaW5kZXhPZihcIkBcIik+MCkmJnIuaG9zdC5zcGxpdChcIkBcIikpJiYoci5hdXRoPVEuc2hpZnQoKSxyLmhvc3Q9ci5ob3N0bmFtZT1RLnNoaWZ0KCkpKSxyLnNlYXJjaD10LnNlYXJjaCxyLnF1ZXJ5PXQucXVlcnkscHQuaXNOdWxsKHIucGF0aG5hbWUpJiZwdC5pc051bGwoci5zZWFyY2gpfHwoci5wYXRoPShyLnBhdGhuYW1lP3IucGF0aG5hbWU6XCJcIikrKHIuc2VhcmNoP3Iuc2VhcmNoOlwiXCIpKSxyLmhyZWY9ci5mb3JtYXQoKSxyO2lmKCFSLmxlbmd0aClyZXR1cm4gci5wYXRobmFtZT1udWxsLHIuc2VhcmNoP3IucGF0aD1cIi9cIityLnNlYXJjaDpyLnBhdGg9bnVsbCxyLmhyZWY9ci5mb3JtYXQoKSxyO2Zvcih2YXIgTj1SLnNsaWNlKC0xKVswXSxXPShyLmhvc3R8fHQuaG9zdHx8Ui5sZW5ndGg+MSkmJihOPT09XCIuXCJ8fE49PT1cIi4uXCIpfHxOPT09XCJcIixLPTAsej1SLmxlbmd0aDt6Pj0wO3otLSkoTj1SW3pdKT09PVwiLlwiP1Iuc3BsaWNlKHosMSk6Tj09PVwiLi5cIj8oUi5zcGxpY2UoeiwxKSxLKyspOksmJihSLnNwbGljZSh6LDEpLEstLSk7aWYoIUkmJiFDKWZvcig7Sy0tO0spUi51bnNoaWZ0KFwiLi5cIik7IUl8fFJbMF09PT1cIlwifHxSWzBdJiZSWzBdLmNoYXJBdCgwKT09PVwiL1wifHxSLnVuc2hpZnQoXCJcIiksVyYmUi5qb2luKFwiL1wiKS5zdWJzdHIoLTEpIT09XCIvXCImJlIucHVzaChcIlwiKTt2YXIgUSxkZT1SWzBdPT09XCJcInx8UlswXSYmUlswXS5jaGFyQXQoMCk9PT1cIi9cIjtyZXR1cm4gVSYmKHIuaG9zdG5hbWU9ci5ob3N0PWRlP1wiXCI6Ui5sZW5ndGg/Ui5zaGlmdCgpOlwiXCIsKFE9ISEoci5ob3N0JiZyLmhvc3QuaW5kZXhPZihcIkBcIik+MCkmJnIuaG9zdC5zcGxpdChcIkBcIikpJiYoci5hdXRoPVEuc2hpZnQoKSxyLmhvc3Q9ci5ob3N0bmFtZT1RLnNoaWZ0KCkpKSwoST1JfHxyLmhvc3QmJlIubGVuZ3RoKSYmIWRlJiZSLnVuc2hpZnQoXCJcIiksUi5sZW5ndGg/ci5wYXRobmFtZT1SLmpvaW4oXCIvXCIpOihyLnBhdGhuYW1lPW51bGwsci5wYXRoPW51bGwpLHB0LmlzTnVsbChyLnBhdGhuYW1lKSYmcHQuaXNOdWxsKHIuc2VhcmNoKXx8KHIucGF0aD0oci5wYXRobmFtZT9yLnBhdGhuYW1lOlwiXCIpKyhyLnNlYXJjaD9yLnNlYXJjaDpcIlwiKSksci5hdXRoPXQuYXV0aHx8ci5hdXRoLHIuc2xhc2hlcz1yLnNsYXNoZXN8fHQuc2xhc2hlcyxyLmhyZWY9ci5mb3JtYXQoKSxyfSxGZS5wcm90b3R5cGUucGFyc2VIb3N0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5ob3N0LGU9aEUuZXhlYyh0KTtlJiYoKGU9ZVswXSkhPT1cIjpcIiYmKHRoaXMucG9ydD1lLnN1YnN0cigxKSksdD10LnN1YnN0cigwLHQubGVuZ3RoLWUubGVuZ3RoKSksdCYmKHRoaXMuaG9zdG5hbWU9dCk7fTtaLlVybDtaLmZvcm1hdDtaLnJlc29sdmU7Wi5yZXNvbHZlT2JqZWN0O2VsPXt9LHVnPSExO2ZnPWJFKCksd0U9dHlwZW9mIERlbm88XCJ1XCI/RGVuby5idWlsZC5vcz09PVwid2luZG93c1wiP1wid2luMzJcIjpEZW5vLmJ1aWxkLm9zOnZvaWQgMDtaLlVSTD10eXBlb2YgVVJMPFwidVwiP1VSTDpudWxsO1oucGF0aFRvRmlsZVVSTD1rRTtaLmZpbGVVUkxUb1BhdGg9QkU7Wi5Vcmw7Wi5mb3JtYXQ7Wi5yZXNvbHZlO1oucmVzb2x2ZU9iamVjdDtaLlVSTDtfRT05MixtRT00Nyx2RT05NyxFRT0xMjIscmw9d0U9PT1cIndpbjMyXCIsU0U9L1xcLy9nLEFFPS8lL2csSUU9L1xcXFwvZyxURT0vXFxuL2csUkU9L1xcci9nLENFPS9cXHQvZzt4RT10eXBlb2YgRGVubzxcInVcIj9EZW5vLmJ1aWxkLm9zPT09XCJ3aW5kb3dzXCI/XCJ3aW4zMlwiOkRlbm8uYnVpbGQub3M6dm9pZCAwO1ouVVJMPXR5cGVvZiBVUkw8XCJ1XCI/VVJMOm51bGw7Wi5wYXRoVG9GaWxlVVJMPWhnO1ouZmlsZVVSTFRvUGF0aD1jZztNRT1aLlVybCxMRT1aLmZvcm1hdCxVRT1aLnJlc29sdmUsTkU9Wi5yZXNvbHZlT2JqZWN0LHFFPVoucGFyc2UsREU9Wi5VUkwsakU9OTIsRkU9NDcsV0U9OTcsJEU9MTIyLGlsPXhFPT09XCJ3aW4zMlwiLEhFPS9cXC8vZyxWRT0vJS9nLHpFPS9cXFxcL2csS0U9L1xcbi9nLEdFPS9cXHIvZyxRRT0vXFx0L2c7fSk7dmFyIG5sPXt9O1F0KG5sLHtTZXJ2ZXI6KCk9Pk1lLFNvY2tldDooKT0+TWUsU3RyZWFtOigpPT5NZSxfY3JlYXRlU2VydmVySGFuZGxlOigpPT5NZSxfbm9ybWFsaXplQXJnczooKT0+TWUsX3NldFNpbXVsdGFuZW91c0FjY2VwdHM6KCk9Pk1lLGNvbm5lY3Q6KCk9Pk1lLGNyZWF0ZUNvbm5lY3Rpb246KCk9Pk1lLGNyZWF0ZVNlcnZlcjooKT0+TWUsZGVmYXVsdDooKT0+WEUsaXNJUDooKT0+TWUsaXNJUHY0OigpPT5NZSxpc0lQdjY6KCk9Pk1lfSk7ZnVuY3Rpb24gTWUoKXt0aHJvdyBuZXcgRXJyb3IoXCJOb2RlLmpzIG5ldCBtb2R1bGUgaXMgbm90IHN1cHBvcnRlZCBieSBKU1BNIGNvcmUgb3V0c2lkZSBvZiBOb2RlLmpzXCIpfXZhciBYRSxzbD13ZSgoKT0+e3YoKTttKCk7XygpO1hFPXtfY3JlYXRlU2VydmVySGFuZGxlOk1lLF9ub3JtYWxpemVBcmdzOk1lLF9zZXRTaW11bHRhbmVvdXNBY2NlcHRzOk1lLGNvbm5lY3Q6TWUsY3JlYXRlQ29ubmVjdGlvbjpNZSxjcmVhdGVTZXJ2ZXI6TWUsaXNJUDpNZSxpc0lQdjQ6TWUsaXNJUHY2Ok1lLFNlcnZlcjpNZSxTb2NrZXQ6TWUsU3RyZWFtOk1lfTt9KTt2YXIgb2w9TShNaT0+e3YoKTttKCk7XygpO3ZhciBnZz1NaSYmTWkuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlP3Q6e2RlZmF1bHQ6dH19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShNaSxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgWkU9Z2coKHNsKCksWChubCkpKSxlUz1nZyhvdCgpKSx0Uz0oMCwgZVMuZGVmYXVsdCkoXCJtcXR0anM6dGNwXCIpLHJTPSh0LGUpPT57ZS5wb3J0PWUucG9ydHx8MTg4MyxlLmhvc3RuYW1lPWUuaG9zdG5hbWV8fGUuaG9zdHx8XCJsb2NhbGhvc3RcIjtsZXR7cG9ydDpyfT1lLGk9ZS5ob3N0bmFtZTtyZXR1cm4gdFMoXCJwb3J0ICVkIGFuZCBob3N0ICVzXCIscixpKSxaRS5kZWZhdWx0LmNyZWF0ZUNvbm5lY3Rpb24ocixpKX07TWkuZGVmYXVsdD1yUzt9KTt2YXIgeWc9e307UXQoeWcse2RlZmF1bHQ6KCk9PmlTfSk7dmFyIGlTLGJnPXdlKCgpPT57digpO20oKTtfKCk7aVM9e307fSk7dmFyIGxsPU0oTGk9Pnt2KCk7bSgpO18oKTt2YXIgYWw9TGkmJkxpLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuX19lc01vZHVsZT90OntkZWZhdWx0OnR9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTGksXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIG5TPWFsKChiZygpLFgoeWcpKSksc1M9YWwoKHNsKCksWChubCkpKSxvUz1hbChvdCgpKSxhUz0oMCwgb1MuZGVmYXVsdCkoXCJtcXR0anM6dGxzXCIpLGxTPSh0LGUpPT57ZS5wb3J0PWUucG9ydHx8ODg4MyxlLmhvc3Q9ZS5ob3N0bmFtZXx8ZS5ob3N0fHxcImxvY2FsaG9zdFwiLHNTLmRlZmF1bHQuaXNJUChlLmhvc3QpPT09MCYmKGUuc2VydmVybmFtZT1lLmhvc3QpLGUucmVqZWN0VW5hdXRob3JpemVkPWUucmVqZWN0VW5hdXRob3JpemVkIT09ITEsZGVsZXRlIGUucGF0aCxhUyhcInBvcnQgJWQgaG9zdCAlcyByZWplY3RVbmF1dGhvcml6ZWQgJWJcIixlLnBvcnQsZS5ob3N0LGUucmVqZWN0VW5hdXRob3JpemVkKTtsZXQgcj1uUy5kZWZhdWx0LmNvbm5lY3QoZSk7ci5vbihcInNlY3VyZUNvbm5lY3RcIiwoKT0+e2UucmVqZWN0VW5hdXRob3JpemVkJiYhci5hdXRob3JpemVkP3IuZW1pdChcImVycm9yXCIsbmV3IEVycm9yKFwiVExTIG5vdCBhdXRob3JpemVkXCIpKTpyLnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIixpKTt9KTtmdW5jdGlvbiBpKG4pe2UucmVqZWN0VW5hdXRob3JpemVkJiZ0LmVtaXQoXCJlcnJvclwiLG4pLHIuZW5kKCk7fXJldHVybiByLm9uKFwiZXJyb3JcIixpKSxyfTtMaS5kZWZhdWx0PWxTO30pO3ZhciBvcz1NKG9pPT57digpO20oKTtfKCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KG9pLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO29pLkJ1ZmZlcmVkRHVwbGV4PW9pLndyaXRldj12b2lkIDA7dmFyIHVTPUR0KCksd2c9KHllKCksWChfZSkpO2Z1bmN0aW9uIF9nKHQsZSl7bGV0IHI9bmV3IEFycmF5KHQubGVuZ3RoKTtmb3IobGV0IGk9MDtpPHQubGVuZ3RoO2krKyl0eXBlb2YgdFtpXS5jaHVuaz09XCJzdHJpbmdcIj9yW2ldPXdnLkJ1ZmZlci5mcm9tKHRbaV0uY2h1bmssXCJ1dGY4XCIpOnJbaV09dFtpXS5jaHVuazt0aGlzLl93cml0ZSh3Zy5CdWZmZXIuY29uY2F0KHIpLFwiYmluYXJ5XCIsZSk7fW9pLndyaXRldj1fZzt2YXIgdWw9Y2xhc3MgZXh0ZW5kcyB1Uy5EdXBsZXh7Y29uc3RydWN0b3IoZSxyLGkpe3N1cGVyKHtvYmplY3RNb2RlOiEwfSksdGhpcy5wcm94eT1yLHRoaXMuc29ja2V0PWksdGhpcy53cml0ZVF1ZXVlPVtdLGUub2JqZWN0TW9kZXx8KHRoaXMuX3dyaXRldj1fZy5iaW5kKHRoaXMpKSx0aGlzLmlzU29ja2V0T3Blbj0hMSx0aGlzLnByb3h5Lm9uKFwiZGF0YVwiLG49Pnt0aGlzLnB1c2gobik7fSk7fV9yZWFkKGUpe3RoaXMucHJveHkucmVhZChlKTt9X3dyaXRlKGUscixpKXt0aGlzLmlzU29ja2V0T3Blbj90aGlzLndyaXRlVG9Qcm94eShlLHIsaSk6dGhpcy53cml0ZVF1ZXVlLnB1c2goe2NodW5rOmUsZW5jb2Rpbmc6cixjYjppfSk7fV9maW5hbChlKXt0aGlzLndyaXRlUXVldWU9W10sdGhpcy5wcm94eS5lbmQoZSk7fV9kZXN0cm95KGUscil7dGhpcy53cml0ZVF1ZXVlPVtdLHRoaXMucHJveHkuZGVzdHJveSgpLHIoZSk7fXNvY2tldFJlYWR5KCl7dGhpcy5lbWl0KFwiY29ubmVjdFwiKSx0aGlzLmlzU29ja2V0T3Blbj0hMCx0aGlzLnByb2Nlc3NXcml0ZVF1ZXVlKCk7fXdyaXRlVG9Qcm94eShlLHIsaSl7dGhpcy5wcm94eS53cml0ZShlLHIpPT09ITE/dGhpcy5wcm94eS5vbmNlKFwiZHJhaW5cIixpKTppKCk7fXByb2Nlc3NXcml0ZVF1ZXVlKCl7Zm9yKDt0aGlzLndyaXRlUXVldWUubGVuZ3RoPjA7KXtsZXR7Y2h1bms6ZSxlbmNvZGluZzpyLGNiOml9PXRoaXMud3JpdGVRdWV1ZS5zaGlmdCgpO3RoaXMud3JpdGVUb1Byb3h5KGUscixpKTt9fX07b2kuQnVmZmVyZWREdXBsZXg9dWw7fSk7dmFyIGhsPU0oY2w9Pnt2KCk7bSgpO18oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoY2wsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIG1nPSh5ZSgpLFgoX2UpKSxmUz1EdCgpLGNTPW9zKCksZ3QsZmwsTGU7ZnVuY3Rpb24gaFMoKXtsZXQgdD1uZXcgZlMuVHJhbnNmb3JtO3JldHVybiB0Ll93cml0ZT0oZSxyLGkpPT57Z3Quc2VuZCh7ZGF0YTplLmJ1ZmZlcixzdWNjZXNzKCl7aSgpO30sZmFpbChuKXtpKG5ldyBFcnJvcihuKSk7fX0pO30sdC5fZmx1c2g9ZT0+e2d0LmNsb3NlKHtzdWNjZXNzKCl7ZSgpO319KTt9LHR9ZnVuY3Rpb24gZFModCl7dC5ob3N0bmFtZXx8KHQuaG9zdG5hbWU9XCJsb2NhbGhvc3RcIiksdC5wYXRofHwodC5wYXRoPVwiL1wiKSx0LndzT3B0aW9uc3x8KHQud3NPcHRpb25zPXt9KTt9ZnVuY3Rpb24gcFModCxlKXtsZXQgcj10LnByb3RvY29sPT09XCJ3eHNcIj9cIndzc1wiOlwid3NcIixpPWAke3J9Oi8vJHt0Lmhvc3RuYW1lfSR7dC5wYXRofWA7cmV0dXJuIHQucG9ydCYmdC5wb3J0IT09ODAmJnQucG9ydCE9PTQ0MyYmKGk9YCR7cn06Ly8ke3QuaG9zdG5hbWV9OiR7dC5wb3J0fSR7dC5wYXRofWApLHR5cGVvZiB0LnRyYW5zZm9ybVdzVXJsPT1cImZ1bmN0aW9uXCImJihpPXQudHJhbnNmb3JtV3NVcmwoaSx0LGUpKSxpfWZ1bmN0aW9uIGdTKCl7Z3Qub25PcGVuKCgpPT57TGUuc29ja2V0UmVhZHkoKTt9KSxndC5vbk1lc3NhZ2UodD0+e2xldHtkYXRhOmV9PXQ7ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP2U9bWcuQnVmZmVyLmZyb20oZSk6ZT1tZy5CdWZmZXIuZnJvbShlLFwidXRmOFwiKSxmbC5wdXNoKGUpO30pLGd0Lm9uQ2xvc2UoKCk9PntMZS5lbWl0KFwiY2xvc2VcIiksTGUuZW5kKCksTGUuZGVzdHJveSgpO30pLGd0Lm9uRXJyb3IodD0+e2xldCBlPW5ldyBFcnJvcih0LmVyck1zZyk7TGUuZGVzdHJveShlKTt9KTt9dmFyIHlTPSh0LGUpPT57aWYoZS5ob3N0bmFtZT1lLmhvc3RuYW1lfHxlLmhvc3QsIWUuaG9zdG5hbWUpdGhyb3cgbmV3IEVycm9yKFwiQ291bGQgbm90IGRldGVybWluZSBob3N0LiBTcGVjaWZ5IGhvc3QgbWFudWFsbHkuXCIpO2xldCByPWUucHJvdG9jb2xJZD09PVwiTVFJc2RwXCImJmUucHJvdG9jb2xWZXJzaW9uPT09Mz9cIm1xdHR2My4xXCI6XCJtcXR0XCI7ZFMoZSk7bGV0IGk9cFMoZSx0KTtndD13eC5jb25uZWN0U29ja2V0KHt1cmw6aSxwcm90b2NvbHM6W3JdfSksZmw9aFMoKSxMZT1uZXcgY1MuQnVmZmVyZWREdXBsZXgoZSxmbCxndCksTGUuX2Rlc3Ryb3k9KG8scyk9PntndC5jbG9zZSh7c3VjY2Vzcygpe3MmJnMobyk7fX0pO307bGV0IG49TGUuZGVzdHJveTtyZXR1cm4gTGUuZGVzdHJveT0obyxzKT0+KExlLmRlc3Ryb3k9bixzZXRUaW1lb3V0KCgpPT57Z3QuY2xvc2Uoe2ZhaWwoKXtMZS5fZGVzdHJveShvLHMpO319KTt9LDApLExlKSxnUygpLExlfTtjbC5kZWZhdWx0PXlTO30pO3ZhciBnbD1NKHBsPT57digpO20oKTtfKCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHBsLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBkbD0oeWUoKSxYKF9lKSksYlM9RHQoKSx3Uz1vcygpLGt0LGFzLGFpLHZnPSExO2Z1bmN0aW9uIF9TKCl7bGV0IHQ9bmV3IGJTLlRyYW5zZm9ybTtyZXR1cm4gdC5fd3JpdGU9KGUscixpKT0+e2t0LnNlbmRTb2NrZXRNZXNzYWdlKHtkYXRhOmUuYnVmZmVyLHN1Y2Nlc3MoKXtpKCk7fSxmYWlsKCl7aShuZXcgRXJyb3IpO319KTt9LHQuX2ZsdXNoPWU9PntrdC5jbG9zZVNvY2tldCh7c3VjY2Vzcygpe2UoKTt9fSk7fSx0fWZ1bmN0aW9uIG1TKHQpe3QuaG9zdG5hbWV8fCh0Lmhvc3RuYW1lPVwibG9jYWxob3N0XCIpLHQucGF0aHx8KHQucGF0aD1cIi9cIiksdC53c09wdGlvbnN8fCh0LndzT3B0aW9ucz17fSk7fWZ1bmN0aW9uIHZTKHQsZSl7bGV0IHI9dC5wcm90b2NvbD09PVwiYWxpc1wiP1wid3NzXCI6XCJ3c1wiLGk9YCR7cn06Ly8ke3QuaG9zdG5hbWV9JHt0LnBhdGh9YDtyZXR1cm4gdC5wb3J0JiZ0LnBvcnQhPT04MCYmdC5wb3J0IT09NDQzJiYoaT1gJHtyfTovLyR7dC5ob3N0bmFtZX06JHt0LnBvcnR9JHt0LnBhdGh9YCksdHlwZW9mIHQudHJhbnNmb3JtV3NVcmw9PVwiZnVuY3Rpb25cIiYmKGk9dC50cmFuc2Zvcm1Xc1VybChpLHQsZSkpLGl9ZnVuY3Rpb24gRVMoKXt2Z3x8KHZnPSEwLGt0Lm9uU29ja2V0T3BlbigoKT0+e2FpLnNvY2tldFJlYWR5KCk7fSksa3Qub25Tb2NrZXRNZXNzYWdlKHQ9PntpZih0eXBlb2YgdC5kYXRhPT1cInN0cmluZ1wiKXtsZXQgZT1kbC5CdWZmZXIuZnJvbSh0LmRhdGEsXCJiYXNlNjRcIik7YXMucHVzaChlKTt9ZWxzZSB7bGV0IGU9bmV3IEZpbGVSZWFkZXI7ZS5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCgpPT57bGV0IHI9ZS5yZXN1bHQ7ciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP3I9ZGwuQnVmZmVyLmZyb20ocik6cj1kbC5CdWZmZXIuZnJvbShyLFwidXRmOFwiKSxhcy5wdXNoKHIpO30pLGUucmVhZEFzQXJyYXlCdWZmZXIodC5kYXRhKTt9fSksa3Qub25Tb2NrZXRDbG9zZSgoKT0+e2FpLmVuZCgpLGFpLmRlc3Ryb3koKTt9KSxrdC5vblNvY2tldEVycm9yKHQ9PnthaS5kZXN0cm95KHQpO30pKTt9dmFyIFNTPSh0LGUpPT57aWYoZS5ob3N0bmFtZT1lLmhvc3RuYW1lfHxlLmhvc3QsIWUuaG9zdG5hbWUpdGhyb3cgbmV3IEVycm9yKFwiQ291bGQgbm90IGRldGVybWluZSBob3N0LiBTcGVjaWZ5IGhvc3QgbWFudWFsbHkuXCIpO2xldCByPWUucHJvdG9jb2xJZD09PVwiTVFJc2RwXCImJmUucHJvdG9jb2xWZXJzaW9uPT09Mz9cIm1xdHR2My4xXCI6XCJtcXR0XCI7bVMoZSk7bGV0IGk9dlMoZSx0KTtyZXR1cm4ga3Q9ZS5teSxrdC5jb25uZWN0U29ja2V0KHt1cmw6aSxwcm90b2NvbHM6cn0pLGFzPV9TKCksYWk9bmV3IHdTLkJ1ZmZlcmVkRHVwbGV4KGUsYXMsa3QpLEVTKCksYWl9O3BsLmRlZmF1bHQ9U1M7fSk7dmFyIFNnPU0oKFBELEVnKT0+e3YoKTttKCk7XygpO0VnLmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJ3cyBkb2VzIG5vdCB3b3JrIGluIHRoZSBicm93c2VyLiBCcm93c2VyIGNsaWVudHMgbXVzdCB1c2UgdGhlIG5hdGl2ZSBXZWJTb2NrZXQgb2JqZWN0XCIpfTt9KTt2YXIgX2w9TShVaT0+e3YoKTttKCk7XygpO3ZhciB3bD1VaSYmVWkuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlP3Q6e2RlZmF1bHQ6dH19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShVaSxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgeWw9KHllKCksWChfZSkpLEFnPXdsKFNnKCkpLEFTPXdsKG90KCkpLElTPUR0KCksSWc9d2woUGkoKSksYmw9b3MoKSxLdD0oMCwgQVMuZGVmYXVsdCkoXCJtcXR0anM6d3NcIiksVFM9W1wicmVqZWN0VW5hdXRob3JpemVkXCIsXCJjYVwiLFwiY2VydFwiLFwia2V5XCIsXCJwZnhcIixcInBhc3NwaHJhc2VcIl07ZnVuY3Rpb24gVGcodCxlKXtsZXQgcj1gJHt0LnByb3RvY29sfTovLyR7dC5ob3N0bmFtZX06JHt0LnBvcnR9JHt0LnBhdGh9YDtyZXR1cm4gdHlwZW9mIHQudHJhbnNmb3JtV3NVcmw9PVwiZnVuY3Rpb25cIiYmKHI9dC50cmFuc2Zvcm1Xc1VybChyLHQsZSkpLHJ9ZnVuY3Rpb24gUmcodCl7bGV0IGU9dDtyZXR1cm4gdC5ob3N0bmFtZXx8KGUuaG9zdG5hbWU9XCJsb2NhbGhvc3RcIiksdC5wb3J0fHwodC5wcm90b2NvbD09PVwid3NzXCI/ZS5wb3J0PTQ0MzplLnBvcnQ9ODApLHQucGF0aHx8KGUucGF0aD1cIi9cIiksdC53c09wdGlvbnN8fChlLndzT3B0aW9ucz17fSksIUlnLmRlZmF1bHQmJnQucHJvdG9jb2w9PT1cIndzc1wiJiZUUy5mb3JFYWNoKHI9PntPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxyKSYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LndzT3B0aW9ucyxyKSYmKGUud3NPcHRpb25zW3JdPXRbcl0pO30pLGV9ZnVuY3Rpb24gUlModCl7bGV0IGU9UmcodCk7aWYoZS5ob3N0bmFtZXx8KGUuaG9zdG5hbWU9ZS5ob3N0KSwhZS5ob3N0bmFtZSl7aWYodHlwZW9mIGRvY3VtZW50PlwidVwiKXRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBkZXRlcm1pbmUgaG9zdC4gU3BlY2lmeSBob3N0IG1hbnVhbGx5LlwiKTtsZXQgcj1uZXcgVVJMKGRvY3VtZW50LlVSTCk7ZS5ob3N0bmFtZT1yLmhvc3RuYW1lLGUucG9ydHx8KGUucG9ydD1OdW1iZXIoci5wb3J0KSk7fXJldHVybiBlLm9iamVjdE1vZGU9PT12b2lkIDAmJihlLm9iamVjdE1vZGU9IShlLmJpbmFyeT09PSEwfHxlLmJpbmFyeT09PXZvaWQgMCkpLGV9ZnVuY3Rpb24gQ1ModCxlLHIpe0t0KFwiY3JlYXRlV2ViU29ja2V0XCIpLEt0KGBwcm90b2NvbDogJHtyLnByb3RvY29sSWR9ICR7ci5wcm90b2NvbFZlcnNpb259YCk7bGV0IGk9ci5wcm90b2NvbElkPT09XCJNUUlzZHBcIiYmci5wcm90b2NvbFZlcnNpb249PT0zP1wibXF0dHYzLjFcIjpcIm1xdHRcIjtLdChgY3JlYXRpbmcgbmV3IFdlYnNvY2tldCBmb3IgdXJsOiAke2V9IGFuZCBwcm90b2NvbDogJHtpfWApO2xldCBuO3JldHVybiByLmNyZWF0ZVdlYnNvY2tldD9uPXIuY3JlYXRlV2Vic29ja2V0KGUsW2ldLHIpOm49bmV3IEFnLmRlZmF1bHQoZSxbaV0sci53c09wdGlvbnMpLG59ZnVuY3Rpb24gQlModCxlKXtsZXQgcj1lLnByb3RvY29sSWQ9PT1cIk1RSXNkcFwiJiZlLnByb3RvY29sVmVyc2lvbj09PTM/XCJtcXR0djMuMVwiOlwibXF0dFwiLGk9VGcoZSx0KSxuO3JldHVybiBlLmNyZWF0ZVdlYnNvY2tldD9uPWUuY3JlYXRlV2Vic29ja2V0KGksW3JdLGUpOm49bmV3IFdlYlNvY2tldChpLFtyXSksbi5iaW5hcnlUeXBlPVwiYXJyYXlidWZmZXJcIixufXZhciBQUz0odCxlKT0+e0t0KFwic3RyZWFtQnVpbGRlclwiKTtsZXQgcj1SZyhlKSxpPVRnKHIsdCksbj1DUyh0LGksciksbz1BZy5kZWZhdWx0LmNyZWF0ZVdlYlNvY2tldFN0cmVhbShuLHIud3NPcHRpb25zKTtyZXR1cm4gby51cmw9aSxuLm9uKFwiY2xvc2VcIiwoKT0+e28uZGVzdHJveSgpO30pLG99LE9TPSh0LGUpPT57S3QoXCJicm93c2VyU3RyZWFtQnVpbGRlclwiKTtsZXQgcixuPVJTKGUpLmJyb3dzZXJCdWZmZXJTaXplfHwxMDI0KjUxMixvPWUuYnJvd3NlckJ1ZmZlclRpbWVvdXR8fDFlMyxzPSFlLm9iamVjdE1vZGUsYT1CUyh0LGUpLHU9aChlLEUsUyk7ZS5vYmplY3RNb2RlfHwodS5fd3JpdGV2PWJsLndyaXRldi5iaW5kKHUpKSx1Lm9uKFwiY2xvc2VcIiwoKT0+e2EuY2xvc2UoKTt9KTtsZXQgYz10eXBlb2YgYS5hZGRFdmVudExpc3RlbmVyPFwidVwiO2EucmVhZHlTdGF0ZT09PWEuT1BFTj8ocj11LHIuc29ja2V0PWEpOihyPW5ldyBibC5CdWZmZXJlZER1cGxleChlLHUsYSksYz9hLmFkZEV2ZW50TGlzdGVuZXIoXCJvcGVuXCIsZCk6YS5vbm9wZW49ZCksYz8oYS5hZGRFdmVudExpc3RlbmVyKFwiY2xvc2VcIixnKSxhLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLHkpLGEuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIix3KSk6KGEub25jbG9zZT1nLGEub25lcnJvcj15LGEub25tZXNzYWdlPXcpO2Z1bmN0aW9uIGgoSSxDLFIpe2xldCBVPW5ldyBJUy5UcmFuc2Zvcm0oe29iamVjdE1vZGU6SS5vYmplY3RNb2RlfSk7cmV0dXJuIFUuX3dyaXRlPUMsVS5fZmx1c2g9UixVfWZ1bmN0aW9uIGQoKXtLdChcIldlYlNvY2tldCBvbk9wZW5cIiksciBpbnN0YW5jZW9mIGJsLkJ1ZmZlcmVkRHVwbGV4JiZyLnNvY2tldFJlYWR5KCk7fWZ1bmN0aW9uIGcoSSl7S3QoXCJXZWJTb2NrZXQgb25DbG9zZVwiLEkpLHIuZW5kKCksci5kZXN0cm95KCk7fWZ1bmN0aW9uIHkoSSl7S3QoXCJXZWJTb2NrZXQgb25FcnJvclwiLEkpO2xldCBDPW5ldyBFcnJvcihcIldlYlNvY2tldCBlcnJvclwiKTtDLmV2ZW50PUksci5kZXN0cm95KEMpO31mdW5jdGlvbiB3KEkpe2xldHtkYXRhOkN9PUk7QyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP0M9eWwuQnVmZmVyLmZyb20oQyk6Qz15bC5CdWZmZXIuZnJvbShDLFwidXRmOFwiKSx1LnB1c2goQyk7fWZ1bmN0aW9uIEUoSSxDLFIpe2lmKGEuYnVmZmVyZWRBbW91bnQ+bil7c2V0VGltZW91dChFLG8sSSxDLFIpO3JldHVybn1zJiZ0eXBlb2YgST09XCJzdHJpbmdcIiYmKEk9eWwuQnVmZmVyLmZyb20oSSxcInV0ZjhcIikpO3RyeXthLnNlbmQoSSk7fWNhdGNoKFUpe3JldHVybiBSKFUpfVIoKTt9ZnVuY3Rpb24gUyhJKXthLmNsb3NlKCksSSgpO31yZXR1cm4gcn07VWkuZGVmYXVsdD1JZy5kZWZhdWx0P09TOlBTO30pO3ZhciBQZz1NKFJyPT57digpO20oKTtfKCk7dmFyIGxzPVJyJiZSci5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7ZGVmYXVsdDp0fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFJyLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO1JyLmNvbm5lY3RBc3luYz12b2lkIDA7dmFyIGtTPWxzKG90KCkpLHhTPWxzKChwZygpLFgoZGcpKSksTVM9bHMobnMoKSksTFM9bHMoUGkoKSksQ2c9KDAsIGtTLmRlZmF1bHQpKFwibXF0dGpzXCIpLFJlPXt9O0xTLmRlZmF1bHQ/KFJlLnd4PWhsKCkuZGVmYXVsdCxSZS53eHM9aGwoKS5kZWZhdWx0LFJlLmFsaT1nbCgpLmRlZmF1bHQsUmUuYWxpcz1nbCgpLmRlZmF1bHQpOihSZS5tcXR0PW9sKCkuZGVmYXVsdCxSZS50Y3A9b2woKS5kZWZhdWx0LFJlLnNzbD1sbCgpLmRlZmF1bHQsUmUudGxzPVJlLnNzbCxSZS5tcXR0cz1sbCgpLmRlZmF1bHQpO1JlLndzPV9sKCkuZGVmYXVsdDtSZS53c3M9X2woKS5kZWZhdWx0O2Z1bmN0aW9uIFVTKHQpe2xldCBlO3QuYXV0aCYmKGU9dC5hdXRoLm1hdGNoKC9eKC4rKTooLispJC8pLGU/KHQudXNlcm5hbWU9ZVsxXSx0LnBhc3N3b3JkPWVbMl0pOnQudXNlcm5hbWU9dC5hdXRoKTt9ZnVuY3Rpb24gQmcodCxlKXtpZihDZyhcImNvbm5lY3RpbmcgdG8gYW4gTVFUVCBicm9rZXIuLi5cIiksdHlwZW9mIHQ9PVwib2JqZWN0XCImJiFlJiYoZT10LHQ9XCJcIiksZT1lfHx7fSx0JiZ0eXBlb2YgdD09XCJzdHJpbmdcIil7bGV0IG49eFMuZGVmYXVsdC5wYXJzZSh0LCEwKTtpZihuLnBvcnQhPW51bGwmJihuLnBvcnQ9TnVtYmVyKG4ucG9ydCkpLGU9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG4pLGUpLGUucHJvdG9jb2w9PT1udWxsKXRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgcHJvdG9jb2xcIik7ZS5wcm90b2NvbD1lLnByb3RvY29sLnJlcGxhY2UoLzokLyxcIlwiKTt9aWYoVVMoZSksZS5xdWVyeSYmdHlwZW9mIGUucXVlcnkuY2xpZW50SWQ9PVwic3RyaW5nXCImJihlLmNsaWVudElkPWUucXVlcnkuY2xpZW50SWQpLGUuY2VydCYmZS5rZXkpaWYoZS5wcm90b2NvbCl7aWYoW1wibXF0dHNcIixcIndzc1wiLFwid3hzXCIsXCJhbGlzXCJdLmluZGV4T2YoZS5wcm90b2NvbCk9PT0tMSlzd2l0Y2goZS5wcm90b2NvbCl7Y2FzZVwibXF0dFwiOmUucHJvdG9jb2w9XCJtcXR0c1wiO2JyZWFrO2Nhc2VcIndzXCI6ZS5wcm90b2NvbD1cIndzc1wiO2JyZWFrO2Nhc2VcInd4XCI6ZS5wcm90b2NvbD1cInd4c1wiO2JyZWFrO2Nhc2VcImFsaVwiOmUucHJvdG9jb2w9XCJhbGlzXCI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcHJvdG9jb2wgZm9yIHNlY3VyZSBjb25uZWN0aW9uOiBcIiR7ZS5wcm90b2NvbH1cIiFgKX19ZWxzZSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIHNlY3VyZSBwcm90b2NvbCBrZXlcIik7aWYoIVJlW2UucHJvdG9jb2xdKXtsZXQgbj1bXCJtcXR0c1wiLFwid3NzXCJdLmluZGV4T2YoZS5wcm90b2NvbCkhPT0tMTtlLnByb3RvY29sPVtcIm1xdHRcIixcIm1xdHRzXCIsXCJ3c1wiLFwid3NzXCIsXCJ3eFwiLFwid3hzXCIsXCJhbGlcIixcImFsaXNcIl0uZmlsdGVyKChvLHMpPT5uJiZzJTI9PT0wPyExOnR5cGVvZiBSZVtvXT09XCJmdW5jdGlvblwiKVswXTt9aWYoZS5jbGVhbj09PSExJiYhZS5jbGllbnRJZCl0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGNsaWVudElkIGZvciB1bmNsZWFuIGNsaWVudHNcIik7ZS5wcm90b2NvbCYmKGUuZGVmYXVsdFByb3RvY29sPWUucHJvdG9jb2wpO2Z1bmN0aW9uIHIobil7cmV0dXJuIGUuc2VydmVycyYmKCghbi5fcmVjb25uZWN0Q291bnR8fG4uX3JlY29ubmVjdENvdW50PT09ZS5zZXJ2ZXJzLmxlbmd0aCkmJihuLl9yZWNvbm5lY3RDb3VudD0wKSxlLmhvc3Q9ZS5zZXJ2ZXJzW24uX3JlY29ubmVjdENvdW50XS5ob3N0LGUucG9ydD1lLnNlcnZlcnNbbi5fcmVjb25uZWN0Q291bnRdLnBvcnQsZS5wcm90b2NvbD1lLnNlcnZlcnNbbi5fcmVjb25uZWN0Q291bnRdLnByb3RvY29sP2Uuc2VydmVyc1tuLl9yZWNvbm5lY3RDb3VudF0ucHJvdG9jb2w6ZS5kZWZhdWx0UHJvdG9jb2wsZS5ob3N0bmFtZT1lLmhvc3Qsbi5fcmVjb25uZWN0Q291bnQrKyksQ2coXCJjYWxsaW5nIHN0cmVhbWJ1aWxkZXIgZm9yXCIsZS5wcm90b2NvbCksUmVbZS5wcm90b2NvbF0obixlKX1sZXQgaT1uZXcgTVMuZGVmYXVsdChyLGUpO3JldHVybiBpLm9uKFwiZXJyb3JcIiwoKT0+e30pLGl9ZnVuY3Rpb24gTlModCxlLHI9ITApe3JldHVybiBuZXcgUHJvbWlzZSgoaSxuKT0+e2xldCBvPUJnKHQsZSkscz17Y29ubmVjdDp1PT57YSgpLGkobyk7fSxlbmQ6KCk9PnthKCksaShvKTt9LGVycm9yOnU9PnthKCksby5lbmQoKSxuKHUpO319O3I9PT0hMSYmKHMuY2xvc2U9KCk9PntzLmVycm9yKG5ldyBFcnJvcihcIkNvdWxkbid0IGNvbm5lY3QgdG8gc2VydmVyXCIpKTt9KTtmdW5jdGlvbiBhKCl7T2JqZWN0LmtleXMocykuZm9yRWFjaCh1PT57by5vZmYodSxzW3VdKTt9KTt9T2JqZWN0LmtleXMocykuZm9yRWFjaCh1PT57by5vbih1LHNbdV0pO30pO30pfVJyLmNvbm5lY3RBc3luYz1OUztSci5kZWZhdWx0PUJnO30pO3ZhciBtbD1NKEc9Pnt2KCk7bSgpO18oKTt2YXIgT2c9RyYmRy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHQsZSxyLGkpe2k9PT12b2lkIDAmJihpPXIpO3ZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxyKTsoIW58fChcImdldFwiaW4gbj8hZS5fX2VzTW9kdWxlOm4ud3JpdGFibGV8fG4uY29uZmlndXJhYmxlKSkmJihuPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlW3JdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGksbik7fTpmdW5jdGlvbih0LGUscixpKXtpPT09dm9pZCAwJiYoaT1yKSx0W2ldPWVbcl07fSkscVM9RyYmRy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6ZX0pO306ZnVuY3Rpb24odCxlKXt0LmRlZmF1bHQ9ZTt9KSxEUz1HJiZHLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24odCl7aWYodCYmdC5fX2VzTW9kdWxlKXJldHVybiB0O3ZhciBlPXt9O2lmKHQhPW51bGwpZm9yKHZhciByIGluIHQpciE9PVwiZGVmYXVsdFwiJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxyKSYmT2coZSx0LHIpO3JldHVybiBxUyhlLHQpLGV9LGtnPUcmJkcuX19leHBvcnRTdGFyfHxmdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiB0KXIhPT1cImRlZmF1bHRcIiYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZPZyhlLHQscik7fSxOaT1HJiZHLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuX19lc01vZHVsZT90OntkZWZhdWx0OnR9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRyxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTtHLlJlYXNvbkNvZGVzPUcuUGluZ1RpbWVyPUcuVW5pcXVlTWVzc2FnZUlkUHJvdmlkZXI9Ry5EZWZhdWx0TWVzc2FnZUlkUHJvdmlkZXI9Ry5TdG9yZT1HLk1xdHRDbGllbnQ9Ry5jb25uZWN0QXN5bmM9Ry5jb25uZWN0PUcuQ2xpZW50PXZvaWQgMDt2YXIgeGc9TmkobnMoKSk7Ry5NcXR0Q2xpZW50PXhnLmRlZmF1bHQ7dmFyIGpTPU5pKFlvKCkpO0cuRGVmYXVsdE1lc3NhZ2VJZFByb3ZpZGVyPWpTLmRlZmF1bHQ7dmFyIEZTPU5pKCRwKCkpO0cuVW5pcXVlTWVzc2FnZUlkUHJvdmlkZXI9RlMuZGVmYXVsdDt2YXIgV1M9TmkoWm8oKSk7Ry5TdG9yZT1XUy5kZWZhdWx0O3ZhciBNZz1EUyhQZygpKTtHLmNvbm5lY3Q9TWcuZGVmYXVsdDtPYmplY3QuZGVmaW5lUHJvcGVydHkoRyxcImNvbm5lY3RBc3luY1wiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBNZy5jb25uZWN0QXN5bmN9fSk7dmFyICRTPU5pKERhKCkpO0cuUGluZ1RpbWVyPSRTLmRlZmF1bHQ7Ry5DbGllbnQ9eGcuZGVmYXVsdDtrZyhucygpLEcpO2tnKEpyKCksRyk7dmFyIEhTPUFpKCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KEcsXCJSZWFzb25Db2Rlc1wiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBIUy5SZWFzb25Db2Rlc319KTt9KTt2YXIgUVM9TShXZT0+e3YoKTttKCk7XygpO3ZhciBMZz1XZSYmV2UuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbih0LGUscixpKXtpPT09dm9pZCAwJiYoaT1yKTt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUscik7KCFufHwoXCJnZXRcImluIG4/IWUuX19lc01vZHVsZTpuLndyaXRhYmxlfHxuLmNvbmZpZ3VyYWJsZSkpJiYobj17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZVtyXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxpLG4pO306ZnVuY3Rpb24odCxlLHIsaSl7aT09PXZvaWQgMCYmKGk9ciksdFtpXT1lW3JdO30pLFZTPVdlJiZXZS5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6ZX0pO306ZnVuY3Rpb24odCxlKXt0LmRlZmF1bHQ9ZTt9KSx6Uz1XZSYmV2UuX19pbXBvcnRTdGFyfHxmdW5jdGlvbih0KXtpZih0JiZ0Ll9fZXNNb2R1bGUpcmV0dXJuIHQ7dmFyIGU9e307aWYodCE9bnVsbClmb3IodmFyIHIgaW4gdClyIT09XCJkZWZhdWx0XCImJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LHIpJiZMZyhlLHQscik7cmV0dXJuIFZTKGUsdCksZX0sS1M9V2UmJldlLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gdClyIT09XCJkZWZhdWx0XCImJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmTGcoZSx0LHIpO307T2JqZWN0LmRlZmluZVByb3BlcnR5KFdlLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBHUz16UyhtbCgpKTtXZS5kZWZhdWx0PUdTO0tTKG1sKCksV2UpO30pO3ZhciBtcXR0ID0gUVMoKTtcbi8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246XG5cbkBqc3BtL2NvcmUvbm9kZWxpYnMvYnJvd3Nlci9idWZmZXIuanM6XG4gICgqISBpZWVlNzU0LiBCU0QtMy1DbGF1c2UgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICopXG4qL1xuXG5jbGFzcyBDbG91ZEludGVyb3BBUEkge1xuICAgIGNvbm5lY3RQYXJhbXM7XG4gICAgX3Nlc3Npb25EZXRhaWxzO1xuICAgIF9tcXR0Q2xpZW50O1xuICAgIHJlY29ubmVjdFJldHJ5TGltaXQgPSAzMDtcbiAgICByZWNvbm5lY3RSZXRyaWVzID0gMDtcbiAgICBjb250ZXh0TGlzdGVuZXI7XG4gICAgY29uc3RydWN0b3IoY29ubmVjdFBhcmFtcykge1xuICAgICAgICB0aGlzLmNvbm5lY3RQYXJhbXMgPSBjb25uZWN0UGFyYW1zO1xuICAgIH1cbiAgICBnZXQgc2Vzc2lvbkRldGFpbHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZXNzaW9uRGV0YWlscztcbiAgICB9XG4gICAgZ2V0IG1xdHRDbGllbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tcXR0Q2xpZW50O1xuICAgIH1cbiAgICBhc3luYyBjb25uZWN0KHBhcmFtcykge1xuICAgICAgICBjb25zdCB7IHVzZXJJZCwgcGFzc3dvcmQsIHNvdXJjZUlkLCBwbGF0Zm9ybUlkIH0gPSBwYXJhbXM7XG4gICAgICAgIGxldCBjb25uZWN0UmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25uZWN0UmVzcG9uc2UgPSBhd2FpdCBheGlvcy5wb3N0KGAke3RoaXMuY29ubmVjdFBhcmFtcy51cmx9L3Nlc3Npb25zYCwge1xuICAgICAgICAgICAgICAgIHVzZXJJZCxcbiAgICAgICAgICAgICAgICBzb3VyY2VJZCxcbiAgICAgICAgICAgICAgICBwbGF0Zm9ybUlkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChjb25uZWN0UmVzcG9uc2Uuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBjb25uZWN0IHRvIENsb3VkIEludGVyb3AgdXJsOiAke3RoaXMuY29ubmVjdFBhcmFtcy51cmx9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB7IHNlc3Npb25Sb290VG9waWMgfSA9IGNvbm5lY3RSZXNwb25zZS5kYXRhO1xuICAgICAgICAgICAgY29uc3QgbGFzdFdpbGxQYXlsb2FkID0ge1xuICAgICAgICAgICAgICAgIHVzZXJJZCxcbiAgICAgICAgICAgICAgICBzb3VyY2VJZCxcbiAgICAgICAgICAgICAgICBwbGF0Zm9ybUlkLFxuICAgICAgICAgICAgICAgIHNlc3Npb25JZDogY29ubmVjdFJlc3BvbnNlLmRhdGEuc2Vzc2lvbklkXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgY2xpZW50T3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBjbGllbnRJZDogY29ubmVjdFJlc3BvbnNlLmRhdGEuc2Vzc2lvbklkLFxuICAgICAgICAgICAgICAgIGNsZWFuOiB0cnVlLFxuICAgICAgICAgICAgICAgIHByb3RvY29sVmVyc2lvbjogNSxcbiAgICAgICAgICAgICAgICB3aWxsOiB7XG4gICAgICAgICAgICAgICAgICAgIHRvcGljOiAnaW50ZXJvcC9sYXN0d2lsbCcsXG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KGxhc3RXaWxsUGF5bG9hZCkpLFxuICAgICAgICAgICAgICAgICAgICBxb3M6IDAsXG4gICAgICAgICAgICAgICAgICAgIHJldGFpbjogZmFsc2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHVzZXJuYW1lOiB1c2VySWQsXG4gICAgICAgICAgICAgICAgcGFzc3dvcmRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLl9tcXR0Q2xpZW50ID0gYXdhaXQgbXF0dC5jb25uZWN0QXN5bmMoY29ubmVjdFJlc3BvbnNlLmRhdGEubXF0dFVybCwgY2xpZW50T3B0aW9ucyk7XG4gICAgICAgICAgICB0aGlzLl9zZXNzaW9uRGV0YWlscyA9IGNvbm5lY3RSZXNwb25zZS5kYXRhO1xuICAgICAgICAgICAgY29uc29sZS5sb2coYENsb3VkIEludGVyb3Agc3VjY2Vzc2Z1bGx5IGNvbm5lY3RlZCB0byAke3RoaXMuY29ubmVjdFBhcmFtcy51cmx9YCk7XG4gICAgICAgICAgICB0aGlzLl9tcXR0Q2xpZW50Lm9uKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYENsb3VkIEludGVyb3AgRXJyb3I6ICR7ZXJyb3J9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX21xdHRDbGllbnQuc3RyZWFtLm9uKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYENsb3VkIEludGVyb3AgQ29ubmVjdGlvbiBFcnJvcjogJHtlcnJvcn1gKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fbXF0dENsaWVudC5vbigncmVjb25uZWN0JywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgQ2xvdWQgSW50ZXJvcCBhdHRlbXB0aW5nIHJlY29ubmVjdGlvbi4uLmApO1xuICAgICAgICAgICAgICAgIC8vIERlZmF1bHQgcmVjb25uZWN0UGVyaW9kID0gMzAgc2Vjb25kc1xuICAgICAgICAgICAgICAgIC8vIEF0dGVtcHQgcmVjb25uZWN0aW9uIDMwIHRpbWVzIGJlZm9yZSBlbmRpbmcgc2Vzc2lvblxuICAgICAgICAgICAgICAgIHRoaXMucmVjb25uZWN0UmV0cmllcyArPSAxO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlY29ubmVjdFJldHJpZXMgPT09IHRoaXMucmVjb25uZWN0UmV0cnlMaW1pdCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYENsb3VkIEludGVyb3AgcmVhY2hlZCBtYXggcmVjb25uZWN0aW9uIGF0dGVtcHRzLi4uYCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gRG9lcyBub3QgZmlyZSBvbiBpbml0aWFsIGNvbm5lY3Rpb24sIG9ubHkgc3VjY2Vzc2Z1bCByZWNvbm5lY3Rpb24gYXR0ZW1wdHNcbiAgICAgICAgICAgIHRoaXMuX21xdHRDbGllbnQub24oJ2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYENsb3VkIEludGVyb3Agc3VjY2Vzc2Z1bGx5IHJlY29ubmVjdGVkYCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RSZXRyaWVzID0gMDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fbXF0dENsaWVudC5vbignbWVzc2FnZScsICh0b3BpYywgbWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ29tbWFuZCh0b3BpYywgbWVzc2FnZSwgdGhpcy5fc2Vzc2lvbkRldGFpbHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBTdWJzY3JpYmUgdG8gYWxsIGNvbnRleHQgZ3JvdXBzXG4gICAgICAgICAgICB0aGlzLl9tcXR0Q2xpZW50LnN1YnNjcmliZShgJHtzZXNzaW9uUm9vdFRvcGljfS9jb250ZXh0LWdyb3Vwcy8jYCk7XG4gICAgICAgICAgICAvLyBMaXN0ZW4gb3V0IGZvciBnbG9iYWwgY29tbWFuZHNcbiAgICAgICAgICAgIHRoaXMuX21xdHRDbGllbnQuc3Vic2NyaWJlKGAke3Nlc3Npb25Sb290VG9waWN9L2NvbW1hbmRzYCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYEZhaWxlZCB0byBjb25uZWN0IHRvIENsb3VkIEludGVyb3AgYXQgJHt0aGlzLmNvbm5lY3RQYXJhbXMudXJsfWAsIGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBkaXNjb25uZWN0KCkge1xuICAgICAgICBpZiAoIXRoaXMuX3Nlc3Npb25EZXRhaWxzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGRpc2Nvbm5lY3RSZXNwb25zZSA9IGF3YWl0IGF4aW9zLmRlbGV0ZShgJHt0aGlzLmNvbm5lY3RQYXJhbXMudXJsfS9zZXNzaW9ucy8ke3RoaXMuX3Nlc3Npb25EZXRhaWxzLnNlc3Npb25JZH1gKTtcbiAgICAgICAgICAgIGlmIChkaXNjb25uZWN0UmVzcG9uc2Uuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYENsb3VkIEludGVyb3AgZGlzY29ubmVjdGlvbiBmYWlsZWRgLCBkaXNjb25uZWN0UmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBDbG91ZCBJbnRlcm9wIGVycm9yIGR1cmluZyBkaXNjb25uZWN0aW9uYCwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5fbXF0dENsaWVudD8ucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICB0aGlzLl9tcXR0Q2xpZW50Py5lbmQodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLl9zZXNzaW9uRGV0YWlscyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuX21xdHRDbGllbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnJlY29ubmVjdFJldHJpZXMgPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIHNldENvbnRleHQoY29udGV4dEdyb3VwLCBjb250ZXh0KSB7XG4gICAgICAgIGlmICghdGhpcy5fc2Vzc2lvbkRldGFpbHMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHVzZXJJZCwgc291cmNlSWQgfSA9IHRoaXMuY29ubmVjdFBhcmFtcztcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgICAgIHVzZXJJZCxcbiAgICAgICAgICAgIHNvdXJjZUlkLFxuICAgICAgICAgICAgY29udGV4dFxuICAgICAgICB9O1xuICAgICAgICBhd2FpdCBheGlvcy5wb3N0KGAke3RoaXMuY29ubmVjdFBhcmFtcy51cmx9L2NvbnRleHQtZ3JvdXBzLyR7dGhpcy5fc2Vzc2lvbkRldGFpbHMuc2Vzc2lvbklkfS8ke2NvbnRleHRHcm91cH1gLCBwYXlsb2FkKTtcbiAgICB9XG4gICAgYWRkQ29udGV4dExpc3RlbmVyKGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuY29udGV4dExpc3RlbmVyID0gY2FsbGJhY2s7XG4gICAgfVxuICAgIHN0YXJ0SW50ZW50RGlzY292ZXJ5KGludGVudE5hbWUsIGNvbnRleHQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICAgIH1cbiAgICBlbmRJbnRlbnREaXNjb3ZlcnkoZGlzY292ZXJ5SWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICAgIH1cbiAgICBzZW5kSW50ZW50RGV0YWlsKGRpc2NvdmVyeUlkLCBpbnRlbnREZXRhaWwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICAgIH1cbiAgICByYWlzZUludGVudCh0YXJnZXRTZXNzaW9uLCBpbnRlbnRJbnN0YW5jZUlkLCBjb250ZXh0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgICB9XG4gICAgYWRkSW50ZW50RGV0YWlsTGlzdGVuZXIoY2FsbGJhY2spIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICAgIH1cbiAgICBoYW5kbGVDb21tYW5kKHRvcGljLCBtZXNzYWdlLCBzZXNzaW9uRGV0YWlscykge1xuICAgICAgICBpZiAobWVzc2FnZS5sZW5ndGggPT09IDAgfHwgIXNlc3Npb25EZXRhaWxzKSB7XG4gICAgICAgICAgICAvLyBJZ25vcmUgY2xlYW4gdXAgbWVzc2FnZXNcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZXNzYWdlRW52ZWxvcGUgPSBKU09OLnBhcnNlKG1lc3NhZ2UudG9TdHJpbmcoKSk7XG4gICAgICAgIGlmICh0b3BpYy5zdGFydHNXaXRoKGAke3Nlc3Npb25EZXRhaWxzLnNlc3Npb25Sb290VG9waWN9L2NvbnRleHQtZ3JvdXBzL2ApKSB7XG4gICAgICAgICAgICBpZiAobWVzc2FnZUVudmVsb3BlLnNvdXJjZS5zZXNzaW9uSWQgPT09IHNlc3Npb25EZXRhaWxzLnNlc3Npb25JZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHRMaXN0ZW5lcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgY2hhbm5lbE5hbWU6IGNvbnRleHRHcm91cCwgcGF5bG9hZDogY29udGV4dCwgc291cmNlIH0gPSBtZXNzYWdlRW52ZWxvcGU7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0TGlzdGVuZXIoY29udGV4dEdyb3VwLCBjb250ZXh0LCBzb3VyY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBjbG91ZEludGVyb3BPdmVycmlkZShjb25maWcpIHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgQ2xvdWRJbnRlcm9wQVBJKGNvbmZpZyk7XG4gICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgY2xpZW50LmNvbm5lY3QoY29uZmlnKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLndhcm4oZXJyKTtcbiAgICAgICAgcmV0dXJuIChCYXNlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY2xhc3MgTm9PcE92ZXJyaWRlIGV4dGVuZHMgQmFzZSB7XG4gICAgICAgICAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIChCYXNlKSA9PiB7XG4gICAgICAgIHJldHVybiBjbGFzcyBDbG91ZEludGVyb3BPdmVycmlkZSBleHRlbmRzIEJhc2Uge1xuICAgICAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgICAgICAgICBjbGllbnQuYWRkQ29udGV4dExpc3RlbmVyKChjb250ZXh0R3JvdXAsIGNvbnRleHQsIHNvdXJjZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5nZXRDb250ZXh0R3JvdXBzKClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKHsgaWQgfSkgPT4gaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAuaW5jbHVkZXMoY29udGV4dEdyb3VwKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50LnNlc3Npb25EZXRhaWxzPy5zZXNzaW9uSWQgIT09IHNvdXJjZS5zZXNzaW9uSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1cGVyLnNldENvbnRleHRGb3JHcm91cCh7IGNvbnRleHQ6IGNvbnRleHQgfSwgY29udGV4dEdyb3VwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXN5bmMgc2V0Q29udGV4dEZvckdyb3VwKHsgY29udGV4dCB9LCBjb250ZXh0R3JvdXBJZCkge1xuICAgICAgICAgICAgICAgIGNsaWVudC5zZXRDb250ZXh0KGNvbnRleHRHcm91cElkLCBjb250ZXh0KTtcbiAgICAgICAgICAgICAgICBzdXBlci5zZXRDb250ZXh0Rm9yR3JvdXAoeyBjb250ZXh0IH0sIGNvbnRleHRHcm91cElkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzeW5jIGNsb3VkUmVjb25uZWN0KCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IGNsaWVudC5jb25uZWN0KGNvbmZpZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBnZXQgY2xvdWRDb25uZWN0aW9uU3RhdGUoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNsaWVudC5tcXR0Q2xpZW50Py5jb25uZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdjb25uZWN0ZWQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY2xpZW50Lm1xdHRDbGllbnQ/LnJlY29ubmVjdGluZykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3JlY29ubmVjdGluZyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAnZGlzY29ubmVjdGVkJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9O1xufVxuXG5leHBvcnQgeyBjbG91ZEludGVyb3BPdmVycmlkZSB9O1xuIiwiLyohIEZvciBsaWNlbnNlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgaW5kZXguanMuTElDRU5TRS50eHQgKi9cbigoKT0+e3ZhciBlPXszMDQ6KGUsdCxuKT0+e3ZhciByPXs4NTk0OihlLHQsbik9PntuLmQodCx7WjooKT0+b30pO3ZhciByPS9eKChjaGlsZHJlbnxkYW5nZXJvdXNseVNldElubmVySFRNTHxrZXl8cmVmfGF1dG9Gb2N1c3xkZWZhdWx0VmFsdWV8ZGVmYXVsdENoZWNrZWR8aW5uZXJIVE1MfHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ3xzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmd8dmFsdWVMaW5rfGFjY2VwdHxhY2NlcHRDaGFyc2V0fGFjY2Vzc0tleXxhY3Rpb258YWxsb3d8YWxsb3dVc2VyTWVkaWF8YWxsb3dQYXltZW50UmVxdWVzdHxhbGxvd0Z1bGxTY3JlZW58YWxsb3dUcmFuc3BhcmVuY3l8YWx0fGFzeW5jfGF1dG9Db21wbGV0ZXxhdXRvUGxheXxjYXB0dXJlfGNlbGxQYWRkaW5nfGNlbGxTcGFjaW5nfGNoYWxsZW5nZXxjaGFyU2V0fGNoZWNrZWR8Y2l0ZXxjbGFzc0lEfGNsYXNzTmFtZXxjb2xzfGNvbFNwYW58Y29udGVudHxjb250ZW50RWRpdGFibGV8Y29udGV4dE1lbnV8Y29udHJvbHN8Y29udHJvbHNMaXN0fGNvb3Jkc3xjcm9zc09yaWdpbnxkYXRhfGRhdGVUaW1lfGRlY29kaW5nfGRlZmF1bHR8ZGVmZXJ8ZGlyfGRpc2FibGVkfGRpc2FibGVQaWN0dXJlSW5QaWN0dXJlfGRvd25sb2FkfGRyYWdnYWJsZXxlbmNUeXBlfGZvcm18Zm9ybUFjdGlvbnxmb3JtRW5jVHlwZXxmb3JtTWV0aG9kfGZvcm1Ob1ZhbGlkYXRlfGZvcm1UYXJnZXR8ZnJhbWVCb3JkZXJ8aGVhZGVyc3xoZWlnaHR8aGlkZGVufGhpZ2h8aHJlZnxocmVmTGFuZ3xodG1sRm9yfGh0dHBFcXVpdnxpZHxpbnB1dE1vZGV8aW50ZWdyaXR5fGlzfGtleVBhcmFtc3xrZXlUeXBlfGtpbmR8bGFiZWx8bGFuZ3xsaXN0fGxvYWRpbmd8bG9vcHxsb3d8bWFyZ2luSGVpZ2h0fG1hcmdpbldpZHRofG1heHxtYXhMZW5ndGh8bWVkaWF8bWVkaWFHcm91cHxtZXRob2R8bWlufG1pbkxlbmd0aHxtdWx0aXBsZXxtdXRlZHxuYW1lfG5vbmNlfG5vVmFsaWRhdGV8b3BlbnxvcHRpbXVtfHBhdHRlcm58cGxhY2Vob2xkZXJ8cGxheXNJbmxpbmV8cG9zdGVyfHByZWxvYWR8cHJvZmlsZXxyYWRpb0dyb3VwfHJlYWRPbmx5fHJlZmVycmVyUG9saWN5fHJlbHxyZXF1aXJlZHxyZXZlcnNlZHxyb2xlfHJvd3N8cm93U3BhbnxzYW5kYm94fHNjb3BlfHNjb3BlZHxzY3JvbGxpbmd8c2VhbWxlc3N8c2VsZWN0ZWR8c2hhcGV8c2l6ZXxzaXplc3xzbG90fHNwYW58c3BlbGxDaGVja3xzcmN8c3JjRG9jfHNyY0xhbmd8c3JjU2V0fHN0YXJ0fHN0ZXB8c3R5bGV8c3VtbWFyeXx0YWJJbmRleHx0YXJnZXR8dGl0bGV8dHlwZXx1c2VNYXB8dmFsdWV8d2lkdGh8d21vZGV8d3JhcHxhYm91dHxkYXRhdHlwZXxpbmxpc3R8cHJlZml4fHByb3BlcnR5fHJlc291cmNlfHR5cGVvZnx2b2NhYnxhdXRvQ2FwaXRhbGl6ZXxhdXRvQ29ycmVjdHxhdXRvU2F2ZXxjb2xvcnxpbmVydHxpdGVtUHJvcHxpdGVtU2NvcGV8aXRlbVR5cGV8aXRlbUlEfGl0ZW1SZWZ8b258cmVzdWx0c3xzZWN1cml0eXx1bnNlbGVjdGFibGV8YWNjZW50SGVpZ2h0fGFjY3VtdWxhdGV8YWRkaXRpdmV8YWxpZ25tZW50QmFzZWxpbmV8YWxsb3dSZW9yZGVyfGFscGhhYmV0aWN8YW1wbGl0dWRlfGFyYWJpY0Zvcm18YXNjZW50fGF0dHJpYnV0ZU5hbWV8YXR0cmlidXRlVHlwZXxhdXRvUmV2ZXJzZXxhemltdXRofGJhc2VGcmVxdWVuY3l8YmFzZWxpbmVTaGlmdHxiYXNlUHJvZmlsZXxiYm94fGJlZ2lufGJpYXN8Ynl8Y2FsY01vZGV8Y2FwSGVpZ2h0fGNsaXB8Y2xpcFBhdGhVbml0c3xjbGlwUGF0aHxjbGlwUnVsZXxjb2xvckludGVycG9sYXRpb258Y29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyc3xjb2xvclByb2ZpbGV8Y29sb3JSZW5kZXJpbmd8Y29udGVudFNjcmlwdFR5cGV8Y29udGVudFN0eWxlVHlwZXxjdXJzb3J8Y3h8Y3l8ZHxkZWNlbGVyYXRlfGRlc2NlbnR8ZGlmZnVzZUNvbnN0YW50fGRpcmVjdGlvbnxkaXNwbGF5fGRpdmlzb3J8ZG9taW5hbnRCYXNlbGluZXxkdXJ8ZHh8ZHl8ZWRnZU1vZGV8ZWxldmF0aW9ufGVuYWJsZUJhY2tncm91bmR8ZW5kfGV4cG9uZW50fGV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWR8ZmlsbHxmaWxsT3BhY2l0eXxmaWxsUnVsZXxmaWx0ZXJ8ZmlsdGVyUmVzfGZpbHRlclVuaXRzfGZsb29kQ29sb3J8Zmxvb2RPcGFjaXR5fGZvY3VzYWJsZXxmb250RmFtaWx5fGZvbnRTaXplfGZvbnRTaXplQWRqdXN0fGZvbnRTdHJldGNofGZvbnRTdHlsZXxmb250VmFyaWFudHxmb250V2VpZ2h0fGZvcm1hdHxmcm9tfGZyfGZ4fGZ5fGcxfGcyfGdseXBoTmFtZXxnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbHxnbHlwaE9yaWVudGF0aW9uVmVydGljYWx8Z2x5cGhSZWZ8Z3JhZGllbnRUcmFuc2Zvcm18Z3JhZGllbnRVbml0c3xoYW5naW5nfGhvcml6QWR2WHxob3Jpek9yaWdpblh8aWRlb2dyYXBoaWN8aW1hZ2VSZW5kZXJpbmd8aW58aW4yfGludGVyY2VwdHxrfGsxfGsyfGszfGs0fGtlcm5lbE1hdHJpeHxrZXJuZWxVbml0TGVuZ3RofGtlcm5pbmd8a2V5UG9pbnRzfGtleVNwbGluZXN8a2V5VGltZXN8bGVuZ3RoQWRqdXN0fGxldHRlclNwYWNpbmd8bGlnaHRpbmdDb2xvcnxsaW1pdGluZ0NvbmVBbmdsZXxsb2NhbHxtYXJrZXJFbmR8bWFya2VyTWlkfG1hcmtlclN0YXJ0fG1hcmtlckhlaWdodHxtYXJrZXJVbml0c3xtYXJrZXJXaWR0aHxtYXNrfG1hc2tDb250ZW50VW5pdHN8bWFza1VuaXRzfG1hdGhlbWF0aWNhbHxtb2RlfG51bU9jdGF2ZXN8b2Zmc2V0fG9wYWNpdHl8b3BlcmF0b3J8b3JkZXJ8b3JpZW50fG9yaWVudGF0aW9ufG9yaWdpbnxvdmVyZmxvd3xvdmVybGluZVBvc2l0aW9ufG92ZXJsaW5lVGhpY2tuZXNzfHBhbm9zZTF8cGFpbnRPcmRlcnxwYXRoTGVuZ3RofHBhdHRlcm5Db250ZW50VW5pdHN8cGF0dGVyblRyYW5zZm9ybXxwYXR0ZXJuVW5pdHN8cG9pbnRlckV2ZW50c3xwb2ludHN8cG9pbnRzQXRYfHBvaW50c0F0WXxwb2ludHNBdFp8cHJlc2VydmVBbHBoYXxwcmVzZXJ2ZUFzcGVjdFJhdGlvfHByaW1pdGl2ZVVuaXRzfHJ8cmFkaXVzfHJlZlh8cmVmWXxyZW5kZXJpbmdJbnRlbnR8cmVwZWF0Q291bnR8cmVwZWF0RHVyfHJlcXVpcmVkRXh0ZW5zaW9uc3xyZXF1aXJlZEZlYXR1cmVzfHJlc3RhcnR8cmVzdWx0fHJvdGF0ZXxyeHxyeXxzY2FsZXxzZWVkfHNoYXBlUmVuZGVyaW5nfHNsb3BlfHNwYWNpbmd8c3BlY3VsYXJDb25zdGFudHxzcGVjdWxhckV4cG9uZW50fHNwZWVkfHNwcmVhZE1ldGhvZHxzdGFydE9mZnNldHxzdGREZXZpYXRpb258c3RlbWh8c3RlbXZ8c3RpdGNoVGlsZXN8c3RvcENvbG9yfHN0b3BPcGFjaXR5fHN0cmlrZXRocm91Z2hQb3NpdGlvbnxzdHJpa2V0aHJvdWdoVGhpY2tuZXNzfHN0cmluZ3xzdHJva2V8c3Ryb2tlRGFzaGFycmF5fHN0cm9rZURhc2hvZmZzZXR8c3Ryb2tlTGluZWNhcHxzdHJva2VMaW5lam9pbnxzdHJva2VNaXRlcmxpbWl0fHN0cm9rZU9wYWNpdHl8c3Ryb2tlV2lkdGh8c3VyZmFjZVNjYWxlfHN5c3RlbUxhbmd1YWdlfHRhYmxlVmFsdWVzfHRhcmdldFh8dGFyZ2V0WXx0ZXh0QW5jaG9yfHRleHREZWNvcmF0aW9ufHRleHRSZW5kZXJpbmd8dGV4dExlbmd0aHx0b3x0cmFuc2Zvcm18dTF8dTJ8dW5kZXJsaW5lUG9zaXRpb258dW5kZXJsaW5lVGhpY2tuZXNzfHVuaWNvZGV8dW5pY29kZUJpZGl8dW5pY29kZVJhbmdlfHVuaXRzUGVyRW18dkFscGhhYmV0aWN8dkhhbmdpbmd8dklkZW9ncmFwaGljfHZNYXRoZW1hdGljYWx8dmFsdWVzfHZlY3RvckVmZmVjdHx2ZXJzaW9ufHZlcnRBZHZZfHZlcnRPcmlnaW5YfHZlcnRPcmlnaW5ZfHZpZXdCb3h8dmlld1RhcmdldHx2aXNpYmlsaXR5fHdpZHRoc3x3b3JkU3BhY2luZ3x3cml0aW5nTW9kZXx4fHhIZWlnaHR8eDF8eDJ8eENoYW5uZWxTZWxlY3Rvcnx4bGlua0FjdHVhdGV8eGxpbmtBcmNyb2xlfHhsaW5rSHJlZnx4bGlua1JvbGV8eGxpbmtTaG93fHhsaW5rVGl0bGV8eGxpbmtUeXBlfHhtbEJhc2V8eG1sbnN8eG1sbnNYbGlua3x4bWxMYW5nfHhtbFNwYWNlfHl8eTF8eTJ8eUNoYW5uZWxTZWxlY3Rvcnx6fHpvb21BbmRQYW58Zm9yfGNsYXNzfGF1dG9mb2N1cyl8KChbRGRdW0FhXVtUdF1bQWFdfFtBYV1bUnJdW0lpXVtBYV18eCktLiopKSQvO2NvbnN0IG89KGE9e30sZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWFbZV0mJihhW2VdPSh0PWUsci50ZXN0KHQpfHwxMTE9PT10LmNoYXJDb2RlQXQoMCkmJjExMD09PXQuY2hhckNvZGVBdCgxKSYmdC5jaGFyQ29kZUF0KDIpPDkxKSksYVtlXTt2YXIgdH0pO3ZhciBhfSwxNTIxOihlLHQsbik9PntuLnIodCksbi5kKHQse0FjdGl2aXR5TG9nSWNvbjooKT0+YSxBbGlnbkJhc2VsaW5lSWNvbjooKT0+aSxBbGlnbkJvdHRvbUljb246KCk9PmwsQWxpZ25DZW50ZXJIb3Jpem9udGFsbHlJY29uOigpPT5zLEFsaWduQ2VudGVyVmVydGljYWxseUljb246KCk9PmMsQWxpZ25MZWZ0SWNvbjooKT0+dSxBbGlnblJpZ2h0SWNvbjooKT0+ZCxBbGlnblRvcEljb246KCk9PnAsQWxsU2lkZXNJY29uOigpPT5mLEFuZ2xlSWNvbjooKT0+aCxBcmNoaXZlSWNvbjooKT0+ZyxBcnJvd0JvdHRvbUxlZnRJY29uOigpPT52LEFycm93Qm90dG9tUmlnaHRJY29uOigpPT5DLEFycm93RG93bkljb246KCk9Pm0sQXJyb3dMZWZ0SWNvbjooKT0+dyxBcnJvd1JpZ2h0SWNvbjooKT0+YixBcnJvd1RvcExlZnRJY29uOigpPT55LEFycm93VG9wUmlnaHRJY29uOigpPT54LEFycm93VXBJY29uOigpPT5rLEFzcGVjdFJhdGlvSWNvbjooKT0+UyxBdmF0YXJJY29uOigpPT5PLEJhY2twYWNrSWNvbjooKT0+TSxCYWRnZUljb246KCk9PkwsQmFyQ2hhcnRJY29uOigpPT5fLEJlbGxJY29uOigpPT5QLEJsZW5kaW5nTW9kZUljb246KCk9PkUsQm9va21hcmtJY29uOigpPT5qLEJvcmRlckFsbEljb246KCk9PlIsQm9yZGVyQm90dG9tSWNvbjooKT0+SSxCb3JkZXJEYXNoZWRJY29uOigpPT5WLEJvcmRlckRvdHRlZEljb246KCk9PkgsQm9yZGVyTGVmdEljb246KCk9PkEsQm9yZGVyTm9uZUljb246KCk9PlQsQm9yZGVyUmlnaHRJY29uOigpPT5ELEJvcmRlclNvbGlkSWNvbjooKT0+QixCb3JkZXJTcGxpdEljb246KCk9PlosQm9yZGVyU3R5bGVJY29uOigpPT4kLEJvcmRlclRvcEljb246KCk9Pk4sQm94SWNvbjooKT0+RixCb3hNb2RlbEljb246KCk9PlcsQnV0dG9uSWNvbjooKT0+VSxDYWxlbmRhckljb246KCk9PnosQ2FtZXJhSWNvbjooKT0+RyxDYXJkU3RhY2tJY29uOigpPT5LLENhcmRTdGFja01pbnVzSWNvbjooKT0+cSxDYXJkU3RhY2tQbHVzSWNvbjooKT0+WSxDYXJldERvd25JY29uOigpPT5KLENhcmV0TGVmdEljb246KCk9PlgsQ2FyZXRSaWdodEljb246KCk9PlEsQ2FyZXRTb3J0SWNvbjooKT0+ZWUsQ2FyZXRVcEljb246KCk9PnRlLENoYXRCdWJibGVJY29uOigpPT5uZSxDaGVja0NpcmNsZWRJY29uOigpPT5vZSxDaGVja0ljb246KCk9PnJlLENoZWNrYm94SWNvbjooKT0+YWUsQ2hldnJvbkRvd25JY29uOigpPT5pZSxDaGV2cm9uTGVmdEljb246KCk9PmxlLENoZXZyb25SaWdodEljb246KCk9PnNlLENoZXZyb25VcEljb246KCk9PmNlLENpcmNsZUJhY2tzbGFzaEljb246KCk9PmRlLENpcmNsZUljb246KCk9PnVlLENsaXBib2FyZENvcHlJY29uOigpPT5mZSxDbGlwYm9hcmRJY29uOigpPT5wZSxDbG9ja0ljb246KCk9PmhlLENvZGVJY29uOigpPT5nZSxDb2RlU2FuZGJveExvZ29JY29uOigpPT52ZSxDb2x1bW5TcGFjaW5nSWNvbjooKT0+Q2UsQ29sdW1uc0ljb246KCk9Pm1lLENvbW1pdEljb246KCk9PndlLENvbXBvbmVudDFJY29uOigpPT5iZSxDb21wb25lbnQySWNvbjooKT0+eWUsQ29tcG9uZW50Qm9vbGVhbkljb246KCk9PnhlLENvbXBvbmVudEluc3RhbmNlSWNvbjooKT0+a2UsQ29tcG9uZW50Tm9uZUljb246KCk9PlNlLENvbXBvbmVudFBsYWNlaG9sZGVySWNvbjooKT0+T2UsQ29udGFpbmVySWNvbjooKT0+TWUsQ29va2llSWNvbjooKT0+TGUsQ29weUljb246KCk9Pl9lLENvcm5lckJvdHRvbUxlZnRJY29uOigpPT5QZSxDb3JuZXJCb3R0b21SaWdodEljb246KCk9PkVlLENvcm5lclRvcExlZnRJY29uOigpPT5qZSxDb3JuZXJUb3BSaWdodEljb246KCk9PlJlLENvcm5lcnNJY29uOigpPT5JZSxDb3VudGRvd25UaW1lckljb246KCk9PlZlLENvdW50ZXJDbG9ja3dpc2VDbG9ja0ljb246KCk9PkhlLENyb3BJY29uOigpPT5BZSxDcm9zczFJY29uOigpPT5UZSxDcm9zczJJY29uOigpPT5EZSxDcm9zc0NpcmNsZWRJY29uOigpPT5CZSxDcm9zc2hhaXIxSWNvbjooKT0+WmUsQ3Jvc3NoYWlyMkljb246KCk9PiRlLENydW1wbGVkUGFwZXJJY29uOigpPT5OZSxDdWJlSWNvbjooKT0+RmUsQ3Vyc29yQXJyb3dJY29uOigpPT5XZSxDdXJzb3JUZXh0SWNvbjooKT0+VWUsRGFzaEljb246KCk9PnplLERhc2hib2FyZEljb246KCk9PkdlLERpbWVuc2lvbnNJY29uOigpPT5LZSxEaXNjSWNvbjooKT0+cWUsRGl2aWRlckhvcml6b250YWxJY29uOigpPT5ZZSxEaXZpZGVyVmVydGljYWxJY29uOigpPT5KZSxEb3RGaWxsZWRJY29uOigpPT5RZSxEb3RJY29uOigpPT5YZSxEb3RzSG9yaXpvbnRhbEljb246KCk9PmV0LERvdHNWZXJ0aWNhbEljb246KCk9PnR0LERvdWJsZUFycm93RG93bkljb246KCk9Pm50LERvdWJsZUFycm93TGVmdEljb246KCk9PnJ0LERvdWJsZUFycm93UmlnaHRJY29uOigpPT5vdCxEb3VibGVBcnJvd1VwSWNvbjooKT0+YXQsRG93bmxvYWRJY29uOigpPT5pdCxEcmFnSGFuZGxlRG90czFJY29uOigpPT5sdCxEcmFnSGFuZGxlRG90czJJY29uOigpPT5zdCxEcmFnSGFuZGxlSG9yaXpvbnRhbEljb246KCk9PmN0LERyYWdIYW5kbGVWZXJ0aWNhbEljb246KCk9PnV0LERyYXdpbmdQaW5GaWxsZWRJY29uOigpPT5wdCxEcmF3aW5nUGluSWNvbjooKT0+ZHQsRHJvcGRvd25NZW51SWNvbjooKT0+ZnQsRW50ZXJGdWxsU2NyZWVuSWNvbjooKT0+Z3QsRW50ZXJJY29uOigpPT5odCxFbnZlbG9wZUNsb3NlZEljb246KCk9PnZ0LEVudmVsb3BlT3Blbkljb246KCk9PkN0LEV4Y2xhbWF0aW9uVHJpYW5nbGVJY29uOigpPT5tdCxFeGl0RnVsbFNjcmVlbkljb246KCk9PmJ0LEV4aXRJY29uOigpPT53dCxFeHRlcm5hbExpbmtJY29uOigpPT55dCxFeWVDbG9zZWRJY29uOigpPT54dCxFeWVOb25lSWNvbjooKT0+a3QsRXllT3Blbkljb246KCk9PlN0LEZhY2VJY29uOigpPT5PdCxGaWdtYUxvZ29JY29uOigpPT5NdCxGaWxlSWNvbjooKT0+THQsRmlsZU1pbnVzSWNvbjooKT0+X3QsRmlsZVBsdXNJY29uOigpPT5QdCxGaWxlVGV4dEljb246KCk9PkV0LEZvbnRCb2xkSWNvbjooKT0+anQsRm9udEZhbWlseUljb246KCk9PlJ0LEZvbnRJdGFsaWNJY29uOigpPT5JdCxGb250Um9tYW5JY29uOigpPT5WdCxGb250U2l6ZUljb246KCk9Pkh0LEZvbnRTdHlsZUljb246KCk9PkF0LEZyYW1lSWNvbjooKT0+VHQsRnJhbWVyTG9nb0ljb246KCk9PkR0LEdlYXJJY29uOigpPT5CdCxHaXRIdWJMb2dvSWNvbjooKT0+WnQsR2xvYmVJY29uOigpPT4kdCxHcmlkSWNvbjooKT0+TnQsR3JvdXBJY29uOigpPT5GdCxIYWxmMUljb246KCk9Pld0LEhhbGYySWNvbjooKT0+VXQsSGFtYnVyZ2VyTWVudUljb246KCk9Pnp0LEhhbmRJY29uOigpPT5HdCxIZWFkaW5nSWNvbjooKT0+S3QsSGVpZ2h0SWNvbjooKT0+cXQsSG9tZUljb246KCk9Pll0LEljb25KYXJMb2dvSWNvbjooKT0+SnQsSWRDYXJkSWNvbjooKT0+WHQsSW1hZ2VJY29uOigpPT5RdCxJbmZvQ2lyY2xlZEljb246KCk9PmVuLElucHV0SWNvbjooKT0+dG4sTGFwVGltZXJJY29uOigpPT5ubixMYXllcnNJY29uOigpPT5ybixMYXlvdXRJY29uOigpPT5vbixMZXR0ZXJDYXNlQ2FwaXRhbGl6ZUljb246KCk9PmFuLExldHRlckNhc2VMb3dlcmNhc2VJY29uOigpPT5sbixMZXR0ZXJDYXNlVG9nZ2xlSWNvbjooKT0+c24sTGV0dGVyQ2FzZVVwcGVyY2FzZUljb246KCk9PmNuLExldHRlclNwYWNpbmdJY29uOigpPT51bixMaWdodG5pbmdCb2x0SWNvbjooKT0+ZG4sTGluZUhlaWdodEljb246KCk9PnBuLExpbmsxSWNvbjooKT0+Zm4sTGluazJJY29uOigpPT5obixMaW5rQnJlYWsxSWNvbjooKT0+Z24sTGlua0JyZWFrMkljb246KCk9PnZuLExpbmtOb25lMUljb246KCk9PkNuLExpbmtOb25lMkljb246KCk9Pm1uLExpc3RCdWxsZXRJY29uOigpPT53bixMb2NrQ2xvc2VkSWNvbjooKT0+Ym4sTG9ja09wZW4xSWNvbjooKT0+eW4sTG9ja09wZW4ySWNvbjooKT0+eG4sTG9vcEljb246KCk9PmtuLE1hZ2ljV2FuZEljb246KCk9PlNuLE1hZ25pZnlpbmdHbGFzc0ljb246KCk9Pk9uLE1hcmdpbkljb246KCk9Pk1uLE1hc2tPZmZJY29uOigpPT5MbixNYXNrT25JY29uOigpPT5fbixNaW51c0NpcmNsZWRJY29uOigpPT5FbixNaW51c0ljb246KCk9PlBuLE1peEljb246KCk9PmpuLE1peGVySG9yaXpvbnRhbEljb246KCk9PlJuLE1peGVyVmVydGljYWxJY29uOigpPT5JbixNb2R1bHpMb2dvSWNvbjooKT0+Vm4sTW9vbkljb246KCk9PkhuLE1vdmVJY29uOigpPT5BbixOb3Rpb25Mb2dvSWNvbjooKT0+VG4sT3BhY2l0eUljb246KCk9PkRuLE92ZXJsaW5lSWNvbjooKT0+Qm4sUGFkZGluZ0ljb246KCk9PlpuLFBhcGVyUGxhbmVJY29uOigpPT4kbixQYXVzZUljb246KCk9Pk5uLFBlbmNpbDFJY29uOigpPT5GbixQZW5jaWwySWNvbjooKT0+V24sUGVyc29uSWNvbjooKT0+VW4sUGllQ2hhcnRJY29uOigpPT56bixQaWxjcm93SWNvbjooKT0+R24sUGluQm90dG9tSWNvbjooKT0+S24sUGluTGVmdEljb246KCk9PnFuLFBpblJpZ2h0SWNvbjooKT0+WW4sUGluVG9wSWNvbjooKT0+Sm4sUGxheUljb246KCk9PlhuLFBsdXNDaXJjbGVkSWNvbjooKT0+ZXIsUGx1c0ljb246KCk9PlFuLFF1ZXN0aW9uTWFya0NpcmNsZWRJY29uOigpPT5ucixRdWVzdGlvbk1hcmtJY29uOigpPT50cixRdW90ZUljb246KCk9PnJyLFJhZGlvYnV0dG9uSWNvbjooKT0+b3IsUmVhZGVySWNvbjooKT0+YXIsUmVsb2FkSWNvbjooKT0+aXIsUmVzZXRJY29uOigpPT5scixSZXN1bWVJY29uOigpPT5zcixSb2NrZXRJY29uOigpPT5jcixSb3RhdGVDb3VudGVyQ2xvY2t3aXNlSWNvbjooKT0+dXIsUm93U3BhY2luZ0ljb246KCk9PmRyLFJvd3NJY29uOigpPT5wcixSdWxlckhvcml6b250YWxJY29uOigpPT5mcixSdWxlclNxdWFyZUljb246KCk9PmhyLFNlY3Rpb25JY29uOigpPT5ncixTZXdpbmdQaW5GaWxsZWRJY29uOigpPT5DcixTZXdpbmdQaW5JY29uOigpPT52cixTaGFkb3dJY29uOigpPT5tcixTaGFkb3dJbm5lckljb246KCk9PndyLFNoYWRvd05vbmVJY29uOigpPT5icixTaGFkb3dPdXRlckljb246KCk9PnlyLFNoYXJlMUljb246KCk9PnhyLFNoYXJlMkljb246KCk9PmtyLFNodWZmbGVJY29uOigpPT5TcixTaXplSWNvbjooKT0+T3IsU2tldGNoTG9nb0ljb246KCk9Pk1yLFNsYXNoSWNvbjooKT0+THIsU2xpZGVySWNvbjooKT0+X3IsU3BhY2VCZXR3ZWVuSG9yaXpvbnRhbGx5SWNvbjooKT0+UHIsU3BhY2VCZXR3ZWVuVmVydGljYWxseUljb246KCk9PkVyLFNwYWNlRXZlbmx5SG9yaXpvbnRhbGx5SWNvbjooKT0+anIsU3BhY2VFdmVubHlWZXJ0aWNhbGx5SWNvbjooKT0+UnIsU3BlYWtlckxvdWRJY29uOigpPT5JcixTcGVha2VyTW9kZXJhdGVJY29uOigpPT5WcixTcGVha2VyT2ZmSWNvbjooKT0+SHIsU3BlYWtlclF1aWV0SWNvbjooKT0+QXIsU3F1YXJlSWNvbjooKT0+VHIsU3RhY2tJY29uOigpPT5EcixTdGFyRmlsbGVkSWNvbjooKT0+WnIsU3Rhckljb246KCk9PkJyLFN0aXRjaGVzTG9nb0ljb246KCk9PiRyLFN0b3BJY29uOigpPT5OcixTdG9wd2F0Y2hJY29uOigpPT5GcixTdHJldGNoSG9yaXpvbnRhbGx5SWNvbjooKT0+V3IsU3RyZXRjaFZlcnRpY2FsbHlJY29uOigpPT5VcixTdHJpa2V0aHJvdWdoSWNvbjooKT0+enIsU3VuSWNvbjooKT0+R3IsU3dpdGNoSWNvbjooKT0+S3IsU3ltYm9sSWNvbjooKT0+cXIsVGFibGVJY29uOigpPT5ZcixUYXJnZXRJY29uOigpPT5KcixUZXh0QWxpZ25DZW50ZXJJY29uOigpPT5RcixUZXh0QWxpZ25KdXN0aWZ5SWNvbjooKT0+ZW8sVGV4dEFsaWduTGVmdEljb246KCk9PnRvLFRleHRBbGlnblJpZ2h0SWNvbjooKT0+bm8sVGV4dEljb246KCk9PlhyLFRleHROb25lSWNvbjooKT0+cm8sVGhpY2tBcnJvd0Rvd25JY29uOigpPT5vbyxUaGlja0Fycm93TGVmdEljb246KCk9PmFvLFRoaWNrQXJyb3dSaWdodEljb246KCk9PmlvLFRoaWNrQXJyb3dVcEljb246KCk9PmxvLFRpbWVySWNvbjooKT0+c28sVG9rZW5zSWNvbjooKT0+Y28sVHJhY2tOZXh0SWNvbjooKT0+dW8sVHJhY2tQcmV2aW91c0ljb246KCk9PnBvLFRyYW5zcGFyZW5jeUdyaWRJY29uOigpPT5mbyxUcmFzaEljb246KCk9PmhvLFRyaWFuZ2xlRG93bkljb246KCk9PmdvLFRyaWFuZ2xlTGVmdEljb246KCk9PnZvLFRyaWFuZ2xlUmlnaHRJY29uOigpPT5DbyxUcmlhbmdsZVVwSWNvbjooKT0+bW8sVHdpdHRlckxvZ29JY29uOigpPT53byxVbmRlcmxpbmVJY29uOigpPT5ibyxVcGRhdGVJY29uOigpPT55byxVcGxvYWRJY29uOigpPT54byxWYWx1ZUljb246KCk9PmtvLFZhbHVlTm9uZUljb246KCk9PlNvLFZlcmNlbExvZ29JY29uOigpPT5PbyxWaWRlb0ljb246KCk9Pk1vLFZpZXdHcmlkSWNvbjooKT0+TG8sVmlld0hvcml6b250YWxJY29uOigpPT5fbyxWaWV3Tm9uZUljb246KCk9PlBvLFZpZXdWZXJ0aWNhbEljb246KCk9PkVvLFdpZHRoSWNvbjooKT0+am8sWm9vbUluSWNvbjooKT0+Um8sWm9vbU91dEljb246KCk9PklvfSk7dmFyIHI9big2Njg5KTtmdW5jdGlvbiBvKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik+PTB8fChvW25dPWVbbl0pO3JldHVybiBvfXZhciBhPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wIDEuNUMwIDEuMjIzODYgMC4yMjM4NTggMSAwLjUgMUgyLjVDMi43NzYxNCAxIDMgMS4yMjM4NiAzIDEuNUMzIDEuNzc2MTQgMi43NzYxNCAyIDIuNSAySDAuNUMwLjIyMzg1OCAyIDAgMS43NzYxNCAwIDEuNVpNNCAxLjVDNCAxLjIyMzg2IDQuMjIzODYgMSA0LjUgMUgxNC41QzE0Ljc3NjEgMSAxNSAxLjIyMzg2IDE1IDEuNUMxNSAxLjc3NjE0IDE0Ljc3NjEgMiAxNC41IDJINC41QzQuMjIzODYgMiA0IDEuNzc2MTQgNCAxLjVaTTQgNC41QzQgNC4yMjM4NiA0LjIyMzg2IDQgNC41IDRIMTEuNUMxMS43NzYxIDQgMTIgNC4yMjM4NiAxMiA0LjVDMTIgNC43NzYxNCAxMS43NzYxIDUgMTEuNSA1SDQuNUM0LjIyMzg2IDUgNCA0Ljc3NjE0IDQgNC41Wk0wIDcuNUMwIDcuMjIzODYgMC4yMjM4NTggNyAwLjUgN0gyLjVDMi43NzYxNCA3IDMgNy4yMjM4NiAzIDcuNUMzIDcuNzc2MTQgMi43NzYxNCA4IDIuNSA4SDAuNUMwLjIyMzg1OCA4IDAgNy43NzYxNCAwIDcuNVpNNCA3LjVDNCA3LjIyMzg2IDQuMjIzODYgNyA0LjUgN0gxNC41QzE0Ljc3NjEgNyAxNSA3LjIyMzg2IDE1IDcuNUMxNSA3Ljc3NjE0IDE0Ljc3NjEgOCAxNC41IDhINC41QzQuMjIzODYgOCA0IDcuNzc2MTQgNCA3LjVaTTQgMTAuNUM0IDEwLjIyMzkgNC4yMjM4NiAxMCA0LjUgMTBIMTEuNUMxMS43NzYxIDEwIDEyIDEwLjIyMzkgMTIgMTAuNUMxMiAxMC43NzYxIDExLjc3NjEgMTEgMTEuNSAxMUg0LjVDNC4yMjM4NiAxMSA0IDEwLjc3NjEgNCAxMC41Wk0wIDEzLjVDMCAxMy4yMjM5IDAuMjIzODU4IDEzIDAuNSAxM0gyLjVDMi43NzYxNCAxMyAzIDEzLjIyMzkgMyAxMy41QzMgMTMuNzc2MSAyLjc3NjE0IDE0IDIuNSAxNEgwLjVDMC4yMjM4NTggMTQgMCAxMy43NzYxIDAgMTMuNVpNNCAxMy41QzQgMTMuMjIzOSA0LjIyMzg2IDEzIDQuNSAxM0gxNC41QzE0Ljc3NjEgMTMgMTUgMTMuMjIzOSAxNSAxMy41QzE1IDEzLjc3NjEgMTQuNzc2MSAxNCAxNC41IDE0SDQuNUM0LjIyMzg2IDE0IDQgMTMuNzc2MSA0IDEzLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxpPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMC41IDEuNzUwMDNDMTAuNzEwNyAxLjc1MDAzIDEwLjg5ODggMS44ODIxNyAxMC45NzAzIDIuMDgwNDJMMTMuOTcwMyAxMC40QzE0LjA2NCAxMC42NTk4IDEzLjkyOTMgMTAuOTQ2MyAxMy42Njk2IDExLjA0QzEzLjQwOTggMTEuMTMzNiAxMy4xMjMzIDEwLjk5OSAxMy4wMjk2IDEwLjczOTJMMTIuMDQ3NyA4LjAxNjA2SDguOTUyMjdMNy45NzAzMSAxMC43MzkyQzcuODc2NjQgMTAuOTk5IDcuNTkwMTIgMTEuMTMzNiA3LjMzMDM1IDExLjA0QzcuMDcwNTggMTAuOTQ2MyA2LjkzNTkzIDEwLjY1OTggNy4wMjk2IDEwLjRMMTAuMDI5NiAyLjA4MDQyQzEwLjEwMTEgMS44ODIxNyAxMC4yODkyIDEuNzUwMDMgMTAuNSAxLjc1MDAzWk0xMC41IDMuNzI0MDJMMTEuNzQxMSA3LjE2NjA2SDkuMjU4NzdMMTAuNSAzLjcyNDAyWk0yLjQ5OTQ5IDIuMDk5OTdDMi43MjA0IDIuMDk5OTcgMi44OTk0OSAyLjI3OTA2IDIuODk5NDkgMi40OTk5N0wyLjg5OTQ5IDkuNTM0MjhMNC4yMTY2NCA4LjIxNzEzQzQuMzcyODUgOC4wNjA5MiA0LjYyNjEyIDguMDYwOTIgNC43ODIzMyA4LjIxNzEzQzQuOTM4NTQgOC4zNzMzNCA0LjkzODU0IDguNjI2NiA0Ljc4MjMzIDguNzgyODFMMi43ODIzMyAxMC43ODI4QzIuNzA3MzIgMTAuODU3OCAyLjYwNTU3IDEwLjkgMi40OTk0OSAxMC45QzIuMzkzNCAxMC45IDIuMjkxNjYgMTAuODU3OCAyLjIxNjY0IDEwLjc4MjhMMC4yMTY2NDUgOC43ODI4MUMwLjA2MDQzNDkgOC42MjY2IDAuMDYwNDM0OSA4LjM3MzM0IDAuMjE2NjQ1IDguMjE3MTNDMC4zNzI4NTQgOC4wNjA5MiAwLjYyNjEyIDguMDYwOTIgMC43ODIzMyA4LjIxNzEzTDIuMDk5NDkgOS41MzQyOEwyLjA5OTQ5IDIuNDk5OTdDMi4wOTk0OSAyLjI3OTA2IDIuMjc4NTcgMi4wOTk5NyAyLjQ5OTQ5IDIuMDk5OTdaTTAuMDk5OTY5NSAxMy41MDAxQzAuMDk5OTY5NSAxMy4yNzkxIDAuMjc5MDU2IDEzLjEwMDEgMC40OTk5NjkgMTMuMTAwMUgxNC41QzE0LjcyMDkgMTMuMTAwMSAxNC45IDEzLjI3OTEgMTQuOSAxMy41MDAxQzE0LjkgMTMuNzIxIDE0LjcyMDkgMTMuOTAwMSAxNC41IDEzLjkwMDFIMC40OTk5NjlDMC4yNzkwNTYgMTMuOTAwMSAwLjA5OTk2OTUgMTMuNzIxIDAuMDk5OTY5NSAxMy41MDAxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOSAzQzkgMi40NDc3MiA4LjU1MjI5IDIgOCAySDdDNi40NDc3MiAyIDYgMi40NDc3MiA2IDNMNiAxNEgxLjVDMS4yMjM4NiAxNCAxIDE0LjIyMzkgMSAxNC41QzEgMTQuNzc2MSAxLjIyMzg2IDE1IDEuNSAxNUw2IDE1SDlIMTMuNUMxMy43NzYxIDE1IDE0IDE0Ljc3NjEgMTQgMTQuNUMxNCAxNC4yMjM5IDEzLjc3NjEgMTQgMTMuNSAxNEg5VjNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxzPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02Ljk5OTg4IDFDNi40NDc1OSAxIDUuOTk5ODggMS40NDc3MiA1Ljk5OTg4IDJWN0gxLjQ5OTg4QzEuMjIzNzQgNyAwLjk5OTg3OCA3LjIyMzg2IDAuOTk5ODc4IDcuNUMwLjk5OTg3OCA3Ljc3NjE0IDEuMjIzNzQgOCAxLjQ5OTg4IDhINS45OTk4OFYxM0M1Ljk5OTg4IDEzLjU1MjMgNi40NDc1OSAxNCA2Ljk5OTg4IDE0SDcuOTk5ODhDOC41NTIxNiAxNCA4Ljk5OTg4IDEzLjU1MjMgOC45OTk4OCAxM1Y4SDEzLjQ5OTlDMTMuNzc2IDggMTMuOTk5OSA3Ljc3NjE0IDEzLjk5OTkgNy41QzEzLjk5OTkgNy4yMjM4NiAxMy43NzYgNyAxMy40OTk5IDdIOC45OTk4OFYyQzguOTk5ODggMS40NDc3MiA4LjU1MjE2IDEgNy45OTk4OCAxTDYuOTk5ODggMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuOTk5ODggNkMxLjQ0NzU5IDYgMC45OTk4NzcgNi40NDc3MiAwLjk5OTg3NyA3TDAuOTk5ODc3IDhDMC45OTk4NzcgOC41NTIyOCAxLjQ0NzU5IDkgMS45OTk4OCA5TDYuOTk5ODggOUw2Ljk5OTg4IDEzLjVDNi45OTk4OCAxMy43NzYxIDcuMjIzNzQgMTQgNy40OTk4OCAxNEM3Ljc3NjAyIDE0IDcuOTk5ODggMTMuNzc2MSA3Ljk5OTg4IDEzLjVMNy45OTk4OCA5TDEyLjk5OTkgOUMxMy41NTIyIDkgMTMuOTk5OSA4LjU1MjI4IDEzLjk5OTkgOEwxMy45OTk5IDdDMTMuOTk5OSA2LjQ0NzcyIDEzLjU1MjIgNiAxMi45OTk5IDZMNy45OTk4OCA2TDcuOTk5ODggMS41QzcuOTk5ODggMS4yMjM4NiA3Ljc3NjAyIDEgNy40OTk4OCAxQzcuMjIzNzMgMSA2Ljk5OTg4IDEuMjIzODYgNi45OTk4OCAxLjVMNi45OTk4OCA2TDEuOTk5ODggNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuNDk5OTk1IDAuOTk5OTk1QzAuMjIzODU1IDAuOTk5OTk1IC01LjU4NDU4ZS0wNyAxLjIyMzg1IC01LjQ2Mzg4ZS0wNyAxLjQ5OTk5TC0yLjE4NTU0ZS0wOCAxMy40OTk5Qy05Ljc4NDkyZS0wOSAxMy43NzYgMC4yMjM4NTUgMTMuOTk5OSAwLjQ5OTk5NSAxMy45OTk5QzAuNzc2MTM2IDEzLjk5OTkgMC45OTk5OTEgMTMuNzc2IDAuOTk5OTkxIDEzLjQ5OTlMMC45OTk5OTEgOC45OTk5M0wxMiA4Ljk5OTkzQzEyLjU1MjMgOC45OTk5MyAxMyA4LjU1MjIyIDEzIDcuOTk5OTNMMTMgNi45OTk5NEMxMyA2LjQ0NzY2IDEyLjU1MjMgNS45OTk5NSAxMiA1Ljk5OTk1TDAuOTk5OTkxIDUuOTk5OTVMMC45OTk5OTEgMS40OTk5OUMwLjk5OTk5MSAxLjIyMzg1IDAuNzc2MTM1IDAuOTk5OTk1IDAuNDk5OTk1IDAuOTk5OTk1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTQuNDk5OSAxQzE0LjIyMzcgMSAxMy45OTk5IDEuMjIzODYgMTMuOTk5OSAxLjVMMTMuOTk5OSA2TDIuOTk5ODggNkMyLjQ0NzU5IDYgMS45OTk4OCA2LjQ0NzcyIDEuOTk5ODggN0wxLjk5OTg4IDhDMS45OTk4OCA4LjU1MjI4IDIuNDQ3NTkgOSAyLjk5OTg4IDlMMTMuOTk5OSA5TDEzLjk5OTkgMTMuNUMxMy45OTk5IDEzLjc3NjEgMTQuMjIzNyAxNCAxNC40OTk5IDE0QzE0Ljc3NiAxNCAxNC45OTk5IDEzLjc3NjEgMTQuOTk5OSAxMy41TDE0Ljk5OTkgOUwxNC45OTk5IDZMMTQuOTk5OSAxLjVDMTQuOTk5OSAxLjIyMzg2IDE0Ljc3NiAxIDE0LjQ5OTkgMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHA9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuNSAwQzEuMjIzODYgMCAxIDAuMjIzODU4IDEgMC41QzEgMC43NzYxNDIgMS4yMjM4NiAxIDEuNSAxSDZWMTJDNiAxMi41NTIzIDYuNDQ3NzIgMTMgNyAxM0g4QzguNTUyMjggMTMgOSAxMi41NTIzIDkgMTJWMUgxMy41QzEzLjc3NjEgMSAxNCAwLjc3NjE0MiAxNCAwLjVDMTQgMC4yMjM4NTggMTMuNzc2MSAwIDEzLjUgMEg5SDZIMS41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41IDAuNzVMOS43NSAzSDUuMjVMNy41IDAuNzVaTTcuNSAxNC4yNUw5Ljc1IDEySDUuMjVMNy41IDE0LjI1Wk0zIDUuMjVMMC43NSA3LjVMMyA5Ljc1VjUuMjVaTTE0LjI1IDcuNUwxMiA1LjI1VjkuNzVMMTQuMjUgNy41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0saD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC44OTE0IDIuMTkzN0M5LjExNTggMi4zNTQ2NCA5LjE2NzI1IDIuNjY3MDEgOS4wMDYzMSAyLjg5MTQxTDIuNDczODggMTJIMTMuNUMxMy43NzYxIDEyIDE0IDEyLjIyMzkgMTQgMTIuNUMxNCAxMi43NzYyIDEzLjc3NjEgMTMgMTMuNSAxM0gxLjVDMS4zMTI1NCAxMyAxLjE0MDgyIDEyLjg5NTIgMS4wNTUyIDEyLjcyODRDMC45Njk1NzggMTIuNTYxNiAwLjk4NDQzOCAxMi4zNjEgMS4wOTM2OSAxMi4yMDg2TDguMTkzNjkgMi4zMDg2MkM4LjM1NDYyIDIuMDg0MjIgOC42NjcgMi4wMzI3NyA4Ljg5MTQgMi4xOTM3Wk0xMS4xIDYuNTAwMDFDMTEuMSA2LjIyMzg3IDExLjMyMzggNi4wMDAwMSAxMS42IDYuMDAwMDFDMTEuODc2MSA2LjAwMDAxIDEyLjEgNi4yMjM4NyAxMi4xIDYuNTAwMDFDMTIuMSA2Ljc3NjE1IDExLjg3NjEgNy4wMDAwMSAxMS42IDcuMDAwMDFDMTEuMzIzOCA3LjAwMDAxIDExLjEgNi43NzYxNSAxMS4xIDYuNTAwMDFaTTEwLjQgNC4wMDAwMUMxMC4xMjM5IDQuMDAwMDEgOS45MDAwMyA0LjIyMzg3IDkuOTAwMDMgNC41MDAwMUM5LjkwMDAzIDQuNzc2MTUgMTAuMTIzOSA1LjAwMDAxIDEwLjQgNS4wMDAwMUMxMC42NzYyIDUuMDAwMDEgMTAuOSA0Ljc3NjE1IDEwLjkgNC41MDAwMUMxMC45IDQuMjIzODcgMTAuNjc2MiA0LjAwMDAxIDEwLjQgNC4wMDAwMVpNMTIuMSA4LjUwMDAxQzEyLjEgOC4yMjM4NyAxMi4zMjM4IDguMDAwMDEgMTIuNiA4LjAwMDAxQzEyLjg3NjEgOC4wMDAwMSAxMy4xIDguMjIzODcgMTMuMSA4LjUwMDAxQzEzLjEgOC43NzYxNSAxMi44NzYxIDkuMDAwMDEgMTIuNiA5LjAwMDAxQzEyLjMyMzggOS4wMDAwMSAxMi4xIDguNzc2MTUgMTIuMSA4LjUwMDAxWk0xMy40IDEwQzEzLjEyMzkgMTAgMTIuOSAxMC4yMjM5IDEyLjkgMTAuNUMxMi45IDEwLjc3NjEgMTMuMTIzOSAxMSAxMy40IDExQzEzLjY3NjIgMTEgMTMuOSAxMC43NzYxIDEzLjkgMTAuNUMxMy45IDEwLjIyMzkgMTMuNjc2MiAxMCAxMy40IDEwWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy4zMDkwMiAxQzIuOTMwMjUgMSAyLjU4Mzk4IDEuMjE0IDIuNDE0NTkgMS41NTI3OUwxLjA1Mjc5IDQuMjc2MzlDMS4wMTgwNyA0LjM0NTgyIDEgNC40MjIzOCAxIDQuNVYxM0MxIDEzLjU1MjMgMS40NDc3MiAxNCAyIDE0SDEzQzEzLjU1MjMgMTQgMTQgMTMuNTUyMyAxNCAxM1Y0LjVDMTQgNC40MjIzOCAxMy45ODE5IDQuMzQ1ODIgMTMuOTQ3MiA0LjI3NjM5TDEyLjU4NTQgMS41NTI4MUMxMi40MTYgMS4yMTQwMyAxMi4wNjk4IDEuMDAwMDMgMTEuNjkxIDEuMDAwMDNMNy41IDEuMDAwMDFMMy4zMDkwMiAxWk0zLjMwOTAyIDJMNyAyLjAwMDAxVjRIMi4zMDkwMkwzLjMwOTAyIDJaTTggNFYyLjAwMDAyTDExLjY5MSAyLjAwMDAzTDEyLjY5MSA0SDhaTTcuNSA1SDEzVjEzSDJWNUg3LjVaTTUuNSA3QzUuMjIzODYgNyA1IDcuMjIzODYgNSA3LjVDNSA3Ljc3NjE0IDUuMjIzODYgOCA1LjUgOEg5LjVDOS43NzYxNCA4IDEwIDcuNzc2MTQgMTAgNy41QzEwIDcuMjIzODYgOS43NzYxNCA3IDkuNSA3SDUuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHY9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTExLjM1MzYgMy42NDY0NEMxMS41NDg4IDMuODQxNyAxMS41NDg4IDQuMTU4MjggMTEuMzUzNiA0LjM1MzU0TDQuNzA3MTEgMTFMOSAxMUM5LjI3NjE0IDExIDkuNSAxMS4yMjM5IDkuNSAxMS41QzkuNSAxMS43NzYxIDkuMjc2MTQgMTIgOSAxMkwzLjUgMTJDMy4zNjczOSAxMiAzLjI0MDIxIDExLjk0NzMgMy4xNDY0NSAxMS44NTM2QzMuMDUyNjggMTEuNzU5OCAzIDExLjYzMjYgMyAxMS41TDMgNS45OTk5OUMzIDUuNzIzODUgMy4yMjM4NiA1LjQ5OTk5IDMuNSA1LjQ5OTk5QzMuNzc2MTQgNS40OTk5OSA0IDUuNzIzODUgNCA1Ljk5OTk5VjEwLjI5MjlMMTAuNjQ2NCAzLjY0NjQzQzEwLjg0MTcgMy40NTExNyAxMS4xNTgzIDMuNDUxMTcgMTEuMzUzNiAzLjY0NjQ0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy42NDY0NSAzLjY0NjQ0QzMuNDUxMTggMy44NDE3IDMuNDUxMTggNC4xNTgyOCAzLjY0NjQ1IDQuMzUzNTRMMTAuMjkyOSAxMUw2IDExQzUuNzIzODYgMTEgNS41IDExLjIyMzkgNS41IDExLjVDNS41IDExLjc3NjEgNS43MjM4NiAxMiA2IDEyTDExLjUgMTJDMTEuNjMyNiAxMiAxMS43NTk4IDExLjk0NzMgMTEuODUzNiAxMS44NTM2QzExLjk0NzMgMTEuNzU5OCAxMiAxMS42MzI2IDEyIDExLjVMMTIgNS45OTk5OUMxMiA1LjcyMzg1IDExLjc3NjEgNS40OTk5OSAxMS41IDUuNDk5OTlDMTEuMjIzOSA1LjQ5OTk5IDExIDUuNzIzODUgMTEgNS45OTk5OVYxMC4yOTI5TDQuMzUzNTUgMy42NDY0M0M0LjE1ODI5IDMuNDUxMTcgMy44NDE3MSAzLjQ1MTE3IDMuNjQ2NDUgMy42NDY0NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG09ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNSAyQzcuNzc2MTQgMiA4IDIuMjIzODYgOCAyLjVMOCAxMS4yOTI5TDExLjE0NjQgOC4xNDY0NUMxMS4zNDE3IDcuOTUxMTggMTEuNjU4MyA3Ljk1MTE4IDExLjg1MzYgOC4xNDY0NUMxMi4wNDg4IDguMzQxNzEgMTIuMDQ4OCA4LjY1ODI5IDExLjg1MzYgOC44NTM1NUw3Ljg1MzU1IDEyLjg1MzZDNy43NTk3OSAxMi45NDczIDcuNjMyNjEgMTMgNy41IDEzQzcuMzY3MzkgMTMgNy4yNDAyMSAxMi45NDczIDcuMTQ2NDUgMTIuODUzNkwzLjE0NjQ1IDguODUzNTVDMi45NTExOCA4LjY1ODI5IDIuOTUxMTggOC4zNDE3MSAzLjE0NjQ1IDguMTQ2NDVDMy4zNDE3MSA3Ljk1MTE4IDMuNjU4MjkgNy45NTExOCAzLjg1MzU1IDguMTQ2NDVMNyAxMS4yOTI5TDcgMi41QzcgMi4yMjM4NiA3LjIyMzg2IDIgNy41IDJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx3PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02Ljg1MzU1IDMuMTQ2NDVDNy4wNDg4MiAzLjM0MTcxIDcuMDQ4ODIgMy42NTgyOSA2Ljg1MzU1IDMuODUzNTVMMy43MDcxMSA3SDEyLjVDMTIuNzc2MSA3IDEzIDcuMjIzODYgMTMgNy41QzEzIDcuNzc2MTQgMTIuNzc2MSA4IDEyLjUgOEgzLjcwNzExTDYuODUzNTUgMTEuMTQ2NEM3LjA0ODgyIDExLjM0MTcgNy4wNDg4MiAxMS42NTgzIDYuODUzNTUgMTEuODUzNkM2LjY1ODI5IDEyLjA0ODggNi4zNDE3MSAxMi4wNDg4IDYuMTQ2NDUgMTEuODUzNkwyLjE0NjQ1IDcuODUzNTVDMS45NTExOCA3LjY1ODI5IDEuOTUxMTggNy4zNDE3MSAyLjE0NjQ1IDcuMTQ2NDVMNi4xNDY0NSAzLjE0NjQ1QzYuMzQxNzEgMi45NTExOCA2LjY1ODI5IDIuOTUxMTggNi44NTM1NSAzLjE0NjQ1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sYj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC4xNDY0NSAzLjE0NjQ1QzguMzQxNzEgMi45NTExOCA4LjY1ODI5IDIuOTUxMTggOC44NTM1NSAzLjE0NjQ1TDEyLjg1MzYgNy4xNDY0NUMxMy4wNDg4IDcuMzQxNzEgMTMuMDQ4OCA3LjY1ODI5IDEyLjg1MzYgNy44NTM1NUw4Ljg1MzU1IDExLjg1MzZDOC42NTgyOSAxMi4wNDg4IDguMzQxNzEgMTIuMDQ4OCA4LjE0NjQ1IDExLjg1MzZDNy45NTExOCAxMS42NTgzIDcuOTUxMTggMTEuMzQxNyA4LjE0NjQ1IDExLjE0NjRMMTEuMjkyOSA4SDIuNUMyLjIyMzg2IDggMiA3Ljc3NjE0IDIgNy41QzIgNy4yMjM4NiAyLjIyMzg2IDcgMi41IDdIMTEuMjkyOUw4LjE0NjQ1IDMuODUzNTVDNy45NTExOCAzLjY1ODI5IDcuOTUxMTggMy4zNDE3MSA4LjE0NjQ1IDMuMTQ2NDVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx5PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMS4zNTM2IDExLjM1MzZDMTEuNTQ4OCAxMS4xNTgzIDExLjU0ODggMTAuODQxNyAxMS4zNTM2IDEwLjY0NjVMNC43MDcxMSA0TDkgNEM5LjI3NjE0IDQgOS41IDMuNzc2MTQgOS41IDMuNUM5LjUgMy4yMjM4NiA5LjI3NjE0IDMgOSAzTDMuNSAzQzMuMzY3MzkgMyAzLjI0MDIxIDMuMDUyNjggMy4xNDY0NSAzLjE0NjQ1QzMuMDUyNjggMy4yNDAyMiAzIDMuMzY3MzkgMyAzLjVMMyA5LjAwMDAxQzMgOS4yNzYxNSAzLjIyMzg2IDkuNTAwMDEgMy41IDkuNTAwMDFDMy43NzYxNCA5LjUwMDAxIDQgOS4yNzYxNSA0IDkuMDAwMDFWNC43MDcxMUwxMC42NDY0IDExLjM1MzZDMTAuODQxNyAxMS41NDg4IDExLjE1ODMgMTEuNTQ4OCAxMS4zNTM2IDExLjM1MzZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx4PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjY0NjQ1IDExLjM1MzZDMy40NTExOCAxMS4xNTgzIDMuNDUxMTggMTAuODQxNyAzLjY0NjQ1IDEwLjY0NjVMMTAuMjkyOSA0TDYgNEM1LjcyMzg2IDQgNS41IDMuNzc2MTQgNS41IDMuNUM1LjUgMy4yMjM4NiA1LjcyMzg2IDMgNiAzTDExLjUgM0MxMS42MzI2IDMgMTEuNzU5OCAzLjA1MjY4IDExLjg1MzYgMy4xNDY0NUMxMS45NDczIDMuMjQwMjIgMTIgMy4zNjczOSAxMiAzLjVMMTIgOS4wMDAwMUMxMiA5LjI3NjE1IDExLjc3NjEgOS41MDAwMSAxMS41IDkuNTAwMDFDMTEuMjIzOSA5LjUwMDAxIDExIDkuMjc2MTUgMTEgOS4wMDAwMVY0LjcwNzExTDQuMzUzNTUgMTEuMzUzNkM0LjE1ODI5IDExLjU0ODggMy44NDE3MSAxMS41NDg4IDMuNjQ2NDUgMTEuMzUzNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGs9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuMTQ2NDUgMi4xNDY0NUM3LjM0MTcxIDEuOTUxMTggNy42NTgyOSAxLjk1MTE4IDcuODUzNTUgMi4xNDY0NUwxMS44NTM2IDYuMTQ2NDVDMTIuMDQ4OCA2LjM0MTcxIDEyLjA0ODggNi42NTgyOSAxMS44NTM2IDYuODUzNTVDMTEuNjU4MyA3LjA0ODgyIDExLjM0MTcgNy4wNDg4MiAxMS4xNDY0IDYuODUzNTVMOCAzLjcwNzExTDggMTIuNUM4IDEyLjc3NjEgNy43NzYxNCAxMyA3LjUgMTNDNy4yMjM4NiAxMyA3IDEyLjc3NjEgNyAxMi41TDcgMy43MDcxMUwzLjg1MzU1IDYuODUzNTVDMy42NTgyOSA3LjA0ODgyIDMuMzQxNzEgNy4wNDg4MiAzLjE0NjQ1IDYuODUzNTVDMi45NTExOCA2LjY1ODI5IDIuOTUxMTggNi4zNDE3MSAzLjE0NjQ1IDYuMTQ2NDVMNy4xNDY0NSAyLjE0NjQ1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi41IDJIMTIuNUMxMi43NzYxIDIgMTMgMi4yMjM4NiAxMyAyLjVWMTIuNUMxMyAxMi43NzYxIDEyLjc3NjEgMTMgMTIuNSAxM0gyLjVDMi4yMjM4NiAxMyAyIDEyLjc3NjEgMiAxMi41VjIuNUMyIDIuMjIzODYgMi4yMjM4NiAyIDIuNSAyWk0xIDIuNUMxIDEuNjcxNTcgMS42NzE1NyAxIDIuNSAxSDEyLjVDMTMuMzI4NCAxIDE0IDEuNjcxNTcgMTQgMi41VjEyLjVDMTQgMTMuMzI4NCAxMy4zMjg0IDE0IDEyLjUgMTRIMi41QzEuNjcxNTcgMTQgMSAxMy4zMjg0IDEgMTIuNVYyLjVaTTcuNSA0QzcuNzc2MTQgNCA4IDMuNzc2MTQgOCAzLjVDOCAzLjIyMzg2IDcuNzc2MTQgMyA3LjUgM0M3LjIyMzg2IDMgNyAzLjIyMzg2IDcgMy41QzcgMy43NzYxNCA3LjIyMzg2IDQgNy41IDRaTTggNS41QzggNS43NzYxNCA3Ljc3NjE0IDYgNy41IDZDNy4yMjM4NiA2IDcgNS43NzYxNCA3IDUuNUM3IDUuMjIzODYgNy4yMjM4NiA1IDcuNSA1QzcuNzc2MTQgNSA4IDUuMjIzODYgOCA1LjVaTTcuNSA4QzcuNzc2MTQgOCA4IDcuNzc2MTQgOCA3LjVDOCA3LjIyMzg2IDcuNzc2MTQgNyA3LjUgN0M3LjIyMzg2IDcgNyA3LjIyMzg2IDcgNy41QzcgNy43NzYxNCA3LjIyMzg2IDggNy41IDhaTTEwIDcuNUMxMCA3Ljc3NjE0IDkuNzc2MTQgOCA5LjUgOEM5LjIyMzg2IDggOSA3Ljc3NjE0IDkgNy41QzkgNy4yMjM4NiA5LjIyMzg2IDcgOS41IDdDOS43NzYxNCA3IDEwIDcuMjIzODYgMTAgNy41Wk0xMS41IDhDMTEuNzc2MSA4IDEyIDcuNzc2MTQgMTIgNy41QzEyIDcuMjIzODYgMTEuNzc2MSA3IDExLjUgN0MxMS4yMjM5IDcgMTEgNy4yMjM4NiAxMSA3LjVDMTEgNy43NzYxNCAxMS4yMjM5IDggMTEuNSA4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC44NzcwMTQgNy40OTk4OEMwLjg3NzAxNCAzLjg0MjE5IDMuODQyMTYgMC44NzcwNDUgNy40OTk4NSAwLjg3NzA0NUMxMS4xNTc1IDAuODc3MDQ1IDE0LjEyMjcgMy44NDIxOSAxNC4xMjI3IDcuNDk5ODhDMTQuMTIyNyAxMS4xNTc1IDExLjE1NzUgMTQuMTIyNyA3LjQ5OTg1IDE0LjEyMjdDMy44NDIxNiAxNC4xMjI3IDAuODc3MDE0IDExLjE1NzUgMC44NzcwMTQgNy40OTk4OFpNNy40OTk4NSAxLjgyNzA0QzQuMzY2ODMgMS44MjcwNCAxLjgyNzAxIDQuMzY2ODYgMS44MjcwMSA3LjQ5OTg4QzEuODI3MDEgOC45NzE5NiAyLjM4Nzc0IDEwLjMxMzEgMy4zMDcyNyAxMS4zMjEzQzQuMTkwNzQgOS45NDExOSA1LjczODE4IDkuMDI0OTkgNy41MDAyMyA5LjAyNDk5QzkuMjYyMDYgOS4wMjQ5OSAxMC44MDkzIDkuOTQwOTcgMTEuNjkyOSAxMS4zMjA4QzEyLjYxMjEgMTAuMzEyNyAxMy4xNzI3IDguOTcxNzIgMTMuMTcyNyA3LjQ5OTg4QzEzLjE3MjcgNC4zNjY4NiAxMC42MzI4IDEuODI3MDQgNy40OTk4NSAxLjgyNzA0Wk0xMC45ODE4IDExLjk3ODdDMTAuMjgzOSAxMC43Nzk1IDguOTg1NyA5Ljk3NDk5IDcuNTAwMjMgOS45NzQ5OUM2LjAxNDU4IDkuOTc0OTkgNC43MTYyNCAxMC43Nzk3IDQuMDE4NDUgMTEuOTc5MUM0Ljk3OTUyIDEyLjcyNzIgNi4xODc2NSAxMy4xNzI3IDcuNDk5ODUgMTMuMTcyN0M4LjgxMjI3IDEzLjE3MjcgMTAuMDIwNiAxMi43MjcgMTAuOTgxOCAxMS45Nzg3Wk01LjE0OTk5IDYuNTA0ODdDNS4xNDk5OSA1LjIwNyA2LjIwMjEyIDQuMTU0ODcgNy40OTk5OSA0LjE1NDg3QzguNzk3ODYgNC4xNTQ4NyA5Ljg0OTk5IDUuMjA3IDkuODQ5OTkgNi41MDQ4N0M5Ljg0OTk5IDcuODAyNzQgOC43OTc4NiA4Ljg1NDg3IDcuNDk5OTkgOC44NTQ4N0M2LjIwMjEyIDguODU0ODcgNS4xNDk5OSA3LjgwMjc0IDUuMTQ5OTkgNi41MDQ4N1pNNy40OTk5OSA1LjEwNDg3QzYuNzI2NzkgNS4xMDQ4NyA2LjA5OTk5IDUuNzMxNjcgNi4wOTk5OSA2LjUwNDg3QzYuMDk5OTkgNy4yNzgwNyA2LjcyNjc5IDcuOTA0ODcgNy40OTk5OSA3LjkwNDg3QzguMjczMTkgNy45MDQ4NyA4Ljg5OTk5IDcuMjc4MDcgOC44OTk5OSA2LjUwNDg3QzguODk5OTkgNS43MzE2NyA4LjI3MzE5IDUuMTA0ODcgNy40OTk5OSA1LjEwNDg3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNSAxQzUgMC40NDc3MTUgNS40NDc3MiAwIDYgMEg5QzkuNTUyMjggMCAxMCAwLjQ0NzcxNSAxMCAxVjJIMTRDMTQuNTUyMyAyIDE1IDIuNDQ3NzIgMTUgM1Y2QzE1IDYuODg4OCAxNC42MTMxIDcuNjg3MzQgMTQgOC4yMzYwOFYxMS41QzE0IDEyLjMyODQgMTMuMzI4NCAxMyAxMi41IDEzSDIuNUMxLjY3MTU3IDEzIDEgMTIuMzI4NCAxIDExLjVWOC4yMzU5QzAuMzg2OTcgNy42ODcyMSAwIDYuODg4ODMgMCA2VjNDMCAyLjQ0NzcyIDAuNDQ3NzE2IDIgMSAySDVWMVpNOSAxVjJINlYxSDlaTTEgM0g1SDUuNUg5LjVIMTBIMTRWNkMxNCA2LjY1NCAxMy42ODY2IDcuMjM0NjcgMTMuMTk5NyA3LjYwMDRDMTIuODY1NSA3Ljg1MTQ0IDEyLjQ1MDggOCAxMiA4SDhWNy41QzggNy4yMjM4NiA3Ljc3NjE0IDcgNy41IDdDNy4yMjM4NiA3IDcgNy4yMjM4NiA3IDcuNVY4SDNDMi41NDkzIDggMi4xMzQ2IDcuODUxMzMgMS44MDAyOSA3LjYwMDIyQzEuMzEzMzUgNy4yMzQ0NiAxIDYuNjUzOTYgMSA2VjNaTTcgOUgzQzIuNjQ5NjEgOSAyLjMxMjkyIDguOTM5NzIgMiA4LjgyOTA1VjExLjVDMiAxMS43NzYxIDIuMjIzODYgMTIgMi41IDEySDEyLjVDMTIuNzc2MSAxMiAxMyAxMS43NzYxIDEzIDExLjVWOC44MjkxNUMxMi42ODcxIDguOTM5NzggMTIuMzUwNCA5IDEyIDlIOFY5LjVDOCA5Ljc3NjE0IDcuNzc2MTQgMTAgNy41IDEwQzcuMjIzODYgMTAgNyA5Ljc3NjE0IDcgOS41VjlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxMPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjUgNkgxMS41QzEyLjMyODQgNiAxMyA2LjY3MTU3IDEzIDcuNUMxMyA4LjMyODQzIDEyLjMyODQgOSAxMS41IDlIMy41QzIuNjcxNTcgOSAyIDguMzI4NDMgMiA3LjVDMiA2LjY3MTU3IDIuNjcxNTcgNiAzLjUgNlpNMSA3LjVDMSA2LjExOTI5IDIuMTE5MjkgNSAzLjUgNUgxMS41QzEyLjg4MDcgNSAxNCA2LjExOTI5IDE0IDcuNUMxNCA4Ljg4MDcxIDEyLjg4MDcgMTAgMTEuNSAxMEgzLjVDMi4xMTkyOSAxMCAxIDguODgwNzEgMSA3LjVaTTQuNSA3QzQuMjIzODYgNyA0IDcuMjIzODYgNCA3LjVDNCA3Ljc3NjE0IDQuMjIzODYgOCA0LjUgOEgxMC41QzEwLjc3NjEgOCAxMSA3Ljc3NjE0IDExIDcuNUMxMSA3LjIyMzg2IDEwLjc3NjEgNyAxMC41IDdINC41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sXz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTEuNSAxQzExLjc3NjEgMSAxMiAxLjIyMzg2IDEyIDEuNVYxMy41QzEyIDEzLjc3NjEgMTEuNzc2MSAxNCAxMS41IDE0QzExLjIyMzkgMTQgMTEgMTMuNzc2MSAxMSAxMy41VjEuNUMxMSAxLjIyMzg2IDExLjIyMzkgMSAxMS41IDFaTTkuNSAzQzkuNzc2MTQgMyAxMCAzLjIyMzg2IDEwIDMuNVYxMy41QzEwIDEzLjc3NjEgOS43NzYxNCAxNCA5LjUgMTRDOS4yMjM4NiAxNCA5IDEzLjc3NjEgOSAxMy41VjMuNUM5IDMuMjIzODYgOS4yMjM4NiAzIDkuNSAzWk0xMy41IDNDMTMuNzc2MSAzIDE0IDMuMjIzODYgMTQgMy41VjEzLjVDMTQgMTMuNzc2MSAxMy43NzYxIDE0IDEzLjUgMTRDMTMuMjIzOSAxNCAxMyAxMy43NzYxIDEzIDEzLjVWMy41QzEzIDMuMjIzODYgMTMuMjIzOSAzIDEzLjUgM1pNNS41IDRDNS43NzYxNCA0IDYgNC4yMjM4NiA2IDQuNVYxMy41QzYgMTMuNzc2MSA1Ljc3NjE0IDE0IDUuNSAxNEM1LjIyMzg2IDE0IDUgMTMuNzc2MSA1IDEzLjVWNC41QzUgNC4yMjM4NiA1LjIyMzg2IDQgNS41IDRaTTEuNSA1QzEuNzc2MTQgNSAyIDUuMjIzODYgMiA1LjVWMTMuNUMyIDEzLjc3NjEgMS43NzYxNCAxNCAxLjUgMTRDMS4yMjM4NiAxNCAxIDEzLjc3NjEgMSAxMy41VjUuNUMxIDUuMjIzODYgMS4yMjM4NiA1IDEuNSA1Wk03LjUgNUM3Ljc3NjE0IDUgOCA1LjIyMzg2IDggNS41VjEzLjVDOCAxMy43NzYxIDcuNzc2MTQgMTQgNy41IDE0QzcuMjIzODYgMTQgNyAxMy43NzYxIDcgMTMuNVY1LjVDNyA1LjIyMzg2IDcuMjIzODYgNSA3LjUgNVpNMy41IDdDMy43NzYxNCA3IDQgNy4yMjM4NiA0IDcuNVYxMy41QzQgMTMuNzc2MSAzLjc3NjE0IDE0IDMuNSAxNEMzLjIyMzg2IDE0IDMgMTMuNzc2MSAzIDEzLjVWNy41QzMgNy4yMjM4NiAzLjIyMzg2IDcgMy41IDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxQPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk04LjYwMTI0IDEuMjUwODZDOC42MDEyNCAxLjc1NDU5IDguMjYyNzggMi4xNzkyNyA3LjgwMDg3IDIuMzA5ODlDMTAuMTQ1OSAyLjQ2NDcgMTIgNC40MTU4MiAxMiA2Ljc5OTk5VjEwLjI1QzEyIDExLjA1NjMgMTIuMDMyOSAxMS43MDc0IDEyLjcyMzYgMTIuMDUyOEMxMi45MzEgMTIuMTU2NSAxMy4wMzk5IDEyLjM4OTIgMTIuOTg2NiAxMi42MTQ5QzEyLjkzMzMgMTIuODQwNiAxMi43MzE5IDEzIDEyLjUgMTNIOC4xNjE0NEM4LjM2OTA0IDEzLjE4MzIgOC40OTk5NyAxMy40NTEzIDguNDk5OTcgMTMuNzVDOC40OTk5NyAxNC4zMDIzIDguMDUyMjYgMTQuNzUgNy40OTk5NyAxNC43NUM2Ljk0NzY5IDE0Ljc1IDYuNDk5OTcgMTQuMzAyMyA2LjQ5OTk3IDEzLjc1QzYuNDk5OTcgMTMuNDUxMyA2LjYzMDkxIDEzLjE4MzIgNi44Mzg1MSAxM0gyLjQ5OTk5QzIuMjY4MSAxMyAyLjA2NjY0IDEyLjg0MDYgMi4wMTMzNiAxMi42MTQ5QzEuOTYwMDkgMTIuMzg5MiAyLjA2ODk3IDEyLjE1NjUgMi4yNzYzOCAxMi4wNTI4QzIuOTY3MDggMTEuNzA3NCAyLjk5OTk5IDExLjA1NjMgMi45OTk5OSAxMC4yNVY2Ljc5OTk5QzIuOTk5OTkgNC40MTUzNyA0Ljg1NDgxIDIuNDYzOTYgNy4yMDA0MiAyLjMwOThDNi43Mzg2NyAyLjE3OTA4IDYuNDAwMzYgMS43NTQ0OCA2LjQwMDM2IDEuMjUwODZDNi40MDAzNiAwLjY0MzEwNCA2Ljg5MzA0IDAuMTUwNDIxIDcuNTAwOCAwLjE1MDQyMUM4LjEwODU1IDAuMTUwNDIxIDguNjAxMjQgMC42NDMxMDQgOC42MDEyNCAxLjI1MDg2Wk03LjQ5OTk5IDMuMjk5OTlDNS41NjY5OSAzLjI5OTk5IDMuOTk5OTkgNC44NjY5OSAzLjk5OTk5IDYuNzk5OTlWMTAuMjVMNC4wMDAwMiAxMC4zMDA5QzQuMDAwNSAxMC43NDYzIDQuMDAxMjEgMTEuNDA4NCAzLjY5OTI5IDEySDExLjMwMDdDMTAuOTk4OCAxMS40MDg0IDEwLjk5OTUgMTAuNzQ2MyAxMSAxMC4zMDA5TDExIDEwLjI1VjYuNzk5OTlDMTEgNC44NjY5OSA5LjQzMjk5IDMuMjk5OTkgNy40OTk5OSAzLjI5OTk5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sRT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMyA5QzMgNi41IDQuNSA0LjI1IDcuNSAxLjVDMTAuNSA0LjI1IDEyIDYuNSAxMiA5QzEyIDExLjQ4NTMgOS45ODUyOCAxMy41IDcuNSAxMy41QzUuMDE0NzIgMTMuNSAzIDExLjQ4NTMgMyA5Wk0xMC45NTI0IDguMzAzMDdDOS42NzM0NyA3LjgyMTIxIDguMjg3OSA4LjQ2MjA4IDYuOTg5NTYgOS4wNjI1OUM1LjkzMjcgOS41NTE0MiA0LjkzMzY1IDEwLjAxMzUgNC4wOTY5NSA5LjgyMTUzQzQuMDMzNTcgOS41NTgwNCA0IDkuMjgyOTQgNCA5QzQgNy4xMTIwMyA1LjAyNjg2IDUuMjcxOTUgNy41IDIuODczNTdDOS42NjgzNyA0Ljk3NjM5IDEwLjcyNSA2LjY1MDA0IDEwLjk1MjQgOC4zMDMwN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGo9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMgMi41QzMgMi4yMjM4NiAzLjIyMzg2IDIgMy41IDJIMTEuNUMxMS43NzYxIDIgMTIgMi4yMjM4NiAxMiAyLjVWMTMuNUMxMiAxMy42ODE4IDExLjkwMTQgMTMuODQ5MiAxMS43NDI0IDEzLjkzNzNDMTEuNTgzNCAxNC4wMjU0IDExLjM4OTEgMTQuMDIwMyAxMS4yMzUgMTMuOTI0TDcuNSAxMS41ODk2TDMuNzY1IDEzLjkyNEMzLjYxMDg3IDE0LjAyMDMgMy40MTY1OSAxNC4wMjU0IDMuMjU3NjIgMTMuOTM3M0MzLjA5ODY0IDEzLjg0OTIgMyAxMy42ODE4IDMgMTMuNVYyLjVaTTQgM1YxMi41OTc5TDYuOTcgMTAuNzQxNkM3LjI5NDI3IDEwLjUzOSA3LjcwNTczIDEwLjUzOSA4LjAzIDEwLjc0MTZMMTEgMTIuNTk3OVYzSDRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxSPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wLjI1IDFDMC4yNSAwLjU4NTc4NiAwLjU4NTc4NiAwLjI1IDEgMC4yNUgxNEMxNC40MTQyIDAuMjUgMTQuNzUgMC41ODU3ODYgMTQuNzUgMVYxNEMxNC43NSAxNC40MTQyIDE0LjQxNDIgMTQuNzUgMTQgMTQuNzVIMUMwLjU4NTc4NiAxNC43NSAwLjI1IDE0LjQxNDIgMC4yNSAxNFYxWk0xLjc1IDEuNzVWMTMuMjVIMTMuMjVWMS43NUgxLjc1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjNcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI1XCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIzXCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI5XCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMVwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCI5XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIxMVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSkpfSxJPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xIDEzLjI1TDE0IDEzLjI1VjE0Ljc1TDEgMTQuNzVWMTMuMjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjNcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxM1wiLHk6XCIzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTNcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI1XCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI1XCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIzXCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIzXCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI5XCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI5XCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMVwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTFcIix5OlwiMVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiOVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjlcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjExXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTNcIix5OlwiMTFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjNcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjlcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjExXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSl9LFY9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAgNy41QzAgNy4yMjM4NiAwLjIyMzg1OCA3IDAuNSA3SDNDMy4yNzYxNCA3IDMuNSA3LjIyMzg2IDMuNSA3LjVDMy41IDcuNzc2MTQgMy4yNzYxNCA4IDMgOEgwLjVDMC4yMjM4NTggOCAwIDcuNzc2MTQgMCA3LjVaTTUuNzUgNy41QzUuNzUgNy4yMjM4NiA1Ljk3Mzg2IDcgNi4yNSA3SDguNzVDOS4wMjYxNCA3IDkuMjUgNy4yMjM4NiA5LjI1IDcuNUM5LjI1IDcuNzc2MTQgOS4wMjYxNCA4IDguNzUgOEg2LjI1QzUuOTczODYgOCA1Ljc1IDcuNzc2MTQgNS43NSA3LjVaTTEyIDdDMTEuNzIzOSA3IDExLjUgNy4yMjM4NiAxMS41IDcuNUMxMS41IDcuNzc2MTQgMTEuNzIzOSA4IDEyIDhIMTQuNUMxNC43NzYxIDggMTUgNy43NzYxNCAxNSA3LjVDMTUgNy4yMjM4NiAxNC43NzYxIDcgMTQuNSA3SDEyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sSD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS41IDYuNjI1QzEuMDE2NzUgNi42MjUgMC42MjUgNy4wMTY3NSAwLjYyNSA3LjVDMC42MjUgNy45ODMyNSAxLjAxNjc1IDguMzc1IDEuNSA4LjM3NUMxLjk4MzI1IDguMzc1IDIuMzc1IDcuOTgzMjUgMi4zNzUgNy41QzIuMzc1IDcuMDE2NzUgMS45ODMyNSA2LjYyNSAxLjUgNi42MjVaTTUuNSA2LjYyNUM1LjAxNjc1IDYuNjI1IDQuNjI1IDcuMDE2NzUgNC42MjUgNy41QzQuNjI1IDcuOTgzMjUgNS4wMTY3NSA4LjM3NSA1LjUgOC4zNzVDNS45ODMyNSA4LjM3NSA2LjM3NSA3Ljk4MzI1IDYuMzc1IDcuNUM2LjM3NSA3LjAxNjc1IDUuOTgzMjUgNi42MjUgNS41IDYuNjI1Wk05LjUgNi42MjVDOS4wMTY3NSA2LjYyNSA4LjYyNSA3LjAxNjc1IDguNjI1IDcuNUM4LjYyNSA3Ljk4MzI1IDkuMDE2NzUgOC4zNzUgOS41IDguMzc1QzkuOTgzMjUgOC4zNzUgMTAuMzc1IDcuOTgzMjUgMTAuMzc1IDcuNUMxMC4zNzUgNy4wMTY3NSA5Ljk4MzI1IDYuNjI1IDkuNSA2LjYyNVpNMTIuNjI1IDcuNUMxMi42MjUgNy4wMTY3NSAxMy4wMTY4IDYuNjI1IDEzLjUgNi42MjVDMTMuOTgzMiA2LjYyNSAxNC4zNzUgNy4wMTY3NSAxNC4zNzUgNy41QzE0LjM3NSA3Ljk4MzI1IDEzLjk4MzIgOC4zNzUgMTMuNSA4LjM3NUMxMy4wMTY4IDguMzc1IDEyLjYyNSA3Ljk4MzI1IDEyLjYyNSA3LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxBPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjc1IDFMMS43NSAxNEwwLjI0OTk5OSAxNEwwLjI1IDFMMS43NSAxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMFwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgMTAgNylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTBcIix5OlwiMTNcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxMCAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTJcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDEyIDcpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEyXCIseTpcIjEzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgMTIgMTMpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjhcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDggNylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTRcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDE0IDcpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjhcIix5OlwiMTNcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCA4IDEzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxNFwiLHk6XCIxM1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDE0IDEzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCA4IDUpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxNCA1KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjNcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCA4IDMpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjNcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxNCAzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjlcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCA4IDkpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjlcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxNCA5KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjExXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgOCAxMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTRcIix5OlwiMTFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxNCAxMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNlwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgNiA3KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI2XCIseTpcIjEzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgNiAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNFwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgNCA3KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI0XCIseTpcIjEzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgNCAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTBcIix5OlwiMVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDEwIDEpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEyXCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxMiAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCA4IDEpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxNCAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI2XCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCA2IDEpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjRcIix5OlwiMVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDQgMSlcIixmaWxsOm59KSl9LFQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCI1LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjUuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIzLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjMuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCI3LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiMTMuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIxLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjcuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTNcIix5OlwiMTMuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTNcIix5OlwiMS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI1XCIseTpcIjcuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNVwiLHk6XCIxMy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI1XCIseTpcIjEuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiM1wiLHk6XCI3LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjNcIix5OlwiMTMuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiM1wiLHk6XCIxLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjlcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI5XCIseTpcIjEzLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjlcIix5OlwiMS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMVwiLHk6XCI3LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjExXCIseTpcIjEzLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjExXCIseTpcIjEuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCI5LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjkuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIxMS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxM1wiLHk6XCIxMS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjUuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCIzLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjFcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjEzLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjFcIix5OlwiMS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjkuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCIxMS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pKX0sRD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTMuMjUgMUwxMy4yNSAxNEwxNC43NSAxNEwxNC43NSAxTDEzLjI1IDFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCA1IDcpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCA1IDEzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMyA3KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMyAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDcgNylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDEgNylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDcgMTMpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCAxIDEzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgNyA1KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMSA1KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgNyAzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMSAzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgNyA5KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMSA5KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgNyAxMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDEgMTEpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCA5IDcpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCA5IDEzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMTEgNylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDExIDEzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgNSAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMyAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgNyAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMSAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgOSAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMTEgMSlcIixmaWxsOm59KSl9LEI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuMjUgNy41QzEuMjUgNy4yMjM4NiAxLjQ3Mzg2IDcgMS43NSA3SDEzLjI1QzEzLjUyNjEgNyAxMy43NSA3LjIyMzg2IDEzLjc1IDcuNUMxMy43NSA3Ljc3NjE0IDEzLjUyNjEgOCAxMy4yNSA4SDEuNzVDMS40NzM4NiA4IDEuMjUgNy43NzYxNCAxLjI1IDcuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFo9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCI1LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiMy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjcuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIxMy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjEuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTNcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI1XCIseTpcIjcuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiM1wiLHk6XCI3LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjlcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMVwiLHk6XCI3LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiOS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjExLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjFcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMSAxLjQ5OTk0QzEgMS4yMjM4IDEuMjIzODYgMC45OTk5MzkgMS41IDAuOTk5OTM5SDZWMS45OTk5NEgyVjUuOTk5OTRIMVYxLjQ5OTk0Wk0xMyAxLjk5OTk0SDlWMC45OTk5MzlIMTMuNUMxMy43NzYxIDAuOTk5OTM5IDE0IDEuMjIzOCAxNCAxLjQ5OTk0VjUuOTk5OTRIMTNWMS45OTk5NFpNMSAxMy40OTk5VjguOTk5OTRIMlYxMi45OTk5SDZWMTMuOTk5OUgxLjVDMS4yMjM4NiAxMy45OTk5IDEgMTMuNzc2MSAxIDEzLjQ5OTlaTTEzIDEyLjk5OTlWOC45OTk5NEgxNFYxMy40OTk5QzE0IDEzLjc3NjEgMTMuNzc2MSAxMy45OTk5IDEzLjUgMTMuOTk5OUg5LjVWMTIuOTk5OUgxM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LCQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuNSAzQzEuMjIzODYgMyAxIDMuMjIzODYgMSAzLjVDMSAzLjc3NjE0IDEuMjIzODYgNCAxLjUgNEgxMy41QzEzLjc3NjEgNCAxNCAzLjc3NjE0IDE0IDMuNUMxNCAzLjIyMzg2IDEzLjc3NjEgMyAxMy41IDNIMS41Wk0xIDcuNUMxIDcuMjIzODYgMS4yMjM4NiA3IDEuNSA3SDMuNUMzLjc3NjE0IDcgNCA3LjIyMzg2IDQgNy41QzQgNy43NzYxNCAzLjc3NjE0IDggMy41IDhIMS41QzEuMjIzODYgOCAxIDcuNzc2MTQgMSA3LjVaTTEgMTEuNUMxIDExLjIyMzkgMS4yMjM4NiAxMSAxLjUgMTFDMS43NzYxNCAxMSAyIDExLjIyMzkgMiAxMS41QzIgMTEuNzc2MSAxLjc3NjE0IDEyIDEuNSAxMkMxLjIyMzg2IDEyIDEgMTEuNzc2MSAxIDExLjVaTTMgMTEuNUMzIDExLjIyMzkgMy4yMjM4NiAxMSAzLjUgMTFDMy43NzYxNCAxMSA0IDExLjIyMzkgNCAxMS41QzQgMTEuNzc2MSAzLjc3NjE0IDEyIDMuNSAxMkMzLjIyMzg2IDEyIDMgMTEuNzc2MSAzIDExLjVaTTUuNSAxMUM1LjIyMzg2IDExIDUgMTEuMjIzOSA1IDExLjVDNSAxMS43NzYxIDUuMjIzODYgMTIgNS41IDEyQzUuNzc2MTQgMTIgNiAxMS43NzYxIDYgMTEuNUM2IDExLjIyMzkgNS43NzYxNCAxMSA1LjUgMTFaTTcgMTEuNUM3IDExLjIyMzkgNy4yMjM4NiAxMSA3LjUgMTFDNy43NzYxNCAxMSA4IDExLjIyMzkgOCAxMS41QzggMTEuNzc2MSA3Ljc3NjE0IDEyIDcuNSAxMkM3LjIyMzg2IDEyIDcgMTEuNzc2MSA3IDExLjVaTTkuNSAxMUM5LjIyMzg2IDExIDkgMTEuMjIzOSA5IDExLjVDOSAxMS43NzYxIDkuMjIzODYgMTIgOS41IDEyQzkuNzc2MTQgMTIgMTAgMTEuNzc2MSAxMCAxMS41QzEwIDExLjIyMzkgOS43NzYxNCAxMSA5LjUgMTFaTTExIDExLjVDMTEgMTEuMjIzOSAxMS4yMjM5IDExIDExLjUgMTFDMTEuNzc2MSAxMSAxMiAxMS4yMjM5IDEyIDExLjVDMTIgMTEuNzc2MSAxMS43NzYxIDEyIDExLjUgMTJDMTEuMjIzOSAxMiAxMSAxMS43NzYxIDExIDExLjVaTTEzLjUgMTFDMTMuMjIzOSAxMSAxMyAxMS4yMjM5IDEzIDExLjVDMTMgMTEuNzc2MSAxMy4yMjM5IDEyIDEzLjUgMTJDMTMuNzc2MSAxMiAxNCAxMS43NzYxIDE0IDExLjVDMTQgMTEuMjIzOSAxMy43NzYxIDExIDEzLjUgMTFaTTYuNSA3QzYuMjIzODYgNyA2IDcuMjIzODYgNiA3LjVDNiA3Ljc3NjE0IDYuMjIzODYgOCA2LjUgOEg4LjVDOC43NzYxNCA4IDkgNy43NzYxNCA5IDcuNUM5IDcuMjIzODYgOC43NzYxNCA3IDguNSA3SDYuNVpNMTEgNy41QzExIDcuMjIzODYgMTEuMjIzOSA3IDExLjUgN0gxMy41QzEzLjc3NjEgNyAxNCA3LjIyMzg2IDE0IDcuNUMxNCA3Ljc3NjE0IDEzLjc3NjEgOCAxMy41IDhIMTEuNUMxMS4yMjM5IDggMTEgNy43NzYxNCAxMSA3LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxOPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xNCAxLjc1TDEgMS43NUwxIDAuMjQ5OTk5TDE0IDAuMjVMMTQgMS43NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOFwiLHk6XCIxMFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgOCAxMClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMlwiLHk6XCIxMFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMiAxMClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOFwiLHk6XCIxMlwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgOCAxMilcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMlwiLHk6XCIxMlwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMiAxMilcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOFwiLHk6XCI4XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCA4IDgpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjhcIix5OlwiMTRcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDggMTQpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjJcIix5OlwiOFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMiA4KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIyXCIseTpcIjE0XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCAyIDE0KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMFwiLHk6XCI4XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCAxMCA4KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMFwiLHk6XCIxNFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMTAgMTQpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEyXCIseTpcIjhcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDEyIDgpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEyXCIseTpcIjE0XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCAxMiAxNClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNlwiLHk6XCI4XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCA2IDgpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjZcIix5OlwiMTRcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDYgMTQpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjRcIix5OlwiOFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgNCA4KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI0XCIseTpcIjE0XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCA0IDE0KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjZcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDggNilcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMlwiLHk6XCI2XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCAyIDYpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjhcIix5OlwiNFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgOCA0KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIyXCIseTpcIjRcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDIgNClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTRcIix5OlwiMTBcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDE0IDEwKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxNFwiLHk6XCIxMlwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMTQgMTIpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjhcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDE0IDgpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjE0XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCAxNCAxNClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTRcIix5OlwiNlwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMTQgNilcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTRcIix5OlwiNFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMTQgNClcIixmaWxsOm59KSl9LEY9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEyLjUgMkgyLjVDMi4yMjM4NiAyIDIgMi4yMjM4NiAyIDIuNVYxMi41QzIgMTIuNzc2MSAyLjIyMzg2IDEzIDIuNSAxM0gxMi41QzEyLjc3NjEgMTMgMTMgMTIuNzc2MSAxMyAxMi41VjIuNUMxMyAyLjIyMzg2IDEyLjc3NjEgMiAxMi41IDJaTTIuNSAxQzEuNjcxNTcgMSAxIDEuNjcxNTcgMSAyLjVWMTIuNUMxIDEzLjMyODQgMS42NzE1NyAxNCAyLjUgMTRIMTIuNUMxMy4zMjg0IDE0IDE0IDEzLjMyODQgMTQgMTIuNVYyLjVDMTQgMS42NzE1NyAxMy4zMjg0IDEgMTIuNSAxSDIuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFc9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuOTk5OTggMC45OTk5NzZDMS40NDc2OSAwLjk5OTk3NiAwLjk5OTk3NiAxLjQ0NzY5IDAuOTk5OTc2IDEuOTk5OThWMTNDMC45OTk5NzYgMTMuNTUyMyAxLjQ0NzY5IDE0IDEuOTk5OTggMTRIMTNDMTMuNTUyMyAxNCAxNCAxMy41NTIzIDE0IDEzVjEuOTk5OThDMTQgMS40NDc2OSAxMy41NTIzIDAuOTk5OTc2IDEzIDAuOTk5OTc2SDEuOTk5OThaTTEuOTk5OTggMS45OTk5OEwxMyAxLjk5OTk4VjEzSDEuOTk5OThWMS45OTk5OFpNNC40OTk5NiAzLjk5OTk2QzQuMjIzODIgMy45OTk5NiAzLjk5OTk2IDQuMjIzODIgMy45OTk5NiA0LjQ5OTk2VjEwLjVDMy45OTk5NiAxMC43NzYxIDQuMjIzODIgMTEgNC40OTk5NiAxMUgxMC41QzEwLjc3NjEgMTEgMTEgMTAuNzc2MSAxMSAxMC41VjQuNDk5OTZDMTEgNC4yMjM4MiAxMC43NzYxIDMuOTk5OTYgMTAuNSAzLjk5OTk2SDQuNDk5OTZaTTQuOTk5OTYgOS45OTk5NlY0Ljk5OTk2SDkuOTk5OTZWOS45OTk5Nkg0Ljk5OTk2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiA1SDEzQzEzLjU1MjMgNSAxNCA1LjQ0NzcyIDE0IDZWOUMxNCA5LjU1MjI4IDEzLjU1MjMgMTAgMTMgMTBIMkMxLjQ0NzcyIDEwIDEgOS41NTIyOCAxIDlWNkMxIDUuNDQ3NzIgMS40NDc3MiA1IDIgNVpNMCA2QzAgNC44OTU0MyAwLjg5NTQzMSA0IDIgNEgxM0MxNC4xMDQ2IDQgMTUgNC44OTU0MyAxNSA2VjlDMTUgMTAuMTA0NiAxNC4xMDQ2IDExIDEzIDExSDJDMC44OTU0MyAxMSAwIDEwLjEwNDYgMCA5VjZaTTQuNSA2Ljc1QzQuMDg1NzkgNi43NSAzLjc1IDcuMDg1NzkgMy43NSA3LjVDMy43NSA3LjkxNDIxIDQuMDg1NzkgOC4yNSA0LjUgOC4yNUM0LjkxNDIxIDguMjUgNS4yNSA3LjkxNDIxIDUuMjUgNy41QzUuMjUgNy4wODU3OSA0LjkxNDIxIDYuNzUgNC41IDYuNzVaTTYuNzUgNy41QzYuNzUgNy4wODU3OSA3LjA4NTc5IDYuNzUgNy41IDYuNzVDNy45MTQyMSA2Ljc1IDguMjUgNy4wODU3OSA4LjI1IDcuNUM4LjI1IDcuOTE0MjEgNy45MTQyMSA4LjI1IDcuNSA4LjI1QzcuMDg1NzkgOC4yNSA2Ljc1IDcuOTE0MjEgNi43NSA3LjVaTTEwLjUgNi43NUMxMC4wODU4IDYuNzUgOS43NSA3LjA4NTc5IDkuNzUgNy41QzkuNzUgNy45MTQyMSAxMC4wODU4IDguMjUgMTAuNSA4LjI1QzEwLjkxNDIgOC4yNSAxMS4yNSA3LjkxNDIxIDExLjI1IDcuNUMxMS4yNSA3LjA4NTc5IDEwLjkxNDIgNi43NSAxMC41IDYuNzVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx6PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjUgMUM0Ljc3NjE0IDEgNSAxLjIyMzg2IDUgMS41VjJIMTBWMS41QzEwIDEuMjIzODYgMTAuMjIzOSAxIDEwLjUgMUMxMC43NzYxIDEgMTEgMS4yMjM4NiAxMSAxLjVWMkgxMi41QzEzLjMyODQgMiAxNCAyLjY3MTU3IDE0IDMuNVYxMi41QzE0IDEzLjMyODQgMTMuMzI4NCAxNCAxMi41IDE0SDIuNUMxLjY3MTU3IDE0IDEgMTMuMzI4NCAxIDEyLjVWMy41QzEgMi42NzE1NyAxLjY3MTU3IDIgMi41IDJINFYxLjVDNCAxLjIyMzg2IDQuMjIzODYgMSA0LjUgMVpNMTAgM1YzLjVDMTAgMy43NzYxNCAxMC4yMjM5IDQgMTAuNSA0QzEwLjc3NjEgNCAxMSAzLjc3NjE0IDExIDMuNVYzSDEyLjVDMTIuNzc2MSAzIDEzIDMuMjIzODYgMTMgMy41VjVIMlYzLjVDMiAzLjIyMzg2IDIuMjIzODYgMyAyLjUgM0g0VjMuNUM0IDMuNzc2MTQgNC4yMjM4NiA0IDQuNSA0QzQuNzc2MTQgNCA1IDMuNzc2MTQgNSAzLjVWM0gxMFpNMiA2VjEyLjVDMiAxMi43NzYxIDIuMjIzODYgMTMgMi41IDEzSDEyLjVDMTIuNzc2MSAxMyAxMyAxMi43NzYxIDEzIDEyLjVWNkgyWk03IDcuNUM3IDcuMjIzODYgNy4yMjM4NiA3IDcuNSA3QzcuNzc2MTQgNyA4IDcuMjIzODYgOCA3LjVDOCA3Ljc3NjE0IDcuNzc2MTQgOCA3LjUgOEM3LjIyMzg2IDggNyA3Ljc3NjE0IDcgNy41Wk05LjUgN0M5LjIyMzg2IDcgOSA3LjIyMzg2IDkgNy41QzkgNy43NzYxNCA5LjIyMzg2IDggOS41IDhDOS43NzYxNCA4IDEwIDcuNzc2MTQgMTAgNy41QzEwIDcuMjIzODYgOS43NzYxNCA3IDkuNSA3Wk0xMSA3LjVDMTEgNy4yMjM4NiAxMS4yMjM5IDcgMTEuNSA3QzExLjc3NjEgNyAxMiA3LjIyMzg2IDEyIDcuNUMxMiA3Ljc3NjE0IDExLjc3NjEgOCAxMS41IDhDMTEuMjIzOSA4IDExIDcuNzc2MTQgMTEgNy41Wk0xMS41IDlDMTEuMjIzOSA5IDExIDkuMjIzODYgMTEgOS41QzExIDkuNzc2MTQgMTEuMjIzOSAxMCAxMS41IDEwQzExLjc3NjEgMTAgMTIgOS43NzYxNCAxMiA5LjVDMTIgOS4yMjM4NiAxMS43NzYxIDkgMTEuNSA5Wk05IDkuNUM5IDkuMjIzODYgOS4yMjM4NiA5IDkuNSA5QzkuNzc2MTQgOSAxMCA5LjIyMzg2IDEwIDkuNUMxMCA5Ljc3NjE0IDkuNzc2MTQgMTAgOS41IDEwQzkuMjIzODYgMTAgOSA5Ljc3NjE0IDkgOS41Wk03LjUgOUM3LjIyMzg2IDkgNyA5LjIyMzg2IDcgOS41QzcgOS43NzYxNCA3LjIyMzg2IDEwIDcuNSAxMEM3Ljc3NjE0IDEwIDggOS43NzYxNCA4IDkuNUM4IDkuMjIzODYgNy43NzYxNCA5IDcuNSA5Wk01IDkuNUM1IDkuMjIzODYgNS4yMjM4NiA5IDUuNSA5QzUuNzc2MTQgOSA2IDkuMjIzODYgNiA5LjVDNiA5Ljc3NjE0IDUuNzc2MTQgMTAgNS41IDEwQzUuMjIzODYgMTAgNSA5Ljc3NjE0IDUgOS41Wk0zLjUgOUMzLjIyMzg2IDkgMyA5LjIyMzg2IDMgOS41QzMgOS43NzYxNCAzLjIyMzg2IDEwIDMuNSAxMEMzLjc3NjE0IDEwIDQgOS43NzYxNCA0IDkuNUM0IDkuMjIzODYgMy43NzYxNCA5IDMuNSA5Wk0zIDExLjVDMyAxMS4yMjM5IDMuMjIzODYgMTEgMy41IDExQzMuNzc2MTQgMTEgNCAxMS4yMjM5IDQgMTEuNUM0IDExLjc3NjEgMy43NzYxNCAxMiAzLjUgMTJDMy4yMjM4NiAxMiAzIDExLjc3NjEgMyAxMS41Wk01LjUgMTFDNS4yMjM4NiAxMSA1IDExLjIyMzkgNSAxMS41QzUgMTEuNzc2MSA1LjIyMzg2IDEyIDUuNSAxMkM1Ljc3NjE0IDEyIDYgMTEuNzc2MSA2IDExLjVDNiAxMS4yMjM5IDUuNzc2MTQgMTEgNS41IDExWk03IDExLjVDNyAxMS4yMjM5IDcuMjIzODYgMTEgNy41IDExQzcuNzc2MTQgMTEgOCAxMS4yMjM5IDggMTEuNUM4IDExLjc3NjEgNy43NzYxNCAxMiA3LjUgMTJDNy4yMjM4NiAxMiA3IDExLjc3NjEgNyAxMS41Wk05LjUgMTFDOS4yMjM4NiAxMSA5IDExLjIyMzkgOSAxMS41QzkgMTEuNzc2MSA5LjIyMzg2IDEyIDkuNSAxMkM5Ljc3NjE0IDEyIDEwIDExLjc3NjEgMTAgMTEuNUMxMCAxMS4yMjM5IDkuNzc2MTQgMTEgOS41IDExWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sRz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiAzQzEuNDQ3NzIgMyAxIDMuNDQ3NzIgMSA0VjExQzEgMTEuNTUyMyAxLjQ0NzcyIDEyIDIgMTJIMTNDMTMuNTUyMyAxMiAxNCAxMS41NTIzIDE0IDExVjRDMTQgMy40NDc3MiAxMy41NTIzIDMgMTMgM0gyWk0wIDRDMCAyLjg5NTQzIDAuODk1NDMxIDIgMiAySDEzQzE0LjEwNDYgMiAxNSAyLjg5NTQzIDE1IDRWMTFDMTUgMTIuMTA0NiAxNC4xMDQ2IDEzIDEzIDEzSDJDMC44OTU0MzEgMTMgMCAxMi4xMDQ2IDAgMTFWNFpNMiA0LjI1QzIgNC4xMTE5MyAyLjExMTkzIDQgMi4yNSA0SDQuNzVDNC44ODgwNyA0IDUgNC4xMTE5MyA1IDQuMjVWNS43NTQ1NEM1IDUuODkyNjEgNC44ODgwNyA2LjAwNDU0IDQuNzUgNi4wMDQ1NEgyLjI1QzIuMTExOTMgNi4wMDQ1NCAyIDUuODkyNjEgMiA1Ljc1NDU0VjQuMjVaTTEyLjEwMSA3LjU4NDIxQzEyLjEwMSA5LjAyMDczIDEwLjkzNjUgMTAuMTg1MyA5LjQ5OTk4IDEwLjE4NTNDOC4wNjM0NiAxMC4xODUzIDYuODk4OTMgOS4wMjA3MyA2Ljg5ODkzIDcuNTg0MjFDNi44OTg5MyA2LjE0NzY5IDguMDYzNDYgNC45ODMxNSA5LjQ5OTk4IDQuOTgzMTVDMTAuOTM2NSA0Ljk4MzE1IDEyLjEwMSA2LjE0NzY5IDEyLjEwMSA3LjU4NDIxWk0xMy4xMDEgNy41ODQyMUMxMy4xMDEgOS41NzMwMiAxMS40ODg4IDExLjE4NTMgOS40OTk5OCAxMS4xODUzQzcuNTExMTcgMTEuMTg1MyA1Ljg5ODkzIDkuNTczMDIgNS44OTg5MyA3LjU4NDIxQzUuODk4OTMgNS41OTU0IDcuNTExMTcgMy45ODMxNSA5LjQ5OTk4IDMuOTgzMTVDMTEuNDg4OCAzLjk4MzE1IDEzLjEwMSA1LjU5NTQgMTMuMTAxIDcuNTg0MjFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxLPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yIDMuNUMyIDMuMjIzODYgMi4yMjM4NiAzIDIuNSAzSDEyLjVDMTIuNzc2MSAzIDEzIDMuMjIzODYgMTMgMy41VjkuNUMxMyA5Ljc3NjE0IDEyLjc3NjEgMTAgMTIuNSAxMEgyLjVDMi4yMjM4NiAxMCAyIDkuNzc2MTQgMiA5LjVWMy41Wk0yIDEwLjkxNDZDMS40MTc0IDEwLjcwODcgMSAxMC4xNTMxIDEgOS41VjMuNUMxIDIuNjcxNTcgMS42NzE1NyAyIDIuNSAySDEyLjVDMTMuMzI4NCAyIDE0IDIuNjcxNTcgMTQgMy41VjkuNUMxNCAxMC4xNTMxIDEzLjU4MjYgMTAuNzA4NyAxMyAxMC45MTQ2VjExLjVDMTMgMTIuMzI4NCAxMi4zMjg0IDEzIDExLjUgMTNIMy41QzIuNjcxNTcgMTMgMiAxMi4zMjg0IDIgMTEuNVYxMC45MTQ2Wk0xMiAxMVYxMS41QzEyIDExLjc3NjEgMTEuNzc2MSAxMiAxMS41IDEySDMuNUMzLjIyMzg2IDEyIDMgMTEuNzc2MSAzIDExLjVWMTFIMTJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxxPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjUgM0MyLjIyMzg2IDMgMiAzLjIyMzg2IDIgMy41VjkuNUMyIDkuNzc2MTQgMi4yMjM4NiAxMCAyLjUgMTBIMTIuNUMxMi43NzYxIDEwIDEzIDkuNzc2MTQgMTMgOS41VjMuNUMxMyAzLjIyMzg2IDEyLjc3NjEgMyAxMi41IDNIMi41Wk0xIDkuNUMxIDEwLjE1MzEgMS40MTc0IDEwLjcwODcgMiAxMC45MTQ2VjExLjVDMiAxMi4zMjg0IDIuNjcxNTcgMTMgMy41IDEzSDExLjVDMTIuMzI4NCAxMyAxMyAxMi4zMjg0IDEzIDExLjVWMTAuOTE0NkMxMy41ODI2IDEwLjcwODcgMTQgMTAuMTUzMSAxNCA5LjVWMy41QzE0IDIuNjcxNTcgMTMuMzI4NCAyIDEyLjUgMkgyLjVDMS42NzE1NyAyIDEgMi42NzE1NyAxIDMuNVY5LjVaTTEyIDExLjVWMTFIM1YxMS41QzMgMTEuNzc2MSAzLjIyMzg2IDEyIDMuNSAxMkgxMS41QzExLjc3NjEgMTIgMTIgMTEuNzc2MSAxMiAxMS41Wk01LjUgNkM1LjIyMzg2IDYgNSA2LjIyMzg2IDUgNi41QzUgNi43NzYxNCA1LjIyMzg2IDcgNS41IDdIOS41QzkuNzc2MTQgNyAxMCA2Ljc3NjE0IDEwIDYuNUMxMCA2LjIyMzg2IDkuNzc2MTQgNiA5LjUgNkg1LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxZPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yIDMuNUMyIDMuMjIzODYgMi4yMjM4NiAzIDIuNSAzSDEyLjVDMTIuNzc2MSAzIDEzIDMuMjIzODYgMTMgMy41VjkuNUMxMyA5Ljc3NjE0IDEyLjc3NjEgMTAgMTIuNSAxMEgyLjVDMi4yMjM4NiAxMCAyIDkuNzc2MTQgMiA5LjVWMy41Wk0yIDEwLjkxNDZDMS40MTc0IDEwLjcwODcgMSAxMC4xNTMxIDEgOS41VjMuNUMxIDIuNjcxNTcgMS42NzE1NyAyIDIuNSAySDEyLjVDMTMuMzI4NCAyIDE0IDIuNjcxNTcgMTQgMy41VjkuNUMxNCAxMC4xNTMxIDEzLjU4MjYgMTAuNzA4NyAxMyAxMC45MTQ2VjExLjVDMTMgMTIuMzI4NCAxMi4zMjg0IDEzIDExLjUgMTNIMy41QzIuNjcxNTcgMTMgMiAxMi4zMjg0IDIgMTEuNVYxMC45MTQ2Wk0xMiAxMVYxMS41QzEyIDExLjc3NjEgMTEuNzc2MSAxMiAxMS41IDEySDMuNUMzLjIyMzg2IDEyIDMgMTEuNzc2MSAzIDExLjVWMTFIMTJaTTUgNi41QzUgNi4yMjM4NiA1LjIyMzg2IDYgNS41IDZIN1Y0LjVDNyA0LjIyMzg2IDcuMjIzODYgNCA3LjUgNEM3Ljc3NjE0IDQgOCA0LjIyMzg2IDggNC41VjZIOS41QzkuNzc2MTQgNiAxMCA2LjIyMzg2IDEwIDYuNUMxMCA2Ljc3NjE0IDkuNzc2MTQgNyA5LjUgN0g4VjguNUM4IDguNzc2MTQgNy43NzYxNCA5IDcuNSA5QzcuMjIzODYgOSA3IDguNzc2MTQgNyA4LjVWN0g1LjVDNS4yMjM4NiA3IDUgNi43NzYxNCA1IDYuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEo9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuMTgxNzkgNi4xODE4MUM0LjM1NzUzIDYuMDA2MDggNC42NDI0NSA2LjAwNjA4IDQuODE4MTkgNi4xODE4MUw3LjQ5OTk5IDguODYzNjJMMTAuMTgxOCA2LjE4MTgxQzEwLjM1NzUgNi4wMDYwOCAxMC42NDI0IDYuMDA2MDggMTAuODE4MiA2LjE4MTgxQzEwLjk5MzkgNi4zNTc1NSAxMC45OTM5IDYuNjQyNDcgMTAuODE4MiA2LjgxODIxTDcuODE4MTkgOS44MTgyMUM3LjczMzc5IDkuOTAyNiA3LjYxOTM0IDkuOTUwMDEgNy40OTk5OSA5Ljk1MDAxQzcuMzgwNjQgOS45NTAwMSA3LjI2NjE4IDkuOTAyNiA3LjE4MTc5IDkuODE4MjFMNC4xODE3OSA2LjgxODIxQzQuMDA2MDUgNi42NDI0NyA0LjAwNjA1IDYuMzU3NTUgNC4xODE3OSA2LjE4MTgxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sWD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC44MTgwOSA0LjE4MTc5QzguOTkzODMgNC4zNTc1MyA4Ljk5MzgzIDQuNjQyNDUgOC44MTgwOSA0LjgxODE5TDYuMTM2MjkgNy40OTk5OUw4LjgxODA5IDEwLjE4MThDOC45OTM4MyAxMC4zNTc1IDguOTkzODMgMTAuNjQyNCA4LjgxODA5IDEwLjgxODJDOC42NDIzNiAxMC45OTM5IDguMzU3NDMgMTAuOTkzOSA4LjE4MTcgMTAuODE4Mkw1LjE4MTcgNy44MTgxOUM1LjA5NzMxIDcuNzMzNzkgNS4wNDk5IDcuNjE5MzMgNS4wNDk5IDcuNDk5OTlDNS4wNDk5IDcuMzgwNjQgNS4wOTczMSA3LjI2NjE4IDUuMTgxNyA3LjE4MTc5TDguMTgxNyA0LjE4MTc5QzguMzU3NDMgNC4wMDYwNSA4LjY0MjM2IDQuMDA2MDUgOC44MTgwOSA0LjE4MTc5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNi4xODE5NCA0LjE4MTg1QzYuMzU3NjcgNC4wMDYxMSA2LjY0MjYgNC4wMDYxMSA2LjgxODMzIDQuMTgxODVMOS44MTgzMyA3LjE4MTg1QzkuOTAyNzIgNy4yNjYyNCA5Ljk1MDEzIDcuMzgwNyA5Ljk1MDEzIDcuNTAwMDVDOS45NTAxMyA3LjYxOTQgOS45MDI3MiA3LjczMzg2IDkuODE4MzMgNy44MTgyNUw2LjgxODMzIDEwLjgxODJDNi42NDI2IDEwLjk5NCA2LjM1NzY3IDEwLjk5NCA2LjE4MTk0IDEwLjgxODJDNi4wMDYyIDEwLjY0MjUgNi4wMDYyIDEwLjM1NzYgNi4xODE5NCAxMC4xODE5TDguODYzNzQgNy41MDAwNUw2LjE4MTk0IDQuODE4MjVDNi4wMDYyIDQuNjQyNTEgNi4wMDYyIDQuMzU3NTkgNi4xODE5NCA0LjE4MTg1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuOTMxNzkgNS40MzE3OUM0Ljc1NjA1IDUuNjA3NTMgNC43NTYwNSA1Ljg5MjQ1IDQuOTMxNzkgNi4wNjgxOUM1LjEwNzUzIDYuMjQzOTIgNS4zOTI0NSA2LjI0MzkyIDUuNTY4MTkgNi4wNjgxOUw3LjQ5OTk5IDQuMTM2MzhMOS40MzE3OSA2LjA2ODE5QzkuNjA3NTMgNi4yNDM5MiA5Ljg5MjQ1IDYuMjQzOTIgMTAuMDY4MiA2LjA2ODE5QzEwLjI0MzkgNS44OTI0NSAxMC4yNDM5IDUuNjA3NTMgMTAuMDY4MiA1LjQzMTc5TDcuODE4MTkgMy4xODE3OUM3LjczMzc5IDMuMDk3NCA3LjYxOTMzIDMuMDQ5OTkgNy40OTk5OSAzLjA0OTk5QzcuMzgwNjQgMy4wNDk5OSA3LjI2NjE4IDMuMDk3NCA3LjE4MTc5IDMuMTgxNzlMNC45MzE3OSA1LjQzMTc5Wk0xMC4wNjgyIDkuNTY4MTlDMTAuMjQzOSA5LjM5MjQ1IDEwLjI0MzkgOS4xMDc1MyAxMC4wNjgyIDguOTMxNzlDOS44OTI0NSA4Ljc1NjA2IDkuNjA3NTMgOC43NTYwNiA5LjQzMTc5IDguOTMxNzlMNy40OTk5OSAxMC44NjM2TDUuNTY4MTkgOC45MzE3OUM1LjM5MjQ1IDguNzU2MDYgNS4xMDc1MyA4Ljc1NjA2IDQuOTMxNzkgOC45MzE3OUM0Ljc1NjA1IDkuMTA3NTMgNC43NTYwNSA5LjM5MjQ1IDQuOTMxNzkgOS41NjgxOUw3LjE4MTc5IDExLjgxODJDNy4zNTc1MyAxMS45OTM5IDcuNjQyNDUgMTEuOTkzOSA3LjgxODE5IDExLjgxODJMMTAuMDY4MiA5LjU2ODE5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuMTgxNzkgOC44MTgxOUM0LjAwNjA1IDguNjQyNDUgNC4wMDYwNSA4LjM1NzUzIDQuMTgxNzkgOC4xODE3OUw3LjE4MTc5IDUuMTgxNzlDNy4yNjYxOCA1LjA5NzQgNy4zODA2NCA1LjA0OTk5IDcuNDk5OTkgNS4wNDk5OUM3LjYxOTMzIDUuMDQ5OTkgNy43MzM3OSA1LjA5NzQgNy44MTgxOSA1LjE4MTc5TDEwLjgxODIgOC4xODE3OUMxMC45OTM5IDguMzU3NTMgMTAuOTkzOSA4LjY0MjQ1IDEwLjgxODIgOC44MTgxOUMxMC42NDI0IDguOTkzOTIgMTAuMzU3NSA4Ljk5MzkyIDEwLjE4MTggOC44MTgxOUw3LjQ5OTk5IDYuMTM2MzhMNC44MTgxOSA4LjgxODE5QzQuNjQyNDUgOC45OTM5MiA0LjM1NzUzIDguOTkzOTIgNC4xODE3OSA4LjgxODE5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEyLjUgM0wyLjQ5OTk5IDMuMDAwMDJDMS42NzE1NyAzLjAwMDAyIDAuOTk5OTk5IDMuNjcxNTkgMC45OTk5OTkgNC41MDAwMlY5LjUwMDAyQzAuOTk5OTk5IDEwLjMyODQgMS42NzE1NyAxMSAyLjUgMTFINy41MDAwMkM3LjYzMjYzIDExIDcuNzU5ODEgMTEuMDUyNyA3Ljg1MzU4IDExLjE0NjVMOS45OTk5OSAxMy4yOTI5VjExLjVDOS45OTk5OSAxMS4yMjM5IDEwLjIyMzkgMTEgMTAuNSAxMUgxMi41QzEzLjMyODQgMTEgMTQgMTAuMzI4NCAxNCA5LjUwMDAyVjQuNUMxNCAzLjY3MTU3IDEzLjMyODQgMyAxMi41IDNaTTIuNDk5OTkgMi4wMDAwMkwxMi41IDJDMTMuODgwNyAyIDE1IDMuMTE5MjggMTUgNC41VjkuNTAwMDJDMTUgMTAuODgwNyAxMy44ODA3IDEyIDEyLjUgMTJIMTFWMTQuNUMxMSAxNC43MDIyIDEwLjg3ODIgMTQuODg0NSAxMC42OTEzIDE0Ljk2MTlDMTAuNTA0NSAxNS4wMzkzIDEwLjI4OTQgMTQuOTk2NSAxMC4xNDY0IDE0Ljg1MzVMNy4yOTI5MiAxMkgyLjVDMS4xMTkyOSAxMiAwIDEwLjg4MDcgMCA5LjUwMDAyVjQuNTAwMDJDMCAzLjExOTMxIDEuMTE5MjggMi4wMDAwMiAyLjQ5OTk5IDIuMDAwMDJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxyZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTEuNDY2OSAzLjcyNjg0QzExLjc1NTggMy45MTU3NCAxMS44MzY5IDQuMzAzMDggMTEuNjQ4IDQuNTkxOThMNy4zOTc5OSAxMS4wOTJDNy4yOTc4MyAxMS4yNDUyIDcuMTM1NTYgMTEuMzQ2NyA2Ljk1NDAyIDExLjM2OTlDNi43NzI0NyAxMS4zOTMxIDYuNTg5ODkgMTEuMzM1NSA2LjQ1NDQ2IDExLjIxMjRMMy43MDQ0NiA4LjcxMjQxQzMuNDQ5MDUgOC40ODAyMiAzLjQzMDIzIDguMDg0OTQgMy42NjI0MiA3LjgyOTUzQzMuODk0NjEgNy41NzQxMiA0LjI4OTg5IDcuNTU1MjkgNC41NDUzIDcuNzg3NDlMNi43NTI5MiA5Ljc5NDQxTDEwLjYwMTggMy45MDc5MkMxMC43OTA3IDMuNjE5MDIgMTEuMTc4IDMuNTM3OTUgMTEuNDY2OSAzLjcyNjg0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sb2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5OTEgMC44NzcwNDVDMy44NDIyMiAwLjg3NzA0NSAwLjg3NzA3NSAzLjg0MjE5IDAuODc3MDc1IDcuNDk5ODhDMC44NzcwNzUgMTEuMTU3NSAzLjg0MjIyIDE0LjEyMjcgNy40OTk5MSAxNC4xMjI3QzExLjE1NzYgMTQuMTIyNyAxNC4xMjI3IDExLjE1NzUgMTQuMTIyNyA3LjQ5OTg4QzE0LjEyMjcgMy44NDIxOSAxMS4xNTc2IDAuODc3MDQ1IDcuNDk5OTEgMC44NzcwNDVaTTEuODI3MDggNy40OTk4OEMxLjgyNzA4IDQuMzY2ODYgNC4zNjY4OSAxLjgyNzA0IDcuNDk5OTEgMS44MjcwNEMxMC42MzI5IDEuODI3MDQgMTMuMTcyNyA0LjM2Njg2IDEzLjE3MjcgNy40OTk4OEMxMy4xNzI3IDEwLjYzMjkgMTAuNjMyOSAxMy4xNzI3IDcuNDk5OTEgMTMuMTcyN0M0LjM2Njg5IDEzLjE3MjcgMS44MjcwOCAxMC42MzI5IDEuODI3MDggNy40OTk4OFpNMTAuMTU4OSA1LjUzNzc0QzEwLjMxNzggNS4zMTE5MSAxMC4yNjM2IDUuMDAwMDEgMTAuMDM3OCA0Ljg0MTA5QzkuODExOTQgNC42ODIxNyA5LjUwMDA0IDQuNzM2NDIgOS4zNDExMiA0Ljk2MjI1TDYuNTE5NzcgOC45NzE1NEw1LjM1NjgxIDcuNzg3MDZDNS4xNjMzNCA3LjU5MDAyIDQuODQ2NzcgNy41ODcxMSA0LjY0OTczIDcuNzgwNThDNC40NTI2OCA3Ljk3NDA0IDQuNDQ5NzggOC4yOTA2MSA0LjY0MzI1IDguNDg3NjVMNi4yMjY1OCAxMC4xMDAzQzYuMzMwNTQgMTAuMjA2MiA2LjQ3NjE3IDEwLjI2MDQgNi42MjQwNyAxMC4yNDgzQzYuNzcxOTcgMTAuMjM2MyA2LjkwNjg2IDEwLjE1OTEgNi45OTIyNiAxMC4wMzc3TDEwLjE1ODkgNS41Mzc3NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGFlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zIDNIMTJWMTJIM0wzIDNaTTIgM0MyIDIuNDQ3NzEgMi40NDc3MiAyIDMgMkgxMkMxMi41NTIzIDIgMTMgMi40NDc3MiAxMyAzVjEyQzEzIDEyLjU1MjMgMTIuNTUyMyAxMyAxMiAxM0gzQzIuNDQ3NzEgMTMgMiAxMi41NTIzIDIgMTJWM1pNMTAuMzQ5OCA1LjUxMTA1QzEwLjUwNiA1LjI4MzM3IDEwLjQ0ODEgNC45NzIxMiAxMC4yMjA0IDQuODE1ODdDOS45OTI3NSA0LjY1OTYxIDkuNjgxNSA0LjcxNzUxIDkuNTI1MjUgNC45NDUxOUw2LjY0MDQ4IDkuMTQ4NTdMNS4xOTczMyA3LjQwODg5QzUuMDIxMDIgNy4xOTYzNSA0LjcwNTggNy4xNjY5OSA0LjQ5MzI3IDcuMzQzMjlDNC4yODA3MyA3LjUxOTYgNC4yNTEzNyA3LjgzNDgyIDQuNDI3NjcgOC4wNDczNUw2LjI5MzQgMTAuMjk2NEM2LjM5MzQ4IDEwLjQxNzEgNi41NDQzNyAxMC40ODM4IDYuNzAwOTcgMTAuNDc2N0M2Ljg1NzU3IDEwLjQ2OTUgNy4wMDE3NyAxMC4zODk0IDcuMDkwNDcgMTAuMjYwMUwxMC4zNDk4IDUuNTExMDVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxpZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy4xMzUyMyA2LjE1ODAzQzMuMzI0MSA1Ljk1NjU3IDMuNjQwNTIgNS45NDYzNyAzLjg0MTk3IDYuMTM1MjNMNy41IDkuNTY0NjRMMTEuMTU4IDYuMTM1MjNDMTEuMzU5NSA1Ljk0NjM3IDExLjY3NTkgNS45NTY1NyAxMS44NjQ4IDYuMTU4MDNDMTIuMDUzNiA2LjM1OTQ5IDEyLjA0MzQgNi42NzU5MSAxMS44NDIgNi44NjQ3N0w3Ljg0MTk3IDEwLjYxNDhDNy42NDk2NCAxMC43OTUxIDcuMzUwMzYgMTAuNzk1MSA3LjE1ODAzIDEwLjYxNDhMMy4xNTgwMyA2Ljg2NDc3QzIuOTU2NTcgNi42NzU5MSAyLjk0NjM3IDYuMzU5NDkgMy4xMzUyMyA2LjE1ODAzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTguODQxODIgMy4xMzUxNEM5LjA0MzI3IDMuMzI0MDEgOS4wNTM0OCAzLjY0MDQyIDguODY0NjIgMy44NDE4OEw1LjQzNTIxIDcuNDk5OTFMOC44NjQ2MiAxMS4xNTc5QzkuMDUzNDggMTEuMzU5NCA5LjA0MzI3IDExLjY3NTggOC44NDE4MiAxMS44NjQ3QzguNjQwMzYgMTIuMDUzNSA4LjMyMzk0IDEyLjA0MzMgOC4xMzUwOCAxMS44NDE5TDQuMzg1MDggNy44NDE4OEM0LjIwNDc3IDcuNjQ5NTUgNC4yMDQ3NyA3LjM1MDI3IDQuMzg1MDggNy4xNTc5NEw4LjEzNTA4IDMuMTU3OTRDOC4zMjM5NCAyLjk1NjQ4IDguNjQwMzYgMi45NDYyOCA4Ljg0MTgyIDMuMTM1MTRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxzZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNi4xNTg0IDMuMTM1MDhDNi4zNTk4NSAyLjk0NjIxIDYuNjc2MjcgMi45NTY0MiA2Ljg2NTE0IDMuMTU3ODhMMTAuNjE1MSA3LjE1Nzg4QzEwLjc5NTQgNy4zNTAyIDEwLjc5NTQgNy42NDk0OSAxMC42MTUxIDcuODQxODJMNi44NjUxNCAxMS44NDE4QzYuNjc2MjcgMTIuMDQzMyA2LjM1OTg1IDEyLjA1MzUgNi4xNTg0IDExLjg2NDZDNS45NTY5NCAxMS42NzU3IDUuOTQ2NzMgMTEuMzU5MyA2LjEzNTYgMTEuMTU3OUw5LjU2NSA3LjQ5OTg1TDYuMTM1NiAzLjg0MTgyQzUuOTQ2NzMgMy42NDAzNiA1Ljk1Njk0IDMuMzIzOTQgNi4xNTg0IDMuMTM1MDhaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxjZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy4xMzUyMyA4Ljg0MTk3QzMuMzI0MSA5LjA0MzQzIDMuNjQwNTIgOS4wNTM2MyAzLjg0MTk3IDguODY0NzdMNy41IDUuNDM1MzZMMTEuMTU4IDguODY0NzdDMTEuMzU5NSA5LjA1MzYzIDExLjY3NTkgOS4wNDM0MyAxMS44NjQ4IDguODQxOTdDMTIuMDUzNiA4LjY0MDUxIDEyLjA0MzQgOC4zMjQwOSAxMS44NDIgOC4xMzUyM0w3Ljg0MTk3IDQuMzg1MjNDNy42NDk2NCA0LjIwNDkyIDcuMzUwMzYgNC4yMDQ5MiA3LjE1ODAzIDQuMzg1MjNMMy4xNTgwMyA4LjEzNTIzQzIuOTU2NTcgOC4zMjQwOSAyLjk0NjM3IDguNjQwNTEgMy4xMzUyMyA4Ljg0MTk3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuODc3MDc1IDcuNDk5OTFDMC44NzcwNzUgMy44NDIyMiAzLjg0MjIyIDAuODc3MDc1IDcuNDk5OTEgMC44NzcwNzVDMTEuMTU3NiAwLjg3NzA3NSAxNC4xMjI3IDMuODQyMjIgMTQuMTIyNyA3LjQ5OTkxQzE0LjEyMjcgMTEuMTU3NiAxMS4xNTc2IDE0LjEyMjcgNy40OTk5MSAxNC4xMjI3QzMuODQyMjIgMTQuMTIyNyAwLjg3NzA3NSAxMS4xNTc2IDAuODc3MDc1IDcuNDk5OTFaTTcuNDk5OTEgMS44MjcwOEM0LjM2Njg5IDEuODI3MDggMS44MjcwOCA0LjM2Njg5IDEuODI3MDggNy40OTk5MUMxLjgyNzA4IDEwLjYzMjkgNC4zNjY4OSAxMy4xNzI3IDcuNDk5OTEgMTMuMTcyN0MxMC42MzI5IDEzLjE3MjcgMTMuMTcyNyAxMC42MzI5IDEzLjE3MjcgNy40OTk5MUMxMy4xNzI3IDQuMzY2ODkgMTAuNjMyOSAxLjgyNzA4IDcuNDk5OTEgMS44MjcwOFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGRlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTkxIDAuODc3MDc1QzMuODQyMjIgMC44NzcwNzUgMC44NzcwNzUgMy44NDIyMiAwLjg3NzA3NSA3LjQ5OTkxQzAuODc3MDc1IDExLjE1NzYgMy44NDIyMiAxNC4xMjI3IDcuNDk5OTEgMTQuMTIyN0MxMS4xNTc2IDE0LjEyMjcgMTQuMTIyNyAxMS4xNTc2IDE0LjEyMjcgNy40OTk5MUMxNC4xMjI3IDMuODQyMjIgMTEuMTU3NiAwLjg3NzA3NSA3LjQ5OTkxIDAuODc3MDc1Wk0zLjg1NzY4IDMuMTUwNTdDNC44NDMxMSAyLjMyNDQ4IDYuMTEzNDIgMS44MjcwOCA3LjQ5OTkxIDEuODI3MDhDMTAuNjMyOSAxLjgyNzA4IDEzLjE3MjcgNC4zNjY4OSAxMy4xNzI3IDcuNDk5OTFDMTMuMTcyNyA4Ljg4NjM4IDEyLjY3NTMgMTAuMTU2NyAxMS44NDkyIDExLjE0MjFMMy44NTc2OCAzLjE1MDU3Wk0zLjE1MDU3IDMuODU3NjhDMi4zMjQ0OCA0Ljg0MzExIDEuODI3MDggNi4xMTM0MiAxLjgyNzA4IDcuNDk5OTFDMS44MjcwOCAxMC42MzI5IDQuMzY2ODkgMTMuMTcyNyA3LjQ5OTkxIDEzLjE3MjdDOC44ODYzOCAxMy4xNzI3IDEwLjE1NjcgMTIuNjc1MyAxMS4xNDIxIDExLjg0OTJMMy4xNTA1NyAzLjg1NzY4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUgMlYxSDEwVjJINVpNNC43NSAwQzQuMzM1NzkgMCA0IDAuMzM1Nzg2IDQgMC43NVYxSDMuNUMyLjY3MTU3IDEgMiAxLjY3MTU3IDIgMi41VjEyLjVDMiAxMy4zMjg0IDIuNjcxNTcgMTQgMy41IDE0SDExLjVDMTIuMzI4NCAxNCAxMyAxMy4zMjg0IDEzIDEyLjVWMi41QzEzIDEuNjcxNTcgMTIuMzI4NCAxIDExLjUgMUgxMVYwLjc1QzExIDAuMzM1Nzg2IDEwLjY2NDIgMCAxMC4yNSAwSDQuNzVaTTExIDJWMi4yNUMxMSAyLjY2NDIxIDEwLjY2NDIgMyAxMC4yNSAzSDQuNzVDNC4zMzU3OSAzIDQgMi42NjQyMSA0IDIuMjVWMkgzLjVDMy4yMjM4NiAyIDMgMi4yMjM4NiAzIDIuNVYxMi41QzMgMTIuNzc2MSAzLjIyMzg2IDEzIDMuNSAxM0gxMS41QzExLjc3NjEgMTMgMTIgMTIuNzc2MSAxMiAxMi41VjIuNUMxMiAyLjIyMzg2IDExLjc3NjEgMiAxMS41IDJIMTFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxmZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNSAyVjFIMTBWMkg1Wk00Ljc1IDBDNC4zMzU3OSAwIDQgMC4zMzU3ODYgNCAwLjc1VjFIMy41QzIuNjcxNTcgMSAyIDEuNjcxNTcgMiAyLjVWMTIuNUMyIDEzLjMyODQgMi42NzE1NyAxNCAzLjUgMTRIN1YxM0gzLjVDMy4yMjM4NiAxMyAzIDEyLjc3NjEgMyAxMi41VjIuNUMzIDIuMjIzODYgMy4yMjM4NiAyIDMuNSAySDRWMi4yNUM0IDIuNjY0MjEgNC4zMzU3OSAzIDQuNzUgM0gxMC4yNUMxMC42NjQyIDMgMTEgMi42NjQyMSAxMSAyLjI1VjJIMTEuNUMxMS43NzYxIDIgMTIgMi4yMjM4NiAxMiAyLjVWN0gxM1YyLjVDMTMgMS42NzE1NyAxMi4zMjg0IDEgMTEuNSAxSDExVjAuNzVDMTEgMC4zMzU3ODYgMTAuNjY0MiAwIDEwLjI1IDBINC43NVpNOSA4LjVDOSA4Ljc3NjE0IDguNzc2MTQgOSA4LjUgOUM4LjIyMzg2IDkgOCA4Ljc3NjE0IDggOC41QzggOC4yMjM4NiA4LjIyMzg2IDggOC41IDhDOC43NzYxNCA4IDkgOC4yMjM4NiA5IDguNVpNMTAuNSA5QzEwLjc3NjEgOSAxMSA4Ljc3NjE0IDExIDguNUMxMSA4LjIyMzg2IDEwLjc3NjEgOCAxMC41IDhDMTAuMjIzOSA4IDEwIDguMjIzODYgMTAgOC41QzEwIDguNzc2MTQgMTAuMjIzOSA5IDEwLjUgOVpNMTMgOC41QzEzIDguNzc2MTQgMTIuNzc2MSA5IDEyLjUgOUMxMi4yMjM5IDkgMTIgOC43NzYxNCAxMiA4LjVDMTIgOC4yMjM4NiAxMi4yMjM5IDggMTIuNSA4QzEyLjc3NjEgOCAxMyA4LjIyMzg2IDEzIDguNVpNMTQuNSA5QzE0Ljc3NjEgOSAxNSA4Ljc3NjE0IDE1IDguNUMxNSA4LjIyMzg2IDE0Ljc3NjEgOCAxNC41IDhDMTQuMjIzOSA4IDE0IDguMjIzODYgMTQgOC41QzE0IDguNzc2MTQgMTQuMjIzOSA5IDE0LjUgOVpNMTUgMTAuNUMxNSAxMC43NzYxIDE0Ljc3NjEgMTEgMTQuNSAxMUMxNC4yMjM5IDExIDE0IDEwLjc3NjEgMTQgMTAuNUMxNCAxMC4yMjM5IDE0LjIyMzkgMTAgMTQuNSAxMEMxNC43NzYxIDEwIDE1IDEwLjIyMzkgMTUgMTAuNVpNMTQuNSAxM0MxNC43NzYxIDEzIDE1IDEyLjc3NjEgMTUgMTIuNUMxNSAxMi4yMjM5IDE0Ljc3NjEgMTIgMTQuNSAxMkMxNC4yMjM5IDEyIDE0IDEyLjIyMzkgMTQgMTIuNUMxNCAxMi43NzYxIDE0LjIyMzkgMTMgMTQuNSAxM1pNMTQuNSAxNUMxNC43NzYxIDE1IDE1IDE0Ljc3NjEgMTUgMTQuNUMxNSAxNC4yMjM5IDE0Ljc3NjEgMTQgMTQuNSAxNEMxNC4yMjM5IDE0IDE0IDE0LjIyMzkgMTQgMTQuNUMxNCAxNC43NzYxIDE0LjIyMzkgMTUgMTQuNSAxNVpNOC41IDExQzguNzc2MTQgMTEgOSAxMC43NzYxIDkgMTAuNUM5IDEwLjIyMzkgOC43NzYxNCAxMCA4LjUgMTBDOC4yMjM4NiAxMCA4IDEwLjIyMzkgOCAxMC41QzggMTAuNzc2MSA4LjIyMzg2IDExIDguNSAxMVpNOSAxMi41QzkgMTIuNzc2MSA4Ljc3NjE0IDEzIDguNSAxM0M4LjIyMzg2IDEzIDggMTIuNzc2MSA4IDEyLjVDOCAxMi4yMjM5IDguMjIzODYgMTIgOC41IDEyQzguNzc2MTQgMTIgOSAxMi4yMjM5IDkgMTIuNVpNOC41IDE1QzguNzc2MTQgMTUgOSAxNC43NzYxIDkgMTQuNUM5IDE0LjIyMzkgOC43NzYxNCAxNCA4LjUgMTRDOC4yMjM4NiAxNCA4IDE0LjIyMzkgOCAxNC41QzggMTQuNzc2MSA4LjIyMzg2IDE1IDguNSAxNVpNMTEgMTQuNUMxMSAxNC43NzYxIDEwLjc3NjEgMTUgMTAuNSAxNUMxMC4yMjM5IDE1IDEwIDE0Ljc3NjEgMTAgMTQuNUMxMCAxNC4yMjM5IDEwLjIyMzkgMTQgMTAuNSAxNEMxMC43NzYxIDE0IDExIDE0LjIyMzkgMTEgMTQuNVpNMTIuNSAxNUMxMi43NzYxIDE1IDEzIDE0Ljc3NjEgMTMgMTQuNUMxMyAxNC4yMjM5IDEyLjc3NjEgMTQgMTIuNSAxNEMxMi4yMjM5IDE0IDEyIDE0LjIyMzkgMTIgMTQuNUMxMiAxNC43NzYxIDEyLjIyMzkgMTUgMTIuNSAxNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGhlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUwMDA5IDAuODc3MDE0QzMuODQyNDEgMC44NzcwMTQgMC44NzcyNTggMy44NDIxNiAwLjg3NzI1OCA3LjQ5OTg0QzAuODc3MjU4IDExLjE1NzUgMy44NDI0IDE0LjEyMjcgNy41MDAwOSAxNC4xMjI3QzExLjE1NzggMTQuMTIyNyAxNC4xMjI5IDExLjE1NzUgMTQuMTIyOSA3LjQ5OTg0QzE0LjEyMjkgMy44NDIxNiAxMS4xNTc3IDAuODc3MDE0IDcuNTAwMDkgMC44NzcwMTRaTTEuODI3MjYgNy40OTk4NEMxLjgyNzI2IDQuMzY2ODMgNC4zNjcwOCAxLjgyNzAxIDcuNTAwMDkgMS44MjcwMUMxMC42MzMxIDEuODI3MDEgMTMuMTcyOSA0LjM2NjgzIDEzLjE3MjkgNy40OTk4NEMxMy4xNzI5IDEwLjYzMjggMTAuNjMzMSAxMy4xNzI3IDcuNTAwMDkgMTMuMTcyN0M0LjM2NzA4IDEzLjE3MjcgMS44MjcyNiAxMC42MzI4IDEuODI3MjYgNy40OTk4NFpNOCA0LjUwMDAxQzggNC4yMjM4NyA3Ljc3NjE0IDQuMDAwMDEgNy41IDQuMDAwMDFDNy4yMjM4NiA0LjAwMDAxIDcgNC4yMjM4NyA3IDQuNTAwMDFWNy41MDAwMUM3IDcuNjMyNjIgNy4wNTI2OCA3Ljc1OTggNy4xNDY0NSA3Ljg1MzU3TDkuMTQ2NDUgOS44NTM1N0M5LjM0MTcxIDEwLjA0ODggOS42NTgyOSAxMC4wNDg4IDkuODUzNTUgOS44NTM1N0MxMC4wNDg4IDkuNjU4MzEgMTAuMDQ4OCA5LjM0MTcyIDkuODUzNTUgOS4xNDY0Nkw4IDcuMjkyOTFWNC41MDAwMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGdlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk05Ljk2NDI0IDIuNjg1NzFDMTAuMDY2OCAyLjQyOTMxIDkuOTQyMDkgMi4xMzgzMyA5LjY4NTcgMi4wMzU3N0M5LjQyOTMgMS45MzMyMiA5LjEzODMyIDIuMDU3OTIgOS4wMzU3NiAyLjMxNDMyTDUuMDM1NzYgMTIuMzE0M0M0LjkzMzIgMTIuNTcwNyA1LjA1NzkxIDEyLjg2MTcgNS4zMTQzIDEyLjk2NDJDNS41NzA3IDEzLjA2NjggNS44NjE2OCAxMi45NDIxIDUuOTY0MjQgMTIuNjg1N0w5Ljk2NDI0IDIuNjg1NzFaTTMuODUzNTUgNS4xNDY0NkM0LjA0ODgyIDUuMzQxNzIgNC4wNDg4MiA1LjY1ODMgMy44NTM1NSA1Ljg1MzU2TDIuMjA3MTEgNy41MDAwMUwzLjg1MzU1IDkuMTQ2NDZDNC4wNDg4MiA5LjM0MTcyIDQuMDQ4ODIgOS42NTgzIDMuODUzNTUgOS44NTM1NkMzLjY1ODI5IDEwLjA0ODggMy4zNDE3MSAxMC4wNDg4IDMuMTQ2NDUgOS44NTM1NkwxLjE0NjQ1IDcuODUzNTZDMC45NTExODQgNy42NTgzIDAuOTUxMTg0IDcuMzQxNzIgMS4xNDY0NSA3LjE0NjQ2TDMuMTQ2NDUgNS4xNDY0NkMzLjM0MTcxIDQuOTUxMiAzLjY1ODI5IDQuOTUxMiAzLjg1MzU1IDUuMTQ2NDZaTTExLjE0NjQgNS4xNDY0NkMxMS4zNDE3IDQuOTUxMiAxMS42NTgzIDQuOTUxMiAxMS44NTM2IDUuMTQ2NDZMMTMuODUzNiA3LjE0NjQ2QzE0LjA0ODggNy4zNDE3MiAxNC4wNDg4IDcuNjU4MyAxMy44NTM2IDcuODUzNTZMMTEuODUzNiA5Ljg1MzU2QzExLjY1ODMgMTAuMDQ4OCAxMS4zNDE3IDEwLjA0ODggMTEuMTQ2NCA5Ljg1MzU2QzEwLjk1MTIgOS42NTgzIDEwLjk1MTIgOS4zNDE3MiAxMS4xNDY0IDkuMTQ2NDZMMTIuNzkyOSA3LjUwMDAxTDExLjE0NjQgNS44NTM1NkMxMC45NTEyIDUuNjU4MyAxMC45NTEyIDUuMzQxNzIgMTEuMTQ2NCA1LjE0NjQ2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNzExNDQgMC43OTY5MDJDNy41Nzc0MSAwLjczNDM1NyA3LjQyMjU3IDAuNzM0MzU3IDcuMjg4NTUgMC43OTY5MDJMMS4yODg1NSAzLjU5NjlDMS4xMTI1MSAzLjY3OTA1IDAuOTk5OTkzIDMuODU1NzMgMC45OTk5OTMgNC4wNDk5OVYxMC45NUMwLjk5OTk5MyAxMS4xNDQzIDEuMTEyNTEgMTEuMzIwOSAxLjI4ODU1IDExLjQwMzFMNy4yODg1NSAxNC4yMDMxQzcuNDIyNTcgMTQuMjY1NiA3LjU3NzQxIDE0LjI2NTYgNy43MTE0NCAxNC4yMDMxTDEzLjcxMTQgMTEuNDAzMUMxMy44ODc1IDExLjMyMDkgMTQgMTEuMTQ0MyAxNCAxMC45NVY0LjA0OTk5QzE0IDMuODU1NzMgMTMuODg3NSAzLjY3OTA1IDEzLjcxMTQgMy41OTY5TDcuNzExNDQgMC43OTY5MDJaTTcuNDk5OTkgMy4xNTY3NEw1Ljk4MDM5IDIuNTEwOTFMNy40OTk5OSAxLjgwMTc2TDkuMDE5NTkgMi41MTA5MUw3LjQ5OTk5IDMuMTU2NzRaTTcuNjk1NTYgNC4xNjAxOEwxMC4yMzgyIDMuMDc5NThMMTIuMjcxOSA0LjAyODY1TDcuNDk5OTkgNi4wNTY3MUwyLjcyODA4IDQuMDI4NjVMNC43NjE4MSAzLjA3OTU4TDcuMzA0NDIgNC4xNjAxOEM3LjQyOTM5IDQuMjEzMyA3LjU3MDU5IDQuMjEzMyA3LjY5NTU2IDQuMTYwMThaTTcuOTk5OTkgNi45MzA3OEwxMyA0LjgwNTc4VjcuOTI5NjZMMTEuMDgyMSA4LjgxMTlDMTAuNzI3MyA4Ljk3NTA5IDEwLjUgOS4zMjk4OCAxMC41IDkuNzIwMzlWMTEuNzk4Mkw3Ljk5OTk5IDEyLjk2NDlWNi45MzA3OFpNMTEuNSAxMS4zMzE2TDEzIDEwLjYzMTZWOS4wMzAzOUwxMS41IDkuNzIwMzlWMTEuMzMxNlpNNi45OTk5OSA2LjkzMDc4VjEyLjk2NDlMNC41MDIzMSAxMS43OTkzVjkuNzIwMzZDNC41MDIzMSA5LjMyOTg1IDQuMjc0OTkgOC45NzUwNiAzLjkyMDIyIDguODExODdMMS45OTk5OSA3LjkyODU2VjQuODA1NzhMNi45OTk5OSA2LjkzMDc4Wk0xLjk5OTk5IDEwLjYzMTZMMy41MDIzMSAxMS4zMzI2TDMuNTAyMzEgOS43MjAzNkwxLjk5OTk5IDkuMDI5MjlWMTAuNjMxNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LENlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk04LjAwMDEyIDEuNUM4LjAwMDEyIDEuMjIzODYgNy43NzYyNiAxIDcuNTAwMTIgMUM3LjIyMzk4IDEgNy4wMDAxMiAxLjIyMzg2IDcuMDAwMTIgMS41VjEzLjVDNy4wMDAxMiAxMy43NzYxIDcuMjIzOTggMTQgNy41MDAxMiAxNEM3Ljc3NjI2IDE0IDguMDAwMTIgMTMuNzc2MSA4LjAwMDEyIDEzLjVWMS41Wk0zLjMxODEyIDUuODE4QzMuNDkzODYgNS42NDIyNyAzLjQ5Mzg2IDUuMzU3MzQgMy4zMTgxMiA1LjE4MTYxQzMuMTQyMzkgNS4wMDU4NyAyLjg1NzQ2IDUuMDA1ODcgMi42ODE3MyA1LjE4MTYxTDAuNjgxNzI5IDcuMTgxNjFDMC41MDU5OTMgNy4zNTczNCAwLjUwNTk5MyA3LjY0MjI3IDAuNjgxNzI5IDcuODE4TDIuNjgxNzMgOS44MThDMi44NTc0NiA5Ljk5Mzc0IDMuMTQyMzkgOS45OTM3NCAzLjMxODEyIDkuODE4QzMuNDkzODYgOS42NDIyNyAzLjQ5Mzg2IDkuMzU3MzQgMy4zMTgxMiA5LjE4MTYxTDIuMDg2MzIgNy45NDk4SDUuNTAwMTdDNS43NDg3IDcuOTQ5OCA1Ljk1MDE3IDcuNzQ4MzMgNS45NTAxNyA3LjQ5OThDNS45NTAxNyA3LjI1MTI4IDUuNzQ4NyA3LjA0OTggNS41MDAxNyA3LjA0OThIMi4wODYzMkwzLjMxODEyIDUuODE4Wk0xMi4zMTgxIDUuMTgxNjFDMTIuMTQyNCA1LjAwNTg3IDExLjg1NzUgNS4wMDU4NyAxMS42ODE3IDUuMTgxNjFDMTEuNTA2IDUuMzU3MzQgMTEuNTA2IDUuNjQyMjcgMTEuNjgxNyA1LjgxOEwxMi45MTM1IDcuMDQ5OEg5LjUwMDE3QzkuMjUxNjQgNy4wNDk4IDkuMDUwMTcgNy4yNTEyOCA5LjA1MDE3IDcuNDk5OEM5LjA1MDE3IDcuNzQ4MzMgOS4yNTE2NCA3Ljk0OTggOS41MDAxNyA3Ljk0OThIMTIuOTEzNUwxMS42ODE3IDkuMTgxNjFDMTEuNTA2IDkuMzU3MzQgMTEuNTA2IDkuNjQyMjcgMTEuNjgxNyA5LjgxOEMxMS44NTc1IDkuOTkzNzQgMTIuMTQyNCA5Ljk5Mzc0IDEyLjMxODEgOS44MThMMTQuMzE4MSA3LjgxOEMxNC40OTM5IDcuNjQyMjcgMTQuNDkzOSA3LjM1NzM0IDE0LjMxODEgNy4xODE2MUwxMi4zMTgxIDUuMTgxNjFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxtZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi4xNDk5OCAxNFYxSDAuODQ5OTc2VjE0SDIuMTQ5OThaTTYuMTQ5OTggMTRWMUg0Ljg0OTk4VjE0SDYuMTQ5OThaTTEwLjE1IDFWMTRIOC44NDk5OFYxSDEwLjE1Wk0xNC4xNSAxNFYxSDEyLjg1VjE0SDE0LjE1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sd2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTkuOTQ5NjkgNy40OTk4OUM5Ljk0OTY5IDguODUyODggOC44NTI4OCA5Ljk0OTY5IDcuNDk5ODkgOS45NDk2OUM2LjE0NjkxIDkuOTQ5NjkgNS4wNTAxIDguODUyODggNS4wNTAxIDcuNDk5ODlDNS4wNTAxIDYuMTQ2OTEgNi4xNDY5MSA1LjA1MDEgNy40OTk4OSA1LjA1MDFDOC44NTI4OCA1LjA1MDEgOS45NDk2OSA2LjE0NjkxIDkuOTQ5NjkgNy40OTk4OVpNMTAuODYzMiA4QzEwLjYyMTMgOS42NDA1NSA5LjIwNzY0IDEwLjg5OTcgNy40OTk4OSAxMC44OTk3QzUuNzkyMTQgMTAuODk5NyA0LjM3ODQ3IDkuNjQwNTUgNC4xMzY2MiA4SDAuNUMwLjIyMzg1OCA4IDAgNy43NzYxNCAwIDcuNUMwIDcuMjIzODYgMC4yMjM4NTggNyAwLjUgN0g0LjEzNjU5QzQuMzc4MzUgNS4zNTkzNSA1Ljc5MjA2IDQuMTAwMSA3LjQ5OTg5IDQuMTAwMUM5LjIwNzcyIDQuMTAwMSAxMC42MjE0IDUuMzU5MzUgMTAuODYzMiA3SDE0LjVDMTQuNzc2MSA3IDE1IDcuMjIzODYgMTUgNy41QzE1IDcuNzc2MTQgMTQuNzc2MSA4IDE0LjUgOEgxMC44NjMyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sYmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuNjcxMjkgMy4xNDYzNEM0LjQ3NjAzIDMuMzQxNjEgNC40NzYwMyAzLjY1ODE5IDQuNjcxMjkgMy44NTM0NUw3LjE0NjE2IDYuMzI4MzNDNy4zNDE0MiA2LjUyMzU5IDcuNjU4MDEgNi41MjM1OSA3Ljg1MzI3IDYuMzI4MzNMMTAuMzI4MSAzLjg1MzQ1QzEwLjUyMzQgMy42NTgxOSAxMC41MjM0IDMuMzQxNjEgMTAuMzI4MSAzLjE0NjM0TDcuODUzMjcgMC42NzE0NzFDNy42NTgwMSAwLjQ3NjIwOSA3LjM0MTQyIDAuNDc2MjA5IDcuMTQ2MTYgMC42NzE0NzFMNC42NzEyOSAzLjE0NjM0Wk03LjQ5OTcxIDUuMjY3NjZMNS43MzE5NSAzLjQ5OTlMNy40OTk3MSAxLjczMjEzTDkuMjY3NDggMy40OTk5TDcuNDk5NzEgNS4yNjc2NlpNOC42NzEyOSA3LjE0NjM0QzguNDc2MDMgNy4zNDE2MSA4LjQ3NjAzIDcuNjU4MTkgOC42NzEyOSA3Ljg1MzQ1TDExLjE0NjIgMTAuMzI4M0MxMS4zNDE0IDEwLjUyMzYgMTEuNjU4IDEwLjUyMzYgMTEuODUzMyAxMC4zMjgzTDE0LjMyODEgNy44NTM0NUMxNC41MjM0IDcuNjU4MTkgMTQuNTIzNCA3LjM0MTYxIDE0LjMyODEgNy4xNDYzNEwxMS44NTMzIDQuNjcxNDdDMTEuNjU4IDQuNDc2MjEgMTEuMzQxNCA0LjQ3NjIxIDExLjE0NjIgNC42NzE0N0w4LjY3MTI5IDcuMTQ2MzRaTTExLjQ5OTcgOS4yNjc2Nkw5LjczMTk1IDcuNDk5OUwxMS40OTk3IDUuNzMyMTNMMTMuMjY3NSA3LjQ5OTlMMTEuNDk5NyA5LjI2NzY2Wk00LjY3MTI5IDExLjg1MzVDNC40NzYwMyAxMS42NTgyIDQuNDc2MDMgMTEuMzQxNiA0LjY3MTI5IDExLjE0NjNMNy4xNDYxNiA4LjY3MTQ3QzcuMzQxNDIgOC40NzYyMSA3LjY1ODAxIDguNDc2MjEgNy44NTMyNyA4LjY3MTQ3TDEwLjMyODEgMTEuMTQ2M0MxMC41MjM0IDExLjM0MTYgMTAuNTIzNCAxMS42NTgyIDEwLjMyODEgMTEuODUzNUw3Ljg1MzI3IDE0LjMyODNDNy42NTgwMSAxNC41MjM2IDcuMzQxNDIgMTQuNTIzNiA3LjE0NjE2IDE0LjMyODNMNC42NzEyOSAxMS44NTM1Wk01LjczMTk1IDExLjQ5OTlMNy40OTk3MSAxMy4yNjc3TDkuMjY3NDggMTEuNDk5OUw3LjQ5OTcxIDkuNzMyMTNMNS43MzE5NSAxMS40OTk5Wk0wLjY3MTI4OCA3LjE0NjQ5QzAuNDc2MDI2IDcuMzQxNzUgMC40NzYwMjYgNy42NTgzNCAwLjY3MTI4OCA3Ljg1MzZMMy4xNDYxNiAxMC4zMjg1QzMuMzQxNDIgMTAuNTIzNyAzLjY1ODAxIDEwLjUyMzcgMy44NTMyNyAxMC4zMjg1TDYuMzI4MTQgNy44NTM2QzYuNTIzNCA3LjY1ODM0IDYuNTIzNCA3LjM0MTc1IDYuMzI4MTQgNy4xNDY0OUwzLjg1MzI3IDQuNjcxNjJDMy42NTgwMSA0LjQ3NjM2IDMuMzQxNDIgNC40NzYzNiAzLjE0NjE2IDQuNjcxNjJMMC42NzEyODggNy4xNDY0OVpNMy40OTk3MiA5LjI2NzgxTDEuNzMxOTUgNy41MDAwNUwzLjQ5OTcyIDUuNzMyMjhMNS4yNjc0OCA3LjUwMDA1TDMuNDk5NzIgOS4yNjc4MVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHllPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjg3OTM1IDFIMy45SDExLjFIMTEuMTIwN0MxMS41MjMxIDAuOTk5OTk0IDExLjg1NTMgMC45OTk5ODkgMTIuMTI1OSAxLjAyMjFDMTIuNDA3IDEuMDQ1MDYgMTIuNjY1MyAxLjA5NDM0IDEyLjkwOCAxLjIxNzk5QzEzLjI4NDMgMS40MDk3MyAxMy41OTAzIDEuNzE1NyAxMy43ODIgMi4wOTIwMkMxMy45MDU3IDIuMzM0NjkgMTMuOTU0OSAyLjU5MzA0IDEzLjk3NzkgMi44NzQwOUMxNCAzLjE0NDY4IDE0IDMuNDc2ODYgMTQgMy44NzkzNFYzLjlWMTEuMVYxMS4xMjA3QzE0IDExLjUyMzEgMTQgMTEuODU1MyAxMy45Nzc5IDEyLjEyNTlDMTMuOTU0OSAxMi40MDcgMTMuOTA1NyAxMi42NjUzIDEzLjc4MiAxMi45MDhDMTMuNTkwMyAxMy4yODQzIDEzLjI4NDMgMTMuNTkwMyAxMi45MDggMTMuNzgyQzEyLjY2NTMgMTMuOTA1NyAxMi40MDcgMTMuOTU0OSAxMi4xMjU5IDEzLjk3NzlDMTEuODU1MyAxNCAxMS41MjMxIDE0IDExLjEyMDcgMTRIMTEuMUgzLjlIMy44NzkzNEMzLjQ3Njg2IDE0IDMuMTQ0NjggMTQgMi44NzQwOSAxMy45Nzc5QzIuNTkzMDQgMTMuOTU0OSAyLjMzNDY5IDEzLjkwNTcgMi4wOTIwMiAxMy43ODJDMS43MTU3IDEzLjU5MDMgMS40MDk3MyAxMy4yODQzIDEuMjE3OTkgMTIuOTA4QzEuMDk0MzQgMTIuNjY1MyAxLjA0NTA2IDEyLjQwNyAxLjAyMjEgMTIuMTI1OUMwLjk5OTk4OSAxMS44NTUzIDAuOTk5OTk0IDExLjUyMzEgMSAxMS4xMjA3VjExLjEyMDdWMTEuMVYzLjlWMy44NzkzNVYzLjg3OTM0QzAuOTk5OTk0IDMuNDc2ODYgMC45OTk5ODkgMy4xNDQ2OCAxLjAyMjEgMi44NzQwOUMxLjA0NTA2IDIuNTkzMDQgMS4wOTQzNCAyLjMzNDY5IDEuMjE3OTkgMi4wOTIwMkMxLjQwOTczIDEuNzE1NyAxLjcxNTcgMS40MDk3MyAyLjA5MjAyIDEuMjE3OTlDMi4zMzQ2OSAxLjA5NDM0IDIuNTkzMDQgMS4wNDUwNiAyLjg3NDA5IDEuMDIyMUMzLjE0NDY5IDAuOTk5OTg5IDMuNDc2ODcgMC45OTk5OTQgMy44NzkzNSAxWk0yLjk1NTUyIDIuMDE4NzhDMi43MzYzMSAyLjAzNjY5IDIuNjI0MjEgMi4wNjkxNSAyLjU0NjAxIDIuMTA4OTlDMi4zNTc4NSAyLjIwNDg3IDIuMjA0ODcgMi4zNTc4NSAyLjEwODk5IDIuNTQ2MDFDMi4wNjkxNSAyLjYyNDIxIDIuMDM2NjkgMi43MzYzMSAyLjAxODc4IDIuOTU1NTJDMi4wMDAzOSAzLjE4MDU2IDIgMy40NzE3MSAyIDMuOVY3SDdWMkgzLjlDMy40NzE3MSAyIDMuMTgwNTYgMi4wMDAzOSAyLjk1NTUyIDIuMDE4NzhaTTcgOEgyVjExLjFDMiAxMS41MjgzIDIuMDAwMzkgMTEuODE5NCAyLjAxODc4IDEyLjA0NDVDMi4wMzY2OSAxMi4yNjM3IDIuMDY5MTUgMTIuMzc1OCAyLjEwODk5IDEyLjQ1NEMyLjIwNDg3IDEyLjY0MjIgMi4zNTc4NSAxMi43OTUxIDIuNTQ2MDEgMTIuODkxQzIuNjI0MjEgMTIuOTMwOSAyLjczNjMxIDEyLjk2MzMgMi45NTU1MiAxMi45ODEyQzMuMTgwNTYgMTIuOTk5NiAzLjQ3MTcxIDEzIDMuOSAxM0g3VjhaTTggOEgxM1YxMS4xQzEzIDExLjUyODMgMTIuOTk5NiAxMS44MTk0IDEyLjk4MTIgMTIuMDQ0NUMxMi45NjMzIDEyLjI2MzcgMTIuOTMwOSAxMi4zNzU4IDEyLjg5MSAxMi40NTRDMTIuNzk1MSAxMi42NDIyIDEyLjY0MjIgMTIuNzk1MSAxMi40NTQgMTIuODkxQzEyLjM3NTggMTIuOTMwOSAxMi4yNjM3IDEyLjk2MzMgMTIuMDQ0NSAxMi45ODEyQzExLjgxOTQgMTIuOTk5NiAxMS41MjgzIDEzIDExLjEgMTNIOFY4Wk0xMyA3SDhWMkgxMS4xQzExLjUyODMgMiAxMS44MTk0IDIuMDAwMzkgMTIuMDQ0NSAyLjAxODc4QzEyLjI2MzcgMi4wMzY2OSAxMi4zNzU4IDIuMDY5MTUgMTIuNDU0IDIuMTA4OTlDMTIuNjQyMiAyLjIwNDg3IDEyLjc5NTEgMi4zNTc4NSAxMi44OTEgMi41NDYwMUMxMi45MzA5IDIuNjI0MjEgMTIuOTYzMyAyLjczNjMxIDEyLjk4MTIgMi45NTU1MkMxMi45OTk2IDMuMTgwNTYgMTMgMy40NzE3MSAxMyAzLjlWN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHhlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03Ljg1MzY3IDEuNDg5NTZDNy42NTg0MSAxLjI5NDI5IDcuMzQxODIgMS4yOTQyOSA3LjE0NjU2IDEuNDg5NTZMMS40ODk3MSA3LjE0NjQxQzEuMjk0NDUgNy4zNDE2NyAxLjI5NDQ1IDcuNjU4MjUgMS40ODk3MSA3Ljg1MzUyTDcuMTQ2NTYgMTMuNTEwNEM3LjM0MTgyIDEzLjcwNTYgNy42NTg0MSAxMy43MDU2IDcuODUzNjcgMTMuNTEwNEwxMy41MTA1IDcuODUzNTJDMTMuNzA1OCA3LjY1ODI1IDEzLjcwNTggNy4zNDE2NyAxMy41MTA1IDcuMTQ2NDFMNy44NTM2NyAxLjQ4OTU2Wk03LjUgMi41NTAzM0wyLjU1MDM3IDcuNDk5OTZMNy41IDEyLjQ0OTZWMi41NTAzM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGtlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjE0NjUgMS40ODk1OUM3LjM0MTc2IDEuMjk0MzIgNy42NTgzNSAxLjI5NDMyIDcuODUzNjEgMS40ODk1OUwxMy41MTA1IDcuMTQ2NDRDMTMuNzA1NyA3LjM0MTcgMTMuNzA1NyA3LjY1ODI5IDEzLjUxMDUgNy44NTM1NUw3Ljg1MzYxIDEzLjUxMDRDNy42NTgzNSAxMy43MDU3IDcuMzQxNzYgMTMuNzA1NyA3LjE0NjUgMTMuNTEwNEwxLjQ4OTY1IDcuODUzNTVDMS4yOTQzOSA3LjY1ODI5IDEuMjk0MzkgNy4zNDE3IDEuNDg5NjUgNy4xNDY0NEw3LjE0NjUgMS40ODk1OVpNNy41MDAwNSAyLjU1MDI1TDIuNTUwMzEgNy40OTk5OUw3LjUwMDA1IDEyLjQ0OTdMMTIuNDQ5OCA3LjQ5OTk5TDcuNTAwMDUgMi41NTAyNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFNlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03Ljg1MzYxIDEuNDg5NTlDNy42NTgzNSAxLjI5NDMyIDcuMzQxNzYgMS4yOTQzMiA3LjE0NjUgMS40ODk1OUwxLjQ4OTY1IDcuMTQ2NDRDMS4yOTQzOSA3LjM0MTcgMS4yOTQzOSA3LjY1ODI5IDEuNDg5NjUgNy44NTM1NUwzLjk2NDUgMTAuMzI4NEwxLjY0NjQ0IDEyLjY0NjRDMS40NTExOCAxMi44NDE3IDEuNDUxMTggMTMuMTU4MyAxLjY0NjQ0IDEzLjM1MzZDMS44NDE3MSAxMy41NDg4IDIuMTU4MjkgMTMuNTQ4OCAyLjM1MzU1IDEzLjM1MzZMNC42NzE2IDExLjAzNTVMNy4xNDY1IDEzLjUxMDRDNy4zNDE3NiAxMy43MDU3IDcuNjU4MzUgMTMuNzA1NyA3Ljg1MzYxIDEzLjUxMDRMMTMuNTEwNSA3Ljg1MzU1QzEzLjcwNTcgNy42NTgyOSAxMy43MDU3IDcuMzQxNyAxMy41MTA1IDcuMTQ2NDRMMTEuMDM1NiA0LjY3MTU0TDEzLjM1MzUgMi4zNTM1NUMxMy41NDg4IDIuMTU4MjkgMTMuNTQ4OCAxLjg0MTcxIDEzLjM1MzUgMS42NDY0NUMxMy4xNTgzIDEuNDUxMTggMTIuODQxNyAxLjQ1MTE4IDEyLjY0NjQgMS42NDY0NUwxMC4zMjg1IDMuOTY0NDNMNy44NTM2MSAxLjQ4OTU5Wk05LjYyMTM1IDQuNjcxNTRMNy41MDAwNSAyLjU1MDI1TDIuNTUwMzEgNy40OTk5OUw0LjY3MTYgOS42MjEyOUw5LjYyMTM1IDQuNjcxNTRaTTUuMzc4NzEgMTAuMzI4NEw3LjUwMDA1IDEyLjQ0OTdMMTIuNDQ5OCA3LjQ5OTk5TDEwLjMyODUgNS4zNzg2NUw1LjM3ODcxIDEwLjMyODRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxPZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTIuODAzNCA3LjE0NjQ0QzEyLjk5ODYgNi45NTExOCAxMy4zMTUyIDYuOTUxMTggMTMuNTEwNSA3LjE0NjQ0QzEzLjcwNTcgNy4zNDE3IDEzLjcwNTcgNy42NTgyOSAxMy41MTA1IDcuODUzNTVDMTMuMzE1MiA4LjA0ODgxIDEyLjk5ODYgOC4wNDg4MSAxMi44MDM0IDcuODUzNTVDMTIuNjA4MSA3LjY1ODI4IDEyLjYwODEgNy4zNDE3IDEyLjgwMzQgNy4xNDY0NFpNMTIuMDk2MiA4LjU2MDY1QzEyLjI5MTUgOC43NTU5MiAxMi4yOTE1IDkuMDcyNSAxMi4wOTYyIDkuMjY3NzZDMTEuOTAxIDkuNDYzMDIgMTEuNTg0NCA5LjQ2MzAyIDExLjM4OTEgOS4yNjc3NkMxMS4xOTM5IDkuMDcyNSAxMS4xOTM5IDguNzU1OTIgMTEuMzg5MSA4LjU2MDY1QzExLjU4NDQgOC4zNjUzOSAxMS45MDEgOC4zNjUzOSAxMi4wOTYyIDguNTYwNjVaTTEwLjY4MiA5Ljk3NDg3QzEwLjg3NzMgMTAuMTcwMSAxMC44NzczIDEwLjQ4NjcgMTAuNjgyIDEwLjY4MkMxMC40ODY4IDEwLjg3NzIgMTAuMTcwMiAxMC44NzcyIDkuOTc0OTMgMTAuNjgyQzkuNzc5NjcgMTAuNDg2NyA5Ljc3OTY3IDEwLjE3MDEgOS45NzQ5MyA5Ljk3NDg3QzEwLjE3MDIgOS43Nzk2IDEwLjQ4NjggOS43Nzk2IDEwLjY4MiA5Ljk3NDg3Wk05LjI2NzgyIDExLjM4OTFDOS40NjMwOCAxMS41ODQzIDkuNDYzMDggMTEuOTAwOSA5LjI2NzgyIDEyLjA5NjJDOS4wNzI1NiAxMi4yOTE1IDguNzU1OTggMTIuMjkxNSA4LjU2MDcxIDEyLjA5NjJDOC4zNjU0NSAxMS45MDA5IDguMzY1NDUgMTEuNTg0MyA4LjU2MDcyIDExLjM4OTFDOC43NTU5OCAxMS4xOTM4IDkuMDcyNTYgMTEuMTkzOCA5LjI2NzgyIDExLjM4OTFaTTcuMTQ2NSAxMy41MTA0QzYuOTUxMjQgMTMuMzE1MSA2Ljk1MTI0IDEyLjk5ODYgNy4xNDY1IDEyLjgwMzNDNy4xNzA5MSAxMi43Nzg5IDcuMTk3MjEgMTIuNzU3NSA3LjIyNDk0IDEyLjczOTJDNy40MTkwMSAxMi42MTExIDcuNjgyNzUgMTIuNjMyNCA3Ljg1MzYxIDEyLjgwMzNDOC4wNDg4NyAxMi45OTg2IDguMDQ4ODcgMTMuMzE1MSA3Ljg1MzYxIDEzLjUxMDRDNy42NTgzNSAxMy43MDU3IDcuMzQxNzYgMTMuNzA1NyA3LjE0NjUgMTMuNTEwNFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuOTAzODYgOC41NjA2NUMyLjcwODYgOC43NTU5MiAyLjcwODYgOS4wNzI1IDIuOTAzODYgOS4yNjc3NiAzLjA5OTEyIDkuNDYzMDIgMy40MTU3MSA5LjQ2MzAyIDMuNjEwOTcgOS4yNjc3NiAzLjgwNjIzIDkuMDcyNSAzLjgwNjIzIDguNzU1OTIgMy42MTA5NyA4LjU2MDY1IDMuNDE1NzEgOC4zNjUzOSAzLjA5OTEyIDguMzY1MzkgMi45MDM4NiA4LjU2MDY1ek00LjMxODA3IDkuOTc0ODdDNC4xMjI4MSAxMC4xNzAxIDQuMTIyODEgMTAuNDg2NyA0LjMxODA3IDEwLjY4MiA0LjUxMzM0IDEwLjg3NzIgNC44Mjk5MiAxMC44NzcyIDUuMDI1MTggMTAuNjgyIDUuMjIwNDQgMTAuNDg2NyA1LjIyMDQ0IDEwLjE3MDEgNS4wMjUxOCA5Ljk3NDg3IDQuODI5OTIgOS43Nzk2IDQuNTEzMzQgOS43Nzk2IDQuMzE4MDcgOS45NzQ4N3pNNS43MzIyOSAxMS4zODkxQzUuNTM3MDMgMTEuNTg0MyA1LjUzNzAzIDExLjkwMDkgNS43MzIyOSAxMi4wOTYyIDUuOTI3NTUgMTIuMjkxNCA2LjI0NDEzIDEyLjI5MTUgNi40MzkzOSAxMi4wOTYyIDYuNjM0NjYgMTEuOTAwOSA2LjYzNDY2IDExLjU4NDMgNi40MzkzOSAxMS4zODkxIDYuMjQ0MTMgMTEuMTkzOCA1LjkyNzU1IDExLjE5MzggNS43MzIyOSAxMS4zODkxek0yLjE5Njc1IDcuODUzNTVDMi4zNjc2MSA3LjY4MjY5IDIuMzg4OTcgNy40MTg5NSAyLjI2MDgyIDcuMjI0ODggMi4wOTA0NiA2Ljk2Njg0IDEuNzEwNjMgNi45MjU0NiAxLjQ4OTY1IDcuMTQ2NDQgMS4yOTQzOSA3LjM0MTcgMS4yOTQzOSA3LjY1ODI5IDEuNDg5NjUgNy44NTM1NSAxLjY4NDkxIDguMDQ4ODEgMi4wMDE0OSA4LjA0ODgxIDIuMTk2NzUgNy44NTM1NXpNMy42MTA5NyA1LjczMjIzQzMuNDE1NzEgNS41MzY5NiAzLjA5OTEyIDUuNTM2OTYgMi45MDM4NiA1LjczMjIzIDIuNzA4NiA1LjkyNzQ5IDIuNzA4NiA2LjI0NDA3IDIuOTAzODYgNi40MzkzMyAzLjA5OTEyIDYuNjM0NiAzLjQxNTcxIDYuNjM0NiAzLjYxMDk3IDYuNDM5MzMgMy44MDYyMyA2LjI0NDA3IDMuODA2MjMgNS45Mjc0OSAzLjYxMDk3IDUuNzMyMjN6TTUuMDI1MTggNC4zMTgwMUM0LjgyOTkyIDQuMTIyNzUgNC41MTMzNCA0LjEyMjc1IDQuMzE4MDcgNC4zMTgwMSA0LjEyMjgxIDQuNTEzMjggNC4xMjI4MSA0LjgyOTg2IDQuMzE4MDcgNS4wMjUxMiA0LjUxMzM0IDUuMjIwMzggNC44Mjk5MiA1LjIyMDM4IDUuMDI1MTggNS4wMjUxMiA1LjIyMDQ0IDQuODI5ODYgNS4yMjA0NCA0LjUxMzI4IDUuMDI1MTggNC4zMTgwMXpNNi40MzkzOSAyLjkwMzhDNi4yNDQxMyAyLjcwODU0IDUuOTI3NTUgMi43MDg1NCA1LjczMjI5IDIuOTAzOCA1LjUzNzAzIDMuMDk5MDYgNS41MzcwMyAzLjQxNTY0IDUuNzMyMjkgMy42MTA5MSA1LjkyNzU1IDMuODA2MTcgNi4yNDQxMyAzLjgwNjE3IDYuNDM5MzkgMy42MTA5MSA2LjYzNDY2IDMuNDE1NjQgNi42MzQ2NiAzLjA5OTA2IDYuNDM5MzkgMi45MDM4ek03Ljg1MzYxIDEuNDg5NTlDNy42NTgzNSAxLjI5NDMyIDcuMzQxNzYgMS4yOTQzMiA3LjE0NjUgMS40ODk1OSA2Ljk1MTI0IDEuNjg0ODUgNi45NTEyNCAyLjAwMTQzIDcuMTQ2NSAyLjE5NjY5IDcuMzQxNzYgMi4zOTE5NiA3LjY1ODM1IDIuMzkxOTYgNy44NTM2MSAyLjE5NjY5IDguMDQ4ODcgMi4wMDE0MyA4LjA0ODg3IDEuNjg0ODUgNy44NTM2MSAxLjQ4OTU5ek05LjI2NzgyIDIuOTAzOEM5LjA3MjU2IDIuNzA4NTQgOC43NTU5OCAyLjcwODU0IDguNTYwNzEgMi45MDM4IDguMzY1NDUgMy4wOTkwNiA4LjM2NTQ1IDMuNDE1NjQgOC41NjA3MSAzLjYxMDkxIDguNzU1OTggMy44MDYxNyA5LjA3MjU2IDMuODA2MTcgOS4yNjc4MiAzLjYxMDkxIDkuNDYzMDggMy40MTU2NCA5LjQ2MzA4IDMuMDk5MDYgOS4yNjc4MiAyLjkwMzh6TTEwLjY4MiA0LjMxODAxQzEwLjQ4NjggNC4xMjI3NSAxMC4xNzAyIDQuMTIyNzUgOS45NzQ5MyA0LjMxODAxIDkuNzc5NjcgNC41MTMyOCA5Ljc3OTY3IDQuODI5ODYgOS45NzQ5MyA1LjAyNTEyIDEwLjE3MDIgNS4yMjAzOCAxMC40ODY4IDUuMjIwMzggMTAuNjgyIDUuMDI1MTIgMTAuODc3MyA0LjgyOTg2IDEwLjg3NzMgNC41MTMyOCAxMC42ODIgNC4zMTgwMXpNMTIuMDk2MiA1LjczMjIzQzExLjkwMSA1LjUzNjk2IDExLjU4NDQgNS41MzY5NiAxMS4zODkxIDUuNzMyMjMgMTEuMTkzOSA1LjkyNzQ5IDExLjE5MzkgNi4yNDQwNyAxMS4zODkxIDYuNDM5MzMgMTEuNTg0NCA2LjYzNDYgMTEuOTAxIDYuNjM0NiAxMi4wOTYyIDYuNDM5MzMgMTIuMjkxNSA2LjI0NDA3IDEyLjI5MTUgNS45Mjc0OSAxMi4wOTYyIDUuNzMyMjN6XCIsZmlsbDpufSkpfSxNZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiAxLjVDMiAxLjc3NjE0IDEuNzc2MTQgMiAxLjUgMkMxLjIyMzg2IDIgMSAxLjc3NjE0IDEgMS41QzEgMS4yMjM4NiAxLjIyMzg2IDEgMS41IDFDMS43NzYxNCAxIDIgMS4yMjM4NiAyIDEuNVpNNSAxM0gxMFYyTDUgMkw1IDEzWk00IDEzQzQgMTMuNTUyMyA0LjQ0NzcyIDE0IDUgMTRIMTBDMTAuNTUyMyAxNCAxMSAxMy41NTIzIDExIDEzVjJDMTEgMS40NDc3MiAxMC41NTIzIDEgMTAgMUg1QzQuNDQ3NzIgMSA0IDEuNDQ3NzEgNCAyVjEzWk0xMy41IDJDMTMuNzc2MSAyIDE0IDEuNzc2MTQgMTQgMS41QzE0IDEuMjIzODYgMTMuNzc2MSAxIDEzLjUgMUMxMy4yMjM5IDEgMTMgMS4yMjM4NiAxMyAxLjVDMTMgMS43NzYxNCAxMy4yMjM5IDIgMTMuNSAyWk0yIDMuNUMyIDMuNzc2MTQgMS43NzYxNCA0IDEuNSA0QzEuMjIzODYgNCAxIDMuNzc2MTQgMSAzLjVDMSAzLjIyMzg2IDEuMjIzODYgMyAxLjUgM0MxLjc3NjE0IDMgMiAzLjIyMzg2IDIgMy41Wk0xMy41IDRDMTMuNzc2MSA0IDE0IDMuNzc2MTQgMTQgMy41QzE0IDMuMjIzODYgMTMuNzc2MSAzIDEzLjUgM0MxMy4yMjM5IDMgMTMgMy4yMjM4NiAxMyAzLjVDMTMgMy43NzYxNCAxMy4yMjM5IDQgMTMuNSA0Wk0yIDUuNUMyIDUuNzc2MTQgMS43NzYxNCA2IDEuNSA2QzEuMjIzODYgNiAxIDUuNzc2MTQgMSA1LjVDMSA1LjIyMzg2IDEuMjIzODYgNSAxLjUgNUMxLjc3NjE0IDUgMiA1LjIyMzg2IDIgNS41Wk0xMy41IDZDMTMuNzc2MSA2IDE0IDUuNzc2MTQgMTQgNS41QzE0IDUuMjIzODYgMTMuNzc2MSA1IDEzLjUgNUMxMy4yMjM5IDUgMTMgNS4yMjM4NiAxMyA1LjVDMTMgNS43NzYxNCAxMy4yMjM5IDYgMTMuNSA2Wk0yIDcuNUMyIDcuNzc2MTQgMS43NzYxNCA4IDEuNSA4QzEuMjIzODYgOCAxIDcuNzc2MTQgMSA3LjVDMSA3LjIyMzg2IDEuMjIzODYgNyAxLjUgN0MxLjc3NjE0IDcgMiA3LjIyMzg2IDIgNy41Wk0xMy41IDhDMTMuNzc2MSA4IDE0IDcuNzc2MTQgMTQgNy41QzE0IDcuMjIzODYgMTMuNzc2MSA3IDEzLjUgN0MxMy4yMjM5IDcgMTMgNy4yMjM4NiAxMyA3LjVDMTMgNy43NzYxNCAxMy4yMjM5IDggMTMuNSA4Wk0yIDkuNUMyIDkuNzc2MTQgMS43NzYxNCAxMCAxLjUgMTBDMS4yMjM4NiAxMCAxIDkuNzc2MTQgMSA5LjVDMSA5LjIyMzg2IDEuMjIzODYgOSAxLjUgOUMxLjc3NjE0IDkgMiA5LjIyMzg2IDIgOS41Wk0xMy41IDEwQzEzLjc3NjEgMTAgMTQgOS43NzYxNCAxNCA5LjVDMTQgOS4yMjM4NiAxMy43NzYxIDkgMTMuNSA5QzEzLjIyMzkgOSAxMyA5LjIyMzg2IDEzIDkuNUMxMyA5Ljc3NjE0IDEzLjIyMzkgMTAgMTMuNSAxMFpNMiAxMS41QzIgMTEuNzc2MSAxLjc3NjE0IDEyIDEuNSAxMkMxLjIyMzg2IDEyIDEgMTEuNzc2MSAxIDExLjVDMSAxMS4yMjM5IDEuMjIzODYgMTEgMS41IDExQzEuNzc2MTQgMTEgMiAxMS4yMjM5IDIgMTEuNVpNMTMuNSAxMkMxMy43NzYxIDEyIDE0IDExLjc3NjEgMTQgMTEuNUMxNCAxMS4yMjM5IDEzLjc3NjEgMTEgMTMuNSAxMUMxMy4yMjM5IDExIDEzIDExLjIyMzkgMTMgMTEuNUMxMyAxMS43NzYxIDEzLjIyMzkgMTIgMTMuNSAxMlpNMiAxMy41QzIgMTMuNzc2MSAxLjc3NjE0IDE0IDEuNSAxNEMxLjIyMzg2IDE0IDEgMTMuNzc2MSAxIDEzLjVDMSAxMy4yMjM5IDEuMjIzODYgMTMgMS41IDEzQzEuNzc2MTQgMTMgMiAxMy4yMjM5IDIgMTMuNVpNMTMuNSAxNEMxMy43NzYxIDE0IDE0IDEzLjc3NjEgMTQgMTMuNUMxNCAxMy4yMjM5IDEzLjc3NjEgMTMgMTMuNSAxM0MxMy4yMjM5IDEzIDEzIDEzLjIyMzkgMTMgMTMuNUMxMyAxMy43NzYxIDEzLjIyMzkgMTQgMTMuNSAxNFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LExlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMi4wNjk3IDEuNzY3NDZDMTIuNDgwNyAxLjIxOTQ3IDExLjQ2MDUgMC40NTQzMTEgMTEuMDQ5NSAxLjAwMjNDMTAuNjM4NSAxLjU1MDI4IDExLjY1ODggMi4zMTU0NCAxMi4wNjk3IDEuNzY3NDZaTTguMzkyNjMgMS4wNzgxMUM3LjE1NTg1IDAuOTUwNjAyIDUuNzgyMyAxLjE2MzQ4IDQuNTg0MzMgMS43MDkzN0MzLjM4NTUyIDIuMjU1NjMgMi4zMjczNSAzLjE1MzA5IDEuNzg4NDQgNC40MTgzMkMxLjM3NTc0IDUuMzg3MjQgMS4wMTcxNSA2LjI4MTEzIDEuMDAwODggNy40NDM1NEMwLjk4NDcyNCA4LjU5ODQ0IDEuMzA1MjIgOS45Njg5OCAyLjEzMTc0IDExLjkyOEMyLjYxMTQyIDEzLjA2NDkgNC4wMzk2MyAxMy41NDQ2IDUuMTM4OTUgMTMuODA3OUM2LjQwODM2IDE0LjExMTkgNy44MDg1NyAxNC4xOTE0IDguNjY0NCAxNC4wNzQyQzkuMzY1MTUgMTMuOTc4MiAxMC4xNDQ4IDEzLjgyODQgMTAuNzk4NyAxMy4yOTdDMTEuODk3NyAxMi40MDM5IDEyLjkwMDkgMTEuMzk1NSAxMy40OTk0IDEwLjMzOTNDMTQuMTA0IDkuMjcyMjEgMTQuMzI1NiA4LjA5MjA3IDEzLjcyMTYgNi45NTMyNEMxMy41NjI4IDYuNjUzNzMgMTMuMzE2IDYuNTc3MzQgMTMuMDQxMiA2LjQ5MjNDMTIuOTM3NCA2LjQ2MDE2IDEyLjgyOTUgNi40MjY3OCAxMi43MjA5IDYuMzc5NjZDMTEuNjIxMSA1LjkwMjM0IDEwLjk2NDYgNS4zNDk2MyAxMC45MTM1IDUuMDI4NzZDMTAuODY1NiA0LjcyODA4IDEwLjkyMjEgNC41MTQ2MyAxMC45ODExIDQuMjkxODFDMTEuMDEyOSA0LjE3MTk5IDExLjA0NTMgNC4wNDk0NyAxMS4wNjI2IDMuOTA5MjJDMTEuMDgzOCAzLjczNzM3IDExLjA4MTQgMy4zMzMxOSAxMC42OTk2IDMuMTI3NjFDMTAuNDA0OCAyLjk2ODg4IDEwLjIxNjQgMi42NTg0MyAxMC4wNDA3IDIuMzY5MDRDOS45OTc0MiAyLjI5Nzc1IDkuOTU0OTIgMi4yMjc3MyA5LjkxMTggMi4xNjE1OEM5LjYyNjM0IDEuNzIzNjcgOS4yMDc2OSAxLjE2MjEzIDguMzkyNjMgMS4wNzgxMVpNNC45OTg5OSAyLjYxOTM1QzMuOTY0ODMgMy4wOTA1OCAzLjEyNTU0IDMuODMwOTcgMi43MDg0NiA0LjgxMDE4QzIuMjk4MDggNS43NzM2OCAyLjAxNDA2IDYuNTA4NzMgMi4wMDA3OSA3LjQ1NzUzQzEuOTg3NDEgOC40MTM4NSAyLjI1MDQzIDkuNjM2OCAzLjA1MzEgMTEuNTM5M0MzLjM5MTgxIDEyLjM0MjEgNC42MjE2NyAxMi42NTU3IDUuMzcxODYgMTIuODM1NEM2LjU0OTMgMTMuMTE3NCA3LjgyMiAxMy4xODAyIDguNTI4NjggMTMuMDgzNEM5LjIxMjcxIDEyLjk4OTcgOS43NDU2OCAxMi44NjQyIDEwLjE2ODEgMTIuNTIwOUMxMS4yMjkgMTEuNjU4NyAxMi4xMjEgMTAuNzQzNSAxMi42MjkzIDkuODQ2MzVDMTIuOTM0OSA5LjMwNzA5IDEzLjUxNDEgNy43MDI4IDEyLjYyOTIgNy4zODczQzEwLjc1MzkgNi43MTg3NSAxMC4yNjIgNi4wNjY2OSA5Ljk5MDExIDUuNDEyNjhDOS44MDkxNSA0Ljk3NzQ0IDkuODI4NjggNC41MjI4MiA5Ljk1NzQxIDQuMDc4ODVMOS45NTc0MSA0LjA3ODg0QzkuOTc2NjIgNC4wMTI2IDkuOTk1MzggMy45NDc5MSAxMC4wMzM0IDMuODg4ODJDOS44MTg1NyAzLjczNjc2IDkuNjUxNSAzLjU1MTk1IDkuNTE0NjQgMy4zNzE1QzkuNDI4NzYgMy4yNTgyOCA5LjM0NjkgMy4xMjA5OSA5LjI2MTk3IDIuOTc4NTZDOS4wMTg2NiAyLjU3MDUyIDguNzUwMTggMi4xMjAyNyA4LjI5MDA4IDIuMDcyODNDNy4yMjg4OSAxLjk2MzQzIDYuMDMzOTggMi4xNDc3MiA0Ljk5ODk5IDIuNjE5MzVaTTEzLjIwODEgMy43NzQ3MUMxMy40NDEgMy4yMjY3MSAxMi40NTQ3IDIuNjM2MDYgMTIuMDgyMiAzLjEwMTYzQzExLjU4MTcgMy43MjczMiAxMi45MDI5IDQuNDkyODEgMTMuMjA4MSAzLjc3NDcxWk0xNC4zNjcyIDIuMjYwMzFDMTQuOTY2OCAyLjI3NDkzIDE1LjE1NTEgMS4xMTYwMyAxNC41NzE4IDAuOTQ5MzcxQzEzLjgwNzYgMC43MzEwMjYgMTMuNTkxOCAyLjI0MTM5IDE0LjM2NzIgMi4yNjAzMVpNMTQuMjg1NyA1LjA5MDk4QzE0Ljg2NDQgNS4xMDAwNCAxNS4wNDYyIDQuMzgyMjIgMTQuNDgzMiA0LjI3ODk5QzEzLjc0NTUgNC4xNDM3NSAxMy41MzczIDUuMDc5MjcgMTQuMjg1NyA1LjA5MDk4Wk02LjkwNzUgNC4yODY3MkM2LjQ2ODk4IDQuNjY3NTQgNi4wNTIyIDQuMTUxODUgNS45Nzk4MyAzLjczNjVDNS44Njg0OCAzLjA5NzQ0IDYuMzM2OTYgMi41Njg1NiA2Ljk0ODIzIDIuOTExNTZDNy40MzM0NCAzLjE4MzgyIDcuMjY2NzggMy45NzQ3MSA2LjkwNzUgNC4yODY3MlpNNC45NDQ1NSA1Ljg4MTg0QzUuNDA4ODUgNS40MTc1NCA0LjU5NTY3IDQuNTcwMTMgNC4xMTQyNSA1LjA1MTU0QzMuODMzMzggNS4zMzI0MiA0LjAwOTM2IDUuNjUzNzYgNC4yMzc0NCA1Ljg4MTg0QzQuNDMyNzEgNi4wNzcxIDQuNzQ5MjkgNi4wNzcxIDQuOTQ0NTUgNS44ODE4NFpNNi45NzcxNiA2LjcxOTg0QzcuMzExODEgNy4zODkxNCA4LjQ4ODA0IDYuNzkxNTkgNy45OTQxMyA2LjE0Nzg4QzcuODY1MTkgNS45Nzk4MyA3LjY4NjU3IDUuOTQ5NCA3LjYyMTQ1IDUuOTQyMDdDNy4yMTIxNyA1Ljg5NjAxIDYuNzYzNDkgNi4yOTI1IDYuOTc3MTYgNi43MTk4NFpNNi45ODc5OCA4LjcyNDYxQzcuMTQwNjYgOS4xMTg4IDcuNTExMjIgOS4zMTg3IDcuOTE5MTUgOS4xNjMzQzguMjc0MzQgOS4wMjc5OSA4LjMzMTg2IDguMzk2ODkgOC4xNzE3NSA4LjA3NDI3QzguMDIzMzEgNy43NzUxNCA3LjYzOTU2IDcuNjc3OTMgNy4zMzc0NyA3Ljc5NDE3QzYuOTg1MTIgNy45Mjk3NiA2Ljg1NjcyIDguMzg3MDggNi45ODU3NiA4LjcxODg5TDYuOTg3OTggOC43MjQ2MVpNMTAuMzg4NSA4Ljg0MDgxQzEwLjc1NzUgOC42NTY2IDExLjQ2MTcgOC44Mjc3MSAxMS40NjE3IDkuMzExOTlDMTEuNDYxNyA5LjcxMjg2IDEwLjk1ODcgMTAuMjE2NSAxMC41NjM0IDEwLjI4MjZDMTAuMTgxMyAxMC4zNDY1IDkuNzA1MTUgOS45NzU4MSA5Ljc2NjQ4IDkuNTc3MThDOS44MTQ0NSA5LjI2NTM5IDEwLjEyMTcgOC45NzQwMSAxMC4zODg1IDguODQwODFaTTcuNTY3MDQgMTAuODQzMkM3LjMzNDYxIDEwLjc1MDIgNy4xNDM1MyAxMC44NjAxIDcuMTE0MzcgMTAuODc2OUw3LjExMjc5IDEwLjg3NzhDNi45MDc4MiAxMC45OTQ5IDYuNzEzODMgMTEuMjQzOSA2LjY3NDcgMTEuNDg0MkM2LjU5MDE4IDEyLjAwMzQgNy4xMzE5OSAxMi4xMjM5IDcuNTI2NjEgMTIuMDk4N0M4LjIwNzQgMTIuMDU1MyA4LjA2NTQ3IDExLjA0MjYgNy41NjcwNCAxMC44NDMyWk00Ljg4MDUgMTAuODkzMkM1LjA2NzQgMTAuNzcyMyA1LjE1NjU4IDEwLjUzNjMgNS4wODI5MyAxMC4zMTUzQzQuOTMwNDYgOS43OTY4NyA0LjMyNDYgOS43MTI1MiAzLjk2NTYxIDEwLjEyOTdDMy43OTMzNiAxMC4zMjk5IDMuODA3NDkgMTAuNjI3NCAzLjk5MjE0IDEwLjgxMDVMMy45OTQ5NSAxMC44MTRMMy45OTc5IDEwLjgxNzZDNC4yMjAyNSAxMS4wOTQyIDQuNjM2MjQgMTEuMTg1NyA0Ljg4MDUgMTAuODkzMlpNMy4wNDY5NSA3LjgxMzE4QzMuMzMxNDcgOC4wOTc3IDMuNjAwNzcgOC4xNTA2NyAzLjk4NDQzIDguMDU4NTlDNC42MDgyNiA3LjkwODg3IDQuMTM4MTQgNi4yNDI5OSAzLjA0NyA2Ljg3Mjk2QzIuNzA5MzkgNy4wNjc4OCAyLjg2NzE2IDcuNjMzMzkgMy4wNDY5NSA3LjgxMzE4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sX2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEgOS41MDAwNkMxIDEwLjMyODUgMS42NzE1NyAxMS4wMDAxIDIuNSAxMS4wMDAxSDRMNCAxMC4wMDAxSDIuNUMyLjIyMzg2IDEwLjAwMDEgMiA5Ljc3NjIgMiA5LjUwMDA2TDIgMi41MDAwNkMyIDIuMjIzOTIgMi4yMjM4NiAyLjAwMDA2IDIuNSAyLjAwMDA2TDkuNSAyLjAwMDA2QzkuNzc2MTQgMi4wMDAwNiAxMCAyLjIyMzkyIDEwIDIuNTAwMDZWNC4wMDAwMkg1LjVDNC42NzE1OCA0LjAwMDAyIDQgNC42NzE1OSA0IDUuNTAwMDJWMTIuNUM0IDEzLjMyODQgNC42NzE1OCAxNCA1LjUgMTRIMTIuNUMxMy4zMjg0IDE0IDE0IDEzLjMyODQgMTQgMTIuNVY1LjUwMDAyQzE0IDQuNjcxNTkgMTMuMzI4NCA0LjAwMDAyIDEyLjUgNC4wMDAwMkgxMVYyLjUwMDA2QzExIDEuNjcxNjMgMTAuMzI4NCAxLjAwMDA2IDkuNSAxLjAwMDA2SDIuNUMxLjY3MTU3IDEuMDAwMDYgMSAxLjY3MTYzIDEgMi41MDAwNlY5LjUwMDA2Wk01IDUuNTAwMDJDNSA1LjIyMzg4IDUuMjIzODYgNS4wMDAwMiA1LjUgNS4wMDAwMkgxMi41QzEyLjc3NjEgNS4wMDAwMiAxMyA1LjIyMzg4IDEzIDUuNTAwMDJWMTIuNUMxMyAxMi43NzYyIDEyLjc3NjEgMTMgMTIuNSAxM0g1LjVDNS4yMjM4NiAxMyA1IDEyLjc3NjIgNSAxMi41VjUuNTAwMDJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxQZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOS44NzczNyAxMkg5LjlIMTEuNUMxMS43NzYxIDEyIDEyIDExLjc3NjEgMTIgMTEuNUMxMiAxMS4yMjM5IDExLjc3NjEgMTEgMTEuNSAxMUg5LjlDOC43NzE2NCAxMSA3Ljk1NTQ1IDEwLjk5OTYgNy4zMTM1MiAxMC45NDcyQzYuNjc3NDQgMTAuODk1MiA2LjI1NjYyIDEwLjc5NDYgNS45MTEwMyAxMC42MTg1QzUuMjUyNDcgMTAuMjgzIDQuNzE3MDMgOS43NDc1MyA0LjM4MTQ4IDkuMDg4OTdDNC4yMDUzOSA4Ljc0MzM4IDQuMTA0ODEgOC4zMjI1NiA0LjA1Mjg0IDcuNjg2NDhDNC4wMDAzOSA3LjA0NDU1IDQgNi4yMjgzNiA0IDUuMVYzLjVDNCAzLjIyMzg2IDMuNzc2MTQgMyAzLjUgM0MzLjIyMzg2IDMgMyAzLjIyMzg2IDMgMy41VjUuMVY1LjEyMjYzQzMgNi4yMjM1OSAzIDcuMDgwNTIgMy4wNTYxNiA3Ljc2NzkxQzMuMTEzMTggOC40NjU4NCAzLjIzMDU4IDkuMDMyOSAzLjQ5MDQ3IDkuNTQyOTZDMy45MjE5IDEwLjM4OTcgNC42MTAzMSAxMS4wNzgxIDUuNDU3MDQgMTEuNTA5NUM1Ljk2NzEgMTEuNzY5NCA2LjUzNDE2IDExLjg4NjggNy4yMzIwOSAxMS45NDM4QzcuOTE5NDggMTIgOC43NzY0MSAxMiA5Ljg3NzM3IDEyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sRWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUuMTIyNjMgMTJINS4xSDMuNUMzLjIyMzg2IDEyIDMgMTEuNzc2MSAzIDExLjVDMyAxMS4yMjM5IDMuMjIzODYgMTEgMy41IDExSDUuMUM2LjIyODM2IDExIDcuMDQ0NTUgMTAuOTk5NiA3LjY4NjQ4IDEwLjk0NzJDOC4zMjI1NiAxMC44OTUyIDguNzQzMzggMTAuNzk0NiA5LjA4ODk3IDEwLjYxODVDOS43NDc1MyAxMC4yODMgMTAuMjgzIDkuNzQ3NTMgMTAuNjE4NSA5LjA4ODk3QzEwLjc5NDYgOC43NDMzOCAxMC44OTUyIDguMzIyNTYgMTAuOTQ3MiA3LjY4NjQ4QzEwLjk5OTYgNy4wNDQ1NSAxMSA2LjIyODM2IDExIDUuMVYzLjVDMTEgMy4yMjM4NiAxMS4yMjM5IDMgMTEuNSAzQzExLjc3NjEgMyAxMiAzLjIyMzg2IDEyIDMuNVY1LjFWNS4xMjI2M0MxMiA2LjIyMzU5IDEyIDcuMDgwNTIgMTEuOTQzOCA3Ljc2NzkxQzExLjg4NjggOC40NjU4NCAxMS43Njk0IDkuMDMyOSAxMS41MDk1IDkuNTQyOTZDMTEuMDc4MSAxMC4zODk3IDEwLjM4OTcgMTEuMDc4MSA5LjU0Mjk2IDExLjUwOTVDOS4wMzI5IDExLjc2OTQgOC40NjU4NCAxMS44ODY4IDcuNzY3OTEgMTEuOTQzOEM3LjA4MDUyIDEyIDYuMjIzNTkgMTIgNS4xMjI2MyAxMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGplPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk05Ljg3NzM3IDNIOS45SDExLjVDMTEuNzc2MSAzIDEyIDMuMjIzODYgMTIgMy41QzEyIDMuNzc2MTQgMTEuNzc2MSA0IDExLjUgNEg5LjlDOC43NzE2NCA0IDcuOTU1NDUgNC4wMDAzOSA3LjMxMzUyIDQuMDUyODRDNi42Nzc0NCA0LjEwNDgxIDYuMjU2NjIgNC4yMDUzOSA1LjkxMTAzIDQuMzgxNDhDNS4yNTI0NyA0LjcxNzAzIDQuNzE3MDMgNS4yNTI0NyA0LjM4MTQ4IDUuOTExMDNDNC4yMDUzOSA2LjI1NjYyIDQuMTA0ODEgNi42Nzc0NCA0LjA1Mjg0IDcuMzEzNTJDNC4wMDAzOSA3Ljk1NTQ1IDQgOC43NzE2NCA0IDkuOVYxMS41QzQgMTEuNzc2MSAzLjc3NjE0IDEyIDMuNSAxMkMzLjIyMzg2IDEyIDMgMTEuNzc2MSAzIDExLjVWOS45VjkuODc3MzdDMyA4Ljc3NjQxIDMgNy45MTk0OCAzLjA1NjE2IDcuMjMyMDlDMy4xMTMxOCA2LjUzNDE2IDMuMjMwNTggNS45NjcxIDMuNDkwNDcgNS40NTcwNEMzLjkyMTkgNC42MTAzMSA0LjYxMDMxIDMuOTIxOSA1LjQ1NzA0IDMuNDkwNDdDNS45NjcxIDMuMjMwNTggNi41MzQxNiAzLjExMzE4IDcuMjMyMDkgMy4wNTYxNkM3LjkxOTQ4IDMgOC43NzY0MSAzIDkuODc3MzcgM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFJlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjEyMjYzIDNINS4xSDMuNUMzLjIyMzg2IDMgMyAzLjIyMzg2IDMgMy41QzMgMy43NzYxNCAzLjIyMzg2IDQgMy41IDRINS4xQzYuMjI4MzYgNCA3LjA0NDU1IDQuMDAwMzkgNy42ODY0OCA0LjA1Mjg0QzguMzIyNTYgNC4xMDQ4MSA4Ljc0MzM4IDQuMjA1MzkgOS4wODg5NyA0LjM4MTQ4QzkuNzQ3NTMgNC43MTcwMyAxMC4yODMgNS4yNTI0NyAxMC42MTg1IDUuOTExMDNDMTAuNzk0NiA2LjI1NjYyIDEwLjg5NTIgNi42Nzc0NCAxMC45NDcyIDcuMzEzNTJDMTAuOTk5NiA3Ljk1NTQ1IDExIDguNzcxNjQgMTEgOS45VjExLjVDMTEgMTEuNzc2MSAxMS4yMjM5IDEyIDExLjUgMTJDMTEuNzc2MSAxMiAxMiAxMS43NzYxIDEyIDExLjVWOS45VjkuODc3MzdDMTIgOC43NzY0MSAxMiA3LjkxOTQ4IDExLjk0MzggNy4yMzIwOUMxMS44ODY4IDYuNTM0MTYgMTEuNzY5NCA1Ljk2NzEgMTEuNTA5NSA1LjQ1NzA0QzExLjA3ODEgNC42MTAzMSAxMC4zODk3IDMuOTIxOSA5LjU0Mjk2IDMuNDkwNDdDOS4wMzI5IDMuMjMwNTggOC40NjU4NCAzLjExMzE4IDcuNzY3OTEgMy4wNTYxNkM3LjA4MDUyIDMgNi4yMjM1OSAzIDUuMTIyNjMgM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEllPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMC4xIDNDMTAuNTI4MyAzIDEwLjgxOTQgMy4wMDAzOSAxMS4wNDQ1IDMuMDE4NzhDMTEuMjYzNyAzLjAzNjY5IDExLjM3NTggMy4wNjkxNSAxMS40NTQgMy4xMDg5OUMxMS42NDIyIDMuMjA0ODcgMTEuNzk1MSAzLjM1Nzg1IDExLjg5MSAzLjU0NjAxQzExLjkzMDkgMy42MjQyMSAxMS45NjMzIDMuNzM2MzEgMTEuOTgxMiAzLjk1NTUyQzExLjk5OTYgNC4xODA1NiAxMiA0LjQ3MTcxIDEyIDQuOVY1LjVDMTIgNS43NzYxNCAxMi4yMjM5IDYgMTIuNSA2QzEyLjc3NjEgNiAxMyA1Ljc3NjE0IDEzIDUuNVY0Ljg3OTM1QzEzIDQuNDc2ODcgMTMgNC4xNDQ2OSAxMi45Nzc5IDMuODc0MDlDMTIuOTU0OSAzLjU5MzA0IDEyLjkwNTcgMy4zMzQ2OSAxMi43ODIgMy4wOTIwMkMxMi41OTAzIDIuNzE1NyAxMi4yODQzIDIuNDA5NzMgMTEuOTA4IDIuMjE3OTlDMTEuNjY1MyAyLjA5NDM0IDExLjQwNyAyLjA0NTA2IDExLjEyNTkgMi4wMjIxQzEwLjg1NTMgMS45OTk5OSAxMC41MjMxIDEuOTk5OTkgMTAuMTIwNyAySDEwLjEyMDZIMTAuMUg5LjVDOS4yMjM4NiAyIDkgMi4yMjM4NiA5IDIuNUM5IDIuNzc2MTQgOS4yMjM4NiAzIDkuNSAzSDEwLjFaTTUuNSAySDQuODc5MzVINC44NzkzNEM0LjQ3Njg2IDEuOTk5OTkgNC4xNDQ2OCAxLjk5OTk5IDMuODc0MDkgMi4wMjIxQzMuNTkzMDQgMi4wNDUwNiAzLjMzNDY5IDIuMDk0MzQgMy4wOTIwMiAyLjIxNzk5QzIuNzE1NyAyLjQwOTczIDIuNDA5NzMgMi43MTU3IDIuMjE3OTkgMy4wOTIwMkMyLjA5NDM0IDMuMzM0NjkgMi4wNDUwNiAzLjU5MzA0IDIuMDIyMSAzLjg3NDA5QzEuOTk5OTkgNC4xNDQ2OCAxLjk5OTk5IDQuNDc2ODYgMiA0Ljg3OTM0VjQuODc5MzVWNS41QzIgNS43NzYxNCAyLjIyMzg2IDYgMi41IDZDMi43NzYxNCA2IDMgNS43NzYxNCAzIDUuNVY0LjlDMyA0LjQ3MTcxIDMuMDAwMzkgNC4xODA1NiAzLjAxODc4IDMuOTU1NTJDMy4wMzY2OSAzLjczNjMxIDMuMDY5MTUgMy42MjQyMSAzLjEwODk5IDMuNTQ2MDFDMy4yMDQ4NyAzLjM1Nzg1IDMuMzU3ODUgMy4yMDQ4NyAzLjU0NjAxIDMuMTA4OTlDMy42MjQyMSAzLjA2OTE1IDMuNzM2MzEgMy4wMzY2OSAzLjk1NTUyIDMuMDE4NzhDNC4xODA1NiAzLjAwMDM5IDQuNDcxNzEgMyA0LjkgM0g1LjVDNS43NzYxNCAzIDYgMi43NzYxNCA2IDIuNUM2IDIuMjIzODYgNS43NzYxNCAyIDUuNSAyWk0xMyA5LjVDMTMgOS4yMjM4NiAxMi43NzYxIDkgMTIuNSA5QzEyLjIyMzkgOSAxMiA5LjIyMzg2IDEyIDkuNVYxMC4xQzEyIDEwLjUyODMgMTEuOTk5NiAxMC44MTk0IDExLjk4MTIgMTEuMDQ0NUMxMS45NjMzIDExLjI2MzcgMTEuOTMwOSAxMS4zNzU4IDExLjg5MSAxMS40NTRDMTEuNzk1MSAxMS42NDIyIDExLjY0MjIgMTEuNzk1MSAxMS40NTQgMTEuODkxQzExLjM3NTggMTEuOTMwOSAxMS4yNjM3IDExLjk2MzMgMTEuMDQ0NSAxMS45ODEyQzEwLjgxOTQgMTEuOTk5NiAxMC41MjgzIDEyIDEwLjEgMTJIOS41QzkuMjIzODYgMTIgOSAxMi4yMjM5IDkgMTIuNUM5IDEyLjc3NjEgOS4yMjM4NiAxMyA5LjUgMTNIMTAuMTIwNkMxMC41MjMxIDEzIDEwLjg1NTMgMTMgMTEuMTI1OSAxMi45Nzc5QzExLjQwNyAxMi45NTQ5IDExLjY2NTMgMTIuOTA1NyAxMS45MDggMTIuNzgyQzEyLjI4NDMgMTIuNTkwMyAxMi41OTAzIDEyLjI4NDMgMTIuNzgyIDExLjkwOEMxMi45MDU3IDExLjY2NTMgMTIuOTU0OSAxMS40MDcgMTIuOTc3OSAxMS4xMjU5QzEzIDEwLjg1NTMgMTMgMTAuNTIzMSAxMyAxMC4xMjA2VjkuNVpNMi41IDlDMi43NzYxNCA5IDMgOS4yMjM4NiAzIDkuNVYxMC4xQzMgMTAuNTI4MyAzLjAwMDM5IDEwLjgxOTQgMy4wMTg3OCAxMS4wNDQ1QzMuMDM2NjkgMTEuMjYzNyAzLjA2OTE1IDExLjM3NTggMy4xMDg5OSAxMS40NTRDMy4yMDQ4NyAxMS42NDIyIDMuMzU3ODUgMTEuNzk1MSAzLjU0NjAxIDExLjg5MUMzLjYyNDIxIDExLjkzMDkgMy43MzYzMSAxMS45NjMzIDMuOTU1NTIgMTEuOTgxMkM0LjE4MDU2IDExLjk5OTYgNC40NzE3MSAxMiA0LjkgMTJINS41QzUuNzc2MTQgMTIgNiAxMi4yMjM5IDYgMTIuNUM2IDEyLjc3NjEgNS43NzYxNCAxMyA1LjUgMTNINC44NzkzNUM0LjQ3Njg3IDEzIDQuMTQ0NjkgMTMgMy44NzQwOSAxMi45Nzc5QzMuNTkzMDQgMTIuOTU0OSAzLjMzNDY5IDEyLjkwNTcgMy4wOTIwMiAxMi43ODJDMi43MTU3IDEyLjU5MDMgMi40MDk3MyAxMi4yODQzIDIuMjE3OTkgMTEuOTA4QzIuMDk0MzQgMTEuNjY1MyAyLjA0NTA2IDExLjQwNyAyLjAyMjEgMTEuMTI1OUMxLjk5OTk5IDEwLjg1NTMgMS45OTk5OSAxMC41MjMxIDIgMTAuMTIwN1YxMC4xMjA2VjEwLjFWOS41QzIgOS4yMjM4NiAyLjIyMzg2IDkgMi41IDlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxWZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTMuMTUgNy40OTk5OEMxMy4xNSA0LjY2NDU4IDEwLjk0MDIgMS44NDk5OCA3LjUwMDAyIDEuODQ5OThDNC43MjE3IDEuODQ5OTggMy4zNDg1MSAzLjkwNjM2IDIuNzYzMzYgNC45OTk5N0g0LjVDNC43NzYxNCA0Ljk5OTk3IDUgNS4yMjM4MyA1IDUuNDk5OTdDNSA1Ljc3NjExIDQuNzc2MTQgNS45OTk5NyA0LjUgNS45OTk5N0gxLjVDMS4yMjM4NiA1Ljk5OTk3IDEgNS43NzYxMSAxIDUuNDk5OTdWMi40OTk5N0MxIDIuMjIzODMgMS4yMjM4NiAxLjk5OTk3IDEuNSAxLjk5OTk3QzEuNzc2MTQgMS45OTk5NyAyIDIuMjIzODMgMiAyLjQ5OTk3VjQuMzEzMThDMi43MDQ1MyAzLjA3MTI2IDQuMzM0MDYgMC44NDk5NzYgNy41MDAwMiAwLjg0OTk3NkMxMS41NjI4IDAuODQ5OTc2IDE0LjE1IDQuMTg1MzcgMTQuMTUgNy40OTk5OEMxNC4xNSAxMC44MTQ2IDExLjU2MjggMTQuMTUgNy41MDAwMiAxNC4xNUM1LjU1NjE4IDE0LjE1IDMuOTM3NzggMTMuMzgwOCAyLjc4NTQ4IDEyLjIwODRDMi4xNjg1MiAxMS41ODA2IDEuNjg2NjggMTAuODM5IDEuMzU4MTYgMTAuMDQwN0MxLjI1MzA2IDkuNzg1MzYgMS4zNzQ4OCA5LjQ5MzE1IDEuNjMwMjQgOS4zODgwNkMxLjg4NTYgOS4yODI5NiAyLjE3NzgxIDkuNDA0NzggMi4yODI5IDkuNjYwMTRDMi41NjM3NCAxMC4zNDI1IDIuOTc0OTUgMTAuOTc0NSAzLjQ5ODcgMTEuNTA3NEM0LjQ3MDUyIDEyLjQ5NjMgNS44MzQ5NiAxMy4xNSA3LjUwMDAyIDEzLjE1QzEwLjk0MDIgMTMuMTUgMTMuMTUgMTAuMzM1NCAxMy4xNSA3LjQ5OTk4Wk03IDEwVjUuMDAwMDFIOFYxMEg3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sSGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEzLjE1IDcuNDk5OThDMTMuMTUgNC42NjQ1OCAxMC45NDAyIDEuODQ5OTggNy41MDAwMiAxLjg0OTk4QzQuNzIxNjcgMS44NDk5OCAzLjM0ODQ5IDMuOTA2NCAyLjc2MzM1IDVINC41QzQuNzc2MTQgNSA1IDUuMjIzODYgNSA1LjVDNSA1Ljc3NjE0IDQuNzc2MTQgNiA0LjUgNkgxLjVDMS4yMjM4NiA2IDEgNS43NzYxNCAxIDUuNVYyLjVDMSAyLjIyMzg2IDEuMjIzODYgMiAxLjUgMkMxLjc3NjE0IDIgMiAyLjIyMzg2IDIgMi41VjQuMzEzMThDMi43MDQ1MyAzLjA3MTI2IDQuMzM0MDYgMC44NDk5NzYgNy41MDAwMiAwLjg0OTk3NkMxMS41NjI4IDAuODQ5OTc2IDE0LjE1IDQuMTg1MzcgMTQuMTUgNy40OTk5OEMxNC4xNSAxMC44MTQ2IDExLjU2MjggMTQuMTUgNy41MDAwMiAxNC4xNUM1LjU1NjE4IDE0LjE1IDMuOTM3NzggMTMuMzgwOCAyLjc4NTQ4IDEyLjIwODRDMi4xNjg1MiAxMS41ODA2IDEuNjg2NjggMTAuODM5IDEuMzU4MTYgMTAuMDQwN0MxLjI1MzA2IDkuNzg1MzYgMS4zNzQ4OCA5LjQ5MzE1IDEuNjMwMjQgOS4zODgwNkMxLjg4NTYgOS4yODI5NiAyLjE3NzgxIDkuNDA0NzggMi4yODI5IDkuNjYwMTRDMi41NjM3NCAxMC4zNDI1IDIuOTc0OTUgMTAuOTc0NSAzLjQ5ODcgMTEuNTA3NEM0LjQ3MDUyIDEyLjQ5NjMgNS44MzQ5NiAxMy4xNSA3LjUwMDAyIDEzLjE1QzEwLjk0MDIgMTMuMTUgMTMuMTUgMTAuMzM1NCAxMy4xNSA3LjQ5OTk4Wk03LjUgNC4wMDAwMUM3Ljc3NjE0IDQuMDAwMDEgOCA0LjIyMzg3IDggNC41MDAwMVY3LjI5MjkxTDkuODUzNTUgOS4xNDY0NkMxMC4wNDg4IDkuMzQxNzIgMTAuMDQ4OCA5LjY1ODMxIDkuODUzNTUgOS44NTM1N0M5LjY1ODI5IDEwLjA0ODggOS4zNDE3MSAxMC4wNDg4IDkuMTQ2NDUgOS44NTM1N0w3LjE0NjQ1IDcuODUzNTdDNy4wNTI2OCA3Ljc1OTggNyA3LjYzMjYyIDcgNy41MDAwMVY0LjUwMDAxQzcgNC4yMjM4NyA3LjIyMzg2IDQuMDAwMDEgNy41IDQuMDAwMDFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxBZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy41IDguMDA2ODRlLTA3QzMuNzc2MTQgNy44ODYxNGUtMDcgNCAwLjIyMzg1OSA0IDAuNTAwMDAxTDQgMy4wMDAwNkwxMS41IDMuMDAwMDZDMTEuNzc2MSAzLjAwMDA2IDEyIDMuMjIzOTIgMTIgMy41MDAwNkwxMiAxMS4wMDAxTDE0LjUgMTFDMTQuNzc2MSAxMSAxNSAxMS4yMjM4IDE1IDExLjVDMTUgMTEuNzc2MSAxNC43NzYyIDEyIDE0LjUgMTJMMTIgMTIuMDAwMUwxMiAxNC41QzEyIDE0Ljc3NjEgMTEuNzc2MSAxNSAxMS41IDE1QzExLjIyMzkgMTUgMTEgMTQuNzc2MSAxMSAxNC41TDExIDEyLjAwMDFMMy41IDEyLjAwMDFDMy4yMjM4NiAxMi4wMDAxIDMgMTEuNzc2MiAzIDExLjUwMDFMMyA0LjAwMDA1TDAuNDk5OTg5IDRDMC4yMjM4NDcgNCAtNi4xMDU0MWUtMDYgMy43NzYxMyAtNS4wMjU3NmUtMDcgMy40OTk5OUM1LjEzMDA2ZS0wNiAzLjIyMzg1IDAuMjIzODY3IDMgMC41MDAwMSAzTDMgMy4wMDAwNUwzIDAuNTAwMDAxQzMgMC4yMjM4NTkgMy4yMjM4NiA4LjEyNzU1ZS0wNyAzLjUgOC4wMDY4NGUtMDdaTTQgNC4wMDAwNkw0IDExLjAwMDFMMTEgMTEuMDAwMUwxMSA0LjAwMDA2TDQgNC4wMDAwNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFRlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMi44NTM2IDIuODUzNTVDMTMuMDQ4OCAyLjY1ODI5IDEzLjA0ODggMi4zNDE3MSAxMi44NTM2IDIuMTQ2NDVDMTIuNjU4MyAxLjk1MTE4IDEyLjM0MTcgMS45NTExOCAxMi4xNDY0IDIuMTQ2NDVMNy41IDYuNzkyODlMMi44NTM1NSAyLjE0NjQ1QzIuNjU4MjkgMS45NTExOCAyLjM0MTcxIDEuOTUxMTggMi4xNDY0NSAyLjE0NjQ1QzEuOTUxMTggMi4zNDE3MSAxLjk1MTE4IDIuNjU4MjkgMi4xNDY0NSAyLjg1MzU1TDYuNzkyODkgNy41TDIuMTQ2NDUgMTIuMTQ2NEMxLjk1MTE4IDEyLjM0MTcgMS45NTExOCAxMi42NTgzIDIuMTQ2NDUgMTIuODUzNkMyLjM0MTcxIDEzLjA0ODggMi42NTgyOSAxMy4wNDg4IDIuODUzNTUgMTIuODUzNkw3LjUgOC4yMDcxMUwxMi4xNDY0IDEyLjg1MzZDMTIuMzQxNyAxMy4wNDg4IDEyLjY1ODMgMTMuMDQ4OCAxMi44NTM2IDEyLjg1MzZDMTMuMDQ4OCAxMi42NTgzIDEzLjA0ODggMTIuMzQxNyAxMi44NTM2IDEyLjE0NjRMOC4yMDcxMSA3LjVMMTIuODUzNiAyLjg1MzU1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sRGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTExLjc4MTYgNC4wMzE1N0MxMi4wMDYyIDMuODA3MDIgMTIuMDA2MiAzLjQ0Mjk1IDExLjc4MTYgMy4yMTg0QzExLjU1NzEgMi45OTM4NSAxMS4xOTMgMi45OTM4NSAxMC45Njg1IDMuMjE4NEw3LjUwMDA1IDYuNjg2ODJMNC4wMzE2NCAzLjIxODRDMy44MDcwOCAyLjk5Mzg1IDMuNDQzMDEgMi45OTM4NSAzLjIxODQ2IDMuMjE4NEMyLjk5MzkxIDMuNDQyOTUgMi45OTM5MSAzLjgwNzAyIDMuMjE4NDYgNC4wMzE1N0w2LjY4Njg4IDcuNDk5OTlMMy4yMTg0NiAxMC45Njg0QzIuOTkzOTEgMTEuMTkzIDIuOTkzOTEgMTEuNTU3IDMuMjE4NDYgMTEuNzgxNkMzLjQ0MzAxIDEyLjAwNjEgMy44MDcwOCAxMi4wMDYxIDQuMDMxNjQgMTEuNzgxNkw3LjUwMDA1IDguMzEzMTZMMTAuOTY4NSAxMS43ODE2QzExLjE5MyAxMi4wMDYxIDExLjU1NzEgMTIuMDA2MSAxMS43ODE2IDExLjc4MTZDMTIuMDA2MiAxMS41NTcgMTIuMDA2MiAxMS4xOTMgMTEuNzgxNiAxMC45Njg0TDguMzEzMjIgNy40OTk5OUwxMS43ODE2IDQuMDMxNTdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxCZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC44NzcwNzUgNy40OTk4OEMwLjg3NzA3NSAzLjg0MjE5IDMuODQyMjIgMC44NzcwNDUgNy40OTk5MSAwLjg3NzA0NUMxMS4xNTc2IDAuODc3MDQ1IDE0LjEyMjcgMy44NDIxOSAxNC4xMjI3IDcuNDk5ODhDMTQuMTIyNyAxMS4xNTc1IDExLjE1NzYgMTQuMTIyNyA3LjQ5OTkxIDE0LjEyMjdDMy44NDIyMiAxNC4xMjI3IDAuODc3MDc1IDExLjE1NzUgMC44NzcwNzUgNy40OTk4OFpNNy40OTk5MSAxLjgyNzA0QzQuMzY2ODkgMS44MjcwNCAxLjgyNzA4IDQuMzY2ODYgMS44MjcwOCA3LjQ5OTg4QzEuODI3MDggMTAuNjMyOSA0LjM2Njg5IDEzLjE3MjcgNy40OTk5MSAxMy4xNzI3QzEwLjYzMjkgMTMuMTcyNyAxMy4xNzI3IDEwLjYzMjkgMTMuMTcyNyA3LjQ5OTg4QzEzLjE3MjcgNC4zNjY4NiAxMC42MzI5IDEuODI3MDQgNy40OTk5MSAxLjgyNzA0Wk05Ljg1MzU4IDUuMTQ2NDRDMTAuMDQ4OCA1LjM0MTcgMTAuMDQ4OCA1LjY1ODI5IDkuODUzNTggNS44NTM1NUw4LjIwNzEzIDcuNDk5OTlMOS44NTM1OCA5LjE0NjQ0QzEwLjA0ODggOS4zNDE3IDEwLjA0ODggOS42NTgyOSA5Ljg1MzU4IDkuODUzNTVDOS42NTgzMiAxMC4wNDg4IDkuMzQxNzMgMTAuMDQ4OCA5LjE0NjQ3IDkuODUzNTVMNy41MDAwMiA4LjIwNzFMNS44NTM1OCA5Ljg1MzU1QzUuNjU4MzIgMTAuMDQ4OCA1LjM0MTczIDEwLjA0ODggNS4xNDY0NyA5Ljg1MzU1QzQuOTUxMjEgOS42NTgyOSA0Ljk1MTIxIDkuMzQxNyA1LjE0NjQ3IDkuMTQ2NDRMNi43OTI5MiA3LjQ5OTk5TDUuMTQ2NDcgNS44NTM1NUM0Ljk1MTIxIDUuNjU4MjkgNC45NTEyMSA1LjM0MTcgNS4xNDY0NyA1LjE0NjQ0QzUuMzQxNzMgNC45NTExOCA1LjY1ODMyIDQuOTUxMTggNS44NTM1OCA1LjE0NjQ0TDcuNTAwMDIgNi43OTI4OUw5LjE0NjQ3IDUuMTQ2NDRDOS4zNDE3MyA0Ljk1MTE4IDkuNjU4MzIgNC45NTExOCA5Ljg1MzU4IDUuMTQ2NDRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxaZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC44NzcwNzUgNy41MDIwN0MwLjg3NzA3NSAzLjg0MzE5IDMuODQzMTkgMC44NzcwNzUgNy41MDIwOCAwLjg3NzA3NUMxMS4xNjA5IDAuODc3MDc1IDE0LjEyNzEgMy44NDMxOSAxNC4xMjcxIDcuNTAyMDdDMTQuMTI3MSAxMS4xNjA5IDExLjE2MDkgMTQuMTI3MSA3LjUwMjA4IDE0LjEyNzFDMy44NDMxOSAxNC4xMjcxIDAuODc3MDc1IDExLjE2MDkgMC44NzcwNzUgNy41MDIwN1pNMS44NDg5OCA3LjAwMDAzQzIuMDg4NiA0LjI2NjM5IDQuMjY2MzkgMi4wODg2IDcuMDAwMDMgMS44NDg5OFY0LjUwMDAzQzcuMDAwMDMgNC43NzYxNyA3LjIyMzg4IDUuMDAwMDMgNy41MDAwMyA1LjAwMDAzQzcuNzc2MTcgNS4wMDAwMyA4LjAwMDAzIDQuNzc2MTcgOC4wMDAwMyA0LjUwMDAzVjEuODQ4NjJDMTAuNzM1NiAyLjA4NjQzIDEyLjkxNTQgNC4yNjUwMiAxMy4xNTUyIDcuMDAwMDNIMTAuNUMxMC4yMjM5IDcuMDAwMDMgMTAgNy4yMjM4OCAxMCA3LjUwMDAzQzEwIDcuNzc2MTcgMTAuMjIzOSA4LjAwMDAzIDEwLjUgOC4wMDAwM0gxMy4xNTU1QzEyLjkxNzYgMTAuNzM2OSAxMC43MzY5IDEyLjkxNzYgOC4wMDAwMyAxMy4xNTU1VjEwLjVDOC4wMDAwMyAxMC4yMjM5IDcuNzc2MTcgMTAgNy41MDAwMyAxMEM3LjIyMzg4IDEwIDcuMDAwMDMgMTAuMjIzOSA3LjAwMDAzIDEwLjVWMTMuMTU1MkM0LjI2NTAyIDEyLjkxNTQgMi4wODY0MyAxMC43MzU2IDEuODQ4NjIgOC4wMDAwM0g0LjUwMDAzQzQuNzc2MTcgOC4wMDAwMyA1LjAwMDAzIDcuNzc2MTcgNS4wMDAwMyA3LjUwMDAzQzUuMDAwMDMgNy4yMjM4OCA0Ljc3NjE3IDcuMDAwMDMgNC41MDAwMyA3LjAwMDAzSDEuODQ4OThaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSwkZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41IDBDNy43NzYxNCAwIDggMC4yMjM4NTggOCAwLjVWMS44MDY4N0MxMC42OTIyIDIuMDkzNSAxMi44MTY3IDQuMjgwMTIgMTMuMDA2OCA3SDE0LjVDMTQuNzc2MSA3IDE1IDcuMjIzODYgMTUgNy41QzE1IDcuNzc2MTQgMTQuNzc2MSA4IDE0LjUgOEgxMi45ODg4QzEyLjcwOTQgMTAuNjI0NCAxMC42MjQ0IDEyLjcwOTQgOCAxMi45ODg4VjE0LjVDOCAxNC43NzYxIDcuNzc2MTQgMTUgNy41IDE1QzcuMjIzODYgMTUgNyAxNC43NzYxIDcgMTQuNVYxMy4wMDY4QzQuMjgwMTIgMTIuODE2NyAyLjA5MzUgMTAuNjkyMiAxLjgwNjg3IDhIMC41QzAuMjIzODU4IDggMCA3Ljc3NjE0IDAgNy41QzAgNy4yMjM4NiAwLjIyMzg1OCA3IDAuNSA3SDEuNzg4ODZDMS45ODM3NiA0LjIxMTY2IDQuMjExNjYgMS45ODM3NiA3IDEuNzg4ODZWMC41QzcgMC4yMjM4NTggNy4yMjM4NiAwIDcuNSAwWk04IDEyLjAzMjJWOS41QzggOS4yMjM4NiA3Ljc3NjE0IDkgNy41IDlDNy4yMjM4NiA5IDcgOS4yMjM4NiA3IDkuNVYxMi4wNTRDNC44MDUxNyAxMS44Njg5IDMuMDQyMjIgMTAuMTY2OCAyLjc2MzQ0IDhINS41QzUuNzc2MTQgOCA2IDcuNzc2MTQgNiA3LjVDNiA3LjIyMzg2IDUuNzc2MTQgNyA1LjUgN0gyLjc0MTdDMi45MzI1MiA0LjczNjYyIDQuNzM2NjIgMi45MzI1MiA3IDIuNzQxN1Y1LjVDNyA1Ljc3NjE0IDcuMjIzODYgNiA3LjUgNkM3Ljc3NjE0IDYgOCA1Ljc3NjE0IDggNS41VjIuNzYzNDRDMTAuMTY2OCAzLjA0MjIyIDExLjg2ODkgNC44MDUxNyAxMi4wNTQgN0g5LjVDOS4yMjM4NiA3IDkgNy4yMjM4NiA5IDcuNUM5IDcuNzc2MTQgOS4yMjM4NiA4IDkuNSA4SDEyLjAzMjJDMTEuNzYyMSAxMC4wOTkxIDEwLjA5OTEgMTEuNzYyMSA4IDEyLjAzMjJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxOZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC42MDkxMyAwLjA2MzQyODdDNC4zOTA4MiAwLjAwODg1MDUgNC4xNjU3NSAwLjEyMzkzIDQuMDgyMTggMC4zMzI4NjdMMy4xNTM4IDIuNjUzOEwwLjgzMjg2NiAzLjU4MjE4QzAuNzAyODg0IDMuNjM0MTcgMC42MDQ1MDQgMy43NDM3IDAuNTY2NzA1IDMuODc4NDlDMC41Mjg5MDYgNC4wMTMyOSAwLjU1NTk5NCA0LjE1OCAwLjYzOTk5MiA0LjI2OTk5TDIuMDExNDggNi4wOTg2NEwxLjA2MzQzIDkuODkwODVDMS4wMDk0NCAxMC4xMDY4IDEuMTIxNDUgMTAuMzI5OCAxLjMyNjkxIDEwLjQxNTRMNC4yMDExNSAxMS42MTNMNS42MjU1NyAxMy43NDk2QzUuNzM0MTIgMTMuOTEyNCA1LjkzNTQ1IDEzLjk4NjQgNi4xMjM2MiAxMy45MzI3TDkuNjIzNjIgMTIuOTMyN0M5LjYyOTg4IDEyLjkzMDkgOS42MzYxMSAxMi45MjkgOS42NDIyOSAxMi45MjY5TDEyLjY0MjMgMTEuOTI2OUMxMi43OTIzIDExLjg3NjkgMTIuOTA1IDExLjc1MTkgMTIuOTM5MyAxMS41OTc2TDEzLjkzOTMgNy4wOTc2MUMxMy45Nzc2IDYuOTI1MDYgMTMuOTExNCA2Ljc0NjA1IDEzLjc3IDYuNjM5OTlMMTEuOTUgNS4yNzQ5OVYyLjk5OTk5QzExLjk1IDIuODI5NTUgMTEuODUzNyAyLjY3MzczIDExLjcwMTIgMi41OTc1TDguNzAxMjQgMS4wOTc1QzguNjcxODcgMS4wODI4MiA4LjY0MDk4IDEuMDcxMzkgOC42MDkxMyAxLjA2MzQzTDQuNjA5MTMgMC4wNjM0Mjg3Wk0xMS40MzIzIDYuMDExNzNMMTIuNzc0OCA3LjAxODU4TDEwLjIxMTkgOS4xNTQyOUMxMC4xNDc2IDkuMjA3ODYgMTAuMDk5NSA5LjI3ODMgMTAuMDczMSA5LjM1NzY5TDkuMjUzODIgMTEuODE1NUw3LjczODQ5IDEwLjg2ODRDNy41Mjc3NCAxMC43MzY3IDcuMjUwMTEgMTAuODAwNyA3LjExODM5IDExLjAxMTVDNi45ODY2NyAxMS4yMjIyIDcuMDUwNzQgMTEuNDk5OSA3LjI2MTQ5IDExLjYzMTZMOC40MDM0MSAxMi4zNDUzTDYuMTkyMjEgMTIuOTc3MUw0Ljg3NDQxIDExLjAwMDRDNC44MjUxMyAxMC45MjY1IDQuNzU1MDggMTAuODY4OCA0LjY3MzA3IDEwLjgzNDZMMi4wMzA0NiA5LjczMzUyTDIuODUxMzQgNi40NDk5OUg0Ljk5OTk5QzUuMjQ4NTIgNi40NDk5OSA1LjQ0OTk5IDYuMjQ4NTIgNS40NDk5OSA1Ljk5OTk5QzUuNDQ5OTkgNS43NTE0NiA1LjI0ODUyIDUuNTQ5OTkgNC45OTk5OSA1LjU0OTk5SDIuNzI0OTlMMS43MTIzIDQuMTk5NzRMMy41MTQwNyAzLjQ3OTAzTDYuMzU3NjkgNC40MjY5QzYuNTM2NTUgNC40ODY1MiA2LjczMzYxIDQuNDI4MzIgNi44NTEzOCA0LjI4MTExTDguNjI0MTMgMi4wNjUxOEwxMS4wNSAzLjI3ODExVjUuMTk1MzNMOC44MzI4NyA2LjA4MjE4QzguNzA5OTYgNi4xMzEzNCA4LjYxNDk0IDYuMjMyMTIgOC41NzMwOCA2LjM1NzY5TDguMDczMDggNy44NTc2OUM3Ljk5NDQ5IDguMDkzNDYgOC4xMjE5MSA4LjM0ODMxIDguMzU3NjkgOC40MjY5QzguNTkzNDYgOC41MDU0OSA4Ljg0ODMxIDguMzc4MDcgOC45MjY5IDguMTQyMjlMOS4zNjA5IDYuODQwMjlMMTEuNDMyMyA2LjAxMTczWk03LjcxMDUyIDEuNzY2NDhMNi4zNDQ2MiAzLjQ3Mzg2TDQuMDk1MDUgMi43MjRMNC43NzE5MiAxLjAzMTgzTDcuNzEwNTIgMS43NjY0OFpNMTAuMjExNSAxMS43ODg1TDEyLjExNiAxMS4xNTM3TDEyLjc3NDUgOC4xOTAzNEwxMC44ODY0IDkuNzYzNzRMMTAuMjExNSAxMS43ODg1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sRmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuMjg4NTYgMC43OTY5MDhDNy40MjI1OCAwLjczNDM2NCA3LjU3NzQyIDAuNzM0MzY0IDcuNzExNDQgMC43OTY5MDhMMTMuNzExNCAzLjU5NjkxQzEzLjg4NzUgMy42NzkwNiAxNCAzLjg1NTc0IDE0IDQuMDVWMTAuOTVDMTQgMTEuMTQ0MyAxMy44ODc1IDExLjMyMDkgMTMuNzExNCAxMS40MDMxTDcuNzExNDQgMTQuMjAzMUM3LjU3NzQyIDE0LjI2NTYgNy40MjI1OCAxNC4yNjU2IDcuMjg4NTYgMTQuMjAzMUwxLjI4ODU2IDExLjQwMzFDMS4xMTI1MiAxMS4zMjA5IDEgMTEuMTQ0MyAxIDEwLjk1VjQuMDVDMSAzLjg1NTc0IDEuMTEyNTIgMy42NzkwNiAxLjI4ODU2IDMuNTk2OTFMNy4yODg1NiAwLjc5NjkwOFpNMiA0LjgwNTc4TDcgNi45MzA3OFYxMi45NjQ5TDIgMTAuNjMxNlY0LjgwNTc4Wk04IDEyLjk2NDlMMTMgMTAuNjMxNlY0LjgwNTc4TDggNi45MzA3OFYxMi45NjQ5Wk03LjUgNi4wNTY3MkwxMi4yNzE5IDQuMDI4NjZMNy41IDEuODAxNzZMMi43MjgwOSA0LjAyODY2TDcuNSA2LjA1NjcyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sV2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuMjkyMjcgMC4wNDg5ODRDMy40NzAzMyAtMC4wMzIzMzggMy42Nzk0NiAtMC4wMDIyODIxNCAzLjgyNzQgMC4xMjU4OTFMMTIuODU4NyA3Ljk1MDI2QzEzLjAxMzQgOC4wODQzMiAxMy4wNzA4IDguMjk5MTYgMTMuMDAzNSA4LjQ5MjUxQzEyLjkzNjIgOC42ODU4NiAxMi43NTc4IDguODE4NjYgMTIuNTUzMyA4LjgyNzY4TDkuMjE4ODcgOC45NzQ3NEwxMS4xNTA0IDEzLjIxODdDMTEuMjY0OCAxMy40NyAxMS4xNTM4IDEzLjc2NjQgMTAuOTAyNiAxMy44ODA4TDguNzUwMjQgMTQuODYxM0M4LjQ5OSAxNC45NzU4IDguMjAyNTUgMTQuODY0OSA4LjA4ODAyIDE0LjYxMzdMNi4xNTMzOSAxMC4zNzAzTDMuODYyNzkgMTIuNzg1NUMzLjcyMTk2IDEyLjkzNCAzLjUwNDg3IDEyLjk4MTcgMy4zMTQ3OSAxMi45MDU5QzMuMTI0NyAxMi44MzAxIDMgMTIuNjQ2MSAzIDEyLjQ0MTRWMC41MDM3OTJDMyAwLjMwODA0OCAzLjExNDIyIDAuMTMwMzA2IDMuMjkyMjcgMC4wNDg5ODRaTTQgMS41OTg1MlYxMS4xODc3TDUuOTM3OTkgOS4xNDQyNUM2LjA1MjM4IDkuMDIzNjMgNi4yMTkyNCA4Ljk2Nzc2IDYuMzgzMTkgOC45OTUxNkM2LjU0NzE1IDkuMDIyNTYgNi42ODY3NyA5LjEyOTY1IDYuNzU1NzMgOS4yODA5TDguNzkwNTYgMTMuNzQ0MUwxMC4wMzMyIDEzLjE3OEw4LjAwMTk1IDguNzE0OTdDNy45MzMxMyA4LjU2Mzc2IDcuOTQzOTEgOC4zODgyNCA4LjAzMDcyIDguMjQ2NTlDOC4xMTc1MyA4LjEwNDk0IDguMjY5MDMgOC4wMTU2NiA4LjQzNSA4LjAwODM0TDExLjI1NDkgNy44ODM5N0w0IDEuNTk4NTJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxVZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC41IDFDNC4yMjM4NiAxIDQgMS4yMjM4NiA0IDEuNUM0IDEuNzc2MTQgNC4yMjM4NiAyIDQuNSAyQzUuNDIyMTUgMiA2LjAzOTkgMi4yMzA1NCA2LjQyMDc1IDIuNTYzNzlDNi43OTI4NiAyLjg4OTM5IDcgMy4zNjYyNiA3IDRWN0g1Ljc1QzUuNDczODYgNyA1LjI1IDcuMjIzODYgNS4yNSA3LjVDNS4yNSA3Ljc3NjE0IDUuNDczODYgOCA1Ljc1IDhIN1YxMUM3IDExLjYzMzcgNi43OTI4NiAxMi4xMTA2IDYuNDIwNzUgMTIuNDM2MkM2LjAzOTkgMTIuNzY5NSA1LjQyMjE1IDEzIDQuNSAxM0M0LjIyMzg2IDEzIDQgMTMuMjIzOSA0IDEzLjVDNCAxMy43NzYxIDQuMjIzODYgMTQgNC41IDE0QzUuNTc3ODUgMTQgNi40NjAxIDEzLjczMDUgNy4wNzkyNSAxMy4xODg4QzcuMjQxNjggMTMuMDQ2NyA3LjM4MTY5IDEyLjg4OTYgNy41IDEyLjcxOThDNy42MTgzMiAxMi44ODk2IDcuNzU4MzIgMTMuMDQ2NyA3LjkyMDc1IDEzLjE4ODhDOC41Mzk5IDEzLjczMDUgOS40MjIxNSAxNCAxMC41IDE0QzEwLjc3NjEgMTQgMTEgMTMuNzc2MSAxMSAxMy41QzExIDEzLjIyMzkgMTAuNzc2MSAxMyAxMC41IDEzQzkuNTc3ODUgMTMgOC45NjAxIDEyLjc2OTUgOC41NzkyNSAxMi40MzYyQzguMjA3MTQgMTIuMTEwNiA4IDExLjYzMzcgOCAxMVY4SDkuMjVDOS41MjYxNCA4IDkuNzUgNy43NzYxNCA5Ljc1IDcuNUM5Ljc1IDcuMjIzODYgOS41MjYxNCA3IDkuMjUgN0g4VjRDOCAzLjM2NjI2IDguMjA3MTQgMi44ODkzOSA4LjU3OTI1IDIuNTYzNzlDOC45NjAxIDIuMjMwNTQgOS41Nzc4NSAyIDEwLjUgMkMxMC43NzYxIDIgMTEgMS43NzYxNCAxMSAxLjVDMTEgMS4yMjM4NiAxMC43NzYxIDEgMTAuNSAxQzkuNDIyMTUgMSA4LjUzOTkgMS4yNjk0NiA3LjkyMDc1IDEuODExMjFDNy43NTgzMiAxLjk1MzMzIDcuNjE4MzIgMi4xMTA0MyA3LjUgMi4yODAyM0M3LjM4MTY4IDIuMTEwNDMgNy4yNDE2OCAxLjk1MzMzIDcuMDc5MjUgMS44MTEyMUM2LjQ2MDEgMS4yNjk0NiA1LjU3Nzg1IDEgNC41IDFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx6ZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNSA3LjVDNSA3LjIyMzg2IDUuMjIzODYgNyA1LjUgN0g5LjVDOS43NzYxNCA3IDEwIDcuMjIzODYgMTAgNy41QzEwIDcuNzc2MTQgOS43NzYxNCA4IDkuNSA4SDUuNUM1LjIyMzg2IDggNSA3Ljc3NjE0IDUgNy41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sR2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuOCAxTDIuNzQ5NjcgMC45OTk5N0MyLjUyMTIyIDAuOTk5NzUyIDIuMzI0MjkgMC45OTk1NjQgMi4xNDk4MyAxLjA0MTQ1QzEuNjAxMzYgMS4xNzMxMiAxLjE3MzEyIDEuNjAxMzYgMS4wNDE0NSAyLjE0OTgzQzAuOTk5NTY0IDIuMzI0MjkgMC45OTk3NTIgMi41MjEyMiAwLjk5OTk3IDIuNzQ5NjdMMSAyLjhWNS4yTDAuOTk5OTcgNS4yNTAzM0MwLjk5OTc1MiA1LjQ3ODc4IDAuOTk5NTY0IDUuNjc1NzIgMS4wNDE0NSA1Ljg1MDE3QzEuMTczMTIgNi4zOTg2NCAxLjYwMTM2IDYuODI2ODggMi4xNDk4MyA2Ljk1ODU2QzIuMzI0MjkgNy4wMDA0NCAyLjUyMTIyIDcuMDAwMjUgMi43NDk2NyA3LjAwMDAzTDIuOCA3SDUuMkw1LjI1MDMzIDcuMDAwMDNDNS40Nzg3OCA3LjAwMDI1IDUuNjc1NzIgNy4wMDA0NCA1Ljg1MDE3IDYuOTU4NTZDNi4zOTg2NCA2LjgyNjg4IDYuODI2ODggNi4zOTg2NCA2Ljk1ODU2IDUuODUwMTdDNy4wMDA0NCA1LjY3NTcyIDcuMDAwMjUgNS40Nzg3OCA3LjAwMDAzIDUuMjUwMzNMNyA1LjJWMi44TDcuMDAwMDMgMi43NDk2N0M3LjAwMDI1IDIuNTIxMjIgNy4wMDA0NCAyLjMyNDI5IDYuOTU4NTYgMi4xNDk4M0M2LjgyNjg4IDEuNjAxMzYgNi4zOTg2NCAxLjE3MzEyIDUuODUwMTcgMS4wNDE0NUM1LjY3NTcyIDAuOTk5NTY0IDUuNDc4NzggMC45OTk3NTIgNS4yNTAzMyAwLjk5OTk3TDUuMiAxSDIuOFpNMi4zODMyOCAyLjAxMzgyQzIuNDI2MzIgMi4wMDM0OCAyLjQ5MjIyIDIgMi44IDJINS4yQzUuNTA3NzkgMiA1LjU3MzY5IDIuMDAzNDggNS42MTY3MiAyLjAxMzgyQzUuNzk5NTUgMi4wNTc3MSA1Ljk0MjI5IDIuMjAwNDUgNS45ODYxOSAyLjM4MzI4QzUuOTk2NTIgMi40MjYzMiA2IDIuNDkyMjIgNiAyLjhWNS4yQzYgNS41MDc3OSA1Ljk5NjUyIDUuNTczNjkgNS45ODYxOSA1LjYxNjcyQzUuOTQyMjkgNS43OTk1NSA1Ljc5OTU1IDUuOTQyMjkgNS42MTY3MiA1Ljk4NjE5QzUuNTczNjkgNS45OTY1MiA1LjUwNzc5IDYgNS4yIDZIMi44QzIuNDkyMjIgNiAyLjQyNjMyIDUuOTk2NTIgMi4zODMyOCA1Ljk4NjE5QzIuMjAwNDUgNS45NDIyOSAyLjA1NzcxIDUuNzk5NTUgMi4wMTM4MiA1LjYxNjcyQzIuMDAzNDggNS41NzM2OSAyIDUuNTA3NzkgMiA1LjJWMi44QzIgMi40OTIyMiAyLjAwMzQ4IDIuNDI2MzIgMi4wMTM4MiAyLjM4MzI4QzIuMDU3NzEgMi4yMDA0NSAyLjIwMDQ1IDIuMDU3NzEgMi4zODMyOCAyLjAxMzgyWk05LjggMUw5Ljc0OTY3IDAuOTk5OTdDOS41MjEyMiAwLjk5OTc1MiA5LjMyNDI5IDAuOTk5NTY0IDkuMTQ5ODMgMS4wNDE0NUM4LjYwMTM2IDEuMTczMTIgOC4xNzMxMiAxLjYwMTM2IDguMDQxNDUgMi4xNDk4M0M3Ljk5OTU2IDIuMzI0MjkgNy45OTk3NSAyLjUyMTIyIDcuOTk5OTcgMi43NDk2N0w4IDIuOFY1LjJMNy45OTk5NyA1LjI1MDMzQzcuOTk5NzUgNS40Nzg3OCA3Ljk5OTU2IDUuNjc1NzIgOC4wNDE0NSA1Ljg1MDE3QzguMTczMTIgNi4zOTg2NCA4LjYwMTM2IDYuODI2ODggOS4xNDk4MyA2Ljk1ODU2QzkuMzI0MjkgNy4wMDA0NCA5LjUyMTIyIDcuMDAwMjUgOS43NDk2NyA3LjAwMDAzTDkuOCA3SDEyLjJMMTIuMjUwMyA3LjAwMDAzQzEyLjQ3ODggNy4wMDAyNSAxMi42NzU3IDcuMDAwNDQgMTIuODUwMiA2Ljk1ODU2QzEzLjM5ODYgNi44MjY4OCAxMy44MjY5IDYuMzk4NjQgMTMuOTU4NiA1Ljg1MDE3QzE0LjAwMDQgNS42NzU3MiAxNC4wMDAzIDUuNDc4NzggMTQgNS4yNTAzM0wxNCA1LjJWMi44TDE0IDIuNzQ5NjdDMTQuMDAwMyAyLjUyMTIyIDE0LjAwMDQgMi4zMjQyOSAxMy45NTg2IDIuMTQ5ODNDMTMuODI2OSAxLjYwMTM2IDEzLjM5ODYgMS4xNzMxMiAxMi44NTAyIDEuMDQxNDVDMTIuNjc1NyAwLjk5OTU2NCAxMi40Nzg4IDAuOTk5NzUyIDEyLjI1MDMgMC45OTk5N0wxMi4yIDFIOS44Wk05LjM4MzI4IDIuMDEzODJDOS40MjYzMiAyLjAwMzQ4IDkuNDkyMjIgMiA5LjggMkgxMi4yQzEyLjUwNzggMiAxMi41NzM3IDIuMDAzNDggMTIuNjE2NyAyLjAxMzgyQzEyLjc5OTUgMi4wNTc3MSAxMi45NDIzIDIuMjAwNDUgMTIuOTg2MiAyLjM4MzI4QzEyLjk5NjUgMi40MjYzMiAxMyAyLjQ5MjIyIDEzIDIuOFY1LjJDMTMgNS41MDc3OSAxMi45OTY1IDUuNTczNjkgMTIuOTg2MiA1LjYxNjcyQzEyLjk0MjMgNS43OTk1NSAxMi43OTk1IDUuOTQyMjkgMTIuNjE2NyA1Ljk4NjE5QzEyLjU3MzcgNS45OTY1MiAxMi41MDc4IDYgMTIuMiA2SDkuOEM5LjQ5MjIyIDYgOS40MjYzMiA1Ljk5NjUyIDkuMzgzMjggNS45ODYxOUM5LjIwMDQ1IDUuOTQyMjkgOS4wNTc3MSA1Ljc5OTU1IDkuMDEzODIgNS42MTY3MkM5LjAwMzQ4IDUuNTczNjkgOSA1LjUwNzc5IDkgNS4yVjIuOEM5IDIuNDkyMjIgOS4wMDM0OCAyLjQyNjMyIDkuMDEzODIgMi4zODMyOEM5LjA1NzcxIDIuMjAwNDUgOS4yMDA0NSAyLjA1NzcxIDkuMzgzMjggMi4wMTM4MlpNMi43NDk2NyA3Ljk5OTk3TDIuOCA4SDUuMkw1LjI1MDMzIDcuOTk5OTdDNS40Nzg3OCA3Ljk5OTc1IDUuNjc1NzIgNy45OTk1NiA1Ljg1MDE3IDguMDQxNDVDNi4zOTg2NCA4LjE3MzEyIDYuODI2ODggOC42MDEzNiA2Ljk1ODU2IDkuMTQ5ODNDNy4wMDA0NCA5LjMyNDI5IDcuMDAwMjUgOS41MjEyMiA3LjAwMDAzIDkuNzQ5NjdMNyA5LjhWMTIuMkw3LjAwMDAzIDEyLjI1MDNDNy4wMDAyNSAxMi40Nzg4IDcuMDAwNDQgMTIuNjc1NyA2Ljk1ODU2IDEyLjg1MDJDNi44MjY4OCAxMy4zOTg2IDYuMzk4NjQgMTMuODI2OSA1Ljg1MDE3IDEzLjk1ODZDNS42NzU3MiAxNC4wMDA0IDUuNDc4NzggMTQuMDAwMyA1LjI1MDMzIDE0TDUuMiAxNEgyLjhMMi43NDk2NyAxNEMyLjUyMTIyIDE0LjAwMDMgMi4zMjQyOSAxNC4wMDA0IDIuMTQ5ODMgMTMuOTU4NkMxLjYwMTM2IDEzLjgyNjkgMS4xNzMxMiAxMy4zOTg2IDEuMDQxNDUgMTIuODUwMkMwLjk5OTU2NCAxMi42NzU3IDAuOTk5NzUyIDEyLjQ3ODggMC45OTk5NyAxMi4yNTAzTDEgMTIuMlY5LjhMMC45OTk5NyA5Ljc0OTY3QzAuOTk5NzUyIDkuNTIxMjIgMC45OTk1NjQgOS4zMjQyOSAxLjA0MTQ1IDkuMTQ5ODNDMS4xNzMxMiA4LjYwMTM2IDEuNjAxMzYgOC4xNzMxMiAyLjE0OTgzIDguMDQxNDVDMi4zMjQyOSA3Ljk5OTU2IDIuNTIxMjIgNy45OTk3NSAyLjc0OTY3IDcuOTk5OTdaTTIuOCA5QzIuNDkyMjIgOSAyLjQyNjMyIDkuMDAzNDggMi4zODMyOCA5LjAxMzgyQzIuMjAwNDUgOS4wNTc3MSAyLjA1NzcxIDkuMjAwNDUgMi4wMTM4MiA5LjM4MzI4QzIuMDAzNDggOS40MjYzMiAyIDkuNDkyMjIgMiA5LjhWMTIuMkMyIDEyLjUwNzggMi4wMDM0OCAxMi41NzM3IDIuMDEzODIgMTIuNjE2N0MyLjA1NzcxIDEyLjc5OTUgMi4yMDA0NSAxMi45NDIzIDIuMzgzMjggMTIuOTg2MkMyLjQyNjMyIDEyLjk5NjUgMi40OTIyMiAxMyAyLjggMTNINS4yQzUuNTA3NzkgMTMgNS41NzM2OSAxMi45OTY1IDUuNjE2NzIgMTIuOTg2MkM1Ljc5OTU1IDEyLjk0MjMgNS45NDIyOSAxMi43OTk1IDUuOTg2MTkgMTIuNjE2N0M1Ljk5NjUyIDEyLjU3MzcgNiAxMi41MDc4IDYgMTIuMlY5LjhDNiA5LjQ5MjIyIDUuOTk2NTIgOS40MjYzMiA1Ljk4NjE5IDkuMzgzMjhDNS45NDIyOSA5LjIwMDQ1IDUuNzk5NTUgOS4wNTc3MSA1LjYxNjcyIDkuMDEzODJDNS41NzM2OSA5LjAwMzQ4IDUuNTA3NzkgOSA1LjIgOUgyLjhaTTkuOCA4TDkuNzQ5NjcgNy45OTk5N0M5LjUyMTIyIDcuOTk5NzUgOS4zMjQyOSA3Ljk5OTU2IDkuMTQ5ODMgOC4wNDE0NUM4LjYwMTM2IDguMTczMTIgOC4xNzMxMiA4LjYwMTM2IDguMDQxNDUgOS4xNDk4M0M3Ljk5OTU2IDkuMzI0MjkgNy45OTk3NSA5LjUyMTIyIDcuOTk5OTcgOS43NDk2N0w4IDkuOFYxMi4yTDcuOTk5OTcgMTIuMjUwM0M3Ljk5OTc1IDEyLjQ3ODggNy45OTk1NiAxMi42NzU3IDguMDQxNDUgMTIuODUwMkM4LjE3MzEyIDEzLjM5ODYgOC42MDEzNiAxMy44MjY5IDkuMTQ5ODMgMTMuOTU4NkM5LjMyNDI5IDE0LjAwMDQgOS41MjEyMiAxNC4wMDAzIDkuNzQ5NjcgMTRMOS44IDE0SDEyLjJMMTIuMjUwMyAxNEMxMi40Nzg4IDE0LjAwMDMgMTIuNjc1NyAxNC4wMDA0IDEyLjg1MDIgMTMuOTU4NkMxMy4zOTg2IDEzLjgyNjkgMTMuODI2OSAxMy4zOTg2IDEzLjk1ODYgMTIuODUwMkMxNC4wMDA0IDEyLjY3NTcgMTQuMDAwMyAxMi40Nzg4IDE0IDEyLjI1MDNMMTQgMTIuMlY5LjhMMTQgOS43NDk2N0MxNC4wMDAzIDkuNTIxMjIgMTQuMDAwNCA5LjMyNDI5IDEzLjk1ODYgOS4xNDk4M0MxMy44MjY5IDguNjAxMzYgMTMuMzk4NiA4LjE3MzEyIDEyLjg1MDIgOC4wNDE0NUMxMi42NzU3IDcuOTk5NTYgMTIuNDc4OCA3Ljk5OTc1IDEyLjI1MDMgNy45OTk5N0wxMi4yIDhIOS44Wk05LjM4MzI4IDkuMDEzODJDOS40MjYzMiA5LjAwMzQ4IDkuNDkyMjIgOSA5LjggOUgxMi4yQzEyLjUwNzggOSAxMi41NzM3IDkuMDAzNDggMTIuNjE2NyA5LjAxMzgyQzEyLjc5OTUgOS4wNTc3MSAxMi45NDIzIDkuMjAwNDUgMTIuOTg2MiA5LjM4MzI4QzEyLjk5NjUgOS40MjYzMiAxMyA5LjQ5MjIyIDEzIDkuOFYxMi4yQzEzIDEyLjUwNzggMTIuOTk2NSAxMi41NzM3IDEyLjk4NjIgMTIuNjE2N0MxMi45NDIzIDEyLjc5OTUgMTIuNzk5NSAxMi45NDIzIDEyLjYxNjcgMTIuOTg2MkMxMi41NzM3IDEyLjk5NjUgMTIuNTA3OCAxMyAxMi4yIDEzSDkuOEM5LjQ5MjIyIDEzIDkuNDI2MzIgMTIuOTk2NSA5LjM4MzI4IDEyLjk4NjJDOS4yMDA0NSAxMi45NDIzIDkuMDU3NzEgMTIuNzk5NSA5LjAxMzgyIDEyLjYxNjdDOS4wMDM0OCAxMi41NzM3IDkgMTIuNTA3OCA5IDEyLjJWOS44QzkgOS40OTIyMiA5LjAwMzQ4IDkuNDI2MzIgOS4wMTM4MiA5LjM4MzI4QzkuMDU3NzEgOS4yMDA0NSA5LjIwMDQ1IDkuMDU3NzEgOS4zODMyOCA5LjAxMzgyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sS2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuMDAwMTQgMi43Mzg5NUMzLjAwMDE0IDIuOTQ2OTggMi43NjA4NyAzLjA2NDAxIDIuNTk2NjYgMi45MzYyOEwxLjAwMzg2IDEuNjk3NDRDMC44NzUxNzcgMS41OTczNSAwLjg3NTE3NyAxLjQwMjg2IDEuMDAzODYgMS4zMDI3N0wyLjU5NjY2IDAuMDYzOTI4QzIuNzYwODcgLTAuMDYzNzk0NCAzLjAwMDE0IDAuMDUzMjI5MyAzLjAwMDE0IDAuMjYxMjY2VjEuMDAwMTJIOS4wMDAwOVYwLjI2MTI5NkM5LjAwMDA5IDAuMDUzMjU5MSA5LjIzOTM2IC0wLjA2Mzc2NDYgOS40MDM1OCAwLjA2Mzk1NzhMMTAuOTk2NCAxLjMwMjhDMTEuMTI1MSAxLjQwMjg5IDExLjEyNTEgMS41OTczOCAxMC45OTY0IDEuNjk3NDdMOS40MDM1OCAyLjkzNjMxQzkuMjM5MzYgMy4wNjQwNCA5LjAwMDA5IDIuOTQ3MDEgOS4wMDAwOSAyLjczODk4VjIuMDAwMTJIMy4wMDAxNFYyLjczODk1Wk05LjUwMDAyIDQuOTk5OThIMi41MDAwMkMyLjIyMzg4IDQuOTk5OTggMi4wMDAwMiA1LjIyMzg0IDIuMDAwMDIgNS40OTk5OFYxMi41QzIuMDAwMDIgMTIuNzc2MSAyLjIyMzg4IDEzIDIuNTAwMDIgMTNIOS41MDAwMkM5Ljc3NjE2IDEzIDEwIDEyLjc3NjEgMTAgMTIuNVY1LjQ5OTk4QzEwIDUuMjIzODQgOS43NzYxNiA0Ljk5OTk4IDkuNTAwMDIgNC45OTk5OFpNMi41MDAwMiAzLjk5OTk4QzEuNjcxNTkgMy45OTk5OCAxLjAwMDAyIDQuNjcxNTYgMS4wMDAwMiA1LjQ5OTk4VjEyLjVDMS4wMDAwMiAxMy4zMjg0IDEuNjcxNTkgMTQgMi41MDAwMiAxNEg5LjUwMDAyQzEwLjMyODQgMTQgMTEgMTMuMzI4NCAxMSAxMi41VjUuNDk5OThDMTEgNC42NzE1NiAxMC4zMjg0IDMuOTk5OTggOS41MDAwMiAzLjk5OTk4SDIuNTAwMDJaTTE0LjczODkgNi4wMDAwMUgxNFYxMkgxNC43Mzg5QzE0Ljk0NjkgMTIgMTUuMDY0IDEyLjIzOTMgMTQuOTM2MiAxMi40MDM1TDEzLjY5NzQgMTMuOTk2M0MxMy41OTczIDE0LjEyNSAxMy40MDI4IDE0LjEyNSAxMy4zMDI3IDEzLjk5NjNMMTIuMDYzOSAxMi40MDM1QzExLjkzNjIgMTIuMjM5MyAxMi4wNTMyIDEyIDEyLjI2MTIgMTJIMTNWNi4wMDAwMUgxMi4yNjEyQzEyLjA1MzIgNi4wMDAwMSAxMS45MzYxIDUuNzYwNzQgMTIuMDYzOSA1LjU5NjUzTDEzLjMwMjcgNC4wMDM3M0MxMy40MDI4IDMuODc1MDUgMTMuNTk3MyAzLjg3NTA1IDEzLjY5NzQgNC4wMDM3NEwxNC45MzYyIDUuNTk2NTNDMTUuMDYzOSA1Ljc2MDc0IDE0Ljk0NjkgNi4wMDAwMSAxNC43Mzg5IDYuMDAwMDFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxxZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTk5MSAwLjg3NzA3NUMzLjg0MjIyIDAuODc3MDc1IDAuODc3MDc1IDMuODQyMjIgMC44NzcwNzUgNy40OTk5MUMwLjg3NzA3NSAxMS4xNTc2IDMuODQyMjIgMTQuMTIyNyA3LjQ5OTkxIDE0LjEyMjdDMTEuMTU3NiAxNC4xMjI3IDE0LjEyMjcgMTEuMTU3NiAxNC4xMjI3IDcuNDk5OTFDMTQuMTIyNyAzLjg0MjIyIDExLjE1NzYgMC44NzcwNzUgNy40OTk5MSAwLjg3NzA3NVpNMS44MjcwOCA3LjQ5OTkxQzEuODI3MDggNC4zNjY4OSA0LjM2Njg5IDEuODI3MDcgNy40OTk5MSAxLjgyNzA3QzEwLjYzMjkgMS44MjcwNyAxMy4xNzI3IDQuMzY2ODkgMTMuMTcyNyA3LjQ5OTkxQzEzLjE3MjcgMTAuNjMyOSAxMC42MzI5IDEzLjE3MjcgNy40OTk5MSAxMy4xNzI3QzQuMzY2ODkgMTMuMTcyNyAxLjgyNzA4IDEwLjYzMjkgMS44MjcwOCA3LjQ5OTkxWk04LjM3Mjg3IDcuNTAwMDZDOC4zNzI4NyA3Ljk4MTk2IDcuOTgyMjEgOC4zNzI2MyA3LjUwMDMgOC4zNzI2M0M3LjAxODM5IDguMzcyNjMgNi42Mjc3MyA3Ljk4MTk2IDYuNjI3NzMgNy41MDAwNkM2LjYyNzczIDcuMDE4MTUgNy4wMTgzOSA2LjYyNzQ4IDcuNTAwMyA2LjYyNzQ4QzcuOTgyMjEgNi42Mjc0OCA4LjM3Mjg3IDcuMDE4MTUgOC4zNzI4NyA3LjUwMDA2Wk05LjMyMjg3IDcuNTAwMDZDOS4zMjI4NyA4LjUwNjY0IDguNTA2ODggOS4zMjI2MyA3LjUwMDMgOS4zMjI2M0M2LjQ5MzcyIDkuMzIyNjMgNS42Nzc3MyA4LjUwNjY0IDUuNjc3NzMgNy41MDAwNkM1LjY3NzczIDYuNDkzNDggNi40OTM3MiA1LjY3NzQ4IDcuNTAwMyA1LjY3NzQ4QzguNTA2ODggNS42Nzc0OCA5LjMyMjg3IDYuNDkzNDggOS4zMjI4NyA3LjUwMDA2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sWWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIgNy41QzIgNy4yMjM4NiAyLjIyMzg2IDcgMi41IDdIMTIuNUMxMi43NzYxIDcgMTMgNy4yMjM4NiAxMyA3LjVDMTMgNy43NzYxNCAxMi43NzYxIDggMTIuNSA4SDIuNUMyLjIyMzg2IDggMiA3Ljc3NjE0IDIgNy41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sSmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNSAyQzcuNzc2MTQgMiA4IDIuMjIzODYgOCAyLjVMOCAxMi41QzggMTIuNzc2MSA3Ljc3NjE0IDEzIDcuNSAxM0M3LjIyMzg2IDEzIDcgMTIuNzc2MSA3IDEyLjVMNyAyLjVDNyAyLjIyMzg2IDcuMjIzODYgMiA3LjUgMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFhlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUgOS4xMjVDOC4zOTc0NiA5LjEyNSA5LjEyNSA4LjM5NzQ2IDkuMTI1IDcuNUM5LjEyNSA2LjYwMjU0IDguMzk3NDYgNS44NzUgNy41IDUuODc1QzYuNjAyNTQgNS44NzUgNS44NzUgNi42MDI1NCA1Ljg3NSA3LjVDNS44NzUgOC4zOTc0NiA2LjYwMjU0IDkuMTI1IDcuNSA5LjEyNVpNNy41IDEwLjEyNUM4Ljk0OTc1IDEwLjEyNSAxMC4xMjUgOC45NDk3NSAxMC4xMjUgNy41QzEwLjEyNSA2LjA1MDI1IDguOTQ5NzUgNC44NzUgNy41IDQuODc1QzYuMDUwMjUgNC44NzUgNC44NzUgNi4wNTAyNSA0Ljg3NSA3LjVDNC44NzUgOC45NDk3NSA2LjA1MDI1IDEwLjEyNSA3LjUgMTAuMTI1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTkuODc1IDcuNUM5Ljg3NSA4LjgxMTY4IDguODExNjggOS44NzUgNy41IDkuODc1QzYuMTg4MzIgOS44NzUgNS4xMjUgOC44MTE2OCA1LjEyNSA3LjVDNS4xMjUgNi4xODgzMiA2LjE4ODMyIDUuMTI1IDcuNSA1LjEyNUM4LjgxMTY4IDUuMTI1IDkuODc1IDYuMTg4MzIgOS44NzUgNy41WlwiLGZpbGw6bn0pKX0sZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNjI1IDcuNUMzLjYyNSA4LjEyMTMyIDMuMTIxMzIgOC42MjUgMi41IDguNjI1QzEuODc4NjggOC42MjUgMS4zNzUgOC4xMjEzMiAxLjM3NSA3LjVDMS4zNzUgNi44Nzg2OCAxLjg3ODY4IDYuMzc1IDIuNSA2LjM3NUMzLjEyMTMyIDYuMzc1IDMuNjI1IDYuODc4NjggMy42MjUgNy41Wk04LjYyNSA3LjVDOC42MjUgOC4xMjEzMiA4LjEyMTMyIDguNjI1IDcuNSA4LjYyNUM2Ljg3ODY4IDguNjI1IDYuMzc1IDguMTIxMzIgNi4zNzUgNy41QzYuMzc1IDYuODc4NjggNi44Nzg2OCA2LjM3NSA3LjUgNi4zNzVDOC4xMjEzMiA2LjM3NSA4LjYyNSA2Ljg3ODY4IDguNjI1IDcuNVpNMTIuNSA4LjYyNUMxMy4xMjEzIDguNjI1IDEzLjYyNSA4LjEyMTMyIDEzLjYyNSA3LjVDMTMuNjI1IDYuODc4NjggMTMuMTIxMyA2LjM3NSAxMi41IDYuMzc1QzExLjg3ODcgNi4zNzUgMTEuMzc1IDYuODc4NjggMTEuMzc1IDcuNUMxMS4zNzUgOC4xMjEzMiAxMS44Nzg3IDguNjI1IDEyLjUgOC42MjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx0dD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC42MjUgMi41QzguNjI1IDMuMTIxMzIgOC4xMjEzMiAzLjYyNSA3LjUgMy42MjVDNi44Nzg2OCAzLjYyNSA2LjM3NSAzLjEyMTMyIDYuMzc1IDIuNUM2LjM3NSAxLjg3ODY4IDYuODc4NjggMS4zNzUgNy41IDEuMzc1QzguMTIxMzIgMS4zNzUgOC42MjUgMS44Nzg2OCA4LjYyNSAyLjVaTTguNjI1IDcuNUM4LjYyNSA4LjEyMTMyIDguMTIxMzIgOC42MjUgNy41IDguNjI1QzYuODc4NjggOC42MjUgNi4zNzUgOC4xMjEzMiA2LjM3NSA3LjVDNi4zNzUgNi44Nzg2OCA2Ljg3ODY4IDYuMzc1IDcuNSA2LjM3NUM4LjEyMTMyIDYuMzc1IDguNjI1IDYuODc4NjggOC42MjUgNy41Wk03LjUgMTMuNjI1QzguMTIxMzIgMTMuNjI1IDguNjI1IDEzLjEyMTMgOC42MjUgMTIuNUM4LjYyNSAxMS44Nzg3IDguMTIxMzIgMTEuMzc1IDcuNSAxMS4zNzVDNi44Nzg2OCAxMS4zNzUgNi4zNzUgMTEuODc4NyA2LjM3NSAxMi41QzYuMzc1IDEzLjEyMTMgNi44Nzg2OCAxMy42MjUgNy41IDEzLjYyNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG50PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjg1MzU1IDIuMTQ2NDVDMy42NTgyOSAxLjk1MTE4IDMuMzQxNzEgMS45NTExOCAzLjE0NjQ1IDIuMTQ2NDVDMi45NTExOCAyLjM0MTcxIDIuOTUxMTggMi42NTgyOSAzLjE0NjQ1IDIuODUzNTVMNy4xNDY0NSA2Ljg1MzU1QzcuMzQxNzEgNy4wNDg4MiA3LjY1ODI5IDcuMDQ4ODIgNy44NTM1NSA2Ljg1MzU1TDExLjg1MzYgMi44NTM1NUMxMi4wNDg4IDIuNjU4MjkgMTIuMDQ4OCAyLjM0MTcxIDExLjg1MzYgMi4xNDY0NUMxMS42NTgzIDEuOTUxMTggMTEuMzQxNyAxLjk1MTE4IDExLjE0NjQgMi4xNDY0NUw3LjUgNS43OTI4OUwzLjg1MzU1IDIuMTQ2NDVaTTMuODUzNTUgOC4xNDY0NUMzLjY1ODI5IDcuOTUxMTggMy4zNDE3MSA3Ljk1MTE4IDMuMTQ2NDUgOC4xNDY0NUMyLjk1MTE4IDguMzQxNzEgMi45NTExOCA4LjY1ODI5IDMuMTQ2NDUgOC44NTM1NUw3LjE0NjQ1IDEyLjg1MzZDNy4zNDE3MSAxMy4wNDg4IDcuNjU4MjkgMTMuMDQ4OCA3Ljg1MzU1IDEyLjg1MzZMMTEuODUzNiA4Ljg1MzU1QzEyLjA0ODggOC42NTgyOSAxMi4wNDg4IDguMzQxNzEgMTEuODUzNiA4LjE0NjQ1QzExLjY1ODMgNy45NTExOCAxMS4zNDE3IDcuOTUxMTggMTEuMTQ2NCA4LjE0NjQ1TDcuNSAxMS43OTI5TDMuODUzNTUgOC4xNDY0NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHJ0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02Ljg1MzU1IDMuODUzNTVDNy4wNDg4MiAzLjY1ODI5IDcuMDQ4ODIgMy4zNDE3MSA2Ljg1MzU1IDMuMTQ2NDVDNi42NTgyOSAyLjk1MTE4IDYuMzQxNzEgMi45NTExOCA2LjE0NjQ1IDMuMTQ2NDVMMi4xNDY0NSA3LjE0NjQ1QzEuOTUxMTggNy4zNDE3MSAxLjk1MTE4IDcuNjU4MjkgMi4xNDY0NSA3Ljg1MzU1TDYuMTQ2NDUgMTEuODUzNkM2LjM0MTcxIDEyLjA0ODggNi42NTgyOSAxMi4wNDg4IDYuODUzNTUgMTEuODUzNkM3LjA0ODgyIDExLjY1ODMgNy4wNDg4MiAxMS4zNDE3IDYuODUzNTUgMTEuMTQ2NEwzLjIwNzExIDcuNUw2Ljg1MzU1IDMuODUzNTVaTTEyLjg1MzYgMy44NTM1NUMxMy4wNDg4IDMuNjU4MjkgMTMuMDQ4OCAzLjM0MTcxIDEyLjg1MzYgMy4xNDY0NUMxMi42NTgzIDIuOTUxMTggMTIuMzQxNyAyLjk1MTE4IDEyLjE0NjQgMy4xNDY0NUw4LjE0NjQ1IDcuMTQ2NDVDNy45NTExOCA3LjM0MTcxIDcuOTUxMTggNy42NTgyOSA4LjE0NjQ1IDcuODUzNTVMMTIuMTQ2NCAxMS44NTM2QzEyLjM0MTcgMTIuMDQ4OCAxMi42NTgzIDEyLjA0ODggMTIuODUzNiAxMS44NTM2QzEzLjA0ODggMTEuNjU4MyAxMy4wNDg4IDExLjM0MTcgMTIuODUzNiAxMS4xNDY0TDkuMjA3MTEgNy41TDEyLjg1MzYgMy44NTM1NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG90PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjE0NjQ1IDExLjE0NjRDMS45NTExOCAxMS4zNDE3IDEuOTUxMTggMTEuNjU4MyAyLjE0NjQ1IDExLjg1MzZDMi4zNDE3MSAxMi4wNDg4IDIuNjU4MjkgMTIuMDQ4OCAyLjg1MzU1IDExLjg1MzZMNi44NTM1NSA3Ljg1MzU1QzcuMDQ4ODIgNy42NTgyOSA3LjA0ODgyIDcuMzQxNzEgNi44NTM1NSA3LjE0NjQ1TDIuODUzNTUgMy4xNDY0NUMyLjY1ODI5IDIuOTUxMTggMi4zNDE3MSAyLjk1MTE4IDIuMTQ2NDUgMy4xNDY0NUMxLjk1MTE4IDMuMzQxNzEgMS45NTExOCAzLjY1ODI5IDIuMTQ2NDUgMy44NTM1NUw1Ljc5Mjg5IDcuNUwyLjE0NjQ1IDExLjE0NjRaTTguMTQ2NDUgMTEuMTQ2NEM3Ljk1MTE4IDExLjM0MTcgNy45NTExOCAxMS42NTgzIDguMTQ2NDUgMTEuODUzNkM4LjM0MTcxIDEyLjA0ODggOC42NTgyOSAxMi4wNDg4IDguODUzNTUgMTEuODUzNkwxMi44NTM2IDcuODUzNTVDMTMuMDQ4OCA3LjY1ODI5IDEzLjA0ODggNy4zNDE3MSAxMi44NTM2IDcuMTQ2NDVMOC44NTM1NSAzLjE0NjQ1QzguNjU4MjkgMi45NTExOCA4LjM0MTcxIDIuOTUxMTggOC4xNDY0NSAzLjE0NjQ1QzcuOTUxMTggMy4zNDE3MSA3Ljk1MTE4IDMuNjU4MjkgOC4xNDY0NSAzLjg1MzU1TDExLjc5MjkgNy41TDguMTQ2NDUgMTEuMTQ2NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGF0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMS4xNDY0IDYuODUzNTVDMTEuMzQxNyA3LjA0ODgyIDExLjY1ODMgNy4wNDg4MiAxMS44NTM2IDYuODUzNTVDMTIuMDQ4OCA2LjY1ODI5IDEyLjA0ODggNi4zNDE3MSAxMS44NTM2IDYuMTQ2NDVMNy44NTM1NSAyLjE0NjQ1QzcuNjU4MjkgMS45NTExOCA3LjM0MTcxIDEuOTUxMTggNy4xNDY0NSAyLjE0NjQ1TDMuMTQ2NDUgNi4xNDY0NUMyLjk1MTE4IDYuMzQxNzEgMi45NTExOCA2LjY1ODI5IDMuMTQ2NDUgNi44NTM1NUMzLjM0MTcxIDcuMDQ4ODIgMy42NTgyOSA3LjA0ODgyIDMuODUzNTUgNi44NTM1NUw3LjUgMy4yMDcxMUwxMS4xNDY0IDYuODUzNTVaTTExLjE0NjQgMTIuODUzNkMxMS4zNDE3IDEzLjA0ODggMTEuNjU4MyAxMy4wNDg4IDExLjg1MzYgMTIuODUzNkMxMi4wNDg4IDEyLjY1ODMgMTIuMDQ4OCAxMi4zNDE3IDExLjg1MzYgMTIuMTQ2NEw3Ljg1MzU1IDguMTQ2NDVDNy42NTgyOSA3Ljk1MTE4IDcuMzQxNzEgNy45NTExOCA3LjE0NjQ1IDguMTQ2NDVMMy4xNDY0NSAxMi4xNDY0QzIuOTUxMTggMTIuMzQxNyAyLjk1MTE4IDEyLjY1ODMgMy4xNDY0NSAxMi44NTM2QzMuMzQxNzEgMTMuMDQ4OCAzLjY1ODI5IDEzLjA0ODggMy44NTM1NSAxMi44NTM2TDcuNSA5LjIwNzExTDExLjE0NjQgMTIuODUzNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGl0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUwMDA1IDEuMDQ5OTlDNy43NDg1OCAxLjA0OTk5IDcuOTUwMDUgMS4yNTE0NiA3Ljk1MDA1IDEuNDk5OTlWOC40MTM1OUwxMC4xODE5IDYuMTgxNzlDMTAuMzU3NiA2LjAwNjA1IDEwLjY0MjUgNi4wMDYwNSAxMC44MTgyIDYuMTgxNzlDMTAuOTk0IDYuMzU3NTMgMTAuOTk0IDYuNjQyNDUgMTAuODE4MiA2LjgxODE5TDcuODE4MjUgOS44MTgxOUM3LjY0MjUxIDkuOTkzOTIgNy4zNTc1OSA5Ljk5MzkyIDcuMTgxODUgOS44MTgxOUw0LjE4MTg1IDYuODE4MTlDNC4wMDYxMSA2LjY0MjQ1IDQuMDA2MTEgNi4zNTc1MyA0LjE4MTg1IDYuMTgxNzlDNC4zNTc1OSA2LjAwNjA1IDQuNjQyNTEgNi4wMDYwNSA0LjgxODI1IDYuMTgxNzlMNy4wNTAwNSA4LjQxMzU5VjEuNDk5OTlDNy4wNTAwNSAxLjI1MTQ2IDcuMjUxNTIgMS4wNDk5OSA3LjUwMDA1IDEuMDQ5OTlaTTIuNSAxMEMyLjc3NjE0IDEwIDMgMTAuMjIzOSAzIDEwLjVWMTJDMyAxMi41NTM5IDMuNDQ1NjUgMTMgMy45OTYzNSAxM0gxMS4wMDEyQzExLjU1MjkgMTMgMTIgMTIuNTUyOCAxMiAxMlYxMC41QzEyIDEwLjIyMzkgMTIuMjIzOSAxMCAxMi41IDEwQzEyLjc3NjEgMTAgMTMgMTAuMjIzOSAxMyAxMC41VjEyQzEzIDEzLjEwNDEgMTIuMTA2MiAxNCAxMS4wMDEyIDE0SDMuOTk2MzVDMi44OTAxOSAxNCAyIDEzLjEwMyAyIDEyVjEwLjVDMiAxMC4yMjM5IDIuMjIzODYgMTAgMi41IDEwWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiNC41XCIsY3k6XCIyLjVcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiNC41XCIsY3k6XCI0LjVcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiNC41XCIsY3k6XCI2LjQ5OVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI0LjVcIixjeTpcIjguNDk5XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjQuNVwiLGN5OlwiMTAuNDk4XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjQuNVwiLGN5OlwiMTIuNDk4XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjYuNVwiLGN5OlwiMi41XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjYuNVwiLGN5OlwiNC41XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjYuNVwiLGN5OlwiNi40OTlcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiNi41XCIsY3k6XCI4LjQ5OVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI2LjVcIixjeTpcIjEwLjQ5OFwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI2LjVcIixjeTpcIjEyLjQ5OFwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI4LjQ5OVwiLGN5OlwiMi41XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjguNDk5XCIsY3k6XCI0LjVcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiOC40OTlcIixjeTpcIjYuNDk5XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjguNDk5XCIsY3k6XCI4LjQ5OVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI4LjQ5OVwiLGN5OlwiMTAuNDk4XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjguNDk5XCIsY3k6XCIxMi40OThcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiMTAuNDk5XCIsY3k6XCIyLjVcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiMTAuNDk5XCIsY3k6XCI0LjVcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiMTAuNDk5XCIsY3k6XCI2LjQ5OVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCIxMC40OTlcIixjeTpcIjguNDk5XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjEwLjQ5OVwiLGN5OlwiMTAuNDk4XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjEwLjQ5OVwiLGN5OlwiMTIuNDk4XCIscjpcIi42XCIsZmlsbDpufSkpfSxzdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNS41IDQuNjI1QzYuMTIxMzIgNC42MjUgNi42MjUgNC4xMjEzMiA2LjYyNSAzLjVDNi42MjUgMi44Nzg2OCA2LjEyMTMyIDIuMzc1IDUuNSAyLjM3NUM0Ljg3ODY4IDIuMzc1IDQuMzc1IDIuODc4NjggNC4zNzUgMy41QzQuMzc1IDQuMTIxMzIgNC44Nzg2OCA0LjYyNSA1LjUgNC42MjVaTTkuNSA0LjYyNUMxMC4xMjEzIDQuNjI1IDEwLjYyNSA0LjEyMTMyIDEwLjYyNSAzLjVDMTAuNjI1IDIuODc4NjggMTAuMTIxMyAyLjM3NSA5LjUgMi4zNzVDOC44Nzg2OCAyLjM3NSA4LjM3NSAyLjg3ODY4IDguMzc1IDMuNUM4LjM3NSA0LjEyMTMyIDguODc4NjggNC42MjUgOS41IDQuNjI1Wk0xMC42MjUgNy41QzEwLjYyNSA4LjEyMTMyIDEwLjEyMTMgOC42MjUgOS41IDguNjI1QzguODc4NjggOC42MjUgOC4zNzUgOC4xMjEzMiA4LjM3NSA3LjVDOC4zNzUgNi44Nzg2OCA4Ljg3ODY4IDYuMzc1IDkuNSA2LjM3NUMxMC4xMjEzIDYuMzc1IDEwLjYyNSA2Ljg3ODY4IDEwLjYyNSA3LjVaTTUuNSA4LjYyNUM2LjEyMTMyIDguNjI1IDYuNjI1IDguMTIxMzIgNi42MjUgNy41QzYuNjI1IDYuODc4NjggNi4xMjEzMiA2LjM3NSA1LjUgNi4zNzVDNC44Nzg2OCA2LjM3NSA0LjM3NSA2Ljg3ODY4IDQuMzc1IDcuNUM0LjM3NSA4LjEyMTMyIDQuODc4NjggOC42MjUgNS41IDguNjI1Wk0xMC42MjUgMTEuNUMxMC42MjUgMTIuMTIxMyAxMC4xMjEzIDEyLjYyNSA5LjUgMTIuNjI1QzguODc4NjggMTIuNjI1IDguMzc1IDEyLjEyMTMgOC4zNzUgMTEuNUM4LjM3NSAxMC44Nzg3IDguODc4NjggMTAuMzc1IDkuNSAxMC4zNzVDMTAuMTIxMyAxMC4zNzUgMTAuNjI1IDEwLjg3ODcgMTAuNjI1IDExLjVaTTUuNSAxMi42MjVDNi4xMjEzMiAxMi42MjUgNi42MjUgMTIuMTIxMyA2LjYyNSAxMS41QzYuNjI1IDEwLjg3ODcgNi4xMjEzMiAxMC4zNzUgNS41IDEwLjM3NUM0Ljg3ODY4IDEwLjM3NSA0LjM3NSAxMC44Nzg3IDQuMzc1IDExLjVDNC4zNzUgMTIuMTIxMyA0Ljg3ODY4IDEyLjYyNSA1LjUgMTIuNjI1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sY3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuNDk5OTggNC4wOTk5OEMyLjI3OTA2IDQuMDk5OTggMi4wOTk5OCA0LjI3OTA2IDIuMDk5OTggNC40OTk5OEMyLjA5OTk4IDQuNzIwODkgMi4yNzkwNiA0Ljg5OTk4IDIuNDk5OTggNC44OTk5OEgxMi41QzEyLjcyMDkgNC44OTk5OCAxMi45IDQuNzIwODkgMTIuOSA0LjQ5OTk4QzEyLjkgNC4yNzkwNiAxMi43MjA5IDQuMDk5OTggMTIuNSA0LjA5OTk4SDIuNDk5OThaTTIuNDk5OTggNi4wOTk5OEMyLjI3OTA2IDYuMDk5OTggMi4wOTk5OCA2LjI3OTA2IDIuMDk5OTggNi40OTk5OEMyLjA5OTk4IDYuNzIwODkgMi4yNzkwNiA2Ljg5OTk4IDIuNDk5OTggNi44OTk5OEgxMi41QzEyLjcyMDkgNi44OTk5OCAxMi45IDYuNzIwODkgMTIuOSA2LjQ5OTk4QzEyLjkgNi4yNzkwNiAxMi43MjA5IDYuMDk5OTggMTIuNSA2LjA5OTk4SDIuNDk5OThaTTIuMDk5OTggOC40OTk5OEMyLjA5OTk4IDguMjc5MDYgMi4yNzkwNiA4LjA5OTk4IDIuNDk5OTggOC4wOTk5OEgxMi41QzEyLjcyMDkgOC4wOTk5OCAxMi45IDguMjc5MDYgMTIuOSA4LjQ5OTk4QzEyLjkgOC43MjA4OSAxMi43MjA5IDguODk5OTggMTIuNSA4Ljg5OTk4SDIuNDk5OThDMi4yNzkwNiA4Ljg5OTk4IDIuMDk5OTggOC43MjA4OSAyLjA5OTk4IDguNDk5OThaTTIuNDk5OTggMTAuMUMyLjI3OTA2IDEwLjEgMi4wOTk5OCAxMC4yNzkxIDIuMDk5OTggMTAuNUMyLjA5OTk4IDEwLjcyMDkgMi4yNzkwNiAxMC45IDIuNDk5OTggMTAuOUgxMi41QzEyLjcyMDkgMTAuOSAxMi45IDEwLjcyMDkgMTIuOSAxMC41QzEyLjkgMTAuMjc5MSAxMi43MjA5IDEwLjEgMTIuNSAxMC4xSDIuNDk5OThaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx1dD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC4wOTk5OCAxMi41QzQuMDk5OTggMTIuNzIwOSA0LjI3OTA2IDEyLjkgNC40OTk5OCAxMi45QzQuNzIwODkgMTIuOSA0Ljg5OTk4IDEyLjcyMDkgNC44OTk5OCAxMi41TDQuODk5OTggMi41MDAwMkM0Ljg5OTk4IDIuMjc5MTEgNC43MjA4OSAyLjEwMDAzIDQuNDk5OTggMi4xMDAwM0M0LjI3OTA2IDIuMTAwMDMgNC4wOTk5OCAyLjI3OTExIDQuMDk5OTggMi41MDAwMkw0LjA5OTk4IDEyLjVaTTYuMDk5OTggMTIuNUM2LjA5OTk4IDEyLjcyMDkgNi4yNzkwNiAxMi45IDYuNDk5OTggMTIuOUM2LjcyMDg5IDEyLjkgNi44OTk5OCAxMi43MjA5IDYuODk5OTggMTIuNUw2Ljg5OTk4IDIuNTAwMDJDNi44OTk5OCAyLjI3OTExIDYuNzIwODkgMi4xMDAwMyA2LjQ5OTk4IDIuMTAwMDNDNi4yNzkwNiAyLjEwMDAzIDYuMDk5OTggMi4yNzkxMSA2LjA5OTk4IDIuNTAwMDJMNi4wOTk5OCAxMi41Wk04LjQ5OTk4IDEyLjlDOC4yNzkwNiAxMi45IDguMDk5OTggMTIuNzIwOSA4LjA5OTk4IDEyLjVMOC4wOTk5OCAyLjUwMDAyQzguMDk5OTggMi4yNzkxMSA4LjI3OTA2IDIuMTAwMDIgOC40OTk5OCAyLjEwMDAyQzguNzIwODkgMi4xMDAwMiA4Ljg5OTk4IDIuMjc5MTEgOC44OTk5OCAyLjUwMDAyTDguODk5OTggMTIuNUM4Ljg5OTk4IDEyLjcyMDkgOC43MjA4OSAxMi45IDguNDk5OTggMTIuOVpNMTAuMSAxMi41QzEwLjEgMTIuNzIwOSAxMC4yNzkxIDEyLjkgMTAuNSAxMi45QzEwLjcyMDkgMTIuOSAxMC45IDEyLjcyMDkgMTAuOSAxMi41TDEwLjkgMi41MDAwMkMxMC45IDIuMjc5MTEgMTAuNzIwOSAyLjEwMDAyIDEwLjUgMi4xMDAwMkMxMC4yNzkxIDIuMTAwMDIgMTAuMSAyLjI3OTExIDEwLjEgMi41MDAwMkwxMC4xIDEyLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxkdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTAuMzI4NSAxLjEzNjA3QzEwLjEzMzIgMC45NDA4MDkgOS44MTY2MiAwLjk0MDgwOCA5LjYyMTM2IDEuMTM2MDdDOS40MjYwOSAxLjMzMTMzIDkuNDI2MDkgMS42NDc5MiA5LjYyMTM2IDEuODQzMThMMTAuMjc0NCAyLjQ5NjE5TDUuNDI1NjMgNi4xMzI3NEw0LjMxODA1IDUuMDI1MTZDNC4xMjI3OSA0LjgyOTkgMy44MDYyMSA0LjgyOTkgMy42MTA5NSA1LjAyNTE2QzMuNDE1NjkgNS4yMjA0MiAzLjQxNTY5IDUuNTM3IDMuNjEwOTUgNS43MzIyNkw1LjAyNTE2IDcuMTQ2NDhMNi4wODU4MiA4LjIwNzE0TDIuODE1NDUgMTEuNDc3NUMyLjYyMDE5IDExLjY3MjggMi42MjAxOSAxMS45ODk0IDIuODE1NDUgMTIuMTg0NkMzLjAxMDcyIDEyLjM3OTkgMy4zMjczIDEyLjM3OTkgMy41MjI1NiAxMi4xODQ2TDYuNzkyOTMgOC45MTQyNUw3Ljg1MzU5IDkuOTc0OTFMOS4yNjc4IDExLjM4OTFDOS40NjMwNiAxMS41ODQ0IDkuNzc5NjUgMTEuNTg0NCA5Ljk3NDkxIDExLjM4OTFDMTAuMTcwMiAxMS4xOTM5IDEwLjE3MDIgMTAuODc3MyA5Ljk3NDkxIDEwLjY4Mkw4Ljg2NzMzIDkuNTc0NDNMMTIuNTAzOSA0LjcyNTdMMTMuMTU2OSA1LjM3ODcxQzEzLjM1MjIgNS41NzM5NyAxMy42Njg3IDUuNTczOTcgMTMuODY0IDUuMzc4NzFDMTQuMDU5MyA1LjE4MzQ1IDE0LjA1OTMgNC44NjY4NyAxMy44NjQgNC42NzE2TDEyLjgwMzMgMy42MTA5NEwxMS4zODkxIDIuMTk2NzNMMTAuMzI4NSAxLjEzNjA3Wk02LjEzOTkyIDYuODQ3MDJMMTAuOTg4NyAzLjIxMDQ3TDExLjc4OTYgNC4wMTE0Mkw4LjE1MzA1IDguODYwMTVMNi4xMzk5MiA2Ljg0NzAyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTkuNjIxMjkgMS4xMzYwN0M5LjgxNjU2IDAuOTQwODA4IDEwLjEzMzEgMC45NDA4MDkgMTAuMzI4NCAxLjEzNjA3TDExLjM4OTEgMi4xOTY3M0wxMi44MDMzIDMuNjEwOTRMMTMuODYzOSA0LjY3MTZDMTQuMDU5MiA0Ljg2Njg3IDE0LjA1OTIgNS4xODM0NSAxMy44NjM5IDUuMzc4NzFDMTMuNjY4NyA1LjU3Mzk3IDEzLjM1MjEgNS41NzM5NyAxMy4xNTY4IDUuMzc4NzFMMTIuNTAzOCA0LjcyNTdMOC44NjcyNyA5LjU3NDQzTDkuOTc0ODUgMTAuNjgyQzEwLjE3MDEgMTAuODc3MyAxMC4xNzAxIDExLjE5MzkgOS45NzQ4NSAxMS4zODkxQzkuNzc5NTkgMTEuNTg0NCA5LjQ2MyAxMS41ODQ0IDkuMjY3NzQgMTEuMzg5MUw3Ljg1MzUzIDkuOTc0OTFMNi43OTI4NyA4LjkxNDI1TDMuNTIyNSAxMi4xODQ2QzMuMzI3MjQgMTIuMzc5OSAzLjAxMDY1IDEyLjM3OTkgMi44MTUzOSAxMi4xODQ2QzIuNjIwMTMgMTEuOTg5NCAyLjYyMDEzIDExLjY3MjggMi44MTUzOSAxMS40Nzc1TDYuMDg1NzYgOC4yMDcxNEw1LjAyNTEgNy4xNDY0OEwzLjYxMDg5IDUuNzMyMjZDMy40MTU2MyA1LjUzNyAzLjQxNTYyIDUuMjIwNDIgMy42MTA4OSA1LjAyNTE2QzMuODA2MTUgNC44Mjk5IDQuMTIyNzMgNC44Mjk5IDQuMzE3OTkgNS4wMjUxNkw1LjQyNTU3IDYuMTMyNzRMMTAuMjc0MyAyLjQ5NjE5TDkuNjIxMjkgMS44NDMxOEM5LjQyNjAzIDEuNjQ3OTIgOS40MjYwMyAxLjMzMTMzIDkuNjIxMjkgMS4xMzYwN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTkuNjIxMjkgMS4xMzYwN0M5LjgxNjU2IDAuOTQwODA4IDEwLjEzMzEgMC45NDA4MDkgMTAuMzI4NCAxLjEzNjA3TDExLjM4OTEgMi4xOTY3M0wxMi44MDMzIDMuNjEwOTRMMTMuODYzOSA0LjY3MTZDMTQuMDU5MiA0Ljg2Njg3IDE0LjA1OTIgNS4xODM0NSAxMy44NjM5IDUuMzc4NzFDMTMuNjY4NyA1LjU3Mzk3IDEzLjM1MjEgNS41NzM5NyAxMy4xNTY4IDUuMzc4NzFMMTIuNTAzOCA0LjcyNTdMOC44NjcyNyA5LjU3NDQzTDkuOTc0ODUgMTAuNjgyQzEwLjE3MDEgMTAuODc3MyAxMC4xNzAxIDExLjE5MzkgOS45NzQ4NSAxMS4zODkxQzkuNzc5NTkgMTEuNTg0NCA5LjQ2MyAxMS41ODQ0IDkuMjY3NzQgMTEuMzg5MUw3Ljg1MzUzIDkuOTc0OTFMNi43OTI4NyA4LjkxNDI1TDMuNTIyNSAxMi4xODQ2QzMuMzI3MjQgMTIuMzc5OSAzLjAxMDY1IDEyLjM3OTkgMi44MTUzOSAxMi4xODQ2QzIuNjIwMTMgMTEuOTg5NCAyLjYyMDEzIDExLjY3MjggMi44MTUzOSAxMS40Nzc1TDYuMDg1NzYgOC4yMDcxNEw1LjAyNTEgNy4xNDY0OEwzLjYxMDg5IDUuNzMyMjZDMy40MTU2MyA1LjUzNyAzLjQxNTYyIDUuMjIwNDIgMy42MTA4OSA1LjAyNTE2QzMuODA2MTUgNC44Mjk5IDQuMTIyNzMgNC44Mjk5IDQuMzE3OTkgNS4wMjUxNkw1LjQyNTU3IDYuMTMyNzRMMTAuMjc0MyAyLjQ5NjE5TDkuNjIxMjkgMS44NDMxOEM5LjQyNjAzIDEuNjQ3OTIgOS40MjYwMyAxLjMzMTMzIDkuNjIxMjkgMS4xMzYwN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGZ0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTk5IDMuMDk5OThDNy4yNzkwNyAzLjA5OTk4IDcuMDk5OTkgMy4yNzkwNiA3LjA5OTk5IDMuNDk5OThDNy4wOTk5OSAzLjcyMDg5IDcuMjc5MDcgMy44OTk5OCA3LjQ5OTk5IDMuODk5OThIMTQuNUMxNC43MjA5IDMuODk5OTggMTQuOSAzLjcyMDg5IDE0LjkgMy40OTk5OEMxNC45IDMuMjc5MDYgMTQuNzIwOSAzLjA5OTk4IDE0LjUgMy4wOTk5OEg3LjQ5OTk5Wk03LjQ5OTk4IDUuMUM3LjI3OTA3IDUuMSA3LjA5OTk4IDUuMjc5MDggNy4wOTk5OCA1LjVDNy4wOTk5OCA1LjcyMDkxIDcuMjc5MDcgNS45IDcuNDk5OTggNS45SDE0LjVDMTQuNzIwOSA1LjkgMTQuOSA1LjcyMDkxIDE0LjkgNS41QzE0LjkgNS4yNzkwOCAxNC43MjA5IDUuMSAxNC41IDUuMUg3LjQ5OTk4Wk03LjEgNy41QzcuMSA3LjI3OTA4IDcuMjc5MDkgNy4xIDcuNSA3LjFIMTQuNUMxNC43MjA5IDcuMSAxNC45IDcuMjc5MDggMTQuOSA3LjVDMTQuOSA3LjcyMDkxIDE0LjcyMDkgNy45IDE0LjUgNy45SDcuNUM3LjI3OTA5IDcuOSA3LjEgNy43MjA5MSA3LjEgNy41Wk03LjQ5OTk4IDkuMUM3LjI3OTA3IDkuMSA3LjA5OTk4IDkuMjc5MDggNy4wOTk5OCA5LjVDNy4wOTk5OCA5LjcyMDkxIDcuMjc5MDcgOS45IDcuNDk5OTggOS45SDE0LjVDMTQuNzIwOSA5LjkgMTQuOSA5LjcyMDkxIDE0LjkgOS41QzE0LjkgOS4yNzkwOCAxNC43MjA5IDkuMSAxNC41IDkuMUg3LjQ5OTk4Wk03LjA5OTk4IDExLjVDNy4wOTk5OCAxMS4yNzkxIDcuMjc5MDcgMTEuMSA3LjQ5OTk4IDExLjFIMTQuNUMxNC43MjA5IDExLjEgMTQuOSAxMS4yNzkxIDE0LjkgMTEuNUMxNC45IDExLjcyMDkgMTQuNzIwOSAxMS45IDE0LjUgMTEuOUg3LjQ5OTk4QzcuMjc5MDcgMTEuOSA3LjA5OTk4IDExLjcyMDkgNy4wOTk5OCAxMS41Wk0yLjUgOS4yNTAwM0w1IDYuMDAwMDNIMEwyLjUgOS4yNTAwM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGh0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjUgMUM0LjIyMzg2IDEgNCAxLjIyMzg2IDQgMS41QzQgMS43NzYxNCA0LjIyMzg2IDIgNC41IDJIMTJWMTNINC41QzQuMjIzODYgMTMgNCAxMy4yMjM5IDQgMTMuNUM0IDEzLjc3NjEgNC4yMjM4NiAxNCA0LjUgMTRIMTJDMTIuNTUyMyAxNCAxMyAxMy41NTIzIDEzIDEzVjJDMTMgMS40NDc3MiAxMi41NTIzIDEgMTIgMUg0LjVaTTYuNjAzNTUgNC44OTY0NUM2LjQwODI5IDQuNzAxMTggNi4wOTE3MSA0LjcwMTE4IDUuODk2NDUgNC44OTY0NUM1LjcwMTE4IDUuMDkxNzEgNS43MDExOCA1LjQwODI5IDUuODk2NDUgNS42MDM1NUw3LjI5Mjg5IDdIMC41QzAuMjIzODU4IDcgMCA3LjIyMzg2IDAgNy41QzAgNy43NzYxNCAwLjIyMzg1OCA4IDAuNSA4SDcuMjkyODlMNS44OTY0NSA5LjM5NjQ1QzUuNzAxMTggOS41OTE3MSA1LjcwMTE4IDkuOTA4MjkgNS44OTY0NSAxMC4xMDM2QzYuMDkxNzEgMTAuMjk4OCA2LjQwODI5IDEwLjI5ODggNi42MDM1NSAxMC4xMDM2TDguODUzNTUgNy44NTM1NUM5LjA0ODgyIDcuNjU4MjkgOS4wNDg4MiA3LjM0MTcxIDguODUzNTUgNy4xNDY0NUw2LjYwMzU1IDQuODk2NDVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxndD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiAyLjVDMiAyLjIyMzg2IDIuMjIzODYgMiAyLjUgMkg1LjVDNS43NzYxNCAyIDYgMi4yMjM4NiA2IDIuNUM2IDIuNzc2MTQgNS43NzYxNCAzIDUuNSAzSDNWNS41QzMgNS43NzYxNCAyLjc3NjE0IDYgMi41IDZDMi4yMjM4NiA2IDIgNS43NzYxNCAyIDUuNVYyLjVaTTkgMi41QzkgMi4yMjM4NiA5LjIyMzg2IDIgOS41IDJIMTIuNUMxMi43NzYxIDIgMTMgMi4yMjM4NiAxMyAyLjVWNS41QzEzIDUuNzc2MTQgMTIuNzc2MSA2IDEyLjUgNkMxMi4yMjM5IDYgMTIgNS43NzYxNCAxMiA1LjVWM0g5LjVDOS4yMjM4NiAzIDkgMi43NzYxNCA5IDIuNVpNMi41IDlDMi43NzYxNCA5IDMgOS4yMjM4NiAzIDkuNVYxMkg1LjVDNS43NzYxNCAxMiA2IDEyLjIyMzkgNiAxMi41QzYgMTIuNzc2MSA1Ljc3NjE0IDEzIDUuNSAxM0gyLjVDMi4yMjM4NiAxMyAyIDEyLjc3NjEgMiAxMi41VjkuNUMyIDkuMjIzODYgMi4yMjM4NiA5IDIuNSA5Wk0xMi41IDlDMTIuNzc2MSA5IDEzIDkuMjIzODYgMTMgOS41VjEyLjVDMTMgMTIuNzc2MSAxMi43NzYxIDEzIDEyLjUgMTNIOS41QzkuMjIzODYgMTMgOSAxMi43NzYxIDkgMTIuNUM5IDEyLjIyMzkgOS4yMjM4NiAxMiA5LjUgMTJIMTJWOS41QzEyIDkuMjIzODYgMTIuMjIzOSA5IDEyLjUgOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHZ0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xIDJDMC40NDc3MTUgMiAwIDIuNDQ3NzIgMCAzVjEyQzAgMTIuNTUyMyAwLjQ0NzcxNSAxMyAxIDEzSDE0QzE0LjU1MjMgMTMgMTUgMTIuNTUyMyAxNSAxMlYzQzE1IDIuNDQ3NzIgMTQuNTUyMyAyIDE0IDJIMVpNMSAzTDE0IDNWMy45MjQ5NEMxMy45MTc0IDMuOTI0ODYgMTMuODMzOCAzLjk0NzUxIDEzLjc1ODkgMy45OTUwNUw3LjUgNy45NjcwM0wxLjI0MTEyIDMuOTk1MDVDMS4xNjYyMSAzLjk0NzUxIDEuMDgyNiAzLjkyNDg2IDEgMy45MjQ5NFYzWk0xIDQuOTA3OTdWMTJIMTRWNC45MDc5N0w3Ljc0MTEyIDguODc5OTVDNy41OTM5NCA4Ljk3MzM1IDcuNDA2MDYgOC45NzMzNSA3LjI1ODg4IDguODc5OTVMMSA0LjkwNzk3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQ3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuOTQ3MjEgMC4xNjQ1OTRDNy42NjU2OSAwLjAyMzgyOTkgNy4zMzQzMSAwLjAyMzgzMDIgNy4wNTI3OSAwLjE2NDU5NEwwLjU1Mjc4NiAzLjQxNDU5QzAuMjE0MDAyIDMuNTgzOTkgMCAzLjkzMDI1IDAgNC4zMDkwMlYxMkMwIDEyLjU1MjMgMC40NDc3MTUgMTMgMSAxM0gxNEMxNC41NTIzIDEzIDE1IDEyLjU1MjMgMTUgMTJWNC4zMDkwMkMxNSAzLjkzMDI1IDE0Ljc4NiAzLjU4Mzk5IDE0LjQ0NzIgMy40MTQ1OUw3Ljk0NzIxIDAuMTY0NTk0Wk0xMy41Njg5IDQuMDkzNDlMNy41IDEuMDU5MDJMMS40MzEwNSA0LjA5MzQ5TDcuNSA3LjI5MTM2TDEzLjU2ODkgNC4wOTM0OVpNMSA0Ljg4MzY2VjEySDE0VjQuODgzNjZMNy43MDk3NyA4LjE5ODEzQzcuNTc4NDggOC4yNjczMSA3LjQyMTUyIDguMjY3MzEgNy4yOTAyMyA4LjE5ODEzTDEgNC44ODM2NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG10PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk04LjQ0NDkgMC42MDg3NjVDOC4wMTgzIC0wLjEwNzAxNSA2Ljk4MTcgLTAuMTA3MDE1IDYuNTU1MDkgMC42MDg3NjZMMC4xNjExNzggMTEuMzM2OEMtMC4yNzU4MjQgMTIuMDcgMC4yNTI1MDMgMTMgMS4xMDYwOCAxM0gxMy44OTM5QzE0Ljc0NzUgMTMgMTUuMjc1OCAxMi4wNyAxNC44Mzg4IDExLjMzNjhMOC40NDQ5IDAuNjA4NzY1Wk03LjQxNDEgMS4xMjA3M0M3LjQ1Mjg4IDEuMDU1NjYgNy41NDcxMiAxLjA1NTY2IDcuNTg1OSAxLjEyMDczTDEzLjk3OTggMTEuODQ4OEMxNC4wMTk2IDExLjkxNTQgMTMuOTcxNSAxMiAxMy44OTM5IDEySDEuMTA2MDhDMS4wMjg0OSAxMiAwLjk4MDQ1NCAxMS45MTU0IDEuMDIwMTggMTEuODQ4OEw3LjQxNDEgMS4xMjA3M1pNNi44MjY5IDQuNDg2MTFDNi44MTIyMSA0LjEwNDIzIDcuMTE3ODMgMy43ODY2MyA3LjUgMy43ODY2M0M3Ljg4MjE3IDMuNzg2NjMgOC4xODc3OCA0LjEwNDIzIDguMTczMSA0LjQ4NjEyTDguMDE5MjEgOC40ODcwMUM4LjAwODQ4IDguNzY2IDcuNzc5MiA4Ljk4NjY0IDcuNSA4Ljk4NjY0QzcuMjIwOCA4Ljk4NjY0IDYuOTkxNTEgOC43NjYgNi45ODA3OCA4LjQ4NzAxTDYuODI2OSA0LjQ4NjExWk04LjI0OTg5IDEwLjQ3NkM4LjI0OTg5IDEwLjg5MDIgNy45MTQxIDExLjIyNiA3LjQ5OTg5IDExLjIyNkM3LjA4NTY3IDExLjIyNiA2Ljc0OTg5IDEwLjg5MDIgNi43NDk4OSAxMC40NzZDNi43NDk4OSAxMC4wNjE4IDcuMDg1NjcgOS43MjU5OSA3LjQ5OTg5IDkuNzI1OTlDNy45MTQxIDkuNzI1OTkgOC4yNDk4OSAxMC4wNjE4IDguMjQ5ODkgMTAuNDc2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sd3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMgMUMyLjQ0NzcxIDEgMiAxLjQ0NzcyIDIgMlYxM0MyIDEzLjU1MjMgMi40NDc3MiAxNCAzIDE0SDEwLjVDMTAuNzc2MSAxNCAxMSAxMy43NzYxIDExIDEzLjVDMTEgMTMuMjIzOSAxMC43NzYxIDEzIDEwLjUgMTNIM1YyTDEwLjUgMkMxMC43NzYxIDIgMTEgMS43NzYxNCAxMSAxLjVDMTEgMS4yMjM4NiAxMC43NzYxIDEgMTAuNSAxSDNaTTEyLjYwMzYgNC44OTY0NUMxMi40MDgzIDQuNzAxMTggMTIuMDkxNyA0LjcwMTE4IDExLjg5NjQgNC44OTY0NUMxMS43MDEyIDUuMDkxNzEgMTEuNzAxMiA1LjQwODI5IDExLjg5NjQgNS42MDM1NUwxMy4yOTI5IDdINi41QzYuMjIzODYgNyA2IDcuMjIzODYgNiA3LjVDNiA3Ljc3NjE0IDYuMjIzODYgOCA2LjUgOEgxMy4yOTI5TDExLjg5NjQgOS4zOTY0NUMxMS43MDEyIDkuNTkxNzEgMTEuNzAxMiA5LjkwODI5IDExLjg5NjQgMTAuMTAzNkMxMi4wOTE3IDEwLjI5ODggMTIuNDA4MyAxMC4yOTg4IDEyLjYwMzYgMTAuMTAzNkwxNC44NTM2IDcuODUzNTVDMTUuMDQ4OCA3LjY1ODI5IDE1LjA0ODggNy4zNDE3MSAxNC44NTM2IDcuMTQ2NDVMMTIuNjAzNiA0Ljg5NjQ1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sYnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUuNSAyQzUuNzc2MTQgMiA2IDIuMjIzODYgNiAyLjVWNS41QzYgNS43NzYxNCA1Ljc3NjE0IDYgNS41IDZIMi41QzIuMjIzODYgNiAyIDUuNzc2MTQgMiA1LjVDMiA1LjIyMzg2IDIuMjIzODYgNSAyLjUgNUg1VjIuNUM1IDIuMjIzODYgNS4yMjM4NiAyIDUuNSAyWk05LjUgMkM5Ljc3NjE0IDIgMTAgMi4yMjM4NiAxMCAyLjVWNUgxMi41QzEyLjc3NjEgNSAxMyA1LjIyMzg2IDEzIDUuNUMxMyA1Ljc3NjE0IDEyLjc3NjEgNiAxMi41IDZIOS41QzkuMjIzODYgNiA5IDUuNzc2MTQgOSA1LjVWMi41QzkgMi4yMjM4NiA5LjIyMzg2IDIgOS41IDJaTTIgOS41QzIgOS4yMjM4NiAyLjIyMzg2IDkgMi41IDlINS41QzUuNzc2MTQgOSA2IDkuMjIzODYgNiA5LjVWMTIuNUM2IDEyLjc3NjEgNS43NzYxNCAxMyA1LjUgMTNDNS4yMjM4NiAxMyA1IDEyLjc3NjEgNSAxMi41VjEwSDIuNUMyLjIyMzg2IDEwIDIgOS43NzYxNCAyIDkuNVpNOSA5LjVDOSA5LjIyMzg2IDkuMjIzODYgOSA5LjUgOUgxMi41QzEyLjc3NjEgOSAxMyA5LjIyMzg2IDEzIDkuNUMxMyA5Ljc3NjE0IDEyLjc3NjEgMTAgMTIuNSAxMEgxMFYxMi41QzEwIDEyLjc3NjEgOS43NzYxNCAxMyA5LjUgMTNDOS4yMjM4NiAxMyA5IDEyLjc3NjEgOSAxMi41VjkuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHl0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zIDJDMi40NDc3MiAyIDIgMi40NDc3MiAyIDNWMTJDMiAxMi41NTIzIDIuNDQ3NzIgMTMgMyAxM0gxMkMxMi41NTIzIDEzIDEzIDEyLjU1MjMgMTMgMTJWOC41QzEzIDguMjIzODYgMTIuNzc2MSA4IDEyLjUgOEMxMi4yMjM5IDggMTIgOC4yMjM4NiAxMiA4LjVWMTJIM1YzTDYuNSAzQzYuNzc2MTQgMyA3IDIuNzc2MTQgNyAyLjVDNyAyLjIyMzg2IDYuNzc2MTQgMiA2LjUgMkgzWk0xMi44NTM2IDIuMTQ2NDVDMTIuOTAxNSAyLjE5NDM5IDEyLjkzNzcgMi4yNDk2NCAxMi45NjIxIDIuMzA4NjFDMTIuOTg2MSAyLjM2NjY5IDEyLjk5OTYgMi40MzAzIDEzIDIuNDk3TDEzIDIuNVYyLjUwMDQ5VjUuNUMxMyA1Ljc3NjE0IDEyLjc3NjEgNiAxMi41IDZDMTIuMjIzOSA2IDEyIDUuNzc2MTQgMTIgNS41VjMuNzA3MTFMNi44NTM1NSA4Ljg1MzU1QzYuNjU4MjkgOS4wNDg4MiA2LjM0MTcxIDkuMDQ4ODIgNi4xNDY0NSA4Ljg1MzU1QzUuOTUxMTggOC42NTgyOSA1Ljk1MTE4IDguMzQxNzEgNi4xNDY0NSA4LjE0NjQ1TDExLjI5MjkgM0g5LjVDOS4yMjM4NiAzIDkgMi43NzYxNCA5IDIuNUM5IDIuMjIzODYgOS4yMjM4NiAyIDkuNSAySDEyLjQ5OTlIMTIuNUMxMi41Njc4IDIgMTIuNjMyNCAyLjAxMzQ5IDEyLjY5MTQgMi4wMzc5NEMxMi43NTA0IDIuMDYyMzQgMTIuODA1NiAyLjA5ODUxIDEyLjg1MzYgMi4xNDY0NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHh0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xNC43NjQ5IDYuMDc1OTVDMTQuOTk5MSA2LjIyMjMxIDE1LjA3MDMgNi41MzA3OCAxNC45MjM5IDYuNzY0OTVDMTQuNDg0OSA3LjQ2NzQyIDEzLjk2MzIgOC4xMDY0NCAxMy4zNzAyIDguNjYzMDRMMTQuNTcxMiA5Ljg2NDA1QzE0Ljc2NjQgMTAuMDU5MyAxNC43NjY0IDEwLjM3NTkgMTQuNTcxMiAxMC41NzEyQzE0LjM3NTkgMTAuNzY2NCAxNC4wNTkzIDEwLjc2NjQgMTMuODY0MSAxMC41NzEyTDEyLjYwMTEgOS4zMDgxNkMxMS44MDQ5IDkuOTAyODIgMTAuOTA4OSAxMC4zNjIxIDkuOTMzNzQgMTAuNjUxTDEwLjM4MyAxMi4zMjc2QzEwLjQ1NDQgMTIuNTk0NCAxMC4yOTYxIDEyLjg2ODUgMTAuMDI5NCAxMi45NEM5Ljc2MjY2IDEzLjAxMTUgOS40ODg1IDEyLjg1MzIgOS40MTcwMyAxMi41ODY0TDguOTU5MTYgMTAuODc3NUM4LjQ4NzQyIDEwLjk1OCA4LjAwMDM1IDEwLjk5OTkgNy41IDEwLjk5OTlDNi45OTk2NCAxMC45OTk5IDYuNTEyNTcgMTAuOTU4IDYuMDQwODIgMTAuODc3NUw1LjU4Mjk5IDEyLjU4NjRDNS41MTE1MyAxMi44NTMyIDUuMjM3MzcgMTMuMDExNSA0Ljk3MDYzIDEyLjk0QzQuNzAzOSAxMi44Njg1IDQuNTQ1NiAxMi41OTQ0IDQuNjE3MDYgMTIuMzI3N0w1LjA2NjI0IDEwLjY1MUM0LjA5MTExIDEwLjM2MjEgMy4xOTUwMyA5LjkwMjgxIDIuMzk4OSA5LjMwODE0TDEuMTM1OSAxMC41NzExQzAuOTQwNjM4IDEwLjc2NjQgMC42MjQwNTggMTAuNzY2NCAwLjQyODc5NyAxMC41NzExQzAuMjMzNTM3IDEwLjM3NTkgMC4yMzM1MzcgMTAuMDU5MyAwLjQyODc5NyA5Ljg2NDA0TDEuNjI5ODIgOC42NjMwMkMxLjAzNjgyIDguMTA2NDMgMC41MTUxMTMgNy40Njc0MiAwLjA3NjA2NzcgNi43NjQ5NUMtMC4wNzAyODY3IDYuNTMwNzggMC4wMDA4OTg1NDQgNi4yMjIzMSAwLjIzNTA2NCA2LjA3NTk1QzAuNDY5MjMgNS45Mjk2IDAuNzc3NzAzIDYuMDAwNzggMC45MjQwNTcgNi4yMzQ5NUMxLjQwMzU0IDcuMDAyMTIgMS45ODkgNy42ODA1NiAyLjY2MjMzIDguMjQyN0MyLjY3MzE1IDguMjUwOTYgMi42ODM3IDguMjU5NzEgMi42OTM5NyA4LjI2ODk3QzQuMDA4OTcgOS4zNTUyNyA1LjY1NTM2IDkuOTk5OSA3LjUgOS45OTk5QzEwLjMwNzggOS45OTk5IDEyLjY1NjMgOC41MDYyOSAxNC4wNzU5IDYuMjM0OTVDMTQuMjIyMyA2LjAwMDc4IDE0LjUzMDggNS45Mjk2IDE0Ljc2NDkgNi4wNzU5NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGt0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMy4zNTM2IDIuMzUzNTVDMTMuNTQ4OCAyLjE1ODI5IDEzLjU0ODggMS44NDE3MSAxMy4zNTM2IDEuNjQ2NDVDMTMuMTU4MyAxLjQ1MTE4IDEyLjg0MTcgMS40NTExOCAxMi42NDY0IDEuNjQ2NDVMMTAuNjgyOCAzLjYxMDEyQzkuNzA2NTIgMy4yMTY3MSA4LjYzNzU5IDMgNy41IDNDNC4zMDc4NiAzIDEuNjU2MzkgNC43MDYzOCAwLjA3NjAwMDIgNy4yMzUwMUMtMC4wMjUzMzM4IDcuMzk3MTUgLTAuMDI1MzMzNCA3LjYwMjg4IDAuMDc2MDAxNCA3Ljc2NTAxQzAuOTAyOTQ1IDkuMDg4MTIgMi4wMjMxNCAxMC4xODYxIDMuMzYwNjEgMTAuOTMyM0wxLjY0NjQ1IDEyLjY0NjRDMS40NTExOCAxMi44NDE3IDEuNDUxMTggMTMuMTU4MyAxLjY0NjQ1IDEzLjM1MzZDMS44NDE3MSAxMy41NDg4IDIuMTU4MjkgMTMuNTQ4OCAyLjM1MzU1IDEzLjM1MzZMNC4zMTcyMyAxMS4zODk5QzUuMjkzNDggMTEuNzgzMyA2LjM2MjQxIDEyIDcuNSAxMkMxMC42OTIxIDEyIDEzLjM0MzYgMTAuMjkzNiAxNC45MjQgNy43NjUwMUMxNS4wMjUzIDcuNjAyODggMTUuMDI1MyA3LjM5NzE1IDE0LjkyNCA3LjIzNTAxQzE0LjA5NzEgNS45MTE5IDEyLjk3NjkgNC44MTM5MSAxMS42Mzk0IDQuMDY3NzFMMTMuMzUzNiAyLjM1MzU1Wk05LjkwNDI4IDQuMzg4NjFDOS4xNTMzMiA0LjEzNjEgOC4zNDc1OSA0IDcuNSA0QzQuODAyODUgNCAyLjUyOTUyIDUuMzc4MTYgMS4wOTYyMiA3LjUwMDAxQzEuODcyODQgOC42NDk3IDIuODk2MDkgOS41ODEwNiA0LjA5OTc0IDEwLjE5MzFMOS45MDQyOCA0LjM4ODYxWk01LjA5NTcyIDEwLjYxMTRMMTAuOTAwMyA0LjgwNjg1QzEyLjEwMzkgNS40MTg5NCAxMy4xMjcyIDYuMzUwMzEgMTMuOTAzOCA3LjUwMDAxQzEyLjQ3MDUgOS42MjE4MyAxMC4xOTcxIDExIDcuNSAxMUM2LjY1MjQxIDExIDUuODQ2NjggMTAuODYzOSA1LjA5NTcyIDEwLjYxMTRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxTdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41IDExQzQuODAyODUgMTEgMi41Mjk1MiA5LjYyMTg0IDEuMDk2MjIgNy41MDAwMUMyLjUyOTUyIDUuMzc4MTYgNC44MDI4NSA0IDcuNSA0QzEwLjE5NzEgNCAxMi40NzA1IDUuMzc4MTYgMTMuOTAzOCA3LjUwMDAxQzEyLjQ3MDUgOS42MjE4MyAxMC4xOTcxIDExIDcuNSAxMVpNNy41IDNDNC4zMDc4NiAzIDEuNjU2MzkgNC43MDYzOCAwLjA3NjAwMDIgNy4yMzUwMUMtMC4wMjUzMzM4IDcuMzk3MTUgLTAuMDI1MzMzNCA3LjYwMjg4IDAuMDc2MDAxNCA3Ljc2NTAxQzEuNjU2MzkgMTAuMjkzNiA0LjMwNzg2IDEyIDcuNSAxMkMxMC42OTIxIDEyIDEzLjM0MzYgMTAuMjkzNiAxNC45MjQgNy43NjUwMUMxNS4wMjUzIDcuNjAyODggMTUuMDI1MyA3LjM5NzE1IDE0LjkyNCA3LjIzNTAxQzEzLjM0MzYgNC43MDYzOCAxMC42OTIxIDMgNy41IDNaTTcuNSA5LjVDOC42MDQ1NyA5LjUgOS41IDguNjA0NTcgOS41IDcuNUM5LjUgNi4zOTU0MyA4LjYwNDU3IDUuNSA3LjUgNS41QzYuMzk1NDMgNS41IDUuNSA2LjM5NTQzIDUuNSA3LjVDNS41IDguNjA0NTcgNi4zOTU0MyA5LjUgNy41IDkuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE90PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTkxIDAuODc2ODkyQzMuODQyMjIgMC44NzY4OTIgMC44NzcwNzUgMy44NDIwNCAwLjg3NzA3NSA3LjQ5OTcyQzAuODc3MDc1IDExLjE1NzQgMy44NDIyMiAxNC4xMjI2IDcuNDk5OTEgMTQuMTIyNkMxMS4xNTc2IDE0LjEyMjYgMTQuMTIyNyAxMS4xNTc0IDE0LjEyMjcgNy40OTk3MkMxNC4xMjI3IDMuODQyMDQgMTEuMTU3NiAwLjg3Njg5MiA3LjQ5OTkxIDAuODc2ODkyWk0xLjgyNzA4IDcuNDk5NzJDMS44MjcwOCA0LjM2NjcxIDQuMzY2ODkgMS44MjY4OSA3LjQ5OTkxIDEuODI2ODlDMTAuNjMyOSAxLjgyNjg5IDEzLjE3MjcgNC4zNjY3MSAxMy4xNzI3IDcuNDk5NzJDMTMuMTcyNyAxMC42MzI3IDEwLjYzMjkgMTMuMTcyNiA3LjQ5OTkxIDEzLjE3MjZDNC4zNjY4OSAxMy4xNzI2IDEuODI3MDggMTAuNjMyNyAxLjgyNzA4IDcuNDk5NzJaTTUuMDM3NDcgOS4yMTM5NUM0Ljg3OTQ5IDguOTg3NDYgNC41Njc4MiA4LjkzMTkzIDQuMzQxMzMgOS4wODk5MUM0LjExNDg0IDkuMjQ3ODkgNC4wNTkzMSA5LjU1OTU2IDQuMjE3MjkgOS43ODYwNUM0LjkzOTI2IDEwLjgyMTEgNi4xNDAzMyAxMS41IDcuNTAwMDQgMTEuNUM4Ljg1OTc0IDExLjUgMTAuMDYwOCAxMC44MjExIDEwLjc4MjggOS43ODYwNUMxMC45NDA4IDkuNTU5NTYgMTAuODg1MiA5LjI0Nzg5IDEwLjY1ODcgOS4wODk5MUMxMC40MzIzIDguOTMxOTMgMTAuMTIwNiA4Ljk4NzQ2IDkuOTYyNiA5LjIxMzk1QzkuNDE5NjMgOS45OTIzOCA4LjUxOTA3IDEwLjUgNy41MDAwNCAxMC41QzYuNDgxIDEwLjUgNS41ODA0NCA5Ljk5MjM4IDUuMDM3NDcgOS4yMTM5NVpNNS4zNzUwMyA2Ljg0OTk4QzUuODU4MjggNi44NDk5OCA2LjI1MDAzIDYuNDU4MTUgNi4yNTAwMyA1Ljk3NDk4QzYuMjUwMDMgNS40OTE4IDUuODU4MjggNS4wOTk5OCA1LjM3NTAzIDUuMDk5OThDNC44OTE3OSA1LjA5OTk4IDQuNTAwMDMgNS40OTE4IDQuNTAwMDMgNS45NzQ5OEM0LjUwMDAzIDYuNDU4MTUgNC44OTE3OSA2Ljg0OTk4IDUuMzc1MDMgNi44NDk5OFpNMTAuNSA1Ljk3NDk4QzEwLjUgNi40NTgxNSAxMC4xMDgzIDYuODQ5OTggOS42MjUwMyA2Ljg0OTk4QzkuMTQxNzkgNi44NDk5OCA4Ljc1MDAzIDYuNDU4MTUgOC43NTAwMyA1Ljk3NDk4QzguNzUwMDMgNS40OTE4IDkuMTQxNzkgNS4wOTk5OCA5LjYyNTAzIDUuMDk5OThDMTAuMTA4MyA1LjA5OTk4IDEwLjUgNS40OTE4IDEwLjUgNS45NzQ5OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE10PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjAwMDA1IDIuMDQ5OTlINS41MjUwNUM0LjcxMDQzIDIuMDQ5OTkgNC4wNTAwNSAyLjcxMDM3IDQuMDUwMDUgMy41MjQ5OUM0LjA1MDA1IDQuMzM5NjEgNC43MTA0MyA0Ljk5OTk5IDUuNTI1MDUgNC45OTk5OUg3LjAwMDA1VjIuMDQ5OTlaTTcuMDAwMDUgMS4wNDk5OUg4LjAwMDA1SDkuNDc1MDVDMTAuODQyIDEuMDQ5OTkgMTEuOTUgMi4xNTgwOCAxMS45NSAzLjUyNDk5QzExLjk1IDQuMzMxNjMgMTEuNTY0MiA1LjA0ODE1IDEwLjk2NjkgNS40OTk5OUMxMS41NjQyIDUuOTUxODQgMTEuOTUgNi42NjgzNiAxMS45NSA3LjQ3NUMxMS45NSA4Ljg0MTkgMTAuODQyIDkuOTUgOS40NzUwNSA5Ljk1QzguOTIyMzYgOS45NSA4LjQxMTk4IDkuNzY4ODQgOC4wMDAwNSA5LjQ2MjY2VjkuOTVMOC4wMDAwNSAxMS40MjVDOC4wMDAwNSAxMi43OTE5IDYuODkxOTUgMTMuOSA1LjUyNTA1IDEzLjlDNC4xNTgxNCAxMy45IDMuMDUwMDUgMTIuNzkxOSAzLjA1MDA1IDExLjQyNUMzLjA1MDA1IDEwLjYxODMgMy40MzU5MyA5LjkwMTg0IDQuMDMzMTcgOS40NDk5OUMzLjQzNTkzIDguOTk4MTQgMy4wNTAwNSA4LjI4MTYzIDMuMDUwMDUgNy40NzVDMy4wNTAwNSA2LjY2ODM2IDMuNDM1OTQgNS45NTE4NCA0LjAzMzE5IDUuNUMzLjQzNTk0IDUuMDQ4MTUgMy4wNTAwNSA0LjMzMTYzIDMuMDUwMDUgMy41MjQ5OUMzLjA1MDA1IDIuMTU4MDggNC4xNTgxNCAxLjA0OTk5IDUuNTI1MDUgMS4wNDk5OUg3LjAwMDA1Wk04LjAwMDA1IDIuMDQ5OTlWNC45OTk5OUg5LjQ3NTA1QzEwLjI4OTcgNC45OTk5OSAxMC45NSA0LjMzOTYxIDEwLjk1IDMuNTI0OTlDMTAuOTUgMi43MTAzNyAxMC4yODk3IDIuMDQ5OTkgOS40NzUwNSAyLjA0OTk5SDguMDAwMDVaTTUuNTI1MDUgOC45NDk5OEg3LjAwMDA1TDcuMDAwMDUgNy40Nzg4TDcuMDAwMDUgNy40NzVMNy4wMDAwNSA3LjQ3MTJWNkg1LjUyNTA1QzQuNzEwNDMgNiA0LjA1MDA1IDYuNjYwMzggNC4wNTAwNSA3LjQ3NUM0LjA1MDA1IDguMjg3NjcgNC43MDcyNyA4Ljk0Njg0IDUuNTE5MiA4Ljk0OTk5TDUuNTI1MDUgOC45NDk5OFpNNC4wNTAwNSAxMS40MjVDNC4wNTAwNSAxMC42MTIzIDQuNzA3MjcgOS45NTMxNSA1LjUxOTIgOS45NDk5OUw1LjUyNTA1IDkuOTVINy4wMDAwNUw3LjAwMDA1IDExLjQyNUM3LjAwMDA1IDEyLjIzOTYgNi4zMzk2NyAxMi45IDUuNTI1MDUgMTIuOUM0LjcxMDQzIDEyLjkgNC4wNTAwNSAxMi4yMzk2IDQuMDUwMDUgMTEuNDI1Wk04LjAwMDA1IDcuNDcyMDZDOC4wMDE2NCA2LjY1ODc5IDguNjYxNDEgNiA5LjQ3NTA1IDZDMTAuMjg5NyA2IDEwLjk1IDYuNjYwMzggMTAuOTUgNy40NzVDMTAuOTUgOC4yODk2MiAxMC4yODk3IDguOTUgOS40NzUwNSA4Ljk1QzguNjYxNDEgOC45NSA4LjAwMTY0IDguMjkxMjEgOC4wMDAwNSA3LjQ3Nzk0VjcuNDcyMDZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxMdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy41IDJDMy4yMjM4NiAyIDMgMi4yMjM4NiAzIDIuNVYxMi41QzMgMTIuNzc2MSAzLjIyMzg2IDEzIDMuNSAxM0gxMS41QzExLjc3NjEgMTMgMTIgMTIuNzc2MSAxMiAxMi41VjZIOC41QzguMjIzODYgNiA4IDUuNzc2MTQgOCA1LjVWMkgzLjVaTTkgMi43MDcxMUwxMS4yOTI5IDVIOVYyLjcwNzExWk0yIDIuNUMyIDEuNjcxNTcgMi42NzE1NyAxIDMuNSAxSDguNUM4LjYzMjYxIDEgOC43NTk3OSAxLjA1MjY4IDguODUzNTUgMS4xNDY0NUwxMi44NTM2IDUuMTQ2NDVDMTIuOTQ3MyA1LjI0MDIxIDEzIDUuMzY3MzkgMTMgNS41VjEyLjVDMTMgMTMuMzI4NCAxMi4zMjg0IDE0IDExLjUgMTRIMy41QzIuNjcxNTcgMTQgMiAxMy4zMjg0IDIgMTIuNVYyLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxfdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMyAyLjVDMyAyLjIyMzg2IDMuMjIzODYgMiAzLjUgMkg5LjI5Mjg5TDEyIDQuNzA3MTFWMTIuNUMxMiAxMi43NzYxIDExLjc3NjEgMTMgMTEuNSAxM0gzLjVDMy4yMjM4NiAxMyAzIDEyLjc3NjEgMyAxMi41VjIuNVpNMy41IDFDMi42NzE1NyAxIDIgMS42NzE1NyAyIDIuNVYxMi41QzIgMTMuMzI4NCAyLjY3MTU3IDE0IDMuNSAxNEgxMS41QzEyLjMyODQgMTQgMTMgMTMuMzI4NCAxMyAxMi41VjQuNjAzNTVDMTMgNC40MDQ2NCAxMi45MjEgNC4yMTM4OCAxMi43ODAzIDQuMDczMjJMOS44NTM1NSAxLjE0NjQ1QzkuNzU5NzkgMS4wNTI2OCA5LjYzMjYxIDEgOS41IDFIMy41Wk01LjI1IDdDNC45NzM4NiA3IDQuNzUgNy4yMjM4NiA0Ljc1IDcuNUM0Ljc1IDcuNzc2MTQgNC45NzM4NiA4IDUuMjUgOEg5Ljc1QzEwLjAyNjEgOCAxMC4yNSA3Ljc3NjE0IDEwLjI1IDcuNUMxMC4yNSA3LjIyMzg2IDEwLjAyNjEgNyA5Ljc1IDdINS4yNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFB0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjUgMkMzLjIyMzg2IDIgMyAyLjIyMzg2IDMgMi41VjEyLjVDMyAxMi43NzYxIDMuMjIzODYgMTMgMy41IDEzSDExLjVDMTEuNzc2MSAxMyAxMiAxMi43NzYxIDEyIDEyLjVWNC43MDcxMUw5LjI5Mjg5IDJIMy41Wk0yIDIuNUMyIDEuNjcxNTcgMi42NzE1NyAxIDMuNSAxSDkuNUM5LjYzMjYxIDEgOS43NTk3OSAxLjA1MjY4IDkuODUzNTUgMS4xNDY0NUwxMi43ODAzIDQuMDczMjJDMTIuOTIxIDQuMjEzODggMTMgNC40MDQ2NCAxMyA0LjYwMzU1VjEyLjVDMTMgMTMuMzI4NCAxMi4zMjg0IDE0IDExLjUgMTRIMy41QzIuNjcxNTcgMTQgMiAxMy4zMjg0IDIgMTIuNVYyLjVaTTQuNzUgNy41QzQuNzUgNy4yMjM4NiA0Ljk3Mzg2IDcgNS4yNSA3SDdWNS4yNUM3IDQuOTczODYgNy4yMjM4NiA0Ljc1IDcuNSA0Ljc1QzcuNzc2MTQgNC43NSA4IDQuOTczODYgOCA1LjI1VjdIOS43NUMxMC4wMjYxIDcgMTAuMjUgNy4yMjM4NiAxMC4yNSA3LjVDMTAuMjUgNy43NzYxNCAxMC4wMjYxIDggOS43NSA4SDhWOS43NUM4IDEwLjAyNjEgNy43NzYxNCAxMC4yNSA3LjUgMTAuMjVDNy4yMjM4NiAxMC4yNSA3IDEwLjAyNjEgNyA5Ljc1VjhINS4yNUM0Ljk3Mzg2IDggNC43NSA3Ljc3NjE0IDQuNzUgNy41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sRXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMgMi41QzMgMi4yMjM4NiAzLjIyMzg2IDIgMy41IDJIOS4wODU3OUM5LjIxODM5IDIgOS4zNDU1NyAyLjA1MjY4IDkuNDM5MzQgMi4xNDY0NUwxMS44NTM2IDQuNTYwNjZDMTEuOTQ3MyA0LjY1NDQzIDEyIDQuNzgxNjEgMTIgNC45MTQyMVYxMi41QzEyIDEyLjc3NjEgMTEuNzc2MSAxMyAxMS41IDEzSDMuNUMzLjIyMzg2IDEzIDMgMTIuNzc2MSAzIDEyLjVWMi41Wk0zLjUgMUMyLjY3MTU3IDEgMiAxLjY3MTU3IDIgMi41VjEyLjVDMiAxMy4zMjg0IDIuNjcxNTcgMTQgMy41IDE0SDExLjVDMTIuMzI4NCAxNCAxMyAxMy4zMjg0IDEzIDEyLjVWNC45MTQyMUMxMyA0LjUxNjM5IDEyLjg0MiA0LjEzNDg2IDEyLjU2MDcgMy44NTM1NUwxMC4xNDY0IDEuNDM5MzRDOS44NjUxNCAxLjE1ODA0IDkuNDgzNjEgMSA5LjA4NTc5IDFIMy41Wk00LjUgNEM0LjIyMzg2IDQgNCA0LjIyMzg2IDQgNC41QzQgNC43NzYxNCA0LjIyMzg2IDUgNC41IDVINy41QzcuNzc2MTQgNSA4IDQuNzc2MTQgOCA0LjVDOCA0LjIyMzg2IDcuNzc2MTQgNCA3LjUgNEg0LjVaTTQuNSA3QzQuMjIzODYgNyA0IDcuMjIzODYgNCA3LjVDNCA3Ljc3NjE0IDQuMjIzODYgOCA0LjUgOEgxMC41QzEwLjc3NjEgOCAxMSA3Ljc3NjE0IDExIDcuNUMxMSA3LjIyMzg2IDEwLjc3NjEgNyAxMC41IDdINC41Wk00LjUgMTBDNC4yMjM4NiAxMCA0IDEwLjIyMzkgNCAxMC41QzQgMTAuNzc2MSA0LjIyMzg2IDExIDQuNSAxMUgxMC41QzEwLjc3NjEgMTEgMTEgMTAuNzc2MSAxMSAxMC41QzExIDEwLjIyMzkgMTAuNzc2MSAxMCAxMC41IDEwSDQuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGp0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjEwNTA1IDEyQzQuNzA4MDUgMTIgNC40MjM2IDExLjkxMiA0LjI1MTcxIDExLjczNkM0LjA4MzkgMTEuNTU1OSA0IDExLjI3MTUgNCAxMC44ODI3VjQuMTE3MzNDNCAzLjcyMDMzIDQuMDg1OTUgMy40MzU4OCA0LjI1Nzg0IDMuMjYzOThDNC40MzM4MyAzLjA4Nzk5IDQuNzE2MjMgMyA1LjEwNTA1IDNDNi40Mjc0MSAzIDguMjU1OTEgMyA5LjAyODUyIDNDMTAuMTM3MyAzIDExLjA1MzkgMy45ODE1MyAxMS4wNTM5IDUuMTg0NkMxMS4wNTM5IDYuMDg1MDEgMTAuNjAzNyA2LjgxODU1IDkuNzAzMjcgNy4yMzYwMkMxMC44NjU3IDcuNDQ4NTEgMTEuNTE3NiA4LjYyNzg3IDExLjUxNzYgOS40ODEyOEMxMS41MTc2IDEwLjUxMjUgMTAuOTkwMiAxMiA5LjI3NzM0IDEyQzguNzc3NDIgMTIgNi40MjYyNiAxMiA1LjEwNTA1IDEyWk04LjM3ODkxIDguMDAzNDFINS44VjEwLjYzMUg4LjM3ODkxQzguOSAxMC42MzEgOS42Mjk2IDEwLjEyMTEgOS42Mjk2IDkuMjk4NzdDOS42Mjk2IDguNDc2NDMgOC45IDguMDAzNDEgOC4zNzg5MSA4LjAwMzQxWk01LjggNC4zNjkwM1Y2LjY5NTc3SDguMTc5NjlDOC41MzkwNiA2LjY5NTc3IDkuMjc3MzQgNi4zNTkzOSA5LjI3NzM0IDUuNTAwMDJDOS4yNzczNCA0LjY0MDY0IDguNDgwNDcgNC4zNjkwMyA4LjE3OTY5IDQuMzY5MDNINS44WlwiLGZpbGw6bn0pKX0sUnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuNSA0LjVDMi41IDMuMDk4ODYgMy41OTg4NiAyIDUgMkgxMi40OTlDMTIuNzc1MiAyIDEzIDIuMjIzODYgMTMgMi41QzEzIDIuNzc2MTQgMTIuNzc2MSAzIDEyLjUgM0g4LjY5MjQ0TDguNDA1MDkgMy44NTQ1OEM4LjE4ODY5IDQuNDk3NTIgNy44OTQwMSA1LjM3MTk3IDcuNTgwOTEgNi4yOTc5NEM3LjUwMjU5IDYuNTI5NTYgNy40MjMwOCA2Ljc2NDUzIDcuMzQzMzIgN0g4LjVDOC43NzYxNCA3IDkgNy4yMjM4NiA5IDcuNUM5IDcuNzc2MTQgOC43NzYxNCA4IDguNSA4SDcuMDA0MDdDNi41NjcyNCA5LjI4NTQzIDYuMTY0MzUgMTAuNDYxMyA1Ljk1Nzk5IDExLjAzODZDNS42MzYyNyAxMS45Mzg2IDUuMjA3MTIgMTIuNDg1NyA0LjY2NzQxIDEyLjc3NzhDNC4xNjMzNSAxMy4wNTA3IDMuNjQxNTQgMTMuMDUwMyAzLjI4Mzc4IDEzLjA1TDMuMjUgMTMuMDVDMi45NDYyNCAxMy4wNSAyLjcgMTIuODAzNyAyLjcgMTIuNUMyLjcgMTIuMTk2MiAyLjk0NjI0IDExLjk1IDMuMjUgMTEuOTVDMy42NDE4MiAxMS45NSAzLjkwMzUgMTEuOTQwNSA0LjE0Mzc0IDExLjgxMDVDNC4zNjQ0MyAxMS42OTEgNC42NTUzMiAxMS40MTQ4IDQuOTIyMTcgMTAuNjY4M0M1LjEwNjk1IDEwLjE1MTQgNS40NTM3NSA5LjE0MTM0IDUuODQyMiA4SDQuNUM0LjIyMzg2IDggNCA3Ljc3NjE0IDQgNy41QzQgNy4yMjM4NiA0LjIyMzg2IDcgNC41IDdINi4xODE4N0M2LjMwMTI3IDYuNjQ3ODUgNi40MjEzMiA2LjI5MzIzIDYuNTM4ODcgNS45NDU1OUM2Ljg1MTc1IDUuMDIwMjUgNy4xNDYyNyA0LjE0NjMxIDcuMzYyNTYgMy41MDM2OEw3LjUzMTkyIDNINUM0LjE1MTE0IDMgMy41IDMuNjUxMTQgMy41IDQuNUMzLjUgNC43NzYxNCAzLjI3NjE0IDUgMyA1QzIuNzIzODYgNSAyLjUgNC43NzYxNCAyLjUgNC41WlwiLGZpbGw6bn0pKX0sSXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUuNjc0OTQgMy41MDAxN0M1LjY3NDk0IDMuMjUxNjQgNS44NzY0MSAzLjA1MDE3IDYuMTI0OTQgMy4wNTAxN0gxMC42MjQ5QzEwLjg3MzUgMy4wNTAxNyAxMS4wNzQ5IDMuMjUxNjQgMTEuMDc0OSAzLjUwMDE3QzExLjA3NDkgMy43NDg3IDEwLjg3MzUgMy45NTAxNyAxMC42MjQ5IDMuOTUwMTdIOS4wMDU4N0w3LjIzMDkgMTEuMDVIOC44NzQ5M0M5LjEyMzQ1IDExLjA1IDkuMzI0OTMgMTEuMjUxNSA5LjMyNDkzIDExLjVDOS4zMjQ5MyAxMS43NDg2IDkuMTIzNDUgMTEuOTUgOC44NzQ5MyAxMS45NUg0LjM3NDkzQzQuMTI2NCAxMS45NSAzLjkyNDkzIDExLjc0ODYgMy45MjQ5MyAxMS41QzMuOTI0OTMgMTEuMjUxNSA0LjEyNjQgMTEuMDUgNC4zNzQ5MyAxMS4wNUg1Ljk5Mzk3TDcuNzY4OTQgMy45NTAxN0g2LjEyNDk0QzUuODc2NDEgMy45NTAxNyA1LjY3NDk0IDMuNzQ4NyA1LjY3NDk0IDMuNTAwMTdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxWdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC43OTk5MyAzLjUwMDE3QzQuNzk5OTMgMy4yNTE2NCA1LjAwMTQgMy4wNTAxNyA1LjI0OTkzIDMuMDUwMTdIOS43NDk5M0M5Ljk5ODQ1IDMuMDUwMTcgMTAuMTk5OSAzLjI1MTY0IDEwLjE5OTkgMy41MDAxN0MxMC4xOTk5IDMuNzQ4NyA5Ljk5ODQ1IDMuOTUwMTcgOS43NDk5MyAzLjk1MDE3SDguMDk5OTNWMTEuMDVIOS43NDk5NEM5Ljk5ODQ3IDExLjA1IDEwLjE5OTkgMTEuMjUxNSAxMC4xOTk5IDExLjVDMTAuMTk5OSAxMS43NDg2IDkuOTk4NDcgMTEuOTUgOS43NDk5NCAxMS45NUg1LjI0OTk0QzUuMDAxNDEgMTEuOTUgNC43OTk5NCAxMS43NDg2IDQuNzk5OTQgMTEuNUM0Ljc5OTk0IDExLjI1MTUgNS4wMDE0MSAxMS4wNSA1LjI0OTk0IDExLjA1SDYuODk5OTNWMy45NTAxN0g1LjI0OTkzQzUuMDAxNCAzLjk1MDE3IDQuNzk5OTMgMy43NDg3IDQuNzk5OTMgMy41MDAxN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEh0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjc4MjMzIDIuMjE3MDdDMi43MDczMiAyLjE0MjA2IDIuNjA1NTcgMi4wOTk5MSAyLjQ5OTQ5IDIuMDk5OTFDMi4zOTM0IDIuMDk5OTEgMi4yOTE2NiAyLjE0MjA2IDIuMjE2NjQgMi4yMTcwN0wwLjIxNjY0NSA0LjIxNzA3QzAuMDYwNDM1MSA0LjM3MzI4IDAuMDYwNDM1MSA0LjYyNjU1IDAuMjE2NjQ1IDQuNzgyNzZDMC4zNzI4NTUgNC45Mzg5NyAwLjYyNjEyMSA0LjkzODk3IDAuNzgyMzMgNC43ODI3NkwyLjA5OTQ5IDMuNDY1NkwyLjA5OTQ5IDExLjUzNDJMMC43ODIzMyAxMC4yMTcxQzAuNjI2MTIgMTAuMDYwOSAwLjM3Mjg1NCAxMC4wNjA5IDAuMjE2NjQ1IDEwLjIxNzFDMC4wNjA0MzQ5IDEwLjM3MzMgMC4wNjA0MzQ5IDEwLjYyNjUgMC4yMTY2NDUgMTAuNzgyOEwyLjIxNjY0IDEyLjc4MjhDMi4yOTE2NiAxMi44NTc4IDIuMzkzNCAxMi44OTk5IDIuNDk5NDkgMTIuODk5OUMyLjYwNTU3IDEyLjg5OTkgMi43MDczMSAxMi44NTc4IDIuNzgyMzMgMTIuNzgyOEw0Ljc4MjMzIDEwLjc4MjhDNC45Mzg1NCAxMC42MjY1IDQuOTM4NTQgMTAuMzczMyA0Ljc4MjMzIDEwLjIxNzFDNC42MjYxMiAxMC4wNjA5IDQuMzcyODUgMTAuMDYwOSA0LjIxNjY0IDEwLjIxNzFMMi44OTk0OSAxMS41MzQyTDIuODk5NDkgMy40NjU2TDQuMjE2NjQgNC43ODI3NkM0LjM3Mjg1IDQuOTM4OTcgNC42MjYxMiA0LjkzODk3IDQuNzgyMzMgNC43ODI3NkM0LjkzODU0IDQuNjI2NTUgNC45Mzg1NCA0LjM3MzI4IDQuNzgyMzMgNC4yMTcwN0wyLjc4MjMzIDIuMjE3MDdaTTEwLjUgMi43NDk5N0MxMC43MTA3IDIuNzQ5OTcgMTAuODk4OCAyLjg4MjExIDEwLjk3MDMgMy4wODAzNkwxMy45NzAzIDExLjM5OTlDMTQuMDY0IDExLjY1OTcgMTMuOTI5MyAxMS45NDYyIDEzLjY2OTYgMTIuMDM5OUMxMy40MDk4IDEyLjEzMzYgMTMuMTIzMyAxMS45OTg5IDEzLjAyOTYgMTEuNzM5MkwxMi4wNDc3IDkuMDE2SDguOTUyMjhMNy45NzAzMyAxMS43MzkyQzcuODc2NjYgMTEuOTk4OSA3LjU5MDEzIDEyLjEzMzYgNy4zMzAzNiAxMi4wMzk5QzcuMDcwNTkgMTEuOTQ2MiA2LjkzNTk1IDExLjY1OTcgNy4wMjk2MiAxMS4zOTk5TDEwLjAyOTYgMy4wODAzNkMxMC4xMDExIDIuODgyMTEgMTAuMjg5MiAyLjc0OTk3IDEwLjUgMi43NDk5N1pNMTAuNSA0LjcyMzk2TDExLjc0MTIgOC4xNjZIOS4yNTg3OUwxMC41IDQuNzIzOTZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxBdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS4wMzc5MSA5Ljk4MDc1QzAuOTM0Nzc3IDkuNjU4MyAxLjExNjAzIDkuMzc3MTkgMS40MDAwNSA5LjI0ODcxQzEuNjg0MDggOS4xMjAyMiAyLjA5NDYzIDkuMTM0MTIgMi4yNzA3MSA5LjQ1NDI2QzIuODUzOTMgMTAuNTE0NyAzLjY0NTk5IDEwLjcyODIgNC40ODY2NSAxMC43MjgyQzUuNTI3MjEgMTAuNzI4MiA2LjI5NjU5IDEwLjI2MTUgNi4yOTY1OSA5LjQ1NDI2QzYuMjk2NTkgOC44MDQ3IDUuOTExOSA4LjQ2NDE2IDQuODcxMzQgOC4xNDI1M0w0LjE1ODcyIDcuOTIxODFDMi42NDUxOCA3LjQ0ODgzIDEuODg4NDIgNi42OTIwNiAxLjg4ODQyIDUuNDU2MDFDMS44ODg0MiAzLjc5NzQzIDMuMjc1ODMgMi42ODc1IDUuMjQzNDIgMi42ODc1QzYuOTE3MzMgMi42ODc1IDcuOTc0MDkgMy4zMzUzNiA4LjQzODMzIDQuMzEwNjVDOC41NzA4NyA0LjU4OTA5IDguNTc2MTQgNC45MTI5NCA4LjIyNzk0IDUuMTkxMTRDNy44Nzk3NCA1LjQ2OTM0IDcuNTIzNTEgNS4zNDc5OSA3LjIzMzI3IDUuMDM4MzlDNi40NzIxNSA0LjIyNjUzIDUuOTk1NDUgNC4wNDk2OCA1LjI1NjA0IDQuMDQ5NjhDNC4xMzk4IDQuMDQ5NjggMy41NDcgNC42MzYxOCAzLjU0NyA1LjI3OTQzQzMuNTQ3IDUuODY1OTIgMy45NjMyMiA2LjIzMTY5IDQuOTQ3MDIgNi41MzQ0TDUuNjc4NTYgNi43NjE0M0M3LjIyOTk0IDcuMjM0NDEgNy45NzQwOSA3Ljk1OTY0IDcuOTc0MDkgOS4xNzA0N0M3Ljk3NDA5IDEwLjc3MjMgNi42OTM4OSAxMi4wOTAzIDQuNDYxNDMgMTIuMDkwM0MyLjg2NjEyIDEyLjA5MDMgMS40MDAwNSAxMS4xMTMxIDEuMDM3OTEgOS45ODA3NVpNMTEuODQ5MSA4Ljc3OTg1QzEwLjY2MSA4LjM5NTQzIDEwLjE2NDkgNy44NjExNCAxMC4xNjQ5IDYuOTg4MDVDMTAuMTY0OSA1Ljg2NzM2IDExLjE2MzYgNS4wNDYzOSAxMi42MTI4IDUuMDQ2MzlDMTMuODU0NiA1LjA0NjM5IDE0LjY2MjkgNS42MzM0NSAxNC45Nzc4IDYuNjM0NkMxNS4wNDQzIDYuODQ1OTkgMTQuOTU5MyA2Ljk4MDA2IDE0Ljc0NzUgNy4wNDkxQzE0LjUzOTQgNy4xMTY5NyAxNC4zMTc2IDcuMDk5NzQgMTQuMjM4IDYuODk2MTFDMTMuOTM1NiA2LjEyMjczIDEzLjM1MiA1Ljc2MzExIDEyLjU5OTggNS43NjMxMUMxMS42NDY3IDUuNzYzMTEgMTEuMDEzNSA2LjI1MTc4IDExLjAxMzUgNi45MTYzOEMxMS4wMTM1IDcuNDUwNjYgMTEuMzQ2NCA3Ljc1MDM4IDEyLjI0NzMgOC4wNDM1OEwxMi44MzQ4IDguMjMyNTRDMTQuMDYyIDguNjI5OTkgMTQuNTUxNiA5LjEzODIxIDE0LjU1MTYgMTAuMDE3OEMxNC41NTE2IDExLjE5NzIgMTMuNDgxIDEyLjA0NDIgMTEuOTkyNyAxMi4wNDQyQzEwLjY0MzkgMTIuMDQ0MiA5LjY1NjQ0IDExLjI4MDkgOS40MTk3OSAxMC4zMzYxQzkuMzY1MzUgMTAuMTE4OCA5LjQxMTkyIDEwLjAyODcgOS43MDAzOSA5Ljk2MTg0QzkuOTg4ODYgOS44OTQ5OSAxMC4wNzE0IDkuODk5MTggMTAuMTcxNSAxMC4xMzY5QzEwLjQ1NTUgMTAuODExNCAxMS4xNTMxIDExLjMyNzUgMTIuMDMxOCAxMS4zMjc1QzEyLjk5MTQgMTEuMzI3NSAxMy42ODM0IDEwLjc4MDIgMTMuNjgzNCAxMC4wNjM0QzEzLjY4MzQgOS41MzU2NyAxMy4zOTYxIDkuMjg4MDcgMTIuNDM2NiA4Ljk3NTMyTDExLjg0OTEgOC43Nzk4NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFR0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMSAxLjVDMTEgMS4yMjM4NiAxMC43NzYxIDEgMTAuNSAxQzEwLjIyMzkgMSAxMCAxLjIyMzg2IDEwIDEuNVY0SDVWMS41QzUgMS4yMjM4NiA0Ljc3NjE0IDEgNC41IDFDNC4yMjM4NiAxIDQgMS4yMjM4NiA0IDEuNVY0SDEuNUMxLjIyMzg2IDQgMSA0LjIyMzg2IDEgNC41QzEgNC43NzYxNCAxLjIyMzg2IDUgMS41IDVINFYxMEgxLjVDMS4yMjM4NiAxMCAxIDEwLjIyMzkgMSAxMC41QzEgMTAuNzc2MSAxLjIyMzg2IDExIDEuNSAxMUg0VjEzLjVDNCAxMy43NzYxIDQuMjIzODYgMTQgNC41IDE0QzQuNzc2MTQgMTQgNSAxMy43NzYxIDUgMTMuNVYxMUgxMFYxMy41QzEwIDEzLjc3NjEgMTAuMjIzOSAxNCAxMC41IDE0QzEwLjc3NjEgMTQgMTEgMTMuNzc2MSAxMSAxMy41VjExSDEzLjVDMTMuNzc2MSAxMSAxNCAxMC43NzYxIDE0IDEwLjVDMTQgMTAuMjIzOSAxMy43NzYxIDEwIDEzLjUgMTBIMTFWNUgxMy41QzEzLjc3NjEgNSAxNCA0Ljc3NjE0IDE0IDQuNUMxNCA0LjIyMzg2IDEzLjc3NjEgNCAxMy41IDRIMTFWMS41Wk0xMCAxMFY1SDVWMTBIMTBaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxEdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy4zODI1IDEuMjk1NjdDMy40NjI0MSAxLjExNDMyIDMuNjQxODggMC45OTcyODQgMy44NDAwNSAwLjk5NzI4NEgxMS41QzExLjc3NjEgMC45OTcyODQgMTIgMS4yMjExNCAxMiAxLjQ5NzI4VjUuNUMxMiA1Ljc3NjE0IDExLjc3NjEgNiAxMS41IDZIOC42MzUyMUwxMS41Mjg4IDkuMTYyNDdDMTEuNjYyNiA5LjMwODcgMTEuNjk3NCA5LjUyMDE1IDExLjYxNzUgOS43MDE1NEMxMS41Mzc2IDkuODgyOTMgMTEuMzU4MiAxMCAxMS4xNiAxMEg4VjEzLjVDOCAxMy43MDIyIDcuODc4MTggMTMuODg0NSA3LjY5MTM0IDEzLjk2MTlDNy41MDQ1IDE0LjAzOTMgNy4yODk0NSAxMy45OTY2IDcuMTQ2NDUgMTMuODUzNkwzLjE0NjQ1IDkuODUzNTVDMy4wNTI2OCA5Ljc1OTc5IDMgOS42MzI2MSAzIDkuNVY1LjVDMyA1LjIyMzg2IDMuMjIzODYgNSAzLjUgNUg2LjM2NTMxTDMuNDcxMDUgMS44MzQ2OEMzLjMzNzMyIDEuNjg4NDQgMy4zMDI1OSAxLjQ3NzAxIDMuMzgyNSAxLjI5NTY3Wk03LjcyMDMyIDVMNC45NzQ3NCAxLjk5NzI4SDExVjVINy43MjAzMlpNNy4yNzk3OCA2SDRWOUg3LjVIMTAuMDI0N0w3LjI3OTc4IDZaTTQuNzA3MTEgMTBMNyAxMi4yOTI5VjEwSDQuNzA3MTFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxCdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy4wNzA5NSAwLjY1MDIzOEM2LjY3MzkxIDAuNjUwMjM4IDYuMzI5NzcgMC45MjUwOTYgNi4yNDE5OCAxLjMxMjMxTDYuMDAzOSAyLjM2MjQ3QzUuNjI0OSAyLjQ3MjY5IDUuMjYzMzUgMi42MjM2MyA0LjkyNDM2IDIuODEwMTNMNC4wMTMzNSAyLjIzNTg1QzMuNjc3NDggMi4wMjQxMyAzLjIzOTc4IDIuMDczMTIgMi45NTkwMyAyLjM1Mzg2TDIuMzUyOTQgMi45NTk5NkMyLjA3MjIgMy4yNDA3IDIuMDIzMiAzLjY3ODQgMi4yMzQ5MyA0LjAxNDI3TDIuODA5NDIgNC45MjU2MUMyLjYyMzA3IDUuMjY0NSAyLjQ3MjI3IDUuNjI1OTQgMi4zNjIxNiA2LjAwNDgxTDEuMzEyMDkgNi4yNDI4N0MwLjkyNDg4MyA2LjMzMDY1IDAuNjUwMDI0IDYuNjc0OCAwLjY1MDAyNCA3LjA3MTgzVjcuOTI4OTdDMC42NTAwMjQgOC4zMjYwMSAwLjkyNDg4MyA4LjY3MDE1IDEuMzEyMDkgOC43NTc5NEwyLjM2MjI4IDguOTk2MDNDMi40NzI0NiA5LjM3NSAyLjYyMzM1IDkuNzM2NTIgMi44MDk3OSAxMC4wNzU1TDIuMjM1NCAxMC45ODY3QzIuMDIzNjcgMTEuMzIyNSAyLjA3MjY3IDExLjc2MDIgMi4zNTM0MSAxMi4wNDFMMi45NTk1MSAxMi42NDcxQzMuMjQwMjUgMTIuOTI3OCAzLjY3Nzk1IDEyLjk3NjggNC4wMTM4MiAxMi43NjUxTDQuOTI1MDYgMTIuMTkwN0M1LjI2Mzg0IDEyLjM3NyA1LjYyNTE2IDEyLjUyNzggNi4wMDM5IDEyLjYzNzlMNi4yNDE5OCAxMy42ODgxQzYuMzI5NzcgMTQuMDc1MyA2LjY3MzkxIDE0LjM1MDIgNy4wNzA5NSAxNC4zNTAySDcuOTI4MDlDOC4zMjUxMiAxNC4zNTAyIDguNjY5MjcgMTQuMDc1MyA4Ljc1NzA1IDEzLjY4ODFMOC45OTUwNSAxMi42MzgzQzkuMzc0MTEgMTIuNTI4MiA5LjczNTczIDEyLjM3NzMgMTAuMDc0OCAxMi4xOTA5TDEwLjk4NiAxMi43NjUzQzExLjMyMTggMTIuOTc3IDExLjc1OTUgMTIuOTI4IDEyLjA0MDMgMTIuNjQ3M0wxMi42NDY0IDEyLjA0MTJDMTIuOTI3MSAxMS43NjA0IDEyLjk3NjEgMTEuMzIyNyAxMi43NjQ0IDEwLjk4NjlMMTIuMTkwMiAxMC4wNzZDMTIuMzc2OCA5LjczNjg4IDEyLjUyNzggOS4zNzUxNSAxMi42MzggOC45OTU5NkwxMy42ODc5IDguNzU3OTRDMTQuMDc1MSA4LjY3MDE1IDE0LjM1IDguMzI2MDEgMTQuMzUgNy45Mjg5N1Y3LjA3MTgzQzE0LjM1IDYuNjc0OCAxNC4wNzUxIDYuMzMwNjUgMTMuNjg3OSA2LjI0Mjg3TDEyLjYzODEgNi4wMDQ4OEMxMi41MjggNS42MjU3OCAxMi4zNzcxIDUuMjY0MTQgMTIuMTkwNiA0LjkyNTA3TDEyLjc2NDggNC4wMTQwN0MxMi45NzY2IDMuNjc4MiAxMi45Mjc2IDMuMjQwNSAxMi42NDY4IDIuOTU5NzVMMTIuMDQwNyAyLjM1MzY2QzExLjc2IDIuMDcyOTIgMTEuMzIyMyAyLjAyMzkyIDEwLjk4NjQgMi4yMzU2NUwxMC4wNzU1IDIuODA5ODlDOS43MzYyMiAyLjYyMzI4IDkuMzc0MzcgMi40NzIyOSA4Ljk5NTA1IDIuMzYyMDlMOC43NTcwNSAxLjMxMjMxQzguNjY5MjcgMC45MjUwOTYgOC4zMjUxMiAwLjY1MDIzOCA3LjkyODA5IDAuNjUwMjM4SDcuMDcwOTVaTTQuOTIwNTMgMy44MTI1MUM1LjQ0NzI0IDMuNDQzMzkgNi4wNTY2NSAzLjE4NDI0IDYuNzE1NDMgMy4wNjgzOUw3LjA3MDk1IDEuNTAwMjRINy45MjgwOUw4LjI4MzU1IDMuMDY4MTZDOC45NDI2NyAzLjE4Mzg3IDkuNTUyNCAzLjQ0MzAyIDEwLjA3OTQgMy44MTIyNEwxMS40Mzk3IDIuOTU0N0wxMi4wNDU4IDMuNTYwNzlMMTEuMTg4MiA0LjkyMTE3QzExLjU1NzMgNS40NDc5OCAxMS44MTY0IDYuMDU3NSAxMS45MzIxIDYuNzE2MzhMMTMuNSA3LjA3MTgzVjcuOTI4OTdMMTEuOTMyIDguMjg0NDRDMTEuODE2MiA4Ljk0MzQyIDExLjU1NyA5LjU1MzAxIDExLjE4NzggMTAuMDc5OEwxMi4wNDUzIDExLjQ0MDJMMTEuNDM5MiAxMi4wNDYyTDEwLjA3ODcgMTEuMTg4NkM5LjU1MTkyIDExLjU1NzYgOC45NDI0MSAxMS44MTY2IDguMjgzNTUgMTEuOTMyM0w3LjkyODA5IDEzLjUwMDJINy4wNzA5NUw2LjcxNTQzIDExLjkzMkM2LjA1NjkgMTEuODE2MiA1LjQ0NzcyIDExLjU1NzIgNC45MjExNiAxMS4xODgzTDMuNTYwNTUgMTIuMDQ2TDIuOTU0NDUgMTEuNDM5OUwzLjgxMjEzIDEwLjA3OTRDMy40NDMxIDkuNTUyNjYgMy4xODQwMyA4Ljk0MzI2IDMuMDY4MjUgOC4yODQ1TDEuNTAwMDIgNy45Mjg5N1Y3LjA3MTgzTDMuMDY4MTggNi43MTYzMkMzLjE4Mzg4IDYuMDU3NjUgMy40NDI4MyA1LjQ0ODMzIDMuODExNzEgNC45MjE2NUwyLjk1Mzk4IDMuNTYxTDMuNTYwMDggMi45NTQ5MUw0LjkyMDUzIDMuODEyNTFaTTkuMDI0OTYgNy41MDAwOEM5LjAyNDk2IDguMzQyMjYgOC4zNDIyMyA5LjAyNDk5IDcuNTAwMDUgOS4wMjQ5OUM2LjY1Nzg2IDkuMDI0OTkgNS45NzUxMyA4LjM0MjI2IDUuOTc1MTMgNy41MDAwOEM1Ljk3NTEzIDYuNjU3ODkgNi42NTc4NiA1Ljk3NTE2IDcuNTAwMDUgNS45NzUxNkM4LjM0MjIzIDUuOTc1MTYgOS4wMjQ5NiA2LjY1Nzg5IDkuMDI0OTYgNy41MDAwOFpNOS45MjQ5NiA3LjUwMDA4QzkuOTI0OTYgOC44MzkzMiA4LjgzOTI5IDkuOTI0OTkgNy41MDAwNSA5LjkyNDk5QzYuMTYwOCA5LjkyNDk5IDUuMDc1MTMgOC44MzkzMiA1LjA3NTEzIDcuNTAwMDhDNS4wNzUxMyA2LjE2MDg0IDYuMTYwOCA1LjA3NTE2IDcuNTAwMDUgNS4wNzUxNkM4LjgzOTI5IDUuMDc1MTYgOS45MjQ5NiA2LjE2MDg0IDkuOTI0OTYgNy41MDAwOFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFp0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTM2IDAuODUwMDA2QzMuODI3NjcgMC44NTAwMDYgMC44NDk5NzYgMy44MjczIDAuODQ5OTc2IDcuNTAwMjNDMC44NDk5NzYgMTAuNDM3OSAyLjc1NTIzIDEyLjkzMDYgNS4zOTc3NSAxMy44MTA0QzUuNzMwNDcgMTMuODcxMiA1Ljg1MTcxIDEzLjY2NTggNS44NTE3MSAxMy40ODk1QzUuODUxNzEgMTMuMzMxNSA1Ljg0NiAxMi45MTM1IDUuODQyNzMgMTIuMzU4N0MzLjk5MzAxIDEyLjc2MDQgMy42MDI3MyAxMS40NjcxIDMuNjAyNzMgMTEuNDY3MUMzLjMwMDIyIDEwLjY5ODggMi44NjQyMyAxMC40OTQyIDIuODY0MjMgMTAuNDk0MkMyLjI2MDQ0IDEwLjA4MTkgMi45MDk5NSAxMC4wOTAxIDIuOTA5OTUgMTAuMDkwMUMzLjU3NzQyIDEwLjEzNyAzLjkyODUgMTAuNzc1NSAzLjkyODUgMTAuNzc1NUM0LjUyMTY3IDExLjc5MTYgNS40ODUxMiAxMS40OTgxIDUuODYzOTYgMTEuMzI3OUM1LjkyNDM4IDEwLjg5ODQgNi4wOTYyNSAxMC42MDUzIDYuMjg2MDggMTAuNDM5MUM0LjgwOTQ4IDEwLjI3MDkgMy4yNTY5NSA5LjcwMDYzIDMuMjU2OTUgNy4xNTI0MUMzLjI1Njk1IDYuNDI2MTUgMy41MTYxOCA1LjgzMjk4IDMuOTQxNTcgNS4zNjhDMy44NzI5OSA1LjE5OTggMy42NDQ3OCA0LjUyMzc1IDQuMDA2ODkgMy42MDgwN0M0LjAwNjg5IDMuNjA4MDcgNC41NjQ5NCAzLjQyOTI2IDUuODM1MzggNC4yODk0MUM2LjM2NTY4IDQuMTQyMDQgNi45MzQ3NyA0LjA2ODU2IDcuNTAwMTggNC4wNjU3QzguMDY1MTggNC4wNjg1NiA4LjYzMzg2IDQuMTQyMDQgOS4xNjQ5OCA0LjI4OTQxQzEwLjQzNDYgMy40MjkyNiAxMC45OTE4IDMuNjA4MDcgMTAuOTkxOCAzLjYwODA3QzExLjM1NDggNC41MjM3NSAxMS4xMjY2IDUuMTk5OCAxMS4wNTg0IDUuMzY4QzExLjQ4NDYgNS44MzI5OCAxMS43NDE4IDYuNDI2MTUgMTEuNzQxOCA3LjE1MjQxQzExLjc0MTggOS43MDcxNiAxMC4xODY4IDEwLjI2OTMgOC43MDU3MSAxMC40MzM4QzguOTQ0MTIgMTAuNjM5MiA5LjE1NjgxIDExLjA0NSA5LjE1NjgxIDExLjY2NTVDOS4xNTY4MSAxMi41NTQyIDkuMTQ4NjUgMTMuMjcxNSA5LjE0ODY1IDEzLjQ4OTVDOS4xNDg2NSAxMy42Njc1IDkuMjY4NjcgMTMuODc0NSA5LjYwNTg4IDEzLjgwOTVDMTIuMjQ2NCAxMi45MjgyIDE0LjE1IDEwLjQzNzUgMTQuMTUgNy41MDAyM0MxNC4xNSAzLjgyNzMgMTEuMTcyMyAwLjg1MDAwNiA3LjQ5OTM2IDAuODUwMDA2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sJHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5OTYgMS44MDAwMkM0LjM1MTk0IDEuODAwMDIgMS43OTk5NiA0LjM1MiAxLjc5OTk2IDcuNTAwMDJDMS43OTk5NiAxMC42NDggNC4zNTE5NCAxMy4yIDcuNDk5OTYgMTMuMkMxMC42NDggMTMuMiAxMy4yIDEwLjY0OCAxMy4yIDcuNTAwMDJDMTMuMiA0LjM1MiAxMC42NDggMS44MDAwMiA3LjQ5OTk2IDEuODAwMDJaTTAuODk5OTYzIDcuNTAwMDJDMC44OTk5NjMgMy44NTQ5NCAzLjg1NDg4IDAuOTAwMDI0IDcuNDk5OTYgMC45MDAwMjRDMTEuMTQ1IDAuOTAwMDI0IDE0LjEgMy44NTQ5NCAxNC4xIDcuNTAwMDJDMTQuMSAxMS4xNDUxIDExLjE0NSAxNC4xIDcuNDk5OTYgMTQuMUMzLjg1NDg4IDE0LjEgMC44OTk5NjMgMTEuMTQ1MSAwLjg5OTk2MyA3LjUwMDAyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTMuNDk5OSA3Ljg5OTk4SDEuNDk5OTRWNy4wOTk5OEgxMy40OTk5VjcuODk5OThaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjA5OTkxIDEzLjVWMS41SDcuODk5OTFWMTMuNUg3LjA5OTkxek0xMC4zNzUgNy40OTk5OEMxMC4zNzUgNS4zMjcyNCA5LjU5MzY0IDMuMTc3NzggOC4wNjE4MyAxLjc1NjU2TDguNTM3OTMgMS4yNDM0MUMxMC4yMzk2IDIuODIyMTggMTEuMDc1IDUuMTcyNzMgMTEuMDc1IDcuNDk5OTggMTEuMDc1IDkuODI3MjQgMTAuMjM5NiAxMi4xNzc4IDguNTM3OTMgMTMuNzU2Nkw4LjA2MTgzIDEzLjI0MzRDOS41OTM2NCAxMS44MjIyIDEwLjM3NSA5LjY3MjczIDEwLjM3NSA3LjQ5OTk4ek0zLjk5OTY5IDcuNUMzLjk5OTY5IDUuMTc2MTEgNC44MDc4NiAyLjgyNjc4IDYuNDU3NjggMS4yNDcxOUw2Ljk0MTc3IDEuNzUyODFDNS40NTgyIDMuMTczMjMgNC42OTk2OSA1LjMyMzg5IDQuNjk5NjkgNy41IDQuNjk5NyA5LjY3NjExIDUuNDU4MjIgMTEuODI2OCA2Ljk0MTc5IDEzLjI0NzJMNi40NTc2OSAxMy43NTI4QzQuODA3ODggMTIuMTczMiAzLjk5OTcgOS44MjM5IDMuOTk5NjkgNy41elwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTk5NiAzLjk1ODAxQzkuNjY5MjggMy45NTgwMSAxMS44NzUzIDQuMzU5MTUgMTMuMzcwNiA1LjE5NDQ4IDEzLjUzOTQgNS4yODg3NSAxMy41OTk4IDUuNTAxOTcgMTMuNTA1NSA1LjY3MDczIDEzLjQxMTMgNS44Mzk0OCAxMy4xOTggNS44OTk4NyAxMy4wMjkzIDUuODA1NiAxMS42Nzk0IDUuMDUxNTUgOS42MDc5OSA0LjY1ODAxIDcuNDk5OTYgNC42NTgwMSA1LjM5MTkyIDQuNjU4MDEgMy4zMjA1MiA1LjA1MTU1IDEuOTcwNjQgNS44MDU2IDEuODAxODggNS44OTk4NyAxLjU4ODY2IDUuODM5NDggMS40OTQzOSA1LjY3MDczIDEuNDAwMTMgNS41MDE5NyAxLjQ2MDUxIDUuMjg4NzUgMS42MjkyNyA1LjE5NDQ4IDMuMTI0NjYgNC4zNTkxNSA1LjMzMDYzIDMuOTU4MDEgNy40OTk5NiAzLjk1ODAxek03LjQ5OTk2IDEwLjg1QzkuNjY5MjggMTAuODUgMTEuODc1MyAxMC40NDg4IDEzLjM3MDYgOS42MTM1IDEzLjUzOTQgOS41MTkyNCAxMy41OTk4IDkuMzA2MDEgMTMuNTA1NSA5LjEzNzI2IDEzLjQxMTMgOC45Njg1IDEzLjE5OCA4LjkwODEyIDEzLjAyOTMgOS4wMDIzOCAxMS42Nzk0IDkuNzU2NDMgOS42MDc5OSAxMC4xNSA3LjQ5OTk2IDEwLjE1IDUuMzkxOTIgMTAuMTUgMy4zMjA1MiA5Ljc1NjQzIDEuOTcwNjQgOS4wMDIzOSAxLjgwMTg4IDguOTA4MTIgMS41ODg2NiA4Ljk2ODUgMS40OTQzOSA5LjEzNzI2IDEuNDAwMTMgOS4zMDYwMSAxLjQ2MDUxIDkuNTE5MjQgMS42MjkyNyA5LjYxMzUgMy4xMjQ2NiAxMC40NDg4IDUuMzMwNjMgMTAuODUgNy40OTk5NiAxMC44NXpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE50PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMi41IDJIOFY3SDEzVjIuNUMxMyAyLjIyMzg2IDEyLjc3NjEgMiAxMi41IDJaTTEzIDhIOFYxM0gxMi41QzEyLjc3NjEgMTMgMTMgMTIuNzc2MSAxMyAxMi41VjhaTTcgN1YySDIuNUMyLjIyMzg2IDIgMiAyLjIyMzg2IDIgMi41VjdIN1pNMiA4VjEyLjVDMiAxMi43NzYxIDIuMjIzODYgMTMgMi41IDEzSDdWOEgyWk0yLjUgMUMxLjY3MTU3IDEgMSAxLjY3MTU3IDEgMi41VjEyLjVDMSAxMy4zMjg0IDEuNjcxNTcgMTQgMi41IDE0SDEyLjVDMTMuMzI4NCAxNCAxNCAxMy4zMjg0IDE0IDEyLjVWMi41QzE0IDEuNjcxNTcgMTMuMzI4NCAxIDEyLjUgMUgyLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxGdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS40NDk5NSAwLjk0OTk1MUMxLjMxNzM0IDAuOTQ5OTUxIDEuMTkwMTYgMS4wMDI2MyAxLjA5NjQgMS4wOTY0QzEuMDAyNjMgMS4xOTAxNyAwLjk0OTk1MSAxLjMxNzM1IDAuOTQ5OTUxIDEuNDQ5OTVMMC45NDk5NjYgMy40NDk5NUMwLjk0OTk2OSAzLjcyNjEgMS4xNzM4MyAzLjk0OTk1IDEuNDQ5OTcgMy45NDk5NUMxLjcyNjExIDMuOTQ5OTUgMS45NDk5NyAzLjcyNjA5IDEuOTQ5OTcgMy40NDk5NUwxLjk0OTk1IDEuOTQ5OTVIMy40NDk5N0MzLjcyNjExIDEuOTQ5OTUgMy45NDk5NyAxLjcyNjA5IDMuOTQ5OTcgMS40NDk5NUMzLjk0OTk3IDEuMTczODEgMy43MjYxMSAwLjk0OTk1MSAzLjQ0OTk3IDAuOTQ5OTUxSDEuNDQ5OTVaTTUuOTQ5OTUgMC45NDk5NTFDNS42NzM4MSAwLjk0OTk1MSA1LjQ0OTk1IDEuMTczODEgNS40NDk5NSAxLjQ0OTk1QzUuNDQ5OTUgMS43MjYwOSA1LjY3MzgxIDEuOTQ5OTUgNS45NDk5NSAxLjk0OTk1SDguOTQ5OTVDOS4yMjYwOSAxLjk0OTk1IDkuNDQ5OTUgMS43MjYwOSA5LjQ0OTk1IDEuNDQ5OTVDOS40NDk5NSAxLjE3MzgxIDkuMjI2MDkgMC45NDk5NTEgOC45NDk5NSAwLjk0OTk1MUg1Ljk0OTk1Wk01LjQ0OTk1IDEzLjQ1QzUuNDQ5OTUgMTMuMTczOCA1LjY3MzgxIDEyLjk1IDUuOTQ5OTUgMTIuOTVIOC45NDk5NUM5LjIyNjA5IDEyLjk1IDkuNDQ5OTUgMTMuMTczOCA5LjQ0OTk1IDEzLjQ1QzkuNDQ5OTUgMTMuNzI2MSA5LjIyNjA5IDEzLjk1IDguOTQ5OTUgMTMuOTVINS45NDk5NUM1LjY3MzgxIDEzLjk1IDUuNDQ5OTUgMTMuNzI2MSA1LjQ0OTk1IDEzLjQ1Wk0xLjk0OTk1IDUuOTQ5OTVDMS45NDk5NSA1LjY3MzgxIDEuNzI2MDkgNS40NDk5NSAxLjQ0OTk1IDUuNDQ5OTVDMS4xNzM4MSA1LjQ0OTk1IDAuOTQ5OTUxIDUuNjczODEgMC45NDk5NTEgNS45NDk5NVY4Ljk0OTk1QzAuOTQ5OTUxIDkuMjI2MDkgMS4xNzM4MSA5LjQ0OTk1IDEuNDQ5OTUgOS40NDk5NUMxLjcyNjA5IDkuNDQ5OTUgMS45NDk5NSA5LjIyNjA5IDEuOTQ5OTUgOC45NDk5NVY1Ljk0OTk1Wk0xMy40NSA1LjQ0OTk1QzEzLjcyNjEgNS40NDk5NSAxMy45NSA1LjY3MzgxIDEzLjk1IDUuOTQ5OTVWOC45NDk5NUMxMy45NSA5LjIyNjA5IDEzLjcyNjEgOS40NDk5NSAxMy40NSA5LjQ0OTk1QzEzLjE3MzggOS40NDk5NSAxMi45NSA5LjIyNjA5IDEyLjk1IDguOTQ5OTVWNS45NDk5NUMxMi45NSA1LjY3MzgxIDEzLjE3MzggNS40NDk5NSAxMy40NSA1LjQ0OTk1Wk0xMS40NSAwLjk0OTk1MUMxMS4xNzM4IDAuOTQ5OTUxIDEwLjk1IDEuMTczODEgMTAuOTUgMS40NDk5NUMxMC45NSAxLjcyNjA5IDExLjE3MzggMS45NDk5NSAxMS40NSAxLjk0OTk1SDEyLjk0OTlWMy40NDk5NUMxMi45NDk5IDMuNzI2MDkgMTMuMTczOCAzLjk0OTk1IDEzLjQ0OTkgMy45NDk5NUMxMy43MjYxIDMuOTQ5OTUgMTMuOTQ5OSAzLjcyNjA5IDEzLjk0OTkgMy40NDk5NVYxLjQ0OTk1QzEzLjk0OTkgMS4xNzM4MSAxMy43MjUyIDAuOTQ5OTUxIDEzLjQ0OSAwLjk0OTk1MUgxMS40NVpNMS40NDk5NSAxMC45NUMxLjcyNjA5IDEwLjk1IDEuOTQ5OTUgMTEuMTczOCAxLjk0OTk1IDExLjQ1VjEyLjk1SDMuNDQ5OTdDMy43MjYxMSAxMi45NSAzLjk0OTk3IDEzLjE3MzggMy45NDk5NyAxMy40NUMzLjk0OTk3IDEzLjcyNjEgMy43MjYxMSAxMy45NSAzLjQ0OTk3IDEzLjk1SDEuNDQ5OTVDMS4xNzM4MSAxMy45NSAwLjk0OTk1MSAxMy43MjYxIDAuOTQ5OTUxIDEzLjQ1VjExLjQ1QzAuOTQ5OTUxIDExLjE3MzggMS4xNzM4MSAxMC45NSAxLjQ0OTk1IDEwLjk1Wk0xMy45NSAxMS40NUMxMy45NSAxMS4xNzM4IDEzLjcyNjEgMTAuOTUgMTMuNDUgMTAuOTVDMTMuMTczOCAxMC45NDk5IDEyLjk1IDExLjE3MzggMTIuOTUgMTEuNDQ5OUwxMi45NDkxIDEyLjk1SDExLjQ1QzExLjE3MzggMTIuOTUgMTAuOTUgMTMuMTczOCAxMC45NSAxMy40NUMxMC45NSAxMy43MjYxIDExLjE3MzggMTMuOTUgMTEuNDUgMTMuOTVIMTMuNDQ5OUMxMy43MjYxIDEzLjk1IDEzLjk0OTkgMTMuNzI2MSAxMy45NDk5IDEzLjQ1TDEzLjk1IDExLjQ1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sV3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5OTEgMC44NzY4OTJDMy44NDIyMiAwLjg3Njg5MiAwLjg3NzA3NSAzLjg0MjA0IDAuODc3MDc1IDcuNDk5NzJDMC44NzcwNzUgMTEuMTU3NCAzLjg0MjIyIDE0LjEyMjYgNy40OTk5MSAxNC4xMjI2QzExLjE1NzYgMTQuMTIyNiAxNC4xMjI3IDExLjE1NzQgMTQuMTIyNyA3LjQ5OTcyQzE0LjEyMjcgMy44NDIwNCAxMS4xNTc2IDAuODc2ODkyIDcuNDk5OTEgMC44NzY4OTJaTTcuMDAwMDMgMS44NDg2MUM0LjEwMTE0IDIuMTAxNyAxLjgyNzA3IDQuNTM1MTUgMS44MjcwNyA3LjQ5OTcyQzEuODI3MDcgMTAuNDY0MyA0LjEwMTE0IDEyLjg5NzcgNy4wMDAwMyAxMy4xNTA4VjEuODQ4NjFaTTguMDAwMDMgMTMuMTUwOEMxMC44OTg4IDEyLjg5NzYgMTMuMTcyNyAxMC40NjQyIDEzLjE3MjcgNy40OTk3MkMxMy4xNzI3IDQuNTM1MjQgMTAuODk4OCAyLjEwMTg1IDguMDAwMDMgMS44NDg2NFYxMy4xNTA4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5OTEgMC44NzY4OTJDMy44NDIyMiAwLjg3Njg5MiAwLjg3NzA3NSAzLjg0MjA0IDAuODc3MDc1IDcuNDk5NzJDMC44NzcwNzUgMTEuMTU3NCAzLjg0MjIyIDE0LjEyMjYgNy40OTk5MSAxNC4xMjI2QzExLjE1NzYgMTQuMTIyNiAxNC4xMjI3IDExLjE1NzQgMTQuMTIyNyA3LjQ5OTcyQzE0LjEyMjcgMy44NDIwNCAxMS4xNTc2IDAuODc2ODkyIDcuNDk5OTEgMC44NzY4OTJaTTcuNDk5ODggMS44MjY4OUM0LjM2Njg4IDEuODI2OSAxLjgyNzA3IDQuMzY2NzIgMS44MjcwNyA3LjQ5OTcyQzEuODI3MDcgMTAuNjMyNyA0LjM2Njg4IDEzLjE3MjUgNy40OTk4OCAxMy4xNzI2VjEuODI2ODlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx6dD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS41IDNDMS4yMjM4NiAzIDEgMy4yMjM4NiAxIDMuNUMxIDMuNzc2MTQgMS4yMjM4NiA0IDEuNSA0SDEzLjVDMTMuNzc2MSA0IDE0IDMuNzc2MTQgMTQgMy41QzE0IDMuMjIzODYgMTMuNzc2MSAzIDEzLjUgM0gxLjVaTTEgNy41QzEgNy4yMjM4NiAxLjIyMzg2IDcgMS41IDdIMTMuNUMxMy43NzYxIDcgMTQgNy4yMjM4NiAxNCA3LjVDMTQgNy43NzYxNCAxMy43NzYxIDggMTMuNSA4SDEuNUMxLjIyMzg2IDggMSA3Ljc3NjE0IDEgNy41Wk0xIDExLjVDMSAxMS4yMjM5IDEuMjIzODYgMTEgMS41IDExSDEzLjVDMTMuNzc2MSAxMSAxNCAxMS4yMjM5IDE0IDExLjVDMTQgMTEuNzc2MSAxMy43NzYxIDEyIDEzLjUgMTJIMS41QzEuMjIzODYgMTIgMSAxMS43NzYxIDEgMTEuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEd0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02LjgxMTMgMS42NDcwNkM2LjYyMTg4IDIuODc5MTggNi42ODI2OCAzLjg4NTIzIDYuNzY4NDggNS4zMDQ5OUM2Ljc4NDE1IDUuNTY0MjYgNi44MDA2NSA1LjgzNzMyIDYuODE2NjEgNi4xMjgwOEM2LjgzMTExIDYuMzkyMDggNi42Mzc1OCA2LjYyMTcyIDYuMzc0OTUgNi42NTIxN0M2LjExMjMyIDYuNjgyNjIgNS44NzEzOCA2LjUwMzM0IDUuODI1MDkgNi4yNDMwNEw1Ljc0NzU0IDUuODA2OThDNS42NDQwMiA1LjE2NTI5IDUuNDgzNTUgNC4yNTQ4MSA1LjE3ODA3IDMuNDQ3NDFDNC44NjI0MSAyLjYxMzEyIDQuNDQ4NiAyLjA0MTIxIDMuOTM0MzYgMS44NjA0NEMzLjY0OTk0IDEuNzYxMDQgMy40MTkwMSAxLjg0Mjc5IDMuMjU4NjggMi4wMTA1MkMzLjA4NzQ2IDIuMTg5NjIgMi45OTc2IDIuNDcwNjUgMy4wNjI3IDIuNzUzOTlDMy4yMTQ2IDMuMzQ0MjQgMy40NDYyNyAzLjkxNjcgMy42OTgzNiA0LjUxODAyQzMuNzIwODIgNC41NzE1OCAzLjc0MzQ2IDQuNjI1NDMgMy43NjYyMSA0LjY3OTU0QzMuOTk1NCA1LjIyNDU3IDQuMjM2MTkgNS43OTcyIDQuNDE2NDQgNi4zOTA4MUw0LjQxNjkxIDYuMzkyMzhDNC41NjIgNi44NzU4NiA0LjY1NjQ2IDcuMjU5NSA0LjczMDg2IDcuNTYxNjVDNC43NjAzNCA3LjY4MTM4IDQuNzg2NjcgNy43ODgzMSA0LjgxMTc1IDcuODgzNTlDNC44Njc2OCA4LjA5NjA2IDQuNzc4MzYgOC4zMjAxNCA0LjU5MTYxIDguNDM1ODhDNC40MDQ4NiA4LjU1MTYxIDQuMTY0NDUgOC41MzE4OCAzLjk5OTA3IDguMzg3MjVDMy43Mzc0OSA4LjE1ODQ4IDMuNTE1IDcuOTI3ODQgMy4zMTgxNyA3LjcxODAyQzMuMjc2MjcgNy42NzMzNSAzLjIzNjAyIDcuNjMwMTggMy4xOTcwNSA3LjU4ODM4QzMuMDQ3NzcgNy40MjgyNiAyLjkxNzEyIDcuMjg4MTIgMi43ODMzNCA3LjE2MDI5QzIuNDU5ODkgNi44NTEyMiAyLjE4Mzk4IDYuNjgwMDQgMS44MDU4NSA2LjY0MzY5TDEuODAzMjQgNi42NDM0M0MxLjU2MTE3IDYuNjE4ODggMS40MTQwMiA2LjY2NDQxIDEuMzE3NTYgNi43MjYyN0MxLjIxODk5IDYuNzg5NDcgMS4xMTk4OCA2LjkwNDE0IDEuMDM3ODQgNy4xMTIzQzAuOTc2NTc2IDcuMjg0OTIgMS4wMTUxNSA3LjYyOTg3IDEuMTkyOSA3Ljk2OTExTDEuMTk3MjggNy45Nzc0N0MxLjQwMDg2IDguMzg0NTIgMS43NDQ3NSA4LjgxNTg3IDIuMTgxNDEgOS4yOTI5OUMyLjM5NzM5IDkuNTI4OTggMi42Mjg3MiA5Ljc2ODQ5IDIuODY5MzQgMTAuMDE3NEwyLjg3OTY2IDEwLjAyODFDMy4xMTU0NiAxMC4yNzIxIDMuMzU5NjIgMTAuNTI0NyAzLjU5NzEzIDEwLjc4MjdDNC40Mjg4IDExLjY4NjMgNS4yNzcwNiAxMi43NTM4IDUuNDYyNyAxNEgxMS41MDg3QzExLjU2MzYgMTIuNDM1MyAxMS44NzU2IDExLjI2OCAxMi4yODc1IDEwLjEzNDZDMTIuNDQ1NCA5LjcwMDQxIDEyLjYxMjEgOS4yODQxMiAxMi43ODI2IDguODU4MjlDMTMuMTA5NyA4LjA0MTM5IDEzLjQ1MDkgNy4xODkzNyAxMy43NzA1IDYuMTA4MjRDMTQuMDk4OSA0Ljk5NzM3IDE0LjAwOTcgNC4zNzAzMyAxMy44NjEzIDQuMDM5ODRDMTMuNzE3IDMuNzE4NTggMTMuNDkxNCAzLjYxNzg2IDEzLjM4MTYgMy41OTYwNkMxMy4xMzgxIDMuNTQ3NzQgMTMuMDM4NCAzLjYwOTQ3IDEyLjk2OTggMy42NzkwMUMxMi44NjcgMy43ODMxNiAxMi43Njk4IDMuOTgyNzMgMTIuNjkyMSA0LjMwMjY5QzEyLjYxNjYgNC42MTM0NSAxMi41NzUyIDQuOTY1MTcgMTIuNTMzIDUuMzI1MDFMMTIuNTI5OCA1LjM1Mjg1QzEyLjQ5MjQgNS42NzI0MiAxMi40NTA1IDYuMDMwMTYgMTIuMzY2NSA2LjMwMDk4QzEyLjMzODMgNi40MDY5OSAxMi4yODE5IDYuNTA0MDcgMTIuMTk3OSA2LjU3NTM5QzEyLjEzODIgNi42MjYxIDEyLjAxMDQgNi43MDgxOCAxMS44MzA5IDYuNjkzMTJDMTEuNTQyNCA2LjY2ODkxIDExLjM3MTIgNi40MjE0MyAxMS4zNjUgNi4xNDc4M0MxMS4zNTYgNS43NTQ1NCAxMS4zODgzIDUuMzU4NjQgMTEuNDA3NCA0Ljk2NjA4QzExLjQ0MjggNC4yMzY0NiAxMS40NzcgMy41MzM3IDExLjQyNDUgMi44MzQyTDExLjQyNDIgMi44MjkzNEMxMS4zOTE2IDIuMzI5OTcgMTEuMDQ5MyAyLjAwMjI4IDEwLjcwMDcgMS45MjI4QzEwLjUzMDUgMS44ODQwMSAxMC4zNjkgMS45MDYwMSAxMC4yMzQ3IDEuOTgzNUMxMC4xMDMgMi4wNTk0NiA5Ljk1NTM1IDIuMjEzMTggOS44NTc0IDIuNTEzOTRMOS44NTYzMSAyLjUxNzI2QzkuODE1MjUgMi42NDA0IDkuNzcyOTggMi44Nzc1MyA5LjczNjA2IDMuMjEyNEM5LjcwMDQ0IDMuNTM1NDIgOS42NzMzNyAzLjkxMjc5IDkuNjUxNTYgNC4yOTQxOEM5LjYzMjkgNC42MjAzMyA5LjYxNzg1IDQuOTU4NCA5LjYwNDM0IDUuMjYxOTRDOS41ODcyOCA1LjY0NTI5IDkuNTcyNjcgNS45NzM1NyA5LjU1NjMzIDYuMTUzMkM5LjU0OTgzIDYuMjI0NTkgOS41MjkzOSA2LjI5NDkzIDkuNDk1MDEgNi4zNTc4NUM5LjQ3MzU2IDYuMzk3MTEgOS4zNjExNSA2LjYwOTQ3IDkuMDcxMDYgNi42MTg0M0M4Ljc3OTE3IDYuNjI3NDQgOC42Mzk3NSA2LjQwMDU3IDguNjE2OTggNi4zNTkxOUM4LjU1NjM0IDYuMjQ4OTkgOC41NTA2NiA2LjExODA3IDguNTQ3NTQgNS45OTI4M0M4LjU0NDc0IDUuODgwNjQgOC41NDI5NCA1LjcxNzk4IDguNTQxNzQgNS41NDc2N0M4LjUzOTM1IDUuMjA1ODIgOC41MzkzNSA0LjgxOTE5IDguNTM5MzUgNC43MDk1MkM4LjUzOTM1IDMuNjY1NyA4LjUzODM4IDIuNjUzNzIgOC40NDcxNCAxLjY0MzcyQzguMzkxODMgMS4yNDEyNyA4LjA2Mjc4IDEuMDA0NTUgNy42NDM2IDEuMDAwMDVDNy4yMjM5OSAwLjk5NTU1MiA2Ljg3OTE4IDEuMjI3MDQgNi44MTEzIDEuNjQ3MDZaTTkuNDEyMTkgMS4zNjE3QzkuMjE0NjkgMC40NDg0ODQgOC4zOTkxMyAwLjAwODEwMzI0IDcuNjU0MzMgMC4wMDAxMTE1NEM2Ljg2NDUyIC0wLjAwODM2MzA4IDUuOTg3NjEgMC40NjU4ODEgNS44MjM2NSAxLjQ5MDM3TDUuODIzMTggMS40OTMzNEM1Ljc4MjM5IDEuNzU4NCA1Ljc1MjI5IDIuMDE0ODEgNS43MzA5IDIuMjY2NTJDNS4zOTQyMyAxLjY3MzY0IDQuOTI2MjIgMS4xNDg5NCA0LjI2NTUgMC45MTY4NTlDMy41ODY2MSAwLjY3OTMxMiAyLjk0OTIgMC44ODcwODcgMi41MzU4MiAxLjMxOTUyQzIuMTM0MTUgMS43Mzk3MSAxLjk0NDM4IDIuMzY3NDIgMi4wOTAzMSAyLjk4NzQ2TDIuMDkyNjkgMi45OTcxM0MyLjI2NDc4IDMuNjY4MDggMi41MjM5NiA0LjMwMzE2IDIuNzc2MTMgNC45MDQ2NUMyLjc5ODE0IDQuOTU3MTcgMi44MjAxIDUuMDA5NDEgMi44NDE5NCA1LjA2MTM5QzMuMDIxMzkgNS40ODg0MiAzLjE5Mzc4IDUuODk4NjYgMy4zMzg3MSA2LjMxMjU2QzIuOTY0MDQgNS45ODE0MiAyLjUxOTI1IDUuNzA3OTYgMS45MDI3NiA1LjY0ODRDMS40ODg2NSA1LjYwNjYzIDEuMTAzOTEgNS42NzUzNiAwLjc3NzgwNSA1Ljg4NDQ0QzAuNDU0MjM5IDYuMDkxOSAwLjI0MDY3MSA2LjQwNDA1IDAuMTA0MTg3IDYuNzU0MDZMMC4xMDA4NjggNi43NjI4MUMtMC4xMDE4NCA3LjMxMjg2IDAuMDY2MzMxMiA3Ljk3MTU3IDAuMzA0ODk1IDguNDI4OTdDMC41NzM3MDQgOC45NjQ3NCAwLjk5NjEwNCA5LjQ3OTA0IDEuNDQzNzIgOS45NjgxM0MxLjY3MDQ2IDEwLjIxNTkgMS45MTEzNiAxMC40NjUyIDIuMTUwMzMgMTAuNzEyNEwyLjE1NjgyIDEwLjcxOTFDMi4zOTUyNCAxMC45NjU4IDIuNjMyMTcgMTEuMjEwOSAyLjg2MTM0IDExLjQ1OTlDMy44MDkzNyAxMi40OSA0LjUwMDAyIDEzLjQ2MzIgNC41MDAwMiAxNC41QzQuNTAwMDIgMTQuNzc2MSA0LjcyMzg4IDE1IDUuMDAwMDIgMTVIMTJDMTIuMjc2MiAxNSAxMi41IDE0Ljc3NjEgMTIuNSAxNC41QzEyLjUgMTIuODIxMiAxMi44MDIxIDExLjY0NjIgMTMuMjI3NCAxMC40NzYyQzEzLjM2NTMgMTAuMDk2OCAxMy41MjE2IDkuNzA1NzkgMTMuNjg2OCA5LjI5MjQ3QzE0LjAyMzggOC40NDkyMiAxNC4zOTggNy41MTI5OCAxNC43Mjk1IDYuMzkxNzVDMTUuMDk1NiA1LjE1MzI0IDE1LjA1NTkgNC4yNTkwNCAxNC43NzM1IDMuNjMwMTdDMTQuNDg3IDIuOTkyMDggMTMuOTc5OCAyLjY5NTMgMTMuNTc2MyAyLjYxNTJDMTMuMTI3NiAyLjUyNjE0IDEyLjczNjcgMi42MDQ3NSAxMi40MjY4IDIuODMwODFDMTIuNDI1MyAyLjgwNzczIDEyLjQyMzYgMi43ODQ2OCAxMi40MjE5IDIuNzYxNjdDMTIuMzU4NyAxLjgxMDUgMTEuNjkwNyAxLjEyMjg1IDEwLjkyMyAwLjk0NzgyMUMxMC41MzQ2IDAuODU5Mjg3IDEwLjExMTEgMC45MDAzOTMgOS43MzUwOSAxLjExNzI0QzkuNjE4NTIgMS4xODQ0NiA5LjUxMDU1IDEuMjY2MjMgOS40MTIxOSAxLjM2MTdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxLdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC43NTQzMiAyLjA1MDJDOC41MDU3OSAyLjA1MDIgOC4zMDQzMiAyLjI1MTY3IDguMzA0MzIgMi41MDAyQzguMzA0MzIgMi43NDg3MyA4LjUwNTc5IDIuOTUwMiA4Ljc1NDMyIDIuOTUwMkg5Ljk0OTk3VjcuMDUwMDRINS4wNDk5N1YyLjk1MDJINi4yNTQzMkM2LjUwMjg1IDIuOTUwMiA2LjcwNDMyIDIuNzQ4NzMgNi43MDQzMiAyLjUwMDJDNi43MDQzMiAyLjI1MTY3IDYuNTAyODUgMi4wNTAyIDYuMjU0MzIgMi4wNTAySDIuNzU0MzJDMi41MDU3OSAyLjA1MDIgMi4zMDQzMiAyLjI1MTY3IDIuMzA0MzIgMi41MDAyQzIuMzA0MzIgMi43NDg3MyAyLjUwNTc5IDIuOTUwMiAyLjc1NDMyIDIuOTUwMkgzLjk0OTk3VjEyLjA1MDJIMi43NTQzMkMyLjUwNTc5IDEyLjA1MDIgMi4zMDQzMiAxMi4yNTE3IDIuMzA0MzIgMTIuNTAwMkMyLjMwNDMyIDEyLjc0ODcgMi41MDU3OSAxMi45NTAyIDIuNzU0MzIgMTIuOTUwMkg2LjI1NDMyQzYuNTAyODUgMTIuOTUwMiA2LjcwNDMyIDEyLjc0ODcgNi43MDQzMiAxMi41MDAyQzYuNzA0MzIgMTIuMjUxNyA2LjUwMjg1IDEyLjA1MDIgNi4yNTQzMiAxMi4wNTAySDUuMDQ5OTdWNy45NTAwNEg5Ljk0OTk3VjEyLjA1MDJIOC43NTQzMkM4LjUwNTc5IDEyLjA1MDIgOC4zMDQzMiAxMi4yNTE3IDguMzA0MzIgMTIuNTAwMkM4LjMwNDMyIDEyLjc0ODcgOC41MDU3OSAxMi45NTAyIDguNzU0MzIgMTIuOTUwMkgxMi4yNTQzQzEyLjUwMjggMTIuOTUwMiAxMi43MDQzIDEyLjc0ODcgMTIuNzA0MyAxMi41MDAyQzEyLjcwNDMgMTIuMjUxNyAxMi41MDI4IDEyLjA1MDIgMTIuMjU0MyAxMi4wNTAySDExLjA1VjIuOTUwMkgxMi4yNTQzQzEyLjUwMjggMi45NTAyIDEyLjcwNDMgMi43NDg3MyAxMi43MDQzIDIuNTAwMkMxMi43MDQzIDIuMjUxNjcgMTIuNTAyOCAyLjA1MDIgMTIuMjU0MyAyLjA1MDJIOC43NTQzMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHF0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjE4MTMgMS42ODE3OUM3LjM1NzA0IDEuNTA2MDUgNy42NDE5NiAxLjUwNjA1IDcuODE3NyAxLjY4MTc5TDEwLjMxNzcgNC4xODE3OUMxMC40OTM0IDQuMzU3NTMgMTAuNDkzNCA0LjY0MjQ1IDEwLjMxNzcgNC44MTgxOUMxMC4xNDIgNC45OTM5MiA5Ljg1NzA0IDQuOTkzOTIgOS42ODEzIDQuODE4MTlMNy45NDk1IDMuMDg2MzhMNy45NDk1IDExLjkxMzZMOS42ODEzIDEwLjE4MThDOS44NTcwNCAxMC4wMDYxIDEwLjE0MiAxMC4wMDYxIDEwLjMxNzcgMTAuMTgxOEMxMC40OTM0IDEwLjM1NzUgMTAuNDkzNCAxMC42NDI0IDEwLjMxNzcgMTAuODE4Mkw3LjgxNzcgMTMuMzE4MkM3LjczMzMxIDEzLjQwMjYgNy42MTg4NSAxMy40NSA3LjQ5OTUgMTMuNDVDNy4zODAxNSAxMy40NSA3LjI2NTY5IDEzLjQwMjYgNy4xODEzIDEzLjMxODJMNC42ODEzIDEwLjgxODJDNC41MDU1NyAxMC42NDI0IDQuNTA1NTcgMTAuMzU3NSA0LjY4MTMgMTAuMTgxOEM0Ljg1NzA0IDEwLjAwNjEgNS4xNDE5NiAxMC4wMDYxIDUuMzE3NyAxMC4xODE4TDcuMDQ5NSAxMS45MTM2TDcuMDQ5NSAzLjA4NjM4TDUuMzE3NyA0LjgxODE5QzUuMTQxOTYgNC45OTM5MiA0Ljg1NzA0IDQuOTkzOTIgNC42ODEzIDQuODE4MTlDNC41MDU1NyA0LjY0MjQ1IDQuNTA1NTcgNC4zNTc1MyA0LjY4MTMgNC4xODE3OUw3LjE4MTMgMS42ODE3OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFl0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjA3OTI2IDAuMjIyMjUzQzcuMzEyNzUgLTAuMDA3NDM0IDcuNjg3MyAtMC4wMDc0MzQgNy45MjA3OSAwLjIyMjI1M0wxNC42NzA4IDYuODYyMjdDMTQuOTA3IDcuMDk0NjUgMTQuOTEwMSA3LjQ3NDUzIDE0LjY3NzggNy43MTA3NkMxNC40NDU0IDcuOTQ3IDE0LjA2NTUgNy45NTAxMiAxMy44MjkzIDcuNzE3NzNMMTMgNi45MDIwMVYxMi41QzEzIDEyLjc3NjEgMTIuNzc2MiAxMyAxMi41IDEzSDIuNTAwMDJDMi4yMjM4OCAxMyAyLjAwMDAyIDEyLjc3NjEgMi4wMDAwMiAxMi41VjYuOTAyMDFMMS4xNzA3OSA3LjcxNzczQzAuOTM0NTU4IDcuOTUwMTIgMC41NTQ2NzIgNy45NDcgMC4zMjIyOSA3LjcxMDc2QzAuMDg5OTA3OSA3LjQ3NDUzIDAuMDkzMDI4MyA3LjA5NDY1IDAuMzI5MjYgNi44NjIyN0w3LjA3OTI2IDAuMjIyMjUzWk03LjUwMDAyIDEuNDkxNjNMMTIgNS45MTgzMVYxMkgxMFY4LjQ5OTk5QzEwIDguMjIzODUgOS43NzYxNyA3Ljk5OTk5IDkuNTAwMDIgNy45OTk5OUg2LjUwMDAyQzYuMjIzODggNy45OTk5OSA2LjAwMDAyIDguMjIzODUgNi4wMDAwMiA4LjQ5OTk5VjEySDMuMDAwMDJWNS45MTgzMUw3LjUwMDAyIDEuNDkxNjNaTTcuMDAwMDIgMTJIOS4wMDAwMlY4Ljk5OTk5SDcuMDAwMDJWMTJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxKdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41IDAuMDAzMjk1OUM2LjgwNDczIDAuMDAzMjk1OSA2LjI0OTUzIDAuMjgxMTA2IDYuMjUgMC43NDk5OTVDNi4yNSAwLjk5NzI1OCA2LjQyNDQ2IDEuMTIwMTQgNi41NzY4NyAxLjIyNzQ5QzYuNjk1MDcgMS4zMTA3NCA2LjggMS4zODQ2NSA2LjggMS41QzYuOCAxLjcwNzEgNi4wNjIyNCAxLjc0MjY0IDUuMTk3ODkgMS43ODQyN0MzLjk3NTUzIDEuODQzMTQgMi41IDEuOTE0MjEgMi41IDIuNUMyLjUgMi43NzYxNCAyLjcyMzg2IDMgMyAzSDEyQzEyLjI3NjEgMyAxMi41IDIuNzc2MTQgMTIuNSAyLjVDMTIuNSAxLjkxNDIxIDExLjAyNDUgMS44NDMxNCA5LjgwMjExIDEuNzg0MjdDOC45Mzc3NiAxLjc0MjY0IDguMiAxLjcwNzEgOC4yIDEuNUM4LjIgMS4zODQ2NSA4LjMwNDkzIDEuMzEwNzQgOC40MjMxMyAxLjIyNzQ5QzguNTc1NTQgMS4xMjAxNCA4Ljc1IDAuOTk3MjU4IDguNzUgMC43NDk5OTVDOC43NTA0NyAwLjI4MTEwNiA4LjE5NTI3IDAuMDAzMjk1OSA3LjUgMC4wMDMyOTU5Wk0yLjg5NDUxIDYuMTIyNjZDMi4yNTgwNiA2LjUyNDcxIDEuOTA0MTcgNy4zMTExOCAyLjAyNDczIDguMDU1NkwyLjgzNTg4IDEyLjQ3NzJDMy4wMDk5MyAxMy4zNTYyIDMuNzYyOSAxNCA0LjY2MDYxIDE0SDEwLjMzNzNDMTEuMjM1NCAxNCAxMS45ODg0IDEzLjM1NjIgMTIuMTYyNSAxMi40NzcyTDEyLjk3MzYgOC4wNTYwN0MxMy4wODkgNy4zMjM1OCAxMi44Mjg0IDYuNTMyNzYgMTIuMTMzMSA2LjA5MzczQzExLjcyODMgNS44MzAxMyAxMS42NDEyIDUuMzMyMzEgMTIuMTMzMSA1LjEyNzk2QzEyLjgyODQgNC44NjQzNSAxMi42OTQ4IDQgMTIgNEgxMC4zMDAxSDYuODAwMDVIMi45OTk5NkMyLjMwNDY5IDQgMi4xOTg3OCA0Ljg5MzI4IDIuODk0NTEgNS4xNTY4OUMzLjM4NjQyIDUuMzMyMzEgMy4yOTkzOSA1LjgzMDEzIDIuODk0NTEgNi4xMjI2NlpNOC4yMDAwNiA2LjI1QzguMjAwMDYgNS44MTc2OSA4LjA4NTcyIDUuMzc2MTUgNy45MDYzNSA1TDQuMTEwOTMgNUM0LjIwNjI2IDUuMjEzMTIgNC4yNDE5IDUuNDM4ODkgNC4yMjkwNCA1LjY1NTIxQzQuMTk1MjIgNi4yMjQxMiAzLjg0NTg3IDYuNjY4OTkgMy40ODAxNiA2LjkzMzIyTDMuNDU0OTIgNi45NTE0NkwzLjQyODU4IDYuOTY4MUMzLjEzNDA3IDcuMTU0MTQgMi45NTgwMSA3LjUzOTg5IDMuMDEwNTggNy44ODc0OUwzLjgxNzk3IDEyLjI4ODZDMy45MDUxMyAxMi43MTU0IDQuMjYxNDggMTMgNC42NjA2MSAxM0gxMC4zMzczQzEwLjczNyAxMyAxMS4wOTMyIDEyLjcxNTMgMTEuMTgwNCAxMi4yODg2TDExLjk4NzQgNy44ODk4QzEyLjA0OCA3LjQ4MjQ3IDExLjg5NTQgNy4xMjYzMSAxMS41OTkyIDYuOTM5MjdMMTEuNTg3NSA2LjkzMTg0TDExLjU4NzUgNi45MzE3NkMxMS4xOTQ3IDYuNjc2MDIgMTAuODMzMSA2LjIyNzg1IDEwLjc5ODYgNS42NDc5OEMxMC43ODQ2IDUuNDEyIDEwLjgyNjQgNS4xOTM5NyAxMC45MTEyIDVIOS4wNTUxN0M5LjAxOTg3IDUuMTQ2MTEgOS4wMDAwNiA1LjMxMjAxIDkuMDAwMDYgNS41QzkuMDAwMDYgNS45NzQ1IDkuMjE2NzkgNi4zNzEyNyA5LjQ0MzY3IDYuNzg2NjJDOS42OTI4NCA3LjI0Mjc4IDkuOTU0MjUgNy43MjEzNiA5Ljk1NDI1IDguMzQ5OTNDOS45NTQyNSA5LjI2OTggOS40OTg2OCA5Ljg0MjA1IDguNjIxODkgOS44NDIwNUM4LjEzMjA2IDkuODQyMDUgNy41NzgxOCA5LjQ2MDk3IDcuNTc4MTggOC43NTc4MUM3LjU3ODE4IDguMzUyNzkgNy43MTU1OCA4LjAxNjQ2IDcuODYxMjEgNy42NTk5OEM4LjAyNTQgNy4yNTgwNiA4LjIwMDA2IDYuODMwNTEgOC4yMDAwNiA2LjI1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sWHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTE0IDExLjAwMDFWNC4wMDAwNkwxIDQuMDAwMDZMMSAxMS4wMDAxSDE0Wk0xNSA0LjAwMDA2VjExLjAwMDFDMTUgMTEuNTUyMyAxNC41NTIzIDEyLjAwMDEgMTQgMTIuMDAwMUgxQzAuNDQ3NzE1IDEyLjAwMDEgMCAxMS41NTIzIDAgMTEuMDAwMVY0LjAwMDA2QzAgMy40NDc3OCAwLjQ0NzcxNSAzLjAwMDA2IDEgMy4wMDAwNkgxNEMxNC41NTIzIDMuMDAwMDYgMTUgMy40NDc3OCAxNSA0LjAwMDA2Wk0yIDUuMjVDMiA1LjExMTkzIDIuMTExOTMgNSAyLjI1IDVINS43NUM1Ljg4ODA3IDUgNiA1LjExMTkzIDYgNS4yNVY5Ljc1QzYgOS44ODgwNyA1Ljg4ODA3IDEwIDUuNzUgMTBIMi4yNUMyLjExMTkzIDEwIDIgOS44ODgwNyAyIDkuNzVWNS4yNVpNNy41IDdDNy4yMjM4NiA3IDcgNy4yMjM4NiA3IDcuNUM3IDcuNzc2MTQgNy4yMjM4NiA4IDcuNSA4SDEwLjVDMTAuNzc2MSA4IDExIDcuNzc2MTQgMTEgNy41QzExIDcuMjIzODYgMTAuNzc2MSA3IDEwLjUgN0g3LjVaTTcgOS41QzcgOS4yMjM4NiA3LjIyMzg2IDkgNy41IDlIMTIuNUMxMi43NzYxIDkgMTMgOS4yMjM4NiAxMyA5LjVDMTMgOS43NzYxNCAxMi43NzYxIDEwIDEyLjUgMTBINy41QzcuMjIzODYgMTAgNyA5Ljc3NjE0IDcgOS41Wk03LjUgNUM3LjIyMzg2IDUgNyA1LjIyMzg2IDcgNS41QzcgNS43NzYxNCA3LjIyMzg2IDYgNy41IDZIMTEuNUMxMS43NzYxIDYgMTIgNS43NzYxNCAxMiA1LjVDMTIgNS4yMjM4NiAxMS43NzYxIDUgMTEuNSA1SDcuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFF0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjUgMUgxMi41QzEzLjMyODQgMSAxNCAxLjY3MTU3IDE0IDIuNVYxMi41QzE0IDEzLjMyODQgMTMuMzI4NCAxNCAxMi41IDE0SDIuNUMxLjY3MTU3IDE0IDEgMTMuMzI4NCAxIDEyLjVWMi41QzEgMS42NzE1NyAxLjY3MTU3IDEgMi41IDFaTTIuNSAyQzIuMjIzODYgMiAyIDIuMjIzODYgMiAyLjVWOC4zNjM2TDMuNjgxOCA2LjY4MThDMy43NjgwOSA2LjU5NTUxIDMuODg1NzIgNi41NDc5NyA0LjAwNzc0IDYuNTUwMDdDNC4xMjk3NSA2LjU1MjE2IDQuMjQ1NjggNi42MDM3MiA0LjMyODk1IDYuNjkyOTNMNy44NzM1NSAxMC40OTAxTDEwLjY4MTggNy42ODE4QzEwLjg1NzUgNy41MDYwNyAxMS4xNDI1IDcuNTA2MDcgMTEuMzE4MiA3LjY4MThMMTMgOS4zNjM2VjIuNUMxMyAyLjIyMzg2IDEyLjc3NjEgMiAxMi41IDJIMi41Wk0yIDEyLjVWOS42MzY0TDMuOTg4ODcgNy42NDc1M0w3LjUzMTEgMTEuNDQyMUw4Ljk0MTEzIDEzSDIuNUMyLjIyMzg2IDEzIDIgMTIuNzc2MSAyIDEyLjVaTTEyLjUgMTNIMTAuMTU1TDguNDgzMzYgMTEuMTUzTDExIDguNjM2NEwxMyAxMC42MzY0VjEyLjVDMTMgMTIuNzc2MSAxMi43NzYxIDEzIDEyLjUgMTNaTTYuNjQ5MjIgNS41QzYuNjQ5MjIgNS4wMzAxMyA3LjAzMDEzIDQuNjQ5MjIgNy41IDQuNjQ5MjJDNy45Njk4NyA0LjY0OTIyIDguMzUwNzggNS4wMzAxMyA4LjM1MDc4IDUuNUM4LjM1MDc4IDUuOTY5ODcgNy45Njk4NyA2LjM1MDc4IDcuNSA2LjM1MDc4QzcuMDMwMTMgNi4zNTA3OCA2LjY0OTIyIDUuOTY5ODcgNi42NDkyMiA1LjVaTTcuNSAzLjc0OTIyQzYuNTMzMDcgMy43NDkyMiA1Ljc0OTIyIDQuNTMzMDcgNS43NDkyMiA1LjVDNS43NDkyMiA2LjQ2NjkzIDYuNTMzMDcgNy4yNTA3OCA3LjUgNy4yNTA3OEM4LjQ2NjkzIDcuMjUwNzggOS4yNTA3OCA2LjQ2NjkzIDkuMjUwNzggNS41QzkuMjUwNzggNC41MzMwNyA4LjQ2NjkzIDMuNzQ5MjIgNy41IDMuNzQ5MjJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxlbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTk5MSAwLjg3Njg5MkMzLjg0MjIyIDAuODc2ODkyIDAuODc3MDc1IDMuODQyMDQgMC44NzcwNzUgNy40OTk3MkMwLjg3NzA3NSAxMS4xNTc0IDMuODQyMjIgMTQuMTIyNiA3LjQ5OTkxIDE0LjEyMjZDMTEuMTU3NiAxNC4xMjI2IDE0LjEyMjcgMTEuMTU3NCAxNC4xMjI3IDcuNDk5NzJDMTQuMTIyNyAzLjg0MjA0IDExLjE1NzYgMC44NzY4OTIgNy40OTk5MSAwLjg3Njg5MlpNMS44MjcwNyA3LjQ5OTcyQzEuODI3MDcgNC4zNjY3MSA0LjM2Njg5IDEuODI2ODkgNy40OTk5MSAxLjgyNjg5QzEwLjYzMjkgMS44MjY4OSAxMy4xNzI3IDQuMzY2NzEgMTMuMTcyNyA3LjQ5OTcyQzEzLjE3MjcgMTAuNjMyNyAxMC42MzI5IDEzLjE3MjYgNy40OTk5MSAxMy4xNzI2QzQuMzY2ODkgMTMuMTcyNiAxLjgyNzA3IDEwLjYzMjcgMS44MjcwNyA3LjQ5OTcyWk04LjI0OTkyIDQuNDk5OTlDOC4yNDk5MiA0LjkxNDIgNy45MTQxMyA1LjI0OTk5IDcuNDk5OTIgNS4yNDk5OUM3LjA4NTcxIDUuMjQ5OTkgNi43NDk5MiA0LjkxNDIgNi43NDk5MiA0LjQ5OTk5QzYuNzQ5OTIgNC4wODU3NyA3LjA4NTcxIDMuNzQ5OTkgNy40OTk5MiAzLjc0OTk5QzcuOTE0MTMgMy43NDk5OSA4LjI0OTkyIDQuMDg1NzcgOC4yNDk5MiA0LjQ5OTk5Wk02LjAwMDAzIDUuOTk5OTlINi41MDAwM0g3LjUwMDAzQzcuNzc2MTggNS45OTk5OSA4LjAwMDAzIDYuMjIzODQgOC4wMDAwMyA2LjQ5OTk5VjkuOTk5OTlIOC41MDAwM0g5LjAwMDAzVjExSDguNTAwMDNINy41MDAwM0g2LjUwMDAzSDYuMDAwMDNWOS45OTk5OUg2LjUwMDAzSDcuMDAwMDNWNi45OTk5OUg2LjUwMDAzSDYuMDAwMDNWNS45OTk5OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHRuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02LjUgMUM2LjIyMzg2IDEgNiAxLjIyMzg2IDYgMS41QzYgMS43NzYxNCA2LjIyMzg2IDIgNi41IDJDNy4xMjY3MSAyIDcuNDU3MTggMi4yMDAyOCA3LjY1NTYzIDIuNDc4MTJDNy44NzgxIDIuNzg5NTcgOCAzLjI4ODM3IDggNFYxMUM4IDExLjcxMTYgNy44NzgxIDEyLjIxMDQgNy42NTU2MyAxMi41MjE5QzcuNDU3MTggMTIuNzk5NyA3LjEyNjcxIDEzIDYuNSAxM0M2LjIyMzg2IDEzIDYgMTMuMjIzOSA2IDEzLjVDNiAxMy43NzYxIDYuMjIzODYgMTQgNi41IDE0QzcuMzczMjkgMTQgOC4wNDI4MiAxMy43MDAzIDguNDY5MzcgMTMuMTAzMUM4LjQ3OTc2IDEzLjA4ODYgOC40ODk5NyAxMy4wNzM5IDguNSAxMy4wNTkxQzguNTEwMDMgMTMuMDczOSA4LjUyMDI0IDEzLjA4ODYgOC41MzA2MyAxMy4xMDMxQzguOTU3MTggMTMuNzAwMyA5LjYyNjcxIDE0IDEwLjUgMTRDMTAuNzc2MSAxNCAxMSAxMy43NzYxIDExIDEzLjVDMTEgMTMuMjIzOSAxMC43NzYxIDEzIDEwLjUgMTNDOS44NzMyOSAxMyA5LjU0MjgyIDEyLjc5OTcgOS4zNDQzNyAxMi41MjE5QzkuMTIxOSAxMi4yMTA0IDkgMTEuNzExNiA5IDExVjRDOSAzLjI4ODM3IDkuMTIxOSAyLjc4OTU3IDkuMzQ0MzcgMi40NzgxMkM5LjU0MjgyIDIuMjAwMjggOS44NzMyOSAyIDEwLjUgMkMxMC43NzYxIDIgMTEgMS43NzYxNCAxMSAxLjVDMTEgMS4yMjM4NiAxMC43NzYxIDEgMTAuNSAxQzkuNjI2NzEgMSA4Ljk1NzE4IDEuMjk5NzIgOC41MzA2MyAxLjg5Njg4QzguNTIwMjQgMS45MTE0MyA4LjUxMDAzIDEuOTI2MTEgOC41IDEuOTQwOUM4LjQ4OTk3IDEuOTI2MTEgOC40Nzk3NiAxLjkxMTQzIDguNDY5MzcgMS44OTY4OEM4LjA0MjgyIDEuMjk5NzIgNy4zNzMyOSAxIDYuNSAxWk0xNCA1SDExVjRIMTRDMTQuNTUyMyA0IDE1IDQuNDQ3NzIgMTUgNVYxMEMxNSAxMC41NTIzIDE0LjU1MjMgMTEgMTQgMTFIMTFWMTBIMTRWNVpNNiA0VjVIMUwxIDEwSDZWMTFIMUMwLjQ0NzcxNSAxMSAwIDEwLjU1MjMgMCAxMFY1QzAgNC40NDc3MiAwLjQ0NzcxNSA0IDEgNEg2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUuNDk5OTggMC41QzUuNDk5OTggMC4yMjM4NTggNS43MjM4MyAwIDUuOTk5OTggMEg3LjQ5OTk4SDguOTk5OThDOS4yNzYxMiAwIDkuNDk5OTggMC4yMjM4NTggOS40OTk5OCAwLjVDOS40OTk5OCAwLjc3NjE0MiA5LjI3NjEyIDEgOC45OTk5OCAxSDcuOTk5OThWMi4xMTkyMkM5LjA5ODMyIDIuMjA0MDkgMTAuMTE5IDIuNTY2MjIgMTAuOTkyIDMuMTM1NzJDMTEuMDExNiAzLjEwODUxIDExLjAzMzYgMy4wODI1MiAxMS4wNTggMy4wNTgwNkwxMi4wNTggMi4wNTgwNkMxMi4zMDIxIDEuODEzOTggMTIuNjk3OCAxLjgxMzk4IDEyLjk0MTkgMi4wNTgwNkMxMy4xODYgMi4zMDIxNCAxMy4xODYgMi42OTc4NiAxMi45NDE5IDIuOTQxOTRMMTEuOTY3IDMuOTE2ODJDMTMuMTU5NSA1LjA3OTI1IDEzLjkgNi43MDMxNCAxMy45IDguNDk5OThDMTMuOSAxMi4wMzQ2IDExLjAzNDYgMTQuOSA3LjQ5OTk4IDE0LjlDMy45NjUzNSAxNC45IDEuMDk5OTggMTIuMDM0NiAxLjA5OTk4IDguNDk5OThDMS4wOTk5OCA1LjEzMzYxIDMuNjk5MDQgMi4zNzQzIDYuOTk5OTggMi4xMTkyMlYxSDUuOTk5OThDNS43MjM4MyAxIDUuNDk5OTggMC43NzYxNDIgNS40OTk5OCAwLjVaTTIuMDk5OTggOC40OTk5OEMyLjA5OTk4IDUuNTE3NjQgNC41MTc2NCAzLjA5OTk4IDcuNDk5OTggMy4wOTk5OEMxMC40ODIzIDMuMDk5OTggMTIuOSA1LjUxNzY0IDEyLjkgOC40OTk5OEMxMi45IDExLjQ4MjMgMTAuNDgyMyAxMy45IDcuNDk5OTggMTMuOUM0LjUxNzY0IDEzLjkgMi4wOTk5OCAxMS40ODIzIDIuMDk5OTggOC40OTk5OFpNNy40OTk5OCA4LjQ5OTk4VjQuMDk5OThDNS4wNjk5MiA0LjA5OTk4IDMuMDk5OTggNi4wNjk5MiAzLjA5OTk4IDguNDk5OThDMy4wOTk5OCAxMC45MyA1LjA2OTkyIDEyLjkgNy40OTk5OCAxMi45QzguNzE1IDEyLjkgOS44MTUgMTIuNDA3NSAxMC42MTEyIDExLjYxMTJMNy40OTk5OCA4LjQ5OTk4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNzU0MzIgMC44MTk1MzdDNy41OTc0MiAwLjcyNjgyMSA3LjQwMjUgMC43MjY4MjEgNy4yNDU1OSAwLjgxOTUzN0wxLjc0NTU5IDQuMDY5NTRDMS41OTMzNiA0LjE1OTQ5IDEuNDk5OTYgNC4zMjMxNyAxLjQ5OTk2IDQuNUMxLjQ5OTk2IDQuNjc2ODMgMS41OTMzNiA0Ljg0MDUxIDEuNzQ1NTkgNC45MzA0Nkw3LjI0NTU5IDguMTgwNDZDNy40MDI1IDguMjczMTggNy41OTc0MiA4LjI3MzE4IDcuNzU0MzIgOC4xODA0NkwxMy4yNTQzIDQuOTMwNDZDMTMuNDA2NiA0Ljg0MDUxIDEzLjUgNC42NzY4MyAxMy41IDQuNUMxMy41IDQuMzIzMTcgMTMuNDA2NiA0LjE1OTQ5IDEzLjI1NDMgNC4wNjk1NEw3Ljc1NDMyIDAuODE5NTM3Wk03LjQ5OTk2IDcuMTY5MjNMMi45ODI4IDQuNUw3LjQ5OTk2IDEuODMwNzdMMTIuMDE3MSA0LjVMNy40OTk5NiA3LjE2OTIzWk0xLjU2OTUgNy40OTU2NEMxLjcwOTk4IDcuMjU3OSAyLjAxNjU5IDcuMTc5MDYgMi4yNTQzMiA3LjMxOTU0TDcuNDk5OTYgMTAuNDE5MkwxMi43NDU2IDcuMzE5NTRDMTIuOTgzMyA3LjE3OTA2IDEzLjI4OTkgNy4yNTc5IDEzLjQzMDQgNy40OTU2NEMxMy41NzA5IDcuNzMzMzcgMTMuNDkyMSA4LjAzOTk4IDEzLjI1NDMgOC4xODA0Nkw3Ljc1NDMyIDExLjQzMDVDNy41OTc0MiAxMS41MjMyIDcuNDAyNSAxMS41MjMyIDcuMjQ1NTkgMTEuNDMwNUwxLjc0NTU5IDguMTgwNDZDMS41MDc4NiA4LjAzOTk4IDEuNDI5MDEgNy43MzMzNyAxLjU2OTUgNy40OTU2NFpNMS41Njk0OSAxMC40OTU2QzEuNzA5OTggMTAuMjU3OSAyLjAxNjU4IDEwLjE3OTEgMi4yNTQzMiAxMC4zMTk1TDcuNDk5OTYgMTMuNDE5MkwxMi43NDU2IDEwLjMxOTVDMTIuOTgzMyAxMC4xNzkxIDEzLjI4OTkgMTAuMjU3OSAxMy40MzA0IDEwLjQ5NTZDMTMuNTcwOSAxMC43MzM0IDEzLjQ5MjEgMTEuMDQgMTMuMjU0MyAxMS4xODA1TDcuNzU0MzIgMTQuNDMwNUM3LjU5NzQyIDE0LjUyMzIgNy40MDI1IDE0LjUyMzIgNy4yNDU1OSAxNC40MzA1TDEuNzQ1NTkgMTEuMTgwNUMxLjUwNzg1IDExLjA0IDEuNDI5MDEgMTAuNzMzNCAxLjU2OTQ5IDEwLjQ5NTZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxvbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOSAySDZWMTNIOVYyWk0xMCAyVjEzSDEyLjVDMTIuNzc2MSAxMyAxMyAxMi43NzYxIDEzIDEyLjVWMi41QzEzIDIuMjIzODYgMTIuNzc2MSAyIDEyLjUgMkgxMFpNMi41IDJINVYxM0gyLjVDMi4yMjM4NiAxMyAyIDEyLjc3NjEgMiAxMi41VjIuNUMyIDIuMjIzODYgMi4yMjM4NiAyIDIuNSAyWk0yLjUgMUMxLjY3MTU3IDEgMSAxLjY3MTU3IDEgMi41VjEyLjVDMSAxMy4zMjg0IDEuNjcxNTcgMTQgMi41IDE0SDEyLjVDMTMuMzI4NCAxNCAxNCAxMy4zMjg0IDE0IDEyLjVWMi41QzE0IDEuNjcxNTcgMTMuMzI4NCAxIDEyLjUgMUgyLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxhbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy42ODk3OSAyLjc1QzMuODk2NjcgMi43NDk3OSA0LjA4MjMyIDIuODc3MDEgNC4xNTY3OSAzLjA3MDAzTDcuMzY2NjIgMTEuMzlDNy40NjYwMiAxMS42NDc3IDcuMzM3NzQgMTEuOTM3MSA3LjA4MDEgMTIuMDM2NUM2LjgyMjQ3IDEyLjEzNTkgNi41MzMwNCAxMi4wMDc2IDYuNDMzNjUgMTEuNzVMNS4zODI1IDkuMDI1MzdIMi4wMTEzM0wwLjk2Njk5MiAxMS43NDlDMC44NjgxMjggMTIuMDA2OCAwLjU3ODk2NCAxMi4xMzU3IDAuMzIxMTI2IDEyLjAzNjlDMC4wNjMyODc4IDExLjkzOCAtMC4wNjU1ODY0IDExLjY0ODggMC4wMzMyNzc0IDExLjM5MUwzLjIyMzQ0IDMuMDcwOTlDMy4yOTc1MSAyLjg3NzgyIDMuNDgyOSAyLjc1MDIxIDMuNjg5NzkgMi43NVpNMy42OTE3NCA0LjY0Mjg0TDUuMDU0NTggOC4xNzUzN0gyLjMzNzI0TDMuNjkxNzQgNC42NDI4NFpNMTAuODk4OSA1LjIwNzAzQzkuMjU4MTggNS4yMDcwMyA4LjAwOTE1IDYuNjg1NjkgOC4wMDkxNSA4LjYwOTcyQzguMDA5MTUgMTAuNjMzNyA5LjM1ODE4IDEyLjAxMjQgMTAuODk4OSAxMi4wMTI0QzExLjcyMTQgMTIuMDEyNCAxMi41NzQ0IDExLjY2OTIgMTMuMTU0MyAxMS4wMjE5VjExLjUzQzEzLjE1NDMgMTEuNzc4NSAxMy4zNTU3IDExLjk4IDEzLjYwNDMgMTEuOThDMTMuODUyOCAxMS45OCAxNC4wNTQzIDExLjc3ODUgMTQuMDU0MyAxMS41M1Y1LjcyQzE0LjA1NDMgNS40NzE0NyAxMy44NTI4IDUuMjcgMTMuNjA0MyA1LjI3QzEzLjM1NTcgNS4yNyAxMy4xNTQzIDUuNDcxNDcgMTMuMTU0MyA1LjcyVjYuMjIzMTdDMTIuNjA1NCA1LjYwMDk1IDExLjc5MjQgNS4yMDcwMyAxMC44OTg5IDUuMjA3MDNaTTEzLjE1NDMgOS43OTgyM1Y3LjMwMTk1QzEyLjc2MzkgNi41ODEwMSAxMS45NDE0IDYuMDU3NTcgMTEuMDg2OCA2LjA1NzU3QzEwLjEwODggNi4wNTc1NyA5LjAzNTAzIDYuOTY1ODEgOS4wMzUwMyA4LjYwOTU1QzkuMDM1MDMgMTAuMTUzMyAxMC4wMDg4IDExLjE2MTUgMTEuMDg2OCAxMS4xNjE1QzExLjk3MDEgMTEuMTYxNSAxMi43NzE5IDEwLjQ5NTIgMTMuMTU0MyA5Ljc5ODIzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNjk4OTkgNS4yMDcwM0MyLjA1ODIzIDUuMjA3MDMgMC44MDkyMDQgNi42ODU2OSAwLjgwOTIwNCA4LjYwOTcyQzAuODA5MjA0IDEwLjYzMzcgMi4xNTgyMyAxMi4wMTI0IDMuNjk4OTkgMTIuMDEyNEM0LjUyMTI2IDEyLjAxMjQgNS4zNzQwMiAxMS42NjkzIDUuOTUzOSAxMS4wMjIzVjExLjUzQzUuOTUzOSAxMS43Nzg1IDYuMTU1MzcgMTEuOTggNi40MDM5IDExLjk4QzYuNjUyNDMgMTEuOTggNi44NTM5IDExLjc3ODUgNi44NTM5IDExLjUzVjUuNzIwMDFDNi44NTM5IDUuNDcxNDkgNi42NTI0MyA1LjI3MDAxIDYuNDAzOSA1LjI3MDAxQzYuMTU1MzcgNS4yNzAwMSA1Ljk1MzkgNS40NzE0OSA1Ljk1MzkgNS43MjAwMVY2LjIyMjY5QzUuNDA1MDYgNS42MDA3NSA0LjU5MjE4IDUuMjA3MDMgMy42OTg5OSA1LjIwNzAzWk01Ljk1MzkgOS43OTlWNy4zMDExN0M1LjU2MzM5IDYuNTgwNjQgNC43NDExOCA2LjA1NzU3IDMuODg2OCA2LjA1NzU3QzIuOTA4OSA2LjA1NzU3IDEuODM1MDggNi45NjU4MSAxLjgzNTA4IDguNjA5NTVDMS44MzUwOCAxMC4xNTMzIDIuODA4ODkgMTEuMTYxNSAzLjg4NjggMTEuMTYxNUM0Ljc2OTg0IDExLjE2MTUgNS41NzE0MSAxMC40OTU3IDUuOTUzOSA5Ljc5OVpNMTAuNzk5IDUuMjA3MDNDOS4xNTgyMyA1LjIwNzAzIDcuOTA5MiA2LjY4NTY5IDcuOTA5MiA4LjYwOTcyQzcuOTA5MiAxMC42MzM3IDkuMjU4MjMgMTIuMDEyNCAxMC43OTkgMTIuMDEyNEMxMS42MjE1IDEyLjAxMjQgMTIuNDc0NCAxMS42NjkyIDEzLjA1NDMgMTEuMDIxOFYxMS41M0MxMy4wNTQzIDExLjc3ODUgMTMuMjU1OCAxMS45OCAxMy41MDQzIDExLjk4QzEzLjc1MjkgMTEuOTggMTMuOTU0MyAxMS43Nzg1IDEzLjk1NDMgMTEuNTNWNS43MkMxMy45NTQzIDUuNDcxNDcgMTMuNzUyOSA1LjI3IDEzLjUwNDMgNS4yN0MxMy4yNTU4IDUuMjcgMTMuMDU0MyA1LjQ3MTQ3IDEzLjA1NDMgNS43MlY2LjIyMzE4QzEyLjUwNTUgNS42MDA5NSAxMS42OTI0IDUuMjA3MDMgMTAuNzk5IDUuMjA3MDNaTTEzLjA1NDMgOS43OTgyMlY3LjMwMTk2QzEyLjY2NCA2LjU4MTAyIDExLjg0MTUgNi4wNTc1NyAxMC45ODY4IDYuMDU3NTdDMTAuMDA4OSA2LjA1NzU3IDguOTM1MDggNi45NjU4MSA4LjkzNTA4IDguNjA5NTVDOC45MzUwOCAxMC4xNTMzIDkuOTA4ODkgMTEuMTYxNSAxMC45ODY4IDExLjE2MTVDMTEuODcwMiAxMS4xNjE1IDEyLjY3MiAxMC40OTUyIDEzLjA1NDMgOS43OTgyMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHNuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMS4yODk1IDIuNzVDMTEuNDk2NCAyLjc0OTc5IDExLjY4MjEgMi44NzcwMSAxMS43NTY1IDMuMDcwMDNMMTQuOTY2NCAxMS4zOUMxNS4wNjU3IDExLjY0NzcgMTQuOTM3NSAxMS45MzcxIDE0LjY3OTggMTIuMDM2NUMxNC40MjIyIDEyLjEzNTkgMTQuMTMyOCAxMi4wMDc2IDE0LjAzMzQgMTEuNzVMMTIuOTgyMiA5LjAyNTM3SDkuNjExMDZMOC41NjY3MiAxMS43NDlDOC40Njc4NiAxMi4wMDY4IDguMTc4NyAxMi4xMzU3IDcuOTIwODYgMTIuMDM2OUM3LjY2MzAyIDExLjkzOCA3LjUzNDE0IDExLjY0ODggNy42MzMwMSAxMS4zOTFMMTAuODIzMiAzLjA3MDk5QzEwLjg5NzIgMi44Nzc4MiAxMS4wODI2IDIuNzUwMjEgMTEuMjg5NSAyLjc1Wk0xMS4yOTE1IDQuNjQyODRMMTIuNjU0MyA4LjE3NTM3SDkuOTM2OThMMTEuMjkxNSA0LjY0Mjg0Wk0yLjg5ODk1IDUuMjA3MDNDMS4yNTgxOCA1LjIwNzAzIDAuMDA5MTU1MjcgNi42ODU2OSAwLjAwOTE1NTI3IDguNjA5NzJDMC4wMDkxNTUyNyAxMC42MzM3IDEuMzU4MTggMTIuMDEyNCAyLjg5ODk1IDEyLjAxMjRDMy43MjE0MSAxMi4wMTI0IDQuNTc0MzggMTEuNjY5MiA1LjE1NDI3IDExLjAyMTlWMTEuNTNDNS4xNTQyNyAxMS43Nzg1IDUuMzU1NzQgMTEuOTggNS42MDQyNyAxMS45OEM1Ljg1MjggMTEuOTggNi4wNTQyNyAxMS43Nzg1IDYuMDU0MjcgMTEuNTNWNS43MkM2LjA1NDI3IDUuNDcxNDcgNS44NTI4IDUuMjcgNS42MDQyNyA1LjI3QzUuMzU1NzQgNS4yNyA1LjE1NDI3IDUuNDcxNDcgNS4xNTQyNyA1LjcyVjYuMjIzMTdDNC42MDU0MyA1LjYwMDk1IDMuNzkyMzYgNS4yMDcwMyAyLjg5ODk1IDUuMjA3MDNaTTUuMTU0MjcgOS43OTgyM1Y3LjMwMTk1QzQuNzYzOTMgNi41ODEwMSAzLjk0MTQ0IDYuMDU3NTcgMy4wODY3NSA2LjA1NzU3QzIuMTA4ODUgNi4wNTc1NyAxLjAzNTAzIDYuOTY1ODEgMS4wMzUwMyA4LjYwOTU1QzEuMDM1MDMgMTAuMTUzMyAyLjAwODg1IDExLjE2MTUgMy4wODY3NSAxMS4xNjE1QzMuOTcwMTEgMTEuMTYxNSA0Ljc3MTk1IDEwLjQ5NTIgNS4xNTQyNyA5Ljc5ODIzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sY249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNjI1NSAyLjc1QzMuODM0NzggMi43NSA0LjAyMTkyIDIuODgwMzQgNC4wOTQ0OCAzLjA3NjY0TDcuMTY5ODUgMTEuMzk2MkM3LjI2NTYgMTEuNjU1MiA3LjEzMzI0IDExLjk0MjggNi44NzQyMyAxMi4wMzg2QzYuNjE1MjIgMTIuMTM0MyA2LjMyNzYzIDEyLjAwMiA2LjIzMTg4IDExLjc0MjlMNS4yMjM4NyA5LjAxNjAzSDIuMDI3MTJMMS4wMTkxMSAxMS43NDI5QzAuOTIzMzYyIDEyLjAwMiAwLjYzNTc3NCAxMi4xMzQzIDAuMzc2NzYyIDEyLjAzODZDMC4xMTc3NDkgMTEuOTQyOCAtMC4wMTQ2MDUyIDExLjY1NTIgMC4wODExNDAxIDExLjM5NjJMMy4xNTY1MSAzLjA3NjY0QzMuMjI5MDggMi44ODAzNCAzLjQxNjIxIDIuNzUgMy42MjU1IDIuNzVaTTMuNjI1NSA0LjY5MjA3TDQuOTA5NjYgOC4xNjYwM0gyLjM0MTMzTDMuNjI1NSA0LjY5MjA3Wk0xMS4zNzE5IDIuNzVDMTEuNTgxMSAyLjc1IDExLjc2ODMgMi44ODAzNCAxMS44NDA4IDMuMDc2NjRMMTQuOTE2MiAxMS4zOTYyQzE1LjAxMiAxMS42NTUyIDE0Ljg3OTYgMTEuOTQyOCAxNC42MjA2IDEyLjAzODZDMTQuMzYxNiAxMi4xMzQzIDE0LjA3NCAxMi4wMDIgMTMuOTc4MiAxMS43NDI5TDEyLjk3MDIgOS4wMTYwM0g5Ljc3MzQ4TDguNzY1NDcgMTEuNzQyOUM4LjY2OTcyIDEyLjAwMiA4LjM4MjEzIDEyLjEzNDMgOC4xMjMxMiAxMi4wMzg2QzcuODY0MTEgMTEuOTQyOCA3LjczMTc1IDExLjY1NTIgNy44Mjc1IDExLjM5NjJMMTAuOTAyOSAzLjA3NjY0QzEwLjk3NTQgMi44ODAzNCAxMS4xNjI2IDIuNzUgMTEuMzcxOSAyLjc1Wk0xMS4zNzE5IDQuNjkyMDdMMTIuNjU2IDguMTY2MDNIMTAuMDg3N0wxMS4zNzE5IDQuNjkyMDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx1bj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC41NTI5MyAwLjk5OTk2OUM0Ljc1Mjk1IDAuOTk5OTY5IDQuOTMzNzIgMS4xMTkxNyA1LjAxMjUgMS4zMDMwMUw4LjAxMTA2IDguMjk5ODJDOC4xMTk4NCA4LjU1MzYzIDguMDAyMjYgOC44NDc1NyA3Ljc0ODQ0IDguOTU2MzVDNy40OTQ2MyA5LjA2NTEyIDcuMjAwNjkgOC45NDc1NCA3LjA5MTkxIDguNjkzNzNMNi4xMTYxMyA2LjQxNjg1SDIuOTg5NzNMMi4wMTM5NSA4LjY5MzczQzEuOTA1MTcgOC45NDc1NCAxLjYxMTIzIDkuMDY1MTIgMS4zNTc0MiA4Ljk1NjM1QzEuMTAzNiA4Ljg0NzU3IDAuOTg2MDIzIDguNTUzNjMgMS4wOTQ4IDguMjk5ODJMNC4wOTMzNiAxLjMwMzAxQzQuMTcyMTQgMS4xMTkxNyA0LjM1MjkxIDAuOTk5OTY5IDQuNTUyOTMgMC45OTk5NjlaTTQuNTUyOTMgMi43NjkyOUw1Ljc1MTg2IDUuNTY2ODVIMy4zNTRMNC41NTI5MyAyLjc2OTI5Wk0xMS4wNTYyIDkuMDAyMTRDMTEuMjYxNyA5LjAwMjE0IDExLjQ0NjMgOC44NzYzMyAxMS41MjE1IDguNjg1MDJMMTQuMjczMyAxLjY4Mjk5QzE0LjM3NDMgMS40MjU5OCAxNC4yNDc4IDEuMTM1NzUgMTMuOTkwOCAxLjAzNDc1QzEzLjczMzggMC45MzM3NDcgMTMuNDQzNiAxLjA2MDIxIDEzLjM0MjYgMS4zMTcyMkwxMS4wNTYyIDcuMTM1MTRMOC43Njk3MyAxLjMxNzIyQzguNjY4NzMgMS4wNjAyMSA4LjM3ODUgMC45MzM3NDcgOC4xMjE1IDEuMDM0NzVDNy44NjQ0OSAxLjEzNTc1IDcuNzM4MDIgMS40MjU5OCA3LjgzOTAyIDEuNjgyOTlMMTAuNTkwOCA4LjY4NTAyQzEwLjY2NiA4Ljg3NjMzIDEwLjg1MDYgOS4wMDIxNCAxMS4wNTYyIDkuMDAyMTRaTTE0Ljk1MzcgMTIuNDk5OUMxNC45NTM3IDEyLjYwNiAxNC45MTE1IDEyLjcwNzcgMTQuODM2NSAxMi43ODI4TDEyLjgzNjUgMTQuNzgyOEMxMi42ODAzIDE0LjkzOSAxMi40MjcxIDE0LjkzOSAxMi4yNzA4IDE0Ljc4MjhDMTIuMTE0NiAxNC42MjY1IDEyLjExNDYgMTQuMzczMyAxMi4yNzA4IDE0LjIxNzFMMTMuNTg4IDEyLjg5OTlIMS41MTkzN0wyLjgzNjUzIDE0LjIxNzFDMi45OTI3NCAxNC4zNzMzIDIuOTkyNzQgMTQuNjI2NSAyLjgzNjUzIDE0Ljc4MjhDMi42ODAzMiAxNC45MzkgMi40MjcwNSAxNC45MzkgMi4yNzA4NCAxNC43ODI4TDAuMjcwODQzIDEyLjc4MjhDMC4xOTU4MjggMTIuNzA3NyAwLjE1MzY4NyAxMi42MDYgMC4xNTM2ODcgMTIuNDk5OUMwLjE1MzY4NyAxMi4zOTM4IDAuMTk1ODI4IDEyLjI5MjEgMC4yNzA4NDMgMTIuMjE3MUwyLjI3MDg0IDEwLjIxNzFDMi40MjcwNSAxMC4wNjA5IDIuNjgwMzIgMTAuMDYwOSAyLjgzNjUzIDEwLjIxNzFDMi45OTI3NCAxMC4zNzMzIDIuOTkyNzQgMTAuNjI2NSAyLjgzNjUzIDEwLjc4MjhMMS41MTkzNyAxMi4wOTk5TDEzLjU4OCAxMi4wOTk5TDEyLjI3MDggMTAuNzgyOEMxMi4xMTQ2IDEwLjYyNjUgMTIuMTE0NiAxMC4zNzMzIDEyLjI3MDggMTAuMjE3MUMxMi40MjcxIDEwLjA2MDkgMTIuNjgwMyAxMC4wNjA5IDEyLjgzNjUgMTAuMjE3MUwxNC44MzY1IDEyLjIxNzFDMTQuOTExNSAxMi4yOTIxIDE0Ljk1MzcgMTIuMzkzOCAxNC45NTM3IDEyLjQ5OTlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxkbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC42OTY2NiAwLjA0MDM1NEM4LjkwODU5IDAuMTMxMDM4IDkuMDMxMDUgMC4zNTQ4NTYgOC45OTMxNSAwLjU4MjIzNUw4LjA5MDE5IDYuMDAwMDFIMTIuNDk5OUMxMi42ODkzIDYuMDAwMDEgMTIuODYyNSA2LjEwNzAxIDEyLjk0NzIgNi4yNzY0QzEzLjAzMTggNi40NDU3OSAxMy4wMTM2IDYuNjQ4NSAxMi44OTk5IDYuOEw2Ljg5OTk3IDE0LjhDNi43NjE2NiAxNC45ODQ0IDYuNTE1MiAxNS4wNTAzIDYuMzAzMjcgMTQuOTU5NkM2LjA5MTM0IDE0Ljg2OSA1Ljk2ODg4IDE0LjY0NTEgNi4wMDY3OCAxNC40MTc4TDYuOTA5NzQgOC45OTk5OUgyLjQ5OTk5QzIuMzEwNjEgOC45OTk5OSAyLjEzNzQ3IDguODkyOTkgMi4wNTI3OCA4LjcyMzZDMS45NjgwOCA4LjU1NDIxIDEuOTg2MzYgOC4zNTE1IDIuMDk5OTkgOC4yTDguMDk5OTYgMC4yMDAwMzdDOC4yMzgyNyAwLjAxNTYyNTUgOC40ODQ3MyAtMC4wNTAzMzAxIDguNjk2NjYgMC4wNDAzNTRaTTMuNDk5OTkgOEg3LjQ5OTk2QzcuNjQ2OTQgOCA3Ljc4NjQ3IDguMDY0NjYgNy44ODE0NyA4LjE3NjgxQzcuOTc2NDcgOC4yODg5NSA4LjAxNzMyIDguNDM3MjIgNy45OTMxNiA4LjU4MjE5TDcuMzMwMjYgMTIuNTU5NkwxMS40OTk5IDdINy40OTk5NkM3LjM1Mjk5IDcgNy4yMTM0NiA2LjkzNTM0IDcuMTE4NDYgNi44MjMxOUM3LjAyMzQ2IDYuNzExMDUgNi45ODI2MSA2LjU2Mjc4IDcuMDA2NzcgNi40MTc4MUw3LjY2OTY3IDIuNDQwNDJMMy40OTk5OSA4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNzgyMzMgMi4yMTcxM0MzLjcwNzMyIDIuMTQyMTIgMy42MDU1NyAyLjA5OTk4IDMuNDk5NDkgMi4wOTk5OEMzLjM5MzQgMi4wOTk5OCAzLjI5MTY2IDIuMTQyMTIgMy4yMTY2NCAyLjIxNzEzTDEuMjE2NjQgNC4yMTcxM0MxLjA2MDQ0IDQuMzczMzQgMS4wNjA0NCA0LjYyNjYxIDEuMjE2NjQgNC43ODI4MkMxLjM3Mjg1IDQuOTM5MDMgMS42MjYxMiA0LjkzOTAzIDEuNzgyMzMgNC43ODI4MkwzLjA5OTQ5IDMuNDY1NjZMMy4wOTk0OSAxMS41MzQzTDEuNzgyMzMgMTAuMjE3MUMxLjYyNjEyIDEwLjA2MDkgMS4zNzI4NSAxMC4wNjA5IDEuMjE2NjQgMTAuMjE3MUMxLjA2MDQzIDEwLjM3MzMgMS4wNjA0MyAxMC42MjY2IDEuMjE2NjQgMTAuNzgyOEwzLjIxNjY0IDEyLjc4MjhDMy4yOTE2NiAxMi44NTc4IDMuMzkzNCAxMi45IDMuNDk5NDkgMTIuOUMzLjYwNTU3IDEyLjkgMy43MDczMSAxMi44NTc4IDMuNzgyMzMgMTIuNzgyOEw1Ljc4MjMzIDEwLjc4MjhDNS45Mzg1NCAxMC42MjY2IDUuOTM4NTQgMTAuMzczMyA1Ljc4MjMzIDEwLjIxNzFDNS42MjYxMiAxMC4wNjA5IDUuMzcyODUgMTAuMDYwOSA1LjIxNjY0IDEwLjIxNzFMMy44OTk0OSAxMS41MzQzTDMuODk5NDkgMy40NjU2Nkw1LjIxNjY0IDQuNzgyODJDNS4zNzI4NSA0LjkzOTAzIDUuNjI2MTIgNC45MzkwMyA1Ljc4MjMzIDQuNzgyODJDNS45Mzg1NCA0LjYyNjYxIDUuOTM4NTQgNC4zNzMzNCA1Ljc4MjMzIDQuMjE3MTNMMy43ODIzMyAyLjIxNzEzWk04LjQ5OTk4IDMuOTk5OTdDOC4yMjM4MyAzLjk5OTk3IDcuOTk5OTggNC4yMjM4MiA3Ljk5OTk4IDQuNDk5OTdDNy45OTk5OCA0Ljc3NjExIDguMjIzODMgNC45OTk5NyA4LjQ5OTk4IDQuOTk5OTdIMTQuNUMxNC43NzYxIDQuOTk5OTcgMTUgNC43NzYxMSAxNSA0LjQ5OTk3QzE1IDQuMjIzODIgMTQuNzc2MSAzLjk5OTk3IDE0LjUgMy45OTk5N0g4LjQ5OTk4Wk03Ljk5OTk4IDcuNDk5OTdDNy45OTk5OCA3LjIyMzgyIDguMjIzODMgNi45OTk5NyA4LjQ5OTk4IDYuOTk5OTdIMTQuNUMxNC43NzYxIDYuOTk5OTcgMTUgNy4yMjM4MiAxNSA3LjQ5OTk3QzE1IDcuNzc2MTEgMTQuNzc2MSA3Ljk5OTk3IDE0LjUgNy45OTk5N0g4LjQ5OTk4QzguMjIzODMgNy45OTk5NyA3Ljk5OTk4IDcuNzc2MTEgNy45OTk5OCA3LjQ5OTk3Wk04LjQ5OTk4IDkuOTk5OTdDOC4yMjM4MyA5Ljk5OTk3IDcuOTk5OTggMTAuMjIzOCA3Ljk5OTk4IDEwLjVDNy45OTk5OCAxMC43NzYxIDguMjIzODMgMTEgOC40OTk5OCAxMUgxNC41QzE0Ljc3NjEgMTEgMTUgMTAuNzc2MSAxNSAxMC41QzE1IDEwLjIyMzggMTQuNzc2MSA5Ljk5OTk3IDE0LjUgOS45OTk5N0g4LjQ5OTk4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuNjI0NzEgNC4wMDAwMUw0LjU2NDAyIDQuMDAwMDFDNC4wNDEzNCAzLjk5OTkzIDMuNzA2ODcgMy45OTk4OCAzLjQxODIgNC4wNTVDMi4yMzc5IDQuMjgwMzkgMS4yOTg0NiA1LjE3MDUzIDEuMDU4MTUgNi4zMzAzNUMwLjk5OTUzOCA2LjYxMzIxIDAuOTk5NjA0IDYuOTM5OTggMC45OTk3MDMgNy40MzY4OUwwLjk5OTcxMSA3LjUwMDAxTDAuOTk5NzAzIDcuNTYzMTNDMC45OTk2MDQgOC4wNjAwNCAwLjk5OTUzOCA4LjM4NjgxIDEuMDU4MTUgOC42Njk2N0MxLjI5ODQ2IDkuODI5NSAyLjIzNzkgMTAuNzE5NiAzLjQxODIgMTAuOTQ1QzMuNzA2ODggMTEuMDAwMSA0LjA0MTM1IDExLjAwMDEgNC41NjQwMyAxMUw0LjYyNDcxIDExSDUuNDk5NzFDNS43NzU4NSAxMSA1Ljk5OTcxIDEwLjc3NjIgNS45OTk3MSAxMC41QzUuOTk5NzEgMTAuMjIzOSA1Ljc3NTg1IDEwIDUuNDk5NzEgMTBINC42MjQ3MUM0LjAyMDg0IDEwIDMuNzg5MDcgOS45OTc3NyAzLjYwNTc3IDkuOTYyNzdDMi44MDI2MiA5LjgwOTQgMi4xOTE1NyA5LjIxMTA4IDIuMDM3MzUgOC40NjY3OEMyLjAwMjMzIDguMjk3NzggMS45OTk3MSA4LjA4MjUxIDEuOTk5NzEgNy41MDAwMUMxLjk5OTcxIDYuOTE3NTIgMi4wMDIzMyA2LjcwMjI1IDIuMDM3MzUgNi41MzMyNEMyLjE5MTU3IDUuNzg4OTUgMi44MDI2MiA1LjE5MDYyIDMuNjA1NzcgNS4wMzcyNUMzLjc4OTA3IDUuMDAyMjUgNC4wMjA4NCA1LjAwMDAxIDQuNjI0NzEgNS4wMDAwMUg1LjQ5OTcxQzUuNzc1ODUgNS4wMDAwMSA1Ljk5OTcxIDQuNzc2MTUgNS45OTk3MSA0LjUwMDAxQzUuOTk5NzEgNC4yMjM4NyA1Ljc3NTg1IDQuMDAwMDEgNS40OTk3MSA0LjAwMDAxSDQuNjI0NzFaTTEwLjM3NDcgNS4wMDAwMUMxMC45Nzg2IDUuMDAwMDEgMTEuMjEwNCA1LjAwMjI1IDExLjM5MzcgNS4wMzcyNUMxMi4xOTY4IDUuMTkwNjIgMTIuODA3OSA1Ljc4ODk1IDEyLjk2MjEgNi41MzMyNEMxMi45OTcxIDYuNzAyMjUgMTIuOTk5NyA2LjkxNzUyIDEyLjk5OTcgNy41MDAwMUMxMi45OTk3IDguMDgyNTEgMTIuOTk3MSA4LjI5Nzc4IDEyLjk2MjEgOC40NjY3OEMxMi44MDc5IDkuMjExMDggMTIuMTk2OCA5LjgwOTQgMTEuMzkzNyA5Ljk2Mjc3QzExLjIxMDQgOS45OTc3NyAxMC45Nzg2IDEwIDEwLjM3NDcgMTBIOS40OTk3MUM5LjIyMzU3IDEwIDguOTk5NzEgMTAuMjIzOSA4Ljk5OTcxIDEwLjVDOC45OTk3MSAxMC43NzYyIDkuMjIzNTcgMTEgOS40OTk3MSAxMUgxMC4zNzQ3TDEwLjQzNTQgMTFDMTAuOTU4MSAxMS4wMDAxIDExLjI5MjUgMTEuMDAwMSAxMS41ODEyIDEwLjk0NUMxMi43NjE1IDEwLjcxOTYgMTMuNzAxIDkuODI5NSAxMy45NDEzIDguNjY5NjdDMTMuOTk5OSA4LjM4NjgxIDEzLjk5OTggOC4wNjAwNSAxMy45OTk3IDcuNTYzMTRMMTMuOTk5NyA3LjUwMDAxTDEzLjk5OTcgNy40MzY4OEMxMy45OTk4IDYuOTM5OTggMTMuOTk5OSA2LjYxMzIxIDEzLjk0MTMgNi4zMzAzNUMxMy43MDEgNS4xNzA1MyAxMi43NjE1IDQuMjgwMzkgMTEuNTgxMiA0LjA1NUMxMS4yOTI1IDMuOTk5ODggMTAuOTU4MSAzLjk5OTkzIDEwLjQzNTQgNC4wMDAwMUwxMC4zNzQ3IDQuMDAwMDFIOS40OTk3MUM5LjIyMzU3IDQuMDAwMDEgOC45OTk3MSA0LjIyMzg3IDguOTk5NzEgNC41MDAwMUM4Ljk5OTcxIDQuNzc2MTUgOS4yMjM1NyA1LjAwMDAxIDkuNDk5NzEgNS4wMDAwMUgxMC4zNzQ3Wk01LjAwMDM4IDdDNC43MjQyNCA3IDQuNTAwMzggNy4yMjM4NiA0LjUwMDM4IDcuNUM0LjUwMDM4IDcuNzc2MTQgNC43MjQyNCA4IDUuMDAwMzggOEgxMC4wMDA0QzEwLjI3NjUgOCAxMC41MDA0IDcuNzc2MTQgMTAuNTAwNCA3LjVDMTAuNTAwNCA3LjIyMzg2IDEwLjI3NjUgNyAxMC4wMDA0IDdINS4wMDAzOFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGhuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk04LjUxMTk0IDMuMDA1NDFDOS4xODgyOSAyLjU0NTk0IDEwLjA0MzUgMi41MzY5NCAxMC42Nzg4IDIuOTU0MTlDMTAuODIzMSAzLjA0ODkzIDEwLjk3NzEgMy4xOTkzIDExLjM4OSAzLjYxMTE5QzExLjgwMDkgNC4wMjMwNyAxMS45NTEzIDQuMTc3MTQgMTIuMDQ2IDQuMzIxNDFDMTIuNDYzMyA0Ljk1Njc1IDEyLjQ1NDMgNS44MTE5MiAxMS45OTQ4IDYuNDg4MjdDMTEuODg5OSA2LjY0MjY0IDExLjcyNzYgNi44MDgxMSAxMS4zMDA2IDcuMjM1MTFMMTAuNjgxOSA3Ljg1MzgzQzEwLjQ4NjcgOC4wNDkwOSAxMC40ODY3IDguMzY1NjcgMTAuNjgxOSA4LjU2MDkzQzEwLjg3NzIgOC43NTYyIDExLjE5MzggOC43NTYyIDExLjM4OSA4LjU2MDkzTDEyLjAwNzcgNy45NDIyMUwxMi4wNTA3IDcuODk5MjlDMTIuNDIwMyA3LjUyOTc2IDEyLjY1NjggNy4yOTMzIDEyLjgyMiA3LjA1MDJDMTMuNDk3MiA2LjA1NjIzIDEzLjUzMjEgNC43NjI1MiAxMi44ODE5IDMuNzcyNDhDMTIuNzIzMyAzLjUzMTAyIDEyLjQ5MjIgMy4zMDAwMSAxMi4xNDA4IDIuOTQ4NzFMMTIuMDk2MSAyLjkwNDA4TDEyLjA1MTUgMi44NTk0MkMxMS43MDAyIDIuNTA4IDExLjQ2OTIgMi4yNzY4OSAxMS4yMjc3IDIuMTE4MzJDMTAuMjM3NyAxLjQ2ODEzIDguOTQzOTggMS41MDI5OSA3Ljk1MDAxIDIuMTc4MjJDNy43MDY5MSAyLjM0MzM2IDcuNDcwNDQgMi41Nzk5MSA3LjEwMDkgMi45NDk1NUw3LjA1OCAyLjk5MjQ3TDYuNDM5MjggMy42MTExOUM2LjI0NDAxIDMuODA2NDUgNi4yNDQwMSA0LjEyMzAzIDYuNDM5MjggNC4zMTgyOUM2LjYzNDU0IDQuNTEzNTUgNi45NTExMiA0LjUxMzU1IDcuMTQ2MzggNC4zMTgyOUw3Ljc2NTEgMy42OTk1N0M4LjE5MjEgMy4yNzI1NyA4LjM1NzU3IDMuMTEwMjcgOC41MTE5NCAzLjAwNTQxWk00LjMxNzk2IDcuMTQ2NzJDNC41MTMyMiA2Ljk1MTQ2IDQuNTEzMjIgNi42MzQ4NyA0LjMxNzk2IDYuNDM5NjFDNC4xMjI2OSA2LjI0NDM1IDMuODA2MTEgNi4yNDQzNSAzLjYxMDg1IDYuNDM5NjFMMi45OTIxMyA3LjA1ODMzTDIuOTQ5MjIgNy4xMDEyNEMyLjU3OTU3IDcuNDcwNzcgMi4zNDMwMyA3LjcwNzI0IDIuMTc3ODggNy45NTAzNUMxLjUwMjY1IDguOTQ0MzIgMS40Njc4IDEwLjIzOCAyLjExNzk5IDExLjIyODFDMi4yNzY1NiAxMS40Njk1IDIuNTA3NjYgMTEuNzAwNSAyLjg1OTEgMTIuMDUxOEwyLjkwMzc0IDEyLjA5NjVMMi45NDgzNyAxMi4xNDExQzMuMjk5NjcgMTIuNDkyNSAzLjUzMDY4IDEyLjcyMzcgMy43NzIxNCAxMi44ODIyQzQuNzYyMTkgMTMuNTMyNCA2LjA1NTg5IDEzLjQ5NzYgNy4wNDk4NiAxMi44MjIzQzcuMjkyOTYgMTIuNjU3MiA3LjUyOTQzIDEyLjQyMDYgNy44OTg5NiAxMi4wNTFMNy44OTg5NyAxMi4wNTFMNy45NDE4OCAxMi4wMDgxTDguNTYwNiAxMS4zODk0QzguNzU1ODYgMTEuMTk0MSA4Ljc1NTg2IDEwLjg3NzUgOC41NjA2IDEwLjY4MjNDOC4zNjUzMyAxMC40ODcgOC4wNDg3NSAxMC40ODcgNy44NTM0OSAxMC42ODIzTDcuMjM0NzcgMTEuMzAxQzYuODA3NzcgMTEuNzI4IDYuNjQyMyAxMS44OTAzIDYuNDg3OTQgMTEuOTk1MUM1LjgxMTU4IDEyLjQ1NDYgNC45NTY0MiAxMi40NjM2IDQuMzIxMDcgMTIuMDQ2NEM0LjE3NjgxIDExLjk1MTYgNC4wMjI3NCAxMS44MDEyIDMuNjEwODUgMTEuMzg5NEMzLjE5ODk2IDEwLjk3NzUgMy4wNDg2IDEwLjgyMzQgMi45NTM4NSAxMC42NzkxQzIuNTM2NjEgMTAuMDQzOCAyLjU0NTYxIDkuMTg4NjMgMy4wMDUwNyA4LjUxMjI3QzMuMTA5OTMgOC4zNTc5MSAzLjI3MjI0IDguMTkyNDQgMy42OTkyNCA3Ljc2NTQ0TDQuMzE3OTYgNy4xNDY3MlpNOS42MjE3MiA2LjA4NTU4QzkuODE2OTggNS44OTAzMiA5LjgxNjk4IDUuNTczNzMgOS42MjE3MiA1LjM3ODQ3QzkuNDI2NDYgNS4xODMyMSA5LjEwOTg4IDUuMTgzMjEgOC45MTQ2MSA1LjM3ODQ3TDUuMzc5MDggOC45MTQwMUM1LjE4MzgyIDkuMTA5MjcgNS4xODM4MiA5LjQyNTg1IDUuMzc5MDggOS42MjExMUM1LjU3NDM0IDkuODE2MzcgNS44OTA5MiA5LjgxNjM3IDYuMDg2MTkgOS42MjExMUw5LjYyMTcyIDYuMDg1NThaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxnbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTMuMzUzNiAyLjM1MzU1QzEzLjU0ODggMi4xNTgyOSAxMy41NDg4IDEuODQxNzEgMTMuMzUzNiAxLjY0NjQ1QzEzLjE1ODMgMS40NTExOCAxMi44NDE3IDEuNDUxMTggMTIuNjQ2NCAxLjY0NjQ1TDEuNjQ2NDUgMTIuNjQ2NEMxLjQ1MTE4IDEyLjg0MTcgMS40NTExOCAxMy4xNTgzIDEuNjQ2NDUgMTMuMzUzNkMxLjg0MTcxIDEzLjU0ODggMi4xNTgyOSAxMy41NDg4IDIuMzUzNTUgMTMuMzUzNkwxMy4zNTM2IDIuMzUzNTVaTTIuMDM3MzUgOC40NjY3OEMyLjE3Mzk4IDkuMTI2MTkgMi42NjkxOCA5LjY3MTAzIDMuMzM4ODYgOS44OTMzOEwyLjU3ODMzIDEwLjY1MzlDMS44MDg0MyAxMC4yNTM0IDEuMjM3ODQgOS41MzY5MyAxLjA1ODE1IDguNjY5NjdDMC45OTk1MzggOC4zODY4MSAwLjk5OTYwNCA4LjA2MDA0IDAuOTk5NzAzIDcuNTYzMTNMMC45OTk3MTEgNy41MDAwMUwwLjk5OTcwMyA3LjQzNjg5QzAuOTk5NjA0IDYuOTM5OTggMC45OTk1MzggNi42MTMyMSAxLjA1ODE1IDYuMzMwMzVDMS4yOTg0NiA1LjE3MDUzIDIuMjM3OSA0LjI4MDM5IDMuNDE4MiA0LjA1NUMzLjcwNjg3IDMuOTk5ODggNC4wNDEzNCAzLjk5OTkzIDQuNTY0MDIgNC4wMDAwMUw0LjYyNDcxIDQuMDAwMDFINS40OTk3MUM1Ljc3NTg1IDQuMDAwMDEgNS45OTk3MSA0LjIyMzg3IDUuOTk5NzEgNC41MDAwMUM1Ljk5OTcxIDQuNzc2MTUgNS43NzU4NSA1LjAwMDAxIDUuNDk5NzEgNS4wMDAwMUg0LjYyNDcxQzQuMDIwODQgNS4wMDAwMSAzLjc4OTA3IDUuMDAyMjUgMy42MDU3NyA1LjAzNzI1QzIuODAyNjIgNS4xOTA2MiAyLjE5MTU3IDUuNzg4OTUgMi4wMzczNSA2LjUzMzI0QzIuMDAyMzMgNi43MDIyNSAxLjk5OTcxIDYuOTE3NTIgMS45OTk3MSA3LjUwMDAxQzEuOTk5NzEgOC4wODI1MSAyLjAwMjMzIDguMjk3NzggMi4wMzczNSA4LjQ2Njc4Wk0xMi45NjIxIDYuNTMzMjRDMTIuODI1NSA1Ljg3Mzk3IDEyLjMzMDQgNS4zMjkyMiAxMS42NjEgNS4xMDY3OUwxMi40MjE1IDQuMzQ2MzFDMTMuMTkxMiA0Ljc0Njg2IDEzLjc2MTYgNS40NjMyMyAxMy45NDEzIDYuMzMwMzVDMTMuOTk5OSA2LjYxMzIxIDEzLjk5OTggNi45Mzk5OCAxMy45OTk3IDcuNDM2ODhMMTMuOTk5NyA3LjUwMDAxTDEzLjk5OTcgNy41NjMxNEMxMy45OTk4IDguMDYwMDUgMTMuOTk5OSA4LjM4NjgxIDEzLjk0MTMgOC42Njk2N0MxMy43MDEgOS44Mjk1IDEyLjc2MTUgMTAuNzE5NiAxMS41ODEyIDEwLjk0NUMxMS4yOTI1IDExLjAwMDEgMTAuOTU4MSAxMS4wMDAxIDEwLjQzNTQgMTFMMTAuMzc0NyAxMUg5LjQ5OTcxQzkuMjIzNTcgMTEgOC45OTk3MSAxMC43NzYyIDguOTk5NzEgMTAuNUM4Ljk5OTcxIDEwLjIyMzkgOS4yMjM1NyAxMCA5LjQ5OTcxIDEwSDEwLjM3NDdDMTAuOTc4NiAxMCAxMS4yMTA0IDkuOTk3NzcgMTEuMzkzNyA5Ljk2Mjc3QzEyLjE5NjggOS44MDk0IDEyLjgwNzkgOS4yMTEwOCAxMi45NjIxIDguNDY2NzhDMTIuOTk3MSA4LjI5Nzc4IDEyLjk5OTcgOC4wODI1MSAxMi45OTk3IDcuNTAwMDFDMTIuOTk5NyA2LjkxNzUyIDEyLjk5NzEgNi43MDIyNSAxMi45NjIxIDYuNTMzMjRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx2bj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC41MDAyMSAwQzQuNzc2MzUgMCA1LjAwMDIgMC4yMjM4NTMgNS4wMDAyIDAuNDk5OTlWMi40OTk5NUM1LjAwMDIgMi43NzYwOSA0Ljc3NjM1IDIuOTk5OTQgNC41MDAyMSAyLjk5OTk0QzQuMjI0MDggMi45OTk5NCA0LjAwMDIyIDIuNzc2MDkgNC4wMDAyMiAyLjQ5OTk1VjAuNDk5OTlDNC4wMDAyMiAwLjIyMzg1MyA0LjIyNDA4IDAgNC41MDAyMSAwWk0wLjY0NjQ1MSAwLjY0NjQ3QzAuODQxNzEgMC40NTEyMTIgMS4xNTgyOSAwLjQ1MTIxMiAxLjM1MzU0IDAuNjQ2NDdMMi44NTM1MSAyLjE0NjQ0QzMuMDQ4NzcgMi4zNDE3IDMuMDQ4NzcgMi42NTgyNyAyLjg1MzUxIDIuODUzNTNDMi42NTgyNiAzLjA0ODc5IDIuMzQxNjggMy4wNDg3OSAyLjE0NjQyIDIuODUzNTNMMC42NDY0NTIgMS4zNTM1NkMwLjQ1MTE5MyAxLjE1ODMgMC40NTExOTMgMC44NDE3MjggMC42NDY0NTEgMC42NDY0N1pNMC4wMDAzMDUxNyA0LjQ5OTkxQzAuMDAwMzA1MTcgNC4yMjM3NyAwLjIyNDE1OCAzLjk5OTkyIDAuNTAwMjk1IDMuOTk5OTJIMi41MDAyNUMyLjc3NjM5IDMuOTk5OTIgMy4wMDAyNCA0LjIyMzc3IDMuMDAwMjQgNC40OTk5MUMzLjAwMDI0IDQuNzc2MDUgMi43NzYzOSA0Ljk5OTkgMi41MDAyNSA0Ljk5OTlIMC41MDAyOTVDMC4yMjQxNTggNC45OTk5IDAuMDAwMzA1MTcgNC43NzYwNSAwLjAwMDMwNTE3IDQuNDk5OTFaTTEyLjAwMDEgMTAuNDk5OEMxMi4wMDAxIDEwLjIyMzYgMTIuMjIzOSA5Ljk5OTggMTIuNTAwMSA5Ljk5OThIMTQuNUMxNC43NzYxIDkuOTk5OCAxNSAxMC4yMjM2IDE1IDEwLjQ5OThDMTUgMTAuNzc1OSAxNC43NzYxIDEwLjk5OTggMTQuNSAxMC45OTk4SDEyLjUwMDFDMTIuMjIzOSAxMC45OTk4IDEyLjAwMDEgMTAuNzc1OSAxMi4wMDAxIDEwLjQ5OThaTTEwLjUwMDEgMTEuOTk5OEMxMC43NzYyIDExLjk5OTggMTEuMDAwMSAxMi4yMjM2IDExLjAwMDEgMTIuNDk5N1YxNC40OTk3QzExLjAwMDEgMTQuNzc1OCAxMC43NzYyIDE0Ljk5OTcgMTAuNTAwMSAxNC45OTk3QzEwLjIyNCAxNC45OTk3IDEwLjAwMDEgMTQuNzc1OCAxMC4wMDAxIDE0LjQ5OTdWMTIuNDk5N0MxMC4wMDAxIDEyLjIyMzYgMTAuMjI0IDExLjk5OTggMTAuNTAwMSAxMS45OTk4Wk0xMi4xNDYyIDEyLjE0NjJDMTIuMzQxNSAxMS45NTEgMTIuNjU4IDExLjk1MSAxMi44NTMzIDEyLjE0NjJMMTQuMzUzMyAxMy42NDYyQzE0LjU0ODUgMTMuODQxNSAxNC41NDg1IDE0LjE1OCAxNC4zNTMzIDE0LjM1MzNDMTQuMTU4IDE0LjU0ODUgMTMuODQxNCAxNC41NDg1IDEzLjY0NjIgMTQuMzUzM0wxMi4xNDYyIDEyLjg1MzNDMTEuOTUxIDEyLjY1ODEgMTEuOTUxIDEyLjM0MTUgMTIuMTQ2MiAxMi4xNDYyWk03Ljc2NDc4IDMuNjk5MzhDOC4xOTE3NyAzLjI3MjM4IDguMzU3MjQgMy4xMTAwOCA4LjUxMTYgMy4wMDUyMkM5LjE4Nzk0IDIuNTQ1NzcgMTAuMDQzMSAyLjUzNjc3IDEwLjY3ODQgMi45NTQwMUMxMC44MjI3IDMuMDQ4NzUgMTAuOTc2NyAzLjE5OTExIDExLjM4ODYgMy42MTA5OUMxMS44MDA1IDQuMDIyODcgMTEuOTUwOSA0LjE3Njk0IDEyLjA0NTYgNC4zMjEyQzEyLjQ2MjggNC45NTY1MyAxMi40NTM5IDUuODExNjggMTEuOTk0NCA2LjQ4ODAyQzExLjg4OTUgNi42NDIzOCAxMS43MjcyIDYuODA3ODUgMTEuMzAwMiA3LjIzNDg0TDEwLjY4MTUgNy44NTM1NEMxMC40ODYzIDguMDQ4OCAxMC40ODYzIDguMzY1MzggMTAuNjgxNSA4LjU2MDY0QzEwLjg3NjggOC43NTU4OSAxMS4xOTM0IDguNzU1ODkgMTEuMzg4NiA4LjU2MDY0TDEyLjAwNzMgNy45NDE5M0wxMi4wNTAyIDcuODk5MDNDMTIuNDE5OSA3LjUyOTUgMTIuNjU2NCA3LjI5MzAzIDEyLjgyMTYgNy4wNDk5M0MxMy40OTY4IDYuMDU1OTggMTMuNTMxNiA0Ljc2MjMgMTIuODgxNSAzLjc3MjI4QzEyLjcyMjkgMy41MzA4MyAxMi40OTE4IDMuMjk5ODIgMTIuMTQwNCAyLjk0ODUzTDEyLjA5NTcgMi45MDM5TDEyLjA1MTEgMi44NTkyNUMxMS42OTk4IDIuNTA3ODIgMTEuNDY4OCAyLjI3NjcyIDExLjIyNzMgMi4xMTgxNkMxMC4yMzczIDEuNDY3OTggOC45NDM2NCAxLjUwMjg0IDcuOTQ5NjggMi4xNzgwNUM3LjcwNjU5IDIuMzQzMTkgNy40NzAxMiAyLjU3OTczIDcuMTAwNiAyLjk0OTM2TDcuMTAwNiAyLjk0OTM3TDcuMDU3NjkgMi45OTIyOEw2LjQzODk4IDMuNjEwOTlDNi4yNDM3MiAzLjgwNjI1IDYuMjQzNzIgNC4xMjI4MiA2LjQzODk4IDQuMzE4MDhDNi42MzQyNCA0LjUxMzM0IDYuOTUwODEgNC41MTMzNCA3LjE0NjA3IDQuMzE4MDhMNy43NjQ3OCAzLjY5OTM4Wk0yLjk5MTkxIDcuMDU4MDdMMi45NDg5OSA3LjEwMDk3QzIuNTc5MzUgNy40NzA1IDIuMzQyODIgNy43MDY5NyAyLjE3NzY3IDcuOTUwMDZDMS41MDI0NiA4Ljk0NDAxIDEuNDY3NiAxMC4yMzc3IDIuMTE3NzggMTEuMjI3N0MyLjI3NjM0IDExLjQ2OTIgMi41MDc0NCAxMS43MDAyIDIuODU4ODYgMTIuMDUxNUwyLjg1ODg4IDEyLjA1MTVMMi45MDM1MiAxMi4wOTYxTDIuOTQ4MTUgMTIuMTQwN0wyLjk0ODE1IDEyLjE0MDdMMi45NDgxNyAxMi4xNDA4QzMuMjk5NDUgMTIuNDkyMiAzLjUzMDQ1IDEyLjcyMzMgMy43NzE5IDEyLjg4MThDNC43NjE5MyAxMy41MzIgNi4wNTU2IDEzLjQ5NzIgNy4wNDk1NiAxMi44MjE5QzcuMjkyNjUgMTIuNjU2OCA3LjUyOTEyIDEyLjQyMDMgNy44OTg2NSAxMi4wNTA2TDcuOTQxNTUgMTIuMDA3N0w4LjU2MDI2IDExLjM4OUM4Ljc1NTUyIDExLjE5MzcgOC43NTU1MiAxMC44NzcyIDguNTYwMjYgMTAuNjgxOUM4LjM2NSAxMC40ODY3IDguMDQ4NDIgMTAuNDg2NyA3Ljg1MzE3IDEwLjY4MTlMNy4yMzQ0NiAxMS4zMDA2QzYuODA3NDcgMTEuNzI3NiA2LjY0MiAxMS44ODk5IDYuNDg3NjQgMTEuOTk0OEM1LjgxMTMgMTIuNDU0MiA0Ljk1NjE1IDEyLjQ2MzIgNC4zMjA4MiAxMi4wNDZDNC4xNzY1NiAxMS45NTEyIDQuMDIyNDkgMTEuODAwOSAzLjYxMDYxIDExLjM4OUMzLjE5ODczIDEwLjk3NzEgMy4wNDgzNyAxMC44MjMxIDIuOTUzNjMgMTAuNjc4OEMyLjUzNjM5IDEwLjA0MzUgMi41NDUzOSA5LjE4ODMyIDMuMDA0ODQgOC41MTE5OEMzLjEwOTcxIDguMzU3NjEgMy4yNzIwMSA4LjE5MjE1IDMuNjk5IDcuNzY1MTZMNC4zMTc3IDcuMTQ2NDVDNC41MTI5NiA2Ljk1MTE5IDQuNTEyOTYgNi42MzQ2MiA0LjMxNzcgNi40MzkzNkM0LjEyMjQ1IDYuMjQ0MSAzLjgwNTg3IDYuMjQ0MSAzLjYxMDYxIDYuNDM5MzZMMi45OTE5MSA3LjA1ODA3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQ249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuNTY0MjcgMy45OTk4OEM0LjU4NDIyIDMuOTk5ODkgNC42MDQ0NSAzLjk5OTg5IDQuNjI0OTYgMy45OTk4OUg1LjQ5OTk2QzUuNzc2MSAzLjk5OTg5IDUuOTk5OTYgNC4yMjM3NSA1Ljk5OTk2IDQuNDk5ODlDNS45OTk5NiA0Ljc3NjAzIDUuNzc2MSA0Ljk5OTg5IDUuNDk5OTYgNC45OTk4OUg0LjYyNDk2QzQuMDIxMDggNC45OTk4OSAzLjc4OTMyIDUuMDAyMTMgMy42MDYwMSA1LjAzNzEzQzIuODAyODcgNS4xOTA1IDIuMTkxODEgNS43ODg4MyAyLjAzNzU5IDYuNTMzMTJDMi4wMDI1NyA2LjcwMjEyIDEuOTk5OTYgNi45MTczOSAxLjk5OTk2IDcuNDk5ODlDMS45OTk5NiA4LjA4MjM5IDIuMDAyNTcgOC4yOTc2NiAyLjAzNzU5IDguNDY2NjZDMi4xOTE4MSA5LjIxMDk1IDIuODAyODcgOS44MDkyOCAzLjYwNjAxIDkuOTYyNjVDMy43ODkzMiA5Ljk5NzY1IDQuMDIxMDggOS45OTk4OSA0LjYyNDk2IDkuOTk5ODlINS40OTk5NkM1Ljc3NjEgOS45OTk4OSA1Ljk5OTk2IDEwLjIyMzcgNS45OTk5NiAxMC40OTk5QzUuOTk5OTYgMTAuNzc2IDUuNzc2MSAxMC45OTk5IDUuNDk5OTYgMTAuOTk5OUg0LjYyNDk2QzQuNjA0NDUgMTAuOTk5OSA0LjU4NDIyIDEwLjk5OTkgNC41NjQyNyAxMC45OTk5QzQuMDQxNTkgMTEgMy43MDcxMiAxMSAzLjQxODQ1IDEwLjk0NDlDMi4yMzgxNCAxMC43MTk1IDEuMjk4NzEgOS44MjkzNyAxLjA1ODM5IDguNjY5NTVDMC45OTk3ODIgOC4zODY2OSAwLjk5OTg0OCA4LjA1OTkyIDAuOTk5OTQ3IDcuNTYzMDFDMC45OTk5NTEgNy41NDIyNyAwLjk5OTk1NSA3LjUyMTIzIDAuOTk5OTU1IDcuNDk5ODlDMC45OTk5NTUgNy40Nzg1NSAwLjk5OTk1MSA3LjQ1NzUxIDAuOTk5OTQ3IDcuNDM2NzdDMC45OTk4NDggNi45Mzk4NiAwLjk5OTc4MiA2LjYxMzA5IDEuMDU4MzkgNi4zMzAyM0MxLjI5ODcxIDUuMTcwNDEgMi4yMzgxNCA0LjI4MDI3IDMuNDE4NDUgNC4wNTQ4OEMzLjcwNzEyIDMuOTk5NzYgNC4wNDE1OSAzLjk5OTgxIDQuNTY0MjcgMy45OTk4OFpNMTEuMzkzOSA1LjAzNzEzQzExLjIxMDYgNS4wMDIxMyAxMC45Nzg4IDQuOTk5ODkgMTAuMzc1IDQuOTk5ODlIOS40OTk5NkM5LjIyMzgxIDQuOTk5ODkgOC45OTk5NiA0Ljc3NjAzIDguOTk5OTYgNC40OTk4OUM4Ljk5OTk2IDQuMjIzNzUgOS4yMjM4MSAzLjk5OTg5IDkuNDk5OTYgMy45OTk4OUgxMC4zNzVDMTAuMzk1NSAzLjk5OTg5IDEwLjQxNTcgMy45OTk4OSAxMC40MzU2IDMuOTk5ODhDMTAuOTU4MyAzLjk5OTgxIDExLjI5MjggMy45OTk3NiAxMS41ODE1IDQuMDU0ODhDMTIuNzYxOCA0LjI4MDI3IDEzLjcwMTIgNS4xNzA0MSAxMy45NDE1IDYuMzMwMjNDMTQuMDAwMSA2LjYxMzA5IDE0LjAwMDEgNi45Mzk4NSAxNCA3LjQzNjc2QzE0IDcuNDU3NSAxNCA3LjQ3ODU0IDE0IDcuNDk5ODlDMTQgNy41MjEyNCAxNCA3LjU0MjI4IDE0IDcuNTYzMDJDMTQuMDAwMSA4LjA1OTkyIDE0LjAwMDEgOC4zODY2OSAxMy45NDE1IDguNjY5NTVDMTMuNzAxMiA5LjgyOTM3IDEyLjc2MTggMTAuNzE5NSAxMS41ODE1IDEwLjk0NDlDMTEuMjkyOCAxMSAxMC45NTgzIDExIDEwLjQzNTYgMTAuOTk5OUMxMC40MTU3IDEwLjk5OTkgMTAuMzk1NSAxMC45OTk5IDEwLjM3NSAxMC45OTk5SDkuNDk5OTZDOS4yMjM4MSAxMC45OTk5IDguOTk5OTYgMTAuNzc2IDguOTk5OTYgMTAuNDk5OUM4Ljk5OTk2IDEwLjIyMzcgOS4yMjM4MSA5Ljk5OTg5IDkuNDk5OTYgOS45OTk4OUgxMC4zNzVDMTAuOTc4OCA5Ljk5OTg5IDExLjIxMDYgOS45OTc2NSAxMS4zOTM5IDkuOTYyNjVDMTIuMTk3IDkuODA5MjggMTIuODA4MSA5LjIxMDk1IDEyLjk2MjMgOC40NjY2NkMxMi45OTczIDguMjk3NjYgMTMgOC4wODIzOSAxMyA3LjQ5OTg5QzEzIDYuOTE3MzkgMTIuOTk3MyA2LjcwMjEyIDEyLjk2MjMgNi41MzMxMkMxMi44MDgxIDUuNzg4ODMgMTIuMTk3IDUuMTkwNSAxMS4zOTM5IDUuMDM3MTNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxtbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTAuNjc4OCAyLjk1NDE5QzEwLjA0MzUgMi41MzY5NCA5LjE4ODI5IDIuNTQ1OTQgOC41MTE5NCAzLjAwNTQxQzguMzU3NTcgMy4xMTAyNyA4LjE5MjEgMy4yNzI1NyA3Ljc2NTEgMy42OTk1N0w3LjE0NjM4IDQuMzE4MjlDNi45NTExMiA0LjUxMzU1IDYuNjM0NTQgNC41MTM1NSA2LjQzOTI4IDQuMzE4MjlDNi4yNDQwMSA0LjEyMzAzIDYuMjQ0MDEgMy44MDY0NSA2LjQzOTI4IDMuNjExMTlMNy4wNTggMi45OTI0N0M3LjA3MjUgMi45Nzc5NyA3LjA4Njc5IDIuOTYzNjYgNy4xMDA5IDIuOTQ5NTVDNy40NzA0NCAyLjU3OTkxIDcuNzA2OTEgMi4zNDMzNiA3Ljk1MDAxIDIuMTc4MjJDOC45NDM5OCAxLjUwMjk5IDEwLjIzNzcgMS40NjgxMyAxMS4yMjc3IDIuMTE4MzJDMTEuNDY5MiAyLjI3Njg5IDExLjcwMDIgMi41MDggMTIuMDUxNSAyLjg1OTQyQzEyLjA2NjIgMi44NzQxIDEyLjA4MSAyLjg4ODk4IDEyLjA5NjEgMi45MDQwOEMxMi4xMTEyIDIuOTE5MTcgMTIuMTI2MSAyLjkzNDA1IDEyLjE0MDggMi45NDg3MUMxMi40OTIyIDMuMzAwMDEgMTIuNzIzMyAzLjUzMTAyIDEyLjg4MTkgMy43NzI0OEMxMy41MzIxIDQuNzYyNTIgMTMuNDk3MiA2LjA1NjIzIDEyLjgyMiA3LjA1MDJDMTIuNjU2OCA3LjI5MzMgMTIuNDIwMyA3LjUyOTc2IDEyLjA1MDcgNy44OTkyOUMxMi4wMzY2IDcuOTEzNCAxMi4wMjIyIDcuOTI3NzEgMTIuMDA3NyA3Ljk0MjIxTDExLjM4OSA4LjU2MDkzQzExLjE5MzggOC43NTYyIDEwLjg3NzIgOC43NTYyIDEwLjY4MTkgOC41NjA5M0MxMC40ODY3IDguMzY1NjcgMTAuNDg2NyA4LjA0OTA5IDEwLjY4MTkgNy44NTM4M0wxMS4zMDA2IDcuMjM1MTFDMTEuNzI3NiA2LjgwODExIDExLjg4OTkgNi42NDI2NCAxMS45OTQ4IDYuNDg4MjdDMTIuNDU0MyA1LjgxMTkyIDEyLjQ2MzMgNC45NTY3NSAxMi4wNDYgNC4zMjE0MUMxMS45NTEzIDQuMTc3MTQgMTEuODAwOSA0LjAyMzA3IDExLjM4OSAzLjYxMTE5QzEwLjk3NzEgMy4xOTkzIDEwLjgyMzEgMy4wNDg5MyAxMC42Nzg4IDIuOTU0MTlaTTQuMzE3OTYgNi40Mzk2MUM0LjUxMzIyIDYuNjM0ODcgNC41MTMyMiA2Ljk1MTQ2IDQuMzE3OTYgNy4xNDY3MkwzLjY5OTI0IDcuNzY1NDRDMy4yNzIyNCA4LjE5MjQ0IDMuMTA5OTMgOC4zNTc5MSAzLjAwNTA3IDguNTEyMjdDMi41NDU2MSA5LjE4ODYzIDIuNTM2NjEgMTAuMDQzOCAyLjk1Mzg1IDEwLjY3OTFDMy4wNDg2IDEwLjgyMzQgMy4xOTg5NiAxMC45Nzc1IDMuNjEwODUgMTEuMzg5NEM0LjAyMjc0IDExLjgwMTIgNC4xNzY4MSAxMS45NTE2IDQuMzIxMDcgMTIuMDQ2NEM0Ljk1NjQyIDEyLjQ2MzYgNS44MTE1OCAxMi40NTQ2IDYuNDg3OTQgMTEuOTk1MUM2LjY0MjMgMTEuODkwMyA2LjgwNzc3IDExLjcyOCA3LjIzNDc3IDExLjMwMUw3Ljg1MzQ5IDEwLjY4MjNDOC4wNDg3NSAxMC40ODcgOC4zNjUzMyAxMC40ODcgOC41NjA2IDEwLjY4MjNDOC43NTU4NiAxMC44Nzc1IDguNzU1ODYgMTEuMTk0MSA4LjU2MDYgMTEuMzg5NEw3Ljk0MTg4IDEyLjAwODFDNy45MjczOCAxMi4wMjI2IDcuOTEzMDcgMTIuMDM2OSA3Ljg5ODk3IDEyLjA1MUM3LjUyOTQzIDEyLjQyMDYgNy4yOTI5NiAxMi42NTcyIDcuMDQ5ODYgMTIuODIyM0M2LjA1NTg5IDEzLjQ5NzYgNC43NjIxOSAxMy41MzI0IDMuNzcyMTQgMTIuODgyMkMzLjUzMDY4IDEyLjcyMzcgMy4yOTk2NyAxMi40OTI1IDIuOTQ4MzcgMTIuMTQxMUMyLjkzMzcxIDEyLjEyNjQgMi45MTg4MyAxMi4xMTE2IDIuOTAzNzQgMTIuMDk2NUMyLjg4ODY1IDEyLjA4MTQgMi44NzM3NyAxMi4wNjY1IDIuODU5MSAxMi4wNTE4QzIuNTA3NjYgMTEuNzAwNSAyLjI3NjU2IDExLjQ2OTUgMi4xMTc5OSAxMS4yMjgxQzEuNDY3OCAxMC4yMzggMS41MDI2NSA4Ljk0NDMyIDIuMTc3ODggNy45NTAzNUMyLjM0MzAzIDcuNzA3MjQgMi41Nzk1NyA3LjQ3MDc3IDIuOTQ5MjIgNy4xMDEyNEMyLjk2MzMzIDcuMDg3MTMgMi45Nzc2MyA3LjA3MjgzIDIuOTkyMTMgNy4wNTgzM0wzLjYxMDg1IDYuNDM5NjFDMy44MDYxMSA2LjI0NDM1IDQuMTIyNjkgNi4yNDQzNSA0LjMxNzk2IDYuNDM5NjFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx3bj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS41IDUuMjVDMS45MTQyMSA1LjI1IDIuMjUgNC45MTQyMSAyLjI1IDQuNUMyLjI1IDQuMDg1NzkgMS45MTQyMSAzLjc1IDEuNSAzLjc1QzEuMDg1NzkgMy43NSAwLjc1IDQuMDg1NzkgMC43NSA0LjVDMC43NSA0LjkxNDIxIDEuMDg1NzkgNS4yNSAxLjUgNS4yNVpNNCA0LjVDNCA0LjIyMzg2IDQuMjIzODYgNCA0LjUgNEgxMy41QzEzLjc3NjEgNCAxNCA0LjIyMzg2IDE0IDQuNUMxNCA0Ljc3NjE0IDEzLjc3NjEgNSAxMy41IDVINC41QzQuMjIzODYgNSA0IDQuNzc2MTQgNCA0LjVaTTQuNSA3QzQuMjIzODYgNyA0IDcuMjIzODYgNCA3LjVDNCA3Ljc3NjE0IDQuMjIzODYgOCA0LjUgOEgxMy41QzEzLjc3NjEgOCAxNCA3Ljc3NjE0IDE0IDcuNUMxNCA3LjIyMzg2IDEzLjc3NjEgNyAxMy41IDdINC41Wk00LjUgMTBDNC4yMjM4NiAxMCA0IDEwLjIyMzkgNCAxMC41QzQgMTAuNzc2MSA0LjIyMzg2IDExIDQuNSAxMUgxMy41QzEzLjc3NjEgMTEgMTQgMTAuNzc2MSAxNCAxMC41QzE0IDEwLjIyMzkgMTMuNzc2MSAxMCAxMy41IDEwSDQuNVpNMi4yNSA3LjVDMi4yNSA3LjkxNDIxIDEuOTE0MjEgOC4yNSAxLjUgOC4yNUMxLjA4NTc5IDguMjUgMC43NSA3LjkxNDIxIDAuNzUgNy41QzAuNzUgNy4wODU3OSAxLjA4NTc5IDYuNzUgMS41IDYuNzVDMS45MTQyMSA2Ljc1IDIuMjUgNy4wODU3OSAyLjI1IDcuNVpNMS41IDExLjI1QzEuOTE0MjEgMTEuMjUgMi4yNSAxMC45MTQyIDIuMjUgMTAuNUMyLjI1IDEwLjA4NTggMS45MTQyMSA5Ljc1IDEuNSA5Ljc1QzEuMDg1NzkgOS43NSAwLjc1IDEwLjA4NTggMC43NSAxMC41QzAuNzUgMTAuOTE0MiAxLjA4NTc5IDExLjI1IDEuNSAxMS4yNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGJuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01IDQuNjM2MDFDNSAzLjc2MDMxIDUuMjQyMTkgMy4xMDU0IDUuNjQzMjMgMi42NzM1N0M2LjAzOTM0IDIuMjQ3MDUgNi42NDU4MiAxLjk3ODMgNy41MDE0IDEuOTc4M0M4LjM1NzQ1IDEuOTc4MyA4Ljk2MzA2IDIuMjQ2NTIgOS4zNTgyMyAyLjY3MjA4QzkuNzU4MzggMy4xMDI5OSAxMCAzLjc1NzA4IDEwIDQuNjMzMjVWNS45OTk5OUg1VjQuNjM2MDFaTTQgNS45OTk5OVY0LjYzNjAxQzQgMy41ODE0OCA0LjI5MzM5IDIuNjU3NTQgNC45MTA0OSAxLjk5MzA3QzUuNTMyNTIgMS4zMjMyOSA2LjQyNjc1IDAuOTc4MzAyIDcuNTAxNCAwLjk3ODMwMkM4LjU3NTgzIDAuOTc4MzAyIDkuNDY5NTIgMS4zMjIzMyAxMC4wOTEgMS45OTE2MkMxMC43MDc2IDIuNjU1NTcgMTEgMy41Nzg5NiAxMSA0LjYzMzI1VjUuOTk5OTlIMTJDMTIuNTUyMyA1Ljk5OTk5IDEzIDYuNDQ3NzEgMTMgNi45OTk5OVYxM0MxMyAxMy41NTIzIDEyLjU1MjMgMTQgMTIgMTRIM0MyLjQ0NzcyIDE0IDIgMTMuNTUyMyAyIDEzVjYuOTk5OTlDMiA2LjQ0NzcxIDIuNDQ3NzIgNS45OTk5OSAzIDUuOTk5OTlINFpNMyA2Ljk5OTk5SDEyVjEzSDNWNi45OTk5OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHluPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5ODYgMEM2LjMyNTcgMCA1LjM2MTA3IDAuMzg5NDMgNC43Mzc1MyAxLjE5MzYxQzQuMjM3NDUgMS44Mzg1NiA0IDIuNjgyNDIgNCAzLjYzMzI1SDVDNSAyLjg0MzEzIDUuMTk2OTEgMi4yMzMxMiA1LjUyNzggMS44MDYzNkM1LjkxNjE1IDEuMzA1NTIgNi41NTE1MiAxIDcuNDk4NiAxQzguMzU2ODMgMSA4Ljk2MzM2IDEuMjY1MDIgOS4zNTg0NiAxLjY4NjIzQzkuNzU3OTMgMi4xMTIxMSAxMCAyLjc2MDQ0IDEwIDMuNjM2MDFWNkgzQzIuNDQ3NzIgNiAyIDYuNDQ3NzIgMiA3VjEzQzIgMTMuNTUyMyAyLjQ0NzcyIDE0IDMgMTRIMTJDMTIuNTUyMyAxNCAxMyAxMy41NTIzIDEzIDEzVjdDMTMgNi40NDc3MSAxMi41NTIzIDYgMTIgNkgxMVYzLjYzNjAxQzExIDIuNTgxMzUgMTAuNzA2NSAxLjY2MTY3IDEwLjA4NzggMS4wMDIxQzkuNDY0NzcgMC4zMzc4NzEgOC41NzA2MSAwIDcuNDk4NiAwWk0zIDdIMTJWMTNIM1Y3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0seG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTkgMy42MzYwMUM5IDIuNzYwNDQgOS4yNDIwNyAyLjExMjExIDkuNjQxNTQgMS42ODYyM0MxMC4wMzY2IDEuMjY1MDIgMTAuNjQzMiAxIDExLjUwMTQgMUMxMi40NDg1IDEgMTMuMDgzOSAxLjMwNTUyIDEzLjQ3MjIgMS44MDYzNkMxMy44MDMxIDIuMjMzMTIgMTQgMi44NDMxMyAxNCAzLjYzMzI1SDE1QzE1IDIuNjgyNDIgMTQuNzYyNiAxLjgzODU2IDE0LjI2MjUgMS4xOTM2MUMxMy42Mzg5IDAuMzg5NDMgMTIuNjc0MyAwIDExLjUwMTQgMEMxMC40Mjk0IDAgOS41MzUyMyAwLjMzNzg3MSA4LjkxMjE4IDEuMDAyMUM4LjI5MzUxIDEuNjYxNjcgOCAyLjU4MTM1IDggMy42MzYwMVY2SDFDMC40NDc3MTUgNiAwIDYuNDQ3NzIgMCA3VjEzQzAgMTMuNTUyMyAwLjQ0NzcxNSAxNCAxIDE0SDEwQzEwLjU1MjMgMTQgMTEgMTMuNTUyMyAxMSAxM1Y3QzExIDYuNDQ3NzIgMTAuNTUyMyA2IDEwIDZIOVYzLjYzNjAxWk0xIDdIMTBWMTNIMVY3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sa249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuMzUzNTUgMS44NTM1NUMzLjU0ODgyIDEuNjU4MjkgMy41NDg4MiAxLjM0MTcxIDMuMzUzNTUgMS4xNDY0NUMzLjE1ODI5IDAuOTUxMTg0IDIuODQxNzEgMC45NTExODQgMi42NDY0NSAxLjE0NjQ1TDAuNjQ2NDQ3IDMuMTQ2NDVDMC40NTExODQgMy4zNDE3MSAwLjQ1MTE4NCAzLjY1ODI5IDAuNjQ2NDQ3IDMuODUzNTVMMi42NDY0NSA1Ljg1MzU1QzIuODQxNzEgNi4wNDg4MiAzLjE1ODI5IDYuMDQ4ODIgMy4zNTM1NSA1Ljg1MzU1QzMuNTQ4ODIgNS42NTgyOSAzLjU0ODgyIDUuMzQxNzEgMy4zNTM1NSA1LjE0NjQ1TDIuMjA3MTEgNEg5LjVDMTEuNDMzIDQgMTMgNS41NjcgMTMgNy41QzEzIDcuNzc2MTQgMTMuMjIzOSA4IDEzLjUgOEMxMy43NzYxIDggMTQgNy43NzYxNCAxNCA3LjVDMTQgNS4wMTQ3MiAxMS45ODUzIDMgOS41IDNIMi4yMDcxMUwzLjM1MzU1IDEuODUzNTVaTTIgNy41QzIgNy4yMjM4NiAxLjc3NjE0IDcgMS41IDdDMS4yMjM4NiA3IDEgNy4yMjM4NiAxIDcuNUMxIDkuOTg1MjggMy4wMTQ3MiAxMiA1LjUgMTJIMTIuNzkyOUwxMS42NDY0IDEzLjE0NjRDMTEuNDUxMiAxMy4zNDE3IDExLjQ1MTIgMTMuNjU4MyAxMS42NDY0IDEzLjg1MzZDMTEuODQxNyAxNC4wNDg4IDEyLjE1ODMgMTQuMDQ4OCAxMi4zNTM2IDEzLjg1MzZMMTQuMzUzNiAxMS44NTM2QzE0LjU0ODggMTEuNjU4MyAxNC41NDg4IDExLjM0MTcgMTQuMzUzNiAxMS4xNDY0TDEyLjM1MzYgOS4xNDY0NUMxMi4xNTgzIDguOTUxMTggMTEuODQxNyA4Ljk1MTE4IDExLjY0NjQgOS4xNDY0NUMxMS40NTEyIDkuMzQxNzEgMTEuNDUxMiA5LjY1ODI5IDExLjY0NjQgOS44NTM1NUwxMi43OTI5IDExSDUuNUMzLjU2NyAxMSAyIDkuNDMzIDIgNy41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sU249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEzLjkgMC40OTk5NzZDMTMuOSAwLjI3OTA2MiAxMy43MjA5IDAuMDk5OTc1NiAxMy41IDAuMDk5OTc1NkMxMy4yNzkxIDAuMDk5OTc1NiAxMy4xIDAuMjc5MDYyIDEzLjEgMC40OTk5NzZWMS4wOTk5OEgxMi41QzEyLjI3OTEgMS4wOTk5OCAxMi4xIDEuMjc5MDYgMTIuMSAxLjQ5OTk4QzEyLjEgMS43MjA4OSAxMi4yNzkxIDEuODk5OTggMTIuNSAxLjg5OTk4SDEzLjFWMi40OTk5OEMxMy4xIDIuNzIwODkgMTMuMjc5MSAyLjg5OTk4IDEzLjUgMi44OTk5OEMxMy43MjA5IDIuODk5OTggMTMuOSAyLjcyMDg5IDEzLjkgMi40OTk5OFYxLjg5OTk4SDE0LjVDMTQuNzIwOSAxLjg5OTk4IDE0LjkgMS43MjA4OSAxNC45IDEuNDk5OThDMTQuOSAxLjI3OTA2IDE0LjcyMDkgMS4wOTk5OCAxNC41IDEuMDk5OThIMTMuOVYwLjQ5OTk3NlpNMTEuODUzNiAzLjE0NjQyQzEyLjA0ODggMy4zNDE2OCAxMi4wNDg4IDMuNjU4MjYgMTEuODUzNiAzLjg1MzUzTDEwLjg1MzYgNC44NTM1M0MxMC42NTgzIDUuMDQ4NzkgMTAuMzQxNyA1LjA0ODc5IDEwLjE0NjUgNC44NTM1M0M5Ljk1MTIgNC42NTgyNyA5Ljk1MTIgNC4zNDE2OSAxMC4xNDY1IDQuMTQ2NDJMMTEuMTQ2NCAzLjE0NjQzQzExLjM0MTcgMi45NTExNiAxMS42NTgzIDIuOTUxMTYgMTEuODUzNiAzLjE0NjQyWk05Ljg1MzU3IDUuMTQ2NDJDMTAuMDQ4OCA1LjM0MTY4IDEwLjA0ODggNS42NTgyNyA5Ljg1MzU3IDUuODUzNTNMMi44NTM1NSAxMi44NTM1QzIuNjU4MjkgMTMuMDQ4OCAyLjM0MTcxIDEzLjA0ODggMi4xNDY0NSAxMi44NTM1QzEuOTUxMTggMTIuNjU4MyAxLjk1MTE4IDEyLjM0MTcgMi4xNDY0NSAxMi4xNDY0TDkuMTQ2NDYgNS4xNDY0MkM5LjM0MTcyIDQuOTUxMTYgOS42NTgzMSA0Ljk1MTE2IDkuODUzNTcgNS4xNDY0MlpNMTMuNSA1LjA5OTk4QzEzLjcyMDkgNS4wOTk5OCAxMy45IDUuMjc5MDYgMTMuOSA1LjQ5OTk4VjYuMDk5OThIMTQuNUMxNC43MjA5IDYuMDk5OTggMTQuOSA2LjI3OTA2IDE0LjkgNi40OTk5OEMxNC45IDYuNzIwODkgMTQuNzIwOSA2Ljg5OTk4IDE0LjUgNi44OTk5OEgxMy45VjcuNDk5OThDMTMuOSA3LjcyMDg5IDEzLjcyMDkgNy44OTk5OCAxMy41IDcuODk5OThDMTMuMjc5MSA3Ljg5OTk4IDEzLjEgNy43MjA4OSAxMy4xIDcuNDk5OThWNi44OTk5OEgxMi41QzEyLjI3OTEgNi44OTk5OCAxMi4xIDYuNzIwODkgMTIuMSA2LjQ5OTk4QzEyLjEgNi4yNzkwNiAxMi4yNzkxIDYuMDk5OTggMTIuNSA2LjA5OTk4SDEzLjFWNS40OTk5OEMxMy4xIDUuMjc5MDYgMTMuMjc5MSA1LjA5OTk4IDEzLjUgNS4wOTk5OFpNOC45MDAwMiAwLjQ5OTk3NkM4LjkwMDAyIDAuMjc5MDYyIDguNzIwOTMgMC4wOTk5NzU2IDguNTAwMDIgMC4wOTk5NzU2QzguMjc5MSAwLjA5OTk3NTYgOC4xMDAwMiAwLjI3OTA2MiA4LjEwMDAyIDAuNDk5OTc2VjEuMDk5OThINy41MDAwMkM3LjI3OTEgMS4wOTk5OCA3LjEwMDAyIDEuMjc5MDYgNy4xMDAwMiAxLjQ5OTk4QzcuMTAwMDIgMS43MjA4OSA3LjI3OTEgMS44OTk5OCA3LjUwMDAyIDEuODk5OThIOC4xMDAwMlYyLjQ5OTk4QzguMTAwMDIgMi43MjA4OSA4LjI3OTEgMi44OTk5OCA4LjUwMDAyIDIuODk5OThDOC43MjA5MyAyLjg5OTk4IDguOTAwMDIgMi43MjA4OSA4LjkwMDAyIDIuNDk5OThWMS44OTk5OEg5LjUwMDAyQzkuNzIwOTMgMS44OTk5OCA5LjkwMDAyIDEuNzIwODkgOS45MDAwMiAxLjQ5OTk4QzkuOTAwMDIgMS4yNzkwNiA5LjcyMDkzIDEuMDk5OTggOS41MDAwMiAxLjA5OTk4SDguOTAwMDJWMC40OTk5NzZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxPbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTAgNi41QzEwIDguNDMzIDguNDMzIDEwIDYuNSAxMEM0LjU2NyAxMCAzIDguNDMzIDMgNi41QzMgNC41NjcgNC41NjcgMyA2LjUgM0M4LjQzMyAzIDEwIDQuNTY3IDEwIDYuNVpNOS4zMDg4NCAxMC4wMTU5QzguNTM5MDEgMTAuNjMxOCA3LjU2MjUxIDExIDYuNSAxMUM0LjAxNDcyIDExIDIgOC45ODUyOCAyIDYuNUMyIDQuMDE0NzIgNC4wMTQ3MiAyIDYuNSAyQzguOTg1MjggMiAxMSA0LjAxNDcyIDExIDYuNUMxMSA3LjU2MjUxIDEwLjYzMTggOC41MzkwMSAxMC4wMTU5IDkuMzA4ODRMMTIuODUzNiAxMi4xNDY0QzEzLjA0ODggMTIuMzQxNyAxMy4wNDg4IDEyLjY1ODMgMTIuODUzNiAxMi44NTM2QzEyLjY1ODMgMTMuMDQ4OCAxMi4zNDE3IDEzLjA0ODggMTIuMTQ2NCAxMi44NTM2TDkuMzA4ODQgMTAuMDE1OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE1uPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjQ5OTg4IDIuMDAwMTJDMS43NzYwMiAyLjAwMDEyIDEuOTk5ODggMS43NzYyNiAxLjk5OTg4IDEuNTAwMTJDMS45OTk4OCAxLjIyMzk4IDEuNzc2MDIgMS4wMDAxMiAxLjQ5OTg4IDEuMDAwMTJDMS4yMjM3NCAxLjAwMDEyIDAuOTk5ODc4IDEuMjIzOTggMC45OTk4NzggMS41MDAxMkMwLjk5OTg3OCAxLjc3NjI2IDEuMjIzNzQgMi4wMDAxMiAxLjQ5OTg4IDIuMDAwMTJaTTQuNDk5ODggMi4wMDAxMkM0Ljc3NjAyIDIuMDAwMTIgNC45OTk4OCAxLjc3NjI2IDQuOTk5ODggMS41MDAxMkM0Ljk5OTg4IDEuMjIzOTggNC43NzYwMiAxLjAwMDEyIDQuNDk5ODggMS4wMDAxMkM0LjIyMzc0IDEuMDAwMTIgMy45OTk4OCAxLjIyMzk4IDMuOTk5ODggMS41MDAxMkMzLjk5OTg4IDEuNzc2MjYgNC4yMjM3NCAyLjAwMDEyIDQuNDk5ODggMi4wMDAxMlpNNy45OTk4OCAxLjUwMDEyQzcuOTk5ODggMS43NzYyNiA3Ljc3NjAyIDIuMDAwMTIgNy40OTk4OCAyLjAwMDEyQzcuMjIzNzQgMi4wMDAxMiA2Ljk5OTg4IDEuNzc2MjYgNi45OTk4OCAxLjUwMDEyQzYuOTk5ODggMS4yMjM5OCA3LjIyMzc0IDEuMDAwMTIgNy40OTk4OCAxLjAwMDEyQzcuNzc2MDIgMS4wMDAxMiA3Ljk5OTg4IDEuMjIzOTggNy45OTk4OCAxLjUwMDEyWk0xMC40OTk5IDIuMDAwMTJDMTAuNzc2IDIuMDAwMTIgMTAuOTk5OSAxLjc3NjI2IDEwLjk5OTkgMS41MDAxMkMxMC45OTk5IDEuMjIzOTggMTAuNzc2IDEuMDAwMTIgMTAuNDk5OSAxLjAwMDEyQzEwLjIyMzcgMS4wMDAxMiA5Ljk5OTg4IDEuMjIzOTggOS45OTk4OCAxLjUwMDEyQzkuOTk5ODggMS43NzYyNiAxMC4yMjM3IDIuMDAwMTIgMTAuNDk5OSAyLjAwMDEyWk0xMy45OTk5IDEuNTAwMTJDMTMuOTk5OSAxLjc3NjI2IDEzLjc3NiAyLjAwMDEyIDEzLjQ5OTkgMi4wMDAxMkMxMy4yMjM3IDIuMDAwMTIgMTIuOTk5OSAxLjc3NjI2IDEyLjk5OTkgMS41MDAxMkMxMi45OTk5IDEuMjIzOTggMTMuMjIzNyAxLjAwMDEyIDEzLjQ5OTkgMS4wMDAxMkMxMy43NzYgMS4wMDAxMiAxMy45OTk5IDEuMjIzOTggMTMuOTk5OSAxLjUwMDEyWk0xLjQ5OTg4IDE0LjAwMDFDMS43NzYwMiAxNC4wMDAxIDEuOTk5ODggMTMuNzc2MyAxLjk5OTg4IDEzLjUwMDFDMS45OTk4OCAxMy4yMjQgMS43NzYwMiAxMy4wMDAxIDEuNDk5ODggMTMuMDAwMUMxLjIyMzc0IDEzLjAwMDEgMC45OTk4NzggMTMuMjI0IDAuOTk5ODc4IDEzLjUwMDFDMC45OTk4NzggMTMuNzc2MyAxLjIyMzc0IDE0LjAwMDEgMS40OTk4OCAxNC4wMDAxWk0xLjk5OTg4IDEwLjUwMDFDMS45OTk4OCAxMC43NzYzIDEuNzc2MDIgMTEuMDAwMSAxLjQ5OTg4IDExLjAwMDFDMS4yMjM3NCAxMS4wMDAxIDAuOTk5ODc4IDEwLjc3NjMgMC45OTk4NzggMTAuNTAwMUMwLjk5OTg3OCAxMC4yMjQgMS4yMjM3NCAxMC4wMDAxIDEuNDk5ODggMTAuMDAwMUMxLjc3NjAyIDEwLjAwMDEgMS45OTk4OCAxMC4yMjQgMS45OTk4OCAxMC41MDAxWk0xLjQ5OTg4IDguMDAwMTJDMS43NzYwMiA4LjAwMDEyIDEuOTk5ODggNy43NzYyNiAxLjk5OTg4IDcuNTAwMTJDMS45OTk4OCA3LjIyMzk4IDEuNzc2MDIgNy4wMDAxMiAxLjQ5OTg4IDcuMDAwMTJDMS4yMjM3NCA3LjAwMDEyIDAuOTk5ODc4IDcuMjIzOTggMC45OTk4NzggNy41MDAxMkMwLjk5OTg3OCA3Ljc3NjI2IDEuMjIzNzQgOC4wMDAxMiAxLjQ5OTg4IDguMDAwMTJaTTEuOTk5ODggNC41MDAxMkMxLjk5OTg4IDQuNzc2MjYgMS43NzYwMiA1LjAwMDEyIDEuNDk5ODggNS4wMDAxMkMxLjIyMzc0IDUuMDAwMTIgMC45OTk4NzggNC43NzYyNiAwLjk5OTg3OCA0LjUwMDEyQzAuOTk5ODc4IDQuMjIzOTggMS4yMjM3NCA0LjAwMDEyIDEuNDk5ODggNC4wMDAxMkMxLjc3NjAyIDQuMDAwMTIgMS45OTk4OCA0LjIyMzk4IDEuOTk5ODggNC41MDAxMlpNMTMuNDk5OSAxMS4wMDAxQzEzLjc3NiAxMS4wMDAxIDEzLjk5OTkgMTAuNzc2MyAxMy45OTk5IDEwLjUwMDFDMTMuOTk5OSAxMC4yMjQgMTMuNzc2IDEwLjAwMDEgMTMuNDk5OSAxMC4wMDAxQzEzLjIyMzcgMTAuMDAwMSAxMi45OTk5IDEwLjIyNCAxMi45OTk5IDEwLjUwMDFDMTIuOTk5OSAxMC43NzYzIDEzLjIyMzcgMTEuMDAwMSAxMy40OTk5IDExLjAwMDFaTTEzLjk5OTkgNy41MDAxMkMxMy45OTk5IDcuNzc2MjYgMTMuNzc2IDguMDAwMTIgMTMuNDk5OSA4LjAwMDEyQzEzLjIyMzcgOC4wMDAxMiAxMi45OTk5IDcuNzc2MjYgMTIuOTk5OSA3LjUwMDEyQzEyLjk5OTkgNy4yMjM5OCAxMy4yMjM3IDcuMDAwMTIgMTMuNDk5OSA3LjAwMDEyQzEzLjc3NiA3LjAwMDEyIDEzLjk5OTkgNy4yMjM5OCAxMy45OTk5IDcuNTAwMTJaTTEzLjQ5OTkgNS4wMDAxMkMxMy43NzYgNS4wMDAxMiAxMy45OTk5IDQuNzc2MjYgMTMuOTk5OSA0LjUwMDEyQzEzLjk5OTkgNC4yMjM5OCAxMy43NzYgNC4wMDAxMiAxMy40OTk5IDQuMDAwMTJDMTMuMjIzNyA0LjAwMDEyIDEyLjk5OTkgNC4yMjM5OCAxMi45OTk5IDQuNTAwMTJDMTIuOTk5OSA0Ljc3NjI2IDEzLjIyMzcgNS4wMDAxMiAxMy40OTk5IDUuMDAwMTJaTTQuOTk5ODggMTMuNTAwMUM0Ljk5OTg4IDEzLjc3NjMgNC43NzYwMiAxNC4wMDAxIDQuNDk5ODggMTQuMDAwMUM0LjIyMzc0IDE0LjAwMDEgMy45OTk4OCAxMy43NzYzIDMuOTk5ODggMTMuNTAwMUMzLjk5OTg4IDEzLjIyNCA0LjIyMzc0IDEzLjAwMDEgNC40OTk4OCAxMy4wMDAxQzQuNzc2MDIgMTMuMDAwMSA0Ljk5OTg4IDEzLjIyNCA0Ljk5OTg4IDEzLjUwMDFaTTcuNDk5ODggMTQuMDAwMUM3Ljc3NjAyIDE0LjAwMDEgNy45OTk4OCAxMy43NzYzIDcuOTk5ODggMTMuNTAwMUM3Ljk5OTg4IDEzLjIyNCA3Ljc3NjAyIDEzLjAwMDEgNy40OTk4OCAxMy4wMDAxQzcuMjIzNzQgMTMuMDAwMSA2Ljk5OTg4IDEzLjIyNCA2Ljk5OTg4IDEzLjUwMDFDNi45OTk4OCAxMy43NzYzIDcuMjIzNzQgMTQuMDAwMSA3LjQ5OTg4IDE0LjAwMDFaTTEwLjk5OTkgMTMuNTAwMUMxMC45OTk5IDEzLjc3NjMgMTAuNzc2IDE0LjAwMDEgMTAuNDk5OSAxNC4wMDAxQzEwLjIyMzcgMTQuMDAwMSA5Ljk5OTg4IDEzLjc3NjMgOS45OTk4OCAxMy41MDAxQzkuOTk5ODggMTMuMjI0IDEwLjIyMzcgMTMuMDAwMSAxMC40OTk5IDEzLjAwMDFDMTAuNzc2IDEzLjAwMDEgMTAuOTk5OSAxMy4yMjQgMTAuOTk5OSAxMy41MDAxWk0xMy40OTk5IDE0LjAwMDFDMTMuNzc2IDE0LjAwMDEgMTMuOTk5OSAxMy43NzYzIDEzLjk5OTkgMTMuNTAwMUMxMy45OTk5IDEzLjIyNCAxMy43NzYgMTMuMDAwMSAxMy40OTk5IDEzLjAwMDFDMTMuMjIzNyAxMy4wMDAxIDEyLjk5OTkgMTMuMjI0IDEyLjk5OTkgMTMuNTAwMUMxMi45OTk5IDEzLjc3NjMgMTMuMjIzNyAxNC4wMDAxIDEzLjQ5OTkgMTQuMDAwMVpNMy45OTk4OCA1LjAwMDEyQzMuOTk5ODggNC40NDc4NCA0LjQ0NzU5IDQuMDAwMTIgNC45OTk4OCA0LjAwMDEySDkuOTk5ODhDMTAuNTUyMiA0LjAwMDEyIDEwLjk5OTkgNC40NDc4NCAxMC45OTk5IDUuMDAwMTJWMTAuMDAwMUMxMC45OTk5IDEwLjU1MjQgMTAuNTUyMiAxMS4wMDAxIDkuOTk5ODggMTEuMDAwMUg0Ljk5OTg4QzQuNDQ3NTkgMTEuMDAwMSAzLjk5OTg4IDEwLjU1MjQgMy45OTk4OCAxMC4wMDAxVjUuMDAwMTJaTTQuOTk5ODggNS4wMDAxMkg5Ljk5OTg4VjEwLjAwMDFINC45OTk4OFY1LjAwMDEyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEgMkgxNFYxM0gxTDEgMlpNMCAyQzAgMS40NDc3MiAwLjQ0NzcxNSAxIDEgMUgxNEMxNC41NTIzIDEgMTUgMS40NDc3MiAxNSAyVjEzQzE1IDEzLjU1MjMgMTQuNTUyMyAxNCAxNCAxNEgxQzAuNDQ3NzE1IDE0IDAgMTMuNTUyMyAwIDEzVjJaTTQuODc1IDcuNUM0Ljg3NSA2LjA1MDI1IDYuMDUwMjUgNC44NzUgNy41IDQuODc1QzguOTQ5NzUgNC44NzUgMTAuMTI1IDYuMDUwMjUgMTAuMTI1IDcuNUMxMC4xMjUgOC45NDk3NSA4Ljk0OTc1IDEwLjEyNSA3LjUgMTAuMTI1QzYuMDUwMjUgMTAuMTI1IDQuODc1IDguOTQ5NzUgNC44NzUgNy41Wk03LjUgMy44NzVDNS40OTc5NyAzLjg3NSAzLjg3NSA1LjQ5Nzk3IDMuODc1IDcuNUMzLjg3NSA5LjUwMjAzIDUuNDk3OTcgMTEuMTI1IDcuNSAxMS4xMjVDOS41MDIwMyAxMS4xMjUgMTEuMTI1IDkuNTAyMDMgMTEuMTI1IDcuNUMxMS4xMjUgNS40OTc5NyA5LjUwMjAzIDMuODc1IDcuNSAzLjg3NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LF9uPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xIDFDMC40NDc3MTUgMSAwIDEuNDQ3NzIgMCAyVjEzQzAgMTMuNTUyMyAwLjQ0NzcxNSAxNCAxIDE0SDE0QzE0LjU1MjMgMTQgMTUgMTMuNTUyMyAxNSAxM1YyQzE1IDEuNDQ3NzIgMTQuNTUyMyAxIDE0IDFIMVpNNy41IDEwLjYyNUM5LjIyNTg5IDEwLjYyNSAxMC42MjUgOS4yMjU4OSAxMC42MjUgNy41QzEwLjYyNSA1Ljc3NDExIDkuMjI1ODkgNC4zNzUgNy41IDQuMzc1QzUuNzc0MTEgNC4zNzUgNC4zNzUgNS43NzQxMSA0LjM3NSA3LjVDNC4zNzUgOS4yMjU4OSA1Ljc3NDExIDEwLjYyNSA3LjUgMTAuNjI1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuMjUgNy41QzIuMjUgNy4yMjM4NiAyLjQ3Mzg2IDcgMi43NSA3SDEyLjI1QzEyLjUyNjEgNyAxMi43NSA3LjIyMzg2IDEyLjc1IDcuNUMxMi43NSA3Ljc3NjE0IDEyLjUyNjEgOCAxMi4yNSA4SDIuNzVDMi40NzM4NiA4IDIuMjUgNy43NzYxNCAyLjI1IDcuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEVuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTkxIDAuODc2ODkyQzMuODQyMjIgMC44NzY4OTIgMC44NzcwNzUgMy44NDIwNCAwLjg3NzA3NSA3LjQ5OTcyQzAuODc3MDc1IDExLjE1NzQgMy44NDIyMiAxNC4xMjI2IDcuNDk5OTEgMTQuMTIyNkMxMS4xNTc2IDE0LjEyMjYgMTQuMTIyNyAxMS4xNTc0IDE0LjEyMjcgNy40OTk3MkMxNC4xMjI3IDMuODQyMDQgMTEuMTU3NiAwLjg3Njg5MiA3LjQ5OTkxIDAuODc2ODkyWk0xLjgyNzA3IDcuNDk5NzJDMS44MjcwNyA0LjM2NjcxIDQuMzY2ODkgMS44MjY4OSA3LjQ5OTkxIDEuODI2ODlDMTAuNjMyOSAxLjgyNjg5IDEzLjE3MjcgNC4zNjY3MSAxMy4xNzI3IDcuNDk5NzJDMTMuMTcyNyAxMC42MzI3IDEwLjYzMjkgMTMuMTcyNiA3LjQ5OTkxIDEzLjE3MjZDNC4zNjY4OSAxMy4xNzI2IDEuODI3MDcgMTAuNjMyNyAxLjgyNzA3IDcuNDk5NzJaTTQuNTAwMDMgN0M0LjIyMzg5IDcgNC4wMDAwMyA3LjIyMzg2IDQuMDAwMDMgNy41QzQuMDAwMDMgNy43NzYxNCA0LjIyMzg5IDggNC41MDAwMyA4SDEwLjVDMTAuNzc2MiA4IDExIDcuNzc2MTQgMTEgNy41QzExIDcuMjIzODYgMTAuNzc2MiA3IDEwLjUgN0g0LjUwMDAzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sam49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuMTQ5MjEgMy45OTk5NkMyLjE0OTIxIDIuOTc3NzggMi45Nzc4NCAyLjE0OTE1IDQuMDAwMDIgMi4xNDkxNUM1LjAyMjE5IDIuMTQ5MTUgNS44NTA4MyAyLjk3Nzc4IDUuODUwODMgMy45OTk5NkM1Ljg1MDgzIDUuMDIyMTMgNS4wMjIxOSA1Ljg1MDc3IDQuMDAwMDIgNS44NTA3N0MyLjk3Nzg0IDUuODUwNzcgMi4xNDkyMSA1LjAyMjEzIDIuMTQ5MjEgMy45OTk5NlpNNC4wMDAwMiAxLjI0OTE1QzIuNDgwNzkgMS4yNDkxNSAxLjI0OTIxIDIuNDgwNzMgMS4yNDkyMSAzLjk5OTk2QzEuMjQ5MjEgNS41MTkxOSAyLjQ4MDc5IDYuNzUwNzcgNC4wMDAwMiA2Ljc1MDc3QzUuNTE5MjUgNi43NTA3NyA2Ljc1MDgzIDUuNTE5MTkgNi43NTA4MyAzLjk5OTk2QzYuNzUwODMgMi40ODA3MyA1LjUxOTI1IDEuMjQ5MTUgNC4wMDAwMiAxLjI0OTE1Wk01LjgyMDM0IDExLjAwMDFMMi40OTk5OCAxMi44MzY5VjkuMTYzMzFMNS44MjAzNCAxMS4wMDAxWk0yLjYzODgzIDguMjExNTlDMi4xNzIyOCA3Ljk1MzUgMS41OTk5OCA4LjI5MDkzIDEuNTk5OTggOC44MjQxMVYxMy4xNzYxQzEuNTk5OTggMTMuNzA5MyAyLjE3MjI4IDE0LjA0NjcgMi42Mzg4MyAxMy43ODg2TDYuNTcyMzUgMTEuNjEyNkM3LjA1Mzg5IDExLjM0NjIgNy4wNTM4OSAxMC42NTQgNi41NzIzNSAxMC4zODc2TDIuNjM4ODMgOC4yMTE1OVpNOC4zMDAwMSA5LjAwMDAzQzguMzAwMDEgOC42MTM0MyA4LjYxMzQxIDguMzAwMDMgOS4wMDAwMSA4LjMwMDAzSDEzQzEzLjM4NjYgOC4zMDAwMyAxMy43IDguNjEzNDMgMTMuNyA5LjAwMDAzVjEzQzEzLjcgMTMuMzg2NiAxMy4zODY2IDEzLjcgMTMgMTMuN0g5LjAwMDAxQzguNjEzNDEgMTMuNyA4LjMwMDAxIDEzLjM4NjYgOC4zMDAwMSAxM1Y5LjAwMDAzWk05LjIwMDAxIDkuMjAwMDNWMTIuOEgxMi44VjkuMjAwMDNIOS4yMDAwMVpNMTMuNDQzMiAyLjE5MzExQzEzLjYxODkgMi4wMTczNyAxMy42MTg5IDEuNzMyNDUgMTMuNDQzMiAxLjU1NjcxQzEzLjI2NzUgMS4zODA5OCAxMi45ODI2IDEuMzgwOTggMTIuODA2OCAxLjU1NjcxTDExIDMuMzYzNTNMOS4xOTMyMSAxLjU1Njc0QzkuMDE3NDggMS4zODEgOC43MzI1NSAxLjM4MSA4LjU1NjgyIDEuNTU2NzRDOC4zODEwOCAxLjczMjQ3IDguMzgxMDggMi4wMTc0IDguNTU2ODIgMi4xOTMxM0wxMC4zNjM2IDMuOTk5OTJMOC41NTY4MiA1LjgwNjcxQzguMzgxMDggNS45ODI0NSA4LjM4MTA4IDYuMjY3MzcgOC41NTY4MiA2LjQ0MzExQzguNzMyNTUgNi42MTg4NSA5LjAxNzQ4IDYuNjE4ODUgOS4xOTMyMSA2LjQ0MzExTDExIDQuNjM2MzJMMTIuODA2OCA2LjQ0MzE0QzEyLjk4MjYgNi42MTg4NyAxMy4yNjc1IDYuNjE4ODcgMTMuNDQzMiA2LjQ0MzE0QzEzLjYxODkgNi4yNjc0IDEzLjYxODkgNS45ODI0NyAxMy40NDMyIDUuODA2NzRMMTEuNjM2NCAzLjk5OTkyTDEzLjQ0MzIgMi4xOTMxMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFJuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjUgM0M0LjY3MTU3IDMgNCAzLjY3MTU3IDQgNC41QzQgNS4zMjg0MyA0LjY3MTU3IDYgNS41IDZDNi4zMjg0MyA2IDcgNS4zMjg0MyA3IDQuNUM3IDMuNjcxNTcgNi4zMjg0MyAzIDUuNSAzWk0zIDVDMy4wMTY3MSA1IDMuMDMzMjMgNC45OTkxOCAzLjA0OTUyIDQuOTk3NThDMy4yODAyMiA2LjEzOTkgNC4yODk2NyA3IDUuNSA3QzYuNzEwMzMgNyA3LjcxOTc4IDYuMTM5OSA3Ljk1MDQ4IDQuOTk3NThDNy45NjY3NyA0Ljk5OTE4IDcuOTgzMjkgNSA4IDVIMTMuNUMxMy43NzYxIDUgMTQgNC43NzYxNCAxNCA0LjVDMTQgNC4yMjM4NiAxMy43NzYxIDQgMTMuNSA0SDhDNy45ODMyOSA0IDcuOTY2NzcgNC4wMDA4MiA3Ljk1MDQ4IDQuMDAyNDJDNy43MTk3OCAyLjg2MDA5IDYuNzEwMzMgMiA1LjUgMkM0LjI4OTY3IDIgMy4yODAyMiAyLjg2MDA5IDMuMDQ5NTIgNC4wMDI0MkMzLjAzMzIzIDQuMDAwODIgMy4wMTY3MSA0IDMgNEgxLjVDMS4yMjM4NiA0IDEgNC4yMjM4NiAxIDQuNUMxIDQuNzc2MTQgMS4yMjM4NiA1IDEuNSA1SDNaTTExLjk1MDUgMTAuOTk3NkMxMS43MTk4IDEyLjEzOTkgMTAuNzEwMyAxMyA5LjUgMTNDOC4yODk2NyAxMyA3LjI4MDIyIDEyLjEzOTkgNy4wNDk1MiAxMC45OTc2QzcuMDMzMjMgMTAuOTk5MiA3LjAxNjcxIDExIDcgMTFIMS41QzEuMjIzODYgMTEgMSAxMC43NzYxIDEgMTAuNUMxIDEwLjIyMzkgMS4yMjM4NiAxMCAxLjUgMTBIN0M3LjAxNjcxIDEwIDcuMDMzMjMgMTAuMDAwOCA3LjA0OTUyIDEwLjAwMjRDNy4yODAyMiA4Ljg2MDEgOC4yODk2NyA4IDkuNSA4QzEwLjcxMDMgOCAxMS43MTk4IDguODYwMSAxMS45NTA1IDEwLjAwMjRDMTEuOTY2OCAxMC4wMDA4IDExLjk4MzMgMTAgMTIgMTBIMTMuNUMxMy43NzYxIDEwIDE0IDEwLjIyMzkgMTQgMTAuNUMxNCAxMC43NzYxIDEzLjc3NjEgMTEgMTMuNSAxMUgxMkMxMS45ODMzIDExIDExLjk2NjggMTAuOTk5MiAxMS45NTA1IDEwLjk5NzZaTTggMTAuNUM4IDkuNjcxNTcgOC42NzE1NyA5IDkuNSA5QzEwLjMyODQgOSAxMSA5LjY3MTU3IDExIDEwLjVDMTEgMTEuMzI4NCAxMC4zMjg0IDEyIDkuNSAxMkM4LjY3MTU3IDEyIDggMTEuMzI4NCA4IDEwLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxJbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNSAxLjVDNSAxLjIyMzg2IDQuNzc2MTQgMSA0LjUgMUM0LjIyMzg2IDEgNCAxLjIyMzg2IDQgMS41TDQgN0M0IDcuMDE2NzEgNC4wMDA4MiA3LjAzMzIzIDQuMDAyNDIgNy4wNDk1MkMyLjg2MDA5IDcuMjgwMjIgMiA4LjI4OTY3IDIgOS41QzIgMTAuNzEwMyAyLjg2MDA5IDExLjcxOTggNC4wMDI0MiAxMS45NTA1QzQuMDAwODIgMTEuOTY2OCA0IDExLjk4MzMgNCAxMlYxMy41QzQgMTMuNzc2MSA0LjIyMzg2IDE0IDQuNSAxNEM0Ljc3NjE0IDE0IDUgMTMuNzc2MSA1IDEzLjVWMTJDNSAxMS45ODMzIDQuOTk5MTggMTEuOTY2OCA0Ljk5NzU4IDExLjk1MDVDNi4xMzk5IDExLjcxOTggNyAxMC43MTAzIDcgOS41QzcgOC4yODk2NyA2LjEzOTkgNy4yODAyMiA0Ljk5NzU4IDcuMDQ5NTJDNC45OTkxOCA3LjAzMzIzIDUgNy4wMTY3MSA1IDdMNSAxLjVaTTExIDEuNUMxMSAxLjIyMzg2IDEwLjc3NjEgMSAxMC41IDFDMTAuMjIzOSAxIDEwIDEuMjIzODYgMTAgMS41VjNDMTAgMy4wMTY3MSAxMC4wMDA4IDMuMDMzMjMgMTAuMDAyNCAzLjA0OTUyQzguODYwMSAzLjI4MDIyIDggNC4yODk2NyA4IDUuNUM4IDYuNzEwMzMgOC44NjAxIDcuNzE5NzggMTAuMDAyNCA3Ljk1MDQ4QzEwLjAwMDggNy45NjY3NyAxMCA3Ljk4MzI5IDEwIDhWMTMuNUMxMCAxMy43NzYxIDEwLjIyMzkgMTQgMTAuNSAxNEMxMC43NzYxIDE0IDExIDEzLjc3NjEgMTEgMTMuNVY4QzExIDcuOTgzMjkgMTAuOTk5MiA3Ljk2Njc3IDEwLjk5NzYgNy45NTA0OEMxMi4xMzk5IDcuNzE5NzggMTMgNi43MTAzMyAxMyA1LjVDMTMgNC4yODk2NyAxMi4xMzk5IDMuMjgwMjIgMTAuOTk3NiAzLjA0OTUyQzEwLjk5OTIgMy4wMzMyMyAxMSAzLjAxNjcxIDExIDNWMS41Wk00LjUgOEMzLjY3MTU3IDggMyA4LjY3MTU3IDMgOS41QzMgMTAuMzI4NCAzLjY3MTU3IDExIDQuNSAxMUM1LjMyODQzIDExIDYgMTAuMzI4NCA2IDkuNUM2IDguNjcxNTcgNS4zMjg0MyA4IDQuNSA4Wk05IDUuNUM5IDQuNjcxNTcgOS42NzE1NyA0IDEwLjUgNEMxMS4zMjg0IDQgMTIgNC42NzE1NyAxMiA1LjVDMTIgNi4zMjg0MyAxMS4zMjg0IDcgMTAuNSA3QzkuNjcxNTcgNyA5IDYuMzI4NDMgOSA1LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxWbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy4yNTkyNSAzLjE2NjY3TDQuMzcwMzYgNS4zMzMzM1YxTDcuMjU5MjUgMy4xNjY2N1pNMSA4LjIyMjIyTDMuODg4ODkgNi4wNTU1NUwxIDMuODg4ODlWOC4yMjIyMlpNMSAxNEwzLjg4ODg5IDExLjgzMzNMMSA5LjY2NjY2VjE0Wk03Ljc0MDcyIDguMjIyMjJMMTAuNjI5NiA2LjA1NTU1TDcuNzQwNzIgMy44ODg4OVY4LjIyMjIyWk0xNCAzLjE2NjY3TDExLjExMTEgNS4zMzMzM1YxTDE0IDMuMTY2NjdaTTExLjExMTEgMTEuMTExMUwxNCA4Ljk0NDQ0TDExLjExMTEgNi43Nzc3N1YxMS4xMTExWk0zLjg4ODg5IDExLjExMTFMMSA4Ljk0NDQ0TDMuODg4ODkgNi43Nzc3N1YxMS4xMTExWk00LjM3MDM2IDYuMDU1NTVMNy4yNTkyNSA4LjIyMjIyVjMuODg4ODlMNC4zNzAzNiA2LjA1NTU1Wk0zLjg4ODg5IDUuMzMzMzNMMSAzLjE2NjY3TDMuODg4ODkgMVY1LjMzMzMzWk03Ljc0MDcyIDMuMTY2NjdMMTAuNjI5NiA1LjMzMzMzVjFMNy43NDA3MiAzLjE2NjY3Wk0xNCA4LjIyMjIyTDExLjExMTEgNi4wNTU1NUwxNCAzLjg4ODg5VjguMjIyMjJaTTExLjExMTEgMTEuODMzM0wxNCAxNFY5LjY2NjY2TDExLjExMTEgMTEuODMzM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEhuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjg5OTk4IDAuNDk5OTc2QzIuODk5OTggMC4yNzkwNjIgMi43MjA4OSAwLjA5OTk3NTYgMi40OTk5OCAwLjA5OTk3NTZDMi4yNzkwNiAwLjA5OTk3NTYgMi4wOTk5OCAwLjI3OTA2MiAyLjA5OTk4IDAuNDk5OTc2VjEuMDk5OThIMS40OTk5OEMxLjI3OTA2IDEuMDk5OTggMS4wOTk5OCAxLjI3OTA2IDEuMDk5OTggMS40OTk5OEMxLjA5OTk4IDEuNzIwODkgMS4yNzkwNiAxLjg5OTk4IDEuNDk5OTggMS44OTk5OEgyLjA5OTk4VjIuNDk5OThDMi4wOTk5OCAyLjcyMDg5IDIuMjc5MDYgMi44OTk5OCAyLjQ5OTk4IDIuODk5OThDMi43MjA4OSAyLjg5OTk4IDIuODk5OTggMi43MjA4OSAyLjg5OTk4IDIuNDk5OThWMS44OTk5OEgzLjQ5OTk4QzMuNzIwODkgMS44OTk5OCAzLjg5OTk4IDEuNzIwODkgMy44OTk5OCAxLjQ5OTk4QzMuODk5OTggMS4yNzkwNiAzLjcyMDg5IDEuMDk5OTggMy40OTk5OCAxLjA5OTk4SDIuODk5OThWMC40OTk5NzZaTTUuODk5OTggMy40OTk5OEM1Ljg5OTk4IDMuMjc5MDYgNS43MjA4OSAzLjA5OTk4IDUuNDk5OTggMy4wOTk5OEM1LjI3OTA2IDMuMDk5OTggNS4wOTk5OCAzLjI3OTA2IDUuMDk5OTggMy40OTk5OFY0LjA5OTk4SDQuNDk5OThDNC4yNzkwNiA0LjA5OTk4IDQuMDk5OTggNC4yNzkwNiA0LjA5OTk4IDQuNDk5OThDNC4wOTk5OCA0LjcyMDg5IDQuMjc5MDYgNC44OTk5OCA0LjQ5OTk4IDQuODk5OThINS4wOTk5OFY1LjQ5OTk4QzUuMDk5OTggNS43MjA4OSA1LjI3OTA2IDUuODk5OTggNS40OTk5OCA1Ljg5OTk4QzUuNzIwODkgNS44OTk5OCA1Ljg5OTk4IDUuNzIwODkgNS44OTk5OCA1LjQ5OTk4VjQuODk5OThINi40OTk5OEM2LjcyMDg5IDQuODk5OTggNi44OTk5OCA0LjcyMDg5IDYuODk5OTggNC40OTk5OEM2Ljg5OTk4IDQuMjc5MDYgNi43MjA4OSA0LjA5OTk4IDYuNDk5OTggNC4wOTk5OEg1Ljg5OTk4VjMuNDk5OThaTTEuODk5OTggNi40OTk5OEMxLjg5OTk4IDYuMjc5MDYgMS43MjA4OSA2LjA5OTk4IDEuNDk5OTggNi4wOTk5OEMxLjI3OTA2IDYuMDk5OTggMS4wOTk5OCA2LjI3OTA2IDEuMDk5OTggNi40OTk5OFY3LjA5OTk4SDAuNDk5OTc2QzAuMjc5MDYyIDcuMDk5OTggMC4wOTk5NzU2IDcuMjc5MDYgMC4wOTk5NzU2IDcuNDk5OThDMC4wOTk5NzU2IDcuNzIwODkgMC4yNzkwNjIgNy44OTk5OCAwLjQ5OTk3NiA3Ljg5OTk4SDEuMDk5OThWOC40OTk5OEMxLjA5OTk4IDguNzIwODkgMS4yNzkwNiA4Ljg5OTk3IDEuNDk5OTggOC44OTk5N0MxLjcyMDg5IDguODk5OTcgMS44OTk5OCA4LjcyMDg5IDEuODk5OTggOC40OTk5OFY3Ljg5OTk4SDIuNDk5OThDMi43MjA4OSA3Ljg5OTk4IDIuODk5OTggNy43MjA4OSAyLjg5OTk4IDcuNDk5OThDMi44OTk5OCA3LjI3OTA2IDIuNzIwODkgNy4wOTk5OCAyLjQ5OTk4IDcuMDk5OThIMS44OTk5OFY2LjQ5OTk4Wk04LjU0NDA2IDAuOTgxODRMOC4yNDYxOCAwLjk0MTU4NkM4LjAzMjc1IDAuOTE3Njc2IDcuOTA2OTIgMS4xNjU1IDguMDI5MzYgMS4zNDE5NEM4LjE3MDEzIDEuNTQ0NzkgOC4yOTk4MSAxLjc1NTkyIDguNDE3NTQgMS45NzQ0NUM4LjkxODc4IDIuOTA0ODUgOS4yMDMyMiAzLjk2OTMyIDkuMjAzMjIgNS4xMDAyMkM5LjIwMzIyIDguMzcyMDEgNi44MjI0NyAxMS4wODc4IDMuNjk4ODcgMTEuNjA5N0MzLjQ1NzM2IDExLjY1IDMuMjA5ODggMTEuNjc3MiAyLjk2MDA4IDExLjY5MDZDMi43NDU2MyAxMS43MDIgMi42MjcyOSAxMS45NTM1IDIuNzc3MjEgMTIuMTA3MkMyLjg0NTUxIDEyLjE3NzMgMi45MTUzNSAxMi4yNDU4IDIuOTg2NjcgMTIuMzEyOEwzLjA1ODgzIDEyLjM3OTVMMy4zMTg4MyAxMi42MDQ1TDMuNTA2ODQgMTIuNzUzMkwzLjYyNzk2IDEyLjg0MzNMMy44MTQ5MSAxMi45NzQyTDMuOTkwNzkgMTMuMDg5QzQuMTExNzUgMTMuMTY1MSA0LjIzNTM2IDEzLjIzNzUgNC4zNjE1NyAxMy4zMDU5TDQuNjI0OTYgMTMuNDQxMkw0Ljg4NTUzIDEzLjU2MDdMNS4xODgzNyAxMy42ODI4TDUuNDMxNjkgMTMuNzY4NkM1LjU2NTY0IDEzLjgxMjggNS43MDE0OSAxMy44NTI5IDUuODM4NTcgMTMuODg4NUM1Ljk0MjYyIDEzLjkxNTUgNi4wNDc2NyAxMy45NDAxIDYuMTU0MDUgMTMuOTYyMkM2LjI3OTkzIDEzLjk4ODMgNi40MDcxMyAxNC4wMTA5IDYuNTM1NDQgMTQuMDI5OEw2Ljg1MjQxIDE0LjA2ODVMNy4xMTkzNCAxNC4wODkyQzcuMjQ2MzcgMTQuMDk2NSA3LjM3NDM2IDE0LjEwMDIgNy41MDMyMiAxNC4xMDAyQzExLjE0ODMgMTQuMTAwMiAxNC4xMDMyIDExLjE0NTMgMTQuMTAzMiA3LjUwMDIzQzE0LjEwMzIgNy4yNTA0NCAxNC4wODkzIDcuMDAzODkgMTQuMDYyMyA2Ljc2MTMxTDE0LjAyNTUgNi40ODQwN0MxMy45OTEgNi4yNjA4MyAxMy45NDUzIDYuMDQxMjkgMTMuODg5MSA1LjgyNjQyQzEzLjgyMTMgNS41NjcwOSAxMy43MzgyIDUuMzEzOTggMTMuNjQwOSA1LjA2ODgxTDEzLjUyNzkgNC44MDEzMkwxMy40NTA3IDQuNjM1NDJMMTMuMzc2NiA0LjQ4NjY2QzEzLjIxNzggNC4xNzc3MyAxMy4wMzUzIDMuODgyOTUgMTIuODMxMiAzLjYwNDIzTDEyLjY3ODIgMy40MDM1MkwxMi40NzkzIDMuMTY0MzJMMTIuMzE1NyAyLjk4MzYxTDEyLjE5NjEgMi44NTk1MUwxMi4wMzU1IDIuNzAyNDZMMTEuODEzNCAyLjUwMTg0TDExLjQ5MjUgMi4yNDE5MUwxMS4yNDgzIDIuMDY0OThMMTAuOTU2MiAxLjg3NDQ2TDEwLjYzNDYgMS42ODg5NEwxMC4zMDczIDEuNTIzNzhMMTAuMTkzOCAxLjQ3MTc2TDkuOTU0ODggMS4zNzA2TDkuNjc3OTEgMS4yNjY5TDkuNDI1NjYgMS4xODQ2TDkuMTAwNzUgMS4wOTQ4OUw4LjgzNTk5IDEuMDM0ODZMOC41NDQwNiAwLjk4MTg0Wk0xMC40MDMyIDUuMzAwMjNDMTAuNDAzMiA0LjI3NTg4IDEwLjIwMDIgMy4yOTgyOSA5LjgzMjQ0IDIuNDA2MDRDMTEuNzYyMyAzLjI4OTk1IDEzLjEwMzIgNS4yMzg2MiAxMy4xMDMyIDcuNTAwMjNDMTMuMTAzMiAxMC41OTMgMTAuNTk2IDEzLjEwMDIgNy41MDMyMiAxMy4xMDAyQzYuNjM2NDYgMTMuMTAwMiA1LjgxNTk3IDEyLjkwMzYgNS4wODM1NSAxMi41NTIyQzYuNTQxOSAxMi4wOTQxIDcuODEwODEgMTEuMjA4MiA4Ljc0MzIyIDEwLjA0MTZDOC44Nzk2MyAxMC4yMjg0IDkuMTAwMjggMTAuMzQ5NyA5LjM0OTI4IDEwLjM0OTdDOS43NjM0OSAxMC4zNDk3IDEwLjA5OTMgMTAuMDEzOSAxMC4wOTkzIDkuNTk5NzFDMTAuMDk5MyA5LjI0MjU2IDkuODQ5NjUgOC45NDM3MyA5LjUxNTM1IDguODY4MTZDOS41Nzc0MSA4Ljc1MTY1IDkuNjM2NTMgOC42MzMzNCA5LjY5MjYgOC41MTMzMkM5Ljg4MzU4IDguNjMxNjMgMTAuMTA4OCA4LjY5OTkzIDEwLjM1IDguNjk5OTNDMTEuMDQwMyA4LjY5OTkzIDExLjYgOC4xNDAyOCAxMS42IDcuNDQ5OTNDMTEuNiA2Ljc1OTc2IDExLjA0MDYgNi4yMDAyNCAxMC4zNTA1IDYuMTk5OTNDMTAuMzg1MyA1LjkwNDg3IDEwLjQwMzIgNS42MDQ2NCAxMC40MDMyIDUuMzAwMjNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxBbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy44MTgxOSAwLjkzMTc5QzcuNjQyNDUgMC43NTYwNTQgNy4zNTc1MyAwLjc1NjA1NCA3LjE4MTc5IDAuOTMxNzlMNS40MzE3OSAyLjY4MTc5QzUuMjU2MDUgMi44NTc1MyA1LjI1NjA1IDMuMTQyNDUgNS40MzE3OSAzLjMxODE5QzUuNjA3NTMgMy40OTM5MiA1Ljg5MjQ1IDMuNDkzOTIgNi4wNjgxOSAzLjMxODE5TDYuOTk5OTkgMi4zODYzOFY1LjQ5OTk5QzYuOTk5OTkgNS43NzYxMyA3LjIyMzg1IDUuOTk5OTkgNy40OTk5OSA1Ljk5OTk5QzcuNzc2MTMgNS45OTk5OSA3Ljk5OTk5IDUuNzc2MTMgNy45OTk5OSA1LjQ5OTk5VjIuMzg2MzhMOC45MzE3OSAzLjMxODE5QzkuMTA3NTMgMy40OTM5MiA5LjM5MjQ1IDMuNDkzOTIgOS41NjgxOSAzLjMxODE5QzkuNzQzOTIgMy4xNDI0NSA5Ljc0MzkyIDIuODU3NTMgOS41NjgxOSAyLjY4MTc5TDcuODE4MTkgMC45MzE3OVpNNy45OTk5OSA5LjQ5OTk5QzcuOTk5OTkgOS4yMjM4NSA3Ljc3NjEzIDguOTk5OTkgNy40OTk5OSA4Ljk5OTk5QzcuMjIzODUgOC45OTk5OSA2Ljk5OTk5IDkuMjIzODUgNi45OTk5OSA5LjQ5OTk5VjEyLjYxMzZMNi4wNjgxOSAxMS42ODE4QzUuODkyNDUgMTEuNTA2MSA1LjYwNzUzIDExLjUwNjEgNS40MzE3OSAxMS42ODE4QzUuMjU2MDUgMTEuODU3NSA1LjI1NjA1IDEyLjE0MjQgNS40MzE3OSAxMi4zMTgyTDcuMTgxNzkgMTQuMDY4MkM3LjM1NzUzIDE0LjI0MzkgNy42NDI0NSAxNC4yNDM5IDcuODE4MTkgMTQuMDY4Mkw5LjU2ODE5IDEyLjMxODJDOS43NDM5MiAxMi4xNDI0IDkuNzQzOTIgMTEuODU3NSA5LjU2ODE5IDExLjY4MThDOS4zOTI0NSAxMS41MDYxIDkuMTA3NTMgMTEuNTA2MSA4LjkzMTc5IDExLjY4MThMNy45OTk5OSAxMi42MTM2VjkuNDk5OTlaTTguOTk5OTkgNy40OTk5OUM4Ljk5OTk5IDcuMjIzODUgOS4yMjM4NSA2Ljk5OTk5IDkuNDk5OTkgNi45OTk5OUgxMi42MTM2TDExLjY4MTggNi4wNjgxOUMxMS41MDYxIDUuODkyNDUgMTEuNTA2MSA1LjYwNzUzIDExLjY4MTggNS40MzE3OUMxMS44NTc1IDUuMjU2MDUgMTIuMTQyNCA1LjI1NjA1IDEyLjMxODIgNS40MzE3OUwxNC4wNjgyIDcuMTgxNzlDMTQuMjQzOSA3LjM1NzUzIDE0LjI0MzkgNy42NDI0NSAxNC4wNjgyIDcuODE4MTlMMTIuMzE4MiA5LjU2ODE5QzEyLjE0MjQgOS43NDM5MiAxMS44NTc1IDkuNzQzOTIgMTEuNjgxOCA5LjU2ODE5QzExLjUwNjEgOS4zOTI0NSAxMS41MDYxIDkuMTA3NTMgMTEuNjgxOCA4LjkzMTc5TDEyLjYxMzYgNy45OTk5OUg5LjQ5OTk5QzkuMjIzODUgNy45OTk5OSA4Ljk5OTk5IDcuNzc2MTMgOC45OTk5OSA3LjQ5OTk5Wk0zLjMxODE5IDYuMDY4MTlMMi4zODYzOCA2Ljk5OTk5SDUuNDk5OTlDNS43NzYxMyA2Ljk5OTk5IDUuOTk5OTkgNy4yMjM4NSA1Ljk5OTk5IDcuNDk5OTlDNS45OTk5OSA3Ljc3NjEzIDUuNzc2MTMgNy45OTk5OSA1LjQ5OTk5IDcuOTk5OTlIMi4zODYzOEwzLjMxODE5IDguOTMxNzlDMy40OTM5MiA5LjEwNzUzIDMuNDkzOTIgOS4zOTI0NSAzLjMxODE5IDkuNTY4MTlDMy4xNDI0NSA5Ljc0MzkyIDIuODU3NTMgOS43NDM5MiAyLjY4MTc5IDkuNTY4MTlMMC45MzE3OSA3LjgxODE5QzAuNzU2MDU0IDcuNjQyNDUgMC43NTYwNTQgNy4zNTc1MyAwLjkzMTc5IDcuMTgxNzlMMi42ODE3OSA1LjQzMTc5QzIuODU3NTMgNS4yNTYwNSAzLjE0MjQ1IDUuMjU2MDUgMy4zMTgxOSA1LjQzMTc5QzMuNDkzOTIgNS42MDc1MyAzLjQ5MzkyIDUuODkyNDUgMy4zMTgxOSA2LjA2ODE5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuMjU3ODEgMy4xMTY4NEMzLjY3NzcxIDMuNDU3OTYgMy44MzUyMyAzLjQzMTkzIDQuNjIzNjkgMy4zNzkzM0wxMi4wNTcxIDIuOTMyOTlDMTIuMjE0NyAyLjkzMjk5IDEyLjA4MzYgMi43NzU3MSAxMi4wMzExIDIuNzQ5NTdMMTAuNzk2NSAxLjg1NzExQzEwLjU2IDEuNjczNDcgMTAuMjQ0OCAxLjQ2MzE1IDkuNjQwODMgMS41MTU3NkwyLjQ0MzA4IDIuMDQwNzRDMi4xODA1OSAyLjA2Njc3IDIuMTI4MTUgMi4xOTgwMSAyLjIzMjcgMi4zMDMyMkwzLjI1NzgxIDMuMTE2ODRaTTMuNzA0MSA0Ljg0OTE3VjEyLjY3MDRDMy43MDQxIDEzLjA5MDcgMy45MTQxNSAxMy4yNDggNC4zODY5MyAxMy4yMjJMMTIuNTU2MiAxMi43NDkzQzEzLjAyOTIgMTIuNzIzMyAxMy4wODE5IDEyLjQzNDEgMTMuMDgxOSAxMi4wOTI3VjQuMzIzOTdDMTMuMDgxOSAzLjk4MzA2IDEyLjk1MDggMy43OTkyMSAxMi42NjEyIDMuODI1NDVMNC4xMjQyMiA0LjMyMzk3QzMuODA5MTggNC4zNTA0NCAzLjcwNDEgNC41MDgwMyAzLjcwNDEgNC44NDkxN1pNMTEuNzY4OCA1LjI2ODcyQzExLjgyMTIgNS41MDUxOCAxMS43Njg4IDUuNzQxNDIgMTEuNTMxOSA1Ljc2Nzk5TDExLjEzODMgNS44NDY0MVYxMS42MjA1QzEwLjc5NjUgMTEuODA0MiAxMC40ODE0IDExLjkwOTIgMTAuMjE4OCAxMS45MDkyQzkuNzk4MzUgMTEuOTA5MiA5LjY5MzA1IDExLjc3NzkgOS4zNzgxMiAxMS4zODQ0TDYuODAzNDUgNy4zNDI0OVYxMS4yNTMyTDcuNjE4MTYgMTEuNDM3QzcuNjE4MTYgMTEuNDM3IDcuNjE4MTYgMTEuOTA5MiA2Ljk2MDg2IDExLjkwOTJMNS4xNDg3OSAxMi4wMTQzQzUuMDk2MTUgMTEuOTA5MiA1LjE0ODc5IDExLjY0NyA1LjMzMjU5IDExLjU5NDRMNS44MDU0NiAxMS40NjM0VjYuMjkyNzZMNS4xNDg5IDYuMjQwMTVDNS4wOTYyNSA2LjAwMzY5IDUuMjI3MzkgNS42NjI3OCA1LjU5NTQgNS42MzYzMUw3LjUzOTM1IDUuNTA1MjhMMTAuMjE4OCA5LjU5OThWNS45Nzc2NUw5LjUzNTY0IDUuODk5MjRDOS40ODMyIDUuNjEwMTggOS42OTMwNSA1LjQwMDI4IDkuOTU1NzYgNS4zNzQyNUwxMS43Njg4IDUuMjY4NzJaTTEuODM4NzQgMS4zMzIxMkw5LjMyNTU3IDAuNzgwNzg3QzEwLjI0NSAwLjcwMTkzMiAxMC40ODE1IDAuNzU0NzUzIDExLjA1OTQgMS4xNzQ1MkwxMy40NDkyIDIuODU0MjRDMTMuODQzNiAzLjE0MzA5IDEzLjk3NSAzLjIyMTczIDEzLjk3NSAzLjUzNjYxVjEyLjc0OTNDMTMuOTc1IDEzLjMyNjYgMTMuNzY0NyAxMy42NjgxIDEzLjAyOTMgMTMuNzIwM0w0LjMzNDkyIDE0LjI0NTRDMy43ODI5MSAxNC4yNzE3IDMuNTIwMTkgMTQuMTkzIDMuMjMxMTEgMTMuODI1M0wxLjQ3MTE2IDExLjU0MTlDMS4xNTU4IDExLjEyMTYgMS4wMjQ2NiAxMC44MDcxIDEuMDI0NjYgMTAuNDM5MlYyLjI1MDQxQzEuMDI0NjYgMS43NzgyNSAxLjIzNTA0IDEuMzg0NDEgMS44Mzg3NCAxLjMzMjEyWlwiLGZpbGw6bn0pKX0sRG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNSAxLjVDNC41IDQuMjUgMyA2LjUgMyA5QzMgMTEuNDg1MyA1LjAxNDcyIDEzLjUgNy41IDEzLjVDOS45ODUyOCAxMy41IDEyIDExLjQ4NTMgMTIgOUMxMiA2LjUgMTAuNSA0LjI1IDcuNSAxLjVaTTExIDlDMTEgNy4xMTIwMyA5Ljk3MzE1IDUuMjcxOTUgNy41IDIuODczNTdDNS4wMjY4NiA1LjI3MTk1IDQgNy4xMTIwMyA0IDlDNCAxMC45MzMgNS41NjcgMTIuNSA3LjUgMTIuNUM5LjQzMyAxMi41IDExIDEwLjkzMyAxMSA5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNDk5ODUgMS4xMDAwMUMzLjI3ODk0IDEuMTAwMDEgMy4wOTk4NSAxLjI3OTA5IDMuMDk5ODUgMS41MDAwMUMzLjA5OTg1IDEuNzIwOTIgMy4yNzg5NCAxLjkwMDAxIDMuNDk5ODUgMS45MDAwMUgxMS40OTk5QzExLjcyMDggMS45MDAwMSAxMS44OTk5IDEuNzIwOTIgMTEuODk5OSAxLjUwMDAxQzExLjg5OTkgMS4yNzkwOSAxMS43MjA4IDEuMTAwMDEgMTEuNDk5OSAxLjEwMDAxSDMuNDk5ODVaTTQuOTk5OTUgNC4yNTAwMUM0Ljk5OTk1IDMuOTczODcgNC43NzYwOSAzLjc1MDAxIDQuNDk5OTUgMy43NTAwMUM0LjIyMzgxIDMuNzUwMDEgMy45OTk5NSAzLjk3Mzg3IDMuOTk5OTUgNC4yNTAwMVY5LjU1MDAxQzMuOTk5OTUgMTEuNDgzIDUuNTY2OTUgMTMuMDUgNy40OTk5NSAxMy4wNUM5LjQzMjk1IDEzLjA1IDExIDExLjQ4MyAxMSA5LjU1MDAxVjQuMjUwMDFDMTEgMy45NzM4NyAxMC43NzYxIDMuNzUwMDEgMTAuNSAzLjc1MDAxQzEwLjIyMzggMy43NTAwMSA5Ljk5OTk1IDMuOTczODcgOS45OTk5NSA0LjI1MDAxVjkuNTUwMDFDOS45OTk5NSAxMC45MzA3IDguODgwNjYgMTIuMDUgNy40OTk5NSAxMi4wNUM2LjExOTI0IDEyLjA1IDQuOTk5OTUgMTAuOTMwNyA0Ljk5OTk1IDkuNTUwMDFWNC4yNTAwMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFpuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjg1NzE0IDJIMTIuMTQyOUMxMi42MTYyIDIgMTMgMi4zODM3NiAxMyAyLjg1NzE0VjEyLjE0MjlDMTMgMTIuNjE2MiAxMi42MTYyIDEzIDEyLjE0MjkgMTNIMi44NTcxNEMyLjM4Mzc2IDEzIDIgMTIuNjE2MiAyIDEyLjE0MjlWMi44NTcxNEMyIDIuMzgzNzYgMi4zODM3NiAyIDIuODU3MTQgMlpNMSAyLjg1NzE0QzEgMS44MzE0NyAxLjgzMTQ3IDEgMi44NTcxNCAxSDEyLjE0MjlDMTMuMTY4NSAxIDE0IDEuODMxNDcgMTQgMi44NTcxNFYxMi4xNDI5QzE0IDEzLjE2ODUgMTMuMTY4NSAxNCAxMi4xNDI5IDE0SDIuODU3MTRDMS44MzE0NyAxNCAxIDEzLjE2ODUgMSAxMi4xNDI5VjIuODU3MTRaTTcuNDk5ODggNS4wMDAxMkM3Ljc3NjAyIDUuMDAwMTIgNy45OTk4OCA0Ljc3NjI2IDcuOTk5ODggNC41MDAxMkM3Ljk5OTg4IDQuMjIzOTggNy43NzYwMiA0LjAwMDEyIDcuNDk5ODggNC4wMDAxMkM3LjIyMzc0IDQuMDAwMTIgNi45OTk4OCA0LjIyMzk4IDYuOTk5ODggNC41MDAxMkM2Ljk5OTg4IDQuNzc2MjYgNy4yMjM3NCA1LjAwMDEyIDcuNDk5ODggNS4wMDAxMlpNNC40OTk4OCAxMS4wMDAxQzQuNzc2MDIgMTEuMDAwMSA0Ljk5OTg4IDEwLjc3NjMgNC45OTk4OCAxMC41MDAxQzQuOTk5ODggMTAuMjI0IDQuNzc2MDIgMTAuMDAwMSA0LjQ5OTg4IDEwLjAwMDFDNC4yMjM3NCAxMC4wMDAxIDMuOTk5ODggMTAuMjI0IDMuOTk5ODggMTAuNTAwMUMzLjk5OTg4IDEwLjc3NjMgNC4yMjM3NCAxMS4wMDAxIDQuNDk5ODggMTEuMDAwMVpNNC45OTk4OCA3LjUwMDEyQzQuOTk5ODggNy43NzYyNiA0Ljc3NjAyIDguMDAwMTIgNC40OTk4OCA4LjAwMDEyQzQuMjIzNzQgOC4wMDAxMiAzLjk5OTg4IDcuNzc2MjYgMy45OTk4OCA3LjUwMDEyQzMuOTk5ODggNy4yMjM5OCA0LjIyMzc0IDcuMDAwMTIgNC40OTk4OCA3LjAwMDEyQzQuNzc2MDIgNy4wMDAxMiA0Ljk5OTg4IDcuMjIzOTggNC45OTk4OCA3LjUwMDEyWk00LjQ5OTg4IDUuMDAwMTJDNC43NzYwMiA1LjAwMDEyIDQuOTk5ODggNC43NzYyNiA0Ljk5OTg4IDQuNTAwMTJDNC45OTk4OCA0LjIyMzk4IDQuNzc2MDIgNC4wMDAxMiA0LjQ5OTg4IDQuMDAwMTJDNC4yMjM3NCA0LjAwMDEyIDMuOTk5ODggNC4yMjM5OCAzLjk5OTg4IDQuNTAwMTJDMy45OTk4OCA0Ljc3NjI2IDQuMjIzNzQgNS4wMDAxMiA0LjQ5OTg4IDUuMDAwMTJaTTEwLjk5OTkgMTAuNTAwMUMxMC45OTk5IDEwLjc3NjMgMTAuNzc2IDExLjAwMDEgMTAuNDk5OSAxMS4wMDAxQzEwLjIyMzcgMTEuMDAwMSA5Ljk5OTg4IDEwLjc3NjMgOS45OTk4OCAxMC41MDAxQzkuOTk5ODggMTAuMjI0IDEwLjIyMzcgMTAuMDAwMSAxMC40OTk5IDEwLjAwMDFDMTAuNzc2IDEwLjAwMDEgMTAuOTk5OSAxMC4yMjQgMTAuOTk5OSAxMC41MDAxWk0xMC40OTk5IDguMDAwMTJDMTAuNzc2IDguMDAwMTIgMTAuOTk5OSA3Ljc3NjI2IDEwLjk5OTkgNy41MDAxMkMxMC45OTk5IDcuMjIzOTggMTAuNzc2IDcuMDAwMTIgMTAuNDk5OSA3LjAwMDEyQzEwLjIyMzcgNy4wMDAxMiA5Ljk5OTg4IDcuMjIzOTggOS45OTk4OCA3LjUwMDEyQzkuOTk5ODggNy43NzYyNiAxMC4yMjM3IDguMDAwMTIgMTAuNDk5OSA4LjAwMDEyWk0xMC45OTk5IDQuNTAwMTJDMTAuOTk5OSA0Ljc3NjI2IDEwLjc3NiA1LjAwMDEyIDEwLjQ5OTkgNS4wMDAxMkMxMC4yMjM3IDUuMDAwMTIgOS45OTk4OCA0Ljc3NjI2IDkuOTk5ODggNC41MDAxMkM5Ljk5OTg4IDQuMjIzOTggMTAuMjIzNyA0LjAwMDEyIDEwLjQ5OTkgNC4wMDAxMkMxMC43NzYgNC4wMDAxMiAxMC45OTk5IDQuMjIzOTggMTAuOTk5OSA0LjUwMDEyWk03LjQ5OTg4IDExLjAwMDFDNy43NzYwMiAxMS4wMDAxIDcuOTk5ODggMTAuNzc2MyA3Ljk5OTg4IDEwLjUwMDFDNy45OTk4OCAxMC4yMjQgNy43NzYwMiAxMC4wMDAxIDcuNDk5ODggMTAuMDAwMUM3LjIyMzc0IDEwLjAwMDEgNi45OTk4OCAxMC4yMjQgNi45OTk4OCAxMC41MDAxQzYuOTk5ODggMTAuNzc2MyA3LjIyMzc0IDExLjAwMDEgNy40OTk4OCAxMS4wMDAxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sJG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuMjAzMDcgMS4wNDMxMkMxLjAwNDgxIDAuOTU0OTk4IDAuNzcyMzQgMS4wMDQ4IDAuNjI3NTc3IDEuMTY2NDFDMC40ODI4MTMgMS4zMjgwMiAwLjQ1ODc5NCAxLjU2NDU1IDAuNTY4MTE2IDEuNzUxOTZMMy45MjExNSA3LjUwMDAyTDAuNTY4MTE2IDEzLjI0ODFDMC40NTg3OTQgMTMuNDM1NSAwLjQ4MjgxMyAxMy42NzIgMC42Mjc1NzcgMTMuODMzNkMwLjc3MjM0IDEzLjk5NTIgMS4wMDQ4MSAxNC4wNDUgMS4yMDMwNyAxMy45NTY5TDE0LjcwMzEgNy45NTY5MkMxNC44ODM2IDcuODc2NjcgMTUgNy42OTc2MSAxNSA3LjUwMDAyQzE1IDcuMzAyNDIgMTQuODgzNiA3LjEyMzM2IDE0LjcwMzEgNy4wNDMxMUwxLjIwMzA3IDEuMDQzMTJaTTQuODQ1NTIgNy4xMDAwMkwyLjIxMjM0IDIuNTg2TDEzLjI2ODkgNy41MDAwMkwyLjIxMjM0IDEyLjQxNEw0Ljg0NTUyIDcuOTAwMDJIOUM5LjIyMDkxIDcuOTAwMDIgOS40IDcuNzIwOTQgOS40IDcuNTAwMDJDOS40IDcuMjc5MTEgOS4yMjA5MSA3LjEwMDAyIDkgNy4xMDAwMkg0Ljg0NTUyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTYuMDQ5OTUgMi43NDk5OEM2LjA0OTk1IDIuNDQ2MjMgNS44MDM3MSAyLjE5OTk4IDUuNDk5OTUgMi4xOTk5OEM1LjE5NjE5IDIuMTk5OTggNC45NDk5NSAyLjQ0NjIzIDQuOTQ5OTUgMi43NDk5OFYxMi4yNUM0Ljk0OTk1IDEyLjU1MzcgNS4xOTYxOSAxMi44IDUuNDk5OTUgMTIuOEM1LjgwMzcxIDEyLjggNi4wNDk5NSAxMi41NTM3IDYuMDQ5OTUgMTIuMjVWMi43NDk5OFpNMTAuMDUgMi43NDk5OEMxMC4wNSAyLjQ0NjIzIDkuODAzNzEgMi4xOTk5OCA5LjQ5OTk1IDIuMTk5OThDOS4xOTYxOSAyLjE5OTk4IDguOTQ5OTUgMi40NDYyMyA4Ljk0OTk1IDIuNzQ5OThWMTIuMjVDOC45NDk5NSAxMi41NTM3IDkuMTk2MTkgMTIuOCA5LjQ5OTk1IDEyLjhDOS44MDM3MSAxMi44IDEwLjA1IDEyLjU1MzcgMTAuMDUgMTIuMjVWMi43NDk5OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEZuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMS44NTM2IDEuMTQ2NDVDMTEuNjU4MyAwLjk1MTE4NCAxMS4zNDE3IDAuOTUxMTg0IDExLjE0NjUgMS4xNDY0NUwzLjcxNDU1IDguNTc4MzZDMy42MjQ1OSA4LjY2ODMyIDMuNTUyNjMgOC43NzQ2MSAzLjUwMjUxIDguODkxNTVMMi4wNDA0NCAxMi4zMDNDMS45NTk5IDEyLjQ5MSAyLjAwMTg5IDEyLjcwOSAyLjE0NjQ2IDEyLjg1MzZDMi4yOTEwMyAxMi45OTgxIDIuNTA5MDUgMTMuMDQwMSAyLjY5Njk3IDEyLjk1OTZMNi4xMDg0NyAxMS40OTc1QzYuMjI1NCAxMS40NDc0IDYuMzMxNyAxMS4zNzU0IDYuNDIxNjYgMTEuMjg1NUwxMy44NTM2IDMuODUzNTVDMTQuMDQ4OCAzLjY1ODI5IDE0LjA0ODggMy4zNDE3MSAxMy44NTM2IDMuMTQ2NDVMMTEuODUzNiAxLjE0NjQ1Wk00LjQyMTY2IDkuMjg1NDdMMTEuNSAyLjIwNzExTDEyLjc5MjkgMy41TDUuNzE0NTUgMTAuNTc4NEw0LjIxOTI0IDExLjIxOTJMMy43ODA4MSAxMC43ODA4TDQuNDIxNjYgOS4yODU0N1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFduPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMi4xNDY0IDEuMTQ2NDVDMTIuMzQxNyAwLjk1MTE4NCAxMi42NTgzIDAuOTUxMTg0IDEyLjg1MzUgMS4xNDY0NUwxNC44NTM1IDMuMTQ2NDVDMTUuMDQ4OCAzLjM0MTcxIDE1LjA0ODggMy42NTgyOSAxNC44NTM1IDMuODUzNTVMMTAuOTEwOSA3Ljc5NjE4QzEwLjgzNDkgNy44NzIxOCAxMC43NDcxIDcuOTM1NDMgMTAuNjUxIDcuOTgzNUw2LjcyMzU5IDkuOTQ3MjFDNi41MzEwOSAxMC4wNDM1IDYuMjk4NjEgMTAuMDA1NyA2LjE0NjQzIDkuODUzNTVDNS45OTQyNSA5LjcwMTM3IDUuOTU2NTIgOS40Njg4OSA2LjA1Mjc3IDkuMjc2MzlMOC4wMTY0OCA1LjM0ODk3QzguMDY0NTUgNS4yNTI4MyA4LjEyNzggNS4xNjUwNyA4LjIwMzggNS4wODkwN0wxMi4xNDY0IDEuMTQ2NDVaTTEyLjUgMi4yMDcxMUw4LjkxMDkxIDUuNzk2MThMNy44NzI2NiA3Ljg3MjY3TDguMTI3MzEgOC4xMjczMkwxMC4yMDM4IDcuMDg5MDdMMTMuNzkyOSAzLjVMMTIuNSAyLjIwNzExWk05Ljk5OTk4IDJMOC45OTk5OCAzSDQuOUM0LjQ3MTcxIDMgNC4xODA1NiAzLjAwMDM5IDMuOTU1NTIgMy4wMTg3N0MzLjczNjMxIDMuMDM2NjggMy42MjQyMSAzLjA2OTE1IDMuNTQ2MDEgMy4xMDg5OUMzLjM1Nzg1IDMuMjA0ODcgMy4yMDQ4NyAzLjM1Nzg1IDMuMTA4OTkgMy41NDYwMUMzLjA2OTE1IDMuNjI0MjEgMy4wMzY2OSAzLjczNjMxIDMuMDE4NzggMy45NTU1MkMzLjAwMDM5IDQuMTgwNTYgMyA0LjQ3MTcxIDMgNC45VjExLjFDMyAxMS41MjgzIDMuMDAwMzkgMTEuODE5NCAzLjAxODc4IDEyLjA0NDVDMy4wMzY2OSAxMi4yNjM3IDMuMDY5MTUgMTIuMzc1OCAzLjEwODk5IDEyLjQ1NEMzLjIwNDg3IDEyLjY0MjIgMy4zNTc4NSAxMi43OTUxIDMuNTQ2MDEgMTIuODkxQzMuNjI0MjEgMTIuOTMwOSAzLjczNjMxIDEyLjk2MzMgMy45NTU1MiAxMi45ODEyQzQuMTgwNTYgMTIuOTk5NiA0LjQ3MTcxIDEzIDQuOSAxM0gxMS4xQzExLjUyODMgMTMgMTEuODE5NCAxMi45OTk2IDEyLjA0NDUgMTIuOTgxMkMxMi4yNjM3IDEyLjk2MzMgMTIuMzc1OCAxMi45MzA5IDEyLjQ1NCAxMi44OTFDMTIuNjQyMiAxMi43OTUxIDEyLjc5NTEgMTIuNjQyMiAxMi44OTEgMTIuNDU0QzEyLjkzMDkgMTIuMzc1OCAxMi45NjMzIDEyLjI2MzcgMTIuOTgxMiAxMi4wNDQ1QzEyLjk5OTYgMTEuODE5NCAxMyAxMS41MjgzIDEzIDExLjFWNi45OTk5OEwxNCA1Ljk5OTk4VjExLjFWMTEuMTIwN0MxNCAxMS41MjMxIDE0IDExLjg1NTMgMTMuOTc3OSAxMi4xMjU5QzEzLjk1NDkgMTIuNDA3IDEzLjkwNTcgMTIuNjY1MyAxMy43ODIgMTIuOTA4QzEzLjU5MDMgMTMuMjg0MyAxMy4yODQzIDEzLjU5MDMgMTIuOTA4IDEzLjc4MkMxMi42NjUzIDEzLjkwNTcgMTIuNDA3IDEzLjk1NDkgMTIuMTI1OSAxMy45Nzc5QzExLjg1NTMgMTQgMTEuNTIzMSAxNCAxMS4xMjA3IDE0SDExLjFINC45SDQuODc5MzRDNC40NzY4NiAxNCA0LjE0NDY4IDE0IDMuODc0MDkgMTMuOTc3OUMzLjU5MzA0IDEzLjk1NDkgMy4zMzQ2OSAxMy45MDU3IDMuMDkyMDIgMTMuNzgyQzIuNzE1NyAxMy41OTAzIDIuNDA5NzMgMTMuMjg0MyAyLjIxNzk5IDEyLjkwOEMyLjA5NDM0IDEyLjY2NTMgMi4wNDUwNiAxMi40MDcgMi4wMjIxIDEyLjEyNTlDMS45OTk5OSAxMS44NTUzIDEuOTk5OTkgMTEuNTIzMSAyIDExLjEyMDdWMTEuMTIwNlYxMS4xVjQuOVY0Ljg3OTM1VjQuODc5MzJWNC44NzkzMUMxLjk5OTk5IDQuNDc2ODUgMS45OTk5OSA0LjE0NDY4IDIuMDIyMSAzLjg3NDA5QzIuMDQ1MDYgMy41OTMwNCAyLjA5NDM0IDMuMzM0NjkgMi4yMTc5OSAzLjA5MjAyQzIuNDA5NzMgMi43MTU2OSAyLjcxNTcgMi40MDk3MyAzLjA5MjAyIDIuMjE3OTlDMy4zMzQ2OSAyLjA5NDM0IDMuNTkzMDQgMi4wNDUwNiAzLjg3NDA5IDIuMDIyMUM0LjE0NDY4IDEuOTk5OTkgNC40NzY4NSAxLjk5OTk5IDQuODc5MzIgMkg0Ljg3OTM1SDQuOUg5Ljk5OTk4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNSAwLjg3NUM1LjQ5Nzk3IDAuODc1IDMuODc1IDIuNDk3OTcgMy44NzUgNC41QzMuODc1IDYuMTUyODggNC45ODEyNCA3LjU0NzM4IDYuNDkzNzMgNy45ODM1MUM1LjI5OTcgOC4xMjkwMSA0LjI3NTU3IDguNTUxMzQgMy41MDQwNyA5LjMxMTY3QzIuNTIyMTYgMTAuMjc5NCAyLjAyNTAyIDExLjcyIDIuMDI1MDIgMTMuNTk5OUMyLjAyNTAyIDEzLjg2MjMgMi4yMzc2OSAxNC4wNzQ5IDIuNTAwMDIgMTQuMDc0OUMyLjc2MjM2IDE0LjA3NDkgMi45NzUwMiAxMy44NjIzIDIuOTc1MDIgMTMuNTk5OUMyLjk3NTAyIDExLjg3OTkgMy40Mjc4NiAxMC43MjA2IDQuMTcwOTEgOS45ODgzQzQuOTE1MzYgOS4yNTQ2MyA2LjAyNjc0IDguODc0OTkgNy40OTk5NSA4Ljg3NDk5QzguOTczMTcgOC44NzQ5OSAxMC4wODQ2IDkuMjU0NjMgMTAuODI5MSA5Ljk4ODMxQzExLjU3MjEgMTAuNzIwNiAxMi4wMjUgMTEuODc5OSAxMi4wMjUgMTMuNTk5OUMxMi4wMjUgMTMuODYyMyAxMi4yMzc2IDE0LjA3NDkgMTIuNSAxNC4wNzQ5QzEyLjc2MjMgMTQuMDc1IDEyLjk3NSAxMy44NjIzIDEyLjk3NSAxMy42QzEyLjk3NSAxMS43MiAxMi40Nzc4IDEwLjI3OTQgMTEuNDk1OSA5LjMxMTY2QzEwLjcyNDQgOC41NTEzNSA5LjcwMDI1IDguMTI5MDMgOC41MDYyNSA3Ljk4MzUyQzEwLjAxODcgNy41NDc0IDExLjEyNSA2LjE1Mjg5IDExLjEyNSA0LjVDMTEuMTI1IDIuNDk3OTcgOS41MDIwMyAwLjg3NSA3LjUgMC44NzVaTTQuODI1IDQuNUM0LjgyNSAzLjAyMjY0IDYuMDIyNjQgMS44MjUgNy41IDEuODI1QzguOTc3MzYgMS44MjUgMTAuMTc1IDMuMDIyNjQgMTAuMTc1IDQuNUMxMC4xNzUgNS45NzczNiA4Ljk3NzM2IDcuMTc1IDcuNSA3LjE3NUM2LjAyMjY0IDcuMTc1IDQuODI1IDUuOTc3MzYgNC44MjUgNC41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sem49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuODUwMDEgNy41MDA0M0MxLjg1MDAxIDQuMzc5NzUgNC4zNzk2MyAxLjg1MDAxIDcuNTAwMDEgMS44NTAwMUMxMC42MjA0IDEuODUwMDEgMTMuMTUgNC4zNzk3NSAxMy4xNSA3LjUwMDQzQzEzLjE1IDEwLjYyMTEgMTAuNjIwNCAxMy4xNTA5IDcuNTAwMDEgMTMuMTUwOUM0LjM3OTYzIDEzLjE1MDkgMS44NTAwMSAxMC42MjExIDEuODUwMDEgNy41MDA0M1pNNy41MDAwMSAwLjg1MDAwNkMzLjgyNzI4IDAuODUwMDA2IDAuODUwMDA2IDMuODI3NTMgMC44NTAwMDYgNy41MDA0M0MwLjg1MDAwNiAxMS4xNzMzIDMuODI3MjggMTQuMTUwOSA3LjUwMDAxIDE0LjE1MDlDMTEuMTcyNyAxNC4xNTA5IDE0LjE1IDExLjE3MzMgMTQuMTUgNy41MDA0M0MxNC4xNSAzLjgyNzUzIDExLjE3MjcgMC44NTAwMDYgNy41MDAwMSAwLjg1MDAwNlpNNy4wMDAwMSA4LjAwMDAxVjMuMTI4MTFDNy4xNjQxMSAzLjEwOTU0IDcuMzMwOTQgMy4xMDAwMSA3LjUwMDAxIDMuMTAwMDFDOS45MzAwNiAzLjEwMDAxIDExLjkgNS4wNzAxNCAxMS45IDcuNTAwNDNDMTEuOSA3LjY2OTM1IDExLjg5MDUgNy44MzYwNCAxMS44NzIgOC4wMDAwMUg3LjAwMDAxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sR249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMgNS41QzMgNy45ODMgNC45OTE2OSA5IDcgOVYxMi41QzcgMTIuNzc2MSA3LjIyMzg2IDEzIDcuNSAxM0M3Ljc3NjE0IDEzIDggMTIuNzc2MSA4IDEyLjVWOVYzLjFIOVYxMi41QzkgMTIuNzc2MSA5LjIyMzg2IDEzIDkuNSAxM0M5Ljc3NjE0IDEzIDEwIDEyLjc3NjEgMTAgMTIuNVYzLjFIMTEuNUMxMS44MDM4IDMuMSAxMi4wNSAyLjg1Mzc2IDEyLjA1IDIuNTVDMTIuMDUgMi4yNDYyNCAxMS44MDM4IDIgMTEuNSAySDkuNUg4SDcuNUg3QzQuOTkxNjkgMiAzIDMuMDE3IDMgNS41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sS249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEzLjUgMTMuOTVDMTMuNzQ4NSAxMy45NSAxMy45NSAxMy43NDg1IDEzLjk1IDEzLjVDMTMuOTUgMTMuMjUxNCAxMy43NDg1IDEzLjA1IDEzLjUgMTMuMDVMMS40OTk5NSAxMy4wNUMxLjI1MTQyIDEzLjA1IDEuMDQ5OTUgMTMuMjUxNCAxLjA0OTk1IDEzLjVDMS4wNDk5NSAxMy43NDg1IDEuMjUxNDIgMTMuOTUgMS40OTk5NSAxMy45NUwxMy41IDEzLjk1Wk0xMS4wNjgxIDcuNTY4M0MxMS4yNDM5IDcuMzkyNTcgMTEuMjQzOSA3LjEwNzY0IDExLjA2ODEgNi45MzE5MUMxMC44OTI0IDYuNzU2MTcgMTAuNjA3NSA2Ljc1NjE3IDEwLjQzMTcgNi45MzE5MUw3Ljk0OTkzIDkuNDEzNzFMNy45NDk5MyAxLjQ5OTk4QzcuOTQ5OTMgMS4yNTE0NiA3Ljc0ODQ2IDEuMDQ5OTggNy40OTk5MyAxLjA0OTk4QzcuMjUxNCAxLjA0OTk4IDcuMDQ5OTMgMS4yNTE0NiA3LjA0OTkzIDEuNDk5OThMNy4wNDk5MyA5LjQxMzcxTDQuNTY4MTMgNi45MzE5MUM0LjM5MjM5IDYuNzU2MTcgNC4xMDc0NiA2Ljc1NjE3IDMuOTMxNzMgNi45MzE5MUMzLjc1NTk5IDcuMTA3NjQgMy43NTU5OSA3LjM5MjU3IDMuOTMxNzMgNy41NjgzTDcuMTgxNzMgMTAuODE4M0M3LjM1NzQ2IDEwLjk5NCA3LjY0MjM5IDEwLjk5NCA3LjgxODEyIDEwLjgxODNMMTEuMDY4MSA3LjU2ODNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxxbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi4wNTAwNSAxMy41QzIuMDUwMDUgMTMuNzQ4NSAyLjI1MTUyIDEzLjk1IDIuNTAwMDUgMTMuOTVDMi43NDg1OCAxMy45NSAyLjk1MDA1IDEzLjc0ODUgMi45NTAwNSAxMy41TDIuOTUwMDUgMS40OTk5NUMyLjk1MDA1IDEuMjUxNDIgMi43NDg1OCAxLjA0OTk1IDIuNTAwMDUgMS4wNDk5NUMyLjI1MTUyIDEuMDQ5OTUgMi4wNTAwNSAxLjI1MTQyIDIuMDUwMDUgMS40OTk5NUwyLjA1MDA1IDEzLjVaTTguNDMxNyAxMS4wNjgxQzguNjA3NDMgMTEuMjQzOSA4Ljg5MjM2IDExLjI0MzkgOS4wNjgwOSAxMS4wNjgxQzkuMjQzODMgMTAuODkyNCA5LjI0MzgzIDEwLjYwNzUgOS4wNjgwOSAxMC40MzE3TDYuNTg2MjkgNy45NDk5M0wxNC41IDcuOTQ5OTNDMTQuNzQ4NSA3Ljk0OTkzIDE0Ljk1IDcuNzQ4NDYgMTQuOTUgNy40OTk5M0MxNC45NSA3LjI1MTQgMTQuNzQ4NSA3LjA0OTkzIDE0LjUgNy4wNDk5M0w2LjU4NjI5IDcuMDQ5OTNMOS4wNjgwOSA0LjU2ODEzQzkuMjQzODMgNC4zOTIzOSA5LjI0MzgzIDQuMTA3NDYgOS4wNjgwOSAzLjkzMTczQzguODkyMzYgMy43NTU5OSA4LjYwNzQzIDMuNzU1OTkgOC40MzE3IDMuOTMxNzNMNS4xODE3IDcuMTgxNzNDNS4wMDU5NiA3LjM1NzQ2IDUuMDA1OTYgNy42NDIzOSA1LjE4MTcgNy44MTgxMkw4LjQzMTcgMTEuMDY4MVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFluPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMi45NSAxLjUwMDA1QzEyLjk1IDEuMjUxNTIgMTIuNzQ4NSAxLjA1MDA1IDEyLjUgMS4wNTAwNUMxMi4yNTE0IDEuMDUwMDUgMTIuMDUgMS4yNTE1MiAxMi4wNSAxLjUwMDA1TDEyLjA1IDEzLjVDMTIuMDUgMTMuNzQ4NiAxMi4yNTE0IDEzLjk1IDEyLjUgMTMuOTVDMTIuNzQ4NSAxMy45NSAxMi45NSAxMy43NDg2IDEyLjk1IDEzLjVMMTIuOTUgMS41MDAwNVpNNi41NjgzIDMuOTMxODhDNi4zOTI1NyAzLjc1NjE0IDYuMTA3NjQgMy43NTYxNCA1LjkzMTkxIDMuOTMxODhDNS43NTYxNyA0LjEwNzYxIDUuNzU2MTcgNC4zOTI1NCA1LjkzMTkxIDQuNTY4MjdMOC40MTM3MSA3LjA1MDA3TDAuNDk5OTg0IDcuMDUwMDdDMC4yNTE0NTYgNy4wNTAwNyAwLjA0OTk4NDcgNy4yNTE1NSAwLjA0OTk4NDcgNy41MDAwN0MwLjA0OTk4NDYgNy43NDg2IDAuMjUxNDU3IDcuOTUwMDcgMC40OTk5ODQgNy45NTAwN0w4LjQxMzcxIDcuOTUwMDdMNS45MzE5MSAxMC40MzE5QzUuNzU2MTcgMTAuNjA3NiA1Ljc1NjE3IDEwLjg5MjUgNS45MzE5MSAxMS4wNjgzQzYuMTA3NjQgMTEuMjQ0IDYuMzkyNTcgMTEuMjQ0IDYuNTY4MzEgMTEuMDY4M0w5LjgxODMgNy44MTgyN0M5Ljk5NDA0IDcuNjQyNTQgOS45OTQwNCA3LjM1NzYxIDkuODE4MyA3LjE4MTg4TDYuNTY4MyAzLjkzMTg4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sSm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuNTAwMDUgMS4wNTAwNUMxLjI1MTUyIDEuMDUwMDUgMS4wNTAwNSAxLjI1MTUyIDEuMDUwMDUgMS41MDAwNUMxLjA1MDA1IDEuNzQ4NTggMS4yNTE1MiAxLjk1MDA1IDEuNTAwMDUgMS45NTAwNUwxMy41IDEuOTUwMDVDMTMuNzQ4NiAxLjk1MDA1IDEzLjk1IDEuNzQ4NTggMTMuOTUgMS41MDAwNUMxMy45NSAxLjI1MTUyIDEzLjc0ODYgMS4wNTAwNSAxMy41IDEuMDUwMDVIMS41MDAwNVpNMy45MzE4OCA3LjQzMTY5QzMuNzU2MTQgNy42MDc0MyAzLjc1NjE0IDcuODkyMzYgMy45MzE4OCA4LjA2ODA5QzQuMTA3NjEgOC4yNDM4MyA0LjM5MjU0IDguMjQzODMgNC41NjgyNyA4LjA2ODA5TDcuMDUwMDcgNS41ODYyOVYxMy41QzcuMDUwMDcgMTMuNzQ4NSA3LjI1MTU1IDEzLjk1IDcuNTAwMDcgMTMuOTVDNy43NDg2IDEzLjk1IDcuOTUwMDcgMTMuNzQ4NSA3Ljk1MDA3IDEzLjVMNy45NTAwNyA1LjU4NjI5TDEwLjQzMTkgOC4wNjgwOUMxMC42MDc2IDguMjQzODMgMTAuODkyNSA4LjI0MzgzIDExLjA2ODMgOC4wNjgwOUMxMS4yNDQgNy44OTIzNSAxMS4yNDQgNy42MDc0MyAxMS4wNjgzIDcuNDMxNjlMNy44MTgyNyA0LjE4MTY5QzcuNjQyNTQgNC4wMDU5NiA3LjM1NzYxIDQuMDA1OTYgNy4xODE4OCA0LjE4MTY5TDMuOTMxODggNy40MzE2OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFhuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjI0MTgyIDIuMzIxODFDMy4zOTE5IDIuMjMxMzIgMy41Nzg0IDIuMjI2MDEgMy43MzMzOCAyLjMwNzgxTDEyLjczMzQgNy4wNTc4MUMxMi44OTc0IDcuMTQ0MzYgMTMgNy4zMTQ1NyAxMyA3LjVDMTMgNy42ODU0MyAxMi44OTc0IDcuODU1NjQgMTIuNzMzNCA3Ljk0MjE5TDMuNzMzMzggMTIuNjkyMkMzLjU3ODQgMTIuNzc0IDMuMzkxOSAxMi43Njg3IDMuMjQxODIgMTIuNjc4MkMzLjA5MTc1IDEyLjU4NzcgMyAxMi40MjUyIDMgMTIuMjVWMi43NUMzIDIuNTc0NzYgMy4wOTE3NSAyLjQxMjMgMy4yNDE4MiAyLjMyMTgxWk00IDMuNTc5MjVWMTEuNDIwN0wxMS40Mjg4IDcuNUw0IDMuNTc5MjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxRbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOCAyLjc1QzggMi40NzM4NiA3Ljc3NjE0IDIuMjUgNy41IDIuMjVDNy4yMjM4NiAyLjI1IDcgMi40NzM4NiA3IDIuNzVWN0gyLjc1QzIuNDczODYgNyAyLjI1IDcuMjIzODYgMi4yNSA3LjVDMi4yNSA3Ljc3NjE0IDIuNDczODYgOCAyLjc1IDhIN1YxMi4yNUM3IDEyLjUyNjEgNy4yMjM4NiAxMi43NSA3LjUgMTIuNzVDNy43NzYxNCAxMi43NSA4IDEyLjUyNjEgOCAxMi4yNVY4SDEyLjI1QzEyLjUyNjEgOCAxMi43NSA3Ljc3NjE0IDEyLjc1IDcuNUMxMi43NSA3LjIyMzg2IDEyLjUyNjEgNyAxMi4yNSA3SDhWMi43NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGVyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTkxIDAuODc2ODkyQzMuODQyMjIgMC44NzY4OTIgMC44NzcwNzUgMy44NDIwNCAwLjg3NzA3NSA3LjQ5OTcyQzAuODc3MDc1IDExLjE1NzQgMy44NDIyMiAxNC4xMjI2IDcuNDk5OTEgMTQuMTIyNkMxMS4xNTc2IDE0LjEyMjYgMTQuMTIyNyAxMS4xNTc0IDE0LjEyMjcgNy40OTk3MkMxNC4xMjI3IDMuODQyMDQgMTEuMTU3NiAwLjg3Njg5MiA3LjQ5OTkxIDAuODc2ODkyWk0xLjgyNzA3IDcuNDk5NzJDMS44MjcwNyA0LjM2NjcxIDQuMzY2ODkgMS44MjY4OSA3LjQ5OTkxIDEuODI2ODlDMTAuNjMyOSAxLjgyNjg5IDEzLjE3MjcgNC4zNjY3MSAxMy4xNzI3IDcuNDk5NzJDMTMuMTcyNyAxMC42MzI3IDEwLjYzMjkgMTMuMTcyNiA3LjQ5OTkxIDEzLjE3MjZDNC4zNjY4OSAxMy4xNzI2IDEuODI3MDcgMTAuNjMyNyAxLjgyNzA3IDcuNDk5NzJaTTcuNTAwMDMgNEM3Ljc3NjE3IDQgOC4wMDAwMyA0LjIyMzg2IDguMDAwMDMgNC41VjdIMTAuNUMxMC43NzYyIDcgMTEgNy4yMjM4NiAxMSA3LjVDMTEgNy43NzYxNCAxMC43NzYyIDggMTAuNSA4SDguMDAwMDNWMTAuNUM4LjAwMDAzIDEwLjc3NjEgNy43NzYxNyAxMSA3LjUwMDAzIDExQzcuMjIzODkgMTEgNy4wMDAwMyAxMC43NzYxIDcuMDAwMDMgMTAuNVY4SDQuNTAwMDNDNC4yMjM4OSA4IDQuMDAwMDMgNy43NzYxNCA0LjAwMDAzIDcuNUM0LjAwMDAzIDcuMjIzODYgNC4yMjM4OSA3IDQuNTAwMDMgN0g3LjAwMDAzVjQuNUM3LjAwMDAzIDQuMjIzODYgNy4yMjM4OSA0IDcuNTAwMDMgNFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHRyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjA3NTA1IDQuMTAwMDFDNS4wNzUwNSAyLjkxMTAzIDYuMjU3MjcgMS45MjUwMiA3LjUwMDA1IDEuOTI1MDJDOC43NDI4MyAxLjkyNTAyIDkuOTI1MDUgMi45MTEwMyA5LjkyNTA1IDQuMTAwMDFDOS45MjUwNSA1LjE5ODYxIDkuMzY3ODIgNS43MTQzNiA4LjYxODU0IDYuMzc4ODRMOC41ODc1NyA2LjQwNjNDNy44NDQ4MSA3LjA2NDY3IDYuOTI1MDUgNy44Nzk5NSA2LjkyNTA1IDkuNUM2LjkyNTA1IDkuODE3NTcgNy4xODI0OCAxMC4wNzUgNy41MDAwNSAxMC4wNzVDNy44MTc2MSAxMC4wNzUgOC4wNzUwNSA5LjgxNzU3IDguMDc1MDUgOS41QzguMDc1MDUgOC40MTUxNyA4LjYyOTQ1IDcuOTA2MjMgOS4zODE1NiA3LjIzOTI1TDkuNDAyMzggNy4yMjA3OUMxMC4xNDk2IDYuNTU4MjkgMTEuMDc1IDUuNzM3NzUgMTEuMDc1IDQuMTAwMDFDMTEuMDc1IDIuMTI3NTcgOS4yMTg2OSAwLjc3NTAyNCA3LjUwMDA1IDAuNzc1MDI0QzUuNzgxNCAwLjc3NTAyNCAzLjkyNTA1IDIuMTI3NTcgMy45MjUwNSA0LjEwMDAxQzMuOTI1MDUgNC40MTc1OCA0LjE4MjQ5IDQuNjc1MDEgNC41MDAwNSA0LjY3NTAxQzQuODE3NjEgNC42NzUwMSA1LjA3NTA1IDQuNDE3NTggNS4wNzUwNSA0LjEwMDAxWk03LjUwMDA1IDEzLjM1NzVDNy45ODMzIDEzLjM1NzUgOC4zNzUwNSAxMi45NjU3IDguMzc1MDUgMTIuNDgyNUM4LjM3NTA1IDExLjk5OTIgNy45ODMzIDExLjYwNzUgNy41MDAwNSAxMS42MDc1QzcuMDE2OCAxMS42MDc1IDYuNjI1MDUgMTEuOTk5MiA2LjYyNTA1IDEyLjQ4MjVDNi42MjUwNSAxMi45NjU3IDcuMDE2OCAxMy4zNTc1IDcuNTAwMDUgMTMuMzU3NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG5yPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wLjg3NzA3NSA3LjQ5OTcyQzAuODc3MDc1IDMuODQyMDQgMy44NDIyMiAwLjg3Njg5MiA3LjQ5OTkxIDAuODc2ODkyQzExLjE1NzYgMC44NzY4OTIgMTQuMTIyNyAzLjg0MjA0IDE0LjEyMjcgNy40OTk3MkMxNC4xMjI3IDExLjE1NzQgMTEuMTU3NiAxNC4xMjI2IDcuNDk5OTEgMTQuMTIyNkMzLjg0MjIyIDE0LjEyMjYgMC44NzcwNzUgMTEuMTU3NCAwLjg3NzA3NSA3LjQ5OTcyWk03LjQ5OTkxIDEuODI2ODlDNC4zNjY4OSAxLjgyNjg5IDEuODI3MDggNC4zNjY3MSAxLjgyNzA4IDcuNDk5NzJDMS44MjcwOCAxMC42MzI3IDQuMzY2ODkgMTMuMTcyNiA3LjQ5OTkxIDEzLjE3MjZDMTAuNjMyOSAxMy4xNzI2IDEzLjE3MjcgMTAuNjMyNyAxMy4xNzI3IDcuNDk5NzJDMTMuMTcyNyA0LjM2NjcxIDEwLjYzMjkgMS44MjY4OSA3LjQ5OTkxIDEuODI2ODlaTTguMjQ5OTMgMTAuNUM4LjI0OTkzIDEwLjkxNDIgNy45MTQxNCAxMS4yNSA3LjQ5OTkzIDExLjI1QzcuMDg1NzEgMTEuMjUgNi43NDk5MyAxMC45MTQyIDYuNzQ5OTMgMTAuNUM2Ljc0OTkzIDEwLjA4NTggNy4wODU3MSA5Ljc1IDcuNDk5OTMgOS43NUM3LjkxNDE0IDkuNzUgOC4yNDk5MyAxMC4wODU4IDguMjQ5OTMgMTAuNVpNNi4wNTAwMyA2LjI1QzYuMDUwMDMgNS41NzIxMSA2LjYzNTExIDQuOTI1IDcuNTAwMDMgNC45MjVDOC4zNjQ5NiA0LjkyNSA4Ljk1MDAzIDUuNTcyMTEgOC45NTAwMyA2LjI1QzguOTUwMDMgNi43NDExOCA4LjY4MDAyIDYuOTkyMTIgOC4yMTQ0NyA3LjI3NDk0QzguMTYyNTEgNy4zMDY1MSA4LjEwMjU4IDcuMzQxMzEgOC4wMzg0NyA3LjM3ODU0TDguMDM4NDEgNy4zNzg1OEM3Ljg1NTIxIDcuNDg0OTcgNy42Mzc4OCA3LjYxMTE5IDcuNDc0NDkgNy43Mzg0OUM3LjIzMjE0IDcuOTI3MzIgNi45NTAwMyA4LjIzMTk4IDYuOTUwMDMgOC43QzYuOTUwMDQgOS4wMDM3NiA3LjE5NjI4IDkuMjUgNy41MDAwNCA5LjI1QzcuODAyNCA5LjI1IDguMDQ3NzggOS4wMDYwMSA4LjA1MDAyIDguNzA0MTdMOC4wNTA1NiA4LjcwMzNDOC4wNTkyNCA4LjY4OTYgOC4wODQ5MyA4LjY1NzM1IDguMTUwNTggOC42MDYyQzguMjUyMDcgOC41MjcxMiA4LjM2NTA4IDguNDYxNjMgOC41MTU2NyA4LjM3NDM2TDguNTE1NzEgOC4zNzQzM0M4LjU5NDIyIDguMzI4ODMgOC42ODI5NiA4LjI3NzQxIDguNzg1NTkgOC4yMTUwNkM5LjMyMDA0IDcuODkwMzggMTAuMDUgNy4zNTM4MiAxMC4wNSA2LjI1QzEwLjA1IDQuOTI3ODkgOC45MzUxMSAzLjgyNSA3LjUwMDAzIDMuODI1QzYuMDY0OTYgMy44MjUgNC45NTAwMyA0LjkyNzg5IDQuOTUwMDMgNi4yNUM0Ljk1MDAzIDYuNTUzNzYgNS4xOTYyOCA2LjggNS41MDAwMyA2LjhDNS44MDM3OSA2LjggNi4wNTAwMyA2LjU1Mzc2IDYuMDUwMDMgNi4yNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHJyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk05LjQyNTAzIDMuNDQxMzZDMTAuMDU2MSAzLjIzNjU0IDEwLjc4MzcgMy4yNDAyIDExLjM3OTIgMy41NDYyM0MxMi43NTMyIDQuMjUyMjQgMTMuMzQ3NyA2LjA3MTkxIDEyLjc5NDYgOEMxMi41NDY1IDguODY0OSAxMi4xMTAyIDkuNzA0NzIgMTEuMTg2MSAxMC41NTI0QzEwLjI2MiAxMS40IDguOTgwMzQgMTEuOSA4LjM4NTcxIDExLjlDOC4xNzI2OSAxMS45IDggMTEuNzMyMSA4IDExLjUyNUM4IDExLjMxNzkgOC4xNzY0NCAxMS4xNSA4LjM4NTcxIDExLjE1QzkuMDY0OTcgMTEuMTUgOS42NzE4OSAxMC43ODA0IDEwLjM5MDYgMTAuMjM2QzEwLjk0MDYgOS44MTkzIDExLjM3MDEgOS4yODYzMyAxMS42MDggOC44MjE5MUMxMi4wNjI4IDcuOTMzNjcgMTIuMDc4MiA2LjY4MTc0IDExLjM0MzMgNi4zNDkwMUMxMC45OTA0IDYuNzM0NTUgMTAuNTI5NSA2Ljk1OTQ2IDkuOTc3MjUgNi45NTk0NkM4Ljc3NzMgNi45NTk0NiA4LjA3MDEgNS45OTQxMiA4LjEwMDUxIDUuMTIwMDlDOC4xMjk1NyA0LjI4NDc0IDguNjYwMzIgMy42ODk1NCA5LjQyNTAzIDMuNDQxMzZaTTMuNDI1MDMgMy40NDEzNkM0LjA1NjE0IDMuMjM2NTQgNC43ODM2NiAzLjI0MDIgNS4zNzkyMyAzLjU0NjIzQzYuNzUzMiA0LjI1MjI0IDcuMzQ3NjYgNi4wNzE5MSA2Ljc5NDYyIDhDNi41NDY1NCA4Ljg2NDkgNi4xMTAxOSA5LjcwNDcyIDUuMTg2MSAxMC41NTI0QzQuMjYyMDEgMTEuNCAyLjk4MDM0IDExLjkgMi4zODU3MSAxMS45QzIuMTcyNjkgMTEuOSAyIDExLjczMjEgMiAxMS41MjVDMiAxMS4zMTc5IDIuMTc2NDQgMTEuMTUgMi4zODU3MSAxMS4xNUMzLjA2NDk3IDExLjE1IDMuNjcxODkgMTAuNzgwNCA0LjM5MDU4IDEwLjIzNkM0Ljk0MDY1IDkuODE5MyA1LjM3MDE0IDkuMjg2MzMgNS42MDc5NyA4LjgyMTkxQzYuMDYyODIgNy45MzM2NyA2LjA3ODIxIDYuNjgxNzQgNS4zNDMzIDYuMzQ5MDFDNC45OTAzNyA2LjczNDU1IDQuNTI5NDggNi45NTk0NiAzLjk3NzI1IDYuOTU5NDZDMi43NzczIDYuOTU5NDYgMi4wNzAxIDUuOTk0MTIgMi4xMDA1MSA1LjEyMDA5QzIuMTI5NTcgNC4yODQ3NCAyLjY2MDMyIDMuNjg5NTQgMy40MjUwMyAzLjQ0MTM2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sb3I9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5ODUgMC44NzcwNDVDMy44NDIxNiAwLjg3NzA0NSAwLjg3NzAxNCAzLjg0MjE5IDAuODc3MDE0IDcuNDk5ODhDMC44NzcwMTQgMTEuMTU3NSAzLjg0MjE2IDE0LjEyMjcgNy40OTk4NSAxNC4xMjI3QzExLjE1NzUgMTQuMTIyNyAxNC4xMjI3IDExLjE1NzUgMTQuMTIyNyA3LjQ5OTg4QzE0LjEyMjcgMy44NDIxOSAxMS4xNTc1IDAuODc3MDQ1IDcuNDk5ODUgMC44NzcwNDVaTTEuODI3MDEgNy40OTk4OEMxLjgyNzAxIDQuMzY2ODYgNC4zNjY4MyAxLjgyNzA0IDcuNDk5ODUgMS44MjcwNEMxMC42MzI4IDEuODI3MDQgMTMuMTcyNyA0LjM2Njg2IDEzLjE3MjcgNy40OTk4OEMxMy4xNzI3IDEwLjYzMjkgMTAuNjMyOCAxMy4xNzI3IDcuNDk5ODUgMTMuMTcyN0M0LjM2NjgzIDEzLjE3MjcgMS44MjcwMSAxMC42MzI5IDEuODI3MDEgNy40OTk4OFpNNy40OTk5OSA5LjQ5OTk5QzguNjA0NTYgOS40OTk5OSA5LjQ5OTk5IDguNjA0NTYgOS40OTk5OSA3LjQ5OTk5QzkuNDk5OTkgNi4zOTU0MiA4LjYwNDU2IDUuNDk5OTkgNy40OTk5OSA1LjQ5OTk5QzYuMzk1NDIgNS40OTk5OSA1LjQ5OTk5IDYuMzk1NDIgNS40OTk5OSA3LjQ5OTk5QzUuNDk5OTkgOC42MDQ1NiA2LjM5NTQyIDkuNDk5OTkgNy40OTk5OSA5LjQ5OTk5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sYXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuMiAxSDQuMTc3NDFINC4xNzc0QzMuODY5MzYgMC45OTk5ODggMy42MDM2OCAwLjk5OTk3OCAzLjM4NjA5IDEuMDIwNjdDMy4xNTU3NiAxLjA0MjU3IDIuOTI4MjUgMS4wOTExMyAyLjcxNjI1IDEuMjIxMDRDMi41MTQ0MiAxLjM0NDcyIDIuMzQ0NzMgMS41MTQ0MiAyLjIyMTA0IDEuNzE2MjVDMi4wOTExMyAxLjkyODI1IDIuMDQyNTcgMi4xNTU3NiAyLjAyMDY3IDIuMzg2MDlDMS45OTk5OCAyLjYwMzY3IDEuOTk5OTkgMi44NjkzNSAyIDMuMTc3MzhWMy4xNzc0VjMuMlYxMS44VjExLjgyMjZWMTEuODIyNkMxLjk5OTk5IDEyLjEzMDcgMS45OTk5OCAxMi4zOTYzIDIuMDIwNjcgMTIuNjEzOUMyLjA0MjU3IDEyLjg0NDIgMi4wOTExMyAxMy4wNzE3IDIuMjIxMDQgMTMuMjgzN0MyLjM0NDczIDEzLjQ4NTYgMi41MTQ0MiAxMy42NTUzIDIuNzE2MjUgMTMuNzc5QzIuOTI4MjUgMTMuOTA4OSAzLjE1NTc2IDEzLjk1NzQgMy4zODYwOSAxMy45NzkzQzMuNjAzNjggMTQgMy44NjkzNyAxNCA0LjE3NzQxIDE0SDQuMkgxMC44SDEwLjgyMjZDMTEuMTMwNiAxNCAxMS4zOTYzIDE0IDExLjYxMzkgMTMuOTc5M0MxMS44NDQyIDEzLjk1NzQgMTIuMDcxNyAxMy45MDg5IDEyLjI4MzcgMTMuNzc5QzEyLjQ4NTYgMTMuNjU1MyAxMi42NTUzIDEzLjQ4NTYgMTIuNzc5IDEzLjI4MzdDMTIuOTA4OSAxMy4wNzE3IDEyLjk1NzQgMTIuODQ0MiAxMi45NzkzIDEyLjYxMzlDMTMgMTIuMzk2MyAxMyAxMi4xMzA2IDEzIDExLjgyMjZWMTEuOFYzLjJWMy4xNzc0MUMxMyAyLjg2OTM2IDEzIDIuNjAzNjggMTIuOTc5MyAyLjM4NjA5QzEyLjk1NzQgMi4xNTU3NiAxMi45MDg5IDEuOTI4MjUgMTIuNzc5IDEuNzE2MjVDMTIuNjU1MyAxLjUxNDQyIDEyLjQ4NTYgMS4zNDQ3MiAxMi4yODM3IDEuMjIxMDRDMTIuMDcxNyAxLjA5MTEzIDExLjg0NDIgMS4wNDI1NyAxMS42MTM5IDEuMDIwNjdDMTEuMzk2MyAwLjk5OTk3OCAxMS4xMzA2IDAuOTk5OTg4IDEwLjgyMjYgMUgxMC44SDQuMlpNMy4yMzg3NSAyLjA3MzY4QzMuMjY3MjIgMi4wNTYyMyAzLjMyMzYyIDIuMDMxMTIgMy40ODA3NSAyLjAxNjE4QzMuNjQ1MzIgMi4wMDA1MyAzLjg2Mjk4IDIgNC4yIDJIMTAuOEMxMS4xMzcgMiAxMS4zNTQ3IDIuMDAwNTMgMTEuNTE5MyAyLjAxNjE4QzExLjY3NjQgMi4wMzExMiAxMS43MzI4IDIuMDU2MjMgMTEuNzYxMyAyLjA3MzY4QzExLjgyODUgMi4xMTQ5MSAxMS44ODUxIDIuMTcxNDcgMTEuOTI2MyAyLjIzODc1QzExLjk0MzggMi4yNjcyMiAxMS45Njg5IDIuMzIzNjIgMTEuOTgzOCAyLjQ4MDc1QzExLjk5OTUgMi42NDUzMiAxMiAyLjg2Mjk4IDEyIDMuMlYxMS44QzEyIDEyLjEzNyAxMS45OTk1IDEyLjM1NDcgMTEuOTgzOCAxMi41MTkzQzExLjk2ODkgMTIuNjc2NCAxMS45NDM4IDEyLjczMjggMTEuOTI2MyAxMi43NjEzQzExLjg4NTEgMTIuODI4NSAxMS44Mjg1IDEyLjg4NTEgMTEuNzYxMyAxMi45MjYzQzExLjczMjggMTIuOTQzOCAxMS42NzY0IDEyLjk2ODkgMTEuNTE5MyAxMi45ODM4QzExLjM1NDcgMTIuOTk5NSAxMS4xMzcgMTMgMTAuOCAxM0g0LjJDMy44NjI5OCAxMyAzLjY0NTMyIDEyLjk5OTUgMy40ODA3NSAxMi45ODM4QzMuMzIzNjIgMTIuOTY4OSAzLjI2NzIyIDEyLjk0MzggMy4yMzg3NSAxMi45MjYzQzMuMTcxNDcgMTIuODg1MSAzLjExNDkxIDEyLjgyODUgMy4wNzM2OCAxMi43NjEzQzMuMDU2MjQgMTIuNzMyOCAzLjAzMTEyIDEyLjY3NjQgMy4wMTYxOCAxMi41MTkzQzMuMDAwNTMgMTIuMzU0NyAzIDEyLjEzNyAzIDExLjhWMy4yQzMgMi44NjI5OCAzLjAwMDUzIDIuNjQ1MzIgMy4wMTYxOCAyLjQ4MDc1QzMuMDMxMTIgMi4zMjM2MiAzLjA1NjI0IDIuMjY3MjIgMy4wNzM2OCAyLjIzODc1QzMuMTE0OTEgMi4xNzE0NyAzLjE3MTQ3IDIuMTE0OTEgMy4yMzg3NSAyLjA3MzY4Wk01IDEwQzQuNzIzODYgMTAgNC41IDEwLjIyMzkgNC41IDEwLjVDNC41IDEwLjc3NjEgNC43MjM4NiAxMSA1IDExSDhDOC4yNzYxNCAxMSA4LjUgMTAuNzc2MSA4LjUgMTAuNUM4LjUgMTAuMjIzOSA4LjI3NjE0IDEwIDggMTBINVpNNC41IDcuNUM0LjUgNy4yMjM4NiA0LjcyMzg2IDcgNSA3SDEwQzEwLjI3NjEgNyAxMC41IDcuMjIzODYgMTAuNSA3LjVDMTAuNSA3Ljc3NjE0IDEwLjI3NjEgOCAxMCA4SDVDNC43MjM4NiA4IDQuNSA3Ljc3NjE0IDQuNSA3LjVaTTUgNEM0LjcyMzg2IDQgNC41IDQuMjIzODYgNC41IDQuNUM0LjUgNC43NzYxNCA0LjcyMzg2IDUgNSA1SDEwQzEwLjI3NjEgNSAxMC41IDQuNzc2MTQgMTAuNSA0LjVDMTAuNSA0LjIyMzg2IDEwLjI3NjEgNCAxMCA0SDVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxpcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS44NDk5OCA3LjQ5OTk4QzEuODQ5OTggNC42NjQ1OCA0LjA1OTc5IDEuODQ5OTggNy40OTk5OCAxLjg0OTk4QzEwLjI3ODMgMS44NDk5OCAxMS42NTE1IDMuOTA2NCAxMi4yMzY3IDVIMTAuNUMxMC4yMjM5IDUgMTAgNS4yMjM4NiAxMCA1LjVDMTAgNS43NzYxNCAxMC4yMjM5IDYgMTAuNSA2SDEzLjVDMTMuNzc2MSA2IDE0IDUuNzc2MTQgMTQgNS41VjIuNUMxNCAyLjIyMzg2IDEzLjc3NjEgMiAxMy41IDJDMTMuMjIzOSAyIDEzIDIuMjIzODYgMTMgMi41VjQuMzEzMThDMTIuMjk1NSAzLjA3MTI2IDEwLjY2NTkgMC44NDk5NzYgNy40OTk5OCAwLjg0OTk3NkMzLjQzNzE2IDAuODQ5OTc2IDAuODQ5OTc2IDQuMTg1MzcgMC44NDk5NzYgNy40OTk5OEMwLjg0OTk3NiAxMC44MTQ2IDMuNDM3MTYgMTQuMTUgNy40OTk5OCAxNC4xNUM5LjQ0MzgyIDE0LjE1IDExLjA2MjIgMTMuMzgwOCAxMi4yMTQ1IDEyLjIwODRDMTIuODMxNSAxMS41ODA2IDEzLjMxMzMgMTAuODM5IDEzLjY0MTggMTAuMDQwN0MxMy43NDY5IDkuNzg1MzYgMTMuNjI1MSA5LjQ5MzE1IDEzLjM2OTggOS4zODgwNkMxMy4xMTQ0IDkuMjgyOTYgMTIuODIyMiA5LjQwNDc4IDEyLjcxNzEgOS42NjAxNEMxMi40MzYzIDEwLjM0MjUgMTIuMDI1MSAxMC45NzQ1IDExLjUwMTMgMTEuNTA3NEMxMC41Mjk1IDEyLjQ5NjMgOS4xNjUwNCAxMy4xNSA3LjQ5OTk4IDEzLjE1QzQuMDU5NzkgMTMuMTUgMS44NDk5OCAxMC4zMzU0IDEuODQ5OTggNy40OTk5OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGxyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00Ljg1MzU1IDIuMTQ2NDVDNS4wNDg4MiAyLjM0MTcxIDUuMDQ4ODIgMi42NTgyOSA0Ljg1MzU1IDIuODUzNTVMMy43MDcxMSA0SDlDMTEuNDg1MyA0IDEzLjUgNi4wMTQ3MiAxMy41IDguNUMxMy41IDEwLjk4NTMgMTEuNDg1MyAxMyA5IDEzSDVDNC43MjM4NiAxMyA0LjUgMTIuNzc2MSA0LjUgMTIuNUM0LjUgMTIuMjIzOSA0LjcyMzg2IDEyIDUgMTJIOUMxMC45MzMgMTIgMTIuNSAxMC40MzMgMTIuNSA4LjVDMTIuNSA2LjU2NyAxMC45MzMgNSA5IDVIMy43MDcxMUw0Ljg1MzU1IDYuMTQ2NDVDNS4wNDg4MiA2LjM0MTcxIDUuMDQ4ODIgNi42NTgyOSA0Ljg1MzU1IDYuODUzNTVDNC42NTgyOSA3LjA0ODgyIDQuMzQxNzEgNy4wNDg4MiA0LjE0NjQ1IDYuODUzNTVMMi4xNDY0NSA0Ljg1MzU1QzEuOTUxMTggNC42NTgyOSAxLjk1MTE4IDQuMzQxNzEgMi4xNDY0NSA0LjE0NjQ1TDQuMTQ2NDUgMi4xNDY0NUM0LjM0MTcxIDEuOTUxMTggNC42NTgyOSAxLjk1MTE4IDQuODUzNTUgMi4xNDY0NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHNyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjA0OTk1IDIuNzQ5OTVDMy4wNDk5NSAyLjQ0NjE5IDIuODAzNzEgMi4xOTk5NSAyLjQ5OTk1IDIuMTk5OTVDMi4xOTYxOSAyLjE5OTk1IDEuOTQ5OTUgMi40NDYxOSAxLjk0OTk1IDIuNzQ5OTVWMTIuMjVDMS45NDk5NSAxMi41NTM3IDIuMTk2MTkgMTIuOCAyLjQ5OTk1IDEyLjhDMi44MDM3MSAxMi44IDMuMDQ5OTUgMTIuNTUzNyAzLjA0OTk1IDEyLjI1VjIuNzQ5OTVaTTUuNzMzMzMgMi4zMDc3NkM1LjU3ODM1IDIuMjI1OTYgNS4zOTE4NSAyLjIzMTI3IDUuMjQxNzcgMi4zMjE3NkM1LjA5MTcgMi40MTIyNSA0Ljk5OTk1IDIuNTc0NzEgNC45OTk5NSAyLjc0OTk1VjEyLjI1QzQuOTk5OTUgMTIuNDI1MiA1LjA5MTcgMTIuNTg3NyA1LjI0MTc3IDEyLjY3ODFDNS4zOTE4NSAxMi43Njg2IDUuNTc4MzUgMTIuNzczOSA1LjczMzMzIDEyLjY5MjFMMTQuNzMzMyA3Ljk0MjE0QzE0Ljg5NzMgNy44NTU1OSAxNSA3LjY4NTM5IDE1IDcuNDk5OTVDMTUgNy4zMTQ1MiAxNC44OTczIDcuMTQ0MzEgMTQuNzMzMyA3LjA1Nzc2TDUuNzMzMzMgMi4zMDc3NlpNNS45OTk5NSAxMS40MjA3VjMuNTc5MkwxMy40Mjg3IDcuNDk5OTVMNS45OTk5NSAxMS40MjA3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sY3I9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTYuODUzNTcgMy44NTM1NUw3LjY1MzU1IDMuMDUzNTNDOC4yOTgxIDIuNDA5MDEgOS40Mjg1OCAxLjk2MTcyIDEwLjU1MiAxLjgwMTI1QzExLjEwNTYgMS43MjIxNyAxMS42MjkxIDEuNzE3MjUgMTIuMDU2NCAxLjc4MTI0QzEyLjQ5ODcgMS44NDc0OCAxMi43Njk4IDEuOTc2OTYgMTIuODk2NSAyLjEwMzU3QzEzLjAyMzEgMi4yMzAxOCAxMy4xNTI2IDIuNTAxMjUgMTMuMjE4OCAyLjk0MzU3QzEzLjI4MjggMy4zNzA4NiAxMy4yNzc5IDMuODk0MzkgMTMuMTk4OCA0LjQ0ODAxQzEzLjAzODMgNS41NzEzOSAxMi41OTEgNi43MDE4OCAxMS45NDY0IDcuMzQ2NDVMNy40OTk5OSAxMS43OTI5TDYuMzUzNTQgMTAuNjQ2NUM2LjE1ODI3IDEwLjQ1MTIgNS44NDE2OSAxMC40NTEyIDUuNjQ2NDMgMTAuNjQ2NUM1LjQ1MTE3IDEwLjg0MTcgNS40NTExNyAxMS4xNTgzIDUuNjQ2NDMgMTEuMzUzNkw3LjE0NjQ0IDEyLjg1MzZDNy4zNDE3MSAxMy4wNDg4IDcuNjU4MjkgMTMuMDQ4OCA3Ljg1MzU1IDEyLjg1MzZMOC40MDA3MyAxMi4zMDY0TDkuNTcxMjQgMTQuMjU3MkM5LjY1MDQ2IDE0LjM4OTMgOS43ODYwOCAxNC40Nzc0IDkuOTM4OSAxNC40OTYzQzEwLjA5MTcgMTQuNTE1MSAxMC4yNDQ3IDE0LjQ2MjQgMTAuMzUzNSAxNC4zNTM2TDEyLjM1MzUgMTIuMzUzNkMxMi40NjQ4IDEyLjI0MjMgMTIuNTE3MiAxMi4wODUxIDEyLjQ5NSAxMS45MjkzTDEyLjAzMDMgOC42NzY3OUwxMi42NTM2IDguMDUzNTVDMTMuNTA5IDcuMTk4MDggMTQuMDExNyA1LjgyODU1IDE0LjE4ODcgNC41ODk0M0MxNC4yNzg0IDMuOTYxOCAxNC4yODkxIDMuMzM4NDcgMTQuMjA3OCAyLjc5NTQ2QzE0LjEyODcgMi4yNjc0OCAxMy45NTE5IDEuNzQ0ODIgMTMuNjAzNSAxLjM5NjQ1QzEzLjI1NTIgMS4wNDgwOSAxMi43MzI1IDAuODcxMzMyIDEyLjIwNDUgMC43OTIyNjRDMTEuNjYxNSAwLjcxMDk0NSAxMS4wMzgyIDAuNzIxNjQ0IDEwLjQxMDUgMC44MTEzQzkuMTcxNDMgMC45ODgzMDYgNy44MDE4OSAxLjQ5MSA2Ljk0NjQ0IDIuMzQ2NDJMNi4zMjMyMiAyLjk2OTY4TDMuMDcwNzEgMi41MDUwNEMyLjkxNDkyIDIuNDgyNzggMi43NTc3MyAyLjUzNTE3IDIuNjQ2NDUgMi42NDY0NkwwLjY0NjQ1MSA0LjY0NjQ1QzAuNTM3NTc5IDQuNzU1MzMgMC40ODQ5MzggNC45MDgyOSAwLjUwMzc1IDUuMDYxMUMwLjUyMjU2MyA1LjIxMzkxIDAuNjEwNzMgNS4zNDk1NCAwLjc0Mjc1NyA1LjQyODc2TDIuNjkzNjQgNi41OTkyOEwyLjE0NjQ2IDcuMTQ2NDVDMi4wNTI3IDcuMjQwMjIgMi4wMDAwMiA3LjM2NzQgMi4wMDAwMiA3LjUwMDAxQzIuMDAwMDIgNy42MzI2MSAyLjA1MjcgNy43NTk3OSAyLjE0NjQ2IDcuODUzNTZMMy42NDY0NyA5LjM1MzU2QzMuODQxNzMgOS41NDg4MyA0LjE1ODMxIDkuNTQ4ODMgNC4zNTM1NyA5LjM1MzU2QzQuNTQ4ODQgOS4xNTgzIDQuNTQ4ODQgOC44NDE3MiA0LjM1MzU3IDguNjQ2NDZMMy4yMDcxMiA3LjUwMDAxTDMuODUzNTcgNi44NTM1Nkw2Ljg1MzU3IDMuODUzNTVaTTEwLjA5OTMgMTMuMTkzNkw5LjEyOTU5IDExLjU3NzVMMTEuMTQ2NCA5LjU2MDY3TDExLjQ2OTcgMTEuODIzMkwxMC4wOTkzIDEzLjE5MzZaTTMuNDIyNTEgNS44NzA0MUw1LjQzOTM1IDMuODUzNTZMMy4xNzY3OCAzLjUzMDM0TDEuODA2MzggNC45MDA3NEwzLjQyMjUxIDUuODcwNDFaTTIuMzUzNTYgMTAuMzUzNUMyLjU0ODgyIDEwLjE1ODMgMi41NDg4MiA5Ljg0MTcgMi4zNTM1NiA5LjY0NjQ0QzIuMTU4MyA5LjQ1MTE4IDEuODQxNzEgOS40NTExOCAxLjY0NjQ1IDkuNjQ2NDRMMC42NDY0NTEgMTAuNjQ2NEMwLjQ1MTE4OCAxMC44NDE3IDAuNDUxMTg4IDExLjE1ODMgMC42NDY0NTEgMTEuMzUzNUMwLjg0MTcxMyAxMS41NDg4IDEuMTU4MyAxMS41NDg4IDEuMzUzNTYgMTEuMzUzNUwyLjM1MzU2IDEwLjM1MzVaTTMuODUzNTggMTEuODUzNkM0LjA0ODg0IDExLjY1ODMgNC4wNDg4NSAxMS4zNDE3IDMuODUzNTkgMTEuMTQ2NUMzLjY1ODMzIDEwLjk1MTIgMy4zNDE3NSAxMC45NTEyIDMuMTQ2NDggMTEuMTQ2NUwxLjE0NjQ1IDEzLjE0NjRDMC45NTExOSAxMy4zNDE3IDAuOTUxMTg3IDEzLjY1ODMgMS4xNDY0NSAxMy44NTM1QzEuMzQxNzEgMTQuMDQ4OCAxLjY1ODI5IDE0LjA0ODggMS44NTM1NSAxMy44NTM2TDMuODUzNTggMTEuODUzNlpNNS4zNTM1NiAxMy4zNTM1QzUuNTQ4ODIgMTMuMTU4MyA1LjU0ODgyIDEyLjg0MTcgNS4zNTM1NiAxMi42NDY0QzUuMTU4MyAxMi40NTEyIDQuODQxNzEgMTIuNDUxMiA0LjY0NjQ1IDEyLjY0NjRMMy42NDY0NSAxMy42NDY0QzMuNDUxMTkgMTMuODQxNyAzLjQ1MTE5IDE0LjE1ODMgMy42NDY0NSAxNC4zNTM1QzMuODQxNzEgMTQuNTQ4OCA0LjE1ODMgMTQuNTQ4OCA0LjM1MzU2IDE0LjM1MzVMNS4zNTM1NiAxMy4zNTM1Wk05LjQ5OTk3IDYuNzQ4ODFDMTAuMTg5NyA2Ljc0ODgxIDEwLjc0ODggNi4xODk3IDEwLjc0ODggNS41QzEwLjc0ODggNC44MTAzIDEwLjE4OTcgNC4yNTExOCA5LjQ5OTk3IDQuMjUxMThDOC44MTAyNiA0LjI1MTE4IDguMjUxMTUgNC44MTAzIDguMjUxMTUgNS41QzguMjUxMTUgNi4xODk3IDguODEwMjYgNi43NDg4MSA5LjQ5OTk3IDYuNzQ4ODFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx1cj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41OTY2NCAyLjkzNjI4QzcuNzYwODUgMy4wNjQwMSA4LjAwMDEyIDIuOTQ2OTggOC4wMDAxMiAyLjczODk1VjEuOTk5OThDOS45ODE0MyAyIDExLjE4NDggMi4zNjM3IDExLjkxMDUgMy4wODk0NUMxMi42MzYzIDMuODE1MjIgMTMgNS4wMTg2IDEzIDYuOTk5OThDMTMgNy4yNzYxMyAxMy4yMjM5IDcuNDk5OTggMTMuNSA3LjQ5OTk4QzEzLjc3NjEgNy40OTk5OCAxNCA3LjI3NjEzIDE0IDYuOTk5OThDMTQgNC45NDM4IDEzLjYzMjUgMy4zOTcxOSAxMi42MTc2IDIuMzgyMzRDMTEuNjAyOCAxLjM2NzUyIDEwLjA1NjIgMC45OTk5OTkgOC4wMDAxMiAwLjk5OTk4NFYwLjI2MTI2NkM4LjAwMDEyIDAuMDUzMjI5MyA3Ljc2MDg1IC0wLjA2Mzc5NDQgNy41OTY2NCAwLjA2MzkyOEw2LjAwMzg0IDEuMzAyNzdDNS44NzUxNiAxLjQwMjg2IDUuODc1MTYgMS41OTczNSA2LjAwMzg0IDEuNjk3NDRMNy41OTY2NCAyLjkzNjI4Wk05LjUgNUgyLjVDMi4yMjM4NiA1IDIgNS4yMjM4NiAyIDUuNVYxMi41QzIgMTIuNzc2MSAyLjIyMzg2IDEzIDIuNSAxM0g5LjVDOS43NzYxNCAxMyAxMCAxMi43NzYxIDEwIDEyLjVWNS41QzEwIDUuMjIzODYgOS43NzYxNCA1IDkuNSA1Wk0yLjUgNEMxLjY3MTU3IDQgMSA0LjY3MTU3IDEgNS41VjEyLjVDMSAxMy4zMjg0IDEuNjcxNTcgMTQgMi41IDE0SDkuNUMxMC4zMjg0IDE0IDExIDEzLjMyODQgMTEgMTIuNVY1LjVDMTEgNC42NzE1NyAxMC4zMjg0IDQgOS41IDRIMi41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuODE4MzIgMC42ODE3OUM3LjY0MjU4IDAuNTA2MDU0IDcuMzU3NjYgMC41MDYwNTQgNy4xODE5MiAwLjY4MTc5TDUuMTgxOTIgMi42ODE3OUM1LjAwNjE5IDIuODU3NTMgNS4wMDYxOSAzLjE0MjQ1IDUuMTgxOTIgMy4zMTgxOUM1LjM1NzY2IDMuNDkzOTIgNS42NDI1OCAzLjQ5MzkyIDUuODE4MzIgMy4zMTgxOUw3LjA1MDEyIDIuMDg2MzhMNy4wNTAxMiA1LjUwMDIzQzcuMDUwMTIgNS43NDg3NiA3LjI1MTU5IDUuOTUwMjMgNy41MDAxMiA1Ljk1MDIzQzcuNzQ4NjUgNS45NTAyMyA3Ljk1MDEyIDUuNzQ4NzYgNy45NTAxMiA1LjUwMDIzTDcuOTUwMTIgMi4wODYzOEw5LjE4MTkyIDMuMzE4MTlDOS4zNTc2NiAzLjQ5MzkyIDkuNjQyNTggMy40OTM5MiA5LjgxODMyIDMuMzE4MTlDOS45OTQwNiAzLjE0MjQ1IDkuOTk0MDYgMi44NTc1MyA5LjgxODMyIDIuNjgxNzlMNy44MTgzMiAwLjY4MTc5Wk03Ljk1MDEyIDEyLjkxMzZWOS41MDAyM0M3Ljk1MDEyIDkuMjUxNyA3Ljc0ODY1IDkuMDUwMjMgNy41MDAxMiA5LjA1MDIzQzcuMjUxNTkgOS4wNTAyMyA3LjA1MDEyIDkuMjUxNyA3LjA1MDEyIDkuNTAwMjNWMTIuOTEzNkw1LjgxODMyIDExLjY4MThDNS42NDI1OCAxMS41MDYxIDUuMzU3NjYgMTEuNTA2MSA1LjE4MTkyIDExLjY4MThDNS4wMDYxOSAxMS44NTc1IDUuMDA2MTkgMTIuMTQyNCA1LjE4MTkyIDEyLjMxODJMNy4xODE5MiAxNC4zMTgyQzcuMjY2MzIgMTQuNDAyNiA3LjM4MDc3IDE0LjQ1IDcuNTAwMTIgMTQuNDVDNy42MTk0NyAxNC40NSA3LjczMzkzIDE0LjQwMjYgNy44MTgzMiAxNC4zMTgyTDkuODE4MzIgMTIuMzE4MkM5Ljk5NDA2IDEyLjE0MjQgOS45OTQwNiAxMS44NTc1IDkuODE4MzIgMTEuNjgxOEM5LjY0MjU4IDExLjUwNjEgOS4zNTc2NiAxMS41MDYxIDkuMTgxOTIgMTEuNjgxOEw3Ljk1MDEyIDEyLjkxMzZaTTEuNDk5OTQgNy4wMDAxN0MxLjIyMzggNy4wMDAxNyAwLjk5OTkzOSA3LjIyNDAzIDAuOTk5OTM5IDcuNTAwMTdDMC45OTk5MzkgNy43NzYzMSAxLjIyMzggOC4wMDAxNyAxLjQ5OTk0IDguMDAwMTdMMTMuNDk5OSA4LjAwMDE3QzEzLjc3NjEgOC4wMDAxNyAxMy45OTk5IDcuNzc2MzEgMTMuOTk5OSA3LjUwMDE3QzEzLjk5OTkgNy4yMjQwMyAxMy43NzYxIDcuMDAwMTcgMTMuNDk5OSA3LjAwMDE3TDEuNDk5OTQgNy4wMDAxN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHByPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xNCAxMi44NUwxIDEyLjg1TDEgMTQuMTVMMTQgMTQuMTVMMTQgMTIuODVaTTE0IDguODUwMDJMMSA4Ljg1MDAyTDEgMTAuMTVMMTQgMTAuMTVMMTQgOC44NTAwMlpNMSA0Ljg1MDAzTDE0IDQuODUwMDNMMTQgNi4xNTAwM0wxIDYuMTUwMDJMMSA0Ljg1MDAzWk0xNCAwLjg1MDAyNUwxIDAuODUwMDI1TDEgMi4xNTAwMkwxNCAyLjE1MDAyTDE0IDAuODUwMDI1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZnI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuNSA0QzAuMjIzODU4IDQgMCA0LjIyMzg2IDAgNC41VjEwLjVDMCAxMC43NzYxIDAuMjIzODU4IDExIDAuNSAxMUgxNC41QzE0Ljc3NjEgMTEgMTUgMTAuNzc2MSAxNSAxMC41VjQuNUMxNSA0LjIyMzg2IDE0Ljc3NjEgNCAxNC41IDRIMC41Wk0xIDEwVjVIMi4wNzVWNy41QzIuMDc1IDcuNzM0NzIgMi4yNjUyOCA3LjkyNSAyLjUgNy45MjVDMi43MzQ3MiA3LjkyNSAyLjkyNSA3LjczNDcyIDIuOTI1IDcuNVY1SDQuMDc1VjYuNUM0LjA3NSA2LjczNDcyIDQuMjY1MjggNi45MjUgNC41IDYuOTI1QzQuNzM0NzIgNi45MjUgNC45MjUgNi43MzQ3MiA0LjkyNSA2LjVWNUg2LjA3NVY2LjVDNi4wNzUgNi43MzQ3MiA2LjI2NTI4IDYuOTI1IDYuNSA2LjkyNUM2LjczNDcyIDYuOTI1IDYuOTI1IDYuNzM0NzIgNi45MjUgNi41VjVIOC4wNzVWNy41QzguMDc1IDcuNzM0NzIgOC4yNjUyOCA3LjkyNSA4LjUgNy45MjVDOC43MzQ3MiA3LjkyNSA4LjkyNSA3LjczNDcyIDguOTI1IDcuNVY1SDEwLjA3NVY2LjVDMTAuMDc1IDYuNzM0NzIgMTAuMjY1MyA2LjkyNSAxMC41IDYuOTI1QzEwLjczNDcgNi45MjUgMTAuOTI1IDYuNzM0NzIgMTAuOTI1IDYuNVY1SDEyLjA3NVY2LjVDMTIuMDc1IDYuNzM0NzIgMTIuMjY1MyA2LjkyNSAxMi41IDYuOTI1QzEyLjczNDcgNi45MjUgMTIuOTI1IDYuNzM0NzIgMTIuOTI1IDYuNVY1SDE0VjEwSDFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxocj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC41IDBDMC4yMjM4NTggMCAwIDAuMjIzODU4IDAgMC41VjE0LjVDMCAxNC43NzYxIDAuMjIzODU4IDE1IDAuNSAxNUg0LjVDNC43NzYxNCAxNSA1IDE0Ljc3NjEgNSAxNC41VjVIMTQuNUMxNC43NzYxIDUgMTUgNC43NzYxNCAxNSA0LjVWMC41QzE1IDAuMjIzODU4IDE0Ljc3NjEgMCAxNC41IDBIMC41Wk0xIDQuMDc1MDVMMSAxSDQuMDc1MDJDNC4wNzUwMiAxIDQuMDc1MDIgMSA0LjA3NTAyIDFMNC4wNzUwNSA0LjA3NTA3TDEgNC4wNzUwNVpNMC45OTk5OTcgNC45MjUwNUwxIDE0SDRWMTIuOTI1SDIuNzUwMDJDMi41MTUzIDEyLjkyNSAyLjMyNTAyIDEyLjczNDggMi4zMjUwMiAxMi41QzIuMzI1MDIgMTIuMjY1MyAyLjUxNTMgMTIuMDc1IDIuNzUwMDIgMTIuMDc1SDRWMTAuOTI1SDIuMjUwMDJDMi4wMTUzIDEwLjkyNSAxLjgyNTAyIDEwLjczNDcgMS44MjUwMiAxMC41QzEuODI1MDIgMTAuMjY1MyAyLjAxNTMgMTAuMDc1IDIuMjUwMDIgMTAuMDc1SDRWOC45MjUwNEwyLjc1MDAyIDguOTI1MDJDMi41MTUzIDguOTI1MDIgMi4zMjUwMiA4LjczNDc0IDIuMzI1MDIgOC41MDAwMkMyLjMyNTAzIDguMjY1MjkgMi41MTUzMSA4LjA3NTAyIDIuNzUwMDMgOC4wNzUwMkw0IDguMDc1MDRWNi45MjUwMkwyLjc0OTk5IDYuOTI1QzIuNTE1MjcgNi45MjUgMi4zMjUgNi43MzQ3MiAyLjMyNSA2LjVDMi4zMjUgNi4yNjUyOCAyLjUxNTI5IDYuMDc1IDIuNzUwMDEgNi4wNzVMNCA2LjA3NTAyVjQuOTI1MDdMMC45OTk5OTcgNC45MjUwNVpNNC45MjUwNSA0SDYuMDc1VjIuNzUwMDZDNi4wNzUgMi41MTUzNCA2LjI2NTI4IDIuMzI1MDYgNi41IDIuMzI1MDZDNi43MzQ3MiAyLjMyNTA2IDYuOTI1IDIuNTE1MzQgNi45MjUgMi43NTAwNlY0SDguMDc1MDJWMi43NTAwNUM4LjA3NTAyIDIuNTE1MzMgOC4yNjUzIDIuMzI1MDUgOC41MDAwMiAyLjMyNTA1QzguNzM0NzQgMi4zMjUwNSA4LjkyNTAyIDIuNTE1MzMgOC45MjUwMiAyLjc1MDA1VjRIMTAuMDc1MVYyLjI1MDA1QzEwLjA3NTEgMi4wMTUzMyAxMC4yNjUzIDEuODI1MDUgMTAuNTAwMSAxLjgyNTA1QzEwLjczNDggMS44MjUwNSAxMC45MjUxIDIuMDE1MzMgMTAuOTI1MSAyLjI1MDA1VjRIMTIuMDc1MVYyLjc1MDA1QzEyLjA3NTEgMi41MTUzMyAxMi4yNjU0IDIuMzI1MDUgMTIuNTAwMSAyLjMyNTA1QzEyLjczNDggMi4zMjUwNSAxMi45MjUxIDIuNTE1MzMgMTIuOTI1MSAyLjc1MDA1VjRIMTRWMUg0LjkyNTAyTDQuOTI1MDUgNFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGdyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yIDEuNUMyIDEuNzc2MTQgMS43NzYxNCAyIDEuNSAyQzEuMjIzODYgMiAxIDEuNzc2MTQgMSAxLjVDMSAxLjIyMzg2IDEuMjIzODYgMSAxLjUgMUMxLjc3NjE0IDEgMiAxLjIyMzg2IDIgMS41Wk0yIDVMMiAxMEgxM1Y1SDJaTTIgNEMxLjQ0NzcyIDQgMSA0LjQ0NzcyIDEgNVYxMEMxIDEwLjU1MjMgMS40NDc3MiAxMSAyIDExSDEzQzEzLjU1MjMgMTEgMTQgMTAuNTUyMyAxNCAxMFY1QzE0IDQuNDQ3NzIgMTMuNTUyMyA0IDEzIDRIMlpNMS41IDE0QzEuNzc2MTQgMTQgMiAxMy43NzYxIDIgMTMuNUMyIDEzLjIyMzkgMS43NzYxNCAxMyAxLjUgMTNDMS4yMjM4NiAxMyAxIDEzLjIyMzkgMSAxMy41QzEgMTMuNzc2MSAxLjIyMzg2IDE0IDEuNSAxNFpNNCAxLjVDNCAxLjc3NjE0IDMuNzc2MTQgMiAzLjUgMkMzLjIyMzg2IDIgMyAxLjc3NjE0IDMgMS41QzMgMS4yMjM4NiAzLjIyMzg2IDEgMy41IDFDMy43NzYxNCAxIDQgMS4yMjM4NiA0IDEuNVpNMy41IDE0QzMuNzc2MTQgMTQgNCAxMy43NzYxIDQgMTMuNUM0IDEzLjIyMzkgMy43NzYxNCAxMyAzLjUgMTNDMy4yMjM4NiAxMyAzIDEzLjIyMzkgMyAxMy41QzMgMTMuNzc2MSAzLjIyMzg2IDE0IDMuNSAxNFpNNiAxLjVDNiAxLjc3NjE0IDUuNzc2MTQgMiA1LjUgMkM1LjIyMzg2IDIgNSAxLjc3NjE0IDUgMS41QzUgMS4yMjM4NiA1LjIyMzg2IDEgNS41IDFDNS43NzYxNCAxIDYgMS4yMjM4NiA2IDEuNVpNNS41IDE0QzUuNzc2MTQgMTQgNiAxMy43NzYxIDYgMTMuNUM2IDEzLjIyMzkgNS43NzYxNCAxMyA1LjUgMTNDNS4yMjM4NiAxMyA1IDEzLjIyMzkgNSAxMy41QzUgMTMuNzc2MSA1LjIyMzg2IDE0IDUuNSAxNFpNOCAxLjVDOCAxLjc3NjE0IDcuNzc2MTQgMiA3LjUgMkM3LjIyMzg2IDIgNyAxLjc3NjE0IDcgMS41QzcgMS4yMjM4NiA3LjIyMzg2IDEgNy41IDFDNy43NzYxNCAxIDggMS4yMjM4NiA4IDEuNVpNNy41IDE0QzcuNzc2MTQgMTQgOCAxMy43NzYxIDggMTMuNUM4IDEzLjIyMzkgNy43NzYxNCAxMyA3LjUgMTNDNy4yMjM4NiAxMyA3IDEzLjIyMzkgNyAxMy41QzcgMTMuNzc2MSA3LjIyMzg2IDE0IDcuNSAxNFpNMTAgMS41QzEwIDEuNzc2MTQgOS43NzYxNCAyIDkuNSAyQzkuMjIzODYgMiA5IDEuNzc2MTQgOSAxLjVDOSAxLjIyMzg2IDkuMjIzODYgMSA5LjUgMUM5Ljc3NjE0IDEgMTAgMS4yMjM4NiAxMCAxLjVaTTkuNSAxNEM5Ljc3NjE0IDE0IDEwIDEzLjc3NjEgMTAgMTMuNUMxMCAxMy4yMjM5IDkuNzc2MTQgMTMgOS41IDEzQzkuMjIzODYgMTMgOSAxMy4yMjM5IDkgMTMuNUM5IDEzLjc3NjEgOS4yMjM4NiAxNCA5LjUgMTRaTTEyIDEuNUMxMiAxLjc3NjE0IDExLjc3NjEgMiAxMS41IDJDMTEuMjIzOSAyIDExIDEuNzc2MTQgMTEgMS41QzExIDEuMjIzODYgMTEuMjIzOSAxIDExLjUgMUMxMS43NzYxIDEgMTIgMS4yMjM4NiAxMiAxLjVaTTExLjUgMTRDMTEuNzc2MSAxNCAxMiAxMy43NzYxIDEyIDEzLjVDMTIgMTMuMjIzOSAxMS43NzYxIDEzIDExLjUgMTNDMTEuMjIzOSAxMyAxMSAxMy4yMjM5IDExIDEzLjVDMTEgMTMuNzc2MSAxMS4yMjM5IDE0IDExLjUgMTRaTTE0IDEuNUMxNCAxLjc3NjE0IDEzLjc3NjEgMiAxMy41IDJDMTMuMjIzOSAyIDEzIDEuNzc2MTQgMTMgMS41QzEzIDEuMjIzODYgMTMuMjIzOSAxIDEzLjUgMUMxMy43NzYxIDEgMTQgMS4yMjM4NiAxNCAxLjVaTTEzLjUgMTRDMTMuNzc2MSAxNCAxNCAxMy43NzYxIDE0IDEzLjVDMTQgMTMuMjIzOSAxMy43NzYxIDEzIDEzLjUgMTNDMTMuMjIzOSAxMyAxMyAxMy4yMjM5IDEzIDEzLjVDMTMgMTMuNzc2MSAxMy4yMjM5IDE0IDEzLjUgMTRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx2cj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNiAzLjVDNiAyLjY3MTU3IDYuNjcxNTcgMiA3LjUgMkM4LjMyODQzIDIgOSAyLjY3MTU3IDkgMy41QzkgNC4zMjg0MyA4LjMyODQzIDUgNy41IDVDNi42NzE1NyA1IDYgNC4zMjg0MyA2IDMuNVpNOCA1Ljk0OTk5QzkuMTQxMTIgNS43MTgzNiAxMCA0LjcwOTQ4IDEwIDMuNUMxMCAyLjExOTI5IDguODgwNzEgMSA3LjUgMUM2LjExOTI5IDEgNSAyLjExOTI5IDUgMy41QzUgNC43MDk0OCA1Ljg1ODg4IDUuNzE4MzYgNyA1Ljk0OTk5VjEzLjVDNyAxMy43NzYxIDcuMjIzODYgMTQgNy41IDE0QzcuNzc2MTQgMTQgOCAxMy43NzYxIDggMTMuNVY1Ljk0OTk5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQ3I9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEwIDMuNUMxMCA0LjcwOTQ4IDkuMTQxMTIgNS43MTgzNiA4IDUuOTQ5OTlWMTMuNUM4IDEzLjc3NjEgNy43NzYxNCAxNCA3LjUgMTRDNy4yMjM4NiAxNCA3IDEzLjc3NjEgNyAxMy41VjUuOTQ5OTlDNS44NTg4OCA1LjcxODM2IDUgNC43MDk0OCA1IDMuNUM1IDIuMTE5MjkgNi4xMTkyOSAxIDcuNSAxQzguODgwNzEgMSAxMCAyLjExOTI5IDEwIDMuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG1yPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wLjg3NzA3NSA3LjQ5OTg4QzAuODc3MDc1IDMuODQyMTkgMy44NDIyMiAwLjg3NzA0NSA3LjQ5OTkxIDAuODc3MDQ1QzExLjE1NzYgMC44NzcwNDUgMTQuMTIyNyAzLjg0MjE5IDE0LjEyMjcgNy40OTk4OEMxNC4xMjI3IDExLjE1NzUgMTEuMTU3NiAxNC4xMjI3IDcuNDk5OTEgMTQuMTIyN0MzLjg0MjIyIDE0LjEyMjcgMC44NzcwNzUgMTEuMTU3NSAwLjg3NzA3NSA3LjQ5OTg4Wk03LjQ5OTkxIDEuODI3MDRDNC4zNjY4OSAxLjgyNzA0IDEuODI3MDggNC4zNjY4NiAxLjgyNzA4IDcuNDk5ODhDMS44MjcwOCAxMC42MzI5IDQuMzY2ODkgMTMuMTcyNyA3LjQ5OTkxIDEzLjE3MjdDMTAuNjMyOSAxMy4xNzI3IDEzLjE3MjcgMTAuNjMyOSAxMy4xNzI3IDcuNDk5ODhDMTMuMTcyNyA0LjM2Njg2IDEwLjYzMjkgMS44MjcwNCA3LjQ5OTkxIDEuODI3MDRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4wNVwiLGQ6XCJNNi43ODI5NiAxMy4zNzZDOC43MzkwNCA5Ljk1Mjg0IDguNzM5MDQgNS4wNDcxOSA2Ljc4Mjk2IDEuNjI0MDVMNy4yMTcwOCAxLjM3NTk4QzkuMjYxIDQuOTUyODMgOS4yNjEgMTAuMDQ3MiA3LjIxNzA4IDEzLjYyNEw2Ljc4Mjk2IDEzLjM3NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjFcIixkOlwiTTcuMjgyMDQgMTMuNDc3NUM5LjIzOTI5IDkuOTk1MjMgOS4yMzkyOSA1LjAwNDc1IDcuMjgyMDQgMS41MjI0OEw3LjcxNzkxIDEuMjc3NUM5Ljc2MDY3IDQuOTExOSA5Ljc2MDY3IDEwLjA4ODEgNy43MTc5MSAxMy43MjI1TDcuMjgyMDQgMTMuNDc3NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjE1XCIsZDpcIk03LjgyMDk4IDEzLjUwNjRDOS43MjUwMiA5Ljk5NTIzIDkuNzI2MzYgNS4wMTQxMSA3LjgyNDkyIDEuNTAwODRMOC4yNjQ2NSAxLjI2Mjg1QzEwLjI0NjUgNC45MjQ2NiAxMC4yNDUxIDEwLjA4NSA4LjI2MDUyIDEzLjc0NDhMNy44MjA5OCAxMy41MDY0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMlwiLGQ6XCJNOC40MTI4NCAxMy40MjlDMTAuMTk1MiA5LjkyODQyIDEwLjE5NTcgNS4wNzUzNyA4LjQxNDM1IDEuNTc0MDJMOC44NTk5OSAxLjM0NzI5QzEwLjcxMzkgNC45OTExMyAxMC43MTMzIDEwLjAxMjggOC44NTg0MSAxMy42NTU5TDguNDEyODQgMTMuNDI5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMjVcIixkOlwiTTkuMDI0NDEgMTMuMjk1NkMxMC42NTY3IDkuODM3OSAxMC42NTg2IDUuMTc3MTUgOS4wMzAwNSAxLjcxNjU2TDkuNDgyNDUgMS41MDM2NkMxMS4xNzQ1IDUuMDk5MTkgMTEuMTcyNiA5LjkxNjI5IDkuNDc2NTcgMTMuNTA5MUw5LjAyNDQxIDEzLjI5NTZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4zXCIsZDpcIk05LjY2ODA5IDEzLjA2NTVDMTEuMTA5NyA5LjY5NTcyIDExLjExMDcgNS4zMTIxIDkuNjcwODggMS45NDA5NUwxMC4xMzA3IDEuNzQ0NTdDMTEuNjI0MSA1LjI0MTIxIDExLjYyMzEgOS43NjY4MyAxMC4xMjc4IDEzLjI2MjJMOS42NjgwOSAxMy4wNjU1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMzVcIixkOlwiTTEwLjMzMSAxMi43NDU2QzExLjU1NTEgOS41MjA3MyAxMS41NTY0IDUuNDkxMDMgMTAuMzM0NyAyLjI2NDQ0TDEwLjgwMjQgMi4wODc0QzEyLjA2NzIgNS40MjgxNSAxMi4wNjU5IDkuNTgzOTQgMTAuNzk4NSAxMi45MjMxTDEwLjMzMSAxMi43NDU2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuNFwiLGQ6XCJNMTEuMDE1NSAxMi4yOTg2QzExLjk5MzggOS4yOTc0NCAxMS45OTQ4IDUuNzEyOTYgMTEuMDE4NCAyLjcxMDY3TDExLjQ5MzkgMi41NTYwM0MxMi41MDMgNS42NTg5IDEyLjUwMiA5LjM1MTc4IDExLjQ5MDkgMTIuNDUzNUwxMS4wMTU1IDEyLjI5ODZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi40NVwiLGQ6XCJNMTEuNzIxNCAxMS42NjhDMTIuNDI1NCA5LjAxMzAzIDEyLjQyNjIgNS45OTY5MSAxMS43MjM3IDMuMzQxMTZMMTIuMjA3MSAzLjIxMzI5QzEyLjkzMTggNS45NTI5MiAxMi45MzEgOS4wNTcyOCAxMi4yMDQ3IDExLjc5NjFMMTEuNzIxNCAxMS42NjhaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi41XCIsZDpcIk0xMi40NDMyIDEwLjc1MkMxMi44NTI0IDguNjM3NjIgMTIuODUyMyA2LjM2MDg5IDEyLjQ0MjkgNC4yNDY2TDEyLjkzMzggNC4xNTE1NUMxMy4zNTUzIDYuMzI4NjEgMTMuMzU1NCA4LjY2OTg1IDEyLjkzNDEgMTAuODQ3TDEyLjQ0MzIgMTAuNzUyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sd3I9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuODc3MDc1IDcuNDk5ODhDMC44NzcwNzUgMy44NDIxOSAzLjg0MjIyIDAuODc3MDQ1IDcuNDk5OTEgMC44NzcwNDVDMTEuMTU3NiAwLjg3NzA0NSAxNC4xMjI3IDMuODQyMTkgMTQuMTIyNyA3LjQ5OTg4QzE0LjEyMjcgMTEuMTU3NSAxMS4xNTc2IDE0LjEyMjcgNy40OTk5MSAxNC4xMjI3QzMuODQyMjIgMTQuMTIyNyAwLjg3NzA3NSAxMS4xNTc1IDAuODc3MDc1IDcuNDk5ODhaTTcuNDk5OTEgMS44MjcwNEM0LjM2Njg5IDEuODI3MDQgMS44MjcwOCA0LjM2Njg2IDEuODI3MDggNy40OTk4OEMxLjgyNzA4IDEwLjYzMjkgNC4zNjY4OSAxMy4xNzI3IDcuNDk5OTEgMTMuMTcyN0MxMC42MzI5IDEzLjE3MjcgMTMuMTcyNyAxMC42MzI5IDEzLjE3MjcgNy40OTk4OEMxMy4xNzI3IDQuMzY2ODYgMTAuNjMyOSAxLjgyNzA0IDcuNDk5OTEgMS44MjcwNFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjA1XCIsZDpcIk0xMi4xNjE5IDMuODUxODJDOC4zNTgxNyA0Ljg4OTE4IDQuODg5MzYgOC4zNTggMy44NTE5OSAxMi4xNjE3TDMuMzY5NiAxMi4wMzAxQzQuNDUzNTYgOC4wNTU2NCA4LjA1NTgxIDQuNDUzMzkgMTIuMDMwMyAzLjM2OTQzTDEyLjE2MTkgMy44NTE4MlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjFcIixkOlwiTTExLjg4MDcgMy40MjcwN0M4LjAzNDQxIDQuNTA1NDIgNC41MDU2MSA4LjAzNDIyIDMuNDI3MjYgMTEuODgwNUwyLjk0NTgyIDExLjc0NTZDNC4wNzEyOSA3LjczMTIxIDcuNzMxNCA0LjA3MTEgMTEuNzQ1OCAyLjk0NTYzTDExLjg4MDcgMy40MjcwN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjE1XCIsZDpcIk0xMS41MjAxIDMuMDI1NTZDNy42OTA5MiA0LjE2MTk5IDQuMTY3NzkgNy42ODMyMyAzLjAyODA1IDExLjUxMkwyLjU0ODgzIDExLjM2OTRDMy43MzY3NiA3LjM3ODY5IDcuMzg2NTkgMy43MzA3NiAxMS4zNzc4IDIuNTQ2MjNMMTEuNTIwMSAzLjAyNTU2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMlwiLGQ6XCJNMTEuMDQ2OCAyLjY2MTY5QzcuMzExMTcgMy44NzY2NCAzLjg3OTE4IDcuMzA3OSAyLjY2Mjk4IDExLjA0MzRMMi4xODc1NCAxMC44ODg2QzMuNDUzMjQgNy4wMDEwOSA3LjAwNDQ1IDMuNDUwNjIgMTAuODkyMSAyLjE4NjIxTDExLjA0NjggMi42NjE2OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjI1XCIsZDpcIk0xMC41MjAxIDIuMzIzNjVDNi45MjA5MSAzLjYxNDQ3IDMuNjIzOTEgNi45MDg3NiAyLjMyODQ1IDEwLjUwNzNMMS44NTggMTAuMzM4QzMuMjAzOTggNi41OTkwOSA2LjYxMTU1IDMuMTk0MjQgMTAuMzUxMyAxLjg1MzAxTDEwLjUyMDEgMi4zMjM2NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjNcIixkOlwiTTkuOTAyMjIgMi4wMzEyMkM2LjUwMDAzIDMuMzk0NjUgMy4zOTk2OCA2LjQ5MzY3IDIuMDMzOTkgOS44OTU1MUwxLjU2OTk4IDkuNzA5MjRDMi45ODY1MSA2LjE4MDc2IDYuMTg3MjggMi45ODEzMyA5LjcxNjIyIDEuNTY3MUw5LjkwMjIyIDIuMDMxMjJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4zNVwiLGQ6XCJNOS4yMDcyNyAxLjc4ODczQzYuMDYxMzYgMy4yMDM0OSAzLjIxMTAzIDYuMDUyMDMgMS43OTMzMSA5LjE5NzM4TDEuMzM3NDcgOC45OTE5MkMyLjgwNTM2IDUuNzM1MjggNS43NDQ4NSAyLjc5NzYgOS4wMDIyIDEuMzMyNzJMOS4yMDcyNyAxLjc4ODczWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuNFwiLGQ6XCJNOC40MDcxMyAxLjYyMDg1QzUuNTkzMjMgMy4wNTExNyAzLjA1Nzk0IDUuNTg1MDkgMS42MjU0NCA4LjM5ODQ3TDEuMTc5ODcgOC4xNzE2QzIuNjYwMzYgNS4yNjM5NyA1LjI3MjMyIDIuNjUzNCA4LjE4MDU3IDEuMTc1MTNMOC40MDcxMyAxLjYyMDg1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuNDVcIixkOlwiTTcuNDYyMDcgMS41Njc0N0M1LjA4Njg5IDIuOTQ2OTUgMi45NTM2MiA1LjA3OTEyIDEuNTcyNDkgNy40NTM3OUwxLjE0MDI4IDcuMjAyNDFDMi41NjUwMyA0Ljc1MjczIDQuNzYwNyAyLjU1ODE4IDcuMjEwOTYgMS4xMzUxTDcuNDYyMDcgMS41Njc0N1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjVcIixkOlwiTTYuMzA0MDcgMS43MDQ4N0M0LjUxOTY0IDIuOTEwNjMgMi45MDk4MyA0LjUyMDYxIDEuNzA0MyA2LjMwNTEzTDEuMjg5OTggNi4wMjUyNEMyLjUzMTMgNC4xODc3MyA0LjE4NjczIDIuNTMyMTQgNi4wMjQxMyAxLjI5MDU5TDYuMzA0MDcgMS43MDQ4N1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGJyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTkxIDAuODc3MDQ1QzMuODQyMjIgMC44NzcwNDUgMC44NzcwNzUgMy44NDIxOSAwLjg3NzA3NSA3LjQ5OTg4QzAuODc3MDc1IDkuMTQ4OCAxLjQ3OTY5IDEwLjY1NyAyLjQ3NjcgMTEuODE2MkwxLjY0NjQ3IDEyLjY0NjRDMS40NTEyMSAxMi44NDE3IDEuNDUxMjEgMTMuMTU4MyAxLjY0NjQ3IDEzLjM1MzVDMS44NDE3MyAxMy41NDg4IDIuMTU4MzIgMTMuNTQ4OCAyLjM1MzU4IDEzLjM1MzVMMy4xODM4MyAxMi41MjMzQzQuMzQzMDIgMTMuNTIwMiA1Ljg1MTEgMTQuMTIyNyA3LjQ5OTkxIDE0LjEyMjdDMTEuMTU3NiAxNC4xMjI3IDE0LjEyMjcgMTEuMTU3NSAxNC4xMjI3IDcuNDk5ODhDMTQuMTIyNyA1Ljg1MTA3IDEzLjUyMDIgNC4zNDI5OCAxMi41MjMzIDMuMTgzOEwxMy4zNTM2IDIuMzUzNTVDMTMuNTQ4OCAyLjE1ODI5IDEzLjU0ODggMS44NDE3IDEzLjM1MzYgMS42NDY0NEMxMy4xNTgzIDEuNDUxMTggMTIuODQxNyAxLjQ1MTE4IDEyLjY0NjUgMS42NDY0NEwxMS44MTYyIDIuNDc2NjdDMTAuNjU3IDEuNDc5NjYgOS4xNDg4MyAwLjg3NzA0NSA3LjQ5OTkxIDAuODc3MDQ1Wk0xMS4xNDIzIDMuMTUwNjVDMTAuMTU2OCAyLjMyNDQ5IDguODg2NDQgMS44MjcwNCA3LjQ5OTkxIDEuODI3MDRDNC4zNjY4OSAxLjgyNzA0IDEuODI3MDggNC4zNjY4NiAxLjgyNzA4IDcuNDk5ODhDMS44MjcwOCA4Ljg4NjQxIDIuMzI0NTIgMTAuMTU2OCAzLjE1MDY5IDExLjE0MjJMMTEuMTQyMyAzLjE1MDY1Wk0zLjg1NzgxIDExLjg0OTNDNC44NDMyMiAxMi42NzUzIDYuMTEzNDggMTMuMTcyNyA3LjQ5OTkxIDEzLjE3MjdDMTAuNjMyOSAxMy4xNzI3IDEzLjE3MjcgMTAuNjMyOSAxMy4xNzI3IDcuNDk5ODhDMTMuMTcyNyA2LjExMzQ1IDEyLjY3NTQgNC44NDMxOSAxMS44NDkzIDMuODU3NzhMMy44NTc4MSAxMS44NDkzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMDVcIixkOlwiTTYuNzgyOTYgMTMuMzc2QzguNzM5MDQgOS45NTI4NCA4LjczOTA0IDUuMDQ3MTkgNi43ODI5NiAxLjYyNDA1TDcuMjE3MDggMS4zNzU5OEM5LjI2MSA0Ljk1MjgzIDkuMjYxIDEwLjA0NzIgNy4yMTcwOCAxMy42MjRMNi43ODI5NiAxMy4zNzZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4xXCIsZDpcIk03LjI4MjA0IDEzLjQ3NzVDOS4yMzkyOSA5Ljk5NTIzIDkuMjM5MjkgNS4wMDQ3NSA3LjI4MjA0IDEuNTIyNDhMNy43MTc5MSAxLjI3NzVDOS43NjA2NyA0LjkxMTkgOS43NjA2NyAxMC4wODgxIDcuNzE3OTEgMTMuNzIyNUw3LjI4MjA0IDEzLjQ3NzVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4xNVwiLGQ6XCJNNy44MjA5OCAxMy41MDY0QzkuNzI1MDIgOS45OTUyMyA5LjcyNjM2IDUuMDE0MTEgNy44MjQ5MiAxLjUwMDg0TDguMjY0NjUgMS4yNjI4NUMxMC4yNDY1IDQuOTI0NjYgMTAuMjQ1MSAxMC4wODUgOC4yNjA1MiAxMy43NDQ4TDcuODIwOTggMTMuNTA2NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjJcIixkOlwiTTguNDEyODQgMTMuNDI5QzEwLjE5NTIgOS45Mjg0MiAxMC4xOTU3IDUuMDc1MzcgOC40MTQzNSAxLjU3NDAyTDguODU5OTkgMS4zNDcyOUMxMC43MTM5IDQuOTkxMTMgMTAuNzEzMyAxMC4wMTI4IDguODU4NDEgMTMuNjU1OUw4LjQxMjg0IDEzLjQyOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjI1XCIsZDpcIk05LjAyNDQxIDEzLjI5NTZDMTAuNjU2NyA5LjgzNzkgMTAuNjU4NiA1LjE3NzE1IDkuMDMwMDUgMS43MTY1Nkw5LjQ4MjQ1IDEuNTAzNjZDMTEuMTc0NSA1LjA5OTE5IDExLjE3MjYgOS45MTYyOSA5LjQ3NjU3IDEzLjUwOTFMOS4wMjQ0MSAxMy4yOTU2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuM1wiLGQ6XCJNOS42NjgwOSAxMy4wNjU1QzExLjEwOTcgOS42OTU3MiAxMS4xMTA3IDUuMzEyMSA5LjY3MDg4IDEuOTQwOTVMMTAuMTMwNyAxLjc0NDU3QzExLjYyNDEgNS4yNDEyMSAxMS42MjMxIDkuNzY2ODMgMTAuMTI3OCAxMy4yNjIyTDkuNjY4MDkgMTMuMDY1NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjM1XCIsZDpcIk0xMC4zMzEgMTIuNzQ1NkMxMS41NTUxIDkuNTIwNzMgMTEuNTU2NCA1LjQ5MTAzIDEwLjMzNDcgMi4yNjQ0NEwxMC44MDI0IDIuMDg3NEMxMi4wNjcyIDUuNDI4MTUgMTIuMDY1OSA5LjU4Mzk0IDEwLjc5ODUgMTIuOTIzMUwxMC4zMzEgMTIuNzQ1NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjRcIixkOlwiTTExLjAxNTUgMTIuMjk4NkMxMS45OTM4IDkuMjk3NDQgMTEuOTk0OCA1LjcxMjk2IDExLjAxODQgMi43MTA2N0wxMS40OTM5IDIuNTU2MDNDMTIuNTAzIDUuNjU4OSAxMi41MDIgOS4zNTE3OCAxMS40OTA5IDEyLjQ1MzVMMTEuMDE1NSAxMi4yOTg2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuNDVcIixkOlwiTTExLjcyMTQgMTEuNjY4QzEyLjQyNTQgOS4wMTMwMyAxMi40MjYyIDUuOTk2OTEgMTEuNzIzNyAzLjM0MTE2TDEyLjIwNzEgMy4yMTMyOUMxMi45MzE4IDUuOTUyOTIgMTIuOTMxIDkuMDU3MjggMTIuMjA0NyAxMS43OTYxTDExLjcyMTQgMTEuNjY4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuNVwiLGQ6XCJNMTIuNDQzMiAxMC43NTJDMTIuODUyNCA4LjYzNzYyIDEyLjg1MjMgNi4zNjA4OSAxMi40NDI5IDQuMjQ2NkwxMi45MzM4IDQuMTUxNTVDMTMuMzU1MyA2LjMyODYxIDEzLjM1NTQgOC42Njk4NSAxMi45MzQxIDEwLjg0N0wxMi40NDMyIDEwLjc1MlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHlyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4wNVwiLGQ6XCJNMTIuMTM5OCAzLjg4NjE2QzEzLjg1NTMgNC45NDE1OSAxNSA2LjgzNyAxNSA4Ljk5OTk5QzE1IDEyLjMxMzcgMTIuMzEzNyAxNSA5LjAwMDAxIDE1QzYuODQzNSAxNSA0Ljk1Mjk1IDEzLjg2MjEgMy44OTU2OSAxMi4xNTUyTDQuMzIwNzUgMTEuODkxOUM1LjI5MDY5IDEzLjQ1NzggNy4wMjM3NSAxNC41IDkuMDAwMDEgMTQuNUMxMi4wMzc1IDE0LjUgMTQuNSAxMi4wMzc1IDE0LjUgOC45OTk5OUMxNC41IDcuMDE3OCAxMy40NTE2IDUuMjgwMjYgMTEuODc3OCA0LjMxMjAyTDEyLjEzOTggMy44ODYxNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjJcIixkOlwiTTEyLjg1MSA1LjA3MzJDMTMuODY4NCA2LjA3MTA1IDE0LjUgNy40NjE5OCAxNC41IDguOTk5OTlDMTQuNSAxMi4wMzc1IDEyLjAzNzYgMTQuNSA5LjAwMDAyIDE0LjVDNy40NjIxNCAxNC41IDYuMDcxMzEgMTMuODY4NSA1LjA3MzQ4IDEyLjg1MTJMNS40MzA0MiAxMi41MDExQzYuMzM4MDkgMTMuNDI2NCA3LjYwMTg1IDE0IDkuMDAwMDIgMTRDMTEuNzYxNCAxNCAxNCAxMS43NjE0IDE0IDguOTk5OTlDMTQgNy42MDE3IDEzLjQyNjQgNi4zMzc4NSAxMi41MDA5IDUuNDMwMTdMMTIuODUxIDUuMDczMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjM1XCIsZDpcIk0xMy4zMDIxIDYuNDUwNzFDMTMuNzQ1NSA3LjE5NzM3IDE0IDguMDY5MzQgMTQgOUMxNCAxMS43NjE0IDExLjc2MTQgMTQgOS4wMDAwMSAxNEM4LjA0ODY3IDE0IDcuMTU4NjcgMTMuNzM0MSA2LjQwMTE4IDEzLjI3MjNMNi42NjE0MSAxMi44NDU0QzcuMzQyNzQgMTMuMjYwNyA4LjE0MzA1IDEzLjUgOS4wMDAwMSAxMy41QzExLjQ4NTMgMTMuNSAxMy41IDExLjQ4NTMgMTMuNSA5QzEzLjUgOC4xNjE2NCAxMy4yNzEgNy4zNzc1MyAxMi44NzIyIDYuNzA1OThMMTMuMzAyMSA2LjQ1MDcxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuNVwiLGQ6XCJNMTMuMzc0NCA3Ljk0MDIxQzEzLjQ1NjYgOC4yODAzIDEzLjUgOC42MzUyNCAxMy41IDlDMTMuNSAxMS40ODUzIDExLjQ4NTMgMTMuNSA5LjAwMDAyIDEzLjVDOC42MTEwMyAxMy41IDguMjMzMjEgMTMuNDUwNiA3Ljg3MjY3IDEzLjM1NzZMNy45OTc1OCAxMi44NzM0QzguMzE3NjcgMTIuOTU2IDguNjUzNTIgMTMgOS4wMDAwMiAxM0MxMS4yMDkxIDEzIDEzIDExLjIwOTEgMTMgOUMxMyA4LjY3NTA3IDEyLjk2MTMgOC4zNTk1MiAxMi44ODg0IDguMDU3NTZMMTMuMzc0NCA3Ljk0MDIxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuNjVcIixkOlwiTTEyLjkxNTUgOS44MjEzMkMxMi41ODk4IDExLjM4MTMgMTEuMzU2MiAxMi42MDcyIDkuNzkyMDMgMTIuOTIxNUw5LjY5MzUzIDEyLjQzMTNDMTEuMDYxMyAxMi4xNTY1IDEyLjE0MTMgMTEuMDgzMyAxMi40MjYxIDkuNzE5MTNMMTIuOTE1NSA5LjgyMTMyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS4yNzcxIDcuNTAyNTJDMS4yNzcxIDQuMDY0NTUgNC4wNjQxMyAxLjI3NzUzIDcuNTAyMDkgMS4yNzc1M0MxMC45NCAxLjI3NzUzIDEzLjcyNzEgNC4wNjQ1NSAxMy43MjcxIDcuNTAyNTJDMTMuNzI3MSAxMC45NDA1IDEwLjk0IDEzLjcyNzUgNy41MDIwOSAxMy43Mjc1QzQuMDY0MTIgMTMuNzI3NSAxLjI3NzEgMTAuOTQwNSAxLjI3NzEgNy41MDI1MlpNNy41MDIwOSAyLjIyNzUyQzQuNTg4OCAyLjIyNzUyIDIuMjI3MSA0LjU4OTIyIDIuMjI3MSA3LjUwMjUyQzIuMjI3MSAxMC40MTU4IDQuNTg4OCAxMi43Nzc1IDcuNTAyMDkgMTIuNzc3NUMxMC40MTU0IDEyLjc3NzUgMTIuNzc3MSAxMC40MTU4IDEyLjc3NzEgNy41MDI1MkMxMi43NzcxIDQuNTg5MjIgMTAuNDE1NCAyLjIyNzUyIDcuNTAyMDkgMi4yMjc1MlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHhyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01IDcuNTAwMDNDNSA4LjMyODQ1IDQuMzI4NDMgOS4wMDAwMyAzLjUgOS4wMDAwM0MyLjY3MTU3IDkuMDAwMDMgMiA4LjMyODQ1IDIgNy41MDAwM0MyIDYuNjcxNiAyLjY3MTU3IDYuMDAwMDMgMy41IDYuMDAwMDNDNC4zMjg0MyA2LjAwMDAzIDUgNi42NzE2IDUgNy41MDAwM1pNNS43MTMxMyA4LjY2Mzg4QzUuMjk0NDUgOS40NTgzOCA0LjQ2MDQ4IDEwIDMuNSAxMEMyLjExOTI5IDEwIDEgOC44ODA3NCAxIDcuNTAwMDNDMSA2LjExOTMxIDIuMTE5MjkgNS4wMDAwMyAzLjUgNS4wMDAwM0M0LjQ2MDQ4IDUuMDAwMDMgNS4yOTQ0NSA1LjU0MTY3IDUuNzEzMTMgNi4zMzYxNkw5LjEwNDI0IDQuMjE2NzFDOS4wMzY0MyAzLjk4OTY4IDkgMy43NDkxMSA5IDMuNTAwMDNDOSAyLjExOTMyIDEwLjExOTMgMS4wMDAwMyAxMS41IDEuMDAwMDNDMTIuODgwNyAxLjAwMDAzIDE0IDIuMTE5MzIgMTQgMy41MDAwM0MxNCA0Ljg4MDc0IDEyLjg4MDcgNi4wMDAwMyAxMS41IDYuMDAwMDNDMTAuNjkxNSA2LjAwMDAzIDkuOTcyNjQgNS42MTYyNCA5LjUxNTY2IDUuMDIwOUw1Ljk4NTMgNy4yMjczOEM1Ljk5NTAyIDcuMzE2OTIgNiA3LjQwNzg5IDYgNy41MDAwM0M2IDcuNTkyMTYgNS45OTUwMiA3LjY4MzEyIDUuOTg1MyA3Ljc3MjY3TDkuNTE1NjcgOS45NzkxNUM5Ljk3MjY1IDkuMzgzODIgMTAuNjkxNSA5LjAwMDAzIDExLjUgOS4wMDAwM0MxMi44ODA3IDkuMDAwMDMgMTQgMTAuMTE5MyAxNCAxMS41QzE0IDEyLjg4MDcgMTIuODgwNyAxNCAxMS41IDE0QzEwLjExOTMgMTQgOSAxMi44ODA3IDkgMTEuNUM5IDExLjI1MDkgOS4wMzY0MyAxMS4wMTA0IDkuMTA0MjUgMTAuNzgzM0w1LjcxMzEzIDguNjYzODhaTTExLjUgNS4wMDAwM0MxMi4zMjg0IDUuMDAwMDMgMTMgNC4zMjg0NiAxMyAzLjUwMDAzQzEzIDIuNjcxNiAxMi4zMjg0IDIuMDAwMDMgMTEuNSAyLjAwMDAzQzEwLjY3MTYgMi4wMDAwMyAxMCAyLjY3MTYgMTAgMy41MDAwM0MxMCA0LjMyODQ2IDEwLjY3MTYgNS4wMDAwMyAxMS41IDUuMDAwMDNaTTEzIDExLjVDMTMgMTIuMzI4NSAxMi4zMjg0IDEzIDExLjUgMTNDMTAuNjcxNiAxMyAxMCAxMi4zMjg1IDEwIDExLjVDMTAgMTAuNjcxNiAxMC42NzE2IDEwIDExLjUgMTBDMTIuMzI4NCAxMCAxMyAxMC42NzE2IDEzIDExLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxrcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy41IDUuMDAwMDZDMy4yMjM4NiA1LjAwMDA2IDMgNS4yMjM5MiAzIDUuNTAwMDZMMyAxMS41MDAxQzMgMTEuNzc2MiAzLjIyMzg2IDEyLjAwMDEgMy41IDEyLjAwMDFMMTEuNSAxMi4wMDAxQzExLjc3NjEgMTIuMDAwMSAxMiAxMS43NzYyIDEyIDExLjUwMDFMMTIgNS41MDAwNkMxMiA1LjIyMzkyIDExLjc3NjEgNS4wMDAwNiAxMS41IDUuMDAwMDZMMTAuMjUgNS4wMDAwNkM5Ljk3Mzg2IDUuMDAwMDYgOS43NSA0Ljc3NjIgOS43NSA0LjUwMDA2QzkuNzUgNC4yMjM5MiA5Ljk3Mzg2IDQuMDAwMDYgMTAuMjUgNC4wMDAwNkwxMS41IDQuMDAwMDZDMTIuMzI4NCA0LjAwMDA2IDEzIDQuNjcxNjMgMTMgNS41MDAwNkwxMyAxMS41MDAxQzEzIDEyLjMyODUgMTIuMzI4NCAxMy4wMDAxIDExLjUgMTMuMDAwMUwzLjUgMTMuMDAwMUMyLjY3MTU3IDEzLjAwMDEgMiAxMi4zMjg1IDIgMTEuNTAwMUwyIDUuNTAwMDZDMiA0LjY3MTYzIDIuNjcxNTcgNC4wMDAwNiAzLjUgNC4wMDAwNkw0Ljc1IDQuMDAwMDZDNS4wMjYxNCA0LjAwMDA2IDUuMjUgNC4yMjM5MiA1LjI1IDQuNTAwMDZDNS4yNSA0Ljc3NjIgNS4wMjYxNCA1LjAwMDA2IDQuNzUgNS4wMDAwNkwzLjUgNS4wMDAwNlpNNyAxLjYzNjRMNS41NjgyIDMuMDY4MkM1LjM5MjQ2IDMuMjQzOTMgNS4xMDc1NCAzLjI0MzkzIDQuOTMxOCAzLjA2ODJDNC43NTYwNyAyLjg5MjQ2IDQuNzU2MDcgMi42MDc1NCA0LjkzMTggMi40MzE4TDcuMTgxOCAwLjE4MTgwMkM3LjI2NjE5IDAuMDk3NDEgNy4zODA2NSAwLjA0OTk5OSA3LjUgMC4wNDk5OTlDNy42MTkzNSAwLjA0OTk5OSA3LjczMzgxIDAuMDk3NDEgNy44MTgyIDAuMTgxODAyTDEwLjA2ODIgMi40MzE4QzEwLjI0MzkgMi42MDc1NCAxMC4yNDM5IDIuODkyNDYgMTAuMDY4MiAzLjA2ODJDOS44OTI0NiAzLjI0MzkzIDkuNjA3NTQgMy4yNDM5MyA5LjQzMTggMy4wNjgyTDggMS42MzY0TDggOC41QzggOC43NzYxNCA3Ljc3NjE0IDkgNy41IDlDNy4yMjM4NiA5IDcgOC43NzYxNCA3IDguNUw3IDEuNjM2NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFNyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMi4zNTM2IDEuMTQ2NDVDMTIuMTU4MyAwLjk1MTE4NCAxMS44NDE3IDAuOTUxMTg0IDExLjY0NjQgMS4xNDY0NUMxMS40NTEyIDEuMzQxNzEgMTEuNDUxMiAxLjY1ODI5IDExLjY0NjQgMS44NTM1NUwxMi43OTI5IDNIMTJDMTAuNzAzNyAzIDkuNzExMTEgMy41ODQyMyA4Ljg3MjQ4IDQuMzg5MzFDOC4yMDA2NSA1LjAzNDI3IDcuNTkzNDkgNS44NTY4NCA2Ljk5NDYxIDYuNjY4MkM2Ljg2Mjg3IDYuODQ2NjggNi43MzE1NCA3LjAyNDYyIDYuNiA3LjJDNS4xMDg3NCA5LjE4ODM1IDMuNDkwMzcgMTEgMC41IDExQzAuMjIzODU4IDExIDAgMTEuMjIzOSAwIDExLjVDMCAxMS43NzYxIDAuMjIzODU4IDEyIDAuNSAxMkM0LjAwOTYzIDEyIDUuODkxMjYgOS44MTE2NSA3LjQgNy44QzcuNTQzNjcgNy42MDg0NSA3LjY4MzIgNy40MTk2MiA3LjgxOTk2IDcuMjM0NTRMNy44MjAwNSA3LjIzNDQzTDcuODIwMDYgNy4yMzQ0MUM4LjQxNjc0IDYuNDI2OTUgOC45NjA2OSA1LjY5MDg1IDkuNTY1MDIgNS4xMTA2OUMxMC4yODg5IDQuNDE1NzcgMTEuMDQ2MyA0IDEyIDRIMTIuNzkyOUwxMS42NDY0IDUuMTQ2NDVDMTEuNDUxMiA1LjM0MTcxIDExLjQ1MTIgNS42NTgyOSAxMS42NDY0IDUuODUzNTVDMTEuODQxNyA2LjA0ODgyIDEyLjE1ODMgNi4wNDg4MiAxMi4zNTM2IDUuODUzNTVMMTQuMzUzNiAzLjg1MzU1QzE0LjU0ODggMy42NTgyOSAxNC41NDg4IDMuMzQxNzEgMTQuMzUzNiAzLjE0NjQ1TDEyLjM1MzYgMS4xNDY0NVpNMC41IDNDMy4zNTI3OCAzIDUuMTI5OTIgNC40NDU4OCA2LjUwNTQ4IDYuMDY3NDZMNi4zNzYyIDYuMjQyNjZDNi4yNDgzIDYuNDE2MSA2LjEyMjkzIDYuNTg2MDkgNiA2Ljc1QzUuOTYzOTcgNi43OTgwNCA1LjkyNzk4IDYuODQ1ODEgNS44OTIgNi44OTMzMUM0LjU3MzQ4IDUuMjkzMDYgMy4wMjYzNyA0IDAuNSA0QzAuMjIzODU4IDQgMCAzLjc3NjE0IDAgMy41QzAgMy4yMjM4NiAwLjIyMzg1OCAzIDAuNSAzWk04Ljg3MjQ4IDEwLjYxMDdDOC4zNzI4NCAxMC4xMzEgNy45MDg5NyA5LjU1MzE0IDcuNDU3NjcgOC45NTQ2OEM3LjY0Njg4IDguNzE2OTMgNy44MjcwNCA4LjQ4MDYxIDggOC4yNUw4LjA4OTg3IDguMTI5ODdDOC41ODQxMiA4Ljc5NDAyIDkuMDUyODggOS4zOTc2NiA5LjU2NTAyIDkuODg5MzFDMTAuMjg4OSAxMC41ODQyIDExLjA0NjMgMTEgMTIgMTFIMTIuNzkyOUwxMS42NDY0IDkuODUzNTVDMTEuNDUxMiA5LjY1ODI5IDExLjQ1MTIgOS4zNDE3MSAxMS42NDY0IDkuMTQ2NDVDMTEuODQxNyA4Ljk1MTE4IDEyLjE1ODMgOC45NTExOCAxMi4zNTM2IDkuMTQ2NDVMMTQuMzUzNiAxMS4xNDY0QzE0LjU0ODggMTEuMzQxNyAxNC41NDg4IDExLjY1ODMgMTQuMzUzNiAxMS44NTM2TDEyLjM1MzYgMTMuODUzNkMxMi4xNTgzIDE0LjA0ODggMTEuODQxNyAxNC4wNDg4IDExLjY0NjQgMTMuODUzNkMxMS40NTEyIDEzLjY1ODMgMTEuNDUxMiAxMy4zNDE3IDExLjY0NjQgMTMuMTQ2NEwxMi43OTI5IDEySDEyQzEwLjcwMzcgMTIgOS43MTExMSAxMS40MTU4IDguODcyNDggMTAuNjEwN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE9yPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMS41IDMuMDQ5OTlDMTEuNzQ4NSAzLjA0OTk5IDExLjk1IDMuMjUxNDYgMTEuOTUgMy40OTk5OVY3LjQ5OTk5QzExLjk1IDcuNzQ4NTIgMTEuNzQ4NSA3Ljk0OTk5IDExLjUgNy45NDk5OUMxMS4yNTE1IDcuOTQ5OTkgMTEuMDUgNy43NDg1MiAxMS4wNSA3LjQ5OTk5VjQuNTg2MzlMNC41ODYzOCAxMS4wNUg3LjQ5OTk5QzcuNzQ4NTIgMTEuMDUgNy45NDk5OSAxMS4yNTE1IDcuOTQ5OTkgMTEuNUM3Ljk0OTk5IDExLjc0ODUgNy43NDg1MiAxMS45NSA3LjQ5OTk5IDExLjk1TDMuNDk5OTkgMTEuOTVDMy4zODA2NCAxMS45NSAzLjI2NjE4IDExLjkwMjYgMy4xODE3OSAxMS44MTgyQzMuMDk3NCAxMS43MzM4IDMuMDQ5OTkgMTEuNjE5MyAzLjA0OTk5IDExLjVMMy4wNDk5OSA3LjQ5OTk5QzMuMDQ5OTkgNy4yNTE0NiAzLjI1MTQ2IDcuMDQ5OTkgMy40OTk5OSA3LjA0OTk5QzMuNzQ4NTIgNy4wNDk5OSAzLjk0OTk5IDcuMjUxNDYgMy45NDk5OSA3LjQ5OTk5TDMuOTQ5OTkgMTAuNDEzNkwxMC40MTM2IDMuOTQ5OTlMNy40OTk5OSAzLjk0OTk5QzcuMjUxNDYgMy45NDk5OSA3LjA0OTk5IDMuNzQ4NTIgNy4wNDk5OSAzLjQ5OTk5QzcuMDQ5OTkgMy4yNTE0NiA3LjI1MTQ2IDMuMDQ5OTkgNy40OTk5OSAzLjA0OTk5TDExLjUgMy4wNDk5OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE1yPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUzNzMxIDAuODI2ODczQzcuNTEyNSAwLjgyNDM5MiA3LjQ4NzUgMC44MjQzOTIgNy40NjI2OSAwLjgyNjg3M0wzLjk2MjY5IDEuMTc2ODdDMy44NTY3MiAxLjE4NzQ3IDMuNzYwMjUgMS4yNDI2MiAzLjY5NzM2IDEuMzI4NTdMMC42OTk3NzEgNS40MjUyOEMwLjY1NDA0NiA1LjQ4NjI3IDAuNjI2NDcgNS41NjE2NSAwLjYyNTA1NyA1LjY0MzRDMC42MjUwMTkgNS42NDU2IDAuNjI1IDUuNjQ3ODEgMC42MjUgNS42NTAwMUMwLjYyNSA1LjY1MDUyIDAuNjI1MDAxIDUuNjUxMDMgMC42MjUwMDMgNS42NTE1M0MwLjYyNTM2MyA1Ljc0MjM3IDAuNjU4MDIxIDUuODI1NTkgMC43MTIwODcgNS44OTAzTDcuMjEwNDIgMTMuNzg4M0M3LjI4MTY1IDEzLjg3NDkgNy4zODc4OSAxMy45MjUgNy41IDEzLjkyNUM3LjYxMjExIDEzLjkyNSA3LjcxODM1IDEzLjg3NDkgNy43ODk1OCAxMy43ODgzTDE0LjI4NzkgNS44OTAzMUMxNC4zNDIgNS44MjU2IDE0LjM3NDYgNS43NDIzNyAxNC4zNzUgNS42NTE1M0MxNC4zNzUgNS42NTEwMyAxNC4zNzUgNS42NTA1MiAxNC4zNzUgNS42NTAwMUMxNC4zNzUgNS42NDg0OSAxNC4zNzUgNS42NDY5NyAxNC4zNzUgNS42NDU0NUMxNC4zNzQ5IDUuNjM5NjMgMTQuMzc0NyA1LjYzMzgyIDE0LjM3NDQgNS42MjgwMUMxNC4zNyA1LjU1MjE5IDE0LjM0MzEgNS40ODI0MiAxNC4zMDAyIDUuNDI1MjdMMTEuMzAyNiAxLjMyODU3QzExLjIzOTcgMS4yNDI2MiAxMS4xNDMzIDEuMTg3NDcgMTEuMDM3MyAxLjE3Njg3TDcuNTM3MzEgMC44MjY4NzNaTTEwLjkyNSA1LjI3NTAxVjUuMjUyMzZMMTAuOTIyMyA1LjI3NTAxSDEwLjkyNVpNMTAuOTM0MiA1LjE3NDk4SDEzLjE4NzdMMTEuMjQ5NSAyLjUyNjFMMTAuOTM0MiA1LjE3NDk4Wk0xMC41NzA3IDEuODgzOTVMOC4wNDQzMiAxLjYzMTMxTDEwLjE3NDcgNS4yMTAzNEwxMC41NzA3IDEuODgzOTVaTTYuOTU1NjggMS42MzEzMUw0LjQyOTMxIDEuODgzOTVMNC44MjUzMSA1LjIxMDM0TDYuOTU1NjggMS42MzEzMVpNMy43NTA0NiAyLjUyNjFMMS44MTIyNiA1LjE3NDk4SDQuMDY1OEwzLjc1MDQ2IDIuNTI2MVpNMS43OTQxNiA2LjAyNTAxTDYuNzU4NjEgMTIuMDU4N0w0LjIyMzcxIDYuMDY2OUM0LjIxNzg3IDYuMDUzMSA0LjIxMzE0IDYuMDM5MSA0LjIwOTQ5IDYuMDI1MDFIMS43OTQxNlpNNS4xNTA1NSA2LjAyNTAxTDcuNDk5OTkgMTIuMTA4NUw5Ljg0OTQzIDYuMDI1MDFIOS43ODY4MUg1LjIxMzE5SDUuMTUwNTVaTTEwLjc5MDUgNi4wMjUwMUMxMC43ODY5IDYuMDM5MSAxMC43ODIxIDYuMDUzMSAxMC43NzYzIDYuMDY2OUw4LjI0MTM5IDEyLjA1ODdMMTMuMjA1OCA2LjAyNTAxSDEwLjc5MDVaTTcuNSAyLjE4MzE3TDkuMzQwMzggNS4yNzUwMUg1LjY1OTYyTDcuNSAyLjE4MzE3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuMTA4NzYgMTRMOS40NjU4MiAxSDEwLjgxNzhMNS40NjA3NCAxNEg0LjEwODc2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sX3I9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEwLjMwMDQgNy40OTk5MUMxMC4zMDA0IDguNDk0MyA5LjQ5NDI2IDkuMzAwNDEgOC40OTk4OCA5LjMwMDQxQzcuNTA1NDkgOS4zMDA0MSA2LjY5OTM4IDguNDk0MyA2LjY5OTM4IDcuNDk5OTFDNi42OTkzOCA2LjUwNTUzIDcuNTA1NDkgNS42OTk0MiA4LjQ5OTg4IDUuNjk5NDJDOS40OTQyNiA1LjY5OTQyIDEwLjMwMDQgNi41MDU1MyAxMC4zMDA0IDcuNDk5OTFaTTExLjIwNSA4QzEwLjk2OTkgOS4yODAyOSA5Ljg0ODE2IDEwLjI1MDQgOC40OTk4OCAxMC4yNTA0QzcuMTUxNiAxMC4yNTA0IDYuMDI5OSA5LjI4MDI5IDUuNzk0NzMgOEgwLjVDMC4yMjM4NTggOCAwIDcuNzc2MTQgMCA3LjVDMCA3LjIyMzg2IDAuMjIzODU4IDcgMC41IDdINS43OTQ3QzYuMDI5OCA1LjcxOTYyIDcuMTUxNTQgNC43NDk0MiA4LjQ5OTg4IDQuNzQ5NDJDOS44NDgyMiA0Ljc0OTQyIDEwLjk2OTkgNS43MTk2MiAxMS4yMDUxIDdIMTQuNUMxNC43NzYxIDcgMTUgNy4yMjM4NiAxNSA3LjVDMTUgNy43NzYxNCAxNC43NzYxIDggMTQuNSA4SDExLjIwNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFByPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xNC40OTk5IDAuOTk5OTk0QzE0LjIyMzcgMC45OTk5OTQgMTMuOTk5OSAxLjIyMzg1IDEzLjk5OTkgMS40OTk5OUwxMy45OTk5IDUuOTk5OTVMOS45OTk5MiA1Ljk5OTk1QzkuNDQ3NjQgNS45OTk5NSA4Ljk5OTkzIDYuNDQ3NjYgOC45OTk5MyA2Ljk5OTk0TDguOTk5OTMgNy45OTk5NEM4Ljk5OTkzIDguNTUyMjIgOS40NDc2NCA4Ljk5OTkzIDkuOTk5OTIgOC45OTk5M0wxMy45OTk5IDguOTk5OTNMMTMuOTk5OSAxMy40OTk5QzEzLjk5OTkgMTMuNzc2IDE0LjIyMzcgMTMuOTk5OSAxNC40OTk5IDEzLjk5OTlDMTQuNzc2IDEzLjk5OTkgMTQuOTk5OSAxMy43NzYgMTQuOTk5OSAxMy40OTk5TDE0Ljk5OTkgMS40OTk5OUMxNC45OTk5IDEuMjIzODUgMTQuNzc2IDAuOTk5OTk0IDE0LjQ5OTkgMC45OTk5OTRaTTQuOTk5OTYgNS45OTk5NUwwLjk5OTk5MiA1Ljk5OTk1TDAuOTk5OTkyIDEuNDk5OTlDMC45OTk5OTIgMS4yMjM4NSAwLjc3NjEzNiAwLjk5OTk5NCAwLjQ5OTk5NiAwLjk5OTk5NEMwLjIyMzg1NiAwLjk5OTk5NCAtOS43ODUyZS0wOSAxLjIyMzg1IC0yLjE4NTU3ZS0wOCAxLjQ5OTk5TDQuMDcyNzllLTA3IDEzLjQ5OTlDMy45NTIwOGUtMDcgMTMuNzc2IDAuMjIzODU1IDEzLjk5OTkgMC40OTk5OTYgMTMuOTk5OUMwLjc3NjEzNiAxMy45OTk5IDAuOTk5OTkyIDEzLjc3NiAwLjk5OTk5MiAxMy40OTk5TDAuOTk5OTkyIDguOTk5OTNMNC45OTk5NiA4Ljk5OTkzQzUuNTUyMjQgOC45OTk5MyA1Ljk5OTk1IDguNTUyMjIgNS45OTk5NSA3Ljk5OTkzTDUuOTk5OTUgNi45OTk5NEM1Ljk5OTk1IDYuNDQ3NjYgNS41NTIyNCA1Ljk5OTk1IDQuOTk5OTYgNS45OTk5NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEVyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wLjk5OTg3OCAwLjVDMC45OTk4NzggMC4yMjM4NTggMS4yMjM3NCAwIDEuNDk5ODggMEgxMy40OTk5QzEzLjc3NiAwIDEzLjk5OTkgMC4yMjM4NTggMTMuOTk5OSAwLjVDMTMuOTk5OSAwLjc3NjE0MiAxMy43NzYgMSAxMy40OTk5IDFMOSAxVjVDOSA1LjU1MjI4IDguNTUyMjggNiA4IDZIN0M2LjQ0NzcyIDYgNiA1LjU1MjI4IDYgNVYxSDEuNDk5ODhDMS4yMjM3NCAxIDAuOTk5ODc4IDAuNzc2MTQyIDAuOTk5ODc4IDAuNVpNNyA5QzYuNDQ3NzIgOSA2IDkuNDQ3NzEgNiAxMFYxNEgxLjQ5OTg4QzEuMjIzNzQgMTQgMC45OTk4NzggMTQuMjIzOSAwLjk5OTg3OCAxNC41QzAuOTk5ODc4IDE0Ljc3NjEgMS4yMjM3NCAxNSAxLjQ5OTg4IDE1SDEzLjQ5OTlDMTMuNzc2IDE1IDEzLjk5OTkgMTQuNzc2MSAxMy45OTk5IDE0LjVDMTMuOTk5OSAxNC4yMjM5IDEzLjc3NiAxNCAxMy40OTk5IDE0SDlWMTBDOSA5LjQ0NzcyIDguNTUyMjggOSA4IDlIN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGpyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xNC40OTk5IDAuOTk5OTkyQzE0LjIyMzcgMC45OTk5OTIgMTMuOTk5OSAxLjIyMzg1IDEzLjk5OTkgMS40OTk5OUwxMy45OTk5IDEzLjQ5OTlDMTMuOTk5OSAxMy43NzYgMTQuMjIzNyAxMy45OTk5IDE0LjQ5OTkgMTMuOTk5OUMxNC43NzYgMTMuOTk5OSAxNC45OTk5IDEzLjc3NiAxNC45OTk5IDEzLjQ5OTlMMTQuOTk5OSAxLjQ5OTk5QzE0Ljk5OTkgMS4yMjM4NSAxNC43NzYgMC45OTk5OTIgMTQuNDk5OSAwLjk5OTk5MlpNMC40OTk5OTYgMC45OTk5OTJDMC4yMjM4NTYgMC45OTk5OTIgLTkuNzg1MDllLTA5IDEuMjIzODUgLTIuMTg1NTZlLTA4IDEuNDk5OTlMNC4wNzI3OWUtMDcgMTMuNDk5OUMzLjk1MjA4ZS0wNyAxMy43NzYgMC4yMjM4NTUgMTMuOTk5OSAwLjQ5OTk5NiAxMy45OTk5QzAuNzc2MTM2IDEzLjk5OTkgMC45OTk5OTIgMTMuNzc2IDAuOTk5OTkyIDEzLjQ5OTlMMC45OTk5OTIgMS40OTk5OUMwLjk5OTk5MiAxLjIyMzg1IDAuNzc2MTM2IDAuOTk5OTkyIDAuNDk5OTk2IDAuOTk5OTkyWk0xLjk5OTk4IDYuOTk5OTRDMS45OTk5OCA2LjQ0NzY2IDIuNDQ3NjkgNS45OTk5NSAyLjk5OTk4IDUuOTk5OTVMNS45OTk5NSA1Ljk5OTk1QzYuNTUyMjMgNS45OTk5NSA2Ljk5OTk0IDYuNDQ3NjYgNi45OTk5NCA2Ljk5OTk0TDYuOTk5OTQgNy45OTk5M0M2Ljk5OTk0IDguNTUyMjEgNi41NTIyMyA4Ljk5OTkyIDUuOTk5OTUgOC45OTk5MkwyLjk5OTk4IDguOTk5OTJDMi40NDc3IDguOTk5OTIgMS45OTk5OCA4LjU1MjIxIDEuOTk5OTggNy45OTk5M0wxLjk5OTk4IDYuOTk5OTRaTTguOTk5OTMgNS45OTk5NUM4LjQ0NzY1IDUuOTk5OTUgNy45OTk5MyA2LjQ0NzY2IDcuOTk5OTMgNi45OTk5NEw3Ljk5OTkzIDcuOTk5OTNDNy45OTk5MyA4LjU1MjIxIDguNDQ3NjUgOC45OTk5MiA4Ljk5OTkzIDguOTk5OTJMMTEuOTk5OSA4Ljk5OTkyQzEyLjU1MjIgOC45OTk5MiAxMi45OTk5IDguNTUyMjEgMTIuOTk5OSA3Ljk5OTkzTDEyLjk5OTkgNi45OTk5NEMxMi45OTk5IDYuNDQ3NjYgMTIuNTUyMiA1Ljk5OTk1IDExLjk5OTkgNS45OTk5NUw4Ljk5OTkzIDUuOTk5OTVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxScj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC45OTk4NzggMC41QzAuOTk5ODc4IDAuMjIzODU4IDEuMjIzNzQgMCAxLjQ5OTg4IDBIMTMuNDk5OUMxMy43NzYgMCAxMy45OTk5IDAuMjIzODU4IDEzLjk5OTkgMC41QzEzLjk5OTkgMC43NzYxNDIgMTMuNzc2IDEgMTMuNDk5OSAxSDEuNDk5ODhDMS4yMjM3NCAxIDAuOTk5ODc4IDAuNzc2MTQyIDAuOTk5ODc4IDAuNVpNNyAyQzYuNDQ3NzIgMiA2IDIuNDQ3NzIgNiAzVjZDNiA2LjU1MjI4IDYuNDQ3NzIgNyA3IDdIOEM4LjU1MjI4IDcgOSA2LjU1MjI4IDkgNlYzQzkgMi40NDc3MiA4LjU1MjI4IDIgOCAySDdaTTcgOEM2LjQ0NzcyIDggNiA4LjQ0NzcxIDYgOVYxMkM2IDEyLjU1MjMgNi40NDc3MiAxMyA3IDEzSDhDOC41NTIyOCAxMyA5IDEyLjU1MjMgOSAxMlY5QzkgOC40NDc3MiA4LjU1MjI4IDggOCA4SDdaTTEuNDk5ODggMTRDMS4yMjM3NCAxNCAwLjk5OTg3OCAxNC4yMjM5IDAuOTk5ODc4IDE0LjVDMC45OTk4NzggMTQuNzc2MSAxLjIyMzc0IDE1IDEuNDk5ODggMTVIMTMuNDk5OUMxMy43NzYgMTUgMTMuOTk5OSAxNC43NzYxIDEzLjk5OTkgMTQuNUMxMy45OTk5IDE0LjIyMzkgMTMuNzc2IDE0IDEzLjQ5OTkgMTRIMS40OTk4OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LElyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ2OTY4IDEuMDUwODVDNy42NDEyMiAxLjEzNDc1IDcuNzUgMS4zMDkwNCA3Ljc1IDEuNVYxMy41QzcuNzUgMTMuNjkxIDcuNjQxMjIgMTMuODY1MyA3LjQ2OTY4IDEzLjk0OTJDNy4yOTgxMyAxNC4wMzMxIDcuMDkzNzcgMTQuMDExOSA2Ljk0MzAzIDEzLjg5NDdMMy4yMjEzIDExSDEuNUMwLjY3MTU3MSAxMSAwIDEwLjMyODQgMCA5LjVWNS41QzAgNC42NzE1OCAwLjY3MTU3MyA0IDEuNSA0SDMuMjIxM0w2Ljk0MzAzIDEuMTA1MzNDNy4wOTM3NyAwLjk4ODA4NSA3LjI5ODEzIDAuOTY2OTQ1IDcuNDY5NjggMS4wNTA4NVpNNi43NSAyLjUyMjMyTDMuNjk5ODMgNC44OTQ2OEMzLjYxMjA2IDQuOTYyOTQgMy41MDQwNSA1IDMuMzkyODYgNUgxLjVDMS4yMjM4NiA1IDEgNS4yMjM4NiAxIDUuNVY5LjVDMSA5Ljc3NjE1IDEuMjIzODYgMTAgMS41IDEwSDMuMzkyODZDMy41MDQwNSAxMCAzLjYxMjA2IDEwLjAzNzEgMy42OTk4MyAxMC4xMDUzTDYuNzUgMTIuNDc3N1YyLjUyMjMyWk0xMC4yNzg0IDMuODQ4MDRDMTAuNDYyMyAzLjcyNTY3IDEwLjcxMDYgMy43NzU1NyAxMC44MzMgMy45NTk0OUMxMi4yNTU4IDYuMDk3OTggMTIuMjU1OCA4LjkwMTk5IDEwLjgzMyAxMS4wNDA1QzEwLjcxMDYgMTEuMjI0NCAxMC40NjIzIDExLjI3NDMgMTAuMjc4NCAxMS4xNTE5QzEwLjA5NDQgMTEuMDI5NiAxMC4wNDQ1IDEwLjc4MTMgMTAuMTY2OSAxMC41OTczQzExLjQxMTEgOC43MjcyOCAxMS40MTExIDYuMjcyNjkgMTAuMTY2OSA0LjQwMjY0QzEwLjA0NDUgNC4yMTg3MSAxMC4wOTQ0IDMuOTcwNDEgMTAuMjc4NCAzLjg0ODA0Wk0xMi42Nzg1IDEuNDMwNDRDMTIuNTM1NiAxLjI2MTkgMTIuMjgzMiAxLjI0MTA0IDEyLjExNDcgMS4zODM4NkMxMS45NDYyIDEuNTI2NjcgMTEuOTI1MyAxLjc3OTA4IDEyLjA2ODEgMS45NDc2MkMxNC43NzczIDUuMTQ0ODggMTQuNzc3MyA5Ljg1NTEzIDEyLjA2ODEgMTMuMDUyNEMxMS45MjUzIDEzLjIyMDkgMTEuOTQ2MiAxMy40NzMzIDEyLjExNDcgMTMuNjE2MUMxMi4yODMyIDEzLjc1OSAxMi41MzU2IDEzLjczODEgMTIuNjc4NSAxMy41Njk2QzE1LjY0MDYgMTAuMDczOSAxNS42NDA2IDQuOTI2MTIgMTIuNjc4NSAxLjQzMDQ0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVnI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTggMS41QzggMS4zMTA2MiA3Ljg5MyAxLjEzNzQ5IDcuNzIzNjEgMS4wNTI3OUM3LjU1NDIxIDAuOTY4MDkzIDcuMzUxNTEgMC45ODYzNzEgNy4yIDEuMUwzLjMzMzMzIDRIMS41QzAuNjcxNTczIDQgMCA0LjY3MTU4IDAgNS41VjkuNUMwIDEwLjMyODQgMC42NzE1NzMgMTEgMS41IDExSDMuMzMzMzNMNy4yIDEzLjlDNy4zNTE1MSAxNC4wMTM2IDcuNTU0MjEgMTQuMDMxOSA3LjcyMzYxIDEzLjk0NzJDNy44OTMgMTMuODYyNSA4IDEzLjY4OTQgOCAxMy41VjEuNVpNMy44IDQuOUw3IDIuNVYxMi41TDMuOCAxMC4xQzMuNzEzNDUgMTAuMDM1MSAzLjYwODE5IDEwIDMuNSAxMEgxLjVDMS4yMjM4NiAxMCAxIDkuNzc2MTQgMSA5LjVWNS41QzEgNS4yMjM4NiAxLjIyMzg2IDUgMS41IDVIMy41QzMuNjA4MTkgNSAzLjcxMzQ1IDQuOTY0OTEgMy44IDQuOVpNMTAuODMzIDMuOTU5NDlDMTAuNzEwNiAzLjc3NTU3IDEwLjQ2MjMgMy43MjU2NyAxMC4yNzg0IDMuODQ4MDRDMTAuMDk0NCAzLjk3MDQxIDEwLjA0NDUgNC4yMTg3MSAxMC4xNjY5IDQuNDAyNjRDMTEuNDExMSA2LjI3MjY4IDExLjQxMTEgOC43MjcyOCAxMC4xNjY5IDEwLjU5NzNDMTAuMDQ0NSAxMC43ODEzIDEwLjA5NDQgMTEuMDI5NiAxMC4yNzg0IDExLjE1MTlDMTAuNDYyMyAxMS4yNzQzIDEwLjcxMDYgMTEuMjI0NCAxMC44MzMgMTEuMDQwNUMxMi4yNTU4IDguOTAxOTkgMTIuMjU1OCA2LjA5Nzk4IDEwLjgzMyAzLjk1OTQ5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sSHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNzIzNjEgMS4wNTI3OUM3Ljg5MyAxLjEzNzQ5IDggMS4zMTA2MiA4IDEuNVYxMy41QzggMTMuNjg5NCA3Ljg5MyAxMy44NjI1IDcuNzIzNjEgMTMuOTQ3MkM3LjU1NDIxIDE0LjAzMTkgNy4zNTE1MSAxNC4wMTM2IDcuMiAxMy45TDMuMzMzMzMgMTFIMS41QzAuNjcxNTczIDExIDAgMTAuMzI4NCAwIDkuNVY1LjVDMCA0LjY3MTU4IDAuNjcxNTczIDQgMS41IDRIMy4zMzMzM0w3LjIgMS4xQzcuMzUxNTEgMC45ODYzNzEgNy41NTQyMSAwLjk2ODA5MyA3LjcyMzYxIDEuMDUyNzlaTTcgMi41TDMuOCA0LjlDMy43MTM0NSA0Ljk2NDkxIDMuNjA4MTkgNSAzLjUgNUgxLjVDMS4yMjM4NiA1IDEgNS4yMjM4NiAxIDUuNVY5LjVDMSA5Ljc3NjE0IDEuMjIzODYgMTAgMS41IDEwSDMuNUMzLjYwODE5IDEwIDMuNzEzNDUgMTAuMDM1MSAzLjggMTAuMUw3IDEyLjVWMi41Wk0xNC44NTM2IDUuMTQ2NDVDMTUuMDQ4OCA1LjM0MTcxIDE1LjA0ODggNS42NTgyOSAxNC44NTM2IDUuODUzNTVMMTMuMjA3MSA3LjVMMTQuODUzNiA5LjE0NjQ1QzE1LjA0ODggOS4zNDE3MSAxNS4wNDg4IDkuNjU4MjkgMTQuODUzNiA5Ljg1MzU1QzE0LjY1ODMgMTAuMDQ4OCAxNC4zNDE3IDEwLjA0ODggMTQuMTQ2NCA5Ljg1MzU1TDEyLjUgOC4yMDcxMUwxMC44NTM2IDkuODUzNTVDMTAuNjU4MyAxMC4wNDg4IDEwLjM0MTcgMTAuMDQ4OCAxMC4xNDY0IDkuODUzNTVDOS45NTExOCA5LjY1ODI5IDkuOTUxMTggOS4zNDE3MSAxMC4xNDY0IDkuMTQ2NDVMMTEuNzkyOSA3LjVMMTAuMTQ2NCA1Ljg1MzU1QzkuOTUxMTggNS42NTgyOSA5Ljk1MTE4IDUuMzQxNzEgMTAuMTQ2NCA1LjE0NjQ1QzEwLjM0MTcgNC45NTExOCAxMC42NTgzIDQuOTUxMTggMTAuODUzNiA1LjE0NjQ1TDEyLjUgNi43OTI4OUwxNC4xNDY0IDUuMTQ2NDVDMTQuMzQxNyA0Ljk1MTE4IDE0LjY1ODMgNC45NTExOCAxNC44NTM2IDUuMTQ2NDVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxBcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOCAxLjVDOCAxLjMxMDYyIDcuODkzIDEuMTM3NDkgNy43MjM2MSAxLjA1Mjc5QzcuNTU0MjEgMC45NjgwOTMgNy4zNTE1MSAwLjk4NjM3MSA3LjIgMS4xTDMuMzMzMzMgNEgxLjVDMC42NzE1NzMgNCAwIDQuNjcxNTggMCA1LjVWOS41QzAgMTAuMzI4NCAwLjY3MTU3MyAxMSAxLjUgMTFIMy4zMzMzM0w3LjIgMTMuOUM3LjM1MTUxIDE0LjAxMzYgNy41NTQyMSAxNC4wMzE5IDcuNzIzNjEgMTMuOTQ3MkM3Ljg5MyAxMy44NjI1IDggMTMuNjg5NCA4IDEzLjVWMS41Wk0zLjggNC45TDcgMi41VjEyLjVMMy44IDEwLjFDMy43MTM0NSAxMC4wMzUxIDMuNjA4MTkgMTAgMy41IDEwSDEuNUMxLjIyMzg2IDEwIDEgOS43NzYxNCAxIDkuNVY1LjVDMSA1LjIyMzg2IDEuMjIzODYgNSAxLjUgNUgzLjVDMy42MDgxOSA1IDMuNzEzNDUgNC45NjQ5MSAzLjggNC45Wk0xMC4wODMgNS4wNTU3N0M5Ljk2MDY2IDQuODcxODUgOS43MTIzNSA0LjgyMTk1IDkuNTI4NDMgNC45NDQzMkM5LjM0NDUgNS4wNjY2OSA5LjI5NDYgNS4zMTQ5OSA5LjQxNjk3IDUuNDk4OTJDMTAuMjIwNyA2LjcwNjkzIDEwLjIyMDcgOC4yOTMwMyA5LjQxNjk3IDkuNTAxMDRDOS4yOTQ2IDkuNjg0OTYgOS4zNDQ1IDkuOTMzMjYgOS41Mjg0MyAxMC4wNTU2QzkuNzEyMzUgMTAuMTc4IDkuOTYwNjYgMTAuMTI4MSAxMC4wODMgOS45NDQxOEMxMS4wNjUzIDguNDY3NzMgMTEuMDY1MyA2LjUzMjIyIDEwLjA4MyA1LjA1NTc3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEgMUgxLjVIMTMuNUgxNFYxLjVWMTMuNVYxNEgxMy41SDEuNUgxVjEzLjVWMS41VjFaTTIgMlYxM0gxM1YySDJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxEcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy43NTQzMiAxLjgxOTU0QzcuNTk3NDIgMS43MjY4MiA3LjQwMjUgMS43MjY4MiA3LjI0NTU5IDEuODE5NTRMMS43NDU1OSA1LjA2OTU0QzEuNTkzMzYgNS4xNTk0OSAxLjQ5OTk2IDUuMzIzMTcgMS40OTk5NiA1LjVDMS40OTk5NiA1LjY3NjgzIDEuNTkzMzYgNS44NDA1MSAxLjc0NTU5IDUuOTMwNDZMNy4yNDU1OSA5LjE4MDQ2QzcuNDAyNSA5LjI3MzE4IDcuNTk3NDIgOS4yNzMxOCA3Ljc1NDMyIDkuMTgwNDZMMTMuMjU0MyA1LjkzMDQ2QzEzLjQwNjYgNS44NDA1MSAxMy41IDUuNjc2ODMgMTMuNSA1LjVDMTMuNSA1LjMyMzE3IDEzLjQwNjYgNS4xNTk0OSAxMy4yNTQzIDUuMDY5NTRMNy43NTQzMiAxLjgxOTU0Wk03LjQ5OTk2IDguMTY5MjNMMi45ODI4IDUuNUw3LjQ5OTk2IDIuODMwNzdMMTIuMDE3MSA1LjVMNy40OTk5NiA4LjE2OTIzWk0yLjI1NDMyIDguMzE5NTRDMi4wMTY1OCA4LjE3OTA2IDEuNzA5OTggOC4yNTc5IDEuNTY5NDkgOC40OTU2NEMxLjQyOTAxIDguNzMzMzcgMS41MDc4NSA5LjAzOTk4IDEuNzQ1NTkgOS4xODA0Nkw3LjI0NTU5IDEyLjQzMDVDNy40MDI1IDEyLjUyMzIgNy41OTc0MiAxMi41MjMyIDcuNzU0MzIgMTIuNDMwNUwxMy4yNTQzIDkuMTgwNDZDMTMuNDkyMSA5LjAzOTk4IDEzLjU3MDkgOC43MzMzNyAxMy40MzA0IDguNDk1NjRDMTMuMjg5OSA4LjI1NzkgMTIuOTgzMyA4LjE3OTA2IDEyLjc0NTYgOC4zMTk1NEw3LjQ5OTk2IDExLjQxOTJMMi4yNTQzMiA4LjMxOTU0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQnI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTYuOTc5NDIgMS4yNTE3MUw2Ljk1ODUgMS4zMDE5OUw1LjU4NjYyIDQuNjAwMzlDNS41NDM0MiA0LjcwNDI2IDUuNDQ1NzMgNC43NzUyMyA1LjMzMzYgNC43ODQyMkwxLjc3MjcgNS4wNjk3TDEuNzE4NDEgNS4wNzQwNUwxLjM4Njg3IDUuMTAwNjNMMS4wODYwOCA1LjEyNDc1QzAuODIwMDg1IDUuMTQ2MDcgMC43MTIyMjggNS40NzgwMiAwLjkxNDg4OSA1LjY1MTYyTDEuMTQ0MDYgNS44NDc5M0wxLjM5NjY2IDYuMDY0MzFMMS40MzgwMiA2LjA5OTc0TDQuMTUxMDUgOC40MjM3NEM0LjIzNjQ4IDguNDk2OTIgNC4yNzM4IDguNjExNzYgNC4yNDc2OSA4LjcyMTE4TDMuNDE4ODIgMTIuMTk2TDMuNDA2MTggMTIuMjQ5TDMuMzI5MDEgMTIuNTcyNUwzLjI1ODk5IDEyLjg2NkMzLjE5NzA4IDEzLjEyNTYgMy40Nzk0NSAxMy4zMzA4IDMuNzA3MTggMTMuMTkxN0wzLjk2NDcgMTMuMDM0NEw0LjI0ODU0IDEyLjg2MUw0LjI5NTAyIDEyLjgzMjZMNy4zNDM2NSAxMC45NzA1QzcuNDM5NjUgMTAuOTExOSA3LjU2MDQgMTAuOTExOSA3LjY1NjQgMTAuOTcwNUwxMC43MDUgMTIuODMyNkwxMC43NTE1IDEyLjg2MUwxMS4wMzU0IDEzLjAzNDRMMTEuMjkyOSAxMy4xOTE3QzExLjUyMDYgMTMuMzMwOCAxMS44MDMgMTMuMTI1NiAxMS43NDExIDEyLjg2NkwxMS42NzEgMTIuNTcyNUwxMS41OTM5IDEyLjI0OUwxMS41ODEyIDEyLjE5NkwxMC43NTI0IDguNzIxMThDMTAuNzI2MyA4LjYxMTc2IDEwLjc2MzYgOC40OTY5MiAxMC44NDkgOC40MjM3NEwxMy41NjIgNi4wOTk3NEwxMy42MDM0IDYuMDY0MzFMMTMuODU2IDUuODQ3OTNMMTQuMDg1MiA1LjY1MTYyQzE0LjI4NzggNS40NzgwMiAxNC4xOCA1LjE0NjA3IDEzLjkxNCA1LjEyNDc1TDEzLjYxMzIgNS4xMDA2M0wxMy4yODE2IDUuMDc0MDVMMTMuMjI3NCA1LjA2OTdMOS42NjY0NSA0Ljc4NDIyQzkuNTU0MzIgNC43NzUyMyA5LjQ1NjYzIDQuNzA0MjYgOS40MTM0MyA0LjYwMDM5TDguMDQxNTUgMS4zMDE5OUw4LjAyMDY0IDEuMjUxNzFMNy44OTI5MSAwLjk0NDYwOUw3Ljc3NzAyIDAuNjY1OTkyQzcuNjc0NTQgMC40MTk2MDQgNy4zMjU1MSAwLjQxOTYwNCA3LjIyMzAzIDAuNjY1OTkyTDcuMTA3MTUgMC45NDQ2MDlMNi45Nzk0MiAxLjI1MTcxWk03LjUwMDAzIDIuNjAzOTdMNi41MDk5NCA0Ljk4NDQyQzYuMzIyNzMgNS40MzQ1MyA1Ljg5OTQ0IDUuNzQyMDcgNS40MTM1MSA1Ljc4MTAzTDIuODQzNjEgNS45ODcwNUw0LjgwMTYgNy42NjQyOEM1LjE3MTgzIDcuOTgxNDIgNS4zMzM1MSA4LjQ3OTAzIDUuMjIwNCA4Ljk1MzIxTDQuNjIyMjEgMTEuNDYxTDYuODIyNCAxMC4xMTcxQzcuMjM4NDIgOS44NjMwMiA3Ljc2MTY0IDkuODYzMDIgOC4xNzc2NiAxMC4xMTcxTDEwLjM3NzggMTEuNDYxTDkuNzc5NjUgOC45NTMyMUM5LjY2NjU0IDguNDc5MDMgOS44MjgyMiA3Ljk4MTQyIDEwLjE5ODQgNy42NjQyOEwxMi4xNTY0IDUuOTg3MDVMOS41ODY1NCA1Ljc4MTAzQzkuMTAwNjEgNS43NDIwNyA4LjY3NzMyIDUuNDM0NTMgOC40OTAxMSA0Ljk4NDQyTDcuNTAwMDMgMi42MDM5N1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFpyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjIyMzAzIDAuNjY1OTkyQzcuMzI1NTEgMC40MTk2MDQgNy42NzQ1NCAwLjQxOTYwNCA3Ljc3NzAyIDAuNjY1OTkyTDkuNDEzNDMgNC42MDAzOUM5LjQ1NjYzIDQuNzA0MjYgOS41NTQzMiA0Ljc3NTIzIDkuNjY2NDUgNC43ODQyMkwxMy45MTQgNS4xMjQ3NUMxNC4xOCA1LjE0NjA3IDE0LjI4NzggNS40NzgwMiAxNC4wODUyIDUuNjUxNjJMMTAuODQ5IDguNDIzNzRDMTAuNzYzNiA4LjQ5NjkyIDEwLjcyNjMgOC42MTE3NiAxMC43NTI0IDguNzIxMThMMTEuNzQxMSAxMi44NjZDMTEuODAzIDEzLjEyNTYgMTEuNTIwNiAxMy4zMzA4IDExLjI5MjkgMTMuMTkxN0w3LjY1NjQgMTAuOTcwNUM3LjU2MDQgMTAuOTExOSA3LjQzOTY1IDEwLjkxMTkgNy4zNDM2NSAxMC45NzA1TDMuNzA3MTggMTMuMTkxN0MzLjQ3OTQ1IDEzLjMzMDggMy4xOTcwOCAxMy4xMjU2IDMuMjU4OTkgMTIuODY2TDQuMjQ3NjkgOC43MjExOEM0LjI3MzggOC42MTE3NiA0LjIzNjQ4IDguNDk2OTIgNC4xNTEwNSA4LjQyMzc0TDAuOTE0ODg5IDUuNjUxNjJDMC43MTIyMjggNS40NzgwMiAwLjgyMDA4NiA1LjE0NjA3IDEuMDg2MDggNS4xMjQ3NUw1LjMzMzYgNC43ODQyMkM1LjQ0NTczIDQuNzc1MjMgNS41NDM0MiA0LjcwNDI2IDUuNTg2NjIgNC42MDAzOUw3LjIyMzAzIDAuNjY1OTkyWlwiLGZpbGw6bn0pKX0sJHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuODQ5OTggNy40OTk5OEMxLjg0OTk4IDcuMjEzMjEgMS44NzEzNCA2LjkzMTQzIDEuOTEyNTYgNi42NTYxNUw5LjU2Mzc0IDIuMjM4NzVDOS44NjMxMSAyLjM1NjI3IDEwLjE1IDIuNDk4NjEgMTAuNDIxOSAyLjY2MzIyTDMuNzcwNjUgNi41MDMzMkMzLjczNjY5IDYuNTIxODMgMy43MDQ4MiA2LjU0NDkgMy42NzYwMiA2LjU3MjM4QzMuNTkxMSA2LjY1MzA4IDMuNTQyNDUgNi43NjI4NiAzLjUzNjgyIDYuODc2NThDMy41MzM1OSA2Ljk0MTggMy41NDQ1MSA3LjAwODMxIDMuNTcwODYgNy4wNzEzN0MzLjU4OTI3IDcuMTE1NyAzLjYxNDkgNy4xNTc0MiAzLjY0NzQ0IDcuMTk0NThDMy42NzMwNiA3LjIyMzk2IDMuNzAyIDcuMjQ5NDEgMy43MzMzNyA3LjI3MDY5TDcuMzI1MzMgOS44MzgxM0wzLjg3MjMyIDExLjgzMTdDMi42MzYwNCAxMC43OTUzIDEuODQ5OTggOS4yMzk0NCAxLjg0OTk4IDcuNDk5OThaTTguMzY4NDMgMTAuMjc1MUM4LjM3NjgyIDEwLjI3MDYgOC4zODUwOSAxMC4yNjU5IDguMzkzMjIgMTAuMjYwOEw5Ljg0MDkxIDkuNDI0OTlDOS44NDcwNiA5LjQyMTYzIDkuODUzMTQgOS40MTgxMiA5Ljg1OTE1IDkuNDE0NDZMMTEuMzEwMSA4LjU3Njc3QzExLjM2NTUgOC41NDY0OSAxMS40MTU0IDguNTA0IDExLjQ1NTQgOC40NDk5NUMxMS42MDM0IDguMjUwMzEgMTEuNTYxNiA3Ljk2ODQ4IDExLjM2MiA3LjgyMDQ2TDcuODI3NzkgNS4yMDAxN0wxMS4yMTYxIDMuMjQzOTNDMTIuNDAxMyA0LjI3OTYzIDEzLjE1IDUuODAyMzcgMTMuMTUgNy40OTk5OEMxMy4xNSA3LjgzNTQ2IDEzLjEyMDcgOC4xNjQxMSAxMy4wNjQ3IDguNDgzNTNMNS41Njg3NSAxMi44MTEzQzUuMjYxMzggMTIuNjk5NSA0Ljk2NjQ2IDEyLjU2MTggNC42ODY2MiAxMi40MDA4TDguMzY4NDMgMTAuMjc1MVpNOC4xODE0OSA5LjM0MzgzTDQuODE2NTkgNi45Mzg2OEw1LjUwOTE4IDYuNTM4ODFMOC44MDYwNCA4Ljk4MzI0TDguMTgxNDkgOS4zNDM4M1pNNi4zNTg3NSA2LjA0ODMyTDYuOTc4MjIgNS42OTA2N0wxMC4yNzUxIDguMTM1MDZMOS42NTU2IDguNDkyNzVMNi4zNTg3NSA2LjA0ODMyWk04LjMzMTggMS45MTA3OEwyLjI0MjYzIDUuNDI2MzZDMy4wNjk0MSAzLjMzMTg4IDUuMTExNjQgMS44NDk5OCA3LjQ5OTk4IDEuODQ5OThDNy43ODI1OCAxLjg0OTk4IDguMDYwMzMgMS44NzA3MiA4LjMzMTggMS45MTA3OFpNNi44NDY4NCAxMy4xMTI2QzcuMDYxMTQgMTMuMTM3MyA3LjI3OTA4IDEzLjE1IDcuNDk5OTggMTMuMTVDOS44MjQ2IDEzLjE1IDExLjgyMTMgMTEuNzQ2MSAxMi42ODg2IDkuNzM5OUw2Ljg0Njg0IDEzLjExMjZaTTcuNDk5OTggMC44NDk5NzZDMy44MjcyOCAwLjg0OTk3NiAwLjg0OTk3NiAzLjgyNzI4IDAuODQ5OTc2IDcuNDk5OThDMC44NDk5NzYgMTEuMTcyNyAzLjgyNzI4IDE0LjE1IDcuNDk5OTggMTQuMTVDMTEuMTcyNyAxNC4xNSAxNC4xNSAxMS4xNzI3IDE0LjE1IDcuNDk5OThDMTQuMTUgMy44MjcyOCAxMS4xNzI3IDAuODQ5OTc2IDcuNDk5OTggMC44NDk5NzZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxOcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiAzQzIgMi40NDc3MiAyLjQ0NzcyIDIgMyAySDEyQzEyLjU1MjMgMiAxMyAyLjQ0NzcyIDEzIDNWMTJDMTMgMTIuNTUyMyAxMi41NTIzIDEzIDEyIDEzSDNDMi40NDc3MiAxMyAyIDEyLjU1MjMgMiAxMlYzWk0xMiAzSDNWMTJIMTJWM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEZyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjQ5OTk4IDAuNUM1LjQ5OTk4IDAuMjIzODU4IDUuNzIzODMgMCA1Ljk5OTk4IDBINy40OTk5OEg4Ljk5OTk4QzkuMjc2MTIgMCA5LjQ5OTk4IDAuMjIzODU4IDkuNDk5OTggMC41QzkuNDk5OTggMC43NzYxNDIgOS4yNzYxMiAxIDguOTk5OTggMUg3Ljk5OTk4VjIuMTE5MjJDOS4wOTgzMiAyLjIwNDA5IDEwLjExOSAyLjU2NjIyIDEwLjk5MiAzLjEzNTcyQzExLjAxMTYgMy4xMDg1MSAxMS4wMzM2IDMuMDgyNTIgMTEuMDU4IDMuMDU4MDZMMTEuODU4IDIuMjU4MDZDMTIuMTAyMSAyLjAxMzk4IDEyLjQ5NzggMi4wMTM5OCAxMi43NDE5IDIuMjU4MDZDMTIuOTg2IDIuNTAyMTQgMTIuOTg2IDIuODk3ODYgMTIuNzQxOSAzLjE0MTk0TDExLjk2NyAzLjkxNjgyQzEzLjE1OTUgNS4wNzkyNSAxMy45IDYuNzAzMTQgMTMuOSA4LjQ5OTk4QzEzLjkgMTIuMDM0NiAxMS4wMzQ2IDE0LjkgNy40OTk5OCAxNC45QzMuOTY1MzUgMTQuOSAxLjA5OTk4IDEyLjAzNDYgMS4wOTk5OCA4LjQ5OTk4QzEuMDk5OTggNS4xMzM2MiAzLjY5OTA0IDIuMzc0MyA2Ljk5OTk4IDIuMTE5MjJWMUg1Ljk5OTk4QzUuNzIzODMgMSA1LjQ5OTk4IDAuNzc2MTQyIDUuNDk5OTggMC41Wk0yLjA5OTk4IDguNDk5OThDMi4wOTk5OCA1LjUxNzY0IDQuNTE3NjQgMy4wOTk5OCA3LjQ5OTk4IDMuMDk5OThDMTAuNDgyMyAzLjA5OTk4IDEyLjkgNS41MTc2NCAxMi45IDguNDk5OThDMTIuOSAxMS40ODIzIDEwLjQ4MjMgMTMuOSA3LjQ5OTk4IDEzLjlDNC41MTc2NCAxMy45IDIuMDk5OTggMTEuNDgyMyAyLjA5OTk4IDguNDk5OThaTTcuOTk5OTggNC41QzcuOTk5OTggNC4yMjM4NiA3Ljc3NjEyIDQgNy40OTk5OCA0QzcuMjIzODMgNCA2Ljk5OTk4IDQuMjIzODYgNi45OTk5OCA0LjVWOS41QzYuOTk5OTggOS43NzYxNCA3LjIyMzgzIDEwIDcuNDk5OTggMTBDNy43NzYxMiAxMCA3Ljk5OTk4IDkuNzc2MTQgNy45OTk5OCA5LjVWNC41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sV3I9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTE0LjQ5OTkgMC45OTk5OTJDMTQuMjIzNyAwLjk5OTk5MiAxMy45OTk5IDEuMjIzODUgMTMuOTk5OSAxLjQ5OTk5TDEzLjk5OTkgNS45OTk5NUwwLjk5OTk5MiA1Ljk5OTk1TDAuOTk5OTkyIDEuNDk5OTlDMC45OTk5OTIgMS4yMjM4NSAwLjc3NjEzNiAwLjk5OTk5MiAwLjQ5OTk5NiAwLjk5OTk5MkMwLjIyMzg1NiAwLjk5OTk5MiAtOS43ODUwOWUtMDkgMS4yMjM4NSAtMi4xODU1NmUtMDggMS40OTk5OUw0LjA3Mjc5ZS0wNyAxMy40OTk5QzMuOTUyMDhlLTA3IDEzLjc3NiAwLjIyMzg1NSAxMy45OTk5IDAuNDk5OTk2IDEzLjk5OTlDMC43NzYxMzYgMTMuOTk5OSAwLjk5OTk5MiAxMy43NzYgMC45OTk5OTIgMTMuNDk5OUwwLjk5OTk5MiA4Ljk5OTkyTDEzLjk5OTkgOC45OTk5MkwxMy45OTk5IDEzLjQ5OTlDMTMuOTk5OSAxMy43NzYgMTQuMjIzNyAxMy45OTk5IDE0LjQ5OTkgMTMuOTk5OUMxNC43NzYgMTMuOTk5OSAxNC45OTk5IDEzLjc3NiAxNC45OTk5IDEzLjQ5OTlMMTQuOTk5OSAxLjQ5OTk5QzE0Ljk5OTkgMS4yMjM4NSAxNC43NzYgMC45OTk5OTIgMTQuNDk5OSAwLjk5OTk5MlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFVyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wLjk5OTg3OCAwLjVDMC45OTk4NzggMC4yMjM4NTggMS4yMjM3NCAwIDEuNDk5ODggMEgxMy40OTk5QzEzLjc3NiAwIDEzLjk5OTkgMC4yMjM4NTggMTMuOTk5OSAwLjVDMTMuOTk5OSAwLjc3NjE0MiAxMy43NzYgMSAxMy40OTk5IDFINkgxLjQ5OTg4QzEuMjIzNzQgMSAwLjk5OTg3OCAwLjc3NjE0MiAwLjk5OTg3OCAwLjVaTTkgMTRWMUw2IDFWMTRIMS40OTk4OEMxLjIyMzc0IDE0IDAuOTk5ODc4IDE0LjIyMzkgMC45OTk4NzggMTQuNUMwLjk5OTg3OCAxNC43NzYxIDEuMjIzNzQgMTUgMS40OTk4OCAxNUgxMy40OTk5QzEzLjc3NiAxNSAxMy45OTk5IDE0Ljc3NjEgMTMuOTk5OSAxNC41QzEzLjk5OTkgMTQuMjIzOSAxMy43NzYgMTQgMTMuNDk5OSAxNEg5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0senI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUuMDAwMDMgMy4yNUM1LjAwMDAzIDIuOTczODYgNC43NzYxNyAyLjc1IDQuNTAwMDMgMi43NUM0LjIyMzg5IDIuNzUgNC4wMDAwMyAyLjk3Mzg2IDQuMDAwMDMgMy4yNVY3LjEwMDAzSDIuNDk5OThDMi4yNzkwNiA3LjEwMDAzIDIuMDk5OTggNy4yNzkxMiAyLjA5OTk4IDcuNTAwMDNDMi4wOTk5OCA3LjcyMDk0IDIuMjc5MDYgNy45MDAwMyAyLjQ5OTk4IDcuOTAwMDNINC4wMDAwM1Y4LjU1QzQuMDAwMDMgMTAuNDgzIDUuNTY3MDMgMTIuMDUgNy41MDAwMyAxMi4wNUM5LjQzMzAzIDEyLjA1IDExIDEwLjQ4MyAxMSA4LjU1VjcuOTAwMDNIMTIuNUMxMi43MjA5IDcuOTAwMDMgMTIuOSA3LjcyMDk0IDEyLjkgNy41MDAwM0MxMi45IDcuMjc5MTIgMTIuNzIwOSA3LjEwMDAzIDEyLjUgNy4xMDAwM0gxMVYzLjI1QzExIDIuOTczODYgMTAuNzc2MiAyLjc1IDEwLjUgMi43NUMxMC4yMjM5IDIuNzUgMTAgMi45NzM4NiAxMCAzLjI1VjcuMTAwMDNINS4wMDAwM1YzLjI1Wk01LjAwMDAzIDcuOTAwMDNWOC41NUM1LjAwMDAzIDkuOTMwNzEgNi4xMTkzMiAxMS4wNSA3LjUwMDAzIDExLjA1QzguODgwNzQgMTEuMDUgMTAgOS45MzA3MSAxMCA4LjU1VjcuOTAwMDNINS4wMDAwM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEdyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUgMEM3Ljc3NjE0IDAgOCAwLjIyMzg1OCA4IDAuNVYyLjVDOCAyLjc3NjE0IDcuNzc2MTQgMyA3LjUgM0M3LjIyMzg2IDMgNyAyLjc3NjE0IDcgMi41VjAuNUM3IDAuMjIzODU4IDcuMjIzODYgMCA3LjUgMFpNMi4xOTY3IDIuMTk2N0MyLjM5MTk2IDIuMDAxNDQgMi43MDg1NCAyLjAwMTQ0IDIuOTAzODEgMi4xOTY3TDQuMzE4MDIgMy42MTA5MUM0LjUxMzI4IDMuODA2MTcgNC41MTMyOCA0LjEyMjc2IDQuMzE4MDIgNC4zMTgwMkM0LjEyMjc2IDQuNTEzMjggMy44MDYxNyA0LjUxMzI4IDMuNjEwOTEgNC4zMTgwMkwyLjE5NjcgMi45MDM4MUMyLjAwMTQ0IDIuNzA4NTQgMi4wMDE0NCAyLjM5MTk2IDIuMTk2NyAyLjE5NjdaTTAuNSA3QzAuMjIzODU4IDcgMCA3LjIyMzg2IDAgNy41QzAgNy43NzYxNCAwLjIyMzg1OCA4IDAuNSA4SDIuNUMyLjc3NjE0IDggMyA3Ljc3NjE0IDMgNy41QzMgNy4yMjM4NiAyLjc3NjE0IDcgMi41IDdIMC41Wk0yLjE5NjcgMTIuODAzM0MyLjAwMTQ0IDEyLjYwOCAyLjAwMTQ0IDEyLjI5MTUgMi4xOTY3IDEyLjA5NjJMMy42MTA5MSAxMC42ODJDMy44MDYxNyAxMC40ODY3IDQuMTIyNzYgMTAuNDg2NyA0LjMxODAyIDEwLjY4MkM0LjUxMzI4IDEwLjg3NzIgNC41MTMyOCAxMS4xOTM4IDQuMzE4MDIgMTEuMzg5MUwyLjkwMzgxIDEyLjgwMzNDMi43MDg1NCAxMi45OTg2IDIuMzkxOTYgMTIuOTk4NiAyLjE5NjcgMTIuODAzM1pNMTIuNSA3QzEyLjIyMzkgNyAxMiA3LjIyMzg2IDEyIDcuNUMxMiA3Ljc3NjE0IDEyLjIyMzkgOCAxMi41IDhIMTQuNUMxNC43NzYxIDggMTUgNy43NzYxNCAxNSA3LjVDMTUgNy4yMjM4NiAxNC43NzYxIDcgMTQuNSA3SDEyLjVaTTEwLjY4MiA0LjMxODAyQzEwLjQ4NjcgNC4xMjI3NiAxMC40ODY3IDMuODA2MTcgMTAuNjgyIDMuNjEwOTFMMTIuMDk2MiAyLjE5NjdDMTIuMjkxNSAyLjAwMTQ0IDEyLjYwOCAyLjAwMTQ0IDEyLjgwMzMgMi4xOTY3QzEyLjk5ODYgMi4zOTE5NiAxMi45OTg2IDIuNzA4NTQgMTIuODAzMyAyLjkwMzgxTDExLjM4OTEgNC4zMTgwMkMxMS4xOTM4IDQuNTEzMjggMTAuODc3MiA0LjUxMzI4IDEwLjY4MiA0LjMxODAyWk04IDEyLjVDOCAxMi4yMjM5IDcuNzc2MTQgMTIgNy41IDEyQzcuMjIzODYgMTIgNyAxMi4yMjM5IDcgMTIuNVYxNC41QzcgMTQuNzc2MSA3LjIyMzg2IDE1IDcuNSAxNUM3Ljc3NjE0IDE1IDggMTQuNzc2MSA4IDE0LjVWMTIuNVpNMTAuNjgyIDEwLjY4MkMxMC44NzcyIDEwLjQ4NjcgMTEuMTkzOCAxMC40ODY3IDExLjM4OTEgMTAuNjgyTDEyLjgwMzMgMTIuMDk2MkMxMi45OTg2IDEyLjI5MTUgMTIuOTk4NiAxMi42MDggMTIuODAzMyAxMi44MDMzQzEyLjYwOCAxMi45OTg2IDEyLjI5MTUgMTIuOTk4NiAxMi4wOTYyIDEyLjgwMzNMMTAuNjgyIDExLjM4OTFDMTAuNDg2NyAxMS4xOTM4IDEwLjQ4NjcgMTAuODc3MiAxMC42ODIgMTAuNjgyWk01LjUgNy41QzUuNSA2LjM5NTQzIDYuMzk1NDMgNS41IDcuNSA1LjVDOC42MDQ1NyA1LjUgOS41IDYuMzk1NDMgOS41IDcuNUM5LjUgOC42MDQ1NyA4LjYwNDU3IDkuNSA3LjUgOS41QzYuMzk1NDMgOS41IDUuNSA4LjYwNDU3IDUuNSA3LjVaTTcuNSA0LjVDNS44NDMxNSA0LjUgNC41IDUuODQzMTUgNC41IDcuNUM0LjUgOS4xNTY4NSA1Ljg0MzE1IDEwLjUgNy41IDEwLjVDOS4xNTY4NSAxMC41IDEwLjUgOS4xNTY4NSAxMC41IDcuNUMxMC41IDUuODQzMTUgOS4xNTY4NSA0LjUgNy41IDQuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEtyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMC41IDRDOC41NjcgNCA3IDUuNTY3IDcgNy41QzcgOS40MzMgOC41NjcgMTEgMTAuNSAxMUMxMi40MzMgMTEgMTQgOS40MzMgMTQgNy41QzE0IDUuNTY3IDEyLjQzMyA0IDEwLjUgNFpNNy42NzEzMyAxMUM2LjY1MTgzIDEwLjE3NSA2IDguOTEzNjMgNiA3LjVDNiA2LjA4NjM3IDYuNjUxODMgNC44MjQ5OCA3LjY3MTMzIDRINC41QzIuNTY3IDQgMSA1LjU2NyAxIDcuNUMxIDkuNDMzIDIuNTY3IDExIDQuNSAxMUg3LjY3MTMzWk0wIDcuNUMwIDUuMDE0NzIgMi4wMTQ3MiAzIDQuNSAzSDEwLjVDMTIuOTg1MyAzIDE1IDUuMDE0NzIgMTUgNy41QzE1IDkuOTg1MjggMTIuOTg1MyAxMiAxMC41IDEySDQuNUMyLjAxNDcyIDEyIDAgOS45ODUyOCAwIDcuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHFyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjkwMzIxIDcuMjk2NzdDMS45MDMyMSAxMC4zNDEgNC4xMTA0MSAxMi40MTQ3IDYuNTg4OTMgMTIuODQzOUM2Ljg3MjU1IDEyLjg5MyA3LjA2MjY2IDEzLjE2MjcgNy4wMTM1NSAxMy40NDY0QzYuOTY0NDQgMTMuNzMgNi42OTQ3MSAxMy45MjAxIDYuNDExMDkgMTMuODcxQzMuNDk5NDIgMTMuMzY2OCAwLjg2MDg0IDEwLjkxMjcgMC44NjA4NCA3LjI5Njc3QzAuODYwODM5IDUuNzYwMDkgMS41NTk5NiA0LjU1MjQ1IDIuMzc2MzkgMy42MzM3N0MyLjk2MTI0IDIuOTc1NjggMy42MzAzNCAyLjQ0MTM1IDQuMTY4NDYgMi4wMzIwMkwyLjUzMjA1IDIuMDMyMDJDMi4yNTU5MSAyLjAzMjAyIDIuMDMyMDUgMS44MDgxNiAyLjAzMjA1IDEuNTMyMDJDMi4wMzIwNSAxLjI1NTg4IDIuMjU1OTEgMS4wMzIwMiAyLjUzMjA1IDEuMDMyMDJMNS41MzIwNSAxLjAzMjAyQzUuODA4MTkgMS4wMzIwMiA2LjAzMjA1IDEuMjU1ODggNi4wMzIwNSAxLjUzMjAyTDYuMDMyMDUgNC41MzIwMkM2LjAzMjA1IDQuODA4MTYgNS44MDgxOSA1LjAzMjAyIDUuNTMyMDUgNS4wMzIwMkM1LjI1NTkxIDUuMDMyMDIgNS4wMzIwNSA0LjgwODE2IDUuMDMyMDUgNC41MzIwMkw1LjAzMjA1IDIuNjg2NDVMNS4wMzA1NCAyLjY4NzU5TDUuMDMwNDUgMi42ODc2Nkw1LjAzMDQ0IDIuNjg3NjdMNS4wMzA0MyAyLjY4NzY3QzQuNDU4OTYgMy4xMTg2OCAzLjc2MDU5IDMuNjQ1MzggMy4xNTU1NCA0LjMyNjJDMi40NDEwMiA1LjEzMDIxIDEuOTAzMjEgNi4xMDE1NCAxLjkwMzIxIDcuMjk2NzdaTTEzLjAxMDkgNy43MDMyMUMxMy4wMTA5IDQuNjkxMTUgMTAuODUwNSAyLjYyOTYgOC40MDM4NCAyLjE3MDI5QzguMTIwOTMgMi4xMTcxOCA3LjkzNDY1IDEuODQ0NzkgNy45ODc3NiAxLjU2MTg4QzguMDQwODcgMS4yNzg5OCA4LjMxMzI2IDEuMDkyNyA4LjU5NjE2IDEuMTQ1ODFDMTEuNDcwNCAxLjY4NTQxIDE0LjA1MzIgNC4xMjYwNSAxNC4wNTMyIDcuNzAzMjFDMTQuMDUzMiA5LjIzOTg4IDEzLjM1NDEgMTAuNDQ3NSAxMi41Mzc3IDExLjM2NjJDMTEuOTUyOCAxMi4wMjQzIDExLjI4MzcgMTIuNTU4NiAxMC43NDU2IDEyLjk2OEwxMi4zODIxIDEyLjk2OEMxMi42NTgyIDEyLjk2OCAxMi44ODIxIDEzLjE5MTggMTIuODgyMSAxMy40NjhDMTIuODgyMSAxMy43NDQxIDEyLjY1ODIgMTMuOTY4IDEyLjM4MjEgMTMuOTY4TDkuMzgyMDUgMTMuOTY4QzkuMTA1OTEgMTMuOTY4IDguODgyMDUgMTMuNzQ0MSA4Ljg4MjA1IDEzLjQ2OEw4Ljg4MjA1IDEwLjQ2OEM4Ljg4MjA1IDEwLjE5MTggOS4xMDU5MSA5Ljk2Nzk2IDkuMzgyMDUgOS45Njc5NkM5LjY1ODE5IDkuOTY3OTYgOS44ODIwNSAxMC4xOTE4IDkuODgyMDUgMTAuNDY4TDkuODgyMDUgMTIuMzEzNUw5Ljg4MzYyIDEyLjMxMjNDMTAuNDU1MSAxMS44ODEzIDExLjE1MzUgMTEuMzU0NiAxMS43NTg1IDEwLjY3MzhDMTIuNDczMSA5Ljg2OTc2IDEzLjAxMDkgOC44OTg0NCAxMy4wMTA5IDcuNzAzMjFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxZcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOCAySDEyLjVDMTIuNzc2MSAyIDEzIDIuMjIzODYgMTMgMi41VjVIOFYyWk03IDVWMkgyLjVDMi4yMjM4NiAyIDIgMi4yMjM4NiAyIDIuNVY1SDdaTTIgNlY5SDdWNkgyWk04IDZIMTNWOUg4VjZaTTggMTBIMTNWMTIuNUMxMyAxMi43NzYxIDEyLjc3NjEgMTMgMTIuNSAxM0g4VjEwWk0yIDEyLjVWMTBIN1YxM0gyLjVDMi4yMjM4NiAxMyAyIDEyLjc3NjEgMiAxMi41Wk0xIDIuNUMxIDEuNjcxNTcgMS42NzE1NyAxIDIuNSAxSDEyLjVDMTMuMzI4NCAxIDE0IDEuNjcxNTcgMTQgMi41VjEyLjVDMTQgMTMuMzI4NCAxMy4zMjg0IDE0IDEyLjUgMTRIMi41QzEuNjcxNTcgMTQgMSAxMy4zMjg0IDEgMTIuNVYyLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxKcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC45MDAwMjQgNy41MDAwMkMwLjkwMDAyNCAzLjg1NDk1IDMuODU0OTUgMC45MDAwMjQgNy41MDAwMiAwLjkwMDAyNEMxMS4xNDUxIDAuOTAwMDI0IDE0LjEgMy44NTQ5NSAxNC4xIDcuNTAwMDJDMTQuMSAxMS4xNDUxIDExLjE0NTEgMTQuMSA3LjUwMDAyIDE0LjFDMy44NTQ5NSAxNC4xIDAuOTAwMDI0IDExLjE0NTEgMC45MDAwMjQgNy41MDAwMlpNNy41MDAwMiAxLjgwMDAyQzQuMzUyMDEgMS44MDAwMiAxLjgwMDAyIDQuMzUyMDEgMS44MDAwMiA3LjUwMDAyQzEuODAwMDIgMTAuNjQ4IDQuMzUyMDEgMTMuMiA3LjUwMDAyIDEzLjJDMTAuNjQ4IDEzLjIgMTMuMiAxMC42NDggMTMuMiA3LjUwMDAyQzEzLjIgNC4zNTIwMSAxMC42NDggMS44MDAwMiA3LjUwMDAyIDEuODAwMDJaTTMuMDc1MDQgNy41MDAwMkMzLjA3NTA0IDUuMDU2MTcgNS4wNTYxOCAzLjA3NTAyIDcuNTAwMDQgMy4wNzUwMkM5Ljk0Mzg4IDMuMDc1MDIgMTEuOTI1IDUuMDU2MTcgMTEuOTI1IDcuNTAwMDJDMTEuOTI1IDkuOTQzODYgOS45NDM4OCAxMS45MjUgNy41MDAwNCAxMS45MjVDNS4wNTYxOCAxMS45MjUgMy4wNzUwNCA5Ljk0Mzg2IDMuMDc1MDQgNy41MDAwMlpNNy41MDAwNCAzLjkyNTAyQzUuNTI1NjIgMy45MjUwMiAzLjkyNTA0IDUuNTI1NjEgMy45MjUwNCA3LjUwMDAyQzMuOTI1MDQgOS40NzQ0MiA1LjUyNTYzIDExLjA3NSA3LjUwMDA0IDExLjA3NUM5LjQ3NDQ0IDExLjA3NSAxMS4wNzUgOS40NzQ0MiAxMS4wNzUgNy41MDAwMkMxMS4wNzUgNS41MjU2MSA5LjQ3NDQ0IDMuOTI1MDIgNy41MDAwNCAzLjkyNTAyWk03LjUwMDA0IDUuMjUwMDJDNi4yNTc0IDUuMjUwMDIgNS4yNTAwNCA2LjI1NzM5IDUuMjUwMDQgNy41MDAwMkM1LjI1MDA0IDguNzQyNjYgNi4yNTc0IDkuNzUwMDIgNy41MDAwNCA5Ljc1MDAyQzguNzQyNjcgOS43NTAwMiA5Ljc1MDA0IDguNzQyNjYgOS43NTAwNCA3LjUwMDAyQzkuNzUwMDQgNi4yNTczOCA4Ljc0MjY3IDUuMjUwMDIgNy41MDAwNCA1LjI1MDAyWk02LjA1MDA0IDcuNTAwMDJDNi4wNTAwNCA2LjY5OTIxIDYuNjk5MjMgNi4wNTAwMiA3LjUwMDA0IDYuMDUwMDJDOC4zMDA4NCA2LjA1MDAyIDguOTUwMDQgNi42OTkyMSA4Ljk1MDA0IDcuNTAwMDJDOC45NTAwNCA4LjMwMDgzIDguMzAwODQgOC45NTAwMiA3LjUwMDA0IDguOTUwMDJDNi42OTkyMyA4Ljk1MDAyIDYuMDUwMDQgOC4zMDA4MyA2LjA1MDA0IDcuNTAwMDJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxYcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy45NDk5MyAyLjk1MDAyTDMuOTQ5OTMgNC40OTk5OEMzLjk0OTkzIDQuNzQ4NTEgMy43NDg0NSA0Ljk0OTk4IDMuNDk5OTMgNC45NDk5OEMzLjI1MTQgNC45NDk5OCAzLjA0OTkzIDQuNzQ4NTEgMy4wNDk5MyA0LjQ5OTk4VjIuNTAwMDRDMy4wNDk5MyAyLjQ1MjQ2IDMuMDU3MzEgMi40MDY2MSAzLjA3MDk5IDIuMzYzNTdDMy4xMjg3OCAyLjE4MTc1IDMuMjk4OTcgMi4wNTAwMiAzLjQ5OTkzIDIuMDUwMDJIMTEuNDk5OUMxMS42NTUzIDIuMDUwMDIgMTEuNzkyMiAyLjEyODcyIDExLjg3MzEgMi4yNDg0MkMxMS45MjE2IDIuMzIwMjQgMTEuOTQ5OSAyLjQwNjgyIDExLjk0OTkgMi41MDAwMkwxMS45NDk5IDIuNTAwMDRWNC40OTk5OEMxMS45NDk5IDQuNzQ4NTEgMTEuNzQ4NSA0Ljk0OTk4IDExLjQ5OTkgNC45NDk5OEMxMS4yNTE0IDQuOTQ5OTggMTEuMDQ5OSA0Ljc0ODUxIDExLjA0OTkgNC40OTk5OFYyLjk1MDAySDguMDQ5OTNWMTIuMDVIOS4yNTQyOEM5LjUwMjgxIDEyLjA1IDkuNzA0MjggMTIuMjUxNSA5LjcwNDI4IDEyLjVDOS43MDQyOCAxMi43NDg2IDkuNTAyODEgMTIuOTUgOS4yNTQyOCAxMi45NUg1Ljc1NDI4QzUuNTA1NzUgMTIuOTUgNS4zMDQyOCAxMi43NDg2IDUuMzA0MjggMTIuNUM1LjMwNDI4IDEyLjI1MTUgNS41MDU3NSAxMi4wNSA1Ljc1NDI4IDEyLjA1SDYuOTQ5OTNWMi45NTAwMkgzLjk0OTkzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIgNC41QzIgNC4yMjM4NiAyLjIyMzg2IDQgMi41IDRIMTIuNUMxMi43NzYxIDQgMTMgNC4yMjM4NiAxMyA0LjVDMTMgNC43NzYxNCAxMi43NzYxIDUgMTIuNSA1SDIuNUMyLjIyMzg2IDUgMiA0Ljc3NjE0IDIgNC41Wk00IDcuNUM0IDcuMjIzODYgNC4yMjM4NiA3IDQuNSA3SDEwLjVDMTAuNzc2MSA3IDExIDcuMjIzODYgMTEgNy41QzExIDcuNzc2MTQgMTAuNzc2MSA4IDEwLjUgOEg0LjVDNC4yMjM4NiA4IDQgNy43NzYxNCA0IDcuNVpNMyAxMC41QzMgMTAuMjIzOSAzLjIyMzg2IDEwIDMuNSAxMEgxMS41QzExLjc3NjEgMTAgMTIgMTAuMjIzOSAxMiAxMC41QzEyIDEwLjc3NjEgMTEuNzc2MSAxMSAxMS41IDExSDMuNUMzLjIyMzg2IDExIDMgMTAuNzc2MSAzIDEwLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxlbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi41IDRDMi4yMjM4NiA0IDIgNC4yMjM4NiAyIDQuNUMyIDQuNzc2MTQgMi4yMjM4NiA1IDIuNSA1SDEyLjVDMTIuNzc2MSA1IDEzIDQuNzc2MTQgMTMgNC41QzEzIDQuMjIzODYgMTIuNzc2MSA0IDEyLjUgNEgyLjVaTTIgNy41QzIgNy4yMjM4NiAyLjIyMzg2IDcgMi41IDdIMTIuNUMxMi43NzYxIDcgMTMgNy4yMjM4NiAxMyA3LjVDMTMgNy43NzYxNCAxMi43NzYxIDggMTIuNSA4SDIuNUMyLjIyMzg2IDggMiA3Ljc3NjE0IDIgNy41Wk0yIDEwLjVDMiAxMC4yMjM5IDIuMjIzODYgMTAgMi41IDEwSDEyLjVDMTIuNzc2MSAxMCAxMyAxMC4yMjM5IDEzIDEwLjVDMTMgMTAuNzc2MSAxMi43NzYxIDExIDEyLjUgMTFIMi41QzIuMjIzODYgMTEgMiAxMC43NzYxIDIgMTAuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHRvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yIDQuNUMyIDQuMjIzODYgMi4yMjM4NiA0IDIuNSA0SDEyLjVDMTIuNzc2MSA0IDEzIDQuMjIzODYgMTMgNC41QzEzIDQuNzc2MTQgMTIuNzc2MSA1IDEyLjUgNUgyLjVDMi4yMjM4NiA1IDIgNC43NzYxNCAyIDQuNVpNMiA3LjVDMiA3LjIyMzg2IDIuMjIzODYgNyAyLjUgN0g3LjVDNy43NzYxNCA3IDggNy4yMjM4NiA4IDcuNUM4IDcuNzc2MTQgNy43NzYxNCA4IDcuNSA4SDIuNUMyLjIyMzg2IDggMiA3Ljc3NjE0IDIgNy41Wk0yIDEwLjVDMiAxMC4yMjM5IDIuMjIzODYgMTAgMi41IDEwSDEwLjVDMTAuNzc2MSAxMCAxMSAxMC4yMjM5IDExIDEwLjVDMTEgMTAuNzc2MSAxMC43NzYxIDExIDEwLjUgMTFIMi41QzIuMjIzODYgMTEgMiAxMC43NzYxIDIgMTAuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG5vPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yIDQuNUMyIDQuMjIzODYgMi4yMjM4NiA0IDIuNSA0SDEyLjVDMTIuNzc2MSA0IDEzIDQuMjIzODYgMTMgNC41QzEzIDQuNzc2MTQgMTIuNzc2MSA1IDEyLjUgNUgyLjVDMi4yMjM4NiA1IDIgNC43NzYxNCAyIDQuNVpNNyA3LjVDNyA3LjIyMzg2IDcuMjIzODYgNyA3LjUgN0gxMi41QzEyLjc3NjEgNyAxMyA3LjIyMzg2IDEzIDcuNUMxMyA3Ljc3NjE0IDEyLjc3NjEgOCAxMi41IDhINy41QzcuMjIzODYgOCA3IDcuNzc2MTQgNyA3LjVaTTQgMTAuNUM0IDEwLjIyMzkgNC4yMjM4NiAxMCA0LjUgMTBIMTIuNUMxMi43NzYxIDEwIDEzIDEwLjIyMzkgMTMgMTAuNUMxMyAxMC43NzYxIDEyLjc3NjEgMTEgMTIuNSAxMUg0LjVDNC4yMjM4NiAxMSA0IDEwLjc3NjEgNCAxMC41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scm89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEzLjM1MzYgMi4zNTM1NUMxMy41NDg4IDIuMTU4MjkgMTMuNTQ4OCAxLjg0MTcxIDEzLjM1MzYgMS42NDY0NUMxMy4xNTgzIDEuNDUxMTggMTIuODQxNyAxLjQ1MTE4IDEyLjY0NjQgMS42NDY0NUwxMS45MjkxIDIuMzYzODNDMTEuOTE1OSAyLjMyMjQ2IDExLjg5NyAyLjI4MzY4IDExLjg3MzIgMi4yNDg0NUMxMS43OTIzIDIuMTI4NzUgMTEuNjU1NCAyLjA1MDA1IDExLjUwMDEgMi4wNTAwNUgzLjUwMDA1QzMuMjk5MDkgMi4wNTAwNSAzLjEyODkgMi4xODE3OCAzLjA3MTExIDIuMzYzNkMzLjA1NzQzIDIuNDA2NjUgMy4wNTAwNSAyLjQ1MjQ5IDMuMDUwMDUgMi41MDAwN1Y0LjUwMDAxQzMuMDUwMDUgNC43NDg1NCAzLjI1MTUyIDQuOTUwMDEgMy41MDAwNSA0Ljk1MDAxQzMuNzQ4NTggNC45NTAwMSAzLjk1MDA1IDQuNzQ4NTQgMy45NTAwNSA0LjUwMDAxVjIuOTUwMDVINi45NTAwNlY3LjM0Mjg0TDEuNjQ2NDUgMTIuNjQ2NEMxLjQ1MTE4IDEyLjg0MTcgMS40NTExOCAxMy4xNTgzIDEuNjQ2NDUgMTMuMzUzNkMxLjg0MTcxIDEzLjU0ODggMi4xNTgyOSAxMy41NDg4IDIuMzUzNTUgMTMuMzUzNkw2Ljk1MDA2IDguNzU3MDVWMTIuMDUwMUg1Ljc1NDRDNS41MDU4NyAxMi4wNTAxIDUuMzA0NCAxMi4yNTE1IDUuMzA0NCAxMi41MDAxQzUuMzA0NCAxMi43NDg2IDUuNTA1ODcgMTIuOTUwMSA1Ljc1NDQgMTIuOTUwMUg5LjI1NDRDOS41MDI5MyAxMi45NTAxIDkuNzA0NCAxMi43NDg2IDkuNzA0NCAxMi41MDAxQzkuNzA0NCAxMi4yNTE1IDkuNTAyOTMgMTIuMDUwMSA5LjI1NDQgMTIuMDUwMUg4LjA1MDA2VjcuNjU3MDVMMTMuMzUzNiAyLjM1MzU1Wk04LjA1MDA2IDYuMjQyODRMMTEuMDUwMSAzLjI0MjgzVjIuOTUwMDVIOC4wNTAwNlY2LjI0Mjg0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sb289ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUgMy41QzUgMy4yMjM4NiA1LjIyMzg2IDMgNS41IDNIOS41QzkuNzc2MTQgMyAxMCAzLjIyMzg2IDEwIDMuNVY2SDEyLjVDMTIuNjg3MyA2IDEyLjg1ODkgNi4xMDQ2NyAxMi45NDQ2IDYuMjcxMjFDMTMuMDMwMyA2LjQzNzc0IDEzLjAxNTcgNi42MzgyMSAxMi45MDY5IDYuNzkwNjJMNy45MDY4NyAxMy43OTA2QzcuODEzMDEgMTMuOTIyIDcuNjYxNDggMTQgNy41IDE0QzcuMzM4NTMgMTQgNy4xODY5OSAxMy45MjIgNy4wOTMxNCAxMy43OTA2TDIuMDkzMTQgNi43OTA2MkMxLjk4NDI3IDYuNjM4MjEgMS45Njk3MiA2LjQzNzc0IDIuMDU1NDIgNi4yNzEyMUMyLjE0MTEyIDYuMTA0NjcgMi4zMTI3MSA2IDIuNSA2SDVWMy41Wk02IDRWNi41QzYgNi43NzYxNCA1Ljc3NjE0IDcgNS41IDdIMy40NzE2TDcuNSAxMi42Mzk4TDExLjUyODQgN0g5LjVDOS4yMjM4NiA3IDkgNi43NzYxNCA5IDYuNVY0SDZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxhbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMSA3LjVDMSA3LjY2MTQ4IDEuMDc3OTggNy44MTMwMSAxLjIwOTM4IDcuOTA2ODdMOC4yMDkzOCAxMi45MDY5QzguMzYxNzkgMTMuMDE1NyA4LjU2MjI2IDEzLjAzMDMgOC43Mjg3OSAxMi45NDQ2QzguODk1MzMgMTIuODU4OSA5IDEyLjY4NzMgOSAxMi41TDkgMTBMMTEuNSAxMEMxMS43NzYxIDEwIDEyIDkuNzc2MTQgMTIgOS41TDEyIDUuNUMxMiA1LjIyMzg2IDExLjc3NjEgNSAxMS41IDVMOSA1TDkgMi41QzkgMi4zMTI3MSA4Ljg5NTMzIDIuMTQxMTIgOC43Mjg3OSAyLjA1NTQyQzguNTYyMjYgMS45Njk3MiA4LjM2MTc5IDEuOTg0MjcgOC4yMDkzOCAyLjA5MzEzTDEuMjA5MzggNy4wOTMxNEMxLjA3Nzk4IDcuMTg2OTkgMSA3LjMzODUzIDEgNy41Wk04IDMuNDcxNkw4IDUuNUM4IDUuNzc2MTQgOC4yMjM4NiA2IDguNSA2TDExIDZMMTEgOUw4LjUgOUM4LjIyMzg2IDkgOCA5LjIyMzg2IDggOS41TDggMTEuNTI4NEwyLjM2MDIzIDcuNUw4IDMuNDcxNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGlvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xNCA3LjVDMTQgNy42NjE0OCAxMy45MjIgNy44MTMwMSAxMy43OTA2IDcuOTA2ODdMNi43OTA2MiAxMi45MDY5QzYuNjM4MjEgMTMuMDE1NyA2LjQzNzc0IDEzLjAzMDMgNi4yNzEyMSAxMi45NDQ2QzYuMTA0NjcgMTIuODU4OSA2IDEyLjY4NzMgNiAxMi41TDYgMTBMMy41IDEwQzMuMjIzODYgMTAgMyA5Ljc3NjE0IDMgOS41TDMgNS41QzMgNS4yMjM4NiAzLjIyMzg2IDUgMy41IDVMNiA1TDYgMi41QzYgMi4zMTI3MSA2LjEwNDY3IDIuMTQxMTIgNi4yNzEyMSAyLjA1NTQyQzYuNDM3NzQgMS45Njk3MiA2LjYzODIxIDEuOTg0MjcgNi43OTA2MiAyLjA5MzEzTDEzLjc5MDYgNy4wOTMxNEMxMy45MjIgNy4xODY5OSAxNCA3LjMzODUzIDE0IDcuNVpNNyAzLjQ3MTZMNyA1LjVDNyA1Ljc3NjE0IDYuNzc2MTQgNiA2LjUgNkw0IDZMNCA5TDYuNSA5QzYuNzc2MTQgOSA3IDkuMjIzODYgNyA5LjVMNyAxMS41Mjg0TDEyLjYzOTggNy41TDcgMy40NzE2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbG89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNSAxQzcuNjYxNDggMSA3LjgxMzAxIDEuMDc3OTggNy45MDY4NyAxLjIwOTM4TDEyLjkwNjkgOC4yMDkzOEMxMy4wMTU3IDguMzYxNzkgMTMuMDMwMyA4LjU2MjI2IDEyLjk0NDYgOC43Mjg3OUMxMi44NTg5IDguODk1MzMgMTIuNjg3MyA5IDEyLjUgOUgxMFYxMS41QzEwIDExLjc3NjEgOS43NzYxNCAxMiA5LjUgMTJINS41QzUuMjIzODYgMTIgNSAxMS43NzYxIDUgMTEuNVY5SDIuNUMyLjMxMjcxIDkgMi4xNDExMiA4Ljg5NTMzIDIuMDU1NDIgOC43Mjg3OUMxLjk2OTcyIDguNTYyMjYgMS45ODQyNyA4LjM2MTc5IDIuMDkzMTQgOC4yMDkzOEw3LjA5MzE0IDEuMjA5MzhDNy4xODY5OSAxLjA3Nzk4IDcuMzM4NTMgMSA3LjUgMVpNMy40NzE2IDhINS41QzUuNzc2MTQgOCA2IDguMjIzODYgNiA4LjVWMTFIOVY4LjVDOSA4LjIyMzg2IDkuMjIzODYgOCA5LjUgOEgxMS41Mjg0TDcuNSAyLjM2MDIzTDMuNDcxNiA4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sc289ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5OTggMC44NDk5NzZDNy4yMjM4MyAwLjg0OTk3NiA2Ljk5OTk4IDEuMDczODMgNi45OTk5OCAxLjM0OTk4VjMuNTIyMzRDNi45OTk5OCAzLjc5ODQ4IDcuMjIzODMgNC4wMjIzNCA3LjQ5OTk4IDQuMDIyMzRDNy43NzYxMiA0LjAyMjM0IDcuOTk5OTggMy43OTg0OCA3Ljk5OTk4IDMuNTIyMzRWMS44NzE4QzEwLjg4NjIgMi4xMjQ4OCAxMy4xNSA0LjU0ODA2IDEzLjE1IDcuNDk5OThDMTMuMTUgMTAuNjIwNCAxMC42MjA0IDEzLjE1IDcuNDk5OTggMTMuMTVDNC4zNzk1NyAxMy4xNSAxLjg0OTk4IDEwLjYyMDQgMS44NDk5OCA3LjQ5OTk4QzEuODQ5OTggNi4xMDYxMiAyLjM1NDA3IDQuODMxMjggMy4xOTA0OSAzLjg0NTlDMy4zNjkxOSAzLjYzNTM4IDMuMzQzMzkgMy4zMTk4NSAzLjEzMjg2IDMuMTQxMTVDMi45MjIzNCAyLjk2MjQ1IDIuNjA2ODEgMi45ODgyNSAyLjQyODExIDMuMTk4NzdDMS40NDQwNSA0LjM1ODA4IDAuODQ5OTc2IDUuODYwMjkgMC44NDk5NzYgNy40OTk5OEMwLjg0OTk3NiAxMS4xNzI3IDMuODI3MjggMTQuMTUgNy40OTk5OCAxNC4xNUMxMS4xNzI3IDE0LjE1IDE0LjE1IDExLjE3MjcgMTQuMTUgNy40OTk5OEMxNC4xNSAzLjgyNzI4IDExLjE3MjcgMC44NDk5NzYgNy40OTk5OCAwLjg0OTk3NlpNNi43NDA0OSA4LjA4MDcyTDQuMjIzNjMgNC41NzIzN0M0LjE1MjMxIDQuNDcyOTUgNC4xNjM0NiA0LjMzNjUyIDQuMjQ5OTggNC4yNUM0LjMzNjQ5IDQuMTYzNDggNC40NzI5MyA0LjE1MjMzIDQuNTcyMzQgNC4yMjM2NUw4LjA4MDY5IDYuNzQwNTFDOC41NjIyNyA3LjA4NTk5IDguNjE5MDYgNy43ODA5MSA4LjE5OTk4IDguMkM3Ljc4MDg5IDguNjE5MDkgNy4wODU5NyA4LjU2MjI5IDYuNzQwNDkgOC4wODA3MlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGNvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjUgMkMzLjExOTI5IDIgMiAzLjExOTI5IDIgNC41QzIgNS44ODA3MiAzLjExOTI5IDcgNC41IDdDNS44ODA3MiA3IDcgNS44ODA3MiA3IDQuNUM3IDMuMTE5MjkgNS44ODA3MiAyIDQuNSAyWk0zIDQuNUMzIDMuNjcxNTcgMy42NzE1NyAzIDQuNSAzQzUuMzI4NDMgMyA2IDMuNjcxNTcgNiA0LjVDNiA1LjMyODQzIDUuMzI4NDMgNiA0LjUgNkMzLjY3MTU3IDYgMyA1LjMyODQzIDMgNC41Wk0xMC41IDJDOS4xMTkyOSAyIDggMy4xMTkyOSA4IDQuNUM4IDUuODgwNzIgOS4xMTkyOSA3IDEwLjUgN0MxMS44ODA3IDcgMTMgNS44ODA3MiAxMyA0LjVDMTMgMy4xMTkyOSAxMS44ODA3IDIgMTAuNSAyWk05IDQuNUM5IDMuNjcxNTcgOS42NzE1NyAzIDEwLjUgM0MxMS4zMjg0IDMgMTIgMy42NzE1NyAxMiA0LjVDMTIgNS4zMjg0MyAxMS4zMjg0IDYgMTAuNSA2QzkuNjcxNTcgNiA5IDUuMzI4NDMgOSA0LjVaTTIgMTAuNUMyIDkuMTE5MjkgMy4xMTkyOSA4IDQuNSA4QzUuODgwNzIgOCA3IDkuMTE5MjkgNyAxMC41QzcgMTEuODgwNyA1Ljg4MDcyIDEzIDQuNSAxM0MzLjExOTI5IDEzIDIgMTEuODgwNyAyIDEwLjVaTTQuNSA5QzMuNjcxNTcgOSAzIDkuNjcxNTcgMyAxMC41QzMgMTEuMzI4NCAzLjY3MTU3IDEyIDQuNSAxMkM1LjMyODQzIDEyIDYgMTEuMzI4NCA2IDEwLjVDNiA5LjY3MTU3IDUuMzI4NDMgOSA0LjUgOVpNMTAuNSA4QzkuMTE5MjkgOCA4IDkuMTE5MjkgOCAxMC41QzggMTEuODgwNyA5LjExOTI5IDEzIDEwLjUgMTNDMTEuODgwNyAxMyAxMyAxMS44ODA3IDEzIDEwLjVDMTMgOS4xMTkyOSAxMS44ODA3IDggMTAuNSA4Wk05IDEwLjVDOSA5LjY3MTU3IDkuNjcxNTcgOSAxMC41IDlDMTEuMzI4NCA5IDEyIDkuNjcxNTcgMTIgMTAuNUMxMiAxMS4zMjg0IDExLjMyODQgMTIgMTAuNSAxMkM5LjY3MTU3IDEyIDkgMTEuMzI4NCA5IDEwLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx1bz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTMuMDUwMiAyLjc0OTg5QzEzLjA1MDIgMi40NDYxMyAxMi44MDQgMi4xOTk4OSAxMi41MDAyIDIuMTk5ODlDMTIuMTk2NSAyLjE5OTg5IDExLjk1MDIgMi40NDYxMyAxMS45NTAyIDIuNzQ5ODlWNy4yODI1QzExLjkwNDYgNy4xODgwMiAxMS44Mjk1IDcuMTA4NTEgMTEuNzMzNCA3LjA1Nzc2TDIuNzMzMzggMi4zMDc3NkMyLjU3ODQgMi4yMjU5NiAyLjM5MTkgMi4yMzEyNyAyLjI0MTgyIDIuMzIxNzZDMi4wOTE3NSAyLjQxMjI1IDIgMi41NzQ3MSAyIDIuNzQ5OTVWMTIuMjVDMiAxMi40MjUyIDIuMDkxNzUgMTIuNTg3NyAyLjI0MTgyIDEyLjY3ODFDMi4zOTE5IDEyLjc2ODYgMi41Nzg0IDEyLjc3MzkgMi43MzMzOCAxMi42OTIxTDExLjczMzQgNy45NDIxNEMxMS44Mjk1IDcuODkxMzkgMTEuOTA0NiA3LjgxMTg4IDExLjk1MDIgNy43MTc0VjEyLjI0OTlDMTEuOTUwMiAxMi41NTM2IDEyLjE5NjUgMTIuNzk5OSAxMi41MDAyIDEyLjc5OTlDMTIuODA0IDEyLjc5OTkgMTMuMDUwMiAxMi41NTM2IDEzLjA1MDIgMTIuMjQ5OVYyLjc0OTg5Wk0zIDExLjQyMDdWMy41NzkyTDEwLjQyODggNy40OTk5NUwzIDExLjQyMDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxwbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS45NDk3NiAyLjc0OTg5QzEuOTQ5NzYgMi40NDYxMyAyLjE5NiAyLjE5OTg5IDIuNDk5NzYgMi4xOTk4OUMyLjgwMzUxIDIuMTk5ODkgMy4wNDk3NiAyLjQ0NjEzIDMuMDQ5NzYgMi43NDk4OVY3LjI4MjVDMy4wOTU0IDcuMTg4MDIgMy4xNzA0NiA3LjEwODUxIDMuMjY2NjIgNy4wNTc3NkwxMi4yNjY2IDIuMzA3NzZDMTIuNDIxNiAyLjIyNTk2IDEyLjYwODEgMi4yMzEyNyAxMi43NTgyIDIuMzIxNzZDMTIuOTA4MyAyLjQxMjI1IDEzIDIuNTc0NzEgMTMgMi43NDk5NVYxMi4yNUMxMyAxMi40MjUyIDEyLjkwODMgMTIuNTg3NyAxMi43NTgyIDEyLjY3ODFDMTIuNjA4MSAxMi43Njg2IDEyLjQyMTYgMTIuNzczOSAxMi4yNjY2IDEyLjY5MjFMMy4yNjY2MiA3Ljk0MjE0QzMuMTcwNDYgNy44OTEzOSAzLjA5NTQgNy44MTE4OCAzLjA0OTc2IDcuNzE3NFYxMi4yNDk5QzMuMDQ5NzYgMTIuNTUzNiAyLjgwMzUxIDEyLjc5OTkgMi40OTk3NiAxMi43OTk5QzIuMTk2IDEyLjc5OTkgMS45NDk3NiAxMi41NTM2IDEuOTQ5NzYgMTIuMjQ5OVYyLjc0OTg5Wk00LjU3MTIyIDcuNDk5OTVMMTIgMTEuNDIwN1YzLjU3OTJMNC41NzEyMiA3LjQ5OTk1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZm89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjI1XCIsZDpcIk0wIDBIM1YzSDBWMFpNNiAzSDNWNkgwVjlIM1YxMkgwVjE1SDNWMTJINlYxNUg5VjEySDEyVjE1SDE1VjEySDEyVjlIMTVWNkgxMlYzSDE1VjBIMTJWM0g5VjBINlYzWk02IDZWM0g5VjZINlpNNiA5SDNWNkg2VjlaTTkgOVY2SDEyVjlIOVpNOSA5SDZWMTJIOVY5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0saG89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUuNSAxQzUuMjIzODYgMSA1IDEuMjIzODYgNSAxLjVDNSAxLjc3NjE0IDUuMjIzODYgMiA1LjUgMkg5LjVDOS43NzYxNCAyIDEwIDEuNzc2MTQgMTAgMS41QzEwIDEuMjIzODYgOS43NzYxNCAxIDkuNSAxSDUuNVpNMyAzLjVDMyAzLjIyMzg2IDMuMjIzODYgMyAzLjUgM0g1SDEwSDExLjVDMTEuNzc2MSAzIDEyIDMuMjIzODYgMTIgMy41QzEyIDMuNzc2MTQgMTEuNzc2MSA0IDExLjUgNEgxMVYxMkMxMSAxMi41NTIzIDEwLjU1MjMgMTMgMTAgMTNINUM0LjQ0NzcyIDEzIDQgMTIuNTUyMyA0IDEyVjRMMy41IDRDMy4yMjM4NiA0IDMgMy43NzYxNCAzIDMuNVpNNSA0SDEwVjEySDVWNFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGdvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00IDZIMTFMNy41IDEwLjVMNCA2WlwiLGZpbGw6bn0pKX0sdm89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTkgNEw5IDExTDQuNSA3LjVMOSA0WlwiLGZpbGw6bn0pKX0sQ289ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTYgMTFMNiA0TDEwLjUgNy41TDYgMTFaXCIsZmlsbDpufSkpfSxtbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNCA5SDExTDcuNSA0LjVMNCA5WlwiLGZpbGw6bn0pKX0sd289ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuMjMzMzYgNC42OTYyOUM3LjIzMzM2IDIuOTY4ODQgOC42MzMzNSAxLjU2ODU3IDEwLjM2IDEuNTY4NTdDMTEuMzczNiAxLjU2ODU3IDEyLjE4MyAyLjA0ODA0IDEyLjcyNTQgMi43NDM4NUMxMy4zMDc5IDIuNjI0NjcgMTMuODU1NyAyLjQwOTEzIDE0LjM1MTMgMi4xMTUwOEMxNC4xNTU5IDIuNzI1OTggMTMuNzQyNCAzLjIzOTYgMTMuMjAzMyAzLjU2NDYzQzEzLjIwMzggMy41NjU2OCAxMy4yMDQyIDMuNTY2NzQgMTMuMjA0NyAzLjU2Nzc5QzEzLjczMzQgMy41MDM2MSAxNC4yMzY0IDMuMzYzMDIgMTQuNzA0OCAzLjE1NTQ2TDE0LjcwMzcgMy4xNTcxNUMxNC4zNjY3IDMuNjYxODMgMTMuOTQzMSA0LjEwNzM2IDEzLjQ1NjEgNC40NzAzNEMxMy40ODIzIDQuNjQ2NzIgMTMuNDk1NiA0LjgyNDI3IDEzLjQ5NTYgNS4wMDA3OUMxMy40OTU2IDguNjg3MSAxMC42ODczIDEyLjk3NDYgNS41MjEyMiAxMi45NzQ2QzMuOTM5MDYgMTIuOTc0NiAyLjQ2NTQ0IDEyLjUxMSAxLjIyNTA1IDExLjcxNTJDMC45OTI2MzIgMTEuNTY2MSAwLjkyNTEwOCAxMS4yNTY4IDEuMDc0MjMgMTEuMDI0NEMxLjA4NzQgMTEuMDAzOCAxLjEwMTgzIDEwLjk4NDYgMS4xMTczNCAxMC45NjY2QzEuMjA1ODIgMTAuODIwMiAxLjM3NDM4IDEwLjczMDkgMS41NTU0IDEwLjc1MjJDMi40NzA2NiAxMC44NjAxIDMuMzg1NjggMTAuNzQ4NSA0LjE5MjE5IDEwLjM5NjJDMy4zOTIyNiAxMC4wNDM0IDIuNzcxMjkgOS4zNTk3NSAyLjUwMjA0IDguNTE5NzRDMi40NTM1OSA4LjM2ODYgMi40ODgzNSA4LjIwMzExIDIuNTkzNTEgOC4wODQyMkMyLjU5NzE2IDguMDgwMSAyLjYwMDg3IDguMDc2MDYgMi42MDQ2NCA4LjA3MjFDMS45NjM5MSA3LjUwODE5IDEuNTU5NzMgNi42ODIwOCAxLjU1OTczIDUuNzYxNDNWNS43Mjc1OUMxLjU1OTczIDUuNTY4MTQgMS42NDQxMSA1LjQyMDU5IDEuNzgxNTUgNS4zMzk3NEMxLjgyNjcxIDUuMzEzMTcgMS44NzUzNyA1LjI5NTExIDEuOTI1MzIgNS4yODU1OEMxLjcwNTQ5IDQuODYxNTQgMS41ODExNiA0LjM3OTg0IDEuNTgxMTYgMy44Njk1OEMxLjU4MTE2IDMuNDAxNjUgMS41ODM4NCAyLjgxMTkyIDEuOTEzMzIgMi4yODA4MUMxLjk4NzE4IDIuMTYxNzUgMi4xMDc1OCAyLjA4OTE1IDIuMjM2NCAyLjA3MTk1QzIuNDI1ODggMi4wMTIzNyAyLjY0MDg3IDIuMDY5NjkgMi43NzQwNiAyLjIzMzAyQzMuODY1MzYgMy41NzEyNiA1LjQ0MDY2IDQuNDk1ODMgNy4yMzM2NiA0LjczOTYxTDcuMjMzMzYgNC42OTYyOVpNNS41MjEyMiAxMS45NzQ2QzQuNzMzODcgMTEuOTc0NiAzLjk3NzgxIDExLjg0MzUgMy4yNzI0OCAxMS42MDIzQzQuMTMwMTIgMTEuNDUzOCA0Ljk1MzA3IDExLjExNTkgNS42NjIxOCAxMC41NjAyQzUuODEyMTEgMTAuNDQyNyA1Ljg3MTgyIDEwLjI0MzUgNS44MTEyNiAxMC4wNjI5QzUuNzUwNyA5Ljg4MjM0IDUuNTgzIDkuNzU5NDMgNS4zOTI1NSA5Ljc1NjA3QzQuNjg5NjggOS43NDM2NiA0LjA2NzEyIDkuMzk3MTYgMy42Nzc5MyA4Ljg2ODQ1QzMuODY4MjggOC44NTMwNiA0LjA1NDI4IDguODIwMzkgNC4yMzQ0NSA4Ljc3MTY3QzQuNDM2MDMgOC43MTcxNiA0LjU3MzYzIDguNTMxMTQgNC41NjY3NCA4LjMyMjQzQzQuNTU5ODUgOC4xMTM3MiA0LjQxMDI5IDcuOTM3MTggNC4yMDU1NSA3Ljg5NjA3QzMuNDI2OTQgNy43Mzk3NyAyLjc5ODgzIDcuMTY3NjQgMi41NjE2OSA2LjQyMTc0QzIuNzYyNTUgNi40NzAyNSAyLjk3MTAyIDYuNDk5MSAzLjE4NDgyIDYuNTA2MUMzLjM4NTYzIDYuNTEyNjcgMy41NjY0NiA2LjM4NTMzIDMuNjI3OTUgNi4xOTQwNUMzLjY4OTQzIDYuMDAyNzcgMy42MTY2NiA1Ljc5MzkxIDMuNDQ5NjMgNS42ODIyNEMyLjg2NTIzIDUuMjkxNTUgMi40ODExNiA0LjYyNDY0IDIuNDgxMTYgMy44Njk1OEMyLjQ4MTE2IDMuNzAyMTMgMi40ODM1MiAzLjU1MjY4IDIuNDkzNTUgMy40MTcxOUMzLjg1MTE1IDQuNzk5MTMgNS43MDg3MyA1LjY4OTMxIDcuNzc1ODggNS43OTMzOEM3LjkzMjI1IDUuODAxMjYgOC4wODMyOCA1LjczNTQzIDguMTgzOTUgNS42MTU1M0M4LjI4NDYzIDUuNDk1NjIgOC4zMjMzMiA1LjMzNTQ4IDguMjg4NTEgNS4xODI4NEM4LjI1MjU1IDUuMDI1MTcgOC4yMzMzNiA0Ljg2Mjg0IDguMjMzMzYgNC42OTYyOUM4LjIzMzM2IDMuNTIwODUgOS4xODU5MSAyLjU2ODU3IDEwLjM2IDIuNTY4NTdDMTEuNTk0MyAyLjU2ODU3IDEyLjQ5NTYgMy43MTIwOCAxMi40OTU2IDUuMDAwNzlDMTIuNDk1NiA4LjI1NzA5IDEwLjAyMDIgMTEuOTc0NiA1LjUyMTIyIDExLjk3NDZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxibz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNS4wMDAwMSAyLjc1QzUuMDAwMDEgMi40NzM4NiA0Ljc3NjE1IDIuMjUgNC41MDAwMSAyLjI1QzQuMjIzODcgMi4yNSA0LjAwMDAxIDIuNDczODYgNC4wMDAwMSAyLjc1VjguMDVDNC4wMDAwMSA5Ljk4MyA1LjU2NzAyIDExLjU1IDcuNTAwMDEgMTEuNTVDOS40MzMwMSAxMS41NSAxMSA5Ljk4MyAxMSA4LjA1VjIuNzVDMTEgMi40NzM4NiAxMC43NzYyIDIuMjUgMTAuNSAyLjI1QzEwLjIyMzkgMi4yNSAxMCAyLjQ3Mzg2IDEwIDIuNzVWOC4wNUMxMCA5LjQzMDcxIDguODgwNzIgMTAuNTUgNy41MDAwMSAxMC41NUM2LjExOTMgMTAuNTUgNS4wMDAwMSA5LjQzMDcxIDUuMDAwMDEgOC4wNVYyLjc1Wk0zLjQ5OTk4IDEzLjEwMDFDMy4yNzkwNiAxMy4xMDAxIDMuMDk5OTggMTMuMjc5MSAzLjA5OTk4IDEzLjUwMDFDMy4wOTk5OCAxMy43MjEgMy4yNzkwNiAxMy45MDAxIDMuNDk5OTggMTMuOTAwMUgxMS41QzExLjcyMDkgMTMuOTAwMSAxMS45IDEzLjcyMSAxMS45IDEzLjUwMDFDMTEuOSAxMy4yNzkxIDExLjcyMDkgMTMuMTAwMSAxMS41IDEzLjEwMDFIMy40OTk5OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHlvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjkwMzIxIDcuMjk2NzdDMS45MDMyMSAxMC4zNDEgNC4xMTA0MSAxMi40MTQ3IDYuNTg4OTMgMTIuODQzOUM2Ljg3MjU1IDEyLjg5MyA3LjA2MjY2IDEzLjE2MjcgNy4wMTM1NSAxMy40NDY0QzYuOTY0NDQgMTMuNzMgNi42OTQ3MSAxMy45MjAxIDYuNDExMDkgMTMuODcxQzMuNDk5NDIgMTMuMzY2OCAwLjg2MDg0IDEwLjkxMjcgMC44NjA4NCA3LjI5Njc3QzAuODYwODM5IDUuNzYwMDkgMS41NTk5NiA0LjU1MjQ1IDIuMzc2MzkgMy42MzM3N0MyLjk2MTI0IDIuOTc1NjggMy42MzAzNCAyLjQ0MTM1IDQuMTY4NDYgMi4wMzIwMkwyLjUzMjA1IDIuMDMyMDJDMi4yNTU5MSAyLjAzMjAyIDIuMDMyMDUgMS44MDgxNiAyLjAzMjA1IDEuNTMyMDJDMi4wMzIwNSAxLjI1NTg4IDIuMjU1OTEgMS4wMzIwMiAyLjUzMjA1IDEuMDMyMDJMNS41MzIwNSAxLjAzMjAyQzUuODA4MTkgMS4wMzIwMiA2LjAzMjA1IDEuMjU1ODggNi4wMzIwNSAxLjUzMjAyTDYuMDMyMDUgNC41MzIwMkM2LjAzMjA1IDQuODA4MTYgNS44MDgxOSA1LjAzMjAyIDUuNTMyMDUgNS4wMzIwMkM1LjI1NTkxIDUuMDMyMDIgNS4wMzIwNSA0LjgwODE2IDUuMDMyMDUgNC41MzIwMkw1LjAzMjA1IDIuNjg2NDVMNS4wMzA1NCAyLjY4NzU5TDUuMDMwNDUgMi42ODc2Nkw1LjAzMDQ0IDIuNjg3NjdMNS4wMzA0MyAyLjY4NzY3QzQuNDU4OTYgMy4xMTg2OCAzLjc2MDU5IDMuNjQ1MzggMy4xNTU1NCA0LjMyNjJDMi40NDEwMiA1LjEzMDIxIDEuOTAzMjEgNi4xMDE1NCAxLjkwMzIxIDcuMjk2NzdaTTEzLjAxMDkgNy43MDMyMUMxMy4wMTA5IDQuNjkxMTUgMTAuODUwNSAyLjYyOTYgOC40MDM4NCAyLjE3MDI5QzguMTIwOTMgMi4xMTcxOCA3LjkzNDY1IDEuODQ0NzkgNy45ODc3NiAxLjU2MTg4QzguMDQwODcgMS4yNzg5OCA4LjMxMzI2IDEuMDkyNyA4LjU5NjE2IDEuMTQ1ODFDMTEuNDcwNCAxLjY4NTQxIDE0LjA1MzIgNC4xMjYwNSAxNC4wNTMyIDcuNzAzMjFDMTQuMDUzMiA5LjIzOTg4IDEzLjM1NDEgMTAuNDQ3NSAxMi41Mzc3IDExLjM2NjJDMTEuOTUyOCAxMi4wMjQzIDExLjI4MzcgMTIuNTU4NiAxMC43NDU2IDEyLjk2OEwxMi4zODIxIDEyLjk2OEMxMi42NTgyIDEyLjk2OCAxMi44ODIxIDEzLjE5MTggMTIuODgyMSAxMy40NjhDMTIuODgyMSAxMy43NDQxIDEyLjY1ODIgMTMuOTY4IDEyLjM4MjEgMTMuOTY4TDkuMzgyMDUgMTMuOTY4QzkuMTA1OTEgMTMuOTY4IDguODgyMDUgMTMuNzQ0MSA4Ljg4MjA1IDEzLjQ2OEw4Ljg4MjA1IDEwLjQ2OEM4Ljg4MjA1IDEwLjE5MTggOS4xMDU5MSA5Ljk2Nzk2IDkuMzgyMDUgOS45Njc5NkM5LjY1ODE5IDkuOTY3OTYgOS44ODIwNSAxMC4xOTE4IDkuODgyMDUgMTAuNDY4TDkuODgyMDUgMTIuMzEzNUw5Ljg4MzYyIDEyLjMxMjNDMTAuNDU1MSAxMS44ODEzIDExLjE1MzUgMTEuMzU0NiAxMS43NTg1IDEwLjY3MzhDMTIuNDczMSA5Ljg2OTc2IDEzLjAxMDkgOC44OTg0NCAxMy4wMTA5IDcuNzAzMjFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx4bz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy44MTgyNSAxLjE4MTg4QzcuNjQyNTEgMS4wMDYxNSA3LjM1NzU5IDEuMDA2MTUgNy4xODE4NSAxLjE4MTg4TDQuMTgxODUgNC4xODE4OEM0LjAwNjExIDQuMzU3NjIgNC4wMDYxMSA0LjY0MjU0IDQuMTgxODUgNC44MTgyOEM0LjM1NzU5IDQuOTk0MDEgNC42NDI1MSA0Ljk5NDAxIDQuODE4MjUgNC44MTgyOEw3LjA1MDA1IDIuNTg2NDhWOS40OTk5NkM3LjA1MDA1IDkuNzQ4NDkgNy4yNTE1MiA5Ljk0OTk2IDcuNTAwMDUgOS45NDk5NkM3Ljc0ODU4IDkuOTQ5OTYgNy45NTAwNSA5Ljc0ODQ5IDcuOTUwMDUgOS40OTk5NlYyLjU4NjQ4TDEwLjE4MTkgNC44MTgyOEMxMC4zNTc2IDQuOTk0MDEgMTAuNjQyNSA0Ljk5NDAxIDEwLjgxODIgNC44MTgyOEMxMC45OTQgNC42NDI1NCAxMC45OTQgNC4zNTc2MiAxMC44MTgyIDQuMTgxODhMNy44MTgyNSAxLjE4MTg4Wk0yLjUgOS45OTk5N0MyLjc3NjE0IDkuOTk5OTcgMyAxMC4yMjM4IDMgMTAuNVYxMkMzIDEyLjU1MzggMy40NDU2NSAxMyAzLjk5NjM1IDEzSDExLjAwMTJDMTEuNTUyOSAxMyAxMiAxMi41NTI4IDEyIDEyVjEwLjVDMTIgMTAuMjIzOCAxMi4yMjM5IDkuOTk5OTcgMTIuNSA5Ljk5OTk3QzEyLjc3NjEgOS45OTk5NyAxMyAxMC4yMjM4IDEzIDEwLjVWMTJDMTMgMTMuMTA0IDEyLjEwNjIgMTQgMTEuMDAxMiAxNEgzLjk5NjM1QzIuODkwMTkgMTQgMiAxMy4xMDMgMiAxMlYxMC41QzIgMTAuMjIzOCAyLjIyMzg2IDkuOTk5OTcgMi41IDkuOTk5OTdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxrbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC44NzcwNzUgNy40OTk4OEMwLjg3NzA3NSAzLjg0MjE5IDMuODQyMjIgMC44NzcwNDUgNy40OTk5MSAwLjg3NzA0NUMxMS4xNTc2IDAuODc3MDQ1IDE0LjEyMjcgMy44NDIxOSAxNC4xMjI3IDcuNDk5ODhDMTQuMTIyNyAxMS4xNTc1IDExLjE1NzYgMTQuMTIyNyA3LjQ5OTkxIDE0LjEyMjdDMy44NDIyMiAxNC4xMjI3IDAuODc3MDc1IDExLjE1NzUgMC44NzcwNzUgNy40OTk4OFpNNy40OTk5MSAxLjgyNzA0QzQuMzY2ODkgMS44MjcwNCAxLjgyNzA4IDQuMzY2ODYgMS44MjcwOCA3LjQ5OTg4QzEuODI3MDggMTAuNjMyOSA0LjM2Njg5IDEzLjE3MjcgNy40OTk5MSAxMy4xNzI3QzEwLjYzMjkgMTMuMTcyNyAxMy4xNzI3IDEwLjYzMjkgMTMuMTcyNyA3LjQ5OTg4QzEzLjE3MjcgNC4zNjY4NiAxMC42MzI5IDEuODI3MDQgNy40OTk5MSAxLjgyNzA0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sU289ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5ODUgMC44NzcwNDVDMy44NDIxNiAwLjg3NzA0NSAwLjg3NzAxNCAzLjg0MjE5IDAuODc3MDE0IDcuNDk5ODhDMC44NzcwMTQgOS4xNDg4IDEuNDc5NjMgMTAuNjU3IDIuNDc2NjUgMTEuODE2MkwxLjY0NjQzIDEyLjY0NjRDMS40NTExNyAxMi44NDE3IDEuNDUxMTcgMTMuMTU4MyAxLjY0NjQzIDEzLjM1MzVDMS44NDE3IDEzLjU0ODggMi4xNTgyOCAxMy41NDg4IDIuMzUzNTQgMTMuMzUzNUwzLjE4Mzc3IDEyLjUyMzNDNC4zNDI5NiAxMy41MjAyIDUuODUxMDQgMTQuMTIyNyA3LjQ5OTg1IDE0LjEyMjdDMTEuMTU3NSAxNC4xMjI3IDE0LjEyMjcgMTEuMTU3NSAxNC4xMjI3IDcuNDk5ODhDMTQuMTIyNyA1Ljg1MTA3IDEzLjUyMDIgNC4zNDI5OSAxMi41MjMzIDMuMTgzOEwxMy4zNTM1IDIuMzUzNTRDMTMuNTQ4OCAyLjE1ODI3IDEzLjU0ODggMS44NDE2OSAxMy4zNTM1IDEuNjQ2NDNDMTMuMTU4MyAxLjQ1MTE3IDEyLjg0MTcgMS40NTExNyAxMi42NDY0IDEuNjQ2NDNMMTEuODE2MiAyLjQ3NjY4QzEwLjY1NyAxLjQ3OTY2IDkuMTQ4NzcgMC44NzcwNDUgNy40OTk4NSAwLjg3NzA0NVpNMTEuMTQyMiAzLjE1MDY2QzEwLjE1NjcgMi4zMjQ0OSA4Ljg4NjM5IDEuODI3MDQgNy40OTk4NSAxLjgyNzA0QzQuMzY2ODMgMS44MjcwNCAxLjgyNzAxIDQuMzY2ODYgMS44MjcwMSA3LjQ5OTg4QzEuODI3MDEgOC44ODY0MiAyLjMyNDQ2IDEwLjE1NjggMy4xNTA2MyAxMS4xNDIyTDExLjE0MjIgMy4xNTA2NlpNMy44NTc3NiAxMS44NDkzQzQuODQzMTcgMTIuNjc1MyA2LjExMzQzIDEzLjE3MjcgNy40OTk4NSAxMy4xNzI3QzEwLjYzMjggMTMuMTcyNyAxMy4xNzI3IDEwLjYzMjkgMTMuMTcyNyA3LjQ5OTg4QzEzLjE3MjcgNi4xMTM0NiAxMi42NzUzIDQuODQzMiAxMS44NDkzIDMuODU3NzlMMy44NTc3NiAxMS44NDkzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sT289ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5OTggMUw2LjkyMzIxIDIuMDAzMDdMMS4xNzQ5OCAxMkwwLjU5OTk3NiAxM0gxLjc1MzVIMTMuMjQ2NEgxNC40TDEzLjgyNSAxMkw4LjA3Njc0IDIuMDAzMDdMNy40OTk5OCAxWk03LjQ5OTk4IDMuMDA2MTNMMi4zMjg1IDEySDEyLjY3MTRMNy40OTk5OCAzLjAwNjEzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTW89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuNzY0NDcgMy4xMjE5OUM1LjYzMTUxIDMuMDQ4NTkgNi41NjA4MiAzIDcuNSAzQzguNDM5MTggMyA5LjM2ODQ5IDMuMDQ4NTkgMTAuMjM1NSAzLjEyMTk5QzExLjI3OTYgMy4yMTAzNyAxMS45NTUzIDMuMjcwMDggMTIuNDcyIDMuMzkyMDNDMTIuOTQyNSAzLjUwMzA0IDEzLjIwNDggMy42NDk3NiAxMy40MzA2IDMuODgwODZDMTMuNDU1MyAzLjkwNjE4IDEzLjQ5MDIgMy45NDQxNCAxMy41MTMzIDMuOTcwOTJDMTMuNzEyNiA0LjIwMTQ5IDEzLjg0MzUgNC40ODg3IDEzLjkxOCA1LjAzMjgzQzEzLjk5NzggNS42MTU2IDE0IDYuMzc2NDQgMTQgNy41MjQ5M0MxNCA4LjY2MDI2IDEzLjk5NzggOS40MTAxOSAxMy45MTgxIDkuOTg1MzhDMTMuODQzOSAxMC41MjA2IDEzLjcxMzcgMTAuODA2MSAxMy41MTI1IDExLjAzODdDMTMuNDg5NiAxMS4wNjUxIDEzLjQ1NDEgMTEuMTAzOCAxMy40Mjk2IDExLjEyODdDMTMuMjAwOSAxMS4zNjI1IDEyLjk0MDYgMTEuNTA3NiAxMi40ODE4IDExLjYxNjRDMTEuOTc1MiAxMS43MzY1IDExLjMxNDMgMTEuNzk0MiAxMC4yODc4IDExLjg3OTdDOS40MTk0OCAxMS45NTIxIDguNDc1NjYgMTIgNy41IDEyQzYuNTI0MzQgMTIgNS41ODA1MiAxMS45NTIxIDQuNzEyMiAxMS44Nzk3QzMuNjg1NzIgMTEuNzk0MiAzLjAyNDc3IDExLjczNjUgMi41MTgxNiAxMS42MTY0QzIuMDU5MzYgMTEuNTA3NiAxLjc5OTEgMTEuMzYyNSAxLjU3MDM3IDExLjEyODdDMS41NDU5MyAxMS4xMDM4IDEuNTEwMzUgMTEuMDY1MSAxLjQ4NzQ4IDExLjAzODdDMS4yODYyOCAxMC44MDYxIDEuMTU2MTIgMTAuNTIwNiAxLjA4MTkzIDkuOTg1MzhDMS4wMDIyMSA5LjQxMDE5IDEgOC42NjAyNiAxIDcuNTI0OTNDMSA2LjM3NjQ0IDEuMDAyMTYgNS42MTU2IDEuMDgyIDUuMDMyODNDMS4xNTY1NCA0LjQ4ODcgMS4yODc0NCA0LjIwMTQ5IDEuNDg2NjYgMy45NzA5MkMxLjUwOTggMy45NDQxNCAxLjU0NDY4IDMuOTA2MTggMS41Njk0MiAzLjg4MDg2QzEuNzk1MiAzLjY0OTc2IDIuMDU3NTIgMy41MDMwNCAyLjUyNzk2IDMuMzkyMDNDMy4wNDQ3MyAzLjI3MDA4IDMuNzIwNCAzLjIxMDM3IDQuNzY0NDcgMy4xMjE5OVpNMCA3LjUyNDkzQzAgNS4yODI5NiAwIDQuMTYxOTggMC43Mjk5ODUgMy4zMTcxM0MwLjc2NjQ1NyAzLjI3NDkxIDAuODE1MTM5IDMuMjIxOTQgMC44NTQxMjMgMy4xODIwNEMxLjYzNDM5IDIuMzgzMzkgMi42NDk2MyAyLjI5NzQ0IDQuNjgwMTIgMi4xMjU1NUM1LjU2OTIzIDIuMDUwMjggNi41MjcyNCAyIDcuNSAyQzguNDcyNzYgMiA5LjQzMDc3IDIuMDUwMjggMTAuMzE5OSAyLjEyNTU1QzEyLjM1MDQgMi4yOTc0NCAxMy4zNjU2IDIuMzgzMzkgMTQuMTQ1OSAzLjE4MjA0QzE0LjE4NDkgMy4yMjE5NCAxNC4yMzM1IDMuMjc0OTEgMTQuMjcgMy4zMTcxM0MxNSA0LjE2MTk4IDE1IDUuMjgyOTYgMTUgNy41MjQ5M0MxNSA5Ljc0MDEyIDE1IDEwLjg0NzcgMTQuMjY4OCAxMS42OTI5QzE0LjIzMjYgMTEuNzM0OCAxNC4xODMyIDExLjc4ODUgMTQuMTQ0NCAxMS44MjgxQzEzLjM2MjkgMTIuNjI2OSAxMi4zNjU1IDEyLjcxIDEwLjM3MDkgMTIuODc2M0M5LjQ3OTcxIDEyLjk1MDUgOC41MDc4MiAxMyA3LjUgMTNDNi40OTIxOCAxMyA1LjUyMDI4IDEyLjk1MDUgNC42MjkxNSAxMi44NzYzQzIuNjM0NDYgMTIuNzEgMS42MzcxMiAxMi42MjY5IDAuODU1NTU4IDExLjgyODFDMC44MTY4NDQgMTEuNzg4NSAwLjc2NzQ0MiAxMS43MzQ4IDAuNzMxMjIxIDExLjY5MjlDMCAxMC44NDc3IDAgOS43NDAxMiAwIDcuNTI0OTNaTTUuMjUgNS4zODI2NEM1LjI1IDUuMjAyMjUgNS40MzUyMiA1LjA4MTI0IDUuNjAwNDEgNS4xNTM2OUwxMC40MjggNy4yNzEwNUMxMC42Mjc0IDcuMzU4NTMgMTAuNjI3NCA3LjY0MTQ3IDEwLjQyOCA3LjcyODk1TDUuNjAwNDEgOS44NDYzMUM1LjQzNTIyIDkuOTE4NzYgNS4yNSA5Ljc5Nzc1IDUuMjUgOS42MTczNlY1LjM4MjY0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTG89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcgMkgxLjVDMS4yMjM4NiAyIDEgMi4yMjM4NiAxIDIuNVY3SDdWMlpNOCAyVjdIMTRWMi41QzE0IDIuMjIzODYgMTMuNzc2MSAyIDEzLjUgMkg4Wk03IDhIMVYxMi41QzEgMTIuNzc2MSAxLjIyMzg2IDEzIDEuNSAxM0g3VjhaTTggMTNWOEgxNFYxMi41QzE0IDEyLjc3NjEgMTMuNzc2MSAxMyAxMy41IDEzSDhaTTEuNSAxQzAuNjcxNTczIDEgMCAxLjY3MTU3IDAgMi41VjEyLjVDMCAxMy4zMjg0IDAuNjcxNTczIDE0IDEuNSAxNEgxMy41QzE0LjMyODQgMTQgMTUgMTMuMzI4NCAxNSAxMi41VjIuNUMxNSAxLjY3MTU3IDE0LjMyODQgMSAxMy41IDFIMS41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sX289ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuNSAySDEzLjVDMTMuNzc2MSAyIDE0IDIuMjIzODYgMTQgMi41VjdIMVYyLjVDMSAyLjIyMzg2IDEuMjIzODYgMiAxLjUgMlpNMSA4VjEyLjVDMSAxMi43NzYxIDEuMjIzODYgMTMgMS41IDEzSDEzLjVDMTMuNzc2MSAxMyAxNCAxMi43NzYxIDE0IDEyLjVWOEgxWk0wIDIuNUMwIDEuNjcxNTcgMC42NzE1NzMgMSAxLjUgMUgxMy41QzE0LjMyODQgMSAxNSAxLjY3MTU3IDE1IDIuNVYxMi41QzE1IDEzLjMyODQgMTQuMzI4NCAxNCAxMy41IDE0SDEuNUMwLjY3MTU3MyAxNCAwIDEzLjMyODQgMCAxMi41VjIuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFBvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xNCAyLjU4NzExTDEuODUxNjMgMTNIMTMuNUMxMy43NzYxIDEzIDE0IDEyLjc3NjEgMTQgMTIuNVYyLjU4NzExWk0wLjc2Mjg3OSAxMy44MDY3TDAuODI1Mzk2IDEzLjg3OTZMMC44NTQ3MTcgMTMuODU0NUMxLjA1MDE3IDEzLjk0NzggMS4yNjg5OSAxNCAxLjUgMTRIMTMuNUMxNC4zMjg0IDE0IDE1IDEzLjMyODQgMTUgMTIuNVYyLjVDMTUgMS45Mzk0OSAxNC42OTI2IDEuNDUwNzggMTQuMjM3MSAxLjE5MzMxTDE0LjE3NDYgMS4xMjAzN0wxNC4xNDUzIDEuMTQ1NUMxMy45NDk4IDEuMDUyMjIgMTMuNzMxIDEgMTMuNSAxSDEuNUMwLjY3MTU3MyAxIDAgMS42NzE1NyAwIDIuNVYxMi41QzAgMTMuMDYwNSAwLjMwNzQzNSAxMy41NDkyIDAuNzYyODc5IDEzLjgwNjdaTTEgMTIuNDEyOUwxMy4xNDg0IDJIMS41QzEuMjIzODYgMiAxIDIuMjIzODYgMSAyLjVWMTIuNDEyOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEVvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk04IDJIMTMuNUMxMy43NzYxIDIgMTQgMi4yMjM4NiAxNCAyLjVWMTIuNUMxNCAxMi43NzYxIDEzLjc3NjEgMTMgMTMuNSAxM0g4VjJaTTcgMkgxLjVDMS4yMjM4NiAyIDEgMi4yMjM4NiAxIDIuNVYxMi41QzEgMTIuNzc2MSAxLjIyMzg2IDEzIDEuNSAxM0g3VjJaTTAgMi41QzAgMS42NzE1NyAwLjY3MTU3MyAxIDEuNSAxSDEzLjVDMTQuMzI4NCAxIDE1IDEuNjcxNTcgMTUgMi41VjEyLjVDMTUgMTMuMzI4NCAxNC4zMjg0IDE0IDEzLjUgMTRIMS41QzAuNjcxNTczIDE0IDAgMTMuMzI4NCAwIDEyLjVWMi41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sam89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuODE4MTIgNC42ODE2MUM0Ljk5Mzg2IDQuODU3MzQgNC45OTM4NiA1LjE0MjI3IDQuODE4MTIgNS4zMThMMy4wODYzMiA3LjA0OThIMTEuOTEzNUwxMC4xODE3IDUuMzE4QzEwLjAwNiA1LjE0MjI3IDEwLjAwNiA0Ljg1NzM0IDEwLjE4MTcgNC42ODE2MUMxMC4zNTc1IDQuNTA1ODcgMTAuNjQyNCA0LjUwNTg3IDEwLjgxODEgNC42ODE2MUwxMy4zMTgxIDcuMTgxNjFDMTMuNDkzOSA3LjM1NzM0IDEzLjQ5MzkgNy42NDIyNyAxMy4zMTgxIDcuODE4TDEwLjgxODEgMTAuMzE4QzEwLjY0MjQgMTAuNDkzNyAxMC4zNTc1IDEwLjQ5MzcgMTAuMTgxNyAxMC4zMThDMTAuMDA2IDEwLjE0MjMgMTAuMDA2IDkuODU3MzQgMTAuMTgxNyA5LjY4MTYxTDExLjkxMzUgNy45NDk4SDMuMDg2MzJMNC44MTgxMiA5LjY4MTYxQzQuOTkzODYgOS44NTczNCA0Ljk5Mzg2IDEwLjE0MjMgNC44MTgxMiAxMC4zMThDNC42NDIzOSAxMC40OTM3IDQuMzU3NDYgMTAuNDkzNyA0LjE4MTczIDEwLjMxOEwxLjY4MTczIDcuODE4QzEuNTA1OTkgNy42NDIyNyAxLjUwNTk5IDcuMzU3MzQgMS42ODE3MyA3LjE4MTYxTDQuMTgxNzMgNC42ODE2MUM0LjM1NzQ2IDQuNTA1ODcgNC42NDIzOSA0LjUwNTg3IDQuODE4MTIgNC42ODE2MVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFJvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMCA2LjVDMTAgOC40MzMgOC40MzMgMTAgNi41IDEwQzQuNTY3IDEwIDMgOC40MzMgMyA2LjVDMyA0LjU2NyA0LjU2NyAzIDYuNSAzQzguNDMzIDMgMTAgNC41NjcgMTAgNi41Wk05LjMwODg0IDEwLjAxNTlDOC41MzkwMSAxMC42MzE4IDcuNTYyNTEgMTEgNi41IDExQzQuMDE0NzIgMTEgMiA4Ljk4NTI4IDIgNi41QzIgNC4wMTQ3MiA0LjAxNDcyIDIgNi41IDJDOC45ODUyOCAyIDExIDQuMDE0NzIgMTEgNi41QzExIDcuNTYyNTEgMTAuNjMxOCA4LjUzOTAxIDEwLjAxNTkgOS4zMDg4NEwxMi44NTM2IDEyLjE0NjRDMTMuMDQ4OCAxMi4zNDE3IDEzLjA0ODggMTIuNjU4MyAxMi44NTM2IDEyLjg1MzZDMTIuNjU4MyAxMy4wNDg4IDEyLjM0MTcgMTMuMDQ4OCAxMi4xNDY0IDEyLjg1MzZMOS4zMDg4NCAxMC4wMTU5Wk00LjI1IDYuNUM0LjI1IDYuMjIzODYgNC40NzM4NiA2IDQuNzUgNkg2VjQuNzVDNiA0LjQ3Mzg2IDYuMjIzODYgNC4yNSA2LjUgNC4yNUM2Ljc3NjE0IDQuMjUgNyA0LjQ3Mzg2IDcgNC43NVY2SDguMjVDOC41MjYxNCA2IDguNzUgNi4yMjM4NiA4Ljc1IDYuNUM4Ljc1IDYuNzc2MTQgOC41MjYxNCA3IDguMjUgN0g3VjguMjVDNyA4LjUyNjE0IDYuNzc2MTQgOC43NSA2LjUgOC43NUM2LjIyMzg2IDguNzUgNiA4LjUyNjE0IDYgOC4yNVY3SDQuNzVDNC40NzM4NiA3IDQuMjUgNi43NzYxNCA0LjI1IDYuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LElvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02LjUgMTBDOC40MzMgMTAgMTAgOC40MzMgMTAgNi41QzEwIDQuNTY3IDguNDMzIDMgNi41IDNDNC41NjcgMyAzIDQuNTY3IDMgNi41QzMgOC40MzMgNC41NjcgMTAgNi41IDEwWk02LjUgMTFDNy41NjI1MSAxMSA4LjUzOTAxIDEwLjYzMTggOS4zMDg4NCAxMC4wMTU5TDEyLjE0NjQgMTIuODUzNkMxMi4zNDE3IDEzLjA0ODggMTIuNjU4MyAxMy4wNDg4IDEyLjg1MzYgMTIuODUzNkMxMy4wNDg4IDEyLjY1ODMgMTMuMDQ4OCAxMi4zNDE3IDEyLjg1MzYgMTIuMTQ2NEwxMC4wMTU5IDkuMzA4ODRDMTAuNjMxOCA4LjUzOTAxIDExIDcuNTYyNTEgMTEgNi41QzExIDQuMDE0NzIgOC45ODUyOCAyIDYuNSAyQzQuMDE0NzIgMiAyIDQuMDE0NzIgMiA2LjVDMiA4Ljk4NTI4IDQuMDE0NzIgMTEgNi41IDExWk00Ljc1IDZDNC40NzM4NiA2IDQuMjUgNi4yMjM4NiA0LjI1IDYuNUM0LjI1IDYuNzc2MTQgNC40NzM4NiA3IDQuNzUgN0g4LjI1QzguNTI2MTQgNyA4Ljc1IDYuNzc2MTQgOC43NSA2LjVDOC43NSA2LjIyMzg2IDguNTI2MTQgNiA4LjI1IDZINC43NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9fSw1Mjk5OihlLHQsbik9PntuLnIodCksbi5kKHQse2RlZmF1bHQ6KCk9Pmx9KTt2YXIgcj1uKDgwODEpLG89bi5uKHIpLGE9bigzNjQ1KSxpPW4ubihhKSgpKG8oKSk7aS5wdXNoKFtlLmlkLFwiLnJlYWN0LWNhbGVuZGFyIHtcXG4gIHdpZHRoOiAzNTBweDtcXG4gIG1heC13aWR0aDogMTAwJTtcXG4gIGJhY2tncm91bmQ6IHdoaXRlO1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2EwYTA5NjtcXG4gIGZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xcbiAgbGluZS1oZWlnaHQ6IDEuMTI1ZW07XFxufVxcbi5yZWFjdC1jYWxlbmRhci0tZG91YmxlVmlldyB7XFxuICB3aWR0aDogNzAwcHg7XFxufVxcbi5yZWFjdC1jYWxlbmRhci0tZG91YmxlVmlldyAucmVhY3QtY2FsZW5kYXJfX3ZpZXdDb250YWluZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIG1hcmdpbjogLTAuNWVtO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXItLWRvdWJsZVZpZXcgLnJlYWN0LWNhbGVuZGFyX192aWV3Q29udGFpbmVyID4gKiB7XFxuICB3aWR0aDogNTAlO1xcbiAgbWFyZ2luOiAwLjVlbTtcXG59XFxuLnJlYWN0LWNhbGVuZGFyLFxcbi5yZWFjdC1jYWxlbmRhciAqLFxcbi5yZWFjdC1jYWxlbmRhciAqOmJlZm9yZSxcXG4ucmVhY3QtY2FsZW5kYXIgKjphZnRlciB7XFxuICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbn1cXG4ucmVhY3QtY2FsZW5kYXIgYnV0dG9uIHtcXG4gIG1hcmdpbjogMDtcXG4gIGJvcmRlcjogMDtcXG4gIG91dGxpbmU6IG5vbmU7XFxufVxcbi5yZWFjdC1jYWxlbmRhciBidXR0b246ZW5hYmxlZDpob3ZlciB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fbmF2aWdhdGlvbiB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgaGVpZ2h0OiA0NHB4O1xcbiAgbWFyZ2luLWJvdHRvbTogMWVtO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX25hdmlnYXRpb24gYnV0dG9uIHtcXG4gIG1pbi13aWR0aDogNDRweDtcXG4gIGJhY2tncm91bmQ6IG5vbmU7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fbmF2aWdhdGlvbiBidXR0b246ZGlzYWJsZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX19uYXZpZ2F0aW9uIGJ1dHRvbjplbmFibGVkOmhvdmVyLFxcbi5yZWFjdC1jYWxlbmRhcl9fbmF2aWdhdGlvbiBidXR0b246ZW5hYmxlZDpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2O1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdfX3dlZWtkYXlzIHtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XFxuICBmb250LXdlaWdodDogYm9sZDtcXG4gIGZvbnQtc2l6ZTogMC43NWVtO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdfX3dlZWtkYXlzX193ZWVrZGF5IHtcXG4gIHBhZGRpbmc6IDAuNWVtO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdfX3dlZWtOdW1iZXJzIC5yZWFjdC1jYWxlbmRhcl9fdGlsZSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgZm9udC1zaXplOiAwLjc1ZW07XFxuICBmb250LXdlaWdodDogYm9sZDtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX19tb250aC12aWV3X19kYXlzX19kYXktLXdlZWtlbmQge1xcbiAgY29sb3I6ICNkMTAwMDA7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fbW9udGgtdmlld19fZGF5c19fZGF5LS1uZWlnaGJvcmluZ01vbnRoIHtcXG4gIGNvbG9yOiAjNzU3NTc1O1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX3llYXItdmlldyAucmVhY3QtY2FsZW5kYXJfX3RpbGUsXFxuLnJlYWN0LWNhbGVuZGFyX19kZWNhZGUtdmlldyAucmVhY3QtY2FsZW5kYXJfX3RpbGUsXFxuLnJlYWN0LWNhbGVuZGFyX19jZW50dXJ5LXZpZXcgLnJlYWN0LWNhbGVuZGFyX190aWxlIHtcXG4gIHBhZGRpbmc6IDJlbSAwLjVlbTtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX190aWxlIHtcXG4gIG1heC13aWR0aDogMTAwJTtcXG4gIHBhZGRpbmc6IDEwcHggNi42NjY3cHg7XFxuICBiYWNrZ3JvdW5kOiBub25lO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgbGluZS1oZWlnaHQ6IDE2cHg7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fdGlsZTpkaXNhYmxlZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYwO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX3RpbGU6ZW5hYmxlZDpob3ZlcixcXG4ucmVhY3QtY2FsZW5kYXJfX3RpbGU6ZW5hYmxlZDpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2O1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX3RpbGUtLW5vdyB7XFxuICBiYWNrZ3JvdW5kOiAjZmZmZjc2O1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX3RpbGUtLW5vdzplbmFibGVkOmhvdmVyLFxcbi5yZWFjdC1jYWxlbmRhcl9fdGlsZS0tbm93OmVuYWJsZWQ6Zm9jdXMge1xcbiAgYmFja2dyb3VuZDogI2ZmZmZhOTtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX190aWxlLS1oYXNBY3RpdmUge1xcbiAgYmFja2dyb3VuZDogIzc2YmFmZjtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX190aWxlLS1oYXNBY3RpdmU6ZW5hYmxlZDpob3ZlcixcXG4ucmVhY3QtY2FsZW5kYXJfX3RpbGUtLWhhc0FjdGl2ZTplbmFibGVkOmZvY3VzIHtcXG4gIGJhY2tncm91bmQ6ICNhOWQ0ZmY7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fdGlsZS0tYWN0aXZlIHtcXG4gIGJhY2tncm91bmQ6ICMwMDZlZGM7XFxuICBjb2xvcjogd2hpdGU7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fdGlsZS0tYWN0aXZlOmVuYWJsZWQ6aG92ZXIsXFxuLnJlYWN0LWNhbGVuZGFyX190aWxlLS1hY3RpdmU6ZW5hYmxlZDpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kOiAjMTA4N2ZmO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXItLXNlbGVjdFJhbmdlIC5yZWFjdC1jYWxlbmRhcl9fdGlsZS0taG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZTZlNjtcXG59XFxuXCIsXCJcIl0pO2NvbnN0IGw9aX0sMzY0NTplPT57ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKChmdW5jdGlvbih0KXt2YXIgbj1cIlwiLHI9dm9pZCAwIT09dFs1XTtyZXR1cm4gdFs0XSYmKG4rPVwiQHN1cHBvcnRzIChcIi5jb25jYXQodFs0XSxcIikge1wiKSksdFsyXSYmKG4rPVwiQG1lZGlhIFwiLmNvbmNhdCh0WzJdLFwiIHtcIikpLHImJihuKz1cIkBsYXllclwiLmNvbmNhdCh0WzVdLmxlbmd0aD4wP1wiIFwiLmNvbmNhdCh0WzVdKTpcIlwiLFwiIHtcIikpLG4rPWUodCksciYmKG4rPVwifVwiKSx0WzJdJiYobis9XCJ9XCIpLHRbNF0mJihuKz1cIn1cIiksbn0pKS5qb2luKFwiXCIpfSx0Lmk9ZnVuY3Rpb24oZSxuLHIsbyxhKXtcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9W1tudWxsLGUsdm9pZCAwXV0pO3ZhciBpPXt9O2lmKHIpZm9yKHZhciBsPTA7bDx0aGlzLmxlbmd0aDtsKyspe3ZhciBzPXRoaXNbbF1bMF07bnVsbCE9cyYmKGlbc109ITApfWZvcih2YXIgYz0wO2M8ZS5sZW5ndGg7YysrKXt2YXIgdT1bXS5jb25jYXQoZVtjXSk7ciYmaVt1WzBdXXx8KHZvaWQgMCE9PWEmJih2b2lkIDA9PT11WzVdfHwodVsxXT1cIkBsYXllclwiLmNvbmNhdCh1WzVdLmxlbmd0aD4wP1wiIFwiLmNvbmNhdCh1WzVdKTpcIlwiLFwiIHtcIikuY29uY2F0KHVbMV0sXCJ9XCIpKSx1WzVdPWEpLG4mJih1WzJdPyh1WzFdPVwiQG1lZGlhIFwiLmNvbmNhdCh1WzJdLFwiIHtcIikuY29uY2F0KHVbMV0sXCJ9XCIpLHVbMl09bik6dVsyXT1uKSxvJiYodVs0XT8odVsxXT1cIkBzdXBwb3J0cyAoXCIuY29uY2F0KHVbNF0sXCIpIHtcIikuY29uY2F0KHVbMV0sXCJ9XCIpLHVbNF09byk6dVs0XT1cIlwiLmNvbmNhdChvKSksdC5wdXNoKHUpKX19LHR9fSw4MDgxOmU9PntlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV19fSw0NDgzOihlLHQsbik9PntmdW5jdGlvbiByKGUpe3JldHVybiByPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlP1wic3ltYm9sXCI6dHlwZW9mIGV9LHIoZSl9ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBvPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sbyhlLHQpfWZ1bmN0aW9uIGEoZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIGV9ZnVuY3Rpb24gaShlKXtyZXR1cm4gaT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0saShlKX1mdW5jdGlvbiBsKGUpe3ZhciB0PWZ1bmN0aW9uKGUsdCl7aWYoXCJvYmplY3RcIiE9PXIoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciBuPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1uKXt2YXIgbz1uLmNhbGwoZSxcInN0cmluZ1wiKTtpZihcIm9iamVjdFwiIT09cihvKSlyZXR1cm4gbzt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIil9cmV0dXJuIFN0cmluZyhlKX0oZSk7cmV0dXJuXCJzeW1ib2xcIj09PXIodCk/dDpTdHJpbmcodCl9dmFyIHM9big2Njg5KSxjPW4oNTY5NyksdT1uKDUzMDMpLmNyZWF0ZUZvY3VzVHJhcCxkPW4oODM4OCkuaXNGb2N1c2FibGUscD1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwicHJvdG90eXBlXCIse3dyaXRhYmxlOiExfSksdCYmbyhlLHQpfShmLGUpO3ZhciB0LG4sYyx1LHA9KGM9Zix1PWZ1bmN0aW9uKCl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCksZnVuY3Rpb24oKXt2YXIgZSx0PWkoYyk7aWYodSl7dmFyIG49aSh0aGlzKS5jb25zdHJ1Y3RvcjtlPVJlZmxlY3QuY29uc3RydWN0KHQsYXJndW1lbnRzLG4pfWVsc2UgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoXCJvYmplY3RcIj09PXIodCl8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO3JldHVybiBhKGUpfSh0aGlzLGUpfSk7ZnVuY3Rpb24gZihlKXt2YXIgdCxuLHIsbzshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfSh0aGlzLGYpLG49YSh0PXAuY2FsbCh0aGlzLGUpKSxvPWZ1bmN0aW9uKGUpe3ZhciB0LG49bnVsbCE9PSh0PXRoaXMuaW50ZXJuYWxPcHRpb25zW2VdKSYmdm9pZCAwIT09dD90OnRoaXMub3JpZ2luYWxPcHRpb25zW2VdO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4pe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoLG89bmV3IEFycmF5KHI+MT9yLTE6MCksYT0xO2E8cjthKyspb1thLTFdPWFyZ3VtZW50c1thXTtuPW4uYXBwbHkodm9pZCAwLG8pfWlmKCEwPT09biYmKG49dm9pZCAwKSwhbil7aWYodm9pZCAwPT09bnx8ITE9PT1uKXJldHVybiBuO3Rocm93IG5ldyBFcnJvcihcImBcIi5jb25jYXQoZSxcImAgd2FzIHNwZWNpZmllZCBidXQgd2FzIG5vdCBhIG5vZGUsIG9yIGRpZCBub3QgcmV0dXJuIGEgbm9kZVwiKSl9dmFyIGksbD1uO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuJiYhKGw9bnVsbD09PShpPXRoaXMuZ2V0RG9jdW1lbnQoKSl8fHZvaWQgMD09PWk/dm9pZCAwOmkucXVlcnlTZWxlY3RvcihuKSkpdGhyb3cgbmV3IEVycm9yKFwiYFwiLmNvbmNhdChlLFwiYCBhcyBzZWxlY3RvciByZWZlcnMgdG8gbm8ga25vd24gbm9kZVwiKSk7cmV0dXJuIGx9LChyPWwocj1cImdldE5vZGVGb3JPcHRpb25cIikpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobixyLHt2YWx1ZTpvLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6bltyXT1vLHQuaGFuZGxlRGVhY3RpdmF0ZT10LmhhbmRsZURlYWN0aXZhdGUuYmluZChhKHQpKSx0LmhhbmRsZVBvc3REZWFjdGl2YXRlPXQuaGFuZGxlUG9zdERlYWN0aXZhdGUuYmluZChhKHQpKSx0LmhhbmRsZUNsaWNrT3V0c2lkZURlYWN0aXZhdGVzPXQuaGFuZGxlQ2xpY2tPdXRzaWRlRGVhY3RpdmF0ZXMuYmluZChhKHQpKSx0LmludGVybmFsT3B0aW9ucz17cmV0dXJuRm9jdXNPbkRlYWN0aXZhdGU6ITEsY2hlY2tDYW5SZXR1cm5Gb2N1czpudWxsLG9uRGVhY3RpdmF0ZTp0LmhhbmRsZURlYWN0aXZhdGUsb25Qb3N0RGVhY3RpdmF0ZTp0LmhhbmRsZVBvc3REZWFjdGl2YXRlLGNsaWNrT3V0c2lkZURlYWN0aXZhdGVzOnQuaGFuZGxlQ2xpY2tPdXRzaWRlRGVhY3RpdmF0ZXN9LHQub3JpZ2luYWxPcHRpb25zPXtyZXR1cm5Gb2N1c09uRGVhY3RpdmF0ZTohMCxvbkRlYWN0aXZhdGU6bnVsbCxvblBvc3REZWFjdGl2YXRlOm51bGwsY2hlY2tDYW5SZXR1cm5Gb2N1czpudWxsLGNsaWNrT3V0c2lkZURlYWN0aXZhdGVzOiExfTt2YXIgaT1lLmZvY3VzVHJhcE9wdGlvbnM7Zm9yKHZhciBzIGluIGkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGkscykmJihcInJldHVybkZvY3VzT25EZWFjdGl2YXRlXCIhPT1zJiZcIm9uRGVhY3RpdmF0ZVwiIT09cyYmXCJvblBvc3REZWFjdGl2YXRlXCIhPT1zJiZcImNoZWNrQ2FuUmV0dXJuRm9jdXNcIiE9PXMmJlwiY2xpY2tPdXRzaWRlRGVhY3RpdmF0ZXNcIiE9PXM/dC5pbnRlcm5hbE9wdGlvbnNbc109aVtzXTp0Lm9yaWdpbmFsT3B0aW9uc1tzXT1pW3NdKTtyZXR1cm4gdC5vdXRzaWRlQ2xpY2s9bnVsbCx0LmZvY3VzVHJhcEVsZW1lbnRzPWUuY29udGFpbmVyRWxlbWVudHN8fFtdLHQudXBkYXRlUHJldmlvdXNFbGVtZW50KCksdH1yZXR1cm4gdD1mLChuPVt7a2V5OlwiZ2V0RG9jdW1lbnRcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3BzLmZvY3VzVHJhcE9wdGlvbnMuZG9jdW1lbnR8fChcInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQ/ZG9jdW1lbnQ6dm9pZCAwKX19LHtrZXk6XCJnZXRSZXR1cm5Gb2N1c05vZGVcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0Tm9kZUZvck9wdGlvbihcInNldFJldHVybkZvY3VzXCIsdGhpcy5wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQpO3JldHVybiBlfHwhMSE9PWUmJnRoaXMucHJldmlvdXNseUZvY3VzZWRFbGVtZW50fX0se2tleTpcInVwZGF0ZVByZXZpb3VzRWxlbWVudFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXREb2N1bWVudCgpO2UmJih0aGlzLnByZXZpb3VzbHlGb2N1c2VkRWxlbWVudD1lLmFjdGl2ZUVsZW1lbnQpfX0se2tleTpcImRlYWN0aXZhdGVUcmFwXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmZvY3VzVHJhcCYmdGhpcy5mb2N1c1RyYXAuYWN0aXZlJiZ0aGlzLmZvY3VzVHJhcC5kZWFjdGl2YXRlKHtyZXR1cm5Gb2N1czohMSxjaGVja0NhblJldHVybkZvY3VzOm51bGwsb25EZWFjdGl2YXRlOnRoaXMub3JpZ2luYWxPcHRpb25zLm9uRGVhY3RpdmF0ZX0pfX0se2tleTpcImhhbmRsZUNsaWNrT3V0c2lkZURlYWN0aXZhdGVzXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5vcmlnaW5hbE9wdGlvbnMuY2xpY2tPdXRzaWRlRGVhY3RpdmF0ZXM/dGhpcy5vcmlnaW5hbE9wdGlvbnMuY2xpY2tPdXRzaWRlRGVhY3RpdmF0ZXMuY2FsbChudWxsLGUpOnRoaXMub3JpZ2luYWxPcHRpb25zLmNsaWNrT3V0c2lkZURlYWN0aXZhdGVzO3JldHVybiB0JiYodGhpcy5vdXRzaWRlQ2xpY2s9e3RhcmdldDplLnRhcmdldCxhbGxvd0RlYWN0aXZhdGlvbjp0fSksdH19LHtrZXk6XCJoYW5kbGVEZWFjdGl2YXRlXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm9yaWdpbmFsT3B0aW9ucy5vbkRlYWN0aXZhdGUmJnRoaXMub3JpZ2luYWxPcHRpb25zLm9uRGVhY3RpdmF0ZS5jYWxsKG51bGwpLHRoaXMuZGVhY3RpdmF0ZVRyYXAoKX19LHtrZXk6XCJoYW5kbGVQb3N0RGVhY3RpdmF0ZVwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWZ1bmN0aW9uKCl7dmFyIHQ9ZS5nZXRSZXR1cm5Gb2N1c05vZGUoKSxuPSEoIWUub3JpZ2luYWxPcHRpb25zLnJldHVybkZvY3VzT25EZWFjdGl2YXRlfHxudWxsPT10fHwhdC5mb2N1c3x8ZS5vdXRzaWRlQ2xpY2smJighZS5vdXRzaWRlQ2xpY2suYWxsb3dEZWFjdGl2YXRpb258fGQoZS5vdXRzaWRlQ2xpY2sudGFyZ2V0LGUuaW50ZXJuYWxPcHRpb25zLnRhYmJhYmxlT3B0aW9ucykpKSxyPWUuaW50ZXJuYWxPcHRpb25zLnByZXZlbnRTY3JvbGwsbz12b2lkIDAhPT1yJiZyO24mJnQuZm9jdXMoe3ByZXZlbnRTY3JvbGw6b30pLGUub3JpZ2luYWxPcHRpb25zLm9uUG9zdERlYWN0aXZhdGUmJmUub3JpZ2luYWxPcHRpb25zLm9uUG9zdERlYWN0aXZhdGUuY2FsbChudWxsKSxlLm91dHNpZGVDbGljaz1udWxsfTt0aGlzLm9yaWdpbmFsT3B0aW9ucy5jaGVja0NhblJldHVybkZvY3VzP3RoaXMub3JpZ2luYWxPcHRpb25zLmNoZWNrQ2FuUmV0dXJuRm9jdXMuY2FsbChudWxsLHRoaXMuZ2V0UmV0dXJuRm9jdXNOb2RlKCkpLnRoZW4odCx0KTp0KCl9fSx7a2V5Olwic2V0dXBGb2N1c1RyYXBcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZm9jdXNUcmFwP3RoaXMucHJvcHMuYWN0aXZlJiYhdGhpcy5mb2N1c1RyYXAuYWN0aXZlJiYodGhpcy5mb2N1c1RyYXAuYWN0aXZhdGUoKSx0aGlzLnByb3BzLnBhdXNlZCYmdGhpcy5mb2N1c1RyYXAucGF1c2UoKSk6dGhpcy5mb2N1c1RyYXBFbGVtZW50cy5zb21lKEJvb2xlYW4pJiYodGhpcy5mb2N1c1RyYXA9dGhpcy5wcm9wcy5fY3JlYXRlRm9jdXNUcmFwKHRoaXMuZm9jdXNUcmFwRWxlbWVudHMsdGhpcy5pbnRlcm5hbE9wdGlvbnMpLHRoaXMucHJvcHMuYWN0aXZlJiZ0aGlzLmZvY3VzVHJhcC5hY3RpdmF0ZSgpLHRoaXMucHJvcHMucGF1c2VkJiZ0aGlzLmZvY3VzVHJhcC5wYXVzZSgpKX19LHtrZXk6XCJjb21wb25lbnREaWRNb3VudFwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5wcm9wcy5hY3RpdmUmJnRoaXMuc2V0dXBGb2N1c1RyYXAoKX19LHtrZXk6XCJjb21wb25lbnREaWRVcGRhdGVcIix2YWx1ZTpmdW5jdGlvbihlKXtpZih0aGlzLmZvY3VzVHJhcCl7ZS5jb250YWluZXJFbGVtZW50cyE9PXRoaXMucHJvcHMuY29udGFpbmVyRWxlbWVudHMmJnRoaXMuZm9jdXNUcmFwLnVwZGF0ZUNvbnRhaW5lckVsZW1lbnRzKHRoaXMucHJvcHMuY29udGFpbmVyRWxlbWVudHMpO3ZhciB0PSFlLmFjdGl2ZSYmdGhpcy5wcm9wcy5hY3RpdmUsbj1lLmFjdGl2ZSYmIXRoaXMucHJvcHMuYWN0aXZlLHI9IWUucGF1c2VkJiZ0aGlzLnByb3BzLnBhdXNlZCxvPWUucGF1c2VkJiYhdGhpcy5wcm9wcy5wYXVzZWQ7aWYodCYmKHRoaXMudXBkYXRlUHJldmlvdXNFbGVtZW50KCksdGhpcy5mb2N1c1RyYXAuYWN0aXZhdGUoKSksbilyZXR1cm4gdm9pZCB0aGlzLmRlYWN0aXZhdGVUcmFwKCk7ciYmdGhpcy5mb2N1c1RyYXAucGF1c2UoKSxvJiZ0aGlzLmZvY3VzVHJhcC51bnBhdXNlKCl9ZWxzZSBlLmNvbnRhaW5lckVsZW1lbnRzIT09dGhpcy5wcm9wcy5jb250YWluZXJFbGVtZW50cyYmKHRoaXMuZm9jdXNUcmFwRWxlbWVudHM9dGhpcy5wcm9wcy5jb250YWluZXJFbGVtZW50cyksdGhpcy5wcm9wcy5hY3RpdmUmJih0aGlzLnVwZGF0ZVByZXZpb3VzRWxlbWVudCgpLHRoaXMuc2V0dXBGb2N1c1RyYXAoKSl9fSx7a2V5OlwiY29tcG9uZW50V2lsbFVubW91bnRcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGVhY3RpdmF0ZVRyYXAoKX19LHtrZXk6XCJyZW5kZXJcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnByb3BzLmNoaWxkcmVuP3MuQ2hpbGRyZW4ub25seSh0aGlzLnByb3BzLmNoaWxkcmVuKTp2b2lkIDA7aWYodCl7aWYodC50eXBlJiZ0LnR5cGU9PT1zLkZyYWdtZW50KXRocm93IG5ldyBFcnJvcihcIkEgZm9jdXMtdHJhcCBjYW5ub3QgdXNlIGEgRnJhZ21lbnQgYXMgaXRzIGNoaWxkIGNvbnRhaW5lci4gVHJ5IHJlcGxhY2luZyBpdCB3aXRoIGEgPGRpdj4gZWxlbWVudC5cIik7cmV0dXJuIHMuY2xvbmVFbGVtZW50KHQse3JlZjpmdW5jdGlvbihuKXt2YXIgcj1lLnByb3BzLmNvbnRhaW5lckVsZW1lbnRzO3QmJihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LnJlZj90LnJlZihuKTp0LnJlZiYmKHQucmVmLmN1cnJlbnQ9bikpLGUuZm9jdXNUcmFwRWxlbWVudHM9cnx8W25dfX0pfXJldHVybiBudWxsfX1dKSYmZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbChyLmtleSkscil9fSh0LnByb3RvdHlwZSxuKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcInByb3RvdHlwZVwiLHt3cml0YWJsZTohMX0pLGZ9KHMuQ29tcG9uZW50KSxmPVwidW5kZWZpbmVkXCI9PXR5cGVvZiBFbGVtZW50P0Z1bmN0aW9uOkVsZW1lbnQ7cC5wcm9wVHlwZXM9e2FjdGl2ZTpjLmJvb2wscGF1c2VkOmMuYm9vbCxmb2N1c1RyYXBPcHRpb25zOmMuc2hhcGUoe2RvY3VtZW50OmMub2JqZWN0LG9uQWN0aXZhdGU6Yy5mdW5jLG9uUG9zdEFjdGl2YXRlOmMuZnVuYyxjaGVja0NhbkZvY3VzVHJhcDpjLmZ1bmMsb25EZWFjdGl2YXRlOmMuZnVuYyxvblBvc3REZWFjdGl2YXRlOmMuZnVuYyxjaGVja0NhblJldHVybkZvY3VzOmMuZnVuYyxpbml0aWFsRm9jdXM6Yy5vbmVPZlR5cGUoW2MuaW5zdGFuY2VPZihmKSxjLnN0cmluZyxjLmJvb2wsYy5mdW5jXSksZmFsbGJhY2tGb2N1czpjLm9uZU9mVHlwZShbYy5pbnN0YW5jZU9mKGYpLGMuc3RyaW5nLGMuZnVuY10pLGVzY2FwZURlYWN0aXZhdGVzOmMub25lT2ZUeXBlKFtjLmJvb2wsYy5mdW5jXSksY2xpY2tPdXRzaWRlRGVhY3RpdmF0ZXM6Yy5vbmVPZlR5cGUoW2MuYm9vbCxjLmZ1bmNdKSxyZXR1cm5Gb2N1c09uRGVhY3RpdmF0ZTpjLmJvb2wsc2V0UmV0dXJuRm9jdXM6Yy5vbmVPZlR5cGUoW2MuaW5zdGFuY2VPZihmKSxjLnN0cmluZyxjLmJvb2wsYy5mdW5jXSksYWxsb3dPdXRzaWRlQ2xpY2s6Yy5vbmVPZlR5cGUoW2MuYm9vbCxjLmZ1bmNdKSxwcmV2ZW50U2Nyb2xsOmMuYm9vbCx0YWJiYWJsZU9wdGlvbnM6Yy5zaGFwZSh7ZGlzcGxheUNoZWNrOmMub25lT2YoW1wiZnVsbFwiLFwibGVnYWN5LWZ1bGxcIixcIm5vbi16ZXJvLWFyZWFcIixcIm5vbmVcIl0pLGdldFNoYWRvd1Jvb3Q6Yy5vbmVPZlR5cGUoW2MuYm9vbCxjLmZ1bmNdKX0pLHRyYXBTdGFjazpjLmFycmF5LGlzS2V5Rm9yd2FyZDpjLmZ1bmMsaXNLZXlCYWNrd2FyZDpjLmZ1bmN9KSxjb250YWluZXJFbGVtZW50czpjLmFycmF5T2YoYy5pbnN0YW5jZU9mKGYpKSxjaGlsZHJlbjpjLm9uZU9mVHlwZShbYy5lbGVtZW50LGMuaW5zdGFuY2VPZihmKV0pfSxwLmRlZmF1bHRQcm9wcz17YWN0aXZlOiEwLHBhdXNlZDohMSxmb2N1c1RyYXBPcHRpb25zOnt9LF9jcmVhdGVGb2N1c1RyYXA6dX0sZS5leHBvcnRzPXB9LDUzMDM6KGUsdCxuKT0+e24ucih0KSxuLmQodCx7Y3JlYXRlRm9jdXNUcmFwOigpPT5nfSk7dmFyIHI9big4Mzg4KTtmdW5jdGlvbiBvKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBhKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP28oT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXtpKGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpvKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfWZ1bmN0aW9uIGkoZSx0LG4pe3JldHVybih0PWZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKGUsdCl7aWYoXCJvYmplY3RcIiE9dHlwZW9mIGV8fG51bGw9PT1lKXJldHVybiBlO3ZhciBuPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1uKXt2YXIgcj1uLmNhbGwoZSxcInN0cmluZ1wiKTtpZihcIm9iamVjdFwiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIil9cmV0dXJuIFN0cmluZyhlKX0oZSk7cmV0dXJuXCJzeW1ib2xcIj09dHlwZW9mIHQ/dDpTdHJpbmcodCl9KHQpKWluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfXZhciBsPWZ1bmN0aW9uKGUpe3JldHVyblwiVGFiXCI9PT1lLmtleXx8OT09PWUua2V5Q29kZX0scz1mdW5jdGlvbihlKXtyZXR1cm4gbChlKSYmIWUuc2hpZnRLZXl9LGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGwoZSkmJmUuc2hpZnRLZXl9LHU9ZnVuY3Rpb24oZSl7cmV0dXJuIHNldFRpbWVvdXQoZSwwKX0sZD1mdW5jdGlvbihlLHQpe3ZhciBuPS0xO3JldHVybiBlLmV2ZXJ5KChmdW5jdGlvbihlLHIpe3JldHVybiF0KGUpfHwobj1yLCExKX0pKSxufSxwPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KHQ+MT90LTE6MCkscj0xO3I8dDtyKyspbltyLTFdPWFyZ3VtZW50c1tyXTtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2UuYXBwbHkodm9pZCAwLG4pOmV9LGY9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudGFyZ2V0LnNoYWRvd1Jvb3QmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuY29tcG9zZWRQYXRoP2UuY29tcG9zZWRQYXRoKClbMF06ZS50YXJnZXR9LGg9W10sZz1mdW5jdGlvbihlLHQpe3ZhciBuLG89KG51bGw9PXQ/dm9pZCAwOnQuZG9jdW1lbnQpfHxkb2N1bWVudCxpPShudWxsPT10P3ZvaWQgMDp0LnRyYXBTdGFjayl8fGgsZz1hKHtyZXR1cm5Gb2N1c09uRGVhY3RpdmF0ZTohMCxlc2NhcGVEZWFjdGl2YXRlczohMCxkZWxheUluaXRpYWxGb2N1czohMCxpc0tleUZvcndhcmQ6cyxpc0tleUJhY2t3YXJkOmN9LHQpLHY9e2NvbnRhaW5lcnM6W10sY29udGFpbmVyR3JvdXBzOltdLHRhYmJhYmxlR3JvdXBzOltdLG5vZGVGb2N1c2VkQmVmb3JlQWN0aXZhdGlvbjpudWxsLG1vc3RSZWNlbnRseUZvY3VzZWROb2RlOm51bGwsYWN0aXZlOiExLHBhdXNlZDohMSxkZWxheUluaXRpYWxGb2N1c1RpbWVyOnZvaWQgMH0sQz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUmJnZvaWQgMCE9PWVbdF0/ZVt0XTpnW258fHRdfSxtPWZ1bmN0aW9uKGUpe3JldHVybiB2LmNvbnRhaW5lckdyb3Vwcy5maW5kSW5kZXgoKGZ1bmN0aW9uKHQpe3ZhciBuPXQuY29udGFpbmVyLHI9dC50YWJiYWJsZU5vZGVzO3JldHVybiBuLmNvbnRhaW5zKGUpfHxyLmZpbmQoKGZ1bmN0aW9uKHQpe3JldHVybiB0PT09ZX0pKX0pKX0sdz1mdW5jdGlvbihlKXt2YXIgdD1nW2VdO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpe2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KG4+MT9uLTE6MCksYT0xO2E8bjthKyspclthLTFdPWFyZ3VtZW50c1thXTt0PXQuYXBwbHkodm9pZCAwLHIpfWlmKCEwPT09dCYmKHQ9dm9pZCAwKSwhdCl7aWYodm9pZCAwPT09dHx8ITE9PT10KXJldHVybiB0O3Rocm93IG5ldyBFcnJvcihcImBcIi5jb25jYXQoZSxcImAgd2FzIHNwZWNpZmllZCBidXQgd2FzIG5vdCBhIG5vZGUsIG9yIGRpZCBub3QgcmV0dXJuIGEgbm9kZVwiKSl9dmFyIGk9dDtpZihcInN0cmluZ1wiPT10eXBlb2YgdCYmIShpPW8ucXVlcnlTZWxlY3Rvcih0KSkpdGhyb3cgbmV3IEVycm9yKFwiYFwiLmNvbmNhdChlLFwiYCBhcyBzZWxlY3RvciByZWZlcnMgdG8gbm8ga25vd24gbm9kZVwiKSk7cmV0dXJuIGl9LGI9ZnVuY3Rpb24oKXt2YXIgZT13KFwiaW5pdGlhbEZvY3VzXCIpO2lmKCExPT09ZSlyZXR1cm4hMTtpZih2b2lkIDA9PT1lKWlmKG0oby5hY3RpdmVFbGVtZW50KT49MCllPW8uYWN0aXZlRWxlbWVudDtlbHNle3ZhciB0PXYudGFiYmFibGVHcm91cHNbMF07ZT10JiZ0LmZpcnN0VGFiYmFibGVOb2RlfHx3KFwiZmFsbGJhY2tGb2N1c1wiKX1pZighZSl0aHJvdyBuZXcgRXJyb3IoXCJZb3VyIGZvY3VzLXRyYXAgbmVlZHMgdG8gaGF2ZSBhdCBsZWFzdCBvbmUgZm9jdXNhYmxlIGVsZW1lbnRcIik7cmV0dXJuIGV9LHk9ZnVuY3Rpb24oKXtpZih2LmNvbnRhaW5lckdyb3Vwcz12LmNvbnRhaW5lcnMubWFwKChmdW5jdGlvbihlKXt2YXIgdD0oMCxyLnRhYmJhYmxlKShlLGcudGFiYmFibGVPcHRpb25zKSxuPSgwLHIuZm9jdXNhYmxlKShlLGcudGFiYmFibGVPcHRpb25zKTtyZXR1cm57Y29udGFpbmVyOmUsdGFiYmFibGVOb2Rlczp0LGZvY3VzYWJsZU5vZGVzOm4sZmlyc3RUYWJiYWJsZU5vZGU6dC5sZW5ndGg+MD90WzBdOm51bGwsbGFzdFRhYmJhYmxlTm9kZTp0Lmxlbmd0aD4wP3RbdC5sZW5ndGgtMV06bnVsbCxuZXh0VGFiYmFibGVOb2RlOmZ1bmN0aW9uKGUpe3ZhciB0PSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sbz1uLmZpbmRJbmRleCgoZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1lfSkpO2lmKCEobzwwKSlyZXR1cm4gdD9uLnNsaWNlKG8rMSkuZmluZCgoZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5pc1RhYmJhYmxlKShlLGcudGFiYmFibGVPcHRpb25zKX0pKTpuLnNsaWNlKDAsbykucmV2ZXJzZSgpLmZpbmQoKGZ1bmN0aW9uKGUpe3JldHVybigwLHIuaXNUYWJiYWJsZSkoZSxnLnRhYmJhYmxlT3B0aW9ucyl9KSl9fX0pKSx2LnRhYmJhYmxlR3JvdXBzPXYuY29udGFpbmVyR3JvdXBzLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUudGFiYmFibGVOb2Rlcy5sZW5ndGg+MH0pKSx2LnRhYmJhYmxlR3JvdXBzLmxlbmd0aDw9MCYmIXcoXCJmYWxsYmFja0ZvY3VzXCIpKXRocm93IG5ldyBFcnJvcihcIllvdXIgZm9jdXMtdHJhcCBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGNvbnRhaW5lciB3aXRoIGF0IGxlYXN0IG9uZSB0YWJiYWJsZSBub2RlIGluIGl0IGF0IGFsbCB0aW1lc1wiKX0seD1mdW5jdGlvbiBlKHQpeyExIT09dCYmdCE9PW8uYWN0aXZlRWxlbWVudCYmKHQmJnQuZm9jdXM/KHQuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ISFnLnByZXZlbnRTY3JvbGx9KSx2Lm1vc3RSZWNlbnRseUZvY3VzZWROb2RlPXQsZnVuY3Rpb24oZSl7cmV0dXJuIGUudGFnTmFtZSYmXCJpbnB1dFwiPT09ZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuc2VsZWN0fSh0KSYmdC5zZWxlY3QoKSk6ZShiKCkpKX0saz1mdW5jdGlvbihlKXt2YXIgdD13KFwic2V0UmV0dXJuRm9jdXNcIixlKTtyZXR1cm4gdHx8ITEhPT10JiZlfSxTPWZ1bmN0aW9uKGUpe3ZhciB0PWYoZSk7bSh0KT49MHx8KHAoZy5jbGlja091dHNpZGVEZWFjdGl2YXRlcyxlKT9uLmRlYWN0aXZhdGUoe3JldHVybkZvY3VzOmcucmV0dXJuRm9jdXNPbkRlYWN0aXZhdGV9KTpwKGcuYWxsb3dPdXRzaWRlQ2xpY2ssZSl8fGUucHJldmVudERlZmF1bHQoKSl9LE89ZnVuY3Rpb24oZSl7dmFyIHQ9ZihlKSxuPW0odCk+PTA7bnx8dCBpbnN0YW5jZW9mIERvY3VtZW50P24mJih2Lm1vc3RSZWNlbnRseUZvY3VzZWROb2RlPXQpOihlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHgodi5tb3N0UmVjZW50bHlGb2N1c2VkTm9kZXx8YigpKSl9LE09ZnVuY3Rpb24oZSl7aWYoKFwiRXNjYXBlXCI9PT0odD1lKS5rZXl8fFwiRXNjXCI9PT10LmtleXx8Mjc9PT10LmtleUNvZGUpJiYhMSE9PXAoZy5lc2NhcGVEZWFjdGl2YXRlcyxlKSlyZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpLHZvaWQgbi5kZWFjdGl2YXRlKCk7dmFyIHQ7KGcuaXNLZXlGb3J3YXJkKGUpfHxnLmlzS2V5QmFja3dhcmQoZSkpJiZmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLG49ZihlKTt5KCk7dmFyIG89bnVsbDtpZih2LnRhYmJhYmxlR3JvdXBzLmxlbmd0aD4wKXt2YXIgYT1tKG4pLGk9YT49MD92LmNvbnRhaW5lckdyb3Vwc1thXTp2b2lkIDA7aWYoYTwwKW89dD92LnRhYmJhYmxlR3JvdXBzW3YudGFiYmFibGVHcm91cHMubGVuZ3RoLTFdLmxhc3RUYWJiYWJsZU5vZGU6di50YWJiYWJsZUdyb3Vwc1swXS5maXJzdFRhYmJhYmxlTm9kZTtlbHNlIGlmKHQpe3ZhciBzPWQodi50YWJiYWJsZUdyb3VwcywoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5maXJzdFRhYmJhYmxlTm9kZTtyZXR1cm4gbj09PXR9KSk7aWYoczwwJiYoaS5jb250YWluZXI9PT1ufHwoMCxyLmlzRm9jdXNhYmxlKShuLGcudGFiYmFibGVPcHRpb25zKSYmISgwLHIuaXNUYWJiYWJsZSkobixnLnRhYmJhYmxlT3B0aW9ucykmJiFpLm5leHRUYWJiYWJsZU5vZGUobiwhMSkpJiYocz1hKSxzPj0wKXt2YXIgYz0wPT09cz92LnRhYmJhYmxlR3JvdXBzLmxlbmd0aC0xOnMtMTtvPXYudGFiYmFibGVHcm91cHNbY10ubGFzdFRhYmJhYmxlTm9kZX1lbHNlIGwoZSl8fChvPWkubmV4dFRhYmJhYmxlTm9kZShuLCExKSl9ZWxzZXt2YXIgdT1kKHYudGFiYmFibGVHcm91cHMsKGZ1bmN0aW9uKGUpe3ZhciB0PWUubGFzdFRhYmJhYmxlTm9kZTtyZXR1cm4gbj09PXR9KSk7aWYodTwwJiYoaS5jb250YWluZXI9PT1ufHwoMCxyLmlzRm9jdXNhYmxlKShuLGcudGFiYmFibGVPcHRpb25zKSYmISgwLHIuaXNUYWJiYWJsZSkobixnLnRhYmJhYmxlT3B0aW9ucykmJiFpLm5leHRUYWJiYWJsZU5vZGUobikpJiYodT1hKSx1Pj0wKXt2YXIgcD11PT09di50YWJiYWJsZUdyb3Vwcy5sZW5ndGgtMT8wOnUrMTtvPXYudGFiYmFibGVHcm91cHNbcF0uZmlyc3RUYWJiYWJsZU5vZGV9ZWxzZSBsKGUpfHwobz1pLm5leHRUYWJiYWJsZU5vZGUobikpfX1lbHNlIG89dyhcImZhbGxiYWNrRm9jdXNcIik7byYmKGwoZSkmJmUucHJldmVudERlZmF1bHQoKSx4KG8pKX0oZSxnLmlzS2V5QmFja3dhcmQoZSkpfSxMPWZ1bmN0aW9uKGUpe3ZhciB0PWYoZSk7bSh0KT49MHx8cChnLmNsaWNrT3V0c2lkZURlYWN0aXZhdGVzLGUpfHxwKGcuYWxsb3dPdXRzaWRlQ2xpY2ssZSl8fChlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSl9LF89ZnVuY3Rpb24oKXtpZih2LmFjdGl2ZSlyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZihlLmxlbmd0aD4wKXt2YXIgbj1lW2UubGVuZ3RoLTFdO24hPT10JiZuLnBhdXNlKCl9dmFyIHI9ZS5pbmRleE9mKHQpOy0xPT09cnx8ZS5zcGxpY2UociwxKSxlLnB1c2godCl9KGksbiksdi5kZWxheUluaXRpYWxGb2N1c1RpbWVyPWcuZGVsYXlJbml0aWFsRm9jdXM/dSgoZnVuY3Rpb24oKXt4KGIoKSl9KSk6eChiKCkpLG8uYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzaW5cIixPLCEwKSxvLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIixTLHtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9KSxvLmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsUyx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSksby5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIixMLHtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9KSxvLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsTSx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSksbn0sUD1mdW5jdGlvbigpe2lmKHYuYWN0aXZlKXJldHVybiBvLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c2luXCIsTywhMCksby5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsUywhMCksby5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLFMsITApLG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsTCwhMCksby5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLE0sITApLG59O3JldHVybihuPXtnZXQgYWN0aXZlKCl7cmV0dXJuIHYuYWN0aXZlfSxnZXQgcGF1c2VkKCl7cmV0dXJuIHYucGF1c2VkfSxhY3RpdmF0ZTpmdW5jdGlvbihlKXtpZih2LmFjdGl2ZSlyZXR1cm4gdGhpczt2YXIgdD1DKGUsXCJvbkFjdGl2YXRlXCIpLG49QyhlLFwib25Qb3N0QWN0aXZhdGVcIikscj1DKGUsXCJjaGVja0NhbkZvY3VzVHJhcFwiKTtyfHx5KCksdi5hY3RpdmU9ITAsdi5wYXVzZWQ9ITEsdi5ub2RlRm9jdXNlZEJlZm9yZUFjdGl2YXRpb249by5hY3RpdmVFbGVtZW50LHQmJnQoKTt2YXIgYT1mdW5jdGlvbigpe3ImJnkoKSxfKCksbiYmbigpfTtyZXR1cm4gcj8ocih2LmNvbnRhaW5lcnMuY29uY2F0KCkpLnRoZW4oYSxhKSx0aGlzKTooYSgpLHRoaXMpfSxkZWFjdGl2YXRlOmZ1bmN0aW9uKGUpe2lmKCF2LmFjdGl2ZSlyZXR1cm4gdGhpczt2YXIgdD1hKHtvbkRlYWN0aXZhdGU6Zy5vbkRlYWN0aXZhdGUsb25Qb3N0RGVhY3RpdmF0ZTpnLm9uUG9zdERlYWN0aXZhdGUsY2hlY2tDYW5SZXR1cm5Gb2N1czpnLmNoZWNrQ2FuUmV0dXJuRm9jdXN9LGUpO2NsZWFyVGltZW91dCh2LmRlbGF5SW5pdGlhbEZvY3VzVGltZXIpLHYuZGVsYXlJbml0aWFsRm9jdXNUaW1lcj12b2lkIDAsUCgpLHYuYWN0aXZlPSExLHYucGF1c2VkPSExLGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5pbmRleE9mKHQpOy0xIT09biYmZS5zcGxpY2UobiwxKSxlLmxlbmd0aD4wJiZlW2UubGVuZ3RoLTFdLnVucGF1c2UoKX0oaSxuKTt2YXIgcj1DKHQsXCJvbkRlYWN0aXZhdGVcIiksbz1DKHQsXCJvblBvc3REZWFjdGl2YXRlXCIpLGw9Qyh0LFwiY2hlY2tDYW5SZXR1cm5Gb2N1c1wiKSxzPUModCxcInJldHVybkZvY3VzXCIsXCJyZXR1cm5Gb2N1c09uRGVhY3RpdmF0ZVwiKTtyJiZyKCk7dmFyIGM9ZnVuY3Rpb24oKXt1KChmdW5jdGlvbigpe3MmJngoayh2Lm5vZGVGb2N1c2VkQmVmb3JlQWN0aXZhdGlvbikpLG8mJm8oKX0pKX07cmV0dXJuIHMmJmw/KGwoayh2Lm5vZGVGb2N1c2VkQmVmb3JlQWN0aXZhdGlvbikpLnRoZW4oYyxjKSx0aGlzKTooYygpLHRoaXMpfSxwYXVzZTpmdW5jdGlvbigpe3JldHVybiB2LnBhdXNlZHx8IXYuYWN0aXZlfHwodi5wYXVzZWQ9ITAsUCgpKSx0aGlzfSx1bnBhdXNlOmZ1bmN0aW9uKCl7cmV0dXJuIHYucGF1c2VkJiZ2LmFjdGl2ZT8odi5wYXVzZWQ9ITEseSgpLF8oKSx0aGlzKTp0aGlzfSx1cGRhdGVDb250YWluZXJFbGVtZW50czpmdW5jdGlvbihlKXt2YXIgdD1bXS5jb25jYXQoZSkuZmlsdGVyKEJvb2xlYW4pO3JldHVybiB2LmNvbnRhaW5lcnM9dC5tYXAoKGZ1bmN0aW9uKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlP28ucXVlcnlTZWxlY3RvcihlKTplfSkpLHYuYWN0aXZlJiZ5KCksdGhpc319KS51cGRhdGVDb250YWluZXJFbGVtZW50cyhlKSxufX0sOTE0MTooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIHI9big2NTUpLG89big2Njg5KSxhPW4oNDM5NCksaT1uKDM1NzMpLGw9big5Mjk0KSxzPW4oNDgzOSk7ZnVuY3Rpb24gYyhlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZGVmYXVsdFwiaW4gZT9lOntkZWZhdWx0OmV9fXZhciB1PWZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBlJiZPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihuKXtpZihcImRlZmF1bHRcIiE9PW4pe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxuKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHIuZ2V0P3I6e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGVbbl19fSl9fSkpLHQuZGVmYXVsdD1lLE9iamVjdC5mcmVlemUodCl9KG8pLGQ9YyhvKSxwPWMocyksZj1mdW5jdGlvbihlKXtyZXR1cm57aXNFbmFibGVkOmZ1bmN0aW9uKHQpe3JldHVybiBlLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiEhdFtlXX0pKX19fSxoPXttZWFzdXJlTGF5b3V0OmYoW1wibGF5b3V0XCIsXCJsYXlvdXRJZFwiLFwiZHJhZ1wiLFwiX2xheW91dFJlc2V0VHJhbnNmb3JtXCJdKSxhbmltYXRpb246ZihbXCJhbmltYXRlXCIsXCJleGl0XCIsXCJ2YXJpYW50c1wiLFwid2hpbGVIb3ZlclwiLFwid2hpbGVUYXBcIixcIndoaWxlRm9jdXNcIixcIndoaWxlRHJhZ1wiXSksZXhpdDpmKFtcImV4aXRcIl0pLGRyYWc6ZihbXCJkcmFnXCIsXCJkcmFnQ29udHJvbHNcIl0pLGZvY3VzOmYoW1wid2hpbGVGb2N1c1wiXSksaG92ZXI6ZihbXCJ3aGlsZUhvdmVyXCIsXCJvbkhvdmVyU3RhcnRcIixcIm9uSG92ZXJFbmRcIl0pLHRhcDpmKFtcIndoaWxlVGFwXCIsXCJvblRhcFwiLFwib25UYXBTdGFydFwiLFwib25UYXBDYW5jZWxcIl0pLHBhbjpmKFtcIm9uUGFuXCIsXCJvblBhblN0YXJ0XCIsXCJvblBhblNlc3Npb25TdGFydFwiLFwib25QYW5FbmRcIl0pLGxheW91dEFuaW1hdGlvbjpmKFtcImxheW91dFwiLFwibGF5b3V0SWRcIl0pfTtmdW5jdGlvbiBnKGUpe2Zvcih2YXIgdCBpbiBlKXt2YXIgbj1lW3RdO251bGwhPT1uJiYoaFt0XS5Db21wb25lbnQ9bil9fXZhciB2PW8uY3JlYXRlQ29udGV4dCh7c3RyaWN0OiExfSksQz1PYmplY3Qua2V5cyhoKSxtPUMubGVuZ3RoLHc9by5jcmVhdGVDb250ZXh0KHt0cmFuc2Zvcm1QYWdlUG9pbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGlzU3RhdGljOiExfSksYj1vLmNyZWF0ZUNvbnRleHQoe30pO2Z1bmN0aW9uIHkoKXtyZXR1cm4gby51c2VDb250ZXh0KGIpLnZpc3VhbEVsZW1lbnR9dmFyIHg9by5jcmVhdGVDb250ZXh0KG51bGwpO2Z1bmN0aW9uIGsoZSl7dmFyIHQ9by51c2VSZWYobnVsbCk7cmV0dXJuIG51bGw9PT10LmN1cnJlbnQmJih0LmN1cnJlbnQ9ZSgpKSx0LmN1cnJlbnR9ZnVuY3Rpb24gUygpe3ZhciBlPW8udXNlQ29udGV4dCh4KTtpZihudWxsPT09ZSlyZXR1cm5bITAsbnVsbF07dmFyIHQ9ZS5pc1ByZXNlbnQsbj1lLm9uRXhpdENvbXBsZXRlLHI9ZS5yZWdpc3RlcixhPV8oKTtyZXR1cm4gby51c2VFZmZlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHIoYSl9KSxbXSksIXQmJm4/WyExLGZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PW4/dm9pZCAwOm4oYSl9XTpbITBdfWZ1bmN0aW9uIE8oZSl7cmV0dXJuIG51bGw9PT1lfHxlLmlzUHJlc2VudH12YXIgTT0wLEw9ZnVuY3Rpb24oKXtyZXR1cm4gTSsrfSxfPWZ1bmN0aW9uKCl7cmV0dXJuIGsoTCl9LFA9by5jcmVhdGVDb250ZXh0KG51bGwpLEU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyxqPUU/by51c2VMYXlvdXRFZmZlY3Q6by51c2VFZmZlY3Q7ZnVuY3Rpb24gUihlKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsXCJjdXJyZW50XCIpfWZ1bmN0aW9uIEkoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSl9ZnVuY3Rpb24gVihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZXx8SShlKX1mdW5jdGlvbiBIKGUsdCxuLHIsbyl7dmFyIGE7cmV0dXJuIHZvaWQgMD09PXImJihyPXt9KSx2b2lkIDA9PT1vJiYobz17fSksXCJzdHJpbmdcIj09dHlwZW9mIHQmJih0PW51bGw9PT0oYT1lLnZhcmlhbnRzKXx8dm9pZCAwPT09YT92b2lkIDA6YVt0XSksXCJmdW5jdGlvblwiPT10eXBlb2YgdD90KG51bGwhPW4/bjplLmN1c3RvbSxyLG8pOnR9ZnVuY3Rpb24gQShlLHQsbil7dmFyIHI9ZS5nZXRQcm9wcygpO3JldHVybiBIKHIsdCxudWxsIT1uP246ci5jdXN0b20sZnVuY3Rpb24oZSl7dmFyIHQ9e307cmV0dXJuIGUuZm9yRWFjaFZhbHVlKChmdW5jdGlvbihlLG4pe3JldHVybiB0W25dPWUuZ2V0KCl9KSksdH0oZSksZnVuY3Rpb24oZSl7dmFyIHQ9e307cmV0dXJuIGUuZm9yRWFjaFZhbHVlKChmdW5jdGlvbihlLG4pe3JldHVybiB0W25dPWUuZ2V0VmVsb2NpdHkoKX0pKSx0fShlKSl9ZnVuY3Rpb24gVChlKXt2YXIgdDtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZihudWxsPT09KHQ9ZS5hbmltYXRlKXx8dm9pZCAwPT09dD92b2lkIDA6dC5zdGFydCl8fFYoZS5pbml0aWFsKXx8VihlLmFuaW1hdGUpfHxWKGUud2hpbGVIb3Zlcil8fFYoZS53aGlsZURyYWcpfHxWKGUud2hpbGVUYXApfHxWKGUud2hpbGVGb2N1cyl8fFYoZS5leGl0KX1mdW5jdGlvbiBEKGUpe3JldHVybiBCb29sZWFuKFQoZSl8fGUudmFyaWFudHMpfWZ1bmN0aW9uIEIoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZS5qb2luKFwiIFwiKTplfWZ1bmN0aW9uIFooZSl7dmFyIHQ9ZS5wcmVsb2FkZWRGZWF0dXJlcyxuPWUuY3JlYXRlVmlzdWFsRWxlbWVudCxhPWUudXNlUmVuZGVyLGk9ZS51c2VWaXN1YWxTdGF0ZSxsPWUuQ29tcG9uZW50O3JldHVybiB0JiZnKHQpLG8uZm9yd2FyZFJlZigoZnVuY3Rpb24oZSx0KXt2YXIgcz1vLnVzZUNvbnRleHQodykuaXNTdGF0aWMsYz1udWxsLGQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1mdW5jdGlvbihlLHQpe2lmKFQoZSkpe3ZhciBuPWUuaW5pdGlhbCxyPWUuYW5pbWF0ZTtyZXR1cm57aW5pdGlhbDohMT09PW58fFYobik/bjp2b2lkIDAsYW5pbWF0ZTpWKHIpP3I6dm9pZCAwfX1yZXR1cm4hMSE9PWUuaW5oZXJpdD90Ont9fShlLG8udXNlQ29udGV4dChiKSkscj1uLmluaXRpYWwsYT1uLmFuaW1hdGU7cmV0dXJuIG8udXNlTWVtbygoZnVuY3Rpb24oKXtyZXR1cm57aW5pdGlhbDpyLGFuaW1hdGU6YX19KSx0P1tCKHIpLEIoYSldOltdKX0oZSxzKSxwPWkoZSxzKTtyZXR1cm4hcyYmRSYmKGQudmlzdWFsRWxlbWVudD1mdW5jdGlvbihlLHQsbixhKXt2YXIgaT1vLnVzZUNvbnRleHQodyksbD1vLnVzZUNvbnRleHQodikscz15KCksYz1vLnVzZUNvbnRleHQoeCksdT1mdW5jdGlvbihlKXt2YXIgdD1lLmxheW91dElkLG49by51c2VDb250ZXh0KFApO3JldHVybiBuJiZ2b2lkIDAhPT10P24rXCItXCIrdDp0fShuKSxkPW8udXNlUmVmKHZvaWQgMCk7YXx8KGE9bC5yZW5kZXJlciksIWQuY3VycmVudCYmYSYmKGQuY3VycmVudD1hKGUse3Zpc3VhbFN0YXRlOnQscGFyZW50OnMscHJvcHM6ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LG4pLHtsYXlvdXRJZDp1fSkscHJlc2VuY2VJZDpudWxsPT1jP3ZvaWQgMDpjLmlkLGJsb2NrSW5pdGlhbEFuaW1hdGlvbjohMT09PShudWxsPT1jP3ZvaWQgMDpjLmluaXRpYWwpfSkpO3ZhciBwPWQuY3VycmVudDtyZXR1cm4gaigoZnVuY3Rpb24oKXtwJiYocC5zZXRQcm9wcyhyLl9fYXNzaWduKHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxpKSxuKSx7bGF5b3V0SWQ6dX0pKSxwLmlzUHJlc2VudD1PKGMpLHAuaXNQcmVzZW5jZVJvb3Q9IXN8fHMucHJlc2VuY2VJZCE9PShudWxsPT1jP3ZvaWQgMDpjLmlkKSxwLnN5bmNSZW5kZXIoKSl9KSksby51c2VFZmZlY3QoKGZ1bmN0aW9uKCl7dmFyIGU7cCYmKG51bGw9PT0oZT1wLmFuaW1hdGlvblN0YXRlKXx8dm9pZCAwPT09ZXx8ZS5hbmltYXRlQ2hhbmdlcygpKX0pKSxqKChmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBudWxsPT1wP3ZvaWQgMDpwLm5vdGlmeVVubW91bnQoKX19KSxbXSkscH0obCxwLGUsbiksYz1mdW5jdGlvbihlLHQsbil7dmFyIGE9W107aWYoby51c2VDb250ZXh0KHYpLCF0KXJldHVybiBudWxsO2Zvcih2YXIgaT0wO2k8bTtpKyspe3ZhciBsPUNbaV0scz1oW2xdLGM9cy5pc0VuYWJsZWQsZD1zLkNvbXBvbmVudDtjKGUpJiZkJiZhLnB1c2godS5jcmVhdGVFbGVtZW50KGQsci5fX2Fzc2lnbih7a2V5Omx9LGUse3Zpc3VhbEVsZW1lbnQ6dH0pKSl9cmV0dXJuIGF9KGUsZC52aXN1YWxFbGVtZW50KSksdS5jcmVhdGVFbGVtZW50KHUuRnJhZ21lbnQsbnVsbCx1LmNyZWF0ZUVsZW1lbnQoYi5Qcm92aWRlcix7dmFsdWU6ZH0sYShsLGUsZnVuY3Rpb24oZSx0LG4pe3JldHVybiBvLnVzZUNhbGxiYWNrKChmdW5jdGlvbihyKXt2YXIgbztyJiYobnVsbD09PShvPWUubW91bnQpfHx2b2lkIDA9PT1vfHxvLmNhbGwoZSxyKSksdCYmKHI/dC5tb3VudChyKTp0LnVubW91bnQoKSksbiYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4/bihyKTpSKG4pJiYobi5jdXJyZW50PXIpKX0pLFt0XSl9KHAsZC52aXN1YWxFbGVtZW50LHQpLHAscykpLGMpfSkpfWZ1bmN0aW9uICQoZSl7ZnVuY3Rpb24gdCh0LG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj17fSksWihlKHQsbikpfXZhciBuPW5ldyBNYXA7cmV0dXJuIG5ldyBQcm94eSh0LHtnZXQ6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gbi5oYXMocil8fG4uc2V0KHIsdChyKSksbi5nZXQocil9fSl9dmFyIE49W1wiYW5pbWF0ZVwiLFwiY2lyY2xlXCIsXCJkZWZzXCIsXCJkZXNjXCIsXCJlbGxpcHNlXCIsXCJnXCIsXCJpbWFnZVwiLFwibGluZVwiLFwiZmlsdGVyXCIsXCJtYXJrZXJcIixcIm1hc2tcIixcIm1ldGFkYXRhXCIsXCJwYXRoXCIsXCJwYXR0ZXJuXCIsXCJwb2x5Z29uXCIsXCJwb2x5bGluZVwiLFwicmVjdFwiLFwic3RvcFwiLFwic3ZnXCIsXCJzd2l0Y2hcIixcInN5bWJvbFwiLFwidGV4dFwiLFwidHNwYW5cIixcInVzZVwiLFwidmlld1wiXTtmdW5jdGlvbiBGKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlJiYhZS5pbmNsdWRlcyhcIi1cIikmJiEhKE4uaW5kZXhPZihlKT4tMXx8L1tBLVpdLy50ZXN0KGUpKX12YXIgVz17fTtmdW5jdGlvbiBVKGUpe2Zvcih2YXIgdCBpbiBlKVdbdF09ZVt0XX12YXIgej1bXCJcIixcIlhcIixcIllcIixcIlpcIl0sRz1bXCJ0cmFuc2Zvcm1QZXJzcGVjdGl2ZVwiLFwieFwiLFwieVwiLFwielwiXTtmdW5jdGlvbiBLKGUsdCl7cmV0dXJuIEcuaW5kZXhPZihlKS1HLmluZGV4T2YodCl9W1widHJhbnNsYXRlXCIsXCJzY2FsZVwiLFwicm90YXRlXCIsXCJza2V3XCJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiB6LmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiBHLnB1c2goZSt0KX0pKX0pKTt2YXIgcT1uZXcgU2V0KEcpO2Z1bmN0aW9uIFkoZSl7cmV0dXJuIHEuaGFzKGUpfXZhciBKPW5ldyBTZXQoW1wib3JpZ2luWFwiLFwib3JpZ2luWVwiLFwib3JpZ2luWlwiXSk7ZnVuY3Rpb24gWChlKXtyZXR1cm4gSi5oYXMoZSl9ZnVuY3Rpb24gUShlLHQpe3ZhciBuPXQubGF5b3V0LHI9dC5sYXlvdXRJZDtyZXR1cm4gWShlKXx8WChlKXx8KG58fHZvaWQgMCE9PXIpJiYoISFXW2VdfHxcIm9wYWNpdHlcIj09PWUpfXZhciBlZT1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9PWUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZlLmdldFZlbG9jaXR5fSx0ZT17eDpcInRyYW5zbGF0ZVhcIix5OlwidHJhbnNsYXRlWVwiLHo6XCJ0cmFuc2xhdGVaXCIsdHJhbnNmb3JtUGVyc3BlY3RpdmU6XCJwZXJzcGVjdGl2ZVwifTtmdW5jdGlvbiBuZShlKXtyZXR1cm4gZS5zdGFydHNXaXRoKFwiLS1cIil9dmFyIHJlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQmJlwibnVtYmVyXCI9PXR5cGVvZiBlP3QudHJhbnNmb3JtKGUpOmV9LG9lPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxpLm51bWJlcikse3RyYW5zZm9ybTpNYXRoLnJvdW5kfSksYWU9e2JvcmRlcldpZHRoOmkucHgsYm9yZGVyVG9wV2lkdGg6aS5weCxib3JkZXJSaWdodFdpZHRoOmkucHgsYm9yZGVyQm90dG9tV2lkdGg6aS5weCxib3JkZXJMZWZ0V2lkdGg6aS5weCxib3JkZXJSYWRpdXM6aS5weCxyYWRpdXM6aS5weCxib3JkZXJUb3BMZWZ0UmFkaXVzOmkucHgsYm9yZGVyVG9wUmlnaHRSYWRpdXM6aS5weCxib3JkZXJCb3R0b21SaWdodFJhZGl1czppLnB4LGJvcmRlckJvdHRvbUxlZnRSYWRpdXM6aS5weCx3aWR0aDppLnB4LG1heFdpZHRoOmkucHgsaGVpZ2h0OmkucHgsbWF4SGVpZ2h0OmkucHgsc2l6ZTppLnB4LHRvcDppLnB4LHJpZ2h0OmkucHgsYm90dG9tOmkucHgsbGVmdDppLnB4LHBhZGRpbmc6aS5weCxwYWRkaW5nVG9wOmkucHgscGFkZGluZ1JpZ2h0OmkucHgscGFkZGluZ0JvdHRvbTppLnB4LHBhZGRpbmdMZWZ0OmkucHgsbWFyZ2luOmkucHgsbWFyZ2luVG9wOmkucHgsbWFyZ2luUmlnaHQ6aS5weCxtYXJnaW5Cb3R0b206aS5weCxtYXJnaW5MZWZ0OmkucHgscm90YXRlOmkuZGVncmVlcyxyb3RhdGVYOmkuZGVncmVlcyxyb3RhdGVZOmkuZGVncmVlcyxyb3RhdGVaOmkuZGVncmVlcyxzY2FsZTppLnNjYWxlLHNjYWxlWDppLnNjYWxlLHNjYWxlWTppLnNjYWxlLHNjYWxlWjppLnNjYWxlLHNrZXc6aS5kZWdyZWVzLHNrZXdYOmkuZGVncmVlcyxza2V3WTppLmRlZ3JlZXMsZGlzdGFuY2U6aS5weCx0cmFuc2xhdGVYOmkucHgsdHJhbnNsYXRlWTppLnB4LHRyYW5zbGF0ZVo6aS5weCx4OmkucHgseTppLnB4LHo6aS5weCxwZXJzcGVjdGl2ZTppLnB4LHRyYW5zZm9ybVBlcnNwZWN0aXZlOmkucHgsb3BhY2l0eTppLmFscGhhLG9yaWdpblg6aS5wcm9ncmVzc1BlcmNlbnRhZ2Usb3JpZ2luWTppLnByb2dyZXNzUGVyY2VudGFnZSxvcmlnaW5aOmkucHgsekluZGV4Om9lLGZpbGxPcGFjaXR5OmkuYWxwaGEsc3Ryb2tlT3BhY2l0eTppLmFscGhhLG51bU9jdGF2ZXM6b2V9O2Z1bmN0aW9uIGllKGUsdCxuLHIsbyxhLGksbCl7dmFyIHMsYz1lLnN0eWxlLHU9ZS52YXJzLGQ9ZS50cmFuc2Zvcm0scD1lLnRyYW5zZm9ybUtleXMsZj1lLnRyYW5zZm9ybU9yaWdpbjtwLmxlbmd0aD0wO3ZhciBoPSExLGc9ITEsdj0hMDtmb3IodmFyIEMgaW4gdCl7dmFyIG09dFtDXTtpZihuZShDKSl1W0NdPW07ZWxzZXt2YXIgdz1hZVtDXSxiPXJlKG0sdyk7aWYoWShDKSl7aWYoaD0hMCxkW0NdPWIscC5wdXNoKEMpLCF2KWNvbnRpbnVlO20hPT0obnVsbCE9PShzPXcuZGVmYXVsdCkmJnZvaWQgMCE9PXM/czowKSYmKHY9ITEpfWVsc2UgaWYoWChDKSlmW0NdPWIsZz0hMDtlbHNlIGlmKChudWxsPT1uP3ZvaWQgMDpuLmlzSHlkcmF0ZWQpJiYobnVsbD09cj92b2lkIDA6ci5pc0h5ZHJhdGVkKSYmV1tDXSl7dmFyIHk9V1tDXS5wcm9jZXNzKG0scixuKSx4PVdbQ10uYXBwbHlUbztpZih4KWZvcih2YXIgaz14Lmxlbmd0aCxTPTA7UzxrO1MrKyljW3hbU11dPXk7ZWxzZSBjW0NdPXl9ZWxzZSBjW0NdPWJ9fXImJm4mJmkmJmw/KGMudHJhbnNmb3JtPWkoci5kZWx0YUZpbmFsLHIudHJlZVNjYWxlLGg/ZDp2b2lkIDApLGEmJihjLnRyYW5zZm9ybT1hKGQsYy50cmFuc2Zvcm0pKSxjLnRyYW5zZm9ybU9yaWdpbj1sKHIpKTooaCYmKGMudHJhbnNmb3JtPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPWUudHJhbnNmb3JtLGE9ZS50cmFuc2Zvcm1LZXlzLGk9dC5lbmFibGVIYXJkd2FyZUFjY2VsZXJhdGlvbixsPXZvaWQgMD09PWl8fGkscz10LmFsbG93VHJhbnNmb3JtTm9uZSxjPXZvaWQgMD09PXN8fHMsdT1cIlwiO2Euc29ydChLKTtmb3IodmFyIGQ9ITEscD1hLmxlbmd0aCxmPTA7ZjxwO2YrKyl7dmFyIGg9YVtmXTt1Kz0odGVbaF18fGgpK1wiKFwiK29baF0rXCIpIFwiLFwielwiPT09aCYmKGQ9ITApfXJldHVybiFkJiZsP3UrPVwidHJhbnNsYXRlWigwKVwiOnU9dS50cmltKCkscj91PXIobyxuP1wiXCI6dSk6YyYmbiYmKHU9XCJub25lXCIpLHV9KGUsbyx2LGEpKSxnJiYoYy50cmFuc2Zvcm1PcmlnaW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vcmlnaW5YLG49dm9pZCAwPT09dD9cIjUwJVwiOnQscj1lLm9yaWdpblksbz12b2lkIDA9PT1yP1wiNTAlXCI6cixhPWUub3JpZ2luWjtyZXR1cm4gbitcIiBcIitvK1wiIFwiKyh2b2lkIDA9PT1hPzA6YSl9KGYpKSl9dmFyIGxlPWZ1bmN0aW9uKCl7cmV0dXJue3N0eWxlOnt9LHRyYW5zZm9ybTp7fSx0cmFuc2Zvcm1LZXlzOltdLHRyYW5zZm9ybU9yaWdpbjp7fSx2YXJzOnt9fX07ZnVuY3Rpb24gc2UoZSx0LG4pe2Zvcih2YXIgciBpbiB0KWVlKHRbcl0pfHxRKHIsbil8fChlW3JdPXRbcl0pfWZ1bmN0aW9uIGNlKGUsdCxuKXt2YXIgYT17fSxpPWZ1bmN0aW9uKGUsdCxuKXt2YXIgYT17fTtyZXR1cm4gc2UoYSxlLnN0eWxlfHx7fSxlKSxPYmplY3QuYXNzaWduKGEsZnVuY3Rpb24oZSx0LG4pe3ZhciBhPWUudHJhbnNmb3JtVGVtcGxhdGU7cmV0dXJuIG8udXNlTWVtbygoZnVuY3Rpb24oKXt2YXIgZT1sZSgpO2llKGUsdCx2b2lkIDAsdm9pZCAwLHtlbmFibGVIYXJkd2FyZUFjY2VsZXJhdGlvbjohbn0sYSk7dmFyIG89ZS52YXJzLGk9ZS5zdHlsZTtyZXR1cm4gci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LG8pLGkpfSksW3RdKX0oZSx0LG4pKSxlLnRyYW5zZm9ybVZhbHVlcyYmKGE9ZS50cmFuc2Zvcm1WYWx1ZXMoYSkpLGF9KGUsdCxuKTtyZXR1cm4gQm9vbGVhbihlLmRyYWcpJiYoYS5kcmFnZ2FibGU9ITEsaS51c2VyU2VsZWN0PWkuV2Via2l0VXNlclNlbGVjdD1pLldlYmtpdFRvdWNoQ2FsbG91dD1cIm5vbmVcIixpLnRvdWNoQWN0aW9uPSEwPT09ZS5kcmFnP1wibm9uZVwiOlwicGFuLVwiKyhcInhcIj09PWUuZHJhZz9cInlcIjpcInhcIikpLGEuc3R5bGU9aSxhfXZhciB1ZT1uZXcgU2V0KFtcImluaXRpYWxcIixcImFuaW1hdGVcIixcImV4aXRcIixcInN0eWxlXCIsXCJ2YXJpYW50c1wiLFwidHJhbnNpdGlvblwiLFwidHJhbnNmb3JtVGVtcGxhdGVcIixcInRyYW5zZm9ybVZhbHVlc1wiLFwiY3VzdG9tXCIsXCJpbmhlcml0XCIsXCJsYXlvdXRcIixcImxheW91dElkXCIsXCJfbGF5b3V0UmVzZXRUcmFuc2Zvcm1cIixcIm9uTGF5b3V0QW5pbWF0aW9uQ29tcGxldGVcIixcIm9uVmlld3BvcnRCb3hVcGRhdGVcIixcIm9uTGF5b3V0TWVhc3VyZVwiLFwib25CZWZvcmVMYXlvdXRNZWFzdXJlXCIsXCJvbkFuaW1hdGlvblN0YXJ0XCIsXCJvbkFuaW1hdGlvbkNvbXBsZXRlXCIsXCJvblVwZGF0ZVwiLFwib25EcmFnU3RhcnRcIixcIm9uRHJhZ1wiLFwib25EcmFnRW5kXCIsXCJvbk1lYXN1cmVEcmFnQ29uc3RyYWludHNcIixcIm9uRGlyZWN0aW9uTG9ja1wiLFwib25EcmFnVHJhbnNpdGlvbkVuZFwiLFwiZHJhZ1wiLFwiZHJhZ0NvbnRyb2xzXCIsXCJkcmFnTGlzdGVuZXJcIixcImRyYWdDb25zdHJhaW50c1wiLFwiZHJhZ0RpcmVjdGlvbkxvY2tcIixcIl9kcmFnWFwiLFwiX2RyYWdZXCIsXCJkcmFnRWxhc3RpY1wiLFwiZHJhZ01vbWVudHVtXCIsXCJkcmFnUHJvcGFnYXRpb25cIixcImRyYWdUcmFuc2l0aW9uXCIsXCJ3aGlsZURyYWdcIixcIm9uUGFuXCIsXCJvblBhblN0YXJ0XCIsXCJvblBhbkVuZFwiLFwib25QYW5TZXNzaW9uU3RhcnRcIixcIm9uVGFwXCIsXCJvblRhcFN0YXJ0XCIsXCJvblRhcENhbmNlbFwiLFwib25Ib3ZlclN0YXJ0XCIsXCJvbkhvdmVyRW5kXCIsXCJ3aGlsZUZvY3VzXCIsXCJ3aGlsZVRhcFwiLFwid2hpbGVIb3ZlclwiXSk7ZnVuY3Rpb24gZGUoZSl7cmV0dXJuIHVlLmhhcyhlKX12YXIgcGU9ZnVuY3Rpb24oZSl7cmV0dXJuIWRlKGUpfTt0cnl7dmFyIGZlPW4oODU5NCkuWjtwZT1mdW5jdGlvbihlKXtyZXR1cm4gZS5zdGFydHNXaXRoKFwib25cIik/IWRlKGUpOmZlKGUpfX1jYXRjaChlKXt9ZnVuY3Rpb24gaGUoZSx0LG4pe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlP2U6aS5weC50cmFuc2Zvcm0odCtuKmUpfXZhciBnZT1mdW5jdGlvbihlLHQpe3JldHVybiBpLnB4LnRyYW5zZm9ybShlKnQpfSx2ZT17b2Zmc2V0Olwic3Ryb2tlLWRhc2hvZmZzZXRcIixhcnJheTpcInN0cm9rZS1kYXNoYXJyYXlcIn0sQ2U9e29mZnNldDpcInN0cm9rZURhc2hvZmZzZXRcIixhcnJheTpcInN0cm9rZURhc2hhcnJheVwifTtmdW5jdGlvbiBtZShlLHQsbixvLGEsaSxsLHMpe3ZhciBjPXQuYXR0clgsdT10LmF0dHJZLGQ9dC5vcmlnaW5YLHA9dC5vcmlnaW5ZLGY9dC5wYXRoTGVuZ3RoLGg9dC5wYXRoU3BhY2luZyxnPXZvaWQgMD09PWg/MTpoLHY9dC5wYXRoT2Zmc2V0LEM9dm9pZCAwPT09dj8wOnY7aWUoZSxyLl9fcmVzdCh0LFtcImF0dHJYXCIsXCJhdHRyWVwiLFwib3JpZ2luWFwiLFwib3JpZ2luWVwiLFwicGF0aExlbmd0aFwiLFwicGF0aFNwYWNpbmdcIixcInBhdGhPZmZzZXRcIl0pLG4sbyxhLGksbCxzKSxlLmF0dHJzPWUuc3R5bGUsZS5zdHlsZT17fTt2YXIgbT1lLmF0dHJzLHc9ZS5zdHlsZSxiPWUuZGltZW5zaW9ucyx5PWUudG90YWxQYXRoTGVuZ3RoO20udHJhbnNmb3JtJiYoYiYmKHcudHJhbnNmb3JtPW0udHJhbnNmb3JtKSxkZWxldGUgbS50cmFuc2Zvcm0pLGImJih2b2lkIDAhPT1kfHx2b2lkIDAhPT1wfHx3LnRyYW5zZm9ybSkmJih3LnRyYW5zZm9ybU9yaWdpbj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGhlKHQsZS54LGUud2lkdGgpK1wiIFwiK2hlKG4sZS55LGUuaGVpZ2h0KX0oYix2b2lkIDAhPT1kP2Q6LjUsdm9pZCAwIT09cD9wOi41KSksdm9pZCAwIT09YyYmKG0ueD1jKSx2b2lkIDAhPT11JiYobS55PXUpLHZvaWQgMCE9PXkmJnZvaWQgMCE9PWYmJmZ1bmN0aW9uKGUsdCxuLHIsbyxhKXt2b2lkIDA9PT1yJiYocj0xKSx2b2lkIDA9PT1vJiYobz0wKSx2b2lkIDA9PT1hJiYoYT0hMCk7dmFyIGk9YT92ZTpDZTtlW2kub2Zmc2V0XT1nZSgtbyx0KTt2YXIgbD1nZShuLHQpLHM9Z2Uocix0KTtlW2kuYXJyYXldPWwrXCIgXCIrc30obSx5LGYsZyxDLCExKX12YXIgd2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGxlKCkpLHthdHRyczp7fX0pfTtmdW5jdGlvbiBiZShlLHQpe3ZhciBuPW8udXNlTWVtbygoZnVuY3Rpb24oKXt2YXIgbj13ZSgpO3JldHVybiBtZShuLHQsdm9pZCAwLHZvaWQgMCx7ZW5hYmxlSGFyZHdhcmVBY2NlbGVyYXRpb246ITF9LGUudHJhbnNmb3JtVGVtcGxhdGUpLHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxuLmF0dHJzKSx7c3R5bGU6ci5fX2Fzc2lnbih7fSxuLnN0eWxlKX0pfSksW3RdKTtpZihlLnN0eWxlKXt2YXIgYT17fTtzZShhLGUuc3R5bGUsZSksbi5zdHlsZT1yLl9fYXNzaWduKHIuX19hc3NpZ24oe30sYSksbi5zdHlsZSl9cmV0dXJuIG59ZnVuY3Rpb24geWUoZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSExKSxmdW5jdGlvbih0LG4sYSxpLGwpe3ZhciBzPWkubGF0ZXN0VmFsdWVzLGM9KEYodCk/YmU6Y2UpKG4scyxsKSx1PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj17fTtmb3IodmFyIG8gaW4gZSkocGUobyl8fCEwPT09biYmZGUobyl8fCF0JiYhZGUobykpJiYocltvXT1lW29dKTtyZXR1cm4gcn0obixcInN0cmluZ1wiPT10eXBlb2YgdCxlKSxkPXIuX19hc3NpZ24oci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LHUpLGMpLHtyZWY6YX0pO3JldHVybiBvLmNyZWF0ZUVsZW1lbnQodCxkKX19dmFyIHhlPS8oW2Etel0pKFtBLVpdKS9nLGtlPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoeGUsXCIkMS0kMlwiKS50b0xvd2VyQ2FzZSgpfTtmdW5jdGlvbiBTZShlLHQpe3ZhciBuPXQuc3R5bGUscj10LnZhcnM7Zm9yKHZhciBvIGluIE9iamVjdC5hc3NpZ24oZS5zdHlsZSxuKSxyKWUuc3R5bGUuc2V0UHJvcGVydHkobyxyW29dKX12YXIgT2U9bmV3IFNldChbXCJiYXNlRnJlcXVlbmN5XCIsXCJkaWZmdXNlQ29uc3RhbnRcIixcImtlcm5lbE1hdHJpeFwiLFwia2VybmVsVW5pdExlbmd0aFwiLFwia2V5U3BsaW5lc1wiLFwia2V5VGltZXNcIixcImxpbWl0aW5nQ29uZUFuZ2xlXCIsXCJtYXJrZXJIZWlnaHRcIixcIm1hcmtlcldpZHRoXCIsXCJudW1PY3RhdmVzXCIsXCJ0YXJnZXRYXCIsXCJ0YXJnZXRZXCIsXCJzdXJmYWNlU2NhbGVcIixcInNwZWN1bGFyQ29uc3RhbnRcIixcInNwZWN1bGFyRXhwb25lbnRcIixcInN0ZERldmlhdGlvblwiLFwidGFibGVWYWx1ZXNcIixcInZpZXdCb3hcIixcImdyYWRpZW50VHJhbnNmb3JtXCJdKTtmdW5jdGlvbiBNZShlLHQpe2Zvcih2YXIgbiBpbiBTZShlLHQpLHQuYXR0cnMpZS5zZXRBdHRyaWJ1dGUoT2UuaGFzKG4pP246a2UobiksdC5hdHRyc1tuXSl9ZnVuY3Rpb24gTGUoZSl7dmFyIHQ9ZS5zdHlsZSxuPXt9O2Zvcih2YXIgciBpbiB0KShlZSh0W3JdKXx8UShyLGUpKSYmKG5bcl09dFtyXSk7cmV0dXJuIG59ZnVuY3Rpb24gX2UoZSl7dmFyIHQ9TGUoZSk7Zm9yKHZhciBuIGluIGUpZWUoZVtuXSkmJih0W1wieFwiPT09bnx8XCJ5XCI9PT1uP1wiYXR0clwiK24udG9VcHBlckNhc2UoKTpuXT1lW25dKTtyZXR1cm4gdH1mdW5jdGlvbiBQZShlKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5zdGFydH12YXIgRWU9ZnVuY3Rpb24oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSl9LGplPWZ1bmN0aW9uKGUpe3JldHVybiBCb29sZWFuKGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZlLm1peCYmZS50b1ZhbHVlKX0sUmU9ZnVuY3Rpb24oZSl7cmV0dXJuIEVlKGUpP2VbZS5sZW5ndGgtMV18fDA6ZX07ZnVuY3Rpb24gSWUoZSl7dmFyIHQ9ZWUoZSk/ZS5nZXQoKTplO3JldHVybiBqZSh0KT90LnRvVmFsdWUoKTp0fWZ1bmN0aW9uIFZlKGUsdCxuLHIpe3ZhciBvPWUuc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzLGE9ZS5jcmVhdGVSZW5kZXJTdGF0ZSxpPWUub25Nb3VudCxsPXtsYXRlc3RWYWx1ZXM6QWUodCxuLHIsbykscmVuZGVyU3RhdGU6YSgpfTtyZXR1cm4gaSYmKGwubW91bnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGkodCxlLGwpfSksbH12YXIgSGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dmFyIHI9by51c2VDb250ZXh0KGIpLGE9by51c2VDb250ZXh0KHgpO3JldHVybiBuP1ZlKGUsdCxyLGEpOmsoKGZ1bmN0aW9uKCl7cmV0dXJuIFZlKGUsdCxyLGEpfSkpfX07ZnVuY3Rpb24gQWUoZSx0LG4sbyl7dmFyIGE9e30saT0hMT09PShudWxsPT1uP3ZvaWQgMDpuLmluaXRpYWwpLGw9byhlKTtmb3IodmFyIHMgaW4gbClhW3NdPUllKGxbc10pO3ZhciBjPWUuaW5pdGlhbCx1PWUuYW5pbWF0ZSxkPVQoZSkscD1EKGUpO3QmJnAmJiFkJiYhMSE9PWUuaW5oZXJpdCYmKG51bGwhPWN8fChjPXQuaW5pdGlhbCksbnVsbCE9dXx8KHU9dC5hbmltYXRlKSk7dmFyIGY9aXx8ITE9PT1jP3U6YztyZXR1cm4gZiYmXCJib29sZWFuXCIhPXR5cGVvZiBmJiYhUGUoZikmJihBcnJheS5pc0FycmF5KGYpP2Y6W2ZdKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1IKGUsdCk7aWYobil7dmFyIG89bi50cmFuc2l0aW9uRW5kO24udHJhbnNpdGlvbjt2YXIgaT1yLl9fcmVzdChuLFtcInRyYW5zaXRpb25FbmRcIixcInRyYW5zaXRpb25cIl0pO2Zvcih2YXIgbCBpbiBpKWFbbF09aVtsXTtmb3IodmFyIGwgaW4gbylhW2xdPW9bbF19fSkpLGF9dmFyIFRlLERlPXt1c2VWaXN1YWxTdGF0ZTpIZSh7c2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzOl9lLGNyZWF0ZVJlbmRlclN0YXRlOndlLG9uTW91bnQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4ucmVuZGVyU3RhdGUsbz1uLmxhdGVzdFZhbHVlczt0cnl7ci5kaW1lbnNpb25zPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQuZ2V0QkJveD90LmdldEJCb3goKTp0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfWNhdGNoKGUpe3IuZGltZW5zaW9ucz17eDowLHk6MCx3aWR0aDowLGhlaWdodDowfX1cInBhdGhcIj09PXQudGFnTmFtZSYmKHIudG90YWxQYXRoTGVuZ3RoPXQuZ2V0VG90YWxMZW5ndGgoKSksbWUocixvLHZvaWQgMCx2b2lkIDAse2VuYWJsZUhhcmR3YXJlQWNjZWxlcmF0aW9uOiExfSxlLnRyYW5zZm9ybVRlbXBsYXRlKSxNZSh0LHIpfX0pfSxCZT17dXNlVmlzdWFsU3RhdGU6SGUoe3NjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wczpMZSxjcmVhdGVSZW5kZXJTdGF0ZTpsZX0pfTtmdW5jdGlvbiBaZShlLHQsbixvKXt2YXIgYT10LmZvcndhcmRNb3Rpb25Qcm9wcyxpPXZvaWQgMCE9PWEmJmEsbD1GKGUpP0RlOkJlO3JldHVybiByLl9fYXNzaWduKHIuX19hc3NpZ24oe30sbCkse3ByZWxvYWRlZEZlYXR1cmVzOm4sdXNlUmVuZGVyOnllKGkpLGNyZWF0ZVZpc3VhbEVsZW1lbnQ6byxDb21wb25lbnQ6ZX0pfWZ1bmN0aW9uICRlKGUsdCxuLHIpe3JldHVybiBlLmFkZEV2ZW50TGlzdGVuZXIodCxuLHIpLGZ1bmN0aW9uKCl7cmV0dXJuIGUucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4scil9fWZ1bmN0aW9uIE5lKGUsdCxuLHIpe28udXNlRWZmZWN0KChmdW5jdGlvbigpe3ZhciBvPWUuY3VycmVudDtpZihuJiZvKXJldHVybiAkZShvLHQsbixyKX0pLFtlLHQsbixyXSl9ZnVuY3Rpb24gRmUoZSl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFBvaW50ZXJFdmVudCYmZSBpbnN0YW5jZW9mIFBvaW50ZXJFdmVudD8hKFwibW91c2VcIiE9PWUucG9pbnRlclR5cGUpOmUgaW5zdGFuY2VvZiBNb3VzZUV2ZW50fWZ1bmN0aW9uIFdlKGUpe3JldHVybiEhZS50b3VjaGVzfSFmdW5jdGlvbihlKXtlLkFuaW1hdGU9XCJhbmltYXRlXCIsZS5Ib3Zlcj1cIndoaWxlSG92ZXJcIixlLlRhcD1cIndoaWxlVGFwXCIsZS5EcmFnPVwid2hpbGVEcmFnXCIsZS5Gb2N1cz1cIndoaWxlRm9jdXNcIixlLkV4aXQ9XCJleGl0XCJ9KFRlfHwoVGU9e30pKTt2YXIgVWU9e3BhZ2VYOjAscGFnZVk6MH07ZnVuY3Rpb24gemUoZSx0KXt2b2lkIDA9PT10JiYodD1cInBhZ2VcIik7dmFyIG49ZS50b3VjaGVzWzBdfHxlLmNoYW5nZWRUb3VjaGVzWzBdfHxVZTtyZXR1cm57eDpuW3QrXCJYXCJdLHk6blt0K1wiWVwiXX19ZnVuY3Rpb24gR2UoZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9XCJwYWdlXCIpLHt4OmVbdCtcIlhcIl0seTplW3QrXCJZXCJdfX1mdW5jdGlvbiBLZShlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD1cInBhZ2VcIikse3BvaW50OldlKGUpP3plKGUsdCk6R2UoZSx0KX19dmFyIHFlPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9ITEpO3ZhciBuLHI9ZnVuY3Rpb24odCl7cmV0dXJuIGUodCxLZSh0KSl9O3JldHVybiB0PyhuPXIsZnVuY3Rpb24oZSl7dmFyIHQ9ZSBpbnN0YW5jZW9mIE1vdXNlRXZlbnQ7KCF0fHx0JiYwPT09ZS5idXR0b24pJiZuKGUpfSk6cn0sWWU9ZnVuY3Rpb24oKXtyZXR1cm4gRSYmbnVsbD09PXdpbmRvdy5vbnBvaW50ZXJkb3dufSxKZT1mdW5jdGlvbigpe3JldHVybiBFJiZudWxsPT09d2luZG93Lm9udG91Y2hzdGFydH0sWGU9ZnVuY3Rpb24oKXtyZXR1cm4gRSYmbnVsbD09PXdpbmRvdy5vbm1vdXNlZG93bn0sUWU9e3BvaW50ZXJkb3duOlwibW91c2Vkb3duXCIscG9pbnRlcm1vdmU6XCJtb3VzZW1vdmVcIixwb2ludGVydXA6XCJtb3VzZXVwXCIscG9pbnRlcmNhbmNlbDpcIm1vdXNlY2FuY2VsXCIscG9pbnRlcm92ZXI6XCJtb3VzZW92ZXJcIixwb2ludGVyb3V0OlwibW91c2VvdXRcIixwb2ludGVyZW50ZXI6XCJtb3VzZWVudGVyXCIscG9pbnRlcmxlYXZlOlwibW91c2VsZWF2ZVwifSxldD17cG9pbnRlcmRvd246XCJ0b3VjaHN0YXJ0XCIscG9pbnRlcm1vdmU6XCJ0b3VjaG1vdmVcIixwb2ludGVydXA6XCJ0b3VjaGVuZFwiLHBvaW50ZXJjYW5jZWw6XCJ0b3VjaGNhbmNlbFwifTtmdW5jdGlvbiB0dChlKXtyZXR1cm4gWWUoKT9lOkplKCk/ZXRbZV06WGUoKT9RZVtlXTplfWZ1bmN0aW9uIG50KGUsdCxuLHIpe3JldHVybiAkZShlLHR0KHQpLHFlKG4sXCJwb2ludGVyZG93blwiPT09dCkscil9ZnVuY3Rpb24gcnQoZSx0LG4scil7cmV0dXJuIE5lKGUsdHQodCksbiYmcWUobixcInBvaW50ZXJkb3duXCI9PT10KSxyKX1mdW5jdGlvbiBvdChlKXt2YXIgdD1udWxsO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBudWxsPT09dCYmKHQ9ZSxmdW5jdGlvbigpe3Q9bnVsbH0pfX12YXIgYXQ9b3QoXCJkcmFnSG9yaXpvbnRhbFwiKSxpdD1vdChcImRyYWdWZXJ0aWNhbFwiKTtmdW5jdGlvbiBsdChlKXt2YXIgdD0hMTtpZihcInlcIj09PWUpdD1pdCgpO2Vsc2UgaWYoXCJ4XCI9PT1lKXQ9YXQoKTtlbHNle3ZhciBuPWF0KCkscj1pdCgpO24mJnI/dD1mdW5jdGlvbigpe24oKSxyKCl9OihuJiZuKCksciYmcigpKX1yZXR1cm4gdH1mdW5jdGlvbiBzdCgpe3ZhciBlPWx0KCEwKTtyZXR1cm4hZXx8KGUoKSwhMSl9ZnVuY3Rpb24gY3QoZSx0LG4pe3JldHVybiBmdW5jdGlvbihyLG8pe3ZhciBhO0ZlKHIpJiYhc3QoKSYmKG51bGw9PW58fG4ocixvKSxudWxsPT09KGE9ZS5hbmltYXRpb25TdGF0ZSl8fHZvaWQgMD09PWF8fGEuc2V0QWN0aXZlKFRlLkhvdmVyLHQpKX19dmFyIHV0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuISF0JiYoZT09PXR8fHV0KGUsdC5wYXJlbnRFbGVtZW50KSl9O2Z1bmN0aW9uIGR0KGUpe3JldHVybiBvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSgpfX0pLFtdKX12YXIgcHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpLG51bGx9fSxmdD17dGFwOnB0KChmdW5jdGlvbihlKXt2YXIgdD1lLm9uVGFwLG49ZS5vblRhcFN0YXJ0LHI9ZS5vblRhcENhbmNlbCxhPWUud2hpbGVUYXAsaT1lLnZpc3VhbEVsZW1lbnQscz10fHxufHxyfHxhLGM9by51c2VSZWYoITEpLHU9by51c2VSZWYobnVsbCk7ZnVuY3Rpb24gZCgpe3ZhciBlO251bGw9PT0oZT11LmN1cnJlbnQpfHx2b2lkIDA9PT1lfHxlLmNhbGwodSksdS5jdXJyZW50PW51bGx9ZnVuY3Rpb24gcCgpe3ZhciBlO3JldHVybiBkKCksYy5jdXJyZW50PSExLG51bGw9PT0oZT1pLmFuaW1hdGlvblN0YXRlKXx8dm9pZCAwPT09ZXx8ZS5zZXRBY3RpdmUoVGUuVGFwLCExKSwhc3QoKX1mdW5jdGlvbiBmKGUsbil7cCgpJiYodXQoaS5nZXRJbnN0YW5jZSgpLGUudGFyZ2V0KT9udWxsPT10fHx0KGUsbik6bnVsbD09cnx8cihlLG4pKX1mdW5jdGlvbiBoKGUsdCl7cCgpJiYobnVsbD09cnx8cihlLHQpKX1ydChpLFwicG9pbnRlcmRvd25cIixzP2Z1bmN0aW9uKGUsdCl7dmFyIHI7ZCgpLGMuY3VycmVudHx8KGMuY3VycmVudD0hMCx1LmN1cnJlbnQ9bC5waXBlKG50KHdpbmRvdyxcInBvaW50ZXJ1cFwiLGYpLG50KHdpbmRvdyxcInBvaW50ZXJjYW5jZWxcIixoKSksbnVsbD09bnx8bihlLHQpLG51bGw9PT0ocj1pLmFuaW1hdGlvblN0YXRlKXx8dm9pZCAwPT09cnx8ci5zZXRBY3RpdmUoVGUuVGFwLCEwKSl9OnZvaWQgMCksZHQoZCl9KSksZm9jdXM6cHQoKGZ1bmN0aW9uKGUpe3ZhciB0PWUud2hpbGVGb2N1cyxuPWUudmlzdWFsRWxlbWVudDtOZShuLFwiZm9jdXNcIix0P2Z1bmN0aW9uKCl7dmFyIGU7bnVsbD09PShlPW4uYW5pbWF0aW9uU3RhdGUpfHx2b2lkIDA9PT1lfHxlLnNldEFjdGl2ZShUZS5Gb2N1cywhMCl9OnZvaWQgMCksTmUobixcImJsdXJcIix0P2Z1bmN0aW9uKCl7dmFyIGU7bnVsbD09PShlPW4uYW5pbWF0aW9uU3RhdGUpfHx2b2lkIDA9PT1lfHxlLnNldEFjdGl2ZShUZS5Gb2N1cywhMSl9OnZvaWQgMCl9KSksaG92ZXI6cHQoKGZ1bmN0aW9uKGUpe3ZhciB0PWUub25Ib3ZlclN0YXJ0LG49ZS5vbkhvdmVyRW5kLHI9ZS53aGlsZUhvdmVyLG89ZS52aXN1YWxFbGVtZW50O3J0KG8sXCJwb2ludGVyZW50ZXJcIix0fHxyP2N0KG8sITAsdCk6dm9pZCAwKSxydChvLFwicG9pbnRlcmxlYXZlXCIsbnx8cj9jdChvLCExLG4pOnZvaWQgMCl9KSl9O2Z1bmN0aW9uIGh0KGUsdCl7aWYoIUFycmF5LmlzQXJyYXkodCkpcmV0dXJuITE7dmFyIG49dC5sZW5ndGg7aWYobiE9PWUubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgcj0wO3I8bjtyKyspaWYodFtyXSE9PWVbcl0pcmV0dXJuITE7cmV0dXJuITB9dmFyIGd0PWZ1bmN0aW9uKGUpe3JldHVybiAxZTMqZX0sdnQ9e2xpbmVhcjpsLmxpbmVhcixlYXNlSW46bC5lYXNlSW4sZWFzZUluT3V0OmwuZWFzZUluT3V0LGVhc2VPdXQ6bC5lYXNlT3V0LGNpcmNJbjpsLmNpcmNJbixjaXJjSW5PdXQ6bC5jaXJjSW5PdXQsY2lyY091dDpsLmNpcmNPdXQsYmFja0luOmwuYmFja0luLGJhY2tJbk91dDpsLmJhY2tJbk91dCxiYWNrT3V0OmwuYmFja091dCxhbnRpY2lwYXRlOmwuYW50aWNpcGF0ZSxib3VuY2VJbjpsLmJvdW5jZUluLGJvdW5jZUluT3V0OmwuYm91bmNlSW5PdXQsYm91bmNlT3V0OmwuYm91bmNlT3V0fSxDdD1mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXthLmludmFyaWFudCg0PT09ZS5sZW5ndGgsXCJDdWJpYyBiZXppZXIgYXJyYXlzIG11c3QgY29udGFpbiBmb3VyIG51bWVyaWNhbCB2YWx1ZXMuXCIpO3ZhciB0PXIuX19yZWFkKGUsNCksbj10WzBdLG89dFsxXSxpPXRbMl0scz10WzNdO3JldHVybiBsLmN1YmljQmV6aWVyKG4sbyxpLHMpfXJldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlPyhhLmludmFyaWFudCh2b2lkIDAhPT12dFtlXSxcIkludmFsaWQgZWFzaW5nIHR5cGUgJ1wiK2UrXCInXCIpLHZ0W2VdKTplfSxtdD1mdW5jdGlvbihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKSYmXCJudW1iZXJcIiE9dHlwZW9mIGVbMF19LHd0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIShcInpJbmRleFwiPT09ZXx8XCJudW1iZXJcIiE9dHlwZW9mIHQmJiFBcnJheS5pc0FycmF5KHQpJiYoXCJzdHJpbmdcIiE9dHlwZW9mIHR8fCFpLmNvbXBsZXgudGVzdCh0KXx8dC5zdGFydHNXaXRoKFwidXJsKFwiKSkpfSxidD1mdW5jdGlvbigpe3JldHVybnt0eXBlOlwic3ByaW5nXCIsc3RpZmZuZXNzOjUwMCxkYW1waW5nOjI1LHJlc3REZWx0YTouNSxyZXN0U3BlZWQ6MTB9fSx5dD1mdW5jdGlvbihlKXtyZXR1cm57dHlwZTpcInNwcmluZ1wiLHN0aWZmbmVzczo1NTAsZGFtcGluZzowPT09ZT8yKk1hdGguc3FydCg1NTApOjMwLHJlc3REZWx0YTouMDEscmVzdFNwZWVkOjEwfX0seHQ9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTpcImtleWZyYW1lc1wiLGVhc2U6XCJsaW5lYXJcIixkdXJhdGlvbjouM319LGt0PWZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOlwia2V5ZnJhbWVzXCIsZHVyYXRpb246LjgsdmFsdWVzOmV9fSxTdD17eDpidCx5OmJ0LHo6YnQscm90YXRlOmJ0LHJvdGF0ZVg6YnQscm90YXRlWTpidCxyb3RhdGVaOmJ0LHNjYWxlWDp5dCxzY2FsZVk6eXQsc2NhbGU6eXQsb3BhY2l0eTp4dCxiYWNrZ3JvdW5kQ29sb3I6eHQsY29sb3I6eHQsZGVmYXVsdDp5dH0sT3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbjtyZXR1cm4gbj1FZSh0KT9rdDpTdFtlXXx8U3QuZGVmYXVsdCxyLl9fYXNzaWduKHt0bzp0fSxuKHQpKX0sTXQ9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGFlKSx7Y29sb3I6aS5jb2xvcixiYWNrZ3JvdW5kQ29sb3I6aS5jb2xvcixvdXRsaW5lQ29sb3I6aS5jb2xvcixmaWxsOmkuY29sb3Isc3Ryb2tlOmkuY29sb3IsYm9yZGVyQ29sb3I6aS5jb2xvcixib3JkZXJUb3BDb2xvcjppLmNvbG9yLGJvcmRlclJpZ2h0Q29sb3I6aS5jb2xvcixib3JkZXJCb3R0b21Db2xvcjppLmNvbG9yLGJvcmRlckxlZnRDb2xvcjppLmNvbG9yLGZpbHRlcjppLmZpbHRlcixXZWJraXRGaWx0ZXI6aS5maWx0ZXJ9KSxMdD1mdW5jdGlvbihlKXtyZXR1cm4gTXRbZV19O2Z1bmN0aW9uIF90KGUsdCl7dmFyIG4scj1MdChlKTtyZXR1cm4gciE9PWkuZmlsdGVyJiYocj1pLmNvbXBsZXgpLG51bGw9PT0obj1yLmdldEFuaW1hdGFibGVOb25lKXx8dm9pZCAwPT09bj92b2lkIDA6bi5jYWxsKHIsdCl9dmFyIFB0PSExO2Z1bmN0aW9uIEV0KGUpe3JldHVybiAwPT09ZXx8XCJzdHJpbmdcIj09dHlwZW9mIGUmJjA9PT1wYXJzZUZsb2F0KGUpJiYtMT09PWUuaW5kZXhPZihcIiBcIil9ZnVuY3Rpb24ganQoZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGU/MDpfdChcIlwiLGUpfWZ1bmN0aW9uIFJ0KGUsdCl7cmV0dXJuIGVbdF18fGUuZGVmYXVsdHx8ZX1mdW5jdGlvbiBJdChlLHQsbixvKXtyZXR1cm4gdm9pZCAwPT09byYmKG89e30pLHQuc3RhcnQoKGZ1bmN0aW9uKGkpe3ZhciBzLGMsdT1mdW5jdGlvbihlLHQsbixvLGkpe3ZhciBzLGM9UnQobyxlKSx1PW51bGwhPT0ocz1jLmZyb20pJiZ2b2lkIDAhPT1zP3M6dC5nZXQoKSxkPXd0KGUsbik7XCJub25lXCI9PT11JiZkJiZcInN0cmluZ1wiPT10eXBlb2Ygbj91PV90KGUsbik6RXQodSkmJlwic3RyaW5nXCI9PXR5cGVvZiBuP3U9anQobik6IUFycmF5LmlzQXJyYXkobikmJkV0KG4pJiZcInN0cmluZ1wiPT10eXBlb2YgdSYmKG49anQodSkpO3ZhciBwPXd0KGUsdSk7cmV0dXJuIGEud2FybmluZyhwPT09ZCxcIllvdSBhcmUgdHJ5aW5nIHRvIGFuaW1hdGUgXCIrZSsnIGZyb20gXCInK3UrJ1wiIHRvIFwiJytuKydcIi4gJyt1K1wiIGlzIG5vdCBhbiBhbmltYXRhYmxlIHZhbHVlIC0gdG8gZW5hYmxlIHRoaXMgYW5pbWF0aW9uIHNldCBcIit1K1wiIHRvIGEgdmFsdWUgYW5pbWF0YWJsZSB0byBcIituK1wiIHZpYSB0aGUgYHN0eWxlYCBwcm9wZXJ0eS5cIikscCYmZCYmITEhPT1jLnR5cGU/ZnVuY3Rpb24oKXt2YXIgbz17ZnJvbTp1LHRvOm4sdmVsb2NpdHk6dC5nZXRWZWxvY2l0eSgpLG9uQ29tcGxldGU6aSxvblVwZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gdC5zZXQoZSl9fTtyZXR1cm5cImluZXJ0aWFcIj09PWMudHlwZXx8XCJkZWNheVwiPT09Yy50eXBlP2wuaW5lcnRpYShyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sbyksYykpOmwuYW5pbWF0ZShyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sZnVuY3Rpb24oZSx0LG4pe3ZhciBvO3JldHVybiBBcnJheS5pc0FycmF5KHQudG8pJiYobnVsbCE9PShvPWUuZHVyYXRpb24pJiZ2b2lkIDAhPT1vfHwoZS5kdXJhdGlvbj0uOCkpLGZ1bmN0aW9uKGUpe0FycmF5LmlzQXJyYXkoZS50bykmJm51bGw9PT1lLnRvWzBdJiYoZS50bz1yLl9fc3ByZWFkQXJyYXkoW10sci5fX3JlYWQoZS50bykpLGUudG9bMF09ZS5mcm9tKX0odCksZnVuY3Rpb24oZSl7ZS53aGVuLGUuZGVsYXksZS5kZWxheUNoaWxkcmVuLGUuc3RhZ2dlckNoaWxkcmVuLGUuc3RhZ2dlckRpcmVjdGlvbixlLnJlcGVhdCxlLnJlcGVhdFR5cGUsZS5yZXBlYXREZWxheSxlLmZyb207dmFyIHQ9ci5fX3Jlc3QoZSxbXCJ3aGVuXCIsXCJkZWxheVwiLFwiZGVsYXlDaGlsZHJlblwiLFwic3RhZ2dlckNoaWxkcmVuXCIsXCJzdGFnZ2VyRGlyZWN0aW9uXCIsXCJyZXBlYXRcIixcInJlcGVhdFR5cGVcIixcInJlcGVhdERlbGF5XCIsXCJmcm9tXCJdKTtyZXR1cm4hIU9iamVjdC5rZXlzKHQpLmxlbmd0aH0oZSl8fChlPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxlKSxPdChuLHQudG8pKSksci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LHQpLGZ1bmN0aW9uKGUpe3ZhciB0PWUuZWFzZSxuPWUudGltZXMsbz1lLnlveW8saT1lLmZsaXAsbD1lLmxvb3Ascz1yLl9fcmVzdChlLFtcImVhc2VcIixcInRpbWVzXCIsXCJ5b3lvXCIsXCJmbGlwXCIsXCJsb29wXCJdKSxjPXIuX19hc3NpZ24oe30scyk7cmV0dXJuIG4mJihjLm9mZnNldD1uKSxzLmR1cmF0aW9uJiYoYy5kdXJhdGlvbj1ndChzLmR1cmF0aW9uKSkscy5yZXBlYXREZWxheSYmKGMucmVwZWF0RGVsYXk9Z3Qocy5yZXBlYXREZWxheSkpLHQmJihjLmVhc2U9bXQodCk/dC5tYXAoQ3QpOkN0KHQpKSxcInR3ZWVuXCI9PT1zLnR5cGUmJihjLnR5cGU9XCJrZXlmcmFtZXNcIiksKG98fGx8fGkpJiYoYS53YXJuaW5nKCFQdCxcInlveW8sIGxvb3AgYW5kIGZsaXAgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgQVBJLiBSZXBsYWNlIHdpdGggcmVwZWF0IGFuZCByZXBlYXRUeXBlIG9wdGlvbnMuXCIpLFB0PSEwLG8/Yy5yZXBlYXRUeXBlPVwicmV2ZXJzZVwiOmw/Yy5yZXBlYXRUeXBlPVwibG9vcFwiOmkmJihjLnJlcGVhdFR5cGU9XCJtaXJyb3JcIiksYy5yZXBlYXQ9bHx8b3x8aXx8cy5yZXBlYXQpLFwic3ByaW5nXCIhPT1zLnR5cGUmJihjLnR5cGU9XCJrZXlmcmFtZXNcIiksY30oZSkpfShjLG8sZSkpLHtvblVwZGF0ZTpmdW5jdGlvbihlKXt2YXIgdDtvLm9uVXBkYXRlKGUpLG51bGw9PT0odD1jLm9uVXBkYXRlKXx8dm9pZCAwPT09dHx8dC5jYWxsKGMsZSl9LG9uQ29tcGxldGU6ZnVuY3Rpb24oKXt2YXIgZTtvLm9uQ29tcGxldGUoKSxudWxsPT09KGU9Yy5vbkNvbXBsZXRlKXx8dm9pZCAwPT09ZXx8ZS5jYWxsKGMpfX0pKX06ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdC5zZXQobiksaSgpLG51bGw9PT0oZT1udWxsPT1jP3ZvaWQgMDpjLm9uQ29tcGxldGUpfHx2b2lkIDA9PT1lfHxlLmNhbGwoYykse3N0b3A6ZnVuY3Rpb24oKXt9fX19KGUsdCxuLG8saSksZD1mdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBudWxsIT09KG49KFJ0KGUsdCl8fHt9KS5kZWxheSkmJnZvaWQgMCE9PW4/bjowfShvLGUpLHA9ZnVuY3Rpb24oKXtyZXR1cm4gYz11KCl9O3JldHVybiBkP3M9c2V0VGltZW91dChwLGd0KGQpKTpwKCksZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQocyksbnVsbD09Y3x8Yy5zdG9wKCl9fSkpfWZ1bmN0aW9uIFZ0KGUsdCl7LTE9PT1lLmluZGV4T2YodCkmJmUucHVzaCh0KX1mdW5jdGlvbiBIdChlLHQpe3ZhciBuPWUuaW5kZXhPZih0KTtuPi0xJiZlLnNwbGljZShuLDEpfXZhciBBdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnN1YnNjcmlwdGlvbnM9W119cmV0dXJuIGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiBWdCh0aGlzLnN1YnNjcmlwdGlvbnMsZSksZnVuY3Rpb24oKXtyZXR1cm4gSHQodC5zdWJzY3JpcHRpb25zLGUpfX0sZS5wcm90b3R5cGUubm90aWZ5PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLnN1YnNjcmlwdGlvbnMubGVuZ3RoO2lmKHIpaWYoMT09PXIpdGhpcy5zdWJzY3JpcHRpb25zWzBdKGUsdCxuKTtlbHNlIGZvcih2YXIgbz0wO288cjtvKyspe3ZhciBhPXRoaXMuc3Vic2NyaXB0aW9uc1tvXTthJiZhKGUsdCxuKX19LGUucHJvdG90eXBlLmdldFNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdWJzY3JpcHRpb25zLmxlbmd0aH0sZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLnN1YnNjcmlwdGlvbnMubGVuZ3RoPTB9LGV9KCksVHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciB0LG49dGhpczt0aGlzLnRpbWVEZWx0YT0wLHRoaXMubGFzdFVwZGF0ZWQ9MCx0aGlzLnVwZGF0ZVN1YnNjcmliZXJzPW5ldyBBdCx0aGlzLnZlbG9jaXR5VXBkYXRlU3Vic2NyaWJlcnM9bmV3IEF0LHRoaXMucmVuZGVyU3Vic2NyaWJlcnM9bmV3IEF0LHRoaXMuY2FuVHJhY2tWZWxvY2l0eT0hMSx0aGlzLnVwZGF0ZUFuZE5vdGlmeT1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PSEwKSxuLnByZXY9bi5jdXJyZW50LG4uY3VycmVudD1lO3ZhciByPXMuZ2V0RnJhbWVEYXRhKCksbz1yLmRlbHRhLGE9ci50aW1lc3RhbXA7bi5sYXN0VXBkYXRlZCE9PWEmJihuLnRpbWVEZWx0YT1vLG4ubGFzdFVwZGF0ZWQ9YSxwLmRlZmF1bHQucG9zdFJlbmRlcihuLnNjaGVkdWxlVmVsb2NpdHlDaGVjaykpLG4ucHJldiE9PW4uY3VycmVudCYmbi51cGRhdGVTdWJzY3JpYmVycy5ub3RpZnkobi5jdXJyZW50KSxuLnZlbG9jaXR5VXBkYXRlU3Vic2NyaWJlcnMuZ2V0U2l6ZSgpJiZuLnZlbG9jaXR5VXBkYXRlU3Vic2NyaWJlcnMubm90aWZ5KG4uZ2V0VmVsb2NpdHkoKSksdCYmbi5yZW5kZXJTdWJzY3JpYmVycy5ub3RpZnkobi5jdXJyZW50KX0sdGhpcy5zY2hlZHVsZVZlbG9jaXR5Q2hlY2s9ZnVuY3Rpb24oKXtyZXR1cm4gcC5kZWZhdWx0LnBvc3RSZW5kZXIobi52ZWxvY2l0eUNoZWNrKX0sdGhpcy52ZWxvY2l0eUNoZWNrPWZ1bmN0aW9uKGUpe2UudGltZXN0YW1wIT09bi5sYXN0VXBkYXRlZCYmKG4ucHJldj1uLmN1cnJlbnQsbi52ZWxvY2l0eVVwZGF0ZVN1YnNjcmliZXJzLm5vdGlmeShuLmdldFZlbG9jaXR5KCkpKX0sdGhpcy5oYXNBbmltYXRlZD0hMSx0aGlzLnByZXY9dGhpcy5jdXJyZW50PWUsdGhpcy5jYW5UcmFja1ZlbG9jaXR5PSh0PXRoaXMuY3VycmVudCwhaXNOYU4ocGFyc2VGbG9hdCh0KSkpfXJldHVybiBlLnByb3RvdHlwZS5vbkNoYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy51cGRhdGVTdWJzY3JpYmVycy5hZGQoZSl9LGUucHJvdG90eXBlLmNsZWFyTGlzdGVuZXJzPWZ1bmN0aW9uKCl7dGhpcy51cGRhdGVTdWJzY3JpYmVycy5jbGVhcigpfSxlLnByb3RvdHlwZS5vblJlbmRlclJlcXVlc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGUodGhpcy5nZXQoKSksdGhpcy5yZW5kZXJTdWJzY3JpYmVycy5hZGQoZSl9LGUucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbihlKXt0aGlzLnBhc3NpdmVFZmZlY3Q9ZX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9ITApLHQmJnRoaXMucGFzc2l2ZUVmZmVjdD90aGlzLnBhc3NpdmVFZmZlY3QoZSx0aGlzLnVwZGF0ZUFuZE5vdGlmeSk6dGhpcy51cGRhdGVBbmROb3RpZnkoZSx0KX0sZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sZS5wcm90b3R5cGUuZ2V0UHJldmlvdXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmV2fSxlLnByb3RvdHlwZS5nZXRWZWxvY2l0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhblRyYWNrVmVsb2NpdHk/bC52ZWxvY2l0eVBlclNlY29uZChwYXJzZUZsb2F0KHRoaXMuY3VycmVudCktcGFyc2VGbG9hdCh0aGlzLnByZXYpLHRoaXMudGltZURlbHRhKTowfSxlLnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLnN0b3AoKSxuZXcgUHJvbWlzZSgoZnVuY3Rpb24obil7dC5oYXNBbmltYXRlZD0hMCx0LnN0b3BBbmltYXRpb249ZShuKX0pKS50aGVuKChmdW5jdGlvbigpe3JldHVybiB0LmNsZWFyQW5pbWF0aW9uKCl9KSl9LGUucHJvdG90eXBlLnN0b3A9ZnVuY3Rpb24oKXt0aGlzLnN0b3BBbmltYXRpb24mJnRoaXMuc3RvcEFuaW1hdGlvbigpLHRoaXMuY2xlYXJBbmltYXRpb24oKX0sZS5wcm90b3R5cGUuaXNBbmltYXRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuc3RvcEFuaW1hdGlvbn0sZS5wcm90b3R5cGUuY2xlYXJBbmltYXRpb249ZnVuY3Rpb24oKXt0aGlzLnN0b3BBbmltYXRpb249bnVsbH0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMudXBkYXRlU3Vic2NyaWJlcnMuY2xlYXIoKSx0aGlzLnJlbmRlclN1YnNjcmliZXJzLmNsZWFyKCksdGhpcy5zdG9wKCl9LGV9KCk7ZnVuY3Rpb24gRHQoZSl7cmV0dXJuIG5ldyBUdChlKX12YXIgQnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LnRlc3QoZSl9fSxadD1baS5udW1iZXIsaS5weCxpLnBlcmNlbnQsaS5kZWdyZWVzLGkudncsaS52aCx7dGVzdDpmdW5jdGlvbihlKXtyZXR1cm5cImF1dG9cIj09PWV9LHBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybiBlfX1dLCR0PWZ1bmN0aW9uKGUpe3JldHVybiBadC5maW5kKEJ0KGUpKX0sTnQ9ci5fX3NwcmVhZEFycmF5KHIuX19zcHJlYWRBcnJheShbXSxyLl9fcmVhZChadCkpLFtpLmNvbG9yLGkuY29tcGxleF0pO2Z1bmN0aW9uIEZ0KGUsdCxuKXtlLmhhc1ZhbHVlKHQpP2UuZ2V0VmFsdWUodCkuc2V0KG4pOmUuYWRkVmFsdWUodCxEdChuKSl9ZnVuY3Rpb24gV3QoZSx0KXt2YXIgbj1BKGUsdCksbz1uP2UubWFrZVRhcmdldEFuaW1hdGFibGUobiwhMSk6e30sYT1vLnRyYW5zaXRpb25FbmQsaT12b2lkIDA9PT1hP3t9OmE7by50cmFuc2l0aW9uO3ZhciBsPXIuX19yZXN0KG8sW1widHJhbnNpdGlvbkVuZFwiLFwidHJhbnNpdGlvblwiXSk7Zm9yKHZhciBzIGluIGw9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGwpLGkpKUZ0KGUscyxSZShsW3NdKSl9ZnVuY3Rpb24gVXQoZSx0KXtyLl9fc3ByZWFkQXJyYXkoW10sci5fX3JlYWQodCkpLnJldmVyc2UoKS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgcixvPWUuZ2V0VmFyaWFudChuKTtvJiZXdChlLG8pLG51bGw9PT0ocj1lLnZhcmlhbnRDaGlsZHJlbil8fHZvaWQgMD09PXJ8fHIuZm9yRWFjaCgoZnVuY3Rpb24oZSl7VXQoZSx0KX0pKX0pKX1mdW5jdGlvbiB6dChlLHQsbil7dmFyIHIsbyxhLGwscyxjPU9iamVjdC5rZXlzKHQpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIWUuaGFzVmFsdWUodCl9KSksdT1jLmxlbmd0aDtpZih1KWZvcih2YXIgZD0wO2Q8dTtkKyspe3ZhciBwPWNbZF0sZj10W3BdLGg9bnVsbDtBcnJheS5pc0FycmF5KGYpJiYoaD1mWzBdKSxudWxsPT09aCYmKGg9bnVsbCE9PShvPW51bGwhPT0ocj1uW3BdKSYmdm9pZCAwIT09cj9yOmUucmVhZFZhbHVlKHApKSYmdm9pZCAwIT09bz9vOnRbcF0pLG51bGwhPWgmJihcInN0cmluZ1wiPT10eXBlb2YgaCYmL15cXC0/XFxkKlxcLj9cXGQrJC8udGVzdChoKT9oPXBhcnNlRmxvYXQoaCk6KHM9aCwhTnQuZmluZChCdChzKSkmJmkuY29tcGxleC50ZXN0KGYpJiYoaD1fdChwLGYpKSksZS5hZGRWYWx1ZShwLER0KGgpKSxudWxsIT09KGE9KGw9bilbcF0pJiZ2b2lkIDAhPT1hfHwobFtwXT1oKSxlLnNldEJhc2VUYXJnZXQocCxoKSl9fWZ1bmN0aW9uIEd0KGUsdCl7aWYodClyZXR1cm4odFtlXXx8dC5kZWZhdWx0fHx0KS5mcm9tfWZ1bmN0aW9uIEt0KGUsdCxuKXt2YXIgcixvLGE9e307Zm9yKHZhciBpIGluIGUpYVtpXT1udWxsIT09KHI9R3QoaSx0KSkmJnZvaWQgMCE9PXI/cjpudWxsPT09KG89bi5nZXRWYWx1ZShpKSl8fHZvaWQgMD09PW8/dm9pZCAwOm8uZ2V0KCk7cmV0dXJuIGF9ZnVuY3Rpb24gcXQoZSx0LG4pe3ZhciByO2lmKHZvaWQgMD09PW4mJihuPXt9KSxlLm5vdGlmeUFuaW1hdGlvblN0YXJ0KCksQXJyYXkuaXNBcnJheSh0KSl7dmFyIG89dC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBZdChlLHQsbil9KSk7cj1Qcm9taXNlLmFsbChvKX1lbHNlIGlmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXI9WXQoZSx0LG4pO2Vsc2V7dmFyIGE9XCJmdW5jdGlvblwiPT10eXBlb2YgdD9BKGUsdCxuLmN1c3RvbSk6dDtyPUp0KGUsYSxuKX1yZXR1cm4gci50aGVuKChmdW5jdGlvbigpe3JldHVybiBlLm5vdGlmeUFuaW1hdGlvbkNvbXBsZXRlKHQpfSkpfWZ1bmN0aW9uIFl0KGUsdCxuKXt2YXIgbzt2b2lkIDA9PT1uJiYobj17fSk7dmFyIGE9QShlLHQsbi5jdXN0b20pLGk9KGF8fHt9KS50cmFuc2l0aW9uLGw9dm9pZCAwPT09aT9lLmdldERlZmF1bHRUcmFuc2l0aW9uKCl8fHt9Omk7bi50cmFuc2l0aW9uT3ZlcnJpZGUmJihsPW4udHJhbnNpdGlvbk92ZXJyaWRlKTt2YXIgcz1hP2Z1bmN0aW9uKCl7cmV0dXJuIEp0KGUsYSxuKX06ZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCl9LGM9KG51bGw9PT0obz1lLnZhcmlhbnRDaGlsZHJlbil8fHZvaWQgMD09PW8/dm9pZCAwOm8uc2l6ZSk/ZnVuY3Rpb24obyl7dm9pZCAwPT09byYmKG89MCk7dmFyIGE9bC5kZWxheUNoaWxkcmVuLGk9dm9pZCAwPT09YT8wOmEscz1sLnN0YWdnZXJDaGlsZHJlbixjPWwuc3RhZ2dlckRpcmVjdGlvbjtyZXR1cm4gZnVuY3Rpb24oZSx0LG4sbyxhLGkpe3ZvaWQgMD09PW4mJihuPTApLHZvaWQgMD09PW8mJihvPTApLHZvaWQgMD09PWEmJihhPTEpO3ZhciBsPVtdLHM9KGUudmFyaWFudENoaWxkcmVuLnNpemUtMSkqbyxjPTE9PT1hP2Z1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0wKSxlKm99OmZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0wKSxzLWUqb307cmV0dXJuIEFycmF5LmZyb20oZS52YXJpYW50Q2hpbGRyZW4pLnNvcnQoWHQpLmZvckVhY2goKGZ1bmN0aW9uKGUsbyl7bC5wdXNoKFl0KGUsdCxyLl9fYXNzaWduKHIuX19hc3NpZ24oe30saSkse2RlbGF5Om4rYyhvKX0pKS50aGVuKChmdW5jdGlvbigpe3JldHVybiBlLm5vdGlmeUFuaW1hdGlvbkNvbXBsZXRlKHQpfSkpKX0pKSxQcm9taXNlLmFsbChsKX0oZSx0LGkrbyxzLGMsbil9OmZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfSx1PWwud2hlbjtpZih1KXt2YXIgZD1yLl9fcmVhZChcImJlZm9yZUNoaWxkcmVuXCI9PT11P1tzLGNdOltjLHNdLDIpLHA9ZFswXSxmPWRbMV07cmV0dXJuIHAoKS50aGVuKGYpfXJldHVybiBQcm9taXNlLmFsbChbcygpLGMobi5kZWxheSldKX1mdW5jdGlvbiBKdChlLHQsbil7dmFyIG8sYT12b2lkIDA9PT1uP3t9Om4saT1hLmRlbGF5LGw9dm9pZCAwPT09aT8wOmkscz1hLnRyYW5zaXRpb25PdmVycmlkZSxjPWEudHlwZSx1PWUubWFrZVRhcmdldEFuaW1hdGFibGUodCksZD11LnRyYW5zaXRpb24scD12b2lkIDA9PT1kP2UuZ2V0RGVmYXVsdFRyYW5zaXRpb24oKTpkLGY9dS50cmFuc2l0aW9uRW5kLGg9ci5fX3Jlc3QodSxbXCJ0cmFuc2l0aW9uXCIsXCJ0cmFuc2l0aW9uRW5kXCJdKTtzJiYocD1zKTt2YXIgZz1bXSx2PWMmJihudWxsPT09KG89ZS5hbmltYXRpb25TdGF0ZSl8fHZvaWQgMD09PW8/dm9pZCAwOm8uZ2V0U3RhdGUoKVtjXSk7Zm9yKHZhciBDIGluIGgpe3ZhciBtPWUuZ2V0VmFsdWUoQyksdz1oW0NdO2lmKCEoIW18fHZvaWQgMD09PXd8fHYmJlF0KHYsQykpKXt2YXIgYj1JdChDLG0sdyxyLl9fYXNzaWduKHtkZWxheTpsfSxwKSk7Zy5wdXNoKGIpfX1yZXR1cm4gUHJvbWlzZS5hbGwoZykudGhlbigoZnVuY3Rpb24oKXtmJiZXdChlLGYpfSkpfWZ1bmN0aW9uIFh0KGUsdCl7cmV0dXJuIGUuc29ydE5vZGVQb3NpdGlvbih0KX1mdW5jdGlvbiBRdChlLHQpe3ZhciBuPWUucHJvdGVjdGVkS2V5cyxyPWUubmVlZHNBbmltYXRpbmcsbz1uLmhhc093blByb3BlcnR5KHQpJiYhMCE9PXJbdF07cmV0dXJuIHJbdF09ITEsb312YXIgZW49W1RlLkFuaW1hdGUsVGUuSG92ZXIsVGUuVGFwLFRlLkRyYWcsVGUuRm9jdXMsVGUuRXhpdF0sdG49ci5fX3NwcmVhZEFycmF5KFtdLHIuX19yZWFkKGVuKSkucmV2ZXJzZSgpLG5uPWVuLmxlbmd0aDtmdW5jdGlvbiBybihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9ITEpLHtpc0FjdGl2ZTplLHByb3RlY3RlZEtleXM6e30sbmVlZHNBbmltYXRpbmc6e30scHJldlJlc29sdmVkVmFsdWVzOnt9fX12YXIgb249e2FuaW1hdGlvbjpwdCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS52aXN1YWxFbGVtZW50LG49ZS5hbmltYXRlO3QuYW5pbWF0aW9uU3RhdGV8fCh0LmFuaW1hdGlvblN0YXRlPWZ1bmN0aW9uKGUpe3ZhciB0LG49ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBQcm9taXNlLmFsbCh0Lm1hcCgoZnVuY3Rpb24odCl7dmFyIG49dC5hbmltYXRpb24scj10Lm9wdGlvbnM7cmV0dXJuIHF0KGUsbixyKX0pKSl9fShlKSxvPSgodD17fSlbVGUuQW5pbWF0ZV09cm4oITApLHRbVGUuSG92ZXJdPXJuKCksdFtUZS5UYXBdPXJuKCksdFtUZS5EcmFnXT1ybigpLHRbVGUuRm9jdXNdPXJuKCksdFtUZS5FeGl0XT1ybigpLHQpLGE9e30saT0hMCxsPWZ1bmN0aW9uKHQsbil7dmFyIG89QShlLG4pO2lmKG8pe28udHJhbnNpdGlvbjt2YXIgYT1vLnRyYW5zaXRpb25FbmQsaT1yLl9fcmVzdChvLFtcInRyYW5zaXRpb25cIixcInRyYW5zaXRpb25FbmRcIl0pO3Q9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sdCksaSksYSl9cmV0dXJuIHR9O2Z1bmN0aW9uIHModCxzKXtmb3IodmFyIGMsdT1lLmdldFByb3BzKCksZD1lLmdldFZhcmlhbnRDb250ZXh0KCEwKXx8e30scD1bXSxmPW5ldyBTZXQsaD17fSxnPTEvMCx2PWZ1bmN0aW9uKG4pe3ZhciBhPXRuW25dLHY9b1thXSxDPW51bGwhPT0oYz11W2FdKSYmdm9pZCAwIT09Yz9jOmRbYV0sbT1WKEMpLHc9YT09PXM/di5pc0FjdGl2ZTpudWxsOyExPT09dyYmKGc9bik7dmFyIGI9Qz09PWRbYV0mJkMhPT11W2FdJiZtO2lmKGImJmkmJmUubWFudWFsbHlBbmltYXRlT25Nb3VudCYmKGI9ITEpLHYucHJvdGVjdGVkS2V5cz1yLl9fYXNzaWduKHt9LGgpLCF2LmlzQWN0aXZlJiZudWxsPT09d3x8IUMmJiF2LnByZXZQcm9wfHxQZShDKXx8XCJib29sZWFuXCI9PXR5cGVvZiBDKXJldHVyblwiY29udGludWVcIjt2YXIgeT1mdW5jdGlvbihlLHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0P3QhPT1lOiEhSSh0KSYmIWh0KHQsZSl9KHYucHJldlByb3AsQyl8fGE9PT1zJiZ2LmlzQWN0aXZlJiYhYiYmbXx8bj5nJiZtLHg9QXJyYXkuaXNBcnJheShDKT9DOltDXSxrPXgucmVkdWNlKGwse30pOyExPT09dyYmKGs9e30pO3ZhciBTPXYucHJldlJlc29sdmVkVmFsdWVzLE89dm9pZCAwPT09Uz97fTpTLE09ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LE8pLGspLEw9ZnVuY3Rpb24oZSl7eT0hMCxmLmRlbGV0ZShlKSx2Lm5lZWRzQW5pbWF0aW5nW2VdPSEwfTtmb3IodmFyIF8gaW4gTSl7dmFyIFA9a1tfXSxFPU9bX107aC5oYXNPd25Qcm9wZXJ0eShfKXx8KFAhPT1FP0VlKFApJiZFZShFKT9odChQLEUpP3YucHJvdGVjdGVkS2V5c1tfXT0hMDpMKF8pOnZvaWQgMCE9PVA/TChfKTpmLmFkZChfKTp2b2lkIDAhPT1QJiZmLmhhcyhfKT9MKF8pOnYucHJvdGVjdGVkS2V5c1tfXT0hMCl9di5wcmV2UHJvcD1DLHYucHJldlJlc29sdmVkVmFsdWVzPWssdi5pc0FjdGl2ZSYmKGg9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGgpLGspKSxpJiZlLmJsb2NrSW5pdGlhbEFuaW1hdGlvbiYmKHk9ITEpLHkmJiFiJiZwLnB1c2guYXBwbHkocCxyLl9fc3ByZWFkQXJyYXkoW10sci5fX3JlYWQoeC5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybnthbmltYXRpb246ZSxvcHRpb25zOnIuX19hc3NpZ24oe3R5cGU6YX0sdCl9fSkpKSkpfSxDPTA7QzxubjtDKyspdihDKTtpZihhPXIuX19hc3NpZ24oe30saCksZi5zaXplKXt2YXIgbT17fTtmLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPWUuZ2V0QmFzZVRhcmdldCh0KTt2b2lkIDAhPT1uJiYobVt0XT1uKX0pKSxwLnB1c2goe2FuaW1hdGlvbjptfSl9dmFyIHc9Qm9vbGVhbihwLmxlbmd0aCk7cmV0dXJuIGkmJiExPT09dS5pbml0aWFsJiYhZS5tYW51YWxseUFuaW1hdGVPbk1vdW50JiYodz0hMSksaT0hMSx3P24ocCk6UHJvbWlzZS5yZXNvbHZlKCl9cmV0dXJue2lzQW5pbWF0ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWFbZV19LGFuaW1hdGVDaGFuZ2VzOnMsc2V0QWN0aXZlOmZ1bmN0aW9uKHQsbixyKXt2YXIgYTtyZXR1cm4gb1t0XS5pc0FjdGl2ZT09PW4/UHJvbWlzZS5yZXNvbHZlKCk6KG51bGw9PT0oYT1lLnZhcmlhbnRDaGlsZHJlbil8fHZvaWQgMD09PWF8fGEuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI7cmV0dXJuIG51bGw9PT0ocj1lLmFuaW1hdGlvblN0YXRlKXx8dm9pZCAwPT09cj92b2lkIDA6ci5zZXRBY3RpdmUodCxuKX0pKSxvW3RdLmlzQWN0aXZlPW4scyhyLHQpKX0sc2V0QW5pbWF0ZUZ1bmN0aW9uOmZ1bmN0aW9uKHQpe249dChlKX0sZ2V0U3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gb319fSh0KSksUGUobikmJm8udXNlRWZmZWN0KChmdW5jdGlvbigpe3JldHVybiBuLnN1YnNjcmliZSh0KX0pLFtuXSl9KSksZXhpdDpwdCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jdXN0b20sbj1lLnZpc3VhbEVsZW1lbnQsYT1yLl9fcmVhZChTKCksMiksaT1hWzBdLGw9YVsxXSxzPW8udXNlQ29udGV4dCh4KTtvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXt2YXIgZSxyLG89bnVsbD09PShlPW4uYW5pbWF0aW9uU3RhdGUpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnNldEFjdGl2ZShUZS5FeGl0LCFpLHtjdXN0b206bnVsbCE9PShyPW51bGw9PXM/dm9pZCAwOnMuY3VzdG9tKSYmdm9pZCAwIT09cj9yOnR9KTshaSYmKG51bGw9PW98fG8udGhlbihsKSl9KSxbaV0pfSkpfSxhbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3ZhciBvPXRoaXMsYT0odm9pZCAwPT09bj97fTpuKS50cmFuc2Zvcm1QYWdlUG9pbnQ7aWYodGhpcy5zdGFydEV2ZW50PW51bGwsdGhpcy5sYXN0TW92ZUV2ZW50PW51bGwsdGhpcy5sYXN0TW92ZUV2ZW50SW5mbz1udWxsLHRoaXMuaGFuZGxlcnM9e30sdGhpcy51cGRhdGVQb2ludD1mdW5jdGlvbigpe2lmKG8ubGFzdE1vdmVFdmVudCYmby5sYXN0TW92ZUV2ZW50SW5mbyl7dmFyIGU9Y24oby5sYXN0TW92ZUV2ZW50SW5mbyxvLmhpc3RvcnkpLHQ9bnVsbCE9PW8uc3RhcnRFdmVudCxuPWwuZGlzdGFuY2UoZS5vZmZzZXQse3g6MCx5OjB9KT49MztpZih0fHxuKXt2YXIgYT1lLnBvaW50LGk9cy5nZXRGcmFtZURhdGEoKS50aW1lc3RhbXA7by5oaXN0b3J5LnB1c2goci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGEpLHt0aW1lc3RhbXA6aX0pKTt2YXIgYz1vLmhhbmRsZXJzLHU9Yy5vblN0YXJ0LGQ9Yy5vbk1vdmU7dHx8KHUmJnUoby5sYXN0TW92ZUV2ZW50LGUpLG8uc3RhcnRFdmVudD1vLmxhc3RNb3ZlRXZlbnQpLGQmJmQoby5sYXN0TW92ZUV2ZW50LGUpfX19LHRoaXMuaGFuZGxlUG9pbnRlck1vdmU9ZnVuY3Rpb24oZSx0KXtvLmxhc3RNb3ZlRXZlbnQ9ZSxvLmxhc3RNb3ZlRXZlbnRJbmZvPWxuKHQsby50cmFuc2Zvcm1QYWdlUG9pbnQpLEZlKGUpJiYwPT09ZS5idXR0b25zP28uaGFuZGxlUG9pbnRlclVwKGUsdCk6cC5kZWZhdWx0LnVwZGF0ZShvLnVwZGF0ZVBvaW50LCEwKX0sdGhpcy5oYW5kbGVQb2ludGVyVXA9ZnVuY3Rpb24oZSx0KXtvLmVuZCgpO3ZhciBuPW8uaGFuZGxlcnMscj1uLm9uRW5kLGE9bi5vblNlc3Npb25FbmQsaT1jbihsbih0LG8udHJhbnNmb3JtUGFnZVBvaW50KSxvLmhpc3RvcnkpO28uc3RhcnRFdmVudCYmciYmcihlLGkpLGEmJmEoZSxpKX0sIShXZShlKSYmZS50b3VjaGVzLmxlbmd0aD4xKSl7dGhpcy5oYW5kbGVycz10LHRoaXMudHJhbnNmb3JtUGFnZVBvaW50PWE7dmFyIGk9bG4oS2UoZSksdGhpcy50cmFuc2Zvcm1QYWdlUG9pbnQpLGM9aS5wb2ludCx1PXMuZ2V0RnJhbWVEYXRhKCkudGltZXN0YW1wO3RoaXMuaGlzdG9yeT1bci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGMpLHt0aW1lc3RhbXA6dX0pXTt2YXIgZD10Lm9uU2Vzc2lvblN0YXJ0O2QmJmQoZSxjbihpLHRoaXMuaGlzdG9yeSkpLHRoaXMucmVtb3ZlTGlzdGVuZXJzPWwucGlwZShudCh3aW5kb3csXCJwb2ludGVybW92ZVwiLHRoaXMuaGFuZGxlUG9pbnRlck1vdmUpLG50KHdpbmRvdyxcInBvaW50ZXJ1cFwiLHRoaXMuaGFuZGxlUG9pbnRlclVwKSxudCh3aW5kb3csXCJwb2ludGVyY2FuY2VsXCIsdGhpcy5oYW5kbGVQb2ludGVyVXApKX19cmV0dXJuIGUucHJvdG90eXBlLnVwZGF0ZUhhbmRsZXJzPWZ1bmN0aW9uKGUpe3RoaXMuaGFuZGxlcnM9ZX0sZS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVMaXN0ZW5lcnMmJnRoaXMucmVtb3ZlTGlzdGVuZXJzKCkscy5jYW5jZWxTeW5jLnVwZGF0ZSh0aGlzLnVwZGF0ZVBvaW50KX0sZX0oKTtmdW5jdGlvbiBsbihlLHQpe3JldHVybiB0P3twb2ludDp0KGUucG9pbnQpfTplfWZ1bmN0aW9uIHNuKGUsdCl7cmV0dXJue3g6ZS54LXQueCx5OmUueS10Lnl9fWZ1bmN0aW9uIGNuKGUsdCl7dmFyIG49ZS5wb2ludDtyZXR1cm57cG9pbnQ6bixkZWx0YTpzbihuLGRuKHQpKSxvZmZzZXQ6c24obix1bih0KSksdmVsb2NpdHk6cG4odCwuMSl9fWZ1bmN0aW9uIHVuKGUpe3JldHVybiBlWzBdfWZ1bmN0aW9uIGRuKGUpe3JldHVybiBlW2UubGVuZ3RoLTFdfWZ1bmN0aW9uIHBuKGUsdCl7aWYoZS5sZW5ndGg8MilyZXR1cm57eDowLHk6MH07Zm9yKHZhciBuPWUubGVuZ3RoLTEscj1udWxsLG89ZG4oZSk7bj49MCYmKHI9ZVtuXSwhKG8udGltZXN0YW1wLXIudGltZXN0YW1wPmd0KHQpKSk7KW4tLTtpZighcilyZXR1cm57eDowLHk6MH07dmFyIGE9KG8udGltZXN0YW1wLXIudGltZXN0YW1wKS8xZTM7aWYoMD09PWEpcmV0dXJue3g6MCx5OjB9O3ZhciBpPXt4OihvLngtci54KS9hLHk6KG8ueS1yLnkpL2F9O3JldHVybiBpLng9PT0xLzAmJihpLng9MCksaS55PT09MS8wJiYoaS55PTApLGl9ZnVuY3Rpb24gZm4oZSl7cmV0dXJuIGV9ZnVuY3Rpb24gaG4oZSl7dmFyIHQ9ZS50b3A7cmV0dXJue3g6e21pbjplLmxlZnQsbWF4OmUucmlnaHR9LHk6e21pbjp0LG1heDplLmJvdHRvbX19fXZhciBnbj17dHJhbnNsYXRlOjAsc2NhbGU6MSxvcmlnaW46MCxvcmlnaW5Qb2ludDowfTtmdW5jdGlvbiB2bigpe3JldHVybnt4OnIuX19hc3NpZ24oe30sZ24pLHk6ci5fX2Fzc2lnbih7fSxnbil9fWZ1bmN0aW9uIENuKGUpe3JldHVybltlKFwieFwiKSxlKFwieVwiKV19ZnVuY3Rpb24gbW4oZSx0LG4pe3JldHVybiB2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1uJiYobj0uMDEpLGwuZGlzdGFuY2UoZSx0KTxufWZ1bmN0aW9uIHduKGUpe3JldHVybiBlLm1heC1lLm1pbn1mdW5jdGlvbiBibihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj0uNSksZS5vcmlnaW49cixlLm9yaWdpblBvaW50PWwubWl4KHQubWluLHQubWF4LGUub3JpZ2luKSxlLnNjYWxlPXduKG4pL3duKHQpLG1uKGUuc2NhbGUsMSwxZS00KSYmKGUuc2NhbGU9MSksZS50cmFuc2xhdGU9bC5taXgobi5taW4sbi5tYXgsZS5vcmlnaW4pLWUub3JpZ2luUG9pbnQsbW4oZS50cmFuc2xhdGUpJiYoZS50cmFuc2xhdGU9MCl9ZnVuY3Rpb24geW4oZSx0LG4scil7Ym4oZS54LHQueCxuLngseG4oci5vcmlnaW5YKSksYm4oZS55LHQueSxuLnkseG4oci5vcmlnaW5ZKSl9ZnVuY3Rpb24geG4oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGU/ZTouNX1mdW5jdGlvbiBrbihlLHQsbil7ZS5taW49bi5taW4rdC5taW4sZS5tYXg9ZS5taW4rd24odCl9ZnVuY3Rpb24gU24oZSx0LG4pe3ZhciByPXQubWluLG89dC5tYXg7cmV0dXJuIHZvaWQgMCE9PXImJmU8cj9lPW4/bC5taXgocixlLG4ubWluKTpNYXRoLm1heChlLHIpOnZvaWQgMCE9PW8mJmU+byYmKGU9bj9sLm1peChvLGUsbi5tYXgpOk1hdGgubWluKGUsbykpLGV9ZnVuY3Rpb24gT24oZSx0LG4pe3JldHVybnttaW46dm9pZCAwIT09dD9lLm1pbit0OnZvaWQgMCxtYXg6dm9pZCAwIT09bj9lLm1heCtuLShlLm1heC1lLm1pbik6dm9pZCAwfX1mdW5jdGlvbiBNbihlLHQpe3ZhciBuLG89dC5taW4tZS5taW4sYT10Lm1heC1lLm1heDtyZXR1cm4gdC5tYXgtdC5taW48ZS5tYXgtZS5taW4mJihvPShuPXIuX19yZWFkKFthLG9dLDIpKVswXSxhPW5bMV0pLHttaW46ZS5taW4rbyxtYXg6ZS5taW4rYX19ZnVuY3Rpb24gTG4oZSx0LG4pe3JldHVybnttaW46X24oZSx0KSxtYXg6X24oZSxuKX19ZnVuY3Rpb24gX24oZSx0KXt2YXIgbjtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZT9lOm51bGwhPT0obj1lW3RdKSYmdm9pZCAwIT09bj9uOjB9ZnVuY3Rpb24gUG4oZSx0KXtyZXR1cm4gaG4oZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnRvcCxyPWUubGVmdCxvPWUuYm90dG9tLGE9ZS5yaWdodDt2b2lkIDA9PT10JiYodD1mbik7dmFyIGk9dCh7eDpyLHk6bn0pLGw9dCh7eDphLHk6b30pO3JldHVybnt0b3A6aS55LGxlZnQ6aS54LGJvdHRvbTpsLnkscmlnaHQ6bC54fX0oZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0KSl9dmFyIEVuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZGVwdGgtdC5kZXB0aH07ZnVuY3Rpb24gam4oZSl7cmV0dXJuIGUucHJvamVjdGlvbi5pc0VuYWJsZWR8fGUuc2hvdWxkUmVzZXRUcmFuc2Zvcm0oKX1mdW5jdGlvbiBSbihlLHQpe3ZvaWQgMD09PXQmJih0PVtdKTt2YXIgbj1lLnBhcmVudDtyZXR1cm4gbiYmUm4obix0KSxqbihlKSYmdC5wdXNoKGUpLHR9ZnVuY3Rpb24gSW4oZSl7aWYoIWUuc2hvdWxkUmVzZXRUcmFuc2Zvcm0oKSl7dmFyIHQsbj1lLmdldExheW91dFN0YXRlKCk7ZS5ub3RpZnlCZWZvcmVMYXlvdXRNZWFzdXJlKG4ubGF5b3V0KSxuLmlzSHlkcmF0ZWQ9ITAsbi5sYXlvdXQ9ZS5tZWFzdXJlVmlld3BvcnRCb3goKSxuLmxheW91dENvcnJlY3RlZD0odD1uLmxheW91dCx7eDpyLl9fYXNzaWduKHt9LHQueCkseTpyLl9fYXNzaWduKHt9LHQueSl9KSxlLm5vdGlmeUxheW91dE1lYXN1cmUobi5sYXlvdXQsZS5wcmV2Vmlld3BvcnRCb3h8fG4ubGF5b3V0KSxwLmRlZmF1bHQudXBkYXRlKChmdW5jdGlvbigpe3JldHVybiBlLnJlYmFzZVByb2plY3Rpb25UYXJnZXQoKX0pKX19ZnVuY3Rpb24gVm4oZSl7ZS5zaG91bGRSZXNldFRyYW5zZm9ybSgpfHwoZS5wcmV2Vmlld3BvcnRCb3g9ZS5tZWFzdXJlVmlld3BvcnRCb3goITEpLGUucmViYXNlUHJvamVjdGlvblRhcmdldCghMSxlLnByZXZWaWV3cG9ydEJveCkpfWZ1bmN0aW9uIEhuKGUsdCl7cmV0dXJue21pbjp0Lm1pbi1lLm1pbixtYXg6dC5tYXgtZS5taW59fWZ1bmN0aW9uIEFuKGUsdCl7cmV0dXJue3g6SG4oZS54LHQueCkseTpIbihlLnksdC55KX19ZnVuY3Rpb24gVG4oZSl7dmFyIHQ9ZS5nZXRQcm9wcygpLG49dC5kcmFnLHI9dC5fZHJhZ1g7cmV0dXJuIG4mJiFyfWZ1bmN0aW9uIERuKGUsdCl7ZS5taW49dC5taW4sZS5tYXg9dC5tYXh9ZnVuY3Rpb24gQm4oZSx0LG4pe3JldHVybiBuK3QqKGUtbil9ZnVuY3Rpb24gWm4oZSx0LG4scixvKXtyZXR1cm4gdm9pZCAwIT09byYmKGU9Qm4oZSxvLHIpKSxCbihlLG4scikrdH1mdW5jdGlvbiAkbihlLHQsbixyLG8pe3ZvaWQgMD09PXQmJih0PTApLHZvaWQgMD09PW4mJihuPTEpLGUubWluPVpuKGUubWluLHQsbixyLG8pLGUubWF4PVpuKGUubWF4LHQsbixyLG8pfWZ1bmN0aW9uIE5uKGUsdCl7dmFyIG49dC54LHI9dC55OyRuKGUueCxuLnRyYW5zbGF0ZSxuLnNjYWxlLG4ub3JpZ2luUG9pbnQpLCRuKGUueSxyLnRyYW5zbGF0ZSxyLnNjYWxlLHIub3JpZ2luUG9pbnQpfWZ1bmN0aW9uIEZuKGUsdCxuLG8pe3ZhciBhPXIuX19yZWFkKG8sMyksaT1hWzBdLHM9YVsxXSxjPWFbMl07ZS5taW49dC5taW4sZS5tYXg9dC5tYXg7dmFyIHU9dm9pZCAwIT09bltjXT9uW2NdOi41LGQ9bC5taXgodC5taW4sdC5tYXgsdSk7JG4oZSxuW2ldLG5bc10sZCxuLnNjYWxlKX12YXIgV249W1wieFwiLFwic2NhbGVYXCIsXCJvcmlnaW5YXCJdLFVuPVtcInlcIixcInNjYWxlWVwiLFwib3JpZ2luWVwiXTtmdW5jdGlvbiB6bihlLHQsbil7Rm4oZS54LHQueCxuLFduKSxGbihlLnksdC55LG4sVW4pfWZ1bmN0aW9uIEduKGUsdCxuLHIsbyl7cmV0dXJuIGU9Qm4oZS09dCwxL24sciksdm9pZCAwIT09byYmKGU9Qm4oZSwxL28scikpLGV9ZnVuY3Rpb24gS24oZSx0LG4pe3ZhciBvPXIuX19yZWFkKG4sMyksYT1vWzBdLGk9b1sxXSxzPW9bMl07IWZ1bmN0aW9uKGUsdCxuLHIsbyl7dm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09biYmKG49MSksdm9pZCAwPT09ciYmKHI9LjUpO3ZhciBhPWwubWl4KGUubWluLGUubWF4LHIpLXQ7ZS5taW49R24oZS5taW4sdCxuLGEsbyksZS5tYXg9R24oZS5tYXgsdCxuLGEsbyl9KGUsdFthXSx0W2ldLHRbc10sdC5zY2FsZSl9ZnVuY3Rpb24gcW4oZSx0KXtLbihlLngsdCxXbiksS24oZS55LHQsVW4pfXZhciBZbj1uZXcgU2V0O2Z1bmN0aW9uIEpuKGUsdCxuKXtlW25dfHwoZVtuXT1bXSksZVtuXS5wdXNoKHQpfWZ1bmN0aW9uIFhuKGUpe3JldHVybiBZbi5hZGQoZSksZnVuY3Rpb24oKXtyZXR1cm4gWW4uZGVsZXRlKGUpfX1mdW5jdGlvbiBRbigpe2lmKFluLnNpemUpe3ZhciBlPTAsdD1bW11dLG49W10scj1mdW5jdGlvbihuKXtyZXR1cm4gSm4odCxuLGUpfSxvPWZ1bmN0aW9uKHQpe0puKG4sdCxlKSxlKyt9O1luLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QocixvKSxlPTB9KSksWW4uY2xlYXIoKTtmb3IodmFyIGE9bi5sZW5ndGgsaT0wO2k8PWE7aSsrKXRbaV0mJnRbaV0uZm9yRWFjaCh0ciksbltpXSYmbltpXS5mb3JFYWNoKHRyKX19dmFyIGVyLHRyPWZ1bmN0aW9uKGUpe3JldHVybiBlKCl9LG5yPW5ldyBXZWFrTWFwLHJyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgdD1lLnZpc3VhbEVsZW1lbnQ7dGhpcy5pc0RyYWdnaW5nPSExLHRoaXMuY3VycmVudERpcmVjdGlvbj1udWxsLHRoaXMuY29uc3RyYWludHM9ITEsdGhpcy5lbGFzdGljPXt4OnttaW46MCxtYXg6MX0seTp7bWluOjAsbWF4OjF9fSx0aGlzLnByb3BzPXt9LHRoaXMuaGFzTXV0YXRlZENvbnN0cmFpbnRzPSExLHRoaXMuY3Vyc29yUHJvZ3Jlc3M9e3g6LjUseTouNX0sdGhpcy5vcmlnaW5Qb2ludD17fSx0aGlzLm9wZW5HbG9iYWxMb2NrPW51bGwsdGhpcy5wYW5TZXNzaW9uPW51bGwsdGhpcy52aXN1YWxFbGVtZW50PXQsdGhpcy52aXN1YWxFbGVtZW50LmVuYWJsZUxheW91dFByb2plY3Rpb24oKSxuci5zZXQodCx0aGlzKX1yZXR1cm4gZS5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLG89dm9pZCAwPT09dD97fTp0LGE9by5zbmFwVG9DdXJzb3IsaT12b2lkIDAhPT1hJiZhLGM9by5jdXJzb3JQcm9ncmVzcyx1PXRoaXMucHJvcHMudHJhbnNmb3JtUGFnZVBvaW50O3RoaXMucGFuU2Vzc2lvbj1uZXcgYW4oZSx7b25TZXNzaW9uU3RhcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ7bi5zdG9wTW90aW9uKCk7dmFyIG89ZnVuY3Rpb24oZSl7cmV0dXJuIEtlKGUsXCJjbGllbnRcIil9KGUpLnBvaW50O251bGw9PT0odD1uLmNhbmNlbExheW91dCl8fHZvaWQgMD09PXR8fHQuY2FsbChuKSxuLmNhbmNlbExheW91dD1YbigoZnVuY3Rpb24oZSx0KXt2YXIgYT1SbihuLnZpc3VhbEVsZW1lbnQpLHU9ZnVuY3Rpb24oZSl7dmFyIHQ9W10sbj1mdW5jdGlvbihlKXtqbihlKSYmdC5wdXNoKGUpLGUuY2hpbGRyZW4uZm9yRWFjaChuKX07cmV0dXJuIGUuY2hpbGRyZW4uZm9yRWFjaChuKSx0LnNvcnQoRW4pfShuLnZpc3VhbEVsZW1lbnQpLGQ9ci5fX3NwcmVhZEFycmF5KHIuX19zcHJlYWRBcnJheShbXSxyLl9fcmVhZChhKSksci5fX3JlYWQodSkpLHA9ITE7bi5pc0xheW91dERyYWcoKSYmbi52aXN1YWxFbGVtZW50LmxvY2tQcm9qZWN0aW9uVGFyZ2V0KCksdCgoZnVuY3Rpb24oKXtkLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlc2V0VHJhbnNmb3JtKCl9KSl9KSksZSgoZnVuY3Rpb24oKXtJbihuLnZpc3VhbEVsZW1lbnQpLHUuZm9yRWFjaChJbil9KSksdCgoZnVuY3Rpb24oKXtkLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlc3RvcmVUcmFuc2Zvcm0oKX0pKSxpJiYocD1uLnNuYXBUb0N1cnNvcihvKSl9KSksZSgoZnVuY3Rpb24oKXtCb29sZWFuKG4uZ2V0QXhpc01vdGlvblZhbHVlKFwieFwiKSYmIW4uaXNFeHRlcm5hbERyYWcoKSl8fG4udmlzdWFsRWxlbWVudC5yZWJhc2VQcm9qZWN0aW9uVGFyZ2V0KCEwLG4udmlzdWFsRWxlbWVudC5tZWFzdXJlVmlld3BvcnRCb3goITEpKSxuLnZpc3VhbEVsZW1lbnQuc2NoZWR1bGVVcGRhdGVMYXlvdXRQcm9qZWN0aW9uKCk7dmFyIGU9bi52aXN1YWxFbGVtZW50LnByb2plY3Rpb247Q24oKGZ1bmN0aW9uKHQpe2lmKCFwKXt2YXIgcj1lLnRhcmdldFt0XSxhPXIubWluLGk9ci5tYXg7bi5jdXJzb3JQcm9ncmVzc1t0XT1jP2NbdF06bC5wcm9ncmVzcyhhLGksb1t0XSl9dmFyIHM9bi5nZXRBeGlzTW90aW9uVmFsdWUodCk7cyYmKG4ub3JpZ2luUG9pbnRbdF09cy5nZXQoKSl9KSl9KSksdCgoZnVuY3Rpb24oKXtzLmZsdXNoU3luYy51cGRhdGUoKSxzLmZsdXNoU3luYy5wcmVSZW5kZXIoKSxzLmZsdXNoU3luYy5yZW5kZXIoKSxzLmZsdXNoU3luYy5wb3N0UmVuZGVyKCl9KSksZSgoZnVuY3Rpb24oKXtyZXR1cm4gbi5yZXNvbHZlRHJhZ0NvbnN0cmFpbnRzKCl9KSl9KSl9LG9uU3RhcnQ6ZnVuY3Rpb24oZSx0KXt2YXIgcixvLGEsaT1uLnByb3BzLGw9aS5kcmFnLHM9aS5kcmFnUHJvcGFnYXRpb247KCFsfHxzfHwobi5vcGVuR2xvYmFsTG9jayYmbi5vcGVuR2xvYmFsTG9jaygpLG4ub3Blbkdsb2JhbExvY2s9bHQobCksbi5vcGVuR2xvYmFsTG9jaykpJiYoUW4oKSxuLmlzRHJhZ2dpbmc9ITAsbi5jdXJyZW50RGlyZWN0aW9uPW51bGwsbnVsbD09PShvPShyPW4ucHJvcHMpLm9uRHJhZ1N0YXJ0KXx8dm9pZCAwPT09b3x8by5jYWxsKHIsZSx0KSxudWxsPT09KGE9bi52aXN1YWxFbGVtZW50LmFuaW1hdGlvblN0YXRlKXx8dm9pZCAwPT09YXx8YS5zZXRBY3RpdmUoVGUuRHJhZywhMCkpfSxvbk1vdmU6ZnVuY3Rpb24oZSx0KXt2YXIgcixvLGEsaSxsPW4ucHJvcHMscz1sLmRyYWdQcm9wYWdhdGlvbixjPWwuZHJhZ0RpcmVjdGlvbkxvY2s7aWYoc3x8bi5vcGVuR2xvYmFsTG9jayl7dmFyIHU9dC5vZmZzZXQ7aWYoYyYmbnVsbD09PW4uY3VycmVudERpcmVjdGlvbilyZXR1cm4gbi5jdXJyZW50RGlyZWN0aW9uPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9MTApO3ZhciBuPW51bGw7cmV0dXJuIE1hdGguYWJzKGUueSk+dD9uPVwieVwiOk1hdGguYWJzKGUueCk+dCYmKG49XCJ4XCIpLG59KHUpLHZvaWQobnVsbCE9PW4uY3VycmVudERpcmVjdGlvbiYmKG51bGw9PT0obz0ocj1uLnByb3BzKS5vbkRpcmVjdGlvbkxvY2spfHx2b2lkIDA9PT1vfHxvLmNhbGwocixuLmN1cnJlbnREaXJlY3Rpb24pKSk7bi51cGRhdGVBeGlzKFwieFwiLHQucG9pbnQsdSksbi51cGRhdGVBeGlzKFwieVwiLHQucG9pbnQsdSksbnVsbD09PShpPShhPW4ucHJvcHMpLm9uRHJhZyl8fHZvaWQgMD09PWl8fGkuY2FsbChhLGUsdCksZXI9ZX19LG9uU2Vzc2lvbkVuZDpmdW5jdGlvbihlLHQpe3JldHVybiBuLnN0b3AoZSx0KX19LHt0cmFuc2Zvcm1QYWdlUG9pbnQ6dX0pfSxlLnByb3RvdHlwZS5yZXNvbHZlRHJhZ0NvbnN0cmFpbnRzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMsbj10LmRyYWdDb25zdHJhaW50cyxyPXQuZHJhZ0VsYXN0aWMsbz10aGlzLnZpc3VhbEVsZW1lbnQuZ2V0TGF5b3V0U3RhdGUoKS5sYXlvdXRDb3JyZWN0ZWQ7dGhpcy5jb25zdHJhaW50cz0hIW4mJihSKG4pP3RoaXMucmVzb2x2ZVJlZkNvbnN0cmFpbnRzKG8sbik6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnRvcCxyPXQubGVmdCxvPXQuYm90dG9tLGE9dC5yaWdodDtyZXR1cm57eDpPbihlLngscixhKSx5Ok9uKGUueSxuLG8pfX0obyxuKSksdGhpcy5lbGFzdGljPWZ1bmN0aW9uKGUpe3JldHVybiExPT09ZT9lPTA6ITA9PT1lJiYoZT0uMzUpLHt4OkxuKGUsXCJsZWZ0XCIsXCJyaWdodFwiKSx5OkxuKGUsXCJ0b3BcIixcImJvdHRvbVwiKX19KHIpLHRoaXMuY29uc3RyYWludHMmJiF0aGlzLmhhc011dGF0ZWRDb25zdHJhaW50cyYmQ24oKGZ1bmN0aW9uKHQpe2UuZ2V0QXhpc01vdGlvblZhbHVlKHQpJiYoZS5jb25zdHJhaW50c1t0XT1mdW5jdGlvbihlLHQpe3ZhciBuPXt9O3JldHVybiB2b2lkIDAhPT10Lm1pbiYmKG4ubWluPXQubWluLWUubWluKSx2b2lkIDAhPT10Lm1heCYmKG4ubWF4PXQubWF4LWUubWluKSxufShvW3RdLGUuY29uc3RyYWludHNbdF0pKX0pKX0sZS5wcm90b3R5cGUucmVzb2x2ZVJlZkNvbnN0cmFpbnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5wcm9wcyxyPW4ub25NZWFzdXJlRHJhZ0NvbnN0cmFpbnRzLG89bi50cmFuc2Zvcm1QYWdlUG9pbnQsaT10LmN1cnJlbnQ7YS5pbnZhcmlhbnQobnVsbCE9PWksXCJJZiBgZHJhZ0NvbnN0cmFpbnRzYCBpcyBzZXQgYXMgYSBSZWFjdCByZWYsIHRoYXQgcmVmIG11c3QgYmUgcGFzc2VkIHRvIGFub3RoZXIgY29tcG9uZW50J3MgYHJlZmAgcHJvcC5cIiksdGhpcy5jb25zdHJhaW50c0JveD1QbihpLG8pO3ZhciBsPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3g6TW4oZS54LHQueCkseTpNbihlLnksdC55KX19KGUsdGhpcy5jb25zdHJhaW50c0JveCk7aWYocil7dmFyIHM9cihmdW5jdGlvbihlKXt2YXIgdD1lLngsbj1lLnk7cmV0dXJue3RvcDpuLm1pbixib3R0b206bi5tYXgsbGVmdDp0Lm1pbixyaWdodDp0Lm1heH19KGwpKTt0aGlzLmhhc011dGF0ZWRDb25zdHJhaW50cz0hIXMscyYmKGw9aG4ocykpfXJldHVybiBsfSxlLnByb3RvdHlwZS5jYW5jZWxEcmFnPWZ1bmN0aW9uKCl7dmFyIGUsdDt0aGlzLnZpc3VhbEVsZW1lbnQudW5sb2NrUHJvamVjdGlvblRhcmdldCgpLG51bGw9PT0oZT10aGlzLmNhbmNlbExheW91dCl8fHZvaWQgMD09PWV8fGUuY2FsbCh0aGlzKSx0aGlzLmlzRHJhZ2dpbmc9ITEsdGhpcy5wYW5TZXNzaW9uJiZ0aGlzLnBhblNlc3Npb24uZW5kKCksdGhpcy5wYW5TZXNzaW9uPW51bGwsIXRoaXMucHJvcHMuZHJhZ1Byb3BhZ2F0aW9uJiZ0aGlzLm9wZW5HbG9iYWxMb2NrJiYodGhpcy5vcGVuR2xvYmFsTG9jaygpLHRoaXMub3Blbkdsb2JhbExvY2s9bnVsbCksbnVsbD09PSh0PXRoaXMudmlzdWFsRWxlbWVudC5hbmltYXRpb25TdGF0ZSl8fHZvaWQgMD09PXR8fHQuc2V0QWN0aXZlKFRlLkRyYWcsITEpfSxlLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixvO251bGw9PT0obj10aGlzLnBhblNlc3Npb24pfHx2b2lkIDA9PT1ufHxuLmVuZCgpLHRoaXMucGFuU2Vzc2lvbj1udWxsO3ZhciBhPXRoaXMuaXNEcmFnZ2luZztpZih0aGlzLmNhbmNlbERyYWcoKSxhKXt2YXIgaT10LnZlbG9jaXR5O3RoaXMuYW5pbWF0ZURyYWdFbmQoaSksbnVsbD09PShvPShyPXRoaXMucHJvcHMpLm9uRHJhZ0VuZCl8fHZvaWQgMD09PW98fG8uY2FsbChyLGUsdCl9fSxlLnByb3RvdHlwZS5zbmFwVG9DdXJzb3I9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztyZXR1cm4gQ24oKGZ1bmN0aW9uKG4pe2lmKG9yKG4sdC5wcm9wcy5kcmFnLHQuY3VycmVudERpcmVjdGlvbikpe3ZhciByPXQuZ2V0QXhpc01vdGlvblZhbHVlKG4pO2lmKCFyKXJldHVybiB0LmN1cnNvclByb2dyZXNzW25dPS41LCEwO3ZhciBvPXQudmlzdWFsRWxlbWVudC5nZXRMYXlvdXRTdGF0ZSgpLmxheW91dCxhPW9bbl0ubWF4LW9bbl0ubWluLGk9b1tuXS5taW4rYS8yLGw9ZVtuXS1pO3Qub3JpZ2luUG9pbnRbbl09ZVtuXSxyLnNldChsKX19KSkuaW5jbHVkZXMoITApfSxlLnByb3RvdHlwZS51cGRhdGVBeGlzPWZ1bmN0aW9uKGUsdCxuKXtpZihvcihlLHRoaXMucHJvcHMuZHJhZyx0aGlzLmN1cnJlbnREaXJlY3Rpb24pKXJldHVybiB0aGlzLmdldEF4aXNNb3Rpb25WYWx1ZShlKT90aGlzLnVwZGF0ZUF4aXNNb3Rpb25WYWx1ZShlLG4pOnRoaXMudXBkYXRlVmlzdWFsRWxlbWVudEF4aXMoZSx0KX0sZS5wcm90b3R5cGUudXBkYXRlQXhpc01vdGlvblZhbHVlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5nZXRBeGlzTW90aW9uVmFsdWUoZSk7aWYodCYmbil7dmFyIHI9dGhpcy5vcmlnaW5Qb2ludFtlXSt0W2VdLG89dGhpcy5jb25zdHJhaW50cz9TbihyLHRoaXMuY29uc3RyYWludHNbZV0sdGhpcy5lbGFzdGljW2VdKTpyO24uc2V0KG8pfX0sZS5wcm90b3R5cGUudXBkYXRlVmlzdWFsRWxlbWVudEF4aXM9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPXRoaXMudmlzdWFsRWxlbWVudC5nZXRMYXlvdXRTdGF0ZSgpLmxheW91dFtlXSxvPXIubWF4LXIubWluLGE9dGhpcy5jdXJzb3JQcm9ncmVzc1tlXSxpPWZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIGE9ZS10Km47cmV0dXJuIHI/U24oYSxyLG8pOmF9KHRbZV0sbyxhLG51bGw9PT0obj10aGlzLmNvbnN0cmFpbnRzKXx8dm9pZCAwPT09bj92b2lkIDA6bltlXSx0aGlzLmVsYXN0aWNbZV0pO3RoaXMudmlzdWFsRWxlbWVudC5zZXRQcm9qZWN0aW9uVGFyZ2V0QXhpcyhlLGksaStvKX0sZS5wcm90b3R5cGUuc2V0UHJvcHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kcmFnLG49dm9pZCAwIT09dCYmdCxvPWUuZHJhZ0RpcmVjdGlvbkxvY2ssYT12b2lkIDAhPT1vJiZvLGk9ZS5kcmFnUHJvcGFnYXRpb24sbD12b2lkIDAhPT1pJiZpLHM9ZS5kcmFnQ29uc3RyYWludHMsYz12b2lkIDAhPT1zJiZzLHU9ZS5kcmFnRWxhc3RpYyxkPXZvaWQgMD09PXU/LjM1OnUscD1lLmRyYWdNb21lbnR1bSxmPXZvaWQgMD09PXB8fHAsaD1yLl9fcmVzdChlLFtcImRyYWdcIixcImRyYWdEaXJlY3Rpb25Mb2NrXCIsXCJkcmFnUHJvcGFnYXRpb25cIixcImRyYWdDb25zdHJhaW50c1wiLFwiZHJhZ0VsYXN0aWNcIixcImRyYWdNb21lbnR1bVwiXSk7dGhpcy5wcm9wcz1yLl9fYXNzaWduKHtkcmFnOm4sZHJhZ0RpcmVjdGlvbkxvY2s6YSxkcmFnUHJvcGFnYXRpb246bCxkcmFnQ29uc3RyYWludHM6YyxkcmFnRWxhc3RpYzpkLGRyYWdNb21lbnR1bTpmfSxoKX0sZS5wcm90b3R5cGUuZ2V0QXhpc01vdGlvblZhbHVlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMsbj10LmxheW91dCxyPXQubGF5b3V0SWQsbz1cIl9kcmFnXCIrZS50b1VwcGVyQ2FzZSgpO3JldHVybiB0aGlzLnByb3BzW29dP3RoaXMucHJvcHNbb106bnx8dm9pZCAwIT09cj92b2lkIDA6dGhpcy52aXN1YWxFbGVtZW50LmdldFZhbHVlKGUsMCl9LGUucHJvdG90eXBlLmlzTGF5b3V0RHJhZz1mdW5jdGlvbigpe3JldHVybiF0aGlzLmdldEF4aXNNb3Rpb25WYWx1ZShcInhcIil9LGUucHJvdG90eXBlLmlzRXh0ZXJuYWxEcmFnPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuX2RyYWdYLG49ZS5fZHJhZ1k7cmV0dXJuIHR8fG59LGUucHJvdG90eXBlLmFuaW1hdGVEcmFnRW5kPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10aGlzLnByb3BzLG89bi5kcmFnLGE9bi5kcmFnTW9tZW50dW0saT1uLmRyYWdFbGFzdGljLGw9bi5kcmFnVHJhbnNpdGlvbixzPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9ITApO3ZhciBuLHI9ZS5nZXRQcm9qZWN0aW9uUGFyZW50KCk7cmV0dXJuISFyJiYodD9xbihuPUFuKHIucHJvamVjdGlvbi50YXJnZXQsZS5wcm9qZWN0aW9uLnRhcmdldCksci5nZXRMYXRlc3RWYWx1ZXMoKSk6bj1BbihyLmdldExheW91dFN0YXRlKCkubGF5b3V0LGUuZ2V0TGF5b3V0U3RhdGUoKS5sYXlvdXQpLENuKChmdW5jdGlvbih0KXtyZXR1cm4gZS5zZXRQcm9qZWN0aW9uVGFyZ2V0QXhpcyh0LG5bdF0ubWluLG5bdF0ubWF4LCEwKX0pKSwhMCl9KHRoaXMudmlzdWFsRWxlbWVudCx0aGlzLmlzTGF5b3V0RHJhZygpJiYhdGhpcy5pc0V4dGVybmFsRHJhZygpKSxjPXRoaXMuY29uc3RyYWludHN8fHt9O2lmKHMmJk9iamVjdC5rZXlzKGMpLmxlbmd0aCYmdGhpcy5pc0xheW91dERyYWcoKSl7dmFyIHU9dGhpcy52aXN1YWxFbGVtZW50LmdldFByb2plY3Rpb25QYXJlbnQoKTtpZih1KXt2YXIgZD1Bbih1LnByb2plY3Rpb24udGFyZ2V0RmluYWwsYyk7Q24oKGZ1bmN0aW9uKGUpe3ZhciB0PWRbZV0sbj10Lm1pbixyPXQubWF4O2NbZV09e21pbjppc05hTihuKT92b2lkIDA6bixtYXg6aXNOYU4ocik/dm9pZCAwOnJ9fSkpfX12YXIgcD1DbigoZnVuY3Rpb24obil7dmFyIHU7aWYob3IobixvLHQuY3VycmVudERpcmVjdGlvbikpe3ZhciBkPW51bGwhPT0odT1udWxsPT1jP3ZvaWQgMDpjW25dKSYmdm9pZCAwIT09dT91Ont9LHA9aT8yMDA6MWU2LGY9aT80MDoxZTcsaD1yLl9fYXNzaWduKHIuX19hc3NpZ24oe3R5cGU6XCJpbmVydGlhXCIsdmVsb2NpdHk6YT9lW25dOjAsYm91bmNlU3RpZmZuZXNzOnAsYm91bmNlRGFtcGluZzpmLHRpbWVDb25zdGFudDo3NTAscmVzdERlbHRhOjEscmVzdFNwZWVkOjEwfSxsKSxkKTtyZXR1cm4gdC5nZXRBeGlzTW90aW9uVmFsdWUobik/dC5zdGFydEF4aXNWYWx1ZUFuaW1hdGlvbihuLGgpOnQudmlzdWFsRWxlbWVudC5zdGFydExheW91dEFuaW1hdGlvbihuLGgscyl9fSkpO3JldHVybiBQcm9taXNlLmFsbChwKS50aGVuKChmdW5jdGlvbigpe3ZhciBlLG47bnVsbD09PShuPShlPXQucHJvcHMpLm9uRHJhZ1RyYW5zaXRpb25FbmQpfHx2b2lkIDA9PT1ufHxuLmNhbGwoZSl9KSl9LGUucHJvdG90eXBlLnN0b3BNb3Rpb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzO0NuKChmdW5jdGlvbih0KXt2YXIgbj1lLmdldEF4aXNNb3Rpb25WYWx1ZSh0KTtuP24uc3RvcCgpOmUudmlzdWFsRWxlbWVudC5zdG9wTGF5b3V0QW5pbWF0aW9uKCl9KSl9LGUucHJvdG90eXBlLnN0YXJ0QXhpc1ZhbHVlQW5pbWF0aW9uPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5nZXRBeGlzTW90aW9uVmFsdWUoZSk7aWYobil7dmFyIHI9bi5nZXQoKTtyZXR1cm4gbi5zZXQociksbi5zZXQociksSXQoZSxuLDAsdCl9fSxlLnByb3RvdHlwZS5zY2FsZVBvaW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMsbj10LmRyYWc7aWYoUih0LmRyYWdDb25zdHJhaW50cykmJnRoaXMuY29uc3RyYWludHNCb3gpe3RoaXMuc3RvcE1vdGlvbigpO3ZhciByPXt4OjAseTowfTtDbigoZnVuY3Rpb24odCl7dmFyIG4sbyxhLGkscyxjO3JbdF09KG49ZS52aXN1YWxFbGVtZW50LnByb2plY3Rpb24udGFyZ2V0W3RdLG89ZS5jb25zdHJhaW50c0JveFt0XSxpPS41LHM9d24obiksKGM9d24obykpPnM/aT1sLnByb2dyZXNzKG8ubWluLG8ubWF4LXMsbi5taW4pOnM+YyYmKGk9bC5wcm9ncmVzcyhuLm1pbixuLm1heC1jLG8ubWluKSksYT1pLGwuY2xhbXAoMCwxLGEpKX0pKSx0aGlzLnVwZGF0ZUNvbnN0cmFpbnRzKChmdW5jdGlvbigpe0NuKChmdW5jdGlvbih0KXtpZihvcih0LG4sbnVsbCkpe3ZhciBvPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLm1heC1lLm1pbixvPWwubWl4KHQubWluLHQubWF4LXIsbik7cmV0dXJue21pbjpvLG1heDpvK3J9fShlLnZpc3VhbEVsZW1lbnQucHJvamVjdGlvbi50YXJnZXRbdF0sZS5jb25zdHJhaW50c0JveFt0XSxyW3RdKSxhPW8ubWluLGk9by5tYXg7ZS52aXN1YWxFbGVtZW50LnNldFByb2plY3Rpb25UYXJnZXRBeGlzKHQsYSxpKX19KSl9KSksc2V0VGltZW91dChRbiwxKX19LGUucHJvdG90eXBlLnVwZGF0ZUNvbnN0cmFpbnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5jYW5jZWxMYXlvdXQ9WG4oKGZ1bmN0aW9uKG4scil7dmFyIG89Um4odC52aXN1YWxFbGVtZW50KTtyKChmdW5jdGlvbigpe3JldHVybiBvLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlc2V0VHJhbnNmb3JtKCl9KSl9KSksbigoZnVuY3Rpb24oKXtyZXR1cm4gSW4odC52aXN1YWxFbGVtZW50KX0pKSxyKChmdW5jdGlvbigpe3JldHVybiBvLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlc3RvcmVUcmFuc2Zvcm0oKX0pKX0pKSxuKChmdW5jdGlvbigpe3QucmVzb2x2ZURyYWdDb25zdHJhaW50cygpfSkpLGUmJnIoZSl9KSl9LGUucHJvdG90eXBlLm1vdW50PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj1udChlLmdldEluc3RhbmNlKCksXCJwb2ludGVyZG93blwiLChmdW5jdGlvbihlKXt2YXIgbj10LnByb3BzLHI9bi5kcmFnLG89bi5kcmFnTGlzdGVuZXI7ciYmKHZvaWQgMD09PW98fG8pJiZ0LnN0YXJ0KGUpfSkpLHI9JGUod2luZG93LFwicmVzaXplXCIsKGZ1bmN0aW9uKCl7dC5zY2FsZVBvaW50KCl9KSksbz1lLm9uTGF5b3V0VXBkYXRlKChmdW5jdGlvbigpe3QuaXNEcmFnZ2luZyYmdC5yZXNvbHZlRHJhZ0NvbnN0cmFpbnRzKCl9KSksYT1lLnByZXZEcmFnQ3Vyc29yO3JldHVybiBhJiZ0aGlzLnN0YXJ0KGVyLHtjdXJzb3JQcm9ncmVzczphfSksZnVuY3Rpb24oKXtudWxsPT1ufHxuKCksbnVsbD09cnx8cigpLG51bGw9PW98fG8oKSx0LmNhbmNlbERyYWcoKX19LGV9KCk7ZnVuY3Rpb24gb3IoZSx0LG4pe3JldHVybiEoITAhPT10JiZ0IT09ZXx8bnVsbCE9PW4mJm4hPT1lKX12YXIgYXIsaXIsbHI9e3BhbjpwdCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vblBhbixuPWUub25QYW5TdGFydCxyPWUub25QYW5FbmQsYT1lLm9uUGFuU2Vzc2lvblN0YXJ0LGk9ZS52aXN1YWxFbGVtZW50LGw9dHx8bnx8cnx8YSxzPW8udXNlUmVmKG51bGwpLGM9by51c2VDb250ZXh0KHcpLnRyYW5zZm9ybVBhZ2VQb2ludCx1PXtvblNlc3Npb25TdGFydDphLG9uU3RhcnQ6bixvbk1vdmU6dCxvbkVuZDpmdW5jdGlvbihlLHQpe3MuY3VycmVudD1udWxsLHImJnIoZSx0KX19O28udXNlRWZmZWN0KChmdW5jdGlvbigpe251bGwhPT1zLmN1cnJlbnQmJnMuY3VycmVudC51cGRhdGVIYW5kbGVycyh1KX0pKSxydChpLFwicG9pbnRlcmRvd25cIixsJiZmdW5jdGlvbihlKXtzLmN1cnJlbnQ9bmV3IGFuKGUsdSx7dHJhbnNmb3JtUGFnZVBvaW50OmN9KX0pLGR0KChmdW5jdGlvbigpe3JldHVybiBzLmN1cnJlbnQmJnMuY3VycmVudC5lbmQoKX0pKX0pKSxkcmFnOnB0KChmdW5jdGlvbihlKXt2YXIgdD1lLmRyYWdDb250cm9scyxuPWUudmlzdWFsRWxlbWVudCxhPW8udXNlQ29udGV4dCh3KS50cmFuc2Zvcm1QYWdlUG9pbnQsaT1rKChmdW5jdGlvbigpe3JldHVybiBuZXcgcnIoe3Zpc3VhbEVsZW1lbnQ6bn0pfSkpO2kuc2V0UHJvcHMoci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGUpLHt0cmFuc2Zvcm1QYWdlUG9pbnQ6YX0pKSxvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdCYmdC5zdWJzY3JpYmUoaSl9KSxbaV0pLG8udXNlRWZmZWN0KChmdW5jdGlvbigpe3JldHVybiBpLm1vdW50KG4pfSksW10pfSkpfTtmdW5jdGlvbiBzcihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZSYmZS5zdGFydHNXaXRoKFwidmFyKC0tXCIpfSFmdW5jdGlvbihlKXtlW2UuRW50ZXJpbmc9MF09XCJFbnRlcmluZ1wiLGVbZS5QcmVzZW50PTFdPVwiUHJlc2VudFwiLGVbZS5FeGl0aW5nPTJdPVwiRXhpdGluZ1wifShhcnx8KGFyPXt9KSksdC5WaXNpYmlsaXR5QWN0aW9uPXZvaWQgMCwoaXI9dC5WaXNpYmlsaXR5QWN0aW9ufHwodC5WaXNpYmlsaXR5QWN0aW9uPXt9KSlbaXIuSGlkZT0wXT1cIkhpZGVcIixpcltpci5TaG93PTFdPVwiU2hvd1wiO3ZhciBjcj0vdmFyXFwoKC0tW2EtekEtWjAtOS1fXSspLD8gPyhbYS16QS1aMC05ICgpJSMuLC1dKyk/XFwpLztmdW5jdGlvbiB1cihlLHQsbil7dm9pZCAwPT09biYmKG49MSksYS5pbnZhcmlhbnQobjw9NCwnTWF4IENTUyB2YXJpYWJsZSBmYWxsYmFjayBkZXB0aCBkZXRlY3RlZCBpbiBwcm9wZXJ0eSBcIicrZSsnXCIuIFRoaXMgbWF5IGluZGljYXRlIGEgY2lyY3VsYXIgZmFsbGJhY2sgZGVwZW5kZW5jeS4nKTt2YXIgbz1yLl9fcmVhZChmdW5jdGlvbihlKXt2YXIgdD1jci5leGVjKGUpO2lmKCF0KXJldHVyblssXTt2YXIgbj1yLl9fcmVhZCh0LDMpO3JldHVybltuWzFdLG5bMl1dfShlKSwyKSxpPW9bMF0sbD1vWzFdO2lmKGkpe3ZhciBzPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpLmdldFByb3BlcnR5VmFsdWUoaSk7cmV0dXJuIHM/cy50cmltKCk6c3IobCk/dXIobCx0LG4rMSk6bH19ZnVuY3Rpb24gZHIoZSx0KXtyZXR1cm4gZS8odC5tYXgtdC5taW4pKjEwMH12YXIgcHI9XCJfJGNzc1wiLGZyPXtwcm9jZXNzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uLnRhcmdldDtpZihcInN0cmluZ1wiPT10eXBlb2YgZSl7aWYoIWkucHgudGVzdChlKSlyZXR1cm4gZTtlPXBhcnNlRmxvYXQoZSl9cmV0dXJuIGRyKGUsci54KStcIiUgXCIrZHIoZSxyLnkpK1wiJVwifX0saHI9e2JvcmRlclJhZGl1czpyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sZnIpLHthcHBseVRvOltcImJvcmRlclRvcExlZnRSYWRpdXNcIixcImJvcmRlclRvcFJpZ2h0UmFkaXVzXCIsXCJib3JkZXJCb3R0b21MZWZ0UmFkaXVzXCIsXCJib3JkZXJCb3R0b21SaWdodFJhZGl1c1wiXX0pLGJvcmRlclRvcExlZnRSYWRpdXM6ZnIsYm9yZGVyVG9wUmlnaHRSYWRpdXM6ZnIsYm9yZGVyQm90dG9tTGVmdFJhZGl1czpmcixib3JkZXJCb3R0b21SaWdodFJhZGl1czpmcixib3hTaGFkb3c6e3Byb2Nlc3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmRlbHRhLHI9dC50cmVlU2NhbGUsbz1lLGE9ZS5pbmNsdWRlcyhcInZhcihcIikscz1bXTthJiYoZT1lLnJlcGxhY2UoY3IsKGZ1bmN0aW9uKGUpe3JldHVybiBzLnB1c2goZSkscHJ9KSkpO3ZhciBjPWkuY29tcGxleC5wYXJzZShlKTtpZihjLmxlbmd0aD41KXJldHVybiBvO3ZhciB1PWkuY29tcGxleC5jcmVhdGVUcmFuc2Zvcm1lcihlKSxkPVwibnVtYmVyXCIhPXR5cGVvZiBjWzBdPzE6MCxwPW4ueC5zY2FsZSpyLngsZj1uLnkuc2NhbGUqci55O2NbMCtkXS89cCxjWzErZF0vPWY7dmFyIGg9bC5taXgocCxmLC41KTtcIm51bWJlclwiPT10eXBlb2YgY1syK2RdJiYoY1syK2RdLz1oKSxcIm51bWJlclwiPT10eXBlb2YgY1szK2RdJiYoY1szK2RdLz1oKTt2YXIgZz11KGMpO2lmKGEpe3ZhciB2PTA7Zz1nLnJlcGxhY2UocHIsKGZ1bmN0aW9uKCl7dmFyIGU9c1t2XTtyZXR1cm4gdisrLGV9KSl9cmV0dXJuIGd9fX0sZ3I9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3ZhciBuPW51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gbi5mcmFtZVRhcmdldD17eDp7bWluOjAsbWF4OjF9LHk6e21pbjowLG1heDoxfX0sbi5jdXJyZW50QW5pbWF0aW9uVGFyZ2V0PXt4OnttaW46MCxtYXg6MX0seTp7bWluOjAsbWF4OjF9fSxuLmlzQW5pbWF0aW5nPXt4OiExLHk6ITF9LG4uc3RvcEF4aXNBbmltYXRpb249e3g6dm9pZCAwLHk6dm9pZCAwfSxuLmlzQW5pbWF0aW5nVHJlZT0hMSxuLmFuaW1hdGU9ZnVuY3Rpb24oZSxvLGEpe3ZvaWQgMD09PWEmJihhPXt9KTt2YXIgaT1hLm9yaWdpbkJveCxsPWEudGFyZ2V0Qm94LHM9YS52aXNpYmlsaXR5QWN0aW9uLGM9YS5zaG91bGRTdGFja0FuaW1hdGUsdT1hLm9uQ29tcGxldGUsZD1hLnByZXZQYXJlbnQscD1yLl9fcmVzdChhLFtcIm9yaWdpbkJveFwiLFwidGFyZ2V0Qm94XCIsXCJ2aXNpYmlsaXR5QWN0aW9uXCIsXCJzaG91bGRTdGFja0FuaW1hdGVcIixcIm9uQ29tcGxldGVcIixcInByZXZQYXJlbnRcIl0pLGY9bi5wcm9wcyxoPWYudmlzdWFsRWxlbWVudCxnPWYubGF5b3V0O2lmKCExPT09YylyZXR1cm4gbi5pc0FuaW1hdGluZ1RyZWU9ITEsbi5zYWZlVG9SZW1vdmUoKTtpZighbi5pc0FuaW1hdGluZ1RyZWV8fCEwPT09Yyl7YyYmKG4uaXNBbmltYXRpbmdUcmVlPSEwKSxvPWl8fG8sZT1sfHxlO3ZhciB2LEMsbSx3PSExLGI9aC5nZXRQcm9qZWN0aW9uUGFyZW50KCk7aWYoYil7dmFyIHk9Yi5wcmV2Vmlld3BvcnRCb3gseD1iLmdldExheW91dFN0YXRlKCkubGF5b3V0O2QmJihsJiYoeD1kLmdldExheW91dFN0YXRlKCkubGF5b3V0KSxpJiYoQz1iLCh2PWQpLmdldExheW91dElkKCk9PT0obT1DLmdldExheW91dElkKCkpJiYodm9pZCAwIT09bXx8dj09PUMpKSYmZC5wcmV2Vmlld3BvcnRCb3gmJih5PWQucHJldlZpZXdwb3J0Qm94KSkseSYmZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlfHwhZSYmISh0fHxuKX0oZCxpLGwpJiYodz0hMCxvPUFuKHksbyksZT1Bbih4LGUpKX12YXIgayxTLE89KFM9ZSwhKENyKGs9byl8fENyKFMpfHxtcihrLngsUy54KSYmbXIoay55LFMueSkpKSxNPUNuKChmdW5jdGlvbihhKXt2YXIgaSxsO2lmKFwicG9zaXRpb25cIj09PWcpe3ZhciBjPWVbYV0ubWF4LWVbYV0ubWluO29bYV0ubWF4PW9bYV0ubWluK2N9aWYoIWgucHJvamVjdGlvbi5pc1RhcmdldExvY2tlZClyZXR1cm4gdm9pZCAwPT09cz9PP24uYW5pbWF0ZUF4aXMoYSxlW2FdLG9bYV0sci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LHApLHtpc1JlbGF0aXZlOnd9KSk6KG51bGw9PT0obD0oaT1uLnN0b3BBeGlzQW5pbWF0aW9uKVthXSl8fHZvaWQgMD09PWx8fGwuY2FsbChpKSxoLnNldFByb2plY3Rpb25UYXJnZXRBeGlzKGEsZVthXS5taW4sZVthXS5tYXgsdykpOnZvaWQgaC5zZXRWaXNpYmlsaXR5KHM9PT10LlZpc2liaWxpdHlBY3Rpb24uU2hvdyl9KSk7cmV0dXJuIGguc3luY1JlbmRlcigpLFByb21pc2UuYWxsKE0pLnRoZW4oKGZ1bmN0aW9uKCl7bi5pc0FuaW1hdGluZ1RyZWU9ITEsdSYmdSgpLGgubm90aWZ5TGF5b3V0QW5pbWF0aW9uQ29tcGxldGUoKX0pKX19LG59cmV0dXJuIHIuX19leHRlbmRzKG4sZSksbi5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcy52aXN1YWxFbGVtZW50O3QuYW5pbWF0ZU1vdGlvblZhbHVlPUl0LHQuZW5hYmxlTGF5b3V0UHJvamVjdGlvbigpLHRoaXMudW5zdWJMYXlvdXRSZWFkeT10Lm9uTGF5b3V0VXBkYXRlKHRoaXMuYW5pbWF0ZSksdC5sYXlvdXRTYWZlVG9SZW1vdmU9ZnVuY3Rpb24oKXtyZXR1cm4gZS5zYWZlVG9SZW1vdmUoKX0sVShocil9LG4ucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLnVuc3ViTGF5b3V0UmVhZHkoKSxDbigoZnVuY3Rpb24odCl7dmFyIG4scjtyZXR1cm4gbnVsbD09PShyPShuPWUuc3RvcEF4aXNBbmltYXRpb24pW3RdKXx8dm9pZCAwPT09cj92b2lkIDA6ci5jYWxsKG4pfSkpfSxuLnByb3RvdHlwZS5hbmltYXRlQXhpcz1mdW5jdGlvbihlLHQsbixyKXt2YXIgbyxhLGk9dGhpcyxzPXZvaWQgMD09PXI/e306cixjPXMudHJhbnNpdGlvbix1PXMuaXNSZWxhdGl2ZTtpZighdGhpcy5pc0FuaW1hdGluZ1tlXXx8IW1yKHQsdGhpcy5jdXJyZW50QW5pbWF0aW9uVGFyZ2V0W2VdKSl7bnVsbD09PShhPShvPXRoaXMuc3RvcEF4aXNBbmltYXRpb24pW2VdKXx8dm9pZCAwPT09YXx8YS5jYWxsKG8pLHRoaXMuaXNBbmltYXRpbmdbZV09ITA7dmFyIGQ9dGhpcy5wcm9wcy52aXN1YWxFbGVtZW50LHA9dGhpcy5mcmFtZVRhcmdldFtlXSxmPWQuZ2V0UHJvamVjdGlvbkFuaW1hdGlvblByb2dyZXNzKClbZV07Zi5jbGVhckxpc3RlbmVycygpLGYuc2V0KDApLGYuc2V0KDApO3ZhciBoPWZ1bmN0aW9uKCl7dmFyIHI9Zi5nZXQoKS8xZTM7IWZ1bmN0aW9uKGUsdCxuLHIpe2UubWluPWwubWl4KHQubWluLG4ubWluLHIpLGUubWF4PWwubWl4KHQubWF4LG4ubWF4LHIpfShwLG4sdCxyKSxkLnNldFByb2plY3Rpb25UYXJnZXRBeGlzKGUscC5taW4scC5tYXgsdSl9O2goKTt2YXIgZz1mLm9uQ2hhbmdlKGgpO3RoaXMuc3RvcEF4aXNBbmltYXRpb25bZV09ZnVuY3Rpb24oKXtpLmlzQW5pbWF0aW5nW2VdPSExLGYuc3RvcCgpLGcoKX0sdGhpcy5jdXJyZW50QW5pbWF0aW9uVGFyZ2V0W2VdPXQ7dmFyIHY9Y3x8ZC5nZXREZWZhdWx0VHJhbnNpdGlvbigpfHx3cjtyZXR1cm4gSXQoXCJ4XCI9PT1lP1wibGF5b3V0WFwiOlwibGF5b3V0WVwiLGYsMWUzLHYmJlJ0KHYsXCJsYXlvdXRcIikpLnRoZW4odGhpcy5zdG9wQXhpc0FuaW1hdGlvbltlXSl9fSxuLnByb3RvdHlwZS5zYWZlVG9SZW1vdmU9ZnVuY3Rpb24oKXt2YXIgZSx0O251bGw9PT0odD0oZT10aGlzLnByb3BzKS5zYWZlVG9SZW1vdmUpfHx2b2lkIDA9PT10fHx0LmNhbGwoZSl9LG4ucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiBudWxsfSxufSh1LkNvbXBvbmVudCksdnI9e21pbjowLG1heDowfTtmdW5jdGlvbiBDcihlKXtyZXR1cm4gbXIoZS54LHZyKSYmbXIoZS55LHZyKX1mdW5jdGlvbiBtcihlLHQpe3JldHVybiBlLm1pbj09PXQubWluJiZlLm1heD09PXQubWF4fXZhciB3cj17ZHVyYXRpb246LjQ1LGVhc2U6Wy40LDAsLjEsMV19LGJyPXtsYXlvdXRSZWFkeTpmdW5jdGlvbihlKXtyZXR1cm4gZS5ub3RpZnlMYXlvdXRSZWFkeSgpfX07ZnVuY3Rpb24geXIoKXt2YXIgZT1uZXcgU2V0O3JldHVybnthZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIGUuYWRkKHQpfSxmbHVzaDpmdW5jdGlvbih0KXt2YXIgbj12b2lkIDA9PT10P2JyOnQsbz1uLmxheW91dFJlYWR5LGE9bi5wYXJlbnQ7WG4oKGZ1bmN0aW9uKHQsbil7dmFyIGk9QXJyYXkuZnJvbShlKS5zb3J0KEVuKSxsPWE/Um4oYSk6W107bigoZnVuY3Rpb24oKXtyLl9fc3ByZWFkQXJyYXkoci5fX3NwcmVhZEFycmF5KFtdLHIuX19yZWFkKGwpKSxyLl9fcmVhZChpKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVzZXRUcmFuc2Zvcm0oKX0pKX0pKSx0KChmdW5jdGlvbigpe2kuZm9yRWFjaChJbil9KSksbigoZnVuY3Rpb24oKXtsLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlc3RvcmVUcmFuc2Zvcm0oKX0pKSxpLmZvckVhY2gobyl9KSksdCgoZnVuY3Rpb24oKXtpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuaXNQcmVzZW50JiYoZS5wcmVzZW5jZT1hci5QcmVzZW50KX0pKX0pKSxuKChmdW5jdGlvbigpe3MuZmx1c2hTeW5jLnByZVJlbmRlcigpLHMuZmx1c2hTeW5jLnJlbmRlcigpfSkpLHQoKGZ1bmN0aW9uKCl7cC5kZWZhdWx0LnBvc3RSZW5kZXIoKGZ1bmN0aW9uKCl7cmV0dXJuIGkuZm9yRWFjaCh4cil9KSksZS5jbGVhcigpfSkpfSkpLFFuKCl9fX1mdW5jdGlvbiB4cihlKXtlLnByZXZWaWV3cG9ydEJveD1lLnByb2plY3Rpb24udGFyZ2V0fXZhciBrcj1vLmNyZWF0ZUNvbnRleHQoeXIoKSksU3I9by5jcmVhdGVDb250ZXh0KHlyKCkpO2Z1bmN0aW9uIE9yKGUpe3JldHVybiEhZS5mb3JjZVVwZGF0ZX12YXIgTXI9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBudWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIHIuX19leHRlbmRzKHQsZSksdC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5zeW5jTGF5b3V0LG49ZS5mcmFtZXJTeW5jTGF5b3V0LHI9ZS52aXN1YWxFbGVtZW50O09yKHQpJiZ0LnJlZ2lzdGVyKHIpLE9yKG4pJiZuLnJlZ2lzdGVyKHIpLHIub25Vbm1vdW50KChmdW5jdGlvbigpe09yKHQpJiZ0LnJlbW92ZShyKSxPcihuKSYmbi5yZW1vdmUocil9KSl9LHQucHJvdG90eXBlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuc3luY0xheW91dCxuPWUudmlzdWFsRWxlbWVudDtyZXR1cm4gT3IodCk/dC5zeW5jVXBkYXRlKCk6KFZuKG4pLHQuYWRkKG4pKSxudWxsfSx0LnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLnN5bmNMYXlvdXQ7T3IoZSl8fGUuZmx1c2goKX0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHR9KGQuZGVmYXVsdC5Db21wb25lbnQpLExyPXttZWFzdXJlTGF5b3V0OmZ1bmN0aW9uKGUpe3ZhciB0PW8udXNlQ29udGV4dChrciksbj1vLnVzZUNvbnRleHQoU3IpO3JldHVybiBkLmRlZmF1bHQuY3JlYXRlRWxlbWVudChNcixyLl9fYXNzaWduKHt9LGUse3N5bmNMYXlvdXQ6dCxmcmFtZXJTeW5jTGF5b3V0Om59KSl9LGxheW91dEFuaW1hdGlvbjpmdW5jdGlvbihlKXt2YXIgdD1yLl9fcmVhZChTKCksMilbMV07cmV0dXJuIHUuY3JlYXRlRWxlbWVudChncixyLl9fYXNzaWduKHt9LGUse3NhZmVUb1JlbW92ZTp0fSkpfX07ZnVuY3Rpb24gX3IoKXtyZXR1cm57aXNIeWRyYXRlZDohMSxsYXlvdXQ6e3g6e21pbjowLG1heDoxfSx5OnttaW46MCxtYXg6MX19LGxheW91dENvcnJlY3RlZDp7eDp7bWluOjAsbWF4OjF9LHk6e21pbjowLG1heDoxfX0sdHJlZVNjYWxlOnt4OjEseToxfSxkZWx0YTp2bigpLGRlbHRhRmluYWw6dm4oKSxkZWx0YVRyYW5zZm9ybTpcIlwifX12YXIgUHI9X3IoKTtmdW5jdGlvbiBFcihlLHQsbil7dmFyIHI9ZS54LG89ZS55LGE9XCJ0cmFuc2xhdGUzZChcIityLnRyYW5zbGF0ZS90LngrXCJweCwgXCIrby50cmFuc2xhdGUvdC55K1wicHgsIDApIFwiO2lmKG4pe3ZhciBpPW4ucm90YXRlLGw9bi5yb3RhdGVYLHM9bi5yb3RhdGVZO2kmJihhKz1cInJvdGF0ZShcIitpK1wiKSBcIiksbCYmKGErPVwicm90YXRlWChcIitsK1wiKSBcIikscyYmKGErPVwicm90YXRlWShcIitzK1wiKSBcIil9cmV0dXJuIGErPVwic2NhbGUoXCIrci5zY2FsZStcIiwgXCIrby5zY2FsZStcIilcIixufHxhIT09UnI/YTpcIlwifWZ1bmN0aW9uIGpyKGUpe3ZhciB0PWUuZGVsdGFGaW5hbDtyZXR1cm4gMTAwKnQueC5vcmlnaW4rXCIlIFwiKzEwMCp0Lnkub3JpZ2luK1wiJSAwXCJ9dmFyIFJyPUVyKFByLmRlbHRhLFByLnRyZWVTY2FsZSx7eDoxLHk6MX0pLElyPVtcIkxheW91dE1lYXN1cmVcIixcIkJlZm9yZUxheW91dE1lYXN1cmVcIixcIkxheW91dFVwZGF0ZVwiLFwiVmlld3BvcnRCb3hVcGRhdGVcIixcIlVwZGF0ZVwiLFwiUmVuZGVyXCIsXCJBbmltYXRpb25Db21wbGV0ZVwiLFwiTGF5b3V0QW5pbWF0aW9uQ29tcGxldGVcIixcIkFuaW1hdGlvblN0YXJ0XCIsXCJTZXRBeGlzVGFyZ2V0XCIsXCJVbm1vdW50XCJdLFZyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuY2hpbGRyZW49W10sdGhpcy5pc0RpcnR5PSExfXJldHVybiBlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7VnQodGhpcy5jaGlsZHJlbixlKSx0aGlzLmlzRGlydHk9ITB9LGUucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihlKXtIdCh0aGlzLmNoaWxkcmVuLGUpLHRoaXMuaXNEaXJ0eT0hMH0sZS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihlKXt0aGlzLmlzRGlydHkmJnRoaXMuY2hpbGRyZW4uc29ydChFbiksdGhpcy5pc0RpcnR5PSExLHRoaXMuY2hpbGRyZW4uZm9yRWFjaChlKX0sZX0oKSxIcj1mdW5jdGlvbihlKXt2YXIgdD1lLnRyZWVUeXBlLG49dm9pZCAwPT09dD9cIlwiOnQsbz1lLmJ1aWxkLGE9ZS5nZXRCYXNlVGFyZ2V0LGk9ZS5tYWtlVGFyZ2V0QW5pbWF0YWJsZSxjPWUubWVhc3VyZVZpZXdwb3J0Qm94LHU9ZS5yZW5kZXIsZD1lLnJlYWRWYWx1ZUZyb21JbnN0YW5jZSxmPWUucmVzZXRUcmFuc2Zvcm0saD1lLnJlc3RvcmVUcmFuc2Zvcm0sZz1lLnJlbW92ZVZhbHVlRnJvbVJlbmRlclN0YXRlLHY9ZS5zb3J0Tm9kZVBvc2l0aW9uLEM9ZS5zY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHM7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7dmFyIG09ZS5wYXJlbnQsdz1lLnByb3BzLGI9ZS5wcmVzZW5jZUlkLHk9ZS5ibG9ja0luaXRpYWxBbmltYXRpb24seD1lLnZpc3VhbFN0YXRlO3ZvaWQgMD09PXQmJih0PXt9KTt2YXIgayxTLE8sTSxMLF8sUD14LmxhdGVzdFZhbHVlcyxFPXgucmVuZGVyU3RhdGUsaj1mdW5jdGlvbigpe3ZhciBlPUlyLm1hcCgoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEF0fSkpLHQ9e30sbj17Y2xlYXJBbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGVhcigpfSkpfSx1cGRhdGVQcm9wTGlzdGVuZXJzOmZ1bmN0aW9uKGUpe3JldHVybiBJci5mb3JFYWNoKChmdW5jdGlvbihyKXt2YXIgbztudWxsPT09KG89dFtyXSl8fHZvaWQgMD09PW98fG8uY2FsbCh0KTt2YXIgYT1cIm9uXCIrcixpPWVbYV07aSYmKHRbcl09blthXShpKSl9KSl9fTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe25bXCJvblwiK0lyW3RdXT1mdW5jdGlvbih0KXtyZXR1cm4gZS5hZGQodCl9LG5bXCJub3RpZnlcIitJclt0XV09ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJuIGUubm90aWZ5LmFwcGx5KGUsci5fX3NwcmVhZEFycmF5KFtdLHIuX19yZWFkKHQpKSl9fSkpLG59KCksUj17aXNFbmFibGVkOiExLGlzSHlkcmF0ZWQ6ITEsaXNUYXJnZXRMb2NrZWQ6ITEsdGFyZ2V0Ont4OnttaW46MCxtYXg6MX0seTp7bWluOjAsbWF4OjF9fSx0YXJnZXRGaW5hbDp7eDp7bWluOjAsbWF4OjF9LHk6e21pbjowLG1heDoxfX19LEk9UixIPVAsQT1fcigpLEI9ITEsWj1uZXcgTWFwLCQ9bmV3IE1hcCxOPXt9LEY9ci5fX2Fzc2lnbih7fSxQKTtmdW5jdGlvbiBXKCl7ayYmKFEuaXNQcm9qZWN0aW9uUmVhZHkoKSYmKHpuKEkudGFyZ2V0RmluYWwsSS50YXJnZXQsSCkseW4oQS5kZWx0YUZpbmFsLEEubGF5b3V0Q29ycmVjdGVkLEkudGFyZ2V0RmluYWwsUCkpLFUoKSx1KGssRSkpfWZ1bmN0aW9uIFUoKXt2YXIgZT1QO2lmKE0mJk0uaXNBY3RpdmUoKSl7dmFyIG49TS5nZXRDcm9zc2ZhZGVTdGF0ZShRKTtuJiYoZT1uKX1vKFEsRSxlLEksQSx0LHcpfWZ1bmN0aW9uIHooKXtqLm5vdGlmeVVwZGF0ZShQKX1mdW5jdGlvbiBHKCl7US5sYXlvdXRUcmVlLmZvckVhY2goVHIpfXZhciBLPUModyk7Zm9yKHZhciBxIGluIEspe3ZhciBZPUtbcV07dm9pZCAwIT09UFtxXSYmZWUoWSkmJlkuc2V0KFBbcV0sITEpfXZhciBKPVQodyksWD1EKHcpLFE9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt0cmVlVHlwZTpuLGN1cnJlbnQ6bnVsbCxkZXB0aDptP20uZGVwdGgrMTowLHBhcmVudDptLGNoaWxkcmVuOm5ldyBTZXQscGF0aDptP3IuX19zcHJlYWRBcnJheShyLl9fc3ByZWFkQXJyYXkoW10sci5fX3JlYWQobS5wYXRoKSksW21dKTpbXSxsYXlvdXRUcmVlOm0/bS5sYXlvdXRUcmVlOm5ldyBWcixwcmVzZW5jZUlkOmIscHJvamVjdGlvbjpSLHZhcmlhbnRDaGlsZHJlbjpYP25ldyBTZXQ6dm9pZCAwLGlzVmlzaWJsZTp2b2lkIDAsbWFudWFsbHlBbmltYXRlT25Nb3VudDpCb29sZWFuKG51bGw9PW0/dm9pZCAwOm0uaXNNb3VudGVkKCkpLGJsb2NrSW5pdGlhbEFuaW1hdGlvbjp5LGlzTW91bnRlZDpmdW5jdGlvbigpe3JldHVybiBCb29sZWFuKGspfSxtb3VudDpmdW5jdGlvbihlKXtrPVEuY3VycmVudD1lLFEucG9pbnRUbyhRKSxYJiZtJiYhSiYmKF89bnVsbD09bT92b2lkIDA6bS5hZGRWYXJpYW50Q2hpbGQoUSkpLG51bGw9PW18fG0uY2hpbGRyZW4uYWRkKFEpfSx1bm1vdW50OmZ1bmN0aW9uKCl7cy5jYW5jZWxTeW5jLnVwZGF0ZSh6KSxzLmNhbmNlbFN5bmMucmVuZGVyKFcpLHMuY2FuY2VsU3luYy5wcmVSZW5kZXIoUS51cGRhdGVMYXlvdXRQcm9qZWN0aW9uKSwkLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlKCl9KSksUS5zdG9wTGF5b3V0QW5pbWF0aW9uKCksUS5sYXlvdXRUcmVlLnJlbW92ZShRKSxudWxsPT1ffHxfKCksbnVsbD09bXx8bS5jaGlsZHJlbi5kZWxldGUoUSksbnVsbD09T3x8TygpLGouY2xlYXJBbGxMaXN0ZW5lcnMoKX0sYWRkVmFyaWFudENoaWxkOmZ1bmN0aW9uKGUpe3ZhciB0LG49US5nZXRDbG9zZXN0VmFyaWFudE5vZGUoKTtpZihuKXJldHVybiBudWxsPT09KHQ9bi52YXJpYW50Q2hpbGRyZW4pfHx2b2lkIDA9PT10fHx0LmFkZChlKSxmdW5jdGlvbigpe3JldHVybiBuLnZhcmlhbnRDaGlsZHJlbi5kZWxldGUoZSl9fSxzb3J0Tm9kZVBvc2l0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiB2JiZuPT09ZS50cmVlVHlwZT92KFEuZ2V0SW5zdGFuY2UoKSxlLmdldEluc3RhbmNlKCkpOjB9LGdldENsb3Nlc3RWYXJpYW50Tm9kZTpmdW5jdGlvbigpe3JldHVybiBYP1E6bnVsbD09bT92b2lkIDA6bS5nZXRDbG9zZXN0VmFyaWFudE5vZGUoKX0sc2NoZWR1bGVVcGRhdGVMYXlvdXRQcm9qZWN0aW9uOm0/bS5zY2hlZHVsZVVwZGF0ZUxheW91dFByb2plY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gcC5kZWZhdWx0LnByZVJlbmRlcihRLnVwZGF0ZVRyZWVMYXlvdXRQcm9qZWN0aW9uLCExLCEwKX0sZ2V0TGF5b3V0SWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdy5sYXlvdXRJZH0sZ2V0SW5zdGFuY2U6ZnVuY3Rpb24oKXtyZXR1cm4ga30sZ2V0U3RhdGljVmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIFBbZV19LHNldFN0YXRpY1ZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFBbZV09dH0sZ2V0TGF0ZXN0VmFsdWVzOmZ1bmN0aW9uKCl7cmV0dXJuIFB9LHNldFZpc2liaWxpdHk6ZnVuY3Rpb24oZSl7US5pc1Zpc2libGUhPT1lJiYoUS5pc1Zpc2libGU9ZSxRLnNjaGVkdWxlUmVuZGVyKCkpfSxtYWtlVGFyZ2V0QW5pbWF0YWJsZTpmdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0hMCksaShRLGUsdyx0KX0sYWRkVmFsdWU6ZnVuY3Rpb24oZSx0KXtRLmhhc1ZhbHVlKGUpJiZRLnJlbW92ZVZhbHVlKGUpLFouc2V0KGUsdCksUFtlXT10LmdldCgpLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5vbkNoYW5nZSgoZnVuY3Rpb24odCl7UFtlXT10LHcub25VcGRhdGUmJnAuZGVmYXVsdC51cGRhdGUoeiwhMSwhMCl9KSkscj10Lm9uUmVuZGVyUmVxdWVzdChRLnNjaGVkdWxlUmVuZGVyKTskLnNldChlLChmdW5jdGlvbigpe24oKSxyKCl9KSl9KGUsdCl9LHJlbW92ZVZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0O1ouZGVsZXRlKGUpLG51bGw9PT0odD0kLmdldChlKSl8fHZvaWQgMD09PXR8fHQoKSwkLmRlbGV0ZShlKSxkZWxldGUgUFtlXSxnKGUsRSl9LGhhc1ZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBaLmhhcyhlKX0sZ2V0VmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj1aLmdldChlKTtyZXR1cm4gdm9pZCAwPT09biYmdm9pZCAwIT09dCYmKG49RHQodCksUS5hZGRWYWx1ZShlLG4pKSxufSxmb3JFYWNoVmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIFouZm9yRWFjaChlKX0scmVhZFZhbHVlOmZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBudWxsIT09KG49UFtlXSkmJnZvaWQgMCE9PW4/bjpkKGssZSx0KX0sc2V0QmFzZVRhcmdldDpmdW5jdGlvbihlLHQpe0ZbZV09dH0sZ2V0QmFzZVRhcmdldDpmdW5jdGlvbihlKXtpZihhKXt2YXIgdD1hKHcsZSk7aWYodm9pZCAwIT09dCYmIWVlKHQpKXJldHVybiB0fXJldHVybiBGW2VdfX0saikse2J1aWxkOmZ1bmN0aW9uKCl7cmV0dXJuIFUoKSxFfSxzY2hlZHVsZVJlbmRlcjpmdW5jdGlvbigpe3AuZGVmYXVsdC5yZW5kZXIoVywhMSwhMCl9LHN5bmNSZW5kZXI6VyxzZXRQcm9wczpmdW5jdGlvbihlKXt3PWUsai51cGRhdGVQcm9wTGlzdGVuZXJzKGUpLE49ZnVuY3Rpb24oZSx0LG4pe3ZhciByO2Zvcih2YXIgbyBpbiB0KXt2YXIgYT10W29dLGk9bltvXTtpZihlZShhKSllLmFkZFZhbHVlKG8sYSk7ZWxzZSBpZihlZShpKSllLmFkZFZhbHVlKG8sRHQoYSkpO2Vsc2UgaWYoaSE9PWEpaWYoZS5oYXNWYWx1ZShvKSl7dmFyIGw9ZS5nZXRWYWx1ZShvKTshbC5oYXNBbmltYXRlZCYmbC5zZXQoYSl9ZWxzZSBlLmFkZFZhbHVlKG8sRHQobnVsbCE9PShyPWUuZ2V0U3RhdGljVmFsdWUobykpJiZ2b2lkIDAhPT1yP3I6YSkpfWZvcih2YXIgbyBpbiBuKXZvaWQgMD09PXRbb10mJmUucmVtb3ZlVmFsdWUobyk7cmV0dXJuIHR9KFEsQyh3KSxOKX0sZ2V0UHJvcHM6ZnVuY3Rpb24oKXtyZXR1cm4gd30sZ2V0VmFyaWFudDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gbnVsbD09PSh0PXcudmFyaWFudHMpfHx2b2lkIDA9PT10P3ZvaWQgMDp0W2VdfSxnZXREZWZhdWx0VHJhbnNpdGlvbjpmdW5jdGlvbigpe3JldHVybiB3LnRyYW5zaXRpb259LGdldFZhcmlhbnRDb250ZXh0OmZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUmJihlPSExKSxlKXJldHVybiBudWxsPT1tP3ZvaWQgMDptLmdldFZhcmlhbnRDb250ZXh0KCk7aWYoIUope3ZhciB0PShudWxsPT1tP3ZvaWQgMDptLmdldFZhcmlhbnRDb250ZXh0KCkpfHx7fTtyZXR1cm4gdm9pZCAwIT09dy5pbml0aWFsJiYodC5pbml0aWFsPXcuaW5pdGlhbCksdH1mb3IodmFyIG49e30scj0wO3I8WnI7cisrKXt2YXIgbz1CcltyXSxhPXdbb107KFYoYSl8fCExPT09YSkmJihuW29dPWEpfXJldHVybiBufSxlbmFibGVMYXlvdXRQcm9qZWN0aW9uOmZ1bmN0aW9uKCl7Ui5pc0VuYWJsZWQ9ITAsUS5sYXlvdXRUcmVlLmFkZChRKX0sbG9ja1Byb2plY3Rpb25UYXJnZXQ6ZnVuY3Rpb24oKXtSLmlzVGFyZ2V0TG9ja2VkPSEwfSx1bmxvY2tQcm9qZWN0aW9uVGFyZ2V0OmZ1bmN0aW9uKCl7US5zdG9wTGF5b3V0QW5pbWF0aW9uKCksUi5pc1RhcmdldExvY2tlZD0hMX0sZ2V0TGF5b3V0U3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gQX0sc2V0Q3Jvc3NmYWRlcjpmdW5jdGlvbihlKXtNPWV9LGlzUHJvamVjdGlvblJlYWR5OmZ1bmN0aW9uKCl7cmV0dXJuIFIuaXNFbmFibGVkJiZSLmlzSHlkcmF0ZWQmJkEuaXNIeWRyYXRlZH0sc3RhcnRMYXlvdXRBbmltYXRpb246ZnVuY3Rpb24oZSx0LG4pe3ZvaWQgMD09PW4mJihuPSExKTt2YXIgcj1RLmdldFByb2plY3Rpb25BbmltYXRpb25Qcm9ncmVzcygpW2VdLG89bj9SLnJlbGF0aXZlVGFyZ2V0W2VdOlIudGFyZ2V0W2VdLGE9by5taW4saT1vLm1heC1hO3JldHVybiByLmNsZWFyTGlzdGVuZXJzKCksci5zZXQoYSksci5zZXQoYSksci5vbkNoYW5nZSgoZnVuY3Rpb24odCl7US5zZXRQcm9qZWN0aW9uVGFyZ2V0QXhpcyhlLHQsdCtpLG4pfSkpLFEuYW5pbWF0ZU1vdGlvblZhbHVlKGUsciwwLHQpfSxzdG9wTGF5b3V0QW5pbWF0aW9uOmZ1bmN0aW9uKCl7Q24oKGZ1bmN0aW9uKGUpe3JldHVybiBRLmdldFByb2plY3Rpb25BbmltYXRpb25Qcm9ncmVzcygpW2VdLnN0b3AoKX0pKX0sbWVhc3VyZVZpZXdwb3J0Qm94OmZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPSEwKTt2YXIgbj1jKGssdCk7cmV0dXJuIGV8fHFuKG4sUCksbn0sZ2V0UHJvamVjdGlvbkFuaW1hdGlvblByb2dyZXNzOmZ1bmN0aW9uKCl7cmV0dXJuIEx8fChMPXt4OkR0KDApLHk6RHQoMCl9KSxMfSxzZXRQcm9qZWN0aW9uVGFyZ2V0QXhpczpmdW5jdGlvbihlLHQsbixyKXt2YXIgbzt2b2lkIDA9PT1yJiYocj0hMSkscj8oUi5yZWxhdGl2ZVRhcmdldHx8KFIucmVsYXRpdmVUYXJnZXQ9e3g6e21pbjowLG1heDoxfSx5OnttaW46MCxtYXg6MX19KSxvPVIucmVsYXRpdmVUYXJnZXRbZV0pOihSLnJlbGF0aXZlVGFyZ2V0PXZvaWQgMCxvPVIudGFyZ2V0W2VdKSxSLmlzSHlkcmF0ZWQ9ITAsby5taW49dCxvLm1heD1uLEI9ITAsai5ub3RpZnlTZXRBeGlzVGFyZ2V0KCl9LHJlYmFzZVByb2plY3Rpb25UYXJnZXQ6ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD1BLmxheW91dCk7dmFyIG49US5nZXRQcm9qZWN0aW9uQW5pbWF0aW9uUHJvZ3Jlc3MoKSxyPW4ueCxvPW4ueSxhPSEoUi5yZWxhdGl2ZVRhcmdldHx8Ui5pc1RhcmdldExvY2tlZHx8ci5pc0FuaW1hdGluZygpfHxvLmlzQW5pbWF0aW5nKCkpOyhlfHxhKSYmQ24oKGZ1bmN0aW9uKGUpe3ZhciBuPXRbZV0scj1uLm1pbixvPW4ubWF4O1Euc2V0UHJvamVjdGlvblRhcmdldEF4aXMoZSxyLG8pfSkpfSxub3RpZnlMYXlvdXRSZWFkeTpmdW5jdGlvbihlKXshZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRQcm9qZWN0aW9uUGFyZW50KCk7aWYodCl7dmFyIG49QW4odC5nZXRMYXlvdXRTdGF0ZSgpLmxheW91dCxlLmdldExheW91dFN0YXRlKCkubGF5b3V0KTtDbigoZnVuY3Rpb24odCl7ZS5zZXRQcm9qZWN0aW9uVGFyZ2V0QXhpcyh0LG5bdF0ubWluLG5bdF0ubWF4LCEwKX0pKX1lbHNlIGUucmViYXNlUHJvamVjdGlvblRhcmdldCgpfShRKSxRLm5vdGlmeUxheW91dFVwZGF0ZShBLmxheW91dCxRLnByZXZWaWV3cG9ydEJveHx8QS5sYXlvdXQsZSl9LHJlc2V0VHJhbnNmb3JtOmZ1bmN0aW9uKCl7cmV0dXJuIGYoUSxrLHcpfSxyZXN0b3JlVHJhbnNmb3JtOmZ1bmN0aW9uKCl7cmV0dXJuIGgoayxFKX0sdXBkYXRlTGF5b3V0UHJvamVjdGlvbjpmdW5jdGlvbigpe2lmKFEuaXNQcm9qZWN0aW9uUmVhZHkoKSl7dmFyIGU9QS5kZWx0YSx0PUEudHJlZVNjYWxlLG49dC54LHI9dC55LG89QS5kZWx0YVRyYW5zZm9ybTsoZnVuY3Rpb24oZSx0LG4scil7dmFyIG8sYSxpPWUuZGVsdGEsbD1lLmxheW91dCxzPWUubGF5b3V0Q29ycmVjdGVkLGM9ZS50cmVlU2NhbGUsdT10LnRhcmdldDthPWwsRG4oKG89cykueCxhLngpLERuKG8ueSxhLnkpLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uLmxlbmd0aDtpZihyKXt2YXIgbyxhO3QueD10Lnk9MTtmb3IodmFyIGk9MDtpPHI7aSsrKWE9KG89bltpXSkuZ2V0TGF5b3V0U3RhdGUoKS5kZWx0YSx0LngqPWEueC5zY2FsZSx0LnkqPWEueS5zY2FsZSxObihlLGEpLFRuKG8pJiZ6bihlLGUsby5nZXRMYXRlc3RWYWx1ZXMoKSl9fShzLGMsbikseW4oaSxzLHUscil9KShBLEksUS5wYXRoLFApLEImJlEubm90aWZ5Vmlld3BvcnRCb3hVcGRhdGUoSS50YXJnZXQsZSksQj0hMTt2YXIgYT1FcihlLHQpO2E9PT1vJiZuPT09dC54JiZyPT09dC55fHxRLnNjaGVkdWxlUmVuZGVyKCksQS5kZWx0YVRyYW5zZm9ybT1hfX0sdXBkYXRlVHJlZUxheW91dFByb2plY3Rpb246ZnVuY3Rpb24oKXtRLmxheW91dFRyZWUuZm9yRWFjaChBcikscC5kZWZhdWx0LnByZVJlbmRlcihHLCExLCEwKX0sZ2V0UHJvamVjdGlvblBhcmVudDpmdW5jdGlvbigpe2lmKHZvaWQgMD09PVMpe2Zvcih2YXIgZT0hMSx0PVEucGF0aC5sZW5ndGgtMTt0Pj0wO3QtLSl7dmFyIG49US5wYXRoW3RdO2lmKG4ucHJvamVjdGlvbi5pc0VuYWJsZWQpe2U9bjticmVha319Uz1lfXJldHVybiBTfSxyZXNvbHZlUmVsYXRpdmVUYXJnZXRCb3g6ZnVuY3Rpb24oKXt2YXIgZT1RLmdldFByb2plY3Rpb25QYXJlbnQoKTtpZihSLnJlbGF0aXZlVGFyZ2V0JiZlJiYoZnVuY3Rpb24oZSx0KXtrbihlLnRhcmdldC54LGUucmVsYXRpdmVUYXJnZXQueCx0LnRhcmdldC54KSxrbihlLnRhcmdldC55LGUucmVsYXRpdmVUYXJnZXQueSx0LnRhcmdldC55KX0oUixlLnByb2plY3Rpb24pLFRuKGUpKSl7dmFyIHQ9Ui50YXJnZXQ7em4odCx0LGUuZ2V0TGF0ZXN0VmFsdWVzKCkpfX0sc2hvdWxkUmVzZXRUcmFuc2Zvcm06ZnVuY3Rpb24oKXtyZXR1cm4gQm9vbGVhbih3Ll9sYXlvdXRSZXNldFRyYW5zZm9ybSl9LHBvaW50VG86ZnVuY3Rpb24oZSl7ST1lLnByb2plY3Rpb24sSD1lLmdldExhdGVzdFZhbHVlcygpLG51bGw9PU98fE8oKSxPPWwucGlwZShlLm9uU2V0QXhpc1RhcmdldChRLnNjaGVkdWxlVXBkYXRlTGF5b3V0UHJvamVjdGlvbiksZS5vbkxheW91dEFuaW1hdGlvbkNvbXBsZXRlKChmdW5jdGlvbigpe3ZhciBlO1EuaXNQcmVzZW50P1EucHJlc2VuY2U9YXIuUHJlc2VudDpudWxsPT09KGU9US5sYXlvdXRTYWZlVG9SZW1vdmUpfHx2b2lkIDA9PT1lfHxlLmNhbGwoUSl9KSkpfSxpc1ByZXNlbnQ6ITAscHJlc2VuY2U6YXIuRW50ZXJpbmd9KTtyZXR1cm4gUX19O2Z1bmN0aW9uIEFyKGUpe2UucmVzb2x2ZVJlbGF0aXZlVGFyZ2V0Qm94KCl9ZnVuY3Rpb24gVHIoZSl7ZS51cGRhdGVMYXlvdXRQcm9qZWN0aW9uKCl9dmFyIERyLEJyPXIuX19zcHJlYWRBcnJheShbXCJpbml0aWFsXCJdLHIuX19yZWFkKGVuKSksWnI9QnIubGVuZ3RoLCRyPW5ldyBTZXQoW1wid2lkdGhcIixcImhlaWdodFwiLFwidG9wXCIsXCJsZWZ0XCIsXCJyaWdodFwiLFwiYm90dG9tXCIsXCJ4XCIsXCJ5XCJdKSxOcj1mdW5jdGlvbihlKXtyZXR1cm4gJHIuaGFzKGUpfSxGcj1mdW5jdGlvbihlLHQpe2Uuc2V0KHQsITEpLGUuc2V0KHQpfSxXcj1mdW5jdGlvbihlKXtyZXR1cm4gZT09PWkubnVtYmVyfHxlPT09aS5weH07IWZ1bmN0aW9uKGUpe2Uud2lkdGg9XCJ3aWR0aFwiLGUuaGVpZ2h0PVwiaGVpZ2h0XCIsZS5sZWZ0PVwibGVmdFwiLGUucmlnaHQ9XCJyaWdodFwiLGUudG9wPVwidG9wXCIsZS5ib3R0b209XCJib3R0b21cIn0oRHJ8fChEcj17fSkpO3ZhciBVcj1mdW5jdGlvbihlLHQpe3JldHVybiBwYXJzZUZsb2F0KGUuc3BsaXQoXCIsIFwiKVt0XSl9LHpyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7dmFyIG89ci50cmFuc2Zvcm07aWYoXCJub25lXCI9PT1vfHwhbylyZXR1cm4gMDt2YXIgYT1vLm1hdGNoKC9ebWF0cml4M2RcXCgoLispXFwpJC8pO2lmKGEpcmV0dXJuIFVyKGFbMV0sdCk7dmFyIGk9by5tYXRjaCgvXm1hdHJpeFxcKCguKylcXCkkLyk7cmV0dXJuIGk/VXIoaVsxXSxlKTowfX0sR3I9bmV3IFNldChbXCJ4XCIsXCJ5XCIsXCJ6XCJdKSxLcj1HLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIUdyLmhhcyhlKX0pKSxxcj17d2lkdGg6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS54O3JldHVybiB0Lm1heC10Lm1pbn0saGVpZ2h0OmZ1bmN0aW9uKGUpe3ZhciB0PWUueTtyZXR1cm4gdC5tYXgtdC5taW59LHRvcDpmdW5jdGlvbihlLHQpe3ZhciBuPXQudG9wO3JldHVybiBwYXJzZUZsb2F0KG4pfSxsZWZ0OmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5sZWZ0O3JldHVybiBwYXJzZUZsb2F0KG4pfSxib3R0b206ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnkscj10LnRvcDtyZXR1cm4gcGFyc2VGbG9hdChyKSsobi5tYXgtbi5taW4pfSxyaWdodDpmdW5jdGlvbihlLHQpe3ZhciBuPWUueCxyPXQubGVmdDtyZXR1cm4gcGFyc2VGbG9hdChyKSsobi5tYXgtbi5taW4pfSx4OnpyKDQsMTMpLHk6enIoNSwxNCl9O2Z1bmN0aW9uIFlyKGUsdCxuLG8pe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkuc29tZShOcil9KHQpP2Z1bmN0aW9uKGUsdCxuLG8pe3ZvaWQgMD09PW4mJihuPXt9KSx2b2lkIDA9PT1vJiYobz17fSksdD1yLl9fYXNzaWduKHt9LHQpLG89ci5fX2Fzc2lnbih7fSxvKTt2YXIgbD1PYmplY3Qua2V5cyh0KS5maWx0ZXIoTnIpLHM9W10sYz0hMSx1PVtdO2lmKGwuZm9yRWFjaCgoZnVuY3Rpb24ocil7dmFyIGw9ZS5nZXRWYWx1ZShyKTtpZihlLmhhc1ZhbHVlKHIpKXt2YXIgZCxwPW5bcl0sZj10W3JdLGg9JHQocCk7aWYoRWUoZikpZm9yKHZhciBnPWYubGVuZ3RoLHY9bnVsbD09PWZbMF0/MTowO3Y8Zzt2KyspZD9hLmludmFyaWFudCgkdChmW3ZdKT09PWQsXCJBbGwga2V5ZnJhbWVzIG11c3QgYmUgb2YgdGhlIHNhbWUgdHlwZVwiKTooZD0kdChmW3ZdKSxhLmludmFyaWFudChkPT09aHx8V3IoaCkmJldyKGQpLFwiS2V5ZnJhbWVzIG11c3QgYmUgb2YgdGhlIHNhbWUgZGltZW5zaW9uIGFzIHRoZSBjdXJyZW50IHZhbHVlXCIpKTtlbHNlIGQ9JHQoZik7aWYoaCE9PWQpaWYoV3IoaCkmJldyKGQpKXt2YXIgQz1sLmdldCgpO1wic3RyaW5nXCI9PXR5cGVvZiBDJiZsLnNldChwYXJzZUZsb2F0KEMpKSxcInN0cmluZ1wiPT10eXBlb2YgZj90W3JdPXBhcnNlRmxvYXQoZik6QXJyYXkuaXNBcnJheShmKSYmZD09PWkucHgmJih0W3JdPWYubWFwKHBhcnNlRmxvYXQpKX1lbHNlKG51bGw9PWg/dm9pZCAwOmgudHJhbnNmb3JtKSYmKG51bGw9PWQ/dm9pZCAwOmQudHJhbnNmb3JtKSYmKDA9PT1wfHwwPT09Zik/MD09PXA/bC5zZXQoZC50cmFuc2Zvcm0ocCkpOnRbcl09aC50cmFuc2Zvcm0oZik6KGN8fChzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiBLci5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgcj1lLmdldFZhbHVlKG4pO3ZvaWQgMCE9PXImJih0LnB1c2goW24sci5nZXQoKV0pLHIuc2V0KG4uc3RhcnRzV2l0aChcInNjYWxlXCIpPzE6MCkpfSkpLHQubGVuZ3RoJiZlLnN5bmNSZW5kZXIoKSx0fShlKSxjPSEwKSx1LnB1c2gociksb1tyXT12b2lkIDAhPT1vW3JdP29bcl06dFtyXSxGcihsLGYpKX19KSksdS5sZW5ndGgpe3ZhciBkPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10Lm1lYXN1cmVWaWV3cG9ydEJveCgpLG89dC5nZXRJbnN0YW5jZSgpLGE9Z2V0Q29tcHV0ZWRTdHlsZShvKSxpPWEuZGlzcGxheSxsPXt0b3A6YS50b3AsbGVmdDphLmxlZnQsYm90dG9tOmEuYm90dG9tLHJpZ2h0OmEucmlnaHQsdHJhbnNmb3JtOmEudHJhbnNmb3JtfTtcIm5vbmVcIj09PWkmJnQuc2V0U3RhdGljVmFsdWUoXCJkaXNwbGF5XCIsZS5kaXNwbGF5fHxcImJsb2NrXCIpLHQuc3luY1JlbmRlcigpO3ZhciBzPXQubWVhc3VyZVZpZXdwb3J0Qm94KCk7cmV0dXJuIG4uZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIG89dC5nZXRWYWx1ZShuKTtGcihvLHFyW25dKHIsbCkpLGVbbl09cXJbbl0ocyxhKX0pKSxlfSh0LGUsdSk7cmV0dXJuIHMubGVuZ3RoJiZzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPXIuX19yZWFkKHQsMiksbz1uWzBdLGE9blsxXTtlLmdldFZhbHVlKG8pLnNldChhKX0pKSxlLnN5bmNSZW5kZXIoKSx7dGFyZ2V0OmQsdHJhbnNpdGlvbkVuZDpvfX1yZXR1cm57dGFyZ2V0OnQsdHJhbnNpdGlvbkVuZDpvfX0oZSx0LG4sbyk6e3RhcmdldDp0LHRyYW5zaXRpb25FbmQ6b319dmFyIEpyPXt0cmVlVHlwZTpcImRvbVwiLHJlYWRWYWx1ZUZyb21JbnN0YW5jZTpmdW5jdGlvbihlLHQpe2lmKFkodCkpe3ZhciBuPUx0KHQpO3JldHVybiBuJiZuLmRlZmF1bHR8fDB9dmFyIHIsbz0ocj1lLHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHIpKTtyZXR1cm4obmUodCk/by5nZXRQcm9wZXJ0eVZhbHVlKHQpOm9bdF0pfHwwfSxzb3J0Tm9kZVBvc2l0aW9uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIDImZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0KT8xOi0xfSxnZXRCYXNlVGFyZ2V0OmZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuIG51bGw9PT0obj1lLnN0eWxlKXx8dm9pZCAwPT09bj92b2lkIDA6blt0XX0sbWVhc3VyZVZpZXdwb3J0Qm94OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFBuKGUsdC50cmFuc2Zvcm1QYWdlUG9pbnQpfSxyZXNldFRyYW5zZm9ybTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bi50cmFuc2Zvcm1UZW1wbGF0ZTt0LnN0eWxlLnRyYW5zZm9ybT1yP3Ioe30sXCJcIik6XCJub25lXCIsZS5zY2hlZHVsZVJlbmRlcigpfSxyZXN0b3JlVHJhbnNmb3JtOmZ1bmN0aW9uKGUsdCl7ZS5zdHlsZS50cmFuc2Zvcm09dC5zdHlsZS50cmFuc2Zvcm19LHJlbW92ZVZhbHVlRnJvbVJlbmRlclN0YXRlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC52YXJzLHI9dC5zdHlsZTtkZWxldGUgbltlXSxkZWxldGUgcltlXX0sbWFrZVRhcmdldEFuaW1hdGFibGU6ZnVuY3Rpb24oZSx0LG4sbyl7dmFyIGE9bi50cmFuc2Zvcm1WYWx1ZXM7dm9pZCAwPT09byYmKG89ITApO3ZhciBpPXQudHJhbnNpdGlvbixsPXQudHJhbnNpdGlvbkVuZCxzPXIuX19yZXN0KHQsW1widHJhbnNpdGlvblwiLFwidHJhbnNpdGlvbkVuZFwiXSksYz1LdChzLGl8fHt9LGUpO2lmKGEmJihsJiYobD1hKGwpKSxzJiYocz1hKHMpKSxjJiYoYz1hKGMpKSksbyl7enQoZSxzLGMpO3ZhciB1PWZ1bmN0aW9uKGUsdCxuLG8pe3ZhciBhPWZ1bmN0aW9uKGUsdCxuKXt2YXIgbyxhPXIuX19yZXN0KHQsW10pLGk9ZS5nZXRJbnN0YW5jZSgpO2lmKCEoaSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSlyZXR1cm57dGFyZ2V0OmEsdHJhbnNpdGlvbkVuZDpufTtmb3IodmFyIGwgaW4gbiYmKG49ci5fX2Fzc2lnbih7fSxuKSksZS5mb3JFYWNoVmFsdWUoKGZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0KCk7aWYoc3IodCkpe3ZhciBuPXVyKHQsaSk7biYmZS5zZXQobil9fSkpLGEpe3ZhciBzPWFbbF07aWYoc3Iocykpe3ZhciBjPXVyKHMsaSk7YyYmKGFbbF09YyxuJiYobnVsbCE9PShvPW5bbF0pJiZ2b2lkIDAhPT1vfHwobltsXT1zKSkpfX1yZXR1cm57dGFyZ2V0OmEsdHJhbnNpdGlvbkVuZDpufX0oZSx0LG8pO3JldHVybiBZcihlLHQ9YS50YXJnZXQsbixvPWEudHJhbnNpdGlvbkVuZCl9KGUscyxjLGwpO2w9dS50cmFuc2l0aW9uRW5kLHM9dS50YXJnZXR9cmV0dXJuIHIuX19hc3NpZ24oe3RyYW5zaXRpb246aSx0cmFuc2l0aW9uRW5kOmx9LHMpfSxzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHM6TGUsYnVpbGQ6ZnVuY3Rpb24oZSx0LG4scixvLGEsaSl7dm9pZCAwIT09ZS5pc1Zpc2libGUmJih0LnN0eWxlLnZpc2liaWxpdHk9ZS5pc1Zpc2libGU/XCJ2aXNpYmxlXCI6XCJoaWRkZW5cIik7dmFyIGw9ci5pc0VuYWJsZWQmJm8uaXNIeWRyYXRlZDtpZSh0LG4scixvLGEsaS50cmFuc2Zvcm1UZW1wbGF0ZSxsP0VyOnZvaWQgMCxsP2pyOnZvaWQgMCl9LHJlbmRlcjpTZX0sWHI9SHIoSnIpLFFyPUhyKHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxKcikse2dldEJhc2VUYXJnZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XX0scmVhZFZhbHVlRnJvbUluc3RhbmNlOmZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuIFkodCk/KG51bGw9PT0obj1MdCh0KSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZGVmYXVsdCl8fDA6KHQ9T2UuaGFzKHQpP3Q6a2UodCksZS5nZXRBdHRyaWJ1dGUodCkpfSxzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHM6X2UsYnVpbGQ6ZnVuY3Rpb24oZSx0LG4scixvLGEsaSl7dmFyIGw9ci5pc0VuYWJsZWQmJm8uaXNIeWRyYXRlZDttZSh0LG4scixvLGEsaS50cmFuc2Zvcm1UZW1wbGF0ZSxsP0VyOnZvaWQgMCxsP2pyOnZvaWQgMCl9LHJlbmRlcjpNZX0pKSxlbz1mdW5jdGlvbihlLHQpe3JldHVybiBGKGUpP1FyKHQse2VuYWJsZUhhcmR3YXJlQWNjZWxlcmF0aW9uOiExfSk6WHIodCx7ZW5hYmxlSGFyZHdhcmVBY2NlbGVyYXRpb246ITB9KX0sdG89ci5fX2Fzc2lnbihyLl9fYXNzaWduKHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxvbiksZnQpLGxyKSxMciksbm89JCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gWmUoZSx0LHRvLGVvKX0pKSxybz0kKFplKSxvbz0wO2Z1bmN0aW9uIGFvKCl7dmFyIGU9b287cmV0dXJuIG9vKyssZX12YXIgaW89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jaGlsZHJlbixuPWUuaW5pdGlhbCxyPWUuaXNQcmVzZW50LGE9ZS5vbkV4aXRDb21wbGV0ZSxpPWUuY3VzdG9tLGw9ZS5wcmVzZW5jZUFmZmVjdHNMYXlvdXQscz1rKGxvKSxjPWsoYW8pLGQ9by51c2VNZW1vKChmdW5jdGlvbigpe3JldHVybntpZDpjLGluaXRpYWw6bixpc1ByZXNlbnQ6cixjdXN0b206aSxvbkV4aXRDb21wbGV0ZTpmdW5jdGlvbihlKXtzLnNldChlLCEwKTt2YXIgdD0hMDtzLmZvckVhY2goKGZ1bmN0aW9uKGUpe2V8fCh0PSExKX0pKSx0JiYobnVsbD09YXx8YSgpKX0scmVnaXN0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHMuc2V0KGUsITEpLGZ1bmN0aW9uKCl7cmV0dXJuIHMuZGVsZXRlKGUpfX19fSksbD92b2lkIDA6W3JdKTtyZXR1cm4gby51c2VNZW1vKChmdW5jdGlvbigpe3MuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gcy5zZXQodCwhMSl9KSl9KSxbcl0pLHUudXNlRWZmZWN0KChmdW5jdGlvbigpeyFyJiYhcy5zaXplJiYobnVsbD09YXx8YSgpKX0pLFtyXSksdS5jcmVhdGVFbGVtZW50KHguUHJvdmlkZXIse3ZhbHVlOmR9LHQpfTtmdW5jdGlvbiBsbygpe3JldHVybiBuZXcgTWFwfWZ1bmN0aW9uIHNvKGUpe3JldHVybiBlLmtleXx8XCJcIn1mdW5jdGlvbiBjbyhlLHQsbil7dm9pZCAwPT09biYmKG49e30pO3ZhciByPWVlKGUpP2U6RHQoZSk7cmV0dXJuIEl0KFwiXCIscix0LG4pLHtzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIHIuc3RvcCgpfX19ZnVuY3Rpb24gdW8oKXt2YXIgZT1EdCgxKSx0PXtsZWFkOnZvaWQgMCxmb2xsb3c6dm9pZCAwLGNyb3NzZmFkZU9wYWNpdHk6ITEscHJlc2VydmVGb2xsb3dPcGFjaXR5OiExfSxuPXIuX19hc3NpZ24oe30sdCksbz17fSxhPXt9LGk9ITEsYz1udWxsLHU9MDtmdW5jdGlvbiBkKG4sbyl7dmFyIGE9dC5sZWFkLGw9dC5mb2xsb3c7aT0hMCxjPW51bGw7dmFyIHU9ITEsZD1mdW5jdGlvbigpe3U9ITAsYSYmYS5zY2hlZHVsZVJlbmRlcigpLGwmJmwuc2NoZWR1bGVSZW5kZXIoKX0sZj1mdW5jdGlvbigpe2k9ITEsYz1zLmdldEZyYW1lRGF0YSgpLnRpbWVzdGFtcH07cmV0dXJuIG89byYmUnQobyxcImNyb3NzZmFkZVwiKSxjbyhlLG4sci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LG8pLHtvblVwZGF0ZTpkLG9uQ29tcGxldGU6ZnVuY3Rpb24oKXt1P2YoKTooZS5zZXQobikscC5kZWZhdWx0LnJlYWQoZikpLGQoKX19KSl9cmV0dXJue2lzQWN0aXZlOmZ1bmN0aW9uKCl7cmV0dXJuIG8mJihpfHxzLmdldEZyYW1lRGF0YSgpLnRpbWVzdGFtcD09PWMpfSxmcm9tTGVhZDpmdW5jdGlvbihlKXtyZXR1cm4gZCgwLGUpfSx0b0xlYWQ6ZnVuY3Rpb24ocil7dmFyIG89MDtyZXR1cm4gdC5wcmV2VmFsdWVzfHx0LmZvbGxvdz9uLmxlYWQ9PT10LmZvbGxvdyYmbi5mb2xsb3c9PT10LmxlYWQmJihvPTEtZS5nZXQoKSk6bz0xLGUuc2V0KG8pLGQoMSxyKX0scmVzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5zZXQoMSl9LHN0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gZS5zdG9wKCl9LGdldENyb3NzZmFkZVN0YXRlOmZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciBuLHIsaT1zLmdldEZyYW1lRGF0YSgpLnRpbWVzdGFtcCxjPXQubGVhZCxkPXQuZm9sbG93O2lmKGkhPT11JiZjKXt1PWk7dmFyIHA9Yy5nZXRMYXRlc3RWYWx1ZXMoKTtPYmplY3QuYXNzaWduKG8scCk7dmFyIGY9ZD9kLmdldExhdGVzdFZhbHVlcygpOnQucHJldlZhbHVlcztPYmplY3QuYXNzaWduKGEsZik7dmFyIGg9ZS5nZXQoKSxnPW51bGwhPT0obj1wLm9wYWNpdHkpJiZ2b2lkIDAhPT1uP246MSx2PW51bGwhPT0ocj1udWxsPT1mP3ZvaWQgMDpmLm9wYWNpdHkpJiZ2b2lkIDAhPT1yP3I6MTt0LmNyb3NzZmFkZU9wYWNpdHkmJmQ/KG8ub3BhY2l0eT1sLm1peCghMSE9PWQuaXNWaXNpYmxlPzA6dixnLHBvKGgpKSxhLm9wYWNpdHk9dC5wcmVzZXJ2ZUZvbGxvd09wYWNpdHk/djpsLm1peCh2LDAsZm8oaCkpKTpkfHwoby5vcGFjaXR5PWwubWl4KHYsZyxoKSksZnVuY3Rpb24oZSx0LG4scixvLGEpe2Zvcih2YXIgaT0wO2k8dm87aSsrKXt2YXIgcz1cImJvcmRlclwiK2dvW2ldK1wiUmFkaXVzXCIsYz1DbyhyLHMpLHU9Q28obixzKTtpZigodm9pZCAwIT09Y3x8dm9pZCAwIT09dSkmJihjfHwoYz0wKSx1fHwodT0wKSxcIm51bWJlclwiPT10eXBlb2YgYyYmXCJudW1iZXJcIj09dHlwZW9mIHUpKXt2YXIgZD1NYXRoLm1heChsLm1peChjLHUsYSksMCk7ZVtzXT10W3NdPWR9fWlmKHIucm90YXRlfHxuLnJvdGF0ZSl7dmFyIHA9bC5taXgoci5yb3RhdGV8fDAsbi5yb3RhdGV8fDAsYSk7ZS5yb3RhdGU9dC5yb3RhdGU9cH0hbyYmbi5iYWNrZ3JvdW5kQ29sb3ImJnIuYmFja2dyb3VuZENvbG9yJiYoZS5iYWNrZ3JvdW5kQ29sb3I9dC5iYWNrZ3JvdW5kQ29sb3I9bC5taXhDb2xvcihyLmJhY2tncm91bmRDb2xvcixuLmJhY2tncm91bmRDb2xvcikoYSkpfShvLGEscCxmfHx7fSxCb29sZWFuKGQpLGgpfX0oKSxuPT09dC5sZWFkP286bj09PXQuZm9sbG93P2E6dm9pZCAwfSxzZXRPcHRpb25zOmZ1bmN0aW9uKGUpe249dCx0PWUsbz17fSxhPXt9fSxnZXRMYXRlc3RWYWx1ZXM6ZnVuY3Rpb24oKXtyZXR1cm4gb319fXZhciBwbz1obygwLC41LGwuY2lyY091dCksZm89aG8oLjUsLjk1LGwubGluZWFyKTtmdW5jdGlvbiBobyhlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiByPGU/MDpyPnQ/MTpuKGwucHJvZ3Jlc3MoZSx0LHIpKX19dmFyIGdvPVtcIlRvcExlZnRcIixcIlRvcFJpZ2h0XCIsXCJCb3R0b21MZWZ0XCIsXCJCb3R0b21SaWdodFwiXSx2bz1nby5sZW5ndGg7ZnVuY3Rpb24gQ28oZSx0KXt2YXIgbjtyZXR1cm4gbnVsbCE9PShuPWVbdF0pJiZ2b2lkIDAhPT1uP246ZS5ib3JkZXJSYWRpdXN9dmFyIG1vPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgdD1udWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHQuY2hpbGRyZW49bmV3IFNldCx0LnN0YWNrcz1uZXcgTWFwLHQuaGFzTW91bnRlZD0hMSx0LnVwZGF0ZVNjaGVkdWxlZD0hMSx0LnJlbmRlclNjaGVkdWxlZD0hMSx0LnN5bmNDb250ZXh0PXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSx5cigpKSx7c3luY1VwZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gdC5zY2hlZHVsZVVwZGF0ZShlKX0sZm9yY2VVcGRhdGU6ZnVuY3Rpb24oKXt0LnN5bmNDb250ZXh0PXIuX19hc3NpZ24oe30sdC5zeW5jQ29udGV4dCksdC5zY2hlZHVsZVVwZGF0ZSghMCl9LHJlZ2lzdGVyOmZ1bmN0aW9uKGUpe3JldHVybiB0LmFkZENoaWxkKGUpfSxyZW1vdmU6ZnVuY3Rpb24oZSl7cmV0dXJuIHQucmVtb3ZlQ2hpbGQoZSl9fSksdH1yZXR1cm4gci5fX2V4dGVuZHModCxlKSx0LnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3RoaXMuaGFzTW91bnRlZD0hMH0sdC5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5zdGFydExheW91dEFuaW1hdGlvbigpfSx0LnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXJTY2hlZHVsZWQ9ITAsITB9LHQucHJvdG90eXBlLnN0YXJ0TGF5b3V0QW5pbWF0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLnJlbmRlclNjaGVkdWxlZD10aGlzLnVwZGF0ZVNjaGVkdWxlZD0hMTt2YXIgdD10aGlzLnByb3BzLnR5cGU7dGhpcy5jaGlsZHJlbi5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmlzUHJlc2VudD9lLnByZXNlbmNlIT09YXIuRW50ZXJpbmcmJihlLnByZXNlbmNlPWUucHJlc2VuY2U9PT1hci5FeGl0aW5nP2FyLkVudGVyaW5nOmFyLlByZXNlbnQpOmUucHJlc2VuY2U9YXIuRXhpdGluZ30pKSx0aGlzLnVwZGF0ZVN0YWNrcygpO3ZhciBuPXtsYXlvdXRSZWFkeTpmdW5jdGlvbihuKXt2b2lkIDAhPT1uLmdldExheW91dElkKCk/ZS5nZXRTdGFjayhuKS5hbmltYXRlKG4sXCJjcm9zc2ZhZGVcIj09PXQpOm4ubm90aWZ5TGF5b3V0UmVhZHkoKX0scGFyZW50OnRoaXMuY29udGV4dC52aXN1YWxFbGVtZW50fTt0aGlzLmNoaWxkcmVuLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiBlLnN5bmNDb250ZXh0LmFkZCh0KX0pKSx0aGlzLnN5bmNDb250ZXh0LmZsdXNoKG4pLHRoaXMuc3RhY2tzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNsZWFyU25hcHNob3QoKX0pKX0sdC5wcm90b3R5cGUudXBkYXRlU3RhY2tzPWZ1bmN0aW9uKCl7dGhpcy5zdGFja3MuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudXBkYXRlTGVhZEFuZEZvbGxvdygpfSkpfSx0LnByb3RvdHlwZS5zY2hlZHVsZVVwZGF0ZT1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT0hMSksIWUmJnRoaXMudXBkYXRlU2NoZWR1bGVkfHwodGhpcy51cGRhdGVTY2hlZHVsZWQ9ITAsdGhpcy5jaGlsZHJlbi5mb3JFYWNoKChmdW5jdGlvbihlKXshZnVuY3Rpb24oZSl7Zm9yKHZhciB0PSExLG49e30scj0wO3I8ei5sZW5ndGg7cisrKXt2YXIgbz1cInJvdGF0ZVwiK3pbcl07ZS5oYXNWYWx1ZShvKSYmMCE9PWUuZ2V0U3RhdGljVmFsdWUobykmJih0PSEwLG5bb109ZS5nZXRTdGF0aWNWYWx1ZShvKSxlLnNldFN0YXRpY1ZhbHVlKG8sMCkpfWlmKHQpe2Zvcih2YXIgbyBpbiBlLnN5bmNSZW5kZXIoKSxuKWUuc2V0U3RhdGljVmFsdWUobyxuW29dKTtlLnNjaGVkdWxlUmVuZGVyKCl9fShlKSxlLnNob3VsZFJlc2V0VHJhbnNmb3JtKCkmJmUucmVzZXRUcmFuc2Zvcm0oKX0pKSx0aGlzLmNoaWxkcmVuLmZvckVhY2goVm4pLHRoaXMuc3RhY2tzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLnVwZGF0ZVNuYXBzaG90KCl9KSksIWUmJnRoaXMucmVuZGVyU2NoZWR1bGVkfHwodGhpcy5yZW5kZXJTY2hlZHVsZWQ9ITAsdGhpcy5mb3JjZVVwZGF0ZSgpKSl9LHQucHJvdG90eXBlLmFkZENoaWxkPWZ1bmN0aW9uKGUpe3RoaXMuY2hpbGRyZW4uYWRkKGUpLHRoaXMuYWRkVG9TdGFjayhlKSxlLnByZXNlbmNlPXRoaXMuaGFzTW91bnRlZD9hci5FbnRlcmluZzphci5QcmVzZW50fSx0LnByb3RvdHlwZS5yZW1vdmVDaGlsZD1mdW5jdGlvbihlKXt0aGlzLnNjaGVkdWxlVXBkYXRlKCksdGhpcy5jaGlsZHJlbi5kZWxldGUoZSksdGhpcy5yZW1vdmVGcm9tU3RhY2soZSl9LHQucHJvdG90eXBlLmFkZFRvU3RhY2s9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRTdGFjayhlKTtudWxsPT10fHx0LmFkZChlKX0sdC5wcm90b3R5cGUucmVtb3ZlRnJvbVN0YWNrPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0U3RhY2soZSk7bnVsbD09dHx8dC5yZW1vdmUoZSl9LHQucHJvdG90eXBlLmdldFN0YWNrPWZ1bmN0aW9uKGUpe3ZhciB0LG4sbyxhLGksbCxzLGMsdT1lLmdldExheW91dElkKCk7aWYodm9pZCAwIT09dSlyZXR1cm4hdGhpcy5zdGFja3MuaGFzKHUpJiZ0aGlzLnN0YWNrcy5zZXQodSwoYT1uZXcgU2V0LGk9e2xlYWRJc0V4aXRpbmc6ITF9LGw9ci5fX2Fzc2lnbih7fSxpKSxzPXVvKCksYz0hMSx7YWRkOmZ1bmN0aW9uKGUpe2Uuc2V0Q3Jvc3NmYWRlcihzKSxhLmFkZChlKSxvJiYoZS5wcmV2RHJhZ0N1cnNvcj1vKSxpLmxlYWR8fChpLmxlYWQ9ZSl9LHJlbW92ZTpmdW5jdGlvbihlKXthLmRlbGV0ZShlKX0sZ2V0TGVhZDpmdW5jdGlvbigpe3JldHVybiBpLmxlYWR9LHVwZGF0ZVNuYXBzaG90OmZ1bmN0aW9uKCl7aWYoaS5sZWFkKXt0PXMuaXNBY3RpdmUoKT9zLmdldExhdGVzdFZhbHVlcygpOmkubGVhZC5nZXRMYXRlc3RWYWx1ZXMoKSxuPWkubGVhZC5wcmV2Vmlld3BvcnRCb3g7dmFyIGU9bnIuZ2V0KGkubGVhZCk7ZSYmZS5pc0RyYWdnaW5nJiYobz1lLmN1cnNvclByb2dyZXNzKX19LGNsZWFyU25hcHNob3Q6ZnVuY3Rpb24oKXtvPW49dm9pZCAwfSx1cGRhdGVMZWFkQW5kRm9sbG93OmZ1bmN0aW9uKCl7dmFyIGUsbixvO2w9ci5fX2Fzc2lnbih7fSxpKTtmb3IodmFyIHU9QXJyYXkuZnJvbShhKSxkPXUubGVuZ3RoO2QtLTtkPj0wKXt2YXIgcD11W2RdO2lmKG4mJihudWxsIT1vfHwobz1wKSksbnVsbCE9bnx8KG49cCksbiYmbylicmVha31pLmxlYWQ9bixpLmZvbGxvdz1vLGkubGVhZElzRXhpdGluZz0obnVsbD09PShlPWkubGVhZCl8fHZvaWQgMD09PWU/dm9pZCAwOmUucHJlc2VuY2UpPT09YXIuRXhpdGluZyxzLnNldE9wdGlvbnMoe2xlYWQ6bixmb2xsb3c6byxwcmV2VmFsdWVzOnQsY3Jvc3NmYWRlT3BhY2l0eToobnVsbD09bz92b2lkIDA6by5pc1ByZXNlbmNlUm9vdCl8fChudWxsPT1uP3ZvaWQgMDpuLmlzUHJlc2VuY2VSb290KX0pLGkubGVhZD09PWwuZm9sbG93fHxsLmxlYWQ9PT1pLmxlYWQmJmwubGVhZElzRXhpdGluZz09PWkubGVhZElzRXhpdGluZ3x8KGM9ITApfSxhbmltYXRlOmZ1bmN0aW9uKGUsdCl7dmFyIHI7aWYodm9pZCAwPT09dCYmKHQ9ITEpLGU9PT1pLmxlYWQpe3Q/ZS5wb2ludFRvKGkubGVhZCk6ZS5zZXRWaXNpYmlsaXR5KCEwKTt2YXIgbz17fSxhPW51bGw9PT0ocj1pLmZvbGxvdyl8fHZvaWQgMD09PXI/dm9pZCAwOnIuZ2V0UHJvamVjdGlvblBhcmVudCgpO2lmKGEmJihvLnByZXZQYXJlbnQ9YSksZS5wcmVzZW5jZT09PWFyLkVudGVyaW5nP28ub3JpZ2luQm94PWkuZm9sbG93P2kuZm9sbG93LnByZXZWaWV3cG9ydEJveDpuOmUucHJlc2VuY2U9PT1hci5FeGl0aW5nJiYoby50YXJnZXRCb3g9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gbnVsbD09PShlPWkuZm9sbG93KXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5nZXRMYXlvdXRTdGF0ZSgpLmxheW91dH0oKSksYyl7Yz0hMTt2YXIgbD1lLmdldERlZmF1bHRUcmFuc2l0aW9uKCk7ZS5wcmVzZW5jZT09PWFyLkVudGVyaW5nP3MudG9MZWFkKGwpOnMuZnJvbUxlYWQobCl9ZS5ub3RpZnlMYXlvdXRSZWFkeShvKX1lbHNlIHQ/aS5sZWFkJiZlLnBvaW50VG8oaS5sZWFkKTplLnNldFZpc2liaWxpdHkoITEpfX0pKSx0aGlzLnN0YWNrcy5nZXQodSl9LHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiB1LmNyZWF0ZUVsZW1lbnQoa3IuUHJvdmlkZXIse3ZhbHVlOnRoaXMuc3luY0NvbnRleHR9LHRoaXMucHJvcHMuY2hpbGRyZW4pfSx0LmNvbnRleHRUeXBlPWIsdH0odS5Db21wb25lbnQpO2Z1bmN0aW9uIHdvKGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGV9dmFyIGJvPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7cmVuZGVyZXI6ZW99LG9uKSxmdCkseW89ci5fX2Fzc2lnbihyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sYm8pLGxyKSxMcik7ZnVuY3Rpb24geG8oZSl7dmFyIHQ9aygoZnVuY3Rpb24oKXtyZXR1cm4gRHQoZSl9KSk7aWYoby51c2VDb250ZXh0KHcpLmlzU3RhdGljKXt2YXIgbj1yLl9fcmVhZChvLnVzZVN0YXRlKGUpLDIpWzFdO28udXNlRWZmZWN0KChmdW5jdGlvbigpe3JldHVybiB0Lm9uQ2hhbmdlKG4pfSksW10pfXJldHVybiB0fWZ1bmN0aW9uIGtvKGUsdCl7by51c2VFZmZlY3QoKGZ1bmN0aW9uKCl7aWYoZWUoZSkpcmV0dXJuIGUub25DaGFuZ2UodCl9KSxbdF0pfWZ1bmN0aW9uIFNvKGUsdCl7dmFyIG49eG8odCgpKSxyPWZ1bmN0aW9uKCl7cmV0dXJuIG4uc2V0KHQoKSl9O3JldHVybiByKCksZnVuY3Rpb24oZSx0KXtvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXt2YXIgbj1lLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUub25DaGFuZ2UodCl9KSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG4uZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUoKX0pKX19KSl9KGUsKGZ1bmN0aW9uKCl7cmV0dXJuIHAuZGVmYXVsdC51cGRhdGUociwhMSwhMCl9KSksbn12YXIgT28sTW89ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiBlJiZlLm1peH0oZSk/ZS5taXg6dm9pZCAwfTtmdW5jdGlvbiBMbygpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTt2YXIgbj0hQXJyYXkuaXNBcnJheShlWzBdKSxvPW4/MDotMSxhPWVbMCtvXSxpPWVbMStvXSxzPWVbMitvXSxjPWVbMytvXSx1PWwuaW50ZXJwb2xhdGUoaSxzLHIuX19hc3NpZ24oe21peGVyOk1vKHNbMF0pfSxjKSk7cmV0dXJuIG4/dShhKTp1fWZ1bmN0aW9uIF9vKGUsdCxuLG8pe3ZhciBhPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpMbyh0LG4sbyk7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/UG8oZSxhKTpQbyhbZV0sKGZ1bmN0aW9uKGUpe3ZhciB0PXIuX19yZWFkKGUsMSlbMF07cmV0dXJuIGEodCl9KSl9ZnVuY3Rpb24gUG8oZSx0KXt2YXIgbj1rKChmdW5jdGlvbigpe3JldHVybltdfSkpO3JldHVybiBTbyhlLChmdW5jdGlvbigpe24ubGVuZ3RoPTA7Zm9yKHZhciByPWUubGVuZ3RoLG89MDtvPHI7bysrKW5bb109ZVtvXS5nZXQoKTtyZXR1cm4gdChuKX0pKX1mdW5jdGlvbiBFbygpe3JldHVybntzY3JvbGxYOkR0KDApLHNjcm9sbFk6RHQoMCksc2Nyb2xsWFByb2dyZXNzOkR0KDApLHNjcm9sbFlQcm9ncmVzczpEdCgwKX19ZnVuY3Rpb24gam8oZSx0LG4pe24uc2V0KGUmJnQ/ZS90OjApfWZ1bmN0aW9uIFJvKGUsdCl7dmFyIG49ZnVuY3Rpb24oKXt2YXIgbj10KCkscj1uLnhPZmZzZXQsbz1uLnlPZmZzZXQsYT1uLnhNYXhPZmZzZXQsaT1uLnlNYXhPZmZzZXQ7ZS5zY3JvbGxYLnNldChyKSxlLnNjcm9sbFkuc2V0KG8pLGpvKHIsYSxlLnNjcm9sbFhQcm9ncmVzcyksam8obyxpLGUuc2Nyb2xsWVByb2dyZXNzKX07cmV0dXJuIG4oKSxufWZ1bmN0aW9uIElvKCl7cmV0dXJue3hPZmZzZXQ6d2luZG93LnBhZ2VYT2Zmc2V0LHlPZmZzZXQ6d2luZG93LnBhZ2VZT2Zmc2V0LHhNYXhPZmZzZXQ6ZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aC13aW5kb3cuaW5uZXJXaWR0aCx5TWF4T2Zmc2V0OmRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0LXdpbmRvdy5pbm5lckhlaWdodH19dmFyIFZvLEhvPSExO2Z1bmN0aW9uIEFvKCl7dmFyIGU9ITEsdD1bXSxuPW5ldyBTZXQsbz17c3Vic2NyaWJlOmZ1bmN0aW9uKGUpe3JldHVybiBuLmFkZChlKSxmdW5jdGlvbigpe24uZGVsZXRlKGUpfX0sc3RhcnQ6ZnVuY3Rpb24ocixvKXtpZihlKXt2YXIgYT1bXTtyZXR1cm4gbi5mb3JFYWNoKChmdW5jdGlvbihlKXthLnB1c2gocXQoZSxyLHt0cmFuc2l0aW9uT3ZlcnJpZGU6b30pKX0pKSxQcm9taXNlLmFsbChhKX1yZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe3QucHVzaCh7YW5pbWF0aW9uOltyLG9dLHJlc29sdmU6ZX0pfSkpfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGEuaW52YXJpYW50KGUsXCJjb250cm9scy5zZXQoKSBzaG91bGQgb25seSBiZSBjYWxsZWQgYWZ0ZXIgYSBjb21wb25lbnQgaGFzIG1vdW50ZWQuIENvbnNpZGVyIGNhbGxpbmcgd2l0aGluIGEgdXNlRWZmZWN0IGhvb2suXCIpLG4uZm9yRWFjaCgoZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7QXJyYXkuaXNBcnJheSh0KT9VdChlLHQpOlwic3RyaW5nXCI9PXR5cGVvZiB0P1V0KGUsW3RdKTpXdChlLHQpfShlLHQpfSkpfSxzdG9wOmZ1bmN0aW9uKCl7bi5mb3JFYWNoKChmdW5jdGlvbihlKXshZnVuY3Rpb24oZSl7ZS5mb3JFYWNoVmFsdWUoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnN0b3AoKX0pKX0oZSl9KSl9LG1vdW50OmZ1bmN0aW9uKCl7cmV0dXJuIGU9ITAsdC5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lLmFuaW1hdGlvbixuPWUucmVzb2x2ZTtvLnN0YXJ0LmFwcGx5KG8sci5fX3NwcmVhZEFycmF5KFtdLHIuX19yZWFkKHQpKSkudGhlbihuKX0pKSxmdW5jdGlvbigpe2U9ITEsby5zdG9wKCl9fX07cmV0dXJuIG99dmFyIFRvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuY29tcG9uZW50Q29udHJvbHM9bmV3IFNldH1yZXR1cm4gZS5wcm90b3R5cGUuc3Vic2NyaWJlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuY29tcG9uZW50Q29udHJvbHMuYWRkKGUpLGZ1bmN0aW9uKCl7cmV0dXJuIHQuY29tcG9uZW50Q29udHJvbHMuZGVsZXRlKGUpfX0sZS5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24oZSx0KXt0aGlzLmNvbXBvbmVudENvbnRyb2xzLmZvckVhY2goKGZ1bmN0aW9uKG4pe24uc3RhcnQoZS5uYXRpdmVFdmVudHx8ZSx0KX0pKX0sZS5wcm90b3R5cGUudXBkYXRlQ29uc3RyYWludHM9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9ITApLHRoaXMuY29tcG9uZW50Q29udHJvbHMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS51cGRhdGVDb25zdHJhaW50cygpfSkpLGUmJlFuKCl9LGV9KCksRG89ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFRvfSxCbz1mdW5jdGlvbigpe3JldHVybnt9fSxabz1Icih7YnVpbGQ6ZnVuY3Rpb24oKXt9LG1lYXN1cmVWaWV3cG9ydEJveDpmdW5jdGlvbigpe3JldHVybnt4OnttaW46MCxtYXg6MX0seTp7bWluOjAsbWF4OjF9fX0scmVzZXRUcmFuc2Zvcm06ZnVuY3Rpb24oKXt9LHJlc3RvcmVUcmFuc2Zvcm06ZnVuY3Rpb24oKXt9LHJlbW92ZVZhbHVlRnJvbVJlbmRlclN0YXRlOmZ1bmN0aW9uKCl7fSxyZW5kZXI6ZnVuY3Rpb24oKXt9LHNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wczpCbyxyZWFkVmFsdWVGcm9tSW5zdGFuY2U6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuLmluaXRpYWxTdGF0ZVt0XXx8MH0sbWFrZVRhcmdldEFuaW1hdGFibGU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnRyYW5zaXRpb24sbz10LnRyYW5zaXRpb25FbmQsYT1yLl9fcmVzdCh0LFtcInRyYW5zaXRpb25cIixcInRyYW5zaXRpb25FbmRcIl0pO3JldHVybiB6dChlLGEsS3QoYSxufHx7fSxlKSksci5fX2Fzc2lnbih7dHJhbnNpdGlvbjpuLHRyYW5zaXRpb25FbmQ6b30sYSl9fSksJG89SGUoe3NjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wczpCbyxjcmVhdGVSZW5kZXJTdGF0ZTpCb30pLE5vPWZ1bmN0aW9uKGUpe3JldHVybiBlPi4wMDE/MS9lOjFlNX0sRm89ITE7dC5BbmltYXRlUHJlc2VuY2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jaGlsZHJlbixuPWUuY3VzdG9tLGE9ZS5pbml0aWFsLGk9dm9pZCAwPT09YXx8YSxsPWUub25FeGl0Q29tcGxldGUscz1lLmV4aXRCZWZvcmVFbnRlcixjPWUucHJlc2VuY2VBZmZlY3RzTGF5b3V0LGQ9dm9pZCAwPT09Y3x8YyxwPWZ1bmN0aW9uKCl7dmFyIGU9by51c2VSZWYoITEpLHQ9ci5fX3JlYWQoby51c2VTdGF0ZSgwKSwyKSxuPXRbMF0sYT10WzFdO3JldHVybiBkdCgoZnVuY3Rpb24oKXtyZXR1cm4gZS5jdXJyZW50PSEwfSkpLG8udXNlQ2FsbGJhY2soKGZ1bmN0aW9uKCl7IWUuY3VycmVudCYmYShuKzEpfSksW25dKX0oKSxmPW8udXNlQ29udGV4dChrcik7T3IoZikmJihwPWYuZm9yY2VVcGRhdGUpO3ZhciBoPW8udXNlUmVmKCEwKSxnPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiBvLkNoaWxkcmVuLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7by5pc1ZhbGlkRWxlbWVudChlKSYmdC5wdXNoKGUpfSkpLHR9KHQpLHY9by51c2VSZWYoZyksQz1vLnVzZVJlZihuZXcgTWFwKS5jdXJyZW50LG09by51c2VSZWYobmV3IFNldCkuY3VycmVudDtpZihmdW5jdGlvbihlLHQpe2UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49c28oZSk7dC5zZXQobixlKX0pKX0oZyxDKSxoLmN1cnJlbnQpcmV0dXJuIGguY3VycmVudD0hMSx1LmNyZWF0ZUVsZW1lbnQodS5GcmFnbWVudCxudWxsLGcubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gdS5jcmVhdGVFbGVtZW50KGlvLHtrZXk6c28oZSksaXNQcmVzZW50OiEwLGluaXRpYWw6ISFpJiZ2b2lkIDAscHJlc2VuY2VBZmZlY3RzTGF5b3V0OmR9LGUpfSkpKTtmb3IodmFyIHc9ci5fX3NwcmVhZEFycmF5KFtdLHIuX19yZWFkKGcpKSxiPXYuY3VycmVudC5tYXAoc28pLHk9Zy5tYXAoc28pLHg9Yi5sZW5ndGgsaz0wO2s8eDtrKyspe3ZhciBTPWJba107LTE9PT15LmluZGV4T2YoUyk/bS5hZGQoUyk6bS5kZWxldGUoUyl9cmV0dXJuIHMmJm0uc2l6ZSYmKHc9W10pLG0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYoLTE9PT15LmluZGV4T2YoZSkpe3ZhciB0PUMuZ2V0KGUpO2lmKHQpe3ZhciByPWIuaW5kZXhPZihlKTt3LnNwbGljZShyLDAsdS5jcmVhdGVFbGVtZW50KGlvLHtrZXk6c28odCksaXNQcmVzZW50OiExLG9uRXhpdENvbXBsZXRlOmZ1bmN0aW9uKCl7Qy5kZWxldGUoZSksbS5kZWxldGUoZSk7dmFyIHQ9di5jdXJyZW50LmZpbmRJbmRleCgoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5PT09ZX0pKTt2LmN1cnJlbnQuc3BsaWNlKHQsMSksbS5zaXplfHwodi5jdXJyZW50PWcscCgpLGwmJmwoKSl9LGN1c3RvbTpuLHByZXNlbmNlQWZmZWN0c0xheW91dDpkfSx0KSl9fX0pKSx3PXcubWFwKChmdW5jdGlvbihlKXt2YXIgdD1lLmtleTtyZXR1cm4gbS5oYXModCk/ZTp1LmNyZWF0ZUVsZW1lbnQoaW8se2tleTpzbyhlKSxpc1ByZXNlbnQ6ITAscHJlc2VuY2VBZmZlY3RzTGF5b3V0OmR9LGUpfSkpLHYuY3VycmVudD13LHUuY3JlYXRlRWxlbWVudCh1LkZyYWdtZW50LG51bGwsbS5zaXplP3c6dy5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBvLmNsb25lRWxlbWVudChlKX0pKSl9LHQuQW5pbWF0ZVNoYXJlZExheW91dD1tbyx0LkRyYWdDb250cm9scz1Ubyx0LkZsYXRUcmVlPVZyLHQuRnJhbWVyVHJlZUxheW91dENvbnRleHQ9U3IsdC5MYXlvdXRHcm91cENvbnRleHQ9UCx0LkxhenlNb3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jaGlsZHJlbixuPWUuZmVhdHVyZXMsYT1lLnN0cmljdCxpPXZvaWQgMCE9PWEmJmEsbD1yLl9fcmVhZChvLnVzZVN0YXRlKCF3byhuKSksMilbMV0scz1vLnVzZVJlZih2b2lkIDApO2lmKCF3byhuKSl7dmFyIGM9bi5yZW5kZXJlcixkPXIuX19yZXN0KG4sW1wicmVuZGVyZXJcIl0pO3MuY3VycmVudD1jLGcoZCl9cmV0dXJuIG8udXNlRWZmZWN0KChmdW5jdGlvbigpe3dvKG4pJiZuKCkudGhlbigoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZW5kZXJlcjtnKHIuX19yZXN0KGUsW1wicmVuZGVyZXJcIl0pKSxzLmN1cnJlbnQ9dCxsKCEwKX0pKX0pLFtdKSx1LmNyZWF0ZUVsZW1lbnQodi5Qcm92aWRlcix7dmFsdWU6e3JlbmRlcmVyOnMuY3VycmVudCxzdHJpY3Q6aX19LHQpfSx0Lk1vdGlvbkNvbmZpZz1mdW5jdGlvbihlKXt2YXIgdD1lLmNoaWxkcmVuLG49ci5fX3Jlc3QoZSxbXCJjaGlsZHJlblwiXSk7KG49ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LG8udXNlQ29udGV4dCh3KSksbikpLmlzU3RhdGljPWsoKGZ1bmN0aW9uKCl7cmV0dXJuIG4uaXNTdGF0aWN9KSk7dmFyIGE9XCJvYmplY3RcIj09dHlwZW9mIG4udHJhbnNpdGlvbj9uLnRyYW5zaXRpb24udG9TdHJpbmcoKTpcIlwiLGk9by51c2VNZW1vKChmdW5jdGlvbigpe3JldHVybiBufSksW2Esbi50cmFuc2Zvcm1QYWdlUG9pbnRdKTtyZXR1cm4gdS5jcmVhdGVFbGVtZW50KHcuUHJvdmlkZXIse3ZhbHVlOml9LHQpfSx0Lk1vdGlvbkNvbmZpZ0NvbnRleHQ9dyx0Lk1vdGlvblZhbHVlPVR0LHQuUHJlc2VuY2VDb250ZXh0PXgsdC5TaGFyZWRMYXlvdXRDb250ZXh0PWtyLHQuYWRkU2NhbGVDb3JyZWN0aW9uPVUsdC5hbmltYXRlPWNvLHQuYW5pbWF0ZVZpc3VhbEVsZW1lbnQ9cXQsdC5hbmltYXRpb25Db250cm9scz1Bbyx0LmJhdGNoTGF5b3V0PVhuLHQuY3JlYXRlQmF0Y2hlcj15cix0LmNyZWF0ZUNyb3NzZmFkZXI9dW8sdC5jcmVhdGVEb21Nb3Rpb25Db21wb25lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIFooWmUoZSx7Zm9yd2FyZE1vdGlvblByb3BzOiExfSx0byxlbykpfSx0LmNyZWF0ZU1vdGlvbkNvbXBvbmVudD1aLHQuZG9tQW5pbWF0aW9uPWJvLHQuZG9tTWF4PXlvLHQuZmx1c2hMYXlvdXQ9UW4sdC5pc1ZhbGlkTW90aW9uUHJvcD1kZSx0Lm09cm8sdC5tb3Rpb249bm8sdC5tb3Rpb25WYWx1ZT1EdCx0LnJlc29sdmVNb3Rpb25WYWx1ZT1JZSx0LnNuYXBzaG90Vmlld3BvcnRCb3g9Vm4sdC50cmFuc2Zvcm09TG8sdC51c2VBbmltYXRpb249ZnVuY3Rpb24oKXt2YXIgZT1rKEFvKTtyZXR1cm4gby51c2VFZmZlY3QoZS5tb3VudCxbXSksZX0sdC51c2VDeWNsZT1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTt2YXIgbj1vLnVzZVJlZigwKSxhPXIuX19yZWFkKG8udXNlU3RhdGUoZVtuLmN1cnJlbnRdKSwyKSxpPWFbMF0scz1hWzFdO3JldHVybltpLGZ1bmN0aW9uKHQpe24uY3VycmVudD1cIm51bWJlclwiIT10eXBlb2YgdD9sLndyYXAoMCxlLmxlbmd0aCxuLmN1cnJlbnQrMSk6dCxzKGVbbi5jdXJyZW50XSl9XX0sdC51c2VEZXByZWNhdGVkQW5pbWF0ZWRTdGF0ZT1mdW5jdGlvbihlKXt2YXIgdD1yLl9fcmVhZChvLnVzZVN0YXRlKGUpLDIpLG49dFswXSxhPXRbMV0saT0kbyh7fSwhMSksbD1rKChmdW5jdGlvbigpe3JldHVybiBabyh7cHJvcHM6e30sdmlzdWFsU3RhdGU6aX0se2luaXRpYWxTdGF0ZTplfSl9KSk7cmV0dXJuIG8udXNlRWZmZWN0KChmdW5jdGlvbigpe3JldHVybiBsLm1vdW50KHt9KSxsLnVubW91bnQoKX0pLFtdKSxvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXtsLnNldFByb3BzKHtvblVwZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gYShyLl9fYXNzaWduKHt9LGUpKX19KX0pKSxbbixrKChmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gcXQobCxlKX19KSldfSx0LnVzZURlcHJlY2F0ZWRJbnZlcnRlZFNjYWxlPWZ1bmN0aW9uKGUpe3ZhciB0PXhvKDEpLG49eG8oMSkscj15KCk7cmV0dXJuIGEuaW52YXJpYW50KCEoIWUmJiFyKSxcIklmIG5vIHNjYWxlIHZhbHVlcyBhcmUgcHJvdmlkZWQsIHVzZUludmVydGVkU2NhbGUgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIGNoaWxkIG9mIGFub3RoZXIgbW90aW9uIGNvbXBvbmVudC5cIiksYS53YXJuaW5nKEZvLFwidXNlSW52ZXJ0ZWRTY2FsZSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gMy4wLiBVc2UgdGhlIGxheW91dCBwcm9wIGluc3RlYWQuXCIpLEZvPSEwLGU/KHQ9ZS5zY2FsZVh8fHQsbj1lLnNjYWxlWXx8bik6ciYmKHQ9ci5nZXRWYWx1ZShcInNjYWxlWFwiLDEpLG49ci5nZXRWYWx1ZShcInNjYWxlWVwiLDEpKSx7c2NhbGVYOl9vKHQsTm8pLHNjYWxlWTpfbyhuLE5vKX19LHQudXNlRG9tRXZlbnQ9TmUsdC51c2VEcmFnQ29udHJvbHM9ZnVuY3Rpb24oKXtyZXR1cm4gayhEbyl9LHQudXNlRWxlbWVudFNjcm9sbD1mdW5jdGlvbihlKXt2YXIgdD1rKEVvKTtyZXR1cm4gaigoZnVuY3Rpb24oKXt2YXIgbj1lLmN1cnJlbnQ7aWYoYS5pbnZhcmlhbnQoISFuLFwicmVmIHByb3ZpZGVkIHRvIHVzZVNjcm9sbCBtdXN0IGJlIHBhc3NlZCBpbnRvIGEgSFRNTCBlbGVtZW50LlwiKSxuKXt2YXIgcj1Sbyh0LGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybnt4T2Zmc2V0OmUuc2Nyb2xsTGVmdCx5T2Zmc2V0OmUuc2Nyb2xsVG9wLHhNYXhPZmZzZXQ6ZS5zY3JvbGxXaWR0aC1lLm9mZnNldFdpZHRoLHlNYXhPZmZzZXQ6ZS5zY3JvbGxIZWlnaHQtZS5vZmZzZXRIZWlnaHR9fX0obikpLG89JGUobixcInNjcm9sbFwiLHIse3Bhc3NpdmU6ITB9KSxpPSRlKG4sXCJyZXNpemVcIixyKTtyZXR1cm4gZnVuY3Rpb24oKXtvJiZvKCksaSYmaSgpfX19KSxbXSksdH0sdC51c2VJc1ByZXNlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gTyhvLnVzZUNvbnRleHQoeCkpfSx0LnVzZU1vdGlvblRlbXBsYXRlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMV09YXJndW1lbnRzW25dO3ZhciByPWUubGVuZ3RoO3JldHVybiBTbyh0LChmdW5jdGlvbigpe2Zvcih2YXIgbj1cIlwiLG89MDtvPHI7bysrKW4rPWVbb10sdFtvXSYmKG4rPXRbb10uZ2V0KCkpO3JldHVybiBufSkpfSx0LnVzZU1vdGlvblZhbHVlPXhvLHQudXNlUHJlc2VuY2U9Uyx0LnVzZVJlZHVjZWRNb3Rpb249ZnVuY3Rpb24oKXshVm8mJmZ1bmN0aW9uKCl7aWYoVm89RHQobnVsbCksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdylpZih3aW5kb3cubWF0Y2hNZWRpYSl7dmFyIGU9d2luZG93Lm1hdGNoTWVkaWEoXCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbilcIiksdD1mdW5jdGlvbigpe3JldHVybiBWby5zZXQoZS5tYXRjaGVzKX07ZS5hZGRMaXN0ZW5lcih0KSx0KCl9ZWxzZSBWby5zZXQoITEpfSgpO3ZhciBlPXIuX19yZWFkKG8udXNlU3RhdGUoVm8uZ2V0KCkpLDIpLHQ9ZVswXSxuPWVbMV07cmV0dXJuIGtvKFZvLG4pLHR9LHQudXNlU3ByaW5nPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9e30pO3ZhciBuPW8udXNlQ29udGV4dCh3KS5pc1N0YXRpYyxhPW8udXNlUmVmKG51bGwpLGk9eG8oZWUoZSk/ZS5nZXQoKTplKTtyZXR1cm4gby51c2VNZW1vKChmdW5jdGlvbigpe3JldHVybiBpLmF0dGFjaCgoZnVuY3Rpb24oZSxvKXtyZXR1cm4gbj9vKGUpOihhLmN1cnJlbnQmJmEuY3VycmVudC5zdG9wKCksYS5jdXJyZW50PWwuYW5pbWF0ZShyLl9fYXNzaWduKHIuX19hc3NpZ24oe2Zyb206aS5nZXQoKSx0bzplLHZlbG9jaXR5OmkuZ2V0VmVsb2NpdHkoKX0sdCkse29uVXBkYXRlOm99KSksaS5nZXQoKSl9KSl9KSxPYmplY3QudmFsdWVzKHQpKSxrbyhlLChmdW5jdGlvbihlKXtyZXR1cm4gaS5zZXQocGFyc2VGbG9hdChlKSl9KSksaX0sdC51c2VUcmFuc2Zvcm09X28sdC51c2VWZWxvY2l0eT1mdW5jdGlvbihlKXt2YXIgdD14byhlLmdldFZlbG9jaXR5KCkpO3JldHVybiBvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gZS52ZWxvY2l0eVVwZGF0ZVN1YnNjcmliZXJzLmFkZCgoZnVuY3Rpb24oZSl7dC5zZXQoZSl9KSl9KSxbZV0pLHR9LHQudXNlVmlld3BvcnRTY3JvbGw9ZnVuY3Rpb24oKXtyZXR1cm4gT298fChPbz1FbygpKSxqKChmdW5jdGlvbigpeyFIbyYmZnVuY3Rpb24oKXtpZihIbz0hMCxcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93KXt2YXIgZT1SbyhPbyxJbyk7JGUod2luZG93LFwic2Nyb2xsXCIsZSx7cGFzc2l2ZTohMH0pLCRlKHdpbmRvdyxcInJlc2l6ZVwiLGUpfX0oKX0pLFtdKSxPb30sdC52aXN1YWxFbGVtZW50PUhyfSw0ODM5OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIG49MS82MCoxZTMscj1cInVuZGVmaW5lZFwiIT10eXBlb2YgcGVyZm9ybWFuY2U/ZnVuY3Rpb24oKXtyZXR1cm4gcGVyZm9ybWFuY2Uubm93KCl9OmZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCl9LG89XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz9mdW5jdGlvbihlKXtyZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShlKX06ZnVuY3Rpb24oZSl7cmV0dXJuIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cmV0dXJuIGUocigpKX0pLG4pfSxhPSEwLGk9ITEsbD0hMSxzPXtkZWx0YTowLHRpbWVzdGFtcDowfSxjPVtcInJlYWRcIixcInVwZGF0ZVwiLFwicHJlUmVuZGVyXCIsXCJyZW5kZXJcIixcInBvc3RSZW5kZXJcIl0sdT1jLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XT1mdW5jdGlvbihlKXt2YXIgdD1bXSxuPVtdLHI9MCxvPSExLGE9bmV3IFdlYWtTZXQsaT17c2NoZWR1bGU6ZnVuY3Rpb24oZSxpLGwpe3ZvaWQgMD09PWkmJihpPSExKSx2b2lkIDA9PT1sJiYobD0hMSk7dmFyIHM9bCYmbyxjPXM/dDpuO3JldHVybiBpJiZhLmFkZChlKSwtMT09PWMuaW5kZXhPZihlKSYmKGMucHVzaChlKSxzJiZvJiYocj10Lmxlbmd0aCkpLGV9LGNhbmNlbDpmdW5jdGlvbihlKXt2YXIgdD1uLmluZGV4T2YoZSk7LTEhPT10JiZuLnNwbGljZSh0LDEpLGEuZGVsZXRlKGUpfSxwcm9jZXNzOmZ1bmN0aW9uKGwpe3ZhciBzO2lmKG89ITAsdD0ocz1bbix0XSlbMF0sKG49c1sxXSkubGVuZ3RoPTAscj10Lmxlbmd0aClmb3IodmFyIGM9MDtjPHI7YysrKXt2YXIgdT10W2NdO3UobCksYS5oYXModSkmJihpLnNjaGVkdWxlKHUpLGUoKSl9bz0hMX19O3JldHVybiBpfSgoZnVuY3Rpb24oKXtyZXR1cm4gaT0hMH0pKSxlfSkse30pLGQ9Yy5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7dmFyIG49dVt0XTtyZXR1cm4gZVt0XT1mdW5jdGlvbihlLHQscil7cmV0dXJuIHZvaWQgMD09PXQmJih0PSExKSx2b2lkIDA9PT1yJiYocj0hMSksaXx8digpLG4uc2NoZWR1bGUoZSx0LHIpfSxlfSkse30pLHA9Yy5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF09dVt0XS5jYW5jZWwsZX0pLHt9KSxmPWMucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlW3RdPWZ1bmN0aW9uKCl7cmV0dXJuIHVbdF0ucHJvY2VzcyhzKX0sZX0pLHt9KSxoPWZ1bmN0aW9uKGUpe3JldHVybiB1W2VdLnByb2Nlc3Mocyl9LGc9ZnVuY3Rpb24oZSl7aT0hMSxzLmRlbHRhPWE/bjpNYXRoLm1heChNYXRoLm1pbihlLXMudGltZXN0YW1wLDQwKSwxKSxzLnRpbWVzdGFtcD1lLGw9ITAsYy5mb3JFYWNoKGgpLGw9ITEsaSYmKGE9ITEsbyhnKSl9LHY9ZnVuY3Rpb24oKXtpPSEwLGE9ITAsbHx8byhnKX07dC5jYW5jZWxTeW5jPXAsdC5kZWZhdWx0PWQsdC5mbHVzaFN5bmM9Zix0LmdldEZyYW1lRGF0YT1mdW5jdGlvbigpe3JldHVybiBzfX0sNDM5NDooZSx0LG4pPT57bi5yKHQpLG4uZCh0LHtpbnZhcmlhbnQ6KCk9Pm8sd2FybmluZzooKT0+cn0pO3ZhciByPWZ1bmN0aW9uKCl7fSxvPWZ1bmN0aW9uKCl7fX0sNzczOihlLHQsbik9Pnt2YXIgcixvPVwiX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfX1wiLGE9L15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLyxpPVwib2JqZWN0XCI9PXR5cGVvZiBuLmcmJm4uZyYmbi5nLk9iamVjdD09PU9iamVjdCYmbi5nLGw9XCJvYmplY3RcIj09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLHM9aXx8bHx8RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpLGM9QXJyYXkucHJvdG90eXBlLHU9RnVuY3Rpb24ucHJvdG90eXBlLGQ9T2JqZWN0LnByb3RvdHlwZSxwPXNbXCJfX2NvcmUtanNfc2hhcmVkX19cIl0sZj0ocj0vW14uXSskLy5leGVjKHAmJnAua2V5cyYmcC5rZXlzLklFX1BST1RPfHxcIlwiKSk/XCJTeW1ib2woc3JjKV8xLlwiK3I6XCJcIixoPXUudG9TdHJpbmcsZz1kLmhhc093blByb3BlcnR5LHY9ZC50b1N0cmluZyxDPVJlZ0V4cChcIl5cIitoLmNhbGwoZykucmVwbGFjZSgvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2csXCJcXFxcJCZcIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZyxcIiQxLio/XCIpK1wiJFwiKSxtPWMuc3BsaWNlLHc9TShzLFwiTWFwXCIpLGI9TShPYmplY3QsXCJjcmVhdGVcIik7ZnVuY3Rpb24geShlKXt2YXIgdD0tMSxuPWU/ZS5sZW5ndGg6MDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiB4KGUpe3ZhciB0PS0xLG49ZT9lLmxlbmd0aDowO2Zvcih0aGlzLmNsZWFyKCk7Kyt0PG47KXt2YXIgcj1lW3RdO3RoaXMuc2V0KHJbMF0sclsxXSl9fWZ1bmN0aW9uIGsoZSl7dmFyIHQ9LTEsbj1lP2UubGVuZ3RoOjA7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24gUyhlLHQpe2Zvcih2YXIgbixyLG89ZS5sZW5ndGg7by0tOylpZigobj1lW29dWzBdKT09PShyPXQpfHxuIT1uJiZyIT1yKXJldHVybiBvO3JldHVybi0xfWZ1bmN0aW9uIE8oZSx0KXt2YXIgbixyLG89ZS5fX2RhdGFfXztyZXR1cm4oXCJzdHJpbmdcIj09KHI9dHlwZW9mKG49dCkpfHxcIm51bWJlclwiPT1yfHxcInN5bWJvbFwiPT1yfHxcImJvb2xlYW5cIj09cj9cIl9fcHJvdG9fX1wiIT09bjpudWxsPT09bik/b1tcInN0cmluZ1wiPT10eXBlb2YgdD9cInN0cmluZ1wiOlwiaGFzaFwiXTpvLm1hcH1mdW5jdGlvbiBNKGUsdCl7dmFyIG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZT92b2lkIDA6ZVt0XX0oZSx0KTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoIV8oZSl8fGYmJmYgaW4gZSlyZXR1cm4hMTt2YXIgdD1mdW5jdGlvbihlKXt2YXIgdD1fKGUpP3YuY2FsbChlKTpcIlwiO3JldHVyblwiW29iamVjdCBGdW5jdGlvbl1cIj09dHx8XCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXVwiPT10fShlKXx8ZnVuY3Rpb24oZSl7dmFyIHQ9ITE7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZS50b1N0cmluZyl0cnl7dD0hIShlK1wiXCIpfWNhdGNoKGUpe31yZXR1cm4gdH0oZSk/QzphO3JldHVybiB0LnRlc3QoZnVuY3Rpb24oZSl7aWYobnVsbCE9ZSl7dHJ5e3JldHVybiBoLmNhbGwoZSl9Y2F0Y2goZSl7fXRyeXtyZXR1cm4gZStcIlwifWNhdGNoKGUpe319cmV0dXJuXCJcIn0oZSkpfShuKT9uOnZvaWQgMH1mdW5jdGlvbiBMKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZXx8dCYmXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgYSBmdW5jdGlvblwiKTt2YXIgbj1mdW5jdGlvbigpe3ZhciByPWFyZ3VtZW50cyxvPXQ/dC5hcHBseSh0aGlzLHIpOnJbMF0sYT1uLmNhY2hlO2lmKGEuaGFzKG8pKXJldHVybiBhLmdldChvKTt2YXIgaT1lLmFwcGx5KHRoaXMscik7cmV0dXJuIG4uY2FjaGU9YS5zZXQobyxpKSxpfTtyZXR1cm4gbi5jYWNoZT1uZXcoTC5DYWNoZXx8ayksbn1mdW5jdGlvbiBfKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiEhZSYmKFwib2JqZWN0XCI9PXR8fFwiZnVuY3Rpb25cIj09dCl9eS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPWI/YihudWxsKTp7fX0seS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmhhcyhlKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bZV19LHkucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fO2lmKGIpe3ZhciBuPXRbZV07cmV0dXJuIG49PT1vP3ZvaWQgMDpufXJldHVybiBnLmNhbGwodCxlKT90W2VdOnZvaWQgMH0seS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX187cmV0dXJuIGI/dm9pZCAwIT09dFtlXTpnLmNhbGwodCxlKX0seS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX19kYXRhX19bZV09YiYmdm9pZCAwPT09dD9vOnQsdGhpc30seC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPVtdfSx4LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxuPVModCxlKTtyZXR1cm4hKG48MHx8KG49PXQubGVuZ3RoLTE/dC5wb3AoKTptLmNhbGwodCxuLDEpLDApKX0seC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX18sbj1TKHQsZSk7cmV0dXJuIG48MD92b2lkIDA6dFtuXVsxXX0seC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiBTKHRoaXMuX19kYXRhX18sZSk+LTF9LHgucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX19kYXRhX18scj1TKG4sZSk7cmV0dXJuIHI8MD9uLnB1c2goW2UsdF0pOm5bcl1bMV09dCx0aGlzfSxrLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189e2hhc2g6bmV3IHksbWFwOm5ldyh3fHx4KSxzdHJpbmc6bmV3IHl9fSxrLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oZSl7cmV0dXJuIE8odGhpcyxlKS5kZWxldGUoZSl9LGsucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gTyh0aGlzLGUpLmdldChlKX0say5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiBPKHRoaXMsZSkuaGFzKGUpfSxrLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTyh0aGlzLGUpLnNldChlLHQpLHRoaXN9LEwuQ2FjaGU9ayxlLmV4cG9ydHM9TH0sNjQ4NjpmdW5jdGlvbihlLHQsbil7dmFyIHI7ZT1uLm5tZChlKSxmdW5jdGlvbigpe3ZhciBvLGE9XCJFeHBlY3RlZCBhIGZ1bmN0aW9uXCIsaT1cIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX19cIixsPVwiX19sb2Rhc2hfcGxhY2Vob2xkZXJfX1wiLHM9MzIsYz0xMjgsdT0xLzAsZD05MDA3MTk5MjU0NzQwOTkxLHA9TmFOLGY9NDI5NDk2NzI5NSxoPVtbXCJhcnlcIixjXSxbXCJiaW5kXCIsMV0sW1wiYmluZEtleVwiLDJdLFtcImN1cnJ5XCIsOF0sW1wiY3VycnlSaWdodFwiLDE2XSxbXCJmbGlwXCIsNTEyXSxbXCJwYXJ0aWFsXCIsc10sW1wicGFydGlhbFJpZ2h0XCIsNjRdLFtcInJlYXJnXCIsMjU2XV0sZz1cIltvYmplY3QgQXJndW1lbnRzXVwiLHY9XCJbb2JqZWN0IEFycmF5XVwiLEM9XCJbb2JqZWN0IEJvb2xlYW5dXCIsbT1cIltvYmplY3QgRGF0ZV1cIix3PVwiW29iamVjdCBFcnJvcl1cIixiPVwiW29iamVjdCBGdW5jdGlvbl1cIix5PVwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl1cIix4PVwiW29iamVjdCBNYXBdXCIsaz1cIltvYmplY3QgTnVtYmVyXVwiLFM9XCJbb2JqZWN0IE9iamVjdF1cIixPPVwiW29iamVjdCBQcm9taXNlXVwiLE09XCJbb2JqZWN0IFJlZ0V4cF1cIixMPVwiW29iamVjdCBTZXRdXCIsXz1cIltvYmplY3QgU3RyaW5nXVwiLFA9XCJbb2JqZWN0IFN5bWJvbF1cIixFPVwiW29iamVjdCBXZWFrTWFwXVwiLGo9XCJbb2JqZWN0IEFycmF5QnVmZmVyXVwiLFI9XCJbb2JqZWN0IERhdGFWaWV3XVwiLEk9XCJbb2JqZWN0IEZsb2F0MzJBcnJheV1cIixWPVwiW29iamVjdCBGbG9hdDY0QXJyYXldXCIsSD1cIltvYmplY3QgSW50OEFycmF5XVwiLEE9XCJbb2JqZWN0IEludDE2QXJyYXldXCIsVD1cIltvYmplY3QgSW50MzJBcnJheV1cIixEPVwiW29iamVjdCBVaW50OEFycmF5XVwiLEI9XCJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XVwiLFo9XCJbb2JqZWN0IFVpbnQxNkFycmF5XVwiLCQ9XCJbb2JqZWN0IFVpbnQzMkFycmF5XVwiLE49L1xcYl9fcCBcXCs9ICcnOy9nLEY9L1xcYihfX3AgXFwrPSkgJycgXFwrL2csVz0vKF9fZVxcKC4qP1xcKXxcXGJfX3RcXCkpIFxcK1xcbicnOy9nLFU9LyYoPzphbXB8bHR8Z3R8cXVvdHwjMzkpOy9nLHo9L1smPD5cIiddL2csRz1SZWdFeHAoVS5zb3VyY2UpLEs9UmVnRXhwKHouc291cmNlKSxxPS88JS0oW1xcc1xcU10rPyklPi9nLFk9LzwlKFtcXHNcXFNdKz8pJT4vZyxKPS88JT0oW1xcc1xcU10rPyklPi9nLFg9L1xcLnxcXFsoPzpbXltcXF1dKnwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKj9cXDEpXFxdLyxRPS9eXFx3KiQvLGVlPS9bXi5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwkKSkvZyx0ZT0vW1xcXFxeJC4qKz8oKVtcXF17fXxdL2csbmU9UmVnRXhwKHRlLnNvdXJjZSkscmU9L15cXHMrLyxvZT0vXFxzLyxhZT0vXFx7KD86XFxuXFwvXFwqIFxcW3dyYXBwZWQgd2l0aCAuK1xcXSBcXCpcXC8pP1xcbj8vLGllPS9cXHtcXG5cXC9cXCogXFxbd3JhcHBlZCB3aXRoICguKylcXF0gXFwqLyxsZT0vLD8gJiAvLHNlPS9bXlxceDAwLVxceDJmXFx4M2EtXFx4NDBcXHg1Yi1cXHg2MFxceDdiLVxceDdmXSsvZyxjZT0vWygpPSx7fVxcW1xcXVxcL1xcc10vLHVlPS9cXFxcKFxcXFwpPy9nLGRlPS9cXCRcXHsoW15cXFxcfV0qKD86XFxcXC5bXlxcXFx9XSopKilcXH0vZyxwZT0vXFx3KiQvLGZlPS9eWy0rXTB4WzAtOWEtZl0rJC9pLGhlPS9eMGJbMDFdKyQvaSxnZT0vXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvLHZlPS9eMG9bMC03XSskL2ksQ2U9L14oPzowfFsxLTldXFxkKikkLyxtZT0vW1xceGMwLVxceGQ2XFx4ZDgtXFx4ZjZcXHhmOC1cXHhmZlxcdTAxMDAtXFx1MDE3Zl0vZyx3ZT0vKCReKS8sYmU9L1snXFxuXFxyXFx1MjAyOFxcdTIwMjlcXFxcXS9nLHllPVwiXFxcXHVkODAwLVxcXFx1ZGZmZlwiLHhlPVwiXFxcXHUwMzAwLVxcXFx1MDM2ZlxcXFx1ZmUyMC1cXFxcdWZlMmZcXFxcdTIwZDAtXFxcXHUyMGZmXCIsa2U9XCJcXFxcdTI3MDAtXFxcXHUyN2JmXCIsU2U9XCJhLXpcXFxceGRmLVxcXFx4ZjZcXFxceGY4LVxcXFx4ZmZcIixPZT1cIkEtWlxcXFx4YzAtXFxcXHhkNlxcXFx4ZDgtXFxcXHhkZVwiLE1lPVwiXFxcXHVmZTBlXFxcXHVmZTBmXCIsTGU9XCJcXFxceGFjXFxcXHhiMVxcXFx4ZDdcXFxceGY3XFxcXHgwMC1cXFxceDJmXFxcXHgzYS1cXFxceDQwXFxcXHg1Yi1cXFxceDYwXFxcXHg3Yi1cXFxceGJmXFxcXHUyMDAwLVxcXFx1MjA2ZiBcXFxcdFxcXFx4MGJcXFxcZlxcXFx4YTBcXFxcdWZlZmZcXFxcblxcXFxyXFxcXHUyMDI4XFxcXHUyMDI5XFxcXHUxNjgwXFxcXHUxODBlXFxcXHUyMDAwXFxcXHUyMDAxXFxcXHUyMDAyXFxcXHUyMDAzXFxcXHUyMDA0XFxcXHUyMDA1XFxcXHUyMDA2XFxcXHUyMDA3XFxcXHUyMDA4XFxcXHUyMDA5XFxcXHUyMDBhXFxcXHUyMDJmXFxcXHUyMDVmXFxcXHUzMDAwXCIsX2U9XCJbXCIreWUrXCJdXCIsUGU9XCJbXCIrTGUrXCJdXCIsRWU9XCJbXCIreGUrXCJdXCIsamU9XCJcXFxcZCtcIixSZT1cIltcIitrZStcIl1cIixJZT1cIltcIitTZStcIl1cIixWZT1cIlteXCIreWUrTGUramUra2UrU2UrT2UrXCJdXCIsSGU9XCJcXFxcdWQ4M2NbXFxcXHVkZmZiLVxcXFx1ZGZmZl1cIixBZT1cIlteXCIreWUrXCJdXCIsVGU9XCIoPzpcXFxcdWQ4M2NbXFxcXHVkZGU2LVxcXFx1ZGRmZl0pezJ9XCIsRGU9XCJbXFxcXHVkODAwLVxcXFx1ZGJmZl1bXFxcXHVkYzAwLVxcXFx1ZGZmZl1cIixCZT1cIltcIitPZStcIl1cIixaZT1cIlxcXFx1MjAwZFwiLCRlPVwiKD86XCIrSWUrXCJ8XCIrVmUrXCIpXCIsTmU9XCIoPzpcIitCZStcInxcIitWZStcIilcIixGZT1cIig/Olsn4oCZXSg/OmR8bGx8bXxyZXxzfHR8dmUpKT9cIixXZT1cIig/Olsn4oCZXSg/OkR8TEx8TXxSRXxTfFR8VkUpKT9cIixVZT1cIig/OlwiK0VlK1wifFwiK0hlK1wiKT9cIix6ZT1cIltcIitNZStcIl0/XCIsR2U9emUrVWUrXCIoPzpcIitaZStcIig/OlwiK1tBZSxUZSxEZV0uam9pbihcInxcIikrXCIpXCIremUrVWUrXCIpKlwiLEtlPVwiKD86XCIrW1JlLFRlLERlXS5qb2luKFwifFwiKStcIilcIitHZSxxZT1cIig/OlwiK1tBZStFZStcIj9cIixFZSxUZSxEZSxfZV0uam9pbihcInxcIikrXCIpXCIsWWU9UmVnRXhwKFwiWyfigJldXCIsXCJnXCIpLEplPVJlZ0V4cChFZSxcImdcIiksWGU9UmVnRXhwKEhlK1wiKD89XCIrSGUrXCIpfFwiK3FlK0dlLFwiZ1wiKSxRZT1SZWdFeHAoW0JlK1wiP1wiK0llK1wiK1wiK0ZlK1wiKD89XCIrW1BlLEJlLFwiJFwiXS5qb2luKFwifFwiKStcIilcIixOZStcIitcIitXZStcIig/PVwiK1tQZSxCZSskZSxcIiRcIl0uam9pbihcInxcIikrXCIpXCIsQmUrXCI/XCIrJGUrXCIrXCIrRmUsQmUrXCIrXCIrV2UsXCJcXFxcZCooPzoxU1R8Mk5EfDNSRHwoPyFbMTIzXSlcXFxcZFRIKSg/PVxcXFxifFthLXpfXSlcIixcIlxcXFxkKig/OjFzdHwybmR8M3JkfCg/IVsxMjNdKVxcXFxkdGgpKD89XFxcXGJ8W0EtWl9dKVwiLGplLEtlXS5qb2luKFwifFwiKSxcImdcIiksZXQ9UmVnRXhwKFwiW1wiK1plK3llK3hlK01lK1wiXVwiKSx0dD0vW2Etel1bQS1aXXxbQS1aXXsyfVthLXpdfFswLTldW2EtekEtWl18W2EtekEtWl1bMC05XXxbXmEtekEtWjAtOSBdLyxudD1bXCJBcnJheVwiLFwiQnVmZmVyXCIsXCJEYXRhVmlld1wiLFwiRGF0ZVwiLFwiRXJyb3JcIixcIkZsb2F0MzJBcnJheVwiLFwiRmxvYXQ2NEFycmF5XCIsXCJGdW5jdGlvblwiLFwiSW50OEFycmF5XCIsXCJJbnQxNkFycmF5XCIsXCJJbnQzMkFycmF5XCIsXCJNYXBcIixcIk1hdGhcIixcIk9iamVjdFwiLFwiUHJvbWlzZVwiLFwiUmVnRXhwXCIsXCJTZXRcIixcIlN0cmluZ1wiLFwiU3ltYm9sXCIsXCJUeXBlRXJyb3JcIixcIlVpbnQ4QXJyYXlcIixcIlVpbnQ4Q2xhbXBlZEFycmF5XCIsXCJVaW50MTZBcnJheVwiLFwiVWludDMyQXJyYXlcIixcIldlYWtNYXBcIixcIl9cIixcImNsZWFyVGltZW91dFwiLFwiaXNGaW5pdGVcIixcInBhcnNlSW50XCIsXCJzZXRUaW1lb3V0XCJdLHJ0PS0xLG90PXt9O290W0ldPW90W1ZdPW90W0hdPW90W0FdPW90W1RdPW90W0RdPW90W0JdPW90W1pdPW90WyRdPSEwLG90W2ddPW90W3ZdPW90W2pdPW90W0NdPW90W1JdPW90W21dPW90W3ddPW90W2JdPW90W3hdPW90W2tdPW90W1NdPW90W01dPW90W0xdPW90W19dPW90W0VdPSExO3ZhciBhdD17fTthdFtnXT1hdFt2XT1hdFtqXT1hdFtSXT1hdFtDXT1hdFttXT1hdFtJXT1hdFtWXT1hdFtIXT1hdFtBXT1hdFtUXT1hdFt4XT1hdFtrXT1hdFtTXT1hdFtNXT1hdFtMXT1hdFtfXT1hdFtQXT1hdFtEXT1hdFtCXT1hdFtaXT1hdFskXT0hMCxhdFt3XT1hdFtiXT1hdFtFXT0hMTt2YXIgaXQ9e1wiXFxcXFwiOlwiXFxcXFwiLFwiJ1wiOlwiJ1wiLFwiXFxuXCI6XCJuXCIsXCJcXHJcIjpcInJcIixcIlxcdTIwMjhcIjpcInUyMDI4XCIsXCJcXHUyMDI5XCI6XCJ1MjAyOVwifSxsdD1wYXJzZUZsb2F0LHN0PXBhcnNlSW50LGN0PVwib2JqZWN0XCI9PXR5cGVvZiBuLmcmJm4uZyYmbi5nLk9iamVjdD09PU9iamVjdCYmbi5nLHV0PVwib2JqZWN0XCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixkdD1jdHx8dXR8fEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSxwdD10JiYhdC5ub2RlVHlwZSYmdCxmdD1wdCYmZSYmIWUubm9kZVR5cGUmJmUsaHQ9ZnQmJmZ0LmV4cG9ydHM9PT1wdCxndD1odCYmY3QucHJvY2Vzcyx2dD1mdW5jdGlvbigpe3RyeXtyZXR1cm4gZnQmJmZ0LnJlcXVpcmUmJmZ0LnJlcXVpcmUoXCJ1dGlsXCIpLnR5cGVzfHxndCYmZ3QuYmluZGluZyYmZ3QuYmluZGluZyhcInV0aWxcIil9Y2F0Y2goZSl7fX0oKSxDdD12dCYmdnQuaXNBcnJheUJ1ZmZlcixtdD12dCYmdnQuaXNEYXRlLHd0PXZ0JiZ2dC5pc01hcCxidD12dCYmdnQuaXNSZWdFeHAseXQ9dnQmJnZ0LmlzU2V0LHh0PXZ0JiZ2dC5pc1R5cGVkQXJyYXk7ZnVuY3Rpb24ga3QoZSx0LG4pe3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBlLmNhbGwodCk7Y2FzZSAxOnJldHVybiBlLmNhbGwodCxuWzBdKTtjYXNlIDI6cmV0dXJuIGUuY2FsbCh0LG5bMF0sblsxXSk7Y2FzZSAzOnJldHVybiBlLmNhbGwodCxuWzBdLG5bMV0sblsyXSl9cmV0dXJuIGUuYXBwbHkodCxuKX1mdW5jdGlvbiBTdChlLHQsbixyKXtmb3IodmFyIG89LTEsYT1udWxsPT1lPzA6ZS5sZW5ndGg7KytvPGE7KXt2YXIgaT1lW29dO3QocixpLG4oaSksZSl9cmV0dXJuIHJ9ZnVuY3Rpb24gT3QoZSx0KXtmb3IodmFyIG49LTEscj1udWxsPT1lPzA6ZS5sZW5ndGg7KytuPHImJiExIT09dChlW25dLG4sZSk7KTtyZXR1cm4gZX1mdW5jdGlvbiBNdChlLHQpe2Zvcih2YXIgbj1udWxsPT1lPzA6ZS5sZW5ndGg7bi0tJiYhMSE9PXQoZVtuXSxuLGUpOyk7cmV0dXJuIGV9ZnVuY3Rpb24gTHQoZSx0KXtmb3IodmFyIG49LTEscj1udWxsPT1lPzA6ZS5sZW5ndGg7KytuPHI7KWlmKCF0KGVbbl0sbixlKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBfdChlLHQpe2Zvcih2YXIgbj0tMSxyPW51bGw9PWU/MDplLmxlbmd0aCxvPTAsYT1bXTsrK248cjspe3ZhciBpPWVbbl07dChpLG4sZSkmJihhW28rK109aSl9cmV0dXJuIGF9ZnVuY3Rpb24gUHQoZSx0KXtyZXR1cm4hKG51bGw9PWV8fCFlLmxlbmd0aCkmJkJ0KGUsdCwwKT4tMX1mdW5jdGlvbiBFdChlLHQsbil7Zm9yKHZhciByPS0xLG89bnVsbD09ZT8wOmUubGVuZ3RoOysrcjxvOylpZihuKHQsZVtyXSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24ganQoZSx0KXtmb3IodmFyIG49LTEscj1udWxsPT1lPzA6ZS5sZW5ndGgsbz1BcnJheShyKTsrK248cjspb1tuXT10KGVbbl0sbixlKTtyZXR1cm4gb31mdW5jdGlvbiBSdChlLHQpe2Zvcih2YXIgbj0tMSxyPXQubGVuZ3RoLG89ZS5sZW5ndGg7KytuPHI7KWVbbytuXT10W25dO3JldHVybiBlfWZ1bmN0aW9uIEl0KGUsdCxuLHIpe3ZhciBvPS0xLGE9bnVsbD09ZT8wOmUubGVuZ3RoO2ZvcihyJiZhJiYobj1lWysrb10pOysrbzxhOyluPXQobixlW29dLG8sZSk7cmV0dXJuIG59ZnVuY3Rpb24gVnQoZSx0LG4scil7dmFyIG89bnVsbD09ZT8wOmUubGVuZ3RoO2ZvcihyJiZvJiYobj1lWy0tb10pO28tLTspbj10KG4sZVtvXSxvLGUpO3JldHVybiBufWZ1bmN0aW9uIEh0KGUsdCl7Zm9yKHZhciBuPS0xLHI9bnVsbD09ZT8wOmUubGVuZ3RoOysrbjxyOylpZih0KGVbbl0sbixlKSlyZXR1cm4hMDtyZXR1cm4hMX12YXIgQXQ9RnQoXCJsZW5ndGhcIik7ZnVuY3Rpb24gVHQoZSx0LG4pe3ZhciByO3JldHVybiBuKGUsKGZ1bmN0aW9uKGUsbixvKXtpZih0KGUsbixvKSlyZXR1cm4gcj1uLCExfSkpLHJ9ZnVuY3Rpb24gRHQoZSx0LG4scil7Zm9yKHZhciBvPWUubGVuZ3RoLGE9bisocj8xOi0xKTtyP2EtLTorK2E8bzspaWYodChlW2FdLGEsZSkpcmV0dXJuIGE7cmV0dXJuLTF9ZnVuY3Rpb24gQnQoZSx0LG4pe3JldHVybiB0PT10P2Z1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bi0xLG89ZS5sZW5ndGg7KytyPG87KWlmKGVbcl09PT10KXJldHVybiByO3JldHVybi0xfShlLHQsbik6RHQoZSwkdCxuKX1mdW5jdGlvbiBadChlLHQsbixyKXtmb3IodmFyIG89bi0xLGE9ZS5sZW5ndGg7KytvPGE7KWlmKHIoZVtvXSx0KSlyZXR1cm4gbztyZXR1cm4tMX1mdW5jdGlvbiAkdChlKXtyZXR1cm4gZSE9ZX1mdW5jdGlvbiBOdChlLHQpe3ZhciBuPW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gbj96dChlLHQpL246cH1mdW5jdGlvbiBGdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/bzp0W2VdfX1mdW5jdGlvbiBXdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PWU/bzplW3RdfX1mdW5jdGlvbiBVdChlLHQsbixyLG8pe3JldHVybiBvKGUsKGZ1bmN0aW9uKGUsbyxhKXtuPXI/KHI9ITEsZSk6dChuLGUsbyxhKX0pKSxufWZ1bmN0aW9uIHp0KGUsdCl7Zm9yKHZhciBuLHI9LTEsYT1lLmxlbmd0aDsrK3I8YTspe3ZhciBpPXQoZVtyXSk7aSE9PW8mJihuPW49PT1vP2k6bitpKX1yZXR1cm4gbn1mdW5jdGlvbiBHdChlLHQpe2Zvcih2YXIgbj0tMSxyPUFycmF5KGUpOysrbjxlOylyW25dPXQobik7cmV0dXJuIHJ9ZnVuY3Rpb24gS3QoZSl7cmV0dXJuIGU/ZS5zbGljZSgwLGRuKGUpKzEpLnJlcGxhY2UocmUsXCJcIik6ZX1mdW5jdGlvbiBxdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCl9fWZ1bmN0aW9uIFl0KGUsdCl7cmV0dXJuIGp0KHQsKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfSkpfWZ1bmN0aW9uIEp0KGUsdCl7cmV0dXJuIGUuaGFzKHQpfWZ1bmN0aW9uIFh0KGUsdCl7Zm9yKHZhciBuPS0xLHI9ZS5sZW5ndGg7KytuPHImJkJ0KHQsZVtuXSwwKT4tMTspO3JldHVybiBufWZ1bmN0aW9uIFF0KGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoO24tLSYmQnQodCxlW25dLDApPi0xOyk7cmV0dXJuIG59dmFyIGVuPVd0KHvDgDpcIkFcIizDgTpcIkFcIizDgjpcIkFcIizDgzpcIkFcIizDhDpcIkFcIizDhTpcIkFcIizDoDpcImFcIizDoTpcImFcIizDojpcImFcIizDozpcImFcIizDpDpcImFcIizDpTpcImFcIizDhzpcIkNcIizDpzpcImNcIizDkDpcIkRcIizDsDpcImRcIizDiDpcIkVcIizDiTpcIkVcIizDijpcIkVcIizDizpcIkVcIizDqDpcImVcIizDqTpcImVcIizDqjpcImVcIizDqzpcImVcIizDjDpcIklcIizDjTpcIklcIizDjjpcIklcIizDjzpcIklcIizDrDpcImlcIizDrTpcImlcIizDrjpcImlcIizDrzpcImlcIizDkTpcIk5cIizDsTpcIm5cIizDkjpcIk9cIizDkzpcIk9cIizDlDpcIk9cIizDlTpcIk9cIizDljpcIk9cIizDmDpcIk9cIizDsjpcIm9cIizDszpcIm9cIizDtDpcIm9cIizDtTpcIm9cIizDtjpcIm9cIizDuDpcIm9cIizDmTpcIlVcIizDmjpcIlVcIizDmzpcIlVcIizDnDpcIlVcIizDuTpcInVcIizDujpcInVcIizDuzpcInVcIizDvDpcInVcIizDnTpcIllcIizDvTpcInlcIizDvzpcInlcIizDhjpcIkFlXCIsw6Y6XCJhZVwiLMOeOlwiVGhcIizDvjpcInRoXCIsw586XCJzc1wiLMSAOlwiQVwiLMSCOlwiQVwiLMSEOlwiQVwiLMSBOlwiYVwiLMSDOlwiYVwiLMSFOlwiYVwiLMSGOlwiQ1wiLMSIOlwiQ1wiLMSKOlwiQ1wiLMSMOlwiQ1wiLMSHOlwiY1wiLMSJOlwiY1wiLMSLOlwiY1wiLMSNOlwiY1wiLMSOOlwiRFwiLMSQOlwiRFwiLMSPOlwiZFwiLMSROlwiZFwiLMSSOlwiRVwiLMSUOlwiRVwiLMSWOlwiRVwiLMSYOlwiRVwiLMSaOlwiRVwiLMSTOlwiZVwiLMSVOlwiZVwiLMSXOlwiZVwiLMSZOlwiZVwiLMSbOlwiZVwiLMScOlwiR1wiLMSeOlwiR1wiLMSgOlwiR1wiLMSiOlwiR1wiLMSdOlwiZ1wiLMSfOlwiZ1wiLMShOlwiZ1wiLMSjOlwiZ1wiLMSkOlwiSFwiLMSmOlwiSFwiLMSlOlwiaFwiLMSnOlwiaFwiLMSoOlwiSVwiLMSqOlwiSVwiLMSsOlwiSVwiLMSuOlwiSVwiLMSwOlwiSVwiLMSpOlwiaVwiLMSrOlwiaVwiLMStOlwiaVwiLMSvOlwiaVwiLMSxOlwiaVwiLMS0OlwiSlwiLMS1OlwialwiLMS2OlwiS1wiLMS3Olwia1wiLMS4Olwia1wiLMS5OlwiTFwiLMS7OlwiTFwiLMS9OlwiTFwiLMS/OlwiTFwiLMWBOlwiTFwiLMS6OlwibFwiLMS8OlwibFwiLMS+OlwibFwiLMWAOlwibFwiLMWCOlwibFwiLMWDOlwiTlwiLMWFOlwiTlwiLMWHOlwiTlwiLMWKOlwiTlwiLMWEOlwiblwiLMWGOlwiblwiLMWIOlwiblwiLMWLOlwiblwiLMWMOlwiT1wiLMWOOlwiT1wiLMWQOlwiT1wiLMWNOlwib1wiLMWPOlwib1wiLMWROlwib1wiLMWUOlwiUlwiLMWWOlwiUlwiLMWYOlwiUlwiLMWVOlwiclwiLMWXOlwiclwiLMWZOlwiclwiLMWaOlwiU1wiLMWcOlwiU1wiLMWeOlwiU1wiLMWgOlwiU1wiLMWbOlwic1wiLMWdOlwic1wiLMWfOlwic1wiLMWhOlwic1wiLMWiOlwiVFwiLMWkOlwiVFwiLMWmOlwiVFwiLMWjOlwidFwiLMWlOlwidFwiLMWnOlwidFwiLMWoOlwiVVwiLMWqOlwiVVwiLMWsOlwiVVwiLMWuOlwiVVwiLMWwOlwiVVwiLMWyOlwiVVwiLMWpOlwidVwiLMWrOlwidVwiLMWtOlwidVwiLMWvOlwidVwiLMWxOlwidVwiLMWzOlwidVwiLMW0OlwiV1wiLMW1Olwid1wiLMW2OlwiWVwiLMW3OlwieVwiLMW4OlwiWVwiLMW5OlwiWlwiLMW7OlwiWlwiLMW9OlwiWlwiLMW6OlwielwiLMW8OlwielwiLMW+OlwielwiLMSyOlwiSUpcIizEszpcImlqXCIsxZI6XCJPZVwiLMWTOlwib2VcIizFiTpcIiduXCIsxb86XCJzXCJ9KSx0bj1XdCh7XCImXCI6XCImYW1wO1wiLFwiPFwiOlwiJmx0O1wiLFwiPlwiOlwiJmd0O1wiLCdcIic6XCImcXVvdDtcIixcIidcIjpcIiYjMzk7XCJ9KTtmdW5jdGlvbiBubihlKXtyZXR1cm5cIlxcXFxcIitpdFtlXX1mdW5jdGlvbiBybihlKXtyZXR1cm4gZXQudGVzdChlKX1mdW5jdGlvbiBvbihlKXt2YXIgdD0tMSxuPUFycmF5KGUuc2l6ZSk7cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXtuWysrdF09W3IsZV19KSksbn1mdW5jdGlvbiBhbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gZSh0KG4pKX19ZnVuY3Rpb24gbG4oZSx0KXtmb3IodmFyIG49LTEscj1lLmxlbmd0aCxvPTAsYT1bXTsrK248cjspe3ZhciBpPWVbbl07aSE9PXQmJmkhPT1sfHwoZVtuXT1sLGFbbysrXT1uKX1yZXR1cm4gYX1mdW5jdGlvbiBzbihlKXt2YXIgdD0tMSxuPUFycmF5KGUuc2l6ZSk7cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7blsrK3RdPWV9KSksbn1mdW5jdGlvbiBjbihlKXtyZXR1cm4gcm4oZSk/ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVhlLmxhc3RJbmRleD0wO1hlLnRlc3QoZSk7KSsrdDtyZXR1cm4gdH0oZSk6QXQoZSl9ZnVuY3Rpb24gdW4oZSl7cmV0dXJuIHJuKGUpP2Z1bmN0aW9uKGUpe3JldHVybiBlLm1hdGNoKFhlKXx8W119KGUpOmZ1bmN0aW9uKGUpe3JldHVybiBlLnNwbGl0KFwiXCIpfShlKX1mdW5jdGlvbiBkbihlKXtmb3IodmFyIHQ9ZS5sZW5ndGg7dC0tJiZvZS50ZXN0KGUuY2hhckF0KHQpKTspO3JldHVybiB0fXZhciBwbj1XdCh7XCImYW1wO1wiOlwiJlwiLFwiJmx0O1wiOlwiPFwiLFwiJmd0O1wiOlwiPlwiLFwiJnF1b3Q7XCI6J1wiJyxcIiYjMzk7XCI6XCInXCJ9KSxmbj1mdW5jdGlvbiBlKHQpe3ZhciBuLHI9KHQ9bnVsbD09dD9kdDpmbi5kZWZhdWx0cyhkdC5PYmplY3QoKSx0LGZuLnBpY2soZHQsbnQpKSkuQXJyYXksb2U9dC5EYXRlLHllPXQuRXJyb3IseGU9dC5GdW5jdGlvbixrZT10Lk1hdGgsU2U9dC5PYmplY3QsT2U9dC5SZWdFeHAsTWU9dC5TdHJpbmcsTGU9dC5UeXBlRXJyb3IsX2U9ci5wcm90b3R5cGUsUGU9eGUucHJvdG90eXBlLEVlPVNlLnByb3RvdHlwZSxqZT10W1wiX19jb3JlLWpzX3NoYXJlZF9fXCJdLFJlPVBlLnRvU3RyaW5nLEllPUVlLmhhc093blByb3BlcnR5LFZlPTAsSGU9KG49L1teLl0rJC8uZXhlYyhqZSYmamUua2V5cyYmamUua2V5cy5JRV9QUk9UT3x8XCJcIikpP1wiU3ltYm9sKHNyYylfMS5cIituOlwiXCIsQWU9RWUudG9TdHJpbmcsVGU9UmUuY2FsbChTZSksRGU9ZHQuXyxCZT1PZShcIl5cIitSZS5jYWxsKEllKS5yZXBsYWNlKHRlLFwiXFxcXCQmXCIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csXCIkMS4qP1wiKStcIiRcIiksWmU9aHQ/dC5CdWZmZXI6bywkZT10LlN5bWJvbCxOZT10LlVpbnQ4QXJyYXksRmU9WmU/WmUuYWxsb2NVbnNhZmU6byxXZT1hbihTZS5nZXRQcm90b3R5cGVPZixTZSksVWU9U2UuY3JlYXRlLHplPUVlLnByb3BlcnR5SXNFbnVtZXJhYmxlLEdlPV9lLnNwbGljZSxLZT0kZT8kZS5pc0NvbmNhdFNwcmVhZGFibGU6byxxZT0kZT8kZS5pdGVyYXRvcjpvLFhlPSRlPyRlLnRvU3RyaW5nVGFnOm8sZXQ9ZnVuY3Rpb24oKXt0cnl7dmFyIGU9c2EoU2UsXCJkZWZpbmVQcm9wZXJ0eVwiKTtyZXR1cm4gZSh7fSxcIlwiLHt9KSxlfWNhdGNoKGUpe319KCksaXQ9dC5jbGVhclRpbWVvdXQhPT1kdC5jbGVhclRpbWVvdXQmJnQuY2xlYXJUaW1lb3V0LGN0PW9lJiZvZS5ub3chPT1kdC5EYXRlLm5vdyYmb2Uubm93LHV0PXQuc2V0VGltZW91dCE9PWR0LnNldFRpbWVvdXQmJnQuc2V0VGltZW91dCxwdD1rZS5jZWlsLGZ0PWtlLmZsb29yLGd0PVNlLmdldE93blByb3BlcnR5U3ltYm9scyx2dD1aZT9aZS5pc0J1ZmZlcjpvLEF0PXQuaXNGaW5pdGUsV3Q9X2Uuam9pbixobj1hbihTZS5rZXlzLFNlKSxnbj1rZS5tYXgsdm49a2UubWluLENuPW9lLm5vdyxtbj10LnBhcnNlSW50LHduPWtlLnJhbmRvbSxibj1fZS5yZXZlcnNlLHluPXNhKHQsXCJEYXRhVmlld1wiKSx4bj1zYSh0LFwiTWFwXCIpLGtuPXNhKHQsXCJQcm9taXNlXCIpLFNuPXNhKHQsXCJTZXRcIiksT249c2EodCxcIldlYWtNYXBcIiksTW49c2EoU2UsXCJjcmVhdGVcIiksTG49T24mJm5ldyBPbixfbj17fSxQbj1BYSh5biksRW49QWEoeG4pLGpuPUFhKGtuKSxSbj1BYShTbiksSW49QWEoT24pLFZuPSRlPyRlLnByb3RvdHlwZTpvLEhuPVZuP1ZuLnZhbHVlT2Y6byxBbj1Wbj9Wbi50b1N0cmluZzpvO2Z1bmN0aW9uIFRuKGUpe2lmKFFpKGUpJiYhTmkoZSkmJiEoZSBpbnN0YW5jZW9mICRuKSl7aWYoZSBpbnN0YW5jZW9mIFpuKXJldHVybiBlO2lmKEllLmNhbGwoZSxcIl9fd3JhcHBlZF9fXCIpKXJldHVybiBUYShlKX1yZXR1cm4gbmV3IFpuKGUpfXZhciBEbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKCFYaSh0KSlyZXR1cm57fTtpZihVZSlyZXR1cm4gVWUodCk7ZS5wcm90b3R5cGU9dDt2YXIgbj1uZXcgZTtyZXR1cm4gZS5wcm90b3R5cGU9byxufX0oKTtmdW5jdGlvbiBCbigpe31mdW5jdGlvbiBabihlLHQpe3RoaXMuX193cmFwcGVkX189ZSx0aGlzLl9fYWN0aW9uc19fPVtdLHRoaXMuX19jaGFpbl9fPSEhdCx0aGlzLl9faW5kZXhfXz0wLHRoaXMuX192YWx1ZXNfXz1vfWZ1bmN0aW9uICRuKGUpe3RoaXMuX193cmFwcGVkX189ZSx0aGlzLl9fYWN0aW9uc19fPVtdLHRoaXMuX19kaXJfXz0xLHRoaXMuX19maWx0ZXJlZF9fPSExLHRoaXMuX19pdGVyYXRlZXNfXz1bXSx0aGlzLl9fdGFrZUNvdW50X189Zix0aGlzLl9fdmlld3NfXz1bXX1mdW5jdGlvbiBObihlKXt2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiBGbihlKXt2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiBXbihlKXt2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiBVbihlKXt2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgV247Kyt0PG47KXRoaXMuYWRkKGVbdF0pfWZ1bmN0aW9uIHpuKGUpe3ZhciB0PXRoaXMuX19kYXRhX189bmV3IEZuKGUpO3RoaXMuc2l6ZT10LnNpemV9ZnVuY3Rpb24gR24oZSx0KXt2YXIgbj1OaShlKSxyPSFuJiYkaShlKSxvPSFuJiYhciYmemkoZSksYT0hbiYmIXImJiFvJiZsbChlKSxpPW58fHJ8fG98fGEsbD1pP0d0KGUubGVuZ3RoLE1lKTpbXSxzPWwubGVuZ3RoO2Zvcih2YXIgYyBpbiBlKSF0JiYhSWUuY2FsbChlLGMpfHxpJiYoXCJsZW5ndGhcIj09Y3x8byYmKFwib2Zmc2V0XCI9PWN8fFwicGFyZW50XCI9PWMpfHxhJiYoXCJidWZmZXJcIj09Y3x8XCJieXRlTGVuZ3RoXCI9PWN8fFwiYnl0ZU9mZnNldFwiPT1jKXx8Z2EoYyxzKSl8fGwucHVzaChjKTtyZXR1cm4gbH1mdW5jdGlvbiBLbihlKXt2YXIgdD1lLmxlbmd0aDtyZXR1cm4gdD9lW1dyKDAsdC0xKV06b31mdW5jdGlvbiBxbihlLHQpe3JldHVybiBqYShNbyhlKSxvcih0LDAsZS5sZW5ndGgpKX1mdW5jdGlvbiBZbihlKXtyZXR1cm4gamEoTW8oZSkpfWZ1bmN0aW9uIEpuKGUsdCxuKXsobiE9PW8mJiFEaShlW3RdLG4pfHxuPT09byYmISh0IGluIGUpKSYmbnIoZSx0LG4pfWZ1bmN0aW9uIFhuKGUsdCxuKXt2YXIgcj1lW3RdO0llLmNhbGwoZSx0KSYmRGkocixuKSYmKG4hPT1vfHx0IGluIGUpfHxucihlLHQsbil9ZnVuY3Rpb24gUW4oZSx0KXtmb3IodmFyIG49ZS5sZW5ndGg7bi0tOylpZihEaShlW25dWzBdLHQpKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIGVyKGUsdCxuLHIpe3JldHVybiBjcihlLChmdW5jdGlvbihlLG8sYSl7dChyLGUsbihlKSxhKX0pKSxyfWZ1bmN0aW9uIHRyKGUsdCl7cmV0dXJuIGUmJkxvKHQsUGwodCksZSl9ZnVuY3Rpb24gbnIoZSx0LG4pe1wiX19wcm90b19fXCI9PXQmJmV0P2V0KGUsdCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6bix3cml0YWJsZTohMH0pOmVbdF09bn1mdW5jdGlvbiBycihlLHQpe2Zvcih2YXIgbj0tMSxhPXQubGVuZ3RoLGk9cihhKSxsPW51bGw9PWU7KytuPGE7KWlbbl09bD9vOlNsKGUsdFtuXSk7cmV0dXJuIGl9ZnVuY3Rpb24gb3IoZSx0LG4pe3JldHVybiBlPT1lJiYobiE9PW8mJihlPWU8PW4/ZTpuKSx0IT09byYmKGU9ZT49dD9lOnQpKSxlfWZ1bmN0aW9uIGFyKGUsdCxuLHIsYSxpKXt2YXIgbCxzPTEmdCxjPTImdCx1PTQmdDtpZihuJiYobD1hP24oZSxyLGEsaSk6bihlKSksbCE9PW8pcmV0dXJuIGw7aWYoIVhpKGUpKXJldHVybiBlO3ZhciBkPU5pKGUpO2lmKGQpe2lmKGw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgsbj1uZXcgZS5jb25zdHJ1Y3Rvcih0KTtyZXR1cm4gdCYmXCJzdHJpbmdcIj09dHlwZW9mIGVbMF0mJkllLmNhbGwoZSxcImluZGV4XCIpJiYobi5pbmRleD1lLmluZGV4LG4uaW5wdXQ9ZS5pbnB1dCksbn0oZSksIXMpcmV0dXJuIE1vKGUsbCl9ZWxzZXt2YXIgcD1kYShlKSxmPXA9PWJ8fHA9PXk7aWYoemkoZSkpcmV0dXJuIGJvKGUscyk7aWYocD09U3x8cD09Z3x8ZiYmIWEpe2lmKGw9Y3x8Zj97fTpmYShlKSwhcylyZXR1cm4gYz9mdW5jdGlvbihlLHQpe3JldHVybiBMbyhlLHVhKGUpLHQpfShlLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJkxvKHQsRWwodCksZSl9KGwsZSkpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIExvKGUsY2EoZSksdCl9KGUsdHIobCxlKSl9ZWxzZXtpZighYXRbcF0pcmV0dXJuIGE/ZTp7fTtsPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvPWUuY29uc3RydWN0b3I7c3dpdGNoKHQpe2Nhc2UgajpyZXR1cm4geW8oZSk7Y2FzZSBDOmNhc2UgbTpyZXR1cm4gbmV3IG8oK2UpO2Nhc2UgUjpyZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgbj10P3lvKGUuYnVmZmVyKTplLmJ1ZmZlcjtyZXR1cm4gbmV3IGUuY29uc3RydWN0b3IobixlLmJ5dGVPZmZzZXQsZS5ieXRlTGVuZ3RoKX0oZSxuKTtjYXNlIEk6Y2FzZSBWOmNhc2UgSDpjYXNlIEE6Y2FzZSBUOmNhc2UgRDpjYXNlIEI6Y2FzZSBaOmNhc2UgJDpyZXR1cm4geG8oZSxuKTtjYXNlIHg6cmV0dXJuIG5ldyBvO2Nhc2UgazpjYXNlIF86cmV0dXJuIG5ldyBvKGUpO2Nhc2UgTTpyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IGUuY29uc3RydWN0b3IoZS5zb3VyY2UscGUuZXhlYyhlKSk7cmV0dXJuIHQubGFzdEluZGV4PWUubGFzdEluZGV4LHR9KGUpO2Nhc2UgTDpyZXR1cm4gbmV3IG87Y2FzZSBQOnJldHVybiByPWUsSG4/U2UoSG4uY2FsbChyKSk6e319fShlLHAscyl9fWl8fChpPW5ldyB6bik7dmFyIGg9aS5nZXQoZSk7aWYoaClyZXR1cm4gaDtpLnNldChlLGwpLG9sKGUpP2UuZm9yRWFjaCgoZnVuY3Rpb24ocil7bC5hZGQoYXIocix0LG4scixlLGkpKX0pKTplbChlKSYmZS5mb3JFYWNoKChmdW5jdGlvbihyLG8pe2wuc2V0KG8sYXIocix0LG4sbyxlLGkpKX0pKTt2YXIgdj1kP286KHU/Yz90YTplYTpjP0VsOlBsKShlKTtyZXR1cm4gT3Qodnx8ZSwoZnVuY3Rpb24ocixvKXt2JiYocj1lW289cl0pLFhuKGwsbyxhcihyLHQsbixvLGUsaSkpfSkpLGx9ZnVuY3Rpb24gaXIoZSx0LG4pe3ZhciByPW4ubGVuZ3RoO2lmKG51bGw9PWUpcmV0dXJuIXI7Zm9yKGU9U2UoZSk7ci0tOyl7dmFyIGE9bltyXSxpPXRbYV0sbD1lW2FdO2lmKGw9PT1vJiYhKGEgaW4gZSl8fCFpKGwpKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIGxyKGUsdCxuKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBMZShhKTtyZXR1cm4gTGEoKGZ1bmN0aW9uKCl7ZS5hcHBseShvLG4pfSksdCl9ZnVuY3Rpb24gc3IoZSx0LG4scil7dmFyIG89LTEsYT1QdCxpPSEwLGw9ZS5sZW5ndGgscz1bXSxjPXQubGVuZ3RoO2lmKCFsKXJldHVybiBzO24mJih0PWp0KHQscXQobikpKSxyPyhhPUV0LGk9ITEpOnQubGVuZ3RoPj0yMDAmJihhPUp0LGk9ITEsdD1uZXcgVW4odCkpO2U6Zm9yKDsrK288bDspe3ZhciB1PWVbb10sZD1udWxsPT1uP3U6bih1KTtpZih1PXJ8fDAhPT11P3U6MCxpJiZkPT1kKXtmb3IodmFyIHA9YztwLS07KWlmKHRbcF09PT1kKWNvbnRpbnVlIGU7cy5wdXNoKHUpfWVsc2UgYSh0LGQscil8fHMucHVzaCh1KX1yZXR1cm4gc31Ubi50ZW1wbGF0ZVNldHRpbmdzPXtlc2NhcGU6cSxldmFsdWF0ZTpZLGludGVycG9sYXRlOkosdmFyaWFibGU6XCJcIixpbXBvcnRzOntfOlRufX0sVG4ucHJvdG90eXBlPUJuLnByb3RvdHlwZSxUbi5wcm90b3R5cGUuY29uc3RydWN0b3I9VG4sWm4ucHJvdG90eXBlPURuKEJuLnByb3RvdHlwZSksWm4ucHJvdG90eXBlLmNvbnN0cnVjdG9yPVpuLCRuLnByb3RvdHlwZT1EbihCbi5wcm90b3R5cGUpLCRuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj0kbixObi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPU1uP01uKG51bGwpOnt9LHRoaXMuc2l6ZT0wfSxObi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaGFzKGUpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1tlXTtyZXR1cm4gdGhpcy5zaXplLT10PzE6MCx0fSxObi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX187aWYoTW4pe3ZhciBuPXRbZV07cmV0dXJuIG49PT1pP286bn1yZXR1cm4gSWUuY2FsbCh0LGUpP3RbZV06b30sTm4ucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fO3JldHVybiBNbj90W2VdIT09bzpJZS5jYWxsKHQsZSl9LE5uLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKGUpPzA6MSxuW2VdPU1uJiZ0PT09bz9pOnQsdGhpc30sRm4ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH0sRm4ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fLG49UW4odCxlKTtyZXR1cm4hKG48MHx8KG49PXQubGVuZ3RoLTE/dC5wb3AoKTpHZS5jYWxsKHQsbiwxKSwtLXRoaXMuc2l6ZSwwKSl9LEZuLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxuPVFuKHQsZSk7cmV0dXJuIG48MD9vOnRbbl1bMV19LEZuLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIFFuKHRoaXMuX19kYXRhX18sZSk+LTF9LEZuLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fLHI9UW4obixlKTtyZXR1cm4gcjwwPygrK3RoaXMuc2l6ZSxuLnB1c2goW2UsdF0pKTpuW3JdWzFdPXQsdGhpc30sV24ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgTm4sbWFwOm5ldyh4bnx8Rm4pLHN0cmluZzpuZXcgTm59fSxXbi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3ZhciB0PWlhKHRoaXMsZSkuZGVsZXRlKGUpO3JldHVybiB0aGlzLnNpemUtPXQ/MTowLHR9LFduLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGlhKHRoaXMsZSkuZ2V0KGUpfSxXbi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiBpYSh0aGlzLGUpLmhhcyhlKX0sV24ucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3ZhciBuPWlhKHRoaXMsZSkscj1uLnNpemU7cmV0dXJuIG4uc2V0KGUsdCksdGhpcy5zaXplKz1uLnNpemU9PXI/MDoxLHRoaXN9LFVuLnByb3RvdHlwZS5hZGQ9VW4ucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uc2V0KGUsaSksdGhpc30sVW4ucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoZSl9LHpuLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189bmV3IEZuLHRoaXMuc2l6ZT0wfSx6bi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX18sbj10LmRlbGV0ZShlKTtyZXR1cm4gdGhpcy5zaXplPXQuc2l6ZSxufSx6bi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldChlKX0sem4ucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoZSl9LHpuLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fO2lmKG4gaW5zdGFuY2VvZiBGbil7dmFyIHI9bi5fX2RhdGFfXztpZigheG58fHIubGVuZ3RoPDE5OSlyZXR1cm4gci5wdXNoKFtlLHRdKSx0aGlzLnNpemU9KytuLnNpemUsdGhpcztuPXRoaXMuX19kYXRhX189bmV3IFduKHIpfXJldHVybiBuLnNldChlLHQpLHRoaXMuc2l6ZT1uLnNpemUsdGhpc307dmFyIGNyPUVvKENyKSx1cj1FbyhtciwhMCk7ZnVuY3Rpb24gZHIoZSx0KXt2YXIgbj0hMDtyZXR1cm4gY3IoZSwoZnVuY3Rpb24oZSxyLG8pe3JldHVybiBuPSEhdChlLHIsbyl9KSksbn1mdW5jdGlvbiBwcihlLHQsbil7Zm9yKHZhciByPS0xLGE9ZS5sZW5ndGg7KytyPGE7KXt2YXIgaT1lW3JdLGw9dChpKTtpZihudWxsIT1sJiYocz09PW8/bD09bCYmIWlsKGwpOm4obCxzKSkpdmFyIHM9bCxjPWl9cmV0dXJuIGN9ZnVuY3Rpb24gZnIoZSx0KXt2YXIgbj1bXTtyZXR1cm4gY3IoZSwoZnVuY3Rpb24oZSxyLG8pe3QoZSxyLG8pJiZuLnB1c2goZSl9KSksbn1mdW5jdGlvbiBocihlLHQsbixyLG8pe3ZhciBhPS0xLGk9ZS5sZW5ndGg7Zm9yKG58fChuPWhhKSxvfHwobz1bXSk7KythPGk7KXt2YXIgbD1lW2FdO3Q+MCYmbihsKT90PjE/aHIobCx0LTEsbixyLG8pOlJ0KG8sbCk6cnx8KG9bby5sZW5ndGhdPWwpfXJldHVybiBvfXZhciBncj1qbygpLHZyPWpvKCEwKTtmdW5jdGlvbiBDcihlLHQpe3JldHVybiBlJiZncihlLHQsUGwpfWZ1bmN0aW9uIG1yKGUsdCl7cmV0dXJuIGUmJnZyKGUsdCxQbCl9ZnVuY3Rpb24gd3IoZSx0KXtyZXR1cm4gX3QodCwoZnVuY3Rpb24odCl7cmV0dXJuIHFpKGVbdF0pfSkpfWZ1bmN0aW9uIGJyKGUsdCl7Zm9yKHZhciBuPTAscj0odD12byh0LGUpKS5sZW5ndGg7bnVsbCE9ZSYmbjxyOyllPWVbSGEodFtuKytdKV07cmV0dXJuIG4mJm49PXI/ZTpvfWZ1bmN0aW9uIHlyKGUsdCxuKXt2YXIgcj10KGUpO3JldHVybiBOaShlKT9yOlJ0KHIsbihlKSl9ZnVuY3Rpb24geHIoZSl7cmV0dXJuIG51bGw9PWU/ZT09PW8/XCJbb2JqZWN0IFVuZGVmaW5lZF1cIjpcIltvYmplY3QgTnVsbF1cIjpYZSYmWGUgaW4gU2UoZSk/ZnVuY3Rpb24oZSl7dmFyIHQ9SWUuY2FsbChlLFhlKSxuPWVbWGVdO3RyeXtlW1hlXT1vO3ZhciByPSEwfWNhdGNoKGUpe312YXIgYT1BZS5jYWxsKGUpO3JldHVybiByJiYodD9lW1hlXT1uOmRlbGV0ZSBlW1hlXSksYX0oZSk6ZnVuY3Rpb24oZSl7cmV0dXJuIEFlLmNhbGwoZSl9KGUpfWZ1bmN0aW9uIGtyKGUsdCl7cmV0dXJuIGU+dH1mdW5jdGlvbiBTcihlLHQpe3JldHVybiBudWxsIT1lJiZJZS5jYWxsKGUsdCl9ZnVuY3Rpb24gT3IoZSx0KXtyZXR1cm4gbnVsbCE9ZSYmdCBpbiBTZShlKX1mdW5jdGlvbiBNcihlLHQsbil7Zm9yKHZhciBhPW4/RXQ6UHQsaT1lWzBdLmxlbmd0aCxsPWUubGVuZ3RoLHM9bCxjPXIobCksdT0xLzAsZD1bXTtzLS07KXt2YXIgcD1lW3NdO3MmJnQmJihwPWp0KHAscXQodCkpKSx1PXZuKHAubGVuZ3RoLHUpLGNbc109IW4mJih0fHxpPj0xMjAmJnAubGVuZ3RoPj0xMjApP25ldyBVbihzJiZwKTpvfXA9ZVswXTt2YXIgZj0tMSxoPWNbMF07ZTpmb3IoOysrZjxpJiZkLmxlbmd0aDx1Oyl7dmFyIGc9cFtmXSx2PXQ/dChnKTpnO2lmKGc9bnx8MCE9PWc/ZzowLCEoaD9KdChoLHYpOmEoZCx2LG4pKSl7Zm9yKHM9bDstLXM7KXt2YXIgQz1jW3NdO2lmKCEoQz9KdChDLHYpOmEoZVtzXSx2LG4pKSljb250aW51ZSBlfWgmJmgucHVzaCh2KSxkLnB1c2goZyl9fXJldHVybiBkfWZ1bmN0aW9uIExyKGUsdCxuKXt2YXIgcj1udWxsPT0oZT1TYShlLHQ9dm8odCxlKSkpP2U6ZVtIYShLYSh0KSldO3JldHVybiBudWxsPT1yP286a3QocixlLG4pfWZ1bmN0aW9uIF9yKGUpe3JldHVybiBRaShlKSYmeHIoZSk9PWd9ZnVuY3Rpb24gUHIoZSx0LG4scixhKXtyZXR1cm4gZT09PXR8fChudWxsPT1lfHxudWxsPT10fHwhUWkoZSkmJiFRaSh0KT9lIT1lJiZ0IT10OmZ1bmN0aW9uKGUsdCxuLHIsYSxpKXt2YXIgbD1OaShlKSxzPU5pKHQpLGM9bD92OmRhKGUpLHU9cz92OmRhKHQpLGQ9KGM9Yz09Zz9TOmMpPT1TLHA9KHU9dT09Zz9TOnUpPT1TLGY9Yz09dTtpZihmJiZ6aShlKSl7aWYoIXppKHQpKXJldHVybiExO2w9ITAsZD0hMX1pZihmJiYhZClyZXR1cm4gaXx8KGk9bmV3IHpuKSxsfHxsbChlKT9YbyhlLHQsbixyLGEsaSk6ZnVuY3Rpb24oZSx0LG4scixvLGEsaSl7c3dpdGNoKG4pe2Nhc2UgUjppZihlLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8ZS5ieXRlT2Zmc2V0IT10LmJ5dGVPZmZzZXQpcmV0dXJuITE7ZT1lLmJ1ZmZlcix0PXQuYnVmZmVyO2Nhc2UgajpyZXR1cm4hKGUuYnl0ZUxlbmd0aCE9dC5ieXRlTGVuZ3RofHwhYShuZXcgTmUoZSksbmV3IE5lKHQpKSk7Y2FzZSBDOmNhc2UgbTpjYXNlIGs6cmV0dXJuIERpKCtlLCt0KTtjYXNlIHc6cmV0dXJuIGUubmFtZT09dC5uYW1lJiZlLm1lc3NhZ2U9PXQubWVzc2FnZTtjYXNlIE06Y2FzZSBfOnJldHVybiBlPT10K1wiXCI7Y2FzZSB4OnZhciBsPW9uO2Nhc2UgTDp2YXIgcz0xJnI7aWYobHx8KGw9c24pLGUuc2l6ZSE9dC5zaXplJiYhcylyZXR1cm4hMTt2YXIgYz1pLmdldChlKTtpZihjKXJldHVybiBjPT10O3J8PTIsaS5zZXQoZSx0KTt2YXIgdT1YbyhsKGUpLGwodCkscixvLGEsaSk7cmV0dXJuIGkuZGVsZXRlKGUpLHU7Y2FzZSBQOmlmKEhuKXJldHVybiBIbi5jYWxsKGUpPT1Ibi5jYWxsKHQpfXJldHVybiExfShlLHQsYyxuLHIsYSxpKTtpZighKDEmbikpe3ZhciBoPWQmJkllLmNhbGwoZSxcIl9fd3JhcHBlZF9fXCIpLGI9cCYmSWUuY2FsbCh0LFwiX193cmFwcGVkX19cIik7aWYoaHx8Yil7dmFyIHk9aD9lLnZhbHVlKCk6ZSxPPWI/dC52YWx1ZSgpOnQ7cmV0dXJuIGl8fChpPW5ldyB6biksYSh5LE8sbixyLGkpfX1yZXR1cm4hIWYmJihpfHwoaT1uZXcgem4pLGZ1bmN0aW9uKGUsdCxuLHIsYSxpKXt2YXIgbD0xJm4scz1lYShlKSxjPXMubGVuZ3RoO2lmKGMhPWVhKHQpLmxlbmd0aCYmIWwpcmV0dXJuITE7Zm9yKHZhciB1PWM7dS0tOyl7dmFyIGQ9c1t1XTtpZighKGw/ZCBpbiB0OkllLmNhbGwodCxkKSkpcmV0dXJuITF9dmFyIHA9aS5nZXQoZSksZj1pLmdldCh0KTtpZihwJiZmKXJldHVybiBwPT10JiZmPT1lO3ZhciBoPSEwO2kuc2V0KGUsdCksaS5zZXQodCxlKTtmb3IodmFyIGc9bDsrK3U8Yzspe3ZhciB2PWVbZD1zW3VdXSxDPXRbZF07aWYocil2YXIgbT1sP3IoQyx2LGQsdCxlLGkpOnIodixDLGQsZSx0LGkpO2lmKCEobT09PW8/dj09PUN8fGEodixDLG4scixpKTptKSl7aD0hMTticmVha31nfHwoZz1cImNvbnN0cnVjdG9yXCI9PWQpfWlmKGgmJiFnKXt2YXIgdz1lLmNvbnN0cnVjdG9yLGI9dC5jb25zdHJ1Y3Rvcjt3PT1ifHwhKFwiY29uc3RydWN0b3JcImluIGUpfHwhKFwiY29uc3RydWN0b3JcImluIHQpfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiB3JiZ3IGluc3RhbmNlb2YgdyYmXCJmdW5jdGlvblwiPT10eXBlb2YgYiYmYiBpbnN0YW5jZW9mIGJ8fChoPSExKX1yZXR1cm4gaS5kZWxldGUoZSksaS5kZWxldGUodCksaH0oZSx0LG4scixhLGkpKX0oZSx0LG4scixQcixhKSl9ZnVuY3Rpb24gRXIoZSx0LG4scil7dmFyIGE9bi5sZW5ndGgsaT1hLGw9IXI7aWYobnVsbD09ZSlyZXR1cm4haTtmb3IoZT1TZShlKTthLS07KXt2YXIgcz1uW2FdO2lmKGwmJnNbMl0/c1sxXSE9PWVbc1swXV06IShzWzBdaW4gZSkpcmV0dXJuITF9Zm9yKDsrK2E8aTspe3ZhciBjPShzPW5bYV0pWzBdLHU9ZVtjXSxkPXNbMV07aWYobCYmc1syXSl7aWYodT09PW8mJiEoYyBpbiBlKSlyZXR1cm4hMX1lbHNle3ZhciBwPW5ldyB6bjtpZihyKXZhciBmPXIodSxkLGMsZSx0LHApO2lmKCEoZj09PW8/UHIoZCx1LDMscixwKTpmKSlyZXR1cm4hMX19cmV0dXJuITB9ZnVuY3Rpb24ganIoZSl7cmV0dXJuISghWGkoZSl8fCh0PWUsSGUmJkhlIGluIHQpKSYmKHFpKGUpP0JlOmdlKS50ZXN0KEFhKGUpKTt2YXIgdH1mdW5jdGlvbiBScihlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6bnVsbD09ZT90czpcIm9iamVjdFwiPT10eXBlb2YgZT9OaShlKT9UcihlWzBdLGVbMV0pOkFyKGUpOnVzKGUpfWZ1bmN0aW9uIElyKGUpe2lmKCFiYShlKSlyZXR1cm4gaG4oZSk7dmFyIHQ9W107Zm9yKHZhciBuIGluIFNlKGUpKUllLmNhbGwoZSxuKSYmXCJjb25zdHJ1Y3RvclwiIT1uJiZ0LnB1c2gobik7cmV0dXJuIHR9ZnVuY3Rpb24gVnIoZSx0KXtyZXR1cm4gZTx0fWZ1bmN0aW9uIEhyKGUsdCl7dmFyIG49LTEsbz1XaShlKT9yKGUubGVuZ3RoKTpbXTtyZXR1cm4gY3IoZSwoZnVuY3Rpb24oZSxyLGEpe29bKytuXT10KGUscixhKX0pKSxvfWZ1bmN0aW9uIEFyKGUpe3ZhciB0PWxhKGUpO3JldHVybiAxPT10Lmxlbmd0aCYmdFswXVsyXT94YSh0WzBdWzBdLHRbMF1bMV0pOmZ1bmN0aW9uKG4pe3JldHVybiBuPT09ZXx8RXIobixlLHQpfX1mdW5jdGlvbiBUcihlLHQpe3JldHVybiBDYShlKSYmeWEodCk/eGEoSGEoZSksdCk6ZnVuY3Rpb24obil7dmFyIHI9U2wobixlKTtyZXR1cm4gcj09PW8mJnI9PT10P09sKG4sZSk6UHIodCxyLDMpfX1mdW5jdGlvbiBEcihlLHQsbixyLGEpe2UhPT10JiZncih0LChmdW5jdGlvbihpLGwpe2lmKGF8fChhPW5ldyB6biksWGkoaSkpIWZ1bmN0aW9uKGUsdCxuLHIsYSxpLGwpe3ZhciBzPU9hKGUsbiksYz1PYSh0LG4pLHU9bC5nZXQoYyk7aWYodSlKbihlLG4sdSk7ZWxzZXt2YXIgZD1pP2kocyxjLG4rXCJcIixlLHQsbCk6byxwPWQ9PT1vO2lmKHApe3ZhciBmPU5pKGMpLGg9IWYmJnppKGMpLGc9IWYmJiFoJiZsbChjKTtkPWMsZnx8aHx8Zz9OaShzKT9kPXM6VWkocyk/ZD1NbyhzKTpoPyhwPSExLGQ9Ym8oYywhMCkpOmc/KHA9ITEsZD14byhjLCEwKSk6ZD1bXTpubChjKXx8JGkoYyk/KGQ9cywkaShzKT9kPWdsKHMpOlhpKHMpJiYhcWkocyl8fChkPWZhKGMpKSk6cD0hMX1wJiYobC5zZXQoYyxkKSxhKGQsYyxyLGksbCksbC5kZWxldGUoYykpLEpuKGUsbixkKX19KGUsdCxsLG4sRHIscixhKTtlbHNle3ZhciBzPXI/cihPYShlLGwpLGksbCtcIlwiLGUsdCxhKTpvO3M9PT1vJiYocz1pKSxKbihlLGwscyl9fSksRWwpfWZ1bmN0aW9uIEJyKGUsdCl7dmFyIG49ZS5sZW5ndGg7aWYobilyZXR1cm4gZ2EodCs9dDwwP246MCxuKT9lW3RdOm99ZnVuY3Rpb24gWnIoZSx0LG4pe3Q9dC5sZW5ndGg/anQodCwoZnVuY3Rpb24oZSl7cmV0dXJuIE5pKGUpP2Z1bmN0aW9uKHQpe3JldHVybiBicih0LDE9PT1lLmxlbmd0aD9lWzBdOmUpfTplfSkpOlt0c107dmFyIHI9LTE7dD1qdCh0LHF0KGFhKCkpKTt2YXIgbz1IcihlLChmdW5jdGlvbihlLG4sbyl7dmFyIGE9anQodCwoZnVuY3Rpb24odCl7cmV0dXJuIHQoZSl9KSk7cmV0dXJue2NyaXRlcmlhOmEsaW5kZXg6KytyLHZhbHVlOmV9fSkpO3JldHVybiBmdW5jdGlvbihlLHQpe3ZhciByPWUubGVuZ3RoO2ZvcihlLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9LTEsbz1lLmNyaXRlcmlhLGE9dC5jcml0ZXJpYSxpPW8ubGVuZ3RoLGw9bi5sZW5ndGg7KytyPGk7KXt2YXIgcz1rbyhvW3JdLGFbcl0pO2lmKHMpcmV0dXJuIHI+PWw/czpzKihcImRlc2NcIj09bltyXT8tMToxKX1yZXR1cm4gZS5pbmRleC10LmluZGV4fShlLHQsbil9KSk7ci0tOyllW3JdPWVbcl0udmFsdWU7cmV0dXJuIGV9KG8pfWZ1bmN0aW9uICRyKGUsdCxuKXtmb3IodmFyIHI9LTEsbz10Lmxlbmd0aCxhPXt9OysrcjxvOyl7dmFyIGk9dFtyXSxsPWJyKGUsaSk7bihsLGkpJiZxcihhLHZvKGksZSksbCl9cmV0dXJuIGF9ZnVuY3Rpb24gTnIoZSx0LG4scil7dmFyIG89cj9adDpCdCxhPS0xLGk9dC5sZW5ndGgsbD1lO2ZvcihlPT09dCYmKHQ9TW8odCkpLG4mJihsPWp0KGUscXQobikpKTsrK2E8aTspZm9yKHZhciBzPTAsYz10W2FdLHU9bj9uKGMpOmM7KHM9byhsLHUscyxyKSk+LTE7KWwhPT1lJiZHZS5jYWxsKGwscywxKSxHZS5jYWxsKGUscywxKTtyZXR1cm4gZX1mdW5jdGlvbiBGcihlLHQpe2Zvcih2YXIgbj1lP3QubGVuZ3RoOjAscj1uLTE7bi0tOyl7dmFyIG89dFtuXTtpZihuPT1yfHxvIT09YSl7dmFyIGE9bztnYShvKT9HZS5jYWxsKGUsbywxKTpsbyhlLG8pfX1yZXR1cm4gZX1mdW5jdGlvbiBXcihlLHQpe3JldHVybiBlK2Z0KHduKCkqKHQtZSsxKSl9ZnVuY3Rpb24gVXIoZSx0KXt2YXIgbj1cIlwiO2lmKCFlfHx0PDF8fHQ+ZClyZXR1cm4gbjtkb3t0JTImJihuKz1lKSwodD1mdCh0LzIpKSYmKGUrPWUpfXdoaWxlKHQpO3JldHVybiBufWZ1bmN0aW9uIHpyKGUsdCl7cmV0dXJuIF9hKGthKGUsdCx0cyksZStcIlwiKX1mdW5jdGlvbiBHcihlKXtyZXR1cm4gS24oRGwoZSkpfWZ1bmN0aW9uIEtyKGUsdCl7dmFyIG49RGwoZSk7cmV0dXJuIGphKG4sb3IodCwwLG4ubGVuZ3RoKSl9ZnVuY3Rpb24gcXIoZSx0LG4scil7aWYoIVhpKGUpKXJldHVybiBlO2Zvcih2YXIgYT0tMSxpPSh0PXZvKHQsZSkpLmxlbmd0aCxsPWktMSxzPWU7bnVsbCE9cyYmKythPGk7KXt2YXIgYz1IYSh0W2FdKSx1PW47aWYoXCJfX3Byb3RvX19cIj09PWN8fFwiY29uc3RydWN0b3JcIj09PWN8fFwicHJvdG90eXBlXCI9PT1jKXJldHVybiBlO2lmKGEhPWwpe3ZhciBkPXNbY107KHU9cj9yKGQsYyxzKTpvKT09PW8mJih1PVhpKGQpP2Q6Z2EodFthKzFdKT9bXTp7fSl9WG4ocyxjLHUpLHM9c1tjXX1yZXR1cm4gZX12YXIgWXI9TG4/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTG4uc2V0KGUsdCksZX06dHMsSnI9ZXQ/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZXQoZSxcInRvU3RyaW5nXCIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOlhsKHQpLHdyaXRhYmxlOiEwfSl9OnRzO2Z1bmN0aW9uIFhyKGUpe3JldHVybiBqYShEbChlKSl9ZnVuY3Rpb24gUXIoZSx0LG4pe3ZhciBvPS0xLGE9ZS5sZW5ndGg7dDwwJiYodD0tdD5hPzA6YSt0KSwobj1uPmE/YTpuKTwwJiYobis9YSksYT10Pm4/MDpuLXQ+Pj4wLHQ+Pj49MDtmb3IodmFyIGk9cihhKTsrK288YTspaVtvXT1lW28rdF07cmV0dXJuIGl9ZnVuY3Rpb24gZW8oZSx0KXt2YXIgbjtyZXR1cm4gY3IoZSwoZnVuY3Rpb24oZSxyLG8pe3JldHVybiEobj10KGUscixvKSl9KSksISFufWZ1bmN0aW9uIHRvKGUsdCxuKXt2YXIgcj0wLG89bnVsbD09ZT9yOmUubGVuZ3RoO2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0PT10JiZvPD0yMTQ3NDgzNjQ3KXtmb3IoO3I8bzspe3ZhciBhPXIrbz4+PjEsaT1lW2FdO251bGwhPT1pJiYhaWwoaSkmJihuP2k8PXQ6aTx0KT9yPWErMTpvPWF9cmV0dXJuIG99cmV0dXJuIG5vKGUsdCx0cyxuKX1mdW5jdGlvbiBubyhlLHQsbixyKXt2YXIgYT0wLGk9bnVsbD09ZT8wOmUubGVuZ3RoO2lmKDA9PT1pKXJldHVybiAwO2Zvcih2YXIgbD0odD1uKHQpKSE9dCxzPW51bGw9PT10LGM9aWwodCksdT10PT09bzthPGk7KXt2YXIgZD1mdCgoYStpKS8yKSxwPW4oZVtkXSksZj1wIT09byxoPW51bGw9PT1wLGc9cD09cCx2PWlsKHApO2lmKGwpdmFyIEM9cnx8ZztlbHNlIEM9dT9nJiYocnx8Zik6cz9nJiZmJiYocnx8IWgpOmM/ZyYmZiYmIWgmJihyfHwhdik6IWgmJiF2JiYocj9wPD10OnA8dCk7Qz9hPWQrMTppPWR9cmV0dXJuIHZuKGksNDI5NDk2NzI5NCl9ZnVuY3Rpb24gcm8oZSx0KXtmb3IodmFyIG49LTEscj1lLmxlbmd0aCxvPTAsYT1bXTsrK248cjspe3ZhciBpPWVbbl0sbD10P3QoaSk6aTtpZighbnx8IURpKGwscykpe3ZhciBzPWw7YVtvKytdPTA9PT1pPzA6aX19cmV0dXJuIGF9ZnVuY3Rpb24gb28oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGU/ZTppbChlKT9wOitlfWZ1bmN0aW9uIGFvKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBlO2lmKE5pKGUpKXJldHVybiBqdChlLGFvKStcIlwiO2lmKGlsKGUpKXJldHVybiBBbj9Bbi5jYWxsKGUpOlwiXCI7dmFyIHQ9ZStcIlwiO3JldHVyblwiMFwiPT10JiYxL2U9PS0xLzA/XCItMFwiOnR9ZnVuY3Rpb24gaW8oZSx0LG4pe3ZhciByPS0xLG89UHQsYT1lLmxlbmd0aCxpPSEwLGw9W10scz1sO2lmKG4paT0hMSxvPUV0O2Vsc2UgaWYoYT49MjAwKXt2YXIgYz10P251bGw6em8oZSk7aWYoYylyZXR1cm4gc24oYyk7aT0hMSxvPUp0LHM9bmV3IFVufWVsc2Ugcz10P1tdOmw7ZTpmb3IoOysrcjxhOyl7dmFyIHU9ZVtyXSxkPXQ/dCh1KTp1O2lmKHU9bnx8MCE9PXU/dTowLGkmJmQ9PWQpe2Zvcih2YXIgcD1zLmxlbmd0aDtwLS07KWlmKHNbcF09PT1kKWNvbnRpbnVlIGU7dCYmcy5wdXNoKGQpLGwucHVzaCh1KX1lbHNlIG8ocyxkLG4pfHwocyE9PWwmJnMucHVzaChkKSxsLnB1c2godSkpfXJldHVybiBsfWZ1bmN0aW9uIGxvKGUsdCl7cmV0dXJuIG51bGw9PShlPVNhKGUsdD12byh0LGUpKSl8fGRlbGV0ZSBlW0hhKEthKHQpKV19ZnVuY3Rpb24gc28oZSx0LG4scil7cmV0dXJuIHFyKGUsdCxuKGJyKGUsdCkpLHIpfWZ1bmN0aW9uIGNvKGUsdCxuLHIpe2Zvcih2YXIgbz1lLmxlbmd0aCxhPXI/bzotMTsocj9hLS06KythPG8pJiZ0KGVbYV0sYSxlKTspO3JldHVybiBuP1FyKGUscj8wOmEscj9hKzE6byk6UXIoZSxyP2ErMTowLHI/bzphKX1mdW5jdGlvbiB1byhlLHQpe3ZhciBuPWU7cmV0dXJuIG4gaW5zdGFuY2VvZiAkbiYmKG49bi52YWx1ZSgpKSxJdCh0LChmdW5jdGlvbihlLHQpe3JldHVybiB0LmZ1bmMuYXBwbHkodC50aGlzQXJnLFJ0KFtlXSx0LmFyZ3MpKX0pLG4pfWZ1bmN0aW9uIHBvKGUsdCxuKXt2YXIgbz1lLmxlbmd0aDtpZihvPDIpcmV0dXJuIG8/aW8oZVswXSk6W107Zm9yKHZhciBhPS0xLGk9cihvKTsrK2E8bzspZm9yKHZhciBsPWVbYV0scz0tMTsrK3M8bzspcyE9YSYmKGlbYV09c3IoaVthXXx8bCxlW3NdLHQsbikpO3JldHVybiBpbyhocihpLDEpLHQsbil9ZnVuY3Rpb24gZm8oZSx0LG4pe2Zvcih2YXIgcj0tMSxhPWUubGVuZ3RoLGk9dC5sZW5ndGgsbD17fTsrK3I8YTspe3ZhciBzPXI8aT90W3JdOm87bihsLGVbcl0scyl9cmV0dXJuIGx9ZnVuY3Rpb24gaG8oZSl7cmV0dXJuIFVpKGUpP2U6W119ZnVuY3Rpb24gZ28oZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZT9lOnRzfWZ1bmN0aW9uIHZvKGUsdCl7cmV0dXJuIE5pKGUpP2U6Q2EoZSx0KT9bZV06VmEodmwoZSkpfXZhciBDbz16cjtmdW5jdGlvbiBtbyhlLHQsbil7dmFyIHI9ZS5sZW5ndGg7cmV0dXJuIG49bj09PW8/cjpuLCF0JiZuPj1yP2U6UXIoZSx0LG4pfXZhciB3bz1pdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGR0LmNsZWFyVGltZW91dChlKX07ZnVuY3Rpb24gYm8oZSx0KXtpZih0KXJldHVybiBlLnNsaWNlKCk7dmFyIG49ZS5sZW5ndGgscj1GZT9GZShuKTpuZXcgZS5jb25zdHJ1Y3RvcihuKTtyZXR1cm4gZS5jb3B5KHIpLHJ9ZnVuY3Rpb24geW8oZSl7dmFyIHQ9bmV3IGUuY29uc3RydWN0b3IoZS5ieXRlTGVuZ3RoKTtyZXR1cm4gbmV3IE5lKHQpLnNldChuZXcgTmUoZSkpLHR9ZnVuY3Rpb24geG8oZSx0KXt2YXIgbj10P3lvKGUuYnVmZmVyKTplLmJ1ZmZlcjtyZXR1cm4gbmV3IGUuY29uc3RydWN0b3IobixlLmJ5dGVPZmZzZXQsZS5sZW5ndGgpfWZ1bmN0aW9uIGtvKGUsdCl7aWYoZSE9PXQpe3ZhciBuPWUhPT1vLHI9bnVsbD09PWUsYT1lPT1lLGk9aWwoZSksbD10IT09byxzPW51bGw9PT10LGM9dD09dCx1PWlsKHQpO2lmKCFzJiYhdSYmIWkmJmU+dHx8aSYmbCYmYyYmIXMmJiF1fHxyJiZsJiZjfHwhbiYmY3x8IWEpcmV0dXJuIDE7aWYoIXImJiFpJiYhdSYmZTx0fHx1JiZuJiZhJiYhciYmIWl8fHMmJm4mJmF8fCFsJiZhfHwhYylyZXR1cm4tMX1yZXR1cm4gMH1mdW5jdGlvbiBTbyhlLHQsbixvKXtmb3IodmFyIGE9LTEsaT1lLmxlbmd0aCxsPW4ubGVuZ3RoLHM9LTEsYz10Lmxlbmd0aCx1PWduKGktbCwwKSxkPXIoYyt1KSxwPSFvOysrczxjOylkW3NdPXRbc107Zm9yKDsrK2E8bDspKHB8fGE8aSkmJihkW25bYV1dPWVbYV0pO2Zvcig7dS0tOylkW3MrK109ZVthKytdO3JldHVybiBkfWZ1bmN0aW9uIE9vKGUsdCxuLG8pe2Zvcih2YXIgYT0tMSxpPWUubGVuZ3RoLGw9LTEscz1uLmxlbmd0aCxjPS0xLHU9dC5sZW5ndGgsZD1nbihpLXMsMCkscD1yKGQrdSksZj0hbzsrK2E8ZDspcFthXT1lW2FdO2Zvcih2YXIgaD1hOysrYzx1OylwW2grY109dFtjXTtmb3IoOysrbDxzOykoZnx8YTxpKSYmKHBbaCtuW2xdXT1lW2ErK10pO3JldHVybiBwfWZ1bmN0aW9uIE1vKGUsdCl7dmFyIG49LTEsbz1lLmxlbmd0aDtmb3IodHx8KHQ9cihvKSk7KytuPG87KXRbbl09ZVtuXTtyZXR1cm4gdH1mdW5jdGlvbiBMbyhlLHQsbixyKXt2YXIgYT0hbjtufHwobj17fSk7Zm9yKHZhciBpPS0xLGw9dC5sZW5ndGg7KytpPGw7KXt2YXIgcz10W2ldLGM9cj9yKG5bc10sZVtzXSxzLG4sZSk6bztjPT09byYmKGM9ZVtzXSksYT9ucihuLHMsYyk6WG4obixzLGMpfXJldHVybiBufWZ1bmN0aW9uIF9vKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7dmFyIG89Tmkobik/U3Q6ZXIsYT10P3QoKTp7fTtyZXR1cm4gbyhuLGUsYWEociwyKSxhKX19ZnVuY3Rpb24gUG8oZSl7cmV0dXJuIHpyKChmdW5jdGlvbih0LG4pe3ZhciByPS0xLGE9bi5sZW5ndGgsaT1hPjE/blthLTFdOm8sbD1hPjI/blsyXTpvO2ZvcihpPWUubGVuZ3RoPjMmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGk/KGEtLSxpKTpvLGwmJnZhKG5bMF0sblsxXSxsKSYmKGk9YTwzP286aSxhPTEpLHQ9U2UodCk7KytyPGE7KXt2YXIgcz1uW3JdO3MmJmUodCxzLHIsaSl9cmV0dXJuIHR9KSl9ZnVuY3Rpb24gRW8oZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXtpZihudWxsPT1uKXJldHVybiBuO2lmKCFXaShuKSlyZXR1cm4gZShuLHIpO2Zvcih2YXIgbz1uLmxlbmd0aCxhPXQ/bzotMSxpPVNlKG4pOyh0P2EtLTorK2E8bykmJiExIT09cihpW2FdLGEsaSk7KTtyZXR1cm4gbn19ZnVuY3Rpb24gam8oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXtmb3IodmFyIG89LTEsYT1TZSh0KSxpPXIodCksbD1pLmxlbmd0aDtsLS07KXt2YXIgcz1pW2U/bDorK29dO2lmKCExPT09bihhW3NdLHMsYSkpYnJlYWt9cmV0dXJuIHR9fWZ1bmN0aW9uIFJvKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj1ybih0PXZsKHQpKT91bih0KTpvLHI9bj9uWzBdOnQuY2hhckF0KDApLGE9bj9tbyhuLDEpLmpvaW4oXCJcIik6dC5zbGljZSgxKTtyZXR1cm4gcltlXSgpK2F9fWZ1bmN0aW9uIElvKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gSXQocWwoJGwodCkucmVwbGFjZShZZSxcIlwiKSksZSxcIlwiKX19ZnVuY3Rpb24gVm8oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzO3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgZTtjYXNlIDE6cmV0dXJuIG5ldyBlKHRbMF0pO2Nhc2UgMjpyZXR1cm4gbmV3IGUodFswXSx0WzFdKTtjYXNlIDM6cmV0dXJuIG5ldyBlKHRbMF0sdFsxXSx0WzJdKTtjYXNlIDQ6cmV0dXJuIG5ldyBlKHRbMF0sdFsxXSx0WzJdLHRbM10pO2Nhc2UgNTpyZXR1cm4gbmV3IGUodFswXSx0WzFdLHRbMl0sdFszXSx0WzRdKTtjYXNlIDY6cmV0dXJuIG5ldyBlKHRbMF0sdFsxXSx0WzJdLHRbM10sdFs0XSx0WzVdKTtjYXNlIDc6cmV0dXJuIG5ldyBlKHRbMF0sdFsxXSx0WzJdLHRbM10sdFs0XSx0WzVdLHRbNl0pfXZhciBuPURuKGUucHJvdG90eXBlKSxyPWUuYXBwbHkobix0KTtyZXR1cm4gWGkocik/cjpufX1mdW5jdGlvbiBIbyhlKXtyZXR1cm4gZnVuY3Rpb24odCxuLHIpe3ZhciBhPVNlKHQpO2lmKCFXaSh0KSl7dmFyIGk9YWEobiwzKTt0PVBsKHQpLG49ZnVuY3Rpb24oZSl7cmV0dXJuIGkoYVtlXSxlLGEpfX12YXIgbD1lKHQsbixyKTtyZXR1cm4gbD4tMT9hW2k/dFtsXTpsXTpvfX1mdW5jdGlvbiBBbyhlKXtyZXR1cm4gUW8oKGZ1bmN0aW9uKHQpe3ZhciBuPXQubGVuZ3RoLHI9bixpPVpuLnByb3RvdHlwZS50aHJ1O2ZvcihlJiZ0LnJldmVyc2UoKTtyLS07KXt2YXIgbD10W3JdO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGwpdGhyb3cgbmV3IExlKGEpO2lmKGkmJiFzJiZcIndyYXBwZXJcIj09cmEobCkpdmFyIHM9bmV3IFpuKFtdLCEwKX1mb3Iocj1zP3I6bjsrK3I8bjspe3ZhciBjPXJhKGw9dFtyXSksdT1cIndyYXBwZXJcIj09Yz9uYShsKTpvO3M9dSYmbWEodVswXSkmJjQyND09dVsxXSYmIXVbNF0ubGVuZ3RoJiYxPT11WzldP3NbcmEodVswXSldLmFwcGx5KHMsdVszXSk6MT09bC5sZW5ndGgmJm1hKGwpP3NbY10oKTpzLnRocnUobCl9cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLHI9ZVswXTtpZihzJiYxPT1lLmxlbmd0aCYmTmkocikpcmV0dXJuIHMucGxhbnQocikudmFsdWUoKTtmb3IodmFyIG89MCxhPW4/dFtvXS5hcHBseSh0aGlzLGUpOnI7KytvPG47KWE9dFtvXS5jYWxsKHRoaXMsYSk7cmV0dXJuIGF9fSkpfWZ1bmN0aW9uIFRvKGUsdCxuLGEsaSxsLHMsdSxkLHApe3ZhciBmPXQmYyxoPTEmdCxnPTImdCx2PTI0JnQsQz01MTImdCxtPWc/bzpWbyhlKTtyZXR1cm4gZnVuY3Rpb24gYygpe2Zvcih2YXIgdz1hcmd1bWVudHMubGVuZ3RoLGI9cih3KSx5PXc7eS0tOyliW3ldPWFyZ3VtZW50c1t5XTtpZih2KXZhciB4PW9hKGMpLGs9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49ZS5sZW5ndGgscj0wO24tLTspZVtuXT09PXQmJisrcjtyZXR1cm4gcn0oYix4KTtpZihhJiYoYj1TbyhiLGEsaSx2KSksbCYmKGI9T28oYixsLHMsdikpLHctPWssdiYmdzxwKXt2YXIgUz1sbihiLHgpO3JldHVybiBXbyhlLHQsVG8sYy5wbGFjZWhvbGRlcixuLGIsUyx1LGQscC13KX12YXIgTz1oP246dGhpcyxNPWc/T1tlXTplO3JldHVybiB3PWIubGVuZ3RoLHU/Yj1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1lLmxlbmd0aCxyPXZuKHQubGVuZ3RoLG4pLGE9TW8oZSk7ci0tOyl7dmFyIGk9dFtyXTtlW3JdPWdhKGksbik/YVtpXTpvfXJldHVybiBlfShiLHUpOkMmJnc+MSYmYi5yZXZlcnNlKCksZiYmZDx3JiYoYi5sZW5ndGg9ZCksdGhpcyYmdGhpcyE9PWR0JiZ0aGlzIGluc3RhbmNlb2YgYyYmKE09bXx8Vm8oTSkpLE0uYXBwbHkoTyxiKX19ZnVuY3Rpb24gRG8oZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIENyKGUsKGZ1bmN0aW9uKGUsbyxhKXt0KHIsbihlKSxvLGEpfSkpLHJ9KG4sZSx0KHIpLHt9KX19ZnVuY3Rpb24gQm8oZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXt2YXIgYTtpZihuPT09byYmcj09PW8pcmV0dXJuIHQ7aWYobiE9PW8mJihhPW4pLHIhPT1vKXtpZihhPT09bylyZXR1cm4gcjtcInN0cmluZ1wiPT10eXBlb2Ygbnx8XCJzdHJpbmdcIj09dHlwZW9mIHI/KG49YW8obikscj1hbyhyKSk6KG49b28obikscj1vbyhyKSksYT1lKG4scil9cmV0dXJuIGF9fWZ1bmN0aW9uIFpvKGUpe3JldHVybiBRbygoZnVuY3Rpb24odCl7cmV0dXJuIHQ9anQodCxxdChhYSgpKSksenIoKGZ1bmN0aW9uKG4pe3ZhciByPXRoaXM7cmV0dXJuIGUodCwoZnVuY3Rpb24oZSl7cmV0dXJuIGt0KGUscixuKX0pKX0pKX0pKX1mdW5jdGlvbiAkbyhlLHQpe3ZhciBuPSh0PXQ9PT1vP1wiIFwiOmFvKHQpKS5sZW5ndGg7aWYobjwyKXJldHVybiBuP1VyKHQsZSk6dDt2YXIgcj1Vcih0LHB0KGUvY24odCkpKTtyZXR1cm4gcm4odCk/bW8odW4ociksMCxlKS5qb2luKFwiXCIpOnIuc2xpY2UoMCxlKX1mdW5jdGlvbiBObyhlKXtyZXR1cm4gZnVuY3Rpb24odCxuLGEpe3JldHVybiBhJiZcIm51bWJlclwiIT10eXBlb2YgYSYmdmEodCxuLGEpJiYobj1hPW8pLHQ9ZGwodCksbj09PW8/KG49dCx0PTApOm49ZGwobiksZnVuY3Rpb24oZSx0LG4sbyl7Zm9yKHZhciBhPS0xLGk9Z24ocHQoKHQtZSkvKG58fDEpKSwwKSxsPXIoaSk7aS0tOylsW28/aTorK2FdPWUsZSs9bjtyZXR1cm4gbH0odCxuLGE9YT09PW8/dDxuPzE6LTE6ZGwoYSksZSl9fWZ1bmN0aW9uIEZvKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0JiZcInN0cmluZ1wiPT10eXBlb2Ygbnx8KHQ9aGwodCksbj1obChuKSksZSh0LG4pfX1mdW5jdGlvbiBXbyhlLHQsbixyLGEsaSxsLGMsdSxkKXt2YXIgcD04JnQ7dHw9cD9zOjY0LDQmKHQmPX4ocD82NDpzKSl8fCh0Jj0tNCk7dmFyIGY9W2UsdCxhLHA/aTpvLHA/bDpvLHA/bzppLHA/bzpsLGMsdSxkXSxoPW4uYXBwbHkobyxmKTtyZXR1cm4gbWEoZSkmJk1hKGgsZiksaC5wbGFjZWhvbGRlcj1yLFBhKGgsZSx0KX1mdW5jdGlvbiBVbyhlKXt2YXIgdD1rZVtlXTtyZXR1cm4gZnVuY3Rpb24oZSxuKXtpZihlPWhsKGUpLChuPW51bGw9PW4/MDp2bihwbChuKSwyOTIpKSYmQXQoZSkpe3ZhciByPSh2bChlKStcImVcIikuc3BsaXQoXCJlXCIpO3JldHVybisoKHI9KHZsKHQoclswXStcImVcIisoK3JbMV0rbikpKStcImVcIikuc3BsaXQoXCJlXCIpKVswXStcImVcIisoK3JbMV0tbikpfXJldHVybiB0KGUpfX12YXIgem89U24mJjEvc24obmV3IFNuKFssLTBdKSlbMV09PXU/ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBTbihlKX06aXM7ZnVuY3Rpb24gR28oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPWRhKHQpO3JldHVybiBuPT14P29uKHQpOm49PUw/ZnVuY3Rpb24oZSl7dmFyIHQ9LTEsbj1BcnJheShlLnNpemUpO3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKGUpe25bKyt0XT1bZSxlXX0pKSxufSh0KTpmdW5jdGlvbihlLHQpe3JldHVybiBqdCh0LChmdW5jdGlvbih0KXtyZXR1cm5bdCxlW3RdXX0pKX0odCxlKHQpKX19ZnVuY3Rpb24gS28oZSx0LG4saSx1LGQscCxmKXt2YXIgaD0yJnQ7aWYoIWgmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IExlKGEpO3ZhciBnPWk/aS5sZW5ndGg6MDtpZihnfHwodCY9LTk3LGk9dT1vKSxwPXA9PT1vP3A6Z24ocGwocCksMCksZj1mPT09bz9mOnBsKGYpLGctPXU/dS5sZW5ndGg6MCw2NCZ0KXt2YXIgdj1pLEM9dTtpPXU9b312YXIgbT1oP286bmEoZSksdz1bZSx0LG4saSx1LHYsQyxkLHAsZl07aWYobSYmZnVuY3Rpb24oZSx0KXt2YXIgbj1lWzFdLHI9dFsxXSxvPW58cixhPW88MTMxLGk9cj09YyYmOD09bnx8cj09YyYmMjU2PT1uJiZlWzddLmxlbmd0aDw9dFs4XXx8Mzg0PT1yJiZ0WzddLmxlbmd0aDw9dFs4XSYmOD09bjtpZighYSYmIWkpcmV0dXJuIGU7MSZyJiYoZVsyXT10WzJdLG98PTEmbj8wOjQpO3ZhciBzPXRbM107aWYocyl7dmFyIHU9ZVszXTtlWzNdPXU/U28odSxzLHRbNF0pOnMsZVs0XT11P2xuKGVbM10sbCk6dFs0XX0ocz10WzVdKSYmKHU9ZVs1XSxlWzVdPXU/T28odSxzLHRbNl0pOnMsZVs2XT11P2xuKGVbNV0sbCk6dFs2XSksKHM9dFs3XSkmJihlWzddPXMpLHImYyYmKGVbOF09bnVsbD09ZVs4XT90WzhdOnZuKGVbOF0sdFs4XSkpLG51bGw9PWVbOV0mJihlWzldPXRbOV0pLGVbMF09dFswXSxlWzFdPW99KHcsbSksZT13WzBdLHQ9d1sxXSxuPXdbMl0saT13WzNdLHU9d1s0XSwhKGY9d1s5XT13WzldPT09bz9oPzA6ZS5sZW5ndGg6Z24od1s5XS1nLDApKSYmMjQmdCYmKHQmPS0yNSksdCYmMSE9dCliPTg9PXR8fDE2PT10P2Z1bmN0aW9uKGUsdCxuKXt2YXIgYT1WbyhlKTtyZXR1cm4gZnVuY3Rpb24gaSgpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLHM9cihsKSxjPWwsdT1vYShpKTtjLS07KXNbY109YXJndW1lbnRzW2NdO3ZhciBkPWw8MyYmc1swXSE9PXUmJnNbbC0xXSE9PXU/W106bG4ocyx1KTtyZXR1cm4obC09ZC5sZW5ndGgpPG4/V28oZSx0LFRvLGkucGxhY2Vob2xkZXIsbyxzLGQsbyxvLG4tbCk6a3QodGhpcyYmdGhpcyE9PWR0JiZ0aGlzIGluc3RhbmNlb2YgaT9hOmUsdGhpcyxzKX19KGUsdCxmKTp0IT1zJiYzMyE9dHx8dS5sZW5ndGg/VG8uYXBwbHkobyx3KTpmdW5jdGlvbihlLHQsbixvKXt2YXIgYT0xJnQsaT1WbyhlKTtyZXR1cm4gZnVuY3Rpb24gdCgpe2Zvcih2YXIgbD0tMSxzPWFyZ3VtZW50cy5sZW5ndGgsYz0tMSx1PW8ubGVuZ3RoLGQ9cih1K3MpLHA9dGhpcyYmdGhpcyE9PWR0JiZ0aGlzIGluc3RhbmNlb2YgdD9pOmU7KytjPHU7KWRbY109b1tjXTtmb3IoO3MtLTspZFtjKytdPWFyZ3VtZW50c1srK2xdO3JldHVybiBrdChwLGE/bjp0aGlzLGQpfX0oZSx0LG4saSk7ZWxzZSB2YXIgYj1mdW5jdGlvbihlLHQsbil7dmFyIHI9MSZ0LG89Vm8oZSk7cmV0dXJuIGZ1bmN0aW9uIHQoKXtyZXR1cm4odGhpcyYmdGhpcyE9PWR0JiZ0aGlzIGluc3RhbmNlb2YgdD9vOmUpLmFwcGx5KHI/bjp0aGlzLGFyZ3VtZW50cyl9fShlLHQsbik7cmV0dXJuIFBhKChtP1lyOk1hKShiLHcpLGUsdCl9ZnVuY3Rpb24gcW8oZSx0LG4scil7cmV0dXJuIGU9PT1vfHxEaShlLEVlW25dKSYmIUllLmNhbGwocixuKT90OmV9ZnVuY3Rpb24gWW8oZSx0LG4scixhLGkpe3JldHVybiBYaShlKSYmWGkodCkmJihpLnNldCh0LGUpLERyKGUsdCxvLFlvLGkpLGkuZGVsZXRlKHQpKSxlfWZ1bmN0aW9uIEpvKGUpe3JldHVybiBubChlKT9vOmV9ZnVuY3Rpb24gWG8oZSx0LG4scixhLGkpe3ZhciBsPTEmbixzPWUubGVuZ3RoLGM9dC5sZW5ndGg7aWYocyE9YyYmIShsJiZjPnMpKXJldHVybiExO3ZhciB1PWkuZ2V0KGUpLGQ9aS5nZXQodCk7aWYodSYmZClyZXR1cm4gdT09dCYmZD09ZTt2YXIgcD0tMSxmPSEwLGg9MiZuP25ldyBVbjpvO2ZvcihpLnNldChlLHQpLGkuc2V0KHQsZSk7KytwPHM7KXt2YXIgZz1lW3BdLHY9dFtwXTtpZihyKXZhciBDPWw/cih2LGcscCx0LGUsaSk6cihnLHYscCxlLHQsaSk7aWYoQyE9PW8pe2lmKEMpY29udGludWU7Zj0hMTticmVha31pZihoKXtpZighSHQodCwoZnVuY3Rpb24oZSx0KXtpZighSnQoaCx0KSYmKGc9PT1lfHxhKGcsZSxuLHIsaSkpKXJldHVybiBoLnB1c2godCl9KSkpe2Y9ITE7YnJlYWt9fWVsc2UgaWYoZyE9PXYmJiFhKGcsdixuLHIsaSkpe2Y9ITE7YnJlYWt9fXJldHVybiBpLmRlbGV0ZShlKSxpLmRlbGV0ZSh0KSxmfWZ1bmN0aW9uIFFvKGUpe3JldHVybiBfYShrYShlLG8sRmEpLGUrXCJcIil9ZnVuY3Rpb24gZWEoZSl7cmV0dXJuIHlyKGUsUGwsY2EpfWZ1bmN0aW9uIHRhKGUpe3JldHVybiB5cihlLEVsLHVhKX12YXIgbmE9TG4/ZnVuY3Rpb24oZSl7cmV0dXJuIExuLmdldChlKX06aXM7ZnVuY3Rpb24gcmEoZSl7Zm9yKHZhciB0PWUubmFtZStcIlwiLG49X25bdF0scj1JZS5jYWxsKF9uLHQpP24ubGVuZ3RoOjA7ci0tOyl7dmFyIG89bltyXSxhPW8uZnVuYztpZihudWxsPT1hfHxhPT1lKXJldHVybiBvLm5hbWV9cmV0dXJuIHR9ZnVuY3Rpb24gb2EoZSl7cmV0dXJuKEllLmNhbGwoVG4sXCJwbGFjZWhvbGRlclwiKT9UbjplKS5wbGFjZWhvbGRlcn1mdW5jdGlvbiBhYSgpe3ZhciBlPVRuLml0ZXJhdGVlfHxucztyZXR1cm4gZT1lPT09bnM/UnI6ZSxhcmd1bWVudHMubGVuZ3RoP2UoYXJndW1lbnRzWzBdLGFyZ3VtZW50c1sxXSk6ZX1mdW5jdGlvbiBpYShlLHQpe3ZhciBuLHIsbz1lLl9fZGF0YV9fO3JldHVybihcInN0cmluZ1wiPT0ocj10eXBlb2Yobj10KSl8fFwibnVtYmVyXCI9PXJ8fFwic3ltYm9sXCI9PXJ8fFwiYm9vbGVhblwiPT1yP1wiX19wcm90b19fXCIhPT1uOm51bGw9PT1uKT9vW1wic3RyaW5nXCI9PXR5cGVvZiB0P1wic3RyaW5nXCI6XCJoYXNoXCJdOm8ubWFwfWZ1bmN0aW9uIGxhKGUpe2Zvcih2YXIgdD1QbChlKSxuPXQubGVuZ3RoO24tLTspe3ZhciByPXRbbl0sbz1lW3JdO3Rbbl09W3Isbyx5YShvKV19cmV0dXJuIHR9ZnVuY3Rpb24gc2EoZSx0KXt2YXIgbj1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lP286ZVt0XX0oZSx0KTtyZXR1cm4ganIobik/bjpvfXZhciBjYT1ndD9mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT9bXTooZT1TZShlKSxfdChndChlKSwoZnVuY3Rpb24odCl7cmV0dXJuIHplLmNhbGwoZSx0KX0pKSl9OmZzLHVhPWd0P2Z1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXTtlOylSdCh0LGNhKGUpKSxlPVdlKGUpO3JldHVybiB0fTpmcyxkYT14cjtmdW5jdGlvbiBwYShlLHQsbil7Zm9yKHZhciByPS0xLG89KHQ9dm8odCxlKSkubGVuZ3RoLGE9ITE7KytyPG87KXt2YXIgaT1IYSh0W3JdKTtpZighKGE9bnVsbCE9ZSYmbihlLGkpKSlicmVhaztlPWVbaV19cmV0dXJuIGF8fCsrciE9bz9hOiEhKG89bnVsbD09ZT8wOmUubGVuZ3RoKSYmSmkobykmJmdhKGksbykmJihOaShlKXx8JGkoZSkpfWZ1bmN0aW9uIGZhKGUpe3JldHVyblwiZnVuY3Rpb25cIiE9dHlwZW9mIGUuY29uc3RydWN0b3J8fGJhKGUpP3t9OkRuKFdlKGUpKX1mdW5jdGlvbiBoYShlKXtyZXR1cm4gTmkoZSl8fCRpKGUpfHwhIShLZSYmZSYmZVtLZV0pfWZ1bmN0aW9uIGdhKGUsdCl7dmFyIG49dHlwZW9mIGU7cmV0dXJuISEodD1udWxsPT10P2Q6dCkmJihcIm51bWJlclwiPT1ufHxcInN5bWJvbFwiIT1uJiZDZS50ZXN0KGUpKSYmZT4tMSYmZSUxPT0wJiZlPHR9ZnVuY3Rpb24gdmEoZSx0LG4pe2lmKCFYaShuKSlyZXR1cm4hMTt2YXIgcj10eXBlb2YgdDtyZXR1cm4hIShcIm51bWJlclwiPT1yP1dpKG4pJiZnYSh0LG4ubGVuZ3RoKTpcInN0cmluZ1wiPT1yJiZ0IGluIG4pJiZEaShuW3RdLGUpfWZ1bmN0aW9uIENhKGUsdCl7aWYoTmkoZSkpcmV0dXJuITE7dmFyIG49dHlwZW9mIGU7cmV0dXJuIShcIm51bWJlclwiIT1uJiZcInN5bWJvbFwiIT1uJiZcImJvb2xlYW5cIiE9biYmbnVsbCE9ZSYmIWlsKGUpKXx8US50ZXN0KGUpfHwhWC50ZXN0KGUpfHxudWxsIT10JiZlIGluIFNlKHQpfWZ1bmN0aW9uIG1hKGUpe3ZhciB0PXJhKGUpLG49VG5bdF07aWYoXCJmdW5jdGlvblwiIT10eXBlb2Ygbnx8ISh0IGluICRuLnByb3RvdHlwZSkpcmV0dXJuITE7aWYoZT09PW4pcmV0dXJuITA7dmFyIHI9bmEobik7cmV0dXJuISFyJiZlPT09clswXX0oeW4mJmRhKG5ldyB5bihuZXcgQXJyYXlCdWZmZXIoMSkpKSE9Unx8eG4mJmRhKG5ldyB4bikhPXh8fGtuJiZkYShrbi5yZXNvbHZlKCkpIT1PfHxTbiYmZGEobmV3IFNuKSE9THx8T24mJmRhKG5ldyBPbikhPUUpJiYoZGE9ZnVuY3Rpb24oZSl7dmFyIHQ9eHIoZSksbj10PT1TP2UuY29uc3RydWN0b3I6byxyPW4/QWEobik6XCJcIjtpZihyKXN3aXRjaChyKXtjYXNlIFBuOnJldHVybiBSO2Nhc2UgRW46cmV0dXJuIHg7Y2FzZSBqbjpyZXR1cm4gTztjYXNlIFJuOnJldHVybiBMO2Nhc2UgSW46cmV0dXJuIEV9cmV0dXJuIHR9KTt2YXIgd2E9amU/cWk6aHM7ZnVuY3Rpb24gYmEoZSl7dmFyIHQ9ZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4gZT09PShcImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiZ0LnByb3RvdHlwZXx8RWUpfWZ1bmN0aW9uIHlhKGUpe3JldHVybiBlPT1lJiYhWGkoZSl9ZnVuY3Rpb24geGEoZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG51bGwhPW4mJm5bZV09PT10JiYodCE9PW98fGUgaW4gU2UobikpfX1mdW5jdGlvbiBrYShlLHQsbil7cmV0dXJuIHQ9Z24odD09PW8/ZS5sZW5ndGgtMTp0LDApLGZ1bmN0aW9uKCl7Zm9yKHZhciBvPWFyZ3VtZW50cyxhPS0xLGk9Z24oby5sZW5ndGgtdCwwKSxsPXIoaSk7KythPGk7KWxbYV09b1t0K2FdO2E9LTE7Zm9yKHZhciBzPXIodCsxKTsrK2E8dDspc1thXT1vW2FdO3JldHVybiBzW3RdPW4obCksa3QoZSx0aGlzLHMpfX1mdW5jdGlvbiBTYShlLHQpe3JldHVybiB0Lmxlbmd0aDwyP2U6YnIoZSxRcih0LDAsLTEpKX1mdW5jdGlvbiBPYShlLHQpe2lmKChcImNvbnN0cnVjdG9yXCIhPT10fHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBlW3RdKSYmXCJfX3Byb3RvX19cIiE9dClyZXR1cm4gZVt0XX12YXIgTWE9RWEoWXIpLExhPXV0fHxmdW5jdGlvbihlLHQpe3JldHVybiBkdC5zZXRUaW1lb3V0KGUsdCl9LF9hPUVhKEpyKTtmdW5jdGlvbiBQYShlLHQsbil7dmFyIHI9dCtcIlwiO3JldHVybiBfYShlLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5sZW5ndGg7aWYoIW4pcmV0dXJuIGU7dmFyIHI9bi0xO3JldHVybiB0W3JdPShuPjE/XCImIFwiOlwiXCIpK3Rbcl0sdD10LmpvaW4obj4yP1wiLCBcIjpcIiBcIiksZS5yZXBsYWNlKGFlLFwie1xcbi8qIFt3cmFwcGVkIHdpdGggXCIrdCtcIl0gKi9cXG5cIil9KHIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gT3QoaCwoZnVuY3Rpb24obil7dmFyIHI9XCJfLlwiK25bMF07dCZuWzFdJiYhUHQoZSxyKSYmZS5wdXNoKHIpfSkpLGUuc29ydCgpfShmdW5jdGlvbihlKXt2YXIgdD1lLm1hdGNoKGllKTtyZXR1cm4gdD90WzFdLnNwbGl0KGxlKTpbXX0ociksbikpKX1mdW5jdGlvbiBFYShlKXt2YXIgdD0wLG49MDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1DbigpLGE9MTYtKHItbik7aWYobj1yLGE+MCl7aWYoKyt0Pj04MDApcmV0dXJuIGFyZ3VtZW50c1swXX1lbHNlIHQ9MDtyZXR1cm4gZS5hcHBseShvLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGphKGUsdCl7dmFyIG49LTEscj1lLmxlbmd0aCxhPXItMTtmb3IodD10PT09bz9yOnQ7KytuPHQ7KXt2YXIgaT1XcihuLGEpLGw9ZVtpXTtlW2ldPWVbbl0sZVtuXT1sfXJldHVybiBlLmxlbmd0aD10LGV9dmFyIFJhLElhLFZhPShSYT1SaSgoZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIDQ2PT09ZS5jaGFyQ29kZUF0KDApJiZ0LnB1c2goXCJcIiksZS5yZXBsYWNlKGVlLChmdW5jdGlvbihlLG4scixvKXt0LnB1c2gocj9vLnJlcGxhY2UodWUsXCIkMVwiKTpufHxlKX0pKSx0fSksKGZ1bmN0aW9uKGUpe3JldHVybiA1MDA9PT1JYS5zaXplJiZJYS5jbGVhcigpLGV9KSksSWE9UmEuY2FjaGUsUmEpO2Z1bmN0aW9uIEhhKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlfHxpbChlKSlyZXR1cm4gZTt2YXIgdD1lK1wiXCI7cmV0dXJuXCIwXCI9PXQmJjEvZT09LTEvMD9cIi0wXCI6dH1mdW5jdGlvbiBBYShlKXtpZihudWxsIT1lKXt0cnl7cmV0dXJuIFJlLmNhbGwoZSl9Y2F0Y2goZSl7fXRyeXtyZXR1cm4gZStcIlwifWNhdGNoKGUpe319cmV0dXJuXCJcIn1mdW5jdGlvbiBUYShlKXtpZihlIGluc3RhbmNlb2YgJG4pcmV0dXJuIGUuY2xvbmUoKTt2YXIgdD1uZXcgWm4oZS5fX3dyYXBwZWRfXyxlLl9fY2hhaW5fXyk7cmV0dXJuIHQuX19hY3Rpb25zX189TW8oZS5fX2FjdGlvbnNfXyksdC5fX2luZGV4X189ZS5fX2luZGV4X18sdC5fX3ZhbHVlc19fPWUuX192YWx1ZXNfXyx0fXZhciBEYT16cigoZnVuY3Rpb24oZSx0KXtyZXR1cm4gVWkoZSk/c3IoZSxocih0LDEsVWksITApKTpbXX0pKSxCYT16cigoZnVuY3Rpb24oZSx0KXt2YXIgbj1LYSh0KTtyZXR1cm4gVWkobikmJihuPW8pLFVpKGUpP3NyKGUsaHIodCwxLFVpLCEwKSxhYShuLDIpKTpbXX0pKSxaYT16cigoZnVuY3Rpb24oZSx0KXt2YXIgbj1LYSh0KTtyZXR1cm4gVWkobikmJihuPW8pLFVpKGUpP3NyKGUsaHIodCwxLFVpLCEwKSxvLG4pOltdfSkpO2Z1bmN0aW9uICRhKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7aWYoIXIpcmV0dXJuLTE7dmFyIG89bnVsbD09bj8wOnBsKG4pO3JldHVybiBvPDAmJihvPWduKHIrbywwKSksRHQoZSxhYSh0LDMpLG8pfWZ1bmN0aW9uIE5hKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7aWYoIXIpcmV0dXJuLTE7dmFyIGE9ci0xO3JldHVybiBuIT09byYmKGE9cGwobiksYT1uPDA/Z24ocithLDApOnZuKGEsci0xKSksRHQoZSxhYSh0LDMpLGEsITApfWZ1bmN0aW9uIEZhKGUpe3JldHVybiBudWxsIT1lJiZlLmxlbmd0aD9ocihlLDEpOltdfWZ1bmN0aW9uIFdhKGUpe3JldHVybiBlJiZlLmxlbmd0aD9lWzBdOm99dmFyIFVhPXpyKChmdW5jdGlvbihlKXt2YXIgdD1qdChlLGhvKTtyZXR1cm4gdC5sZW5ndGgmJnRbMF09PT1lWzBdP01yKHQpOltdfSkpLHphPXpyKChmdW5jdGlvbihlKXt2YXIgdD1LYShlKSxuPWp0KGUsaG8pO3JldHVybiB0PT09S2Eobik/dD1vOm4ucG9wKCksbi5sZW5ndGgmJm5bMF09PT1lWzBdP01yKG4sYWEodCwyKSk6W119KSksR2E9enIoKGZ1bmN0aW9uKGUpe3ZhciB0PUthKGUpLG49anQoZSxobyk7cmV0dXJuKHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Om8pJiZuLnBvcCgpLG4ubGVuZ3RoJiZuWzBdPT09ZVswXT9NcihuLG8sdCk6W119KSk7ZnVuY3Rpb24gS2EoZSl7dmFyIHQ9bnVsbD09ZT8wOmUubGVuZ3RoO3JldHVybiB0P2VbdC0xXTpvfXZhciBxYT16cihZYSk7ZnVuY3Rpb24gWWEoZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGgmJnQmJnQubGVuZ3RoP05yKGUsdCk6ZX12YXIgSmE9UW8oKGZ1bmN0aW9uKGUsdCl7dmFyIG49bnVsbD09ZT8wOmUubGVuZ3RoLHI9cnIoZSx0KTtyZXR1cm4gRnIoZSxqdCh0LChmdW5jdGlvbihlKXtyZXR1cm4gZ2EoZSxuKT8rZTplfSkpLnNvcnQoa28pKSxyfSkpO2Z1bmN0aW9uIFhhKGUpe3JldHVybiBudWxsPT1lP2U6Ym4uY2FsbChlKX12YXIgUWE9enIoKGZ1bmN0aW9uKGUpe3JldHVybiBpbyhocihlLDEsVWksITApKX0pKSxlaT16cigoZnVuY3Rpb24oZSl7dmFyIHQ9S2EoZSk7cmV0dXJuIFVpKHQpJiYodD1vKSxpbyhocihlLDEsVWksITApLGFhKHQsMikpfSkpLHRpPXpyKChmdW5jdGlvbihlKXt2YXIgdD1LYShlKTtyZXR1cm4gdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6byxpbyhocihlLDEsVWksITApLG8sdCl9KSk7ZnVuY3Rpb24gbmkoZSl7aWYoIWV8fCFlLmxlbmd0aClyZXR1cm5bXTt2YXIgdD0wO3JldHVybiBlPV90KGUsKGZ1bmN0aW9uKGUpe2lmKFVpKGUpKXJldHVybiB0PWduKGUubGVuZ3RoLHQpLCEwfSkpLEd0KHQsKGZ1bmN0aW9uKHQpe3JldHVybiBqdChlLEZ0KHQpKX0pKX1mdW5jdGlvbiByaShlLHQpe2lmKCFlfHwhZS5sZW5ndGgpcmV0dXJuW107dmFyIG49bmkoZSk7cmV0dXJuIG51bGw9PXQ/bjpqdChuLChmdW5jdGlvbihlKXtyZXR1cm4ga3QodCxvLGUpfSkpfXZhciBvaT16cigoZnVuY3Rpb24oZSx0KXtyZXR1cm4gVWkoZSk/c3IoZSx0KTpbXX0pKSxhaT16cigoZnVuY3Rpb24oZSl7cmV0dXJuIHBvKF90KGUsVWkpKX0pKSxpaT16cigoZnVuY3Rpb24oZSl7dmFyIHQ9S2EoZSk7cmV0dXJuIFVpKHQpJiYodD1vKSxwbyhfdChlLFVpKSxhYSh0LDIpKX0pKSxsaT16cigoZnVuY3Rpb24oZSl7dmFyIHQ9S2EoZSk7cmV0dXJuIHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Om8scG8oX3QoZSxVaSksbyx0KX0pKSxzaT16cihuaSksY2k9enIoKGZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoLG49dD4xP2VbdC0xXTpvO3JldHVybiBuPVwiZnVuY3Rpb25cIj09dHlwZW9mIG4/KGUucG9wKCksbik6byxyaShlLG4pfSkpO2Z1bmN0aW9uIHVpKGUpe3ZhciB0PVRuKGUpO3JldHVybiB0Ll9fY2hhaW5fXz0hMCx0fWZ1bmN0aW9uIGRpKGUsdCl7cmV0dXJuIHQoZSl9dmFyIHBpPVFvKChmdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aCxuPXQ/ZVswXTowLHI9dGhpcy5fX3dyYXBwZWRfXyxhPWZ1bmN0aW9uKHQpe3JldHVybiBycih0LGUpfTtyZXR1cm4hKHQ+MXx8dGhpcy5fX2FjdGlvbnNfXy5sZW5ndGgpJiZyIGluc3RhbmNlb2YgJG4mJmdhKG4pPygocj1yLnNsaWNlKG4sK24rKHQ/MTowKSkpLl9fYWN0aW9uc19fLnB1c2goe2Z1bmM6ZGksYXJnczpbYV0sdGhpc0FyZzpvfSksbmV3IFpuKHIsdGhpcy5fX2NoYWluX18pLnRocnUoKGZ1bmN0aW9uKGUpe3JldHVybiB0JiYhZS5sZW5ndGgmJmUucHVzaChvKSxlfSkpKTp0aGlzLnRocnUoYSl9KSksZmk9X28oKGZ1bmN0aW9uKGUsdCxuKXtJZS5jYWxsKGUsbik/KytlW25dOm5yKGUsbiwxKX0pKSxoaT1IbygkYSksZ2k9SG8oTmEpO2Z1bmN0aW9uIHZpKGUsdCl7cmV0dXJuKE5pKGUpP090OmNyKShlLGFhKHQsMykpfWZ1bmN0aW9uIENpKGUsdCl7cmV0dXJuKE5pKGUpP010OnVyKShlLGFhKHQsMykpfXZhciBtaT1fbygoZnVuY3Rpb24oZSx0LG4pe0llLmNhbGwoZSxuKT9lW25dLnB1c2godCk6bnIoZSxuLFt0XSl9KSksd2k9enIoKGZ1bmN0aW9uKGUsdCxuKXt2YXIgbz0tMSxhPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQsaT1XaShlKT9yKGUubGVuZ3RoKTpbXTtyZXR1cm4gY3IoZSwoZnVuY3Rpb24oZSl7aVsrK29dPWE/a3QodCxlLG4pOkxyKGUsdCxuKX0pKSxpfSkpLGJpPV9vKChmdW5jdGlvbihlLHQsbil7bnIoZSxuLHQpfSkpO2Z1bmN0aW9uIHlpKGUsdCl7cmV0dXJuKE5pKGUpP2p0OkhyKShlLGFhKHQsMykpfXZhciB4aT1fbygoZnVuY3Rpb24oZSx0LG4pe2Vbbj8wOjFdLnB1c2godCl9KSwoZnVuY3Rpb24oKXtyZXR1cm5bW10sW11dfSkpLGtpPXpyKChmdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJuW107dmFyIG49dC5sZW5ndGg7cmV0dXJuIG4+MSYmdmEoZSx0WzBdLHRbMV0pP3Q9W106bj4yJiZ2YSh0WzBdLHRbMV0sdFsyXSkmJih0PVt0WzBdXSksWnIoZSxocih0LDEpLFtdKX0pKSxTaT1jdHx8ZnVuY3Rpb24oKXtyZXR1cm4gZHQuRGF0ZS5ub3coKX07ZnVuY3Rpb24gT2koZSx0LG4pe3JldHVybiB0PW4/bzp0LHQ9ZSYmbnVsbD09dD9lLmxlbmd0aDp0LEtvKGUsYyxvLG8sbyxvLHQpfWZ1bmN0aW9uIE1pKGUsdCl7dmFyIG47aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBuZXcgTGUoYSk7cmV0dXJuIGU9cGwoZSksZnVuY3Rpb24oKXtyZXR1cm4tLWU+MCYmKG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGU8PTEmJih0PW8pLG59fXZhciBMaT16cigoZnVuY3Rpb24oZSx0LG4pe3ZhciByPTE7aWYobi5sZW5ndGgpe3ZhciBvPWxuKG4sb2EoTGkpKTtyfD1zfXJldHVybiBLbyhlLHIsdCxuLG8pfSkpLF9pPXpyKChmdW5jdGlvbihlLHQsbil7dmFyIHI9MztpZihuLmxlbmd0aCl7dmFyIG89bG4obixvYShfaSkpO3J8PXN9cmV0dXJuIEtvKHQscixlLG4sbyl9KSk7ZnVuY3Rpb24gUGkoZSx0LG4pe3ZhciByLGksbCxzLGMsdSxkPTAscD0hMSxmPSExLGg9ITA7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgTGUoYSk7ZnVuY3Rpb24gZyh0KXt2YXIgbj1yLGE9aTtyZXR1cm4gcj1pPW8sZD10LHM9ZS5hcHBseShhLG4pfWZ1bmN0aW9uIHYoZSl7dmFyIG49ZS11O3JldHVybiB1PT09b3x8bj49dHx8bjwwfHxmJiZlLWQ+PWx9ZnVuY3Rpb24gQygpe3ZhciBlPVNpKCk7aWYodihlKSlyZXR1cm4gbShlKTtjPUxhKEMsZnVuY3Rpb24oZSl7dmFyIG49dC0oZS11KTtyZXR1cm4gZj92bihuLGwtKGUtZCkpOm59KGUpKX1mdW5jdGlvbiBtKGUpe3JldHVybiBjPW8saCYmcj9nKGUpOihyPWk9byxzKX1mdW5jdGlvbiB3KCl7dmFyIGU9U2koKSxuPXYoZSk7aWYocj1hcmd1bWVudHMsaT10aGlzLHU9ZSxuKXtpZihjPT09bylyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGQ9ZSxjPUxhKEMsdCkscD9nKGUpOnN9KHUpO2lmKGYpcmV0dXJuIHdvKGMpLGM9TGEoQyx0KSxnKHUpfXJldHVybiBjPT09byYmKGM9TGEoQyx0KSksc31yZXR1cm4gdD1obCh0KXx8MCxYaShuKSYmKHA9ISFuLmxlYWRpbmcsbD0oZj1cIm1heFdhaXRcImluIG4pP2duKGhsKG4ubWF4V2FpdCl8fDAsdCk6bCxoPVwidHJhaWxpbmdcImluIG4/ISFuLnRyYWlsaW5nOmgpLHcuY2FuY2VsPWZ1bmN0aW9uKCl7YyE9PW8mJndvKGMpLGQ9MCxyPXU9aT1jPW99LHcuZmx1c2g9ZnVuY3Rpb24oKXtyZXR1cm4gYz09PW8/czptKFNpKCkpfSx3fXZhciBFaT16cigoZnVuY3Rpb24oZSx0KXtyZXR1cm4gbHIoZSwxLHQpfSkpLGppPXpyKChmdW5jdGlvbihlLHQsbil7cmV0dXJuIGxyKGUsaGwodCl8fDAsbil9KSk7ZnVuY3Rpb24gUmkoZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlfHxudWxsIT10JiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IG5ldyBMZShhKTt2YXIgbj1mdW5jdGlvbigpe3ZhciByPWFyZ3VtZW50cyxvPXQ/dC5hcHBseSh0aGlzLHIpOnJbMF0sYT1uLmNhY2hlO2lmKGEuaGFzKG8pKXJldHVybiBhLmdldChvKTt2YXIgaT1lLmFwcGx5KHRoaXMscik7cmV0dXJuIG4uY2FjaGU9YS5zZXQobyxpKXx8YSxpfTtyZXR1cm4gbi5jYWNoZT1uZXcoUmkuQ2FjaGV8fFduKSxufWZ1bmN0aW9uIElpKGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IExlKGEpO3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cztzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4hZS5jYWxsKHRoaXMpO2Nhc2UgMTpyZXR1cm4hZS5jYWxsKHRoaXMsdFswXSk7Y2FzZSAyOnJldHVybiFlLmNhbGwodGhpcyx0WzBdLHRbMV0pO2Nhc2UgMzpyZXR1cm4hZS5jYWxsKHRoaXMsdFswXSx0WzFdLHRbMl0pfXJldHVybiFlLmFwcGx5KHRoaXMsdCl9fVJpLkNhY2hlPVduO3ZhciBWaT1DbygoZnVuY3Rpb24oZSx0KXt2YXIgbj0odD0xPT10Lmxlbmd0aCYmTmkodFswXSk/anQodFswXSxxdChhYSgpKSk6anQoaHIodCwxKSxxdChhYSgpKSkpLmxlbmd0aDtyZXR1cm4genIoKGZ1bmN0aW9uKHIpe2Zvcih2YXIgbz0tMSxhPXZuKHIubGVuZ3RoLG4pOysrbzxhOylyW29dPXRbb10uY2FsbCh0aGlzLHJbb10pO3JldHVybiBrdChlLHRoaXMscil9KSl9KSksSGk9enIoKGZ1bmN0aW9uKGUsdCl7dmFyIG49bG4odCxvYShIaSkpO3JldHVybiBLbyhlLHMsbyx0LG4pfSkpLEFpPXpyKChmdW5jdGlvbihlLHQpe3ZhciBuPWxuKHQsb2EoQWkpKTtyZXR1cm4gS28oZSw2NCxvLHQsbil9KSksVGk9UW8oKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIEtvKGUsMjU2LG8sbyxvLHQpfSkpO2Z1bmN0aW9uIERpKGUsdCl7cmV0dXJuIGU9PT10fHxlIT1lJiZ0IT10fXZhciBCaT1GbyhrciksWmk9Rm8oKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU+PXR9KSksJGk9X3IoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKT9fcjpmdW5jdGlvbihlKXtyZXR1cm4gUWkoZSkmJkllLmNhbGwoZSxcImNhbGxlZVwiKSYmIXplLmNhbGwoZSxcImNhbGxlZVwiKX0sTmk9ci5pc0FycmF5LEZpPUN0P3F0KEN0KTpmdW5jdGlvbihlKXtyZXR1cm4gUWkoZSkmJnhyKGUpPT1qfTtmdW5jdGlvbiBXaShlKXtyZXR1cm4gbnVsbCE9ZSYmSmkoZS5sZW5ndGgpJiYhcWkoZSl9ZnVuY3Rpb24gVWkoZSl7cmV0dXJuIFFpKGUpJiZXaShlKX12YXIgemk9dnR8fGhzLEdpPW10P3F0KG10KTpmdW5jdGlvbihlKXtyZXR1cm4gUWkoZSkmJnhyKGUpPT1tfTtmdW5jdGlvbiBLaShlKXtpZighUWkoZSkpcmV0dXJuITE7dmFyIHQ9eHIoZSk7cmV0dXJuIHQ9PXd8fFwiW29iamVjdCBET01FeGNlcHRpb25dXCI9PXR8fFwic3RyaW5nXCI9PXR5cGVvZiBlLm1lc3NhZ2UmJlwic3RyaW5nXCI9PXR5cGVvZiBlLm5hbWUmJiFubChlKX1mdW5jdGlvbiBxaShlKXtpZighWGkoZSkpcmV0dXJuITE7dmFyIHQ9eHIoZSk7cmV0dXJuIHQ9PWJ8fHQ9PXl8fFwiW29iamVjdCBBc3luY0Z1bmN0aW9uXVwiPT10fHxcIltvYmplY3QgUHJveHldXCI9PXR9ZnVuY3Rpb24gWWkoZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGUmJmU9PXBsKGUpfWZ1bmN0aW9uIEppKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlJiZlPi0xJiZlJTE9PTAmJmU8PWR9ZnVuY3Rpb24gWGkoZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuIG51bGwhPWUmJihcIm9iamVjdFwiPT10fHxcImZ1bmN0aW9uXCI9PXQpfWZ1bmN0aW9uIFFpKGUpe3JldHVybiBudWxsIT1lJiZcIm9iamVjdFwiPT10eXBlb2YgZX12YXIgZWw9d3Q/cXQod3QpOmZ1bmN0aW9uKGUpe3JldHVybiBRaShlKSYmZGEoZSk9PXh9O2Z1bmN0aW9uIHRsKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlfHxRaShlKSYmeHIoZSk9PWt9ZnVuY3Rpb24gbmwoZSl7aWYoIVFpKGUpfHx4cihlKSE9UylyZXR1cm4hMTt2YXIgdD1XZShlKTtpZihudWxsPT09dClyZXR1cm4hMDt2YXIgbj1JZS5jYWxsKHQsXCJjb25zdHJ1Y3RvclwiKSYmdC5jb25zdHJ1Y3RvcjtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBuJiZuIGluc3RhbmNlb2YgbiYmUmUuY2FsbChuKT09VGV9dmFyIHJsPWJ0P3F0KGJ0KTpmdW5jdGlvbihlKXtyZXR1cm4gUWkoZSkmJnhyKGUpPT1NfSxvbD15dD9xdCh5dCk6ZnVuY3Rpb24oZSl7cmV0dXJuIFFpKGUpJiZkYShlKT09TH07ZnVuY3Rpb24gYWwoZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGV8fCFOaShlKSYmUWkoZSkmJnhyKGUpPT1ffWZ1bmN0aW9uIGlsKGUpe3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiBlfHxRaShlKSYmeHIoZSk9PVB9dmFyIGxsPXh0P3F0KHh0KTpmdW5jdGlvbihlKXtyZXR1cm4gUWkoZSkmJkppKGUubGVuZ3RoKSYmISFvdFt4cihlKV19LHNsPUZvKFZyKSxjbD1GbygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZTw9dH0pKTtmdW5jdGlvbiB1bChlKXtpZighZSlyZXR1cm5bXTtpZihXaShlKSlyZXR1cm4gYWwoZSk/dW4oZSk6TW8oZSk7aWYocWUmJmVbcWVdKXJldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHQsbj1bXTshKHQ9ZS5uZXh0KCkpLmRvbmU7KW4ucHVzaCh0LnZhbHVlKTtyZXR1cm4gbn0oZVtxZV0oKSk7dmFyIHQ9ZGEoZSk7cmV0dXJuKHQ9PXg/b246dD09TD9zbjpEbCkoZSl9ZnVuY3Rpb24gZGwoZSl7cmV0dXJuIGU/KGU9aGwoZSkpPT09dXx8ZT09PS0xLzA/MTc5NzY5MzEzNDg2MjMxNTdlMjkyKihlPDA/LTE6MSk6ZT09ZT9lOjA6MD09PWU/ZTowfWZ1bmN0aW9uIHBsKGUpe3ZhciB0PWRsKGUpLG49dCUxO3JldHVybiB0PT10P24/dC1uOnQ6MH1mdW5jdGlvbiBmbChlKXtyZXR1cm4gZT9vcihwbChlKSwwLGYpOjB9ZnVuY3Rpb24gaGwoZSl7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpcmV0dXJuIGU7aWYoaWwoZSkpcmV0dXJuIHA7aWYoWGkoZSkpe3ZhciB0PVwiZnVuY3Rpb25cIj09dHlwZW9mIGUudmFsdWVPZj9lLnZhbHVlT2YoKTplO2U9WGkodCk/dCtcIlwiOnR9aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpcmV0dXJuIDA9PT1lP2U6K2U7ZT1LdChlKTt2YXIgbj1oZS50ZXN0KGUpO3JldHVybiBufHx2ZS50ZXN0KGUpP3N0KGUuc2xpY2UoMiksbj8yOjgpOmZlLnRlc3QoZSk/cDorZX1mdW5jdGlvbiBnbChlKXtyZXR1cm4gTG8oZSxFbChlKSl9ZnVuY3Rpb24gdmwoZSl7cmV0dXJuIG51bGw9PWU/XCJcIjphbyhlKX12YXIgQ2w9UG8oKGZ1bmN0aW9uKGUsdCl7aWYoYmEodCl8fFdpKHQpKUxvKHQsUGwodCksZSk7ZWxzZSBmb3IodmFyIG4gaW4gdClJZS5jYWxsKHQsbikmJlhuKGUsbix0W25dKX0pKSxtbD1QbygoZnVuY3Rpb24oZSx0KXtMbyh0LEVsKHQpLGUpfSkpLHdsPVBvKChmdW5jdGlvbihlLHQsbixyKXtMbyh0LEVsKHQpLGUscil9KSksYmw9UG8oKGZ1bmN0aW9uKGUsdCxuLHIpe0xvKHQsUGwodCksZSxyKX0pKSx5bD1RbyhycikseGw9enIoKGZ1bmN0aW9uKGUsdCl7ZT1TZShlKTt2YXIgbj0tMSxyPXQubGVuZ3RoLGE9cj4yP3RbMl06bztmb3IoYSYmdmEodFswXSx0WzFdLGEpJiYocj0xKTsrK248cjspZm9yKHZhciBpPXRbbl0sbD1FbChpKSxzPS0xLGM9bC5sZW5ndGg7KytzPGM7KXt2YXIgdT1sW3NdLGQ9ZVt1XTsoZD09PW98fERpKGQsRWVbdV0pJiYhSWUuY2FsbChlLHUpKSYmKGVbdV09aVt1XSl9cmV0dXJuIGV9KSksa2w9enIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnB1c2gobyxZbyksa3QoUmwsbyxlKX0pKTtmdW5jdGlvbiBTbChlLHQsbil7dmFyIHI9bnVsbD09ZT9vOmJyKGUsdCk7cmV0dXJuIHI9PT1vP246cn1mdW5jdGlvbiBPbChlLHQpe3JldHVybiBudWxsIT1lJiZwYShlLHQsT3IpfXZhciBNbD1EbygoZnVuY3Rpb24oZSx0LG4pe251bGwhPXQmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHQudG9TdHJpbmcmJih0PUFlLmNhbGwodCkpLGVbdF09bn0pLFhsKHRzKSksTGw9RG8oKGZ1bmN0aW9uKGUsdCxuKXtudWxsIT10JiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB0LnRvU3RyaW5nJiYodD1BZS5jYWxsKHQpKSxJZS5jYWxsKGUsdCk/ZVt0XS5wdXNoKG4pOmVbdF09W25dfSksYWEpLF9sPXpyKExyKTtmdW5jdGlvbiBQbChlKXtyZXR1cm4gV2koZSk/R24oZSk6SXIoZSl9ZnVuY3Rpb24gRWwoZSl7cmV0dXJuIFdpKGUpP0duKGUsITApOmZ1bmN0aW9uKGUpe2lmKCFYaShlKSlyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9W107aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gU2UoZSkpdC5wdXNoKG4pO3JldHVybiB0fShlKTt2YXIgdD1iYShlKSxuPVtdO2Zvcih2YXIgciBpbiBlKShcImNvbnN0cnVjdG9yXCIhPXJ8fCF0JiZJZS5jYWxsKGUscikpJiZuLnB1c2gocik7cmV0dXJuIG59KGUpfXZhciBqbD1QbygoZnVuY3Rpb24oZSx0LG4pe0RyKGUsdCxuKX0pKSxSbD1QbygoZnVuY3Rpb24oZSx0LG4scil7RHIoZSx0LG4scil9KSksSWw9UW8oKGZ1bmN0aW9uKGUsdCl7dmFyIG49e307aWYobnVsbD09ZSlyZXR1cm4gbjt2YXIgcj0hMTt0PWp0KHQsKGZ1bmN0aW9uKHQpe3JldHVybiB0PXZvKHQsZSkscnx8KHI9dC5sZW5ndGg+MSksdH0pKSxMbyhlLHRhKGUpLG4pLHImJihuPWFyKG4sNyxKbykpO2Zvcih2YXIgbz10Lmxlbmd0aDtvLS07KWxvKG4sdFtvXSk7cmV0dXJuIG59KSksVmw9UW8oKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWU/e306ZnVuY3Rpb24oZSx0KXtyZXR1cm4gJHIoZSx0LChmdW5jdGlvbih0LG4pe3JldHVybiBPbChlLG4pfSkpfShlLHQpfSkpO2Z1bmN0aW9uIEhsKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbj1qdCh0YShlKSwoZnVuY3Rpb24oZSl7cmV0dXJuW2VdfSkpO3JldHVybiB0PWFhKHQpLCRyKGUsbiwoZnVuY3Rpb24oZSxuKXtyZXR1cm4gdChlLG5bMF0pfSkpfXZhciBBbD1HbyhQbCksVGw9R28oRWwpO2Z1bmN0aW9uIERsKGUpe3JldHVybiBudWxsPT1lP1tdOll0KGUsUGwoZSkpfXZhciBCbD1JbygoZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PXQudG9Mb3dlckNhc2UoKSxlKyhuP1psKHQpOnQpfSkpO2Z1bmN0aW9uIFpsKGUpe3JldHVybiBLbCh2bChlKS50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiAkbChlKXtyZXR1cm4oZT12bChlKSkmJmUucmVwbGFjZShtZSxlbikucmVwbGFjZShKZSxcIlwiKX12YXIgTmw9SW8oKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSsobj9cIi1cIjpcIlwiKSt0LnRvTG93ZXJDYXNlKCl9KSksRmw9SW8oKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSsobj9cIiBcIjpcIlwiKSt0LnRvTG93ZXJDYXNlKCl9KSksV2w9Um8oXCJ0b0xvd2VyQ2FzZVwiKSxVbD1JbygoZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlKyhuP1wiX1wiOlwiXCIpK3QudG9Mb3dlckNhc2UoKX0pKSx6bD1JbygoZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlKyhuP1wiIFwiOlwiXCIpK0tsKHQpfSkpLEdsPUlvKChmdW5jdGlvbihlLHQsbil7cmV0dXJuIGUrKG4/XCIgXCI6XCJcIikrdC50b1VwcGVyQ2FzZSgpfSkpLEtsPVJvKFwidG9VcHBlckNhc2VcIik7ZnVuY3Rpb24gcWwoZSx0LG4pe3JldHVybiBlPXZsKGUpLCh0PW4/bzp0KT09PW8/ZnVuY3Rpb24oZSl7cmV0dXJuIHR0LnRlc3QoZSl9KGUpP2Z1bmN0aW9uKGUpe3JldHVybiBlLm1hdGNoKFFlKXx8W119KGUpOmZ1bmN0aW9uKGUpe3JldHVybiBlLm1hdGNoKHNlKXx8W119KGUpOmUubWF0Y2godCl8fFtdfXZhciBZbD16cigoZnVuY3Rpb24oZSx0KXt0cnl7cmV0dXJuIGt0KGUsbyx0KX1jYXRjaChlKXtyZXR1cm4gS2koZSk/ZTpuZXcgeWUoZSl9fSkpLEpsPVFvKChmdW5jdGlvbihlLHQpe3JldHVybiBPdCh0LChmdW5jdGlvbih0KXt0PUhhKHQpLG5yKGUsdCxMaShlW3RdLGUpKX0pKSxlfSkpO2Z1bmN0aW9uIFhsKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgUWw9QW8oKSxlcz1BbyghMCk7ZnVuY3Rpb24gdHMoZSl7cmV0dXJuIGV9ZnVuY3Rpb24gbnMoZSl7cmV0dXJuIFJyKFwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTphcihlLDEpKX12YXIgcnM9enIoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBMcihuLGUsdCl9fSkpLG9zPXpyKChmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gTHIoZSxuLHQpfX0pKTtmdW5jdGlvbiBhcyhlLHQsbil7dmFyIHI9UGwodCksbz13cih0LHIpO251bGwhPW58fFhpKHQpJiYoby5sZW5ndGh8fCFyLmxlbmd0aCl8fChuPXQsdD1lLGU9dGhpcyxvPXdyKHQsUGwodCkpKTt2YXIgYT0hKFhpKG4pJiZcImNoYWluXCJpbiBuJiYhbi5jaGFpbiksaT1xaShlKTtyZXR1cm4gT3QobywoZnVuY3Rpb24obil7dmFyIHI9dFtuXTtlW25dPXIsaSYmKGUucHJvdG90eXBlW25dPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX2NoYWluX187aWYoYXx8dCl7dmFyIG49ZSh0aGlzLl9fd3JhcHBlZF9fKTtyZXR1cm4obi5fX2FjdGlvbnNfXz1Nbyh0aGlzLl9fYWN0aW9uc19fKSkucHVzaCh7ZnVuYzpyLGFyZ3M6YXJndW1lbnRzLHRoaXNBcmc6ZX0pLG4uX19jaGFpbl9fPXQsbn1yZXR1cm4gci5hcHBseShlLFJ0KFt0aGlzLnZhbHVlKCldLGFyZ3VtZW50cykpfSl9KSksZX1mdW5jdGlvbiBpcygpe312YXIgbHM9Wm8oanQpLHNzPVpvKEx0KSxjcz1abyhIdCk7ZnVuY3Rpb24gdXMoZSl7cmV0dXJuIENhKGUpP0Z0KEhhKGUpKTpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGJyKHQsZSl9fShlKX12YXIgZHM9Tm8oKSxwcz1ObyghMCk7ZnVuY3Rpb24gZnMoKXtyZXR1cm5bXX1mdW5jdGlvbiBocygpe3JldHVybiExfXZhciBncyx2cz1CbygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0fSksMCksQ3M9VW8oXCJjZWlsXCIpLG1zPUJvKChmdW5jdGlvbihlLHQpe3JldHVybiBlL3R9KSwxKSx3cz1VbyhcImZsb29yXCIpLGJzPUJvKChmdW5jdGlvbihlLHQpe3JldHVybiBlKnR9KSwxKSx5cz1VbyhcInJvdW5kXCIpLHhzPUJvKChmdW5jdGlvbihlLHQpe3JldHVybiBlLXR9KSwwKTtyZXR1cm4gVG4uYWZ0ZXI9ZnVuY3Rpb24oZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IG5ldyBMZShhKTtyZXR1cm4gZT1wbChlKSxmdW5jdGlvbigpe2lmKC0tZTwxKXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LFRuLmFyeT1PaSxUbi5hc3NpZ249Q2wsVG4uYXNzaWduSW49bWwsVG4uYXNzaWduSW5XaXRoPXdsLFRuLmFzc2lnbldpdGg9YmwsVG4uYXQ9eWwsVG4uYmVmb3JlPU1pLFRuLmJpbmQ9TGksVG4uYmluZEFsbD1KbCxUbi5iaW5kS2V5PV9pLFRuLmNhc3RBcnJheT1mdW5jdGlvbigpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybltdO3ZhciBlPWFyZ3VtZW50c1swXTtyZXR1cm4gTmkoZSk/ZTpbZV19LFRuLmNoYWluPXVpLFRuLmNodW5rPWZ1bmN0aW9uKGUsdCxuKXt0PShuP3ZhKGUsdCxuKTp0PT09byk/MTpnbihwbCh0KSwwKTt2YXIgYT1udWxsPT1lPzA6ZS5sZW5ndGg7aWYoIWF8fHQ8MSlyZXR1cm5bXTtmb3IodmFyIGk9MCxsPTAscz1yKHB0KGEvdCkpO2k8YTspc1tsKytdPVFyKGUsaSxpKz10KTtyZXR1cm4gc30sVG4uY29tcGFjdD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGgscj0wLG89W107Kyt0PG47KXt2YXIgYT1lW3RdO2EmJihvW3IrK109YSl9cmV0dXJuIG99LFRuLmNvbmNhdD1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg7aWYoIWUpcmV0dXJuW107Zm9yKHZhciB0PXIoZS0xKSxuPWFyZ3VtZW50c1swXSxvPWU7by0tOyl0W28tMV09YXJndW1lbnRzW29dO3JldHVybiBSdChOaShuKT9NbyhuKTpbbl0saHIodCwxKSl9LFRuLmNvbmQ9ZnVuY3Rpb24oZSl7dmFyIHQ9bnVsbD09ZT8wOmUubGVuZ3RoLG49YWEoKTtyZXR1cm4gZT10P2p0KGUsKGZ1bmN0aW9uKGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGVbMV0pdGhyb3cgbmV3IExlKGEpO3JldHVybltuKGVbMF0pLGVbMV1dfSkpOltdLHpyKChmdW5jdGlvbihuKXtmb3IodmFyIHI9LTE7KytyPHQ7KXt2YXIgbz1lW3JdO2lmKGt0KG9bMF0sdGhpcyxuKSlyZXR1cm4ga3Qob1sxXSx0aGlzLG4pfX0pKX0sVG4uY29uZm9ybXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PVBsKGUpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gaXIobixlLHQpfX0oYXIoZSwxKSl9LFRuLmNvbnN0YW50PVhsLFRuLmNvdW50Qnk9ZmksVG4uY3JlYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49RG4oZSk7cmV0dXJuIG51bGw9PXQ/bjp0cihuLHQpfSxUbi5jdXJyeT1mdW5jdGlvbiBlKHQsbixyKXt2YXIgYT1Lbyh0LDgsbyxvLG8sbyxvLG49cj9vOm4pO3JldHVybiBhLnBsYWNlaG9sZGVyPWUucGxhY2Vob2xkZXIsYX0sVG4uY3VycnlSaWdodD1mdW5jdGlvbiBlKHQsbixyKXt2YXIgYT1Lbyh0LDE2LG8sbyxvLG8sbyxuPXI/bzpuKTtyZXR1cm4gYS5wbGFjZWhvbGRlcj1lLnBsYWNlaG9sZGVyLGF9LFRuLmRlYm91bmNlPVBpLFRuLmRlZmF1bHRzPXhsLFRuLmRlZmF1bHRzRGVlcD1rbCxUbi5kZWZlcj1FaSxUbi5kZWxheT1qaSxUbi5kaWZmZXJlbmNlPURhLFRuLmRpZmZlcmVuY2VCeT1CYSxUbi5kaWZmZXJlbmNlV2l0aD1aYSxUbi5kcm9wPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7cmV0dXJuIHI/UXIoZSwodD1ufHx0PT09bz8xOnBsKHQpKTwwPzA6dCxyKTpbXX0sVG4uZHJvcFJpZ2h0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7cmV0dXJuIHI/UXIoZSwwLCh0PXItKHQ9bnx8dD09PW8/MTpwbCh0KSkpPDA/MDp0KTpbXX0sVG4uZHJvcFJpZ2h0V2hpbGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/Y28oZSxhYSh0LDMpLCEwLCEwKTpbXX0sVG4uZHJvcFdoaWxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP2NvKGUsYWEodCwzKSwhMCk6W119LFRuLmZpbGw9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGE9bnVsbD09ZT8wOmUubGVuZ3RoO3JldHVybiBhPyhuJiZcIm51bWJlclwiIT10eXBlb2YgbiYmdmEoZSx0LG4pJiYobj0wLHI9YSksZnVuY3Rpb24oZSx0LG4scil7dmFyIGE9ZS5sZW5ndGg7Zm9yKChuPXBsKG4pKTwwJiYobj0tbj5hPzA6YStuKSwocj1yPT09b3x8cj5hP2E6cGwocikpPDAmJihyKz1hKSxyPW4+cj8wOmZsKHIpO248cjspZVtuKytdPXQ7cmV0dXJuIGV9KGUsdCxuLHIpKTpbXX0sVG4uZmlsdGVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKE5pKGUpP190OmZyKShlLGFhKHQsMykpfSxUbi5mbGF0TWFwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGhyKHlpKGUsdCksMSl9LFRuLmZsYXRNYXBEZWVwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGhyKHlpKGUsdCksdSl9LFRuLmZsYXRNYXBEZXB0aD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG49bj09PW8/MTpwbChuKSxocih5aShlLHQpLG4pfSxUbi5mbGF0dGVuPUZhLFRuLmZsYXR0ZW5EZWVwPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lJiZlLmxlbmd0aD9ocihlLHUpOltdfSxUbi5mbGF0dGVuRGVwdGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbCE9ZSYmZS5sZW5ndGg/aHIoZSx0PXQ9PT1vPzE6cGwodCkpOltdfSxUbi5mbGlwPWZ1bmN0aW9uKGUpe3JldHVybiBLbyhlLDUxMil9LFRuLmZsb3c9UWwsVG4uZmxvd1JpZ2h0PWVzLFRuLmZyb21QYWlycz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGgscj17fTsrK3Q8bjspe3ZhciBvPWVbdF07cltvWzBdXT1vWzFdfXJldHVybiByfSxUbi5mdW5jdGlvbnM9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/W106d3IoZSxQbChlKSl9LFRuLmZ1bmN0aW9uc0luPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP1tdOndyKGUsRWwoZSkpfSxUbi5ncm91cEJ5PW1pLFRuLmluaXRpYWw9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWUmJmUubGVuZ3RoP1FyKGUsMCwtMSk6W119LFRuLmludGVyc2VjdGlvbj1VYSxUbi5pbnRlcnNlY3Rpb25CeT16YSxUbi5pbnRlcnNlY3Rpb25XaXRoPUdhLFRuLmludmVydD1NbCxUbi5pbnZlcnRCeT1MbCxUbi5pbnZva2VNYXA9d2ksVG4uaXRlcmF0ZWU9bnMsVG4ua2V5Qnk9YmksVG4ua2V5cz1QbCxUbi5rZXlzSW49RWwsVG4ubWFwPXlpLFRuLm1hcEtleXM9ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtyZXR1cm4gdD1hYSh0LDMpLENyKGUsKGZ1bmN0aW9uKGUscixvKXtucihuLHQoZSxyLG8pLGUpfSkpLG59LFRuLm1hcFZhbHVlcz1mdW5jdGlvbihlLHQpe3ZhciBuPXt9O3JldHVybiB0PWFhKHQsMyksQ3IoZSwoZnVuY3Rpb24oZSxyLG8pe25yKG4scix0KGUscixvKSl9KSksbn0sVG4ubWF0Y2hlcz1mdW5jdGlvbihlKXtyZXR1cm4gQXIoYXIoZSwxKSl9LFRuLm1hdGNoZXNQcm9wZXJ0eT1mdW5jdGlvbihlLHQpe3JldHVybiBUcihlLGFyKHQsMSkpfSxUbi5tZW1vaXplPVJpLFRuLm1lcmdlPWpsLFRuLm1lcmdlV2l0aD1SbCxUbi5tZXRob2Q9cnMsVG4ubWV0aG9kT2Y9b3MsVG4ubWl4aW49YXMsVG4ubmVnYXRlPUlpLFRuLm50aEFyZz1mdW5jdGlvbihlKXtyZXR1cm4gZT1wbChlKSx6cigoZnVuY3Rpb24odCl7cmV0dXJuIEJyKHQsZSl9KSl9LFRuLm9taXQ9SWwsVG4ub21pdEJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEhsKGUsSWkoYWEodCkpKX0sVG4ub25jZT1mdW5jdGlvbihlKXtyZXR1cm4gTWkoMixlKX0sVG4ub3JkZXJCeT1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbnVsbD09ZT9bXTooTmkodCl8fCh0PW51bGw9PXQ/W106W3RdKSxOaShuPXI/bzpuKXx8KG49bnVsbD09bj9bXTpbbl0pLFpyKGUsdCxuKSl9LFRuLm92ZXI9bHMsVG4ub3ZlckFyZ3M9VmksVG4ub3ZlckV2ZXJ5PXNzLFRuLm92ZXJTb21lPWNzLFRuLnBhcnRpYWw9SGksVG4ucGFydGlhbFJpZ2h0PUFpLFRuLnBhcnRpdGlvbj14aSxUbi5waWNrPVZsLFRuLnBpY2tCeT1IbCxUbi5wcm9wZXJ0eT11cyxUbi5wcm9wZXJ0eU9mPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09ZT9vOmJyKGUsdCl9fSxUbi5wdWxsPXFhLFRuLnB1bGxBbGw9WWEsVG4ucHVsbEFsbEJ5PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSYmZS5sZW5ndGgmJnQmJnQubGVuZ3RoP05yKGUsdCxhYShuLDIpKTplfSxUbi5wdWxsQWxsV2l0aD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUmJmUubGVuZ3RoJiZ0JiZ0Lmxlbmd0aD9OcihlLHQsbyxuKTplfSxUbi5wdWxsQXQ9SmEsVG4ucmFuZ2U9ZHMsVG4ucmFuZ2VSaWdodD1wcyxUbi5yZWFyZz1UaSxUbi5yZWplY3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oTmkoZSk/X3Q6ZnIpKGUsSWkoYWEodCwzKSkpfSxUbi5yZW1vdmU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1bXTtpZighZXx8IWUubGVuZ3RoKXJldHVybiBuO3ZhciByPS0xLG89W10sYT1lLmxlbmd0aDtmb3IodD1hYSh0LDMpOysrcjxhOyl7dmFyIGk9ZVtyXTt0KGkscixlKSYmKG4ucHVzaChpKSxvLnB1c2gocikpfXJldHVybiBGcihlLG8pLG59LFRuLnJlc3Q9ZnVuY3Rpb24oZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBMZShhKTtyZXR1cm4genIoZSx0PXQ9PT1vP3Q6cGwodCkpfSxUbi5yZXZlcnNlPVhhLFRuLnNhbXBsZVNpemU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PShuP3ZhKGUsdCxuKTp0PT09byk/MTpwbCh0KSwoTmkoZSk/cW46S3IpKGUsdCl9LFRuLnNldD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG51bGw9PWU/ZTpxcihlLHQsbil9LFRuLnNldFdpdGg9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHI9XCJmdW5jdGlvblwiPT10eXBlb2Ygcj9yOm8sbnVsbD09ZT9lOnFyKGUsdCxuLHIpfSxUbi5zaHVmZmxlPWZ1bmN0aW9uKGUpe3JldHVybihOaShlKT9ZbjpYcikoZSl9LFRuLnNsaWNlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7cmV0dXJuIHI/KG4mJlwibnVtYmVyXCIhPXR5cGVvZiBuJiZ2YShlLHQsbik/KHQ9MCxuPXIpOih0PW51bGw9PXQ/MDpwbCh0KSxuPW49PT1vP3I6cGwobikpLFFyKGUsdCxuKSk6W119LFRuLnNvcnRCeT1raSxUbi5zb3J0ZWRVbmlxPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmxlbmd0aD9ybyhlKTpbXX0sVG4uc29ydGVkVW5pcUJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP3JvKGUsYWEodCwyKSk6W119LFRuLnNwbGl0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbiYmXCJudW1iZXJcIiE9dHlwZW9mIG4mJnZhKGUsdCxuKSYmKHQ9bj1vKSwobj1uPT09bz9mOm4+Pj4wKT8oZT12bChlKSkmJihcInN0cmluZ1wiPT10eXBlb2YgdHx8bnVsbCE9dCYmIXJsKHQpKSYmISh0PWFvKHQpKSYmcm4oZSk/bW8odW4oZSksMCxuKTplLnNwbGl0KHQsbik6W119LFRuLnNwcmVhZD1mdW5jdGlvbihlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IExlKGEpO3JldHVybiB0PW51bGw9PXQ/MDpnbihwbCh0KSwwKSx6cigoZnVuY3Rpb24obil7dmFyIHI9blt0XSxvPW1vKG4sMCx0KTtyZXR1cm4gciYmUnQobyxyKSxrdChlLHRoaXMsbyl9KSl9LFRuLnRhaWw9ZnVuY3Rpb24oZSl7dmFyIHQ9bnVsbD09ZT8wOmUubGVuZ3RoO3JldHVybiB0P1FyKGUsMSx0KTpbXX0sVG4udGFrZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUmJmUubGVuZ3RoP1FyKGUsMCwodD1ufHx0PT09bz8xOnBsKHQpKTwwPzA6dCk6W119LFRuLnRha2VSaWdodD1mdW5jdGlvbihlLHQsbil7dmFyIHI9bnVsbD09ZT8wOmUubGVuZ3RoO3JldHVybiByP1FyKGUsKHQ9ci0odD1ufHx0PT09bz8xOnBsKHQpKSk8MD8wOnQscik6W119LFRuLnRha2VSaWdodFdoaWxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP2NvKGUsYWEodCwzKSwhMSwhMCk6W119LFRuLnRha2VXaGlsZT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD9jbyhlLGFhKHQsMykpOltdfSxUbi50YXA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdChlKSxlfSxUbi50aHJvdHRsZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9ITAsbz0hMDtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBMZShhKTtyZXR1cm4gWGkobikmJihyPVwibGVhZGluZ1wiaW4gbj8hIW4ubGVhZGluZzpyLG89XCJ0cmFpbGluZ1wiaW4gbj8hIW4udHJhaWxpbmc6byksUGkoZSx0LHtsZWFkaW5nOnIsbWF4V2FpdDp0LHRyYWlsaW5nOm99KX0sVG4udGhydT1kaSxUbi50b0FycmF5PXVsLFRuLnRvUGFpcnM9QWwsVG4udG9QYWlyc0luPVRsLFRuLnRvUGF0aD1mdW5jdGlvbihlKXtyZXR1cm4gTmkoZSk/anQoZSxIYSk6aWwoZSk/W2VdOk1vKFZhKHZsKGUpKSl9LFRuLnRvUGxhaW5PYmplY3Q9Z2wsVG4udHJhbnNmb3JtPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1OaShlKSxvPXJ8fHppKGUpfHxsbChlKTtpZih0PWFhKHQsNCksbnVsbD09bil7dmFyIGE9ZSYmZS5jb25zdHJ1Y3RvcjtuPW8/cj9uZXcgYTpbXTpYaShlKSYmcWkoYSk/RG4oV2UoZSkpOnt9fXJldHVybihvP090OkNyKShlLChmdW5jdGlvbihlLHIsbyl7cmV0dXJuIHQobixlLHIsbyl9KSksbn0sVG4udW5hcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIE9pKGUsMSl9LFRuLnVuaW9uPVFhLFRuLnVuaW9uQnk9ZWksVG4udW5pb25XaXRoPXRpLFRuLnVuaXE9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUubGVuZ3RoP2lvKGUpOltdfSxUbi51bmlxQnk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/aW8oZSxhYSh0LDIpKTpbXX0sVG4udW5pcVdpdGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6byxlJiZlLmxlbmd0aD9pbyhlLG8sdCk6W119LFRuLnVuc2V0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWV8fGxvKGUsdCl9LFRuLnVuemlwPW5pLFRuLnVuemlwV2l0aD1yaSxUbi51cGRhdGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBudWxsPT1lP2U6c28oZSx0LGdvKG4pKX0sVG4udXBkYXRlV2l0aD1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gcj1cImZ1bmN0aW9uXCI9PXR5cGVvZiByP3I6byxudWxsPT1lP2U6c28oZSx0LGdvKG4pLHIpfSxUbi52YWx1ZXM9RGwsVG4udmFsdWVzSW49ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/W106WXQoZSxFbChlKSl9LFRuLndpdGhvdXQ9b2ksVG4ud29yZHM9cWwsVG4ud3JhcD1mdW5jdGlvbihlLHQpe3JldHVybiBIaShnbyh0KSxlKX0sVG4ueG9yPWFpLFRuLnhvckJ5PWlpLFRuLnhvcldpdGg9bGksVG4uemlwPXNpLFRuLnppcE9iamVjdD1mdW5jdGlvbihlLHQpe3JldHVybiBmbyhlfHxbXSx0fHxbXSxYbil9LFRuLnppcE9iamVjdERlZXA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZm8oZXx8W10sdHx8W10scXIpfSxUbi56aXBXaXRoPWNpLFRuLmVudHJpZXM9QWwsVG4uZW50cmllc0luPVRsLFRuLmV4dGVuZD1tbCxUbi5leHRlbmRXaXRoPXdsLGFzKFRuLFRuKSxUbi5hZGQ9dnMsVG4uYXR0ZW1wdD1ZbCxUbi5jYW1lbENhc2U9QmwsVG4uY2FwaXRhbGl6ZT1abCxUbi5jZWlsPUNzLFRuLmNsYW1wPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj09PW8mJihuPXQsdD1vKSxuIT09byYmKG49KG49aGwobikpPT1uP246MCksdCE9PW8mJih0PSh0PWhsKHQpKT09dD90OjApLG9yKGhsKGUpLHQsbil9LFRuLmNsb25lPWZ1bmN0aW9uKGUpe3JldHVybiBhcihlLDQpfSxUbi5jbG9uZURlZXA9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyKGUsNSl9LFRuLmNsb25lRGVlcFdpdGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYXIoZSw1LHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Om8pfSxUbi5jbG9uZVdpdGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYXIoZSw0LHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Om8pfSxUbi5jb25mb3Jtc1RvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PXR8fGlyKGUsdCxQbCh0KSl9LFRuLmRlYnVycj0kbCxUbi5kZWZhdWx0VG89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZXx8ZSE9ZT90OmV9LFRuLmRpdmlkZT1tcyxUbi5lbmRzV2l0aD1mdW5jdGlvbihlLHQsbil7ZT12bChlKSx0PWFvKHQpO3ZhciByPWUubGVuZ3RoLGE9bj1uPT09bz9yOm9yKHBsKG4pLDAscik7cmV0dXJuKG4tPXQubGVuZ3RoKT49MCYmZS5zbGljZShuLGEpPT10fSxUbi5lcT1EaSxUbi5lc2NhcGU9ZnVuY3Rpb24oZSl7cmV0dXJuKGU9dmwoZSkpJiZLLnRlc3QoZSk/ZS5yZXBsYWNlKHosdG4pOmV9LFRuLmVzY2FwZVJlZ0V4cD1mdW5jdGlvbihlKXtyZXR1cm4oZT12bChlKSkmJm5lLnRlc3QoZSk/ZS5yZXBsYWNlKHRlLFwiXFxcXCQmXCIpOmV9LFRuLmV2ZXJ5PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1OaShlKT9MdDpkcjtyZXR1cm4gbiYmdmEoZSx0LG4pJiYodD1vKSxyKGUsYWEodCwzKSl9LFRuLmZpbmQ9aGksVG4uZmluZEluZGV4PSRhLFRuLmZpbmRLZXk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gVHQoZSxhYSh0LDMpLENyKX0sVG4uZmluZExhc3Q9Z2ksVG4uZmluZExhc3RJbmRleD1OYSxUbi5maW5kTGFzdEtleT1mdW5jdGlvbihlLHQpe3JldHVybiBUdChlLGFhKHQsMyksbXIpfSxUbi5mbG9vcj13cyxUbi5mb3JFYWNoPXZpLFRuLmZvckVhY2hSaWdodD1DaSxUbi5mb3JJbj1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lP2U6Z3IoZSxhYSh0LDMpLEVsKX0sVG4uZm9ySW5SaWdodD1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lP2U6dnIoZSxhYSh0LDMpLEVsKX0sVG4uZm9yT3duPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJkNyKGUsYWEodCwzKSl9LFRuLmZvck93blJpZ2h0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJm1yKGUsYWEodCwzKSl9LFRuLmdldD1TbCxUbi5ndD1CaSxUbi5ndGU9WmksVG4uaGFzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGwhPWUmJnBhKGUsdCxTcil9LFRuLmhhc0luPU9sLFRuLmhlYWQ9V2EsVG4uaWRlbnRpdHk9dHMsVG4uaW5jbHVkZXM9ZnVuY3Rpb24oZSx0LG4scil7ZT1XaShlKT9lOkRsKGUpLG49biYmIXI/cGwobik6MDt2YXIgbz1lLmxlbmd0aDtyZXR1cm4gbjwwJiYobj1nbihvK24sMCkpLGFsKGUpP248PW8mJmUuaW5kZXhPZih0LG4pPi0xOiEhbyYmQnQoZSx0LG4pPi0xfSxUbi5pbmRleE9mPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7aWYoIXIpcmV0dXJuLTE7dmFyIG89bnVsbD09bj8wOnBsKG4pO3JldHVybiBvPDAmJihvPWduKHIrbywwKSksQnQoZSx0LG8pfSxUbi5pblJhbmdlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD1kbCh0KSxuPT09bz8obj10LHQ9MCk6bj1kbChuKSxmdW5jdGlvbihlLHQsbil7cmV0dXJuIGU+PXZuKHQsbikmJmU8Z24odCxuKX0oZT1obChlKSx0LG4pfSxUbi5pbnZva2U9X2wsVG4uaXNBcmd1bWVudHM9JGksVG4uaXNBcnJheT1OaSxUbi5pc0FycmF5QnVmZmVyPUZpLFRuLmlzQXJyYXlMaWtlPVdpLFRuLmlzQXJyYXlMaWtlT2JqZWN0PVVpLFRuLmlzQm9vbGVhbj1mdW5jdGlvbihlKXtyZXR1cm4hMD09PWV8fCExPT09ZXx8UWkoZSkmJnhyKGUpPT1DfSxUbi5pc0J1ZmZlcj16aSxUbi5pc0RhdGU9R2ksVG4uaXNFbGVtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBRaShlKSYmMT09PWUubm9kZVR5cGUmJiFubChlKX0sVG4uaXNFbXB0eT1mdW5jdGlvbihlKXtpZihudWxsPT1lKXJldHVybiEwO2lmKFdpKGUpJiYoTmkoZSl8fFwic3RyaW5nXCI9PXR5cGVvZiBlfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnNwbGljZXx8emkoZSl8fGxsKGUpfHwkaShlKSkpcmV0dXJuIWUubGVuZ3RoO3ZhciB0PWRhKGUpO2lmKHQ9PXh8fHQ9PUwpcmV0dXJuIWUuc2l6ZTtpZihiYShlKSlyZXR1cm4hSXIoZSkubGVuZ3RoO2Zvcih2YXIgbiBpbiBlKWlmKEllLmNhbGwoZSxuKSlyZXR1cm4hMTtyZXR1cm4hMH0sVG4uaXNFcXVhbD1mdW5jdGlvbihlLHQpe3JldHVybiBQcihlLHQpfSxUbi5pc0VxdWFsV2l0aD1mdW5jdGlvbihlLHQsbil7dmFyIHI9KG49XCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uOm8pP24oZSx0KTpvO3JldHVybiByPT09bz9QcihlLHQsbyxuKTohIXJ9LFRuLmlzRXJyb3I9S2ksVG4uaXNGaW5pdGU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGUmJkF0KGUpfSxUbi5pc0Z1bmN0aW9uPXFpLFRuLmlzSW50ZWdlcj1ZaSxUbi5pc0xlbmd0aD1KaSxUbi5pc01hcD1lbCxUbi5pc01hdGNoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10fHxFcihlLHQsbGEodCkpfSxUbi5pc01hdGNoV2l0aD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG49XCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uOm8sRXIoZSx0LGxhKHQpLG4pfSxUbi5pc05hTj1mdW5jdGlvbihlKXtyZXR1cm4gdGwoZSkmJmUhPStlfSxUbi5pc05hdGl2ZT1mdW5jdGlvbihlKXtpZih3YShlKSl0aHJvdyBuZXcgeWUoXCJVbnN1cHBvcnRlZCBjb3JlLWpzIHVzZS4gVHJ5IGh0dHBzOi8vbnBtcy5pby9zZWFyY2g/cT1wb255ZmlsbC5cIik7cmV0dXJuIGpyKGUpfSxUbi5pc05pbD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZX0sVG4uaXNOdWxsPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZX0sVG4uaXNOdW1iZXI9dGwsVG4uaXNPYmplY3Q9WGksVG4uaXNPYmplY3RMaWtlPVFpLFRuLmlzUGxhaW5PYmplY3Q9bmwsVG4uaXNSZWdFeHA9cmwsVG4uaXNTYWZlSW50ZWdlcj1mdW5jdGlvbihlKXtyZXR1cm4gWWkoZSkmJmU+PS05MDA3MTk5MjU0NzQwOTkxJiZlPD1kfSxUbi5pc1NldD1vbCxUbi5pc1N0cmluZz1hbCxUbi5pc1N5bWJvbD1pbCxUbi5pc1R5cGVkQXJyYXk9bGwsVG4uaXNVbmRlZmluZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1vfSxUbi5pc1dlYWtNYXA9ZnVuY3Rpb24oZSl7cmV0dXJuIFFpKGUpJiZkYShlKT09RX0sVG4uaXNXZWFrU2V0PWZ1bmN0aW9uKGUpe3JldHVybiBRaShlKSYmXCJbb2JqZWN0IFdlYWtTZXRdXCI9PXhyKGUpfSxUbi5qb2luPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWU/XCJcIjpXdC5jYWxsKGUsdCl9LFRuLmtlYmFiQ2FzZT1ObCxUbi5sYXN0PUthLFRuLmxhc3RJbmRleE9mPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7aWYoIXIpcmV0dXJuLTE7dmFyIGE9cjtyZXR1cm4gbiE9PW8mJihhPShhPXBsKG4pKTwwP2duKHIrYSwwKTp2bihhLHItMSkpLHQ9PXQ/ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1uKzE7ci0tOylpZihlW3JdPT09dClyZXR1cm4gcjtyZXR1cm4gcn0oZSx0LGEpOkR0KGUsJHQsYSwhMCl9LFRuLmxvd2VyQ2FzZT1GbCxUbi5sb3dlckZpcnN0PVdsLFRuLmx0PXNsLFRuLmx0ZT1jbCxUbi5tYXg9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUubGVuZ3RoP3ByKGUsdHMsa3IpOm99LFRuLm1heEJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP3ByKGUsYWEodCwyKSxrcik6b30sVG4ubWVhbj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoZSx0cyl9LFRuLm1lYW5CeT1mdW5jdGlvbihlLHQpe3JldHVybiBOdChlLGFhKHQsMikpfSxUbi5taW49ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUubGVuZ3RoP3ByKGUsdHMsVnIpOm99LFRuLm1pbkJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP3ByKGUsYWEodCwyKSxWcik6b30sVG4uc3R1YkFycmF5PWZzLFRuLnN0dWJGYWxzZT1ocyxUbi5zdHViT2JqZWN0PWZ1bmN0aW9uKCl7cmV0dXJue319LFRuLnN0dWJTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIlwifSxUbi5zdHViVHJ1ZT1mdW5jdGlvbigpe3JldHVybiEwfSxUbi5tdWx0aXBseT1icyxUbi5udGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/QnIoZSxwbCh0KSk6b30sVG4ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBkdC5fPT09dGhpcyYmKGR0Ll89RGUpLHRoaXN9LFRuLm5vb3A9aXMsVG4ubm93PVNpLFRuLnBhZD1mdW5jdGlvbihlLHQsbil7ZT12bChlKTt2YXIgcj0odD1wbCh0KSk/Y24oZSk6MDtpZighdHx8cj49dClyZXR1cm4gZTt2YXIgbz0odC1yKS8yO3JldHVybiAkbyhmdChvKSxuKStlKyRvKHB0KG8pLG4pfSxUbi5wYWRFbmQ9ZnVuY3Rpb24oZSx0LG4pe2U9dmwoZSk7dmFyIHI9KHQ9cGwodCkpP2NuKGUpOjA7cmV0dXJuIHQmJnI8dD9lKyRvKHQtcixuKTplfSxUbi5wYWRTdGFydD1mdW5jdGlvbihlLHQsbil7ZT12bChlKTt2YXIgcj0odD1wbCh0KSk/Y24oZSk6MDtyZXR1cm4gdCYmcjx0PyRvKHQtcixuKStlOmV9LFRuLnBhcnNlSW50PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnx8bnVsbD09dD90PTA6dCYmKHQ9K3QpLG1uKHZsKGUpLnJlcGxhY2UocmUsXCJcIiksdHx8MCl9LFRuLnJhbmRvbT1mdW5jdGlvbihlLHQsbil7aWYobiYmXCJib29sZWFuXCIhPXR5cGVvZiBuJiZ2YShlLHQsbikmJih0PW49byksbj09PW8mJihcImJvb2xlYW5cIj09dHlwZW9mIHQ/KG49dCx0PW8pOlwiYm9vbGVhblwiPT10eXBlb2YgZSYmKG49ZSxlPW8pKSxlPT09byYmdD09PW8/KGU9MCx0PTEpOihlPWRsKGUpLHQ9PT1vPyh0PWUsZT0wKTp0PWRsKHQpKSxlPnQpe3ZhciByPWU7ZT10LHQ9cn1pZihufHxlJTF8fHQlMSl7dmFyIGE9d24oKTtyZXR1cm4gdm4oZSthKih0LWUrbHQoXCIxZS1cIisoKGErXCJcIikubGVuZ3RoLTEpKSksdCl9cmV0dXJuIFdyKGUsdCl9LFRuLnJlZHVjZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9TmkoZSk/SXQ6VXQsbz1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIHIoZSxhYSh0LDQpLG4sbyxjcil9LFRuLnJlZHVjZVJpZ2h0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1OaShlKT9WdDpVdCxvPWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gcihlLGFhKHQsNCksbixvLHVyKX0sVG4ucmVwZWF0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD0obj92YShlLHQsbik6dD09PW8pPzE6cGwodCksVXIodmwoZSksdCl9LFRuLnJlcGxhY2U9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMsdD12bChlWzBdKTtyZXR1cm4gZS5sZW5ndGg8Mz90OnQucmVwbGFjZShlWzFdLGVbMl0pfSxUbi5yZXN1bHQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPS0xLGE9KHQ9dm8odCxlKSkubGVuZ3RoO2ZvcihhfHwoYT0xLGU9byk7KytyPGE7KXt2YXIgaT1udWxsPT1lP286ZVtIYSh0W3JdKV07aT09PW8mJihyPWEsaT1uKSxlPXFpKGkpP2kuY2FsbChlKTppfXJldHVybiBlfSxUbi5yb3VuZD15cyxUbi5ydW5JbkNvbnRleHQ9ZSxUbi5zYW1wbGU9ZnVuY3Rpb24oZSl7cmV0dXJuKE5pKGUpP0tuOkdyKShlKX0sVG4uc2l6ZT1mdW5jdGlvbihlKXtpZihudWxsPT1lKXJldHVybiAwO2lmKFdpKGUpKXJldHVybiBhbChlKT9jbihlKTplLmxlbmd0aDt2YXIgdD1kYShlKTtyZXR1cm4gdD09eHx8dD09TD9lLnNpemU6SXIoZSkubGVuZ3RofSxUbi5zbmFrZUNhc2U9VWwsVG4uc29tZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9TmkoZSk/SHQ6ZW87cmV0dXJuIG4mJnZhKGUsdCxuKSYmKHQ9bykscihlLGFhKHQsMykpfSxUbi5zb3J0ZWRJbmRleD1mdW5jdGlvbihlLHQpe3JldHVybiB0byhlLHQpfSxUbi5zb3J0ZWRJbmRleEJ5PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbm8oZSx0LGFhKG4sMikpfSxUbi5zb3J0ZWRJbmRleE9mPWZ1bmN0aW9uKGUsdCl7dmFyIG49bnVsbD09ZT8wOmUubGVuZ3RoO2lmKG4pe3ZhciByPXRvKGUsdCk7aWYocjxuJiZEaShlW3JdLHQpKXJldHVybiByfXJldHVybi0xfSxUbi5zb3J0ZWRMYXN0SW5kZXg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdG8oZSx0LCEwKX0sVG4uc29ydGVkTGFzdEluZGV4Qnk9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBubyhlLHQsYWEobiwyKSwhMCl9LFRuLnNvcnRlZExhc3RJbmRleE9mPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9ZSYmZS5sZW5ndGgpe3ZhciBuPXRvKGUsdCwhMCktMTtpZihEaShlW25dLHQpKXJldHVybiBufXJldHVybi0xfSxUbi5zdGFydENhc2U9emwsVG4uc3RhcnRzV2l0aD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9dmwoZSksbj1udWxsPT1uPzA6b3IocGwobiksMCxlLmxlbmd0aCksdD1hbyh0KSxlLnNsaWNlKG4sbit0Lmxlbmd0aCk9PXR9LFRuLnN1YnRyYWN0PXhzLFRuLnN1bT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5sZW5ndGg/enQoZSx0cyk6MH0sVG4uc3VtQnk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/enQoZSxhYSh0LDIpKTowfSxUbi50ZW1wbGF0ZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9VG4udGVtcGxhdGVTZXR0aW5ncztuJiZ2YShlLHQsbikmJih0PW8pLGU9dmwoZSksdD13bCh7fSx0LHIscW8pO3ZhciBhLGksbD13bCh7fSx0LmltcG9ydHMsci5pbXBvcnRzLHFvKSxzPVBsKGwpLGM9WXQobCxzKSx1PTAsZD10LmludGVycG9sYXRlfHx3ZSxwPVwiX19wICs9ICdcIixmPU9lKCh0LmVzY2FwZXx8d2UpLnNvdXJjZStcInxcIitkLnNvdXJjZStcInxcIisoZD09PUo/ZGU6d2UpLnNvdXJjZStcInxcIisodC5ldmFsdWF0ZXx8d2UpLnNvdXJjZStcInwkXCIsXCJnXCIpLGg9XCIvLyMgc291cmNlVVJMPVwiKyhJZS5jYWxsKHQsXCJzb3VyY2VVUkxcIik/KHQuc291cmNlVVJMK1wiXCIpLnJlcGxhY2UoL1xccy9nLFwiIFwiKTpcImxvZGFzaC50ZW1wbGF0ZVNvdXJjZXNbXCIrICsrcnQrXCJdXCIpK1wiXFxuXCI7ZS5yZXBsYWNlKGYsKGZ1bmN0aW9uKHQsbixyLG8sbCxzKXtyZXR1cm4gcnx8KHI9bykscCs9ZS5zbGljZSh1LHMpLnJlcGxhY2UoYmUsbm4pLG4mJihhPSEwLHArPVwiJyArXFxuX19lKFwiK24rXCIpICtcXG4nXCIpLGwmJihpPSEwLHArPVwiJztcXG5cIitsK1wiO1xcbl9fcCArPSAnXCIpLHImJihwKz1cIicgK1xcbigoX190ID0gKFwiK3IrXCIpKSA9PSBudWxsID8gJycgOiBfX3QpICtcXG4nXCIpLHU9cyt0Lmxlbmd0aCx0fSkpLHArPVwiJztcXG5cIjt2YXIgZz1JZS5jYWxsKHQsXCJ2YXJpYWJsZVwiKSYmdC52YXJpYWJsZTtpZihnKXtpZihjZS50ZXN0KGcpKXRocm93IG5ldyB5ZShcIkludmFsaWQgYHZhcmlhYmxlYCBvcHRpb24gcGFzc2VkIGludG8gYF8udGVtcGxhdGVgXCIpfWVsc2UgcD1cIndpdGggKG9iaikge1xcblwiK3ArXCJcXG59XFxuXCI7cD0oaT9wLnJlcGxhY2UoTixcIlwiKTpwKS5yZXBsYWNlKEYsXCIkMVwiKS5yZXBsYWNlKFcsXCIkMTtcIikscD1cImZ1bmN0aW9uKFwiKyhnfHxcIm9ialwiKStcIikge1xcblwiKyhnP1wiXCI6XCJvYmogfHwgKG9iaiA9IHt9KTtcXG5cIikrXCJ2YXIgX190LCBfX3AgPSAnJ1wiKyhhP1wiLCBfX2UgPSBfLmVzY2FwZVwiOlwiXCIpKyhpP1wiLCBfX2ogPSBBcnJheS5wcm90b3R5cGUuam9pbjtcXG5mdW5jdGlvbiBwcmludCgpIHsgX19wICs9IF9fai5jYWxsKGFyZ3VtZW50cywgJycpIH1cXG5cIjpcIjtcXG5cIikrcCtcInJldHVybiBfX3BcXG59XCI7dmFyIHY9WWwoKGZ1bmN0aW9uKCl7cmV0dXJuIHhlKHMsaCtcInJldHVybiBcIitwKS5hcHBseShvLGMpfSkpO2lmKHYuc291cmNlPXAsS2kodikpdGhyb3cgdjtyZXR1cm4gdn0sVG4udGltZXM9ZnVuY3Rpb24oZSx0KXtpZigoZT1wbChlKSk8MXx8ZT5kKXJldHVybltdO3ZhciBuPWYscj12bihlLGYpO3Q9YWEodCksZS09Zjtmb3IodmFyIG89R3Qocix0KTsrK248ZTspdChuKTtyZXR1cm4gb30sVG4udG9GaW5pdGU9ZGwsVG4udG9JbnRlZ2VyPXBsLFRuLnRvTGVuZ3RoPWZsLFRuLnRvTG93ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHZsKGUpLnRvTG93ZXJDYXNlKCl9LFRuLnRvTnVtYmVyPWhsLFRuLnRvU2FmZUludGVnZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGU/b3IocGwoZSksLTkwMDcxOTkyNTQ3NDA5OTEsZCk6MD09PWU/ZTowfSxUbi50b1N0cmluZz12bCxUbi50b1VwcGVyPWZ1bmN0aW9uKGUpe3JldHVybiB2bChlKS50b1VwcGVyQ2FzZSgpfSxUbi50cmltPWZ1bmN0aW9uKGUsdCxuKXtpZigoZT12bChlKSkmJihufHx0PT09bykpcmV0dXJuIEt0KGUpO2lmKCFlfHwhKHQ9YW8odCkpKXJldHVybiBlO3ZhciByPXVuKGUpLGE9dW4odCk7cmV0dXJuIG1vKHIsWHQocixhKSxRdChyLGEpKzEpLmpvaW4oXCJcIil9LFRuLnRyaW1FbmQ9ZnVuY3Rpb24oZSx0LG4pe2lmKChlPXZsKGUpKSYmKG58fHQ9PT1vKSlyZXR1cm4gZS5zbGljZSgwLGRuKGUpKzEpO2lmKCFlfHwhKHQ9YW8odCkpKXJldHVybiBlO3ZhciByPXVuKGUpO3JldHVybiBtbyhyLDAsUXQocix1bih0KSkrMSkuam9pbihcIlwiKX0sVG4udHJpbVN0YXJ0PWZ1bmN0aW9uKGUsdCxuKXtpZigoZT12bChlKSkmJihufHx0PT09bykpcmV0dXJuIGUucmVwbGFjZShyZSxcIlwiKTtpZighZXx8ISh0PWFvKHQpKSlyZXR1cm4gZTt2YXIgcj11bihlKTtyZXR1cm4gbW8ocixYdChyLHVuKHQpKSkuam9pbihcIlwiKX0sVG4udHJ1bmNhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj0zMCxyPVwiLi4uXCI7aWYoWGkodCkpe3ZhciBhPVwic2VwYXJhdG9yXCJpbiB0P3Quc2VwYXJhdG9yOmE7bj1cImxlbmd0aFwiaW4gdD9wbCh0Lmxlbmd0aCk6bixyPVwib21pc3Npb25cImluIHQ/YW8odC5vbWlzc2lvbik6cn12YXIgaT0oZT12bChlKSkubGVuZ3RoO2lmKHJuKGUpKXt2YXIgbD11bihlKTtpPWwubGVuZ3RofWlmKG4+PWkpcmV0dXJuIGU7dmFyIHM9bi1jbihyKTtpZihzPDEpcmV0dXJuIHI7dmFyIGM9bD9tbyhsLDAscykuam9pbihcIlwiKTplLnNsaWNlKDAscyk7aWYoYT09PW8pcmV0dXJuIGMrcjtpZihsJiYocys9Yy5sZW5ndGgtcykscmwoYSkpe2lmKGUuc2xpY2Uocykuc2VhcmNoKGEpKXt2YXIgdSxkPWM7Zm9yKGEuZ2xvYmFsfHwoYT1PZShhLnNvdXJjZSx2bChwZS5leGVjKGEpKStcImdcIikpLGEubGFzdEluZGV4PTA7dT1hLmV4ZWMoZCk7KXZhciBwPXUuaW5kZXg7Yz1jLnNsaWNlKDAscD09PW8/czpwKX19ZWxzZSBpZihlLmluZGV4T2YoYW8oYSkscykhPXMpe3ZhciBmPWMubGFzdEluZGV4T2YoYSk7Zj4tMSYmKGM9Yy5zbGljZSgwLGYpKX1yZXR1cm4gYytyfSxUbi51bmVzY2FwZT1mdW5jdGlvbihlKXtyZXR1cm4oZT12bChlKSkmJkcudGVzdChlKT9lLnJlcGxhY2UoVSxwbik6ZX0sVG4udW5pcXVlSWQ9ZnVuY3Rpb24oZSl7dmFyIHQ9KytWZTtyZXR1cm4gdmwoZSkrdH0sVG4udXBwZXJDYXNlPUdsLFRuLnVwcGVyRmlyc3Q9S2wsVG4uZWFjaD12aSxUbi5lYWNoUmlnaHQ9Q2ksVG4uZmlyc3Q9V2EsYXMoVG4sKGdzPXt9LENyKFRuLChmdW5jdGlvbihlLHQpe0llLmNhbGwoVG4ucHJvdG90eXBlLHQpfHwoZ3NbdF09ZSl9KSksZ3MpLHtjaGFpbjohMX0pLFRuLlZFUlNJT049XCI0LjE3LjIxXCIsT3QoW1wiYmluZFwiLFwiYmluZEtleVwiLFwiY3VycnlcIixcImN1cnJ5UmlnaHRcIixcInBhcnRpYWxcIixcInBhcnRpYWxSaWdodFwiXSwoZnVuY3Rpb24oZSl7VG5bZV0ucGxhY2Vob2xkZXI9VG59KSksT3QoW1wiZHJvcFwiLFwidGFrZVwiXSwoZnVuY3Rpb24oZSx0KXskbi5wcm90b3R5cGVbZV09ZnVuY3Rpb24obil7bj1uPT09bz8xOmduKHBsKG4pLDApO3ZhciByPXRoaXMuX19maWx0ZXJlZF9fJiYhdD9uZXcgJG4odGhpcyk6dGhpcy5jbG9uZSgpO3JldHVybiByLl9fZmlsdGVyZWRfXz9yLl9fdGFrZUNvdW50X189dm4obixyLl9fdGFrZUNvdW50X18pOnIuX192aWV3c19fLnB1c2goe3NpemU6dm4obixmKSx0eXBlOmUrKHIuX19kaXJfXzwwP1wiUmlnaHRcIjpcIlwiKX0pLHJ9LCRuLnByb3RvdHlwZVtlK1wiUmlnaHRcIl09ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpW2VdKHQpLnJldmVyc2UoKX19KSksT3QoW1wiZmlsdGVyXCIsXCJtYXBcIixcInRha2VXaGlsZVwiXSwoZnVuY3Rpb24oZSx0KXt2YXIgbj10KzEscj0xPT1ufHwzPT1uOyRuLnByb3RvdHlwZVtlXT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmNsb25lKCk7cmV0dXJuIHQuX19pdGVyYXRlZXNfXy5wdXNoKHtpdGVyYXRlZTphYShlLDMpLHR5cGU6bn0pLHQuX19maWx0ZXJlZF9fPXQuX19maWx0ZXJlZF9ffHxyLHR9fSkpLE90KFtcImhlYWRcIixcImxhc3RcIl0sKGZ1bmN0aW9uKGUsdCl7dmFyIG49XCJ0YWtlXCIrKHQ/XCJSaWdodFwiOlwiXCIpOyRuLnByb3RvdHlwZVtlXT1mdW5jdGlvbigpe3JldHVybiB0aGlzW25dKDEpLnZhbHVlKClbMF19fSkpLE90KFtcImluaXRpYWxcIixcInRhaWxcIl0sKGZ1bmN0aW9uKGUsdCl7dmFyIG49XCJkcm9wXCIrKHQ/XCJcIjpcIlJpZ2h0XCIpOyRuLnByb3RvdHlwZVtlXT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZmlsdGVyZWRfXz9uZXcgJG4odGhpcyk6dGhpc1tuXSgxKX19KSksJG4ucHJvdG90eXBlLmNvbXBhY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWx0ZXIodHMpfSwkbi5wcm90b3R5cGUuZmluZD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5maWx0ZXIoZSkuaGVhZCgpfSwkbi5wcm90b3R5cGUuZmluZExhc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpLmZpbmQoZSl9LCRuLnByb3RvdHlwZS5pbnZva2VNYXA9enIoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZT9uZXcgJG4odGhpcyk6dGhpcy5tYXAoKGZ1bmN0aW9uKG4pe3JldHVybiBMcihuLGUsdCl9KSl9KSksJG4ucHJvdG90eXBlLnJlamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5maWx0ZXIoSWkoYWEoZSkpKX0sJG4ucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGUsdCl7ZT1wbChlKTt2YXIgbj10aGlzO3JldHVybiBuLl9fZmlsdGVyZWRfXyYmKGU+MHx8dDwwKT9uZXcgJG4obik6KGU8MD9uPW4udGFrZVJpZ2h0KC1lKTplJiYobj1uLmRyb3AoZSkpLHQhPT1vJiYobj0odD1wbCh0KSk8MD9uLmRyb3BSaWdodCgtdCk6bi50YWtlKHQtZSkpLG4pfSwkbi5wcm90b3R5cGUudGFrZVJpZ2h0V2hpbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpLnRha2VXaGlsZShlKS5yZXZlcnNlKCl9LCRuLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFrZShmKX0sQ3IoJG4ucHJvdG90eXBlLChmdW5jdGlvbihlLHQpe3ZhciBuPS9eKD86ZmlsdGVyfGZpbmR8bWFwfHJlamVjdCl8V2hpbGUkLy50ZXN0KHQpLHI9L14oPzpoZWFkfGxhc3QpJC8udGVzdCh0KSxhPVRuW3I/XCJ0YWtlXCIrKFwibGFzdFwiPT10P1wiUmlnaHRcIjpcIlwiKTp0XSxpPXJ8fC9eZmluZC8udGVzdCh0KTthJiYoVG4ucHJvdG90eXBlW3RdPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX3dyYXBwZWRfXyxsPXI/WzFdOmFyZ3VtZW50cyxzPXQgaW5zdGFuY2VvZiAkbixjPWxbMF0sdT1zfHxOaSh0KSxkPWZ1bmN0aW9uKGUpe3ZhciB0PWEuYXBwbHkoVG4sUnQoW2VdLGwpKTtyZXR1cm4gciYmcD90WzBdOnR9O3UmJm4mJlwiZnVuY3Rpb25cIj09dHlwZW9mIGMmJjEhPWMubGVuZ3RoJiYocz11PSExKTt2YXIgcD10aGlzLl9fY2hhaW5fXyxmPSEhdGhpcy5fX2FjdGlvbnNfXy5sZW5ndGgsaD1pJiYhcCxnPXMmJiFmO2lmKCFpJiZ1KXt0PWc/dDpuZXcgJG4odGhpcyk7dmFyIHY9ZS5hcHBseSh0LGwpO3JldHVybiB2Ll9fYWN0aW9uc19fLnB1c2goe2Z1bmM6ZGksYXJnczpbZF0sdGhpc0FyZzpvfSksbmV3IFpuKHYscCl9cmV0dXJuIGgmJmc/ZS5hcHBseSh0aGlzLGwpOih2PXRoaXMudGhydShkKSxoP3I/di52YWx1ZSgpWzBdOnYudmFsdWUoKTp2KX0pfSkpLE90KFtcInBvcFwiLFwicHVzaFwiLFwic2hpZnRcIixcInNvcnRcIixcInNwbGljZVwiLFwidW5zaGlmdFwiXSwoZnVuY3Rpb24oZSl7dmFyIHQ9X2VbZV0sbj0vXig/OnB1c2h8c29ydHx1bnNoaWZ0KSQvLnRlc3QoZSk/XCJ0YXBcIjpcInRocnVcIixyPS9eKD86cG9wfHNoaWZ0KSQvLnRlc3QoZSk7VG4ucHJvdG90eXBlW2VdPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzO2lmKHImJiF0aGlzLl9fY2hhaW5fXyl7dmFyIG89dGhpcy52YWx1ZSgpO3JldHVybiB0LmFwcGx5KE5pKG8pP286W10sZSl9cmV0dXJuIHRoaXNbbl0oKGZ1bmN0aW9uKG4pe3JldHVybiB0LmFwcGx5KE5pKG4pP246W10sZSl9KSl9fSkpLENyKCRuLnByb3RvdHlwZSwoZnVuY3Rpb24oZSx0KXt2YXIgbj1Ublt0XTtpZihuKXt2YXIgcj1uLm5hbWUrXCJcIjtJZS5jYWxsKF9uLHIpfHwoX25bcl09W10pLF9uW3JdLnB1c2goe25hbWU6dCxmdW5jOm59KX19KSksX25bVG8obywyKS5uYW1lXT1be25hbWU6XCJ3cmFwcGVyXCIsZnVuYzpvfV0sJG4ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGU9bmV3ICRuKHRoaXMuX193cmFwcGVkX18pO3JldHVybiBlLl9fYWN0aW9uc19fPU1vKHRoaXMuX19hY3Rpb25zX18pLGUuX19kaXJfXz10aGlzLl9fZGlyX18sZS5fX2ZpbHRlcmVkX189dGhpcy5fX2ZpbHRlcmVkX18sZS5fX2l0ZXJhdGVlc19fPU1vKHRoaXMuX19pdGVyYXRlZXNfXyksZS5fX3Rha2VDb3VudF9fPXRoaXMuX190YWtlQ291bnRfXyxlLl9fdmlld3NfXz1Nbyh0aGlzLl9fdmlld3NfXyksZX0sJG4ucHJvdG90eXBlLnJldmVyc2U9ZnVuY3Rpb24oKXtpZih0aGlzLl9fZmlsdGVyZWRfXyl7dmFyIGU9bmV3ICRuKHRoaXMpO2UuX19kaXJfXz0tMSxlLl9fZmlsdGVyZWRfXz0hMH1lbHNlKGU9dGhpcy5jbG9uZSgpKS5fX2Rpcl9fKj0tMTtyZXR1cm4gZX0sJG4ucHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fX3dyYXBwZWRfXy52YWx1ZSgpLHQ9dGhpcy5fX2Rpcl9fLG49TmkoZSkscj10PDAsbz1uP2UubGVuZ3RoOjAsYT1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPS0xLG89bi5sZW5ndGg7KytyPG87KXt2YXIgYT1uW3JdLGk9YS5zaXplO3N3aXRjaChhLnR5cGUpe2Nhc2VcImRyb3BcIjplKz1pO2JyZWFrO2Nhc2VcImRyb3BSaWdodFwiOnQtPWk7YnJlYWs7Y2FzZVwidGFrZVwiOnQ9dm4odCxlK2kpO2JyZWFrO2Nhc2VcInRha2VSaWdodFwiOmU9Z24oZSx0LWkpfX1yZXR1cm57c3RhcnQ6ZSxlbmQ6dH19KDAsbyx0aGlzLl9fdmlld3NfXyksaT1hLnN0YXJ0LGw9YS5lbmQscz1sLWksYz1yP2w6aS0xLHU9dGhpcy5fX2l0ZXJhdGVlc19fLGQ9dS5sZW5ndGgscD0wLGY9dm4ocyx0aGlzLl9fdGFrZUNvdW50X18pO2lmKCFufHwhciYmbz09cyYmZj09cylyZXR1cm4gdW8oZSx0aGlzLl9fYWN0aW9uc19fKTt2YXIgaD1bXTtlOmZvcig7cy0tJiZwPGY7KXtmb3IodmFyIGc9LTEsdj1lW2MrPXRdOysrZzxkOyl7dmFyIEM9dVtnXSxtPUMuaXRlcmF0ZWUsdz1DLnR5cGUsYj1tKHYpO2lmKDI9PXcpdj1iO2Vsc2UgaWYoIWIpe2lmKDE9PXcpY29udGludWUgZTticmVhayBlfX1oW3ArK109dn1yZXR1cm4gaH0sVG4ucHJvdG90eXBlLmF0PXBpLFRuLnByb3RvdHlwZS5jaGFpbj1mdW5jdGlvbigpe3JldHVybiB1aSh0aGlzKX0sVG4ucHJvdG90eXBlLmNvbW1pdD1mdW5jdGlvbigpe3JldHVybiBuZXcgWm4odGhpcy52YWx1ZSgpLHRoaXMuX19jaGFpbl9fKX0sVG4ucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXt0aGlzLl9fdmFsdWVzX189PT1vJiYodGhpcy5fX3ZhbHVlc19fPXVsKHRoaXMudmFsdWUoKSkpO3ZhciBlPXRoaXMuX19pbmRleF9fPj10aGlzLl9fdmFsdWVzX18ubGVuZ3RoO3JldHVybntkb25lOmUsdmFsdWU6ZT9vOnRoaXMuX192YWx1ZXNfX1t0aGlzLl9faW5kZXhfXysrXX19LFRuLnByb3RvdHlwZS5wbGFudD1mdW5jdGlvbihlKXtmb3IodmFyIHQsbj10aGlzO24gaW5zdGFuY2VvZiBCbjspe3ZhciByPVRhKG4pO3IuX19pbmRleF9fPTAsci5fX3ZhbHVlc19fPW8sdD9hLl9fd3JhcHBlZF9fPXI6dD1yO3ZhciBhPXI7bj1uLl9fd3JhcHBlZF9ffXJldHVybiBhLl9fd3JhcHBlZF9fPWUsdH0sVG4ucHJvdG90eXBlLnJldmVyc2U9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9fd3JhcHBlZF9fO2lmKGUgaW5zdGFuY2VvZiAkbil7dmFyIHQ9ZTtyZXR1cm4gdGhpcy5fX2FjdGlvbnNfXy5sZW5ndGgmJih0PW5ldyAkbih0aGlzKSksKHQ9dC5yZXZlcnNlKCkpLl9fYWN0aW9uc19fLnB1c2goe2Z1bmM6ZGksYXJnczpbWGFdLHRoaXNBcmc6b30pLG5ldyBabih0LHRoaXMuX19jaGFpbl9fKX1yZXR1cm4gdGhpcy50aHJ1KFhhKX0sVG4ucHJvdG90eXBlLnRvSlNPTj1Ubi5wcm90b3R5cGUudmFsdWVPZj1Ubi5wcm90b3R5cGUudmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdW8odGhpcy5fX3dyYXBwZWRfXyx0aGlzLl9fYWN0aW9uc19fKX0sVG4ucHJvdG90eXBlLmZpcnN0PVRuLnByb3RvdHlwZS5oZWFkLHFlJiYoVG4ucHJvdG90eXBlW3FlXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksVG59KCk7ZHQuXz1mbiwocj1mdW5jdGlvbigpe3JldHVybiBmbn0uY2FsbCh0LG4sdCxlKSk9PT1vfHwoZS5leHBvcnRzPXIpfS5jYWxsKHRoaXMpfSw3NDE4OmU9Pnt2YXIgdD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLG49T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxyPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dHJ5e2lmKCFPYmplY3QuYXNzaWduKXJldHVybiExO3ZhciBlPW5ldyBTdHJpbmcoXCJhYmNcIik7aWYoZVs1XT1cImRlXCIsXCI1XCI9PT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKVswXSlyZXR1cm4hMTtmb3IodmFyIHQ9e30sbj0wO248MTA7bisrKXRbXCJfXCIrU3RyaW5nLmZyb21DaGFyQ29kZShuKV09bjtpZihcIjAxMjM0NTY3ODlcIiE9PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KSkuam9pbihcIlwiKSlyZXR1cm4hMTt2YXIgcj17fTtyZXR1cm5cImFiY2RlZmdoaWprbG1ub3BxcnN0XCIuc3BsaXQoXCJcIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cltlXT1lfSkpLFwiYWJjZGVmZ2hpamtsbW5vcHFyc3RcIj09PU9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30scikpLmpvaW4oXCJcIil9Y2F0Y2goZSl7cmV0dXJuITF9fSgpP09iamVjdC5hc3NpZ246ZnVuY3Rpb24oZSxvKXtmb3IodmFyIGEsaSxsPWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkXCIpO3JldHVybiBPYmplY3QoZSl9KGUpLHM9MTtzPGFyZ3VtZW50cy5sZW5ndGg7cysrKXtmb3IodmFyIGMgaW4gYT1PYmplY3QoYXJndW1lbnRzW3NdKSluLmNhbGwoYSxjKSYmKGxbY109YVtjXSk7aWYodCl7aT10KGEpO2Zvcih2YXIgdT0wO3U8aS5sZW5ndGg7dSsrKXIuY2FsbChhLGlbdV0pJiYobFtpW3VdXT1hW2lbdV1dKX19cmV0dXJuIGx9fSw5Mjk0OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgcj1uKDY1NSksbz1uKDQzOTQpLGE9bigzNTczKSxpPW4oNDgzOSk7dmFyIGw9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX0oaSkscz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIE1hdGgubWluKE1hdGgubWF4KG4sZSksdCl9LGM9LjAwMSx1PS4wMSxkPTEwLHA9LjA1LGY9MSxoPTEyO2Z1bmN0aW9uIGcoZSx0KXtyZXR1cm4gZSpNYXRoLnNxcnQoMS10KnQpfXZhciB2PVtcImR1cmF0aW9uXCIsXCJib3VuY2VcIl0sQz1bXCJzdGlmZm5lc3NcIixcImRhbXBpbmdcIixcIm1hc3NcIl07ZnVuY3Rpb24gbShlLHQpe3JldHVybiB0LnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT1lW3RdfSkpfWZ1bmN0aW9uIHcoZSl7dmFyIHQ9ZS5mcm9tLG49dm9pZCAwPT09dD8wOnQsYT1lLnRvLGk9dm9pZCAwPT09YT8xOmEsbD1lLnJlc3RTcGVlZCx3PXZvaWQgMD09PWw/MjpsLHk9ZS5yZXN0RGVsdGEseD1yLl9fcmVzdChlLFtcImZyb21cIixcInRvXCIsXCJyZXN0U3BlZWRcIixcInJlc3REZWx0YVwiXSksaz17ZG9uZTohMSx2YWx1ZTpufSxTPWZ1bmN0aW9uKGUpe3ZhciB0PXIuX19hc3NpZ24oe3ZlbG9jaXR5OjAsc3RpZmZuZXNzOjEwMCxkYW1waW5nOjEwLG1hc3M6MSxpc1Jlc29sdmVkRnJvbUR1cmF0aW9uOiExfSxlKTtpZighbShlLEMpJiZtKGUsdikpe3ZhciBuPWZ1bmN0aW9uKGUpe3ZhciB0LG4scj1lLmR1cmF0aW9uLGE9dm9pZCAwPT09cj84MDA6cixpPWUuYm91bmNlLGw9dm9pZCAwPT09aT8uMjU6aSx2PWUudmVsb2NpdHksQz12b2lkIDA9PT12PzA6dixtPWUubWFzcyx3PXZvaWQgMD09PW0/MTptO28ud2FybmluZyhhPD0xZTMqZCxcIlNwcmluZyBkdXJhdGlvbiBtdXN0IGJlIDEwIHNlY29uZHMgb3IgbGVzc1wiKTt2YXIgYj0xLWw7Yj1zKHAsZixiKSxhPXModSxkLGEvMWUzKSxiPDE/KHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZSpiLG49dCphLHI9dC1DLG89ZyhlLGIpLGk9TWF0aC5leHAoLW4pO3JldHVybiBjLXIvbyppfSxuPWZ1bmN0aW9uKGUpe3ZhciBuPWUqYiphLHI9bipDK0Msbz1NYXRoLnBvdyhiLDIpKk1hdGgucG93KGUsMikqYSxpPU1hdGguZXhwKC1uKSxsPWcoTWF0aC5wb3coZSwyKSxiKTtyZXR1cm4oLXQoZSkrYz4wPy0xOjEpKigoci1vKSppKS9sfSk6KHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZXhwKC1lKmEpKigoZS1DKSphKzEpLWN9LG49ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZXhwKC1lKmEpKihhKmEqKEMtZSkpfSk7dmFyIHk9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1uLG89MTtvPGg7bysrKXItPWUocikvdChyKTtyZXR1cm4gcn0odCxuLDUvYSk7aWYoYSo9MWUzLGlzTmFOKHkpKXJldHVybntzdGlmZm5lc3M6MTAwLGRhbXBpbmc6MTAsZHVyYXRpb246YX07dmFyIHg9TWF0aC5wb3coeSwyKSp3O3JldHVybntzdGlmZm5lc3M6eCxkYW1waW5nOjIqYipNYXRoLnNxcnQodyp4KSxkdXJhdGlvbjphfX0oZSk7KHQ9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sdCksbikse3ZlbG9jaXR5OjAsbWFzczoxfSkpLmlzUmVzb2x2ZWRGcm9tRHVyYXRpb249ITB9cmV0dXJuIHR9KHgpLE89Uy5zdGlmZm5lc3MsTT1TLmRhbXBpbmcsTD1TLm1hc3MsXz1TLnZlbG9jaXR5LFA9Uy5kdXJhdGlvbixFPVMuaXNSZXNvbHZlZEZyb21EdXJhdGlvbixqPWIsUj1iO2Z1bmN0aW9uIEkoKXt2YXIgZT1fPy1fLzFlMzowLHQ9aS1uLHI9TS8oMipNYXRoLnNxcnQoTypMKSksbz1NYXRoLnNxcnQoTy9MKS8xZTM7aWYobnVsbCE9eXx8KHk9TWF0aC5hYnMoaS1uKTw9MT8uMDE6LjQpLHI8MSl7dmFyIGE9ZyhvLHIpO2o9ZnVuY3Rpb24obil7dmFyIGw9TWF0aC5leHAoLXIqbypuKTtyZXR1cm4gaS1sKigoZStyKm8qdCkvYSpNYXRoLnNpbihhKm4pK3QqTWF0aC5jb3MoYSpuKSl9LFI9ZnVuY3Rpb24obil7dmFyIGk9TWF0aC5leHAoLXIqbypuKTtyZXR1cm4gcipvKmkqKE1hdGguc2luKGEqbikqKGUrcipvKnQpL2ErdCpNYXRoLmNvcyhhKm4pKS1pKihNYXRoLmNvcyhhKm4pKihlK3Iqbyp0KS1hKnQqTWF0aC5zaW4oYSpuKSl9fWVsc2UgaWYoMT09PXIpaj1mdW5jdGlvbihuKXtyZXR1cm4gaS1NYXRoLmV4cCgtbypuKSoodCsoZStvKnQpKm4pfTtlbHNle3ZhciBsPW8qTWF0aC5zcXJ0KHIqci0xKTtqPWZ1bmN0aW9uKG4pe3ZhciBhPU1hdGguZXhwKC1yKm8qbikscz1NYXRoLm1pbihsKm4sMzAwKTtyZXR1cm4gaS1hKigoZStyKm8qdCkqTWF0aC5zaW5oKHMpK2wqdCpNYXRoLmNvc2gocykpL2x9fX1yZXR1cm4gSSgpLHtuZXh0OmZ1bmN0aW9uKGUpe3ZhciB0PWooZSk7aWYoRSlrLmRvbmU9ZT49UDtlbHNle3ZhciBuPTFlMypSKGUpLHI9TWF0aC5hYnMobik8PXcsbz1NYXRoLmFicyhpLXQpPD15O2suZG9uZT1yJiZvfXJldHVybiBrLnZhbHVlPWsuZG9uZT9pOnQsa30sZmxpcFRhcmdldDpmdW5jdGlvbigpe3ZhciBlO189LV8sbj0oZT1baSxuXSlbMF0saT1lWzFdLEkoKX19fXcubmVlZHNJbnRlcnBvbGF0aW9uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGV8fFwic3RyaW5nXCI9PXR5cGVvZiB0fTt2YXIgYj1mdW5jdGlvbihlKXtyZXR1cm4gMH0seT1mdW5jdGlvbihlLHQsbil7dmFyIHI9dC1lO3JldHVybiAwPT09cj8xOihuLWUpL3J9LHg9ZnVuY3Rpb24oZSx0LG4pe3JldHVybi1uKmUrbip0K2V9LGs9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUqZSxvPXQqdDtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgubWF4KDAsbiooby1yKStyKSl9LFM9W2EuaGV4LGEucmdiYSxhLmhzbGFdLE89ZnVuY3Rpb24oZSl7cmV0dXJuIFMuZmluZCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudGVzdChlKX0pKX0sTT1mdW5jdGlvbihlKXtyZXR1cm5cIidcIitlK1wiJyBpcyBub3QgYW4gYW5pbWF0YWJsZSBjb2xvci4gVXNlIHRoZSBlcXVpdmFsZW50IGNvbG9yIGNvZGUgaW5zdGVhZC5cIn0sTD1mdW5jdGlvbihlLHQpe3ZhciBuPU8oZSksaT1PKHQpO28uaW52YXJpYW50KCEhbixNKGUpKSxvLmludmFyaWFudCghIWksTSh0KSksby5pbnZhcmlhbnQobi50cmFuc2Zvcm09PT1pLnRyYW5zZm9ybSxcIkJvdGggY29sb3JzIG11c3QgYmUgaGV4L1JHQkEsIE9SIGJvdGggbXVzdCBiZSBIU0xBLlwiKTt2YXIgbD1uLnBhcnNlKGUpLHM9aS5wYXJzZSh0KSxjPXIuX19hc3NpZ24oe30sbCksdT1uPT09YS5oc2xhP3g6aztyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIGMpXCJhbHBoYVwiIT09dCYmKGNbdF09dShsW3RdLHNbdF0sZSkpO3JldHVybiBjLmFscGhhPXgobC5hbHBoYSxzLmFscGhhLGUpLG4udHJhbnNmb3JtKGMpfX0sXz17eDowLHk6MCx6OjB9LFA9ZnVuY3Rpb24oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGV9LEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQoZShuKSl9fSxqPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdF09YXJndW1lbnRzW3RdO3JldHVybiBlLnJlZHVjZShFKX07ZnVuY3Rpb24gUihlLHQpe3JldHVybiBQKGUpP2Z1bmN0aW9uKG4pe3JldHVybiB4KGUsdCxuKX06YS5jb2xvci50ZXN0KGUpP0woZSx0KTpBKGUsdCl9dmFyIEk9ZnVuY3Rpb24oZSx0KXt2YXIgbj1yLl9fc3ByZWFkQXJyYXkoW10sZSksbz1uLmxlbmd0aCxhPWUubWFwKChmdW5jdGlvbihlLG4pe3JldHVybiBSKGUsdFtuXSl9KSk7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8bzt0Kyspblt0XT1hW3RdKGUpO3JldHVybiBufX0sVj1mdW5jdGlvbihlLHQpe3ZhciBuPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxlKSx0KSxvPXt9O2Zvcih2YXIgYSBpbiBuKXZvaWQgMCE9PWVbYV0mJnZvaWQgMCE9PXRbYV0mJihvW2FdPVIoZVthXSx0W2FdKSk7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBvKW5bdF09b1t0XShlKTtyZXR1cm4gbn19O2Z1bmN0aW9uIEgoZSl7Zm9yKHZhciB0PWEuY29tcGxleC5wYXJzZShlKSxuPXQubGVuZ3RoLHI9MCxvPTAsaT0wLGw9MDtsPG47bCsrKXJ8fFwibnVtYmVyXCI9PXR5cGVvZiB0W2xdP3IrKzp2b2lkIDAhPT10W2xdLmh1ZT9pKys6bysrO3JldHVybntwYXJzZWQ6dCxudW1OdW1iZXJzOnIsbnVtUkdCOm8sbnVtSFNMOml9fXZhciBBPWZ1bmN0aW9uKGUsdCl7dmFyIG49YS5jb21wbGV4LmNyZWF0ZVRyYW5zZm9ybWVyKHQpLHI9SChlKSxpPUgodCk7cmV0dXJuIG8uaW52YXJpYW50KHIubnVtSFNMPT09aS5udW1IU0wmJnIubnVtUkdCPT09aS5udW1SR0ImJnIubnVtTnVtYmVycz49aS5udW1OdW1iZXJzLFwiQ29tcGxleCB2YWx1ZXMgJ1wiK2UrXCInIGFuZCAnXCIrdCtcIicgdG9vIGRpZmZlcmVudCB0byBtaXguIEVuc3VyZSBhbGwgY29sb3JzIGFyZSBvZiB0aGUgc2FtZSB0eXBlLlwiKSxqKEkoci5wYXJzZWQsaS5wYXJzZWQpLG4pfSxUPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB4KGUsdCxuKX19O2Z1bmN0aW9uIEQoZSx0LG4pe3ZhciByPXZvaWQgMD09PW4/e306bixpPXIuY2xhbXAsbD12b2lkIDA9PT1pfHxpLGM9ci5lYXNlLHU9ci5taXhlcixkPWUubGVuZ3RoO28uaW52YXJpYW50KGQ9PT10Lmxlbmd0aCxcIkJvdGggaW5wdXQgYW5kIG91dHB1dCByYW5nZXMgbXVzdCBiZSB0aGUgc2FtZSBsZW5ndGhcIiksby5pbnZhcmlhbnQoIWN8fCFBcnJheS5pc0FycmF5KGMpfHxjLmxlbmd0aD09PWQtMSxcIkFycmF5IG9mIGVhc2luZyBmdW5jdGlvbnMgbXVzdCBiZSBvZiBsZW5ndGggYGlucHV0Lmxlbmd0aCAtIDFgLCBhcyBpdCBhcHBsaWVzIHRvIHRoZSB0cmFuc2l0aW9ucyAqKmJldHdlZW4qKiB0aGUgZGVmaW5lZCB2YWx1ZXMuXCIpLGVbMF0+ZVtkLTFdJiYoZT1bXS5jb25jYXQoZSksdD1bXS5jb25jYXQodCksZS5yZXZlcnNlKCksdC5yZXZlcnNlKCkpO3ZhciBwPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHIsbz1bXSxpPW58fChcIm51bWJlclwiPT10eXBlb2Yocj1lWzBdKT9UOlwic3RyaW5nXCI9PXR5cGVvZiByP2EuY29sb3IudGVzdChyKT9MOkE6QXJyYXkuaXNBcnJheShyKT9JOlwib2JqZWN0XCI9PXR5cGVvZiByP1Y6dm9pZCAwKSxsPWUubGVuZ3RoLTEscz0wO3M8bDtzKyspe3ZhciBjPWkoZVtzXSxlW3MrMV0pO2lmKHQpe3ZhciB1PUFycmF5LmlzQXJyYXkodCk/dFtzXTp0O2M9aih1LGMpfW8ucHVzaChjKX1yZXR1cm4gb30odCxjLHUpLGY9Mj09PWQ/ZnVuY3Rpb24oZSx0KXt2YXIgbj1lWzBdLHI9ZVsxXSxvPXRbMF07cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBvKHkobixyLGUpKX19KGUscCk6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmxlbmd0aCxyPW4tMTtyZXR1cm4gZnVuY3Rpb24obyl7dmFyIGE9MCxpPSExO2lmKG88PWVbMF0/aT0hMDpvPj1lW3JdJiYoYT1yLTEsaT0hMCksIWkpe2Zvcih2YXIgbD0xO2w8biYmIShlW2xdPm98fGw9PT1yKTtsKyspO2E9bC0xfXZhciBzPXkoZVthXSxlW2ErMV0sbyk7cmV0dXJuIHRbYV0ocyl9fShlLHApO3JldHVybiBsP2Z1bmN0aW9uKHQpe3JldHVybiBmKHMoZVswXSxlW2QtMV0sdCkpfTpmfXZhciBCPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gMS1lKDEtdCl9fSxaPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdDw9LjU/ZSgyKnQpLzI6KDItZSgyKigxLXQpKSkvMn19LCQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyh0LGUpfX0sTj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQqdCooKGUrMSkqdC1lKX19LEY9ZnVuY3Rpb24oZSl7dmFyIHQ9TihlKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuKGUqPTIpPDE/LjUqdChlKTouNSooMi1NYXRoLnBvdygyLC0xMCooZS0xKSkpfX0sVz1mdW5jdGlvbihlKXtyZXR1cm4gZX0sVT0kKDIpLHo9QihVKSxHPVooVSksSz1mdW5jdGlvbihlKXtyZXR1cm4gMS1NYXRoLnNpbihNYXRoLmFjb3MoZSkpfSxxPUIoSyksWT1aKHEpLEo9TigxLjUyNSksWD1CKEopLFE9WihKKSxlZT1GKDEuNTI1KSx0ZT1mdW5jdGlvbihlKXtpZigxPT09ZXx8MD09PWUpcmV0dXJuIGU7dmFyIHQ9ZSplO3JldHVybiBlPC4zNjM2MzYzNjM2MzYzNjM2NT83LjU2MjUqdDplPC43MjcyNzI3MjcyNzI3MjczPzkuMDc1KnQtOS45KmUrMy40OmU8Ljk/MTIuMDY2NDgxOTk0NDU5ODMzKnQtMTkuNjM1NDU3MDYzNzExOTEqZSs4Ljg5ODA2MDk0MTgyODI1NToxMC44KmUqZS0yMC41MiplKzEwLjcyfSxuZT1CKHRlKTtmdW5jdGlvbiByZShlLHQpe3JldHVybiBlLm1hcCgoZnVuY3Rpb24oKXtyZXR1cm4gdHx8R30pKS5zcGxpY2UoMCxlLmxlbmd0aC0xKX1mdW5jdGlvbiBvZShlKXt2YXIgdD1lLmZyb20sbj12b2lkIDA9PT10PzA6dCxyPWUudG8sbz12b2lkIDA9PT1yPzE6cixhPWUuZWFzZSxpPWUub2Zmc2V0LGw9ZS5kdXJhdGlvbixzPXZvaWQgMD09PWw/MzAwOmwsYz17ZG9uZTohMSx2YWx1ZTpufSx1PUFycmF5LmlzQXJyYXkobyk/bzpbbixvXSxkPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZSp0fSkpfShpJiZpLmxlbmd0aD09PXUubGVuZ3RoP2k6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGUubWFwKChmdW5jdGlvbihlLG4pe3JldHVybiAwIT09bj9uLyh0LTEpOjB9KSl9KHUpLHMpO2Z1bmN0aW9uIHAoKXtyZXR1cm4gRChkLHUse2Vhc2U6QXJyYXkuaXNBcnJheShhKT9hOnJlKHUsYSl9KX12YXIgZj1wKCk7cmV0dXJue25leHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGMudmFsdWU9ZihlKSxjLmRvbmU9ZT49cyxjfSxmbGlwVGFyZ2V0OmZ1bmN0aW9uKCl7dS5yZXZlcnNlKCksZj1wKCl9fX1mdW5jdGlvbiBhZShlKXt2YXIgdD1lLnZlbG9jaXR5LG49dm9pZCAwPT09dD8wOnQscj1lLmZyb20sbz12b2lkIDA9PT1yPzA6cixhPWUucG93ZXIsaT12b2lkIDA9PT1hPy44OmEsbD1lLnRpbWVDb25zdGFudCxzPXZvaWQgMD09PWw/MzUwOmwsYz1lLnJlc3REZWx0YSx1PXZvaWQgMD09PWM/LjU6YyxkPWUubW9kaWZ5VGFyZ2V0LHA9e2RvbmU6ITEsdmFsdWU6b30sZj1pKm4saD1vK2YsZz12b2lkIDA9PT1kP2g6ZChoKTtyZXR1cm4gZyE9PWgmJihmPWctbykse25leHQ6ZnVuY3Rpb24oZSl7dmFyIHQ9LWYqTWF0aC5leHAoLWUvcyk7cmV0dXJuIHAuZG9uZT0hKHQ+dXx8dDwtdSkscC52YWx1ZT1wLmRvbmU/ZzpnK3QscH0sZmxpcFRhcmdldDpmdW5jdGlvbigpe319fXZhciBpZT17a2V5ZnJhbWVzOm9lLHNwcmluZzp3LGRlY2F5OmFlfTtmdW5jdGlvbiBsZShlLHQsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPTApLGUtdC1ufXZhciBzZT1mdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbih0KXt2YXIgbj10LmRlbHRhO3JldHVybiBlKG4pfTtyZXR1cm57c3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5kZWZhdWx0LnVwZGF0ZSh0LCEwKX0sc3RvcDpmdW5jdGlvbigpe3JldHVybiBpLmNhbmNlbFN5bmMudXBkYXRlKHQpfX19O2Z1bmN0aW9uIGNlKGUpe3ZhciB0LG4sbyxhLGksbD1lLmZyb20scz1lLmF1dG9wbGF5LGM9dm9pZCAwPT09c3x8cyx1PWUuZHJpdmVyLGQ9dm9pZCAwPT09dT9zZTp1LHA9ZS5lbGFwc2VkLGY9dm9pZCAwPT09cD8wOnAsaD1lLnJlcGVhdCxnPXZvaWQgMD09PWg/MDpoLHY9ZS5yZXBlYXRUeXBlLEM9dm9pZCAwPT09dj9cImxvb3BcIjp2LG09ZS5yZXBlYXREZWxheSxiPXZvaWQgMD09PW0/MDptLHk9ZS5vblBsYXkseD1lLm9uU3RvcCxrPWUub25Db21wbGV0ZSxTPWUub25SZXBlYXQsTz1lLm9uVXBkYXRlLE09ci5fX3Jlc3QoZSxbXCJmcm9tXCIsXCJhdXRvcGxheVwiLFwiZHJpdmVyXCIsXCJlbGFwc2VkXCIsXCJyZXBlYXRcIixcInJlcGVhdFR5cGVcIixcInJlcGVhdERlbGF5XCIsXCJvblBsYXlcIixcIm9uU3RvcFwiLFwib25Db21wbGV0ZVwiLFwib25SZXBlYXRcIixcIm9uVXBkYXRlXCJdKSxMPU0udG8sXz0wLFA9TS5kdXJhdGlvbixFPSExLGo9ITAsUj1mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUudG8pKXJldHVybiBvZTtpZihpZVtlLnR5cGVdKXJldHVybiBpZVtlLnR5cGVdO3ZhciB0PW5ldyBTZXQoT2JqZWN0LmtleXMoZSkpO3JldHVybiB0LmhhcyhcImVhc2VcIil8fHQuaGFzKFwiZHVyYXRpb25cIikmJiF0LmhhcyhcImRhbXBpbmdSYXRpb1wiKT9vZTp0LmhhcyhcImRhbXBpbmdSYXRpb1wiKXx8dC5oYXMoXCJzdGlmZm5lc3NcIil8fHQuaGFzKFwibWFzc1wiKXx8dC5oYXMoXCJkYW1waW5nXCIpfHx0LmhhcyhcInJlc3RTcGVlZFwiKXx8dC5oYXMoXCJyZXN0RGVsdGFcIik/dzpvZX0oTSk7KG51bGw9PT0obj0odD1SKS5uZWVkc0ludGVycG9sYXRpb24pfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmNhbGwodCxsLEwpKSYmKGk9RChbMCwxMDBdLFtsLExdLHtjbGFtcDohMX0pLGw9MCxMPTEwMCk7dmFyIEk9UihyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sTSkse2Zyb206bCx0bzpMfSkpO3JldHVybiBjJiYobnVsbD09eXx8eSgpLChvPWQoKGZ1bmN0aW9uKGUpe2lmKGp8fChlPS1lKSxmKz1lLCFFKXt2YXIgdD1JLm5leHQoTWF0aC5tYXgoMCxmKSk7YT10LnZhbHVlLGkmJihhPWkoYSkpLEU9aj90LmRvbmU6Zjw9MH1udWxsPT1PfHxPKGEpLEUmJigwPT09XyYmKG51bGwhPVB8fChQPWYpKSxfPGc/ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHI/ZT49dCtuOmU8PS1ufShmLFAsYixqKSYmKF8rKyxcInJldmVyc2VcIj09PUM/Zj1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdm9pZCAwPT09biYmKG49MCksdm9pZCAwPT09ciYmKHI9ITApLHI/bGUodCstZSx0LG4pOnQtKGUtdCkrbn0oZixQLGIsaj1fJTI9PTApOihmPWxlKGYsUCxiKSxcIm1pcnJvclwiPT09QyYmSS5mbGlwVGFyZ2V0KCkpLEU9ITEsUyYmUygpKTooby5zdG9wKCksayYmaygpKSl9KSkpLnN0YXJ0KCkpLHtzdG9wOmZ1bmN0aW9uKCl7bnVsbD09eHx8eCgpLG8uc3RvcCgpfX19ZnVuY3Rpb24gdWUoZSx0KXtyZXR1cm4gdD9lKigxZTMvdCk6MH12YXIgZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIDE4MCplL01hdGguUEl9LHBlPWZ1bmN0aW9uKGUpe3JldHVybiBlfSxmZT1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9cGUpLGZ1bmN0aW9uKHQsbixyKXt2YXIgbz1uLXIsYT0tKDAtdCsxKSooMC1lKE1hdGguYWJzKG8pKSk7cmV0dXJuIG88PTA/bithOm4tYX19LGhlPWZlKCksZ2U9ZmUoTWF0aC5zcXJ0KSx2ZT1mdW5jdGlvbihlKXtyZXR1cm4gZSpNYXRoLlBJLzE4MH0sQ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaGFzT3duUHJvcGVydHkoXCJ4XCIpJiZlLmhhc093blByb3BlcnR5KFwieVwiKX0sbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIENlKGUpJiZlLmhhc093blByb3BlcnR5KFwielwiKX0sd2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTWF0aC5hYnMoZS10KX0sYmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9MiksdD1NYXRoLnBvdygxMCx0KSxNYXRoLnJvdW5kKGUqdCkvdH0seWU9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHZvaWQgMD09PXImJihyPTApLGJlKGUrbioodC1lKS9NYXRoLm1heChyLG4pKX0seGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMS0zKnQrMyplfSxrZT1mdW5jdGlvbihlLHQpe3JldHVybiAzKnQtNiplfSxTZT1mdW5jdGlvbihlKXtyZXR1cm4gMyplfSxPZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuKCh4ZSh0LG4pKmUra2UodCxuKSkqZStTZSh0KSkqZX0sTWU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiAzKnhlKHQsbikqZSplKzIqa2UodCxuKSplK1NlKHQpfSxMZT0uMTt0LmFuZ2xlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PV8pLGRlKE1hdGguYXRhbjIodC55LWUueSx0LngtZS54KSl9LHQuYW5pbWF0ZT1jZSx0LmFudGljaXBhdGU9ZWUsdC5hcHBseU9mZnNldD1mdW5jdGlvbihlLHQpe3ZhciBuPSEwO3JldHVybiB2b2lkIDA9PT10JiYodD1lLG49ITEpLGZ1bmN0aW9uKHIpe3JldHVybiBuP3ItZSt0OihlPXIsbj0hMCx0KX19LHQuYXR0cmFjdD1oZSx0LmF0dHJhY3RFeHBvPWdlLHQuYmFja0luPUosdC5iYWNrSW5PdXQ9USx0LmJhY2tPdXQ9WCx0LmJvdW5jZUluPW5lLHQuYm91bmNlSW5PdXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU8LjU/LjUqKDEtdGUoMS0yKmUpKTouNSp0ZSgyKmUtMSkrLjV9LHQuYm91bmNlT3V0PXRlLHQuY2lyY0luPUssdC5jaXJjSW5PdXQ9WSx0LmNpcmNPdXQ9cSx0LmNsYW1wPXMsdC5jcmVhdGVBbnRpY2lwYXRlPUYsdC5jcmVhdGVBdHRyYWN0b3I9ZmUsdC5jcmVhdGVCYWNrSW49Tix0LmNyZWF0ZUV4cG9Jbj0kLHQuY3ViaWNCZXppZXI9ZnVuY3Rpb24oZSx0LG4scil7aWYoZT09PXQmJm49PT1yKXJldHVybiBXO2Zvcih2YXIgbz1uZXcgRmxvYXQzMkFycmF5KDExKSxhPTA7YTwxMTsrK2Epb1thXT1PZShhKkxlLGUsbik7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiAwPT09YXx8MT09PWE/YTpPZShmdW5jdGlvbih0KXtmb3IodmFyIHI9MCxhPTE7MTAhPT1hJiZvW2FdPD10OysrYSlyKz1MZTstLWE7dmFyIGk9cisodC1vW2FdKS8ob1thKzFdLW9bYV0pKkxlLGw9TWUoaSxlLG4pO3JldHVybiBsPj0uMDAxP2Z1bmN0aW9uKGUsdCxuLHIpe2Zvcih2YXIgbz0wO288ODsrK28pe3ZhciBhPU1lKHQsbixyKTtpZigwPT09YSlyZXR1cm4gdDt0LT0oT2UodCxuLHIpLWUpL2F9cmV0dXJuIHR9KHQsaSxlLG4pOjA9PT1sP2k6ZnVuY3Rpb24oZSx0LG4scixvKXt2YXIgYSxpLGw9MDtkb3soYT1PZShpPXQrKG4tdCkvMixyLG8pLWUpPjA/bj1pOnQ9aX13aGlsZShNYXRoLmFicyhhKT4xZS03JiYrK2w8MTApO3JldHVybiBpfSh0LHIscitMZSxlLG4pfShhKSx0LHIpfX0sdC5kZWNheT1hZSx0LmRlZ3JlZXNUb1JhZGlhbnM9dmUsdC5kaXN0YW5jZT1mdW5jdGlvbihlLHQpe2lmKFAoZSkmJlAodCkpcmV0dXJuIHdlKGUsdCk7aWYoQ2UoZSkmJkNlKHQpKXt2YXIgbj13ZShlLngsdC54KSxyPXdlKGUueSx0LnkpLG89bWUoZSkmJm1lKHQpP3dlKGUueix0LnopOjA7cmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyhuLDIpK01hdGgucG93KHIsMikrTWF0aC5wb3cobywyKSl9fSx0LmVhc2VJbj1VLHQuZWFzZUluT3V0PUcsdC5lYXNlT3V0PXosdC5pbmVydGlhPWZ1bmN0aW9uKGUpe3ZhciB0LG49ZS5mcm9tLG89dm9pZCAwPT09bj8wOm4sYT1lLnZlbG9jaXR5LGw9dm9pZCAwPT09YT8wOmEscz1lLm1pbixjPWUubWF4LHU9ZS5wb3dlcixkPXZvaWQgMD09PXU/Ljg6dSxwPWUudGltZUNvbnN0YW50LGY9dm9pZCAwPT09cD83NTA6cCxoPWUuYm91bmNlU3RpZmZuZXNzLGc9dm9pZCAwPT09aD81MDA6aCx2PWUuYm91bmNlRGFtcGluZyxDPXZvaWQgMD09PXY/MTA6dixtPWUucmVzdERlbHRhLHc9dm9pZCAwPT09bT8xOm0sYj1lLm1vZGlmeVRhcmdldCx5PWUuZHJpdmVyLHg9ZS5vblVwZGF0ZSxrPWUub25Db21wbGV0ZTtmdW5jdGlvbiBTKGUpe3JldHVybiB2b2lkIDAhPT1zJiZlPHN8fHZvaWQgMCE9PWMmJmU+Y31mdW5jdGlvbiBPKGUpe3JldHVybiB2b2lkIDA9PT1zP2M6dm9pZCAwPT09Y3x8TWF0aC5hYnMocy1lKTxNYXRoLmFicyhjLWUpP3M6Y31mdW5jdGlvbiBNKGUpe251bGw9PXR8fHQuc3RvcCgpLHQ9Y2Uoci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGUpLHtkcml2ZXI6eSxvblVwZGF0ZTpmdW5jdGlvbih0KXt2YXIgbjtudWxsPT14fHx4KHQpLG51bGw9PT0obj1lLm9uVXBkYXRlKXx8dm9pZCAwPT09bnx8bi5jYWxsKGUsdCl9LG9uQ29tcGxldGU6a30pKX1mdW5jdGlvbiBMKGUpe00oci5fX2Fzc2lnbih7dHlwZTpcInNwcmluZ1wiLHN0aWZmbmVzczpnLGRhbXBpbmc6QyxyZXN0RGVsdGE6d30sZSkpfWlmKFMobykpTCh7ZnJvbTpvLHZlbG9jaXR5OmwsdG86TyhvKX0pO2Vsc2V7dmFyIF89ZCpsK287dm9pZCAwIT09YiYmKF89YihfKSk7dmFyIFAsRSxqPU8oXyksUj1qPT09cz8tMToxO00oe3R5cGU6XCJkZWNheVwiLGZyb206byx2ZWxvY2l0eTpsLHRpbWVDb25zdGFudDpmLHBvd2VyOmQscmVzdERlbHRhOncsbW9kaWZ5VGFyZ2V0OmIsb25VcGRhdGU6UyhfKT9mdW5jdGlvbihlKXtQPUUsRT1lLGw9dWUoZS1QLGkuZ2V0RnJhbWVEYXRhKCkuZGVsdGEpLCgxPT09UiYmZT5qfHwtMT09PVImJmU8aikmJkwoe2Zyb206ZSx0bzpqLHZlbG9jaXR5Omx9KX06dm9pZCAwfSl9cmV0dXJue3N0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09dD92b2lkIDA6dC5zdG9wKCl9fX0sdC5pbnRlcnBvbGF0ZT1ELHQuaXNQb2ludD1DZSx0LmlzUG9pbnQzRD1tZSx0LmtleWZyYW1lcz1vZSx0LmxpbmVhcj1XLHQubWlycm9yRWFzaW5nPVosdC5taXg9eCx0Lm1peENvbG9yPUwsdC5taXhDb21wbGV4PUEsdC5waXBlPWosdC5wb2ludEZyb21WZWN0b3I9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PXZlKHQpLHt4Om4qTWF0aC5jb3ModCkrZS54LHk6bipNYXRoLnNpbih0KStlLnl9fSx0LnByb2dyZXNzPXksdC5yYWRpYW5zVG9EZWdyZWVzPWRlLHQucmV2ZXJzZUVhc2luZz1CLHQuc21vb3RoPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPTUwKTt2YXIgdD0wLG49MDtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG89aS5nZXRGcmFtZURhdGEoKS50aW1lc3RhbXAsYT1vIT09bj9vLW46MCxsPWE/eWUodCxyLGEsZSk6dDtyZXR1cm4gbj1vLHQ9bCxsfX0sdC5zbW9vdGhGcmFtZT15ZSx0LnNuYXA9ZnVuY3Rpb24oZSl7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpcmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQvZSkqZX07dmFyIHQ9MCxuPWUubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbz1NYXRoLmFicyhlWzBdLXIpO2Zvcih0PTE7dDxuO3QrKyl7dmFyIGE9ZVt0XSxpPU1hdGguYWJzKGEtcik7aWYoMD09PWkpcmV0dXJuIGE7aWYoaT5vKXJldHVybiBlW3QtMV07aWYodD09PW4tMSlyZXR1cm4gYTtvPWl9fX0sdC5zcHJpbmc9dyx0LnN0ZXBzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PVwiZW5kXCIpLGZ1bmN0aW9uKG4pe3ZhciByPShuPVwiZW5kXCI9PT10P01hdGgubWluKG4sLjk5OSk6TWF0aC5tYXgobiwuMDAxKSkqZSxvPVwiZW5kXCI9PT10P01hdGguZmxvb3Iocik6TWF0aC5jZWlsKHIpO3JldHVybiBzKDAsMSxvL2UpfX0sdC50b0RlY2ltYWw9YmUsdC52ZWxvY2l0eVBlckZyYW1lPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUvKDFlMy90KX0sdC52ZWxvY2l0eVBlclNlY29uZD11ZSx0LndyYXA9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQtZTtyZXR1cm4oKG4tZSklcityKSVyK2V9fSwyNzAzOihlLHQsbik9Pnt2YXIgcj1uKDQxNCk7ZnVuY3Rpb24gbygpe31mdW5jdGlvbiBhKCl7fWEucmVzZXRXYXJuaW5nQ2FjaGU9byxlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLG8sYSxpKXtpZihpIT09cil7dmFyIGw9bmV3IEVycm9yKFwiQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gVXNlIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpIHRvIGNhbGwgdGhlbS4gUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlc1wiKTt0aHJvdyBsLm5hbWU9XCJJbnZhcmlhbnQgVmlvbGF0aW9uXCIsbH19ZnVuY3Rpb24gdCgpe3JldHVybiBlfWUuaXNSZXF1aXJlZD1lO3ZhciBuPXthcnJheTplLGJpZ2ludDplLGJvb2w6ZSxmdW5jOmUsbnVtYmVyOmUsb2JqZWN0OmUsc3RyaW5nOmUsc3ltYm9sOmUsYW55OmUsYXJyYXlPZjp0LGVsZW1lbnQ6ZSxlbGVtZW50VHlwZTplLGluc3RhbmNlT2Y6dCxub2RlOmUsb2JqZWN0T2Y6dCxvbmVPZjp0LG9uZU9mVHlwZTp0LHNoYXBlOnQsZXhhY3Q6dCxjaGVja1Byb3BUeXBlczphLHJlc2V0V2FybmluZ0NhY2hlOm99O3JldHVybiBuLlByb3BUeXBlcz1uLG59fSw1Njk3OihlLHQsbik9PntlLmV4cG9ydHM9bigyNzAzKSgpfSw0MTQ6ZT0+e2UuZXhwb3J0cz1cIlNFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEXCJ9LDcyOTI6KGUsdCxuKT0+e24ucih0KSxuLmQodCx7Q2FsZW5kYXI6KCk9PlhuLENlbnR1cnlWaWV3OigpPT5FdCxEZWNhZGVWaWV3OigpPT5OdCxNb250aFZpZXc6KCk9PkxuLE5hdmlnYXRpb246KCk9Pk5lLFllYXJWaWV3OigpPT50bixkZWZhdWx0OigpPT50cn0pO3ZhciByPW4oNjY4OSksbz1uLm4ociksYT1uKDU2OTcpLGk9bi5uKGEpO2Z1bmN0aW9uIGwoZSl7dmFyIHQsbixyPVwiXCI7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGV8fFwibnVtYmVyXCI9PXR5cGVvZiBlKXIrPWU7ZWxzZSBpZihcIm9iamVjdFwiPT10eXBlb2YgZSlpZihBcnJheS5pc0FycmF5KGUpKWZvcih0PTA7dDxlLmxlbmd0aDt0KyspZVt0XSYmKG49bChlW3RdKSkmJihyJiYocis9XCIgXCIpLHIrPW4pO2Vsc2UgZm9yKHQgaW4gZSllW3RdJiYociYmKHIrPVwiIFwiKSxyKz10KTtyZXR1cm4gcn1jb25zdCBzPWZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQsbj0wLHI9XCJcIjtuPGFyZ3VtZW50cy5sZW5ndGg7KShlPWFyZ3VtZW50c1tuKytdKSYmKHQ9bChlKSkmJihyJiYocis9XCIgXCIpLHIrPXQpO3JldHVybiByfTt2YXIgYz1uKDc3MyksdT1uLm4oYyk7ZnVuY3Rpb24gZChlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSl9dmFyIHA9dSgpKChmdW5jdGlvbihlKXt2YXIgdCxuPXZvaWQgMD09PWU/e306ZSxyPW4udXNlRmFsbGJhY2tMb2NhbGUsbz12b2lkIDA9PT1yfHxyLGE9bi5mYWxsYmFja0xvY2FsZSxpPXZvaWQgMD09PWE/XCJlbi1VU1wiOmEsbD1bXTtpZihcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93KXt2YXIgcz13aW5kb3cubmF2aWdhdG9yO2w9bC5jb25jYXQocy5sYW5ndWFnZXMscy5sYW5ndWFnZSxzLnVzZXJMYW5ndWFnZSxzLmJyb3dzZXJMYW5ndWFnZSxzLnN5c3RlbUxhbmd1YWdlKX1yZXR1cm4gbyYmbC5wdXNoKGkpLGZ1bmN0aW9uKGUpe3JldHVybiBlLm1hcCgoZnVuY3Rpb24oZSl7aWYoIWV8fC0xPT09ZS5pbmRleE9mKFwiLVwiKXx8ZS50b0xvd2VyQ2FzZSgpIT09ZSlyZXR1cm4gZTt2YXIgdD1lLnNwbGl0KFwiLVwiKTtyZXR1cm4gdFswXStcIi1cIit0WzFdLnRvVXBwZXJDYXNlKCl9KSl9KCh0PWwpLmZpbHRlcigoZnVuY3Rpb24oZSxuKXtyZXR1cm4gZSYmdC5pbmRleE9mKGUpPT09bn0pKSl9KSxkKSxmPXUoKSgoZnVuY3Rpb24oZSl7cmV0dXJuIHAoZSlbMF18fG51bGx9KSxkKTtjb25zdCBoPWY7ZnVuY3Rpb24gZyhlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKHIsbyl7dm9pZCAwPT09byYmKG89bik7dmFyIGE9ZShyKStvO3JldHVybiB0KGEpfX1mdW5jdGlvbiB2KGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbmV3IERhdGUoZSh0KS5nZXRUaW1lKCktMSl9fWZ1bmN0aW9uIEMoZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuW2UobiksdChuKV19fWZ1bmN0aW9uIG0oZSl7aWYoZSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIGUuZ2V0RnVsbFllYXIoKTtpZihcIm51bWJlclwiPT10eXBlb2YgZSlyZXR1cm4gZTt2YXIgdD1wYXJzZUludChlLDEwKTtpZihcInN0cmluZ1wiPT10eXBlb2YgZSYmIWlzTmFOKHQpKXJldHVybiB0O3Rocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBnZXQgeWVhciBmcm9tIGRhdGU6IFwiLmNvbmNhdChlLFwiLlwiKSl9ZnVuY3Rpb24gdyhlKXtpZihlIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gZS5nZXRNb250aCgpO3Rocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBnZXQgbW9udGggZnJvbSBkYXRlOiBcIi5jb25jYXQoZSxcIi5cIikpfWZ1bmN0aW9uIGIoZSl7aWYoZSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIGUuZ2V0RGF0ZSgpO3Rocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBnZXQgeWVhciBmcm9tIGRhdGU6IFwiLmNvbmNhdChlLFwiLlwiKSl9ZnVuY3Rpb24geShlKXt2YXIgdD1tKGUpLG49dCsoMS10KSUxMDAscj1uZXcgRGF0ZTtyZXR1cm4gci5zZXRGdWxsWWVhcihuLDAsMSksci5zZXRIb3VycygwLDAsMCwwKSxyfXZhciB4PWcobSx5LC0xMDApLGs9ZyhtLHksMTAwKSxTPXYoayksTz1nKG0sUywtMTAwKSxNPShnKG0sUywxMDApLEMoeSxTKSk7ZnVuY3Rpb24gTChlKXt2YXIgdD1tKGUpLG49dCsoMS10KSUxMCxyPW5ldyBEYXRlO3JldHVybiByLnNldEZ1bGxZZWFyKG4sMCwxKSxyLnNldEhvdXJzKDAsMCwwLDApLHJ9dmFyIF89ZyhtLEwsLTEwKSxQPWcobSxMLDEwKSxFPXYoUCksaj1nKG0sRSwtMTApLFI9KGcobSxFLDEwKSxDKEwsRSkpO2Z1bmN0aW9uIEkoZSl7dmFyIHQ9bShlKSxuPW5ldyBEYXRlO3JldHVybiBuLnNldEZ1bGxZZWFyKHQsMCwxKSxuLnNldEhvdXJzKDAsMCwwLDApLG59dmFyIFY9ZyhtLEksLTEpLEg9ZyhtLEksMSksQT12KEgpLFQ9ZyhtLEEsLTEpLEQ9KGcobSxBLDEpLEMoSSxBKSk7ZnVuY3Rpb24gQihlLHQpe3JldHVybiBmdW5jdGlvbihuLHIpe3ZvaWQgMD09PXImJihyPXQpO3ZhciBvPW0obiksYT13KG4pK3IsaT1uZXcgRGF0ZTtyZXR1cm4gaS5zZXRGdWxsWWVhcihvLGEsMSksaS5zZXRIb3VycygwLDAsMCwwKSxlKGkpfX1mdW5jdGlvbiBaKGUpe3ZhciB0PW0oZSksbj13KGUpLHI9bmV3IERhdGU7cmV0dXJuIHIuc2V0RnVsbFllYXIodCxuLDEpLHIuc2V0SG91cnMoMCwwLDAsMCkscn12YXIgJD1CKFosLTEpLE49QihaLDEpLEY9dihOKSxXPUIoRiwtMSksVT0oQihGLDEpLEMoWixGKSk7ZnVuY3Rpb24geihlLHQpe3JldHVybiBmdW5jdGlvbihuLHIpe3ZvaWQgMD09PXImJihyPXQpO3ZhciBvPW0obiksYT13KG4pLGk9YihuKStyLGw9bmV3IERhdGU7cmV0dXJuIGwuc2V0RnVsbFllYXIobyxhLGkpLGwuc2V0SG91cnMoMCwwLDAsMCksZShsKX19ZnVuY3Rpb24gRyhlKXt2YXIgdD1tKGUpLG49dyhlKSxyPWIoZSksbz1uZXcgRGF0ZTtyZXR1cm4gby5zZXRGdWxsWWVhcih0LG4sciksby5zZXRIb3VycygwLDAsMCwwKSxvfXooRywtMSk7dmFyIEsscT12KHooRywxKSksWT0oeihxLC0xKSx6KHEsMSksQyhHLHEpKTtmdW5jdGlvbiBKKGUpe3JldHVybiBiKEYoZSkpfWZ1bmN0aW9uIFgoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIG49MCxyPW5ldyBBcnJheSh0KTtuPHQ7bisrKXJbbl09ZVtuXTtyZXR1cm4gcn1mdW5jdGlvbiBRKGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX12YXIgZWUsdGU9e0FSQUJJQzpcIkFyYWJpY1wiLEhFQlJFVzpcIkhlYnJld1wiLElTT184NjAxOlwiSVNPIDg2MDFcIixVUzpcIlVTXCJ9LG5lPShRKEs9e30sdGUuVVMsW1wiZW4tQ0FcIixcImVuLVVTXCIsXCJlcy1BUlwiLFwiZXMtQk9cIixcImVzLUNMXCIsXCJlcy1DT1wiLFwiZXMtQ1JcIixcImVzLURPXCIsXCJlcy1FQ1wiLFwiZXMtR1RcIixcImVzLUhOXCIsXCJlcy1NWFwiLFwiZXMtTklcIixcImVzLVBBXCIsXCJlcy1QRVwiLFwiZXMtUFJcIixcImVzLVNWXCIsXCJlcy1WRVwiLFwicHQtQlJcIl0pLFEoSyx0ZS5BUkFCSUMsW1wiYXJcIixcImFyLUFFXCIsXCJhci1CSFwiLFwiYXItRFpcIixcImFyLUVHXCIsXCJhci1JUVwiLFwiYXItSk9cIixcImFyLUtXXCIsXCJhci1MWVwiLFwiYXItT01cIixcImFyLVFBXCIsXCJhci1TQVwiLFwiYXItU0RcIixcImFyLVNZXCIsXCJhci1ZRVwiLFwiZHZcIixcImR2LU1WXCIsXCJwc1wiLFwicHMtQVJcIl0pLFEoSyx0ZS5IRUJSRVcsW1wiaGVcIixcImhlLUlMXCJdKSxLKSxyZT0oZWU9QXJyYXkoNyksZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gWChlKX0oZWUpfHxmdW5jdGlvbihlKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbXCJAQGl0ZXJhdG9yXCJdKXJldHVybiBBcnJheS5mcm9tKGUpfShlZSl8fGZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIFgoZSx0KTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuXCJPYmplY3RcIj09PW4mJmUuY29uc3RydWN0b3ImJihuPWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PW58fFwiU2V0XCI9PT1uP0FycmF5LmZyb20oZSk6XCJBcmd1bWVudHNcIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pP1goZSx0KTp2b2lkIDB9fShlZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCkpLm1hcCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdH0pKSxvZT1uZXcgTWFwO2Z1bmN0aW9uIGFlKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXt2YXIgcj10fHxoKCk7b2UuaGFzKHIpfHxvZS5zZXQocixuZXcgTWFwKTt2YXIgbz1vZS5nZXQocik7cmV0dXJuIG8uaGFzKGUpfHxvLnNldChlLG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHIsZSkuZm9ybWF0KSxvLmdldChlKShuKX19KGUpKHQsZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IERhdGUoZSk7cmV0dXJuIG5ldyBEYXRlKHQuc2V0SG91cnMoMTIpKX0obikpfX1hZSh7ZGF5OlwibnVtZXJpY1wiLG1vbnRoOlwibnVtZXJpY1wiLHllYXI6XCJudW1lcmljXCJ9KTt2YXIgaWU9YWUoe2RheTpcIm51bWVyaWNcIn0pLGxlPWFlKHtkYXk6XCJudW1lcmljXCIsbW9udGg6XCJsb25nXCIseWVhcjpcIm51bWVyaWNcIn0pLHNlPWFlKHttb250aDpcImxvbmdcIn0pLGNlPWFlKHttb250aDpcImxvbmdcIix5ZWFyOlwibnVtZXJpY1wifSksdWU9YWUoe3dlZWtkYXk6XCJzaG9ydFwifSksZGU9YWUoe3dlZWtkYXk6XCJsb25nXCJ9KSxwZT1hZSh7eWVhcjpcIm51bWVyaWNcIn0pLGZlPXJlWzBdLGhlPXJlWzVdLGdlPXJlWzZdO2Z1bmN0aW9uIHZlKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0ZS5JU09fODYwMSxuPWUuZ2V0RGF5KCk7c3dpdGNoKHQpe2Nhc2UgdGUuSVNPXzg2MDE6cmV0dXJuKG4rNiklNztjYXNlIHRlLkFSQUJJQzpyZXR1cm4obisxKSU3O2Nhc2UgdGUuSEVCUkVXOmNhc2UgdGUuVVM6cmV0dXJuIG47ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBjYWxlbmRhciB0eXBlLlwiKX19ZnVuY3Rpb24gQ2UoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRlLklTT184NjAxLG49bShlKSxyPXcoZSksbz1lLmdldERhdGUoKS12ZShlLHQpO3JldHVybiBuZXcgRGF0ZShuLHIsbyl9ZnVuY3Rpb24gbWUoZSx0KXtzd2l0Y2goZSl7Y2FzZVwiY2VudHVyeVwiOnJldHVybiB5KHQpO2Nhc2VcImRlY2FkZVwiOnJldHVybiBMKHQpO2Nhc2VcInllYXJcIjpyZXR1cm4gSSh0KTtjYXNlXCJtb250aFwiOnJldHVybiBaKHQpO2Nhc2VcImRheVwiOnJldHVybiBHKHQpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByYW5nZVR5cGU6IFwiLmNvbmNhdChlKSl9fWZ1bmN0aW9uIHdlKGUsdCl7c3dpdGNoKGUpe2Nhc2VcImNlbnR1cnlcIjpyZXR1cm4gayh0KTtjYXNlXCJkZWNhZGVcIjpyZXR1cm4gUCh0KTtjYXNlXCJ5ZWFyXCI6cmV0dXJuIEgodCk7Y2FzZVwibW9udGhcIjpyZXR1cm4gTih0KTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmFuZ2VUeXBlOiBcIi5jb25jYXQoZSkpfX12YXIgYmU9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZVwiZGVjYWRlXCI6cmV0dXJuIF8odCwtMTAwKTtjYXNlXCJ5ZWFyXCI6cmV0dXJuIFYodCwtMTApO2Nhc2VcIm1vbnRoXCI6cmV0dXJuICQodCwtMTIpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByYW5nZVR5cGU6IFwiLmNvbmNhdChlKSl9fSx5ZT1mdW5jdGlvbihlLHQpe3N3aXRjaChlKXtjYXNlXCJkZWNhZGVcIjpyZXR1cm4gUCh0LDEwMCk7Y2FzZVwieWVhclwiOnJldHVybiBIKHQsMTApO2Nhc2VcIm1vbnRoXCI6cmV0dXJuIE4odCwxMik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHJhbmdlVHlwZTogXCIuY29uY2F0KGUpKX19O2Z1bmN0aW9uIHhlKGUsdCl7c3dpdGNoKGUpe2Nhc2VcImNlbnR1cnlcIjpyZXR1cm4gUyh0KTtjYXNlXCJkZWNhZGVcIjpyZXR1cm4gRSh0KTtjYXNlXCJ5ZWFyXCI6cmV0dXJuIEEodCk7Y2FzZVwibW9udGhcIjpyZXR1cm4gRih0KTtjYXNlXCJkYXlcIjpyZXR1cm4gcSh0KTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmFuZ2VUeXBlOiBcIi5jb25jYXQoZSkpfX12YXIga2U9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZVwiZGVjYWRlXCI6cmV0dXJuIGoodCwtMTAwKTtjYXNlXCJ5ZWFyXCI6cmV0dXJuIFQodCwtMTApO2Nhc2VcIm1vbnRoXCI6cmV0dXJuIFcodCwtMTIpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByYW5nZVR5cGU6IFwiLmNvbmNhdChlKSl9fTtmdW5jdGlvbiBTZShlLHQpe3N3aXRjaChlKXtjYXNlXCJjZW50dXJ5XCI6cmV0dXJuIE0odCk7Y2FzZVwiZGVjYWRlXCI6cmV0dXJuIFIodCk7Y2FzZVwieWVhclwiOnJldHVybiBEKHQpO2Nhc2VcIm1vbnRoXCI6cmV0dXJuIFUodCk7Y2FzZVwiZGF5XCI6cmV0dXJuIFkodCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHJhbmdlVHlwZTogXCIuY29uY2F0KGUpKX19ZnVuY3Rpb24gT2UoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnBlO3JldHVybihhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCkubWFwKChmdW5jdGlvbihuKXtyZXR1cm4gdChlLG4pfSkpLmpvaW4oXCIg4oCTIFwiKX1mdW5jdGlvbiBNZShlLHQsbil7cmV0dXJuIE9lKGUsdCxSKG4pKX1mdW5jdGlvbiBMZShlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGUuSVNPXzg2MDEsbj1lLmdldERheSgpO3N3aXRjaCh0KXtjYXNlIHRlLkFSQUJJQzpjYXNlIHRlLkhFQlJFVzpyZXR1cm4gbj09PWhlfHxuPT09Z2U7Y2FzZSB0ZS5JU09fODYwMTpjYXNlIHRlLlVTOnJldHVybiBuPT09Z2V8fG49PT1mZTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIGNhbGVuZGFyIHR5cGUuXCIpfX1mdW5jdGlvbiBfZShlKXtyZXR1cm4gX2U9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgZX0sX2UoZSl9dmFyIFBlPU9iamVjdC52YWx1ZXModGUpLEVlPVtcImNlbnR1cnlcIixcImRlY2FkZVwiLFwieWVhclwiLFwibW9udGhcIl0samU9aSgpLm9uZU9mKFBlKSxSZT1pKCkub25lT2ZUeXBlKFtpKCkuc3RyaW5nLGkoKS5hcnJheU9mKGkoKS5zdHJpbmcpXSksSWU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWVbdF07aWYoIXIpcmV0dXJuIG51bGw7aWYoIShyIGluc3RhbmNlb2YgRGF0ZSkpcmV0dXJuIG5ldyBFcnJvcihcIkludmFsaWQgcHJvcCBgXCIuY29uY2F0KHQsXCJgIG9mIHR5cGUgYFwiKS5jb25jYXQoX2UociksXCJgIHN1cHBsaWVkIHRvIGBcIikuY29uY2F0KG4sXCJgLCBleHBlY3RlZCBpbnN0YW5jZSBvZiBgRGF0ZWAuXCIpKTt2YXIgbz1lLm1heERhdGU7cmV0dXJuIG8mJnI+bz9uZXcgRXJyb3IoXCJJbnZhbGlkIHByb3AgYFwiLmNvbmNhdCh0LFwiYCBvZiB0eXBlIGBcIikuY29uY2F0KF9lKHIpLFwiYCBzdXBwbGllZCB0byBgXCIpLmNvbmNhdChuLFwiYCwgbWluRGF0ZSBjYW5ub3QgYmUgbGFyZ2VyIHRoYW4gbWF4RGF0ZS5cIikpOm51bGx9LFZlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lW3RdO2lmKCFyKXJldHVybiBudWxsO2lmKCEociBpbnN0YW5jZW9mIERhdGUpKXJldHVybiBuZXcgRXJyb3IoXCJJbnZhbGlkIHByb3AgYFwiLmNvbmNhdCh0LFwiYCBvZiB0eXBlIGBcIikuY29uY2F0KF9lKHIpLFwiYCBzdXBwbGllZCB0byBgXCIpLmNvbmNhdChuLFwiYCwgZXhwZWN0ZWQgaW5zdGFuY2Ugb2YgYERhdGVgLlwiKSk7dmFyIG89ZS5taW5EYXRlO3JldHVybiBvJiZyPG8/bmV3IEVycm9yKFwiSW52YWxpZCBwcm9wIGBcIi5jb25jYXQodCxcImAgb2YgdHlwZSBgXCIpLmNvbmNhdChfZShyKSxcImAgc3VwcGxpZWQgdG8gYFwiKS5jb25jYXQobixcImAsIG1heERhdGUgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiBtaW5EYXRlLlwiKSk6bnVsbH0sSGU9aSgpLm9uZU9mVHlwZShbaSgpLmZ1bmMsaSgpLnNoYXBlKHtjdXJyZW50OmkoKS5hbnl9KV0pLEFlPWkoKS5vbmVPZlR5cGUoW2koKS5pbnN0YW5jZU9mKERhdGUpLGkoKS5hcnJheU9mKGkoKS5pbnN0YW5jZU9mKERhdGUpKV0pLFRlPWkoKS5hcnJheU9mKGkoKS5vbmVPZihFZSkpLERlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lW3RdLG89ZS52aWV3c3x8RWU7cmV0dXJuIHZvaWQgMCE9PXImJi0xPT09by5pbmRleE9mKHIpP25ldyBFcnJvcihcIkludmFsaWQgcHJvcCBgXCIuY29uY2F0KHQsXCJgIG9mIHZhbHVlIGBcIikuY29uY2F0KHIsXCJgIHN1cHBsaWVkIHRvIGBcIikuY29uY2F0KG4sXCJgLCBleHBlY3RlZCBvbmUgb2YgW1wiKS5jb25jYXQoby5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybidcIicuY29uY2F0KGUsJ1wiJyl9KSkuam9pbihcIiwgXCIpLFwiXS5cIikpOm51bGx9O0RlLmlzUmVxdWlyZWQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWVbdF07cmV0dXJuIHI/RGUoZSx0LG4pOm5ldyBFcnJvcihcIlRoZSBwcm9wIGBcIi5jb25jYXQodCxcImAgaXMgbWFya2VkIGFzIHJlcXVpcmVkIGluIGBcIikuY29uY2F0KG4sXCJgLCBidXQgaXRzIHZhbHVlIGlzIGBcIikuY29uY2F0KHIsXCJgLlwiKSl9O3ZhciBCZT17YWN0aXZlU3RhcnREYXRlOmkoKS5pbnN0YW5jZU9mKERhdGUpLmlzUmVxdWlyZWQsaG92ZXI6aSgpLmluc3RhbmNlT2YoRGF0ZSksbG9jYWxlOmkoKS5zdHJpbmcsbWF4RGF0ZTpWZSxtaW5EYXRlOkllLG9uQ2xpY2s6aSgpLmZ1bmMsb25Nb3VzZU92ZXI6aSgpLmZ1bmMsdGlsZUNsYXNzTmFtZTppKCkub25lT2ZUeXBlKFtpKCkuZnVuYyxSZV0pLHRpbGVDb250ZW50OmkoKS5vbmVPZlR5cGUoW2koKS5mdW5jLGkoKS5ub2RlXSksdmFsdWU6QWUsdmFsdWVUeXBlOmkoKS5zdHJpbmd9LFplPXthY3RpdmVTdGFydERhdGU6aSgpLmluc3RhbmNlT2YoRGF0ZSkuaXNSZXF1aXJlZCxjbGFzc2VzOmkoKS5hcnJheU9mKGkoKS5zdHJpbmcpLmlzUmVxdWlyZWQsZGF0ZTppKCkuaW5zdGFuY2VPZihEYXRlKS5pc1JlcXVpcmVkLGxvY2FsZTppKCkuc3RyaW5nLG1heERhdGU6VmUsbWluRGF0ZTpJZSxvbkNsaWNrOmkoKS5mdW5jLG9uTW91c2VPdmVyOmkoKS5mdW5jLHN0eWxlOmkoKS5vYmplY3RPZihpKCkub25lT2ZUeXBlKFtpKCkuc3RyaW5nLGkoKS5udW1iZXJdKSksdGlsZUNsYXNzTmFtZTppKCkub25lT2ZUeXBlKFtpKCkuZnVuYyxSZV0pLHRpbGVDb250ZW50OmkoKS5vbmVPZlR5cGUoW2koKS5mdW5jLGkoKS5ub2RlXSksdGlsZURpc2FibGVkOmkoKS5mdW5jfSwkZT1cInJlYWN0LWNhbGVuZGFyX19uYXZpZ2F0aW9uXCI7ZnVuY3Rpb24gTmUoZSl7dmFyIHQsbj1lLmFjdGl2ZVN0YXJ0RGF0ZSxyPWUuZHJpbGxVcCxhPWUuZm9ybWF0TW9udGhZZWFyLGk9dm9pZCAwPT09YT9jZTphLGw9ZS5mb3JtYXRZZWFyLHM9dm9pZCAwPT09bD9wZTpsLGM9ZS5sb2NhbGUsdT1lLm1heERhdGUsZD1lLm1pbkRhdGUscD1lLm5hdmlnYXRpb25BcmlhTGFiZWwsaD12b2lkIDA9PT1wP1wiXCI6cCxnPWUubmF2aWdhdGlvbkFyaWFMaXZlLHY9ZS5uYXZpZ2F0aW9uTGFiZWwsQz1lLm5leHQyQXJpYUxhYmVsLG09dm9pZCAwPT09Qz9cIlwiOkMsdz1lLm5leHQyTGFiZWwsYj12b2lkIDA9PT13P1wiwrtcIjp3LHk9ZS5uZXh0QXJpYUxhYmVsLGs9dm9pZCAwPT09eT9cIlwiOnksUz1lLm5leHRMYWJlbCxMPXZvaWQgMD09PVM/XCLigLpcIjpTLFA9ZS5wcmV2MkFyaWFMYWJlbCxFPXZvaWQgMD09PVA/XCJcIjpQLFI9ZS5wcmV2MkxhYmVsLEk9dm9pZCAwPT09Uj9cIsKrXCI6UixIPWUucHJldkFyaWFMYWJlbCxBPXZvaWQgMD09PUg/XCJcIjpILEQ9ZS5wcmV2TGFiZWwsQj12b2lkIDA9PT1EP1wi4oC5XCI6RCxaPWUuc2V0QWN0aXZlU3RhcnREYXRlLE49ZS5zaG93RG91YmxlVmlldyxGPWUudmlldyxVPWUudmlld3MuaW5kZXhPZihGKT4wLHo9XCJjZW50dXJ5XCIhPT1GLEc9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZVwiY2VudHVyeVwiOnJldHVybiB4KHQpO2Nhc2VcImRlY2FkZVwiOnJldHVybiBfKHQpO2Nhc2VcInllYXJcIjpyZXR1cm4gVih0KTtjYXNlXCJtb250aFwiOnJldHVybiAkKHQpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByYW5nZVR5cGU6IFwiLmNvbmNhdChlKSl9fShGLG4pLEs9eiYmYmUoRixuKSxxPXdlKEYsbiksWT16JiZ5ZShGLG4pLEo9ZnVuY3Rpb24oKXtpZihHLmdldEZ1bGxZZWFyKCk8MClyZXR1cm4hMDt2YXIgZT1mdW5jdGlvbihlLHQpe3N3aXRjaChlKXtjYXNlXCJjZW50dXJ5XCI6cmV0dXJuIE8odCk7Y2FzZVwiZGVjYWRlXCI6cmV0dXJuIGoodCk7Y2FzZVwieWVhclwiOnJldHVybiBUKHQpO2Nhc2VcIm1vbnRoXCI6cmV0dXJuIFcodCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHJhbmdlVHlwZTogXCIuY29uY2F0KGUpKX19KEYsbik7cmV0dXJuIGQmJmQ+PWV9KCksWD16JiZmdW5jdGlvbigpe2lmKEsuZ2V0RnVsbFllYXIoKTwwKXJldHVybiEwO3ZhciBlPWtlKEYsbik7cmV0dXJuIGQmJmQ+PWV9KCksUT11JiZ1PHEsZWU9eiYmdSYmdTxZO2Z1bmN0aW9uIHRlKGUpe3ZhciB0PWZ1bmN0aW9uKCl7c3dpdGNoKEYpe2Nhc2VcImNlbnR1cnlcIjpyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiBPZShlLHQsTShuKSl9KGMscyxlKTtjYXNlXCJkZWNhZGVcIjpyZXR1cm4gTWUoYyxzLGUpO2Nhc2VcInllYXJcIjpyZXR1cm4gcyhjLGUpO2Nhc2VcIm1vbnRoXCI6cmV0dXJuIGkoYyxlKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgdmlldzogXCIuY29uY2F0KEYsXCIuXCIpKX19KCk7cmV0dXJuIHY/dih7ZGF0ZTplLGxhYmVsOnQsbG9jYWxlOmN8fGYoKSx2aWV3OkZ9KTp0fXJldHVybiBvKCkuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6JGV9LG51bGwhPT1JJiZ6JiZvKCkuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLHtcImFyaWEtbGFiZWxcIjpFLGNsYXNzTmFtZTpcIlwiLmNvbmNhdCgkZSxcIl9fYXJyb3cgXCIpLmNvbmNhdCgkZSxcIl9fcHJldjItYnV0dG9uXCIpLGRpc2FibGVkOlgsb25DbGljazpmdW5jdGlvbigpe1ooSyxcInByZXYyXCIpfSx0eXBlOlwiYnV0dG9uXCJ9LEkpLG51bGwhPT1CJiZvKCkuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLHtcImFyaWEtbGFiZWxcIjpBLGNsYXNzTmFtZTpcIlwiLmNvbmNhdCgkZSxcIl9fYXJyb3cgXCIpLmNvbmNhdCgkZSxcIl9fcHJldi1idXR0b25cIiksZGlzYWJsZWQ6SixvbkNsaWNrOmZ1bmN0aW9uKCl7WihHLFwicHJldlwiKX0sdHlwZTpcImJ1dHRvblwifSxCKSwodD1cIlwiLmNvbmNhdCgkZSxcIl9fbGFiZWxcIiksbygpLmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIix7XCJhcmlhLWxhYmVsXCI6aCxcImFyaWEtbGl2ZVwiOmcsY2xhc3NOYW1lOnQsZGlzYWJsZWQ6IVUsb25DbGljazpyLHN0eWxlOntmbGV4R3JvdzoxfSx0eXBlOlwiYnV0dG9uXCJ9LG8oKS5jcmVhdGVFbGVtZW50KFwic3BhblwiLHtjbGFzc05hbWU6XCJcIi5jb25jYXQodCxcIl9fbGFiZWxUZXh0IFwiKS5jb25jYXQodCxcIl9fbGFiZWxUZXh0LS1mcm9tXCIpfSx0ZShuKSksTiYmbygpLmNyZWF0ZUVsZW1lbnQobygpLkZyYWdtZW50LG51bGwsbygpLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIse2NsYXNzTmFtZTpcIlwiLmNvbmNhdCh0LFwiX19kaXZpZGVyXCIpfSxcIiDigJMgXCIpLG8oKS5jcmVhdGVFbGVtZW50KFwic3BhblwiLHtjbGFzc05hbWU6XCJcIi5jb25jYXQodCxcIl9fbGFiZWxUZXh0IFwiKS5jb25jYXQodCxcIl9fbGFiZWxUZXh0LS10b1wiKX0sdGUocSkpKSkpLG51bGwhPT1MJiZvKCkuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLHtcImFyaWEtbGFiZWxcIjprLGNsYXNzTmFtZTpcIlwiLmNvbmNhdCgkZSxcIl9fYXJyb3cgXCIpLmNvbmNhdCgkZSxcIl9fbmV4dC1idXR0b25cIiksZGlzYWJsZWQ6USxvbkNsaWNrOmZ1bmN0aW9uKCl7WihxLFwibmV4dFwiKX0sdHlwZTpcImJ1dHRvblwifSxMKSxudWxsIT09YiYmeiYmbygpLmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIix7XCJhcmlhLWxhYmVsXCI6bSxjbGFzc05hbWU6XCJcIi5jb25jYXQoJGUsXCJfX2Fycm93IFwiKS5jb25jYXQoJGUsXCJfX25leHQyLWJ1dHRvblwiKSxkaXNhYmxlZDplZSxvbkNsaWNrOmZ1bmN0aW9uKCl7WihZLFwibmV4dDJcIil9LHR5cGU6XCJidXR0b25cIn0sYikpfU5lLnByb3BUeXBlcz17YWN0aXZlU3RhcnREYXRlOmkoKS5pbnN0YW5jZU9mKERhdGUpLmlzUmVxdWlyZWQsZHJpbGxVcDppKCkuZnVuYy5pc1JlcXVpcmVkLGZvcm1hdE1vbnRoWWVhcjppKCkuZnVuYyxmb3JtYXRZZWFyOmkoKS5mdW5jLGxvY2FsZTppKCkuc3RyaW5nLG1heERhdGU6aSgpLmluc3RhbmNlT2YoRGF0ZSksbWluRGF0ZTppKCkuaW5zdGFuY2VPZihEYXRlKSxuYXZpZ2F0aW9uQXJpYUxhYmVsOmkoKS5zdHJpbmcsbmF2aWdhdGlvbkFyaWFMaXZlOmkoKS5zdHJpbmcsbmF2aWdhdGlvbkxhYmVsOmkoKS5mdW5jLG5leHQyQXJpYUxhYmVsOmkoKS5zdHJpbmcsbmV4dDJMYWJlbDppKCkubm9kZSxuZXh0QXJpYUxhYmVsOmkoKS5zdHJpbmcsbmV4dExhYmVsOmkoKS5ub2RlLHByZXYyQXJpYUxhYmVsOmkoKS5zdHJpbmcscHJldjJMYWJlbDppKCkubm9kZSxwcmV2QXJpYUxhYmVsOmkoKS5zdHJpbmcscHJldkxhYmVsOmkoKS5ub2RlLHNldEFjdGl2ZVN0YXJ0RGF0ZTppKCkuZnVuYy5pc1JlcXVpcmVkLHNob3dEb3VibGVWaWV3OmkoKS5ib29sLHZpZXc6RGUuaXNSZXF1aXJlZCx2aWV3czpUZS5pc1JlcXVpcmVkfTt2YXIgRmU9W1wiY2hpbGRyZW5cIixcImNsYXNzTmFtZVwiLFwiZGlyZWN0aW9uXCIsXCJjb3VudFwiLFwib2Zmc2V0XCIsXCJzdHlsZVwiLFwid3JhcFwiXTtmdW5jdGlvbiBXZSgpe3JldHVybiBXZT1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LFdlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBVZShlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gemUoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fTt0JTI/VWUoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXtHZShlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6VWUoT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSl9cmV0dXJuIGV9ZnVuY3Rpb24gR2UoZSx0LG4pe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIEtlKGUpe3JldHVyblwiXCIuY29uY2F0KGUsXCIlXCIpfWZ1bmN0aW9uIHFlKGUpe3ZhciB0PWUuY2hpbGRyZW4sbj1lLmNsYXNzTmFtZSxyPWUuZGlyZWN0aW9uLGE9ZS5jb3VudCxpPWUub2Zmc2V0LGw9ZS5zdHlsZSxzPWUud3JhcCxjPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLHQuaW5kZXhPZihuKT49MHx8KG9bbl09ZVtuXSk7cmV0dXJuIG99KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYob1tuXT1lW25dKX1yZXR1cm4gb30oZSxGZSk7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsV2Uoe2NsYXNzTmFtZTpuLHN0eWxlOnplKHtkaXNwbGF5OlwiZmxleFwiLGZsZXhEaXJlY3Rpb246cixmbGV4V3JhcDpzP1wid3JhcFwiOlwibm8td3JhcFwifSxsKX0sYyksbygpLkNoaWxkcmVuLm1hcCh0LChmdW5jdGlvbihlLHQpe3JldHVybiBvKCkuY2xvbmVFbGVtZW50KGUsemUoemUoe30sZS5wcm9wcykse30se3N0eWxlOntmbGV4QmFzaXM6S2UoMTAwL2EpLGZsZXhTaHJpbms6MCxmbGV4R3JvdzowLG92ZXJmbG93OlwiaGlkZGVuXCIsbWFyZ2luTGVmdDppJiYwPT09dD9LZSgxMDAqaS9hKTpudWxsfX0pKX0pKSl9ZnVuY3Rpb24gWWUoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIEplKGUpfShlKXx8ZnVuY3Rpb24oZSl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lW1wiQEBpdGVyYXRvclwiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oZSl8fGZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIEplKGUsdCk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVyblwiT2JqZWN0XCI9PT1uJiZlLmNvbnN0cnVjdG9yJiYobj1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT1ufHxcIlNldFwiPT09bj9BcnJheS5mcm9tKGUpOlwiQXJndW1lbnRzXCI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT9KZShlLHQpOnZvaWQgMH19KGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfWZ1bmN0aW9uIEplKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciBuPTAscj1uZXcgQXJyYXkodCk7bjx0O24rKylyW25dPWVbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gWGUoZSx0KXtyZXR1cm4gdFswXTw9ZSYmdFsxXT49ZX1mdW5jdGlvbiBRZShlLHQpe3JldHVybiBYZShlWzBdLHQpfHxYZShlWzFdLHQpfWZ1bmN0aW9uIGV0KGUsdCxuKXt2YXIgcj1bXTtpZihRZSh0LGUpKXtyLnB1c2gobik7dmFyIG89WGUoZVswXSx0KSxhPVhlKGVbMV0sdCk7byYmci5wdXNoKFwiXCIuY29uY2F0KG4sXCJTdGFydFwiKSksYSYmci5wdXNoKFwiXCIuY29uY2F0KG4sXCJFbmRcIikpLG8mJmEmJnIucHVzaChcIlwiLmNvbmNhdChuLFwiQm90aEVuZHNcIikpfXJldHVybiByfWZ1bmN0aW9uIHR0KCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9ZS52YWx1ZSxuPWUudmFsdWVUeXBlLHI9ZS5kYXRlLG89ZS5kYXRlVHlwZSxhPWUuaG92ZXIsaT1cInJlYWN0LWNhbGVuZGFyX190aWxlXCIsbD1baV07aWYoIXIpcmV0dXJuIGw7aWYoIUFycmF5LmlzQXJyYXkocikmJiFvKXRocm93IG5ldyBFcnJvcihcImdldFRpbGVDbGFzc2VzKCk6IFVuYWJsZSB0byBnZXQgdGlsZSBhY3Rpdml0eSBjbGFzc2VzIGJlY2F1c2Ugb25lIG9yIG1vcmUgcmVxdWlyZWQgYXJndW1lbnRzIHdlcmUgbm90IHBhc3NlZC5cIik7dmFyIHM9bmV3IERhdGUsYz1BcnJheS5pc0FycmF5KHIpP3I6U2UobyxyKTtpZihYZShzLGMpJiZsLnB1c2goXCJcIi5jb25jYXQoaSxcIi0tbm93XCIpKSwhdClyZXR1cm4gbDtpZighQXJyYXkuaXNBcnJheSh0KSYmIW4pdGhyb3cgbmV3IEVycm9yKFwiZ2V0VGlsZUNsYXNzZXMoKTogVW5hYmxlIHRvIGdldCB0aWxlIGFjdGl2aXR5IGNsYXNzZXMgYmVjYXVzZSBvbmUgb3IgbW9yZSByZXF1aXJlZCBhcmd1bWVudHMgd2VyZSBub3QgcGFzc2VkLlwiKTt2YXIgdSxkLHA9QXJyYXkuaXNBcnJheSh0KT90OlNlKG4sdCk7ZD1jLCh1PXApWzBdPD1kWzBdJiZ1WzFdPj1kWzFdP2wucHVzaChcIlwiLmNvbmNhdChpLFwiLS1hY3RpdmVcIikpOlFlKHAsYykmJmwucHVzaChcIlwiLmNvbmNhdChpLFwiLS1oYXNBY3RpdmVcIikpO3ZhciBmPWV0KHAsYyxcIlwiLmNvbmNhdChpLFwiLS1yYW5nZVwiKSk7bC5wdXNoLmFwcGx5KGwsWWUoZikpO3ZhciBoPVtdLmNvbmNhdCh0KTtpZihhJiYxPT09aC5sZW5ndGgpe3ZhciBnPWV0KGE+cFswXT9bcFswXSxhXTpbYSxwWzBdXSxjLFwiXCIuY29uY2F0KGksXCItLWhvdmVyXCIpKTtsLnB1c2guYXBwbHkobCxZZShnKSl9cmV0dXJuIGx9cWUucHJvcFR5cGVzPXtjaGlsZHJlbjppKCkubm9kZSxjbGFzc05hbWU6aSgpLnN0cmluZyxjb3VudDppKCkubnVtYmVyLmlzUmVxdWlyZWQsZGlyZWN0aW9uOmkoKS5zdHJpbmcsb2Zmc2V0OmkoKS5udW1iZXIsc3R5bGU6aSgpLm9iamVjdE9mKGkoKS5vbmVPZlR5cGUoW2koKS5zdHJpbmcsaSgpLm51bWJlcl0pKSx3cmFwOmkoKS5ib29sfTt2YXIgbnQ9W1wiY2xhc3NOYW1lXCIsXCJjb3VudFwiLFwiZGF0ZVRyYW5zZm9ybVwiLFwiZGF0ZVR5cGVcIixcImVuZFwiLFwiaG92ZXJcIixcIm9mZnNldFwiLFwic3RhcnRcIixcInN0ZXBcIixcInRpbGVcIixcInZhbHVlXCIsXCJ2YWx1ZVR5cGVcIl07ZnVuY3Rpb24gcnQoZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIG90KGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP3J0KE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7YXQoZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOnJ0KE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfWZ1bmN0aW9uIGF0KGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBpdCgpe3JldHVybiBpdD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LGl0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBsdChlKXtmb3IodmFyIHQ9ZS5jbGFzc05hbWUsbj1lLmNvdW50LHI9dm9pZCAwPT09bj8zOm4sYT1lLmRhdGVUcmFuc2Zvcm0saT1lLmRhdGVUeXBlLGw9ZS5lbmQscz1lLmhvdmVyLGM9ZS5vZmZzZXQsdT1lLnN0YXJ0LGQ9ZS5zdGVwLHA9dm9pZCAwPT09ZD8xOmQsZj1lLnRpbGUsaD1lLnZhbHVlLGc9ZS52YWx1ZVR5cGUsdj1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik+PTB8fChvW25dPWVbbl0pO3JldHVybiBvfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sdC5pbmRleE9mKG4pPj0wfHxPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxuKSYmKG9bbl09ZVtuXSl9cmV0dXJuIG99KGUsbnQpLEM9W10sbT11O208PWw7bSs9cCl7dmFyIHc9YShtKTtDLnB1c2gobygpLmNyZWF0ZUVsZW1lbnQoZixpdCh7a2V5OncuZ2V0VGltZSgpLGNsYXNzZXM6dHQoe3ZhbHVlOmgsdmFsdWVUeXBlOmcsZGF0ZTp3LGRhdGVUeXBlOmksaG92ZXI6c30pLGRhdGU6dyxwb2ludDptfSx2KSkpfXJldHVybiBvKCkuY3JlYXRlRWxlbWVudChxZSx7Y2xhc3NOYW1lOnQsY291bnQ6cixvZmZzZXQ6Yyx3cmFwOiEwfSxDKX1mdW5jdGlvbiBzdChlKXtyZXR1cm4gc3Q9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgZX0sc3QoZSl9ZnVuY3Rpb24gY3QoZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIHV0KGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP2N0KE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7Z3QoZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOmN0KE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfWZ1bmN0aW9uIGR0KGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1mdW5jdGlvbiBwdChlLHQpe3JldHVybiBwdD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LHB0KGUsdCl9ZnVuY3Rpb24gZnQoZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIGV9ZnVuY3Rpb24gaHQoZSl7cmV0dXJuIGh0PU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxodChlKX1mdW5jdGlvbiBndChlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gdnQoZSx0KXtyZXR1cm4gZSYmIXR8fCFlJiZ0fHxlJiZ0JiZlLmdldFRpbWUoKSE9PXQuZ2V0VGltZSgpfWZ1bmN0aW9uIEN0KGUsdCl7dmFyIG49ZS5hY3RpdmVTdGFydERhdGUscj1lLmRhdGUsbz1lLnZpZXc7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdD90KHthY3RpdmVTdGFydERhdGU6bixkYXRlOnIsdmlldzpvfSk6dH1sdC5wcm9wVHlwZXM9b3Qob3Qoe30sQmUpLHt9LHthY3RpdmVTdGFydERhdGU6aSgpLmluc3RhbmNlT2YoRGF0ZSksY291bnQ6aSgpLm51bWJlcixkYXRlVHJhbnNmb3JtOmkoKS5mdW5jLmlzUmVxdWlyZWQsZGF0ZVR5cGU6aSgpLnN0cmluZyxvZmZzZXQ6aSgpLm51bWJlcixzdGVwOmkoKS5udW1iZXIsdGlsZTppKCkuZnVuYy5pc1JlcXVpcmVkfSk7dmFyIG10PWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJwcm90b3R5cGVcIix7d3JpdGFibGU6ITF9KSx0JiZwdChlLHQpfShjLGUpO3ZhciB0LG4scixhLGksbD0oYT1jLGk9ZnVuY3Rpb24oKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLHQ9aHQoYSk7aWYoaSl7dmFyIG49aHQodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxuKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKFwib2JqZWN0XCI9PT1zdCh0KXx8XCJmdW5jdGlvblwiPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7cmV0dXJuIGZ0KGUpfSh0aGlzLGUpfSk7ZnVuY3Rpb24gYygpe3ZhciBlOyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9KHRoaXMsYyk7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspbltyXT1hcmd1bWVudHNbcl07cmV0dXJuIGd0KGZ0KGU9bC5jYWxsLmFwcGx5KGwsW3RoaXNdLmNvbmNhdChuKSkpLFwic3RhdGVcIix7fSksZX1yZXR1cm4gdD1jLHI9W3trZXk6XCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPWUuYWN0aXZlU3RhcnREYXRlLHI9ZS50aWxlQ2xhc3NOYW1lLG89ZS50aWxlQ29udGVudCxhPXt9O3JldHVybihyIT09dC50aWxlQ2xhc3NOYW1lUHJvcHN8fHZ0KG4sdC5hY3RpdmVTdGFydERhdGVQcm9wcykpJiYoYS50aWxlQ2xhc3NOYW1lPUN0KGUsciksYS50aWxlQ2xhc3NOYW1lUHJvcHM9ciksKG8hPT10LnRpbGVDb250ZW50UHJvcHN8fHZ0KG4sdC5hY3RpdmVTdGFydERhdGVQcm9wcykpJiYoYS50aWxlQ29udGVudD1DdChlLG8pLGEudGlsZUNvbnRlbnRQcm9wcz1vKSxhLmFjdGl2ZVN0YXJ0RGF0ZVByb3BzPW4sYX19XSwobj1be2tleTpcInJlbmRlclwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuYWN0aXZlU3RhcnREYXRlLG49ZS5jaGlsZHJlbixyPWUuY2xhc3NlcyxhPWUuZGF0ZSxpPWUuZm9ybWF0QWJicixsPWUubG9jYWxlLGM9ZS5tYXhEYXRlLHU9ZS5tYXhEYXRlVHJhbnNmb3JtLGQ9ZS5taW5EYXRlLHA9ZS5taW5EYXRlVHJhbnNmb3JtLGY9ZS5vbkNsaWNrLGg9ZS5vbk1vdXNlT3ZlcixnPWUuc3R5bGUsdj1lLnRpbGVEaXNhYmxlZCxDPWUudmlldyxtPXRoaXMuc3RhdGUsdz1tLnRpbGVDbGFzc05hbWUsYj1tLnRpbGVDb250ZW50O3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLHtjbGFzc05hbWU6cyhyLHcpLGRpc2FibGVkOmQmJnAoZCk+YXx8YyYmdShjKTxhfHx2JiZ2KHthY3RpdmVTdGFydERhdGU6dCxkYXRlOmEsdmlldzpDfSksb25DbGljazpmJiZmdW5jdGlvbihlKXtyZXR1cm4gZihhLGUpfSxvbkZvY3VzOmgmJmZ1bmN0aW9uKCl7cmV0dXJuIGgoYSl9LG9uTW91c2VPdmVyOmgmJmZ1bmN0aW9uKCl7cmV0dXJuIGgoYSl9LHN0eWxlOmcsdHlwZTpcImJ1dHRvblwifSxpP28oKS5jcmVhdGVFbGVtZW50KFwiYWJiclwiLHtcImFyaWEtbGFiZWxcIjppKGwsYSl9LG4pOm4sYil9fV0pJiZkdCh0LnByb3RvdHlwZSxuKSxyJiZkdCh0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwicHJvdG90eXBlXCIse3dyaXRhYmxlOiExfSksY30oci5Db21wb25lbnQpO210LnByb3BUeXBlcz11dCh1dCh7fSxaZSkse30se2NoaWxkcmVuOmkoKS5ub2RlLmlzUmVxdWlyZWQsZm9ybWF0QWJicjppKCkuZnVuYyxtYXhEYXRlVHJhbnNmb3JtOmkoKS5mdW5jLmlzUmVxdWlyZWQsbWluRGF0ZVRyYW5zZm9ybTppKCkuZnVuYy5pc1JlcXVpcmVkfSk7dmFyIHd0PVtcImNsYXNzZXNcIixcImZvcm1hdFllYXJcIl07ZnVuY3Rpb24gYnQoZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIHl0KGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP2J0KE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7eHQoZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOmJ0KE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfWZ1bmN0aW9uIHh0KGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBrdCgpe3JldHVybiBrdD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LGt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgU3Q9XCJyZWFjdC1jYWxlbmRhcl9fY2VudHVyeS12aWV3X19kZWNhZGVzX19kZWNhZGVcIjtmdW5jdGlvbiBPdChlKXt2YXIgdD1lLmNsYXNzZXMsbj1lLmZvcm1hdFllYXIscj12b2lkIDA9PT1uP3BlOm4sYT1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik+PTB8fChvW25dPWVbbl0pO3JldHVybiBvfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sdC5pbmRleE9mKG4pPj0wfHxPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxuKSYmKG9bbl09ZVtuXSl9cmV0dXJuIG99KGUsd3QpLGk9YS5kYXRlLGw9YS5sb2NhbGU7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KG10LGt0KHt9LGEse2NsYXNzZXM6W10uY29uY2F0KHQsU3QpLG1heERhdGVUcmFuc2Zvcm06RSxtaW5EYXRlVHJhbnNmb3JtOkwsdmlldzpcImNlbnR1cnlcIn0pLE1lKGwscixpKSl9ZnVuY3Rpb24gTXQoZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIEx0KGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBfdCgpe3JldHVybiBfdD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LF90LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBQdChlKXt2YXIgdD1tKHkoZS5hY3RpdmVTdGFydERhdGUpKSxuPXQrOTk7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KGx0LF90KHt9LGUse2NsYXNzTmFtZTpcInJlYWN0LWNhbGVuZGFyX19jZW50dXJ5LXZpZXdfX2RlY2FkZXNcIixkYXRlVHJhbnNmb3JtOkwsZGF0ZVR5cGU6XCJkZWNhZGVcIixlbmQ6bixzdGFydDp0LHN0ZXA6MTAsdGlsZTpPdH0pKX1mdW5jdGlvbiBFdChlKXtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVhY3QtY2FsZW5kYXJfX2NlbnR1cnktdmlld1wifSxvKCkuY3JlYXRlRWxlbWVudChQdCxlKSl9T3QucHJvcFR5cGVzPXl0KHl0KHt9LFplKSx7fSx7Zm9ybWF0WWVhcjppKCkuZnVuY30pLFB0LnByb3BUeXBlcz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9NdChPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe0x0KGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpNdChPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX0oe30sQmUpO3ZhciBqdD1bXCJjbGFzc2VzXCIsXCJmb3JtYXRZZWFyXCJdO2Z1bmN0aW9uIFJ0KGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBJdChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9SdChPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe1Z0KGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpSdChPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX1mdW5jdGlvbiBWdChlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gSHQoKXtyZXR1cm4gSHQ9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxIdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIEF0PVwicmVhY3QtY2FsZW5kYXJfX2RlY2FkZS12aWV3X195ZWFyc19feWVhclwiO2Z1bmN0aW9uIFR0KGUpe3ZhciB0PWUuY2xhc3NlcyxuPWUuZm9ybWF0WWVhcixyPXZvaWQgMD09PW4/cGU6bixhPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLHQuaW5kZXhPZihuKT49MHx8KG9bbl09ZVtuXSk7cmV0dXJuIG99KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYob1tuXT1lW25dKX1yZXR1cm4gb30oZSxqdCksaT1hLmRhdGUsbD1hLmxvY2FsZTtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQobXQsSHQoe30sYSx7Y2xhc3NlczpbXS5jb25jYXQodCxBdCksbWF4RGF0ZVRyYW5zZm9ybTpBLG1pbkRhdGVUcmFuc2Zvcm06SSx2aWV3OlwiZGVjYWRlXCJ9KSxyKGwsaSkpfWZ1bmN0aW9uIER0KGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBCdChlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gWnQoKXtyZXR1cm4gWnQ9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxadC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gJHQoZSl7dmFyIHQ9bShMKGUuYWN0aXZlU3RhcnREYXRlKSksbj10Kzk7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KGx0LFp0KHt9LGUse2NsYXNzTmFtZTpcInJlYWN0LWNhbGVuZGFyX19kZWNhZGUtdmlld19feWVhcnNcIixkYXRlVHJhbnNmb3JtOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBEYXRlO3JldHVybiB0LnNldEZ1bGxZZWFyKGUsMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApLHR9LGRhdGVUeXBlOlwieWVhclwiLGVuZDpuLHN0YXJ0OnQsdGlsZTpUdH0pKX1mdW5jdGlvbiBOdChlKXtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVhY3QtY2FsZW5kYXJfX2RlY2FkZS12aWV3XCJ9LG8oKS5jcmVhdGVFbGVtZW50KCR0LGUpKX1UdC5wcm9wVHlwZXM9SXQoSXQoe30sWmUpLHt9LHtmb3JtYXRZZWFyOmkoKS5mdW5jfSksJHQucHJvcFR5cGVzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP0R0KE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7QnQoZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOkR0KE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfSh7fSxCZSk7dmFyIEZ0PVtcImNsYXNzZXNcIixcImZvcm1hdE1vbnRoXCIsXCJmb3JtYXRNb250aFllYXJcIl07ZnVuY3Rpb24gV3QoZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIFV0KGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP1d0KE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7enQoZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOld0KE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfWZ1bmN0aW9uIHp0KGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBHdCgpe3JldHVybiBHdD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LEd0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgS3Q9XCJyZWFjdC1jYWxlbmRhcl9feWVhci12aWV3X19tb250aHNfX21vbnRoXCI7ZnVuY3Rpb24gcXQoZSl7dmFyIHQ9ZS5jbGFzc2VzLG49ZS5mb3JtYXRNb250aCxyPXZvaWQgMD09PW4/c2U6bixhPWUuZm9ybWF0TW9udGhZZWFyLGk9dm9pZCAwPT09YT9jZTphLGw9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LGE9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb30oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLHQuaW5kZXhPZihuKT49MHx8T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsbikmJihvW25dPWVbbl0pfXJldHVybiBvfShlLEZ0KSxzPWwuZGF0ZSxjPWwubG9jYWxlO3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChtdCxHdCh7fSxsLHtjbGFzc2VzOltdLmNvbmNhdCh0LEt0KSxmb3JtYXRBYmJyOmksbWF4RGF0ZVRyYW5zZm9ybTpGLG1pbkRhdGVUcmFuc2Zvcm06Wix2aWV3OlwieWVhclwifSkscihjLHMpKX1mdW5jdGlvbiBZdChlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gSnQoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fTt0JTI/WXQoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXtYdChlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6WXQoT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSl9cmV0dXJuIGV9ZnVuY3Rpb24gWHQoZSx0LG4pe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIFF0KCl7cmV0dXJuIFF0PU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sUXQuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGVuKGUpe3ZhciB0PW0oZS5hY3RpdmVTdGFydERhdGUpO3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChsdCxRdCh7fSxlLHtjbGFzc05hbWU6XCJyZWFjdC1jYWxlbmRhcl9feWVhci12aWV3X19tb250aHNcIixkYXRlVHJhbnNmb3JtOmZ1bmN0aW9uKGUpe3ZhciBuPW5ldyBEYXRlO3JldHVybiBuLnNldEZ1bGxZZWFyKHQsZSwxKSxuLnNldEhvdXJzKDAsMCwwLDApLG59LGRhdGVUeXBlOlwibW9udGhcIixlbmQ6MTEsc3RhcnQ6MCx0aWxlOnF0fSkpfWZ1bmN0aW9uIHRuKGUpe3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJyZWFjdC1jYWxlbmRhcl9feWVhci12aWV3XCJ9LG8oKS5jcmVhdGVFbGVtZW50KGVuLGUpKX1xdC5wcm9wVHlwZXM9VXQoVXQoe30sWmUpLHt9LHtmb3JtYXRNb250aDppKCkuZnVuYyxmb3JtYXRNb250aFllYXI6aSgpLmZ1bmN9KSxlbi5wcm9wVHlwZXM9SnQoSnQoe30sQmUpLHt9LHtsb2NhbGU6aSgpLnN0cmluZ30pO3ZhciBubj1bXCJmb3JtYXREYXlcIixcImZvcm1hdExvbmdEYXRlXCIsXCJjYWxlbmRhclR5cGVcIixcImNsYXNzZXNcIixcImN1cnJlbnRNb250aEluZGV4XCJdO2Z1bmN0aW9uIHJuKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9ybihPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe2FuKGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpybihPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX1mdW5jdGlvbiBhbihlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gbG4oKXtyZXR1cm4gbG49T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxsbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIHNuPVwicmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdfX2RheXNfX2RheVwiO2Z1bmN0aW9uIGNuKGUpe3ZhciB0PWUuZm9ybWF0RGF5LG49dm9pZCAwPT09dD9pZTp0LHI9ZS5mb3JtYXRMb25nRGF0ZSxhPXZvaWQgMD09PXI/bGU6cixpPWUuY2FsZW5kYXJUeXBlLGw9ZS5jbGFzc2VzLHM9ZS5jdXJyZW50TW9udGhJbmRleCxjPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLHQuaW5kZXhPZihuKT49MHx8KG9bbl09ZVtuXSk7cmV0dXJuIG99KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYob1tuXT1lW25dKX1yZXR1cm4gb30oZSxubiksdT1jLmRhdGUsZD1jLmxvY2FsZTtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQobXQsbG4oe30sYyx7Y2xhc3NlczpbXS5jb25jYXQobCxzbixMZSh1LGkpP1wiXCIuY29uY2F0KHNuLFwiLS13ZWVrZW5kXCIpOm51bGwsdS5nZXRNb250aCgpIT09cz9cIlwiLmNvbmNhdChzbixcIi0tbmVpZ2hib3JpbmdNb250aFwiKTpudWxsKSxmb3JtYXRBYmJyOmEsbWF4RGF0ZVRyYW5zZm9ybTpxLG1pbkRhdGVUcmFuc2Zvcm06Ryx2aWV3OlwibW9udGhcIn0pLG4oZCx1KSl9Y24ucHJvcFR5cGVzPW9uKG9uKHt9LFplKSx7fSx7Y3VycmVudE1vbnRoSW5kZXg6aSgpLm51bWJlci5pc1JlcXVpcmVkLGZvcm1hdERheTppKCkuZnVuYyxmb3JtYXRMb25nRGF0ZTppKCkuZnVuY30pO3ZhciB1bj1bXCJzaG93Rml4ZWROdW1iZXJPZldlZWtzXCIsXCJzaG93TmVpZ2hib3JpbmdNb250aFwiXTtmdW5jdGlvbiBkbihlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gcG4oZSx0LG4pe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIGZuKCl7cmV0dXJuIGZuPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sZm4uYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGhuKGUpe3ZhciB0PWUuYWN0aXZlU3RhcnREYXRlLG49ZS5jYWxlbmRhclR5cGUscj1lLnNob3dGaXhlZE51bWJlck9mV2Vla3MsYT1lLnNob3dOZWlnaGJvcmluZ01vbnRoLGk9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LGE9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb30oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLHQuaW5kZXhPZihuKT49MHx8T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsbikmJihvW25dPWVbbl0pfXJldHVybiBvfShlLHVuKSxsPW0odCkscz13KHQpLGM9cnx8YSx1PXZlKHQsbiksZD1jPzA6dSxwPTErKGM/LXU6MCksZj1mdW5jdGlvbigpe2lmKHIpcmV0dXJuIHArNDItMTt2YXIgZT1KKHQpO2lmKGEpe3ZhciBvPW5ldyBEYXRlO3JldHVybiBvLnNldEZ1bGxZZWFyKGwscyxlKSxvLnNldEhvdXJzKDAsMCwwLDApLGUrKDctdmUobyxuKS0xKX1yZXR1cm4gZX0oKTtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQobHQsZm4oe30saSx7Y2xhc3NOYW1lOlwicmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdfX2RheXNcIixjb3VudDo3LGN1cnJlbnRNb250aEluZGV4OnMsZGF0ZVRyYW5zZm9ybTpmdW5jdGlvbihlKXt2YXIgdD1uZXcgRGF0ZTtyZXR1cm4gdC5zZXRGdWxsWWVhcihsLHMsZSksdC5zZXRIb3VycygwLDAsMCwwKSx0fSxkYXRlVHlwZTpcImRheVwiLGVuZDpmLG9mZnNldDpkLHN0YXJ0OnAsdGlsZTpjbn0pKX1obi5wcm9wVHlwZXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fTt0JTI/ZG4oT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXtwbihlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6ZG4oT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSl9cmV0dXJuIGV9KHtjYWxlbmRhclR5cGU6amUuaXNSZXF1aXJlZCxzaG93Rml4ZWROdW1iZXJPZldlZWtzOmkoKS5ib29sLHNob3dOZWlnaGJvcmluZ01vbnRoOmkoKS5ib29sfSxCZSk7dmFyIGduPVwicmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdfX3dlZWtkYXlzXCIsdm49XCJcIi5jb25jYXQoZ24sXCJfX3dlZWtkYXlcIik7ZnVuY3Rpb24gQ24oZSl7Zm9yKHZhciB0PWUuY2FsZW5kYXJUeXBlLG49ZS5mb3JtYXRTaG9ydFdlZWtkYXkscj12b2lkIDA9PT1uP3VlOm4sYT1lLmZvcm1hdFdlZWtkYXksaT12b2lkIDA9PT1hP2RlOmEsbD1lLmxvY2FsZSxjPWUub25Nb3VzZUxlYXZlLHU9WihuZXcgRGF0ZSksZD1tKHUpLHA9dyh1KSxmPVtdLGg9MTtoPD03O2grPTEpe3ZhciBnPW5ldyBEYXRlKGQscCxoLXZlKHUsdCkpLHY9aShsLGcpO2YucHVzaChvKCkuY3JlYXRlRWxlbWVudChcImRpdlwiLHtrZXk6aCxjbGFzc05hbWU6cyh2bixMZShnLHQpJiZcIlwiLmNvbmNhdCh2bixcIi0td2Vla2VuZFwiKSl9LG8oKS5jcmVhdGVFbGVtZW50KFwiYWJiclwiLHtcImFyaWEtbGFiZWxcIjp2LHRpdGxlOnZ9LHIobCxnKS5yZXBsYWNlKFwiLlwiLFwiXCIpKSkpfXJldHVybiBvKCkuY3JlYXRlRWxlbWVudChxZSx7Y2xhc3NOYW1lOmduLGNvdW50Ojcsb25Gb2N1czpjLG9uTW91c2VPdmVyOmN9LGYpfUNuLnByb3BUeXBlcz17Y2FsZW5kYXJUeXBlOmplLmlzUmVxdWlyZWQsZm9ybWF0U2hvcnRXZWVrZGF5OmkoKS5mdW5jLGZvcm1hdFdlZWtkYXk6aSgpLmZ1bmMsbG9jYWxlOmkoKS5zdHJpbmcsb25Nb3VzZUxlYXZlOmkoKS5mdW5jfTt2YXIgbW49W1wiZGF0ZVwiLFwib25DbGlja1dlZWtOdW1iZXJcIixcIndlZWtOdW1iZXJcIl07ZnVuY3Rpb24gd24oKXtyZXR1cm4gd249T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSx3bi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gYm4oZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIHluKGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX12YXIgeG49XCJyZWFjdC1jYWxlbmRhcl9fdGlsZVwiO2Z1bmN0aW9uIGtuKGUpe3ZhciB0PWUuZGF0ZSxuPWUub25DbGlja1dlZWtOdW1iZXIscj1lLndlZWtOdW1iZXIsYT1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik+PTB8fChvW25dPWVbbl0pO3JldHVybiBvfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sdC5pbmRleE9mKG4pPj0wfHxPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxuKSYmKG9bbl09ZVtuXSl9cmV0dXJuIG99KGUsbW4pLGk9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fTt0JTI/Ym4oT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXt5bihlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6Ym4oT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSl9cmV0dXJuIGV9KHtjbGFzc05hbWU6eG59LGEpLGw9bygpLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsbnVsbCxyKTtyZXR1cm4gbj9vKCkuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLHduKHt9LGkse29uQ2xpY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIG4ocix0LGUpfSx0eXBlOlwiYnV0dG9uXCJ9KSxsKTpvKCkuY3JlYXRlRWxlbWVudChcImRpdlwiLGksbCl9ZnVuY3Rpb24gU24oZSl7dmFyIHQ9ZS5hY3RpdmVTdGFydERhdGUsbj1lLmNhbGVuZGFyVHlwZSxyPWUub25DbGlja1dlZWtOdW1iZXIsYT1lLm9uTW91c2VMZWF2ZSxpPWUuc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrcyxsPWZ1bmN0aW9uKCl7aWYoaSlyZXR1cm4gNjt2YXIgZT1KKHQpLSg3LXZlKHQsbikpO3JldHVybiAxK01hdGguY2VpbChlLzcpfSgpLHM9ZnVuY3Rpb24oKXtmb3IodmFyIGU9bSh0KSxyPXcodCksbz1iKHQpLGE9W10saT0wO2k8bDtpKz0xKWEucHVzaChDZShuZXcgRGF0ZShlLHIsbys3KmkpLG4pKTtyZXR1cm4gYX0oKSxjPXMubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQsbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGUuSVNPXzg2MDEscj1uPT09dGUuVVM/dGUuVVM6dGUuSVNPXzg2MDEsbz1DZShlLG4pLGE9bShlKSsxO2Rve3Q9Q2UobmV3IERhdGUoYSwwLHI9PT10ZS5JU09fODYwMT80OjEpLG4pLGEtPTF9d2hpbGUoZTx0KTtyZXR1cm4gTWF0aC5yb3VuZCgoby10KS82MDQ4ZTUpKzF9KGUsbil9KSk7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KHFlLHtjbGFzc05hbWU6XCJyZWFjdC1jYWxlbmRhcl9fbW9udGgtdmlld19fd2Vla051bWJlcnNcIixjb3VudDpsLGRpcmVjdGlvbjpcImNvbHVtblwiLG9uRm9jdXM6YSxvbk1vdXNlT3ZlcjphLHN0eWxlOntmbGV4QmFzaXM6XCJjYWxjKDEwMCUgKiAoMSAvIDgpXCIsZmxleFNocmluazowfX0sYy5tYXAoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KGtuLHtrZXk6ZSxkYXRlOnNbdF0sb25DbGlja1dlZWtOdW1iZXI6cix3ZWVrTnVtYmVyOmV9KX0pKSl9a24ucHJvcFR5cGVzPXtkYXRlOmkoKS5pbnN0YW5jZU9mKERhdGUpLmlzUmVxdWlyZWQsb25DbGlja1dlZWtOdW1iZXI6aSgpLmZ1bmMsd2Vla051bWJlcjppKCkubm9kZS5pc1JlcXVpcmVkfSxTbi5wcm9wVHlwZXM9e2FjdGl2ZVN0YXJ0RGF0ZTppKCkuaW5zdGFuY2VPZihEYXRlKS5pc1JlcXVpcmVkLGNhbGVuZGFyVHlwZTpqZS5pc1JlcXVpcmVkLG9uQ2xpY2tXZWVrTnVtYmVyOmkoKS5mdW5jLG9uTW91c2VMZWF2ZTppKCkuZnVuYyxzaG93Rml4ZWROdW1iZXJPZldlZWtzOmkoKS5ib29sfTt2YXIgT249W1wiY2FsZW5kYXJUeXBlXCIsXCJmb3JtYXRTaG9ydFdlZWtkYXlcIixcImZvcm1hdFdlZWtkYXlcIixcIm9uQ2xpY2tXZWVrTnVtYmVyXCIsXCJzaG93V2Vla051bWJlcnNcIl07ZnVuY3Rpb24gTW4oKXtyZXR1cm4gTW49T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxNbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gTG4oZSl7dmFyIHQ9ZS5hY3RpdmVTdGFydERhdGUsbj1lLmxvY2FsZSxyPWUub25Nb3VzZUxlYXZlLGE9ZS5zaG93Rml4ZWROdW1iZXJPZldlZWtzLGk9ZS5jYWxlbmRhclR5cGUsbD12b2lkIDA9PT1pP2Z1bmN0aW9uKGUpe3JldHVybiBPYmplY3Qua2V5cyhuZSkuZmluZCgoZnVuY3Rpb24odCl7cmV0dXJuIG5lW3RdLmluY2x1ZGVzKGUpfSkpfHx0ZS5JU09fODYwMX0obik6aSxjPWUuZm9ybWF0U2hvcnRXZWVrZGF5LHU9ZS5mb3JtYXRXZWVrZGF5LGQ9ZS5vbkNsaWNrV2Vla051bWJlcixwPWUuc2hvd1dlZWtOdW1iZXJzLGY9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LGE9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb30oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLHQuaW5kZXhPZihuKT49MHx8T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsbikmJihvW25dPWVbbl0pfXJldHVybiBvfShlLE9uKSxoPVwicmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdcIjtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOnMoaCxwP1wiXCIuY29uY2F0KGgsXCItLXdlZWtOdW1iZXJzXCIpOlwiXCIpfSxvKCkuY3JlYXRlRWxlbWVudChcImRpdlwiLHtzdHlsZTp7ZGlzcGxheTpcImZsZXhcIixhbGlnbkl0ZW1zOlwiZmxleC1lbmRcIn19LHA/bygpLmNyZWF0ZUVsZW1lbnQoU24se2FjdGl2ZVN0YXJ0RGF0ZTp0LGNhbGVuZGFyVHlwZTpsLG9uQ2xpY2tXZWVrTnVtYmVyOmQsb25Nb3VzZUxlYXZlOnIsc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrczphfSk6bnVsbCxvKCkuY3JlYXRlRWxlbWVudChcImRpdlwiLHtzdHlsZTp7ZmxleEdyb3c6MSx3aWR0aDpcIjEwMCVcIn19LG8oKS5jcmVhdGVFbGVtZW50KENuLHtjYWxlbmRhclR5cGU6bCxmb3JtYXRTaG9ydFdlZWtkYXk6Yyxmb3JtYXRXZWVrZGF5OnUsbG9jYWxlOm4sb25Nb3VzZUxlYXZlOnJ9KSxvKCkuY3JlYXRlRWxlbWVudChobixNbih7Y2FsZW5kYXJUeXBlOmx9LGYpKSkpKX1Mbi5wcm9wVHlwZXM9e2FjdGl2ZVN0YXJ0RGF0ZTppKCkuaW5zdGFuY2VPZihEYXRlKS5pc1JlcXVpcmVkLGNhbGVuZGFyVHlwZTpqZSxmb3JtYXRTaG9ydFdlZWtkYXk6aSgpLmZ1bmMsZm9ybWF0V2Vla2RheTppKCkuZnVuYyxsb2NhbGU6aSgpLnN0cmluZyxvbkNsaWNrV2Vla051bWJlcjppKCkuZnVuYyxvbk1vdXNlTGVhdmU6aSgpLmZ1bmMsc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrczppKCkuYm9vbCxzaG93V2Vla051bWJlcnM6aSgpLmJvb2x9O3ZhciBfbj1bXCJhY3RpdmVTdGFydERhdGVcIixcImRlZmF1bHRBY3RpdmVTdGFydERhdGVcIixcImRlZmF1bHRWYWx1ZVwiLFwiZGVmYXVsdFZpZXdcIixcIm1heERldGFpbFwiLFwibWluRGV0YWlsXCIsXCJ2YWx1ZVwiLFwidmlld1wiXTtmdW5jdGlvbiBQbigpe3JldHVybiBQbj1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LFBuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBFbihlKXtyZXR1cm4gRW49XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgZX0sRW4oZSl9ZnVuY3Rpb24gam4oZSx0KXtyZXR1cm4gam49T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxqbihlLHQpfWZ1bmN0aW9uIFJuKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiBlfWZ1bmN0aW9uIEluKGUpe3JldHVybiBJbj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sSW4oZSl9ZnVuY3Rpb24gVm4oZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIEhuKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP1ZuKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7QW4oZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOlZuKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfWZ1bmN0aW9uIEFuKGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBUbihlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9bmV3IEFycmF5KHQpO248dDtuKyspcltuXT1lW25dO3JldHVybiByfXZhciBEbj1uZXcgRGF0ZTtEbi5zZXRGdWxsWWVhcigxLDAsMSksRG4uc2V0SG91cnMoMCwwLDAsMCk7dmFyIEJuPW5ldyBEYXRlKDg2NGUxMyksWm49XCJyZWFjdC1jYWxlbmRhclwiLCRuPVtcImNlbnR1cnlcIixcImRlY2FkZVwiLFwieWVhclwiLFwibW9udGhcIl0sTm49W10uY29uY2F0KGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBUbihlKX0oZSl8fGZ1bmN0aW9uKGUpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVtcIkBAaXRlcmF0b3JcIl0pcmV0dXJuIEFycmF5LmZyb20oZSl9KGUpfHxmdW5jdGlvbihlLHQpe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBUbihlLHQpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm5cIk9iamVjdFwiPT09biYmZS5jb25zdHJ1Y3RvciYmKG49ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09bnx8XCJTZXRcIj09PW4/QXJyYXkuZnJvbShlKTpcIkFyZ3VtZW50c1wiPT09bnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qobik/VG4oZSx0KTp2b2lkIDB9fShlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX0oJG4uc2xpY2UoMSkpLFtcImRheVwiXSk7ZnVuY3Rpb24gRm4oZSx0KXtyZXR1cm4gJG4uc2xpY2UoJG4uaW5kZXhPZihlKSwkbi5pbmRleE9mKHQpKzEpfWZ1bmN0aW9uIFduKGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybi0xIT09Rm4odCxuKS5pbmRleE9mKGUpfShlLHQsbik/ZTpufWZ1bmN0aW9uIFVuKGUpe3JldHVybiBOblskbi5pbmRleE9mKGUpXX1mdW5jdGlvbiB6bihlLHQpe3ZhciBuPWUudmFsdWUscj1lLm1pbkRhdGUsbz1lLm1heERhdGUsYT1lLm1heERldGFpbCxpPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuIG51bGw7dmFyIG49QXJyYXkuaXNBcnJheShlKSYmMj09PWUubGVuZ3RoP2VbdF06ZTtpZighbilyZXR1cm4gbnVsbDt2YXIgcj1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIERhdGU/ZTpuZXcgRGF0ZShlKX0obik7aWYoaXNOYU4oci5nZXRUaW1lKCkpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgZGF0ZTogXCIuY29uY2F0KGUpKTtyZXR1cm4gcn0obix0KTtpZighaSlyZXR1cm4gbnVsbDt2YXIgbD1VbihhKTtyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0JiZ0PmU/dDpuJiZuPGU/bjplfShbbWUseGVdW3RdKGwsaSkscixvKX12YXIgR249ZnVuY3Rpb24oZSl7cmV0dXJuIHpuKGUsMCl9LEtuPWZ1bmN0aW9uKGUpe3JldHVybiB6bihlLDEpfSxxbj1mdW5jdGlvbihlKXt2YXIgdD1lLnZhbHVlO3JldHVybiBBcnJheS5pc0FycmF5KHQpP3Q6W0duLEtuXS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0KGUpfSkpfTtmdW5jdGlvbiBZbihlKXt2YXIgdD1lLm1heERhdGUsbj1lLm1heERldGFpbCxyPWUubWluRGF0ZSxvPWUubWluRGV0YWlsLGE9ZS52YWx1ZTtyZXR1cm4gbWUoV24oZS52aWV3LG8sbiksR24oe3ZhbHVlOmEsbWluRGF0ZTpyLG1heERhdGU6dCxtYXhEZXRhaWw6bn0pfHxuZXcgRGF0ZSl9dmFyIEpuPWZ1bmN0aW9uKGUpe3JldHVybiBlJiYxPT09W10uY29uY2F0KGUpLmxlbmd0aH0sWG49ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcInByb3RvdHlwZVwiLHt3cml0YWJsZTohMX0pLHQmJmpuKGUsdCl9KGwsZSk7dmFyIHQsbixyLGEsaT0ocj1sLGE9ZnVuY3Rpb24oKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLHQ9SW4ocik7aWYoYSl7dmFyIG49SW4odGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxuKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKFwib2JqZWN0XCI9PT1Fbih0KXx8XCJmdW5jdGlvblwiPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7cmV0dXJuIFJuKGUpfSh0aGlzLGUpfSk7ZnVuY3Rpb24gbCgpe3ZhciBlOyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9KHRoaXMsbCk7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspbltyXT1hcmd1bWVudHNbcl07cmV0dXJuIEFuKFJuKGU9aS5jYWxsLmFwcGx5KGksW3RoaXNdLmNvbmNhdChuKSkpLFwic3RhdGVcIix7YWN0aXZlU3RhcnREYXRlOmUucHJvcHMuZGVmYXVsdEFjdGl2ZVN0YXJ0RGF0ZSx2YWx1ZTplLnByb3BzLmRlZmF1bHRWYWx1ZSx2aWV3OmUucHJvcHMuZGVmYXVsdFZpZXd9KSxBbihSbihlKSxcInNldFN0YXRlQW5kQ2FsbENhbGxiYWNrc1wiLChmdW5jdGlvbih0LG4scil7dmFyIG89Um4oZSksYT1vLmFjdGl2ZVN0YXJ0RGF0ZSxpPW8udmlldyxsPWUucHJvcHMscz1sLmFsbG93UGFydGlhbFJhbmdlLGM9bC5vbkFjdGl2ZVN0YXJ0RGF0ZUNoYW5nZSx1PWwub25DaGFuZ2UsZD1sLm9uVmlld0NoYW5nZSxwPWwuc2VsZWN0UmFuZ2UsZj17YWN0aXZlU3RhcnREYXRlOmEsdmlldzppfTtlLnNldFN0YXRlKHQsKGZ1bmN0aW9uKCl7dmFyIG89e2FjdGlvbjp0LmFjdGlvbixhY3RpdmVTdGFydERhdGU6dC5hY3RpdmVTdGFydERhdGV8fGUuYWN0aXZlU3RhcnREYXRlLHZhbHVlOnQudmFsdWV8fGUudmFsdWUsdmlldzp0LnZpZXd8fGUudmlld307ZnVuY3Rpb24gYShlKXtyZXR1cm4gZSBpbiB0JiYoRW4odFtlXSkhPT1FbihmW2VdKXx8KHRbZV1pbnN0YW5jZW9mIERhdGU/dFtlXS5nZXRUaW1lKCkhPT1mW2VdLmdldFRpbWUoKTp0W2VdIT09ZltlXSkpfWEoXCJhY3RpdmVTdGFydERhdGVcIikmJmMmJmMobyksYShcInZpZXdcIikmJmQmJmQobyksYShcInZhbHVlXCIpJiZ1JiYocCYmSm4odC52YWx1ZSk/cyYmdShbdC52YWx1ZV0sbik6dSh0LnZhbHVlLG4pKSxyJiZyKG8pfSkpfSkpLEFuKFJuKGUpLFwic2V0QWN0aXZlU3RhcnREYXRlXCIsKGZ1bmN0aW9uKHQsbil7ZS5zZXRTdGF0ZUFuZENhbGxDYWxsYmFja3Moe2FjdGlvbjpuLGFjdGl2ZVN0YXJ0RGF0ZTp0fSl9KSksQW4oUm4oZSksXCJkcmlsbERvd25cIiwoZnVuY3Rpb24odCxuKXtpZihlLmRyaWxsRG93bkF2YWlsYWJsZSl7ZS5vbkNsaWNrVGlsZSh0LG4pO3ZhciByPVJuKGUpLG89ci52aWV3LGE9ci52aWV3cyxpPWUucHJvcHMub25EcmlsbERvd24sbD1hW2EuaW5kZXhPZihvKSsxXTtlLnNldFN0YXRlQW5kQ2FsbENhbGxiYWNrcyh7YWN0aW9uOlwiZHJpbGxEb3duXCIsYWN0aXZlU3RhcnREYXRlOnQsdmlldzpsfSx2b2lkIDAsaSl9fSkpLEFuKFJuKGUpLFwiZHJpbGxVcFwiLChmdW5jdGlvbigpe2lmKGUuZHJpbGxVcEF2YWlsYWJsZSl7dmFyIHQ9Um4oZSksbj10LmFjdGl2ZVN0YXJ0RGF0ZSxyPXQudmlldyxvPXQudmlld3MsYT1lLnByb3BzLm9uRHJpbGxVcCxpPW9bby5pbmRleE9mKHIpLTFdLGw9bWUoaSxuKTtlLnNldFN0YXRlQW5kQ2FsbENhbGxiYWNrcyh7YWN0aW9uOlwiZHJpbGxVcFwiLGFjdGl2ZVN0YXJ0RGF0ZTpsLHZpZXc6aX0sdm9pZCAwLGEpfX0pKSxBbihSbihlKSxcIm9uQ2hhbmdlXCIsKGZ1bmN0aW9uKHQsbil7dmFyIHI9Um4oZSkudmFsdWUsbz1lLnByb3BzLGE9by5nb1RvUmFuZ2VTdGFydE9uU2VsZWN0LGk9by5zZWxlY3RSYW5nZTtlLm9uQ2xpY2tUaWxlKHQsbik7dmFyIGwscyxjLHU9aSYmIUpuKHIpO2lmKGkpe3ZhciBkPVJuKGUpLnZhbHVlVHlwZTtsPXU/bWUoZCx0KTpbbWUocz1kLChjPVtyLHRdLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUtdH0pKSlbMF0pLHhlKHMsY1sxXSldfWVsc2UgbD1lLmdldFByb2Nlc3NlZFZhbHVlKHQpO3ZhciBwPSFpfHx1fHxhP1luKEhuKEhuKHt9LGUucHJvcHMpLHt9LHt2YWx1ZTpsfSkpOm51bGw7bi5wZXJzaXN0KCksZS5zZXRTdGF0ZUFuZENhbGxDYWxsYmFja3Moe2FjdGlvbjpcIm9uQ2hhbmdlXCIsYWN0aXZlU3RhcnREYXRlOnAsdmFsdWU6bH0sbil9KSksQW4oUm4oZSksXCJvbkNsaWNrVGlsZVwiLChmdW5jdGlvbih0LG4pe3ZhciByPVJuKGUpLnZpZXcsbz1lLnByb3BzLGE9by5vbkNsaWNrRGF5LGk9by5vbkNsaWNrRGVjYWRlLGw9by5vbkNsaWNrTW9udGgscz1vLm9uQ2xpY2tZZWFyLGM9ZnVuY3Rpb24oKXtzd2l0Y2gocil7Y2FzZVwiY2VudHVyeVwiOnJldHVybiBpO2Nhc2VcImRlY2FkZVwiOnJldHVybiBzO2Nhc2VcInllYXJcIjpyZXR1cm4gbDtjYXNlXCJtb250aFwiOnJldHVybiBhO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB2aWV3OiBcIi5jb25jYXQocixcIi5cIikpfX0oKTtjJiZjKHQsbil9KSksQW4oUm4oZSksXCJvbk1vdXNlT3ZlclwiLChmdW5jdGlvbih0KXtlLnNldFN0YXRlKChmdW5jdGlvbihlKXtyZXR1cm4gZS5ob3ZlciYmZS5ob3Zlci5nZXRUaW1lKCk9PT10LmdldFRpbWUoKT9udWxsOntob3Zlcjp0fX0pKX0pKSxBbihSbihlKSxcIm9uTW91c2VMZWF2ZVwiLChmdW5jdGlvbigpe2Uuc2V0U3RhdGUoe2hvdmVyOm51bGx9KX0pKSxlfXJldHVybiB0PWwsbj1be2tleTpcImFjdGl2ZVN0YXJ0RGF0ZVwiLGdldDpmdW5jdGlvbigpe3ZhciBlLHQsbixyLG8sYSxpLGwscyxjLHUsZCxwPXRoaXMucHJvcHMuYWN0aXZlU3RhcnREYXRlLGY9dGhpcy5zdGF0ZS5hY3RpdmVTdGFydERhdGU7cmV0dXJuIHB8fGZ8fCh0PShlPXRoaXMucHJvcHMpLmFjdGl2ZVN0YXJ0RGF0ZSxuPWUuZGVmYXVsdEFjdGl2ZVN0YXJ0RGF0ZSxyPWUuZGVmYXVsdFZhbHVlLG89ZS5kZWZhdWx0VmlldyxhPWUubWF4RGV0YWlsLGk9ZS5taW5EZXRhaWwsbD1lLnZhbHVlLHM9ZS52aWV3LGM9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LGE9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb30oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLHQuaW5kZXhPZihuKT49MHx8T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsbikmJihvW25dPWVbbl0pfXJldHVybiBvfShlLF9uKSx1PVduKHMsaSxhKSwoZD10fHxuKT9tZSh1LGQpOlluKEhuKHttYXhEZXRhaWw6YSxtaW5EZXRhaWw6aSx2YWx1ZTpsfHxyLHZpZXc6c3x8b30sYykpKX19LHtrZXk6XCJ2YWx1ZVwiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnNlbGVjdFJhbmdlLG49ZS52YWx1ZSxyPXRoaXMuc3RhdGUudmFsdWU7cmV0dXJuIHQmJkpuKHIpP3I6dm9pZCAwIT09bj9uOnJ9fSx7a2V5OlwidmFsdWVUeXBlXCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFVuKHRoaXMucHJvcHMubWF4RGV0YWlsKX19LHtrZXk6XCJ2aWV3XCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUubWluRGV0YWlsLG49ZS5tYXhEZXRhaWwscj1lLnZpZXcsbz10aGlzLnN0YXRlLnZpZXc7cmV0dXJuIFduKHJ8fG8sdCxuKX19LHtrZXk6XCJ2aWV3c1wiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHM7cmV0dXJuIEZuKGUubWluRGV0YWlsLGUubWF4RGV0YWlsKX19LHtrZXk6XCJob3ZlclwiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuc2VsZWN0UmFuZ2UsdD10aGlzLnN0YXRlLmhvdmVyO3JldHVybiBlP3Q6bnVsbH19LHtrZXk6XCJkcmlsbERvd25BdmFpbGFibGVcIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnZpZXcsdD10aGlzLnZpZXdzO3JldHVybiB0LmluZGV4T2YoZSk8dC5sZW5ndGgtMX19LHtrZXk6XCJkcmlsbFVwQXZhaWxhYmxlXCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy52aWV3O3JldHVybiB0aGlzLnZpZXdzLmluZGV4T2YoZSk+MH19LHtrZXk6XCJnZXRQcm9jZXNzZWRWYWx1ZVwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMsbj10Lm1pbkRhdGUscj10Lm1heERhdGUsbz10Lm1heERldGFpbCxhPXQucmV0dXJuVmFsdWU7cmV0dXJuIGZ1bmN0aW9uKCl7c3dpdGNoKGEpe2Nhc2VcInN0YXJ0XCI6cmV0dXJuIEduO2Nhc2VcImVuZFwiOnJldHVybiBLbjtjYXNlXCJyYW5nZVwiOnJldHVybiBxbjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmV0dXJuVmFsdWUuXCIpfX0oKSh7dmFsdWU6ZSxtaW5EYXRlOm4sbWF4RGF0ZTpyLG1heERldGFpbDpvfSl9fSx7a2V5OlwicmVuZGVyQ29udGVudFwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYWN0aXZlU3RhcnREYXRlLG49dGhpcy5vbk1vdXNlT3ZlcixyPXRoaXMudmFsdWVUeXBlLGE9dGhpcy52YWx1ZSxpPXRoaXMudmlldyxsPXRoaXMucHJvcHMscz1sLmNhbGVuZGFyVHlwZSxjPWwubG9jYWxlLHU9bC5tYXhEYXRlLGQ9bC5taW5EYXRlLHA9bC5zZWxlY3RSYW5nZSxmPWwudGlsZUNsYXNzTmFtZSxoPWwudGlsZUNvbnRlbnQsZz1sLnRpbGVEaXNhYmxlZCx2PXRoaXMuaG92ZXIsQz17YWN0aXZlU3RhcnREYXRlOmU/d2UoaSx0KTptZShpLHQpLGhvdmVyOnYsbG9jYWxlOmMsbWF4RGF0ZTp1LG1pbkRhdGU6ZCxvbkNsaWNrOnRoaXMuZHJpbGxEb3duQXZhaWxhYmxlP3RoaXMuZHJpbGxEb3duOnRoaXMub25DaGFuZ2Usb25Nb3VzZU92ZXI6cD9uOm51bGwsdGlsZUNsYXNzTmFtZTpmLHRpbGVDb250ZW50OmgsdGlsZURpc2FibGVkOmcsdmFsdWU6YSx2YWx1ZVR5cGU6cn07c3dpdGNoKGkpe2Nhc2VcImNlbnR1cnlcIjp2YXIgbT10aGlzLnByb3BzLmZvcm1hdFllYXI7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KEV0LFBuKHtmb3JtYXRZZWFyOm19LEMpKTtjYXNlXCJkZWNhZGVcIjp2YXIgdz10aGlzLnByb3BzLmZvcm1hdFllYXI7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KE50LFBuKHtmb3JtYXRZZWFyOnd9LEMpKTtjYXNlXCJ5ZWFyXCI6dmFyIGI9dGhpcy5wcm9wcyx5PWIuZm9ybWF0TW9udGgseD1iLmZvcm1hdE1vbnRoWWVhcjtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQodG4sUG4oe2Zvcm1hdE1vbnRoOnksZm9ybWF0TW9udGhZZWFyOnh9LEMpKTtjYXNlXCJtb250aFwiOnZhciBrPXRoaXMucHJvcHMsUz1rLmZvcm1hdERheSxPPWsuZm9ybWF0TG9uZ0RhdGUsTT1rLmZvcm1hdFNob3J0V2Vla2RheSxMPWsuZm9ybWF0V2Vla2RheSxfPWsub25DbGlja1dlZWtOdW1iZXIsUD1rLnNob3dEb3VibGVWaWV3LEU9ay5zaG93Rml4ZWROdW1iZXJPZldlZWtzLGo9ay5zaG93TmVpZ2hib3JpbmdNb250aCxSPWsuc2hvd1dlZWtOdW1iZXJzLEk9dGhpcy5vbk1vdXNlTGVhdmU7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KExuLFBuKHtjYWxlbmRhclR5cGU6cyxmb3JtYXREYXk6Uyxmb3JtYXRMb25nRGF0ZTpPLGZvcm1hdFNob3J0V2Vla2RheTpNLGZvcm1hdFdlZWtkYXk6TCxvbkNsaWNrV2Vla051bWJlcjpfLG9uTW91c2VMZWF2ZTpwP0k6bnVsbCxzaG93Rml4ZWROdW1iZXJPZldlZWtzOnZvaWQgMCE9PUU/RTpQLHNob3dOZWlnaGJvcmluZ01vbnRoOmosc2hvd1dlZWtOdW1iZXJzOlJ9LEMpKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgdmlldzogXCIuY29uY2F0KGksXCIuXCIpKX19fSx7a2V5OlwicmVuZGVyTmF2aWdhdGlvblwiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXMucHJvcHMuc2hvd05hdmlnYXRpb24pcmV0dXJuIG51bGw7dmFyIGU9dGhpcy5hY3RpdmVTdGFydERhdGUsdD10aGlzLnZpZXcsbj10aGlzLnZpZXdzLHI9dGhpcy5wcm9wcyxhPXIuZm9ybWF0TW9udGhZZWFyLGk9ci5mb3JtYXRZZWFyLGw9ci5sb2NhbGUscz1yLm1heERhdGUsYz1yLm1pbkRhdGUsdT1yLm5hdmlnYXRpb25BcmlhTGFiZWwsZD1yLm5hdmlnYXRpb25BcmlhTGl2ZSxwPXIubmF2aWdhdGlvbkxhYmVsLGY9ci5uZXh0MkFyaWFMYWJlbCxoPXIubmV4dDJMYWJlbCxnPXIubmV4dEFyaWFMYWJlbCx2PXIubmV4dExhYmVsLEM9ci5wcmV2MkFyaWFMYWJlbCxtPXIucHJldjJMYWJlbCx3PXIucHJldkFyaWFMYWJlbCxiPXIucHJldkxhYmVsLHk9ci5zaG93RG91YmxlVmlldztyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQoTmUse2FjdGl2ZVN0YXJ0RGF0ZTplLGRyaWxsVXA6dGhpcy5kcmlsbFVwLGZvcm1hdE1vbnRoWWVhcjphLGZvcm1hdFllYXI6aSxsb2NhbGU6bCxtYXhEYXRlOnMsbWluRGF0ZTpjLG5hdmlnYXRpb25BcmlhTGFiZWw6dSxuYXZpZ2F0aW9uQXJpYUxpdmU6ZCxuYXZpZ2F0aW9uTGFiZWw6cCxuZXh0MkFyaWFMYWJlbDpmLG5leHQyTGFiZWw6aCxuZXh0QXJpYUxhYmVsOmcsbmV4dExhYmVsOnYscHJldjJBcmlhTGFiZWw6QyxwcmV2MkxhYmVsOm0scHJldkFyaWFMYWJlbDp3LHByZXZMYWJlbDpiLHNldEFjdGl2ZVN0YXJ0RGF0ZTp0aGlzLnNldEFjdGl2ZVN0YXJ0RGF0ZSxzaG93RG91YmxlVmlldzp5LHZpZXc6dCx2aWV3czpufSl9fSx7a2V5OlwicmVuZGVyXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5jbGFzc05hbWUsbj1lLmlucHV0UmVmLHI9ZS5zZWxlY3RSYW5nZSxhPWUuc2hvd0RvdWJsZVZpZXcsaT10aGlzLm9uTW91c2VMZWF2ZSxsPXRoaXMudmFsdWUsYz1bXS5jb25jYXQobCk7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpzKFpuLHImJjE9PT1jLmxlbmd0aCYmXCJcIi5jb25jYXQoWm4sXCItLXNlbGVjdFJhbmdlXCIpLGEmJlwiXCIuY29uY2F0KFpuLFwiLS1kb3VibGVWaWV3XCIpLHQpLHJlZjpufSx0aGlzLnJlbmRlck5hdmlnYXRpb24oKSxvKCkuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJcIi5jb25jYXQoWm4sXCJfX3ZpZXdDb250YWluZXJcIiksb25CbHVyOnI/aTpudWxsLG9uTW91c2VMZWF2ZTpyP2k6bnVsbH0sdGhpcy5yZW5kZXJDb250ZW50KCksYSYmdGhpcy5yZW5kZXJDb250ZW50KCEwKSkpfX1dLG4mJmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX0odC5wcm90b3R5cGUsbiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJwcm90b3R5cGVcIix7d3JpdGFibGU6ITF9KSxsfShyLkNvbXBvbmVudCk7WG4uZGVmYXVsdFByb3BzPXtnb1RvUmFuZ2VTdGFydE9uU2VsZWN0OiEwLG1heERhdGU6Qm4sbWF4RGV0YWlsOlwibW9udGhcIixtaW5EYXRlOkRuLG1pbkRldGFpbDpcImNlbnR1cnlcIixyZXR1cm5WYWx1ZTpcInN0YXJ0XCIsc2hvd05hdmlnYXRpb246ITAsc2hvd05laWdoYm9yaW5nTW9udGg6ITB9O3ZhciBRbj1pKCkuaW5zdGFuY2VPZihEYXRlKSxlcj1pKCkub25lT2ZUeXBlKFtpKCkuc3RyaW5nLEFlXSk7WG4ucHJvcFR5cGVzPXthY3RpdmVTdGFydERhdGU6UW4sYWxsb3dQYXJ0aWFsUmFuZ2U6aSgpLmJvb2wsY2FsZW5kYXJUeXBlOmplLGNsYXNzTmFtZTpSZSxkZWZhdWx0QWN0aXZlU3RhcnREYXRlOlFuLGRlZmF1bHRWYWx1ZTplcixkZWZhdWx0VmlldzpEZSxmb3JtYXREYXk6aSgpLmZ1bmMsZm9ybWF0TG9uZ0RhdGU6aSgpLmZ1bmMsZm9ybWF0TW9udGg6aSgpLmZ1bmMsZm9ybWF0TW9udGhZZWFyOmkoKS5mdW5jLGZvcm1hdFNob3J0V2Vla2RheTppKCkuZnVuYyxmb3JtYXRXZWVrZGF5OmkoKS5mdW5jLGZvcm1hdFllYXI6aSgpLmZ1bmMsZ29Ub1JhbmdlU3RhcnRPblNlbGVjdDppKCkuYm9vbCxpbnB1dFJlZjpIZSxsb2NhbGU6aSgpLnN0cmluZyxtYXhEYXRlOlZlLG1heERldGFpbDppKCkub25lT2YoJG4pLG1pbkRhdGU6SWUsbWluRGV0YWlsOmkoKS5vbmVPZigkbiksbmF2aWdhdGlvbkFyaWFMYWJlbDppKCkuc3RyaW5nLG5hdmlnYXRpb25BcmlhTGl2ZTppKCkub25lT2YoW1wib2ZmXCIsXCJwb2xpdGVcIixcImFzc2VydGl2ZVwiXSksbmF2aWdhdGlvbkxhYmVsOmkoKS5mdW5jLG5leHQyQXJpYUxhYmVsOmkoKS5zdHJpbmcsbmV4dDJMYWJlbDppKCkubm9kZSxuZXh0QXJpYUxhYmVsOmkoKS5zdHJpbmcsbmV4dExhYmVsOmkoKS5ub2RlLG9uQWN0aXZlU3RhcnREYXRlQ2hhbmdlOmkoKS5mdW5jLG9uQ2hhbmdlOmkoKS5mdW5jLG9uQ2xpY2tEYXk6aSgpLmZ1bmMsb25DbGlja0RlY2FkZTppKCkuZnVuYyxvbkNsaWNrTW9udGg6aSgpLmZ1bmMsb25DbGlja1dlZWtOdW1iZXI6aSgpLmZ1bmMsb25DbGlja1llYXI6aSgpLmZ1bmMsb25EcmlsbERvd246aSgpLmZ1bmMsb25EcmlsbFVwOmkoKS5mdW5jLG9uVmlld0NoYW5nZTppKCkuZnVuYyxwcmV2MkFyaWFMYWJlbDppKCkuc3RyaW5nLHByZXYyTGFiZWw6aSgpLm5vZGUscHJldkFyaWFMYWJlbDppKCkuc3RyaW5nLHByZXZMYWJlbDppKCkubm9kZSxyZXR1cm5WYWx1ZTppKCkub25lT2YoW1wic3RhcnRcIixcImVuZFwiLFwicmFuZ2VcIl0pLHNlbGVjdFJhbmdlOmkoKS5ib29sLHNob3dEb3VibGVWaWV3OmkoKS5ib29sLHNob3dGaXhlZE51bWJlck9mV2Vla3M6aSgpLmJvb2wsc2hvd05hdmlnYXRpb246aSgpLmJvb2wsc2hvd05laWdoYm9yaW5nTW9udGg6aSgpLmJvb2wsc2hvd1dlZWtOdW1iZXJzOmkoKS5ib29sLHRpbGVDbGFzc05hbWU6aSgpLm9uZU9mVHlwZShbaSgpLmZ1bmMsUmVdKSx0aWxlQ29udGVudDppKCkub25lT2ZUeXBlKFtpKCkuZnVuYyxpKCkubm9kZV0pLHRpbGVEaXNhYmxlZDppKCkuZnVuYyx2YWx1ZTplcix2aWV3OkRlfTtjb25zdCB0cj1Ybn0sNTI1MTooZSx0LG4pPT57big3NDE4KTt2YXIgcj1uKDY2ODkpLG89NjAxMDM7aWYodC5GcmFnbWVudD02MDEwNyxcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3Ipe3ZhciBhPVN5bWJvbC5mb3I7bz1hKFwicmVhY3QuZWxlbWVudFwiKSx0LkZyYWdtZW50PWEoXCJyZWFjdC5mcmFnbWVudFwiKX12YXIgaT1yLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELlJlYWN0Q3VycmVudE93bmVyLGw9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxzPXtrZXk6ITAscmVmOiEwLF9fc2VsZjohMCxfX3NvdXJjZTohMH07ZnVuY3Rpb24gYyhlLHQsbil7dmFyIHIsYT17fSxjPW51bGwsdT1udWxsO2ZvcihyIGluIHZvaWQgMCE9PW4mJihjPVwiXCIrbiksdm9pZCAwIT09dC5rZXkmJihjPVwiXCIrdC5rZXkpLHZvaWQgMCE9PXQucmVmJiYodT10LnJlZiksdClsLmNhbGwodCxyKSYmIXMuaGFzT3duUHJvcGVydHkocikmJihhW3JdPXRbcl0pO2lmKGUmJmUuZGVmYXVsdFByb3BzKWZvcihyIGluIHQ9ZS5kZWZhdWx0UHJvcHMpdm9pZCAwPT09YVtyXSYmKGFbcl09dFtyXSk7cmV0dXJueyQkdHlwZW9mOm8sdHlwZTplLGtleTpjLHJlZjp1LHByb3BzOmEsX293bmVyOmkuY3VycmVudH19dC5qc3g9Yyx0LmpzeHM9Y30sNTg5MzooZSx0LG4pPT57ZS5leHBvcnRzPW4oNTI1MSl9LDM1NzM6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciByPW4oNjU1KSxvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLm1heChNYXRoLm1pbihuLHQpLGUpfX0sYT1mdW5jdGlvbihlKXtyZXR1cm4gZSUxP051bWJlcihlLnRvRml4ZWQoNSkpOmV9LGk9LygtKT8oW1xcZF0qXFwuP1tcXGRdKSsvZyxsPS8oI1swLTlhLWZdezZ9fCNbMC05YS1mXXszfXwjKD86WzAtOWEtZl17Mn0pezIsNH18KHJnYnxoc2wpYT9cXCgoLT9bXFxkXFwuXSslP1ssXFxzXSspezIsM31cXHMqXFwvKlxccypbXFxkXFwuXSslP1xcKSkvZ2kscz0vXigjWzAtOWEtZl17M318Iyg/OlswLTlhLWZdezJ9KXsyLDR9fChyZ2J8aHNsKWE/XFwoKC0/W1xcZFxcLl0rJT9bLFxcc10rKXsyLDN9XFxzKlxcLypcXHMqW1xcZFxcLl0rJT9cXCkpJC9pO2Z1bmN0aW9uIGMoZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGV9dmFyIHU9e3Rlc3Q6ZnVuY3Rpb24oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGV9LHBhcnNlOnBhcnNlRmxvYXQsdHJhbnNmb3JtOmZ1bmN0aW9uKGUpe3JldHVybiBlfX0sZD1yLl9fYXNzaWduKHIuX19hc3NpZ24oe30sdSkse3RyYW5zZm9ybTpvKDAsMSl9KSxwPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSx1KSx7ZGVmYXVsdDoxfSksZj1mdW5jdGlvbihlKXtyZXR1cm57dGVzdDpmdW5jdGlvbih0KXtyZXR1cm4gYyh0KSYmdC5lbmRzV2l0aChlKSYmMT09PXQuc3BsaXQoXCIgXCIpLmxlbmd0aH0scGFyc2U6cGFyc2VGbG9hdCx0cmFuc2Zvcm06ZnVuY3Rpb24odCl7cmV0dXJuXCJcIit0K2V9fX0saD1mKFwiZGVnXCIpLGc9ZihcIiVcIiksdj1mKFwicHhcIiksQz1mKFwidmhcIiksbT1mKFwidndcIiksdz1yLl9fYXNzaWduKHIuX19hc3NpZ24oe30sZykse3BhcnNlOmZ1bmN0aW9uKGUpe3JldHVybiBnLnBhcnNlKGUpLzEwMH0sdHJhbnNmb3JtOmZ1bmN0aW9uKGUpe3JldHVybiBnLnRyYW5zZm9ybSgxMDAqZSl9fSksYj1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gQm9vbGVhbihjKG4pJiZzLnRlc3QobikmJm4uc3RhcnRzV2l0aChlKXx8dCYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sdCkpfX0seT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBvO2lmKCFjKHIpKXJldHVybiByO3ZhciBhPXIubWF0Y2goaSksbD1hWzBdLHM9YVsxXSx1PWFbMl0sZD1hWzNdO3JldHVybihvPXt9KVtlXT1wYXJzZUZsb2F0KGwpLG9bdF09cGFyc2VGbG9hdChzKSxvW25dPXBhcnNlRmxvYXQodSksby5hbHBoYT12b2lkIDAhPT1kP3BhcnNlRmxvYXQoZCk6MSxvfX0seD17dGVzdDpiKFwiaHNsXCIsXCJodWVcIikscGFyc2U6eShcImh1ZVwiLFwic2F0dXJhdGlvblwiLFwibGlnaHRuZXNzXCIpLHRyYW5zZm9ybTpmdW5jdGlvbihlKXt2YXIgdD1lLmh1ZSxuPWUuc2F0dXJhdGlvbixyPWUubGlnaHRuZXNzLG89ZS5hbHBoYSxpPXZvaWQgMD09PW8/MTpvO3JldHVyblwiaHNsYShcIitNYXRoLnJvdW5kKHQpK1wiLCBcIitnLnRyYW5zZm9ybShhKG4pKStcIiwgXCIrZy50cmFuc2Zvcm0oYShyKSkrXCIsIFwiK2EoZC50cmFuc2Zvcm0oaSkpK1wiKVwifX0saz1vKDAsMjU1KSxTPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSx1KSx7dHJhbnNmb3JtOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGsoZSkpfX0pLE89e3Rlc3Q6YihcInJnYlwiLFwicmVkXCIpLHBhcnNlOnkoXCJyZWRcIixcImdyZWVuXCIsXCJibHVlXCIpLHRyYW5zZm9ybTpmdW5jdGlvbihlKXt2YXIgdD1lLnJlZCxuPWUuZ3JlZW4scj1lLmJsdWUsbz1lLmFscGhhLGk9dm9pZCAwPT09bz8xOm87cmV0dXJuXCJyZ2JhKFwiK1MudHJhbnNmb3JtKHQpK1wiLCBcIitTLnRyYW5zZm9ybShuKStcIiwgXCIrUy50cmFuc2Zvcm0ocikrXCIsIFwiK2EoZC50cmFuc2Zvcm0oaSkpK1wiKVwifX0sTT17dGVzdDpiKFwiI1wiKSxwYXJzZTpmdW5jdGlvbihlKXt2YXIgdD1cIlwiLG49XCJcIixyPVwiXCIsbz1cIlwiO3JldHVybiBlLmxlbmd0aD41Pyh0PWUuc3Vic3RyKDEsMiksbj1lLnN1YnN0cigzLDIpLHI9ZS5zdWJzdHIoNSwyKSxvPWUuc3Vic3RyKDcsMikpOih0PWUuc3Vic3RyKDEsMSksbj1lLnN1YnN0cigyLDEpLHI9ZS5zdWJzdHIoMywxKSxvPWUuc3Vic3RyKDQsMSksdCs9dCxuKz1uLHIrPXIsbys9bykse3JlZDpwYXJzZUludCh0LDE2KSxncmVlbjpwYXJzZUludChuLDE2KSxibHVlOnBhcnNlSW50KHIsMTYpLGFscGhhOm8/cGFyc2VJbnQobywxNikvMjU1OjF9fSx0cmFuc2Zvcm06Ty50cmFuc2Zvcm19LEw9e3Rlc3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIE8udGVzdChlKXx8TS50ZXN0KGUpfHx4LnRlc3QoZSl9LHBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybiBPLnRlc3QoZSk/Ty5wYXJzZShlKTp4LnRlc3QoZSk/eC5wYXJzZShlKTpNLnBhcnNlKGUpfSx0cmFuc2Zvcm06ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSk/ZTplLmhhc093blByb3BlcnR5KFwicmVkXCIpP08udHJhbnNmb3JtKGUpOngudHJhbnNmb3JtKGUpfX0sXz1cIiR7Y31cIixQPVwiJHtufVwiO2Z1bmN0aW9uIEUoZSl7dmFyIHQ9W10sbj0wLHI9ZS5tYXRjaChsKTtyJiYobj1yLmxlbmd0aCxlPWUucmVwbGFjZShsLF8pLHQucHVzaC5hcHBseSh0LHIubWFwKEwucGFyc2UpKSk7dmFyIG89ZS5tYXRjaChpKTtyZXR1cm4gbyYmKGU9ZS5yZXBsYWNlKGksUCksdC5wdXNoLmFwcGx5KHQsby5tYXAodS5wYXJzZSkpKSx7dmFsdWVzOnQsbnVtQ29sb3JzOm4sdG9rZW5pc2VkOmV9fWZ1bmN0aW9uIGooZSl7cmV0dXJuIEUoZSkudmFsdWVzfWZ1bmN0aW9uIFIoZSl7dmFyIHQ9RShlKSxuPXQudmFsdWVzLHI9dC5udW1Db2xvcnMsbz10LnRva2VuaXNlZCxpPW4ubGVuZ3RoO3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHQ9byxuPTA7bjxpO24rKyl0PXQucmVwbGFjZShuPHI/XzpQLG48cj9MLnRyYW5zZm9ybShlW25dKTphKGVbbl0pKTtyZXR1cm4gdH19dmFyIEk9ZnVuY3Rpb24oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGU/MDplfSxWPXt0ZXN0OmZ1bmN0aW9uKGUpe3ZhciB0LG4scixvO3JldHVybiBpc05hTihlKSYmYyhlKSYmKG51bGwhPT0obj1udWxsPT09KHQ9ZS5tYXRjaChpKSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQubGVuZ3RoKSYmdm9pZCAwIT09bj9uOjApKyhudWxsIT09KG89bnVsbD09PShyPWUubWF0Y2gobCkpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmxlbmd0aCkmJnZvaWQgMCE9PW8/bzowKT4wfSxwYXJzZTpqLGNyZWF0ZVRyYW5zZm9ybWVyOlIsZ2V0QW5pbWF0YWJsZU5vbmU6ZnVuY3Rpb24oZSl7dmFyIHQ9aihlKTtyZXR1cm4gUihlKSh0Lm1hcChJKSl9fSxIPW5ldyBTZXQoW1wiYnJpZ2h0bmVzc1wiLFwiY29udHJhc3RcIixcInNhdHVyYXRlXCIsXCJvcGFjaXR5XCJdKTtmdW5jdGlvbiBBKGUpe3ZhciB0PWUuc2xpY2UoMCwtMSkuc3BsaXQoXCIoXCIpLG49dFswXSxyPXRbMV07aWYoXCJkcm9wLXNoYWRvd1wiPT09bilyZXR1cm4gZTt2YXIgbz0oci5tYXRjaChpKXx8W10pWzBdO2lmKCFvKXJldHVybiBlO3ZhciBhPXIucmVwbGFjZShvLFwiXCIpLGw9SC5oYXMobik/MTowO3JldHVybiBvIT09ciYmKGwqPTEwMCksbitcIihcIitsK2ErXCIpXCJ9dmFyIFQ9LyhbYS16LV0qKVxcKC4qP1xcKS9nLEQ9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LFYpLHtnZXRBbmltYXRhYmxlTm9uZTpmdW5jdGlvbihlKXt2YXIgdD1lLm1hdGNoKFQpO3JldHVybiB0P3QubWFwKEEpLmpvaW4oXCIgXCIpOmV9fSk7dC5hbHBoYT1kLHQuY29sb3I9TCx0LmNvbXBsZXg9Vix0LmRlZ3JlZXM9aCx0LmZpbHRlcj1ELHQuaGV4PU0sdC5oc2xhPXgsdC5udW1iZXI9dSx0LnBlcmNlbnQ9Zyx0LnByb2dyZXNzUGVyY2VudGFnZT13LHQucHg9dix0LnJnYlVuaXQ9Uyx0LnJnYmE9Tyx0LnNjYWxlPXAsdC52aD1DLHQudnc9bX0sODM4ODooZSx0LG4pPT57bi5yKHQpLG4uZCh0LHtmb2N1c2FibGU6KCk9PmIsaXNGb2N1c2FibGU6KCk9PmssaXNUYWJiYWJsZTooKT0+eSx0YWJiYWJsZTooKT0+d30pO3ZhciByPVtcImlucHV0Om5vdChbaW5lcnRdKVwiLFwic2VsZWN0Om5vdChbaW5lcnRdKVwiLFwidGV4dGFyZWE6bm90KFtpbmVydF0pXCIsXCJhW2hyZWZdOm5vdChbaW5lcnRdKVwiLFwiYnV0dG9uOm5vdChbaW5lcnRdKVwiLFwiW3RhYmluZGV4XTpub3Qoc2xvdCk6bm90KFtpbmVydF0pXCIsXCJhdWRpb1tjb250cm9sc106bm90KFtpbmVydF0pXCIsXCJ2aWRlb1tjb250cm9sc106bm90KFtpbmVydF0pXCIsJ1tjb250ZW50ZWRpdGFibGVdOm5vdChbY29udGVudGVkaXRhYmxlPVwiZmFsc2VcIl0pOm5vdChbaW5lcnRdKScsXCJkZXRhaWxzPnN1bW1hcnk6Zmlyc3Qtb2YtdHlwZTpub3QoW2luZXJ0XSlcIixcImRldGFpbHM6bm90KFtpbmVydF0pXCJdLG89ci5qb2luKFwiLFwiKSxhPVwidW5kZWZpbmVkXCI9PXR5cGVvZiBFbGVtZW50LGk9YT9mdW5jdGlvbigpe306RWxlbWVudC5wcm90b3R5cGUubWF0Y2hlc3x8RWxlbWVudC5wcm90b3R5cGUubXNNYXRjaGVzU2VsZWN0b3J8fEVsZW1lbnQucHJvdG90eXBlLndlYmtpdE1hdGNoZXNTZWxlY3RvcixsPSFhJiZFbGVtZW50LnByb3RvdHlwZS5nZXRSb290Tm9kZT9mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gbnVsbD09ZXx8bnVsbD09PSh0PWUuZ2V0Um9vdE5vZGUpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmNhbGwoZSl9OmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3ZvaWQgMDplLm93bmVyRG9jdW1lbnR9LHM9ZnVuY3Rpb24gZSh0LG4pe3ZhciByO3ZvaWQgMD09PW4mJihuPSEwKTt2YXIgbz1udWxsPT10fHxudWxsPT09KHI9dC5nZXRBdHRyaWJ1dGUpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmNhbGwodCxcImluZXJ0XCIpO3JldHVyblwiXCI9PT1vfHxcInRydWVcIj09PW98fG4mJnQmJmUodC5wYXJlbnROb2RlKX0sYz1mdW5jdGlvbihlLHQsbil7aWYocyhlKSlyZXR1cm5bXTt2YXIgcj1BcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoZS5xdWVyeVNlbGVjdG9yQWxsKG8pKTtyZXR1cm4gdCYmaS5jYWxsKGUsbykmJnIudW5zaGlmdChlKSxyLmZpbHRlcihuKX0sdT1mdW5jdGlvbiBlKHQsbixyKXtmb3IodmFyIGE9W10sbD1BcnJheS5mcm9tKHQpO2wubGVuZ3RoOyl7dmFyIGM9bC5zaGlmdCgpO2lmKCFzKGMsITEpKWlmKFwiU0xPVFwiPT09Yy50YWdOYW1lKXt2YXIgdT1jLmFzc2lnbmVkRWxlbWVudHMoKSxkPWUodS5sZW5ndGg/dTpjLmNoaWxkcmVuLCEwLHIpO3IuZmxhdHRlbj9hLnB1c2guYXBwbHkoYSxkKTphLnB1c2goe3Njb3BlUGFyZW50OmMsY2FuZGlkYXRlczpkfSl9ZWxzZXtpLmNhbGwoYyxvKSYmci5maWx0ZXIoYykmJihufHwhdC5pbmNsdWRlcyhjKSkmJmEucHVzaChjKTt2YXIgcD1jLnNoYWRvd1Jvb3R8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHIuZ2V0U2hhZG93Um9vdCYmci5nZXRTaGFkb3dSb290KGMpLGY9IXMocCwhMSkmJighci5zaGFkb3dSb290RmlsdGVyfHxyLnNoYWRvd1Jvb3RGaWx0ZXIoYykpO2lmKHAmJmYpe3ZhciBoPWUoITA9PT1wP2MuY2hpbGRyZW46cC5jaGlsZHJlbiwhMCxyKTtyLmZsYXR0ZW4/YS5wdXNoLmFwcGx5KGEsaCk6YS5wdXNoKHtzY29wZVBhcmVudDpjLGNhbmRpZGF0ZXM6aH0pfWVsc2UgbC51bnNoaWZ0LmFwcGx5KGwsYy5jaGlsZHJlbil9fXJldHVybiBhfSxkPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudGFiSW5kZXg8MCYmKHR8fC9eKEFVRElPfFZJREVPfERFVEFJTFMpJC8udGVzdChlLnRhZ05hbWUpfHxmdW5jdGlvbihlKXt2YXIgdCxuPW51bGw9PWV8fG51bGw9PT0odD1lLmdldEF0dHJpYnV0ZSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuY2FsbChlLFwiY29udGVudGVkaXRhYmxlXCIpO3JldHVyblwiXCI9PT1ufHxcInRydWVcIj09PW59KGUpKSYmaXNOYU4ocGFyc2VJbnQoZS5nZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiKSwxMCkpPzA6ZS50YWJJbmRleH0scD1mdW5jdGlvbihlLHQpe3JldHVybiBlLnRhYkluZGV4PT09dC50YWJJbmRleD9lLmRvY3VtZW50T3JkZXItdC5kb2N1bWVudE9yZGVyOmUudGFiSW5kZXgtdC50YWJJbmRleH0sZj1mdW5jdGlvbihlKXtyZXR1cm5cIklOUFVUXCI9PT1lLnRhZ05hbWV9LGg9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXQud2lkdGgscj10LmhlaWdodDtyZXR1cm4gMD09PW4mJjA9PT1yfSxnPWZ1bmN0aW9uKGUsdCl7cmV0dXJuISh0LmRpc2FibGVkfHxzKHQpfHxmdW5jdGlvbihlKXtyZXR1cm4gZihlKSYmXCJoaWRkZW5cIj09PWUudHlwZX0odCl8fGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5kaXNwbGF5Q2hlY2sscj10LmdldFNoYWRvd1Jvb3Q7aWYoXCJoaWRkZW5cIj09PWdldENvbXB1dGVkU3R5bGUoZSkudmlzaWJpbGl0eSlyZXR1cm4hMDt2YXIgbz1pLmNhbGwoZSxcImRldGFpbHM+c3VtbWFyeTpmaXJzdC1vZi10eXBlXCIpP2UucGFyZW50RWxlbWVudDplO2lmKGkuY2FsbChvLFwiZGV0YWlsczpub3QoW29wZW5dKSAqXCIpKXJldHVybiEwO2lmKG4mJlwiZnVsbFwiIT09biYmXCJsZWdhY3ktZnVsbFwiIT09bil7aWYoXCJub24temVyby1hcmVhXCI9PT1uKXJldHVybiBoKGUpfWVsc2V7aWYoXCJmdW5jdGlvblwiPT10eXBlb2Ygcil7Zm9yKHZhciBhPWU7ZTspe3ZhciBzPWUucGFyZW50RWxlbWVudCxjPWwoZSk7aWYocyYmIXMuc2hhZG93Um9vdCYmITA9PT1yKHMpKXJldHVybiBoKGUpO2U9ZS5hc3NpZ25lZFNsb3Q/ZS5hc3NpZ25lZFNsb3Q6c3x8Yz09PWUub3duZXJEb2N1bWVudD9zOmMuaG9zdH1lPWF9aWYoZnVuY3Rpb24oZSl7dmFyIHQsbixyLG8sYT1lJiZsKGUpLGk9bnVsbD09PSh0PWEpfHx2b2lkIDA9PT10P3ZvaWQgMDp0Lmhvc3Qscz0hMTtpZihhJiZhIT09ZSlmb3Iocz0hIShudWxsIT09KG49aSkmJnZvaWQgMCE9PW4mJm51bGwhPT0ocj1uLm93bmVyRG9jdW1lbnQpJiZ2b2lkIDAhPT1yJiZyLmNvbnRhaW5zKGkpfHxudWxsIT1lJiZudWxsIT09KG89ZS5vd25lckRvY3VtZW50KSYmdm9pZCAwIT09byYmby5jb250YWlucyhlKSk7IXMmJmk7KXt2YXIgYyx1LGQ7cz0hKG51bGw9PT0odT1pPW51bGw9PT0oYz1hPWwoaSkpfHx2b2lkIDA9PT1jP3ZvaWQgMDpjLmhvc3QpfHx2b2lkIDA9PT11fHxudWxsPT09KGQ9dS5vd25lckRvY3VtZW50KXx8dm9pZCAwPT09ZHx8IWQuY29udGFpbnMoaSkpfXJldHVybiBzfShlKSlyZXR1cm4hZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aDtpZihcImxlZ2FjeS1mdWxsXCIhPT1uKXJldHVybiEwfXJldHVybiExfSh0LGUpfHxmdW5jdGlvbihlKXtyZXR1cm5cIkRFVEFJTFNcIj09PWUudGFnTmFtZSYmQXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGUuY2hpbGRyZW4pLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVyblwiU1VNTUFSWVwiPT09ZS50YWdOYW1lfSkpfSh0KXx8ZnVuY3Rpb24oZSl7aWYoL14oSU5QVVR8QlVUVE9OfFNFTEVDVHxURVhUQVJFQSkkLy50ZXN0KGUudGFnTmFtZSkpZm9yKHZhciB0PWUucGFyZW50RWxlbWVudDt0Oyl7aWYoXCJGSUVMRFNFVFwiPT09dC50YWdOYW1lJiZ0LmRpc2FibGVkKXtmb3IodmFyIG49MDtuPHQuY2hpbGRyZW4ubGVuZ3RoO24rKyl7dmFyIHI9dC5jaGlsZHJlbi5pdGVtKG4pO2lmKFwiTEVHRU5EXCI9PT1yLnRhZ05hbWUpcmV0dXJuISFpLmNhbGwodCxcImZpZWxkc2V0W2Rpc2FibGVkXSAqXCIpfHwhci5jb250YWlucyhlKX1yZXR1cm4hMH10PXQucGFyZW50RWxlbWVudH1yZXR1cm4hMX0odCkpfSx2PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIShmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGYoZSkmJlwicmFkaW9cIj09PWUudHlwZX0oZSkmJiFmdW5jdGlvbihlKXtpZighZS5uYW1lKXJldHVybiEwO3ZhciB0LG49ZS5mb3JtfHxsKGUpLHI9ZnVuY3Rpb24oZSl7cmV0dXJuIG4ucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbdHlwZT1cInJhZGlvXCJdW25hbWU9XCInK2UrJ1wiXScpfTtpZihcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZ2b2lkIDAhPT13aW5kb3cuQ1NTJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB3aW5kb3cuQ1NTLmVzY2FwZSl0PXIod2luZG93LkNTUy5lc2NhcGUoZS5uYW1lKSk7ZWxzZSB0cnl7dD1yKGUubmFtZSl9Y2F0Y2goZSl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJMb29rcyBsaWtlIHlvdSBoYXZlIGEgcmFkaW8gYnV0dG9uIHdpdGggYSBuYW1lIGF0dHJpYnV0ZSBjb250YWluaW5nIGludmFsaWQgQ1NTIHNlbGVjdG9yIGNoYXJhY3RlcnMgYW5kIG5lZWQgdGhlIENTUy5lc2NhcGUgcG9seWZpbGw6ICVzXCIsZS5tZXNzYWdlKSwhMX12YXIgbz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKGVbbl0uY2hlY2tlZCYmZVtuXS5mb3JtPT09dClyZXR1cm4gZVtuXX0odCxlLmZvcm0pO3JldHVybiFvfHxvPT09ZX0oZSl9KHQpfHxkKHQpPDB8fCFnKGUsdCkpfSxDPWZ1bmN0aW9uKGUpe3ZhciB0PXBhcnNlSW50KGUuZ2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIiksMTApO3JldHVybiEhKGlzTmFOKHQpfHx0Pj0wKX0sbT1mdW5jdGlvbiBlKHQpe3ZhciBuPVtdLHI9W107cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCxvKXt2YXIgYT0hIXQuc2NvcGVQYXJlbnQsaT1hP3Quc2NvcGVQYXJlbnQ6dCxsPWQoaSxhKSxzPWE/ZSh0LmNhbmRpZGF0ZXMpOmk7MD09PWw/YT9uLnB1c2guYXBwbHkobixzKTpuLnB1c2goaSk6ci5wdXNoKHtkb2N1bWVudE9yZGVyOm8sdGFiSW5kZXg6bCxpdGVtOnQsaXNTY29wZTphLGNvbnRlbnQ6c30pfSkpLHIuc29ydChwKS5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuaXNTY29wZT9lLnB1c2guYXBwbHkoZSx0LmNvbnRlbnQpOmUucHVzaCh0LmNvbnRlbnQpLGV9KSxbXSkuY29uY2F0KG4pfSx3PWZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuIG49KHQ9dHx8e30pLmdldFNoYWRvd1Jvb3Q/dShbZV0sdC5pbmNsdWRlQ29udGFpbmVyLHtmaWx0ZXI6di5iaW5kKG51bGwsdCksZmxhdHRlbjohMSxnZXRTaGFkb3dSb290OnQuZ2V0U2hhZG93Um9vdCxzaGFkb3dSb290RmlsdGVyOkN9KTpjKGUsdC5pbmNsdWRlQ29udGFpbmVyLHYuYmluZChudWxsLHQpKSxtKG4pfSxiPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQ9dHx8e30pLmdldFNoYWRvd1Jvb3Q/dShbZV0sdC5pbmNsdWRlQ29udGFpbmVyLHtmaWx0ZXI6Zy5iaW5kKG51bGwsdCksZmxhdHRlbjohMCxnZXRTaGFkb3dSb290OnQuZ2V0U2hhZG93Um9vdH0pOmMoZSx0LmluY2x1ZGVDb250YWluZXIsZy5iaW5kKG51bGwsdCkpfSx5PWZ1bmN0aW9uKGUsdCl7aWYodD10fHx7fSwhZSl0aHJvdyBuZXcgRXJyb3IoXCJObyBub2RlIHByb3ZpZGVkXCIpO3JldHVybiExIT09aS5jYWxsKGUsbykmJnYodCxlKX0seD1yLmNvbmNhdChcImlmcmFtZVwiKS5qb2luKFwiLFwiKSxrPWZ1bmN0aW9uKGUsdCl7aWYodD10fHx7fSwhZSl0aHJvdyBuZXcgRXJyb3IoXCJObyBub2RlIHByb3ZpZGVkXCIpO3JldHVybiExIT09aS5jYWxsKGUseCkmJmcodCxlKX19LDk4Mjg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuRm9udHM9dm9pZCAwO2NvbnN0IG89cihuKDQ2NjgpKSxhPXIobig2MDM2KSksaT1yKG4oNTk0MSkpLGw9cihuKDI4MTMpKTt0LkZvbnRzPXtyZWd1bGFyOm8uZGVmYXVsdCxpdGFsaWM6YS5kZWZhdWx0LHNlbWlCb2xkOmkuZGVmYXVsdCxzZW1pQm9sZEl0YWxpYzpsLmRlZmF1bHR9fSw2MjE4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig5ODI4KSx0KX0sNDI0OTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn0sbz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkJ1dHRvblRleHRPbmx5PXQuQnV0dG9uU2Vjb25kYXJ5PXQuQnV0dG9uUHJpbWFyeT10LkJ1dHRvbj12b2lkIDA7Y29uc3QgYT1uKDU4OTMpLGk9byhuKDc1MTgpKSxsPW4oMTMzNSkscz1uKDk1MDcpLGM9big2MTI2KTt0LkJ1dHRvbj1lPT57dmFye2xhYmVsOnQsY2hpbGRyZW46bixzaXplOm89XCJiYXNlXCIsc2hhcGU6aT1cInNxdWFyZVwiLGtpbmQ6bD1cInByaW1hcnlcIixsYXlvdXQ6cz1cImZpdFwiLGhyZWY6Y309ZSxwPXIoZSxbXCJsYWJlbFwiLFwiY2hpbGRyZW5cIixcInNpemVcIixcInNoYXBlXCIsXCJraW5kXCIsXCJsYXlvdXRcIixcImhyZWZcIl0pO3JldHVybigwLGEuanN4KSh1LE9iamVjdC5hc3NpZ24oe2FzOmM/XCJhXCI6XCJidXR0b25cIixzaXplOm8sc2hhcGU6aSxraW5kOmwsbGF5b3V0OnN9LHAse2NoaWxkcmVuOnQ/KDAsYS5qc3gpKGQsT2JqZWN0LmFzc2lnbih7YWxpZ25JdGVtczpcImNlbnRlclwiLGp1c3RpZnlDb250ZW50OlwiY2VudGVyXCJ9LHtjaGlsZHJlbjp0fSkpOm59KSl9O2NvbnN0IHU9aS5kZWZhdWx0LmJ1dHRvbmBcbiAgLyogRGVmYXVsdCB2YWx1ZXMgdGhhdCBnZXQgb3ZlcnJpZGRlbiBieSB2YXJpYW50cyAqL1xuICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXRCYWNrZ3JvdW5kfTtcbiAgYm9yZGVyOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0QmFja2dyb3VuZH07XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5VGV4dH07XG5cbiAgLyogSW5qZWN0IHZhcmlhbnRzICovXG4gICR7KDAscy5nZXRWYXJpYW50Q1NTKShjLnZhcmlhbnRzLGMuVmFyaWFudC5zaXplKX1cbiAgJHsoMCxzLmdldFZhcmlhbnRDU1MpKGMudmFyaWFudHMsYy5WYXJpYW50LnNoYXBlKX1cbiAgJHsoMCxzLmdldFZhcmlhbnRDU1MpKGMudmFyaWFudHMsYy5WYXJpYW50LmtpbmQpfVxuICAkeygwLHMuZ2V0VmFyaWFudENTUykoYy52YXJpYW50cyxjLlZhcmlhbnQubGF5b3V0KX1cblxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbiAgb3V0bGluZTogbm9uZTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBsaW5lLWhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5saW5lSGVpZ2h0LnVpfTtcbiAgZm9udC13ZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUuZm9udFdlaWdodC5ib2xkfTtcbiAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIHZhcigtLW9wZW5maW4tdWktZ2xvYmFsVHJhbnNpdGlvbik7XG5cbiAgJjpub3QoOmRpc2FibGVkKSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5cbiAgJjpkaXNhYmxlZCxcbiAgJjphY3RpdmU6ZGlzYWJsZWQge1xuICAgIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dERpc2FibGVkfTtcbiAgICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dERpc2FibGVkfTtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0UGxhY2Vob2xkZXJ9O1xuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gIH1cbmAsZD0oMCxpLmRlZmF1bHQpKGwuQm94KWBcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YDAgJHtlLnB4LnhzbWFsbH1gfTtcbmA7dC5CdXR0b25QcmltYXJ5PWU9PigwLGEuanN4KSh0LkJ1dHRvbixPYmplY3QuYXNzaWduKHt9LGUse2tpbmQ6XCJwcmltYXJ5XCJ9KSksdC5CdXR0b25TZWNvbmRhcnk9ZT0+KDAsYS5qc3gpKHQuQnV0dG9uLE9iamVjdC5hc3NpZ24oe30sZSx7a2luZDpcInNlY29uZGFyeVwifSkpLHQuQnV0dG9uVGV4dE9ubHk9ZT0+KDAsYS5qc3gpKHQuQnV0dG9uLE9iamVjdC5hc3NpZ24oe30sZSx7a2luZDpcInRleHRPbmx5XCJ9KSl9LDYxMjY6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudmFyaWFudHM9dC5CdXR0b25TaGFwZT10LkJ1dHRvbkxheW91dD10LkJ1dHRvblNpemU9dC5CdXR0b25LaW5kPXQuVmFyaWFudD12b2lkIDA7Y29uc3Qgcj1uKDc1MTgpO3QuVmFyaWFudD17c2hhcGU6XCJzaGFwZVwiLHNpemU6XCJzaXplXCIsa2luZDpcImtpbmRcIixsYXlvdXQ6XCJsYXlvdXRcIn0sdC5CdXR0b25LaW5kPXtwcmltYXJ5OlwicHJpbWFyeVwiLHNlY29uZGFyeTpcInNlY29uZGFyeVwiLHRleHRPbmx5OlwidGV4dE9ubHlcIn0sdC5CdXR0b25TaXplPXtzbWFsbDpcInNtYWxsXCIsYmFzZTpcImJhc2VcIixsYXJnZTpcImxhcmdlXCJ9LHQuQnV0dG9uTGF5b3V0PXtmaXQ6XCJmaXRcIixmdWxsOlwiZnVsbFwifSx0LkJ1dHRvblNoYXBlPXtzcXVhcmU6XCJzcXVhcmVcIixwaWxsOlwicGlsbFwifSx0LnZhcmlhbnRzPXtbdC5WYXJpYW50LnNpemVdOntbdC5CdXR0b25TaXplLmJhc2VdOnIuY3NzYFxuICAgICAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YCR7ZS5weC5zbWFsbH0gJHtlLnB4LmxhcmdlfWB9O1xuICAgICAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmJhc2V9O1xuICAgIGAsW3QuQnV0dG9uU2l6ZS5zbWFsbF06ci5jc3NgXG4gICAgICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5gJHtlLnB4LnhzbWFsbH0gJHtlLnB4LmJhc2V9YH07XG4gICAgICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuc21hbGx9O1xuICAgIGAsW3QuQnV0dG9uU2l6ZS5sYXJnZV06ci5jc3NgXG4gICAgICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5gJHtlLnB4LmJhc2V9ICR7ZS5weC54bGFyZ2V9YH07XG4gICAgICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUubGFyZ2V9O1xuICAgIGB9LFt0LlZhcmlhbnQuc2hhcGVdOntbdC5CdXR0b25TaGFwZS5zcXVhcmVdOnIuY3NzYFxuICAgICAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMuc21hbGx9O1xuICAgIGAsW3QuQnV0dG9uU2hhcGUucGlsbF06ci5jc3NgXG4gICAgICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5waWxsfTtcbiAgICBgfSxbdC5WYXJpYW50LmxheW91dF06e1t0LkJ1dHRvbkxheW91dC5maXRdOnIuY3NzYFxuICAgICAgd2lkdGg6IGZpdC1jb250ZW50O1xuICAgIGAsW3QuQnV0dG9uTGF5b3V0LmZ1bGxdOnIuY3NzYFxuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgYH0sW3QuVmFyaWFudC5raW5kXTp7W3QuQnV0dG9uS2luZC5wcmltYXJ5XTpyLmNzc2BcbiAgICAgIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFByaW1hcnl9O1xuICAgICAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5fTtcblxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFByaW1hcnlIb3Zlcn07XG4gICAgICB9XG5cbiAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kUHJpbWFyeUFjdGl2ZX07XG4gICAgICB9XG5cbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFByaW1hcnlGb2N1c2VkfTtcbiAgICAgIH1cbiAgICBgLFt0LkJ1dHRvbktpbmQuc2Vjb25kYXJ5XTpyLmNzc2BcbiAgICAgIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFNlY29uZGFyeX07XG4gICAgICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFNlY29uZGFyeX07XG4gICAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kU2Vjb25kYXJ5VGV4dH07XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRTZWNvbmRhcnlIb3Zlcn07XG4gICAgICB9XG5cbiAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kU2Vjb25kYXJ5QWN0aXZlfTtcbiAgICAgIH1cblxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kU2Vjb25kYXJ5Rm9jdXNlZH07XG4gICAgICB9XG4gICAgYCxbdC5CdXR0b25LaW5kLnRleHRPbmx5XTpyLmNzc2BcbiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuXG4gICAgICAmOmFjdGl2ZSB7XG4gICAgICAgIG9wYWNpdHk6IDAuODtcbiAgICAgIH1cblxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0Rm9jdXNlZH07XG4gICAgICB9XG4gICAgYH19fSw0MTMwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig0MjQ5KSx0KSxvKG4oNjEyNiksdCl9LDM5MTE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2FyZENvbnRhaW5lcj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGE9cihuKDc1MTgpKSxpPW4oOTUwNyksbD1uKDEzMzUpO3QuQ2FyZENvbnRhaW5lcj1lPT4oMCxvLmpzeCkocyxPYmplY3QuYXNzaWduKHtzdHlsZTp7bWF4SGVpZ2h0OmUubWF4SGVpZ2h0LG92ZXJmbG93WTpcImF1dG9cIn0saWQ6XCJjYXJkLWNvbnRhaW5lclwiLFwiZGF0YS10ZXN0aWRcIjpcImNhcmQtY29udGFpbmVyXCJ9LHtjaGlsZHJlbjooMCxvLmpzeCkoYyx7Y2hpbGRyZW46ZS5jaGlsZHJlbn0pfSkpO2NvbnN0IHM9KDAsYS5kZWZhdWx0KShsLkJveClgXG4gIGRpc3BsYXk6IGJsb2NrO1xuICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDN9O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ1fTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+ZS5weC54c21hbGx9ICR7KHt0aGVtZTplfSk9PmUucHgueHNtYWxsfVxuICAgICR7KHt0aGVtZTplfSk9PmUucHgubGFyZ2V9IDBweDtcbiAgd2lkdGg6IDEwMCU7XG4gICR7aS5NaXhpbnMuc2Nyb2xsYmFyLmJhc2V9O1xuICBnYXA6ICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG5gLGM9YS5kZWZhdWx0LmRpdmBcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH0gJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH0gMHB4XG4gICAgJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcbiAgd2lkdGg6IDEwMCU7XG5gfSwxMjQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ29sbGFwc2libGVDYXJkU3RhdGVsZXNzPXQuQ29sbGFwc2libGVDYXJkPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksYT1uKDY2ODkpLGk9cihuKDc1MTgpKSxsPW4oMzEzNikscz1uKDk2MzQpLGM9bigxMzM1KSx1PW4oMzkxMSksZD1uKDc3NjkpLHA9big5NTA3KTt0LkNvbGxhcHNpYmxlQ2FyZD0oMCxhLmZvcndhcmRSZWYpKCgoZSxuKT0+e2NvbnN0W3IsaV09KDAsYS51c2VTdGF0ZSkoZS5leHBhbmRlZHx8ITEpO3JldHVybigwLG8uanN4KSh0LkNvbGxhcHNpYmxlQ2FyZFN0YXRlbGVzcyxPYmplY3QuYXNzaWduKHt9LGUse3JlZjpuLGV4cGFuZGVkOnIsb25FeHBhbmQ6ZT0+aSghZSl9KSl9KSksdC5Db2xsYXBzaWJsZUNhcmQuZGlzcGxheU5hbWU9XCJDb2xsYXBzaWJsZUNhcmRcIix0LkNvbGxhcHNpYmxlQ2FyZFN0YXRlbGVzcz0oMCxhLmZvcndhcmRSZWYpKCgoZSx0KT0+e3ZhciBuLHI7cmV0dXJuKDAsby5qc3hzKShmLE9iamVjdC5hc3NpZ24oe1wiZGF0YS10ZXN0aWRcIjpcImNvbGxhcHNpYmxlLWNhcmRcIn0se2NoaWxkcmVuOlsoMCxvLmpzeHMpKGcsT2JqZWN0LmFzc2lnbih7XCJhcmlhLWV4cGFuZGVkXCI6ZS5leHBhbmRlZCxcImRhdGEtdGVzdGlkXCI6XCJoZWFkaW5nLWNvbnRhaW5lclwiLHJlZjp0LHpJbmRleDpudWxsPT09KG49ZS5oZWFkZXJTZXR0aW5ncyl8fHZvaWQgMD09PW4/dm9pZCAwOm4uekluZGV4LGZpeGVkSGVhZGVyOm51bGw9PT0ocj1lLmhlYWRlclNldHRpbmdzKXx8dm9pZCAwPT09cj92b2lkIDA6ci5maXhlZEhlYWRlcixvbkNsaWNrOigpPT5lLm9uRXhwYW5kKGUuZXhwYW5kZWQpLHRhYkluZGV4OjAsb25LZXlEb3duOnQ9Pntzd2l0Y2godC5jb2RlKXtjYXNlXCJFbnRlclwiOmNhc2VcIlNwYWNlXCI6dC5wcmV2ZW50RGVmYXVsdCgpLGUub25FeHBhbmQoZS5leHBhbmRlZCl9fX0se2NoaWxkcmVuOlsoMCxvLmpzeCkoaCx7Y2hpbGRyZW46ZS50aXRsZX0pLCgwLG8uanN4cykoXCJkaXZcIixPYmplY3QuYXNzaWduKHtpZDpcImljb24tY29udGFpbmVyXCJ9LHtjaGlsZHJlbjpbdm9pZCAwIT09ZS5iYWRnZVRleHQmJigwLG8uanN4KShsLkJhZGdlLHtjb3VudDplLmJhZGdlVGV4dCxpZDpcImNvbGxhcHNpYmxlLWNhcmQtaGVhZGluZy1iYWRnZVwiLFwiZGF0YS10ZXN0aWRcIjpcImNvbGxhcHNpYmxlLWNhcmQtaGVhZGluZy1iYWRnZVwifSksKDAsby5qc3gpKHMuSWNvbix7aWNvbjplLmV4cGFuZGVkP1wiQ2hldnJvblVwSWNvblwiOlwiQ2hldnJvbkRvd25JY29uXCJ9KV19KSldfSkpLGUuZXhwYW5kZWQmJigwLG8uanN4KSh1LkNhcmRDb250YWluZXIsT2JqZWN0LmFzc2lnbih7bWF4SGVpZ2h0OmUubWF4SGVpZ2h0fHxcIm5vbmVcIn0se2NoaWxkcmVuOigwLG8uanN4KShcImRpdlwiLHtjaGlsZHJlbjplLmNoaWxkcmVufSl9KSldfSkpfSkpLHQuQ29sbGFwc2libGVDYXJkU3RhdGVsZXNzLmRpc3BsYXlOYW1lPVwiQ29sbGFwc2libGVDYXJkU3RhdGVsZXNzXCI7Y29uc3QgZj1pLmRlZmF1bHQuZGl2YFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDEwMCU7XG5gLGg9KDAsaS5kZWZhdWx0KShkLlRleHQpYFxuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgJHtwLk1peGlucy50ZXh0T3ZlcmZsb3d9O1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuYCxnPSgwLGkuZGVmYXVsdCkoYy5Cb3gpYFxuICBwb3NpdGlvbjogJHsoe2ZpeGVkSGVhZGVyOmV9KT0+ZT9cInN0aWNreVwiOlwicmVsYXRpdmVcIn07XG4gIHRvcDogJHsoe2ZpeGVkSGVhZGVyOmV9KT0+ZT8wOnZvaWQgMH07XG4gIHotaW5kZXg6ICR7KHt6SW5kZXg6ZX0pPT5lfTtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQzfTtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNX07XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDV9O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBnYXA6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGxpbmUtaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmxpbmVIZWlnaHQuaGVhZGluZ307XG4gIG91dGxpbmU6IG5vbmU7XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG4gIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciB2YXIoLS1vcGVuZmluLXVpLWdsb2JhbFRyYW5zaXRpb24pO1xuICB3aWR0aDogMTAwJTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuICAjaWNvbi1jb250YWluZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBtYXJnaW4tbGVmdDogMTBweDtcbiAgfVxuXG4gICNjb2xsYXBzaWJsZS1jYXJkLWhlYWRpbmctYmFkZ2Uge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFByaW1hcnl9O1xuICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgfVxuXG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kMn07XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNX07XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNX07XG4gIH1cblxuICAmOmZvY3VzIHtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJvcmRlck5ldXRyYWx9O1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYm9yZGVyTmV1dHJhbH07XG4gIH1cbmB9LDc0MDE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDEyNCksdCl9LDk2NDQ6KGUsdCk9Pnt2YXIgbjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkV4cGFuZERpcmVjdGlvbj12b2lkIDAsKG49dC5FeHBhbmREaXJlY3Rpb258fCh0LkV4cGFuZERpcmVjdGlvbj17fSkpW24uVXA9MF09XCJVcFwiLG5bbi5Eb3duPTFdPVwiRG93blwifSw0MDIxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkV4cGFuZGFibGVCdXR0b249dm9pZCAwO2NvbnN0IG89big1ODkzKSxhPW4oNjY4OSksaT1uKDQxMzApLGw9cihuKDc1MTgpKSxzPW4oOTYzNCksYz1uKDkxNDEpLHU9bigzMDMwKSxkPW4oMTMzNSkscD1uKDk2NDQpO3QuRXhwYW5kYWJsZUJ1dHRvbj1lPT57dmFyIHQsbixyLGwscyxmO2NvbnN0W2IseV09KDAsYS51c2VTdGF0ZSkoe3Nob3c6ITEscmVxdWVzdGVkQnlDb2xsYXBzZTohMX0pLHg9e3NpemU6ZS5zaXplLGtpbmQ6ZS5raW5kLGRpc2FibGVkOmUuZGlzYWJsZWQsdGFiSW5kZXg6ZS50YWJJbmRleH0saz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse3NoYXBlOmkuQnV0dG9uU2hhcGUuc3F1YXJlLFwiYXJpYS1sYWJlbFwiOm51bGwhPT0odD1lW1wiYXJpYS1sYWJlbFwiXSkmJnZvaWQgMCE9PXQ/dDpgUHJpbWFyeSBCdXR0b24gJHtlLnRpdGxlfWB9KSxTPW51bGwhPT0obj1lLmV4cGFuZERpcmVjdGlvbikmJnZvaWQgMCE9PW4/bjpwLkV4cGFuZERpcmVjdGlvbi5Eb3duO3JldHVybigwLGEudXNlRWZmZWN0KSgoKCk9PntpZighYi5yZXF1ZXN0ZWRCeUNvbGxhcHNlKXJldHVybjtjb25zdCBlPXNldFRpbWVvdXQoKCgpPT55KHtyZXF1ZXN0ZWRCeUNvbGxhcHNlOiExLHNob3c6ITF9KSksMjAwKTtyZXR1cm4oKT0+Y2xlYXJUaW1lb3V0KGUpfSksW2IucmVxdWVzdGVkQnlDb2xsYXBzZV0pLCgwLG8uanN4cykodyx7Y2hpbGRyZW46WygwLG8uanN4cykobSx7Y2hpbGRyZW46WygwLG8uanN4KShnLE9iamVjdC5hc3NpZ24oe30sayx7Y2hpbGRyZW46KDAsby5qc3gpKHYse2NoaWxkcmVuOm51bGwhPT0ocj1lLmNoaWxkcmVuKSYmdm9pZCAwIT09cj9yOmsudGl0bGV9KX0pKSxlLnNlY29uZGFyeUJ1dHRvbnMmJmUuc2Vjb25kYXJ5QnV0dG9ucy5sZW5ndGg+MCYmKDAsby5qc3gpKGQuQm94LE9iamVjdC5hc3NpZ24oe2lkOlwiZHJvcGRvd24tY29udGFpbmVyXCJ9LHtjaGlsZHJlbjooMCxvLmpzeHMpKEMsT2JqZWN0LmFzc2lnbih7fSx4LHtyb2xlOlwiY29tYm9ib3hcIixvbkNsaWNrOigpPT57Yi5yZXF1ZXN0ZWRCeUNvbGxhcHNlfHx5KHtyZXF1ZXN0ZWRCeUNvbGxhcHNlOiExLHNob3c6IWIuc2hvd30pfSxcImFyaWEtbGFiZWxcIjpcIkV4cGFuZCBTZWNvbmRhcnkgQnV0dG9ucyBQYW5lbFwiLFwiYXJpYS1leHBhbmRlZFwiOmIuc2hvd30se2NoaWxkcmVuOltTPT09cC5FeHBhbmREaXJlY3Rpb24uRG93biYmKDAsby5qc3gpKGgse2tpbmQ6bnVsbCE9PShsPWUua2luZCkmJnZvaWQgMCE9PWw/bDppLkJ1dHRvbktpbmQucHJpbWFyeSxpY29uOlwiQ2FyZXREb3duSWNvblwifSksUz09PXAuRXhwYW5kRGlyZWN0aW9uLlVwJiYoMCxvLmpzeCkoaCx7a2luZDpudWxsIT09KHM9ZS5raW5kKSYmdm9pZCAwIT09cz9zOmkuQnV0dG9uS2luZC5wcmltYXJ5LGljb246XCJDYXJldFVwSWNvblwifSldfSkpfSkpXX0pLGUuc2Vjb25kYXJ5QnV0dG9ucyYmZS5zZWNvbmRhcnlCdXR0b25zLmxlbmd0aD4wJiYoMCxvLmpzeCkoYy5BbmltYXRlUHJlc2VuY2Use2NoaWxkcmVuOmIuc2hvdyYmKDAsby5qc3gpKHUuRXhwYW5kYWJsZVBhbmVsLHtleHBhbmREaXJlY3Rpb246UyxzZWNvbmRhcnlCdXR0b25zOm51bGwhPT0oZj1lLnNlY29uZGFyeUJ1dHRvbnMpJiZ2b2lkIDAhPT1mP2Y6W10sc3RyZXRjaDplLnN0cmV0Y2hFeHBhbmRhYmxlUGFuZWwsY2xvc2VQYW5lbE9uU2Vjb25kYXJ5QnV0dG9uQ2xpY2s6ZS5jbG9zZVBhbmVsT25TZWNvbmRhcnlCdXR0b25DbGljayxvbkNvbGxhcHNlUmVxdWVzdDooKT0+eSh7c2hvdzohMSxyZXF1ZXN0ZWRCeUNvbGxhcHNlOiEwfSksYnV0dG9uU2l6ZTplLnNpemUsZG9jdW1lbnQ6ZS5kb2N1bWVudH0pfSldfSl9O2NvbnN0IGY9e1tpLkJ1dHRvbktpbmQucHJpbWFyeV06ZT0+ZS5wYWxldHRlLmJyYW5kUHJpbWFyeVRleHQsW2kuQnV0dG9uS2luZC5zZWNvbmRhcnldOmU9PmUucGFsZXR0ZS5icmFuZFNlY29uZGFyeVRleHQsW2kuQnV0dG9uS2luZC50ZXh0T25seV06ZT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fSxoPSgwLGwuZGVmYXVsdCkocy5JY29uKWBcbiAgc3ZnIHBhdGgge1xuICAgIGNvbG9yOiAkeyh7dGhlbWU6ZSxraW5kOnR9KT0+Zlt0XShlKX07XG4gIH1cbiAgbGluZS1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUubGluZUhlaWdodC51aX07XG4gIGZvbnQtd2VpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRXZWlnaHQuYm9sZH07XG5gLGc9KDAsbC5kZWZhdWx0KShpLkJ1dHRvbilgXG4gIG1hcmdpbi1yaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5weC54c21hbGx9O1xuYCx2PSgwLGwuZGVmYXVsdCkoZC5Cb3gpYFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgZGlzcGxheTogYmxvY2s7XG4gIG92ZXJmbG93OiBoaWRkZW47XG5gLEM9KDAsbC5kZWZhdWx0KShpLkJ1dHRvbilgXG4gIHdpZHRoOiAke2U9PmUudGhlbWUucHgueHhsYXJnZX07XG4gIHBhZGRpbmc6IDA7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuYCxtPWwuZGVmYXVsdC5kaXZgXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5gLHc9bC5kZWZhdWx0LmRpdmBcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5gfSwyMTI4OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnNldHVwRXhwYW5kYWJsZVBhbmVsPXZvaWQgMDtjb25zdCByPW4oOTY0NCk7dC5zZXR1cEV4cGFuZGFibGVQYW5lbD0oZSx0LG49ITEpPT57aWYoIWV8fDA9PT1lLmNoaWxkTm9kZXMubGVuZ3RoKXJldHVybjtjb25zdCBvPWUucGFyZW50RWxlbWVudCxhPW51bGw9PW8/dm9pZCAwOm8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKCFhKXJldHVybjtjb25zdCBsPWkuaGVpZ2h0LHM9aS53aWR0aDw9YS53aWR0aHx8bj9pLndpZHRoOmEud2lkdGgsYz1hLngrcz5kb2N1bWVudC5ib2R5LmNsaWVudFdpZHRofHxzPGEud2lkdGg7ZS5zdHlsZS53aWR0aD1gJHtzfXB4YCxlLnN0eWxlLm9wYWNpdHk9XCIxXCIsYz9lLnN0eWxlLnJpZ2h0PVwiMHB4XCI6ZS5zdHlsZS5sZWZ0PVwiMHB4XCIsdD09PXIuRXhwYW5kRGlyZWN0aW9uLkRvd24mJihlLnN0eWxlLnRvcD1gJHthLmhlaWdodH1weGApLHQ9PT1yLkV4cGFuZERpcmVjdGlvbi5VcCYmKGUuc3R5bGUudG9wPS0xKmwrXCJweFwiKX19LDMwMzA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuRXhwYW5kYWJsZVBhbmVsPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksYT1yKG4oNzUxOCkpLGk9big5MTQxKSxsPW4oNDEzMCkscz1uKDEzMzUpLGM9bigyMTI4KSx1PXIobig0NDgzKSksZD17dHlwZTpcInNwcmluZ1wiLGR1cmF0aW9uOi4yLGJvdW5jZTouMjV9O3QuRXhwYW5kYWJsZVBhbmVsPWU9Pnt2YXIgdDtjb25zdCBuPWAke2UucGFuZWxJZH0tZXhwYW5kYWJsZS1wYW5lbGA7cmV0dXJuKDAsby5qc3gpKHUuZGVmYXVsdCxPYmplY3QuYXNzaWduKHtmb2N1c1RyYXBPcHRpb25zOntmYWxsYmFja0ZvY3VzOmAjJHtufWAsY2xpY2tPdXRzaWRlRGVhY3RpdmF0ZXM6ITAsb25EZWFjdGl2YXRlOmUub25Db2xsYXBzZVJlcXVlc3QsaW5pdGlhbEZvY3VzOiExLGRvY3VtZW50OmUuZG9jdW1lbnQscmV0dXJuRm9jdXNPbkRlYWN0aXZhdGU6ITF9fSx7Y2hpbGRyZW46KDAsby5qc3gpKGgsT2JqZWN0LmFzc2lnbih7cmVmOnQ9PigwLGMuc2V0dXBFeHBhbmRhYmxlUGFuZWwpKHQsZS5leHBhbmREaXJlY3Rpb24sZS5zdHJldGNoKSx0YWJJbmRleDowLGlkOm4saW5pdGlhbDpcImluaXRpYWxcIixleGl0OlwiaGlkZGVuXCIsYnV0dG9uU2l6ZTpudWxsIT09KHQ9ZS5idXR0b25TaXplKSYmdm9pZCAwIT09dD90OmwuQnV0dG9uU2l6ZS5iYXNlLGFuaW1hdGU6XCJ2aXNpYmxlXCIscm9sZTpcIm1lbnVcIix0cmFuc2l0aW9uOmQsb25Nb3VzZU92ZXI6KCk9Pnt2YXIgZTtyZXR1cm4gbnVsbD09PShlPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmJsdXIoKX19LHtjaGlsZHJlbjplLnNlY29uZGFyeUJ1dHRvbnMubWFwKCgodCxuKT0+KDAsby5qc3gpKGwuQnV0dG9uLE9iamVjdC5hc3NpZ24oe2NsYXNzTmFtZTpcIm1lbnUtaXRlbVwiLHRhYkluZGV4Om4rMSx0aXRsZTp0LnRpdGxlLHJvbGU6XCJtZW51aXRlbVwiLHNpemU6ZS5idXR0b25TaXplLGRpc2FibGVkOnQuZGlzYWJsZWQsa2luZDpcInRleHRPbmx5XCIsb25DbGljazpuPT4oKHQsbik9PntlLmNsb3NlUGFuZWxPblNlY29uZGFyeUJ1dHRvbkNsaWNrPyhuLm9uQ2xpY2sodCksZS5vbkNvbGxhcHNlUmVxdWVzdCgpKTpuLm9uQ2xpY2sodCwoKCk9PmUub25Db2xsYXBzZVJlcXVlc3QoKSkpfSkobix0KSxcImFyaWEtbGFiZWxcIjp0LnRpdGxlfSx7Y2hpbGRyZW46KDAsby5qc3gpKHAsT2JqZWN0LmFzc2lnbih7XCJhcmlhLWxhYmVsXCI6dC50aXRsZX0se2NoaWxkcmVuOnQudGl0bGV9KSl9KSxuKSkpfSksXCJleHBhbmRhYmxlUGFuZWxcIil9KSl9O2NvbnN0IHA9KDAsYS5kZWZhdWx0KShzLkJveClgXG4gIHBhZGRpbmctYm90dG9tOiAxcHg7XG4gIHBhZGRpbmctdG9wOiAxcHg7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICBkaXNwbGF5OiBibG9jaztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbmAsZj17W2wuQnV0dG9uU2l6ZS5zbWFsbF06ZT0+ZS5weC5zbWFsbCxbbC5CdXR0b25TaXplLmJhc2VdOmU9PmUucHguYmFzZSxbbC5CdXR0b25TaXplLmxhcmdlXTplPT5lLnB4LmxhcmdlfSxoPSgwLGEuZGVmYXVsdCkoaS5tb3Rpb24uZGl2KWBcbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMuc21hbGx9O1xuICBvcGFjaXR5OiAwO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogJHtlPT5lLnRoZW1lLnB4Lnh4eGxhcmdlfTtcbiAgbWF4LXdpZHRoOiBtYXgtY29udGVudDtcbiAgbWluLXdpZHRoOiA4MHB4O1xuICBiYWNrZ3JvdW5kOiAke2U9PmUudGhlbWUucGFsZXR0ZS5iYWNrZ3JvdW5kNH07XG4gIGJveC1zaGFkb3c6ICR7ZT0+ZS50aGVtZS5zaGFkb3cuYmFzZX07XG4gIGhlaWdodDogbWF4LWNvbnRlbnQ7XG4gIHotaW5kZXg6IDEwMDtcblxuICAubWVudS1pdGVtIHtcbiAgICBib3JkZXItcmFkaXVzOiB1bnNldDtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIGJvcmRlcjogdHJhbnNwYXJlbnQ7XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgb3ZlcmZsb3c6IGNsaXA7XG4gICAgJiA+ICoge1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICB9XG4gICAgZm9udC13ZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUuZm9udFdlaWdodC5ub3JtYWx9O1xuICAgIHBhZGRpbmctdG9wOiAkeyh7dGhlbWU6ZSxidXR0b25TaXplOnR9KT0+Zlt0XShlKX07XG4gICAgcGFkZGluZy1ib3R0b206ICR7KHt0aGVtZTplLGJ1dHRvblNpemU6dH0pPT5mW3RdKGUpfTtcbiAgICBwYWRkaW5nLWxlZnQ6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuXG4gICAgOmZpcnN0LWNoaWxkIHtcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG4gICAgfVxuXG4gICAgOmxhc3QtY2hpbGQge1xuICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMuc21hbGx9O1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbiAgICB9XG5cbiAgICAmOmZvY3VzLFxuICAgICY6aG92ZXIge1xuICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICBiYWNrZ3JvdW5kOiAke2U9PmUudGhlbWUucGFsZXR0ZS5iYWNrZ3JvdW5kMn07XG4gICAgfVxuXG4gICAgJjpkaXNhYmxlZCxcbiAgICAmOmFjdGl2ZTpkaXNhYmxlZCB7XG4gICAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHRJbmFjdGl2ZX07XG4gICAgICBiYWNrZ3JvdW5kOiAke2U9PmUudGhlbWUucGFsZXR0ZS5iYWNrZ3JvdW5kNH07XG4gICAgICBvcGFjaXR5OiB1bnNldDtcbiAgICB9XG4gIH1cbmB9LDQ5MjU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDQwMjEpLHQpLG8obig5NjQ0KSx0KX0sOTY1NDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Db250ZW50TWVudT10LmZpbmRQYXRoVG9JdGVtV2l0aElkPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksYT1uKDY2ODkpLGk9bigzMTM3KSxsPXIobig3NTE4KSkscz1uKDEzMzUpO3QuZmluZFBhdGhUb0l0ZW1XaXRoSWQ9KGUsbixyKT0+e2lmKGUuaWQ9PT1yKXJldHVybiBuO2lmKGUuY2hpbGRyZW4pZm9yKGxldCBvPTA7bzxlLmNoaWxkcmVuLmxlbmd0aDsrK28pe2NvbnN0IGE9ZS5jaGlsZHJlbltvXTtuLnB1c2goYS5pZCk7Y29uc3QgaT0oMCx0LmZpbmRQYXRoVG9JdGVtV2l0aElkKShhLG4scik7aWYoaSlyZXR1cm4gaTtuLnBvcCgpfX0sdC5Db250ZW50TWVudT0oe3N0cnVjdHVyZTplLGhhbmRsZUNsaWNrSXRlbTpuLGhhbmRsZUJvb2ttYXJrSXRlbTpyLHRhcmdldElkOmx9KT0+e2NvbnN0W3MsdV09KDAsYS51c2VTdGF0ZSkoW10pLFtkLHBdPSgwLGEudXNlU3RhdGUpKCksZj0oMCxhLnVzZVJlZikobnVsbCksaD0oMCxhLnVzZUNhbGxiYWNrKSgoKCk9PntmLmN1cnJlbnQmJmYuY3VycmVudC5zY3JvbGxUbyh7bGVmdDpmLmN1cnJlbnQuc2Nyb2xsV2lkdGgsYmVoYXZpb3I6XCJzbW9vdGhcIn0pfSksW10pO3JldHVybigwLGEudXNlRWZmZWN0KSgoKCk9PntpZihsKXtjb25zdCBuPSgwLHQuZmluZFBhdGhUb0l0ZW1XaXRoSWQpKHtpZDpcIlwiLGNoaWxkcmVuOmV9LFtdLGwpO2lmKG4pcmV0dXJuIHUobiksdm9pZCBwKGBjb250ZW50LW1lbnUtaXRlbS0ke2x9YCl9cCh2b2lkIDApfSksW2xdKSwoMCxhLnVzZUVmZmVjdCkoKCgpPT57aCgpfSksW3NdKSwoMCxvLmpzeCkoYyxPYmplY3QuYXNzaWduKHtyZWY6Zn0se2NoaWxkcmVuOigwLG8uanN4KShpLkNvbnRlbnRNZW51Q29sdW1uLHtlbnRyaWVzOmUsZGVwdGg6MCxwYXRoOnMsdGFyZ2V0SXRlbUlkOmQsc2V0Q3VycmVudGx5U2VsZWN0ZWRQYXRoOnUsaGFuZGxlQ2xpY2tJdGVtOm4saGFuZGxlQm9va21hcmtJdGVtOnJ9KX0pKX07Y29uc3QgYz0oMCxsLmRlZmF1bHQpKHMuQm94KWBcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMTAwJTtcblxuICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDF9O1xuICBkaXNwbGF5OiBmbGV4O1xuXG4gIG92ZXJmbG93LXg6IGF1dG87XG4gIG92ZXJmbG93LXk6IGhpZGRlbjtcbmB9LDMxMzc6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ29udGVudE1lbnVDb2x1bW49dm9pZCAwO2NvbnN0IG89big1ODkzKSxhPXIobig3NTE4KSksaT1uKDY3NTgpLGw9big2Njg5KSxzPW4oMjY1OSk7dC5Db250ZW50TWVudUNvbHVtbj0oe2VudHJpZXM6ZSxkZXB0aDpuLHBhdGg6cix0YXJnZXRJdGVtSWQ6YSxzZXRDdXJyZW50bHlTZWxlY3RlZFBhdGg6aSxoYW5kbGVDbGlja0l0ZW06ZCxoYW5kbGVCb29rbWFya0l0ZW06cH0pPT57Y29uc3QgZj0oMCxsLnVzZVJlZikobnVsbCksaD1yW25dLGc9aD9lLmZpbmQoKGU9PmUuaWQ9PT1oKSk6dm9pZCAwOygwLGwudXNlRWZmZWN0KSgoKCk9PntpZihhJiZnKXtjb25zdCBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBjb250ZW50LW1lbnUtaXRlbS0ke2cuaWR9YCk7aWYoZSYmZi5jdXJyZW50KXtjb25zdCB0PWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLWYuY3VycmVudC5jaGlsZHJlblswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7Zi5jdXJyZW50LnNjcm9sbFRvKHt0b3A6dCxiZWhhdmlvcjpcInNtb290aFwifSl9fX0pLFthXSk7Y29uc3Qgdj0oMCxsLnVzZUNhbGxiYWNrKSgoZT0+e2koKHQ9PmU/KHRbbl09ZSx0LnNsaWNlKDAsbisxKSk6dC5zbGljZSgwLG4pKSl9KSxbXSk7cmV0dXJuKDAsby5qc3hzKShvLkZyYWdtZW50LHtjaGlsZHJlbjpbKDAsby5qc3gpKGMsT2JqZWN0LmFzc2lnbih7cmVmOmZ9LHtjaGlsZHJlbjplLmxlbmd0aD4wPygwLG8uanN4KShcImRpdlwiLHtjaGlsZHJlbjplLm1hcCgoZT0+KDAsby5qc3gpKHMuQ29udGVudE1lbnVJdGVtLHtlbnRyeTplLGFjdGl2ZTpcImZvbGRlclwiPT09ZS50eXBlJiZlLmlkPT09aCxoYW5kbGVDbGljazplPT57XCJmb2xkZXJcIj09PWUudHlwZT92KGUuaWQpOmQoZSl9LGhhbmRsZUJvb2ttYXJrOnB9LGUuaWQpKSl9KTooMCxvLmpzeCkodSx7Y2hpbGRyZW46XCJObyBjb250ZW50IGF2YWlsYWJsZS5cIn0pfSkpLGcmJlwiZm9sZGVyXCI9PT1nLnR5cGUmJigwLG8uanN4KSh0LkNvbnRlbnRNZW51Q29sdW1uLHtlbnRyaWVzOmcuY2hpbGRyZW4sZGVwdGg6bisxLHBhdGg6cix0YXJnZXRJdGVtSWQ6YSxzZXRDdXJyZW50bHlTZWxlY3RlZFBhdGg6aSxoYW5kbGVDbGlja0l0ZW06ZCxoYW5kbGVCb29rbWFya0l0ZW06cH0pXX0pfTtjb25zdCBjPSgwLGEuZGVmYXVsdCkoaS5NZW51RnJhbWUpYFxuICBoZWlnaHQ6IDEwMCU7XG4gIHdpZHRoOiAyNDFweDtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+ZS5weC54c21hbGx9O1xuICBvdmVyZmxvdy15OiBhdXRvO1xuXG4gIHBvc2l0aW9uOiB1bnNldDtcbiAgZmxleC1zaHJpbms6IDA7XG5cbiAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ1fTtcbmAsdT1hLmRlZmF1bHQuZGl2YFxuICBoZWlnaHQ6IDEwMCU7XG5cbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG5gfSwyNjU5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pfTpmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10fSksYT10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCIhPT1uJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmcih0LGUsbik7cmV0dXJuIG8odCxlKSx0fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNvbnRlbnRNZW51SXRlbT12b2lkIDA7Y29uc3QgaT1uKDU4OTMpLGw9YShuKDc1MTgpKSxzPW4oNjc1OCksYz1uKDk2MzQpLHU9bigxMDA5KTt0LkNvbnRlbnRNZW51SXRlbT0oe2VudHJ5OmUsYWN0aXZlOnQsaGFuZGxlQ2xpY2s6bixoYW5kbGVCb29rbWFyazpyfSk9Pntjb25zdHtsYWJlbDpvLHR5cGU6YX09ZTtyZXR1cm4oMCxpLmpzeHMpKGYsT2JqZWN0LmFzc2lnbih7aWQ6YGNvbnRlbnQtbWVudS1pdGVtLSR7ZS5pZH1gLG9uQ2xpY2s6KCk9Pm4oZSksYWN0aXZlOnR9LHtjaGlsZHJlbjpbXCJpdGVtXCI9PT1hJiYoMCxpLmpzeCkodS5JY29uV2l0aEZhbGxiYWNrLHtpY29uVXJsOmUuaWNvbn0pLCgwLGkuanN4KShkLE9iamVjdC5hc3NpZ24oe3NpemU6XCJiYXNlXCIsd2VpZ2h0Olwibm9ybWFsXCJ9LHtjaGlsZHJlbjpvfSkpLCgwLGkuanN4KShwLE9iamVjdC5hc3NpZ24oe3NpZGU6XCJyaWdodFwiLGJvb2ttYXJrZWQ6ZS5ib29rbWFya2VkLG9uQ2xpY2s6dD0+e251bGw9PXR8fHQuc3RvcFByb3BhZ2F0aW9uKCksciYmcihlKX0sXCJkYXRhLXRlc3RpZFwiOmBjb250ZW50LW1lbnUtaXRlbS0ke2UuaWR9LWJvb2ttYXJrLWljb25gfSx7Y2hpbGRyZW46ZS5ib29rbWFya2VkPygwLGkuanN4KShjLkljb24se2ljb246XCJTdGFyRmlsbGVkSWNvblwifSk6KDAsaS5qc3gpKGMuSWNvbix7aWNvbjpcIlN0YXJJY29uXCJ9KX0pKSxcImZvbGRlclwiPT09YSYmKDAsaS5qc3gpKHMuTWVudUl0ZW1JY29uQ29udGFpbmVyLE9iamVjdC5hc3NpZ24oe3NpZGU6XCJyaWdodFwiLFwiZGF0YS10ZXN0aWRcIjpgY29udGVudC1tZW51LWl0ZW0tJHtlLmlkfS1jaGV2cm9uLWljb25gfSx7Y2hpbGRyZW46KDAsaS5qc3gpKHMuTWVudUl0ZW1SaWdodEljb24se2ljb246XCJDaGV2cm9uUmlnaHRJY29uXCJ9KX0pKV19KSl9O2NvbnN0IGQ9KDAsbC5kZWZhdWx0KShzLk1lbnVJdGVtVGV4dClgXG4gIHBhZGRpbmctcmlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHgubGFyZ2V9O1xuYCxwPSgwLGwuZGVmYXVsdCkocy5NZW51SXRlbUljb25Db250YWluZXIpYFxuICAkeyh7Ym9va21hcmtlZDplfSk9PmU/bC5jc3NgXG4gICAgICAgICAgJiArICR7cy5NZW51SXRlbUljb25Db250YWluZXJ9IHtcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiB1bnNldDtcbiAgICAgICAgICB9XG4gICAgICAgIGA6bC5jc3NgXG4gICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgYH07XG5cbiAgc3ZnIHtcbiAgICBoZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHgubGFyZ2V9O1xuICAgIHdpZHRoOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmxhcmdlfTtcbiAgfVxuYCxmPSgwLGwuZGVmYXVsdCkocy5NZW51SXRlbUlubmVyQ29udGFpbmVyKWBcbiAgJHsoe3RoZW1lOmUsYWN0aXZlOnR9KT0+dCYmbC5jc3NgXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UucGFsZXR0ZS5iYWNrZ3JvdW5kM307XG4gICAgYH1cblxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDJ9O1xuXG4gICAgJHtwfSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG5cbiAgICAke3B9ICsgJHtzLk1lbnVJdGVtSWNvbkNvbnRhaW5lcn0ge1xuICAgICAgbWFyZ2luLWxlZnQ6IHVuc2V0O1xuICAgIH1cbiAgfVxuYH0sMTAwOTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5JY29uV2l0aEZhbGxiYWNrPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksYT1yKG4oNzUxOCkpLGk9big5MTA2KSxsPW4oOTYzNCk7dC5JY29uV2l0aEZhbGxiYWNrPSh7aWNvblVybDplLGFsdDp0fSk9Pntjb25zdCBuPSgwLGkudXNlSW1hZ2VMb2FkZXIpKGUpO3JldHVyblwiZXJyb3JcIj09PW4/KDAsby5qc3gpKHMse2NoaWxkcmVuOigwLG8uanN4KShsLkljb24se2ljb246XCJGYWxsYmFja0dsb2JlSWNvblwifSl9KTpcImxvYWRpbmdcIj09PW4/KDAsby5qc3gpKGMse30pOigwLG8uanN4KSh1LHtzcmM6ZSxhbHQ6dH0pfTtjb25zdCBzPWEuZGVmYXVsdC5kaXZgXG4gIGhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5weC5sYXJnZX07XG4gIHdpZHRoOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmxhcmdlfTtcbiAgbWFyZ2luLWxlZnQ6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuXG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbmAsYz1hLmRlZmF1bHQuZGl2YFxuICBoZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHgubGFyZ2V9O1xuICB3aWR0aDogJHsoe3RoZW1lOmV9KT0+ZS5weC5sYXJnZX07XG4gIG1hcmdpbi1sZWZ0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbmAsdT1hLmRlZmF1bHQuaW1nYFxuICBoZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHgubGFyZ2V9O1xuICB3aWR0aDogJHsoe3RoZW1lOmV9KT0+ZS5weC5sYXJnZX07XG4gIG1hcmdpbi1sZWZ0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcblxuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG5cbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG5gfSw5MTA2OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUltYWdlTG9hZGVyPXZvaWQgMDtjb25zdCByPW4oNjY4OSk7dC51c2VJbWFnZUxvYWRlcj1lPT57Y29uc3RbdCxuXT0oMCxyLnVzZVN0YXRlKShcImxvYWRpbmdcIik7cmV0dXJuKDAsci51c2VFZmZlY3QpKCgoKT0+e2lmKCFlKXJldHVybiB2b2lkIG4oXCJlcnJvclwiKTtuKFwibG9hZGluZ1wiKTtjb25zdCB0PW5ldyBJbWFnZSxyPSgpPT57bihcInN1Y2Nlc3NcIil9LG89KCk9PntuKFwiZXJyb3JcIil9O3JldHVybiB0LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsciksdC5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIixvKSx0LnNyYz1lLCgpPT57dC5yZW1vdmVFdmVudExpc3RlbmVyKFwibG9hZFwiLHIpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsbyl9fSksW2VdKSx0fX0sN2UzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig5NjU0KSx0KX0sNDQ3MTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DdXN0b21Db250ZXh0TWVudT10LkNPTlRFWFRfTUVOVV9BTklNQVRJT05fRFVSQVRJT049dC5QUklPUl9DT05URVhUX01FTlVfQ0xBU1M9dC5CQVNFX0NPTlRFWFRfTUVOVT10LkFDVElWRV9DT05URVhUX01FTlVfQ0xBU1M9dC5DT05URVhUX01FTlVfRlJBTUVfSUQ9dm9pZCAwO2NvbnN0IG89big1ODkzKSxhPW4oNjY4OSksaT1yKG4oNzUxOCkpLGw9bigyODUwKSxzPW4oODg5OSksYz1uKDk0NzgpLHU9bigyNDIxKSxkPW4oNDU3MSkscD1uKDI4MzgpLGY9big2NzU4KTt0LkNPTlRFWFRfTUVOVV9GUkFNRV9JRD1cImNvbnRleHRfbWVudV9mcmFtZVwiLHQuQUNUSVZFX0NPTlRFWFRfTUVOVV9DTEFTUz1cImFjdGl2ZV9jb250ZXh0X21lbnVcIix0LkJBU0VfQ09OVEVYVF9NRU5VPVwiYmFzZV9jb250ZXh0X21lbnVcIix0LlBSSU9SX0NPTlRFWFRfTUVOVV9DTEFTUz1cInByZXZpb3VzX2NvbnRleHRfbWVudVwiLHQuQ09OVEVYVF9NRU5VX0FOSU1BVElPTl9EVVJBVElPTj0yMDAsdC5DdXN0b21Db250ZXh0TWVudT0oe21lbnVUZW1wbGF0ZTplLG9uQ2xpY2s6bixpY29uOnIsb25NZW51UmVzaXplOmksb25Db250ZXh0TWVudVJlYWR5OmYsaXNXaW5kb3dzOnY9ITB9KT0+e3ZhciBDO2NvbnN0IG09KDAsYS51c2VSZWYpKG51bGwpLFt3LGJdPSgwLGEudXNlU3RhdGUpKCExKSxbeSx4XT0oMCxhLnVzZVN0YXRlKSh7d2lkdGg6MTYwLGhlaWdodDoxNjB9KSxbayxTXT0oMCxhLnVzZVN0YXRlKSgwKSxbTyxNXT0oMCxhLnVzZVN0YXRlKShbXSksW0wsX109KDAsYS51c2VTdGF0ZSkoKSxbUCxFXT0oMCxhLnVzZVN0YXRlKShbXSksW2osUl09KDAsYS51c2VTdGF0ZSkoZS5tYXAoKGU9PmUubGFiZWx8fFwiXCIpKSksW0ksVl09KDAsYS51c2VTdGF0ZSkoLTEpOygwLGEudXNlRWZmZWN0KSgoKCk9PntSKGUubWFwKChlPT5lLmxhYmVsfHxcIlwiKSkpLFYoai5maW5kSW5kZXgoKGU9PmU9PT1MKSkpfSksW2VdKTtjb25zdHt3aWR0aDpILGhlaWdodDpBfT0oMCxzLnVzZVJlc2l6ZUNvbnRleHRNZW51KShMKSx7aGFuZGxlTmF2aWdhdGVUb1N1Ym1lbnU6VCxoYW5kbGVOYXZpZ2F0ZUJhY2tUb1BhcmVudDpELGhhbmRsZU5hdmlnYXRlVG9CYXNlOkJ9PSgwLHUudXNlQ29udGV4dE1lbnVOYXZpZ2F0aW9uKShrLFMsUCxFLEwsXyx4LFYsTyxpKTtyZXR1cm4oMCxhLnVzZUVmZmVjdCkoKCgpPT57TSgoMCxjLmdldE1lbnVOYXZpZ2F0aW9uT3JkZXIpKGUpKSxfKHQuQkFTRV9DT05URVhUX01FTlUpLEUoW10pLHgoe3dpZHRoOkgsaGVpZ2h0OkF9KX0pLFtlXSksKDAsZC51c2VDb250ZXh0TWVudUtleWJvYXJkTmF2aWdhdGlvbikobnVsbD09PShDPU8uZmluZCgoZT0+ZS5wYXJlbnRMYWJlbD09PUwpKSl8fHZvaWQgMD09PUM/dm9pZCAwOkMubWVudVRlbXBsYXRlLFAsTCxJLFYsbixULEQsQiksKDAsYS51c2VFZmZlY3QpKCgoKT0+e20uY3VycmVudCYmKHd8fChmJiZmKCksYighMCkpKX0pLFttLmN1cnJlbnRdKSwoMCxvLmpzeCkoaCxPYmplY3QuYXNzaWduKHtpZDp0LkNPTlRFWFRfTUVOVV9GUkFNRV9JRCx0cmFuc2l0aW9uU3BlZWQ6ayxpc1dpbmRvd3M6dn0se2NoaWxkcmVuOk8ubWFwKCgoe3BhcmVudExhYmVsOmUsbWVudVRlbXBsYXRlOmF9KT0+KDAsby5qc3gpKFwiZGl2XCIsT2JqZWN0LmFzc2lnbih7cmVmOmU9PT1MP206dm9pZCAwfSx7Y2hpbGRyZW46KDAsby5qc3hzKShnLE9iamVjdC5hc3NpZ24oe2NsYXNzTmFtZTooMCxjLmdldENsYXNzTmFtZSkoZSxMLFApLGFjdGl2ZU1lbnVXaWR0aDp5LndpZHRoLHRyYW5zaXRpb25TcGVlZDprLGlkOmV9LHtjaGlsZHJlbjpbZSE9PXQuQkFTRV9DT05URVhUX01FTlU/KDAsby5qc3gpKGwuQ3VzdG9tQ29udGV4dE1lbnVJdGVtLHt0eXBlOlwic3VibWVudUhlYWRlclwiLGxhYmVsOmUsb25CYWNrOigpPT5EKGUsXCJjbGlja1wiKSxvbkNsb3NlOkIsc2hvd1Nob3VsZEhvbWVCdXR0b246UC5zbGljZSgyKS5pbmNsdWRlcyhlKXx8UC5sZW5ndGg+PTImJkw9PT1lLHNlbGVjdGVkOi0xPT09SX0sYCR7ZX0tc3VibWVudS1oZWFkZXJgKTpyJiYoMCxvLmpzeCkocC5Sb290TWVudUhlYWRlcix7aWNvbjpyfSksYS5tYXAoKCh0LHIpPT4oMCxvLmpzeCkobC5DdXN0b21Db250ZXh0TWVudUl0ZW0sT2JqZWN0LmFzc2lnbih7b25DbGljazooKT0+e3QuaGFzU3ViTWVudT9UKHQubGFiZWx8fFwiXCIpOm4odC5kYXRhKSxWKC0yKX19LHQse3N1Ym1lbnU6dC5oYXNTdWJNZW51LHNlbGVjdGVkOkk9PT1yfSksYCR7ZX0tJHt0LmxhYmVsfS0ke3J9YCkpKV19KSl9KSxlKSkpfSkpfTtjb25zdCBoPWkuZGVmYXVsdC5kaXZgXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWluLXdpZHRoOiBmaXQtY29udGVudDtcbiAgbWluLWhlaWdodDogZml0LWNvbnRlbnQ7XG4gIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQxfTtcbiAgdHJhbnNpdGlvbjogJHsoe3RyYW5zaXRpb25TcGVlZDplfSk9PmBhbGwgJHtlfW1zIGxpbmVhcmB9O1xuICBib3JkZXI6ICR7KHt0aGVtZTplLGlzV2luZG93czp0fSk9PnQmJmAxcHggc29saWQgJHtlLnBhbGV0dGUuYmFja2dyb3VuZDN9YH07XG4gIGJvcmRlci1yYWRpdXM6ICR7KHtpc1dpbmRvd3M6ZX0pPT4hZSYmXCIxMHB4XCJ9O1xuYCxnPSgwLGkuZGVmYXVsdCkoZi5NZW51RnJhbWUpYFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoJHsoe2FjdGl2ZU1lbnVXaWR0aDplfSk9PmAke2V9cHhgfSk7XG4gIHRyYW5zaXRpb246ICR7KHt0cmFuc2l0aW9uU3BlZWQ6ZX0pPT5gYWxsICR7ZX1tcyBjdWJpYy1iZXppZXIoMCwgMCwgMC41OCwgMSlgfTtcbiAgb3BhY2l0eTogMCU7XG5cbiAgJi5hY3RpdmVfY29udGV4dF9tZW51IHtcbiAgICB0cmFuc2Zvcm06IHVuc2V0O1xuICAgIG9wYWNpdHk6IDEwMCU7XG4gIH1cblxuICAmLnByZXZpb3VzX2NvbnRleHRfbWVudSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDAlKTtcbiAgICBvcGFjaXR5OiAwJTtcbiAgfVxuYH0sMjg1MDooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DdXN0b21Db250ZXh0TWVudUl0ZW09dm9pZCAwO2NvbnN0IHI9big2Njg5KSxvPW4oOTUzNyksYT1uKDE1NzcpLGk9big3NTAwKSxsPXtub3JtYWw6YS5Ob3JtYWxDdXN0b21Db250ZXh0TWVudUl0ZW0sY2hlY2tib3g6YS5Ob3JtYWxDdXN0b21Db250ZXh0TWVudUl0ZW0sc3VibWVudTphLk5vcm1hbEN1c3RvbUNvbnRleHRNZW51SXRlbSxzZXBhcmF0b3I6by5TZXBhcmF0b3JDdXN0b21Db250ZXh0TWVudUl0ZW0sc3VibWVudUhlYWRlcjppLlN1Ym1lbnVIZWFkZXJDdXN0b21Db250ZXh0TWVudUl0ZW19O3QuQ3VzdG9tQ29udGV4dE1lbnVJdGVtPSh7dHlwZTplPVwibm9ybWFsXCIsaWNvbjp0LGxhYmVsOm4sZW5hYmxlZDpvPSEwLGNoZWNrZWQ6YSxzdWJtZW51Omksc2hvd1Nob3VsZEhvbWVCdXR0b246cyxvbkNsaWNrOmMsb25DbG9zZTp1LG9uQmFjazpkLHNlbGVjdGVkOnB9KT0+e2NvbnN0IGY9bFtlXTtsZXQgaDtzd2l0Y2goZSl7Y2FzZVwibm9ybWFsXCI6Y2FzZVwiY2hlY2tib3hcIjpoPXt0eXBlOmUsbGFiZWw6bixpY29uOnQsZW5hYmxlZDpvLGNoZWNrZWQ6YSxzZWxlY3RlZDpwfTticmVhaztjYXNlXCJzdWJtZW51XCI6aD17bGFiZWw6bixlbmFibGVkOm8sY2hlY2tlZDphLHN1Ym1lbnU6aSxzZWxlY3RlZDpwfTticmVhaztjYXNlXCJzdWJtZW51SGVhZGVyXCI6aD17bGFiZWw6bixzaG93U2hvdWxkSG9tZUJ1dHRvbjpzLG9uQ2xvc2U6dSxvbkJhY2s6ZCxzZWxlY3RlZDpwfTticmVhaztjYXNlXCJzZXBhcmF0b3JcIjpoPXt9fXJldHVybigwLHIuY3JlYXRlRWxlbWVudCkoZixPYmplY3QuYXNzaWduKHt9LGgse2tleTpuLG9uQ2xpY2s6Y30pKX19LDE1Nzc6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTm9ybWFsQ3VzdG9tQ29udGV4dE1lbnVJdGVtPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksYT1yKG4oNzUxOCkpLGk9big5NjM0KSxsPW4oNjc1OCk7dC5Ob3JtYWxDdXN0b21Db250ZXh0TWVudUl0ZW09KHt0eXBlOmUsbGFiZWw6dCxlbmFibGVkOm49ITAsY2hlY2tlZDpyLHN1Ym1lbnU6YSxvbkNsaWNrOmksc2VsZWN0ZWQ6Y30pPT4oMCxvLmpzeCkobC5NZW51SXRlbUNvbnRhaW5lcix7Y2hpbGRyZW46KDAsby5qc3hzKShsLk1lbnVJdGVtSW5uZXJDb250YWluZXIsT2JqZWN0LmFzc2lnbih7b25DbGljazpuP2k6dm9pZCAwLGVuYWJsZWQ6bi50b1N0cmluZygpLHNlbGVjdGVkOmN9LHtjaGlsZHJlbjpbXCJjaGVja2JveFwiPT09ZSYmKDAsby5qc3gpKGwuTWVudUl0ZW1JY29uQ29udGFpbmVyLE9iamVjdC5hc3NpZ24oe3NpZGU6XCJsZWZ0XCJ9LHtjaGlsZHJlbjooMCxvLmpzeCkocyx7aWNvbjpcIkNoZWNrSWNvblwiLGVuYWJsZWQ6bi50b1N0cmluZygpLGNoZWNrZWQ6cn0pfSkpLCgwLG8uanN4KShsLk1lbnVJdGVtVGV4dCxPYmplY3QuYXNzaWduKHtzaXplOlwiYmFzZVwiLHdlaWdodDpcIm5vcm1hbFwiLGVuYWJsZWQ6bn0se2NoaWxkcmVuOnR9KSksYSYmKDAsby5qc3gpKGwuTWVudUl0ZW1JY29uQ29udGFpbmVyLE9iamVjdC5hc3NpZ24oe3NpZGU6XCJyaWdodFwifSx7Y2hpbGRyZW46KDAsby5qc3gpKGwuTWVudUl0ZW1SaWdodEljb24se2ljb246XCJDaGV2cm9uUmlnaHRJY29uXCIsZW5hYmxlZDpufSl9KSldfSkpfSk7Y29uc3Qgcz0oMCxhLmRlZmF1bHQpKGkuSWNvbilgXG4gIHN2ZyBwYXRoIHtcbiAgICBmaWxsOiAkeyh7dGhlbWU6ZSxlbmFibGVkOnQsY2hlY2tlZDpufSk9PlwidHJ1ZVwiPT09dD9uP2UucGFsZXR0ZS50ZXh0RGVmYXVsdDpcInRyYW5zcGFyZW50XCI6ZS5wYWxldHRlLnRleHRJbmFjdGl2ZX07XG4gICAgc3Ryb2tlLXdpZHRoOiAxLjI1O1xuICB9XG5gfSwyODM4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlJvb3RNZW51SGVhZGVyPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksYT1yKG4oNzUxOCkpLGk9bigxMzM1KSxsPW4oOTUzNyk7dC5Sb290TWVudUhlYWRlcj0oe2ljb246ZX0pPT4oMCxvLmpzeHMpKG8uRnJhZ21lbnQse2NoaWxkcmVuOlsoMCxvLmpzeCkocyx7Y2hpbGRyZW46ZX0pLCgwLG8uanN4KShsLlNlcGFyYXRvckN1c3RvbUNvbnRleHRNZW51SXRlbSx7fSldfSk7Y29uc3Qgcz0oMCxhLmRlZmF1bHQpKGkuQm94KWBcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMjhweDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAwIDAgMCAke2UucHgubGFyZ2V9YH07XG5gfSw5NTM3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlNlcGFyYXRvckN1c3RvbUNvbnRleHRNZW51SXRlbT12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGE9bigxMzM1KSxpPXIobig3NTE4KSk7dC5TZXBhcmF0b3JDdXN0b21Db250ZXh0TWVudUl0ZW09KCk9PigwLG8uanN4KShsLE9iamVjdC5hc3NpZ24oe1wiZGF0YS10ZXN0aWRcIjpcImN1c3RvbS1jb250ZXh0LW1lbnUtc2VwYXJhdG9yXCJ9LHtjaGlsZHJlbjooMCxvLmpzeCkocyx7fSl9KSk7Y29uc3QgbD0oMCxpLmRlZmF1bHQpKGEuQm94KWBcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9IDA7XG5gLHM9aS5kZWZhdWx0LmhyYFxuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxcHg7XG4gIGJvcmRlcjogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQzfTtcbmB9LDc1MDA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuU3VibWVudUhlYWRlckN1c3RvbUNvbnRleHRNZW51SXRlbT12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGE9big2Njg5KSxpPXIobig3NTE4KSksbD1uKDk2MzQpLHM9big3NzY5KSxjPW4oMTMzNSksdT1uKDk1MzcpO3QuU3VibWVudUhlYWRlckN1c3RvbUNvbnRleHRNZW51SXRlbT0oe2xhYmVsOmUsc2hvd1Nob3VsZEhvbWVCdXR0b246dCxvbkNsb3NlOm4sb25CYWNrOnIsc2VsZWN0ZWQ6aX0pPT57Y29uc3QgbD0oMCxhLnVzZUNhbGxiYWNrKSgoZT0+e2Uuc3RvcFByb3BhZ2F0aW9uKCksbnVsbD09cnx8cigpfSksW3JdKSxzPSgwLGEudXNlQ2FsbGJhY2spKChlPT57ZS5zdG9wUHJvcGFnYXRpb24oKSxudWxsPT1ufHxuKCl9KSxbbl0pO3JldHVybigwLG8uanN4cykoby5GcmFnbWVudCx7Y2hpbGRyZW46WygwLG8uanN4cykoZCx7Y2hpbGRyZW46WygwLG8uanN4KShwLE9iamVjdC5hc3NpZ24oe3NpZGU6XCJsZWZ0XCIsc2VsZWN0ZWQ6aX0se2NoaWxkcmVuOigwLG8uanN4KShmLHtpY29uOlwiQXJyb3dMZWZ0SWNvblwiLG9uQ2xpY2s6bCxpZDpcImJhY2staWNvblwiLHNlbGVjdGVkOml9KX0pKSwoMCxvLmpzeCkoaCxPYmplY3QuYXNzaWduKHtzaXplOlwiYmFzZVwiLHdlaWdodDpcIm5vcm1hbFwifSx7Y2hpbGRyZW46ZX0pKSx0JiYoMCxvLmpzeCkocCxPYmplY3QuYXNzaWduKHtzaWRlOlwicmlnaHRcIn0se2NoaWxkcmVuOigwLG8uanN4KShnLHtpY29uOlwiQ3Jvc3MySWNvblwiLG9uQ2xpY2s6cyxpZDpcImNsb3NlLWljb25cIn0pfSkpXX0pLCgwLG8uanN4KSh1LlNlcGFyYXRvckN1c3RvbUNvbnRleHRNZW51SXRlbSx7fSldfSl9O2NvbnN0IGQ9KDAsaS5kZWZhdWx0KShjLkJveClgXG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDI4cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMuc21hbGx9O1xuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5gMCAke2UucHguc21hbGx9IDAgJHtlLnB4LnNtYWxsfWB9O1xuYCxwPSgwLGkuZGVmYXVsdCkoYy5Cb3gpYFxuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZSxzaWRlOnR9KT0+XCJyaWdodFwiPT09dD9gMCAke2UucHguc21hbGx9IDAgMGA6YDAgMCAwICR7ZS5weC5zbWFsbH1gfTtcbiAgbWFyZ2luLWxlZnQ6ICR7KHtzaWRlOmV9KT0+XCJyaWdodFwiPT09ZT9cImF1dG9cIjowfTtcbmAsZj0oMCxpLmRlZmF1bHQpKGwuSWNvbilgXG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3NlbGVjdGVkOmUsdGhlbWU6dH0pPT5lP3QucGFsZXR0ZS5iYWNrZ3JvdW5kMzpcInRyYW5zcGFyZW50XCJ9O1xuICBjb2xvcjogJHsoe3RoZW1lOmUsc2VsZWN0ZWQ6dH0pPT50P2UucGFsZXR0ZS50ZXh0RGVmYXVsdDplLnBhbGV0dGUudGV4dEhlbHB9O1xuICBzdHJva2U6ICR7KHt0aGVtZTplLHNlbGVjdGVkOnR9KT0+dD9lLnBhbGV0dGUudGV4dERlZmF1bHQ6ZS5wYWxldHRlLnRleHRIZWxwfTtcbiAgc3Ryb2tlLXdpZHRoOiAwLjI1O1xuXG4gICY6aG92ZXIge1xuICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICAgIHN0cm9rZTogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgfVxuYCxoPSgwLGkuZGVmYXVsdCkocy5UZXh0KWBcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0SGVscH07XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAwICR7ZS5weC54eHhsYXJnZX0gMCAke2UucHguc21hbGx9YH07XG4gIGN1cnNvcjogZGVmYXVsdDtcbmAsZz0oMCxpLmRlZmF1bHQpKGwuSWNvbilgXG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dEhlbHB9O1xuICBzdHJva2U6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0SGVscH07XG4gIHN0cm9rZS13aWR0aDogMC4yNTtcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG5cbiAgJjpob3ZlciB7XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gICAgc3Ryb2tlOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICB9XG5gfSwyNDUyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig0NDcxKSx0KX0sNDU3MTooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VDb250ZXh0TWVudUtleWJvYXJkTmF2aWdhdGlvbj12b2lkIDA7Y29uc3Qgcj1uKDY2ODkpLG89big0NDcxKTt0LnVzZUNvbnRleHRNZW51S2V5Ym9hcmROYXZpZ2F0aW9uPShlLHQsbixhLGksbCxzLGMsdSk9Pntjb25zdCBkPXQ9Pnt2YXIgbixyLG87cmV0dXJuXCJzZXBhcmF0b3JcIj09PShudWxsPT09KG49ZVt0XSl8fHZvaWQgMD09PW4/dm9pZCAwOm4udHlwZSl8fCExPT09KG51bGw9PT0ocj1lW3RdKXx8dm9pZCAwPT09cj92b2lkIDA6ci5lbmFibGVkKXx8ITE9PT0obnVsbD09PShvPWVbdF0pfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLnZpc2libGUpfSxwPSgwLHIudXNlQ2FsbGJhY2spKCgoKT0+e2koKHQ9PntsZXQgbj10O2Rve2lmKG49PT0obnVsbD09ZT92b2lkIDA6ZS5sZW5ndGgpLTEpYnJlYWs7bis9MX13aGlsZShkKG4pKTtyZXR1cm4gZChuKT90Om59KSl9KSxbaSxlXSksZj0oMCxyLnVzZUNhbGxiYWNrKSgoKCk9PntpKChlPT57bGV0IHQ9ZTtkb3tpZihuPT09by5CQVNFX0NPTlRFWFRfTUVOVSYmMD09PXR8fC0xPT09dClicmVhazt0LT0xfXdoaWxlKGQodCkpO3JldHVybiB0fSkpfSksW2ksZV0pLGg9KDAsci51c2VDYWxsYmFjaykoKCgpPT57aShuPT09by5CQVNFX0NPTlRFWFRfTUVOVT8wOi0xKX0pLFtpLG5dKSxnPSgwLHIudXNlQ2FsbGJhY2spKCgoKT0+e2koKHQ9Pntmb3IobGV0IG49ZS5sZW5ndGgtMTtuPj10O24tLSlpZighZChuKSlyZXR1cm4gbjtyZXR1cm4gdH0pKX0pLFtudWxsPT1lP3ZvaWQgMDplLmxlbmd0aCxpXSksdj0oMCxyLnVzZUNhbGxiYWNrKSgoKCk9Pnt2YXIgdCxyO2lmKG51bGw9PT0odD1lW2FdKXx8dm9pZCAwPT09dD92b2lkIDA6dC5oYXNTdWJNZW51KXMoKG51bGw9PT0ocj1lW2FdKXx8dm9pZCAwPT09cj92b2lkIDA6ci5sYWJlbCl8fFwiXCIpO2Vsc2V7aWYoLTE9PT1hKXJldHVybiB2b2lkIGMobixcImtleWJvYXJkXCIpO2woZVthXS5kYXRhKX1pKC0xKX0pLFtpLGwscyxlLGEsYyxuXSksQz0oMCxyLnVzZUNhbGxiYWNrKSgoKCk9Pnt2YXIgdCxuOyhudWxsPT09KHQ9ZVthXSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuaGFzU3ViTWVudSkmJihzKChudWxsPT09KG49ZVthXSl8fHZvaWQgMD09PW4/dm9pZCAwOm4ubGFiZWwpfHxcIlwiKSxpKC0xKSl9KSxbaSxzLGUsYV0pLG09KDAsci51c2VDYWxsYmFjaykoKCgpPT57KHQuc2xpY2UoMSkuaW5jbHVkZXMobil8fChudWxsPT10P3ZvaWQgMDp0Lmxlbmd0aCk+PTEpJiZjKG4sXCJrZXlib2FyZFwiKX0pLFtjLHQsbl0pLHc9KDAsci51c2VDYWxsYmFjaykoKCgpPT57dC5zbGljZSgyKS5pbmNsdWRlcyhuKXx8KG51bGw9PXQ/dm9pZCAwOnQubGVuZ3RoKT49Mj91KCk6bCh7dHlwZTpcImNsb3NlXCJ9KX0pLFt1LHQsbl0pOygwLHIudXNlRWZmZWN0KSgoKCk9Pntjb25zdCBlPWU9Pntzd2l0Y2goZS5rZXkpe2Nhc2VcIkFycm93RG93blwiOnAoKTticmVhaztjYXNlXCJBcnJvd1VwXCI6ZigpO2JyZWFrO2Nhc2VcIkhvbWVcIjpjYXNlXCJQYWdlVXBcIjpoKCk7YnJlYWs7Y2FzZVwiRW5kXCI6Y2FzZVwiUGFnZURvd25cIjpnKCk7YnJlYWs7Y2FzZVwiRW50ZXJcIjp2KCk7YnJlYWs7Y2FzZVwiQXJyb3dSaWdodFwiOkMoKTticmVhaztjYXNlXCJBcnJvd0xlZnRcIjptKCk7YnJlYWs7Y2FzZVwiRXNjYXBlXCI6dygpfX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsZSksKCk9Pntkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGUpfX0pLFtwLGYsaCxnLHYsQyxtLHddKX19LDI0MjE6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlQ29udGV4dE1lbnVOYXZpZ2F0aW9uPXZvaWQgMDtjb25zdCByPW4oNjY4OSksbz1uKDQ0NzEpO3QudXNlQ29udGV4dE1lbnVOYXZpZ2F0aW9uPShlLHQsbixhLGksbCxzLGMsdSxkKT0+e2NvbnN0IHA9KDAsci51c2VDYWxsYmFjaykoKGU9Pntjb25zdCB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpLG49bnVsbD09dD92b2lkIDA6dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57aGVpZ2h0OihudWxsPT1uP3ZvaWQgMDpuLmhlaWdodCl8fDAsd2lkdGg6KG51bGw9PW4/dm9pZCAwOm4ud2lkdGgpfHwwfX0pLFtdKTtyZXR1cm57aGFuZGxlTmF2aWdhdGVUb1N1Ym1lbnU6KDAsci51c2VDYWxsYmFjaykoKHI9Pntjb25zdHtoZWlnaHQ6Yyx3aWR0aDp1fT1wKHIpO2QmJmQoYyx1KSxlfHx0KG8uQ09OVEVYVF9NRU5VX0FOSU1BVElPTl9EVVJBVElPTikscyh7d2lkdGg6dSxoZWlnaHQ6Y30pLGwociksYShbLi4ubixpXSl9KSxbaSxuLGEsZCx0LHBdKSxoYW5kbGVOYXZpZ2F0ZUJhY2tUb1BhcmVudDooMCxyLnVzZUNhbGxiYWNrKSgoKGUsdD1cImNsaWNrXCIpPT57aWYoZCl7Y29uc3QgZT0xPT09bi5sZW5ndGg/by5CQVNFX0NPTlRFWFRfTUVOVTpuW24ubGVuZ3RoLTFdLHtoZWlnaHQ6dCx3aWR0aDpyfT1wKGUpO2QodCxyKX1jb25zdCByPW4saT1yLnBvcCgpLHM9dS5maW5kKChlPT5lLnBhcmVudExhYmVsPT09aSkpO2woaSksYShyKSxjKFwia2V5Ym9hcmRcIj09PXQ/KG51bGw9PXM/dm9pZCAwOnMubWVudVRlbXBsYXRlLmZpbmRJbmRleCgodD0+dC5sYWJlbD09PWUpKSl8fDA6LTEpfSksW24sYSxjLHAsZCx1XSksaGFuZGxlTmF2aWdhdGVUb0Jhc2U6KDAsci51c2VDYWxsYmFjaykoKCgpPT57aWYoZCl7Y29uc3R7aGVpZ2h0OmUsd2lkdGg6dH09cChvLkJBU0VfQ09OVEVYVF9NRU5VKTtkKGUsdCl9bChvLkJBU0VfQ09OVEVYVF9NRU5VKSxhKFtdKSxjKC0xKX0pLFtsLGEsYyxwLGRdKX19fSw4ODk5OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZVJlc2l6ZUNvbnRleHRNZW51PXZvaWQgMDtjb25zdCByPW4oNjY4OSksbz1uKDQ0NzEpO3QudXNlUmVzaXplQ29udGV4dE1lbnU9ZT0+e2NvbnN0W3Qsbl09KDAsci51c2VTdGF0ZSkoe2hlaWdodDoxNjAsd2lkdGg6MTYwfSk7cmV0dXJuKDAsci51c2VFZmZlY3QpKCgoKT0+e2NvbnN0IHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSkscj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChvLkNPTlRFWFRfTUVOVV9GUkFNRV9JRCk7aWYoIXQpcmV0dXJuO2NvbnN0IGE9bmV3IFJlc2l6ZU9ic2VydmVyKChlPT57Zm9yKGNvbnN0IHQgb2YgZSl7Y29uc3R7d2lkdGg6ZSxoZWlnaHQ6b309dC50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ciYmKHIuc3R5bGUuaGVpZ2h0PWAke299cHhgLHIuc3R5bGUud2lkdGg9YCR7ZX1weGAsbih7d2lkdGg6ZSxoZWlnaHQ6b30pKX19KSk7cmV0dXJuIGEub2JzZXJ2ZSh0KSwoKT0+e2EudW5vYnNlcnZlKHQpfX0pLFtlXSksdH19LDk0Nzg6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZ2V0TWVudU5hdmlnYXRpb25PcmRlcj10LmdldENsYXNzTmFtZT12b2lkIDA7Y29uc3Qgcj1uKDQ0NzEpO3QuZ2V0Q2xhc3NOYW1lPShlLHQsbik9PnQ9PT1lP3IuQUNUSVZFX0NPTlRFWFRfTUVOVV9DTEFTUzpuLmluY2x1ZGVzKGUpP3IuUFJJT1JfQ09OVEVYVF9NRU5VX0NMQVNTOlwiXCIsdC5nZXRNZW51TmF2aWdhdGlvbk9yZGVyPWU9PntpZighZSlyZXR1cm5bXTtjb25zdCB0PVt7cGFyZW50TGFiZWw6ci5CQVNFX0NPTlRFWFRfTUVOVSx0ZW1wbGF0ZTplfV0sbj1bXTtmb3IoO3QubGVuZ3RoOyl7Y29uc3R7dGVtcGxhdGU6ZSxwYXJlbnRMYWJlbDpyfT10LnBvcCgpO2UuZm9yRWFjaCgoKHtzdWJtZW51Om4sbGFiZWw6cn0sbyk9PntuJiYodC5wdXNoKHtwYXJlbnRMYWJlbDpyfHxcIlwiLHRlbXBsYXRlOm59KSxkZWxldGUgZVtvXS5zdWJtZW51LGVbb10uaGFzU3ViTWVudT0hMCl9KSksbi5wdXNoKHtwYXJlbnRMYWJlbDpyLG1lbnVUZW1wbGF0ZTplfSl9cmV0dXJuIG59fSw2NzU4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lk1lbnVJdGVtVGV4dD10Lk1lbnVJdGVtUmlnaHRJY29uPXQuTWVudUl0ZW1JY29uQ29udGFpbmVyPXQuTWVudUl0ZW1Jbm5lckNvbnRhaW5lcj10Lk1lbnVJdGVtQ29udGFpbmVyPXQuTWVudUZyYW1lPXZvaWQgMDtjb25zdCBvPXIobig3NTE4KSksYT1uKDEzMzUpLGk9big5NjM0KSxsPW4oNzc2OSk7dC5NZW51RnJhbWU9KDAsby5kZWZhdWx0KShhLkJveClgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IG1heC1jb250ZW50O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDF9O1xuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5gJHtlLnB4LnNtYWxsfSAwICR7ZS5weC5zbWFsbH0gMGB9O1xuYCx0Lk1lbnVJdGVtQ29udGFpbmVyPSgwLG8uZGVmYXVsdCkoYS5Cb3gpYFxuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YDAgJHtlLnB4LnNtYWxsfSAwICR7ZS5weC5zbWFsbH1gfTtcbmAsdC5NZW51SXRlbUlubmVyQ29udGFpbmVyPSgwLG8uZGVmYXVsdCkoYS5Cb3gpYFxuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAyOHB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmUsc2VsZWN0ZWQ6dCxlbmFibGVkOm59KT0+XCJmYWxzZVwiIT09biYmdD9lLnBhbGV0dGUuYmFja2dyb3VuZDM6XCJ0cmFuc3BhcmVudFwifTtcblxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZSxlbmFibGVkOnR9KT0+XCJmYWxzZVwiIT09dD9lLnBhbGV0dGUuYmFja2dyb3VuZDM6XCJ0cmFuc3BhcmVudFwifTtcbiAgfVxuYCx0Lk1lbnVJdGVtSWNvbkNvbnRhaW5lcj0oMCxvLmRlZmF1bHQpKGEuQm94KWBcbiAgcGFkZGluZzogJHsoe3RoZW1lOmUsc2lkZTp0fSk9PlwicmlnaHRcIj09PXQ/YDAgJHtlLnB4LnNtYWxsfSAwIDBgOmAwIDAgMCAke2UucHguc21hbGx9YH07XG4gIG1hcmdpbi1sZWZ0OiAkeyh7c2lkZTplfSk9PlwicmlnaHRcIj09PWU/XCJhdXRvXCI6MH07XG5gLHQuTWVudUl0ZW1SaWdodEljb249KDAsby5kZWZhdWx0KShpLkljb24pYFxuICBtYXJnaW4tbGVmdDogYXV0bztcblxuICBzdmcgcGF0aCB7XG4gICAgZmlsbDogJHsoe3RoZW1lOmUsZW5hYmxlZDp0fSk9Pm51bGw9PXR8fHQ/ZS5wYWxldHRlLnRleHREZWZhdWx0OmUucGFsZXR0ZS50ZXh0SW5hY3RpdmV9O1xuICAgIHN0cm9rZTogJHsoe3RoZW1lOmUsZW5hYmxlZDp0fSk9Pm51bGw9PXR8fHQ/ZS5wYWxldHRlLnRleHREZWZhdWx0OmUucGFsZXR0ZS50ZXh0SW5hY3RpdmV9O1xuICAgIHN0cm9rZS13aWR0aDogMC41O1xuICB9XG5gLHQuTWVudUl0ZW1UZXh0PSgwLG8uZGVmYXVsdCkobC5UZXh0KWBcbiAgY29sb3I6ICR7KHt0aGVtZTplLGVuYWJsZWQ6dH0pPT5udWxsPT10fHx0P2UucGFsZXR0ZS50ZXh0RGVmYXVsdDplLnBhbGV0dGUudGV4dEluYWN0aXZlfTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YDAgJHtlLnB4Lnh4eGxhcmdlfSAwICR7ZS5weC5zbWFsbH1gfTtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuXG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gIHVzZXItc2VsZWN0OiBub25lO1xuYH0sMjYwOTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oNTk3MSksdCl9LDU5NzE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Ub2dnbGU9dm9pZCAwO2NvbnN0IGE9big1ODkzKSxpPW4oNjY4OSksbD1vKG4oNzUxOCkpLHM9big4NTEwKSxjPW4oMTMzNSksdT1uKDE5NDQpO3QuVG9nZ2xlPWU9Pnt2YXJ7aWQ6dCxsYWJlbDpuLG9uQ2hhbmdlOm8sbGFiZWxTaWRlOmw9XCJyaWdodFwiLHR5cGU6cz1cImNoZWNrYm94XCIsaGVscGVyVGV4dDpjfT1lLGc9cihlLFtcImlkXCIsXCJsYWJlbFwiLFwib25DaGFuZ2VcIixcImxhYmVsU2lkZVwiLFwidHlwZVwiLFwiaGVscGVyVGV4dFwiXSk7Y29uc3RbdixDXT0oMCxpLnVzZVN0YXRlKShnLmNoZWNrZWQpO3JldHVybigwLGkudXNlRWZmZWN0KSgoKCk9PntDKGcuY2hlY2tlZCl9KSxbZy5jaGVja2VkXSksKDAsYS5qc3hzKShkLE9iamVjdC5hc3NpZ24oe2xhYmVsU2lkZTpsfSx7Y2hpbGRyZW46WyhufHxjKSYmKDAsYS5qc3gpKHUuTGFiZWwse2h0bWxGb3I6dCx0ZXh0Om4saGVscGVyVGV4dDpjfSksKDAsYS5qc3hzKShwLE9iamVjdC5hc3NpZ24oe2lzQ2hlY2tlZDp2fSx7Y2hpbGRyZW46WygwLGEuanN4KShoLE9iamVjdC5hc3NpZ24oe30sZyx7aWQ6dCx0eXBlOnMsb25DaGFuZ2U6ZT0+e0MoZS50YXJnZXQuY2hlY2tlZCksbnVsbD09b3x8byhlKX19KSksKDAsYS5qc3gpKGYse3RhYkluZGV4Oi0xLFwiYXJpYS1oaWRkZW5cIjpcInRydWVcIixpc0NoZWNrZWQ6dn0pXX0pKV19KSl9O2NvbnN0IGQ9bC5kZWZhdWx0LmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgZ2FwOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnhsYXJnZX07XG4gIGZsZXgtZGlyZWN0aW9uOiAkeyh7bGFiZWxTaWRlOmV9KT0+XCJsZWZ0XCI9PT1lP1wicm93XCI6XCJyb3ctcmV2ZXJzZVwifTtcbiAgbGluZS1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHgueGxhcmdlfTtcbmAscD0oMCxsLmRlZmF1bHQpKGMuQm94KWBcbiAgLS1weC10b2dnbGU6ICR7KHt0aGVtZTplfSk9PmUucHgueGxhcmdlfTtcbiAgLS1weC1rbm9iOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiB2YXIoLS1weC10b2dnbGUpO1xuICB3aWR0aDogY2FsYygyICogdmFyKC0tcHgtdG9nZ2xlKSk7XG4gIGJvcmRlcjogMXB4IHNvbGlkXG4gICAgJHsoe2lzQ2hlY2tlZDplLHRoZW1lOnR9KT0+ZT90LnBhbGV0dGUuYnJhbmRQcmltYXJ5OnQucGFsZXR0ZS5iYWNrZ3JvdW5kNn07XG4gIGJvcmRlci1yYWRpdXM6IGNhbGMoMC41ICogdmFyKC0tcHgtdG9nZ2xlKSk7XG5cbiAgYmFja2dyb3VuZDogJHsoe2lzQ2hlY2tlZDplLHRoZW1lOnR9KT0+ZT90LnBhbGV0dGUuYnJhbmRQcmltYXJ5OnQucGFsZXR0ZS5iYWNrZ3JvdW5kNn07XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQgdmFyKC0tb3BlbmZpbi11aS1nbG9iYWxUcmFuc2l0aW9uKSxcbiAgICBib3JkZXItY29sb3IgdmFyKC0tLW9wZW5maW4tdWktZ2xvYmFsVHJhbnNpdGlvbik7XG5cbiAgJjpmb2N1cy13aXRoaW4ge1xuICAgIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0Rm9jdXNlZH07XG4gIH1cbmAsZj1sLmRlZmF1bHQuYnV0dG9uYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiB2YXIoLS1weC1rbm9iKTtcbiAgaGVpZ2h0OiB2YXIoLS1weC1rbm9iKTtcbiAgdG9wOiA1MCU7XG4gIGxlZnQ6ICR7KHt0aGVtZTplfSk9PmUucHgueHNtYWxsfTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGJhY2tncm91bmQ6ICR7KHtpc0NoZWNrZWQ6ZSx0aGVtZTp0fSk9PmU/dC5wYWxldHRlLmJyYW5kUHJpbWFyeVRleHQ6dC5wYWxldHRlLmlucHV0Q29sb3J9O1xuICBib3JkZXI6IG5vbmU7XG4gIG91dGxpbmU6IG5vbmU7XG4gIHRyYW5zaXRpb246IGxlZnQgdmFyKC0tb3BlbmZpbi11aS1nbG9iYWxUcmFuc2l0aW9uKSwgYmFja2dyb3VuZCB2YXIoLS1vcGVuZmluLXVpLWdsb2JhbFRyYW5zaXRpb24pO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTsgLyogQWxsb3cgcGFzcy10aHJ1IGZvciBuYXRpdmUgaW5wdXQgKi9cbmAsaD0oMCxsLmRlZmF1bHQpKHMuUmF3SW5wdXQpYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgb3BhY2l0eTogMDtcbiAgYm9yZGVyOiBub25lO1xuICBvdXRsaW5lOiBub25lO1xuICBhcHBlYXJhbmNlOiBub25lO1xuICBkaXNwbGF5OiBibG9jaztcblxuICAmOmNoZWNrZWQgKyAke2Z9IHtcbiAgICBsZWZ0OiBjYWxjKDEwMCUgLSAkeyh7dGhlbWU6ZX0pPT5lLnB4LmxhcmdlfSk7XG4gIH1cbiAgJjpkaXNhYmxlZCArICR7Zn0ge1xuICAgIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dERpc2FibGVkfTtcbiAgfVxuICAmOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gIH1cbmB9LDUzMDA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5CYWRnZT12b2lkIDA7Y29uc3QgYT1uKDU4OTMpLGk9byhuKDc1MTgpKSxsPW4oMTMzNSkscz1uKDM4NzcpO3QuQmFkZ2U9ZT0+e3Zhcntjb3VudDp0PTAsbWF4Om59PWUsbz1yKGUsW1wiY291bnRcIixcIm1heFwiXSk7bGV0IGk9dC50b1N0cmluZygpO3JldHVybiBuJiZ0Pm4mJihpPWAke259K2ApLCgwLGEuanN4KShjLE9iamVjdC5hc3NpZ24oe30sbyx7Y2hpbGRyZW46aX0pKX07Y29uc3QgYz0oMCxpLmRlZmF1bHQpKGwuQm94KWBcbiAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnN0YXR1c0NyaXRpY2FsfTtcbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMucGlsbH07XG4gIGNvbG9yOiAke3MuQ29sb3Iud2hpdGV9O1xuICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuc21hbGx9O1xuICBtaW4td2lkdGg6ICR7KHt0aGVtZTplfSk9PmUucHgueGxhcmdlfTtcbiAgcGFkZGluZzogMnB4IDZweDtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBib3gtc2hhZG93OiAkeyh7dGhlbWU6ZX0pPT5lLnNoYWRvdy5iYXNlfTtcbmB9LDMxMzY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDUzMDApLHQpfSw2ODk1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pfTpmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10fSksYT10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCIhPT1uJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmcih0LGUsbik7cmV0dXJuIG8odCxlKSx0fSxpPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LGw9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DYWxlbmRhcj12b2lkIDA7Y29uc3Qgcz1uKDU4OTMpLGM9big2Njg5KSx1PWwobig3NTE4KSksZD1uKDcyOTIpLHA9big0MTMwKSxmPW4oMTMzNSksaD1hKG4oNTI5OSkpO3QuQ2FsZW5kYXI9ZT0+e3Zhcnt2YWx1ZTp0LG9uQ2hhbmdlOm4sb25EaXNtaXNzOnJ9PWUsbz1pKGUsW1widmFsdWVcIixcIm9uQ2hhbmdlXCIsXCJvbkRpc21pc3NcIl0pO2NvbnN0W2FdPSgwLGMudXNlU3RhdGUpKHQpLFtsLHVdPSgwLGMudXNlU3RhdGUpKHQpLHA9KDAsYy51c2VDYWxsYmFjaykoKGU9Pnt1KGUpLG51bGw9PW58fG4oZSl9KSxbXSksZj0oMCxjLnVzZUNhbGxiYWNrKSgoKCk9PntwKGEpLG51bGw9PXJ8fHIoKX0pLFtdKTtyZXR1cm4oMCxzLmpzeHMpKEMsT2JqZWN0LmFzc2lnbih7XCJkYXRhLXRlc3RpZFwiOlwicmVhY3QtY2FsZW5kYXJcIn0se2NoaWxkcmVuOlsoMCxzLmpzeCkoZC5DYWxlbmRhcixPYmplY3QuYXNzaWduKHt2YWx1ZTpsLG9uQ2hhbmdlOnAsY2FsZW5kYXJUeXBlOlwiVVNcIixkZWZhdWx0VmlldzpcIm1vbnRoXCIsbWluRGV0YWlsOlwieWVhclwiLG5leHQyTGFiZWw6bnVsbCxwcmV2MkxhYmVsOm51bGwsc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrczohMH0sbykpLCgwLHMuanN4cykoZyx7Y2hpbGRyZW46WygwLHMuanN4KSh2LHtcImRhdGEtdGVzdGlkXCI6XCJjYWxlbmRhci1jYW5jZWwtYnV0dG9uXCIsXCJhcmlhLWxhYmVsXCI6XCJjYW5jZWwtYnV0dG9uXCIsbGFiZWw6XCJDYW5jZWxcIixzaXplOlwiYmFzZVwiLGtpbmQ6XCJ0ZXh0T25seVwiLG9uQ2xpY2s6Zn0pLCgwLHMuanN4KSh2LHtcImRhdGEtdGVzdGlkXCI6XCJjYWxlbmRhci1hcHBseS1idXR0b25cIixcImFyaWEtbGFiZWxcIjpcImFwcGx5LWJ1dHRvblwiLGxhYmVsOlwiQXBwbHlcIixzaXplOlwiYmFzZVwiLGtpbmQ6XCJwcmltYXJ5XCIsb25DbGljazpyfSldfSldfSkpfTtjb25zdCBnPSgwLHUuZGVmYXVsdCkoZi5Cb3gpYFxuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YCR7ZS5weC5zbWFsbH0gMHB4YH07XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gIG1hcmdpbi1yaWdodDogJHsoe3RoZW1lOmV9KT0+YCR7ZS5weC5zbWFsbH1gfTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ0fTtcbiAgYm9yZGVyOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ2fTtcbiAgYm9yZGVyLXRvcDogbm9uZTtcbmAsdj0oMCx1LmRlZmF1bHQpKHAuQnV0dG9uKWBcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YCR7ZS5weC5zbWFsbH0gJHtlLnB4LnNtYWxsfWB9O1xuICBtYXJnaW4tcmlnaHQ6ICR7KHt0aGVtZTplfSk9PmAke2UucHguc21hbGx9YH07XG5gLEM9KDAsdS5kZWZhdWx0KShmLkJveClgXG4gICR7aH07XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICB1c2VyLXNlbGVjdDogbm9uZTtcblxuICAucmVhY3QtY2FsZW5kYXIge1xuICAgIG1pbi13aWR0aDogMjMwcHg7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ0fTtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gICAgYm9yZGVyOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ2fTtcbiAgfVxuXG4gIC5yZWFjdC1jYWxlbmRhcl9fbmF2aWdhdGlvbiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ0fSAhaW1wb3J0YW50O1xuICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICAgIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5iYXNlfTtcbiAgICBtYXJnaW46IDA7XG4gIH1cblxuICAucmVhY3QtY2FsZW5kYXJfX25hdmlnYXRpb25fX2Fycm93IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDR9ICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gICAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmxhcmdlfTtcblxuICAgIDpkaXNhYmxlZCB7XG4gICAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0RGlzYWJsZWR9O1xuICAgIH1cbiAgfVxuXG4gIC5yZWFjdC1jYWxlbmRhcl9fbmF2aWdhdGlvbl9fbGFiZWwge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNH0gIWltcG9ydGFudDtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gIH1cblxuICAucmVhY3QtY2FsZW5kYXJfX3ZpZXdDb250YWluZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNH0gIWltcG9ydGFudDtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0Q29sb3J9O1xuICAgIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5iYXNlfTtcbiAgfVxuXG4gIC5yZWFjdC1jYWxlbmRhcl9fbW9udGgtdmlld19fd2Vla2RheXMge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5iYXNlfTtcblxuICAgIGFiYnIge1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIH1cbiAgfVxuXG4gIC5yZWFjdC1jYWxlbmRhcl9fdGlsZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNH0gIWltcG9ydGFudDtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgICBib3JkZXItcmFkaXVzOiAxMDBweDtcbiAgICBhc3BlY3QtcmF0aW86IDEvMTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgICA6ZGlzYWJsZWQge1xuICAgICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0SW5hY3RpdmV9O1xuICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcblxuICAgICAgOmhvdmVyIHtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgfVxuICAgIH1cblxuICAgIDpob3ZlciB7XG4gICAgICBib3JkZXI6IDJweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5fTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDEwMHB4O1xuICAgIH1cblxuICAgIDpmb2N1cyB7XG4gICAgICBib3JkZXI6IDJweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5fTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDEwMHB4O1xuICAgIH1cbiAgfVxuXG4gIC5yZWFjdC1jYWxlbmRhcl9fdGlsZS0tbm93IHtcbiAgICBib3JkZXI6IDJweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5fSAhaW1wb3J0YW50O1xuICAgIGJvcmRlci1yYWRpdXM6IDEwMHB4O1xuICB9XG5cbiAgLnJlYWN0LWNhbGVuZGFyX190aWxlLS1hY3RpdmUge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFByaW1hcnl9ICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFByaW1hcnlUZXh0fTtcbiAgICBib3JkZXItcmFkaXVzOiAxMDBweDtcblxuICAgIDpmb2N1cyB7XG4gICAgICBib3JkZXI6IDJweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5fTtcbiAgICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICAgICAgYm9yZGVyLXJhZGl1czogMTAwcHg7XG4gICAgfVxuICB9XG5gfSw5NzM0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig2ODk1KSx0KX0sMTYyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkRyb3Bkb3duQnV0dG9uPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksYT1uKDI3OSksaT1uKDcyNjEpLGw9big5NjM0KSxzPW4oNjY4OSksYz1yKG4oNzUxOCkpLHU9bigxMzM1KSxkPW4oOTUwNykscD1uKDE5NDQpO3QuRHJvcGRvd25CdXR0b249KDAscy5mb3J3YXJkUmVmKSgoKGUsdCk9Pnt2YXIgbixyLGwscyxjO3JldHVybigwLG8uanN4KShoLHtjaGlsZHJlbjooMCxvLmpzeHMpKGYse2NoaWxkcmVuOlsoZS5sYWJlbHx8ZS5oZWxwZXJUZXh0KSYmKDAsby5qc3gpKHAuTGFiZWwse3RleHQ6ZS5sYWJlbCxoZWxwZXJUZXh0OmUuaGVscGVyVGV4dCxodG1sRm9yOmUubmFtZX0pLCgwLG8uanN4cykodixPYmplY3QuYXNzaWduKHtyb2xlOlwiY29tYm94Ym94XCIscmVmOnQsbmFtZTplLm5hbWUsdGFiSW5kZXg6ZS50YWJJbmRleCxcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiOmUuYWN0aXZlRGVzY2VuZGFudCxzdGF0dXM6ZS5zdGF0dXMsXCJhcmlhLWV4cGFuZGVkXCI6ZS5leHBhbmRlZCxcImFyaWEtaGFzcG9wdXBcIjpcImxpc3Rib3hcIixcImFyaWEtY29udHJvbHNcIjpcImRyb3Bkb3duLWxpc3Rib3hcIixvbkNsaWNrOigpPT5lLmhhbmRsZUNsaWNrKCksYXM6XCJidXR0b25cIixcImRhdGEtdGVzdGlkXCI6XCJkcm9wZG93bi1idXR0b25cIix0aXRsZTpudWxsIT09KHI9bnVsbD09PShuPWUuc2VsZWN0ZWQpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLnRpdGxlKSYmdm9pZCAwIT09cj9yOmUucGxhY2Vob2xkZXJ9LHtjaGlsZHJlbjpbKG51bGw9PT0obD1lLnNlbGVjdGVkKXx8dm9pZCAwPT09bD92b2lkIDA6bC5pY29uVXJsKSYmKDAsby5qc3gpKGEuQnV0dG9uSW1hZ2Use3NyYzplLnNlbGVjdGVkLmljb25Vcmx9KSwoMCxvLmpzeCkoaS5PcHRpb25UaXRsZSxPYmplY3QuYXNzaWduKHtcImFyaWEtbGl2ZVwiOlwicG9saXRlXCIsXCJkYXRhLXRlc3RpZFwiOlwic2VsZWN0ZWQtb3B0aW9uXCJ9LHtjaGlsZHJlbjpudWxsIT09KGM9bnVsbD09PShzPWUuc2VsZWN0ZWQpfHx2b2lkIDA9PT1zP3ZvaWQgMDpzLnRpdGxlKSYmdm9pZCAwIT09Yz9jOmUucGxhY2Vob2xkZXJ9KSksKDAsby5qc3gpKGcse3N0YXR1czplLnN0YXR1cyxpY29uOmUuZXhwYW5kZWQ/XCJDaGV2cm9uVXBJY29uXCI6XCJDaGV2cm9uRG93bkljb25cIn0pXX0pKV19KX0pfSkpLHQuRHJvcGRvd25CdXR0b24uZGlzcGxheU5hbWU9XCJEcm9wZG93bkJ1dHRvblwiO2NvbnN0IGY9KDAsYy5kZWZhdWx0KSh1LkJveClgXG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIHdpZHRoOiAxMDAlO1xuYCxoPSgwLGMuZGVmYXVsdCkodS5Cb3gpYFxuICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gIHdpZHRoOiAxMDAlO1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbmAsZz0oMCxjLmRlZmF1bHQpKGwuSWNvbilgXG4gIGNvbG9yOiAkeyh7dGhlbWU6ZSxzdGF0dXM6dH0pPT4oMCxkLmdldFN0YXR1c0NvbG9yKShlLHQsXCJ0ZXh0RGVmYXVsdFwiKX07XG5gLHY9KDAsYy5kZWZhdWx0KSh1LkJveClgXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNH07XG4gIGJvcmRlcjogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dEJhY2tncm91bmR9O1xuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmUsc3RhdHVzOnR9KT0+KDAsZC5nZXRTdGF0dXNDb2xvcikoZSx0LFwiaW5wdXRCb3JkZXJcIil9O1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgZm9udC13ZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUuZm9udFdlaWdodC5ib2xkfTtcbiAgZ2FwOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICBsaW5lLWhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5saW5lSGVpZ2h0LnVpfTtcbiAgb3V0bGluZTogbm9uZTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YCR7ZS5weC5zbWFsbH0gJHtlLnB4LnNtYWxsfWB9O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIHZhcigtLW9wZW5maW4tdWktZ2xvYmFsVHJhbnNpdGlvbik7XG4gIHdpZHRoOiAxMDAlO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gICR7bC5JY29ufSB7XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIH1cblxuICAmOmZvY3VzLXdpdGhpbiB7XG4gICAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXRGb2N1c2VkfTtcbiAgfVxuXG4gICY6Zm9jdXMge1xuICAgIG91dGxpbmU6IDA7XG4gICAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZSxzdGF0dXM6dH0pPT4oMCxkLmdldFN0YXR1c0NvbG9yKShlLHQsXCJpbnB1dEZvY3VzZWRcIil9O1xuICB9XG5gfSw2MDYyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkRyb3Bkb3duTWVudT12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGE9big2Njg5KSxpPW4oMTMzNSksbD1yKG4oNzUxOCkpLHM9big3MjYxKSxjPW4oMjc5KSx1PW4oMzQ3KSxkPW4oMTYyKTt0LkRyb3Bkb3duTWVudT0oMCxhLmZvcndhcmRSZWYpKCgoe2xhYmVsOmUsb3B0aW9uczp0PVtbXV0scGxhY2Vob2xkZXI6bj1cIlNlbGVjdCBhbiBvcHRpb25cIixzZWxlY3RlZDpyLG9uT3B0aW9uSG92ZXI6bCxvbkNoYW5nZTpoLHJlbmRlckxhYmVsOmcsZml0Q29udGVudDp2fSxDKT0+e2lmKHImJiEoKGUsdCk9PmUuc29tZSgoZT0+ZS5zb21lKChlPT5lLnZhbHVlPT09dC52YWx1ZSkpKSkpKHQscikpdGhyb3cgbmV3IEVycm9yKGBUaGUgc2VsZWN0ZWQgb3B0aW9uICR7ci52YWx1ZX0gaXMgbm90IHByZXNlbnQgaW4gdGhlIG9wdGlvbnMgYXJyYXlgKTtjb25zdFttLHddPSgwLGEudXNlU3RhdGUpKCExKTsoMCxhLnVzZUVmZmVjdCkoKCgpPT57MT09PXRbMF0ubGVuZ3RoJiZiKCExKX0pLFt0XSk7Y29uc3QgYj1lPT57dyhudWxsIT1lP2U6IW0pfSx7Zm9jdXNlZE9wdGlvbjp5LGhhbmRsZUtleURvd246eH09KDAsdS51c2VEcm9wZG93bktleWJvYXJkTmF2aWdhdGlvbikodCxyLG0sYixoKTtyZXR1cm4oMCxvLmpzeCkocCxPYmplY3QuYXNzaWduKHtyZWY6QyxmbGV4RGlyZWN0aW9uOlwiY29sdW1uXCIsb25CbHVyOmU9PntlLmN1cnJlbnRUYXJnZXQuY29udGFpbnMoZS5yZWxhdGVkVGFyZ2V0KXx8dyghMSl9LG9uS2V5RG93bjp4fSx7Y2hpbGRyZW46KDAsby5qc3hzKShpLkJveCxPYmplY3QuYXNzaWduKHtnYXA6XCJzbWFsbFwiLGZsZXhEaXJlY3Rpb246XCJjb2x1bW5cIixzdHlsZTp7d2lkdGg6XCIxMDAlXCJ9fSx7Y2hpbGRyZW46W2UmJigwLG8uanN4KShcImxhYmVsXCIsT2JqZWN0LmFzc2lnbih7aHRtbEZvcjpcImRyb3Bkb3duLWJ1dHRvblwifSx7Y2hpbGRyZW46KDAsby5qc3gpKHMuT3B0aW9uVGl0bGUse2NoaWxkcmVuOmV9KX0pKSwoMCxvLmpzeHMpKGYse2NoaWxkcmVuOltnPygwLG8uanN4KShhLkZyYWdtZW50LHtjaGlsZHJlbjpnKHJ8fHt0aXRsZTpuLHZhbHVlOm51bGx9LG0sYix5KX0sYHJlbmRlci1sYWJlbC0ke3J9YCk6KDAsby5qc3gpKGQuRHJvcGRvd25CdXR0b24se3RhYkluZGV4OjAsYWN0aXZlRGVzY2VuZGFudDpgbWVudS1vcHRpb24tJHtudWxsPT15P3ZvaWQgMDp5LnZhbHVlfWAsZXhwYW5kZWQ6bSYmdFswXS5sZW5ndGg+MSxoYW5kbGVDbGljazooKT0+YigpLHNlbGVjdGVkOnIscGxhY2Vob2xkZXI6bn0pLHQubGVuZ3RoJiZ0WzBdLmxlbmd0aD4xJiZtJiYoMCxvLmpzeCkoYy5NZW51LHttZW51SWQ6XCJkcm9wZG93bi1saXN0Ym94XCIsb3B0aW9uczp0LHNlbGVjdGVkOnIsaGFuZGxlRXhwYW5kTWVudTpiLG9uT3B0aW9uSG92ZXI6bCxvbkNoYW5nZTpoLGZpdENvbnRlbnQ6dixmb2N1c2VkT3B0aW9uOnksYWJzb2x1dGVQb3NpdGlvbjohMH0pXX0pXX0pKX0pKX0pKSx0LkRyb3Bkb3duTWVudS5kaXNwbGF5TmFtZT1cIkRyb3Bkb3duTWVudVwiO2NvbnN0IHA9KDAsbC5kZWZhdWx0KShpLkJveClgXG4gIHVzZXItc2VsZWN0OiBub25lO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5gLGY9KDAsbC5kZWZhdWx0KShpLkJveClgYH0sNjAyNjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oNjA2MiksdCksbyhuKDI3OSksdCksbyhuKDE2MiksdCl9LDI3OTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5CdXR0b25JbWFnZT10Lk1lbnU9dm9pZCAwO2NvbnN0IG89big1ODkzKSxhPXIobig2Njg5KSksaT1yKG4oNzUxOCkpLGw9big5NjM0KSxzPW4oMTMzNSksYz1uKDcyNjEpO3QuTWVudT0oe29wdGlvbnM6ZSxzZWxlY3RlZDpuLG1lbnVJZDpyLGhhbmRsZUV4cGFuZE1lbnU6aSxvbk9wdGlvbkhvdmVyOmwsb25DaGFuZ2U6cyx3aWR0aDpnLGhlaWdodDp2LGhlYWRlcjpDLGZvY3VzZWRPcHRpb246bSxhYnNvbHV0ZVBvc2l0aW9uOncsZml0Q29udGVudDpifSk9Pntjb25zdCB5PWU9PntudWxsPT1sfHxsKGUpfTtyZXR1cm4oMCxvLmpzeHMpKHUsT2JqZWN0LmFzc2lnbih7cm9sZTpcImxpc3Rib3hcIixmbGV4RGlyZWN0aW9uOlwiY29sdW1uXCIsb25Nb3VzZUxlYXZlOigpPT57eShudWxsKX0sXCJkYXRhLXRlc3RpZFwiOlwibWVudVwiLGlkOnIsd2lkdGg6ZyxoZWlnaHQ6dixhYnNvbHV0ZVBvc2l0aW9uOncsZml0Q29udGVudDpifSx7Y2hpbGRyZW46W0MmJigwLG8uanN4cykoYS5kZWZhdWx0LkZyYWdtZW50LHtjaGlsZHJlbjpbKDAsby5qc3gpKHAse2NoaWxkcmVuOigwLG8uanN4KShjLk9wdGlvblRpdGxlLHtjaGlsZHJlbjpDfSl9KSwoMCxvLmpzeCkoaCx7fSldfSksZS5tYXAoKChlLHIpPT4oMCxvLmpzeHMpKGEuZGVmYXVsdC5GcmFnbWVudCx7Y2hpbGRyZW46WzAhPT1yJiYoMCxvLmpzeCkoaCx7fSksZS5tYXAoKChlLHIpPT4oMCxvLmpzeHMpKGQsT2JqZWN0LmFzc2lnbih7cm9sZTpcIm9wdGlvblwiLGlzRm9jdXNlZDoobnVsbD09bT92b2lkIDA6bS52YWx1ZSk9PT1lLnZhbHVlLFwiYXJpYS1zZWxlY3RlZFwiOihudWxsPT1uP3ZvaWQgMDpuLnZhbHVlKT09PWUudmFsdWUsYWxpZ25JdGVtczpcImNlbnRlclwiLGFzOlwiYnV0dG9uXCIsXCJkYXRhLXRlc3RpZFwiOmBtZW51LW9wdGlvbi0ke3J9YCxpZDpgbWVudS1vcHRpb24tJHtlLnZhbHVlfWAsdGl0bGU6ZS50aXRsZSxvbkNsaWNrOigpPT57ZS5vdmVycmlkZU9uQ2xpY2s/ZS5vdmVycmlkZU9uQ2xpY2soZSk6cyhlKSxudWxsPT1pfHxpKCl9LG9uTW91c2VPdmVyOigpPT55KGUudmFsdWUpfSx7Y2hpbGRyZW46WyhudWxsPT1lP3ZvaWQgMDplLmljb25VcmwpJiYoMCxvLmpzeCkodC5CdXR0b25JbWFnZSx7c3JjOmUuaWNvblVybCxzdHlsZTp7bWFyZ2luUmlnaHQ6XCI4cHhcIn19KSwoMCxvLmpzeCkoYy5PcHRpb25UaXRsZSx7Y2hpbGRyZW46ZS50aXRsZX0pLChudWxsPT1uP3ZvaWQgMDpuLnZhbHVlKT09PWUudmFsdWU/KDAsby5qc3gpKGYse2ljb246XCJDaGVja0ljb25cIn0pOigwLG8uanN4KShmLHtjaGlsZHJlbjooMCxvLmpzeCkoby5GcmFnbWVudCx7fSl9KV19KSxyKSkpXX0scikpKV19KSl9O2NvbnN0IHU9KDAsaS5kZWZhdWx0KShzLkJveClgXG4gIHdpZHRoOiAkeyh7d2lkdGg6ZSxmaXRDb250ZW50OnR9KT0+ZXx8KHQ/XCJmaXQtY29udGVudFwiOlwiMTAwJVwiKX07XG4gIG1heC1oZWlnaHQ6ICR7KHtoZWlnaHQ6ZX0pPT5udWxsIT1lP2U6XCJmaXQtY29udGVudFwifTtcbiAgdG9wOiAkeyh7dGhlbWU6ZX0pPT5gY2FsYygxMDAlICsgJHtlLnB4LnhzbWFsbH0pYH07XG4gIGJveC1zaGFkb3c6IDBweCA0cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4yNSk7XG4gIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNH07XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICB6LWluZGV4OiAxMDtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgYm9yZGVyOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0QmFja2dyb3VuZH07XG4gIHBvc2l0aW9uOiAkeyh7YWJzb2x1dGVQb3NpdGlvbjplfSk9PmU/XCJhYnNvbHV0ZVwiOlwiaW5pdGlhbFwifTtcbmAsZD0oMCxpLmRlZmF1bHQpKHMuQm94KWBcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgYm9yZGVyOiAkeyh7aXNGb2N1c2VkOmUsdGhlbWU6dH0pPT5lP2AxcHggc29saWQgJHt0LnBhbGV0dGUuYm9yZGVyTmV1dHJhbH1gOlwiMXB4IHNvbGlkIHRyYW5zcGFyZW50XCJ9O1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgb3V0bGluZTogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAke2UucHguc21hbGx9ICR7ZS5weC5zbWFsbH1gfTtcbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQyfTtcbiAgfVxuYCxwPSgwLGkuZGVmYXVsdCkocy5Cb3gpYFxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiB0cmFuc3BhcmVudDtcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0SGVscH07XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAke2UucHguc21hbGx9ICR7ZS5weC5zbWFsbH1gfTtcbmAsZj0oMCxpLmRlZmF1bHQpKGwuSWNvbilgXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuYCxoPSgwLGkuZGVmYXVsdCkocy5Cb3gpYFxuICBib3JkZXItdG9wOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0QmFja2dyb3VuZH07XG5gO3QuQnV0dG9uSW1hZ2U9aS5kZWZhdWx0LmltZ2BcbiAgaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLnhsYXJnZX07XG4gIHdpZHRoOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLnhsYXJnZX07XG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbmB9LDcyNjE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VUb29sdGlwPXQuaXNFbGVtZW50T3ZlcmZsb3duPXQuT3B0aW9uVGl0bGU9dm9pZCAwO2NvbnN0IGE9big1ODkzKSxpPW4oNjY4OSksbD1uKDc3NjkpLHM9big5NTA3KSxjPW8obig3NTE4KSk7dC5PcHRpb25UaXRsZT1lPT57dmFye2NoaWxkcmVuOm59PWUsbz1yKGUsW1wiY2hpbGRyZW5cIl0pO3JldHVybigwLGEuanN4KSh1LE9iamVjdC5hc3NpZ24oe3JlZjooMCx0LnVzZVRvb2x0aXApKG4pfSxvLHtjaGlsZHJlbjooMCxhLmpzeCkoXCJkaXZcIix7Y2hpbGRyZW46bn0pfSkpfTtjb25zdCB1PSgwLGMuZGVmYXVsdCkobC5UZXh0KWBcbiAgJHtzLk1peGlucy50ZXh0T3ZlcmZsb3d9O1xuICBtYXJnaW4tbGVmdDogJHsoe3RoZW1lOmV9KT0+ZS5weC54c21hbGx9O1xuYDtmdW5jdGlvbiBkKGUpe3JldHVybiBlLnNjcm9sbEhlaWdodD5lLmNsaWVudEhlaWdodHx8ZS5zY3JvbGxXaWR0aD5lLmNsaWVudFdpZHRofXQuaXNFbGVtZW50T3ZlcmZsb3duPWQsdC51c2VUb29sdGlwPWU9PigwLGkudXNlQ2FsbGJhY2spKCh0PT57dCYmZSYmZCh0KSYmKHQudGl0bGU9ZSl9KSxbXSl9LDcwMDY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5JY29uPXZvaWQgMDtjb25zdCBhPW4oNTg5MyksaT1uKDY2ODkpLGw9byhuKDc1MTgpKSxzPW4oMTMzNSksYz1uKDk1MDcpLHU9bigzNDcxKSxkPW4oOTY2OSkscD0oMCxpLmZvcndhcmRSZWYpKCgoZSx0KT0+e3Zhcnt0YWJJbmRleDpuLGljb246byxjaGlsZHJlbjppLHNpemU6bD1cImJhc2VcIixjb250YWluZXJTaXplOnMsXCJkYXRhLXRlc3RpZFwiOmN9PWUsdT1yKGUsW1widGFiSW5kZXhcIixcImljb25cIixcImNoaWxkcmVuXCIsXCJzaXplXCIsXCJjb250YWluZXJTaXplXCIsXCJkYXRhLXRlc3RpZFwiXSk7cmV0dXJuKDAsYS5qc3gpKGgsT2JqZWN0LmFzc2lnbih7fSx1LHtpY29uU2l6ZTpsLGNvbnRhaW5lclNpemU6c3x8bCxqdXN0aWZ5Q29udGVudDpcImNlbnRlclwiLGFsaWduSXRlbXM6XCJjZW50ZXJcIixcImRhdGEtdGVzdGlkXCI6Yyx0YWJJbmRleDpuLHJlZjp0fSx7Y2hpbGRyZW46bz8oMCxhLmpzeCkoZixPYmplY3QuYXNzaWduKHthcmlhTGFiZWw6dVtcImFyaWEtbGFiZWxcIl0saWNvbjpvfSx1KSk6aX0pKX0pKTtwLmRpc3BsYXlOYW1lPVwiSWNvblwiLHQuSWNvbj0oMCxsLmRlZmF1bHQpKHApYGA7Y29uc3QgZj0oMCxsLmRlZmF1bHQpKChlPT57dmFye2ljb246dCxhcmlhTGFiZWw6bn09ZSxvPXIoZSxbXCJpY29uXCIsXCJhcmlhTGFiZWxcIl0pO2NvbnN0IGk9dS5JY29uU2V0W3RdO3JldHVybigwLGEuanN4KShpLE9iamVjdC5hc3NpZ24oe3JvbGU6XCJpbWdcIixcImFyaWEtbGFiZWxcIjpufSxvKSl9KSlgYCxoPSgwLGwuZGVmYXVsdCkocy5Cb3gpYFxuICAvKipcbiAgICogMS4gSW5pdGlhbGl6ZSBsb2NhbCB2YXJpYWJsZXMgd2l0aCByZWFzb25hYmxlIGRlZmF1bHRzXG4gICAqL1xuICAtLXB4LWRlZmF1bHQ6ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUuYmFzZX07XG5cbiAgLyoqXG4gICAqIDIuIEluamVjdCB2YXJpYW50cyAtLSA/IFdoYXQgYXJlIFZhcmlhbnRzXG4gICAqL1xuICAkeygwLGMuZ2V0VmFyaWFudENTUykoZC52YXJpYW50cyxkLlZhcmlhbnQuY29udGFpbmVyU2l6ZSl9XG4gICR7KDAsYy5nZXRWYXJpYW50Q1NTKShkLnZhcmlhbnRzLGQuVmFyaWFudC5pY29uU2l6ZSl9XG5cbiAgd2lkdGg6IHZhcigtLXB4LWNvbnRhaW5lciwgdmFyKC0tcHgtZGVmYXVsdCkpO1xuICBoZWlnaHQ6IHZhcigtLXB4LWNvbnRhaW5lciwgdmFyKC0tcHgtZGVmYXVsdCkpO1xuXG4gIC8qIFNWRyBBc3NldCAqL1xuXG4gICYgPiAqLFxuICAke2Z9IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogdmFyKC0tcHgtaWNvbiwgdmFyKC0tcHgtZGVmYXVsdCkpO1xuICAgIGhlaWdodDogdmFyKC0tcHgtaWNvbiwgdmFyKC0tcHgtZGVmYXVsdCkpO1xuICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7XG4gIH1cbmB9LDk2Njk6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudmFyaWFudHM9dC5WYXJpYW50PXZvaWQgMDtjb25zdCByPW4oNzUxOCk7dC5WYXJpYW50PXtpY29uU2l6ZTpcImljb25TaXplXCIsY29udGFpbmVyU2l6ZTpcImNvbnRhaW5lclNpemVcIn0sdC52YXJpYW50cz17W3QuVmFyaWFudC5pY29uU2l6ZV06e3hzbWFsbDpyLmNzc2BcbiAgICAgIC0tcHgtaWNvbjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS54c21hbGx9O1xuICAgIGAsc21hbGw6ci5jc3NgXG4gICAgICAtLXB4LWljb246ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUuc21hbGx9O1xuICAgIGAsYmFzZTpyLmNzc2BcbiAgICAgIC0tcHgtaWNvbjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS5iYXNlfTtcbiAgICBgLGxhcmdlOnIuY3NzYFxuICAgICAgLS1weC1pY29uOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLmxhcmdlfTtcbiAgICBgLHhsYXJnZTpyLmNzc2BcbiAgICAgIC0tcHgtaWNvbjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS54bGFyZ2V9O1xuICAgIGAseHhsYXJnZTpyLmNzc2BcbiAgICAgIC0tcHgtaWNvbjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS54eGxhcmdlfTtcbiAgICBgLHh4eGxhcmdlOnIuY3NzYFxuICAgICAgLS1weC1pY29uOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLnh4eGxhcmdlfTtcbiAgICBgfSxbdC5WYXJpYW50LmNvbnRhaW5lclNpemVdOnt4c21hbGw6ci5jc3NgXG4gICAgICAtLXB4LWNvbnRhaW5lcjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS54c21hbGx9O1xuICAgIGAsc21hbGw6ci5jc3NgXG4gICAgICAtLXB4LWNvbnRhaW5lcjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS5zbWFsbH07XG4gICAgYCxiYXNlOnIuY3NzYFxuICAgICAgLS1weC1jb250YWluZXI6ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUuYmFzZX07XG4gICAgYCxsYXJnZTpyLmNzc2BcbiAgICAgIC0tcHgtY29udGFpbmVyOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLmxhcmdlfTtcbiAgICBgLHhsYXJnZTpyLmNzc2BcbiAgICAgIC0tcHgtY29udGFpbmVyOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLnhsYXJnZX07XG4gICAgYCx4eGxhcmdlOnIuY3NzYFxuICAgICAgLS1weC1jb250YWluZXI6ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUueHhsYXJnZX07XG4gICAgYCx4eHhsYXJnZTpyLmNzc2BcbiAgICAgIC0tcHgtY29udGFpbmVyOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLnh4eGxhcmdlfTtcbiAgICBgfX19LDk2MzQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDcwMDYpLHQpfSw5Mjg1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkJlbGxGaWxsZWRJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5CZWxsRmlsbGVkSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3hzKShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMjBcIixoZWlnaHQ6XCIyMFwiLHZpZXdCb3g6XCIwIDAgMjQgMjRcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46WygwLG8uanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk0xMiAyQzExLjIyOTYgMiAxMC41ODQ1IDIuNTgzNzkgMTAuNTA3OCAzLjM1MDQxQzEwLjQ5NTIgMy40NzY3NyAxMC40MDU3IDMuNTgxNTcgMTAuMjg0NiAzLjYxOTcxQzguMDY1NTQgNC4zMTg1MSA2LjQyMjM4IDYuMzM3OTYgNi4zMDAzMyA4Ljc3ODkzTDYuMTIzODIgMTIuMzA5MUM2LjA5OTM2IDEyLjc5ODIgNS44MTMzMSAxMy4yMzYyIDUuMzc1MyAxMy40NTUyTDQuNjA3MzkgMTMuODM5MkM0LjE0NzYxIDE0LjA2OTEgMy44NTcxOCAxNC41MzkgMy44NTcxOCAxNS4wNTMxVjE2LjI1QzMuODU3MTggMTYuNjI0OCA0LjE2MDk4IDE2LjkyODYgNC41MzU3NSAxNi45Mjg2SDE5LjQ2NDNDMTkuODM5MSAxNi45Mjg2IDIwLjE0MjkgMTYuNjI0OCAyMC4xNDI5IDE2LjI1VjE1LjA1MzFDMjAuMTQyOSAxNC41MzkgMTkuODUyNSAxNC4wNjkxIDE5LjM5MjcgMTMuODM5MkwxOC42MjQ3IDEzLjQ1NTJDMTguMTg2NyAxMy4yMzYyIDE3LjkwMDYgMTIuNzk4MiAxNy44NzYyIDEyLjMwOTFMMTcuNjk5NyA4Ljc3ODkzQzE3LjU3NzYgNi4zMzc5NiAxNS45MzQ0IDQuMzE4NTEgMTMuNzE1NCAzLjYxOTcyQzEzLjU5NDIgMy41ODE1NyAxMy41MDQ4IDMuNDc2NzggMTMuNDkyMiAzLjM1MDQxQzEzLjQxNTUgMi41ODM4IDEyLjc3MDQgMiAxMiAyWlwiLGZpbGw6dH0pLCgwLG8uanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk05LjI4NTcxIDE4LjI4NTdDOS4yODU3MSAxOS43ODQ4IDEwLjUwMDkgMjEgMTIgMjFDMTMuNDk5MSAyMSAxNC43MTQzIDE5Ljc4NDggMTQuNzE0MyAxOC4yODU3TDkuMjg1NzEgMTguMjg1N1pcIixmaWxsOnR9KV19KSl9fSw0NzE4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkJlbGxJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5CZWxsSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNNy40NzMwNiAxLjIyOTQzQzYuNTE5MyAxLjIyOTQzIDUuODcyOTEgMS45ODM5OSA1LjY1MzcxIDIuNzI2OTdDNS42NTIwNyAyLjcyOTMyIDUuNjQ5MjEgMi43MzMwMyA1LjY0NDg1IDIuNzM3NTZDNS42MzkyIDIuNzQzNDIgNS42MzI2NCAyLjc0ODk2IDUuNjI1OTkgMi43NTM1NUM1LjYxOTI2IDIuNzU4MTkgNS42MTQ1MiAyLjc2MDQgNS42MTMgMi43NjEwMkw1LjYxMjY1IDIuNzYxMTdDNS4wNTA4OCAyLjk5MjUxIDQuMzkxOTMgMy4zNjAyMiAzLjg3Njk3IDQuMDMzNTdDMy4zNTgxNSA0LjcxMTk2IDMuMDE5NDkgNS42NTU3MSAzLjAxOTQ1IDYuOTc3NDlMNS42NTM3MSAyLjcyNjk3TDMuMDE5NDUgNi45Nzc3NkMzLjAxODY2IDguMzAxNjUgMi44Nzg3MSA5LjAzMTMgMi42NzA5MSA5LjUzNDM5QzIuNDg4NzkgOS45NzUzMSAyLjI0ODg5IDEwLjI2NTggMS45MTIgMTAuNjczOEwxLjkxMTg1IDEwLjY3NEMxLjg2MjYzIDEwLjczMzYgMS44MTEzNSAxMC43OTU3IDEuNzU3ODcgMTAuODYxMkMxLjE0OTIzIDExLjYwNiAxLjcyNzI5IDEyLjY0MTkgMi42NTk4NiAxMi42NDE5SDUuMDkwMTlDNS4yMTE5MSAxMi45OCA1LjQwNzI2IDEzLjI5MDYgNS42NjYxOCAxMy41NDk1QzYuMTI4MjcgMTQuMDExNiA2Ljc1NDk5IDE0LjI3MTIgNy40MDg0OCAxNC4yNzEyQzguMDYxOTcgMTQuMjcxMiA4LjY4ODcgMTQuMDExNiA5LjE1MDc4IDEzLjU0OTVDOS40MDk3MSAxMy4yOTA2IDkuNjA1MDUgMTIuOTggOS43MjY3OCAxMi42NDE5SDEyLjI4OTRDMTMuMjIzNCAxMi42NDE5IDEzLjc5MiAxMS42MDA4IDEzLjE4ODQgMTAuODYxM0wxMy4xODgzIDEwLjg2MTJDMTMuMTM0OCAxMC43OTU3IDEzLjA4MzUgMTAuNzMzNiAxMy4wMzQyIDEwLjY3NEMxMi42OTczIDEwLjI2NTkgMTIuNDU3NCA5Ljk3NTQgMTIuMjc1NSA5LjUzNDUxQzEyLjA2NzggOS4wMzE0NyAxMS45MjgyIDguMzAxODIgMTEuOTI4MiA2Ljk3Nzc2QzExLjkyODIgNS42NTY4OCAxMS41ODkxIDQuNzEyOTkgMTEuMDcwMyA0LjAzNDMzQzEwLjU1NTMgMy4zNjA3NSA5Ljg5NjUyIDIuOTkyMzQgOS4zMzQ5OSAyLjc2MTE1TDkuMzM0NjcgMi43NjEwMkM5LjMzNDA5IDIuNzYwNzkgOS4zMjk4MiAyLjc1ODg4IDkuMzIzMTMgMi43NTQyNEM5LjMxNjU1IDIuNzQ5NjcgOS4zMDk4MSAyLjc0Mzk0IDkuMzAzODIgMi43Mzc3QzkuMjk4NzUgMi43MzI0MSA5LjI5NTQ1IDIuNzI4MDMgOS4yOTM2MyAyLjcyNTMxQzkuMDcyNjQgMS45ODM3OCA4LjQyNjkxIDEuMjI5NDMgNy40NzMwNiAxLjIyOTQzWk04LjY4NjU0IDEyLjY0MTlINi4xMzA0MkM2LjE4NzYgMTIuNzI5NSA2LjI1NDAzIDEyLjgxMTUgNi4zMjkxIDEyLjg4NjZDNi42MTUzNyAxMy4xNzI5IDcuMDAzNjMgMTMuMzMzNyA3LjQwODQ4IDEzLjMzMzdDNy44MTMzMyAxMy4zMzM3IDguMjAxNiAxMy4xNzI5IDguNDg3ODcgMTIuODg2NkM4LjU2MjkzIDEyLjgxMTUgOC42MjkzNyAxMi43Mjk1IDguNjg2NTQgMTIuNjQxOVpNNi41NTE0NSAyLjk5NzE2QzYuNjk1NzEgMi41MDA4NSA3LjA3MTIxIDIuMTY2OTMgNy40NzMwNiAyLjE2NjkzQzcuODc0OTIgMi4xNjY5MyA4LjI1MDUgMi41MDA2MSA4LjM5NjYgMi45OTc4NUw4LjM5Njk1IDIuOTk5MDRDOC40ODQ5OSAzLjI5NTc1IDguNzI4NDMgMy41MjUzOCA4Ljk3ODA5IDMuNjI4MDZDOS40NTYyNSAzLjgyNDkyIDkuOTQ4OTQgNC4xMTExOSAxMC4zMjU1IDQuNjAzNzNDMTAuNjk4MiA1LjA5MTE5IDEwLjk5MDcgNS44MjQ4NiAxMC45OTA3IDYuOTc3NzZDMTAuOTkwNyA4LjM1NTA2IDExLjEzMzcgOS4yMjU1IDExLjQwODkgOS44OTIxN0MxMS42NDgzIDEwLjQ3MjMgMTEuOTgyMyAxMC44NzQ5IDEyLjMxNjcgMTEuMjc4QzEyLjM2NTMgMTEuMzM2NiAxMi40MTM5IDExLjM5NTEgMTIuNDYyMiAxMS40NTQyQzEyLjUwMTYgMTEuNTAyNSAxMi41MDQ2IDExLjU1NTIgMTIuNDc5MyAxMS42MDVDMTIuNDU1MyAxMS42NTI0IDEyLjM5OTYgMTEuNzA0NCAxMi4yODk0IDExLjcwNDRIMi42NTk4NkMyLjU0NjA0IDExLjcwNDQgMi40ODk1NSAxMS42NTA5IDIuNDY1ODggMTEuNjA0NUMyLjQ0MTE5IDExLjU1NjIgMi40NDMyNSAxMS41MDQgMi40ODM4IDExLjQ1NDRMMi40ODM4MyAxMS40NTQ0QzIuNTMyMTUgMTEuMzk1MiAyLjU4MDc1IDExLjMzNjYgMi42MjkzNCAxMS4yNzgxTDIuNjI5NDYgMTEuMjc3OUMyLjk2Mzg5IDEwLjg3NDggMy4yOTc4NSAxMC40NzIzIDMuNTM3NCA5Ljg5MjI5QzMuODEyNzMgOS4yMjU3MSAzLjk1NjE1IDguMzU1MzMgMy45NTY5NSA2Ljk3ODAzVjYuOTc3NzZDMy45NTY5NSA1LjgyMzQxIDQuMjQ5MjggNS4wODk5OSA0LjYyMTY1IDQuNjAzMDlDNC45OTc5MiA0LjExMTEgNS40OTA0NCAzLjgyNTM3IDUuOTY5NjMgMy42MjgwNUM2LjIxNjYxIDMuNTI2NDUgNi40NjI1NyAzLjMwMDAyIDYuNTUxMTEgMi45OTgzM0w2LjU1MTQ1IDIuOTk3MTZaXCIsZmlsbDp0LHJvbGU6XCJpbWdcIn0pfSkpfX0sMTMyNDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Cb29rbWFya0ZpbGxlZD12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuQm9va21hcmtGaWxsZWQ9ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTJcIixoZWlnaHQ6XCIxMlwiLHZpZXdCb3g6XCIwIDAgMTIgMTJcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTIuODAwMDUgMS4xNzU3OEMyLjUyMzkxIDEuMTc1NzggMi4zMDAwNSAxLjM5OTY0IDIuMzAwMDUgMS42NzU3OFYxMC40NzU4QzIuMzAwMDUgMTAuNjY2OSAyLjQwOTA0IDEwLjg0MTQgMi41ODA4NiAxMC45MjUyQzIuNzUyNjcgMTEuMDA5IDIuOTU3MjMgMTAuOTg3NSAzLjEwNzg3IDEwLjg2OThMNS44NDYxNCA4LjczMDUyQzUuOTM2NTggOC42NTk4NiA2LjA2MzUyIDguNjU5ODYgNi4xNTM5NiA4LjczMDUyTDguODkyMjMgMTAuODY5OEM5LjA0Mjg3IDEwLjk4NzUgOS4yNDc0MiAxMS4wMDkgOS40MTkyNCAxMC45MjUyQzkuNTkxMDUgMTAuODQxNCA5LjcwMDA1IDEwLjY2NjkgOS43MDAwNSAxMC40NzU4VjEuNjc1NzhDOS43MDAwNSAxLjM5OTY0IDkuNDc2MTkgMS4xNzU3OCA5LjIwMDA1IDEuMTc1NzhIMi44MDAwNVpcIixmaWxsOnR9KX0pKX19LDExMDM6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQm9va21hcmtPdXRsaW5lZD12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuQm9va21hcmtPdXRsaW5lZD1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxMlwiLGhlaWdodDpcIjEyXCIsdmlld0JveDpcIjAgMCAxMiAxMlwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMi4yOTk5OSAxLjY3NTc4QzIuMjk5OTkgMS4zOTk2NCAyLjUyMzg1IDEuMTc1NzggMi43OTk5OSAxLjE3NTc4SDkuMTk5OTlDOS40NzYxMyAxLjE3NTc4IDkuNjk5OTkgMS4zOTk2NCA5LjY5OTk5IDEuNjc1NzhWMTAuNDc1OEM5LjY5OTk5IDEwLjY2NjkgOS41OTA5OSAxMC44NDE0IDkuNDE5MTggMTAuOTI1MkM5LjI0NzM2IDExLjAwOSA5LjA0MjgxIDEwLjk4NzUgOC44OTIxNyAxMC44Njk4TDYuMTUzOSA4LjczMDUyQzYuMDYzNDYgOC42NTk4NiA1LjkzNjUyIDguNjU5ODYgNS44NDYwOCA4LjczMDUyTDMuMTA3ODEgMTAuODY5OEMyLjk1NzE3IDEwLjk4NzUgMi43NTI2MSAxMS4wMDkgMi41ODA4IDEwLjkyNTJDMi40MDg5OCAxMC44NDE0IDIuMjk5OTkgMTAuNjY2OSAyLjI5OTk5IDEwLjQ3NThWMS42NzU3OFpNMy4yOTk5OSAyLjE3NTc4VjkuNDUwNjZMNS4yMzA0MyA3Ljk0MjVDNS42ODI2NSA3LjU4OTIxIDYuMzE3MzMgNy41ODkyIDYuNzY5NTQgNy45NDI1TDguNjk5OTkgOS40NTA2NlYyLjE3NTc4SDMuMjk5OTlaXCIsZmlsbDp0fSl9KSl9fSw4MjY1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkJyb2tlbkxpbmtJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5Ccm9rZW5MaW5rSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3hzKShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMzJcIixoZWlnaHQ6XCIzMlwiLHZpZXdCb3g6XCIwIDAgMzIgMzJcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46WygwLG8uanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk02LjMzMzUgMy43MDAyQzYuMDU3MzUgMy43MDAyIDUuODMzNSAzLjkyNDA1IDUuODMzNSA0LjIwMDJWMjcuODAwMkM1LjgzMzUgMjguMDc2MyA2LjA1NzM1IDI4LjMwMDIgNi4zMzM1IDI4LjMwMDJIMjUuNjY2OEMyNS45NDMgMjguMzAwMiAyNi4xNjY4IDI4LjA3NjMgMjYuMTY2OCAyNy44MDAyVjEyLjIzMzVIMTguMTMzNUMxNy44NTc0IDEyLjIzMzUgMTcuNjMzNSAxMi4wMDk3IDE3LjYzMzUgMTEuNzMzNVYzLjcwMDJINi4zMzM1Wk0xOC42MzM1IDQuNDA3M0wyNS40NTk3IDExLjIzMzVIMTguNjMzNVY0LjQwNzNaTTQuODMzNSA0LjIwMDJDNC44MzM1IDMuMzcxNzcgNS41MDUwNyAyLjcwMDIgNi4zMzM1IDIuNzAwMkgxOC4xMzM1QzE4LjI2NjEgMi43MDAyIDE4LjM5MzMgMi43NTI4NyAxOC40ODcgMi44NDY2NEwyNy4wMjA0IDExLjM4QzI3LjExNDEgMTEuNDczNyAyNy4xNjY4IDExLjYwMDkgMjcuMTY2OCAxMS43MzM1VjI3LjgwMDJDMjcuMTY2OCAyOC42Mjg2IDI2LjQ5NTMgMjkuMzAwMiAyNS42NjY4IDI5LjMwMDJINi4zMzM1QzUuNTA1MDcgMjkuMzAwMiA0LjgzMzUgMjguNjI4NiA0LjgzMzUgMjcuODAwMlY0LjIwMDJaXCIsZmlsbDp0fSksKDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTE0LjI0OCAyMS45MDg0VjIxLjg0MDlDMTQuMjUyOCAyMS40MDA2IDE0LjI5NjYgMjEuMDUwMiAxNC4zNzk0IDIwLjc4OThDMTQuNDY0NyAyMC41Mjk0IDE0LjU4NTQgMjAuMzE4NyAxNC43NDE3IDIwLjE1NzdDMTQuODk3OSAxOS45OTY3IDE1LjA4NjEgMTkuODQ5OSAxNS4zMDYzIDE5LjcxNzNDMTUuNDQ4MyAxOS42Mjc0IDE1LjU3NjIgMTkuNTI2OCAxNS42ODk4IDE5LjQxNTVDMTUuODAzNCAxOS4zMDQyIDE1Ljg5MzQgMTkuMTc2NCAxNS45NTk3IDE5LjAzMkMxNi4wMjYgMTguODg3NSAxNi4wNTkxIDE4LjcyNzcgMTYuMDU5MSAxOC41NTI2QzE2LjA1OTEgMTguMzQxOSAxNi4wMDk0IDE4LjE1OTYgMTUuOTEgMTguMDA1N0MxNS44MTA1IDE3Ljg1MTggMTUuNjc4IDE3LjczMzQgMTUuNTEyMyAxNy42NTA2QzE1LjM0ODkgMTcuNTY1MyAxNS4xNjY2IDE3LjUyMjcgMTQuOTY1NCAxNy41MjI3QzE0Ljc4MzEgMTcuNTIyNyAxNC42MDkxIDE3LjU2MDYgMTQuNDQzNCAxNy42MzY0QzE0LjI3NzYgMTcuNzEyMSAxNC4xNDAzIDE3LjgzMDUgMTQuMDMxNCAxNy45OTE1QzEzLjkyMjUgMTguMTUwMSAxMy44NTk4IDE4LjM1NDkgMTMuODQzMiAxOC42MDU4SDEyLjc2MzdDMTIuNzgwMiAxOC4xNzk3IDEyLjg4OCAxNy44MTk4IDEzLjA4NjggMTcuNTI2M0MxMy4yODU3IDE3LjIzMDQgMTMuNTQ4NSAxNy4wMDY2IDEzLjg3NTIgMTYuODU1MUMxNC4yMDQyIDE2LjcwMzYgMTQuNTY3NiAxNi42Mjc4IDE0Ljk2NTQgMTYuNjI3OEMxNS40MDEgMTYuNjI3OCAxNS43ODIxIDE2LjcwOTUgMTYuMTA4OCAxNi44NzI5QzE2LjQzNTUgMTcuMDMzOSAxNi42ODg5IDE3LjI1OTkgMTYuODY4OCAxNy41NTExQzE3LjA1MTEgMTcuODQgMTcuMTQyMiAxOC4xNzczIDE3LjE0MjIgMTguNTYzMkMxNy4xNDIyIDE4LjgyODQgMTcuMTAwOCAxOS4wNjc1IDE3LjAxNzkgMTkuMjgwNUMxNi45MzUxIDE5LjQ5MTIgMTYuODE2NyAxOS42Nzk1IDE2LjY2MjggMTkuODQ1MkMxNi41MTEzIDIwLjAxMDkgMTYuMzI5IDIwLjE1NzcgMTYuMTE1OSAyMC4yODU1QzE1LjkxNDcgMjAuNDExIDE1Ljc1MTQgMjAuNTQxMiAxNS42MjU5IDIwLjY3NjFDMTUuNTAyOCAyMC44MTExIDE1LjQxMjggMjAuOTcwOSAxNS4zNTYgMjEuMTU1NUMxNS4yOTkyIDIxLjM0MDIgMTUuMjY4NCAyMS41Njg3IDE1LjI2MzcgMjEuODQwOVYyMS45MDg0SDE0LjI0OFpNMTQuNzg0MyAyNC4wNjc1QzE0LjU5MDEgMjQuMDY3NSAxNC40MjMyIDIzLjk5ODggMTQuMjgzNiAyMy44NjE1QzE0LjE0MzkgMjMuNzIxOCAxNC4wNzQgMjMuNTUzNyAxNC4wNzQgMjMuMzU3MkMxNC4wNzQgMjMuMTYzMSAxNC4xNDM5IDIyLjk5NzQgMTQuMjgzNiAyMi44NjAxQzE0LjQyMzIgMjIuNzIwNCAxNC41OTAxIDIyLjY1MDYgMTQuNzg0MyAyMi42NTA2QzE0Ljk3NiAyMi42NTA2IDE1LjE0MTcgMjIuNzIwNCAxNS4yODE0IDIyLjg2MDFDMTUuNDIzNSAyMi45OTc0IDE1LjQ5NDUgMjMuMTYzMSAxNS40OTQ1IDIzLjM1NzJDMTUuNDk0NSAyMy40ODc1IDE1LjQ2MTQgMjMuNjA3IDE1LjM5NTEgMjMuNzE1OUMxNS4zMzExIDIzLjgyMjQgMTUuMjQ1OSAyMy45MDc3IDE1LjEzOTQgMjMuOTcxNkMxNS4wMzI4IDI0LjAzNTUgMTQuOTE0NSAyNC4wNjc1IDE0Ljc4NDMgMjQuMDY3NVpcIixmaWxsOnR9KV19KSl9fSw2NDQ3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNoZXZyb25Eb3duSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuQ2hldnJvbkRvd25JY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsd2lkdGg6XCIyNFwiLGhlaWdodDpcIjI0XCIsdmlld0JveDpcIjAgMCAyNCAyNFwiLGZpbGw6XCJub25lXCJ9LHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIsT2JqZWN0LmFzc2lnbih7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk01LjA1MjgyIDkuODg3MDdDNS4zMzYxMiA5LjU4NDg5IDUuODEwNzUgOS41Njk1OCA2LjExMjkzIDkuODUyODdMMTIgMTUuMzcyTDE3Ljg4NyA5Ljg1Mjg3QzE4LjE4OTIgOS41Njk1OCAxOC42NjM4IDkuNTg0ODkgMTguOTQ3MSA5Ljg4NzA3QzE5LjIzMDQgMTAuMTg5MyAxOS4yMTUxIDEwLjY2MzkgMTguOTEyOSAxMC45NDcyTDEyLjUxMjkgMTYuOTQ3MkMxMi4yMjQ0IDE3LjIxNzYgMTEuNzc1NSAxNy4yMTc2IDExLjQ4NyAxNi45NDcyTDUuMDg3MDIgMTAuOTQ3MkM0Ljc4NDg0IDEwLjY2MzkgNC43Njk1MiAxMC4xODkzIDUuMDUyODIgOS44ODcwN1pcIixmaWxsOnR9LG4pKX0pKX19LDIxNDc6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2hldnJvbkxlZnRJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5DaGV2cm9uTGVmdEljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3htbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIix3aWR0aDpcIjI0XCIsaGVpZ2h0OlwiMjRcIix2aWV3Qm94OlwiMCAwIDI0IDI0XCIsZmlsbDpcIm5vbmVcIn0se2NoaWxkcmVuOigwLG8uanN4KShcInBhdGhcIixPYmplY3QuYXNzaWduKHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTE0LjExMjcgNS4wNTI3MkMxNC40MTQ5IDUuMzM2MDEgMTQuNDMwMiA1LjgxMDY0IDE0LjE0NjkgNi4xMTI4Mkw4LjYyNzg0IDExLjk5OTlMMTQuMTQ2OSAxNy44ODY5QzE0LjQzMDIgMTguMTg5MSAxNC40MTQ5IDE4LjY2MzcgMTQuMTEyNyAxOC45NDdDMTMuODEwNiAxOS4yMzAzIDEzLjMzNTkgMTkuMjE1IDEzLjA1MjYgMTguOTEyOEw3LjA1MjY0IDEyLjUxMjhDNi43ODIxOCAxMi4yMjQzIDYuNzgyMTggMTEuNzc1NCA3LjA1MjY0IDExLjQ4NjlMMTMuMDUyNiA1LjA4NjkxQzEzLjMzNTkgNC43ODQ3MyAxMy44MTA2IDQuNzY5NDIgMTQuMTEyNyA1LjA1MjcyWlwiLGZpbGw6dH0sbikpfSkpfX0sMjQwMjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DaGV2cm9uUmlnaHRJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5DaGV2cm9uUmlnaHRJY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsd2lkdGg6XCIyNFwiLGhlaWdodDpcIjI0XCIsdmlld0JveDpcIjAgMCAyNCAyNFwiLGZpbGw6XCJub25lXCJ9LHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIsT2JqZWN0LmFzc2lnbih7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk05Ljg4NzYyIDUuMDUyNTZDMTAuMTg5OCA0Ljc2OTI2IDEwLjY2NDQgNC43ODQ1NyAxMC45NDc3IDUuMDg2NzZMMTYuOTQ3NyAxMS40ODY4QzE3LjIxODIgMTEuNzc1MyAxNy4yMTgyIDEyLjIyNDIgMTYuOTQ3NyAxMi41MTI3TDEwLjk0NzcgMTguOTEyN0MxMC42NjQ0IDE5LjIxNDkgMTAuMTg5OCAxOS4yMzAyIDkuODg3NjIgMTguOTQ2OUM5LjU4NTQzIDE4LjY2MzYgOS41NzAxMiAxOC4xODg5IDkuODUzNDIgMTcuODg2OEwxNS4zNzI1IDExLjk5OTdMOS44NTM0MiA2LjExMjY3QzkuNTcwMTIgNS44MTA0OSA5LjU4NTQ0IDUuMzM1ODYgOS44ODc2MiA1LjA1MjU2WlwiLGZpbGw6dH0sbikpfSkpfX0sNDgyNTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DaGV2cm9uVXBJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5DaGV2cm9uVXBJY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsd2lkdGg6XCIyNFwiLGhlaWdodDpcIjI0XCIsdmlld0JveDpcIjAgMCAyNCAyNFwiLGZpbGw6XCJub25lXCJ9LHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIsT2JqZWN0LmFzc2lnbih7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk01LjA1Mjg1IDE0LjExMjlDNS4zMzYxNSAxNC40MTUxIDUuODEwNzggMTQuNDMwNCA2LjExMjk2IDE0LjE0NzFMMTIgOC42MjgwMkwxNy44ODcgMTQuMTQ3MUMxOC4xODkyIDE0LjQzMDQgMTguNjYzOSAxNC40MTUxIDE4Ljk0NzIgMTQuMTEyOUMxOS4yMzA1IDEzLjgxMDcgMTkuMjE1MSAxMy4zMzYxIDE4LjkxMyAxMy4wNTI4TDEyLjUxMyA3LjA1MjgyQzEyLjIyNDUgNi43ODIzNiAxMS43NzU1IDYuNzgyMzYgMTEuNDg3MSA3LjA1MjgyTDUuMDg3MDUgMTMuMDUyOEM0Ljc4NDg3IDEzLjMzNjEgNC43Njk1NiAxMy44MTA3IDUuMDUyODUgMTQuMTEyOVpcIixmaWxsOnR9LG4pKX0pKX19LDEyODE6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuRXhjbGFtYXRpb25DaXJjbGVkRmlsbGVkSWNvbj12b2lkIDA7Y29uc3Qgcj1uKDU4OTMpO3QuRXhjbGFtYXRpb25DaXJjbGVkRmlsbGVkSWNvbj1lPT4oMCxyLmpzeHMpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNlwiLGhlaWdodDpcIjE3XCIsdmlld0JveDpcIjAgMCAxNiAxN1wiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlLHtjaGlsZHJlbjpbKDAsci5qc3gpKFwicGF0aFwiLHtkOlwiTTcuOTk5ODggMTUuMzMxN0MxMS43NzI5IDE1LjMzMTcgMTQuODMxNiAxMi4yNzMxIDE0LjgzMTYgOC41MDAwN0MxNC44MzE2IDQuNzI3MDQgMTEuNzcyOSAxLjY2ODQgNy45OTk4OCAxLjY2ODRDNC4yMjY4NiAxLjY2ODQgMS4xNjgyMSA0LjcyNzA0IDEuMTY4MjEgOC41MDAwN0MxLjE2ODIxIDEyLjI3MzEgNC4yMjY4NiAxNS4zMzE3IDcuOTk5ODggMTUuMzMxN1pcIixmaWxsOlwicmVkXCJ9KSwoMCxyLmpzeCkoXCJtYXNrXCIsT2JqZWN0LmFzc2lnbih7aWQ6XCJwYXRoLTItaW5zaWRlLTFfNl8yNjIwMzNcIixmaWxsOlwid2hpdGVcIn0se2NoaWxkcmVuOigwLHIuanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk03Ljk5OTkzIDQuMzczODRDNy41NzUyNSA0LjM3Mzg0IDcuMjM1NjQgNC43MjY3NiA3LjI1MTk2IDUuMTUxMTNMNy40MjI5NiA5LjU5NzA2QzcuNDM0ODkgOS45MDcwOCA3LjY4OTY4IDEwLjE1MjMgNy45OTk5MyAxMC4xNTIzQzguMzEwMTkgMTAuMTUyMyA4LjU2NDk4IDkuOTA3MDggOC41NzY5IDkuNTk3MDZMOC43NDc5IDUuMTUxMTNDOC43NjQyMiA0LjcyNjc2IDguNDI0NjEgNC4zNzM4NCA3Ljk5OTkzIDQuMzczODRaTTcuOTk5OTMgMTIuNjQwNkM4LjQ2MDIyIDEyLjY0MDYgOC44MzMzNSAxMi4yNjc1IDguODMzMzUgMTEuODA3MkM4LjgzMzM1IDExLjM0NjkgOC40NjAyMiAxMC45NzM4IDcuOTk5OTMgMTAuOTczOEM3LjUzOTY0IDEwLjk3MzggNy4xNjY1IDExLjM0NjkgNy4xNjY1IDExLjgwNzJDNy4xNjY1IDEyLjI2NzUgNy41Mzk2NCAxMi42NDA2IDcuOTk5OTMgMTIuNjQwNlpcIn0pfSkpLCgwLHIuanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk03Ljk5OTkzIDQuMzczODRDNy41NzUyNSA0LjM3Mzg0IDcuMjM1NjQgNC43MjY3NiA3LjI1MTk2IDUuMTUxMTNMNy40MjI5NiA5LjU5NzA2QzcuNDM0ODkgOS45MDcwOCA3LjY4OTY4IDEwLjE1MjMgNy45OTk5MyAxMC4xNTIzQzguMzEwMTkgMTAuMTUyMyA4LjU2NDk4IDkuOTA3MDggOC41NzY5IDkuNTk3MDZMOC43NDc5IDUuMTUxMTNDOC43NjQyMiA0LjcyNjc2IDguNDI0NjEgNC4zNzM4NCA3Ljk5OTkzIDQuMzczODRaTTcuOTk5OTMgMTIuNjQwNkM4LjQ2MDIyIDEyLjY0MDYgOC44MzMzNSAxMi4yNjc1IDguODMzMzUgMTEuODA3MkM4LjgzMzM1IDExLjM0NjkgOC40NjAyMiAxMC45NzM4IDcuOTk5OTMgMTAuOTczOEM3LjUzOTY0IDEwLjk3MzggNy4xNjY1IDExLjM0NjkgNy4xNjY1IDExLjgwNzJDNy4xNjY1IDEyLjI2NzUgNy41Mzk2NCAxMi42NDA2IDcuOTk5OTMgMTIuNjQwNlpcIixmaWxsOlwid2hpdGVcIn0pLCgwLHIuanN4KShcInBhdGhcIix7ZDpcIk03LjI1MTk2IDUuMTUxMTNMNS42NDg3NCA1LjIxMjc5TDUuNjQ4NzQgNS4yMTI3OUw3LjI1MTk2IDUuMTUxMTNaTTcuNDIyOTYgOS41OTcwNkw5LjAyNjE4IDkuNTM1NEw5LjAyNjE4IDkuNTM1NEw3LjQyMjk2IDkuNTk3MDZaTTguNTc2OSA5LjU5NzA2TDEwLjE4MDEgOS42NTg3Mkw4LjU3NjkgOS41OTcwNlpNOC43NDc5IDUuMTUxMTNMMTAuMzUxMSA1LjIxMjc5TDEwLjM1MTEgNS4yMTI3OUw4Ljc0NzkgNS4xNTExM1pNOC44NTUxOSA1LjA4OTQ3QzguODczODUgNS41NzQ3IDguNDg1NTMgNS45NzgyNSA3Ljk5OTkzIDUuOTc4MjVWMi43Njk0M0M2LjY2NDk4IDIuNzY5NDMgNS41OTc0NCAzLjg3ODgyIDUuNjQ4NzQgNS4yMTI3OUw4Ljg1NTE5IDUuMDg5NDdaTTkuMDI2MTggOS41MzU0TDguODU1MTkgNS4wODk0N0w1LjY0ODc0IDUuMjEyNzlMNS44MTk3NCA5LjY1ODcyTDkuMDI2MTggOS41MzU0Wk03Ljk5OTkzIDguNTQ3ODZDOC41NTE3NyA4LjU0Nzg2IDkuMDA0OTggOC45ODM5NiA5LjAyNjE4IDkuNTM1NEw1LjgxOTc0IDkuNjU4NzJDNS44NjQ4IDEwLjgzMDIgNi44Mjc1OCAxMS43NTY3IDcuOTk5OTMgMTEuNzU2N1Y4LjU0Nzg2Wk02Ljk3MzY4IDkuNTM1NEM2Ljk5NDg5IDguOTgzOTYgNy40NDgwOSA4LjU0Nzg2IDcuOTk5OTMgOC41NDc4NlYxMS43NTY3QzkuMTcyMjggMTEuNzU2NyAxMC4xMzUxIDEwLjgzMDIgMTAuMTgwMSA5LjY1ODcyTDYuOTczNjggOS41MzU0Wk03LjE0NDY4IDUuMDg5NDdMNi45NzM2OCA5LjUzNTRMMTAuMTgwMSA5LjY1ODcyTDEwLjM1MTEgNS4yMTI3OUw3LjE0NDY4IDUuMDg5NDdaTTcuOTk5OTMgNS45NzgyNUM3LjUxNDM0IDUuOTc4MjUgNy4xMjYwMiA1LjU3NDcgNy4xNDQ2OCA1LjA4OTQ3TDEwLjM1MTEgNS4yMTI3OUMxMC40MDI0IDMuODc4ODIgOS4zMzQ4OSAyLjc2OTQzIDcuOTk5OTMgMi43Njk0M1Y1Ljk3ODI1Wk03LjIyODk1IDExLjgwNzJDNy4yMjg5NSAxMS4zODE0IDcuNTc0MTMgMTEuMDM2MiA3Ljk5OTkzIDExLjAzNjJWMTQuMjQ1QzkuMzQ2MzEgMTQuMjQ1IDEwLjQzNzggMTMuMTUzNiAxMC40Mzc4IDExLjgwNzJINy4yMjg5NVpNNy45OTk5MyAxMi41NzgyQzcuNTc0MTMgMTIuNTc4MiA3LjIyODk1IDEyLjIzMyA3LjIyODk1IDExLjgwNzJIMTAuNDM3OEMxMC40Mzc4IDEwLjQ2MDggOS4zNDYzMSA5LjM2OTM3IDcuOTk5OTMgOS4zNjkzN1YxMi41NzgyWk04Ljc3MDkxIDExLjgwNzJDOC43NzA5MSAxMi4yMzMgOC40MjU3MyAxMi41NzgyIDcuOTk5OTMgMTIuNTc4MlY5LjM2OTM3QzYuNjUzNTUgOS4zNjkzNyA1LjU2MjEgMTAuNDYwOCA1LjU2MjEgMTEuODA3Mkg4Ljc3MDkxWk03Ljk5OTkzIDExLjAzNjJDOC40MjU3MyAxMS4wMzYyIDguNzcwOTEgMTEuMzgxNCA4Ljc3MDkxIDExLjgwNzJINS41NjIxQzUuNTYyMSAxMy4xNTM2IDYuNjUzNTUgMTQuMjQ1IDcuOTk5OTMgMTQuMjQ1VjExLjAzNjJaXCIsZmlsbDpcIndoaXRlXCIsbWFzazpcInVybCgjcGF0aC0yLWluc2lkZS0xXzZfMjYyMDMzKVwifSldfSkpfSwxNDA5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkZhbGxiYWNrR2xvYmVJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5GYWxsYmFja0dsb2JlSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNlwiLGhlaWdodDpcIjE2XCIsdmlld0JveDpcIjAgMCAxNiAxNlwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNMTQuNDE0MSA1LjE5OTk4QzEzLjU5MzcgMy4zMzA2MiAxMS45Nzg4IDEuODg1ODIgOS45OTg4NiAxLjI5NDMyQzEwLjYxNzcgMi4yNjIwNyAxMS4wNTE3IDMuNjYzNDcgMTEuMjg4NiA1LjE5OTk4SDE0LjQxNDFaTTE0Ljc3NzEgOS43NDk5OEMxNC45MjIgOS4xOTAzMyAxNSA4LjYwNDQzIDE1IDcuOTk5OThDMTUgNy4zOTU1MyAxNC45MjIgNi44MDk2MyAxNC43NzcxIDYuMjQ5OThIMTEuNDE3MUMxMS40NzEzIDYuODI5MjMgMTEuNSA3LjQxNjg4IDExLjUgNy45OTk5OEMxMS41IDguNTgzMDggMTEuNDcxMyA5LjE3MDczIDExLjQxNzEgOS43NDk5OEgxNC43NzcxWk00LjUwMDAxIDcuOTk5OThDNC41MDAwMSA3LjQxNjg4IDQuNTI4NzEgNi44MjkyMyA0LjU4Mjk2IDYuMjQ5OThIMS4yMjI5NUMxLjA3ODA1IDYuODA5NjMgMSA3LjM5NTUzIDEgNy45OTk5OEMxIDguNjA0NDMgMS4wNzgwNSA5LjE5MDMzIDEuMjIyOTUgOS43NDk5OEg0LjU4Mjk2QzQuNTI4NzEgOS4xNzA3MyA0LjUwMDAxIDguNTgzMDggNC41MDAwMSA3Ljk5OTk4Wk0xMC40NSA3Ljk5OTk4QzEwLjQ1IDcuMzg5NTggMTAuNDE2OCA2LjgwNjQ4IDEwLjM2MTggNi4yNDk5OEg1LjYzODIxQzUuNTgzMjYgNi44MDY0OCA1LjU1MDAxIDcuMzg5NTggNS41NTAwMSA3Ljk5OTk4QzUuNTUwMDEgOC42MTAzOCA1LjU4MzI2IDkuMTkzNDggNS42MzgyMSA5Ljc0OTk4SDEwLjM2MThDMTAuNDE2OCA5LjE5MzQ4IDEwLjQ1IDguNjEwMzggMTAuNDUgNy45OTk5OFpNMTAuMjI2NyA1LjE5OTk4QzkuODA3NDEgMi42NzcxNyA4Ljg2NTU2IDAuOTk5OTY5IDguMDAwMDEgMC45OTk5NjlDNy4xMzQ0NiAwLjk5OTk2OSA2LjE5MjYxIDIuNjc3MTcgNS43NzMzMSA1LjE5OTk4SDEwLjIyNjdaTTUuNzczMzEgMTAuOEM2LjE5MjYxIDEzLjMyMjggNy4xMzQ4MSAxNSA4LjAwMDAxIDE1QzguODY1MjEgMTUgOS44MDc0MSAxMy4zMjI4IDEwLjIyNjcgMTAuOEg1Ljc3MzMxWk00LjcxMTQxIDUuMTk5OThDNC45NDgzNiAzLjY2MzQ3IDUuMzgyMzYgMi4yNjIwNyA2LjAwMTE2IDEuMjk0MzJDNC4wMjEyIDEuODg1ODIgMi40MDYzIDMuMzMwNjIgMS41ODU5IDUuMTk5OThINC43MTE0MVpNMTEuMjg4NiAxMC44QzExLjA1MTcgMTIuMzM2NSAxMC42MTc3IDEzLjczNzkgOS45OTg4NiAxNC43MDU2QzExLjk3ODggMTQuMTE0MSAxMy41OTM3IDEyLjY2OTcgMTQuNDE0MSAxMC44SDExLjI4ODZaTTEuNTg1OSAxMC44QzIuNDA2MyAxMi42NjkzIDQuMDIxMiAxNC4xMTQxIDYuMDAxMTYgMTQuNzA1NkM1LjM4MjM2IDEzLjczNzkgNC45NDgzNiAxMi4zMzY1IDQuNzExNDEgMTAuOEgxLjU4NTlaXCIsZmlsbDp0LGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSl9KSl9fSw3NDI5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkZpbGxlZENpcmNsZUljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0LkZpbGxlZENpcmNsZUljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTZcIixoZWlnaHQ6XCIxNlwiLHZpZXdCb3g6XCIwIDAgMTYgMTZcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwiZ1wiLE9iamVjdC5hc3NpZ24oe2lkOlwiLlNsb3RcIn0se2NoaWxkcmVuOigwLG8uanN4KShcImNpcmNsZVwiLHtpZDpcIkVsbGlwc2UgMVwiLGN4OlwiOFwiLGN5OlwiOFwiLHI6XCI4XCIsZmlsbDp0fSl9KSl9KSl9fSw2Nzk1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkZpbHRlckljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0LkZpbHRlckljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTJcIixoZWlnaHQ6XCI3XCIsdmlld0JveDpcIjAgMCAxMiA3XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LG4se2NoaWxkcmVuOigwLG8uanN4KShcInBhdGhcIix7ZDpcIk00IDYuNUM0IDYuMzY3MzkgNC4wNTI2OCA2LjI0MDIxIDQuMTQ2NDUgNi4xNDY0NUM0LjI0MDIxIDYuMDUyNjggNC4zNjczOSA2IDQuNSA2SDcuNUM3LjYzMjYxIDYgNy43NTk3OSA2LjA1MjY4IDcuODUzNTUgNi4xNDY0NUM3Ljk0NzMyIDYuMjQwMjEgOCA2LjM2NzM5IDggNi41QzggNi42MzI2MSA3Ljk0NzMyIDYuNzU5NzkgNy44NTM1NSA2Ljg1MzU1QzcuNzU5NzkgNi45NDczMiA3LjYzMjYxIDcgNy41IDdINC41QzQuMzY3MzkgNyA0LjI0MDIxIDYuOTQ3MzIgNC4xNDY0NSA2Ljg1MzU1QzQuMDUyNjggNi43NTk3OSA0IDYuNjMyNjEgNCA2LjVaTTIgMy41QzIgMy4zNjczOSAyLjA1MjY4IDMuMjQwMjEgMi4xNDY0NSAzLjE0NjQ1QzIuMjQwMjEgMy4wNTI2OCAyLjM2NzM5IDMgMi41IDNIOS41QzkuNjMyNjEgMyA5Ljc1OTc5IDMuMDUyNjggOS44NTM1NSAzLjE0NjQ1QzkuOTQ3MzIgMy4yNDAyMSAxMCAzLjM2NzM5IDEwIDMuNUMxMCAzLjYzMjYxIDkuOTQ3MzIgMy43NTk3OSA5Ljg1MzU1IDMuODUzNTVDOS43NTk3OSAzLjk0NzMyIDkuNjMyNjEgNCA5LjUgNEgyLjVDMi4zNjczOSA0IDIuMjQwMjEgMy45NDczMiAyLjE0NjQ1IDMuODUzNTVDMi4wNTI2OCAzLjc1OTc5IDIgMy42MzI2MSAyIDMuNVpNMCAwLjVDMCAwLjM2NzM5MiAwLjA1MjY3ODUgMC4yNDAyMTUgMC4xNDY0NDcgMC4xNDY0NDdDMC4yNDAyMTUgMC4wNTI2Nzg1IDAuMzY3MzkyIDAgMC41IDBIMTEuNUMxMS42MzI2IDAgMTEuNzU5OCAwLjA1MjY3ODUgMTEuODUzNiAwLjE0NjQ0N0MxMS45NDczIDAuMjQwMjE1IDEyIDAuMzY3MzkyIDEyIDAuNUMxMiAwLjYzMjYwOCAxMS45NDczIDAuNzU5Nzg1IDExLjg1MzYgMC44NTM1NTNDMTEuNzU5OCAwLjk0NzMyMSAxMS42MzI2IDEgMTEuNSAxSDAuNUMwLjM2NzM5MiAxIDAuMjQwMjE1IDAuOTQ3MzIxIDAuMTQ2NDQ3IDAuODUzNTUzQzAuMDUyNjc4NSAwLjc1OTc4NSAwIDAuNjMyNjA4IDAgMC41WlwiLGZpbGw6dH0pfSkpfX0sMTE3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkZsb3BweURpc2tJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5GbG9wcHlEaXNrSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxMlwiLGhlaWdodDpcIjEyXCIsdmlld0JveDpcIjAgMCAxMiAxMlwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNMS44NzUgMi4xODc1QzEuODc1IDIuMTUyOTggMS45MDI5OCAyLjEyNSAxLjkzNzUgMi4xMjVIOC4yMzAzOUM4LjI0Njk3IDIuMTI1IDguMjYyODcgMi4xMzE1OCA4LjI3NDU5IDIuMTQzMzFMOS45ODE2OSAzLjg1MDQxQzkuOTkzNDEgMy44NjIxMyAxMCAzLjg3ODAzIDEwIDMuODk0NjFWMTAuMTg3NUMxMCAxMC4yMjIgOS45NzIwMiAxMC4yNSA5LjkzNzUgMTAuMjVIMS45Mzc1QzEuOTAyOTggMTAuMjUgMS44NzUgMTAuMjIyIDEuODc1IDEwLjE4NzVWMi4xODc1Wk0xLjkzNzUgMS4yNUMxLjQxOTczIDEuMjUgMSAxLjY2OTczIDEgMi4xODc1VjEwLjE4NzVDMSAxMC43MDUzIDEuNDE5NzMgMTEuMTI1IDEuOTM3NSAxMS4xMjVIOS45Mzc1QzEwLjQ1NTMgMTEuMTI1IDEwLjg3NSAxMC43MDUzIDEwLjg3NSAxMC4xODc1VjMuODk0NjFDMTAuODc1IDMuNjQ1OTcgMTAuNzc2MiAzLjQwNzUxIDEwLjYwMDQgMy4yMzE2OUw4Ljg5MzMxIDEuNTI0NTlDOC43MTc0OSAxLjM0ODc3IDguNDc5MDMgMS4yNSA4LjIzMDM5IDEuMjVIMS45Mzc1Wk0yLjg0OTI0IDMuNDA4MUMyLjg0OTI0IDMuMjM3NTQgMi45ODc1MSAzLjA5OTI3IDMuMTU4MDcgMy4wOTkyN0g3LjQ4MTZDNy42NTIxNSAzLjA5OTI3IDcuNzkwNDIgMy4yMzc1NCA3Ljc5MDQyIDMuNDA4MVY0LjY0MzM5QzcuNzkwNDIgNC44MTM5NSA3LjY1MjE1IDQuOTUyMjEgNy40ODE2IDQuOTUyMjFIMy4xNTgwN0MyLjk4NzUxIDQuOTUyMjEgMi44NDkyNCA0LjgxMzk1IDIuODQ5MjQgNC42NDMzOVYzLjQwODFaTTQuNTM2OCA2LjYzOTc3QzQuODI2MzggNi4zNTAxOSA1LjIxOTEzIDYuMTg3NTEgNS42Mjg2NSA2LjE4NzUxQzYuMDM4MTggNi4xODc1MSA2LjQzMDkzIDYuMzUwMTkgNi43MjA1MSA2LjYzOTc3QzcuMDEwMDkgNi45MjkzNSA3LjE3Mjc3IDcuMzIyMSA3LjE3Mjc3IDcuNzMxNjNDNy4xNzI3NyA4LjE0MTE1IDcuMDEwMDkgOC41MzM5IDYuNzIwNTEgOC44MjM0OEM2LjQzMDkzIDkuMTEzMDYgNi4wMzgxOCA5LjI3NTc0IDUuNjI4NjUgOS4yNzU3NEM1LjIxOTEzIDkuMjc1NzQgNC44MjYzOCA5LjExMzA2IDQuNTM2OCA4LjgyMzQ4QzQuMjQ3MjIgOC41MzM5IDQuMDg0NTQgOC4xNDExNSA0LjA4NDU0IDcuNzMxNjNDNC4wODQ1NCA3LjMyMjEgNC4yNDcyMiA2LjkyOTM1IDQuNTM2OCA2LjYzOTc3WlwiLGZpbGw6dCxyb2xlOlwiaW1nXCJ9KX0pKX19LDUyOTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5GcmFnbWVudHNJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5GcmFnbWVudHNJY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjIwXCIsaGVpZ2h0OlwiMjBcIix2aWV3Qm94OlwiMCAwIDI0IDI0XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LG4se2NoaWxkcmVuOigwLG8uanN4KShcInBhdGhcIix7ZDpcIk04LjgwMDAxIDQuODAwMDJINC44MDAwMUMzLjkxNzYxIDQuODAwMDIgMy4yMDAwMSA1LjUxNzYyIDMuMjAwMDEgNi40MDAwMlYxMC40QzMuMjAwMDEgMTEuMjgyNCAzLjkxNzYxIDEyIDQuODAwMDEgMTJIOC44MDAwMUM5LjY4MjQxIDEyIDEwLjQgMTEuMjgyNCAxMC40IDEwLjRWNi40MDAwMkMxMC40IDUuNTE3NjIgOS42ODI0MSA0LjgwMDAyIDguODAwMDEgNC44MDAwMlpNMjAuMzU5MiA2LjQ2ODgyTDE3LjUzMTIgMy42NDAwMkMxNi45MDggMy4wMTYwMiAxNS44OTIgMy4wMTYwMiAxNS4yNjg4IDMuNjQwMDJMMTIuNDQwOCA2LjQ2ODgyQzExLjgxNjggNy4wOTI4MiAxMS44MTY4IDguMTA3MjIgMTIuNDQwOCA4LjczMTIyTDE1LjI2ODggMTEuNTZDMTUuNTgwOCAxMS44NzIgMTUuOTkwNCAxMi4wMjggMTYuNCAxMi4wMjhDMTYuODA5NiAxMi4wMjggMTcuMjE5MiAxMS44NzIgMTcuNTMxMiAxMS41NkwyMC4zNTkyIDguNzMxMjJDMjAuOTgzMiA4LjEwNzIyIDIwLjk4MzIgNy4wOTI4MiAyMC4zNTkyIDYuNDY4ODJaTTguODAwMDEgMTMuNkg0LjgwMDAxQzMuOTE3NjEgMTMuNiAzLjIwMDAxIDE0LjMxNzYgMy4yMDAwMSAxNS4yVjE5LjJDMy4yMDAwMSAyMC4wODI0IDMuOTE3NjEgMjAuOCA0LjgwMDAxIDIwLjhIOC44MDAwMUM5LjY4MjQxIDIwLjggMTAuNCAyMC4wODI0IDEwLjQgMTkuMlYxNS4yQzEwLjQgMTQuMzE3NiA5LjY4MjQxIDEzLjYgOC44MDAwMSAxMy42Wk0xNy42IDEzLjZIMTMuNkMxMi43MTc2IDEzLjYgMTIgMTQuMzE3NiAxMiAxNS4yVjE5LjJDMTIgMjAuMDgyNCAxMi43MTc2IDIwLjggMTMuNiAyMC44SDE3LjZDMTguNDgyNCAyMC44IDE5LjIgMjAuMDgyNCAxOS4yIDE5LjJWMTUuMkMxOS4yIDE0LjMxNzYgMTguNDgyNCAxMy42IDE3LjYgMTMuNlpcIixmaWxsOnR9KX0pKX19LDc3ODg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTGlnaHRCdWxiRmlsbGVkSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuTGlnaHRCdWxiRmlsbGVkSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3hzKShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTBcIixoZWlnaHQ6XCIxMlwiLHZpZXdCb3g6XCIwIDAgMTAgMTJcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46WygwLG8uanN4KShcInBhdGhcIix7ZDpcIk0xLjgzIDEuMzEwMDhDMi4yNDQwOSAwLjg5MTY2NyAyLjczNzY4IDAuNTYwMzA3IDMuMjgxNzQgMC4zMzU1MDRDMy44MjU4MSAwLjExMDcwMSA0LjQwOTM0IC0wLjAwMzAwMzMzIDQuOTk4IDAuMDAxMDgyOTFDNi4xODYyOCAtMC4wMDMxMDc4NSA3LjMyOTA1IDAuNDU3NzMzIDguMTgyIDEuMjg1MDhDOC41OTg4MSAxLjY4NzE5IDguOTMwNDYgMi4xNjkwMyA5LjE1NzIzIDIuNzAxOTRDOS4zODQgMy4yMzQ4NSA5LjUwMTI1IDMuODA3OTMgOS41MDIgNC4zODcwOEM5LjUwMiA1LjY4MDA4IDguOTE3IDYuODMwMDggNy44ODMgNy44MjUwOEw3LjU3NyA5LjAwMDA4SDIuNDY2TDIuMjM2IDguMDM3MDhDMS4xNTQgNi45MDcwOCAwLjU1NiA1LjgxOTA4IDAuNSA0LjU4MjA4VjQuNTQ0MDhDMC41NCAzLjI0ODA4IDEuMDMzIDIuMTIxMDggMS44MzEgMS4zMTEwOEwxLjgzIDEuMzEwMDhaXCIsZmlsbDp0fSksKDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTIuNzA0MSAxMEwyLjkzNzEgMTAuOTc4TDIuOTQ1MSAxMUMzLjA0NTEgMTEuMjk3IDMuMjM3MSAxMS41NDQgMy40NzkxIDExLjcxN0MzLjczMDEgMTEuODk3IDQuMDM3MSAxMS45OTkgNC4zNjExIDExLjk5OUg0LjM2MzFMNS43NDYxIDExLjk5NUw1Ljc2NzEgMTEuOTkzQzYuMDc1ODcgMTEuOTY2OSA2LjM2OTEzIDExLjg0NjUgNi42MDcxIDExLjY0OEM2LjgzODEgMTEuNDU0IDcuMDEzMSAxMS4xODggNy4wODcxIDEwLjg3NEw3LjMxNjEgMTBIMi43MDQxVjEwWlwiLGZpbGw6dH0pXX0pKX19LDM3MDM6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTGlnaHRCdWxiT3V0bGluZWRJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5MaWdodEJ1bGJPdXRsaW5lZEljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTBcIixoZWlnaHQ6XCIxMlwiLHZpZXdCb3g6XCIwIDAgMTAgMTJcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTQuOTk3NjYgMC4wMDEwMDE0OUMzLjc2ODY2IDAuMDAxMDAxNDkgMi42NDc2NiAwLjQ4MjAwMiAxLjgyOTY2IDEuMzExQzEuMDMxNjYgMi4xMjEgMC41Mzk2NTcgMy4yNDggMC40OTk2NTcgNC41NDRMMC40OTg2NTcgNC41NjNWNC41ODNDMC41NTU2NTcgNS44MTkgMS4xNTM2NiA2LjkwNyAyLjIzNTY2IDguMDM3TDIuOTM3NjYgMTAuOTc4TDIuOTQ0NjYgMTFDMy4wNDQ2NiAxMS4yOTcgMy4yMzY2NiAxMS41NDQgMy40Nzg2NiAxMS43MTdDMy43Mjk2NiAxMS44OTcgNC4wMzY2NiAxMS45OTkgNC4zNjE2NiAxMS45OTlMNS43NDU2NiAxMS45OTVMNS43NjY2NiAxMS45OTNDNi4wNzU0MiAxMS45NjY5IDYuMzY4NjkgMTEuODQ2NSA2LjYwNjY2IDExLjY0OEM2LjgzNzY2IDExLjQ1NCA3LjAxMjY2IDExLjE4OCA3LjA4NjY2IDEwLjg3NEw3Ljg4MjY2IDcuODI0QzguOTE2NjYgNi44MyA5LjUwMDY2IDUuNjggOS41MDA2NiA0LjM4N0M5LjQ5OTkxIDMuODA3ODUgOS4zODI2NiAzLjIzNDc3IDkuMTU1ODkgMi43MDE4NkM4LjkyOTEyIDIuMTY4OTUgOC41OTc0NiAxLjY4NzExIDguMTgwNjYgMS4yODVDNy4zMjc5NiAwLjQ1Nzg5NCA2LjE4NTU5IC0wLjAwMjkyNzg4IDQuOTk3NjYgMC4wMDEwMDE0OVpNMi41NDI2NiAyLjAxM0MyLjg2MzQ0IDEuNjg4NzEgMy4yNDU5NiAxLjQzMTk4IDMuNjY3NjIgMS4yNThDNC4wODkyOCAxLjA4NDAxIDQuNTQxNTMgMC45OTYyODMgNC45OTc2NiAxQzUuOTI1MTQgMC45OTU3ODQgNi44MTc0NCAxLjM1NDcxIDcuNDgzNjYgMkM3LjgwNDcxIDIuMzA5MDQgOC4wNjAyMyAyLjY3OTU3IDguMjM0OTYgMy4wODk1MUM4LjQwOTY5IDMuNDk5NDUgOC41MDAwNSAzLjk0MDM4IDguNTAwNjYgNC4zODZDOC41MDA2NiA1LjM3NyA4LjA0NzY2IDYuMzEyIDcuMDk2NjYgNy4xOTFMNi45ODg2NiA3LjI5MUw2LjU0MjY2IDlIMy40OTM2NkwzLjE0NDY2IDcuNTM2TDMuMDQ3NjYgNy40MzZDMS45OTk2NiA2LjM3MiAxLjU0NzY2IDUuNDggMS40OTg2NiA0LjU1N0MxLjUzNjY2IDMuNTA5IDEuOTMyNjYgMi42MzIgMi41NDI2NiAyLjAxNFYyLjAxM1pNMy43MzI2NiAxMEg2LjI4MjY2TDYuMTE3NjYgMTAuNjI3TDYuMTE0NjYgMTAuNjRDNi4wOTIxMSAxMC43MzQyIDYuMDM5NDQgMTAuODE4NSA1Ljk2NDY2IDEwLjg4QzUuODg4NzMgMTAuOTQzNSA1Ljc5NTk1IDEwLjk4MzQgNS42OTc2NiAxMC45OTVMNC4zNjA2NiAxMUM0LjI1MzIxIDExLjAwMDMgNC4xNDgzMyAxMC45NjcxIDQuMDYwNjYgMTAuOTA1QzMuOTg3NyAxMC44NTM2IDMuOTMxMzkgMTAuNzgyIDMuODk4NjYgMTAuNjk5TDMuNzMxNjYgMTBIMy43MzI2NlpcIixmaWxsOnR9KX0pKX19LDgzMTE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTG9ja2VkQ2xvc2VkRmlsbGVkSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuTG9ja2VkQ2xvc2VkRmlsbGVkSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNNS4wMDAwMyA0LjYzNjIzQzUuMDAwMDMgMy43NjA1MiA1LjI0MjIyIDMuMTA1NjEgNS42NDMyNyAyLjY3Mzc4QzYuMDM5MzggMi4yNDcyNyA2LjY0NTg1IDEuOTc4NTIgNy41MDE0MyAxLjk3ODUyQzguMzU3NDggMS45Nzg1MiA4Ljk2MzA5IDIuMjQ2NzMgOS4zNTgyNyAyLjY3MjNDOS43NTg0MSAzLjEwMzIxIDEwIDMuNzU3MjkgMTAgNC42MzM0NlY2LjUwMDIxSDExVjQuNjMzNDZDMTEgMy41NzkxNyAxMC43MDc2IDIuNjU1NzggMTAuMDkxMSAxLjk5MTgzQzkuNDY5NTUgMS4zMjI1NCA4LjU3NTg2IDAuOTc4NTE2IDcuNTAxNDMgMC45Nzg1MTZDNi40MjY3OCAwLjk3ODUxNiA1LjUzMjU1IDEuMzIzNSA0LjkxMDUyIDEuOTkzMjhDNC4yOTM0MiAyLjY1Nzc1IDQuMDAwMDMgMy41ODE2OSA0LjAwMDAzIDQuNjM2MjNWNi41MDAyMUg1LjAwMDAzVjQuNjM2MjNaTTMgNi41MDAyMUMyLjcyMzg2IDYuNTAwMjEgMi41IDYuNzI0MDcgMi41IDcuMDAwMjFWMTMuMDAwMkMyLjUgMTMuMjc2NCAyLjcyMzg2IDEzLjUwMDIgMyAxMy41MDAySDEyQzEyLjI3NjEgMTMuNTAwMiAxMi41IDEzLjI3NjQgMTIuNSAxMy4wMDAyVjcuMDAwMjFDMTIuNSA2LjcyNDA3IDEyLjI3NjEgNi41MDAyMSAxMiA2LjUwMDIxSDNaXCIsZmlsbDp0LHJvbGU6XCJpbWdcIn0pfSkpfX0sNTcyOTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5NaW5pbWl6ZUljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0Lk1pbmltaXplSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMi4xNjYwMiAxMkMyLjE2NjAyIDExLjcyMzkgMi4zODk4NyAxMS41IDIuNjY2MDIgMTEuNUgxMy4zMzI3QzEzLjYwODggMTEuNSAxMy44MzI3IDExLjcyMzkgMTMuODMyNyAxMkMxMy44MzI3IDEyLjI3NjEgMTMuNjA4OCAxMi41IDEzLjMzMjcgMTIuNUgyLjY2NjAyQzIuMzg5ODcgMTIuNSAyLjE2NjAyIDEyLjI3NjEgMi4xNjYwMiAxMlpcIixmaWxsOnQscm9sZTpcImltZ1wifSl9KSl9fSwzNzk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuT3BlbkZpbkljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0Lk9wZW5GaW5JY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LG4se2NoaWxkcmVuOigwLG8uanN4KShcInBhdGhcIix7ZDpcIk0xNC4yNjg1IDUuNzM5MTZDMTQuMTc4NSA1LjY0OTA2IDE0LjA4MTcgNS41NjU5MiAxMy45NzkgNS40OTA0N0wxMy45NDEyIDUuNDY0MjlDMTMuOTE5NiA1LjQ0OTE5IDEzLjg5ODQgNS40MzM1OCAxMy44NzYzIDUuNDE4OThDMTMuODU0MSA1LjQwNDM4IDEzLjgyODQgNS4zODg3OCAxMy44MDQ4IDUuMzc0MThMMTMuNzcxNSA1LjM1MzU0QzEzLjc0MTggNS4zMzU5MiAxMy43MTE2IDUuMzE5MyAxMy42ODE0IDUuMzAzMTlMMTMuNjYzOCA1LjI5MzYzQzEzLjMwNjUgNS4xMDYxOCAxMi45MDkxIDUuMDA4MDcgMTIuNTA1NyA1LjAwNzY4QzExLjg0MTcgNS4wMDcxNSAxMS4yMDUyIDQuNzQyOTEgMTAuNzM2MiA0LjI3MzFDMTAuMjY3MSAzLjgwMzMgMTAuMDA0IDMuMTY2NDIgMTAuMDA0NiAyLjUwMjYyQzEwLjAwNjUgMS40OTIyMiA5LjM5OTMzIDAuNTgwMjE5IDguNDY2MzQgMC4xOTE5MTFDNy41MzMzNSAtMC4xOTYzOTcgNi40NTgyNiAwLjAxNTQ2NiA1Ljc0MjQ0IDAuNzI4NzAxQzUuMDI2NjEgMS40NDE5NCA0LjgxMTAzIDIuNTE2MDcgNS4xOTYyMSAzLjQ1MDJDNS41ODE0IDQuMzg0MzMgNi40OTE1IDQuOTk0NDcgNy41MDIxIDQuOTk2MUM4LjE2NjAzIDQuOTk2NjQgOC44MDI1NiA1LjI2MDg4IDkuMjcxNjEgNS43MzA2OEM5Ljc0MDY2IDYuMjAwNDkgMTAuMDAzOCA2LjgzNzM2IDEwLjAwMzEgNy41MDExN0MxMC4wMDI2IDguMTY0OTcgOS43MzgzIDguODAxMzcgOS4yNjg0IDkuMjcwMzJDOC43OTg1IDkuNzM5MjggOC4xNjE1IDEwLjAwMjQgNy40OTc1NiAxMC4wMDE3QzYuODM0MTMgMTAuMDAyMiA2LjE5NzcyIDkuNzM4OTQgNS43Mjg2NSA5LjI2OTg3QzUuMjU5NTggOC44MDA4IDQuOTk2MzYgOC4xNjQ0NyA0Ljk5NzAzIDcuNTAxMTdDNC45OTcwMyA2LjEyMTU1IDMuODc4NDEgNS4wMDMxNSAyLjQ5ODUyIDUuMDAzMTVDMS4xMTg2MiA1LjAwMzE1IDAgNi4xMjE1NSAwIDcuNTAxMTdDMCA4Ljg4MDc4IDEuMTE4NjIgOS45OTkxOCAyLjQ5ODUyIDkuOTk5MThDMy44Nzg0MSA5Ljk5OTE4IDQuOTk3MDMgMTEuMTE3NiA0Ljk5NzAzIDEyLjQ5NzJDNC45OTcwMyAxMy44Nzk1IDYuMTE3OCAxNSA3LjUwMDMzIDE1QzguODgyODcgMTUgMTAuMDAzNiAxMy44Nzk1IDEwLjAwMzYgMTIuNDk3MkMxMC4wMDM2IDExLjExNzYgMTEuMTIyMyA5Ljk5OTE4IDEyLjUwMjEgOS45OTkxOEMxMi45NDgyIDkuOTk5NDggMTMuMzg2MiA5Ljg4MDIyIDEzLjc3MDUgOS42NTM4M0MxMy44MDM4IDkuNjM0MiAxMy44MzY1IDkuNjEzNTYgMTMuODcxMiA5LjU5MjQxTDEzLjg3ODMgOS41ODc4OEMxMy45MDg1IDkuNTY3NzUgMTMuOTM4NyA5LjU0NjYgMTMuOTY3OSA5LjUyNTQ2TDEzLjk4MSA5LjUxNjRDMTQuMDA3MiA5LjQ5NzI3IDE0LjAzMTQgOS40NzY2MiAxNC4wNTkxIDkuNDU1OThMMTQuMDgxMiA5LjQzODg3QzE0LjEwNTQgOS40MTkyMyAxNC4xMjg2IDkuMzk4NTkgMTQuMTUyMiA5LjM3Nzk1TDE0LjE3NzkgOS4zNTU4QzE0LjIwODEgOS4zMjg2MiAxNC4yMzc4IDkuMzAwNDIgMTQuMjY3IDkuMjcxMjNMMTQuMjcxNiA5LjI2NzJDMTQuMzc5NCA5LjE1ODg3IDE0LjQ3NzIgOS4wNDA5MSAxNC41NjM2IDguOTE0OEMxNC41ODI0IDguODg3NjEgMTQuNjAwNSA4Ljg2MDA5IDE0LjYxOCA4LjgzMjIzQzE1LjIzNyA3Ljg0NTg0IDE1LjA5MiA2LjU2MjY3IDE0LjI2ODUgNS43MzkxNlpcIixmaWxsOnQscm9sZTpcImltZ1wifSl9KSl9fSw5OTQwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlBhZ2VJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5QYWdlSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNFwiLGhlaWdodDpcIjE4XCIsdmlld0JveDpcIjAgMCAxNCAxOFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNMTEuOTk5NyAwLjY2Njk5MkgxLjk5OTY3QzEuMDgwNTEgMC42NjY5OTIgMC4zMzMwMDggMS40MTQ0OSAwLjMzMzAwOCAyLjMzMzY2VjE1LjY2N0MwLjMzMzAwOCAxNi41ODYyIDEuMDgwNTEgMTcuMzMzNyAxLjk5OTY3IDE3LjMzMzdIMTEuOTk5N0MxMi45MTg4IDE3LjMzMzcgMTMuNjY2MyAxNi41ODYyIDEzLjY2NjMgMTUuNjY3VjIuMzMzNjZDMTMuNjY2MyAxLjQxNDQ5IDEyLjkxODggMC42NjY5OTIgMTEuOTk5NyAwLjY2Njk5MlpNNy40MTYzNCA4LjE2Njk5SDMuMjQ5NjdDMy4wMTk2NyA4LjE2Njk5IDIuODMzMDEgNy45ODAzMyAyLjgzMzAxIDcuNzUwMzNWNi45MTY5OUMyLjgzMzAxIDYuNjg2OTkgMy4wMTk2NyA2LjUwMDMzIDMuMjQ5NjcgNi41MDAzM0g3LjQxNjM0QzcuNjQ2MzQgNi41MDAzMyA3LjgzMzAxIDYuNjg2OTkgNy44MzMwMSA2LjkxNjk5VjcuNzUwMzNDNy44MzMwMSA3Ljk4MDMzIDcuNjQ2MzQgOC4xNjY5OSA3LjQxNjM0IDguMTY2OTlaTTEwLjc0OTcgNC44MzM2NkgzLjI0OTY3QzMuMDE5NjcgNC44MzM2NiAyLjgzMzAxIDQuNjQ2OTkgMi44MzMwMSA0LjQxNjk5VjMuNTgzNjZDMi44MzMwMSAzLjM1MzY2IDMuMDE5NjcgMy4xNjY5OSAzLjI0OTY3IDMuMTY2OTlIMTAuNzQ5N0MxMC45Nzk3IDMuMTY2OTkgMTEuMTY2MyAzLjM1MzY2IDExLjE2NjMgMy41ODM2NlY0LjQxNjk5QzExLjE2NjMgNC42NDY5OSAxMC45Nzk3IDQuODMzNjYgMTAuNzQ5NyA0LjgzMzY2WlwiLGZpbGw6dH0pfSkpfX0sMTAwMjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5SZWREb3RJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5SZWREb3RJY29uPWU9Pnt2YXIgdD1yKGUsW10pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiOFwiLGhlaWdodDpcIjhcIix2aWV3Qm94OlwiMCAwIDggOFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSx0LHtjaGlsZHJlbjooMCxvLmpzeCkoXCJyZWN0XCIse3g6XCIwLjVcIix5OlwiMC41XCIsd2lkdGg6XCI3XCIsaGVpZ2h0OlwiN1wiLHJ4OlwiMy41XCIsZmlsbDpcIiNDMjEzMTNcIn0pfSkpfX0sMTUzOTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5TdGFja0ljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0LlN0YWNrSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIyMFwiLGhlaWdodDpcIjIwXCIsdmlld0JveDpcIjAgMCAyNCAyNFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNMTQuMjE3OCAzLjAwMDkyQzE0LjE1MDQgMy4wMDUxNCAxNC4wODM5IDMuMDE4NDQgMTQuMDIgMy4wNDA0N0wzLjUxOTg2IDYuNDI4N0MzLjM2ODY0IDYuNDc3NDMgMy4yMzY4MSA2LjU3MjkxIDMuMTQzMzUgNi43MDEzOEMzLjA0OTg5IDYuODI5ODYgMi45OTk2NCA2Ljk4NDY5IDIuOTk5ODMgNy4xNDM1NlYxNS43NTRDMi45OTg0MyAxNS44NTM0IDMuMDE2NzkgMTUuOTUyMSAzLjA1Mzg1IDE2LjA0NDNDMy4wOTA5MSAxNi4xMzY2IDMuMTQ1OTMgMTYuMjIwNSAzLjIxNTcxIDE2LjI5MTNDMy4yODU1IDE2LjM2MjEgMy4zNjg2NSAxNi40MTgzIDMuNDYwMzUgMTYuNDU2NkMzLjU1MjA0IDE2LjQ5NSAzLjY1MDQ1IDE2LjUxNDcgMy43NDk4NCAxNi41MTQ3QzMuODQ5MjQgMTYuNTE0NyAzLjk0NzY0IDE2LjQ5NSA0LjAzOTM0IDE2LjQ1NjZDNC4xMzEwMyAxNi40MTgzIDQuMjE0MTkgMTYuMzYyMSA0LjI4Mzk3IDE2LjI5MTNDNC4zNTM3NSAxNi4yMjA1IDQuNDA4NzggMTYuMTM2NiA0LjQ0NTg0IDE2LjA0NDNDNC40ODI5IDE1Ljk1MjEgNC41MDEyNiAxNS44NTM0IDQuNDk5ODUgMTUuNzU0VjcuNjg4NDlMMTQuNDggNC40NjcyNUMxNC42NDkgNC40MTUyOSAxNC43OTQyIDQuMzA1MzIgMTQuODkgNC4xNTY3NEMxNC45ODU4IDQuMDA4MTUgMTUuMDI2IDMuODMwNSAxNS4wMDM2IDMuNjU1MTRDMTQuOTgxMiAzLjQ3OTc3IDE0Ljg5NzUgMy4zMTc5NyAxNC43Njc0IDMuMTk4MjdDMTQuNjM3MyAzLjA3ODU3IDE0LjQ2OTEgMy4wMDg2OCAxNC4yOTI1IDMuMDAwOTJDMTQuMjY3NiAyLjk5OTY3IDE0LjI0MjcgMi45OTk2NyAxNC4yMTc4IDMuMDAwOTJaTTE3LjIxNzggNS4yNTA5NUMxNy4xNTA0IDUuMjU1MTcgMTcuMDgzOSA1LjI2ODQ4IDE3LjAyMDEgNS4yOTA1TDYuNTE5OSA4LjY3ODc0QzYuMzY4NjkgOC43Mjc0NiA2LjIzNjg1IDguODIyOTQgNi4xNDMzOSA4Ljk1MTQyQzYuMDQ5OTMgOS4wNzk4OSA1Ljk5OTY4IDkuMjM0NzIgNS45OTk4OCA5LjM5MzU5VjE4LjAwNDFDNS45OTg0NyAxOC4xMDM1IDYuMDE2ODMgMTguMjAyMSA2LjA1Mzg5IDE4LjI5NDRDNi4wOTA5NSAxOC4zODY2IDYuMTQ1OTcgMTguNDcwNSA2LjIxNTc2IDE4LjU0MTNDNi4yODU1NCAxOC42MTIxIDYuMzY4NyAxOC42NjgzIDYuNDYwMzkgMTguNzA2NkM2LjU1MjA5IDE4Ljc0NSA2LjY1MDQ5IDE4Ljc2NDggNi43NDk4OSAxOC43NjQ4QzYuODQ5MjggMTguNzY0OCA2Ljk0NzY5IDE4Ljc0NSA3LjAzOTM4IDE4LjcwNjZDNy4xMzEwOCAxOC42NjgzIDcuMjE0MjMgMTguNjEyMSA3LjI4NDAyIDE4LjU0MTNDNy4zNTM4IDE4LjQ3MDUgNy40MDg4MiAxOC4zODY2IDcuNDQ1ODggMTguMjk0NEM3LjQ4Mjk0IDE4LjIwMjEgNy41MDEzIDE4LjEwMzUgNy40OTk5IDE4LjAwNDFWOS45Mzg1MkwxNy40OCA2LjcxNzI4QzE3LjY0OSA2LjY2NTMzIDE3Ljc5NDIgNi41NTUzNSAxNy44OSA2LjQwNjc3QzE3Ljk4NTggNi4yNTgxOCAxOC4wMjYxIDYuMDgwNTQgMTguMDAzNiA1LjkwNTE3QzE3Ljk4MTIgNS43Mjk4MSAxNy44OTc2IDUuNTY4IDE3Ljc2NzUgNS40NDgzQzE3LjYzNzQgNS4zMjg2MSAxNy40NjkxIDUuMjU4NzEgMTcuMjkyNSA1LjI1MDk1QzE3LjI2NzYgNS4yNDk3MSAxNy4yNDI3IDUuMjQ5NzEgMTcuMjE3OCA1LjI1MDk1Wk0yMC4xOTMgNy41MDUzOEMyMC4xMzQ0IDcuNTA5ODIgMjAuMDc1OCA3LjUyMTk3IDIwLjAxODYgNy41NDA1M0w5LjUxODQ4IDEwLjkyODhDOS4yMDk0OCAxMS4wMjkzIDguOTk5OTIgMTEuMzE4MSA4Ljk5OTkyIDExLjY0MzZWMjAuMjU0MUM4Ljk5OTkyIDIwLjQ5NzkgOS4xMTgyOSAyMC43MjYyIDkuMzE3OCAyMC44NjY0QzkuNDQ2MDUgMjAuOTU3MiA5LjU5NjkzIDIxLjAwNDEgOS43NDk5MyAyMS4wMDQxQzkuODM0NjggMjEuMDA0MSA5LjkyMDE0IDIwLjk4OTQgMTAuMDAxOSAyMC45NjAyTDIwLjUwMiAxNy4yMTAxQzIwLjgwMDYgMTcuMTA0NCAyMS4wMDAxIDE2LjgyMTMgMjEuMDAwMSAxNi41MDRWOC4yNTM5MkMyMS4wMDAxIDguMDE0NjcgMjAuODg1MyA3Ljc4OTIyIDIwLjY5MSA3LjY0NzQ3QzIwLjU0NTkgNy41NDE3MiAyMC4zNjg4IDcuNDkyMDUgMjAuMTkzIDcuNTA1MzhaXCIsZmlsbDp0fSl9KSl9fSw0MDIwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlN0b3JlZnJvbnRJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5TdG9yZWZyb250SWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIyMFwiLGhlaWdodDpcIjIwXCIsdmlld0JveDpcIjAgMCAyNCAyNFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNNSAzQzQuNDQ4IDMgNCAzLjQ0OCA0IDRDNCA0LjU1MiA0LjQ0OCA1IDUgNUgxOUMxOS41NTIgNSAyMCA0LjU1MiAyMCA0QzIwIDMuNDQ4IDE5LjU1MiAzIDE5IDNINVpNNC42MTcxOSA3QzQuMjM4MTkgNyAzLjg5MzYxIDcuMjEzNzMgMy43MjQ2MSA3LjU1MjczTDIuMTA1NDcgMTAuNzg5MUMyLjAzNTQ3IDEwLjkyODEgMiAxMS4wODEzIDIgMTEuMjM2M1YxMkMyIDEyLjU1MiAyLjQ0OCAxMyAzIDEzVjE5QzMgMjAuMTA1IDMuODk1IDIxIDUgMjFIMTlDMjAuMTA1IDIxIDIxIDIwLjEwNSAyMSAxOVYxM0MyMS41NTIgMTMgMjIgMTIuNTUyIDIyIDEyVjExLjIzNjNDMjIgMTEuMDgxMyAyMS45NjQ1IDEwLjkyODEgMjEuODk0NSAxMC43ODkxTDIwLjI3NTQgNy41NTI3M0MyMC4xMDY0IDcuMjEzNzMgMTkuNzYxOCA3IDE5LjM4MjggN0g0LjYxNzE5Wk02IDEzSDE4QzE4LjU1MiAxMyAxOSAxMy40NDggMTkgMTRWMThDMTkgMTguNTUyIDE4LjU1MiAxOSAxOCAxOUg2QzUuNDQ4IDE5IDUgMTguNTUyIDUgMThWMTRDNSAxMy40NDggNS40NDggMTMgNiAxM1pcIixmaWxsOnR9KX0pKX19LDc5Mzc6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuV29ya3NwYWNlSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuV29ya3NwYWNlSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3hzKShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixyb2xlOlwiaW1nXCJ9LG4se2NoaWxkcmVuOlsoMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNNi43MzgxMSAyLjgxMjVIMy41MzEzN0MzLjEzNDQyIDIuODEyNSAyLjgxMjYyIDMuMTM0MyAyLjgxMjYyIDMuNTMxMjVWNy41MTIwNEMyLjgxMjYyIDcuOTA5IDMuMTM0NDIgOC4yMzA3OSAzLjUzMTM3IDguMjMwNzlINi43MzgxMUM3LjEzNTA2IDguMjMwNzkgNy40NTY4NiA3LjkwOSA3LjQ1Njg2IDcuNTEyMDRWMy41MzEyNUM3LjQ1Njg2IDMuMTM0MyA3LjEzNTA2IDIuODEyNSA2LjczODExIDIuODEyNVpcIixmaWxsOnR9KSwoMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNMTIuMTU2NSA2LjI2NzU4SDguOTQ5NzFDOC43NTEyMyA2LjI2NzU4IDguNTkwMzMgNi40Mjg0OCA4LjU5MDMzIDYuNjI2OTZWMTEuMzgxOEM4LjU5MDMzIDExLjU4MDMgOC43NTEyMyAxMS43NDEyIDguOTQ5NzEgMTEuNzQxMkgxMi4xNTY1QzEyLjM1NDkgMTEuNzQxMiAxMi41MTU4IDExLjU4MDMgMTIuNTE1OCAxMS4zODE4VjYuNjI2OTZDMTIuNTE1OCA2LjQyODQ4IDEyLjM1NDkgNi4yNjc1OCAxMi4xNTY1IDYuMjY3NThaXCIsc3Ryb2tlOnQsc3Ryb2tlV2lkdGg6XCIwLjcxODc1M1wifSksKDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTEyLjE1NjQgMi44MTI1SDguOTQ5NzFDOC41NTI3NSAyLjgxMjUgOC4yMzA5NiAzLjEzNDMgOC4yMzA5NiAzLjUzMTI1VjQuNDE1ODdDOC4yMzA5NiA0LjgxMjgzIDguNTUyNzUgNS4xMzQ2MyA4Ljk0OTcxIDUuMTM0NjNIMTIuMTU2NEMxMi41NTM0IDUuMTM0NjMgMTIuODc1MiA0LjgxMjgzIDEyLjg3NTIgNC40MTU4N1YzLjUzMTI1QzEyLjg3NTIgMy4xMzQzIDEyLjU1MzQgMi44MTI1IDEyLjE1NjQgMi44MTI1WlwiLGZpbGw6dH0pLCgwLG8uanN4KShcInBhdGhcIix7ZDpcIk02LjczNzk4IDkuMDA0ODhIMy41MzEyNUMzLjEzNDMgOS4wMDQ4OCAyLjgxMjUgOS4zMjY2OCAyLjgxMjUgOS43MjM2NFYxMS4zODIzQzIuODEyNSAxMS43NzkzIDMuMTM0MyAxMi4xMDExIDMuNTMxMjUgMTIuMTAxMUg2LjczNzk4QzcuMTM0OTQgMTIuMTAxMSA3LjQ1Njc0IDExLjc3OTMgNy40NTY3NCAxMS4zODIzVjkuNzIzNjRDNy40NTY3NCA5LjMyNjY4IDcuMTM0OTQgOS4wMDQ4OCA2LjczNzk4IDkuMDA0ODhaXCIsZmlsbDp0fSldfSkpfX0sMjc3MjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oMzc5KSx0KSxvKG4oNDcxOCksdCksbyhuKDc5MzcpLHQpLG8obig4MzExKSx0KSxvKG4oNTcyOSksdCksbyhuKDc3ODgpLHQpLG8obigzNzAzKSx0KSxvKG4oNjc5NSksdCksbyhuKDgyNjUpLHQpLG8obigxMTcpLHQpLG8obigxNTM5KSx0KSxvKG4oOTI4NSksdCksbyhuKDQwMjApLHQpLG8obig1MjkpLHQpLG8obigyNDAyKSx0KSxvKG4oMjE0NyksdCksbyhuKDQ4MjUpLHQpLG8obig2NDQ3KSx0KSxvKG4oMTI4MSksdCksbyhuKDc0MjkpLHQpLG8obig5OTQwKSx0KSxvKG4oMTAwMiksdCksbyhuKDEzMjQpLHQpLG8obigxMTAzKSx0KSxvKG4oMTQwOSksdCl9LDMxMTc6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5JY29uV2l0aEJhZGdlPXZvaWQgMDtjb25zdCBhPW4oNTg5MyksaT1vKG4oNzUxOCkpLGw9big3MDA2KSxzPW4oMzEzNiksYz1uKDEzMzUpO3QuSWNvbldpdGhCYWRnZT1lPT57dmFye2NvdW50OnQ9MCxtYXg6bn09ZSxvPXIoZSxbXCJjb3VudFwiLFwibWF4XCJdKTtyZXR1cm4oMCxhLmpzeHMpKHUse2NoaWxkcmVuOlsoMCxhLmpzeCkobC5JY29uLE9iamVjdC5hc3NpZ24oe30sbykpLHQ+MCYmKDAsYS5qc3gpKGQse2NvdW50OnQsbWF4Om59KV19KX07Y29uc3QgdT0oMCxpLmRlZmF1bHQpKGMuQm94KWBcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuYCxkPSgwLGkuZGVmYXVsdCkocy5CYWRnZSlgXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdHJhbnNmb3JtOiBzY2FsZSg3MCUpO1xuICByaWdodDogLSR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG4gIHRvcDogLSR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuYH0sMTQ0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obigzMTE3KSx0KX0sMTk0NDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5MYWJlbD12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGE9cihuKDc1MTgpKSxpPW4oMTMzNSksbD1uKDc3NjkpLHM9big5NjM0KTt0LkxhYmVsPSh7aWNvbjplLHRleHQ6dCxoZWxwZXJUZXh0Om4saHRtbEZvcjpyLGlubGluZTphfSk9PigwLG8uanN4cykocCxPYmplY3QuYXNzaWduKHtpbmxpbmU6YX0se2NoaWxkcmVuOlsoMCxvLmpzeHMpKFwiZGl2XCIsT2JqZWN0LmFzc2lnbih7c3R5bGU6e2Rpc3BsYXk6XCJmbGV4XCJ9fSx7Y2hpbGRyZW46W1wiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZSgpOmU/KDAsby5qc3gpKGQse2ljb246ZX0pOm51bGwsKDAsby5qc3gpKHUsT2JqZWN0LmFzc2lnbih7YXM6XCJsYWJlbFwiLGh0bWxGb3I6cix3ZWlnaHQ6XCJib2xkXCJ9LHtjaGlsZHJlbjp0fSkpXX0pKSxuJiYoMCxvLmpzeCkoYyx7Y2hpbGRyZW46bn0pXX0pKTtjb25zdCBjPSgwLGEuZGVmYXVsdCkobC5UZXh0KWBcbiAgc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5iYXNlfTtcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0SGVscH07XG5gLHU9KDAsYS5kZWZhdWx0KShsLlRleHQpYFxuICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG5gLGQ9KDAsYS5kZWZhdWx0KShzLkljb24pYFxuICBtYXJnaW4tcmlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHgueHNtYWxsfTtcbiAgbWluLXdpZHRoOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLnNtYWxsfTtcbiAgbWluLWhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS5zbWFsbH07XG4gIGFsaWduLXNlbGY6IGNlbnRlcjtcbmAscD0oMCxhLmRlZmF1bHQpKGkuQm94KWBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgbWFyZ2luLWJvdHRvbTogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG5cbiAgJHsoe2lubGluZTplLHRoZW1lOnR9KT0+ZSYmYGN1cnNvcjogcG9pbnRlcjtcXG4gICAgIG1hcmdpbi1ib3R0b206IDA7XFxuICAgICBtYXJnaW4tbGVmdDogJHt0LnB4LnNtYWxsfTtcXG4gICAgIGZvbnQtd2VpZ2h0OiAke3QuZm9udFdlaWdodC5ub3JtYWx9O1xcbiAgYH1cbmB9LDkyMzk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDgyNzUpLHQpLG8obig2OTMpLHQpfSw4Mjc1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTG9hZGVyPXZvaWQgMDtjb25zdCBhPW4oNTg5MyksaT1vKG4oNzUxOCkpLGw9big5NjM0KTt0LkxvYWRlcj0oMCxpLmRlZmF1bHQpKChlPT57dmFyIHQ9cihlLFtdKTtyZXR1cm4oMCxhLmpzeCkobC5JY29uLE9iamVjdC5hc3NpZ24oe30sdCx7Y2hpbGRyZW46KDAsYS5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxMDAlXCIsaGVpZ2h0OlwiMTAwJVwiLHZpZXdCb3g6XCIwIDAgMzggMzhcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsc3Ryb2tlOlwiY3VycmVudENvbG9yXCJ9LHtjaGlsZHJlbjooMCxhLmpzeCkoXCJnXCIsT2JqZWN0LmFzc2lnbih7ZmlsbDpcIm5vbmVcIixmaWxsUnVsZTpcImV2ZW5vZGRcIn0se2NoaWxkcmVuOigwLGEuanN4cykoXCJnXCIsT2JqZWN0LmFzc2lnbih7dHJhbnNmb3JtOlwidHJhbnNsYXRlKDEgMSlcIixzdHJva2VXaWR0aDpcIjJcIn0se2NoaWxkcmVuOlsoMCxhLmpzeCkoXCJjaXJjbGVcIix7c3Ryb2tlT3BhY2l0eTpcIi41XCIsY3g6XCIxOFwiLGN5OlwiMThcIixyOlwiMThcIn0pLCgwLGEuanN4KShcInBhdGhcIixPYmplY3QuYXNzaWduKHtkOlwiTTM2IDE4YzAtOS45NC04LjA2LTE4LTE4LTE4XCJ9LHtjaGlsZHJlbjooMCxhLmpzeCkoXCJhbmltYXRlVHJhbnNmb3JtXCIse2F0dHJpYnV0ZU5hbWU6XCJ0cmFuc2Zvcm1cIix0eXBlOlwicm90YXRlXCIsZnJvbTpcIjAgMTggMThcIix0bzpcIjM2MCAxOCAxOFwiLGR1cjpcIjFzXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9KX0pKV19KSl9KSl9KSl9KSl9KSlgYH0sNjkzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pfTpmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10fSksYT10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCIhPT1uJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmcih0LGUsbik7cmV0dXJuIG8odCxlKSx0fSxpPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuT3BlbmZpbkxvYWRlcj12b2lkIDA7Y29uc3QgbD1uKDU4OTMpLHM9YShuKDc1MTgpKSxjPW4oOTYzNCk7dC5PcGVuZmluTG9hZGVyPSgwLHMuZGVmYXVsdCkoKGU9Pnt2YXIgdD1pKGUsW10pO3JldHVybigwLGwuanN4KShjLkljb24sT2JqZWN0LmFzc2lnbih7fSx0LHtjaGlsZHJlbjooMCxsLmpzeHMpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxMDAlXCIsaGVpZ2h0OlwiMTAwJVwiLHZpZXdCb3g6XCIwIDAgMTggMThcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0se2NoaWxkcmVuOlsoMCxsLmpzeCkodSx7ZDpcIlxcbiAgICAgICAgICAgIE0gMTcuMTIyMiA2Ljg4N1xcbiAgICAgICAgICAgIEMgMTcuMDE0MSA2Ljc3ODg3IDE2Ljg5OCA2LjY3OTExIDE2Ljc3NDggNi41ODg1NlxcbiAgICAgICAgICAgIEwgMTYuNzI5NSA2LjU1NzE1XFxuICAgICAgICAgICAgQyAxNi43MDM1IDYuNTM5MDMgMTYuNjc4MSA2LjUyMDMgMTYuNjUxNSA2LjUwMjc4XFxuICAgICAgICAgICAgQyAxNi42MjUgNi40ODUyNiAxNi41OTQxIDYuNDY2NTMgMTYuNTY1NyA2LjQ0OTAxXFxuICAgICAgICAgICAgTCAxNi41MjU5IDYuNDI0MjRcXG4gICAgICAgICAgICBDIDE2LjQ5MDIgNi40MDMxIDE2LjQ1NCA2LjM4MzE2IDE2LjQxNzcgNi4zNjM4M1xcbiAgICAgICAgICAgIEwgMTYuMzk2NiA2LjM1MjM2XFxuICAgICAgICAgICAgQyAxNS45Njc4IDYuMTI3NDIgMTUuNDkxIDYuMDA5NjggMTUuMDA2OCA2LjAwOTIyXFxuICAgICAgICAgICAgQyAxNC4yMTAxIDYuMDA4NTggMTMuNDQ2MyA1LjY5MTQ5IDEyLjg4MzQgNS4xMjc3MlxcbiAgICAgICAgICAgIEMgMTIuMzIwNSA0LjU2Mzk1IDEyLjAwNDggMy43OTk3MSAxMi4wMDU2IDMuMDAzMTRcXG4gICAgICAgICAgICBDIDEyLjAwNzggMS43OTA2NiAxMS4yNzkyIDAuNjk2MjYzIDEwLjE1OTYgMC4yMzAyOTNcXG4gICAgICAgICAgICBDIDkuMDQwMDIgLTAuMjM1Njc2IDcuNzQ5OTIgMC4wMTg1NTkyIDYuODkwOTMgMC44NzQ0NDFcXG4gICAgICAgICAgICBDIDYuMDMxOTQgMS43MzAzMiA1Ljc3MzIzIDMuMDE5MjggNi4yMzU0NiA0LjE0MDI0XFxuICAgICAgICAgICAgQyA2LjY5NzY4IDUuMjYxMTkgNy43ODk4IDUuOTkzMzcgOS4wMDI1MSA1Ljk5NTMyXFxuICAgICAgICAgICAgQyA5Ljc5OTI0IDUuOTk1OTYgMTAuNTYzMSA2LjMxMzA1IDExLjEyNTkgNi44NzY4MlxcbiAgICAgICAgICAgIEMgMTEuNjg4OCA3LjQ0MDU5IDEyLjAwNDYgOC4yMDQ4NCAxMi4wMDM4IDkuMDAxNFxcbiAgICAgICAgICAgIEMgMTIuMDAzMSA5Ljc5Nzk3IDExLjY4NiAxMC41NjE2IDExLjEyMjEgMTEuMTI0NFxcbiAgICAgICAgICAgIEMgMTAuNTU4MiAxMS42ODcxIDkuNzkzOCAxMi4wMDI4IDguOTk3MDggMTIuMDAyXFxuICAgICAgICAgICAgQyA4LjIwMDk2IDEyLjAwMjcgNy40MzcyNyAxMS42ODY3IDYuODc0MzggMTEuMTIzOFxcbiAgICAgICAgICAgIEMgNi4zMTE1IDEwLjU2MSA1Ljk5NTY0IDkuNzk3MzYgNS45OTY0NCA5LjAwMTRcXG4gICAgICAgICAgICBDIDUuOTk2NDQgNy4zNDU4NiA0LjY1NDA5IDYuMDAzNzggMi45OTgyMiA2LjAwMzc4XFxuICAgICAgICAgICAgQyAxLjM0MjM1IDYuMDAzNzggMCA3LjM0NTg2IDAgOS4wMDE0XFxuICAgICAgICAgICAgQyAwIDEwLjY1NjkgMS4zNDIzNSAxMS45OTkgMi45OTgyMiAxMS45OTlcXG4gICAgICAgICAgICBDIDQuNjU0MDkgMTEuOTk5IDUuOTk2NDQgMTMuMzQxMSA1Ljk5NjQ0IDE0Ljk5NjZcXG4gICAgICAgICAgICBDIDUuOTk2NDQgMTYuNjU1MyA3LjM0MTM2IDE4IDkuMDAwNCAxOFxcbiAgICAgICAgICAgIEMgMTAuNjU5NCAxOCAxMi4wMDQ0IDE2LjY1NTMgMTIuMDA0NCAxNC45OTY2XFxuICAgICAgICAgICAgQyAxMi4wMDQ0IDEzLjM0MTEgMTMuMzQ2NyAxMS45OTkgMTUuMDAyNiAxMS45OTlcXG4gICAgICAgICAgICBDIDE1LjUzNzkgMTEuOTk5NCAxNi4wNjM1IDExLjg1NjMgMTYuNTI0NyAxMS41ODQ2XFxuICAgICAgICAgICAgQyAxNi41NjQ1IDExLjU2MSAxNi42MDM4IDExLjUzNjMgMTYuNjQ1NSAxMS41MTA5XFxuICAgICAgICAgICAgTCAxNi42NTQgMTEuNTA1NVxcbiAgICAgICAgICAgIEMgMTYuNjkwMiAxMS40ODEzIDE2LjcyNjUgMTEuNDU1OSAxNi43NjE1IDExLjQzMDVcXG4gICAgICAgICAgICBMIDE2Ljc3NzIgMTEuNDE5N1xcbiAgICAgICAgICAgIEMgMTYuODA4NiAxMS4zOTY3IDE2LjgzNzYgMTEuMzcyIDE2Ljg3MDkgMTEuMzQ3MlxcbiAgICAgICAgICAgIEwgMTYuODk3NSAxMS4zMjY2XFxuICAgICAgICAgICAgQyAxNi45MjY1IDExLjMwMzEgMTYuOTU0MyAxMS4yNzgzIDE2Ljk4MjcgMTEuMjUzNVxcbiAgICAgICAgICAgIEwgMTcuMDEzNSAxMS4yMjdcXG4gICAgICAgICAgICBDIDE3LjA0OTcgMTEuMTk0MyAxNy4wODU0IDExLjE2MDUgMTcuMTIwNCAxMS4xMjU1XFxuICAgICAgICAgICAgTCAxNy4xMjU5IDExLjEyMDZcXG4gICAgICAgICAgICBDIDE3LjI1NTMgMTAuOTkwNiAxNy4zNzI2IDEwLjg0OTEgMTcuNDc2MyAxMC42OTc4XFxuICAgICAgICAgICAgQyAxNy40OTg5IDEwLjY2NTEgMTcuNTIwNiAxMC42MzIxIDE3LjU0MTYgMTAuNTk4N1xcbiAgICAgICAgICAgIEMgMTguMjg0MyA5LjQxNSAxOC4xMTA0IDcuODc1MiAxNy4xMjIyIDYuODg3WlxcbiAgICAgICAgICAgIFwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pLCgwLGwuanN4KShkLHtjeDpcIjlcIixjeTpcIjNcIixyOlwiMi45XCIsZmlsbDpcImN1cnJlbnRDb2xvclwiLGFuZ2xlOjB9KSwoMCxsLmpzeCkoZCx7Y3g6XCIxNVwiLGN5OlwiOVwiLHI6XCIyLjc1XCIsZmlsbDpcImN1cnJlbnRDb2xvclwiLGFuZ2xlOi05MH0pLCgwLGwuanN4KShkLHtjeDpcIjlcIixjeTpcIjE1XCIscjpcIjIuNVwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIixhbmdsZTotMTgwfSksKDAsbC5qc3gpKGQse2N4OlwiM1wiLGN5OlwiOVwiLHI6XCIyLjI1XCIsZmlsbDpcImN1cnJlbnRDb2xvclwiLGFuZ2xlOi0yNzB9KV19KSl9KSl9KSlgYDtjb25zdCB1PXMuZGVmYXVsdC5wYXRoYFxuICBAa2V5ZnJhbWVzIGxvZ29BbmltYXRpb24ge1xuICAgIDAlIHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICAgIDI1JSB7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgICAzNSUge1xuICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG4gICAgNjAlIHtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgfVxuICAgIDc1JSB7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgICAxMDAlIHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICB9XG5cbiAgYW5pbWF0aW9uOiBsb2dvQW5pbWF0aW9uIDJzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuYCxkPXMuZGVmYXVsdC5jaXJjbGVgXG4gIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjtcbiAgYW5pbWF0aW9uOiAkeyh7YW5nbGU6ZX0pPT4oZT0+cy5rZXlmcmFtZXNgXG4gICAgMCUge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgIH1cbiAgICAyNSUge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgICAzMCUge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgICA1MCUge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoJHtlfWRlZyk7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgICA3MCUge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTM2MGRlZyk7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgICA3NSUge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTM2MGRlZyk7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgIH1cbiAgICAxMDAlIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0zNjBkZWcpO1xuICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG5gKShlKX0gMnMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG5gfSw3MDMwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlZhbGlkYXRpb25FcnJvcj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGE9cihuKDc1MTgpKSxpPW4oNzc2OSksbD1uKDk2MzQpO3QuVmFsaWRhdGlvbkVycm9yPSh7Y2hpbGRyZW46ZX0pPT4oMCxvLmpzeHMpKHMse2NoaWxkcmVuOlsoMCxvLmpzeCkobC5JY29uLHtpY29uOlwiRXhjbGFtYXRpb25DaXJjbGVkRmlsbGVkSWNvblwifSksKDAsby5qc3gpKGMse2NoaWxkcmVuOmV9KV19KTtjb25zdCBzPWEuZGVmYXVsdC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGdhcDogJHsoe3RoZW1lOmV9KT0+ZS5weC54c21hbGx9O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIG1hcmdpbi10b3A6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuYCxjPSgwLGEuZGVmYXVsdCkoaS5UZXh0KWBcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0SGVscH07XG5gfSwzNTg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5TdHlsZWRJbnB1dEZpZWxkPXQuQmFzZUlucHV0PXZvaWQgMDtjb25zdCBhPW4oNTg5MyksaT1uKDY2ODkpLGw9byhuKDc1MTgpKSxzPW4oMTMzNSksYz1uKDk1MDcpLHU9big3NzY5KSxkPW4oNzAzMCkscD1uKDE5NDQpO3QuQmFzZUlucHV0PSgwLGkuZm9yd2FyZFJlZikoKChlLG4pPT57dmFye2NsYXNzTmFtZTpvLHJlbmRlcklucHV0OmksbWVzc2FnZTpsLGxhYmVsOnMsc3RhdHVzOmMsbmFtZTp1LGljb246dix0eXBlOkM9XCJ0ZXh0XCIsaGVscGVyVGV4dDptLHBsYWNlaG9sZGVyOnd9PWUsYj1yKGUsW1wiY2xhc3NOYW1lXCIsXCJyZW5kZXJJbnB1dFwiLFwibWVzc2FnZVwiLFwibGFiZWxcIixcInN0YXR1c1wiLFwibmFtZVwiLFwiaWNvblwiLFwidHlwZVwiLFwiaGVscGVyVGV4dFwiLFwicGxhY2Vob2xkZXJcIl0pO2NvbnN0IHk9XCJjaGVja2JveFwiPT09Q3x8XCJyYWRpb1wiPT09QztyZXR1cm4oMCxhLmpzeHMpKGcsT2JqZWN0LmFzc2lnbih7ZmxleERpcmVjdGlvbjpcImNvbHVtblwiLGFsaWduSXRlbXM6XCJmbGV4LXN0YXJ0XCJ9LHtjaGlsZHJlbjpbKDAsYS5qc3hzKShmLE9iamVjdC5hc3NpZ24oe2lubGluZTp5fSx7Y2hpbGRyZW46WyEhcyYmKDAsYS5qc3gpKHAuTGFiZWwse2lubGluZTp5LGljb246dix0ZXh0OnMsaGVscGVyVGV4dDptLGh0bWxGb3I6dX0pLCEhaSYmaShPYmplY3QuYXNzaWduKHtuYW1lOnUsc3RhdHVzOmMsdHlwZTpDfSxiKSksIWkmJigwLGEuanN4KSh0LlN0eWxlZElucHV0RmllbGQsT2JqZWN0LmFzc2lnbih7Y2xhc3NOYW1lOm8sbmFtZTp1LHBsYWNlaG9sZGVyOncsc3RhdHVzOmMsdHlwZTpDfSxiLHtyZWY6bn0pKV19KSksbCYmKFwiY3JpdGljYWxcIj09PWM/KDAsYS5qc3gpKGQuVmFsaWRhdGlvbkVycm9yLHtjaGlsZHJlbjpsfSk6KDAsYS5qc3gpKGgsT2JqZWN0LmFzc2lnbih7c3RhdHVzOmN9LHtjaGlsZHJlbjpsfSkpKV19KSl9KSksdC5CYXNlSW5wdXQuZGlzcGxheU5hbWU9XCJCYXNlSW5wdXRcIjtjb25zdCBmPSgwLGwuZGVmYXVsdCkocy5Cb3gpYFxuICBhbGlnbi1pdGVtczogJHsoe2lubGluZTplfSk9PmU/XCJjZW50ZXJcIjpcImZsZXgtc3RhcnRcIn07XG4gIGZsZXgtZGlyZWN0aW9uOiAkeyh7aW5saW5lOmV9KT0+ZT9cInJvdy1yZXZlcnNlXCI6XCJjb2x1bW5cIn07XG4gIGp1c3RpZnktY29udGVudDogJHsoe2lubGluZTplfSk9PmU/XCJmbGV4LWVuZFwiOlwiZmxleC1zdGFydFwifTtcbiAgd2lkdGg6IDEwMCU7XG5gLGg9KDAsbC5kZWZhdWx0KSh1LlRleHQpYFxuICBjb2xvcjogJHsoe3RoZW1lOmUsc3RhdHVzOnR9KT0+KDAsYy5nZXRTdGF0dXNDb2xvcikoZSx0LFwidGV4dEhlbHBcIil9O1xuYCxnPSgwLGwuZGVmYXVsdCkocy5Cb3gpYFxuICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gIHVzZXItc2VsZWN0OiBub25lO1xuYDt0LlN0eWxlZElucHV0RmllbGQ9bC5kZWZhdWx0LmlucHV0YFxuICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDR9O1xuICBib3JkZXI6IDFweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDZ9O1xuICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplLHN0YXR1czp0fSk9PigwLGMuZ2V0U3RhdHVzQ29sb3IpKGUsdCxjLlBhbGV0dGUuaW5wdXRCb3JkZXIpfTtcbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMuc21hbGx9O1xuICBib3gtc2hhZG93OiAkeyh7dGhlbWU6ZX0pPT5lLnNoYWRvdy5iYXNlfTtcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dENvbG9yfTtcbiAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmJhc2V9O1xuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5gJHtlLnB4LnNtYWxsfSAke2UucHguYmFzZX1gfTtcbiAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIHZhcigtLW9wZW5maW4tdWktZ2xvYmFsVHJhbnNpdGlvbik7XG4gIHdpZHRoOiAxMDAlO1xuXG4gICY6Zm9jdXMge1xuICAgIG91dGxpbmU6IDA7XG4gICAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZSxzdGF0dXM6dH0pPT4oMCxjLmdldFN0YXR1c0NvbG9yKShlLHQsYy5QYWxldHRlLmlucHV0Rm9jdXNlZCl9O1xuICB9XG5cbiAgJjpkaXNhYmxlZCB7XG4gICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgfVxuXG4gICY6ZGlzYWJsZWQ6OnBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0RGlzYWJsZWR9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSBoYWNrIHRvIGludmVydCB0aGUgY2FsZW5kYXIgaWNvbi4gVGhpcyBvbmx5IHdvcmtzIGluIGRhcmsgbW9kZS5cbiAgICogVW50aWwgZWl0aGVyIGxpZ2h0IG1vZGUgaXMgYSB0aGluZyBvciB3ZSBnZXQgYSBkYXRldGltZSBwaWNrZXIgZGVzaWduLCB0aGlzIHdpbGwgZG8uXG4gICAqL1xuXG4gIDo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9yIHtcbiAgICBmaWx0ZXI6IGludmVydCgxKTtcbiAgfVxuYH0sODg3ODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oMzU4KSx0KX0sMTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnR9KX06ZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dH0pLGE9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiIT09biYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnIodCxlLG4pO3JldHVybiBvKHQsZSksdH0saT10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxsPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2hlY2tib3g9dm9pZCAwO2NvbnN0IHM9big1ODkzKSxjPWEobig2Njg5KSksdT1sKG4oNzUxOCkpLGQ9big4ODc4KSxwPW4oOTYzNCksZj1uKDk1MDcpO3QuQ2hlY2tib3g9Yy5mb3J3YXJkUmVmKCgoZSx0KT0+e3ZhcntzdGF0dXM6bn09ZSxyPWkoZSxbXCJzdGF0dXNcIl0pO3JldHVybigwLHMuanN4KShkLkJhc2VJbnB1dCxPYmplY3QuYXNzaWduKHt9LHIse3R5cGU6XCJjaGVja2JveFwiLHN0YXR1czpuLHJlbmRlcklucHV0OmU9Pnt2YXIgcj1pKGUsW10pO3JldHVybigwLHMuanN4cykoaCx7Y2hpbGRyZW46WygwLHMuanN4KShDLE9iamVjdC5hc3NpZ24oe3JlZjp0LGlkOnIubmFtZSx0eXBlOlwiY2hlY2tib3hcIn0scikpLCgwLHMuanN4KShnLE9iamVjdC5hc3NpZ24oe3N0YXR1czpufSx7Y2hpbGRyZW46KDAscy5qc3gpKHYse30pfSkpXX0pfX0pKX0pKSx0LkNoZWNrYm94LmRpc3BsYXlOYW1lPVwiQ2hlY2tib3hcIjtjb25zdCBoPXUuZGVmYXVsdC5kaXZgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuYCxnPXUuZGVmYXVsdC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBoZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG4gIHdpZHRoOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuICBib3JkZXI6IDFweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplLHN0YXR1czp0fSk9PigwLGYuZ2V0U3RhdHVzQ29sb3IpKGUsdCxcInRleHREZWZhdWx0XCIpfTtcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbmAsdj0oMCx1LmRlZmF1bHQpKHAuSWNvbikuYXR0cnMoe2ljb246XCJDaGVja0ljb25cIixzaXplOlwic21hbGxcIn0pYFxuICBvcGFjaXR5OiAwO1xuYCxDPXUuZGVmYXVsdC5pbnB1dGBcbiAgb3BhY2l0eTogMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgJjpjaGVja2VkICsgJHtnK1wiIFwiK3Z9IHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG5cbiAgJjpob3ZlciArICR7Z30ge1xuICAgIGJveC1zaGFkb3c6IDAgMCAxcHggMXB4ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dEZvY3VzZWR9O1xuICB9XG5cbiAgJjpmb2N1cyArICR7Z30ge1xuICAgIGJveC1zaGFkb3c6IDAgMCAxcHggMXB4ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dEZvY3VzZWR9O1xuICB9XG5cbiAgJjpkaXNhYmxlZCB7XG4gICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgfVxuXG4gICY6ZGlzYWJsZWQgKyAke2d9IHtcbiAgICBvcGFjaXR5OiAwLjU7XG4gIH1cbmB9LDgwNTE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDEpLHQpfSw5MDIyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pfTpmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10fSksYT10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCIhPT1uJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmcih0LGUsbik7cmV0dXJuIG8odCxlKSx0fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNoZWNrYm94R3JvdXA9dm9pZCAwO2NvbnN0IGk9big1ODkzKSxsPWEobig2Njg5KSkscz1hKG4oNzUxOCkpLGM9bigxMzM1KSx1PW4oNzc2OSksZD1uKDgwNTEpLHA9big3MDMwKTt0LkNoZWNrYm94R3JvdXA9KHtkaXNhYmxlZDplLGdhcDp0PVwic21hbGxcIixoZWxwZXJUZXh0Om4sbGFiZWw6cixtZXNzYWdlOm8sY2hpbGRyZW46YSx2YWxpZGF0aW9uRXJyb3JNZXNzYWdlOnMsdmFsdWVzOmMsb25DaGFuZ2U6dX0pPT57Y29uc3RbdyxiXT1sLnVzZVN0YXRlKG51bGwhPWM/YzpbXSkseT1lPT57Y29uc3QgdD1lLnRhcmdldC52YWx1ZSxuPXcuaW5jbHVkZXModCk/dy5maWx0ZXIoKGU9PmUhPT10KSk6Wy4uLncsdF07YihuKSx1JiZ1KG4pfTtyZXR1cm4oMCxpLmpzeHMpKHYse2NoaWxkcmVuOltyJiYoMCxpLmpzeHMpKGYse2NoaWxkcmVuOlsoMCxpLmpzeCkoaCxPYmplY3QuYXNzaWduKHt3ZWlnaHQ6XCJib2xkXCJ9LHtjaGlsZHJlbjpyfSkpLG4mJigwLGkuanN4KShnLHtjaGlsZHJlbjpufSldfSksKDAsaS5qc3gpKEMsT2JqZWN0LmFzc2lnbih7Z2FwOnR9LHtjaGlsZHJlbjpsLkNoaWxkcmVuLm1hcChhLCh0PT57Y29uc3Qgbj10O3JldHVybiBuLnR5cGU9PT1kLkNoZWNrYm94P2wuY2xvbmVFbGVtZW50KG4se2Rpc2FibGVkOmUsb25DaGFuZ2U6eSxjaGVja2VkOncuaW5jbHVkZXMobi5wcm9wcy52YWx1ZSl9KTpufSkpfSkpLCF3Lmxlbmd0aCYmcyYmKDAsaS5qc3gpKHAuVmFsaWRhdGlvbkVycm9yLHtjaGlsZHJlbjpzfSksbz8oMCxpLmpzeCkobSxPYmplY3QuYXNzaWduKHtkaXNhYmxlZDplfSx7Y2hpbGRyZW46b30pKTpudWxsXX0pfTtjb25zdCBmPSgwLHMuZGVmYXVsdCkoYy5Cb3gpYFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBtYXJnaW4tYm90dG9tOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbmAsaD0oMCxzLmRlZmF1bHQpKHUuVGV4dClgXG4gIHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplO1xuYCxnPSgwLHMuZGVmYXVsdCkodS5UZXh0KWBcbiAgc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5iYXNlfTtcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0SGVscH07XG5gLHY9KDAscy5kZWZhdWx0KShjLkJveClgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHdpZHRoOiBtYXgtY29udGVudDtcbmAsQz0oMCxzLmRlZmF1bHQpKGMuQm94KWBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgYWxpZ24taXRlbXM6IHN0YXJ0O1xuICB3aWR0aDogZml0LWNvbnRlbnQ7XG5gLG09KDAscy5kZWZhdWx0KSh1LlRleHQpYFxuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0UGxhY2Vob2xkZXJ9O1xuICBtYXJnaW4tdG9wOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuXG4gICR7KHtkaXNhYmxlZDplfSk9PmUmJnMuY3NzYFxuICAgICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dERpc2FibGVkfTtcbiAgICBgfVxuYH0sNDE2OTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oOTAyMiksdCl9LDkzNjg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5EYXRlSW5wdXQ9dm9pZCAwO2NvbnN0IGE9big1ODkzKSxpPW4oNjY4OSksbD1vKG4oNzUxOCkpLHM9big5NjM0KSxjPW4oMTMzNSksdT1uKDg4NzgpO3QuRGF0ZUlucHV0PSgwLGkuZm9yd2FyZFJlZikoKChlLHQpPT57dmFye3ZhbHVlOm49XCJcIix0eXBlOm89XCJkYXRlXCIsZXhwYW5kZWQ6bD0hMSxvbkNoYW5nZTpzfT1lLGM9cihlLFtcInZhbHVlXCIsXCJ0eXBlXCIsXCJleHBhbmRlZFwiLFwib25DaGFuZ2VcIl0pO2NvbnN0W3AsZl09KDAsaS51c2VTdGF0ZSkobik7cmV0dXJuKDAsaS51c2VFZmZlY3QpKCgoKT0+ZihuKSksW10pLCgwLGEuanN4KSh1LkJhc2VJbnB1dCxPYmplY3QuYXNzaWduKHt0eXBlOm99LGMse3JlbmRlcklucHV0OmU9Pnt2YXIgbj1yKGUsW10pO3JldHVybigwLGEuanN4KShkLE9iamVjdC5hc3NpZ24oe3JlZjp0LHR5cGU6byxvbkNoYW5nZTplPT57Y29uc3R7dmFsdWU6dH09ZS50YXJnZXQ7dCYmZih0KSxudWxsPT1zfHxzKGUpfSx2YWx1ZTpwLGV4cGFuZGVkOmx9LG4pKX19KSl9KSksdC5EYXRlSW5wdXQuZGlzcGxheU5hbWU9XCJEYXRlSW5wdXRcIjtjb25zdCBkPSgwLGkuZm9yd2FyZFJlZikoKChlLHQpPT57dmFye3R5cGU6bixleHBhbmRlZDpvLG9uRXhwYW5kOml9PWUsbD1yKGUsW1widHlwZVwiLFwiZXhwYW5kZWRcIixcIm9uRXhwYW5kXCJdKTtyZXR1cm4oMCxhLmpzeHMpKHAse2NoaWxkcmVuOlsoMCxhLmpzeCkoaCx7Y2hpbGRyZW46KDAsYS5qc3gpKHMuSWNvbix7aWNvbjpcInRpbWVcIj09PW4/XCJDbG9ja0ljb25cIjpcIkNhbGVuZGFySWNvblwifSl9KSwoMCxhLmpzeCkodixPYmplY3QuYXNzaWduKHtyZWY6dCx0eXBlOm4sb25LZXlEb3duOmU9PntcIiBcIj09PWUua2V5JiZlLnByZXZlbnREZWZhdWx0KCl9fSxsKSksKDAsYS5qc3gpKGcsT2JqZWN0LmFzc2lnbih7ZmxleERpcmVjdGlvbjpcImNvbHVtblwiLGRpc2FibGVkOmwuZGlzYWJsZWQsb25DbGljazppfSx7Y2hpbGRyZW46KDAsYS5qc3gpKHMuSWNvbix7aWNvbjpvP1wiQ2hldnJvblVwSWNvblwiOlwiQ2hldnJvbkRvd25JY29uXCJ9KX0pKV19KX0pKTtkLmRpc3BsYXlOYW1lPVwiU3R5bGVkRGF0ZUlucHV0XCI7Y29uc3QgcD1sLmRlZmF1bHQuZGl2YFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbiAgd2lkdGg6IDEwMCU7XG5gLGY9KDAsbC5kZWZhdWx0KShjLkJveClgXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMXB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDJweCk7XG5gLGg9KDAsbC5kZWZhdWx0KShmKWBcbiAgbGVmdDogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuYCxnPSgwLGwuZGVmYXVsdCkoZilgXG4gIHJpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbiAgcG9pbnRlci1ldmVudHM6ICR7KHtkaXNhYmxlZDplfSk9PmU/XCJub25lXCI6dm9pZCAwfTtcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDZ9O1xuICBwYWRkaW5nLWxlZnQ6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuYCx2PSgwLGwuZGVmYXVsdCkodS5TdHlsZWRJbnB1dEZpZWxkKWBcbiAgYXBwZWFyYW5jZTogdGV4dGZpZWxkO1xuICBwYWRkaW5nLXJpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4Lnh4eGxhcmdlfTtcbiAgcGFkZGluZy1sZWZ0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4Lnh4eGxhcmdlfTtcbiAgOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuICA6Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvciB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgICBhcHBlYXJhbmNlOiBub25lO1xuICB9XG5gfSwxNDY3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig5MzY4KSx0KX0sMTk3ODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oNjg4NCksdCl9LDY4ODQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5OdW1iZXJJbnB1dD10LkRpcmVjdGlvbj12b2lkIDA7Y29uc3QgYT1uKDU4OTMpLGk9big2Njg5KSxsPW8obig3NTE4KSkscz1uKDk2MzQpLGM9bigxMzM1KSx1PW4oODg3OCk7dmFyIGQ7IWZ1bmN0aW9uKGUpe2VbZS5VcD0xXT1cIlVwXCIsZVtlLkRvd249LTFdPVwiRG93blwifShkPXQuRGlyZWN0aW9ufHwodC5EaXJlY3Rpb249e30pKSx0Lk51bWJlcklucHV0PSgwLGkuZm9yd2FyZFJlZikoKChlLHQpPT57dmFye21pbjpuLG1heDpvLHN0ZXA6aT0xLG9uVGFrZVN0ZXA6bCx2YWx1ZTpzfT1lLGM9cihlLFtcIm1pblwiLFwibWF4XCIsXCJzdGVwXCIsXCJvblRha2VTdGVwXCIsXCJ2YWx1ZVwiXSk7cmV0dXJuKDAsYS5qc3gpKHUuQmFzZUlucHV0LE9iamVjdC5hc3NpZ24oe3R5cGU6XCJudW1iZXJcIn0sYyx7cmVuZGVySW5wdXQ6ZT0+e3ZhciB1PXIoZSxbXSk7cmV0dXJuKDAsYS5qc3gpKHAsT2JqZWN0LmFzc2lnbih7cHJlcGVuZEljb246Yy5wcmVwZW5kSWNvbixwcmVwZW5kU3RyaW5nOmMucHJlcGVuZFN0cmluZyxyZWY6dCxvbkluY3JlbWVudDooKT0+bCYmbChkLlVwLGkpLG9uRGVjcmVtZW50OigpPT5sJiZsKGQuRG93bixpKSxtaW46bixtYXg6byxzdGVwOml9LHUse3BsYWNlaG9sZGVyOmMucGxhY2Vob2xkZXIsdmFsdWU6cyxcImFyaWEtdmFsdWVub3dcIjpzLFwiYXJpYS12YWx1ZW1pblwiOm4sXCJhcmlhLXZhbHVlbWF4XCI6b30pKX19KSl9KSksdC5OdW1iZXJJbnB1dC5kaXNwbGF5TmFtZT1cIk51bWJlcklucHV0XCI7Y29uc3QgcD0oMCxpLmZvcndhcmRSZWYpKCgoZSx0KT0+e3ZhcntvbkluY3JlbWVudDpuLG9uRGVjcmVtZW50Om8scHJlcGVuZEljb246bCxwcmVwZW5kU3RyaW5nOmN9PWUsdT1yKGUsW1wib25JbmNyZW1lbnRcIixcIm9uRGVjcmVtZW50XCIsXCJwcmVwZW5kSWNvblwiLFwicHJlcGVuZFN0cmluZ1wiXSk7Y29uc3QgZD0oZSx0KT0+e1wiRW50ZXJcIiE9PWUua2V5JiZcIiBcIiE9PWUua2V5fHwoZS5wcmV2ZW50RGVmYXVsdCgpLHQ/bigpOm8oKSl9LHA9KDAsaS51c2VSZWYpKG51bGwpLFttLHddPSgwLGkudXNlU3RhdGUpKDApO3JldHVybigwLGkudXNlRWZmZWN0KSgoKCk9PntwLmN1cnJlbnQ/dyhwLmN1cnJlbnQub2Zmc2V0V2lkdGgpOncoMCl9KSxbcC5jdXJyZW50LGwsY10pLCgwLGEuanN4cykoZix7Y2hpbGRyZW46WyghIWx8fCEhYykmJigwLGEuanN4cykoaCxPYmplY3QuYXNzaWduKHtoYXNJY29uOiEhbCxyZWY6cCxhbGlnbkl0ZW1zOlwiY2VudGVyXCIsanVzdGlmeUNvbnRlbnQ6XCJjZW50ZXJcIn0se2NoaWxkcmVuOltsJiYoMCxhLmpzeCkocy5JY29uLHtpY29uOmwsc2l6ZTpcImJhc2VcIn0pLGMmJiFsJiZjXX0pKSwoMCxhLmpzeCkoQyxPYmplY3QuYXNzaWduKHtwcmVwZW5kQ29udGFpbmVyV2lkdGg6bSxyZWY6dH0sdSkpLCgwLGEuanN4cykoZyxPYmplY3QuYXNzaWduKHtmbGV4RGlyZWN0aW9uOlwiY29sdW1uXCIsZGlzYWJsZWQ6dS5kaXNhYmxlZH0se2NoaWxkcmVuOlsoMCxhLmpzeCkodixPYmplY3QuYXNzaWduKHtvbkNsaWNrOm4sb25LZXlEb3duOmU9PmQoZSwhMCksZGlzYWJsZWQ6dS5kaXNhYmxlZCxcImFyaWEtbGFiZWxcIjpcIkluY3JlbWVudCB2YWx1ZVwiLHRhYkluZGV4OjB9LHtjaGlsZHJlbjooMCxhLmpzeCkocy5JY29uLHtpY29uOlwiVHJpYW5nbGVVcEljb25cIn0pfSkpLCgwLGEuanN4KSh2LE9iamVjdC5hc3NpZ24oe29uS2V5RG93bjplPT5kKGUpLG9uQ2xpY2s6byxcImFyaWEtbGFiZWxcIjpcIkRlY3JlbWVudCB2YWx1ZVwiLGRpc2FibGVkOnUuZGlzYWJsZWQsdGFiSW5kZXg6MH0se2NoaWxkcmVuOigwLGEuanN4KShzLkljb24se2ljb246XCJUcmlhbmdsZURvd25JY29uXCJ9KX0pKV19KSldfSl9KSk7cC5kaXNwbGF5TmFtZT1cIlN0eWxlZE51bWJlcklucHV0XCI7Y29uc3QgZj1sLmRlZmF1bHQuZGl2YFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbiAgd2lkdGg6IDEwMCU7XG5gLGg9KDAsbC5kZWZhdWx0KShjLkJveClgXG4gIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNn07XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogMXB4O1xuICB0b3A6IDFweDtcbiAgd2lkdGg6ICR7KHt0aGVtZTplLGhhc0ljb246dH0pPT50P2UucHgueHhsYXJnZTpcImZpdC1jb250ZW50XCJ9O1xuICBwYWRkaW5nOiAwICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDJweCk7XG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmAke2UucmFkaXVzLnNtYWxsfSAwIDAgJHtlLnJhZGl1cy5zbWFsbH1gfTtcbmAsZz0oMCxsLmRlZmF1bHQpKGMuQm94KWBcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMXB4O1xuICB0b3A6IDFweDtcbiAgZ2FwOiAxcHg7XG4gIGhlaWdodDogY2FsYygxMDAlIC0gMnB4KTtcbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+YDAgJHtlLnJhZGl1cy5zbWFsbH0gJHtlLnJhZGl1cy5zbWFsbH0gMGB9O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gIHBvaW50ZXItZXZlbnRzOiAkeyh7ZGlzYWJsZWQ6ZX0pPT5lP1wibm9uZVwiOnZvaWQgMH07XG5gLHY9KDAsbC5kZWZhdWx0KShjLkJveClgXG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ2fTtcbiAgcGFkZGluZzogMCAkeyh7dGhlbWU6ZX0pPT5lLnB4LnhzbWFsbH07XG4gIHVzZXItc2VsZWN0OiBub25lO1xuICBoZWlnaHQ6IDUwJTtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cbiAgY29sb3I6ICR7KHtkaXNhYmxlZDplLHRoZW1lOnR9KT0+ZT90LnBhbGV0dGUudGV4dEhlbHA6dC5wYWxldHRlLnRleHREZWZhdWx0fTtcblxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXRGb2N1c2VkfTtcbiAgfVxuXG4gICY6YWN0aXZlIHtcbiAgICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXRDb2xvcn07XG4gIH1cbmAsQz0oMCxsLmRlZmF1bHQpKHUuU3R5bGVkSW5wdXRGaWVsZClgXG4gIGFwcGVhcmFuY2U6IHRleHRmaWVsZDtcbiAgcGFkZGluZy1sZWZ0OiAkeyh7cHJlcGVuZENvbnRhaW5lcldpZHRoOmV9KT0+YCR7ZSsxMH1weGB9O1xuXG4gIDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbiAgOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uIHtcbiAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgIG1hcmdpbjogMDtcbiAgfVxuYH0sNTIxNTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oMjI1NSksdCl9LDIyNTU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImRlZmF1bHRcIix7ZW51bWVyYWJsZTohMCx2YWx1ZTp0fSl9OmZ1bmN0aW9uKGUsdCl7ZS5kZWZhdWx0PXR9KSxhPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIiE9PW4mJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZyKHQsZSxuKTtyZXR1cm4gbyh0LGUpLHR9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuUmFkaW9Hcm91cD12b2lkIDA7Y29uc3QgaT1uKDU4OTMpLGw9YShuKDY2ODkpKSxzPWEobig3NTE4KSksYz1uKDEzMzUpLHU9big3NzY5KSxkPW4oMjU2NSkscD1uKDcwMzApO3QuUmFkaW9Hcm91cD0oe2RpcmVjdGlvbjplPVwiY29sdW1uXCIsbGFiZWw6dCxkaXNhYmxlZDpuLGxhYmVsU2lkZTpyPVwicmlnaHRcIixnYXA6bz1cInNtYWxsXCIsbWVzc2FnZTphLGhlbHBlclRleHQ6cyxuYW1lOmMsY2hpbGRyZW46dSx2YWxpZGF0aW9uRXJyb3JNZXNzYWdlOncsb25DaGFuZ2U6Yix2YWx1ZTp5fSk9Pntjb25zdFt4LGtdPWwudXNlU3RhdGUoeSksUz1lPT57ayhlLnRhcmdldC52YWx1ZSksYiYmYihlKX07cmV0dXJuIGwudXNlRWZmZWN0KCgoKT0+e2soeSl9KSxbeV0pLCgwLGkuanN4cykoaCx7Y2hpbGRyZW46WygwLGkuanN4cykoZix7Y2hpbGRyZW46WygwLGkuanN4KShtLE9iamVjdC5hc3NpZ24oe3dlaWdodDpcImJvbGRcIn0se2NoaWxkcmVuOnR9KSkscyYmKDAsaS5qc3gpKGcse2NoaWxkcmVuOnN9KV19KSwoMCxpLmpzeCkodixPYmplY3QuYXNzaWduKHtkaXJlY3Rpb246ZSxsYWJlbFNpZGU6cixnYXA6b30se2NoaWxkcmVuOmwuQ2hpbGRyZW4ubWFwKHUsKGU9Pntjb25zdCB0PWU7cmV0dXJuIHQudHlwZT09PWQuUmFkaW9JbnB1dD9sLmNsb25lRWxlbWVudCh0LHtuYW1lOmMsbGFiZWxTaWRlOnIsZGlzYWJsZWQ6bixvbkNoYW5nZTpTLGNoZWNrZWQ6dC5wcm9wcy52YWx1ZT09PXh9KTp0fSkpfSkpLCF4JiZ3JiYoMCxpLmpzeCkocC5WYWxpZGF0aW9uRXJyb3Ise2NoaWxkcmVuOnd9KSxhPygwLGkuanN4KShDLE9iamVjdC5hc3NpZ24oe2Rpc2FibGVkOm59LHtjaGlsZHJlbjphfSkpOm51bGxdfSl9O2NvbnN0IGY9KDAscy5kZWZhdWx0KShjLkJveClgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIG1hcmdpbi1ib3R0b206ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuYCxoPSgwLHMuZGVmYXVsdCkoYy5Cb3gpYFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB3aWR0aDogbWF4LWNvbnRlbnQ7XG5gLGc9KDAscy5kZWZhdWx0KSh1LlRleHQpYFxuICBzaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmJhc2V9O1xuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHRIZWxwfTtcbmAsdj0oMCxzLmRlZmF1bHQpKGMuQm94KWBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246ICR7ZT0+ZS5kaXJlY3Rpb259O1xuICBhbGlnbi1pdGVtczogJHtlPT57c3dpdGNoKGUubGFiZWxTaWRlKXtjYXNlXCJsZWZ0XCI6cmV0dXJuXCJlbmRcIjtjYXNlXCJyaWdodFwiOnJldHVyblwic3RhcnRcIjtkZWZhdWx0OnJldHVyblwiY2VudGVyXCJ9fX07XG4gIHdpZHRoOiBmaXQtY29udGVudDtcbmAsQz0oMCxzLmRlZmF1bHQpKHUuVGV4dClgXG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXRQbGFjZWhvbGRlcn07XG4gIG1hcmdpbi10b3A6ICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG5cbiAgJHsoe2Rpc2FibGVkOmV9KT0+ZSYmcy5jc3NgXG4gICAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0RGlzYWJsZWR9O1xuICAgIGB9XG5gLG09KDAscy5kZWZhdWx0KSh1LlRleHQpYFxuICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcbmB9LDM2NDE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDI1NjUpLHQpfSwyNTY1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pfTpmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10fSksYT10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCIhPT1uJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmcih0LGUsbik7cmV0dXJuIG8odCxlKSx0fSxpPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuUmFkaW9JbnB1dD12b2lkIDA7Y29uc3QgbD1uKDU4OTMpLHM9big3NzY5KSxjPWEobig2Njg5KSksdT1hKG4oNzUxOCkpLGQ9bigxMzM1KSxwPW4oOTYzNCk7dC5SYWRpb0lucHV0PWMuZm9yd2FyZFJlZigoKGUsdCk9Pnt2YXJ7ZGlzYWJsZWQ6bixpZDpyLGxhYmVsOm8sbGFiZWxTaWRlOmEsaWNvbjpzfT1lLGM9aShlLFtcImRpc2FibGVkXCIsXCJpZFwiLFwibGFiZWxcIixcImxhYmVsU2lkZVwiLFwiaWNvblwiXSk7cmV0dXJuKDAsbC5qc3gpKGYse2NoaWxkcmVuOigwLGwuanN4cykodixPYmplY3QuYXNzaWduKHthczpcImxhYmVsXCIsaHRtbEZvcjpyLGxhYmVsU2lkZTphLGRpc2FibGVkOm59LHtjaGlsZHJlbjpbKDAsbC5qc3gpKGcsT2JqZWN0LmFzc2lnbih7cmVmOnQsdHlwZTpcInJhZGlvXCIsZGlzYWJsZWQ6bn0sYykpLCgwLGwuanN4KShoLHt9KSwhIXMmJigwLGwuanN4KShwLkljb24se2ljb246c30pLG98fFwiXCJdfSkpfSl9KSksdC5SYWRpb0lucHV0LmRpc3BsYXlOYW1lPVwiUmFkaW9JbnB1dFwiO2NvbnN0IGY9KDAsdS5kZWZhdWx0KShkLkJveClgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5gLGg9dS5kZWZhdWx0LmRpdmBcbiAgd2lkdGg6ICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG4gIGhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBib3JkZXItd2lkdGg6IDFweDtcbiAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcblxuICBpbnB1dDpjaGVja2VkIH4gJjphZnRlciB7XG4gICAgY29udGVudDogJyc7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luOiAycHggMXB4IDBweCAycHg7XG4gICAgd2lkdGg6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuICAgIGhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gIH1cblxuICBpbnB1dDpkaXNhYmxlZCB+ICYge1xuICAgIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0RGlzYWJsZWR9O1xuICB9XG5cbiAgaW5wdXQ6ZGlzYWJsZWQgfiAmOmFmdGVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXREaXNhYmxlZH07XG4gIH1cbmAsZz11LmRlZmF1bHQuaW5wdXRgXG4gIG9wYWNpdHk6IDA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICY6ZGlzYWJsZWQge1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgfVxuYCx2PSgwLHUuZGVmYXVsdCkocy5UZXh0KWBcbiAgd2lkdGg6IGZpdC1jb250ZW50O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmbGV4LWRpcmVjdGlvbjogJHsoe2xhYmVsU2lkZTplfSk9Pntzd2l0Y2goZXx8XCJyaWdodFwiKXtjYXNlXCJsZWZ0XCI6cmV0dXJuXCJyb3ctcmV2ZXJzZVwiO2Nhc2VcInJpZ2h0XCI6cmV0dXJuXCJyb3dcIjtjYXNlXCJ0b3BcIjpyZXR1cm5cImNvbHVtbi1yZXZlcnNlXCI7Y2FzZVwiYm90dG9tXCI6cmV0dXJuXCJjb2x1bW5cIn19fTtcbiAgZ2FwOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICR7KHtkaXNhYmxlZDplfSk9PmU/dS5jc3NgXG4gICAgICAgICAgJiB7XG4gICAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dERpc2FibGVkfTtcbiAgICAgICAgYDpudWxsfVxuYH0sODUxMDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oNzA2OCksdCl9LDcwNjg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuUmF3SW5wdXQ9dm9pZCAwO2NvbnN0IG89cihuKDc1MTgpKTt0LlJhd0lucHV0PW8uZGVmYXVsdC5pbnB1dGBgLHQuUmF3SW5wdXQuZGlzcGxheU5hbWU9XCJSYXdJbnB1dFwifSwzMTE5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig3OTkpLHQpfSw3OTk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuVGV4dEFyZWE9dm9pZCAwO2NvbnN0IG89big1ODkzKSxhPW4oNjY4OSksaT1yKG4oNzUxOCkpLGw9big5NTA3KSxzPW4oOTUwNyksYz1uKDEzMzUpLHU9bigxOTQ0KTt0LlRleHRBcmVhPSgwLGEuZm9yd2FyZFJlZikoKChlLHQpPT4oMCxvLmpzeCkocCxPYmplY3QuYXNzaWduKHtmbGV4RGlyZWN0aW9uOlwiY29sdW1uXCIsYWxpZ25JdGVtczpcImZsZXgtc3RhcnRcIn0se2NoaWxkcmVuOigwLG8uanN4cykoZCx7Y2hpbGRyZW46WyEhZS5sYWJlbCYmKDAsby5qc3gpKHUuTGFiZWwse3RleHQ6ZS5sYWJlbCxodG1sRm9yOmUubmFtZSxoZWxwZXJUZXh0OmUuaGVscGVyVGV4dH0pLCgwLG8uanN4KShmLE9iamVjdC5hc3NpZ24oe3JlZjp0fSxlLHtvbkNoYW5nZTplLm9uQ2hhbmdlfSkpXX0pfSkpKSksdC5UZXh0QXJlYS5kaXNwbGF5TmFtZT1cIlRleHRBcmVhXCI7Y29uc3QgZD0oMCxpLmRlZmF1bHQpKGMuQm94KWBcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgd2lkdGg6IDEwMCU7XG5gLHA9KDAsaS5kZWZhdWx0KShjLkJveClgXG4gIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5iYXNlfTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG5gLGY9aS5kZWZhdWx0LnRleHRhcmVhYFxuICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDR9O1xuICBib3JkZXI6IDFweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXRCb3JkZXJ9O1xuICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplLHN0YXR1czp0fSk9PigwLHMuZ2V0U3RhdHVzQ29sb3IpKGUsdCxcImlucHV0Qm9yZGVyXCIpfTtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICB3aWR0aDogMTAwJTtcbiAgcmVzaXplOiBub25lO1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICAke2wuTWl4aW5zLnNjcm9sbGJhci5zbWFsbH07XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXRDb2xvcn07XG4gIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5iYXNlfTtcbiAgbGluZS1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUubGluZUhlaWdodC50ZXh0fTtcbiAgZm9udC13ZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUuZm9udFdlaWdodC5ub3JtYWx9O1xuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfSAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfSAwcHggJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG5cbiAgJjpmb2N1cyB7XG4gICAgb3V0bGluZTogMDtcbiAgICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplLHN0YXR1czp0fSk9PigwLHMuZ2V0U3RhdHVzQ29sb3IpKGUsdCxcImlucHV0Rm9jdXNlZFwiKX07XG4gIH1cblxuICAmOmRpc2FibGVkOjpwbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dERpc2FibGVkfTtcbiAgfVxuYH0sODk1MTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oMjM1MiksdCl9LDIzNTI6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuVGV4dElucHV0PXZvaWQgMDtjb25zdCByPW4oNTg5Myksbz1uKDY2ODkpLGE9big4ODc4KTt0LlRleHRJbnB1dD0oMCxvLmZvcndhcmRSZWYpKCgoZSx0KT0+KDAsci5qc3gpKGEuQmFzZUlucHV0LE9iamVjdC5hc3NpZ24oe3JlZjp0LHR5cGU6XCJ0ZXh0XCJ9LGUpKSkpLHQuVGV4dElucHV0LmRpc3BsYXlOYW1lPVwiVGV4dElucHV0XCJ9LDMzMzk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQm94PXZvaWQgMDtjb25zdCBvPXIobig3NTE4KSksYT1uKDg3MzIpLGk9big1NDU5KSxsPXsxOmkuUGFsZXR0ZS5iYWNrZ3JvdW5kMSwyOmkuUGFsZXR0ZS5iYWNrZ3JvdW5kMiwzOmkuUGFsZXR0ZS5iYWNrZ3JvdW5kMyw0OmkuUGFsZXR0ZS5iYWNrZ3JvdW5kNCw1OmkuUGFsZXR0ZS5iYWNrZ3JvdW5kNSw2OmkuUGFsZXR0ZS5iYWNrZ3JvdW5kNn07dC5Cb3g9by5kZWZhdWx0LmRpdmBcbiAgLyoqXG4gICAqIFN0eWxlIFNjcm9sbGJhciBmb3IgQm94ZXMgd2l0aCBvdmVyZmxvd1xuICAgKi9cbiAgJHthLk1peGlucy5zY3JvbGxiYXIuYmFzZX1cblxuICBkaXNwbGF5OiAkeyh7ZGlzcGxheTplPVwiZmxleFwifSk9PmV9O1xuICBmbGV4LWRpcmVjdGlvbjogJHsoe2ZsZXhEaXJlY3Rpb246ZT1cInJvd1wifSk9PmV9O1xuICBmbGV4LXdyYXA6ICR7KHtmbGV4V3JhcDplPVwibm93cmFwXCJ9KT0+ZX07XG4gIGFsaWduLWl0ZW1zOiAkeyh7YWxpZ25JdGVtczplfSk9PmV9O1xuICBqdXN0aWZ5LWNvbnRlbnQ6ICR7KHtqdXN0aWZ5Q29udGVudDplfSk9PmV9O1xuICBnYXA6ICR7KHt0aGVtZTplLGdhcDp0fSk9PnQmJmUucHhbdF19O1xuICBhbGlnbi1zZWxmOiAkeyh7YWxpZ25TZWxmOmV9KT0+ZX07XG4gIGZsZXgtYmFzaXM6ICR7KHtmbGV4QmFzaXM6ZX0pPT5lfTtcbiAgZmxleC1ncm93OiAkeyh7ZmxleEdyb3c6ZX0pPT5lfTtcbiAgZmxleC1zaHJpbms6ICR7KHtmbGV4U2hyaW5rOmV9KT0+ZX07XG4gIG9yZGVyOiAkeyh7b3JkZXI6ZX0pPT5lfTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmUscGFkZGluZzp0fSk9PnQmJmUucHhbdF19O1xuICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZSxiYWNrZ3JvdW5kOnR9KT0+dCYmZS5wYWxldHRlW2xbdF1dfTtcbmAsdC5Cb3guZGlzcGxheU5hbWU9XCJCb3hcIn0sMTMzNTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oMzMzOSksdCl9LDY3MTA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5EZWZpbml0aW9uTGlzdD12b2lkIDA7Y29uc3QgYT1uKDU4OTMpLGk9byhuKDc1MTgpKTt0LkRlZmluaXRpb25MaXN0PWU9Pnt2YXJ7ZGVmaW5pdGlvbnM6dH09ZSxuPXIoZSxbXCJkZWZpbml0aW9uc1wiXSk7cmV0dXJuKDAsYS5qc3gpKHMsT2JqZWN0LmFzc2lnbih7fSxuLHtyb2xlOlwibGlzdFwifSx7Y2hpbGRyZW46KEFycmF5LmlzQXJyYXkodCk/dDpBcnJheS5mcm9tKHQpKS5tYXAoKChbZSx0XSxuKT0+KDAsYS5qc3hzKShsLE9iamVjdC5hc3NpZ24oe3JvbGU6XCJsaXN0aXRlbVwifSx7Y2hpbGRyZW46WygwLGEuanN4KShjLE9iamVjdC5hc3NpZ24oe2lkOmB0ZXJtJHtufWB9LHtjaGlsZHJlbjplfSkpLCgwLGEuanN4KSh1LE9iamVjdC5hc3NpZ24oe1wiYXJpYS1sYWJlbGxlZGJ5XCI6YHRlcm0ke259YH0se2NoaWxkcmVuOnR9KSldfSksYCR7ZX0tJHtufWApKSl9KSl9O2NvbnN0IGw9aS5kZWZhdWx0LmRpdmBcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgM2ZyO1xuYCxzPWkuZGVmYXVsdC5kbGBcbiAgZ2FwOiAkeyh7dGhlbWU6ZX0pPT5gMCAke2UucHgubGFyZ2V9YH07XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAke2UucHguc21hbGx9ICR7ZS5weC5iYXNlfWB9O1xuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuYCxjPWkuZGVmYXVsdC5kdGBcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0SGVscH07XG4gIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5zbWFsbH07XG4gIGZvbnQtd2VpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRXZWlnaHQubm9ybWFsfTtcbiAgbGluZS1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG4gIHBhZGRpbmctYm90dG9tOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbmAsdT1pLmRlZmF1bHQuZGRgXG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuc21hbGx9O1xuICBsaW5lLWhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcbiAgcGFkZGluZy1ib3R0b206ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuYH0sNTM3NzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oNjcxMCksdCl9LDk0MzE6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuR2xvYmFsU3R5bGVzPXZvaWQgMDtjb25zdCByPW4oNzUxOCksbz1uKDU3NSksYT1uKDkyNzIpO3QuR2xvYmFsU3R5bGVzPXIuY3JlYXRlR2xvYmFsU3R5bGVgXG4gIC8qKiAtPiBEZWZpbmUgR2xvYmFsIENTUyBWYXJzICovXG4gIDpyb290IHtcbiAgICAtLW9wZW5maW4tdWktZ2xvYmFsVHJhbnNpdGlvbjogJHsoe3RoZW1lOmV9KT0+ZS50cmFuc2l0aW9uLmJhc2V9O1xuXG4gICAgZm9udC1mYW1pbHk6ICR7KHt0aGVtZTplfSk9PmUuZm9udEZhbWlseX07XG4gICAgLyogTWFwIG92ZXIgdGhlIHBhbGV0dGUga2V5cyBhbmQgY3JlYXRlIHZhcmlhYmxlcyBvdXQgb2YgdGhlbSAqL1xuICAgICR7by5nZXRSb290Q3NzVmFyc31cbiAgfVxuXG4gIC8qKiAtPiBAZm9udC1mYWNlIERlY2xhcmF0aW9uICovXG4gICR7KHtmb250czplfSk9PigwLGEuY3JlYXRlRm9udEZhY2VDc3MpKGUpfVxuXG4gIC8qKiAtPiBNaWNybyBSZXNldCAqL1xuICAqIHtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIC8qKlxuICAgICAqIFByZXZlbnQgYnJvd3NlciBhdXRvLXdlaWdodGluZ1xuICAgICAqIEBsaW5rIGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vYWxtYW5hYy9wcm9wZXJ0aWVzL2YvZm9udC1zeW50aGVzaXMvXG4gICAgICovXG4gICAgZm9udC1zeW50aGVzaXM6IG5vbmU7XG4gIH1cblxuICAvKiogLT4gQXBwbHkgR2xvYmFsIFN0eWxlcyAqL1xuXG4gIGJvZHksXG4gIDpyb290IHtcbiAgICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDF9O1xuICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICAgIGZvbnQtZmFtaWx5OiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRGYW1pbHl9O1xuICAgIGZvbnQtd2VpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRXZWlnaHQubm9ybWFsfTtcbiAgICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gICAgbGluZS1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUubGluZUhlaWdodC50ZXh0fTtcbiAgfVxuXG4gIDo6cGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXRQbGFjZWhvbGRlcn07XG4gIH1cblxuICAvKiogLT4gUmVkdWNlZCBNb3Rpb24gKEFjY2Vzc2liaWxpdHkpICovXG4gIEBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbikge1xuICAgIDpyb290IHtcbiAgICAgIC0tb3BlbmZpbi11aS1nbG9iYWxUcmFuc2l0aW9uOiAkeyh7dGhlbWU6ZX0pPT5lLnRyYW5zaXRpb24ubm9uZX07XG4gICAgfVxuICB9XG5gfSwxMDY5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig5NDMxKSx0KX0sMTMxMDooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSw5NTA3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig5NjM4KSx0KSxvKG4oNDIwKSx0KX0sOTk4NDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5nZXRNb3N0UmVhZGFibGU9dC5kYXJrZW5Db2xvcj10LmxpZ2h0ZW5Db2xvcj12b2lkIDA7Y29uc3Qgbz1yKG4oODIwNykpO3QubGlnaHRlbkNvbG9yPShlLHQpPT5hKGUsXCJsaWdodGVuXCIsdCksdC5kYXJrZW5Db2xvcj0oZSx0KT0+YShlLFwiZGFya2VuXCIsdCk7Y29uc3QgYT0oZSx0LG4pPT57aWYobiYmKG48MHx8bj4xMDApKXRocm93IG5ldyBFcnJvcihgJHtufSBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMTAwYCk7cmV0dXJuKDAsby5kZWZhdWx0KShlKVt0XShuKS50b1N0cmluZygpfTt0LmdldE1vc3RSZWFkYWJsZT0oZSx0KT0+by5kZWZhdWx0Lm1vc3RSZWFkYWJsZShlLHQpLnRvSGV4U3RyaW5nKCl9LDM0NzE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImRlZmF1bHRcIix7ZW51bWVyYWJsZTohMCx2YWx1ZTp0fSl9OmZ1bmN0aW9uKGUsdCl7ZS5kZWZhdWx0PXR9KSxhPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIiE9PW4mJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZyKHQsZSxuKTtyZXR1cm4gbyh0LGUpLHR9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuSWNvblNpemU9dC5JY29uU2V0PXQuVHJhbnNpdGlvbj10LkxpbmVIZWlnaHQ9dC5Gb250V2VpZ2h0PXQuRm9udFNpemU9dC5Gb250RmFtaWx5PXQuU2hhZG93PXQuUmFkaXVzPXQuVW5pdFB4PXQuVW5pdD10LlNpemVOYW1lPXQuU2l6ZT10LkNvbG9yPXZvaWQgMDtjb25zdCBpPWEobigxNTIxKSksbD1hKG4oMjc3MikpO3QuQ29sb3I9e3doaXRlOlwiI0ZGRkZGRlwiLGxpZ2h0R3JheTE6XCIjRkFGQkZFXCIsbGlnaHRHcmF5MjpcIiNGM0Y1RjhcIixsaWdodEdyYXkzOlwiI0VDRUVGMVwiLGxpZ2h0R3JheTQ6XCIjRERERkU0XCIsbGlnaHRHcmF5NTpcIiNDOUNCRDJcIixuZXV0cmFsR3JheTpcIiM3RDgwOEFcIixuZXV0cmFsR3JheTgwOlwicmdiYSgxMjUsMTI4LDEzOCwwLjgpXCIsc2lsdmVyR3JheTpcIiNDMEMxQzJcIixkYXJrR3JheTE6XCIjNTM1NjVGXCIsZGFya0dyYXkyOlwiIzM4M0E0MFwiLGRhcmtHcmF5MzpcIiMyRjMxMzZcIixkYXJrR3JheTQ6XCIjMjQyNjJCXCIsZGFya0dyYXk1OlwiIzFFMUYyM1wiLGRhcmtHcmF5NjpcIiMxMTEyMTRcIixvcGVuRmluRGFya2VzdDpcIiMzRDM5Q0RcIixvcGVuRmluRGFya2VyOlwiIzQ2NDJFMFwiLG9wZW5GaW46XCIjNTA0Q0ZGXCIsb3BlbkZpbkxpZ2h0OlwiIzUyNTRGQlwiLG9wZW5GaW5MaWdodGVyOlwiIzVDNUVGRVwiLG9wZW5GaW5MaWdodGVzdDpcIiM2ODY0RkZcIixmdW5jdGlvbmFsMTpcIiMyMDc3MzVcIixmdW5jdGlvbmFsMjpcIiM0NkM4RjFcIixmdW5jdGlvbmFsMzpcIiMwQTc2RDNcIixmdW5jdGlvbmFsNDpcIiM2Q0FERTVcIixmdW5jdGlvbmFsNTpcIiMwQTc2RDNcIixmdW5jdGlvbmFsNjpcIiM4ODJCRkVcIixmdW5jdGlvbmFsNzpcIiNGMzE4MThcIixmdW5jdGlvbmFsODpcIiNDOTM0MDBcIixmdW5jdGlvbmFsOTpcIiNGRjVFNjBcIixmdW5jdGlvbmFsMTA6XCIjRjQ4RjAwXCIscHVycGxlOlwiIzhDNjFGRlwiLGxpZ2h0Ymx1ZTpcIiMzNkMzRkVcIixhcXVhOlwiIzAwQ0M4OFwiLHllbGxvdzpcIiNGRkVCMDBcIixzYWxtb246XCIjRkY4QzRDXCIscGluazpcIiNGRjVFNjBcIixsaWdodHBpbms6XCIjRkY4RkI4XCIsd2hpdGUwMDpcInJnYmEoMjU1LDI1NSwyNTUsMC4wKVwiLHdoaXRlMTA6XCJyZ2JhKDI1NSwyNTUsMjU1LDAuMSlcIix3aGl0ZTIwOlwicmdiYSgyNTUsMjU1LDI1NSwwLjIpXCIsd2hpdGUzMDpcInJnYmEoMjU1LDI1NSwyNTUsMC4zKVwiLHdoaXRlNDA6XCJyZ2JhKDI1NSwyNTUsMjU1LDAuNClcIix3aGl0ZTUwOlwicmdiYSgyNTUsMjU1LDI1NSwwLjUpXCIsd2hpdGU2MDpcInJnYmEoMjU1LDI1NSwyNTUsMC42KVwiLHdoaXRlNzA6XCJyZ2JhKDI1NSwyNTUsMjU1LDAuNylcIix3aGl0ZTgwOlwicmdiYSgyNTUsMjU1LDI1NSwwLjgpXCIsd2hpdGU5MDpcInJnYmEoMjU1LDI1NSwyNTUsMC45KVwiLGJsYWNrMDA6XCJyZ2JhKDAsMCwwLDAuMClcIixibGFjazEwOlwicmdiYSgwLDAsMCwwLjEpXCIsYmxhY2syMDpcInJnYmEoMCwwLDAsMC4yKVwiLGJsYWNrMzA6XCJyZ2JhKDAsMCwwLDAuMylcIixibGFjazQwOlwicmdiYSgwLDAsMCwwLjQpXCIsYmxhY2s1MDpcInJnYmEoMCwwLDAsMC41KVwiLGJsYWNrNjA6XCJyZ2JhKDAsMCwwLDAuNilcIixibGFjazcwOlwicmdiYSgwLDAsMCwwLjcpXCIsYmxhY2s4MDpcInJnYmEoMCwwLDAsMC44KVwiLGJsYWNrOTA6XCJyZ2JhKDAsMCwwLDAuOSlcIix0cmFuc3BhcmVudDpcInRyYW5zcGFyZW50XCJ9LHQuU2l6ZT17eHNtYWxsOlwieHNtYWxsXCIsc21hbGw6XCJzbWFsbFwiLGJhc2U6XCJiYXNlXCIsbGFyZ2U6XCJsYXJnZVwiLHhsYXJnZTpcInhsYXJnZVwiLHh4bGFyZ2U6XCJ4eGxhcmdlXCIseHh4bGFyZ2U6XCJ4eHhsYXJnZVwiLHh4eHhsYXJnZTpcInh4eHhsYXJnZVwifSx0LlNpemVOYW1lPXtbdC5TaXplLnhzbWFsbF06XCJFeHRyYSBTbWFsbFwiLFt0LlNpemUuc21hbGxdOlwiU21hbGxcIixbdC5TaXplLmJhc2VdOlwiQmFzZVwiLFt0LlNpemUubGFyZ2VdOlwiTGFyZ2VcIixbdC5TaXplLnhsYXJnZV06XCJFeHRyYSBMYXJnZVwiLFt0LlNpemUueHhsYXJnZV06XCIyWCBMYXJnZVwiLFt0LlNpemUueHh4bGFyZ2VdOlwiM1ggTGFyZ2VcIixbdC5TaXplLnh4eHhsYXJnZV06XCI0WCBMYXJnZVwifSx0LlVuaXQ9e1t0LlNpemUueHNtYWxsXTo0LFt0LlNpemUuc21hbGxdOjgsW3QuU2l6ZS5iYXNlXToxMixbdC5TaXplLmxhcmdlXToxNixbdC5TaXplLnhsYXJnZV06MjAsW3QuU2l6ZS54eGxhcmdlXToyNCxbdC5TaXplLnh4eGxhcmdlXTozMixbdC5TaXplLnh4eHhsYXJnZV06NDh9LHQuVW5pdFB4PXtbdC5TaXplLnhzbWFsbF06XCI0cHhcIixbdC5TaXplLnNtYWxsXTpcIjhweFwiLFt0LlNpemUuYmFzZV06XCIxMnB4XCIsW3QuU2l6ZS5sYXJnZV06XCIxNnB4XCIsW3QuU2l6ZS54bGFyZ2VdOlwiMjBweFwiLFt0LlNpemUueHhsYXJnZV06XCIyNHB4XCIsW3QuU2l6ZS54eHhsYXJnZV06XCIzMnB4XCIsW3QuU2l6ZS54eHh4bGFyZ2VdOlwiNDhweFwifSx0LlJhZGl1cz17W3QuU2l6ZS54c21hbGxdOlwiMnB4XCIsW3QuU2l6ZS5zbWFsbF06XCI0cHhcIixbdC5TaXplLmJhc2VdOlwiOHB4XCIsW3QuU2l6ZS5sYXJnZV06XCIyNHB4XCIscGlsbDpcIjEwMHZoXCIscm91bmQ6XCI1MCVcIixub25lOlwiMFwifSx0LlNoYWRvdz17W3QuU2l6ZS5iYXNlXTpcIjAgNHB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMjUpXCJ9LHQuRm9udEZhbWlseT1bXCJJbnRlclwiLFwic3lzdGVtLXVpXCIsXCJCbGlua01hY1N5c3RlbUZvbnRcIixcIlNlZ29lIFVJXCIsXCJSb2JvdG9cIixcIk94eWdlbi1TYW5zXCIsXCJVYnVudHVcIixcIkNhbnRhcmVsbFwiLFwiSGVsdmV0aWNhIE5ldWVcIixcInNhbnMtc2VyaWZcIl0uam9pbihcIixcIiksdC5Gb250U2l6ZT17W3QuU2l6ZS54c21hbGxdOlwiOHB4XCIsW3QuU2l6ZS5zbWFsbF06XCIxMHB4XCIsW3QuU2l6ZS5iYXNlXTpcIjEycHhcIixbdC5TaXplLmxhcmdlXTpcIjE0cHhcIixbdC5TaXplLnhsYXJnZV06XCIxNnB4XCIsW3QuU2l6ZS54eGxhcmdlXTpcIjE4cHhcIixbdC5TaXplLnh4eGxhcmdlXTpcIjIwcHhcIixbdC5TaXplLnh4eHhsYXJnZV06XCI0MHB4XCJ9LHQuRm9udFdlaWdodD17bm9ybWFsOjQwMCxib2xkOjYwMH0sdC5MaW5lSGVpZ2h0PXt1aToxLGhlYWRpbmc6MS4yLHRleHQ6MS41fSx0LlRyYW5zaXRpb249e2Jhc2U6XCIyMDBtcyBjdWJpYy1iZXppZXIoMC4xNiwgMSwgMC4zLCAxKVwiLG5vbmU6XCIwbXNcIn0sdC5JY29uU2V0PU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxpKSxsKSx0Lkljb25TaXplPXtbdC5TaXplLnhzbWFsbF06dC5Vbml0UHguc21hbGwsW3QuU2l6ZS5zbWFsbF06dC5Vbml0UHguYmFzZSxbdC5TaXplLmJhc2VdOlwiMTVweFwiLFt0LlNpemUubGFyZ2VdOnQuVW5pdFB4LnhsYXJnZSxbdC5TaXplLnhsYXJnZV06dC5Vbml0UHgueHhsYXJnZSxbdC5TaXplLnh4bGFyZ2VdOnQuVW5pdFB4Lnh4eGxhcmdlLFt0LlNpemUueHh4bGFyZ2VdOnQuVW5pdFB4Lnh4eHhsYXJnZX19LDkyNzI6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuY3JlYXRlRm9udEZhY2VDc3M9dm9pZCAwO2NvbnN0IHI9big3NTE4KSxvPW4oMzQ3MSk7dC5jcmVhdGVGb250RmFjZUNzcz1mdW5jdGlvbihlKXtyZXR1cm4gci5jc3NgXG4gICAgJHtlLnJlZ3VsYXImJnIuY3NzYFxuICAgICAgQGZvbnQtZmFjZSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnSW50ZXInO1xuICAgICAgICBzcmM6IHVybCgke2UucmVndWxhcn0pIGZvcm1hdCgnd29mZjInKTtcbiAgICAgICAgZm9udC13ZWlnaHQ6ICR7by5Gb250V2VpZ2h0Lm5vcm1hbH07XG4gICAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICAgICAgZm9udC1kaXNwbGF5OiBmYWxsYmFjaztcbiAgICAgIH1cbiAgICBgfVxuICAgICR7ZS5pdGFsaWMmJnIuY3NzYFxuICAgICAgQGZvbnQtZmFjZSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnSW50ZXInO1xuICAgICAgICBzcmM6IHVybCgke2UuaXRhbGljfSkgZm9ybWF0KCd3b2ZmMicpO1xuICAgICAgICBmb250LXdlaWdodDogJHtvLkZvbnRXZWlnaHQubm9ybWFsfTtcbiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgICAgICBmb250LWRpc3BsYXk6IGZhbGxiYWNrO1xuICAgICAgfVxuICAgIGB9XG4gICAgJHtlLnNlbWlCb2xkJiZyLmNzc2BcbiAgICAgIEBmb250LWZhY2Uge1xuICAgICAgICBmb250LWZhbWlseTogJ0ludGVyJztcbiAgICAgICAgc3JjOiB1cmwoJHtlLnNlbWlCb2xkfSkgZm9ybWF0KCd3b2ZmMicpO1xuICAgICAgICBmb250LXdlaWdodDogJHtvLkZvbnRXZWlnaHQuYm9sZH07XG4gICAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICAgICAgZm9udC1kaXNwbGF5OiBmYWxsYmFjaztcbiAgICAgIH1cbiAgICBgfVxuICAgICR7ZS5zZW1pQm9sZEl0YWxpYyYmci5jc3NgXG4gICAgICBAZm9udC1mYWNlIHtcbiAgICAgICAgZm9udC1mYW1pbHk6ICdJbnRlcic7XG4gICAgICAgIHNyYzogdXJsKCR7ZS5zZW1pQm9sZEl0YWxpY30pIGZvcm1hdCgnd29mZjInKTtcbiAgICAgICAgZm9udC13ZWlnaHQ6ICR7by5Gb250V2VpZ2h0LmJvbGR9O1xuICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgICAgIGZvbnQtZGlzcGxheTogZmFsbGJhY2s7XG4gICAgICB9XG4gICAgYH1cbiAgYH19LDY3MTQ6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuY3JlYXRlVGhlbWU9dm9pZCAwO2NvbnN0IHI9bigzNDcxKSxvPW4oOTk4NCksYT1uKDU0NTkpLGk9e2ZvbnRGYW1pbHk6ci5Gb250RmFtaWx5LGZvbnRTaXplOnIuRm9udFNpemUsZm9udFdlaWdodDpyLkZvbnRXZWlnaHQsbGluZUhlaWdodDpyLkxpbmVIZWlnaHQsaWNvblNpemU6ci5JY29uU2l6ZSxyYWRpdXM6ci5SYWRpdXMsc2hhZG93OnIuU2hhZG93LHRyYW5zaXRpb246ci5UcmFuc2l0aW9uLHVuaXQ6ci5Vbml0LHB4OnIuVW5pdFB4fSxsPShlLHQpPT4oe1tgJHtlfUFjdGl2ZWBdOigwLG8uZGFya2VuQ29sb3IpKHQsMiksW2Ake2V9SG92ZXJgXTooMCxvLmxpZ2h0ZW5Db2xvcikodCw1KSxbYCR7ZX1Gb2N1c2VkYF06KDAsby5nZXRNb3N0UmVhZGFibGUpKHQsW3IuQ29sb3Iud2hpdGUsci5Db2xvci5kYXJrR3JheTVdKSxbYCR7ZX1UZXh0YF06KDAsby5nZXRNb3N0UmVhZGFibGUpKHQsW3IuQ29sb3Iud2hpdGUsci5Db2xvci5kYXJrR3JheTVdKX0pO3QuY3JlYXRlVGhlbWU9ZT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkpLHtwYWxldHRlOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLGwoYS5QYWxldHRlLmJyYW5kUHJpbWFyeSxlLmJyYW5kUHJpbWFyeSkpLGwoYS5QYWxldHRlLmJyYW5kU2Vjb25kYXJ5LGUuYnJhbmRTZWNvbmRhcnkpKX0pfSw1NzU6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuU1VQUE9SVEVEX0xBTkdVQUdFUz10LmdldFN0YXR1c0NvbG9yPXQuZ2V0Um9vdENzc1ZhcnM9dC5nZXRWYXJpYW50Q1NTPXZvaWQgMDtjb25zdCByPW4oNTQ1OSk7dC5nZXRWYXJpYW50Q1NTPShlLHQpPT5uPT5lW3RdW25bdF1dLHQuZ2V0Um9vdENzc1ZhcnM9KHt0aGVtZTplfSk9Pk9iamVjdC5rZXlzKHIuUGFsZXR0ZSkubWFwKCh0PT5gLS1vcGVuZmluLXVpLSR7dH06ICR7ZS5wYWxldHRlW3RdfTtgKSkuam9pbihcIlxcblwiKSx0LmdldFN0YXR1c0NvbG9yPShlLHQsbik9Pntzd2l0Y2godCl7Y2FzZVwiYWN0aXZlXCI6cmV0dXJuIGUucGFsZXR0ZS5zdGF0dXNBY3RpdmU7Y2FzZVwiY3JpdGljYWxcIjpyZXR1cm4gZS5wYWxldHRlLnN0YXR1c0NyaXRpY2FsO2Nhc2VcIndhcm5pbmdcIjpyZXR1cm4gZS5wYWxldHRlLnN0YXR1c1dhcm5pbmc7Y2FzZVwic3VjY2Vzc1wiOnJldHVybiBlLnBhbGV0dGUuc3RhdHVzU3VjY2VzcztkZWZhdWx0OnJldHVybiBuP2UucGFsZXR0ZVtuXTpcImluaGVyaXRcIn19LHQuU1VQUE9SVEVEX0xBTkdVQUdFUz1bXCJlbi1VU1wiLFwiamEtSlBcIixcInpoLUNOXCIsXCJrby1LUlwiLFwicnUtUlVcIixcImRlLURFXCIsXCJ6aC1IYW50XCJdfSw5NjM4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig5OTg0KSx0KSxvKG4oMzQ3MSksdCksbyhuKDkyNzIpLHQpLG8obig2NzE0KSx0KSxvKG4oNTc1KSx0KSxvKG4oMTQ0MSksdCksbyhuKDg3MzIpLHQpLG8obig1NDU5KSx0KSxvKG4oNTMxNyksdCl9LDE0NDE6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0sODczMjooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5NaXhpbnM9dm9pZCAwO2NvbnN0IHI9bigzNDcxKSxvPW4oNzUxOCksYT1vLmNzc2BcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG5gLGk9by5jc3NgXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuYCxsPW8uY3NzYFxuICAmOjotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgd2lkdGg6IHZhcigtLXNjcm9sbGJhclNpemUsICR7ci5Vbml0UHgueHNtYWxsfSk7XG4gICAgaGVpZ2h0OiB2YXIoLS1zY3JvbGxiYXJTaXplLCAke3IuVW5pdFB4LnhzbWFsbH0pO1xuICB9XG5cbiAgJjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xuICAgIGJhY2tncm91bmQ6ICR7ci5Db2xvci5uZXV0cmFsR3JheTgwfTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1zY3JvbGxiYXJTaXplLCAke3IuVW5pdFB4LnhzbWFsbH0pO1xuICAgIG9wYWNpdHk6IDAuODtcbiAgfVxuXG4gICY6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgICBiYWNrZ3JvdW5kOiAke3IuQ29sb3Iud2hpdGU4MH07XG4gICAgd2lkdGg6IHZhcigtLXNjcm9sbGJhclNpemUsICR7ci5Vbml0UHgueHNtYWxsfSk7XG4gICAgaGVpZ2h0OiB2YXIoLS1zY3JvbGxiYXJTaXplLCAke3IuVW5pdFB4LnhzbWFsbH0pO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXNjcm9sbGJhclNpemUsICR7ci5Vbml0UHgueHNtYWxsfSk7XG4gICAgb3BhY2l0eTogMC44O1xuICB9XG5gLHM9by5jc3NgXG4gIC0tc2Nyb2xsYmFyU2l6ZTogMnB4O1xuICAke2x9O1xuYCxjPW8uY3NzYFxuICAtd2Via2l0LWFwcC1yZWdpb246IGRyYWc7XG5gLHU9by5jc3NgXG4gIC13ZWJraXQtYXBwLXJlZ2lvbjogbm8tZHJhZztcbmA7dC5NaXhpbnM9e25vU2VsZWN0OmEsdGV4dE92ZXJmbG93Omksc2Nyb2xsYmFyOntbci5TaXplLmJhc2VdOmwsW3IuU2l6ZS5zbWFsbF06c30sYXBwUmVnaW9uOntkcmFnOmMsbm9EcmFnOnV9fX0sNTQ1OTooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuUGFsZXR0ZT12b2lkIDAsdC5QYWxldHRlPXtiYWNrZ3JvdW5kMTpcImJhY2tncm91bmQxXCIsYmFja2dyb3VuZDI6XCJiYWNrZ3JvdW5kMlwiLGJhY2tncm91bmQzOlwiYmFja2dyb3VuZDNcIixiYWNrZ3JvdW5kNDpcImJhY2tncm91bmQ0XCIsYmFja2dyb3VuZDU6XCJiYWNrZ3JvdW5kNVwiLGJhY2tncm91bmQ2OlwiYmFja2dyb3VuZDZcIixicmFuZFByaW1hcnk6XCJicmFuZFByaW1hcnlcIixicmFuZFNlY29uZGFyeTpcImJyYW5kU2Vjb25kYXJ5XCIsYnJhbmRQcmltYXJ5QWN0aXZlOlwiYnJhbmRQcmltYXJ5QWN0aXZlXCIsYnJhbmRQcmltYXJ5SG92ZXI6XCJicmFuZFByaW1hcnlIb3ZlclwiLGJyYW5kUHJpbWFyeUZvY3VzZWQ6XCJicmFuZFByaW1hcnlGb2N1c2VkXCIsYnJhbmRQcmltYXJ5VGV4dDpcImJyYW5kUHJpbWFyeVRleHRcIixicmFuZFNlY29uZGFyeUFjdGl2ZTpcImJyYW5kU2Vjb25kYXJ5QWN0aXZlXCIsYnJhbmRTZWNvbmRhcnlIb3ZlcjpcImJyYW5kU2Vjb25kYXJ5SG92ZXJcIixicmFuZFNlY29uZGFyeUZvY3VzZWQ6XCJicmFuZFNlY29uZGFyeUZvY3VzZWRcIixicmFuZFNlY29uZGFyeVRleHQ6XCJicmFuZFNlY29uZGFyeVRleHRcIixpbnB1dEJhY2tncm91bmQ6XCJpbnB1dEJhY2tncm91bmRcIixpbnB1dENvbG9yOlwiaW5wdXRDb2xvclwiLGlucHV0UGxhY2Vob2xkZXI6XCJpbnB1dFBsYWNlaG9sZGVyXCIsaW5wdXREaXNhYmxlZDpcImlucHV0RGlzYWJsZWRcIixpbnB1dEZvY3VzZWQ6XCJpbnB1dEZvY3VzZWRcIixpbnB1dEJvcmRlcjpcImlucHV0Qm9yZGVyXCIsc3RhdHVzU3VjY2VzczpcInN0YXR1c1N1Y2Nlc3NcIixzdGF0dXNXYXJuaW5nOlwic3RhdHVzV2FybmluZ1wiLHN0YXR1c0NyaXRpY2FsOlwic3RhdHVzQ3JpdGljYWxcIixzdGF0dXNBY3RpdmU6XCJzdGF0dXNBY3RpdmVcIix0ZXh0RGVmYXVsdDpcInRleHREZWZhdWx0XCIsdGV4dEhlbHA6XCJ0ZXh0SGVscFwiLHRleHRJbmFjdGl2ZTpcInRleHRJbmFjdGl2ZVwiLGJvcmRlck5ldXRyYWw6XCJib3JkZXJOZXV0cmFsXCIsY29udGVudEJhY2tncm91bmQxOlwiY29udGVudEJhY2tncm91bmQxXCIsY29udGVudEJhY2tncm91bmQyOlwiY29udGVudEJhY2tncm91bmQyXCIsY29udGVudEJhY2tncm91bmQzOlwiY29udGVudEJhY2tncm91bmQzXCIsY29udGVudEJhY2tncm91bmQ0OlwiY29udGVudEJhY2tncm91bmQ0XCIsY29udGVudEJhY2tncm91bmQ1OlwiY29udGVudEJhY2tncm91bmQ1XCIsbGlua0RlZmF1bHQ6XCJsaW5rRGVmYXVsdFwiLGxpbmtIb3ZlcjpcImxpbmtIb3ZlclwifX0sNTMxNzooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSw0MjY2OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig5NDgzKSx0KX0sOTQ4MzooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5PcGVuRmluRGFya1RoZW1lPXQuT3BlbkZpbkxpZ2h0VGhlbWU9dm9pZCAwO2NvbnN0IHI9big1NDU5KSxvPW4oMzQ3MSksYT1uKDY3MTQpLGk9e1tyLlBhbGV0dGUuYnJhbmRQcmltYXJ5XTpvLkNvbG9yLm9wZW5GaW4sW3IuUGFsZXR0ZS5zdGF0dXNTdWNjZXNzXTpvLkNvbG9yLmZ1bmN0aW9uYWwxLFtyLlBhbGV0dGUuc3RhdHVzV2FybmluZ106by5Db2xvci5mdW5jdGlvbmFsMTAsW3IuUGFsZXR0ZS5zdGF0dXNDcml0aWNhbF06by5Db2xvci5mdW5jdGlvbmFsNyxbci5QYWxldHRlLnN0YXR1c0FjdGl2ZV06by5Db2xvci5mdW5jdGlvbmFsMyxbci5QYWxldHRlLmJvcmRlck5ldXRyYWxdOm8uQ29sb3Iuc2lsdmVyR3JheSxbci5QYWxldHRlLmNvbnRlbnRCYWNrZ3JvdW5kMV06by5Db2xvci5vcGVuRmluLFtyLlBhbGV0dGUuY29udGVudEJhY2tncm91bmQyXTpcIiMwMDAwMDBcIixbci5QYWxldHRlLmNvbnRlbnRCYWNrZ3JvdW5kM106XCIjMDAwMDAwXCIsW3IuUGFsZXR0ZS5jb250ZW50QmFja2dyb3VuZDRdOlwiIzAwMDAwMFwiLFtyLlBhbGV0dGUuY29udGVudEJhY2tncm91bmQ1XTpcIiMwMDAwMDBcIixbci5QYWxldHRlLmxpbmtEZWZhdWx0XTpvLkNvbG9yLmZ1bmN0aW9uYWw0LFtyLlBhbGV0dGUubGlua0hvdmVyXTpvLkNvbG9yLmZ1bmN0aW9uYWw1fTt0Lk9wZW5GaW5MaWdodFRoZW1lPSgwLGEuY3JlYXRlVGhlbWUpKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxpKSx7W3IuUGFsZXR0ZS5iYWNrZ3JvdW5kMV06by5Db2xvci53aGl0ZSxbci5QYWxldHRlLmJhY2tncm91bmQyXTpvLkNvbG9yLmxpZ2h0R3JheTEsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kM106by5Db2xvci5saWdodEdyYXkyLFtyLlBhbGV0dGUuYmFja2dyb3VuZDRdOm8uQ29sb3IubGlnaHRHcmF5Myxbci5QYWxldHRlLmJhY2tncm91bmQ1XTpvLkNvbG9yLmxpZ2h0R3JheTMsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kNl06by5Db2xvci5saWdodEdyYXk1LFtyLlBhbGV0dGUuYnJhbmRTZWNvbmRhcnldOm8uQ29sb3IubGlnaHRHcmF5NCxbci5QYWxldHRlLmlucHV0QmFja2dyb3VuZF06by5Db2xvci5saWdodEdyYXkzLFtyLlBhbGV0dGUuaW5wdXRDb2xvcl06by5Db2xvci5kYXJrR3JheTUsW3IuUGFsZXR0ZS5pbnB1dFBsYWNlaG9sZGVyXTpvLkNvbG9yLmRhcmtHcmF5Mixbci5QYWxldHRlLmlucHV0RGlzYWJsZWRdOm8uQ29sb3IubmV1dHJhbEdyYXksW3IuUGFsZXR0ZS5pbnB1dEZvY3VzZWRdOm8uQ29sb3IubGlnaHRHcmF5NSxbci5QYWxldHRlLmlucHV0Qm9yZGVyXTpvLkNvbG9yLm5ldXRyYWxHcmF5LFtyLlBhbGV0dGUudGV4dERlZmF1bHRdOm8uQ29sb3IuZGFya0dyYXk1LFtyLlBhbGV0dGUudGV4dEhlbHBdOm8uQ29sb3IubmV1dHJhbEdyYXksW3IuUGFsZXR0ZS50ZXh0SW5hY3RpdmVdOm8uQ29sb3IubmV1dHJhbEdyYXl9KSksdC5PcGVuRmluRGFya1RoZW1lPSgwLGEuY3JlYXRlVGhlbWUpKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxpKSx7W3IuUGFsZXR0ZS5iYWNrZ3JvdW5kMV06by5Db2xvci5kYXJrR3JheTYsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kMl06by5Db2xvci5kYXJrR3JheTUsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kM106by5Db2xvci5kYXJrR3JheTQsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kNF06by5Db2xvci5kYXJrR3JheTMsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kNV06by5Db2xvci5kYXJrR3JheTIsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kNl06by5Db2xvci5kYXJrR3JheTEsW3IuUGFsZXR0ZS5icmFuZFNlY29uZGFyeV06by5Db2xvci5kYXJrR3JheTIsW3IuUGFsZXR0ZS5pbnB1dEJhY2tncm91bmRdOm8uQ29sb3IuZGFya0dyYXkxLFtyLlBhbGV0dGUuaW5wdXRDb2xvcl06by5Db2xvci53aGl0ZSxbci5QYWxldHRlLmlucHV0UGxhY2Vob2xkZXJdOm8uQ29sb3IubGlnaHRHcmF5NSxbci5QYWxldHRlLmlucHV0RGlzYWJsZWRdOm8uQ29sb3IubmV1dHJhbEdyYXksW3IuUGFsZXR0ZS5pbnB1dEZvY3VzZWRdOm8uQ29sb3IubGlnaHRHcmF5NSxbci5QYWxldHRlLmlucHV0Qm9yZGVyXTpvLkNvbG9yLm5ldXRyYWxHcmF5LFtyLlBhbGV0dGUudGV4dERlZmF1bHRdOm8uQ29sb3Iud2hpdGUsW3IuUGFsZXR0ZS50ZXh0SGVscF06by5Db2xvci5saWdodEdyYXk1LFtyLlBhbGV0dGUudGV4dEluYWN0aXZlXTpvLkNvbG9yLm5ldXRyYWxHcmF5fSkpfSw0MjA6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuVGhlbWVQcm92aWRlcj12b2lkIDA7Y29uc3Qgcj1uKDU4OTMpLG89big3NTE4KSxhPW4oMzE5MCksaT1uKDcwODgpLGw9bigxMDY5KSxzPW4oNjIxOCk7dC5UaGVtZVByb3ZpZGVyPSh7Y2hpbGRyZW46ZSx0aGVtZXM6dCxzY2hlbWU6bj1hLkNvbG9yU2NoZW1lLnN5c3RlbSxmb250czpjPXMuRm9udHN9KT0+e2NvbnN0IHU9KDAsaS51c2VUaGVtZSkoe3RoZW1lczp0LHNjaGVtZTpufSk7cmV0dXJuKDAsci5qc3gpKG8uVGhlbWVQcm92aWRlcixPYmplY3QuYXNzaWduKHt0aGVtZTp1fSx7Y2hpbGRyZW46KDAsci5qc3hzKShyLkZyYWdtZW50LHtjaGlsZHJlbjpbKDAsci5qc3gpKGwuR2xvYmFsU3R5bGVzLHtmb250czpjfSksZV19KX0pKX19LDM4Nzc6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDEwNjkpLHQpLG8obigxMzEwKSx0KSxvKG4oOTUwNyksdCl9LDk3NTg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ29udGFjdFN0YXR1c0ljb249dm9pZCAwO2NvbnN0IG89big1ODkzKSxhPXIobig3NTE4KSksaT1uKDEzMzMpLGw9e2F2YWlsYWJsZTooMCxvLmpzeCkoaS5DaGVja1NWRyx7fSksYXdheTooMCxvLmpzeCkoaS5CdXN5U1ZHLHt9KSxcImRvLW5vdC1kaXN0dXJiXCI6KDAsby5qc3gpKGkuRG9Ob3REaXN0dXJiU1ZHLHt9KSxvZmZsaW5lOigwLG8uanN4KShpLk9mZmxpbmVTVkcse30pLGJ1c3k6bnVsbH07dC5Db250YWN0U3RhdHVzSWNvbj0oe29ubGluZVN0YXR1czplfSk9PmU/KDAsby5qc3gpKHMsT2JqZWN0LmFzc2lnbih7b25saW5lU3RhdHVzOmV9LHtjaGlsZHJlbjpsW2VdfHxudWxsfSkpOm51bGw7Y29uc3Qgcz1hLmRlZmF1bHQuZGl2YFxuICBib3JkZXI6IDEuNnB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kMX07XG5cbiAgYmFja2dyb3VuZDogJHsoe29ubGluZVN0YXR1czplfSk9PlwiYnVzeVwiPT09ZT9cIiNDMjEzMTNcIjpcIndoaXRlXCJ9O1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG5cbiAgaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmxhcmdlfTtcbiAgd2lkdGg6ICR7KHt0aGVtZTplfSk9PmUucHgubGFyZ2V9O1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogNzguOTUlO1xuICByaWdodDogLTcuMDIlO1xuICB0b3A6IDc3LjEyJTtcbiAgYm90dG9tOiAtNC4yNCU7XG5gfSwxMzMzOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lk9mZmxpbmVTVkc9dC5Eb05vdERpc3R1cmJTVkc9dC5CdXN5U1ZHPXQuQ2hlY2tTVkc9dm9pZCAwO2NvbnN0IHI9big1ODkzKTt0LkNoZWNrU1ZHPSgpPT4oMCxyLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTZcIix2aWV3Qm94OlwiMCAwIDE2IDE2XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LHtjaGlsZHJlbjooMCxyLmpzeCkoXCJwYXRoXCIse2Q6XCJNOCAwQzguNzM0MzggMCA5LjQ0MDEgMC4wOTYzNTQyIDEwLjExNzIgMC4yODkwNjNDMTAuNzk0MyAwLjQ4MTc3MSAxMS40Mjk3IDAuNzUyNjA0IDEyLjAyMzQgMS4xMDE1NkMxMi42MTcyIDEuNDUwNTIgMTMuMTU2MyAxLjg2OTc5IDEzLjY0MDYgMi4zNTkzOEMxNC4xMzAyIDIuODQzNzUgMTQuNTQ5NSAzLjM4MjgxIDE0Ljg5ODQgMy45NzY1NkMxNS4yNDc0IDQuNTcwMzEgMTUuNTE4MiA1LjIwNTczIDE1LjcxMDkgNS44ODI4MUMxNS45MDM2IDYuNTU5OSAxNiA3LjI2NTYzIDE2IDhDMTYgOC43MjkxNyAxNS45MDM2IDkuNDM0OSAxNS43MTA5IDEwLjExNzJDMTUuNTE4MiAxMC43OTQzIDE1LjI0NzQgMTEuNDI5NyAxNC44OTg0IDEyLjAyMzRDMTQuNTQ5NSAxMi42MTcyIDE0LjEzMDIgMTMuMTU4OSAxMy42NDA2IDEzLjY0ODRDMTMuMTU2MyAxNC4xMzI4IDEyLjYxNzIgMTQuNTQ5NSAxMi4wMjM0IDE0Ljg5ODRDMTEuNDI5NyAxNS4yNDc0IDEwLjc5MTcgMTUuNTE4MiAxMC4xMDk0IDE1LjcxMDlDOS40MzIyOSAxNS45MDM2IDguNzI5MTcgMTYgOCAxNkM3LjI3MDgzIDE2IDYuNTY1MSAxNS45MDM2IDUuODgyODEgMTUuNzEwOUM1LjIwNTczIDE1LjUxODIgNC41NzAzMSAxNS4yNDc0IDMuOTc2NTYgMTQuODk4NEMzLjM4MjgxIDE0LjU0OTUgMi44NDExNSAxNC4xMzI4IDIuMzUxNTYgMTMuNjQ4NEMxLjg2NzE5IDEzLjE1ODkgMS40NTA1MiAxMi42MTcyIDEuMTAxNTYgMTIuMDIzNEMwLjc1MjYwNCAxMS40Mjk3IDAuNDgxNzcxIDEwLjc5NDMgMC4yODkwNjMgMTAuMTE3MkMwLjA5NjM1NDIgOS40MzQ5IDAgOC43MjkxNyAwIDhDMCA3LjI3MDgzIDAuMDk2MzU0MiA2LjU2NzcxIDAuMjg5MDYzIDUuODkwNjNDMC40ODE3NzEgNS4yMDgzMyAwLjc1MjYwNCA0LjU3MDMxIDEuMTAxNTYgMy45NzY1NkMxLjQ1MDUyIDMuMzgyODEgMS44NjcxOSAyLjg0Mzc1IDIuMzUxNTYgMi4zNTkzOEMyLjg0MTE1IDEuODY5NzkgMy4zODI4MSAxLjQ1MDUyIDMuOTc2NTYgMS4xMDE1NkM0LjU3MDMxIDAuNzUyNjA0IDUuMjA1NzMgMC40ODE3NzEgNS44ODI4MSAwLjI4OTA2M0M2LjU2NTEgMC4wOTYzNTQyIDcuMjcwODMgMCA4IDBaTTEwLjYzMjggNS42ODc1QzEwLjQyNDUgNS42ODc1IDEwLjI0NzQgNS43NjA0MiAxMC4xMDE2IDUuOTA2MjVMNy4yNzM0NCA4Ljc1TDYuMjY1NjMgNy43NUM2LjExOTc5IDcuNjA0MTcgNS45NDUzMSA3LjUzMTI1IDUuNzQyMTkgNy41MzEyNUM1LjY0MzIzIDcuNTMxMjUgNS41NDk0OCA3LjU1MjA4IDUuNDYwOTQgNy41OTM3NUM1LjM3MjQgNy42MzU0MiA1LjI5MTY3IDcuNjkyNzEgNS4yMTg3NSA3Ljc2NTYzQzUuMTUxMDQgNy44MzMzMyA1LjA5NjM1IDcuOTExNDYgNS4wNTQ2OSA4QzUuMDEzMDIgOC4wODg1NCA0Ljk5MjE5IDguMTgyMjkgNC45OTIxOSA4LjI4MTI1QzQuOTkyMTkgOC40ODk1OCA1LjA2NTEgOC42NjY2NyA1LjIxMDk0IDguODEyNUw2Ljc0MjE5IDEwLjM0MzhDNi44ODgwMiAxMC40ODk2IDcuMDY1MSAxMC41NjI1IDcuMjczNDQgMTAuNTYyNUM3LjQ4MTc3IDEwLjU2MjUgNy42NTg4NSAxMC40ODk2IDcuODA0NjkgMTAuMzQzOEwxMS4xNjQxIDYuOTY4NzVDMTEuMzA5OSA2LjgyMjkyIDExLjM4MjggNi42NDU4MyAxMS4zODI4IDYuNDM3NUMxMS4zODI4IDYuMzM4NTQgMTEuMzYyIDYuMjQ0NzkgMTEuMzIwMyA2LjE1NjI1QzExLjI3ODYgNi4wNjc3MSAxMS4yMjE0IDUuOTg5NTggMTEuMTQ4NCA1LjkyMTg4QzExLjA4MDcgNS44NDg5NiAxMS4wMDI2IDUuNzkxNjcgMTAuOTE0MSA1Ljc1QzEwLjgyNTUgNS43MDgzMyAxMC43MzE4IDUuNjg3NSAxMC42MzI4IDUuNjg3NVpcIixmaWxsOlwiIzIwNzczNVwifSl9KSksdC5CdXN5U1ZHPSgpPT4oMCxyLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTdcIix2aWV3Qm94OlwiMCAwIDE2IDE3XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LHtjaGlsZHJlbjooMCxyLmpzeCkoXCJwYXRoXCIse2Q6XCJNOCAwLjc5MDIzN0M4LjczNDM4IDAuNzkwMjM3IDkuNDQwMSAwLjg4NjU5MiAxMC4xMTcyIDEuMDc5M0MxMC43OTQzIDEuMjcyMDEgMTEuNDI5NyAxLjU0Mjg0IDEyLjAyMzQgMS44OTE4QzEyLjYxNzIgMi4yNDA3NiAxMy4xNTYzIDIuNjYwMDMgMTMuNjQwNiAzLjE0OTYxQzE0LjEzMDIgMy42MzM5OSAxNC41NDk1IDQuMTczMDUgMTQuODk4NCA0Ljc2NjhDMTUuMjQ3NCA1LjM2MDU1IDE1LjUxODIgNS45OTU5NyAxNS43MTA5IDYuNjczMDVDMTUuOTAzNiA3LjM1MDEzIDE2IDguMDU1ODYgMTYgOC43OTAyNEMxNiA5LjUxOTQgMTUuOTAzNiAxMC4yMjUxIDE1LjcxMDkgMTAuOTA3NEMxNS41MTgyIDExLjU4NDUgMTUuMjQ3NCAxMi4yMTk5IDE0Ljg5ODQgMTIuODEzN0MxNC41NDk1IDEzLjQwNzQgMTQuMTMwMiAxMy45NDkxIDEzLjY0MDYgMTQuNDM4N0MxMy4xNTYzIDE0LjkyMzEgMTIuNjE3MiAxNS4zMzk3IDEyLjAyMzQgMTUuNjg4N0MxMS40Mjk3IDE2LjAzNzYgMTAuNzkxNyAxNi4zMDg1IDEwLjEwOTQgMTYuNTAxMkM5LjQzMjI5IDE2LjY5MzkgOC43MjkxNyAxNi43OTAyIDggMTYuNzkwMkM3LjI3MDgzIDE2Ljc5MDIgNi41NjUxIDE2LjY5MzkgNS44ODI4MSAxNi41MDEyQzUuMjA1NzMgMTYuMzA4NSA0LjU3MDMxIDE2LjAzNzYgMy45NzY1NiAxNS42ODg3QzMuMzgyODEgMTUuMzM5NyAyLjg0MTE1IDE0LjkyMzEgMi4zNTE1NiAxNC40Mzg3QzEuODY3MTkgMTMuOTQ5MSAxLjQ1MDUyIDEzLjQwNzQgMS4xMDE1NiAxMi44MTM3QzAuNzUyNjA0IDEyLjIxOTkgMC40ODE3NzEgMTEuNTg0NSAwLjI4OTA2MyAxMC45MDc0QzAuMDk2MzU0MiAxMC4yMjUxIDAgOS41MTk0IDAgOC43OTAyNEMwIDguMDYxMDcgMC4wOTYzNTQyIDcuMzU3OTUgMC4yODkwNjMgNi42ODA4NkMwLjQ4MTc3MSA1Ljk5ODU3IDAuNzUyNjA0IDUuMzYwNTUgMS4xMDE1NiA0Ljc2NjhDMS40NTA1MiA0LjE3MzA1IDEuODY3MTkgMy42MzM5OSAyLjM1MTU2IDMuMTQ5NjFDMi44NDExNSAyLjY2MDAzIDMuMzgyODEgMi4yNDA3NiAzLjk3NjU2IDEuODkxOEM0LjU3MDMxIDEuNTQyODQgNS4yMDU3MyAxLjI3MjAxIDUuODgyODEgMS4wNzkzQzYuNTY1MSAwLjg4NjU5MiA3LjI3MDgzIDAuNzkwMjM3IDggMC43OTAyMzdaTTcuMzIwMzEgNC4wNDgwNUM3LjIxMDk0IDQuMDQ4MDUgNy4xMDY3NyA0LjA3MTQ5IDcuMDA3ODEgNC4xMTgzNkM2LjkxNDA2IDQuMTYwMDMgNi44MjgxMyA0LjIxOTkyIDYuNzUgNC4yOTgwNUM2LjY3NzA4IDQuMzcwOTcgNi42MTcxOSA0LjQ1NjkgNi41NzAzMSA0LjU1NTg2QzYuNTI4NjUgNC42NDk2MSA2LjUwNzgxIDQuNzUxMTcgNi41MDc4MSA0Ljg2MDU1VjkuMTk2NDlDNi41MDc4MSA5LjMwNTg2IDYuNTI4NjUgOS40MTI2MyA2LjU3MDMxIDkuNTE2OEM2LjYxMTk4IDkuNjIwOTcgNi42NzE4OCA5LjcxMjExIDYuNzUgOS43OTAyNEw5LjE4NzUgMTIuMjEyMUM5LjM0ODk2IDEyLjM3MzYgOS41NDE2NyAxMi40NTQzIDkuNzY1NjMgMTIuNDU0M0M5Ljg3NSAxMi40NTQzIDkuOTc5MTcgMTIuNDMzNSAxMC4wNzgxIDEyLjM5MThDMTAuMTc3MSAxMi4zNDQ5IDEwLjI2MyAxMi4yODUgMTAuMzM1OSAxMi4yMTIxQzEwLjQwODkgMTIuMTM0IDEwLjQ2NjEgMTIuMDQ1NCAxMC41MDc4IDExLjk0NjVDMTAuNTU0NyAxMS44NDc1IDEwLjU3ODEgMTEuNzQzNCAxMC41NzgxIDExLjYzNEMxMC41NzgxIDExLjUyOTggMTAuNTU0NyAxMS40MjgzIDEwLjUwNzggMTEuMzI5M0MxMC40NjYxIDExLjIyNTEgMTAuNDA4OSAxMS4xMzY2IDEwLjMzNTkgMTEuMDYzN0w4LjEzMjgxIDguODc2MThWNC44NjA1NUM4LjEzMjgxIDQuNzUxMTcgOC4xMDkzOCA0LjY0NzAxIDguMDYyNSA0LjU0ODA1QzguMDIwODMgNC40NDkwOSA3Ljk2MzU0IDQuMzYzMTUgNy44OTA2MyA0LjI5MDI0QzcuODE3NzEgNC4yMTczMiA3LjczMTc3IDQuMTYwMDMgNy42MzI4MSA0LjExODM2QzcuNTMzODUgNC4wNzE0OSA3LjQyOTY5IDQuMDQ4MDUgNy4zMjAzMSA0LjA0ODA1WlwiLGZpbGw6XCIjRkU5RjREXCJ9KX0pKSx0LkRvTm90RGlzdHVyYlNWRz0oKT0+KDAsci5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNlwiLGhlaWdodDpcIjE3XCIsdmlld0JveDpcIjAgMCAxNiAxN1wiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSx7Y2hpbGRyZW46KDAsci5qc3gpKFwicGF0aFwiLHtkOlwiTTggMC41OTAyNTZDOC43MzQzOCAwLjU5MDI1NiA5LjQ0MDEgMC42ODY2MSAxMC4xMTcyIDAuODc5MzE4QzEwLjc5NDMgMS4wNzIwMyAxMS40Mjk3IDEuMzQyODYgMTIuMDIzNCAxLjY5MTgyQzEyLjYxNzIgMi4wNDA3OCAxMy4xNTYyIDIuNDYwMDUgMTMuNjQwNiAyLjk0OTYzQzE0LjEzMDIgMy40MzQwMSAxNC41NDk1IDMuOTczMDcgMTQuODk4NCA0LjU2NjgyQzE1LjI0NzQgNS4xNjA1NyAxNS41MTgyIDUuNzk1OTggMTUuNzEwOSA2LjQ3MzA3QzE1LjkwMzYgNy4xNTAxNSAxNiA3Ljg1NTg4IDE2IDguNTkwMjZDMTYgOS4zMTk0MiAxNS45MDM2IDEwLjAyNTIgMTUuNzEwOSAxMC43MDc0QzE1LjUxODIgMTEuMzg0NSAxNS4yNDc0IDEyLjAxOTkgMTQuODk4NCAxMi42MTM3QzE0LjU0OTUgMTMuMjA3NCAxNC4xMzAyIDEzLjc0OTEgMTMuNjQwNiAxNC4yMzg3QzEzLjE1NjIgMTQuNzIzMSAxMi42MTcyIDE1LjEzOTcgMTIuMDIzNCAxNS40ODg3QzExLjQyOTcgMTUuODM3NyAxMC43OTE3IDE2LjEwODUgMTAuMTA5NCAxNi4zMDEyQzkuNDMyMjkgMTYuNDkzOSA4LjcyOTE3IDE2LjU5MDMgOCAxNi41OTAzQzcuMjcwODMgMTYuNTkwMyA2LjU2NTEgMTYuNDkzOSA1Ljg4MjgxIDE2LjMwMTJDNS4yMDU3MyAxNi4xMDg1IDQuNTcwMzEgMTUuODM3NyAzLjk3NjU2IDE1LjQ4ODdDMy4zODI4MSAxNS4xMzk3IDIuODQxMTUgMTQuNzIzMSAyLjM1MTU2IDE0LjIzODdDMS44NjcxOSAxMy43NDkxIDEuNDUwNTIgMTMuMjA3NCAxLjEwMTU2IDEyLjYxMzdDMC43NTI2MDQgMTIuMDE5OSAwLjQ4MTc3MSAxMS4zODQ1IDAuMjg5MDYyIDEwLjcwNzRDMC4wOTYzNTQyIDEwLjAyNTIgMCA5LjMxOTQyIDAgOC41OTAyNkMwIDcuODYxMDkgMC4wOTYzNTQyIDcuMTU3OTYgMC4yODkwNjIgNi40ODA4OEMwLjQ4MTc3MSA1Ljc5ODU5IDAuNzUyNjA0IDUuMTYwNTcgMS4xMDE1NiA0LjU2NjgyQzEuNDUwNTIgMy45NzMwNyAxLjg2NzE5IDMuNDM0MDEgMi4zNTE1NiAyLjk0OTYzQzIuODQxMTUgMi40NjAwNSAzLjM4MjgxIDIuMDQwNzggMy45NzY1NiAxLjY5MTgyQzQuNTcwMzEgMS4zNDI4NiA1LjIwNTczIDEuMDcyMDMgNS44ODI4MSAwLjg3OTMxOEM2LjU2NTEgMC42ODY2MSA3LjI3MDgzIDAuNTkwMjU2IDggMC41OTAyNTZaTTUuNDc2NTYgNy43NDY1MUM1LjM2NzE5IDcuNzQ2NTEgNS4yNjA0MiA3Ljc2OTk0IDUuMTU2MjUgNy44MTY4MkM1LjA1NzI5IDcuODYzNjkgNC45Njg3NSA3LjkyNjE5IDQuODkwNjIgOC4wMDQzMkM0LjgxMjUgOC4wODI0NCA0Ljc1IDguMTczNTkgNC43MDMxMiA4LjI3Nzc2QzQuNjU2MjUgOC4zNzY3MSA0LjYzMjgxIDguNDgwODggNC42MzI4MSA4LjU5MDI2QzQuNjMyODEgOC42OTk2MyA0LjY1NjI1IDguODA2NCA0LjcwMzEyIDguOTEwNTdDNC43NSA5LjAwOTUzIDQuODEyNSA5LjA5ODA3IDQuODkwNjIgOS4xNzYxOUM0Ljk2ODc1IDkuMjU0MzIgNS4wNTcyOSA5LjMxNjgyIDUuMTU2MjUgOS4zNjM2OUM1LjI2MDQyIDkuNDEwNTcgNS4zNjcxOSA5LjQzNDAxIDUuNDc2NTYgOS40MzQwMUgxMC41MjM0QzEwLjYzMjggOS40MzQwMSAxMC43MzcgOS40MTA1NyAxMC44MzU5IDkuMzYzNjlDMTAuOTQwMSA5LjMxNjgyIDExLjAzMTIgOS4yNTQzMiAxMS4xMDk0IDkuMTc2MTlDMTEuMTg3NSA5LjA5ODA3IDExLjI1IDkuMDA5NTMgMTEuMjk2OSA4LjkxMDU3QzExLjM0MzggOC44MDY0IDExLjM2NzIgOC42OTk2MyAxMS4zNjcyIDguNTkwMjZDMTEuMzY3MiA4LjQ4MDg4IDExLjM0MzggOC4zNzY3MSAxMS4yOTY5IDguMjc3NzZDMTEuMjUgOC4xNzM1OSAxMS4xODc1IDguMDgyNDQgMTEuMTA5NCA4LjAwNDMyQzExLjAzMTIgNy45MjYxOSAxMC45NDAxIDcuODYzNjkgMTAuODM1OSA3LjgxNjgyQzEwLjczNyA3Ljc2OTk0IDEwLjYzMjggNy43NDY1MSAxMC41MjM0IDcuNzQ2NTFINS40NzY1NlpcIixmaWxsOlwiI0MyMTMxM1wifSl9KSksdC5PZmZsaW5lU1ZHPSgpPT4oMCxyLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTdcIix2aWV3Qm94OlwiMCAwIDE2IDE3XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LHtjaGlsZHJlbjooMCxyLmpzeCkoXCJwYXRoXCIse2Q6XCJNOCAwLjk5MDI1MkM4LjczNDM4IDAuOTkwMjUyIDkuNDQwMSAxLjA4NjYxIDEwLjExNzIgMS4yNzkzMUMxMC43OTQzIDEuNDcyMDIgMTEuNDI5NyAxLjc0Mjg2IDEyLjAyMzQgMi4wOTE4MUMxMi42MTcyIDIuNDQwNzcgMTMuMTU2MiAyLjg2MDA0IDEzLjY0MDYgMy4zNDk2M0MxNC4xMzAyIDMuODM0IDE0LjU0OTUgNC4zNzMwNiAxNC44OTg0IDQuOTY2ODFDMTUuMjQ3NCA1LjU2MDU2IDE1LjUxODIgNi4xOTU5OCAxNS43MTA5IDYuODczMDZDMTUuOTAzNiA3LjU1MDE1IDE2IDguMjU1ODggMTYgOC45OTAyNUMxNiA5LjcxOTQyIDE1LjkwMzYgMTAuNDI1MSAxNS43MTA5IDExLjEwNzRDMTUuNTE4MiAxMS43ODQ1IDE1LjI0NzQgMTIuNDE5OSAxNC44OTg0IDEzLjAxMzdDMTQuNTQ5NSAxMy42MDc0IDE0LjEzMDIgMTQuMTQ5MSAxMy42NDA2IDE0LjYzODdDMTMuMTU2MiAxNS4xMjMxIDEyLjYxNzIgMTUuNTM5NyAxMi4wMjM0IDE1Ljg4ODdDMTEuNDI5NyAxNi4yMzc2IDEwLjc5MTcgMTYuNTA4NSAxMC4xMDk0IDE2LjcwMTJDOS40MzIyOSAxNi44OTM5IDguNzI5MTcgMTYuOTkwMyA4IDE2Ljk5MDNDNy4yNzA4MyAxNi45OTAzIDYuNTY1MSAxNi44OTM5IDUuODgyODEgMTYuNzAxMkM1LjIwNTczIDE2LjUwODUgNC41NzAzMSAxNi4yMzc2IDMuOTc2NTYgMTUuODg4N0MzLjM4MjgxIDE1LjUzOTcgMi44NDExNSAxNS4xMjMxIDIuMzUxNTYgMTQuNjM4N0MxLjg2NzE5IDE0LjE0OTEgMS40NTA1MiAxMy42MDc0IDEuMTAxNTYgMTMuMDEzN0MwLjc1MjYwNCAxMi40MTk5IDAuNDgxNzcxIDExLjc4NDUgMC4yODkwNjIgMTEuMTA3NEMwLjA5NjM1NDIgMTAuNDI1MSAwIDkuNzE5NDIgMCA4Ljk5MDI1QzAgOC4yNjEwOSAwLjA5NjM1NDIgNy41NTc5NiAwLjI4OTA2MiA2Ljg4MDg4QzAuNDgxNzcxIDYuMTk4NTkgMC43NTI2MDQgNS41NjA1NiAxLjEwMTU2IDQuOTY2ODFDMS40NTA1MiA0LjM3MzA2IDEuODY3MTkgMy44MzQgMi4zNTE1NiAzLjM0OTYzQzIuODQxMTUgMi44NjAwNCAzLjM4MjgxIDIuNDQwNzcgMy45NzY1NiAyLjA5MTgxQzQuNTcwMzEgMS43NDI4NiA1LjIwNTczIDEuNDcyMDIgNS44ODI4MSAxLjI3OTMxQzYuNTY1MSAxLjA4NjYxIDcuMjcwODMgMC45OTAyNTIgOCAwLjk5MDI1MlpNOCAyLjY3Nzc1QzcuNDIxODggMi42Nzc3NSA2Ljg2NDU4IDIuNzUzMjcgNi4zMjgxMiAyLjkwNDMxQzUuNzkxNjcgMy4wNTUzNiA1LjI4OTA2IDMuMjY4OSA0LjgyMDMxIDMuNTQ0OTRDNC4zNTE1NiAzLjgyMDk4IDMuOTI0NDggNC4xNTE3MSAzLjUzOTA2IDQuNTM3MTNDMy4xNTg4NSA0LjkxNzM0IDIuODMwNzMgNS4zNDE4MSAyLjU1NDY5IDUuODEwNTZDMi4yNzg2NSA2LjI3OTMxIDIuMDY1MSA2Ljc4MTkyIDEuOTE0MDYgNy4zMTgzOEMxLjc2MzAyIDcuODU0ODQgMS42ODc1IDguNDEyMTMgMS42ODc1IDguOTkwMjVDMS42ODc1IDkuNTY4MzggMS43NjMwMiAxMC4xMjU3IDEuOTE0MDYgMTAuNjYyMUMyLjA2NTEgMTEuMTk4NiAyLjI3ODY1IDExLjcwMTIgMi41NTQ2OSAxMi4xNjk5QzIuODMwNzMgMTIuNjM4NyAzLjE1ODg1IDEzLjA2NTggMy41MzkwNiAxMy40NTEyQzMuOTI0NDggMTMuODMxNCA0LjM1MTU2IDE0LjE1OTUgNC44MjAzMSAxNC40MzU2QzUuMjg5MDYgMTQuNzExNiA1Ljc5MTY3IDE0LjkyNTEgNi4zMjgxMiAxNS4wNzYyQzYuODY0NTggMTUuMjI3MiA3LjQyMTg4IDE1LjMwMjggOCAxNS4zMDI4QzguNTc4MTIgMTUuMzAyOCA5LjEzNTQyIDE1LjIyNzIgOS42NzE4OCAxNS4wNzYyQzEwLjIwODMgMTQuOTI1MSAxMC43MTA5IDE0LjcxMTYgMTEuMTc5NyAxNC40MzU2QzExLjY0ODQgMTQuMTU5NSAxMi4wNzI5IDEzLjgzMTQgMTIuNDUzMSAxMy40NTEyQzEyLjgzODUgMTMuMDY1OCAxMy4xNjkzIDEyLjYzODcgMTMuNDQ1MyAxMi4xNjk5QzEzLjcyMTQgMTEuNzAxMiAxMy45MzQ5IDExLjE5ODYgMTQuMDg1OSAxMC42NjIxQzE0LjIzNyAxMC4xMjU3IDE0LjMxMjUgOS41NjgzOCAxNC4zMTI1IDguOTkwMjVDMTQuMzEyNSA4LjQxMjEzIDE0LjIzNyA3Ljg1NDg0IDE0LjA4NTkgNy4zMTgzOEMxMy45MzQ5IDYuNzgxOTIgMTMuNzIxNCA2LjI3OTMxIDEzLjQ0NTMgNS44MTA1NkMxMy4xNjkzIDUuMzQxODEgMTIuODM4NSA0LjkxNzM0IDEyLjQ1MzEgNC41MzcxM0MxMi4wNzI5IDQuMTUxNzEgMTEuNjQ4NCAzLjgyMDk4IDExLjE3OTcgMy41NDQ5NEMxMC43MTA5IDMuMjY4OSAxMC4yMDgzIDMuMDU1MzYgOS42NzE4OCAyLjkwNDMxQzkuMTM1NDIgMi43NTMyNyA4LjU3ODEyIDIuNjc3NzUgOCAyLjY3Nzc1WlwiLGZpbGw6XCIjOTc5Nzk3XCJ9KX0pKX0sMzQyOTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnR9KX06ZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dH0pLGE9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiIT09biYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnIodCxlLG4pO3JldHVybiBvKHQsZSksdH0saT10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxsPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ29udGFjdENhcmQ9dm9pZCAwO2NvbnN0IHM9big1ODkzKSxjPWEobig2Njg5KSksdT1sKG4oNzUxOCkpLGQ9big1Mzc3KSxwPW4oNzQ0NCksZj1uKDk3NTgpLGg9big4ODMyKTt0LkNvbnRhY3RDYXJkPWU9Pnt2YXJ7bmFtZTp0LHRpdGxlOm4scGhvdG9Vcmw6cix1c2VJbml0aWFsczpvPSExLGRldGFpbHM6YSxvbmxpbmVTdGF0dXM6bH09ZSx1PWkoZSxbXCJuYW1lXCIsXCJ0aXRsZVwiLFwicGhvdG9VcmxcIixcInVzZUluaXRpYWxzXCIsXCJkZXRhaWxzXCIsXCJvbmxpbmVTdGF0dXNcIl0pO2NvbnN0IGQ9cnx8byxNPSgwLGMudXNlTWVtbykoKCgpPT4oMCxwLmdldEluaXRpYWxzKSh0KSksW3RdKSxMPSgwLGMudXNlTWVtbykoKCgpPT4oMCxoLmdlbmVyYXRlQ29sb3JGcm9tU3RyaW5nKSh0KSksW3RdKSxfPSgwLGMuY3JlYXRlUmVmKSgpO3JldHVybigwLGMudXNlRWZmZWN0KSgoKCk9Pnt2YXIgZTtudWxsPT09KGU9Xy5jdXJyZW50KXx8dm9pZCAwPT09ZXx8ZS5zY3JvbGxUbygwLDApfSkpLCgwLHMuanN4cykoZyxPYmplY3QuYXNzaWduKHt9LHUse2NoaWxkcmVuOlsoMCxzLmpzeHMpKHYse2NoaWxkcmVuOltkJiYoMCxzLmpzeHMpKEMsT2JqZWN0LmFzc2lnbih7aWNvbkNvbG9yOkx9LHtjaGlsZHJlbjpbcj8oMCxzLmpzeCkodyx7YWx0Om4sc3JjOnJ9KTooMCxzLmpzeCkobSx7Y2hpbGRyZW46TX0pLCgwLHMuanN4KShmLkNvbnRhY3RTdGF0dXNJY29uLHtvbmxpbmVTdGF0dXM6bH0pXX0pKSwoMCxzLmpzeHMpKGIse2NoaWxkcmVuOlsoMCxzLmpzeHMpKHkse2NoaWxkcmVuOltcIiBcIix0LFwiIFwiXX0pLG4mJigwLHMuanN4cykoeCx7Y2hpbGRyZW46W1wiIFwiLG4sXCIgXCJdfSldfSldfSksKDAscy5qc3gpKFMse30pLCgwLHMuanN4KShrLE9iamVjdC5hc3NpZ24oe3JlZjpffSx7Y2hpbGRyZW46KG51bGw9PWE/dm9pZCAwOmEubGVuZ3RoKT4wP2EubWFwKCgoZSxuKT0+KDAscy5qc3hzKShjLmRlZmF1bHQuRnJhZ21lbnQse2NoaWxkcmVuOlsoMCxzLmpzeCkoTyx7ZGVmaW5pdGlvbnM6ZX0pLG48YS5sZW5ndGgtMSYmKDAscy5qc3gpKFMse3BhZGRpbmc6ITB9KV19LGAke3R9LWRldGFpbHMtJHtufWApKSk6KDAscy5qc3gpKFwicFwiLHtjaGlsZHJlbjpcIk5vIGluZm9ybWF0aW9uIGF2YWlsYWJsZS5cIn0pfSkpXX0pKX07Y29uc3QgZz11LmRlZmF1bHQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBoZWlnaHQ6IDEwMCU7XG5gLHY9dS5kZWZhdWx0LmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgcGFkZGluZy1ib3R0b206ICR7KHt0aGVtZTplfSk9PmUucHgubGFyZ2V9O1xuYCxDPXUuZGVmYXVsdC5kaXZgXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6ICR7ZT0+ZS5pY29uQ29sb3J9O1xuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnhzbWFsbH07XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXG4gIGhlaWdodDogNjBweDtcbiAgd2lkdGg6IDYwcHg7XG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuYCxtPXUuZGVmYXVsdC5zcGFuYFxuICBmb250LXNpemU6IDI0cHg7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG5gLHc9dS5kZWZhdWx0LmltZ2BcbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5weC54c21hbGx9O1xuICBvYmplY3QtZml0OiBjb3ZlcjtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDEwMCU7XG5gLGI9dS5kZWZhdWx0LmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICBtaW4td2lkdGg6IDA7XG4gIG1hcmdpbi1sZWZ0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuYCx5PXUuZGVmYXVsdC5zcGFuYFxuICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUubGFyZ2V9O1xuICBsaW5lLWhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5weC5sYXJnZX07XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBhZGRpbmctYm90dG9tOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnhzbWFsbH07XG4gIGZvbnQtd2VpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRXZWlnaHQuYm9sZH07XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuYCx4PXUuZGVmYXVsdC5zcGFuYFxuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHRIZWxwfTtcbiAgbGluZS1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBhZGRpbmctYm90dG9tOiAycHg7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuYCxrPXUuZGVmYXVsdC5kaXZgXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgZmxleDogMTtcbiAgbWFyZ2luLXRvcDogJHsoe3RoZW1lOmV9KT0+ZS5weC5sYXJnZX07XG4gIG1hcmdpbi1ib3R0b206ICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG4gIHBhZGRpbmctcmlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG4gIG92ZXJmbG93LXk6IGF1dG87XG5gLFM9dS5kZWZhdWx0LmRpdmBcbiAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNn07XG4gIG1hcmdpbi1ib3R0b206ICR7KHt0aGVtZTplLHBhZGRpbmc6dH0pPT50JiZlLnB4LmJhc2V9O1xuYCxPPSgwLHUuZGVmYXVsdCkoZC5EZWZpbml0aW9uTGlzdClgXG4gIGR0IHtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplO1xuICB9XG5cbiAgZGQge1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgfVxuYH0sMzE4ODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oMzQyOSksdCl9LDc0NDQ6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmdldEluaXRpYWxzPXZvaWQgMCx0LmdldEluaXRpYWxzPWU9Pntjb25zdCB0PWUudHJpbSgpLG49dC5sYXN0SW5kZXhPZihcIiBcIik7cmV0dXJuIG4+LTE/W3QuY2hhckF0KDApLHQuY2hhckF0KG4rMSldLmpvaW4oXCJcIik6dC5zbGljZSgwLDIpfX0sMTk5NjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn0sbz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lkg2PXQuSDU9dC5IND10LkgzPXQuSDI9dC5IMT10LkhlYWRpbmc9dC5kZWZhdWx0U2l6ZT12b2lkIDA7Y29uc3QgYT1uKDU4OTMpLGk9byhuKDc1MTgpKSxsPW4oMzQ3MSkscz1uKDc3NjkpO3QuZGVmYXVsdFNpemU9e2gxOmwuU2l6ZS54eHhsYXJnZSxoMjpsLlNpemUueHhsYXJnZSxoMzpsLlNpemUueGxhcmdlLGg0OmwuU2l6ZS5sYXJnZSxoNTpsLlNpemUuYmFzZSxoNjpsLlNpemUuc21hbGx9LHQuSGVhZGluZz1lPT57dmFye2xldmVsOm49MSxjbGFzc05hbWU6b309ZSxpPXIoZSxbXCJsZXZlbFwiLFwiY2xhc3NOYW1lXCJdKTtjb25zdCBsPWBoJHtufWA7cmV0dXJuKDAsYS5qc3gpKGMsT2JqZWN0LmFzc2lnbih7Y2xhc3NOYW1lOm8sYXM6bCxzaXplOnQuZGVmYXVsdFNpemVbbF0sd2VpZ2h0OlwiYm9sZFwifSxpKSl9O2NvbnN0IGM9KDAsaS5kZWZhdWx0KShzLlRleHQpYFxuICBsaW5lLWhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5saW5lSGVpZ2h0LmhlYWRpbmd9O1xuYDt0LkgxPSgwLGkuZGVmYXVsdCkodC5IZWFkaW5nKS5hdHRycygoZT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtsZXZlbDoxfSkpKWBgLHQuSDI9KDAsaS5kZWZhdWx0KSh0LkhlYWRpbmcpLmF0dHJzKChlPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse2xldmVsOjJ9KSkpYGAsdC5IMz0oMCxpLmRlZmF1bHQpKHQuSGVhZGluZykuYXR0cnMoKGU9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7bGV2ZWw6M30pKSlgYCx0Lkg0PSgwLGkuZGVmYXVsdCkodC5IZWFkaW5nKS5hdHRycygoZT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtsZXZlbDo0fSkpKWBgLHQuSDU9KDAsaS5kZWZhdWx0KSh0LkhlYWRpbmcpLmF0dHJzKChlPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse2xldmVsOjV9KSkpYGAsdC5INj0oMCxpLmRlZmF1bHQpKHQuSGVhZGluZykuYXR0cnMoKGU9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7bGV2ZWw6Nn0pKSlgYH0sNzA2MzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oMTk5NiksdCl9LDc3Njk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDU0MzEpLHQpfSw1NDMxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlRleHQ9dm9pZCAwO2NvbnN0IG89cihuKDc1MTgpKTt0LlRleHQ9by5kZWZhdWx0LnNwYW5gXG4gIGNvbG9yOiAkeyh7dGhlbWU6ZSxjb2xvcjp0PVwidGV4dERlZmF1bHRcIn0pPT5lLnBhbGV0dGVbdF19O1xuICBmb250LXNpemU6ICR7KHt0aGVtZTplLHNpemU6dD1cImJhc2VcIn0pPT5lLmZvbnRTaXplW3RdfTtcbiAgZm9udC13ZWlnaHQ6ICR7KHt0aGVtZTplLHdlaWdodDp0PVwibm9ybWFsXCJ9KT0+ZS5mb250V2VpZ2h0W3RdfTtcbiAgbGluZS1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUubGluZUhlaWdodC50ZXh0fTtcbmAsdC5UZXh0LmRpc3BsYXlOYW1lPVwiVGV4dFwifSwzMTkwOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUNvbG9yU2NoZW1lPXQuQ29sb3JTY2hlbWU9dm9pZCAwO2NvbnN0IHI9big2Njg5KTt0LkNvbG9yU2NoZW1lPXtkYXJrOlwiZGFya1wiLGxpZ2h0OlwibGlnaHRcIixzeXN0ZW06XCJzeXN0ZW1cIn0sdC51c2VDb2xvclNjaGVtZT0oe2NvbG9yU2NoZW1lOmUsZmFsbGJhY2tTY2hlbWU6bj10LkNvbG9yU2NoZW1lLmxpZ2h0fSk9Pntjb25zdFthLGldPSgwLHIudXNlU3RhdGUpKGUmJmUhPT10LkNvbG9yU2NoZW1lLnN5c3RlbT9lOm4pLGw9dD0+e2kobyh0LGV8fG4pKX07cmV0dXJuKDAsci51c2VFZmZlY3QpKCgoKT0+e2NvbnN0IHQ9d2luZG93Lm1hdGNoTWVkaWEoXCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspXCIpO3JldHVybiBpKG8odCxlfHxuKSksdC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsbCksKCk9PnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLGwpfSksW2UsYV0pLGF9O2NvbnN0IG89KGUsbik9Pm49PT10LkNvbG9yU2NoZW1lLnN5c3RlbT9lLm1hdGNoZXM/dC5Db2xvclNjaGVtZS5kYXJrOnQuQ29sb3JTY2hlbWUubGlnaHQ6bn0sMzQ3OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZURyb3Bkb3duS2V5Ym9hcmROYXZpZ2F0aW9uPXZvaWQgMDtjb25zdCByPW4oNjY4OSk7dC51c2VEcm9wZG93bktleWJvYXJkTmF2aWdhdGlvbj0oZSx0LG4sbyxhKT0+e2NvbnN0W2ksbF09KDAsci51c2VTdGF0ZSkoMCksW3MsY109KDAsci51c2VTdGF0ZSkoXCJcIik7bGV0IHU7aWYoKDAsci51c2VFZmZlY3QpKCgoKT0+e2lmKHQmJiFuKXtjb25zdCBuPWUuZmxhdCgpLmZpbmRJbmRleCgoZT0+ZS52YWx1ZT09PXQudmFsdWUpKTtuPj0wJiZsKG4pfX0pLFtlLHQsbl0pLCgwLHIudXNlRWZmZWN0KSgoKCk9PntufHxjKFwiXCIpfSksW25dKSwoMCxyLnVzZUVmZmVjdCkoKCgpPT57aWYocyl7Y29uc3QgdD1lLmZsYXQoKS5maW5kSW5kZXgoKGU9PmUudGl0bGUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHMudG9Mb3dlckNhc2UoKSkpKTt0Pj0wJiZsKHQpfX0pLFtlLHNdKSxlWzBdLmxlbmd0aD4wJiZlLmZsYXQoKS5sZW5ndGg+aSl7Y29uc3RbdCxuXT1bTWF0aC5mbG9vcihpL2VbMF0ubGVuZ3RoKSxpJWVbMF0ubGVuZ3RoXTt1PWVbdF1bbl19cmV0dXJuKDAsci51c2VFZmZlY3QpKCgoKT0+e2NvbnN0IGU9c2V0VGltZW91dCgoKCk9PntjKFwiXCIpfSksNTAwKTtyZXR1cm4oKT0+Y2xlYXJUaW1lb3V0KGUpfSksW3NdKSx7Zm9jdXNlZE9wdGlvbjp1LGhhbmRsZUtleURvd246dD0+e3N3aXRjaCh0LmNvZGUpe2Nhc2VcIkFycm93VXBcIjp0LnByZXZlbnREZWZhdWx0KCksaT4wJiZsKGktMSk7YnJlYWs7Y2FzZVwiQXJyb3dEb3duXCI6dC5wcmV2ZW50RGVmYXVsdCgpLGk8ZS5mbGF0KCkubGVuZ3RoLTEmJmwoaSsxKTticmVhaztjYXNlXCJFbnRlclwiOmNhc2VcIlNwYWNlXCI6dC5wcmV2ZW50RGVmYXVsdCgpLG4/KChudWxsPT11P3ZvaWQgMDp1Lm92ZXJyaWRlT25DbGljayk/dS5vdmVycmlkZU9uQ2xpY2soKTphKG51bGwhPXU/dTplWzBdWzBdKSxvKCkpOm8oKTticmVhaztjYXNlXCJFc2NhcGVcIjp0LnByZXZlbnREZWZhdWx0KCksbyghMSk7YnJlYWs7ZGVmYXVsdDovXlthLXowLTldJC9pLnRlc3QodC5rZXkpJiZjKChlPT5lK3Qua2V5KSl9fX19fSw0NDgxOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUxheW91dE1lZGlhUXVlcnk9dC51c2VNZWRpYVF1ZXJ5PXZvaWQgMDtjb25zdCByPW4oNjY4OSksbz1lPT50PT57Y29uc3RbbixvXT0oMCxyLnVzZVN0YXRlKSghMSk7cmV0dXJuIGUoKCgpPT57Y29uc3QgZT13aW5kb3cubWF0Y2hNZWRpYSh0KTtpZihlKXtlLm1hdGNoZXMhPT1uJiZvKGUubWF0Y2hlcyk7Y29uc3QgdD0oKT0+byhlLm1hdGNoZXMpLHI9KCk9PmUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLHQpO3JldHVybiBlLmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIix0KSxyfX0pLFtuLHRdKSxufTt0LnVzZU1lZGlhUXVlcnk9byhyLnVzZUVmZmVjdCksdC51c2VMYXlvdXRNZWRpYVF1ZXJ5PW8oci51c2VMYXlvdXRFZmZlY3QpfSwyNzc2OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZVByZXZpb3VzPXZvaWQgMDtjb25zdCByPW4oNjY4OSk7dC51c2VQcmV2aW91cz1lPT57Y29uc3QgdD0oMCxyLnVzZVJlZikoKTtyZXR1cm4oMCxyLnVzZUVmZmVjdCkoKCgpPT57dC5jdXJyZW50PWV9KSxbZV0pLHQuY3VycmVudH19LDcwODg6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlVGhlbWU9dm9pZCAwO2NvbnN0IHI9big2Njg5KSxvPW4oNDI2NiksYT1uKDMxOTApLGk9big5NTA3KSxsPW4oNjQ4Nikscz17W2EuQ29sb3JTY2hlbWUuZGFya106by5PcGVuRmluRGFya1RoZW1lLFthLkNvbG9yU2NoZW1lLmxpZ2h0XTpvLk9wZW5GaW5MaWdodFRoZW1lfTt0LnVzZVRoZW1lPSh7dGhlbWVzOmUsc2NoZW1lOnR9KT0+e2xldCBuPXt9O2NvbnN0IG89KDAsYS51c2VDb2xvclNjaGVtZSkoe2NvbG9yU2NoZW1lOnR9KTt0cnl7bj0oMCxyLnVzZU1lbW8pKCgoKT0+KChlLHQpPT57Y29uc3Qgbj1udWxsPT10P3ZvaWQgMDp0W2VdO2xldCByPU9iamVjdC5hc3NpZ24oe30sc1tlXSk7cmV0dXJuIG4mJm4ucGFsZXR0ZSYmKHI9KDAsbC5tZXJnZSkocixuLCgwLGkuY3JlYXRlVGhlbWUpKG4ucGFsZXR0ZSkpKSxyfSkobyxlKSksW2Usb10pfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoZSl9cmV0dXJuIG59fSwzNDE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDQxMzApLHQpLG8obig3NDAxKSx0KSxvKG4oMjQ1MiksdCksbyhuKDdlMyksdCksbyhuKDQ5MjUpLHQpLG8obigyNjA5KSx0KSxvKG4oMzEzNiksdCksbyhuKDk3MzQpLHQpLG8obig2MDI2KSx0KSxvKG4oOTYzNCksdCksbyhuKDE0NCksdCksbyhuKDkyMzkpLHQpLG8obig4ODc4KSx0KSxvKG4oODUxMCksdCksbyhuKDg5NTEpLHQpLG8obigxOTc4KSx0KSxvKG4oODA1MSksdCksbyhuKDQxNjkpLHQpLG8obigzNjQxKSx0KSxvKG4oNTIxNSksdCksbyhuKDE0NjcpLHQpLG8obigzMTE5KSx0KSxvKG4oMTMzNSksdCksbyhuKDUzNzcpLHQpLG8obigzODc3KSx0KSxvKG4oMzE4OCksdCksbyhuKDcwNjMpLHQpLG8obig3NzY5KSx0KSxvKG4oMzE5MCksdCksbyhuKDQ0ODEpLHQpLG8obigyNzc2KSx0KSxvKG4oMzQ3KSx0KSxvKG4oNDk5MSksdCksbyhuKDg4MzIpLHQpLG8obig3MDMwKSx0KSxvKG4oNjIxOCksdCl9LDg4MzI6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmdlbmVyYXRlQ29sb3JGcm9tU3RyaW5nPXZvaWQgMCx0LmdlbmVyYXRlQ29sb3JGcm9tU3RyaW5nPWZ1bmN0aW9uKGU9XCJcIix0PTcwLG49NTApe2xldCByPTA7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspcj1lLmNoYXJDb2RlQXQodCkrKChyPDw1KS1yKSxyJj1yO3JldHVybmBoc2woJHtyJTM2MH0sICR7dH0lLCAke259JSlgfX0sNDk5MTooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQud2hlbkZpbj12b2lkIDAsdC53aGVuRmluPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj1cInVuZGVmaW5lZFwiIT10eXBlb2YgZmluP2U6dDtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBuP24oKTpufX0sNjU1OihlLHQsbik9PntuLnIodCksbi5kKHQse19fYXNzaWduOigpPT5hLF9fYXN5bmNEZWxlZ2F0b3I6KCk9Pk8sX19hc3luY0dlbmVyYXRvcjooKT0+UyxfX2FzeW5jVmFsdWVzOigpPT5NLF9fYXdhaXQ6KCk9PmssX19hd2FpdGVyOigpPT5oLF9fY2xhc3NQcml2YXRlRmllbGRHZXQ6KCk9PmosX19jbGFzc1ByaXZhdGVGaWVsZEluOigpPT5JLF9fY2xhc3NQcml2YXRlRmllbGRTZXQ6KCk9PlIsX19jcmVhdGVCaW5kaW5nOigpPT52LF9fZGVjb3JhdGU6KCk9PmwsX19lc0RlY29yYXRlOigpPT5jLF9fZXhwb3J0U3RhcjooKT0+QyxfX2V4dGVuZHM6KCk9Pm8sX19nZW5lcmF0b3I6KCk9PmcsX19pbXBvcnREZWZhdWx0OigpPT5FLF9faW1wb3J0U3RhcjooKT0+UCxfX21ha2VUZW1wbGF0ZU9iamVjdDooKT0+TCxfX21ldGFkYXRhOigpPT5mLF9fcGFyYW06KCk9PnMsX19wcm9wS2V5OigpPT5kLF9fcmVhZDooKT0+dyxfX3Jlc3Q6KCk9PmksX19ydW5Jbml0aWFsaXplcnM6KCk9PnUsX19zZXRGdW5jdGlvbk5hbWU6KCk9PnAsX19zcHJlYWQ6KCk9PmIsX19zcHJlYWRBcnJheTooKT0+eCxfX3NwcmVhZEFycmF5czooKT0+eSxfX3ZhbHVlczooKT0+bX0pO3ZhciByPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHI9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikmJihlW25dPXRbbl0pfSxyKGUsdCl9O2Z1bmN0aW9uIG8oZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIitTdHJpbmcodCkrXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfXIoZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihuLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgbil9dmFyIGE9ZnVuY3Rpb24oKXtyZXR1cm4gYT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQsbj0xLHI9YXJndW1lbnRzLmxlbmd0aDtuPHI7bisrKWZvcih2YXIgbyBpbiB0PWFyZ3VtZW50c1tuXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxvKSYmKGVbb109dFtvXSk7cmV0dXJuIGV9LGEuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtmdW5jdGlvbiBpKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn1mdW5jdGlvbiBsKGUsdCxuLHIpe3ZhciBvLGE9YXJndW1lbnRzLmxlbmd0aCxpPWE8Mz90Om51bGw9PT1yP3I9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pOnI7aWYoXCJvYmplY3RcIj09dHlwZW9mIFJlZmxlY3QmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpaT1SZWZsZWN0LmRlY29yYXRlKGUsdCxuLHIpO2Vsc2UgZm9yKHZhciBsPWUubGVuZ3RoLTE7bD49MDtsLS0pKG89ZVtsXSkmJihpPShhPDM/byhpKTphPjM/byh0LG4saSk6byh0LG4pKXx8aSk7cmV0dXJuIGE+MyYmaSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbixpKSxpfWZ1bmN0aW9uIHMoZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXt0KG4scixlKX19ZnVuY3Rpb24gYyhlLHQsbixyLG8sYSl7ZnVuY3Rpb24gaShlKXtpZih2b2lkIDAhPT1lJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoXCJGdW5jdGlvbiBleHBlY3RlZFwiKTtyZXR1cm4gZX1mb3IodmFyIGwscz1yLmtpbmQsYz1cImdldHRlclwiPT09cz9cImdldFwiOlwic2V0dGVyXCI9PT1zP1wic2V0XCI6XCJ2YWx1ZVwiLHU9IXQmJmU/ci5zdGF0aWM/ZTplLnByb3RvdHlwZTpudWxsLGQ9dHx8KHU/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih1LHIubmFtZSk6e30pLHA9ITEsZj1uLmxlbmd0aC0xO2Y+PTA7Zi0tKXt2YXIgaD17fTtmb3IodmFyIGcgaW4gciloW2ddPVwiYWNjZXNzXCI9PT1nP3t9OnJbZ107Zm9yKHZhciBnIGluIHIuYWNjZXNzKWguYWNjZXNzW2ddPXIuYWNjZXNzW2ddO2guYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oZSl7aWYocCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkXCIpO2EucHVzaChpKGV8fG51bGwpKX07dmFyIHY9KDAsbltmXSkoXCJhY2Nlc3NvclwiPT09cz97Z2V0OmQuZ2V0LHNldDpkLnNldH06ZFtjXSxoKTtpZihcImFjY2Vzc29yXCI9PT1zKXtpZih2b2lkIDA9PT12KWNvbnRpbnVlO2lmKG51bGw9PT12fHxcIm9iamVjdFwiIT10eXBlb2Ygdil0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkXCIpOyhsPWkodi5nZXQpKSYmKGQuZ2V0PWwpLChsPWkodi5zZXQpKSYmKGQuc2V0PWwpLChsPWkodi5pbml0KSkmJm8ucHVzaChsKX1lbHNlKGw9aSh2KSkmJihcImZpZWxkXCI9PT1zP28ucHVzaChsKTpkW2NdPWwpfXUmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LHIubmFtZSxkKSxwPSEwfWZ1bmN0aW9uIHUoZSx0LG4pe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjIsbz0wO288dC5sZW5ndGg7bysrKW49cj90W29dLmNhbGwoZSxuKTp0W29dLmNhbGwoZSk7cmV0dXJuIHI/bjp2b2lkIDB9ZnVuY3Rpb24gZChlKXtyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgZT9lOlwiXCIuY29uY2F0KGUpfWZ1bmN0aW9uIHAoZSx0LG4pe3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiB0JiYodD10LmRlc2NyaXB0aW9uP1wiW1wiLmNvbmNhdCh0LmRlc2NyaXB0aW9uLFwiXVwiKTpcIlwiKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcIm5hbWVcIix7Y29uZmlndXJhYmxlOiEwLHZhbHVlOm4/XCJcIi5jb25jYXQobixcIiBcIix0KTp0fSl9ZnVuY3Rpb24gZihlLHQpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBSZWZsZWN0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhKXJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGUsdCl9ZnVuY3Rpb24gaChlLHQsbixyKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24obyxhKXtmdW5jdGlvbiBpKGUpe3RyeXtzKHIubmV4dChlKSl9Y2F0Y2goZSl7YShlKX19ZnVuY3Rpb24gbChlKXt0cnl7cyhyLnRocm93KGUpKX1jYXRjaChlKXthKGUpfX1mdW5jdGlvbiBzKGUpe3ZhciB0O2UuZG9uZT9vKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIG4/dDpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihpLGwpfXMoKHI9ci5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX1mdW5jdGlvbiBnKGUsdCl7dmFyIG4scixvLGEsaT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZvWzBdKXRocm93IG9bMV07cmV0dXJuIG9bMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gYT17bmV4dDpsKDApLHRocm93OmwoMSkscmV0dXJuOmwoMil9LFwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmKGFbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksYTtmdW5jdGlvbiBsKGwpe3JldHVybiBmdW5jdGlvbihzKXtyZXR1cm4gZnVuY3Rpb24obCl7aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtmb3IoO2EmJihhPTAsbFswXSYmKGk9MCkpLGk7KXRyeXtpZihuPTEsciYmKG89MiZsWzBdP3IucmV0dXJuOmxbMF0/ci50aHJvd3x8KChvPXIucmV0dXJuKSYmby5jYWxsKHIpLDApOnIubmV4dCkmJiEobz1vLmNhbGwocixsWzFdKSkuZG9uZSlyZXR1cm4gbztzd2l0Y2gocj0wLG8mJihsPVsyJmxbMF0sby52YWx1ZV0pLGxbMF0pe2Nhc2UgMDpjYXNlIDE6bz1sO2JyZWFrO2Nhc2UgNDpyZXR1cm4gaS5sYWJlbCsrLHt2YWx1ZTpsWzFdLGRvbmU6ITF9O2Nhc2UgNTppLmxhYmVsKysscj1sWzFdLGw9WzBdO2NvbnRpbnVlO2Nhc2UgNzpsPWkub3BzLnBvcCgpLGkudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKG89KG89aS50cnlzKS5sZW5ndGg+MCYmb1tvLmxlbmd0aC0xXSl8fDYhPT1sWzBdJiYyIT09bFswXSkpe2k9MDtjb250aW51ZX1pZigzPT09bFswXSYmKCFvfHxsWzFdPm9bMF0mJmxbMV08b1szXSkpe2kubGFiZWw9bFsxXTticmVha31pZig2PT09bFswXSYmaS5sYWJlbDxvWzFdKXtpLmxhYmVsPW9bMV0sbz1sO2JyZWFrfWlmKG8mJmkubGFiZWw8b1syXSl7aS5sYWJlbD1vWzJdLGkub3BzLnB1c2gobCk7YnJlYWt9b1syXSYmaS5vcHMucG9wKCksaS50cnlzLnBvcCgpO2NvbnRpbnVlfWw9dC5jYWxsKGUsaSl9Y2F0Y2goZSl7bD1bNixlXSxyPTB9ZmluYWxseXtuPW89MH1pZig1JmxbMF0pdGhyb3cgbFsxXTtyZXR1cm57dmFsdWU6bFswXT9sWzFdOnZvaWQgMCxkb25lOiEwfX0oW2wsc10pfX19dmFyIHY9T2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfTtmdW5jdGlvbiBDKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8dih0LGUsbil9ZnVuY3Rpb24gbShlKXt2YXIgdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcixuPXQmJmVbdF0scj0wO2lmKG4pcmV0dXJuIG4uY2FsbChlKTtpZihlJiZcIm51bWJlclwiPT10eXBlb2YgZS5sZW5ndGgpcmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gZSYmcj49ZS5sZW5ndGgmJihlPXZvaWQgMCkse3ZhbHVlOmUmJmVbcisrXSxkb25lOiFlfX19O3Rocm93IG5ldyBUeXBlRXJyb3IodD9cIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCI6XCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpfWZ1bmN0aW9uIHcoZSx0KXt2YXIgbj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXTtpZighbilyZXR1cm4gZTt2YXIgcixvLGE9bi5jYWxsKGUpLGk9W107dHJ5e2Zvcig7KHZvaWQgMD09PXR8fHQtLSA+MCkmJiEocj1hLm5leHQoKSkuZG9uZTspaS5wdXNoKHIudmFsdWUpfWNhdGNoKGUpe289e2Vycm9yOmV9fWZpbmFsbHl7dHJ5e3ImJiFyLmRvbmUmJihuPWEucmV0dXJuKSYmbi5jYWxsKGEpfWZpbmFsbHl7aWYobyl0aHJvdyBvLmVycm9yfX1yZXR1cm4gaX1mdW5jdGlvbiBiKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWU9ZS5jb25jYXQodyhhcmd1bWVudHNbdF0pKTtyZXR1cm4gZX1mdW5jdGlvbiB5KCl7Zm9yKHZhciBlPTAsdD0wLG49YXJndW1lbnRzLmxlbmd0aDt0PG47dCsrKWUrPWFyZ3VtZW50c1t0XS5sZW5ndGg7dmFyIHI9QXJyYXkoZSksbz0wO2Zvcih0PTA7dDxuO3QrKylmb3IodmFyIGE9YXJndW1lbnRzW3RdLGk9MCxsPWEubGVuZ3RoO2k8bDtpKyssbysrKXJbb109YVtpXTtyZXR1cm4gcn1mdW5jdGlvbiB4KGUsdCxuKXtpZihufHwyPT09YXJndW1lbnRzLmxlbmd0aClmb3IodmFyIHIsbz0wLGE9dC5sZW5ndGg7bzxhO28rKykhciYmbyBpbiB0fHwocnx8KHI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwwLG8pKSxyW29dPXRbb10pO3JldHVybiBlLmNvbmNhdChyfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSl9ZnVuY3Rpb24gayhlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGs/KHRoaXMudj1lLHRoaXMpOm5ldyBrKGUpfWZ1bmN0aW9uIFMoZSx0LG4pe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO3ZhciByLG89bi5hcHBseShlLHR8fFtdKSxhPVtdO3JldHVybiByPXt9LGkoXCJuZXh0XCIpLGkoXCJ0aHJvd1wiKSxpKFwicmV0dXJuXCIpLHJbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHI7ZnVuY3Rpb24gaShlKXtvW2VdJiYocltlXT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4scil7YS5wdXNoKFtlLHQsbixyXSk+MXx8bChlLHQpfSkpfSl9ZnVuY3Rpb24gbChlLHQpe3RyeXsobj1vW2VdKHQpKS52YWx1ZSBpbnN0YW5jZW9mIGs/UHJvbWlzZS5yZXNvbHZlKG4udmFsdWUudikudGhlbihzLGMpOnUoYVswXVsyXSxuKX1jYXRjaChlKXt1KGFbMF1bM10sZSl9dmFyIG59ZnVuY3Rpb24gcyhlKXtsKFwibmV4dFwiLGUpfWZ1bmN0aW9uIGMoZSl7bChcInRocm93XCIsZSl9ZnVuY3Rpb24gdShlLHQpe2UodCksYS5zaGlmdCgpLGEubGVuZ3RoJiZsKGFbMF1bMF0sYVswXVsxXSl9fWZ1bmN0aW9uIE8oZSl7dmFyIHQsbjtyZXR1cm4gdD17fSxyKFwibmV4dFwiKSxyKFwidGhyb3dcIiwoZnVuY3Rpb24oZSl7dGhyb3cgZX0pKSxyKFwicmV0dXJuXCIpLHRbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSx0O2Z1bmN0aW9uIHIocixvKXt0W3JdPWVbcl0/ZnVuY3Rpb24odCl7cmV0dXJuKG49IW4pP3t2YWx1ZTprKGVbcl0odCkpLGRvbmU6ITF9Om8/byh0KTp0fTpvfX1mdW5jdGlvbiBNKGUpe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO3ZhciB0LG49ZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl07cmV0dXJuIG4/bi5jYWxsKGUpOihlPW0oZSksdD17fSxyKFwibmV4dFwiKSxyKFwidGhyb3dcIikscihcInJldHVyblwiKSx0W1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSx0KTtmdW5jdGlvbiByKG4pe3Rbbl09ZVtuXSYmZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLG8peyFmdW5jdGlvbihlLHQsbixyKXtQcm9taXNlLnJlc29sdmUocikudGhlbigoZnVuY3Rpb24odCl7ZSh7dmFsdWU6dCxkb25lOm59KX0pLHQpfShyLG8sKHQ9ZVtuXSh0KSkuZG9uZSx0LnZhbHVlKX0pKX19fWZ1bmN0aW9uIEwoZSx0KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5P09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwicmF3XCIse3ZhbHVlOnR9KTplLnJhdz10LGV9dmFyIF89T2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnR9KX06ZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dH07ZnVuY3Rpb24gUChlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIiE9PW4mJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZ2KHQsZSxuKTtyZXR1cm4gXyh0LGUpLHR9ZnVuY3Rpb24gRShlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gaihlLHQsbixyKXtpZihcImFcIj09PW4mJiFyKXRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdD9lIT09dHx8IXI6IXQuaGFzKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7cmV0dXJuXCJtXCI9PT1uP3I6XCJhXCI9PT1uP3IuY2FsbChlKTpyP3IudmFsdWU6dC5nZXQoZSl9ZnVuY3Rpb24gUihlLHQsbixyLG8pe2lmKFwibVwiPT09cil0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO2lmKFwiYVwiPT09ciYmIW8pdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P2UhPT10fHwhbzohdC5oYXMoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO3JldHVyblwiYVwiPT09cj9vLmNhbGwoZSxuKTpvP28udmFsdWU9bjp0LnNldChlLG4pLG59ZnVuY3Rpb24gSShlLHQpe2lmKG51bGw9PT10fHxcIm9iamVjdFwiIT10eXBlb2YgdCYmXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3RcIik7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZT90PT09ZTplLmhhcyh0KX19LDYwMzY6ZT0+e2UuZXhwb3J0cz1cImh0dHBzOi8vY2RuLm9wZW5maW4uY28vdWktbGlicmFyeS9mb250cy9JbnRlci1JdGFsaWMud29mZjJcIn0sNDY2ODplPT57ZS5leHBvcnRzPVwiaHR0cHM6Ly9jZG4ub3BlbmZpbi5jby91aS1saWJyYXJ5L2ZvbnRzL0ludGVyLVJlZ3VsYXIud29mZjJcIn0sNTk0MTplPT57ZS5leHBvcnRzPVwiaHR0cHM6Ly9jZG4ub3BlbmZpbi5jby91aS1saWJyYXJ5L2ZvbnRzL0ludGVyLVNlbWlCb2xkLndvZmYyXCJ9LDI4MTM6ZT0+e2UuZXhwb3J0cz1cImh0dHBzOi8vY2RuLm9wZW5maW4uY28vdWktbGlicmFyeS9mb250cy9JbnRlci1TZW1pQm9sZEl0YWxpYy53b2ZmMlwifSw2Njg5OmU9PntlLmV4cG9ydHM9bigzNzgpfSw3NTE4OmU9PntlLmV4cG9ydHM9big5MjEpfSw4MjA3OmZ1bmN0aW9uKGUpe2UuZXhwb3J0cz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7cmV0dXJuKGU9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgZX0pKHQpfXZhciB0PS9eXFxzKy8sbj0vXFxzKyQvO2Z1bmN0aW9uIHIobyxhKXtpZihhPWF8fHt9LChvPW98fFwiXCIpaW5zdGFuY2VvZiByKXJldHVybiBvO2lmKCEodGhpcyBpbnN0YW5jZW9mIHIpKXJldHVybiBuZXcgcihvLGEpO3ZhciBpPWZ1bmN0aW9uKHIpe3ZhciBvLGEsaSxsPXtyOjAsZzowLGI6MH0scz0xLGM9bnVsbCx1PW51bGwsZD1udWxsLHA9ITEsZj0hMTtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgciYmKHI9ZnVuY3Rpb24oZSl7ZT1lLnJlcGxhY2UodCxcIlwiKS5yZXBsYWNlKG4sXCJcIikudG9Mb3dlckNhc2UoKTt2YXIgcixvPSExO2lmKGJbZV0pZT1iW2VdLG89ITA7ZWxzZSBpZihcInRyYW5zcGFyZW50XCI9PWUpcmV0dXJue3I6MCxnOjAsYjowLGE6MCxmb3JtYXQ6XCJuYW1lXCJ9O3JldHVybihyPUkucmdiLmV4ZWMoZSkpP3tyOnJbMV0sZzpyWzJdLGI6clszXX06KHI9SS5yZ2JhLmV4ZWMoZSkpP3tyOnJbMV0sZzpyWzJdLGI6clszXSxhOnJbNF19OihyPUkuaHNsLmV4ZWMoZSkpP3toOnJbMV0sczpyWzJdLGw6clszXX06KHI9SS5oc2xhLmV4ZWMoZSkpP3toOnJbMV0sczpyWzJdLGw6clszXSxhOnJbNF19OihyPUkuaHN2LmV4ZWMoZSkpP3toOnJbMV0sczpyWzJdLHY6clszXX06KHI9SS5oc3ZhLmV4ZWMoZSkpP3toOnJbMV0sczpyWzJdLHY6clszXSxhOnJbNF19OihyPUkuaGV4OC5leGVjKGUpKT97cjpPKHJbMV0pLGc6TyhyWzJdKSxiOk8oclszXSksYTpQKHJbNF0pLGZvcm1hdDpvP1wibmFtZVwiOlwiaGV4OFwifToocj1JLmhleDYuZXhlYyhlKSk/e3I6TyhyWzFdKSxnOk8oclsyXSksYjpPKHJbM10pLGZvcm1hdDpvP1wibmFtZVwiOlwiaGV4XCJ9OihyPUkuaGV4NC5leGVjKGUpKT97cjpPKHJbMV0rXCJcIityWzFdKSxnOk8oclsyXStcIlwiK3JbMl0pLGI6TyhyWzNdK1wiXCIrclszXSksYTpQKHJbNF0rXCJcIityWzRdKSxmb3JtYXQ6bz9cIm5hbWVcIjpcImhleDhcIn06ISEocj1JLmhleDMuZXhlYyhlKSkmJntyOk8oclsxXStcIlwiK3JbMV0pLGc6TyhyWzJdK1wiXCIrclsyXSksYjpPKHJbM10rXCJcIityWzNdKSxmb3JtYXQ6bz9cIm5hbWVcIjpcImhleFwifX0ocikpLFwib2JqZWN0XCI9PWUocikmJihWKHIucikmJlYoci5nKSYmVihyLmIpPyhvPXIucixhPXIuZyxpPXIuYixsPXtyOjI1NSprKG8sMjU1KSxnOjI1NSprKGEsMjU1KSxiOjI1NSprKGksMjU1KX0scD0hMCxmPVwiJVwiPT09U3RyaW5nKHIucikuc3Vic3RyKC0xKT9cInByZ2JcIjpcInJnYlwiKTpWKHIuaCkmJlYoci5zKSYmVihyLnYpPyhjPUwoci5zKSx1PUwoci52KSxsPWZ1bmN0aW9uKGUsdCxuKXtlPTYqayhlLDM2MCksdD1rKHQsMTAwKSxuPWsobiwxMDApO3ZhciByPU1hdGguZmxvb3IoZSksbz1lLXIsYT1uKigxLXQpLGk9biooMS1vKnQpLGw9biooMS0oMS1vKSp0KSxzPXIlNjtyZXR1cm57cjoyNTUqW24saSxhLGEsbCxuXVtzXSxnOjI1NSpbbCxuLG4saSxhLGFdW3NdLGI6MjU1KlthLGEsbCxuLG4saV1bc119fShyLmgsYyx1KSxwPSEwLGY9XCJoc3ZcIik6VihyLmgpJiZWKHIucykmJlYoci5sKSYmKGM9TChyLnMpLGQ9TChyLmwpLGw9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG8sYTtmdW5jdGlvbiBpKGUsdCxuKXtyZXR1cm4gbjwwJiYobis9MSksbj4xJiYobi09MSksbjwxLzY/ZSs2Kih0LWUpKm46bjwuNT90Om48Mi8zP2UrKHQtZSkqKDIvMy1uKSo2OmV9aWYoZT1rKGUsMzYwKSx0PWsodCwxMDApLG49ayhuLDEwMCksMD09PXQpcj1vPWE9bjtlbHNle3ZhciBsPW48LjU/biooMSt0KTpuK3Qtbip0LHM9MipuLWw7cj1pKHMsbCxlKzEvMyksbz1pKHMsbCxlKSxhPWkocyxsLGUtMS8zKX1yZXR1cm57cjoyNTUqcixnOjI1NSpvLGI6MjU1KmF9fShyLmgsYyxkKSxwPSEwLGY9XCJoc2xcIiksci5oYXNPd25Qcm9wZXJ0eShcImFcIikmJihzPXIuYSkpLHM9eChzKSx7b2s6cCxmb3JtYXQ6ci5mb3JtYXR8fGYscjpNYXRoLm1pbigyNTUsTWF0aC5tYXgobC5yLDApKSxnOk1hdGgubWluKDI1NSxNYXRoLm1heChsLmcsMCkpLGI6TWF0aC5taW4oMjU1LE1hdGgubWF4KGwuYiwwKSksYTpzfX0obyk7dGhpcy5fb3JpZ2luYWxJbnB1dD1vLHRoaXMuX3I9aS5yLHRoaXMuX2c9aS5nLHRoaXMuX2I9aS5iLHRoaXMuX2E9aS5hLHRoaXMuX3JvdW5kQT1NYXRoLnJvdW5kKDEwMCp0aGlzLl9hKS8xMDAsdGhpcy5fZm9ybWF0PWEuZm9ybWF0fHxpLmZvcm1hdCx0aGlzLl9ncmFkaWVudFR5cGU9YS5ncmFkaWVudFR5cGUsdGhpcy5fcjwxJiYodGhpcy5fcj1NYXRoLnJvdW5kKHRoaXMuX3IpKSx0aGlzLl9nPDEmJih0aGlzLl9nPU1hdGgucm91bmQodGhpcy5fZykpLHRoaXMuX2I8MSYmKHRoaXMuX2I9TWF0aC5yb3VuZCh0aGlzLl9iKSksdGhpcy5fb2s9aS5va31mdW5jdGlvbiBvKGUsdCxuKXtlPWsoZSwyNTUpLHQ9ayh0LDI1NSksbj1rKG4sMjU1KTt2YXIgcixvLGE9TWF0aC5tYXgoZSx0LG4pLGk9TWF0aC5taW4oZSx0LG4pLGw9KGEraSkvMjtpZihhPT1pKXI9bz0wO2Vsc2V7dmFyIHM9YS1pO3N3aXRjaChvPWw+LjU/cy8oMi1hLWkpOnMvKGEraSksYSl7Y2FzZSBlOnI9KHQtbikvcysodDxuPzY6MCk7YnJlYWs7Y2FzZSB0OnI9KG4tZSkvcysyO2JyZWFrO2Nhc2UgbjpyPShlLXQpL3MrNH1yLz02fXJldHVybntoOnIsczpvLGx9fWZ1bmN0aW9uIGEoZSx0LG4pe2U9ayhlLDI1NSksdD1rKHQsMjU1KSxuPWsobiwyNTUpO3ZhciByLG8sYT1NYXRoLm1heChlLHQsbiksaT1NYXRoLm1pbihlLHQsbiksbD1hLHM9YS1pO2lmKG89MD09PWE/MDpzL2EsYT09aSlyPTA7ZWxzZXtzd2l0Y2goYSl7Y2FzZSBlOnI9KHQtbikvcysodDxuPzY6MCk7YnJlYWs7Y2FzZSB0OnI9KG4tZSkvcysyO2JyZWFrO2Nhc2UgbjpyPShlLXQpL3MrNH1yLz02fXJldHVybntoOnIsczpvLHY6bH19ZnVuY3Rpb24gaShlLHQsbixyKXt2YXIgbz1bTShNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDE2KSksTShNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDE2KSksTShNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDE2KSldO3JldHVybiByJiZvWzBdLmNoYXJBdCgwKT09b1swXS5jaGFyQXQoMSkmJm9bMV0uY2hhckF0KDApPT1vWzFdLmNoYXJBdCgxKSYmb1syXS5jaGFyQXQoMCk9PW9bMl0uY2hhckF0KDEpP29bMF0uY2hhckF0KDApK29bMV0uY2hhckF0KDApK29bMl0uY2hhckF0KDApOm8uam9pbihcIlwiKX1mdW5jdGlvbiBsKGUsdCxuLHIpe3JldHVybltNKF8ocikpLE0oTWF0aC5yb3VuZChlKS50b1N0cmluZygxNikpLE0oTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNikpLE0oTWF0aC5yb3VuZChuKS50b1N0cmluZygxNikpXS5qb2luKFwiXCIpfWZ1bmN0aW9uIHMoZSx0KXt0PTA9PT10PzA6dHx8MTA7dmFyIG49cihlKS50b0hzbCgpO3JldHVybiBuLnMtPXQvMTAwLG4ucz1TKG4ucykscihuKX1mdW5jdGlvbiBjKGUsdCl7dD0wPT09dD8wOnR8fDEwO3ZhciBuPXIoZSkudG9Ic2woKTtyZXR1cm4gbi5zKz10LzEwMCxuLnM9UyhuLnMpLHIobil9ZnVuY3Rpb24gdShlKXtyZXR1cm4gcihlKS5kZXNhdHVyYXRlKDEwMCl9ZnVuY3Rpb24gZChlLHQpe3Q9MD09PXQ/MDp0fHwxMDt2YXIgbj1yKGUpLnRvSHNsKCk7cmV0dXJuIG4ubCs9dC8xMDAsbi5sPVMobi5sKSxyKG4pfWZ1bmN0aW9uIHAoZSx0KXt0PTA9PT10PzA6dHx8MTA7dmFyIG49cihlKS50b1JnYigpO3JldHVybiBuLnI9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsbi5yLU1hdGgucm91bmQoLXQvMTAwKjI1NSkpKSxuLmc9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsbi5nLU1hdGgucm91bmQoLXQvMTAwKjI1NSkpKSxuLmI9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsbi5iLU1hdGgucm91bmQoLXQvMTAwKjI1NSkpKSxyKG4pfWZ1bmN0aW9uIGYoZSx0KXt0PTA9PT10PzA6dHx8MTA7dmFyIG49cihlKS50b0hzbCgpO3JldHVybiBuLmwtPXQvMTAwLG4ubD1TKG4ubCkscihuKX1mdW5jdGlvbiBoKGUsdCl7dmFyIG49cihlKS50b0hzbCgpLG89KG4uaCt0KSUzNjA7cmV0dXJuIG4uaD1vPDA/MzYwK286byxyKG4pfWZ1bmN0aW9uIGcoZSl7dmFyIHQ9cihlKS50b0hzbCgpO3JldHVybiB0Lmg9KHQuaCsxODApJTM2MCxyKHQpfWZ1bmN0aW9uIHYoZSx0KXtpZihpc05hTih0KXx8dDw9MCl0aHJvdyBuZXcgRXJyb3IoXCJBcmd1bWVudCB0byBwb2x5YWQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlclwiKTtmb3IodmFyIG49cihlKS50b0hzbCgpLG89W3IoZSldLGE9MzYwL3QsaT0xO2k8dDtpKyspby5wdXNoKHIoe2g6KG4uaCtpKmEpJTM2MCxzOm4ucyxsOm4ubH0pKTtyZXR1cm4gb31mdW5jdGlvbiBDKGUpe3ZhciB0PXIoZSkudG9Ic2woKSxuPXQuaDtyZXR1cm5bcihlKSxyKHtoOihuKzcyKSUzNjAsczp0LnMsbDp0Lmx9KSxyKHtoOihuKzIxNiklMzYwLHM6dC5zLGw6dC5sfSldfWZ1bmN0aW9uIG0oZSx0LG4pe3Q9dHx8NixuPW58fDMwO3ZhciBvPXIoZSkudG9Ic2woKSxhPTM2MC9uLGk9W3IoZSldO2ZvcihvLmg9KG8uaC0oYSp0Pj4xKSs3MjApJTM2MDstLXQ7KW8uaD0oby5oK2EpJTM2MCxpLnB1c2gocihvKSk7cmV0dXJuIGl9ZnVuY3Rpb24gdyhlLHQpe3Q9dHx8Njtmb3IodmFyIG49cihlKS50b0hzdigpLG89bi5oLGE9bi5zLGk9bi52LGw9W10scz0xL3Q7dC0tOylsLnB1c2gocih7aDpvLHM6YSx2Oml9KSksaT0oaStzKSUxO3JldHVybiBsfXIucHJvdG90eXBlPXtpc0Rhcms6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRCcmlnaHRuZXNzKCk8MTI4fSxpc0xpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNEYXJrKCl9LGlzVmFsaWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb2t9LGdldE9yaWdpbmFsSW5wdXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb3JpZ2luYWxJbnB1dH0sZ2V0Rm9ybWF0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Zvcm1hdH0sZ2V0QWxwaGE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYX0sZ2V0QnJpZ2h0bmVzczpmdW5jdGlvbigpe3ZhciBlPXRoaXMudG9SZ2IoKTtyZXR1cm4oMjk5KmUucis1ODcqZS5nKzExNCplLmIpLzFlM30sZ2V0THVtaW5hbmNlOmZ1bmN0aW9uKCl7dmFyIGUsdCxuLHI9dGhpcy50b1JnYigpO3JldHVybiBlPXIuci8yNTUsdD1yLmcvMjU1LG49ci5iLzI1NSwuMjEyNiooZTw9LjAzOTI4P2UvMTIuOTI6TWF0aC5wb3coKGUrLjA1NSkvMS4wNTUsMi40KSkrLjcxNTIqKHQ8PS4wMzkyOD90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCkpKy4wNzIyKihuPD0uMDM5Mjg/bi8xMi45MjpNYXRoLnBvdygobisuMDU1KS8xLjA1NSwyLjQpKX0sc2V0QWxwaGE6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2E9eChlKSx0aGlzLl9yb3VuZEE9TWF0aC5yb3VuZCgxMDAqdGhpcy5fYSkvMTAwLHRoaXN9LHRvSHN2OmZ1bmN0aW9uKCl7dmFyIGU9YSh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYik7cmV0dXJue2g6MzYwKmUuaCxzOmUucyx2OmUudixhOnRoaXMuX2F9fSx0b0hzdlN0cmluZzpmdW5jdGlvbigpe3ZhciBlPWEodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpLHQ9TWF0aC5yb3VuZCgzNjAqZS5oKSxuPU1hdGgucm91bmQoMTAwKmUucykscj1NYXRoLnJvdW5kKDEwMCplLnYpO3JldHVybiAxPT10aGlzLl9hP1wiaHN2KFwiK3QrXCIsIFwiK24rXCIlLCBcIityK1wiJSlcIjpcImhzdmEoXCIrdCtcIiwgXCIrbitcIiUsIFwiK3IrXCIlLCBcIit0aGlzLl9yb3VuZEErXCIpXCJ9LHRvSHNsOmZ1bmN0aW9uKCl7dmFyIGU9byh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYik7cmV0dXJue2g6MzYwKmUuaCxzOmUucyxsOmUubCxhOnRoaXMuX2F9fSx0b0hzbFN0cmluZzpmdW5jdGlvbigpe3ZhciBlPW8odGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpLHQ9TWF0aC5yb3VuZCgzNjAqZS5oKSxuPU1hdGgucm91bmQoMTAwKmUucykscj1NYXRoLnJvdW5kKDEwMCplLmwpO3JldHVybiAxPT10aGlzLl9hP1wiaHNsKFwiK3QrXCIsIFwiK24rXCIlLCBcIityK1wiJSlcIjpcImhzbGEoXCIrdCtcIiwgXCIrbitcIiUsIFwiK3IrXCIlLCBcIit0aGlzLl9yb3VuZEErXCIpXCJ9LHRvSGV4OmZ1bmN0aW9uKGUpe3JldHVybiBpKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLGUpfSx0b0hleFN0cmluZzpmdW5jdGlvbihlKXtyZXR1cm5cIiNcIit0aGlzLnRvSGV4KGUpfSx0b0hleDg6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIGE9W00oTWF0aC5yb3VuZChlKS50b1N0cmluZygxNikpLE0oTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNikpLE0oTWF0aC5yb3VuZChuKS50b1N0cmluZygxNikpLE0oXyhyKSldO3JldHVybiBvJiZhWzBdLmNoYXJBdCgwKT09YVswXS5jaGFyQXQoMSkmJmFbMV0uY2hhckF0KDApPT1hWzFdLmNoYXJBdCgxKSYmYVsyXS5jaGFyQXQoMCk9PWFbMl0uY2hhckF0KDEpJiZhWzNdLmNoYXJBdCgwKT09YVszXS5jaGFyQXQoMSk/YVswXS5jaGFyQXQoMCkrYVsxXS5jaGFyQXQoMCkrYVsyXS5jaGFyQXQoMCkrYVszXS5jaGFyQXQoMCk6YS5qb2luKFwiXCIpfSh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYix0aGlzLl9hLGUpfSx0b0hleDhTdHJpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuXCIjXCIrdGhpcy50b0hleDgoZSl9LHRvUmdiOmZ1bmN0aW9uKCl7cmV0dXJue3I6TWF0aC5yb3VuZCh0aGlzLl9yKSxnOk1hdGgucm91bmQodGhpcy5fZyksYjpNYXRoLnJvdW5kKHRoaXMuX2IpLGE6dGhpcy5fYX19LHRvUmdiU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIDE9PXRoaXMuX2E/XCJyZ2IoXCIrTWF0aC5yb3VuZCh0aGlzLl9yKStcIiwgXCIrTWF0aC5yb3VuZCh0aGlzLl9nKStcIiwgXCIrTWF0aC5yb3VuZCh0aGlzLl9iKStcIilcIjpcInJnYmEoXCIrTWF0aC5yb3VuZCh0aGlzLl9yKStcIiwgXCIrTWF0aC5yb3VuZCh0aGlzLl9nKStcIiwgXCIrTWF0aC5yb3VuZCh0aGlzLl9iKStcIiwgXCIrdGhpcy5fcm91bmRBK1wiKVwifSx0b1BlcmNlbnRhZ2VSZ2I6ZnVuY3Rpb24oKXtyZXR1cm57cjpNYXRoLnJvdW5kKDEwMCprKHRoaXMuX3IsMjU1KSkrXCIlXCIsZzpNYXRoLnJvdW5kKDEwMCprKHRoaXMuX2csMjU1KSkrXCIlXCIsYjpNYXRoLnJvdW5kKDEwMCprKHRoaXMuX2IsMjU1KSkrXCIlXCIsYTp0aGlzLl9hfX0sdG9QZXJjZW50YWdlUmdiU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIDE9PXRoaXMuX2E/XCJyZ2IoXCIrTWF0aC5yb3VuZCgxMDAqayh0aGlzLl9yLDI1NSkpK1wiJSwgXCIrTWF0aC5yb3VuZCgxMDAqayh0aGlzLl9nLDI1NSkpK1wiJSwgXCIrTWF0aC5yb3VuZCgxMDAqayh0aGlzLl9iLDI1NSkpK1wiJSlcIjpcInJnYmEoXCIrTWF0aC5yb3VuZCgxMDAqayh0aGlzLl9yLDI1NSkpK1wiJSwgXCIrTWF0aC5yb3VuZCgxMDAqayh0aGlzLl9nLDI1NSkpK1wiJSwgXCIrTWF0aC5yb3VuZCgxMDAqayh0aGlzLl9iLDI1NSkpK1wiJSwgXCIrdGhpcy5fcm91bmRBK1wiKVwifSx0b05hbWU6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuX2E/XCJ0cmFuc3BhcmVudFwiOiEodGhpcy5fYTwxKSYmKHlbaSh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYiwhMCldfHwhMSl9LHRvRmlsdGVyOmZ1bmN0aW9uKGUpe3ZhciB0PVwiI1wiK2wodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IsdGhpcy5fYSksbj10LG89dGhpcy5fZ3JhZGllbnRUeXBlP1wiR3JhZGllbnRUeXBlID0gMSwgXCI6XCJcIjtpZihlKXt2YXIgYT1yKGUpO249XCIjXCIrbChhLl9yLGEuX2csYS5fYixhLl9hKX1yZXR1cm5cInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChcIitvK1wic3RhcnRDb2xvcnN0cj1cIit0K1wiLGVuZENvbG9yc3RyPVwiK24rXCIpXCJ9LHRvU3RyaW5nOmZ1bmN0aW9uKGUpe3ZhciB0PSEhZTtlPWV8fHRoaXMuX2Zvcm1hdDt2YXIgbj0hMSxyPXRoaXMuX2E8MSYmdGhpcy5fYT49MDtyZXR1cm4gdHx8IXJ8fFwiaGV4XCIhPT1lJiZcImhleDZcIiE9PWUmJlwiaGV4M1wiIT09ZSYmXCJoZXg0XCIhPT1lJiZcImhleDhcIiE9PWUmJlwibmFtZVwiIT09ZT8oXCJyZ2JcIj09PWUmJihuPXRoaXMudG9SZ2JTdHJpbmcoKSksXCJwcmdiXCI9PT1lJiYobj10aGlzLnRvUGVyY2VudGFnZVJnYlN0cmluZygpKSxcImhleFwiIT09ZSYmXCJoZXg2XCIhPT1lfHwobj10aGlzLnRvSGV4U3RyaW5nKCkpLFwiaGV4M1wiPT09ZSYmKG49dGhpcy50b0hleFN0cmluZyghMCkpLFwiaGV4NFwiPT09ZSYmKG49dGhpcy50b0hleDhTdHJpbmcoITApKSxcImhleDhcIj09PWUmJihuPXRoaXMudG9IZXg4U3RyaW5nKCkpLFwibmFtZVwiPT09ZSYmKG49dGhpcy50b05hbWUoKSksXCJoc2xcIj09PWUmJihuPXRoaXMudG9Ic2xTdHJpbmcoKSksXCJoc3ZcIj09PWUmJihuPXRoaXMudG9Ic3ZTdHJpbmcoKSksbnx8dGhpcy50b0hleFN0cmluZygpKTpcIm5hbWVcIj09PWUmJjA9PT10aGlzLl9hP3RoaXMudG9OYW1lKCk6dGhpcy50b1JnYlN0cmluZygpfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiByKHRoaXMudG9TdHJpbmcoKSl9LF9hcHBseU1vZGlmaWNhdGlvbjpmdW5jdGlvbihlLHQpe3ZhciBuPWUuYXBwbHkobnVsbCxbdGhpc10uY29uY2F0KFtdLnNsaWNlLmNhbGwodCkpKTtyZXR1cm4gdGhpcy5fcj1uLl9yLHRoaXMuX2c9bi5fZyx0aGlzLl9iPW4uX2IsdGhpcy5zZXRBbHBoYShuLl9hKSx0aGlzfSxsaWdodGVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGQsYXJndW1lbnRzKX0sYnJpZ2h0ZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24ocCxhcmd1bWVudHMpfSxkYXJrZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oZixhcmd1bWVudHMpfSxkZXNhdHVyYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKHMsYXJndW1lbnRzKX0sc2F0dXJhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oYyxhcmd1bWVudHMpfSxncmV5c2NhbGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24odSxhcmd1bWVudHMpfSxzcGluOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGgsYXJndW1lbnRzKX0sX2FwcGx5Q29tYmluYXRpb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5hcHBseShudWxsLFt0aGlzXS5jb25jYXQoW10uc2xpY2UuY2FsbCh0KSkpfSxhbmFsb2dvdXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihtLGFyZ3VtZW50cyl9LGNvbXBsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihnLGFyZ3VtZW50cyl9LG1vbm9jaHJvbWF0aWM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbih3LGFyZ3VtZW50cyl9LHNwbGl0Y29tcGxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKEMsYXJndW1lbnRzKX0sdHJpYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbih2LFszXSl9LHRldHJhZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKHYsWzRdKX19LHIuZnJvbVJhdGlvPWZ1bmN0aW9uKHQsbil7aWYoXCJvYmplY3RcIj09ZSh0KSl7dmFyIG89e307Zm9yKHZhciBhIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShhKSYmKG9bYV09XCJhXCI9PT1hP3RbYV06TCh0W2FdKSk7dD1vfXJldHVybiByKHQsbil9LHIuZXF1YWxzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuISghZXx8IXQpJiZyKGUpLnRvUmdiU3RyaW5nKCk9PXIodCkudG9SZ2JTdHJpbmcoKX0sci5yYW5kb209ZnVuY3Rpb24oKXtyZXR1cm4gci5mcm9tUmF0aW8oe3I6TWF0aC5yYW5kb20oKSxnOk1hdGgucmFuZG9tKCksYjpNYXRoLnJhbmRvbSgpfSl9LHIubWl4PWZ1bmN0aW9uKGUsdCxuKXtuPTA9PT1uPzA6bnx8NTA7dmFyIG89cihlKS50b1JnYigpLGE9cih0KS50b1JnYigpLGk9bi8xMDA7cmV0dXJuIHIoe3I6KGEuci1vLnIpKmkrby5yLGc6KGEuZy1vLmcpKmkrby5nLGI6KGEuYi1vLmIpKmkrby5iLGE6KGEuYS1vLmEpKmkrby5hfSl9LHIucmVhZGFiaWxpdHk9ZnVuY3Rpb24oZSx0KXt2YXIgbj1yKGUpLG89cih0KTtyZXR1cm4oTWF0aC5tYXgobi5nZXRMdW1pbmFuY2UoKSxvLmdldEx1bWluYW5jZSgpKSsuMDUpLyhNYXRoLm1pbihuLmdldEx1bWluYW5jZSgpLG8uZ2V0THVtaW5hbmNlKCkpKy4wNSl9LHIuaXNSZWFkYWJsZT1mdW5jdGlvbihlLHQsbil7dmFyIG8sYSxpLGwscyxjPXIucmVhZGFiaWxpdHkoZSx0KTtzd2l0Y2goYT0hMSwoaT1uLFwiQUFcIiE9PShsPSgoaT1pfHx7bGV2ZWw6XCJBQVwiLHNpemU6XCJzbWFsbFwifSkubGV2ZWx8fFwiQUFcIikudG9VcHBlckNhc2UoKSkmJlwiQUFBXCIhPT1sJiYobD1cIkFBXCIpLFwic21hbGxcIiE9PShzPShpLnNpemV8fFwic21hbGxcIikudG9Mb3dlckNhc2UoKSkmJlwibGFyZ2VcIiE9PXMmJihzPVwic21hbGxcIiksbz17bGV2ZWw6bCxzaXplOnN9KS5sZXZlbCtvLnNpemUpe2Nhc2VcIkFBc21hbGxcIjpjYXNlXCJBQUFsYXJnZVwiOmE9Yz49NC41O2JyZWFrO2Nhc2VcIkFBbGFyZ2VcIjphPWM+PTM7YnJlYWs7Y2FzZVwiQUFBc21hbGxcIjphPWM+PTd9cmV0dXJuIGF9LHIubW9zdFJlYWRhYmxlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgbyxhLGksbCxzPW51bGwsYz0wO2E9KG49bnx8e30pLmluY2x1ZGVGYWxsYmFja0NvbG9ycyxpPW4ubGV2ZWwsbD1uLnNpemU7Zm9yKHZhciB1PTA7dTx0Lmxlbmd0aDt1KyspKG89ci5yZWFkYWJpbGl0eShlLHRbdV0pKT5jJiYoYz1vLHM9cih0W3VdKSk7cmV0dXJuIHIuaXNSZWFkYWJsZShlLHMse2xldmVsOmksc2l6ZTpsfSl8fCFhP3M6KG4uaW5jbHVkZUZhbGxiYWNrQ29sb3JzPSExLHIubW9zdFJlYWRhYmxlKGUsW1wiI2ZmZlwiLFwiIzAwMFwiXSxuKSl9O3ZhciBiPXIubmFtZXM9e2FsaWNlYmx1ZTpcImYwZjhmZlwiLGFudGlxdWV3aGl0ZTpcImZhZWJkN1wiLGFxdWE6XCIwZmZcIixhcXVhbWFyaW5lOlwiN2ZmZmQ0XCIsYXp1cmU6XCJmMGZmZmZcIixiZWlnZTpcImY1ZjVkY1wiLGJpc3F1ZTpcImZmZTRjNFwiLGJsYWNrOlwiMDAwXCIsYmxhbmNoZWRhbG1vbmQ6XCJmZmViY2RcIixibHVlOlwiMDBmXCIsYmx1ZXZpb2xldDpcIjhhMmJlMlwiLGJyb3duOlwiYTUyYTJhXCIsYnVybHl3b29kOlwiZGViODg3XCIsYnVybnRzaWVubmE6XCJlYTdlNWRcIixjYWRldGJsdWU6XCI1ZjllYTBcIixjaGFydHJldXNlOlwiN2ZmZjAwXCIsY2hvY29sYXRlOlwiZDI2OTFlXCIsY29yYWw6XCJmZjdmNTBcIixjb3JuZmxvd2VyYmx1ZTpcIjY0OTVlZFwiLGNvcm5zaWxrOlwiZmZmOGRjXCIsY3JpbXNvbjpcImRjMTQzY1wiLGN5YW46XCIwZmZcIixkYXJrYmx1ZTpcIjAwMDA4YlwiLGRhcmtjeWFuOlwiMDA4YjhiXCIsZGFya2dvbGRlbnJvZDpcImI4ODYwYlwiLGRhcmtncmF5OlwiYTlhOWE5XCIsZGFya2dyZWVuOlwiMDA2NDAwXCIsZGFya2dyZXk6XCJhOWE5YTlcIixkYXJra2hha2k6XCJiZGI3NmJcIixkYXJrbWFnZW50YTpcIjhiMDA4YlwiLGRhcmtvbGl2ZWdyZWVuOlwiNTU2YjJmXCIsZGFya29yYW5nZTpcImZmOGMwMFwiLGRhcmtvcmNoaWQ6XCI5OTMyY2NcIixkYXJrcmVkOlwiOGIwMDAwXCIsZGFya3NhbG1vbjpcImU5OTY3YVwiLGRhcmtzZWFncmVlbjpcIjhmYmM4ZlwiLGRhcmtzbGF0ZWJsdWU6XCI0ODNkOGJcIixkYXJrc2xhdGVncmF5OlwiMmY0ZjRmXCIsZGFya3NsYXRlZ3JleTpcIjJmNGY0ZlwiLGRhcmt0dXJxdW9pc2U6XCIwMGNlZDFcIixkYXJrdmlvbGV0OlwiOTQwMGQzXCIsZGVlcHBpbms6XCJmZjE0OTNcIixkZWVwc2t5Ymx1ZTpcIjAwYmZmZlwiLGRpbWdyYXk6XCI2OTY5NjlcIixkaW1ncmV5OlwiNjk2OTY5XCIsZG9kZ2VyYmx1ZTpcIjFlOTBmZlwiLGZpcmVicmljazpcImIyMjIyMlwiLGZsb3JhbHdoaXRlOlwiZmZmYWYwXCIsZm9yZXN0Z3JlZW46XCIyMjhiMjJcIixmdWNoc2lhOlwiZjBmXCIsZ2FpbnNib3JvOlwiZGNkY2RjXCIsZ2hvc3R3aGl0ZTpcImY4ZjhmZlwiLGdvbGQ6XCJmZmQ3MDBcIixnb2xkZW5yb2Q6XCJkYWE1MjBcIixncmF5OlwiODA4MDgwXCIsZ3JlZW46XCIwMDgwMDBcIixncmVlbnllbGxvdzpcImFkZmYyZlwiLGdyZXk6XCI4MDgwODBcIixob25leWRldzpcImYwZmZmMFwiLGhvdHBpbms6XCJmZjY5YjRcIixpbmRpYW5yZWQ6XCJjZDVjNWNcIixpbmRpZ286XCI0YjAwODJcIixpdm9yeTpcImZmZmZmMFwiLGtoYWtpOlwiZjBlNjhjXCIsbGF2ZW5kZXI6XCJlNmU2ZmFcIixsYXZlbmRlcmJsdXNoOlwiZmZmMGY1XCIsbGF3bmdyZWVuOlwiN2NmYzAwXCIsbGVtb25jaGlmZm9uOlwiZmZmYWNkXCIsbGlnaHRibHVlOlwiYWRkOGU2XCIsbGlnaHRjb3JhbDpcImYwODA4MFwiLGxpZ2h0Y3lhbjpcImUwZmZmZlwiLGxpZ2h0Z29sZGVucm9keWVsbG93OlwiZmFmYWQyXCIsbGlnaHRncmF5OlwiZDNkM2QzXCIsbGlnaHRncmVlbjpcIjkwZWU5MFwiLGxpZ2h0Z3JleTpcImQzZDNkM1wiLGxpZ2h0cGluazpcImZmYjZjMVwiLGxpZ2h0c2FsbW9uOlwiZmZhMDdhXCIsbGlnaHRzZWFncmVlbjpcIjIwYjJhYVwiLGxpZ2h0c2t5Ymx1ZTpcIjg3Y2VmYVwiLGxpZ2h0c2xhdGVncmF5OlwiNzg5XCIsbGlnaHRzbGF0ZWdyZXk6XCI3ODlcIixsaWdodHN0ZWVsYmx1ZTpcImIwYzRkZVwiLGxpZ2h0eWVsbG93OlwiZmZmZmUwXCIsbGltZTpcIjBmMFwiLGxpbWVncmVlbjpcIjMyY2QzMlwiLGxpbmVuOlwiZmFmMGU2XCIsbWFnZW50YTpcImYwZlwiLG1hcm9vbjpcIjgwMDAwMFwiLG1lZGl1bWFxdWFtYXJpbmU6XCI2NmNkYWFcIixtZWRpdW1ibHVlOlwiMDAwMGNkXCIsbWVkaXVtb3JjaGlkOlwiYmE1NWQzXCIsbWVkaXVtcHVycGxlOlwiOTM3MGRiXCIsbWVkaXVtc2VhZ3JlZW46XCIzY2IzNzFcIixtZWRpdW1zbGF0ZWJsdWU6XCI3YjY4ZWVcIixtZWRpdW1zcHJpbmdncmVlbjpcIjAwZmE5YVwiLG1lZGl1bXR1cnF1b2lzZTpcIjQ4ZDFjY1wiLG1lZGl1bXZpb2xldHJlZDpcImM3MTU4NVwiLG1pZG5pZ2h0Ymx1ZTpcIjE5MTk3MFwiLG1pbnRjcmVhbTpcImY1ZmZmYVwiLG1pc3R5cm9zZTpcImZmZTRlMVwiLG1vY2Nhc2luOlwiZmZlNGI1XCIsbmF2YWpvd2hpdGU6XCJmZmRlYWRcIixuYXZ5OlwiMDAwMDgwXCIsb2xkbGFjZTpcImZkZjVlNlwiLG9saXZlOlwiODA4MDAwXCIsb2xpdmVkcmFiOlwiNmI4ZTIzXCIsb3JhbmdlOlwiZmZhNTAwXCIsb3JhbmdlcmVkOlwiZmY0NTAwXCIsb3JjaGlkOlwiZGE3MGQ2XCIscGFsZWdvbGRlbnJvZDpcImVlZThhYVwiLHBhbGVncmVlbjpcIjk4ZmI5OFwiLHBhbGV0dXJxdW9pc2U6XCJhZmVlZWVcIixwYWxldmlvbGV0cmVkOlwiZGI3MDkzXCIscGFwYXlhd2hpcDpcImZmZWZkNVwiLHBlYWNocHVmZjpcImZmZGFiOVwiLHBlcnU6XCJjZDg1M2ZcIixwaW5rOlwiZmZjMGNiXCIscGx1bTpcImRkYTBkZFwiLHBvd2RlcmJsdWU6XCJiMGUwZTZcIixwdXJwbGU6XCI4MDAwODBcIixyZWJlY2NhcHVycGxlOlwiNjYzMzk5XCIscmVkOlwiZjAwXCIscm9zeWJyb3duOlwiYmM4ZjhmXCIscm95YWxibHVlOlwiNDE2OWUxXCIsc2FkZGxlYnJvd246XCI4YjQ1MTNcIixzYWxtb246XCJmYTgwNzJcIixzYW5keWJyb3duOlwiZjRhNDYwXCIsc2VhZ3JlZW46XCIyZThiNTdcIixzZWFzaGVsbDpcImZmZjVlZVwiLHNpZW5uYTpcImEwNTIyZFwiLHNpbHZlcjpcImMwYzBjMFwiLHNreWJsdWU6XCI4N2NlZWJcIixzbGF0ZWJsdWU6XCI2YTVhY2RcIixzbGF0ZWdyYXk6XCI3MDgwOTBcIixzbGF0ZWdyZXk6XCI3MDgwOTBcIixzbm93OlwiZmZmYWZhXCIsc3ByaW5nZ3JlZW46XCIwMGZmN2ZcIixzdGVlbGJsdWU6XCI0NjgyYjRcIix0YW46XCJkMmI0OGNcIix0ZWFsOlwiMDA4MDgwXCIsdGhpc3RsZTpcImQ4YmZkOFwiLHRvbWF0bzpcImZmNjM0N1wiLHR1cnF1b2lzZTpcIjQwZTBkMFwiLHZpb2xldDpcImVlODJlZVwiLHdoZWF0OlwiZjVkZWIzXCIsd2hpdGU6XCJmZmZcIix3aGl0ZXNtb2tlOlwiZjVmNWY1XCIseWVsbG93OlwiZmYwXCIseWVsbG93Z3JlZW46XCI5YWNkMzJcIn0seT1yLmhleE5hbWVzPWZ1bmN0aW9uKGUpe3ZhciB0PXt9O2Zvcih2YXIgbiBpbiBlKWUuaGFzT3duUHJvcGVydHkobikmJih0W2Vbbl1dPW4pO3JldHVybiB0fShiKTtmdW5jdGlvbiB4KGUpe3JldHVybiBlPXBhcnNlRmxvYXQoZSksKGlzTmFOKGUpfHxlPDB8fGU+MSkmJihlPTEpLGV9ZnVuY3Rpb24gayhlLHQpeyhmdW5jdGlvbihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZSYmLTEhPWUuaW5kZXhPZihcIi5cIikmJjE9PT1wYXJzZUZsb2F0KGUpfSkoZSkmJihlPVwiMTAwJVwiKTt2YXIgbj1mdW5jdGlvbihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZSYmLTEhPWUuaW5kZXhPZihcIiVcIil9KGUpO3JldHVybiBlPU1hdGgubWluKHQsTWF0aC5tYXgoMCxwYXJzZUZsb2F0KGUpKSksbiYmKGU9cGFyc2VJbnQoZSp0LDEwKS8xMDApLE1hdGguYWJzKGUtdCk8MWUtNj8xOmUldC9wYXJzZUZsb2F0KHQpfWZ1bmN0aW9uIFMoZSl7cmV0dXJuIE1hdGgubWluKDEsTWF0aC5tYXgoMCxlKSl9ZnVuY3Rpb24gTyhlKXtyZXR1cm4gcGFyc2VJbnQoZSwxNil9ZnVuY3Rpb24gTShlKXtyZXR1cm4gMT09ZS5sZW5ndGg/XCIwXCIrZTpcIlwiK2V9ZnVuY3Rpb24gTChlKXtyZXR1cm4gZTw9MSYmKGU9MTAwKmUrXCIlXCIpLGV9ZnVuY3Rpb24gXyhlKXtyZXR1cm4gTWF0aC5yb3VuZCgyNTUqcGFyc2VGbG9hdChlKSkudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIFAoZSl7cmV0dXJuIE8oZSkvMjU1fXZhciBFLGosUixJPShqPVwiW1xcXFxzfFxcXFwoXSsoXCIrKEU9XCIoPzpbLVxcXFwrXT9cXFxcZCpcXFxcLlxcXFxkKyU/KXwoPzpbLVxcXFwrXT9cXFxcZCslPylcIikrXCIpWyx8XFxcXHNdKyhcIitFK1wiKVssfFxcXFxzXSsoXCIrRStcIilcXFxccypcXFxcKT9cIixSPVwiW1xcXFxzfFxcXFwoXSsoXCIrRStcIilbLHxcXFxcc10rKFwiK0UrXCIpWyx8XFxcXHNdKyhcIitFK1wiKVssfFxcXFxzXSsoXCIrRStcIilcXFxccypcXFxcKT9cIix7Q1NTX1VOSVQ6bmV3IFJlZ0V4cChFKSxyZ2I6bmV3IFJlZ0V4cChcInJnYlwiK2opLHJnYmE6bmV3IFJlZ0V4cChcInJnYmFcIitSKSxoc2w6bmV3IFJlZ0V4cChcImhzbFwiK2opLGhzbGE6bmV3IFJlZ0V4cChcImhzbGFcIitSKSxoc3Y6bmV3IFJlZ0V4cChcImhzdlwiK2opLGhzdmE6bmV3IFJlZ0V4cChcImhzdmFcIitSKSxoZXgzOi9eIz8oWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkkLyxoZXg2Oi9eIz8oWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkkLyxoZXg0Oi9eIz8oWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pJC8saGV4ODovXiM/KFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KSQvfSk7ZnVuY3Rpb24gVihlKXtyZXR1cm4hIUkuQ1NTX1VOSVQuZXhlYyhlKX1yZXR1cm4gcn0oKX19LG89e307ZnVuY3Rpb24gYShlKXt2YXIgdD1vW2VdO2lmKHZvaWQgMCE9PXQpcmV0dXJuIHQuZXhwb3J0czt2YXIgbj1vW2VdPXtpZDplLGxvYWRlZDohMSxleHBvcnRzOnt9fTtyZXR1cm4gcltlXS5jYWxsKG4uZXhwb3J0cyxuLG4uZXhwb3J0cyxhKSxuLmxvYWRlZD0hMCxuLmV4cG9ydHN9YS5uPWU9Pnt2YXIgdD1lJiZlLl9fZXNNb2R1bGU/KCk9PmUuZGVmYXVsdDooKT0+ZTtyZXR1cm4gYS5kKHQse2E6dH0pLHR9LGEuZD0oZSx0KT0+e2Zvcih2YXIgbiBpbiB0KWEubyh0LG4pJiYhYS5vKGUsbikmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITAsZ2V0OnRbbl19KX0sYS5nPWZ1bmN0aW9uKCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGdsb2JhbFRoaXMpcmV0dXJuIGdsb2JhbFRoaXM7dHJ5e3JldHVybiB0aGlzfHxuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpfWNhdGNoKGUpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvd319KCksYS5vPShlLHQpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KSxhLnI9ZT0+e1widW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZTpcIk1vZHVsZVwifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LGEubm1kPWU9PihlLnBhdGhzPVtdLGUuY2hpbGRyZW58fChlLmNoaWxkcmVuPVtdKSxlKTt2YXIgaT1hKDM0MSksbD10O2Zvcih2YXIgcyBpbiBpKWxbc109aVtzXTtpLl9fZXNNb2R1bGUmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSwxOTg6KGUsdCxuKT0+e3ZhciByPU5hTixvPVwiW29iamVjdCBTeW1ib2xdXCIsYT0vXlxccyt8XFxzKyQvZyxpPS9eWy0rXTB4WzAtOWEtZl0rJC9pLGw9L14wYlswMV0rJC9pLHM9L14wb1swLTddKyQvaSxjPXBhcnNlSW50LHU9XCJvYmplY3RcIj09dHlwZW9mIG4uZyYmbi5nJiZuLmcuT2JqZWN0PT09T2JqZWN0JiZuLmcsZD1cIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYscD11fHxkfHxGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCksZj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGg9TWF0aC5tYXgsZz1NYXRoLm1pbix2PWZ1bmN0aW9uKCl7cmV0dXJuIHAuRGF0ZS5ub3coKX07ZnVuY3Rpb24gQyhlKXt2YXIgdD10eXBlb2YgZTtyZXR1cm4hIWUmJihcIm9iamVjdFwiPT10fHxcImZ1bmN0aW9uXCI9PXQpfWZ1bmN0aW9uIG0oZSl7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpcmV0dXJuIGU7aWYoZnVuY3Rpb24oZSl7cmV0dXJuXCJzeW1ib2xcIj09dHlwZW9mIGV8fGZ1bmN0aW9uKGUpe3JldHVybiEhZSYmXCJvYmplY3RcIj09dHlwZW9mIGV9KGUpJiZmLmNhbGwoZSk9PW99KGUpKXJldHVybiByO2lmKEMoZSkpe3ZhciB0PVwiZnVuY3Rpb25cIj09dHlwZW9mIGUudmFsdWVPZj9lLnZhbHVlT2YoKTplO2U9Qyh0KT90K1wiXCI6dH1pZihcInN0cmluZ1wiIT10eXBlb2YgZSlyZXR1cm4gMD09PWU/ZTorZTtlPWUucmVwbGFjZShhLFwiXCIpO3ZhciBuPWwudGVzdChlKTtyZXR1cm4gbnx8cy50ZXN0KGUpP2MoZS5zbGljZSgyKSxuPzI6OCk6aS50ZXN0KGUpP3I6K2V9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvLGEsaSxsLHMsYz0wLHU9ITEsZD0hMSxwPSEwO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGEgZnVuY3Rpb25cIik7ZnVuY3Rpb24gZih0KXt2YXIgbj1yLGE9bztyZXR1cm4gcj1vPXZvaWQgMCxjPXQsaT1lLmFwcGx5KGEsbil9ZnVuY3Rpb24gdyhlKXt2YXIgbj1lLXM7cmV0dXJuIHZvaWQgMD09PXN8fG4+PXR8fG48MHx8ZCYmZS1jPj1hfWZ1bmN0aW9uIGIoKXt2YXIgZT12KCk7aWYodyhlKSlyZXR1cm4geShlKTtsPXNldFRpbWVvdXQoYixmdW5jdGlvbihlKXt2YXIgbj10LShlLXMpO3JldHVybiBkP2cobixhLShlLWMpKTpufShlKSl9ZnVuY3Rpb24geShlKXtyZXR1cm4gbD12b2lkIDAscCYmcj9mKGUpOihyPW89dm9pZCAwLGkpfWZ1bmN0aW9uIHgoKXt2YXIgZT12KCksbj13KGUpO2lmKHI9YXJndW1lbnRzLG89dGhpcyxzPWUsbil7aWYodm9pZCAwPT09bClyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGM9ZSxsPXNldFRpbWVvdXQoYix0KSx1P2YoZSk6aX0ocyk7aWYoZClyZXR1cm4gbD1zZXRUaW1lb3V0KGIsdCksZihzKX1yZXR1cm4gdm9pZCAwPT09bCYmKGw9c2V0VGltZW91dChiLHQpKSxpfXJldHVybiB0PW0odCl8fDAsQyhuKSYmKHU9ISFuLmxlYWRpbmcsYT0oZD1cIm1heFdhaXRcImluIG4pP2gobShuLm1heFdhaXQpfHwwLHQpOmEscD1cInRyYWlsaW5nXCJpbiBuPyEhbi50cmFpbGluZzpwKSx4LmNhbmNlbD1mdW5jdGlvbigpe3ZvaWQgMCE9PWwmJmNsZWFyVGltZW91dChsKSxjPTAscj1zPW89bD12b2lkIDB9LHguZmx1c2g9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09bD9pOnkodigpKX0seH19LDUyNTplPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIHQ9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxuPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkscj1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO2UuZXhwb3J0cz1mdW5jdGlvbigpe3RyeXtpZighT2JqZWN0LmFzc2lnbilyZXR1cm4hMTt2YXIgZT1uZXcgU3RyaW5nKFwiYWJjXCIpO2lmKGVbNV09XCJkZVwiLFwiNVwiPT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSlbMF0pcmV0dXJuITE7Zm9yKHZhciB0PXt9LG49MDtuPDEwO24rKyl0W1wiX1wiK1N0cmluZy5mcm9tQ2hhckNvZGUobildPW47aWYoXCIwMTIzNDU2Nzg5XCIhPT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSkpLmpvaW4oXCJcIikpcmV0dXJuITE7dmFyIHI9e307cmV0dXJuXCJhYmNkZWZnaGlqa2xtbm9wcXJzdFwiLnNwbGl0KFwiXCIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JbZV09ZX0pKSxcImFiY2RlZmdoaWprbG1ub3BxcnN0XCI9PT1PYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LHIpKS5qb2luKFwiXCIpfWNhdGNoKGUpe3JldHVybiExfX0oKT9PYmplY3QuYXNzaWduOmZ1bmN0aW9uKGUsbyl7Zm9yKHZhciBhLGksbD1mdW5jdGlvbihlKXtpZihudWxsPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZFwiKTtyZXR1cm4gT2JqZWN0KGUpfShlKSxzPTE7czxhcmd1bWVudHMubGVuZ3RoO3MrKyl7Zm9yKHZhciBjIGluIGE9T2JqZWN0KGFyZ3VtZW50c1tzXSkpbi5jYWxsKGEsYykmJihsW2NdPWFbY10pO2lmKHQpe2k9dChhKTtmb3IodmFyIHU9MDt1PGkubGVuZ3RoO3UrKylyLmNhbGwoYSxpW3VdKSYmKGxbaVt1XV09YVtpW3VdXSl9fXJldHVybiBsfX0sNzAyOihlLHQpPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIG49XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yLHI9bj9TeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKTo2MDEwMyxvPW4/U3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKTo2MDEwNixhPW4/U3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpOjYwMTA3LGk9bj9TeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIik6NjAxMDgsbD1uP1N5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKTo2MDExNCxzPW4/U3ltYm9sLmZvcihcInJlYWN0LnByb3ZpZGVyXCIpOjYwMTA5LGM9bj9TeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKTo2MDExMCx1PW4/U3ltYm9sLmZvcihcInJlYWN0LmFzeW5jX21vZGVcIik6NjAxMTEsZD1uP1N5bWJvbC5mb3IoXCJyZWFjdC5jb25jdXJyZW50X21vZGVcIik6NjAxMTEscD1uP1N5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKTo2MDExMixmPW4/U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpOjYwMTEzLGg9bj9TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VfbGlzdFwiKTo2MDEyMCxnPW4/U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIik6NjAxMTUsdj1uP1N5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpOjYwMTE2LEM9bj9TeW1ib2wuZm9yKFwicmVhY3QuYmxvY2tcIik6NjAxMjEsbT1uP1N5bWJvbC5mb3IoXCJyZWFjdC5mdW5kYW1lbnRhbFwiKTo2MDExNyx3PW4/U3ltYm9sLmZvcihcInJlYWN0LnJlc3BvbmRlclwiKTo2MDExOCxiPW4/U3ltYm9sLmZvcihcInJlYWN0LnNjb3BlXCIpOjYwMTE5O2Z1bmN0aW9uIHkoZSl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lKXt2YXIgdD1lLiQkdHlwZW9mO3N3aXRjaCh0KXtjYXNlIHI6c3dpdGNoKGU9ZS50eXBlKXtjYXNlIHU6Y2FzZSBkOmNhc2UgYTpjYXNlIGw6Y2FzZSBpOmNhc2UgZjpyZXR1cm4gZTtkZWZhdWx0OnN3aXRjaChlPWUmJmUuJCR0eXBlb2Ype2Nhc2UgYzpjYXNlIHA6Y2FzZSB2OmNhc2UgZzpjYXNlIHM6cmV0dXJuIGU7ZGVmYXVsdDpyZXR1cm4gdH19Y2FzZSBvOnJldHVybiB0fX19ZnVuY3Rpb24geChlKXtyZXR1cm4geShlKT09PWR9dC5Gb3J3YXJkUmVmPXAsdC5pc1ZhbGlkRWxlbWVudFR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGV8fFwiZnVuY3Rpb25cIj09dHlwZW9mIGV8fGU9PT1hfHxlPT09ZHx8ZT09PWx8fGU9PT1pfHxlPT09Znx8ZT09PWh8fFwib2JqZWN0XCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmKGUuJCR0eXBlb2Y9PT12fHxlLiQkdHlwZW9mPT09Z3x8ZS4kJHR5cGVvZj09PXN8fGUuJCR0eXBlb2Y9PT1jfHxlLiQkdHlwZW9mPT09cHx8ZS4kJHR5cGVvZj09PW18fGUuJCR0eXBlb2Y9PT13fHxlLiQkdHlwZW9mPT09Ynx8ZS4kJHR5cGVvZj09PUMpfX0sMTg1OihlLHQsbik9PntcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9big3MDIpfSw1MzU6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO3ZhciByPW4oNTI1KSxvPTYwMTAzLGE9NjAxMDY7dC5GcmFnbWVudD02MDEwNyx0LlN0cmljdE1vZGU9NjAxMDgsdC5Qcm9maWxlcj02MDExNDt2YXIgaT02MDEwOSxsPTYwMTEwLHM9NjAxMTI7dC5TdXNwZW5zZT02MDExMzt2YXIgYz02MDExNSx1PTYwMTE2O2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvcil7dmFyIGQ9U3ltYm9sLmZvcjtvPWQoXCJyZWFjdC5lbGVtZW50XCIpLGE9ZChcInJlYWN0LnBvcnRhbFwiKSx0LkZyYWdtZW50PWQoXCJyZWFjdC5mcmFnbWVudFwiKSx0LlN0cmljdE1vZGU9ZChcInJlYWN0LnN0cmljdF9tb2RlXCIpLHQuUHJvZmlsZXI9ZChcInJlYWN0LnByb2ZpbGVyXCIpLGk9ZChcInJlYWN0LnByb3ZpZGVyXCIpLGw9ZChcInJlYWN0LmNvbnRleHRcIikscz1kKFwicmVhY3QuZm9yd2FyZF9yZWZcIiksdC5TdXNwZW5zZT1kKFwicmVhY3Quc3VzcGVuc2VcIiksYz1kKFwicmVhY3QubWVtb1wiKSx1PWQoXCJyZWFjdC5sYXp5XCIpfXZhciBwPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yO2Z1bmN0aW9uIGYoZSl7Zm9yKHZhciB0PVwiaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2Vycm9yLWRlY29kZXIuaHRtbD9pbnZhcmlhbnQ9XCIrZSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0Kz1cIiZhcmdzW109XCIrZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1tuXSk7cmV0dXJuXCJNaW5pZmllZCBSZWFjdCBlcnJvciAjXCIrZStcIjsgdmlzaXQgXCIrdCtcIiBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuXCJ9dmFyIGg9e2lzTW91bnRlZDpmdW5jdGlvbigpe3JldHVybiExfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVSZXBsYWNlU3RhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbigpe319LGc9e307ZnVuY3Rpb24gdihlLHQsbil7dGhpcy5wcm9wcz1lLHRoaXMuY29udGV4dD10LHRoaXMucmVmcz1nLHRoaXMudXBkYXRlcj1ufHxofWZ1bmN0aW9uIEMoKXt9ZnVuY3Rpb24gbShlLHQsbil7dGhpcy5wcm9wcz1lLHRoaXMuY29udGV4dD10LHRoaXMucmVmcz1nLHRoaXMudXBkYXRlcj1ufHxofXYucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9e30sdi5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oZSx0KXtpZihcIm9iamVjdFwiIT10eXBlb2YgZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZSYmbnVsbCE9ZSl0aHJvdyBFcnJvcihmKDg1KSk7dGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLGUsdCxcInNldFN0YXRlXCIpfSx2LnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsZSxcImZvcmNlVXBkYXRlXCIpfSxDLnByb3RvdHlwZT12LnByb3RvdHlwZTt2YXIgdz1tLnByb3RvdHlwZT1uZXcgQzt3LmNvbnN0cnVjdG9yPW0scih3LHYucHJvdG90eXBlKSx3LmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwO3ZhciBiPXtjdXJyZW50Om51bGx9LHk9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSx4PXtrZXk6ITAscmVmOiEwLF9fc2VsZjohMCxfX3NvdXJjZTohMH07ZnVuY3Rpb24gayhlLHQsbil7dmFyIHIsYT17fSxpPW51bGwsbD1udWxsO2lmKG51bGwhPXQpZm9yKHIgaW4gdm9pZCAwIT09dC5yZWYmJihsPXQucmVmKSx2b2lkIDAhPT10LmtleSYmKGk9XCJcIit0LmtleSksdCl5LmNhbGwodCxyKSYmIXguaGFzT3duUHJvcGVydHkocikmJihhW3JdPXRbcl0pO3ZhciBzPWFyZ3VtZW50cy5sZW5ndGgtMjtpZigxPT09cylhLmNoaWxkcmVuPW47ZWxzZSBpZigxPHMpe2Zvcih2YXIgYz1BcnJheShzKSx1PTA7dTxzO3UrKyljW3VdPWFyZ3VtZW50c1t1KzJdO2EuY2hpbGRyZW49Y31pZihlJiZlLmRlZmF1bHRQcm9wcylmb3IociBpbiBzPWUuZGVmYXVsdFByb3BzKXZvaWQgMD09PWFbcl0mJihhW3JdPXNbcl0pO3JldHVybnskJHR5cGVvZjpvLHR5cGU6ZSxrZXk6aSxyZWY6bCxwcm9wczphLF9vd25lcjpiLmN1cnJlbnR9fWZ1bmN0aW9uIFMoZSl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lJiZlLiQkdHlwZW9mPT09b312YXIgTz0vXFwvKy9nO2Z1bmN0aW9uIE0oZSx0KXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgZSYmbnVsbCE9PWUmJm51bGwhPWUua2V5P2Z1bmN0aW9uKGUpe3ZhciB0PXtcIj1cIjpcIj0wXCIsXCI6XCI6XCI9MlwifTtyZXR1cm5cIiRcIitlLnJlcGxhY2UoL1s9Ol0vZywoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KSl9KFwiXCIrZS5rZXkpOnQudG9TdHJpbmcoMzYpfWZ1bmN0aW9uIEwoZSx0LG4scixpKXt2YXIgbD10eXBlb2YgZTtcInVuZGVmaW5lZFwiIT09bCYmXCJib29sZWFuXCIhPT1sfHwoZT1udWxsKTt2YXIgcz0hMTtpZihudWxsPT09ZSlzPSEwO2Vsc2Ugc3dpdGNoKGwpe2Nhc2VcInN0cmluZ1wiOmNhc2VcIm51bWJlclwiOnM9ITA7YnJlYWs7Y2FzZVwib2JqZWN0XCI6c3dpdGNoKGUuJCR0eXBlb2Ype2Nhc2UgbzpjYXNlIGE6cz0hMH19aWYocylyZXR1cm4gaT1pKHM9ZSksZT1cIlwiPT09cj9cIi5cIitNKHMsMCk6cixBcnJheS5pc0FycmF5KGkpPyhuPVwiXCIsbnVsbCE9ZSYmKG49ZS5yZXBsYWNlKE8sXCIkJi9cIikrXCIvXCIpLEwoaSx0LG4sXCJcIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSkpOm51bGwhPWkmJihTKGkpJiYoaT1mdW5jdGlvbihlLHQpe3JldHVybnskJHR5cGVvZjpvLHR5cGU6ZS50eXBlLGtleTp0LHJlZjplLnJlZixwcm9wczplLnByb3BzLF9vd25lcjplLl9vd25lcn19KGksbisoIWkua2V5fHxzJiZzLmtleT09PWkua2V5P1wiXCI6KFwiXCIraS5rZXkpLnJlcGxhY2UoTyxcIiQmL1wiKStcIi9cIikrZSkpLHQucHVzaChpKSksMTtpZihzPTAscj1cIlwiPT09cj9cIi5cIjpyK1wiOlwiLEFycmF5LmlzQXJyYXkoZSkpZm9yKHZhciBjPTA7YzxlLmxlbmd0aDtjKyspe3ZhciB1PXIrTShsPWVbY10sYyk7cys9TChsLHQsbix1LGkpfWVsc2UgaWYodT1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09PWV8fFwib2JqZWN0XCIhPXR5cGVvZiBlP251bGw6XCJmdW5jdGlvblwiPT10eXBlb2YoZT1wJiZlW3BdfHxlW1wiQEBpdGVyYXRvclwiXSk/ZTpudWxsfShlKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiB1KWZvcihlPXUuY2FsbChlKSxjPTA7IShsPWUubmV4dCgpKS5kb25lOylzKz1MKGw9bC52YWx1ZSx0LG4sdT1yK00obCxjKyspLGkpO2Vsc2UgaWYoXCJvYmplY3RcIj09PWwpdGhyb3cgdD1cIlwiK2UsRXJyb3IoZigzMSxcIltvYmplY3QgT2JqZWN0XVwiPT09dD9cIm9iamVjdCB3aXRoIGtleXMge1wiK09iamVjdC5rZXlzKGUpLmpvaW4oXCIsIFwiKStcIn1cIjp0KSk7cmV0dXJuIHN9ZnVuY3Rpb24gXyhlLHQsbil7aWYobnVsbD09ZSlyZXR1cm4gZTt2YXIgcj1bXSxvPTA7cmV0dXJuIEwoZSxyLFwiXCIsXCJcIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHQuY2FsbChuLGUsbysrKX0pKSxyfWZ1bmN0aW9uIFAoZSl7aWYoLTE9PT1lLl9zdGF0dXMpe3ZhciB0PWUuX3Jlc3VsdDt0PXQoKSxlLl9zdGF0dXM9MCxlLl9yZXN1bHQ9dCx0LnRoZW4oKGZ1bmN0aW9uKHQpezA9PT1lLl9zdGF0dXMmJih0PXQuZGVmYXVsdCxlLl9zdGF0dXM9MSxlLl9yZXN1bHQ9dCl9KSwoZnVuY3Rpb24odCl7MD09PWUuX3N0YXR1cyYmKGUuX3N0YXR1cz0yLGUuX3Jlc3VsdD10KX0pKX1pZigxPT09ZS5fc3RhdHVzKXJldHVybiBlLl9yZXN1bHQ7dGhyb3cgZS5fcmVzdWx0fXZhciBFPXtjdXJyZW50Om51bGx9O2Z1bmN0aW9uIGooKXt2YXIgZT1FLmN1cnJlbnQ7aWYobnVsbD09PWUpdGhyb3cgRXJyb3IoZigzMjEpKTtyZXR1cm4gZX12YXIgUj17UmVhY3RDdXJyZW50RGlzcGF0Y2hlcjpFLFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnOnt0cmFuc2l0aW9uOjB9LFJlYWN0Q3VycmVudE93bmVyOmIsSXNTb21lUmVuZGVyZXJBY3Rpbmc6e2N1cnJlbnQ6ITF9LGFzc2lnbjpyfTt0LkNoaWxkcmVuPXttYXA6Xyxmb3JFYWNoOmZ1bmN0aW9uKGUsdCxuKXtfKGUsKGZ1bmN0aW9uKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxuKX0sY291bnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9MDtyZXR1cm4gXyhlLChmdW5jdGlvbigpe3QrK30pKSx0fSx0b0FycmF5OmZ1bmN0aW9uKGUpe3JldHVybiBfKGUsKGZ1bmN0aW9uKGUpe3JldHVybiBlfSkpfHxbXX0sb25seTpmdW5jdGlvbihlKXtpZighUyhlKSl0aHJvdyBFcnJvcihmKDE0MykpO3JldHVybiBlfX0sdC5Db21wb25lbnQ9dix0LlB1cmVDb21wb25lbnQ9bSx0Ll9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEPVIsdC5jbG9uZUVsZW1lbnQ9ZnVuY3Rpb24oZSx0LG4pe2lmKG51bGw9PWUpdGhyb3cgRXJyb3IoZigyNjcsZSkpO3ZhciBhPXIoe30sZS5wcm9wcyksaT1lLmtleSxsPWUucmVmLHM9ZS5fb3duZXI7aWYobnVsbCE9dCl7aWYodm9pZCAwIT09dC5yZWYmJihsPXQucmVmLHM9Yi5jdXJyZW50KSx2b2lkIDAhPT10LmtleSYmKGk9XCJcIit0LmtleSksZS50eXBlJiZlLnR5cGUuZGVmYXVsdFByb3BzKXZhciBjPWUudHlwZS5kZWZhdWx0UHJvcHM7Zm9yKHUgaW4gdCl5LmNhbGwodCx1KSYmIXguaGFzT3duUHJvcGVydHkodSkmJihhW3VdPXZvaWQgMD09PXRbdV0mJnZvaWQgMCE9PWM/Y1t1XTp0W3VdKX12YXIgdT1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PXUpYS5jaGlsZHJlbj1uO2Vsc2UgaWYoMTx1KXtjPUFycmF5KHUpO2Zvcih2YXIgZD0wO2Q8dTtkKyspY1tkXT1hcmd1bWVudHNbZCsyXTthLmNoaWxkcmVuPWN9cmV0dXJueyQkdHlwZW9mOm8sdHlwZTplLnR5cGUsa2V5OmkscmVmOmwscHJvcHM6YSxfb3duZXI6c319LHQuY3JlYXRlQ29udGV4dD1mdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD1udWxsKSwoZT17JCR0eXBlb2Y6bCxfY2FsY3VsYXRlQ2hhbmdlZEJpdHM6dCxfY3VycmVudFZhbHVlOmUsX2N1cnJlbnRWYWx1ZTI6ZSxfdGhyZWFkQ291bnQ6MCxQcm92aWRlcjpudWxsLENvbnN1bWVyOm51bGx9KS5Qcm92aWRlcj17JCR0eXBlb2Y6aSxfY29udGV4dDplfSxlLkNvbnN1bWVyPWV9LHQuY3JlYXRlRWxlbWVudD1rLHQuY3JlYXRlRmFjdG9yeT1mdW5jdGlvbihlKXt2YXIgdD1rLmJpbmQobnVsbCxlKTtyZXR1cm4gdC50eXBlPWUsdH0sdC5jcmVhdGVSZWY9ZnVuY3Rpb24oKXtyZXR1cm57Y3VycmVudDpudWxsfX0sdC5mb3J3YXJkUmVmPWZ1bmN0aW9uKGUpe3JldHVybnskJHR5cGVvZjpzLHJlbmRlcjplfX0sdC5pc1ZhbGlkRWxlbWVudD1TLHQubGF6eT1mdW5jdGlvbihlKXtyZXR1cm57JCR0eXBlb2Y6dSxfcGF5bG9hZDp7X3N0YXR1czotMSxfcmVzdWx0OmV9LF9pbml0OlB9fSx0Lm1lbW89ZnVuY3Rpb24oZSx0KXtyZXR1cm57JCR0eXBlb2Y6Yyx0eXBlOmUsY29tcGFyZTp2b2lkIDA9PT10P251bGw6dH19LHQudXNlQ2FsbGJhY2s9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaigpLnVzZUNhbGxiYWNrKGUsdCl9LHQudXNlQ29udGV4dD1mdW5jdGlvbihlLHQpe3JldHVybiBqKCkudXNlQ29udGV4dChlLHQpfSx0LnVzZURlYnVnVmFsdWU9ZnVuY3Rpb24oKXt9LHQudXNlRWZmZWN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGooKS51c2VFZmZlY3QoZSx0KX0sdC51c2VJbXBlcmF0aXZlSGFuZGxlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gaigpLnVzZUltcGVyYXRpdmVIYW5kbGUoZSx0LG4pfSx0LnVzZUxheW91dEVmZmVjdD1mdW5jdGlvbihlLHQpe3JldHVybiBqKCkudXNlTGF5b3V0RWZmZWN0KGUsdCl9LHQudXNlTWVtbz1mdW5jdGlvbihlLHQpe3JldHVybiBqKCkudXNlTWVtbyhlLHQpfSx0LnVzZVJlZHVjZXI9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBqKCkudXNlUmVkdWNlcihlLHQsbil9LHQudXNlUmVmPWZ1bmN0aW9uKGUpe3JldHVybiBqKCkudXNlUmVmKGUpfSx0LnVzZVN0YXRlPWZ1bmN0aW9uKGUpe3JldHVybiBqKCkudXNlU3RhdGUoZSl9LHQudmVyc2lvbj1cIjE3LjAuMlwifSwzNzg6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1uKDUzNSl9LDkyMTooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7bi5yKHQpLG4uZCh0LHtTZXJ2ZXJTdHlsZVNoZWV0OigpPT5mdCxTdHlsZVNoZWV0Q29uc3VtZXI6KCk9Pmd0LFN0eWxlU2hlZXRDb250ZXh0OigpPT5odCxTdHlsZVNoZWV0TWFuYWdlcjooKT0+dnQsVGhlbWVDb25zdW1lcjooKT0+ZHQsVGhlbWVDb250ZXh0OigpPT51dCxUaGVtZVByb3ZpZGVyOigpPT5wdCxfX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfSEFVTlRFRF9CWV9TUE9PS1lfR0hPU1RTOigpPT5NdCxjcmVhdGVHbG9iYWxTdHlsZTooKT0+eHQsY3NzOigpPT5UZSxkZWZhdWx0OigpPT5MdCxpc1N0eWxlZENvbXBvbmVudDooKT0+TixrZXlmcmFtZXM6KCk9PlN0LHdpdGhUaGVtZTooKT0+T3R9KTt2YXIgcj1uKDk0Niksbz1uLm4ociksYT1uKDI0NiksaT1uLm4oYSksbD1uKDM3OCk7Y29uc3Qgcz17YW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6MSxib3JkZXJJbWFnZU91dHNldDoxLGJvcmRlckltYWdlU2xpY2U6MSxib3JkZXJJbWFnZVdpZHRoOjEsYm94RmxleDoxLGJveEZsZXhHcm91cDoxLGJveE9yZGluYWxHcm91cDoxLGNvbHVtbkNvdW50OjEsY29sdW1uczoxLGZsZXg6MSxmbGV4R3JvdzoxLGZsZXhQb3NpdGl2ZToxLGZsZXhTaHJpbms6MSxmbGV4TmVnYXRpdmU6MSxmbGV4T3JkZXI6MSxncmlkUm93OjEsZ3JpZFJvd0VuZDoxLGdyaWRSb3dTcGFuOjEsZ3JpZFJvd1N0YXJ0OjEsZ3JpZENvbHVtbjoxLGdyaWRDb2x1bW5FbmQ6MSxncmlkQ29sdW1uU3BhbjoxLGdyaWRDb2x1bW5TdGFydDoxLG1zR3JpZFJvdzoxLG1zR3JpZFJvd1NwYW46MSxtc0dyaWRDb2x1bW46MSxtc0dyaWRDb2x1bW5TcGFuOjEsZm9udFdlaWdodDoxLGxpbmVIZWlnaHQ6MSxvcGFjaXR5OjEsb3JkZXI6MSxvcnBoYW5zOjEsdGFiU2l6ZToxLHdpZG93czoxLHpJbmRleDoxLHpvb206MSxXZWJraXRMaW5lQ2xhbXA6MSxmaWxsT3BhY2l0eToxLGZsb29kT3BhY2l0eToxLHN0b3BPcGFjaXR5OjEsc3Ryb2tlRGFzaGFycmF5OjEsc3Ryb2tlRGFzaG9mZnNldDoxLHN0cm9rZU1pdGVybGltaXQ6MSxzdHJva2VPcGFjaXR5OjEsc3Ryb2tlV2lkdGg6MX07dmFyIGM9bigxODUpLHU9TnVtYmVyLmlzTmFOfHxmdW5jdGlvbihlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZSYmZSE9ZX07ZnVuY3Rpb24gZChlLHQpe2lmKGUubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspaWYocj1lW25dLG89dFtuXSwhKHI9PT1vfHx1KHIpJiZ1KG8pKSlyZXR1cm4hMTt2YXIgcixvO3JldHVybiEwfWNvbnN0IHA9ZnVuY3Rpb24oZSx0KXt2YXIgbjt2b2lkIDA9PT10JiYodD1kKTt2YXIgcixvPVtdLGE9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBpPVtdLGw9MDtsPGFyZ3VtZW50cy5sZW5ndGg7bCsrKWlbbF09YXJndW1lbnRzW2xdO3JldHVybiBhJiZuPT09dGhpcyYmdChpLG8pfHwocj1lLmFwcGx5KHRoaXMsaSksYT0hMCxuPXRoaXMsbz1pKSxyfX07dmFyIGY9L14oKGNoaWxkcmVufGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MfGtleXxyZWZ8YXV0b0ZvY3VzfGRlZmF1bHRWYWx1ZXxkZWZhdWx0Q2hlY2tlZHxpbm5lckhUTUx8c3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nfHN1cHByZXNzSHlkcmF0aW9uV2FybmluZ3x2YWx1ZUxpbmt8YWNjZXB0fGFjY2VwdENoYXJzZXR8YWNjZXNzS2V5fGFjdGlvbnxhbGxvd3xhbGxvd1VzZXJNZWRpYXxhbGxvd1BheW1lbnRSZXF1ZXN0fGFsbG93RnVsbFNjcmVlbnxhbGxvd1RyYW5zcGFyZW5jeXxhbHR8YXN5bmN8YXV0b0NvbXBsZXRlfGF1dG9QbGF5fGNhcHR1cmV8Y2VsbFBhZGRpbmd8Y2VsbFNwYWNpbmd8Y2hhbGxlbmdlfGNoYXJTZXR8Y2hlY2tlZHxjaXRlfGNsYXNzSUR8Y2xhc3NOYW1lfGNvbHN8Y29sU3Bhbnxjb250ZW50fGNvbnRlbnRFZGl0YWJsZXxjb250ZXh0TWVudXxjb250cm9sc3xjb250cm9sc0xpc3R8Y29vcmRzfGNyb3NzT3JpZ2lufGRhdGF8ZGF0ZVRpbWV8ZGVjb2Rpbmd8ZGVmYXVsdHxkZWZlcnxkaXJ8ZGlzYWJsZWR8ZGlzYWJsZVBpY3R1cmVJblBpY3R1cmV8ZG93bmxvYWR8ZHJhZ2dhYmxlfGVuY1R5cGV8Zm9ybXxmb3JtQWN0aW9ufGZvcm1FbmNUeXBlfGZvcm1NZXRob2R8Zm9ybU5vVmFsaWRhdGV8Zm9ybVRhcmdldHxmcmFtZUJvcmRlcnxoZWFkZXJzfGhlaWdodHxoaWRkZW58aGlnaHxocmVmfGhyZWZMYW5nfGh0bWxGb3J8aHR0cEVxdWl2fGlkfGlucHV0TW9kZXxpbnRlZ3JpdHl8aXN8a2V5UGFyYW1zfGtleVR5cGV8a2luZHxsYWJlbHxsYW5nfGxpc3R8bG9hZGluZ3xsb29wfGxvd3xtYXJnaW5IZWlnaHR8bWFyZ2luV2lkdGh8bWF4fG1heExlbmd0aHxtZWRpYXxtZWRpYUdyb3VwfG1ldGhvZHxtaW58bWluTGVuZ3RofG11bHRpcGxlfG11dGVkfG5hbWV8bm9uY2V8bm9WYWxpZGF0ZXxvcGVufG9wdGltdW18cGF0dGVybnxwbGFjZWhvbGRlcnxwbGF5c0lubGluZXxwb3N0ZXJ8cHJlbG9hZHxwcm9maWxlfHJhZGlvR3JvdXB8cmVhZE9ubHl8cmVmZXJyZXJQb2xpY3l8cmVsfHJlcXVpcmVkfHJldmVyc2VkfHJvbGV8cm93c3xyb3dTcGFufHNhbmRib3h8c2NvcGV8c2NvcGVkfHNjcm9sbGluZ3xzZWFtbGVzc3xzZWxlY3RlZHxzaGFwZXxzaXplfHNpemVzfHNsb3R8c3BhbnxzcGVsbENoZWNrfHNyY3xzcmNEb2N8c3JjTGFuZ3xzcmNTZXR8c3RhcnR8c3RlcHxzdHlsZXxzdW1tYXJ5fHRhYkluZGV4fHRhcmdldHx0aXRsZXx0eXBlfHVzZU1hcHx2YWx1ZXx3aWR0aHx3bW9kZXx3cmFwfGFib3V0fGRhdGF0eXBlfGlubGlzdHxwcmVmaXh8cHJvcGVydHl8cmVzb3VyY2V8dHlwZW9mfHZvY2FifGF1dG9DYXBpdGFsaXplfGF1dG9Db3JyZWN0fGF1dG9TYXZlfGNvbG9yfGluZXJ0fGl0ZW1Qcm9wfGl0ZW1TY29wZXxpdGVtVHlwZXxpdGVtSUR8aXRlbVJlZnxvbnxyZXN1bHRzfHNlY3VyaXR5fHVuc2VsZWN0YWJsZXxhY2NlbnRIZWlnaHR8YWNjdW11bGF0ZXxhZGRpdGl2ZXxhbGlnbm1lbnRCYXNlbGluZXxhbGxvd1Jlb3JkZXJ8YWxwaGFiZXRpY3xhbXBsaXR1ZGV8YXJhYmljRm9ybXxhc2NlbnR8YXR0cmlidXRlTmFtZXxhdHRyaWJ1dGVUeXBlfGF1dG9SZXZlcnNlfGF6aW11dGh8YmFzZUZyZXF1ZW5jeXxiYXNlbGluZVNoaWZ0fGJhc2VQcm9maWxlfGJib3h8YmVnaW58Ymlhc3xieXxjYWxjTW9kZXxjYXBIZWlnaHR8Y2xpcHxjbGlwUGF0aFVuaXRzfGNsaXBQYXRofGNsaXBSdWxlfGNvbG9ySW50ZXJwb2xhdGlvbnxjb2xvckludGVycG9sYXRpb25GaWx0ZXJzfGNvbG9yUHJvZmlsZXxjb2xvclJlbmRlcmluZ3xjb250ZW50U2NyaXB0VHlwZXxjb250ZW50U3R5bGVUeXBlfGN1cnNvcnxjeHxjeXxkfGRlY2VsZXJhdGV8ZGVzY2VudHxkaWZmdXNlQ29uc3RhbnR8ZGlyZWN0aW9ufGRpc3BsYXl8ZGl2aXNvcnxkb21pbmFudEJhc2VsaW5lfGR1cnxkeHxkeXxlZGdlTW9kZXxlbGV2YXRpb258ZW5hYmxlQmFja2dyb3VuZHxlbmR8ZXhwb25lbnR8ZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZHxmaWxsfGZpbGxPcGFjaXR5fGZpbGxSdWxlfGZpbHRlcnxmaWx0ZXJSZXN8ZmlsdGVyVW5pdHN8Zmxvb2RDb2xvcnxmbG9vZE9wYWNpdHl8Zm9jdXNhYmxlfGZvbnRGYW1pbHl8Zm9udFNpemV8Zm9udFNpemVBZGp1c3R8Zm9udFN0cmV0Y2h8Zm9udFN0eWxlfGZvbnRWYXJpYW50fGZvbnRXZWlnaHR8Zm9ybWF0fGZyb218ZnJ8Znh8Znl8ZzF8ZzJ8Z2x5cGhOYW1lfGdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsfGdseXBoT3JpZW50YXRpb25WZXJ0aWNhbHxnbHlwaFJlZnxncmFkaWVudFRyYW5zZm9ybXxncmFkaWVudFVuaXRzfGhhbmdpbmd8aG9yaXpBZHZYfGhvcml6T3JpZ2luWHxpZGVvZ3JhcGhpY3xpbWFnZVJlbmRlcmluZ3xpbnxpbjJ8aW50ZXJjZXB0fGt8azF8azJ8azN8azR8a2VybmVsTWF0cml4fGtlcm5lbFVuaXRMZW5ndGh8a2VybmluZ3xrZXlQb2ludHN8a2V5U3BsaW5lc3xrZXlUaW1lc3xsZW5ndGhBZGp1c3R8bGV0dGVyU3BhY2luZ3xsaWdodGluZ0NvbG9yfGxpbWl0aW5nQ29uZUFuZ2xlfGxvY2FsfG1hcmtlckVuZHxtYXJrZXJNaWR8bWFya2VyU3RhcnR8bWFya2VySGVpZ2h0fG1hcmtlclVuaXRzfG1hcmtlcldpZHRofG1hc2t8bWFza0NvbnRlbnRVbml0c3xtYXNrVW5pdHN8bWF0aGVtYXRpY2FsfG1vZGV8bnVtT2N0YXZlc3xvZmZzZXR8b3BhY2l0eXxvcGVyYXRvcnxvcmRlcnxvcmllbnR8b3JpZW50YXRpb258b3JpZ2lufG92ZXJmbG93fG92ZXJsaW5lUG9zaXRpb258b3ZlcmxpbmVUaGlja25lc3N8cGFub3NlMXxwYWludE9yZGVyfHBhdGhMZW5ndGh8cGF0dGVybkNvbnRlbnRVbml0c3xwYXR0ZXJuVHJhbnNmb3JtfHBhdHRlcm5Vbml0c3xwb2ludGVyRXZlbnRzfHBvaW50c3xwb2ludHNBdFh8cG9pbnRzQXRZfHBvaW50c0F0WnxwcmVzZXJ2ZUFscGhhfHByZXNlcnZlQXNwZWN0UmF0aW98cHJpbWl0aXZlVW5pdHN8cnxyYWRpdXN8cmVmWHxyZWZZfHJlbmRlcmluZ0ludGVudHxyZXBlYXRDb3VudHxyZXBlYXREdXJ8cmVxdWlyZWRFeHRlbnNpb25zfHJlcXVpcmVkRmVhdHVyZXN8cmVzdGFydHxyZXN1bHR8cm90YXRlfHJ4fHJ5fHNjYWxlfHNlZWR8c2hhcGVSZW5kZXJpbmd8c2xvcGV8c3BhY2luZ3xzcGVjdWxhckNvbnN0YW50fHNwZWN1bGFyRXhwb25lbnR8c3BlZWR8c3ByZWFkTWV0aG9kfHN0YXJ0T2Zmc2V0fHN0ZERldmlhdGlvbnxzdGVtaHxzdGVtdnxzdGl0Y2hUaWxlc3xzdG9wQ29sb3J8c3RvcE9wYWNpdHl8c3RyaWtldGhyb3VnaFBvc2l0aW9ufHN0cmlrZXRocm91Z2hUaGlja25lc3N8c3RyaW5nfHN0cm9rZXxzdHJva2VEYXNoYXJyYXl8c3Ryb2tlRGFzaG9mZnNldHxzdHJva2VMaW5lY2FwfHN0cm9rZUxpbmVqb2lufHN0cm9rZU1pdGVybGltaXR8c3Ryb2tlT3BhY2l0eXxzdHJva2VXaWR0aHxzdXJmYWNlU2NhbGV8c3lzdGVtTGFuZ3VhZ2V8dGFibGVWYWx1ZXN8dGFyZ2V0WHx0YXJnZXRZfHRleHRBbmNob3J8dGV4dERlY29yYXRpb258dGV4dFJlbmRlcmluZ3x0ZXh0TGVuZ3RofHRvfHRyYW5zZm9ybXx1MXx1Mnx1bmRlcmxpbmVQb3NpdGlvbnx1bmRlcmxpbmVUaGlja25lc3N8dW5pY29kZXx1bmljb2RlQmlkaXx1bmljb2RlUmFuZ2V8dW5pdHNQZXJFbXx2QWxwaGFiZXRpY3x2SGFuZ2luZ3x2SWRlb2dyYXBoaWN8dk1hdGhlbWF0aWNhbHx2YWx1ZXN8dmVjdG9yRWZmZWN0fHZlcnNpb258dmVydEFkdll8dmVydE9yaWdpblh8dmVydE9yaWdpbll8dmlld0JveHx2aWV3VGFyZ2V0fHZpc2liaWxpdHl8d2lkdGhzfHdvcmRTcGFjaW5nfHdyaXRpbmdNb2RlfHh8eEhlaWdodHx4MXx4Mnx4Q2hhbm5lbFNlbGVjdG9yfHhsaW5rQWN0dWF0ZXx4bGlua0FyY3JvbGV8eGxpbmtIcmVmfHhsaW5rUm9sZXx4bGlua1Nob3d8eGxpbmtUaXRsZXx4bGlua1R5cGV8eG1sQmFzZXx4bWxuc3x4bWxuc1hsaW5rfHhtbExhbmd8eG1sU3BhY2V8eXx5MXx5Mnx5Q2hhbm5lbFNlbGVjdG9yfHp8em9vbUFuZFBhbnxmb3J8Y2xhc3N8YXV0b2ZvY3VzKXwoKFtEZF1bQWFdW1R0XVtBYV18W0FhXVtScl1bSWldW0FhXXx4KS0uKikpJC87Y29uc3QgaD1mdW5jdGlvbihlKXt2YXIgdD17fTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHZvaWQgMD09PXRbbl0mJih0W25dPWUobikpLHRbbl19fSgoZnVuY3Rpb24oZSl7cmV0dXJuIGYudGVzdChlKXx8MTExPT09ZS5jaGFyQ29kZUF0KDApJiYxMTA9PT1lLmNoYXJDb2RlQXQoMSkmJmUuY2hhckNvZGVBdCgyKTw5MX0pKTtmdW5jdGlvbiBnKGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSl9ZnVuY3Rpb24gdihlKXtyZXR1cm5cIlVuZGVmaW5lZFwiPT09ZyhlKX1mdW5jdGlvbiBDKGUpe3JldHVyblwiTnVsbFwiPT09ZyhlKX1mdW5jdGlvbiBtKGUpe3JldHVyblwiT2JqZWN0XCI9PT1nKGUpJiYoZS5jb25zdHJ1Y3Rvcj09PU9iamVjdCYmT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09T2JqZWN0LnByb3RvdHlwZSl9ZnVuY3Rpb24gdyhlKXtyZXR1cm5cIkFycmF5XCI9PT1nKGUpfWZ1bmN0aW9uIGIoZSl7cmV0dXJuXCJTeW1ib2xcIj09PWcoZSl9dmFyIHkseCxrLFMsTzt5PUMseD12O2Z1bmN0aW9uIE0oKXtmb3IodmFyIGU9MCx0PTAsbj1hcmd1bWVudHMubGVuZ3RoO3Q8bjt0KyspZSs9YXJndW1lbnRzW3RdLmxlbmd0aDt2YXIgcj1BcnJheShlKSxvPTA7Zm9yKHQ9MDt0PG47dCsrKWZvcih2YXIgYT1hcmd1bWVudHNbdF0saT0wLGw9YS5sZW5ndGg7aTxsO2krKyxvKyspcltvXT1hW2ldO3JldHVybiByfWZ1bmN0aW9uIEwoZSx0LG4scil7dmFyIG89ci5wcm9wZXJ0eUlzRW51bWVyYWJsZSh0KT9cImVudW1lcmFibGVcIjpcIm5vbmVudW1lcmFibGVcIjtcImVudW1lcmFibGVcIj09PW8mJihlW3RdPW4pLFwibm9uZW51bWVyYWJsZVwiPT09byYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfWZ1bmN0aW9uIF8oZSx0LG4pe2lmKCFtKHQpKXJldHVybiBuJiZ3KG4pJiZuLmZvckVhY2goKGZ1bmN0aW9uKG4pe3Q9bihlLHQpfSkpLHQ7dmFyIHI9e307bShlKSYmKHI9TShPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKSxPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpKS5yZWR1Y2UoKGZ1bmN0aW9uKG4scil7dmFyIG89ZVtyXTtyZXR1cm4oIWIocikmJiFPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KS5pbmNsdWRlcyhyKXx8YihyKSYmIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuaW5jbHVkZXMocikpJiZMKG4scixvLGUpLG59KSx7fSkpO3JldHVybiBNKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkpLnJlZHVjZSgoZnVuY3Rpb24ocixvKXt2YXIgYT10W29dLGk9bShlKT9lW29dOnZvaWQgMDtyZXR1cm4gbiYmdyhuKSYmbi5mb3JFYWNoKChmdW5jdGlvbihlKXthPWUoaSxhKX0pKSx2b2lkIDAhPT1pJiZtKGEpJiYoYT1fKGksYSxuKSksTChyLG8sYSx0KSxyfSkscil9Y29uc3QgUD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuLTFdPWFyZ3VtZW50c1tuXTt2YXIgcj1udWxsLG89ZTtyZXR1cm4gbShlKSYmZS5leHRlbnNpb25zJiYxPT09T2JqZWN0LmtleXMoZSkubGVuZ3RoJiYobz17fSxyPWUuZXh0ZW5zaW9ucyksdC5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIF8oZSx0LHIpfSksbyl9O3ZhciBFPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVtlWzBdXSxyPTAsbz10Lmxlbmd0aDtyPG87cis9MSluLnB1c2godFtyXSxlW3IrMV0pO3JldHVybiBufSxqPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlP1wic3ltYm9sXCI6dHlwZW9mIGV9LFI9ZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfSxJPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gbiYmZSh0LnByb3RvdHlwZSxuKSxyJiZlKHQsciksdH19KCksVj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxIPWZ1bmN0aW9uKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIrdHlwZW9mIHQpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdCk6ZS5fX3Byb3RvX189dCl9LEE9ZnVuY3Rpb24oZSx0KXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIXR8fFwib2JqZWN0XCIhPXR5cGVvZiB0JiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB0P2U6dH0sVD1mdW5jdGlvbihlKXtyZXR1cm5cIm9iamVjdFwiPT09KHZvaWQgMD09PWU/XCJ1bmRlZmluZWRcIjpqKGUpKSYmZS5jb25zdHJ1Y3Rvcj09PU9iamVjdH0sRD1PYmplY3QuZnJlZXplKFtdKSxCPU9iamVjdC5mcmVlemUoe30pO2Z1bmN0aW9uIFooZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZX1mdW5jdGlvbiAkKGUpe3JldHVybiBlLmRpc3BsYXlOYW1lfHxlLm5hbWV8fFwiQ29tcG9uZW50XCJ9ZnVuY3Rpb24gTihlKXtyZXR1cm4gZSYmXCJzdHJpbmdcIj09dHlwZW9mIGUuc3R5bGVkQ29tcG9uZW50SWR9dmFyIEY9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHByb2Nlc3MmJihwcm9jZXNzLmVudi5SRUFDVF9BUFBfU0NfQVRUUnx8cHJvY2Vzcy5lbnYuU0NfQVRUUil8fFwiZGF0YS1zdHlsZWRcIixXPVwiZGF0YS1zdHlsZWQtdmVyc2lvblwiLFU9XCJkYXRhLXN0eWxlZC1zdHJlYW1lZFwiLHo9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmXCJIVE1MRWxlbWVudFwiaW4gd2luZG93LEc9XCJib29sZWFuXCI9PXR5cGVvZiBTQ19ESVNBQkxFX1NQRUVEWSYmU0NfRElTQUJMRV9TUEVFRFl8fFwidW5kZWZpbmVkXCIhPXR5cGVvZiBwcm9jZXNzJiYocHJvY2Vzcy5lbnYuUkVBQ1RfQVBQX1NDX0RJU0FCTEVfU1BFRURZfHxwcm9jZXNzLmVudi5TQ19ESVNBQkxFX1NQRUVEWSl8fCExLEs9e307dmFyIHE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtSKHRoaXMsdCk7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsbz1BcnJheShyPjE/ci0xOjApLGE9MTthPHI7YSsrKW9bYS0xXT1hcmd1bWVudHNbYV07dmFyIGk9QSh0aGlzLGUuY2FsbCh0aGlzLFwiQW4gZXJyb3Igb2NjdXJyZWQuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vc3R5bGVkLWNvbXBvbmVudHMvc3R5bGVkLWNvbXBvbmVudHMvYmxvYi9tYXN0ZXIvcGFja2FnZXMvc3R5bGVkLWNvbXBvbmVudHMvc3JjL3V0aWxzL2Vycm9ycy5tZCNcIituK1wiIGZvciBtb3JlIGluZm9ybWF0aW9uLlwiKyhvLmxlbmd0aD4wP1wiIEFkZGl0aW9uYWwgYXJndW1lbnRzOiBcIitvLmpvaW4oXCIsIFwiKTpcIlwiKSkpO3JldHVybiBBKGkpfXJldHVybiBIKHQsZSksdH0oRXJyb3IpLFk9L15bXlxcU1xcbl0qP1xcL1xcKiBzYy1jb21wb25lbnQtaWQ6XFxzKihcXFMrKVxccytcXCpcXC8vZ20sSj1mdW5jdGlvbihlKXt2YXIgdD1cIlwiKyhlfHxcIlwiKSxuPVtdO3JldHVybiB0LnJlcGxhY2UoWSwoZnVuY3Rpb24oZSx0LHIpe3JldHVybiBuLnB1c2goe2NvbXBvbmVudElkOnQsbWF0Y2hJbmRleDpyfSksZX0pKSxuLm1hcCgoZnVuY3Rpb24oZSxyKXt2YXIgbz1lLmNvbXBvbmVudElkLGE9ZS5tYXRjaEluZGV4LGk9bltyKzFdO3JldHVybntjb21wb25lbnRJZDpvLGNzc0Zyb21ET006aT90LnNsaWNlKGEsaS5tYXRjaEluZGV4KTp0LnNsaWNlKGEpfX0pKX0sWD0vXlxccypcXC9cXC8uKiQvZ20sUT1uZXcobygpKSh7Z2xvYmFsOiExLGNhc2NhZGU6ITAsa2V5ZnJhbWU6ITEscHJlZml4OiExLGNvbXByZXNzOiExLHNlbWljb2xvbjohMH0pLGVlPW5ldyhvKCkpKHtnbG9iYWw6ITEsY2FzY2FkZTohMCxrZXlmcmFtZTohMSxwcmVmaXg6ITAsY29tcHJlc3M6ITEsc2VtaWNvbG9uOiExfSksdGU9W10sbmU9ZnVuY3Rpb24oZSl7aWYoLTI9PT1lKXt2YXIgdD10ZTtyZXR1cm4gdGU9W10sdH19LHJlPWkoKSgoZnVuY3Rpb24oZSl7dGUucHVzaChlKX0pKSxvZT12b2lkIDAsYWU9dm9pZCAwLGllPXZvaWQgMCxsZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ+MCYmLTEhPT1uLnNsaWNlKDAsdCkuaW5kZXhPZihhZSkmJm4uc2xpY2UodC1hZS5sZW5ndGgsdCkhPT1hZT9cIi5cIitvZTplfTtlZS51c2UoW2Z1bmN0aW9uKGUsdCxuKXsyPT09ZSYmbi5sZW5ndGgmJm5bMF0ubGFzdEluZGV4T2YoYWUpPjAmJihuWzBdPW5bMF0ucmVwbGFjZShpZSxsZSkpfSxyZSxuZV0pLFEudXNlKFtyZSxuZV0pO3ZhciBzZT1mdW5jdGlvbihlKXtyZXR1cm4gUShcIlwiLGUpfTtmdW5jdGlvbiBjZShlLHQsbil7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOlwiJlwiLG89ZS5qb2luKFwiXCIpLnJlcGxhY2UoWCxcIlwiKSxhPXQmJm4/bitcIiBcIit0K1wiIHsgXCIrbytcIiB9XCI6bztyZXR1cm4gb2U9cixhZT10LGllPW5ldyBSZWdFeHAoXCJcXFxcXCIrYWUrXCJcXFxcYlwiLFwiZ1wiKSxlZShufHwhdD9cIlwiOnQsYSl9dmFyIHVlPWZ1bmN0aW9uKCl7cmV0dXJuIG4ubmN9LGRlPWZ1bmN0aW9uKGUsdCxuKXtuJiYoKGVbdF18fChlW3RdPU9iamVjdC5jcmVhdGUobnVsbCkpKVtuXT0hMCl9LHBlPWZ1bmN0aW9uKGUsdCl7ZVt0XT1PYmplY3QuY3JlYXRlKG51bGwpfSxmZT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXtyZXR1cm4gdm9pZCAwIT09ZVt0XSYmZVt0XVtuXX19LGhlPWZ1bmN0aW9uKGUpe3ZhciB0PVwiXCI7Zm9yKHZhciBuIGluIGUpdCs9T2JqZWN0LmtleXMoZVtuXSkuam9pbihcIiBcIikrXCIgXCI7cmV0dXJuIHQudHJpbSgpfSxnZT1mdW5jdGlvbihlKXtpZihlLnNoZWV0KXJldHVybiBlLnNoZWV0O2Zvcih2YXIgdD1lLm93bmVyRG9jdW1lbnQuc3R5bGVTaGVldHMubGVuZ3RoLG49MDtuPHQ7bis9MSl7dmFyIHI9ZS5vd25lckRvY3VtZW50LnN0eWxlU2hlZXRzW25dO2lmKHIub3duZXJOb2RlPT09ZSlyZXR1cm4gcn10aHJvdyBuZXcgcSgxMCl9LHZlPWZ1bmN0aW9uKGUsdCxuKXtpZighdClyZXR1cm4hMTt2YXIgcj1lLmNzc1J1bGVzLmxlbmd0aDt0cnl7ZS5pbnNlcnRSdWxlKHQsbjw9cj9uOnIpfWNhdGNoKGUpe3JldHVybiExfXJldHVybiEwfSxDZT1mdW5jdGlvbihlKXtyZXR1cm5cIlxcbi8qIHNjLWNvbXBvbmVudC1pZDogXCIrZStcIiAqL1xcblwifSxtZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wLHI9MDtyPD10O3IrPTEpbis9ZVtyXTtyZXR1cm4gbn0sd2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHI9dWUoKTtyZXR1cm5cIjxzdHlsZSBcIitbciYmJ25vbmNlPVwiJytyKydcIicsRisnPVwiJytoZSh0KSsnXCInLFcrJz1cIjQuNC4xXCInLG5dLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKStcIj5cIitlKCkrXCI8L3N0eWxlPlwifX0sYmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbixyPSgobj17fSlbRl09aGUodCksbltXXT1cIjQuNC4xXCIsbiksbz11ZSgpO3JldHVybiBvJiYoci5ub25jZT1vKSxsLmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiLFYoe30scix7ZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6e19faHRtbDplKCl9fSkpfX0seWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKGUpfX0seGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jcmVhdGVUZXh0Tm9kZShDZSh0KSl9LGtlPWZ1bmN0aW9uIGUodCxuKXt2YXIgcj12b2lkIDA9PT10P09iamVjdC5jcmVhdGUobnVsbCk6dCxvPXZvaWQgMD09PW4/T2JqZWN0LmNyZWF0ZShudWxsKTpuLGE9ZnVuY3Rpb24oZSl7dmFyIHQ9b1tlXTtyZXR1cm4gdm9pZCAwIT09dD90Om9bZV09W1wiXCJdfSxpPWZ1bmN0aW9uKCl7dmFyIGU9XCJcIjtmb3IodmFyIHQgaW4gbyl7dmFyIG49b1t0XVswXTtuJiYoZSs9Q2UodCkrbil9cmV0dXJuIGV9LGw9e2Nsb25lOmZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IodmFyIG4gaW4gZSl0W25dPVYoe30sZVtuXSk7cmV0dXJuIHR9KHIpLG49T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IodmFyIGEgaW4gbyluW2FdPVtvW2FdWzBdXTtyZXR1cm4gZSh0LG4pfSxjc3M6aSxnZXRJZHM6eWUobyksaGFzTmFtZUZvcklkOmZlKHIpLGluc2VydE1hcmtlcjphLGluc2VydFJ1bGVzOmZ1bmN0aW9uKGUsdCxuKXthKGUpWzBdKz10LmpvaW4oXCIgXCIpLGRlKHIsZSxuKX0scmVtb3ZlUnVsZXM6ZnVuY3Rpb24oZSl7dmFyIHQ9b1tlXTt2b2lkIDAhPT10JiYodFswXT1cIlwiLHBlKHIsZSkpfSxzZWFsZWQ6ITEsc3R5bGVUYWc6bnVsbCx0b0VsZW1lbnQ6YmUoaSxyKSx0b0hUTUw6d2UoaSxyKX07cmV0dXJuIGx9LFNlPWZ1bmN0aW9uKGUsdCxuLHIsbyl7aWYoeiYmIW4pe3ZhciBhPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1kb2N1bWVudDtlP3I9ZS5vd25lckRvY3VtZW50OnQmJihyPXQub3duZXJEb2N1bWVudCk7dmFyIG89ci5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7by5zZXRBdHRyaWJ1dGUoRixcIlwiKSxvLnNldEF0dHJpYnV0ZShXLFwiNC40LjFcIik7dmFyIGE9dWUoKTtpZihhJiZvLnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsYSksby5hcHBlbmRDaGlsZChyLmNyZWF0ZVRleHROb2RlKFwiXCIpKSxlJiYhdCllLmFwcGVuZENoaWxkKG8pO2Vsc2V7aWYoIXR8fCFlfHwhdC5wYXJlbnROb2RlKXRocm93IG5ldyBxKDYpO3QucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobyxuP3Q6dC5uZXh0U2libGluZyl9cmV0dXJuIG99KGUsdCxyKTtyZXR1cm4gRz9mdW5jdGlvbihlLHQpe3ZhciBuPU9iamVjdC5jcmVhdGUobnVsbCkscj1PYmplY3QuY3JlYXRlKG51bGwpLG89dm9pZCAwIT09dCxhPSExLGk9ZnVuY3Rpb24odCl7dmFyIG89clt0XTtyZXR1cm4gdm9pZCAwIT09bz9vOihyW3RdPXhlKGUub3duZXJEb2N1bWVudCx0KSxlLmFwcGVuZENoaWxkKHJbdF0pLG5bdF09T2JqZWN0LmNyZWF0ZShudWxsKSxyW3RdKX0sbD1mdW5jdGlvbigpe3ZhciBlPVwiXCI7Zm9yKHZhciB0IGluIHIpZSs9clt0XS5kYXRhO3JldHVybiBlfTtyZXR1cm57Y2xvbmU6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgcSg1KX0sY3NzOmwsZ2V0SWRzOnllKHIpLGhhc05hbWVGb3JJZDpmZShuKSxpbnNlcnRNYXJrZXI6aSxpbnNlcnRSdWxlczpmdW5jdGlvbihlLHIsbCl7Zm9yKHZhciBzPWkoZSksYz1bXSx1PXIubGVuZ3RoLGQ9MDtkPHU7ZCs9MSl7dmFyIHA9cltkXSxmPW87aWYoZiYmLTEhPT1wLmluZGV4T2YoXCJAaW1wb3J0XCIpKWMucHVzaChwKTtlbHNle2Y9ITE7dmFyIGg9ZD09PXUtMT9cIlwiOlwiIFwiO3MuYXBwZW5kRGF0YShcIlwiK3AraCl9fWRlKG4sZSxsKSxvJiZjLmxlbmd0aD4wJiYoYT0hMCx0KCkuaW5zZXJ0UnVsZXMoZStcIi1pbXBvcnRcIixjKSl9LHJlbW92ZVJ1bGVzOmZ1bmN0aW9uKGkpe3ZhciBsPXJbaV07aWYodm9pZCAwIT09bCl7dmFyIHM9eGUoZS5vd25lckRvY3VtZW50LGkpO2UucmVwbGFjZUNoaWxkKHMsbCkscltpXT1zLHBlKG4saSksbyYmYSYmdCgpLnJlbW92ZVJ1bGVzKGkrXCItaW1wb3J0XCIpfX0sc2VhbGVkOiExLHN0eWxlVGFnOmUsdG9FbGVtZW50OmJlKGwsbiksdG9IVE1MOndlKGwsbil9fShhLG8pOmZ1bmN0aW9uKGUsdCl7dmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKSxyPU9iamVjdC5jcmVhdGUobnVsbCksbz1bXSxhPXZvaWQgMCE9PXQsaT0hMSxsPWZ1bmN0aW9uKGUpe3ZhciB0PXJbZV07cmV0dXJuIHZvaWQgMCE9PXQ/dDoocltlXT1vLmxlbmd0aCxvLnB1c2goMCkscGUobixlKSxyW2VdKX0scz1mdW5jdGlvbigpe3ZhciB0PWdlKGUpLmNzc1J1bGVzLG49XCJcIjtmb3IodmFyIGEgaW4gcil7bis9Q2UoYSk7Zm9yKHZhciBpPXJbYV0sbD1tZShvLGkpLHM9bC1vW2ldO3M8bDtzKz0xKXt2YXIgYz10W3NdO3ZvaWQgMCE9PWMmJihuKz1jLmNzc1RleHQpfX1yZXR1cm4gbn07cmV0dXJue2Nsb25lOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IHEoNSl9LGNzczpzLGdldElkczp5ZShyKSxoYXNOYW1lRm9ySWQ6ZmUobiksaW5zZXJ0TWFya2VyOmwsaW5zZXJ0UnVsZXM6ZnVuY3Rpb24ocixzLGMpe2Zvcih2YXIgdT1sKHIpLGQ9Z2UoZSkscD1tZShvLHUpLGY9MCxoPVtdLGc9cy5sZW5ndGgsdj0wO3Y8Zzt2Kz0xKXt2YXIgQz1zW3ZdLG09YTttJiYtMSE9PUMuaW5kZXhPZihcIkBpbXBvcnRcIik/aC5wdXNoKEMpOnZlKGQsQyxwK2YpJiYobT0hMSxmKz0xKX1hJiZoLmxlbmd0aD4wJiYoaT0hMCx0KCkuaW5zZXJ0UnVsZXMocitcIi1pbXBvcnRcIixoKSksb1t1XSs9ZixkZShuLHIsYyl9LHJlbW92ZVJ1bGVzOmZ1bmN0aW9uKGwpe3ZhciBzPXJbbF07aWYodm9pZCAwIT09cyYmITEhPT1lLmlzQ29ubmVjdGVkKXt2YXIgYz1vW3NdOyFmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPXQtbixvPXQ7bz5yO28tPTEpZS5kZWxldGVSdWxlKG8pfShnZShlKSxtZShvLHMpLTEsYyksb1tzXT0wLHBlKG4sbCksYSYmaSYmdCgpLnJlbW92ZVJ1bGVzKGwrXCItaW1wb3J0XCIpfX0sc2VhbGVkOiExLHN0eWxlVGFnOmUsdG9FbGVtZW50OmJlKHMsbiksdG9IVE1MOndlKHMsbil9fShhLG8pfXJldHVybiBrZSgpfSxPZT0vXFxzKy8sTWU9dm9pZCAwO01lPXo/Rz80MDoxZTM6LTE7dmFyIExlPTAsX2U9dm9pZCAwLFBlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciB0PXRoaXMsbj1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06ej9kb2N1bWVudC5oZWFkOm51bGwscj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO1IodGhpcyxlKSx0aGlzLmdldEltcG9ydFJ1bGVUYWc9ZnVuY3Rpb24oKXt2YXIgZT10LmltcG9ydFJ1bGVUYWc7aWYodm9pZCAwIT09ZSlyZXR1cm4gZTt2YXIgbj10LnRhZ3NbMF07cmV0dXJuIHQuaW1wb3J0UnVsZVRhZz1TZSh0LnRhcmdldCxuP24uc3R5bGVUYWc6bnVsbCx0LmZvcmNlU2VydmVyLCEwKX0sTGUrPTEsdGhpcy5pZD1MZSx0aGlzLmZvcmNlU2VydmVyPXIsdGhpcy50YXJnZXQ9cj9udWxsOm4sdGhpcy50YWdNYXA9e30sdGhpcy5kZWZlcnJlZD17fSx0aGlzLnJlaHlkcmF0ZWROYW1lcz17fSx0aGlzLmlnbm9yZVJlaHlkcmF0ZWROYW1lcz17fSx0aGlzLnRhZ3M9W10sdGhpcy5jYXBhY2l0eT0xLHRoaXMuY2xvbmVzPVtdfXJldHVybiBlLnByb3RvdHlwZS5yZWh5ZHJhdGU9ZnVuY3Rpb24oKXtpZighenx8dGhpcy5mb3JjZVNlcnZlcilyZXR1cm4gdGhpczt2YXIgZT1bXSx0PVtdLG49ITEscj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic3R5bGVbXCIrRitcIl1bXCIrVysnPVwiNC40LjFcIl0nKSxvPXIubGVuZ3RoO2lmKCFvKXJldHVybiB0aGlzO2Zvcih2YXIgYT0wO2E8bzthKz0xKXt2YXIgaT1yW2FdO258fChuPSEhaS5nZXRBdHRyaWJ1dGUoVSkpO2Zvcih2YXIgbCxzPShpLmdldEF0dHJpYnV0ZShGKXx8XCJcIikudHJpbSgpLnNwbGl0KE9lKSxjPXMubGVuZ3RoLHU9MDt1PGM7dSs9MSlsPXNbdV0sdGhpcy5yZWh5ZHJhdGVkTmFtZXNbbF09ITA7dC5wdXNoLmFwcGx5KHQsSihpLnRleHRDb250ZW50KSksZS5wdXNoKGkpfXZhciBkPXQubGVuZ3RoO2lmKCFkKXJldHVybiB0aGlzO3ZhciBwPXRoaXMubWFrZVRhZyhudWxsKTshZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj0wLG89bi5sZW5ndGg7cjxvO3IrPTEpe3ZhciBhPW5bcl0saT1hLmNvbXBvbmVudElkLGw9YS5jc3NGcm9tRE9NLHM9c2UobCk7ZS5pbnNlcnRSdWxlcyhpLHMpfWZvcih2YXIgYz0wLHU9dC5sZW5ndGg7Yzx1O2MrPTEpe3ZhciBkPXRbY107ZC5wYXJlbnROb2RlJiZkLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZCl9fShwLGUsdCksdGhpcy5jYXBhY2l0eT1NYXRoLm1heCgxLE1lLWQpLHRoaXMudGFncy5wdXNoKHApO2Zvcih2YXIgZj0wO2Y8ZDtmKz0xKXRoaXMudGFnTWFwW3RbZl0uY29tcG9uZW50SWRdPXA7cmV0dXJuIHRoaXN9LGUucmVzZXQ9ZnVuY3Rpb24oKXtfZT1uZXcgZSh2b2lkIDAsYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSkucmVoeWRyYXRlKCl9LGUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGUodGhpcy50YXJnZXQsdGhpcy5mb3JjZVNlcnZlcik7cmV0dXJuIHRoaXMuY2xvbmVzLnB1c2godCksdC50YWdzPXRoaXMudGFncy5tYXAoKGZ1bmN0aW9uKGUpe2Zvcih2YXIgbj1lLmdldElkcygpLHI9ZS5jbG9uZSgpLG89MDtvPG4ubGVuZ3RoO28rPTEpdC50YWdNYXBbbltvXV09cjtyZXR1cm4gcn0pKSx0LnJlaHlkcmF0ZWROYW1lcz1WKHt9LHRoaXMucmVoeWRyYXRlZE5hbWVzKSx0LmRlZmVycmVkPVYoe30sdGhpcy5kZWZlcnJlZCksdH0sZS5wcm90b3R5cGUuc2VhbEFsbFRhZ3M9ZnVuY3Rpb24oKXt0aGlzLmNhcGFjaXR5PTEsdGhpcy50YWdzLmZvckVhY2goKGZ1bmN0aW9uKGUpe2Uuc2VhbGVkPSEwfSkpfSxlLnByb3RvdHlwZS5tYWtlVGFnPWZ1bmN0aW9uKGUpe3ZhciB0PWU/ZS5zdHlsZVRhZzpudWxsO3JldHVybiBTZSh0aGlzLnRhcmdldCx0LHRoaXMuZm9yY2VTZXJ2ZXIsITEsdGhpcy5nZXRJbXBvcnRSdWxlVGFnKX0sZS5wcm90b3R5cGUuZ2V0VGFnRm9ySWQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy50YWdNYXBbZV07aWYodm9pZCAwIT09dCYmIXQuc2VhbGVkKXJldHVybiB0O3ZhciBuPXRoaXMudGFnc1t0aGlzLnRhZ3MubGVuZ3RoLTFdO3JldHVybiB0aGlzLmNhcGFjaXR5LT0xLDA9PT10aGlzLmNhcGFjaXR5JiYodGhpcy5jYXBhY2l0eT1NZSxuPXRoaXMubWFrZVRhZyhuKSx0aGlzLnRhZ3MucHVzaChuKSksdGhpcy50YWdNYXBbZV09bn0sZS5wcm90b3R5cGUuaGFzSWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PXRoaXMudGFnTWFwW2VdfSxlLnByb3RvdHlwZS5oYXNOYW1lRm9ySWQ9ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDA9PT10aGlzLmlnbm9yZVJlaHlkcmF0ZWROYW1lc1tlXSYmdGhpcy5yZWh5ZHJhdGVkTmFtZXNbdF0pcmV0dXJuITA7dmFyIG49dGhpcy50YWdNYXBbZV07cmV0dXJuIHZvaWQgMCE9PW4mJm4uaGFzTmFtZUZvcklkKGUsdCl9LGUucHJvdG90eXBlLmRlZmVycmVkSW5qZWN0PWZ1bmN0aW9uKGUsdCl7aWYodm9pZCAwPT09dGhpcy50YWdNYXBbZV0pe2Zvcih2YXIgbj10aGlzLmNsb25lcyxyPTA7cjxuLmxlbmd0aDtyKz0xKW5bcl0uZGVmZXJyZWRJbmplY3QoZSx0KTt0aGlzLmdldFRhZ0ZvcklkKGUpLmluc2VydE1hcmtlcihlKSx0aGlzLmRlZmVycmVkW2VdPXR9fSxlLnByb3RvdHlwZS5pbmplY3Q9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj10aGlzLmNsb25lcyxvPTA7bzxyLmxlbmd0aDtvKz0xKXJbb10uaW5qZWN0KGUsdCxuKTt2YXIgYT10aGlzLmdldFRhZ0ZvcklkKGUpO2lmKHZvaWQgMCE9PXRoaXMuZGVmZXJyZWRbZV0pe3ZhciBpPXRoaXMuZGVmZXJyZWRbZV0uY29uY2F0KHQpO2EuaW5zZXJ0UnVsZXMoZSxpLG4pLHRoaXMuZGVmZXJyZWRbZV09dm9pZCAwfWVsc2UgYS5pbnNlcnRSdWxlcyhlLHQsbil9LGUucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnRhZ01hcFtlXTtpZih2b2lkIDAhPT10KXtmb3IodmFyIG49dGhpcy5jbG9uZXMscj0wO3I8bi5sZW5ndGg7cis9MSluW3JdLnJlbW92ZShlKTt0LnJlbW92ZVJ1bGVzKGUpLHRoaXMuaWdub3JlUmVoeWRyYXRlZE5hbWVzW2VdPSEwLHRoaXMuZGVmZXJyZWRbZV09dm9pZCAwfX0sZS5wcm90b3R5cGUudG9IVE1MPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFncy5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRvSFRNTCgpfSkpLmpvaW4oXCJcIil9LGUucHJvdG90eXBlLnRvUmVhY3RFbGVtZW50cz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuaWQ7cmV0dXJuIHRoaXMudGFncy5tYXAoKGZ1bmN0aW9uKHQsbil7dmFyIHI9XCJzYy1cIitlK1wiLVwiK247cmV0dXJuKDAsbC5jbG9uZUVsZW1lbnQpKHQudG9FbGVtZW50KCkse2tleTpyfSl9KSl9LEkoZSxudWxsLFt7a2V5OlwibWFzdGVyXCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF9lfHwoX2U9KG5ldyBlKS5yZWh5ZHJhdGUoKSl9fSx7a2V5OlwiaW5zdGFuY2VcIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5tYXN0ZXJ9fV0pLGV9KCksRWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbil7dmFyIHI9dGhpcztSKHRoaXMsZSksdGhpcy5pbmplY3Q9ZnVuY3Rpb24oZSl7ZS5oYXNOYW1lRm9ySWQoci5pZCxyLm5hbWUpfHxlLmluamVjdChyLmlkLHIucnVsZXMsci5uYW1lKX0sdGhpcy50b1N0cmluZz1mdW5jdGlvbigpe3Rocm93IG5ldyBxKDEyLFN0cmluZyhyLm5hbWUpKX0sdGhpcy5uYW1lPXQsdGhpcy5ydWxlcz1uLHRoaXMuaWQ9XCJzYy1rZXlmcmFtZXMtXCIrdH1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0TmFtZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5hbWV9LGV9KCksamU9LyhbQS1aXSkvZyxSZT0vXm1zLS87ZnVuY3Rpb24gSWUoZSl7cmV0dXJuIGUucmVwbGFjZShqZSxcIi0kMVwiKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoUmUsXCItbXMtXCIpfXZhciBWZT1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZXx8ITE9PT1lfHxcIlwiPT09ZX0sSGU9ZnVuY3Rpb24gZSh0LG4pe3ZhciByPVtdO3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihuKXtpZighVmUodFtuXSkpe2lmKFQodFtuXSkpcmV0dXJuIHIucHVzaC5hcHBseShyLGUodFtuXSxuKSkscjtpZihaKHRbbl0pKXJldHVybiByLnB1c2goSWUobikrXCI6XCIsdFtuXSxcIjtcIikscjtyLnB1c2goSWUobikrXCI6IFwiKyhvPW4sKG51bGw9PShhPXRbbl0pfHxcImJvb2xlYW5cIj09dHlwZW9mIGF8fFwiXCI9PT1hP1wiXCI6XCJudW1iZXJcIiE9dHlwZW9mIGF8fDA9PT1hfHxvIGluIHM/U3RyaW5nKGEpLnRyaW0oKTphK1wicHhcIikrXCI7XCIpKX12YXIgbyxhO3JldHVybiByfSkpLG4/W24rXCIge1wiXS5jb25jYXQocixbXCJ9XCJdKTpyfTtmdW5jdGlvbiBBZShlLHQsbil7aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKHZhciByLG89W10sYT0wLGk9ZS5sZW5ndGg7YTxpO2ErPTEpbnVsbCE9PShyPUFlKGVbYV0sdCxuKSkmJihBcnJheS5pc0FycmF5KHIpP28ucHVzaC5hcHBseShvLHIpOm8ucHVzaChyKSk7cmV0dXJuIG99cmV0dXJuIFZlKGUpP251bGw6TihlKT9cIi5cIitlLnN0eWxlZENvbXBvbmVudElkOlooZSk/XCJmdW5jdGlvblwiIT10eXBlb2YobD1lKXx8bC5wcm90b3R5cGUmJmwucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnR8fCF0P2U6QWUoZSh0KSx0LG4pOmUgaW5zdGFuY2VvZiBFZT9uPyhlLmluamVjdChuKSxlLmdldE5hbWUoKSk6ZTpUKGUpP0hlKGUpOmUudG9TdHJpbmcoKTt2YXIgbH1mdW5jdGlvbiBUZShlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPUFycmF5KHQ+MT90LTE6MCkscj0xO3I8dDtyKyspbltyLTFdPWFyZ3VtZW50c1tyXTtyZXR1cm4gWihlKXx8VChlKT9BZShFKEQsW2VdLmNvbmNhdChuKSkpOkFlKEUoZSxuKSl9ZnVuY3Rpb24gRGUoZSx0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06QjtpZighKDAsYy5pc1ZhbGlkRWxlbWVudFR5cGUpKHQpKXRocm93IG5ldyBxKDEsU3RyaW5nKHQpKTt2YXIgcj1mdW5jdGlvbigpe3JldHVybiBlKHQsbixUZS5hcHBseSh2b2lkIDAsYXJndW1lbnRzKSl9O3JldHVybiByLndpdGhDb25maWc9ZnVuY3Rpb24ocil7cmV0dXJuIERlKGUsdCxWKHt9LG4scikpfSxyLmF0dHJzPWZ1bmN0aW9uKHIpe3JldHVybiBEZShlLHQsVih7fSxuLHthdHRyczpBcnJheS5wcm90b3R5cGUuY29uY2F0KG4uYXR0cnMscikuZmlsdGVyKEJvb2xlYW4pfSkpfSxyfWZ1bmN0aW9uIEJlKGUpe2Zvcih2YXIgdCxuPTB8ZS5sZW5ndGgscj0wfG4sbz0wO24+PTQ7KXQ9MTU0MDQ4MzQ3NyooNjU1MzUmKHQ9MjU1JmUuY2hhckNvZGVBdChvKXwoMjU1JmUuY2hhckNvZGVBdCgrK28pKTw8OHwoMjU1JmUuY2hhckNvZGVBdCgrK28pKTw8MTZ8KDI1NSZlLmNoYXJDb2RlQXQoKytvKSk8PDI0KSkrKCgxNTQwNDgzNDc3Kih0Pj4+MTYpJjY1NTM1KTw8MTYpLHI9MTU0MDQ4MzQ3NyooNjU1MzUmcikrKCgxNTQwNDgzNDc3KihyPj4+MTYpJjY1NTM1KTw8MTYpXih0PTE1NDA0ODM0NzcqKDY1NTM1Jih0Xj10Pj4+MjQpKSsoKDE1NDA0ODM0NzcqKHQ+Pj4xNikmNjU1MzUpPDwxNikpLG4tPTQsKytvO3N3aXRjaChuKXtjYXNlIDM6cl49KDI1NSZlLmNoYXJDb2RlQXQobysyKSk8PDE2O2Nhc2UgMjpyXj0oMjU1JmUuY2hhckNvZGVBdChvKzEpKTw8ODtjYXNlIDE6cj0xNTQwNDgzNDc3Kig2NTUzNSYocl49MjU1JmUuY2hhckNvZGVBdChvKSkpKygoMTU0MDQ4MzQ3Nyoocj4+PjE2KSY2NTUzNSk8PDE2KX1yZXR1cm4oKHI9MTU0MDQ4MzQ3NyooNjU1MzUmKHJePXI+Pj4xMykpKygoMTU0MDQ4MzQ3Nyoocj4+PjE2KSY2NTUzNSk8PDE2KSlecj4+PjE1KT4+PjB9dmFyIFplPTUyLCRlPWZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGUrKGU+MjU/Mzk6OTcpKX07ZnVuY3Rpb24gTmUoZSl7dmFyIHQ9XCJcIixuPXZvaWQgMDtmb3Iobj1lO24+WmU7bj1NYXRoLmZsb29yKG4vWmUpKXQ9JGUobiVaZSkrdDtyZXR1cm4gJGUobiVaZSkrdH1mdW5jdGlvbiBGZShlLHQpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bis9MSl7dmFyIHI9ZVtuXTtpZihBcnJheS5pc0FycmF5KHIpJiYhRmUocix0KSlyZXR1cm4hMTtpZihaKHIpJiYhTihyKSlyZXR1cm4hMX1yZXR1cm4hdC5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4gWihlKXx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIGUpaWYoWihlW3RdKSlyZXR1cm4hMDtyZXR1cm4hMX0oZSl9KSl9dmFyIFdlLFVlPWZ1bmN0aW9uKGUpe3JldHVybiBOZShCZShlKSl9LHplPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4scil7Uih0aGlzLGUpLHRoaXMucnVsZXM9dCx0aGlzLmlzU3RhdGljPUZlKHQsbiksdGhpcy5jb21wb25lbnRJZD1yLFBlLm1hc3Rlci5oYXNJZChyKXx8UGUubWFzdGVyLmRlZmVycmVkSW5qZWN0KHIsW10pfXJldHVybiBlLnByb3RvdHlwZS5nZW5lcmF0ZUFuZEluamVjdFN0eWxlcz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuaXNTdGF0aWMscj10aGlzLmNvbXBvbmVudElkLG89dGhpcy5sYXN0Q2xhc3NOYW1lO2lmKHomJm4mJlwic3RyaW5nXCI9PXR5cGVvZiBvJiZ0Lmhhc05hbWVGb3JJZChyLG8pKXJldHVybiBvO3ZhciBhPUFlKHRoaXMucnVsZXMsZSx0KSxpPVVlKHRoaXMuY29tcG9uZW50SWQrYS5qb2luKFwiXCIpKTtyZXR1cm4gdC5oYXNOYW1lRm9ySWQocixpKXx8dC5pbmplY3QodGhpcy5jb21wb25lbnRJZCxjZShhLFwiLlwiK2ksdm9pZCAwLHIpLGkpLHRoaXMubGFzdENsYXNzTmFtZT1pLGl9LGUuZ2VuZXJhdGVOYW1lPWZ1bmN0aW9uKGUpe3JldHVybiBVZShlKX0sZX0oKSxHZT1mdW5jdGlvbihlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpCLHI9ISFuJiZlLnRoZW1lPT09bi50aGVtZTtyZXR1cm4gZS50aGVtZSYmIXI/ZS50aGVtZTp0fHxuLnRoZW1lfSxLZT0vW1tcXF0uIyokPjwrfj18XjooKSxcIidgLV0rL2cscWU9LyheLXwtJCkvZztmdW5jdGlvbiBZZShlKXtyZXR1cm4gZS5yZXBsYWNlKEtlLFwiLVwiKS5yZXBsYWNlKHFlLFwiXCIpfWZ1bmN0aW9uIEplKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlJiYhMH12YXIgWGU9e2NoaWxkQ29udGV4dFR5cGVzOiEwLGNvbnRleHRUeXBlczohMCxkZWZhdWx0UHJvcHM6ITAsZGlzcGxheU5hbWU6ITAsZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOiEwLHByb3BUeXBlczohMCx0eXBlOiEwfSxRZT17bmFtZTohMCxsZW5ndGg6ITAscHJvdG90eXBlOiEwLGNhbGxlcjohMCxjYWxsZWU6ITAsYXJndW1lbnRzOiEwLGFyaXR5OiEwfSxldD0oKFdlPXt9KVtjLkZvcndhcmRSZWZdPXskJHR5cGVvZjohMCxyZW5kZXI6ITB9LFdlKSx0dD1PYmplY3QuZGVmaW5lUHJvcGVydHksbnQ9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMscnQ9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxvdD12b2lkIDA9PT1ydD9mdW5jdGlvbigpe3JldHVybltdfTpydCxhdD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLGl0PU9iamVjdC5nZXRQcm90b3R5cGVPZixsdD1PYmplY3QucHJvdG90eXBlLHN0PUFycmF5LnByb3RvdHlwZTtmdW5jdGlvbiBjdChlLHQsbil7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpe3ZhciByPWl0KHQpO3ImJnIhPT1sdCYmY3QoZSxyLG4pO2Zvcih2YXIgbz1zdC5jb25jYXQobnQodCksb3QodCkpLGE9ZXRbZS4kJHR5cGVvZl18fFhlLGk9ZXRbdC4kJHR5cGVvZl18fFhlLGw9by5sZW5ndGgscz12b2lkIDAsYz12b2lkIDA7bC0tOylpZihjPW9bbF0sIShRZVtjXXx8biYmbltjXXx8aSYmaVtjXXx8YSYmYVtjXSkmJihzPWF0KHQsYykpKXRyeXt0dChlLGMscyl9Y2F0Y2goZSl7fXJldHVybiBlfXJldHVybiBlfXZhciB1dD0oMCxsLmNyZWF0ZUNvbnRleHQpKCksZHQ9dXQuQ29uc3VtZXIscHQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtSKHRoaXMsdCk7dmFyIHI9QSh0aGlzLGUuY2FsbCh0aGlzLG4pKTtyZXR1cm4gci5nZXRDb250ZXh0PXAoci5nZXRDb250ZXh0LmJpbmQocikpLHIucmVuZGVySW5uZXI9ci5yZW5kZXJJbm5lci5iaW5kKHIpLHJ9cmV0dXJuIEgodCxlKSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbj9sLmNyZWF0ZUVsZW1lbnQodXQuQ29uc3VtZXIsbnVsbCx0aGlzLnJlbmRlcklubmVyKTpudWxsfSx0LnByb3RvdHlwZS5yZW5kZXJJbm5lcj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldENvbnRleHQodGhpcy5wcm9wcy50aGVtZSxlKTtyZXR1cm4gbC5jcmVhdGVFbGVtZW50KHV0LlByb3ZpZGVyLHt2YWx1ZTp0fSx0aGlzLnByb3BzLmNoaWxkcmVuKX0sdC5wcm90b3R5cGUuZ2V0VGhlbWU9ZnVuY3Rpb24oZSx0KXtpZihaKGUpKXJldHVybiBlKHQpO2lmKG51bGw9PT1lfHxBcnJheS5pc0FycmF5KGUpfHxcIm9iamVjdFwiIT09KHZvaWQgMD09PWU/XCJ1bmRlZmluZWRcIjpqKGUpKSl0aHJvdyBuZXcgcSg4KTtyZXR1cm4gVih7fSx0LGUpfSx0LnByb3RvdHlwZS5nZXRDb250ZXh0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZ2V0VGhlbWUoZSx0KX0sdH0obC5Db21wb25lbnQpLGZ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe1IodGhpcyxlKSx0aGlzLm1hc3RlclNoZWV0PVBlLm1hc3Rlcix0aGlzLmluc3RhbmNlPXRoaXMubWFzdGVyU2hlZXQuY2xvbmUoKSx0aGlzLnNlYWxlZD0hMX1yZXR1cm4gZS5wcm90b3R5cGUuc2VhbD1mdW5jdGlvbigpe2lmKCF0aGlzLnNlYWxlZCl7dmFyIGU9dGhpcy5tYXN0ZXJTaGVldC5jbG9uZXMuaW5kZXhPZih0aGlzLmluc3RhbmNlKTt0aGlzLm1hc3RlclNoZWV0LmNsb25lcy5zcGxpY2UoZSwxKSx0aGlzLnNlYWxlZD0hMH19LGUucHJvdG90eXBlLmNvbGxlY3RTdHlsZXM9ZnVuY3Rpb24oZSl7aWYodGhpcy5zZWFsZWQpdGhyb3cgbmV3IHEoMik7cmV0dXJuIGwuY3JlYXRlRWxlbWVudCh2dCx7c2hlZXQ6dGhpcy5pbnN0YW5jZX0sZSl9LGUucHJvdG90eXBlLmdldFN0eWxlVGFncz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlYWwoKSx0aGlzLmluc3RhbmNlLnRvSFRNTCgpfSxlLnByb3RvdHlwZS5nZXRTdHlsZUVsZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWFsKCksdGhpcy5pbnN0YW5jZS50b1JlYWN0RWxlbWVudHMoKX0sZS5wcm90b3R5cGUuaW50ZXJsZWF2ZVdpdGhOb2RlU3RyZWFtPWZ1bmN0aW9uKGUpe3Rocm93IG5ldyBxKDMpfSxlfSgpLGh0PSgwLGwuY3JlYXRlQ29udGV4dCkoKSxndD1odC5Db25zdW1lcix2dD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe1IodGhpcyx0KTt2YXIgcj1BKHRoaXMsZS5jYWxsKHRoaXMsbikpO3JldHVybiByLmdldENvbnRleHQ9cChyLmdldENvbnRleHQpLHJ9cmV0dXJuIEgodCxlKSx0LnByb3RvdHlwZS5nZXRDb250ZXh0PWZ1bmN0aW9uKGUsdCl7aWYoZSlyZXR1cm4gZTtpZih0KXJldHVybiBuZXcgUGUodCk7dGhyb3cgbmV3IHEoNCl9LHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmNoaWxkcmVuLG49ZS5zaGVldCxyPWUudGFyZ2V0O3JldHVybiBsLmNyZWF0ZUVsZW1lbnQoaHQuUHJvdmlkZXIse3ZhbHVlOnRoaXMuZ2V0Q29udGV4dChuLHIpfSx0KX0sdH0obC5Db21wb25lbnQpLEN0PXt9O3ZhciBtdD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7Uih0aGlzLHQpO3ZhciBuPUEodGhpcyxlLmNhbGwodGhpcykpO3JldHVybiBuLmF0dHJzPXt9LG4ucmVuZGVyT3V0ZXI9bi5yZW5kZXJPdXRlci5iaW5kKG4pLG4ucmVuZGVySW5uZXI9bi5yZW5kZXJJbm5lci5iaW5kKG4pLG59cmV0dXJuIEgodCxlKSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbC5jcmVhdGVFbGVtZW50KGd0LG51bGwsdGhpcy5yZW5kZXJPdXRlcil9LHQucHJvdG90eXBlLnJlbmRlck91dGVyPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOlBlLm1hc3RlcjtyZXR1cm4gdGhpcy5zdHlsZVNoZWV0PWUsdGhpcy5wcm9wcy5mb3J3YXJkZWRDb21wb25lbnQuY29tcG9uZW50U3R5bGUuaXNTdGF0aWM/dGhpcy5yZW5kZXJJbm5lcigpOmwuY3JlYXRlRWxlbWVudChkdCxudWxsLHRoaXMucmVuZGVySW5uZXIpfSx0LnByb3RvdHlwZS5yZW5kZXJJbm5lcj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnByb3BzLmZvcndhcmRlZENvbXBvbmVudCxuPXQuY29tcG9uZW50U3R5bGUscj10LmRlZmF1bHRQcm9wcyxvPSh0LmRpc3BsYXlOYW1lLHQuZm9sZGVkQ29tcG9uZW50SWRzKSxhPXQuc3R5bGVkQ29tcG9uZW50SWQsaT10LnRhcmdldCxzPXZvaWQgMDtzPW4uaXNTdGF0aWM/dGhpcy5nZW5lcmF0ZUFuZEluamVjdFN0eWxlcyhCLHRoaXMucHJvcHMpOnRoaXMuZ2VuZXJhdGVBbmRJbmplY3RTdHlsZXMoR2UodGhpcy5wcm9wcyxlLHIpfHxCLHRoaXMucHJvcHMpO3ZhciBjPXRoaXMucHJvcHMuYXN8fHRoaXMuYXR0cnMuYXN8fGksdT1KZShjKSxkPXt9LHA9Vih7fSx0aGlzLnByb3BzLHRoaXMuYXR0cnMpLGY9dm9pZCAwO2ZvcihmIGluIHApXCJmb3J3YXJkZWRDb21wb25lbnRcIiE9PWYmJlwiYXNcIiE9PWYmJihcImZvcndhcmRlZFJlZlwiPT09Zj9kLnJlZj1wW2ZdOlwiZm9yd2FyZGVkQXNcIj09PWY/ZC5hcz1wW2ZdOnUmJiFoKGYpfHwoZFtmXT1wW2ZdKSk7cmV0dXJuIHRoaXMucHJvcHMuc3R5bGUmJnRoaXMuYXR0cnMuc3R5bGUmJihkLnN0eWxlPVYoe30sdGhpcy5hdHRycy5zdHlsZSx0aGlzLnByb3BzLnN0eWxlKSksZC5jbGFzc05hbWU9QXJyYXkucHJvdG90eXBlLmNvbmNhdChvLGEscyE9PWE/czpudWxsLHRoaXMucHJvcHMuY2xhc3NOYW1lLHRoaXMuYXR0cnMuY2xhc3NOYW1lKS5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIiksKDAsbC5jcmVhdGVFbGVtZW50KShjLGQpfSx0LnByb3RvdHlwZS5idWlsZEV4ZWN1dGlvbkNvbnRleHQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMsbz1WKHt9LHQse3RoZW1lOmV9KTtyZXR1cm4gbi5sZW5ndGg/KHRoaXMuYXR0cnM9e30sbi5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdCxuPWUsYT0hMSxpPXZvaWQgMCxsPXZvaWQgMDtmb3IobCBpbiBaKG4pJiYobj1uKG8pLGE9ITApLG4paT1uW2xdLGF8fCFaKGkpfHwodD1pKSYmdC5wcm90b3R5cGUmJnQucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnR8fE4oaSl8fChpPWkobykpLHIuYXR0cnNbbF09aSxvW2xdPWl9KSksbyk6b30sdC5wcm90b3R5cGUuZ2VuZXJhdGVBbmRJbmplY3RTdHlsZXM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmZvcndhcmRlZENvbXBvbmVudCxyPW4uYXR0cnMsbz1uLmNvbXBvbmVudFN0eWxlO24ud2FyblRvb01hbnlDbGFzc2VzO3JldHVybiBvLmlzU3RhdGljJiYhci5sZW5ndGg/by5nZW5lcmF0ZUFuZEluamVjdFN0eWxlcyhCLHRoaXMuc3R5bGVTaGVldCk6by5nZW5lcmF0ZUFuZEluamVjdFN0eWxlcyh0aGlzLmJ1aWxkRXhlY3V0aW9uQ29udGV4dChlLHQsciksdGhpcy5zdHlsZVNoZWV0KX0sdH0obC5Db21wb25lbnQpO2Z1bmN0aW9uIHd0KGUsdCxuKXt2YXIgcj1OKGUpLG89IUplKGUpLGE9dC5kaXNwbGF5TmFtZSxpPXZvaWQgMD09PWE/ZnVuY3Rpb24oZSl7cmV0dXJuIEplKGUpP1wic3R5bGVkLlwiK2U6XCJTdHlsZWQoXCIrJChlKStcIilcIn0oZSk6YSxzPXQuY29tcG9uZW50SWQsYz12b2lkIDA9PT1zP2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj1cInN0cmluZ1wiIT10eXBlb2YgdD9cInNjXCI6WWUodCksbz0oQ3Rbcl18fDApKzE7Q3Rbcl09bzt2YXIgYT1yK1wiLVwiK2UuZ2VuZXJhdGVOYW1lKHIrbyk7cmV0dXJuIG4/bitcIi1cIithOmF9KHplLHQuZGlzcGxheU5hbWUsdC5wYXJlbnRDb21wb25lbnRJZCk6cyx1PXQuUGFyZW50Q29tcG9uZW50LGQ9dm9pZCAwPT09dT9tdDp1LHA9dC5hdHRycyxmPXZvaWQgMD09PXA/RDpwLGg9dC5kaXNwbGF5TmFtZSYmdC5jb21wb25lbnRJZD9ZZSh0LmRpc3BsYXlOYW1lKStcIi1cIit0LmNvbXBvbmVudElkOnQuY29tcG9uZW50SWR8fGMsZz1yJiZlLmF0dHJzP0FycmF5LnByb3RvdHlwZS5jb25jYXQoZS5hdHRycyxmKS5maWx0ZXIoQm9vbGVhbik6Zix2PW5ldyB6ZShyP2UuY29tcG9uZW50U3R5bGUucnVsZXMuY29uY2F0KG4pOm4sZyxoKSxDPXZvaWQgMCxtPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGwuY3JlYXRlRWxlbWVudChkLFYoe30sZSx7Zm9yd2FyZGVkQ29tcG9uZW50OkMsZm9yd2FyZGVkUmVmOnR9KSl9O3JldHVybiBtLmRpc3BsYXlOYW1lPWksKEM9bC5mb3J3YXJkUmVmKG0pKS5kaXNwbGF5TmFtZT1pLEMuYXR0cnM9ZyxDLmNvbXBvbmVudFN0eWxlPXYsQy5mb2xkZWRDb21wb25lbnRJZHM9cj9BcnJheS5wcm90b3R5cGUuY29uY2F0KGUuZm9sZGVkQ29tcG9uZW50SWRzLGUuc3R5bGVkQ29tcG9uZW50SWQpOkQsQy5zdHlsZWRDb21wb25lbnRJZD1oLEMudGFyZ2V0PXI/ZS50YXJnZXQ6ZSxDLndpdGhDb21wb25lbnQ9ZnVuY3Rpb24oZSl7dmFyIHI9dC5jb21wb25lbnRJZCxvPWZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpdC5pbmRleE9mKHIpPj0wfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmKG5bcl09ZVtyXSk7cmV0dXJuIG59KHQsW1wiY29tcG9uZW50SWRcIl0pLGE9ciYmcitcIi1cIisoSmUoZSk/ZTpZZSgkKGUpKSk7cmV0dXJuIHd0KGUsVih7fSxvLHthdHRyczpnLGNvbXBvbmVudElkOmEsUGFyZW50Q29tcG9uZW50OmR9KSxuKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KEMsXCJkZWZhdWx0UHJvcHNcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZvbGRlZERlZmF1bHRQcm9wc30sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2ZvbGRlZERlZmF1bHRQcm9wcz1yP1AoZS5kZWZhdWx0UHJvcHMsdCk6dH19KSxDLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCIuXCIrQy5zdHlsZWRDb21wb25lbnRJZH0sbyYmY3QoQyxlLHthdHRyczohMCxjb21wb25lbnRTdHlsZTohMCxkaXNwbGF5TmFtZTohMCxmb2xkZWRDb21wb25lbnRJZHM6ITAsc3R5bGVkQ29tcG9uZW50SWQ6ITAsdGFyZ2V0OiEwLHdpdGhDb21wb25lbnQ6ITB9KSxDfXZhciBidD1mdW5jdGlvbihlKXtyZXR1cm4gRGUod3QsZSl9O1tcImFcIixcImFiYnJcIixcImFkZHJlc3NcIixcImFyZWFcIixcImFydGljbGVcIixcImFzaWRlXCIsXCJhdWRpb1wiLFwiYlwiLFwiYmFzZVwiLFwiYmRpXCIsXCJiZG9cIixcImJpZ1wiLFwiYmxvY2txdW90ZVwiLFwiYm9keVwiLFwiYnJcIixcImJ1dHRvblwiLFwiY2FudmFzXCIsXCJjYXB0aW9uXCIsXCJjaXRlXCIsXCJjb2RlXCIsXCJjb2xcIixcImNvbGdyb3VwXCIsXCJkYXRhXCIsXCJkYXRhbGlzdFwiLFwiZGRcIixcImRlbFwiLFwiZGV0YWlsc1wiLFwiZGZuXCIsXCJkaWFsb2dcIixcImRpdlwiLFwiZGxcIixcImR0XCIsXCJlbVwiLFwiZW1iZWRcIixcImZpZWxkc2V0XCIsXCJmaWdjYXB0aW9uXCIsXCJmaWd1cmVcIixcImZvb3RlclwiLFwiZm9ybVwiLFwiaDFcIixcImgyXCIsXCJoM1wiLFwiaDRcIixcImg1XCIsXCJoNlwiLFwiaGVhZFwiLFwiaGVhZGVyXCIsXCJoZ3JvdXBcIixcImhyXCIsXCJodG1sXCIsXCJpXCIsXCJpZnJhbWVcIixcImltZ1wiLFwiaW5wdXRcIixcImluc1wiLFwia2JkXCIsXCJrZXlnZW5cIixcImxhYmVsXCIsXCJsZWdlbmRcIixcImxpXCIsXCJsaW5rXCIsXCJtYWluXCIsXCJtYXBcIixcIm1hcmtcIixcIm1hcnF1ZWVcIixcIm1lbnVcIixcIm1lbnVpdGVtXCIsXCJtZXRhXCIsXCJtZXRlclwiLFwibmF2XCIsXCJub3NjcmlwdFwiLFwib2JqZWN0XCIsXCJvbFwiLFwib3B0Z3JvdXBcIixcIm9wdGlvblwiLFwib3V0cHV0XCIsXCJwXCIsXCJwYXJhbVwiLFwicGljdHVyZVwiLFwicHJlXCIsXCJwcm9ncmVzc1wiLFwicVwiLFwicnBcIixcInJ0XCIsXCJydWJ5XCIsXCJzXCIsXCJzYW1wXCIsXCJzY3JpcHRcIixcInNlY3Rpb25cIixcInNlbGVjdFwiLFwic21hbGxcIixcInNvdXJjZVwiLFwic3BhblwiLFwic3Ryb25nXCIsXCJzdHlsZVwiLFwic3ViXCIsXCJzdW1tYXJ5XCIsXCJzdXBcIixcInRhYmxlXCIsXCJ0Ym9keVwiLFwidGRcIixcInRleHRhcmVhXCIsXCJ0Zm9vdFwiLFwidGhcIixcInRoZWFkXCIsXCJ0aW1lXCIsXCJ0aXRsZVwiLFwidHJcIixcInRyYWNrXCIsXCJ1XCIsXCJ1bFwiLFwidmFyXCIsXCJ2aWRlb1wiLFwid2JyXCIsXCJjaXJjbGVcIixcImNsaXBQYXRoXCIsXCJkZWZzXCIsXCJlbGxpcHNlXCIsXCJmb3JlaWduT2JqZWN0XCIsXCJnXCIsXCJpbWFnZVwiLFwibGluZVwiLFwibGluZWFyR3JhZGllbnRcIixcIm1hcmtlclwiLFwibWFza1wiLFwicGF0aFwiLFwicGF0dGVyblwiLFwicG9seWdvblwiLFwicG9seWxpbmVcIixcInJhZGlhbEdyYWRpZW50XCIsXCJyZWN0XCIsXCJzdG9wXCIsXCJzdmdcIixcInRleHRcIixcInRzcGFuXCJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe2J0W2VdPWJ0KGUpfSkpO3ZhciB5dD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxuKXtSKHRoaXMsZSksdGhpcy5ydWxlcz10LHRoaXMuY29tcG9uZW50SWQ9bix0aGlzLmlzU3RhdGljPUZlKHQsRCksUGUubWFzdGVyLmhhc0lkKG4pfHxQZS5tYXN0ZXIuZGVmZXJyZWRJbmplY3QobixbXSl9cmV0dXJuIGUucHJvdG90eXBlLmNyZWF0ZVN0eWxlcz1mdW5jdGlvbihlLHQpe3ZhciBuPWNlKEFlKHRoaXMucnVsZXMsZSx0KSxcIlwiKTt0LmluamVjdCh0aGlzLmNvbXBvbmVudElkLG4pfSxlLnByb3RvdHlwZS5yZW1vdmVTdHlsZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jb21wb25lbnRJZDtlLmhhc0lkKHQpJiZlLnJlbW92ZSh0KX0sZS5wcm90b3R5cGUucmVuZGVyU3R5bGVzPWZ1bmN0aW9uKGUsdCl7dGhpcy5yZW1vdmVTdHlsZXModCksdGhpcy5jcmVhdGVTdHlsZXMoZSx0KX0sZX0oKTtmdW5jdGlvbiB4dChlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPUFycmF5KHQ+MT90LTE6MCkscj0xO3I8dDtyKyspbltyLTFdPWFyZ3VtZW50c1tyXTt2YXIgbz1UZS5hcHBseSh2b2lkIDAsW2VdLmNvbmNhdChuKSksYT1cInNjLWdsb2JhbC1cIitCZShKU09OLnN0cmluZ2lmeShvKSksaT1uZXcgeXQobyxhKSxzPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7Uih0aGlzLHQpO3ZhciByPUEodGhpcyxlLmNhbGwodGhpcyxuKSksbz1yLmNvbnN0cnVjdG9yLGE9by5nbG9iYWxTdHlsZSxpPW8uc3R5bGVkQ29tcG9uZW50SWQ7cmV0dXJuIHomJih3aW5kb3cuc2NDR1NITVJDYWNoZVtpXT0od2luZG93LnNjQ0dTSE1SQ2FjaGVbaV18fDApKzEpLHIuc3RhdGU9e2dsb2JhbFN0eWxlOmEsc3R5bGVkQ29tcG9uZW50SWQ6aX0scn1yZXR1cm4gSCh0LGUpLHQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7d2luZG93LnNjQ0dTSE1SQ2FjaGVbdGhpcy5zdGF0ZS5zdHlsZWRDb21wb25lbnRJZF0mJih3aW5kb3cuc2NDR1NITVJDYWNoZVt0aGlzLnN0YXRlLnN0eWxlZENvbXBvbmVudElkXS09MSksMD09PXdpbmRvdy5zY0NHU0hNUkNhY2hlW3RoaXMuc3RhdGUuc3R5bGVkQ29tcG9uZW50SWRdJiZ0aGlzLnN0YXRlLmdsb2JhbFN0eWxlLnJlbW92ZVN0eWxlcyh0aGlzLnN0eWxlU2hlZXQpfSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBsLmNyZWF0ZUVsZW1lbnQoZ3QsbnVsbCwoZnVuY3Rpb24odCl7ZS5zdHlsZVNoZWV0PXR8fFBlLm1hc3Rlcjt2YXIgbj1lLnN0YXRlLmdsb2JhbFN0eWxlO3JldHVybiBuLmlzU3RhdGljPyhuLnJlbmRlclN0eWxlcyhLLGUuc3R5bGVTaGVldCksbnVsbCk6bC5jcmVhdGVFbGVtZW50KGR0LG51bGwsKGZ1bmN0aW9uKHQpe3ZhciByPWUuY29uc3RydWN0b3IuZGVmYXVsdFByb3BzLG89Vih7fSxlLnByb3BzKTtyZXR1cm4gdm9pZCAwIT09dCYmKG8udGhlbWU9R2UoZS5wcm9wcyx0LHIpKSxuLnJlbmRlclN0eWxlcyhvLGUuc3R5bGVTaGVldCksbnVsbH0pKX0pKX0sdH0obC5Db21wb25lbnQpO3JldHVybiBzLmdsb2JhbFN0eWxlPWkscy5zdHlsZWRDb21wb25lbnRJZD1hLHN9eiYmKHdpbmRvdy5zY0NHU0hNUkNhY2hlPXt9KTt2YXIga3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvXFxzfFxcXFxuL2csXCJcIil9O2Z1bmN0aW9uIFN0KGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkodD4xP3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO3ZhciBvPVRlLmFwcGx5KHZvaWQgMCxbZV0uY29uY2F0KG4pKSxhPU5lKEJlKGt0KEpTT04uc3RyaW5naWZ5KG8pKSkpO3JldHVybiBuZXcgRWUoYSxjZShvLGEsXCJAa2V5ZnJhbWVzXCIpKX12YXIgT3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9bC5mb3J3YXJkUmVmKChmdW5jdGlvbih0LG4pe3JldHVybiBsLmNyZWF0ZUVsZW1lbnQoZHQsbnVsbCwoZnVuY3Rpb24ocil7dmFyIG89ZS5kZWZhdWx0UHJvcHMsYT1HZSh0LHIsbyk7cmV0dXJuIGwuY3JlYXRlRWxlbWVudChlLFYoe30sdCx7dGhlbWU6YSxyZWY6bn0pKX0pKX0pKTtyZXR1cm4gY3QodCxlKSx0LmRpc3BsYXlOYW1lPVwiV2l0aFRoZW1lKFwiKyQoZSkrXCIpXCIsdH0sTXQ9e1N0eWxlU2hlZXQ6UGV9O2NvbnN0IEx0PWJ0fSwyNDY6ZT0+e2UuZXhwb3J0cz1mdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1cIi8qfCovXCIsbj10K1wifVwiO2Z1bmN0aW9uIHIodCl7aWYodCl0cnl7ZSh0K1wifVwiKX1jYXRjaChlKXt9fXJldHVybiBmdW5jdGlvbihvLGEsaSxsLHMsYyx1LGQscCxmKXtzd2l0Y2gobyl7Y2FzZSAxOmlmKDA9PT1wJiY2ND09PWEuY2hhckNvZGVBdCgwKSlyZXR1cm4gZShhK1wiO1wiKSxcIlwiO2JyZWFrO2Nhc2UgMjppZigwPT09ZClyZXR1cm4gYSt0O2JyZWFrO2Nhc2UgMzpzd2l0Y2goZCl7Y2FzZSAxMDI6Y2FzZSAxMTI6cmV0dXJuIGUoaVswXSthKSxcIlwiO2RlZmF1bHQ6cmV0dXJuIGErKDA9PT1mP3Q6XCJcIil9Y2FzZS0yOmEuc3BsaXQobikuZm9yRWFjaChyKX19fX0oKX0sOTQ2OmU9PntlLmV4cG9ydHM9ZnVuY3Rpb24gZSh0KXtcInVzZSBzdHJpY3RcIjt2YXIgbj0vXlxcMCsvZyxyPS9bXFwwXFxyXFxmXS9nLG89LzogKi9nLGE9L3pvb3xncmEvLGk9LyhbLDogXSkodHJhbnNmb3JtKS9nLGw9LywrXFxzKig/IVteKF0qWyldKS9nLHM9LyArXFxzKig/IVteKF0qWyldKS9nLGM9LyAqW1xcMF0gKi9nLHU9LyxcXHIrPy9nLGQ9LyhbXFx0XFxyXFxuIF0pKlxcZj8mL2cscD0vOmdsb2JhbFxcKCgoPzpbXlxcKFxcKVxcW1xcXV0qfFxcWy4qXFxdfFxcKFteXFwoXFwpXSpcXCkpKilcXCkvZyxmPS9cXFcrL2csaD0vQChrXFx3KylcXHMqKFxcUyopXFxzKi8sZz0vOjoocGxhY2UpL2csdj0vOihyZWFkLW9ubHkpL2csQz0vXFxzKyg/PVt7XFxdOz06Pl0pL2csbT0vKFtbfT06Pl0pXFxzKy9nLHc9LyhcXHtbXntdKz8pOyg/PVxcfSkvZyxiPS9cXHN7Mix9L2cseT0vKFteXFwoXSkoOispICovZyx4PS9bc3ZoXVxcdystW3RibHJdezJ9LyxrPS9cXChcXHMqKC4qKVxccypcXCkvZyxTPS8oW1xcc1xcU10qPyk7L2csTz0vLXNlbGZ8ZmxleC0vZyxNPS9bXl0qPyg6W3JwXVtlbF1hW1xcdy1dKylbXl0qLyxMPS9zdHJldGNofDpcXHMqXFx3K1xcLSg/OmNvbnRlfGF2YWlsKS8sXz0vKFteLV0pKGltYWdlLXNldFxcKCkvLFA9XCItd2Via2l0LVwiLEU9XCItbW96LVwiLGo9XCItbXMtXCIsUj01OSxJPTEyNSxWPTEyMyxIPTQwLEE9NDEsVD05MSxEPTkzLEI9MTAsWj0xMywkPTksTj02NCxGPTMyLFc9MzgsVT00NSx6PTk1LEc9NDIsSz00NCxxPTU4LFk9MzksSj0zNCxYPTQ3LFE9NjIsZWU9NDMsdGU9MTI2LG5lPTAscmU9MTIsb2U9MTEsYWU9MTA3LGllPTEwOSxsZT0xMTUsc2U9MTEyLGNlPTExMSx1ZT0xMDUsZGU9OTkscGU9MTAwLGZlPTExMixoZT0xLGdlPTEsdmU9MCxDZT0xLG1lPTEsd2U9MSxiZT0wLHllPTAseGU9MCxrZT1bXSxTZT1bXSxPZT0wLE1lPW51bGwsTGU9LTIsX2U9LTEsUGU9MCxFZT0xLGplPTIsUmU9MyxJZT0wLFZlPTEsSGU9XCJcIixBZT1cIlwiLFRlPVwiXCI7ZnVuY3Rpb24gRGUoZSx0LG8sYSxpKXtmb3IodmFyIGwscyx1PTAsZD0wLHA9MCxmPTAsQz0wLG09MCx3PTAsYj0wLHg9MCxTPTAsTz0wLE09MCxMPTAsXz0wLHo9MCxiZT0wLFNlPTAsTWU9MCxMZT0wLF9lPW8ubGVuZ3RoLFplPV9lLTEsemU9XCJcIixHZT1cIlwiLEtlPVwiXCIscWU9XCJcIixZZT1cIlwiLEplPVwiXCI7ejxfZTspe2lmKHc9by5jaGFyQ29kZUF0KHopLHo9PT1aZSYmZCtmK3ArdSE9PTAmJigwIT09ZCYmKHc9ZD09PVg/QjpYKSxmPXA9dT0wLF9lKyssWmUrKyksZCtmK3ArdT09PTApe2lmKHo9PT1aZSYmKGJlPjAmJihHZT1HZS5yZXBsYWNlKHIsXCJcIikpLEdlLnRyaW0oKS5sZW5ndGg+MCkpe3N3aXRjaCh3KXtjYXNlIEY6Y2FzZSAkOmNhc2UgUjpjYXNlIFo6Y2FzZSBCOmJyZWFrO2RlZmF1bHQ6R2UrPW8uY2hhckF0KHopfXc9Un1pZigxPT09U2Upc3dpdGNoKHcpe2Nhc2UgVjpjYXNlIEk6Y2FzZSBSOmNhc2UgSjpjYXNlIFk6Y2FzZSBIOmNhc2UgQTpjYXNlIEs6U2U9MDtjYXNlICQ6Y2FzZSBaOmNhc2UgQjpjYXNlIEY6YnJlYWs7ZGVmYXVsdDpmb3IoU2U9MCxMZT16LEM9dyx6LS0sdz1SO0xlPF9lOylzd2l0Y2goby5jaGFyQ29kZUF0KExlKyspKXtjYXNlIEI6Y2FzZSBaOmNhc2UgUjorK3osdz1DLExlPV9lO2JyZWFrO2Nhc2UgcTpiZT4wJiYoKyt6LHc9Qyk7Y2FzZSBWOkxlPV9lfX1zd2l0Y2godyl7Y2FzZSBWOmZvcihDPShHZT1HZS50cmltKCkpLmNoYXJDb2RlQXQoMCksTz0xLExlPSsrejt6PF9lOyl7c3dpdGNoKHc9by5jaGFyQ29kZUF0KHopKXtjYXNlIFY6TysrO2JyZWFrO2Nhc2UgSTpPLS07YnJlYWs7Y2FzZSBYOnN3aXRjaChtPW8uY2hhckNvZGVBdCh6KzEpKXtjYXNlIEc6Y2FzZSBYOno9VWUobSx6LFplLG8pfWJyZWFrO2Nhc2UgVDp3Kys7Y2FzZSBIOncrKztjYXNlIEo6Y2FzZSBZOmZvcig7eisrPFplJiZvLmNoYXJDb2RlQXQoeikhPT13Oyk7fWlmKDA9PT1PKWJyZWFrO3orK31pZihLZT1vLnN1YnN0cmluZyhMZSx6KSxDPT09bmUmJihDPShHZT1HZS5yZXBsYWNlKG4sXCJcIikudHJpbSgpKS5jaGFyQ29kZUF0KDApKSxDPT09Til7c3dpdGNoKGJlPjAmJihHZT1HZS5yZXBsYWNlKHIsXCJcIikpLG09R2UuY2hhckNvZGVBdCgxKSl7Y2FzZSBwZTpjYXNlIGllOmNhc2UgbGU6Y2FzZSBVOmw9dDticmVhaztkZWZhdWx0Omw9a2V9aWYoTGU9KEtlPURlKHQsbCxLZSxtLGkrMSkpLmxlbmd0aCx4ZT4wJiYwPT09TGUmJihMZT1HZS5sZW5ndGgpLE9lPjAmJihsPUJlKGtlLEdlLE1lKSxzPVdlKFJlLEtlLGwsdCxnZSxoZSxMZSxtLGksYSksR2U9bC5qb2luKFwiXCIpLHZvaWQgMCE9PXMmJjA9PT0oTGU9KEtlPXMudHJpbSgpKS5sZW5ndGgpJiYobT0wLEtlPVwiXCIpKSxMZT4wKXN3aXRjaChtKXtjYXNlIGxlOkdlPUdlLnJlcGxhY2UoayxGZSk7Y2FzZSBwZTpjYXNlIGllOmNhc2UgVTpLZT1HZStcIntcIitLZStcIn1cIjticmVhaztjYXNlIGFlOktlPShHZT1HZS5yZXBsYWNlKGgsXCIkMSAkMlwiKyhWZT4wP0hlOlwiXCIpKSkrXCJ7XCIrS2UrXCJ9XCIsS2U9MT09PW1lfHwyPT09bWUmJk5lKFwiQFwiK0tlLDMpP1wiQFwiK1ArS2UrXCJAXCIrS2U6XCJAXCIrS2U7YnJlYWs7ZGVmYXVsdDpLZT1HZStLZSxhPT09ZmUmJihxZSs9S2UsS2U9XCJcIil9ZWxzZSBLZT1cIlwifWVsc2UgS2U9RGUodCxCZSh0LEdlLE1lKSxLZSxhLGkrMSk7WWUrPUtlLE09MCxTZT0wLF89MCxiZT0wLE1lPTAsTD0wLEdlPVwiXCIsS2U9XCJcIix3PW8uY2hhckNvZGVBdCgrK3opO2JyZWFrO2Nhc2UgSTpjYXNlIFI6aWYoKExlPShHZT0oYmU+MD9HZS5yZXBsYWNlKHIsXCJcIik6R2UpLnRyaW0oKSkubGVuZ3RoKT4xKXN3aXRjaCgwPT09XyYmKChDPUdlLmNoYXJDb2RlQXQoMCkpPT09VXx8Qz45NiYmQzwxMjMpJiYoTGU9KEdlPUdlLnJlcGxhY2UoXCIgXCIsXCI6XCIpKS5sZW5ndGgpLE9lPjAmJnZvaWQgMCE9PShzPVdlKEVlLEdlLHQsZSxnZSxoZSxxZS5sZW5ndGgsYSxpLGEpKSYmMD09PShMZT0oR2U9cy50cmltKCkpLmxlbmd0aCkmJihHZT1cIlxcMFxcMFwiKSxDPUdlLmNoYXJDb2RlQXQoMCksbT1HZS5jaGFyQ29kZUF0KDEpLEMpe2Nhc2UgbmU6YnJlYWs7Y2FzZSBOOmlmKG09PT11ZXx8bT09PWRlKXtKZSs9R2Urby5jaGFyQXQoeik7YnJlYWt9ZGVmYXVsdDppZihHZS5jaGFyQ29kZUF0KExlLTEpPT09cSlicmVhaztxZSs9JGUoR2UsQyxtLEdlLmNoYXJDb2RlQXQoMikpfU09MCxTZT0wLF89MCxiZT0wLE1lPTAsR2U9XCJcIix3PW8uY2hhckNvZGVBdCgrK3opfX1zd2l0Y2godyl7Y2FzZSBaOmNhc2UgQjppZihkK2YrcCt1K3llPT09MClzd2l0Y2goUyl7Y2FzZSBBOmNhc2UgWTpjYXNlIEo6Y2FzZSBOOmNhc2UgdGU6Y2FzZSBROmNhc2UgRzpjYXNlIGVlOmNhc2UgWDpjYXNlIFU6Y2FzZSBxOmNhc2UgSzpjYXNlIFI6Y2FzZSBWOmNhc2UgSTpicmVhaztkZWZhdWx0Ol8+MCYmKFNlPTEpfWQ9PT1YP2Q9MDpDZStNPT09MCYmYSE9PWFlJiZHZS5sZW5ndGg+MCYmKGJlPTEsR2UrPVwiXFwwXCIpLE9lKkllPjAmJldlKFBlLEdlLHQsZSxnZSxoZSxxZS5sZW5ndGgsYSxpLGEpLGhlPTEsZ2UrKzticmVhaztjYXNlIFI6Y2FzZSBJOmlmKGQrZitwK3U9PT0wKXtoZSsrO2JyZWFrfWRlZmF1bHQ6c3dpdGNoKGhlKyssemU9by5jaGFyQXQoeiksdyl7Y2FzZSAkOmNhc2UgRjppZihmK3UrZD09PTApc3dpdGNoKGIpe2Nhc2UgSzpjYXNlIHE6Y2FzZSAkOmNhc2UgRjp6ZT1cIlwiO2JyZWFrO2RlZmF1bHQ6dyE9PUYmJih6ZT1cIiBcIil9YnJlYWs7Y2FzZSBuZTp6ZT1cIlxcXFwwXCI7YnJlYWs7Y2FzZSByZTp6ZT1cIlxcXFxmXCI7YnJlYWs7Y2FzZSBvZTp6ZT1cIlxcXFx2XCI7YnJlYWs7Y2FzZSBXOmYrZCt1PT09MCYmQ2U+MCYmKE1lPTEsYmU9MSx6ZT1cIlxcZlwiK3plKTticmVhaztjYXNlIDEwODppZihmK2QrdSt2ZT09PTAmJl8+MClzd2l0Y2goei1fKXtjYXNlIDI6Yj09PXNlJiZvLmNoYXJDb2RlQXQoei0zKT09PXEmJih2ZT1iKTtjYXNlIDg6eD09PWNlJiYodmU9eCl9YnJlYWs7Y2FzZSBxOmYrZCt1PT09MCYmKF89eik7YnJlYWs7Y2FzZSBLOmQrcCtmK3U9PT0wJiYoYmU9MSx6ZSs9XCJcXHJcIik7YnJlYWs7Y2FzZSBKOmNhc2UgWTowPT09ZCYmKGY9Zj09PXc/MDowPT09Zj93OmYpO2JyZWFrO2Nhc2UgVDpmK2QrcD09PTAmJnUrKzticmVhaztjYXNlIEQ6ZitkK3A9PT0wJiZ1LS07YnJlYWs7Y2FzZSBBOmYrZCt1PT09MCYmcC0tO2JyZWFrO2Nhc2UgSDpmK2QrdT09PTAmJigwPT09TSYmKDIqYiszKng9PTUzM3x8KE89MCxNPTEpKSxwKyspO2JyZWFrO2Nhc2UgTjpkK3ArZit1K18rTD09PTAmJihMPTEpO2JyZWFrO2Nhc2UgRzpjYXNlIFg6aWYoZit1K3A+MClicmVhaztzd2l0Y2goZCl7Y2FzZSAwOnN3aXRjaCgyKncrMypvLmNoYXJDb2RlQXQoeisxKSl7Y2FzZSAyMzU6ZD1YO2JyZWFrO2Nhc2UgMjIwOkxlPXosZD1HfWJyZWFrO2Nhc2UgRzp3PT09WCYmYj09PUcmJkxlKzIhPT16JiYoMzM9PT1vLmNoYXJDb2RlQXQoTGUrMikmJihxZSs9by5zdWJzdHJpbmcoTGUseisxKSksemU9XCJcIixkPTApfX1pZigwPT09ZCl7aWYoQ2UrZit1K0w9PT0wJiZhIT09YWUmJnchPT1SKXN3aXRjaCh3KXtjYXNlIEs6Y2FzZSB0ZTpjYXNlIFE6Y2FzZSBlZTpjYXNlIEE6Y2FzZSBIOmlmKDA9PT1NKXtzd2l0Y2goYil7Y2FzZSAkOmNhc2UgRjpjYXNlIEI6Y2FzZSBaOnplKz1cIlxcMFwiO2JyZWFrO2RlZmF1bHQ6emU9XCJcXDBcIit6ZSsodz09PUs/XCJcIjpcIlxcMFwiKX1iZT0xfWVsc2Ugc3dpdGNoKHcpe2Nhc2UgSDpfKzc9PT16JiYxMDg9PT1iJiYoXz0wKSxNPSsrTzticmVhaztjYXNlIEE6MD09KE09LS1PKSYmKGJlPTEsemUrPVwiXFwwXCIpfWJyZWFrO2Nhc2UgJDpjYXNlIEY6c3dpdGNoKGIpe2Nhc2UgbmU6Y2FzZSBWOmNhc2UgSTpjYXNlIFI6Y2FzZSBLOmNhc2UgcmU6Y2FzZSAkOmNhc2UgRjpjYXNlIEI6Y2FzZSBaOmJyZWFrO2RlZmF1bHQ6MD09PU0mJihiZT0xLHplKz1cIlxcMFwiKX19R2UrPXplLHchPT1GJiZ3IT09JCYmKFM9dyl9fXg9YixiPXcseisrfWlmKExlPXFlLmxlbmd0aCx4ZT4wJiYwPT09TGUmJjA9PT1ZZS5sZW5ndGgmJjA9PT10WzBdLmxlbmd0aD09MCYmKGEhPT1pZXx8MT09PXQubGVuZ3RoJiYoQ2U+MD9BZTpUZSk9PT10WzBdKSYmKExlPXQuam9pbihcIixcIikubGVuZ3RoKzIpLExlPjApe2lmKGw9MD09PUNlJiZhIT09YWU/ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG4sbz0wLGE9ZS5sZW5ndGgsaT1BcnJheShhKTtvPGE7KytvKXtmb3IodmFyIGw9ZVtvXS5zcGxpdChjKSxzPVwiXCIsdT0wLGQ9MCxwPTAsZj0wLGg9bC5sZW5ndGg7dTxoOysrdSlpZighKDA9PT0oZD0obj1sW3VdKS5sZW5ndGgpJiZoPjEpKXtpZihwPXMuY2hhckNvZGVBdChzLmxlbmd0aC0xKSxmPW4uY2hhckNvZGVBdCgwKSx0PVwiXCIsMCE9PXUpc3dpdGNoKHApe2Nhc2UgRzpjYXNlIHRlOmNhc2UgUTpjYXNlIGVlOmNhc2UgRjpjYXNlIEg6YnJlYWs7ZGVmYXVsdDp0PVwiIFwifXN3aXRjaChmKXtjYXNlIFc6bj10K0FlO2Nhc2UgdGU6Y2FzZSBROmNhc2UgZWU6Y2FzZSBGOmNhc2UgQTpjYXNlIEg6YnJlYWs7Y2FzZSBUOm49dCtuK0FlO2JyZWFrO2Nhc2UgcTpzd2l0Y2goMipuLmNoYXJDb2RlQXQoMSkrMypuLmNoYXJDb2RlQXQoMikpe2Nhc2UgNTMwOmlmKHdlPjApe249dCtuLnN1YnN0cmluZyg4LGQtMSk7YnJlYWt9ZGVmYXVsdDoodTwxfHxsW3UtMV0ubGVuZ3RoPDEpJiYobj10K0FlK24pfWJyZWFrO2Nhc2UgSzp0PVwiXCI7ZGVmYXVsdDpuPWQ+MSYmbi5pbmRleE9mKFwiOlwiKT4wP3Qrbi5yZXBsYWNlKHksXCIkMVwiK0FlK1wiJDJcIik6dCtuK0FlfXMrPW59aVtvXT1zLnJlcGxhY2UocixcIlwiKS50cmltKCl9cmV0dXJuIGl9KHQpOnQsT2U+MCYmdm9pZCAwIT09KHM9V2UoamUscWUsbCxlLGdlLGhlLExlLGEsaSxhKSkmJjA9PT0ocWU9cykubGVuZ3RoKXJldHVybiBKZStxZStZZTtpZihxZT1sLmpvaW4oXCIsXCIpK1wie1wiK3FlK1wifVwiLG1lKnZlIT0wKXtzd2l0Y2goMiE9PW1lfHxOZShxZSwyKXx8KHZlPTApLHZlKXtjYXNlIGNlOnFlPXFlLnJlcGxhY2UodixcIjpcIitFK1wiJDFcIikrcWU7YnJlYWs7Y2FzZSBzZTpxZT1xZS5yZXBsYWNlKGcsXCI6OlwiK1ArXCJpbnB1dC0kMVwiKStxZS5yZXBsYWNlKGcsXCI6OlwiK0UrXCIkMVwiKStxZS5yZXBsYWNlKGcsXCI6XCIraitcImlucHV0LSQxXCIpK3FlfXZlPTB9fXJldHVybiBKZStxZStZZX1mdW5jdGlvbiBCZShlLHQsbil7dmFyIHI9dC50cmltKCkuc3BsaXQodSksbz1yLGE9ci5sZW5ndGgsaT1lLmxlbmd0aDtzd2l0Y2goaSl7Y2FzZSAwOmNhc2UgMTpmb3IodmFyIGw9MCxzPTA9PT1pP1wiXCI6ZVswXStcIiBcIjtsPGE7KytsKW9bbF09WmUocyxvW2xdLG4saSkudHJpbSgpO2JyZWFrO2RlZmF1bHQ6bD0wO3ZhciBjPTA7Zm9yKG89W107bDxhOysrbClmb3IodmFyIGQ9MDtkPGk7KytkKW9bYysrXT1aZShlW2RdK1wiIFwiLHJbbF0sbixpKS50cmltKCl9cmV0dXJuIG99ZnVuY3Rpb24gWmUoZSx0LG4scil7dmFyIG89dCxhPW8uY2hhckNvZGVBdCgwKTtzd2l0Y2goYTwzMyYmKGE9KG89by50cmltKCkpLmNoYXJDb2RlQXQoMCkpLGEpe2Nhc2UgVzpzd2l0Y2goQ2Urcil7Y2FzZSAwOmNhc2UgMTppZigwPT09ZS50cmltKCkubGVuZ3RoKWJyZWFrO2RlZmF1bHQ6cmV0dXJuIG8ucmVwbGFjZShkLFwiJDFcIitlLnRyaW0oKSl9YnJlYWs7Y2FzZSBxOmlmKDEwMyE9PW8uY2hhckNvZGVBdCgxKSlyZXR1cm4gZS50cmltKCkrby5yZXBsYWNlKGQsXCIkMVwiK2UudHJpbSgpKTtpZih3ZT4wJiZDZT4wKXJldHVybiBvLnJlcGxhY2UocCxcIiQxXCIpLnJlcGxhY2UoZCxcIiQxXCIrVGUpO2RlZmF1bHQ6aWYobipDZT4wJiZvLmluZGV4T2YoXCJcXGZcIik+MClyZXR1cm4gby5yZXBsYWNlKGQsKGUuY2hhckNvZGVBdCgwKT09PXE/XCJcIjpcIiQxXCIpK2UudHJpbSgpKX1yZXR1cm4gZStvfWZ1bmN0aW9uICRlKGUsdCxuLHIpe3ZhciBjLHU9MCxkPWUrXCI7XCIscD0yKnQrMypuKzQqcjtpZig5NDQ9PT1wKXJldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aCxuPWUuaW5kZXhPZihcIjpcIiw5KSsxLHI9ZS5zdWJzdHJpbmcoMCxuKS50cmltKCksbz1lLnN1YnN0cmluZyhuLHQtMSkudHJpbSgpO3N3aXRjaChlLmNoYXJDb2RlQXQoOSkqVmUpe2Nhc2UgMDpicmVhaztjYXNlIFU6aWYoMTEwIT09ZS5jaGFyQ29kZUF0KDEwKSlicmVhaztkZWZhdWx0OnZhciBhPW8uc3BsaXQoKG89XCJcIixsKSksaT0wO2ZvcihuPTAsdD1hLmxlbmd0aDtpPHQ7bj0wLCsraSl7Zm9yKHZhciBjPWFbaV0sdT1jLnNwbGl0KHMpO2M9dVtuXTspe3ZhciBkPWMuY2hhckNvZGVBdCgwKTtpZigxPT09VmUmJihkPk4mJmQ8OTB8fGQ+OTYmJmQ8MTIzfHxkPT09enx8ZD09PVUmJmMuY2hhckNvZGVBdCgxKSE9PVUpJiZpc05hTihwYXJzZUZsb2F0KGMpKSsoLTEhPT1jLmluZGV4T2YoXCIoXCIpKT09PTEpc3dpdGNoKGMpe2Nhc2VcImluZmluaXRlXCI6Y2FzZVwiYWx0ZXJuYXRlXCI6Y2FzZVwiYmFja3dhcmRzXCI6Y2FzZVwicnVubmluZ1wiOmNhc2VcIm5vcm1hbFwiOmNhc2VcImZvcndhcmRzXCI6Y2FzZVwiYm90aFwiOmNhc2VcIm5vbmVcIjpjYXNlXCJsaW5lYXJcIjpjYXNlXCJlYXNlXCI6Y2FzZVwiZWFzZS1pblwiOmNhc2VcImVhc2Utb3V0XCI6Y2FzZVwiZWFzZS1pbi1vdXRcIjpjYXNlXCJwYXVzZWRcIjpjYXNlXCJyZXZlcnNlXCI6Y2FzZVwiYWx0ZXJuYXRlLXJldmVyc2VcIjpjYXNlXCJpbmhlcml0XCI6Y2FzZVwiaW5pdGlhbFwiOmNhc2VcInVuc2V0XCI6Y2FzZVwic3RlcC1zdGFydFwiOmNhc2VcInN0ZXAtZW5kXCI6YnJlYWs7ZGVmYXVsdDpjKz1IZX11W24rK109Y31vKz0oMD09PWk/XCJcIjpcIixcIikrdS5qb2luKFwiIFwiKX19cmV0dXJuIG89citvK1wiO1wiLDE9PT1tZXx8Mj09PW1lJiZOZShvLDEpP1ArbytvOm99KGQpO2lmKDA9PT1tZXx8Mj09PW1lJiYhTmUoZCwxKSlyZXR1cm4gZDtzd2l0Y2gocCl7Y2FzZSAxMDE1OnJldHVybiA5Nz09PWQuY2hhckNvZGVBdCgxMCk/UCtkK2Q6ZDtjYXNlIDk1MTpyZXR1cm4gMTE2PT09ZC5jaGFyQ29kZUF0KDMpP1ArZCtkOmQ7Y2FzZSA5NjM6cmV0dXJuIDExMD09PWQuY2hhckNvZGVBdCg1KT9QK2QrZDpkO2Nhc2UgMTAwOTppZigxMDAhPT1kLmNoYXJDb2RlQXQoNCkpYnJlYWs7Y2FzZSA5Njk6Y2FzZSA5NDI6cmV0dXJuIFArZCtkO2Nhc2UgOTc4OnJldHVybiBQK2QrRStkK2Q7Y2FzZSAxMDE5OmNhc2UgOTgzOnJldHVybiBQK2QrRStkK2orZCtkO2Nhc2UgODgzOnJldHVybiBkLmNoYXJDb2RlQXQoOCk9PT1VP1ArZCtkOmQuaW5kZXhPZihcImltYWdlLXNldChcIiwxMSk+MD9kLnJlcGxhY2UoXyxcIiQxXCIrUCtcIiQyXCIpK2Q6ZDtjYXNlIDkzMjppZihkLmNoYXJDb2RlQXQoNCk9PT1VKXN3aXRjaChkLmNoYXJDb2RlQXQoNSkpe2Nhc2UgMTAzOnJldHVybiBQK1wiYm94LVwiK2QucmVwbGFjZShcIi1ncm93XCIsXCJcIikrUCtkK2orZC5yZXBsYWNlKFwiZ3Jvd1wiLFwicG9zaXRpdmVcIikrZDtjYXNlIDExNTpyZXR1cm4gUCtkK2orZC5yZXBsYWNlKFwic2hyaW5rXCIsXCJuZWdhdGl2ZVwiKStkO2Nhc2UgOTg6cmV0dXJuIFArZCtqK2QucmVwbGFjZShcImJhc2lzXCIsXCJwcmVmZXJyZWQtc2l6ZVwiKStkfXJldHVybiBQK2QraitkK2Q7Y2FzZSA5NjQ6cmV0dXJuIFArZCtqK1wiZmxleC1cIitkK2Q7Y2FzZSAxMDIzOmlmKDk5IT09ZC5jaGFyQ29kZUF0KDgpKWJyZWFrO3JldHVybiBjPWQuc3Vic3RyaW5nKGQuaW5kZXhPZihcIjpcIiwxNSkpLnJlcGxhY2UoXCJmbGV4LVwiLFwiXCIpLnJlcGxhY2UoXCJzcGFjZS1iZXR3ZWVuXCIsXCJqdXN0aWZ5XCIpLFArXCJib3gtcGFja1wiK2MrUCtkK2orXCJmbGV4LXBhY2tcIitjK2Q7Y2FzZSAxMDA1OnJldHVybiBhLnRlc3QoZCk/ZC5yZXBsYWNlKG8sXCI6XCIrUCkrZC5yZXBsYWNlKG8sXCI6XCIrRSkrZDpkO2Nhc2UgMWUzOnN3aXRjaCh1PShjPWQuc3Vic3RyaW5nKDEzKS50cmltKCkpLmluZGV4T2YoXCItXCIpKzEsYy5jaGFyQ29kZUF0KDApK2MuY2hhckNvZGVBdCh1KSl7Y2FzZSAyMjY6Yz1kLnJlcGxhY2UoeCxcInRiXCIpO2JyZWFrO2Nhc2UgMjMyOmM9ZC5yZXBsYWNlKHgsXCJ0Yi1ybFwiKTticmVhaztjYXNlIDIyMDpjPWQucmVwbGFjZSh4LFwibHJcIik7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gZH1yZXR1cm4gUCtkK2orYytkO2Nhc2UgMTAxNzppZigtMT09PWQuaW5kZXhPZihcInN0aWNreVwiLDkpKXJldHVybiBkO2Nhc2UgOTc1OnN3aXRjaCh1PShkPWUpLmxlbmd0aC0xMCxwPShjPSgzMz09PWQuY2hhckNvZGVBdCh1KT9kLnN1YnN0cmluZygwLHUpOmQpLnN1YnN0cmluZyhlLmluZGV4T2YoXCI6XCIsNykrMSkudHJpbSgpKS5jaGFyQ29kZUF0KDApKygwfGMuY2hhckNvZGVBdCg3KSkpe2Nhc2UgMjAzOmlmKGMuY2hhckNvZGVBdCg4KTwxMTEpYnJlYWs7Y2FzZSAxMTU6ZD1kLnJlcGxhY2UoYyxQK2MpK1wiO1wiK2Q7YnJlYWs7Y2FzZSAyMDc6Y2FzZSAxMDI6ZD1kLnJlcGxhY2UoYyxQKyhwPjEwMj9cImlubGluZS1cIjpcIlwiKStcImJveFwiKStcIjtcIitkLnJlcGxhY2UoYyxQK2MpK1wiO1wiK2QucmVwbGFjZShjLGorYytcImJveFwiKStcIjtcIitkfXJldHVybiBkK1wiO1wiO2Nhc2UgOTM4OmlmKGQuY2hhckNvZGVBdCg1KT09PVUpc3dpdGNoKGQuY2hhckNvZGVBdCg2KSl7Y2FzZSAxMDU6cmV0dXJuIGM9ZC5yZXBsYWNlKFwiLWl0ZW1zXCIsXCJcIiksUCtkK1ArXCJib3gtXCIrYytqK1wiZmxleC1cIitjK2Q7Y2FzZSAxMTU6cmV0dXJuIFArZCtqK1wiZmxleC1pdGVtLVwiK2QucmVwbGFjZShPLFwiXCIpK2Q7ZGVmYXVsdDpyZXR1cm4gUCtkK2orXCJmbGV4LWxpbmUtcGFja1wiK2QucmVwbGFjZShcImFsaWduLWNvbnRlbnRcIixcIlwiKS5yZXBsYWNlKE8sXCJcIikrZH1icmVhaztjYXNlIDk3MzpjYXNlIDk4OTppZihkLmNoYXJDb2RlQXQoMykhPT1VfHwxMjI9PT1kLmNoYXJDb2RlQXQoNCkpYnJlYWs7Y2FzZSA5MzE6Y2FzZSA5NTM6aWYoITA9PT1MLnRlc3QoZSkpcmV0dXJuIDExNT09PShjPWUuc3Vic3RyaW5nKGUuaW5kZXhPZihcIjpcIikrMSkpLmNoYXJDb2RlQXQoMCk/JGUoZS5yZXBsYWNlKFwic3RyZXRjaFwiLFwiZmlsbC1hdmFpbGFibGVcIiksdCxuLHIpLnJlcGxhY2UoXCI6ZmlsbC1hdmFpbGFibGVcIixcIjpzdHJldGNoXCIpOmQucmVwbGFjZShjLFArYykrZC5yZXBsYWNlKGMsRStjLnJlcGxhY2UoXCJmaWxsLVwiLFwiXCIpKStkO2JyZWFrO2Nhc2UgOTYyOmlmKGQ9UCtkKygxMDI9PT1kLmNoYXJDb2RlQXQoNSk/aitkOlwiXCIpK2QsbityPT09MjExJiYxMDU9PT1kLmNoYXJDb2RlQXQoMTMpJiZkLmluZGV4T2YoXCJ0cmFuc2Zvcm1cIiwxMCk+MClyZXR1cm4gZC5zdWJzdHJpbmcoMCxkLmluZGV4T2YoXCI7XCIsMjcpKzEpLnJlcGxhY2UoaSxcIiQxXCIrUCtcIiQyXCIpK2R9cmV0dXJuIGR9ZnVuY3Rpb24gTmUoZSx0KXt2YXIgbj1lLmluZGV4T2YoMT09PXQ/XCI6XCI6XCJ7XCIpLHI9ZS5zdWJzdHJpbmcoMCwzIT09dD9uOjEwKSxvPWUuc3Vic3RyaW5nKG4rMSxlLmxlbmd0aC0xKTtyZXR1cm4gTWUoMiE9PXQ/cjpyLnJlcGxhY2UoTSxcIiQxXCIpLG8sdCl9ZnVuY3Rpb24gRmUoZSx0KXt2YXIgbj0kZSh0LHQuY2hhckNvZGVBdCgwKSx0LmNoYXJDb2RlQXQoMSksdC5jaGFyQ29kZUF0KDIpKTtyZXR1cm4gbiE9PXQrXCI7XCI/bi5yZXBsYWNlKFMsXCIgb3IgKCQxKVwiKS5zdWJzdHJpbmcoNCk6XCIoXCIrdCtcIilcIn1mdW5jdGlvbiBXZShlLHQsbixyLG8sYSxpLGwscyxjKXtmb3IodmFyIHUsZD0wLHA9dDtkPE9lOysrZClzd2l0Y2godT1TZVtkXS5jYWxsKEdlLGUscCxuLHIsbyxhLGksbCxzLGMpKXtjYXNlIHZvaWQgMDpjYXNlITE6Y2FzZSEwOmNhc2UgbnVsbDpicmVhaztkZWZhdWx0OnA9dX1pZihwIT09dClyZXR1cm4gcH1mdW5jdGlvbiBVZShlLHQsbixyKXtmb3IodmFyIG89dCsxO288bjsrK28pc3dpdGNoKHIuY2hhckNvZGVBdChvKSl7Y2FzZSBYOmlmKGU9PT1HJiZyLmNoYXJDb2RlQXQoby0xKT09PUcmJnQrMiE9PW8pcmV0dXJuIG8rMTticmVhaztjYXNlIEI6aWYoZT09PVgpcmV0dXJuIG8rMX1yZXR1cm4gb31mdW5jdGlvbiB6ZShlKXtmb3IodmFyIHQgaW4gZSl7dmFyIG49ZVt0XTtzd2l0Y2godCl7Y2FzZVwia2V5ZnJhbWVcIjpWZT0wfG47YnJlYWs7Y2FzZVwiZ2xvYmFsXCI6d2U9MHxuO2JyZWFrO2Nhc2VcImNhc2NhZGVcIjpDZT0wfG47YnJlYWs7Y2FzZVwiY29tcHJlc3NcIjpiZT0wfG47YnJlYWs7Y2FzZVwic2VtaWNvbG9uXCI6eWU9MHxuO2JyZWFrO2Nhc2VcInByZXNlcnZlXCI6eGU9MHxuO2JyZWFrO2Nhc2VcInByZWZpeFwiOk1lPW51bGwsbj9cImZ1bmN0aW9uXCIhPXR5cGVvZiBuP21lPTE6KG1lPTIsTWU9bik6bWU9MH19cmV0dXJuIHplfWZ1bmN0aW9uIEdlKHQsbil7aWYodm9pZCAwIT09dGhpcyYmdGhpcy5jb25zdHJ1Y3Rvcj09PUdlKXJldHVybiBlKHQpO3ZhciBvPXQsYT1vLmNoYXJDb2RlQXQoMCk7YTwzMyYmKGE9KG89by50cmltKCkpLmNoYXJDb2RlQXQoMCkpLFZlPjAmJihIZT1vLnJlcGxhY2UoZixhPT09VD9cIlwiOlwiLVwiKSksYT0xLDE9PT1DZT9UZT1vOkFlPW87dmFyIGksbD1bVGVdO09lPjAmJnZvaWQgMCE9PShpPVdlKF9lLG4sbCxsLGdlLGhlLDAsMCwwLDApKSYmXCJzdHJpbmdcIj09dHlwZW9mIGkmJihuPWkpO3ZhciBzPURlKGtlLGwsbiwwLDApO3JldHVybiBPZT4wJiZ2b2lkIDAhPT0oaT1XZShMZSxzLGwsbCxnZSxoZSxzLmxlbmd0aCwwLDAsMCkpJiZcInN0cmluZ1wiIT10eXBlb2Yocz1pKSYmKGE9MCksSGU9XCJcIixUZT1cIlwiLEFlPVwiXCIsdmU9MCxnZT0xLGhlPTEsYmUqYT09MD9zOnMucmVwbGFjZShyLFwiXCIpLnJlcGxhY2UoQyxcIlwiKS5yZXBsYWNlKG0sXCIkMVwiKS5yZXBsYWNlKHcsXCIkMVwiKS5yZXBsYWNlKGIsXCIgXCIpfXJldHVybiBHZS51c2U9ZnVuY3Rpb24gZSh0KXtzd2l0Y2godCl7Y2FzZSB2b2lkIDA6Y2FzZSBudWxsOk9lPVNlLmxlbmd0aD0wO2JyZWFrO2RlZmF1bHQ6aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdClTZVtPZSsrXT10O2Vsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIHQpZm9yKHZhciBuPTAscj10Lmxlbmd0aDtuPHI7KytuKWUodFtuXSk7ZWxzZSBJZT0wfCEhdH1yZXR1cm4gZX0sR2Uuc2V0PXplLHZvaWQgMCE9PXQmJnplKHQpLEdlfShudWxsKX0sMzYxOmU9PntlLmV4cG9ydHM9e2FyZWE6ITAsYmFzZTohMCxicjohMCxjb2w6ITAsZW1iZWQ6ITAsaHI6ITAsaW1nOiEwLGlucHV0OiEwLGxpbms6ITAsbWV0YTohMCxwYXJhbTohMCxzb3VyY2U6ITAsdHJhY2s6ITAsd2JyOiEwfX19LHQ9e307ZnVuY3Rpb24gbihyKXt2YXIgbz10W3JdO2lmKHZvaWQgMCE9PW8pcmV0dXJuIG8uZXhwb3J0czt2YXIgYT10W3JdPXtleHBvcnRzOnt9fTtyZXR1cm4gZVtyXShhLGEuZXhwb3J0cyxuKSxhLmV4cG9ydHN9bi5uPWU9Pnt2YXIgdD1lJiZlLl9fZXNNb2R1bGU/KCk9PmUuZGVmYXVsdDooKT0+ZTtyZXR1cm4gbi5kKHQse2E6dH0pLHR9LG4uZD0oZSx0KT0+e2Zvcih2YXIgciBpbiB0KW4ubyh0LHIpJiYhbi5vKGUscikmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIse2VudW1lcmFibGU6ITAsZ2V0OnRbcl19KX0sbi5nPWZ1bmN0aW9uKCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGdsb2JhbFRoaXMpcmV0dXJuIGdsb2JhbFRoaXM7dHJ5e3JldHVybiB0aGlzfHxuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpfWNhdGNoKGUpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvd319KCksbi5vPShlLHQpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KSxuLnI9ZT0+e1widW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZTpcIk1vZHVsZVwifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LG4ubmM9dm9pZCAwO3ZhciByPXt9OygoKT0+e1widXNlIHN0cmljdFwiO3ZhciBlLHQsbyxhLGksbCxzLGM7bi5yKHIpLG4uZChyLHtBcHBNYW5pZmVzdFR5cGU6KCk9PnMsQm9va21hcmtJdGVtQ29udGV4dE1lbnVPcHRpb25UeXBlOigpPT5tLEJyb3dzZXJCdXR0b25UeXBlOigpPT5iLENvbG9yU2NoZW1lT3B0aW9uVHlwZTooKT0+ZyxDdXN0b21BY3Rpb25DYWxsZXJUeXBlOigpPT5rLEVudGVycHJpc2VNYWluQ29udGV4dE1lbnVPcHRpb25UeXBlOigpPT5DLEdsb2JhbENvbnRleHRNZW51T3B0aW9uVHlwZTooKT0+aCxQYWdlQ2hhbmdlRXZlbnRUeXBlOigpPT5mLFBhZ2VUYWJDb250ZXh0TWVudU9wdGlvblR5cGU6KCk9PnYsUGFuZWxQb3NpdGlvbjooKT0+cCxTVVBQT1JURURfTEFOR1VBR0VTOigpPT5NLlNVUFBPUlRFRF9MQU5HVUFHRVMsU2F2ZUJ1dHRvbkNvbnRleHRNZW51T3B0aW9uVHlwZTooKT0+eSxTYXZlTW9kYWxUeXBlOigpPT5TLFZpZXdUYWJNZW51T3B0aW9uVHlwZTooKT0+dyxXaW5kb3dUeXBlOigpPT54LGdldEN1cnJlbnRTeW5jOigpPT5MdCxpbml0OigpPT5vbCx3cmFwU3luYzooKT0+TXR9KSxmdW5jdGlvbihlKXtlLkZldGNoaW5nPVwiZmV0Y2hpbmdcIixlLkZldGNoZWQ9XCJmZXRjaGVkXCIsZS5Db21wbGV0ZT1cImNvbXBsZXRlXCJ9KGV8fChlPXt9KSksZnVuY3Rpb24oZSl7ZS5Vc2VyQWN0aW9uPVwidXNlci1hY3Rpb25cIixlLkZvY3VzQ2hhbmdlPVwiZm9jdXMtY2hhbmdlXCIsZS5SZWxvYWQ9XCJyZWxvYWRcIn0odHx8KHQ9e30pKSxmdW5jdGlvbihlKXtlLkFjdGl2ZT1cImFjdGl2ZVwiLGUuRGVmYXVsdD1cImRlZmF1bHRcIn0ob3x8KG89e30pKSxmdW5jdGlvbihlKXtlLlN1Z2dlc3Rpb249XCJzdWdnZXN0aW9uXCJ9KGF8fChhPXt9KSksZnVuY3Rpb24oZSl7ZS5Db250YWN0PVwiQ29udGFjdFwiLGUuQ3VzdG9tPVwiQ3VzdG9tXCIsZS5MaXN0PVwiTGlzdFwiLGUuUGxhaW49XCJQbGFpblwiLGUuU2ltcGxlVGV4dD1cIlNpbXBsZVRleHRcIixlLkxvYWRpbmc9XCJMb2FkaW5nXCIsZS5FcnJvcj1cIkVycm9yXCJ9KGl8fChpPXt9KSksZnVuY3Rpb24oZSl7ZS5NdWx0aVNlbGVjdD1cIk11bHRpU2VsZWN0XCJ9KGx8fChsPXt9KSksZnVuY3Rpb24oZSl7ZS5TbmFwc2hvdD1cInNuYXBzaG90XCIsZS5NYW5pZmVzdD1cIm1hbmlmZXN0XCIsZS5WaWV3PVwidmlld1wiLGUuRXh0ZXJuYWw9XCJleHRlcm5hbFwifShzfHwocz17fSkpLGZ1bmN0aW9uKGUpe2UuTGFuZGluZ1BhZ2U9XCJsYW5kaW5nUGFnZVwiLGUuQXBwR3JpZD1cImFwcEdyaWRcIn0oY3x8KGM9e30pKTt2YXIgdSxkLHA7IWZ1bmN0aW9uKGUpe2UuUHJpbWFyeT1cInByaW1hcnlcIixlLlNlY29uZGFyeT1cInNlY29uZGFyeVwiLGUuVGV4dE9ubHk9XCJ0ZXh0T25seVwifSh1fHwodT17fSkpLGZ1bmN0aW9uKGUpe2UuQWN0aW9uQnV0dG9uPVwiQWN0aW9uQnV0dG9uXCIsZS5Ecm9wZG93bkJ1dHRvbj1cIkRyb3Bkb3duQnV0dG9uXCJ9KGR8fChkPXt9KSksZnVuY3Rpb24oZSl7ZS5MZWZ0PVwiTGVmdFwiLGUuUmlnaHQ9XCJSaWdodFwiLGUuVG9wPVwiVG9wXCIsZS5Cb3R0b209XCJCb3R0b21cIn0ocHx8KHA9e30pKTt2YXIgZixoLGcsdixDLG0sdyxiLHkseCxrLFMsTyxNPW4oMzA0KTshZnVuY3Rpb24oZSl7ZS5VcmxDaGFuZ2U9XCJVUkxfQ0hBTkdFXCIsZS5WaWV3QWRkZWQ9XCJWSUVXX0FEREVEXCIsZS5WaWV3UmVtb3ZlZD1cIlZJRVdfUkVNT1ZFRFwiLGUuUGFnZUNvbnRleHRBZGRlZD1cIlBBR0VfQ09OVEVYVF9BRERFRFwiLGUuUGFnZUNvbnRleHRSZW1vdmVkPVwiUEFHRV9DT05URVhUX1JFTU9WRURcIn0oZnx8KGY9e30pKSxmdW5jdGlvbihlKXtlLk5ld1dpbmRvdz1cIk5ld1dpbmRvd1wiLGUuTmV3UGFnZT1cIk5ld1BhZ2VcIixlLlNhdmVQYWdlPVwiU2F2ZVBhZ2VcIixlLlNhdmVQYWdlQXM9XCJTYXZlUGFnZUFzXCIsZS5QcmludD1cIlByaW50XCIsZS5QcmludEFsbD1cIlByaW50QWxsXCIsZS5QcmludFNjcmVlbj1cIlByaW50U2NyZWVuXCIsZS5DbG9zZVdpbmRvdz1cIkNsb3NlV2luZG93XCIsZS5SZXN0b3JlQ2hhbmdlcz1cIlJlc3RvcmVDaGFuZ2VzXCIsZS5TYXZlV29ya3NwYWNlPVwiU2F2ZVdvcmtzcGFjZVwiLGUuU2F2ZVdvcmtzcGFjZUFzPVwiU2F2ZVdvcmtzcGFjZUFzXCIsZS5SZW5hbWVXb3Jrc3BhY2U9XCJSZW5hbWVXb3Jrc3BhY2VcIixlLlN3aXRjaFdvcmtzcGFjZT1cIlN3aXRjaFdvcmtzcGFjZVwiLGUuRGVsZXRlV29ya3NwYWNlPVwiRGVsZXRlV29ya3NwYWNlXCIsZS5Eb3dubG9hZHM9XCJEb3dubG9hZHNcIixlLk9wZW5TdG9yZWZyb250PVwiT3BlblN0b3JlZnJvbnRcIixlLkFwcGVhcmFuY2U9XCJBcHBlYXJhbmNlXCIsZS5RdWl0PVwiUXVpdFwiLGUuQ3VzdG9tPVwiQ3VzdG9tXCJ9KGh8fChoPXt9KSksZnVuY3Rpb24oZSl7ZS5MaWdodD1cImxpZ2h0XCIsZS5EYXJrPVwiZGFya1wiLGUuU3lzdGVtPVwic3lzdGVtXCJ9KGd8fChnPXt9KSksZnVuY3Rpb24oZSl7ZS5DbG9zZT1cIkNsb3NlXCIsZS5EdXBsaWNhdGU9XCJEdXBsaWNhdGVcIixlLlJlbmFtZT1cIlJlbmFtZVwiLGUuU2F2ZT1cIlNhdmVcIixlLlNhdmVBcz1cIlNhdmUgQXNcIixlLk5ld1BhZ2U9XCJOZXcgUGFnZVwiLGUuRGVsZXRlUGFnZT1cIkRlbGV0ZSBQYWdlXCIsZS5TYXZlV29ya3NwYWNlQXM9XCJTYXZlV29ya3NwYWNlQXNcIixlLlJlZnJlc2g9XCJSZWZyZXNoXCIsZS5DbG9zZU90aGVycz1cIkNsb3NlIG90aGVyc1wiLGUuRGVsZXRlPVwiRGVsZXRlXCIsZS5DdXN0b209XCJDdXN0b21cIn0odnx8KHY9e30pKSxmdW5jdGlvbihlKXtlLkxvY2s9XCJMb2NrXCIsZS5TaG93SGlkZVRhYnM9XCJTaG93SGlkZVRhYnNcIixlLkFkZFRvQ2hhbmVsPVwiQWRkVG9DaGFubmVsXCIsZS5QcmludD1cIlByaW50XCIsZS5QaW49XCJQaW5cIn0oQ3x8KEM9e30pKSxmdW5jdGlvbihlKXtlLkVkaXROYW1lPVwiRWRpdCBOYW1lXCIsZS5Nb3ZlPVwiTW92ZVwiLGUuRGVsZXRlPVwiRGVsZXRlXCJ9KG18fChtPXt9KSksZnVuY3Rpb24oZSl7ZS5OZXdWaWV3PVwiTmV3Vmlld1wiLGUuRHVwbGljYXRlVmlld3M9XCJEdXBsaWNhdGVWaWV3XCIsZS5PcGVuV2l0aERlZmF1bHRCcm93c2VyPVwiT3BlbldpdGhEZWZhdWx0QnJvd3NlclwiLGUuUmVsb2FkVmlld3M9XCJSZWxvYWRUYWJcIixlLkNsb3NlVmlld3M9XCJDbG9zZVRhYlwiLGUuQWRkVG9DaGFubmVsPVwiQWRkVG9DaGFubmVsXCIsZS5SZW1vdmVGcm9tQ2hhbm5lbD1cIlJlbW92ZUZyb21DaGFubmVsXCIsZS5CYWNrPVwiQmFja1wiLGUuRm9yd2FyZD1cIkZvcndhcmRcIixlLlByaW50PVwiUHJpbnRcIixlLlByaW50QWxsPVwiUHJpbnRBbGxcIixlLlByaW50U2NyZWVuPVwiUHJpbnRTY3JlZW5cIixlLkN1c3RvbT1cIkN1c3RvbVwifSh3fHwodz17fSkpLGZ1bmN0aW9uKGUpe2UuU2hvd0hpZGVUYWJzPVwiU2hvd0hpZGVUYWJzXCIsZS5Db2xvckxpbmtpbmc9XCJDb2xvckxpbmtpbmdcIixlLlByZXNldExheW91dHM9XCJQcmVzZXRMYXlvdXRzXCIsZS5Mb2NrVW5sb2NrUGFnZT1cIkxvY2tVbmxvY2tQYWdlXCIsZS5TYXZlTWVudT1cIlNhdmVNZW51XCIsZS5TYXZlUGFnZT1cIlNhdmVQYWdlXCIsZS5NaW5pbWlzZT1cIk1pbmltaXNlXCIsZS5NYXhpbWlzZT1cIk1heGltaXNlXCIsZS5DbG9zZT1cIkNsb3NlXCIsZS5DdXN0b209XCJDdXN0b21cIn0oYnx8KGI9e30pKSxmdW5jdGlvbihlKXtlLlNhdmVQYWdlPVwiU2F2ZVBhZ2VcIixlLlNhdmVXb3Jrc3BhY2U9XCJTYXZlV29ya3NwYWNlXCIsZS5TYXZlUGFnZUFzPVwiU2F2ZVBhZ2VBc1wiLGUuU2F2ZVdvcmtzcGFjZUFzPVwiU2F2ZVdvcmtzcGFjZUFzXCIsZS5DdXN0b209XCJDdXN0b21cIn0oeXx8KHk9e30pKSxmdW5jdGlvbihlKXtlLkJyb3dzZXI9XCJicm93c2VyXCIsZS5QbGF0Zm9ybT1cInBsYXRmb3JtXCJ9KHh8fCh4PXt9KSksZnVuY3Rpb24oZSl7ZS5DdXN0b21CdXR0b249XCJDdXN0b21CdXR0b25cIixlLlN0b3JlQ3VzdG9tQnV0dG9uPVwiU3RvcmVDdXN0b21CdXR0b25cIixlLkN1c3RvbURyb3Bkb3duSXRlbT1cIkN1c3RvbURyb3Bkb3duSXRlbVwiLGUuR2xvYmFsQ29udGV4dE1lbnU9XCJHbG9iYWxDb250ZXh0TWVudVwiLGUuVmlld1RhYkNvbnRleHRNZW51PVwiVmlld1RhYkNvbnRleHRNZW51XCIsZS5QYWdlVGFiQ29udGV4dE1lbnU9XCJQYWdlVGFiQ29udGV4dE1lbnVcIixlLlNhdmVCdXR0b25Db250ZXh0TWVudT1cIlNhdmVCdXR0b25Db250ZXh0TWVudVwiLGUuQVBJPVwiQVBJXCJ9KGt8fChrPXt9KSksZnVuY3Rpb24oZSl7ZS5TQVZFX1BBR0U9XCJTQVZFX1BBR0VcIixlLlNBVkVfV09SS1NQQUNFPVwiU0FWRV9XT1JLU1BBQ0VcIixlLlNBVkVfUEFHRV9BUz1cIlNBVkVfUEFHRV9BU1wiLGUuU0FWRV9XT1JLU1BBQ0VfQVM9XCJTQVZFX1dPUktTUEFDRV9BU1wiLGUuUkVOQU1FX1BBR0U9XCJSRU5BTUVfUEFHRVwiLGUuUkVOQU1FX1dPUktTUEFDRT1cIlJFTkFNRV9XT1JLU1BBQ0VcIn0oU3x8KFM9e30pKSxmdW5jdGlvbihlKXtlLkxvY2FsPVwibG9jYWxcIixlLkRldj1cImRldlwiLGUuU3RhZ2luZz1cInN0YWdpbmdcIixlLlByb2Q9XCJwcm9kXCJ9KE98fChPPXt9KSk7Y29uc3QgTD1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZmluLF89KFwidW5kZWZpbmVkXCI9PXR5cGVvZiBwcm9jZXNzfHxwcm9jZXNzLmVudixcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93KSxQPV8mJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBpbmRleGVkREIsRT1fP3dpbmRvdy5vcmlnaW46Ty5Mb2NhbCxqPUwmJmZpbi5tZS51dWlkLFI9TCYmZmluLm1lLm5hbWUsST1MJiZmaW4ubWUuZW50aXR5VHlwZSxWPShPLkxvY2FsLE8uRGV2LE8uU3RhZ2luZyxcInByb2RcIj09PU8uUHJvZCksSD1lPT5lLnN0YXJ0c1dpdGgoXCJodHRwOi8vXCIpfHxlLnN0YXJ0c1dpdGgoXCJodHRwczovL1wiKT9lOkUrZSxBPUgoXCJodHRwczovL3dvcmtzcGFjZS5vcGVuZmluLmNvL3dvcmtzcGFjZS8yMC4xLjVcIiksVD1IKFwiaHR0cHM6Ly93b3Jrc3BhY2Uub3BlbmZpbi5jby93b3Jrc3BhY2UvMjAuMS41XCIpLEQ9KFwidW5kZWZpbmVkXCIhPXR5cGVvZiBXT1JLU1BBQ0VfRE9DU19QTEFURk9STV9VUkwmJkgoV09SS1NQQUNFX0RPQ1NfUExBVEZPUk1fVVJMKSxcInVuZGVmaW5lZFwiIT10eXBlb2YgV09SS1NQQUNFX0RPQ1NfQ0xJRU5UX1VSTCYmSChXT1JLU1BBQ0VfRE9DU19DTElFTlRfVVJMKSxcIjQwLjEzMC4xMDEuMVwiKSxCPVwiMjAuMS41XCI7XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFdPUktTUEFDRV9CVUlMRF9TSEEmJldPUktTUEFDRV9CVUlMRF9TSEE7dmFyIFo9bigzNzgpO2NvbnN0ICQ9ZT0+ZmluLlN5c3RlbS5nZXRTeXN0ZW1BcHBDb25maWcoZSk7bGV0IE47YXN5bmMgZnVuY3Rpb24gRigpe2lmKE4pcmV0dXJuIE47Y29uc3QgZT1cImdldE92ZXJyaWRlc1wiO2lmKCFMKXJldHVybiBfJiZjb25zb2xlLndhcm4oYCR7ZX06IFRoZSBGaW4gQVBJIHdhcyBub3QgYXZhaWxhYmxlLiBSZXR1cm5pbmcgYW4gZW1wdHkgcmVzdWx0LmApLHt9O2NvbnN0IHQ9YXdhaXQgYXN5bmMgZnVuY3Rpb24oKXtjb25zdCBlPVwiZ2V0RE9TT3ZlcnJpZGVzXCI7aWYoIUwpcmV0dXJuIGNvbnNvbGUud2FybihgJHtlfTogdGhlIGZpbiBBUEkgd2FzIG5vdCBhdmFpbGFibGUsIHJldHVybmluZyBubyByZXN1bHRgKSx7fTt0cnl7bGV0IHQ9YXdhaXQgJChcIndvcmtzcGFjZVwiKS5jYXRjaCgodD0+e2NvbnNvbGUud2FybihgJHtlfTogY3VzdG9tQ29uZmlnIGVudHJ5IGZvciBTeXN0ZW1BcHAgd29ya3NwYWNlIG5vdCBhdmFpbGFibGUgaW4gRGVza3RvcCBPd25lciBTZXR0aW5ncy4gJHt0Py5tZXNzYWdlfWApfSkpO3JldHVybiB0fHwodD1hd2FpdCAkKFwiaG9tZVwiKSksSlNPTi5zdHJpbmdpZnkodCksdH1jYXRjaCh0KXtpZighVilyZXR1cm57fTtpZighKHQgaW5zdGFuY2VvZiBFcnJvcikpdGhyb3cgdDtjb25zb2xlLndhcm4oYCR7ZX06IE1pc3NpbmcgV29ya3NwYWNlIERlc2t0b3AgT3duZXIgU2V0dGluZ3MgY29uZmlndXJhdGlvbiwgdXNpbmcgZGVmYXVsdHMuICR7dD8ubWVzc2FnZX1gKX1yZXR1cm57fX0oKSxuPWF3YWl0IGFzeW5jIGZ1bmN0aW9uKCl7Y29uc3QgZT1cImdldE1hbmlmZXN0T3ZlcnJpZGVzXCIse21hbmlmZXN0OnQsaW5pdGlhbE9wdGlvbnM6bn09YXdhaXQgZmluLkFwcGxpY2F0aW9uLmdldEN1cnJlbnRTeW5jKCkuZ2V0SW5mbygpO3JldHVybiB0Py5wbGF0Zm9ybS53b3Jrc3BhY2V8fHQ/LnBsYXRmb3JtLmhvbWV8fG4/LndvcmtzcGFjZXx8bj8uaG9tZXx8Y29uc29sZS53YXJuKGAke2V9OiBNaXNzaW5nIEhvbWUgZGV2ZWxvcG1lbnQgbWFuaWZlc3Qgb3ZlcnJpZGVzLCB1c2luZyBEZXNrdG9wIE93bmVyIFNldHRpbmdzLmApLHQ/LnBsYXRmb3JtLndvcmtzcGFjZT8oSlNPTi5zdHJpbmdpZnkodD8ucGxhdGZvcm0ud29ya3NwYWNlKSx0Py5wbGF0Zm9ybS53b3Jrc3BhY2UpOnQ/LnBsYXRmb3JtLmhvbWU/KEpTT04uc3RyaW5naWZ5KHQ/LnBsYXRmb3JtLmhvbWUpLHQ/LnBsYXRmb3JtLmhvbWUpOm4/LndvcmtzcGFjZT8oSlNPTi5zdHJpbmdpZnkobj8ud29ya3NwYWNlKSxuPy53b3Jrc3BhY2UpOm4/LmhvbWU/KEpTT04uc3RyaW5naWZ5KG4/LmhvbWUpLG4/LmhvbWUpOnt9fSgpO3JldHVybiBOPXsuLi5uLC4uLnR9LE59bGV0IFc7YXN5bmMgZnVuY3Rpb24gVSgpe2NvbnN0IGU9KGF3YWl0IEYoKSkuYnJvd3NlckJhc2VVcmw7aWYoZSl0cnl7Y29uc3QgdD1uZXcgVVJMKGUpO2lmKHQucGF0aG5hbWUuZW5kc1dpdGgoXCIvXCIpKXQucGF0aG5hbWU9dC5wYXRobmFtZS5zbGljZSgwLC0xKTtlbHNle2lmKFwiL3dvcmtzcGFjZVwiPT09dC5wYXRobmFtZSlyZXR1cm4gdC5wYXRobmFtZSs9YC8ke0J9YCx0LnRvU3RyaW5nKCk7Y29uc29sZS53YXJuKGBAb3BlbmZpbi93b3Jrc3BhY2UtcGxhdGZvcm06IGJyb3dzZXJPdmVycmlkZUJhc2VVcmwgbXVzdCBiZSBhIHZhbGlkIHVybCwgd2l0aCBwYXRoOiAvd29ya3NwYWNlLiBFeHBlY3RlZCA8cHJvdG9jb2w+Oi8vPG9wdGlvbmFsIHN1YmRvbWFpbj4uPGRvbWFpbj4vd29ya3NwYWNlIGJ1dCBnb3QgJHtlfWApfX1jYXRjaCh0KXtjb25zb2xlLndhcm4oYEBvcGVuZmluL3dvcmtzcGFjZS1wbGF0Zm9ybTogYnJvd3Nlck92ZXJyaWRlQmFzZVVybCBtdXN0IGJlIGEgdmFsaWQgdXJsLiBFeHBlY3RlZCA8cHJvdG9jb2w+Oi8vPG9wdGlvbmFsIHN1YmRvbWFpbj4uPGRvbWFpbj4vd29ya3NwYWNlIGJ1dCBnb3QgJHtlfWApfXJldHVybiBXPz9UfXZhciB6OyFmdW5jdGlvbihlKXtlLkhvbWU9XCIvaG9tZS9cIixlLkhvbWVTZWFyY2g9XCIvaG9tZS8/ZGVlcGxpbms9c2VhcmNoXCIsZS5Ib21lUGFnZXNSZW5hbWU9XCIvaG9tZS9wYWdlcy9yZW5hbWUvXCIsZS5Eb2NrPVwiL2RvY2svXCIsZS5Ccm93c2VyPVwiL2Jyb3dzZXIvXCIsZS5Ccm93c2VyUG9wdXBNZW51PVwiL2Jyb3dzZXIvcG9wdXAtbWVudS9cIixlLlByb3ZpZGVyPVwiL3Byb3ZpZGVyL1wiLGUuQnJvd3NlclBvcHVwTWVudVNhdmVNb2RhbD1cIi9icm93c2VyL3BvcHVwLW1lbnUvc2F2ZS1tb2RhbC9cIixlLkJyb3dzZXJQb3B1cE1lbnVMYXlvdXRzPVwiL2Jyb3dzZXIvcG9wdXAtbWVudS9sYXlvdXRzL2xheW91dHMvXCIsZS5Ccm93c2VyUG9wdXBNZW51Q29sb3JMaW5raW5nPVwiL2Jyb3dzZXIvcG9wdXAtbWVudS9jb2xvci1saW5raW5nL2NvbG9yLWxpbmtpbmcvXCIsZS5Ccm93c2VySW5kaWNhdG9yPVwiL2Jyb3dzZXIvaW5kaWNhdG9yL1wiLGUuQnJvd3NlclBvcHVwTWVudUFkZHJlc3NTZWFyY2hSZXN1bHRzVmlldz1cIi9icm93c2VyL3BvcHVwLW1lbnUvYWRkcmVzcy1zZWFyY2gtcmVzdWx0cy12aWV3L1wiLGUuUmVzcG9uc2VNb2RhbD1cIi9icm93c2VyL3BvcHVwLW1lbnUvcmVzcG9uc2UtbW9kYWwvXCIsZS5DbG9zZUNvbmZpcm1hdGlvbk1vZGFsPVwiL2Jyb3dzZXIvcG9wdXAtbWVudS9jbG9zZS1jb25maXJtYXRpb24tbW9kYWwvXCIsZS5Eb2NzPVwiL3Byb3ZpZGVyL2RvY3MvXCIsZS5TdG9yZWZyb250PVwiL3N0b3JlZnJvbnQvXCIsZS5EZXByZWNhdGVkQWxlcnQ9XCIvcHJvdmlkZXIvZGVwcmVjYXRlZC1hbGVydC9cIixlLkFuYWx5dGljcz1cIi9wcm92aWRlci9hbmFseXRpY3MvXCIsZS5FbnRlcnByaXNlQnJvd3Nlcj1cIi9icm93c2VyL2VudGVycHJpc2UvXCIsZS5FbnRlcnByaXNlQ29udGV4dE1lbnU9XCIvYnJvd3Nlci9lbnRlcnByaXNlL2NvbnRleHQtbWVudS9cIixlLkVudGVycHJpc2VCb29rbWFya0RpYWxvZz1cIi9icm93c2VyL2VudGVycHJpc2UvYm9va21hcmstZGlhbG9nL1wiLGUuRHJvcGRvd25NZW51PVwiL2Jyb3dzZXIvZW50ZXJwcmlzZS9kcm9wZG93bi1tZW51L1wifSh6fHwoej17fSkpO3ZhciBHOyFmdW5jdGlvbihlKXtlLlNlYXJjaD1cInNlYXJjaFwifShHfHwoRz17fSkpO2NvbnN0IEs9ejt2YXIgcSxZOyFmdW5jdGlvbihlKXtlLldvcmtzcGFjZT1cIm9wZW5maW4td29ya3NwYWNlXCIsZS5PbGRXb3Jrc3BhY2U9XCJvcGVuZmluLWJyb3dzZXJcIn0ocXx8KHE9e30pKSxmdW5jdGlvbihlKXtlLkZpblByb3RvY29sPVwiZmluLXByb3RvY29sXCJ9KFl8fChZPXt9KSk7Y29uc3QgSj17dXVpZDpqfSxYPShxLldvcmtzcGFjZSxlPT57aWYoIUwpdGhyb3cgbmV3IEVycm9yKFwiZ2V0QXBwbGljYXRpb24gY2Fubm90IGJlIHVzZWQgaW4gYSBub24gT3BlbkZpbiBlbnYuIEF2b2lkIHVzaW5nIHRoaXMgZHVyaW5nIHByZS1yZW5kZXJpbmcuXCIpO3JldHVybiBmaW4uQXBwbGljYXRpb24ud3JhcFN5bmMoZSl9KSxRPSgpPT5YKEopO3ZhciBlZTshZnVuY3Rpb24oZSl7ZS5Ib21lPVwib3BlbmZpbi1ob21lXCIsZS5Eb2NrPVwib3BlbmZpbi1kb2NrXCIsZS5TdG9yZWZyb250PVwib3BlbmZpbi1zdG9yZWZyb250XCIsZS5Ib21lSW50ZXJuYWw9XCJvcGVuZmluLWhvbWUtaW50ZXJuYWxcIixlLkJyb3dzZXJNZW51PVwib3BlbmZpbi1icm93c2VyLW1lbnVcIixlLkJyb3dzZXJTYXZlTWVudT1cIm9wZW5maW4tYnJvd3Nlci1zYXZlLW1lbnVcIixlLkJyb3dzZXJJbmRpY2F0b3I9XCJvcGVuZmluLWJyb3dzZXItaW5kaWNhdG9yXCIsZS5Ccm93c2VyV2luZG93PVwiaW50ZXJuYWwtZ2VuZXJhdGVkLXdpbmRvd1wiLGUuQ2xhc3NpY1dpbmRvdz1cImludGVybmFsLWdlbmVyYXRlZC1jbGFzc2ljLXdpbmRvd1wiLGUuRW50ZXJwcmlzZUNvbnRleHRNZW51PVwib3BlbmZpbi1lbnRlcnByaXNlLWNvbnRleHQtbWVudVwiLGUuQnJvd3NlckFkZHJlc3NTZWFyY2hQcmVmaXg9XCJvcGVuZmluLWJyb3dzZXItbWVudS1hZGRyZXNzLXNlYXJjaC1cIixlLkVudGVycHJpc2VCb29rbWFya0RpYWxvZ1dpbmRvdz1cIm9wZW5maW4tZW50ZXJwcmlzZS1ib29rbWFyay1kaWFsb2dcIixlLkRyb3Bkb3duTWVudT1cIm9wZW5maW4tZW50ZXJwcmlzZS1kcm9wZG93bi1tZW51XCJ9KGVlfHwoZWU9e30pKTtmdW5jdGlvbiB0ZShlKXtpZighTCl0aHJvdyBuZXcgRXJyb3IoXCJnZXRPRldpbmRvdyBjYW4gb25seSBiZSB1c2VkIGluIGFuIE9wZW5GaW4gZW52LiBBdm9pZCBjYWxsaW5nIHRoaXMgbWV0aG9kIGR1cmluZyBwcmUtcmVuZGVyaW5nLlwiKTtyZXR1cm4gZmluLldpbmRvdy53cmFwU3luYyhlKX1jb25zdCBuZT17bmFtZTpSLHV1aWQ6an07ZWUuSG9tZSxxLldvcmtzcGFjZSxlZS5Eb2NrLHEuV29ya3NwYWNlO2NvbnN0IHJlPXtuYW1lOmVlLlN0b3JlZnJvbnQsdXVpZDpxLldvcmtzcGFjZX07cS5Xb3Jrc3BhY2UscS5Xb3Jrc3BhY2U7YXN5bmMgZnVuY3Rpb24gb2UoZSl7Y29uc3QgdD10ZShlKTtcIm1pbmltaXplZFwiPT09YXdhaXQgdC5nZXRTdGF0ZSgpJiZhd2FpdCB0LnJlc3RvcmUoKSxhd2FpdCB0LnNob3coKSxhd2FpdCB0LnNldEFzRm9yZWdyb3VuZCgpfWNvbnN0IGFlPWFzeW5jIGU9Pnt0cnl7Y29uc3QgdD1hd2FpdCBmaW4uV2luZG93LndyYXBTeW5jKHtuYW1lOmUubmFtZSx1dWlkOmUudXVpZD8/ZmluLm1lLnV1aWR9KS5nZXRPcHRpb25zKCk7cmV0dXJuKFwiYnJvd3NlclwiPT09dC53b3Jrc3BhY2VQbGF0Zm9ybT8ud2luZG93VHlwZXx8XCJlbnRlcnByaXNlXCI9PT10LndvcmtzcGFjZVBsYXRmb3JtPy53aW5kb3dUeXBlKSYmdC53b3Jrc3BhY2VQbGF0Zm9ybT8ucGFnZXN9Y2F0Y2goZSl7cmV0dXJuIGNvbnNvbGUud2FybihcImlzQnJvd3NlcldpbmRvdyBlcnJvcjogXCIsZSksITF9fTthc3luYyBmdW5jdGlvbiBpZSgpe2NvbnN0IGU9YXdhaXQgZmluLkFwcGxpY2F0aW9uLmdldEN1cnJlbnRTeW5jKCkuZ2V0Q2hpbGRXaW5kb3dzKCksdD1hd2FpdCBQcm9taXNlLmFsbChlLm1hcCgoYXN5bmMgZT0+YWUoZS5pZGVudGl0eSkpKSk7cmV0dXJuIGUuZmlsdGVyKCgoZSxuKT0+dFtuXSkpfWFzeW5jIGZ1bmN0aW9uIGxlKCl7cmV0dXJuKGF3YWl0IGZpbi5BcHBsaWNhdGlvbi5nZXRDdXJyZW50U3luYygpLmdldENoaWxkV2luZG93cygpKS5maWx0ZXIoKGU9PmUuaWRlbnRpdHkubmFtZS5zdGFydHNXaXRoKGVlLkJyb3dzZXJNZW51KSkpfWNvbnN0IHNlPWU9PnRlKGUpLmdldE9wdGlvbnMoKS50aGVuKCgoKT0+ITApKS5jYXRjaCgoKCk9PiExKSksY2U9KCk9PnNlKHJlKSx1ZT1lPT5gJHtlLnRvcH0sJHtlLmxlZnR9LCR7ZS5oZWlnaHR9LCR7ZS53aWR0aH0sJHtlLmJvdHRvbX0sJHtlLnJpZ2h0fWA7ZnVuY3Rpb24gZGUoZSx0KXtjb25zdCBuPWUudG9wLHI9ZS5sZWZ0LG89ZS50b3ArZS5oZWlnaHQsYT1lLmxlZnQrZS53aWR0aCxpPXQubW9uaXRvclJlY3QudG9wLGw9dC5tb25pdG9yUmVjdC5sZWZ0LHM9dC5tb25pdG9yUmVjdC5ib3R0b20sYz10Lm1vbml0b3JSZWN0LnJpZ2h0O2lmKG4+c3x8bzxpfHxyPmN8fGE8bClyZXR1cm4gMDtjb25zdCB1PU1hdGgubWF4KG4saSksZD1NYXRoLm1heChyLGwpO3JldHVybihNYXRoLm1pbihvLHMpLXUpKihNYXRoLm1pbihhLGMpLWQpLyhlLmhlaWdodCplLndpZHRoKX1hc3luYyBmdW5jdGlvbiBwZShlKXtjb25zdCB0PWF3YWl0IGZpbi5TeXN0ZW0uZ2V0TW9uaXRvckluZm8oKTtyZXR1cm5bdC5wcmltYXJ5TW9uaXRvciwuLi50Lm5vblByaW1hcnlNb25pdG9yc10ucmVkdWNlKCgodCxuKT0+e2NvbnN0IHI9ZGUoZSxuKTtyZXR1cm4gcj50LnBlcmNlbnRhZ2U/e3BlcmNlbnRhZ2U6cixtb25pdG9yOm59OnR9KSx7cGVyY2VudGFnZTowLG1vbml0b3I6dC5wcmltYXJ5TW9uaXRvcn0pLm1vbml0b3J9Y29uc3QgZmU9YXN5bmMgZT0+e2NvbnN0IHQ9ZT9maW4uV2luZG93LndyYXBTeW5jKGUpOmZpbi5XaW5kb3cuZ2V0Q3VycmVudFN5bmMoKSxuPWF3YWl0IHQuZ2V0T3B0aW9ucygpO3JldHVybiBuLndvcmtzcGFjZVBsYXRmb3JtPy53aW5kb3dUeXBlJiZcImVudGVycHJpc2VcIj09PW4ud29ya3NwYWNlUGxhdGZvcm0ud2luZG93VHlwZX0saGU9ZT0+e2NvbnN0IHQ9ZT8uZGVmYXVsdFdpbmRvd09wdGlvbnM/LndvcmtzcGFjZVBsYXRmb3JtPy53aW5kb3dUeXBlO3JldHVyblwiZW50ZXJwcmlzZVwiPT09dH07dmFyIGdlOyFmdW5jdGlvbihlKXtlLkJyb3dzZXI9XCJCcm93c2VyXCIsZS5Eb2NrPVwiRG9ja1wiLGUuSG9tZT1cIkhvbWVcIixlLk5vdGlmaWNhdGlvbj1cIk5vdGlmaWNhdGlvblwiLGUuU3RvcmVmcm9udD1cIlN0b3JlZnJvbnRcIixlLlBsYXRmb3JtPVwiUGxhdGZvcm1cIixlLlRoZW1pbmc9XCJUaGVtaW5nXCIsZS5NaWNyb2Zsb3c9XCJNaWNyb2Zsb3dcIn0oZ2V8fChnZT17fSkpO2NvbnN0IHZlPWFzeW5jKGUsdCxuPVwid29ya3NwYWNlLWxpY2Vuc2luZ1wiKT0+e2NvbnN0IHI9e2FwaVZlcnNpb246dC5hcGlWZXJzaW9ufHxCLGNvbXBvbmVudE5hbWU6ZSxjb21wb25lbnRWZXJzaW9uOnQuY29tcG9uZW50VmVyc2lvbnx8QixhbGxvd2VkOnQuYWxsb3dlZCxyZWplY3Rpb25Db2RlOnQucmVqZWN0aW9uQ29kZX07ZmluLlN5c3RlbS5yZWdpc3RlclVzYWdlKHt0eXBlOm4sZGF0YTpyfSl9O2xldCBDZT0hMTtjb25zdCBtZT1uZXcgTWFwLHdlPWU9PntsZXQgdD1tZS5nZXQoZS51dWlkKTtyZXR1cm4gdHx8KHQ9TXQoZSksdC5vbmNlKFwiY2xvc2VkXCIsKCgpPT57bWUuZGVsZXRlKGUudXVpZCl9KSksbWUuc2V0KGUudXVpZCx0KSksdH0sYmU9YXN5bmMoZSx0KT0+e3RyeXthd2FpdCBlLl9yYWlzZUFuYWx5dGljcyhbdF0pfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoXCJmYWlsZWQgdG8gcmFpc2UgYW5hbHl0aWNzIGV2ZW50XCIsZSl9fSx5ZT1hc3luYyBlPT57YXdhaXQgYmUod2UoZmluLm1lLmlkZW50aXR5KSx7c291cmNlOlwiQnJvd3NlclwiLC4uLmV9KX07bGV0IHhlO2NvbnN0IGtlPWFzeW5jIGU9Pnt4ZXx8KHhlPW5ldyBUZXh0RW5jb2Rlcik7Y29uc3QgdD14ZS5lbmNvZGUoZSksbj1hd2FpdCB3aW5kb3cuY3J5cHRvLnN1YnRsZS5kaWdlc3QoXCJTSEEtMjU2XCIsdCk7cmV0dXJuIEFycmF5LmZyb20obmV3IFVpbnQ4QXJyYXkobikpLm1hcCgoZT0+ZS50b1N0cmluZygxNikucGFkU3RhcnQoMixcIjBcIikpKS5qb2luKFwiXCIpfTtmdW5jdGlvbiBTZShlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJiFBcnJheS5pc0FycmF5KGUpfWZ1bmN0aW9uIE9lKGUsLi4udCl7aWYoIXQubGVuZ3RoKXJldHVybiBlO2NvbnN0IG49dC5zaGlmdCgpO3JldHVybiBTZShlKSYmU2UobikmJk9iamVjdC5lbnRyaWVzKG4pLmZvckVhY2goKChbdCxuXSk9PntpZihTZShuKSlyZXR1cm4gZVt0XXx8KGVbdF09e30pLE9lKGVbdF0sbik7ZVt0XT1ufSkpLE9lKGUsLi4udCl9dmFyIE1lLExlPW4oMTk4KSxfZT1uLm4oTGUpOyFmdW5jdGlvbihlKXtlLkN1cnJlbnRXb3Jrc3BhY2VJZD1cImN1cnJlbnRXb3Jrc3BhY2VJZFwiLGUuTGFzdEZvY3VzZWRCcm93c2VyV2luZG93PVwibGFzdEZvY3VzZWRCcm93c2VyV2luZG93XCIsZS5NYWNoaW5lTmFtZT1cIm1hY2hpbmVOYW1lXCIsZS5OZXdUYWJQYWdlTGF5b3V0PVwiTmV3VGFiUGFnZUxheW91dFwiLGUuTmV3VGFiUGFnZVNvcnQ9XCJOZXdUYWJQYWdlU29ydFwiLGUuRG9ja1Bvc2l0aW9uPVwiRG9ja1Bvc2l0aW9uXCIsZS5TZWxlY3RlZENvbG9yU2NoZW1lPVwiU2VsZWN0ZWRDb2xvclNjaGVtZVwiLGUuSGFzTW92ZWRTdG9yZT1cIkhhc01vdmVkU3RvcmVcIixlLlBhZ2VEcmFnU3RhdGU9XCJCcm93c2VyUGFnZURyYWdTdGF0ZVwifShNZXx8KE1lPXt9KSk7Y29uc3QgUGU9TWU7ZnVuY3Rpb24gRWUoKXtyZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oUGUuTWFjaGluZU5hbWUpPz9cInVua25vd25cIn1sZXQgamU7YXN5bmMgZnVuY3Rpb24gUmUoKXtyZXR1cm4gamV8fChqZT1hd2FpdCBmaW4uU3lzdGVtLmdldE1hY2hpbmVJZCgpKSxqZX1jb25zdCBJZT1lPT57aWYoQXJyYXkuaXNBcnJheShlLndvcmtzcGFjZVBsYXRmb3JtPy5wYWdlcykmJihlLmxheW91dFNuYXBzaG90fHxlLmxheW91dCkpe2NvbnN0IHQ9ZS53b3Jrc3BhY2VQbGF0Zm9ybS5wYWdlcy5maW5kKChlPT5lLmlzQWN0aXZlKSk7aWYodCl7Y29uc3Qgbj1lLmxheW91dFNuYXBzaG90P2UubGF5b3V0U25hcHNob3QubGF5b3V0c1t0LmxheW91dENvbnRhaW5lcktleV06ZS5sYXlvdXQ7aWYobilpZih0LmlzTG9ja2VkKXtjb25zdCByPVR0KG4sdC5sYXlvdXQpO3QubGF5b3V0PXIsZS5sYXlvdXQ9cn1lbHNlIHQubGF5b3V0PW4sZS5sYXlvdXQ9bn19cmV0dXJuIGV9O2FzeW5jIGZ1bmN0aW9uIFZlKGUpe2NvbnN0IHQ9ZXx8YXdhaXQgZmluLlBsYXRmb3JtLmdldEN1cnJlbnRTeW5jKCkuZ2V0U25hcHNob3QoKTtpZih0LnNuYXBzaG90RGV0YWlscz8ubWFjaGluZUlkKXJldHVybiB0O2NvbnN0IG49RWUoKTtyZXR1cm57Li4udCxzbmFwc2hvdERldGFpbHM6ey4uLnQuc25hcHNob3REZXRhaWxzLG1hY2hpbmVJZDphd2FpdCBSZSgpLG1hY2hpbmVOYW1lOm59fX1mdW5jdGlvbiBIZSgpe3JldHVybiB2b2lkIDAhPT10eXBlb2YgY3J5cHRvJiZcInJhbmRvbVVVSURcImluIGNyeXB0byYmXCJmdW5jdGlvblwiPT10eXBlb2YgY3J5cHRvLnJhbmRvbVVVSUQ/Y3J5cHRvLnJhbmRvbVVVSUQoKTpcIjEwMDAwMDAwLTEwMDAtNDAwMC04MDAwLTEwMDAwMDAwMDAwMFwiLnJlcGxhY2UoL1swMThdL2csKGU9PihlXmNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMSkpWzBdJjE1Pj5lLzQpLnRvU3RyaW5nKDE2KSkpfWNvbnN0IEFlPV8mJlwiY29tcGxldGVcIiE9PWRvY3VtZW50LnJlYWR5U3RhdGUmJm5ldyBQcm9taXNlKChlPT5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwicmVhZHlzdGF0ZWNoYW5nZVwiLCgoKT0+e1wiY29tcGxldGVcIj09PWRvY3VtZW50LnJlYWR5U3RhdGUmJmUoKX0pKSkpO2Z1bmN0aW9uIFRlKGUpe2xldCB0O2NvbnN0IG49bmV3IFNldDtyZXR1cm4oKT0+e2lmKCFMKXRocm93IG5ldyBFcnJvcihcImdldENoYW5uZWxDbGllbnQgY2Fubm90IGJlIHVzZWQgb3V0c2lkZSBhbiBPcGVuRmluIGVudi4gQXZvaWQgdXNpbmcgdGhpcyBtZXRob2QgZHVyaW5nIHByZS1yZW5kZXJpbmcuXCIpO3JldHVybiB0fHwodD0oYXN5bmMoKT0+e2F3YWl0IEFlO2NvbnN0IHI9e2NsaWVudEFQSVZlcnNpb246Qn0sbz1hd2FpdCBmaW4uSW50ZXJBcHBsaWNhdGlvbkJ1cy5DaGFubmVsLmNvbm5lY3QoZSx7cGF5bG9hZDpyfSk7cmV0dXJuIG8ub25EaXNjb25uZWN0aW9uKChhc3luYygpPT57bi5mb3JFYWNoKChlPT5lKCkpKSxuLmNsZWFyKCksY29uc29sZS53YXJuKGBkaXNjb25uZWN0ZWQgZnJvbSBjaGFubmVsIHByb3ZpZGVyICR7ZX1gKSx0PXZvaWQgMH0pKSxvfSkoKS50aGVuKChlPT4oZS5hZGREaXNjb25uZWN0aW9uTGlzdGVuZXI9ZT0+e24uYWRkKGUpfSxlKSkpLmNhdGNoKChuPT57dGhyb3cgdD12b2lkIDAsbmV3IEVycm9yKGBmYWlsZWQgdG8gY29ubmVjdCB0byBjaGFubmVsIHByb3ZpZGVyICR7ZX06ICR7bn1gKX0pKSksdH19dmFyIERlLEJlOyFmdW5jdGlvbihlKXtlLkZldGNoaW5nPVwiZmV0Y2hpbmdcIixlLkZldGNoZWQ9XCJmZXRjaGVkXCIsZS5Db21wbGV0ZT1cImNvbXBsZXRlXCJ9KERlfHwoRGU9e30pKSxmdW5jdGlvbihlKXtlW2UuSW5pdGlhbD0wXT1cIkluaXRpYWxcIixlW2UuT3Blbj0xXT1cIk9wZW5cIixlW2UuQ2xvc2U9Ml09XCJDbG9zZVwifShCZXx8KEJlPXt9KSk7Y29uc3QgWmU9VGUoXCJfX29mX3dvcmtzcGFjZV9wcm90b2NvbF9fXCIpLCRlPVplO1RlKFwiX19zZWFyY2gtb3BlbmZpbi1icm93c2VyLWhvbWUtdG9waWNfX1wiKTtjb25zdCBOZT1hc3luYyBlPT4oey4uLmUsbGF5b3V0RGV0YWlsczp7bWFjaGluZUlkOmF3YWl0IFJlKCksbWFjaGluZU5hbWU6RWUoKX19KSxGZT1hc3luYyhlLHQpPT4oe3BhZ2VJZDpIZSgpLHRpdGxlOmUsbGF5b3V0OmF3YWl0IE5lKHQpLGlzUmVhZE9ubHk6ITF9KSxXZT1hc3luYyBlPT57Y29uc3QgdD1hd2FpdCBGZShlLnRpdGxlLFZ0KGUubGF5b3V0KSk7cmV0dXJuIGUucGFuZWxzJiYodC5wYW5lbHM9ZS5wYW5lbHMubWFwKChlPT4oey4uLmUsdmlld09wdGlvbnM6SXQoZS52aWV3T3B0aW9ucyl9KSkpKSx7Li4uZSwuLi50fX0sVWU9ZT0+e2NvbnN0IHQ9ZmluLlBsYXRmb3JtLkxheW91dC53cmFwU3luYyhlKTtyZXR1cm57c2hvdzphc3luYygpPT57Y29uc3Qgbj1hd2FpdCB0LmdldENvbmZpZygpLHtzZXR0aW5nczpyLGRpbWVuc2lvbnM6b309bixhPWF3YWl0IGZlKGUpO2F3YWl0IHQucmVwbGFjZSh7Li4ubixzZXR0aW5nczp7Li4ucixoYXNIZWFkZXJzOiEwLHJlb3JkZXJFbmFibGVkOiEwfSxkaW1lbnNpb25zOnsuLi5vLGhlYWRlckhlaWdodDphPzI4OjMwfX0pfSxoaWRlOmFzeW5jIGU9Pntjb25zdCBuPWF3YWl0IHQuZ2V0Q29uZmlnKCkse3NldHRpbmdzOnIsZGltZW5zaW9uczpvfT1hd2FpdCBuO2F3YWl0IHQucmVwbGFjZSh7Li4ubixzZXR0aW5nczp7Li4ucixoYXNIZWFkZXJzOiExLHJlb3JkZXJFbmFibGVkOmU/LnNldHRpbmdzPy5yZW9yZGVyRW5hYmxlZD8/ITF9LGRpbWVuc2lvbnM6ey4uLm8saGVhZGVySGVpZ2h0OjB9fSl9LGlzU2hvd2luZ1RhYnM6YXN5bmMoKT0+e3RyeXtjb25zdCBlPWF3YWl0IHQuZ2V0Q29uZmlnKCkse3NldHRpbmdzOm59PWF3YWl0IGU7cmV0dXJuIG4uaGFzSGVhZGVyc31jYXRjaChlKXtyZXR1cm4gY29uc29sZS5lcnJvcihcImZhaWxlZCB0byBnZXQgbGF5b3V0IGNvbmZpZzogXCIsZSksITB9fX19O3ZhciB6ZTshZnVuY3Rpb24oZSl7ZS5MYXVuY2hBcHA9XCJsYXVuY2hBcHBcIixlLlNhdmVQYWdlPVwic2F2ZVBhZ2VcIixlLkdldFNhdmVkUGFnZT1cImdldFNhdmVkUGFnZVwiLGUuQ3JlYXRlU2F2ZWRQYWdlPVwiY3JlYXRlU2F2ZWRQYWdlXCIsZS5VcGRhdGVTYXZlZFBhZ2U9XCJ1cGRhdGVTYXZlZFBhZ2VcIixlLkRlbGV0ZVNhdmVkUGFnZT1cImRlbGV0ZVNhdmVkUGFnZVwiLGUuR2V0U2F2ZWRQYWdlcz1cImdldFNhdmVkUGFnZXNcIixlLkNyZWF0ZVNhdmVkUGFnZUludGVybmFsPVwiY3JlYXRlU2F2ZWRQYWdlSW50ZXJuYWxcIixlLlVwZGF0ZVNhdmVkUGFnZUludGVybmFsPVwidXBkYXRlU2F2ZWRQYWdlSW50ZXJuYWxcIixlLkRlbGV0ZVNhdmVkUGFnZUludGVybmFsPVwiZGVsZXRlU2F2ZWRQYWdlSW50ZXJuYWxcIixlLlVwZGF0ZVBhZ2VGb3JXaW5kb3c9XCJ1cGRhdGVQYWdlRm9yV2luZG93XCIsZS5BdHRhY2hQYWdlc1RvV2luZG93PVwiYXR0YWNoUGFnZXNUb1dpbmRvd1wiLGUuRGV0YWNoUGFnZXNGcm9tV2luZG93PVwiZGV0YWNoUGFnZXNGcm9tV2luZG93XCIsZS5SZW9yZGVyUGFnZXNGb3JXaW5kb3c9XCJyZW9yZGVyUGFnZXNGb3JXaW5kb3dcIixlLlNldEFjdGl2ZVBhZ2U9XCJzZXRBY3RpdmVQYWdlXCIsZS5BZGRQYWdlPVwiYWRkUGFnZVwiLGUuQWRkRGVmYXVsdFBhZ2U9XCJhZGREZWZhdWx0UGFnZVwiLGUuR2V0QWxsQXR0YWNoZWRQYWdlcz1cImdldEFsbEF0dGFjaGVkUGFnZXNcIixlLkdldEFjdGl2ZVBhZ2VJZEZvcldpbmRvdz1cImdldEFjdGl2ZVBhZ2VJZEZvcldpbmRvd1wiLGUuR2V0UGFnZXNGb3JXaW5kb3c9XCJnZXRQYWdlc0ZvcldpbmRvd1wiLGUuR2V0UGFnZUZvcldpbmRvdz1cImdldFBhZ2VGb3JXaW5kb3dcIixlLkdldFNhdmVkUGFnZU1ldGFkYXRhPVwiZ2V0U2F2ZWRQYWdlTWV0YWRhdGFcIixlLkdldFVuaXF1ZVBhZ2VUaXRsZT1cImdldFVuaXF1ZVBhZ2VUaXRsZVwiLGUuR2V0TGFzdEZvY3VzZWRCcm93c2VyV2luZG93PVwiZ2V0TGFzdEZvY3VzZWRCcm93c2VyV2luZG93XCIsZS5HZXRUaGVtZXM9XCJnZXRUaGVtZXNcIixlLkdldFNlbGVjdGVkU2NoZW1lPVwiZ2V0U2VsZWN0ZWRTY2hlbWVcIixlLlNldFNlbGVjdGVkU2NoZW1lPVwic2V0U2VsZWN0ZWRTY2hlbWVcIixlLk9wZW5HbG9iYWxDb250ZXh0TWVudUludGVybmFsPVwib3Blbkdsb2JhbENvbnRleHRNZW51SW50ZXJuYWxcIixlLk9wZW5WaWV3VGFiQ29udGV4dE1lbnVJbnRlcm5hbD1cIm9wZW5WaWV3VGFiQ29udGV4dE1lbnVJbnRlcm5hbFwiLGUuT3BlblBhZ2VUYWJDb250ZXh0TWVudUludGVybmFsPVwib3BlblBhZ2VUYWJDb250ZXh0TWVudUludGVybmFsXCIsZS5PcGVuU2F2ZUJ1dHRvbkNvbnRleHRNZW51SW50ZXJuYWw9XCJvcGVuU2F2ZUJ1dHRvbkNvbnRleHRNZW51SW50ZXJuYWxcIixlLkludm9rZUN1c3RvbUFjdGlvbkludGVybmFsPVwiaW52b2tlQ3VzdG9tQWN0aW9uSW50ZXJuYWxcIixlLlJlcXVlc3RRdWl0UGxhdGZvcm1EaWFsb2dJbnRlcm5hbD1cInJlcXVlc3RRdWl0UGxhdGZvcm1EaWFsb2dJbnRlcm5hbFwiLGUuR2V0U2F2ZWRXb3Jrc3BhY2U9XCJnZXRTYXZlZFdvcmtzcGFjZVwiLGUuQ3JlYXRlU2F2ZWRXb3Jrc3BhY2U9XCJjcmVhdGVTYXZlZFdvcmtzcGFjZVwiLGUuVXBkYXRlU2F2ZWRXb3Jrc3BhY2U9XCJ1cGRhdGVTYXZlZFdvcmtzcGFjZVwiLGUuRGVsZXRlU2F2ZWRXb3Jrc3BhY2U9XCJkZWxldGVTYXZlZFdvcmtzcGFjZVwiLGUuR2V0U2F2ZWRXb3Jrc3BhY2VzPVwiZ2V0U2F2ZWRXb3Jrc3BhY2VzXCIsZS5TYXZlV29ya3NwYWNlPVwic2F2ZVdvcmtzcGFjZVwiLGUuR2V0Q3VycmVudFdvcmtzcGFjZT1cImdldEN1cnJlbnRXb3Jrc3BhY2VcIixlLkFwcGx5V29ya3NwYWNlPVwiYXBwbHlXb3Jrc3BhY2VcIixlLlNldEFjdGl2ZVdvcmtzcGFjZT1cInNldEFjdGl2ZVdvcmtzcGFjZVwiLGUuSXNCcm93c2VySW5pdGlhbGl6ZWQ9XCJpc0Jyb3dzZXJJbml0aWFsaXplZFwiLGUuQW5hbHl0aWNzPVwiYW5hbHl0aWNzSW50ZXJuYWxcIixlLkdldExhbmd1YWdlPVwiZ2V0TGFuZ3VhZ2VcIixlLkdldExhbmd1YWdlUmVzb3VyY2VzSW50ZXJuYWw9XCJnZXRMYW5ndWFnZVJlc291cmNlc0ludGVybmFsXCIsZS5TZXRMYW5ndWFnZT1cInNldExhbmd1YWdlXCIsZS5HZXREb2NrUHJvdmlkZXJDb25maWc9XCJnZXREb2NrUHJvdmlkZXJDb25maWdcIixlLlNhdmVEb2NrUHJvdmlkZXJDb25maWc9XCJzYXZlRG9ja1Byb3ZpZGVyQ29uZmlnXCIsZS5IYW5kbGVTYXZlTW9kYWxPblBhZ2VDbG9zZT1cImhhbmRsZVNhdmVNb2RhbE9uUGFnZUNsb3NlXCIsZS5TaG91bGRQYWdlQ2xvc2U9XCJzaG91bGRQYWdlQ2xvc2VcIixlLlNob3VsZFdpbmRvd0Nsb3NlPVwic2hvdWxkV2luZG93Q2xvc2VcIixlLkNvcHlQYWdlPVwiY29weVBhZ2VcIixlLkhhbmRsZVBhZ2VDaGFuZ2VzPVwiaGFuZGxlUGFnZUNoYW5nZXNcIixlLk1hcmtVbnNhdmVkUGFnZXNBc1NhdmVkSW50ZXJuYWw9XCJtYXJrVW5zYXZlZFBhZ2VzQXNTYXZlZEludGVybmFsXCIsZS5UcmFja1JlbW92ZWRUYWJJbnRlcm5hbD1cInRyYWNrUmVtb3ZlZFRhYkludGVybmFsXCIsZS5SZXN0b3JlUmVtb3ZlZFRhYkludGVybmFsPVwicmVzdG9yZVJlbW92ZWRUYWJJbnRlcm5hbFwiLGUuVHJhY2tWaXNpdGVkU2l0ZUludGVybmFsPVwidHJhY2tWaXNpdGVkU2l0ZUludGVybmFsXCIsZS5HZXRSZWNlbnRseVZpc2l0ZWRTaXRlc0ludGVybmFsPVwiZ2V0UmVjZW50bHlWaXNpdGVkU2l0ZXNJbnRlcm5hbFwiLGUuR2V0RnJlcXVlbnRseVZpc2l0ZWRTaXRlc0ludGVybmFsPVwiZ2V0RnJlcXVlbnRseVZpc2l0ZWRTaXRlc0ludGVybmFsXCIsZS5TZWFyY2hTaXRlc0ludGVybmFsPVwic2VhcmNoU2l0ZXNJbnRlcm5hbFwiLGUuR2V0Q3VyYXRlZENvbnRlbnRJbnRlcm5hbD1cImdldEN1cmF0ZWRDb250ZW50SW50ZXJuYWxcIixlLkhhbmRsZVJlcXVlc3ROYXZpZ2F0aW9uSW50ZXJuYWw9XCJoYW5kbGVSZXF1ZXN0TmF2aWdhdGlvbkludGVybmFsXCIsZS5SZWZyZXNoQm9va21hcmtzSW50ZXJuYWw9XCJyZWZyZXNoQm9va21hcmtzSW50ZXJuYWxcIixlLkdldE5vdGlmaWNhdGlvbnNDb25maWc9XCJnZXROb3RpZmljYXRpb25zQ29uZmlnXCJ9KHplfHwoemU9e30pKTtjb25zdCBHZT1hc3luYyBlPT5maW4uUGxhdGZvcm0ud3JhcFN5bmMoZSkuZ2V0Q2xpZW50KCksS2U9YXN5bmMgZT0+e2NvbnN0IHQ9YXdhaXQgR2UoZSksbj1cIlRhcmdldCBpcyBub3QgYSBXb3Jrc3BhY2UgUGxhdGZvcm0uIFRhcmdldCBtdXN0IGNhbGwgV29ya3NwYWNlUGxhdGZvcm0uaW5pdFwiO2xldCByO3RyeXtyPWF3YWl0IHQuZGlzcGF0Y2goXCJpc1dvcmtzcGFjZVBsYXRmb3JtXCIpfWNhdGNoKGUpe3Rocm93IG5ldyBFcnJvcihuKX1pZihcImJvb2xlYW5cIj09dHlwZW9mIHImJnIpcmV0dXJuIGNvbnNvbGUud2FybihcIllvdSBhcmUgdXNpbmcgYW4gb2xkZXIgdmVyc2lvbiBvZiB0aGUgd29ya3NwYWNlIHBsYXRmb3JtLiBQbGVhc2UgdXBkYXRlIHlvdXIgd29ya3NwYWNlIHBsYXRmb3JtLlwiKSxyO2lmKFwib2JqZWN0XCI9PXR5cGVvZiByJiZyLmlzV29ya3NwYWNlUGxhdGZvcm0pcmV0dXJuIHI7dGhyb3cgbmV3IEVycm9yKG4pfSxxZT1hc3luYyBlPT4oYXdhaXQgS2UoZSksR2UoZSkpLFllPWFzeW5jIGU9Pntjb25zdCB0PWF3YWl0IEtlKGUpO2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0JiYhMCE9PXQ/LmlzQnJvd3NlckluaXRpYWxpemVkKXRocm93IG5ldyBFcnJvcihcIlRhcmdldCBpcyBub3QgYSBCcm93c2VyLWVuYWJsZWQgV29ya3NwYWNlIFBsYXRmb3JtLlwiKTtyZXR1cm4gR2UoZSl9LEplPVwib2Ytd29ya3NwYWNlLVwiO2NvbnN0IFhlPW5ldyBjbGFzc3ttYXJrKGUpe3BlcmZvcm1hbmNlLm1hcmsoYCR7SmV9JHtlfWApfW1hcmtTdGFydChlKXtwZXJmb3JtYW5jZS5tYXJrKGAke0plfSR7ZX0tc3RhcnRgKX1tYXJrRW5kKGUpe3BlcmZvcm1hbmNlLm1hcmsoYCR7SmV9JHtlfS1lbmRgKX1tYXJrRW5kQW5kTWVhc3VyZShlKXtwZXJmb3JtYW5jZS5tYXJrKGAke0plfSR7ZX0tZW5kYCk7dHJ5e3JldHVybiBwZXJmb3JtYW5jZS5tZWFzdXJlKGAke0plfSR7ZX1gLGAke0plfSR7ZX0tc3RhcnRgLGAke0plfSR7ZX0tZW5kYCl9Y2F0Y2goZSl7MH19bWFya0FuZE1lYXN1cmUoZSx0KXtwZXJmb3JtYW5jZS5tYXJrKGAke0plfSR7ZX1gKTt0cnl7cmV0dXJuIHBlcmZvcm1hbmNlLm1lYXN1cmUoYCR7SmV9JHtlfS1tZWFzdXJlYCxgJHtKZX0ke3R9LXN0YXJ0YCxgJHtKZX0ke2V9YCl9Y2F0Y2goZSl7MH19cmVwb3J0V29ya3NwYWNlUGVyZm9ybWFuY2VFbnRyaWVzKCl7cmV0dXJuIHBlcmZvcm1hbmNlLmdldEVudHJpZXNCeVR5cGUoXCJtZWFzdXJlXCIpLmZpbHRlcigoZT0+ZS5uYW1lLnN0YXJ0c1dpdGgoSmUpKSl9cmVwb3J0V29ya3NwYWNlUGVyZm9ybWFuY2UoKXtyZXR1cm4gdGhpcy5yZXBvcnRXb3Jrc3BhY2VQZXJmb3JtYW5jZUVudHJpZXMoKS5tYXAoKGU9Pih7bmFtZTplLm5hbWUucmVwbGFjZShgJHtKZX1gLFwiXCIpLnJlcGxhY2UoXCItbWVhc3VyZVwiLFwiXCIpLGR1cmF0aW9uOmUuZHVyYXRpb259KSkpfX0sUWU9KGUsdCk9PnQ/YCR7dH0tJHtlLnV1aWR9LSR7ZS5uYW1lfWA6YF9fYnJvd3Nlcl93aW5kb3dfXy0ke2UudXVpZH0tJHtlLm5hbWV9YCxldD1uZXcgTWFwLHR0PShlLHQpPT57Y29uc3Qgbj1RZShlLHQpO3JldHVybiBldC5oYXMobil8fGV0LnNldChuLFRlKG4pKSxldC5nZXQobikoKX07dmFyIG50LHJ0LG90LGF0OyFmdW5jdGlvbihlKXtlLkNsb3NlQnJvd3NlcldpbmRvdz1cImNsb3NlLWJyb3dzZXItd2luZG93XCIsZS5RdWl0UGxhdGZvcm09XCJxdWl0LXBsYXRmb3JtXCIsZS5DbG9zZVBhZ2U9XCJjbG9zZS1wYWdlXCIsZS5BZGRUb0NoYW5uZWw9XCJhZGQtdG8tY2hhbm5lbFwiLGUuUmVtb3ZlRnJvbUNoYW5uZWw9XCJyZW1vdmUtZnJvbS1jaGFubmVsXCIsZS5PcGVuU2F2ZU1vZGFsSW50ZXJuYWw9XCJvcGVuLXNhdmUtbW9kYWwtaW50ZXJuYWxcIixlLkR1cGxpY2F0ZVBhZ2U9XCJkdXBsaWNhdGUtcGFnZVwiLGUuU2V0U2VsZWN0ZWRTY2hlbWU9XCJzZXQtc2VsZWN0ZWQtc2NoZW1lXCIsZS5TaG93QnJvd3NlckluZGljYXRvcj1cInNob3ctYnJvd3Nlci1pbmRpY2F0b3JcIixlLlNldFNlbGVjdGVkTGFuZ3VhZ2U9XCJzZXQtc2VsZWN0ZWQtbGFuZ3VhZ2VcIixlLlJlZnJlc2hCb29rbWFya3NJbnRlcm5hbD1cInJlZnJlc2gtYm9va21hcmtzXCJ9KG50fHwobnQ9e30pKSxmdW5jdGlvbihlKXtlLkdldFBhZ2VzPVwiZ2V0LXBhZ2VzXCIsZS5HZXRBY3RpdmVQYWdlRm9yV2luZG93PVwiZ2V0LWFjdGl2ZS1wYWdlLWZvci13aW5kb3dcIixlLkF0dGFjaFBhZ2VzVG9XaW5kb3c9XCJhdHRhY2gtcGFnZXMtdG8td2luZG93XCIsZS5EZXRhY2hQYWdlc0Zyb21XaW5kb3c9XCJkZXRhY2gtcGFnZXMtZnJvbS13aW5kb3dcIixlLlNldEFjdGl2ZVBhZ2VGb3JXaW5kb3c9XCJzZXQtYWN0aXZlLXBhZ2UtZm9yLXdpbmRvd1wiLGUuUmVuYW1lUGFnZT1cInJlbmFtZS1wYWdlXCIsZS5SZW9yZGVyUGFnZXNGb3JXaW5kb3c9XCJyZW9yZGVyLXBhZ2VzLWZvci13aW5kb3dcIixlLlVwZGF0ZVBhZ2VGb3JXaW5kb3c9XCJ1cGRhdGUtcGFnZS1mb3Itd2luZG93XCIsZS5VcGRhdGVQYWdlc1dpbmRvd09wdGlvbnM9XCJ1cGRhdGUtcGFnZXMtd2luZG93LW9wdGlvbnNcIixlLklzRGV0YWNoaW5nUGFnZXM9XCJpcy1kZXRhY2hpbmctcGFnZXNcIixlLklzQWN0aXZlUGFnZUNoYW5naW5nPVwiaXMtYWN0aXZlLXBhZ2UtY2hhbmdpbmdcIn0ocnR8fChydD17fSkpLGZ1bmN0aW9uKGUpe2UuR2V0QXBwcz1cImdldC1hcHBzXCIsZS5HZXRDdXJhdGVkQ29udGVudD1cImdldC1jdXJhdGVkLWNvbnRlbnRcIixlLkdldFJlY2VudGx5VmlzaXRlZD1cImdldC1yZWNlbnRseS12aXNpdGVkXCJ9KG90fHwob3Q9e30pKSxmdW5jdGlvbihlKXtlLkNyZWF0ZUJvb2ttYXJrTm9kZT1cImNyZWF0ZS1ib29rbWFyay1ub2RlXCIsZS5HZXRCb29rbWFya05vZGU9XCJnZXQtYm9va21hcmstbm9kZVwiLGUuU2VhcmNoQm9va21hcmtOb2Rlcz1cInNlYXJjaC1ib29rbWFyay1ub2Rlc1wiLGUuVXBkYXRlQm9va21hcmtOb2RlPVwidXBkYXRlLWJvb2ttYXJrLW5vZGVcIixlLkRlbGV0ZUJvb2ttYXJrTm9kZT1cImRlbGV0ZS1ib29rbWFyay1ub2RlXCJ9KGF0fHwoYXQ9e30pKTtjb25zdCBpdD17Li4ubnQsLi4ucnR9LGx0PVRlKGAke1widW5kZWZpbmVkXCIhPXR5cGVvZiBmaW4mJmZpbj8ubWUuaWRlbnRpdHkudXVpZH0tZW50ZXJwcmlzZS1ib29rbWFya3NgKSxzdD1lPT4oe2lkZW50aXR5OmUsb3BlbmZpbldpbmRvdzpmaW4uV2luZG93LndyYXBTeW5jKGUpLF9ib29rbWFya3M6e19jcmVhdGVCb29rbWFya05vZGU6YXN5bmMgZT0+KGFzeW5jIGU9Pihhd2FpdCBsdCgpKS5kaXNwYXRjaChhdC5DcmVhdGVCb29rbWFya05vZGUsZSkpKGUpLF9nZXRCb29rbWFya05vZGU6YXN5bmMgZT0+KGFzeW5jIGU9Pihhd2FpdCBsdCgpKS5kaXNwYXRjaChhdC5HZXRCb29rbWFya05vZGUsZSkpKGUpLF9zZWFyY2hCb29rbWFya05vZGVzOmFzeW5jIGU9Pihhc3luYyBlPT4oYXdhaXQgbHQoKSkuZGlzcGF0Y2goYXQuU2VhcmNoQm9va21hcmtOb2RlcyxlKSkoZSksX3VwZGF0ZUJvb2ttYXJrTm9kZTphc3luYyBlPT4oYXN5bmMgZT0+KGF3YWl0IGx0KCkpLmRpc3BhdGNoKGF0LlVwZGF0ZUJvb2ttYXJrTm9kZSxlKSkoZSksX2RlbGV0ZUJvb2ttYXJrTm9kZTphc3luYyBlPT4oYXN5bmMgZT0+KGF3YWl0IGx0KCkpLmRpc3BhdGNoKGF0LkRlbGV0ZUJvb2ttYXJrTm9kZSxlKSkoZSl9LGdldFBhZ2VzOmFzeW5jKCk9Pihhd2FpdCBZZShlKSkuZGlzcGF0Y2goemUuR2V0UGFnZXNGb3JXaW5kb3csZSksZ2V0UGFnZTphc3luYyB0PT4oYXdhaXQgWWUoZSkpLmRpc3BhdGNoKHplLkdldFBhZ2VGb3JXaW5kb3cse2lkZW50aXR5OmUscGFnZUlkOnR9KSxhZGRQYWdlOmFzeW5jIHQ9Pkx0KCkuQnJvd3Nlci53cmFwU3luYyhlKS5fYWRkUGFnZSh0KSxfYWRkUGFnZTphc3luYyh0LG4pPT57Y29uc3Qgcj1hd2FpdCBZZShlKSxvPXtpZGVudGl0eTplLHBhZ2U6dCxpbnNlcnRpb25JbmRleDpuPy5pbmRleH07cmV0dXJuIHIuZGlzcGF0Y2goemUuQWRkUGFnZSxvKX0scmVtb3ZlUGFnZTphc3luYyB0PT4oYXdhaXQgWWUoZSkpLmRpc3BhdGNoKHplLkRldGFjaFBhZ2VzRnJvbVdpbmRvdyx7aWRlbnRpdHk6ZSxwYWdlSWRzOlt0XX0pLHJlcGFyZW50UGFnZTphc3luYyB0PT5MdCgpLkJyb3dzZXIud3JhcFN5bmMoZSkuX3JlcGFyZW50UGFnZSh0KSxfcmVwYXJlbnRQYWdlOmFzeW5jIHQ9Pntjb25zdHtwYWdlSWQ6bn09dCxyPWF3YWl0IFllKGUpLG89KGF3YWl0IHIuZGlzcGF0Y2goemUuR2V0QWxsQXR0YWNoZWRQYWdlcyx2b2lkIDApKS5maW5kKCgoe3BhZ2VJZDplfSk9PmU9PT1uKSk7aWYoIW8pdGhyb3cgbmV3IEVycm9yKGBSZXBhcmVudCBQYWdlIEVycm9yOiBUYXJnZXQgcGFnZSB3aXRoIHBhZ2VJZCAke259IG5vdCBmb3VuZGApO28ubXVsdGlJbnN0YW5jZVZpZXdCZWhhdmlvcj1cInJlcGFyZW50XCI7Y29uc3QgYT17aWRlbnRpdHk6ZSxwYWdlczpbb10saW5zZXJ0aW9uSW5kZXg6dC5pbmRleH07cmV0dXJuIHIuZGlzcGF0Y2goemUuQXR0YWNoUGFnZXNUb1dpbmRvdyxhKX0sc2V0QWN0aXZlUGFnZTphc3luYyB0PT4oYXdhaXQgWWUoZSkpLmRpc3BhdGNoKHplLlNldEFjdGl2ZVBhZ2Use2lkZW50aXR5OmUscGFnZUlkOnR9KSx1cGRhdGVQYWdlOmFzeW5jIHQ9Pntjb25zdCBuPWF3YWl0IFllKGUpO3JldHVybiB0LmlkZW50aXR5PWUsbi5kaXNwYXRjaCh6ZS5VcGRhdGVQYWdlRm9yV2luZG93LHQpfSxyZW9yZGVyUGFnZXM6YXN5bmMgdD0+e2NvbnN0IG49YXdhaXQgWWUoZSk7cmV0dXJuIHQuaWRlbnRpdHk9ZSxuLmRpc3BhdGNoKHplLlJlb3JkZXJQYWdlc0ZvcldpbmRvdyx0KX0sX29wZW5HbG9iYWxDb250ZXh0TWVudTphc3luYyB0PT57Y29uc3Qgbj1hd2FpdCBZZShlKTtyZXR1cm4gdC5pZGVudGl0eT1lLG4uZGlzcGF0Y2goemUuT3Blbkdsb2JhbENvbnRleHRNZW51SW50ZXJuYWwsdCl9LHJlcGxhY2VUb29sYmFyT3B0aW9uczphc3luYyB0PT57YXdhaXQgWWUoZSk7Y29uc3Qgbj1maW4uV2luZG93LndyYXBTeW5jKGUpO2F3YWl0IG4udXBkYXRlT3B0aW9ucyh7d29ya3NwYWNlUGxhdGZvcm06e3Rvb2xiYXJPcHRpb25zOnR9fSl9LHJlcGxhY2VXaW5kb3dTdGF0ZUJ1dHRvbk9wdGlvbnM6YXN5bmMgdD0+e2F3YWl0IFllKGUpO2NvbnN0IG49ZmluLldpbmRvdy53cmFwU3luYyhlKTthd2FpdCBuLnVwZGF0ZU9wdGlvbnMoe3dvcmtzcGFjZVBsYXRmb3JtOnt3aW5kb3dTdGF0ZUJ1dHRvbk9wdGlvbnM6dH19KX0sdXBkYXRlQnJvd3NlcldpbmRvd1RpdGxlOmFzeW5jIHQ9Pntjb25zdCBuPWZpbi5XaW5kb3cud3JhcFN5bmMoZSk7XCJzdHJpbmdcIiE9dHlwZW9mIHQ/YXdhaXQgbi51cGRhdGVPcHRpb25zKHt3b3Jrc3BhY2VQbGF0Zm9ybTp7dGl0bGU6dH19KTpjb25zb2xlLndhcm4oXCJUeXBlIHN0cmluZyBmb3Igd2luZG93IHRpdGxlIGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgV2luZG93VGl0bGUgdHlwZSBpbnN0ZWFkXCIsdCl9LF9vcGVuVmlld1RhYkNvbnRleHRNZW51OmFzeW5jIHQ9Pntjb25zdCBuPWF3YWl0IFllKGUpO3JldHVybiB0LmlkZW50aXR5PWUsbi5kaXNwYXRjaCh6ZS5PcGVuVmlld1RhYkNvbnRleHRNZW51SW50ZXJuYWwsdCl9LF9vcGVuUGFnZVRhYkNvbnRleHRNZW51OmFzeW5jIHQ9Pntjb25zdCBuPWF3YWl0IFllKGUpO3JldHVybiB0LmlkZW50aXR5PWUsbi5kaXNwYXRjaCh6ZS5PcGVuUGFnZVRhYkNvbnRleHRNZW51SW50ZXJuYWwsdCl9LF9vcGVuU2F2ZU1vZGFsOmFzeW5jIHQ9Pnthd2FpdCBZZShlKTtyZXR1cm4oYXdhaXQgdHQoZSkpLmRpc3BhdGNoKGl0Lk9wZW5TYXZlTW9kYWxJbnRlcm5hbCx0KX0sX29wZW5TYXZlQnV0dG9uQ29udGV4dE1lbnU6YXN5bmMgdD0+e2NvbnN0IG49YXdhaXQgWWUoZSk7cmV0dXJuIHQuaWRlbnRpdHk9ZSxuLmRpc3BhdGNoKHplLk9wZW5TYXZlQnV0dG9uQ29udGV4dE1lbnVJbnRlcm5hbCx0KX0sX2FkZERlZmF1bHRQYWdlOmFzeW5jIHQ9Pntjb25zdCBuPWF3YWl0IFllKGUpO3JldHVybiB0LmlkZW50aXR5PWUsbi5kaXNwYXRjaCh6ZS5BZGREZWZhdWx0UGFnZSx0KX0sX3RyYWNrUmVtb3ZlZFRhYjphc3luYyB0PT4oYXdhaXQgWWUoZSkpLmRpc3BhdGNoKHplLlRyYWNrUmVtb3ZlZFRhYkludGVybmFsLHQpLF9yZXN0b3JlUmVtb3ZlZFRhYjphc3luYyB0PT4oYXdhaXQgWWUoZSkpLmRpc3BhdGNoKHplLlJlc3RvcmVSZW1vdmVkVGFiSW50ZXJuYWwsdCksX3RyYWNrVmlzaXRlZFNpdGU6YXN5bmMgdD0+KGF3YWl0IFllKGUpKS5kaXNwYXRjaCh6ZS5UcmFja1Zpc2l0ZWRTaXRlSW50ZXJuYWwsdCksX2dldFJlY2VudGx5VmlzaXRlZFNpdGVzOmFzeW5jIHQ9Pihhd2FpdCBZZShlKSkuZGlzcGF0Y2goemUuR2V0UmVjZW50bHlWaXNpdGVkU2l0ZXNJbnRlcm5hbCx0KSxfZ2V0RnJlcXVlbnRseVZpc2l0ZWRTaXRlczphc3luYyB0PT4oYXdhaXQgWWUoZSkpLmRpc3BhdGNoKHplLkdldEZyZXF1ZW50bHlWaXNpdGVkU2l0ZXNJbnRlcm5hbCx0KSxfc2VhcmNoU2l0ZXM6YXN5bmMgdD0+KGF3YWl0IFllKGUpKS5kaXNwYXRjaCh6ZS5TZWFyY2hTaXRlc0ludGVybmFsLHtpZGVudGl0eTplLHJlcTp0fSksX2dldEN1cmF0ZWRDb250ZW50OmFzeW5jIHQ9Pihhd2FpdCBZZShlKSkuZGlzcGF0Y2goemUuR2V0Q3VyYXRlZENvbnRlbnRJbnRlcm5hbCx7aWRlbnRpdHk6ZSxyZXE6dH0pLF9oYW5kbGVSZXF1ZXN0TmF2aWdhdGlvbjphc3luYyB0PT4oYXdhaXQgWWUoZSkpLmRpc3BhdGNoKHplLkhhbmRsZVJlcXVlc3ROYXZpZ2F0aW9uSW50ZXJuYWwsdCl9KSxjdD1lPT57Y29uc3QgdD1maW4uUGxhdGZvcm0ud3JhcFN5bmMoZSk7cmV0dXJue3dyYXBTeW5jOmU9PnN0KGUpLGNyZWF0ZVdpbmRvdzphc3luYyBuPT57Y29uc3Qgcj0oKCk9Pntjb25zdCBlPWBicm93c2VyLXdpbmRvdy1zdGFydHVwLSR7SGUoKX1gO3JldHVybiBYZS5tYXJrU3RhcnQoZSksZX0pKCk7KGU9PntmaW4uQXBwbGljYXRpb24ud3JhcFN5bmMoe3V1aWQ6ZmluLm1lLmlkZW50aXR5LnV1aWR9KS5vbmNlKFwid2luZG93LXNob3duXCIsKCgpPT57WGUubWFya0FuZE1lYXN1cmUoXCJicm93c2VyLXdpbmRvdy1zaG93blwiLGUpfSkpfSkociksYXdhaXQgWWUoZSk7Y29uc3Qgbz1hd2FpdCB0LmNyZWF0ZVdpbmRvdyhuKTtyZXR1cm4oZT0+e1hlLm1hcmtBbmRNZWFzdXJlKFwiYnJvd3Nlci13aW5kb3ctc3RhcnRlZFwiLGUpfSkociksc3Qoby5pZGVudGl0eSl9LGdldEFsbEF0dGFjaGVkUGFnZXM6YXN5bmMoKT0+KGF3YWl0IFllKGUpKS5kaXNwYXRjaCh6ZS5HZXRBbGxBdHRhY2hlZFBhZ2VzLHZvaWQgMCksZ2V0QWxsV2luZG93czphc3luYygpPT57YXdhaXQgWWUoZSk7cmV0dXJuKGF3YWl0IGllKCkpLm1hcCgoZT0+c3QoZS5pZGVudGl0eSkpKX0sZ2V0VW5pcXVlUGFnZVRpdGxlOmFzeW5jIHQ9Pihhd2FpdCBZZShlKSkuZGlzcGF0Y2goemUuR2V0VW5pcXVlUGFnZVRpdGxlLHQpLGdldExhc3RGb2N1c2VkV2luZG93OmFzeW5jKCk9Pihhd2FpdCBZZShlKSkuZGlzcGF0Y2goemUuR2V0TGFzdEZvY3VzZWRCcm93c2VyV2luZG93LHZvaWQgMCl9fSx1dD1lPT4oe2NyZWF0ZVBhZ2U6YXN5bmMgdD0+KGF3YWl0IFllKGUpKS5kaXNwYXRjaCh6ZS5DcmVhdGVTYXZlZFBhZ2VJbnRlcm5hbCx0KSxkZWxldGVQYWdlOmFzeW5jIHQ9Pihhd2FpdCBZZShlKSkuZGlzcGF0Y2goemUuRGVsZXRlU2F2ZWRQYWdlSW50ZXJuYWwsdCksdXBkYXRlUGFnZTphc3luYyB0PT4oYXdhaXQgWWUoZSkpLmRpc3BhdGNoKHplLlVwZGF0ZVNhdmVkUGFnZUludGVybmFsLHQpLGdldFBhZ2U6YXN5bmMgdD0+KGF3YWl0IFllKGUpKS5kaXNwYXRjaCh6ZS5HZXRTYXZlZFBhZ2UsdCksZ2V0UGFnZXM6YXN5bmMgdD0+KGF3YWl0IFllKGUpKS5kaXNwYXRjaCh6ZS5HZXRTYXZlZFBhZ2VzLHQpLHNhdmVQYWdlOmFzeW5jIHQ9Pihhd2FpdCBZZShlKSkuZGlzcGF0Y2goemUuU2F2ZVBhZ2UsdCksY3JlYXRlV29ya3NwYWNlOmFzeW5jIHQ9Pihhd2FpdCBxZShlKSkuZGlzcGF0Y2goemUuQ3JlYXRlU2F2ZWRXb3Jrc3BhY2UsdCksZGVsZXRlV29ya3NwYWNlOmFzeW5jIHQ9Pntjb25zdCBuPUx0KCkscj1hd2FpdCBuLmdldEN1cnJlbnRXb3Jrc3BhY2UoKTtpZihyLndvcmtzcGFjZUlkPT09dCl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBkZWxldGUgY3VycmVudCBhY3RpdmUgd29ya3NwYWNlICR7ci50aXRsZX1gKTtyZXR1cm4oYXdhaXQgcWUoZSkpLmRpc3BhdGNoKHplLkRlbGV0ZVNhdmVkV29ya3NwYWNlLHQpfSx1cGRhdGVXb3Jrc3BhY2U6YXN5bmMgdD0+KGF3YWl0IHFlKGUpKS5kaXNwYXRjaCh6ZS5VcGRhdGVTYXZlZFdvcmtzcGFjZSx0KSxnZXRXb3Jrc3BhY2U6YXN5bmMgdD0+KGF3YWl0IHFlKGUpKS5kaXNwYXRjaCh6ZS5HZXRTYXZlZFdvcmtzcGFjZSx0KSxnZXRXb3Jrc3BhY2VzOmFzeW5jIHQ9Pihhd2FpdCBxZShlKSkuZGlzcGF0Y2goemUuR2V0U2F2ZWRXb3Jrc3BhY2VzLHQpLHNhdmVXb3Jrc3BhY2U6YXN5bmMgdD0+KGF3YWl0IHFlKGUpKS5kaXNwYXRjaCh6ZS5TYXZlV29ya3NwYWNlLHQpLGdldERvY2tQcm92aWRlckNvbmZpZzphc3luYyB0PT4oYXdhaXQgcWUoZSkpLmRpc3BhdGNoKHplLkdldERvY2tQcm92aWRlckNvbmZpZyx0KSxzYXZlRG9ja1Byb3ZpZGVyQ29uZmlnOmFzeW5jIHQ9Pihhd2FpdCBxZShlKSkuZGlzcGF0Y2goemUuU2F2ZURvY2tQcm92aWRlckNvbmZpZyx0KX0pLGR0PShlLHQpPT57bG9jYWxTdG9yYWdlLnNldEl0ZW0oYCR7an0tJHtlfWAsdCl9LHB0PWU9PmxvY2FsU3RvcmFnZS5nZXRJdGVtKGAke2p9LSR7ZX1gKTt2YXIgZnQ7IWZ1bmN0aW9uKGUpe2UuVXBkYXRlUGxhdGZvcm1UaGVtZVNjaGVtZT1cInVwZGF0ZS1wbGF0Zm9ybS10aGVtZS1zY2hlbWVcIn0oZnR8fChmdD17fSkpO2NvbnN0IGh0PVRlKFwib2Ytd29ya3NwYWNlLW5vdGlmaWNhdGlvbnMtc3luY1wiKSxndD1lPT4oe2dldFRoZW1lczphc3luYygpPT4oYXdhaXQgcWUoZSkpLmRpc3BhdGNoKHplLkdldFRoZW1lcyx2b2lkIDApLHNldFNlbGVjdGVkU2NoZW1lOmFzeW5jIHQ9Pihhd2FpdCBxZShlKSkuZGlzcGF0Y2goemUuU2V0U2VsZWN0ZWRTY2hlbWUsdCksZ2V0U2VsZWN0ZWRTY2hlbWU6YXN5bmMoKT0+KGF3YWl0IHFlKGUpKS5kaXNwYXRjaCh6ZS5HZXRTZWxlY3RlZFNjaGVtZSx2b2lkIDApfSksdnQ9YXN5bmMgZT0+e2NvbnN0IHQ9YXdhaXQgJGUoKTthd2FpdCB0LmRpc3BhdGNoKFwic2V0LXNlbGVjdGVkLXNjaGVtZVwiLGUpfSxDdD1hc3luYyBlPT57Y29uc3QgdD1hd2FpdCBodCgpO2F3YWl0IHQuZGlzcGF0Y2goZnQuVXBkYXRlUGxhdGZvcm1UaGVtZVNjaGVtZSx7c2NoZW1lOmV9KX0sbXQ9YXN5bmMgZT0+e2NvbnN0IHQ9YXdhaXQgaWUoKTtyZXR1cm4gUHJvbWlzZS5hbGwodC5tYXAoKGFzeW5jIHQ9Pntjb25zdCBuPWF3YWl0IHR0KHQuaWRlbnRpdHkpO2F3YWl0IG4uZGlzcGF0Y2goaXQuU2V0U2VsZWN0ZWRTY2hlbWUsZSl9KSkpfSx3dD1hc3luYyBlPT57Y29uc3QgdD1uZXcgQXJyYXksbj1maW4uQXBwbGljYXRpb24uZ2V0Q3VycmVudFN5bmMoKSxyPWF3YWl0IG4uZ2V0Vmlld3MoKTtmb3IoY29uc3QgZSBvZiByKXstMSE9PWUuaWRlbnRpdHkubmFtZS5pbmRleE9mKGVlLkJyb3dzZXJBZGRyZXNzU2VhcmNoUHJlZml4KSYmdC5wdXNoKGUuaWRlbnRpdHkpOy0xIT09KGF3YWl0IGUuZ2V0T3B0aW9ucygpKS51cmwuaW5kZXhPZihLLkVudGVycHJpc2VCcm93c2VyKSYmdC5wdXNoKGUuaWRlbnRpdHkpfXJldHVybiBQcm9taXNlLmFsbCh0Lm1hcCgoYXN5bmMgdD0+e2NvbnN0IG49YXdhaXQgdHQodCxcInRoZW1lLWNoYW5nZS1saXN0ZW5lclwiKTthd2FpdCBuLmRpc3BhdGNoKGl0LlNldFNlbGVjdGVkU2NoZW1lLGUpfSkpKX0sYnQ9YXN5bmMgZT0+e2NvbnN0IHQ9YXdhaXQgbGUoKTtyZXR1cm4gUHJvbWlzZS5hbGwodC5tYXAoKGFzeW5jIHQ9Pntjb25zdCBuPWF3YWl0IHR0KHQuaWRlbnRpdHkpO2F3YWl0IG4uZGlzcGF0Y2goaXQuU2V0U2VsZWN0ZWRTY2hlbWUsZSl9KSkpfSx5dD1hc3luYyBlPT57Y29uc3QgdD1hd2FpdCB0dCh7dXVpZDpuZS51dWlkLG5hbWU6ZWUuRW50ZXJwcmlzZUNvbnRleHRNZW51fSk7YXdhaXQgdC5kaXNwYXRjaChpdC5TZXRTZWxlY3RlZFNjaGVtZSxlKX0seHQ9YXN5bmMgZT0+e2NvbnN0IHQ9YXdhaXQgdHQoe3V1aWQ6bmUudXVpZCxuYW1lOmVlLkVudGVycHJpc2VCb29rbWFya0RpYWxvZ1dpbmRvd30pO2F3YWl0IHQuZGlzcGF0Y2goaXQuU2V0U2VsZWN0ZWRTY2hlbWUsZSkuY2F0Y2goKCgpPT57fSkpfSxrdD1hc3luYyBlPT57Y29uc3QgdD1hd2FpdCB0dCh7dXVpZDpuZS51dWlkLG5hbWU6ZWUuRHJvcGRvd25NZW51fSk7YXdhaXQgdC5kaXNwYXRjaChpdC5TZXRTZWxlY3RlZFNjaGVtZSxlKS5jYXRjaCgoKCk9Pnt9KSl9LFN0PWFzeW5jIGU9PntpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgbG9jYWxTdG9yYWdlKXRyeXthd2FpdCBQcm9taXNlLmFsbChbZHQoUGUuU2VsZWN0ZWRDb2xvclNjaGVtZSxlKSx3dChlKSxDdChlKSxtdChlKSxidChlKSx5dChlKSx2dChlKSx4dChlKSxrdChlKV0pfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoXCJmYWlsZWQgdG8gc2V0IHRoZSBzZWxlY3RlZCBzY2hlbWU6IFwiLGUpfX0sT3Q9KCk9PntpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgbG9jYWxTdG9yYWdlKXJldHVybiBudWxsO3RyeXtjb25zdCBlPXB0KFBlLlNlbGVjdGVkQ29sb3JTY2hlbWUpO3JldHVybiBlfHxudWxsfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoXCJmYWlsZWQgdG8gZ2V0IHRoZSBzZWxlY3RlZCBzY2hlbWU6IFwiLGUpfX0sTXQ9ZT0+e2NvbnN0IHQ9ZmluLlBsYXRmb3JtLndyYXBTeW5jKGUpO2xldCBuO3JldHVybiBPYmplY3QuYXNzaWduKHQse2FwcGx5U25hcHNob3Q6YXN5bmModCxuKT0+e2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0JiYhdD8ud2luZG93cyl0aHJvdyBuZXcgRXJyb3IoXCJOb3QgYSB2YWxpZCBicm93c2VyIHNuYXBzaG90XCIpO3JldHVybiBmaW4uUGxhdGZvcm0ud3JhcFN5bmMoZSkuYXBwbHlTbmFwc2hvdCh0LG4pfSxnZXRTbmFwc2hvdDooKT0+ZmluLlBsYXRmb3JtLndyYXBTeW5jKGUpLmdldFNuYXBzaG90KCkudGhlbigoZT0+ZSkpLGdldFZpZXdTbmFwc2hvdDp0PT5maW4uUGxhdGZvcm0ud3JhcFN5bmMoZSkuZ2V0Vmlld1NuYXBzaG90KHQpLGNyZWF0ZVZpZXc6KHQsbixyKT0+ZmluLlBsYXRmb3JtLndyYXBTeW5jKGUpLmNyZWF0ZVZpZXcodCxuLHIpLGxhdW5jaEFwcDphc3luYyB0PT57Y29uc29sZS53YXJuKFwibGF1bmNoQXBwIG1ldGhvZCBpcyBkZXByZWNhdGVkLiBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgY3JlYXRlVmlldyAtIGh0dHBzOi8vZGV2ZWxvcGVycy5vcGVuZmluLmNvL29mLWRvY3MvZG9jcy9wbGF0Zm9ybS1nZXR0aW5nLXN0YXJ0ZWQjYWRkLWEtdmlldy10by1hbi1leGlzdGluZy13aW5kb3cgb3IgIGNyZWF0ZVdpbmRvdyAtIGh0dHBzOi8vZGV2ZWxvcGVycy5vcGVuZmluLmNvL29mLWRvY3MvZG9jcy9wbGF0Zm9ybS1nZXR0aW5nLXN0YXJ0ZWQjY3JlYXRlLWEtcGxhdGZvcm0td2luZG93IGluc3RlYWQuXCIpLHQudGFyZ2V0fHwodC50YXJnZXQ9e3V1aWQ6aixuYW1lOlIsZW50aXR5VHlwZTpJfHxcInVua25vd25cIn0pO3JldHVybihhd2FpdCBxZShlKSkuZGlzcGF0Y2goemUuTGF1bmNoQXBwLHQpfSxfaW52b2tlQ3VzdG9tQWN0aW9uOmFzeW5jKHQsbik9Pntjb25zdCByPWF3YWl0IHFlKGUpLG89e2FjdGlvbklkOnQscGF5bG9hZDp7Li4ubixjYWxsZXJUeXBlOm4uY2FsbGVyVHlwZXx8ay5BUEl9fTtyZXR1cm4gci5kaXNwYXRjaCh6ZS5JbnZva2VDdXN0b21BY3Rpb25JbnRlcm5hbCxvKX0sX3JlcXVlc3RRdWl0UGxhdGZvcm1EaWFsb2c6YXN5bmMgdD0+KGF3YWl0IHFlKGUpKS5kaXNwYXRjaCh6ZS5SZXF1ZXN0UXVpdFBsYXRmb3JtRGlhbG9nSW50ZXJuYWwsdCksZ2V0Q3VycmVudFdvcmtzcGFjZTphc3luYygpPT4oYXdhaXQgcWUoZSkpLmRpc3BhdGNoKHplLkdldEN1cnJlbnRXb3Jrc3BhY2Usdm9pZCAwKSxhcHBseVdvcmtzcGFjZTphc3luYyh0LG4pPT4oYXdhaXQgcWUoZSkpLmRpc3BhdGNoKHplLkFwcGx5V29ya3NwYWNlLHsuLi50LG9wdGlvbnM6bn0pLHNldEFjdGl2ZVdvcmtzcGFjZTphc3luYyB0PT4oYXdhaXQgcWUoZSkpLmRpc3BhdGNoKHplLlNldEFjdGl2ZVdvcmtzcGFjZSx0KSxnZXRMYW5ndWFnZTphc3luYygpPT4oYXdhaXQgcWUoZSkpLmRpc3BhdGNoKHplLkdldExhbmd1YWdlKSxfZ2V0TGFuZ3VhZ2VSZXNvdXJjZXM6YXN5bmMoKT0+KGF3YWl0IHFlKGUpKS5kaXNwYXRjaCh6ZS5HZXRMYW5ndWFnZVJlc291cmNlc0ludGVybmFsKSxzZXRMYW5ndWFnZTphc3luYyB0PT4oYXdhaXQgcWUoZSkpLmRpc3BhdGNoKHplLlNldExhbmd1YWdlLHQpLF9yYWlzZUFuYWx5dGljczphc3luYyB0PT57aWYobnx8KG49YXdhaXQgS2UoZSkpLFwib2JqZWN0XCI9PXR5cGVvZiBuJiZuPy5hbmFseXRpY3M/LmlzU3VwcG9ydGVkKXtyZXR1cm4oYXdhaXQgcWUoZSkpLmRpc3BhdGNoKHplLkFuYWx5dGljcyx0KX1lLnV1aWR9LGdldE5vdGlmaWNhdGlvbnNDb25maWc6YXN5bmMoKT0+KGF3YWl0IHFlKGUpKS5kaXNwYXRjaCh6ZS5HZXROb3RpZmljYXRpb25zQ29uZmlnKSxfcmVmcmVzaEJvb2ttYXJrc0ludGVybmFsOmFzeW5jKCk9Pihhd2FpdCBxZShlKSkuZGlzcGF0Y2goemUuUmVmcmVzaEJvb2ttYXJrc0ludGVybmFsKSxUaGVtZTpndChlKSxCcm93c2VyOmN0KGUpLFN0b3JhZ2U6dXQoZSl9KX0sTHQ9KCk9Pk10KGZpbi5tZS5pZGVudGl0eSksX3Q9e2NvbnRleHRNZW51T3B0aW9uczp7ZW5hYmxlZDohMCx0ZW1wbGF0ZTpbXCJzcGVsbENoZWNrXCIsXCJzZXBhcmF0b3JcIixcInByaW50XCIsXCJzZXBhcmF0b3JcIixcImN1dFwiLFwiY29weVwiLFwicGFzdGVcIixcInVuZG9cIixcInJlZG9cIixcInNlbGVjdEFsbFwiLFwiaW5zcGVjdFwiLFwicmVsb2FkXCJdfSxkb3dubG9hZFNoZWxmOntlbmFibGVkOiEwfX07ZnVuY3Rpb24gUHQoZSx0KXtyZXR1cm4gT2Uoe30sX3QsdCxlKX1jb25zdCBFdD1cImludGVybmFsLWdlbmVyYXRlZC12aWV3LVwiLGp0PShlLHQpPT5lLmNvbnRlbnQ/ey4uLmUsY29udGVudDplLmNvbnRlbnQubWFwKChlPT5qdChlLHQpKSl9OnsuLi5lLGNvbXBvbmVudFN0YXRlOnQoZS5jb21wb25lbnRTdGF0ZSl9LFJ0PShlLHQpPT57cmV0dXJuIG49UHQoZSx0KSx7Li4ubixuYW1lOm4ubmFtZT9uLm5hbWU6YGludGVybmFsLWdlbmVyYXRlZC12aWV3LSR7SGUoKX1gLF9pbnRlcm5hbFdvcmtzcGFjZURhdGE6ey4uLm4uX2ludGVybmFsV29ya3NwYWNlRGF0YSx2aWV3SWRlbnRpZmllcjpuLl9pbnRlcm5hbFdvcmtzcGFjZURhdGE/LnZpZXdJZGVudGlmaWVyfHxIZSgpfX07dmFyIG59LEl0PWU9Pih7Li4uZSxuYW1lOnZvaWQgMH0pLFZ0PWU9Pntjb25zdCB0PXsuLi5lfTtyZXR1cm4ganQodCxJdCl9LEh0PWU9Pntjb25zdCB0PXsuLi5lfTtyZXR1cm4ganQodCwoZT0+ZS5uYW1lJiZlLm5hbWUuc3RhcnRzV2l0aChFdCk/SXQoZSk6ZSkpfSxBdD1lPT57Y29uc3QgdD1bXTtyZXR1cm4oZSYmQXJyYXkuaXNBcnJheShlKT9lOltdKS5mb3JFYWNoKChlPT57aWYoXCJjb21wb25lbnRcIj09PWUudHlwZSlyZXR1cm4gdC5wdXNoKGUuY29tcG9uZW50U3RhdGUpO2NvbnN0IG49QXQoZS5jb250ZW50KTt0LnB1c2goLi4ubil9KSksdH07bmV3IE1hcCxuZXcgTWFwO2NvbnN0IFR0PShlLHQpPT57Y29uc3Qgbj1BdCh0LmNvbnRlbnQpO3JldHVybnsuLi5qdChlLChlPT57Y29uc3QgdD1uLmZpbmQoKHQ9PnQuX2ludGVybmFsV29ya3NwYWNlRGF0YT8udmlld0lkZW50aWZpZXI9PT1lLl9pbnRlcm5hbFdvcmtzcGFjZURhdGE/LnZpZXdJZGVudGlmaWVyKSkscj10P3QuaXNDbG9zYWJsZTplLmlzQ2xvc2FibGU7cmV0dXJuey4uLmUsaXNDbG9zYWJsZTpyfX0pKSxzZXR0aW5nczp0LnNldHRpbmdzfX0sRHQ9ZT0+ZT9BdChlKS5sZW5ndGg6MDtfZSgpKChhc3luYyBlPT57dHJ5e2NvbnN0IHQ9YXdhaXQoYXN5bmMgZT0+ZmluLlBsYXRmb3JtLkxheW91dC53cmFwU3luYyh7Li4uZmluLm1lLmlkZW50aXR5LGxheW91dE5hbWU6ZX0pLmdldENvbmZpZygpKShlLmxheW91dENvbnRhaW5lcktleSksbj10LmNvbnRlbnQ/QXQodC5jb250ZW50KTpbXSxyPW4ubGVuZ3RoO3I+MT8oZT0+e1wibXVsdGlWaWV3XCIhPT1lLmF0dGFjaGVkUGFnZVR5cGUmJkx0KCkuQnJvd3Nlci53cmFwU3luYyhuZSkudXBkYXRlUGFnZSh7cGFnZUlkOmUucGFnZUlkLHBhZ2U6e3NpbmdsZVZpZXdOYW1lOm51bGwsYXR0YWNoZWRQYWdlVHlwZTpcIm11bHRpVmlld1wifX0pfSkoZSk6MT09PXImJihhc3luYyhlLHQpPT57Y29uc3Qgbj1MdCgpLkJyb3dzZXIud3JhcFN5bmMobmUpO2lmKFwic2luZ2xlVmlld1wiIT09ZS5hdHRhY2hlZFBhZ2VUeXBlKXtjb25zdCByPWF3YWl0IFdlKGUpLG89YXdhaXQgTHQoKS5Ccm93c2VyLmdldFVuaXF1ZVBhZ2VUaXRsZSgpO2RlbGV0ZSByLmxheW91dDtjb25zdCBhPXsuLi5yLHNpbmdsZVZpZXdOYW1lOnQsdGl0bGU6byxoYXNVbnNhdmVkQ2hhbmdlczohMSxhdHRhY2hlZFBhZ2VUeXBlOlwic2luZ2xlVmlld1wifTthd2FpdCBuLnVwZGF0ZVBhZ2Uoe3BhZ2VJZDplLnBhZ2VJZCxwYWdlOmF9KX19KShlLG5bMF0ubmFtZSksYXdhaXQoYXN5bmMoZSx0KT0+e2NvbnN0IG49VWUoey4uLm5lLGxheW91dE5hbWU6ZS5sYXlvdXRDb250YWluZXJLZXl9KSxyPWF3YWl0IG4uaXNTaG93aW5nVGFicygpO3Q+MT9yfHxhd2FpdCBuLnNob3coKToxPT09dCYmciYmYXdhaXQgbi5oaWRlKHtzZXR0aW5nczp7cmVvcmRlckVuYWJsZWQ6ITB9fSl9KShlLHIpfWNhdGNoKGUpe319KSw1MCx7bGVhZGluZzohMSx0cmFpbGluZzohMH0pO24oMzYxKTtPYmplY3QuY3JlYXRlKG51bGwpO2NvbnN0IEJ0PS8mKD86YW1wfCMzOHxsdHwjNjB8Z3R8IzYyfGFwb3N8IzM5fHF1b3R8IzM0fG5ic3B8IzE2MHxjb3B5fCMxNjl8cmVnfCMxNzR8aGVsbGlwfCM4MjMwfCN4MkZ8IzQ3KTsvZyxadD17XCImYW1wO1wiOlwiJlwiLFwiJiMzODtcIjpcIiZcIixcIiZsdDtcIjpcIjxcIixcIiYjNjA7XCI6XCI8XCIsXCImZ3Q7XCI6XCI+XCIsXCImIzYyO1wiOlwiPlwiLFwiJmFwb3M7XCI6XCInXCIsXCImIzM5O1wiOlwiJ1wiLFwiJnF1b3Q7XCI6J1wiJyxcIiYjMzQ7XCI6J1wiJyxcIiZuYnNwO1wiOlwiIFwiLFwiJiMxNjA7XCI6XCIgXCIsXCImY29weTtcIjpcIsKpXCIsXCImIzE2OTtcIjpcIsKpXCIsXCImcmVnO1wiOlwiwq5cIixcIiYjMTc0O1wiOlwiwq5cIixcIiZoZWxsaXA7XCI6XCLigKZcIixcIiYjODIzMDtcIjpcIuKAplwiLFwiJiN4MkY7XCI6XCIvXCIsXCImIzQ3O1wiOlwiL1wifSwkdD1lPT5adFtlXTtsZXQgTnQsRnQ9e2JpbmRJMThuOlwibGFuZ3VhZ2VDaGFuZ2VkXCIsYmluZEkxOG5TdG9yZTpcIlwiLHRyYW5zRW1wdHlOb2RlVmFsdWU6XCJcIix0cmFuc1N1cHBvcnRCYXNpY0h0bWxOb2RlczohMCx0cmFuc1dyYXBUZXh0Tm9kZXM6XCJcIix0cmFuc0tlZXBCYXNpY0h0bWxOb2Rlc0ZvcjpbXCJiclwiLFwic3Ryb25nXCIsXCJpXCIsXCJwXCJdLHVzZVN1c3BlbnNlOiEwLHVuZXNjYXBlOmU9PmUucmVwbGFjZShCdCwkdCl9O2NvbnN0IFd0PXt0eXBlOlwiM3JkUGFydHlcIixpbml0KGUpeyFmdW5jdGlvbigpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtGdD17Li4uRnQsLi4uZX19KGUub3B0aW9ucy5yZWFjdCksZnVuY3Rpb24oZSl7TnQ9ZX0oZSl9fTsoMCxaLmNyZWF0ZUNvbnRleHQpKCk7Y29uc3QgVXQ9e3R5cGU6XCJsb2dnZXJcIixsb2coZSl7dGhpcy5vdXRwdXQoXCJsb2dcIixlKX0sd2FybihlKXt0aGlzLm91dHB1dChcIndhcm5cIixlKX0sZXJyb3IoZSl7dGhpcy5vdXRwdXQoXCJlcnJvclwiLGUpfSxvdXRwdXQoZSx0KXtjb25zb2xlJiZjb25zb2xlW2VdJiZjb25zb2xlW2VdLmFwcGx5KGNvbnNvbGUsdCl9fTtjbGFzcyB6dHtjb25zdHJ1Y3RvcihlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307dGhpcy5pbml0KGUsdCl9aW5pdChlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307dGhpcy5wcmVmaXg9dC5wcmVmaXh8fFwiaTE4bmV4dDpcIix0aGlzLmxvZ2dlcj1lfHxVdCx0aGlzLm9wdGlvbnM9dCx0aGlzLmRlYnVnPXQuZGVidWd9bG9nKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJuIHRoaXMuZm9yd2FyZCh0LFwibG9nXCIsXCJcIiwhMCl9d2Fybigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dO3JldHVybiB0aGlzLmZvcndhcmQodCxcIndhcm5cIixcIlwiLCEwKX1lcnJvcigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dO3JldHVybiB0aGlzLmZvcndhcmQodCxcImVycm9yXCIsXCJcIil9ZGVwcmVjYXRlKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJuIHRoaXMuZm9yd2FyZCh0LFwid2FyblwiLFwiV0FSTklORyBERVBSRUNBVEVEOiBcIiwhMCl9Zm9yd2FyZChlLHQsbixyKXtyZXR1cm4gciYmIXRoaXMuZGVidWc/bnVsbDooXCJzdHJpbmdcIj09dHlwZW9mIGVbMF0mJihlWzBdPWAke259JHt0aGlzLnByZWZpeH0gJHtlWzBdfWApLHRoaXMubG9nZ2VyW3RdKGUpKX1jcmVhdGUoZSl7cmV0dXJuIG5ldyB6dCh0aGlzLmxvZ2dlcix7cHJlZml4OmAke3RoaXMucHJlZml4fToke2V9OmAsLi4udGhpcy5vcHRpb25zfSl9Y2xvbmUoZSl7cmV0dXJuKGU9ZXx8dGhpcy5vcHRpb25zKS5wcmVmaXg9ZS5wcmVmaXh8fHRoaXMucHJlZml4LG5ldyB6dCh0aGlzLmxvZ2dlcixlKX19dmFyIEd0PW5ldyB6dDtjbGFzcyBLdHtjb25zdHJ1Y3Rvcigpe3RoaXMub2JzZXJ2ZXJzPXt9fW9uKGUsdCl7cmV0dXJuIGUuc3BsaXQoXCIgXCIpLmZvckVhY2goKGU9Pnt0aGlzLm9ic2VydmVyc1tlXXx8KHRoaXMub2JzZXJ2ZXJzW2VdPW5ldyBNYXApO2NvbnN0IG49dGhpcy5vYnNlcnZlcnNbZV0uZ2V0KHQpfHwwO3RoaXMub2JzZXJ2ZXJzW2VdLnNldCh0LG4rMSl9KSksdGhpc31vZmYoZSx0KXt0aGlzLm9ic2VydmVyc1tlXSYmKHQ/dGhpcy5vYnNlcnZlcnNbZV0uZGVsZXRlKHQpOmRlbGV0ZSB0aGlzLm9ic2VydmVyc1tlXSl9ZW1pdChlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPW5ldyBBcnJheSh0PjE/dC0xOjApLHI9MTtyPHQ7cisrKW5bci0xXT1hcmd1bWVudHNbcl07aWYodGhpcy5vYnNlcnZlcnNbZV0pe0FycmF5LmZyb20odGhpcy5vYnNlcnZlcnNbZV0uZW50cmllcygpKS5mb3JFYWNoKChlPT57bGV0W3Qscl09ZTtmb3IobGV0IGU9MDtlPHI7ZSsrKXQoLi4ubil9KSl9aWYodGhpcy5vYnNlcnZlcnNbXCIqXCJdKXtBcnJheS5mcm9tKHRoaXMub2JzZXJ2ZXJzW1wiKlwiXS5lbnRyaWVzKCkpLmZvckVhY2goKHQ9PntsZXRbcixvXT10O2ZvcihsZXQgdD0wO3Q8bzt0Kyspci5hcHBseShyLFtlLC4uLm5dKX0pKX19fWZ1bmN0aW9uIHF0KCl7bGV0IGUsdDtjb25zdCBuPW5ldyBQcm9taXNlKCgobixyKT0+e2U9bix0PXJ9KSk7cmV0dXJuIG4ucmVzb2x2ZT1lLG4ucmVqZWN0PXQsbn1mdW5jdGlvbiBZdChlKXtyZXR1cm4gbnVsbD09ZT9cIlwiOlwiXCIrZX1jb25zdCBKdD0vIyMjL2c7ZnVuY3Rpb24gWHQoZSx0LG4pe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuaW5kZXhPZihcIiMjI1wiKT4tMT9lLnJlcGxhY2UoSnQsXCIuXCIpOmV9ZnVuY3Rpb24gbygpe3JldHVybiFlfHxcInN0cmluZ1wiPT10eXBlb2YgZX1jb25zdCBhPVwic3RyaW5nXCIhPXR5cGVvZiB0P3Q6dC5zcGxpdChcIi5cIik7bGV0IGk9MDtmb3IoO2k8YS5sZW5ndGgtMTspe2lmKG8oKSlyZXR1cm57fTtjb25zdCB0PXIoYVtpXSk7IWVbdF0mJm4mJihlW3RdPW5ldyBuKSxlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpP2VbdF06e30sKytpfXJldHVybiBvKCk/e306e29iajplLGs6cihhW2ldKX19ZnVuY3Rpb24gUXQoZSx0LG4pe2NvbnN0e29iajpyLGs6b309WHQoZSx0LE9iamVjdCk7aWYodm9pZCAwIT09cnx8MT09PXQubGVuZ3RoKXJldHVybiB2b2lkKHJbb109bik7bGV0IGE9dFt0Lmxlbmd0aC0xXSxpPXQuc2xpY2UoMCx0Lmxlbmd0aC0xKSxsPVh0KGUsaSxPYmplY3QpO2Zvcig7dm9pZCAwPT09bC5vYmomJmkubGVuZ3RoOylhPWAke2lbaS5sZW5ndGgtMV19LiR7YX1gLGk9aS5zbGljZSgwLGkubGVuZ3RoLTEpLGw9WHQoZSxpLE9iamVjdCksbCYmbC5vYmomJnZvaWQgMCE9PWwub2JqW2Ake2wua30uJHthfWBdJiYobC5vYmo9dm9pZCAwKTtsLm9ialtgJHtsLmt9LiR7YX1gXT1ufWZ1bmN0aW9uIGVuKGUsdCl7Y29uc3R7b2JqOm4sazpyfT1YdChlLHQpO2lmKG4pcmV0dXJuIG5bcl19ZnVuY3Rpb24gdG4oZSx0LG4pe2Zvcihjb25zdCByIGluIHQpXCJfX3Byb3RvX19cIiE9PXImJlwiY29uc3RydWN0b3JcIiE9PXImJihyIGluIGU/XCJzdHJpbmdcIj09dHlwZW9mIGVbcl18fGVbcl1pbnN0YW5jZW9mIFN0cmluZ3x8XCJzdHJpbmdcIj09dHlwZW9mIHRbcl18fHRbcl1pbnN0YW5jZW9mIFN0cmluZz9uJiYoZVtyXT10W3JdKTp0bihlW3JdLHRbcl0sbik6ZVtyXT10W3JdKTtyZXR1cm4gZX1mdW5jdGlvbiBubihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bXFwtXFxbXFxdXFwvXFx7XFx9XFwoXFwpXFwqXFwrXFw/XFwuXFxcXFxcXlxcJFxcfF0vZyxcIlxcXFwkJlwiKX12YXIgcm49e1wiJlwiOlwiJmFtcDtcIixcIjxcIjpcIiZsdDtcIixcIj5cIjpcIiZndDtcIiwnXCInOlwiJnF1b3Q7XCIsXCInXCI6XCImIzM5O1wiLFwiL1wiOlwiJiN4MkY7XCJ9O2Z1bmN0aW9uIG9uKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlP2UucmVwbGFjZSgvWyY8PlwiJ1xcL10vZywoZT0+cm5bZV0pKTplfWNvbnN0IGFuPVtcIiBcIixcIixcIixcIj9cIixcIiFcIixcIjtcIl0sbG49bmV3IGNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuY2FwYWNpdHk9ZSx0aGlzLnJlZ0V4cE1hcD1uZXcgTWFwLHRoaXMucmVnRXhwUXVldWU9W119Z2V0UmVnRXhwKGUpe2NvbnN0IHQ9dGhpcy5yZWdFeHBNYXAuZ2V0KGUpO2lmKHZvaWQgMCE9PXQpcmV0dXJuIHQ7Y29uc3Qgbj1uZXcgUmVnRXhwKGUpO3JldHVybiB0aGlzLnJlZ0V4cFF1ZXVlLmxlbmd0aD09PXRoaXMuY2FwYWNpdHkmJnRoaXMucmVnRXhwTWFwLmRlbGV0ZSh0aGlzLnJlZ0V4cFF1ZXVlLnNoaWZ0KCkpLHRoaXMucmVnRXhwTWFwLnNldChlLG4pLHRoaXMucmVnRXhwUXVldWUucHVzaChlKSxufX0oMjApO2Z1bmN0aW9uIHNuKGUsdCl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOlwiLlwiO2lmKCFlKXJldHVybjtpZihlW3RdKXJldHVybiBlW3RdO2NvbnN0IHI9dC5zcGxpdChuKTtsZXQgbz1lO2ZvcihsZXQgZT0wO2U8ci5sZW5ndGg7KXtpZighb3x8XCJvYmplY3RcIiE9dHlwZW9mIG8pcmV0dXJuO2xldCB0LGE9XCJcIjtmb3IobGV0IGk9ZTtpPHIubGVuZ3RoOysraSlpZihpIT09ZSYmKGErPW4pLGErPXJbaV0sdD1vW2FdLHZvaWQgMCE9PXQpe2lmKFtcInN0cmluZ1wiLFwibnVtYmVyXCIsXCJib29sZWFuXCJdLmluZGV4T2YodHlwZW9mIHQpPi0xJiZpPHIubGVuZ3RoLTEpY29udGludWU7ZSs9aS1lKzE7YnJlYWt9bz10fXJldHVybiBvfWZ1bmN0aW9uIGNuKGUpe3JldHVybiBlJiZlLmluZGV4T2YoXCJfXCIpPjA/ZS5yZXBsYWNlKFwiX1wiLFwiLVwiKTplfWNsYXNzIHVuIGV4dGVuZHMgS3R7Y29uc3RydWN0b3IoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOntuczpbXCJ0cmFuc2xhdGlvblwiXSxkZWZhdWx0TlM6XCJ0cmFuc2xhdGlvblwifTtzdXBlcigpLHRoaXMuZGF0YT1lfHx7fSx0aGlzLm9wdGlvbnM9dCx2b2lkIDA9PT10aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yJiYodGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcj1cIi5cIiksdm9pZCAwPT09dGhpcy5vcHRpb25zLmlnbm9yZUpTT05TdHJ1Y3R1cmUmJih0aGlzLm9wdGlvbnMuaWdub3JlSlNPTlN0cnVjdHVyZT0hMCl9YWRkTmFtZXNwYWNlcyhlKXt0aGlzLm9wdGlvbnMubnMuaW5kZXhPZihlKTwwJiZ0aGlzLm9wdGlvbnMubnMucHVzaChlKX1yZW1vdmVOYW1lc3BhY2VzKGUpe2NvbnN0IHQ9dGhpcy5vcHRpb25zLm5zLmluZGV4T2YoZSk7dD4tMSYmdGhpcy5vcHRpb25zLm5zLnNwbGljZSh0LDEpfWdldFJlc291cmNlKGUsdCxuKXtsZXQgcj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106e307Y29uc3Qgbz12b2lkIDAhPT1yLmtleVNlcGFyYXRvcj9yLmtleVNlcGFyYXRvcjp0aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yLGE9dm9pZCAwIT09ci5pZ25vcmVKU09OU3RydWN0dXJlP3IuaWdub3JlSlNPTlN0cnVjdHVyZTp0aGlzLm9wdGlvbnMuaWdub3JlSlNPTlN0cnVjdHVyZTtsZXQgaTtlLmluZGV4T2YoXCIuXCIpPi0xP2k9ZS5zcGxpdChcIi5cIik6KGk9W2UsdF0sbiYmKEFycmF5LmlzQXJyYXkobik/aS5wdXNoKC4uLm4pOlwic3RyaW5nXCI9PXR5cGVvZiBuJiZvP2kucHVzaCguLi5uLnNwbGl0KG8pKTppLnB1c2gobikpKTtjb25zdCBsPWVuKHRoaXMuZGF0YSxpKTtyZXR1cm4hbCYmIXQmJiFuJiZlLmluZGV4T2YoXCIuXCIpPi0xJiYoZT1pWzBdLHQ9aVsxXSxuPWkuc2xpY2UoMikuam9pbihcIi5cIikpLGx8fCFhfHxcInN0cmluZ1wiIT10eXBlb2Ygbj9sOnNuKHRoaXMuZGF0YSYmdGhpcy5kYXRhW2VdJiZ0aGlzLmRhdGFbZV1bdF0sbixvKX1hZGRSZXNvdXJjZShlLHQsbixyKXtsZXQgbz1hcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XT9hcmd1bWVudHNbNF06e3NpbGVudDohMX07Y29uc3QgYT12b2lkIDAhPT1vLmtleVNlcGFyYXRvcj9vLmtleVNlcGFyYXRvcjp0aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yO2xldCBpPVtlLHRdO24mJihpPWkuY29uY2F0KGE/bi5zcGxpdChhKTpuKSksZS5pbmRleE9mKFwiLlwiKT4tMSYmKGk9ZS5zcGxpdChcIi5cIikscj10LHQ9aVsxXSksdGhpcy5hZGROYW1lc3BhY2VzKHQpLFF0KHRoaXMuZGF0YSxpLHIpLG8uc2lsZW50fHx0aGlzLmVtaXQoXCJhZGRlZFwiLGUsdCxuLHIpfWFkZFJlc291cmNlcyhlLHQsbil7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOntzaWxlbnQ6ITF9O2Zvcihjb25zdCByIGluIG4pXCJzdHJpbmdcIiE9dHlwZW9mIG5bcl0mJlwiW29iamVjdCBBcnJheV1cIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuYXBwbHkobltyXSl8fHRoaXMuYWRkUmVzb3VyY2UoZSx0LHIsbltyXSx7c2lsZW50OiEwfSk7ci5zaWxlbnR8fHRoaXMuZW1pdChcImFkZGVkXCIsZSx0LG4pfWFkZFJlc291cmNlQnVuZGxlKGUsdCxuLHIsbyl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD41JiZ2b2lkIDAhPT1hcmd1bWVudHNbNV0/YXJndW1lbnRzWzVdOntzaWxlbnQ6ITF9LGk9W2UsdF07ZS5pbmRleE9mKFwiLlwiKT4tMSYmKGk9ZS5zcGxpdChcIi5cIikscj1uLG49dCx0PWlbMV0pLHRoaXMuYWRkTmFtZXNwYWNlcyh0KTtsZXQgbD1lbih0aGlzLmRhdGEsaSl8fHt9O3I/dG4obCxuLG8pOmw9ey4uLmwsLi4ubn0sUXQodGhpcy5kYXRhLGksbCksYS5zaWxlbnR8fHRoaXMuZW1pdChcImFkZGVkXCIsZSx0LG4pfXJlbW92ZVJlc291cmNlQnVuZGxlKGUsdCl7dGhpcy5oYXNSZXNvdXJjZUJ1bmRsZShlLHQpJiZkZWxldGUgdGhpcy5kYXRhW2VdW3RdLHRoaXMucmVtb3ZlTmFtZXNwYWNlcyh0KSx0aGlzLmVtaXQoXCJyZW1vdmVkXCIsZSx0KX1oYXNSZXNvdXJjZUJ1bmRsZShlLHQpe3JldHVybiB2b2lkIDAhPT10aGlzLmdldFJlc291cmNlKGUsdCl9Z2V0UmVzb3VyY2VCdW5kbGUoZSx0KXtyZXR1cm4gdHx8KHQ9dGhpcy5vcHRpb25zLmRlZmF1bHROUyksXCJ2MVwiPT09dGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlBUEk/ey4uLnRoaXMuZ2V0UmVzb3VyY2UoZSx0KX06dGhpcy5nZXRSZXNvdXJjZShlLHQpfWdldERhdGFCeUxhbmd1YWdlKGUpe3JldHVybiB0aGlzLmRhdGFbZV19aGFzTGFuZ3VhZ2VTb21lVHJhbnNsYXRpb25zKGUpe2NvbnN0IHQ9dGhpcy5nZXREYXRhQnlMYW5ndWFnZShlKTtyZXR1cm4hISh0JiZPYmplY3Qua2V5cyh0KXx8W10pLmZpbmQoKGU9PnRbZV0mJk9iamVjdC5rZXlzKHRbZV0pLmxlbmd0aD4wKSl9dG9KU09OKCl7cmV0dXJuIHRoaXMuZGF0YX19dmFyIGRuPXtwcm9jZXNzb3JzOnt9LGFkZFBvc3RQcm9jZXNzb3IoZSl7dGhpcy5wcm9jZXNzb3JzW2UubmFtZV09ZX0saGFuZGxlKGUsdCxuLHIsbyl7cmV0dXJuIGUuZm9yRWFjaCgoZT0+e3RoaXMucHJvY2Vzc29yc1tlXSYmKHQ9dGhpcy5wcm9jZXNzb3JzW2VdLnByb2Nlc3ModCxuLHIsbykpfSkpLHR9fTtjb25zdCBwbj17fTtjbGFzcyBmbiBleHRlbmRzIEt0e2NvbnN0cnVjdG9yKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtzdXBlcigpLGZ1bmN0aW9uKGUsdCxuKXtlLmZvckVhY2goKGU9Pnt0W2VdJiYobltlXT10W2VdKX0pKX0oW1wicmVzb3VyY2VTdG9yZVwiLFwibGFuZ3VhZ2VVdGlsc1wiLFwicGx1cmFsUmVzb2x2ZXJcIixcImludGVycG9sYXRvclwiLFwiYmFja2VuZENvbm5lY3RvclwiLFwiaTE4bkZvcm1hdFwiLFwidXRpbHNcIl0sZSx0aGlzKSx0aGlzLm9wdGlvbnM9dCx2b2lkIDA9PT10aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yJiYodGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcj1cIi5cIiksdGhpcy5sb2dnZXI9R3QuY3JlYXRlKFwidHJhbnNsYXRvclwiKX1jaGFuZ2VMYW5ndWFnZShlKXtlJiYodGhpcy5sYW5ndWFnZT1lKX1leGlzdHMoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOntpbnRlcnBvbGF0aW9uOnt9fTtpZihudWxsPT1lKXJldHVybiExO2NvbnN0IG49dGhpcy5yZXNvbHZlKGUsdCk7cmV0dXJuIG4mJnZvaWQgMCE9PW4ucmVzfWV4dHJhY3RGcm9tS2V5KGUsdCl7bGV0IG49dm9pZCAwIT09dC5uc1NlcGFyYXRvcj90Lm5zU2VwYXJhdG9yOnRoaXMub3B0aW9ucy5uc1NlcGFyYXRvcjt2b2lkIDA9PT1uJiYobj1cIjpcIik7Y29uc3Qgcj12b2lkIDAhPT10LmtleVNlcGFyYXRvcj90LmtleVNlcGFyYXRvcjp0aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yO2xldCBvPXQubnN8fHRoaXMub3B0aW9ucy5kZWZhdWx0TlN8fFtdO2NvbnN0IGE9biYmZS5pbmRleE9mKG4pPi0xLGk9ISh0aGlzLm9wdGlvbnMudXNlckRlZmluZWRLZXlTZXBhcmF0b3J8fHQua2V5U2VwYXJhdG9yfHx0aGlzLm9wdGlvbnMudXNlckRlZmluZWROc1NlcGFyYXRvcnx8dC5uc1NlcGFyYXRvcnx8ZnVuY3Rpb24oZSx0LG4pe3Q9dHx8XCJcIixuPW58fFwiXCI7Y29uc3Qgcj1hbi5maWx0ZXIoKGU9PnQuaW5kZXhPZihlKTwwJiZuLmluZGV4T2YoZSk8MCkpO2lmKDA9PT1yLmxlbmd0aClyZXR1cm4hMDtjb25zdCBvPWxuLmdldFJlZ0V4cChgKCR7ci5tYXAoKGU9PlwiP1wiPT09ZT9cIlxcXFw/XCI6ZSkpLmpvaW4oXCJ8XCIpfSlgKTtsZXQgYT0hby50ZXN0KGUpO2lmKCFhKXtjb25zdCB0PWUuaW5kZXhPZihuKTt0PjAmJiFvLnRlc3QoZS5zdWJzdHJpbmcoMCx0KSkmJihhPSEwKX1yZXR1cm4gYX0oZSxuLHIpKTtpZihhJiYhaSl7Y29uc3QgdD1lLm1hdGNoKHRoaXMuaW50ZXJwb2xhdG9yLm5lc3RpbmdSZWdleHApO2lmKHQmJnQubGVuZ3RoPjApcmV0dXJue2tleTplLG5hbWVzcGFjZXM6b307Y29uc3QgYT1lLnNwbGl0KG4pOyhuIT09cnx8bj09PXImJnRoaXMub3B0aW9ucy5ucy5pbmRleE9mKGFbMF0pPi0xKSYmKG89YS5zaGlmdCgpKSxlPWEuam9pbihyKX1yZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgbyYmKG89W29dKSx7a2V5OmUsbmFtZXNwYWNlczpvfX10cmFuc2xhdGUoZSx0LG4pe2lmKFwib2JqZWN0XCIhPXR5cGVvZiB0JiZ0aGlzLm9wdGlvbnMub3ZlcmxvYWRUcmFuc2xhdGlvbk9wdGlvbkhhbmRsZXImJih0PXRoaXMub3B0aW9ucy5vdmVybG9hZFRyYW5zbGF0aW9uT3B0aW9uSGFuZGxlcihhcmd1bWVudHMpKSxcIm9iamVjdFwiPT10eXBlb2YgdCYmKHQ9ey4uLnR9KSx0fHwodD17fSksbnVsbD09ZSlyZXR1cm5cIlwiO0FycmF5LmlzQXJyYXkoZSl8fChlPVtTdHJpbmcoZSldKTtjb25zdCByPXZvaWQgMCE9PXQucmV0dXJuRGV0YWlscz90LnJldHVybkRldGFpbHM6dGhpcy5vcHRpb25zLnJldHVybkRldGFpbHMsbz12b2lkIDAhPT10LmtleVNlcGFyYXRvcj90LmtleVNlcGFyYXRvcjp0aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yLHtrZXk6YSxuYW1lc3BhY2VzOml9PXRoaXMuZXh0cmFjdEZyb21LZXkoZVtlLmxlbmd0aC0xXSx0KSxsPWlbaS5sZW5ndGgtMV0scz10LmxuZ3x8dGhpcy5sYW5ndWFnZSxjPXQuYXBwZW5kTmFtZXNwYWNlVG9DSU1vZGV8fHRoaXMub3B0aW9ucy5hcHBlbmROYW1lc3BhY2VUb0NJTW9kZTtpZihzJiZcImNpbW9kZVwiPT09cy50b0xvd2VyQ2FzZSgpKXtpZihjKXtjb25zdCBlPXQubnNTZXBhcmF0b3J8fHRoaXMub3B0aW9ucy5uc1NlcGFyYXRvcjtyZXR1cm4gcj97cmVzOmAke2x9JHtlfSR7YX1gLHVzZWRLZXk6YSxleGFjdFVzZWRLZXk6YSx1c2VkTG5nOnMsdXNlZE5TOmwsdXNlZFBhcmFtczp0aGlzLmdldFVzZWRQYXJhbXNEZXRhaWxzKHQpfTpgJHtsfSR7ZX0ke2F9YH1yZXR1cm4gcj97cmVzOmEsdXNlZEtleTphLGV4YWN0VXNlZEtleTphLHVzZWRMbmc6cyx1c2VkTlM6bCx1c2VkUGFyYW1zOnRoaXMuZ2V0VXNlZFBhcmFtc0RldGFpbHModCl9OmF9Y29uc3QgdT10aGlzLnJlc29sdmUoZSx0KTtsZXQgZD11JiZ1LnJlcztjb25zdCBwPXUmJnUudXNlZEtleXx8YSxmPXUmJnUuZXhhY3RVc2VkS2V5fHxhLGg9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseShkKSxnPXZvaWQgMCE9PXQuam9pbkFycmF5cz90LmpvaW5BcnJheXM6dGhpcy5vcHRpb25zLmpvaW5BcnJheXMsdj0hdGhpcy5pMThuRm9ybWF0fHx0aGlzLmkxOG5Gb3JtYXQuaGFuZGxlQXNPYmplY3Q7aWYodiYmZCYmKFwic3RyaW5nXCIhPXR5cGVvZiBkJiZcImJvb2xlYW5cIiE9dHlwZW9mIGQmJlwibnVtYmVyXCIhPXR5cGVvZiBkKSYmW1wiW29iamVjdCBOdW1iZXJdXCIsXCJbb2JqZWN0IEZ1bmN0aW9uXVwiLFwiW29iamVjdCBSZWdFeHBdXCJdLmluZGV4T2YoaCk8MCYmKFwic3RyaW5nXCIhPXR5cGVvZiBnfHxcIltvYmplY3QgQXJyYXldXCIhPT1oKSl7aWYoIXQucmV0dXJuT2JqZWN0cyYmIXRoaXMub3B0aW9ucy5yZXR1cm5PYmplY3RzKXt0aGlzLm9wdGlvbnMucmV0dXJuZWRPYmplY3RIYW5kbGVyfHx0aGlzLmxvZ2dlci53YXJuKFwiYWNjZXNzaW5nIGFuIG9iamVjdCAtIGJ1dCByZXR1cm5PYmplY3RzIG9wdGlvbnMgaXMgbm90IGVuYWJsZWQhXCIpO2NvbnN0IGU9dGhpcy5vcHRpb25zLnJldHVybmVkT2JqZWN0SGFuZGxlcj90aGlzLm9wdGlvbnMucmV0dXJuZWRPYmplY3RIYW5kbGVyKHAsZCx7Li4udCxuczppfSk6YGtleSAnJHthfSAoJHt0aGlzLmxhbmd1YWdlfSknIHJldHVybmVkIGFuIG9iamVjdCBpbnN0ZWFkIG9mIHN0cmluZy5gO3JldHVybiByPyh1LnJlcz1lLHUudXNlZFBhcmFtcz10aGlzLmdldFVzZWRQYXJhbXNEZXRhaWxzKHQpLHUpOmV9aWYobyl7Y29uc3QgZT1cIltvYmplY3QgQXJyYXldXCI9PT1oLG49ZT9bXTp7fSxyPWU/ZjpwO2Zvcihjb25zdCBlIGluIGQpaWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGQsZSkpe2NvbnN0IGE9YCR7cn0ke299JHtlfWA7bltlXT10aGlzLnRyYW5zbGF0ZShhLHsuLi50LGpvaW5BcnJheXM6ITEsbnM6aX0pLG5bZV09PT1hJiYobltlXT1kW2VdKX1kPW59fWVsc2UgaWYodiYmXCJzdHJpbmdcIj09dHlwZW9mIGcmJlwiW29iamVjdCBBcnJheV1cIj09PWgpZD1kLmpvaW4oZyksZCYmKGQ9dGhpcy5leHRlbmRUcmFuc2xhdGlvbihkLGUsdCxuKSk7ZWxzZXtsZXQgcj0hMSxpPSExO2NvbnN0IGM9dm9pZCAwIT09dC5jb3VudCYmXCJzdHJpbmdcIiE9dHlwZW9mIHQuY291bnQscD1mbi5oYXNEZWZhdWx0VmFsdWUodCksZj1jP3RoaXMucGx1cmFsUmVzb2x2ZXIuZ2V0U3VmZml4KHMsdC5jb3VudCx0KTpcIlwiLGg9dC5vcmRpbmFsJiZjP3RoaXMucGx1cmFsUmVzb2x2ZXIuZ2V0U3VmZml4KHMsdC5jb3VudCx7b3JkaW5hbDohMX0pOlwiXCIsZz1jJiYhdC5vcmRpbmFsJiYwPT09dC5jb3VudCYmdGhpcy5wbHVyYWxSZXNvbHZlci5zaG91bGRVc2VJbnRsQXBpKCksdj1nJiZ0W2BkZWZhdWx0VmFsdWUke3RoaXMub3B0aW9ucy5wbHVyYWxTZXBhcmF0b3J9emVyb2BdfHx0W2BkZWZhdWx0VmFsdWUke2Z9YF18fHRbYGRlZmF1bHRWYWx1ZSR7aH1gXXx8dC5kZWZhdWx0VmFsdWU7IXRoaXMuaXNWYWxpZExvb2t1cChkKSYmcCYmKHI9ITAsZD12KSx0aGlzLmlzVmFsaWRMb29rdXAoZCl8fChpPSEwLGQ9YSk7Y29uc3QgQz0odC5taXNzaW5nS2V5Tm9WYWx1ZUZhbGxiYWNrVG9LZXl8fHRoaXMub3B0aW9ucy5taXNzaW5nS2V5Tm9WYWx1ZUZhbGxiYWNrVG9LZXkpJiZpP3ZvaWQgMDpkLG09cCYmdiE9PWQmJnRoaXMub3B0aW9ucy51cGRhdGVNaXNzaW5nO2lmKGl8fHJ8fG0pe2lmKHRoaXMubG9nZ2VyLmxvZyhtP1widXBkYXRlS2V5XCI6XCJtaXNzaW5nS2V5XCIscyxsLGEsbT92OmQpLG8pe2NvbnN0IGU9dGhpcy5yZXNvbHZlKGEsey4uLnQsa2V5U2VwYXJhdG9yOiExfSk7ZSYmZS5yZXMmJnRoaXMubG9nZ2VyLndhcm4oXCJTZWVtcyB0aGUgbG9hZGVkIHRyYW5zbGF0aW9ucyB3ZXJlIGluIGZsYXQgSlNPTiBmb3JtYXQgaW5zdGVhZCBvZiBuZXN0ZWQuIEVpdGhlciBzZXQga2V5U2VwYXJhdG9yOiBmYWxzZSBvbiBpbml0IG9yIG1ha2Ugc3VyZSB5b3VyIHRyYW5zbGF0aW9ucyBhcmUgcHVibGlzaGVkIGluIG5lc3RlZCBmb3JtYXQuXCIpfWxldCBlPVtdO2NvbnN0IG49dGhpcy5sYW5ndWFnZVV0aWxzLmdldEZhbGxiYWNrQ29kZXModGhpcy5vcHRpb25zLmZhbGxiYWNrTG5nLHQubG5nfHx0aGlzLmxhbmd1YWdlKTtpZihcImZhbGxiYWNrXCI9PT10aGlzLm9wdGlvbnMuc2F2ZU1pc3NpbmdUbyYmbiYmblswXSlmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKyllLnB1c2goblt0XSk7ZWxzZVwiYWxsXCI9PT10aGlzLm9wdGlvbnMuc2F2ZU1pc3NpbmdUbz9lPXRoaXMubGFuZ3VhZ2VVdGlscy50b1Jlc29sdmVIaWVyYXJjaHkodC5sbmd8fHRoaXMubGFuZ3VhZ2UpOmUucHVzaCh0LmxuZ3x8dGhpcy5sYW5ndWFnZSk7Y29uc3Qgcj0oZSxuLHIpPT57Y29uc3Qgbz1wJiZyIT09ZD9yOkM7dGhpcy5vcHRpb25zLm1pc3NpbmdLZXlIYW5kbGVyP3RoaXMub3B0aW9ucy5taXNzaW5nS2V5SGFuZGxlcihlLGwsbixvLG0sdCk6dGhpcy5iYWNrZW5kQ29ubmVjdG9yJiZ0aGlzLmJhY2tlbmRDb25uZWN0b3Iuc2F2ZU1pc3NpbmcmJnRoaXMuYmFja2VuZENvbm5lY3Rvci5zYXZlTWlzc2luZyhlLGwsbixvLG0sdCksdGhpcy5lbWl0KFwibWlzc2luZ0tleVwiLGUsbCxuLGQpfTt0aGlzLm9wdGlvbnMuc2F2ZU1pc3NpbmcmJih0aGlzLm9wdGlvbnMuc2F2ZU1pc3NpbmdQbHVyYWxzJiZjP2UuZm9yRWFjaCgoZT0+e2NvbnN0IG49dGhpcy5wbHVyYWxSZXNvbHZlci5nZXRTdWZmaXhlcyhlLHQpO2cmJnRbYGRlZmF1bHRWYWx1ZSR7dGhpcy5vcHRpb25zLnBsdXJhbFNlcGFyYXRvcn16ZXJvYF0mJm4uaW5kZXhPZihgJHt0aGlzLm9wdGlvbnMucGx1cmFsU2VwYXJhdG9yfXplcm9gKTwwJiZuLnB1c2goYCR7dGhpcy5vcHRpb25zLnBsdXJhbFNlcGFyYXRvcn16ZXJvYCksbi5mb3JFYWNoKChuPT57cihbZV0sYStuLHRbYGRlZmF1bHRWYWx1ZSR7bn1gXXx8dil9KSl9KSk6cihlLGEsdikpfWQ9dGhpcy5leHRlbmRUcmFuc2xhdGlvbihkLGUsdCx1LG4pLGkmJmQ9PT1hJiZ0aGlzLm9wdGlvbnMuYXBwZW5kTmFtZXNwYWNlVG9NaXNzaW5nS2V5JiYoZD1gJHtsfToke2F9YCksKGl8fHIpJiZ0aGlzLm9wdGlvbnMucGFyc2VNaXNzaW5nS2V5SGFuZGxlciYmKGQ9XCJ2MVwiIT09dGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlBUEk/dGhpcy5vcHRpb25zLnBhcnNlTWlzc2luZ0tleUhhbmRsZXIodGhpcy5vcHRpb25zLmFwcGVuZE5hbWVzcGFjZVRvTWlzc2luZ0tleT9gJHtsfToke2F9YDphLHI/ZDp2b2lkIDApOnRoaXMub3B0aW9ucy5wYXJzZU1pc3NpbmdLZXlIYW5kbGVyKGQpKX1yZXR1cm4gcj8odS5yZXM9ZCx1LnVzZWRQYXJhbXM9dGhpcy5nZXRVc2VkUGFyYW1zRGV0YWlscyh0KSx1KTpkfWV4dGVuZFRyYW5zbGF0aW9uKGUsdCxuLHIsbyl7dmFyIGE9dGhpcztpZih0aGlzLmkxOG5Gb3JtYXQmJnRoaXMuaTE4bkZvcm1hdC5wYXJzZSllPXRoaXMuaTE4bkZvcm1hdC5wYXJzZShlLHsuLi50aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5kZWZhdWx0VmFyaWFibGVzLC4uLm59LG4ubG5nfHx0aGlzLmxhbmd1YWdlfHxyLnVzZWRMbmcsci51c2VkTlMsci51c2VkS2V5LHtyZXNvbHZlZDpyfSk7ZWxzZSBpZighbi5za2lwSW50ZXJwb2xhdGlvbil7bi5pbnRlcnBvbGF0aW9uJiZ0aGlzLmludGVycG9sYXRvci5pbml0KHsuLi5uLGludGVycG9sYXRpb246ey4uLnRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLC4uLm4uaW50ZXJwb2xhdGlvbn19KTtjb25zdCBpPVwic3RyaW5nXCI9PXR5cGVvZiBlJiYobiYmbi5pbnRlcnBvbGF0aW9uJiZ2b2lkIDAhPT1uLmludGVycG9sYXRpb24uc2tpcE9uVmFyaWFibGVzP24uaW50ZXJwb2xhdGlvbi5za2lwT25WYXJpYWJsZXM6dGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uc2tpcE9uVmFyaWFibGVzKTtsZXQgbDtpZihpKXtjb25zdCB0PWUubWF0Y2godGhpcy5pbnRlcnBvbGF0b3IubmVzdGluZ1JlZ2V4cCk7bD10JiZ0Lmxlbmd0aH1sZXQgcz1uLnJlcGxhY2UmJlwic3RyaW5nXCIhPXR5cGVvZiBuLnJlcGxhY2U/bi5yZXBsYWNlOm47aWYodGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZGVmYXVsdFZhcmlhYmxlcyYmKHM9ey4uLnRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmRlZmF1bHRWYXJpYWJsZXMsLi4uc30pLGU9dGhpcy5pbnRlcnBvbGF0b3IuaW50ZXJwb2xhdGUoZSxzLG4ubG5nfHx0aGlzLmxhbmd1YWdlLG4pLGkpe2NvbnN0IHQ9ZS5tYXRjaCh0aGlzLmludGVycG9sYXRvci5uZXN0aW5nUmVnZXhwKTtsPCh0JiZ0Lmxlbmd0aCkmJihuLm5lc3Q9ITEpfSFuLmxuZyYmXCJ2MVwiIT09dGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlBUEkmJnImJnIucmVzJiYobi5sbmc9ci51c2VkTG5nKSwhMSE9PW4ubmVzdCYmKGU9dGhpcy5pbnRlcnBvbGF0b3IubmVzdChlLChmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7aSsrKXJbaV09YXJndW1lbnRzW2ldO3JldHVybiBvJiZvWzBdPT09clswXSYmIW4uY29udGV4dD8oYS5sb2dnZXIud2FybihgSXQgc2VlbXMgeW91IGFyZSBuZXN0aW5nIHJlY3Vyc2l2ZWx5IGtleTogJHtyWzBdfSBpbiBrZXk6ICR7dFswXX1gKSxudWxsKTphLnRyYW5zbGF0ZSguLi5yLHQpfSksbikpLG4uaW50ZXJwb2xhdGlvbiYmdGhpcy5pbnRlcnBvbGF0b3IucmVzZXQoKX1jb25zdCBpPW4ucG9zdFByb2Nlc3N8fHRoaXMub3B0aW9ucy5wb3N0UHJvY2VzcyxsPVwic3RyaW5nXCI9PXR5cGVvZiBpP1tpXTppO3JldHVybiBudWxsIT1lJiZsJiZsLmxlbmd0aCYmITEhPT1uLmFwcGx5UG9zdFByb2Nlc3NvciYmKGU9ZG4uaGFuZGxlKGwsZSx0LHRoaXMub3B0aW9ucyYmdGhpcy5vcHRpb25zLnBvc3RQcm9jZXNzUGFzc1Jlc29sdmVkP3tpMThuUmVzb2x2ZWQ6ey4uLnIsdXNlZFBhcmFtczp0aGlzLmdldFVzZWRQYXJhbXNEZXRhaWxzKG4pfSwuLi5ufTpuLHRoaXMpKSxlfXJlc29sdmUoZSl7bGV0IHQsbixyLG8sYSxpPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9W2VdKSxlLmZvckVhY2goKGU9PntpZih0aGlzLmlzVmFsaWRMb29rdXAodCkpcmV0dXJuO2NvbnN0IGw9dGhpcy5leHRyYWN0RnJvbUtleShlLGkpLHM9bC5rZXk7bj1zO2xldCBjPWwubmFtZXNwYWNlczt0aGlzLm9wdGlvbnMuZmFsbGJhY2tOUyYmKGM9Yy5jb25jYXQodGhpcy5vcHRpb25zLmZhbGxiYWNrTlMpKTtjb25zdCB1PXZvaWQgMCE9PWkuY291bnQmJlwic3RyaW5nXCIhPXR5cGVvZiBpLmNvdW50LGQ9dSYmIWkub3JkaW5hbCYmMD09PWkuY291bnQmJnRoaXMucGx1cmFsUmVzb2x2ZXIuc2hvdWxkVXNlSW50bEFwaSgpLHA9dm9pZCAwIT09aS5jb250ZXh0JiYoXCJzdHJpbmdcIj09dHlwZW9mIGkuY29udGV4dHx8XCJudW1iZXJcIj09dHlwZW9mIGkuY29udGV4dCkmJlwiXCIhPT1pLmNvbnRleHQsZj1pLmxuZ3M/aS5sbmdzOnRoaXMubGFuZ3VhZ2VVdGlscy50b1Jlc29sdmVIaWVyYXJjaHkoaS5sbmd8fHRoaXMubGFuZ3VhZ2UsaS5mYWxsYmFja0xuZyk7Yy5mb3JFYWNoKChlPT57dGhpcy5pc1ZhbGlkTG9va3VwKHQpfHwoYT1lLCFwbltgJHtmWzBdfS0ke2V9YF0mJnRoaXMudXRpbHMmJnRoaXMudXRpbHMuaGFzTG9hZGVkTmFtZXNwYWNlJiYhdGhpcy51dGlscy5oYXNMb2FkZWROYW1lc3BhY2UoYSkmJihwbltgJHtmWzBdfS0ke2V9YF09ITAsdGhpcy5sb2dnZXIud2Fybihga2V5IFwiJHtufVwiIGZvciBsYW5ndWFnZXMgXCIke2Yuam9pbihcIiwgXCIpfVwiIHdvbid0IGdldCByZXNvbHZlZCBhcyBuYW1lc3BhY2UgXCIke2F9XCIgd2FzIG5vdCB5ZXQgbG9hZGVkYCxcIlRoaXMgbWVhbnMgc29tZXRoaW5nIElTIFdST05HIGluIHlvdXIgc2V0dXAuIFlvdSBhY2Nlc3MgdGhlIHQgZnVuY3Rpb24gYmVmb3JlIGkxOG5leHQuaW5pdCAvIGkxOG5leHQubG9hZE5hbWVzcGFjZSAvIGkxOG5leHQuY2hhbmdlTGFuZ3VhZ2Ugd2FzIGRvbmUuIFdhaXQgZm9yIHRoZSBjYWxsYmFjayBvciBQcm9taXNlIHRvIHJlc29sdmUgYmVmb3JlIGFjY2Vzc2luZyBpdCEhIVwiKSksZi5mb3JFYWNoKChuPT57aWYodGhpcy5pc1ZhbGlkTG9va3VwKHQpKXJldHVybjtvPW47Y29uc3QgYT1bc107aWYodGhpcy5pMThuRm9ybWF0JiZ0aGlzLmkxOG5Gb3JtYXQuYWRkTG9va3VwS2V5cyl0aGlzLmkxOG5Gb3JtYXQuYWRkTG9va3VwS2V5cyhhLHMsbixlLGkpO2Vsc2V7bGV0IGU7dSYmKGU9dGhpcy5wbHVyYWxSZXNvbHZlci5nZXRTdWZmaXgobixpLmNvdW50LGkpKTtjb25zdCB0PWAke3RoaXMub3B0aW9ucy5wbHVyYWxTZXBhcmF0b3J9emVyb2Ascj1gJHt0aGlzLm9wdGlvbnMucGx1cmFsU2VwYXJhdG9yfW9yZGluYWwke3RoaXMub3B0aW9ucy5wbHVyYWxTZXBhcmF0b3J9YDtpZih1JiYoYS5wdXNoKHMrZSksaS5vcmRpbmFsJiYwPT09ZS5pbmRleE9mKHIpJiZhLnB1c2gocytlLnJlcGxhY2Uocix0aGlzLm9wdGlvbnMucGx1cmFsU2VwYXJhdG9yKSksZCYmYS5wdXNoKHMrdCkpLHApe2NvbnN0IG49YCR7c30ke3RoaXMub3B0aW9ucy5jb250ZXh0U2VwYXJhdG9yfSR7aS5jb250ZXh0fWA7YS5wdXNoKG4pLHUmJihhLnB1c2gobitlKSxpLm9yZGluYWwmJjA9PT1lLmluZGV4T2YocikmJmEucHVzaChuK2UucmVwbGFjZShyLHRoaXMub3B0aW9ucy5wbHVyYWxTZXBhcmF0b3IpKSxkJiZhLnB1c2gobit0KSl9fWxldCBsO2Zvcig7bD1hLnBvcCgpOyl0aGlzLmlzVmFsaWRMb29rdXAodCl8fChyPWwsdD10aGlzLmdldFJlc291cmNlKG4sZSxsLGkpKX0pKSl9KSl9KSkse3Jlczp0LHVzZWRLZXk6bixleGFjdFVzZWRLZXk6cix1c2VkTG5nOm8sdXNlZE5TOmF9fWlzVmFsaWRMb29rdXAoZSl7cmV0dXJuISh2b2lkIDA9PT1lfHwhdGhpcy5vcHRpb25zLnJldHVybk51bGwmJm51bGw9PT1lfHwhdGhpcy5vcHRpb25zLnJldHVybkVtcHR5U3RyaW5nJiZcIlwiPT09ZSl9Z2V0UmVzb3VyY2UoZSx0LG4pe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTp7fTtyZXR1cm4gdGhpcy5pMThuRm9ybWF0JiZ0aGlzLmkxOG5Gb3JtYXQuZ2V0UmVzb3VyY2U/dGhpcy5pMThuRm9ybWF0LmdldFJlc291cmNlKGUsdCxuLHIpOnRoaXMucmVzb3VyY2VTdG9yZS5nZXRSZXNvdXJjZShlLHQsbixyKX1nZXRVc2VkUGFyYW1zRGV0YWlscygpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtjb25zdCB0PVtcImRlZmF1bHRWYWx1ZVwiLFwib3JkaW5hbFwiLFwiY29udGV4dFwiLFwicmVwbGFjZVwiLFwibG5nXCIsXCJsbmdzXCIsXCJmYWxsYmFja0xuZ1wiLFwibnNcIixcImtleVNlcGFyYXRvclwiLFwibnNTZXBhcmF0b3JcIixcInJldHVybk9iamVjdHNcIixcInJldHVybkRldGFpbHNcIixcImpvaW5BcnJheXNcIixcInBvc3RQcm9jZXNzXCIsXCJpbnRlcnBvbGF0aW9uXCJdLG49ZS5yZXBsYWNlJiZcInN0cmluZ1wiIT10eXBlb2YgZS5yZXBsYWNlO2xldCByPW4/ZS5yZXBsYWNlOmU7aWYobiYmdm9pZCAwIT09ZS5jb3VudCYmKHIuY291bnQ9ZS5jb3VudCksdGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZGVmYXVsdFZhcmlhYmxlcyYmKHI9ey4uLnRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmRlZmF1bHRWYXJpYWJsZXMsLi4ucn0pLCFuKXtyPXsuLi5yfTtmb3IoY29uc3QgZSBvZiB0KWRlbGV0ZSByW2VdfXJldHVybiByfXN0YXRpYyBoYXNEZWZhdWx0VmFsdWUoZSl7Y29uc3QgdD1cImRlZmF1bHRWYWx1ZVwiO2Zvcihjb25zdCBuIGluIGUpaWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnQ9PT1uLnN1YnN0cmluZygwLDEyKSYmdm9pZCAwIT09ZVtuXSlyZXR1cm4hMDtyZXR1cm4hMX19ZnVuY3Rpb24gaG4oZSl7cmV0dXJuIGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKX1jbGFzcyBnbntjb25zdHJ1Y3RvcihlKXt0aGlzLm9wdGlvbnM9ZSx0aGlzLnN1cHBvcnRlZExuZ3M9dGhpcy5vcHRpb25zLnN1cHBvcnRlZExuZ3N8fCExLHRoaXMubG9nZ2VyPUd0LmNyZWF0ZShcImxhbmd1YWdlVXRpbHNcIil9Z2V0U2NyaXB0UGFydEZyb21Db2RlKGUpe2lmKCEoZT1jbihlKSl8fGUuaW5kZXhPZihcIi1cIik8MClyZXR1cm4gbnVsbDtjb25zdCB0PWUuc3BsaXQoXCItXCIpO3JldHVybiAyPT09dC5sZW5ndGg/bnVsbDoodC5wb3AoKSxcInhcIj09PXRbdC5sZW5ndGgtMV0udG9Mb3dlckNhc2UoKT9udWxsOnRoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKHQuam9pbihcIi1cIikpKX1nZXRMYW5ndWFnZVBhcnRGcm9tQ29kZShlKXtpZighKGU9Y24oZSkpfHxlLmluZGV4T2YoXCItXCIpPDApcmV0dXJuIGU7Y29uc3QgdD1lLnNwbGl0KFwiLVwiKTtyZXR1cm4gdGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUodFswXSl9Zm9ybWF0TGFuZ3VhZ2VDb2RlKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlJiZlLmluZGV4T2YoXCItXCIpPi0xKXtjb25zdCB0PVtcImhhbnNcIixcImhhbnRcIixcImxhdG5cIixcImN5cmxcIixcImNhbnNcIixcIm1vbmdcIixcImFyYWJcIl07bGV0IG49ZS5zcGxpdChcIi1cIik7cmV0dXJuIHRoaXMub3B0aW9ucy5sb3dlckNhc2VMbmc/bj1uLm1hcCgoZT0+ZS50b0xvd2VyQ2FzZSgpKSk6Mj09PW4ubGVuZ3RoPyhuWzBdPW5bMF0udG9Mb3dlckNhc2UoKSxuWzFdPW5bMV0udG9VcHBlckNhc2UoKSx0LmluZGV4T2YoblsxXS50b0xvd2VyQ2FzZSgpKT4tMSYmKG5bMV09aG4oblsxXS50b0xvd2VyQ2FzZSgpKSkpOjM9PT1uLmxlbmd0aCYmKG5bMF09blswXS50b0xvd2VyQ2FzZSgpLDI9PT1uWzFdLmxlbmd0aCYmKG5bMV09blsxXS50b1VwcGVyQ2FzZSgpKSxcInNnblwiIT09blswXSYmMj09PW5bMl0ubGVuZ3RoJiYoblsyXT1uWzJdLnRvVXBwZXJDYXNlKCkpLHQuaW5kZXhPZihuWzFdLnRvTG93ZXJDYXNlKCkpPi0xJiYoblsxXT1obihuWzFdLnRvTG93ZXJDYXNlKCkpKSx0LmluZGV4T2YoblsyXS50b0xvd2VyQ2FzZSgpKT4tMSYmKG5bMl09aG4oblsyXS50b0xvd2VyQ2FzZSgpKSkpLG4uam9pbihcIi1cIil9cmV0dXJuIHRoaXMub3B0aW9ucy5jbGVhbkNvZGV8fHRoaXMub3B0aW9ucy5sb3dlckNhc2VMbmc/ZS50b0xvd2VyQ2FzZSgpOmV9aXNTdXBwb3J0ZWRDb2RlKGUpe3JldHVybihcImxhbmd1YWdlT25seVwiPT09dGhpcy5vcHRpb25zLmxvYWR8fHRoaXMub3B0aW9ucy5ub25FeHBsaWNpdFN1cHBvcnRlZExuZ3MpJiYoZT10aGlzLmdldExhbmd1YWdlUGFydEZyb21Db2RlKGUpKSwhdGhpcy5zdXBwb3J0ZWRMbmdzfHwhdGhpcy5zdXBwb3J0ZWRMbmdzLmxlbmd0aHx8dGhpcy5zdXBwb3J0ZWRMbmdzLmluZGV4T2YoZSk+LTF9Z2V0QmVzdE1hdGNoRnJvbUNvZGVzKGUpe2lmKCFlKXJldHVybiBudWxsO2xldCB0O3JldHVybiBlLmZvckVhY2goKGU9PntpZih0KXJldHVybjtjb25zdCBuPXRoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKGUpO3RoaXMub3B0aW9ucy5zdXBwb3J0ZWRMbmdzJiYhdGhpcy5pc1N1cHBvcnRlZENvZGUobil8fCh0PW4pfSkpLCF0JiZ0aGlzLm9wdGlvbnMuc3VwcG9ydGVkTG5ncyYmZS5mb3JFYWNoKChlPT57aWYodClyZXR1cm47Y29uc3Qgbj10aGlzLmdldExhbmd1YWdlUGFydEZyb21Db2RlKGUpO2lmKHRoaXMuaXNTdXBwb3J0ZWRDb2RlKG4pKXJldHVybiB0PW47dD10aGlzLm9wdGlvbnMuc3VwcG9ydGVkTG5ncy5maW5kKChlPT5lPT09bj9lOmUuaW5kZXhPZihcIi1cIik8MCYmbi5pbmRleE9mKFwiLVwiKTwwP3ZvaWQgMDowPT09ZS5pbmRleE9mKG4pP2U6dm9pZCAwKSl9KSksdHx8KHQ9dGhpcy5nZXRGYWxsYmFja0NvZGVzKHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZylbMF0pLHR9Z2V0RmFsbGJhY2tDb2RlcyhlLHQpe2lmKCFlKXJldHVybltdO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJihlPWUodCkpLFwic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT1bZV0pLFwiW29iamVjdCBBcnJheV1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuYXBwbHkoZSkpcmV0dXJuIGU7aWYoIXQpcmV0dXJuIGUuZGVmYXVsdHx8W107bGV0IG49ZVt0XTtyZXR1cm4gbnx8KG49ZVt0aGlzLmdldFNjcmlwdFBhcnRGcm9tQ29kZSh0KV0pLG58fChuPWVbdGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUodCldKSxufHwobj1lW3RoaXMuZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUodCldKSxufHwobj1lLmRlZmF1bHQpLG58fFtdfXRvUmVzb2x2ZUhpZXJhcmNoeShlLHQpe2NvbnN0IG49dGhpcy5nZXRGYWxsYmFja0NvZGVzKHR8fHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZ3x8W10sZSkscj1bXSxvPWU9PntlJiYodGhpcy5pc1N1cHBvcnRlZENvZGUoZSk/ci5wdXNoKGUpOnRoaXMubG9nZ2VyLndhcm4oYHJlamVjdGluZyBsYW5ndWFnZSBjb2RlIG5vdCBmb3VuZCBpbiBzdXBwb3J0ZWRMbmdzOiAke2V9YCkpfTtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZSYmKGUuaW5kZXhPZihcIi1cIik+LTF8fGUuaW5kZXhPZihcIl9cIik+LTEpPyhcImxhbmd1YWdlT25seVwiIT09dGhpcy5vcHRpb25zLmxvYWQmJm8odGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUoZSkpLFwibGFuZ3VhZ2VPbmx5XCIhPT10aGlzLm9wdGlvbnMubG9hZCYmXCJjdXJyZW50T25seVwiIT09dGhpcy5vcHRpb25zLmxvYWQmJm8odGhpcy5nZXRTY3JpcHRQYXJ0RnJvbUNvZGUoZSkpLFwiY3VycmVudE9ubHlcIiE9PXRoaXMub3B0aW9ucy5sb2FkJiZvKHRoaXMuZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUoZSkpKTpcInN0cmluZ1wiPT10eXBlb2YgZSYmbyh0aGlzLmZvcm1hdExhbmd1YWdlQ29kZShlKSksbi5mb3JFYWNoKChlPT57ci5pbmRleE9mKGUpPDAmJm8odGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUoZSkpfSkpLHJ9fWxldCB2bj1be2xuZ3M6W1wiYWNoXCIsXCJha1wiLFwiYW1cIixcImFyblwiLFwiYnJcIixcImZpbFwiLFwiZ3VuXCIsXCJsblwiLFwibWZlXCIsXCJtZ1wiLFwibWlcIixcIm9jXCIsXCJwdFwiLFwicHQtQlJcIixcInRnXCIsXCJ0bFwiLFwidGlcIixcInRyXCIsXCJ1elwiLFwid2FcIl0sbnI6WzEsMl0sZmM6MX0se2xuZ3M6W1wiYWZcIixcImFuXCIsXCJhc3RcIixcImF6XCIsXCJiZ1wiLFwiYm5cIixcImNhXCIsXCJkYVwiLFwiZGVcIixcImRldlwiLFwiZWxcIixcImVuXCIsXCJlb1wiLFwiZXNcIixcImV0XCIsXCJldVwiLFwiZmlcIixcImZvXCIsXCJmdXJcIixcImZ5XCIsXCJnbFwiLFwiZ3VcIixcImhhXCIsXCJoaVwiLFwiaHVcIixcImh5XCIsXCJpYVwiLFwiaXRcIixcImtrXCIsXCJrblwiLFwia3VcIixcImxiXCIsXCJtYWlcIixcIm1sXCIsXCJtblwiLFwibXJcIixcIm5haFwiLFwibmFwXCIsXCJuYlwiLFwibmVcIixcIm5sXCIsXCJublwiLFwibm9cIixcIm5zb1wiLFwicGFcIixcInBhcFwiLFwicG1zXCIsXCJwc1wiLFwicHQtUFRcIixcInJtXCIsXCJzY29cIixcInNlXCIsXCJzaVwiLFwic29cIixcInNvblwiLFwic3FcIixcInN2XCIsXCJzd1wiLFwidGFcIixcInRlXCIsXCJ0a1wiLFwidXJcIixcInlvXCJdLG5yOlsxLDJdLGZjOjJ9LHtsbmdzOltcImF5XCIsXCJib1wiLFwiY2dnXCIsXCJmYVwiLFwiaHRcIixcImlkXCIsXCJqYVwiLFwiamJvXCIsXCJrYVwiLFwia21cIixcImtvXCIsXCJreVwiLFwibG9cIixcIm1zXCIsXCJzYWhcIixcInN1XCIsXCJ0aFwiLFwidHRcIixcInVnXCIsXCJ2aVwiLFwid29cIixcInpoXCJdLG5yOlsxXSxmYzozfSx7bG5nczpbXCJiZVwiLFwiYnNcIixcImNuclwiLFwiZHpcIixcImhyXCIsXCJydVwiLFwic3JcIixcInVrXCJdLG5yOlsxLDIsNV0sZmM6NH0se2xuZ3M6W1wiYXJcIl0sbnI6WzAsMSwyLDMsMTEsMTAwXSxmYzo1fSx7bG5nczpbXCJjc1wiLFwic2tcIl0sbnI6WzEsMiw1XSxmYzo2fSx7bG5nczpbXCJjc2JcIixcInBsXCJdLG5yOlsxLDIsNV0sZmM6N30se2xuZ3M6W1wiY3lcIl0sbnI6WzEsMiwzLDhdLGZjOjh9LHtsbmdzOltcImZyXCJdLG5yOlsxLDJdLGZjOjl9LHtsbmdzOltcImdhXCJdLG5yOlsxLDIsMyw3LDExXSxmYzoxMH0se2xuZ3M6W1wiZ2RcIl0sbnI6WzEsMiwzLDIwXSxmYzoxMX0se2xuZ3M6W1wiaXNcIl0sbnI6WzEsMl0sZmM6MTJ9LHtsbmdzOltcImp2XCJdLG5yOlswLDFdLGZjOjEzfSx7bG5nczpbXCJrd1wiXSxucjpbMSwyLDMsNF0sZmM6MTR9LHtsbmdzOltcImx0XCJdLG5yOlsxLDIsMTBdLGZjOjE1fSx7bG5nczpbXCJsdlwiXSxucjpbMSwyLDBdLGZjOjE2fSx7bG5nczpbXCJta1wiXSxucjpbMSwyXSxmYzoxN30se2xuZ3M6W1wibW5rXCJdLG5yOlswLDEsMl0sZmM6MTh9LHtsbmdzOltcIm10XCJdLG5yOlsxLDIsMTEsMjBdLGZjOjE5fSx7bG5nczpbXCJvclwiXSxucjpbMiwxXSxmYzoyfSx7bG5nczpbXCJyb1wiXSxucjpbMSwyLDIwXSxmYzoyMH0se2xuZ3M6W1wic2xcIl0sbnI6WzUsMSwyLDNdLGZjOjIxfSx7bG5nczpbXCJoZVwiLFwiaXdcIl0sbnI6WzEsMiwyMCwyMV0sZmM6MjJ9XSxDbj17MTpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKGU+MSl9LDI6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxIT1lKX0sMzpmdW5jdGlvbihlKXtyZXR1cm4gMH0sNDpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKGUlMTA9PTEmJmUlMTAwIT0xMT8wOmUlMTA+PTImJmUlMTA8PTQmJihlJTEwMDwxMHx8ZSUxMDA+PTIwKT8xOjIpfSw1OmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoMD09ZT8wOjE9PWU/MToyPT1lPzI6ZSUxMDA+PTMmJmUlMTAwPD0xMD8zOmUlMTAwPj0xMT80OjUpfSw2OmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoMT09ZT8wOmU+PTImJmU8PTQ/MToyKX0sNzpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDE9PWU/MDplJTEwPj0yJiZlJTEwPD00JiYoZSUxMDA8MTB8fGUlMTAwPj0yMCk/MToyKX0sODpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDE9PWU/MDoyPT1lPzE6OCE9ZSYmMTEhPWU/MjozKX0sOTpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKGU+PTIpfSwxMDpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDE9PWU/MDoyPT1lPzE6ZTw3PzI6ZTwxMT8zOjQpfSwxMTpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDE9PWV8fDExPT1lPzA6Mj09ZXx8MTI9PWU/MTplPjImJmU8MjA/MjozKX0sMTI6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcihlJTEwIT0xfHxlJTEwMD09MTEpfSwxMzpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDAhPT1lKX0sMTQ6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lPzA6Mj09ZT8xOjM9PWU/MjozKX0sMTU6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcihlJTEwPT0xJiZlJTEwMCE9MTE/MDplJTEwPj0yJiYoZSUxMDA8MTB8fGUlMTAwPj0yMCk/MToyKX0sMTY6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcihlJTEwPT0xJiZlJTEwMCE9MTE/MDowIT09ZT8xOjIpfSwxNzpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDE9PWV8fGUlMTA9PTEmJmUlMTAwIT0xMT8wOjEpfSwxODpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDA9PWU/MDoxPT1lPzE6Mil9LDE5OmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoMT09ZT8wOjA9PWV8fGUlMTAwPjEmJmUlMTAwPDExPzE6ZSUxMDA+MTAmJmUlMTAwPDIwPzI6Myl9LDIwOmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoMT09ZT8wOjA9PWV8fGUlMTAwPjAmJmUlMTAwPDIwPzE6Mil9LDIxOmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoZSUxMDA9PTE/MTplJTEwMD09Mj8yOmUlMTAwPT0zfHxlJTEwMD09ND8zOjApfSwyMjpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDE9PWU/MDoyPT1lPzE6KGU8MHx8ZT4xMCkmJmUlMTA9PTA/MjozKX19O2NvbnN0IG1uPVtcInYxXCIsXCJ2MlwiLFwidjNcIl0sd249W1widjRcIl0sYm49e3plcm86MCxvbmU6MSx0d286MixmZXc6MyxtYW55OjQsb3RoZXI6NX07Y2xhc3MgeW57Y29uc3RydWN0b3IoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O3RoaXMubGFuZ3VhZ2VVdGlscz1lLHRoaXMub3B0aW9ucz10LHRoaXMubG9nZ2VyPUd0LmNyZWF0ZShcInBsdXJhbFJlc29sdmVyXCIpLHRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTiYmIXduLmluY2x1ZGVzKHRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTil8fFwidW5kZWZpbmVkXCIhPXR5cGVvZiBJbnRsJiZJbnRsLlBsdXJhbFJ1bGVzfHwodGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlKU09OPVwidjNcIix0aGlzLmxvZ2dlci5lcnJvcihcIllvdXIgZW52aXJvbm1lbnQgc2VlbXMgbm90IHRvIGJlIEludGwgQVBJIGNvbXBhdGlibGUsIHVzZSBhbiBJbnRsLlBsdXJhbFJ1bGVzIHBvbHlmaWxsLiBXaWxsIGZhbGxiYWNrIHRvIHRoZSBjb21wYXRpYmlsaXR5SlNPTiB2MyBmb3JtYXQgaGFuZGxpbmcuXCIpKSx0aGlzLnJ1bGVzPWZ1bmN0aW9uKCl7Y29uc3QgZT17fTtyZXR1cm4gdm4uZm9yRWFjaCgodD0+e3QubG5ncy5mb3JFYWNoKChuPT57ZVtuXT17bnVtYmVyczp0Lm5yLHBsdXJhbHM6Q25bdC5mY119fSkpfSkpLGV9KCl9YWRkUnVsZShlLHQpe3RoaXMucnVsZXNbZV09dH1nZXRSdWxlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtpZih0aGlzLnNob3VsZFVzZUludGxBcGkoKSl0cnl7cmV0dXJuIG5ldyBJbnRsLlBsdXJhbFJ1bGVzKGNuKFwiZGV2XCI9PT1lP1wiZW5cIjplKSx7dHlwZTp0Lm9yZGluYWw/XCJvcmRpbmFsXCI6XCJjYXJkaW5hbFwifSl9Y2F0Y2goZSl7cmV0dXJufXJldHVybiB0aGlzLnJ1bGVzW2VdfHx0aGlzLnJ1bGVzW3RoaXMubGFuZ3VhZ2VVdGlscy5nZXRMYW5ndWFnZVBhcnRGcm9tQ29kZShlKV19bmVlZHNQbHVyYWwoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2NvbnN0IG49dGhpcy5nZXRSdWxlKGUsdCk7cmV0dXJuIHRoaXMuc2hvdWxkVXNlSW50bEFwaSgpP24mJm4ucmVzb2x2ZWRPcHRpb25zKCkucGx1cmFsQ2F0ZWdvcmllcy5sZW5ndGg+MTpuJiZuLm51bWJlcnMubGVuZ3RoPjF9Z2V0UGx1cmFsRm9ybXNPZktleShlLHQpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtyZXR1cm4gdGhpcy5nZXRTdWZmaXhlcyhlLG4pLm1hcCgoZT0+YCR7dH0ke2V9YCkpfWdldFN1ZmZpeGVzKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtjb25zdCBuPXRoaXMuZ2V0UnVsZShlLHQpO3JldHVybiBuP3RoaXMuc2hvdWxkVXNlSW50bEFwaSgpP24ucmVzb2x2ZWRPcHRpb25zKCkucGx1cmFsQ2F0ZWdvcmllcy5zb3J0KCgoZSx0KT0+Ym5bZV0tYm5bdF0pKS5tYXAoKGU9PmAke3RoaXMub3B0aW9ucy5wcmVwZW5kfSR7dC5vcmRpbmFsP2BvcmRpbmFsJHt0aGlzLm9wdGlvbnMucHJlcGVuZH1gOlwiXCJ9JHtlfWApKTpuLm51bWJlcnMubWFwKChuPT50aGlzLmdldFN1ZmZpeChlLG4sdCkpKTpbXX1nZXRTdWZmaXgoZSx0KXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307Y29uc3Qgcj10aGlzLmdldFJ1bGUoZSxuKTtyZXR1cm4gcj90aGlzLnNob3VsZFVzZUludGxBcGkoKT9gJHt0aGlzLm9wdGlvbnMucHJlcGVuZH0ke24ub3JkaW5hbD9gb3JkaW5hbCR7dGhpcy5vcHRpb25zLnByZXBlbmR9YDpcIlwifSR7ci5zZWxlY3QodCl9YDp0aGlzLmdldFN1ZmZpeFJldHJvQ29tcGF0aWJsZShyLHQpOih0aGlzLmxvZ2dlci53YXJuKGBubyBwbHVyYWwgcnVsZSBmb3VuZCBmb3I6ICR7ZX1gKSxcIlwiKX1nZXRTdWZmaXhSZXRyb0NvbXBhdGlibGUoZSx0KXtjb25zdCBuPWUubm9BYnM/ZS5wbHVyYWxzKHQpOmUucGx1cmFscyhNYXRoLmFicyh0KSk7bGV0IHI9ZS5udW1iZXJzW25dO3RoaXMub3B0aW9ucy5zaW1wbGlmeVBsdXJhbFN1ZmZpeCYmMj09PWUubnVtYmVycy5sZW5ndGgmJjE9PT1lLm51bWJlcnNbMF0mJigyPT09cj9yPVwicGx1cmFsXCI6MT09PXImJihyPVwiXCIpKTtjb25zdCBvPSgpPT50aGlzLm9wdGlvbnMucHJlcGVuZCYmci50b1N0cmluZygpP3RoaXMub3B0aW9ucy5wcmVwZW5kK3IudG9TdHJpbmcoKTpyLnRvU3RyaW5nKCk7cmV0dXJuXCJ2MVwiPT09dGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlKU09OPzE9PT1yP1wiXCI6XCJudW1iZXJcIj09dHlwZW9mIHI/YF9wbHVyYWxfJHtyLnRvU3RyaW5nKCl9YDpvKCk6XCJ2MlwiPT09dGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlKU09OfHx0aGlzLm9wdGlvbnMuc2ltcGxpZnlQbHVyYWxTdWZmaXgmJjI9PT1lLm51bWJlcnMubGVuZ3RoJiYxPT09ZS5udW1iZXJzWzBdP28oKTp0aGlzLm9wdGlvbnMucHJlcGVuZCYmbi50b1N0cmluZygpP3RoaXMub3B0aW9ucy5wcmVwZW5kK24udG9TdHJpbmcoKTpuLnRvU3RyaW5nKCl9c2hvdWxkVXNlSW50bEFwaSgpe3JldHVybiFtbi5pbmNsdWRlcyh0aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUpTT04pfX1mdW5jdGlvbiB4bihlLHQsbil7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOlwiLlwiLG89IShhcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XSl8fGFyZ3VtZW50c1s0XSxhPWZ1bmN0aW9uKGUsdCxuKXtjb25zdCByPWVuKGUsbik7cmV0dXJuIHZvaWQgMCE9PXI/cjplbih0LG4pfShlLHQsbik7cmV0dXJuIWEmJm8mJlwic3RyaW5nXCI9PXR5cGVvZiBuJiYoYT1zbihlLG4sciksdm9pZCAwPT09YSYmKGE9c24odCxuLHIpKSksYX1jbGFzcyBrbntjb25zdHJ1Y3Rvcigpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTt0aGlzLmxvZ2dlcj1HdC5jcmVhdGUoXCJpbnRlcnBvbGF0b3JcIiksdGhpcy5vcHRpb25zPWUsdGhpcy5mb3JtYXQ9ZS5pbnRlcnBvbGF0aW9uJiZlLmludGVycG9sYXRpb24uZm9ybWF0fHwoZT0+ZSksdGhpcy5pbml0KGUpfWluaXQoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307ZS5pbnRlcnBvbGF0aW9ufHwoZS5pbnRlcnBvbGF0aW9uPXtlc2NhcGVWYWx1ZTohMH0pO2NvbnN0IHQ9ZS5pbnRlcnBvbGF0aW9uO3RoaXMuZXNjYXBlPXZvaWQgMCE9PXQuZXNjYXBlP3QuZXNjYXBlOm9uLHRoaXMuZXNjYXBlVmFsdWU9dm9pZCAwPT09dC5lc2NhcGVWYWx1ZXx8dC5lc2NhcGVWYWx1ZSx0aGlzLnVzZVJhd1ZhbHVlVG9Fc2NhcGU9dm9pZCAwIT09dC51c2VSYXdWYWx1ZVRvRXNjYXBlJiZ0LnVzZVJhd1ZhbHVlVG9Fc2NhcGUsdGhpcy5wcmVmaXg9dC5wcmVmaXg/bm4odC5wcmVmaXgpOnQucHJlZml4RXNjYXBlZHx8XCJ7e1wiLHRoaXMuc3VmZml4PXQuc3VmZml4P25uKHQuc3VmZml4KTp0LnN1ZmZpeEVzY2FwZWR8fFwifX1cIix0aGlzLmZvcm1hdFNlcGFyYXRvcj10LmZvcm1hdFNlcGFyYXRvcj90LmZvcm1hdFNlcGFyYXRvcjp0LmZvcm1hdFNlcGFyYXRvcnx8XCIsXCIsdGhpcy51bmVzY2FwZVByZWZpeD10LnVuZXNjYXBlU3VmZml4P1wiXCI6dC51bmVzY2FwZVByZWZpeHx8XCItXCIsdGhpcy51bmVzY2FwZVN1ZmZpeD10aGlzLnVuZXNjYXBlUHJlZml4P1wiXCI6dC51bmVzY2FwZVN1ZmZpeHx8XCJcIix0aGlzLm5lc3RpbmdQcmVmaXg9dC5uZXN0aW5nUHJlZml4P25uKHQubmVzdGluZ1ByZWZpeCk6dC5uZXN0aW5nUHJlZml4RXNjYXBlZHx8bm4oXCIkdChcIiksdGhpcy5uZXN0aW5nU3VmZml4PXQubmVzdGluZ1N1ZmZpeD9ubih0Lm5lc3RpbmdTdWZmaXgpOnQubmVzdGluZ1N1ZmZpeEVzY2FwZWR8fG5uKFwiKVwiKSx0aGlzLm5lc3RpbmdPcHRpb25zU2VwYXJhdG9yPXQubmVzdGluZ09wdGlvbnNTZXBhcmF0b3I/dC5uZXN0aW5nT3B0aW9uc1NlcGFyYXRvcjp0Lm5lc3RpbmdPcHRpb25zU2VwYXJhdG9yfHxcIixcIix0aGlzLm1heFJlcGxhY2VzPXQubWF4UmVwbGFjZXM/dC5tYXhSZXBsYWNlczoxZTMsdGhpcy5hbHdheXNGb3JtYXQ9dm9pZCAwIT09dC5hbHdheXNGb3JtYXQmJnQuYWx3YXlzRm9ybWF0LHRoaXMucmVzZXRSZWdFeHAoKX1yZXNldCgpe3RoaXMub3B0aW9ucyYmdGhpcy5pbml0KHRoaXMub3B0aW9ucyl9cmVzZXRSZWdFeHAoKXtjb25zdCBlPShlLHQpPT5lJiZlLnNvdXJjZT09PXQ/KGUubGFzdEluZGV4PTAsZSk6bmV3IFJlZ0V4cCh0LFwiZ1wiKTt0aGlzLnJlZ2V4cD1lKHRoaXMucmVnZXhwLGAke3RoaXMucHJlZml4fSguKz8pJHt0aGlzLnN1ZmZpeH1gKSx0aGlzLnJlZ2V4cFVuZXNjYXBlPWUodGhpcy5yZWdleHBVbmVzY2FwZSxgJHt0aGlzLnByZWZpeH0ke3RoaXMudW5lc2NhcGVQcmVmaXh9KC4rPykke3RoaXMudW5lc2NhcGVTdWZmaXh9JHt0aGlzLnN1ZmZpeH1gKSx0aGlzLm5lc3RpbmdSZWdleHA9ZSh0aGlzLm5lc3RpbmdSZWdleHAsYCR7dGhpcy5uZXN0aW5nUHJlZml4fSguKz8pJHt0aGlzLm5lc3RpbmdTdWZmaXh9YCl9aW50ZXJwb2xhdGUoZSx0LG4scil7bGV0IG8sYSxpO2NvbnN0IGw9dGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbiYmdGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZGVmYXVsdFZhcmlhYmxlc3x8e307ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZS5yZXBsYWNlKC9cXCQvZyxcIiQkJCRcIil9Y29uc3QgYz1lPT57aWYoZS5pbmRleE9mKHRoaXMuZm9ybWF0U2VwYXJhdG9yKTwwKXtjb25zdCBvPXhuKHQsbCxlLHRoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3IsdGhpcy5vcHRpb25zLmlnbm9yZUpTT05TdHJ1Y3R1cmUpO3JldHVybiB0aGlzLmFsd2F5c0Zvcm1hdD90aGlzLmZvcm1hdChvLHZvaWQgMCxuLHsuLi5yLC4uLnQsaW50ZXJwb2xhdGlvbmtleTplfSk6b31jb25zdCBvPWUuc3BsaXQodGhpcy5mb3JtYXRTZXBhcmF0b3IpLGE9by5zaGlmdCgpLnRyaW0oKSxpPW8uam9pbih0aGlzLmZvcm1hdFNlcGFyYXRvcikudHJpbSgpO3JldHVybiB0aGlzLmZvcm1hdCh4bih0LGwsYSx0aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yLHRoaXMub3B0aW9ucy5pZ25vcmVKU09OU3RydWN0dXJlKSxpLG4sey4uLnIsLi4udCxpbnRlcnBvbGF0aW9ua2V5OmF9KX07dGhpcy5yZXNldFJlZ0V4cCgpO2NvbnN0IHU9ciYmci5taXNzaW5nSW50ZXJwb2xhdGlvbkhhbmRsZXJ8fHRoaXMub3B0aW9ucy5taXNzaW5nSW50ZXJwb2xhdGlvbkhhbmRsZXIsZD1yJiZyLmludGVycG9sYXRpb24mJnZvaWQgMCE9PXIuaW50ZXJwb2xhdGlvbi5za2lwT25WYXJpYWJsZXM/ci5pbnRlcnBvbGF0aW9uLnNraXBPblZhcmlhYmxlczp0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5za2lwT25WYXJpYWJsZXM7cmV0dXJuW3tyZWdleDp0aGlzLnJlZ2V4cFVuZXNjYXBlLHNhZmVWYWx1ZTplPT5zKGUpfSx7cmVnZXg6dGhpcy5yZWdleHAsc2FmZVZhbHVlOmU9PnRoaXMuZXNjYXBlVmFsdWU/cyh0aGlzLmVzY2FwZShlKSk6cyhlKX1dLmZvckVhY2goKHQ9Pntmb3IoaT0wO289dC5yZWdleC5leGVjKGUpOyl7Y29uc3Qgbj1vWzFdLnRyaW0oKTtpZihhPWMobiksdm9pZCAwPT09YSlpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB1KXtjb25zdCB0PXUoZSxvLHIpO2E9XCJzdHJpbmdcIj09dHlwZW9mIHQ/dDpcIlwifWVsc2UgaWYociYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikpYT1cIlwiO2Vsc2V7aWYoZCl7YT1vWzBdO2NvbnRpbnVlfXRoaXMubG9nZ2VyLndhcm4oYG1pc3NlZCB0byBwYXNzIGluIHZhcmlhYmxlICR7bn0gZm9yIGludGVycG9sYXRpbmcgJHtlfWApLGE9XCJcIn1lbHNlXCJzdHJpbmdcIj09dHlwZW9mIGF8fHRoaXMudXNlUmF3VmFsdWVUb0VzY2FwZXx8KGE9WXQoYSkpO2NvbnN0IGw9dC5zYWZlVmFsdWUoYSk7aWYoZT1lLnJlcGxhY2Uob1swXSxsKSxkPyh0LnJlZ2V4Lmxhc3RJbmRleCs9YS5sZW5ndGgsdC5yZWdleC5sYXN0SW5kZXgtPW9bMF0ubGVuZ3RoKTp0LnJlZ2V4Lmxhc3RJbmRleD0wLGkrKyxpPj10aGlzLm1heFJlcGxhY2VzKWJyZWFrfX0pKSxlfW5lc3QoZSx0KXtsZXQgbixyLG8sYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307ZnVuY3Rpb24gaShlLHQpe2NvbnN0IG49dGhpcy5uZXN0aW5nT3B0aW9uc1NlcGFyYXRvcjtpZihlLmluZGV4T2Yobik8MClyZXR1cm4gZTtjb25zdCByPWUuc3BsaXQobmV3IFJlZ0V4cChgJHtufVsgXSp7YCkpO2xldCBhPWB7JHtyWzFdfWA7ZT1yWzBdLGE9dGhpcy5pbnRlcnBvbGF0ZShhLG8pO2NvbnN0IGk9YS5tYXRjaCgvJy9nKSxsPWEubWF0Y2goL1wiL2cpOyhpJiZpLmxlbmd0aCUyPT0wJiYhbHx8bC5sZW5ndGglMiE9MCkmJihhPWEucmVwbGFjZSgvJy9nLCdcIicpKTt0cnl7bz1KU09OLnBhcnNlKGEpLHQmJihvPXsuLi50LC4uLm99KX1jYXRjaCh0KXtyZXR1cm4gdGhpcy5sb2dnZXIud2FybihgZmFpbGVkIHBhcnNpbmcgb3B0aW9ucyBzdHJpbmcgaW4gbmVzdGluZyBmb3Iga2V5ICR7ZX1gLHQpLGAke2V9JHtufSR7YX1gfXJldHVybiBkZWxldGUgby5kZWZhdWx0VmFsdWUsZX1mb3IoO249dGhpcy5uZXN0aW5nUmVnZXhwLmV4ZWMoZSk7KXtsZXQgbD1bXTtvPXsuLi5hfSxvPW8ucmVwbGFjZSYmXCJzdHJpbmdcIiE9dHlwZW9mIG8ucmVwbGFjZT9vLnJlcGxhY2U6byxvLmFwcGx5UG9zdFByb2Nlc3Nvcj0hMSxkZWxldGUgby5kZWZhdWx0VmFsdWU7bGV0IHM9ITE7aWYoLTEhPT1uWzBdLmluZGV4T2YodGhpcy5mb3JtYXRTZXBhcmF0b3IpJiYhL3suKn0vLnRlc3QoblsxXSkpe2NvbnN0IGU9blsxXS5zcGxpdCh0aGlzLmZvcm1hdFNlcGFyYXRvcikubWFwKChlPT5lLnRyaW0oKSkpO25bMV09ZS5zaGlmdCgpLGw9ZSxzPSEwfWlmKHI9dChpLmNhbGwodGhpcyxuWzFdLnRyaW0oKSxvKSxvKSxyJiZuWzBdPT09ZSYmXCJzdHJpbmdcIiE9dHlwZW9mIHIpcmV0dXJuIHI7XCJzdHJpbmdcIiE9dHlwZW9mIHImJihyPVl0KHIpKSxyfHwodGhpcy5sb2dnZXIud2FybihgbWlzc2VkIHRvIHJlc29sdmUgJHtuWzFdfSBmb3IgbmVzdGluZyAke2V9YCkscj1cIlwiKSxzJiYocj1sLnJlZHVjZSgoKGUsdCk9PnRoaXMuZm9ybWF0KGUsdCxhLmxuZyx7Li4uYSxpbnRlcnBvbGF0aW9ua2V5Om5bMV0udHJpbSgpfSkpLHIudHJpbSgpKSksZT1lLnJlcGxhY2UoblswXSxyKSx0aGlzLnJlZ2V4cC5sYXN0SW5kZXg9MH1yZXR1cm4gZX19ZnVuY3Rpb24gU24oZSl7Y29uc3QgdD17fTtyZXR1cm4gZnVuY3Rpb24obixyLG8pe2NvbnN0IGE9citKU09OLnN0cmluZ2lmeShvKTtsZXQgaT10W2FdO3JldHVybiBpfHwoaT1lKGNuKHIpLG8pLHRbYV09aSksaShuKX19Y2xhc3MgT257Y29uc3RydWN0b3IoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307dGhpcy5sb2dnZXI9R3QuY3JlYXRlKFwiZm9ybWF0dGVyXCIpLHRoaXMub3B0aW9ucz1lLHRoaXMuZm9ybWF0cz17bnVtYmVyOlNuKCgoZSx0KT0+e2NvbnN0IG49bmV3IEludGwuTnVtYmVyRm9ybWF0KGUsey4uLnR9KTtyZXR1cm4gZT0+bi5mb3JtYXQoZSl9KSksY3VycmVuY3k6U24oKChlLHQpPT57Y29uc3Qgbj1uZXcgSW50bC5OdW1iZXJGb3JtYXQoZSx7Li4udCxzdHlsZTpcImN1cnJlbmN5XCJ9KTtyZXR1cm4gZT0+bi5mb3JtYXQoZSl9KSksZGF0ZXRpbWU6U24oKChlLHQpPT57Y29uc3Qgbj1uZXcgSW50bC5EYXRlVGltZUZvcm1hdChlLHsuLi50fSk7cmV0dXJuIGU9Pm4uZm9ybWF0KGUpfSkpLHJlbGF0aXZldGltZTpTbigoKGUsdCk9Pntjb25zdCBuPW5ldyBJbnRsLlJlbGF0aXZlVGltZUZvcm1hdChlLHsuLi50fSk7cmV0dXJuIGU9Pm4uZm9ybWF0KGUsdC5yYW5nZXx8XCJkYXlcIil9KSksbGlzdDpTbigoKGUsdCk9Pntjb25zdCBuPW5ldyBJbnRsLkxpc3RGb3JtYXQoZSx7Li4udH0pO3JldHVybiBlPT5uLmZvcm1hdChlKX0pKX0sdGhpcy5pbml0KGUpfWluaXQoZSl7Y29uc3QgdD0oYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOntpbnRlcnBvbGF0aW9uOnt9fSkuaW50ZXJwb2xhdGlvbjt0aGlzLmZvcm1hdFNlcGFyYXRvcj10LmZvcm1hdFNlcGFyYXRvcj90LmZvcm1hdFNlcGFyYXRvcjp0LmZvcm1hdFNlcGFyYXRvcnx8XCIsXCJ9YWRkKGUsdCl7dGhpcy5mb3JtYXRzW2UudG9Mb3dlckNhc2UoKS50cmltKCldPXR9YWRkQ2FjaGVkKGUsdCl7dGhpcy5mb3JtYXRzW2UudG9Mb3dlckNhc2UoKS50cmltKCldPVNuKHQpfWZvcm1hdChlLHQsbil7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOnt9O3JldHVybiB0LnNwbGl0KHRoaXMuZm9ybWF0U2VwYXJhdG9yKS5yZWR1Y2UoKChlLHQpPT57Y29uc3R7Zm9ybWF0TmFtZTpvLGZvcm1hdE9wdGlvbnM6YX09ZnVuY3Rpb24oZSl7bGV0IHQ9ZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtjb25zdCBuPXt9O2lmKGUuaW5kZXhPZihcIihcIik+LTEpe2NvbnN0IHI9ZS5zcGxpdChcIihcIik7dD1yWzBdLnRvTG93ZXJDYXNlKCkudHJpbSgpO2NvbnN0IG89clsxXS5zdWJzdHJpbmcoMCxyWzFdLmxlbmd0aC0xKTtcImN1cnJlbmN5XCI9PT10JiZvLmluZGV4T2YoXCI6XCIpPDA/bi5jdXJyZW5jeXx8KG4uY3VycmVuY3k9by50cmltKCkpOlwicmVsYXRpdmV0aW1lXCI9PT10JiZvLmluZGV4T2YoXCI6XCIpPDA/bi5yYW5nZXx8KG4ucmFuZ2U9by50cmltKCkpOm8uc3BsaXQoXCI7XCIpLmZvckVhY2goKGU9PntpZighZSlyZXR1cm47Y29uc3RbdCwuLi5yXT1lLnNwbGl0KFwiOlwiKSxvPXIuam9pbihcIjpcIikudHJpbSgpLnJlcGxhY2UoL14nK3wnKyQvZyxcIlwiKTtuW3QudHJpbSgpXXx8KG5bdC50cmltKCldPW8pLFwiZmFsc2VcIj09PW8mJihuW3QudHJpbSgpXT0hMSksXCJ0cnVlXCI9PT1vJiYoblt0LnRyaW0oKV09ITApLGlzTmFOKG8pfHwoblt0LnRyaW0oKV09cGFyc2VJbnQobywxMCkpfSkpfXJldHVybntmb3JtYXROYW1lOnQsZm9ybWF0T3B0aW9uczpufX0odCk7aWYodGhpcy5mb3JtYXRzW29dKXtsZXQgdD1lO3RyeXtjb25zdCBpPXImJnIuZm9ybWF0UGFyYW1zJiZyLmZvcm1hdFBhcmFtc1tyLmludGVycG9sYXRpb25rZXldfHx7fSxsPWkubG9jYWxlfHxpLmxuZ3x8ci5sb2NhbGV8fHIubG5nfHxuO3Q9dGhpcy5mb3JtYXRzW29dKGUsbCx7Li4uYSwuLi5yLC4uLml9KX1jYXRjaChlKXt0aGlzLmxvZ2dlci53YXJuKGUpfXJldHVybiB0fXJldHVybiB0aGlzLmxvZ2dlci53YXJuKGB0aGVyZSB3YXMgbm8gZm9ybWF0IGZ1bmN0aW9uIGZvciAke299YCksZX0pLGUpfX1jbGFzcyBNbiBleHRlbmRzIEt0e2NvbnN0cnVjdG9yKGUsdCxuKXtsZXQgcj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106e307c3VwZXIoKSx0aGlzLmJhY2tlbmQ9ZSx0aGlzLnN0b3JlPXQsdGhpcy5zZXJ2aWNlcz1uLHRoaXMubGFuZ3VhZ2VVdGlscz1uLmxhbmd1YWdlVXRpbHMsdGhpcy5vcHRpb25zPXIsdGhpcy5sb2dnZXI9R3QuY3JlYXRlKFwiYmFja2VuZENvbm5lY3RvclwiKSx0aGlzLndhaXRpbmdSZWFkcz1bXSx0aGlzLm1heFBhcmFsbGVsUmVhZHM9ci5tYXhQYXJhbGxlbFJlYWRzfHwxMCx0aGlzLnJlYWRpbmdDYWxscz0wLHRoaXMubWF4UmV0cmllcz1yLm1heFJldHJpZXM+PTA/ci5tYXhSZXRyaWVzOjUsdGhpcy5yZXRyeVRpbWVvdXQ9ci5yZXRyeVRpbWVvdXQ+PTE/ci5yZXRyeVRpbWVvdXQ6MzUwLHRoaXMuc3RhdGU9e30sdGhpcy5xdWV1ZT1bXSx0aGlzLmJhY2tlbmQmJnRoaXMuYmFja2VuZC5pbml0JiZ0aGlzLmJhY2tlbmQuaW5pdChuLHIuYmFja2VuZCxyKX1xdWV1ZUxvYWQoZSx0LG4scil7Y29uc3Qgbz17fSxhPXt9LGk9e30sbD17fTtyZXR1cm4gZS5mb3JFYWNoKChlPT57bGV0IHI9ITA7dC5mb3JFYWNoKCh0PT57Y29uc3QgaT1gJHtlfXwke3R9YDshbi5yZWxvYWQmJnRoaXMuc3RvcmUuaGFzUmVzb3VyY2VCdW5kbGUoZSx0KT90aGlzLnN0YXRlW2ldPTI6dGhpcy5zdGF0ZVtpXTwwfHwoMT09PXRoaXMuc3RhdGVbaV0/dm9pZCAwPT09YVtpXSYmKGFbaV09ITApOih0aGlzLnN0YXRlW2ldPTEscj0hMSx2b2lkIDA9PT1hW2ldJiYoYVtpXT0hMCksdm9pZCAwPT09b1tpXSYmKG9baV09ITApLHZvaWQgMD09PWxbdF0mJihsW3RdPSEwKSkpfSkpLHJ8fChpW2VdPSEwKX0pKSwoT2JqZWN0LmtleXMobykubGVuZ3RofHxPYmplY3Qua2V5cyhhKS5sZW5ndGgpJiZ0aGlzLnF1ZXVlLnB1c2goe3BlbmRpbmc6YSxwZW5kaW5nQ291bnQ6T2JqZWN0LmtleXMoYSkubGVuZ3RoLGxvYWRlZDp7fSxlcnJvcnM6W10sY2FsbGJhY2s6cn0pLHt0b0xvYWQ6T2JqZWN0LmtleXMobykscGVuZGluZzpPYmplY3Qua2V5cyhhKSx0b0xvYWRMYW5ndWFnZXM6T2JqZWN0LmtleXMoaSksdG9Mb2FkTmFtZXNwYWNlczpPYmplY3Qua2V5cyhsKX19bG9hZGVkKGUsdCxuKXtjb25zdCByPWUuc3BsaXQoXCJ8XCIpLG89clswXSxhPXJbMV07dCYmdGhpcy5lbWl0KFwiZmFpbGVkTG9hZGluZ1wiLG8sYSx0KSxuJiZ0aGlzLnN0b3JlLmFkZFJlc291cmNlQnVuZGxlKG8sYSxuKSx0aGlzLnN0YXRlW2VdPXQ/LTE6Mjtjb25zdCBpPXt9O3RoaXMucXVldWUuZm9yRWFjaCgobj0+eyFmdW5jdGlvbihlLHQsbixyKXtjb25zdHtvYmo6byxrOmF9PVh0KGUsdCxPYmplY3QpO29bYV09b1thXXx8W10sciYmKG9bYV09b1thXS5jb25jYXQobikpLHJ8fG9bYV0ucHVzaChuKX0obi5sb2FkZWQsW29dLGEpLGZ1bmN0aW9uKGUsdCl7dm9pZCAwIT09ZS5wZW5kaW5nW3RdJiYoZGVsZXRlIGUucGVuZGluZ1t0XSxlLnBlbmRpbmdDb3VudC0tKX0obixlKSx0JiZuLmVycm9ycy5wdXNoKHQpLDAhPT1uLnBlbmRpbmdDb3VudHx8bi5kb25lfHwoT2JqZWN0LmtleXMobi5sb2FkZWQpLmZvckVhY2goKGU9PntpW2VdfHwoaVtlXT17fSk7Y29uc3QgdD1uLmxvYWRlZFtlXTt0Lmxlbmd0aCYmdC5mb3JFYWNoKCh0PT57dm9pZCAwPT09aVtlXVt0XSYmKGlbZV1bdF09ITApfSkpfSkpLG4uZG9uZT0hMCxuLmVycm9ycy5sZW5ndGg/bi5jYWxsYmFjayhuLmVycm9ycyk6bi5jYWxsYmFjaygpKX0pKSx0aGlzLmVtaXQoXCJsb2FkZWRcIixpKSx0aGlzLnF1ZXVlPXRoaXMucXVldWUuZmlsdGVyKChlPT4hZS5kb25lKSl9cmVhZChlLHQsbil7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOjAsbz1hcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XT9hcmd1bWVudHNbNF06dGhpcy5yZXRyeVRpbWVvdXQsYT1hcmd1bWVudHMubGVuZ3RoPjU/YXJndW1lbnRzWzVdOnZvaWQgMDtpZighZS5sZW5ndGgpcmV0dXJuIGEobnVsbCx7fSk7aWYodGhpcy5yZWFkaW5nQ2FsbHM+PXRoaXMubWF4UGFyYWxsZWxSZWFkcylyZXR1cm4gdm9pZCB0aGlzLndhaXRpbmdSZWFkcy5wdXNoKHtsbmc6ZSxuczp0LGZjTmFtZTpuLHRyaWVkOnIsd2FpdDpvLGNhbGxiYWNrOmF9KTt0aGlzLnJlYWRpbmdDYWxscysrO2NvbnN0IGk9KGksbCk9PntpZih0aGlzLnJlYWRpbmdDYWxscy0tLHRoaXMud2FpdGluZ1JlYWRzLmxlbmd0aD4wKXtjb25zdCBlPXRoaXMud2FpdGluZ1JlYWRzLnNoaWZ0KCk7dGhpcy5yZWFkKGUubG5nLGUubnMsZS5mY05hbWUsZS50cmllZCxlLndhaXQsZS5jYWxsYmFjayl9aSYmbCYmcjx0aGlzLm1heFJldHJpZXM/c2V0VGltZW91dCgoKCk9Pnt0aGlzLnJlYWQuY2FsbCh0aGlzLGUsdCxuLHIrMSwyKm8sYSl9KSxvKTphKGksbCl9LGw9dGhpcy5iYWNrZW5kW25dLmJpbmQodGhpcy5iYWNrZW5kKTtpZigyIT09bC5sZW5ndGgpcmV0dXJuIGwoZSx0LGkpO3RyeXtjb25zdCBuPWwoZSx0KTtuJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLnRoZW4/bi50aGVuKChlPT5pKG51bGwsZSkpKS5jYXRjaChpKTppKG51bGwsbil9Y2F0Y2goZSl7aShlKX19cHJlcGFyZUxvYWRpbmcoZSx0KXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e30scj1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMDtpZighdGhpcy5iYWNrZW5kKXJldHVybiB0aGlzLmxvZ2dlci53YXJuKFwiTm8gYmFja2VuZCB3YXMgYWRkZWQgdmlhIGkxOG5leHQudXNlLiBXaWxsIG5vdCBsb2FkIHJlc291cmNlcy5cIiksciYmcigpO1wic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT10aGlzLmxhbmd1YWdlVXRpbHMudG9SZXNvbHZlSGllcmFyY2h5KGUpKSxcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9W3RdKTtjb25zdCBvPXRoaXMucXVldWVMb2FkKGUsdCxuLHIpO2lmKCFvLnRvTG9hZC5sZW5ndGgpcmV0dXJuIG8ucGVuZGluZy5sZW5ndGh8fHIoKSxudWxsO28udG9Mb2FkLmZvckVhY2goKGU9Pnt0aGlzLmxvYWRPbmUoZSl9KSl9bG9hZChlLHQsbil7dGhpcy5wcmVwYXJlTG9hZGluZyhlLHQse30sbil9cmVsb2FkKGUsdCxuKXt0aGlzLnByZXBhcmVMb2FkaW5nKGUsdCx7cmVsb2FkOiEwfSxuKX1sb2FkT25lKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpcIlwiO2NvbnN0IG49ZS5zcGxpdChcInxcIikscj1uWzBdLG89blsxXTt0aGlzLnJlYWQocixvLFwicmVhZFwiLHZvaWQgMCx2b2lkIDAsKChuLGEpPT57biYmdGhpcy5sb2dnZXIud2FybihgJHt0fWxvYWRpbmcgbmFtZXNwYWNlICR7b30gZm9yIGxhbmd1YWdlICR7cn0gZmFpbGVkYCxuKSwhbiYmYSYmdGhpcy5sb2dnZXIubG9nKGAke3R9bG9hZGVkIG5hbWVzcGFjZSAke299IGZvciBsYW5ndWFnZSAke3J9YCxhKSx0aGlzLmxvYWRlZChlLG4sYSl9KSl9c2F2ZU1pc3NpbmcoZSx0LG4scixvKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjUmJnZvaWQgMCE9PWFyZ3VtZW50c1s1XT9hcmd1bWVudHNbNV06e30saT1hcmd1bWVudHMubGVuZ3RoPjYmJnZvaWQgMCE9PWFyZ3VtZW50c1s2XT9hcmd1bWVudHNbNl06KCk9Pnt9O2lmKHRoaXMuc2VydmljZXMudXRpbHMmJnRoaXMuc2VydmljZXMudXRpbHMuaGFzTG9hZGVkTmFtZXNwYWNlJiYhdGhpcy5zZXJ2aWNlcy51dGlscy5oYXNMb2FkZWROYW1lc3BhY2UodCkpdGhpcy5sb2dnZXIud2FybihgZGlkIG5vdCBzYXZlIGtleSBcIiR7bn1cIiBhcyB0aGUgbmFtZXNwYWNlIFwiJHt0fVwiIHdhcyBub3QgeWV0IGxvYWRlZGAsXCJUaGlzIG1lYW5zIHNvbWV0aGluZyBJUyBXUk9ORyBpbiB5b3VyIHNldHVwLiBZb3UgYWNjZXNzIHRoZSB0IGZ1bmN0aW9uIGJlZm9yZSBpMThuZXh0LmluaXQgLyBpMThuZXh0LmxvYWROYW1lc3BhY2UgLyBpMThuZXh0LmNoYW5nZUxhbmd1YWdlIHdhcyBkb25lLiBXYWl0IGZvciB0aGUgY2FsbGJhY2sgb3IgUHJvbWlzZSB0byByZXNvbHZlIGJlZm9yZSBhY2Nlc3NpbmcgaXQhISFcIik7ZWxzZSBpZihudWxsIT1uJiZcIlwiIT09bil7aWYodGhpcy5iYWNrZW5kJiZ0aGlzLmJhY2tlbmQuY3JlYXRlKXtjb25zdCBsPXsuLi5hLGlzVXBkYXRlOm99LHM9dGhpcy5iYWNrZW5kLmNyZWF0ZS5iaW5kKHRoaXMuYmFja2VuZCk7aWYocy5sZW5ndGg8Nil0cnl7bGV0IG87bz01PT09cy5sZW5ndGg/cyhlLHQsbixyLGwpOnMoZSx0LG4sciksbyYmXCJmdW5jdGlvblwiPT10eXBlb2Ygby50aGVuP28udGhlbigoZT0+aShudWxsLGUpKSkuY2F0Y2goaSk6aShudWxsLG8pfWNhdGNoKGUpe2koZSl9ZWxzZSBzKGUsdCxuLHIsaSxsKX1lJiZlWzBdJiZ0aGlzLnN0b3JlLmFkZFJlc291cmNlKGVbMF0sdCxuLHIpfX19ZnVuY3Rpb24gTG4oKXtyZXR1cm57ZGVidWc6ITEsaW5pdEltbWVkaWF0ZTohMCxuczpbXCJ0cmFuc2xhdGlvblwiXSxkZWZhdWx0TlM6W1widHJhbnNsYXRpb25cIl0sZmFsbGJhY2tMbmc6W1wiZGV2XCJdLGZhbGxiYWNrTlM6ITEsc3VwcG9ydGVkTG5nczohMSxub25FeHBsaWNpdFN1cHBvcnRlZExuZ3M6ITEsbG9hZDpcImFsbFwiLHByZWxvYWQ6ITEsc2ltcGxpZnlQbHVyYWxTdWZmaXg6ITAsa2V5U2VwYXJhdG9yOlwiLlwiLG5zU2VwYXJhdG9yOlwiOlwiLHBsdXJhbFNlcGFyYXRvcjpcIl9cIixjb250ZXh0U2VwYXJhdG9yOlwiX1wiLHBhcnRpYWxCdW5kbGVkTGFuZ3VhZ2VzOiExLHNhdmVNaXNzaW5nOiExLHVwZGF0ZU1pc3Npbmc6ITEsc2F2ZU1pc3NpbmdUbzpcImZhbGxiYWNrXCIsc2F2ZU1pc3NpbmdQbHVyYWxzOiEwLG1pc3NpbmdLZXlIYW5kbGVyOiExLG1pc3NpbmdJbnRlcnBvbGF0aW9uSGFuZGxlcjohMSxwb3N0UHJvY2VzczohMSxwb3N0UHJvY2Vzc1Bhc3NSZXNvbHZlZDohMSxyZXR1cm5OdWxsOiExLHJldHVybkVtcHR5U3RyaW5nOiEwLHJldHVybk9iamVjdHM6ITEsam9pbkFycmF5czohMSxyZXR1cm5lZE9iamVjdEhhbmRsZXI6ITEscGFyc2VNaXNzaW5nS2V5SGFuZGxlcjohMSxhcHBlbmROYW1lc3BhY2VUb01pc3NpbmdLZXk6ITEsYXBwZW5kTmFtZXNwYWNlVG9DSU1vZGU6ITEsb3ZlcmxvYWRUcmFuc2xhdGlvbk9wdGlvbkhhbmRsZXI6ZnVuY3Rpb24oZSl7bGV0IHQ9e307aWYoXCJvYmplY3RcIj09dHlwZW9mIGVbMV0mJih0PWVbMV0pLFwic3RyaW5nXCI9PXR5cGVvZiBlWzFdJiYodC5kZWZhdWx0VmFsdWU9ZVsxXSksXCJzdHJpbmdcIj09dHlwZW9mIGVbMl0mJih0LnREZXNjcmlwdGlvbj1lWzJdKSxcIm9iamVjdFwiPT10eXBlb2YgZVsyXXx8XCJvYmplY3RcIj09dHlwZW9mIGVbM10pe2NvbnN0IG49ZVszXXx8ZVsyXTtPYmplY3Qua2V5cyhuKS5mb3JFYWNoKChlPT57dFtlXT1uW2VdfSkpfXJldHVybiB0fSxpbnRlcnBvbGF0aW9uOntlc2NhcGVWYWx1ZTohMCxmb3JtYXQ6ZT0+ZSxwcmVmaXg6XCJ7e1wiLHN1ZmZpeDpcIn19XCIsZm9ybWF0U2VwYXJhdG9yOlwiLFwiLHVuZXNjYXBlUHJlZml4OlwiLVwiLG5lc3RpbmdQcmVmaXg6XCIkdChcIixuZXN0aW5nU3VmZml4OlwiKVwiLG5lc3RpbmdPcHRpb25zU2VwYXJhdG9yOlwiLFwiLG1heFJlcGxhY2VzOjFlMyxza2lwT25WYXJpYWJsZXM6ITB9fX1mdW5jdGlvbiBfbihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZS5ucyYmKGUubnM9W2UubnNdKSxcInN0cmluZ1wiPT10eXBlb2YgZS5mYWxsYmFja0xuZyYmKGUuZmFsbGJhY2tMbmc9W2UuZmFsbGJhY2tMbmddKSxcInN0cmluZ1wiPT10eXBlb2YgZS5mYWxsYmFja05TJiYoZS5mYWxsYmFja05TPVtlLmZhbGxiYWNrTlNdKSxlLnN1cHBvcnRlZExuZ3MmJmUuc3VwcG9ydGVkTG5ncy5pbmRleE9mKFwiY2ltb2RlXCIpPDAmJihlLnN1cHBvcnRlZExuZ3M9ZS5zdXBwb3J0ZWRMbmdzLmNvbmNhdChbXCJjaW1vZGVcIl0pKSxlfWZ1bmN0aW9uIFBuKCl7fWNsYXNzIEVuIGV4dGVuZHMgS3R7Y29uc3RydWN0b3IoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sdD1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMDt2YXIgbjtpZihzdXBlcigpLHRoaXMub3B0aW9ucz1fbihlKSx0aGlzLnNlcnZpY2VzPXt9LHRoaXMubG9nZ2VyPUd0LHRoaXMubW9kdWxlcz17ZXh0ZXJuYWw6W119LG49dGhpcyxPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPYmplY3QuZ2V0UHJvdG90eXBlT2YobikpLmZvckVhY2goKGU9PntcImZ1bmN0aW9uXCI9PXR5cGVvZiBuW2VdJiYobltlXT1uW2VdLmJpbmQobikpfSkpLHQmJiF0aGlzLmlzSW5pdGlhbGl6ZWQmJiFlLmlzQ2xvbmUpe2lmKCF0aGlzLm9wdGlvbnMuaW5pdEltbWVkaWF0ZSlyZXR1cm4gdGhpcy5pbml0KGUsdCksdGhpcztzZXRUaW1lb3V0KCgoKT0+e3RoaXMuaW5pdChlLHQpfSksMCl9fWluaXQoKXt2YXIgZT10aGlzO2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSxuPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwO1wiZnVuY3Rpb25cIj09dHlwZW9mIHQmJihuPXQsdD17fSksIXQuZGVmYXVsdE5TJiYhMSE9PXQuZGVmYXVsdE5TJiZ0Lm5zJiYoXCJzdHJpbmdcIj09dHlwZW9mIHQubnM/dC5kZWZhdWx0TlM9dC5uczp0Lm5zLmluZGV4T2YoXCJ0cmFuc2xhdGlvblwiKTwwJiYodC5kZWZhdWx0TlM9dC5uc1swXSkpO2NvbnN0IHI9TG4oKTtmdW5jdGlvbiBvKGUpe3JldHVybiBlP1wiZnVuY3Rpb25cIj09dHlwZW9mIGU/bmV3IGU6ZTpudWxsfWlmKHRoaXMub3B0aW9ucz17Li4uciwuLi50aGlzLm9wdGlvbnMsLi4uX24odCl9LFwidjFcIiE9PXRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5QVBJJiYodGhpcy5vcHRpb25zLmludGVycG9sYXRpb249ey4uLnIuaW50ZXJwb2xhdGlvbiwuLi50aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbn0pLHZvaWQgMCE9PXQua2V5U2VwYXJhdG9yJiYodGhpcy5vcHRpb25zLnVzZXJEZWZpbmVkS2V5U2VwYXJhdG9yPXQua2V5U2VwYXJhdG9yKSx2b2lkIDAhPT10Lm5zU2VwYXJhdG9yJiYodGhpcy5vcHRpb25zLnVzZXJEZWZpbmVkTnNTZXBhcmF0b3I9dC5uc1NlcGFyYXRvciksIXRoaXMub3B0aW9ucy5pc0Nsb25lKXtsZXQgdDt0aGlzLm1vZHVsZXMubG9nZ2VyP0d0LmluaXQobyh0aGlzLm1vZHVsZXMubG9nZ2VyKSx0aGlzLm9wdGlvbnMpOkd0LmluaXQobnVsbCx0aGlzLm9wdGlvbnMpLHRoaXMubW9kdWxlcy5mb3JtYXR0ZXI/dD10aGlzLm1vZHVsZXMuZm9ybWF0dGVyOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBJbnRsJiYodD1Pbik7Y29uc3Qgbj1uZXcgZ24odGhpcy5vcHRpb25zKTt0aGlzLnN0b3JlPW5ldyB1bih0aGlzLm9wdGlvbnMucmVzb3VyY2VzLHRoaXMub3B0aW9ucyk7Y29uc3QgYT10aGlzLnNlcnZpY2VzO2EubG9nZ2VyPUd0LGEucmVzb3VyY2VTdG9yZT10aGlzLnN0b3JlLGEubGFuZ3VhZ2VVdGlscz1uLGEucGx1cmFsUmVzb2x2ZXI9bmV3IHluKG4se3ByZXBlbmQ6dGhpcy5vcHRpb25zLnBsdXJhbFNlcGFyYXRvcixjb21wYXRpYmlsaXR5SlNPTjp0aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUpTT04sc2ltcGxpZnlQbHVyYWxTdWZmaXg6dGhpcy5vcHRpb25zLnNpbXBsaWZ5UGx1cmFsU3VmZml4fSksIXR8fHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmZvcm1hdCYmdGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZm9ybWF0IT09ci5pbnRlcnBvbGF0aW9uLmZvcm1hdHx8KGEuZm9ybWF0dGVyPW8odCksYS5mb3JtYXR0ZXIuaW5pdChhLHRoaXMub3B0aW9ucyksdGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZm9ybWF0PWEuZm9ybWF0dGVyLmZvcm1hdC5iaW5kKGEuZm9ybWF0dGVyKSksYS5pbnRlcnBvbGF0b3I9bmV3IGtuKHRoaXMub3B0aW9ucyksYS51dGlscz17aGFzTG9hZGVkTmFtZXNwYWNlOnRoaXMuaGFzTG9hZGVkTmFtZXNwYWNlLmJpbmQodGhpcyl9LGEuYmFja2VuZENvbm5lY3Rvcj1uZXcgTW4obyh0aGlzLm1vZHVsZXMuYmFja2VuZCksYS5yZXNvdXJjZVN0b3JlLGEsdGhpcy5vcHRpb25zKSxhLmJhY2tlbmRDb25uZWN0b3Iub24oXCIqXCIsKGZ1bmN0aW9uKHQpe2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KG4+MT9uLTE6MCksbz0xO288bjtvKyspcltvLTFdPWFyZ3VtZW50c1tvXTtlLmVtaXQodCwuLi5yKX0pKSx0aGlzLm1vZHVsZXMubGFuZ3VhZ2VEZXRlY3RvciYmKGEubGFuZ3VhZ2VEZXRlY3Rvcj1vKHRoaXMubW9kdWxlcy5sYW5ndWFnZURldGVjdG9yKSxhLmxhbmd1YWdlRGV0ZWN0b3IuaW5pdCYmYS5sYW5ndWFnZURldGVjdG9yLmluaXQoYSx0aGlzLm9wdGlvbnMuZGV0ZWN0aW9uLHRoaXMub3B0aW9ucykpLHRoaXMubW9kdWxlcy5pMThuRm9ybWF0JiYoYS5pMThuRm9ybWF0PW8odGhpcy5tb2R1bGVzLmkxOG5Gb3JtYXQpLGEuaTE4bkZvcm1hdC5pbml0JiZhLmkxOG5Gb3JtYXQuaW5pdCh0aGlzKSksdGhpcy50cmFuc2xhdG9yPW5ldyBmbih0aGlzLnNlcnZpY2VzLHRoaXMub3B0aW9ucyksdGhpcy50cmFuc2xhdG9yLm9uKFwiKlwiLChmdW5jdGlvbih0KXtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShuPjE/bi0xOjApLG89MTtvPG47bysrKXJbby0xXT1hcmd1bWVudHNbb107ZS5lbWl0KHQsLi4ucil9KSksdGhpcy5tb2R1bGVzLmV4dGVybmFsLmZvckVhY2goKGU9PntlLmluaXQmJmUuaW5pdCh0aGlzKX0pKX1pZih0aGlzLmZvcm1hdD10aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5mb3JtYXQsbnx8KG49UG4pLHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZyYmIXRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3RvciYmIXRoaXMub3B0aW9ucy5sbmcpe2NvbnN0IGU9dGhpcy5zZXJ2aWNlcy5sYW5ndWFnZVV0aWxzLmdldEZhbGxiYWNrQ29kZXModGhpcy5vcHRpb25zLmZhbGxiYWNrTG5nKTtlLmxlbmd0aD4wJiZcImRldlwiIT09ZVswXSYmKHRoaXMub3B0aW9ucy5sbmc9ZVswXSl9dGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yfHx0aGlzLm9wdGlvbnMubG5nfHx0aGlzLmxvZ2dlci53YXJuKFwiaW5pdDogbm8gbGFuZ3VhZ2VEZXRlY3RvciBpcyB1c2VkIGFuZCBubyBsbmcgaXMgZGVmaW5lZFwiKTtbXCJnZXRSZXNvdXJjZVwiLFwiaGFzUmVzb3VyY2VCdW5kbGVcIixcImdldFJlc291cmNlQnVuZGxlXCIsXCJnZXREYXRhQnlMYW5ndWFnZVwiXS5mb3JFYWNoKCh0PT57dGhpc1t0XT1mdW5jdGlvbigpe3JldHVybiBlLnN0b3JlW3RdKC4uLmFyZ3VtZW50cyl9fSkpO1tcImFkZFJlc291cmNlXCIsXCJhZGRSZXNvdXJjZXNcIixcImFkZFJlc291cmNlQnVuZGxlXCIsXCJyZW1vdmVSZXNvdXJjZUJ1bmRsZVwiXS5mb3JFYWNoKCh0PT57dGhpc1t0XT1mdW5jdGlvbigpe3JldHVybiBlLnN0b3JlW3RdKC4uLmFyZ3VtZW50cyksZX19KSk7Y29uc3QgYT1xdCgpLGk9KCk9Pntjb25zdCBlPShlLHQpPT57dGhpcy5pc0luaXRpYWxpemVkJiYhdGhpcy5pbml0aWFsaXplZFN0b3JlT25jZSYmdGhpcy5sb2dnZXIud2FybihcImluaXQ6IGkxOG5leHQgaXMgYWxyZWFkeSBpbml0aWFsaXplZC4gWW91IHNob3VsZCBjYWxsIGluaXQganVzdCBvbmNlIVwiKSx0aGlzLmlzSW5pdGlhbGl6ZWQ9ITAsdGhpcy5vcHRpb25zLmlzQ2xvbmV8fHRoaXMubG9nZ2VyLmxvZyhcImluaXRpYWxpemVkXCIsdGhpcy5vcHRpb25zKSx0aGlzLmVtaXQoXCJpbml0aWFsaXplZFwiLHRoaXMub3B0aW9ucyksYS5yZXNvbHZlKHQpLG4oZSx0KX07aWYodGhpcy5sYW5ndWFnZXMmJlwidjFcIiE9PXRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5QVBJJiYhdGhpcy5pc0luaXRpYWxpemVkKXJldHVybiBlKG51bGwsdGhpcy50LmJpbmQodGhpcykpO3RoaXMuY2hhbmdlTGFuZ3VhZ2UodGhpcy5vcHRpb25zLmxuZyxlKX07cmV0dXJuIHRoaXMub3B0aW9ucy5yZXNvdXJjZXN8fCF0aGlzLm9wdGlvbnMuaW5pdEltbWVkaWF0ZT9pKCk6c2V0VGltZW91dChpLDApLGF9bG9hZFJlc291cmNlcyhlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06UG47Y29uc3Qgbj1cInN0cmluZ1wiPT10eXBlb2YgZT9lOnRoaXMubGFuZ3VhZ2U7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZSYmKHQ9ZSksIXRoaXMub3B0aW9ucy5yZXNvdXJjZXN8fHRoaXMub3B0aW9ucy5wYXJ0aWFsQnVuZGxlZExhbmd1YWdlcyl7aWYobiYmXCJjaW1vZGVcIj09PW4udG9Mb3dlckNhc2UoKSYmKCF0aGlzLm9wdGlvbnMucHJlbG9hZHx8MD09PXRoaXMub3B0aW9ucy5wcmVsb2FkLmxlbmd0aCkpcmV0dXJuIHQoKTtjb25zdCBlPVtdLHI9dD0+e2lmKCF0KXJldHVybjtpZihcImNpbW9kZVwiPT09dClyZXR1cm47dGhpcy5zZXJ2aWNlcy5sYW5ndWFnZVV0aWxzLnRvUmVzb2x2ZUhpZXJhcmNoeSh0KS5mb3JFYWNoKCh0PT57XCJjaW1vZGVcIiE9PXQmJmUuaW5kZXhPZih0KTwwJiZlLnB1c2godCl9KSl9O2lmKG4pcihuKTtlbHNle3RoaXMuc2VydmljZXMubGFuZ3VhZ2VVdGlscy5nZXRGYWxsYmFja0NvZGVzKHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZykuZm9yRWFjaCgoZT0+cihlKSkpfXRoaXMub3B0aW9ucy5wcmVsb2FkJiZ0aGlzLm9wdGlvbnMucHJlbG9hZC5mb3JFYWNoKChlPT5yKGUpKSksdGhpcy5zZXJ2aWNlcy5iYWNrZW5kQ29ubmVjdG9yLmxvYWQoZSx0aGlzLm9wdGlvbnMubnMsKGU9PntlfHx0aGlzLnJlc29sdmVkTGFuZ3VhZ2V8fCF0aGlzLmxhbmd1YWdlfHx0aGlzLnNldFJlc29sdmVkTGFuZ3VhZ2UodGhpcy5sYW5ndWFnZSksdChlKX0pKX1lbHNlIHQobnVsbCl9cmVsb2FkUmVzb3VyY2VzKGUsdCxuKXtjb25zdCByPXF0KCk7cmV0dXJuIGV8fChlPXRoaXMubGFuZ3VhZ2VzKSx0fHwodD10aGlzLm9wdGlvbnMubnMpLG58fChuPVBuKSx0aGlzLnNlcnZpY2VzLmJhY2tlbmRDb25uZWN0b3IucmVsb2FkKGUsdCwoZT0+e3IucmVzb2x2ZSgpLG4oZSl9KSkscn11c2UoZSl7aWYoIWUpdGhyb3cgbmV3IEVycm9yKFwiWW91IGFyZSBwYXNzaW5nIGFuIHVuZGVmaW5lZCBtb2R1bGUhIFBsZWFzZSBjaGVjayB0aGUgb2JqZWN0IHlvdSBhcmUgcGFzc2luZyB0byBpMThuZXh0LnVzZSgpXCIpO2lmKCFlLnR5cGUpdGhyb3cgbmV3IEVycm9yKFwiWW91IGFyZSBwYXNzaW5nIGEgd3JvbmcgbW9kdWxlISBQbGVhc2UgY2hlY2sgdGhlIG9iamVjdCB5b3UgYXJlIHBhc3NpbmcgdG8gaTE4bmV4dC51c2UoKVwiKTtyZXR1cm5cImJhY2tlbmRcIj09PWUudHlwZSYmKHRoaXMubW9kdWxlcy5iYWNrZW5kPWUpLChcImxvZ2dlclwiPT09ZS50eXBlfHxlLmxvZyYmZS53YXJuJiZlLmVycm9yKSYmKHRoaXMubW9kdWxlcy5sb2dnZXI9ZSksXCJsYW5ndWFnZURldGVjdG9yXCI9PT1lLnR5cGUmJih0aGlzLm1vZHVsZXMubGFuZ3VhZ2VEZXRlY3Rvcj1lKSxcImkxOG5Gb3JtYXRcIj09PWUudHlwZSYmKHRoaXMubW9kdWxlcy5pMThuRm9ybWF0PWUpLFwicG9zdFByb2Nlc3NvclwiPT09ZS50eXBlJiZkbi5hZGRQb3N0UHJvY2Vzc29yKGUpLFwiZm9ybWF0dGVyXCI9PT1lLnR5cGUmJih0aGlzLm1vZHVsZXMuZm9ybWF0dGVyPWUpLFwiM3JkUGFydHlcIj09PWUudHlwZSYmdGhpcy5tb2R1bGVzLmV4dGVybmFsLnB1c2goZSksdGhpc31zZXRSZXNvbHZlZExhbmd1YWdlKGUpe2lmKGUmJnRoaXMubGFuZ3VhZ2VzJiYhKFtcImNpbW9kZVwiLFwiZGV2XCJdLmluZGV4T2YoZSk+LTEpKWZvcihsZXQgZT0wO2U8dGhpcy5sYW5ndWFnZXMubGVuZ3RoO2UrKyl7Y29uc3QgdD10aGlzLmxhbmd1YWdlc1tlXTtpZighKFtcImNpbW9kZVwiLFwiZGV2XCJdLmluZGV4T2YodCk+LTEpJiZ0aGlzLnN0b3JlLmhhc0xhbmd1YWdlU29tZVRyYW5zbGF0aW9ucyh0KSl7dGhpcy5yZXNvbHZlZExhbmd1YWdlPXQ7YnJlYWt9fX1jaGFuZ2VMYW5ndWFnZShlLHQpe3ZhciBuPXRoaXM7dGhpcy5pc0xhbmd1YWdlQ2hhbmdpbmdUbz1lO2NvbnN0IHI9cXQoKTt0aGlzLmVtaXQoXCJsYW5ndWFnZUNoYW5naW5nXCIsZSk7Y29uc3Qgbz1lPT57dGhpcy5sYW5ndWFnZT1lLHRoaXMubGFuZ3VhZ2VzPXRoaXMuc2VydmljZXMubGFuZ3VhZ2VVdGlscy50b1Jlc29sdmVIaWVyYXJjaHkoZSksdGhpcy5yZXNvbHZlZExhbmd1YWdlPXZvaWQgMCx0aGlzLnNldFJlc29sdmVkTGFuZ3VhZ2UoZSl9LGE9KGUsYSk9PnthPyhvKGEpLHRoaXMudHJhbnNsYXRvci5jaGFuZ2VMYW5ndWFnZShhKSx0aGlzLmlzTGFuZ3VhZ2VDaGFuZ2luZ1RvPXZvaWQgMCx0aGlzLmVtaXQoXCJsYW5ndWFnZUNoYW5nZWRcIixhKSx0aGlzLmxvZ2dlci5sb2coXCJsYW5ndWFnZUNoYW5nZWRcIixhKSk6dGhpcy5pc0xhbmd1YWdlQ2hhbmdpbmdUbz12b2lkIDAsci5yZXNvbHZlKChmdW5jdGlvbigpe3JldHVybiBuLnQoLi4uYXJndW1lbnRzKX0pKSx0JiZ0KGUsKGZ1bmN0aW9uKCl7cmV0dXJuIG4udCguLi5hcmd1bWVudHMpfSkpfSxpPXQ9PntlfHx0fHwhdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yfHwodD1bXSk7Y29uc3Qgbj1cInN0cmluZ1wiPT10eXBlb2YgdD90OnRoaXMuc2VydmljZXMubGFuZ3VhZ2VVdGlscy5nZXRCZXN0TWF0Y2hGcm9tQ29kZXModCk7biYmKHRoaXMubGFuZ3VhZ2V8fG8obiksdGhpcy50cmFuc2xhdG9yLmxhbmd1YWdlfHx0aGlzLnRyYW5zbGF0b3IuY2hhbmdlTGFuZ3VhZ2UobiksdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yJiZ0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuY2FjaGVVc2VyTGFuZ3VhZ2UmJnRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvci5jYWNoZVVzZXJMYW5ndWFnZShuKSksdGhpcy5sb2FkUmVzb3VyY2VzKG4sKGU9PnthKGUsbil9KSl9O3JldHVybiBlfHwhdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yfHx0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuYXN5bmM/IWUmJnRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3RvciYmdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmFzeW5jPzA9PT10aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuZGV0ZWN0Lmxlbmd0aD90aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuZGV0ZWN0KCkudGhlbihpKTp0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuZGV0ZWN0KGkpOmkoZSk6aSh0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuZGV0ZWN0KCkpLHJ9Z2V0Rml4ZWRUKGUsdCxuKXt2YXIgcj10aGlzO2NvbnN0IG89ZnVuY3Rpb24oZSx0KXtsZXQgYTtpZihcIm9iamVjdFwiIT10eXBlb2YgdCl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGgsbD1uZXcgQXJyYXkoaT4yP2ktMjowKSxzPTI7czxpO3MrKylsW3MtMl09YXJndW1lbnRzW3NdO2E9ci5vcHRpb25zLm92ZXJsb2FkVHJhbnNsYXRpb25PcHRpb25IYW5kbGVyKFtlLHRdLmNvbmNhdChsKSl9ZWxzZSBhPXsuLi50fTthLmxuZz1hLmxuZ3x8by5sbmcsYS5sbmdzPWEubG5nc3x8by5sbmdzLGEubnM9YS5uc3x8by5ucyxhLmtleVByZWZpeD1hLmtleVByZWZpeHx8bnx8by5rZXlQcmVmaXg7Y29uc3QgYz1yLm9wdGlvbnMua2V5U2VwYXJhdG9yfHxcIi5cIjtsZXQgdTtyZXR1cm4gdT1hLmtleVByZWZpeCYmQXJyYXkuaXNBcnJheShlKT9lLm1hcCgoZT0+YCR7YS5rZXlQcmVmaXh9JHtjfSR7ZX1gKSk6YS5rZXlQcmVmaXg/YCR7YS5rZXlQcmVmaXh9JHtjfSR7ZX1gOmUsci50KHUsYSl9O3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlP28ubG5nPWU6by5sbmdzPWUsby5ucz10LG8ua2V5UHJlZml4PW4sb310KCl7cmV0dXJuIHRoaXMudHJhbnNsYXRvciYmdGhpcy50cmFuc2xhdG9yLnRyYW5zbGF0ZSguLi5hcmd1bWVudHMpfWV4aXN0cygpe3JldHVybiB0aGlzLnRyYW5zbGF0b3ImJnRoaXMudHJhbnNsYXRvci5leGlzdHMoLi4uYXJndW1lbnRzKX1zZXREZWZhdWx0TmFtZXNwYWNlKGUpe3RoaXMub3B0aW9ucy5kZWZhdWx0TlM9ZX1oYXNMb2FkZWROYW1lc3BhY2UoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2lmKCF0aGlzLmlzSW5pdGlhbGl6ZWQpcmV0dXJuIHRoaXMubG9nZ2VyLndhcm4oXCJoYXNMb2FkZWROYW1lc3BhY2U6IGkxOG5leHQgd2FzIG5vdCBpbml0aWFsaXplZFwiLHRoaXMubGFuZ3VhZ2VzKSwhMTtpZighdGhpcy5sYW5ndWFnZXN8fCF0aGlzLmxhbmd1YWdlcy5sZW5ndGgpcmV0dXJuIHRoaXMubG9nZ2VyLndhcm4oXCJoYXNMb2FkZWROYW1lc3BhY2U6IGkxOG4ubGFuZ3VhZ2VzIHdlcmUgdW5kZWZpbmVkIG9yIGVtcHR5XCIsdGhpcy5sYW5ndWFnZXMpLCExO2NvbnN0IG49dC5sbmd8fHRoaXMucmVzb2x2ZWRMYW5ndWFnZXx8dGhpcy5sYW5ndWFnZXNbMF0scj0hIXRoaXMub3B0aW9ucyYmdGhpcy5vcHRpb25zLmZhbGxiYWNrTG5nLG89dGhpcy5sYW5ndWFnZXNbdGhpcy5sYW5ndWFnZXMubGVuZ3RoLTFdO2lmKFwiY2ltb2RlXCI9PT1uLnRvTG93ZXJDYXNlKCkpcmV0dXJuITA7Y29uc3QgYT0oZSx0KT0+e2NvbnN0IG49dGhpcy5zZXJ2aWNlcy5iYWNrZW5kQ29ubmVjdG9yLnN0YXRlW2Ake2V9fCR7dH1gXTtyZXR1cm4tMT09PW58fDI9PT1ufTtpZih0LnByZWNoZWNrKXtjb25zdCBlPXQucHJlY2hlY2sodGhpcyxhKTtpZih2b2lkIDAhPT1lKXJldHVybiBlfXJldHVybiEhdGhpcy5oYXNSZXNvdXJjZUJ1bmRsZShuLGUpfHwoISh0aGlzLnNlcnZpY2VzLmJhY2tlbmRDb25uZWN0b3IuYmFja2VuZCYmKCF0aGlzLm9wdGlvbnMucmVzb3VyY2VzfHx0aGlzLm9wdGlvbnMucGFydGlhbEJ1bmRsZWRMYW5ndWFnZXMpKXx8ISghYShuLGUpfHxyJiYhYShvLGUpKSl9bG9hZE5hbWVzcGFjZXMoZSx0KXtjb25zdCBuPXF0KCk7cmV0dXJuIHRoaXMub3B0aW9ucy5ucz8oXCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPVtlXSksZS5mb3JFYWNoKChlPT57dGhpcy5vcHRpb25zLm5zLmluZGV4T2YoZSk8MCYmdGhpcy5vcHRpb25zLm5zLnB1c2goZSl9KSksdGhpcy5sb2FkUmVzb3VyY2VzKChlPT57bi5yZXNvbHZlKCksdCYmdChlKX0pKSxuKToodCYmdCgpLFByb21pc2UucmVzb2x2ZSgpKX1sb2FkTGFuZ3VhZ2VzKGUsdCl7Y29uc3Qgbj1xdCgpO1wic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT1bZV0pO2NvbnN0IHI9dGhpcy5vcHRpb25zLnByZWxvYWR8fFtdLG89ZS5maWx0ZXIoKGU9PnIuaW5kZXhPZihlKTwwKSk7cmV0dXJuIG8ubGVuZ3RoPyh0aGlzLm9wdGlvbnMucHJlbG9hZD1yLmNvbmNhdChvKSx0aGlzLmxvYWRSZXNvdXJjZXMoKGU9PntuLnJlc29sdmUoKSx0JiZ0KGUpfSkpLG4pOih0JiZ0KCksUHJvbWlzZS5yZXNvbHZlKCkpfWRpcihlKXtpZihlfHwoZT10aGlzLnJlc29sdmVkTGFuZ3VhZ2V8fCh0aGlzLmxhbmd1YWdlcyYmdGhpcy5sYW5ndWFnZXMubGVuZ3RoPjA/dGhpcy5sYW5ndWFnZXNbMF06dGhpcy5sYW5ndWFnZSkpLCFlKXJldHVyblwicnRsXCI7Y29uc3QgdD10aGlzLnNlcnZpY2VzJiZ0aGlzLnNlcnZpY2VzLmxhbmd1YWdlVXRpbHN8fG5ldyBnbihMbigpKTtyZXR1cm5bXCJhclwiLFwic2h1XCIsXCJzcXJcIixcInNzaFwiLFwieGFhXCIsXCJ5aGRcIixcInl1ZFwiLFwiYWFvXCIsXCJhYmhcIixcImFidlwiLFwiYWNtXCIsXCJhY3FcIixcImFjd1wiLFwiYWN4XCIsXCJhY3lcIixcImFkZlwiLFwiYWRzXCIsXCJhZWJcIixcImFlY1wiLFwiYWZiXCIsXCJhanBcIixcImFwY1wiLFwiYXBkXCIsXCJhcmJcIixcImFycVwiLFwiYXJzXCIsXCJhcnlcIixcImFyelwiLFwiYXV6XCIsXCJhdmxcIixcImF5aFwiLFwiYXlsXCIsXCJheW5cIixcImF5cFwiLFwiYmJ6XCIsXCJwZ2FcIixcImhlXCIsXCJpd1wiLFwicHNcIixcInBidFwiLFwicGJ1XCIsXCJwc3RcIixcInBycFwiLFwicHJkXCIsXCJ1Z1wiLFwidXJcIixcInlkZFwiLFwieWRzXCIsXCJ5aWhcIixcImppXCIsXCJ5aVwiLFwiaGJvXCIsXCJtZW5cIixcInhtblwiLFwiZmFcIixcImpwclwiLFwicGVvXCIsXCJwZXNcIixcInByc1wiLFwiZHZcIixcInNhbVwiLFwiY2tiXCJdLmluZGV4T2YodC5nZXRMYW5ndWFnZVBhcnRGcm9tQ29kZShlKSk+LTF8fGUudG9Mb3dlckNhc2UoKS5pbmRleE9mKFwiLWFyYWJcIik+MT9cInJ0bFwiOlwibHRyXCJ9c3RhdGljIGNyZWF0ZUluc3RhbmNlKCl7cmV0dXJuIG5ldyBFbihhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfWNsb25lSW5zdGFuY2UoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06UG47Y29uc3Qgbj1lLmZvcmtSZXNvdXJjZVN0b3JlO24mJmRlbGV0ZSBlLmZvcmtSZXNvdXJjZVN0b3JlO2NvbnN0IHI9ey4uLnRoaXMub3B0aW9ucywuLi5lLGlzQ2xvbmU6ITB9LG89bmV3IEVuKHIpO3ZvaWQgMD09PWUuZGVidWcmJnZvaWQgMD09PWUucHJlZml4fHwoby5sb2dnZXI9by5sb2dnZXIuY2xvbmUoZSkpO3JldHVybltcInN0b3JlXCIsXCJzZXJ2aWNlc1wiLFwibGFuZ3VhZ2VcIl0uZm9yRWFjaCgoZT0+e29bZV09dGhpc1tlXX0pKSxvLnNlcnZpY2VzPXsuLi50aGlzLnNlcnZpY2VzfSxvLnNlcnZpY2VzLnV0aWxzPXtoYXNMb2FkZWROYW1lc3BhY2U6by5oYXNMb2FkZWROYW1lc3BhY2UuYmluZChvKX0sbiYmKG8uc3RvcmU9bmV3IHVuKHRoaXMuc3RvcmUuZGF0YSxyKSxvLnNlcnZpY2VzLnJlc291cmNlU3RvcmU9by5zdG9yZSksby50cmFuc2xhdG9yPW5ldyBmbihvLnNlcnZpY2VzLHIpLG8udHJhbnNsYXRvci5vbihcIipcIiwoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkodD4xP3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO28uZW1pdChlLC4uLm4pfSkpLG8uaW5pdChyLHQpLG8udHJhbnNsYXRvci5vcHRpb25zPXIsby50cmFuc2xhdG9yLmJhY2tlbmRDb25uZWN0b3Iuc2VydmljZXMudXRpbHM9e2hhc0xvYWRlZE5hbWVzcGFjZTpvLmhhc0xvYWRlZE5hbWVzcGFjZS5iaW5kKG8pfSxvfXRvSlNPTigpe3JldHVybntvcHRpb25zOnRoaXMub3B0aW9ucyxzdG9yZTp0aGlzLnN0b3JlLGxhbmd1YWdlOnRoaXMubGFuZ3VhZ2UsbGFuZ3VhZ2VzOnRoaXMubGFuZ3VhZ2VzLHJlc29sdmVkTGFuZ3VhZ2U6dGhpcy5yZXNvbHZlZExhbmd1YWdlfX19Y29uc3Qgam49RW4uY3JlYXRlSW5zdGFuY2UoKTtqbi5jcmVhdGVJbnN0YW5jZT1Fbi5jcmVhdGVJbnN0YW5jZTtqbi5jcmVhdGVJbnN0YW5jZSxqbi5kaXIsam4uaW5pdCxqbi5sb2FkUmVzb3VyY2VzLGpuLnJlbG9hZFJlc291cmNlcyxqbi51c2Usam4uY2hhbmdlTGFuZ3VhZ2Usam4uZ2V0Rml4ZWRULGpuLnQsam4uZXhpc3RzLGpuLnNldERlZmF1bHROYW1lc3BhY2Usam4uaGFzTG9hZGVkTmFtZXNwYWNlLGpuLmxvYWROYW1lc3BhY2VzLGpuLmxvYWRMYW5ndWFnZXM7Y29uc3QgUm49SlNPTi5wYXJzZSgne1wiY29udGV4dE1lbnUubmV3V2luZG93XCI6XCLmlrDlu7rnqpflj6NcIixcImNvbnRleHRNZW51Lm5ld1BhZ2VcIjpcIuaWsOW7uumhtemdolwiLFwiY29udGV4dE1lbnUucmVzdG9yZVwiOlwi6L+Y5Y6f5Yiw5LiK5qyh5L+d5a2Y55qE5pu05pS5XCIsXCJjb250ZXh0TWVudS5zd2l0Y2hXb3Jrc3BhY2VcIjpcIuWIh+aNouW3peS9nOWMulwiLFwiY29udGV4dE1lbnUuYXBwZWFyYW5jZVwiOlwi5aSW6KeCXCIsXCJjb250ZXh0TWVudS5zYXZlV29ya3NwYWNlXCI6XCLkv53lrZjlt6XkvZzljLpcIixcImNvbnRleHRNZW51LnNhdmVXb3Jrc3BhY2VBc1wiOlwi5bCG5bel5L2c5Yy65Y+m5a2Y5Li6Li4uXCIsXCJjb250ZXh0TWVudS5yZW5hbWVXb3Jrc3BhY2VcIjpcIumHjeWRveWQjeW3peS9nOWMulwiLFwiY29udGV4dE1lbnUuZGVsZXRlV29ya3NwYWNlXCI6XCLliKDpmaTlt6XkvZzljLpcIixcImNvbnRleHRNZW51LmRvd25sb2Fkc1wiOlwi5LiL6L29XCIsXCJjb250ZXh0TWVudS5zYXZlUGFnZVwiOlwi5L+d5a2Y6aG16Z2iXCIsXCJjb250ZXh0TWVudS5zYXZlUGFnZUFzXCI6XCLlsIbpobXpnaLlj6blrZjkuLouLi5cIixcImNvbnRleHRNZW51LnByaW50XCI6XCLmiZPljbAuLi5cIixcImNvbnRleHRNZW51LnByaW50U2NyZWVuXCI6XCLmiZPljbDlsY/luZVcIixcImNvbnRleHRNZW51LmNsb3NlV2luZG93XCI6XCLlhbPpl63nqpflj6NcIixcImNvbnRleHRNZW51Lm9wZW5TdG9yZWZyb250XCI6XCLlvIDmlL7lvI/lupfpnaJcIixcImNvbnRleHRNZW51LnF1aXRQbGF0Zm9ybVwiOlwi6YCA5Ye65bmz5Y+wXCIsXCJjb250ZXh0TWVudS5uZXdWaWV3XCI6XCLmlrDlu7rop4blm75cIixcImNvbnRleHRNZW51Lm9wZW5WaWV3XCI6XCLkvb/nlKjpu5jorqQgV2ViIOa1j+iniOWZqOaJk+W8gOinhuWbvlwiLFwiY29udGV4dE1lbnUub3BlblZpZXdzXCI6XCLkvb/nlKjpu5jorqQgV2ViIOa1j+iniOWZqOaJk+W8gOinhuWbvlwiLFwiY29udGV4dE1lbnUucmVsb2FkXCI6XCJSZWxvYWQgQ05cIixcImNvbnRleHRNZW51LnJlbG9hZFZpZXdcIjpcIumHjeaWsOWKoOi9veinhuWbvlwiLFwiY29udGV4dE1lbnUucmVsb2FkVmlld3NcIjpcIumHjeaWsOWKoOi9veinhuWbvlwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlXCI6XCJEdXBsaWNhdGUgQ05cIixcImNvbnRleHRNZW51LmR1cGxpY2F0ZVZpZXdcIjpcIuWkjeWItuinhuWbvlwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlVmlld3NcIjpcIuWkjeWItuinhuWbvlwiLFwiY29udGV4dE1lbnUuYWRkVmlld1wiOlwi5bCG6KeG5Zu+5re75Yqg5Yiw6aKR6YGTXCIsXCJjb250ZXh0TWVudS5hZGRWaWV3c1wiOlwi5bCG6KeG5Zu+5re75Yqg5Yiw6aKR6YGTXCIsXCJjb250ZXh0TWVudS5yZW1vdmVWaWV3XCI6XCLku47popHpgZPkuK3np7vpmaTop4blm75cIixcImNvbnRleHRNZW51LnJlbW92ZVZpZXdzXCI6XCLku47popHpgZPkuK3np7vpmaTop4blm75cIixcImNvbnRleHRNZW51LmNsb3NlVmlld1wiOlwi5YWz6Zet6KeG5Zu+XCIsXCJjb250ZXh0TWVudS5jbG9zZVZpZXdzXCI6XCLlhbPpl63op4blm75cIixcImNvbnRleHRNZW51LmNsb3NlVGFiXCI6XCJDbG9zZSBUYWIgQ05cIixcImNvbnRleHRNZW51LmR1cGxpY2F0ZVBhZ2VcIjpcIuWkjeWItumhtemdolwiLFwiY29udGV4dE1lbnUuc3VibWVudS5wcmludFwiOlwi5omT5Y2wXCIsXCJjb250ZXh0TWVudS5zdWJtZW51LnByaW50QWxsXCI6XCLlhajpg6jmiZPljbBcIixcInNhdmVNZW51LnNhdmVXb3Jrc3BhY2VBc1wiOlwi5bCG5bel5L2c5Yy65Y+m5a2Y5Li6XCIsXCJzYXZlTWVudS5zYXZlUGFnZUFzXCI6XCLlsIbpobXpnaLlj6blrZjkuLpcIixcInNhdmVNb2RhbC5lbnRlclZhbHVlXCI6XCJQbGVhc2UgZW50ZXIgYSB2YWx1ZSBDTlwiLFwic2F2ZU1vZGFsLmFscmVhZHlFeGlzdHNcIjpcInt7dGl0bGV9fSDlt7LlrZjlnKjjgIJcIixcInNhdmVNb2RhbC5wbGVhc2VFbnRlclZhbGlkTmFtZVwiOlwi6K+36L6T5YWl5pyJ5pWI5ZCN56ewXCIsXCJzYXZlTW9kYWwucmVuYW1lUGFnZVwiOlwi6YeN5paw5ZG95ZCN6aG16Z2iXCIsXCJzYXZlTW9kYWwuY2xvc2VQYWdlXCI6XCLlhbPpl63pobXpnaJcIixcInNhdmVNb2RhbC5kaXNjYXJkQ2hhbmdlc1wiOlwi5pS+5byD5pu05pS5XCIsXCJzYXZlTW9kYWwuZGlzY2FyZEFsbFwiOlwi5YWo6YOo5pS+5byDXCIsXCJzYXZlTW9kYWwuc2F2ZUFsbFwiOlwi5YWo6YOo5L+d5a2YXCIsXCJzYXZlTW9kYWwuc2F2ZVBhZ2VzQ291bnRcIjpcIuWFs+mXreWJjeS/neWtmCAoe3tjb3VudH19KSDkuKrpobXpnaLvvJ9cIixcImRlZmF1bHRQYWdlVGl0bGVcIjpcIlVudGl0bGVkIFBhZ2UgQ05cIixcImVudGVycHJpc2VEZWZhdWx0UGFnZVRpdGxlXCI6XCJVbnRpdGxlZCBTdXBlcnRhYiBDTlwiLFwiYWRkTmV3UGFnZVwiOlwiTmV3IFBhZ2UgQ05cIixcImFkZE5ld1RhYlwiOlwi5re75Yqg5paw6YCJ6aG55Y2hXCIsXCJhZGROZXdWaWV3XCI6XCLmlrDlu7rop4blm75cIixcInJlc3RvcmVNb2RhbFwiOlwi5oKo56Gu5a6a6KaB6L+Y5Y6f5Yiw5LiK5qyh5L+d5a2Y55qE5pu05pS55ZCX77yfXCIsXCJtb2RhbC5kaXNjYXJkV2FybmluZ1wiOlwi5Lu75L2V5pyq5L+d5a2Y55qE5pu05pS56YO95bCG5Lii5aSxXCIsXCJtb2RhbC5kaXNjYXJkUGFnZVdhcm5pbmdcIjpcIuWvueatpOmhteeahOS7u+S9leacquS/neWtmOeahOabtOaUuemDveWwhuS4ouWkseOAglwiLFwibW9kYWwuc2F2ZUNoYW5nZXNQcm9tcHRcIjpcIuWFs+mXreWJjeS/neWtmOabtOaUue+8n1wiLFwibW9kYWwucGFnZUNsb3NlXCI6XCJQYWdlIENsb3NlIENOXCIsXCJzd2l0Y2hXb3Jrc3BhY2VNb2RhbFwiOlwi5oKo56Gu5a6a6KaB5YiH5o2i5YiwIHt7d29ya3NwYWNlfX0g5ZCX77yfXCIsXCJzd2l0Y2hXb3Jrc3BhY2VNb2RhbC53YXJuaW5nXCI6XCLku7vkvZXmnKrkv53lrZjnmoTmm7TmlLnpg73lsIbkuKLlpLFcIixcImRlbGV0ZVdvcmtzcGFjZU1vZGFsXCI6XCLmgqjnoa7lrpropoHmsLjkuYXliKDpmaTmraTlt6XkvZzljLrlkJfvvJ9cIixcInJlcGxhY2VXb3Jrc3BhY2VNb2RhbC53YXJuaW5nXCI6XCLlkI3np7DkuLoge3t3b3Jrc3BhY2V9fSDnmoTlt6XkvZzljLrlt7LlrZjlnKjjgILmgqjmmK/lkKbopoHmm7/mjaLlroPvvJ9cIixcInJlcGxhY2VXb3Jrc3BhY2VNb2RhbC53YXJuaW5nLmJvZHlcIjpcIuW3suWtmOWcqOWQjOWQjeeahOW3peS9nOWMuuOAguabv+aNouWug+WwhuimhuebluWFtuW9k+WJjeWGheWuueOAglwiLFwicmVwbGFjZVdvcmtzcGFjZU1vZGFsLnJlcGxhY2VcIjpcIuabv+aNolwiLFwiY2xvc2VQbGF0Zm9ybVwiOlwi5YWz6Zet5bmz5Y+wXCIsXCJjbG9zZVBsYXRmb3JtLndvcmtzcGFjZVwiOlwi5YWz6ZetIHt7d29ya3NwYWNlfX0g5bmz5Y+wXCIsXCJjbG9zZVBsYXRmb3JtLndhcm5pbmdcIjpcIuWFs+mXreW5s+WPsOWwhuWFs+mXreaJgOacieW3peS9nOWMuuOAgeW6lOeUqOaIluS7u+S9leato+WcqOi/kOihjOeahOi/m+eoi+OAglwiLFwiYmFja1wiOlwi5ZCO6YCAXCIsXCJmb3J3YXJkXCI6XCLliY3ov5tcIixcInJlbG9hZFwiOlwi6YeN5paw5Yqg6L29XCIsXCJncmVlblwiOlwi57u/6ImyXCIsXCJwdXJwbGVcIjpcIue0q+iJslwiLFwib3JhbmdlXCI6XCLmqZnoibJcIixcInJlZFwiOlwi57qi6ImyXCIsXCJwaW5rXCI6XCLnsonnuqLoibJcIixcInllbGxvd1wiOlwi6buE6ImyXCIsXCJ0aGVtZS5saWdodFwiOlwi5rWF6ImyXCIsXCJ0aGVtZS5kYXJrXCI6XCLmt7HoibJcIixcInRoZW1lLnN5c3RlbVwiOlwi5LiO5pON5L2c57O757uf6K6+572u5ZCM5q2lXCIsXCJ0b29sYmFyLmhpZGVUYWJzXCI6XCLpmpDol4/pgInpobnljaFcIixcInRvb2xiYXIuc2hvd1RhYnNcIjpcIuaYvuekuumAiemhueWNoVwiLFwidG9vbGJhci5sb2NrXCI6XCLplIHlrppcIixcInRvb2xiYXIudW5sb2NrXCI6XCLop6PplIFcIixcInRvb2xiYXIuY29sb3JMaW5raW5nXCI6XCLpopzoibLpk77mjqVcIixcInRvb2xiYXIuY2hhbmdlTGF5b3V0XCI6XCLmm7TmlLnluIPlsYBcIixcInRvb2xiYXIuc2F2ZU1lbnVcIjpcIuS/neWtmOiPnOWNlVwiLFwidG9vbGJhci5tYXhpbWl6ZVdpbmRvd1wiOlwi5pyA5aSn5YyW56qX5Y+jXCIsXCJ0b29sYmFyLnJlc3RvcmVXaW5kb3dcIjpcIui/mOWOn+eql+WPo1wiLFwidG9vbGJhci5taW5pbWl6ZVdpbmRvd1wiOlwi5pyA5bCP5YyW56qX5Y+jXCIsXCJjaGFuZ2VMYXlvdXQuZnVsbFdpZHRoXCI6XCLlhajlrr1cIixcImNoYW5nZUxheW91dC5jb2x1bW5zXCI6XCLliJfmlbBcIixcImNoYW5nZUxheW91dC5Sb3dzXCI6XCLooYzmlbBcIixcImNoYW5nZUxheW91dC5HcmlkXCI6XCLnvZHmoLxcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlU3dpdGNoZWRcIjpcIuW3suWIh+aNouW3peS9nOWMulwiLFwic3VjY2Vzc0luZGljYXRvci5oaWRkZW5cIjpcIumAiemhueWNoeW3sumakOiXj1wiLFwic3VjY2Vzc0luZGljYXRvci5zaG93blwiOlwi6YCJ6aG55Y2h5bey5pi+56S6XCIsXCJzdWNjZXNzSW5kaWNhdG9yLmxvY2tlZFwiOlwi6aG16Z2i5bey6ZSB5a6aXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnVubG9ja2VkXCI6XCLpobXpnaLlt7Lop6PplIFcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlU2F2ZWRcIjpcIuW3peS9nOWMuuW3suS/neWtmFwiLFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VTYXZlZEFzXCI6XCLlt6XkvZzljLrlt7Llj6blrZjkuLoge3t3b3Jrc3BhY2V9fVwiLFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VSZW5hbWVkXCI6XCLlt6XkvZzljLrlt7Lph43lkb3lkI1cIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZVNhdmVkXCI6XCLpobXpnaLlt7Lkv53lrZhcIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZUhhc0JlZW5TYXZlZFwiOlwiXFxcXFwie3t0aXRsZX19XFxcXFwiIGhhcyBiZWVuIHNhdmVkLiBDTlwiLFwic3VjY2Vzc0luZGljYXRvci5wYWdlQ29weVNhdmVkXCI6XCLpobXpnaLlt7Llj6blrZjkuLoge3t0aXRsZX19XCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VSZW5hbWVkXCI6XCLpobXpnaLlt7Lph43lkb3lkI1cIixcInN1Y2Nlc3NJbmRpY2F0b3IuY29udGV4dEdyb3VwQXBwbGllZFwiOlwi5bey5bqU55So5LiK5LiL5paH57uEXCIsXCJzdWNjZXNzSW5kaWNhdG9yLm5hbWVkQ29udGV4dEdyb3VwQXBwbGllZFwiOlwi5bey5bqU55SoIHt7Y29sb3JOYW1lfX0g5LiK5LiL5paH57uEXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnZpZXdSZW1vdmVkXCI6XCLku47kuIrkuIvmlofnu4TkuK3np7vpmaTop4blm75cIixcInN1Y2Nlc3NJbmRpY2F0b3Iudmlld3NSZW1vdmVkXCI6XCLku47kuIrkuIvmlofnu4TkuK3np7vpmaTop4blm75cIixcInN1Y2Nlc3NJbmRpY2F0b3IubGF5b3V0QXBwbGllZFwiOlwi5bey5bqU55SoIHt7bGF5b3V0TmFtZX19IOW4g+WxgFwiLFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VEZWxldGVkXCI6XCLlt6XkvZzljLrlt7LliKDpmaRcIixcImVycm9ySW5kaWNhdG9yLnBhZ2VTYXZlRmFpbGVkXCI6XCLpobXpnaLkv53lrZjlpLHotKVcIixcImVycm9ySW5kaWNhdG9yLndvcmtzcGFjZVNhdmVGYWlsZWRcIjpcIuW3peS9nOWMuuS/neWtmOWksei0pVwiLFwiZXJyb3JJbmRpY2F0b3IuZmFpbGVkVG9EdXBsaWNhdGVQYWdlXCI6XCLlpI3liLbpobXpnaLlpLHotKVcIixcImluZm9JbmRpY2F0b3IuY29sb3JMaW5rQXR0ZW1wdFwiOlwi5oiR5Lus5bCd6K+V5a+55q2k6YCJ6aG55Y2h6L+b6KGM6aKc6Imy6ZO+5o6l77yM5L2G572R56uZL+WGheWuueaJgOacieiAheWwmuacquWQr+eUqOivpeWKn+iDvVwiLFwiZ2xvYmFsLmNhbmNlbFwiOlwi5Y+W5raIXCIsXCJnbG9iYWwuY29uZmlybVwiOlwi56Gu6K6kXCIsXCJnbG9iYWwuc2F2ZVwiOlwi5L+d5a2YXCIsXCJnbG9iYWwuZGVsZXRlXCI6XCJEZWxldGUgQ05cIixcImFwcFJlc3VsdHMuaGVhZGVyXCI6XCJGZWF0dXJlZCBDb250ZW50IENOXCIsXCJyZWNlbnRseVZpc2l0ZWQuaGVhZGVyXCI6XCJSZWNlbnRseSB2aXNpdGVkIENOXCIsXCJsYW5kaW5nUGFnZS5zdWJoZWFkZXJcIjpcIkFwcHMgYW5kIHdlYnNpdGVzIHNlbGVjdGVkIGJ5IGFuIGFkbWluIHdpbGwgc2hvdyBoZXJlIENOXCIsXCJhcmlhLm9wZW5Ccm93c2VyXCI6XCLmiZPlvIDmtY/op4jlmajoj5zljZVcIixcImFyaWEuYnJvd3NlclRhYnNcIjpcIua1j+iniOWZqOmAiemhueWNoVwiLFwiYXJpYS52aWV3VGFiXCI6XCLmn6XnnIsge3t0aXRsZX19IOeahOmAiemhueWNoVwiLFwiYXJpYS5jbG9zZVBhZ2VcIjpcIuWFs+mXrSB7e3RpdGxlfX0g55qE6aG16Z2i6YCJ6aG55Y2h5oyJ6ZKuXCIsXCJhcmlhLmNsb3NlVGFiXCI6XCLlhbPpl63pgInpobnljaEge3t0aXRsZX19XCIsXCJhcmlhLnRpdGxlXCI6XCLmoIfpophcIixcImFyaWEuY2xvc2VDb250ZXh0R3JvdXBcIjpcIuS9v+eUqOi9rOS5ieWFs+mXreS4iuS4i+aWh+e7hOmAieaLqeWvueivneahhlwiLFwiYXJpYS5jb2xvckxpbmtpbmdcIjpcIuaYvuekuuaIlumakOiXj+minOiJsumTvuaOpVwiLFwiYXJpYS5hcHBseUNvbG9yTGlua2luZ1wiOlwi6K+36YCJ5oup5LiA5Liq6KeG5Zu+5Lul5bqU55So6aKc6Imy6ZO+5o6lXCIsXCJhcmlhLmFzc2lnbkNvbG9yTGlua2luZ0N1cnJlbnRWaWV3XCI6XCLliIbphY3nu5kge3tuYW1lfX0g5LiK5LiL5paH57uE55qE5b2T5YmN6KeG5Zu+XCIsXCJhcmlhLmFzc2lnbkNvbG9yTGlua2luZ0N1cnJlbnRWaWV3c1wiOlwi5YiG6YWN57uZIHt7bmFtZX19IOS4iuS4i+aWh+e7hOeahOW9k+WJjeinhuWbvlwiLFwiYXJpYS5zZXRDb2xvckxpbmtpbmdBY3RpdmVWaWV3XCI6XCLlsIbmtLvliqjop4blm77orr7nva7kuLoge3tuYW1lfX0g5LiK5LiL5paH57uEXCIsXCJhcmlhLnNldENvbG9yTGlua2luZ0FjdGl2ZVZpZXdzXCI6XCLlsIbmtLvliqjop4blm77orr7nva7kuLoge3tuYW1lfX0g5LiK5LiL5paH57uEXCIsXCJhcmlhLmVzY2FwZUxheW91dERpYWxvZ1wiOlwi5L2/55So6L2s5LmJ5YWz6Zet5pu05pS55biD5bGA5a+56K+d5qGGXCIsXCJnbG9iYWwuc3VwZXJ0YWJcIjpcIlN1cGVydGFiIENOXCIsXCJnbG9iYWwudGFiXCI6XCJUYWIgQ05cIixcImJvb2ttYXJrcy5lZGl0Qm9va21hcmtcIjpcIkVkaXQgQm9va21hcmsgQ05cIixcImJvb2ttYXJrcy5ib29rbWFya0FkZGVkXCI6XCJCb29rbWFyayBhZGRlZCBDTlwiLFwiYm9va21hcmtzLmRvbmVcIjpcIkRvbmUgQ05cIixcImJvb2ttYXJrcy5yZW1vdmVcIjpcIlJlbW92ZSBDTlwiLFwiYm9va21hcmtzLmJvb2ttYXJrc1BhbmVsXCI6XCJCb29rbWFya3MgUGFuZWwgQ05cIixcImJvb2ttYXJrcy5jbG9zZVBhbmVsXCI6XCJDbG9zZSBCb29rbWFya3MgUGFuZWwgQ05cIixcImJvb2ttYXJrcy5ib29rbWFya3NcIjpcIkJvb2ttYXJrcyBDTlwiLFwiYm9va21hcmtzLmFsbEJvb2ttYXJrc1wiOlwiQWxsIEJvb2ttYXJrcyBDTlwiLFwiYm9va21hcmtzLmZhdm9yaXRlc1wiOlwiRmF2b3JpdGVzIENOXCIsXCJib29rbWFya3Muc2VhcmNoQm9va21hcmtzXCI6XCJTZWFyY2ggQm9va21hcmtzIENOXCIsXCJib29rbWFya3MuY2xlYXJTZWFyY2hJbnB1dFwiOlwiQ2xlYXIgU2VhcmNoIElucHV0IENOXCIsXCJib29rbWFya3MuY3JlYXRlRm9sZGVyXCI6XCJDcmVhdGUgTmV3IEZvbGRlciBDTlwiLFwiYm9va21hcmtzLmV4aXRGb2xkZXJcIjpcIkV4aXQgRm9sZGVyIENOXCIsXCJib29rbWFya3MubmV3Rm9sZGVyXCI6XCJOZXcgRm9sZGVyIENOXCIsXCJib29rbWFya3MubmFtZWRGb2xkZXJcIjpcInt7bmFtZX19IEZvbGRlciBDTlwiLFwiYm9va21hcmtzLmJvb2ttYXJrU2V0dGluZ3NcIjpcInt7bmFtZX19IEJvb2ttYXJrIFNldHRpbmdzIENOXCIsXCJib29rbWFya3MuZm9sZGVyU2V0dGluZ3NcIjpcInt7bmFtZX19IEZvbGRlciBTZXR0aW5ncyBDTlwiLFwiYm9va21hcmtzLm5vUmVzdWx0c0ZvdW5kXCI6XCJObyByZXN1bHRzIGZvdW5kIENOXCIsXCJib29rbWFya3Mubm9SZXN1bHRzRm91bmRTdWJ0ZXh0XCI6XCJUaGVyZSBhcmUgbm8gYm9va21hcmtzIHRoYXQgbWF0Y2ggeW91ciBzZWFyY2ggQ05cIixcImJvb2ttYXJrcy5ub3RoaW5nVG9TaG93XCI6XCJOb3RoaW5nIHRvIHNob3cgeWV0IENOXCIsXCJib29rbWFya3Mubm90aGluZ1RvU2hvd1N1YnRleHRcIjpcIkFkZCBhIGJvb2ttYXJrIHRvIHRoaXMgZm9sZGVyIENOXCIsXCJib29rbWFya3MucmVzdWx0c0ZvdW5kSW5cIjpcIlJlc3VsdHMgZm91bmQgaW4ge3tuYW1lfX0gQ05cIixcImJvb2ttYXJrcy5yZXN1bHRzSW5PdGhlckZvbGRlcnNcIjpcIlJlc3VsdHMgZm91bmQgaW4gb3RoZXIgZm9sZGVycyBDTlwiLFwiYm9va21hcmtzLmFsbFJlc3VsdHNGb3VuZEluXCI6XCJBbGwgcmVzdWx0cyBmb3VuZCBpbiBDTlwiLFwiYm9va21hcmtzLmVkaXROYW1lXCI6XCJFZGl0IE5hbWUgQ05cIixcImJvb2ttYXJrcy5tb3ZlXCI6XCJNb3ZlIENOXCIsXCJib29rbWFya3MuYm9va21hcmtBZGRlZFRpdGxlXCI6XCJCb29rbWFyayBBZGRlZCBDTlwiLFwiYm9va21hcmtzLmJvb2ttYXJrQWRkZWRUb0ZvbGRlclwiOlwiWW91ciBib29rbWFyayB3YXMgYWRkZWQgdG8gXFxcXFwie3tmb2xkZXJOYW1lfX1cXFxcXCIgQ05cIixcImJvb2ttYXJrcy5ib29rbWFya0VkaXRlZFRpdGxlXCI6XCJCb29rbWFyayBFZGl0ZWQgQ05cIixcImVudGVycHJpc2VDb250ZXh0TWVudS5zYXZlU3VwZXJ0YWJcIjpcIlNhdmUgU3VwZXJ0YWIgQ05cIixcImVudGVycHJpc2VDb250ZXh0TWVudS5zYXZlU3VwZXJ0YWJBc1wiOlwiU2F2ZSBTdXBlcnRhYiBBcy4uLiBDTlwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LmR1cGxpY2F0ZVwiOlwiRHVwbGljYXRlIENOXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuZGVsZXRlU3VwZXJ0YWJcIjpcIkRlbGV0ZSBTdXBlcnRhYiBDTlwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51Lm5ld1RhYlwiOlwiTmV3IFRhYiBDTlwiLFwiZW50ZXJwcmlzZVNhdmVNZW51LnNhdmVTdXBlcnRhYkFzXCI6XCJTYXZlIFN1cGVydGFiIEFzIENOXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLnJlbmFtZVN1cGVydGFiXCI6XCJSZW5hbWUgQ05cIixcImVudGVycHJpc2VTYXZlTW9kYWwudW5zYXZlZENoYW5nZXNcIjpcIllvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcyBpbiB0aGlzIFRhYi4gQ05cIixcImVudGVycHJpc2VTYXZlTW9kYWwuY2xvc2VUYWJcIjpcIkNsb3NlIFRhYiBDTlwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC5jbG9zZVN1cGVydGFiXCI6XCJDbG9zZSBTdXBlcnRhYiBDTlwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC5zYXZlU3VwZXJ0YWJDb3VudFwiOlwiU2F2ZSB7e2NvdW50fX0gU3VwZXJ0YWJzIGJlZm9yZSBjbG9zaW5nPyBDTlwiLFwiZW50ZXJwcmlzZU1vZGFsLmRpc2NhcmRTdXBlcnRhYldhcm5pbmdcIjpcIkFueSB1bnNhdmVkIGNoYW5nZXMgdG8gdGhpcyBTdXBlcnRhYiB3aWxsIGJlIGxvc3QuIENOXCIsXCJlbnRlcnByaXNlRGVsZXRlTW9kYWwuZGVsZXRlU3VwZXJ0YWJcIjpcIkRlbGV0ZSB0aGUgXFxcXFwie3t0aXRsZX19XFxcXFwiIFN1cGVydGFiPyBDTlwiLFwiZW50ZXJwcmlzZURlbGV0ZU1vZGFsLmRlbGV0ZVN1cGVydGFiV2FybmluZ1wiOlwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIFN1cGVydGFiPyBUaGlzIGFjdGlvbiBjYW5ub3QgYmUgdW5kb25lIGFuZCBpcyBwZXJtYW5lbnQuIENOXCIsXCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYlNhdmVkXCI6XCJTdXBlcnRhYiBTYXZlZCBDTlwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJIYXNCZWVuU2F2ZWRcIjpcIlxcXFxcInt7dGl0bGV9fVxcXFxcIiBTdXBlcnRhYiBoYXMgYmVlbiBzYXZlZC4gQ05cIixcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiRGVsZXRlZFwiOlwiU3VwZXJ0YWIgRGVsZXRlZCBDTlwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJIYXNCZWVuRGVsZXRlZFwiOlwiXFxcXFwie3t0aXRsZX19XFxcXFwiIFN1cGVydGFiIGhhcyBiZWVuIGRlbGV0ZWQuIENOXCIsXCJlbnRlcnByaXNlRXJyb3JJbmRpY2F0b3IuZmFpbGVkVG9EdXBsaWNhdGVUYWJcIjpcIkZhaWxlZCB0byBkdXBsaWNhdGUgVGFiIENOXCIsXCJlbnRlcnByaXNlRXJyb3JJbmRpY2F0b3IuZmFpbGVkVG9EdXBsaWNhdGVTdXBlcnRhYlwiOlwiRmFpbGVkIHRvIGR1cGxpY2F0ZSBTdXBlcnRhYiBDTlwiLFwiZW50ZXJwcmlzZUNvbW1hbmRCYXIuc3dpdGNoVG9TdXBlcnRhYlwiOlwiU3dpdGNoIHRvIFN1cGVydGFiIENOXCIsXCJlbnRlcnByaXNlQ29tbWFuZEJhci5nb1RvXCI6XCJHbyB0byB7e3R5cGV9fSBDTlwiLFwiY29udGV4dE1lbnUucXVpdEVudGVycHJpc2VCcm93c2VyXCI6XCJRdWl0IENOXCJ9JyksSW49SlNPTi5wYXJzZSgne1wiY29udGV4dE1lbnUubmV3V2luZG93XCI6XCLmlrDoppbnqpdcIixcImNvbnRleHRNZW51Lm5ld1BhZ2VcIjpcIuaWsOmggemdolwiLFwiY29udGV4dE1lbnUucmVzdG9yZVwiOlwi6YKE5Y6f5Yiw5LiK5qyh5YSy5a2Y55qE6K6K5pu0XCIsXCJjb250ZXh0TWVudS5zd2l0Y2hXb3Jrc3BhY2VcIjpcIuWIh+aPm+W3peS9nOepuumWk1wiLFwiY29udGV4dE1lbnUuYXBwZWFyYW5jZVwiOlwi5aSW6KeAXCIsXCJjb250ZXh0TWVudS5zYXZlV29ya3NwYWNlXCI6XCLlhLLlrZjlt6XkvZznqbrplpNcIixcImNvbnRleHRNZW51LnNhdmVXb3Jrc3BhY2VBc1wiOlwi5bCH5bel5L2c56m66ZaT5Y+m5a2Y54K6Li4uXCIsXCJjb250ZXh0TWVudS5yZW5hbWVXb3Jrc3BhY2VcIjpcIumHjeaWsOWRveWQjeW3peS9nOepuumWk1wiLFwiY29udGV4dE1lbnUuZGVsZXRlV29ya3NwYWNlXCI6XCLliKrpmaTlt6XkvZznqbrplpNcIixcImNvbnRleHRNZW51LmRvd25sb2Fkc1wiOlwi5LiL6LyJXCIsXCJjb250ZXh0TWVudS5zYXZlUGFnZVwiOlwi5YSy5a2Y6aCB6Z2iXCIsXCJjb250ZXh0TWVudS5zYXZlUGFnZUFzXCI6XCLlsIfpoIHpnaLlj6blrZjngrouLi5cIixcImNvbnRleHRNZW51LnByaW50XCI6XCLliJfljbAuLi5cIixcImNvbnRleHRNZW51LnByaW50U2NyZWVuXCI6XCLmk7flj5bnlavpnaJcIixcImNvbnRleHRNZW51LmNsb3NlV2luZG93XCI6XCLpl5zplonoppbnqpdcIixcImNvbnRleHRNZW51Lm9wZW5TdG9yZWZyb250XCI6XCLmiZPplosgU3RvcmVmcm9udFwiLFwiY29udGV4dE1lbnUucXVpdFBsYXRmb3JtXCI6XCLpgIDlh7rlubPlj7BcIixcImNvbnRleHRNZW51Lm5ld1ZpZXdcIjpcIuaWsOimluWcllwiLFwiY29udGV4dE1lbnUub3BlblZpZXdcIjpcIuS9v+eUqOmgkOioree2sumggeeAj+imveWZqOaJk+mWi+imluWcllwiLFwiY29udGV4dE1lbnUub3BlblZpZXdzXCI6XCLkvb/nlKjpoJDoqK3ntrLpoIHngI/opr3lmajmiZPplovoppblnJZcIixcImNvbnRleHRNZW51LnJlbG9hZFwiOlwiUmVsb2FkIFpIXCIsXCJjb250ZXh0TWVudS5yZWxvYWRWaWV3XCI6XCLph43mlrDovInlhaXoppblnJZcIixcImNvbnRleHRNZW51LnJlbG9hZFZpZXdzXCI6XCLph43mlrDovInlhaXoppblnJZcIixcImNvbnRleHRNZW51LmR1cGxpY2F0ZVwiOlwiRHVwbGljYXRlIFpIXCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVWaWV3XCI6XCLopIflr6voppblnJZcIixcImNvbnRleHRNZW51LmR1cGxpY2F0ZVZpZXdzXCI6XCLopIflr6voppblnJZcIixcImNvbnRleHRNZW51LmFkZFZpZXdcIjpcIuWwh+imluWcluaWsOWinuiHs+mgu+mBk1wiLFwiY29udGV4dE1lbnUuYWRkVmlld3NcIjpcIuWwh+imluWcluaWsOWinuiHs+mgu+mBk1wiLFwiY29udGV4dE1lbnUucmVtb3ZlVmlld1wiOlwi5b6e6aC76YGT5Lit56e76Zmk6KaW5ZyWXCIsXCJjb250ZXh0TWVudS5yZW1vdmVWaWV3c1wiOlwi5b6e6aC76YGT5Lit56e76Zmk6KaW5ZyWXCIsXCJjb250ZXh0TWVudS5jbG9zZVZpZXdcIjpcIumXnOmWieimluWcllwiLFwiY29udGV4dE1lbnUuY2xvc2VWaWV3c1wiOlwi6Zec6ZaJ6KaW5ZyWXCIsXCJjb250ZXh0TWVudS5jbG9zZVRhYlwiOlwiQ2xvc2UgVGFiIFpIXCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVQYWdlXCI6XCLopIflr6vpoIHpnaJcIixcImNvbnRleHRNZW51LnN1Ym1lbnUucHJpbnRcIjpcIuWIl+WNsFwiLFwiY29udGV4dE1lbnUuc3VibWVudS5wcmludEFsbFwiOlwi5YiX5Y2w5YWo6YOoXCIsXCJzYXZlTWVudS5zYXZlV29ya3NwYWNlQXNcIjpcIuWwh+W3peS9nOepuumWk+WPpuWtmOeCulwiLFwic2F2ZU1lbnUuc2F2ZVBhZ2VBc1wiOlwi6aCB6Z2i5Y+m5a2Y54K6XCIsXCJzYXZlTW9kYWwuZW50ZXJWYWx1ZVwiOlwiUGxlYXNlIGVudGVyIGEgdmFsdWUgWkhcIixcInNhdmVNb2RhbC5hbHJlYWR5RXhpc3RzXCI6XCJ7e3RpdGxlfX0g5bey57aT5a2Y5Zyo44CCXCIsXCJzYXZlTW9kYWwucGxlYXNlRW50ZXJWYWxpZE5hbWVcIjpcIuiri+i8uOWFpeS4gOWAi+acieaViOeahOWQjeeosVwiLFwic2F2ZU1vZGFsLnJlbmFtZVBhZ2VcIjpcIumHjeaWsOWRveWQjemggemdolwiLFwic2F2ZU1vZGFsLmNsb3NlUGFnZVwiOlwi6Zec6ZaJ6aCB6Z2iXCIsXCJzYXZlTW9kYWwuZGlzY2FyZENoYW5nZXNcIjpcIuaNqOajhOiuiuabtFwiLFwic2F2ZU1vZGFsLmRpc2NhcmRBbGxcIjpcIuWFqOmDqOaNqOajhFwiLFwic2F2ZU1vZGFsLnNhdmVBbGxcIjpcIuWEsuWtmOWFqOmDqFwiLFwic2F2ZU1vZGFsLnNhdmVQYWdlc0NvdW50XCI6XCLopoHlhYjlhLLlrZggKHt7Y291bnR9fSkg5YCL6aCB6Z2i5YaN6Zec6ZaJ5ZeO77yfXCIsXCJkZWZhdWx0UGFnZVRpdGxlXCI6XCJVbnRpdGxlZCBQYWdlIFpIXCIsXCJlbnRlcnByaXNlRGVmYXVsdFBhZ2VUaXRsZVwiOlwiVW50aXRsZWQgU3VwZXJ0YWIgWkhcIixcImFkZE5ld1BhZ2VcIjpcIk5ldyBQYWdlIFpIXCIsXCJhZGROZXdUYWJcIjpcIuaWsOWinuaWsOe0ouW8leaomeexpFwiLFwiYWRkTmV3Vmlld1wiOlwi5paw6KaW5ZyWXCIsXCJyZXN0b3JlTW9kYWxcIjpcIuaCqOeiuuWumuimgemChOWOn+WIsOS4iuasoeWEsuWtmOeahOiuiuabtOWXju+8n1wiLFwibW9kYWwuZGlzY2FyZFdhcm5pbmdcIjpcIuS7u+S9leacquWEsuWtmOeahOiuiuabtOmDveWwh+iiq+aNqOajhFwiLFwibW9kYWwuZGlzY2FyZFBhZ2VXYXJuaW5nXCI6XCLlnKjmraTpoIHpnaLku7vkvZXmnKrlhLLlrZjnmoTorormm7Tpg73lsIfpgbrlpLHjgIJcIixcIm1vZGFsLnNhdmVDaGFuZ2VzUHJvbXB0XCI6XCLopoHlhYjlhLLlrZjorormm7Tlho3pl5zplonll47vvJ9cIixcIm1vZGFsLnBhZ2VDbG9zZVwiOlwiUGFnZSBDbG9zZSBaSFwiLFwic3dpdGNoV29ya3NwYWNlTW9kYWxcIjpcIuaCqOeiuuWumuimgeWIh+aPm+WIsCB7e3dvcmtzcGFjZX1977yfXCIsXCJzd2l0Y2hXb3Jrc3BhY2VNb2RhbC53YXJuaW5nXCI6XCLku7vkvZXmnKrlhLLlrZjnmoTorormm7Tpg73lsIfooqvmjajmo4RcIixcImRlbGV0ZVdvcmtzcGFjZU1vZGFsXCI6XCLmgqjnorrlrpropoHmsLjkuYXliKrpmaTmraTlt6XkvZznqbrplpPll47vvJ9cIixcInJlcGxhY2VXb3Jrc3BhY2VNb2RhbC53YXJuaW5nXCI6XCLlhbfmnInlkI3nqLEge3t3b3Jrc3BhY2V9fSDnmoTlt6XkvZznqbrplpPlt7LntpPlrZjlnKjjgILkvaDopoHmm7Tmj5vlroPll47vvJ9cIixcInJlcGxhY2VXb3Jrc3BhY2VNb2RhbC53YXJuaW5nLmJvZHlcIjpcIuebuOWQjOWQjeeoseeahOW3peS9nOepuumWk+W3sue2k+WtmOWcqOOAguabtOaPm+Wug+W+jO+8jOWwh+acg+imhuiTi+ebruWJjeWFp+WuueOAglwiLFwicmVwbGFjZVdvcmtzcGFjZU1vZGFsLnJlcGxhY2VcIjpcIuabtOaPm1wiLFwiY2xvc2VQbGF0Zm9ybVwiOlwi6Zec6ZaJ5bmz5Y+wXCIsXCJjbG9zZVBsYXRmb3JtLndvcmtzcGFjZVwiOlwi6Zec6ZaJIHt7d29ya3NwYWNlfX0g5bmz5Y+wXCIsXCJjbG9zZVBsYXRmb3JtLndhcm5pbmdcIjpcIumXnOmWieW5s+WPsOW+jO+8jOWwh+mXnOmWieato+WcqOWft+ihjOeahOS7u+S9leW3peS9nOepuumWk+OAgUFQUCDmiJbmtYHnqIvjgIJcIixcImJhY2tcIjpcIuS4iuS4gOmggVwiLFwiZm9yd2FyZFwiOlwi5LiL5LiA6aCBXCIsXCJyZWxvYWRcIjpcIumHjeaWsOi8ieWFpVwiLFwiZ3JlZW5cIjpcIue2oFwiLFwicHVycGxlXCI6XCLntKtcIixcIm9yYW5nZVwiOlwi5qmYXCIsXCJyZWRcIjpcIue0heiJslwiLFwicGlua1wiOlwi57KJ57SFXCIsXCJ5ZWxsb3dcIjpcIum7g1wiLFwidGhlbWUubGlnaHRcIjpcIua3ulwiLFwidGhlbWUuZGFya1wiOlwi5rexXCIsXCJ0aGVtZS5zeXN0ZW1cIjpcIuiIhyBPUyDoqK3lrprlkIzmraVcIixcInRvb2xiYXIuaGlkZVRhYnNcIjpcIumaseiXj+e0ouW8leaomeexpFwiLFwidG9vbGJhci5zaG93VGFic1wiOlwi6aGv56S657Si5byV5qiZ57GkXCIsXCJ0b29sYmFyLmxvY2tcIjpcIuS4iumOllwiLFwidG9vbGJhci51bmxvY2tcIjpcIuino+mOllwiLFwidG9vbGJhci5jb2xvckxpbmtpbmdcIjpcIumhj+iJsumAo+e1kFwiLFwidG9vbGJhci5jaGFuZ2VMYXlvdXRcIjpcIuiuiuabtOeJiOmdolwiLFwidG9vbGJhci5zYXZlTWVudVwiOlwi5YSy5a2Y6YG45ZauXCIsXCJ0b29sYmFyLm1heGltaXplV2luZG93XCI6XCLmnIDlpKfljJboppbnqpdcIixcInRvb2xiYXIucmVzdG9yZVdpbmRvd1wiOlwi6YKE5Y6f6KaW56qXXCIsXCJ0b29sYmFyLm1pbmltaXplV2luZG93XCI6XCLmnIDlsI/ljJboppbnqpdcIixcImNoYW5nZUxheW91dC5mdWxsV2lkdGhcIjpcIuWFqOieouW5leWvrOW6plwiLFwiY2hhbmdlTGF5b3V0LmNvbHVtbnNcIjpcIuihjFwiLFwiY2hhbmdlTGF5b3V0LlJvd3NcIjpcIuWIl1wiLFwiY2hhbmdlTGF5b3V0LkdyaWRcIjpcIue2suagvFwiLFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VTd2l0Y2hlZFwiOlwi5bel5L2c56m66ZaT5bey5YiH5o+bXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmhpZGRlblwiOlwi57Si5byV5qiZ57Gk5bey6Zqx6JePXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnNob3duXCI6XCLntKLlvJXmqJnnsaTlt7Lpoa/npLpcIixcInN1Y2Nlc3NJbmRpY2F0b3IubG9ja2VkXCI6XCLpoIHpnaLlt7LkuIrpjpZcIixcInN1Y2Nlc3NJbmRpY2F0b3IudW5sb2NrZWRcIjpcIumggemdouW3suino+mOllwiLFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VTYXZlZFwiOlwi5bel5L2c56m66ZaT5bey5YSy5a2YXCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZVNhdmVkQXNcIjpcIuW3peS9nOepuumWk+W3suWPpuWtmOeCuiB7e3dvcmtzcGFjZX19XCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZVJlbmFtZWRcIjpcIuW3peS9nOepuumWk+W3sumHjeaWsOWRveWQjVwiLFwic3VjY2Vzc0luZGljYXRvci5wYWdlU2F2ZWRcIjpcIumggemdouW3suWEsuWtmFwiLFwic3VjY2Vzc0luZGljYXRvci5wYWdlSGFzQmVlblNhdmVkXCI6XCJcXFxcXCJ7e3RpdGxlfX1cXFxcXCIgaGFzIGJlZW4gc2F2ZWQuIFpIXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VDb3B5U2F2ZWRcIjpcIumggemdouW3suWPpuWtmOeCuiB7e3RpdGxlfX1cIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZVJlbmFtZWRcIjpcIumggemdouW3sumHjeaWsOWRveWQjVwiLFwic3VjY2Vzc0luZGljYXRvci5jb250ZXh0R3JvdXBBcHBsaWVkXCI6XCLohIjntaHnvqTntYTlt7LlpZfnlKhcIixcInN1Y2Nlc3NJbmRpY2F0b3IubmFtZWRDb250ZXh0R3JvdXBBcHBsaWVkXCI6XCJ7e2NvbG9yTmFtZX19IOiEiOe1oee+pOe1hOW3suWll+eUqFwiLFwic3VjY2Vzc0luZGljYXRvci52aWV3UmVtb3ZlZFwiOlwi5b6e6ISI57Wh576k57WE5Lit56e76Zmk55qE6KaW5ZyWXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnZpZXdzUmVtb3ZlZFwiOlwi5b6e6ISI57Wh576k57WE5Lit56e76Zmk55qE6KaW5ZyWXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmxheW91dEFwcGxpZWRcIjpcInt7bGF5b3V0TmFtZX19IOeJiOmdouW3suWll+eUqFwiLFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VEZWxldGVkXCI6XCLlt6XkvZznqbrplpPlt7LliKrpmaRcIixcImVycm9ySW5kaWNhdG9yLnBhZ2VTYXZlRmFpbGVkXCI6XCLpoIHpnaLnhKHms5XlhLLlrZhcIixcImVycm9ySW5kaWNhdG9yLndvcmtzcGFjZVNhdmVGYWlsZWRcIjpcIuW3peS9nOepuumWk+eEoeazleWEsuWtmFwiLFwiZXJyb3JJbmRpY2F0b3IuZmFpbGVkVG9EdXBsaWNhdGVQYWdlXCI6XCLnhKHms5XopIflr6vpoIHpnaJcIixcImluZm9JbmRpY2F0b3IuY29sb3JMaW5rQXR0ZW1wdFwiOlwi5oiR5YCR5ZiX6Kmm5bCN5q2k57Si5byV5qiZ57Gk6YCy6KGM6aGP6Imy6YCj57WQ77yM5L2G57ay56uZL+WFp+WuueaJgOacieiAheWwmuacquWVn+eUqOipsuWKn+iDvVwiLFwiZ2xvYmFsLmNhbmNlbFwiOlwi5Y+W5raIXCIsXCJnbG9iYWwuY29uZmlybVwiOlwi56K66KqNXCIsXCJnbG9iYWwuc2F2ZVwiOlwi5YSy5a2YXCIsXCJnbG9iYWwuZGVsZXRlXCI6XCJEZWxldGUgWkhcIixcImFwcFJlc3VsdHMuaGVhZGVyXCI6XCJGZWF0dXJlZCBDb250ZW50IFpIXCIsXCJyZWNlbnRseVZpc2l0ZWQuaGVhZGVyXCI6XCJSZWNlbnRseSB2aXNpdGVkIFpIXCIsXCJsYW5kaW5nUGFnZS5zdWJoZWFkZXJcIjpcIkFwcHMgYW5kIHdlYnNpdGVzIHNlbGVjdGVkIGJ5IGFuIGFkbWluIHdpbGwgc2hvdyBoZXJlIFpIXCIsXCJhcmlhLm9wZW5Ccm93c2VyXCI6XCLplovllZ/ngI/opr3lmajpgbjllq5cIixcImFyaWEuYnJvd3NlclRhYnNcIjpcIueAj+imveWZqOe0ouW8leaomeexpFwiLFwiYXJpYS52aWV3VGFiXCI6XCJ7e3RpdGxlfX0g55qE6KaW5ZyW57Si5byV5qiZ57GkXCIsXCJhcmlhLmNsb3NlUGFnZVwiOlwi6Zec6ZaJIHt7dGl0bGV9fSDnmoTpoIHpnaLntKLlvJXmqJnnsaTmjInpiJVcIixcImFyaWEuY2xvc2VUYWJcIjpcIumXnOmWiee0ouW8leaomeexpCB7e3RpdGxlfX1cIixcImFyaWEudGl0bGVcIjpcIuaomemhjFwiLFwiYXJpYS5jbG9zZUNvbnRleHRHcm91cFwiOlwi5L2/55SoIEVzYyDpjbXpl5zplonohIjntaHnvqTntYTpgbjlj5blsI3oqbHmoYZcIixcImFyaWEuY29sb3JMaW5raW5nXCI6XCLpoa/npLrmiJbpmrHol4/poY/oibLpgKPntZBcIixcImFyaWEuYXBwbHlDb2xvckxpbmtpbmdcIjpcIuiri+mBuOWPluimgeWll+eUqOmhj+iJsumAo+e1kOeahOimluWcllwiLFwiYXJpYS5hc3NpZ25Db2xvckxpbmtpbmdDdXJyZW50Vmlld1wiOlwi55uu5YmN6KaW5ZyW5YiG6YWN57WmIHt7bmFtZX19IOiEiOe1oee+pOe1hFwiLFwiYXJpYS5hc3NpZ25Db2xvckxpbmtpbmdDdXJyZW50Vmlld3NcIjpcIuebruWJjeimluWcluWIhumFjee1piB7e25hbWV9fSDohIjntaHnvqTntYRcIixcImFyaWEuc2V0Q29sb3JMaW5raW5nQWN0aXZlVmlld1wiOlwi5bCH5ZWf55So6KaW5ZyW6Kit5a6a54K6IHt7bmFtZX19IOiEiOe1oee+pOe1hFwiLFwiYXJpYS5zZXRDb2xvckxpbmtpbmdBY3RpdmVWaWV3c1wiOlwi5bCH5ZWf55So6KaW5ZyW6Kit5a6a54K6IHt7bmFtZX19IOiEiOe1oee+pOe1hFwiLFwiYXJpYS5lc2NhcGVMYXlvdXREaWFsb2dcIjpcIuS9v+eUqCBFc2Mg6Y216Zec6ZaJ6K6K5pu054mI6Z2i5bCN6Kmx5qGGXCIsXCJnbG9iYWwuc3VwZXJ0YWJcIjpcIlN1cGVydGFiIFpIXCIsXCJnbG9iYWwudGFiXCI6XCJUYWIgWkhcIixcImJvb2ttYXJrcy5lZGl0Qm9va21hcmtcIjpcIkVkaXQgQm9va21hcmsgWkhcIixcImJvb2ttYXJrcy5ib29rbWFya0FkZGVkXCI6XCJCb29rbWFyayBhZGRlZCBaSFwiLFwiYm9va21hcmtzLmRvbmVcIjpcIkRvbmUgWkhcIixcImJvb2ttYXJrcy5yZW1vdmVcIjpcIlJlbW92ZSBaSFwiLFwiYm9va21hcmtzLmJvb2ttYXJrc1BhbmVsXCI6XCJCb29rbWFya3MgUGFuZWwgWkhcIixcImJvb2ttYXJrcy5jbG9zZVBhbmVsXCI6XCJDbG9zZSBCb29rbWFya3MgUGFuZWwgWkhcIixcImJvb2ttYXJrcy5ib29rbWFya3NcIjpcIkJvb2ttYXJrcyBaSFwiLFwiYm9va21hcmtzLmFsbEJvb2ttYXJrc1wiOlwiQWxsIEJvb2ttYXJrcyBaSFwiLFwiYm9va21hcmtzLmZhdm9yaXRlc1wiOlwiRmF2b3JpdGVzIFpIXCIsXCJib29rbWFya3Muc2VhcmNoQm9va21hcmtzXCI6XCJTZWFyY2ggQm9va21hcmtzIFpIXCIsXCJib29rbWFya3MuY2xlYXJTZWFyY2hJbnB1dFwiOlwiQ2xlYXIgU2VhcmNoIElucHV0IFpIXCIsXCJib29rbWFya3MuY3JlYXRlRm9sZGVyXCI6XCJDcmVhdGUgTmV3IEZvbGRlciBaSFwiLFwiYm9va21hcmtzLmV4aXRGb2xkZXJcIjpcIkV4aXQgRm9sZGVyIFpIXCIsXCJib29rbWFya3MubmV3Rm9sZGVyXCI6XCJOZXcgRm9sZGVyIFpIXCIsXCJib29rbWFya3MubmFtZWRGb2xkZXJcIjpcInt7bmFtZX19IEZvbGRlciBaSFwiLFwiYm9va21hcmtzLmJvb2ttYXJrU2V0dGluZ3NcIjpcInt7bmFtZX19IEJvb2ttYXJrIFNldHRpbmdzIFpIXCIsXCJib29rbWFya3MuZm9sZGVyU2V0dGluZ3NcIjpcInt7bmFtZX19IEZvbGRlciBTZXR0aW5ncyBaSFwiLFwiYm9va21hcmtzLm5vUmVzdWx0c0ZvdW5kXCI6XCJObyByZXN1bHRzIGZvdW5kIFpIXCIsXCJib29rbWFya3Mubm9SZXN1bHRzRm91bmRTdWJ0ZXh0XCI6XCJUaGVyZSBhcmUgbm8gYm9va21hcmtzIHRoYXQgbWF0Y2ggeW91ciBzZWFyY2ggWkhcIixcImJvb2ttYXJrcy5ub3RoaW5nVG9TaG93XCI6XCJOb3RoaW5nIHRvIHNob3cgeWV0IFpIXCIsXCJib29rbWFya3Mubm90aGluZ1RvU2hvd1N1YnRleHRcIjpcIkFkZCBhIGJvb2ttYXJrIHRvIHRoaXMgZm9sZGVyIFpIXCIsXCJib29rbWFya3MucmVzdWx0c0ZvdW5kSW5cIjpcIlJlc3VsdHMgZm91bmQgaW4ge3tuYW1lfX0gWkhcIixcImJvb2ttYXJrcy5yZXN1bHRzSW5PdGhlckZvbGRlcnNcIjpcIlJlc3VsdHMgZm91bmQgaW4gb3RoZXIgZm9sZGVycyBaSFwiLFwiYm9va21hcmtzLmFsbFJlc3VsdHNGb3VuZEluXCI6XCJBbGwgcmVzdWx0cyBmb3VuZCBpbiBaSFwiLFwiYm9va21hcmtzLmVkaXROYW1lXCI6XCJFZGl0IE5hbWUgWkhcIixcImJvb2ttYXJrcy5tb3ZlXCI6XCJNb3ZlIFpIXCIsXCJib29rbWFya3MuYm9va21hcmtBZGRlZFRpdGxlXCI6XCJCb29rbWFyayBBZGRlZCBaSFwiLFwiYm9va21hcmtzLmJvb2ttYXJrQWRkZWRUb0ZvbGRlclwiOlwiWW91ciBib29rbWFyayB3YXMgYWRkZWQgdG8gXFxcXFwie3tmb2xkZXJOYW1lfX1cXFxcXCIgWkhcIixcImJvb2ttYXJrcy5ib29rbWFya0VkaXRlZFRpdGxlXCI6XCJCb29rbWFyayBFZGl0ZWQgWkhcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5zYXZlU3VwZXJ0YWJcIjpcIlNhdmUgU3VwZXJ0YWIgWkhcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5zYXZlU3VwZXJ0YWJBc1wiOlwiU2F2ZSBTdXBlcnRhYiBBcy4uLiBaSFwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LmR1cGxpY2F0ZVwiOlwiRHVwbGljYXRlIFpIXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuZGVsZXRlU3VwZXJ0YWJcIjpcIkRlbGV0ZSBTdXBlcnRhYiBaSFwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51Lm5ld1RhYlwiOlwiTmV3IFRhYiBaSFwiLFwiZW50ZXJwcmlzZVNhdmVNZW51LnNhdmVTdXBlcnRhYkFzXCI6XCJTYXZlIFN1cGVydGFiIEFzIFpIXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLnJlbmFtZVN1cGVydGFiXCI6XCJSZW5hbWUgWkhcIixcImVudGVycHJpc2VTYXZlTW9kYWwudW5zYXZlZENoYW5nZXNcIjpcIllvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcyBpbiB0aGlzIFRhYi4gWkhcIixcImVudGVycHJpc2VTYXZlTW9kYWwuY2xvc2VUYWJcIjpcIkNsb3NlIFRhYiBaSFwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC5jbG9zZVN1cGVydGFiXCI6XCJDbG9zZSBTdXBlcnRhYiBaSFwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC5zYXZlU3VwZXJ0YWJDb3VudFwiOlwiU2F2ZSB7e2NvdW50fX0gU3VwZXJ0YWJzIGJlZm9yZSBjbG9zaW5nPyBaSFwiLFwiZW50ZXJwcmlzZU1vZGFsLmRpc2NhcmRTdXBlcnRhYldhcm5pbmdcIjpcIkFueSB1bnNhdmVkIGNoYW5nZXMgdG8gdGhpcyBTdXBlcnRhYiB3aWxsIGJlIGxvc3QuIFpIXCIsXCJlbnRlcnByaXNlRGVsZXRlTW9kYWwuZGVsZXRlU3VwZXJ0YWJcIjpcIkRlbGV0ZSB0aGUgXFxcXFwie3t0aXRsZX19XFxcXFwiIFN1cGVydGFiPyBaSFwiLFwiZW50ZXJwcmlzZURlbGV0ZU1vZGFsLmRlbGV0ZVN1cGVydGFiV2FybmluZ1wiOlwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIFN1cGVydGFiPyBUaGlzIGFjdGlvbiBjYW5ub3QgYmUgdW5kb25lIGFuZCBpcyBwZXJtYW5lbnQuIFpIXCIsXCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYlNhdmVkXCI6XCJTdXBlcnRhYiBTYXZlZCBaSFwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJIYXNCZWVuU2F2ZWRcIjpcIlxcXFxcInt7dGl0bGV9fVxcXFxcIiBTdXBlcnRhYiBoYXMgYmVlbiBzYXZlZC4gWkhcIixcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiRGVsZXRlZFwiOlwiU3VwZXJ0YWIgRGVsZXRlZCBaSFwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJIYXNCZWVuRGVsZXRlZFwiOlwiXFxcXFwie3t0aXRsZX19XFxcXFwiIFN1cGVydGFiIGhhcyBiZWVuIGRlbGV0ZWQuIFpIXCIsXCJlbnRlcnByaXNlRXJyb3JJbmRpY2F0b3IuZmFpbGVkVG9EdXBsaWNhdGVUYWJcIjpcIkZhaWxlZCB0byBkdXBsaWNhdGUgVGFiIFpIXCIsXCJlbnRlcnByaXNlRXJyb3JJbmRpY2F0b3IuZmFpbGVkVG9EdXBsaWNhdGVTdXBlcnRhYlwiOlwiRmFpbGVkIHRvIGR1cGxpY2F0ZSBTdXBlcnRhYiBaSFwiLFwiZW50ZXJwcmlzZUNvbW1hbmRCYXIuc3dpdGNoVG9TdXBlcnRhYlwiOlwiU3dpdGNoIHRvIFN1cGVydGFiIFpIXCIsXCJlbnRlcnByaXNlQ29tbWFuZEJhci5nb1RvXCI6XCJHbyB0byB7e3R5cGV9fSBaSFwiLFwiY29udGV4dE1lbnUucXVpdEVudGVycHJpc2VCcm93c2VyXCI6XCJRdWl0IFpIXCJ9JyksVm49SlNPTi5wYXJzZSgne1wiY29udGV4dE1lbnUubmV3V2luZG93XCI6XCJOZXcgV2luZG93XCIsXCJjb250ZXh0TWVudS5uZXdQYWdlXCI6XCJOZXcgUGFnZVwiLFwiY29udGV4dE1lbnUucmVzdG9yZVwiOlwiUmVzdG9yZSB0byBMYXN0IFNhdmVkIENoYW5nZXNcIixcImNvbnRleHRNZW51LnN3aXRjaFdvcmtzcGFjZVwiOlwiU3dpdGNoIFdvcmtzcGFjZVwiLFwiY29udGV4dE1lbnUuYXBwZWFyYW5jZVwiOlwiQXBwZWFyYW5jZVwiLFwiY29udGV4dE1lbnUuc2F2ZVdvcmtzcGFjZVwiOlwiU2F2ZSBXb3Jrc3BhY2VcIixcImNvbnRleHRNZW51LnNhdmVXb3Jrc3BhY2VBc1wiOlwiU2F2ZSBXb3Jrc3BhY2UgQXMuLi5cIixcImNvbnRleHRNZW51LnJlbmFtZVdvcmtzcGFjZVwiOlwiUmVuYW1lIFdvcmtzcGFjZVwiLFwiY29udGV4dE1lbnUuZGVsZXRlV29ya3NwYWNlXCI6XCJEZWxldGUgV29ya3NwYWNlXCIsXCJjb250ZXh0TWVudS5kb3dubG9hZHNcIjpcIkRvd25sb2Fkc1wiLFwiY29udGV4dE1lbnUuc2F2ZVBhZ2VcIjpcIlNhdmUgUGFnZVwiLFwiY29udGV4dE1lbnUuc2F2ZVBhZ2VBc1wiOlwiU2F2ZSBQYWdlIEFzLi4uXCIsXCJjb250ZXh0TWVudS5wcmludFwiOlwiUHJpbnQuLi5cIixcImNvbnRleHRNZW51LnByaW50U2NyZWVuXCI6XCJQcmludCBTY3JlZW5cIixcImNvbnRleHRNZW51LmNsb3NlV2luZG93XCI6XCJDbG9zZSBXaW5kb3dcIixcImNvbnRleHRNZW51Lm9wZW5TdG9yZWZyb250XCI6XCJPcGVuIFN0b3JlZnJvbnRcIixcImNvbnRleHRNZW51LnF1aXRQbGF0Zm9ybVwiOlwiUXVpdCB7e3BsYXRmb3JtTGFiZWx9fVwiLFwiY29udGV4dE1lbnUubmV3Vmlld1wiOlwiTmV3IFZpZXdcIixcImNvbnRleHRNZW51Lm9wZW5WaWV3XCI6XCJPcGVuIFZpZXcgd2l0aCBEZWZhdWx0IFdlYiBCcm93c2VyXCIsXCJjb250ZXh0TWVudS5vcGVuVmlld3NcIjpcIk9wZW4gVmlld3Mgd2l0aCBEZWZhdWx0IFdlYiBCcm93c2VyXCIsXCJjb250ZXh0TWVudS5yZWxvYWRcIjpcIlJlbG9hZFwiLFwiY29udGV4dE1lbnUucmVsb2FkVmlld1wiOlwiUmVsb2FkIFZpZXdcIixcImNvbnRleHRNZW51LnJlbG9hZFZpZXdzXCI6XCJSZWxvYWQgVmlld3NcIixcImNvbnRleHRNZW51LmR1cGxpY2F0ZVwiOlwiRHVwbGljYXRlXCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVWaWV3XCI6XCJEdXBsaWNhdGUgVmlld1wiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlVmlld3NcIjpcIkR1cGxpY2F0ZSBWaWV3c1wiLFwiY29udGV4dE1lbnUuYWRkVmlld1wiOlwiQWRkIFZpZXcgdG8gQ2hhbm5lbFwiLFwiY29udGV4dE1lbnUuYWRkVmlld3NcIjpcIkFkZCBWaWV3cyB0byBDaGFubmVsXCIsXCJjb250ZXh0TWVudS5yZW1vdmVWaWV3XCI6XCJSZW1vdmUgVmlldyBmcm9tIENoYW5uZWxcIixcImNvbnRleHRNZW51LnJlbW92ZVZpZXdzXCI6XCJSZW1vdmUgVmlld3MgZnJvbSBDaGFubmVsXCIsXCJjb250ZXh0TWVudS5jbG9zZVZpZXdcIjpcIkNsb3NlIFZpZXdcIixcImNvbnRleHRNZW51LmNsb3NlVmlld3NcIjpcIkNsb3NlIFZpZXdzXCIsXCJjb250ZXh0TWVudS5jbG9zZVRhYlwiOlwiQ2xvc2UgVGFiXCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVQYWdlXCI6XCJEdXBsaWNhdGUgUGFnZVwiLFwiY29udGV4dE1lbnUuc3VibWVudS5wcmludFwiOlwiUHJpbnRcIixcImNvbnRleHRNZW51LnN1Ym1lbnUucHJpbnRBbGxcIjpcIlByaW50IEFsbFwiLFwic2F2ZU1lbnUuc2F2ZVdvcmtzcGFjZUFzXCI6XCJTYXZlIFdvcmtzcGFjZSBBc1wiLFwic2F2ZU1lbnUuc2F2ZVBhZ2VBc1wiOlwiU2F2ZSBQYWdlIEFzXCIsXCJzYXZlTW9kYWwuZW50ZXJWYWx1ZVwiOlwiUGxlYXNlIGVudGVyIGEgdmFsdWVcIixcInNhdmVNb2RhbC5hbHJlYWR5RXhpc3RzXCI6XCJ7e3RpdGxlfX0gYWxyZWFkeSBleGlzdHMuXCIsXCJzYXZlTW9kYWwucGxlYXNlRW50ZXJWYWxpZE5hbWVcIjpcIlBsZWFzZSBlbnRlciBhIHZhbGlkIG5hbWVcIixcInNhdmVNb2RhbC5yZW5hbWVQYWdlXCI6XCJSZW5hbWUgUGFnZVwiLFwic2F2ZU1vZGFsLmNsb3NlUGFnZVwiOlwiQ2xvc2UgUGFnZVwiLFwic2F2ZU1vZGFsLmRpc2NhcmRDaGFuZ2VzXCI6XCJEaXNjYXJkIENoYW5nZXNcIixcInNhdmVNb2RhbC5kaXNjYXJkQWxsXCI6XCJEaXNjYXJkIEFsbFwiLFwic2F2ZU1vZGFsLnNhdmVBbGxcIjpcIlNhdmUgQWxsXCIsXCJzYXZlTW9kYWwuc2F2ZVBhZ2VzQ291bnRcIjpcIlNhdmUgKHt7Y291bnR9fSkgcGFnZXMgYmVmb3JlIGNsb3Npbmc/XCIsXCJkZWZhdWx0UGFnZVRpdGxlXCI6XCJVbnRpdGxlZCBQYWdlXCIsXCJlbnRlcnByaXNlRGVmYXVsdFBhZ2VUaXRsZVwiOlwiVW50aXRsZWQgU3VwZXJ0YWJcIixcImFkZE5ld1BhZ2VcIjpcIk5ldyBQYWdlXCIsXCJhZGROZXdUYWJcIjpcIkFkZCBOZXcgVGFiXCIsXCJhZGROZXdWaWV3XCI6XCJOZXcgVmlld1wiLFwicmVzdG9yZU1vZGFsXCI6XCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcmVzdG9yZSB0byBsYXN0IHNhdmVkIGNoYW5nZXM/XCIsXCJtb2RhbC5kaXNjYXJkV2FybmluZ1wiOlwiQW55IHVuc2F2ZWQgY2hhbmdlcyB3aWxsIGJlIGRpc2NhcmRlZFwiLFwibW9kYWwuZGlzY2FyZFBhZ2VXYXJuaW5nXCI6XCJBbnkgdW5zYXZlZCBjaGFuZ2VzIHRvIHRoaXMgcGFnZSB3aWxsIGJlIGxvc3QuXCIsXCJtb2RhbC5zYXZlQ2hhbmdlc1Byb21wdFwiOlwiU2F2ZSBjaGFuZ2VzIGJlZm9yZSBjbG9zaW5nP1wiLFwibW9kYWwucGFnZUNsb3NlXCI6XCJQYWdlIENsb3NlXCIsXCJzd2l0Y2hXb3Jrc3BhY2VNb2RhbFwiOlwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHN3aXRjaCB0byB7e3dvcmtzcGFjZX19P1wiLFwic3dpdGNoV29ya3NwYWNlTW9kYWwud2FybmluZ1wiOlwiQW55IHVuc2F2ZWQgY2hhbmdlcyB3aWxsIGJlIGRpc2NhcmRlZFwiLFwiZGVsZXRlV29ya3NwYWNlTW9kYWxcIjpcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBwZXJtYW5lbnRseSBkZWxldGUgdGhpcyB3b3Jrc3BhY2U/XCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwud2FybmluZ1wiOlwiQSBXb3Jrc3BhY2Ugd2l0aCB0aGUgbmFtZSB7e3dvcmtzcGFjZX19IGFscmVhZHkgZXhpc3RzLiBEbyB5b3Ugd2FudCB0byByZXBsYWNlIGl0P1wiLFwicmVwbGFjZVdvcmtzcGFjZU1vZGFsLndhcm5pbmcuYm9keVwiOlwiQSB3b3Jrc3BhY2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzLiBSZXBsYWNpbmcgaXQgd2lsbCBvdmVyd3JpdGUgaXRzIGN1cnJlbnQgY29udGVudHMuXCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwucmVwbGFjZVwiOlwiUmVwbGFjZVwiLFwiY2xvc2VQbGF0Zm9ybVwiOlwiQ2xvc2UgdGhlIHBsYXRmb3JtXCIsXCJjbG9zZVBsYXRmb3JtLndvcmtzcGFjZVwiOlwiQ2xvc2UgdGhlIHt7d29ya3NwYWNlfX0gUGxhdGZvcm1cIixcImNsb3NlUGxhdGZvcm0ud2FybmluZ1wiOlwiQ2xvc2luZyBhIHBsYXRmb3JtIHdpbGwgY2xvc2UgYW55IHdvcmtzcGFjZXMsIGFwcHMgb3IgYW55IHByb2Nlc3NlcyB0aGF0IGFyZSBydW5uaW5nLlwiLFwiYmFja1wiOlwiQmFja1wiLFwiZm9yd2FyZFwiOlwiRm9yd2FyZFwiLFwicmVsb2FkXCI6XCJSZWxvYWRcIixcImdyZWVuXCI6XCJHcmVlblwiLFwicHVycGxlXCI6XCJQdXJwbGVcIixcIm9yYW5nZVwiOlwiT3JhbmdlXCIsXCJyZWRcIjpcIlJlZFwiLFwicGlua1wiOlwiUGlua1wiLFwieWVsbG93XCI6XCJZZWxsb3dcIixcInRoZW1lLmxpZ2h0XCI6XCJMaWdodFwiLFwidGhlbWUuZGFya1wiOlwiRGFya1wiLFwidGhlbWUuc3lzdGVtXCI6XCJTeW5jIHdpdGggT1Mgc2V0dGluZ1wiLFwidG9vbGJhci5oaWRlVGFic1wiOlwiSGlkZSBUYWJzXCIsXCJ0b29sYmFyLnNob3dUYWJzXCI6XCJTaG93IFRhYnNcIixcInRvb2xiYXIubG9ja1wiOlwiTG9ja1wiLFwidG9vbGJhci51bmxvY2tcIjpcIlVubG9ja1wiLFwidG9vbGJhci5jb2xvckxpbmtpbmdcIjpcIkNvbG9yIExpbmtpbmdcIixcInRvb2xiYXIuY2hhbmdlTGF5b3V0XCI6XCJDaGFuZ2UgTGF5b3V0XCIsXCJ0b29sYmFyLnNhdmVNZW51XCI6XCJTYXZlIE1lbnVcIixcInRvb2xiYXIubWF4aW1pemVXaW5kb3dcIjpcIk1heGltaXplIFdpbmRvd1wiLFwidG9vbGJhci5yZXN0b3JlV2luZG93XCI6XCJSZXN0b3JlIFdpbmRvd1wiLFwidG9vbGJhci5taW5pbWl6ZVdpbmRvd1wiOlwiTWluaW1pemUgV2luZG93XCIsXCJjaGFuZ2VMYXlvdXQuZnVsbFdpZHRoXCI6XCJGdWxsIFdpZHRoXCIsXCJjaGFuZ2VMYXlvdXQuY29sdW1uc1wiOlwiQ29sdW1uc1wiLFwiY2hhbmdlTGF5b3V0LlJvd3NcIjpcIlJvd3NcIixcImNoYW5nZUxheW91dC5HcmlkXCI6XCJHcmlkXCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZVN3aXRjaGVkXCI6XCJXb3Jrc3BhY2UgU3dpdGNoZWRcIixcInN1Y2Nlc3NJbmRpY2F0b3IuaGlkZGVuXCI6XCJUYWJzIGFyZSBIaWRkZW5cIixcInN1Y2Nlc3NJbmRpY2F0b3Iuc2hvd25cIjpcIlRhYnMgYXJlIFNob3duXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmxvY2tlZFwiOlwiUGFnZSBpcyBMb2NrZWRcIixcInN1Y2Nlc3NJbmRpY2F0b3IudW5sb2NrZWRcIjpcIlBhZ2UgaXMgVW5sb2NrZWRcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlU2F2ZWRcIjpcIldvcmtzcGFjZSBzYXZlZFwiLFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VTYXZlZEFzXCI6XCJXb3Jrc3BhY2Ugc2F2ZWQgYXMge3t3b3Jrc3BhY2V9fVwiLFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VSZW5hbWVkXCI6XCJXb3Jrc3BhY2UgcmVuYW1lZFwiLFwic3VjY2Vzc0luZGljYXRvci5wYWdlU2F2ZWRcIjpcIlBhZ2UgU2F2ZWRcIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZUhhc0JlZW5TYXZlZFwiOlwiXFxcXFwie3t0aXRsZX19XFxcXFwiIGhhcyBiZWVuIHNhdmVkLlwiLFwic3VjY2Vzc0luZGljYXRvci5wYWdlQ29weVNhdmVkXCI6XCJQYWdlIHNhdmVkIGFzIHt7dGl0bGV9fVwiLFwic3VjY2Vzc0luZGljYXRvci5wYWdlUmVuYW1lZFwiOlwiUGFnZSByZW5hbWVkXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmNvbnRleHRHcm91cEFwcGxpZWRcIjpcIkNvbnRleHQgZ3JvdXAgYXBwbGllZFwiLFwic3VjY2Vzc0luZGljYXRvci5uYW1lZENvbnRleHRHcm91cEFwcGxpZWRcIjpcInt7Y29sb3JOYW1lfX0gY29udGV4dCBncm91cCBhcHBsaWVkXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnZpZXdSZW1vdmVkXCI6XCJWaWV3IHJlbW92ZWQgZnJvbSBjb250ZXh0IGdyb3VwXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnZpZXdzUmVtb3ZlZFwiOlwiVmlld3MgcmVtb3ZlZCBmcm9tIGNvbnRleHQgZ3JvdXBcIixcInN1Y2Nlc3NJbmRpY2F0b3IubGF5b3V0QXBwbGllZFwiOlwie3tsYXlvdXROYW1lfX0gbGF5b3V0IGFwcGxpZWRcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlRGVsZXRlZFwiOlwiV29ya3NwYWNlIGRlbGV0ZWRcIixcImVycm9ySW5kaWNhdG9yLnBhZ2VTYXZlRmFpbGVkXCI6XCJQYWdlIGZhaWxlZCB0byBzYXZlXCIsXCJlcnJvckluZGljYXRvci53b3Jrc3BhY2VTYXZlRmFpbGVkXCI6XCJXb3Jrc3BhY2UgZmFpbGVkIHRvIHNhdmVcIixcImVycm9ySW5kaWNhdG9yLmZhaWxlZFRvRHVwbGljYXRlUGFnZVwiOlwiRmFpbGVkIHRvIGR1cGxpY2F0ZSBQYWdlXCIsXCJpbmZvSW5kaWNhdG9yLmNvbG9yTGlua0F0dGVtcHRcIjpcIldlIGF0dGVtcHRlZCB0byBjb2xvciBsaW5rIHRoaXMgdGFiLCBidXQgdGhlIHNpdGUvY29udGVudCBvd25lciBoYXMgbm90IGVuYWJsZWQgaXQgeWV0XCIsXCJnbG9iYWwuY2FuY2VsXCI6XCJDYW5jZWxcIixcImdsb2JhbC5jb25maXJtXCI6XCJDb25maXJtXCIsXCJnbG9iYWwuc2F2ZVwiOlwiU2F2ZVwiLFwiZ2xvYmFsLmRlbGV0ZVwiOlwiRGVsZXRlXCIsXCJhcHBSZXN1bHRzLmhlYWRlclwiOlwiRmVhdHVyZWQgQ29udGVudFwiLFwicmVjZW50bHlWaXNpdGVkLmhlYWRlclwiOlwiUmVjZW50bHkgdmlzaXRlZFwiLFwibGFuZGluZ1BhZ2Uuc3ViaGVhZGVyXCI6XCJBcHBzIGFuZCB3ZWJzaXRlcyBzZWxlY3RlZCBieSBhbiBhZG1pbiB3aWxsIHNob3cgaGVyZVwiLFwiYXJpYS5vcGVuQnJvd3NlclwiOlwiT3BlbiBCcm93c2VyIE1lbnVcIixcImFyaWEuYnJvd3NlclRhYnNcIjpcIkJyb3dzZXIgVGFic1wiLFwiYXJpYS52aWV3VGFiXCI6XCJWaWV3IFRhYiBmb3Ige3t0aXRsZX19XCIsXCJhcmlhLmNsb3NlUGFnZVwiOlwiQ2xvc2UgUGFnZSBUYWIgQnV0dG9uIGZvciB7e3RpdGxlfX1cIixcImFyaWEuY2xvc2VUYWJcIjpcIkNsb3NlIFRhYiB7e3RpdGxlfX1cIixcImFyaWEudGl0bGVcIjpcIlRpdGxlXCIsXCJhcmlhLmNsb3NlQ29udGV4dEdyb3VwXCI6XCJVc2UgZXNjYXBlIHRvIGNsb3NlIGNvbnRleHQgZ3JvdXAgc2VsZWN0aW9uIGRpYWxvZ1wiLFwiYXJpYS5jb2xvckxpbmtpbmdcIjpcIlNob3cgb3IgaGlkZSBjb2xvciBsaW5raW5nXCIsXCJhcmlhLmFwcGx5Q29sb3JMaW5raW5nXCI6XCJQbGVhc2Ugc2VsZWN0IGEgdmlldyB0byBhcHBseSBjb2xvciBsaW5raW5nXCIsXCJhcmlhLmFzc2lnbkNvbG9yTGlua2luZ0N1cnJlbnRWaWV3XCI6XCJDdXJyZW50IHZpZXcgYXNzaWduZWQgdG8ge3tuYW1lfX0gY29udGV4dCBncm91cFwiLFwiYXJpYS5hc3NpZ25Db2xvckxpbmtpbmdDdXJyZW50Vmlld3NcIjpcIkN1cnJlbnQgdmlld3MgYXNzaWduZWQgdG8ge3tuYW1lfX0gY29udGV4dCBncm91cFwiLFwiYXJpYS5zZXRDb2xvckxpbmtpbmdBY3RpdmVWaWV3XCI6XCJTZXQgYWN0aXZlIHZpZXcgdG8ge3tuYW1lfX0gY29udGV4dCBncm91cFwiLFwiYXJpYS5zZXRDb2xvckxpbmtpbmdBY3RpdmVWaWV3c1wiOlwiU2V0IGFjdGl2ZSB2aWV3cyB0byB7e25hbWV9fSBjb250ZXh0IGdyb3VwXCIsXCJhcmlhLmVzY2FwZUxheW91dERpYWxvZ1wiOlwiVXNlIGVzY2FwZSB0byBjbG9zZSBjaGFuZ2UgbGF5b3V0IGRpYWxvZ1wiLFwiZ2xvYmFsLnN1cGVydGFiXCI6XCJTdXBlcnRhYlwiLFwiZ2xvYmFsLnRhYlwiOlwiVGFiXCIsXCJib29rbWFya3MuZWRpdEJvb2ttYXJrXCI6XCJFZGl0IEJvb2ttYXJrXCIsXCJib29rbWFya3MuYm9va21hcmtBZGRlZFwiOlwiQm9va21hcmsgYWRkZWRcIixcImJvb2ttYXJrcy5kb25lXCI6XCJEb25lXCIsXCJib29rbWFya3MucmVtb3ZlXCI6XCJSZW1vdmVcIixcImJvb2ttYXJrcy5ib29rbWFya3NQYW5lbFwiOlwiQm9va21hcmtzIFBhbmVsXCIsXCJib29rbWFya3MuY2xvc2VQYW5lbFwiOlwiQ2xvc2UgQm9va21hcmtzIFBhbmVsXCIsXCJib29rbWFya3MuYm9va21hcmtzXCI6XCJCb29rbWFya3NcIixcImJvb2ttYXJrcy5hbGxCb29rbWFya3NcIjpcIkFsbCBCb29rbWFya3NcIixcImJvb2ttYXJrcy5mYXZvcml0ZXNcIjpcIkZhdm9yaXRlc1wiLFwiYm9va21hcmtzLnNlYXJjaEJvb2ttYXJrc1wiOlwiU2VhcmNoIEJvb2ttYXJrc1wiLFwiYm9va21hcmtzLmNsZWFyU2VhcmNoSW5wdXRcIjpcIkNsZWFyIFNlYXJjaCBJbnB1dFwiLFwiYm9va21hcmtzLmNyZWF0ZUZvbGRlclwiOlwiQ3JlYXRlIE5ldyBGb2xkZXJcIixcImJvb2ttYXJrcy5leGl0Rm9sZGVyXCI6XCJFeGl0IEZvbGRlclwiLFwiYm9va21hcmtzLm5ld0ZvbGRlclwiOlwiTmV3IEZvbGRlclwiLFwiYm9va21hcmtzLm5hbWVkRm9sZGVyXCI6XCJ7e25hbWV9fSBGb2xkZXJcIixcImJvb2ttYXJrcy5ib29rbWFya1NldHRpbmdzXCI6XCJ7e25hbWV9fSBCb29rbWFyayBTZXR0aW5nc1wiLFwiYm9va21hcmtzLmZvbGRlclNldHRpbmdzXCI6XCJ7e25hbWV9fSBGb2xkZXIgU2V0dGluZ3NcIixcImJvb2ttYXJrcy5ub1Jlc3VsdHNGb3VuZFwiOlwiTm8gcmVzdWx0cyBmb3VuZFwiLFwiYm9va21hcmtzLm5vUmVzdWx0c0ZvdW5kU3VidGV4dFwiOlwiVGhlcmUgYXJlIG5vIGJvb2ttYXJrcyB0aGF0IG1hdGNoIHlvdXIgc2VhcmNoXCIsXCJib29rbWFya3Mubm90aGluZ1RvU2hvd1wiOlwiTm90aGluZyB0byBzaG93IHlldFwiLFwiYm9va21hcmtzLm5vdGhpbmdUb1Nob3dTdWJ0ZXh0XCI6XCJBZGQgYSBib29rbWFyayB0byB0aGlzIGZvbGRlclwiLFwiYm9va21hcmtzLnJlc3VsdHNGb3VuZEluXCI6XCJSZXN1bHRzIGZvdW5kIGluIHt7bmFtZX19XCIsXCJib29rbWFya3MucmVzdWx0c0luT3RoZXJGb2xkZXJzXCI6XCJSZXN1bHRzIGZvdW5kIGluIG90aGVyIGZvbGRlcnNcIixcImJvb2ttYXJrcy5hbGxSZXN1bHRzRm91bmRJblwiOlwiQWxsIHJlc3VsdHMgZm91bmQgaW5cIixcImJvb2ttYXJrcy5lZGl0TmFtZVwiOlwiRWRpdCBOYW1lXCIsXCJib29rbWFya3MubW92ZVwiOlwiTW92ZVwiLFwiYm9va21hcmtzLmJvb2ttYXJrQWRkZWRUaXRsZVwiOlwiQm9va21hcmsgQWRkZWRcIixcImJvb2ttYXJrcy5ib29rbWFya0FkZGVkVG9Gb2xkZXJcIjpcIllvdXIgYm9va21hcmsgd2FzIGFkZGVkIHRvIFxcXFxcInt7Zm9sZGVyTmFtZX19XFxcXFwiXCIsXCJib29rbWFya3MuYm9va21hcmtFZGl0ZWRUaXRsZVwiOlwiQm9va21hcmsgRWRpdGVkXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuc2F2ZVN1cGVydGFiXCI6XCJTYXZlIFN1cGVydGFiXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuc2F2ZVN1cGVydGFiQXNcIjpcIlNhdmUgU3VwZXJ0YWIgQXMuLi5cIixcImVudGVycHJpc2VDb250ZXh0TWVudS5kdXBsaWNhdGVcIjpcIkR1cGxpY2F0ZVwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LmRlbGV0ZVN1cGVydGFiXCI6XCJEZWxldGUgU3VwZXJ0YWJcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5uZXdUYWJcIjpcIk5ldyBUYWJcIixcImVudGVycHJpc2VTYXZlTWVudS5zYXZlU3VwZXJ0YWJBc1wiOlwiU2F2ZSBTdXBlcnRhYiBBc1wiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC5yZW5hbWVTdXBlcnRhYlwiOlwiUmVuYW1lXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLnVuc2F2ZWRDaGFuZ2VzXCI6XCJZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMgaW4gdGhpcyBUYWIuXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLmNsb3NlVGFiXCI6XCJDbG9zZSBUYWJcIixcImVudGVycHJpc2VTYXZlTW9kYWwuY2xvc2VTdXBlcnRhYlwiOlwiQ2xvc2UgU3VwZXJ0YWJcIixcImVudGVycHJpc2VTYXZlTW9kYWwuc2F2ZVN1cGVydGFiQ291bnRcIjpcIlNhdmUge3tjb3VudH19IFN1cGVydGFicyBiZWZvcmUgY2xvc2luZz9cIixcImVudGVycHJpc2VNb2RhbC5kaXNjYXJkU3VwZXJ0YWJXYXJuaW5nXCI6XCJBbnkgdW5zYXZlZCBjaGFuZ2VzIHRvIHRoaXMgU3VwZXJ0YWIgd2lsbCBiZSBsb3N0LlwiLFwiZW50ZXJwcmlzZURlbGV0ZU1vZGFsLmRlbGV0ZVN1cGVydGFiXCI6XCJEZWxldGUgdGhlIFxcXFxcInt7dGl0bGV9fVxcXFxcIiBTdXBlcnRhYj9cIixcImVudGVycHJpc2VEZWxldGVNb2RhbC5kZWxldGVTdXBlcnRhYldhcm5pbmdcIjpcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBTdXBlcnRhYj8gVGhpcyBhY3Rpb24gY2Fubm90IGJlIHVuZG9uZSBhbmQgaXMgcGVybWFuZW50LlwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJTYXZlZFwiOlwiU3VwZXJ0YWIgU2F2ZWRcIixcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiSGFzQmVlblNhdmVkXCI6XCJcXFxcXCJ7e3RpdGxlfX1cXFxcXCIgU3VwZXJ0YWIgaGFzIGJlZW4gc2F2ZWQuXCIsXCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYkRlbGV0ZWRcIjpcIlN1cGVydGFiIERlbGV0ZWRcIixcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiSGFzQmVlbkRlbGV0ZWRcIjpcIlxcXFxcInt7dGl0bGV9fVxcXFxcIiBTdXBlcnRhYiBoYXMgYmVlbiBkZWxldGVkLlwiLFwiZW50ZXJwcmlzZUVycm9ySW5kaWNhdG9yLmZhaWxlZFRvRHVwbGljYXRlVGFiXCI6XCJGYWlsZWQgdG8gZHVwbGljYXRlIFRhYlwiLFwiZW50ZXJwcmlzZUVycm9ySW5kaWNhdG9yLmZhaWxlZFRvRHVwbGljYXRlU3VwZXJ0YWJcIjpcIkZhaWxlZCB0byBkdXBsaWNhdGUgU3VwZXJ0YWJcIixcImVudGVycHJpc2VDb21tYW5kQmFyLnN3aXRjaFRvU3VwZXJ0YWJcIjpcIlN3aXRjaCB0byBTdXBlcnRhYlwiLFwiZW50ZXJwcmlzZUNvbW1hbmRCYXIuZ29Ub1wiOlwiR28gdG8ge3t0eXBlfX1cIixcImNvbnRleHRNZW51LnF1aXRFbnRlcnByaXNlQnJvd3NlclwiOlwiUXVpdFwifScpLEhuPUpTT04ucGFyc2UoJ3tcImNvbnRleHRNZW51Lm5ld1dpbmRvd1wiOlwiTmV1ZXMgRmVuc3RlclwiLFwiY29udGV4dE1lbnUubmV3UGFnZVwiOlwiTmV1ZSBTZWl0ZVwiLFwiY29udGV4dE1lbnUucmVzdG9yZVwiOlwiV2llZGVyaGVyc3RlbGxlbiBkZXIgenVsZXR6dCBnZXNwZWljaGVydGVuIMOEbmRlcnVuZ2VuXCIsXCJjb250ZXh0TWVudS5zd2l0Y2hXb3Jrc3BhY2VcIjpcIldvcmtzcGFjZSB3ZWNoc2VsblwiLFwiY29udGV4dE1lbnUuYXBwZWFyYW5jZVwiOlwiRXJzY2hlaW51bmdzYmlsZFwiLFwiY29udGV4dE1lbnUuc2F2ZVdvcmtzcGFjZVwiOlwiV29ya3NwYWNlIHNwZWljaGVyblwiLFwiY29udGV4dE1lbnUuc2F2ZVdvcmtzcGFjZUFzXCI6XCJXb3Jrc3BhY2Ugc3BlaWNoZXJuIHVudGVyLi4uXCIsXCJjb250ZXh0TWVudS5yZW5hbWVXb3Jrc3BhY2VcIjpcIldvcmtzcGFjZSB1bWJlbmVubmVuXCIsXCJjb250ZXh0TWVudS5kZWxldGVXb3Jrc3BhY2VcIjpcIldvcmtzcGFjZSBsw7ZzY2hlblwiLFwiY29udGV4dE1lbnUuZG93bmxvYWRzXCI6XCJEb3dubG9hZHNcIixcImNvbnRleHRNZW51LnNhdmVQYWdlXCI6XCJTZWl0ZSBzcGVpY2hlcm5cIixcImNvbnRleHRNZW51LnNhdmVQYWdlQXNcIjpcIlNlaXRlIHNwZWljaGVybiB1bnRlci4uLlwiLFwiY29udGV4dE1lbnUucHJpbnRcIjpcIkRydWNrZW4uLi5cIixcImNvbnRleHRNZW51LnByaW50U2NyZWVuXCI6XCJCaWxkc2NoaXJtYW5zaWNodCBkcnVja2VuXCIsXCJjb250ZXh0TWVudS5jbG9zZVdpbmRvd1wiOlwiRmVuc3RlciBzY2hsaWXDn2VuXCIsXCJjb250ZXh0TWVudS5vcGVuU3RvcmVmcm9udFwiOlwiU2NoYXVmZW5zdGVyIMO2ZmZuZW5cIixcImNvbnRleHRNZW51LnF1aXRQbGF0Zm9ybVwiOlwiUGxhdHRmb3JtIHZlcmxhc3NlblwiLFwiY29udGV4dE1lbnUubmV3Vmlld1wiOlwiTmV1ZSBBbnNpY2h0XCIsXCJjb250ZXh0TWVudS5vcGVuVmlld1wiOlwiQW5zaWNodCBtaXQgU3RhbmRhcmQtV2ViYnJvd3NlciDDtmZmbmVuXCIsXCJjb250ZXh0TWVudS5vcGVuVmlld3NcIjpcIkFuc2ljaHRlbiBtaXQgU3RhbmRhcmQtV2ViYnJvd3NlciDDtmZmbmVuXCIsXCJjb250ZXh0TWVudS5yZWxvYWRcIjpcIlJlbG9hZCBERVwiLFwiY29udGV4dE1lbnUucmVsb2FkVmlld1wiOlwiQW5zaWNodCBuZXUgbGFkZW5cIixcImNvbnRleHRNZW51LnJlbG9hZFZpZXdzXCI6XCJBbnNpY2h0ZW4gbmV1IGxhZGVuXCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVcIjpcIkR1cGxpY2F0ZSBERVwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlVmlld1wiOlwiQW5zaWNodCBkdXBsaXppZXJlblwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlVmlld3NcIjpcIkFuc2ljaHRlbiBkdXBsaXppZXJlblwiLFwiY29udGV4dE1lbnUuYWRkVmlld1wiOlwiQW5zaWNodCB6dW0gQ2hhbm5lbCBoaW56dWbDvGdlblwiLFwiY29udGV4dE1lbnUuYWRkVmlld3NcIjpcIkFuc2ljaHRlbiB6dW0gQ2hhbm5lbCBoaW56dWbDvGdlblwiLFwiY29udGV4dE1lbnUucmVtb3ZlVmlld1wiOlwiQW5zaWNodCBhdXMgZGVtIENoYW5uZWwgZW50ZmVybmVuXCIsXCJjb250ZXh0TWVudS5yZW1vdmVWaWV3c1wiOlwiQW5zaWNodGVuIGF1cyBkZW0gQ2hhbm5lbCBlbnRmZXJuZW5cIixcImNvbnRleHRNZW51LmNsb3NlVmlld1wiOlwiQW5zaWNodCBzY2hsaWXDn2VuXCIsXCJjb250ZXh0TWVudS5jbG9zZVZpZXdzXCI6XCJBbnNpY2h0ZW4gc2NobGllw59lblwiLFwiY29udGV4dE1lbnUuY2xvc2VUYWJcIjpcIkNsb3NlIFRhYiBERVwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlUGFnZVwiOlwiU2VpdGUgZHVwbGl6aWVyZW5cIixcImNvbnRleHRNZW51LnN1Ym1lbnUucHJpbnRcIjpcIkRydWNrZW5cIixcImNvbnRleHRNZW51LnN1Ym1lbnUucHJpbnRBbGxcIjpcIkFsbGUgZHJ1Y2tlblwiLFwic2F2ZU1lbnUuc2F2ZVdvcmtzcGFjZUFzXCI6XCJXb3Jrc3BhY2Ugc3BlaWNoZXJuIHVudGVyXCIsXCJzYXZlTWVudS5zYXZlUGFnZUFzXCI6XCJTZWl0ZSBzcGVpY2hlcm4gdW50ZXJcIixcInNhdmVNb2RhbC5lbnRlclZhbHVlXCI6XCJQbGVhc2UgZW50ZXIgYSB2YWx1ZSBERVwiLFwic2F2ZU1vZGFsLmFscmVhZHlFeGlzdHNcIjpcInt7dGl0bGV9fSBleGlzdGllcnQgYmVyZWl0cy5cIixcInNhdmVNb2RhbC5wbGVhc2VFbnRlclZhbGlkTmFtZVwiOlwiQml0dGUgZ2ViZW4gU2llIGVpbmVuIGfDvGx0aWdlbiBOYW1lbiBlaW5cIixcInNhdmVNb2RhbC5yZW5hbWVQYWdlXCI6XCJTZWl0ZSB1bWJlbmVubmVuXCIsXCJzYXZlTW9kYWwuY2xvc2VQYWdlXCI6XCJTZWl0ZSBzY2hsaWXDn2VuXCIsXCJzYXZlTW9kYWwuZGlzY2FyZENoYW5nZXNcIjpcIsOEbmRlcnVuZ2VuIHZlcndlcmZlblwiLFwic2F2ZU1vZGFsLmRpc2NhcmRBbGxcIjpcIkFsbGUgdmVyd2VyZmVuXCIsXCJzYXZlTW9kYWwuc2F2ZUFsbFwiOlwiQWxsZSBzcGVpY2hlcm5cIixcInNhdmVNb2RhbC5zYXZlUGFnZXNDb3VudFwiOlwiKHt7Y291bnR9fSkgU2VpdGVuIHZvciBkZW0gU2NobGllw59lbiBzcGVpY2hlcm4/XCIsXCJkZWZhdWx0UGFnZVRpdGxlXCI6XCJVbnRpdGxlZCBQYWdlIERFXCIsXCJlbnRlcnByaXNlRGVmYXVsdFBhZ2VUaXRsZVwiOlwiVW50aXRsZWQgU3VwZXJ0YWIgREVcIixcImFkZE5ld1BhZ2VcIjpcIk5ldyBQYWdlIERFXCIsXCJhZGROZXdUYWJcIjpcIk5ldWVuIFRhYiBoaW56dWbDvGdlblwiLFwiYWRkTmV3Vmlld1wiOlwiTmV1ZSBBbnNpY2h0XCIsXCJyZXN0b3JlTW9kYWxcIjpcIlNpbmQgU2llIHNpY2hlciwgZGFzcyBTaWUgZGllIHp1bGV0enQgZ2VzcGVpY2hlcnRlbiDDhG5kZXJ1bmdlbiB3aWVkZXJoZXJzdGVsbGVuIHdvbGxlbj9cIixcIm1vZGFsLmRpc2NhcmRXYXJuaW5nXCI6XCJBbGxlIG5pY2h0IGdlc3BlaWNoZXJ0ZW4gw4RuZGVydW5nZW4gd2VyZGVuIHZlcndvcmZlblwiLFwibW9kYWwuZGlzY2FyZFBhZ2VXYXJuaW5nXCI6XCJBbGxlIG5pY2h0IGdlc3BlaWNoZXJ0ZW4gw4RuZGVydW5nZW4gYXVmIGRpZXNlciBTZWl0ZSBnZWhlbiB2ZXJsb3Jlbi5cIixcIm1vZGFsLnNhdmVDaGFuZ2VzUHJvbXB0XCI6XCLDhG5kZXJ1bmdlbiB2b3IgZGVtIFNjaGxpZcOfZW4gc3BlaWNoZXJuP1wiLFwibW9kYWwucGFnZUNsb3NlXCI6XCJQYWdlIENsb3NlIERFXCIsXCJzd2l0Y2hXb3Jrc3BhY2VNb2RhbFwiOlwiU2luZCBTaWUgc2ljaGVyLCBkYXNzIFNpZSB6dSB7e3dvcmtzcGFjZX19d2VjaHNlbG4gd29sbGVuP1wiLFwic3dpdGNoV29ya3NwYWNlTW9kYWwud2FybmluZ1wiOlwiQWxsZSBuaWNodCBnZXNwZWljaGVydGVuIMOEbmRlcnVuZ2VuIHdlcmRlbiB2ZXJ3b3JmZW5cIixcImRlbGV0ZVdvcmtzcGFjZU1vZGFsXCI6XCJTaW5kIFNpZSBzaWNoZXIsIGRhc3MgU2llIGRpZXNlbiBXb3Jrc3BhY2UgZGF1ZXJoYWZ0IGzDtnNjaGVuIHdvbGxlbj9cIixcInJlcGxhY2VXb3Jrc3BhY2VNb2RhbC53YXJuaW5nXCI6XCJFaW4gV29ya3NwYWNlIG1pdCBkZW0gTmFtZW4ge3t3b3Jrc3BhY2V9fSBleGlzdGllcnQgYmVyZWl0cy4gTcO2Y2h0ZW4gU2llIGlobiBlcnNldHplbj9cIixcInJlcGxhY2VXb3Jrc3BhY2VNb2RhbC53YXJuaW5nLmJvZHlcIjpcIkVpbiBXb3Jrc3BhY2UgbWl0IGRlbXNlbGJlbiBOYW1lbiBleGlzdGllcnQgYmVyZWl0cy4gV2VubiBTaWUgaWhuIGVyc2V0emVuLCB3aXJkIGRlciBha3R1ZWxsZSBJbmhhbHQgw7xiZXJzY2hyaWViZW4uXCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwucmVwbGFjZVwiOlwiRXJzZXR6ZW5cIixcImNsb3NlUGxhdGZvcm1cIjpcIlBsYXR0Zm9ybSBzY2hsaWXDn2VuXCIsXCJjbG9zZVBsYXRmb3JtLndvcmtzcGFjZVwiOlwiRGllIHt7d29ya3NwYWNlfX0gUGxhdHRmb3JtIHNjaGxpZcOfZW5cIixcImNsb3NlUGxhdGZvcm0ud2FybmluZ1wiOlwiV2VubiBTaWUgZWluZSBQbGF0dGZvcm0gc2NobGllw59lbiwgd2VyZGVuIGFsbGUgV29ya3NwYWNlcywgQXBwcyB1bmQgbGF1ZmVuZGVuIFByb3plc3NlIGJlZW5kZXQuXCIsXCJiYWNrXCI6XCJadXLDvGNrXCIsXCJmb3J3YXJkXCI6XCJXZWl0ZXJcIixcInJlbG9hZFwiOlwiTmV1IGxhZGVuXCIsXCJncmVlblwiOlwiR3LDvG5cIixcInB1cnBsZVwiOlwiTGlsYVwiLFwib3JhbmdlXCI6XCJPcmFuZ2VcIixcInJlZFwiOlwiUm90XCIsXCJwaW5rXCI6XCJQaW5rXCIsXCJ5ZWxsb3dcIjpcIkdlbGJcIixcInRoZW1lLmxpZ2h0XCI6XCJIZWxsXCIsXCJ0aGVtZS5kYXJrXCI6XCJEdW5rZWxcIixcInRoZW1lLnN5c3RlbVwiOlwiU3luY2hyb25pc2llcnVuZyBtaXQgT1MtRWluc3RlbGx1bmdcIixcInRvb2xiYXIuaGlkZVRhYnNcIjpcIlRhYnMgYXVzYmxlbmRlblwiLFwidG9vbGJhci5zaG93VGFic1wiOlwiVGFicyBhbnplaWdlblwiLFwidG9vbGJhci5sb2NrXCI6XCJTcGVycmVuXCIsXCJ0b29sYmFyLnVubG9ja1wiOlwiRnJlaXNjaGFsdGVuXCIsXCJ0b29sYmFyLmNvbG9yTGlua2luZ1wiOlwiRmFyYnZlcmtuw7xwZnVuZ1wiLFwidG9vbGJhci5jaGFuZ2VMYXlvdXRcIjpcIkxheW91dCDDpG5kZXJuXCIsXCJ0b29sYmFyLnNhdmVNZW51XCI6XCJNZW7DvCBzcGVpY2hlcm5cIixcInRvb2xiYXIubWF4aW1pemVXaW5kb3dcIjpcIkZlbnN0ZXIgbWF4aW1pZXJlblwiLFwidG9vbGJhci5yZXN0b3JlV2luZG93XCI6XCJGZW5zdGVyIHdpZWRlcmhlcnN0ZWxsZW5cIixcInRvb2xiYXIubWluaW1pemVXaW5kb3dcIjpcIkZlbnN0ZXIgbWluaW1pZXJlblwiLFwiY2hhbmdlTGF5b3V0LmZ1bGxXaWR0aFwiOlwiVm9sbGUgQnJlaXRlXCIsXCJjaGFuZ2VMYXlvdXQuY29sdW1uc1wiOlwiU3BhbHRlblwiLFwiY2hhbmdlTGF5b3V0LlJvd3NcIjpcIlplaWxlblwiLFwiY2hhbmdlTGF5b3V0LkdyaWRcIjpcIlJhc3RlclwiLFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VTd2l0Y2hlZFwiOlwiV29ya3NwYWNlIGdld2VjaHNlbHRcIixcInN1Y2Nlc3NJbmRpY2F0b3IuaGlkZGVuXCI6XCJUYWJzIHNpbmQgYXVzZ2VibGVuZGV0XCIsXCJzdWNjZXNzSW5kaWNhdG9yLnNob3duXCI6XCJUYWJzIHdlcmRlbiBhbmdlemVpZ3RcIixcInN1Y2Nlc3NJbmRpY2F0b3IubG9ja2VkXCI6XCJTZWl0ZSBpc3QgZ2VzcGVycnRcIixcInN1Y2Nlc3NJbmRpY2F0b3IudW5sb2NrZWRcIjpcIlNlaXRlIGlzdCBmcmVpZ2VzY2hhbHRldFwiLFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VTYXZlZFwiOlwiV29ya3NwYWNlIGdlc3BlaWNoZXJ0XCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZVNhdmVkQXNcIjpcIldvcmtzcGFjZSBnZXNwZWljaGVydCBhbHMge3t3b3Jrc3BhY2V9fVwiLFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VSZW5hbWVkXCI6XCJXb3Jrc3BhY2UgdW1iZW5hbm50XCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VTYXZlZFwiOlwiU2VpdGUgZ2VzcGVpY2hlcnRcIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZUhhc0JlZW5TYXZlZFwiOlwiXFxcXFwie3t0aXRsZX19XFxcXFwiIGhhcyBiZWVuIHNhdmVkLiBERVwiLFwic3VjY2Vzc0luZGljYXRvci5wYWdlQ29weVNhdmVkXCI6XCJTZWl0ZSBnZXNwZWljaGVydCBhbHMge3t0aXRsZX19XCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VSZW5hbWVkXCI6XCJTZWl0ZSB1bWJlbmFubnRcIixcInN1Y2Nlc3NJbmRpY2F0b3IuY29udGV4dEdyb3VwQXBwbGllZFwiOlwiQW5nZXdhbmR0ZSBLb250ZXh0Z3J1cHBlXCIsXCJzdWNjZXNzSW5kaWNhdG9yLm5hbWVkQ29udGV4dEdyb3VwQXBwbGllZFwiOlwie3tjb2xvck5hbWV9fSBhbmdld2FuZHRlIEtvbnRleHRncnVwcGVcIixcInN1Y2Nlc3NJbmRpY2F0b3Iudmlld1JlbW92ZWRcIjpcIkFuc2ljaHQgYXVzIGRlciBLb250ZXh0Z3J1cHBlIGVudGZlcm50XCIsXCJzdWNjZXNzSW5kaWNhdG9yLnZpZXdzUmVtb3ZlZFwiOlwiQW5zaWNodGVuIGF1cyBkZXIgS29udGV4dGdydXBwZSBlbnRmZXJudFwiLFwic3VjY2Vzc0luZGljYXRvci5sYXlvdXRBcHBsaWVkXCI6XCJ7e2xheW91dE5hbWV9fSBhbmdld2FuZHRlcyBMYXlvdXRcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlRGVsZXRlZFwiOlwiV29ya3NwYWNlIGdlbMO2c2NodFwiLFwiZXJyb3JJbmRpY2F0b3IucGFnZVNhdmVGYWlsZWRcIjpcIlNlaXRlIGtvbm50ZSBuaWNodCBnZXNwZWljaGVydCB3ZXJkZW5cIixcImVycm9ySW5kaWNhdG9yLndvcmtzcGFjZVNhdmVGYWlsZWRcIjpcIldvcmtzcGFjZSBrb25udGUgbmljaHQgZ2VzcGVpY2hlcnQgd2VyZGVuXCIsXCJlcnJvckluZGljYXRvci5mYWlsZWRUb0R1cGxpY2F0ZVBhZ2VcIjpcIlNlaXRlIGthbm4gbmljaHQgZHVwbGl6aWVydCB3ZXJkZW5cIixcImluZm9JbmRpY2F0b3IuY29sb3JMaW5rQXR0ZW1wdFwiOlwiV2lyIGhhYmVuIHZlcnN1Y2h0LCBkaWVzZW0gVGFiIGVpbmUgRmFyYmUgenVvcmRuZW4sIGFiZXIgZGVyIEVpZ2VudMO8bWVyIGRlciBXZWJzaXRlL2RlcyBJbmhhbHRzIGhhdCBzaWUgbm9jaCBuaWNodCBha3RpdmllcnRcIixcImdsb2JhbC5jYW5jZWxcIjpcIkFiYnJlY2hlblwiLFwiZ2xvYmFsLmNvbmZpcm1cIjpcIkJlc3TDpHRpZ2VuXCIsXCJnbG9iYWwuc2F2ZVwiOlwiU3BlaWNoZXJuXCIsXCJnbG9iYWwuZGVsZXRlXCI6XCJEZWxldGUgREVcIixcImFwcFJlc3VsdHMuaGVhZGVyXCI6XCJGZWF0dXJlZCBDb250ZW50IERDXCIsXCJyZWNlbnRseVZpc2l0ZWQuaGVhZGVyXCI6XCJSZWNlbnRseSB2aXNpdGVkIERDXCIsXCJsYW5kaW5nUGFnZS5zdWJoZWFkZXJcIjpcIkFwcHMgYW5kIHdlYnNpdGVzIHNlbGVjdGVkIGJ5IGFuIGFkbWluIHdpbGwgc2hvdyBoZXJlIERFXCIsXCJhcmlhLm9wZW5Ccm93c2VyXCI6XCJCcm93c2VyLU1lbsO8IMO2ZmZuZW5cIixcImFyaWEuYnJvd3NlclRhYnNcIjpcIkJyb3dzZXItVGFiXCIsXCJhcmlhLnZpZXdUYWJcIjpcIlRhYiDigJ5BbnNpY2h04oCcIGbDvHIge3t0aXRsZX19XCIsXCJhcmlhLmNsb3NlUGFnZVwiOlwiQnV0dG9uIOKAnlNlaXRlIHNjaGxpZcOfZW7igJwgZsO8ciB7e3RpdGxlfX1cIixcImFyaWEuY2xvc2VUYWJcIjpcIlRhYiBzY2hsaWXDn2VuIHt7dGl0bGV9fVwiLFwiYXJpYS50aXRsZVwiOlwiQmV6ZWljaG51bmdcIixcImFyaWEuY2xvc2VDb250ZXh0R3JvdXBcIjpcIlZlcndlbmRlbiBTaWUgZGllIEVzY2FwZS1UYXN0ZSwgdW0gZGVuIERpYWxvZyB6dXIgQXVzd2FobCB2b24gS29udGV4dGdydXBwZW4genUgc2NobGllw59lblwiLFwiYXJpYS5jb2xvckxpbmtpbmdcIjpcIkZhcmJ2ZXJrbsO8cGZ1bmcgZWluLSBvZGVyIGF1c2JsZW5kZW5cIixcImFyaWEuYXBwbHlDb2xvckxpbmtpbmdcIjpcIkJpdHRlIHfDpGhsZW4gU2llIGVpbmUgQW5zaWNodCwgdW0gZGllIEZhcmJ2ZXJrbsO8cGZ1bmcgYW56dXdlbmRlblwiLFwiYXJpYS5hc3NpZ25Db2xvckxpbmtpbmdDdXJyZW50Vmlld1wiOlwiQWt0dWVsbGUgQW5zaWNodCwgZGllIGRlciBLb250ZXh0Z3J1cHBlIHt7bmFtZX19IHp1Z2VvcmRuZXQgaXN0XCIsXCJhcmlhLmFzc2lnbkNvbG9yTGlua2luZ0N1cnJlbnRWaWV3c1wiOlwiQWt0dWVsbGUgQW5zaWNodGVuLCBkaWUgZGVyIEtvbnRleHRncnVwcGUge3tuYW1lfX0genVnZW9yZG5ldCBzaW5kXCIsXCJhcmlhLnNldENvbG9yTGlua2luZ0FjdGl2ZVZpZXdcIjpcIkFrdGl2ZSBBbnNpY2h0IGF1ZiBkaWUgS29udGV4dGdydXBwZSB7e25hbWV9fSBzZXR6ZW5cIixcImFyaWEuc2V0Q29sb3JMaW5raW5nQWN0aXZlVmlld3NcIjpcIkFrdGl2ZSBBbnNpY2h0ZW4gYXVmIGRpZSBLb250ZXh0Z3J1cHBlIHt7bmFtZX19IHNldHplblwiLFwiYXJpYS5lc2NhcGVMYXlvdXREaWFsb2dcIjpcIlZlcndlbmRlbiBTaWUgZGllIEVzY2FwZS1UYXN0ZSwgdW0gZGVuIERpYWxvZyB6dXIgTGF5b3V0w6RuZGVydW5nIHp1IHNjaGxpZcOfZW5cIixcImdsb2JhbC5zdXBlcnRhYlwiOlwiU3VwZXJ0YWIgREVcIixcImdsb2JhbC50YWJcIjpcIlRhYiBERVwiLFwiYm9va21hcmtzLmVkaXRCb29rbWFya1wiOlwiRWRpdCBCb29rbWFyayBERVwiLFwiYm9va21hcmtzLmJvb2ttYXJrQWRkZWRcIjpcIkJvb2ttYXJrIGFkZGVkIERFXCIsXCJib29rbWFya3MuZG9uZVwiOlwiRG9uZSBERVwiLFwiYm9va21hcmtzLnJlbW92ZVwiOlwiUmVtb3ZlIERFXCIsXCJib29rbWFya3MuYm9va21hcmtzUGFuZWxcIjpcIkJvb2ttYXJrcyBQYW5lbCBERVwiLFwiYm9va21hcmtzLmNsb3NlUGFuZWxcIjpcIkNsb3NlIEJvb2ttYXJrcyBQYW5lbCBERVwiLFwiYm9va21hcmtzLmJvb2ttYXJrc1wiOlwiQm9va21hcmtzIERFXCIsXCJib29rbWFya3MuYWxsQm9va21hcmtzXCI6XCJBbGwgQm9va21hcmtzIERFXCIsXCJib29rbWFya3MuZmF2b3JpdGVzXCI6XCJGYXZvcml0ZXMgREVcIixcImJvb2ttYXJrcy5zZWFyY2hCb29rbWFya3NcIjpcIlNlYXJjaCBCb29rbWFya3MgREVcIixcImJvb2ttYXJrcy5jbGVhclNlYXJjaElucHV0XCI6XCJDbGVhciBTZWFyY2ggSW5wdXQgREVcIixcImJvb2ttYXJrcy5jcmVhdGVGb2xkZXJcIjpcIkNyZWF0ZSBOZXcgRm9sZGVyIERFXCIsXCJib29rbWFya3MuZXhpdEZvbGRlclwiOlwiRXhpdCBGb2xkZXIgREVcIixcImJvb2ttYXJrcy5uZXdGb2xkZXJcIjpcIk5ldyBGb2xkZXIgREVcIixcImJvb2ttYXJrcy5uYW1lZEZvbGRlclwiOlwie3tuYW1lfX0gRm9sZGVyIERFXCIsXCJib29rbWFya3MuYm9va21hcmtTZXR0aW5nc1wiOlwie3tuYW1lfX0gQm9va21hcmsgU2V0dGluZ3MgREVcIixcImJvb2ttYXJrcy5mb2xkZXJTZXR0aW5nc1wiOlwie3tuYW1lfX0gRm9sZGVyIFNldHRpbmdzIERFXCIsXCJib29rbWFya3Mubm9SZXN1bHRzRm91bmRcIjpcIk5vIHJlc3VsdHMgZm91bmQgREVcIixcImJvb2ttYXJrcy5ub1Jlc3VsdHNGb3VuZFN1YnRleHRcIjpcIlRoZXJlIGFyZSBubyBib29rbWFya3MgdGhhdCBtYXRjaCB5b3VyIHNlYXJjaCBERVwiLFwiYm9va21hcmtzLm5vdGhpbmdUb1Nob3dcIjpcIk5vdGhpbmcgdG8gc2hvdyB5ZXQgREVcIixcImJvb2ttYXJrcy5ub3RoaW5nVG9TaG93U3VidGV4dFwiOlwiQWRkIGEgYm9va21hcmsgdG8gdGhpcyBmb2xkZXIgREVcIixcImJvb2ttYXJrcy5yZXN1bHRzRm91bmRJblwiOlwiUmVzdWx0cyBmb3VuZCBpbiB7e25hbWV9fSBERVwiLFwiYm9va21hcmtzLnJlc3VsdHNJbk90aGVyRm9sZGVyc1wiOlwiUmVzdWx0cyBmb3VuZCBpbiBvdGhlciBmb2xkZXJzIERFXCIsXCJib29rbWFya3MuYWxsUmVzdWx0c0ZvdW5kSW5cIjpcIkFsbCByZXN1bHRzIGZvdW5kIGluIERFXCIsXCJib29rbWFya3MuZWRpdE5hbWVcIjpcIkVkaXQgTmFtZSBERVwiLFwiYm9va21hcmtzLm1vdmVcIjpcIk1vdmUgREVcIixcImJvb2ttYXJrcy5ib29rbWFya0FkZGVkVGl0bGVcIjpcIkJvb2ttYXJrIEFkZGVkIERFXCIsXCJib29rbWFya3MuYm9va21hcmtBZGRlZFRvRm9sZGVyXCI6XCJZb3VyIGJvb2ttYXJrIHdhcyBhZGRlZCB0byBcXFxcXCJ7e2ZvbGRlck5hbWV9fVxcXFxcIiBERVwiLFwiYm9va21hcmtzLmJvb2ttYXJrRWRpdGVkVGl0bGVcIjpcIkJvb2ttYXJrIEVkaXRlZCBERVwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LnNhdmVTdXBlcnRhYlwiOlwiU2F2ZSBTdXBlcnRhYiBERVwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LnNhdmVTdXBlcnRhYkFzXCI6XCJTYXZlIFN1cGVydGFiIEFzLi4uIERFXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuZHVwbGljYXRlXCI6XCJEdXBsaWNhdGUgREVcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5kZWxldGVTdXBlcnRhYlwiOlwiRGVsZXRlIFN1cGVydGFiIERFXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUubmV3VGFiXCI6XCJOZXcgVGFiIERFXCIsXCJlbnRlcnByaXNlU2F2ZU1lbnUuc2F2ZVN1cGVydGFiQXNcIjpcIlNhdmUgU3VwZXJ0YWIgQXMgREVcIixcImVudGVycHJpc2VTYXZlTW9kYWwucmVuYW1lU3VwZXJ0YWJcIjpcIlJlbmFtZSBERVwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC51bnNhdmVkQ2hhbmdlc1wiOlwiWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzIGluIHRoaXMgVGFiLiBERVwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC5jbG9zZVRhYlwiOlwiQ2xvc2UgVGFiIERFXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLmNsb3NlU3VwZXJ0YWJcIjpcIkNsb3NlIFN1cGVydGFiIERFXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLnNhdmVTdXBlcnRhYkNvdW50XCI6XCJTYXZlIHt7Y291bnR9fSBTdXBlcnRhYnMgYmVmb3JlIGNsb3Npbmc/IERFXCIsXCJlbnRlcnByaXNlTW9kYWwuZGlzY2FyZFN1cGVydGFiV2FybmluZ1wiOlwiQW55IHVuc2F2ZWQgY2hhbmdlcyB0byB0aGlzIFN1cGVydGFiIHdpbGwgYmUgbG9zdC4gREVcIixcImVudGVycHJpc2VEZWxldGVNb2RhbC5kZWxldGVTdXBlcnRhYlwiOlwiRGVsZXRlIHRoZSBcXFxcXCJ7e3RpdGxlfX1cXFxcXCIgU3VwZXJ0YWI/IERFXCIsXCJlbnRlcnByaXNlRGVsZXRlTW9kYWwuZGVsZXRlU3VwZXJ0YWJXYXJuaW5nXCI6XCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgU3VwZXJ0YWI/IFRoaXMgYWN0aW9uIGNhbm5vdCBiZSB1bmRvbmUgYW5kIGlzIHBlcm1hbmVudC4gREVcIixcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiU2F2ZWRcIjpcIlN1cGVydGFiIFNhdmVkIERFXCIsXCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYkhhc0JlZW5TYXZlZFwiOlwiXFxcXFwie3t0aXRsZX19XFxcXFwiIFN1cGVydGFiIGhhcyBiZWVuIHNhdmVkLiBERVwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJEZWxldGVkXCI6XCJTdXBlcnRhYiBEZWxldGVkIERFXCIsXCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYkhhc0JlZW5EZWxldGVkXCI6XCJcXFxcXCJ7e3RpdGxlfX1cXFxcXCIgU3VwZXJ0YWIgaGFzIGJlZW4gZGVsZXRlZC4gREVcIixcImVudGVycHJpc2VFcnJvckluZGljYXRvci5mYWlsZWRUb0R1cGxpY2F0ZVRhYlwiOlwiRmFpbGVkIHRvIGR1cGxpY2F0ZSBUYWIgREVcIixcImVudGVycHJpc2VFcnJvckluZGljYXRvci5mYWlsZWRUb0R1cGxpY2F0ZVN1cGVydGFiXCI6XCJGYWlsZWQgdG8gZHVwbGljYXRlIFN1cGVydGFiIERFXCIsXCJlbnRlcnByaXNlQ29tbWFuZEJhci5zd2l0Y2hUb1N1cGVydGFiXCI6XCJTd2l0Y2ggdG8gU3VwZXJ0YWIgREVcIixcImVudGVycHJpc2VDb21tYW5kQmFyLmdvVG9cIjpcIkdvIHRvIHt7dHlwZX19IERFXCIsXCJjb250ZXh0TWVudS5xdWl0RW50ZXJwcmlzZUJyb3dzZXJcIjpcIlF1aXQgREVcIn0nKSxBbj1KU09OLnBhcnNlKCd7XCJjb250ZXh0TWVudS5uZXdXaW5kb3dcIjpcIuaWsOOBl+OBhOOCpuOCo+ODs+ODieOCplwiLFwiY29udGV4dE1lbnUubmV3UGFnZVwiOlwi5paw44GX44GE44Oa44O844K4XCIsXCJjb250ZXh0TWVudS5yZXN0b3JlXCI6XCLmnIDlvozjgavkv53lrZjjgZXjgozjgZ/lpInmm7TjgavmiLvjgZlcIixcImNvbnRleHRNZW51LnN3aXRjaFdvcmtzcGFjZVwiOlwi44Ov44O844Kv44K544Oa44O844K544Gr5YiH44KK5pu/44GI44KLXCIsXCJjb250ZXh0TWVudS5hcHBlYXJhbmNlXCI6XCLlpJboprNcIixcImNvbnRleHRNZW51LnNhdmVXb3Jrc3BhY2VcIjpcIuODr+ODvOOCr+OCueODmuODvOOCueOCkuS/neWtmFwiLFwiY29udGV4dE1lbnUuc2F2ZVdvcmtzcGFjZUFzXCI6XCLjg6/jg7zjgq/jgrnjg5rjg7zjgrnjgpLliKXlkI3jgafkv53lrZguLi5cIixcImNvbnRleHRNZW51LnJlbmFtZVdvcmtzcGFjZVwiOlwi44Ov44O844Kv44K544Oa44O844K55ZCN44KS5aSJ5pu0XCIsXCJjb250ZXh0TWVudS5kZWxldGVXb3Jrc3BhY2VcIjpcIuODr+ODvOOCr+OCueODmuODvOOCueOCkuWJiumZpFwiLFwiY29udGV4dE1lbnUuZG93bmxvYWRzXCI6XCLjg4Djgqbjg7Pjg63jg7zjg4lcIixcImNvbnRleHRNZW51LnNhdmVQYWdlXCI6XCLjg5rjg7zjgrjjgpLkv53lrZhcIixcImNvbnRleHRNZW51LnNhdmVQYWdlQXNcIjpcIuODmuODvOOCuOOCkuWIpeWQjeOBp+S/neWtmC4uLlwiLFwiY29udGV4dE1lbnUucHJpbnRcIjpcIuWNsOWIty4uLlwiLFwiY29udGV4dE1lbnUucHJpbnRTY3JlZW5cIjpcIuODl+ODquODs+ODiOOCueOCr+ODquODvOODs1wiLFwiY29udGV4dE1lbnUuY2xvc2VXaW5kb3dcIjpcIuOCpuOCo+ODs+ODieOCpuOCkumWieOBmOOCi1wiLFwiY29udGV4dE1lbnUub3BlblN0b3JlZnJvbnRcIjpcIuOCueODiOOCouODleODreODs+ODiOOCkumWi+OBj1wiLFwiY29udGV4dE1lbnUucXVpdFBsYXRmb3JtXCI6XCLjg5fjg6njg4Pjg4jjg5Xjgqnjg7zjg6DjgpLntYLkuobjgZnjgotcIixcImNvbnRleHRNZW51Lm5ld1ZpZXdcIjpcIuaWsOOBl+OBhOODk+ODpeODvFwiLFwiY29udGV4dE1lbnUub3BlblZpZXdcIjpcIuODh+ODleOCqeODq+ODiOOBruOCpuOCp+ODluODluODqeOCpuOCtuODvOOBp+ODk+ODpeODvOOCkumWi+OBj1wiLFwiY29udGV4dE1lbnUub3BlblZpZXdzXCI6XCLjg4fjg5Xjgqnjg6vjg4jjga7jgqbjgqfjg5bjg5bjg6njgqbjgrbjg7zjgafjg5Pjg6Xjg7zjgpLplovjgY9cIixcImNvbnRleHRNZW51LnJlbG9hZFwiOlwiUmVsb2FkIEpQXCIsXCJjb250ZXh0TWVudS5yZWxvYWRWaWV3XCI6XCLjg5Pjg6Xjg7zjgpLjg6rjg63jg7zjg4lcIixcImNvbnRleHRNZW51LnJlbG9hZFZpZXdzXCI6XCLjg5Pjg6Xjg7zjgpLjg6rjg63jg7zjg4lcIixcImNvbnRleHRNZW51LmR1cGxpY2F0ZVwiOlwiRHVwbGljYXRlIEpQXCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVWaWV3XCI6XCLjg5Pjg6Xjg7zjgpLopIfoo71cIixcImNvbnRleHRNZW51LmR1cGxpY2F0ZVZpZXdzXCI6XCLjg5Pjg6Xjg7zjgpLopIfoo71cIixcImNvbnRleHRNZW51LmFkZFZpZXdcIjpcIuODk+ODpeODvOOCkuODgeODo+ODjeODq+OBq+i/veWKoFwiLFwiY29udGV4dE1lbnUuYWRkVmlld3NcIjpcIuODk+ODpeODvOOCkuODgeODo+ODjeODq+OBq+i/veWKoFwiLFwiY29udGV4dE1lbnUucmVtb3ZlVmlld1wiOlwi44OB44Oj44ON44Or44GL44KJ44OT44Ol44O844KS5YmK6ZmkXCIsXCJjb250ZXh0TWVudS5yZW1vdmVWaWV3c1wiOlwi44OB44Oj44ON44Or44GL44KJ44OT44Ol44O844KS5YmK6ZmkXCIsXCJjb250ZXh0TWVudS5jbG9zZVZpZXdcIjpcIuODk+ODpeODvOOCkumWieOBmOOCi1wiLFwiY29udGV4dE1lbnUuY2xvc2VWaWV3c1wiOlwi44OT44Ol44O844KS6ZaJ44GY44KLXCIsXCJjb250ZXh0TWVudS5jbG9zZVRhYlwiOlwiQ2xvc2UgVGFiIEpQXCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVQYWdlXCI6XCLjg5rjg7zjgrjjgpLopIfoo71cIixcImNvbnRleHRNZW51LnN1Ym1lbnUucHJpbnRcIjpcIuWNsOWIt1wiLFwiY29udGV4dE1lbnUuc3VibWVudS5wcmludEFsbFwiOlwi44GZ44G544Gm44KS5Y2w5Yi3XCIsXCJzYXZlTWVudS5zYXZlV29ya3NwYWNlQXNcIjpcIuODr+ODvOOCr+OCueODmuODvOOCueOCkuWIpeWQjeOBp+S/neWtmFwiLFwic2F2ZU1lbnUuc2F2ZVBhZ2VBc1wiOlwi44Oa44O844K444KS5Yil5ZCN44Gn5L+d5a2YXCIsXCJzYXZlTW9kYWwuZW50ZXJWYWx1ZVwiOlwiUGxlYXNlIGVudGVyIGEgdmFsdWUgSlBcIixcInNhdmVNb2RhbC5hbHJlYWR5RXhpc3RzXCI6XCJ7e3RpdGxlfX3jga/jgZnjgafjgavlrZjlnKjjgZfjgabjgYTjgb7jgZnjgIJcIixcInNhdmVNb2RhbC5wbGVhc2VFbnRlclZhbGlkTmFtZVwiOlwi5pyJ5Yq544Gq5ZCN5YmN44KS5YWl5Yqb44GX44Gm44GP44Gg44GV44GEXCIsXCJzYXZlTW9kYWwucmVuYW1lUGFnZVwiOlwi44Oa44O844K45ZCN44KS5aSJ5pu0XCIsXCJzYXZlTW9kYWwuY2xvc2VQYWdlXCI6XCLjg5rjg7zjgrjjgpLplonjgZjjgotcIixcInNhdmVNb2RhbC5kaXNjYXJkQ2hhbmdlc1wiOlwi5aSJ5pu044KS56C05qOEXCIsXCJzYXZlTW9kYWwuZGlzY2FyZEFsbFwiOlwi44GZ44G544Gm56C05qOEXCIsXCJzYXZlTW9kYWwuc2F2ZUFsbFwiOlwi44GZ44G544Gm5L+d5a2YXCIsXCJzYXZlTW9kYWwuc2F2ZVBhZ2VzQ291bnRcIjpcIumWieOBmOOCi+WJjeOBq++8iHt7Y291bnR9fe+8ieOBpOOBruODmuODvOOCuOOCkuS/neWtmOOBl+OBvuOBmeOBi++8n1wiLFwiZGVmYXVsdFBhZ2VUaXRsZVwiOlwiVW50aXRsZWQgUGFnZSBKUFwiLFwiZW50ZXJwcmlzZURlZmF1bHRQYWdlVGl0bGVcIjpcIlVudGl0bGVkIFN1cGVydGFiIEpQXCIsXCJhZGROZXdQYWdlXCI6XCJOZXcgUGFnZSBKUFwiLFwiYWRkTmV3VGFiXCI6XCLmlrDjgZfjgYTjgr/jg5bjgpLov73liqBcIixcImFkZE5ld1ZpZXdcIjpcIuaWsOOBl+OBhOODk+ODpeODvFwiLFwicmVzdG9yZU1vZGFsXCI6XCLmnKzlvZPjgavmnIDlvozjgavkv53lrZjjgZXjgozjgZ/lpInmm7TjgavmiLvjgZfjgb7jgZnjgYvvvJ9cIixcIm1vZGFsLmRpc2NhcmRXYXJuaW5nXCI6XCLkv53lrZjjgZXjgozjgabjgYTjgarjgYTlpInmm7Tjga/noLTmo4TjgZXjgozjgb7jgZlcIixcIm1vZGFsLmRpc2NhcmRQYWdlV2FybmluZ1wiOlwi5L+d5a2Y44GV44KM44Gm44GE44Gq44GE44GT44Gu44Oa44O844K444G444Gu5aSJ5pu044Gv5aSx44KP44KM44G+44GZ44CCXCIsXCJtb2RhbC5zYXZlQ2hhbmdlc1Byb21wdFwiOlwi6ZaJ44GY44KL5YmN44Gr5aSJ5pu044KS5L+d5a2Y44GX44G+44GZ44GL77yfXCIsXCJtb2RhbC5wYWdlQ2xvc2VcIjpcIlBhZ2UgQ2xvc2UgSlBcIixcInN3aXRjaFdvcmtzcGFjZU1vZGFsXCI6XCLmnKzlvZPjgat7e3dvcmtzcGFjZX1944Gr5YiH44KK5pu/44GI44G+44GZ44GL77yfXCIsXCJzd2l0Y2hXb3Jrc3BhY2VNb2RhbC53YXJuaW5nXCI6XCLkv53lrZjjgZXjgozjgabjgYTjgarjgYTlpInmm7Tjga/noLTmo4TjgZXjgozjgb7jgZlcIixcImRlbGV0ZVdvcmtzcGFjZU1vZGFsXCI6XCLjgZPjga7jg6/jg7zjgq/jgrnjg5rjg7zjgrnjgpLmsLjkuYXjgavliYrpmaTjgZfjgabjgoLjgojjgo3jgZfjgYTjgafjgZnjgYvvvJ9cIixcInJlcGxhY2VXb3Jrc3BhY2VNb2RhbC53YXJuaW5nXCI6XCJ7e3dvcmtzcGFjZX1944Go44GE44GG5ZCN5YmN44Gu44Ov44O844Kv44K544Oa44O844K544GM44GZ44Gn44Gr5a2Y5Zyo44GX44G+44GZ44CC572u44GN5o+b44GI44G+44GZ44GL77yfXCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwud2FybmluZy5ib2R5XCI6XCLlkIzjgZjlkI3liY3jga7jg6/jg7zjgq/jgrnjg5rjg7zjgrnjgYzjgZnjgafjgavlrZjlnKjjgZfjgb7jgZnjgILnva7jgY3mj5vjgYjjgovjgajjgIHnj77lnKjjga7lhoXlrrnjga/kuIrmm7jjgY3jgZXjgozjgb7jgZnjgIJcIixcInJlcGxhY2VXb3Jrc3BhY2VNb2RhbC5yZXBsYWNlXCI6XCLnva7jgY3mj5vjgYjjgotcIixcImNsb3NlUGxhdGZvcm1cIjpcIuODl+ODqeODg+ODiOODleOCqeODvOODoOOCkumWieOBmOOCi1wiLFwiY2xvc2VQbGF0Zm9ybS53b3Jrc3BhY2VcIjpcInt7d29ya3NwYWNlfX3jg5fjg6njg4Pjg4jjg5Xjgqnjg7zjg6DjgpLplonjgZjjgotcIixcImNsb3NlUGxhdGZvcm0ud2FybmluZ1wiOlwi44OX44Op44OD44OI44OV44Kp44O844Og44KS6ZaJ44GY44KL44Go44CB5a6f6KGM5Lit44Gu44Ov44O844Kv44K544Oa44O844K544CB44Ki44OX44Oq44CB44OX44Ot44K744K544GM44GZ44G544Gm6ZaJ44GY44G+44GZ44CCXCIsXCJiYWNrXCI6XCLmiLvjgotcIixcImZvcndhcmRcIjpcIumAsuOCgFwiLFwicmVsb2FkXCI6XCLjg6rjg63jg7zjg4lcIixcImdyZWVuXCI6XCLjgrDjg6rjg7zjg7NcIixcInB1cnBsZVwiOlwi44OR44O844OX44OrXCIsXCJvcmFuZ2VcIjpcIuOCquODrOODs+OCuFwiLFwicmVkXCI6XCLjg6zjg4Pjg4lcIixcInBpbmtcIjpcIuODlOODs+OCr1wiLFwieWVsbG93XCI6XCLjgqTjgqjjg63jg7xcIixcInRoZW1lLmxpZ2h0XCI6XCLjg6njgqTjg4hcIixcInRoZW1lLmRhcmtcIjpcIuODgOODvOOCr1wiLFwidGhlbWUuc3lzdGVtXCI6XCJPU+OBruioreWumuOBqOWQjOacn1wiLFwidG9vbGJhci5oaWRlVGFic1wiOlwi44K/44OW44KS6Z2e6KGo56S6XCIsXCJ0b29sYmFyLnNob3dUYWJzXCI6XCLjgr/jg5bjgpLooajnpLpcIixcInRvb2xiYXIubG9ja1wiOlwi44Ot44OD44KvXCIsXCJ0b29sYmFyLnVubG9ja1wiOlwi44Ot44OD44Kv6Kej6ZmkXCIsXCJ0b29sYmFyLmNvbG9yTGlua2luZ1wiOlwi44Kr44Op44O844Oq44Oz44KvXCIsXCJ0b29sYmFyLmNoYW5nZUxheW91dFwiOlwi44Os44Kk44Ki44Km44OI44KS5aSJ5pu0XCIsXCJ0b29sYmFyLnNhdmVNZW51XCI6XCLjg6Hjg4vjg6Xjg7zjgpLkv53lrZhcIixcInRvb2xiYXIubWF4aW1pemVXaW5kb3dcIjpcIuOCpuOCo+ODs+ODieOCpuOCkuacgOWkp+WMluOBmeOCi1wiLFwidG9vbGJhci5yZXN0b3JlV2luZG93XCI6XCLjgqbjgqPjg7Pjg4njgqbjgpLlvqnlhYNcIixcInRvb2xiYXIubWluaW1pemVXaW5kb3dcIjpcIuOCpuOCo+ODs+ODieOCpuOCkuacgOWwj+WMluOBmeOCi1wiLFwiY2hhbmdlTGF5b3V0LmZ1bGxXaWR0aFwiOlwi5YWo5bmFXCIsXCJjaGFuZ2VMYXlvdXQuY29sdW1uc1wiOlwi5YiXXCIsXCJjaGFuZ2VMYXlvdXQuUm93c1wiOlwi6KGMXCIsXCJjaGFuZ2VMYXlvdXQuR3JpZFwiOlwi44Kw44Oq44OD44OJXCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZVN3aXRjaGVkXCI6XCLjg6/jg7zjgq/jgrnjg5rjg7zjgrnjgYzliIfjgormm7/jgo/jgorjgb7jgZfjgZ9cIixcInN1Y2Nlc3NJbmRpY2F0b3IuaGlkZGVuXCI6XCLjgr/jg5bjgYzpnZ7ooajnpLrjgavjgarjgaPjgabjgYTjgb7jgZlcIixcInN1Y2Nlc3NJbmRpY2F0b3Iuc2hvd25cIjpcIuOCv+ODluOBjOihqOekuuOBleOCjOOBpuOBhOOBvuOBmVwiLFwic3VjY2Vzc0luZGljYXRvci5sb2NrZWRcIjpcIuODmuODvOOCuOOBjOODreODg+OCr+OBleOCjOOBpuOBhOOBvuOBmVwiLFwic3VjY2Vzc0luZGljYXRvci51bmxvY2tlZFwiOlwi44Oa44O844K444Gu44Ot44OD44Kv44GM6Kej6Zmk44GV44KM44Gm44GE44G+44GZXCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZVNhdmVkXCI6XCLjg6/jg7zjgq/jgrnjg5rjg7zjgrnjgYzkv53lrZjjgZXjgozjgb7jgZfjgZ9cIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlU2F2ZWRBc1wiOlwi44Ov44O844Kv44K544Oa44O844K544GMe3t3b3Jrc3BhY2V9feOBqOOBl+OBpuS/neWtmOOBleOCjOOBvuOBl+OBn1wiLFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VSZW5hbWVkXCI6XCLjg6/jg7zjgq/jgrnjg5rjg7zjgrnlkI3jgYzlpInmm7TjgZXjgozjgb7jgZfjgZ9cIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZVNhdmVkXCI6XCLjg5rjg7zjgrjjgYzkv53lrZjjgZXjgozjgb7jgZfjgZ9cIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZUhhc0JlZW5TYXZlZFwiOlwiXFxcXFwie3t0aXRsZX19XFxcXFwiIGhhcyBiZWVuIHNhdmVkLiBKUFwiLFwic3VjY2Vzc0luZGljYXRvci5wYWdlQ29weVNhdmVkXCI6XCLjg5rjg7zjgrjjgYx7e3RpdGxlfX3jgajjgZfjgabkv53lrZjjgZXjgozjgb7jgZfjgZ9cIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZVJlbmFtZWRcIjpcIuODmuODvOOCuOWQjeOBjOWkieabtOOBleOCjOOBvuOBl+OBn1wiLFwic3VjY2Vzc0luZGljYXRvci5jb250ZXh0R3JvdXBBcHBsaWVkXCI6XCLjgrPjg7Pjg4bjgq3jgrnjg4jjgrDjg6vjg7zjg5fjgYzpgannlKjjgZXjgozjgb7jgZfjgZ9cIixcInN1Y2Nlc3NJbmRpY2F0b3IubmFtZWRDb250ZXh0R3JvdXBBcHBsaWVkXCI6XCJ7e2NvbG9yTmFtZX1944Kz44Oz44OG44Kt44K544OI44Kw44Or44O844OX44GM6YGp55So44GV44KM44G+44GX44GfXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnZpZXdSZW1vdmVkXCI6XCLjgrPjg7Pjg4bjgq3jgrnjg4jjgrDjg6vjg7zjg5fjgYvjgonjg5Pjg6Xjg7zjgYzliYrpmaTjgZXjgozjgb7jgZfjgZ9cIixcInN1Y2Nlc3NJbmRpY2F0b3Iudmlld3NSZW1vdmVkXCI6XCLjgrPjg7Pjg4bjgq3jgrnjg4jjgrDjg6vjg7zjg5fjgYvjgonjg5Pjg6Xjg7zjgYzliYrpmaTjgZXjgozjgb7jgZfjgZ9cIixcInN1Y2Nlc3NJbmRpY2F0b3IubGF5b3V0QXBwbGllZFwiOlwie3tsYXlvdXROYW1lfX3jg6zjgqTjgqLjgqbjg4jjgYzpgannlKjjgZXjgozjgb7jgZfjgZ9cIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlRGVsZXRlZFwiOlwi44Ov44O844Kv44K544Oa44O844K544GM5YmK6Zmk44GV44KM44G+44GX44GfXCIsXCJlcnJvckluZGljYXRvci5wYWdlU2F2ZUZhaWxlZFwiOlwi44Oa44O844K444KS5L+d5a2Y44Gn44GN44G+44Gb44KT44Gn44GX44GfXCIsXCJlcnJvckluZGljYXRvci53b3Jrc3BhY2VTYXZlRmFpbGVkXCI6XCLjg6/jg7zjgq/jgrnjg5rjg7zjgrnjgpLkv53lrZjjgafjgY3jgb7jgZvjgpPjgafjgZfjgZ9cIixcImVycm9ySW5kaWNhdG9yLmZhaWxlZFRvRHVwbGljYXRlUGFnZVwiOlwi44Oa44O844K444KS6KSH6KO944Gn44GN44G+44Gb44KT44Gn44GX44GfXCIsXCJpbmZvSW5kaWNhdG9yLmNvbG9yTGlua0F0dGVtcHRcIjpcIuOBk+OBruOCv+ODluOCkuOCq+ODqeODvOODquODs+OCr+OBl+OCiOOBhuOBqOOBl+OBvuOBl+OBn+OBjOOAgeOCteOCpOODiC/jgrPjg7Pjg4bjg7Pjg4Tjga7jgqrjg7zjg4rjg7zjgYzjgb7jgaDjgZPjgozjgpLmnInlirnjgavjgZfjgabjgYTjgb7jgZvjgpNcIixcImdsb2JhbC5jYW5jZWxcIjpcIuOCreODo+ODs+OCu+ODq1wiLFwiZ2xvYmFsLmNvbmZpcm1cIjpcIueiuuiqjVwiLFwiZ2xvYmFsLnNhdmVcIjpcIuS/neWtmFwiLFwiZ2xvYmFsLmRlbGV0ZVwiOlwiRGVsZXRlIEpQXCIsXCJhcHBSZXN1bHRzLmhlYWRlclwiOlwiRmVhdHVyZWQgY29udGVudCBKUFwiLFwicmVjZW50bHlWaXNpdGVkLmhlYWRlclwiOlwiUmVjZW50bHkgdmlzaXRlZCBKUFwiLFwibGFuZGluZ1BhZ2Uuc3ViaGVhZGVyXCI6XCJBcHBzIGFuZCB3ZWJzaXRlcyBzZWxlY3RlZCBieSBhbiBhZG1pbiB3aWxsIHNob3cgaGVyZSBKUFwiLFwiYXJpYS5vcGVuQnJvd3NlclwiOlwi44OW44Op44Km44K244O844Oh44OL44Ol44O844KS6ZaL44GPXCIsXCJhcmlhLmJyb3dzZXJUYWJzXCI6XCLjg5bjg6njgqbjgrbjg7zjgr/jg5ZcIixcImFyaWEudmlld1RhYlwiOlwie3t0aXRsZX1944Gu44K/44OW44KS6KGo56S6XCIsXCJhcmlhLmNsb3NlUGFnZVwiOlwie3t0aXRsZX1944Gu44Oa44O844K444K/44OW44Oc44K/44Oz44KS6ZaJ44GY44KLXCIsXCJhcmlhLmNsb3NlVGFiXCI6XCJ7e3RpdGxlfX3jgr/jg5bjgpLplonjgZjjgotcIixcImFyaWEudGl0bGVcIjpcIuOCv+OCpOODiOODq1wiLFwiYXJpYS5jbG9zZUNvbnRleHRHcm91cFwiOlwi44Ko44K544Kx44O844OX44KS5L2/55So44GX44Gm44CB44Kz44Oz44OG44Kt44K544OI44Kw44Or44O844OX6YG45oqe44OA44Kk44Ki44Ot44Kw44KS6ZaJ44GY44KLXCIsXCJhcmlhLmNvbG9yTGlua2luZ1wiOlwi44Kr44Op44O844Oq44Oz44Kv44Gu6KGo56S6L+mdnuihqOekulwiLFwiYXJpYS5hcHBseUNvbG9yTGlua2luZ1wiOlwi44Kr44Op44O844Oq44Oz44Kv44KS6YGp55So44GZ44KL44OT44Ol44O844KS6YG45oqe44GX44Gm44GP44Gg44GV44GEXCIsXCJhcmlhLmFzc2lnbkNvbG9yTGlua2luZ0N1cnJlbnRWaWV3XCI6XCLnj77lnKjjga7jg5Pjg6Xjg7zjga97e25hbWV9feOCs+ODs+ODhuOCreOCueODiOOCsOODq+ODvOODl+OBq+WJsuOCiuW9k+OBpuOCieOCjOOBpuOBhOOBvuOBmVwiLFwiYXJpYS5hc3NpZ25Db2xvckxpbmtpbmdDdXJyZW50Vmlld3NcIjpcIuePvuWcqOOBruODk+ODpeODvOOBr3t7bmFtZX1944Kz44Oz44OG44Kt44K544OI44Kw44Or44O844OX44Gr5Ymy44KK5b2T44Gm44KJ44KM44Gm44GE44G+44GZXCIsXCJhcmlhLnNldENvbG9yTGlua2luZ0FjdGl2ZVZpZXdcIjpcIuOCouOCr+ODhuOCo+ODluODk+ODpeODvOOCknt7bmFtZX1944Kz44Oz44OG44Kt44K544OI44Kw44Or44O844OX44Gr6Kit5a6aXCIsXCJhcmlhLnNldENvbG9yTGlua2luZ0FjdGl2ZVZpZXdzXCI6XCLjgqLjgq/jg4bjgqPjg5bjg5Pjg6Xjg7zjgpJ7e25hbWV9feOCs+ODs+ODhuOCreOCueODiOOCsOODq+ODvOODl+OBq+ioreWumlwiLFwiYXJpYS5lc2NhcGVMYXlvdXREaWFsb2dcIjpcIuOCqOOCueOCseODvOODl+OCkuS9v+eUqOOBl+OBpuOAgeODrOOCpOOCouOCpuODiOWkieabtOmBuOaKnuODgOOCpOOCouODreOCsOOCkumWieOBmOOCi1wiLFwiZ2xvYmFsLnN1cGVydGFiXCI6XCJTdXBlcnRhYiBKUFwiLFwiZ2xvYmFsLnRhYlwiOlwiVGFiIEpQXCIsXCJib29rbWFya3MuZWRpdEJvb2ttYXJrXCI6XCJFZGl0IEJvb2ttYXJrIEpQXCIsXCJib29rbWFya3MuYm9va21hcmtBZGRlZFwiOlwiQm9va21hcmsgYWRkZWQgSlBcIixcImJvb2ttYXJrcy5kb25lXCI6XCJEb25lIEpQXCIsXCJib29rbWFya3MucmVtb3ZlXCI6XCJSZW1vdmUgSlBcIixcImJvb2ttYXJrcy5ib29rbWFya3NQYW5lbFwiOlwiQm9va21hcmtzIFBhbmVsIEpQXCIsXCJib29rbWFya3MuY2xvc2VQYW5lbFwiOlwiQ2xvc2UgQm9va21hcmtzIFBhbmVsIEpQXCIsXCJib29rbWFya3MuYm9va21hcmtzXCI6XCJCb29rbWFya3MgSlBcIixcImJvb2ttYXJrcy5hbGxCb29rbWFya3NcIjpcIkFsbCBCb29rbWFya3MgSlBcIixcImJvb2ttYXJrcy5mYXZvcml0ZXNcIjpcIkZhdm9yaXRlcyBKUFwiLFwiYm9va21hcmtzLnNlYXJjaEJvb2ttYXJrc1wiOlwiU2VhcmNoIEJvb2ttYXJrcyBKUFwiLFwiYm9va21hcmtzLmNsZWFyU2VhcmNoSW5wdXRcIjpcIkNsZWFyIFNlYXJjaCBJbnB1dCBKUFwiLFwiYm9va21hcmtzLmNyZWF0ZUZvbGRlclwiOlwiQ3JlYXRlIE5ldyBGb2xkZXIgSlBcIixcImJvb2ttYXJrcy5leGl0Rm9sZGVyXCI6XCJFeGl0IEZvbGRlciBKUFwiLFwiYm9va21hcmtzLm5ld0ZvbGRlclwiOlwiTmV3IEZvbGRlciBKUFwiLFwiYm9va21hcmtzLm5hbWVkRm9sZGVyXCI6XCJ7e25hbWV9fSBGb2xkZXIgSlBcIixcImJvb2ttYXJrcy5ib29rbWFya1NldHRpbmdzXCI6XCJ7e25hbWV9fSBCb29rbWFyayBTZXR0aW5ncyBKUFwiLFwiYm9va21hcmtzLmZvbGRlclNldHRpbmdzXCI6XCJ7e25hbWV9fSBGb2xkZXIgU2V0dGluZ3MgSlBcIixcImJvb2ttYXJrcy5ub1Jlc3VsdHNGb3VuZFwiOlwiTm8gcmVzdWx0cyBmb3VuZCBKUFwiLFwiYm9va21hcmtzLm5vUmVzdWx0c0ZvdW5kU3VidGV4dFwiOlwiVGhlcmUgYXJlIG5vIGJvb2ttYXJrcyB0aGF0IG1hdGNoIHlvdXIgc2VhcmNoIEpQXCIsXCJib29rbWFya3Mubm90aGluZ1RvU2hvd1wiOlwiTm90aGluZyB0byBzaG93IHlldCBKUFwiLFwiYm9va21hcmtzLm5vdGhpbmdUb1Nob3dTdWJ0ZXh0XCI6XCJBZGQgYSBib29rbWFyayB0byB0aGlzIGZvbGRlciBKUFwiLFwiYm9va21hcmtzLnJlc3VsdHNGb3VuZEluXCI6XCJSZXN1bHRzIGZvdW5kIGluIHt7bmFtZX19IEpQXCIsXCJib29rbWFya3MucmVzdWx0c0luT3RoZXJGb2xkZXJzXCI6XCJSZXN1bHRzIGZvdW5kIGluIG90aGVyIGZvbGRlcnMgSlBcIixcImJvb2ttYXJrcy5hbGxSZXN1bHRzRm91bmRJblwiOlwiQWxsIHJlc3VsdHMgZm91bmQgaW4gSlBcIixcImJvb2ttYXJrcy5lZGl0TmFtZVwiOlwiRWRpdCBOYW1lIEpQXCIsXCJib29rbWFya3MubW92ZVwiOlwiTW92ZSBKUFwiLFwiYm9va21hcmtzLmJvb2ttYXJrQWRkZWRUaXRsZVwiOlwiQm9va21hcmsgQWRkZWQgSlBcIixcImJvb2ttYXJrcy5ib29rbWFya0FkZGVkVG9Gb2xkZXJcIjpcIllvdXIgYm9va21hcmsgd2FzIGFkZGVkIHRvIFxcXFxcInt7Zm9sZGVyTmFtZX19XFxcXFwiIEpQXCIsXCJib29rbWFya3MuYm9va21hcmtFZGl0ZWRUaXRsZVwiOlwiQm9va21hcmsgRWRpdGVkIEpQXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuc2F2ZVN1cGVydGFiXCI6XCJTYXZlIFN1cGVydGFiIEpQXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuc2F2ZVN1cGVydGFiQXNcIjpcIlNhdmUgU3VwZXJ0YWIgQXMuLi4gSlBcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5kdXBsaWNhdGVcIjpcIkR1cGxpY2F0ZSBKUFwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LmRlbGV0ZVN1cGVydGFiXCI6XCJEZWxldGUgU3VwZXJ0YWIgSlBcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5uZXdUYWJcIjpcIk5ldyBUYWIgSlBcIixcImVudGVycHJpc2VTYXZlTWVudS5zYXZlU3VwZXJ0YWJBc1wiOlwiU2F2ZSBTdXBlcnRhYiBBcyBKUFwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC5yZW5hbWVTdXBlcnRhYlwiOlwiUmVuYW1lIEpQXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLnVuc2F2ZWRDaGFuZ2VzXCI6XCJZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMgaW4gdGhpcyBUYWIuIEpQXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLmNsb3NlVGFiXCI6XCJDbG9zZSBUYWIgSlBcIixcImVudGVycHJpc2VTYXZlTW9kYWwuY2xvc2VTdXBlcnRhYlwiOlwiQ2xvc2UgU3VwZXJ0YWIgSlBcIixcImVudGVycHJpc2VTYXZlTW9kYWwuc2F2ZVN1cGVydGFiQ291bnRcIjpcIlNhdmUge3tjb3VudH19IFN1cGVydGFicyBiZWZvcmUgY2xvc2luZz8gSlBcIixcImVudGVycHJpc2VNb2RhbC5kaXNjYXJkU3VwZXJ0YWJXYXJuaW5nXCI6XCJBbnkgdW5zYXZlZCBjaGFuZ2VzIHRvIHRoaXMgU3VwZXJ0YWIgd2lsbCBiZSBsb3N0LiBKUFwiLFwiZW50ZXJwcmlzZURlbGV0ZU1vZGFsLmRlbGV0ZVN1cGVydGFiXCI6XCJEZWxldGUgdGhlIFxcXFxcInt7dGl0bGV9fVxcXFxcIiBTdXBlcnRhYj8gSlBcIixcImVudGVycHJpc2VEZWxldGVNb2RhbC5kZWxldGVTdXBlcnRhYldhcm5pbmdcIjpcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBTdXBlcnRhYj8gVGhpcyBhY3Rpb24gY2Fubm90IGJlIHVuZG9uZSBhbmQgaXMgcGVybWFuZW50LiBKUFwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJTYXZlZFwiOlwiU3VwZXJ0YWIgU2F2ZWQgSlBcIixcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiSGFzQmVlblNhdmVkXCI6XCJcXFxcXCJ7e3RpdGxlfX1cXFxcXCIgU3VwZXJ0YWIgaGFzIGJlZW4gc2F2ZWQuIEpQXCIsXCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYkRlbGV0ZWRcIjpcIlN1cGVydGFiIERlbGV0ZWQgSlBcIixcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiSGFzQmVlbkRlbGV0ZWRcIjpcIlxcXFxcInt7dGl0bGV9fVxcXFxcIiBTdXBlcnRhYiBoYXMgYmVlbiBkZWxldGVkLiBKUFwiLFwiZW50ZXJwcmlzZUVycm9ySW5kaWNhdG9yLmZhaWxlZFRvRHVwbGljYXRlVGFiXCI6XCJGYWlsZWQgdG8gZHVwbGljYXRlIFRhYiBKUFwiLFwiZW50ZXJwcmlzZUVycm9ySW5kaWNhdG9yLmZhaWxlZFRvRHVwbGljYXRlU3VwZXJ0YWJcIjpcIkZhaWxlZCB0byBkdXBsaWNhdGUgU3VwZXJ0YWIgSlBcIixcImVudGVycHJpc2VDb21tYW5kQmFyLnN3aXRjaFRvU3VwZXJ0YWJcIjpcIlN3aXRjaCB0byBTdXBlcnRhYiBKUFwiLFwiZW50ZXJwcmlzZUNvbW1hbmRCYXIuZ29Ub1wiOlwiR28gdG8ge3t0eXBlfX0gSlBcIixcImNvbnRleHRNZW51LnF1aXRFbnRlcnByaXNlQnJvd3NlclwiOlwiUXVpdCBKUFwifScpLFRuPUpTT04ucGFyc2UoJ3tcImNvbnRleHRNZW51Lm5ld1dpbmRvd1wiOlwi7IOIIOywvVwiLFwiY29udGV4dE1lbnUubmV3UGFnZVwiOlwi7IOIIO2OmOydtOyngFwiLFwiY29udGV4dE1lbnUucmVzdG9yZVwiOlwi66eI7KeA66eJ7Jy866GcIOyggOyepe2VnCDrs4Dqsr0g7IKs7ZWt7Jy866GcIOuzteybkFwiLFwiY29udGV4dE1lbnUuc3dpdGNoV29ya3NwYWNlXCI6XCLsnpHsl4Ug6rO16rCEIOyghO2ZmFwiLFwiY29udGV4dE1lbnUuYXBwZWFyYW5jZVwiOlwi66qo7JaRXCIsXCJjb250ZXh0TWVudS5zYXZlV29ya3NwYWNlXCI6XCLsnpHsl4Ug6rO16rCEIOyggOyepVwiLFwiY29udGV4dE1lbnUuc2F2ZVdvcmtzcGFjZUFzXCI6XCLri6Trpbgg7J2066aE7Jy866GcIOyekeyXhSDqs7XqsIQg7KCA7J6lLi4uXCIsXCJjb250ZXh0TWVudS5yZW5hbWVXb3Jrc3BhY2VcIjpcIuyekeyXhSDqs7XqsIQg7J2066aEIOuwlOq+uOq4sFwiLFwiY29udGV4dE1lbnUuZGVsZXRlV29ya3NwYWNlXCI6XCLsnpHsl4Ug6rO16rCEIOyCreygnFwiLFwiY29udGV4dE1lbnUuZG93bmxvYWRzXCI6XCLri6TsmrTroZzrk5xcIixcImNvbnRleHRNZW51LnNhdmVQYWdlXCI6XCLtjpjsnbTsp4Ag7KCA7J6lXCIsXCJjb250ZXh0TWVudS5zYXZlUGFnZUFzXCI6XCLri6Trpbgg7J2066aE7Jy866GcIO2OmOydtOyngCDsoIDsnqUuLi5cIixcImNvbnRleHRNZW51LnByaW50XCI6XCLsnbjsh4QuLi5cIixcImNvbnRleHRNZW51LnByaW50U2NyZWVuXCI6XCLtmZTrqbQg7J247IeEXCIsXCJjb250ZXh0TWVudS5jbG9zZVdpbmRvd1wiOlwi7LC9IOuLq+q4sFwiLFwiY29udGV4dE1lbnUub3BlblN0b3JlZnJvbnRcIjpcIuunpOyepSDsl7TquLBcIixcImNvbnRleHRNZW51LnF1aXRQbGF0Zm9ybVwiOlwi7ZSM656r7Y+8IOyiheujjFwiLFwiY29udGV4dE1lbnUubmV3Vmlld1wiOlwi7IOIIOu3sFwiLFwiY29udGV4dE1lbnUub3BlblZpZXdcIjpcIuq4sOuzuCDsm7kg67iM65287Jqw7KCA66GcIOu3sCDsl7TquLBcIixcImNvbnRleHRNZW51Lm9wZW5WaWV3c1wiOlwi6riw67O4IOybuSDruIzrnbzsmrDsoIDroZwg67ewIOyXtOq4sFwiLFwiY29udGV4dE1lbnUucmVsb2FkXCI6XCJSZWxvYWQgS1JcIixcImNvbnRleHRNZW51LnJlbG9hZFZpZXdcIjpcIuu3sCDri6Tsi5wg66Gc65OcXCIsXCJjb250ZXh0TWVudS5yZWxvYWRWaWV3c1wiOlwi67ewIOuLpOyLnCDroZzrk5xcIixcImNvbnRleHRNZW51LmR1cGxpY2F0ZVwiOlwiRHVwbGljYXRlIEtSXCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVWaWV3XCI6XCLrt7Ag67O17KCcXCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVWaWV3c1wiOlwi67ewIOuzteygnFwiLFwiY29udGV4dE1lbnUuYWRkVmlld1wiOlwi7LGE64SQ7JeQIOu3sCDstpTqsIBcIixcImNvbnRleHRNZW51LmFkZFZpZXdzXCI6XCLssYTrhJDsl5Ag67ewIOy2lOqwgFwiLFwiY29udGV4dE1lbnUucmVtb3ZlVmlld1wiOlwi7LGE64SQ7JeQ7IScIOu3sCDsoJzqsbBcIixcImNvbnRleHRNZW51LnJlbW92ZVZpZXdzXCI6XCLssYTrhJDsl5DshJwg67ewIOygnOqxsFwiLFwiY29udGV4dE1lbnUuY2xvc2VWaWV3XCI6XCLrt7Ag64ur6riwXCIsXCJjb250ZXh0TWVudS5jbG9zZVZpZXdzXCI6XCLrt7Ag64ur6riwXCIsXCJjb250ZXh0TWVudS5jbG9zZVRhYlwiOlwiQ2xvc2UgVGFiIEtSXCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVQYWdlXCI6XCLtjpjsnbTsp4Ag67O17KCcXCIsXCJjb250ZXh0TWVudS5zdWJtZW51LnByaW50XCI6XCLsnbjsh4RcIixcImNvbnRleHRNZW51LnN1Ym1lbnUucHJpbnRBbGxcIjpcIuuqqOuRkCDsnbjsh4RcIixcInNhdmVNZW51LnNhdmVXb3Jrc3BhY2VBc1wiOlwi64uk66W4IOydtOumhOycvOuhnCDsnpHsl4Ug6rO16rCEIOyggOyepVwiLFwic2F2ZU1lbnUuc2F2ZVBhZ2VBc1wiOlwi64uk66W4IOydtOumhOycvOuhnCDtjpjsnbTsp4Ag7KCA7J6lXCIsXCJzYXZlTW9kYWwuZW50ZXJWYWx1ZVwiOlwiUGxlYXNlIGVudGVyIGEgdmFsdWUgS1JcIixcInNhdmVNb2RhbC5hbHJlYWR5RXhpc3RzXCI6XCJ7e3RpdGxlfX3snbQo6rCAKSDsnbTrr7gg7KG07J6s7ZWp64uI64ukLlwiLFwic2F2ZU1vZGFsLnBsZWFzZUVudGVyVmFsaWROYW1lXCI6XCLsnKDtmqjtlZwg7J2066aE7J2EIOyeheugpe2VmOyLreyLnOyYpC5cIixcInNhdmVNb2RhbC5yZW5hbWVQYWdlXCI6XCLtjpjsnbTsp4Ag7J2066aEIOuwlOq+uOq4sFwiLFwic2F2ZU1vZGFsLmNsb3NlUGFnZVwiOlwi7Y6Y7J207KeAIOuLq+q4sFwiLFwic2F2ZU1vZGFsLmRpc2NhcmRDaGFuZ2VzXCI6XCLrs4Dqsr0g7IKs7ZWtIO2PkOq4sFwiLFwic2F2ZU1vZGFsLmRpc2NhcmRBbGxcIjpcIuuqqOuRkCDtj5DquLBcIixcInNhdmVNb2RhbC5zYXZlQWxsXCI6XCLrqqjrkZAg7KCA7J6lXCIsXCJzYXZlTW9kYWwuc2F2ZVBhZ2VzQ291bnRcIjpcIuuLq+q4sCDsoITsl5Ag7Y6Y7J207KeAKHt7Y291bnR9feqwnCnrpbwg7KCA7J6l7ZWY7Iuc6rKg7Iq164uI6rmMP1wiLFwiZGVmYXVsdFBhZ2VUaXRsZVwiOlwiVW50aXRsZWQgUGFnZSBLUlwiLFwiZW50ZXJwcmlzZURlZmF1bHRQYWdlVGl0bGVcIjpcIlVudGl0bGVkIFN1cGVydGFiIEtSXCIsXCJhZGROZXdQYWdlXCI6XCJOZXcgUGFnZSBLUlwiLFwiYWRkTmV3VGFiXCI6XCLsg4gg7YOtIOy2lOqwgFwiLFwiYWRkTmV3Vmlld1wiOlwi7IOIIOu3sFwiLFwicmVzdG9yZU1vZGFsXCI6XCLrp4jsp4Drp4nsnLzroZwg7KCA7J6l7ZWcIOuzgOqyvSDsgqztla3snLzroZwg67O17JuQ7ZWY7Iuc6rKg7Iq164uI6rmMP1wiLFwibW9kYWwuZGlzY2FyZFdhcm5pbmdcIjpcIuyggOyepe2VmOyngCDslYrsnYAg67OA6rK9IOyCrO2VreydgCDrqqjrkZAg7Y+Q6riw65Cp64uI64ukXCIsXCJtb2RhbC5kaXNjYXJkUGFnZVdhcm5pbmdcIjpcIuydtCDtjpjsnbTsp4DsnZgg7KCA7J6l7ZWY7KeAIOyViuydgCDrs4Dqsr0g7IKs7ZWt7J2AIOuqqOuRkCDshpDsi6TrkKnri4jri6QuXCIsXCJtb2RhbC5zYXZlQ2hhbmdlc1Byb21wdFwiOlwi64ur6riwIOyghOyXkCDrs4Dqsr0g7IKs7ZWt7J2EIOyggOyepe2VmOyLnOqyoOyKteuLiOq5jD9cIixcIm1vZGFsLnBhZ2VDbG9zZVwiOlwiUGFnZSBDbG9zZSBLUlwiLFwic3dpdGNoV29ya3NwYWNlTW9kYWxcIjpcInt7d29ya3NwYWNlfX0o7Jy8KeuhnCDsoITtmZjtlZjsi5zqsqDsirXri4jquYw/XCIsXCJzd2l0Y2hXb3Jrc3BhY2VNb2RhbC53YXJuaW5nXCI6XCLsoIDsnqXtlZjsp4Ag7JWK7J2AIOuzgOqyvSDsgqztla3snYAg66qo65GQIO2PkOq4sOuQqeuLiOuLpFwiLFwiZGVsZXRlV29ya3NwYWNlTW9kYWxcIjpcIuydtCDsnpHsl4Ug6rO16rCE7J2EIOyYgeq1rOyggeycvOuhnCDsgq3soJztlZjsi5zqsqDsirXri4jquYw/XCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwud2FybmluZ1wiOlwie3t3b3Jrc3BhY2V9fSjsnbQp652864qUIOydtOumhOydmCDsnpHsl4Ug6rO16rCE7J20IOydtOuvuCDsobTsnqztlanri4jri6QuIOq1kOyytO2VmOyLnOqyoOyKteuLiOq5jD9cIixcInJlcGxhY2VXb3Jrc3BhY2VNb2RhbC53YXJuaW5nLmJvZHlcIjpcIuqwmeydgCDsnbTrpoTsnZgg7J6R7JeFIOqzteqwhOydtCDsnbTrr7gg7KG07J6s7ZWp64uI64ukLiDqtZDssrTtlZjrqbQg7ZiE7J6sIOuCtOyaqeydhCDrja7slrTsk7Dqsowg65Cp64uI64ukLlwiLFwicmVwbGFjZVdvcmtzcGFjZU1vZGFsLnJlcGxhY2VcIjpcIuq1kOyytFwiLFwiY2xvc2VQbGF0Zm9ybVwiOlwi7ZSM656r7Y+8IOuLq+q4sFwiLFwiY2xvc2VQbGF0Zm9ybS53b3Jrc3BhY2VcIjpcInt7d29ya3NwYWNlfX0g7ZSM656r7Y+8IOuLq+q4sFwiLFwiY2xvc2VQbGF0Zm9ybS53YXJuaW5nXCI6XCLtlIzrnqvtj7zsnYQg64ur7Jy866m0IOyLpO2WiSDspJHsnbgg66qo65OgIOyekeyXhSDqs7XqsIQsIOyVsSDrmJDripQg7ZSE66Gc7IS47Iqk6rCAIOuLq+2emeuLiOuLpC5cIixcImJhY2tcIjpcIuuSpOuhnCDqsIDquLBcIixcImZvcndhcmRcIjpcIuyVnuycvOuhnCDqsIDquLBcIixcInJlbG9hZFwiOlwi7IOI66Gc6rOg7LmoXCIsXCJncmVlblwiOlwi64W57IOJXCIsXCJwdXJwbGVcIjpcIuuztOudvOyDiVwiLFwib3JhbmdlXCI6XCLsmKTroIzsp4Dsg4lcIixcInJlZFwiOlwi67mo6rCE7IOJXCIsXCJwaW5rXCI6XCLtlZHtgazsg4lcIixcInllbGxvd1wiOlwi64W4656A7IOJXCIsXCJ0aGVtZS5saWdodFwiOlwi67Cd7J2AXCIsXCJ0aGVtZS5kYXJrXCI6XCLslrTrkZDsmrRcIixcInRoZW1lLnN5c3RlbVwiOlwiT1Mg7ISk7KCV6rO8IOuPmeq4sO2ZlFwiLFwidG9vbGJhci5oaWRlVGFic1wiOlwi7YOtIOyIqOq4sOq4sFwiLFwidG9vbGJhci5zaG93VGFic1wiOlwi7YOtIO2RnOyLnFwiLFwidG9vbGJhci5sb2NrXCI6XCLsnqDquIhcIixcInRvb2xiYXIudW5sb2NrXCI6XCLsnqDquIgg7ZW07KCcXCIsXCJ0b29sYmFyLmNvbG9yTGlua2luZ1wiOlwi7IOJ7IOBIOyXsOqysFwiLFwidG9vbGJhci5jaGFuZ2VMYXlvdXRcIjpcIuugiOydtOyVhOybgyDrs4Dqsr1cIixcInRvb2xiYXIuc2F2ZU1lbnVcIjpcIuyggOyepSDrqZTribRcIixcInRvb2xiYXIubWF4aW1pemVXaW5kb3dcIjpcIuywvSDstZzrjIDtmZRcIixcInRvb2xiYXIucmVzdG9yZVdpbmRvd1wiOlwi7LC9IOuzteybkFwiLFwidG9vbGJhci5taW5pbWl6ZVdpbmRvd1wiOlwi7LC9IOy1nOyGjO2ZlFwiLFwiY2hhbmdlTGF5b3V0LmZ1bGxXaWR0aFwiOlwi7KCE7LK0IOuEiOu5hFwiLFwiY2hhbmdlTGF5b3V0LmNvbHVtbnNcIjpcIuyXtFwiLFwiY2hhbmdlTGF5b3V0LlJvd3NcIjpcIu2WiVwiLFwiY2hhbmdlTGF5b3V0LkdyaWRcIjpcIuq3uOumrOuTnFwiLFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VTd2l0Y2hlZFwiOlwi7J6R7JeFIOqzteqwhCDsoITtmZhcIixcInN1Y2Nlc3NJbmRpY2F0b3IuaGlkZGVuXCI6XCLtg60g7Iio6rmAXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnNob3duXCI6XCLtg60g7ZGc7IucXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmxvY2tlZFwiOlwi7Y6Y7J207KeAIOyeoOq4iFwiLFwic3VjY2Vzc0luZGljYXRvci51bmxvY2tlZFwiOlwi7Y6Y7J207KeAIOyeoOq4iCDtlbTsoJzrkKhcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlU2F2ZWRcIjpcIuyekeyXhSDqs7XqsIQg7KCA7J6l65CoXCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZVNhdmVkQXNcIjpcIuyekeyXhSDqs7XqsITsnbQge3t3b3Jrc3BhY2V9fSjsnLwp66GcIOyggOyepeuQqFwiLFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VSZW5hbWVkXCI6XCLsnpHsl4Ug6rO16rCEIOydtOumhCDrs4Dqsr3rkKhcIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZVNhdmVkXCI6XCLtjpjsnbTsp4Ag7KCA7J6l65CoXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VIYXNCZWVuU2F2ZWRcIjpcIlxcXFxcInt7dGl0bGV9fVxcXFxcIiBoYXMgYmVlbiBzYXZlZC4gS1JcIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZUNvcHlTYXZlZFwiOlwi7Y6Y7J207KeA6rCAIHt7dGl0bGV9fSjsnLwp66GcIOyggOyepeuQqFwiLFwic3VjY2Vzc0luZGljYXRvci5wYWdlUmVuYW1lZFwiOlwi7Y6Y7J207KeAIOydtOumhCDrs4Dqsr3rkKhcIixcInN1Y2Nlc3NJbmRpY2F0b3IuY29udGV4dEdyb3VwQXBwbGllZFwiOlwi7Luo7YWN7Iqk7Yq4IOq3uOujuSDsoIHsmqnrkKhcIixcInN1Y2Nlc3NJbmRpY2F0b3IubmFtZWRDb250ZXh0R3JvdXBBcHBsaWVkXCI6XCJ7e2NvbG9yTmFtZX19IOy7qO2FjeyKpO2KuCDqt7jro7kg7KCB7Jqp65CoXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnZpZXdSZW1vdmVkXCI6XCLsu6jthY3siqTtirgg6re466O57JeQ7IScIOu3sCDsoJzqsbDrkKhcIixcInN1Y2Nlc3NJbmRpY2F0b3Iudmlld3NSZW1vdmVkXCI6XCLsu6jthY3siqTtirgg6re466O57JeQ7IScIOu3sCDsoJzqsbDrkKhcIixcInN1Y2Nlc3NJbmRpY2F0b3IubGF5b3V0QXBwbGllZFwiOlwie3tsYXlvdXROYW1lfX0g66CI7J207JWE7JuDIOyggeyaqeuQqFwiLFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VEZWxldGVkXCI6XCLsnpHsl4Ug6rO16rCEIOyCreygnOuQqFwiLFwiZXJyb3JJbmRpY2F0b3IucGFnZVNhdmVGYWlsZWRcIjpcIu2OmOydtOyngCDsoIDsnqUg7Iuk7YyoXCIsXCJlcnJvckluZGljYXRvci53b3Jrc3BhY2VTYXZlRmFpbGVkXCI6XCLsnpHsl4Ug6rO16rCEIOyggOyepSDsi6TtjKhcIixcImVycm9ySW5kaWNhdG9yLmZhaWxlZFRvRHVwbGljYXRlUGFnZVwiOlwi7Y6Y7J207KeAIOuzteygnCDsi6TtjKhcIixcImluZm9JbmRpY2F0b3IuY29sb3JMaW5rQXR0ZW1wdFwiOlwi7J20IO2DreydmCDsg4nsg4Eg66eB7YGs66W8IOyLnOuPhO2WiOyngOunjCDsgqzsnbTtirgv7L2Y7YWQ7LigIOyGjOycoOyekOqwgCDslYTsp4Eg7Zmc7ISx7ZmU7ZWY7KeAIOyViuyVmOyKteuLiOuLpC5cIixcImdsb2JhbC5jYW5jZWxcIjpcIuy3qOyGjFwiLFwiZ2xvYmFsLmNvbmZpcm1cIjpcIu2ZleyduFwiLFwiZ2xvYmFsLnNhdmVcIjpcIuyggOyepVwiLFwiZ2xvYmFsLmRlbGV0ZVwiOlwiRGVsZXRlIEtSXCIsXCJhcHBSZXN1bHRzLmhlYWRlclwiOlwiRmVhdHVyZWQgQ29udGVudCBLUlwiLFwicmVjZW50bHlWaXNpdGVkLmhlYWRlclwiOlwiUmVjZW50bHkgdmlzaXRlZCBLUlwiLFwibGFuZGluZ1BhZ2Uuc3ViaGVhZGVyXCI6XCJBcHBzIGFuZCB3ZWJzaXRlcyBzZWxlY3RlZCBieSBhbiBhZG1pbiB3aWxsIHNob3cgaGVyZSBLUlwiLFwiYXJpYS5vcGVuQnJvd3NlclwiOlwi67iM65287Jqw7KCAIOuplOuJtCDsl7TquLBcIixcImFyaWEuYnJvd3NlclRhYnNcIjpcIuu4jOudvOyasOyggCDtg61cIixcImFyaWEudmlld1RhYlwiOlwie3t0aXRsZX197J2YIOu3sCDtg61cIixcImFyaWEuY2xvc2VQYWdlXCI6XCJ7e3RpdGxlfX3snZgg7Y6Y7J207KeAIOuLq+q4sCDtg61cIixcImFyaWEuY2xvc2VUYWJcIjpcIu2DrSB7e3RpdGxlfX0g64ur6riwXCIsXCJhcmlhLnRpdGxlXCI6XCLsoJzrqqlcIixcImFyaWEuY2xvc2VDb250ZXh0R3JvdXBcIjpcIuydtOyKpOy8gOydtO2UhOulvCDsgqzsmqntlZjsl6wg7Luo7YWN7Iqk7Yq4IOq3uOujuSDshKDtg50g64yA7ZmU7IOB7J6QIOuLq+q4sFwiLFwiYXJpYS5jb2xvckxpbmtpbmdcIjpcIuyDieyDgSDsl7DqsrAg7ZGc7IucIOuYkOuKlCDsiKjquLDquLBcIixcImFyaWEuYXBwbHlDb2xvckxpbmtpbmdcIjpcIuyDieyDgSDsl7DqsrDsnYQg7KCB7Jqp7ZWY66Ck66m0IOu3sOulvCDshKDtg53tlZjsi63si5zsmKQuXCIsXCJhcmlhLmFzc2lnbkNvbG9yTGlua2luZ0N1cnJlbnRWaWV3XCI6XCJ7e25hbWV9fSDsu6jthY3siqTtirgg6re466O57JeQIO2VoOuLueuQnCDtmITsnqwg67ewXCIsXCJhcmlhLmFzc2lnbkNvbG9yTGlua2luZ0N1cnJlbnRWaWV3c1wiOlwie3tuYW1lfX0g7Luo7YWN7Iqk7Yq4IOq3uOujueyXkCDtlaDri7nrkJwg7ZiE7J6sIOu3sFwiLFwiYXJpYS5zZXRDb2xvckxpbmtpbmdBY3RpdmVWaWV3XCI6XCLtmZzshLEg67ew66W8IHt7bmFtZX19IOy7qO2FjeyKpO2KuCDqt7jro7nsnLzroZwg7ISk7KCVXCIsXCJhcmlhLnNldENvbG9yTGlua2luZ0FjdGl2ZVZpZXdzXCI6XCLtmZzshLEg67ew66W8IHt7bmFtZX19IOy7qO2FjeyKpO2KuCDqt7jro7nsnLzroZwg7ISk7KCVXCIsXCJhcmlhLmVzY2FwZUxheW91dERpYWxvZ1wiOlwi7J207Iqk7LyA7J207ZSE66W8IOyCrOyaqe2VmOyXrCDroIjsnbTslYTsm4Mg67OA6rK9IOuMgO2ZlOyDgeyekCDri6vquLBcIixcImdsb2JhbC5zdXBlcnRhYlwiOlwiU3VwZXJ0YWIgS1JcIixcImdsb2JhbC50YWJcIjpcIlRhYiBLUlwiLFwiYm9va21hcmtzLmVkaXRCb29rbWFya1wiOlwiRWRpdCBCb29rbWFyayBLUlwiLFwiYm9va21hcmtzLmJvb2ttYXJrQWRkZWRcIjpcIkJvb2ttYXJrIGFkZGVkIEtSXCIsXCJib29rbWFya3MuZG9uZVwiOlwiRG9uZSBLUlwiLFwiYm9va21hcmtzLnJlbW92ZVwiOlwiUmVtb3ZlIEtSXCIsXCJib29rbWFya3MuYm9va21hcmtzUGFuZWxcIjpcIkJvb2ttYXJrcyBQYW5lbCBLUlwiLFwiYm9va21hcmtzLmNsb3NlUGFuZWxcIjpcIkNsb3NlIEJvb2ttYXJrcyBQYW5lbCBLUlwiLFwiYm9va21hcmtzLmJvb2ttYXJrc1wiOlwiQm9va21hcmtzIEtSXCIsXCJib29rbWFya3MuYWxsQm9va21hcmtzXCI6XCJBbGwgQm9va21hcmtzIEtSXCIsXCJib29rbWFya3MuZmF2b3JpdGVzXCI6XCJGYXZvcml0ZXMgS1JcIixcImJvb2ttYXJrcy5zZWFyY2hCb29rbWFya3NcIjpcIlNlYXJjaCBCb29rbWFya3MgS1JcIixcImJvb2ttYXJrcy5jbGVhclNlYXJjaElucHV0XCI6XCJDbGVhciBTZWFyY2ggSW5wdXQgS1JcIixcImJvb2ttYXJrcy5jcmVhdGVGb2xkZXJcIjpcIkNyZWF0ZSBOZXcgRm9sZGVyIEtSXCIsXCJib29rbWFya3MuZXhpdEZvbGRlclwiOlwiRXhpdCBGb2xkZXIgS1JcIixcImJvb2ttYXJrcy5uZXdGb2xkZXJcIjpcIk5ldyBGb2xkZXIgS1JcIixcImJvb2ttYXJrcy5uYW1lZEZvbGRlclwiOlwie3tuYW1lfX0gRm9sZGVyIEtSXCIsXCJib29rbWFya3MuYm9va21hcmtTZXR0aW5nc1wiOlwie3tuYW1lfX0gQm9va21hcmsgU2V0dGluZ3MgS1JcIixcImJvb2ttYXJrcy5mb2xkZXJTZXR0aW5nc1wiOlwie3tuYW1lfX0gRm9sZGVyIFNldHRpbmdzIEtSXCIsXCJib29rbWFya3Mubm9SZXN1bHRzRm91bmRcIjpcIk5vIHJlc3VsdHMgZm91bmQgS1JcIixcImJvb2ttYXJrcy5ub1Jlc3VsdHNGb3VuZFN1YnRleHRcIjpcIlRoZXJlIGFyZSBubyBib29rbWFya3MgdGhhdCBtYXRjaCB5b3VyIHNlYXJjaCBLUlwiLFwiYm9va21hcmtzLm5vdGhpbmdUb1Nob3dcIjpcIk5vdGhpbmcgdG8gc2hvdyB5ZXQgS1JcIixcImJvb2ttYXJrcy5ub3RoaW5nVG9TaG93U3VidGV4dFwiOlwiQWRkIGEgYm9va21hcmsgdG8gdGhpcyBmb2xkZXIgS1JcIixcImJvb2ttYXJrcy5yZXN1bHRzRm91bmRJblwiOlwiUmVzdWx0cyBmb3VuZCBpbiB7e25hbWV9fSBLUlwiLFwiYm9va21hcmtzLnJlc3VsdHNJbk90aGVyRm9sZGVyc1wiOlwiUmVzdWx0cyBmb3VuZCBpbiBvdGhlciBmb2xkZXJzIEtSXCIsXCJib29rbWFya3MuYWxsUmVzdWx0c0ZvdW5kSW5cIjpcIkFsbCByZXN1bHRzIGZvdW5kIGluIEtSXCIsXCJib29rbWFya3MuZWRpdE5hbWVcIjpcIkVkaXQgTmFtZSBLUlwiLFwiYm9va21hcmtzLm1vdmVcIjpcIk1vdmUgS1JcIixcImJvb2ttYXJrcy5ib29rbWFya0FkZGVkVGl0bGVcIjpcIkJvb2ttYXJrIEFkZGVkIEtSXCIsXCJib29rbWFya3MuYm9va21hcmtBZGRlZFRvRm9sZGVyXCI6XCJZb3VyIGJvb2ttYXJrIHdhcyBhZGRlZCB0byBcXFxcXCJ7e2ZvbGRlck5hbWV9fVxcXFxcIiBLUlwiLFwiYm9va21hcmtzLmJvb2ttYXJrRWRpdGVkVGl0bGVcIjpcIkJvb2ttYXJrIEVkaXRlZCBLUlwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LnNhdmVTdXBlcnRhYlwiOlwiU2F2ZSBTdXBlcnRhYiBLUlwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LnNhdmVTdXBlcnRhYkFzXCI6XCJTYXZlIFN1cGVydGFiIEFzLi4uIEtSXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuZHVwbGljYXRlXCI6XCJEdXBsaWNhdGUgS1JcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5kZWxldGVTdXBlcnRhYlwiOlwiRGVsZXRlIFN1cGVydGFiIEtSXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUubmV3VGFiXCI6XCJOZXcgVGFiIEtSXCIsXCJlbnRlcnByaXNlU2F2ZU1lbnUuc2F2ZVN1cGVydGFiQXNcIjpcIlNhdmUgU3VwZXJ0YWIgQXMgS1JcIixcImVudGVycHJpc2VTYXZlTW9kYWwucmVuYW1lU3VwZXJ0YWJcIjpcIlJlbmFtZSBLUlwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC51bnNhdmVkQ2hhbmdlc1wiOlwiWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzIGluIHRoaXMgVGFiLiBLUlwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC5jbG9zZVRhYlwiOlwiQ2xvc2UgVGFiIEtSXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLmNsb3NlU3VwZXJ0YWJcIjpcIkNsb3NlIFN1cGVydGFiIEtSXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLnNhdmVTdXBlcnRhYkNvdW50XCI6XCJTYXZlIHt7Y291bnR9fSBTdXBlcnRhYnMgYmVmb3JlIGNsb3Npbmc/IEtSXCIsXCJlbnRlcnByaXNlTW9kYWwuZGlzY2FyZFN1cGVydGFiV2FybmluZ1wiOlwiQW55IHVuc2F2ZWQgY2hhbmdlcyB0byB0aGlzIFN1cGVydGFiIHdpbGwgYmUgbG9zdC4gS1JcIixcImVudGVycHJpc2VEZWxldGVNb2RhbC5kZWxldGVTdXBlcnRhYlwiOlwiRGVsZXRlIHRoZSBcXFxcXCJ7e3RpdGxlfX1cXFxcXCIgU3VwZXJ0YWI/IEtSXCIsXCJlbnRlcnByaXNlRGVsZXRlTW9kYWwuZGVsZXRlU3VwZXJ0YWJXYXJuaW5nXCI6XCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgU3VwZXJ0YWI/IFRoaXMgYWN0aW9uIGNhbm5vdCBiZSB1bmRvbmUgYW5kIGlzIHBlcm1hbmVudC4gS1JcIixcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiU2F2ZWRcIjpcIlN1cGVydGFiIFNhdmVkIEtSXCIsXCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYkhhc0JlZW5TYXZlZFwiOlwiXFxcXFwie3t0aXRsZX19XFxcXFwiIFN1cGVydGFiIGhhcyBiZWVuIHNhdmVkLiBLUlwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJEZWxldGVkXCI6XCJTdXBlcnRhYiBEZWxldGVkIEtSXCIsXCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYkhhc0JlZW5EZWxldGVkXCI6XCJcXFxcXCJ7e3RpdGxlfX1cXFxcXCIgU3VwZXJ0YWIgaGFzIGJlZW4gZGVsZXRlZC4gS1JcIixcImVudGVycHJpc2VFcnJvckluZGljYXRvci5mYWlsZWRUb0R1cGxpY2F0ZVRhYlwiOlwiRmFpbGVkIHRvIGR1cGxpY2F0ZSBUYWIgS1JcIixcImVudGVycHJpc2VFcnJvckluZGljYXRvci5mYWlsZWRUb0R1cGxpY2F0ZVN1cGVydGFiXCI6XCJGYWlsZWQgdG8gZHVwbGljYXRlIFN1cGVydGFiIEtSXCIsXCJlbnRlcnByaXNlQ29tbWFuZEJhci5zd2l0Y2hUb1N1cGVydGFiXCI6XCJTd2l0Y2ggdG8gU3VwZXJ0YWIgS1JcIixcImVudGVycHJpc2VDb21tYW5kQmFyLmdvVG9cIjpcIkdvIHRvIHt7dHlwZX19IEtSXCIsXCJjb250ZXh0TWVudS5xdWl0RW50ZXJwcmlzZUJyb3dzZXJcIjpcIlF1aXQgS1JcIn0nKSxEbj1KU09OLnBhcnNlKCd7XCJjb250ZXh0TWVudS5uZXdXaW5kb3dcIjpcItCd0L7QstC+0LUg0L7QutC90L5cIixcImNvbnRleHRNZW51Lm5ld1BhZ2VcIjpcItCd0L7QstCw0Y8g0YHRgtGA0LDQvdC40YbQsFwiLFwiY29udGV4dE1lbnUucmVzdG9yZVwiOlwi0JLQvtGB0YHRgtCw0L3QvtCy0LjRgtGMINC/0L7RgdC70LXQtNC90LjQtSDRgdC+0YXRgNCw0L3QtdC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRj1wiLFwiY29udGV4dE1lbnUuc3dpdGNoV29ya3NwYWNlXCI6XCLQn9C10YDQtdC60LvRjtGH0LjRgtGMINGA0LDQsdC+0YfRg9GOINC+0LHQu9Cw0YHRgtGMXCIsXCJjb250ZXh0TWVudS5hcHBlYXJhbmNlXCI6XCLQktC90LXRiNC90LjQuSDQstC40LRcIixcImNvbnRleHRNZW51LnNhdmVXb3Jrc3BhY2VcIjpcItCh0L7RhdGA0LDQvdC40YLRjCDRgNCw0LHQvtGH0YPRjiDQvtCx0LvQsNGB0YLRjFwiLFwiY29udGV4dE1lbnUuc2F2ZVdvcmtzcGFjZUFzXCI6XCLQodC+0YXRgNCw0L3QuNGC0Ywg0YDQsNCx0L7Rh9GD0Y4g0L7QsdC70LDRgdGC0Ywg0LrQsNC6Li4uXCIsXCJjb250ZXh0TWVudS5yZW5hbWVXb3Jrc3BhY2VcIjpcItCf0LXRgNC10LjQvNC10L3QvtCy0LDRgtGMINGA0LDQsdC+0YfRg9GOINC+0LHQu9Cw0YHRgtGMXCIsXCJjb250ZXh0TWVudS5kZWxldGVXb3Jrc3BhY2VcIjpcItCj0LTQsNC70LjRgtGMINGA0LDQsdC+0YfRg9GOINC+0LHQu9Cw0YHRgtGMXCIsXCJjb250ZXh0TWVudS5kb3dubG9hZHNcIjpcItCX0LDQs9GA0YPQt9C60LhcIixcImNvbnRleHRNZW51LnNhdmVQYWdlXCI6XCLQodC+0YXRgNCw0L3QuNGC0Ywg0YHRgtGA0LDQvdC40YbRg1wiLFwiY29udGV4dE1lbnUuc2F2ZVBhZ2VBc1wiOlwi0KHQvtGF0YDQsNC90LjRgtGMINGB0YLRgNCw0L3QuNGG0YMg0LrQsNC6Li4uXCIsXCJjb250ZXh0TWVudS5wcmludFwiOlwi0J/QtdGH0LDRgtGMLi4uXCIsXCJjb250ZXh0TWVudS5wcmludFNjcmVlblwiOlwi0KDQsNGB0L/QtdGH0LDRgtCw0YLRjCDRjdC60YDQsNC9XCIsXCJjb250ZXh0TWVudS5jbG9zZVdpbmRvd1wiOlwi0JfQsNC60YDRi9GC0Ywg0L7QutC90L5cIixcImNvbnRleHRNZW51Lm9wZW5TdG9yZWZyb250XCI6XCLQntGC0LrRgNGL0YLRjCBTdG9yZWZyb250XCIsXCJjb250ZXh0TWVudS5xdWl0UGxhdGZvcm1cIjpcItCS0YvQudGC0Lgg0LjQtyDQv9C70LDRgtGE0L7RgNC80YtcIixcImNvbnRleHRNZW51Lm5ld1ZpZXdcIjpcItCd0L7QstC+0LUg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LVcIixcImNvbnRleHRNZW51Lm9wZW5WaWV3XCI6XCLQntGC0LrRgNGL0YLRjCDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtSDRgSDQv9C+0LzQvtGJ0YzRjiDQstC10LEt0LHRgNCw0YPQt9C10YDQsCDQv9C+INGD0LzQvtC70YfQsNC90LjRjlwiLFwiY29udGV4dE1lbnUub3BlblZpZXdzXCI6XCLQntGC0LrRgNGL0YLRjCDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjRjyDRgSDQv9C+0LzQvtGJ0YzRjiDQstC10LEt0LHRgNCw0YPQt9C10YDQsCDQv9C+INGD0LzQvtC70YfQsNC90LjRjlwiLFwiY29udGV4dE1lbnUucmVsb2FkXCI6XCJSZWxvYWQgUlVcIixcImNvbnRleHRNZW51LnJlbG9hZFZpZXdcIjpcItCf0LXRgNC10LfQsNCz0YDRg9C30LjRgtGMINC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC1XCIsXCJjb250ZXh0TWVudS5yZWxvYWRWaWV3c1wiOlwi0J/QtdGA0LXQt9Cw0LPRgNGD0LfQuNGC0Ywg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40Y9cIixcImNvbnRleHRNZW51LmR1cGxpY2F0ZVwiOlwiRHVwbGljYXRlIFJVXCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVWaWV3XCI6XCLQlNGD0LHQu9C40YDQvtCy0LDRgtGMINC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC1XCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVWaWV3c1wiOlwi0JTRg9Cx0LvQuNGA0L7QstCw0YLRjCDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjRj1wiLFwiY29udGV4dE1lbnUuYWRkVmlld1wiOlwi0JTQvtCx0LDQstC40YLRjCDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtSDQvdCwINC60LDQvdCw0LtcIixcImNvbnRleHRNZW51LmFkZFZpZXdzXCI6XCLQlNC+0LHQsNCy0LjRgtGMINC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNGPINC90LAg0LrQsNC90LDQu1wiLFwiY29udGV4dE1lbnUucmVtb3ZlVmlld1wiOlwi0KPQtNCw0LvQuNGC0Ywg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LUg0LjQtyDQutCw0L3QsNC70LBcIixcImNvbnRleHRNZW51LnJlbW92ZVZpZXdzXCI6XCLQo9C00LDQu9C40YLRjCDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjRjyDQuNC3INC60LDQvdCw0LvQsFwiLFwiY29udGV4dE1lbnUuY2xvc2VWaWV3XCI6XCLQl9Cw0LrRgNGL0YLRjCDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtVwiLFwiY29udGV4dE1lbnUuY2xvc2VWaWV3c1wiOlwi0JfQsNC60YDRi9GC0Ywg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40Y9cIixcImNvbnRleHRNZW51LmNsb3NlVGFiXCI6XCJDbG9zZSBUYWIgUlVcIixcImNvbnRleHRNZW51LmR1cGxpY2F0ZVBhZ2VcIjpcItCU0YPQsdC70LjRgNC+0LLQsNGC0Ywg0YHRgtGA0LDQvdC40YbRg1wiLFwiY29udGV4dE1lbnUuc3VibWVudS5wcmludFwiOlwi0J/QtdGH0LDRgtCw0YLRjFwiLFwiY29udGV4dE1lbnUuc3VibWVudS5wcmludEFsbFwiOlwi0J/QtdGH0LDRgtCw0YLRjCDQstGB0LVcIixcInNhdmVNZW51LnNhdmVXb3Jrc3BhY2VBc1wiOlwi0KHQvtGF0YDQsNC90LjRgtGMINGA0LDQsdC+0YfRg9GOINC+0LHQu9Cw0YHRgtGMINC60LDQulwiLFwic2F2ZU1lbnUuc2F2ZVBhZ2VBc1wiOlwi0KHQvtGF0YDQsNC90LjRgtGMINGB0YLRgNCw0L3QuNGG0YMg0LrQsNC6XCIsXCJzYXZlTW9kYWwuZW50ZXJWYWx1ZVwiOlwiUGxlYXNlIGVudGVyIGEgdmFsdWUgUlVcIixcInNhdmVNb2RhbC5hbHJlYWR5RXhpc3RzXCI6XCJ7e3RpdGxlfX0g0YPQttC1INGB0YPRidC10YHRgtCy0YPQtdGCLlwiLFwic2F2ZU1vZGFsLnBsZWFzZUVudGVyVmFsaWROYW1lXCI6XCLQktCy0LXQtNC40YLQtSDQv9C+0LTRhdC+0LTRj9GJ0LXQtSDQuNC80Y9cIixcInNhdmVNb2RhbC5yZW5hbWVQYWdlXCI6XCLQn9C10YDQtdC40LzQtdC90L7QstCw0YLRjCDRgdGC0YDQsNC90LjRhtGDXCIsXCJzYXZlTW9kYWwuY2xvc2VQYWdlXCI6XCLQl9Cw0LrRgNGL0YLRjCDRgdGC0YDQsNC90LjRhtGDXCIsXCJzYXZlTW9kYWwuZGlzY2FyZENoYW5nZXNcIjpcItCe0YLQvNC10L3QuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPXCIsXCJzYXZlTW9kYWwuZGlzY2FyZEFsbFwiOlwi0J7RgtC80LXQvdC40YLRjCDQstGB0LVcIixcInNhdmVNb2RhbC5zYXZlQWxsXCI6XCLQodC+0YXRgNCw0L3QuNGC0Ywg0LLRgdC1XCIsXCJzYXZlTW9kYWwuc2F2ZVBhZ2VzQ291bnRcIjpcItCh0L7RhdGA0LDQvdC40YLRjCAoe3tjb3VudH19KSDRgdGC0YDQsNC90LjRhiDQv9C10YDQtdC0INC30LDQutGA0YvRgtC40LXQvD9cIixcImRlZmF1bHRQYWdlVGl0bGVcIjpcIlVudGl0bGVkIFBhZ2UgUlVcIixcImVudGVycHJpc2VEZWZhdWx0UGFnZVRpdGxlXCI6XCJVbnRpdGxlZCBTdXBlcnRhYiBSVVwiLFwiYWRkTmV3UGFnZVwiOlwiTmV3IFBhZ2UgUlVcIixcImFkZE5ld1RhYlwiOlwi0JTQvtCx0LDQstC40YLRjCDQvdC+0LLRg9GOINCy0LrQu9Cw0LTQutGDXCIsXCJhZGROZXdWaWV3XCI6XCLQndC+0LLQvtC1INC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC1XCIsXCJyZXN0b3JlTW9kYWxcIjpcItCS0Ysg0YPQstC10YDQtdC90YssINGH0YLQviDRhdC+0YLQuNGC0LUg0LLQvtGB0YHRgtCw0L3QvtCy0LjRgtGMINC/0L7RgdC70LXQtNC90LjQtSDRgdC+0YXRgNCw0L3QtdC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjz9cIixcIm1vZGFsLmRpc2NhcmRXYXJuaW5nXCI6XCLQktGB0LUg0L3QtdGB0L7RhdGA0LDQvdC10L3QvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPINCx0YPQtNGD0YIg0L7RgtC80LXQvdC10L3Ri1wiLFwibW9kYWwuZGlzY2FyZFBhZ2VXYXJuaW5nXCI6XCLQktGB0LUg0L3QtdGB0L7RhdGA0LDQvdC10L3QvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPINC90LAg0Y3RgtC+0Lkg0YHRgtGA0LDQvdC40YbQtSDQsdGD0LTRg9GCINC/0L7RgtC10YDRj9C90YsuXCIsXCJtb2RhbC5zYXZlQ2hhbmdlc1Byb21wdFwiOlwi0KHQvtGF0YDQsNC90LjRgtGMINC40LfQvNC10L3QtdC90LjRjyDQv9C10YDQtdC0INC30LDQutGA0YvRgtC40LXQvD9cIixcIm1vZGFsLnBhZ2VDbG9zZVwiOlwiUGFnZSBDbG9zZSBSVVwiLFwic3dpdGNoV29ya3NwYWNlTW9kYWxcIjpcItCS0Ysg0YPQstC10YDQtdC90YssINGH0YLQviDRhdC+0YLQuNGC0LUg0L/QtdGA0LXQudGC0Lgg0LIge3t3b3Jrc3BhY2V9fT9cIixcInN3aXRjaFdvcmtzcGFjZU1vZGFsLndhcm5pbmdcIjpcItCS0YHQtSDQvdC10YHQvtGF0YDQsNC90LXQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8g0LHRg9C00YPRgiDQvtGC0LzQtdC90LXQvdGLXCIsXCJkZWxldGVXb3Jrc3BhY2VNb2RhbFwiOlwi0JLRiyDRg9Cy0LXRgNC10L3Riywg0YfRgtC+INGF0L7RgtC40YLQtSDQvdCw0LLRgdC10LPQtNCwINGD0LTQsNC70LjRgtGMINGN0YLRgyDRgNCw0LHQvtGH0YPRjiDQvtCx0LvQsNGB0YLRjD9cIixcInJlcGxhY2VXb3Jrc3BhY2VNb2RhbC53YXJuaW5nXCI6XCLQoNCw0LHQvtGH0LDRjyDQvtCx0LvQsNGB0YLRjCDRgSDQuNC80LXQvdC10Lwge3t3b3Jrc3BhY2V9fSDRg9C20LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIuINCS0Ysg0YXQvtGC0LjRgtC1INC30LDQvNC10L3QuNGC0Ywg0LXQtT9cIixcInJlcGxhY2VXb3Jrc3BhY2VNb2RhbC53YXJuaW5nLmJvZHlcIjpcItCg0LDQsdC+0YfQsNGPINC+0LHQu9Cw0YHRgtGMINGBINGC0LDQutC40Lwg0LbQtSDQuNC80LXQvdC10Lwg0YPQttC1INGB0YPRidC10YHRgtCy0YPQtdGCLiDQn9GA0Lgg0LXQtSDQt9Cw0LzQtdC90LUg0YLQtdC60YPRidC10LUg0YHQvtC00LXRgNC20LjQvNC+0LUg0LHRg9C00LXRgiDQv9C10YDQtdC30LDQv9C40YHQsNC90L4uXCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwucmVwbGFjZVwiOlwi0JfQsNC80LXQvdC40YLRjFwiLFwiY2xvc2VQbGF0Zm9ybVwiOlwi0JfQsNC60YDRi9GC0Ywg0L/Qu9Cw0YLRhNC+0YDQvNGDXCIsXCJjbG9zZVBsYXRmb3JtLndvcmtzcGFjZVwiOlwi0JfQsNC60YDRi9GC0Ywg0L/Qu9Cw0YLRhNC+0YDQvNGDIHt7d29ya3NwYWNlfX1cIixcImNsb3NlUGxhdGZvcm0ud2FybmluZ1wiOlwi0JfQsNC60YDRi9GC0LjQtSDQv9C70LDRgtGE0L7RgNC80Ysg0L/RgNC40LLQtdC00LXRgiDQuiDQt9Cw0LrRgNGL0YLQuNGOINCy0YHQtdGFINGA0LDQsdC+0YfQuNGFINC+0LHQu9Cw0YHRgtC10LksINC/0YDQuNC70L7QttC10L3QuNC5INC4INC30LDQv9GD0YnQtdC90L3Ri9GFINC/0YDQvtGG0LXRgdGB0L7Qsi5cIixcImJhY2tcIjpcItCd0LDQt9Cw0LRcIixcImZvcndhcmRcIjpcItCS0L/QtdGA0LXQtFwiLFwicmVsb2FkXCI6XCLQn9C10YDQtdC30LDQs9GA0YPQt9C40YLRjMKgXCIsXCJncmVlblwiOlwi0JfQtdC70LXQvdGL0LlcIixcInB1cnBsZVwiOlwi0KTQuNC+0LvQtdGC0L7QstGL0LlcIixcIm9yYW5nZVwiOlwi0J7RgNCw0L3QttC10LLRi9C5XCIsXCJyZWRcIjpcItCa0YDQsNGB0L3Ri9C5XCIsXCJwaW5rXCI6XCLQoNC+0LfQvtCy0YvQuVwiLFwieWVsbG93XCI6XCLQltC10LvRgtGL0LlcIixcInRoZW1lLmxpZ2h0XCI6XCLQodCy0LXRgtC70YvQuVwiLFwidGhlbWUuZGFya1wiOlwi0KLQtdC80L3Ri9C5XCIsXCJ0aGVtZS5zeXN0ZW1cIjpcItCh0LjQvdGF0YDQvtC90LjQt9C40YDQvtCy0LDRgtGMINGBINC90LDRgdGC0YDQvtC50LrQsNC80Lgg0J7QoVwiLFwidG9vbGJhci5oaWRlVGFic1wiOlwi0KHQutGA0YvRgtGMINCy0LrQu9Cw0LTQutC4XCIsXCJ0b29sYmFyLnNob3dUYWJzXCI6XCLQn9C+0LrQsNC30LDRgtGMINCy0LrQu9Cw0LTQutC4XCIsXCJ0b29sYmFyLmxvY2tcIjpcItCX0LDQsdC70L7QutC40YDQvtCy0LDRgtGMXCIsXCJ0b29sYmFyLnVubG9ja1wiOlwi0KDQsNC30LHQu9C+0LrQuNGA0L7QstCw0YLRjFwiLFwidG9vbGJhci5jb2xvckxpbmtpbmdcIjpcItCf0YDQuNCy0Y/Qt9C60LAg0Log0YbQstC10YLRg1wiLFwidG9vbGJhci5jaGFuZ2VMYXlvdXRcIjpcItCY0LfQvNC10L3QuNGC0Ywg0LzQsNC60LXRglwiLFwidG9vbGJhci5zYXZlTWVudVwiOlwi0JzQtdC90Y4g0YHQvtGF0YDQsNC90LXQvdC40Y9cIixcInRvb2xiYXIubWF4aW1pemVXaW5kb3dcIjpcItCj0LLQtdC70LjRh9C40YLRjCDQvtC60L3QvlwiLFwidG9vbGJhci5yZXN0b3JlV2luZG93XCI6XCLQktC+0YHRgdGC0LDQvdC+0LLQuNGC0Ywg0L7QutC90L5cIixcInRvb2xiYXIubWluaW1pemVXaW5kb3dcIjpcItCh0LLQtdGA0L3Rg9GC0Ywg0L7QutC90L5cIixcImNoYW5nZUxheW91dC5mdWxsV2lkdGhcIjpcItCf0L7Qu9C90LDRjyDRiNC40YDQuNC90LBcIixcImNoYW5nZUxheW91dC5jb2x1bW5zXCI6XCLQodGC0L7Qu9Cx0YbRi1wiLFwiY2hhbmdlTGF5b3V0LlJvd3NcIjpcItCh0YLRgNC+0LrQuFwiLFwiY2hhbmdlTGF5b3V0LkdyaWRcIjpcItCh0LXRgtC60LBcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlU3dpdGNoZWRcIjpcItCg0LDQsdC+0YfQsNGPINC+0LHQu9Cw0YHRgtGMINC/0LXRgNC10LrQu9GO0YfQtdC90LBcIixcInN1Y2Nlc3NJbmRpY2F0b3IuaGlkZGVuXCI6XCLQktC60LvQsNC00LrQuCDRgdC60YDRi9GC0YtcIixcInN1Y2Nlc3NJbmRpY2F0b3Iuc2hvd25cIjpcItCS0LrQu9Cw0LTQutC4INC/0L7QutCw0LfQsNC90YtcIixcInN1Y2Nlc3NJbmRpY2F0b3IubG9ja2VkXCI6XCLQodGC0YDQsNC90LjRhtCwINC30LDQsdC70L7QutC40YDQvtCy0LDQvdCwXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnVubG9ja2VkXCI6XCLQodGC0YDQsNC90LjRhtCwINGA0LDQt9Cx0LvQvtC60LjRgNC+0LLQsNC90LBcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlU2F2ZWRcIjpcItCg0LDQsdC+0YfQsNGPINC+0LHQu9Cw0YHRgtGMINGB0L7RhdGA0LDQvdC10L3QsFwiLFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VTYXZlZEFzXCI6XCLQoNCw0LHQvtGH0LDRjyDQvtCx0LvQsNGB0YLRjCDRgdC+0YXRgNCw0L3QtdC90LAg0LrQsNC6IHt7d29ya3NwYWNlfX1cIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlUmVuYW1lZFwiOlwi0KDQsNCx0L7Rh9Cw0Y8g0L7QsdC70LDRgdGC0Ywg0L/QtdGA0LXQuNC80LXQvdC+0LLQsNC90LBcIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZVNhdmVkXCI6XCLQodGC0YDQsNC90LjRhtCwINGB0L7RhdGA0LDQvdC10L3QsFwiLFwic3VjY2Vzc0luZGljYXRvci5wYWdlSGFzQmVlblNhdmVkXCI6XCJcXFxcXCJ7e3RpdGxlfX1cXFxcXCIgaGFzIGJlZW4gc2F2ZWQuIFJVXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VDb3B5U2F2ZWRcIjpcItCh0YLRgNCw0L3QuNGG0LAg0YHQvtGF0YDQsNC90LXQvdCwINC60LDQuiB7e3RpdGxlfX1cIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZVJlbmFtZWRcIjpcItCh0YLRgNCw0L3QuNGG0LAg0L/QtdGA0LXQuNC80LXQvdC+0LLQsNC90LBcIixcInN1Y2Nlc3NJbmRpY2F0b3IuY29udGV4dEdyb3VwQXBwbGllZFwiOlwi0JrQvtC90YLQtdC60YHRgtC90LDRjyDQs9GA0YPQv9C/0LAg0L/RgNC40LzQtdC90LXQvdCwXCIsXCJzdWNjZXNzSW5kaWNhdG9yLm5hbWVkQ29udGV4dEdyb3VwQXBwbGllZFwiOlwi0JrQvtC90YLQtdC60YHRgtC90LDRjyDQs9GA0YPQv9C/0LAge3tjb2xvck5hbWV9fSDQv9GA0LjQvNC10L3QtdC90LBcIixcInN1Y2Nlc3NJbmRpY2F0b3Iudmlld1JlbW92ZWRcIjpcItCf0YDQtdC00YHRgtCw0LLQu9C10L3QuNC1INGD0LTQsNC70LXQvdC+INC40Lcg0LrQvtC90YLQtdC60YHRgtC90L7QuSDQs9GA0YPQv9C/0YtcIixcInN1Y2Nlc3NJbmRpY2F0b3Iudmlld3NSZW1vdmVkXCI6XCLQn9GA0LXQtNGB0YLQsNCy0LvQtdC90LjRjyDRg9C00LDQu9C10L3RiyDQuNC3INC60L7QvdGC0LXQutGB0YLQvdC+0Lkg0LPRgNGD0L/Qv9GLXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmxheW91dEFwcGxpZWRcIjpcItCc0LDQutC10YIge3tsYXlvdXROYW1lfX0g0L/RgNC40LzQtdC90LXQvVwiLFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VEZWxldGVkXCI6XCLQoNCw0LHQvtGH0LDRjyDQvtCx0LvQsNGB0YLRjCDRg9C00LDQu9C10L3QsFwiLFwiZXJyb3JJbmRpY2F0b3IucGFnZVNhdmVGYWlsZWRcIjpcItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtGF0YDQsNC90LjRgtGMINGB0YLRgNCw0L3QuNGG0YNcIixcImVycm9ySW5kaWNhdG9yLndvcmtzcGFjZVNhdmVGYWlsZWRcIjpcItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtGF0YDQsNC90LjRgtGMINGA0LDQsdC+0YfRg9GOINC+0LHQu9Cw0YHRgtGMXCIsXCJlcnJvckluZGljYXRvci5mYWlsZWRUb0R1cGxpY2F0ZVBhZ2VcIjpcItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0LTRg9Cx0LvQuNGA0L7QstCw0YLRjCDRgdGC0YDQsNC90LjRhtGDXCIsXCJpbmZvSW5kaWNhdG9yLmNvbG9yTGlua0F0dGVtcHRcIjpcItCc0Ysg0L/QvtC/0YvRgtCw0LvQuNGB0Ywg0L/RgNC40LLRj9C30LDRgtGMINGG0LLQtdGCINC6INGN0YLQvtC5INCy0LrQu9Cw0LTQutC1LCDQvdC+INCy0LvQsNC00LXQu9C10YYg0YHQsNC50YLQsC/QutC+0L3RgtC10L3RgtCwINC10YnQtSDQvdC1INCy0LrQu9GO0YfQuNC7INGN0YLRgyDQstC+0LfQvNC+0LbQvdC+0YHRgtGMXCIsXCJnbG9iYWwuY2FuY2VsXCI6XCLQntGC0LzQtdC90LjRgtGMXCIsXCJnbG9iYWwuY29uZmlybVwiOlwi0J/QvtC00YLQstC10YDQtNC40YLRjFwiLFwiZ2xvYmFsLnNhdmVcIjpcItCh0L7RhdGA0LDQvdC40YLRjFwiLFwiZ2xvYmFsLmRlbGV0ZVwiOlwiRGVsZXRlIFJVXCIsXCJhcHBSZXN1bHRzLmhlYWRlclwiOlwiRmVhdHVyZWQgQ29udGVudCBSVVwiLFwicmVjZW50bHlWaXNpdGVkLmhlYWRlclwiOlwiUmVjZW50bHkgdmlzaXRlZCBSVVwiLFwibGFuZGluZ1BhZ2Uuc3ViaGVhZGVyXCI6XCJBcHBzIGFuZCB3ZWJzaXRlcyBzZWxlY3RlZCBieSBhbiBhZG1pbiB3aWxsIHNob3cgaGVyZSBSVVwiLFwiYXJpYS5vcGVuQnJvd3NlclwiOlwi0J7RgtC60YDRi9GC0Ywg0LzQtdC90Y4g0LHRgNCw0YPQt9C10YDQsFwiLFwiYXJpYS5icm93c2VyVGFic1wiOlwi0JLQutC70LDQtNC60Lgg0LHRgNCw0YPQt9C10YDQsFwiLFwiYXJpYS52aWV3VGFiXCI6XCLQktC60LvQsNC00LrQsCDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjRjyB7e3RpdGxlfX1cIixcImFyaWEuY2xvc2VQYWdlXCI6XCLQmtC90L7Qv9C60LAgwqvQl9Cw0LrRgNGL0YLRjMK7INC90LAg0LLQutC70LDQtNC60LUg0LTQu9GPINGB0YLRgNCw0L3QuNGG0Ysge3t0aXRsZX19XCIsXCJhcmlhLmNsb3NlVGFiXCI6XCLQl9Cw0LrRgNGL0YLRjCDQstC60LvQsNC00LrRgyB7e3RpdGxlfX1cIixcImFyaWEudGl0bGVcIjpcItCd0LDQt9Cy0LDQvdC40LVcIixcImFyaWEuY2xvc2VDb250ZXh0R3JvdXBcIjpcItCn0YLQvtCx0Ysg0LfQsNC60YDRi9GC0Ywg0LTQuNCw0LvQvtCzINCy0YvQsdC+0YDQsCDQutC+0L3RgtC10LrRgdGC0L3QvtC5INCz0YDRg9C/0L/Riywg0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSBlc2NhcGVcIixcImFyaWEuY29sb3JMaW5raW5nXCI6XCLQn9C+0LrQsNC30LDRgtGMINC40LvQuCDRgdC60YDRi9GC0Ywg0L/RgNC40LLRj9C30LrRgyDQuiDRhtCy0LXRgtGDXCIsXCJhcmlhLmFwcGx5Q29sb3JMaW5raW5nXCI6XCLQktGL0LHQtdGA0LjRgtC1INC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC1LCDRh9GC0L7QsdGLINC/0YDQuNC80LXQvdC40YLRjCDQv9GA0LjQstGP0LfQutGDINC6INGG0LLQtdGC0YNcIixcImFyaWEuYXNzaWduQ29sb3JMaW5raW5nQ3VycmVudFZpZXdcIjpcItCi0LXQutGD0YnQtdC1INC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC1LCDQvdCw0LfQvdCw0YfQtdC90L3QvtC1INC60L7QvdGC0LXQutGB0YLQvdC+0Lkg0LPRgNGD0L/Qv9C1IHt7bmFtZX19XCIsXCJhcmlhLmFzc2lnbkNvbG9yTGlua2luZ0N1cnJlbnRWaWV3c1wiOlwi0KLQtdC60YPRidC40LUg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40Y8sINC90LDQt9C90LDRh9C10L3QvdGL0LUg0LrQvtC90YLQtdC60YHRgtC90L7QuSDQs9GA0YPQv9C/0LUge3tuYW1lfX1cIixcImFyaWEuc2V0Q29sb3JMaW5raW5nQWN0aXZlVmlld1wiOlwi0KPRgdGC0LDQvdC+0LLQuNGC0Ywg0LDQutGC0LjQstC90L7QtSDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtSDQsiDQutC+0L3RgtC10LrRgdGC0L3Rg9GOINCz0YDRg9C/0L/RgyB7e25hbWV9fVwiLFwiYXJpYS5zZXRDb2xvckxpbmtpbmdBY3RpdmVWaWV3c1wiOlwi0KPRgdGC0LDQvdC+0LLQuNGC0Ywg0LDQutGC0LjQstC90YvQtSDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjRjyDQsiDQutC+0L3RgtC10LrRgdGC0L3Rg9GOINCz0YDRg9C/0L/RgyB7e25hbWV9fVwiLFwiYXJpYS5lc2NhcGVMYXlvdXREaWFsb2dcIjpcItCn0YLQvtCx0Ysg0LfQsNC60YDRi9GC0Ywg0LTQuNCw0LvQvtCzINC40LfQvNC10L3QtdC90LjRjyDQvNCw0LrQtdGC0LAsINC40YHQv9C+0LvRjNC30YPQudGC0LUgZXNjYXBlXCIsXCJnbG9iYWwuc3VwZXJ0YWJcIjpcIlN1cGVydGFiIFJVXCIsXCJnbG9iYWwudGFiXCI6XCJUYWIgUlVcIixcImJvb2ttYXJrcy5lZGl0Qm9va21hcmtcIjpcIkVkaXQgQm9va21hcmsgUlVcIixcImJvb2ttYXJrcy5ib29rbWFya0FkZGVkXCI6XCJCb29rbWFyayBhZGRlZCBSVVwiLFwiYm9va21hcmtzLmRvbmVcIjpcIkRvbmUgUlVcIixcImJvb2ttYXJrcy5yZW1vdmVcIjpcIlJlbW92ZSBSVVwiLFwiYm9va21hcmtzLmJvb2ttYXJrc1BhbmVsXCI6XCJCb29rbWFya3MgUGFuZWwgUlVcIixcImJvb2ttYXJrcy5jbG9zZVBhbmVsXCI6XCJDbG9zZSBCb29rbWFya3MgUGFuZWwgUlVcIixcImJvb2ttYXJrcy5ib29rbWFya3NcIjpcIkJvb2ttYXJrcyBSVVwiLFwiYm9va21hcmtzLmFsbEJvb2ttYXJrc1wiOlwiQWxsIEJvb2ttYXJrcyBSVVwiLFwiYm9va21hcmtzLmZhdm9yaXRlc1wiOlwiRmF2b3JpdGVzIFJVXCIsXCJib29rbWFya3Muc2VhcmNoQm9va21hcmtzXCI6XCJTZWFyY2ggQm9va21hcmtzIFJVXCIsXCJib29rbWFya3MuY2xlYXJTZWFyY2hJbnB1dFwiOlwiQ2xlYXIgU2VhcmNoIElucHV0IFJVXCIsXCJib29rbWFya3MuY3JlYXRlRm9sZGVyXCI6XCJDcmVhdGUgTmV3IEZvbGRlciBSVVwiLFwiYm9va21hcmtzLmV4aXRGb2xkZXJcIjpcIkV4aXQgRm9sZGVyIFJVXCIsXCJib29rbWFya3MubmV3Rm9sZGVyXCI6XCJOZXcgRm9sZGVyIFJVXCIsXCJib29rbWFya3MubmFtZWRGb2xkZXJcIjpcInt7bmFtZX19IEZvbGRlciBSVVwiLFwiYm9va21hcmtzLmJvb2ttYXJrU2V0dGluZ3NcIjpcInt7bmFtZX19IEJvb2ttYXJrIFNldHRpbmdzIFJVXCIsXCJib29rbWFya3MuZm9sZGVyU2V0dGluZ3NcIjpcInt7bmFtZX19IEZvbGRlciBTZXR0aW5ncyBSVVwiLFwiYm9va21hcmtzLm5vUmVzdWx0c0ZvdW5kXCI6XCJObyByZXN1bHRzIGZvdW5kIFJVXCIsXCJib29rbWFya3Mubm9SZXN1bHRzRm91bmRTdWJ0ZXh0XCI6XCJUaGVyZSBhcmUgbm8gYm9va21hcmtzIHRoYXQgbWF0Y2ggeW91ciBzZWFyY2ggUlVcIixcImJvb2ttYXJrcy5ub3RoaW5nVG9TaG93XCI6XCJOb3RoaW5nIHRvIHNob3cgeWV0IFJVXCIsXCJib29rbWFya3Mubm90aGluZ1RvU2hvd1N1YnRleHRcIjpcIkFkZCBhIGJvb2ttYXJrIHRvIHRoaXMgZm9sZGVyIFJVXCIsXCJib29rbWFya3MucmVzdWx0c0ZvdW5kSW5cIjpcIlJlc3VsdHMgZm91bmQgaW4ge3tuYW1lfX0gUlVcIixcImJvb2ttYXJrcy5yZXN1bHRzSW5PdGhlckZvbGRlcnNcIjpcIlJlc3VsdHMgZm91bmQgaW4gb3RoZXIgZm9sZGVycyBSVVwiLFwiYm9va21hcmtzLmFsbFJlc3VsdHNGb3VuZEluXCI6XCJBbGwgcmVzdWx0cyBmb3VuZCBpbiBSVVwiLFwiYm9va21hcmtzLmVkaXROYW1lXCI6XCJFZGl0IE5hbWUgUlVcIixcImJvb2ttYXJrcy5tb3ZlXCI6XCJNb3ZlIFJVXCIsXCJib29rbWFya3MuYm9va21hcmtBZGRlZFRpdGxlXCI6XCJCb29rbWFyayBBZGRlZCBSVVwiLFwiYm9va21hcmtzLmJvb2ttYXJrQWRkZWRUb0ZvbGRlclwiOlwiWW91ciBib29rbWFyayB3YXMgYWRkZWQgdG8gXFxcXFwie3tmb2xkZXJOYW1lfX1cXFxcXCIgUlVcIixcImJvb2ttYXJrcy5ib29rbWFya0VkaXRlZFRpdGxlXCI6XCJCb29rbWFyayBFZGl0ZWQgUlVcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5zYXZlU3VwZXJ0YWJcIjpcIlNhdmUgU3VwZXJ0YWIgUlVcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5zYXZlU3VwZXJ0YWJBc1wiOlwiU2F2ZSBTdXBlcnRhYiBBcy4uLiBSVVwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LmR1cGxpY2F0ZVwiOlwiRHVwbGljYXRlIFJVXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuZGVsZXRlU3VwZXJ0YWJcIjpcIkRlbGV0ZSBTdXBlcnRhYiBSVVwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51Lm5ld1RhYlwiOlwiTmV3IFRhYiBSVVwiLFwiZW50ZXJwcmlzZVNhdmVNZW51LnNhdmVTdXBlcnRhYkFzXCI6XCJTYXZlIFN1cGVydGFiIEFzIFJVXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLnJlbmFtZVN1cGVydGFiXCI6XCJSZW5hbWUgUlVcIixcImVudGVycHJpc2VTYXZlTW9kYWwudW5zYXZlZENoYW5nZXNcIjpcIllvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcyBpbiB0aGlzIFRhYi4gUlVcIixcImVudGVycHJpc2VTYXZlTW9kYWwuY2xvc2VUYWJcIjpcIkNsb3NlIFRhYiBSVVwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC5jbG9zZVN1cGVydGFiXCI6XCJDbG9zZSBTdXBlcnRhYiBSVVwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC5zYXZlU3VwZXJ0YWJDb3VudFwiOlwiU2F2ZSB7e2NvdW50fX0gU3VwZXJ0YWJzIGJlZm9yZSBjbG9zaW5nPyBSVVwiLFwiZW50ZXJwcmlzZU1vZGFsLmRpc2NhcmRTdXBlcnRhYldhcm5pbmdcIjpcIkFueSB1bnNhdmVkIGNoYW5nZXMgdG8gdGhpcyBTdXBlcnRhYiB3aWxsIGJlIGxvc3QuIFJVXCIsXCJlbnRlcnByaXNlRGVsZXRlTW9kYWwuZGVsZXRlU3VwZXJ0YWJcIjpcIkRlbGV0ZSB0aGUgXFxcXFwie3t0aXRsZX19XFxcXFwiIFN1cGVydGFiPyBSVVwiLFwiZW50ZXJwcmlzZURlbGV0ZU1vZGFsLmRlbGV0ZVN1cGVydGFiV2FybmluZ1wiOlwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIFN1cGVydGFiPyBUaGlzIGFjdGlvbiBjYW5ub3QgYmUgdW5kb25lIGFuZCBpcyBwZXJtYW5lbnQuIFJVXCIsXCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYlNhdmVkXCI6XCJTdXBlcnRhYiBTYXZlZCBSVVwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJIYXNCZWVuU2F2ZWRcIjpcIlxcXFxcInt7dGl0bGV9fVxcXFxcIiBTdXBlcnRhYiBoYXMgYmVlbiBzYXZlZC5SVVwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJEZWxldGVkXCI6XCJTdXBlcnRhYiBEZWxldGVkIFJVXCIsXCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYkhhc0JlZW5EZWxldGVkXCI6XCJcXFxcXCJ7e3RpdGxlfX1cXFxcXCIgU3VwZXJ0YWIgaGFzIGJlZW4gZGVsZXRlZC4gUlVcIixcImVudGVycHJpc2VFcnJvckluZGljYXRvci5mYWlsZWRUb0R1cGxpY2F0ZVRhYlwiOlwiRmFpbGVkIHRvIGR1cGxpY2F0ZSBUYWIgUlVcIixcImVudGVycHJpc2VFcnJvckluZGljYXRvci5mYWlsZWRUb0R1cGxpY2F0ZVN1cGVydGFiXCI6XCJGYWlsZWQgdG8gZHVwbGljYXRlIFN1cGVydGFiIFJVXCIsXCJlbnRlcnByaXNlQ29tbWFuZEJhci5zd2l0Y2hUb1N1cGVydGFiXCI6XCJTd2l0Y2ggdG8gU3VwZXJ0YWIgUlVcIixcImVudGVycHJpc2VDb21tYW5kQmFyLmdvVG9cIjpcIkdvIHRvIHt7dHlwZX19IFJVXCIsXCJjb250ZXh0TWVudS5xdWl0RW50ZXJwcmlzZUJyb3dzZXJcIjpcIlF1aXQgUlVcIn0nKTtjb25zdCBCbj1qbi50LFpuPWFzeW5jIGU9Pntjb25zdCB0PWF3YWl0IHR0KGUpO3JldHVybiBhd2FpdCB0LmRpc3BhdGNoKGl0LkdldFBhZ2VzKX0sJG49YXN5bmMgZT0+KGF3YWl0IHR0KGUuaWRlbnRpdHkpKS5kaXNwYXRjaChpdC5VcGRhdGVQYWdlRm9yV2luZG93LGUpO2xldCBObj0hMTtmdW5jdGlvbiBGbihlKXtyZXR1cm4gZS5tYXAoKGU9Pntjb25zdCB0PShuPWUudmlld09wdGlvbnMsbi5uYW1lfHw9YCR7RXR9JHtIZSgpfWAsbik7dmFyIG47cmV0dXJuey4uLmUsdmlld09wdGlvbnM6ey4uLnQsdXVpZDpuZS51dWlkfX19KSl9YXN5bmMgZnVuY3Rpb24gV24oZSl7Zm9yKGNvbnN0IHQgb2YgZSl0LnBhbmVscyYmYXdhaXQgem4odC5wYW5lbHMpfWNvbnN0IFVuPWU9Pm51bGwhPT1lJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmXCJtZXNzYWdlXCJpbiBlJiZcInN0cmluZ1wiPT10eXBlb2YgZS5tZXNzYWdlJiYvRVJSXyhbQS1aXStfKikrLy50ZXN0KGUubWVzc2FnZSk7YXN5bmMgZnVuY3Rpb24gem4oZSl7Y29uc3QgdD1lLm1hcCgoZT0+ZmluLlBsYXRmb3JtLmdldEN1cnJlbnRTeW5jKCkuY3JlYXRlVmlldyhlLnZpZXdPcHRpb25zLGZpbi5tZS5pZGVudGl0eSkuY2F0Y2goKGU9PntpZighVW4oZSkpdGhyb3cgZTtjb25zb2xlLmVycm9yKGUpfSkpKSk7cmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKHQpfWNvbnN0IEduPShlLHQpPT4hdC5maW5kKCh0PT50PT09ZSkpLEtuPShlLHQpPT5gJHtlfSAoJHt0fSlgLHFuPShlLHQpPT57aWYoR24oZSx0KSlyZXR1cm4gZTtsZXQgbj0xO2NvbnN0IHI9ZS5yZXBsYWNlKC8gKlxcKFxcZCtcXCkkLyxcIlwiKTtmb3IoOyFHbihLbihyLG4pLHQpOyluKz0xO3JldHVybiBLbihyLG4pfSxZbj1hc3luYygpPT57Y29uc3QgZT1hd2FpdCBpZSgpO3JldHVybihhd2FpdCBQcm9taXNlLmFsbChlLm1hcCgoYXN5bmMgZT0+e3RyeXtyZXR1cm4gWm4oZS5pZGVudGl0eSl9Y2F0Y2godCl7SlNPTi5zdHJpbmdpZnkoZS5pZGVudGl0eSk7Y29uc3Qgbj1hd2FpdCBlLmdldE9wdGlvbnMoKTtyZXR1cm4gbi53b3Jrc3BhY2VQbGF0Zm9ybT8ucGFnZXN8fFtdfX0pKSkpLnJlZHVjZSgoKGUsdCk9PmUuY29uY2F0KHQpKSxbXSl9LEpuPWFzeW5jKCk9Pihhd2FpdCBxZShuZSkpLmRpc3BhdGNoKHplLkdldFNhdmVkUGFnZXMsdm9pZCAwKSxYbj1hc3luYyBlPT4oYXdhaXQgcWUobmUpKS5kaXNwYXRjaCh6ZS5HZXRTYXZlZFBhZ2UsZSksUW49YXN5bmMoZSx0KT0+e2NvbnN0IG49YXdhaXQoYXN5bmMgZT0+KGF3YWl0IFluKCkpLmZpbmQoKHQ9PnQucGFnZUlkPT09ZSkpKShlKTtyZXR1cm4hbnx8bi50aXRsZT09PXQudGl0bGUmJmU9PT10LnBhZ2VJZHx8YXdhaXQgJG4oe2lkZW50aXR5Om4ucGFyZW50SWRlbnRpdHkscGFnZUlkOmUscGFnZTp7cGFnZUlkOnQucGFnZUlkLHRpdGxlOnQudGl0bGV9fSksbn0sZXI9YXN5bmMoe3BhZ2U6ZX0pPT57YXdhaXQgUW4oZS5wYWdlSWQsZSksYXdhaXQoYXN5bmMgZT0+KGF3YWl0IHFlKG5lKSkuZGlzcGF0Y2goemUuQ3JlYXRlU2F2ZWRQYWdlLGUpKSh7cGFnZTplfSl9LHRyPWFzeW5jIGU9Pnthd2FpdCBYbihlKSYmYXdhaXQoYXN5bmMgZT0+KGF3YWl0IHFlKG5lKSkuZGlzcGF0Y2goemUuRGVsZXRlU2F2ZWRQYWdlLGUpKShlKX0sbnI9YXN5bmMoe3BhZ2VJZDplLHBhZ2U6dH0pPT57YXdhaXQgUW4oZSx0KTtyZXR1cm4gYXdhaXQoYXN5bmMgZT0+KGF3YWl0IHFlKG5lKSkuZGlzcGF0Y2goemUuVXBkYXRlU2F2ZWRQYWdlLGUpKSh7cGFnZUlkOmUscGFnZTp0fSl9LHJyPWFzeW5jIGU9PmF3YWl0IFhuKGUucGFnZUlkKT9ucih7cGFnZUlkOmUucGFnZUlkLHBhZ2U6ZX0pOmVyKHtwYWdlOmV9KSxvcj1hc3luYyBlPT57YXdhaXQoYXN5bmMgZT0+KGF3YWl0IHR0KGUuaWRlbnRpdHkpKS5kaXNwYXRjaChpdC5BdHRhY2hQYWdlc1RvV2luZG93LGUpKShlKX0sYXI9YXN5bmMgZT0+e2NvbnN0IHQ9ey4uLmUucGFnZSxwYW5lbHM6ZS5wYWdlLnBhbmVscyYmRm4oZS5wYWdlLnBhbmVscyl9O3QucGFuZWxzJiZhd2FpdCB6bih0LnBhbmVscyksYXdhaXQgJG4oey4uLmUscGFnZTp0fSl9LGlyPWFzeW5jIGU9Pnthd2FpdChhc3luYyBlPT4oYXdhaXQgdHQoZS5pZGVudGl0eSkpLmRpc3BhdGNoKGl0LkRldGFjaFBhZ2VzRnJvbVdpbmRvdyxlKSkoZSl9LGxyPWFzeW5jIGU9Pnthd2FpdChhc3luYyBlPT4oYXdhaXQgdHQoZS5pZGVudGl0eSkpLmRpc3BhdGNoKGl0LlNldEFjdGl2ZVBhZ2VGb3JXaW5kb3csZSkpKGUpfSxzcj1lPT5abihlKSxjcj1hc3luYyh7aWRlbnRpdHk6ZSxwYWdlSWQ6dH0pPT4oYXdhaXQgc3IoZSkpLmZpbmQoKGU9PmUucGFnZUlkPT09dCkpLHVyPWFzeW5jIGU9Pnthd2FpdChhc3luYyBlPT4oYXdhaXQgdHQoZS5pZGVudGl0eSkpLmRpc3BhdGNoKGl0LlJlb3JkZXJQYWdlc0ZvcldpbmRvdyxlKSkoZSl9LGRyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMucXVldWU9W10sdGhpcy5sb2NrZWQ9ITF9bG9jaygpe3JldHVybiBuZXcgUHJvbWlzZSgoZT0+e3RoaXMubG9ja2VkP3RoaXMucXVldWUucHVzaChlKToodGhpcy5sb2NrZWQ9ITAsZSgpKX0pKX11bmxvY2soKXtpZih0aGlzLnF1ZXVlLmxlbmd0aD4wKXtjb25zdCBlPXRoaXMucXVldWUuc2hpZnQoKTtlJiZlKCl9ZWxzZSB0aGlzLmxvY2tlZD0hMX19O2FzeW5jIGZ1bmN0aW9uIHByKGUpe2F3YWl0IGRyLmxvY2soKTt0cnl7Y29uc3QgdD1CbihObj9cImVudGVycHJpc2VEZWZhdWx0UGFnZVRpdGxlXCI6XCJkZWZhdWx0UGFnZVRpdGxlXCIpLG49ZT8/dCxbcixvXT1hd2FpdCBQcm9taXNlLmFsbChbSm4oKSxZbigpXSksYT1bLi4uciwuLi5vXS5tYXAoKCh7dGl0bGU6ZX0pPT5lKSk7cmV0dXJuIHFuKG4sYSl9ZmluYWxseXtkci51bmxvY2soKX19YXN5bmMgZnVuY3Rpb24gZnIoe3BhZ2U6ZX0pe3JldHVybntzaG91bGRTaG93TW9kYWw6ISghZXx8IWUuaGFzVW5zYXZlZENoYW5nZXMpfX1hc3luYyBmdW5jdGlvbiBocih7cGFnZTplLGlkZW50aXR5OnR9KXtjb25zdCBuPWZpbi5BcHBsaWNhdGlvbi5nZXRDdXJyZW50U3luYygpO2lmKChhd2FpdCBuLmdldEluZm8oKSkuaW5pdGlhbE9wdGlvbnMuZW5hYmxlQmVmb3JlVW5sb2FkKXtjb25zdCBuPUF0KGUubGF5b3V0LmNvbnRlbnQpLmZpbHRlcigoZT0+ZS5uYW1lKSkubWFwKChlPT5maW4uVmlldy53cmFwU3luYyh7bmFtZTplLm5hbWUsdXVpZDp0LnV1aWR9KSkpLHI9YXdhaXQgdGhpcy5jaGVja1ZpZXdzRm9yUHJldmVudFVubG9hZChuKTtpZihyLnZpZXdzUHJldmVudGluZ1VubG9hZC5sZW5ndGg+MCl7aWYoKGF3YWl0IHRoaXMuZ2V0VXNlckRlY2lzaW9uRm9yQmVmb3JlVW5sb2FkKHsuLi5yLHdpbmRvd0lkOnQsd2luZG93U2hvdWxkQ2xvc2U6ITEsY2xvc2VUeXBlOlwicGFnZVwifSkpLnZpZXdzVG9DbG9zZS5sZW5ndGghPT1uLmxlbmd0aClyZXR1cm4gZS5wYWdlSWQse3Nob3VsZFBhZ2VDbG9zZTohMX19fXJldHVybntzaG91bGRQYWdlQ2xvc2U6ITB9fWFzeW5jIGZ1bmN0aW9uIGdyKHtwYWdlczplLGlkZW50aXR5OnR9KXtjb25zdCBuPWF3YWl0IFByb21pc2UuYWxsKGUubWFwKChlPT50aGlzLnNob3VsZFBhZ2VDbG9zZSh7cGFnZTplLGNsb3NlVHlwZTpcIndpbmRvd1wiLGlkZW50aXR5OnR9KSkpKSx7cGFnZXNQcmV2ZW50aW5nQ2xvc2U6cixwYWdlc05vdFByZXZlbnRpbmdDbG9zZTpvfT1lLnJlZHVjZSgoKGUsdCxyKT0+IW5bcl0uc2hvdWxkUGFnZUNsb3NlP3twYWdlc05vdFByZXZlbnRpbmdDbG9zZTplLnBhZ2VzTm90UHJldmVudGluZ0Nsb3NlLHBhZ2VzUHJldmVudGluZ0Nsb3NlOlsuLi5lLnBhZ2VzUHJldmVudGluZ0Nsb3NlLHRdfTp7cGFnZXNQcmV2ZW50aW5nQ2xvc2U6ZS5wYWdlc1ByZXZlbnRpbmdDbG9zZSxwYWdlc05vdFByZXZlbnRpbmdDbG9zZTpbLi4uZS5wYWdlc05vdFByZXZlbnRpbmdDbG9zZSx0XX0pLHtwYWdlc1ByZXZlbnRpbmdDbG9zZTpbXSxwYWdlc05vdFByZXZlbnRpbmdDbG9zZTpbXX0pO3JldHVybiB0aGlzLmhhbmRsZVBhZ2VzQW5kV2luZG93Q2xvc2Uoe3BhZ2VzTm90UHJldmVudGluZ0Nsb3NlOm8scGFnZXNQcmV2ZW50aW5nQ2xvc2U6cixpZGVudGl0eTp0fSl9YXN5bmMgZnVuY3Rpb24gdnIoe3BhZ2VzUHJldmVudGluZ0Nsb3NlOmUscGFnZXNOb3RQcmV2ZW50aW5nQ2xvc2U6dCxpZGVudGl0eTpufSl7cmV0dXJue3Nob3VsZFdpbmRvd0Nsb3NlOjA9PT1lLmxlbmd0aH19YXN5bmMgZnVuY3Rpb24gQ3Ioe3BhZ2U6ZX0pe3JldHVybiBXZShlKX1hc3luYyBmdW5jdGlvbiBtcihlKXtyZXR1cm57aGFzVW5zYXZlZENoYW5nZXM6ITB9fWNvbnN0IHdyPWFzeW5jKCk9Pntjb25zdCBlPUx0KCksdD0oYXdhaXQgaWUoKSkubWFwKCh0PT5lLkJyb3dzZXIud3JhcFN5bmModC5pZGVudGl0eSkpKTthd2FpdCBQcm9taXNlLmFsbCh0Lm1hcCgoYXN5bmMgZT0+e2NvbnN0IHQ9YXdhaXQgZS5nZXRQYWdlcygpO2F3YWl0IFByb21pc2UuYWxsKHQubWFwKChhc3luYyB0PT57dC50aXRsZSxhd2FpdCBlLnVwZGF0ZVBhZ2Uoe3BhZ2VJZDp0LnBhZ2VJZCxwYWdlOntoYXNVbnNhdmVkQ2hhbmdlczohMX19KSx0LnBhZ2VJZCx0LnRpdGxlLGF3YWl0IHJyKHsuLi50LGhhc1Vuc2F2ZWRDaGFuZ2VzOiExfSl9KSkpfSkpKX0sYnI9bmV3IE1hcCx5cj0oKT0+YnIseHI9ZT0+YnIuZGVsZXRlKGUpO2xldCBrcj0hMTtjb25zdCBTcj0oKT0+e2tyfHwoa3I9ITAsZmluLldpbmRvdy53cmFwU3luYyhyZSkub25jZShcImNsb3NlZFwiLCgoKT0+e2tyPSExLChhc3luYyhlLHQpPT57YXdhaXQgYmUod2UoZSkse3NvdXJjZTpcIlN0b3JlXCIsLi4udH0pfSkoZmluLm1lLmlkZW50aXR5LHt0eXBlOlwiTmF2aWdhdGlvblwiLGFjdGlvbjpcIkNsb3NlIFN0b3JlXCIsc2tpcFZhbHVlSGFzaGluZzohMH0pfSkpKX07bGV0IE9yLE1yLExyO2NvbnN0IF9yPWFzeW5jKCk9Pih2b2lkIDA9PT1MciYmKExyPSEhKGF3YWl0IEYoKSkuZGlzYWJsZU9wZW5GaW5BbmFseXRpY3MpLExyKTthc3luYyBmdW5jdGlvbiBQcihlKXtlLmZvckVhY2goKGU9Pnt2YXIgdCxuO1wiUGFnZVwiPT09ZS50eXBlP1wiT3BlbiBQYWdlXCI9PT1lLmFjdGlvbj8odD1lLmRhdGEudXVpZCxuPWUsYnIuc2V0KHQsbikpOlwiQ2xvc2UgUGFnZVwiPT09ZS5hY3Rpb24mJnhyKGUuZGF0YS51dWlkKTpcIlN0b3JlXCI9PT1lLnNvdXJjZSYmXCJDbG9zZVwiIT09ZS5hY3Rpb24mJlNyKCl9KSksYXdhaXQoYXN5bmMgZT0+e09yPy5zZW5kVG9PcGVuRmluJiYoYXdhaXQgX3IoKXx8ZS5mb3JFYWNoKChhc3luYyBlPT57Y29uc3QgdD1PZSh7fSxlKTt0LmVudGl0eUlkJiYodC5lbnRpdHlJZC51dWlkPWF3YWl0IGtlKHQuZW50aXR5SWQudXVpZCksdC5lbnRpdHlJZC5uYW1lPWF3YWl0IGtlKHQuZW50aXR5SWQubmFtZSkpLCFlLnNraXBWYWx1ZUhhc2hpbmcmJlwidmFsdWVcImluIHQmJih0LnZhbHVlPWF3YWl0IGtlKHQudmFsdWUpKSxNcih0KX0pKSl9KShlKTtjb25zdCB0PWUubWFwKCgoe3NraXBWYWx1ZUhhc2hpbmc6ZSwuLi50fSk9PnQpKTt0aGlzLmhhbmRsZUFuYWx5dGljcyh0KX1jb25zdCBFcj1hc3luYyBlPT57T3I9ZTtPcj8uc2VuZFRvT3BlbkZpbiYmIWF3YWl0IF9yKCkmJigoKT0+e2NvbnN0IGU9QSx0PWUrSy5BbmFseXRpY3Msbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiSUZSQU1FXCIpO24uc2V0QXR0cmlidXRlKFwic3JjXCIsdCksbi5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLFwid2lkdGg6IDBweCAhaW1wb3J0YW50XCIpLG4uc2V0QXR0cmlidXRlKFwic3R5bGVcIixcImhlaWdodDogMHB4ICFpbXBvcnRhbnRcIiksbi5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLFwiZGlzcGxheTogbm9uZSAhaW1wb3J0YW50XCIpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobiksTXI9YXN5bmMgdD0+e24uY29udGVudFdpbmRvdy5wb3N0TWVzc2FnZSh0LGUpfX0pKCk7Y29uc3QgdD1maW4uQXBwbGljYXRpb24uZ2V0Q3VycmVudFN5bmMoKTt0LmFkZExpc3RlbmVyKFwidmlldy1jcmVhdGVkXCIsKGFzeW5jIGU9Pnt2YXIgdDt5ZSh7dHlwZTpcIlZpZXdcIixhY3Rpb246XCJPcGVuIFZpZXdcIix2YWx1ZTplLnZpZXdJZGVudGl0eS5uYW1lLGRhdGE6e3V1aWQ6ZS52aWV3SWRlbnRpdHkudXVpZCx1cmw6YXdhaXQodD1lLnZpZXdJZGVudGl0eSxmaW4uVmlldy53cmFwU3luYyh0KS5nZXRJbmZvKCkudGhlbigoZT0+ZS51cmwpKSl9fSl9KSksdC5hZGRMaXN0ZW5lcihcInZpZXctZGVzdHJveWVkXCIsKGFzeW5jIGU9Pnt5ZSh7dHlwZTpcIlZpZXdcIixhY3Rpb246XCJDbG9zZSBWaWV3XCIsdmFsdWU6ZS52aWV3SWRlbnRpdHkubmFtZSxkYXRhOnt1dWlkOmUudmlld0lkZW50aXR5LnV1aWR9fSl9KSksdC5hZGRMaXN0ZW5lcihcIndpbmRvdy1jbG9zZWRcIiwoZT0+e2UubmFtZS5zdGFydHNXaXRoKGVlLkJyb3dzZXJNZW51KXx8KHllKHt0eXBlOlwiV2luZG93XCIsYWN0aW9uOlwiQ2xvc2UgV2luZG93XCIsdmFsdWU6ZS5uYW1lLGRhdGE6e3V1aWQ6ZS51dWlkfX0pLChhc3luYygpPT57Y29uc3QgZT15cigpLHQ9YXdhaXQgWW4oKTtpZih0Lmxlbmd0aD09PWUuc2l6ZSlyZXR1cm47Y29uc3Qgbj10LnJlZHVjZSgoKGUsdCk9PmUuc2V0KHQucGFnZUlkLDEpKSxuZXcgTWFwKTtmb3IoY29uc3RbdCxyXW9mIGUpbi5oYXModCl8fChyLmFjdGlvbj1cIkNsb3NlIFBhZ2VcIix5ZShyKSx4cih0KSl9KSgpKX0pKX07dmFyIGpyOyFmdW5jdGlvbihlKXtlLkVSUk9SPVwiZXJyb3JcIixlLlNVQ0NFU1M9XCJzdWNjZXNzXCIsZS5JTkZPPVwiaW5mb1wifShqcnx8KGpyPXt9KSk7Y29uc3QgUnI9KGUsdCk9Pntjb25zdCBuPWU7cmV0dXJuIG4ud29ya3NwYWNlUGxhdGZvcm18fChuLndvcmtzcGFjZVBsYXRmb3JtPXt9KSxuLndvcmtzcGFjZVBsYXRmb3JtLl9pbnRlcm5hbERlZmVyU2hvd09wdGlvbnM9e3NldEFzRm9yZWdyb3VuZDohIXQsZGVmZXJTaG93RW5hYmxlZDohMCxhdXRvU2hvdzpuLndvcmtzcGFjZVBsYXRmb3JtPy5faW50ZXJuYWxBdXRvU2hvd3x8bi53b3Jrc3BhY2VQbGF0Zm9ybT8uX2ludGVybmFsRGVmZXJTaG93T3B0aW9ucz8uYXV0b1Nob3d8fHZvaWQgMD09PW4uYXV0b1Nob3d8fG4uYXV0b1Nob3d9LG4uYXV0b1Nob3c9ITEsbn07Y29uc3QgSXI9UnIoe2Fsd2F5c09uVG9wOiEwLGF1dG9TaG93OiExLGZyYW1lOiExLHJlc2l6YWJsZTohMSxzaG93VGFza2Jhckljb246ITF9KTt2YXIgVnI7IWZ1bmN0aW9uKGUpe2UuTG9ja2VkPVwiTG9ja0Nsb3NlZEljb25cIixlLlVubG9ja2VkPVwiTG9ja09wZW4xSWNvblwifShWcnx8KFZyPXt9KSk7Y29uc3QgSHI9XCJicm93c2VyXCIsQXI9ZnVuY3Rpb24oZT1Jcil7Y29uc3QgdD1uZXcgTWFwO3JldHVybiBhc3luYyhuLHIsbyxhLGkpPT57aWYodC5oYXMobikpe2NvbnN0e2N1cnJlbnRVcmw6ZSxjdXJyZW50TmFtZTpvfT10LmdldChuKTtpZihlPT09cilyZXR1cm47Y29uc3QgYT1maW4uV2luZG93LndyYXBTeW5jKHt1dWlkOmZpbi5tZS51dWlkLG5hbWU6b30pO2F3YWl0IGEuY2xvc2UoKX1jb25zdCBsPWAke2VlLkhvbWVJbnRlcm5hbH0tJHtEYXRlLm5vdygpfSR7TWF0aC5yYW5kb20oKX1gO3Quc2V0KG4se2N1cnJlbnRVcmw6cixjdXJyZW50TmFtZTpsfSk7Y29uc3Qgcz1gTmV3ICR7YX0gaW5kaWNhdG9yOiAke299ICR7aX1gLGM9YXdhaXQgZmluLlBsYXRmb3JtLmdldEN1cnJlbnRTeW5jKCkuY3JlYXRlV2luZG93KHsuLi5lLG5hbWU6bCx1cmw6cn0pOygoZSx0KT0+e2NvbnN0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtuLnNldEF0dHJpYnV0ZShcInJvbGVcIixcImFsZXJ0XCIpLG4uc2V0QXR0cmlidXRlKFwiYXJpYS1saXZlXCIsdHx8XCJwb2xpdGVcIiksKGU9PntlLnN0eWxlLnBvc2l0aW9uPVwiYWJzb2x1dGVcIixlLnN0eWxlLndpZHRoPVwiMXB4XCIsZS5zdHlsZS5oZWlnaHQ9XCIxcHhcIixlLnN0eWxlLnBhZGRpbmc9XCIwXCIsZS5zdHlsZS5tYXJnaW49XCItMXB4XCIsZS5zdHlsZS5vdmVyZmxvdz1cImhpZGRlblwiLGUuc3R5bGUud2hpdGVTcGFjZT1cIm5vd3JhcFwiLGUuc3R5bGUuYm9yZGVyPVwiMFwifSkobiksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChuKSxzZXRUaW1lb3V0KCgoKT0+e24uaW5uZXJIVE1MPWV9KSwzMDApLHNldFRpbWVvdXQoKCgpPT57ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChuKX0pLDFlMyl9KShzKSxjLm9uY2UoXCJjbG9zZWRcIiwoKCk9Pnt0LmRlbGV0ZShuKX0pKX19KCk7YXN5bmMgZnVuY3Rpb24gVHIoZSx0LG4scixvLGEpe2lmKG4mJmZpbi5tZS5uYW1lIT09bil7Y29uc3QgaT17dHlwZTplLG1lc3NhZ2U6dCxwYXJlbnRCcm93c2VyTmFtZTpuLHNlY29uZGFyeU1lc3NhZ2U6cixpY29uOm8saXNFbnRlcnByaXNlOmF9O3JldHVybihhd2FpdCB0dCh7dXVpZDpmaW4ubWUudXVpZCxuYW1lOm59KSkuZGlzcGF0Y2goaXQuU2hvd0Jyb3dzZXJJbmRpY2F0b3IsaSl9Y29uc3QgaT1uZXcgVVJMU2VhcmNoUGFyYW1zO2lmKGkuYXBwZW5kKFwidHlwZVwiLGUpLGkuYXBwZW5kKFwibWVzc2FnZVwiLHQpLGkuYXBwZW5kKFwicGFyZW50TmFtZVwiLG58fFwiXCIpLGkuYXBwZW5kKFwic2Vjb25kYXJ5TWVzc2FnZVwiLHJ8fFwiXCIpLGkuYXBwZW5kKFwiaWNvblwiLG98fFwiXCIpLGkuYXBwZW5kKFwiaXNFbnRlcnByaXNlXCIsYCR7YX1gfHxcIlwiKSxuKXtjb25zdCBlPW4/e3V1aWQ6aixuYW1lOm59OnZvaWQgMCx0PWF3YWl0IHRlKGUpLHI9dWUoYXdhaXQgdC5nZXRCb3VuZHMoKSk7aS5hcHBlbmQoXCJwYXJlbnRCb3VuZHNcIixyKX1jb25zdCBsPWAke2F3YWl0IFUoKStLLkJyb3dzZXJJbmRpY2F0b3J9IyR7aS50b1N0cmluZygpfWA7cmV0dXJuIEFyKEhyK24sbCx0LGUscil9YXN5bmMgZnVuY3Rpb24gRHIoZSx0LG4scil7Y29uc3Qgbz1hd2FpdCBmZSh0KSxhPXQubmFtZTtyZXR1cm4gVHIoanIuU1VDQ0VTUyxlLGEsbixyLG8pfWNvbnN0IEJyPWFzeW5jKGU9bmUpPT57Y29uc3R7d29ya3NwYWNlUGxhdGZvcm06dH09YXdhaXQgdGUoZSkuZ2V0T3B0aW9ucygpLG49dD8ubmV3UGFnZVVybCxyPXQ/Lm5ld1RhYlVybDtyZXR1cm57bmV3UGFnZVVybDpuLG5ld1RhYlVybDpyfX0sWnI9YXN5bmMoZSx0PW5lKT0+e2NvbnN0e25ld1BhZ2VVcmw6bn09YXdhaXQgQnIodCk7aWYoIW4pdGhyb3cgbmV3IEVycm9yKFwiVHJ5aW5nIHRvIGNyZWF0ZSBhIG5ldyBwYWdlIHdpdGhvdXQgYSBuZXdQYWdlVXJsIHNldFwiKTtyZXR1cm4oYXN5bmMoZSx0LG49bmUpPT57bGV0IHI7YXdhaXQgYWUobikmJihyPShhd2FpdCB0ZShuKS5nZXRPcHRpb25zKCkpLmxheW91dHx8e3NldHRpbmdzOnt9fSk7cmV0dXJuey4uLnIsY29udGVudDpbe3R5cGU6XCJzdGFja1wiLGNvbnRlbnQ6W3t0eXBlOlwiY29tcG9uZW50XCIsY29tcG9uZW50TmFtZTpcInZpZXdcIixjb21wb25lbnRTdGF0ZTp7dGl0bGU6ZSx1cmw6dH19XX1dfX0pKGUsbix0KX0sJHI9YXN5bmMoZT1uZSk9Pntjb25zdCB0PWF3YWl0IGZlKGUpLG49YXdhaXQgTHQoKS5Ccm93c2VyLmdldFVuaXF1ZVBhZ2VUaXRsZSgpLHI9YXdhaXQgWnIobixlKTt0JiYoci5zZXR0aW5ncy5oYXNIZWFkZXJzPSExLHIuc2V0dGluZ3MucmVvcmRlckVuYWJsZWQ9ITAsci5kaW1lbnNpb25zLmhlYWRlckhlaWdodD0wKTtjb25zdCBvPWF3YWl0IEZlKG4scik7cmV0dXJuIHQmJihvLmhhc1Vuc2F2ZWRDaGFuZ2VzPSExKSxvfTt2YXIgTnI7IWZ1bmN0aW9uKGUpe2UuSG9tZT1cIi9ob21lXCIsZS5Ccm93c2VyPVwiL2Jyb3dzZXJcIixlLlByb3ZpZGVyPVwiL3Byb3ZpZGVyXCIsZS5TdG9yZWZyb250PVwiL3N0b3JlZnJvbnRcIixlLkRvY2s9XCIvZG9ja1wifShOcnx8KE5yPXt9KSk7Y29uc3QgRnI9KGUsdD0wKT0+e2xldCBuLHIsbz0hMTtjb25zdCBhPWFzeW5jIHI9Pntjb25zdCBpPWF3YWl0IGUoLi4ucik7aWYobyl7YXdhaXQgbmV3IFByb21pc2UoKGU9PnNldFRpbWVvdXQoZSx0KSkpO2NvbnN0IGU9bjtyZXR1cm4gbj12b2lkIDAsbz0hMSxhKGUpfXJldHVybiBpfTtyZXR1cm4oLi4uZSk9PihyPyhvPSEwLG49ZSk6cj1hKGUpLmNhdGNoKChlPT57dGhyb3cgY29uc29sZS5lcnJvcihcIm1ha2VEZWJvdW5jZWRGdW5jXCIsZSksZX0pKS5maW5hbGx5KCgoKT0+e3I9dm9pZCAwfSkpLHIpfTtmdW5jdGlvbiBXcihlLHQpe3JldHVybiBhc3luYyhuLC4uLnIpPT57ZS5oYXMobikmJmUuZ2V0KG4pLmZvckVhY2goKGU9PmUoLi4ucikpKSx0JiZhd2FpdCB0KHtldmVudDpuLHBheWxvYWQ6cn0pfX1mdW5jdGlvbiBVcihlLHQpe3JldHVybiB0JiZ0KCh0PT57Y29uc3R7ZXZlbnQ6bixwYXlsb2FkOnJ9PXQ7ZS5oYXMobikmJmUuZ2V0KG4pLmZvckVhY2goKGU9PmUoLi4ucikpKX0pKSwodCxuKT0+e2UuaGFzKHQpfHxlLnNldCh0LG5ldyBTZXQpLGUuZ2V0KHQpLmFkZChuKX19ZnVuY3Rpb24genIoZSl7cmV0dXJuKHQsbik9PntlLmhhcyh0KXx8ZS5zZXQodCxuZXcgU2V0KTtjb25zdCByPWUuZ2V0KHQpLG89KC4uLmUpPT57biguLi5lKSxyLmRlbGV0ZShvKX07ci5hZGQobyl9fWZ1bmN0aW9uIEdyKGUpe3JldHVybih0LG4pPT57ZS5oYXModCkmJmUuZ2V0KHQpLmRlbGV0ZShuKX19Y29uc3QgS3I9ZT0+ZS5yZXBsYWNlKC9bXlxcZCxdL2csXCJcIikuc3BsaXQoXCIsXCIpLHFyPWU9PntpZihlLmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY29sb3Igb2JqZWN0LCBjYW5ub3QgY29udmVydCB0byBIU0wuXCIpO2NvbnN0IHQ9ZVswXS8yNTUsbj1lWzFdLzI1NSxyPWVbMl0vMjU1LG89TWF0aC5taW4odCxuLHIpLGE9TWF0aC5tYXgodCxuLHIpLGk9YS1vO2xldCBsPTAscz0wLGM9MDtyZXR1cm4gbD0wPT09aT8wOmE9PT10PyhuLXIpL2klNjphPT09bj8oci10KS9pKzI6KHQtbikvaSs0LGw9TWF0aC5yb3VuZCg2MCpsKSxsPDAmJihsKz0zNjApLGM9KGErbykvMixzPTA9PWk/MDppLygxLU1hdGguYWJzKDIqYy0xKSkscz0rKDEwMCpzKS50b0ZpeGVkKDEpLGM9KygxMDAqYykudG9GaXhlZCgxKSx7aHNsOmBoc2woJHtsfSwgJHtzfSUsICR7Y30lKWAsaHNsYTpgaHNsKCR7bH0sICR7c30lLCAke2N9JSwgMSlgLGh1ZTpsLGxpZ2h0bmVzczpjLHNhdHVyYXRpb246c319LFlyPWU9PntpZighZSl0aHJvdyBuZXcgRXJyb3IoXCJDb2xvciBpcyBub3QgZGVmaW5lZFwiKTtjb25zdCB0PWUudG9Mb3dlckNhc2UoKTtsZXQgbjtpZih0LmluY2x1ZGVzKFwicmdiXCIpKXtjb25zdCBlPUtyKHQpO2UubGVuZ3RoPjMmJmUucG9wKCksbj1xcihlKS5odWV9aWYodC5pbmNsdWRlcyhcIiNcIikpe2NvbnN0IGU9KGU9PntpZighZS5pbmNsdWRlcyhcIiNcIikpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBoZXggdmFsdWUsIGNhbm5vdCBjb252ZXJ0IHRvIFJHQi4gSGV4IHZhbHVlIGJlZ2lucyB3aXRoIGEgaGFzaHRhZy5cIik7bGV0IHQ9MCxuPTAscj0wO2lmKDQ9PT1lLmxlbmd0aCl0PWAweCR7ZVsxXX0ke2VbMV19YCxuPWAweCR7ZVsyXX0ke2VbMl19YCxyPWAweCR7ZVszXX0ke2VbM119YDtlbHNle2lmKDchPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGhleCBzdHJpbmcgbGVuZ3RoLCBjYW5ub3QgY29udmVydCB0byBSR0IuXCIpO3Q9YDB4JHtlWzFdfSR7ZVsyXX1gLG49YDB4JHtlWzNdfSR7ZVs0XX1gLHI9YDB4JHtlWzVdfSR7ZVs2XX1gfXJldHVyblsrdCwrbiwrcl19KSh0KTtuPXFyKGUpLmh1ZX1pZih0LmluY2x1ZGVzKFwiaHNsXCIpKXtuPUtyKHQpWzBdfWNvbnN0IHI9bj8udG9TdHJpbmcoKTtpZighcil0aHJvdyBuZXcgRXJyb3IoYEh1ZSB3YXMgdW5hYmxlIHRvIGJlIGV4dHJhY3RlZCBmcm9tIFwiJHt0fVwiLCBjaGVjayBjb2xvciBmb3JtYXQuIEFjY2VwdGVkIGZvcm1hdHMgYXJlOiByZ2IoKSwgcmdiYSgpLCBoZXgsIGhzbCgpLCBhbmQgaHNsYSgpYCk7cmV0dXJuIHJ9LEpyPShlLHQ9ITEpPT57Y29uc3Qgbj1ZcihlKTtyZXR1cm4gdD97YmFja2dyb3VuZDE6YGhzbGEoJHtufSwgMCUsIDEwMCUsIDEpYCxiYWNrZ3JvdW5kMjpgaHNsYSgke259LCA2NyUsIDk5JSwgMSlgLGJhY2tncm91bmQzOmBoc2xhKCR7bn0sIDI2JSwgOTYlLCAxKWAsYmFja2dyb3VuZDQ6YGhzbGEoJHtufSwgMTUlLCA5NCUsIDEpYCxiYWNrZ3JvdW5kNTpgaHNsYSgke259LCAxMCUsIDg4JSwgMSlgLGJhY2tncm91bmQ2OmBoc2xhKCR7bn0sIDgwJSwgODAlLCAxKWB9OntiYWNrZ3JvdW5kMTpgaHNsYSgke259LCA4JSwgNyUsIDEpYCxiYWNrZ3JvdW5kMjpgaHNsYSgke259LCA4JSwgMTMlLCAxKWAsYmFja2dyb3VuZDM6YGhzbGEoJHtufSwgOSUsIDE1JSwgMSlgLGJhY2tncm91bmQ0OmBoc2xhKCR7bn0sIDYlLCAyMyUsIDEpYCxiYWNrZ3JvdW5kNTpgaHNsYSgke259LCAyMSUsIDI4JSwgMSlgLGJhY2tncm91bmQ2OmBoc2xhKCR7bn0sIDUlLCA1MSUsIDEpYH19LFhyPShlLHQpPT57Y29uc3Qgbj17fTtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaCgocj0+e25bcl09dFtyXT90W3JdOmVbcl19KSksbn0sUXI9e1tNLlBhbGV0dGUuYnJhbmRQcmltYXJ5XTpcIiMwQTc2RDNcIixbTS5QYWxldHRlLnN0YXR1c1N1Y2Nlc3NdOk0uQ29sb3IuZnVuY3Rpb25hbDEsW00uUGFsZXR0ZS5zdGF0dXNXYXJuaW5nXTpNLkNvbG9yLmZ1bmN0aW9uYWwxMCxbTS5QYWxldHRlLnN0YXR1c0NyaXRpY2FsXTpNLkNvbG9yLmZ1bmN0aW9uYWw3LFtNLlBhbGV0dGUuc3RhdHVzQWN0aXZlXTpNLkNvbG9yLmZ1bmN0aW9uYWwzLFtNLlBhbGV0dGUuY29udGVudEJhY2tncm91bmQxXTpcIiMwQTc2RDNcIixbTS5QYWxldHRlLmNvbnRlbnRCYWNrZ3JvdW5kMl06XCIjMDAwMDAwXCIsW00uUGFsZXR0ZS5jb250ZW50QmFja2dyb3VuZDNdOlwiIzAwMDAwMFwiLFtNLlBhbGV0dGUuY29udGVudEJhY2tncm91bmQ0XTpcIiMwMDAwMDBcIixbTS5QYWxldHRlLmNvbnRlbnRCYWNrZ3JvdW5kNV06XCIjMDAwMDAwXCJ9LGVvPXsuLi5RcixbTS5QYWxldHRlLmJhY2tncm91bmQxXTpNLkNvbG9yLndoaXRlLFtNLlBhbGV0dGUuYmFja2dyb3VuZDJdOk0uQ29sb3IubGlnaHRHcmF5MSxbTS5QYWxldHRlLmJhY2tncm91bmQzXTpNLkNvbG9yLmxpZ2h0R3JheTIsW00uUGFsZXR0ZS5iYWNrZ3JvdW5kNF06TS5Db2xvci5saWdodEdyYXkzLFtNLlBhbGV0dGUuYmFja2dyb3VuZDVdOk0uQ29sb3IubGlnaHRHcmF5NCxbTS5QYWxldHRlLmJhY2tncm91bmQ2XTpNLkNvbG9yLmxpZ2h0R3JheTUsW00uUGFsZXR0ZS5icmFuZFNlY29uZGFyeV06TS5Db2xvci5saWdodEdyYXk0LFtNLlBhbGV0dGUuaW5wdXRCYWNrZ3JvdW5kXTpNLkNvbG9yLmxpZ2h0R3JheTMsW00uUGFsZXR0ZS5pbnB1dENvbG9yXTpNLkNvbG9yLmRhcmtHcmF5NSxbTS5QYWxldHRlLmlucHV0UGxhY2Vob2xkZXJdOk0uQ29sb3IuZGFya0dyYXkyLFtNLlBhbGV0dGUuaW5wdXREaXNhYmxlZF06TS5Db2xvci5uZXV0cmFsR3JheSxbTS5QYWxldHRlLmlucHV0Rm9jdXNlZF06TS5Db2xvci5saWdodEdyYXk1LFtNLlBhbGV0dGUuaW5wdXRCb3JkZXJdOk0uQ29sb3IubmV1dHJhbEdyYXksW00uUGFsZXR0ZS50ZXh0RGVmYXVsdF06TS5Db2xvci5kYXJrR3JheTUsW00uUGFsZXR0ZS50ZXh0SGVscF06TS5Db2xvci5kYXJrR3JheTMsW00uUGFsZXR0ZS50ZXh0SW5hY3RpdmVdOk0uQ29sb3IubmV1dHJhbEdyYXl9LHRvPXsuLi5RcixbTS5QYWxldHRlLmJhY2tncm91bmQxXTpNLkNvbG9yLmRhcmtHcmF5NixbTS5QYWxldHRlLmJhY2tncm91bmQyXTpNLkNvbG9yLmRhcmtHcmF5NSxbTS5QYWxldHRlLmJhY2tncm91bmQzXTpNLkNvbG9yLmRhcmtHcmF5NCxbTS5QYWxldHRlLmJhY2tncm91bmQ0XTpNLkNvbG9yLmRhcmtHcmF5MyxbTS5QYWxldHRlLmJhY2tncm91bmQ1XTpNLkNvbG9yLmRhcmtHcmF5MixbTS5QYWxldHRlLmJhY2tncm91bmQ2XTpNLkNvbG9yLmRhcmtHcmF5MSxbTS5QYWxldHRlLmJyYW5kU2Vjb25kYXJ5XTpNLkNvbG9yLmRhcmtHcmF5MixbTS5QYWxldHRlLmlucHV0QmFja2dyb3VuZF06TS5Db2xvci5kYXJrR3JheTEsW00uUGFsZXR0ZS5pbnB1dENvbG9yXTpNLkNvbG9yLndoaXRlLFtNLlBhbGV0dGUuaW5wdXRQbGFjZWhvbGRlcl06TS5Db2xvci5saWdodEdyYXk1LFtNLlBhbGV0dGUuaW5wdXREaXNhYmxlZF06TS5Db2xvci5uZXV0cmFsR3JheSxbTS5QYWxldHRlLmlucHV0Rm9jdXNlZF06TS5Db2xvci5saWdodEdyYXk1LFtNLlBhbGV0dGUuaW5wdXRCb3JkZXJdOk0uQ29sb3IubmV1dHJhbEdyYXksW00uUGFsZXR0ZS50ZXh0RGVmYXVsdF06TS5Db2xvci53aGl0ZSxbTS5QYWxldHRlLnRleHRIZWxwXTpNLkNvbG9yLmxpZ2h0R3JheTUsW00uUGFsZXR0ZS50ZXh0SW5hY3RpdmVdOk0uQ29sb3IubmV1dHJhbEdyYXl9LG5vPVt7bGFiZWw6XCJPcGVuRmluIERlZmF1bHQgTGlnaHQgYW5kIERhcmsgVGhlbWVcIixwYWxldHRlczp7bGlnaHQ6ey4uLmVvLGJyYW5kUHJpbWFyeTpcIiMwQTc2RDNcIixicmFuZFNlY29uZGFyeTpNLkNvbG9yLmxpZ2h0R3JheTQsYmFja2dyb3VuZFByaW1hcnk6TS5Db2xvci5kYXJrR3JheTV9LGRhcms6ey4uLnRvLGJyYW5kUHJpbWFyeTpcIiMwQTc2RDNcIixicmFuZFNlY29uZGFyeTpNLkNvbG9yLmRhcmtHcmF5MixiYWNrZ3JvdW5kUHJpbWFyeTpNLkNvbG9yLmRhcmtHcmF5NX19fV0scm89ZT0+e2NvbnN0e2JhY2tncm91bmQ6dCxmb3JlZ3JvdW5kOm59PWU7cmV0dXJue2JhY2tncm91bmQ6dCxmb3JlZ3JvdW5kOm4/P1wiI0ZGRkZGRlwifX0sb289ZT0+e2NvbnN0e2xpZ2h0OnQsZGFyazpufT1cInBhbGV0dGVzXCJpbiBlP2UucGFsZXR0ZXM6e2xpZ2h0OmUucGFsZXR0ZSxkYXJrOmUucGFsZXR0ZX0scj1Ycih0byxuKSxvPVhyKGVvLHQpLGE9KChlLHQpPT57Y29uc3Qgbj17Li4uZX0scj17Li4udH07bGV0IG89dC5iYWNrZ3JvdW5kUHJpbWFyeT9Kcih0LmJhY2tncm91bmRQcmltYXJ5LCEwKTp7fSxhPWUuYmFja2dyb3VuZFByaW1hcnk/SnIoZS5iYWNrZ3JvdW5kUHJpbWFyeSk6e307cmV0dXJuIG89ey4uLm8sLi4ucn0sYT17Li4uYSwuLi5ufSx7bGlnaHQ6ey4uLnQsLi4ub30sZGFyazp7Li4uZSwuLi5hfX19KShuLHQpLGk9KDAsTS5jcmVhdGVUaGVtZSkoey4uLnIsLi4uYT8uZGFya30pLGw9KDAsTS5jcmVhdGVUaGVtZSkoey4uLm8sLi4uYT8ubGlnaHR9KSx7bGlnaHQ6cyxkYXJrOmN9PShlPT57Y29uc3QgdD1PYmplY3Qua2V5cyhlLm5vdGlmaWNhdGlvbkluZGljYXRvckNvbG9ycz8/e30pO2lmKHQ/Lmxlbmd0aCl7Y29uc3Qgbj17fSxyPXt9O3JldHVybiB0LmZvckVhY2goKHQ9Pntjb25zdCBvPWUubm90aWZpY2F0aW9uSW5kaWNhdG9yQ29sb3JzW3RdO1wiYmFja2dyb3VuZFwiaW4gbz8oblt0XT1ybyhvKSxyW3RdPXJvKG8pKTooblt0XT1ybyhvLmRhcms/P28ubGlnaHQpLHJbdF09cm8oby5saWdodD8/by5kYXJrKSl9KSkse2xpZ2h0OnIsZGFyazpufX1yZXR1cm57bGlnaHQ6bnVsbCxkYXJrOm51bGx9fSkoZSk7cmV0dXJuIGkubm90aWZpY2F0aW9uSW5kaWNhdG9yQ29sb3JzPWMsbC5ub3RpZmljYXRpb25JbmRpY2F0b3JDb2xvcnM9cyx7ZGFyazppLGxpZ2h0Omx9fSxhbz1hc3luYyBlPT57Y29uc3R7dGhlbWVzOnQsc2VsZWN0ZWRTY2hlbWU6bn09YXdhaXQoYXN5bmMgZT0+e2NvbnN0IHQ9ZmluPy5fX2ludGVybmFsXz8uaW5pdGlhbE9wdGlvbnM/LndvcmtzcGFjZVBsYXRmb3JtPy5fdGhlbWVEYXRhO2lmKCF0fHxlLnV1aWQhPT1uZS51dWlkKXJldHVybnt0aGVtZXM6YXdhaXQgTXQoZSkuVGhlbWUuZ2V0VGhlbWVzKCksc2VsZWN0ZWRTY2hlbWU6YXdhaXQgTXQoZSkuVGhlbWUuZ2V0U2VsZWN0ZWRTY2hlbWUoKX07cmV0dXJuIHR9KShlKTt2YXIgcixvO3JldHVybihyPXQ/Lmxlbmd0aD90Om5vLG89bixyLm1hcCgoZT0+e2NvbnN0IHQ9XCJwYWxldHRlc1wiaW4gZT9lLmRlZmF1bHQ6TS5Db2xvclNjaGVtZS5kYXJrLHtsaWdodDpuLGRhcms6cn09b28oZSk7cmV0dXJue2xhYmVsOmUubGFiZWwsbG9nb1VybDplLmxvZ29VcmwsdGhlbWU6e2Rhcms6cixsaWdodDpufSxkZWZhdWx0U2NoZW1lOm8/P3R9fSkpKVswXX0saW89YXN5bmMgZT0+e2NvbnN0IHQ9YXdhaXQgcWUoZXx8ZmluLm1lLmlkZW50aXR5KSxuPWF3YWl0IHQuZGlzcGF0Y2goemUuR2V0U2VsZWN0ZWRTY2hlbWUsdm9pZCAwKTtyZXR1cm4gbj09PWcuU3lzdGVtP3dpbmRvdy5tYXRjaE1lZGlhKFwiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKVwiKS5tYXRjaGVzP1wiZGFya1wiOlwibGlnaHRcIjpufSxsbz17bmFtZTplZS5Ccm93c2VyTWVudSxhbHdheXNPblRvcDohMCxhdXRvU2hvdzohMCxmcmFtZTohMSxyZXNpemFibGU6ITEsYmFja2dyb3VuZENvbG9yOlwiIzJmMzEzNlwiLHNtYWxsV2luZG93OiEwLHNob3dUYXNrYmFySWNvbjohMSxiYWNrZ3JvdW5kVGhyb3R0bGluZzohMSxzYXZlV2luZG93U3RhdGU6ITF9O2Z1bmN0aW9uIHNvKGUpe2NvbnN0IHQ9ey4uLmxvLC4uLmV9O3JldHVybiB0LnVybD1mdW5jdGlvbihlLHQpe2lmKCFfKXRocm93IG5ldyBFcnJvcihcInJlc29sdmVBYnNvbHV0ZVBhdGggY2FuIG9ubHkgYmUgdXNlZCBpbiBhIHdpbmRvd1wiKTtjb25zdCBuPXQ/P3dpbmRvdy5sb2NhdGlvbjtpZigvXig/OlthLXpdKzopP1xcL1xcLy9pLnRlc3QoZSkpcmV0dXJuIGU7Y29uc3Qgcj1gJHtuLnByb3RvY29sfS8vJHtuLmhvc3RuYW1lfWA7cmV0dXJuIG5ldyBVUkwoZSxyKS5ocmVmfSh0LnVybD8/XCJcIiksdH1jb25zdCBjbz1mdW5jdGlvbihlKXtjb25zdCB0PW5ldyBNYXA7cmV0dXJue2VtaXQ6V3IodCwodD0+TCYmZmluLkludGVyQXBwbGljYXRpb25CdXMucHVibGlzaChlLHQpKSksYWRkTGlzdGVuZXI6VXIodCwodD0+TCYmZmluLkludGVyQXBwbGljYXRpb25CdXMuc3Vic2NyaWJlKHt1dWlkOmZpbi5tZS51dWlkfSxlLHQpKSkscmVtb3ZlTGlzdGVuZXI6R3IodCksb25jZTp6cih0KX19KFwid2luZG93Lm1lbnVcIiksdW89KGUsdCk9PmZpbi5XaW5kb3cud3JhcFN5bmMoZSkudXBkYXRlT3B0aW9ucyh7b3BhY2l0eTp0fSkscG89ZT0+Y28uZW1pdChcInJlc3BvbnNlXCIsZSksZm89RnIoKCgpPT5RKCkuZ2V0Q2hpbGRXaW5kb3dzKCkpLDUwMCk7Y29uc3QgaG89bmV3IE1hcDthc3luYyBmdW5jdGlvbiBnbyhlLHQpe2NvbnN0IG49c28oZSkscj17dG9wOm4udG9wLGxlZnQ6bi5sZWZ0LHdpZHRoOm4uZGVmYXVsdFdpZHRofHxuLndpZHRoLGhlaWdodDpuLmRlZmF1bHRIZWlnaHR8fG4uaGVpZ2h0fTtyZXR1cm4gdC5zZXQoXCJwYXJlbnROYW1lXCIsZmluLldpbmRvdy5nZXRDdXJyZW50U3luYygpLmlkZW50aXR5Lm5hbWUpLHtuYW1lOm4ubmFtZSxib3VuZHM6cixyb3V0ZTpgJHtuLnVybH0jJHt0LnRvU3RyaW5nKCl9YH19YXN5bmMgZnVuY3Rpb24gdm8oe29wdGlvbnM6ZSxwYXJhbWV0ZXJzOnR9KXtjb25zdCBuPXNvKGUpLHtuYW1lOnJ9PW47bGV0IG89YXdhaXQgYXN5bmMgZnVuY3Rpb24oZSl7cmV0dXJuKGF3YWl0IGZvKCkpLmZpbmQoKHQ9PnQuaWRlbnRpdHkubmFtZT09PWUpKX0ocik7aWYobylhd2FpdCBhc3luYyBmdW5jdGlvbihlLHQpe2NvbnN0e25hbWU6bixib3VuZHM6cixyb3V0ZTpvfT1hd2FpdCBnbyhlLHQpLGE9e3V1aWQ6ZmluLm1lLmlkZW50aXR5LnV1aWQsbmFtZTpufSxpPWZpbi5XaW5kb3cud3JhcFN5bmMoYSk7YXdhaXQgUHJvbWlzZS5hbGwoW3VvKGEsMCksaS5zZXRCb3VuZHMocildKSxpLm9uY2UoXCJibHVycmVkXCIsKCgpPT57dW8oYSwwKSxpLmhpZGUoKSxwbyh7bmFtZTphLm5hbWUsZGF0YTp7YWN0aW9uTmFtZTpcIkNhbmNlbFwifX0pfSkpLGNvLmVtaXQoXCJ1cGRhdGVcIixuLHIsbyksYXdhaXQgcG8oe25hbWU6bixkYXRhOnthY3Rpb25OYW1lOlwiQ2FuY2VsXCJ9fSl9KG4sdHx8bmV3IFVSTFNlYXJjaFBhcmFtcyk7ZWxzZXtjb25zdHtyb3V0ZTpyLGJvdW5kczphfT1hd2FpdCBnbyhlLHQpO289YXdhaXQgYXN5bmMgZnVuY3Rpb24oZSx0LG4pe2NvbnN0IHI9c28oZSksbz1hd2FpdCBhbyhmaW4ubWUuaWRlbnRpdHkpLGE9YXdhaXQgaW8oZmluLm1lLmlkZW50aXR5KT09PWcuRGFyayxpPW8/LnRoZW1lO2lmKHIuYmFja2dyb3VuZENvbG9yPWk/LlthP2cuRGFyazpnLkxpZ2h0XS5wYWxldHRlPy5pbnB1dEJhY2tncm91bmR8fHIuYmFja2dyb3VuZENvbG9yLCFoby5oYXMoci5uYW1lKSlyZXR1cm4gbmV3IFByb21pc2UoKGU9Pntjby5vbmNlKFwicmVhZHlcIiwoYXN5bmMgdD0+e2lmKHQubmFtZT09PXIubmFtZSl7Y29uc3Qgbj1hd2FpdCBoby5nZXQoci5uYW1lKTtuLm9uY2UoXCJibHVycmVkXCIsKGFzeW5jKCk9PntpZih1byh0LDApLG4uaGlkZSgpLHBvKHtuYW1lOnIubmFtZSxkYXRhOnthY3Rpb25OYW1lOlwiQ2FuY2VsXCJ9fSksbi5pZGVudGl0eS5uYW1lPT09ZWUuQnJvd3NlclNhdmVNZW51KXtjb25zdCBlPWF3YWl0IG4uZ2V0T3B0aW9ucygpO1wic3VibWl0dGluZ1wiIT09ZS5jdXN0b21Db250ZXh0JiZcImVycm9yXCIhPT1lLmN1c3RvbUNvbnRleHQmJm4uY2xvc2UoKX1lbHNlIG4uaWRlbnRpdHkubmFtZS5zdGFydHNXaXRoKGVlLkJyb3dzZXJNZW51KSYmbi5jbG9zZSgpfSkpLHNldFRpbWVvdXQoKGFzeW5jKCk9Pnthd2FpdCB1byh0LDEpLDEhPT0oYXdhaXQgZmluLldpbmRvdy53cmFwU3luYyh0KS5nZXRPcHRpb25zKCkpLm9wYWNpdHkmJnVvKHQsMSl9KSksZShuKX19KSk7Y29uc3Qgbz0oYXN5bmMoKT0+e2NvbnN0IGU9YXdhaXQgZmluLlBsYXRmb3JtLmdldEN1cnJlbnRTeW5jKCkuY3JlYXRlV2luZG93KFJyKHsuLi5yLG9wYWNpdHk6MCx1cmw6dHx8ci51cmwsZGVmYXVsdExlZnQ6bj8ubGVmdCxkZWZhdWx0VG9wOm4/LnRvcCxkZWZhdWx0V2lkdGg6bj8ud2lkdGgsZGVmYXVsdEhlaWdodDpuPy5oZWlnaHR9LCEwKSk7cmV0dXJuIGUub25jZShcImNsb3NlZFwiLCgoKT0+e2hvLmRlbGV0ZShyLm5hbWUpfSkpLGV9KSgpO2hvLnNldChyLm5hbWUsbyl9KSk7cmV0dXJuIGhvLmdldChyLm5hbWUpfSh7Li4ubn0scixhKX1yZXR1cm4gb31jb25zdCBDbz1hc3luYyh7b3B0aW9uczplLGNvbnRlbnQ6dH0pPT57Y29uc3Qgbj0oZT0+bmV3IFVSTFNlYXJjaFBhcmFtcyh7Y29udGVudDpKU09OLnN0cmluZ2lmeShlKX0pKSh7Li4udCxpbnZvY2F0aW9uSWQ6SGUoKX0pLHI9ey4uLmUsbmFtZTpgJHtlLm5hbWV9LS0ke2UubW9kYWxQYXJlbnRJZGVudGl0eT8ubmFtZT8/XCJcIn1gfTtyZXR1cm4gYXdhaXQgdm8oe29wdGlvbnM6cixwYXJhbWV0ZXJzOm59KSxuZXcgUHJvbWlzZSgoZT0+e2NvLm9uY2UoXCJyZXNwb25zZVwiLChhc3luYyB0PT57dC5uYW1lPT09ci5uYW1lJiZlKHtkYXRhOnQuZGF0YX0pfSkpfSkpfSxtbz1hc3luYyhlLHQsbj0hMSk9PntsZXQgcjtpZihuKXI9YXdhaXQoYXN5bmMgZT0+e2NvbnN0IHQ9ZSYmYXdhaXQgdGUoZSkuZ2V0Qm91bmRzKCksbj1lP2F3YWl0IHBlKHQpOihhd2FpdCBmaW4uU3lzdGVtLmdldE1vbml0b3JJbmZvKCkpLnByaW1hcnlNb25pdG9yO3JldHVybntsZWZ0Oigocj1uLmF2YWlsYWJsZVJlY3QpLmxlZnQrci5yaWdodCkvMix0b3A6KHIudG9wK3IuYm90dG9tKS8yfTt2YXIgcn0pKHQpO2Vsc2V7Y29uc3QgZT10ZSh0KSxuPWF3YWl0IGUuZ2V0Qm91bmRzKCk7cj1yPz97bGVmdDooKG89bikubGVmdCsoby5yaWdodD8/by5sZWZ0K28ud2lkdGgpKS8yLHRvcDooby50b3ArKG8uYm90dG9tPz9vLnRvcCtvLmhlaWdodCkpLzJ9fXZhciBvO2NvbnN0e2RlZmF1bHRIZWlnaHQ6YSxkZWZhdWx0V2lkdGg6aX09ZTtyZXR1cm4oKGUsdCk9Pntjb25zdCBuPXQud2lkdGgvMixyPXQuaGVpZ2h0LzI7cmV0dXJue2xlZnQ6TWF0aC5yb3VuZChlLmxlZnQtbiksdG9wOk1hdGgucm91bmQoZS50b3Atciksd2lkdGg6dC53aWR0aCxoZWlnaHQ6dC5oZWlnaHR9fSkocix7aGVpZ2h0OmEsd2lkdGg6aX0pfTthc3luYyBmdW5jdGlvbiB3byhlLHQsbj0hMSl7Y29uc3Qgcj10JiZcIm1heGltaXplZFwiPT09YXdhaXQgdGUodCkuZ2V0U3RhdGUoKSxvPW58fHJ8fCF0LGE9YXdhaXQgbW8oZSx0LG8pO3JldHVybiBhd2FpdChhc3luYyBlPT57Y29uc3QgdD1hd2FpdCBmaW4uU3lzdGVtLmdldE1vbml0b3JJbmZvKCksbj1bdC5wcmltYXJ5TW9uaXRvciwuLi50Lm5vblByaW1hcnlNb25pdG9yc107Zm9yKGNvbnN0IHQgb2YgbilpZigxPT09ZGUoZSx0KSlyZXR1cm4hMTtyZXR1cm4hMH0pKGEpPyhhd2FpdCB0ZSh0KS5jZW50ZXIoKSxtbyhlLHQsbykpOihjb25zb2xlLndhcm4oXCJSZXNwb25zZSBtb2RhbCBpc24ndCBvZmYgc2NyZWVuLCBub3QgY2VudGVyaW5nIHBhcmVudCB3aW5kb3dcIiksYSl9Y29uc3QgYm89YXN5bmMoZSx0LG4pPT57Y29uc3R7d2luZG93T3B0aW9uczpyLGNvbnRlbnQ6b309YXdhaXQoYXN5bmMoZSx0KT0+KHt0aXRsZTpcIlN3aXRjaCBXb3Jrc3BhY2VcIix3aW5kb3dPcHRpb25zOnt1cmw6YXdhaXQgVSgpK0suUmVzcG9uc2VNb2RhbCxuYW1lOmVlLkJyb3dzZXJNZW51LGRlZmF1bHRIZWlnaHQ6MTM0LGRlZmF1bHRXaWR0aDo0MTAsbW9kYWxQYXJlbnRJZGVudGl0eTp0fSxjb250ZW50Ont0aXRsZTpCbihcInN3aXRjaFdvcmtzcGFjZU1vZGFsXCIse3dvcmtzcGFjZTplfSksYm9keTpCbihcInN3aXRjaFdvcmtzcGFjZU1vZGFsLndhcm5pbmdcIiksYnV0dG9uczp7cmlnaHQ6W3tsYWJlbDpCbihcImdsb2JhbC5jYW5jZWxcIiksdHlwZTpcInNlY29uZGFyeVwiLGlkOlwiQ2FuY2VsXCJ9LHtsYWJlbDpCbihcImdsb2JhbC5jb25maXJtXCIpLHR5cGU6XCJwcmltYXJ5XCIsaWQ6XCJDb25maXJtXCJ9XX19fSkpKHQsbj92b2lkIDA6ZSksYT1hd2FpdCB3byhyLGUsbiksaT17Li4ucix0b3A6YS50b3AsbGVmdDphLmxlZnR9O3JldHVyblwiQ29uZmlybVwiPT09KGF3YWl0IENvKHtvcHRpb25zOmksY29udGVudDpvfSkpLmRhdGEuYWN0aW9uTmFtZX0seW89YXN5bmMoZSx0KT0+e2NvbnN0e3dpbmRvd09wdGlvbnM6bixjb250ZW50OnJ9PWF3YWl0KGFzeW5jKGUsdCk9Pih7dGl0bGU6XCJEZWxldGUgV29ya3NwYWNlXCIsd2luZG93T3B0aW9uczp7dXJsOmF3YWl0IFUoKStLLlJlc3BvbnNlTW9kYWwsbmFtZTplZS5Ccm93c2VyTWVudSxkZWZhdWx0SGVpZ2h0OjE0NCxkZWZhdWx0V2lkdGg6NDEwLG1vZGFsUGFyZW50SWRlbnRpdHk6ZX0sY29udGVudDp7dGl0bGU6Qm4oXCJkZWxldGVXb3Jrc3BhY2VNb2RhbFwiKSxib2R5OmAke3R9YCxidXR0b25zOntyaWdodDpbe2xhYmVsOkJuKFwiZ2xvYmFsLmNhbmNlbFwiKSx0eXBlOlwic2Vjb25kYXJ5XCIsaWQ6XCJDYW5jZWxcIn0se2xhYmVsOkJuKFwiZ2xvYmFsLmNvbmZpcm1cIiksdHlwZTpcInByaW1hcnlcIixpZDpcIkNvbmZpcm1cIn1dfX19KSkoZSx0KSxvPWF3YWl0IHdvKG4sbi5tb2RhbFBhcmVudElkZW50aXR5KSxhPXsuLi5uLHRvcDpvLnRvcCxsZWZ0Om8ubGVmdH07cmV0dXJuXCJDb25maXJtXCI9PT0oYXdhaXQgQ28oe29wdGlvbnM6YSxjb250ZW50OnJ9KSkuZGF0YS5hY3Rpb25OYW1lfSx4bz1hc3luYyhlLHQsbik9Pntjb25zdHt3aW5kb3dPcHRpb25zOnIsY29udGVudDpvfT1hd2FpdChhc3luYyhlLHQpPT4oe3RpdGxlOlwiUGxhdGZvcm0gUXVpdFwiLHdpbmRvd09wdGlvbnM6e3VybDphd2FpdCBVKCkrSy5SZXNwb25zZU1vZGFsLG5hbWU6ZWUuQnJvd3Nlck1lbnUsZGVmYXVsdEhlaWdodDoxMzQsZGVmYXVsdFdpZHRoOjQxMCxtb2RhbFBhcmVudElkZW50aXR5OnR9LGNvbnRlbnQ6e3RpdGxlOkJuKFwiUGxhdGZvcm1cIj09PWU/XCJjbG9zZVBsYXRmb3JtXCI6XCJjbG9zZVBsYXRmb3JtLndvcmtzcGFjZVwiLHt3b3Jrc3BhY2U6ZX0pLGJvZHk6Qm4oXCJjbG9zZVBsYXRmb3JtLndhcm5pbmdcIiksYnV0dG9uczp7cmlnaHQ6W3tsYWJlbDpCbihcImdsb2JhbC5jYW5jZWxcIiksdHlwZTpcInNlY29uZGFyeVwiLGlkOlwiQ2FuY2VsXCJ9LHtsYWJlbDpCbihcImdsb2JhbC5jb25maXJtXCIpLHR5cGU6XCJwcmltYXJ5XCIsaWQ6XCJDb25maXJtXCJ9XX19fSkpKHQsbj92b2lkIDA6ZSksYT1hd2FpdCB3byhyLGUsbiksaT17Li4ucix0b3A6YS50b3AsbGVmdDphLmxlZnR9O3JldHVyblwiQ29uZmlybVwiPT09KGF3YWl0IENvKHtvcHRpb25zOmksY29udGVudDpvfSkpLmRhdGEuYWN0aW9uTmFtZX0sa289YXN5bmMgZT0+e2NvbnN0e3dpbmRvd09wdGlvbnM6dCxjb250ZW50Om59PWF3YWl0KGFzeW5jIGU9Pih7dGl0bGU6XCJSZXN0b3JlIENoYW5nZXNcIix3aW5kb3dPcHRpb25zOnt1cmw6YXdhaXQgVSgpK0suUmVzcG9uc2VNb2RhbCxuYW1lOmVlLkJyb3dzZXJNZW51LGRlZmF1bHRIZWlnaHQ6MTM0LGRlZmF1bHRXaWR0aDo0MTAsbW9kYWxQYXJlbnRJZGVudGl0eTplfSxjb250ZW50Ont0aXRsZTpCbihcInJlc3RvcmVNb2RhbFwiKSxib2R5OkJuKFwibW9kYWwuZGlzY2FyZFdhcm5pbmdcIiksYnV0dG9uczp7cmlnaHQ6W3tsYWJlbDpCbihcImdsb2JhbC5jYW5jZWxcIiksdHlwZTpcInNlY29uZGFyeVwiLGlkOlwiQ2FuY2VsXCJ9LHtsYWJlbDpCbihcImdsb2JhbC5jb25maXJtXCIpLHR5cGU6XCJwcmltYXJ5XCIsaWQ6XCJDb25maXJtXCJ9XX19fSkpKGUpLHI9YXdhaXQgd28odCx0Lm1vZGFsUGFyZW50SWRlbnRpdHkpLG89ey4uLnQsdG9wOnIudG9wLGxlZnQ6ci5sZWZ0fTtyZXR1cm5cIkNvbmZpcm1cIj09PShhd2FpdCBDbyh7b3B0aW9uczpvLGNvbnRlbnQ6bn0pKS5kYXRhLmFjdGlvbk5hbWV9LFNvPWFzeW5jKGUsdCk9Pntjb25zdHt3aW5kb3dPcHRpb25zOm4sY29udGVudDpyfT1hd2FpdChhc3luYyhlLHQpPT57Y29uc3Qgbj1hd2FpdCBmZShlKSxyPW5ldyBVUkwoYXdhaXQgVSgpK0suUmVzcG9uc2VNb2RhbCk7cmV0dXJuIHIuc2VhcmNoUGFyYW1zLmFwcGVuZChcImlzRW50ZXJwcmlzZVwiLGAke259YCkse3RpdGxlOlwiRGVsZXRlIFBhZ2VcIix3aW5kb3dPcHRpb25zOnt1cmw6ci50b1N0cmluZygpLG5hbWU6ZWUuQnJvd3Nlck1lbnUsZGVmYXVsdEhlaWdodDoxNzIsZGVmYXVsdFdpZHRoOjQ2NCxtb2RhbFBhcmVudElkZW50aXR5OmV9LGNvbnRlbnQ6e3RpdGxlOkJuKFwiZW50ZXJwcmlzZURlbGV0ZU1vZGFsLmRlbGV0ZVN1cGVydGFiXCIse3RpdGxlOnR9KSxib2R5OkJuKFwiZW50ZXJwcmlzZURlbGV0ZU1vZGFsLmRlbGV0ZVN1cGVydGFiV2FybmluZ1wiKSxidXR0b25zOntyaWdodDpbe2xhYmVsOkJuKFwiZ2xvYmFsLmNhbmNlbFwiKSx0eXBlOlwic2Vjb25kYXJ5XCIsaWQ6XCJDYW5jZWxcIn0se2xhYmVsOkJuKFwiZ2xvYmFsLmRlbGV0ZVwiKSx0eXBlOlwicHJpbWFyeVwiLGlkOlwiRGVsZXRlXCJ9XX19fX0pKGUsdCksbz1hd2FpdCB3byhuLG4ubW9kYWxQYXJlbnRJZGVudGl0eSksYT17Li4ubix0b3A6by50b3AsbGVmdDpvLmxlZnR9O3JldHVyblwiRGVsZXRlXCI9PT0oYXdhaXQgQ28oe29wdGlvbnM6YSxjb250ZW50OnJ9KSkuZGF0YS5hY3Rpb25OYW1lfTthc3luYyBmdW5jdGlvbiBPbyh7b3B0aW9uczplLC4uLnR9KXt0cnl7aWYoISghIWU/LnNraXBQcm9tcHR8fGF3YWl0IGJvKGU/LnByb21wdENvbnRhaW5lcldpbmRvd0lkZW50aXR5LHQudGl0bGUsZT8uc2hvdWxkQ2VudGVyTW9kYWxPbk1vbml0b3IpKSlyZXR1cm4hMTtjb25zdCBuPUx0KCk7YXdhaXQgbi5hcHBseVNuYXBzaG90KHQuc25hcHNob3Qsey4uLmU/LmFwcGx5U25hcHNob3RPcHRpb25zPz97fSxjbG9zZUV4aXN0aW5nV2luZG93czplPy5hcHBseVNuYXBzaG90T3B0aW9ucz8uY2xvc2VFeGlzdGluZ1dpbmRvd3M/PyEwfSksTW8odCksVHIoanIuU1VDQ0VTUyxCbihcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlU3dpdGNoZWRcIikpLmNhdGNoKGNvbnNvbGUud2Fybil9Y2F0Y2goZSl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJmYWlsZWQgdG8gYXBwbHkgdGhlIGN1cnJlbnQgd29ya3NwYWNlOiBcIixlKSwhMX1yZXR1cm4hMH1mdW5jdGlvbiBNbyhlKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgbG9jYWxTdG9yYWdlKXRyeXtjb25zdCB0PUpTT04uc3RyaW5naWZ5KGUpO2R0KFBlLkN1cnJlbnRXb3Jrc3BhY2VJZCx0KX1jYXRjaChlKXtjb25zb2xlLmVycm9yKFwiZmFpbGVkIHRvIHNldCB0aGUgYWN0aXZlIHdvcmtzcGFjZTogXCIsZSl9fWFzeW5jIGZ1bmN0aW9uIExvKCl7Y29uc3QgZT1MdCgpLHQ9YXdhaXQgZS5nZXRTbmFwc2hvdCgpO3JldHVybnt3b3Jrc3BhY2VJZDpIZSgpLHRpdGxlOmF3YWl0IGpvKCksbWV0YWRhdGE6e0FQSVZlcnNpb246Qn0sc25hcHNob3Q6dH19YXN5bmMgZnVuY3Rpb24gX28oKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgbG9jYWxTdG9yYWdlKXJldHVybiBMbygpO2NvbnN0IGU9cHQoUGUuQ3VycmVudFdvcmtzcGFjZUlkKTtpZighZSlyZXR1cm4gTG8oKTtjb25zdCB0PUpTT04ucGFyc2UoZSksbj1MdCgpLHI9YXdhaXQgbi5nZXRTbmFwc2hvdCgpO3JldHVybnsuLi50LG1ldGFkYXRhOntBUElWZXJzaW9uOkJ9LHNuYXBzaG90OnJ9fWNvbnN0IFBvPWFzeW5jKCk9Pihhd2FpdCBxZShuZSkpLmRpc3BhdGNoKHplLkdldFNhdmVkV29ya3NwYWNlcyx2b2lkIDApLEVvPWFzeW5jIGU9PmF3YWl0KGFzeW5jIGU9Pihhd2FpdCBxZShuZSkpLmRpc3BhdGNoKHplLkdldFNhdmVkV29ya3NwYWNlLGUpKShlLndvcmtzcGFjZUlkKT8oYXN5bmMgZT0+KGF3YWl0IHFlKG5lKSkuZGlzcGF0Y2goemUuVXBkYXRlU2F2ZWRXb3Jrc3BhY2UsZSkpKHt3b3Jrc3BhY2VJZDplLndvcmtzcGFjZUlkLHdvcmtzcGFjZTplfSk6KGFzeW5jIGU9Pihhd2FpdCBxZShuZSkpLmRpc3BhdGNoKHplLkNyZWF0ZVNhdmVkV29ya3NwYWNlLGUpKSh7d29ya3NwYWNlOmV9KTthc3luYyBmdW5jdGlvbiBqbyhlPVwiVW50aXRsZWQgV29ya3NwYWNlXCIpe2NvbnN0IHQ9KGF3YWl0IFBvKCkpLm1hcCgoKHt0aXRsZTplfSk9PmUpKTtyZXR1cm4gcW4oZSx0KX1jb25zdCBSbz1lPT4oey4uLmUsc25hcHNob3Q6ey4uLmUuc25hcHNob3Qsd2luZG93czplLnNuYXBzaG90LndpbmRvd3MubWFwKChlPT4oey4uLmUsd29ya3NwYWNlUGxhdGZvcm06ey4uLmUud29ya3NwYWNlUGxhdGZvcm0scGFnZXM6ZS53b3Jrc3BhY2VQbGF0Zm9ybT8ucGFnZXM/Lm1hcCgoZT0+KHsuLi5lLGhhc1Vuc2F2ZWRDaGFuZ2VzOiExfSkpKX19KSkpfX0pLElvPWFzeW5jKGUsdCk9Pntjb25zdCBuPXQ/P0x0KCk7YXdhaXQgbi5TdG9yYWdlLnNhdmVXb3Jrc3BhY2UoUm8oZSkpLGF3YWl0KGFzeW5jKCk9Pihhd2FpdCBxZShuZSkpLmRpc3BhdGNoKHplLk1hcmtVbnNhdmVkUGFnZXNBc1NhdmVkSW50ZXJuYWwsdm9pZCAwKSkoKX0sVm89YXN5bmMgZT0+e2NvbnN0IHQ9THQoKSxuPWF3YWl0IHQuZ2V0Q3VycmVudFdvcmtzcGFjZSgpLHI9YXdhaXQgdC5TdG9yYWdlLmdldFdvcmtzcGFjZXMoKSxvPW4ud29ya3NwYWNlSWQ7aWYoci5zb21lKChlPT5lLndvcmtzcGFjZUlkPT09bykpKWF3YWl0IElvKG4sdCksYXdhaXQgdC5zZXRBY3RpdmVXb3Jrc3BhY2UobiksYXdhaXQgRHIoQm4oXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZVNhdmVkXCIpLGUpO2Vsc2V7Y29uc3Qgbj10LkJyb3dzZXIud3JhcFN5bmMoZSk7YXdhaXQgbi5fb3BlblNhdmVNb2RhbCh7bWVudVR5cGU6Uy5TQVZFX1dPUktTUEFDRX0pfX0sSG89ZT0+e0x0KCkuQnJvd3Nlci53cmFwU3luYyhlKS5fb3BlblNhdmVNb2RhbCh7bWVudVR5cGU6Uy5TQVZFX1dPUktTUEFDRV9BU30pfSxBbz1hc3luYyBlPT57Y29uc3QgdD1MdCgpLkJyb3dzZXIud3JhcFN5bmMoZSkse25ld1BhZ2VVcmw6bn09YXdhaXQgQnIoKSxyPWF3YWl0ICRyKGUpLG89bnx8dm9pZCAwO2F3YWl0IHQuX2FkZERlZmF1bHRQYWdlKHtpZGVudGl0eTplLHBhZ2U6cixuZXdQYWdlVXJsOm99KX0sVG89YXN5bmMoZSx0KT0+e2NvbnN0IG49THQoKS5Ccm93c2VyLndyYXBTeW5jKGUpLHI9YXdhaXQgTHQoKS5TdG9yYWdlLmdldFBhZ2VzKCksbz0oYXdhaXQgbi5nZXRQYWdlcygpKS5maW5kKChlPT50P2UucGFnZUlkPT09dDplLmlzQWN0aXZlKSksYT1yLnNvbWUoKGU9Pm8ucGFnZUlkPT09ZS5wYWdlSWQpKSxpPWF3YWl0IGZlKGUpO2lmKGEpdHJ5e2F3YWl0IEx0KCkuU3RvcmFnZS5zYXZlUGFnZSgodT1vLHsuLi51LGhhc1Vuc2F2ZWRDaGFuZ2VzOnZvaWQgMCxwYXJlbnRJZGVudGl0eTp2b2lkIDAsaXNBY3RpdmU6dm9pZCAwLGxheW91dDpIdCh1LmxheW91dCl9KSksYXdhaXQgbi51cGRhdGVQYWdlKHtwYWdlSWQ6by5wYWdlSWQscGFnZTp7aGFzVW5zYXZlZENoYW5nZXM6ITF9fSksRHIoQm4oaT9cImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiU2F2ZWRcIjpcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZVNhdmVkXCIpLGUsQm4oaT9cImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiSGFzQmVlblNhdmVkXCI6XCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VIYXNCZWVuU2F2ZWRcIix7dGl0bGU6by50aXRsZX0pKX1jYXRjaHtsPUJuKFwiZXJyb3JJbmRpY2F0b3IucGFnZVNhdmVGYWlsZWRcIikscz1vLnBhcmVudElkZW50aXR5Lm5hbWUsVHIoanIuRVJST1IsbCxzLGMpfWVsc2Ugbi5fb3BlblNhdmVNb2RhbCh7aWQ6by5wYWdlSWQsbWVudVR5cGU6Uy5TQVZFX1BBR0V9KTt2YXIgbCxzLGMsdX0sRG89YXN5bmMoZSx0KT0+e2NvbnN0IG49THQoKS5Ccm93c2VyLndyYXBTeW5jKGUpLHI9KGF3YWl0IG4uZ2V0UGFnZXMoKSkuZmluZCgoZT0+dD9lLnBhZ2VJZD09PXQ6ZS5pc0FjdGl2ZSkpO24uX29wZW5TYXZlTW9kYWwoe2lkOnIucGFnZUlkLG1lbnVUeXBlOlMuU0FWRV9QQUdFX0FTfSkseWUoe3R5cGU6XCJQYWdlIE1vZGFsXCIsYWN0aW9uOlwiU2VsZWN0IFNhdmUgQXNcIix2YWx1ZTpyLnRpdGxlLHNraXBWYWx1ZUhhc2hpbmc6ITB9KX0sQm89e3RpdGxlOlwiRG93bmxvYWRzXCIscGFnZUlkOlwiZG93bmxvYWRzLXBhZ2UtaWRcIixsYXlvdXQ6e2NvbnRlbnQ6W3t0eXBlOlwic3RhY2tcIixjb250ZW50Olt7dHlwZTpcImNvbXBvbmVudFwiLGNvbXBvbmVudE5hbWU6XCJ2aWV3XCIsY29tcG9uZW50U3RhdGU6e25hbWU6XCJzaG93LWRvd25sb2FkLXZpZXdcIix1cmw6XCJjaHJvbWU6Ly9kb3dubG9hZHMvXCJ9fV19XX19LFpvPWFzeW5jIGU9Pntjb25zdCB0PXRlKGUpLG49YXdhaXQgdC5nZXRDdXJyZW50Vmlld3MoKSxyPShhd2FpdCBMdCgpLkJyb3dzZXIud3JhcFN5bmModC5pZGVudGl0eSkuZ2V0UGFnZXMoKSkuZmluZCgoZT0+ZS5pc0FjdGl2ZSkpO3RyeXtjb25zdCB0PShhd2FpdCBQcm9taXNlLmFsbChuLm1hcCgoYXN5bmMgZT0+KHtpZGVudGl0eTplLmlkZW50aXR5LGluZm86YXdhaXQgZmluLlZpZXcud3JhcFN5bmMoZS5pZGVudGl0eSkuZ2V0SW5mbygpfSkpKSkpLmZpbmQoKGU9PlwiY2hyb21lOi8vZG93bmxvYWRzL1wiPT09ZS5pbmZvLnVybCkpO2lmKHQpYXdhaXQgZmluLlZpZXcud3JhcFN5bmModC5pZGVudGl0eSkuZm9jdXMoKTtlbHNle2NvbnN0IHQ9THQoKTtpZihyPy5pc0xvY2tlZCl7Y29uc3QgZT0oYXdhaXQgZmluLkFwcGxpY2F0aW9uLmdldEN1cnJlbnRTeW5jKCkuZ2V0Q2hpbGRXaW5kb3dzKCkpLmZpbmQoKGU9Plwic2hvdy1kb3dubG9hZC13aW5kb3dcIj09PWUuaWRlbnRpdHkubmFtZSkpO3JldHVybiB2b2lkKGU/YXdhaXQgZS5mb2N1cygpOnQuQnJvd3Nlci5jcmVhdGVXaW5kb3coe25hbWU6XCJzaG93LWRvd25sb2FkLXdpbmRvd1wiLHdvcmtzcGFjZVBsYXRmb3JtOntwYWdlczpbQm9dfX0pKX0oYXdhaXQgTHQoKS5jcmVhdGVWaWV3KHtuYW1lOlwic2hvdy1kb3dubG9hZC12aWV3XCIsdXJsOlwiY2hyb21lOi8vZG93bmxvYWRzL1wiLHRhcmdldDplfSxlKSkuZm9jdXMoKX19Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihcIkNvdWxkbid0IG9wZW4gZG93bmxvYWRzIHZpZXdcIixlKX19LCRvPWFzeW5jIGU9Pntjb25zdCB0PWUubWFwKChlPT5maW4uVmlldy53cmFwU3luYyhlKS5wcmludCgpKSk7YXdhaXQgUHJvbWlzZS5hbGwodCl9LE5vPWU9Pntjb25zdFt0LG4scl09ZS5zcGxpdChcIi5cIikubWFwKChlPT5cInhcIj09PWU/MDoxKSk7cmV0dXJuIDEwMCp0KzEwKm4rMSpyfTtjbGFzcyBGbyBleHRlbmRzIEVycm9ye31jb25zdCBXbz1hc3luYyBlPT57dHJ5e2NvbnN0IG49YXdhaXQgYXN5bmMgZnVuY3Rpb24oKXtjb25zdCBlPWF3YWl0IEYoKSx0PWU/LnRyYW5zbGF0aW9uT3ZlcnJpZGVzVXJsPz9cImh0dHBzOi8vd29ya3NwYWNlLm9wZW5maW4uY28vd29ya3NwYWNlL2Fzc2V0cy90cmFuc2xhdGlvbi1vdmVycmlkZS5qc29uXCI7aWYoXCJcIj09PXQpdGhyb3cgbmV3IEZvKFwiRW1wdHkgc3RyaW5nIHByb3ZpZGVkIGFzIHVybCB0byB0cmFuc2xhdGlvbk92ZXJyaWRlc1VybCwgb3ZlcnJpZGVzIHdpbGwgbm90IGJlIGZldGNoZWQuXCIpO3JldHVybiBhd2FpdCBmZXRjaCh0KS50aGVuKChlPT5lLmpzb24oKSkpfSgpLHI9KHQ9KGU9Pntjb25zdCB0PUIuc3BsaXQoXCIuXCIpO3JldHVybiBPYmplY3Qua2V5cyhlKS5maWx0ZXIoKGU9Pntjb25zdCBuPWUuc3BsaXQoXCIuXCIpO2lmKDMhPT1uLmxlbmd0aClyZXR1cm4gY29uc29sZS53YXJuKGBFbmNvdW50ZXJlZCBhIHRyYW5zbGF0aW9uIG92ZXJyaWRlIHZlcnNpb24gc3RyaW5nIGluIGFuIHVuc3VwcG9ydGVkIGZvcm1hdDogJHtlfS4gVmVyc2lvbnMgbXVzdCBiZSBpbiBBLkIuQyBmb3JtYXQgd2hlcmUgQSwgQiwgQyBhcmUgZWl0aGVyIGludGVnZXJzIG9yIHRoZSB3aWxkY2FyZCBzeW1ib2wgJ3gnLmApLCExO2NvbnN0W3IsbyxhXT1uO3JldHVybiEociE9PXRbMF0mJlwieFwiIT09cnx8byE9PXRbMV0mJlwieFwiIT09b3x8YSE9PXRbMl0mJlwieFwiIT09YSl9KSl9KShuKSxbLi4udF0uc29ydCgoKGUsdCk9Pk5vKGUpLU5vKHQpKSkpO3IuZm9yRWFjaCgodD0+e2NvbnN0IHI9blt0XTtPYmplY3Qua2V5cyhyKS5mb3JFYWNoKCh0PT57ZS5hZGRSZXNvdXJjZUJ1bmRsZSh0LFwidHJhbnNsYXRpb25cIixyW3RdLCEwLCEwKX0pKX0pKX1jYXRjaChlKXtlIGluc3RhbmNlb2YgRm8/Y29uc29sZS53YXJuKGUubWVzc2FnZSk6Y29uc29sZS5lcnJvcihcIkVycm9yIGFwcGx5aW5nIGEgdHJhbnNsYXRpb24gb3ZlcnJpZGU6IFwiLGUpfXZhciB0fTtmdW5jdGlvbiBVbygpe3JldHVybiBqbi5sYW5ndWFnZX1jb25zdCB6bz1hc3luYyBlPT57cW8oZSksKGU9Pntqbi5jaGFuZ2VMYW5ndWFnZShlKX0pKGUpLGF3YWl0KGFzeW5jIGU9Pntjb25zdCB0PWF3YWl0IGllKCk7cmV0dXJuIFByb21pc2UuYWxsKHQubWFwKChhc3luYyB0PT57Y29uc3Qgbj1hd2FpdCB0dCh0LmlkZW50aXR5KTthd2FpdCBuLmRpc3BhdGNoKGl0LlNldFNlbGVjdGVkTGFuZ3VhZ2UsZSl9KSkpfSkoZSl9O2Z1bmN0aW9uIEdvKCl7aWYoIWpuLm9wdGlvbnMucmVzb3VyY2VzKXRocm93IG5ldyBFcnJvcihcIk5vIGxhbmd1YWdlIHJlc291cmNlcyBmb3VuZFwiKTtyZXR1cm57Y3VycmVudExhbmd1YWdlOlVvKCkscmVzb3VyY2VzOmpuLm9wdGlvbnMucmVzb3VyY2VzfX1hc3luYyBmdW5jdGlvbiBLbyhlPVwiZW4tVVNcIil7cW8oZSksZnVuY3Rpb24oZT1cImVuLVVTXCIpe2puLnVzZShXdCkuaW5pdCh7bG5nOmUsZmFsbGJhY2tMbmc6XCJlbi1VU1wiLHJlc291cmNlczp7XCJlbi1VU1wiOnt0cmFuc2xhdGlvbjpWbn0sXCJqYS1KUFwiOnt0cmFuc2xhdGlvbjpBbn0sXCJ6aC1DTlwiOnt0cmFuc2xhdGlvbjpSbn0sXCJrby1LUlwiOnt0cmFuc2xhdGlvbjpUbn0sXCJydS1SVVwiOnt0cmFuc2xhdGlvbjpEbn0sXCJkZS1ERVwiOnt0cmFuc2xhdGlvbjpIbn0sXCJ6aC1IYW50XCI6e3RyYW5zbGF0aW9uOklufX19KX0oZSksYXdhaXQgV28oam4pfWZ1bmN0aW9uIHFvKGUpe2lmKCFNLlNVUFBPUlRFRF9MQU5HVUFHRVMuaW5jbHVkZXMoZSkpdGhyb3cgbmV3IEVycm9yKGBUaGUgSVNPIGxhbmd1YWdlIHByb3ZpZGVkICR7ZX0gaXMgbm90IHN1cHBvcnRlZGApfWNvbnN0IFlvPVtcImdyZWVuXCIsXCJwdXJwbGVcIixcIm9yYW5nZVwiLFwicmVkXCIsXCJwaW5rXCIsXCJ5ZWxsb3dcIl0sSm89XCJDT05URVhUX0dST1VQX1BBR0VcIixYbz0oKT0+ZT0+Y2xhc3MgZXh0ZW5kcyBle2dldENvbnRleHRHcm91cHMoKXtyZXR1cm4gc3VwZXIuZ2V0Q29udGV4dEdyb3VwcygpLm1hcCgoZT0+WW8uaW5jbHVkZXMoZS5kaXNwbGF5TWV0YWRhdGE/Lm5hbWUpP3suLi5lLGRpc3BsYXlNZXRhZGF0YTp7Li4uZS5kaXNwbGF5TWV0YWRhdGEsbmFtZTpCbihlLmRpc3BsYXlNZXRhZGF0YT8ubmFtZSl9fTplKSl9fSxRbz0oKT0+e2NvbnN0IGU9bmV3IFNldDtyZXR1cm4gdD0+Y2xhc3MgZXh0ZW5kcyB0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm9uQ2xpZW50Q29ubmVjdGVkPWU9PntlLm5hbWUuc3RhcnRzV2l0aChcImludGVybmFsLWdlbmVyYXRlZC12aWV3XCIpJiZ0aGlzLmpvaW5Db250ZXh0R3JvdXAoe2NvbnRleHRHcm91cElkOkpvLHRhcmdldDplfSx7dXVpZDp0aGlzLmZpbi5tZS51dWlkLG5hbWU6dGhpcy5maW4ubWUubmFtZX0pfTtjb25zdCBlPXRoaXMuaW50ZXJvcENsaWVudHMuc2V0O3RoaXMuaW50ZXJvcENsaWVudHMuc2V0PSh0LG4pPT57ZS5jYWxsKHRoaXMuaW50ZXJvcENsaWVudHMsdCxuKSx0aGlzLm9uQ2xpZW50Q29ubmVjdGVkKG4uY2xpZW50SWRlbnRpdHkpfX1hc3luYyBqb2luQ29udGV4dEdyb3VwKHtjb250ZXh0R3JvdXBJZDp0LHRhcmdldDpufSxyKXtpZih0IT09Sm8pcmV0dXJuIHN1cGVyLmpvaW5Db250ZXh0R3JvdXAoe2NvbnRleHRHcm91cElkOnQsdGFyZ2V0Om59LHIpO3RyeXtjb25zdCB0PWF3YWl0IHRoaXMuZmluLlZpZXcud3JhcFN5bmMobikuZ2V0UGFyZW50TGF5b3V0KCkse3NldHRpbmdzOntwYWdlSWQ6b319PWF3YWl0IHQuZ2V0Q29uZmlnKCk7aWYoIW8pdGhyb3cgbmV3IEVycm9yKFwiVmlldyBkb2VzIG5vdCBiZWxvbmcgdG8gYSBwYWdlXCIpO2lmKCFlLmhhcyhvKSYmKGUuYWRkKG8pLCF0aGlzLmNvbnRleHRHcm91cHNCeUlkLmhhcyhvKSkpe2NvbnN0IGU9bmV3IE1hcDt0aGlzLmNvbnRleHRHcm91cHNCeUlkLnNldChvLGUpfWF3YWl0IHN1cGVyLmpvaW5Db250ZXh0R3JvdXAoe2NvbnRleHRHcm91cElkOm8sdGFyZ2V0Om59LHIpLG4ubmFtZX1jYXRjaChlKXtKU09OLnN0cmluZ2lmeShuKSxlLnN0YWNrfX1nZXRDb250ZXh0R3JvdXBzKCl7cmV0dXJuWy4uLkFycmF5LmZyb20oZSkubWFwKChlPT4oe2lkOmUsZGlzcGxheU1ldGFkYXRhOnt9fSkpKV19c2V0Q29udGV4dEZvckdyb3VwKGUsdCl7aWYoIXRoaXMuY29udGV4dEdyb3Vwc0J5SWQuaGFzKHQpKXtjb25zdCBlPW5ldyBNYXA7dGhpcy5jb250ZXh0R3JvdXBzQnlJZC5zZXQodCxlKX1yZXR1cm4gc3VwZXIuc2V0Q29udGV4dEZvckdyb3VwKGUsdCl9fX0sZWE9KGUsdCk9Pntjb25zdCBuPShlPT5oZShlKT9RbygpOlhvKCkpKHQpO3RyeXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP3Q9PmUobih0KSk6QXJyYXkuaXNBcnJheShlKT9bLi4uZSxuXTplPT5uZXcobihlKSl9Y2F0Y2goZSl7dGhyb3cgbmV3IEVycm9yKFwiV29ya3NwYWNlUGxhdGZvcm0uaW5pdCBFcnJvcjpcIixlKX19O2FzeW5jIGZ1bmN0aW9uIHRhKCl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGxvY2FsU3RvcmFnZSl0cnl7Y29uc3QgZT1wdChQZS5MYXN0Rm9jdXNlZEJyb3dzZXJXaW5kb3cpO2lmKCFlKXJldHVybjtjb25zdCB0PUpTT04ucGFyc2UoZSk7aWYoYXdhaXQgc2UodCkpcmV0dXJuIHR9Y2F0Y2goZSl7dGhyb3cgbmV3IEVycm9yKGBmYWlsZWQgdG8gZ2V0IGxhc3QgZm9jdXNlZCBicm93c2VyIHdpbmRvdzogJHtlfWApfX1hc3luYyBmdW5jdGlvbiBuYShlPWZpbi5tZS5pZGVudGl0eSl7YXdhaXQgYWUoZSkmJmZ1bmN0aW9uKGUpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBsb2NhbFN0b3JhZ2UpdHJ5e2NvbnN0IHQ9SlNPTi5zdHJpbmdpZnkoZSk7ZHQoUGUuTGFzdEZvY3VzZWRCcm93c2VyV2luZG93LHQpfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoXCJmYWlsZWQgdG8gc2F2ZSBsYXN0IGZvY3VzZWQgYnJvd3NlciB3aW5kb3c6IFwiLGUpfX0oZSl9Y29uc3QgcmE9X2UoKSgoYXN5bmMoKT0+e2NvbnN0IGU9YXdhaXQgZmluLlBsYXRmb3JtLmdldEN1cnJlbnRTeW5jKCkuQXBwbGljYXRpb24uZ2V0Q2hpbGRXaW5kb3dzKCk7bGV0IHQsbj0hMTtmb3IoY29uc3QgciBvZiBlKWlmKHIuaWRlbnRpdHkubmFtZT09PWVlLkJyb3dzZXJNZW51fHxyLmlkZW50aXR5Lm5hbWU9PT1lZS5Ccm93c2VyU2F2ZU1lbnU/dD1yOmF3YWl0IGFlKHIuaWRlbnRpdHkpJiYobj0hMCksbilicmVhazshbiYmdCYmdC5jbG9zZSgpfSksMTAwLHtsZWFkaW5nOiExLHRyYWlsaW5nOiEwfSksb2E9YXN5bmMoKT0+e1EoKS5vbihcIndpbmRvdy1jbG9zZWRcIixyYSl9O2xldCBhYT17fTtjb25zdCBpYT1hc3luYyh7YWN0aW9uSWQ6ZSxwYXlsb2FkOnR9KT0+e2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGFhW2VdKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgYSBjb25maWd1cmVkIGZ1bmN0aW9uIGZvciB0aGUgYWN0aW9uICcke2V9J2ApO3JldHVybiBhYVtlXSh0KX0sbGE9KCk9PmBjdXN0b20tY29udGV4dC1tZW51LSR7THQoKS5pZGVudGl0eS51dWlkfS0ke0J9YCxzYT0oKT0+ZmluLkludGVyQXBwbGljYXRpb25CdXMuQ2hhbm5lbC5jb25uZWN0KGxhKCkpO3ZhciBjYTshZnVuY3Rpb24oZSl7ZS5MYWJlbD1cIm5vcm1hbFwiLGUuU2VwYXJhdG9yPVwic2VwYXJhdG9yXCIsZS5TdWJtZW51PVwic3VibWVudVwiLGUuQ2hlY2tib3g9XCJjaGVja2JveFwifShjYXx8KGNhPXt9KSk7Y29uc3QgdWE9e3R5cGU6Y2EuU2VwYXJhdG9yLGRhdGE6dm9pZCAwfTt2YXIgZGE7IWZ1bmN0aW9uKGUpe2UuU2F2ZT1cIlNhdmVcIixlLlNhdmVBcz1cIlNhdmVBc1wifShkYXx8KGRhPXt9KSk7dmFyIHBhOyFmdW5jdGlvbihlKXtlLkdsb2JhbE1lbnU9XCJnbG9iYWwtbWVudVwiLGUuQ29udGV4dE1lbnU9XCJjb250ZXh0LW1lbnVcIixlLlJlbmFtZVN1cGVydGFiPVwicmVuYW1lLXN1cGVydGFiXCIsZS5BZGRFZGl0Qm9va21hcms9XCJhZGQtZWRpdC1ib29rbWFya1wiLGUuRHJvcGRvd25NZW51PVwiZHJvcGRvd24tbWVudVwifShwYXx8KHBhPXt9KSk7ZnVuY3Rpb24gZmEoZSl7cmV0dXJuIG5ldyBQcm9taXNlKCgodCxuKT0+e2Uub25jb21wbGV0ZT1lLm9uc3VjY2Vzcz0oKT0+dChlLnJlc3VsdCksZS5vbmFib3J0PWUub25lcnJvcj0oKT0+bihlLmVycm9yKX0pKX1mdW5jdGlvbiBoYShlLHQpe2NvbnN0IG49aW5kZXhlZERCLm9wZW4oZSk7bi5vbnVwZ3JhZGVuZWVkZWQ9KCk9Pm4ucmVzdWx0LmNyZWF0ZU9iamVjdFN0b3JlKHQpO2NvbnN0IHI9ZmEobik7cmV0dXJuKGUsbik9PnIudGhlbigocj0+bihyLnRyYW5zYWN0aW9uKHQsZSkub2JqZWN0U3RvcmUodCkpKSl9bGV0IGdhO2Z1bmN0aW9uIHZhKCl7cmV0dXJuIGdhfHwoZ2E9aGEoXCJrZXl2YWwtc3RvcmVcIixcImtleXZhbFwiKSksZ2F9ZnVuY3Rpb24gQ2EoZSx0PXZhKCkpe3JldHVybiB0KFwicmVhZG9ubHlcIiwodD0+ZmEodC5nZXQoZSkpKSl9ZnVuY3Rpb24gbWEoZSx0LG49dmEoKSl7cmV0dXJuIG4oXCJyZWFkd3JpdGVcIiwobj0+KG4ucHV0KHQsZSksZmEobi50cmFuc2FjdGlvbikpKSl9ZnVuY3Rpb24gd2EoZSx0PXZhKCkpe3JldHVybiB0KFwicmVhZHdyaXRlXCIsKHQ9Pih0LmRlbGV0ZShlKSxmYSh0LnRyYW5zYWN0aW9uKSkpKX1mdW5jdGlvbiBiYShlLHQpe3JldHVybiBlLm9wZW5DdXJzb3IoKS5vbnN1Y2Nlc3M9ZnVuY3Rpb24oKXt0aGlzLnJlc3VsdCYmKHQodGhpcy5yZXN1bHQpLHRoaXMucmVzdWx0LmNvbnRpbnVlKCkpfSxmYShlLnRyYW5zYWN0aW9uKX1mdW5jdGlvbiB5YShlPXZhKCkpe3JldHVybiBlKFwicmVhZG9ubHlcIiwoZT0+e2lmKGUuZ2V0QWxsS2V5cylyZXR1cm4gZmEoZS5nZXRBbGxLZXlzKCkpO2NvbnN0IHQ9W107cmV0dXJuIGJhKGUsKGU9PnQucHVzaChlLmtleSkpKS50aGVuKCgoKT0+dCkpfSkpfWZ1bmN0aW9uIHhhKGU9dmEoKSl7cmV0dXJuIGUoXCJyZWFkb25seVwiLCh0PT57aWYodC5nZXRBbGwmJnQuZ2V0QWxsS2V5cylyZXR1cm4gUHJvbWlzZS5hbGwoW2ZhKHQuZ2V0QWxsS2V5cygpKSxmYSh0LmdldEFsbCgpKV0pLnRoZW4oKChbZSx0XSk9PmUubWFwKCgoZSxuKT0+W2UsdFtuXV0pKSkpO2NvbnN0IG49W107cmV0dXJuIGUoXCJyZWFkb25seVwiLChlPT5iYShlLChlPT5uLnB1c2goW2Uua2V5LGUudmFsdWVdKSkpLnRoZW4oKCgpPT5uKSkpKX0pKX1jb25zdCBrYT1hc3luYyhlLHQsbik9Pntjb25zdCByPXB0KFBlLkhhc01vdmVkU3RvcmUpLG89cj9KU09OLnBhcnNlKHIpOnt9O2lmKG8mJm9bbl0pcmV0dXJuO29bbl09ITAsZHQoUGUuSGFzTW92ZWRTdG9yZSxKU09OLnN0cmluZ2lmeShvKSk7Y29uc3QgYT1hd2FpdCB4YShlKTthd2FpdCBmdW5jdGlvbihlLHQ9dmEoKSl7cmV0dXJuIHQoXCJyZWFkd3JpdGVcIiwodD0+KGUuZm9yRWFjaCgoZT0+dC5wdXQoZVsxXSxlWzBdKSkpLGZhKHQudHJhbnNhY3Rpb24pKSkpfShhLHQpfSxTYT0oZSx0KT0+aGEoZStcIi1cIitmaW4ubWUudXVpZCx0KSxPYT0oZSx0KT0+e2NvbnN0IG49U2EoZSx0KSxyPWhhKGUsdCk7cmV0dXJuIGthKHIsbixlKSxufSxNYT0oZSx0PVwiXCIpPT5lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModC50b0xvd2VyQ2FzZSgpKSxMYT1QJiZMJiZPYShcIm9wZW5maW4taG9tZS1wYWdlc1wiLFwicGFnZXNcIik7YXN5bmMgZnVuY3Rpb24gX2EoZSl7aWYoIUxhKXRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBnZXQgcGFnZSAtIEluZGV4REIgbm90IHN1cHBvcnRlZFwiKTtjb25zdCB0PWF3YWl0IENhKGUsTGEpO2lmKHQpcmV0dXJuIHQucGFnZUlkPWUudG9TdHJpbmcoKSx0LnRpdGxlPXQudGl0bGV8fHQucGFnZUlkLHR9YXN5bmMgZnVuY3Rpb24gUGEoZSl7aWYoIUxhKXRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBnZXQgcGFnZSBsaXN0IC0gSW5kZXhEQiBub3Qgc3VwcG9ydGVkXCIpO2NvbnN0IHQ9YXdhaXQgeWEoTGEpLG49KGF3YWl0IFByb21pc2UuYWxsKHQubWFwKChlPT5fYShlLnRvU3RyaW5nKCkpKSkpKS5maWx0ZXIoKGU9PiEhZSkpO3JldHVybiBlP24uZmlsdGVyKCh0PT5NYSh0LnRpdGxlLGUpKSk6bn1hc3luYyBmdW5jdGlvbiBFYSh7cGFnZTplfSl7aWYoIUxhKXRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBjcmVhdGUgcGFnZSAtIEluZGV4REIgbm90IHN1cHBvcnRlZFwiKTthd2FpdCBtYShlLnBhZ2VJZCxlLExhKX1hc3luYyBmdW5jdGlvbiBqYShlKXtpZighTGEpdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGRlbGV0ZSBwYWdlIC0gSW5kZXhEQiBub3Qgc3VwcG9ydGVkXCIpO2F3YWl0IHdhKGUsTGEpfWFzeW5jIGZ1bmN0aW9uIFJhKHtwYWdlSWQ6ZSxwYWdlOnR9KXtpZighTGEpdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIHVwZGF0ZSBwYWdlIC0gSW5kZXhEQiBub3Qgc3VwcG9ydGVkXCIpO2lmKHZvaWQgMD09PWF3YWl0IF9hKGUpKXRocm93IG5ldyBFcnJvcihcInBhZ2Ugbm90IGZvdW5kXCIpO2F3YWl0IEVhKHtwYWdlOnR9KSxlIT09dC5wYWdlSWQmJmF3YWl0IGphKGUpfWNvbnN0IElhPVAmJkwmJlNhKFwib3BlbmZpbi1lbnRlcnByaXNlLXRhYi1oaXN0b3J5XCIsXCJyZW1vdmVkLXRhYi1zdGFja1wiKSxWYT1hc3luYyBlPT57bWEoRGF0ZS5ub3coKSxlLElhKX0sSGE9UCYmTCYmU2EoXCJvcGVuZmluLWVudGVycHJpc2Utc2l0ZS1oaXN0b3J5XCIsXCJ2aXNpdGVkLXNpdGVzXCIpLEFhPWFzeW5jIGU9PntpZihcIndlYnNpdGVcIj09PWUudHlwZSl7bGV0IHQ9YXdhaXQgQ2EoZS51cmwsSGEpO3Q/KHQuaWNvbj1lLmljb24sdC50aXRsZT1lLnRpdGxlLHQudHlwZT1lLnR5cGUsdC52aXNpdENvdW50PSh0LnZpc2l0Q291bnR8fDApKzEpOnQ9e3VybDplLnVybCxpY29uOmUuaWNvbix0aXRsZTplLnRpdGxlLHR5cGU6ZS50eXBlLHZpc2l0Q291bnQ6MX0sdC5hY2Nlc3NUaW1lPURhdGUubm93KCksbWEodC51cmwsdCxIYSl9fSxUYT1hc3luYygpPT57Y29uc3QgZT1hd2FpdCB4YShIYSk7aWYoZS5sZW5ndGg+MCl7ZS5zb3J0KCgoZSx0KT0+dFsxXS52aXNpdENvdW50LWVbMV0udmlzaXRDb3VudCkpO3JldHVybihlLmxlbmd0aD41P2Uuc2xpY2UoMCw1KTplKS5tYXAoKGU9PmVbMV0pKX1yZXR1cm5bXX0sRGE9YXN5bmMoKT0+KGF3YWl0IGZpbi5TeXN0ZW0uZ2V0SG9zdFNwZWNzKCkpLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcIndpbmRvd3NcIiksQmE9KCk9Pih7dHlwZTpjYS5MYWJlbCxsYWJlbDpCbihcImNvbnRleHRNZW51LmNsb3NlV2luZG93XCIpLGRhdGE6e3R5cGU6aC5DbG9zZVdpbmRvd319KSxaYT1lPT4oe3R5cGU6Y2EuTGFiZWwsbGFiZWw6Qm4oZT9cImNvbnRleHRNZW51LnF1aXRFbnRlcnByaXNlQnJvd3NlclwiOlwiY29udGV4dE1lbnUucXVpdFBsYXRmb3JtXCIpLGRhdGE6e3R5cGU6aC5RdWl0fX0pLCRhPSgpPT4oe3R5cGU6Y2EuTGFiZWwsbGFiZWw6Qm4oXCJjb250ZXh0TWVudS5uZXdXaW5kb3dcIiksZGF0YTp7dHlwZTpoLk5ld1dpbmRvd319KSxOYT1lPT4oe3R5cGU6Y2EuTGFiZWwsbGFiZWw6Qm4oZT9cImVudGVycHJpc2VDb250ZXh0TWVudS5zYXZlU3VwZXJ0YWJcIjpcImNvbnRleHRNZW51LnNhdmVQYWdlXCIpLGRhdGE6e3R5cGU6aC5TYXZlUGFnZX19KSxGYT1lPT4oe3R5cGU6Y2EuTGFiZWwsbGFiZWw6Qm4oZT9cImVudGVycHJpc2VDb250ZXh0TWVudS5zYXZlU3VwZXJ0YWJBc1wiOlwiY29udGV4dE1lbnUuc2F2ZVBhZ2VBc1wiKSxkYXRhOnt0eXBlOmguU2F2ZVBhZ2VBc319KSxXYT0oZSx0KT0+KHt0eXBlOmNhLkxhYmVsLGxhYmVsOkJuKHQ/XCJlbnRlcnByaXNlQ29udGV4dE1lbnUubmV3VGFiXCI6XCJjb250ZXh0TWVudS5uZXdQYWdlXCIpLGRhdGE6e3R5cGU6aC5OZXdQYWdlfSxlbmFibGVkOmV9KSxVYT0oKT0+KHtsYWJlbDpCbihcImNvbnRleHRNZW51LnN3aXRjaFdvcmtzcGFjZVwiKX0pLHphPSgpPT4oe2xhYmVsOkJuKFwiY29udGV4dE1lbnUuZGVsZXRlV29ya3NwYWNlXCIpfSksR2E9KCk9Pih7bGFiZWw6Qm4oXCJjb250ZXh0TWVudS5hcHBlYXJhbmNlXCIpfSksS2E9KGUsdCxuKT0+dC5tYXAoKHQ9Pntjb25zdCByPXQud29ya3NwYWNlSWQ9PT1lLndvcmtzcGFjZUlkO3JldHVybntsYWJlbDp0LnRpdGxlLHR5cGU6Y2EuQ2hlY2tib3gsZW5hYmxlZDohcixjaGVja2VkOnIsZGF0YTp7dHlwZTpuLHdvcmtzcGFjZUlkOnQud29ya3NwYWNlSWR9fX0pKSxxYT1hc3luYygpPT57Y29uc3QgZT1hd2FpdCBMdCgpLlRoZW1lLmdldFNlbGVjdGVkU2NoZW1lKCk7cmV0dXJuW3tsYWJlbDpCbihcInRoZW1lLmxpZ2h0XCIpLHR5cGU6Y2EuQ2hlY2tib3gsY2hlY2tlZDplPT09Zy5MaWdodCxkYXRhOnt0eXBlOmguQXBwZWFyYW5jZSxzY2hlbWU6Zy5MaWdodH19LHtsYWJlbDpCbihcInRoZW1lLmRhcmtcIiksdHlwZTpjYS5DaGVja2JveCxjaGVja2VkOmU9PT1nLkRhcmssZGF0YTp7dHlwZTpoLkFwcGVhcmFuY2Usc2NoZW1lOmcuRGFya319LHtsYWJlbDpCbihcInRoZW1lLnN5c3RlbVwiKSx0eXBlOmNhLkNoZWNrYm94LGNoZWNrZWQ6ZT09PWcuU3lzdGVtLGRhdGE6e3R5cGU6aC5BcHBlYXJhbmNlLHNjaGVtZTpnLlN5c3RlbX19XX0sWWE9YXN5bmMoZSx0PVtdKT0+e2NvbnN0IG49YXdhaXQgY2UoKSx7bmV3UGFnZVVybDpyfT1hd2FpdCBCcihlKSxvPWF3YWl0KGFzeW5jIGU9Pntjb25zdCB0PXRlKGUpLHt3b3Jrc3BhY2VQbGF0Zm9ybTpufT1hd2FpdCB0LmdldE9wdGlvbnMoKTtyZXR1cm4gbj8uZGlzYWJsZU11bHRpcGxlUGFnZXN9KShlKSxhPWF3YWl0KGFzeW5jIGU9Pntjb25zdCB0PXRlKGUpLHt3b3Jrc3BhY2VQbGF0Zm9ybTpufT1hd2FpdCB0LmdldE9wdGlvbnMoKTtyZXR1cm4gbj8uaXNMb2NrZWR9KShlKSxpPWF3YWl0IGZlKGUpLGw9W10scz10Lmxlbmd0aD4wO3ImJihsLnB1c2goJGEoKSksb3x8bC5wdXNoKFdhKCFhLGkpKSksbC5wdXNoKHVhKTtjb25zdCBjPUx0KCksdT1hd2FpdCBjLmdldEN1cnJlbnRXb3Jrc3BhY2UoKSxkPWF3YWl0IGMuU3RvcmFnZS5nZXRXb3Jrc3BhY2VzKCkscD1kLmZpbmQoKGU9PmUud29ya3NwYWNlSWQ9PT11LndvcmtzcGFjZUlkKSk7bC5wdXNoKHt0eXBlOmNhLkxhYmVsLGxhYmVsOkJuKFwiY29udGV4dE1lbnUucmVzdG9yZVwiKSxkYXRhOnt0eXBlOmguUmVzdG9yZUNoYW5nZXN9LGVuYWJsZWQ6ISFwfSksbC5wdXNoKHt0eXBlOmNhLkxhYmVsLGxhYmVsOkJuKFwiY29udGV4dE1lbnUuc2F2ZVdvcmtzcGFjZVwiKSxkYXRhOnt0eXBlOmguU2F2ZVdvcmtzcGFjZX0sZW5hYmxlZDohIXB9KSxsLnB1c2goe3R5cGU6Y2EuTGFiZWwsbGFiZWw6Qm4oXCJjb250ZXh0TWVudS5zYXZlV29ya3NwYWNlQXNcIiksZGF0YTp7dHlwZTpoLlNhdmVXb3Jrc3BhY2VBc319KSxsLnB1c2goe3R5cGU6Y2EuTGFiZWwsbGFiZWw6Qm4oXCJjb250ZXh0TWVudS5yZW5hbWVXb3Jrc3BhY2VcIiksZGF0YTp7dHlwZTpoLlJlbmFtZVdvcmtzcGFjZX0sZW5hYmxlZDohIXB9KSxkLnNvbWUoKGU9PmUud29ya3NwYWNlSWQhPT11LndvcmtzcGFjZUlkKSk/bC5wdXNoKHtsYWJlbDpVYSgpLmxhYmVsLHN1Ym1lbnU6S2EodSxkLGguU3dpdGNoV29ya3NwYWNlKSxkYXRhOnZvaWQgMH0se2xhYmVsOnphKCkubGFiZWwsc3VibWVudTpLYSh1LGQsaC5EZWxldGVXb3Jrc3BhY2UpLGRhdGE6dm9pZCAwfSk6bC5wdXNoKHtsYWJlbDpVYSgpLmxhYmVsLGVuYWJsZWQ6ITEsZGF0YTp2b2lkIDB9LHtsYWJlbDp6YSgpLmxhYmVsLGVuYWJsZWQ6ITEsZGF0YTp2b2lkIDB9KSxsLnB1c2goe2xhYmVsOkJuKFwiY29udGV4dE1lbnUuZG93bmxvYWRzXCIpLGRhdGE6e3R5cGU6aC5Eb3dubG9hZHN9fSk7Y29uc3QgZj1hd2FpdCBjLlRoZW1lLmdldFRoZW1lcygpO3JldHVybihmWzBdJiZcInBhbGV0dGVzXCJpbiBmWzBdfHwhZlswXXx8MD09PWYubGVuZ3RoKSYmbC5wdXNoKHtsYWJlbDpHYSgpLmxhYmVsLHN1Ym1lbnU6YXdhaXQgcWEoKSxkYXRhOnZvaWQgMH0pLGwucHVzaCh1YSxOYShpKSxGYShpKSxhd2FpdChhc3luYyBlPT57Y29uc3QgdD1hd2FpdCBEYSgpO3JldHVybntsYWJlbDpCbihcImNvbnRleHRNZW51LnByaW50XCIpLHN1Ym1lbnU6W3t0eXBlOmNhLkxhYmVsLGxhYmVsOkJuKFwiY29udGV4dE1lbnUuc3VibWVudS5wcmludFwiKSxkYXRhOnt0eXBlOmguUHJpbnR9LGVuYWJsZWQ6ZX0se3R5cGU6Y2EuTGFiZWwsbGFiZWw6Qm4oXCJjb250ZXh0TWVudS5zdWJtZW51LnByaW50QWxsXCIpLGRhdGE6e3R5cGU6aC5QcmludEFsbH19LC4uLnQ/W3VhLHt0eXBlOmNhLkxhYmVsLGxhYmVsOkJuKFwiY29udGV4dE1lbnUucHJpbnRTY3JlZW5cIiksZGF0YTp7dHlwZTpoLlByaW50U2NyZWVufX1dOltdXSxkYXRhOnZvaWQgMH19KShzKSksbj9bLi4ubCxCYSgpLHVhLHt0eXBlOmNhLkxhYmVsLGxhYmVsOkJuKFwiY29udGV4dE1lbnUub3BlblN0b3JlZnJvbnRcIiksZGF0YTp7dHlwZTpoLk9wZW5TdG9yZWZyb250fX0sdWEsWmEoKV06Wy4uLmwsdWEsQmEoKSx1YSxaYSgpXX0sSmE9YXN5bmMoZSx0KT0+e2NvbnN0IG49dC5zZWxlY3RlZFZpZXdzWzBdLHI9ZmluLlZpZXcud3JhcFN5bmMobiksbz1hd2FpdChhc3luYyBlPT57Y29uc3R7bmV3VGFiVXJsOnR9PWF3YWl0IEJyKGUpO2lmKCF0KXRocm93IG5ldyBFcnJvcihcIlRyeWluZyB0byBjcmVhdGUgYSBuZXcgcGFnZSB3aXRob3V0IGEgbmV3VGFiVXJsIHNldFwiKTtyZXR1cm57dXJsOnQsdGFyZ2V0OmUsdGl0bGU6XCJOZXcgVGFiXCJ9fSkoZSk7YXdhaXQgTHQoKS5jcmVhdGVWaWV3KG8sZSxyLmlkZW50aXR5KX0sWGE9YXN5bmMoZSx0KT0+e2NvbnN0IG49YXdhaXQoZT0+UHJvbWlzZS5hbGwoZS5tYXAoKGFzeW5jIGU9PmZpbi5WaWV3LndyYXBTeW5jKGUpLmdldEluZm8oKSkpKSkodCkse25ld1BhZ2VVcmw6cixuZXdUYWJVcmw6b309YXdhaXQgQnIoZSk7bi5mb3JFYWNoKChhc3luYyBlPT57ZS51cmwhPT1yJiZlLnVybCE9PW8mJmF3YWl0IGZpbi5TeXN0ZW0ub3BlblVybFdpdGhCcm93c2VyKGUudXJsKX0pKX0sUWE9KGUsdCk9Pnt0LmZvckVhY2goKGFzeW5jIHQ9Pntjb25zdCBuPWZpbi5WaWV3LndyYXBTeW5jKHQpO2F3YWl0KGFzeW5jKGUsdCk9Pntjb25zdHt1cmw6bn09YXdhaXQgdC5nZXRJbmZvKCkscj17Li4uYXdhaXQgdC5nZXRPcHRpb25zKCksdXJsOm4sdGFyZ2V0OmUsbmFtZTp2b2lkIDB9O2F3YWl0IEx0KCkuY3JlYXRlVmlldyhyLGUsdC5pZGVudGl0eSl9KShlLG4pfSkpfSxlaT1hc3luYyhlLHQsbik9Pntjb25zdCByPXtuZXdDaGFubmVsSWQ6dCxzZWxlY3RlZFZpZXdzOm59Oyhhd2FpdCB0dChlKSkuZGlzcGF0Y2goaXQuQWRkVG9DaGFubmVsLHIpfSx0aT1hc3luYyhlLHQpPT57KGF3YWl0IHR0KGUpKS5kaXNwYXRjaChpdC5SZW1vdmVGcm9tQ2hhbm5lbCx0KX0sbmk9YXN5bmMoZSx0KT0+e2lmKCFlKXJldHVybjtjb25zdCBuPXQuaWRlbnRpdHkscj1maW4uV2luZG93LndyYXBTeW5jKG4pO3N3aXRjaCh5ZSh7dHlwZTpcIlZpZXcgVGFiIE1lbnVcIixhY3Rpb246XCJTZWxlY3QgTWVudSBJdGVtXCIsdmFsdWU6ZS50eXBlLHNraXBWYWx1ZUhhc2hpbmc6ITB9KSxlLnR5cGUpe2Nhc2Ugdy5CYWNrOmF3YWl0KGFzeW5jIGU9Pntjb25zdCB0PWUubWFwKChlPT5maW4uVmlldy53cmFwU3luYyhlKS5uYXZpZ2F0ZUJhY2soKSkpO2F3YWl0IFByb21pc2UuYWxsKHQpfSkodC5zZWxlY3RlZFZpZXdzKTticmVhaztjYXNlIHcuRm9yd2FyZDphd2FpdChhc3luYyBlPT57Y29uc3QgdD1lLm1hcCgoZT0+ZmluLlZpZXcud3JhcFN5bmMoZSkubmF2aWdhdGVGb3J3YXJkKCkpKTthd2FpdCBQcm9taXNlLmFsbCh0KX0pKHQuc2VsZWN0ZWRWaWV3cyk7YnJlYWs7Y2FzZSB3LlByaW50OmF3YWl0ICRvKHQuc2VsZWN0ZWRWaWV3cyk7YnJlYWs7Y2FzZSB3LlByaW50QWxsOmF3YWl0IHIucHJpbnQoe2NvbnRlbnQ6XCJ2aWV3c1wiLGluY2x1ZGVTZWxmOiExfSk7YnJlYWs7Y2FzZSB3LlByaW50U2NyZWVuOmF3YWl0IHIucHJpbnQoe2NvbnRlbnQ6XCJzY3JlZW5zaG90XCJ9KTticmVhaztjYXNlIHcuQ2xvc2VWaWV3czphd2FpdChhc3luYyhlLHQpPT57Y29uc3Qgbj0oYXdhaXQgTHQoKS5Ccm93c2VyLndyYXBTeW5jKGUpLmdldFBhZ2VzKCkpLmZpbmQoKGU9PmUuaXNBY3RpdmUpKSxyPWF3YWl0IGZpbi5XaW5kb3cud3JhcFN5bmMoZSkuZ2V0Q3VycmVudFZpZXdzKCk7aWYodC5sZW5ndGg9PT1yLmxlbmd0aC0obi5wYW5lbHM/P1tdKS5sZW5ndGgpcmV0dXJuIHZvaWQoYXdhaXQgdHQoZSkpLmRpc3BhdGNoKGl0LkNsb3NlUGFnZSx7cGFnZUlkOm4/LnBhZ2VJZH0pO2NvbnN0IG89ZmluLlBsYXRmb3JtLmdldEN1cnJlbnRTeW5jKCk7dC5mb3JFYWNoKChhc3luYyBlPT57YXdhaXQgby5jbG9zZVZpZXcoZSl9KSl9KShuLHQuc2VsZWN0ZWRWaWV3cyk7YnJlYWs7Y2FzZSB3Lk9wZW5XaXRoRGVmYXVsdEJyb3dzZXI6YXdhaXQgWGEobix0LnNlbGVjdGVkVmlld3MpO2JyZWFrO2Nhc2Ugdy5SZWxvYWRWaWV3czp0LnNlbGVjdGVkVmlld3MuZm9yRWFjaCgoYXN5bmMgZT0+e2NvbnN0IHQ9ZmluLlZpZXcud3JhcFN5bmMoZSk7YXdhaXQgdC5yZWxvYWQoKX0pKTticmVhaztjYXNlIHcuTmV3Vmlldzphd2FpdCBKYShuLHQpO2JyZWFrO2Nhc2Ugdy5EdXBsaWNhdGVWaWV3czpRYShuLHQuc2VsZWN0ZWRWaWV3cyk7YnJlYWs7Y2FzZSB3LkFkZFRvQ2hhbm5lbDplaShuLGUub3B0aW9uLHQuc2VsZWN0ZWRWaWV3cyk7YnJlYWs7Y2FzZSB3LlJlbW92ZUZyb21DaGFubmVsOnRpKG4sdC5zZWxlY3RlZFZpZXdzKTticmVhaztjYXNlIHcuQ3VzdG9tOmlmKGUuYWN0aW9uKXtjb25zdCByPXtjYWxsZXJUeXBlOmsuVmlld1RhYkNvbnRleHRNZW51LHdpbmRvd0lkZW50aXR5Om4sc2VsZWN0ZWRWaWV3czp0LnNlbGVjdGVkVmlld3MsY3VzdG9tRGF0YTplLmFjdGlvbi5jdXN0b21EYXRhfTtMdCgpLl9pbnZva2VDdXN0b21BY3Rpb24oZS5hY3Rpb24uaWQscil9fX07bGV0IHJpPVwiUGxhdGZvcm1cIjtjb25zdCBvaT1hc3luYygpPT5yaTtjb25zdCBhaT1hc3luYyhlLHQpPT57aWYoIWUpcmV0dXJuO2NvbnN0IG49dC5pZGVudGl0eSxyPWF3YWl0IHR0KG4pLG89THQoKS5Ccm93c2VyLndyYXBTeW5jKG4pLGE9ZmluLldpbmRvdy53cmFwU3luYyhuKTtpZih5ZSh7dHlwZTpcIkdsb2JhbCBNZW51XCIsYWN0aW9uOlwiU2VsZWN0IE1lbnUgSXRlbVwiLHZhbHVlOmUudHlwZSxza2lwVmFsdWVIYXNoaW5nOiEwLGRhdGE6e2FjdGlvbjplLmFjdGlvbj8uaWR9fSksYXdhaXQgZmUobikpe2NvbnN0IG49YXdhaXQoYXN5bmMoZSx0KT0+e2NvbnN0IG49dC5pZGVudGl0eSxyPUx0KCkuQnJvd3Nlci53cmFwU3luYyhuKSxvPShhd2FpdCByLmdldFBhZ2VzKCkpLmZpbmQoKGU9PmUuaXNBY3RpdmUpKSxhPVVlKHsuLi5uLGxheW91dE5hbWU6by5sYXlvdXRDb250YWluZXJLZXl9KSxpPXQuc2VsZWN0ZWRWaWV3cztzd2l0Y2goZT8udHlwZSl7Y2FzZSBDLkxvY2s6YXdhaXQgci51cGRhdGVQYWdlKHtwYWdlSWQ6by5wYWdlSWQscGFnZTp7aXNMb2NrZWQ6IW8uaXNMb2NrZWR9fSk7YnJlYWs7Y2FzZSBDLkFkZFRvQ2hhbmVsOmUub3B0aW9uP2F3YWl0IGVpKG4sZS5vcHRpb24saSk6bnVsbD09PWUub3B0aW9uJiZhd2FpdCB0aShuLGkpO2JyZWFrO2Nhc2UgaC5OZXdXaW5kb3c6e2NvbnN0IGU9YXdhaXQgJHIobik7YXdhaXQgTHQoKS5Ccm93c2VyLmNyZWF0ZVdpbmRvdyh7d29ya3NwYWNlUGxhdGZvcm06e3BhZ2VzOltlXSx3aW5kb3dUeXBlOlwiZW50ZXJwcmlzZVwifX0pO2JyZWFrfWNhc2UgQy5QaW46e2NvbnN0e2Fsd2F5c09uVG9wOmV9PWF3YWl0IHIub3BlbmZpbldpbmRvdy5nZXRPcHRpb25zKCk7YXdhaXQgci5vcGVuZmluV2luZG93LnVwZGF0ZU9wdGlvbnMoe2Fsd2F5c09uVG9wOiFlfSk7YnJlYWt9Y2FzZSBDLlNob3dIaWRlVGFiczphd2FpdCBhLmlzU2hvd2luZ1RhYnMoKT9hd2FpdCBhLmhpZGUoKTphd2FpdCBhLnNob3coKTticmVhaztkZWZhdWx0OnJldHVybiExfXJldHVybiEwfSkoZSx0KTtpZihuKXJldHVybn1zd2l0Y2goZS50eXBlKXtjYXNlIGguTmV3V2luZG93Ontjb25zdHtuZXdQYWdlVXJsOmV9PWF3YWl0IEJyKG4pO2lmKCFlKXRocm93IG5ldyBFcnJvcihcIlRyeWluZyB0byBjcmVhdGUgYSBuZXcgZW1wdHkgd2luZG93IHdpdGhvdXQgYSBuZXdQYWdlVXJsIHNldFwiKTtMdCgpLmNyZWF0ZVZpZXcoe3RhcmdldDp2b2lkIDAsdXJsOmV9KTticmVha31jYXNlIGguTmV3UGFnZTphd2FpdCBBbyhuKTticmVhaztjYXNlIGguQ2xvc2VXaW5kb3c6ci5kaXNwYXRjaChpdC5DbG9zZUJyb3dzZXJXaW5kb3cpO2JyZWFrO2Nhc2UgaC5TYXZlV29ya3NwYWNlOmF3YWl0IFZvKG4pO2JyZWFrO2Nhc2UgaC5TYXZlUGFnZTphd2FpdCBUbyhuKTticmVhaztjYXNlIGguU2F2ZVBhZ2VBczphd2FpdCBEbyhuKTticmVhaztjYXNlIGguU2F2ZVdvcmtzcGFjZUFzOmF3YWl0IEhvKG4pO2JyZWFrO2Nhc2UgaC5SZW5hbWVXb3Jrc3BhY2U6by5fb3BlblNhdmVNb2RhbCh7bWVudVR5cGU6Uy5SRU5BTUVfV09SS1NQQUNFfSk7YnJlYWs7Y2FzZSBoLlN3aXRjaFdvcmtzcGFjZTphd2FpdChhc3luYyhlLHQpPT57Y29uc3Qgbj1MdCgpLHI9KGF3YWl0IG4uU3RvcmFnZS5nZXRXb3Jrc3BhY2VzKCkpLmZpbmQoKGU9PmUud29ya3NwYWNlSWQ9PT10LndvcmtzcGFjZUlkKSk7bi5hcHBseVdvcmtzcGFjZShyLHtza2lwUHJvbXB0OiExLHByb21wdENvbnRhaW5lcldpbmRvd0lkZW50aXR5OmV9KX0pKG4sZSk7YnJlYWs7Y2FzZSBoLkRlbGV0ZVdvcmtzcGFjZTphd2FpdChhc3luYyhlLHQpPT57Y29uc3Qgbj1MdCgpLHI9KGF3YWl0IG4uU3RvcmFnZS5nZXRXb3Jrc3BhY2VzKCkpLmZpbmQoKGU9PmUud29ya3NwYWNlSWQ9PT10LndvcmtzcGFjZUlkKSk7ciYmYXdhaXQgeW8oZSxyLnRpdGxlKSYmKGF3YWl0IG4uU3RvcmFnZS5kZWxldGVXb3Jrc3BhY2UodC53b3Jrc3BhY2VJZCksRHIoQm4oXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZURlbGV0ZWRcIiksZSkpfSkobixlKTticmVhaztjYXNlIGguRG93bmxvYWRzOmF3YWl0IFpvKG4pO2JyZWFrO2Nhc2UgaC5BcHBlYXJhbmNlOmF3YWl0IEx0KCkuVGhlbWUuc2V0U2VsZWN0ZWRTY2hlbWUoZS5zY2hlbWUpO2JyZWFrO2Nhc2UgaC5RdWl0Ontjb25zdCBlPW9pKCk7YXdhaXQgeG8obixhd2FpdCBlKSYmZmluLlBsYXRmb3JtLmdldEN1cnJlbnRTeW5jKCkucXVpdCgpfWJyZWFrO2Nhc2UgaC5PcGVuU3RvcmVmcm9udDooYXN5bmMoKT0+e2F3YWl0IGNlKCkmJm9lKHJlKX0pKCk7YnJlYWs7Y2FzZSBoLlJlc3RvcmVDaGFuZ2VzOntjb25zdCBlPWF3YWl0IGFzeW5jIGZ1bmN0aW9uKCl7Y29uc3QgZT1MdCgpLHQ9YXdhaXQgZS5nZXRDdXJyZW50V29ya3NwYWNlKCk7cmV0dXJuKGF3YWl0IGUuU3RvcmFnZS5nZXRXb3Jrc3BhY2VzKCkpLmZpbmQoKGU9PmUud29ya3NwYWNlSWQ9PT10LndvcmtzcGFjZUlkKSl9KCk7YXdhaXQga28obikmJmF3YWl0IE9vKHtvcHRpb25zOntza2lwUHJvbXB0OiEwfSwuLi5lfSl9YnJlYWs7Y2FzZSBoLlByaW50OmF3YWl0ICRvKHQuc2VsZWN0ZWRWaWV3cyk7YnJlYWs7Y2FzZSBoLlByaW50QWxsOmF3YWl0IGEucHJpbnQoe2NvbnRlbnQ6XCJ2aWV3c1wiLGluY2x1ZGVTZWxmOiExfSk7YnJlYWs7Y2FzZSBoLlByaW50U2NyZWVuOmF3YWl0IGEucHJpbnQoe2NvbnRlbnQ6XCJzY3JlZW5zaG90XCJ9KTticmVhaztjYXNlIGguQ3VzdG9tOmlmKGUuYWN0aW9uKXtjb25zdCB0PXtjYWxsZXJUeXBlOmsuR2xvYmFsQ29udGV4dE1lbnUsd2luZG93SWRlbnRpdHk6bixjdXN0b21EYXRhOmUuYWN0aW9uLmN1c3RvbURhdGF9O0x0KCkuX2ludm9rZUN1c3RvbUFjdGlvbihlLmFjdGlvbi5pZCx0KX1lbHNlIGNvbnNvbGUud2FybihgRW5jb3VudGVyZWQgYSBDdXN0b20gY29udGV4dCBtZW51IG9wdGlvbiB3aXRoIGFuIFwiYWN0aW9uXCIgcHJvcGVydHkgd2l0aCB2YWx1ZSBcIiR7ZS5hY3Rpb259XCJgKX19LGlpPWFzeW5jKGUsdCxuKT0+e2NvbnN0IHI9YXdhaXQgdHQodC5pZGVudGl0eSksbz1MdCgpLGE9YXdhaXQgZmUoKTtzd2l0Y2goZSYmeWUoe3R5cGU6XCJQYWdlIFRhYiBNZW51XCIsYWN0aW9uOlwiU2VsZWN0IE1lbnUgSXRlbVwiLHZhbHVlOmUudHlwZSxza2lwVmFsdWVIYXNoaW5nOiEwfSksZT8udHlwZSl7Y2FzZSB2LlNhdmU6YXdhaXQgVG8odC5pZGVudGl0eSx0LnBhZ2VJZCk7YnJlYWs7Y2FzZSB2LlNhdmVBczphd2FpdCBEbyh0LmlkZW50aXR5LHQucGFnZUlkKTticmVhaztjYXNlIHYuTmV3UGFnZTphd2FpdCBBbyh0LmlkZW50aXR5KTticmVhaztjYXNlIHYuRGVsZXRlUGFnZTphd2FpdChhc3luYyhlLHQpPT57Y29uc3Qgbj1MdCgpLHI9bi5Ccm93c2VyLndyYXBTeW5jKGUpLG89KGF3YWl0IG4uU3RvcmFnZS5nZXRQYWdlcygpKS5maW5kKChlPT5lLnBhZ2VJZD09PXQpKTtvJiZhd2FpdCBTbyhlLG8udGl0bGUpJiYoYXdhaXQgbi5TdG9yYWdlLmRlbGV0ZVBhZ2Uoby5wYWdlSWQpLGF3YWl0IHIucmVtb3ZlUGFnZSh0KSxEcihCbihcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiRGVsZXRlZFwiKSxlLEJuKFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJIYXNCZWVuRGVsZXRlZFwiLHt0aXRsZTpvLnRpdGxlfSkpKX0pKHQuaWRlbnRpdHksdC5wYWdlSWQpO2JyZWFrO2Nhc2Ugdi5SZW5hbWU6aWYoYXdhaXQgZmUodC5pZGVudGl0eSkpe2NvbnN0IGU9THQoKS5Ccm93c2VyLndyYXBTeW5jKHQuaWRlbnRpdHkpO2F3YWl0IGUuc2V0QWN0aXZlUGFnZSh0LnBhZ2VJZCk7Y29uc3Qgcj1hd2FpdCBzYSgpO2F3YWl0IHIuZGlzcGF0Y2goXCJvcGVuXCIse3BhcmVudElkZW50aXR5OnQuaWRlbnRpdHksdHlwZTpwYS5SZW5hbWVTdXBlcnRhYixhbmNob3JCZWhhdmlvcjpzaS5DZW50ZXIseDpuLmxlZnQrbi53aWR0aC8yLTE2NCx5Om4uYm90dG9tLTgscGF5bG9hZDp7cGFnZUlkOnQucGFnZUlkfX0pfWVsc2UgYXdhaXQgby5Ccm93c2VyLndyYXBTeW5jKHQuaWRlbnRpdHkpLl9vcGVuU2F2ZU1vZGFsKHttZW51VHlwZTpTLlJFTkFNRV9QQUdFLGlkOnQucGFnZUlkfSk7YnJlYWs7Y2FzZSB2LkR1cGxpY2F0ZTpyLmRpc3BhdGNoKGl0LkR1cGxpY2F0ZVBhZ2UsdC5wYWdlSWQpO2JyZWFrO2Nhc2Ugdi5DbG9zZTphP2F3YWl0KGFzeW5jKGUsdCk9Pntjb25zdCBuPUx0KCkuQnJvd3Nlci53cmFwU3luYyhlKSxyPWF3YWl0IG4uZ2V0UGFnZXMoKTtmb3IoY29uc3QgbyBvZiByKWlmKG8ucGFnZUlkPT09dCl7YXdhaXQgbi5yZW1vdmVQYWdlKG8ucGFnZUlkKSxhd2FpdCBuLl90cmFja1JlbW92ZWRUYWIoe2lkZW50aXR5OmUscGFnZTpvfSk7YnJlYWt9fSkodC5pZGVudGl0eSx0LnBhZ2VJZCk6ci5kaXNwYXRjaChpdC5DbG9zZVBhZ2Use3BhZ2VJZDp0LnBhZ2VJZH0pO2JyZWFrO2Nhc2Ugdi5DdXN0b206aWYoZS5hY3Rpb24pe2NvbnN0IG49e2NhbGxlclR5cGU6ay5QYWdlVGFiQ29udGV4dE1lbnUsd2luZG93SWRlbnRpdHk6dC5pZGVudGl0eSxwYWdlSWQ6dC5wYWdlSWQsY3VzdG9tRGF0YTplLmFjdGlvbi5jdXN0b21EYXRhfTtMdCgpLl9pbnZva2VDdXN0b21BY3Rpb24oZS5hY3Rpb24uaWQsbil9ZWxzZSBjb25zb2xlLndhcm4oYEVuY291bnRlcmVkIGEgQ3VzdG9tIGNvbnRleHQgbWVudSBvcHRpb24gd2l0aCBhbiBcImFjdGlvblwiIHByb3BlcnR5IHdpdGggdmFsdWUgXCIke2UuYWN0aW9ufVwiYCk7YnJlYWs7Y2FzZSB2LlJlZnJlc2g6YXdhaXQoYXN5bmMoZSx0KT0+e2NvbnN0IG49THQoKSxyPW4uQnJvd3Nlci53cmFwU3luYyhlKSxvPShhd2FpdCByLmdldFBhZ2VzKCkpLmZpbmQoKGU9PnQ/ZS5wYWdlSWQ9PT10OmUuaXNBY3RpdmUpKTtvPy5sYXlvdXQ/LmNvbnRlbnQmJkF0KG8ubGF5b3V0LmNvbnRlbnQpLmZvckVhY2goKGFzeW5jIGU9PnsoYXdhaXQgZmluLlZpZXcud3JhcCh7dXVpZDpuLmlkZW50aXR5LnV1aWQsbmFtZTplLm5hbWV9KSkucmVsb2FkKCl9KSl9KSh0LmlkZW50aXR5LHQucGFnZUlkKTticmVhaztjYXNlIHYuQ2xvc2VPdGhlcnM6YXdhaXQoYXN5bmMoZSx0KT0+e2NvbnN0IG49THQoKS5Ccm93c2VyLndyYXBTeW5jKGUpLHI9YXdhaXQgbi5nZXRQYWdlcygpO2Zvcihjb25zdCBvIG9mIHIpby5wYWdlSWQhPT10JiYoYXdhaXQgbi5yZW1vdmVQYWdlKG8ucGFnZUlkKSxhd2FpdCBuLl90cmFja1JlbW92ZWRUYWIoe2lkZW50aXR5OmUscGFnZTpvfSkpfSkodC5pZGVudGl0eSx0LnBhZ2VJZCk7YnJlYWs7Y2FzZSB2LlNhdmVXb3Jrc3BhY2VBczphd2FpdCBIbyh0LmlkZW50aXR5KX19LGxpPWFzeW5jKGUsdCk9PntpZihlPy50eXBlKXtjb25zdCBuPXQuaWRlbnRpdHk7c3dpdGNoKGUudHlwZSl7Y2FzZSB5LlNhdmVQYWdlOmF3YWl0IFRvKG4pO2JyZWFrO2Nhc2UgeS5TYXZlV29ya3NwYWNlOmF3YWl0IFZvKG4pO2JyZWFrO2Nhc2UgeS5TYXZlUGFnZUFzOmF3YWl0IERvKG4pO2JyZWFrO2Nhc2UgeS5TYXZlV29ya3NwYWNlQXM6YXdhaXQgSG8obik7YnJlYWs7Y2FzZSB5LkN1c3RvbTppZihlLmFjdGlvbil7Y29uc3Qgbj17Y2FsbGVyVHlwZTprLlNhdmVCdXR0b25Db250ZXh0TWVudSx3aW5kb3dJZGVudGl0eTp0LmlkZW50aXR5LHBhZ2VJZDp0LnBhZ2VJZCxjdXN0b21EYXRhOmUuYWN0aW9uLmN1c3RvbURhdGF9O0x0KCkuX2ludm9rZUN1c3RvbUFjdGlvbihlLmFjdGlvbi5pZCxuKX1lbHNlIGNvbnNvbGUud2FybihgRW5jb3VudGVyZWQgYSBDdXN0b20gY29udGV4dCBtZW51IG9wdGlvbiB3aXRoIGFuIFwiYWN0aW9uXCIgcHJvcGVydHkgd2l0aCB2YWx1ZSBcIiR7ZS5hY3Rpb259XCJgKX19fTt2YXIgc2k7IWZ1bmN0aW9uKGUpe2VbZS5Cb3R0b21MZWZ0PTBdPVwiQm90dG9tTGVmdFwiLGVbZS5Cb3R0b21SaWdodD0xXT1cIkJvdHRvbVJpZ2h0XCIsZVtlLkNlbnRlcj0yXT1cIkNlbnRlclwifShzaXx8KHNpPXt9KSk7Y29uc3QgY2k9YXN5bmMoZSx0LG4scik9Pntjb25zdHt4Om8seTphLGlkZW50aXR5OmksdGVtcGxhdGU6bCxjYWxsYmFjazpzfT1lLGM9YXdhaXQgZmUoaSkse2RhdGE6dX09Yz9hd2FpdChhc3luYyhlLHQsbixyKT0+e2lmKCFMKXRocm93IG5ldyBFcnJvcihcInNob3dFbnRlcnByaXNlQ29udGV4dE1lbnUgY2FuIG9ubHkgYmUgdXNlZCBpbiBhIEhlcmUgZW52LiBBdm9pZCBjYWxsaW5nIHRoaXMgbWV0aG9kIGR1cmluZyBwcmUtcmVuZGVyaW5nLlwiKTtpZighciYmIWZpbi5tZS5pc1dpbmRvdyl0aHJvdyBuZXcgRXJyb3IoXCJzaG93RW50ZXJwcmlzZUNvbnRleHRNZW51IGNhbiBvbmx5IGJlIHVzZWQgaW4gYSBIZXJlIHdpbmRvdy5cIik7Y29uc3Qgbz1maW4uV2luZG93LndyYXBTeW5jKHt1dWlkOm5lLnV1aWQsbmFtZTplZS5FbnRlcnByaXNlQ29udGV4dE1lbnV9KTthd2FpdCBvLmlzU2hvd2luZygpJiZhd2FpdCBvLmJsdXIoKTtjb25zdCBhPWF3YWl0IHNhKCksaT1uZXcgUHJvbWlzZSgoKGUsdCk9PnthLnJlZ2lzdGVyKFwicmVzcG9uc2VcIiwodD0+e2UodCl9KSl9KSkse3g6bCx5OnMsdGVtcGxhdGU6Y309ZTtyZXR1cm4gYXdhaXQgYS5kaXNwYXRjaChcIm9wZW5cIix7cGFyZW50SWRlbnRpdHk6ci5pZGVudGl0eSxyZXNwb25zZUlkZW50aXR5Om5lLHR5cGU6dCxhbmNob3JCZWhhdmlvcjpuLHg6bCx5OnMscGF5bG9hZDp7dGVtcGxhdGU6Y319KSxpfSkoe3g6byx5OmEsdGVtcGxhdGU6bH0sbixyLGZpbi5XaW5kb3cud3JhcFN5bmMoaSkpOmF3YWl0IGZ1bmN0aW9uKGUsdCl7aWYoIUwpdGhyb3cgbmV3IEVycm9yKFwic2hvd0NvbnRleHRNZW51IGNhbiBvbmx5IGJlIHVzZWQgaW4gYW4gT3BlbkZpbiBlbnYuIEF2b2lkIGNhbGxpbmcgdGhpcyBtZXRob2QgZHVyaW5nIHByZS1yZW5kZXJpbmcuXCIpO2lmKCF0JiYhZmluLm1lLmlzV2luZG93KXRocm93IG5ldyBFcnJvcihcInNob3dDb250ZXh0TWVudSBjYW4gb25seSBiZSB1c2VkIGluIGFuIE9wZW5GaW4gd2luZG93LlwiKTtyZXR1cm4odHx8ZmluLldpbmRvdy5nZXRDdXJyZW50U3luYygpKS5zaG93UG9wdXBNZW51KGUpfSh7eDpvLHk6YSx0ZW1wbGF0ZTpsfSxmaW4uV2luZG93LndyYXBTeW5jKGkpKTtzKHUsZSl9O2FzeW5jIGZ1bmN0aW9uIHVpKGUsdCl7Y29uc3Qgbj1hd2FpdCBmZShlLmlkZW50aXR5KSxyPW4/YXdhaXQoYXN5bmMoe2lkZW50aXR5OmUsc2VsZWN0ZWRWaWV3czp0fSk9Pntjb25zdCBuPUx0KCkscj1uLkJyb3dzZXIud3JhcFN5bmMoZSksbz0oYXdhaXQgci5nZXRQYWdlcygpKS5maW5kKChlPT5lLmlzQWN0aXZlKSksYT1EdChvLmxheW91dC5jb250ZW50KT4xLGk9YXdhaXQgZmUoZSksbD1hd2FpdCBuLlRoZW1lLmdldFRoZW1lcygpLHM9bFswXSYmXCJwYWxldHRlc1wiaW4gbFswXXx8IWxbMF18fDA9PT1sLmxlbmd0aCxjPXsuLi5OYShpKSxlbmFibGVkOmF9LHU9ey4uLkZhKGkpLGVuYWJsZWQ6YX07cmV0dXJuWyRhKCksV2EoITAsaSkse3R5cGU6Y2EuU2VwYXJhdG9yfSxjLHUse3R5cGU6Y2EuU2VwYXJhdG9yfSwuLi5zP1t7dHlwZTpjYS5TdWJtZW51LGxhYmVsOkdhKCkubGFiZWwsc3VibWVudTphd2FpdCBxYSgpfV06W10se3R5cGU6Y2EuU2VwYXJhdG9yfSxCYSgpLHt0eXBlOmNhLlNlcGFyYXRvcn0sWmEoITApXX0pKHtpZGVudGl0eTplLmlkZW50aXR5LHNlbGVjdGVkVmlld3M6ZS5zZWxlY3RlZFZpZXdzfSk6YXdhaXQgWWEoZS5pZGVudGl0eSxlLnNlbGVjdGVkVmlld3MpLG89YXdhaXQgb2koKTtufHwoci5maW5kKChlPT5lLmRhdGE/LnR5cGU9PT1oLlF1aXQpKS5sYWJlbD1gUXVpdCAke299YCk7Y29uc3R7cmVjdDphLC4uLml9PWUse3g6bCx5OnN9PW4/e3g6YS5sZWZ0K2Eud2lkdGgseTphLmJvdHRvbX06ZSxjPXsuLi5pLHg6bCx5OnMsdGVtcGxhdGU6cixjYWxsYmFjazphaX07YXdhaXQgdGhpcy5vcGVuR2xvYmFsQ29udGV4dE1lbnUoYyx0KX1hc3luYyBmdW5jdGlvbiBkaShlLHQpe2NvbnN0IG49ey4uLmUsY2FsbGJhY2s6bml9O2F3YWl0IHRoaXMub3BlblZpZXdUYWJDb250ZXh0TWVudShuLHQpfWFzeW5jIGZ1bmN0aW9uIHBpKGUsdCl7Y29uc3Qgbj1hd2FpdChhc3luYyhlLHQpPT57Y29uc3Qgbj1hd2FpdCBMdCgpLlN0b3JhZ2UuZ2V0UGFnZShlKSxyPWF3YWl0IFluKCksbz1hd2FpdCBmZSh0KSxhPXIuZmluZCgodD0+dC5wYWdlSWQ9PT1lKSksaT1EdChhLmxheW91dC5jb250ZW50KT4xLGw9aSx7d29ya3NwYWNlUGxhdGZvcm06c309YXdhaXQgdGUodCkuZ2V0T3B0aW9ucygpLGM9IShzLmlzTG9ja2VkfHxzLnByZXZlbnRQYWdlQ2xvc2V8fGEuY2xvc2VCdXR0b24/LmRpc2FibGVkfHxhLmNsb3NlQnV0dG9uPy5oaWRkZW4pLHU9W3t0eXBlOmNhLkxhYmVsLGxhYmVsOkJuKFwiZW50ZXJwcmlzZUNvbnRleHRNZW51Lm5ld1RhYlwiKSxkYXRhOnt0eXBlOnYuTmV3UGFnZX19LHVhLHt0eXBlOmNhLkxhYmVsLGxhYmVsOkJuKFwicmVsb2FkXCIpLGRhdGE6e3R5cGU6di5SZWZyZXNofX0se3R5cGU6Y2EuTGFiZWwsbGFiZWw6Qm4oXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuZHVwbGljYXRlXCIpLGRhdGE6e3R5cGU6di5EdXBsaWNhdGV9LGVuYWJsZWQ6IXMuaXNMb2NrZWR9LHVhLHt0eXBlOmNhLkxhYmVsLGxhYmVsOkJuKGw/XCJlbnRlcnByaXNlU2F2ZU1vZGFsLmNsb3NlU3VwZXJ0YWJcIjpcImVudGVycHJpc2VTYXZlTW9kYWwuY2xvc2VUYWJcIiksZGF0YTp7dHlwZTp2LkNsb3NlfSxlbmFibGVkOmN9XSxkPVt7dHlwZTpjYS5MYWJlbCxsYWJlbDpCbihcImVudGVycHJpc2VDb250ZXh0TWVudS5uZXdUYWJcIiksZGF0YTp7dHlwZTp2Lk5ld1BhZ2V9fSx1YSx7dHlwZTpjYS5MYWJlbCxsYWJlbDpCbihcImVudGVycHJpc2VTYXZlTW9kYWwucmVuYW1lU3VwZXJ0YWJcIiksZGF0YTp7dHlwZTp2LlJlbmFtZX0sZW5hYmxlZDohcy5pc0xvY2tlZCYmISFuJiZpfSx7dHlwZTpjYS5MYWJlbCxsYWJlbDpCbihcImVudGVycHJpc2VDb250ZXh0TWVudS5kdXBsaWNhdGVcIiksZGF0YTp7dHlwZTp2LkR1cGxpY2F0ZX0sZW5hYmxlZDohcy5pc0xvY2tlZH0sdWEse3R5cGU6Y2EuTGFiZWwsbGFiZWw6Qm4oXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuc2F2ZVN1cGVydGFiXCIpLGRhdGE6e3R5cGU6di5TYXZlfSxlbmFibGVkOml9LHt0eXBlOmNhLkxhYmVsLGxhYmVsOkJuKFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LnNhdmVTdXBlcnRhYkFzXCIpLGRhdGE6e3R5cGU6di5TYXZlQXN9LGVuYWJsZWQ6aX0sdWEse3R5cGU6Y2EuTGFiZWwsbGFiZWw6Qm4oXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuZGVsZXRlU3VwZXJ0YWJcIiksZGF0YTp7dHlwZTp2LkRlbGV0ZVBhZ2V9LGVuYWJsZWQ6ISFufSx1YSx7dHlwZTpjYS5MYWJlbCxsYWJlbDpCbihsP1wiZW50ZXJwcmlzZVNhdmVNb2RhbC5jbG9zZVN1cGVydGFiXCI6XCJlbnRlcnByaXNlU2F2ZU1vZGFsLmNsb3NlVGFiXCIpLGRhdGE6e3R5cGU6di5DbG9zZX0sZW5hYmxlZDpjfV0scD1be3R5cGU6Y2EuTGFiZWwsbGFiZWw6Qm4oXCJjb250ZXh0TWVudS5zYXZlUGFnZVwiKSxkYXRhOnt0eXBlOnYuU2F2ZX0sZW5hYmxlZDohMH0se3R5cGU6Y2EuTGFiZWwsbGFiZWw6Qm4oXCJzYXZlTWVudS5zYXZlUGFnZUFzXCIpLGRhdGE6e3R5cGU6di5TYXZlQXN9LGVuYWJsZWQ6ITB9LHt0eXBlOmNhLkxhYmVsLGxhYmVsOlwiU2F2ZSBXb3Jrc3BhY2UgQXNcIixkYXRhOnt0eXBlOnYuU2F2ZVdvcmtzcGFjZUFzfX0se3R5cGU6Y2EuTGFiZWwsbGFiZWw6XCJSZWZyZXNoXCIsZGF0YTp7dHlwZTp2LlJlZnJlc2h9fSx1YSx7dHlwZTpjYS5MYWJlbCxsYWJlbDpCbihcInNhdmVNb2RhbC5yZW5hbWVQYWdlXCIpLGRhdGE6e3R5cGU6di5SZW5hbWV9LGVuYWJsZWQ6ISFufSx7dHlwZTpjYS5MYWJlbCxsYWJlbDpCbihcImNvbnRleHRNZW51LmR1cGxpY2F0ZVBhZ2VcIiksZGF0YTp7dHlwZTp2LkR1cGxpY2F0ZX0sZW5hYmxlZDohcy5pc0xvY2tlZH0sdWEse3R5cGU6Y2EuTGFiZWwsbGFiZWw6Qm4oXCJzYXZlTW9kYWwuY2xvc2VQYWdlXCIpLGRhdGE6e3R5cGU6di5DbG9zZX0sZW5hYmxlZDpjfV07cmV0dXJuIG8/bD9kOnU6cH0pKGUucGFnZUlkLGUuaWRlbnRpdHkpLHI9ey4uLmUsdGVtcGxhdGU6bixjYWxsYmFjazoodCxuKT0+e2lpKHQsbixlLnJlY3QpfX07YXdhaXQgdGhpcy5vcGVuUGFnZVRhYkNvbnRleHRNZW51KHIsdCl9YXN5bmMgZnVuY3Rpb24gZmkoZSx0KXtjb25zdCBuPXsuLi5lLHRlbXBsYXRlOmF3YWl0KGFzeW5jKCk9Pntjb25zdCBlPUx0KCksdD1hd2FpdCBlLmdldEN1cnJlbnRXb3Jrc3BhY2UoKSxuPShhd2FpdCBlLlN0b3JhZ2UuZ2V0V29ya3NwYWNlcygpKS5maW5kKChlPT5lLndvcmtzcGFjZUlkPT09dC53b3Jrc3BhY2VJZCkpO3JldHVyblt7dHlwZTpjYS5MYWJlbCxsYWJlbDpCbihcImNvbnRleHRNZW51LnNhdmVXb3Jrc3BhY2VcIiksZW5hYmxlZDohIW4sZGF0YTp7dHlwZTp5LlNhdmVXb3Jrc3BhY2V9fSx7dHlwZTpjYS5MYWJlbCxsYWJlbDpCbihcInNhdmVNZW51LnNhdmVXb3Jrc3BhY2VBc1wiKSxkYXRhOnt0eXBlOnkuU2F2ZVdvcmtzcGFjZUFzfX0se3R5cGU6Y2EuU2VwYXJhdG9yLGRhdGE6dm9pZCAwfSx7dHlwZTpjYS5MYWJlbCxsYWJlbDpCbihcImNvbnRleHRNZW51LnNhdmVQYWdlXCIpLGRhdGE6e3R5cGU6eS5TYXZlUGFnZX19LHt0eXBlOmNhLkxhYmVsLGxhYmVsOkJuKFwic2F2ZU1lbnUuc2F2ZVBhZ2VBc1wiKSxkYXRhOnt0eXBlOnkuU2F2ZVBhZ2VBc319XX0pKCksY2FsbGJhY2s6bGl9O2F3YWl0IHRoaXMub3BlblNhdmVCdXR0b25Db250ZXh0TWVudShuLHQpfWNvbnN0IGhpPVAmJkwmJlNhKFwiZG9jay1wcm92aWRlci1jb25maWdzXCIsXCJkb2NrLXByb3ZpZGVyLWNvbmZpZ3NcIik7YXN5bmMgZnVuY3Rpb24gZ2koZSl7aWYoIWhpKXRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBnZXQgRG9jayBwcm92aWRlciBjb25maWcgLSBJbmRleERCIG5vdCBzdXBwb3J0ZWRcIik7cmV0dXJuIGF3YWl0IENhKGUsaGkpLmNhdGNoKChlPT57Y29uc29sZS53YXJuKFwiRmFpbGVkIHRvIHJldHJpZXZlIERvY2sgcHJvdmlkZXIgY29uZmlnIGZyb20gSW5kZXhlZERCXCIsZSl9KSl9YXN5bmMgZnVuY3Rpb24gdmkoZSl7YXdhaXQgbWEoZS5pZCxlLGhpKX1jb25zdCBDaT1QJiZMJiZPYShcIm9wZW5maW4td29ya3NwYWNlLXBsYXRmb3JtLXdvcmtzcGFjZXNcIixcIndvcmtzcGFjZXNcIik7YXN5bmMgZnVuY3Rpb24gbWkoZSl7aWYoIUNpKXRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBnZXQgd29ya3NwYWNlIC0gSW5kZXhEQiBub3Qgc3VwcG9ydGVkXCIpO2NvbnN0IHQ9YXdhaXQgQ2EoZSxDaSk7aWYodClyZXR1cm4gdC53b3Jrc3BhY2VJZD1lLnRvU3RyaW5nKCksdC50aXRsZT10LnRpdGxlfHx0LndvcmtzcGFjZUlkLHR9YXN5bmMgZnVuY3Rpb24gd2koZSl7aWYoIUNpKXRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBnZXQgd29ya3NwYWNlcyAtIEluZGV4REIgbm90IHN1cHBvcnRlZFwiKTtjb25zdCB0PWF3YWl0IHlhKENpKSxuPShhd2FpdCBQcm9taXNlLmFsbCh0Lm1hcCgoZT0+bWkoZS50b1N0cmluZygpKSkpKSkuZmlsdGVyKChlPT4hIWUpKTtyZXR1cm4gZT9uLmZpbHRlcigodD0+TWEodC50aXRsZSxlKSkpOm59YXN5bmMgZnVuY3Rpb24gYmkoe3dvcmtzcGFjZTplfSl7aWYoIUNpKXRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBjcmVhdGUgd29ya3NwYWNlIC0gSW5kZXhEQiBub3Qgc3VwcG9ydGVkXCIpO2NvbnN0IHQ9KGF3YWl0IHdpKCkpLmZpbmQoKHQ9PnQudGl0bGU9PT1lLnRpdGxlKSk7aWYodCYmdC53b3Jrc3BhY2VJZCE9PWUud29ya3NwYWNlSWQpdGhyb3cgbmV3IEVycm9yKGBXb3Jrc3BhY2Ugd2l0aCB0aXRsZSAnJHtlLnRpdGxlfScgYWxyZWFkeSBleGlzdHMuYCk7YXdhaXQgbWEoZS53b3Jrc3BhY2VJZCxlLENpKX1hc3luYyBmdW5jdGlvbiB5aShlKXtpZighQ2kpdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGRlbGV0ZSB3b3Jrc3BhY2UgLSBJbmRleERCIG5vdCBzdXBwb3J0ZWRcIik7YXdhaXQgd2EoZSxDaSl9YXN5bmMgZnVuY3Rpb24geGkoe3dvcmtzcGFjZUlkOmUsd29ya3NwYWNlOnR9KXtpZighQ2kpdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIHVwZGF0ZSB3b3Jrc3BhY2VzIC0gSW5kZXhEQiBub3Qgc3VwcG9ydGVkXCIpO2lmKCFhd2FpdCBtaShlKSl0aHJvdyBuZXcgRXJyb3IoXCJ3b3Jrc3BhY2Ugbm90IGZvdW5kXCIpO2F3YWl0IGJpKHt3b3Jrc3BhY2U6dH0pLGUhPT10LndvcmtzcGFjZUlkJiZhd2FpdCB5aShlKX1jb25zdCBraT1lPT57Y29uc3QgdD1lLmxheW91dCxuPXQuY29udGVudD9BdCh0LmNvbnRlbnQpOltdLHI9bi5sZW5ndGg7cmV0dXJuIHI+MT97Li4uZSxzaW5nbGVWaWV3TmFtZTpudWxsfToxPT09cj97Li4uZSxzaW5nbGVWaWV3TmFtZTpuWzBdLm5hbWV9OnZvaWQgMH0sU2k9YXN5bmMoZSx0LG4pPT57Y29uc3Qgcj1hd2FpdCBMdCgpLkJyb3dzZXIuZ2V0QWxsQXR0YWNoZWRQYWdlcygpLG89bmV3IFNldChyLm1hcCgoZT0+ZS50aXRsZSkpLmZpbHRlcigoZT0+ISFlKSkpLGE9bmV3IFNldChyLm1hcCgoZT0+ZS5wYWdlSWQpKS5maWx0ZXIoKGU9PiEhZSkpKSxpPXQ/LmRlZmF1bHRQYWdlT3B0aW9ucyxsPVwiZW50ZXJwcmlzZVwiPT09bj8ud29ya3NwYWNlUGxhdGZvcm0/LndpbmRvd1R5cGV8fFwiZW50ZXJwcmlzZVwiPT09dD8uZGVmYXVsdFdpbmRvd09wdGlvbnM/LndvcmtzcGFjZVBsYXRmb3JtPy53aW5kb3dUeXBlLHM9YXdhaXQgVSgpO3JldHVybiBlLm1hcCgoZT0+e2lmKFwicmVwYXJlbnRcIj09PWUubXVsdGlJbnN0YW5jZVZpZXdCZWhhdmlvcilyZXR1cm57Li4uZSxsYXlvdXRDb250YWluZXJLZXk6SGUoKX07KChlLHQpPT57ZS5wYWdlSWR8fD1IZSgpLHQuaGFzKGUucGFnZUlkKSYmKGNvbnNvbGUud2FybihcIlBhZ2VJRCBjb2xsaXNpb24gZGV0ZWN0ZWQuIEFsbCBQYWdlIElEcyBzaG91bGQgYmUgdW5pcXVlLiBBIHJhbmRvbSBuZXcgcGFnZUlkIHdpbGwgYmUgZ2VuZXJhdGVkXCIpLGUucGFnZUlkPUhlKCkpLHQuYWRkKGUucGFnZUlkKX0pKGUsYSksbD9lLmljb25Vcmw9YCR7c30vaWNvbnMvZW50ZXJwcmlzZS1wYWdlLnN2Z2A6ZS50aXRsZT1xbihlLnRpdGxlLEFycmF5LmZyb20oby5rZXlzKCkpKSxvLmFkZChlLnRpdGxlKSxlLnBhbmVscz8ucmVkdWNlKCgoZSx0KT0+e2NvbnN0IG49T2JqZWN0LnZhbHVlcyhwKTtpZighbi5pbmNsdWRlcyh0LnBvc2l0aW9uKSl0aHJvdyBuZXcgRXJyb3IoYEVuY291bnRlcmVkIGEgcGFuZWwgd2l0aCB1bnN1cHBvcnRlZCBwb3NpdGlvbiBcIiR7dC5wb3NpdGlvbn1cIi4gU3VwcG9ydGVkIHBvc2l0aW9ucyBhcmU6ICR7bi50b1N0cmluZygpfWApO2lmKDE9PWVbdC5wb3NpdGlvbl0pdGhyb3cgbmV3IEVycm9yKGBGb3VuZCBtb3JlIHRoYW4gMSBwYW5lbCBhdCBwb3NpdGlvbjogJHt0LnBvc2l0aW9ufS4gT25seSAxIHBhbmVsIGF0IGEgZ2l2ZW4gcG9zaXRpb24gaXMgY3VycmVudGx5IHN1cHBvcnRlZC5gKTtyZXR1cm57Li4uZSxbdC5wb3NpdGlvbl06ZVt0LnBvc2l0aW9uXSsxfX0pLHtbcC5MZWZ0XTowLFtwLlJpZ2h0XTowLFtwLlRvcF06MCxbcC5Cb3R0b21dOjB9KTtjb25zdCByPVwicGFuZWxzXCJpbiBlP2UucGFuZWxzOmk/LnBhbmVscztsZXQgYz0odT1lLmxheW91dCxkPXQ/LmRlZmF1bHRWaWV3T3B0aW9ucyxqdCh7Li4udX0sKGU9PlJ0KGUsZCkpKSk7dmFyIHUsZDtjb25zdCBmPSgoZSx0LG4pPT57aWYobilyZXR1cm4gTWk7Y29uc3Qgcj10Py53b3Jrc3BhY2VQbGF0Zm9ybT8ubmV3VGFiVXJsO2lmKHIpcmV0dXJuIHI7Y29uc3Qgbz1lPy5kZWZhdWx0V2luZG93T3B0aW9ucz8ud29ya3NwYWNlUGxhdGZvcm0/Lm5ld1RhYlVybDtyZXR1cm4gb3x8dm9pZCAwfSkodCxuLGwpO2YmJiFjPy5zZXR0aW5ncz8ubmV3VGFiQnV0dG9uJiYoYz17Li4uYyxzZXR0aW5nczp7Li4uYz8uc2V0dGluZ3MsbmV3VGFiQnV0dG9uOnt1cmw6Zn19fSk7cmV0dXJuey4uLmksLi4uZSxwYW5lbHM6ciYmRm4ociksbGF5b3V0Q29udGFpbmVyS2V5OkhlKCksbGF5b3V0OmMsaXNMYXlvdXRDcmVhdGVkOiExfX0pKX0sT2k9YXN5bmMoKT0+YXdhaXQgVSgpK0suQnJvd3NlcixNaT1UK0suQnJvd3NlcitcImVudGVycHJpc2UvbGFuZGluZy9cIixMaT17ZGltZW5zaW9uczp7Ym9yZGVyV2lkdGg6MyxoZWFkZXJIZWlnaHQ6MzB9fSxfaT0obmUudXVpZCxlZS5Ccm93c2VyQWRkcmVzc1NlYXJjaFByZWZpeCk7YXN5bmMgZnVuY3Rpb24gUGkoZSx0LG4pe2xldCByPWU7Y29uc3Qgbz1cImVudGVycHJpc2VcIj09PXIud29ya3NwYWNlUGxhdGZvcm0/LndpbmRvd1R5cGV8fFwiZW50ZXJwcmlzZVwiPT09dD8uZGVmYXVsdFdpbmRvd09wdGlvbnM/LndvcmtzcGFjZVBsYXRmb3JtPy53aW5kb3dUeXBlO2lmKHIubGF5b3V0JiYhci53b3Jrc3BhY2VQbGF0Zm9ybT8ucGFnZXM/Lmxlbmd0aCl7Y29uc3QgZT1hd2FpdCBwcigpLG49ey4uLmF3YWl0IEZlKGUsci5sYXlvdXQpLGlzQWN0aXZlOiEwfTtyLndvcmtzcGFjZVBsYXRmb3JtfHw9e30sci53b3Jrc3BhY2VQbGF0Zm9ybS5wYWdlcz1hd2FpdCBTaShbbl0sdCxyKX1jb25zdCBhPW4/LnRoZW1lcz8uWzBdO2lmKHIud29ya3NwYWNlUGxhdGZvcm0/LnBhZ2VzPy5sZW5ndGgpe2NvbnN0IGU9YXdhaXQgU2koci53b3Jrc3BhY2VQbGF0Zm9ybS5wYWdlcyx0LHIpLGk9ZSxsPShlPT57aWYoIWUpcmV0dXJuO2xldCB0PWUuZmluZCgoZT0+ZS5pc0FjdGl2ZSkpO3JldHVybiF0JiZlLmxlbmd0aD4wJiYoZVswXS5pc0FjdGl2ZT0hMCx0PWVbMF0pLHR9KShpKTtpZihpLmZvckVhY2goKGU9PntlLnBhZ2VJZCE9PWw/LnBhZ2VJZCYmKGUuaXNBY3RpdmU9ITEpfSkpLGF3YWl0IFduKGkpLHIud29ya3NwYWNlUGxhdGZvcm0ucGFnZXM9ZSxyPU9lKHt9LGF3YWl0KGFzeW5jIGU9Pih7Y29udGV4dE1lbnVPcHRpb25zOntlbmFibGVkOiExfSxleHBlcmltZW50YWw6e3Nob3dGYXZpY29uczohMCxkZWZhdWx0RmF2aWNvblVybDplP1wiZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFJQUFBUC8vL3dBQUFDSDVCQUVBQUFBQUxBQUFBQUFCQUFFQUFBSUNSQUVBT3c9PVwiOmAke2F3YWl0IFUoKX0vaWNvbnMvZGVmYXVsdEZhdmljb24uc3ZnYH0sdmlld1Zpc2liaWxpdHk6e3Nob3dWaWV3c09uU3BsaXR0ZXJEcmFnOntlbmFibGVkOiEwfSxzaG93Vmlld3NPbldpbmRvd1Jlc2l6ZTp7ZW5hYmxlZDohMH19fSkpKG8pLHQ/LmRlZmF1bHRXaW5kb3dPcHRpb25zLHIsYXdhaXQoYXN5bmMoKT0+KHtiYWNrZ3JvdW5kVGhyb3R0bGluZzohMCx1cmw6YXdhaXQgT2koKSxjb250ZXh0TWVudTohMCxjbG9zZU9uTGFzdFZpZXdSZW1vdmVkOiExLHBlcm1pc3Npb25zOntTeXN0ZW06e29wZW5VcmxXaXRoQnJvd3Nlcjp7ZW5hYmxlZDohMCxwcm90b2NvbHM6W1wibWFpbHRvXCJdfX19fSkpKCkpLGwubGF5b3V0PU9lKGwubGF5b3V0LExpKSxhc3luYyBmdW5jdGlvbihlKXtpZihlLmljb258fGUudGFza2Jhckljb24pe2NvbnN0IHQ9ZmluLkFwcGxpY2F0aW9uLmdldEN1cnJlbnRTeW5jKCksbj1hd2FpdChhd2FpdCB0LmdldFdpbmRvdygpKS5nZXRPcHRpb25zKCk7ZS50YXNrYmFySWNvbkdyb3VwfHw9bi50YXNrYmFySWNvbkdyb3VwfHxmaW4ubWUuaWRlbnRpdHkudXVpZH1pZihlLndvcmtzcGFjZVBsYXRmb3JtLmljb24paWYoXCJvYmplY3RcIj09dHlwZW9mIGUud29ya3NwYWNlUGxhdGZvcm0uaWNvbil7Y29uc3QgdD13aW5kb3cubWF0Y2hNZWRpYShcIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaylcIik7ZS5pY29uPXQubWF0Y2hlcz9lLndvcmtzcGFjZVBsYXRmb3JtLmljb24uZGFyazplLndvcmtzcGFjZVBsYXRmb3JtLmljb24ubGlnaHR9ZWxzZSBlLmljb249ZS53b3Jrc3BhY2VQbGF0Zm9ybS5pY29ufShyKSwhci5iYWNrZ3JvdW5kQ29sb3ImJmEpaWYoXCJwYWxldHRlXCJpbiBhKXIuYmFja2dyb3VuZENvbG9yPWE/LnBhbGV0dGU/LmJhY2tncm91bmQyfHxhPy5wYWxldHRlPy5iYWNrZ3JvdW5kUHJpbWFyeTtlbHNle2NvbnN0IGU9bi5zZWxlY3RlZFNjaGVtZT09PWcuRGFya3x8bi5zZWxlY3RlZFNjaGVtZT09PWcuU3lzdGVtJiZ3aW5kb3cubWF0Y2hNZWRpYShcIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaylcIik/YT8ucGFsZXR0ZXMuZGFyazphPy5wYWxldHRlcy5saWdodDtyLmJhY2tncm91bmRDb2xvcj1lPy5iYWNrZ3JvdW5kMnx8ZT8uYmFja2dyb3VuZFByaW1hcnl9cj1ScihyLCEwKTtjb25zdCBzPWF3YWl0IFUoKTtzJiYoci51cmw9cytLLkJyb3dzZXIpLHIubGF5b3V0PWwubGF5b3V0LHIubGF5b3V0U25hcHNob3Q9KChlLHQpPT4oe2xheW91dHM6ZS5yZWR1Y2UoKChlLG4pPT57aWYoIW4uaXNBY3RpdmUpe2lmKCF0KXJldHVybiBlO2lmKCFraShuKS5zaW5nbGVWaWV3TmFtZSlyZXR1cm4gZX1yZXR1cm4gZVtuLmxheW91dENvbnRhaW5lcktleV09bi5sYXlvdXQsZX0pLHt9KSxwYWdlczplfSkpKHIud29ya3NwYWNlUGxhdGZvcm0ucGFnZXMsbyksci53b3Jrc3BhY2VQbGF0Zm9ybS53aW5kb3dUeXBlPXIud29ya3NwYWNlUGxhdGZvcm0ud2luZG93VHlwZT8/eC5Ccm93c2VyfWlmKHIuY29ybmVyUm91bmRpbmcmJmRlbGV0ZSByLmNvcm5lclJvdW5kaW5nLHIubmFtZXx8ci5sYXlvdXRTbmFwc2hvdD9yLmNvbnRleHRNZW51T3B0aW9ucz8udGVtcGxhdGU/Lmxlbmd0aD4wP3IuY29udGV4dE1lbnVPcHRpb25zLnRlbXBsYXRlPXIuY29udGV4dE1lbnVPcHRpb25zLnRlbXBsYXRlLmZpbHRlcigoZT0+XCJwcmludFwiIT09ZSkpOnIuY29udGV4dE1lbnVPcHRpb25zPXt0ZW1wbGF0ZTpbXSxlbmFibGVkOiExfTpyLm5hbWU9YCR7ZWUuQ2xhc3NpY1dpbmRvd30tJHtIZSgpfWAsci53b3Jrc3BhY2VQbGF0Zm9ybSYmbiYmKHIud29ya3NwYWNlUGxhdGZvcm0uX3RoZW1lRGF0YT1uKSxvKXtyLndvcmtzcGFjZVBsYXRmb3JtLm5ld1BhZ2VVcmw9TWksci53b3Jrc3BhY2VQbGF0Zm9ybS5uZXdUYWJVcmw9TWksci5sYXlvdXQmJihyLmxheW91dC5kaW1lbnNpb25zLmJvcmRlcldpZHRoPTQsci5sYXlvdXQuZGltZW5zaW9ucy5oZWFkZXJIZWlnaHQ9MjgpLHIubmFtZT1yLm5hbWV8fGAke2VlLkJyb3dzZXJXaW5kb3d9LSR7SGUoKX1gO2NvbnN0IGU9X2krci5uYW1lLHQ9ZmluLkFwcGxpY2F0aW9uLmdldEN1cnJlbnRTeW5jKCk7aWYoIShhd2FpdCB0LmdldFZpZXdzKCkpLnNvbWUoKHQ9PnQuaWRlbnRpdHkubmFtZT09PWUpKSYmci5uYW1lLnN0YXJ0c1dpdGgoZWUuQnJvd3NlcldpbmRvdykpe2NvbnN0IHQ9YXdhaXQgVSgpK0suQnJvd3NlclBvcHVwTWVudUFkZHJlc3NTZWFyY2hSZXN1bHRzVmlldzsoYXdhaXQgZmluLlZpZXcuY3JlYXRlKHtuYW1lOmUsY29udGV4dE1lbnVPcHRpb25zOntlbmFibGVkOiEwfSx1cmw6dCx0YXJnZXQ6ZmluLm1lLmlkZW50aXR5LGJvdW5kczp7dG9wOjAsbGVmdDowLHdpZHRoOjAsaGVpZ2h0OjB9fSkpLm5hdmlnYXRlKHQpfX1yZXR1cm4gcn1jb25zdCBFaT1hc3luYyhlLHQpPT57Y29uc3Qgbj17dXVpZDp0LnV1aWQsbmFtZTp0Lm5hbWV9O2F3YWl0IHhvKG4sZS50aXRsZT8/YXdhaXQgb2koKSxlLnNob3VsZENlbnRlck9uTW9uaXRvcikmJmZpbi5QbGF0Zm9ybS5nZXRDdXJyZW50U3luYygpLnF1aXQoKX0samk9ZT0+e2NvbnN0IHQ9ZS5uYW1lPT09ZWUuSG9tZSxuPWUubmFtZT8uc3RhcnRzV2l0aChlZS5Ib21lSW50ZXJuYWwpLHI9ZS5uYW1lPy5zdGFydHNXaXRoKGVlLkJyb3dzZXJNZW51KXx8ZS5uYW1lPy5zdGFydHNXaXRoKGVlLkJyb3dzZXJTYXZlTWVudSk7cmV0dXJuIXQmJiFuJiYhcn07Y29uc3QgUmk9ZT0+SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShlKSk7YXN5bmMgZnVuY3Rpb24gSWkoZSx0LG4pe2NvbnN0IHI9ZS5tYW5pZmVzdFVybD9hd2FpdCB0KHttYW5pZmVzdFVybDplLm1hbmlmZXN0VXJsfSxuKTp2b2lkIDA7aWYocj8uaW50ZXJvcCYmZS5pbnRlcm9wKXtjb25zdCB0PXsuLi5lLC4uLnIsaW50ZXJvcDplLmludGVyb3B9O3JldHVybiBkZWxldGUgdC5tYW5pZmVzdFVybCx0fXJldHVybiBlfWNvbnN0IFZpPWU9Pntjb25zdCB0PVJpKGUpO3JldHVybiB0Ll9pbnRlcm5hbFdvcmtzcGFjZURhdGE/LmJyb3dzZXJOYXZpZ2F0aW9uQnV0dG9ucyYmKHQud29ya3NwYWNlUGxhdGZvcm09ey4uLnQud29ya3NwYWNlUGxhdGZvcm0sYnJvd3Nlck5hdmlnYXRpb25CdXR0b25zOnQuX2ludGVybmFsV29ya3NwYWNlRGF0YS5icm93c2VyTmF2aWdhdGlvbkJ1dHRvbnN9LGRlbGV0ZSB0Ll9pbnRlcm5hbFdvcmtzcGFjZURhdGEuYnJvd3Nlck5hdmlnYXRpb25CdXR0b25zKSx0fSxIaT1lPT57Y29uc3QgdD1SaShlKTtyZXR1cm4gdC53b3Jrc3BhY2VQbGF0Zm9ybSYmKHQuX2ludGVybmFsV29ya3NwYWNlRGF0YT17Li4udC5faW50ZXJuYWxXb3Jrc3BhY2VEYXRhLC4uLnQud29ya3NwYWNlUGxhdGZvcm19LGRlbGV0ZSB0LndvcmtzcGFjZVBsYXRmb3JtKSx0fSxBaT17cmVsb2FkOlt7a2V5czpcIkN0cmwrUlwiLHByZXZlbnREZWZhdWx0OiEwfV0sYmFjazpbe2tleXM6XCJBbHQrTGVmdFwiLHByZXZlbnREZWZhdWx0OiEwfV0sZm9yd2FyZDpbe2tleXM6XCJBbHQrUmlnaHRcIixwcmV2ZW50RGVmYXVsdDohMH1dfSxUaT17cmVsb2FkOlt7a2V5czpcIkNtZCtSXCIscHJldmVudERlZmF1bHQ6ITB9XSxiYWNrOlt7a2V5czpcIkNtZCtbXCIscHJldmVudERlZmF1bHQ6ITB9LHtrZXlzOlwiQ21kK0xlZnRcIixwcmV2ZW50RGVmYXVsdDohMH1dLGZvcndhcmQ6W3trZXlzOlwiQ21kK11cIixwcmV2ZW50RGVmYXVsdDohMH0se2tleXM6XCJDbWQrUmlnaHRcIixwcmV2ZW50RGVmYXVsdDohMH1dfSxEaT1hc3luYygpPT5hd2FpdCBEYSgpP0FpOlRpLEJpPWFzeW5jIGU9Pntjb25zdCB0PWF3YWl0IGUuZ2V0Q3VycmVudFdpbmRvdygpLG49YXdhaXQgdC5nZXRPcHRpb25zKCkscj1uLndvcmtzcGFjZVBsYXRmb3JtPy5uYXZpZ2F0aW9uQnV0dG9ucztyZXR1cm4gci5lbmFibGVkJiYhci5ob3RrZXlzRGlzYWJsZWR9LFppPShlLHQpPT57Y29uc3Qgbj1maW4uVmlldy53cmFwU3luYyhlKTt0Py5yZWxvYWQmJihlPT57ZS5hZGRMaXN0ZW5lcihcImhvdGtleVwiLChhc3luYyB0PT57aWYoXCJrZXlEb3duXCI9PT10LmlucHV0VHlwZSl7Y29uc3Qgbj1hd2FpdCBCaShlKSxyPWF3YWl0IERhKCksbz10LmN0cmxLZXkmJiF0LmFsdEtleSYmIXQubWV0YUtleSYmIXQuc2hpZnRLZXkmJlwiclwiPT09dC5rZXksYT0hdC5jdHJsS2V5JiYhdC5hbHRLZXkmJnQubWV0YUtleSYmIXQuc2hpZnRLZXkmJlwiclwiPT09dC5rZXk7biYmKHI/bzphKSYmKGUucmVsb2FkKCkseWUoe3R5cGU6XCJWaWV3XCIsYWN0aW9uOlwiUmVsb2FkXCIsdmFsdWU6ZS5pZGVudGl0eS5uYW1lfSkpfX0pKX0pKG4pLHQ/LmJhY2smJihlPT57ZS5hZGRMaXN0ZW5lcihcImhvdGtleVwiLChhc3luYyB0PT57aWYoXCJrZXlEb3duXCI9PT10LmlucHV0VHlwZSl7Y29uc3Qgbj1hd2FpdCBCaShlKSxyPWF3YWl0IERhKCksbz0hdC5jdHJsS2V5JiZ0LmFsdEtleSYmIXQubWV0YUtleSYmIXQuc2hpZnRLZXkmJlwiQXJyb3dMZWZ0XCI9PT10LmtleSxhPSF0LmN0cmxLZXkmJiF0LmFsdEtleSYmdC5tZXRhS2V5JiYhdC5zaGlmdEtleSYmXCJBcnJvd0xlZnRcIj09PXQua2V5LGk9IXQuY3RybEtleSYmIXQuYWx0S2V5JiZ0Lm1ldGFLZXkmJiF0LnNoaWZ0S2V5JiZcIltcIj09PXQua2V5O24mJihyP286YXx8aSkmJihlLm5hdmlnYXRlQmFjaygpLHllKHt0eXBlOlwiVmlld1wiLGFjdGlvbjpcIkJhY2tcIix2YWx1ZTplLmlkZW50aXR5Lm5hbWV9KSl9fSkpfSkobiksdD8uZm9yd2FyZCYmKGU9PntlLmFkZExpc3RlbmVyKFwiaG90a2V5XCIsKGFzeW5jIHQ9PntpZihcImtleURvd25cIj09PXQuaW5wdXRUeXBlKXtjb25zdCBuPWF3YWl0IEJpKGUpLHI9YXdhaXQgRGEoKSxvPSF0LmN0cmxLZXkmJnQuYWx0S2V5JiYhdC5tZXRhS2V5JiYhdC5zaGlmdEtleSYmXCJBcnJvd1JpZ2h0XCI9PT10LmtleSxhPSF0LmN0cmxLZXkmJiF0LmFsdEtleSYmdC5tZXRhS2V5JiYhdC5zaGlmdEtleSYmXCJBcnJvd1JpZ2h0XCI9PT10LmtleSxpPSF0LmN0cmxLZXkmJiF0LmFsdEtleSYmdC5tZXRhS2V5JiYhdC5zaGlmdEtleSYmXCJdXCI9PT10LmtleTtuJiYocj9vOmF8fGkpJiYoZS5uYXZpZ2F0ZUZvcndhcmQoKSx5ZSh7dHlwZTpcIlZpZXdcIixhY3Rpb246XCJGb3J3YXJkXCIsdmFsdWU6ZS5pZGVudGl0eS5uYW1lfSkpfX0pKX0pKG4pfSwkaT0oZSx0KT0+UmkoZSkubWFwKChlPT4oXCJjb21wb25lbnRTdGF0ZVwiaW4gZT9lLmNvbXBvbmVudFN0YXRlPXQoZS5jb21wb25lbnRTdGF0ZSk6XCJjb250ZW50XCJpbiBlJiYoZS5jb250ZW50PSRpKGUuY29udGVudCx0KSksZSkpKSxOaT1lPT57aWYoZSl7Y29uc3QgdD1SaShlKTtyZXR1cm4gdC5jb250ZW50JiYodC5jb250ZW50PSRpKHQuY29udGVudCxWaSkpLHR9cmV0dXJuIGV9LEZpPWU9PntpZihlKXtjb25zdCB0PVJpKGUpO3JldHVybiB0LmNvbnRlbnQmJih0LmNvbnRlbnQ9JGkodC5jb250ZW50LEhpKSksdH1yZXR1cm4gZX07YXN5bmMgZnVuY3Rpb24gV2koe2FwcDplLHRhcmdldDp0fSl7Y29uc3Qgbj1maW4uUGxhdGZvcm0uZ2V0Q3VycmVudFN5bmMoKTtzd2l0Y2goZS5tYW5pZmVzdFR5cGUpe2Nhc2Ugcy5TbmFwc2hvdDpyZXR1cm4gbi5hcHBseVNuYXBzaG90KGUubWFuaWZlc3QpO2Nhc2Ugcy5WaWV3OnJldHVybiBhc3luYyBmdW5jdGlvbihlLHQpe2NvbnN0IG49ZmluLlBsYXRmb3JtLmdldEN1cnJlbnRTeW5jKCk7aWYoXCJ2aWV3XCI9PT10LmVudGl0eVR5cGUpe2NvbnN0IG49ZmluLlZpZXcud3JhcFN5bmModCkscj1hd2FpdCBuLmdldFBhcmVudExheW91dCgpO3JldHVybiBhd2FpdCByLnJlcGxhY2VWaWV3KHQse21hbmlmZXN0VXJsOmUubWFuaWZlc3QsdXJsOnZvaWQgMCx0YXJnZXQ6dm9pZCAwfSksbi5kZXN0cm95KCl9cmV0dXJuIG4uY3JlYXRlVmlldyh7bmFtZTp2b2lkIDAsdXJsOnZvaWQgMCxtYW5pZmVzdFVybDplLm1hbmlmZXN0LHRhcmdldDp2b2lkIDB9KX0oZSx0KTtjYXNlIHMuRXh0ZXJuYWw6cmV0dXJuIGZpbi5TeXN0ZW0ubGF1bmNoRXh0ZXJuYWxQcm9jZXNzKHtwYXRoOmUubWFuaWZlc3QsdXVpZDplLmFwcElkfSk7ZGVmYXVsdDpyZXR1cm4gZmluLkFwcGxpY2F0aW9uLnN0YXJ0RnJvbU1hbmlmZXN0KGUubWFuaWZlc3QpfX1sZXQgVWk7Y29uc3Qgemk9KCk9PntpZighVWkpe2NvbnN0IGU9VGUoYCR7XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGZpbiYmZmluLm1lLmlkZW50aXR5LnV1aWR9LWVudGVycHJpc2UtYXBwLWRpcmVjdG9yeWApO1VpPWUoKX1yZXR1cm4gVWl9O2FzeW5jIGZ1bmN0aW9uIEdpKGUpe2lmKCFhd2FpdCBmZShlLmlkZW50aXR5KSlyZXR1cm57fTtyZXR1cm4oYXdhaXQgemkoKSkuZGlzcGF0Y2gob3QuR2V0QXBwcyx7cXVlcnk6ZS5yZXEuc2VhcmNoUXVlcnl9KX1hc3luYyBmdW5jdGlvbiBLaShlKXtyZXR1cm4oYXdhaXQgemkoKSkuZGlzcGF0Y2gob3QuR2V0Q3VyYXRlZENvbnRlbnQsZSl9YXN5bmMgZnVuY3Rpb24gcWkoZSl7cmV0dXJuKGF3YWl0IHppKCkpLmRpc3BhdGNoKG90LkdldFJlY2VudGx5VmlzaXRlZCxlKX1hc3luYyBmdW5jdGlvbiBZaShlKXtjb25zdCB0PShhd2FpdCBpZSgpKS5tYXAoKGFzeW5jIGU9Pntjb25zdCB0PWF3YWl0IGUuZ2V0T3B0aW9ucygpO3Qud29ya3NwYWNlUGxhdGZvcm0/LnBhZ2VzJiZ0LmxheW91dCYmYXdhaXQoYXN5bmMgZT0+KGF3YWl0IHR0KGUpKS5kaXNwYXRjaChpdC5VcGRhdGVQYWdlc1dpbmRvd09wdGlvbnMpKShlLmlkZW50aXR5KX0pKTtyZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwodCksZT9lKCk6VmUoKX1sZXQgSmk9W107Y29uc3QgWGk9KCk9PkppO2NvbnN0IFFpPShlLHQpPT5uPT57Y29uc3Qgcj1udWxsIT09ZTtyZXR1cm4gY2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmlzV29ya3NwYWNlUGxhdGZvcm09KCk9Pih7aXNXb3Jrc3BhY2VQbGF0Zm9ybTohMCxpc0Jyb3dzZXJJbml0aWFsaXplZDohIWUsYW5hbHl0aWNzOntpc1N1cHBvcnRlZDohMH19KSx0aGlzLmRldGFjaFBhZ2VzRnJvbVdpbmRvdz1pcix0aGlzLmdldEFsbEF0dGFjaGVkUGFnZXM9WW4sdGhpcy5nZXRQYWdlc0ZvcldpbmRvdz1zcix0aGlzLmdldFBhZ2VGb3JXaW5kb3c9Y3IsdGhpcy5tYXJrVW5zYXZlZFBhZ2VzQXNTYXZlZEludGVybmFsPXdyLHRoaXMubGF1bmNoQXBwPVdpLHRoaXMuc2F2ZVBhZ2U9cnIsdGhpcy5zYXZlV29ya3NwYWNlPUVvLHRoaXMuY3JlYXRlU2F2ZWRQYWdlSW50ZXJuYWw9ZXIsdGhpcy51cGRhdGVTYXZlZFBhZ2VJbnRlcm5hbD1ucix0aGlzLmRlbGV0ZVNhdmVkUGFnZUludGVybmFsPXRyLHRoaXMucmVvcmRlclBhZ2VzRm9yV2luZG93PXVyLHRoaXMuZ2V0VW5pcXVlUGFnZVRpdGxlPXByLHRoaXMudXBkYXRlUGFnZUZvcldpbmRvdz1hcix0aGlzLmdldExhc3RGb2N1c2VkQnJvd3NlcldpbmRvdz10YSx0aGlzLmdldFRoZW1lcz1YaSx0aGlzLmludm9rZUN1c3RvbUFjdGlvbkludGVybmFsPWlhLHRoaXMucmVxdWVzdFF1aXRQbGF0Zm9ybURpYWxvZ0ludGVybmFsPUVpLHRoaXMuZ2V0Q3VycmVudFdvcmtzcGFjZT1fbyx0aGlzLnNldEFjdGl2ZVdvcmtzcGFjZT1Nbyx0aGlzLmdldExhbmd1YWdlUmVzb3VyY2VzSW50ZXJuYWw9R28sdGhpcy5vcGVuR2xvYmFsQ29udGV4dE1lbnVJbnRlcm5hbD10aGlzLm9wZW5HbG9iYWxDb250ZXh0TWVudUludGVybmFsLmJpbmQodGhpcyksdGhpcy5vcGVuR2xvYmFsQ29udGV4dE1lbnU9dGhpcy5vcGVuR2xvYmFsQ29udGV4dE1lbnUuYmluZCh0aGlzKSx0aGlzLmdldFNhdmVkUGFnZXM9dGhpcy5nZXRTYXZlZFBhZ2VzLmJpbmQodGhpcyksdGhpcy5nZXRTYXZlZFBhZ2U9dGhpcy5nZXRTYXZlZFBhZ2UuYmluZCh0aGlzKSx0aGlzLmNyZWF0ZVNhdmVkUGFnZT10aGlzLmNyZWF0ZVNhdmVkUGFnZS5iaW5kKHRoaXMpLHRoaXMudXBkYXRlU2F2ZWRQYWdlPXRoaXMudXBkYXRlU2F2ZWRQYWdlLmJpbmQodGhpcyksdGhpcy5kZWxldGVTYXZlZFBhZ2U9dGhpcy5kZWxldGVTYXZlZFBhZ2UuYmluZCh0aGlzKSx0aGlzLmhhbmRsZVBhZ2VDaGFuZ2VzPXRoaXMuaGFuZGxlUGFnZUNoYW5nZXMuYmluZCh0aGlzKSx0aGlzLmF0dGFjaFBhZ2VzVG9XaW5kb3c9dGhpcy5hdHRhY2hQYWdlc1RvV2luZG93LmJpbmQodGhpcyksdGhpcy5vcGVuVmlld1RhYkNvbnRleHRNZW51SW50ZXJuYWw9dGhpcy5vcGVuVmlld1RhYkNvbnRleHRNZW51SW50ZXJuYWwuYmluZCh0aGlzKSx0aGlzLm9wZW5WaWV3VGFiQ29udGV4dE1lbnU9dGhpcy5vcGVuVmlld1RhYkNvbnRleHRNZW51LmJpbmQodGhpcyksdGhpcy5vcGVuUGFnZVRhYkNvbnRleHRNZW51SW50ZXJuYWw9dGhpcy5vcGVuUGFnZVRhYkNvbnRleHRNZW51SW50ZXJuYWwuYmluZCh0aGlzKSx0aGlzLm9wZW5QYWdlVGFiQ29udGV4dE1lbnU9dGhpcy5vcGVuUGFnZVRhYkNvbnRleHRNZW51LmJpbmQodGhpcyksdGhpcy5nZXRTYXZlZFdvcmtzcGFjZXM9dGhpcy5nZXRTYXZlZFdvcmtzcGFjZXMuYmluZCh0aGlzKSx0aGlzLmdldFNhdmVkV29ya3NwYWNlPXRoaXMuZ2V0U2F2ZWRXb3Jrc3BhY2UuYmluZCh0aGlzKSx0aGlzLmNyZWF0ZVNhdmVkV29ya3NwYWNlPXRoaXMuY3JlYXRlU2F2ZWRXb3Jrc3BhY2UuYmluZCh0aGlzKSx0aGlzLnVwZGF0ZVNhdmVkV29ya3NwYWNlPXRoaXMudXBkYXRlU2F2ZWRXb3Jrc3BhY2UuYmluZCh0aGlzKSx0aGlzLmRlbGV0ZVNhdmVkV29ya3NwYWNlPXRoaXMuZGVsZXRlU2F2ZWRXb3Jrc3BhY2UuYmluZCh0aGlzKSx0aGlzLmdldEN1cnJlbnRXb3Jrc3BhY2U9dGhpcy5nZXRDdXJyZW50V29ya3NwYWNlLmJpbmQodGhpcyksdGhpcy5nZXREb2NrUHJvdmlkZXJDb25maWc9dGhpcy5nZXREb2NrUHJvdmlkZXJDb25maWcuYmluZCh0aGlzKSx0aGlzLnNhdmVEb2NrUHJvdmlkZXJDb25maWc9dGhpcy5zYXZlRG9ja1Byb3ZpZGVyQ29uZmlnLmJpbmQodGhpcyksdGhpcy5hcHBseVdvcmtzcGFjZT10aGlzLmFwcGx5V29ya3NwYWNlLmJpbmQodGhpcyksdGhpcy5zZXRBY3RpdmVXb3Jrc3BhY2U9dGhpcy5zZXRBY3RpdmVXb3Jrc3BhY2UuYmluZCh0aGlzKSx0aGlzLm9wZW5TYXZlQnV0dG9uQ29udGV4dE1lbnU9dGhpcy5vcGVuU2F2ZUJ1dHRvbkNvbnRleHRNZW51LmJpbmQodGhpcyksdGhpcy5vcGVuU2F2ZUJ1dHRvbkNvbnRleHRNZW51SW50ZXJuYWw9dGhpcy5vcGVuU2F2ZUJ1dHRvbkNvbnRleHRNZW51SW50ZXJuYWwuYmluZCh0aGlzKSx0aGlzLmdldFNlbGVjdGVkU2NoZW1lPXRoaXMuZ2V0U2VsZWN0ZWRTY2hlbWUuYmluZCh0aGlzKSx0aGlzLnNldFNlbGVjdGVkU2NoZW1lPXRoaXMuc2V0U2VsZWN0ZWRTY2hlbWUuYmluZCh0aGlzKSx0aGlzLmFuYWx5dGljc0ludGVybmFsPXRoaXMuYW5hbHl0aWNzSW50ZXJuYWwuYmluZCh0aGlzKSx0aGlzLmhhbmRsZUFuYWx5dGljcz10aGlzLmhhbmRsZUFuYWx5dGljcy5iaW5kKHRoaXMpLHRoaXMuZ2V0TGFuZ3VhZ2U9dGhpcy5nZXRMYW5ndWFnZS5iaW5kKHRoaXMpLHRoaXMuc2V0TGFuZ3VhZ2U9dGhpcy5zZXRMYW5ndWFnZS5iaW5kKHRoaXMpLHRoaXMuaGFuZGxlU2F2ZU1vZGFsT25QYWdlQ2xvc2U9dGhpcy5oYW5kbGVTYXZlTW9kYWxPblBhZ2VDbG9zZS5iaW5kKHRoaXMpLHRoaXMuc2hvdWxkUGFnZUNsb3NlPXRoaXMuc2hvdWxkUGFnZUNsb3NlLmJpbmQodGhpcyksdGhpcy5zaG91bGRXaW5kb3dDbG9zZT10aGlzLnNob3VsZFdpbmRvd0Nsb3NlLmJpbmQodGhpcyksdGhpcy5oYW5kbGVQYWdlc0FuZFdpbmRvd0Nsb3NlPXRoaXMuaGFuZGxlUGFnZXNBbmRXaW5kb3dDbG9zZS5iaW5kKHRoaXMpLHRoaXMuc2V0QWN0aXZlUGFnZT10aGlzLnNldEFjdGl2ZVBhZ2UuYmluZCh0aGlzKSx0aGlzLmhhbmRsZVBhZ2VDaGFuZ2VzPXRoaXMuaGFuZGxlUGFnZUNoYW5nZXMuYmluZCh0aGlzKSx0aGlzLmNvcHlQYWdlPXRoaXMuY29weVBhZ2UuYmluZCh0aGlzKSx0aGlzLmFkZFBhZ2U9dGhpcy5hZGRQYWdlLmJpbmQodGhpcyksdGhpcy5hZGREZWZhdWx0UGFnZT10aGlzLmFkZERlZmF1bHRQYWdlLmJpbmQodGhpcyksdGhpcy5tYXJrVW5zYXZlZFBhZ2VzQXNTYXZlZEludGVybmFsPXRoaXMubWFya1Vuc2F2ZWRQYWdlc0FzU2F2ZWRJbnRlcm5hbC5iaW5kKHRoaXMpLHRoaXMudHJhY2tSZW1vdmVkVGFiSW50ZXJuYWw9dGhpcy50cmFja1JlbW92ZWRUYWJJbnRlcm5hbC5iaW5kKHRoaXMpLHRoaXMucmVzdG9yZVJlbW92ZWRUYWJJbnRlcm5hbD10aGlzLnJlc3RvcmVSZW1vdmVkVGFiSW50ZXJuYWwuYmluZCh0aGlzKSx0aGlzLnRyYWNrVmlzaXRlZFNpdGVJbnRlcm5hbD10aGlzLnRyYWNrVmlzaXRlZFNpdGVJbnRlcm5hbC5iaW5kKHRoaXMpLHRoaXMuZ2V0UmVjZW50bHlWaXNpdGVkU2l0ZXNJbnRlcm5hbD10aGlzLmdldFJlY2VudGx5VmlzaXRlZFNpdGVzSW50ZXJuYWwuYmluZCh0aGlzKSx0aGlzLmdldEZyZXF1ZW50bHlWaXNpdGVkU2l0ZXNJbnRlcm5hbD10aGlzLmdldEZyZXF1ZW50bHlWaXNpdGVkU2l0ZXNJbnRlcm5hbC5iaW5kKHRoaXMpLHRoaXMuc2VhcmNoU2l0ZXNJbnRlcm5hbD10aGlzLnNlYXJjaFNpdGVzSW50ZXJuYWwuYmluZCh0aGlzKSx0aGlzLmdldEN1cmF0ZWRDb250ZW50SW50ZXJuYWw9dGhpcy5nZXRDdXJhdGVkQ29udGVudEludGVybmFsLmJpbmQodGhpcyksdGhpcy5oYW5kbGVSZXF1ZXN0TmF2aWdhdGlvbkludGVybmFsPXRoaXMuaGFuZGxlUmVxdWVzdE5hdmlnYXRpb25JbnRlcm5hbC5iaW5kKHRoaXMpLHRoaXMucmVmcmVzaEJvb2ttYXJrc0ludGVybmFsPXRoaXMucmVmcmVzaEJvb2ttYXJrc0ludGVybmFsLmJpbmQodGhpcyksdGhpcy5nZXROb3RpZmljYXRpb25zQ29uZmlnPXRoaXMuZ2V0Tm90aWZpY2F0aW9uc0NvbmZpZy5iaW5kKHRoaXMpfWFzeW5jIGFwcGx5V29ya3NwYWNlKC4uLmUpe3JldHVybiBPby5hcHBseSh0aGlzLGUpfWFzeW5jIGdldFNuYXBzaG90KCl7Y29uc3QgZT1yP2F3YWl0IFlpKChhc3luYygpPT5WZShhd2FpdCBzdXBlci5nZXRTbmFwc2hvdCh2b2lkIDAsZmluLm1lLmlkZW50aXR5KSkpKTphd2FpdCBWZShhd2FpdCBzdXBlci5nZXRTbmFwc2hvdCh2b2lkIDAsZmluLm1lLmlkZW50aXR5KSk7bGV0IHQ9ey4uLmUsd2luZG93czplLndpbmRvd3MuZmlsdGVyKGppKS5tYXAoSWUpfTtyZXR1cm4gdD0oZT0+e2NvbnN0IHQ9UmkoZSk7cmV0dXJuIHQud2luZG93cy5mb3JFYWNoKChlPT57ZS5sYXlvdXQmJihlLmxheW91dD1OaShlLmxheW91dCkpLGUud29ya3NwYWNlUGxhdGZvcm0/LnBhZ2VzPy5mb3JFYWNoKChlPT57ZT8ubGF5b3V0JiYoZS5sYXlvdXQ9TmkoZS5sYXlvdXQpKX0pKX0pKSx0fSkodCksdH1hc3luYyBnZXRWaWV3U25hcHNob3QoZSl7bGV0IHQ9YXdhaXQgc3VwZXIuZ2V0Vmlld1NuYXBzaG90KGUpO3JldHVybiB0PVZpKHQpLHR9YXN5bmMgYXBwbHlTbmFwc2hvdCh7c25hcHNob3Q6ZSxvcHRpb25zOnR9KXtsZXQgbj1lO1wic3RyaW5nXCI9PXR5cGVvZiBuJiYobj1hd2FpdCBzdXBlci5mZXRjaE1hbmlmZXN0KHttYW5pZmVzdFVybDpufSxmaW4ubWUuaWRlbnRpdHkpKTtjb25zdCBvPWZ1bmN0aW9uKGUpe2Zvcihjb25zdCB0IG9mIGUud2luZG93cylpZih0LndvcmtzcGFjZVBsYXRmb3JtPy5wYWdlcz8ubGVuZ3RoKXJldHVybiEwO3JldHVybiExfShuKTtpZighciYmbyl0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIHNuYXBzaG90IGNhbm5vdCBiZSBhcHBsaWVkIGFzIHRoZSBwbGF0Zm9ybSBoYXMgYmVlbiBpbml0aWFsaXplZCB3aXRob3V0IHRoZSBicm93c2VyLlwiKTtyZXR1cm4gbj0oZT0+e2NvbnN0IHQ9UmkoZSk7cmV0dXJuIHQud2luZG93cy5mb3JFYWNoKChlPT57ZS5sYXlvdXQ9RmkoZS5sYXlvdXQpLGUud29ya3NwYWNlUGxhdGZvcm0/LnBhZ2VzPy5mb3JFYWNoKChlPT57ZS5sYXlvdXQ9RmkoZS5sYXlvdXQpfSkpfSkpLHR9KShuKSxzdXBlci5hcHBseVNuYXBzaG90KHtzbmFwc2hvdDpuLG9wdGlvbnM6dH0pfWFzeW5jIGNyZWF0ZVdpbmRvdyh0LG4pe2lmKHImJlwidGVhcm91dFwiPT09dC5yZWFzb24pe2NvbnN0IGU9YXdhaXQgZmluLldpbmRvdy53cmFwU3luYyhuKS5nZXRPcHRpb25zKCkscj1lLndvcmtzcGFjZVBsYXRmb3JtPy53aW5kb3dUeXBlO3QudGFza2Jhckljb25Hcm91cD1lLnRhc2tiYXJJY29uR3JvdXAsciYmKHQud29ya3NwYWNlUGxhdGZvcm18fD17fSx0LndvcmtzcGFjZVBsYXRmb3JtLndpbmRvd1R5cGU9ZS53b3Jrc3BhY2VQbGF0Zm9ybS53aW5kb3dUeXBlLHI9PT14LlBsYXRmb3JtJiYodC51cmw9ZS51cmwpKX1pZighcnx8dC53b3Jrc3BhY2VQbGF0Zm9ybT8ud2luZG93VHlwZT09PXguUGxhdGZvcm0pe2NvbnN0IGU9YXdhaXQgc3VwZXIuY3JlYXRlV2luZG93KHQsbik7cmV0dXJuIHllKHt0eXBlOlwiV2luZG93XCIsYWN0aW9uOlwiT3BlbiBXaW5kb3dcIix2YWx1ZTplLmlkZW50aXR5Lm5hbWUsZGF0YTp7dXVpZDplLmlkZW50aXR5LnV1aWR9fSksZX12YXIgbztvPXthbGxvd2VkOiEwfSxDZXx8KENlPSEwLHZlKGdlLkJyb3dzZXIsbykpLCgoZT1bXSk9Pntjb25zdCB0PWUuZmlsdGVyKChlPT5lLnR5cGUhPT1iLkN1c3RvbSkpLG49bmV3IFNldCxyPVtdO2Zvcihjb25zdCBlIG9mIHQpbi5oYXMoZS50eXBlKSYmci5wdXNoKGUudHlwZSksbi5hZGQoZS50eXBlKTtpZihyLmxlbmd0aD4wKXtjb25zdCBlPXIuam9pbihcIiwgXCIpO3Rocm93IG5ldyBFcnJvcihgRW5jb3VudGVyZWQgYSBkdXBsaWNhdGUgXCIke2V9XCIgdG9vbGJhciBidXR0b24uIE5vIG1vcmUgdGhhbiBvbmUgaW5zdGFuY2Ugb2YgYSBidXR0b24gdHlwZSBtYXkgYmUgcHJvdmlkZWQuYCl9fSkodC53b3Jrc3BhY2VQbGF0Zm9ybT8udG9vbGJhck9wdGlvbnM/LmJ1dHRvbnMpO2xldCBhPShlPT5cIndvcmtzcGFjZVBsYXRmb3JtXCJpbiBlP2U6KCh7d29ya3N0YWNrczplLHBhZ2VzOnQsLi4ubn0pPT4oey4uLm4sd29ya3NwYWNlUGxhdGZvcm06e3BhZ2VzOnR8fGV8fG51bGx9fSkpKGUpKSh0KTtlPy5kZWZhdWx0V2luZG93T3B0aW9ucz8uaG90a2V5cyYmKGEuaG90a2V5cz1lLmRlZmF1bHRXaW5kb3dPcHRpb25zLmhvdGtleXMpLGE9YXdhaXQgUGkoYSxlLHt0aGVtZXM6WGkoKSxzZWxlY3RlZFNjaGVtZTp0aGlzLmdldFNlbGVjdGVkU2NoZW1lKCl9KSxhPWF3YWl0KGFzeW5jIGU9Pntjb25zdCB0PWF3YWl0IGZpbi5TeXN0ZW0uZ2V0TW9uaXRvckluZm8oKTtsZXQgbj10LnByaW1hcnlNb25pdG9yO2NvbnN0IHI9ZS5kZWZhdWx0TGVmdCxvPWUuZGVmYXVsdFRvcDt0Lm5vblByaW1hcnlNb25pdG9ycy5mb3JFYWNoKChlPT57Y29uc3R7dG9wOnQsYm90dG9tOmEsbGVmdDppLHJpZ2h0Omx9PWUuYXZhaWxhYmxlUmVjdDtyPj1pJiZyPD1sJiZvPj10JiZvPD1hJiYobj1lKX0pKTtjb25zdCBhPW4uYXZhaWxhYmxlUmVjdC5ib3R0b20tbi5hdmFpbGFibGVSZWN0LnRvcCxpPW4uYXZhaWxhYmxlUmVjdC5yaWdodC1uLmF2YWlsYWJsZVJlY3QubGVmdDtyZXR1cm4gZS5kZWZhdWx0SGVpZ2h0PU1hdGgubWluKGUuZGVmYXVsdEhlaWdodHx8ODAwLGEpLGUuZGVmYXVsdFdpZHRoPU1hdGgubWluKGUuZGVmYXVsdFdpZHRofHw4MDAsaSksZX0pKGEpO2NvbnN0IGk9YXdhaXQoZT0+YXN5bmModCxuKT0+e2xldCByPSExO2NvbnN0IG89YXdhaXQgZSh0LG4pO3JldHVybiB0Py53b3Jrc3BhY2VQbGF0Zm9ybT8uX2ludGVybmFsRGVmZXJTaG93T3B0aW9ucz8uZGVmZXJTaG93RW5hYmxlZD8oYXdhaXQgby5hZGRMaXN0ZW5lcihcInNob3ctcmVxdWVzdGVkXCIsKGFzeW5jKCk9PntpZihyKXJldHVybjtjb25zdCBlPWF3YWl0IG8uZ2V0T3B0aW9ucygpO2F3YWl0IG8udXBkYXRlT3B0aW9ucyh7d29ya3NwYWNlUGxhdGZvcm06ey4uLmUud29ya3NwYWNlUGxhdGZvcm0sX2ludGVybmFsRGVmZXJTaG93T3B0aW9uczp7Li4uZS53b3Jrc3BhY2VQbGF0Zm9ybS5faW50ZXJuYWxEZWZlclNob3dPcHRpb25zLGF1dG9TaG93OiEwfX19KSxyPSEwfSkpLG8pOm99KSgoKGUsdCk9PnN1cGVyLmNyZWF0ZVdpbmRvdyhlLHQpKSkoYSxuKTtyZXR1cm4geWUoe3R5cGU6XCJXaW5kb3dcIixhY3Rpb246XCJPcGVuIFdpbmRvd1wiLHZhbHVlOmkuaWRlbnRpdHkubmFtZSxkYXRhOnt1dWlkOmkuaWRlbnRpdHkudXVpZH19KSxpfWFzeW5jIGNyZWF0ZVZpZXcodCxuKXt0Lm9wdHM9UHQodC5vcHRzLGU/LmRlZmF1bHRWaWV3T3B0aW9ucyksZT8uZGVmYXVsdFZpZXdPcHRpb25zPy5ob3RrZXlzJiYodC5vcHRzLmhvdGtleXM9ZS5kZWZhdWx0Vmlld09wdGlvbnMuaG90a2V5cyksdC5vcHRzPWF3YWl0IElpKHQub3B0cyx0aGlzLmZldGNoTWFuaWZlc3QsbiksdC5vcHRzPWF3YWl0KGFzeW5jIGU9Pntjb25zdCB0PVJpKGUpLG49dC53b3Jrc3BhY2VQbGF0Zm9ybT8uYnJvd3Nlck5hdmlnYXRpb25CdXR0b25zO2lmKG4pe2NvbnN0IGU9T2JqZWN0LmtleXMobik7Zm9yKGNvbnN0IHIgb2YgZSlpZihuW3JdKXtjb25zdCBlPShhd2FpdCBEaSgpKVtyXTt0LmhvdGtleXM/dC5ob3RrZXlzLnB1c2goLi4uZSk6dC5ob3RrZXlzPVsuLi5lXX19cmV0dXJuIHR9KSh0Lm9wdHMpLHQub3B0cz1IaSh0Lm9wdHMpO2NvbnN0IHI9YXdhaXQgc3VwZXIuY3JlYXRlVmlldyh0LG4pO3JldHVybiBaaShyLmlkZW50aXR5LHQub3B0cy5faW50ZXJuYWxXb3Jrc3BhY2VEYXRhPy5icm93c2VyTmF2aWdhdGlvbkJ1dHRvbnMpLHJ9YXN5bmMgcmVwbGFjZVZpZXcodCxuKXtyZXR1cm4gdC5vcHRzLm5ld1ZpZXc9YXdhaXQgUHQodC5vcHRzLm5ld1ZpZXcsZT8uZGVmYXVsdFZpZXdPcHRpb25zKSx0Lm9wdHMubmV3Vmlldz1hd2FpdCBJaSh0Lm9wdHMubmV3Vmlldyx0aGlzLmZldGNoTWFuaWZlc3Qsbiksc3VwZXIucmVwbGFjZVZpZXcodCxuKX1hc3luYyByZXBsYWNlTGF5b3V0KGUsdCl7cmV0dXJuIGF3YWl0IGZlKHQpfHxkZWxldGUgZS5vcHRzLmxheW91dD8uZGltZW5zaW9ucyxzdXBlci5yZXBsYWNlTGF5b3V0KGUsdCl9YXN5bmMgZ2V0U2F2ZWRQYWdlKC4uLmUpe3JldHVybiBfYS5hcHBseSh0aGlzLGUpfWFzeW5jIGdldFNhdmVkUGFnZXMoLi4uZSl7cmV0dXJuIFBhLmFwcGx5KHRoaXMsZSl9YXN5bmMgY3JlYXRlU2F2ZWRQYWdlKC4uLmUpe3JldHVybiBFYS5hcHBseSh0aGlzLGUpfWFzeW5jIGRlbGV0ZVNhdmVkUGFnZSguLi5lKXtyZXR1cm4gamEuYXBwbHkodGhpcyxlKX1hc3luYyB1cGRhdGVTYXZlZFBhZ2UoLi4uZSl7cmV0dXJuIFJhLmFwcGx5KHRoaXMsZSl9YXN5bmMgZ2V0U2F2ZWRXb3Jrc3BhY2UoLi4uZSl7cmV0dXJuIG1pLmFwcGx5KHRoaXMsZSl9YXN5bmMgZ2V0U2F2ZWRXb3Jrc3BhY2VzKC4uLmUpe3JldHVybiB3aS5hcHBseSh0aGlzLGUpfWFzeW5jIGNyZWF0ZVNhdmVkV29ya3NwYWNlKC4uLmUpe3JldHVybiBiaS5hcHBseSh0aGlzLGUpfWFzeW5jIGRlbGV0ZVNhdmVkV29ya3NwYWNlKC4uLmUpe3JldHVybiB5aS5hcHBseSh0aGlzLGUpfWFzeW5jIHVwZGF0ZVNhdmVkV29ya3NwYWNlKC4uLmUpe3JldHVybiB4aS5hcHBseSh0aGlzLGUpfWFzeW5jIGdldERvY2tQcm92aWRlckNvbmZpZyguLi5lKXtyZXR1cm4gZ2kuYXBwbHkodGhpcyxlKX1hc3luYyBzYXZlRG9ja1Byb3ZpZGVyQ29uZmlnKC4uLmUpe3JldHVybiB2aS5hcHBseSh0aGlzLGUpfWFzeW5jIGF0dGFjaFBhZ2VzVG9XaW5kb3codCl7Y29uc3Qgbj1hd2FpdCBTaSh0LnBhZ2VzLGUpO2F3YWl0IFduKG4pLGF3YWl0IG9yKHsuLi50LHBhZ2VzOm59KX1hc3luYyBhZGRQYWdlKGUpe2NvbnN0IHQ9YXdhaXQgZmUoZS5pZGVudGl0eSksbj1hd2FpdCBZZShlLmlkZW50aXR5KSx7cGFnZTpyLGluc2VydGlvbkluZGV4Om99PWU7cj8udGl0bGV8fChyLnRpdGxlPWF3YWl0IG4uZGlzcGF0Y2goemUuR2V0VW5pcXVlUGFnZVRpdGxlLHZvaWQgMCkpO2NvbnN0IGE9KGF3YWl0IHRoaXMuZ2V0QWxsQXR0YWNoZWRQYWdlcygpKS5maW5kKChlPT5lLnBhZ2VJZD09PXIucGFnZUlkfHxlLnRpdGxlPT09ci50aXRsZSkpO2lmKGEpe2lmKGEucGFnZUlkPT09ci5wYWdlSWQpdGhyb3cgbmV3IEVycm9yKGBwYWdlIHdpdGggaWQgJHtyLnBhZ2VJZH0gaXMgYWxyZWFkeSBhdHRhY2hlZCB0byBhIGJyb3dzZXIgd2luZG93ICR7YS5wYXJlbnRJZGVudGl0eS5uYW1lfWApO2lmKCF0KXRocm93IG5ldyBFcnJvcihgYWRkUGFnZSB0aXRsZSBjb2xsaXNpb24sIHBhZ2Ugd2l0aCB0aXRsZSAke3IudGl0bGV9IGFscmVhZHkgZXhpc3RzLCBjb25mbGljdGluZyBwYWdlIGlkOiAke2EucGFnZUlkfSB3aXRoIHRpdGxlICR7YS50aXRsZX1gKX1jb25zdCBpPXtpZGVudGl0eTplLmlkZW50aXR5LHBhZ2VzOlt7Li4ucixtdWx0aUluc3RhbmNlVmlld0JlaGF2aW9yOlwiZHVwbGljYXRlXCJ9XSxpbnNlcnRpb25JbmRleDpvfTthd2FpdCB0aGlzLmF0dGFjaFBhZ2VzVG9XaW5kb3coaSl9YXN5bmMgYWRkRGVmYXVsdFBhZ2UoZSl7YXdhaXQgdGhpcy5hZGRQYWdlKGUpLGF3YWl0IHRoaXMuc2V0QWN0aXZlUGFnZSh7aWRlbnRpdHk6ZS5pZGVudGl0eSxwYWdlSWQ6ZS5wYWdlLnBhZ2VJZH0pfWFzeW5jIHNldEFjdGl2ZVBhZ2UoLi4uZSl7cmV0dXJuIGxyLmFwcGx5KHRoaXMsZSl9YXN5bmMgb3Blbkdsb2JhbENvbnRleHRNZW51SW50ZXJuYWwoLi4uZSl7cmV0dXJuIHVpLmFwcGx5KHRoaXMsZSl9YXN5bmMgb3Blbkdsb2JhbENvbnRleHRNZW51KC4uLmUpe3JldHVybiBjaS5hcHBseSh0aGlzLFsuLi5lLHBhLkdsb2JhbE1lbnUsc2kuQm90dG9tUmlnaHRdKX1hc3luYyBvcGVuVmlld1RhYkNvbnRleHRNZW51SW50ZXJuYWwoLi4uZSl7cmV0dXJuIGRpLmFwcGx5KHRoaXMsZSl9YXN5bmMgb3BlblZpZXdUYWJDb250ZXh0TWVudSguLi5lKXtyZXR1cm4gY2kuYXBwbHkodGhpcyxbLi4uZSxwYS5Db250ZXh0TWVudV0pfWFzeW5jIG9wZW5QYWdlVGFiQ29udGV4dE1lbnVJbnRlcm5hbCguLi5lKXtyZXR1cm4gcGkuYXBwbHkodGhpcyxlKX1hc3luYyBvcGVuUGFnZVRhYkNvbnRleHRNZW51KC4uLmUpe3JldHVybiBjaS5hcHBseSh0aGlzLFsuLi5lLHBhLkNvbnRleHRNZW51XSl9YXN5bmMgb3BlblNhdmVCdXR0b25Db250ZXh0TWVudSguLi5lKXtyZXR1cm4gY2kuYXBwbHkodGhpcyxlKX1hc3luYyBvcGVuU2F2ZUJ1dHRvbkNvbnRleHRNZW51SW50ZXJuYWwoLi4uZSl7cmV0dXJuIGZpLmFwcGx5KHRoaXMsZSl9Z2V0U2VsZWN0ZWRTY2hlbWUoLi4uZSl7cmV0dXJuIE90LmFwcGx5KHRoaXMsZSl9YXN5bmMgc2V0U2VsZWN0ZWRTY2hlbWUoLi4uZSl7cmV0dXJuIFN0LmFwcGx5KHRoaXMsZSl9YXN5bmMgaGFuZGxlUGFnZUNoYW5nZXMoLi4uZSl7cmV0dXJuIG1yLmFwcGx5KHRoaXMsZSl9YXN5bmMgYW5hbHl0aWNzSW50ZXJuYWwoLi4uZSl7cmV0dXJuIFByLmFwcGx5KHRoaXMsZSl9YXN5bmMgaGFuZGxlQW5hbHl0aWNzKC4uLmUpe31hc3luYyBoYW5kbGVTYXZlTW9kYWxPblBhZ2VDbG9zZSguLi5lKXtyZXR1cm4gZnIuYXBwbHkodGhpcyxlKX1hc3luYyBzaG91bGRQYWdlQ2xvc2UoLi4uZSl7cmV0dXJuIGhyLmFwcGx5KHRoaXMsZSl9YXN5bmMgc2hvdWxkV2luZG93Q2xvc2UoLi4uZSl7cmV0dXJuIGdyLmFwcGx5KHRoaXMsZSl9aGFuZGxlUGFnZXNBbmRXaW5kb3dDbG9zZSguLi5lKXtyZXR1cm4gdnIuYXBwbHkodGhpcyxlKX1hc3luYyBjb3B5UGFnZSguLi5lKXtyZXR1cm4gQ3IuYXBwbHkodGhpcyxlKX1hc3luYyBnZXROb3RpZmljYXRpb25zQ29uZmlnKCl7cmV0dXJuIHR9YXN5bmMgc2V0TGFuZ3VhZ2UoLi4uZSl7cmV0dXJuIHpvLmFwcGx5KHRoaXMsZSl9YXN5bmMgZ2V0TGFuZ3VhZ2UoKXtyZXR1cm4gVW8uYXBwbHkodGhpcyl9YXN5bmMgdHJhY2tSZW1vdmVkVGFiSW50ZXJuYWwoLi4uZSl7cmV0dXJuIFZhLmFwcGx5KHRoaXMsZSl9YXN5bmMgcmVzdG9yZVJlbW92ZWRUYWJJbnRlcm5hbCgpe2NvbnN0IGU9YXdhaXQoYXN5bmMoKT0+e2NvbnN0IGU9YXdhaXQgeWEoSWEpO2lmKGUubGVuZ3RoPjApe2NvbnN0IHQ9TWF0aC5tYXgoLi4uZSksbj1hd2FpdCBDYSh0LElhKTtyZXR1cm4gYXdhaXQgd2EodCxJYSksbn19KSgpO2lmKGU/LnBhZ2UpaWYoYXdhaXQgc2UoZS5pZGVudGl0eSkpe2NvbnN0IHQ9THQoKS5Ccm93c2VyLndyYXBTeW5jKGUuaWRlbnRpdHkpO2F3YWl0IHQuYWRkUGFnZShlLnBhZ2UpLGF3YWl0IHQuc2V0QWN0aXZlUGFnZShlLnBhZ2UucGFnZUlkKX1lbHNlIEx0KCkuY3JlYXRlV2luZG93KHtuYW1lOmUuaWRlbnRpdHkubmFtZSx3b3Jrc3BhY2VQbGF0Zm9ybTp7cGFnZXM6W2UucGFnZV0sd2luZG93VHlwZTp4LkJyb3dzZXJ9fSk7ZWxzZSBlPy53aW5kb3cmJkx0KCkuY3JlYXRlV2luZG93KHt3b3Jrc3BhY2VQbGF0Zm9ybTp7cGFnZXM6ZS53aW5kb3cucGFnZXMsd2luZG93VHlwZTp4LkJyb3dzZXJ9fSl9YXN5bmMgdHJhY2tWaXNpdGVkU2l0ZUludGVybmFsKC4uLmUpe3JldHVybiBBYS5hcHBseSh0aGlzLGUpfWFzeW5jIGdldFJlY2VudGx5VmlzaXRlZFNpdGVzSW50ZXJuYWwoLi4uZSl7cmV0dXJuIGF3YWl0IHFpLmFwcGx5KHRoaXMsZSl9YXN5bmMgZ2V0RnJlcXVlbnRseVZpc2l0ZWRTaXRlc0ludGVybmFsKC4uLmUpe3JldHVybiBUYS5hcHBseSh0aGlzLGUpfWFzeW5jIHNlYXJjaFNpdGVzSW50ZXJuYWwoLi4uZSl7cmV0dXJuIGF3YWl0IEdpLmFwcGx5KHRoaXMsZSl9YXN5bmMgZ2V0Q3VyYXRlZENvbnRlbnRJbnRlcm5hbCguLi5lKXtyZXR1cm4gYXdhaXQgS2kuYXBwbHkodGhpcyxlKX1hc3luYyBoYW5kbGVSZXF1ZXN0TmF2aWdhdGlvbkludGVybmFsKC4uLmUpe31hc3luYyByZWZyZXNoQm9va21hcmtzSW50ZXJuYWwoKXsoYXdhaXQgTHQoKS5Ccm93c2VyLmdldEFsbFdpbmRvd3MoKSkuZm9yRWFjaCgoYXN5bmMoe2lkZW50aXR5OmV9KT0+eyhhd2FpdCB0dChlKSkuZGlzcGF0Y2goaXQuUmVmcmVzaEJvb2ttYXJrc0ludGVybmFsKX0pKX19fTtmdW5jdGlvbiBlbChlLHQsbil7Y29uc3Qgcj1RaShlLG4pO3RyeXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P2U9PnQocihlKSk6QXJyYXkuaXNBcnJheSh0KT9bLi4udCxyXTplPT5uZXcocihlKSl9Y2F0Y2goZSl7dGhyb3cgbmV3IEVycm9yKFwiV29ya3NwYWNlUGxhdGZvcm0uaW5pdCBFcnJvcjpcIixlKX19YXN5bmMgZnVuY3Rpb24gdGwoKXtvYSgpLGFzeW5jIGZ1bmN0aW9uKCl7Y29uc3QgZT1maW4uQXBwbGljYXRpb24uZ2V0Q3VycmVudFN5bmMoKTthd2FpdCBlLmFkZExpc3RlbmVyKFwid2luZG93LWZvY3VzZWRcIixuYSl9KCk7TW8oYXdhaXQgTG8oKSl9bGV0IG5sO2Z1bmN0aW9uIHJsKHtvdmVycmlkZUNhbGxiYWNrOmUsaW50ZXJvcE92ZXJyaWRlOnQsYnJvd3NlcjpuLG5vdGlmaWNhdGlvbnM6cixhbmFseXRpY3M6byxpbnRlZ3JhdGlvbnM6YT1bXSx3b3Jrc3BhY2VBc2FyOml9KXtpZighTCl0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgYmUgdXNlZCBvdXRzaWRlIGFuIE9wZW5GaW4gZW52LlwiKTtyZXR1cm4gbmx8fChubD0oYXN5bmMoKT0+e2NvbnN0IGw9ZmluLlBsYXRmb3JtLmdldEN1cnJlbnRTeW5jKCk7dmFyIHMsYztpZihsLm9uY2UoXCJwbGF0Zm9ybS1hcGktcmVhZHlcIiwoKCk9PnRsKCkpKSxsLm9uKFwid2luZG93LXNob3ctYWxsLWRvd25sb2Fkc1wiLCgoe25hbWU6ZSx1dWlkOnR9KT0+e1pvKHtuYW1lOmUsdXVpZDp0fSl9KSksbj8udGl0bGUmJihzPW4udGl0bGUscmk9cyksRXIobyksaSl7Y29uc3QgZT1gd29ya3NwYWNlLSR7ZW5jb2RlVVJJQ29tcG9uZW50KGZpbi5tZS51dWlkKX1gLHtiYXNlVXJsOnR9PWF3YWl0IGZpbi5TeXN0ZW0uc2VydmVBc3NldCh7Li4uaSxob3N0TmFtZTplfSk7Vz10fWF3YWl0IGZpbi5QbGF0Zm9ybS5pbml0KHtvdmVycmlkZUNhbGxiYWNrOmVsKG4sZXx8bj8ub3ZlcnJpZGVDYWxsYmFjayxyKSxpbnRlcm9wT3ZlcnJpZGU6ZWEodHx8bj8uaW50ZXJvcE92ZXJyaWRlLG4pfSksYz17YWxsb3dlZDohMH0sdmUoZ2UuUGxhdGZvcm0sYyksYXdhaXQgUHJvbWlzZS5hbGwoYS5tYXAoKGFzeW5jIGU9PnsoKGUsdCk9Pnt2ZShgJHtnZS5NaWNyb2Zsb3d9OiR7ZX1gLHQsXCJpbnRlZ3JhdGlvbi1mZWF0dXJlXCIpfSkoZS53b3JrZmxvd0ludGVncmF0aW9uTmFtZSx7YWxsb3dlZDohMCxhcGlWZXJzaW9uOkR9KSxhd2FpdCBlLl9pbml0aWFsaXplV29ya2Zsb3dzKCl9KSkpLGhlKG4pJiYoTm49ITApfSkoKSksbmx9Y29uc3Qgb2w9YXN5bmMoe3RoZW1lOmUsY3VzdG9tQWN0aW9uczp0LGxhbmd1YWdlOm4sLi4ucn0pPT57Y29uc3Qgbz1ELnNwbGl0KFwiLlwiKS5tYXAoKGU9PnBhcnNlSW50KGUpKSksYT1hd2FpdChhc3luYyBlPT57aWYoKGF3YWl0IEYoKSkuZGlzYWJsZVJ1bnRpbWVWYWxpZGF0aW9uKXJldHVybiEwO2lmKGF3YWl0IGZlKCkpcmV0dXJuITA7Y29uc3QgdD0oYXdhaXQgZmluLlN5c3RlbS5nZXRWZXJzaW9uKCkpLnNwbGl0KFwiLlwiKS5tYXAoKGU9PnBhcnNlSW50KGUpKSksbj1lLmV2ZXJ5KCgobixyKT0+IShyPDMpfHx0W3JdPT09ZVtyXSkpO3JldHVybiBufSkobyk7aWYoIWEpdGhyb3cgbmV3IEVycm9yKGBSdW50aW1lIHZlcnNpb24gaXMgbm90IHN1cHBvcnRlZC4gICR7b1swXX0uJHtvWzFdfS4ke29bMl19LiogaXMgcmVxdWlyZWRgKTt2YXIgaTtyZXR1cm4gZSYmKCFmdW5jdGlvbihlKXtjb25zdCB0PWU9PntpZighZS5pbmNsdWRlcyhcIiNcIikmJiFlLmluY2x1ZGVzKFwicmdiXCIpJiYhZS5pbmNsdWRlcyhcImhzbFwiKSl0aHJvdyBuZXcgRXJyb3IoXCJCYWNrZ3JvdW5kIHByaW1hcnkgY29sb3IgaXMgbm90IHRoZSByaWdodCBmb3JtYXQuXCIpfTtlLmZvckVhY2goKGU9PntcInBhbGV0dGVcImluIGUmJnQoZS5wYWxldHRlLmJhY2tncm91bmRQcmltYXJ5KSxcInBhbGV0dGVzXCJpbiBlJiYodChlLnBhbGV0dGVzLmRhcmsuYmFja2dyb3VuZFByaW1hcnkpLHQoZS5wYWxldHRlcy5saWdodC5iYWNrZ3JvdW5kUHJpbWFyeSkpfSkpLEppPWV9KGUpLGk9e2FsbG93ZWQ6ITB9LHZlKGdlLlRoZW1pbmcsaSkpLHQmJihhYT10KSxhd2FpdCBLbyhuPy5pbml0aWFsTGFuZ3VhZ2UpLHJsKHIpfX0pKCksbW9kdWxlLmV4cG9ydHM9cn0pKCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCIvKiEgRm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gcGxlYXNlIHNlZSBpbmRleC5qcy5MSUNFTlNFLnR4dCAqL1xuKCgpPT57dmFyIGU9ezUzMDQ6KGUsdCxuKT0+e3ZhciByPXs4NTk0OihlLHQsbik9PntuLmQodCx7WjooKT0+b30pO3ZhciByPS9eKChjaGlsZHJlbnxkYW5nZXJvdXNseVNldElubmVySFRNTHxrZXl8cmVmfGF1dG9Gb2N1c3xkZWZhdWx0VmFsdWV8ZGVmYXVsdENoZWNrZWR8aW5uZXJIVE1MfHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ3xzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmd8dmFsdWVMaW5rfGFjY2VwdHxhY2NlcHRDaGFyc2V0fGFjY2Vzc0tleXxhY3Rpb258YWxsb3d8YWxsb3dVc2VyTWVkaWF8YWxsb3dQYXltZW50UmVxdWVzdHxhbGxvd0Z1bGxTY3JlZW58YWxsb3dUcmFuc3BhcmVuY3l8YWx0fGFzeW5jfGF1dG9Db21wbGV0ZXxhdXRvUGxheXxjYXB0dXJlfGNlbGxQYWRkaW5nfGNlbGxTcGFjaW5nfGNoYWxsZW5nZXxjaGFyU2V0fGNoZWNrZWR8Y2l0ZXxjbGFzc0lEfGNsYXNzTmFtZXxjb2xzfGNvbFNwYW58Y29udGVudHxjb250ZW50RWRpdGFibGV8Y29udGV4dE1lbnV8Y29udHJvbHN8Y29udHJvbHNMaXN0fGNvb3Jkc3xjcm9zc09yaWdpbnxkYXRhfGRhdGVUaW1lfGRlY29kaW5nfGRlZmF1bHR8ZGVmZXJ8ZGlyfGRpc2FibGVkfGRpc2FibGVQaWN0dXJlSW5QaWN0dXJlfGRvd25sb2FkfGRyYWdnYWJsZXxlbmNUeXBlfGZvcm18Zm9ybUFjdGlvbnxmb3JtRW5jVHlwZXxmb3JtTWV0aG9kfGZvcm1Ob1ZhbGlkYXRlfGZvcm1UYXJnZXR8ZnJhbWVCb3JkZXJ8aGVhZGVyc3xoZWlnaHR8aGlkZGVufGhpZ2h8aHJlZnxocmVmTGFuZ3xodG1sRm9yfGh0dHBFcXVpdnxpZHxpbnB1dE1vZGV8aW50ZWdyaXR5fGlzfGtleVBhcmFtc3xrZXlUeXBlfGtpbmR8bGFiZWx8bGFuZ3xsaXN0fGxvYWRpbmd8bG9vcHxsb3d8bWFyZ2luSGVpZ2h0fG1hcmdpbldpZHRofG1heHxtYXhMZW5ndGh8bWVkaWF8bWVkaWFHcm91cHxtZXRob2R8bWlufG1pbkxlbmd0aHxtdWx0aXBsZXxtdXRlZHxuYW1lfG5vbmNlfG5vVmFsaWRhdGV8b3BlbnxvcHRpbXVtfHBhdHRlcm58cGxhY2Vob2xkZXJ8cGxheXNJbmxpbmV8cG9zdGVyfHByZWxvYWR8cHJvZmlsZXxyYWRpb0dyb3VwfHJlYWRPbmx5fHJlZmVycmVyUG9saWN5fHJlbHxyZXF1aXJlZHxyZXZlcnNlZHxyb2xlfHJvd3N8cm93U3BhbnxzYW5kYm94fHNjb3BlfHNjb3BlZHxzY3JvbGxpbmd8c2VhbWxlc3N8c2VsZWN0ZWR8c2hhcGV8c2l6ZXxzaXplc3xzbG90fHNwYW58c3BlbGxDaGVja3xzcmN8c3JjRG9jfHNyY0xhbmd8c3JjU2V0fHN0YXJ0fHN0ZXB8c3R5bGV8c3VtbWFyeXx0YWJJbmRleHx0YXJnZXR8dGl0bGV8dHlwZXx1c2VNYXB8dmFsdWV8d2lkdGh8d21vZGV8d3JhcHxhYm91dHxkYXRhdHlwZXxpbmxpc3R8cHJlZml4fHByb3BlcnR5fHJlc291cmNlfHR5cGVvZnx2b2NhYnxhdXRvQ2FwaXRhbGl6ZXxhdXRvQ29ycmVjdHxhdXRvU2F2ZXxjb2xvcnxpbmVydHxpdGVtUHJvcHxpdGVtU2NvcGV8aXRlbVR5cGV8aXRlbUlEfGl0ZW1SZWZ8b258cmVzdWx0c3xzZWN1cml0eXx1bnNlbGVjdGFibGV8YWNjZW50SGVpZ2h0fGFjY3VtdWxhdGV8YWRkaXRpdmV8YWxpZ25tZW50QmFzZWxpbmV8YWxsb3dSZW9yZGVyfGFscGhhYmV0aWN8YW1wbGl0dWRlfGFyYWJpY0Zvcm18YXNjZW50fGF0dHJpYnV0ZU5hbWV8YXR0cmlidXRlVHlwZXxhdXRvUmV2ZXJzZXxhemltdXRofGJhc2VGcmVxdWVuY3l8YmFzZWxpbmVTaGlmdHxiYXNlUHJvZmlsZXxiYm94fGJlZ2lufGJpYXN8Ynl8Y2FsY01vZGV8Y2FwSGVpZ2h0fGNsaXB8Y2xpcFBhdGhVbml0c3xjbGlwUGF0aHxjbGlwUnVsZXxjb2xvckludGVycG9sYXRpb258Y29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyc3xjb2xvclByb2ZpbGV8Y29sb3JSZW5kZXJpbmd8Y29udGVudFNjcmlwdFR5cGV8Y29udGVudFN0eWxlVHlwZXxjdXJzb3J8Y3h8Y3l8ZHxkZWNlbGVyYXRlfGRlc2NlbnR8ZGlmZnVzZUNvbnN0YW50fGRpcmVjdGlvbnxkaXNwbGF5fGRpdmlzb3J8ZG9taW5hbnRCYXNlbGluZXxkdXJ8ZHh8ZHl8ZWRnZU1vZGV8ZWxldmF0aW9ufGVuYWJsZUJhY2tncm91bmR8ZW5kfGV4cG9uZW50fGV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWR8ZmlsbHxmaWxsT3BhY2l0eXxmaWxsUnVsZXxmaWx0ZXJ8ZmlsdGVyUmVzfGZpbHRlclVuaXRzfGZsb29kQ29sb3J8Zmxvb2RPcGFjaXR5fGZvY3VzYWJsZXxmb250RmFtaWx5fGZvbnRTaXplfGZvbnRTaXplQWRqdXN0fGZvbnRTdHJldGNofGZvbnRTdHlsZXxmb250VmFyaWFudHxmb250V2VpZ2h0fGZvcm1hdHxmcm9tfGZyfGZ4fGZ5fGcxfGcyfGdseXBoTmFtZXxnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbHxnbHlwaE9yaWVudGF0aW9uVmVydGljYWx8Z2x5cGhSZWZ8Z3JhZGllbnRUcmFuc2Zvcm18Z3JhZGllbnRVbml0c3xoYW5naW5nfGhvcml6QWR2WHxob3Jpek9yaWdpblh8aWRlb2dyYXBoaWN8aW1hZ2VSZW5kZXJpbmd8aW58aW4yfGludGVyY2VwdHxrfGsxfGsyfGszfGs0fGtlcm5lbE1hdHJpeHxrZXJuZWxVbml0TGVuZ3RofGtlcm5pbmd8a2V5UG9pbnRzfGtleVNwbGluZXN8a2V5VGltZXN8bGVuZ3RoQWRqdXN0fGxldHRlclNwYWNpbmd8bGlnaHRpbmdDb2xvcnxsaW1pdGluZ0NvbmVBbmdsZXxsb2NhbHxtYXJrZXJFbmR8bWFya2VyTWlkfG1hcmtlclN0YXJ0fG1hcmtlckhlaWdodHxtYXJrZXJVbml0c3xtYXJrZXJXaWR0aHxtYXNrfG1hc2tDb250ZW50VW5pdHN8bWFza1VuaXRzfG1hdGhlbWF0aWNhbHxtb2RlfG51bU9jdGF2ZXN8b2Zmc2V0fG9wYWNpdHl8b3BlcmF0b3J8b3JkZXJ8b3JpZW50fG9yaWVudGF0aW9ufG9yaWdpbnxvdmVyZmxvd3xvdmVybGluZVBvc2l0aW9ufG92ZXJsaW5lVGhpY2tuZXNzfHBhbm9zZTF8cGFpbnRPcmRlcnxwYXRoTGVuZ3RofHBhdHRlcm5Db250ZW50VW5pdHN8cGF0dGVyblRyYW5zZm9ybXxwYXR0ZXJuVW5pdHN8cG9pbnRlckV2ZW50c3xwb2ludHN8cG9pbnRzQXRYfHBvaW50c0F0WXxwb2ludHNBdFp8cHJlc2VydmVBbHBoYXxwcmVzZXJ2ZUFzcGVjdFJhdGlvfHByaW1pdGl2ZVVuaXRzfHJ8cmFkaXVzfHJlZlh8cmVmWXxyZW5kZXJpbmdJbnRlbnR8cmVwZWF0Q291bnR8cmVwZWF0RHVyfHJlcXVpcmVkRXh0ZW5zaW9uc3xyZXF1aXJlZEZlYXR1cmVzfHJlc3RhcnR8cmVzdWx0fHJvdGF0ZXxyeHxyeXxzY2FsZXxzZWVkfHNoYXBlUmVuZGVyaW5nfHNsb3BlfHNwYWNpbmd8c3BlY3VsYXJDb25zdGFudHxzcGVjdWxhckV4cG9uZW50fHNwZWVkfHNwcmVhZE1ldGhvZHxzdGFydE9mZnNldHxzdGREZXZpYXRpb258c3RlbWh8c3RlbXZ8c3RpdGNoVGlsZXN8c3RvcENvbG9yfHN0b3BPcGFjaXR5fHN0cmlrZXRocm91Z2hQb3NpdGlvbnxzdHJpa2V0aHJvdWdoVGhpY2tuZXNzfHN0cmluZ3xzdHJva2V8c3Ryb2tlRGFzaGFycmF5fHN0cm9rZURhc2hvZmZzZXR8c3Ryb2tlTGluZWNhcHxzdHJva2VMaW5lam9pbnxzdHJva2VNaXRlcmxpbWl0fHN0cm9rZU9wYWNpdHl8c3Ryb2tlV2lkdGh8c3VyZmFjZVNjYWxlfHN5c3RlbUxhbmd1YWdlfHRhYmxlVmFsdWVzfHRhcmdldFh8dGFyZ2V0WXx0ZXh0QW5jaG9yfHRleHREZWNvcmF0aW9ufHRleHRSZW5kZXJpbmd8dGV4dExlbmd0aHx0b3x0cmFuc2Zvcm18dTF8dTJ8dW5kZXJsaW5lUG9zaXRpb258dW5kZXJsaW5lVGhpY2tuZXNzfHVuaWNvZGV8dW5pY29kZUJpZGl8dW5pY29kZVJhbmdlfHVuaXRzUGVyRW18dkFscGhhYmV0aWN8dkhhbmdpbmd8dklkZW9ncmFwaGljfHZNYXRoZW1hdGljYWx8dmFsdWVzfHZlY3RvckVmZmVjdHx2ZXJzaW9ufHZlcnRBZHZZfHZlcnRPcmlnaW5YfHZlcnRPcmlnaW5ZfHZpZXdCb3h8dmlld1RhcmdldHx2aXNpYmlsaXR5fHdpZHRoc3x3b3JkU3BhY2luZ3x3cml0aW5nTW9kZXx4fHhIZWlnaHR8eDF8eDJ8eENoYW5uZWxTZWxlY3Rvcnx4bGlua0FjdHVhdGV8eGxpbmtBcmNyb2xlfHhsaW5rSHJlZnx4bGlua1JvbGV8eGxpbmtTaG93fHhsaW5rVGl0bGV8eGxpbmtUeXBlfHhtbEJhc2V8eG1sbnN8eG1sbnNYbGlua3x4bWxMYW5nfHhtbFNwYWNlfHl8eTF8eTJ8eUNoYW5uZWxTZWxlY3Rvcnx6fHpvb21BbmRQYW58Zm9yfGNsYXNzfGF1dG9mb2N1cyl8KChbRGRdW0FhXVtUdF1bQWFdfFtBYV1bUnJdW0lpXVtBYV18eCktLiopKSQvO2NvbnN0IG89KGk9e30sZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWlbZV0mJihpW2VdPSh0PWUsci50ZXN0KHQpfHwxMTE9PT10LmNoYXJDb2RlQXQoMCkmJjExMD09PXQuY2hhckNvZGVBdCgxKSYmdC5jaGFyQ29kZUF0KDIpPDkxKSksaVtlXTt2YXIgdH0pO3ZhciBpfSwxNTIxOihlLHQsbik9PntuLnIodCksbi5kKHQse0FjdGl2aXR5TG9nSWNvbjooKT0+aSxBbGlnbkJhc2VsaW5lSWNvbjooKT0+YSxBbGlnbkJvdHRvbUljb246KCk9PmwsQWxpZ25DZW50ZXJIb3Jpem9udGFsbHlJY29uOigpPT5zLEFsaWduQ2VudGVyVmVydGljYWxseUljb246KCk9PmMsQWxpZ25MZWZ0SWNvbjooKT0+dSxBbGlnblJpZ2h0SWNvbjooKT0+ZixBbGlnblRvcEljb246KCk9PmQsQWxsU2lkZXNJY29uOigpPT5wLEFuZ2xlSWNvbjooKT0+aCxBcmNoaXZlSWNvbjooKT0+ZyxBcnJvd0JvdHRvbUxlZnRJY29uOigpPT52LEFycm93Qm90dG9tUmlnaHRJY29uOigpPT5tLEFycm93RG93bkljb246KCk9PkMsQXJyb3dMZWZ0SWNvbjooKT0+eSxBcnJvd1JpZ2h0SWNvbjooKT0+dyxBcnJvd1RvcExlZnRJY29uOigpPT5iLEFycm93VG9wUmlnaHRJY29uOigpPT54LEFycm93VXBJY29uOigpPT5fLEFzcGVjdFJhdGlvSWNvbjooKT0+TyxBdmF0YXJJY29uOigpPT5MLEJhY2twYWNrSWNvbjooKT0+RSxCYWRnZUljb246KCk9PlMsQmFyQ2hhcnRJY29uOigpPT5qLEJlbGxJY29uOigpPT5NLEJsZW5kaW5nTW9kZUljb246KCk9PmssQm9va21hcmtJY29uOigpPT5SLEJvcmRlckFsbEljb246KCk9PlAsQm9yZGVyQm90dG9tSWNvbjooKT0+SSxCb3JkZXJEYXNoZWRJY29uOigpPT5BLEJvcmRlckRvdHRlZEljb246KCk9PlQsQm9yZGVyTGVmdEljb246KCk9PkgsQm9yZGVyTm9uZUljb246KCk9PkIsQm9yZGVyUmlnaHRJY29uOigpPT5WLEJvcmRlclNvbGlkSWNvbjooKT0+RCxCb3JkZXJTcGxpdEljb246KCk9PlosQm9yZGVyU3R5bGVJY29uOigpPT4kLEJvcmRlclRvcEljb246KCk9Pk4sQm94SWNvbjooKT0+RixCb3hNb2RlbEljb246KCk9PlUsQnV0dG9uSWNvbjooKT0+VyxDYWxlbmRhckljb246KCk9PnosQ2FtZXJhSWNvbjooKT0+RyxDYXJkU3RhY2tJY29uOigpPT5xLENhcmRTdGFja01pbnVzSWNvbjooKT0+WSxDYXJkU3RhY2tQbHVzSWNvbjooKT0+SyxDYXJldERvd25JY29uOigpPT5YLENhcmV0TGVmdEljb246KCk9PkosQ2FyZXRSaWdodEljb246KCk9PlEsQ2FyZXRTb3J0SWNvbjooKT0+ZWUsQ2FyZXRVcEljb246KCk9PnRlLENoYXRCdWJibGVJY29uOigpPT5uZSxDaGVja0NpcmNsZWRJY29uOigpPT5vZSxDaGVja0ljb246KCk9PnJlLENoZWNrYm94SWNvbjooKT0+aWUsQ2hldnJvbkRvd25JY29uOigpPT5hZSxDaGV2cm9uTGVmdEljb246KCk9PmxlLENoZXZyb25SaWdodEljb246KCk9PnNlLENoZXZyb25VcEljb246KCk9PmNlLENpcmNsZUJhY2tzbGFzaEljb246KCk9PmZlLENpcmNsZUljb246KCk9PnVlLENsaXBib2FyZENvcHlJY29uOigpPT5wZSxDbGlwYm9hcmRJY29uOigpPT5kZSxDbG9ja0ljb246KCk9PmhlLENvZGVJY29uOigpPT5nZSxDb2RlU2FuZGJveExvZ29JY29uOigpPT52ZSxDb2x1bW5TcGFjaW5nSWNvbjooKT0+bWUsQ29sdW1uc0ljb246KCk9PkNlLENvbW1pdEljb246KCk9PnllLENvbXBvbmVudDFJY29uOigpPT53ZSxDb21wb25lbnQySWNvbjooKT0+YmUsQ29tcG9uZW50Qm9vbGVhbkljb246KCk9PnhlLENvbXBvbmVudEluc3RhbmNlSWNvbjooKT0+X2UsQ29tcG9uZW50Tm9uZUljb246KCk9Pk9lLENvbXBvbmVudFBsYWNlaG9sZGVySWNvbjooKT0+TGUsQ29udGFpbmVySWNvbjooKT0+RWUsQ29va2llSWNvbjooKT0+U2UsQ29weUljb246KCk9PmplLENvcm5lckJvdHRvbUxlZnRJY29uOigpPT5NZSxDb3JuZXJCb3R0b21SaWdodEljb246KCk9PmtlLENvcm5lclRvcExlZnRJY29uOigpPT5SZSxDb3JuZXJUb3BSaWdodEljb246KCk9PlBlLENvcm5lcnNJY29uOigpPT5JZSxDb3VudGRvd25UaW1lckljb246KCk9PkFlLENvdW50ZXJDbG9ja3dpc2VDbG9ja0ljb246KCk9PlRlLENyb3BJY29uOigpPT5IZSxDcm9zczFJY29uOigpPT5CZSxDcm9zczJJY29uOigpPT5WZSxDcm9zc0NpcmNsZWRJY29uOigpPT5EZSxDcm9zc2hhaXIxSWNvbjooKT0+WmUsQ3Jvc3NoYWlyMkljb246KCk9PiRlLENydW1wbGVkUGFwZXJJY29uOigpPT5OZSxDdWJlSWNvbjooKT0+RmUsQ3Vyc29yQXJyb3dJY29uOigpPT5VZSxDdXJzb3JUZXh0SWNvbjooKT0+V2UsRGFzaEljb246KCk9PnplLERhc2hib2FyZEljb246KCk9PkdlLERpbWVuc2lvbnNJY29uOigpPT5xZSxEaXNjSWNvbjooKT0+WWUsRGl2aWRlckhvcml6b250YWxJY29uOigpPT5LZSxEaXZpZGVyVmVydGljYWxJY29uOigpPT5YZSxEb3RGaWxsZWRJY29uOigpPT5RZSxEb3RJY29uOigpPT5KZSxEb3RzSG9yaXpvbnRhbEljb246KCk9PmV0LERvdHNWZXJ0aWNhbEljb246KCk9PnR0LERvdWJsZUFycm93RG93bkljb246KCk9Pm50LERvdWJsZUFycm93TGVmdEljb246KCk9PnJ0LERvdWJsZUFycm93UmlnaHRJY29uOigpPT5vdCxEb3VibGVBcnJvd1VwSWNvbjooKT0+aXQsRG93bmxvYWRJY29uOigpPT5hdCxEcmFnSGFuZGxlRG90czFJY29uOigpPT5sdCxEcmFnSGFuZGxlRG90czJJY29uOigpPT5zdCxEcmFnSGFuZGxlSG9yaXpvbnRhbEljb246KCk9PmN0LERyYWdIYW5kbGVWZXJ0aWNhbEljb246KCk9PnV0LERyYXdpbmdQaW5GaWxsZWRJY29uOigpPT5kdCxEcmF3aW5nUGluSWNvbjooKT0+ZnQsRHJvcGRvd25NZW51SWNvbjooKT0+cHQsRW50ZXJGdWxsU2NyZWVuSWNvbjooKT0+Z3QsRW50ZXJJY29uOigpPT5odCxFbnZlbG9wZUNsb3NlZEljb246KCk9PnZ0LEVudmVsb3BlT3Blbkljb246KCk9Pm10LEV4Y2xhbWF0aW9uVHJpYW5nbGVJY29uOigpPT5DdCxFeGl0RnVsbFNjcmVlbkljb246KCk9Pnd0LEV4aXRJY29uOigpPT55dCxFeHRlcm5hbExpbmtJY29uOigpPT5idCxFeWVDbG9zZWRJY29uOigpPT54dCxFeWVOb25lSWNvbjooKT0+X3QsRXllT3Blbkljb246KCk9Pk90LEZhY2VJY29uOigpPT5MdCxGaWdtYUxvZ29JY29uOigpPT5FdCxGaWxlSWNvbjooKT0+U3QsRmlsZU1pbnVzSWNvbjooKT0+anQsRmlsZVBsdXNJY29uOigpPT5NdCxGaWxlVGV4dEljb246KCk9Pmt0LEZvbnRCb2xkSWNvbjooKT0+UnQsRm9udEZhbWlseUljb246KCk9PlB0LEZvbnRJdGFsaWNJY29uOigpPT5JdCxGb250Um9tYW5JY29uOigpPT5BdCxGb250U2l6ZUljb246KCk9PlR0LEZvbnRTdHlsZUljb246KCk9Pkh0LEZyYW1lSWNvbjooKT0+QnQsRnJhbWVyTG9nb0ljb246KCk9PlZ0LEdlYXJJY29uOigpPT5EdCxHaXRIdWJMb2dvSWNvbjooKT0+WnQsR2xvYmVJY29uOigpPT4kdCxHcmlkSWNvbjooKT0+TnQsR3JvdXBJY29uOigpPT5GdCxIYWxmMUljb246KCk9PlV0LEhhbGYySWNvbjooKT0+V3QsSGFtYnVyZ2VyTWVudUljb246KCk9Pnp0LEhhbmRJY29uOigpPT5HdCxIZWFkaW5nSWNvbjooKT0+cXQsSGVpZ2h0SWNvbjooKT0+WXQsSG9tZUljb246KCk9Pkt0LEljb25KYXJMb2dvSWNvbjooKT0+WHQsSWRDYXJkSWNvbjooKT0+SnQsSW1hZ2VJY29uOigpPT5RdCxJbmZvQ2lyY2xlZEljb246KCk9PmVuLElucHV0SWNvbjooKT0+dG4sTGFwVGltZXJJY29uOigpPT5ubixMYXllcnNJY29uOigpPT5ybixMYXlvdXRJY29uOigpPT5vbixMZXR0ZXJDYXNlQ2FwaXRhbGl6ZUljb246KCk9PmFuLExldHRlckNhc2VMb3dlcmNhc2VJY29uOigpPT5sbixMZXR0ZXJDYXNlVG9nZ2xlSWNvbjooKT0+c24sTGV0dGVyQ2FzZVVwcGVyY2FzZUljb246KCk9PmNuLExldHRlclNwYWNpbmdJY29uOigpPT51bixMaWdodG5pbmdCb2x0SWNvbjooKT0+Zm4sTGluZUhlaWdodEljb246KCk9PmRuLExpbmsxSWNvbjooKT0+cG4sTGluazJJY29uOigpPT5obixMaW5rQnJlYWsxSWNvbjooKT0+Z24sTGlua0JyZWFrMkljb246KCk9PnZuLExpbmtOb25lMUljb246KCk9Pm1uLExpbmtOb25lMkljb246KCk9PkNuLExpc3RCdWxsZXRJY29uOigpPT55bixMb2NrQ2xvc2VkSWNvbjooKT0+d24sTG9ja09wZW4xSWNvbjooKT0+Ym4sTG9ja09wZW4ySWNvbjooKT0+eG4sTG9vcEljb246KCk9Pl9uLE1hZ2ljV2FuZEljb246KCk9Pk9uLE1hZ25pZnlpbmdHbGFzc0ljb246KCk9PkxuLE1hcmdpbkljb246KCk9PkVuLE1hc2tPZmZJY29uOigpPT5TbixNYXNrT25JY29uOigpPT5qbixNaW51c0NpcmNsZWRJY29uOigpPT5rbixNaW51c0ljb246KCk9Pk1uLE1peEljb246KCk9PlJuLE1peGVySG9yaXpvbnRhbEljb246KCk9PlBuLE1peGVyVmVydGljYWxJY29uOigpPT5JbixNb2R1bHpMb2dvSWNvbjooKT0+QW4sTW9vbkljb246KCk9PlRuLE1vdmVJY29uOigpPT5IbixOb3Rpb25Mb2dvSWNvbjooKT0+Qm4sT3BhY2l0eUljb246KCk9PlZuLE92ZXJsaW5lSWNvbjooKT0+RG4sUGFkZGluZ0ljb246KCk9PlpuLFBhcGVyUGxhbmVJY29uOigpPT4kbixQYXVzZUljb246KCk9Pk5uLFBlbmNpbDFJY29uOigpPT5GbixQZW5jaWwySWNvbjooKT0+VW4sUGVyc29uSWNvbjooKT0+V24sUGllQ2hhcnRJY29uOigpPT56bixQaWxjcm93SWNvbjooKT0+R24sUGluQm90dG9tSWNvbjooKT0+cW4sUGluTGVmdEljb246KCk9PlluLFBpblJpZ2h0SWNvbjooKT0+S24sUGluVG9wSWNvbjooKT0+WG4sUGxheUljb246KCk9PkpuLFBsdXNDaXJjbGVkSWNvbjooKT0+ZXIsUGx1c0ljb246KCk9PlFuLFF1ZXN0aW9uTWFya0NpcmNsZWRJY29uOigpPT5ucixRdWVzdGlvbk1hcmtJY29uOigpPT50cixRdW90ZUljb246KCk9PnJyLFJhZGlvYnV0dG9uSWNvbjooKT0+b3IsUmVhZGVySWNvbjooKT0+aXIsUmVsb2FkSWNvbjooKT0+YXIsUmVzZXRJY29uOigpPT5scixSZXN1bWVJY29uOigpPT5zcixSb2NrZXRJY29uOigpPT5jcixSb3RhdGVDb3VudGVyQ2xvY2t3aXNlSWNvbjooKT0+dXIsUm93U3BhY2luZ0ljb246KCk9PmZyLFJvd3NJY29uOigpPT5kcixSdWxlckhvcml6b250YWxJY29uOigpPT5wcixSdWxlclNxdWFyZUljb246KCk9PmhyLFNlY3Rpb25JY29uOigpPT5ncixTZXdpbmdQaW5GaWxsZWRJY29uOigpPT5tcixTZXdpbmdQaW5JY29uOigpPT52cixTaGFkb3dJY29uOigpPT5DcixTaGFkb3dJbm5lckljb246KCk9PnlyLFNoYWRvd05vbmVJY29uOigpPT53cixTaGFkb3dPdXRlckljb246KCk9PmJyLFNoYXJlMUljb246KCk9PnhyLFNoYXJlMkljb246KCk9Pl9yLFNodWZmbGVJY29uOigpPT5PcixTaXplSWNvbjooKT0+THIsU2tldGNoTG9nb0ljb246KCk9PkVyLFNsYXNoSWNvbjooKT0+U3IsU2xpZGVySWNvbjooKT0+anIsU3BhY2VCZXR3ZWVuSG9yaXpvbnRhbGx5SWNvbjooKT0+TXIsU3BhY2VCZXR3ZWVuVmVydGljYWxseUljb246KCk9PmtyLFNwYWNlRXZlbmx5SG9yaXpvbnRhbGx5SWNvbjooKT0+UnIsU3BhY2VFdmVubHlWZXJ0aWNhbGx5SWNvbjooKT0+UHIsU3BlYWtlckxvdWRJY29uOigpPT5JcixTcGVha2VyTW9kZXJhdGVJY29uOigpPT5BcixTcGVha2VyT2ZmSWNvbjooKT0+VHIsU3BlYWtlclF1aWV0SWNvbjooKT0+SHIsU3F1YXJlSWNvbjooKT0+QnIsU3RhY2tJY29uOigpPT5WcixTdGFyRmlsbGVkSWNvbjooKT0+WnIsU3Rhckljb246KCk9PkRyLFN0aXRjaGVzTG9nb0ljb246KCk9PiRyLFN0b3BJY29uOigpPT5OcixTdG9wd2F0Y2hJY29uOigpPT5GcixTdHJldGNoSG9yaXpvbnRhbGx5SWNvbjooKT0+VXIsU3RyZXRjaFZlcnRpY2FsbHlJY29uOigpPT5XcixTdHJpa2V0aHJvdWdoSWNvbjooKT0+enIsU3VuSWNvbjooKT0+R3IsU3dpdGNoSWNvbjooKT0+cXIsU3ltYm9sSWNvbjooKT0+WXIsVGFibGVJY29uOigpPT5LcixUYXJnZXRJY29uOigpPT5YcixUZXh0QWxpZ25DZW50ZXJJY29uOigpPT5RcixUZXh0QWxpZ25KdXN0aWZ5SWNvbjooKT0+ZW8sVGV4dEFsaWduTGVmdEljb246KCk9PnRvLFRleHRBbGlnblJpZ2h0SWNvbjooKT0+bm8sVGV4dEljb246KCk9PkpyLFRleHROb25lSWNvbjooKT0+cm8sVGhpY2tBcnJvd0Rvd25JY29uOigpPT5vbyxUaGlja0Fycm93TGVmdEljb246KCk9PmlvLFRoaWNrQXJyb3dSaWdodEljb246KCk9PmFvLFRoaWNrQXJyb3dVcEljb246KCk9PmxvLFRpbWVySWNvbjooKT0+c28sVG9rZW5zSWNvbjooKT0+Y28sVHJhY2tOZXh0SWNvbjooKT0+dW8sVHJhY2tQcmV2aW91c0ljb246KCk9PmZvLFRyYW5zcGFyZW5jeUdyaWRJY29uOigpPT5wbyxUcmFzaEljb246KCk9PmhvLFRyaWFuZ2xlRG93bkljb246KCk9PmdvLFRyaWFuZ2xlTGVmdEljb246KCk9PnZvLFRyaWFuZ2xlUmlnaHRJY29uOigpPT5tbyxUcmlhbmdsZVVwSWNvbjooKT0+Q28sVHdpdHRlckxvZ29JY29uOigpPT55byxVbmRlcmxpbmVJY29uOigpPT53byxVcGRhdGVJY29uOigpPT5ibyxVcGxvYWRJY29uOigpPT54byxWYWx1ZUljb246KCk9Pl9vLFZhbHVlTm9uZUljb246KCk9Pk9vLFZlcmNlbExvZ29JY29uOigpPT5MbyxWaWRlb0ljb246KCk9PkVvLFZpZXdHcmlkSWNvbjooKT0+U28sVmlld0hvcml6b250YWxJY29uOigpPT5qbyxWaWV3Tm9uZUljb246KCk9Pk1vLFZpZXdWZXJ0aWNhbEljb246KCk9PmtvLFdpZHRoSWNvbjooKT0+Um8sWm9vbUluSWNvbjooKT0+UG8sWm9vbU91dEljb246KCk9PklvfSk7dmFyIHI9big2Njg5KTtmdW5jdGlvbiBvKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89e30saT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKW49aVtyXSx0LmluZGV4T2Yobik+PTB8fChvW25dPWVbbl0pO3JldHVybiBvfXZhciBpPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wIDEuNUMwIDEuMjIzODYgMC4yMjM4NTggMSAwLjUgMUgyLjVDMi43NzYxNCAxIDMgMS4yMjM4NiAzIDEuNUMzIDEuNzc2MTQgMi43NzYxNCAyIDIuNSAySDAuNUMwLjIyMzg1OCAyIDAgMS43NzYxNCAwIDEuNVpNNCAxLjVDNCAxLjIyMzg2IDQuMjIzODYgMSA0LjUgMUgxNC41QzE0Ljc3NjEgMSAxNSAxLjIyMzg2IDE1IDEuNUMxNSAxLjc3NjE0IDE0Ljc3NjEgMiAxNC41IDJINC41QzQuMjIzODYgMiA0IDEuNzc2MTQgNCAxLjVaTTQgNC41QzQgNC4yMjM4NiA0LjIyMzg2IDQgNC41IDRIMTEuNUMxMS43NzYxIDQgMTIgNC4yMjM4NiAxMiA0LjVDMTIgNC43NzYxNCAxMS43NzYxIDUgMTEuNSA1SDQuNUM0LjIyMzg2IDUgNCA0Ljc3NjE0IDQgNC41Wk0wIDcuNUMwIDcuMjIzODYgMC4yMjM4NTggNyAwLjUgN0gyLjVDMi43NzYxNCA3IDMgNy4yMjM4NiAzIDcuNUMzIDcuNzc2MTQgMi43NzYxNCA4IDIuNSA4SDAuNUMwLjIyMzg1OCA4IDAgNy43NzYxNCAwIDcuNVpNNCA3LjVDNCA3LjIyMzg2IDQuMjIzODYgNyA0LjUgN0gxNC41QzE0Ljc3NjEgNyAxNSA3LjIyMzg2IDE1IDcuNUMxNSA3Ljc3NjE0IDE0Ljc3NjEgOCAxNC41IDhINC41QzQuMjIzODYgOCA0IDcuNzc2MTQgNCA3LjVaTTQgMTAuNUM0IDEwLjIyMzkgNC4yMjM4NiAxMCA0LjUgMTBIMTEuNUMxMS43NzYxIDEwIDEyIDEwLjIyMzkgMTIgMTAuNUMxMiAxMC43NzYxIDExLjc3NjEgMTEgMTEuNSAxMUg0LjVDNC4yMjM4NiAxMSA0IDEwLjc3NjEgNCAxMC41Wk0wIDEzLjVDMCAxMy4yMjM5IDAuMjIzODU4IDEzIDAuNSAxM0gyLjVDMi43NzYxNCAxMyAzIDEzLjIyMzkgMyAxMy41QzMgMTMuNzc2MSAyLjc3NjE0IDE0IDIuNSAxNEgwLjVDMC4yMjM4NTggMTQgMCAxMy43NzYxIDAgMTMuNVpNNCAxMy41QzQgMTMuMjIzOSA0LjIyMzg2IDEzIDQuNSAxM0gxNC41QzE0Ljc3NjEgMTMgMTUgMTMuMjIzOSAxNSAxMy41QzE1IDEzLjc3NjEgMTQuNzc2MSAxNCAxNC41IDE0SDQuNUM0LjIyMzg2IDE0IDQgMTMuNzc2MSA0IDEzLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxhPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMC41IDEuNzUwMDNDMTAuNzEwNyAxLjc1MDAzIDEwLjg5ODggMS44ODIxNyAxMC45NzAzIDIuMDgwNDJMMTMuOTcwMyAxMC40QzE0LjA2NCAxMC42NTk4IDEzLjkyOTMgMTAuOTQ2MyAxMy42Njk2IDExLjA0QzEzLjQwOTggMTEuMTMzNiAxMy4xMjMzIDEwLjk5OSAxMy4wMjk2IDEwLjczOTJMMTIuMDQ3NyA4LjAxNjA2SDguOTUyMjdMNy45NzAzMSAxMC43MzkyQzcuODc2NjQgMTAuOTk5IDcuNTkwMTIgMTEuMTMzNiA3LjMzMDM1IDExLjA0QzcuMDcwNTggMTAuOTQ2MyA2LjkzNTkzIDEwLjY1OTggNy4wMjk2IDEwLjRMMTAuMDI5NiAyLjA4MDQyQzEwLjEwMTEgMS44ODIxNyAxMC4yODkyIDEuNzUwMDMgMTAuNSAxLjc1MDAzWk0xMC41IDMuNzI0MDJMMTEuNzQxMSA3LjE2NjA2SDkuMjU4NzdMMTAuNSAzLjcyNDAyWk0yLjQ5OTQ5IDIuMDk5OTdDMi43MjA0IDIuMDk5OTcgMi44OTk0OSAyLjI3OTA2IDIuODk5NDkgMi40OTk5N0wyLjg5OTQ5IDkuNTM0MjhMNC4yMTY2NCA4LjIxNzEzQzQuMzcyODUgOC4wNjA5MiA0LjYyNjEyIDguMDYwOTIgNC43ODIzMyA4LjIxNzEzQzQuOTM4NTQgOC4zNzMzNCA0LjkzODU0IDguNjI2NiA0Ljc4MjMzIDguNzgyODFMMi43ODIzMyAxMC43ODI4QzIuNzA3MzIgMTAuODU3OCAyLjYwNTU3IDEwLjkgMi40OTk0OSAxMC45QzIuMzkzNCAxMC45IDIuMjkxNjYgMTAuODU3OCAyLjIxNjY0IDEwLjc4MjhMMC4yMTY2NDUgOC43ODI4MUMwLjA2MDQzNDkgOC42MjY2IDAuMDYwNDM0OSA4LjM3MzM0IDAuMjE2NjQ1IDguMjE3MTNDMC4zNzI4NTQgOC4wNjA5MiAwLjYyNjEyIDguMDYwOTIgMC43ODIzMyA4LjIxNzEzTDIuMDk5NDkgOS41MzQyOEwyLjA5OTQ5IDIuNDk5OTdDMi4wOTk0OSAyLjI3OTA2IDIuMjc4NTcgMi4wOTk5NyAyLjQ5OTQ5IDIuMDk5OTdaTTAuMDk5OTY5NSAxMy41MDAxQzAuMDk5OTY5NSAxMy4yNzkxIDAuMjc5MDU2IDEzLjEwMDEgMC40OTk5NjkgMTMuMTAwMUgxNC41QzE0LjcyMDkgMTMuMTAwMSAxNC45IDEzLjI3OTEgMTQuOSAxMy41MDAxQzE0LjkgMTMuNzIxIDE0LjcyMDkgMTMuOTAwMSAxNC41IDEzLjkwMDFIMC40OTk5NjlDMC4yNzkwNTYgMTMuOTAwMSAwLjA5OTk2OTUgMTMuNzIxIDAuMDk5OTY5NSAxMy41MDAxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOSAzQzkgMi40NDc3MiA4LjU1MjI5IDIgOCAySDdDNi40NDc3MiAyIDYgMi40NDc3MiA2IDNMNiAxNEgxLjVDMS4yMjM4NiAxNCAxIDE0LjIyMzkgMSAxNC41QzEgMTQuNzc2MSAxLjIyMzg2IDE1IDEuNSAxNUw2IDE1SDlIMTMuNUMxMy43NzYxIDE1IDE0IDE0Ljc3NjEgMTQgMTQuNUMxNCAxNC4yMjM5IDEzLjc3NjEgMTQgMTMuNSAxNEg5VjNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxzPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02Ljk5OTg4IDFDNi40NDc1OSAxIDUuOTk5ODggMS40NDc3MiA1Ljk5OTg4IDJWN0gxLjQ5OTg4QzEuMjIzNzQgNyAwLjk5OTg3OCA3LjIyMzg2IDAuOTk5ODc4IDcuNUMwLjk5OTg3OCA3Ljc3NjE0IDEuMjIzNzQgOCAxLjQ5OTg4IDhINS45OTk4OFYxM0M1Ljk5OTg4IDEzLjU1MjMgNi40NDc1OSAxNCA2Ljk5OTg4IDE0SDcuOTk5ODhDOC41NTIxNiAxNCA4Ljk5OTg4IDEzLjU1MjMgOC45OTk4OCAxM1Y4SDEzLjQ5OTlDMTMuNzc2IDggMTMuOTk5OSA3Ljc3NjE0IDEzLjk5OTkgNy41QzEzLjk5OTkgNy4yMjM4NiAxMy43NzYgNyAxMy40OTk5IDdIOC45OTk4OFYyQzguOTk5ODggMS40NDc3MiA4LjU1MjE2IDEgNy45OTk4OCAxTDYuOTk5ODggMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuOTk5ODggNkMxLjQ0NzU5IDYgMC45OTk4NzcgNi40NDc3MiAwLjk5OTg3NyA3TDAuOTk5ODc3IDhDMC45OTk4NzcgOC41NTIyOCAxLjQ0NzU5IDkgMS45OTk4OCA5TDYuOTk5ODggOUw2Ljk5OTg4IDEzLjVDNi45OTk4OCAxMy43NzYxIDcuMjIzNzQgMTQgNy40OTk4OCAxNEM3Ljc3NjAyIDE0IDcuOTk5ODggMTMuNzc2MSA3Ljk5OTg4IDEzLjVMNy45OTk4OCA5TDEyLjk5OTkgOUMxMy41NTIyIDkgMTMuOTk5OSA4LjU1MjI4IDEzLjk5OTkgOEwxMy45OTk5IDdDMTMuOTk5OSA2LjQ0NzcyIDEzLjU1MjIgNiAxMi45OTk5IDZMNy45OTk4OCA2TDcuOTk5ODggMS41QzcuOTk5ODggMS4yMjM4NiA3Ljc3NjAyIDEgNy40OTk4OCAxQzcuMjIzNzMgMSA2Ljk5OTg4IDEuMjIzODYgNi45OTk4OCAxLjVMNi45OTk4OCA2TDEuOTk5ODggNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuNDk5OTk1IDAuOTk5OTk1QzAuMjIzODU1IDAuOTk5OTk1IC01LjU4NDU4ZS0wNyAxLjIyMzg1IC01LjQ2Mzg4ZS0wNyAxLjQ5OTk5TC0yLjE4NTU0ZS0wOCAxMy40OTk5Qy05Ljc4NDkyZS0wOSAxMy43NzYgMC4yMjM4NTUgMTMuOTk5OSAwLjQ5OTk5NSAxMy45OTk5QzAuNzc2MTM2IDEzLjk5OTkgMC45OTk5OTEgMTMuNzc2IDAuOTk5OTkxIDEzLjQ5OTlMMC45OTk5OTEgOC45OTk5M0wxMiA4Ljk5OTkzQzEyLjU1MjMgOC45OTk5MyAxMyA4LjU1MjIyIDEzIDcuOTk5OTNMMTMgNi45OTk5NEMxMyA2LjQ0NzY2IDEyLjU1MjMgNS45OTk5NSAxMiA1Ljk5OTk1TDAuOTk5OTkxIDUuOTk5OTVMMC45OTk5OTEgMS40OTk5OUMwLjk5OTk5MSAxLjIyMzg1IDAuNzc2MTM1IDAuOTk5OTk1IDAuNDk5OTk1IDAuOTk5OTk1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTQuNDk5OSAxQzE0LjIyMzcgMSAxMy45OTk5IDEuMjIzODYgMTMuOTk5OSAxLjVMMTMuOTk5OSA2TDIuOTk5ODggNkMyLjQ0NzU5IDYgMS45OTk4OCA2LjQ0NzcyIDEuOTk5ODggN0wxLjk5OTg4IDhDMS45OTk4OCA4LjU1MjI4IDIuNDQ3NTkgOSAyLjk5OTg4IDlMMTMuOTk5OSA5TDEzLjk5OTkgMTMuNUMxMy45OTk5IDEzLjc3NjEgMTQuMjIzNyAxNCAxNC40OTk5IDE0QzE0Ljc3NiAxNCAxNC45OTk5IDEzLjc3NjEgMTQuOTk5OSAxMy41TDE0Ljk5OTkgOUwxNC45OTk5IDZMMTQuOTk5OSAxLjVDMTQuOTk5OSAxLjIyMzg2IDE0Ljc3NiAxIDE0LjQ5OTkgMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuNSAwQzEuMjIzODYgMCAxIDAuMjIzODU4IDEgMC41QzEgMC43NzYxNDIgMS4yMjM4NiAxIDEuNSAxSDZWMTJDNiAxMi41NTIzIDYuNDQ3NzIgMTMgNyAxM0g4QzguNTUyMjggMTMgOSAxMi41NTIzIDkgMTJWMUgxMy41QzEzLjc3NjEgMSAxNCAwLjc3NjE0MiAxNCAwLjVDMTQgMC4yMjM4NTggMTMuNzc2MSAwIDEzLjUgMEg5SDZIMS41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41IDAuNzVMOS43NSAzSDUuMjVMNy41IDAuNzVaTTcuNSAxNC4yNUw5Ljc1IDEySDUuMjVMNy41IDE0LjI1Wk0zIDUuMjVMMC43NSA3LjVMMyA5Ljc1VjUuMjVaTTE0LjI1IDcuNUwxMiA1LjI1VjkuNzVMMTQuMjUgNy41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0saD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC44OTE0IDIuMTkzN0M5LjExNTggMi4zNTQ2NCA5LjE2NzI1IDIuNjY3MDEgOS4wMDYzMSAyLjg5MTQxTDIuNDczODggMTJIMTMuNUMxMy43NzYxIDEyIDE0IDEyLjIyMzkgMTQgMTIuNUMxNCAxMi43NzYyIDEzLjc3NjEgMTMgMTMuNSAxM0gxLjVDMS4zMTI1NCAxMyAxLjE0MDgyIDEyLjg5NTIgMS4wNTUyIDEyLjcyODRDMC45Njk1NzggMTIuNTYxNiAwLjk4NDQzOCAxMi4zNjEgMS4wOTM2OSAxMi4yMDg2TDguMTkzNjkgMi4zMDg2MkM4LjM1NDYyIDIuMDg0MjIgOC42NjcgMi4wMzI3NyA4Ljg5MTQgMi4xOTM3Wk0xMS4xIDYuNTAwMDFDMTEuMSA2LjIyMzg3IDExLjMyMzggNi4wMDAwMSAxMS42IDYuMDAwMDFDMTEuODc2MSA2LjAwMDAxIDEyLjEgNi4yMjM4NyAxMi4xIDYuNTAwMDFDMTIuMSA2Ljc3NjE1IDExLjg3NjEgNy4wMDAwMSAxMS42IDcuMDAwMDFDMTEuMzIzOCA3LjAwMDAxIDExLjEgNi43NzYxNSAxMS4xIDYuNTAwMDFaTTEwLjQgNC4wMDAwMUMxMC4xMjM5IDQuMDAwMDEgOS45MDAwMyA0LjIyMzg3IDkuOTAwMDMgNC41MDAwMUM5LjkwMDAzIDQuNzc2MTUgMTAuMTIzOSA1LjAwMDAxIDEwLjQgNS4wMDAwMUMxMC42NzYyIDUuMDAwMDEgMTAuOSA0Ljc3NjE1IDEwLjkgNC41MDAwMUMxMC45IDQuMjIzODcgMTAuNjc2MiA0LjAwMDAxIDEwLjQgNC4wMDAwMVpNMTIuMSA4LjUwMDAxQzEyLjEgOC4yMjM4NyAxMi4zMjM4IDguMDAwMDEgMTIuNiA4LjAwMDAxQzEyLjg3NjEgOC4wMDAwMSAxMy4xIDguMjIzODcgMTMuMSA4LjUwMDAxQzEzLjEgOC43NzYxNSAxMi44NzYxIDkuMDAwMDEgMTIuNiA5LjAwMDAxQzEyLjMyMzggOS4wMDAwMSAxMi4xIDguNzc2MTUgMTIuMSA4LjUwMDAxWk0xMy40IDEwQzEzLjEyMzkgMTAgMTIuOSAxMC4yMjM5IDEyLjkgMTAuNUMxMi45IDEwLjc3NjEgMTMuMTIzOSAxMSAxMy40IDExQzEzLjY3NjIgMTEgMTMuOSAxMC43NzYxIDEzLjkgMTAuNUMxMy45IDEwLjIyMzkgMTMuNjc2MiAxMCAxMy40IDEwWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy4zMDkwMiAxQzIuOTMwMjUgMSAyLjU4Mzk4IDEuMjE0IDIuNDE0NTkgMS41NTI3OUwxLjA1Mjc5IDQuMjc2MzlDMS4wMTgwNyA0LjM0NTgyIDEgNC40MjIzOCAxIDQuNVYxM0MxIDEzLjU1MjMgMS40NDc3MiAxNCAyIDE0SDEzQzEzLjU1MjMgMTQgMTQgMTMuNTUyMyAxNCAxM1Y0LjVDMTQgNC40MjIzOCAxMy45ODE5IDQuMzQ1ODIgMTMuOTQ3MiA0LjI3NjM5TDEyLjU4NTQgMS41NTI4MUMxMi40MTYgMS4yMTQwMyAxMi4wNjk4IDEuMDAwMDMgMTEuNjkxIDEuMDAwMDNMNy41IDEuMDAwMDFMMy4zMDkwMiAxWk0zLjMwOTAyIDJMNyAyLjAwMDAxVjRIMi4zMDkwMkwzLjMwOTAyIDJaTTggNFYyLjAwMDAyTDExLjY5MSAyLjAwMDAzTDEyLjY5MSA0SDhaTTcuNSA1SDEzVjEzSDJWNUg3LjVaTTUuNSA3QzUuMjIzODYgNyA1IDcuMjIzODYgNSA3LjVDNSA3Ljc3NjE0IDUuMjIzODYgOCA1LjUgOEg5LjVDOS43NzYxNCA4IDEwIDcuNzc2MTQgMTAgNy41QzEwIDcuMjIzODYgOS43NzYxNCA3IDkuNSA3SDUuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHY9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTExLjM1MzYgMy42NDY0NEMxMS41NDg4IDMuODQxNyAxMS41NDg4IDQuMTU4MjggMTEuMzUzNiA0LjM1MzU0TDQuNzA3MTEgMTFMOSAxMUM5LjI3NjE0IDExIDkuNSAxMS4yMjM5IDkuNSAxMS41QzkuNSAxMS43NzYxIDkuMjc2MTQgMTIgOSAxMkwzLjUgMTJDMy4zNjczOSAxMiAzLjI0MDIxIDExLjk0NzMgMy4xNDY0NSAxMS44NTM2QzMuMDUyNjggMTEuNzU5OCAzIDExLjYzMjYgMyAxMS41TDMgNS45OTk5OUMzIDUuNzIzODUgMy4yMjM4NiA1LjQ5OTk5IDMuNSA1LjQ5OTk5QzMuNzc2MTQgNS40OTk5OSA0IDUuNzIzODUgNCA1Ljk5OTk5VjEwLjI5MjlMMTAuNjQ2NCAzLjY0NjQzQzEwLjg0MTcgMy40NTExNyAxMS4xNTgzIDMuNDUxMTcgMTEuMzUzNiAzLjY0NjQ0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy42NDY0NSAzLjY0NjQ0QzMuNDUxMTggMy44NDE3IDMuNDUxMTggNC4xNTgyOCAzLjY0NjQ1IDQuMzUzNTRMMTAuMjkyOSAxMUw2IDExQzUuNzIzODYgMTEgNS41IDExLjIyMzkgNS41IDExLjVDNS41IDExLjc3NjEgNS43MjM4NiAxMiA2IDEyTDExLjUgMTJDMTEuNjMyNiAxMiAxMS43NTk4IDExLjk0NzMgMTEuODUzNiAxMS44NTM2QzExLjk0NzMgMTEuNzU5OCAxMiAxMS42MzI2IDEyIDExLjVMMTIgNS45OTk5OUMxMiA1LjcyMzg1IDExLjc3NjEgNS40OTk5OSAxMS41IDUuNDk5OTlDMTEuMjIzOSA1LjQ5OTk5IDExIDUuNzIzODUgMTEgNS45OTk5OVYxMC4yOTI5TDQuMzUzNTUgMy42NDY0M0M0LjE1ODI5IDMuNDUxMTcgMy44NDE3MSAzLjQ1MTE3IDMuNjQ2NDUgMy42NDY0NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNSAyQzcuNzc2MTQgMiA4IDIuMjIzODYgOCAyLjVMOCAxMS4yOTI5TDExLjE0NjQgOC4xNDY0NUMxMS4zNDE3IDcuOTUxMTggMTEuNjU4MyA3Ljk1MTE4IDExLjg1MzYgOC4xNDY0NUMxMi4wNDg4IDguMzQxNzEgMTIuMDQ4OCA4LjY1ODI5IDExLjg1MzYgOC44NTM1NUw3Ljg1MzU1IDEyLjg1MzZDNy43NTk3OSAxMi45NDczIDcuNjMyNjEgMTMgNy41IDEzQzcuMzY3MzkgMTMgNy4yNDAyMSAxMi45NDczIDcuMTQ2NDUgMTIuODUzNkwzLjE0NjQ1IDguODUzNTVDMi45NTExOCA4LjY1ODI5IDIuOTUxMTggOC4zNDE3MSAzLjE0NjQ1IDguMTQ2NDVDMy4zNDE3MSA3Ljk1MTE4IDMuNjU4MjkgNy45NTExOCAzLjg1MzU1IDguMTQ2NDVMNyAxMS4yOTI5TDcgMi41QzcgMi4yMjM4NiA3LjIyMzg2IDIgNy41IDJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx5PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02Ljg1MzU1IDMuMTQ2NDVDNy4wNDg4MiAzLjM0MTcxIDcuMDQ4ODIgMy42NTgyOSA2Ljg1MzU1IDMuODUzNTVMMy43MDcxMSA3SDEyLjVDMTIuNzc2MSA3IDEzIDcuMjIzODYgMTMgNy41QzEzIDcuNzc2MTQgMTIuNzc2MSA4IDEyLjUgOEgzLjcwNzExTDYuODUzNTUgMTEuMTQ2NEM3LjA0ODgyIDExLjM0MTcgNy4wNDg4MiAxMS42NTgzIDYuODUzNTUgMTEuODUzNkM2LjY1ODI5IDEyLjA0ODggNi4zNDE3MSAxMi4wNDg4IDYuMTQ2NDUgMTEuODUzNkwyLjE0NjQ1IDcuODUzNTVDMS45NTExOCA3LjY1ODI5IDEuOTUxMTggNy4zNDE3MSAyLjE0NjQ1IDcuMTQ2NDVMNi4xNDY0NSAzLjE0NjQ1QzYuMzQxNzEgMi45NTExOCA2LjY1ODI5IDIuOTUxMTggNi44NTM1NSAzLjE0NjQ1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC4xNDY0NSAzLjE0NjQ1QzguMzQxNzEgMi45NTExOCA4LjY1ODI5IDIuOTUxMTggOC44NTM1NSAzLjE0NjQ1TDEyLjg1MzYgNy4xNDY0NUMxMy4wNDg4IDcuMzQxNzEgMTMuMDQ4OCA3LjY1ODI5IDEyLjg1MzYgNy44NTM1NUw4Ljg1MzU1IDExLjg1MzZDOC42NTgyOSAxMi4wNDg4IDguMzQxNzEgMTIuMDQ4OCA4LjE0NjQ1IDExLjg1MzZDNy45NTExOCAxMS42NTgzIDcuOTUxMTggMTEuMzQxNyA4LjE0NjQ1IDExLjE0NjRMMTEuMjkyOSA4SDIuNUMyLjIyMzg2IDggMiA3Ljc3NjE0IDIgNy41QzIgNy4yMjM4NiAyLjIyMzg2IDcgMi41IDdIMTEuMjkyOUw4LjE0NjQ1IDMuODUzNTVDNy45NTExOCAzLjY1ODI5IDcuOTUxMTggMy4zNDE3MSA4LjE0NjQ1IDMuMTQ2NDVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxiPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMS4zNTM2IDExLjM1MzZDMTEuNTQ4OCAxMS4xNTgzIDExLjU0ODggMTAuODQxNyAxMS4zNTM2IDEwLjY0NjVMNC43MDcxMSA0TDkgNEM5LjI3NjE0IDQgOS41IDMuNzc2MTQgOS41IDMuNUM5LjUgMy4yMjM4NiA5LjI3NjE0IDMgOSAzTDMuNSAzQzMuMzY3MzkgMyAzLjI0MDIxIDMuMDUyNjggMy4xNDY0NSAzLjE0NjQ1QzMuMDUyNjggMy4yNDAyMiAzIDMuMzY3MzkgMyAzLjVMMyA5LjAwMDAxQzMgOS4yNzYxNSAzLjIyMzg2IDkuNTAwMDEgMy41IDkuNTAwMDFDMy43NzYxNCA5LjUwMDAxIDQgOS4yNzYxNSA0IDkuMDAwMDFWNC43MDcxMUwxMC42NDY0IDExLjM1MzZDMTAuODQxNyAxMS41NDg4IDExLjE1ODMgMTEuNTQ4OCAxMS4zNTM2IDExLjM1MzZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx4PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjY0NjQ1IDExLjM1MzZDMy40NTExOCAxMS4xNTgzIDMuNDUxMTggMTAuODQxNyAzLjY0NjQ1IDEwLjY0NjVMMTAuMjkyOSA0TDYgNEM1LjcyMzg2IDQgNS41IDMuNzc2MTQgNS41IDMuNUM1LjUgMy4yMjM4NiA1LjcyMzg2IDMgNiAzTDExLjUgM0MxMS42MzI2IDMgMTEuNzU5OCAzLjA1MjY4IDExLjg1MzYgMy4xNDY0NUMxMS45NDczIDMuMjQwMjIgMTIgMy4zNjczOSAxMiAzLjVMMTIgOS4wMDAwMUMxMiA5LjI3NjE1IDExLjc3NjEgOS41MDAwMSAxMS41IDkuNTAwMDFDMTEuMjIzOSA5LjUwMDAxIDExIDkuMjc2MTUgMTEgOS4wMDAwMVY0LjcwNzExTDQuMzUzNTUgMTEuMzUzNkM0LjE1ODI5IDExLjU0ODggMy44NDE3MSAxMS41NDg4IDMuNjQ2NDUgMTEuMzUzNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LF89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuMTQ2NDUgMi4xNDY0NUM3LjM0MTcxIDEuOTUxMTggNy42NTgyOSAxLjk1MTE4IDcuODUzNTUgMi4xNDY0NUwxMS44NTM2IDYuMTQ2NDVDMTIuMDQ4OCA2LjM0MTcxIDEyLjA0ODggNi42NTgyOSAxMS44NTM2IDYuODUzNTVDMTEuNjU4MyA3LjA0ODgyIDExLjM0MTcgNy4wNDg4MiAxMS4xNDY0IDYuODUzNTVMOCAzLjcwNzExTDggMTIuNUM4IDEyLjc3NjEgNy43NzYxNCAxMyA3LjUgMTNDNy4yMjM4NiAxMyA3IDEyLjc3NjEgNyAxMi41TDcgMy43MDcxMUwzLjg1MzU1IDYuODUzNTVDMy42NTgyOSA3LjA0ODgyIDMuMzQxNzEgNy4wNDg4MiAzLjE0NjQ1IDYuODUzNTVDMi45NTExOCA2LjY1ODI5IDIuOTUxMTggNi4zNDE3MSAzLjE0NjQ1IDYuMTQ2NDVMNy4xNDY0NSAyLjE0NjQ1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi41IDJIMTIuNUMxMi43NzYxIDIgMTMgMi4yMjM4NiAxMyAyLjVWMTIuNUMxMyAxMi43NzYxIDEyLjc3NjEgMTMgMTIuNSAxM0gyLjVDMi4yMjM4NiAxMyAyIDEyLjc3NjEgMiAxMi41VjIuNUMyIDIuMjIzODYgMi4yMjM4NiAyIDIuNSAyWk0xIDIuNUMxIDEuNjcxNTcgMS42NzE1NyAxIDIuNSAxSDEyLjVDMTMuMzI4NCAxIDE0IDEuNjcxNTcgMTQgMi41VjEyLjVDMTQgMTMuMzI4NCAxMy4zMjg0IDE0IDEyLjUgMTRIMi41QzEuNjcxNTcgMTQgMSAxMy4zMjg0IDEgMTIuNVYyLjVaTTcuNSA0QzcuNzc2MTQgNCA4IDMuNzc2MTQgOCAzLjVDOCAzLjIyMzg2IDcuNzc2MTQgMyA3LjUgM0M3LjIyMzg2IDMgNyAzLjIyMzg2IDcgMy41QzcgMy43NzYxNCA3LjIyMzg2IDQgNy41IDRaTTggNS41QzggNS43NzYxNCA3Ljc3NjE0IDYgNy41IDZDNy4yMjM4NiA2IDcgNS43NzYxNCA3IDUuNUM3IDUuMjIzODYgNy4yMjM4NiA1IDcuNSA1QzcuNzc2MTQgNSA4IDUuMjIzODYgOCA1LjVaTTcuNSA4QzcuNzc2MTQgOCA4IDcuNzc2MTQgOCA3LjVDOCA3LjIyMzg2IDcuNzc2MTQgNyA3LjUgN0M3LjIyMzg2IDcgNyA3LjIyMzg2IDcgNy41QzcgNy43NzYxNCA3LjIyMzg2IDggNy41IDhaTTEwIDcuNUMxMCA3Ljc3NjE0IDkuNzc2MTQgOCA5LjUgOEM5LjIyMzg2IDggOSA3Ljc3NjE0IDkgNy41QzkgNy4yMjM4NiA5LjIyMzg2IDcgOS41IDdDOS43NzYxNCA3IDEwIDcuMjIzODYgMTAgNy41Wk0xMS41IDhDMTEuNzc2MSA4IDEyIDcuNzc2MTQgMTIgNy41QzEyIDcuMjIzODYgMTEuNzc2MSA3IDExLjUgN0MxMS4yMjM5IDcgMTEgNy4yMjM4NiAxMSA3LjVDMTEgNy43NzYxNCAxMS4yMjM5IDggMTEuNSA4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC44NzcwMTQgNy40OTk4OEMwLjg3NzAxNCAzLjg0MjE5IDMuODQyMTYgMC44NzcwNDUgNy40OTk4NSAwLjg3NzA0NUMxMS4xNTc1IDAuODc3MDQ1IDE0LjEyMjcgMy44NDIxOSAxNC4xMjI3IDcuNDk5ODhDMTQuMTIyNyAxMS4xNTc1IDExLjE1NzUgMTQuMTIyNyA3LjQ5OTg1IDE0LjEyMjdDMy44NDIxNiAxNC4xMjI3IDAuODc3MDE0IDExLjE1NzUgMC44NzcwMTQgNy40OTk4OFpNNy40OTk4NSAxLjgyNzA0QzQuMzY2ODMgMS44MjcwNCAxLjgyNzAxIDQuMzY2ODYgMS44MjcwMSA3LjQ5OTg4QzEuODI3MDEgOC45NzE5NiAyLjM4Nzc0IDEwLjMxMzEgMy4zMDcyNyAxMS4zMjEzQzQuMTkwNzQgOS45NDExOSA1LjczODE4IDkuMDI0OTkgNy41MDAyMyA5LjAyNDk5QzkuMjYyMDYgOS4wMjQ5OSAxMC44MDkzIDkuOTQwOTcgMTEuNjkyOSAxMS4zMjA4QzEyLjYxMjEgMTAuMzEyNyAxMy4xNzI3IDguOTcxNzIgMTMuMTcyNyA3LjQ5OTg4QzEzLjE3MjcgNC4zNjY4NiAxMC42MzI4IDEuODI3MDQgNy40OTk4NSAxLjgyNzA0Wk0xMC45ODE4IDExLjk3ODdDMTAuMjgzOSAxMC43Nzk1IDguOTg1NyA5Ljk3NDk5IDcuNTAwMjMgOS45NzQ5OUM2LjAxNDU4IDkuOTc0OTkgNC43MTYyNCAxMC43Nzk3IDQuMDE4NDUgMTEuOTc5MUM0Ljk3OTUyIDEyLjcyNzIgNi4xODc2NSAxMy4xNzI3IDcuNDk5ODUgMTMuMTcyN0M4LjgxMjI3IDEzLjE3MjcgMTAuMDIwNiAxMi43MjcgMTAuOTgxOCAxMS45Nzg3Wk01LjE0OTk5IDYuNTA0ODdDNS4xNDk5OSA1LjIwNyA2LjIwMjEyIDQuMTU0ODcgNy40OTk5OSA0LjE1NDg3QzguNzk3ODYgNC4xNTQ4NyA5Ljg0OTk5IDUuMjA3IDkuODQ5OTkgNi41MDQ4N0M5Ljg0OTk5IDcuODAyNzQgOC43OTc4NiA4Ljg1NDg3IDcuNDk5OTkgOC44NTQ4N0M2LjIwMjEyIDguODU0ODcgNS4xNDk5OSA3LjgwMjc0IDUuMTQ5OTkgNi41MDQ4N1pNNy40OTk5OSA1LjEwNDg3QzYuNzI2NzkgNS4xMDQ4NyA2LjA5OTk5IDUuNzMxNjcgNi4wOTk5OSA2LjUwNDg3QzYuMDk5OTkgNy4yNzgwNyA2LjcyNjc5IDcuOTA0ODcgNy40OTk5OSA3LjkwNDg3QzguMjczMTkgNy45MDQ4NyA4Ljg5OTk5IDcuMjc4MDcgOC44OTk5OSA2LjUwNDg3QzguODk5OTkgNS43MzE2NyA4LjI3MzE5IDUuMTA0ODcgNy40OTk5OSA1LjEwNDg3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sRT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNSAxQzUgMC40NDc3MTUgNS40NDc3MiAwIDYgMEg5QzkuNTUyMjggMCAxMCAwLjQ0NzcxNSAxMCAxVjJIMTRDMTQuNTUyMyAyIDE1IDIuNDQ3NzIgMTUgM1Y2QzE1IDYuODg4OCAxNC42MTMxIDcuNjg3MzQgMTQgOC4yMzYwOFYxMS41QzE0IDEyLjMyODQgMTMuMzI4NCAxMyAxMi41IDEzSDIuNUMxLjY3MTU3IDEzIDEgMTIuMzI4NCAxIDExLjVWOC4yMzU5QzAuMzg2OTcgNy42ODcyMSAwIDYuODg4ODMgMCA2VjNDMCAyLjQ0NzcyIDAuNDQ3NzE2IDIgMSAySDVWMVpNOSAxVjJINlYxSDlaTTEgM0g1SDUuNUg5LjVIMTBIMTRWNkMxNCA2LjY1NCAxMy42ODY2IDcuMjM0NjcgMTMuMTk5NyA3LjYwMDRDMTIuODY1NSA3Ljg1MTQ0IDEyLjQ1MDggOCAxMiA4SDhWNy41QzggNy4yMjM4NiA3Ljc3NjE0IDcgNy41IDdDNy4yMjM4NiA3IDcgNy4yMjM4NiA3IDcuNVY4SDNDMi41NDkzIDggMi4xMzQ2IDcuODUxMzMgMS44MDAyOSA3LjYwMDIyQzEuMzEzMzUgNy4yMzQ0NiAxIDYuNjUzOTYgMSA2VjNaTTcgOUgzQzIuNjQ5NjEgOSAyLjMxMjkyIDguOTM5NzIgMiA4LjgyOTA1VjExLjVDMiAxMS43NzYxIDIuMjIzODYgMTIgMi41IDEySDEyLjVDMTIuNzc2MSAxMiAxMyAxMS43NzYxIDEzIDExLjVWOC44MjkxNUMxMi42ODcxIDguOTM5NzggMTIuMzUwNCA5IDEyIDlIOFY5LjVDOCA5Ljc3NjE0IDcuNzc2MTQgMTAgNy41IDEwQzcuMjIzODYgMTAgNyA5Ljc3NjE0IDcgOS41VjlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxTPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjUgNkgxMS41QzEyLjMyODQgNiAxMyA2LjY3MTU3IDEzIDcuNUMxMyA4LjMyODQzIDEyLjMyODQgOSAxMS41IDlIMy41QzIuNjcxNTcgOSAyIDguMzI4NDMgMiA3LjVDMiA2LjY3MTU3IDIuNjcxNTcgNiAzLjUgNlpNMSA3LjVDMSA2LjExOTI5IDIuMTE5MjkgNSAzLjUgNUgxMS41QzEyLjg4MDcgNSAxNCA2LjExOTI5IDE0IDcuNUMxNCA4Ljg4MDcxIDEyLjg4MDcgMTAgMTEuNSAxMEgzLjVDMi4xMTkyOSAxMCAxIDguODgwNzEgMSA3LjVaTTQuNSA3QzQuMjIzODYgNyA0IDcuMjIzODYgNCA3LjVDNCA3Ljc3NjE0IDQuMjIzODYgOCA0LjUgOEgxMC41QzEwLjc3NjEgOCAxMSA3Ljc3NjE0IDExIDcuNUMxMSA3LjIyMzg2IDEwLjc3NjEgNyAxMC41IDdINC41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0saj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTEuNSAxQzExLjc3NjEgMSAxMiAxLjIyMzg2IDEyIDEuNVYxMy41QzEyIDEzLjc3NjEgMTEuNzc2MSAxNCAxMS41IDE0QzExLjIyMzkgMTQgMTEgMTMuNzc2MSAxMSAxMy41VjEuNUMxMSAxLjIyMzg2IDExLjIyMzkgMSAxMS41IDFaTTkuNSAzQzkuNzc2MTQgMyAxMCAzLjIyMzg2IDEwIDMuNVYxMy41QzEwIDEzLjc3NjEgOS43NzYxNCAxNCA5LjUgMTRDOS4yMjM4NiAxNCA5IDEzLjc3NjEgOSAxMy41VjMuNUM5IDMuMjIzODYgOS4yMjM4NiAzIDkuNSAzWk0xMy41IDNDMTMuNzc2MSAzIDE0IDMuMjIzODYgMTQgMy41VjEzLjVDMTQgMTMuNzc2MSAxMy43NzYxIDE0IDEzLjUgMTRDMTMuMjIzOSAxNCAxMyAxMy43NzYxIDEzIDEzLjVWMy41QzEzIDMuMjIzODYgMTMuMjIzOSAzIDEzLjUgM1pNNS41IDRDNS43NzYxNCA0IDYgNC4yMjM4NiA2IDQuNVYxMy41QzYgMTMuNzc2MSA1Ljc3NjE0IDE0IDUuNSAxNEM1LjIyMzg2IDE0IDUgMTMuNzc2MSA1IDEzLjVWNC41QzUgNC4yMjM4NiA1LjIyMzg2IDQgNS41IDRaTTEuNSA1QzEuNzc2MTQgNSAyIDUuMjIzODYgMiA1LjVWMTMuNUMyIDEzLjc3NjEgMS43NzYxNCAxNCAxLjUgMTRDMS4yMjM4NiAxNCAxIDEzLjc3NjEgMSAxMy41VjUuNUMxIDUuMjIzODYgMS4yMjM4NiA1IDEuNSA1Wk03LjUgNUM3Ljc3NjE0IDUgOCA1LjIyMzg2IDggNS41VjEzLjVDOCAxMy43NzYxIDcuNzc2MTQgMTQgNy41IDE0QzcuMjIzODYgMTQgNyAxMy43NzYxIDcgMTMuNVY1LjVDNyA1LjIyMzg2IDcuMjIzODYgNSA3LjUgNVpNMy41IDdDMy43NzYxNCA3IDQgNy4yMjM4NiA0IDcuNVYxMy41QzQgMTMuNzc2MSAzLjc3NjE0IDE0IDMuNSAxNEMzLjIyMzg2IDE0IDMgMTMuNzc2MSAzIDEzLjVWNy41QzMgNy4yMjM4NiAzLjIyMzg2IDcgMy41IDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxNPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk04LjYwMTI0IDEuMjUwODZDOC42MDEyNCAxLjc1NDU5IDguMjYyNzggMi4xNzkyNyA3LjgwMDg3IDIuMzA5ODlDMTAuMTQ1OSAyLjQ2NDcgMTIgNC40MTU4MiAxMiA2Ljc5OTk5VjEwLjI1QzEyIDExLjA1NjMgMTIuMDMyOSAxMS43MDc0IDEyLjcyMzYgMTIuMDUyOEMxMi45MzEgMTIuMTU2NSAxMy4wMzk5IDEyLjM4OTIgMTIuOTg2NiAxMi42MTQ5QzEyLjkzMzMgMTIuODQwNiAxMi43MzE5IDEzIDEyLjUgMTNIOC4xNjE0NEM4LjM2OTA0IDEzLjE4MzIgOC40OTk5NyAxMy40NTEzIDguNDk5OTcgMTMuNzVDOC40OTk5NyAxNC4zMDIzIDguMDUyMjYgMTQuNzUgNy40OTk5NyAxNC43NUM2Ljk0NzY5IDE0Ljc1IDYuNDk5OTcgMTQuMzAyMyA2LjQ5OTk3IDEzLjc1QzYuNDk5OTcgMTMuNDUxMyA2LjYzMDkxIDEzLjE4MzIgNi44Mzg1MSAxM0gyLjQ5OTk5QzIuMjY4MSAxMyAyLjA2NjY0IDEyLjg0MDYgMi4wMTMzNiAxMi42MTQ5QzEuOTYwMDkgMTIuMzg5MiAyLjA2ODk3IDEyLjE1NjUgMi4yNzYzOCAxMi4wNTI4QzIuOTY3MDggMTEuNzA3NCAyLjk5OTk5IDExLjA1NjMgMi45OTk5OSAxMC4yNVY2Ljc5OTk5QzIuOTk5OTkgNC40MTUzNyA0Ljg1NDgxIDIuNDYzOTYgNy4yMDA0MiAyLjMwOThDNi43Mzg2NyAyLjE3OTA4IDYuNDAwMzYgMS43NTQ0OCA2LjQwMDM2IDEuMjUwODZDNi40MDAzNiAwLjY0MzEwNCA2Ljg5MzA0IDAuMTUwNDIxIDcuNTAwOCAwLjE1MDQyMUM4LjEwODU1IDAuMTUwNDIxIDguNjAxMjQgMC42NDMxMDQgOC42MDEyNCAxLjI1MDg2Wk03LjQ5OTk5IDMuMjk5OTlDNS41NjY5OSAzLjI5OTk5IDMuOTk5OTkgNC44NjY5OSAzLjk5OTk5IDYuNzk5OTlWMTAuMjVMNC4wMDAwMiAxMC4zMDA5QzQuMDAwNSAxMC43NDYzIDQuMDAxMjEgMTEuNDA4NCAzLjY5OTI5IDEySDExLjMwMDdDMTAuOTk4OCAxMS40MDg0IDEwLjk5OTUgMTAuNzQ2MyAxMSAxMC4zMDA5TDExIDEwLjI1VjYuNzk5OTlDMTEgNC44NjY5OSA5LjQzMjk5IDMuMjk5OTkgNy40OTk5OSAzLjI5OTk5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0saz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMyA5QzMgNi41IDQuNSA0LjI1IDcuNSAxLjVDMTAuNSA0LjI1IDEyIDYuNSAxMiA5QzEyIDExLjQ4NTMgOS45ODUyOCAxMy41IDcuNSAxMy41QzUuMDE0NzIgMTMuNSAzIDExLjQ4NTMgMyA5Wk0xMC45NTI0IDguMzAzMDdDOS42NzM0NyA3LjgyMTIxIDguMjg3OSA4LjQ2MjA4IDYuOTg5NTYgOS4wNjI1OUM1LjkzMjcgOS41NTE0MiA0LjkzMzY1IDEwLjAxMzUgNC4wOTY5NSA5LjgyMTUzQzQuMDMzNTcgOS41NTgwNCA0IDkuMjgyOTQgNCA5QzQgNy4xMTIwMyA1LjAyNjg2IDUuMjcxOTUgNy41IDIuODczNTdDOS42NjgzNyA0Ljk3NjM5IDEwLjcyNSA2LjY1MDA0IDEwLjk1MjQgOC4zMDMwN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMgMi41QzMgMi4yMjM4NiAzLjIyMzg2IDIgMy41IDJIMTEuNUMxMS43NzYxIDIgMTIgMi4yMjM4NiAxMiAyLjVWMTMuNUMxMiAxMy42ODE4IDExLjkwMTQgMTMuODQ5MiAxMS43NDI0IDEzLjkzNzNDMTEuNTgzNCAxNC4wMjU0IDExLjM4OTEgMTQuMDIwMyAxMS4yMzUgMTMuOTI0TDcuNSAxMS41ODk2TDMuNzY1IDEzLjkyNEMzLjYxMDg3IDE0LjAyMDMgMy40MTY1OSAxNC4wMjU0IDMuMjU3NjIgMTMuOTM3M0MzLjA5ODY0IDEzLjg0OTIgMyAxMy42ODE4IDMgMTMuNVYyLjVaTTQgM1YxMi41OTc5TDYuOTcgMTAuNzQxNkM3LjI5NDI3IDEwLjUzOSA3LjcwNTczIDEwLjUzOSA4LjAzIDEwLjc0MTZMMTEgMTIuNTk3OVYzSDRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxQPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wLjI1IDFDMC4yNSAwLjU4NTc4NiAwLjU4NTc4NiAwLjI1IDEgMC4yNUgxNEMxNC40MTQyIDAuMjUgMTQuNzUgMC41ODU3ODYgMTQuNzUgMVYxNEMxNC43NSAxNC40MTQyIDE0LjQxNDIgMTQuNzUgMTQgMTQuNzVIMUMwLjU4NTc4NiAxNC43NSAwLjI1IDE0LjQxNDIgMC4yNSAxNFYxWk0xLjc1IDEuNzVWMTMuMjVIMTMuMjVWMS43NUgxLjc1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjNcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI1XCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIzXCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI5XCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMVwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCI5XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIxMVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSkpfSxJPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xIDEzLjI1TDE0IDEzLjI1VjE0Ljc1TDEgMTQuNzVWMTMuMjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjNcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxM1wiLHk6XCIzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTNcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI1XCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI1XCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIzXCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIzXCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI5XCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI5XCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMVwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTFcIix5OlwiMVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiOVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjlcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjExXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTNcIix5OlwiMTFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjNcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjlcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjExXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSl9LEE9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAgNy41QzAgNy4yMjM4NiAwLjIyMzg1OCA3IDAuNSA3SDNDMy4yNzYxNCA3IDMuNSA3LjIyMzg2IDMuNSA3LjVDMy41IDcuNzc2MTQgMy4yNzYxNCA4IDMgOEgwLjVDMC4yMjM4NTggOCAwIDcuNzc2MTQgMCA3LjVaTTUuNzUgNy41QzUuNzUgNy4yMjM4NiA1Ljk3Mzg2IDcgNi4yNSA3SDguNzVDOS4wMjYxNCA3IDkuMjUgNy4yMjM4NiA5LjI1IDcuNUM5LjI1IDcuNzc2MTQgOS4wMjYxNCA4IDguNzUgOEg2LjI1QzUuOTczODYgOCA1Ljc1IDcuNzc2MTQgNS43NSA3LjVaTTEyIDdDMTEuNzIzOSA3IDExLjUgNy4yMjM4NiAxMS41IDcuNUMxMS41IDcuNzc2MTQgMTEuNzIzOSA4IDEyIDhIMTQuNUMxNC43NzYxIDggMTUgNy43NzYxNCAxNSA3LjVDMTUgNy4yMjM4NiAxNC43NzYxIDcgMTQuNSA3SDEyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS41IDYuNjI1QzEuMDE2NzUgNi42MjUgMC42MjUgNy4wMTY3NSAwLjYyNSA3LjVDMC42MjUgNy45ODMyNSAxLjAxNjc1IDguMzc1IDEuNSA4LjM3NUMxLjk4MzI1IDguMzc1IDIuMzc1IDcuOTgzMjUgMi4zNzUgNy41QzIuMzc1IDcuMDE2NzUgMS45ODMyNSA2LjYyNSAxLjUgNi42MjVaTTUuNSA2LjYyNUM1LjAxNjc1IDYuNjI1IDQuNjI1IDcuMDE2NzUgNC42MjUgNy41QzQuNjI1IDcuOTgzMjUgNS4wMTY3NSA4LjM3NSA1LjUgOC4zNzVDNS45ODMyNSA4LjM3NSA2LjM3NSA3Ljk4MzI1IDYuMzc1IDcuNUM2LjM3NSA3LjAxNjc1IDUuOTgzMjUgNi42MjUgNS41IDYuNjI1Wk05LjUgNi42MjVDOS4wMTY3NSA2LjYyNSA4LjYyNSA3LjAxNjc1IDguNjI1IDcuNUM4LjYyNSA3Ljk4MzI1IDkuMDE2NzUgOC4zNzUgOS41IDguMzc1QzkuOTgzMjUgOC4zNzUgMTAuMzc1IDcuOTgzMjUgMTAuMzc1IDcuNUMxMC4zNzUgNy4wMTY3NSA5Ljk4MzI1IDYuNjI1IDkuNSA2LjYyNVpNMTIuNjI1IDcuNUMxMi42MjUgNy4wMTY3NSAxMy4wMTY4IDYuNjI1IDEzLjUgNi42MjVDMTMuOTgzMiA2LjYyNSAxNC4zNzUgNy4wMTY3NSAxNC4zNzUgNy41QzE0LjM3NSA3Ljk4MzI1IDEzLjk4MzIgOC4zNzUgMTMuNSA4LjM3NUMxMy4wMTY4IDguMzc1IDEyLjYyNSA3Ljk4MzI1IDEyLjYyNSA3LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxIPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjc1IDFMMS43NSAxNEwwLjI0OTk5OSAxNEwwLjI1IDFMMS43NSAxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMFwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgMTAgNylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTBcIix5OlwiMTNcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxMCAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTJcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDEyIDcpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEyXCIseTpcIjEzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgMTIgMTMpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjhcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDggNylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTRcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDE0IDcpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjhcIix5OlwiMTNcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCA4IDEzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxNFwiLHk6XCIxM1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDE0IDEzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCA4IDUpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxNCA1KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjNcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCA4IDMpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjNcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxNCAzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjlcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCA4IDkpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjlcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxNCA5KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjExXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgOCAxMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTRcIix5OlwiMTFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxNCAxMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNlwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgNiA3KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI2XCIseTpcIjEzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgNiAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNFwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgNCA3KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI0XCIseTpcIjEzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgNCAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTBcIix5OlwiMVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDEwIDEpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEyXCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxMiAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCA4IDEpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxNCAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI2XCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCA2IDEpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjRcIix5OlwiMVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDQgMSlcIixmaWxsOm59KSl9LEI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCI1LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjUuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIzLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjMuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCI3LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiMTMuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIxLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjcuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTNcIix5OlwiMTMuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTNcIix5OlwiMS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI1XCIseTpcIjcuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNVwiLHk6XCIxMy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI1XCIseTpcIjEuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiM1wiLHk6XCI3LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjNcIix5OlwiMTMuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiM1wiLHk6XCIxLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjlcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI5XCIseTpcIjEzLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjlcIix5OlwiMS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMVwiLHk6XCI3LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjExXCIseTpcIjEzLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjExXCIseTpcIjEuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCI5LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjkuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIxMS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxM1wiLHk6XCIxMS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjUuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCIzLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjFcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjEzLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjFcIix5OlwiMS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjkuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCIxMS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pKX0sVj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTMuMjUgMUwxMy4yNSAxNEwxNC43NSAxNEwxNC43NSAxTDEzLjI1IDFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCA1IDcpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCA1IDEzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMyA3KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMyAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDcgNylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDEgNylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDcgMTMpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCAxIDEzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgNyA1KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMSA1KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgNyAzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMSAzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgNyA5KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMSA5KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgNyAxMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDEgMTEpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCA5IDcpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCA5IDEzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMTEgNylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDExIDEzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgNSAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMyAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgNyAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMSAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgOSAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMTEgMSlcIixmaWxsOm59KSl9LEQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuMjUgNy41QzEuMjUgNy4yMjM4NiAxLjQ3Mzg2IDcgMS43NSA3SDEzLjI1QzEzLjUyNjEgNyAxMy43NSA3LjIyMzg2IDEzLjc1IDcuNUMxMy43NSA3Ljc3NjE0IDEzLjUyNjEgOCAxMy4yNSA4SDEuNzVDMS40NzM4NiA4IDEuMjUgNy43NzYxNCAxLjI1IDcuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFo9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCI1LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiMy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjcuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIxMy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjEuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTNcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI1XCIseTpcIjcuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiM1wiLHk6XCI3LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjlcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMVwiLHk6XCI3LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiOS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjExLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjFcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMSAxLjQ5OTk0QzEgMS4yMjM4IDEuMjIzODYgMC45OTk5MzkgMS41IDAuOTk5OTM5SDZWMS45OTk5NEgyVjUuOTk5OTRIMVYxLjQ5OTk0Wk0xMyAxLjk5OTk0SDlWMC45OTk5MzlIMTMuNUMxMy43NzYxIDAuOTk5OTM5IDE0IDEuMjIzOCAxNCAxLjQ5OTk0VjUuOTk5OTRIMTNWMS45OTk5NFpNMSAxMy40OTk5VjguOTk5OTRIMlYxMi45OTk5SDZWMTMuOTk5OUgxLjVDMS4yMjM4NiAxMy45OTk5IDEgMTMuNzc2MSAxIDEzLjQ5OTlaTTEzIDEyLjk5OTlWOC45OTk5NEgxNFYxMy40OTk5QzE0IDEzLjc3NjEgMTMuNzc2MSAxMy45OTk5IDEzLjUgMTMuOTk5OUg5LjVWMTIuOTk5OUgxM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LCQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuNSAzQzEuMjIzODYgMyAxIDMuMjIzODYgMSAzLjVDMSAzLjc3NjE0IDEuMjIzODYgNCAxLjUgNEgxMy41QzEzLjc3NjEgNCAxNCAzLjc3NjE0IDE0IDMuNUMxNCAzLjIyMzg2IDEzLjc3NjEgMyAxMy41IDNIMS41Wk0xIDcuNUMxIDcuMjIzODYgMS4yMjM4NiA3IDEuNSA3SDMuNUMzLjc3NjE0IDcgNCA3LjIyMzg2IDQgNy41QzQgNy43NzYxNCAzLjc3NjE0IDggMy41IDhIMS41QzEuMjIzODYgOCAxIDcuNzc2MTQgMSA3LjVaTTEgMTEuNUMxIDExLjIyMzkgMS4yMjM4NiAxMSAxLjUgMTFDMS43NzYxNCAxMSAyIDExLjIyMzkgMiAxMS41QzIgMTEuNzc2MSAxLjc3NjE0IDEyIDEuNSAxMkMxLjIyMzg2IDEyIDEgMTEuNzc2MSAxIDExLjVaTTMgMTEuNUMzIDExLjIyMzkgMy4yMjM4NiAxMSAzLjUgMTFDMy43NzYxNCAxMSA0IDExLjIyMzkgNCAxMS41QzQgMTEuNzc2MSAzLjc3NjE0IDEyIDMuNSAxMkMzLjIyMzg2IDEyIDMgMTEuNzc2MSAzIDExLjVaTTUuNSAxMUM1LjIyMzg2IDExIDUgMTEuMjIzOSA1IDExLjVDNSAxMS43NzYxIDUuMjIzODYgMTIgNS41IDEyQzUuNzc2MTQgMTIgNiAxMS43NzYxIDYgMTEuNUM2IDExLjIyMzkgNS43NzYxNCAxMSA1LjUgMTFaTTcgMTEuNUM3IDExLjIyMzkgNy4yMjM4NiAxMSA3LjUgMTFDNy43NzYxNCAxMSA4IDExLjIyMzkgOCAxMS41QzggMTEuNzc2MSA3Ljc3NjE0IDEyIDcuNSAxMkM3LjIyMzg2IDEyIDcgMTEuNzc2MSA3IDExLjVaTTkuNSAxMUM5LjIyMzg2IDExIDkgMTEuMjIzOSA5IDExLjVDOSAxMS43NzYxIDkuMjIzODYgMTIgOS41IDEyQzkuNzc2MTQgMTIgMTAgMTEuNzc2MSAxMCAxMS41QzEwIDExLjIyMzkgOS43NzYxNCAxMSA5LjUgMTFaTTExIDExLjVDMTEgMTEuMjIzOSAxMS4yMjM5IDExIDExLjUgMTFDMTEuNzc2MSAxMSAxMiAxMS4yMjM5IDEyIDExLjVDMTIgMTEuNzc2MSAxMS43NzYxIDEyIDExLjUgMTJDMTEuMjIzOSAxMiAxMSAxMS43NzYxIDExIDExLjVaTTEzLjUgMTFDMTMuMjIzOSAxMSAxMyAxMS4yMjM5IDEzIDExLjVDMTMgMTEuNzc2MSAxMy4yMjM5IDEyIDEzLjUgMTJDMTMuNzc2MSAxMiAxNCAxMS43NzYxIDE0IDExLjVDMTQgMTEuMjIzOSAxMy43NzYxIDExIDEzLjUgMTFaTTYuNSA3QzYuMjIzODYgNyA2IDcuMjIzODYgNiA3LjVDNiA3Ljc3NjE0IDYuMjIzODYgOCA2LjUgOEg4LjVDOC43NzYxNCA4IDkgNy43NzYxNCA5IDcuNUM5IDcuMjIzODYgOC43NzYxNCA3IDguNSA3SDYuNVpNMTEgNy41QzExIDcuMjIzODYgMTEuMjIzOSA3IDExLjUgN0gxMy41QzEzLjc3NjEgNyAxNCA3LjIyMzg2IDE0IDcuNUMxNCA3Ljc3NjE0IDEzLjc3NjEgOCAxMy41IDhIMTEuNUMxMS4yMjM5IDggMTEgNy43NzYxNCAxMSA3LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxOPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xNCAxLjc1TDEgMS43NUwxIDAuMjQ5OTk5TDE0IDAuMjVMMTQgMS43NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOFwiLHk6XCIxMFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgOCAxMClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMlwiLHk6XCIxMFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMiAxMClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOFwiLHk6XCIxMlwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgOCAxMilcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMlwiLHk6XCIxMlwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMiAxMilcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOFwiLHk6XCI4XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCA4IDgpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjhcIix5OlwiMTRcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDggMTQpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjJcIix5OlwiOFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMiA4KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIyXCIseTpcIjE0XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCAyIDE0KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMFwiLHk6XCI4XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCAxMCA4KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMFwiLHk6XCIxNFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMTAgMTQpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEyXCIseTpcIjhcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDEyIDgpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEyXCIseTpcIjE0XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCAxMiAxNClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNlwiLHk6XCI4XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCA2IDgpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjZcIix5OlwiMTRcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDYgMTQpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjRcIix5OlwiOFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgNCA4KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI0XCIseTpcIjE0XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCA0IDE0KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjZcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDggNilcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMlwiLHk6XCI2XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCAyIDYpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjhcIix5OlwiNFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgOCA0KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIyXCIseTpcIjRcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDIgNClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTRcIix5OlwiMTBcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDE0IDEwKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxNFwiLHk6XCIxMlwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMTQgMTIpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjhcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDE0IDgpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjE0XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCAxNCAxNClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTRcIix5OlwiNlwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMTQgNilcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTRcIix5OlwiNFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMTQgNClcIixmaWxsOm59KSl9LEY9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEyLjUgMkgyLjVDMi4yMjM4NiAyIDIgMi4yMjM4NiAyIDIuNVYxMi41QzIgMTIuNzc2MSAyLjIyMzg2IDEzIDIuNSAxM0gxMi41QzEyLjc3NjEgMTMgMTMgMTIuNzc2MSAxMyAxMi41VjIuNUMxMyAyLjIyMzg2IDEyLjc3NjEgMiAxMi41IDJaTTIuNSAxQzEuNjcxNTcgMSAxIDEuNjcxNTcgMSAyLjVWMTIuNUMxIDEzLjMyODQgMS42NzE1NyAxNCAyLjUgMTRIMTIuNUMxMy4zMjg0IDE0IDE0IDEzLjMyODQgMTQgMTIuNVYyLjVDMTQgMS42NzE1NyAxMy4zMjg0IDEgMTIuNSAxSDIuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuOTk5OTggMC45OTk5NzZDMS40NDc2OSAwLjk5OTk3NiAwLjk5OTk3NiAxLjQ0NzY5IDAuOTk5OTc2IDEuOTk5OThWMTNDMC45OTk5NzYgMTMuNTUyMyAxLjQ0NzY5IDE0IDEuOTk5OTggMTRIMTNDMTMuNTUyMyAxNCAxNCAxMy41NTIzIDE0IDEzVjEuOTk5OThDMTQgMS40NDc2OSAxMy41NTIzIDAuOTk5OTc2IDEzIDAuOTk5OTc2SDEuOTk5OThaTTEuOTk5OTggMS45OTk5OEwxMyAxLjk5OTk4VjEzSDEuOTk5OThWMS45OTk5OFpNNC40OTk5NiAzLjk5OTk2QzQuMjIzODIgMy45OTk5NiAzLjk5OTk2IDQuMjIzODIgMy45OTk5NiA0LjQ5OTk2VjEwLjVDMy45OTk5NiAxMC43NzYxIDQuMjIzODIgMTEgNC40OTk5NiAxMUgxMC41QzEwLjc3NjEgMTEgMTEgMTAuNzc2MSAxMSAxMC41VjQuNDk5OTZDMTEgNC4yMjM4MiAxMC43NzYxIDMuOTk5OTYgMTAuNSAzLjk5OTk2SDQuNDk5OTZaTTQuOTk5OTYgOS45OTk5NlY0Ljk5OTk2SDkuOTk5OTZWOS45OTk5Nkg0Ljk5OTk2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiA1SDEzQzEzLjU1MjMgNSAxNCA1LjQ0NzcyIDE0IDZWOUMxNCA5LjU1MjI4IDEzLjU1MjMgMTAgMTMgMTBIMkMxLjQ0NzcyIDEwIDEgOS41NTIyOCAxIDlWNkMxIDUuNDQ3NzIgMS40NDc3MiA1IDIgNVpNMCA2QzAgNC44OTU0MyAwLjg5NTQzMSA0IDIgNEgxM0MxNC4xMDQ2IDQgMTUgNC44OTU0MyAxNSA2VjlDMTUgMTAuMTA0NiAxNC4xMDQ2IDExIDEzIDExSDJDMC44OTU0MyAxMSAwIDEwLjEwNDYgMCA5VjZaTTQuNSA2Ljc1QzQuMDg1NzkgNi43NSAzLjc1IDcuMDg1NzkgMy43NSA3LjVDMy43NSA3LjkxNDIxIDQuMDg1NzkgOC4yNSA0LjUgOC4yNUM0LjkxNDIxIDguMjUgNS4yNSA3LjkxNDIxIDUuMjUgNy41QzUuMjUgNy4wODU3OSA0LjkxNDIxIDYuNzUgNC41IDYuNzVaTTYuNzUgNy41QzYuNzUgNy4wODU3OSA3LjA4NTc5IDYuNzUgNy41IDYuNzVDNy45MTQyMSA2Ljc1IDguMjUgNy4wODU3OSA4LjI1IDcuNUM4LjI1IDcuOTE0MjEgNy45MTQyMSA4LjI1IDcuNSA4LjI1QzcuMDg1NzkgOC4yNSA2Ljc1IDcuOTE0MjEgNi43NSA3LjVaTTEwLjUgNi43NUMxMC4wODU4IDYuNzUgOS43NSA3LjA4NTc5IDkuNzUgNy41QzkuNzUgNy45MTQyMSAxMC4wODU4IDguMjUgMTAuNSA4LjI1QzEwLjkxNDIgOC4yNSAxMS4yNSA3LjkxNDIxIDExLjI1IDcuNUMxMS4yNSA3LjA4NTc5IDEwLjkxNDIgNi43NSAxMC41IDYuNzVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx6PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjUgMUM0Ljc3NjE0IDEgNSAxLjIyMzg2IDUgMS41VjJIMTBWMS41QzEwIDEuMjIzODYgMTAuMjIzOSAxIDEwLjUgMUMxMC43NzYxIDEgMTEgMS4yMjM4NiAxMSAxLjVWMkgxMi41QzEzLjMyODQgMiAxNCAyLjY3MTU3IDE0IDMuNVYxMi41QzE0IDEzLjMyODQgMTMuMzI4NCAxNCAxMi41IDE0SDIuNUMxLjY3MTU3IDE0IDEgMTMuMzI4NCAxIDEyLjVWMy41QzEgMi42NzE1NyAxLjY3MTU3IDIgMi41IDJINFYxLjVDNCAxLjIyMzg2IDQuMjIzODYgMSA0LjUgMVpNMTAgM1YzLjVDMTAgMy43NzYxNCAxMC4yMjM5IDQgMTAuNSA0QzEwLjc3NjEgNCAxMSAzLjc3NjE0IDExIDMuNVYzSDEyLjVDMTIuNzc2MSAzIDEzIDMuMjIzODYgMTMgMy41VjVIMlYzLjVDMiAzLjIyMzg2IDIuMjIzODYgMyAyLjUgM0g0VjMuNUM0IDMuNzc2MTQgNC4yMjM4NiA0IDQuNSA0QzQuNzc2MTQgNCA1IDMuNzc2MTQgNSAzLjVWM0gxMFpNMiA2VjEyLjVDMiAxMi43NzYxIDIuMjIzODYgMTMgMi41IDEzSDEyLjVDMTIuNzc2MSAxMyAxMyAxMi43NzYxIDEzIDEyLjVWNkgyWk03IDcuNUM3IDcuMjIzODYgNy4yMjM4NiA3IDcuNSA3QzcuNzc2MTQgNyA4IDcuMjIzODYgOCA3LjVDOCA3Ljc3NjE0IDcuNzc2MTQgOCA3LjUgOEM3LjIyMzg2IDggNyA3Ljc3NjE0IDcgNy41Wk05LjUgN0M5LjIyMzg2IDcgOSA3LjIyMzg2IDkgNy41QzkgNy43NzYxNCA5LjIyMzg2IDggOS41IDhDOS43NzYxNCA4IDEwIDcuNzc2MTQgMTAgNy41QzEwIDcuMjIzODYgOS43NzYxNCA3IDkuNSA3Wk0xMSA3LjVDMTEgNy4yMjM4NiAxMS4yMjM5IDcgMTEuNSA3QzExLjc3NjEgNyAxMiA3LjIyMzg2IDEyIDcuNUMxMiA3Ljc3NjE0IDExLjc3NjEgOCAxMS41IDhDMTEuMjIzOSA4IDExIDcuNzc2MTQgMTEgNy41Wk0xMS41IDlDMTEuMjIzOSA5IDExIDkuMjIzODYgMTEgOS41QzExIDkuNzc2MTQgMTEuMjIzOSAxMCAxMS41IDEwQzExLjc3NjEgMTAgMTIgOS43NzYxNCAxMiA5LjVDMTIgOS4yMjM4NiAxMS43NzYxIDkgMTEuNSA5Wk05IDkuNUM5IDkuMjIzODYgOS4yMjM4NiA5IDkuNSA5QzkuNzc2MTQgOSAxMCA5LjIyMzg2IDEwIDkuNUMxMCA5Ljc3NjE0IDkuNzc2MTQgMTAgOS41IDEwQzkuMjIzODYgMTAgOSA5Ljc3NjE0IDkgOS41Wk03LjUgOUM3LjIyMzg2IDkgNyA5LjIyMzg2IDcgOS41QzcgOS43NzYxNCA3LjIyMzg2IDEwIDcuNSAxMEM3Ljc3NjE0IDEwIDggOS43NzYxNCA4IDkuNUM4IDkuMjIzODYgNy43NzYxNCA5IDcuNSA5Wk01IDkuNUM1IDkuMjIzODYgNS4yMjM4NiA5IDUuNSA5QzUuNzc2MTQgOSA2IDkuMjIzODYgNiA5LjVDNiA5Ljc3NjE0IDUuNzc2MTQgMTAgNS41IDEwQzUuMjIzODYgMTAgNSA5Ljc3NjE0IDUgOS41Wk0zLjUgOUMzLjIyMzg2IDkgMyA5LjIyMzg2IDMgOS41QzMgOS43NzYxNCAzLjIyMzg2IDEwIDMuNSAxMEMzLjc3NjE0IDEwIDQgOS43NzYxNCA0IDkuNUM0IDkuMjIzODYgMy43NzYxNCA5IDMuNSA5Wk0zIDExLjVDMyAxMS4yMjM5IDMuMjIzODYgMTEgMy41IDExQzMuNzc2MTQgMTEgNCAxMS4yMjM5IDQgMTEuNUM0IDExLjc3NjEgMy43NzYxNCAxMiAzLjUgMTJDMy4yMjM4NiAxMiAzIDExLjc3NjEgMyAxMS41Wk01LjUgMTFDNS4yMjM4NiAxMSA1IDExLjIyMzkgNSAxMS41QzUgMTEuNzc2MSA1LjIyMzg2IDEyIDUuNSAxMkM1Ljc3NjE0IDEyIDYgMTEuNzc2MSA2IDExLjVDNiAxMS4yMjM5IDUuNzc2MTQgMTEgNS41IDExWk03IDExLjVDNyAxMS4yMjM5IDcuMjIzODYgMTEgNy41IDExQzcuNzc2MTQgMTEgOCAxMS4yMjM5IDggMTEuNUM4IDExLjc3NjEgNy43NzYxNCAxMiA3LjUgMTJDNy4yMjM4NiAxMiA3IDExLjc3NjEgNyAxMS41Wk05LjUgMTFDOS4yMjM4NiAxMSA5IDExLjIyMzkgOSAxMS41QzkgMTEuNzc2MSA5LjIyMzg2IDEyIDkuNSAxMkM5Ljc3NjE0IDEyIDEwIDExLjc3NjEgMTAgMTEuNUMxMCAxMS4yMjM5IDkuNzc2MTQgMTEgOS41IDExWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sRz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiAzQzEuNDQ3NzIgMyAxIDMuNDQ3NzIgMSA0VjExQzEgMTEuNTUyMyAxLjQ0NzcyIDEyIDIgMTJIMTNDMTMuNTUyMyAxMiAxNCAxMS41NTIzIDE0IDExVjRDMTQgMy40NDc3MiAxMy41NTIzIDMgMTMgM0gyWk0wIDRDMCAyLjg5NTQzIDAuODk1NDMxIDIgMiAySDEzQzE0LjEwNDYgMiAxNSAyLjg5NTQzIDE1IDRWMTFDMTUgMTIuMTA0NiAxNC4xMDQ2IDEzIDEzIDEzSDJDMC44OTU0MzEgMTMgMCAxMi4xMDQ2IDAgMTFWNFpNMiA0LjI1QzIgNC4xMTE5MyAyLjExMTkzIDQgMi4yNSA0SDQuNzVDNC44ODgwNyA0IDUgNC4xMTE5MyA1IDQuMjVWNS43NTQ1NEM1IDUuODkyNjEgNC44ODgwNyA2LjAwNDU0IDQuNzUgNi4wMDQ1NEgyLjI1QzIuMTExOTMgNi4wMDQ1NCAyIDUuODkyNjEgMiA1Ljc1NDU0VjQuMjVaTTEyLjEwMSA3LjU4NDIxQzEyLjEwMSA5LjAyMDczIDEwLjkzNjUgMTAuMTg1MyA5LjQ5OTk4IDEwLjE4NTNDOC4wNjM0NiAxMC4xODUzIDYuODk4OTMgOS4wMjA3MyA2Ljg5ODkzIDcuNTg0MjFDNi44OTg5MyA2LjE0NzY5IDguMDYzNDYgNC45ODMxNSA5LjQ5OTk4IDQuOTgzMTVDMTAuOTM2NSA0Ljk4MzE1IDEyLjEwMSA2LjE0NzY5IDEyLjEwMSA3LjU4NDIxWk0xMy4xMDEgNy41ODQyMUMxMy4xMDEgOS41NzMwMiAxMS40ODg4IDExLjE4NTMgOS40OTk5OCAxMS4xODUzQzcuNTExMTcgMTEuMTg1MyA1Ljg5ODkzIDkuNTczMDIgNS44OTg5MyA3LjU4NDIxQzUuODk4OTMgNS41OTU0IDcuNTExMTcgMy45ODMxNSA5LjQ5OTk4IDMuOTgzMTVDMTEuNDg4OCAzLjk4MzE1IDEzLjEwMSA1LjU5NTQgMTMuMTAxIDcuNTg0MjFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxxPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yIDMuNUMyIDMuMjIzODYgMi4yMjM4NiAzIDIuNSAzSDEyLjVDMTIuNzc2MSAzIDEzIDMuMjIzODYgMTMgMy41VjkuNUMxMyA5Ljc3NjE0IDEyLjc3NjEgMTAgMTIuNSAxMEgyLjVDMi4yMjM4NiAxMCAyIDkuNzc2MTQgMiA5LjVWMy41Wk0yIDEwLjkxNDZDMS40MTc0IDEwLjcwODcgMSAxMC4xNTMxIDEgOS41VjMuNUMxIDIuNjcxNTcgMS42NzE1NyAyIDIuNSAySDEyLjVDMTMuMzI4NCAyIDE0IDIuNjcxNTcgMTQgMy41VjkuNUMxNCAxMC4xNTMxIDEzLjU4MjYgMTAuNzA4NyAxMyAxMC45MTQ2VjExLjVDMTMgMTIuMzI4NCAxMi4zMjg0IDEzIDExLjUgMTNIMy41QzIuNjcxNTcgMTMgMiAxMi4zMjg0IDIgMTEuNVYxMC45MTQ2Wk0xMiAxMVYxMS41QzEyIDExLjc3NjEgMTEuNzc2MSAxMiAxMS41IDEySDMuNUMzLjIyMzg2IDEyIDMgMTEuNzc2MSAzIDExLjVWMTFIMTJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxZPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjUgM0MyLjIyMzg2IDMgMiAzLjIyMzg2IDIgMy41VjkuNUMyIDkuNzc2MTQgMi4yMjM4NiAxMCAyLjUgMTBIMTIuNUMxMi43NzYxIDEwIDEzIDkuNzc2MTQgMTMgOS41VjMuNUMxMyAzLjIyMzg2IDEyLjc3NjEgMyAxMi41IDNIMi41Wk0xIDkuNUMxIDEwLjE1MzEgMS40MTc0IDEwLjcwODcgMiAxMC45MTQ2VjExLjVDMiAxMi4zMjg0IDIuNjcxNTcgMTMgMy41IDEzSDExLjVDMTIuMzI4NCAxMyAxMyAxMi4zMjg0IDEzIDExLjVWMTAuOTE0NkMxMy41ODI2IDEwLjcwODcgMTQgMTAuMTUzMSAxNCA5LjVWMy41QzE0IDIuNjcxNTcgMTMuMzI4NCAyIDEyLjUgMkgyLjVDMS42NzE1NyAyIDEgMi42NzE1NyAxIDMuNVY5LjVaTTEyIDExLjVWMTFIM1YxMS41QzMgMTEuNzc2MSAzLjIyMzg2IDEyIDMuNSAxMkgxMS41QzExLjc3NjEgMTIgMTIgMTEuNzc2MSAxMiAxMS41Wk01LjUgNkM1LjIyMzg2IDYgNSA2LjIyMzg2IDUgNi41QzUgNi43NzYxNCA1LjIyMzg2IDcgNS41IDdIOS41QzkuNzc2MTQgNyAxMCA2Ljc3NjE0IDEwIDYuNUMxMCA2LjIyMzg2IDkuNzc2MTQgNiA5LjUgNkg1LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxLPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yIDMuNUMyIDMuMjIzODYgMi4yMjM4NiAzIDIuNSAzSDEyLjVDMTIuNzc2MSAzIDEzIDMuMjIzODYgMTMgMy41VjkuNUMxMyA5Ljc3NjE0IDEyLjc3NjEgMTAgMTIuNSAxMEgyLjVDMi4yMjM4NiAxMCAyIDkuNzc2MTQgMiA5LjVWMy41Wk0yIDEwLjkxNDZDMS40MTc0IDEwLjcwODcgMSAxMC4xNTMxIDEgOS41VjMuNUMxIDIuNjcxNTcgMS42NzE1NyAyIDIuNSAySDEyLjVDMTMuMzI4NCAyIDE0IDIuNjcxNTcgMTQgMy41VjkuNUMxNCAxMC4xNTMxIDEzLjU4MjYgMTAuNzA4NyAxMyAxMC45MTQ2VjExLjVDMTMgMTIuMzI4NCAxMi4zMjg0IDEzIDExLjUgMTNIMy41QzIuNjcxNTcgMTMgMiAxMi4zMjg0IDIgMTEuNVYxMC45MTQ2Wk0xMiAxMVYxMS41QzEyIDExLjc3NjEgMTEuNzc2MSAxMiAxMS41IDEySDMuNUMzLjIyMzg2IDEyIDMgMTEuNzc2MSAzIDExLjVWMTFIMTJaTTUgNi41QzUgNi4yMjM4NiA1LjIyMzg2IDYgNS41IDZIN1Y0LjVDNyA0LjIyMzg2IDcuMjIzODYgNCA3LjUgNEM3Ljc3NjE0IDQgOCA0LjIyMzg2IDggNC41VjZIOS41QzkuNzc2MTQgNiAxMCA2LjIyMzg2IDEwIDYuNUMxMCA2Ljc3NjE0IDkuNzc2MTQgNyA5LjUgN0g4VjguNUM4IDguNzc2MTQgNy43NzYxNCA5IDcuNSA5QzcuMjIzODYgOSA3IDguNzc2MTQgNyA4LjVWN0g1LjVDNS4yMjM4NiA3IDUgNi43NzYxNCA1IDYuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFg9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuMTgxNzkgNi4xODE4MUM0LjM1NzUzIDYuMDA2MDggNC42NDI0NSA2LjAwNjA4IDQuODE4MTkgNi4xODE4MUw3LjQ5OTk5IDguODYzNjJMMTAuMTgxOCA2LjE4MTgxQzEwLjM1NzUgNi4wMDYwOCAxMC42NDI0IDYuMDA2MDggMTAuODE4MiA2LjE4MTgxQzEwLjk5MzkgNi4zNTc1NSAxMC45OTM5IDYuNjQyNDcgMTAuODE4MiA2LjgxODIxTDcuODE4MTkgOS44MTgyMUM3LjczMzc5IDkuOTAyNiA3LjYxOTM0IDkuOTUwMDEgNy40OTk5OSA5Ljk1MDAxQzcuMzgwNjQgOS45NTAwMSA3LjI2NjE4IDkuOTAyNiA3LjE4MTc5IDkuODE4MjFMNC4xODE3OSA2LjgxODIxQzQuMDA2MDUgNi42NDI0NyA0LjAwNjA1IDYuMzU3NTUgNC4xODE3OSA2LjE4MTgxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sSj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC44MTgwOSA0LjE4MTc5QzguOTkzODMgNC4zNTc1MyA4Ljk5MzgzIDQuNjQyNDUgOC44MTgwOSA0LjgxODE5TDYuMTM2MjkgNy40OTk5OUw4LjgxODA5IDEwLjE4MThDOC45OTM4MyAxMC4zNTc1IDguOTkzODMgMTAuNjQyNCA4LjgxODA5IDEwLjgxODJDOC42NDIzNiAxMC45OTM5IDguMzU3NDMgMTAuOTkzOSA4LjE4MTcgMTAuODE4Mkw1LjE4MTcgNy44MTgxOUM1LjA5NzMxIDcuNzMzNzkgNS4wNDk5IDcuNjE5MzMgNS4wNDk5IDcuNDk5OTlDNS4wNDk5IDcuMzgwNjQgNS4wOTczMSA3LjI2NjE4IDUuMTgxNyA3LjE4MTc5TDguMTgxNyA0LjE4MTc5QzguMzU3NDMgNC4wMDYwNSA4LjY0MjM2IDQuMDA2MDUgOC44MTgwOSA0LjE4MTc5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNi4xODE5NCA0LjE4MTg1QzYuMzU3NjcgNC4wMDYxMSA2LjY0MjYgNC4wMDYxMSA2LjgxODMzIDQuMTgxODVMOS44MTgzMyA3LjE4MTg1QzkuOTAyNzIgNy4yNjYyNCA5Ljk1MDEzIDcuMzgwNyA5Ljk1MDEzIDcuNTAwMDVDOS45NTAxMyA3LjYxOTQgOS45MDI3MiA3LjczMzg2IDkuODE4MzMgNy44MTgyNUw2LjgxODMzIDEwLjgxODJDNi42NDI2IDEwLjk5NCA2LjM1NzY3IDEwLjk5NCA2LjE4MTk0IDEwLjgxODJDNi4wMDYyIDEwLjY0MjUgNi4wMDYyIDEwLjM1NzYgNi4xODE5NCAxMC4xODE5TDguODYzNzQgNy41MDAwNUw2LjE4MTk0IDQuODE4MjVDNi4wMDYyIDQuNjQyNTEgNi4wMDYyIDQuMzU3NTkgNi4xODE5NCA0LjE4MTg1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuOTMxNzkgNS40MzE3OUM0Ljc1NjA1IDUuNjA3NTMgNC43NTYwNSA1Ljg5MjQ1IDQuOTMxNzkgNi4wNjgxOUM1LjEwNzUzIDYuMjQzOTIgNS4zOTI0NSA2LjI0MzkyIDUuNTY4MTkgNi4wNjgxOUw3LjQ5OTk5IDQuMTM2MzhMOS40MzE3OSA2LjA2ODE5QzkuNjA3NTMgNi4yNDM5MiA5Ljg5MjQ1IDYuMjQzOTIgMTAuMDY4MiA2LjA2ODE5QzEwLjI0MzkgNS44OTI0NSAxMC4yNDM5IDUuNjA3NTMgMTAuMDY4MiA1LjQzMTc5TDcuODE4MTkgMy4xODE3OUM3LjczMzc5IDMuMDk3NCA3LjYxOTMzIDMuMDQ5OTkgNy40OTk5OSAzLjA0OTk5QzcuMzgwNjQgMy4wNDk5OSA3LjI2NjE4IDMuMDk3NCA3LjE4MTc5IDMuMTgxNzlMNC45MzE3OSA1LjQzMTc5Wk0xMC4wNjgyIDkuNTY4MTlDMTAuMjQzOSA5LjM5MjQ1IDEwLjI0MzkgOS4xMDc1MyAxMC4wNjgyIDguOTMxNzlDOS44OTI0NSA4Ljc1NjA2IDkuNjA3NTMgOC43NTYwNiA5LjQzMTc5IDguOTMxNzlMNy40OTk5OSAxMC44NjM2TDUuNTY4MTkgOC45MzE3OUM1LjM5MjQ1IDguNzU2MDYgNS4xMDc1MyA4Ljc1NjA2IDQuOTMxNzkgOC45MzE3OUM0Ljc1NjA1IDkuMTA3NTMgNC43NTYwNSA5LjM5MjQ1IDQuOTMxNzkgOS41NjgxOUw3LjE4MTc5IDExLjgxODJDNy4zNTc1MyAxMS45OTM5IDcuNjQyNDUgMTEuOTkzOSA3LjgxODE5IDExLjgxODJMMTAuMDY4MiA5LjU2ODE5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuMTgxNzkgOC44MTgxOUM0LjAwNjA1IDguNjQyNDUgNC4wMDYwNSA4LjM1NzUzIDQuMTgxNzkgOC4xODE3OUw3LjE4MTc5IDUuMTgxNzlDNy4yNjYxOCA1LjA5NzQgNy4zODA2NCA1LjA0OTk5IDcuNDk5OTkgNS4wNDk5OUM3LjYxOTMzIDUuMDQ5OTkgNy43MzM3OSA1LjA5NzQgNy44MTgxOSA1LjE4MTc5TDEwLjgxODIgOC4xODE3OUMxMC45OTM5IDguMzU3NTMgMTAuOTkzOSA4LjY0MjQ1IDEwLjgxODIgOC44MTgxOUMxMC42NDI0IDguOTkzOTIgMTAuMzU3NSA4Ljk5MzkyIDEwLjE4MTggOC44MTgxOUw3LjQ5OTk5IDYuMTM2MzhMNC44MTgxOSA4LjgxODE5QzQuNjQyNDUgOC45OTM5MiA0LjM1NzUzIDguOTkzOTIgNC4xODE3OSA4LjgxODE5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEyLjUgM0wyLjQ5OTk5IDMuMDAwMDJDMS42NzE1NyAzLjAwMDAyIDAuOTk5OTk5IDMuNjcxNTkgMC45OTk5OTkgNC41MDAwMlY5LjUwMDAyQzAuOTk5OTk5IDEwLjMyODQgMS42NzE1NyAxMSAyLjUgMTFINy41MDAwMkM3LjYzMjYzIDExIDcuNzU5ODEgMTEuMDUyNyA3Ljg1MzU4IDExLjE0NjVMOS45OTk5OSAxMy4yOTI5VjExLjVDOS45OTk5OSAxMS4yMjM5IDEwLjIyMzkgMTEgMTAuNSAxMUgxMi41QzEzLjMyODQgMTEgMTQgMTAuMzI4NCAxNCA5LjUwMDAyVjQuNUMxNCAzLjY3MTU3IDEzLjMyODQgMyAxMi41IDNaTTIuNDk5OTkgMi4wMDAwMkwxMi41IDJDMTMuODgwNyAyIDE1IDMuMTE5MjggMTUgNC41VjkuNTAwMDJDMTUgMTAuODgwNyAxMy44ODA3IDEyIDEyLjUgMTJIMTFWMTQuNUMxMSAxNC43MDIyIDEwLjg3ODIgMTQuODg0NSAxMC42OTEzIDE0Ljk2MTlDMTAuNTA0NSAxNS4wMzkzIDEwLjI4OTQgMTQuOTk2NSAxMC4xNDY0IDE0Ljg1MzVMNy4yOTI5MiAxMkgyLjVDMS4xMTkyOSAxMiAwIDEwLjg4MDcgMCA5LjUwMDAyVjQuNTAwMDJDMCAzLjExOTMxIDEuMTE5MjggMi4wMDAwMiAyLjQ5OTk5IDIuMDAwMDJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxyZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTEuNDY2OSAzLjcyNjg0QzExLjc1NTggMy45MTU3NCAxMS44MzY5IDQuMzAzMDggMTEuNjQ4IDQuNTkxOThMNy4zOTc5OSAxMS4wOTJDNy4yOTc4MyAxMS4yNDUyIDcuMTM1NTYgMTEuMzQ2NyA2Ljk1NDAyIDExLjM2OTlDNi43NzI0NyAxMS4zOTMxIDYuNTg5ODkgMTEuMzM1NSA2LjQ1NDQ2IDExLjIxMjRMMy43MDQ0NiA4LjcxMjQxQzMuNDQ5MDUgOC40ODAyMiAzLjQzMDIzIDguMDg0OTQgMy42NjI0MiA3LjgyOTUzQzMuODk0NjEgNy41NzQxMiA0LjI4OTg5IDcuNTU1MjkgNC41NDUzIDcuNzg3NDlMNi43NTI5MiA5Ljc5NDQxTDEwLjYwMTggMy45MDc5MkMxMC43OTA3IDMuNjE5MDIgMTEuMTc4IDMuNTM3OTUgMTEuNDY2OSAzLjcyNjg0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sb2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5OTEgMC44NzcwNDVDMy44NDIyMiAwLjg3NzA0NSAwLjg3NzA3NSAzLjg0MjE5IDAuODc3MDc1IDcuNDk5ODhDMC44NzcwNzUgMTEuMTU3NSAzLjg0MjIyIDE0LjEyMjcgNy40OTk5MSAxNC4xMjI3QzExLjE1NzYgMTQuMTIyNyAxNC4xMjI3IDExLjE1NzUgMTQuMTIyNyA3LjQ5OTg4QzE0LjEyMjcgMy44NDIxOSAxMS4xNTc2IDAuODc3MDQ1IDcuNDk5OTEgMC44NzcwNDVaTTEuODI3MDggNy40OTk4OEMxLjgyNzA4IDQuMzY2ODYgNC4zNjY4OSAxLjgyNzA0IDcuNDk5OTEgMS44MjcwNEMxMC42MzI5IDEuODI3MDQgMTMuMTcyNyA0LjM2Njg2IDEzLjE3MjcgNy40OTk4OEMxMy4xNzI3IDEwLjYzMjkgMTAuNjMyOSAxMy4xNzI3IDcuNDk5OTEgMTMuMTcyN0M0LjM2Njg5IDEzLjE3MjcgMS44MjcwOCAxMC42MzI5IDEuODI3MDggNy40OTk4OFpNMTAuMTU4OSA1LjUzNzc0QzEwLjMxNzggNS4zMTE5MSAxMC4yNjM2IDUuMDAwMDEgMTAuMDM3OCA0Ljg0MTA5QzkuODExOTQgNC42ODIxNyA5LjUwMDA0IDQuNzM2NDIgOS4zNDExMiA0Ljk2MjI1TDYuNTE5NzcgOC45NzE1NEw1LjM1NjgxIDcuNzg3MDZDNS4xNjMzNCA3LjU5MDAyIDQuODQ2NzcgNy41ODcxMSA0LjY0OTczIDcuNzgwNThDNC40NTI2OCA3Ljk3NDA0IDQuNDQ5NzggOC4yOTA2MSA0LjY0MzI1IDguNDg3NjVMNi4yMjY1OCAxMC4xMDAzQzYuMzMwNTQgMTAuMjA2MiA2LjQ3NjE3IDEwLjI2MDQgNi42MjQwNyAxMC4yNDgzQzYuNzcxOTcgMTAuMjM2MyA2LjkwNjg2IDEwLjE1OTEgNi45OTIyNiAxMC4wMzc3TDEwLjE1ODkgNS41Mzc3NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGllPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zIDNIMTJWMTJIM0wzIDNaTTIgM0MyIDIuNDQ3NzEgMi40NDc3MiAyIDMgMkgxMkMxMi41NTIzIDIgMTMgMi40NDc3MiAxMyAzVjEyQzEzIDEyLjU1MjMgMTIuNTUyMyAxMyAxMiAxM0gzQzIuNDQ3NzEgMTMgMiAxMi41NTIzIDIgMTJWM1pNMTAuMzQ5OCA1LjUxMTA1QzEwLjUwNiA1LjI4MzM3IDEwLjQ0ODEgNC45NzIxMiAxMC4yMjA0IDQuODE1ODdDOS45OTI3NSA0LjY1OTYxIDkuNjgxNSA0LjcxNzUxIDkuNTI1MjUgNC45NDUxOUw2LjY0MDQ4IDkuMTQ4NTdMNS4xOTczMyA3LjQwODg5QzUuMDIxMDIgNy4xOTYzNSA0LjcwNTggNy4xNjY5OSA0LjQ5MzI3IDcuMzQzMjlDNC4yODA3MyA3LjUxOTYgNC4yNTEzNyA3LjgzNDgyIDQuNDI3NjcgOC4wNDczNUw2LjI5MzQgMTAuMjk2NEM2LjM5MzQ4IDEwLjQxNzEgNi41NDQzNyAxMC40ODM4IDYuNzAwOTcgMTAuNDc2N0M2Ljg1NzU3IDEwLjQ2OTUgNy4wMDE3NyAxMC4zODk0IDcuMDkwNDcgMTAuMjYwMUwxMC4zNDk4IDUuNTExMDVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxhZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy4xMzUyMyA2LjE1ODAzQzMuMzI0MSA1Ljk1NjU3IDMuNjQwNTIgNS45NDYzNyAzLjg0MTk3IDYuMTM1MjNMNy41IDkuNTY0NjRMMTEuMTU4IDYuMTM1MjNDMTEuMzU5NSA1Ljk0NjM3IDExLjY3NTkgNS45NTY1NyAxMS44NjQ4IDYuMTU4MDNDMTIuMDUzNiA2LjM1OTQ5IDEyLjA0MzQgNi42NzU5MSAxMS44NDIgNi44NjQ3N0w3Ljg0MTk3IDEwLjYxNDhDNy42NDk2NCAxMC43OTUxIDcuMzUwMzYgMTAuNzk1MSA3LjE1ODAzIDEwLjYxNDhMMy4xNTgwMyA2Ljg2NDc3QzIuOTU2NTcgNi42NzU5MSAyLjk0NjM3IDYuMzU5NDkgMy4xMzUyMyA2LjE1ODAzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTguODQxODIgMy4xMzUxNEM5LjA0MzI3IDMuMzI0MDEgOS4wNTM0OCAzLjY0MDQyIDguODY0NjIgMy44NDE4OEw1LjQzNTIxIDcuNDk5OTFMOC44NjQ2MiAxMS4xNTc5QzkuMDUzNDggMTEuMzU5NCA5LjA0MzI3IDExLjY3NTggOC44NDE4MiAxMS44NjQ3QzguNjQwMzYgMTIuMDUzNSA4LjMyMzk0IDEyLjA0MzMgOC4xMzUwOCAxMS44NDE5TDQuMzg1MDggNy44NDE4OEM0LjIwNDc3IDcuNjQ5NTUgNC4yMDQ3NyA3LjM1MDI3IDQuMzg1MDggNy4xNTc5NEw4LjEzNTA4IDMuMTU3OTRDOC4zMjM5NCAyLjk1NjQ4IDguNjQwMzYgMi45NDYyOCA4Ljg0MTgyIDMuMTM1MTRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxzZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNi4xNTg0IDMuMTM1MDhDNi4zNTk4NSAyLjk0NjIxIDYuNjc2MjcgMi45NTY0MiA2Ljg2NTE0IDMuMTU3ODhMMTAuNjE1MSA3LjE1Nzg4QzEwLjc5NTQgNy4zNTAyIDEwLjc5NTQgNy42NDk0OSAxMC42MTUxIDcuODQxODJMNi44NjUxNCAxMS44NDE4QzYuNjc2MjcgMTIuMDQzMyA2LjM1OTg1IDEyLjA1MzUgNi4xNTg0IDExLjg2NDZDNS45NTY5NCAxMS42NzU3IDUuOTQ2NzMgMTEuMzU5MyA2LjEzNTYgMTEuMTU3OUw5LjU2NSA3LjQ5OTg1TDYuMTM1NiAzLjg0MTgyQzUuOTQ2NzMgMy42NDAzNiA1Ljk1Njk0IDMuMzIzOTQgNi4xNTg0IDMuMTM1MDhaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxjZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy4xMzUyMyA4Ljg0MTk3QzMuMzI0MSA5LjA0MzQzIDMuNjQwNTIgOS4wNTM2MyAzLjg0MTk3IDguODY0NzdMNy41IDUuNDM1MzZMMTEuMTU4IDguODY0NzdDMTEuMzU5NSA5LjA1MzYzIDExLjY3NTkgOS4wNDM0MyAxMS44NjQ4IDguODQxOTdDMTIuMDUzNiA4LjY0MDUxIDEyLjA0MzQgOC4zMjQwOSAxMS44NDIgOC4xMzUyM0w3Ljg0MTk3IDQuMzg1MjNDNy42NDk2NCA0LjIwNDkyIDcuMzUwMzYgNC4yMDQ5MiA3LjE1ODAzIDQuMzg1MjNMMy4xNTgwMyA4LjEzNTIzQzIuOTU2NTcgOC4zMjQwOSAyLjk0NjM3IDguNjQwNTEgMy4xMzUyMyA4Ljg0MTk3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuODc3MDc1IDcuNDk5OTFDMC44NzcwNzUgMy44NDIyMiAzLjg0MjIyIDAuODc3MDc1IDcuNDk5OTEgMC44NzcwNzVDMTEuMTU3NiAwLjg3NzA3NSAxNC4xMjI3IDMuODQyMjIgMTQuMTIyNyA3LjQ5OTkxQzE0LjEyMjcgMTEuMTU3NiAxMS4xNTc2IDE0LjEyMjcgNy40OTk5MSAxNC4xMjI3QzMuODQyMjIgMTQuMTIyNyAwLjg3NzA3NSAxMS4xNTc2IDAuODc3MDc1IDcuNDk5OTFaTTcuNDk5OTEgMS44MjcwOEM0LjM2Njg5IDEuODI3MDggMS44MjcwOCA0LjM2Njg5IDEuODI3MDggNy40OTk5MUMxLjgyNzA4IDEwLjYzMjkgNC4zNjY4OSAxMy4xNzI3IDcuNDk5OTEgMTMuMTcyN0MxMC42MzI5IDEzLjE3MjcgMTMuMTcyNyAxMC42MzI5IDEzLjE3MjcgNy40OTk5MUMxMy4xNzI3IDQuMzY2ODkgMTAuNjMyOSAxLjgyNzA4IDcuNDk5OTEgMS44MjcwOFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGZlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTkxIDAuODc3MDc1QzMuODQyMjIgMC44NzcwNzUgMC44NzcwNzUgMy44NDIyMiAwLjg3NzA3NSA3LjQ5OTkxQzAuODc3MDc1IDExLjE1NzYgMy44NDIyMiAxNC4xMjI3IDcuNDk5OTEgMTQuMTIyN0MxMS4xNTc2IDE0LjEyMjcgMTQuMTIyNyAxMS4xNTc2IDE0LjEyMjcgNy40OTk5MUMxNC4xMjI3IDMuODQyMjIgMTEuMTU3NiAwLjg3NzA3NSA3LjQ5OTkxIDAuODc3MDc1Wk0zLjg1NzY4IDMuMTUwNTdDNC44NDMxMSAyLjMyNDQ4IDYuMTEzNDIgMS44MjcwOCA3LjQ5OTkxIDEuODI3MDhDMTAuNjMyOSAxLjgyNzA4IDEzLjE3MjcgNC4zNjY4OSAxMy4xNzI3IDcuNDk5OTFDMTMuMTcyNyA4Ljg4NjM4IDEyLjY3NTMgMTAuMTU2NyAxMS44NDkyIDExLjE0MjFMMy44NTc2OCAzLjE1MDU3Wk0zLjE1MDU3IDMuODU3NjhDMi4zMjQ0OCA0Ljg0MzExIDEuODI3MDggNi4xMTM0MiAxLjgyNzA4IDcuNDk5OTFDMS44MjcwOCAxMC42MzI5IDQuMzY2ODkgMTMuMTcyNyA3LjQ5OTkxIDEzLjE3MjdDOC44ODYzOCAxMy4xNzI3IDEwLjE1NjcgMTIuNjc1MyAxMS4xNDIxIDExLjg0OTJMMy4xNTA1NyAzLjg1NzY4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUgMlYxSDEwVjJINVpNNC43NSAwQzQuMzM1NzkgMCA0IDAuMzM1Nzg2IDQgMC43NVYxSDMuNUMyLjY3MTU3IDEgMiAxLjY3MTU3IDIgMi41VjEyLjVDMiAxMy4zMjg0IDIuNjcxNTcgMTQgMy41IDE0SDExLjVDMTIuMzI4NCAxNCAxMyAxMy4zMjg0IDEzIDEyLjVWMi41QzEzIDEuNjcxNTcgMTIuMzI4NCAxIDExLjUgMUgxMVYwLjc1QzExIDAuMzM1Nzg2IDEwLjY2NDIgMCAxMC4yNSAwSDQuNzVaTTExIDJWMi4yNUMxMSAyLjY2NDIxIDEwLjY2NDIgMyAxMC4yNSAzSDQuNzVDNC4zMzU3OSAzIDQgMi42NjQyMSA0IDIuMjVWMkgzLjVDMy4yMjM4NiAyIDMgMi4yMjM4NiAzIDIuNVYxMi41QzMgMTIuNzc2MSAzLjIyMzg2IDEzIDMuNSAxM0gxMS41QzExLjc3NjEgMTMgMTIgMTIuNzc2MSAxMiAxMi41VjIuNUMxMiAyLjIyMzg2IDExLjc3NjEgMiAxMS41IDJIMTFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxwZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNSAyVjFIMTBWMkg1Wk00Ljc1IDBDNC4zMzU3OSAwIDQgMC4zMzU3ODYgNCAwLjc1VjFIMy41QzIuNjcxNTcgMSAyIDEuNjcxNTcgMiAyLjVWMTIuNUMyIDEzLjMyODQgMi42NzE1NyAxNCAzLjUgMTRIN1YxM0gzLjVDMy4yMjM4NiAxMyAzIDEyLjc3NjEgMyAxMi41VjIuNUMzIDIuMjIzODYgMy4yMjM4NiAyIDMuNSAySDRWMi4yNUM0IDIuNjY0MjEgNC4zMzU3OSAzIDQuNzUgM0gxMC4yNUMxMC42NjQyIDMgMTEgMi42NjQyMSAxMSAyLjI1VjJIMTEuNUMxMS43NzYxIDIgMTIgMi4yMjM4NiAxMiAyLjVWN0gxM1YyLjVDMTMgMS42NzE1NyAxMi4zMjg0IDEgMTEuNSAxSDExVjAuNzVDMTEgMC4zMzU3ODYgMTAuNjY0MiAwIDEwLjI1IDBINC43NVpNOSA4LjVDOSA4Ljc3NjE0IDguNzc2MTQgOSA4LjUgOUM4LjIyMzg2IDkgOCA4Ljc3NjE0IDggOC41QzggOC4yMjM4NiA4LjIyMzg2IDggOC41IDhDOC43NzYxNCA4IDkgOC4yMjM4NiA5IDguNVpNMTAuNSA5QzEwLjc3NjEgOSAxMSA4Ljc3NjE0IDExIDguNUMxMSA4LjIyMzg2IDEwLjc3NjEgOCAxMC41IDhDMTAuMjIzOSA4IDEwIDguMjIzODYgMTAgOC41QzEwIDguNzc2MTQgMTAuMjIzOSA5IDEwLjUgOVpNMTMgOC41QzEzIDguNzc2MTQgMTIuNzc2MSA5IDEyLjUgOUMxMi4yMjM5IDkgMTIgOC43NzYxNCAxMiA4LjVDMTIgOC4yMjM4NiAxMi4yMjM5IDggMTIuNSA4QzEyLjc3NjEgOCAxMyA4LjIyMzg2IDEzIDguNVpNMTQuNSA5QzE0Ljc3NjEgOSAxNSA4Ljc3NjE0IDE1IDguNUMxNSA4LjIyMzg2IDE0Ljc3NjEgOCAxNC41IDhDMTQuMjIzOSA4IDE0IDguMjIzODYgMTQgOC41QzE0IDguNzc2MTQgMTQuMjIzOSA5IDE0LjUgOVpNMTUgMTAuNUMxNSAxMC43NzYxIDE0Ljc3NjEgMTEgMTQuNSAxMUMxNC4yMjM5IDExIDE0IDEwLjc3NjEgMTQgMTAuNUMxNCAxMC4yMjM5IDE0LjIyMzkgMTAgMTQuNSAxMEMxNC43NzYxIDEwIDE1IDEwLjIyMzkgMTUgMTAuNVpNMTQuNSAxM0MxNC43NzYxIDEzIDE1IDEyLjc3NjEgMTUgMTIuNUMxNSAxMi4yMjM5IDE0Ljc3NjEgMTIgMTQuNSAxMkMxNC4yMjM5IDEyIDE0IDEyLjIyMzkgMTQgMTIuNUMxNCAxMi43NzYxIDE0LjIyMzkgMTMgMTQuNSAxM1pNMTQuNSAxNUMxNC43NzYxIDE1IDE1IDE0Ljc3NjEgMTUgMTQuNUMxNSAxNC4yMjM5IDE0Ljc3NjEgMTQgMTQuNSAxNEMxNC4yMjM5IDE0IDE0IDE0LjIyMzkgMTQgMTQuNUMxNCAxNC43NzYxIDE0LjIyMzkgMTUgMTQuNSAxNVpNOC41IDExQzguNzc2MTQgMTEgOSAxMC43NzYxIDkgMTAuNUM5IDEwLjIyMzkgOC43NzYxNCAxMCA4LjUgMTBDOC4yMjM4NiAxMCA4IDEwLjIyMzkgOCAxMC41QzggMTAuNzc2MSA4LjIyMzg2IDExIDguNSAxMVpNOSAxMi41QzkgMTIuNzc2MSA4Ljc3NjE0IDEzIDguNSAxM0M4LjIyMzg2IDEzIDggMTIuNzc2MSA4IDEyLjVDOCAxMi4yMjM5IDguMjIzODYgMTIgOC41IDEyQzguNzc2MTQgMTIgOSAxMi4yMjM5IDkgMTIuNVpNOC41IDE1QzguNzc2MTQgMTUgOSAxNC43NzYxIDkgMTQuNUM5IDE0LjIyMzkgOC43NzYxNCAxNCA4LjUgMTRDOC4yMjM4NiAxNCA4IDE0LjIyMzkgOCAxNC41QzggMTQuNzc2MSA4LjIyMzg2IDE1IDguNSAxNVpNMTEgMTQuNUMxMSAxNC43NzYxIDEwLjc3NjEgMTUgMTAuNSAxNUMxMC4yMjM5IDE1IDEwIDE0Ljc3NjEgMTAgMTQuNUMxMCAxNC4yMjM5IDEwLjIyMzkgMTQgMTAuNSAxNEMxMC43NzYxIDE0IDExIDE0LjIyMzkgMTEgMTQuNVpNMTIuNSAxNUMxMi43NzYxIDE1IDEzIDE0Ljc3NjEgMTMgMTQuNUMxMyAxNC4yMjM5IDEyLjc3NjEgMTQgMTIuNSAxNEMxMi4yMjM5IDE0IDEyIDE0LjIyMzkgMTIgMTQuNUMxMiAxNC43NzYxIDEyLjIyMzkgMTUgMTIuNSAxNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGhlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUwMDA5IDAuODc3MDE0QzMuODQyNDEgMC44NzcwMTQgMC44NzcyNTggMy44NDIxNiAwLjg3NzI1OCA3LjQ5OTg0QzAuODc3MjU4IDExLjE1NzUgMy44NDI0IDE0LjEyMjcgNy41MDAwOSAxNC4xMjI3QzExLjE1NzggMTQuMTIyNyAxNC4xMjI5IDExLjE1NzUgMTQuMTIyOSA3LjQ5OTg0QzE0LjEyMjkgMy44NDIxNiAxMS4xNTc3IDAuODc3MDE0IDcuNTAwMDkgMC44NzcwMTRaTTEuODI3MjYgNy40OTk4NEMxLjgyNzI2IDQuMzY2ODMgNC4zNjcwOCAxLjgyNzAxIDcuNTAwMDkgMS44MjcwMUMxMC42MzMxIDEuODI3MDEgMTMuMTcyOSA0LjM2NjgzIDEzLjE3MjkgNy40OTk4NEMxMy4xNzI5IDEwLjYzMjggMTAuNjMzMSAxMy4xNzI3IDcuNTAwMDkgMTMuMTcyN0M0LjM2NzA4IDEzLjE3MjcgMS44MjcyNiAxMC42MzI4IDEuODI3MjYgNy40OTk4NFpNOCA0LjUwMDAxQzggNC4yMjM4NyA3Ljc3NjE0IDQuMDAwMDEgNy41IDQuMDAwMDFDNy4yMjM4NiA0LjAwMDAxIDcgNC4yMjM4NyA3IDQuNTAwMDFWNy41MDAwMUM3IDcuNjMyNjIgNy4wNTI2OCA3Ljc1OTggNy4xNDY0NSA3Ljg1MzU3TDkuMTQ2NDUgOS44NTM1N0M5LjM0MTcxIDEwLjA0ODggOS42NTgyOSAxMC4wNDg4IDkuODUzNTUgOS44NTM1N0MxMC4wNDg4IDkuNjU4MzEgMTAuMDQ4OCA5LjM0MTcyIDkuODUzNTUgOS4xNDY0Nkw4IDcuMjkyOTFWNC41MDAwMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGdlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk05Ljk2NDI0IDIuNjg1NzFDMTAuMDY2OCAyLjQyOTMxIDkuOTQyMDkgMi4xMzgzMyA5LjY4NTcgMi4wMzU3N0M5LjQyOTMgMS45MzMyMiA5LjEzODMyIDIuMDU3OTIgOS4wMzU3NiAyLjMxNDMyTDUuMDM1NzYgMTIuMzE0M0M0LjkzMzIgMTIuNTcwNyA1LjA1NzkxIDEyLjg2MTcgNS4zMTQzIDEyLjk2NDJDNS41NzA3IDEzLjA2NjggNS44NjE2OCAxMi45NDIxIDUuOTY0MjQgMTIuNjg1N0w5Ljk2NDI0IDIuNjg1NzFaTTMuODUzNTUgNS4xNDY0NkM0LjA0ODgyIDUuMzQxNzIgNC4wNDg4MiA1LjY1ODMgMy44NTM1NSA1Ljg1MzU2TDIuMjA3MTEgNy41MDAwMUwzLjg1MzU1IDkuMTQ2NDZDNC4wNDg4MiA5LjM0MTcyIDQuMDQ4ODIgOS42NTgzIDMuODUzNTUgOS44NTM1NkMzLjY1ODI5IDEwLjA0ODggMy4zNDE3MSAxMC4wNDg4IDMuMTQ2NDUgOS44NTM1NkwxLjE0NjQ1IDcuODUzNTZDMC45NTExODQgNy42NTgzIDAuOTUxMTg0IDcuMzQxNzIgMS4xNDY0NSA3LjE0NjQ2TDMuMTQ2NDUgNS4xNDY0NkMzLjM0MTcxIDQuOTUxMiAzLjY1ODI5IDQuOTUxMiAzLjg1MzU1IDUuMTQ2NDZaTTExLjE0NjQgNS4xNDY0NkMxMS4zNDE3IDQuOTUxMiAxMS42NTgzIDQuOTUxMiAxMS44NTM2IDUuMTQ2NDZMMTMuODUzNiA3LjE0NjQ2QzE0LjA0ODggNy4zNDE3MiAxNC4wNDg4IDcuNjU4MyAxMy44NTM2IDcuODUzNTZMMTEuODUzNiA5Ljg1MzU2QzExLjY1ODMgMTAuMDQ4OCAxMS4zNDE3IDEwLjA0ODggMTEuMTQ2NCA5Ljg1MzU2QzEwLjk1MTIgOS42NTgzIDEwLjk1MTIgOS4zNDE3MiAxMS4xNDY0IDkuMTQ2NDZMMTIuNzkyOSA3LjUwMDAxTDExLjE0NjQgNS44NTM1NkMxMC45NTEyIDUuNjU4MyAxMC45NTEyIDUuMzQxNzIgMTEuMTQ2NCA1LjE0NjQ2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNzExNDQgMC43OTY5MDJDNy41Nzc0MSAwLjczNDM1NyA3LjQyMjU3IDAuNzM0MzU3IDcuMjg4NTUgMC43OTY5MDJMMS4yODg1NSAzLjU5NjlDMS4xMTI1MSAzLjY3OTA1IDAuOTk5OTkzIDMuODU1NzMgMC45OTk5OTMgNC4wNDk5OVYxMC45NUMwLjk5OTk5MyAxMS4xNDQzIDEuMTEyNTEgMTEuMzIwOSAxLjI4ODU1IDExLjQwMzFMNy4yODg1NSAxNC4yMDMxQzcuNDIyNTcgMTQuMjY1NiA3LjU3NzQxIDE0LjI2NTYgNy43MTE0NCAxNC4yMDMxTDEzLjcxMTQgMTEuNDAzMUMxMy44ODc1IDExLjMyMDkgMTQgMTEuMTQ0MyAxNCAxMC45NVY0LjA0OTk5QzE0IDMuODU1NzMgMTMuODg3NSAzLjY3OTA1IDEzLjcxMTQgMy41OTY5TDcuNzExNDQgMC43OTY5MDJaTTcuNDk5OTkgMy4xNTY3NEw1Ljk4MDM5IDIuNTEwOTFMNy40OTk5OSAxLjgwMTc2TDkuMDE5NTkgMi41MTA5MUw3LjQ5OTk5IDMuMTU2NzRaTTcuNjk1NTYgNC4xNjAxOEwxMC4yMzgyIDMuMDc5NThMMTIuMjcxOSA0LjAyODY1TDcuNDk5OTkgNi4wNTY3MUwyLjcyODA4IDQuMDI4NjVMNC43NjE4MSAzLjA3OTU4TDcuMzA0NDIgNC4xNjAxOEM3LjQyOTM5IDQuMjEzMyA3LjU3MDU5IDQuMjEzMyA3LjY5NTU2IDQuMTYwMThaTTcuOTk5OTkgNi45MzA3OEwxMyA0LjgwNTc4VjcuOTI5NjZMMTEuMDgyMSA4LjgxMTlDMTAuNzI3MyA4Ljk3NTA5IDEwLjUgOS4zMjk4OCAxMC41IDkuNzIwMzlWMTEuNzk4Mkw3Ljk5OTk5IDEyLjk2NDlWNi45MzA3OFpNMTEuNSAxMS4zMzE2TDEzIDEwLjYzMTZWOS4wMzAzOUwxMS41IDkuNzIwMzlWMTEuMzMxNlpNNi45OTk5OSA2LjkzMDc4VjEyLjk2NDlMNC41MDIzMSAxMS43OTkzVjkuNzIwMzZDNC41MDIzMSA5LjMyOTg1IDQuMjc0OTkgOC45NzUwNiAzLjkyMDIyIDguODExODdMMS45OTk5OSA3LjkyODU2VjQuODA1NzhMNi45OTk5OSA2LjkzMDc4Wk0xLjk5OTk5IDEwLjYzMTZMMy41MDIzMSAxMS4zMzI2TDMuNTAyMzEgOS43MjAzNkwxLjk5OTk5IDkuMDI5MjlWMTAuNjMxNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG1lPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk04LjAwMDEyIDEuNUM4LjAwMDEyIDEuMjIzODYgNy43NzYyNiAxIDcuNTAwMTIgMUM3LjIyMzk4IDEgNy4wMDAxMiAxLjIyMzg2IDcuMDAwMTIgMS41VjEzLjVDNy4wMDAxMiAxMy43NzYxIDcuMjIzOTggMTQgNy41MDAxMiAxNEM3Ljc3NjI2IDE0IDguMDAwMTIgMTMuNzc2MSA4LjAwMDEyIDEzLjVWMS41Wk0zLjMxODEyIDUuODE4QzMuNDkzODYgNS42NDIyNyAzLjQ5Mzg2IDUuMzU3MzQgMy4zMTgxMiA1LjE4MTYxQzMuMTQyMzkgNS4wMDU4NyAyLjg1NzQ2IDUuMDA1ODcgMi42ODE3MyA1LjE4MTYxTDAuNjgxNzI5IDcuMTgxNjFDMC41MDU5OTMgNy4zNTczNCAwLjUwNTk5MyA3LjY0MjI3IDAuNjgxNzI5IDcuODE4TDIuNjgxNzMgOS44MThDMi44NTc0NiA5Ljk5Mzc0IDMuMTQyMzkgOS45OTM3NCAzLjMxODEyIDkuODE4QzMuNDkzODYgOS42NDIyNyAzLjQ5Mzg2IDkuMzU3MzQgMy4zMTgxMiA5LjE4MTYxTDIuMDg2MzIgNy45NDk4SDUuNTAwMTdDNS43NDg3IDcuOTQ5OCA1Ljk1MDE3IDcuNzQ4MzMgNS45NTAxNyA3LjQ5OThDNS45NTAxNyA3LjI1MTI4IDUuNzQ4NyA3LjA0OTggNS41MDAxNyA3LjA0OThIMi4wODYzMkwzLjMxODEyIDUuODE4Wk0xMi4zMTgxIDUuMTgxNjFDMTIuMTQyNCA1LjAwNTg3IDExLjg1NzUgNS4wMDU4NyAxMS42ODE3IDUuMTgxNjFDMTEuNTA2IDUuMzU3MzQgMTEuNTA2IDUuNjQyMjcgMTEuNjgxNyA1LjgxOEwxMi45MTM1IDcuMDQ5OEg5LjUwMDE3QzkuMjUxNjQgNy4wNDk4IDkuMDUwMTcgNy4yNTEyOCA5LjA1MDE3IDcuNDk5OEM5LjA1MDE3IDcuNzQ4MzMgOS4yNTE2NCA3Ljk0OTggOS41MDAxNyA3Ljk0OThIMTIuOTEzNUwxMS42ODE3IDkuMTgxNjFDMTEuNTA2IDkuMzU3MzQgMTEuNTA2IDkuNjQyMjcgMTEuNjgxNyA5LjgxOEMxMS44NTc1IDkuOTkzNzQgMTIuMTQyNCA5Ljk5Mzc0IDEyLjMxODEgOS44MThMMTQuMzE4MSA3LjgxOEMxNC40OTM5IDcuNjQyMjcgMTQuNDkzOSA3LjM1NzM0IDE0LjMxODEgNy4xODE2MUwxMi4zMTgxIDUuMTgxNjFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxDZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi4xNDk5OCAxNFYxSDAuODQ5OTc2VjE0SDIuMTQ5OThaTTYuMTQ5OTggMTRWMUg0Ljg0OTk4VjE0SDYuMTQ5OThaTTEwLjE1IDFWMTRIOC44NDk5OFYxSDEwLjE1Wk0xNC4xNSAxNFYxSDEyLjg1VjE0SDE0LjE1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0seWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTkuOTQ5NjkgNy40OTk4OUM5Ljk0OTY5IDguODUyODggOC44NTI4OCA5Ljk0OTY5IDcuNDk5ODkgOS45NDk2OUM2LjE0NjkxIDkuOTQ5NjkgNS4wNTAxIDguODUyODggNS4wNTAxIDcuNDk5ODlDNS4wNTAxIDYuMTQ2OTEgNi4xNDY5MSA1LjA1MDEgNy40OTk4OSA1LjA1MDFDOC44NTI4OCA1LjA1MDEgOS45NDk2OSA2LjE0NjkxIDkuOTQ5NjkgNy40OTk4OVpNMTAuODYzMiA4QzEwLjYyMTMgOS42NDA1NSA5LjIwNzY0IDEwLjg5OTcgNy40OTk4OSAxMC44OTk3QzUuNzkyMTQgMTAuODk5NyA0LjM3ODQ3IDkuNjQwNTUgNC4xMzY2MiA4SDAuNUMwLjIyMzg1OCA4IDAgNy43NzYxNCAwIDcuNUMwIDcuMjIzODYgMC4yMjM4NTggNyAwLjUgN0g0LjEzNjU5QzQuMzc4MzUgNS4zNTkzNSA1Ljc5MjA2IDQuMTAwMSA3LjQ5OTg5IDQuMTAwMUM5LjIwNzcyIDQuMTAwMSAxMC42MjE0IDUuMzU5MzUgMTAuODYzMiA3SDE0LjVDMTQuNzc2MSA3IDE1IDcuMjIzODYgMTUgNy41QzE1IDcuNzc2MTQgMTQuNzc2MSA4IDE0LjUgOEgxMC44NjMyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sd2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuNjcxMjkgMy4xNDYzNEM0LjQ3NjAzIDMuMzQxNjEgNC40NzYwMyAzLjY1ODE5IDQuNjcxMjkgMy44NTM0NUw3LjE0NjE2IDYuMzI4MzNDNy4zNDE0MiA2LjUyMzU5IDcuNjU4MDEgNi41MjM1OSA3Ljg1MzI3IDYuMzI4MzNMMTAuMzI4MSAzLjg1MzQ1QzEwLjUyMzQgMy42NTgxOSAxMC41MjM0IDMuMzQxNjEgMTAuMzI4MSAzLjE0NjM0TDcuODUzMjcgMC42NzE0NzFDNy42NTgwMSAwLjQ3NjIwOSA3LjM0MTQyIDAuNDc2MjA5IDcuMTQ2MTYgMC42NzE0NzFMNC42NzEyOSAzLjE0NjM0Wk03LjQ5OTcxIDUuMjY3NjZMNS43MzE5NSAzLjQ5OTlMNy40OTk3MSAxLjczMjEzTDkuMjY3NDggMy40OTk5TDcuNDk5NzEgNS4yNjc2NlpNOC42NzEyOSA3LjE0NjM0QzguNDc2MDMgNy4zNDE2MSA4LjQ3NjAzIDcuNjU4MTkgOC42NzEyOSA3Ljg1MzQ1TDExLjE0NjIgMTAuMzI4M0MxMS4zNDE0IDEwLjUyMzYgMTEuNjU4IDEwLjUyMzYgMTEuODUzMyAxMC4zMjgzTDE0LjMyODEgNy44NTM0NUMxNC41MjM0IDcuNjU4MTkgMTQuNTIzNCA3LjM0MTYxIDE0LjMyODEgNy4xNDYzNEwxMS44NTMzIDQuNjcxNDdDMTEuNjU4IDQuNDc2MjEgMTEuMzQxNCA0LjQ3NjIxIDExLjE0NjIgNC42NzE0N0w4LjY3MTI5IDcuMTQ2MzRaTTExLjQ5OTcgOS4yNjc2Nkw5LjczMTk1IDcuNDk5OUwxMS40OTk3IDUuNzMyMTNMMTMuMjY3NSA3LjQ5OTlMMTEuNDk5NyA5LjI2NzY2Wk00LjY3MTI5IDExLjg1MzVDNC40NzYwMyAxMS42NTgyIDQuNDc2MDMgMTEuMzQxNiA0LjY3MTI5IDExLjE0NjNMNy4xNDYxNiA4LjY3MTQ3QzcuMzQxNDIgOC40NzYyMSA3LjY1ODAxIDguNDc2MjEgNy44NTMyNyA4LjY3MTQ3TDEwLjMyODEgMTEuMTQ2M0MxMC41MjM0IDExLjM0MTYgMTAuNTIzNCAxMS42NTgyIDEwLjMyODEgMTEuODUzNUw3Ljg1MzI3IDE0LjMyODNDNy42NTgwMSAxNC41MjM2IDcuMzQxNDIgMTQuNTIzNiA3LjE0NjE2IDE0LjMyODNMNC42NzEyOSAxMS44NTM1Wk01LjczMTk1IDExLjQ5OTlMNy40OTk3MSAxMy4yNjc3TDkuMjY3NDggMTEuNDk5OUw3LjQ5OTcxIDkuNzMyMTNMNS43MzE5NSAxMS40OTk5Wk0wLjY3MTI4OCA3LjE0NjQ5QzAuNDc2MDI2IDcuMzQxNzUgMC40NzYwMjYgNy42NTgzNCAwLjY3MTI4OCA3Ljg1MzZMMy4xNDYxNiAxMC4zMjg1QzMuMzQxNDIgMTAuNTIzNyAzLjY1ODAxIDEwLjUyMzcgMy44NTMyNyAxMC4zMjg1TDYuMzI4MTQgNy44NTM2QzYuNTIzNCA3LjY1ODM0IDYuNTIzNCA3LjM0MTc1IDYuMzI4MTQgNy4xNDY0OUwzLjg1MzI3IDQuNjcxNjJDMy42NTgwMSA0LjQ3NjM2IDMuMzQxNDIgNC40NzYzNiAzLjE0NjE2IDQuNjcxNjJMMC42NzEyODggNy4xNDY0OVpNMy40OTk3MiA5LjI2NzgxTDEuNzMxOTUgNy41MDAwNUwzLjQ5OTcyIDUuNzMyMjhMNS4yNjc0OCA3LjUwMDA1TDMuNDk5NzIgOS4yNjc4MVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGJlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjg3OTM1IDFIMy45SDExLjFIMTEuMTIwN0MxMS41MjMxIDAuOTk5OTk0IDExLjg1NTMgMC45OTk5ODkgMTIuMTI1OSAxLjAyMjFDMTIuNDA3IDEuMDQ1MDYgMTIuNjY1MyAxLjA5NDM0IDEyLjkwOCAxLjIxNzk5QzEzLjI4NDMgMS40MDk3MyAxMy41OTAzIDEuNzE1NyAxMy43ODIgMi4wOTIwMkMxMy45MDU3IDIuMzM0NjkgMTMuOTU0OSAyLjU5MzA0IDEzLjk3NzkgMi44NzQwOUMxNCAzLjE0NDY4IDE0IDMuNDc2ODYgMTQgMy44NzkzNFYzLjlWMTEuMVYxMS4xMjA3QzE0IDExLjUyMzEgMTQgMTEuODU1MyAxMy45Nzc5IDEyLjEyNTlDMTMuOTU0OSAxMi40MDcgMTMuOTA1NyAxMi42NjUzIDEzLjc4MiAxMi45MDhDMTMuNTkwMyAxMy4yODQzIDEzLjI4NDMgMTMuNTkwMyAxMi45MDggMTMuNzgyQzEyLjY2NTMgMTMuOTA1NyAxMi40MDcgMTMuOTU0OSAxMi4xMjU5IDEzLjk3NzlDMTEuODU1MyAxNCAxMS41MjMxIDE0IDExLjEyMDcgMTRIMTEuMUgzLjlIMy44NzkzNEMzLjQ3Njg2IDE0IDMuMTQ0NjggMTQgMi44NzQwOSAxMy45Nzc5QzIuNTkzMDQgMTMuOTU0OSAyLjMzNDY5IDEzLjkwNTcgMi4wOTIwMiAxMy43ODJDMS43MTU3IDEzLjU5MDMgMS40MDk3MyAxMy4yODQzIDEuMjE3OTkgMTIuOTA4QzEuMDk0MzQgMTIuNjY1MyAxLjA0NTA2IDEyLjQwNyAxLjAyMjEgMTIuMTI1OUMwLjk5OTk4OSAxMS44NTUzIDAuOTk5OTk0IDExLjUyMzEgMSAxMS4xMjA3VjExLjEyMDdWMTEuMVYzLjlWMy44NzkzNVYzLjg3OTM0QzAuOTk5OTk0IDMuNDc2ODYgMC45OTk5ODkgMy4xNDQ2OCAxLjAyMjEgMi44NzQwOUMxLjA0NTA2IDIuNTkzMDQgMS4wOTQzNCAyLjMzNDY5IDEuMjE3OTkgMi4wOTIwMkMxLjQwOTczIDEuNzE1NyAxLjcxNTcgMS40MDk3MyAyLjA5MjAyIDEuMjE3OTlDMi4zMzQ2OSAxLjA5NDM0IDIuNTkzMDQgMS4wNDUwNiAyLjg3NDA5IDEuMDIyMUMzLjE0NDY5IDAuOTk5OTg5IDMuNDc2ODcgMC45OTk5OTQgMy44NzkzNSAxWk0yLjk1NTUyIDIuMDE4NzhDMi43MzYzMSAyLjAzNjY5IDIuNjI0MjEgMi4wNjkxNSAyLjU0NjAxIDIuMTA4OTlDMi4zNTc4NSAyLjIwNDg3IDIuMjA0ODcgMi4zNTc4NSAyLjEwODk5IDIuNTQ2MDFDMi4wNjkxNSAyLjYyNDIxIDIuMDM2NjkgMi43MzYzMSAyLjAxODc4IDIuOTU1NTJDMi4wMDAzOSAzLjE4MDU2IDIgMy40NzE3MSAyIDMuOVY3SDdWMkgzLjlDMy40NzE3MSAyIDMuMTgwNTYgMi4wMDAzOSAyLjk1NTUyIDIuMDE4NzhaTTcgOEgyVjExLjFDMiAxMS41MjgzIDIuMDAwMzkgMTEuODE5NCAyLjAxODc4IDEyLjA0NDVDMi4wMzY2OSAxMi4yNjM3IDIuMDY5MTUgMTIuMzc1OCAyLjEwODk5IDEyLjQ1NEMyLjIwNDg3IDEyLjY0MjIgMi4zNTc4NSAxMi43OTUxIDIuNTQ2MDEgMTIuODkxQzIuNjI0MjEgMTIuOTMwOSAyLjczNjMxIDEyLjk2MzMgMi45NTU1MiAxMi45ODEyQzMuMTgwNTYgMTIuOTk5NiAzLjQ3MTcxIDEzIDMuOSAxM0g3VjhaTTggOEgxM1YxMS4xQzEzIDExLjUyODMgMTIuOTk5NiAxMS44MTk0IDEyLjk4MTIgMTIuMDQ0NUMxMi45NjMzIDEyLjI2MzcgMTIuOTMwOSAxMi4zNzU4IDEyLjg5MSAxMi40NTRDMTIuNzk1MSAxMi42NDIyIDEyLjY0MjIgMTIuNzk1MSAxMi40NTQgMTIuODkxQzEyLjM3NTggMTIuOTMwOSAxMi4yNjM3IDEyLjk2MzMgMTIuMDQ0NSAxMi45ODEyQzExLjgxOTQgMTIuOTk5NiAxMS41MjgzIDEzIDExLjEgMTNIOFY4Wk0xMyA3SDhWMkgxMS4xQzExLjUyODMgMiAxMS44MTk0IDIuMDAwMzkgMTIuMDQ0NSAyLjAxODc4QzEyLjI2MzcgMi4wMzY2OSAxMi4zNzU4IDIuMDY5MTUgMTIuNDU0IDIuMTA4OTlDMTIuNjQyMiAyLjIwNDg3IDEyLjc5NTEgMi4zNTc4NSAxMi44OTEgMi41NDYwMUMxMi45MzA5IDIuNjI0MjEgMTIuOTYzMyAyLjczNjMxIDEyLjk4MTIgMi45NTU1MkMxMi45OTk2IDMuMTgwNTYgMTMgMy40NzE3MSAxMyAzLjlWN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHhlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03Ljg1MzY3IDEuNDg5NTZDNy42NTg0MSAxLjI5NDI5IDcuMzQxODIgMS4yOTQyOSA3LjE0NjU2IDEuNDg5NTZMMS40ODk3MSA3LjE0NjQxQzEuMjk0NDUgNy4zNDE2NyAxLjI5NDQ1IDcuNjU4MjUgMS40ODk3MSA3Ljg1MzUyTDcuMTQ2NTYgMTMuNTEwNEM3LjM0MTgyIDEzLjcwNTYgNy42NTg0MSAxMy43MDU2IDcuODUzNjcgMTMuNTEwNEwxMy41MTA1IDcuODUzNTJDMTMuNzA1OCA3LjY1ODI1IDEzLjcwNTggNy4zNDE2NyAxMy41MTA1IDcuMTQ2NDFMNy44NTM2NyAxLjQ4OTU2Wk03LjUgMi41NTAzM0wyLjU1MDM3IDcuNDk5OTZMNy41IDEyLjQ0OTZWMi41NTAzM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LF9lPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjE0NjUgMS40ODk1OUM3LjM0MTc2IDEuMjk0MzIgNy42NTgzNSAxLjI5NDMyIDcuODUzNjEgMS40ODk1OUwxMy41MTA1IDcuMTQ2NDRDMTMuNzA1NyA3LjM0MTcgMTMuNzA1NyA3LjY1ODI5IDEzLjUxMDUgNy44NTM1NUw3Ljg1MzYxIDEzLjUxMDRDNy42NTgzNSAxMy43MDU3IDcuMzQxNzYgMTMuNzA1NyA3LjE0NjUgMTMuNTEwNEwxLjQ4OTY1IDcuODUzNTVDMS4yOTQzOSA3LjY1ODI5IDEuMjk0MzkgNy4zNDE3IDEuNDg5NjUgNy4xNDY0NEw3LjE0NjUgMS40ODk1OVpNNy41MDAwNSAyLjU1MDI1TDIuNTUwMzEgNy40OTk5OUw3LjUwMDA1IDEyLjQ0OTdMMTIuNDQ5OCA3LjQ5OTk5TDcuNTAwMDUgMi41NTAyNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE9lPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03Ljg1MzYxIDEuNDg5NTlDNy42NTgzNSAxLjI5NDMyIDcuMzQxNzYgMS4yOTQzMiA3LjE0NjUgMS40ODk1OUwxLjQ4OTY1IDcuMTQ2NDRDMS4yOTQzOSA3LjM0MTcgMS4yOTQzOSA3LjY1ODI5IDEuNDg5NjUgNy44NTM1NUwzLjk2NDUgMTAuMzI4NEwxLjY0NjQ0IDEyLjY0NjRDMS40NTExOCAxMi44NDE3IDEuNDUxMTggMTMuMTU4MyAxLjY0NjQ0IDEzLjM1MzZDMS44NDE3MSAxMy41NDg4IDIuMTU4MjkgMTMuNTQ4OCAyLjM1MzU1IDEzLjM1MzZMNC42NzE2IDExLjAzNTVMNy4xNDY1IDEzLjUxMDRDNy4zNDE3NiAxMy43MDU3IDcuNjU4MzUgMTMuNzA1NyA3Ljg1MzYxIDEzLjUxMDRMMTMuNTEwNSA3Ljg1MzU1QzEzLjcwNTcgNy42NTgyOSAxMy43MDU3IDcuMzQxNyAxMy41MTA1IDcuMTQ2NDRMMTEuMDM1NiA0LjY3MTU0TDEzLjM1MzUgMi4zNTM1NUMxMy41NDg4IDIuMTU4MjkgMTMuNTQ4OCAxLjg0MTcxIDEzLjM1MzUgMS42NDY0NUMxMy4xNTgzIDEuNDUxMTggMTIuODQxNyAxLjQ1MTE4IDEyLjY0NjQgMS42NDY0NUwxMC4zMjg1IDMuOTY0NDNMNy44NTM2MSAxLjQ4OTU5Wk05LjYyMTM1IDQuNjcxNTRMNy41MDAwNSAyLjU1MDI1TDIuNTUwMzEgNy40OTk5OUw0LjY3MTYgOS42MjEyOUw5LjYyMTM1IDQuNjcxNTRaTTUuMzc4NzEgMTAuMzI4NEw3LjUwMDA1IDEyLjQ0OTdMMTIuNDQ5OCA3LjQ5OTk5TDEwLjMyODUgNS4zNzg2NUw1LjM3ODcxIDEwLjMyODRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxMZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTIuODAzNCA3LjE0NjQ0QzEyLjk5ODYgNi45NTExOCAxMy4zMTUyIDYuOTUxMTggMTMuNTEwNSA3LjE0NjQ0QzEzLjcwNTcgNy4zNDE3IDEzLjcwNTcgNy42NTgyOSAxMy41MTA1IDcuODUzNTVDMTMuMzE1MiA4LjA0ODgxIDEyLjk5ODYgOC4wNDg4MSAxMi44MDM0IDcuODUzNTVDMTIuNjA4MSA3LjY1ODI4IDEyLjYwODEgNy4zNDE3IDEyLjgwMzQgNy4xNDY0NFpNMTIuMDk2MiA4LjU2MDY1QzEyLjI5MTUgOC43NTU5MiAxMi4yOTE1IDkuMDcyNSAxMi4wOTYyIDkuMjY3NzZDMTEuOTAxIDkuNDYzMDIgMTEuNTg0NCA5LjQ2MzAyIDExLjM4OTEgOS4yNjc3NkMxMS4xOTM5IDkuMDcyNSAxMS4xOTM5IDguNzU1OTIgMTEuMzg5MSA4LjU2MDY1QzExLjU4NDQgOC4zNjUzOSAxMS45MDEgOC4zNjUzOSAxMi4wOTYyIDguNTYwNjVaTTEwLjY4MiA5Ljk3NDg3QzEwLjg3NzMgMTAuMTcwMSAxMC44NzczIDEwLjQ4NjcgMTAuNjgyIDEwLjY4MkMxMC40ODY4IDEwLjg3NzIgMTAuMTcwMiAxMC44NzcyIDkuOTc0OTMgMTAuNjgyQzkuNzc5NjcgMTAuNDg2NyA5Ljc3OTY3IDEwLjE3MDEgOS45NzQ5MyA5Ljk3NDg3QzEwLjE3MDIgOS43Nzk2IDEwLjQ4NjggOS43Nzk2IDEwLjY4MiA5Ljk3NDg3Wk05LjI2NzgyIDExLjM4OTFDOS40NjMwOCAxMS41ODQzIDkuNDYzMDggMTEuOTAwOSA5LjI2NzgyIDEyLjA5NjJDOS4wNzI1NiAxMi4yOTE1IDguNzU1OTggMTIuMjkxNSA4LjU2MDcxIDEyLjA5NjJDOC4zNjU0NSAxMS45MDA5IDguMzY1NDUgMTEuNTg0MyA4LjU2MDcyIDExLjM4OTFDOC43NTU5OCAxMS4xOTM4IDkuMDcyNTYgMTEuMTkzOCA5LjI2NzgyIDExLjM4OTFaTTcuMTQ2NSAxMy41MTA0QzYuOTUxMjQgMTMuMzE1MSA2Ljk1MTI0IDEyLjk5ODYgNy4xNDY1IDEyLjgwMzNDNy4xNzA5MSAxMi43Nzg5IDcuMTk3MjEgMTIuNzU3NSA3LjIyNDk0IDEyLjczOTJDNy40MTkwMSAxMi42MTExIDcuNjgyNzUgMTIuNjMyNCA3Ljg1MzYxIDEyLjgwMzNDOC4wNDg4NyAxMi45OTg2IDguMDQ4ODcgMTMuMzE1MSA3Ljg1MzYxIDEzLjUxMDRDNy42NTgzNSAxMy43MDU3IDcuMzQxNzYgMTMuNzA1NyA3LjE0NjUgMTMuNTEwNFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuOTAzODYgOC41NjA2NUMyLjcwODYgOC43NTU5MiAyLjcwODYgOS4wNzI1IDIuOTAzODYgOS4yNjc3NiAzLjA5OTEyIDkuNDYzMDIgMy40MTU3MSA5LjQ2MzAyIDMuNjEwOTcgOS4yNjc3NiAzLjgwNjIzIDkuMDcyNSAzLjgwNjIzIDguNzU1OTIgMy42MTA5NyA4LjU2MDY1IDMuNDE1NzEgOC4zNjUzOSAzLjA5OTEyIDguMzY1MzkgMi45MDM4NiA4LjU2MDY1ek00LjMxODA3IDkuOTc0ODdDNC4xMjI4MSAxMC4xNzAxIDQuMTIyODEgMTAuNDg2NyA0LjMxODA3IDEwLjY4MiA0LjUxMzM0IDEwLjg3NzIgNC44Mjk5MiAxMC44NzcyIDUuMDI1MTggMTAuNjgyIDUuMjIwNDQgMTAuNDg2NyA1LjIyMDQ0IDEwLjE3MDEgNS4wMjUxOCA5Ljk3NDg3IDQuODI5OTIgOS43Nzk2IDQuNTEzMzQgOS43Nzk2IDQuMzE4MDcgOS45NzQ4N3pNNS43MzIyOSAxMS4zODkxQzUuNTM3MDMgMTEuNTg0MyA1LjUzNzAzIDExLjkwMDkgNS43MzIyOSAxMi4wOTYyIDUuOTI3NTUgMTIuMjkxNCA2LjI0NDEzIDEyLjI5MTUgNi40MzkzOSAxMi4wOTYyIDYuNjM0NjYgMTEuOTAwOSA2LjYzNDY2IDExLjU4NDMgNi40MzkzOSAxMS4zODkxIDYuMjQ0MTMgMTEuMTkzOCA1LjkyNzU1IDExLjE5MzggNS43MzIyOSAxMS4zODkxek0yLjE5Njc1IDcuODUzNTVDMi4zNjc2MSA3LjY4MjY5IDIuMzg4OTcgNy40MTg5NSAyLjI2MDgyIDcuMjI0ODggMi4wOTA0NiA2Ljk2Njg0IDEuNzEwNjMgNi45MjU0NiAxLjQ4OTY1IDcuMTQ2NDQgMS4yOTQzOSA3LjM0MTcgMS4yOTQzOSA3LjY1ODI5IDEuNDg5NjUgNy44NTM1NSAxLjY4NDkxIDguMDQ4ODEgMi4wMDE0OSA4LjA0ODgxIDIuMTk2NzUgNy44NTM1NXpNMy42MTA5NyA1LjczMjIzQzMuNDE1NzEgNS41MzY5NiAzLjA5OTEyIDUuNTM2OTYgMi45MDM4NiA1LjczMjIzIDIuNzA4NiA1LjkyNzQ5IDIuNzA4NiA2LjI0NDA3IDIuOTAzODYgNi40MzkzMyAzLjA5OTEyIDYuNjM0NiAzLjQxNTcxIDYuNjM0NiAzLjYxMDk3IDYuNDM5MzMgMy44MDYyMyA2LjI0NDA3IDMuODA2MjMgNS45Mjc0OSAzLjYxMDk3IDUuNzMyMjN6TTUuMDI1MTggNC4zMTgwMUM0LjgyOTkyIDQuMTIyNzUgNC41MTMzNCA0LjEyMjc1IDQuMzE4MDcgNC4zMTgwMSA0LjEyMjgxIDQuNTEzMjggNC4xMjI4MSA0LjgyOTg2IDQuMzE4MDcgNS4wMjUxMiA0LjUxMzM0IDUuMjIwMzggNC44Mjk5MiA1LjIyMDM4IDUuMDI1MTggNS4wMjUxMiA1LjIyMDQ0IDQuODI5ODYgNS4yMjA0NCA0LjUxMzI4IDUuMDI1MTggNC4zMTgwMXpNNi40MzkzOSAyLjkwMzhDNi4yNDQxMyAyLjcwODU0IDUuOTI3NTUgMi43MDg1NCA1LjczMjI5IDIuOTAzOCA1LjUzNzAzIDMuMDk5MDYgNS41MzcwMyAzLjQxNTY0IDUuNzMyMjkgMy42MTA5MSA1LjkyNzU1IDMuODA2MTcgNi4yNDQxMyAzLjgwNjE3IDYuNDM5MzkgMy42MTA5MSA2LjYzNDY2IDMuNDE1NjQgNi42MzQ2NiAzLjA5OTA2IDYuNDM5MzkgMi45MDM4ek03Ljg1MzYxIDEuNDg5NTlDNy42NTgzNSAxLjI5NDMyIDcuMzQxNzYgMS4yOTQzMiA3LjE0NjUgMS40ODk1OSA2Ljk1MTI0IDEuNjg0ODUgNi45NTEyNCAyLjAwMTQzIDcuMTQ2NSAyLjE5NjY5IDcuMzQxNzYgMi4zOTE5NiA3LjY1ODM1IDIuMzkxOTYgNy44NTM2MSAyLjE5NjY5IDguMDQ4ODcgMi4wMDE0MyA4LjA0ODg3IDEuNjg0ODUgNy44NTM2MSAxLjQ4OTU5ek05LjI2NzgyIDIuOTAzOEM5LjA3MjU2IDIuNzA4NTQgOC43NTU5OCAyLjcwODU0IDguNTYwNzEgMi45MDM4IDguMzY1NDUgMy4wOTkwNiA4LjM2NTQ1IDMuNDE1NjQgOC41NjA3MSAzLjYxMDkxIDguNzU1OTggMy44MDYxNyA5LjA3MjU2IDMuODA2MTcgOS4yNjc4MiAzLjYxMDkxIDkuNDYzMDggMy40MTU2NCA5LjQ2MzA4IDMuMDk5MDYgOS4yNjc4MiAyLjkwMzh6TTEwLjY4MiA0LjMxODAxQzEwLjQ4NjggNC4xMjI3NSAxMC4xNzAyIDQuMTIyNzUgOS45NzQ5MyA0LjMxODAxIDkuNzc5NjcgNC41MTMyOCA5Ljc3OTY3IDQuODI5ODYgOS45NzQ5MyA1LjAyNTEyIDEwLjE3MDIgNS4yMjAzOCAxMC40ODY4IDUuMjIwMzggMTAuNjgyIDUuMDI1MTIgMTAuODc3MyA0LjgyOTg2IDEwLjg3NzMgNC41MTMyOCAxMC42ODIgNC4zMTgwMXpNMTIuMDk2MiA1LjczMjIzQzExLjkwMSA1LjUzNjk2IDExLjU4NDQgNS41MzY5NiAxMS4zODkxIDUuNzMyMjMgMTEuMTkzOSA1LjkyNzQ5IDExLjE5MzkgNi4yNDQwNyAxMS4zODkxIDYuNDM5MzMgMTEuNTg0NCA2LjYzNDYgMTEuOTAxIDYuNjM0NiAxMi4wOTYyIDYuNDM5MzMgMTIuMjkxNSA2LjI0NDA3IDEyLjI5MTUgNS45Mjc0OSAxMi4wOTYyIDUuNzMyMjN6XCIsZmlsbDpufSkpfSxFZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiAxLjVDMiAxLjc3NjE0IDEuNzc2MTQgMiAxLjUgMkMxLjIyMzg2IDIgMSAxLjc3NjE0IDEgMS41QzEgMS4yMjM4NiAxLjIyMzg2IDEgMS41IDFDMS43NzYxNCAxIDIgMS4yMjM4NiAyIDEuNVpNNSAxM0gxMFYyTDUgMkw1IDEzWk00IDEzQzQgMTMuNTUyMyA0LjQ0NzcyIDE0IDUgMTRIMTBDMTAuNTUyMyAxNCAxMSAxMy41NTIzIDExIDEzVjJDMTEgMS40NDc3MiAxMC41NTIzIDEgMTAgMUg1QzQuNDQ3NzIgMSA0IDEuNDQ3NzEgNCAyVjEzWk0xMy41IDJDMTMuNzc2MSAyIDE0IDEuNzc2MTQgMTQgMS41QzE0IDEuMjIzODYgMTMuNzc2MSAxIDEzLjUgMUMxMy4yMjM5IDEgMTMgMS4yMjM4NiAxMyAxLjVDMTMgMS43NzYxNCAxMy4yMjM5IDIgMTMuNSAyWk0yIDMuNUMyIDMuNzc2MTQgMS43NzYxNCA0IDEuNSA0QzEuMjIzODYgNCAxIDMuNzc2MTQgMSAzLjVDMSAzLjIyMzg2IDEuMjIzODYgMyAxLjUgM0MxLjc3NjE0IDMgMiAzLjIyMzg2IDIgMy41Wk0xMy41IDRDMTMuNzc2MSA0IDE0IDMuNzc2MTQgMTQgMy41QzE0IDMuMjIzODYgMTMuNzc2MSAzIDEzLjUgM0MxMy4yMjM5IDMgMTMgMy4yMjM4NiAxMyAzLjVDMTMgMy43NzYxNCAxMy4yMjM5IDQgMTMuNSA0Wk0yIDUuNUMyIDUuNzc2MTQgMS43NzYxNCA2IDEuNSA2QzEuMjIzODYgNiAxIDUuNzc2MTQgMSA1LjVDMSA1LjIyMzg2IDEuMjIzODYgNSAxLjUgNUMxLjc3NjE0IDUgMiA1LjIyMzg2IDIgNS41Wk0xMy41IDZDMTMuNzc2MSA2IDE0IDUuNzc2MTQgMTQgNS41QzE0IDUuMjIzODYgMTMuNzc2MSA1IDEzLjUgNUMxMy4yMjM5IDUgMTMgNS4yMjM4NiAxMyA1LjVDMTMgNS43NzYxNCAxMy4yMjM5IDYgMTMuNSA2Wk0yIDcuNUMyIDcuNzc2MTQgMS43NzYxNCA4IDEuNSA4QzEuMjIzODYgOCAxIDcuNzc2MTQgMSA3LjVDMSA3LjIyMzg2IDEuMjIzODYgNyAxLjUgN0MxLjc3NjE0IDcgMiA3LjIyMzg2IDIgNy41Wk0xMy41IDhDMTMuNzc2MSA4IDE0IDcuNzc2MTQgMTQgNy41QzE0IDcuMjIzODYgMTMuNzc2MSA3IDEzLjUgN0MxMy4yMjM5IDcgMTMgNy4yMjM4NiAxMyA3LjVDMTMgNy43NzYxNCAxMy4yMjM5IDggMTMuNSA4Wk0yIDkuNUMyIDkuNzc2MTQgMS43NzYxNCAxMCAxLjUgMTBDMS4yMjM4NiAxMCAxIDkuNzc2MTQgMSA5LjVDMSA5LjIyMzg2IDEuMjIzODYgOSAxLjUgOUMxLjc3NjE0IDkgMiA5LjIyMzg2IDIgOS41Wk0xMy41IDEwQzEzLjc3NjEgMTAgMTQgOS43NzYxNCAxNCA5LjVDMTQgOS4yMjM4NiAxMy43NzYxIDkgMTMuNSA5QzEzLjIyMzkgOSAxMyA5LjIyMzg2IDEzIDkuNUMxMyA5Ljc3NjE0IDEzLjIyMzkgMTAgMTMuNSAxMFpNMiAxMS41QzIgMTEuNzc2MSAxLjc3NjE0IDEyIDEuNSAxMkMxLjIyMzg2IDEyIDEgMTEuNzc2MSAxIDExLjVDMSAxMS4yMjM5IDEuMjIzODYgMTEgMS41IDExQzEuNzc2MTQgMTEgMiAxMS4yMjM5IDIgMTEuNVpNMTMuNSAxMkMxMy43NzYxIDEyIDE0IDExLjc3NjEgMTQgMTEuNUMxNCAxMS4yMjM5IDEzLjc3NjEgMTEgMTMuNSAxMUMxMy4yMjM5IDExIDEzIDExLjIyMzkgMTMgMTEuNUMxMyAxMS43NzYxIDEzLjIyMzkgMTIgMTMuNSAxMlpNMiAxMy41QzIgMTMuNzc2MSAxLjc3NjE0IDE0IDEuNSAxNEMxLjIyMzg2IDE0IDEgMTMuNzc2MSAxIDEzLjVDMSAxMy4yMjM5IDEuMjIzODYgMTMgMS41IDEzQzEuNzc2MTQgMTMgMiAxMy4yMjM5IDIgMTMuNVpNMTMuNSAxNEMxMy43NzYxIDE0IDE0IDEzLjc3NjEgMTQgMTMuNUMxNCAxMy4yMjM5IDEzLjc3NjEgMTMgMTMuNSAxM0MxMy4yMjM5IDEzIDEzIDEzLjIyMzkgMTMgMTMuNUMxMyAxMy43NzYxIDEzLjIyMzkgMTQgMTMuNSAxNFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFNlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMi4wNjk3IDEuNzY3NDZDMTIuNDgwNyAxLjIxOTQ3IDExLjQ2MDUgMC40NTQzMTEgMTEuMDQ5NSAxLjAwMjNDMTAuNjM4NSAxLjU1MDI4IDExLjY1ODggMi4zMTU0NCAxMi4wNjk3IDEuNzY3NDZaTTguMzkyNjMgMS4wNzgxMUM3LjE1NTg1IDAuOTUwNjAyIDUuNzgyMyAxLjE2MzQ4IDQuNTg0MzMgMS43MDkzN0MzLjM4NTUyIDIuMjU1NjMgMi4zMjczNSAzLjE1MzA5IDEuNzg4NDQgNC40MTgzMkMxLjM3NTc0IDUuMzg3MjQgMS4wMTcxNSA2LjI4MTEzIDEuMDAwODggNy40NDM1NEMwLjk4NDcyNCA4LjU5ODQ0IDEuMzA1MjIgOS45Njg5OCAyLjEzMTc0IDExLjkyOEMyLjYxMTQyIDEzLjA2NDkgNC4wMzk2MyAxMy41NDQ2IDUuMTM4OTUgMTMuODA3OUM2LjQwODM2IDE0LjExMTkgNy44MDg1NyAxNC4xOTE0IDguNjY0NCAxNC4wNzQyQzkuMzY1MTUgMTMuOTc4MiAxMC4xNDQ4IDEzLjgyODQgMTAuNzk4NyAxMy4yOTdDMTEuODk3NyAxMi40MDM5IDEyLjkwMDkgMTEuMzk1NSAxMy40OTk0IDEwLjMzOTNDMTQuMTA0IDkuMjcyMjEgMTQuMzI1NiA4LjA5MjA3IDEzLjcyMTYgNi45NTMyNEMxMy41NjI4IDYuNjUzNzMgMTMuMzE2IDYuNTc3MzQgMTMuMDQxMiA2LjQ5MjNDMTIuOTM3NCA2LjQ2MDE2IDEyLjgyOTUgNi40MjY3OCAxMi43MjA5IDYuMzc5NjZDMTEuNjIxMSA1LjkwMjM0IDEwLjk2NDYgNS4zNDk2MyAxMC45MTM1IDUuMDI4NzZDMTAuODY1NiA0LjcyODA4IDEwLjkyMjEgNC41MTQ2MyAxMC45ODExIDQuMjkxODFDMTEuMDEyOSA0LjE3MTk5IDExLjA0NTMgNC4wNDk0NyAxMS4wNjI2IDMuOTA5MjJDMTEuMDgzOCAzLjczNzM3IDExLjA4MTQgMy4zMzMxOSAxMC42OTk2IDMuMTI3NjFDMTAuNDA0OCAyLjk2ODg4IDEwLjIxNjQgMi42NTg0MyAxMC4wNDA3IDIuMzY5MDRDOS45OTc0MiAyLjI5Nzc1IDkuOTU0OTIgMi4yMjc3MyA5LjkxMTggMi4xNjE1OEM5LjYyNjM0IDEuNzIzNjcgOS4yMDc2OSAxLjE2MjEzIDguMzkyNjMgMS4wNzgxMVpNNC45OTg5OSAyLjYxOTM1QzMuOTY0ODMgMy4wOTA1OCAzLjEyNTU0IDMuODMwOTcgMi43MDg0NiA0LjgxMDE4QzIuMjk4MDggNS43NzM2OCAyLjAxNDA2IDYuNTA4NzMgMi4wMDA3OSA3LjQ1NzUzQzEuOTg3NDEgOC40MTM4NSAyLjI1MDQzIDkuNjM2OCAzLjA1MzEgMTEuNTM5M0MzLjM5MTgxIDEyLjM0MjEgNC42MjE2NyAxMi42NTU3IDUuMzcxODYgMTIuODM1NEM2LjU0OTMgMTMuMTE3NCA3LjgyMiAxMy4xODAyIDguNTI4NjggMTMuMDgzNEM5LjIxMjcxIDEyLjk4OTcgOS43NDU2OCAxMi44NjQyIDEwLjE2ODEgMTIuNTIwOUMxMS4yMjkgMTEuNjU4NyAxMi4xMjEgMTAuNzQzNSAxMi42MjkzIDkuODQ2MzVDMTIuOTM0OSA5LjMwNzA5IDEzLjUxNDEgNy43MDI4IDEyLjYyOTIgNy4zODczQzEwLjc1MzkgNi43MTg3NSAxMC4yNjIgNi4wNjY2OSA5Ljk5MDExIDUuNDEyNjhDOS44MDkxNSA0Ljk3NzQ0IDkuODI4NjggNC41MjI4MiA5Ljk1NzQxIDQuMDc4ODVMOS45NTc0MSA0LjA3ODg0QzkuOTc2NjIgNC4wMTI2IDkuOTk1MzggMy45NDc5MSAxMC4wMzM0IDMuODg4ODJDOS44MTg1NyAzLjczNjc2IDkuNjUxNSAzLjU1MTk1IDkuNTE0NjQgMy4zNzE1QzkuNDI4NzYgMy4yNTgyOCA5LjM0NjkgMy4xMjA5OSA5LjI2MTk3IDIuOTc4NTZDOS4wMTg2NiAyLjU3MDUyIDguNzUwMTggMi4xMjAyNyA4LjI5MDA4IDIuMDcyODNDNy4yMjg4OSAxLjk2MzQzIDYuMDMzOTggMi4xNDc3MiA0Ljk5ODk5IDIuNjE5MzVaTTEzLjIwODEgMy43NzQ3MUMxMy40NDEgMy4yMjY3MSAxMi40NTQ3IDIuNjM2MDYgMTIuMDgyMiAzLjEwMTYzQzExLjU4MTcgMy43MjczMiAxMi45MDI5IDQuNDkyODEgMTMuMjA4MSAzLjc3NDcxWk0xNC4zNjcyIDIuMjYwMzFDMTQuOTY2OCAyLjI3NDkzIDE1LjE1NTEgMS4xMTYwMyAxNC41NzE4IDAuOTQ5MzcxQzEzLjgwNzYgMC43MzEwMjYgMTMuNTkxOCAyLjI0MTM5IDE0LjM2NzIgMi4yNjAzMVpNMTQuMjg1NyA1LjA5MDk4QzE0Ljg2NDQgNS4xMDAwNCAxNS4wNDYyIDQuMzgyMjIgMTQuNDgzMiA0LjI3ODk5QzEzLjc0NTUgNC4xNDM3NSAxMy41MzczIDUuMDc5MjcgMTQuMjg1NyA1LjA5MDk4Wk02LjkwNzUgNC4yODY3MkM2LjQ2ODk4IDQuNjY3NTQgNi4wNTIyIDQuMTUxODUgNS45Nzk4MyAzLjczNjVDNS44Njg0OCAzLjA5NzQ0IDYuMzM2OTYgMi41Njg1NiA2Ljk0ODIzIDIuOTExNTZDNy40MzM0NCAzLjE4MzgyIDcuMjY2NzggMy45NzQ3MSA2LjkwNzUgNC4yODY3MlpNNC45NDQ1NSA1Ljg4MTg0QzUuNDA4ODUgNS40MTc1NCA0LjU5NTY3IDQuNTcwMTMgNC4xMTQyNSA1LjA1MTU0QzMuODMzMzggNS4zMzI0MiA0LjAwOTM2IDUuNjUzNzYgNC4yMzc0NCA1Ljg4MTg0QzQuNDMyNzEgNi4wNzcxIDQuNzQ5MjkgNi4wNzcxIDQuOTQ0NTUgNS44ODE4NFpNNi45NzcxNiA2LjcxOTg0QzcuMzExODEgNy4zODkxNCA4LjQ4ODA0IDYuNzkxNTkgNy45OTQxMyA2LjE0Nzg4QzcuODY1MTkgNS45Nzk4MyA3LjY4NjU3IDUuOTQ5NCA3LjYyMTQ1IDUuOTQyMDdDNy4yMTIxNyA1Ljg5NjAxIDYuNzYzNDkgNi4yOTI1IDYuOTc3MTYgNi43MTk4NFpNNi45ODc5OCA4LjcyNDYxQzcuMTQwNjYgOS4xMTg4IDcuNTExMjIgOS4zMTg3IDcuOTE5MTUgOS4xNjMzQzguMjc0MzQgOS4wMjc5OSA4LjMzMTg2IDguMzk2ODkgOC4xNzE3NSA4LjA3NDI3QzguMDIzMzEgNy43NzUxNCA3LjYzOTU2IDcuNjc3OTMgNy4zMzc0NyA3Ljc5NDE3QzYuOTg1MTIgNy45Mjk3NiA2Ljg1NjcyIDguMzg3MDggNi45ODU3NiA4LjcxODg5TDYuOTg3OTggOC43MjQ2MVpNMTAuMzg4NSA4Ljg0MDgxQzEwLjc1NzUgOC42NTY2IDExLjQ2MTcgOC44Mjc3MSAxMS40NjE3IDkuMzExOTlDMTEuNDYxNyA5LjcxMjg2IDEwLjk1ODcgMTAuMjE2NSAxMC41NjM0IDEwLjI4MjZDMTAuMTgxMyAxMC4zNDY1IDkuNzA1MTUgOS45NzU4MSA5Ljc2NjQ4IDkuNTc3MThDOS44MTQ0NSA5LjI2NTM5IDEwLjEyMTcgOC45NzQwMSAxMC4zODg1IDguODQwODFaTTcuNTY3MDQgMTAuODQzMkM3LjMzNDYxIDEwLjc1MDIgNy4xNDM1MyAxMC44NjAxIDcuMTE0MzcgMTAuODc2OUw3LjExMjc5IDEwLjg3NzhDNi45MDc4MiAxMC45OTQ5IDYuNzEzODMgMTEuMjQzOSA2LjY3NDcgMTEuNDg0MkM2LjU5MDE4IDEyLjAwMzQgNy4xMzE5OSAxMi4xMjM5IDcuNTI2NjEgMTIuMDk4N0M4LjIwNzQgMTIuMDU1MyA4LjA2NTQ3IDExLjA0MjYgNy41NjcwNCAxMC44NDMyWk00Ljg4MDUgMTAuODkzMkM1LjA2NzQgMTAuNzcyMyA1LjE1NjU4IDEwLjUzNjMgNS4wODI5MyAxMC4zMTUzQzQuOTMwNDYgOS43OTY4NyA0LjMyNDYgOS43MTI1MiAzLjk2NTYxIDEwLjEyOTdDMy43OTMzNiAxMC4zMjk5IDMuODA3NDkgMTAuNjI3NCAzLjk5MjE0IDEwLjgxMDVMMy45OTQ5NSAxMC44MTRMMy45OTc5IDEwLjgxNzZDNC4yMjAyNSAxMS4wOTQyIDQuNjM2MjQgMTEuMTg1NyA0Ljg4MDUgMTAuODkzMlpNMy4wNDY5NSA3LjgxMzE4QzMuMzMxNDcgOC4wOTc3IDMuNjAwNzcgOC4xNTA2NyAzLjk4NDQzIDguMDU4NTlDNC42MDgyNiA3LjkwODg3IDQuMTM4MTQgNi4yNDI5OSAzLjA0NyA2Ljg3Mjk2QzIuNzA5MzkgNy4wNjc4OCAyLjg2NzE2IDcuNjMzMzkgMy4wNDY5NSA3LjgxMzE4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0samU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEgOS41MDAwNkMxIDEwLjMyODUgMS42NzE1NyAxMS4wMDAxIDIuNSAxMS4wMDAxSDRMNCAxMC4wMDAxSDIuNUMyLjIyMzg2IDEwLjAwMDEgMiA5Ljc3NjIgMiA5LjUwMDA2TDIgMi41MDAwNkMyIDIuMjIzOTIgMi4yMjM4NiAyLjAwMDA2IDIuNSAyLjAwMDA2TDkuNSAyLjAwMDA2QzkuNzc2MTQgMi4wMDAwNiAxMCAyLjIyMzkyIDEwIDIuNTAwMDZWNC4wMDAwMkg1LjVDNC42NzE1OCA0LjAwMDAyIDQgNC42NzE1OSA0IDUuNTAwMDJWMTIuNUM0IDEzLjMyODQgNC42NzE1OCAxNCA1LjUgMTRIMTIuNUMxMy4zMjg0IDE0IDE0IDEzLjMyODQgMTQgMTIuNVY1LjUwMDAyQzE0IDQuNjcxNTkgMTMuMzI4NCA0LjAwMDAyIDEyLjUgNC4wMDAwMkgxMVYyLjUwMDA2QzExIDEuNjcxNjMgMTAuMzI4NCAxLjAwMDA2IDkuNSAxLjAwMDA2SDIuNUMxLjY3MTU3IDEuMDAwMDYgMSAxLjY3MTYzIDEgMi41MDAwNlY5LjUwMDA2Wk01IDUuNTAwMDJDNSA1LjIyMzg4IDUuMjIzODYgNS4wMDAwMiA1LjUgNS4wMDAwMkgxMi41QzEyLjc3NjEgNS4wMDAwMiAxMyA1LjIyMzg4IDEzIDUuNTAwMDJWMTIuNUMxMyAxMi43NzYyIDEyLjc3NjEgMTMgMTIuNSAxM0g1LjVDNS4yMjM4NiAxMyA1IDEyLjc3NjIgNSAxMi41VjUuNTAwMDJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxNZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOS44NzczNyAxMkg5LjlIMTEuNUMxMS43NzYxIDEyIDEyIDExLjc3NjEgMTIgMTEuNUMxMiAxMS4yMjM5IDExLjc3NjEgMTEgMTEuNSAxMUg5LjlDOC43NzE2NCAxMSA3Ljk1NTQ1IDEwLjk5OTYgNy4zMTM1MiAxMC45NDcyQzYuNjc3NDQgMTAuODk1MiA2LjI1NjYyIDEwLjc5NDYgNS45MTEwMyAxMC42MTg1QzUuMjUyNDcgMTAuMjgzIDQuNzE3MDMgOS43NDc1MyA0LjM4MTQ4IDkuMDg4OTdDNC4yMDUzOSA4Ljc0MzM4IDQuMTA0ODEgOC4zMjI1NiA0LjA1Mjg0IDcuNjg2NDhDNC4wMDAzOSA3LjA0NDU1IDQgNi4yMjgzNiA0IDUuMVYzLjVDNCAzLjIyMzg2IDMuNzc2MTQgMyAzLjUgM0MzLjIyMzg2IDMgMyAzLjIyMzg2IDMgMy41VjUuMVY1LjEyMjYzQzMgNi4yMjM1OSAzIDcuMDgwNTIgMy4wNTYxNiA3Ljc2NzkxQzMuMTEzMTggOC40NjU4NCAzLjIzMDU4IDkuMDMyOSAzLjQ5MDQ3IDkuNTQyOTZDMy45MjE5IDEwLjM4OTcgNC42MTAzMSAxMS4wNzgxIDUuNDU3MDQgMTEuNTA5NUM1Ljk2NzEgMTEuNzY5NCA2LjUzNDE2IDExLjg4NjggNy4yMzIwOSAxMS45NDM4QzcuOTE5NDggMTIgOC43NzY0MSAxMiA5Ljg3NzM3IDEyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sa2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUuMTIyNjMgMTJINS4xSDMuNUMzLjIyMzg2IDEyIDMgMTEuNzc2MSAzIDExLjVDMyAxMS4yMjM5IDMuMjIzODYgMTEgMy41IDExSDUuMUM2LjIyODM2IDExIDcuMDQ0NTUgMTAuOTk5NiA3LjY4NjQ4IDEwLjk0NzJDOC4zMjI1NiAxMC44OTUyIDguNzQzMzggMTAuNzk0NiA5LjA4ODk3IDEwLjYxODVDOS43NDc1MyAxMC4yODMgMTAuMjgzIDkuNzQ3NTMgMTAuNjE4NSA5LjA4ODk3QzEwLjc5NDYgOC43NDMzOCAxMC44OTUyIDguMzIyNTYgMTAuOTQ3MiA3LjY4NjQ4QzEwLjk5OTYgNy4wNDQ1NSAxMSA2LjIyODM2IDExIDUuMVYzLjVDMTEgMy4yMjM4NiAxMS4yMjM5IDMgMTEuNSAzQzExLjc3NjEgMyAxMiAzLjIyMzg2IDEyIDMuNVY1LjFWNS4xMjI2M0MxMiA2LjIyMzU5IDEyIDcuMDgwNTIgMTEuOTQzOCA3Ljc2NzkxQzExLjg4NjggOC40NjU4NCAxMS43Njk0IDkuMDMyOSAxMS41MDk1IDkuNTQyOTZDMTEuMDc4MSAxMC4zODk3IDEwLjM4OTcgMTEuMDc4MSA5LjU0Mjk2IDExLjUwOTVDOS4wMzI5IDExLjc2OTQgOC40NjU4NCAxMS44ODY4IDcuNzY3OTEgMTEuOTQzOEM3LjA4MDUyIDEyIDYuMjIzNTkgMTIgNS4xMjI2MyAxMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFJlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk05Ljg3NzM3IDNIOS45SDExLjVDMTEuNzc2MSAzIDEyIDMuMjIzODYgMTIgMy41QzEyIDMuNzc2MTQgMTEuNzc2MSA0IDExLjUgNEg5LjlDOC43NzE2NCA0IDcuOTU1NDUgNC4wMDAzOSA3LjMxMzUyIDQuMDUyODRDNi42Nzc0NCA0LjEwNDgxIDYuMjU2NjIgNC4yMDUzOSA1LjkxMTAzIDQuMzgxNDhDNS4yNTI0NyA0LjcxNzAzIDQuNzE3MDMgNS4yNTI0NyA0LjM4MTQ4IDUuOTExMDNDNC4yMDUzOSA2LjI1NjYyIDQuMTA0ODEgNi42Nzc0NCA0LjA1Mjg0IDcuMzEzNTJDNC4wMDAzOSA3Ljk1NTQ1IDQgOC43NzE2NCA0IDkuOVYxMS41QzQgMTEuNzc2MSAzLjc3NjE0IDEyIDMuNSAxMkMzLjIyMzg2IDEyIDMgMTEuNzc2MSAzIDExLjVWOS45VjkuODc3MzdDMyA4Ljc3NjQxIDMgNy45MTk0OCAzLjA1NjE2IDcuMjMyMDlDMy4xMTMxOCA2LjUzNDE2IDMuMjMwNTggNS45NjcxIDMuNDkwNDcgNS40NTcwNEMzLjkyMTkgNC42MTAzMSA0LjYxMDMxIDMuOTIxOSA1LjQ1NzA0IDMuNDkwNDdDNS45NjcxIDMuMjMwNTggNi41MzQxNiAzLjExMzE4IDcuMjMyMDkgMy4wNTYxNkM3LjkxOTQ4IDMgOC43NzY0MSAzIDkuODc3MzcgM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFBlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjEyMjYzIDNINS4xSDMuNUMzLjIyMzg2IDMgMyAzLjIyMzg2IDMgMy41QzMgMy43NzYxNCAzLjIyMzg2IDQgMy41IDRINS4xQzYuMjI4MzYgNCA3LjA0NDU1IDQuMDAwMzkgNy42ODY0OCA0LjA1Mjg0QzguMzIyNTYgNC4xMDQ4MSA4Ljc0MzM4IDQuMjA1MzkgOS4wODg5NyA0LjM4MTQ4QzkuNzQ3NTMgNC43MTcwMyAxMC4yODMgNS4yNTI0NyAxMC42MTg1IDUuOTExMDNDMTAuNzk0NiA2LjI1NjYyIDEwLjg5NTIgNi42Nzc0NCAxMC45NDcyIDcuMzEzNTJDMTAuOTk5NiA3Ljk1NTQ1IDExIDguNzcxNjQgMTEgOS45VjExLjVDMTEgMTEuNzc2MSAxMS4yMjM5IDEyIDExLjUgMTJDMTEuNzc2MSAxMiAxMiAxMS43NzYxIDEyIDExLjVWOS45VjkuODc3MzdDMTIgOC43NzY0MSAxMiA3LjkxOTQ4IDExLjk0MzggNy4yMzIwOUMxMS44ODY4IDYuNTM0MTYgMTEuNzY5NCA1Ljk2NzEgMTEuNTA5NSA1LjQ1NzA0QzExLjA3ODEgNC42MTAzMSAxMC4zODk3IDMuOTIxOSA5LjU0Mjk2IDMuNDkwNDdDOS4wMzI5IDMuMjMwNTggOC40NjU4NCAzLjExMzE4IDcuNzY3OTEgMy4wNTYxNkM3LjA4MDUyIDMgNi4yMjM1OSAzIDUuMTIyNjMgM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEllPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMC4xIDNDMTAuNTI4MyAzIDEwLjgxOTQgMy4wMDAzOSAxMS4wNDQ1IDMuMDE4NzhDMTEuMjYzNyAzLjAzNjY5IDExLjM3NTggMy4wNjkxNSAxMS40NTQgMy4xMDg5OUMxMS42NDIyIDMuMjA0ODcgMTEuNzk1MSAzLjM1Nzg1IDExLjg5MSAzLjU0NjAxQzExLjkzMDkgMy42MjQyMSAxMS45NjMzIDMuNzM2MzEgMTEuOTgxMiAzLjk1NTUyQzExLjk5OTYgNC4xODA1NiAxMiA0LjQ3MTcxIDEyIDQuOVY1LjVDMTIgNS43NzYxNCAxMi4yMjM5IDYgMTIuNSA2QzEyLjc3NjEgNiAxMyA1Ljc3NjE0IDEzIDUuNVY0Ljg3OTM1QzEzIDQuNDc2ODcgMTMgNC4xNDQ2OSAxMi45Nzc5IDMuODc0MDlDMTIuOTU0OSAzLjU5MzA0IDEyLjkwNTcgMy4zMzQ2OSAxMi43ODIgMy4wOTIwMkMxMi41OTAzIDIuNzE1NyAxMi4yODQzIDIuNDA5NzMgMTEuOTA4IDIuMjE3OTlDMTEuNjY1MyAyLjA5NDM0IDExLjQwNyAyLjA0NTA2IDExLjEyNTkgMi4wMjIxQzEwLjg1NTMgMS45OTk5OSAxMC41MjMxIDEuOTk5OTkgMTAuMTIwNyAySDEwLjEyMDZIMTAuMUg5LjVDOS4yMjM4NiAyIDkgMi4yMjM4NiA5IDIuNUM5IDIuNzc2MTQgOS4yMjM4NiAzIDkuNSAzSDEwLjFaTTUuNSAySDQuODc5MzVINC44NzkzNEM0LjQ3Njg2IDEuOTk5OTkgNC4xNDQ2OCAxLjk5OTk5IDMuODc0MDkgMi4wMjIxQzMuNTkzMDQgMi4wNDUwNiAzLjMzNDY5IDIuMDk0MzQgMy4wOTIwMiAyLjIxNzk5QzIuNzE1NyAyLjQwOTczIDIuNDA5NzMgMi43MTU3IDIuMjE3OTkgMy4wOTIwMkMyLjA5NDM0IDMuMzM0NjkgMi4wNDUwNiAzLjU5MzA0IDIuMDIyMSAzLjg3NDA5QzEuOTk5OTkgNC4xNDQ2OCAxLjk5OTk5IDQuNDc2ODYgMiA0Ljg3OTM0VjQuODc5MzVWNS41QzIgNS43NzYxNCAyLjIyMzg2IDYgMi41IDZDMi43NzYxNCA2IDMgNS43NzYxNCAzIDUuNVY0LjlDMyA0LjQ3MTcxIDMuMDAwMzkgNC4xODA1NiAzLjAxODc4IDMuOTU1NTJDMy4wMzY2OSAzLjczNjMxIDMuMDY5MTUgMy42MjQyMSAzLjEwODk5IDMuNTQ2MDFDMy4yMDQ4NyAzLjM1Nzg1IDMuMzU3ODUgMy4yMDQ4NyAzLjU0NjAxIDMuMTA4OTlDMy42MjQyMSAzLjA2OTE1IDMuNzM2MzEgMy4wMzY2OSAzLjk1NTUyIDMuMDE4NzhDNC4xODA1NiAzLjAwMDM5IDQuNDcxNzEgMyA0LjkgM0g1LjVDNS43NzYxNCAzIDYgMi43NzYxNCA2IDIuNUM2IDIuMjIzODYgNS43NzYxNCAyIDUuNSAyWk0xMyA5LjVDMTMgOS4yMjM4NiAxMi43NzYxIDkgMTIuNSA5QzEyLjIyMzkgOSAxMiA5LjIyMzg2IDEyIDkuNVYxMC4xQzEyIDEwLjUyODMgMTEuOTk5NiAxMC44MTk0IDExLjk4MTIgMTEuMDQ0NUMxMS45NjMzIDExLjI2MzcgMTEuOTMwOSAxMS4zNzU4IDExLjg5MSAxMS40NTRDMTEuNzk1MSAxMS42NDIyIDExLjY0MjIgMTEuNzk1MSAxMS40NTQgMTEuODkxQzExLjM3NTggMTEuOTMwOSAxMS4yNjM3IDExLjk2MzMgMTEuMDQ0NSAxMS45ODEyQzEwLjgxOTQgMTEuOTk5NiAxMC41MjgzIDEyIDEwLjEgMTJIOS41QzkuMjIzODYgMTIgOSAxMi4yMjM5IDkgMTIuNUM5IDEyLjc3NjEgOS4yMjM4NiAxMyA5LjUgMTNIMTAuMTIwNkMxMC41MjMxIDEzIDEwLjg1NTMgMTMgMTEuMTI1OSAxMi45Nzc5QzExLjQwNyAxMi45NTQ5IDExLjY2NTMgMTIuOTA1NyAxMS45MDggMTIuNzgyQzEyLjI4NDMgMTIuNTkwMyAxMi41OTAzIDEyLjI4NDMgMTIuNzgyIDExLjkwOEMxMi45MDU3IDExLjY2NTMgMTIuOTU0OSAxMS40MDcgMTIuOTc3OSAxMS4xMjU5QzEzIDEwLjg1NTMgMTMgMTAuNTIzMSAxMyAxMC4xMjA2VjkuNVpNMi41IDlDMi43NzYxNCA5IDMgOS4yMjM4NiAzIDkuNVYxMC4xQzMgMTAuNTI4MyAzLjAwMDM5IDEwLjgxOTQgMy4wMTg3OCAxMS4wNDQ1QzMuMDM2NjkgMTEuMjYzNyAzLjA2OTE1IDExLjM3NTggMy4xMDg5OSAxMS40NTRDMy4yMDQ4NyAxMS42NDIyIDMuMzU3ODUgMTEuNzk1MSAzLjU0NjAxIDExLjg5MUMzLjYyNDIxIDExLjkzMDkgMy43MzYzMSAxMS45NjMzIDMuOTU1NTIgMTEuOTgxMkM0LjE4MDU2IDExLjk5OTYgNC40NzE3MSAxMiA0LjkgMTJINS41QzUuNzc2MTQgMTIgNiAxMi4yMjM5IDYgMTIuNUM2IDEyLjc3NjEgNS43NzYxNCAxMyA1LjUgMTNINC44NzkzNUM0LjQ3Njg3IDEzIDQuMTQ0NjkgMTMgMy44NzQwOSAxMi45Nzc5QzMuNTkzMDQgMTIuOTU0OSAzLjMzNDY5IDEyLjkwNTcgMy4wOTIwMiAxMi43ODJDMi43MTU3IDEyLjU5MDMgMi40MDk3MyAxMi4yODQzIDIuMjE3OTkgMTEuOTA4QzIuMDk0MzQgMTEuNjY1MyAyLjA0NTA2IDExLjQwNyAyLjAyMjEgMTEuMTI1OUMxLjk5OTk5IDEwLjg1NTMgMS45OTk5OSAxMC41MjMxIDIgMTAuMTIwN1YxMC4xMjA2VjEwLjFWOS41QzIgOS4yMjM4NiAyLjIyMzg2IDkgMi41IDlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxBZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTMuMTUgNy40OTk5OEMxMy4xNSA0LjY2NDU4IDEwLjk0MDIgMS44NDk5OCA3LjUwMDAyIDEuODQ5OThDNC43MjE3IDEuODQ5OTggMy4zNDg1MSAzLjkwNjM2IDIuNzYzMzYgNC45OTk5N0g0LjVDNC43NzYxNCA0Ljk5OTk3IDUgNS4yMjM4MyA1IDUuNDk5OTdDNSA1Ljc3NjExIDQuNzc2MTQgNS45OTk5NyA0LjUgNS45OTk5N0gxLjVDMS4yMjM4NiA1Ljk5OTk3IDEgNS43NzYxMSAxIDUuNDk5OTdWMi40OTk5N0MxIDIuMjIzODMgMS4yMjM4NiAxLjk5OTk3IDEuNSAxLjk5OTk3QzEuNzc2MTQgMS45OTk5NyAyIDIuMjIzODMgMiAyLjQ5OTk3VjQuMzEzMThDMi43MDQ1MyAzLjA3MTI2IDQuMzM0MDYgMC44NDk5NzYgNy41MDAwMiAwLjg0OTk3NkMxMS41NjI4IDAuODQ5OTc2IDE0LjE1IDQuMTg1MzcgMTQuMTUgNy40OTk5OEMxNC4xNSAxMC44MTQ2IDExLjU2MjggMTQuMTUgNy41MDAwMiAxNC4xNUM1LjU1NjE4IDE0LjE1IDMuOTM3NzggMTMuMzgwOCAyLjc4NTQ4IDEyLjIwODRDMi4xNjg1MiAxMS41ODA2IDEuNjg2NjggMTAuODM5IDEuMzU4MTYgMTAuMDQwN0MxLjI1MzA2IDkuNzg1MzYgMS4zNzQ4OCA5LjQ5MzE1IDEuNjMwMjQgOS4zODgwNkMxLjg4NTYgOS4yODI5NiAyLjE3NzgxIDkuNDA0NzggMi4yODI5IDkuNjYwMTRDMi41NjM3NCAxMC4zNDI1IDIuOTc0OTUgMTAuOTc0NSAzLjQ5ODcgMTEuNTA3NEM0LjQ3MDUyIDEyLjQ5NjMgNS44MzQ5NiAxMy4xNSA3LjUwMDAyIDEzLjE1QzEwLjk0MDIgMTMuMTUgMTMuMTUgMTAuMzM1NCAxMy4xNSA3LjQ5OTk4Wk03IDEwVjUuMDAwMDFIOFYxMEg3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEzLjE1IDcuNDk5OThDMTMuMTUgNC42NjQ1OCAxMC45NDAyIDEuODQ5OTggNy41MDAwMiAxLjg0OTk4QzQuNzIxNjcgMS44NDk5OCAzLjM0ODQ5IDMuOTA2NCAyLjc2MzM1IDVINC41QzQuNzc2MTQgNSA1IDUuMjIzODYgNSA1LjVDNSA1Ljc3NjE0IDQuNzc2MTQgNiA0LjUgNkgxLjVDMS4yMjM4NiA2IDEgNS43NzYxNCAxIDUuNVYyLjVDMSAyLjIyMzg2IDEuMjIzODYgMiAxLjUgMkMxLjc3NjE0IDIgMiAyLjIyMzg2IDIgMi41VjQuMzEzMThDMi43MDQ1MyAzLjA3MTI2IDQuMzM0MDYgMC44NDk5NzYgNy41MDAwMiAwLjg0OTk3NkMxMS41NjI4IDAuODQ5OTc2IDE0LjE1IDQuMTg1MzcgMTQuMTUgNy40OTk5OEMxNC4xNSAxMC44MTQ2IDExLjU2MjggMTQuMTUgNy41MDAwMiAxNC4xNUM1LjU1NjE4IDE0LjE1IDMuOTM3NzggMTMuMzgwOCAyLjc4NTQ4IDEyLjIwODRDMi4xNjg1MiAxMS41ODA2IDEuNjg2NjggMTAuODM5IDEuMzU4MTYgMTAuMDQwN0MxLjI1MzA2IDkuNzg1MzYgMS4zNzQ4OCA5LjQ5MzE1IDEuNjMwMjQgOS4zODgwNkMxLjg4NTYgOS4yODI5NiAyLjE3NzgxIDkuNDA0NzggMi4yODI5IDkuNjYwMTRDMi41NjM3NCAxMC4zNDI1IDIuOTc0OTUgMTAuOTc0NSAzLjQ5ODcgMTEuNTA3NEM0LjQ3MDUyIDEyLjQ5NjMgNS44MzQ5NiAxMy4xNSA3LjUwMDAyIDEzLjE1QzEwLjk0MDIgMTMuMTUgMTMuMTUgMTAuMzM1NCAxMy4xNSA3LjQ5OTk4Wk03LjUgNC4wMDAwMUM3Ljc3NjE0IDQuMDAwMDEgOCA0LjIyMzg3IDggNC41MDAwMVY3LjI5MjkxTDkuODUzNTUgOS4xNDY0NkMxMC4wNDg4IDkuMzQxNzIgMTAuMDQ4OCA5LjY1ODMxIDkuODUzNTUgOS44NTM1N0M5LjY1ODI5IDEwLjA0ODggOS4zNDE3MSAxMC4wNDg4IDkuMTQ2NDUgOS44NTM1N0w3LjE0NjQ1IDcuODUzNTdDNy4wNTI2OCA3Ljc1OTggNyA3LjYzMjYyIDcgNy41MDAwMVY0LjUwMDAxQzcgNC4yMjM4NyA3LjIyMzg2IDQuMDAwMDEgNy41IDQuMDAwMDFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxIZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy41IDguMDA2ODRlLTA3QzMuNzc2MTQgNy44ODYxNGUtMDcgNCAwLjIyMzg1OSA0IDAuNTAwMDAxTDQgMy4wMDAwNkwxMS41IDMuMDAwMDZDMTEuNzc2MSAzLjAwMDA2IDEyIDMuMjIzOTIgMTIgMy41MDAwNkwxMiAxMS4wMDAxTDE0LjUgMTFDMTQuNzc2MSAxMSAxNSAxMS4yMjM4IDE1IDExLjVDMTUgMTEuNzc2MSAxNC43NzYyIDEyIDE0LjUgMTJMMTIgMTIuMDAwMUwxMiAxNC41QzEyIDE0Ljc3NjEgMTEuNzc2MSAxNSAxMS41IDE1QzExLjIyMzkgMTUgMTEgMTQuNzc2MSAxMSAxNC41TDExIDEyLjAwMDFMMy41IDEyLjAwMDFDMy4yMjM4NiAxMi4wMDAxIDMgMTEuNzc2MiAzIDExLjUwMDFMMyA0LjAwMDA1TDAuNDk5OTg5IDRDMC4yMjM4NDcgNCAtNi4xMDU0MWUtMDYgMy43NzYxMyAtNS4wMjU3NmUtMDcgMy40OTk5OUM1LjEzMDA2ZS0wNiAzLjIyMzg1IDAuMjIzODY3IDMgMC41MDAwMSAzTDMgMy4wMDAwNUwzIDAuNTAwMDAxQzMgMC4yMjM4NTkgMy4yMjM4NiA4LjEyNzU1ZS0wNyAzLjUgOC4wMDY4NGUtMDdaTTQgNC4wMDAwNkw0IDExLjAwMDFMMTEgMTEuMDAwMUwxMSA0LjAwMDA2TDQgNC4wMDAwNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEJlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMi44NTM2IDIuODUzNTVDMTMuMDQ4OCAyLjY1ODI5IDEzLjA0ODggMi4zNDE3MSAxMi44NTM2IDIuMTQ2NDVDMTIuNjU4MyAxLjk1MTE4IDEyLjM0MTcgMS45NTExOCAxMi4xNDY0IDIuMTQ2NDVMNy41IDYuNzkyODlMMi44NTM1NSAyLjE0NjQ1QzIuNjU4MjkgMS45NTExOCAyLjM0MTcxIDEuOTUxMTggMi4xNDY0NSAyLjE0NjQ1QzEuOTUxMTggMi4zNDE3MSAxLjk1MTE4IDIuNjU4MjkgMi4xNDY0NSAyLjg1MzU1TDYuNzkyODkgNy41TDIuMTQ2NDUgMTIuMTQ2NEMxLjk1MTE4IDEyLjM0MTcgMS45NTExOCAxMi42NTgzIDIuMTQ2NDUgMTIuODUzNkMyLjM0MTcxIDEzLjA0ODggMi42NTgyOSAxMy4wNDg4IDIuODUzNTUgMTIuODUzNkw3LjUgOC4yMDcxMUwxMi4xNDY0IDEyLjg1MzZDMTIuMzQxNyAxMy4wNDg4IDEyLjY1ODMgMTMuMDQ4OCAxMi44NTM2IDEyLjg1MzZDMTMuMDQ4OCAxMi42NTgzIDEzLjA0ODggMTIuMzQxNyAxMi44NTM2IDEyLjE0NjRMOC4yMDcxMSA3LjVMMTIuODUzNiAyLjg1MzU1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTExLjc4MTYgNC4wMzE1N0MxMi4wMDYyIDMuODA3MDIgMTIuMDA2MiAzLjQ0Mjk1IDExLjc4MTYgMy4yMTg0QzExLjU1NzEgMi45OTM4NSAxMS4xOTMgMi45OTM4NSAxMC45Njg1IDMuMjE4NEw3LjUwMDA1IDYuNjg2ODJMNC4wMzE2NCAzLjIxODRDMy44MDcwOCAyLjk5Mzg1IDMuNDQzMDEgMi45OTM4NSAzLjIxODQ2IDMuMjE4NEMyLjk5MzkxIDMuNDQyOTUgMi45OTM5MSAzLjgwNzAyIDMuMjE4NDYgNC4wMzE1N0w2LjY4Njg4IDcuNDk5OTlMMy4yMTg0NiAxMC45Njg0QzIuOTkzOTEgMTEuMTkzIDIuOTkzOTEgMTEuNTU3IDMuMjE4NDYgMTEuNzgxNkMzLjQ0MzAxIDEyLjAwNjEgMy44MDcwOCAxMi4wMDYxIDQuMDMxNjQgMTEuNzgxNkw3LjUwMDA1IDguMzEzMTZMMTAuOTY4NSAxMS43ODE2QzExLjE5MyAxMi4wMDYxIDExLjU1NzEgMTIuMDA2MSAxMS43ODE2IDExLjc4MTZDMTIuMDA2MiAxMS41NTcgMTIuMDA2MiAxMS4xOTMgMTEuNzgxNiAxMC45Njg0TDguMzEzMjIgNy40OTk5OUwxMS43ODE2IDQuMDMxNTdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxEZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC44NzcwNzUgNy40OTk4OEMwLjg3NzA3NSAzLjg0MjE5IDMuODQyMjIgMC44NzcwNDUgNy40OTk5MSAwLjg3NzA0NUMxMS4xNTc2IDAuODc3MDQ1IDE0LjEyMjcgMy44NDIxOSAxNC4xMjI3IDcuNDk5ODhDMTQuMTIyNyAxMS4xNTc1IDExLjE1NzYgMTQuMTIyNyA3LjQ5OTkxIDE0LjEyMjdDMy44NDIyMiAxNC4xMjI3IDAuODc3MDc1IDExLjE1NzUgMC44NzcwNzUgNy40OTk4OFpNNy40OTk5MSAxLjgyNzA0QzQuMzY2ODkgMS44MjcwNCAxLjgyNzA4IDQuMzY2ODYgMS44MjcwOCA3LjQ5OTg4QzEuODI3MDggMTAuNjMyOSA0LjM2Njg5IDEzLjE3MjcgNy40OTk5MSAxMy4xNzI3QzEwLjYzMjkgMTMuMTcyNyAxMy4xNzI3IDEwLjYzMjkgMTMuMTcyNyA3LjQ5OTg4QzEzLjE3MjcgNC4zNjY4NiAxMC42MzI5IDEuODI3MDQgNy40OTk5MSAxLjgyNzA0Wk05Ljg1MzU4IDUuMTQ2NDRDMTAuMDQ4OCA1LjM0MTcgMTAuMDQ4OCA1LjY1ODI5IDkuODUzNTggNS44NTM1NUw4LjIwNzEzIDcuNDk5OTlMOS44NTM1OCA5LjE0NjQ0QzEwLjA0ODggOS4zNDE3IDEwLjA0ODggOS42NTgyOSA5Ljg1MzU4IDkuODUzNTVDOS42NTgzMiAxMC4wNDg4IDkuMzQxNzMgMTAuMDQ4OCA5LjE0NjQ3IDkuODUzNTVMNy41MDAwMiA4LjIwNzFMNS44NTM1OCA5Ljg1MzU1QzUuNjU4MzIgMTAuMDQ4OCA1LjM0MTczIDEwLjA0ODggNS4xNDY0NyA5Ljg1MzU1QzQuOTUxMjEgOS42NTgyOSA0Ljk1MTIxIDkuMzQxNyA1LjE0NjQ3IDkuMTQ2NDRMNi43OTI5MiA3LjQ5OTk5TDUuMTQ2NDcgNS44NTM1NUM0Ljk1MTIxIDUuNjU4MjkgNC45NTEyMSA1LjM0MTcgNS4xNDY0NyA1LjE0NjQ0QzUuMzQxNzMgNC45NTExOCA1LjY1ODMyIDQuOTUxMTggNS44NTM1OCA1LjE0NjQ0TDcuNTAwMDIgNi43OTI4OUw5LjE0NjQ3IDUuMTQ2NDRDOS4zNDE3MyA0Ljk1MTE4IDkuNjU4MzIgNC45NTExOCA5Ljg1MzU4IDUuMTQ2NDRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxaZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC44NzcwNzUgNy41MDIwN0MwLjg3NzA3NSAzLjg0MzE5IDMuODQzMTkgMC44NzcwNzUgNy41MDIwOCAwLjg3NzA3NUMxMS4xNjA5IDAuODc3MDc1IDE0LjEyNzEgMy44NDMxOSAxNC4xMjcxIDcuNTAyMDdDMTQuMTI3MSAxMS4xNjA5IDExLjE2MDkgMTQuMTI3MSA3LjUwMjA4IDE0LjEyNzFDMy44NDMxOSAxNC4xMjcxIDAuODc3MDc1IDExLjE2MDkgMC44NzcwNzUgNy41MDIwN1pNMS44NDg5OCA3LjAwMDAzQzIuMDg4NiA0LjI2NjM5IDQuMjY2MzkgMi4wODg2IDcuMDAwMDMgMS44NDg5OFY0LjUwMDAzQzcuMDAwMDMgNC43NzYxNyA3LjIyMzg4IDUuMDAwMDMgNy41MDAwMyA1LjAwMDAzQzcuNzc2MTcgNS4wMDAwMyA4LjAwMDAzIDQuNzc2MTcgOC4wMDAwMyA0LjUwMDAzVjEuODQ4NjJDMTAuNzM1NiAyLjA4NjQzIDEyLjkxNTQgNC4yNjUwMiAxMy4xNTUyIDcuMDAwMDNIMTAuNUMxMC4yMjM5IDcuMDAwMDMgMTAgNy4yMjM4OCAxMCA3LjUwMDAzQzEwIDcuNzc2MTcgMTAuMjIzOSA4LjAwMDAzIDEwLjUgOC4wMDAwM0gxMy4xNTU1QzEyLjkxNzYgMTAuNzM2OSAxMC43MzY5IDEyLjkxNzYgOC4wMDAwMyAxMy4xNTU1VjEwLjVDOC4wMDAwMyAxMC4yMjM5IDcuNzc2MTcgMTAgNy41MDAwMyAxMEM3LjIyMzg4IDEwIDcuMDAwMDMgMTAuMjIzOSA3LjAwMDAzIDEwLjVWMTMuMTU1MkM0LjI2NTAyIDEyLjkxNTQgMi4wODY0MyAxMC43MzU2IDEuODQ4NjIgOC4wMDAwM0g0LjUwMDAzQzQuNzc2MTcgOC4wMDAwMyA1LjAwMDAzIDcuNzc2MTcgNS4wMDAwMyA3LjUwMDAzQzUuMDAwMDMgNy4yMjM4OCA0Ljc3NjE3IDcuMDAwMDMgNC41MDAwMyA3LjAwMDAzSDEuODQ4OThaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSwkZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41IDBDNy43NzYxNCAwIDggMC4yMjM4NTggOCAwLjVWMS44MDY4N0MxMC42OTIyIDIuMDkzNSAxMi44MTY3IDQuMjgwMTIgMTMuMDA2OCA3SDE0LjVDMTQuNzc2MSA3IDE1IDcuMjIzODYgMTUgNy41QzE1IDcuNzc2MTQgMTQuNzc2MSA4IDE0LjUgOEgxMi45ODg4QzEyLjcwOTQgMTAuNjI0NCAxMC42MjQ0IDEyLjcwOTQgOCAxMi45ODg4VjE0LjVDOCAxNC43NzYxIDcuNzc2MTQgMTUgNy41IDE1QzcuMjIzODYgMTUgNyAxNC43NzYxIDcgMTQuNVYxMy4wMDY4QzQuMjgwMTIgMTIuODE2NyAyLjA5MzUgMTAuNjkyMiAxLjgwNjg3IDhIMC41QzAuMjIzODU4IDggMCA3Ljc3NjE0IDAgNy41QzAgNy4yMjM4NiAwLjIyMzg1OCA3IDAuNSA3SDEuNzg4ODZDMS45ODM3NiA0LjIxMTY2IDQuMjExNjYgMS45ODM3NiA3IDEuNzg4ODZWMC41QzcgMC4yMjM4NTggNy4yMjM4NiAwIDcuNSAwWk04IDEyLjAzMjJWOS41QzggOS4yMjM4NiA3Ljc3NjE0IDkgNy41IDlDNy4yMjM4NiA5IDcgOS4yMjM4NiA3IDkuNVYxMi4wNTRDNC44MDUxNyAxMS44Njg5IDMuMDQyMjIgMTAuMTY2OCAyLjc2MzQ0IDhINS41QzUuNzc2MTQgOCA2IDcuNzc2MTQgNiA3LjVDNiA3LjIyMzg2IDUuNzc2MTQgNyA1LjUgN0gyLjc0MTdDMi45MzI1MiA0LjczNjYyIDQuNzM2NjIgMi45MzI1MiA3IDIuNzQxN1Y1LjVDNyA1Ljc3NjE0IDcuMjIzODYgNiA3LjUgNkM3Ljc3NjE0IDYgOCA1Ljc3NjE0IDggNS41VjIuNzYzNDRDMTAuMTY2OCAzLjA0MjIyIDExLjg2ODkgNC44MDUxNyAxMi4wNTQgN0g5LjVDOS4yMjM4NiA3IDkgNy4yMjM4NiA5IDcuNUM5IDcuNzc2MTQgOS4yMjM4NiA4IDkuNSA4SDEyLjAzMjJDMTEuNzYyMSAxMC4wOTkxIDEwLjA5OTEgMTEuNzYyMSA4IDEyLjAzMjJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxOZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC42MDkxMyAwLjA2MzQyODdDNC4zOTA4MiAwLjAwODg1MDUgNC4xNjU3NSAwLjEyMzkzIDQuMDgyMTggMC4zMzI4NjdMMy4xNTM4IDIuNjUzOEwwLjgzMjg2NiAzLjU4MjE4QzAuNzAyODg0IDMuNjM0MTcgMC42MDQ1MDQgMy43NDM3IDAuNTY2NzA1IDMuODc4NDlDMC41Mjg5MDYgNC4wMTMyOSAwLjU1NTk5NCA0LjE1OCAwLjYzOTk5MiA0LjI2OTk5TDIuMDExNDggNi4wOTg2NEwxLjA2MzQzIDkuODkwODVDMS4wMDk0NCAxMC4xMDY4IDEuMTIxNDUgMTAuMzI5OCAxLjMyNjkxIDEwLjQxNTRMNC4yMDExNSAxMS42MTNMNS42MjU1NyAxMy43NDk2QzUuNzM0MTIgMTMuOTEyNCA1LjkzNTQ1IDEzLjk4NjQgNi4xMjM2MiAxMy45MzI3TDkuNjIzNjIgMTIuOTMyN0M5LjYyOTg4IDEyLjkzMDkgOS42MzYxMSAxMi45MjkgOS42NDIyOSAxMi45MjY5TDEyLjY0MjMgMTEuOTI2OUMxMi43OTIzIDExLjg3NjkgMTIuOTA1IDExLjc1MTkgMTIuOTM5MyAxMS41OTc2TDEzLjkzOTMgNy4wOTc2MUMxMy45Nzc2IDYuOTI1MDYgMTMuOTExNCA2Ljc0NjA1IDEzLjc3IDYuNjM5OTlMMTEuOTUgNS4yNzQ5OVYyLjk5OTk5QzExLjk1IDIuODI5NTUgMTEuODUzNyAyLjY3MzczIDExLjcwMTIgMi41OTc1TDguNzAxMjQgMS4wOTc1QzguNjcxODcgMS4wODI4MiA4LjY0MDk4IDEuMDcxMzkgOC42MDkxMyAxLjA2MzQzTDQuNjA5MTMgMC4wNjM0Mjg3Wk0xMS40MzIzIDYuMDExNzNMMTIuNzc0OCA3LjAxODU4TDEwLjIxMTkgOS4xNTQyOUMxMC4xNDc2IDkuMjA3ODYgMTAuMDk5NSA5LjI3ODMgMTAuMDczMSA5LjM1NzY5TDkuMjUzODIgMTEuODE1NUw3LjczODQ5IDEwLjg2ODRDNy41Mjc3NCAxMC43MzY3IDcuMjUwMTEgMTAuODAwNyA3LjExODM5IDExLjAxMTVDNi45ODY2NyAxMS4yMjIyIDcuMDUwNzQgMTEuNDk5OSA3LjI2MTQ5IDExLjYzMTZMOC40MDM0MSAxMi4zNDUzTDYuMTkyMjEgMTIuOTc3MUw0Ljg3NDQxIDExLjAwMDRDNC44MjUxMyAxMC45MjY1IDQuNzU1MDggMTAuODY4OCA0LjY3MzA3IDEwLjgzNDZMMi4wMzA0NiA5LjczMzUyTDIuODUxMzQgNi40NDk5OUg0Ljk5OTk5QzUuMjQ4NTIgNi40NDk5OSA1LjQ0OTk5IDYuMjQ4NTIgNS40NDk5OSA1Ljk5OTk5QzUuNDQ5OTkgNS43NTE0NiA1LjI0ODUyIDUuNTQ5OTkgNC45OTk5OSA1LjU0OTk5SDIuNzI0OTlMMS43MTIzIDQuMTk5NzRMMy41MTQwNyAzLjQ3OTAzTDYuMzU3NjkgNC40MjY5QzYuNTM2NTUgNC40ODY1MiA2LjczMzYxIDQuNDI4MzIgNi44NTEzOCA0LjI4MTExTDguNjI0MTMgMi4wNjUxOEwxMS4wNSAzLjI3ODExVjUuMTk1MzNMOC44MzI4NyA2LjA4MjE4QzguNzA5OTYgNi4xMzEzNCA4LjYxNDk0IDYuMjMyMTIgOC41NzMwOCA2LjM1NzY5TDguMDczMDggNy44NTc2OUM3Ljk5NDQ5IDguMDkzNDYgOC4xMjE5MSA4LjM0ODMxIDguMzU3NjkgOC40MjY5QzguNTkzNDYgOC41MDU0OSA4Ljg0ODMxIDguMzc4MDcgOC45MjY5IDguMTQyMjlMOS4zNjA5IDYuODQwMjlMMTEuNDMyMyA2LjAxMTczWk03LjcxMDUyIDEuNzY2NDhMNi4zNDQ2MiAzLjQ3Mzg2TDQuMDk1MDUgMi43MjRMNC43NzE5MiAxLjAzMTgzTDcuNzEwNTIgMS43NjY0OFpNMTAuMjExNSAxMS43ODg1TDEyLjExNiAxMS4xNTM3TDEyLjc3NDUgOC4xOTAzNEwxMC44ODY0IDkuNzYzNzRMMTAuMjExNSAxMS43ODg1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sRmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuMjg4NTYgMC43OTY5MDhDNy40MjI1OCAwLjczNDM2NCA3LjU3NzQyIDAuNzM0MzY0IDcuNzExNDQgMC43OTY5MDhMMTMuNzExNCAzLjU5NjkxQzEzLjg4NzUgMy42NzkwNiAxNCAzLjg1NTc0IDE0IDQuMDVWMTAuOTVDMTQgMTEuMTQ0MyAxMy44ODc1IDExLjMyMDkgMTMuNzExNCAxMS40MDMxTDcuNzExNDQgMTQuMjAzMUM3LjU3NzQyIDE0LjI2NTYgNy40MjI1OCAxNC4yNjU2IDcuMjg4NTYgMTQuMjAzMUwxLjI4ODU2IDExLjQwMzFDMS4xMTI1MiAxMS4zMjA5IDEgMTEuMTQ0MyAxIDEwLjk1VjQuMDVDMSAzLjg1NTc0IDEuMTEyNTIgMy42NzkwNiAxLjI4ODU2IDMuNTk2OTFMNy4yODg1NiAwLjc5NjkwOFpNMiA0LjgwNTc4TDcgNi45MzA3OFYxMi45NjQ5TDIgMTAuNjMxNlY0LjgwNTc4Wk04IDEyLjk2NDlMMTMgMTAuNjMxNlY0LjgwNTc4TDggNi45MzA3OFYxMi45NjQ5Wk03LjUgNi4wNTY3MkwxMi4yNzE5IDQuMDI4NjZMNy41IDEuODAxNzZMMi43MjgwOSA0LjAyODY2TDcuNSA2LjA1NjcyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuMjkyMjcgMC4wNDg5ODRDMy40NzAzMyAtMC4wMzIzMzggMy42Nzk0NiAtMC4wMDIyODIxNCAzLjgyNzQgMC4xMjU4OTFMMTIuODU4NyA3Ljk1MDI2QzEzLjAxMzQgOC4wODQzMiAxMy4wNzA4IDguMjk5MTYgMTMuMDAzNSA4LjQ5MjUxQzEyLjkzNjIgOC42ODU4NiAxMi43NTc4IDguODE4NjYgMTIuNTUzMyA4LjgyNzY4TDkuMjE4ODcgOC45NzQ3NEwxMS4xNTA0IDEzLjIxODdDMTEuMjY0OCAxMy40NyAxMS4xNTM4IDEzLjc2NjQgMTAuOTAyNiAxMy44ODA4TDguNzUwMjQgMTQuODYxM0M4LjQ5OSAxNC45NzU4IDguMjAyNTUgMTQuODY0OSA4LjA4ODAyIDE0LjYxMzdMNi4xNTMzOSAxMC4zNzAzTDMuODYyNzkgMTIuNzg1NUMzLjcyMTk2IDEyLjkzNCAzLjUwNDg3IDEyLjk4MTcgMy4zMTQ3OSAxMi45MDU5QzMuMTI0NyAxMi44MzAxIDMgMTIuNjQ2MSAzIDEyLjQ0MTRWMC41MDM3OTJDMyAwLjMwODA0OCAzLjExNDIyIDAuMTMwMzA2IDMuMjkyMjcgMC4wNDg5ODRaTTQgMS41OTg1MlYxMS4xODc3TDUuOTM3OTkgOS4xNDQyNUM2LjA1MjM4IDkuMDIzNjMgNi4yMTkyNCA4Ljk2Nzc2IDYuMzgzMTkgOC45OTUxNkM2LjU0NzE1IDkuMDIyNTYgNi42ODY3NyA5LjEyOTY1IDYuNzU1NzMgOS4yODA5TDguNzkwNTYgMTMuNzQ0MUwxMC4wMzMyIDEzLjE3OEw4LjAwMTk1IDguNzE0OTdDNy45MzMxMyA4LjU2Mzc2IDcuOTQzOTEgOC4zODgyNCA4LjAzMDcyIDguMjQ2NTlDOC4xMTc1MyA4LjEwNDk0IDguMjY5MDMgOC4wMTU2NiA4LjQzNSA4LjAwODM0TDExLjI1NDkgNy44ODM5N0w0IDEuNTk4NTJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxXZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC41IDFDNC4yMjM4NiAxIDQgMS4yMjM4NiA0IDEuNUM0IDEuNzc2MTQgNC4yMjM4NiAyIDQuNSAyQzUuNDIyMTUgMiA2LjAzOTkgMi4yMzA1NCA2LjQyMDc1IDIuNTYzNzlDNi43OTI4NiAyLjg4OTM5IDcgMy4zNjYyNiA3IDRWN0g1Ljc1QzUuNDczODYgNyA1LjI1IDcuMjIzODYgNS4yNSA3LjVDNS4yNSA3Ljc3NjE0IDUuNDczODYgOCA1Ljc1IDhIN1YxMUM3IDExLjYzMzcgNi43OTI4NiAxMi4xMTA2IDYuNDIwNzUgMTIuNDM2MkM2LjAzOTkgMTIuNzY5NSA1LjQyMjE1IDEzIDQuNSAxM0M0LjIyMzg2IDEzIDQgMTMuMjIzOSA0IDEzLjVDNCAxMy43NzYxIDQuMjIzODYgMTQgNC41IDE0QzUuNTc3ODUgMTQgNi40NjAxIDEzLjczMDUgNy4wNzkyNSAxMy4xODg4QzcuMjQxNjggMTMuMDQ2NyA3LjM4MTY5IDEyLjg4OTYgNy41IDEyLjcxOThDNy42MTgzMiAxMi44ODk2IDcuNzU4MzIgMTMuMDQ2NyA3LjkyMDc1IDEzLjE4ODhDOC41Mzk5IDEzLjczMDUgOS40MjIxNSAxNCAxMC41IDE0QzEwLjc3NjEgMTQgMTEgMTMuNzc2MSAxMSAxMy41QzExIDEzLjIyMzkgMTAuNzc2MSAxMyAxMC41IDEzQzkuNTc3ODUgMTMgOC45NjAxIDEyLjc2OTUgOC41NzkyNSAxMi40MzYyQzguMjA3MTQgMTIuMTEwNiA4IDExLjYzMzcgOCAxMVY4SDkuMjVDOS41MjYxNCA4IDkuNzUgNy43NzYxNCA5Ljc1IDcuNUM5Ljc1IDcuMjIzODYgOS41MjYxNCA3IDkuMjUgN0g4VjRDOCAzLjM2NjI2IDguMjA3MTQgMi44ODkzOSA4LjU3OTI1IDIuNTYzNzlDOC45NjAxIDIuMjMwNTQgOS41Nzc4NSAyIDEwLjUgMkMxMC43NzYxIDIgMTEgMS43NzYxNCAxMSAxLjVDMTEgMS4yMjM4NiAxMC43NzYxIDEgMTAuNSAxQzkuNDIyMTUgMSA4LjUzOTkgMS4yNjk0NiA3LjkyMDc1IDEuODExMjFDNy43NTgzMiAxLjk1MzMzIDcuNjE4MzIgMi4xMTA0MyA3LjUgMi4yODAyM0M3LjM4MTY4IDIuMTEwNDMgNy4yNDE2OCAxLjk1MzMzIDcuMDc5MjUgMS44MTEyMUM2LjQ2MDEgMS4yNjk0NiA1LjU3Nzg1IDEgNC41IDFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx6ZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNSA3LjVDNSA3LjIyMzg2IDUuMjIzODYgNyA1LjUgN0g5LjVDOS43NzYxNCA3IDEwIDcuMjIzODYgMTAgNy41QzEwIDcuNzc2MTQgOS43NzYxNCA4IDkuNSA4SDUuNUM1LjIyMzg2IDggNSA3Ljc3NjE0IDUgNy41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sR2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuOCAxTDIuNzQ5NjcgMC45OTk5N0MyLjUyMTIyIDAuOTk5NzUyIDIuMzI0MjkgMC45OTk1NjQgMi4xNDk4MyAxLjA0MTQ1QzEuNjAxMzYgMS4xNzMxMiAxLjE3MzEyIDEuNjAxMzYgMS4wNDE0NSAyLjE0OTgzQzAuOTk5NTY0IDIuMzI0MjkgMC45OTk3NTIgMi41MjEyMiAwLjk5OTk3IDIuNzQ5NjdMMSAyLjhWNS4yTDAuOTk5OTcgNS4yNTAzM0MwLjk5OTc1MiA1LjQ3ODc4IDAuOTk5NTY0IDUuNjc1NzIgMS4wNDE0NSA1Ljg1MDE3QzEuMTczMTIgNi4zOTg2NCAxLjYwMTM2IDYuODI2ODggMi4xNDk4MyA2Ljk1ODU2QzIuMzI0MjkgNy4wMDA0NCAyLjUyMTIyIDcuMDAwMjUgMi43NDk2NyA3LjAwMDAzTDIuOCA3SDUuMkw1LjI1MDMzIDcuMDAwMDNDNS40Nzg3OCA3LjAwMDI1IDUuNjc1NzIgNy4wMDA0NCA1Ljg1MDE3IDYuOTU4NTZDNi4zOTg2NCA2LjgyNjg4IDYuODI2ODggNi4zOTg2NCA2Ljk1ODU2IDUuODUwMTdDNy4wMDA0NCA1LjY3NTcyIDcuMDAwMjUgNS40Nzg3OCA3LjAwMDAzIDUuMjUwMzNMNyA1LjJWMi44TDcuMDAwMDMgMi43NDk2N0M3LjAwMDI1IDIuNTIxMjIgNy4wMDA0NCAyLjMyNDI5IDYuOTU4NTYgMi4xNDk4M0M2LjgyNjg4IDEuNjAxMzYgNi4zOTg2NCAxLjE3MzEyIDUuODUwMTcgMS4wNDE0NUM1LjY3NTcyIDAuOTk5NTY0IDUuNDc4NzggMC45OTk3NTIgNS4yNTAzMyAwLjk5OTk3TDUuMiAxSDIuOFpNMi4zODMyOCAyLjAxMzgyQzIuNDI2MzIgMi4wMDM0OCAyLjQ5MjIyIDIgMi44IDJINS4yQzUuNTA3NzkgMiA1LjU3MzY5IDIuMDAzNDggNS42MTY3MiAyLjAxMzgyQzUuNzk5NTUgMi4wNTc3MSA1Ljk0MjI5IDIuMjAwNDUgNS45ODYxOSAyLjM4MzI4QzUuOTk2NTIgMi40MjYzMiA2IDIuNDkyMjIgNiAyLjhWNS4yQzYgNS41MDc3OSA1Ljk5NjUyIDUuNTczNjkgNS45ODYxOSA1LjYxNjcyQzUuOTQyMjkgNS43OTk1NSA1Ljc5OTU1IDUuOTQyMjkgNS42MTY3MiA1Ljk4NjE5QzUuNTczNjkgNS45OTY1MiA1LjUwNzc5IDYgNS4yIDZIMi44QzIuNDkyMjIgNiAyLjQyNjMyIDUuOTk2NTIgMi4zODMyOCA1Ljk4NjE5QzIuMjAwNDUgNS45NDIyOSAyLjA1NzcxIDUuNzk5NTUgMi4wMTM4MiA1LjYxNjcyQzIuMDAzNDggNS41NzM2OSAyIDUuNTA3NzkgMiA1LjJWMi44QzIgMi40OTIyMiAyLjAwMzQ4IDIuNDI2MzIgMi4wMTM4MiAyLjM4MzI4QzIuMDU3NzEgMi4yMDA0NSAyLjIwMDQ1IDIuMDU3NzEgMi4zODMyOCAyLjAxMzgyWk05LjggMUw5Ljc0OTY3IDAuOTk5OTdDOS41MjEyMiAwLjk5OTc1MiA5LjMyNDI5IDAuOTk5NTY0IDkuMTQ5ODMgMS4wNDE0NUM4LjYwMTM2IDEuMTczMTIgOC4xNzMxMiAxLjYwMTM2IDguMDQxNDUgMi4xNDk4M0M3Ljk5OTU2IDIuMzI0MjkgNy45OTk3NSAyLjUyMTIyIDcuOTk5OTcgMi43NDk2N0w4IDIuOFY1LjJMNy45OTk5NyA1LjI1MDMzQzcuOTk5NzUgNS40Nzg3OCA3Ljk5OTU2IDUuNjc1NzIgOC4wNDE0NSA1Ljg1MDE3QzguMTczMTIgNi4zOTg2NCA4LjYwMTM2IDYuODI2ODggOS4xNDk4MyA2Ljk1ODU2QzkuMzI0MjkgNy4wMDA0NCA5LjUyMTIyIDcuMDAwMjUgOS43NDk2NyA3LjAwMDAzTDkuOCA3SDEyLjJMMTIuMjUwMyA3LjAwMDAzQzEyLjQ3ODggNy4wMDAyNSAxMi42NzU3IDcuMDAwNDQgMTIuODUwMiA2Ljk1ODU2QzEzLjM5ODYgNi44MjY4OCAxMy44MjY5IDYuMzk4NjQgMTMuOTU4NiA1Ljg1MDE3QzE0LjAwMDQgNS42NzU3MiAxNC4wMDAzIDUuNDc4NzggMTQgNS4yNTAzM0wxNCA1LjJWMi44TDE0IDIuNzQ5NjdDMTQuMDAwMyAyLjUyMTIyIDE0LjAwMDQgMi4zMjQyOSAxMy45NTg2IDIuMTQ5ODNDMTMuODI2OSAxLjYwMTM2IDEzLjM5ODYgMS4xNzMxMiAxMi44NTAyIDEuMDQxNDVDMTIuNjc1NyAwLjk5OTU2NCAxMi40Nzg4IDAuOTk5NzUyIDEyLjI1MDMgMC45OTk5N0wxMi4yIDFIOS44Wk05LjM4MzI4IDIuMDEzODJDOS40MjYzMiAyLjAwMzQ4IDkuNDkyMjIgMiA5LjggMkgxMi4yQzEyLjUwNzggMiAxMi41NzM3IDIuMDAzNDggMTIuNjE2NyAyLjAxMzgyQzEyLjc5OTUgMi4wNTc3MSAxMi45NDIzIDIuMjAwNDUgMTIuOTg2MiAyLjM4MzI4QzEyLjk5NjUgMi40MjYzMiAxMyAyLjQ5MjIyIDEzIDIuOFY1LjJDMTMgNS41MDc3OSAxMi45OTY1IDUuNTczNjkgMTIuOTg2MiA1LjYxNjcyQzEyLjk0MjMgNS43OTk1NSAxMi43OTk1IDUuOTQyMjkgMTIuNjE2NyA1Ljk4NjE5QzEyLjU3MzcgNS45OTY1MiAxMi41MDc4IDYgMTIuMiA2SDkuOEM5LjQ5MjIyIDYgOS40MjYzMiA1Ljk5NjUyIDkuMzgzMjggNS45ODYxOUM5LjIwMDQ1IDUuOTQyMjkgOS4wNTc3MSA1Ljc5OTU1IDkuMDEzODIgNS42MTY3MkM5LjAwMzQ4IDUuNTczNjkgOSA1LjUwNzc5IDkgNS4yVjIuOEM5IDIuNDkyMjIgOS4wMDM0OCAyLjQyNjMyIDkuMDEzODIgMi4zODMyOEM5LjA1NzcxIDIuMjAwNDUgOS4yMDA0NSAyLjA1NzcxIDkuMzgzMjggMi4wMTM4MlpNMi43NDk2NyA3Ljk5OTk3TDIuOCA4SDUuMkw1LjI1MDMzIDcuOTk5OTdDNS40Nzg3OCA3Ljk5OTc1IDUuNjc1NzIgNy45OTk1NiA1Ljg1MDE3IDguMDQxNDVDNi4zOTg2NCA4LjE3MzEyIDYuODI2ODggOC42MDEzNiA2Ljk1ODU2IDkuMTQ5ODNDNy4wMDA0NCA5LjMyNDI5IDcuMDAwMjUgOS41MjEyMiA3LjAwMDAzIDkuNzQ5NjdMNyA5LjhWMTIuMkw3LjAwMDAzIDEyLjI1MDNDNy4wMDAyNSAxMi40Nzg4IDcuMDAwNDQgMTIuNjc1NyA2Ljk1ODU2IDEyLjg1MDJDNi44MjY4OCAxMy4zOTg2IDYuMzk4NjQgMTMuODI2OSA1Ljg1MDE3IDEzLjk1ODZDNS42NzU3MiAxNC4wMDA0IDUuNDc4NzggMTQuMDAwMyA1LjI1MDMzIDE0TDUuMiAxNEgyLjhMMi43NDk2NyAxNEMyLjUyMTIyIDE0LjAwMDMgMi4zMjQyOSAxNC4wMDA0IDIuMTQ5ODMgMTMuOTU4NkMxLjYwMTM2IDEzLjgyNjkgMS4xNzMxMiAxMy4zOTg2IDEuMDQxNDUgMTIuODUwMkMwLjk5OTU2NCAxMi42NzU3IDAuOTk5NzUyIDEyLjQ3ODggMC45OTk5NyAxMi4yNTAzTDEgMTIuMlY5LjhMMC45OTk5NyA5Ljc0OTY3QzAuOTk5NzUyIDkuNTIxMjIgMC45OTk1NjQgOS4zMjQyOSAxLjA0MTQ1IDkuMTQ5ODNDMS4xNzMxMiA4LjYwMTM2IDEuNjAxMzYgOC4xNzMxMiAyLjE0OTgzIDguMDQxNDVDMi4zMjQyOSA3Ljk5OTU2IDIuNTIxMjIgNy45OTk3NSAyLjc0OTY3IDcuOTk5OTdaTTIuOCA5QzIuNDkyMjIgOSAyLjQyNjMyIDkuMDAzNDggMi4zODMyOCA5LjAxMzgyQzIuMjAwNDUgOS4wNTc3MSAyLjA1NzcxIDkuMjAwNDUgMi4wMTM4MiA5LjM4MzI4QzIuMDAzNDggOS40MjYzMiAyIDkuNDkyMjIgMiA5LjhWMTIuMkMyIDEyLjUwNzggMi4wMDM0OCAxMi41NzM3IDIuMDEzODIgMTIuNjE2N0MyLjA1NzcxIDEyLjc5OTUgMi4yMDA0NSAxMi45NDIzIDIuMzgzMjggMTIuOTg2MkMyLjQyNjMyIDEyLjk5NjUgMi40OTIyMiAxMyAyLjggMTNINS4yQzUuNTA3NzkgMTMgNS41NzM2OSAxMi45OTY1IDUuNjE2NzIgMTIuOTg2MkM1Ljc5OTU1IDEyLjk0MjMgNS45NDIyOSAxMi43OTk1IDUuOTg2MTkgMTIuNjE2N0M1Ljk5NjUyIDEyLjU3MzcgNiAxMi41MDc4IDYgMTIuMlY5LjhDNiA5LjQ5MjIyIDUuOTk2NTIgOS40MjYzMiA1Ljk4NjE5IDkuMzgzMjhDNS45NDIyOSA5LjIwMDQ1IDUuNzk5NTUgOS4wNTc3MSA1LjYxNjcyIDkuMDEzODJDNS41NzM2OSA5LjAwMzQ4IDUuNTA3NzkgOSA1LjIgOUgyLjhaTTkuOCA4TDkuNzQ5NjcgNy45OTk5N0M5LjUyMTIyIDcuOTk5NzUgOS4zMjQyOSA3Ljk5OTU2IDkuMTQ5ODMgOC4wNDE0NUM4LjYwMTM2IDguMTczMTIgOC4xNzMxMiA4LjYwMTM2IDguMDQxNDUgOS4xNDk4M0M3Ljk5OTU2IDkuMzI0MjkgNy45OTk3NSA5LjUyMTIyIDcuOTk5OTcgOS43NDk2N0w4IDkuOFYxMi4yTDcuOTk5OTcgMTIuMjUwM0M3Ljk5OTc1IDEyLjQ3ODggNy45OTk1NiAxMi42NzU3IDguMDQxNDUgMTIuODUwMkM4LjE3MzEyIDEzLjM5ODYgOC42MDEzNiAxMy44MjY5IDkuMTQ5ODMgMTMuOTU4NkM5LjMyNDI5IDE0LjAwMDQgOS41MjEyMiAxNC4wMDAzIDkuNzQ5NjcgMTRMOS44IDE0SDEyLjJMMTIuMjUwMyAxNEMxMi40Nzg4IDE0LjAwMDMgMTIuNjc1NyAxNC4wMDA0IDEyLjg1MDIgMTMuOTU4NkMxMy4zOTg2IDEzLjgyNjkgMTMuODI2OSAxMy4zOTg2IDEzLjk1ODYgMTIuODUwMkMxNC4wMDA0IDEyLjY3NTcgMTQuMDAwMyAxMi40Nzg4IDE0IDEyLjI1MDNMMTQgMTIuMlY5LjhMMTQgOS43NDk2N0MxNC4wMDAzIDkuNTIxMjIgMTQuMDAwNCA5LjMyNDI5IDEzLjk1ODYgOS4xNDk4M0MxMy44MjY5IDguNjAxMzYgMTMuMzk4NiA4LjE3MzEyIDEyLjg1MDIgOC4wNDE0NUMxMi42NzU3IDcuOTk5NTYgMTIuNDc4OCA3Ljk5OTc1IDEyLjI1MDMgNy45OTk5N0wxMi4yIDhIOS44Wk05LjM4MzI4IDkuMDEzODJDOS40MjYzMiA5LjAwMzQ4IDkuNDkyMjIgOSA5LjggOUgxMi4yQzEyLjUwNzggOSAxMi41NzM3IDkuMDAzNDggMTIuNjE2NyA5LjAxMzgyQzEyLjc5OTUgOS4wNTc3MSAxMi45NDIzIDkuMjAwNDUgMTIuOTg2MiA5LjM4MzI4QzEyLjk5NjUgOS40MjYzMiAxMyA5LjQ5MjIyIDEzIDkuOFYxMi4yQzEzIDEyLjUwNzggMTIuOTk2NSAxMi41NzM3IDEyLjk4NjIgMTIuNjE2N0MxMi45NDIzIDEyLjc5OTUgMTIuNzk5NSAxMi45NDIzIDEyLjYxNjcgMTIuOTg2MkMxMi41NzM3IDEyLjk5NjUgMTIuNTA3OCAxMyAxMi4yIDEzSDkuOEM5LjQ5MjIyIDEzIDkuNDI2MzIgMTIuOTk2NSA5LjM4MzI4IDEyLjk4NjJDOS4yMDA0NSAxMi45NDIzIDkuMDU3NzEgMTIuNzk5NSA5LjAxMzgyIDEyLjYxNjdDOS4wMDM0OCAxMi41NzM3IDkgMTIuNTA3OCA5IDEyLjJWOS44QzkgOS40OTIyMiA5LjAwMzQ4IDkuNDI2MzIgOS4wMTM4MiA5LjM4MzI4QzkuMDU3NzEgOS4yMDA0NSA5LjIwMDQ1IDkuMDU3NzEgOS4zODMyOCA5LjAxMzgyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuMDAwMTQgMi43Mzg5NUMzLjAwMDE0IDIuOTQ2OTggMi43NjA4NyAzLjA2NDAxIDIuNTk2NjYgMi45MzYyOEwxLjAwMzg2IDEuNjk3NDRDMC44NzUxNzcgMS41OTczNSAwLjg3NTE3NyAxLjQwMjg2IDEuMDAzODYgMS4zMDI3N0wyLjU5NjY2IDAuMDYzOTI4QzIuNzYwODcgLTAuMDYzNzk0NCAzLjAwMDE0IDAuMDUzMjI5MyAzLjAwMDE0IDAuMjYxMjY2VjEuMDAwMTJIOS4wMDAwOVYwLjI2MTI5NkM5LjAwMDA5IDAuMDUzMjU5MSA5LjIzOTM2IC0wLjA2Mzc2NDYgOS40MDM1OCAwLjA2Mzk1NzhMMTAuOTk2NCAxLjMwMjhDMTEuMTI1MSAxLjQwMjg5IDExLjEyNTEgMS41OTczOCAxMC45OTY0IDEuNjk3NDdMOS40MDM1OCAyLjkzNjMxQzkuMjM5MzYgMy4wNjQwNCA5LjAwMDA5IDIuOTQ3MDEgOS4wMDAwOSAyLjczODk4VjIuMDAwMTJIMy4wMDAxNFYyLjczODk1Wk05LjUwMDAyIDQuOTk5OThIMi41MDAwMkMyLjIyMzg4IDQuOTk5OTggMi4wMDAwMiA1LjIyMzg0IDIuMDAwMDIgNS40OTk5OFYxMi41QzIuMDAwMDIgMTIuNzc2MSAyLjIyMzg4IDEzIDIuNTAwMDIgMTNIOS41MDAwMkM5Ljc3NjE2IDEzIDEwIDEyLjc3NjEgMTAgMTIuNVY1LjQ5OTk4QzEwIDUuMjIzODQgOS43NzYxNiA0Ljk5OTk4IDkuNTAwMDIgNC45OTk5OFpNMi41MDAwMiAzLjk5OTk4QzEuNjcxNTkgMy45OTk5OCAxLjAwMDAyIDQuNjcxNTYgMS4wMDAwMiA1LjQ5OTk4VjEyLjVDMS4wMDAwMiAxMy4zMjg0IDEuNjcxNTkgMTQgMi41MDAwMiAxNEg5LjUwMDAyQzEwLjMyODQgMTQgMTEgMTMuMzI4NCAxMSAxMi41VjUuNDk5OThDMTEgNC42NzE1NiAxMC4zMjg0IDMuOTk5OTggOS41MDAwMiAzLjk5OTk4SDIuNTAwMDJaTTE0LjczODkgNi4wMDAwMUgxNFYxMkgxNC43Mzg5QzE0Ljk0NjkgMTIgMTUuMDY0IDEyLjIzOTMgMTQuOTM2MiAxMi40MDM1TDEzLjY5NzQgMTMuOTk2M0MxMy41OTczIDE0LjEyNSAxMy40MDI4IDE0LjEyNSAxMy4zMDI3IDEzLjk5NjNMMTIuMDYzOSAxMi40MDM1QzExLjkzNjIgMTIuMjM5MyAxMi4wNTMyIDEyIDEyLjI2MTIgMTJIMTNWNi4wMDAwMUgxMi4yNjEyQzEyLjA1MzIgNi4wMDAwMSAxMS45MzYxIDUuNzYwNzQgMTIuMDYzOSA1LjU5NjUzTDEzLjMwMjcgNC4wMDM3M0MxMy40MDI4IDMuODc1MDUgMTMuNTk3MyAzLjg3NTA1IDEzLjY5NzQgNC4wMDM3NEwxNC45MzYyIDUuNTk2NTNDMTUuMDYzOSA1Ljc2MDc0IDE0Ljk0NjkgNi4wMDAwMSAxNC43Mzg5IDYuMDAwMDFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxZZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTk5MSAwLjg3NzA3NUMzLjg0MjIyIDAuODc3MDc1IDAuODc3MDc1IDMuODQyMjIgMC44NzcwNzUgNy40OTk5MUMwLjg3NzA3NSAxMS4xNTc2IDMuODQyMjIgMTQuMTIyNyA3LjQ5OTkxIDE0LjEyMjdDMTEuMTU3NiAxNC4xMjI3IDE0LjEyMjcgMTEuMTU3NiAxNC4xMjI3IDcuNDk5OTFDMTQuMTIyNyAzLjg0MjIyIDExLjE1NzYgMC44NzcwNzUgNy40OTk5MSAwLjg3NzA3NVpNMS44MjcwOCA3LjQ5OTkxQzEuODI3MDggNC4zNjY4OSA0LjM2Njg5IDEuODI3MDcgNy40OTk5MSAxLjgyNzA3QzEwLjYzMjkgMS44MjcwNyAxMy4xNzI3IDQuMzY2ODkgMTMuMTcyNyA3LjQ5OTkxQzEzLjE3MjcgMTAuNjMyOSAxMC42MzI5IDEzLjE3MjcgNy40OTk5MSAxMy4xNzI3QzQuMzY2ODkgMTMuMTcyNyAxLjgyNzA4IDEwLjYzMjkgMS44MjcwOCA3LjQ5OTkxWk04LjM3Mjg3IDcuNTAwMDZDOC4zNzI4NyA3Ljk4MTk2IDcuOTgyMjEgOC4zNzI2MyA3LjUwMDMgOC4zNzI2M0M3LjAxODM5IDguMzcyNjMgNi42Mjc3MyA3Ljk4MTk2IDYuNjI3NzMgNy41MDAwNkM2LjYyNzczIDcuMDE4MTUgNy4wMTgzOSA2LjYyNzQ4IDcuNTAwMyA2LjYyNzQ4QzcuOTgyMjEgNi42Mjc0OCA4LjM3Mjg3IDcuMDE4MTUgOC4zNzI4NyA3LjUwMDA2Wk05LjMyMjg3IDcuNTAwMDZDOS4zMjI4NyA4LjUwNjY0IDguNTA2ODggOS4zMjI2MyA3LjUwMDMgOS4zMjI2M0M2LjQ5MzcyIDkuMzIyNjMgNS42Nzc3MyA4LjUwNjY0IDUuNjc3NzMgNy41MDAwNkM1LjY3NzczIDYuNDkzNDggNi40OTM3MiA1LjY3NzQ4IDcuNTAwMyA1LjY3NzQ4QzguNTA2ODggNS42Nzc0OCA5LjMyMjg3IDYuNDkzNDggOS4zMjI4NyA3LjUwMDA2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sS2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIgNy41QzIgNy4yMjM4NiAyLjIyMzg2IDcgMi41IDdIMTIuNUMxMi43NzYxIDcgMTMgNy4yMjM4NiAxMyA3LjVDMTMgNy43NzYxNCAxMi43NzYxIDggMTIuNSA4SDIuNUMyLjIyMzg2IDggMiA3Ljc3NjE0IDIgNy41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sWGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNSAyQzcuNzc2MTQgMiA4IDIuMjIzODYgOCAyLjVMOCAxMi41QzggMTIuNzc2MSA3Ljc3NjE0IDEzIDcuNSAxM0M3LjIyMzg2IDEzIDcgMTIuNzc2MSA3IDEyLjVMNyAyLjVDNyAyLjIyMzg2IDcuMjIzODYgMiA3LjUgMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEplPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUgOS4xMjVDOC4zOTc0NiA5LjEyNSA5LjEyNSA4LjM5NzQ2IDkuMTI1IDcuNUM5LjEyNSA2LjYwMjU0IDguMzk3NDYgNS44NzUgNy41IDUuODc1QzYuNjAyNTQgNS44NzUgNS44NzUgNi42MDI1NCA1Ljg3NSA3LjVDNS44NzUgOC4zOTc0NiA2LjYwMjU0IDkuMTI1IDcuNSA5LjEyNVpNNy41IDEwLjEyNUM4Ljk0OTc1IDEwLjEyNSAxMC4xMjUgOC45NDk3NSAxMC4xMjUgNy41QzEwLjEyNSA2LjA1MDI1IDguOTQ5NzUgNC44NzUgNy41IDQuODc1QzYuMDUwMjUgNC44NzUgNC44NzUgNi4wNTAyNSA0Ljg3NSA3LjVDNC44NzUgOC45NDk3NSA2LjA1MDI1IDEwLjEyNSA3LjUgMTAuMTI1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTkuODc1IDcuNUM5Ljg3NSA4LjgxMTY4IDguODExNjggOS44NzUgNy41IDkuODc1QzYuMTg4MzIgOS44NzUgNS4xMjUgOC44MTE2OCA1LjEyNSA3LjVDNS4xMjUgNi4xODgzMiA2LjE4ODMyIDUuMTI1IDcuNSA1LjEyNUM4LjgxMTY4IDUuMTI1IDkuODc1IDYuMTg4MzIgOS44NzUgNy41WlwiLGZpbGw6bn0pKX0sZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNjI1IDcuNUMzLjYyNSA4LjEyMTMyIDMuMTIxMzIgOC42MjUgMi41IDguNjI1QzEuODc4NjggOC42MjUgMS4zNzUgOC4xMjEzMiAxLjM3NSA3LjVDMS4zNzUgNi44Nzg2OCAxLjg3ODY4IDYuMzc1IDIuNSA2LjM3NUMzLjEyMTMyIDYuMzc1IDMuNjI1IDYuODc4NjggMy42MjUgNy41Wk04LjYyNSA3LjVDOC42MjUgOC4xMjEzMiA4LjEyMTMyIDguNjI1IDcuNSA4LjYyNUM2Ljg3ODY4IDguNjI1IDYuMzc1IDguMTIxMzIgNi4zNzUgNy41QzYuMzc1IDYuODc4NjggNi44Nzg2OCA2LjM3NSA3LjUgNi4zNzVDOC4xMjEzMiA2LjM3NSA4LjYyNSA2Ljg3ODY4IDguNjI1IDcuNVpNMTIuNSA4LjYyNUMxMy4xMjEzIDguNjI1IDEzLjYyNSA4LjEyMTMyIDEzLjYyNSA3LjVDMTMuNjI1IDYuODc4NjggMTMuMTIxMyA2LjM3NSAxMi41IDYuMzc1QzExLjg3ODcgNi4zNzUgMTEuMzc1IDYuODc4NjggMTEuMzc1IDcuNUMxMS4zNzUgOC4xMjEzMiAxMS44Nzg3IDguNjI1IDEyLjUgOC42MjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx0dD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC42MjUgMi41QzguNjI1IDMuMTIxMzIgOC4xMjEzMiAzLjYyNSA3LjUgMy42MjVDNi44Nzg2OCAzLjYyNSA2LjM3NSAzLjEyMTMyIDYuMzc1IDIuNUM2LjM3NSAxLjg3ODY4IDYuODc4NjggMS4zNzUgNy41IDEuMzc1QzguMTIxMzIgMS4zNzUgOC42MjUgMS44Nzg2OCA4LjYyNSAyLjVaTTguNjI1IDcuNUM4LjYyNSA4LjEyMTMyIDguMTIxMzIgOC42MjUgNy41IDguNjI1QzYuODc4NjggOC42MjUgNi4zNzUgOC4xMjEzMiA2LjM3NSA3LjVDNi4zNzUgNi44Nzg2OCA2Ljg3ODY4IDYuMzc1IDcuNSA2LjM3NUM4LjEyMTMyIDYuMzc1IDguNjI1IDYuODc4NjggOC42MjUgNy41Wk03LjUgMTMuNjI1QzguMTIxMzIgMTMuNjI1IDguNjI1IDEzLjEyMTMgOC42MjUgMTIuNUM4LjYyNSAxMS44Nzg3IDguMTIxMzIgMTEuMzc1IDcuNSAxMS4zNzVDNi44Nzg2OCAxMS4zNzUgNi4zNzUgMTEuODc4NyA2LjM3NSAxMi41QzYuMzc1IDEzLjEyMTMgNi44Nzg2OCAxMy42MjUgNy41IDEzLjYyNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG50PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjg1MzU1IDIuMTQ2NDVDMy42NTgyOSAxLjk1MTE4IDMuMzQxNzEgMS45NTExOCAzLjE0NjQ1IDIuMTQ2NDVDMi45NTExOCAyLjM0MTcxIDIuOTUxMTggMi42NTgyOSAzLjE0NjQ1IDIuODUzNTVMNy4xNDY0NSA2Ljg1MzU1QzcuMzQxNzEgNy4wNDg4MiA3LjY1ODI5IDcuMDQ4ODIgNy44NTM1NSA2Ljg1MzU1TDExLjg1MzYgMi44NTM1NUMxMi4wNDg4IDIuNjU4MjkgMTIuMDQ4OCAyLjM0MTcxIDExLjg1MzYgMi4xNDY0NUMxMS42NTgzIDEuOTUxMTggMTEuMzQxNyAxLjk1MTE4IDExLjE0NjQgMi4xNDY0NUw3LjUgNS43OTI4OUwzLjg1MzU1IDIuMTQ2NDVaTTMuODUzNTUgOC4xNDY0NUMzLjY1ODI5IDcuOTUxMTggMy4zNDE3MSA3Ljk1MTE4IDMuMTQ2NDUgOC4xNDY0NUMyLjk1MTE4IDguMzQxNzEgMi45NTExOCA4LjY1ODI5IDMuMTQ2NDUgOC44NTM1NUw3LjE0NjQ1IDEyLjg1MzZDNy4zNDE3MSAxMy4wNDg4IDcuNjU4MjkgMTMuMDQ4OCA3Ljg1MzU1IDEyLjg1MzZMMTEuODUzNiA4Ljg1MzU1QzEyLjA0ODggOC42NTgyOSAxMi4wNDg4IDguMzQxNzEgMTEuODUzNiA4LjE0NjQ1QzExLjY1ODMgNy45NTExOCAxMS4zNDE3IDcuOTUxMTggMTEuMTQ2NCA4LjE0NjQ1TDcuNSAxMS43OTI5TDMuODUzNTUgOC4xNDY0NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHJ0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02Ljg1MzU1IDMuODUzNTVDNy4wNDg4MiAzLjY1ODI5IDcuMDQ4ODIgMy4zNDE3MSA2Ljg1MzU1IDMuMTQ2NDVDNi42NTgyOSAyLjk1MTE4IDYuMzQxNzEgMi45NTExOCA2LjE0NjQ1IDMuMTQ2NDVMMi4xNDY0NSA3LjE0NjQ1QzEuOTUxMTggNy4zNDE3MSAxLjk1MTE4IDcuNjU4MjkgMi4xNDY0NSA3Ljg1MzU1TDYuMTQ2NDUgMTEuODUzNkM2LjM0MTcxIDEyLjA0ODggNi42NTgyOSAxMi4wNDg4IDYuODUzNTUgMTEuODUzNkM3LjA0ODgyIDExLjY1ODMgNy4wNDg4MiAxMS4zNDE3IDYuODUzNTUgMTEuMTQ2NEwzLjIwNzExIDcuNUw2Ljg1MzU1IDMuODUzNTVaTTEyLjg1MzYgMy44NTM1NUMxMy4wNDg4IDMuNjU4MjkgMTMuMDQ4OCAzLjM0MTcxIDEyLjg1MzYgMy4xNDY0NUMxMi42NTgzIDIuOTUxMTggMTIuMzQxNyAyLjk1MTE4IDEyLjE0NjQgMy4xNDY0NUw4LjE0NjQ1IDcuMTQ2NDVDNy45NTExOCA3LjM0MTcxIDcuOTUxMTggNy42NTgyOSA4LjE0NjQ1IDcuODUzNTVMMTIuMTQ2NCAxMS44NTM2QzEyLjM0MTcgMTIuMDQ4OCAxMi42NTgzIDEyLjA0ODggMTIuODUzNiAxMS44NTM2QzEzLjA0ODggMTEuNjU4MyAxMy4wNDg4IDExLjM0MTcgMTIuODUzNiAxMS4xNDY0TDkuMjA3MTEgNy41TDEyLjg1MzYgMy44NTM1NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG90PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjE0NjQ1IDExLjE0NjRDMS45NTExOCAxMS4zNDE3IDEuOTUxMTggMTEuNjU4MyAyLjE0NjQ1IDExLjg1MzZDMi4zNDE3MSAxMi4wNDg4IDIuNjU4MjkgMTIuMDQ4OCAyLjg1MzU1IDExLjg1MzZMNi44NTM1NSA3Ljg1MzU1QzcuMDQ4ODIgNy42NTgyOSA3LjA0ODgyIDcuMzQxNzEgNi44NTM1NSA3LjE0NjQ1TDIuODUzNTUgMy4xNDY0NUMyLjY1ODI5IDIuOTUxMTggMi4zNDE3MSAyLjk1MTE4IDIuMTQ2NDUgMy4xNDY0NUMxLjk1MTE4IDMuMzQxNzEgMS45NTExOCAzLjY1ODI5IDIuMTQ2NDUgMy44NTM1NUw1Ljc5Mjg5IDcuNUwyLjE0NjQ1IDExLjE0NjRaTTguMTQ2NDUgMTEuMTQ2NEM3Ljk1MTE4IDExLjM0MTcgNy45NTExOCAxMS42NTgzIDguMTQ2NDUgMTEuODUzNkM4LjM0MTcxIDEyLjA0ODggOC42NTgyOSAxMi4wNDg4IDguODUzNTUgMTEuODUzNkwxMi44NTM2IDcuODUzNTVDMTMuMDQ4OCA3LjY1ODI5IDEzLjA0ODggNy4zNDE3MSAxMi44NTM2IDcuMTQ2NDVMOC44NTM1NSAzLjE0NjQ1QzguNjU4MjkgMi45NTExOCA4LjM0MTcxIDIuOTUxMTggOC4xNDY0NSAzLjE0NjQ1QzcuOTUxMTggMy4zNDE3MSA3Ljk1MTE4IDMuNjU4MjkgOC4xNDY0NSAzLjg1MzU1TDExLjc5MjkgNy41TDguMTQ2NDUgMTEuMTQ2NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGl0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMS4xNDY0IDYuODUzNTVDMTEuMzQxNyA3LjA0ODgyIDExLjY1ODMgNy4wNDg4MiAxMS44NTM2IDYuODUzNTVDMTIuMDQ4OCA2LjY1ODI5IDEyLjA0ODggNi4zNDE3MSAxMS44NTM2IDYuMTQ2NDVMNy44NTM1NSAyLjE0NjQ1QzcuNjU4MjkgMS45NTExOCA3LjM0MTcxIDEuOTUxMTggNy4xNDY0NSAyLjE0NjQ1TDMuMTQ2NDUgNi4xNDY0NUMyLjk1MTE4IDYuMzQxNzEgMi45NTExOCA2LjY1ODI5IDMuMTQ2NDUgNi44NTM1NUMzLjM0MTcxIDcuMDQ4ODIgMy42NTgyOSA3LjA0ODgyIDMuODUzNTUgNi44NTM1NUw3LjUgMy4yMDcxMUwxMS4xNDY0IDYuODUzNTVaTTExLjE0NjQgMTIuODUzNkMxMS4zNDE3IDEzLjA0ODggMTEuNjU4MyAxMy4wNDg4IDExLjg1MzYgMTIuODUzNkMxMi4wNDg4IDEyLjY1ODMgMTIuMDQ4OCAxMi4zNDE3IDExLjg1MzYgMTIuMTQ2NEw3Ljg1MzU1IDguMTQ2NDVDNy42NTgyOSA3Ljk1MTE4IDcuMzQxNzEgNy45NTExOCA3LjE0NjQ1IDguMTQ2NDVMMy4xNDY0NSAxMi4xNDY0QzIuOTUxMTggMTIuMzQxNyAyLjk1MTE4IDEyLjY1ODMgMy4xNDY0NSAxMi44NTM2QzMuMzQxNzEgMTMuMDQ4OCAzLjY1ODI5IDEzLjA0ODggMy44NTM1NSAxMi44NTM2TDcuNSA5LjIwNzExTDExLjE0NjQgMTIuODUzNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGF0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUwMDA1IDEuMDQ5OTlDNy43NDg1OCAxLjA0OTk5IDcuOTUwMDUgMS4yNTE0NiA3Ljk1MDA1IDEuNDk5OTlWOC40MTM1OUwxMC4xODE5IDYuMTgxNzlDMTAuMzU3NiA2LjAwNjA1IDEwLjY0MjUgNi4wMDYwNSAxMC44MTgyIDYuMTgxNzlDMTAuOTk0IDYuMzU3NTMgMTAuOTk0IDYuNjQyNDUgMTAuODE4MiA2LjgxODE5TDcuODE4MjUgOS44MTgxOUM3LjY0MjUxIDkuOTkzOTIgNy4zNTc1OSA5Ljk5MzkyIDcuMTgxODUgOS44MTgxOUw0LjE4MTg1IDYuODE4MTlDNC4wMDYxMSA2LjY0MjQ1IDQuMDA2MTEgNi4zNTc1MyA0LjE4MTg1IDYuMTgxNzlDNC4zNTc1OSA2LjAwNjA1IDQuNjQyNTEgNi4wMDYwNSA0LjgxODI1IDYuMTgxNzlMNy4wNTAwNSA4LjQxMzU5VjEuNDk5OTlDNy4wNTAwNSAxLjI1MTQ2IDcuMjUxNTIgMS4wNDk5OSA3LjUwMDA1IDEuMDQ5OTlaTTIuNSAxMEMyLjc3NjE0IDEwIDMgMTAuMjIzOSAzIDEwLjVWMTJDMyAxMi41NTM5IDMuNDQ1NjUgMTMgMy45OTYzNSAxM0gxMS4wMDEyQzExLjU1MjkgMTMgMTIgMTIuNTUyOCAxMiAxMlYxMC41QzEyIDEwLjIyMzkgMTIuMjIzOSAxMCAxMi41IDEwQzEyLjc3NjEgMTAgMTMgMTAuMjIzOSAxMyAxMC41VjEyQzEzIDEzLjEwNDEgMTIuMTA2MiAxNCAxMS4wMDEyIDE0SDMuOTk2MzVDMi44OTAxOSAxNCAyIDEzLjEwMyAyIDEyVjEwLjVDMiAxMC4yMjM5IDIuMjIzODYgMTAgMi41IDEwWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiNC41XCIsY3k6XCIyLjVcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiNC41XCIsY3k6XCI0LjVcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiNC41XCIsY3k6XCI2LjQ5OVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI0LjVcIixjeTpcIjguNDk5XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjQuNVwiLGN5OlwiMTAuNDk4XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjQuNVwiLGN5OlwiMTIuNDk4XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjYuNVwiLGN5OlwiMi41XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjYuNVwiLGN5OlwiNC41XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjYuNVwiLGN5OlwiNi40OTlcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiNi41XCIsY3k6XCI4LjQ5OVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI2LjVcIixjeTpcIjEwLjQ5OFwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI2LjVcIixjeTpcIjEyLjQ5OFwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI4LjQ5OVwiLGN5OlwiMi41XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjguNDk5XCIsY3k6XCI0LjVcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiOC40OTlcIixjeTpcIjYuNDk5XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjguNDk5XCIsY3k6XCI4LjQ5OVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI4LjQ5OVwiLGN5OlwiMTAuNDk4XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjguNDk5XCIsY3k6XCIxMi40OThcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiMTAuNDk5XCIsY3k6XCIyLjVcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiMTAuNDk5XCIsY3k6XCI0LjVcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiMTAuNDk5XCIsY3k6XCI2LjQ5OVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCIxMC40OTlcIixjeTpcIjguNDk5XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjEwLjQ5OVwiLGN5OlwiMTAuNDk4XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjEwLjQ5OVwiLGN5OlwiMTIuNDk4XCIscjpcIi42XCIsZmlsbDpufSkpfSxzdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNS41IDQuNjI1QzYuMTIxMzIgNC42MjUgNi42MjUgNC4xMjEzMiA2LjYyNSAzLjVDNi42MjUgMi44Nzg2OCA2LjEyMTMyIDIuMzc1IDUuNSAyLjM3NUM0Ljg3ODY4IDIuMzc1IDQuMzc1IDIuODc4NjggNC4zNzUgMy41QzQuMzc1IDQuMTIxMzIgNC44Nzg2OCA0LjYyNSA1LjUgNC42MjVaTTkuNSA0LjYyNUMxMC4xMjEzIDQuNjI1IDEwLjYyNSA0LjEyMTMyIDEwLjYyNSAzLjVDMTAuNjI1IDIuODc4NjggMTAuMTIxMyAyLjM3NSA5LjUgMi4zNzVDOC44Nzg2OCAyLjM3NSA4LjM3NSAyLjg3ODY4IDguMzc1IDMuNUM4LjM3NSA0LjEyMTMyIDguODc4NjggNC42MjUgOS41IDQuNjI1Wk0xMC42MjUgNy41QzEwLjYyNSA4LjEyMTMyIDEwLjEyMTMgOC42MjUgOS41IDguNjI1QzguODc4NjggOC42MjUgOC4zNzUgOC4xMjEzMiA4LjM3NSA3LjVDOC4zNzUgNi44Nzg2OCA4Ljg3ODY4IDYuMzc1IDkuNSA2LjM3NUMxMC4xMjEzIDYuMzc1IDEwLjYyNSA2Ljg3ODY4IDEwLjYyNSA3LjVaTTUuNSA4LjYyNUM2LjEyMTMyIDguNjI1IDYuNjI1IDguMTIxMzIgNi42MjUgNy41QzYuNjI1IDYuODc4NjggNi4xMjEzMiA2LjM3NSA1LjUgNi4zNzVDNC44Nzg2OCA2LjM3NSA0LjM3NSA2Ljg3ODY4IDQuMzc1IDcuNUM0LjM3NSA4LjEyMTMyIDQuODc4NjggOC42MjUgNS41IDguNjI1Wk0xMC42MjUgMTEuNUMxMC42MjUgMTIuMTIxMyAxMC4xMjEzIDEyLjYyNSA5LjUgMTIuNjI1QzguODc4NjggMTIuNjI1IDguMzc1IDEyLjEyMTMgOC4zNzUgMTEuNUM4LjM3NSAxMC44Nzg3IDguODc4NjggMTAuMzc1IDkuNSAxMC4zNzVDMTAuMTIxMyAxMC4zNzUgMTAuNjI1IDEwLjg3ODcgMTAuNjI1IDExLjVaTTUuNSAxMi42MjVDNi4xMjEzMiAxMi42MjUgNi42MjUgMTIuMTIxMyA2LjYyNSAxMS41QzYuNjI1IDEwLjg3ODcgNi4xMjEzMiAxMC4zNzUgNS41IDEwLjM3NUM0Ljg3ODY4IDEwLjM3NSA0LjM3NSAxMC44Nzg3IDQuMzc1IDExLjVDNC4zNzUgMTIuMTIxMyA0Ljg3ODY4IDEyLjYyNSA1LjUgMTIuNjI1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sY3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuNDk5OTggNC4wOTk5OEMyLjI3OTA2IDQuMDk5OTggMi4wOTk5OCA0LjI3OTA2IDIuMDk5OTggNC40OTk5OEMyLjA5OTk4IDQuNzIwODkgMi4yNzkwNiA0Ljg5OTk4IDIuNDk5OTggNC44OTk5OEgxMi41QzEyLjcyMDkgNC44OTk5OCAxMi45IDQuNzIwODkgMTIuOSA0LjQ5OTk4QzEyLjkgNC4yNzkwNiAxMi43MjA5IDQuMDk5OTggMTIuNSA0LjA5OTk4SDIuNDk5OThaTTIuNDk5OTggNi4wOTk5OEMyLjI3OTA2IDYuMDk5OTggMi4wOTk5OCA2LjI3OTA2IDIuMDk5OTggNi40OTk5OEMyLjA5OTk4IDYuNzIwODkgMi4yNzkwNiA2Ljg5OTk4IDIuNDk5OTggNi44OTk5OEgxMi41QzEyLjcyMDkgNi44OTk5OCAxMi45IDYuNzIwODkgMTIuOSA2LjQ5OTk4QzEyLjkgNi4yNzkwNiAxMi43MjA5IDYuMDk5OTggMTIuNSA2LjA5OTk4SDIuNDk5OThaTTIuMDk5OTggOC40OTk5OEMyLjA5OTk4IDguMjc5MDYgMi4yNzkwNiA4LjA5OTk4IDIuNDk5OTggOC4wOTk5OEgxMi41QzEyLjcyMDkgOC4wOTk5OCAxMi45IDguMjc5MDYgMTIuOSA4LjQ5OTk4QzEyLjkgOC43MjA4OSAxMi43MjA5IDguODk5OTggMTIuNSA4Ljg5OTk4SDIuNDk5OThDMi4yNzkwNiA4Ljg5OTk4IDIuMDk5OTggOC43MjA4OSAyLjA5OTk4IDguNDk5OThaTTIuNDk5OTggMTAuMUMyLjI3OTA2IDEwLjEgMi4wOTk5OCAxMC4yNzkxIDIuMDk5OTggMTAuNUMyLjA5OTk4IDEwLjcyMDkgMi4yNzkwNiAxMC45IDIuNDk5OTggMTAuOUgxMi41QzEyLjcyMDkgMTAuOSAxMi45IDEwLjcyMDkgMTIuOSAxMC41QzEyLjkgMTAuMjc5MSAxMi43MjA5IDEwLjEgMTIuNSAxMC4xSDIuNDk5OThaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx1dD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC4wOTk5OCAxMi41QzQuMDk5OTggMTIuNzIwOSA0LjI3OTA2IDEyLjkgNC40OTk5OCAxMi45QzQuNzIwODkgMTIuOSA0Ljg5OTk4IDEyLjcyMDkgNC44OTk5OCAxMi41TDQuODk5OTggMi41MDAwMkM0Ljg5OTk4IDIuMjc5MTEgNC43MjA4OSAyLjEwMDAzIDQuNDk5OTggMi4xMDAwM0M0LjI3OTA2IDIuMTAwMDMgNC4wOTk5OCAyLjI3OTExIDQuMDk5OTggMi41MDAwMkw0LjA5OTk4IDEyLjVaTTYuMDk5OTggMTIuNUM2LjA5OTk4IDEyLjcyMDkgNi4yNzkwNiAxMi45IDYuNDk5OTggMTIuOUM2LjcyMDg5IDEyLjkgNi44OTk5OCAxMi43MjA5IDYuODk5OTggMTIuNUw2Ljg5OTk4IDIuNTAwMDJDNi44OTk5OCAyLjI3OTExIDYuNzIwODkgMi4xMDAwMyA2LjQ5OTk4IDIuMTAwMDNDNi4yNzkwNiAyLjEwMDAzIDYuMDk5OTggMi4yNzkxMSA2LjA5OTk4IDIuNTAwMDJMNi4wOTk5OCAxMi41Wk04LjQ5OTk4IDEyLjlDOC4yNzkwNiAxMi45IDguMDk5OTggMTIuNzIwOSA4LjA5OTk4IDEyLjVMOC4wOTk5OCAyLjUwMDAyQzguMDk5OTggMi4yNzkxMSA4LjI3OTA2IDIuMTAwMDIgOC40OTk5OCAyLjEwMDAyQzguNzIwODkgMi4xMDAwMiA4Ljg5OTk4IDIuMjc5MTEgOC44OTk5OCAyLjUwMDAyTDguODk5OTggMTIuNUM4Ljg5OTk4IDEyLjcyMDkgOC43MjA4OSAxMi45IDguNDk5OTggMTIuOVpNMTAuMSAxMi41QzEwLjEgMTIuNzIwOSAxMC4yNzkxIDEyLjkgMTAuNSAxMi45QzEwLjcyMDkgMTIuOSAxMC45IDEyLjcyMDkgMTAuOSAxMi41TDEwLjkgMi41MDAwMkMxMC45IDIuMjc5MTEgMTAuNzIwOSAyLjEwMDAyIDEwLjUgMi4xMDAwMkMxMC4yNzkxIDIuMTAwMDIgMTAuMSAyLjI3OTExIDEwLjEgMi41MDAwMkwxMC4xIDEyLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxmdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTAuMzI4NSAxLjEzNjA3QzEwLjEzMzIgMC45NDA4MDkgOS44MTY2MiAwLjk0MDgwOCA5LjYyMTM2IDEuMTM2MDdDOS40MjYwOSAxLjMzMTMzIDkuNDI2MDkgMS42NDc5MiA5LjYyMTM2IDEuODQzMThMMTAuMjc0NCAyLjQ5NjE5TDUuNDI1NjMgNi4xMzI3NEw0LjMxODA1IDUuMDI1MTZDNC4xMjI3OSA0LjgyOTkgMy44MDYyMSA0LjgyOTkgMy42MTA5NSA1LjAyNTE2QzMuNDE1NjkgNS4yMjA0MiAzLjQxNTY5IDUuNTM3IDMuNjEwOTUgNS43MzIyNkw1LjAyNTE2IDcuMTQ2NDhMNi4wODU4MiA4LjIwNzE0TDIuODE1NDUgMTEuNDc3NUMyLjYyMDE5IDExLjY3MjggMi42MjAxOSAxMS45ODk0IDIuODE1NDUgMTIuMTg0NkMzLjAxMDcyIDEyLjM3OTkgMy4zMjczIDEyLjM3OTkgMy41MjI1NiAxMi4xODQ2TDYuNzkyOTMgOC45MTQyNUw3Ljg1MzU5IDkuOTc0OTFMOS4yNjc4IDExLjM4OTFDOS40NjMwNiAxMS41ODQ0IDkuNzc5NjUgMTEuNTg0NCA5Ljk3NDkxIDExLjM4OTFDMTAuMTcwMiAxMS4xOTM5IDEwLjE3MDIgMTAuODc3MyA5Ljk3NDkxIDEwLjY4Mkw4Ljg2NzMzIDkuNTc0NDNMMTIuNTAzOSA0LjcyNTdMMTMuMTU2OSA1LjM3ODcxQzEzLjM1MjIgNS41NzM5NyAxMy42Njg3IDUuNTczOTcgMTMuODY0IDUuMzc4NzFDMTQuMDU5MyA1LjE4MzQ1IDE0LjA1OTMgNC44NjY4NyAxMy44NjQgNC42NzE2TDEyLjgwMzMgMy42MTA5NEwxMS4zODkxIDIuMTk2NzNMMTAuMzI4NSAxLjEzNjA3Wk02LjEzOTkyIDYuODQ3MDJMMTAuOTg4NyAzLjIxMDQ3TDExLjc4OTYgNC4wMTE0Mkw4LjE1MzA1IDguODYwMTVMNi4xMzk5MiA2Ljg0NzAyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTkuNjIxMjkgMS4xMzYwN0M5LjgxNjU2IDAuOTQwODA4IDEwLjEzMzEgMC45NDA4MDkgMTAuMzI4NCAxLjEzNjA3TDExLjM4OTEgMi4xOTY3M0wxMi44MDMzIDMuNjEwOTRMMTMuODYzOSA0LjY3MTZDMTQuMDU5MiA0Ljg2Njg3IDE0LjA1OTIgNS4xODM0NSAxMy44NjM5IDUuMzc4NzFDMTMuNjY4NyA1LjU3Mzk3IDEzLjM1MjEgNS41NzM5NyAxMy4xNTY4IDUuMzc4NzFMMTIuNTAzOCA0LjcyNTdMOC44NjcyNyA5LjU3NDQzTDkuOTc0ODUgMTAuNjgyQzEwLjE3MDEgMTAuODc3MyAxMC4xNzAxIDExLjE5MzkgOS45NzQ4NSAxMS4zODkxQzkuNzc5NTkgMTEuNTg0NCA5LjQ2MyAxMS41ODQ0IDkuMjY3NzQgMTEuMzg5MUw3Ljg1MzUzIDkuOTc0OTFMNi43OTI4NyA4LjkxNDI1TDMuNTIyNSAxMi4xODQ2QzMuMzI3MjQgMTIuMzc5OSAzLjAxMDY1IDEyLjM3OTkgMi44MTUzOSAxMi4xODQ2QzIuNjIwMTMgMTEuOTg5NCAyLjYyMDEzIDExLjY3MjggMi44MTUzOSAxMS40Nzc1TDYuMDg1NzYgOC4yMDcxNEw1LjAyNTEgNy4xNDY0OEwzLjYxMDg5IDUuNzMyMjZDMy40MTU2MyA1LjUzNyAzLjQxNTYyIDUuMjIwNDIgMy42MTA4OSA1LjAyNTE2QzMuODA2MTUgNC44Mjk5IDQuMTIyNzMgNC44Mjk5IDQuMzE3OTkgNS4wMjUxNkw1LjQyNTU3IDYuMTMyNzRMMTAuMjc0MyAyLjQ5NjE5TDkuNjIxMjkgMS44NDMxOEM5LjQyNjAzIDEuNjQ3OTIgOS40MjYwMyAxLjMzMTMzIDkuNjIxMjkgMS4xMzYwN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTkuNjIxMjkgMS4xMzYwN0M5LjgxNjU2IDAuOTQwODA4IDEwLjEzMzEgMC45NDA4MDkgMTAuMzI4NCAxLjEzNjA3TDExLjM4OTEgMi4xOTY3M0wxMi44MDMzIDMuNjEwOTRMMTMuODYzOSA0LjY3MTZDMTQuMDU5MiA0Ljg2Njg3IDE0LjA1OTIgNS4xODM0NSAxMy44NjM5IDUuMzc4NzFDMTMuNjY4NyA1LjU3Mzk3IDEzLjM1MjEgNS41NzM5NyAxMy4xNTY4IDUuMzc4NzFMMTIuNTAzOCA0LjcyNTdMOC44NjcyNyA5LjU3NDQzTDkuOTc0ODUgMTAuNjgyQzEwLjE3MDEgMTAuODc3MyAxMC4xNzAxIDExLjE5MzkgOS45NzQ4NSAxMS4zODkxQzkuNzc5NTkgMTEuNTg0NCA5LjQ2MyAxMS41ODQ0IDkuMjY3NzQgMTEuMzg5MUw3Ljg1MzUzIDkuOTc0OTFMNi43OTI4NyA4LjkxNDI1TDMuNTIyNSAxMi4xODQ2QzMuMzI3MjQgMTIuMzc5OSAzLjAxMDY1IDEyLjM3OTkgMi44MTUzOSAxMi4xODQ2QzIuNjIwMTMgMTEuOTg5NCAyLjYyMDEzIDExLjY3MjggMi44MTUzOSAxMS40Nzc1TDYuMDg1NzYgOC4yMDcxNEw1LjAyNTEgNy4xNDY0OEwzLjYxMDg5IDUuNzMyMjZDMy40MTU2MyA1LjUzNyAzLjQxNTYyIDUuMjIwNDIgMy42MTA4OSA1LjAyNTE2QzMuODA2MTUgNC44Mjk5IDQuMTIyNzMgNC44Mjk5IDQuMzE3OTkgNS4wMjUxNkw1LjQyNTU3IDYuMTMyNzRMMTAuMjc0MyAyLjQ5NjE5TDkuNjIxMjkgMS44NDMxOEM5LjQyNjAzIDEuNjQ3OTIgOS40MjYwMyAxLjMzMTMzIDkuNjIxMjkgMS4xMzYwN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHB0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTk5IDMuMDk5OThDNy4yNzkwNyAzLjA5OTk4IDcuMDk5OTkgMy4yNzkwNiA3LjA5OTk5IDMuNDk5OThDNy4wOTk5OSAzLjcyMDg5IDcuMjc5MDcgMy44OTk5OCA3LjQ5OTk5IDMuODk5OThIMTQuNUMxNC43MjA5IDMuODk5OTggMTQuOSAzLjcyMDg5IDE0LjkgMy40OTk5OEMxNC45IDMuMjc5MDYgMTQuNzIwOSAzLjA5OTk4IDE0LjUgMy4wOTk5OEg3LjQ5OTk5Wk03LjQ5OTk4IDUuMUM3LjI3OTA3IDUuMSA3LjA5OTk4IDUuMjc5MDggNy4wOTk5OCA1LjVDNy4wOTk5OCA1LjcyMDkxIDcuMjc5MDcgNS45IDcuNDk5OTggNS45SDE0LjVDMTQuNzIwOSA1LjkgMTQuOSA1LjcyMDkxIDE0LjkgNS41QzE0LjkgNS4yNzkwOCAxNC43MjA5IDUuMSAxNC41IDUuMUg3LjQ5OTk4Wk03LjEgNy41QzcuMSA3LjI3OTA4IDcuMjc5MDkgNy4xIDcuNSA3LjFIMTQuNUMxNC43MjA5IDcuMSAxNC45IDcuMjc5MDggMTQuOSA3LjVDMTQuOSA3LjcyMDkxIDE0LjcyMDkgNy45IDE0LjUgNy45SDcuNUM3LjI3OTA5IDcuOSA3LjEgNy43MjA5MSA3LjEgNy41Wk03LjQ5OTk4IDkuMUM3LjI3OTA3IDkuMSA3LjA5OTk4IDkuMjc5MDggNy4wOTk5OCA5LjVDNy4wOTk5OCA5LjcyMDkxIDcuMjc5MDcgOS45IDcuNDk5OTggOS45SDE0LjVDMTQuNzIwOSA5LjkgMTQuOSA5LjcyMDkxIDE0LjkgOS41QzE0LjkgOS4yNzkwOCAxNC43MjA5IDkuMSAxNC41IDkuMUg3LjQ5OTk4Wk03LjA5OTk4IDExLjVDNy4wOTk5OCAxMS4yNzkxIDcuMjc5MDcgMTEuMSA3LjQ5OTk4IDExLjFIMTQuNUMxNC43MjA5IDExLjEgMTQuOSAxMS4yNzkxIDE0LjkgMTEuNUMxNC45IDExLjcyMDkgMTQuNzIwOSAxMS45IDE0LjUgMTEuOUg3LjQ5OTk4QzcuMjc5MDcgMTEuOSA3LjA5OTk4IDExLjcyMDkgNy4wOTk5OCAxMS41Wk0yLjUgOS4yNTAwM0w1IDYuMDAwMDNIMEwyLjUgOS4yNTAwM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGh0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjUgMUM0LjIyMzg2IDEgNCAxLjIyMzg2IDQgMS41QzQgMS43NzYxNCA0LjIyMzg2IDIgNC41IDJIMTJWMTNINC41QzQuMjIzODYgMTMgNCAxMy4yMjM5IDQgMTMuNUM0IDEzLjc3NjEgNC4yMjM4NiAxNCA0LjUgMTRIMTJDMTIuNTUyMyAxNCAxMyAxMy41NTIzIDEzIDEzVjJDMTMgMS40NDc3MiAxMi41NTIzIDEgMTIgMUg0LjVaTTYuNjAzNTUgNC44OTY0NUM2LjQwODI5IDQuNzAxMTggNi4wOTE3MSA0LjcwMTE4IDUuODk2NDUgNC44OTY0NUM1LjcwMTE4IDUuMDkxNzEgNS43MDExOCA1LjQwODI5IDUuODk2NDUgNS42MDM1NUw3LjI5Mjg5IDdIMC41QzAuMjIzODU4IDcgMCA3LjIyMzg2IDAgNy41QzAgNy43NzYxNCAwLjIyMzg1OCA4IDAuNSA4SDcuMjkyODlMNS44OTY0NSA5LjM5NjQ1QzUuNzAxMTggOS41OTE3MSA1LjcwMTE4IDkuOTA4MjkgNS44OTY0NSAxMC4xMDM2QzYuMDkxNzEgMTAuMjk4OCA2LjQwODI5IDEwLjI5ODggNi42MDM1NSAxMC4xMDM2TDguODUzNTUgNy44NTM1NUM5LjA0ODgyIDcuNjU4MjkgOS4wNDg4MiA3LjM0MTcxIDguODUzNTUgNy4xNDY0NUw2LjYwMzU1IDQuODk2NDVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxndD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiAyLjVDMiAyLjIyMzg2IDIuMjIzODYgMiAyLjUgMkg1LjVDNS43NzYxNCAyIDYgMi4yMjM4NiA2IDIuNUM2IDIuNzc2MTQgNS43NzYxNCAzIDUuNSAzSDNWNS41QzMgNS43NzYxNCAyLjc3NjE0IDYgMi41IDZDMi4yMjM4NiA2IDIgNS43NzYxNCAyIDUuNVYyLjVaTTkgMi41QzkgMi4yMjM4NiA5LjIyMzg2IDIgOS41IDJIMTIuNUMxMi43NzYxIDIgMTMgMi4yMjM4NiAxMyAyLjVWNS41QzEzIDUuNzc2MTQgMTIuNzc2MSA2IDEyLjUgNkMxMi4yMjM5IDYgMTIgNS43NzYxNCAxMiA1LjVWM0g5LjVDOS4yMjM4NiAzIDkgMi43NzYxNCA5IDIuNVpNMi41IDlDMi43NzYxNCA5IDMgOS4yMjM4NiAzIDkuNVYxMkg1LjVDNS43NzYxNCAxMiA2IDEyLjIyMzkgNiAxMi41QzYgMTIuNzc2MSA1Ljc3NjE0IDEzIDUuNSAxM0gyLjVDMi4yMjM4NiAxMyAyIDEyLjc3NjEgMiAxMi41VjkuNUMyIDkuMjIzODYgMi4yMjM4NiA5IDIuNSA5Wk0xMi41IDlDMTIuNzc2MSA5IDEzIDkuMjIzODYgMTMgOS41VjEyLjVDMTMgMTIuNzc2MSAxMi43NzYxIDEzIDEyLjUgMTNIOS41QzkuMjIzODYgMTMgOSAxMi43NzYxIDkgMTIuNUM5IDEyLjIyMzkgOS4yMjM4NiAxMiA5LjUgMTJIMTJWOS41QzEyIDkuMjIzODYgMTIuMjIzOSA5IDEyLjUgOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHZ0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xIDJDMC40NDc3MTUgMiAwIDIuNDQ3NzIgMCAzVjEyQzAgMTIuNTUyMyAwLjQ0NzcxNSAxMyAxIDEzSDE0QzE0LjU1MjMgMTMgMTUgMTIuNTUyMyAxNSAxMlYzQzE1IDIuNDQ3NzIgMTQuNTUyMyAyIDE0IDJIMVpNMSAzTDE0IDNWMy45MjQ5NEMxMy45MTc0IDMuOTI0ODYgMTMuODMzOCAzLjk0NzUxIDEzLjc1ODkgMy45OTUwNUw3LjUgNy45NjcwM0wxLjI0MTEyIDMuOTk1MDVDMS4xNjYyMSAzLjk0NzUxIDEuMDgyNiAzLjkyNDg2IDEgMy45MjQ5NFYzWk0xIDQuOTA3OTdWMTJIMTRWNC45MDc5N0w3Ljc0MTEyIDguODc5OTVDNy41OTM5NCA4Ljk3MzM1IDcuNDA2MDYgOC45NzMzNSA3LjI1ODg4IDguODc5OTVMMSA0LjkwNzk3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuOTQ3MjEgMC4xNjQ1OTRDNy42NjU2OSAwLjAyMzgyOTkgNy4zMzQzMSAwLjAyMzgzMDIgNy4wNTI3OSAwLjE2NDU5NEwwLjU1Mjc4NiAzLjQxNDU5QzAuMjE0MDAyIDMuNTgzOTkgMCAzLjkzMDI1IDAgNC4zMDkwMlYxMkMwIDEyLjU1MjMgMC40NDc3MTUgMTMgMSAxM0gxNEMxNC41NTIzIDEzIDE1IDEyLjU1MjMgMTUgMTJWNC4zMDkwMkMxNSAzLjkzMDI1IDE0Ljc4NiAzLjU4Mzk5IDE0LjQ0NzIgMy40MTQ1OUw3Ljk0NzIxIDAuMTY0NTk0Wk0xMy41Njg5IDQuMDkzNDlMNy41IDEuMDU5MDJMMS40MzEwNSA0LjA5MzQ5TDcuNSA3LjI5MTM2TDEzLjU2ODkgNC4wOTM0OVpNMSA0Ljg4MzY2VjEySDE0VjQuODgzNjZMNy43MDk3NyA4LjE5ODEzQzcuNTc4NDggOC4yNjczMSA3LjQyMTUyIDguMjY3MzEgNy4yOTAyMyA4LjE5ODEzTDEgNC44ODM2NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEN0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk04LjQ0NDkgMC42MDg3NjVDOC4wMTgzIC0wLjEwNzAxNSA2Ljk4MTcgLTAuMTA3MDE1IDYuNTU1MDkgMC42MDg3NjZMMC4xNjExNzggMTEuMzM2OEMtMC4yNzU4MjQgMTIuMDcgMC4yNTI1MDMgMTMgMS4xMDYwOCAxM0gxMy44OTM5QzE0Ljc0NzUgMTMgMTUuMjc1OCAxMi4wNyAxNC44Mzg4IDExLjMzNjhMOC40NDQ5IDAuNjA4NzY1Wk03LjQxNDEgMS4xMjA3M0M3LjQ1Mjg4IDEuMDU1NjYgNy41NDcxMiAxLjA1NTY2IDcuNTg1OSAxLjEyMDczTDEzLjk3OTggMTEuODQ4OEMxNC4wMTk2IDExLjkxNTQgMTMuOTcxNSAxMiAxMy44OTM5IDEySDEuMTA2MDhDMS4wMjg0OSAxMiAwLjk4MDQ1NCAxMS45MTU0IDEuMDIwMTggMTEuODQ4OEw3LjQxNDEgMS4xMjA3M1pNNi44MjY5IDQuNDg2MTFDNi44MTIyMSA0LjEwNDIzIDcuMTE3ODMgMy43ODY2MyA3LjUgMy43ODY2M0M3Ljg4MjE3IDMuNzg2NjMgOC4xODc3OCA0LjEwNDIzIDguMTczMSA0LjQ4NjEyTDguMDE5MjEgOC40ODcwMUM4LjAwODQ4IDguNzY2IDcuNzc5MiA4Ljk4NjY0IDcuNSA4Ljk4NjY0QzcuMjIwOCA4Ljk4NjY0IDYuOTkxNTEgOC43NjYgNi45ODA3OCA4LjQ4NzAxTDYuODI2OSA0LjQ4NjExWk04LjI0OTg5IDEwLjQ3NkM4LjI0OTg5IDEwLjg5MDIgNy45MTQxIDExLjIyNiA3LjQ5OTg5IDExLjIyNkM3LjA4NTY3IDExLjIyNiA2Ljc0OTg5IDEwLjg5MDIgNi43NDk4OSAxMC40NzZDNi43NDk4OSAxMC4wNjE4IDcuMDg1NjcgOS43MjU5OSA3LjQ5OTg5IDkuNzI1OTlDNy45MTQxIDkuNzI1OTkgOC4yNDk4OSAxMC4wNjE4IDguMjQ5ODkgMTAuNDc2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0seXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMgMUMyLjQ0NzcxIDEgMiAxLjQ0NzcyIDIgMlYxM0MyIDEzLjU1MjMgMi40NDc3MiAxNCAzIDE0SDEwLjVDMTAuNzc2MSAxNCAxMSAxMy43NzYxIDExIDEzLjVDMTEgMTMuMjIzOSAxMC43NzYxIDEzIDEwLjUgMTNIM1YyTDEwLjUgMkMxMC43NzYxIDIgMTEgMS43NzYxNCAxMSAxLjVDMTEgMS4yMjM4NiAxMC43NzYxIDEgMTAuNSAxSDNaTTEyLjYwMzYgNC44OTY0NUMxMi40MDgzIDQuNzAxMTggMTIuMDkxNyA0LjcwMTE4IDExLjg5NjQgNC44OTY0NUMxMS43MDEyIDUuMDkxNzEgMTEuNzAxMiA1LjQwODI5IDExLjg5NjQgNS42MDM1NUwxMy4yOTI5IDdINi41QzYuMjIzODYgNyA2IDcuMjIzODYgNiA3LjVDNiA3Ljc3NjE0IDYuMjIzODYgOCA2LjUgOEgxMy4yOTI5TDExLjg5NjQgOS4zOTY0NUMxMS43MDEyIDkuNTkxNzEgMTEuNzAxMiA5LjkwODI5IDExLjg5NjQgMTAuMTAzNkMxMi4wOTE3IDEwLjI5ODggMTIuNDA4MyAxMC4yOTg4IDEyLjYwMzYgMTAuMTAzNkwxNC44NTM2IDcuODUzNTVDMTUuMDQ4OCA3LjY1ODI5IDE1LjA0ODggNy4zNDE3MSAxNC44NTM2IDcuMTQ2NDVMMTIuNjAzNiA0Ljg5NjQ1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sd3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUuNSAyQzUuNzc2MTQgMiA2IDIuMjIzODYgNiAyLjVWNS41QzYgNS43NzYxNCA1Ljc3NjE0IDYgNS41IDZIMi41QzIuMjIzODYgNiAyIDUuNzc2MTQgMiA1LjVDMiA1LjIyMzg2IDIuMjIzODYgNSAyLjUgNUg1VjIuNUM1IDIuMjIzODYgNS4yMjM4NiAyIDUuNSAyWk05LjUgMkM5Ljc3NjE0IDIgMTAgMi4yMjM4NiAxMCAyLjVWNUgxMi41QzEyLjc3NjEgNSAxMyA1LjIyMzg2IDEzIDUuNUMxMyA1Ljc3NjE0IDEyLjc3NjEgNiAxMi41IDZIOS41QzkuMjIzODYgNiA5IDUuNzc2MTQgOSA1LjVWMi41QzkgMi4yMjM4NiA5LjIyMzg2IDIgOS41IDJaTTIgOS41QzIgOS4yMjM4NiAyLjIyMzg2IDkgMi41IDlINS41QzUuNzc2MTQgOSA2IDkuMjIzODYgNiA5LjVWMTIuNUM2IDEyLjc3NjEgNS43NzYxNCAxMyA1LjUgMTNDNS4yMjM4NiAxMyA1IDEyLjc3NjEgNSAxMi41VjEwSDIuNUMyLjIyMzg2IDEwIDIgOS43NzYxNCAyIDkuNVpNOSA5LjVDOSA5LjIyMzg2IDkuMjIzODYgOSA5LjUgOUgxMi41QzEyLjc3NjEgOSAxMyA5LjIyMzg2IDEzIDkuNUMxMyA5Ljc3NjE0IDEyLjc3NjEgMTAgMTIuNSAxMEgxMFYxMi41QzEwIDEyLjc3NjEgOS43NzYxNCAxMyA5LjUgMTNDOS4yMjM4NiAxMyA5IDEyLjc3NjEgOSAxMi41VjkuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGJ0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zIDJDMi40NDc3MiAyIDIgMi40NDc3MiAyIDNWMTJDMiAxMi41NTIzIDIuNDQ3NzIgMTMgMyAxM0gxMkMxMi41NTIzIDEzIDEzIDEyLjU1MjMgMTMgMTJWOC41QzEzIDguMjIzODYgMTIuNzc2MSA4IDEyLjUgOEMxMi4yMjM5IDggMTIgOC4yMjM4NiAxMiA4LjVWMTJIM1YzTDYuNSAzQzYuNzc2MTQgMyA3IDIuNzc2MTQgNyAyLjVDNyAyLjIyMzg2IDYuNzc2MTQgMiA2LjUgMkgzWk0xMi44NTM2IDIuMTQ2NDVDMTIuOTAxNSAyLjE5NDM5IDEyLjkzNzcgMi4yNDk2NCAxMi45NjIxIDIuMzA4NjFDMTIuOTg2MSAyLjM2NjY5IDEyLjk5OTYgMi40MzAzIDEzIDIuNDk3TDEzIDIuNVYyLjUwMDQ5VjUuNUMxMyA1Ljc3NjE0IDEyLjc3NjEgNiAxMi41IDZDMTIuMjIzOSA2IDEyIDUuNzc2MTQgMTIgNS41VjMuNzA3MTFMNi44NTM1NSA4Ljg1MzU1QzYuNjU4MjkgOS4wNDg4MiA2LjM0MTcxIDkuMDQ4ODIgNi4xNDY0NSA4Ljg1MzU1QzUuOTUxMTggOC42NTgyOSA1Ljk1MTE4IDguMzQxNzEgNi4xNDY0NSA4LjE0NjQ1TDExLjI5MjkgM0g5LjVDOS4yMjM4NiAzIDkgMi43NzYxNCA5IDIuNUM5IDIuMjIzODYgOS4yMjM4NiAyIDkuNSAySDEyLjQ5OTlIMTIuNUMxMi41Njc4IDIgMTIuNjMyNCAyLjAxMzQ5IDEyLjY5MTQgMi4wMzc5NEMxMi43NTA0IDIuMDYyMzQgMTIuODA1NiAyLjA5ODUxIDEyLjg1MzYgMi4xNDY0NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHh0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xNC43NjQ5IDYuMDc1OTVDMTQuOTk5MSA2LjIyMjMxIDE1LjA3MDMgNi41MzA3OCAxNC45MjM5IDYuNzY0OTVDMTQuNDg0OSA3LjQ2NzQyIDEzLjk2MzIgOC4xMDY0NCAxMy4zNzAyIDguNjYzMDRMMTQuNTcxMiA5Ljg2NDA1QzE0Ljc2NjQgMTAuMDU5MyAxNC43NjY0IDEwLjM3NTkgMTQuNTcxMiAxMC41NzEyQzE0LjM3NTkgMTAuNzY2NCAxNC4wNTkzIDEwLjc2NjQgMTMuODY0MSAxMC41NzEyTDEyLjYwMTEgOS4zMDgxNkMxMS44MDQ5IDkuOTAyODIgMTAuOTA4OSAxMC4zNjIxIDkuOTMzNzQgMTAuNjUxTDEwLjM4MyAxMi4zMjc2QzEwLjQ1NDQgMTIuNTk0NCAxMC4yOTYxIDEyLjg2ODUgMTAuMDI5NCAxMi45NEM5Ljc2MjY2IDEzLjAxMTUgOS40ODg1IDEyLjg1MzIgOS40MTcwMyAxMi41ODY0TDguOTU5MTYgMTAuODc3NUM4LjQ4NzQyIDEwLjk1OCA4LjAwMDM1IDEwLjk5OTkgNy41IDEwLjk5OTlDNi45OTk2NCAxMC45OTk5IDYuNTEyNTcgMTAuOTU4IDYuMDQwODIgMTAuODc3NUw1LjU4Mjk5IDEyLjU4NjRDNS41MTE1MyAxMi44NTMyIDUuMjM3MzcgMTMuMDExNSA0Ljk3MDYzIDEyLjk0QzQuNzAzOSAxMi44Njg1IDQuNTQ1NiAxMi41OTQ0IDQuNjE3MDYgMTIuMzI3N0w1LjA2NjI0IDEwLjY1MUM0LjA5MTExIDEwLjM2MjEgMy4xOTUwMyA5LjkwMjgxIDIuMzk4OSA5LjMwODE0TDEuMTM1OSAxMC41NzExQzAuOTQwNjM4IDEwLjc2NjQgMC42MjQwNTggMTAuNzY2NCAwLjQyODc5NyAxMC41NzExQzAuMjMzNTM3IDEwLjM3NTkgMC4yMzM1MzcgMTAuMDU5MyAwLjQyODc5NyA5Ljg2NDA0TDEuNjI5ODIgOC42NjMwMkMxLjAzNjgyIDguMTA2NDMgMC41MTUxMTMgNy40Njc0MiAwLjA3NjA2NzcgNi43NjQ5NUMtMC4wNzAyODY3IDYuNTMwNzggMC4wMDA4OTg1NDQgNi4yMjIzMSAwLjIzNTA2NCA2LjA3NTk1QzAuNDY5MjMgNS45Mjk2IDAuNzc3NzAzIDYuMDAwNzggMC45MjQwNTcgNi4yMzQ5NUMxLjQwMzU0IDcuMDAyMTIgMS45ODkgNy42ODA1NiAyLjY2MjMzIDguMjQyN0MyLjY3MzE1IDguMjUwOTYgMi42ODM3IDguMjU5NzEgMi42OTM5NyA4LjI2ODk3QzQuMDA4OTcgOS4zNTUyNyA1LjY1NTM2IDkuOTk5OSA3LjUgOS45OTk5QzEwLjMwNzggOS45OTk5IDEyLjY1NjMgOC41MDYyOSAxNC4wNzU5IDYuMjM0OTVDMTQuMjIyMyA2LjAwMDc4IDE0LjUzMDggNS45Mjk2IDE0Ljc2NDkgNi4wNzU5NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LF90PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMy4zNTM2IDIuMzUzNTVDMTMuNTQ4OCAyLjE1ODI5IDEzLjU0ODggMS44NDE3MSAxMy4zNTM2IDEuNjQ2NDVDMTMuMTU4MyAxLjQ1MTE4IDEyLjg0MTcgMS40NTExOCAxMi42NDY0IDEuNjQ2NDVMMTAuNjgyOCAzLjYxMDEyQzkuNzA2NTIgMy4yMTY3MSA4LjYzNzU5IDMgNy41IDNDNC4zMDc4NiAzIDEuNjU2MzkgNC43MDYzOCAwLjA3NjAwMDIgNy4yMzUwMUMtMC4wMjUzMzM4IDcuMzk3MTUgLTAuMDI1MzMzNCA3LjYwMjg4IDAuMDc2MDAxNCA3Ljc2NTAxQzAuOTAyOTQ1IDkuMDg4MTIgMi4wMjMxNCAxMC4xODYxIDMuMzYwNjEgMTAuOTMyM0wxLjY0NjQ1IDEyLjY0NjRDMS40NTExOCAxMi44NDE3IDEuNDUxMTggMTMuMTU4MyAxLjY0NjQ1IDEzLjM1MzZDMS44NDE3MSAxMy41NDg4IDIuMTU4MjkgMTMuNTQ4OCAyLjM1MzU1IDEzLjM1MzZMNC4zMTcyMyAxMS4zODk5QzUuMjkzNDggMTEuNzgzMyA2LjM2MjQxIDEyIDcuNSAxMkMxMC42OTIxIDEyIDEzLjM0MzYgMTAuMjkzNiAxNC45MjQgNy43NjUwMUMxNS4wMjUzIDcuNjAyODggMTUuMDI1MyA3LjM5NzE1IDE0LjkyNCA3LjIzNTAxQzE0LjA5NzEgNS45MTE5IDEyLjk3NjkgNC44MTM5MSAxMS42Mzk0IDQuMDY3NzFMMTMuMzUzNiAyLjM1MzU1Wk05LjkwNDI4IDQuMzg4NjFDOS4xNTMzMiA0LjEzNjEgOC4zNDc1OSA0IDcuNSA0QzQuODAyODUgNCAyLjUyOTUyIDUuMzc4MTYgMS4wOTYyMiA3LjUwMDAxQzEuODcyODQgOC42NDk3IDIuODk2MDkgOS41ODEwNiA0LjA5OTc0IDEwLjE5MzFMOS45MDQyOCA0LjM4ODYxWk01LjA5NTcyIDEwLjYxMTRMMTAuOTAwMyA0LjgwNjg1QzEyLjEwMzkgNS40MTg5NCAxMy4xMjcyIDYuMzUwMzEgMTMuOTAzOCA3LjUwMDAxQzEyLjQ3MDUgOS42MjE4MyAxMC4xOTcxIDExIDcuNSAxMUM2LjY1MjQxIDExIDUuODQ2NjggMTAuODYzOSA1LjA5NTcyIDEwLjYxMTRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxPdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41IDExQzQuODAyODUgMTEgMi41Mjk1MiA5LjYyMTg0IDEuMDk2MjIgNy41MDAwMUMyLjUyOTUyIDUuMzc4MTYgNC44MDI4NSA0IDcuNSA0QzEwLjE5NzEgNCAxMi40NzA1IDUuMzc4MTYgMTMuOTAzOCA3LjUwMDAxQzEyLjQ3MDUgOS42MjE4MyAxMC4xOTcxIDExIDcuNSAxMVpNNy41IDNDNC4zMDc4NiAzIDEuNjU2MzkgNC43MDYzOCAwLjA3NjAwMDIgNy4yMzUwMUMtMC4wMjUzMzM4IDcuMzk3MTUgLTAuMDI1MzMzNCA3LjYwMjg4IDAuMDc2MDAxNCA3Ljc2NTAxQzEuNjU2MzkgMTAuMjkzNiA0LjMwNzg2IDEyIDcuNSAxMkMxMC42OTIxIDEyIDEzLjM0MzYgMTAuMjkzNiAxNC45MjQgNy43NjUwMUMxNS4wMjUzIDcuNjAyODggMTUuMDI1MyA3LjM5NzE1IDE0LjkyNCA3LjIzNTAxQzEzLjM0MzYgNC43MDYzOCAxMC42OTIxIDMgNy41IDNaTTcuNSA5LjVDOC42MDQ1NyA5LjUgOS41IDguNjA0NTcgOS41IDcuNUM5LjUgNi4zOTU0MyA4LjYwNDU3IDUuNSA3LjUgNS41QzYuMzk1NDMgNS41IDUuNSA2LjM5NTQzIDUuNSA3LjVDNS41IDguNjA0NTcgNi4zOTU0MyA5LjUgNy41IDkuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEx0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTkxIDAuODc2ODkyQzMuODQyMjIgMC44NzY4OTIgMC44NzcwNzUgMy44NDIwNCAwLjg3NzA3NSA3LjQ5OTcyQzAuODc3MDc1IDExLjE1NzQgMy44NDIyMiAxNC4xMjI2IDcuNDk5OTEgMTQuMTIyNkMxMS4xNTc2IDE0LjEyMjYgMTQuMTIyNyAxMS4xNTc0IDE0LjEyMjcgNy40OTk3MkMxNC4xMjI3IDMuODQyMDQgMTEuMTU3NiAwLjg3Njg5MiA3LjQ5OTkxIDAuODc2ODkyWk0xLjgyNzA4IDcuNDk5NzJDMS44MjcwOCA0LjM2NjcxIDQuMzY2ODkgMS44MjY4OSA3LjQ5OTkxIDEuODI2ODlDMTAuNjMyOSAxLjgyNjg5IDEzLjE3MjcgNC4zNjY3MSAxMy4xNzI3IDcuNDk5NzJDMTMuMTcyNyAxMC42MzI3IDEwLjYzMjkgMTMuMTcyNiA3LjQ5OTkxIDEzLjE3MjZDNC4zNjY4OSAxMy4xNzI2IDEuODI3MDggMTAuNjMyNyAxLjgyNzA4IDcuNDk5NzJaTTUuMDM3NDcgOS4yMTM5NUM0Ljg3OTQ5IDguOTg3NDYgNC41Njc4MiA4LjkzMTkzIDQuMzQxMzMgOS4wODk5MUM0LjExNDg0IDkuMjQ3ODkgNC4wNTkzMSA5LjU1OTU2IDQuMjE3MjkgOS43ODYwNUM0LjkzOTI2IDEwLjgyMTEgNi4xNDAzMyAxMS41IDcuNTAwMDQgMTEuNUM4Ljg1OTc0IDExLjUgMTAuMDYwOCAxMC44MjExIDEwLjc4MjggOS43ODYwNUMxMC45NDA4IDkuNTU5NTYgMTAuODg1MiA5LjI0Nzg5IDEwLjY1ODcgOS4wODk5MUMxMC40MzIzIDguOTMxOTMgMTAuMTIwNiA4Ljk4NzQ2IDkuOTYyNiA5LjIxMzk1QzkuNDE5NjMgOS45OTIzOCA4LjUxOTA3IDEwLjUgNy41MDAwNCAxMC41QzYuNDgxIDEwLjUgNS41ODA0NCA5Ljk5MjM4IDUuMDM3NDcgOS4yMTM5NVpNNS4zNzUwMyA2Ljg0OTk4QzUuODU4MjggNi44NDk5OCA2LjI1MDAzIDYuNDU4MTUgNi4yNTAwMyA1Ljk3NDk4QzYuMjUwMDMgNS40OTE4IDUuODU4MjggNS4wOTk5OCA1LjM3NTAzIDUuMDk5OThDNC44OTE3OSA1LjA5OTk4IDQuNTAwMDMgNS40OTE4IDQuNTAwMDMgNS45NzQ5OEM0LjUwMDAzIDYuNDU4MTUgNC44OTE3OSA2Ljg0OTk4IDUuMzc1MDMgNi44NDk5OFpNMTAuNSA1Ljk3NDk4QzEwLjUgNi40NTgxNSAxMC4xMDgzIDYuODQ5OTggOS42MjUwMyA2Ljg0OTk4QzkuMTQxNzkgNi44NDk5OCA4Ljc1MDAzIDYuNDU4MTUgOC43NTAwMyA1Ljk3NDk4QzguNzUwMDMgNS40OTE4IDkuMTQxNzkgNS4wOTk5OCA5LjYyNTAzIDUuMDk5OThDMTAuMTA4MyA1LjA5OTk4IDEwLjUgNS40OTE4IDEwLjUgNS45NzQ5OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEV0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjAwMDA1IDIuMDQ5OTlINS41MjUwNUM0LjcxMDQzIDIuMDQ5OTkgNC4wNTAwNSAyLjcxMDM3IDQuMDUwMDUgMy41MjQ5OUM0LjA1MDA1IDQuMzM5NjEgNC43MTA0MyA0Ljk5OTk5IDUuNTI1MDUgNC45OTk5OUg3LjAwMDA1VjIuMDQ5OTlaTTcuMDAwMDUgMS4wNDk5OUg4LjAwMDA1SDkuNDc1MDVDMTAuODQyIDEuMDQ5OTkgMTEuOTUgMi4xNTgwOCAxMS45NSAzLjUyNDk5QzExLjk1IDQuMzMxNjMgMTEuNTY0MiA1LjA0ODE1IDEwLjk2NjkgNS40OTk5OUMxMS41NjQyIDUuOTUxODQgMTEuOTUgNi42NjgzNiAxMS45NSA3LjQ3NUMxMS45NSA4Ljg0MTkgMTAuODQyIDkuOTUgOS40NzUwNSA5Ljk1QzguOTIyMzYgOS45NSA4LjQxMTk4IDkuNzY4ODQgOC4wMDAwNSA5LjQ2MjY2VjkuOTVMOC4wMDAwNSAxMS40MjVDOC4wMDAwNSAxMi43OTE5IDYuODkxOTUgMTMuOSA1LjUyNTA1IDEzLjlDNC4xNTgxNCAxMy45IDMuMDUwMDUgMTIuNzkxOSAzLjA1MDA1IDExLjQyNUMzLjA1MDA1IDEwLjYxODMgMy40MzU5MyA5LjkwMTg0IDQuMDMzMTcgOS40NDk5OUMzLjQzNTkzIDguOTk4MTQgMy4wNTAwNSA4LjI4MTYzIDMuMDUwMDUgNy40NzVDMy4wNTAwNSA2LjY2ODM2IDMuNDM1OTQgNS45NTE4NCA0LjAzMzE5IDUuNUMzLjQzNTk0IDUuMDQ4MTUgMy4wNTAwNSA0LjMzMTYzIDMuMDUwMDUgMy41MjQ5OUMzLjA1MDA1IDIuMTU4MDggNC4xNTgxNCAxLjA0OTk5IDUuNTI1MDUgMS4wNDk5OUg3LjAwMDA1Wk04LjAwMDA1IDIuMDQ5OTlWNC45OTk5OUg5LjQ3NTA1QzEwLjI4OTcgNC45OTk5OSAxMC45NSA0LjMzOTYxIDEwLjk1IDMuNTI0OTlDMTAuOTUgMi43MTAzNyAxMC4yODk3IDIuMDQ5OTkgOS40NzUwNSAyLjA0OTk5SDguMDAwMDVaTTUuNTI1MDUgOC45NDk5OEg3LjAwMDA1TDcuMDAwMDUgNy40Nzg4TDcuMDAwMDUgNy40NzVMNy4wMDAwNSA3LjQ3MTJWNkg1LjUyNTA1QzQuNzEwNDMgNiA0LjA1MDA1IDYuNjYwMzggNC4wNTAwNSA3LjQ3NUM0LjA1MDA1IDguMjg3NjcgNC43MDcyNyA4Ljk0Njg0IDUuNTE5MiA4Ljk0OTk5TDUuNTI1MDUgOC45NDk5OFpNNC4wNTAwNSAxMS40MjVDNC4wNTAwNSAxMC42MTIzIDQuNzA3MjcgOS45NTMxNSA1LjUxOTIgOS45NDk5OUw1LjUyNTA1IDkuOTVINy4wMDAwNUw3LjAwMDA1IDExLjQyNUM3LjAwMDA1IDEyLjIzOTYgNi4zMzk2NyAxMi45IDUuNTI1MDUgMTIuOUM0LjcxMDQzIDEyLjkgNC4wNTAwNSAxMi4yMzk2IDQuMDUwMDUgMTEuNDI1Wk04LjAwMDA1IDcuNDcyMDZDOC4wMDE2NCA2LjY1ODc5IDguNjYxNDEgNiA5LjQ3NTA1IDZDMTAuMjg5NyA2IDEwLjk1IDYuNjYwMzggMTAuOTUgNy40NzVDMTAuOTUgOC4yODk2MiAxMC4yODk3IDguOTUgOS40NzUwNSA4Ljk1QzguNjYxNDEgOC45NSA4LjAwMTY0IDguMjkxMjEgOC4wMDAwNSA3LjQ3Nzk0VjcuNDcyMDZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxTdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy41IDJDMy4yMjM4NiAyIDMgMi4yMjM4NiAzIDIuNVYxMi41QzMgMTIuNzc2MSAzLjIyMzg2IDEzIDMuNSAxM0gxMS41QzExLjc3NjEgMTMgMTIgMTIuNzc2MSAxMiAxMi41VjZIOC41QzguMjIzODYgNiA4IDUuNzc2MTQgOCA1LjVWMkgzLjVaTTkgMi43MDcxMUwxMS4yOTI5IDVIOVYyLjcwNzExWk0yIDIuNUMyIDEuNjcxNTcgMi42NzE1NyAxIDMuNSAxSDguNUM4LjYzMjYxIDEgOC43NTk3OSAxLjA1MjY4IDguODUzNTUgMS4xNDY0NUwxMi44NTM2IDUuMTQ2NDVDMTIuOTQ3MyA1LjI0MDIxIDEzIDUuMzY3MzkgMTMgNS41VjEyLjVDMTMgMTMuMzI4NCAxMi4zMjg0IDE0IDExLjUgMTRIMy41QzIuNjcxNTcgMTQgMiAxMy4zMjg0IDIgMTIuNVYyLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxqdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMyAyLjVDMyAyLjIyMzg2IDMuMjIzODYgMiAzLjUgMkg5LjI5Mjg5TDEyIDQuNzA3MTFWMTIuNUMxMiAxMi43NzYxIDExLjc3NjEgMTMgMTEuNSAxM0gzLjVDMy4yMjM4NiAxMyAzIDEyLjc3NjEgMyAxMi41VjIuNVpNMy41IDFDMi42NzE1NyAxIDIgMS42NzE1NyAyIDIuNVYxMi41QzIgMTMuMzI4NCAyLjY3MTU3IDE0IDMuNSAxNEgxMS41QzEyLjMyODQgMTQgMTMgMTMuMzI4NCAxMyAxMi41VjQuNjAzNTVDMTMgNC40MDQ2NCAxMi45MjEgNC4yMTM4OCAxMi43ODAzIDQuMDczMjJMOS44NTM1NSAxLjE0NjQ1QzkuNzU5NzkgMS4wNTI2OCA5LjYzMjYxIDEgOS41IDFIMy41Wk01LjI1IDdDNC45NzM4NiA3IDQuNzUgNy4yMjM4NiA0Ljc1IDcuNUM0Ljc1IDcuNzc2MTQgNC45NzM4NiA4IDUuMjUgOEg5Ljc1QzEwLjAyNjEgOCAxMC4yNSA3Ljc3NjE0IDEwLjI1IDcuNUMxMC4yNSA3LjIyMzg2IDEwLjAyNjEgNyA5Ljc1IDdINS4yNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE10PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjUgMkMzLjIyMzg2IDIgMyAyLjIyMzg2IDMgMi41VjEyLjVDMyAxMi43NzYxIDMuMjIzODYgMTMgMy41IDEzSDExLjVDMTEuNzc2MSAxMyAxMiAxMi43NzYxIDEyIDEyLjVWNC43MDcxMUw5LjI5Mjg5IDJIMy41Wk0yIDIuNUMyIDEuNjcxNTcgMi42NzE1NyAxIDMuNSAxSDkuNUM5LjYzMjYxIDEgOS43NTk3OSAxLjA1MjY4IDkuODUzNTUgMS4xNDY0NUwxMi43ODAzIDQuMDczMjJDMTIuOTIxIDQuMjEzODggMTMgNC40MDQ2NCAxMyA0LjYwMzU1VjEyLjVDMTMgMTMuMzI4NCAxMi4zMjg0IDE0IDExLjUgMTRIMy41QzIuNjcxNTcgMTQgMiAxMy4zMjg0IDIgMTIuNVYyLjVaTTQuNzUgNy41QzQuNzUgNy4yMjM4NiA0Ljk3Mzg2IDcgNS4yNSA3SDdWNS4yNUM3IDQuOTczODYgNy4yMjM4NiA0Ljc1IDcuNSA0Ljc1QzcuNzc2MTQgNC43NSA4IDQuOTczODYgOCA1LjI1VjdIOS43NUMxMC4wMjYxIDcgMTAuMjUgNy4yMjM4NiAxMC4yNSA3LjVDMTAuMjUgNy43NzYxNCAxMC4wMjYxIDggOS43NSA4SDhWOS43NUM4IDEwLjAyNjEgNy43NzYxNCAxMC4yNSA3LjUgMTAuMjVDNy4yMjM4NiAxMC4yNSA3IDEwLjAyNjEgNyA5Ljc1VjhINS4yNUM0Ljk3Mzg2IDggNC43NSA3Ljc3NjE0IDQuNzUgNy41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sa3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMgMi41QzMgMi4yMjM4NiAzLjIyMzg2IDIgMy41IDJIOS4wODU3OUM5LjIxODM5IDIgOS4zNDU1NyAyLjA1MjY4IDkuNDM5MzQgMi4xNDY0NUwxMS44NTM2IDQuNTYwNjZDMTEuOTQ3MyA0LjY1NDQzIDEyIDQuNzgxNjEgMTIgNC45MTQyMVYxMi41QzEyIDEyLjc3NjEgMTEuNzc2MSAxMyAxMS41IDEzSDMuNUMzLjIyMzg2IDEzIDMgMTIuNzc2MSAzIDEyLjVWMi41Wk0zLjUgMUMyLjY3MTU3IDEgMiAxLjY3MTU3IDIgMi41VjEyLjVDMiAxMy4zMjg0IDIuNjcxNTcgMTQgMy41IDE0SDExLjVDMTIuMzI4NCAxNCAxMyAxMy4zMjg0IDEzIDEyLjVWNC45MTQyMUMxMyA0LjUxNjM5IDEyLjg0MiA0LjEzNDg2IDEyLjU2MDcgMy44NTM1NUwxMC4xNDY0IDEuNDM5MzRDOS44NjUxNCAxLjE1ODA0IDkuNDgzNjEgMSA5LjA4NTc5IDFIMy41Wk00LjUgNEM0LjIyMzg2IDQgNCA0LjIyMzg2IDQgNC41QzQgNC43NzYxNCA0LjIyMzg2IDUgNC41IDVINy41QzcuNzc2MTQgNSA4IDQuNzc2MTQgOCA0LjVDOCA0LjIyMzg2IDcuNzc2MTQgNCA3LjUgNEg0LjVaTTQuNSA3QzQuMjIzODYgNyA0IDcuMjIzODYgNCA3LjVDNCA3Ljc3NjE0IDQuMjIzODYgOCA0LjUgOEgxMC41QzEwLjc3NjEgOCAxMSA3Ljc3NjE0IDExIDcuNUMxMSA3LjIyMzg2IDEwLjc3NjEgNyAxMC41IDdINC41Wk00LjUgMTBDNC4yMjM4NiAxMCA0IDEwLjIyMzkgNCAxMC41QzQgMTAuNzc2MSA0LjIyMzg2IDExIDQuNSAxMUgxMC41QzEwLjc3NjEgMTEgMTEgMTAuNzc2MSAxMSAxMC41QzExIDEwLjIyMzkgMTAuNzc2MSAxMCAxMC41IDEwSDQuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFJ0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjEwNTA1IDEyQzQuNzA4MDUgMTIgNC40MjM2IDExLjkxMiA0LjI1MTcxIDExLjczNkM0LjA4MzkgMTEuNTU1OSA0IDExLjI3MTUgNCAxMC44ODI3VjQuMTE3MzNDNCAzLjcyMDMzIDQuMDg1OTUgMy40MzU4OCA0LjI1Nzg0IDMuMjYzOThDNC40MzM4MyAzLjA4Nzk5IDQuNzE2MjMgMyA1LjEwNTA1IDNDNi40Mjc0MSAzIDguMjU1OTEgMyA5LjAyODUyIDNDMTAuMTM3MyAzIDExLjA1MzkgMy45ODE1MyAxMS4wNTM5IDUuMTg0NkMxMS4wNTM5IDYuMDg1MDEgMTAuNjAzNyA2LjgxODU1IDkuNzAzMjcgNy4yMzYwMkMxMC44NjU3IDcuNDQ4NTEgMTEuNTE3NiA4LjYyNzg3IDExLjUxNzYgOS40ODEyOEMxMS41MTc2IDEwLjUxMjUgMTAuOTkwMiAxMiA5LjI3NzM0IDEyQzguNzc3NDIgMTIgNi40MjYyNiAxMiA1LjEwNTA1IDEyWk04LjM3ODkxIDguMDAzNDFINS44VjEwLjYzMUg4LjM3ODkxQzguOSAxMC42MzEgOS42Mjk2IDEwLjEyMTEgOS42Mjk2IDkuMjk4NzdDOS42Mjk2IDguNDc2NDMgOC45IDguMDAzNDEgOC4zNzg5MSA4LjAwMzQxWk01LjggNC4zNjkwM1Y2LjY5NTc3SDguMTc5NjlDOC41MzkwNiA2LjY5NTc3IDkuMjc3MzQgNi4zNTkzOSA5LjI3NzM0IDUuNTAwMDJDOS4yNzczNCA0LjY0MDY0IDguNDgwNDcgNC4zNjkwMyA4LjE3OTY5IDQuMzY5MDNINS44WlwiLGZpbGw6bn0pKX0sUHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuNSA0LjVDMi41IDMuMDk4ODYgMy41OTg4NiAyIDUgMkgxMi40OTlDMTIuNzc1MiAyIDEzIDIuMjIzODYgMTMgMi41QzEzIDIuNzc2MTQgMTIuNzc2MSAzIDEyLjUgM0g4LjY5MjQ0TDguNDA1MDkgMy44NTQ1OEM4LjE4ODY5IDQuNDk3NTIgNy44OTQwMSA1LjM3MTk3IDcuNTgwOTEgNi4yOTc5NEM3LjUwMjU5IDYuNTI5NTYgNy40MjMwOCA2Ljc2NDUzIDcuMzQzMzIgN0g4LjVDOC43NzYxNCA3IDkgNy4yMjM4NiA5IDcuNUM5IDcuNzc2MTQgOC43NzYxNCA4IDguNSA4SDcuMDA0MDdDNi41NjcyNCA5LjI4NTQzIDYuMTY0MzUgMTAuNDYxMyA1Ljk1Nzk5IDExLjAzODZDNS42MzYyNyAxMS45Mzg2IDUuMjA3MTIgMTIuNDg1NyA0LjY2NzQxIDEyLjc3NzhDNC4xNjMzNSAxMy4wNTA3IDMuNjQxNTQgMTMuMDUwMyAzLjI4Mzc4IDEzLjA1TDMuMjUgMTMuMDVDMi45NDYyNCAxMy4wNSAyLjcgMTIuODAzNyAyLjcgMTIuNUMyLjcgMTIuMTk2MiAyLjk0NjI0IDExLjk1IDMuMjUgMTEuOTVDMy42NDE4MiAxMS45NSAzLjkwMzUgMTEuOTQwNSA0LjE0Mzc0IDExLjgxMDVDNC4zNjQ0MyAxMS42OTEgNC42NTUzMiAxMS40MTQ4IDQuOTIyMTcgMTAuNjY4M0M1LjEwNjk1IDEwLjE1MTQgNS40NTM3NSA5LjE0MTM0IDUuODQyMiA4SDQuNUM0LjIyMzg2IDggNCA3Ljc3NjE0IDQgNy41QzQgNy4yMjM4NiA0LjIyMzg2IDcgNC41IDdINi4xODE4N0M2LjMwMTI3IDYuNjQ3ODUgNi40MjEzMiA2LjI5MzIzIDYuNTM4ODcgNS45NDU1OUM2Ljg1MTc1IDUuMDIwMjUgNy4xNDYyNyA0LjE0NjMxIDcuMzYyNTYgMy41MDM2OEw3LjUzMTkyIDNINUM0LjE1MTE0IDMgMy41IDMuNjUxMTQgMy41IDQuNUMzLjUgNC43NzYxNCAzLjI3NjE0IDUgMyA1QzIuNzIzODYgNSAyLjUgNC43NzYxNCAyLjUgNC41WlwiLGZpbGw6bn0pKX0sSXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUuNjc0OTQgMy41MDAxN0M1LjY3NDk0IDMuMjUxNjQgNS44NzY0MSAzLjA1MDE3IDYuMTI0OTQgMy4wNTAxN0gxMC42MjQ5QzEwLjg3MzUgMy4wNTAxNyAxMS4wNzQ5IDMuMjUxNjQgMTEuMDc0OSAzLjUwMDE3QzExLjA3NDkgMy43NDg3IDEwLjg3MzUgMy45NTAxNyAxMC42MjQ5IDMuOTUwMTdIOS4wMDU4N0w3LjIzMDkgMTEuMDVIOC44NzQ5M0M5LjEyMzQ1IDExLjA1IDkuMzI0OTMgMTEuMjUxNSA5LjMyNDkzIDExLjVDOS4zMjQ5MyAxMS43NDg2IDkuMTIzNDUgMTEuOTUgOC44NzQ5MyAxMS45NUg0LjM3NDkzQzQuMTI2NCAxMS45NSAzLjkyNDkzIDExLjc0ODYgMy45MjQ5MyAxMS41QzMuOTI0OTMgMTEuMjUxNSA0LjEyNjQgMTEuMDUgNC4zNzQ5MyAxMS4wNUg1Ljk5Mzk3TDcuNzY4OTQgMy45NTAxN0g2LjEyNDk0QzUuODc2NDEgMy45NTAxNyA1LjY3NDk0IDMuNzQ4NyA1LjY3NDk0IDMuNTAwMTdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxBdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC43OTk5MyAzLjUwMDE3QzQuNzk5OTMgMy4yNTE2NCA1LjAwMTQgMy4wNTAxNyA1LjI0OTkzIDMuMDUwMTdIOS43NDk5M0M5Ljk5ODQ1IDMuMDUwMTcgMTAuMTk5OSAzLjI1MTY0IDEwLjE5OTkgMy41MDAxN0MxMC4xOTk5IDMuNzQ4NyA5Ljk5ODQ1IDMuOTUwMTcgOS43NDk5MyAzLjk1MDE3SDguMDk5OTNWMTEuMDVIOS43NDk5NEM5Ljk5ODQ3IDExLjA1IDEwLjE5OTkgMTEuMjUxNSAxMC4xOTk5IDExLjVDMTAuMTk5OSAxMS43NDg2IDkuOTk4NDcgMTEuOTUgOS43NDk5NCAxMS45NUg1LjI0OTk0QzUuMDAxNDEgMTEuOTUgNC43OTk5NCAxMS43NDg2IDQuNzk5OTQgMTEuNUM0Ljc5OTk0IDExLjI1MTUgNS4wMDE0MSAxMS4wNSA1LjI0OTk0IDExLjA1SDYuODk5OTNWMy45NTAxN0g1LjI0OTkzQzUuMDAxNCAzLjk1MDE3IDQuNzk5OTMgMy43NDg3IDQuNzk5OTMgMy41MDAxN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFR0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjc4MjMzIDIuMjE3MDdDMi43MDczMiAyLjE0MjA2IDIuNjA1NTcgMi4wOTk5MSAyLjQ5OTQ5IDIuMDk5OTFDMi4zOTM0IDIuMDk5OTEgMi4yOTE2NiAyLjE0MjA2IDIuMjE2NjQgMi4yMTcwN0wwLjIxNjY0NSA0LjIxNzA3QzAuMDYwNDM1MSA0LjM3MzI4IDAuMDYwNDM1MSA0LjYyNjU1IDAuMjE2NjQ1IDQuNzgyNzZDMC4zNzI4NTUgNC45Mzg5NyAwLjYyNjEyMSA0LjkzODk3IDAuNzgyMzMgNC43ODI3NkwyLjA5OTQ5IDMuNDY1NkwyLjA5OTQ5IDExLjUzNDJMMC43ODIzMyAxMC4yMTcxQzAuNjI2MTIgMTAuMDYwOSAwLjM3Mjg1NCAxMC4wNjA5IDAuMjE2NjQ1IDEwLjIxNzFDMC4wNjA0MzQ5IDEwLjM3MzMgMC4wNjA0MzQ5IDEwLjYyNjUgMC4yMTY2NDUgMTAuNzgyOEwyLjIxNjY0IDEyLjc4MjhDMi4yOTE2NiAxMi44NTc4IDIuMzkzNCAxMi44OTk5IDIuNDk5NDkgMTIuODk5OUMyLjYwNTU3IDEyLjg5OTkgMi43MDczMSAxMi44NTc4IDIuNzgyMzMgMTIuNzgyOEw0Ljc4MjMzIDEwLjc4MjhDNC45Mzg1NCAxMC42MjY1IDQuOTM4NTQgMTAuMzczMyA0Ljc4MjMzIDEwLjIxNzFDNC42MjYxMiAxMC4wNjA5IDQuMzcyODUgMTAuMDYwOSA0LjIxNjY0IDEwLjIxNzFMMi44OTk0OSAxMS41MzQyTDIuODk5NDkgMy40NjU2TDQuMjE2NjQgNC43ODI3NkM0LjM3Mjg1IDQuOTM4OTcgNC42MjYxMiA0LjkzODk3IDQuNzgyMzMgNC43ODI3NkM0LjkzODU0IDQuNjI2NTUgNC45Mzg1NCA0LjM3MzI4IDQuNzgyMzMgNC4yMTcwN0wyLjc4MjMzIDIuMjE3MDdaTTEwLjUgMi43NDk5N0MxMC43MTA3IDIuNzQ5OTcgMTAuODk4OCAyLjg4MjExIDEwLjk3MDMgMy4wODAzNkwxMy45NzAzIDExLjM5OTlDMTQuMDY0IDExLjY1OTcgMTMuOTI5MyAxMS45NDYyIDEzLjY2OTYgMTIuMDM5OUMxMy40MDk4IDEyLjEzMzYgMTMuMTIzMyAxMS45OTg5IDEzLjAyOTYgMTEuNzM5MkwxMi4wNDc3IDkuMDE2SDguOTUyMjhMNy45NzAzMyAxMS43MzkyQzcuODc2NjYgMTEuOTk4OSA3LjU5MDEzIDEyLjEzMzYgNy4zMzAzNiAxMi4wMzk5QzcuMDcwNTkgMTEuOTQ2MiA2LjkzNTk1IDExLjY1OTcgNy4wMjk2MiAxMS4zOTk5TDEwLjAyOTYgMy4wODAzNkMxMC4xMDExIDIuODgyMTEgMTAuMjg5MiAyLjc0OTk3IDEwLjUgMi43NDk5N1pNMTAuNSA0LjcyMzk2TDExLjc0MTIgOC4xNjZIOS4yNTg3OUwxMC41IDQuNzIzOTZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxIdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS4wMzc5MSA5Ljk4MDc1QzAuOTM0Nzc3IDkuNjU4MyAxLjExNjAzIDkuMzc3MTkgMS40MDAwNSA5LjI0ODcxQzEuNjg0MDggOS4xMjAyMiAyLjA5NDYzIDkuMTM0MTIgMi4yNzA3MSA5LjQ1NDI2QzIuODUzOTMgMTAuNTE0NyAzLjY0NTk5IDEwLjcyODIgNC40ODY2NSAxMC43MjgyQzUuNTI3MjEgMTAuNzI4MiA2LjI5NjU5IDEwLjI2MTUgNi4yOTY1OSA5LjQ1NDI2QzYuMjk2NTkgOC44MDQ3IDUuOTExOSA4LjQ2NDE2IDQuODcxMzQgOC4xNDI1M0w0LjE1ODcyIDcuOTIxODFDMi42NDUxOCA3LjQ0ODgzIDEuODg4NDIgNi42OTIwNiAxLjg4ODQyIDUuNDU2MDFDMS44ODg0MiAzLjc5NzQzIDMuMjc1ODMgMi42ODc1IDUuMjQzNDIgMi42ODc1QzYuOTE3MzMgMi42ODc1IDcuOTc0MDkgMy4zMzUzNiA4LjQzODMzIDQuMzEwNjVDOC41NzA4NyA0LjU4OTA5IDguNTc2MTQgNC45MTI5NCA4LjIyNzk0IDUuMTkxMTRDNy44Nzk3NCA1LjQ2OTM0IDcuNTIzNTEgNS4zNDc5OSA3LjIzMzI3IDUuMDM4MzlDNi40NzIxNSA0LjIyNjUzIDUuOTk1NDUgNC4wNDk2OCA1LjI1NjA0IDQuMDQ5NjhDNC4xMzk4IDQuMDQ5NjggMy41NDcgNC42MzYxOCAzLjU0NyA1LjI3OTQzQzMuNTQ3IDUuODY1OTIgMy45NjMyMiA2LjIzMTY5IDQuOTQ3MDIgNi41MzQ0TDUuNjc4NTYgNi43NjE0M0M3LjIyOTk0IDcuMjM0NDEgNy45NzQwOSA3Ljk1OTY0IDcuOTc0MDkgOS4xNzA0N0M3Ljk3NDA5IDEwLjc3MjMgNi42OTM4OSAxMi4wOTAzIDQuNDYxNDMgMTIuMDkwM0MyLjg2NjEyIDEyLjA5MDMgMS40MDAwNSAxMS4xMTMxIDEuMDM3OTEgOS45ODA3NVpNMTEuODQ5MSA4Ljc3OTg1QzEwLjY2MSA4LjM5NTQzIDEwLjE2NDkgNy44NjExNCAxMC4xNjQ5IDYuOTg4MDVDMTAuMTY0OSA1Ljg2NzM2IDExLjE2MzYgNS4wNDYzOSAxMi42MTI4IDUuMDQ2MzlDMTMuODU0NiA1LjA0NjM5IDE0LjY2MjkgNS42MzM0NSAxNC45Nzc4IDYuNjM0NkMxNS4wNDQzIDYuODQ1OTkgMTQuOTU5MyA2Ljk4MDA2IDE0Ljc0NzUgNy4wNDkxQzE0LjUzOTQgNy4xMTY5NyAxNC4zMTc2IDcuMDk5NzQgMTQuMjM4IDYuODk2MTFDMTMuOTM1NiA2LjEyMjczIDEzLjM1MiA1Ljc2MzExIDEyLjU5OTggNS43NjMxMUMxMS42NDY3IDUuNzYzMTEgMTEuMDEzNSA2LjI1MTc4IDExLjAxMzUgNi45MTYzOEMxMS4wMTM1IDcuNDUwNjYgMTEuMzQ2NCA3Ljc1MDM4IDEyLjI0NzMgOC4wNDM1OEwxMi44MzQ4IDguMjMyNTRDMTQuMDYyIDguNjI5OTkgMTQuNTUxNiA5LjEzODIxIDE0LjU1MTYgMTAuMDE3OEMxNC41NTE2IDExLjE5NzIgMTMuNDgxIDEyLjA0NDIgMTEuOTkyNyAxMi4wNDQyQzEwLjY0MzkgMTIuMDQ0MiA5LjY1NjQ0IDExLjI4MDkgOS40MTk3OSAxMC4zMzYxQzkuMzY1MzUgMTAuMTE4OCA5LjQxMTkyIDEwLjAyODcgOS43MDAzOSA5Ljk2MTg0QzkuOTg4ODYgOS44OTQ5OSAxMC4wNzE0IDkuODk5MTggMTAuMTcxNSAxMC4xMzY5QzEwLjQ1NTUgMTAuODExNCAxMS4xNTMxIDExLjMyNzUgMTIuMDMxOCAxMS4zMjc1QzEyLjk5MTQgMTEuMzI3NSAxMy42ODM0IDEwLjc4MDIgMTMuNjgzNCAxMC4wNjM0QzEzLjY4MzQgOS41MzU2NyAxMy4zOTYxIDkuMjg4MDcgMTIuNDM2NiA4Ljk3NTMyTDExLjg0OTEgOC43Nzk4NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEJ0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMSAxLjVDMTEgMS4yMjM4NiAxMC43NzYxIDEgMTAuNSAxQzEwLjIyMzkgMSAxMCAxLjIyMzg2IDEwIDEuNVY0SDVWMS41QzUgMS4yMjM4NiA0Ljc3NjE0IDEgNC41IDFDNC4yMjM4NiAxIDQgMS4yMjM4NiA0IDEuNVY0SDEuNUMxLjIyMzg2IDQgMSA0LjIyMzg2IDEgNC41QzEgNC43NzYxNCAxLjIyMzg2IDUgMS41IDVINFYxMEgxLjVDMS4yMjM4NiAxMCAxIDEwLjIyMzkgMSAxMC41QzEgMTAuNzc2MSAxLjIyMzg2IDExIDEuNSAxMUg0VjEzLjVDNCAxMy43NzYxIDQuMjIzODYgMTQgNC41IDE0QzQuNzc2MTQgMTQgNSAxMy43NzYxIDUgMTMuNVYxMUgxMFYxMy41QzEwIDEzLjc3NjEgMTAuMjIzOSAxNCAxMC41IDE0QzEwLjc3NjEgMTQgMTEgMTMuNzc2MSAxMSAxMy41VjExSDEzLjVDMTMuNzc2MSAxMSAxNCAxMC43NzYxIDE0IDEwLjVDMTQgMTAuMjIzOSAxMy43NzYxIDEwIDEzLjUgMTBIMTFWNUgxMy41QzEzLjc3NjEgNSAxNCA0Ljc3NjE0IDE0IDQuNUMxNCA0LjIyMzg2IDEzLjc3NjEgNCAxMy41IDRIMTFWMS41Wk0xMCAxMFY1SDVWMTBIMTBaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxWdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy4zODI1IDEuMjk1NjdDMy40NjI0MSAxLjExNDMyIDMuNjQxODggMC45OTcyODQgMy44NDAwNSAwLjk5NzI4NEgxMS41QzExLjc3NjEgMC45OTcyODQgMTIgMS4yMjExNCAxMiAxLjQ5NzI4VjUuNUMxMiA1Ljc3NjE0IDExLjc3NjEgNiAxMS41IDZIOC42MzUyMUwxMS41Mjg4IDkuMTYyNDdDMTEuNjYyNiA5LjMwODcgMTEuNjk3NCA5LjUyMDE1IDExLjYxNzUgOS43MDE1NEMxMS41Mzc2IDkuODgyOTMgMTEuMzU4MiAxMCAxMS4xNiAxMEg4VjEzLjVDOCAxMy43MDIyIDcuODc4MTggMTMuODg0NSA3LjY5MTM0IDEzLjk2MTlDNy41MDQ1IDE0LjAzOTMgNy4yODk0NSAxMy45OTY2IDcuMTQ2NDUgMTMuODUzNkwzLjE0NjQ1IDkuODUzNTVDMy4wNTI2OCA5Ljc1OTc5IDMgOS42MzI2MSAzIDkuNVY1LjVDMyA1LjIyMzg2IDMuMjIzODYgNSAzLjUgNUg2LjM2NTMxTDMuNDcxMDUgMS44MzQ2OEMzLjMzNzMyIDEuNjg4NDQgMy4zMDI1OSAxLjQ3NzAxIDMuMzgyNSAxLjI5NTY3Wk03LjcyMDMyIDVMNC45NzQ3NCAxLjk5NzI4SDExVjVINy43MjAzMlpNNy4yNzk3OCA2SDRWOUg3LjVIMTAuMDI0N0w3LjI3OTc4IDZaTTQuNzA3MTEgMTBMNyAxMi4yOTI5VjEwSDQuNzA3MTFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxEdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy4wNzA5NSAwLjY1MDIzOEM2LjY3MzkxIDAuNjUwMjM4IDYuMzI5NzcgMC45MjUwOTYgNi4yNDE5OCAxLjMxMjMxTDYuMDAzOSAyLjM2MjQ3QzUuNjI0OSAyLjQ3MjY5IDUuMjYzMzUgMi42MjM2MyA0LjkyNDM2IDIuODEwMTNMNC4wMTMzNSAyLjIzNTg1QzMuNjc3NDggMi4wMjQxMyAzLjIzOTc4IDIuMDczMTIgMi45NTkwMyAyLjM1Mzg2TDIuMzUyOTQgMi45NTk5NkMyLjA3MjIgMy4yNDA3IDIuMDIzMiAzLjY3ODQgMi4yMzQ5MyA0LjAxNDI3TDIuODA5NDIgNC45MjU2MUMyLjYyMzA3IDUuMjY0NSAyLjQ3MjI3IDUuNjI1OTQgMi4zNjIxNiA2LjAwNDgxTDEuMzEyMDkgNi4yNDI4N0MwLjkyNDg4MyA2LjMzMDY1IDAuNjUwMDI0IDYuNjc0OCAwLjY1MDAyNCA3LjA3MTgzVjcuOTI4OTdDMC42NTAwMjQgOC4zMjYwMSAwLjkyNDg4MyA4LjY3MDE1IDEuMzEyMDkgOC43NTc5NEwyLjM2MjI4IDguOTk2MDNDMi40NzI0NiA5LjM3NSAyLjYyMzM1IDkuNzM2NTIgMi44MDk3OSAxMC4wNzU1TDIuMjM1NCAxMC45ODY3QzIuMDIzNjcgMTEuMzIyNSAyLjA3MjY3IDExLjc2MDIgMi4zNTM0MSAxMi4wNDFMMi45NTk1MSAxMi42NDcxQzMuMjQwMjUgMTIuOTI3OCAzLjY3Nzk1IDEyLjk3NjggNC4wMTM4MiAxMi43NjUxTDQuOTI1MDYgMTIuMTkwN0M1LjI2Mzg0IDEyLjM3NyA1LjYyNTE2IDEyLjUyNzggNi4wMDM5IDEyLjYzNzlMNi4yNDE5OCAxMy42ODgxQzYuMzI5NzcgMTQuMDc1MyA2LjY3MzkxIDE0LjM1MDIgNy4wNzA5NSAxNC4zNTAySDcuOTI4MDlDOC4zMjUxMiAxNC4zNTAyIDguNjY5MjcgMTQuMDc1MyA4Ljc1NzA1IDEzLjY4ODFMOC45OTUwNSAxMi42MzgzQzkuMzc0MTEgMTIuNTI4MiA5LjczNTczIDEyLjM3NzMgMTAuMDc0OCAxMi4xOTA5TDEwLjk4NiAxMi43NjUzQzExLjMyMTggMTIuOTc3IDExLjc1OTUgMTIuOTI4IDEyLjA0MDMgMTIuNjQ3M0wxMi42NDY0IDEyLjA0MTJDMTIuOTI3MSAxMS43NjA0IDEyLjk3NjEgMTEuMzIyNyAxMi43NjQ0IDEwLjk4NjlMMTIuMTkwMiAxMC4wNzZDMTIuMzc2OCA5LjczNjg4IDEyLjUyNzggOS4zNzUxNSAxMi42MzggOC45OTU5NkwxMy42ODc5IDguNzU3OTRDMTQuMDc1MSA4LjY3MDE1IDE0LjM1IDguMzI2MDEgMTQuMzUgNy45Mjg5N1Y3LjA3MTgzQzE0LjM1IDYuNjc0OCAxNC4wNzUxIDYuMzMwNjUgMTMuNjg3OSA2LjI0Mjg3TDEyLjYzODEgNi4wMDQ4OEMxMi41MjggNS42MjU3OCAxMi4zNzcxIDUuMjY0MTQgMTIuMTkwNiA0LjkyNTA3TDEyLjc2NDggNC4wMTQwN0MxMi45NzY2IDMuNjc4MiAxMi45Mjc2IDMuMjQwNSAxMi42NDY4IDIuOTU5NzVMMTIuMDQwNyAyLjM1MzY2QzExLjc2IDIuMDcyOTIgMTEuMzIyMyAyLjAyMzkyIDEwLjk4NjQgMi4yMzU2NUwxMC4wNzU1IDIuODA5ODlDOS43MzYyMiAyLjYyMzI4IDkuMzc0MzcgMi40NzIyOSA4Ljk5NTA1IDIuMzYyMDlMOC43NTcwNSAxLjMxMjMxQzguNjY5MjcgMC45MjUwOTYgOC4zMjUxMiAwLjY1MDIzOCA3LjkyODA5IDAuNjUwMjM4SDcuMDcwOTVaTTQuOTIwNTMgMy44MTI1MUM1LjQ0NzI0IDMuNDQzMzkgNi4wNTY2NSAzLjE4NDI0IDYuNzE1NDMgMy4wNjgzOUw3LjA3MDk1IDEuNTAwMjRINy45MjgwOUw4LjI4MzU1IDMuMDY4MTZDOC45NDI2NyAzLjE4Mzg3IDkuNTUyNCAzLjQ0MzAyIDEwLjA3OTQgMy44MTIyNEwxMS40Mzk3IDIuOTU0N0wxMi4wNDU4IDMuNTYwNzlMMTEuMTg4MiA0LjkyMTE3QzExLjU1NzMgNS40NDc5OCAxMS44MTY0IDYuMDU3NSAxMS45MzIxIDYuNzE2MzhMMTMuNSA3LjA3MTgzVjcuOTI4OTdMMTEuOTMyIDguMjg0NDRDMTEuODE2MiA4Ljk0MzQyIDExLjU1NyA5LjU1MzAxIDExLjE4NzggMTAuMDc5OEwxMi4wNDUzIDExLjQ0MDJMMTEuNDM5MiAxMi4wNDYyTDEwLjA3ODcgMTEuMTg4NkM5LjU1MTkyIDExLjU1NzYgOC45NDI0MSAxMS44MTY2IDguMjgzNTUgMTEuOTMyM0w3LjkyODA5IDEzLjUwMDJINy4wNzA5NUw2LjcxNTQzIDExLjkzMkM2LjA1NjkgMTEuODE2MiA1LjQ0NzcyIDExLjU1NzIgNC45MjExNiAxMS4xODgzTDMuNTYwNTUgMTIuMDQ2TDIuOTU0NDUgMTEuNDM5OUwzLjgxMjEzIDEwLjA3OTRDMy40NDMxIDkuNTUyNjYgMy4xODQwMyA4Ljk0MzI2IDMuMDY4MjUgOC4yODQ1TDEuNTAwMDIgNy45Mjg5N1Y3LjA3MTgzTDMuMDY4MTggNi43MTYzMkMzLjE4Mzg4IDYuMDU3NjUgMy40NDI4MyA1LjQ0ODMzIDMuODExNzEgNC45MjE2NUwyLjk1Mzk4IDMuNTYxTDMuNTYwMDggMi45NTQ5MUw0LjkyMDUzIDMuODEyNTFaTTkuMDI0OTYgNy41MDAwOEM5LjAyNDk2IDguMzQyMjYgOC4zNDIyMyA5LjAyNDk5IDcuNTAwMDUgOS4wMjQ5OUM2LjY1Nzg2IDkuMDI0OTkgNS45NzUxMyA4LjM0MjI2IDUuOTc1MTMgNy41MDAwOEM1Ljk3NTEzIDYuNjU3ODkgNi42NTc4NiA1Ljk3NTE2IDcuNTAwMDUgNS45NzUxNkM4LjM0MjIzIDUuOTc1MTYgOS4wMjQ5NiA2LjY1Nzg5IDkuMDI0OTYgNy41MDAwOFpNOS45MjQ5NiA3LjUwMDA4QzkuOTI0OTYgOC44MzkzMiA4LjgzOTI5IDkuOTI0OTkgNy41MDAwNSA5LjkyNDk5QzYuMTYwOCA5LjkyNDk5IDUuMDc1MTMgOC44MzkzMiA1LjA3NTEzIDcuNTAwMDhDNS4wNzUxMyA2LjE2MDg0IDYuMTYwOCA1LjA3NTE2IDcuNTAwMDUgNS4wNzUxNkM4LjgzOTI5IDUuMDc1MTYgOS45MjQ5NiA2LjE2MDg0IDkuOTI0OTYgNy41MDAwOFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFp0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTM2IDAuODUwMDA2QzMuODI3NjcgMC44NTAwMDYgMC44NDk5NzYgMy44MjczIDAuODQ5OTc2IDcuNTAwMjNDMC44NDk5NzYgMTAuNDM3OSAyLjc1NTIzIDEyLjkzMDYgNS4zOTc3NSAxMy44MTA0QzUuNzMwNDcgMTMuODcxMiA1Ljg1MTcxIDEzLjY2NTggNS44NTE3MSAxMy40ODk1QzUuODUxNzEgMTMuMzMxNSA1Ljg0NiAxMi45MTM1IDUuODQyNzMgMTIuMzU4N0MzLjk5MzAxIDEyLjc2MDQgMy42MDI3MyAxMS40NjcxIDMuNjAyNzMgMTEuNDY3MUMzLjMwMDIyIDEwLjY5ODggMi44NjQyMyAxMC40OTQyIDIuODY0MjMgMTAuNDk0MkMyLjI2MDQ0IDEwLjA4MTkgMi45MDk5NSAxMC4wOTAxIDIuOTA5OTUgMTAuMDkwMUMzLjU3NzQyIDEwLjEzNyAzLjkyODUgMTAuNzc1NSAzLjkyODUgMTAuNzc1NUM0LjUyMTY3IDExLjc5MTYgNS40ODUxMiAxMS40OTgxIDUuODYzOTYgMTEuMzI3OUM1LjkyNDM4IDEwLjg5ODQgNi4wOTYyNSAxMC42MDUzIDYuMjg2MDggMTAuNDM5MUM0LjgwOTQ4IDEwLjI3MDkgMy4yNTY5NSA5LjcwMDYzIDMuMjU2OTUgNy4xNTI0MUMzLjI1Njk1IDYuNDI2MTUgMy41MTYxOCA1LjgzMjk4IDMuOTQxNTcgNS4zNjhDMy44NzI5OSA1LjE5OTggMy42NDQ3OCA0LjUyMzc1IDQuMDA2ODkgMy42MDgwN0M0LjAwNjg5IDMuNjA4MDcgNC41NjQ5NCAzLjQyOTI2IDUuODM1MzggNC4yODk0MUM2LjM2NTY4IDQuMTQyMDQgNi45MzQ3NyA0LjA2ODU2IDcuNTAwMTggNC4wNjU3QzguMDY1MTggNC4wNjg1NiA4LjYzMzg2IDQuMTQyMDQgOS4xNjQ5OCA0LjI4OTQxQzEwLjQzNDYgMy40MjkyNiAxMC45OTE4IDMuNjA4MDcgMTAuOTkxOCAzLjYwODA3QzExLjM1NDggNC41MjM3NSAxMS4xMjY2IDUuMTk5OCAxMS4wNTg0IDUuMzY4QzExLjQ4NDYgNS44MzI5OCAxMS43NDE4IDYuNDI2MTUgMTEuNzQxOCA3LjE1MjQxQzExLjc0MTggOS43MDcxNiAxMC4xODY4IDEwLjI2OTMgOC43MDU3MSAxMC40MzM4QzguOTQ0MTIgMTAuNjM5MiA5LjE1NjgxIDExLjA0NSA5LjE1NjgxIDExLjY2NTVDOS4xNTY4MSAxMi41NTQyIDkuMTQ4NjUgMTMuMjcxNSA5LjE0ODY1IDEzLjQ4OTVDOS4xNDg2NSAxMy42Njc1IDkuMjY4NjcgMTMuODc0NSA5LjYwNTg4IDEzLjgwOTVDMTIuMjQ2NCAxMi45MjgyIDE0LjE1IDEwLjQzNzUgMTQuMTUgNy41MDAyM0MxNC4xNSAzLjgyNzMgMTEuMTcyMyAwLjg1MDAwNiA3LjQ5OTM2IDAuODUwMDA2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sJHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5OTYgMS44MDAwMkM0LjM1MTk0IDEuODAwMDIgMS43OTk5NiA0LjM1MiAxLjc5OTk2IDcuNTAwMDJDMS43OTk5NiAxMC42NDggNC4zNTE5NCAxMy4yIDcuNDk5OTYgMTMuMkMxMC42NDggMTMuMiAxMy4yIDEwLjY0OCAxMy4yIDcuNTAwMDJDMTMuMiA0LjM1MiAxMC42NDggMS44MDAwMiA3LjQ5OTk2IDEuODAwMDJaTTAuODk5OTYzIDcuNTAwMDJDMC44OTk5NjMgMy44NTQ5NCAzLjg1NDg4IDAuOTAwMDI0IDcuNDk5OTYgMC45MDAwMjRDMTEuMTQ1IDAuOTAwMDI0IDE0LjEgMy44NTQ5NCAxNC4xIDcuNTAwMDJDMTQuMSAxMS4xNDUxIDExLjE0NSAxNC4xIDcuNDk5OTYgMTQuMUMzLjg1NDg4IDE0LjEgMC44OTk5NjMgMTEuMTQ1MSAwLjg5OTk2MyA3LjUwMDAyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTMuNDk5OSA3Ljg5OTk4SDEuNDk5OTRWNy4wOTk5OEgxMy40OTk5VjcuODk5OThaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjA5OTkxIDEzLjVWMS41SDcuODk5OTFWMTMuNUg3LjA5OTkxek0xMC4zNzUgNy40OTk5OEMxMC4zNzUgNS4zMjcyNCA5LjU5MzY0IDMuMTc3NzggOC4wNjE4MyAxLjc1NjU2TDguNTM3OTMgMS4yNDM0MUMxMC4yMzk2IDIuODIyMTggMTEuMDc1IDUuMTcyNzMgMTEuMDc1IDcuNDk5OTggMTEuMDc1IDkuODI3MjQgMTAuMjM5NiAxMi4xNzc4IDguNTM3OTMgMTMuNzU2Nkw4LjA2MTgzIDEzLjI0MzRDOS41OTM2NCAxMS44MjIyIDEwLjM3NSA5LjY3MjczIDEwLjM3NSA3LjQ5OTk4ek0zLjk5OTY5IDcuNUMzLjk5OTY5IDUuMTc2MTEgNC44MDc4NiAyLjgyNjc4IDYuNDU3NjggMS4yNDcxOUw2Ljk0MTc3IDEuNzUyODFDNS40NTgyIDMuMTczMjMgNC42OTk2OSA1LjMyMzg5IDQuNjk5NjkgNy41IDQuNjk5NyA5LjY3NjExIDUuNDU4MjIgMTEuODI2OCA2Ljk0MTc5IDEzLjI0NzJMNi40NTc2OSAxMy43NTI4QzQuODA3ODggMTIuMTczMiAzLjk5OTcgOS44MjM5IDMuOTk5NjkgNy41elwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTk5NiAzLjk1ODAxQzkuNjY5MjggMy45NTgwMSAxMS44NzUzIDQuMzU5MTUgMTMuMzcwNiA1LjE5NDQ4IDEzLjUzOTQgNS4yODg3NSAxMy41OTk4IDUuNTAxOTcgMTMuNTA1NSA1LjY3MDczIDEzLjQxMTMgNS44Mzk0OCAxMy4xOTggNS44OTk4NyAxMy4wMjkzIDUuODA1NiAxMS42Nzk0IDUuMDUxNTUgOS42MDc5OSA0LjY1ODAxIDcuNDk5OTYgNC42NTgwMSA1LjM5MTkyIDQuNjU4MDEgMy4zMjA1MiA1LjA1MTU1IDEuOTcwNjQgNS44MDU2IDEuODAxODggNS44OTk4NyAxLjU4ODY2IDUuODM5NDggMS40OTQzOSA1LjY3MDczIDEuNDAwMTMgNS41MDE5NyAxLjQ2MDUxIDUuMjg4NzUgMS42MjkyNyA1LjE5NDQ4IDMuMTI0NjYgNC4zNTkxNSA1LjMzMDYzIDMuOTU4MDEgNy40OTk5NiAzLjk1ODAxek03LjQ5OTk2IDEwLjg1QzkuNjY5MjggMTAuODUgMTEuODc1MyAxMC40NDg4IDEzLjM3MDYgOS42MTM1IDEzLjUzOTQgOS41MTkyNCAxMy41OTk4IDkuMzA2MDEgMTMuNTA1NSA5LjEzNzI2IDEzLjQxMTMgOC45Njg1IDEzLjE5OCA4LjkwODEyIDEzLjAyOTMgOS4wMDIzOCAxMS42Nzk0IDkuNzU2NDMgOS42MDc5OSAxMC4xNSA3LjQ5OTk2IDEwLjE1IDUuMzkxOTIgMTAuMTUgMy4zMjA1MiA5Ljc1NjQzIDEuOTcwNjQgOS4wMDIzOSAxLjgwMTg4IDguOTA4MTIgMS41ODg2NiA4Ljk2ODUgMS40OTQzOSA5LjEzNzI2IDEuNDAwMTMgOS4zMDYwMSAxLjQ2MDUxIDkuNTE5MjQgMS42MjkyNyA5LjYxMzUgMy4xMjQ2NiAxMC40NDg4IDUuMzMwNjMgMTAuODUgNy40OTk5NiAxMC44NXpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE50PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMi41IDJIOFY3SDEzVjIuNUMxMyAyLjIyMzg2IDEyLjc3NjEgMiAxMi41IDJaTTEzIDhIOFYxM0gxMi41QzEyLjc3NjEgMTMgMTMgMTIuNzc2MSAxMyAxMi41VjhaTTcgN1YySDIuNUMyLjIyMzg2IDIgMiAyLjIyMzg2IDIgMi41VjdIN1pNMiA4VjEyLjVDMiAxMi43NzYxIDIuMjIzODYgMTMgMi41IDEzSDdWOEgyWk0yLjUgMUMxLjY3MTU3IDEgMSAxLjY3MTU3IDEgMi41VjEyLjVDMSAxMy4zMjg0IDEuNjcxNTcgMTQgMi41IDE0SDEyLjVDMTMuMzI4NCAxNCAxNCAxMy4zMjg0IDE0IDEyLjVWMi41QzE0IDEuNjcxNTcgMTMuMzI4NCAxIDEyLjUgMUgyLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxGdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS40NDk5NSAwLjk0OTk1MUMxLjMxNzM0IDAuOTQ5OTUxIDEuMTkwMTYgMS4wMDI2MyAxLjA5NjQgMS4wOTY0QzEuMDAyNjMgMS4xOTAxNyAwLjk0OTk1MSAxLjMxNzM1IDAuOTQ5OTUxIDEuNDQ5OTVMMC45NDk5NjYgMy40NDk5NUMwLjk0OTk2OSAzLjcyNjEgMS4xNzM4MyAzLjk0OTk1IDEuNDQ5OTcgMy45NDk5NUMxLjcyNjExIDMuOTQ5OTUgMS45NDk5NyAzLjcyNjA5IDEuOTQ5OTcgMy40NDk5NUwxLjk0OTk1IDEuOTQ5OTVIMy40NDk5N0MzLjcyNjExIDEuOTQ5OTUgMy45NDk5NyAxLjcyNjA5IDMuOTQ5OTcgMS40NDk5NUMzLjk0OTk3IDEuMTczODEgMy43MjYxMSAwLjk0OTk1MSAzLjQ0OTk3IDAuOTQ5OTUxSDEuNDQ5OTVaTTUuOTQ5OTUgMC45NDk5NTFDNS42NzM4MSAwLjk0OTk1MSA1LjQ0OTk1IDEuMTczODEgNS40NDk5NSAxLjQ0OTk1QzUuNDQ5OTUgMS43MjYwOSA1LjY3MzgxIDEuOTQ5OTUgNS45NDk5NSAxLjk0OTk1SDguOTQ5OTVDOS4yMjYwOSAxLjk0OTk1IDkuNDQ5OTUgMS43MjYwOSA5LjQ0OTk1IDEuNDQ5OTVDOS40NDk5NSAxLjE3MzgxIDkuMjI2MDkgMC45NDk5NTEgOC45NDk5NSAwLjk0OTk1MUg1Ljk0OTk1Wk01LjQ0OTk1IDEzLjQ1QzUuNDQ5OTUgMTMuMTczOCA1LjY3MzgxIDEyLjk1IDUuOTQ5OTUgMTIuOTVIOC45NDk5NUM5LjIyNjA5IDEyLjk1IDkuNDQ5OTUgMTMuMTczOCA5LjQ0OTk1IDEzLjQ1QzkuNDQ5OTUgMTMuNzI2MSA5LjIyNjA5IDEzLjk1IDguOTQ5OTUgMTMuOTVINS45NDk5NUM1LjY3MzgxIDEzLjk1IDUuNDQ5OTUgMTMuNzI2MSA1LjQ0OTk1IDEzLjQ1Wk0xLjk0OTk1IDUuOTQ5OTVDMS45NDk5NSA1LjY3MzgxIDEuNzI2MDkgNS40NDk5NSAxLjQ0OTk1IDUuNDQ5OTVDMS4xNzM4MSA1LjQ0OTk1IDAuOTQ5OTUxIDUuNjczODEgMC45NDk5NTEgNS45NDk5NVY4Ljk0OTk1QzAuOTQ5OTUxIDkuMjI2MDkgMS4xNzM4MSA5LjQ0OTk1IDEuNDQ5OTUgOS40NDk5NUMxLjcyNjA5IDkuNDQ5OTUgMS45NDk5NSA5LjIyNjA5IDEuOTQ5OTUgOC45NDk5NVY1Ljk0OTk1Wk0xMy40NSA1LjQ0OTk1QzEzLjcyNjEgNS40NDk5NSAxMy45NSA1LjY3MzgxIDEzLjk1IDUuOTQ5OTVWOC45NDk5NUMxMy45NSA5LjIyNjA5IDEzLjcyNjEgOS40NDk5NSAxMy40NSA5LjQ0OTk1QzEzLjE3MzggOS40NDk5NSAxMi45NSA5LjIyNjA5IDEyLjk1IDguOTQ5OTVWNS45NDk5NUMxMi45NSA1LjY3MzgxIDEzLjE3MzggNS40NDk5NSAxMy40NSA1LjQ0OTk1Wk0xMS40NSAwLjk0OTk1MUMxMS4xNzM4IDAuOTQ5OTUxIDEwLjk1IDEuMTczODEgMTAuOTUgMS40NDk5NUMxMC45NSAxLjcyNjA5IDExLjE3MzggMS45NDk5NSAxMS40NSAxLjk0OTk1SDEyLjk0OTlWMy40NDk5NUMxMi45NDk5IDMuNzI2MDkgMTMuMTczOCAzLjk0OTk1IDEzLjQ0OTkgMy45NDk5NUMxMy43MjYxIDMuOTQ5OTUgMTMuOTQ5OSAzLjcyNjA5IDEzLjk0OTkgMy40NDk5NVYxLjQ0OTk1QzEzLjk0OTkgMS4xNzM4MSAxMy43MjUyIDAuOTQ5OTUxIDEzLjQ0OSAwLjk0OTk1MUgxMS40NVpNMS40NDk5NSAxMC45NUMxLjcyNjA5IDEwLjk1IDEuOTQ5OTUgMTEuMTczOCAxLjk0OTk1IDExLjQ1VjEyLjk1SDMuNDQ5OTdDMy43MjYxMSAxMi45NSAzLjk0OTk3IDEzLjE3MzggMy45NDk5NyAxMy40NUMzLjk0OTk3IDEzLjcyNjEgMy43MjYxMSAxMy45NSAzLjQ0OTk3IDEzLjk1SDEuNDQ5OTVDMS4xNzM4MSAxMy45NSAwLjk0OTk1MSAxMy43MjYxIDAuOTQ5OTUxIDEzLjQ1VjExLjQ1QzAuOTQ5OTUxIDExLjE3MzggMS4xNzM4MSAxMC45NSAxLjQ0OTk1IDEwLjk1Wk0xMy45NSAxMS40NUMxMy45NSAxMS4xNzM4IDEzLjcyNjEgMTAuOTUgMTMuNDUgMTAuOTVDMTMuMTczOCAxMC45NDk5IDEyLjk1IDExLjE3MzggMTIuOTUgMTEuNDQ5OUwxMi45NDkxIDEyLjk1SDExLjQ1QzExLjE3MzggMTIuOTUgMTAuOTUgMTMuMTczOCAxMC45NSAxMy40NUMxMC45NSAxMy43MjYxIDExLjE3MzggMTMuOTUgMTEuNDUgMTMuOTVIMTMuNDQ5OUMxMy43MjYxIDEzLjk1IDEzLjk0OTkgMTMuNzI2MSAxMy45NDk5IDEzLjQ1TDEzLjk1IDExLjQ1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5OTEgMC44NzY4OTJDMy44NDIyMiAwLjg3Njg5MiAwLjg3NzA3NSAzLjg0MjA0IDAuODc3MDc1IDcuNDk5NzJDMC44NzcwNzUgMTEuMTU3NCAzLjg0MjIyIDE0LjEyMjYgNy40OTk5MSAxNC4xMjI2QzExLjE1NzYgMTQuMTIyNiAxNC4xMjI3IDExLjE1NzQgMTQuMTIyNyA3LjQ5OTcyQzE0LjEyMjcgMy44NDIwNCAxMS4xNTc2IDAuODc2ODkyIDcuNDk5OTEgMC44NzY4OTJaTTcuMDAwMDMgMS44NDg2MUM0LjEwMTE0IDIuMTAxNyAxLjgyNzA3IDQuNTM1MTUgMS44MjcwNyA3LjQ5OTcyQzEuODI3MDcgMTAuNDY0MyA0LjEwMTE0IDEyLjg5NzcgNy4wMDAwMyAxMy4xNTA4VjEuODQ4NjFaTTguMDAwMDMgMTMuMTUwOEMxMC44OTg4IDEyLjg5NzYgMTMuMTcyNyAxMC40NjQyIDEzLjE3MjcgNy40OTk3MkMxMy4xNzI3IDQuNTM1MjQgMTAuODk4OCAyLjEwMTg1IDguMDAwMDMgMS44NDg2NFYxMy4xNTA4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sV3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5OTEgMC44NzY4OTJDMy44NDIyMiAwLjg3Njg5MiAwLjg3NzA3NSAzLjg0MjA0IDAuODc3MDc1IDcuNDk5NzJDMC44NzcwNzUgMTEuMTU3NCAzLjg0MjIyIDE0LjEyMjYgNy40OTk5MSAxNC4xMjI2QzExLjE1NzYgMTQuMTIyNiAxNC4xMjI3IDExLjE1NzQgMTQuMTIyNyA3LjQ5OTcyQzE0LjEyMjcgMy44NDIwNCAxMS4xNTc2IDAuODc2ODkyIDcuNDk5OTEgMC44NzY4OTJaTTcuNDk5ODggMS44MjY4OUM0LjM2Njg4IDEuODI2OSAxLjgyNzA3IDQuMzY2NzIgMS44MjcwNyA3LjQ5OTcyQzEuODI3MDcgMTAuNjMyNyA0LjM2Njg4IDEzLjE3MjUgNy40OTk4OCAxMy4xNzI2VjEuODI2ODlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx6dD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS41IDNDMS4yMjM4NiAzIDEgMy4yMjM4NiAxIDMuNUMxIDMuNzc2MTQgMS4yMjM4NiA0IDEuNSA0SDEzLjVDMTMuNzc2MSA0IDE0IDMuNzc2MTQgMTQgMy41QzE0IDMuMjIzODYgMTMuNzc2MSAzIDEzLjUgM0gxLjVaTTEgNy41QzEgNy4yMjM4NiAxLjIyMzg2IDcgMS41IDdIMTMuNUMxMy43NzYxIDcgMTQgNy4yMjM4NiAxNCA3LjVDMTQgNy43NzYxNCAxMy43NzYxIDggMTMuNSA4SDEuNUMxLjIyMzg2IDggMSA3Ljc3NjE0IDEgNy41Wk0xIDExLjVDMSAxMS4yMjM5IDEuMjIzODYgMTEgMS41IDExSDEzLjVDMTMuNzc2MSAxMSAxNCAxMS4yMjM5IDE0IDExLjVDMTQgMTEuNzc2MSAxMy43NzYxIDEyIDEzLjUgMTJIMS41QzEuMjIzODYgMTIgMSAxMS43NzYxIDEgMTEuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEd0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02LjgxMTMgMS42NDcwNkM2LjYyMTg4IDIuODc5MTggNi42ODI2OCAzLjg4NTIzIDYuNzY4NDggNS4zMDQ5OUM2Ljc4NDE1IDUuNTY0MjYgNi44MDA2NSA1LjgzNzMyIDYuODE2NjEgNi4xMjgwOEM2LjgzMTExIDYuMzkyMDggNi42Mzc1OCA2LjYyMTcyIDYuMzc0OTUgNi42NTIxN0M2LjExMjMyIDYuNjgyNjIgNS44NzEzOCA2LjUwMzM0IDUuODI1MDkgNi4yNDMwNEw1Ljc0NzU0IDUuODA2OThDNS42NDQwMiA1LjE2NTI5IDUuNDgzNTUgNC4yNTQ4MSA1LjE3ODA3IDMuNDQ3NDFDNC44NjI0MSAyLjYxMzEyIDQuNDQ4NiAyLjA0MTIxIDMuOTM0MzYgMS44NjA0NEMzLjY0OTk0IDEuNzYxMDQgMy40MTkwMSAxLjg0Mjc5IDMuMjU4NjggMi4wMTA1MkMzLjA4NzQ2IDIuMTg5NjIgMi45OTc2IDIuNDcwNjUgMy4wNjI3IDIuNzUzOTlDMy4yMTQ2IDMuMzQ0MjQgMy40NDYyNyAzLjkxNjcgMy42OTgzNiA0LjUxODAyQzMuNzIwODIgNC41NzE1OCAzLjc0MzQ2IDQuNjI1NDMgMy43NjYyMSA0LjY3OTU0QzMuOTk1NCA1LjIyNDU3IDQuMjM2MTkgNS43OTcyIDQuNDE2NDQgNi4zOTA4MUw0LjQxNjkxIDYuMzkyMzhDNC41NjIgNi44NzU4NiA0LjY1NjQ2IDcuMjU5NSA0LjczMDg2IDcuNTYxNjVDNC43NjAzNCA3LjY4MTM4IDQuNzg2NjcgNy43ODgzMSA0LjgxMTc1IDcuODgzNTlDNC44Njc2OCA4LjA5NjA2IDQuNzc4MzYgOC4zMjAxNCA0LjU5MTYxIDguNDM1ODhDNC40MDQ4NiA4LjU1MTYxIDQuMTY0NDUgOC41MzE4OCAzLjk5OTA3IDguMzg3MjVDMy43Mzc0OSA4LjE1ODQ4IDMuNTE1IDcuOTI3ODQgMy4zMTgxNyA3LjcxODAyQzMuMjc2MjcgNy42NzMzNSAzLjIzNjAyIDcuNjMwMTggMy4xOTcwNSA3LjU4ODM4QzMuMDQ3NzcgNy40MjgyNiAyLjkxNzEyIDcuMjg4MTIgMi43ODMzNCA3LjE2MDI5QzIuNDU5ODkgNi44NTEyMiAyLjE4Mzk4IDYuNjgwMDQgMS44MDU4NSA2LjY0MzY5TDEuODAzMjQgNi42NDM0M0MxLjU2MTE3IDYuNjE4ODggMS40MTQwMiA2LjY2NDQxIDEuMzE3NTYgNi43MjYyN0MxLjIxODk5IDYuNzg5NDcgMS4xMTk4OCA2LjkwNDE0IDEuMDM3ODQgNy4xMTIzQzAuOTc2NTc2IDcuMjg0OTIgMS4wMTUxNSA3LjYyOTg3IDEuMTkyOSA3Ljk2OTExTDEuMTk3MjggNy45Nzc0N0MxLjQwMDg2IDguMzg0NTIgMS43NDQ3NSA4LjgxNTg3IDIuMTgxNDEgOS4yOTI5OUMyLjM5NzM5IDkuNTI4OTggMi42Mjg3MiA5Ljc2ODQ5IDIuODY5MzQgMTAuMDE3NEwyLjg3OTY2IDEwLjAyODFDMy4xMTU0NiAxMC4yNzIxIDMuMzU5NjIgMTAuNTI0NyAzLjU5NzEzIDEwLjc4MjdDNC40Mjg4IDExLjY4NjMgNS4yNzcwNiAxMi43NTM4IDUuNDYyNyAxNEgxMS41MDg3QzExLjU2MzYgMTIuNDM1MyAxMS44NzU2IDExLjI2OCAxMi4yODc1IDEwLjEzNDZDMTIuNDQ1NCA5LjcwMDQxIDEyLjYxMjEgOS4yODQxMiAxMi43ODI2IDguODU4MjlDMTMuMTA5NyA4LjA0MTM5IDEzLjQ1MDkgNy4xODkzNyAxMy43NzA1IDYuMTA4MjRDMTQuMDk4OSA0Ljk5NzM3IDE0LjAwOTcgNC4zNzAzMyAxMy44NjEzIDQuMDM5ODRDMTMuNzE3IDMuNzE4NTggMTMuNDkxNCAzLjYxNzg2IDEzLjM4MTYgMy41OTYwNkMxMy4xMzgxIDMuNTQ3NzQgMTMuMDM4NCAzLjYwOTQ3IDEyLjk2OTggMy42NzkwMUMxMi44NjcgMy43ODMxNiAxMi43Njk4IDMuOTgyNzMgMTIuNjkyMSA0LjMwMjY5QzEyLjYxNjYgNC42MTM0NSAxMi41NzUyIDQuOTY1MTcgMTIuNTMzIDUuMzI1MDFMMTIuNTI5OCA1LjM1Mjg1QzEyLjQ5MjQgNS42NzI0MiAxMi40NTA1IDYuMDMwMTYgMTIuMzY2NSA2LjMwMDk4QzEyLjMzODMgNi40MDY5OSAxMi4yODE5IDYuNTA0MDcgMTIuMTk3OSA2LjU3NTM5QzEyLjEzODIgNi42MjYxIDEyLjAxMDQgNi43MDgxOCAxMS44MzA5IDYuNjkzMTJDMTEuNTQyNCA2LjY2ODkxIDExLjM3MTIgNi40MjE0MyAxMS4zNjUgNi4xNDc4M0MxMS4zNTYgNS43NTQ1NCAxMS4zODgzIDUuMzU4NjQgMTEuNDA3NCA0Ljk2NjA4QzExLjQ0MjggNC4yMzY0NiAxMS40NzcgMy41MzM3IDExLjQyNDUgMi44MzQyTDExLjQyNDIgMi44MjkzNEMxMS4zOTE2IDIuMzI5OTcgMTEuMDQ5MyAyLjAwMjI4IDEwLjcwMDcgMS45MjI4QzEwLjUzMDUgMS44ODQwMSAxMC4zNjkgMS45MDYwMSAxMC4yMzQ3IDEuOTgzNUMxMC4xMDMgMi4wNTk0NiA5Ljk1NTM1IDIuMjEzMTggOS44NTc0IDIuNTEzOTRMOS44NTYzMSAyLjUxNzI2QzkuODE1MjUgMi42NDA0IDkuNzcyOTggMi44Nzc1MyA5LjczNjA2IDMuMjEyNEM5LjcwMDQ0IDMuNTM1NDIgOS42NzMzNyAzLjkxMjc5IDkuNjUxNTYgNC4yOTQxOEM5LjYzMjkgNC42MjAzMyA5LjYxNzg1IDQuOTU4NCA5LjYwNDM0IDUuMjYxOTRDOS41ODcyOCA1LjY0NTI5IDkuNTcyNjcgNS45NzM1NyA5LjU1NjMzIDYuMTUzMkM5LjU0OTgzIDYuMjI0NTkgOS41MjkzOSA2LjI5NDkzIDkuNDk1MDEgNi4zNTc4NUM5LjQ3MzU2IDYuMzk3MTEgOS4zNjExNSA2LjYwOTQ3IDkuMDcxMDYgNi42MTg0M0M4Ljc3OTE3IDYuNjI3NDQgOC42Mzk3NSA2LjQwMDU3IDguNjE2OTggNi4zNTkxOUM4LjU1NjM0IDYuMjQ4OTkgOC41NTA2NiA2LjExODA3IDguNTQ3NTQgNS45OTI4M0M4LjU0NDc0IDUuODgwNjQgOC41NDI5NCA1LjcxNzk4IDguNTQxNzQgNS41NDc2N0M4LjUzOTM1IDUuMjA1ODIgOC41MzkzNSA0LjgxOTE5IDguNTM5MzUgNC43MDk1MkM4LjUzOTM1IDMuNjY1NyA4LjUzODM4IDIuNjUzNzIgOC40NDcxNCAxLjY0MzcyQzguMzkxODMgMS4yNDEyNyA4LjA2Mjc4IDEuMDA0NTUgNy42NDM2IDEuMDAwMDVDNy4yMjM5OSAwLjk5NTU1MiA2Ljg3OTE4IDEuMjI3MDQgNi44MTEzIDEuNjQ3MDZaTTkuNDEyMTkgMS4zNjE3QzkuMjE0NjkgMC40NDg0ODQgOC4zOTkxMyAwLjAwODEwMzI0IDcuNjU0MzMgMC4wMDAxMTE1NEM2Ljg2NDUyIC0wLjAwODM2MzA4IDUuOTg3NjEgMC40NjU4ODEgNS44MjM2NSAxLjQ5MDM3TDUuODIzMTggMS40OTMzNEM1Ljc4MjM5IDEuNzU4NCA1Ljc1MjI5IDIuMDE0ODEgNS43MzA5IDIuMjY2NTJDNS4zOTQyMyAxLjY3MzY0IDQuOTI2MjIgMS4xNDg5NCA0LjI2NTUgMC45MTY4NTlDMy41ODY2MSAwLjY3OTMxMiAyLjk0OTIgMC44ODcwODcgMi41MzU4MiAxLjMxOTUyQzIuMTM0MTUgMS43Mzk3MSAxLjk0NDM4IDIuMzY3NDIgMi4wOTAzMSAyLjk4NzQ2TDIuMDkyNjkgMi45OTcxM0MyLjI2NDc4IDMuNjY4MDggMi41MjM5NiA0LjMwMzE2IDIuNzc2MTMgNC45MDQ2NUMyLjc5ODE0IDQuOTU3MTcgMi44MjAxIDUuMDA5NDEgMi44NDE5NCA1LjA2MTM5QzMuMDIxMzkgNS40ODg0MiAzLjE5Mzc4IDUuODk4NjYgMy4zMzg3MSA2LjMxMjU2QzIuOTY0MDQgNS45ODE0MiAyLjUxOTI1IDUuNzA3OTYgMS45MDI3NiA1LjY0ODRDMS40ODg2NSA1LjYwNjYzIDEuMTAzOTEgNS42NzUzNiAwLjc3NzgwNSA1Ljg4NDQ0QzAuNDU0MjM5IDYuMDkxOSAwLjI0MDY3MSA2LjQwNDA1IDAuMTA0MTg3IDYuNzU0MDZMMC4xMDA4NjggNi43NjI4MUMtMC4xMDE4NCA3LjMxMjg2IDAuMDY2MzMxMiA3Ljk3MTU3IDAuMzA0ODk1IDguNDI4OTdDMC41NzM3MDQgOC45NjQ3NCAwLjk5NjEwNCA5LjQ3OTA0IDEuNDQzNzIgOS45NjgxM0MxLjY3MDQ2IDEwLjIxNTkgMS45MTEzNiAxMC40NjUyIDIuMTUwMzMgMTAuNzEyNEwyLjE1NjgyIDEwLjcxOTFDMi4zOTUyNCAxMC45NjU4IDIuNjMyMTcgMTEuMjEwOSAyLjg2MTM0IDExLjQ1OTlDMy44MDkzNyAxMi40OSA0LjUwMDAyIDEzLjQ2MzIgNC41MDAwMiAxNC41QzQuNTAwMDIgMTQuNzc2MSA0LjcyMzg4IDE1IDUuMDAwMDIgMTVIMTJDMTIuMjc2MiAxNSAxMi41IDE0Ljc3NjEgMTIuNSAxNC41QzEyLjUgMTIuODIxMiAxMi44MDIxIDExLjY0NjIgMTMuMjI3NCAxMC40NzYyQzEzLjM2NTMgMTAuMDk2OCAxMy41MjE2IDkuNzA1NzkgMTMuNjg2OCA5LjI5MjQ3QzE0LjAyMzggOC40NDkyMiAxNC4zOTggNy41MTI5OCAxNC43Mjk1IDYuMzkxNzVDMTUuMDk1NiA1LjE1MzI0IDE1LjA1NTkgNC4yNTkwNCAxNC43NzM1IDMuNjMwMTdDMTQuNDg3IDIuOTkyMDggMTMuOTc5OCAyLjY5NTMgMTMuNTc2MyAyLjYxNTJDMTMuMTI3NiAyLjUyNjE0IDEyLjczNjcgMi42MDQ3NSAxMi40MjY4IDIuODMwODFDMTIuNDI1MyAyLjgwNzczIDEyLjQyMzYgMi43ODQ2OCAxMi40MjE5IDIuNzYxNjdDMTIuMzU4NyAxLjgxMDUgMTEuNjkwNyAxLjEyMjg1IDEwLjkyMyAwLjk0NzgyMUMxMC41MzQ2IDAuODU5Mjg3IDEwLjExMTEgMC45MDAzOTMgOS43MzUwOSAxLjExNzI0QzkuNjE4NTIgMS4xODQ0NiA5LjUxMDU1IDEuMjY2MjMgOS40MTIxOSAxLjM2MTdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxxdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC43NTQzMiAyLjA1MDJDOC41MDU3OSAyLjA1MDIgOC4zMDQzMiAyLjI1MTY3IDguMzA0MzIgMi41MDAyQzguMzA0MzIgMi43NDg3MyA4LjUwNTc5IDIuOTUwMiA4Ljc1NDMyIDIuOTUwMkg5Ljk0OTk3VjcuMDUwMDRINS4wNDk5N1YyLjk1MDJINi4yNTQzMkM2LjUwMjg1IDIuOTUwMiA2LjcwNDMyIDIuNzQ4NzMgNi43MDQzMiAyLjUwMDJDNi43MDQzMiAyLjI1MTY3IDYuNTAyODUgMi4wNTAyIDYuMjU0MzIgMi4wNTAySDIuNzU0MzJDMi41MDU3OSAyLjA1MDIgMi4zMDQzMiAyLjI1MTY3IDIuMzA0MzIgMi41MDAyQzIuMzA0MzIgMi43NDg3MyAyLjUwNTc5IDIuOTUwMiAyLjc1NDMyIDIuOTUwMkgzLjk0OTk3VjEyLjA1MDJIMi43NTQzMkMyLjUwNTc5IDEyLjA1MDIgMi4zMDQzMiAxMi4yNTE3IDIuMzA0MzIgMTIuNTAwMkMyLjMwNDMyIDEyLjc0ODcgMi41MDU3OSAxMi45NTAyIDIuNzU0MzIgMTIuOTUwMkg2LjI1NDMyQzYuNTAyODUgMTIuOTUwMiA2LjcwNDMyIDEyLjc0ODcgNi43MDQzMiAxMi41MDAyQzYuNzA0MzIgMTIuMjUxNyA2LjUwMjg1IDEyLjA1MDIgNi4yNTQzMiAxMi4wNTAySDUuMDQ5OTdWNy45NTAwNEg5Ljk0OTk3VjEyLjA1MDJIOC43NTQzMkM4LjUwNTc5IDEyLjA1MDIgOC4zMDQzMiAxMi4yNTE3IDguMzA0MzIgMTIuNTAwMkM4LjMwNDMyIDEyLjc0ODcgOC41MDU3OSAxMi45NTAyIDguNzU0MzIgMTIuOTUwMkgxMi4yNTQzQzEyLjUwMjggMTIuOTUwMiAxMi43MDQzIDEyLjc0ODcgMTIuNzA0MyAxMi41MDAyQzEyLjcwNDMgMTIuMjUxNyAxMi41MDI4IDEyLjA1MDIgMTIuMjU0MyAxMi4wNTAySDExLjA1VjIuOTUwMkgxMi4yNTQzQzEyLjUwMjggMi45NTAyIDEyLjcwNDMgMi43NDg3MyAxMi43MDQzIDIuNTAwMkMxMi43MDQzIDIuMjUxNjcgMTIuNTAyOCAyLjA1MDIgMTIuMjU0MyAyLjA1MDJIOC43NTQzMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFl0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjE4MTMgMS42ODE3OUM3LjM1NzA0IDEuNTA2MDUgNy42NDE5NiAxLjUwNjA1IDcuODE3NyAxLjY4MTc5TDEwLjMxNzcgNC4xODE3OUMxMC40OTM0IDQuMzU3NTMgMTAuNDkzNCA0LjY0MjQ1IDEwLjMxNzcgNC44MTgxOUMxMC4xNDIgNC45OTM5MiA5Ljg1NzA0IDQuOTkzOTIgOS42ODEzIDQuODE4MTlMNy45NDk1IDMuMDg2MzhMNy45NDk1IDExLjkxMzZMOS42ODEzIDEwLjE4MThDOS44NTcwNCAxMC4wMDYxIDEwLjE0MiAxMC4wMDYxIDEwLjMxNzcgMTAuMTgxOEMxMC40OTM0IDEwLjM1NzUgMTAuNDkzNCAxMC42NDI0IDEwLjMxNzcgMTAuODE4Mkw3LjgxNzcgMTMuMzE4MkM3LjczMzMxIDEzLjQwMjYgNy42MTg4NSAxMy40NSA3LjQ5OTUgMTMuNDVDNy4zODAxNSAxMy40NSA3LjI2NTY5IDEzLjQwMjYgNy4xODEzIDEzLjMxODJMNC42ODEzIDEwLjgxODJDNC41MDU1NyAxMC42NDI0IDQuNTA1NTcgMTAuMzU3NSA0LjY4MTMgMTAuMTgxOEM0Ljg1NzA0IDEwLjAwNjEgNS4xNDE5NiAxMC4wMDYxIDUuMzE3NyAxMC4xODE4TDcuMDQ5NSAxMS45MTM2TDcuMDQ5NSAzLjA4NjM4TDUuMzE3NyA0LjgxODE5QzUuMTQxOTYgNC45OTM5MiA0Ljg1NzA0IDQuOTkzOTIgNC42ODEzIDQuODE4MTlDNC41MDU1NyA0LjY0MjQ1IDQuNTA1NTcgNC4zNTc1MyA0LjY4MTMgNC4xODE3OUw3LjE4MTMgMS42ODE3OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEt0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjA3OTI2IDAuMjIyMjUzQzcuMzEyNzUgLTAuMDA3NDM0IDcuNjg3MyAtMC4wMDc0MzQgNy45MjA3OSAwLjIyMjI1M0wxNC42NzA4IDYuODYyMjdDMTQuOTA3IDcuMDk0NjUgMTQuOTEwMSA3LjQ3NDUzIDE0LjY3NzggNy43MTA3NkMxNC40NDU0IDcuOTQ3IDE0LjA2NTUgNy45NTAxMiAxMy44MjkzIDcuNzE3NzNMMTMgNi45MDIwMVYxMi41QzEzIDEyLjc3NjEgMTIuNzc2MiAxMyAxMi41IDEzSDIuNTAwMDJDMi4yMjM4OCAxMyAyLjAwMDAyIDEyLjc3NjEgMi4wMDAwMiAxMi41VjYuOTAyMDFMMS4xNzA3OSA3LjcxNzczQzAuOTM0NTU4IDcuOTUwMTIgMC41NTQ2NzIgNy45NDcgMC4zMjIyOSA3LjcxMDc2QzAuMDg5OTA3OSA3LjQ3NDUzIDAuMDkzMDI4MyA3LjA5NDY1IDAuMzI5MjYgNi44NjIyN0w3LjA3OTI2IDAuMjIyMjUzWk03LjUwMDAyIDEuNDkxNjNMMTIgNS45MTgzMVYxMkgxMFY4LjQ5OTk5QzEwIDguMjIzODUgOS43NzYxNyA3Ljk5OTk5IDkuNTAwMDIgNy45OTk5OUg2LjUwMDAyQzYuMjIzODggNy45OTk5OSA2LjAwMDAyIDguMjIzODUgNi4wMDAwMiA4LjQ5OTk5VjEySDMuMDAwMDJWNS45MTgzMUw3LjUwMDAyIDEuNDkxNjNaTTcuMDAwMDIgMTJIOS4wMDAwMlY4Ljk5OTk5SDcuMDAwMDJWMTJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxYdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41IDAuMDAzMjk1OUM2LjgwNDczIDAuMDAzMjk1OSA2LjI0OTUzIDAuMjgxMTA2IDYuMjUgMC43NDk5OTVDNi4yNSAwLjk5NzI1OCA2LjQyNDQ2IDEuMTIwMTQgNi41NzY4NyAxLjIyNzQ5QzYuNjk1MDcgMS4zMTA3NCA2LjggMS4zODQ2NSA2LjggMS41QzYuOCAxLjcwNzEgNi4wNjIyNCAxLjc0MjY0IDUuMTk3ODkgMS43ODQyN0MzLjk3NTUzIDEuODQzMTQgMi41IDEuOTE0MjEgMi41IDIuNUMyLjUgMi43NzYxNCAyLjcyMzg2IDMgMyAzSDEyQzEyLjI3NjEgMyAxMi41IDIuNzc2MTQgMTIuNSAyLjVDMTIuNSAxLjkxNDIxIDExLjAyNDUgMS44NDMxNCA5LjgwMjExIDEuNzg0MjdDOC45Mzc3NiAxLjc0MjY0IDguMiAxLjcwNzEgOC4yIDEuNUM4LjIgMS4zODQ2NSA4LjMwNDkzIDEuMzEwNzQgOC40MjMxMyAxLjIyNzQ5QzguNTc1NTQgMS4xMjAxNCA4Ljc1IDAuOTk3MjU4IDguNzUgMC43NDk5OTVDOC43NTA0NyAwLjI4MTEwNiA4LjE5NTI3IDAuMDAzMjk1OSA3LjUgMC4wMDMyOTU5Wk0yLjg5NDUxIDYuMTIyNjZDMi4yNTgwNiA2LjUyNDcxIDEuOTA0MTcgNy4zMTExOCAyLjAyNDczIDguMDU1NkwyLjgzNTg4IDEyLjQ3NzJDMy4wMDk5MyAxMy4zNTYyIDMuNzYyOSAxNCA0LjY2MDYxIDE0SDEwLjMzNzNDMTEuMjM1NCAxNCAxMS45ODg0IDEzLjM1NjIgMTIuMTYyNSAxMi40NzcyTDEyLjk3MzYgOC4wNTYwN0MxMy4wODkgNy4zMjM1OCAxMi44Mjg0IDYuNTMyNzYgMTIuMTMzMSA2LjA5MzczQzExLjcyODMgNS44MzAxMyAxMS42NDEyIDUuMzMyMzEgMTIuMTMzMSA1LjEyNzk2QzEyLjgyODQgNC44NjQzNSAxMi42OTQ4IDQgMTIgNEgxMC4zMDAxSDYuODAwMDVIMi45OTk5NkMyLjMwNDY5IDQgMi4xOTg3OCA0Ljg5MzI4IDIuODk0NTEgNS4xNTY4OUMzLjM4NjQyIDUuMzMyMzEgMy4yOTkzOSA1LjgzMDEzIDIuODk0NTEgNi4xMjI2NlpNOC4yMDAwNiA2LjI1QzguMjAwMDYgNS44MTc2OSA4LjA4NTcyIDUuMzc2MTUgNy45MDYzNSA1TDQuMTEwOTMgNUM0LjIwNjI2IDUuMjEzMTIgNC4yNDE5IDUuNDM4ODkgNC4yMjkwNCA1LjY1NTIxQzQuMTk1MjIgNi4yMjQxMiAzLjg0NTg3IDYuNjY4OTkgMy40ODAxNiA2LjkzMzIyTDMuNDU0OTIgNi45NTE0NkwzLjQyODU4IDYuOTY4MUMzLjEzNDA3IDcuMTU0MTQgMi45NTgwMSA3LjUzOTg5IDMuMDEwNTggNy44ODc0OUwzLjgxNzk3IDEyLjI4ODZDMy45MDUxMyAxMi43MTU0IDQuMjYxNDggMTMgNC42NjA2MSAxM0gxMC4zMzczQzEwLjczNyAxMyAxMS4wOTMyIDEyLjcxNTMgMTEuMTgwNCAxMi4yODg2TDExLjk4NzQgNy44ODk4QzEyLjA0OCA3LjQ4MjQ3IDExLjg5NTQgNy4xMjYzMSAxMS41OTkyIDYuOTM5MjdMMTEuNTg3NSA2LjkzMTg0TDExLjU4NzUgNi45MzE3NkMxMS4xOTQ3IDYuNjc2MDIgMTAuODMzMSA2LjIyNzg1IDEwLjc5ODYgNS42NDc5OEMxMC43ODQ2IDUuNDEyIDEwLjgyNjQgNS4xOTM5NyAxMC45MTEyIDVIOS4wNTUxN0M5LjAxOTg3IDUuMTQ2MTEgOS4wMDAwNiA1LjMxMjAxIDkuMDAwMDYgNS41QzkuMDAwMDYgNS45NzQ1IDkuMjE2NzkgNi4zNzEyNyA5LjQ0MzY3IDYuNzg2NjJDOS42OTI4NCA3LjI0Mjc4IDkuOTU0MjUgNy43MjEzNiA5Ljk1NDI1IDguMzQ5OTNDOS45NTQyNSA5LjI2OTggOS40OTg2OCA5Ljg0MjA1IDguNjIxODkgOS44NDIwNUM4LjEzMjA2IDkuODQyMDUgNy41NzgxOCA5LjQ2MDk3IDcuNTc4MTggOC43NTc4MUM3LjU3ODE4IDguMzUyNzkgNy43MTU1OCA4LjAxNjQ2IDcuODYxMjEgNy42NTk5OEM4LjAyNTQgNy4yNTgwNiA4LjIwMDA2IDYuODMwNTEgOC4yMDAwNiA2LjI1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sSnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTE0IDExLjAwMDFWNC4wMDAwNkwxIDQuMDAwMDZMMSAxMS4wMDAxSDE0Wk0xNSA0LjAwMDA2VjExLjAwMDFDMTUgMTEuNTUyMyAxNC41NTIzIDEyLjAwMDEgMTQgMTIuMDAwMUgxQzAuNDQ3NzE1IDEyLjAwMDEgMCAxMS41NTIzIDAgMTEuMDAwMVY0LjAwMDA2QzAgMy40NDc3OCAwLjQ0NzcxNSAzLjAwMDA2IDEgMy4wMDAwNkgxNEMxNC41NTIzIDMuMDAwMDYgMTUgMy40NDc3OCAxNSA0LjAwMDA2Wk0yIDUuMjVDMiA1LjExMTkzIDIuMTExOTMgNSAyLjI1IDVINS43NUM1Ljg4ODA3IDUgNiA1LjExMTkzIDYgNS4yNVY5Ljc1QzYgOS44ODgwNyA1Ljg4ODA3IDEwIDUuNzUgMTBIMi4yNUMyLjExMTkzIDEwIDIgOS44ODgwNyAyIDkuNzVWNS4yNVpNNy41IDdDNy4yMjM4NiA3IDcgNy4yMjM4NiA3IDcuNUM3IDcuNzc2MTQgNy4yMjM4NiA4IDcuNSA4SDEwLjVDMTAuNzc2MSA4IDExIDcuNzc2MTQgMTEgNy41QzExIDcuMjIzODYgMTAuNzc2MSA3IDEwLjUgN0g3LjVaTTcgOS41QzcgOS4yMjM4NiA3LjIyMzg2IDkgNy41IDlIMTIuNUMxMi43NzYxIDkgMTMgOS4yMjM4NiAxMyA5LjVDMTMgOS43NzYxNCAxMi43NzYxIDEwIDEyLjUgMTBINy41QzcuMjIzODYgMTAgNyA5Ljc3NjE0IDcgOS41Wk03LjUgNUM3LjIyMzg2IDUgNyA1LjIyMzg2IDcgNS41QzcgNS43NzYxNCA3LjIyMzg2IDYgNy41IDZIMTEuNUMxMS43NzYxIDYgMTIgNS43NzYxNCAxMiA1LjVDMTIgNS4yMjM4NiAxMS43NzYxIDUgMTEuNSA1SDcuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFF0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjUgMUgxMi41QzEzLjMyODQgMSAxNCAxLjY3MTU3IDE0IDIuNVYxMi41QzE0IDEzLjMyODQgMTMuMzI4NCAxNCAxMi41IDE0SDIuNUMxLjY3MTU3IDE0IDEgMTMuMzI4NCAxIDEyLjVWMi41QzEgMS42NzE1NyAxLjY3MTU3IDEgMi41IDFaTTIuNSAyQzIuMjIzODYgMiAyIDIuMjIzODYgMiAyLjVWOC4zNjM2TDMuNjgxOCA2LjY4MThDMy43NjgwOSA2LjU5NTUxIDMuODg1NzIgNi41NDc5NyA0LjAwNzc0IDYuNTUwMDdDNC4xMjk3NSA2LjU1MjE2IDQuMjQ1NjggNi42MDM3MiA0LjMyODk1IDYuNjkyOTNMNy44NzM1NSAxMC40OTAxTDEwLjY4MTggNy42ODE4QzEwLjg1NzUgNy41MDYwNyAxMS4xNDI1IDcuNTA2MDcgMTEuMzE4MiA3LjY4MThMMTMgOS4zNjM2VjIuNUMxMyAyLjIyMzg2IDEyLjc3NjEgMiAxMi41IDJIMi41Wk0yIDEyLjVWOS42MzY0TDMuOTg4ODcgNy42NDc1M0w3LjUzMTEgMTEuNDQyMUw4Ljk0MTEzIDEzSDIuNUMyLjIyMzg2IDEzIDIgMTIuNzc2MSAyIDEyLjVaTTEyLjUgMTNIMTAuMTU1TDguNDgzMzYgMTEuMTUzTDExIDguNjM2NEwxMyAxMC42MzY0VjEyLjVDMTMgMTIuNzc2MSAxMi43NzYxIDEzIDEyLjUgMTNaTTYuNjQ5MjIgNS41QzYuNjQ5MjIgNS4wMzAxMyA3LjAzMDEzIDQuNjQ5MjIgNy41IDQuNjQ5MjJDNy45Njk4NyA0LjY0OTIyIDguMzUwNzggNS4wMzAxMyA4LjM1MDc4IDUuNUM4LjM1MDc4IDUuOTY5ODcgNy45Njk4NyA2LjM1MDc4IDcuNSA2LjM1MDc4QzcuMDMwMTMgNi4zNTA3OCA2LjY0OTIyIDUuOTY5ODcgNi42NDkyMiA1LjVaTTcuNSAzLjc0OTIyQzYuNTMzMDcgMy43NDkyMiA1Ljc0OTIyIDQuNTMzMDcgNS43NDkyMiA1LjVDNS43NDkyMiA2LjQ2NjkzIDYuNTMzMDcgNy4yNTA3OCA3LjUgNy4yNTA3OEM4LjQ2NjkzIDcuMjUwNzggOS4yNTA3OCA2LjQ2NjkzIDkuMjUwNzggNS41QzkuMjUwNzggNC41MzMwNyA4LjQ2NjkzIDMuNzQ5MjIgNy41IDMuNzQ5MjJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxlbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTk5MSAwLjg3Njg5MkMzLjg0MjIyIDAuODc2ODkyIDAuODc3MDc1IDMuODQyMDQgMC44NzcwNzUgNy40OTk3MkMwLjg3NzA3NSAxMS4xNTc0IDMuODQyMjIgMTQuMTIyNiA3LjQ5OTkxIDE0LjEyMjZDMTEuMTU3NiAxNC4xMjI2IDE0LjEyMjcgMTEuMTU3NCAxNC4xMjI3IDcuNDk5NzJDMTQuMTIyNyAzLjg0MjA0IDExLjE1NzYgMC44NzY4OTIgNy40OTk5MSAwLjg3Njg5MlpNMS44MjcwNyA3LjQ5OTcyQzEuODI3MDcgNC4zNjY3MSA0LjM2Njg5IDEuODI2ODkgNy40OTk5MSAxLjgyNjg5QzEwLjYzMjkgMS44MjY4OSAxMy4xNzI3IDQuMzY2NzEgMTMuMTcyNyA3LjQ5OTcyQzEzLjE3MjcgMTAuNjMyNyAxMC42MzI5IDEzLjE3MjYgNy40OTk5MSAxMy4xNzI2QzQuMzY2ODkgMTMuMTcyNiAxLjgyNzA3IDEwLjYzMjcgMS44MjcwNyA3LjQ5OTcyWk04LjI0OTkyIDQuNDk5OTlDOC4yNDk5MiA0LjkxNDIgNy45MTQxMyA1LjI0OTk5IDcuNDk5OTIgNS4yNDk5OUM3LjA4NTcxIDUuMjQ5OTkgNi43NDk5MiA0LjkxNDIgNi43NDk5MiA0LjQ5OTk5QzYuNzQ5OTIgNC4wODU3NyA3LjA4NTcxIDMuNzQ5OTkgNy40OTk5MiAzLjc0OTk5QzcuOTE0MTMgMy43NDk5OSA4LjI0OTkyIDQuMDg1NzcgOC4yNDk5MiA0LjQ5OTk5Wk02LjAwMDAzIDUuOTk5OTlINi41MDAwM0g3LjUwMDAzQzcuNzc2MTggNS45OTk5OSA4LjAwMDAzIDYuMjIzODQgOC4wMDAwMyA2LjQ5OTk5VjkuOTk5OTlIOC41MDAwM0g5LjAwMDAzVjExSDguNTAwMDNINy41MDAwM0g2LjUwMDAzSDYuMDAwMDNWOS45OTk5OUg2LjUwMDAzSDcuMDAwMDNWNi45OTk5OUg2LjUwMDAzSDYuMDAwMDNWNS45OTk5OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHRuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02LjUgMUM2LjIyMzg2IDEgNiAxLjIyMzg2IDYgMS41QzYgMS43NzYxNCA2LjIyMzg2IDIgNi41IDJDNy4xMjY3MSAyIDcuNDU3MTggMi4yMDAyOCA3LjY1NTYzIDIuNDc4MTJDNy44NzgxIDIuNzg5NTcgOCAzLjI4ODM3IDggNFYxMUM4IDExLjcxMTYgNy44NzgxIDEyLjIxMDQgNy42NTU2MyAxMi41MjE5QzcuNDU3MTggMTIuNzk5NyA3LjEyNjcxIDEzIDYuNSAxM0M2LjIyMzg2IDEzIDYgMTMuMjIzOSA2IDEzLjVDNiAxMy43NzYxIDYuMjIzODYgMTQgNi41IDE0QzcuMzczMjkgMTQgOC4wNDI4MiAxMy43MDAzIDguNDY5MzcgMTMuMTAzMUM4LjQ3OTc2IDEzLjA4ODYgOC40ODk5NyAxMy4wNzM5IDguNSAxMy4wNTkxQzguNTEwMDMgMTMuMDczOSA4LjUyMDI0IDEzLjA4ODYgOC41MzA2MyAxMy4xMDMxQzguOTU3MTggMTMuNzAwMyA5LjYyNjcxIDE0IDEwLjUgMTRDMTAuNzc2MSAxNCAxMSAxMy43NzYxIDExIDEzLjVDMTEgMTMuMjIzOSAxMC43NzYxIDEzIDEwLjUgMTNDOS44NzMyOSAxMyA5LjU0MjgyIDEyLjc5OTcgOS4zNDQzNyAxMi41MjE5QzkuMTIxOSAxMi4yMTA0IDkgMTEuNzExNiA5IDExVjRDOSAzLjI4ODM3IDkuMTIxOSAyLjc4OTU3IDkuMzQ0MzcgMi40NzgxMkM5LjU0MjgyIDIuMjAwMjggOS44NzMyOSAyIDEwLjUgMkMxMC43NzYxIDIgMTEgMS43NzYxNCAxMSAxLjVDMTEgMS4yMjM4NiAxMC43NzYxIDEgMTAuNSAxQzkuNjI2NzEgMSA4Ljk1NzE4IDEuMjk5NzIgOC41MzA2MyAxLjg5Njg4QzguNTIwMjQgMS45MTE0MyA4LjUxMDAzIDEuOTI2MTEgOC41IDEuOTQwOUM4LjQ4OTk3IDEuOTI2MTEgOC40Nzk3NiAxLjkxMTQzIDguNDY5MzcgMS44OTY4OEM4LjA0MjgyIDEuMjk5NzIgNy4zNzMyOSAxIDYuNSAxWk0xNCA1SDExVjRIMTRDMTQuNTUyMyA0IDE1IDQuNDQ3NzIgMTUgNVYxMEMxNSAxMC41NTIzIDE0LjU1MjMgMTEgMTQgMTFIMTFWMTBIMTRWNVpNNiA0VjVIMUwxIDEwSDZWMTFIMUMwLjQ0NzcxNSAxMSAwIDEwLjU1MjMgMCAxMFY1QzAgNC40NDc3MiAwLjQ0NzcxNSA0IDEgNEg2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUuNDk5OTggMC41QzUuNDk5OTggMC4yMjM4NTggNS43MjM4MyAwIDUuOTk5OTggMEg3LjQ5OTk4SDguOTk5OThDOS4yNzYxMiAwIDkuNDk5OTggMC4yMjM4NTggOS40OTk5OCAwLjVDOS40OTk5OCAwLjc3NjE0MiA5LjI3NjEyIDEgOC45OTk5OCAxSDcuOTk5OThWMi4xMTkyMkM5LjA5ODMyIDIuMjA0MDkgMTAuMTE5IDIuNTY2MjIgMTAuOTkyIDMuMTM1NzJDMTEuMDExNiAzLjEwODUxIDExLjAzMzYgMy4wODI1MiAxMS4wNTggMy4wNTgwNkwxMi4wNTggMi4wNTgwNkMxMi4zMDIxIDEuODEzOTggMTIuNjk3OCAxLjgxMzk4IDEyLjk0MTkgMi4wNTgwNkMxMy4xODYgMi4zMDIxNCAxMy4xODYgMi42OTc4NiAxMi45NDE5IDIuOTQxOTRMMTEuOTY3IDMuOTE2ODJDMTMuMTU5NSA1LjA3OTI1IDEzLjkgNi43MDMxNCAxMy45IDguNDk5OThDMTMuOSAxMi4wMzQ2IDExLjAzNDYgMTQuOSA3LjQ5OTk4IDE0LjlDMy45NjUzNSAxNC45IDEuMDk5OTggMTIuMDM0NiAxLjA5OTk4IDguNDk5OThDMS4wOTk5OCA1LjEzMzYxIDMuNjk5MDQgMi4zNzQzIDYuOTk5OTggMi4xMTkyMlYxSDUuOTk5OThDNS43MjM4MyAxIDUuNDk5OTggMC43NzYxNDIgNS40OTk5OCAwLjVaTTIuMDk5OTggOC40OTk5OEMyLjA5OTk4IDUuNTE3NjQgNC41MTc2NCAzLjA5OTk4IDcuNDk5OTggMy4wOTk5OEMxMC40ODIzIDMuMDk5OTggMTIuOSA1LjUxNzY0IDEyLjkgOC40OTk5OEMxMi45IDExLjQ4MjMgMTAuNDgyMyAxMy45IDcuNDk5OTggMTMuOUM0LjUxNzY0IDEzLjkgMi4wOTk5OCAxMS40ODIzIDIuMDk5OTggOC40OTk5OFpNNy40OTk5OCA4LjQ5OTk4VjQuMDk5OThDNS4wNjk5MiA0LjA5OTk4IDMuMDk5OTggNi4wNjk5MiAzLjA5OTk4IDguNDk5OThDMy4wOTk5OCAxMC45MyA1LjA2OTkyIDEyLjkgNy40OTk5OCAxMi45QzguNzE1IDEyLjkgOS44MTUgMTIuNDA3NSAxMC42MTEyIDExLjYxMTJMNy40OTk5OCA4LjQ5OTk4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNzU0MzIgMC44MTk1MzdDNy41OTc0MiAwLjcyNjgyMSA3LjQwMjUgMC43MjY4MjEgNy4yNDU1OSAwLjgxOTUzN0wxLjc0NTU5IDQuMDY5NTRDMS41OTMzNiA0LjE1OTQ5IDEuNDk5OTYgNC4zMjMxNyAxLjQ5OTk2IDQuNUMxLjQ5OTk2IDQuNjc2ODMgMS41OTMzNiA0Ljg0MDUxIDEuNzQ1NTkgNC45MzA0Nkw3LjI0NTU5IDguMTgwNDZDNy40MDI1IDguMjczMTggNy41OTc0MiA4LjI3MzE4IDcuNzU0MzIgOC4xODA0NkwxMy4yNTQzIDQuOTMwNDZDMTMuNDA2NiA0Ljg0MDUxIDEzLjUgNC42NzY4MyAxMy41IDQuNUMxMy41IDQuMzIzMTcgMTMuNDA2NiA0LjE1OTQ5IDEzLjI1NDMgNC4wNjk1NEw3Ljc1NDMyIDAuODE5NTM3Wk03LjQ5OTk2IDcuMTY5MjNMMi45ODI4IDQuNUw3LjQ5OTk2IDEuODMwNzdMMTIuMDE3MSA0LjVMNy40OTk5NiA3LjE2OTIzWk0xLjU2OTUgNy40OTU2NEMxLjcwOTk4IDcuMjU3OSAyLjAxNjU5IDcuMTc5MDYgMi4yNTQzMiA3LjMxOTU0TDcuNDk5OTYgMTAuNDE5MkwxMi43NDU2IDcuMzE5NTRDMTIuOTgzMyA3LjE3OTA2IDEzLjI4OTkgNy4yNTc5IDEzLjQzMDQgNy40OTU2NEMxMy41NzA5IDcuNzMzMzcgMTMuNDkyMSA4LjAzOTk4IDEzLjI1NDMgOC4xODA0Nkw3Ljc1NDMyIDExLjQzMDVDNy41OTc0MiAxMS41MjMyIDcuNDAyNSAxMS41MjMyIDcuMjQ1NTkgMTEuNDMwNUwxLjc0NTU5IDguMTgwNDZDMS41MDc4NiA4LjAzOTk4IDEuNDI5MDEgNy43MzMzNyAxLjU2OTUgNy40OTU2NFpNMS41Njk0OSAxMC40OTU2QzEuNzA5OTggMTAuMjU3OSAyLjAxNjU4IDEwLjE3OTEgMi4yNTQzMiAxMC4zMTk1TDcuNDk5OTYgMTMuNDE5MkwxMi43NDU2IDEwLjMxOTVDMTIuOTgzMyAxMC4xNzkxIDEzLjI4OTkgMTAuMjU3OSAxMy40MzA0IDEwLjQ5NTZDMTMuNTcwOSAxMC43MzM0IDEzLjQ5MjEgMTEuMDQgMTMuMjU0MyAxMS4xODA1TDcuNzU0MzIgMTQuNDMwNUM3LjU5NzQyIDE0LjUyMzIgNy40MDI1IDE0LjUyMzIgNy4yNDU1OSAxNC40MzA1TDEuNzQ1NTkgMTEuMTgwNUMxLjUwNzg1IDExLjA0IDEuNDI5MDEgMTAuNzMzNCAxLjU2OTQ5IDEwLjQ5NTZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxvbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOSAySDZWMTNIOVYyWk0xMCAyVjEzSDEyLjVDMTIuNzc2MSAxMyAxMyAxMi43NzYxIDEzIDEyLjVWMi41QzEzIDIuMjIzODYgMTIuNzc2MSAyIDEyLjUgMkgxMFpNMi41IDJINVYxM0gyLjVDMi4yMjM4NiAxMyAyIDEyLjc3NjEgMiAxMi41VjIuNUMyIDIuMjIzODYgMi4yMjM4NiAyIDIuNSAyWk0yLjUgMUMxLjY3MTU3IDEgMSAxLjY3MTU3IDEgMi41VjEyLjVDMSAxMy4zMjg0IDEuNjcxNTcgMTQgMi41IDE0SDEyLjVDMTMuMzI4NCAxNCAxNCAxMy4zMjg0IDE0IDEyLjVWMi41QzE0IDEuNjcxNTcgMTMuMzI4NCAxIDEyLjUgMUgyLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxhbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy42ODk3OSAyLjc1QzMuODk2NjcgMi43NDk3OSA0LjA4MjMyIDIuODc3MDEgNC4xNTY3OSAzLjA3MDAzTDcuMzY2NjIgMTEuMzlDNy40NjYwMiAxMS42NDc3IDcuMzM3NzQgMTEuOTM3MSA3LjA4MDEgMTIuMDM2NUM2LjgyMjQ3IDEyLjEzNTkgNi41MzMwNCAxMi4wMDc2IDYuNDMzNjUgMTEuNzVMNS4zODI1IDkuMDI1MzdIMi4wMTEzM0wwLjk2Njk5MiAxMS43NDlDMC44NjgxMjggMTIuMDA2OCAwLjU3ODk2NCAxMi4xMzU3IDAuMzIxMTI2IDEyLjAzNjlDMC4wNjMyODc4IDExLjkzOCAtMC4wNjU1ODY0IDExLjY0ODggMC4wMzMyNzc0IDExLjM5MUwzLjIyMzQ0IDMuMDcwOTlDMy4yOTc1MSAyLjg3NzgyIDMuNDgyOSAyLjc1MDIxIDMuNjg5NzkgMi43NVpNMy42OTE3NCA0LjY0Mjg0TDUuMDU0NTggOC4xNzUzN0gyLjMzNzI0TDMuNjkxNzQgNC42NDI4NFpNMTAuODk4OSA1LjIwNzAzQzkuMjU4MTggNS4yMDcwMyA4LjAwOTE1IDYuNjg1NjkgOC4wMDkxNSA4LjYwOTcyQzguMDA5MTUgMTAuNjMzNyA5LjM1ODE4IDEyLjAxMjQgMTAuODk4OSAxMi4wMTI0QzExLjcyMTQgMTIuMDEyNCAxMi41NzQ0IDExLjY2OTIgMTMuMTU0MyAxMS4wMjE5VjExLjUzQzEzLjE1NDMgMTEuNzc4NSAxMy4zNTU3IDExLjk4IDEzLjYwNDMgMTEuOThDMTMuODUyOCAxMS45OCAxNC4wNTQzIDExLjc3ODUgMTQuMDU0MyAxMS41M1Y1LjcyQzE0LjA1NDMgNS40NzE0NyAxMy44NTI4IDUuMjcgMTMuNjA0MyA1LjI3QzEzLjM1NTcgNS4yNyAxMy4xNTQzIDUuNDcxNDcgMTMuMTU0MyA1LjcyVjYuMjIzMTdDMTIuNjA1NCA1LjYwMDk1IDExLjc5MjQgNS4yMDcwMyAxMC44OTg5IDUuMjA3MDNaTTEzLjE1NDMgOS43OTgyM1Y3LjMwMTk1QzEyLjc2MzkgNi41ODEwMSAxMS45NDE0IDYuMDU3NTcgMTEuMDg2OCA2LjA1NzU3QzEwLjEwODggNi4wNTc1NyA5LjAzNTAzIDYuOTY1ODEgOS4wMzUwMyA4LjYwOTU1QzkuMDM1MDMgMTAuMTUzMyAxMC4wMDg4IDExLjE2MTUgMTEuMDg2OCAxMS4xNjE1QzExLjk3MDEgMTEuMTYxNSAxMi43NzE5IDEwLjQ5NTIgMTMuMTU0MyA5Ljc5ODIzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNjk4OTkgNS4yMDcwM0MyLjA1ODIzIDUuMjA3MDMgMC44MDkyMDQgNi42ODU2OSAwLjgwOTIwNCA4LjYwOTcyQzAuODA5MjA0IDEwLjYzMzcgMi4xNTgyMyAxMi4wMTI0IDMuNjk4OTkgMTIuMDEyNEM0LjUyMTI2IDEyLjAxMjQgNS4zNzQwMiAxMS42NjkzIDUuOTUzOSAxMS4wMjIzVjExLjUzQzUuOTUzOSAxMS43Nzg1IDYuMTU1MzcgMTEuOTggNi40MDM5IDExLjk4QzYuNjUyNDMgMTEuOTggNi44NTM5IDExLjc3ODUgNi44NTM5IDExLjUzVjUuNzIwMDFDNi44NTM5IDUuNDcxNDkgNi42NTI0MyA1LjI3MDAxIDYuNDAzOSA1LjI3MDAxQzYuMTU1MzcgNS4yNzAwMSA1Ljk1MzkgNS40NzE0OSA1Ljk1MzkgNS43MjAwMVY2LjIyMjY5QzUuNDA1MDYgNS42MDA3NSA0LjU5MjE4IDUuMjA3MDMgMy42OTg5OSA1LjIwNzAzWk01Ljk1MzkgOS43OTlWNy4zMDExN0M1LjU2MzM5IDYuNTgwNjQgNC43NDExOCA2LjA1NzU3IDMuODg2OCA2LjA1NzU3QzIuOTA4OSA2LjA1NzU3IDEuODM1MDggNi45NjU4MSAxLjgzNTA4IDguNjA5NTVDMS44MzUwOCAxMC4xNTMzIDIuODA4ODkgMTEuMTYxNSAzLjg4NjggMTEuMTYxNUM0Ljc2OTg0IDExLjE2MTUgNS41NzE0MSAxMC40OTU3IDUuOTUzOSA5Ljc5OVpNMTAuNzk5IDUuMjA3MDNDOS4xNTgyMyA1LjIwNzAzIDcuOTA5MiA2LjY4NTY5IDcuOTA5MiA4LjYwOTcyQzcuOTA5MiAxMC42MzM3IDkuMjU4MjMgMTIuMDEyNCAxMC43OTkgMTIuMDEyNEMxMS42MjE1IDEyLjAxMjQgMTIuNDc0NCAxMS42NjkyIDEzLjA1NDMgMTEuMDIxOFYxMS41M0MxMy4wNTQzIDExLjc3ODUgMTMuMjU1OCAxMS45OCAxMy41MDQzIDExLjk4QzEzLjc1MjkgMTEuOTggMTMuOTU0MyAxMS43Nzg1IDEzLjk1NDMgMTEuNTNWNS43MkMxMy45NTQzIDUuNDcxNDcgMTMuNzUyOSA1LjI3IDEzLjUwNDMgNS4yN0MxMy4yNTU4IDUuMjcgMTMuMDU0MyA1LjQ3MTQ3IDEzLjA1NDMgNS43MlY2LjIyMzE4QzEyLjUwNTUgNS42MDA5NSAxMS42OTI0IDUuMjA3MDMgMTAuNzk5IDUuMjA3MDNaTTEzLjA1NDMgOS43OTgyMlY3LjMwMTk2QzEyLjY2NCA2LjU4MTAyIDExLjg0MTUgNi4wNTc1NyAxMC45ODY4IDYuMDU3NTdDMTAuMDA4OSA2LjA1NzU3IDguOTM1MDggNi45NjU4MSA4LjkzNTA4IDguNjA5NTVDOC45MzUwOCAxMC4xNTMzIDkuOTA4ODkgMTEuMTYxNSAxMC45ODY4IDExLjE2MTVDMTEuODcwMiAxMS4xNjE1IDEyLjY3MiAxMC40OTUyIDEzLjA1NDMgOS43OTgyMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHNuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMS4yODk1IDIuNzVDMTEuNDk2NCAyLjc0OTc5IDExLjY4MjEgMi44NzcwMSAxMS43NTY1IDMuMDcwMDNMMTQuOTY2NCAxMS4zOUMxNS4wNjU3IDExLjY0NzcgMTQuOTM3NSAxMS45MzcxIDE0LjY3OTggMTIuMDM2NUMxNC40MjIyIDEyLjEzNTkgMTQuMTMyOCAxMi4wMDc2IDE0LjAzMzQgMTEuNzVMMTIuOTgyMiA5LjAyNTM3SDkuNjExMDZMOC41NjY3MiAxMS43NDlDOC40Njc4NiAxMi4wMDY4IDguMTc4NyAxMi4xMzU3IDcuOTIwODYgMTIuMDM2OUM3LjY2MzAyIDExLjkzOCA3LjUzNDE0IDExLjY0ODggNy42MzMwMSAxMS4zOTFMMTAuODIzMiAzLjA3MDk5QzEwLjg5NzIgMi44Nzc4MiAxMS4wODI2IDIuNzUwMjEgMTEuMjg5NSAyLjc1Wk0xMS4yOTE1IDQuNjQyODRMMTIuNjU0MyA4LjE3NTM3SDkuOTM2OThMMTEuMjkxNSA0LjY0Mjg0Wk0yLjg5ODk1IDUuMjA3MDNDMS4yNTgxOCA1LjIwNzAzIDAuMDA5MTU1MjcgNi42ODU2OSAwLjAwOTE1NTI3IDguNjA5NzJDMC4wMDkxNTUyNyAxMC42MzM3IDEuMzU4MTggMTIuMDEyNCAyLjg5ODk1IDEyLjAxMjRDMy43MjE0MSAxMi4wMTI0IDQuNTc0MzggMTEuNjY5MiA1LjE1NDI3IDExLjAyMTlWMTEuNTNDNS4xNTQyNyAxMS43Nzg1IDUuMzU1NzQgMTEuOTggNS42MDQyNyAxMS45OEM1Ljg1MjggMTEuOTggNi4wNTQyNyAxMS43Nzg1IDYuMDU0MjcgMTEuNTNWNS43MkM2LjA1NDI3IDUuNDcxNDcgNS44NTI4IDUuMjcgNS42MDQyNyA1LjI3QzUuMzU1NzQgNS4yNyA1LjE1NDI3IDUuNDcxNDcgNS4xNTQyNyA1LjcyVjYuMjIzMTdDNC42MDU0MyA1LjYwMDk1IDMuNzkyMzYgNS4yMDcwMyAyLjg5ODk1IDUuMjA3MDNaTTUuMTU0MjcgOS43OTgyM1Y3LjMwMTk1QzQuNzYzOTMgNi41ODEwMSAzLjk0MTQ0IDYuMDU3NTcgMy4wODY3NSA2LjA1NzU3QzIuMTA4ODUgNi4wNTc1NyAxLjAzNTAzIDYuOTY1ODEgMS4wMzUwMyA4LjYwOTU1QzEuMDM1MDMgMTAuMTUzMyAyLjAwODg1IDExLjE2MTUgMy4wODY3NSAxMS4xNjE1QzMuOTcwMTEgMTEuMTYxNSA0Ljc3MTk1IDEwLjQ5NTIgNS4xNTQyNyA5Ljc5ODIzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sY249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNjI1NSAyLjc1QzMuODM0NzggMi43NSA0LjAyMTkyIDIuODgwMzQgNC4wOTQ0OCAzLjA3NjY0TDcuMTY5ODUgMTEuMzk2MkM3LjI2NTYgMTEuNjU1MiA3LjEzMzI0IDExLjk0MjggNi44NzQyMyAxMi4wMzg2QzYuNjE1MjIgMTIuMTM0MyA2LjMyNzYzIDEyLjAwMiA2LjIzMTg4IDExLjc0MjlMNS4yMjM4NyA5LjAxNjAzSDIuMDI3MTJMMS4wMTkxMSAxMS43NDI5QzAuOTIzMzYyIDEyLjAwMiAwLjYzNTc3NCAxMi4xMzQzIDAuMzc2NzYyIDEyLjAzODZDMC4xMTc3NDkgMTEuOTQyOCAtMC4wMTQ2MDUyIDExLjY1NTIgMC4wODExNDAxIDExLjM5NjJMMy4xNTY1MSAzLjA3NjY0QzMuMjI5MDggMi44ODAzNCAzLjQxNjIxIDIuNzUgMy42MjU1IDIuNzVaTTMuNjI1NSA0LjY5MjA3TDQuOTA5NjYgOC4xNjYwM0gyLjM0MTMzTDMuNjI1NSA0LjY5MjA3Wk0xMS4zNzE5IDIuNzVDMTEuNTgxMSAyLjc1IDExLjc2ODMgMi44ODAzNCAxMS44NDA4IDMuMDc2NjRMMTQuOTE2MiAxMS4zOTYyQzE1LjAxMiAxMS42NTUyIDE0Ljg3OTYgMTEuOTQyOCAxNC42MjA2IDEyLjAzODZDMTQuMzYxNiAxMi4xMzQzIDE0LjA3NCAxMi4wMDIgMTMuOTc4MiAxMS43NDI5TDEyLjk3MDIgOS4wMTYwM0g5Ljc3MzQ4TDguNzY1NDcgMTEuNzQyOUM4LjY2OTcyIDEyLjAwMiA4LjM4MjEzIDEyLjEzNDMgOC4xMjMxMiAxMi4wMzg2QzcuODY0MTEgMTEuOTQyOCA3LjczMTc1IDExLjY1NTIgNy44Mjc1IDExLjM5NjJMMTAuOTAyOSAzLjA3NjY0QzEwLjk3NTQgMi44ODAzNCAxMS4xNjI2IDIuNzUgMTEuMzcxOSAyLjc1Wk0xMS4zNzE5IDQuNjkyMDdMMTIuNjU2IDguMTY2MDNIMTAuMDg3N0wxMS4zNzE5IDQuNjkyMDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx1bj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC41NTI5MyAwLjk5OTk2OUM0Ljc1Mjk1IDAuOTk5OTY5IDQuOTMzNzIgMS4xMTkxNyA1LjAxMjUgMS4zMDMwMUw4LjAxMTA2IDguMjk5ODJDOC4xMTk4NCA4LjU1MzYzIDguMDAyMjYgOC44NDc1NyA3Ljc0ODQ0IDguOTU2MzVDNy40OTQ2MyA5LjA2NTEyIDcuMjAwNjkgOC45NDc1NCA3LjA5MTkxIDguNjkzNzNMNi4xMTYxMyA2LjQxNjg1SDIuOTg5NzNMMi4wMTM5NSA4LjY5MzczQzEuOTA1MTcgOC45NDc1NCAxLjYxMTIzIDkuMDY1MTIgMS4zNTc0MiA4Ljk1NjM1QzEuMTAzNiA4Ljg0NzU3IDAuOTg2MDIzIDguNTUzNjMgMS4wOTQ4IDguMjk5ODJMNC4wOTMzNiAxLjMwMzAxQzQuMTcyMTQgMS4xMTkxNyA0LjM1MjkxIDAuOTk5OTY5IDQuNTUyOTMgMC45OTk5NjlaTTQuNTUyOTMgMi43NjkyOUw1Ljc1MTg2IDUuNTY2ODVIMy4zNTRMNC41NTI5MyAyLjc2OTI5Wk0xMS4wNTYyIDkuMDAyMTRDMTEuMjYxNyA5LjAwMjE0IDExLjQ0NjMgOC44NzYzMyAxMS41MjE1IDguNjg1MDJMMTQuMjczMyAxLjY4Mjk5QzE0LjM3NDMgMS40MjU5OCAxNC4yNDc4IDEuMTM1NzUgMTMuOTkwOCAxLjAzNDc1QzEzLjczMzggMC45MzM3NDcgMTMuNDQzNiAxLjA2MDIxIDEzLjM0MjYgMS4zMTcyMkwxMS4wNTYyIDcuMTM1MTRMOC43Njk3MyAxLjMxNzIyQzguNjY4NzMgMS4wNjAyMSA4LjM3ODUgMC45MzM3NDcgOC4xMjE1IDEuMDM0NzVDNy44NjQ0OSAxLjEzNTc1IDcuNzM4MDIgMS40MjU5OCA3LjgzOTAyIDEuNjgyOTlMMTAuNTkwOCA4LjY4NTAyQzEwLjY2NiA4Ljg3NjMzIDEwLjg1MDYgOS4wMDIxNCAxMS4wNTYyIDkuMDAyMTRaTTE0Ljk1MzcgMTIuNDk5OUMxNC45NTM3IDEyLjYwNiAxNC45MTE1IDEyLjcwNzcgMTQuODM2NSAxMi43ODI4TDEyLjgzNjUgMTQuNzgyOEMxMi42ODAzIDE0LjkzOSAxMi40MjcxIDE0LjkzOSAxMi4yNzA4IDE0Ljc4MjhDMTIuMTE0NiAxNC42MjY1IDEyLjExNDYgMTQuMzczMyAxMi4yNzA4IDE0LjIxNzFMMTMuNTg4IDEyLjg5OTlIMS41MTkzN0wyLjgzNjUzIDE0LjIxNzFDMi45OTI3NCAxNC4zNzMzIDIuOTkyNzQgMTQuNjI2NSAyLjgzNjUzIDE0Ljc4MjhDMi42ODAzMiAxNC45MzkgMi40MjcwNSAxNC45MzkgMi4yNzA4NCAxNC43ODI4TDAuMjcwODQzIDEyLjc4MjhDMC4xOTU4MjggMTIuNzA3NyAwLjE1MzY4NyAxMi42MDYgMC4xNTM2ODcgMTIuNDk5OUMwLjE1MzY4NyAxMi4zOTM4IDAuMTk1ODI4IDEyLjI5MjEgMC4yNzA4NDMgMTIuMjE3MUwyLjI3MDg0IDEwLjIxNzFDMi40MjcwNSAxMC4wNjA5IDIuNjgwMzIgMTAuMDYwOSAyLjgzNjUzIDEwLjIxNzFDMi45OTI3NCAxMC4zNzMzIDIuOTkyNzQgMTAuNjI2NSAyLjgzNjUzIDEwLjc4MjhMMS41MTkzNyAxMi4wOTk5TDEzLjU4OCAxMi4wOTk5TDEyLjI3MDggMTAuNzgyOEMxMi4xMTQ2IDEwLjYyNjUgMTIuMTE0NiAxMC4zNzMzIDEyLjI3MDggMTAuMjE3MUMxMi40MjcxIDEwLjA2MDkgMTIuNjgwMyAxMC4wNjA5IDEyLjgzNjUgMTAuMjE3MUwxNC44MzY1IDEyLjIxNzFDMTQuOTExNSAxMi4yOTIxIDE0Ljk1MzcgMTIuMzkzOCAxNC45NTM3IDEyLjQ5OTlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxmbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC42OTY2NiAwLjA0MDM1NEM4LjkwODU5IDAuMTMxMDM4IDkuMDMxMDUgMC4zNTQ4NTYgOC45OTMxNSAwLjU4MjIzNUw4LjA5MDE5IDYuMDAwMDFIMTIuNDk5OUMxMi42ODkzIDYuMDAwMDEgMTIuODYyNSA2LjEwNzAxIDEyLjk0NzIgNi4yNzY0QzEzLjAzMTggNi40NDU3OSAxMy4wMTM2IDYuNjQ4NSAxMi44OTk5IDYuOEw2Ljg5OTk3IDE0LjhDNi43NjE2NiAxNC45ODQ0IDYuNTE1MiAxNS4wNTAzIDYuMzAzMjcgMTQuOTU5NkM2LjA5MTM0IDE0Ljg2OSA1Ljk2ODg4IDE0LjY0NTEgNi4wMDY3OCAxNC40MTc4TDYuOTA5NzQgOC45OTk5OUgyLjQ5OTk5QzIuMzEwNjEgOC45OTk5OSAyLjEzNzQ3IDguODkyOTkgMi4wNTI3OCA4LjcyMzZDMS45NjgwOCA4LjU1NDIxIDEuOTg2MzYgOC4zNTE1IDIuMDk5OTkgOC4yTDguMDk5OTYgMC4yMDAwMzdDOC4yMzgyNyAwLjAxNTYyNTUgOC40ODQ3MyAtMC4wNTAzMzAxIDguNjk2NjYgMC4wNDAzNTRaTTMuNDk5OTkgOEg3LjQ5OTk2QzcuNjQ2OTQgOCA3Ljc4NjQ3IDguMDY0NjYgNy44ODE0NyA4LjE3NjgxQzcuOTc2NDcgOC4yODg5NSA4LjAxNzMyIDguNDM3MjIgNy45OTMxNiA4LjU4MjE5TDcuMzMwMjYgMTIuNTU5NkwxMS40OTk5IDdINy40OTk5NkM3LjM1Mjk5IDcgNy4yMTM0NiA2LjkzNTM0IDcuMTE4NDYgNi44MjMxOUM3LjAyMzQ2IDYuNzExMDUgNi45ODI2MSA2LjU2Mjc4IDcuMDA2NzcgNi40MTc4MUw3LjY2OTY3IDIuNDQwNDJMMy40OTk5OSA4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNzgyMzMgMi4yMTcxM0MzLjcwNzMyIDIuMTQyMTIgMy42MDU1NyAyLjA5OTk4IDMuNDk5NDkgMi4wOTk5OEMzLjM5MzQgMi4wOTk5OCAzLjI5MTY2IDIuMTQyMTIgMy4yMTY2NCAyLjIxNzEzTDEuMjE2NjQgNC4yMTcxM0MxLjA2MDQ0IDQuMzczMzQgMS4wNjA0NCA0LjYyNjYxIDEuMjE2NjQgNC43ODI4MkMxLjM3Mjg1IDQuOTM5MDMgMS42MjYxMiA0LjkzOTAzIDEuNzgyMzMgNC43ODI4MkwzLjA5OTQ5IDMuNDY1NjZMMy4wOTk0OSAxMS41MzQzTDEuNzgyMzMgMTAuMjE3MUMxLjYyNjEyIDEwLjA2MDkgMS4zNzI4NSAxMC4wNjA5IDEuMjE2NjQgMTAuMjE3MUMxLjA2MDQzIDEwLjM3MzMgMS4wNjA0MyAxMC42MjY2IDEuMjE2NjQgMTAuNzgyOEwzLjIxNjY0IDEyLjc4MjhDMy4yOTE2NiAxMi44NTc4IDMuMzkzNCAxMi45IDMuNDk5NDkgMTIuOUMzLjYwNTU3IDEyLjkgMy43MDczMSAxMi44NTc4IDMuNzgyMzMgMTIuNzgyOEw1Ljc4MjMzIDEwLjc4MjhDNS45Mzg1NCAxMC42MjY2IDUuOTM4NTQgMTAuMzczMyA1Ljc4MjMzIDEwLjIxNzFDNS42MjYxMiAxMC4wNjA5IDUuMzcyODUgMTAuMDYwOSA1LjIxNjY0IDEwLjIxNzFMMy44OTk0OSAxMS41MzQzTDMuODk5NDkgMy40NjU2Nkw1LjIxNjY0IDQuNzgyODJDNS4zNzI4NSA0LjkzOTAzIDUuNjI2MTIgNC45MzkwMyA1Ljc4MjMzIDQuNzgyODJDNS45Mzg1NCA0LjYyNjYxIDUuOTM4NTQgNC4zNzMzNCA1Ljc4MjMzIDQuMjE3MTNMMy43ODIzMyAyLjIxNzEzWk04LjQ5OTk4IDMuOTk5OTdDOC4yMjM4MyAzLjk5OTk3IDcuOTk5OTggNC4yMjM4MiA3Ljk5OTk4IDQuNDk5OTdDNy45OTk5OCA0Ljc3NjExIDguMjIzODMgNC45OTk5NyA4LjQ5OTk4IDQuOTk5OTdIMTQuNUMxNC43NzYxIDQuOTk5OTcgMTUgNC43NzYxMSAxNSA0LjQ5OTk3QzE1IDQuMjIzODIgMTQuNzc2MSAzLjk5OTk3IDE0LjUgMy45OTk5N0g4LjQ5OTk4Wk03Ljk5OTk4IDcuNDk5OTdDNy45OTk5OCA3LjIyMzgyIDguMjIzODMgNi45OTk5NyA4LjQ5OTk4IDYuOTk5OTdIMTQuNUMxNC43NzYxIDYuOTk5OTcgMTUgNy4yMjM4MiAxNSA3LjQ5OTk3QzE1IDcuNzc2MTEgMTQuNzc2MSA3Ljk5OTk3IDE0LjUgNy45OTk5N0g4LjQ5OTk4QzguMjIzODMgNy45OTk5NyA3Ljk5OTk4IDcuNzc2MTEgNy45OTk5OCA3LjQ5OTk3Wk04LjQ5OTk4IDkuOTk5OTdDOC4yMjM4MyA5Ljk5OTk3IDcuOTk5OTggMTAuMjIzOCA3Ljk5OTk4IDEwLjVDNy45OTk5OCAxMC43NzYxIDguMjIzODMgMTEgOC40OTk5OCAxMUgxNC41QzE0Ljc3NjEgMTEgMTUgMTAuNzc2MSAxNSAxMC41QzE1IDEwLjIyMzggMTQuNzc2MSA5Ljk5OTk3IDE0LjUgOS45OTk5N0g4LjQ5OTk4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuNjI0NzEgNC4wMDAwMUw0LjU2NDAyIDQuMDAwMDFDNC4wNDEzNCAzLjk5OTkzIDMuNzA2ODcgMy45OTk4OCAzLjQxODIgNC4wNTVDMi4yMzc5IDQuMjgwMzkgMS4yOTg0NiA1LjE3MDUzIDEuMDU4MTUgNi4zMzAzNUMwLjk5OTUzOCA2LjYxMzIxIDAuOTk5NjA0IDYuOTM5OTggMC45OTk3MDMgNy40MzY4OUwwLjk5OTcxMSA3LjUwMDAxTDAuOTk5NzAzIDcuNTYzMTNDMC45OTk2MDQgOC4wNjAwNCAwLjk5OTUzOCA4LjM4NjgxIDEuMDU4MTUgOC42Njk2N0MxLjI5ODQ2IDkuODI5NSAyLjIzNzkgMTAuNzE5NiAzLjQxODIgMTAuOTQ1QzMuNzA2ODggMTEuMDAwMSA0LjA0MTM1IDExLjAwMDEgNC41NjQwMyAxMUw0LjYyNDcxIDExSDUuNDk5NzFDNS43NzU4NSAxMSA1Ljk5OTcxIDEwLjc3NjIgNS45OTk3MSAxMC41QzUuOTk5NzEgMTAuMjIzOSA1Ljc3NTg1IDEwIDUuNDk5NzEgMTBINC42MjQ3MUM0LjAyMDg0IDEwIDMuNzg5MDcgOS45OTc3NyAzLjYwNTc3IDkuOTYyNzdDMi44MDI2MiA5LjgwOTQgMi4xOTE1NyA5LjIxMTA4IDIuMDM3MzUgOC40NjY3OEMyLjAwMjMzIDguMjk3NzggMS45OTk3MSA4LjA4MjUxIDEuOTk5NzEgNy41MDAwMUMxLjk5OTcxIDYuOTE3NTIgMi4wMDIzMyA2LjcwMjI1IDIuMDM3MzUgNi41MzMyNEMyLjE5MTU3IDUuNzg4OTUgMi44MDI2MiA1LjE5MDYyIDMuNjA1NzcgNS4wMzcyNUMzLjc4OTA3IDUuMDAyMjUgNC4wMjA4NCA1LjAwMDAxIDQuNjI0NzEgNS4wMDAwMUg1LjQ5OTcxQzUuNzc1ODUgNS4wMDAwMSA1Ljk5OTcxIDQuNzc2MTUgNS45OTk3MSA0LjUwMDAxQzUuOTk5NzEgNC4yMjM4NyA1Ljc3NTg1IDQuMDAwMDEgNS40OTk3MSA0LjAwMDAxSDQuNjI0NzFaTTEwLjM3NDcgNS4wMDAwMUMxMC45Nzg2IDUuMDAwMDEgMTEuMjEwNCA1LjAwMjI1IDExLjM5MzcgNS4wMzcyNUMxMi4xOTY4IDUuMTkwNjIgMTIuODA3OSA1Ljc4ODk1IDEyLjk2MjEgNi41MzMyNEMxMi45OTcxIDYuNzAyMjUgMTIuOTk5NyA2LjkxNzUyIDEyLjk5OTcgNy41MDAwMUMxMi45OTk3IDguMDgyNTEgMTIuOTk3MSA4LjI5Nzc4IDEyLjk2MjEgOC40NjY3OEMxMi44MDc5IDkuMjExMDggMTIuMTk2OCA5LjgwOTQgMTEuMzkzNyA5Ljk2Mjc3QzExLjIxMDQgOS45OTc3NyAxMC45Nzg2IDEwIDEwLjM3NDcgMTBIOS40OTk3MUM5LjIyMzU3IDEwIDguOTk5NzEgMTAuMjIzOSA4Ljk5OTcxIDEwLjVDOC45OTk3MSAxMC43NzYyIDkuMjIzNTcgMTEgOS40OTk3MSAxMUgxMC4zNzQ3TDEwLjQzNTQgMTFDMTAuOTU4MSAxMS4wMDAxIDExLjI5MjUgMTEuMDAwMSAxMS41ODEyIDEwLjk0NUMxMi43NjE1IDEwLjcxOTYgMTMuNzAxIDkuODI5NSAxMy45NDEzIDguNjY5NjdDMTMuOTk5OSA4LjM4NjgxIDEzLjk5OTggOC4wNjAwNSAxMy45OTk3IDcuNTYzMTRMMTMuOTk5NyA3LjUwMDAxTDEzLjk5OTcgNy40MzY4OEMxMy45OTk4IDYuOTM5OTggMTMuOTk5OSA2LjYxMzIxIDEzLjk0MTMgNi4zMzAzNUMxMy43MDEgNS4xNzA1MyAxMi43NjE1IDQuMjgwMzkgMTEuNTgxMiA0LjA1NUMxMS4yOTI1IDMuOTk5ODggMTAuOTU4MSAzLjk5OTkzIDEwLjQzNTQgNC4wMDAwMUwxMC4zNzQ3IDQuMDAwMDFIOS40OTk3MUM5LjIyMzU3IDQuMDAwMDEgOC45OTk3MSA0LjIyMzg3IDguOTk5NzEgNC41MDAwMUM4Ljk5OTcxIDQuNzc2MTUgOS4yMjM1NyA1LjAwMDAxIDkuNDk5NzEgNS4wMDAwMUgxMC4zNzQ3Wk01LjAwMDM4IDdDNC43MjQyNCA3IDQuNTAwMzggNy4yMjM4NiA0LjUwMDM4IDcuNUM0LjUwMDM4IDcuNzc2MTQgNC43MjQyNCA4IDUuMDAwMzggOEgxMC4wMDA0QzEwLjI3NjUgOCAxMC41MDA0IDcuNzc2MTQgMTAuNTAwNCA3LjVDMTAuNTAwNCA3LjIyMzg2IDEwLjI3NjUgNyAxMC4wMDA0IDdINS4wMDAzOFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGhuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk04LjUxMTk0IDMuMDA1NDFDOS4xODgyOSAyLjU0NTk0IDEwLjA0MzUgMi41MzY5NCAxMC42Nzg4IDIuOTU0MTlDMTAuODIzMSAzLjA0ODkzIDEwLjk3NzEgMy4xOTkzIDExLjM4OSAzLjYxMTE5QzExLjgwMDkgNC4wMjMwNyAxMS45NTEzIDQuMTc3MTQgMTIuMDQ2IDQuMzIxNDFDMTIuNDYzMyA0Ljk1Njc1IDEyLjQ1NDMgNS44MTE5MiAxMS45OTQ4IDYuNDg4MjdDMTEuODg5OSA2LjY0MjY0IDExLjcyNzYgNi44MDgxMSAxMS4zMDA2IDcuMjM1MTFMMTAuNjgxOSA3Ljg1MzgzQzEwLjQ4NjcgOC4wNDkwOSAxMC40ODY3IDguMzY1NjcgMTAuNjgxOSA4LjU2MDkzQzEwLjg3NzIgOC43NTYyIDExLjE5MzggOC43NTYyIDExLjM4OSA4LjU2MDkzTDEyLjAwNzcgNy45NDIyMUwxMi4wNTA3IDcuODk5MjlDMTIuNDIwMyA3LjUyOTc2IDEyLjY1NjggNy4yOTMzIDEyLjgyMiA3LjA1MDJDMTMuNDk3MiA2LjA1NjIzIDEzLjUzMjEgNC43NjI1MiAxMi44ODE5IDMuNzcyNDhDMTIuNzIzMyAzLjUzMTAyIDEyLjQ5MjIgMy4zMDAwMSAxMi4xNDA4IDIuOTQ4NzFMMTIuMDk2MSAyLjkwNDA4TDEyLjA1MTUgMi44NTk0MkMxMS43MDAyIDIuNTA4IDExLjQ2OTIgMi4yNzY4OSAxMS4yMjc3IDIuMTE4MzJDMTAuMjM3NyAxLjQ2ODEzIDguOTQzOTggMS41MDI5OSA3Ljk1MDAxIDIuMTc4MjJDNy43MDY5MSAyLjM0MzM2IDcuNDcwNDQgMi41Nzk5MSA3LjEwMDkgMi45NDk1NUw3LjA1OCAyLjk5MjQ3TDYuNDM5MjggMy42MTExOUM2LjI0NDAxIDMuODA2NDUgNi4yNDQwMSA0LjEyMzAzIDYuNDM5MjggNC4zMTgyOUM2LjYzNDU0IDQuNTEzNTUgNi45NTExMiA0LjUxMzU1IDcuMTQ2MzggNC4zMTgyOUw3Ljc2NTEgMy42OTk1N0M4LjE5MjEgMy4yNzI1NyA4LjM1NzU3IDMuMTEwMjcgOC41MTE5NCAzLjAwNTQxWk00LjMxNzk2IDcuMTQ2NzJDNC41MTMyMiA2Ljk1MTQ2IDQuNTEzMjIgNi42MzQ4NyA0LjMxNzk2IDYuNDM5NjFDNC4xMjI2OSA2LjI0NDM1IDMuODA2MTEgNi4yNDQzNSAzLjYxMDg1IDYuNDM5NjFMMi45OTIxMyA3LjA1ODMzTDIuOTQ5MjIgNy4xMDEyNEMyLjU3OTU3IDcuNDcwNzcgMi4zNDMwMyA3LjcwNzI0IDIuMTc3ODggNy45NTAzNUMxLjUwMjY1IDguOTQ0MzIgMS40Njc4IDEwLjIzOCAyLjExNzk5IDExLjIyODFDMi4yNzY1NiAxMS40Njk1IDIuNTA3NjYgMTEuNzAwNSAyLjg1OTEgMTIuMDUxOEwyLjkwMzc0IDEyLjA5NjVMMi45NDgzNyAxMi4xNDExQzMuMjk5NjcgMTIuNDkyNSAzLjUzMDY4IDEyLjcyMzcgMy43NzIxNCAxMi44ODIyQzQuNzYyMTkgMTMuNTMyNCA2LjA1NTg5IDEzLjQ5NzYgNy4wNDk4NiAxMi44MjIzQzcuMjkyOTYgMTIuNjU3MiA3LjUyOTQzIDEyLjQyMDYgNy44OTg5NiAxMi4wNTFMNy44OTg5NyAxMi4wNTFMNy45NDE4OCAxMi4wMDgxTDguNTYwNiAxMS4zODk0QzguNzU1ODYgMTEuMTk0MSA4Ljc1NTg2IDEwLjg3NzUgOC41NjA2IDEwLjY4MjNDOC4zNjUzMyAxMC40ODcgOC4wNDg3NSAxMC40ODcgNy44NTM0OSAxMC42ODIzTDcuMjM0NzcgMTEuMzAxQzYuODA3NzcgMTEuNzI4IDYuNjQyMyAxMS44OTAzIDYuNDg3OTQgMTEuOTk1MUM1LjgxMTU4IDEyLjQ1NDYgNC45NTY0MiAxMi40NjM2IDQuMzIxMDcgMTIuMDQ2NEM0LjE3NjgxIDExLjk1MTYgNC4wMjI3NCAxMS44MDEyIDMuNjEwODUgMTEuMzg5NEMzLjE5ODk2IDEwLjk3NzUgMy4wNDg2IDEwLjgyMzQgMi45NTM4NSAxMC42NzkxQzIuNTM2NjEgMTAuMDQzOCAyLjU0NTYxIDkuMTg4NjMgMy4wMDUwNyA4LjUxMjI3QzMuMTA5OTMgOC4zNTc5MSAzLjI3MjI0IDguMTkyNDQgMy42OTkyNCA3Ljc2NTQ0TDQuMzE3OTYgNy4xNDY3MlpNOS42MjE3MiA2LjA4NTU4QzkuODE2OTggNS44OTAzMiA5LjgxNjk4IDUuNTczNzMgOS42MjE3MiA1LjM3ODQ3QzkuNDI2NDYgNS4xODMyMSA5LjEwOTg4IDUuMTgzMjEgOC45MTQ2MSA1LjM3ODQ3TDUuMzc5MDggOC45MTQwMUM1LjE4MzgyIDkuMTA5MjcgNS4xODM4MiA5LjQyNTg1IDUuMzc5MDggOS42MjExMUM1LjU3NDM0IDkuODE2MzcgNS44OTA5MiA5LjgxNjM3IDYuMDg2MTkgOS42MjExMUw5LjYyMTcyIDYuMDg1NThaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxnbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTMuMzUzNiAyLjM1MzU1QzEzLjU0ODggMi4xNTgyOSAxMy41NDg4IDEuODQxNzEgMTMuMzUzNiAxLjY0NjQ1QzEzLjE1ODMgMS40NTExOCAxMi44NDE3IDEuNDUxMTggMTIuNjQ2NCAxLjY0NjQ1TDEuNjQ2NDUgMTIuNjQ2NEMxLjQ1MTE4IDEyLjg0MTcgMS40NTExOCAxMy4xNTgzIDEuNjQ2NDUgMTMuMzUzNkMxLjg0MTcxIDEzLjU0ODggMi4xNTgyOSAxMy41NDg4IDIuMzUzNTUgMTMuMzUzNkwxMy4zNTM2IDIuMzUzNTVaTTIuMDM3MzUgOC40NjY3OEMyLjE3Mzk4IDkuMTI2MTkgMi42NjkxOCA5LjY3MTAzIDMuMzM4ODYgOS44OTMzOEwyLjU3ODMzIDEwLjY1MzlDMS44MDg0MyAxMC4yNTM0IDEuMjM3ODQgOS41MzY5MyAxLjA1ODE1IDguNjY5NjdDMC45OTk1MzggOC4zODY4MSAwLjk5OTYwNCA4LjA2MDA0IDAuOTk5NzAzIDcuNTYzMTNMMC45OTk3MTEgNy41MDAwMUwwLjk5OTcwMyA3LjQzNjg5QzAuOTk5NjA0IDYuOTM5OTggMC45OTk1MzggNi42MTMyMSAxLjA1ODE1IDYuMzMwMzVDMS4yOTg0NiA1LjE3MDUzIDIuMjM3OSA0LjI4MDM5IDMuNDE4MiA0LjA1NUMzLjcwNjg3IDMuOTk5ODggNC4wNDEzNCAzLjk5OTkzIDQuNTY0MDIgNC4wMDAwMUw0LjYyNDcxIDQuMDAwMDFINS40OTk3MUM1Ljc3NTg1IDQuMDAwMDEgNS45OTk3MSA0LjIyMzg3IDUuOTk5NzEgNC41MDAwMUM1Ljk5OTcxIDQuNzc2MTUgNS43NzU4NSA1LjAwMDAxIDUuNDk5NzEgNS4wMDAwMUg0LjYyNDcxQzQuMDIwODQgNS4wMDAwMSAzLjc4OTA3IDUuMDAyMjUgMy42MDU3NyA1LjAzNzI1QzIuODAyNjIgNS4xOTA2MiAyLjE5MTU3IDUuNzg4OTUgMi4wMzczNSA2LjUzMzI0QzIuMDAyMzMgNi43MDIyNSAxLjk5OTcxIDYuOTE3NTIgMS45OTk3MSA3LjUwMDAxQzEuOTk5NzEgOC4wODI1MSAyLjAwMjMzIDguMjk3NzggMi4wMzczNSA4LjQ2Njc4Wk0xMi45NjIxIDYuNTMzMjRDMTIuODI1NSA1Ljg3Mzk3IDEyLjMzMDQgNS4zMjkyMiAxMS42NjEgNS4xMDY3OUwxMi40MjE1IDQuMzQ2MzFDMTMuMTkxMiA0Ljc0Njg2IDEzLjc2MTYgNS40NjMyMyAxMy45NDEzIDYuMzMwMzVDMTMuOTk5OSA2LjYxMzIxIDEzLjk5OTggNi45Mzk5OCAxMy45OTk3IDcuNDM2ODhMMTMuOTk5NyA3LjUwMDAxTDEzLjk5OTcgNy41NjMxNEMxMy45OTk4IDguMDYwMDUgMTMuOTk5OSA4LjM4NjgxIDEzLjk0MTMgOC42Njk2N0MxMy43MDEgOS44Mjk1IDEyLjc2MTUgMTAuNzE5NiAxMS41ODEyIDEwLjk0NUMxMS4yOTI1IDExLjAwMDEgMTAuOTU4MSAxMS4wMDAxIDEwLjQzNTQgMTFMMTAuMzc0NyAxMUg5LjQ5OTcxQzkuMjIzNTcgMTEgOC45OTk3MSAxMC43NzYyIDguOTk5NzEgMTAuNUM4Ljk5OTcxIDEwLjIyMzkgOS4yMjM1NyAxMCA5LjQ5OTcxIDEwSDEwLjM3NDdDMTAuOTc4NiAxMCAxMS4yMTA0IDkuOTk3NzcgMTEuMzkzNyA5Ljk2Mjc3QzEyLjE5NjggOS44MDk0IDEyLjgwNzkgOS4yMTEwOCAxMi45NjIxIDguNDY2NzhDMTIuOTk3MSA4LjI5Nzc4IDEyLjk5OTcgOC4wODI1MSAxMi45OTk3IDcuNTAwMDFDMTIuOTk5NyA2LjkxNzUyIDEyLjk5NzEgNi43MDIyNSAxMi45NjIxIDYuNTMzMjRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx2bj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC41MDAyMSAwQzQuNzc2MzUgMCA1LjAwMDIgMC4yMjM4NTMgNS4wMDAyIDAuNDk5OTlWMi40OTk5NUM1LjAwMDIgMi43NzYwOSA0Ljc3NjM1IDIuOTk5OTQgNC41MDAyMSAyLjk5OTk0QzQuMjI0MDggMi45OTk5NCA0LjAwMDIyIDIuNzc2MDkgNC4wMDAyMiAyLjQ5OTk1VjAuNDk5OTlDNC4wMDAyMiAwLjIyMzg1MyA0LjIyNDA4IDAgNC41MDAyMSAwWk0wLjY0NjQ1MSAwLjY0NjQ3QzAuODQxNzEgMC40NTEyMTIgMS4xNTgyOSAwLjQ1MTIxMiAxLjM1MzU0IDAuNjQ2NDdMMi44NTM1MSAyLjE0NjQ0QzMuMDQ4NzcgMi4zNDE3IDMuMDQ4NzcgMi42NTgyNyAyLjg1MzUxIDIuODUzNTNDMi42NTgyNiAzLjA0ODc5IDIuMzQxNjggMy4wNDg3OSAyLjE0NjQyIDIuODUzNTNMMC42NDY0NTIgMS4zNTM1NkMwLjQ1MTE5MyAxLjE1ODMgMC40NTExOTMgMC44NDE3MjggMC42NDY0NTEgMC42NDY0N1pNMC4wMDAzMDUxNyA0LjQ5OTkxQzAuMDAwMzA1MTcgNC4yMjM3NyAwLjIyNDE1OCAzLjk5OTkyIDAuNTAwMjk1IDMuOTk5OTJIMi41MDAyNUMyLjc3NjM5IDMuOTk5OTIgMy4wMDAyNCA0LjIyMzc3IDMuMDAwMjQgNC40OTk5MUMzLjAwMDI0IDQuNzc2MDUgMi43NzYzOSA0Ljk5OTkgMi41MDAyNSA0Ljk5OTlIMC41MDAyOTVDMC4yMjQxNTggNC45OTk5IDAuMDAwMzA1MTcgNC43NzYwNSAwLjAwMDMwNTE3IDQuNDk5OTFaTTEyLjAwMDEgMTAuNDk5OEMxMi4wMDAxIDEwLjIyMzYgMTIuMjIzOSA5Ljk5OTggMTIuNTAwMSA5Ljk5OThIMTQuNUMxNC43NzYxIDkuOTk5OCAxNSAxMC4yMjM2IDE1IDEwLjQ5OThDMTUgMTAuNzc1OSAxNC43NzYxIDEwLjk5OTggMTQuNSAxMC45OTk4SDEyLjUwMDFDMTIuMjIzOSAxMC45OTk4IDEyLjAwMDEgMTAuNzc1OSAxMi4wMDAxIDEwLjQ5OThaTTEwLjUwMDEgMTEuOTk5OEMxMC43NzYyIDExLjk5OTggMTEuMDAwMSAxMi4yMjM2IDExLjAwMDEgMTIuNDk5N1YxNC40OTk3QzExLjAwMDEgMTQuNzc1OCAxMC43NzYyIDE0Ljk5OTcgMTAuNTAwMSAxNC45OTk3QzEwLjIyNCAxNC45OTk3IDEwLjAwMDEgMTQuNzc1OCAxMC4wMDAxIDE0LjQ5OTdWMTIuNDk5N0MxMC4wMDAxIDEyLjIyMzYgMTAuMjI0IDExLjk5OTggMTAuNTAwMSAxMS45OTk4Wk0xMi4xNDYyIDEyLjE0NjJDMTIuMzQxNSAxMS45NTEgMTIuNjU4IDExLjk1MSAxMi44NTMzIDEyLjE0NjJMMTQuMzUzMyAxMy42NDYyQzE0LjU0ODUgMTMuODQxNSAxNC41NDg1IDE0LjE1OCAxNC4zNTMzIDE0LjM1MzNDMTQuMTU4IDE0LjU0ODUgMTMuODQxNCAxNC41NDg1IDEzLjY0NjIgMTQuMzUzM0wxMi4xNDYyIDEyLjg1MzNDMTEuOTUxIDEyLjY1ODEgMTEuOTUxIDEyLjM0MTUgMTIuMTQ2MiAxMi4xNDYyWk03Ljc2NDc4IDMuNjk5MzhDOC4xOTE3NyAzLjI3MjM4IDguMzU3MjQgMy4xMTAwOCA4LjUxMTYgMy4wMDUyMkM5LjE4Nzk0IDIuNTQ1NzcgMTAuMDQzMSAyLjUzNjc3IDEwLjY3ODQgMi45NTQwMUMxMC44MjI3IDMuMDQ4NzUgMTAuOTc2NyAzLjE5OTExIDExLjM4ODYgMy42MTA5OUMxMS44MDA1IDQuMDIyODcgMTEuOTUwOSA0LjE3Njk0IDEyLjA0NTYgNC4zMjEyQzEyLjQ2MjggNC45NTY1MyAxMi40NTM5IDUuODExNjggMTEuOTk0NCA2LjQ4ODAyQzExLjg4OTUgNi42NDIzOCAxMS43MjcyIDYuODA3ODUgMTEuMzAwMiA3LjIzNDg0TDEwLjY4MTUgNy44NTM1NEMxMC40ODYzIDguMDQ4OCAxMC40ODYzIDguMzY1MzggMTAuNjgxNSA4LjU2MDY0QzEwLjg3NjggOC43NTU4OSAxMS4xOTM0IDguNzU1ODkgMTEuMzg4NiA4LjU2MDY0TDEyLjAwNzMgNy45NDE5M0wxMi4wNTAyIDcuODk5MDNDMTIuNDE5OSA3LjUyOTUgMTIuNjU2NCA3LjI5MzAzIDEyLjgyMTYgNy4wNDk5M0MxMy40OTY4IDYuMDU1OTggMTMuNTMxNiA0Ljc2MjMgMTIuODgxNSAzLjc3MjI4QzEyLjcyMjkgMy41MzA4MyAxMi40OTE4IDMuMjk5ODIgMTIuMTQwNCAyLjk0ODUzTDEyLjA5NTcgMi45MDM5TDEyLjA1MTEgMi44NTkyNUMxMS42OTk4IDIuNTA3ODIgMTEuNDY4OCAyLjI3NjcyIDExLjIyNzMgMi4xMTgxNkMxMC4yMzczIDEuNDY3OTggOC45NDM2NCAxLjUwMjg0IDcuOTQ5NjggMi4xNzgwNUM3LjcwNjU5IDIuMzQzMTkgNy40NzAxMiAyLjU3OTczIDcuMTAwNiAyLjk0OTM2TDcuMTAwNiAyLjk0OTM3TDcuMDU3NjkgMi45OTIyOEw2LjQzODk4IDMuNjEwOTlDNi4yNDM3MiAzLjgwNjI1IDYuMjQzNzIgNC4xMjI4MiA2LjQzODk4IDQuMzE4MDhDNi42MzQyNCA0LjUxMzM0IDYuOTUwODEgNC41MTMzNCA3LjE0NjA3IDQuMzE4MDhMNy43NjQ3OCAzLjY5OTM4Wk0yLjk5MTkxIDcuMDU4MDdMMi45NDg5OSA3LjEwMDk3QzIuNTc5MzUgNy40NzA1IDIuMzQyODIgNy43MDY5NyAyLjE3NzY3IDcuOTUwMDZDMS41MDI0NiA4Ljk0NDAxIDEuNDY3NiAxMC4yMzc3IDIuMTE3NzggMTEuMjI3N0MyLjI3NjM0IDExLjQ2OTIgMi41MDc0NCAxMS43MDAyIDIuODU4ODYgMTIuMDUxNUwyLjg1ODg4IDEyLjA1MTVMMi45MDM1MiAxMi4wOTYxTDIuOTQ4MTUgMTIuMTQwN0wyLjk0ODE1IDEyLjE0MDdMMi45NDgxNyAxMi4xNDA4QzMuMjk5NDUgMTIuNDkyMiAzLjUzMDQ1IDEyLjcyMzMgMy43NzE5IDEyLjg4MThDNC43NjE5MyAxMy41MzIgNi4wNTU2IDEzLjQ5NzIgNy4wNDk1NiAxMi44MjE5QzcuMjkyNjUgMTIuNjU2OCA3LjUyOTEyIDEyLjQyMDMgNy44OTg2NSAxMi4wNTA2TDcuOTQxNTUgMTIuMDA3N0w4LjU2MDI2IDExLjM4OUM4Ljc1NTUyIDExLjE5MzcgOC43NTU1MiAxMC44NzcyIDguNTYwMjYgMTAuNjgxOUM4LjM2NSAxMC40ODY3IDguMDQ4NDIgMTAuNDg2NyA3Ljg1MzE3IDEwLjY4MTlMNy4yMzQ0NiAxMS4zMDA2QzYuODA3NDcgMTEuNzI3NiA2LjY0MiAxMS44ODk5IDYuNDg3NjQgMTEuOTk0OEM1LjgxMTMgMTIuNDU0MiA0Ljk1NjE1IDEyLjQ2MzIgNC4zMjA4MiAxMi4wNDZDNC4xNzY1NiAxMS45NTEyIDQuMDIyNDkgMTEuODAwOSAzLjYxMDYxIDExLjM4OUMzLjE5ODczIDEwLjk3NzEgMy4wNDgzNyAxMC44MjMxIDIuOTUzNjMgMTAuNjc4OEMyLjUzNjM5IDEwLjA0MzUgMi41NDUzOSA5LjE4ODMyIDMuMDA0ODQgOC41MTE5OEMzLjEwOTcxIDguMzU3NjEgMy4yNzIwMSA4LjE5MjE1IDMuNjk5IDcuNzY1MTZMNC4zMTc3IDcuMTQ2NDVDNC41MTI5NiA2Ljk1MTE5IDQuNTEyOTYgNi42MzQ2MiA0LjMxNzcgNi40MzkzNkM0LjEyMjQ1IDYuMjQ0MSAzLjgwNTg3IDYuMjQ0MSAzLjYxMDYxIDYuNDM5MzZMMi45OTE5MSA3LjA1ODA3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuNTY0MjcgMy45OTk4OEM0LjU4NDIyIDMuOTk5ODkgNC42MDQ0NSAzLjk5OTg5IDQuNjI0OTYgMy45OTk4OUg1LjQ5OTk2QzUuNzc2MSAzLjk5OTg5IDUuOTk5OTYgNC4yMjM3NSA1Ljk5OTk2IDQuNDk5ODlDNS45OTk5NiA0Ljc3NjAzIDUuNzc2MSA0Ljk5OTg5IDUuNDk5OTYgNC45OTk4OUg0LjYyNDk2QzQuMDIxMDggNC45OTk4OSAzLjc4OTMyIDUuMDAyMTMgMy42MDYwMSA1LjAzNzEzQzIuODAyODcgNS4xOTA1IDIuMTkxODEgNS43ODg4MyAyLjAzNzU5IDYuNTMzMTJDMi4wMDI1NyA2LjcwMjEyIDEuOTk5OTYgNi45MTczOSAxLjk5OTk2IDcuNDk5ODlDMS45OTk5NiA4LjA4MjM5IDIuMDAyNTcgOC4yOTc2NiAyLjAzNzU5IDguNDY2NjZDMi4xOTE4MSA5LjIxMDk1IDIuODAyODcgOS44MDkyOCAzLjYwNjAxIDkuOTYyNjVDMy43ODkzMiA5Ljk5NzY1IDQuMDIxMDggOS45OTk4OSA0LjYyNDk2IDkuOTk5ODlINS40OTk5NkM1Ljc3NjEgOS45OTk4OSA1Ljk5OTk2IDEwLjIyMzcgNS45OTk5NiAxMC40OTk5QzUuOTk5OTYgMTAuNzc2IDUuNzc2MSAxMC45OTk5IDUuNDk5OTYgMTAuOTk5OUg0LjYyNDk2QzQuNjA0NDUgMTAuOTk5OSA0LjU4NDIyIDEwLjk5OTkgNC41NjQyNyAxMC45OTk5QzQuMDQxNTkgMTEgMy43MDcxMiAxMSAzLjQxODQ1IDEwLjk0NDlDMi4yMzgxNCAxMC43MTk1IDEuMjk4NzEgOS44MjkzNyAxLjA1ODM5IDguNjY5NTVDMC45OTk3ODIgOC4zODY2OSAwLjk5OTg0OCA4LjA1OTkyIDAuOTk5OTQ3IDcuNTYzMDFDMC45OTk5NTEgNy41NDIyNyAwLjk5OTk1NSA3LjUyMTIzIDAuOTk5OTU1IDcuNDk5ODlDMC45OTk5NTUgNy40Nzg1NSAwLjk5OTk1MSA3LjQ1NzUxIDAuOTk5OTQ3IDcuNDM2NzdDMC45OTk4NDggNi45Mzk4NiAwLjk5OTc4MiA2LjYxMzA5IDEuMDU4MzkgNi4zMzAyM0MxLjI5ODcxIDUuMTcwNDEgMi4yMzgxNCA0LjI4MDI3IDMuNDE4NDUgNC4wNTQ4OEMzLjcwNzEyIDMuOTk5NzYgNC4wNDE1OSAzLjk5OTgxIDQuNTY0MjcgMy45OTk4OFpNMTEuMzkzOSA1LjAzNzEzQzExLjIxMDYgNS4wMDIxMyAxMC45Nzg4IDQuOTk5ODkgMTAuMzc1IDQuOTk5ODlIOS40OTk5NkM5LjIyMzgxIDQuOTk5ODkgOC45OTk5NiA0Ljc3NjAzIDguOTk5OTYgNC40OTk4OUM4Ljk5OTk2IDQuMjIzNzUgOS4yMjM4MSAzLjk5OTg5IDkuNDk5OTYgMy45OTk4OUgxMC4zNzVDMTAuMzk1NSAzLjk5OTg5IDEwLjQxNTcgMy45OTk4OSAxMC40MzU2IDMuOTk5ODhDMTAuOTU4MyAzLjk5OTgxIDExLjI5MjggMy45OTk3NiAxMS41ODE1IDQuMDU0ODhDMTIuNzYxOCA0LjI4MDI3IDEzLjcwMTIgNS4xNzA0MSAxMy45NDE1IDYuMzMwMjNDMTQuMDAwMSA2LjYxMzA5IDE0LjAwMDEgNi45Mzk4NSAxNCA3LjQzNjc2QzE0IDcuNDU3NSAxNCA3LjQ3ODU0IDE0IDcuNDk5ODlDMTQgNy41MjEyNCAxNCA3LjU0MjI4IDE0IDcuNTYzMDJDMTQuMDAwMSA4LjA1OTkyIDE0LjAwMDEgOC4zODY2OSAxMy45NDE1IDguNjY5NTVDMTMuNzAxMiA5LjgyOTM3IDEyLjc2MTggMTAuNzE5NSAxMS41ODE1IDEwLjk0NDlDMTEuMjkyOCAxMSAxMC45NTgzIDExIDEwLjQzNTYgMTAuOTk5OUMxMC40MTU3IDEwLjk5OTkgMTAuMzk1NSAxMC45OTk5IDEwLjM3NSAxMC45OTk5SDkuNDk5OTZDOS4yMjM4MSAxMC45OTk5IDguOTk5OTYgMTAuNzc2IDguOTk5OTYgMTAuNDk5OUM4Ljk5OTk2IDEwLjIyMzcgOS4yMjM4MSA5Ljk5OTg5IDkuNDk5OTYgOS45OTk4OUgxMC4zNzVDMTAuOTc4OCA5Ljk5OTg5IDExLjIxMDYgOS45OTc2NSAxMS4zOTM5IDkuOTYyNjVDMTIuMTk3IDkuODA5MjggMTIuODA4MSA5LjIxMDk1IDEyLjk2MjMgOC40NjY2NkMxMi45OTczIDguMjk3NjYgMTMgOC4wODIzOSAxMyA3LjQ5OTg5QzEzIDYuOTE3MzkgMTIuOTk3MyA2LjcwMjEyIDEyLjk2MjMgNi41MzMxMkMxMi44MDgxIDUuNzg4ODMgMTIuMTk3IDUuMTkwNSAxMS4zOTM5IDUuMDM3MTNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxDbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTAuNjc4OCAyLjk1NDE5QzEwLjA0MzUgMi41MzY5NCA5LjE4ODI5IDIuNTQ1OTQgOC41MTE5NCAzLjAwNTQxQzguMzU3NTcgMy4xMTAyNyA4LjE5MjEgMy4yNzI1NyA3Ljc2NTEgMy42OTk1N0w3LjE0NjM4IDQuMzE4MjlDNi45NTExMiA0LjUxMzU1IDYuNjM0NTQgNC41MTM1NSA2LjQzOTI4IDQuMzE4MjlDNi4yNDQwMSA0LjEyMzAzIDYuMjQ0MDEgMy44MDY0NSA2LjQzOTI4IDMuNjExMTlMNy4wNTggMi45OTI0N0M3LjA3MjUgMi45Nzc5NyA3LjA4Njc5IDIuOTYzNjYgNy4xMDA5IDIuOTQ5NTVDNy40NzA0NCAyLjU3OTkxIDcuNzA2OTEgMi4zNDMzNiA3Ljk1MDAxIDIuMTc4MjJDOC45NDM5OCAxLjUwMjk5IDEwLjIzNzcgMS40NjgxMyAxMS4yMjc3IDIuMTE4MzJDMTEuNDY5MiAyLjI3Njg5IDExLjcwMDIgMi41MDggMTIuMDUxNSAyLjg1OTQyQzEyLjA2NjIgMi44NzQxIDEyLjA4MSAyLjg4ODk4IDEyLjA5NjEgMi45MDQwOEMxMi4xMTEyIDIuOTE5MTcgMTIuMTI2MSAyLjkzNDA1IDEyLjE0MDggMi45NDg3MUMxMi40OTIyIDMuMzAwMDEgMTIuNzIzMyAzLjUzMTAyIDEyLjg4MTkgMy43NzI0OEMxMy41MzIxIDQuNzYyNTIgMTMuNDk3MiA2LjA1NjIzIDEyLjgyMiA3LjA1MDJDMTIuNjU2OCA3LjI5MzMgMTIuNDIwMyA3LjUyOTc2IDEyLjA1MDcgNy44OTkyOUMxMi4wMzY2IDcuOTEzNCAxMi4wMjIyIDcuOTI3NzEgMTIuMDA3NyA3Ljk0MjIxTDExLjM4OSA4LjU2MDkzQzExLjE5MzggOC43NTYyIDEwLjg3NzIgOC43NTYyIDEwLjY4MTkgOC41NjA5M0MxMC40ODY3IDguMzY1NjcgMTAuNDg2NyA4LjA0OTA5IDEwLjY4MTkgNy44NTM4M0wxMS4zMDA2IDcuMjM1MTFDMTEuNzI3NiA2LjgwODExIDExLjg4OTkgNi42NDI2NCAxMS45OTQ4IDYuNDg4MjdDMTIuNDU0MyA1LjgxMTkyIDEyLjQ2MzMgNC45NTY3NSAxMi4wNDYgNC4zMjE0MUMxMS45NTEzIDQuMTc3MTQgMTEuODAwOSA0LjAyMzA3IDExLjM4OSAzLjYxMTE5QzEwLjk3NzEgMy4xOTkzIDEwLjgyMzEgMy4wNDg5MyAxMC42Nzg4IDIuOTU0MTlaTTQuMzE3OTYgNi40Mzk2MUM0LjUxMzIyIDYuNjM0ODcgNC41MTMyMiA2Ljk1MTQ2IDQuMzE3OTYgNy4xNDY3MkwzLjY5OTI0IDcuNzY1NDRDMy4yNzIyNCA4LjE5MjQ0IDMuMTA5OTMgOC4zNTc5MSAzLjAwNTA3IDguNTEyMjdDMi41NDU2MSA5LjE4ODYzIDIuNTM2NjEgMTAuMDQzOCAyLjk1Mzg1IDEwLjY3OTFDMy4wNDg2IDEwLjgyMzQgMy4xOTg5NiAxMC45Nzc1IDMuNjEwODUgMTEuMzg5NEM0LjAyMjc0IDExLjgwMTIgNC4xNzY4MSAxMS45NTE2IDQuMzIxMDcgMTIuMDQ2NEM0Ljk1NjQyIDEyLjQ2MzYgNS44MTE1OCAxMi40NTQ2IDYuNDg3OTQgMTEuOTk1MUM2LjY0MjMgMTEuODkwMyA2LjgwNzc3IDExLjcyOCA3LjIzNDc3IDExLjMwMUw3Ljg1MzQ5IDEwLjY4MjNDOC4wNDg3NSAxMC40ODcgOC4zNjUzMyAxMC40ODcgOC41NjA2IDEwLjY4MjNDOC43NTU4NiAxMC44Nzc1IDguNzU1ODYgMTEuMTk0MSA4LjU2MDYgMTEuMzg5NEw3Ljk0MTg4IDEyLjAwODFDNy45MjczOCAxMi4wMjI2IDcuOTEzMDcgMTIuMDM2OSA3Ljg5ODk3IDEyLjA1MUM3LjUyOTQzIDEyLjQyMDYgNy4yOTI5NiAxMi42NTcyIDcuMDQ5ODYgMTIuODIyM0M2LjA1NTg5IDEzLjQ5NzYgNC43NjIxOSAxMy41MzI0IDMuNzcyMTQgMTIuODgyMkMzLjUzMDY4IDEyLjcyMzcgMy4yOTk2NyAxMi40OTI1IDIuOTQ4MzcgMTIuMTQxMUMyLjkzMzcxIDEyLjEyNjQgMi45MTg4MyAxMi4xMTE2IDIuOTAzNzQgMTIuMDk2NUMyLjg4ODY1IDEyLjA4MTQgMi44NzM3NyAxMi4wNjY1IDIuODU5MSAxMi4wNTE4QzIuNTA3NjYgMTEuNzAwNSAyLjI3NjU2IDExLjQ2OTUgMi4xMTc5OSAxMS4yMjgxQzEuNDY3OCAxMC4yMzggMS41MDI2NSA4Ljk0NDMyIDIuMTc3ODggNy45NTAzNUMyLjM0MzAzIDcuNzA3MjQgMi41Nzk1NyA3LjQ3MDc3IDIuOTQ5MjIgNy4xMDEyNEMyLjk2MzMzIDcuMDg3MTMgMi45Nzc2MyA3LjA3MjgzIDIuOTkyMTMgNy4wNTgzM0wzLjYxMDg1IDYuNDM5NjFDMy44MDYxMSA2LjI0NDM1IDQuMTIyNjkgNi4yNDQzNSA0LjMxNzk2IDYuNDM5NjFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx5bj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS41IDUuMjVDMS45MTQyMSA1LjI1IDIuMjUgNC45MTQyMSAyLjI1IDQuNUMyLjI1IDQuMDg1NzkgMS45MTQyMSAzLjc1IDEuNSAzLjc1QzEuMDg1NzkgMy43NSAwLjc1IDQuMDg1NzkgMC43NSA0LjVDMC43NSA0LjkxNDIxIDEuMDg1NzkgNS4yNSAxLjUgNS4yNVpNNCA0LjVDNCA0LjIyMzg2IDQuMjIzODYgNCA0LjUgNEgxMy41QzEzLjc3NjEgNCAxNCA0LjIyMzg2IDE0IDQuNUMxNCA0Ljc3NjE0IDEzLjc3NjEgNSAxMy41IDVINC41QzQuMjIzODYgNSA0IDQuNzc2MTQgNCA0LjVaTTQuNSA3QzQuMjIzODYgNyA0IDcuMjIzODYgNCA3LjVDNCA3Ljc3NjE0IDQuMjIzODYgOCA0LjUgOEgxMy41QzEzLjc3NjEgOCAxNCA3Ljc3NjE0IDE0IDcuNUMxNCA3LjIyMzg2IDEzLjc3NjEgNyAxMy41IDdINC41Wk00LjUgMTBDNC4yMjM4NiAxMCA0IDEwLjIyMzkgNCAxMC41QzQgMTAuNzc2MSA0LjIyMzg2IDExIDQuNSAxMUgxMy41QzEzLjc3NjEgMTEgMTQgMTAuNzc2MSAxNCAxMC41QzE0IDEwLjIyMzkgMTMuNzc2MSAxMCAxMy41IDEwSDQuNVpNMi4yNSA3LjVDMi4yNSA3LjkxNDIxIDEuOTE0MjEgOC4yNSAxLjUgOC4yNUMxLjA4NTc5IDguMjUgMC43NSA3LjkxNDIxIDAuNzUgNy41QzAuNzUgNy4wODU3OSAxLjA4NTc5IDYuNzUgMS41IDYuNzVDMS45MTQyMSA2Ljc1IDIuMjUgNy4wODU3OSAyLjI1IDcuNVpNMS41IDExLjI1QzEuOTE0MjEgMTEuMjUgMi4yNSAxMC45MTQyIDIuMjUgMTAuNUMyLjI1IDEwLjA4NTggMS45MTQyMSA5Ljc1IDEuNSA5Ljc1QzEuMDg1NzkgOS43NSAwLjc1IDEwLjA4NTggMC43NSAxMC41QzAuNzUgMTAuOTE0MiAxLjA4NTc5IDExLjI1IDEuNSAxMS4yNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHduPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01IDQuNjM2MDFDNSAzLjc2MDMxIDUuMjQyMTkgMy4xMDU0IDUuNjQzMjMgMi42NzM1N0M2LjAzOTM0IDIuMjQ3MDUgNi42NDU4MiAxLjk3ODMgNy41MDE0IDEuOTc4M0M4LjM1NzQ1IDEuOTc4MyA4Ljk2MzA2IDIuMjQ2NTIgOS4zNTgyMyAyLjY3MjA4QzkuNzU4MzggMy4xMDI5OSAxMCAzLjc1NzA4IDEwIDQuNjMzMjVWNS45OTk5OUg1VjQuNjM2MDFaTTQgNS45OTk5OVY0LjYzNjAxQzQgMy41ODE0OCA0LjI5MzM5IDIuNjU3NTQgNC45MTA0OSAxLjk5MzA3QzUuNTMyNTIgMS4zMjMyOSA2LjQyNjc1IDAuOTc4MzAyIDcuNTAxNCAwLjk3ODMwMkM4LjU3NTgzIDAuOTc4MzAyIDkuNDY5NTIgMS4zMjIzMyAxMC4wOTEgMS45OTE2MkMxMC43MDc2IDIuNjU1NTcgMTEgMy41Nzg5NiAxMSA0LjYzMzI1VjUuOTk5OTlIMTJDMTIuNTUyMyA1Ljk5OTk5IDEzIDYuNDQ3NzEgMTMgNi45OTk5OVYxM0MxMyAxMy41NTIzIDEyLjU1MjMgMTQgMTIgMTRIM0MyLjQ0NzcyIDE0IDIgMTMuNTUyMyAyIDEzVjYuOTk5OTlDMiA2LjQ0NzcxIDIuNDQ3NzIgNS45OTk5OSAzIDUuOTk5OTlINFpNMyA2Ljk5OTk5SDEyVjEzSDNWNi45OTk5OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGJuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5ODYgMEM2LjMyNTcgMCA1LjM2MTA3IDAuMzg5NDMgNC43Mzc1MyAxLjE5MzYxQzQuMjM3NDUgMS44Mzg1NiA0IDIuNjgyNDIgNCAzLjYzMzI1SDVDNSAyLjg0MzEzIDUuMTk2OTEgMi4yMzMxMiA1LjUyNzggMS44MDYzNkM1LjkxNjE1IDEuMzA1NTIgNi41NTE1MiAxIDcuNDk4NiAxQzguMzU2ODMgMSA4Ljk2MzM2IDEuMjY1MDIgOS4zNTg0NiAxLjY4NjIzQzkuNzU3OTMgMi4xMTIxMSAxMCAyLjc2MDQ0IDEwIDMuNjM2MDFWNkgzQzIuNDQ3NzIgNiAyIDYuNDQ3NzIgMiA3VjEzQzIgMTMuNTUyMyAyLjQ0NzcyIDE0IDMgMTRIMTJDMTIuNTUyMyAxNCAxMyAxMy41NTIzIDEzIDEzVjdDMTMgNi40NDc3MSAxMi41NTIzIDYgMTIgNkgxMVYzLjYzNjAxQzExIDIuNTgxMzUgMTAuNzA2NSAxLjY2MTY3IDEwLjA4NzggMS4wMDIxQzkuNDY0NzcgMC4zMzc4NzEgOC41NzA2MSAwIDcuNDk4NiAwWk0zIDdIMTJWMTNIM1Y3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0seG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTkgMy42MzYwMUM5IDIuNzYwNDQgOS4yNDIwNyAyLjExMjExIDkuNjQxNTQgMS42ODYyM0MxMC4wMzY2IDEuMjY1MDIgMTAuNjQzMiAxIDExLjUwMTQgMUMxMi40NDg1IDEgMTMuMDgzOSAxLjMwNTUyIDEzLjQ3MjIgMS44MDYzNkMxMy44MDMxIDIuMjMzMTIgMTQgMi44NDMxMyAxNCAzLjYzMzI1SDE1QzE1IDIuNjgyNDIgMTQuNzYyNiAxLjgzODU2IDE0LjI2MjUgMS4xOTM2MUMxMy42Mzg5IDAuMzg5NDMgMTIuNjc0MyAwIDExLjUwMTQgMEMxMC40Mjk0IDAgOS41MzUyMyAwLjMzNzg3MSA4LjkxMjE4IDEuMDAyMUM4LjI5MzUxIDEuNjYxNjcgOCAyLjU4MTM1IDggMy42MzYwMVY2SDFDMC40NDc3MTUgNiAwIDYuNDQ3NzIgMCA3VjEzQzAgMTMuNTUyMyAwLjQ0NzcxNSAxNCAxIDE0SDEwQzEwLjU1MjMgMTQgMTEgMTMuNTUyMyAxMSAxM1Y3QzExIDYuNDQ3NzIgMTAuNTUyMyA2IDEwIDZIOVYzLjYzNjAxWk0xIDdIMTBWMTNIMVY3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sX249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuMzUzNTUgMS44NTM1NUMzLjU0ODgyIDEuNjU4MjkgMy41NDg4MiAxLjM0MTcxIDMuMzUzNTUgMS4xNDY0NUMzLjE1ODI5IDAuOTUxMTg0IDIuODQxNzEgMC45NTExODQgMi42NDY0NSAxLjE0NjQ1TDAuNjQ2NDQ3IDMuMTQ2NDVDMC40NTExODQgMy4zNDE3MSAwLjQ1MTE4NCAzLjY1ODI5IDAuNjQ2NDQ3IDMuODUzNTVMMi42NDY0NSA1Ljg1MzU1QzIuODQxNzEgNi4wNDg4MiAzLjE1ODI5IDYuMDQ4ODIgMy4zNTM1NSA1Ljg1MzU1QzMuNTQ4ODIgNS42NTgyOSAzLjU0ODgyIDUuMzQxNzEgMy4zNTM1NSA1LjE0NjQ1TDIuMjA3MTEgNEg5LjVDMTEuNDMzIDQgMTMgNS41NjcgMTMgNy41QzEzIDcuNzc2MTQgMTMuMjIzOSA4IDEzLjUgOEMxMy43NzYxIDggMTQgNy43NzYxNCAxNCA3LjVDMTQgNS4wMTQ3MiAxMS45ODUzIDMgOS41IDNIMi4yMDcxMUwzLjM1MzU1IDEuODUzNTVaTTIgNy41QzIgNy4yMjM4NiAxLjc3NjE0IDcgMS41IDdDMS4yMjM4NiA3IDEgNy4yMjM4NiAxIDcuNUMxIDkuOTg1MjggMy4wMTQ3MiAxMiA1LjUgMTJIMTIuNzkyOUwxMS42NDY0IDEzLjE0NjRDMTEuNDUxMiAxMy4zNDE3IDExLjQ1MTIgMTMuNjU4MyAxMS42NDY0IDEzLjg1MzZDMTEuODQxNyAxNC4wNDg4IDEyLjE1ODMgMTQuMDQ4OCAxMi4zNTM2IDEzLjg1MzZMMTQuMzUzNiAxMS44NTM2QzE0LjU0ODggMTEuNjU4MyAxNC41NDg4IDExLjM0MTcgMTQuMzUzNiAxMS4xNDY0TDEyLjM1MzYgOS4xNDY0NUMxMi4xNTgzIDguOTUxMTggMTEuODQxNyA4Ljk1MTE4IDExLjY0NjQgOS4xNDY0NUMxMS40NTEyIDkuMzQxNzEgMTEuNDUxMiA5LjY1ODI5IDExLjY0NjQgOS44NTM1NUwxMi43OTI5IDExSDUuNUMzLjU2NyAxMSAyIDkuNDMzIDIgNy41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sT249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEzLjkgMC40OTk5NzZDMTMuOSAwLjI3OTA2MiAxMy43MjA5IDAuMDk5OTc1NiAxMy41IDAuMDk5OTc1NkMxMy4yNzkxIDAuMDk5OTc1NiAxMy4xIDAuMjc5MDYyIDEzLjEgMC40OTk5NzZWMS4wOTk5OEgxMi41QzEyLjI3OTEgMS4wOTk5OCAxMi4xIDEuMjc5MDYgMTIuMSAxLjQ5OTk4QzEyLjEgMS43MjA4OSAxMi4yNzkxIDEuODk5OTggMTIuNSAxLjg5OTk4SDEzLjFWMi40OTk5OEMxMy4xIDIuNzIwODkgMTMuMjc5MSAyLjg5OTk4IDEzLjUgMi44OTk5OEMxMy43MjA5IDIuODk5OTggMTMuOSAyLjcyMDg5IDEzLjkgMi40OTk5OFYxLjg5OTk4SDE0LjVDMTQuNzIwOSAxLjg5OTk4IDE0LjkgMS43MjA4OSAxNC45IDEuNDk5OThDMTQuOSAxLjI3OTA2IDE0LjcyMDkgMS4wOTk5OCAxNC41IDEuMDk5OThIMTMuOVYwLjQ5OTk3NlpNMTEuODUzNiAzLjE0NjQyQzEyLjA0ODggMy4zNDE2OCAxMi4wNDg4IDMuNjU4MjYgMTEuODUzNiAzLjg1MzUzTDEwLjg1MzYgNC44NTM1M0MxMC42NTgzIDUuMDQ4NzkgMTAuMzQxNyA1LjA0ODc5IDEwLjE0NjUgNC44NTM1M0M5Ljk1MTIgNC42NTgyNyA5Ljk1MTIgNC4zNDE2OSAxMC4xNDY1IDQuMTQ2NDJMMTEuMTQ2NCAzLjE0NjQzQzExLjM0MTcgMi45NTExNiAxMS42NTgzIDIuOTUxMTYgMTEuODUzNiAzLjE0NjQyWk05Ljg1MzU3IDUuMTQ2NDJDMTAuMDQ4OCA1LjM0MTY4IDEwLjA0ODggNS42NTgyNyA5Ljg1MzU3IDUuODUzNTNMMi44NTM1NSAxMi44NTM1QzIuNjU4MjkgMTMuMDQ4OCAyLjM0MTcxIDEzLjA0ODggMi4xNDY0NSAxMi44NTM1QzEuOTUxMTggMTIuNjU4MyAxLjk1MTE4IDEyLjM0MTcgMi4xNDY0NSAxMi4xNDY0TDkuMTQ2NDYgNS4xNDY0MkM5LjM0MTcyIDQuOTUxMTYgOS42NTgzMSA0Ljk1MTE2IDkuODUzNTcgNS4xNDY0MlpNMTMuNSA1LjA5OTk4QzEzLjcyMDkgNS4wOTk5OCAxMy45IDUuMjc5MDYgMTMuOSA1LjQ5OTk4VjYuMDk5OThIMTQuNUMxNC43MjA5IDYuMDk5OTggMTQuOSA2LjI3OTA2IDE0LjkgNi40OTk5OEMxNC45IDYuNzIwODkgMTQuNzIwOSA2Ljg5OTk4IDE0LjUgNi44OTk5OEgxMy45VjcuNDk5OThDMTMuOSA3LjcyMDg5IDEzLjcyMDkgNy44OTk5OCAxMy41IDcuODk5OThDMTMuMjc5MSA3Ljg5OTk4IDEzLjEgNy43MjA4OSAxMy4xIDcuNDk5OThWNi44OTk5OEgxMi41QzEyLjI3OTEgNi44OTk5OCAxMi4xIDYuNzIwODkgMTIuMSA2LjQ5OTk4QzEyLjEgNi4yNzkwNiAxMi4yNzkxIDYuMDk5OTggMTIuNSA2LjA5OTk4SDEzLjFWNS40OTk5OEMxMy4xIDUuMjc5MDYgMTMuMjc5MSA1LjA5OTk4IDEzLjUgNS4wOTk5OFpNOC45MDAwMiAwLjQ5OTk3NkM4LjkwMDAyIDAuMjc5MDYyIDguNzIwOTMgMC4wOTk5NzU2IDguNTAwMDIgMC4wOTk5NzU2QzguMjc5MSAwLjA5OTk3NTYgOC4xMDAwMiAwLjI3OTA2MiA4LjEwMDAyIDAuNDk5OTc2VjEuMDk5OThINy41MDAwMkM3LjI3OTEgMS4wOTk5OCA3LjEwMDAyIDEuMjc5MDYgNy4xMDAwMiAxLjQ5OTk4QzcuMTAwMDIgMS43MjA4OSA3LjI3OTEgMS44OTk5OCA3LjUwMDAyIDEuODk5OThIOC4xMDAwMlYyLjQ5OTk4QzguMTAwMDIgMi43MjA4OSA4LjI3OTEgMi44OTk5OCA4LjUwMDAyIDIuODk5OThDOC43MjA5MyAyLjg5OTk4IDguOTAwMDIgMi43MjA4OSA4LjkwMDAyIDIuNDk5OThWMS44OTk5OEg5LjUwMDAyQzkuNzIwOTMgMS44OTk5OCA5LjkwMDAyIDEuNzIwODkgOS45MDAwMiAxLjQ5OTk4QzkuOTAwMDIgMS4yNzkwNiA5LjcyMDkzIDEuMDk5OTggOS41MDAwMiAxLjA5OTk4SDguOTAwMDJWMC40OTk5NzZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxMbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTAgNi41QzEwIDguNDMzIDguNDMzIDEwIDYuNSAxMEM0LjU2NyAxMCAzIDguNDMzIDMgNi41QzMgNC41NjcgNC41NjcgMyA2LjUgM0M4LjQzMyAzIDEwIDQuNTY3IDEwIDYuNVpNOS4zMDg4NCAxMC4wMTU5QzguNTM5MDEgMTAuNjMxOCA3LjU2MjUxIDExIDYuNSAxMUM0LjAxNDcyIDExIDIgOC45ODUyOCAyIDYuNUMyIDQuMDE0NzIgNC4wMTQ3MiAyIDYuNSAyQzguOTg1MjggMiAxMSA0LjAxNDcyIDExIDYuNUMxMSA3LjU2MjUxIDEwLjYzMTggOC41MzkwMSAxMC4wMTU5IDkuMzA4ODRMMTIuODUzNiAxMi4xNDY0QzEzLjA0ODggMTIuMzQxNyAxMy4wNDg4IDEyLjY1ODMgMTIuODUzNiAxMi44NTM2QzEyLjY1ODMgMTMuMDQ4OCAxMi4zNDE3IDEzLjA0ODggMTIuMTQ2NCAxMi44NTM2TDkuMzA4ODQgMTAuMDE1OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEVuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjQ5OTg4IDIuMDAwMTJDMS43NzYwMiAyLjAwMDEyIDEuOTk5ODggMS43NzYyNiAxLjk5OTg4IDEuNTAwMTJDMS45OTk4OCAxLjIyMzk4IDEuNzc2MDIgMS4wMDAxMiAxLjQ5OTg4IDEuMDAwMTJDMS4yMjM3NCAxLjAwMDEyIDAuOTk5ODc4IDEuMjIzOTggMC45OTk4NzggMS41MDAxMkMwLjk5OTg3OCAxLjc3NjI2IDEuMjIzNzQgMi4wMDAxMiAxLjQ5OTg4IDIuMDAwMTJaTTQuNDk5ODggMi4wMDAxMkM0Ljc3NjAyIDIuMDAwMTIgNC45OTk4OCAxLjc3NjI2IDQuOTk5ODggMS41MDAxMkM0Ljk5OTg4IDEuMjIzOTggNC43NzYwMiAxLjAwMDEyIDQuNDk5ODggMS4wMDAxMkM0LjIyMzc0IDEuMDAwMTIgMy45OTk4OCAxLjIyMzk4IDMuOTk5ODggMS41MDAxMkMzLjk5OTg4IDEuNzc2MjYgNC4yMjM3NCAyLjAwMDEyIDQuNDk5ODggMi4wMDAxMlpNNy45OTk4OCAxLjUwMDEyQzcuOTk5ODggMS43NzYyNiA3Ljc3NjAyIDIuMDAwMTIgNy40OTk4OCAyLjAwMDEyQzcuMjIzNzQgMi4wMDAxMiA2Ljk5OTg4IDEuNzc2MjYgNi45OTk4OCAxLjUwMDEyQzYuOTk5ODggMS4yMjM5OCA3LjIyMzc0IDEuMDAwMTIgNy40OTk4OCAxLjAwMDEyQzcuNzc2MDIgMS4wMDAxMiA3Ljk5OTg4IDEuMjIzOTggNy45OTk4OCAxLjUwMDEyWk0xMC40OTk5IDIuMDAwMTJDMTAuNzc2IDIuMDAwMTIgMTAuOTk5OSAxLjc3NjI2IDEwLjk5OTkgMS41MDAxMkMxMC45OTk5IDEuMjIzOTggMTAuNzc2IDEuMDAwMTIgMTAuNDk5OSAxLjAwMDEyQzEwLjIyMzcgMS4wMDAxMiA5Ljk5OTg4IDEuMjIzOTggOS45OTk4OCAxLjUwMDEyQzkuOTk5ODggMS43NzYyNiAxMC4yMjM3IDIuMDAwMTIgMTAuNDk5OSAyLjAwMDEyWk0xMy45OTk5IDEuNTAwMTJDMTMuOTk5OSAxLjc3NjI2IDEzLjc3NiAyLjAwMDEyIDEzLjQ5OTkgMi4wMDAxMkMxMy4yMjM3IDIuMDAwMTIgMTIuOTk5OSAxLjc3NjI2IDEyLjk5OTkgMS41MDAxMkMxMi45OTk5IDEuMjIzOTggMTMuMjIzNyAxLjAwMDEyIDEzLjQ5OTkgMS4wMDAxMkMxMy43NzYgMS4wMDAxMiAxMy45OTk5IDEuMjIzOTggMTMuOTk5OSAxLjUwMDEyWk0xLjQ5OTg4IDE0LjAwMDFDMS43NzYwMiAxNC4wMDAxIDEuOTk5ODggMTMuNzc2MyAxLjk5OTg4IDEzLjUwMDFDMS45OTk4OCAxMy4yMjQgMS43NzYwMiAxMy4wMDAxIDEuNDk5ODggMTMuMDAwMUMxLjIyMzc0IDEzLjAwMDEgMC45OTk4NzggMTMuMjI0IDAuOTk5ODc4IDEzLjUwMDFDMC45OTk4NzggMTMuNzc2MyAxLjIyMzc0IDE0LjAwMDEgMS40OTk4OCAxNC4wMDAxWk0xLjk5OTg4IDEwLjUwMDFDMS45OTk4OCAxMC43NzYzIDEuNzc2MDIgMTEuMDAwMSAxLjQ5OTg4IDExLjAwMDFDMS4yMjM3NCAxMS4wMDAxIDAuOTk5ODc4IDEwLjc3NjMgMC45OTk4NzggMTAuNTAwMUMwLjk5OTg3OCAxMC4yMjQgMS4yMjM3NCAxMC4wMDAxIDEuNDk5ODggMTAuMDAwMUMxLjc3NjAyIDEwLjAwMDEgMS45OTk4OCAxMC4yMjQgMS45OTk4OCAxMC41MDAxWk0xLjQ5OTg4IDguMDAwMTJDMS43NzYwMiA4LjAwMDEyIDEuOTk5ODggNy43NzYyNiAxLjk5OTg4IDcuNTAwMTJDMS45OTk4OCA3LjIyMzk4IDEuNzc2MDIgNy4wMDAxMiAxLjQ5OTg4IDcuMDAwMTJDMS4yMjM3NCA3LjAwMDEyIDAuOTk5ODc4IDcuMjIzOTggMC45OTk4NzggNy41MDAxMkMwLjk5OTg3OCA3Ljc3NjI2IDEuMjIzNzQgOC4wMDAxMiAxLjQ5OTg4IDguMDAwMTJaTTEuOTk5ODggNC41MDAxMkMxLjk5OTg4IDQuNzc2MjYgMS43NzYwMiA1LjAwMDEyIDEuNDk5ODggNS4wMDAxMkMxLjIyMzc0IDUuMDAwMTIgMC45OTk4NzggNC43NzYyNiAwLjk5OTg3OCA0LjUwMDEyQzAuOTk5ODc4IDQuMjIzOTggMS4yMjM3NCA0LjAwMDEyIDEuNDk5ODggNC4wMDAxMkMxLjc3NjAyIDQuMDAwMTIgMS45OTk4OCA0LjIyMzk4IDEuOTk5ODggNC41MDAxMlpNMTMuNDk5OSAxMS4wMDAxQzEzLjc3NiAxMS4wMDAxIDEzLjk5OTkgMTAuNzc2MyAxMy45OTk5IDEwLjUwMDFDMTMuOTk5OSAxMC4yMjQgMTMuNzc2IDEwLjAwMDEgMTMuNDk5OSAxMC4wMDAxQzEzLjIyMzcgMTAuMDAwMSAxMi45OTk5IDEwLjIyNCAxMi45OTk5IDEwLjUwMDFDMTIuOTk5OSAxMC43NzYzIDEzLjIyMzcgMTEuMDAwMSAxMy40OTk5IDExLjAwMDFaTTEzLjk5OTkgNy41MDAxMkMxMy45OTk5IDcuNzc2MjYgMTMuNzc2IDguMDAwMTIgMTMuNDk5OSA4LjAwMDEyQzEzLjIyMzcgOC4wMDAxMiAxMi45OTk5IDcuNzc2MjYgMTIuOTk5OSA3LjUwMDEyQzEyLjk5OTkgNy4yMjM5OCAxMy4yMjM3IDcuMDAwMTIgMTMuNDk5OSA3LjAwMDEyQzEzLjc3NiA3LjAwMDEyIDEzLjk5OTkgNy4yMjM5OCAxMy45OTk5IDcuNTAwMTJaTTEzLjQ5OTkgNS4wMDAxMkMxMy43NzYgNS4wMDAxMiAxMy45OTk5IDQuNzc2MjYgMTMuOTk5OSA0LjUwMDEyQzEzLjk5OTkgNC4yMjM5OCAxMy43NzYgNC4wMDAxMiAxMy40OTk5IDQuMDAwMTJDMTMuMjIzNyA0LjAwMDEyIDEyLjk5OTkgNC4yMjM5OCAxMi45OTk5IDQuNTAwMTJDMTIuOTk5OSA0Ljc3NjI2IDEzLjIyMzcgNS4wMDAxMiAxMy40OTk5IDUuMDAwMTJaTTQuOTk5ODggMTMuNTAwMUM0Ljk5OTg4IDEzLjc3NjMgNC43NzYwMiAxNC4wMDAxIDQuNDk5ODggMTQuMDAwMUM0LjIyMzc0IDE0LjAwMDEgMy45OTk4OCAxMy43NzYzIDMuOTk5ODggMTMuNTAwMUMzLjk5OTg4IDEzLjIyNCA0LjIyMzc0IDEzLjAwMDEgNC40OTk4OCAxMy4wMDAxQzQuNzc2MDIgMTMuMDAwMSA0Ljk5OTg4IDEzLjIyNCA0Ljk5OTg4IDEzLjUwMDFaTTcuNDk5ODggMTQuMDAwMUM3Ljc3NjAyIDE0LjAwMDEgNy45OTk4OCAxMy43NzYzIDcuOTk5ODggMTMuNTAwMUM3Ljk5OTg4IDEzLjIyNCA3Ljc3NjAyIDEzLjAwMDEgNy40OTk4OCAxMy4wMDAxQzcuMjIzNzQgMTMuMDAwMSA2Ljk5OTg4IDEzLjIyNCA2Ljk5OTg4IDEzLjUwMDFDNi45OTk4OCAxMy43NzYzIDcuMjIzNzQgMTQuMDAwMSA3LjQ5OTg4IDE0LjAwMDFaTTEwLjk5OTkgMTMuNTAwMUMxMC45OTk5IDEzLjc3NjMgMTAuNzc2IDE0LjAwMDEgMTAuNDk5OSAxNC4wMDAxQzEwLjIyMzcgMTQuMDAwMSA5Ljk5OTg4IDEzLjc3NjMgOS45OTk4OCAxMy41MDAxQzkuOTk5ODggMTMuMjI0IDEwLjIyMzcgMTMuMDAwMSAxMC40OTk5IDEzLjAwMDFDMTAuNzc2IDEzLjAwMDEgMTAuOTk5OSAxMy4yMjQgMTAuOTk5OSAxMy41MDAxWk0xMy40OTk5IDE0LjAwMDFDMTMuNzc2IDE0LjAwMDEgMTMuOTk5OSAxMy43NzYzIDEzLjk5OTkgMTMuNTAwMUMxMy45OTk5IDEzLjIyNCAxMy43NzYgMTMuMDAwMSAxMy40OTk5IDEzLjAwMDFDMTMuMjIzNyAxMy4wMDAxIDEyLjk5OTkgMTMuMjI0IDEyLjk5OTkgMTMuNTAwMUMxMi45OTk5IDEzLjc3NjMgMTMuMjIzNyAxNC4wMDAxIDEzLjQ5OTkgMTQuMDAwMVpNMy45OTk4OCA1LjAwMDEyQzMuOTk5ODggNC40NDc4NCA0LjQ0NzU5IDQuMDAwMTIgNC45OTk4OCA0LjAwMDEySDkuOTk5ODhDMTAuNTUyMiA0LjAwMDEyIDEwLjk5OTkgNC40NDc4NCAxMC45OTk5IDUuMDAwMTJWMTAuMDAwMUMxMC45OTk5IDEwLjU1MjQgMTAuNTUyMiAxMS4wMDAxIDkuOTk5ODggMTEuMDAwMUg0Ljk5OTg4QzQuNDQ3NTkgMTEuMDAwMSAzLjk5OTg4IDEwLjU1MjQgMy45OTk4OCAxMC4wMDAxVjUuMDAwMTJaTTQuOTk5ODggNS4wMDAxMkg5Ljk5OTg4VjEwLjAwMDFINC45OTk4OFY1LjAwMDEyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sU249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEgMkgxNFYxM0gxTDEgMlpNMCAyQzAgMS40NDc3MiAwLjQ0NzcxNSAxIDEgMUgxNEMxNC41NTIzIDEgMTUgMS40NDc3MiAxNSAyVjEzQzE1IDEzLjU1MjMgMTQuNTUyMyAxNCAxNCAxNEgxQzAuNDQ3NzE1IDE0IDAgMTMuNTUyMyAwIDEzVjJaTTQuODc1IDcuNUM0Ljg3NSA2LjA1MDI1IDYuMDUwMjUgNC44NzUgNy41IDQuODc1QzguOTQ5NzUgNC44NzUgMTAuMTI1IDYuMDUwMjUgMTAuMTI1IDcuNUMxMC4xMjUgOC45NDk3NSA4Ljk0OTc1IDEwLjEyNSA3LjUgMTAuMTI1QzYuMDUwMjUgMTAuMTI1IDQuODc1IDguOTQ5NzUgNC44NzUgNy41Wk03LjUgMy44NzVDNS40OTc5NyAzLjg3NSAzLjg3NSA1LjQ5Nzk3IDMuODc1IDcuNUMzLjg3NSA5LjUwMjAzIDUuNDk3OTcgMTEuMTI1IDcuNSAxMS4xMjVDOS41MDIwMyAxMS4xMjUgMTEuMTI1IDkuNTAyMDMgMTEuMTI1IDcuNUMxMS4xMjUgNS40OTc5NyA5LjUwMjAzIDMuODc1IDcuNSAzLjg3NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGpuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xIDFDMC40NDc3MTUgMSAwIDEuNDQ3NzIgMCAyVjEzQzAgMTMuNTUyMyAwLjQ0NzcxNSAxNCAxIDE0SDE0QzE0LjU1MjMgMTQgMTUgMTMuNTUyMyAxNSAxM1YyQzE1IDEuNDQ3NzIgMTQuNTUyMyAxIDE0IDFIMVpNNy41IDEwLjYyNUM5LjIyNTg5IDEwLjYyNSAxMC42MjUgOS4yMjU4OSAxMC42MjUgNy41QzEwLjYyNSA1Ljc3NDExIDkuMjI1ODkgNC4zNzUgNy41IDQuMzc1QzUuNzc0MTEgNC4zNzUgNC4zNzUgNS43NzQxMSA0LjM3NSA3LjVDNC4zNzUgOS4yMjU4OSA1Ljc3NDExIDEwLjYyNSA3LjUgMTAuNjI1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuMjUgNy41QzIuMjUgNy4yMjM4NiAyLjQ3Mzg2IDcgMi43NSA3SDEyLjI1QzEyLjUyNjEgNyAxMi43NSA3LjIyMzg2IDEyLjc1IDcuNUMxMi43NSA3Ljc3NjE0IDEyLjUyNjEgOCAxMi4yNSA4SDIuNzVDMi40NzM4NiA4IDIuMjUgNy43NzYxNCAyLjI1IDcuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGtuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTkxIDAuODc2ODkyQzMuODQyMjIgMC44NzY4OTIgMC44NzcwNzUgMy44NDIwNCAwLjg3NzA3NSA3LjQ5OTcyQzAuODc3MDc1IDExLjE1NzQgMy44NDIyMiAxNC4xMjI2IDcuNDk5OTEgMTQuMTIyNkMxMS4xNTc2IDE0LjEyMjYgMTQuMTIyNyAxMS4xNTc0IDE0LjEyMjcgNy40OTk3MkMxNC4xMjI3IDMuODQyMDQgMTEuMTU3NiAwLjg3Njg5MiA3LjQ5OTkxIDAuODc2ODkyWk0xLjgyNzA3IDcuNDk5NzJDMS44MjcwNyA0LjM2NjcxIDQuMzY2ODkgMS44MjY4OSA3LjQ5OTkxIDEuODI2ODlDMTAuNjMyOSAxLjgyNjg5IDEzLjE3MjcgNC4zNjY3MSAxMy4xNzI3IDcuNDk5NzJDMTMuMTcyNyAxMC42MzI3IDEwLjYzMjkgMTMuMTcyNiA3LjQ5OTkxIDEzLjE3MjZDNC4zNjY4OSAxMy4xNzI2IDEuODI3MDcgMTAuNjMyNyAxLjgyNzA3IDcuNDk5NzJaTTQuNTAwMDMgN0M0LjIyMzg5IDcgNC4wMDAwMyA3LjIyMzg2IDQuMDAwMDMgNy41QzQuMDAwMDMgNy43NzYxNCA0LjIyMzg5IDggNC41MDAwMyA4SDEwLjVDMTAuNzc2MiA4IDExIDcuNzc2MTQgMTEgNy41QzExIDcuMjIzODYgMTAuNzc2MiA3IDEwLjUgN0g0LjUwMDAzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuMTQ5MjEgMy45OTk5NkMyLjE0OTIxIDIuOTc3NzggMi45Nzc4NCAyLjE0OTE1IDQuMDAwMDIgMi4xNDkxNUM1LjAyMjE5IDIuMTQ5MTUgNS44NTA4MyAyLjk3Nzc4IDUuODUwODMgMy45OTk5NkM1Ljg1MDgzIDUuMDIyMTMgNS4wMjIxOSA1Ljg1MDc3IDQuMDAwMDIgNS44NTA3N0MyLjk3Nzg0IDUuODUwNzcgMi4xNDkyMSA1LjAyMjEzIDIuMTQ5MjEgMy45OTk5NlpNNC4wMDAwMiAxLjI0OTE1QzIuNDgwNzkgMS4yNDkxNSAxLjI0OTIxIDIuNDgwNzMgMS4yNDkyMSAzLjk5OTk2QzEuMjQ5MjEgNS41MTkxOSAyLjQ4MDc5IDYuNzUwNzcgNC4wMDAwMiA2Ljc1MDc3QzUuNTE5MjUgNi43NTA3NyA2Ljc1MDgzIDUuNTE5MTkgNi43NTA4MyAzLjk5OTk2QzYuNzUwODMgMi40ODA3MyA1LjUxOTI1IDEuMjQ5MTUgNC4wMDAwMiAxLjI0OTE1Wk01LjgyMDM0IDExLjAwMDFMMi40OTk5OCAxMi44MzY5VjkuMTYzMzFMNS44MjAzNCAxMS4wMDAxWk0yLjYzODgzIDguMjExNTlDMi4xNzIyOCA3Ljk1MzUgMS41OTk5OCA4LjI5MDkzIDEuNTk5OTggOC44MjQxMVYxMy4xNzYxQzEuNTk5OTggMTMuNzA5MyAyLjE3MjI4IDE0LjA0NjcgMi42Mzg4MyAxMy43ODg2TDYuNTcyMzUgMTEuNjEyNkM3LjA1Mzg5IDExLjM0NjIgNy4wNTM4OSAxMC42NTQgNi41NzIzNSAxMC4zODc2TDIuNjM4ODMgOC4yMTE1OVpNOC4zMDAwMSA5LjAwMDAzQzguMzAwMDEgOC42MTM0MyA4LjYxMzQxIDguMzAwMDMgOS4wMDAwMSA4LjMwMDAzSDEzQzEzLjM4NjYgOC4zMDAwMyAxMy43IDguNjEzNDMgMTMuNyA5LjAwMDAzVjEzQzEzLjcgMTMuMzg2NiAxMy4zODY2IDEzLjcgMTMgMTMuN0g5LjAwMDAxQzguNjEzNDEgMTMuNyA4LjMwMDAxIDEzLjM4NjYgOC4zMDAwMSAxM1Y5LjAwMDAzWk05LjIwMDAxIDkuMjAwMDNWMTIuOEgxMi44VjkuMjAwMDNIOS4yMDAwMVpNMTMuNDQzMiAyLjE5MzExQzEzLjYxODkgMi4wMTczNyAxMy42MTg5IDEuNzMyNDUgMTMuNDQzMiAxLjU1NjcxQzEzLjI2NzUgMS4zODA5OCAxMi45ODI2IDEuMzgwOTggMTIuODA2OCAxLjU1NjcxTDExIDMuMzYzNTNMOS4xOTMyMSAxLjU1Njc0QzkuMDE3NDggMS4zODEgOC43MzI1NSAxLjM4MSA4LjU1NjgyIDEuNTU2NzRDOC4zODEwOCAxLjczMjQ3IDguMzgxMDggMi4wMTc0IDguNTU2ODIgMi4xOTMxM0wxMC4zNjM2IDMuOTk5OTJMOC41NTY4MiA1LjgwNjcxQzguMzgxMDggNS45ODI0NSA4LjM4MTA4IDYuMjY3MzcgOC41NTY4MiA2LjQ0MzExQzguNzMyNTUgNi42MTg4NSA5LjAxNzQ4IDYuNjE4ODUgOS4xOTMyMSA2LjQ0MzExTDExIDQuNjM2MzJMMTIuODA2OCA2LjQ0MzE0QzEyLjk4MjYgNi42MTg4NyAxMy4yNjc1IDYuNjE4ODcgMTMuNDQzMiA2LjQ0MzE0QzEzLjYxODkgNi4yNjc0IDEzLjYxODkgNS45ODI0NyAxMy40NDMyIDUuODA2NzRMMTEuNjM2NCAzLjk5OTkyTDEzLjQ0MzIgMi4xOTMxMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFBuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjUgM0M0LjY3MTU3IDMgNCAzLjY3MTU3IDQgNC41QzQgNS4zMjg0MyA0LjY3MTU3IDYgNS41IDZDNi4zMjg0MyA2IDcgNS4zMjg0MyA3IDQuNUM3IDMuNjcxNTcgNi4zMjg0MyAzIDUuNSAzWk0zIDVDMy4wMTY3MSA1IDMuMDMzMjMgNC45OTkxOCAzLjA0OTUyIDQuOTk3NThDMy4yODAyMiA2LjEzOTkgNC4yODk2NyA3IDUuNSA3QzYuNzEwMzMgNyA3LjcxOTc4IDYuMTM5OSA3Ljk1MDQ4IDQuOTk3NThDNy45NjY3NyA0Ljk5OTE4IDcuOTgzMjkgNSA4IDVIMTMuNUMxMy43NzYxIDUgMTQgNC43NzYxNCAxNCA0LjVDMTQgNC4yMjM4NiAxMy43NzYxIDQgMTMuNSA0SDhDNy45ODMyOSA0IDcuOTY2NzcgNC4wMDA4MiA3Ljk1MDQ4IDQuMDAyNDJDNy43MTk3OCAyLjg2MDA5IDYuNzEwMzMgMiA1LjUgMkM0LjI4OTY3IDIgMy4yODAyMiAyLjg2MDA5IDMuMDQ5NTIgNC4wMDI0MkMzLjAzMzIzIDQuMDAwODIgMy4wMTY3MSA0IDMgNEgxLjVDMS4yMjM4NiA0IDEgNC4yMjM4NiAxIDQuNUMxIDQuNzc2MTQgMS4yMjM4NiA1IDEuNSA1SDNaTTExLjk1MDUgMTAuOTk3NkMxMS43MTk4IDEyLjEzOTkgMTAuNzEwMyAxMyA5LjUgMTNDOC4yODk2NyAxMyA3LjI4MDIyIDEyLjEzOTkgNy4wNDk1MiAxMC45OTc2QzcuMDMzMjMgMTAuOTk5MiA3LjAxNjcxIDExIDcgMTFIMS41QzEuMjIzODYgMTEgMSAxMC43NzYxIDEgMTAuNUMxIDEwLjIyMzkgMS4yMjM4NiAxMCAxLjUgMTBIN0M3LjAxNjcxIDEwIDcuMDMzMjMgMTAuMDAwOCA3LjA0OTUyIDEwLjAwMjRDNy4yODAyMiA4Ljg2MDEgOC4yODk2NyA4IDkuNSA4QzEwLjcxMDMgOCAxMS43MTk4IDguODYwMSAxMS45NTA1IDEwLjAwMjRDMTEuOTY2OCAxMC4wMDA4IDExLjk4MzMgMTAgMTIgMTBIMTMuNUMxMy43NzYxIDEwIDE0IDEwLjIyMzkgMTQgMTAuNUMxNCAxMC43NzYxIDEzLjc3NjEgMTEgMTMuNSAxMUgxMkMxMS45ODMzIDExIDExLjk2NjggMTAuOTk5MiAxMS45NTA1IDEwLjk5NzZaTTggMTAuNUM4IDkuNjcxNTcgOC42NzE1NyA5IDkuNSA5QzEwLjMyODQgOSAxMSA5LjY3MTU3IDExIDEwLjVDMTEgMTEuMzI4NCAxMC4zMjg0IDEyIDkuNSAxMkM4LjY3MTU3IDEyIDggMTEuMzI4NCA4IDEwLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxJbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNSAxLjVDNSAxLjIyMzg2IDQuNzc2MTQgMSA0LjUgMUM0LjIyMzg2IDEgNCAxLjIyMzg2IDQgMS41TDQgN0M0IDcuMDE2NzEgNC4wMDA4MiA3LjAzMzIzIDQuMDAyNDIgNy4wNDk1MkMyLjg2MDA5IDcuMjgwMjIgMiA4LjI4OTY3IDIgOS41QzIgMTAuNzEwMyAyLjg2MDA5IDExLjcxOTggNC4wMDI0MiAxMS45NTA1QzQuMDAwODIgMTEuOTY2OCA0IDExLjk4MzMgNCAxMlYxMy41QzQgMTMuNzc2MSA0LjIyMzg2IDE0IDQuNSAxNEM0Ljc3NjE0IDE0IDUgMTMuNzc2MSA1IDEzLjVWMTJDNSAxMS45ODMzIDQuOTk5MTggMTEuOTY2OCA0Ljk5NzU4IDExLjk1MDVDNi4xMzk5IDExLjcxOTggNyAxMC43MTAzIDcgOS41QzcgOC4yODk2NyA2LjEzOTkgNy4yODAyMiA0Ljk5NzU4IDcuMDQ5NTJDNC45OTkxOCA3LjAzMzIzIDUgNy4wMTY3MSA1IDdMNSAxLjVaTTExIDEuNUMxMSAxLjIyMzg2IDEwLjc3NjEgMSAxMC41IDFDMTAuMjIzOSAxIDEwIDEuMjIzODYgMTAgMS41VjNDMTAgMy4wMTY3MSAxMC4wMDA4IDMuMDMzMjMgMTAuMDAyNCAzLjA0OTUyQzguODYwMSAzLjI4MDIyIDggNC4yODk2NyA4IDUuNUM4IDYuNzEwMzMgOC44NjAxIDcuNzE5NzggMTAuMDAyNCA3Ljk1MDQ4QzEwLjAwMDggNy45NjY3NyAxMCA3Ljk4MzI5IDEwIDhWMTMuNUMxMCAxMy43NzYxIDEwLjIyMzkgMTQgMTAuNSAxNEMxMC43NzYxIDE0IDExIDEzLjc3NjEgMTEgMTMuNVY4QzExIDcuOTgzMjkgMTAuOTk5MiA3Ljk2Njc3IDEwLjk5NzYgNy45NTA0OEMxMi4xMzk5IDcuNzE5NzggMTMgNi43MTAzMyAxMyA1LjVDMTMgNC4yODk2NyAxMi4xMzk5IDMuMjgwMjIgMTAuOTk3NiAzLjA0OTUyQzEwLjk5OTIgMy4wMzMyMyAxMSAzLjAxNjcxIDExIDNWMS41Wk00LjUgOEMzLjY3MTU3IDggMyA4LjY3MTU3IDMgOS41QzMgMTAuMzI4NCAzLjY3MTU3IDExIDQuNSAxMUM1LjMyODQzIDExIDYgMTAuMzI4NCA2IDkuNUM2IDguNjcxNTcgNS4zMjg0MyA4IDQuNSA4Wk05IDUuNUM5IDQuNjcxNTcgOS42NzE1NyA0IDEwLjUgNEMxMS4zMjg0IDQgMTIgNC42NzE1NyAxMiA1LjVDMTIgNi4zMjg0MyAxMS4zMjg0IDcgMTAuNSA3QzkuNjcxNTcgNyA5IDYuMzI4NDMgOSA1LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxBbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy4yNTkyNSAzLjE2NjY3TDQuMzcwMzYgNS4zMzMzM1YxTDcuMjU5MjUgMy4xNjY2N1pNMSA4LjIyMjIyTDMuODg4ODkgNi4wNTU1NUwxIDMuODg4ODlWOC4yMjIyMlpNMSAxNEwzLjg4ODg5IDExLjgzMzNMMSA5LjY2NjY2VjE0Wk03Ljc0MDcyIDguMjIyMjJMMTAuNjI5NiA2LjA1NTU1TDcuNzQwNzIgMy44ODg4OVY4LjIyMjIyWk0xNCAzLjE2NjY3TDExLjExMTEgNS4zMzMzM1YxTDE0IDMuMTY2NjdaTTExLjExMTEgMTEuMTExMUwxNCA4Ljk0NDQ0TDExLjExMTEgNi43Nzc3N1YxMS4xMTExWk0zLjg4ODg5IDExLjExMTFMMSA4Ljk0NDQ0TDMuODg4ODkgNi43Nzc3N1YxMS4xMTExWk00LjM3MDM2IDYuMDU1NTVMNy4yNTkyNSA4LjIyMjIyVjMuODg4ODlMNC4zNzAzNiA2LjA1NTU1Wk0zLjg4ODg5IDUuMzMzMzNMMSAzLjE2NjY3TDMuODg4ODkgMVY1LjMzMzMzWk03Ljc0MDcyIDMuMTY2NjdMMTAuNjI5NiA1LjMzMzMzVjFMNy43NDA3MiAzLjE2NjY3Wk0xNCA4LjIyMjIyTDExLjExMTEgNi4wNTU1NUwxNCAzLjg4ODg5VjguMjIyMjJaTTExLjExMTEgMTEuODMzM0wxNCAxNFY5LjY2NjY2TDExLjExMTEgMTEuODMzM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFRuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjg5OTk4IDAuNDk5OTc2QzIuODk5OTggMC4yNzkwNjIgMi43MjA4OSAwLjA5OTk3NTYgMi40OTk5OCAwLjA5OTk3NTZDMi4yNzkwNiAwLjA5OTk3NTYgMi4wOTk5OCAwLjI3OTA2MiAyLjA5OTk4IDAuNDk5OTc2VjEuMDk5OThIMS40OTk5OEMxLjI3OTA2IDEuMDk5OTggMS4wOTk5OCAxLjI3OTA2IDEuMDk5OTggMS40OTk5OEMxLjA5OTk4IDEuNzIwODkgMS4yNzkwNiAxLjg5OTk4IDEuNDk5OTggMS44OTk5OEgyLjA5OTk4VjIuNDk5OThDMi4wOTk5OCAyLjcyMDg5IDIuMjc5MDYgMi44OTk5OCAyLjQ5OTk4IDIuODk5OThDMi43MjA4OSAyLjg5OTk4IDIuODk5OTggMi43MjA4OSAyLjg5OTk4IDIuNDk5OThWMS44OTk5OEgzLjQ5OTk4QzMuNzIwODkgMS44OTk5OCAzLjg5OTk4IDEuNzIwODkgMy44OTk5OCAxLjQ5OTk4QzMuODk5OTggMS4yNzkwNiAzLjcyMDg5IDEuMDk5OTggMy40OTk5OCAxLjA5OTk4SDIuODk5OThWMC40OTk5NzZaTTUuODk5OTggMy40OTk5OEM1Ljg5OTk4IDMuMjc5MDYgNS43MjA4OSAzLjA5OTk4IDUuNDk5OTggMy4wOTk5OEM1LjI3OTA2IDMuMDk5OTggNS4wOTk5OCAzLjI3OTA2IDUuMDk5OTggMy40OTk5OFY0LjA5OTk4SDQuNDk5OThDNC4yNzkwNiA0LjA5OTk4IDQuMDk5OTggNC4yNzkwNiA0LjA5OTk4IDQuNDk5OThDNC4wOTk5OCA0LjcyMDg5IDQuMjc5MDYgNC44OTk5OCA0LjQ5OTk4IDQuODk5OThINS4wOTk5OFY1LjQ5OTk4QzUuMDk5OTggNS43MjA4OSA1LjI3OTA2IDUuODk5OTggNS40OTk5OCA1Ljg5OTk4QzUuNzIwODkgNS44OTk5OCA1Ljg5OTk4IDUuNzIwODkgNS44OTk5OCA1LjQ5OTk4VjQuODk5OThINi40OTk5OEM2LjcyMDg5IDQuODk5OTggNi44OTk5OCA0LjcyMDg5IDYuODk5OTggNC40OTk5OEM2Ljg5OTk4IDQuMjc5MDYgNi43MjA4OSA0LjA5OTk4IDYuNDk5OTggNC4wOTk5OEg1Ljg5OTk4VjMuNDk5OThaTTEuODk5OTggNi40OTk5OEMxLjg5OTk4IDYuMjc5MDYgMS43MjA4OSA2LjA5OTk4IDEuNDk5OTggNi4wOTk5OEMxLjI3OTA2IDYuMDk5OTggMS4wOTk5OCA2LjI3OTA2IDEuMDk5OTggNi40OTk5OFY3LjA5OTk4SDAuNDk5OTc2QzAuMjc5MDYyIDcuMDk5OTggMC4wOTk5NzU2IDcuMjc5MDYgMC4wOTk5NzU2IDcuNDk5OThDMC4wOTk5NzU2IDcuNzIwODkgMC4yNzkwNjIgNy44OTk5OCAwLjQ5OTk3NiA3Ljg5OTk4SDEuMDk5OThWOC40OTk5OEMxLjA5OTk4IDguNzIwODkgMS4yNzkwNiA4Ljg5OTk3IDEuNDk5OTggOC44OTk5N0MxLjcyMDg5IDguODk5OTcgMS44OTk5OCA4LjcyMDg5IDEuODk5OTggOC40OTk5OFY3Ljg5OTk4SDIuNDk5OThDMi43MjA4OSA3Ljg5OTk4IDIuODk5OTggNy43MjA4OSAyLjg5OTk4IDcuNDk5OThDMi44OTk5OCA3LjI3OTA2IDIuNzIwODkgNy4wOTk5OCAyLjQ5OTk4IDcuMDk5OThIMS44OTk5OFY2LjQ5OTk4Wk04LjU0NDA2IDAuOTgxODRMOC4yNDYxOCAwLjk0MTU4NkM4LjAzMjc1IDAuOTE3Njc2IDcuOTA2OTIgMS4xNjU1IDguMDI5MzYgMS4zNDE5NEM4LjE3MDEzIDEuNTQ0NzkgOC4yOTk4MSAxLjc1NTkyIDguNDE3NTQgMS45NzQ0NUM4LjkxODc4IDIuOTA0ODUgOS4yMDMyMiAzLjk2OTMyIDkuMjAzMjIgNS4xMDAyMkM5LjIwMzIyIDguMzcyMDEgNi44MjI0NyAxMS4wODc4IDMuNjk4ODcgMTEuNjA5N0MzLjQ1NzM2IDExLjY1IDMuMjA5ODggMTEuNjc3MiAyLjk2MDA4IDExLjY5MDZDMi43NDU2MyAxMS43MDIgMi42MjcyOSAxMS45NTM1IDIuNzc3MjEgMTIuMTA3MkMyLjg0NTUxIDEyLjE3NzMgMi45MTUzNSAxMi4yNDU4IDIuOTg2NjcgMTIuMzEyOEwzLjA1ODgzIDEyLjM3OTVMMy4zMTg4MyAxMi42MDQ1TDMuNTA2ODQgMTIuNzUzMkwzLjYyNzk2IDEyLjg0MzNMMy44MTQ5MSAxMi45NzQyTDMuOTkwNzkgMTMuMDg5QzQuMTExNzUgMTMuMTY1MSA0LjIzNTM2IDEzLjIzNzUgNC4zNjE1NyAxMy4zMDU5TDQuNjI0OTYgMTMuNDQxMkw0Ljg4NTUzIDEzLjU2MDdMNS4xODgzNyAxMy42ODI4TDUuNDMxNjkgMTMuNzY4NkM1LjU2NTY0IDEzLjgxMjggNS43MDE0OSAxMy44NTI5IDUuODM4NTcgMTMuODg4NUM1Ljk0MjYyIDEzLjkxNTUgNi4wNDc2NyAxMy45NDAxIDYuMTU0MDUgMTMuOTYyMkM2LjI3OTkzIDEzLjk4ODMgNi40MDcxMyAxNC4wMTA5IDYuNTM1NDQgMTQuMDI5OEw2Ljg1MjQxIDE0LjA2ODVMNy4xMTkzNCAxNC4wODkyQzcuMjQ2MzcgMTQuMDk2NSA3LjM3NDM2IDE0LjEwMDIgNy41MDMyMiAxNC4xMDAyQzExLjE0ODMgMTQuMTAwMiAxNC4xMDMyIDExLjE0NTMgMTQuMTAzMiA3LjUwMDIzQzE0LjEwMzIgNy4yNTA0NCAxNC4wODkzIDcuMDAzODkgMTQuMDYyMyA2Ljc2MTMxTDE0LjAyNTUgNi40ODQwN0MxMy45OTEgNi4yNjA4MyAxMy45NDUzIDYuMDQxMjkgMTMuODg5MSA1LjgyNjQyQzEzLjgyMTMgNS41NjcwOSAxMy43MzgyIDUuMzEzOTggMTMuNjQwOSA1LjA2ODgxTDEzLjUyNzkgNC44MDEzMkwxMy40NTA3IDQuNjM1NDJMMTMuMzc2NiA0LjQ4NjY2QzEzLjIxNzggNC4xNzc3MyAxMy4wMzUzIDMuODgyOTUgMTIuODMxMiAzLjYwNDIzTDEyLjY3ODIgMy40MDM1MkwxMi40NzkzIDMuMTY0MzJMMTIuMzE1NyAyLjk4MzYxTDEyLjE5NjEgMi44NTk1MUwxMi4wMzU1IDIuNzAyNDZMMTEuODEzNCAyLjUwMTg0TDExLjQ5MjUgMi4yNDE5MUwxMS4yNDgzIDIuMDY0OThMMTAuOTU2MiAxLjg3NDQ2TDEwLjYzNDYgMS42ODg5NEwxMC4zMDczIDEuNTIzNzhMMTAuMTkzOCAxLjQ3MTc2TDkuOTU0ODggMS4zNzA2TDkuNjc3OTEgMS4yNjY5TDkuNDI1NjYgMS4xODQ2TDkuMTAwNzUgMS4wOTQ4OUw4LjgzNTk5IDEuMDM0ODZMOC41NDQwNiAwLjk4MTg0Wk0xMC40MDMyIDUuMzAwMjNDMTAuNDAzMiA0LjI3NTg4IDEwLjIwMDIgMy4yOTgyOSA5LjgzMjQ0IDIuNDA2MDRDMTEuNzYyMyAzLjI4OTk1IDEzLjEwMzIgNS4yMzg2MiAxMy4xMDMyIDcuNTAwMjNDMTMuMTAzMiAxMC41OTMgMTAuNTk2IDEzLjEwMDIgNy41MDMyMiAxMy4xMDAyQzYuNjM2NDYgMTMuMTAwMiA1LjgxNTk3IDEyLjkwMzYgNS4wODM1NSAxMi41NTIyQzYuNTQxOSAxMi4wOTQxIDcuODEwODEgMTEuMjA4MiA4Ljc0MzIyIDEwLjA0MTZDOC44Nzk2MyAxMC4yMjg0IDkuMTAwMjggMTAuMzQ5NyA5LjM0OTI4IDEwLjM0OTdDOS43NjM0OSAxMC4zNDk3IDEwLjA5OTMgMTAuMDEzOSAxMC4wOTkzIDkuNTk5NzFDMTAuMDk5MyA5LjI0MjU2IDkuODQ5NjUgOC45NDM3MyA5LjUxNTM1IDguODY4MTZDOS41Nzc0MSA4Ljc1MTY1IDkuNjM2NTMgOC42MzMzNCA5LjY5MjYgOC41MTMzMkM5Ljg4MzU4IDguNjMxNjMgMTAuMTA4OCA4LjY5OTkzIDEwLjM1IDguNjk5OTNDMTEuMDQwMyA4LjY5OTkzIDExLjYgOC4xNDAyOCAxMS42IDcuNDQ5OTNDMTEuNiA2Ljc1OTc2IDExLjA0MDYgNi4yMDAyNCAxMC4zNTA1IDYuMTk5OTNDMTAuMzg1MyA1LjkwNDg3IDEwLjQwMzIgNS42MDQ2NCAxMC40MDMyIDUuMzAwMjNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxIbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy44MTgxOSAwLjkzMTc5QzcuNjQyNDUgMC43NTYwNTQgNy4zNTc1MyAwLjc1NjA1NCA3LjE4MTc5IDAuOTMxNzlMNS40MzE3OSAyLjY4MTc5QzUuMjU2MDUgMi44NTc1MyA1LjI1NjA1IDMuMTQyNDUgNS40MzE3OSAzLjMxODE5QzUuNjA3NTMgMy40OTM5MiA1Ljg5MjQ1IDMuNDkzOTIgNi4wNjgxOSAzLjMxODE5TDYuOTk5OTkgMi4zODYzOFY1LjQ5OTk5QzYuOTk5OTkgNS43NzYxMyA3LjIyMzg1IDUuOTk5OTkgNy40OTk5OSA1Ljk5OTk5QzcuNzc2MTMgNS45OTk5OSA3Ljk5OTk5IDUuNzc2MTMgNy45OTk5OSA1LjQ5OTk5VjIuMzg2MzhMOC45MzE3OSAzLjMxODE5QzkuMTA3NTMgMy40OTM5MiA5LjM5MjQ1IDMuNDkzOTIgOS41NjgxOSAzLjMxODE5QzkuNzQzOTIgMy4xNDI0NSA5Ljc0MzkyIDIuODU3NTMgOS41NjgxOSAyLjY4MTc5TDcuODE4MTkgMC45MzE3OVpNNy45OTk5OSA5LjQ5OTk5QzcuOTk5OTkgOS4yMjM4NSA3Ljc3NjEzIDguOTk5OTkgNy40OTk5OSA4Ljk5OTk5QzcuMjIzODUgOC45OTk5OSA2Ljk5OTk5IDkuMjIzODUgNi45OTk5OSA5LjQ5OTk5VjEyLjYxMzZMNi4wNjgxOSAxMS42ODE4QzUuODkyNDUgMTEuNTA2MSA1LjYwNzUzIDExLjUwNjEgNS40MzE3OSAxMS42ODE4QzUuMjU2MDUgMTEuODU3NSA1LjI1NjA1IDEyLjE0MjQgNS40MzE3OSAxMi4zMTgyTDcuMTgxNzkgMTQuMDY4MkM3LjM1NzUzIDE0LjI0MzkgNy42NDI0NSAxNC4yNDM5IDcuODE4MTkgMTQuMDY4Mkw5LjU2ODE5IDEyLjMxODJDOS43NDM5MiAxMi4xNDI0IDkuNzQzOTIgMTEuODU3NSA5LjU2ODE5IDExLjY4MThDOS4zOTI0NSAxMS41MDYxIDkuMTA3NTMgMTEuNTA2MSA4LjkzMTc5IDExLjY4MThMNy45OTk5OSAxMi42MTM2VjkuNDk5OTlaTTguOTk5OTkgNy40OTk5OUM4Ljk5OTk5IDcuMjIzODUgOS4yMjM4NSA2Ljk5OTk5IDkuNDk5OTkgNi45OTk5OUgxMi42MTM2TDExLjY4MTggNi4wNjgxOUMxMS41MDYxIDUuODkyNDUgMTEuNTA2MSA1LjYwNzUzIDExLjY4MTggNS40MzE3OUMxMS44NTc1IDUuMjU2MDUgMTIuMTQyNCA1LjI1NjA1IDEyLjMxODIgNS40MzE3OUwxNC4wNjgyIDcuMTgxNzlDMTQuMjQzOSA3LjM1NzUzIDE0LjI0MzkgNy42NDI0NSAxNC4wNjgyIDcuODE4MTlMMTIuMzE4MiA5LjU2ODE5QzEyLjE0MjQgOS43NDM5MiAxMS44NTc1IDkuNzQzOTIgMTEuNjgxOCA5LjU2ODE5QzExLjUwNjEgOS4zOTI0NSAxMS41MDYxIDkuMTA3NTMgMTEuNjgxOCA4LjkzMTc5TDEyLjYxMzYgNy45OTk5OUg5LjQ5OTk5QzkuMjIzODUgNy45OTk5OSA4Ljk5OTk5IDcuNzc2MTMgOC45OTk5OSA3LjQ5OTk5Wk0zLjMxODE5IDYuMDY4MTlMMi4zODYzOCA2Ljk5OTk5SDUuNDk5OTlDNS43NzYxMyA2Ljk5OTk5IDUuOTk5OTkgNy4yMjM4NSA1Ljk5OTk5IDcuNDk5OTlDNS45OTk5OSA3Ljc3NjEzIDUuNzc2MTMgNy45OTk5OSA1LjQ5OTk5IDcuOTk5OTlIMi4zODYzOEwzLjMxODE5IDguOTMxNzlDMy40OTM5MiA5LjEwNzUzIDMuNDkzOTIgOS4zOTI0NSAzLjMxODE5IDkuNTY4MTlDMy4xNDI0NSA5Ljc0MzkyIDIuODU3NTMgOS43NDM5MiAyLjY4MTc5IDkuNTY4MTlMMC45MzE3OSA3LjgxODE5QzAuNzU2MDU0IDcuNjQyNDUgMC43NTYwNTQgNy4zNTc1MyAwLjkzMTc5IDcuMTgxNzlMMi42ODE3OSA1LjQzMTc5QzIuODU3NTMgNS4yNTYwNSAzLjE0MjQ1IDUuMjU2MDUgMy4zMTgxOSA1LjQzMTc5QzMuNDkzOTIgNS42MDc1MyAzLjQ5MzkyIDUuODkyNDUgMy4zMTgxOSA2LjA2ODE5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuMjU3ODEgMy4xMTY4NEMzLjY3NzcxIDMuNDU3OTYgMy44MzUyMyAzLjQzMTkzIDQuNjIzNjkgMy4zNzkzM0wxMi4wNTcxIDIuOTMyOTlDMTIuMjE0NyAyLjkzMjk5IDEyLjA4MzYgMi43NzU3MSAxMi4wMzExIDIuNzQ5NTdMMTAuNzk2NSAxLjg1NzExQzEwLjU2IDEuNjczNDcgMTAuMjQ0OCAxLjQ2MzE1IDkuNjQwODMgMS41MTU3NkwyLjQ0MzA4IDIuMDQwNzRDMi4xODA1OSAyLjA2Njc3IDIuMTI4MTUgMi4xOTgwMSAyLjIzMjcgMi4zMDMyMkwzLjI1NzgxIDMuMTE2ODRaTTMuNzA0MSA0Ljg0OTE3VjEyLjY3MDRDMy43MDQxIDEzLjA5MDcgMy45MTQxNSAxMy4yNDggNC4zODY5MyAxMy4yMjJMMTIuNTU2MiAxMi43NDkzQzEzLjAyOTIgMTIuNzIzMyAxMy4wODE5IDEyLjQzNDEgMTMuMDgxOSAxMi4wOTI3VjQuMzIzOTdDMTMuMDgxOSAzLjk4MzA2IDEyLjk1MDggMy43OTkyMSAxMi42NjEyIDMuODI1NDVMNC4xMjQyMiA0LjMyMzk3QzMuODA5MTggNC4zNTA0NCAzLjcwNDEgNC41MDgwMyAzLjcwNDEgNC44NDkxN1pNMTEuNzY4OCA1LjI2ODcyQzExLjgyMTIgNS41MDUxOCAxMS43Njg4IDUuNzQxNDIgMTEuNTMxOSA1Ljc2Nzk5TDExLjEzODMgNS44NDY0MVYxMS42MjA1QzEwLjc5NjUgMTEuODA0MiAxMC40ODE0IDExLjkwOTIgMTAuMjE4OCAxMS45MDkyQzkuNzk4MzUgMTEuOTA5MiA5LjY5MzA1IDExLjc3NzkgOS4zNzgxMiAxMS4zODQ0TDYuODAzNDUgNy4zNDI0OVYxMS4yNTMyTDcuNjE4MTYgMTEuNDM3QzcuNjE4MTYgMTEuNDM3IDcuNjE4MTYgMTEuOTA5MiA2Ljk2MDg2IDExLjkwOTJMNS4xNDg3OSAxMi4wMTQzQzUuMDk2MTUgMTEuOTA5MiA1LjE0ODc5IDExLjY0NyA1LjMzMjU5IDExLjU5NDRMNS44MDU0NiAxMS40NjM0VjYuMjkyNzZMNS4xNDg5IDYuMjQwMTVDNS4wOTYyNSA2LjAwMzY5IDUuMjI3MzkgNS42NjI3OCA1LjU5NTQgNS42MzYzMUw3LjUzOTM1IDUuNTA1MjhMMTAuMjE4OCA5LjU5OThWNS45Nzc2NUw5LjUzNTY0IDUuODk5MjRDOS40ODMyIDUuNjEwMTggOS42OTMwNSA1LjQwMDI4IDkuOTU1NzYgNS4zNzQyNUwxMS43Njg4IDUuMjY4NzJaTTEuODM4NzQgMS4zMzIxMkw5LjMyNTU3IDAuNzgwNzg3QzEwLjI0NSAwLjcwMTkzMiAxMC40ODE1IDAuNzU0NzUzIDExLjA1OTQgMS4xNzQ1MkwxMy40NDkyIDIuODU0MjRDMTMuODQzNiAzLjE0MzA5IDEzLjk3NSAzLjIyMTczIDEzLjk3NSAzLjUzNjYxVjEyLjc0OTNDMTMuOTc1IDEzLjMyNjYgMTMuNzY0NyAxMy42NjgxIDEzLjAyOTMgMTMuNzIwM0w0LjMzNDkyIDE0LjI0NTRDMy43ODI5MSAxNC4yNzE3IDMuNTIwMTkgMTQuMTkzIDMuMjMxMTEgMTMuODI1M0wxLjQ3MTE2IDExLjU0MTlDMS4xNTU4IDExLjEyMTYgMS4wMjQ2NiAxMC44MDcxIDEuMDI0NjYgMTAuNDM5MlYyLjI1MDQxQzEuMDI0NjYgMS43NzgyNSAxLjIzNTA0IDEuMzg0NDEgMS44Mzg3NCAxLjMzMjEyWlwiLGZpbGw6bn0pKX0sVm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNSAxLjVDNC41IDQuMjUgMyA2LjUgMyA5QzMgMTEuNDg1MyA1LjAxNDcyIDEzLjUgNy41IDEzLjVDOS45ODUyOCAxMy41IDEyIDExLjQ4NTMgMTIgOUMxMiA2LjUgMTAuNSA0LjI1IDcuNSAxLjVaTTExIDlDMTEgNy4xMTIwMyA5Ljk3MzE1IDUuMjcxOTUgNy41IDIuODczNTdDNS4wMjY4NiA1LjI3MTk1IDQgNy4xMTIwMyA0IDlDNCAxMC45MzMgNS41NjcgMTIuNSA3LjUgMTIuNUM5LjQzMyAxMi41IDExIDEwLjkzMyAxMSA5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sRG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNDk5ODUgMS4xMDAwMUMzLjI3ODk0IDEuMTAwMDEgMy4wOTk4NSAxLjI3OTA5IDMuMDk5ODUgMS41MDAwMUMzLjA5OTg1IDEuNzIwOTIgMy4yNzg5NCAxLjkwMDAxIDMuNDk5ODUgMS45MDAwMUgxMS40OTk5QzExLjcyMDggMS45MDAwMSAxMS44OTk5IDEuNzIwOTIgMTEuODk5OSAxLjUwMDAxQzExLjg5OTkgMS4yNzkwOSAxMS43MjA4IDEuMTAwMDEgMTEuNDk5OSAxLjEwMDAxSDMuNDk5ODVaTTQuOTk5OTUgNC4yNTAwMUM0Ljk5OTk1IDMuOTczODcgNC43NzYwOSAzLjc1MDAxIDQuNDk5OTUgMy43NTAwMUM0LjIyMzgxIDMuNzUwMDEgMy45OTk5NSAzLjk3Mzg3IDMuOTk5OTUgNC4yNTAwMVY5LjU1MDAxQzMuOTk5OTUgMTEuNDgzIDUuNTY2OTUgMTMuMDUgNy40OTk5NSAxMy4wNUM5LjQzMjk1IDEzLjA1IDExIDExLjQ4MyAxMSA5LjU1MDAxVjQuMjUwMDFDMTEgMy45NzM4NyAxMC43NzYxIDMuNzUwMDEgMTAuNSAzLjc1MDAxQzEwLjIyMzggMy43NTAwMSA5Ljk5OTk1IDMuOTczODcgOS45OTk5NSA0LjI1MDAxVjkuNTUwMDFDOS45OTk5NSAxMC45MzA3IDguODgwNjYgMTIuMDUgNy40OTk5NSAxMi4wNUM2LjExOTI0IDEyLjA1IDQuOTk5OTUgMTAuOTMwNyA0Ljk5OTk1IDkuNTUwMDFWNC4yNTAwMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFpuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjg1NzE0IDJIMTIuMTQyOUMxMi42MTYyIDIgMTMgMi4zODM3NiAxMyAyLjg1NzE0VjEyLjE0MjlDMTMgMTIuNjE2MiAxMi42MTYyIDEzIDEyLjE0MjkgMTNIMi44NTcxNEMyLjM4Mzc2IDEzIDIgMTIuNjE2MiAyIDEyLjE0MjlWMi44NTcxNEMyIDIuMzgzNzYgMi4zODM3NiAyIDIuODU3MTQgMlpNMSAyLjg1NzE0QzEgMS44MzE0NyAxLjgzMTQ3IDEgMi44NTcxNCAxSDEyLjE0MjlDMTMuMTY4NSAxIDE0IDEuODMxNDcgMTQgMi44NTcxNFYxMi4xNDI5QzE0IDEzLjE2ODUgMTMuMTY4NSAxNCAxMi4xNDI5IDE0SDIuODU3MTRDMS44MzE0NyAxNCAxIDEzLjE2ODUgMSAxMi4xNDI5VjIuODU3MTRaTTcuNDk5ODggNS4wMDAxMkM3Ljc3NjAyIDUuMDAwMTIgNy45OTk4OCA0Ljc3NjI2IDcuOTk5ODggNC41MDAxMkM3Ljk5OTg4IDQuMjIzOTggNy43NzYwMiA0LjAwMDEyIDcuNDk5ODggNC4wMDAxMkM3LjIyMzc0IDQuMDAwMTIgNi45OTk4OCA0LjIyMzk4IDYuOTk5ODggNC41MDAxMkM2Ljk5OTg4IDQuNzc2MjYgNy4yMjM3NCA1LjAwMDEyIDcuNDk5ODggNS4wMDAxMlpNNC40OTk4OCAxMS4wMDAxQzQuNzc2MDIgMTEuMDAwMSA0Ljk5OTg4IDEwLjc3NjMgNC45OTk4OCAxMC41MDAxQzQuOTk5ODggMTAuMjI0IDQuNzc2MDIgMTAuMDAwMSA0LjQ5OTg4IDEwLjAwMDFDNC4yMjM3NCAxMC4wMDAxIDMuOTk5ODggMTAuMjI0IDMuOTk5ODggMTAuNTAwMUMzLjk5OTg4IDEwLjc3NjMgNC4yMjM3NCAxMS4wMDAxIDQuNDk5ODggMTEuMDAwMVpNNC45OTk4OCA3LjUwMDEyQzQuOTk5ODggNy43NzYyNiA0Ljc3NjAyIDguMDAwMTIgNC40OTk4OCA4LjAwMDEyQzQuMjIzNzQgOC4wMDAxMiAzLjk5OTg4IDcuNzc2MjYgMy45OTk4OCA3LjUwMDEyQzMuOTk5ODggNy4yMjM5OCA0LjIyMzc0IDcuMDAwMTIgNC40OTk4OCA3LjAwMDEyQzQuNzc2MDIgNy4wMDAxMiA0Ljk5OTg4IDcuMjIzOTggNC45OTk4OCA3LjUwMDEyWk00LjQ5OTg4IDUuMDAwMTJDNC43NzYwMiA1LjAwMDEyIDQuOTk5ODggNC43NzYyNiA0Ljk5OTg4IDQuNTAwMTJDNC45OTk4OCA0LjIyMzk4IDQuNzc2MDIgNC4wMDAxMiA0LjQ5OTg4IDQuMDAwMTJDNC4yMjM3NCA0LjAwMDEyIDMuOTk5ODggNC4yMjM5OCAzLjk5OTg4IDQuNTAwMTJDMy45OTk4OCA0Ljc3NjI2IDQuMjIzNzQgNS4wMDAxMiA0LjQ5OTg4IDUuMDAwMTJaTTEwLjk5OTkgMTAuNTAwMUMxMC45OTk5IDEwLjc3NjMgMTAuNzc2IDExLjAwMDEgMTAuNDk5OSAxMS4wMDAxQzEwLjIyMzcgMTEuMDAwMSA5Ljk5OTg4IDEwLjc3NjMgOS45OTk4OCAxMC41MDAxQzkuOTk5ODggMTAuMjI0IDEwLjIyMzcgMTAuMDAwMSAxMC40OTk5IDEwLjAwMDFDMTAuNzc2IDEwLjAwMDEgMTAuOTk5OSAxMC4yMjQgMTAuOTk5OSAxMC41MDAxWk0xMC40OTk5IDguMDAwMTJDMTAuNzc2IDguMDAwMTIgMTAuOTk5OSA3Ljc3NjI2IDEwLjk5OTkgNy41MDAxMkMxMC45OTk5IDcuMjIzOTggMTAuNzc2IDcuMDAwMTIgMTAuNDk5OSA3LjAwMDEyQzEwLjIyMzcgNy4wMDAxMiA5Ljk5OTg4IDcuMjIzOTggOS45OTk4OCA3LjUwMDEyQzkuOTk5ODggNy43NzYyNiAxMC4yMjM3IDguMDAwMTIgMTAuNDk5OSA4LjAwMDEyWk0xMC45OTk5IDQuNTAwMTJDMTAuOTk5OSA0Ljc3NjI2IDEwLjc3NiA1LjAwMDEyIDEwLjQ5OTkgNS4wMDAxMkMxMC4yMjM3IDUuMDAwMTIgOS45OTk4OCA0Ljc3NjI2IDkuOTk5ODggNC41MDAxMkM5Ljk5OTg4IDQuMjIzOTggMTAuMjIzNyA0LjAwMDEyIDEwLjQ5OTkgNC4wMDAxMkMxMC43NzYgNC4wMDAxMiAxMC45OTk5IDQuMjIzOTggMTAuOTk5OSA0LjUwMDEyWk03LjQ5OTg4IDExLjAwMDFDNy43NzYwMiAxMS4wMDAxIDcuOTk5ODggMTAuNzc2MyA3Ljk5OTg4IDEwLjUwMDFDNy45OTk4OCAxMC4yMjQgNy43NzYwMiAxMC4wMDAxIDcuNDk5ODggMTAuMDAwMUM3LjIyMzc0IDEwLjAwMDEgNi45OTk4OCAxMC4yMjQgNi45OTk4OCAxMC41MDAxQzYuOTk5ODggMTAuNzc2MyA3LjIyMzc0IDExLjAwMDEgNy40OTk4OCAxMS4wMDAxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sJG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuMjAzMDcgMS4wNDMxMkMxLjAwNDgxIDAuOTU0OTk4IDAuNzcyMzQgMS4wMDQ4IDAuNjI3NTc3IDEuMTY2NDFDMC40ODI4MTMgMS4zMjgwMiAwLjQ1ODc5NCAxLjU2NDU1IDAuNTY4MTE2IDEuNzUxOTZMMy45MjExNSA3LjUwMDAyTDAuNTY4MTE2IDEzLjI0ODFDMC40NTg3OTQgMTMuNDM1NSAwLjQ4MjgxMyAxMy42NzIgMC42Mjc1NzcgMTMuODMzNkMwLjc3MjM0IDEzLjk5NTIgMS4wMDQ4MSAxNC4wNDUgMS4yMDMwNyAxMy45NTY5TDE0LjcwMzEgNy45NTY5MkMxNC44ODM2IDcuODc2NjcgMTUgNy42OTc2MSAxNSA3LjUwMDAyQzE1IDcuMzAyNDIgMTQuODgzNiA3LjEyMzM2IDE0LjcwMzEgNy4wNDMxMUwxLjIwMzA3IDEuMDQzMTJaTTQuODQ1NTIgNy4xMDAwMkwyLjIxMjM0IDIuNTg2TDEzLjI2ODkgNy41MDAwMkwyLjIxMjM0IDEyLjQxNEw0Ljg0NTUyIDcuOTAwMDJIOUM5LjIyMDkxIDcuOTAwMDIgOS40IDcuNzIwOTQgOS40IDcuNTAwMDJDOS40IDcuMjc5MTEgOS4yMjA5MSA3LjEwMDAyIDkgNy4xMDAwMkg0Ljg0NTUyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTYuMDQ5OTUgMi43NDk5OEM2LjA0OTk1IDIuNDQ2MjMgNS44MDM3MSAyLjE5OTk4IDUuNDk5OTUgMi4xOTk5OEM1LjE5NjE5IDIuMTk5OTggNC45NDk5NSAyLjQ0NjIzIDQuOTQ5OTUgMi43NDk5OFYxMi4yNUM0Ljk0OTk1IDEyLjU1MzcgNS4xOTYxOSAxMi44IDUuNDk5OTUgMTIuOEM1LjgwMzcxIDEyLjggNi4wNDk5NSAxMi41NTM3IDYuMDQ5OTUgMTIuMjVWMi43NDk5OFpNMTAuMDUgMi43NDk5OEMxMC4wNSAyLjQ0NjIzIDkuODAzNzEgMi4xOTk5OCA5LjQ5OTk1IDIuMTk5OThDOS4xOTYxOSAyLjE5OTk4IDguOTQ5OTUgMi40NDYyMyA4Ljk0OTk1IDIuNzQ5OThWMTIuMjVDOC45NDk5NSAxMi41NTM3IDkuMTk2MTkgMTIuOCA5LjQ5OTk1IDEyLjhDOS44MDM3MSAxMi44IDEwLjA1IDEyLjU1MzcgMTAuMDUgMTIuMjVWMi43NDk5OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEZuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMS44NTM2IDEuMTQ2NDVDMTEuNjU4MyAwLjk1MTE4NCAxMS4zNDE3IDAuOTUxMTg0IDExLjE0NjUgMS4xNDY0NUwzLjcxNDU1IDguNTc4MzZDMy42MjQ1OSA4LjY2ODMyIDMuNTUyNjMgOC43NzQ2MSAzLjUwMjUxIDguODkxNTVMMi4wNDA0NCAxMi4zMDNDMS45NTk5IDEyLjQ5MSAyLjAwMTg5IDEyLjcwOSAyLjE0NjQ2IDEyLjg1MzZDMi4yOTEwMyAxMi45OTgxIDIuNTA5MDUgMTMuMDQwMSAyLjY5Njk3IDEyLjk1OTZMNi4xMDg0NyAxMS40OTc1QzYuMjI1NCAxMS40NDc0IDYuMzMxNyAxMS4zNzU0IDYuNDIxNjYgMTEuMjg1NUwxMy44NTM2IDMuODUzNTVDMTQuMDQ4OCAzLjY1ODI5IDE0LjA0ODggMy4zNDE3MSAxMy44NTM2IDMuMTQ2NDVMMTEuODUzNiAxLjE0NjQ1Wk00LjQyMTY2IDkuMjg1NDdMMTEuNSAyLjIwNzExTDEyLjc5MjkgMy41TDUuNzE0NTUgMTAuNTc4NEw0LjIxOTI0IDExLjIxOTJMMy43ODA4MSAxMC43ODA4TDQuNDIxNjYgOS4yODU0N1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFVuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMi4xNDY0IDEuMTQ2NDVDMTIuMzQxNyAwLjk1MTE4NCAxMi42NTgzIDAuOTUxMTg0IDEyLjg1MzUgMS4xNDY0NUwxNC44NTM1IDMuMTQ2NDVDMTUuMDQ4OCAzLjM0MTcxIDE1LjA0ODggMy42NTgyOSAxNC44NTM1IDMuODUzNTVMMTAuOTEwOSA3Ljc5NjE4QzEwLjgzNDkgNy44NzIxOCAxMC43NDcxIDcuOTM1NDMgMTAuNjUxIDcuOTgzNUw2LjcyMzU5IDkuOTQ3MjFDNi41MzEwOSAxMC4wNDM1IDYuMjk4NjEgMTAuMDA1NyA2LjE0NjQzIDkuODUzNTVDNS45OTQyNSA5LjcwMTM3IDUuOTU2NTIgOS40Njg4OSA2LjA1Mjc3IDkuMjc2MzlMOC4wMTY0OCA1LjM0ODk3QzguMDY0NTUgNS4yNTI4MyA4LjEyNzggNS4xNjUwNyA4LjIwMzggNS4wODkwN0wxMi4xNDY0IDEuMTQ2NDVaTTEyLjUgMi4yMDcxMUw4LjkxMDkxIDUuNzk2MThMNy44NzI2NiA3Ljg3MjY3TDguMTI3MzEgOC4xMjczMkwxMC4yMDM4IDcuMDg5MDdMMTMuNzkyOSAzLjVMMTIuNSAyLjIwNzExWk05Ljk5OTk4IDJMOC45OTk5OCAzSDQuOUM0LjQ3MTcxIDMgNC4xODA1NiAzLjAwMDM5IDMuOTU1NTIgMy4wMTg3N0MzLjczNjMxIDMuMDM2NjggMy42MjQyMSAzLjA2OTE1IDMuNTQ2MDEgMy4xMDg5OUMzLjM1Nzg1IDMuMjA0ODcgMy4yMDQ4NyAzLjM1Nzg1IDMuMTA4OTkgMy41NDYwMUMzLjA2OTE1IDMuNjI0MjEgMy4wMzY2OSAzLjczNjMxIDMuMDE4NzggMy45NTU1MkMzLjAwMDM5IDQuMTgwNTYgMyA0LjQ3MTcxIDMgNC45VjExLjFDMyAxMS41MjgzIDMuMDAwMzkgMTEuODE5NCAzLjAxODc4IDEyLjA0NDVDMy4wMzY2OSAxMi4yNjM3IDMuMDY5MTUgMTIuMzc1OCAzLjEwODk5IDEyLjQ1NEMzLjIwNDg3IDEyLjY0MjIgMy4zNTc4NSAxMi43OTUxIDMuNTQ2MDEgMTIuODkxQzMuNjI0MjEgMTIuOTMwOSAzLjczNjMxIDEyLjk2MzMgMy45NTU1MiAxMi45ODEyQzQuMTgwNTYgMTIuOTk5NiA0LjQ3MTcxIDEzIDQuOSAxM0gxMS4xQzExLjUyODMgMTMgMTEuODE5NCAxMi45OTk2IDEyLjA0NDUgMTIuOTgxMkMxMi4yNjM3IDEyLjk2MzMgMTIuMzc1OCAxMi45MzA5IDEyLjQ1NCAxMi44OTFDMTIuNjQyMiAxMi43OTUxIDEyLjc5NTEgMTIuNjQyMiAxMi44OTEgMTIuNDU0QzEyLjkzMDkgMTIuMzc1OCAxMi45NjMzIDEyLjI2MzcgMTIuOTgxMiAxMi4wNDQ1QzEyLjk5OTYgMTEuODE5NCAxMyAxMS41MjgzIDEzIDExLjFWNi45OTk5OEwxNCA1Ljk5OTk4VjExLjFWMTEuMTIwN0MxNCAxMS41MjMxIDE0IDExLjg1NTMgMTMuOTc3OSAxMi4xMjU5QzEzLjk1NDkgMTIuNDA3IDEzLjkwNTcgMTIuNjY1MyAxMy43ODIgMTIuOTA4QzEzLjU5MDMgMTMuMjg0MyAxMy4yODQzIDEzLjU5MDMgMTIuOTA4IDEzLjc4MkMxMi42NjUzIDEzLjkwNTcgMTIuNDA3IDEzLjk1NDkgMTIuMTI1OSAxMy45Nzc5QzExLjg1NTMgMTQgMTEuNTIzMSAxNCAxMS4xMjA3IDE0SDExLjFINC45SDQuODc5MzRDNC40NzY4NiAxNCA0LjE0NDY4IDE0IDMuODc0MDkgMTMuOTc3OUMzLjU5MzA0IDEzLjk1NDkgMy4zMzQ2OSAxMy45MDU3IDMuMDkyMDIgMTMuNzgyQzIuNzE1NyAxMy41OTAzIDIuNDA5NzMgMTMuMjg0MyAyLjIxNzk5IDEyLjkwOEMyLjA5NDM0IDEyLjY2NTMgMi4wNDUwNiAxMi40MDcgMi4wMjIxIDEyLjEyNTlDMS45OTk5OSAxMS44NTUzIDEuOTk5OTkgMTEuNTIzMSAyIDExLjEyMDdWMTEuMTIwNlYxMS4xVjQuOVY0Ljg3OTM1VjQuODc5MzJWNC44NzkzMUMxLjk5OTk5IDQuNDc2ODUgMS45OTk5OSA0LjE0NDY4IDIuMDIyMSAzLjg3NDA5QzIuMDQ1MDYgMy41OTMwNCAyLjA5NDM0IDMuMzM0NjkgMi4yMTc5OSAzLjA5MjAyQzIuNDA5NzMgMi43MTU2OSAyLjcxNTcgMi40MDk3MyAzLjA5MjAyIDIuMjE3OTlDMy4zMzQ2OSAyLjA5NDM0IDMuNTkzMDQgMi4wNDUwNiAzLjg3NDA5IDIuMDIyMUM0LjE0NDY4IDEuOTk5OTkgNC40NzY4NSAxLjk5OTk5IDQuODc5MzIgMkg0Ljg3OTM1SDQuOUg5Ljk5OTk4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sV249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNSAwLjg3NUM1LjQ5Nzk3IDAuODc1IDMuODc1IDIuNDk3OTcgMy44NzUgNC41QzMuODc1IDYuMTUyODggNC45ODEyNCA3LjU0NzM4IDYuNDkzNzMgNy45ODM1MUM1LjI5OTcgOC4xMjkwMSA0LjI3NTU3IDguNTUxMzQgMy41MDQwNyA5LjMxMTY3QzIuNTIyMTYgMTAuMjc5NCAyLjAyNTAyIDExLjcyIDIuMDI1MDIgMTMuNTk5OUMyLjAyNTAyIDEzLjg2MjMgMi4yMzc2OSAxNC4wNzQ5IDIuNTAwMDIgMTQuMDc0OUMyLjc2MjM2IDE0LjA3NDkgMi45NzUwMiAxMy44NjIzIDIuOTc1MDIgMTMuNTk5OUMyLjk3NTAyIDExLjg3OTkgMy40Mjc4NiAxMC43MjA2IDQuMTcwOTEgOS45ODgzQzQuOTE1MzYgOS4yNTQ2MyA2LjAyNjc0IDguODc0OTkgNy40OTk5NSA4Ljg3NDk5QzguOTczMTcgOC44NzQ5OSAxMC4wODQ2IDkuMjU0NjMgMTAuODI5MSA5Ljk4ODMxQzExLjU3MjEgMTAuNzIwNiAxMi4wMjUgMTEuODc5OSAxMi4wMjUgMTMuNTk5OUMxMi4wMjUgMTMuODYyMyAxMi4yMzc2IDE0LjA3NDkgMTIuNSAxNC4wNzQ5QzEyLjc2MjMgMTQuMDc1IDEyLjk3NSAxMy44NjIzIDEyLjk3NSAxMy42QzEyLjk3NSAxMS43MiAxMi40Nzc4IDEwLjI3OTQgMTEuNDk1OSA5LjMxMTY2QzEwLjcyNDQgOC41NTEzNSA5LjcwMDI1IDguMTI5MDMgOC41MDYyNSA3Ljk4MzUyQzEwLjAxODcgNy41NDc0IDExLjEyNSA2LjE1Mjg5IDExLjEyNSA0LjVDMTEuMTI1IDIuNDk3OTcgOS41MDIwMyAwLjg3NSA3LjUgMC44NzVaTTQuODI1IDQuNUM0LjgyNSAzLjAyMjY0IDYuMDIyNjQgMS44MjUgNy41IDEuODI1QzguOTc3MzYgMS44MjUgMTAuMTc1IDMuMDIyNjQgMTAuMTc1IDQuNUMxMC4xNzUgNS45NzczNiA4Ljk3NzM2IDcuMTc1IDcuNSA3LjE3NUM2LjAyMjY0IDcuMTc1IDQuODI1IDUuOTc3MzYgNC44MjUgNC41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sem49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuODUwMDEgNy41MDA0M0MxLjg1MDAxIDQuMzc5NzUgNC4zNzk2MyAxLjg1MDAxIDcuNTAwMDEgMS44NTAwMUMxMC42MjA0IDEuODUwMDEgMTMuMTUgNC4zNzk3NSAxMy4xNSA3LjUwMDQzQzEzLjE1IDEwLjYyMTEgMTAuNjIwNCAxMy4xNTA5IDcuNTAwMDEgMTMuMTUwOUM0LjM3OTYzIDEzLjE1MDkgMS44NTAwMSAxMC42MjExIDEuODUwMDEgNy41MDA0M1pNNy41MDAwMSAwLjg1MDAwNkMzLjgyNzI4IDAuODUwMDA2IDAuODUwMDA2IDMuODI3NTMgMC44NTAwMDYgNy41MDA0M0MwLjg1MDAwNiAxMS4xNzMzIDMuODI3MjggMTQuMTUwOSA3LjUwMDAxIDE0LjE1MDlDMTEuMTcyNyAxNC4xNTA5IDE0LjE1IDExLjE3MzMgMTQuMTUgNy41MDA0M0MxNC4xNSAzLjgyNzUzIDExLjE3MjcgMC44NTAwMDYgNy41MDAwMSAwLjg1MDAwNlpNNy4wMDAwMSA4LjAwMDAxVjMuMTI4MTFDNy4xNjQxMSAzLjEwOTU0IDcuMzMwOTQgMy4xMDAwMSA3LjUwMDAxIDMuMTAwMDFDOS45MzAwNiAzLjEwMDAxIDExLjkgNS4wNzAxNCAxMS45IDcuNTAwNDNDMTEuOSA3LjY2OTM1IDExLjg5MDUgNy44MzYwNCAxMS44NzIgOC4wMDAwMUg3LjAwMDAxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sR249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMgNS41QzMgNy45ODMgNC45OTE2OSA5IDcgOVYxMi41QzcgMTIuNzc2MSA3LjIyMzg2IDEzIDcuNSAxM0M3Ljc3NjE0IDEzIDggMTIuNzc2MSA4IDEyLjVWOVYzLjFIOVYxMi41QzkgMTIuNzc2MSA5LjIyMzg2IDEzIDkuNSAxM0M5Ljc3NjE0IDEzIDEwIDEyLjc3NjEgMTAgMTIuNVYzLjFIMTEuNUMxMS44MDM4IDMuMSAxMi4wNSAyLjg1Mzc2IDEyLjA1IDIuNTVDMTIuMDUgMi4yNDYyNCAxMS44MDM4IDIgMTEuNSAySDkuNUg4SDcuNUg3QzQuOTkxNjkgMiAzIDMuMDE3IDMgNS41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEzLjUgMTMuOTVDMTMuNzQ4NSAxMy45NSAxMy45NSAxMy43NDg1IDEzLjk1IDEzLjVDMTMuOTUgMTMuMjUxNCAxMy43NDg1IDEzLjA1IDEzLjUgMTMuMDVMMS40OTk5NSAxMy4wNUMxLjI1MTQyIDEzLjA1IDEuMDQ5OTUgMTMuMjUxNCAxLjA0OTk1IDEzLjVDMS4wNDk5NSAxMy43NDg1IDEuMjUxNDIgMTMuOTUgMS40OTk5NSAxMy45NUwxMy41IDEzLjk1Wk0xMS4wNjgxIDcuNTY4M0MxMS4yNDM5IDcuMzkyNTcgMTEuMjQzOSA3LjEwNzY0IDExLjA2ODEgNi45MzE5MUMxMC44OTI0IDYuNzU2MTcgMTAuNjA3NSA2Ljc1NjE3IDEwLjQzMTcgNi45MzE5MUw3Ljk0OTkzIDkuNDEzNzFMNy45NDk5MyAxLjQ5OTk4QzcuOTQ5OTMgMS4yNTE0NiA3Ljc0ODQ2IDEuMDQ5OTggNy40OTk5MyAxLjA0OTk4QzcuMjUxNCAxLjA0OTk4IDcuMDQ5OTMgMS4yNTE0NiA3LjA0OTkzIDEuNDk5OThMNy4wNDk5MyA5LjQxMzcxTDQuNTY4MTMgNi45MzE5MUM0LjM5MjM5IDYuNzU2MTcgNC4xMDc0NiA2Ljc1NjE3IDMuOTMxNzMgNi45MzE5MUMzLjc1NTk5IDcuMTA3NjQgMy43NTU5OSA3LjM5MjU3IDMuOTMxNzMgNy41NjgzTDcuMTgxNzMgMTAuODE4M0M3LjM1NzQ2IDEwLjk5NCA3LjY0MjM5IDEwLjk5NCA3LjgxODEyIDEwLjgxODNMMTEuMDY4MSA3LjU2ODNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxZbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi4wNTAwNSAxMy41QzIuMDUwMDUgMTMuNzQ4NSAyLjI1MTUyIDEzLjk1IDIuNTAwMDUgMTMuOTVDMi43NDg1OCAxMy45NSAyLjk1MDA1IDEzLjc0ODUgMi45NTAwNSAxMy41TDIuOTUwMDUgMS40OTk5NUMyLjk1MDA1IDEuMjUxNDIgMi43NDg1OCAxLjA0OTk1IDIuNTAwMDUgMS4wNDk5NUMyLjI1MTUyIDEuMDQ5OTUgMi4wNTAwNSAxLjI1MTQyIDIuMDUwMDUgMS40OTk5NUwyLjA1MDA1IDEzLjVaTTguNDMxNyAxMS4wNjgxQzguNjA3NDMgMTEuMjQzOSA4Ljg5MjM2IDExLjI0MzkgOS4wNjgwOSAxMS4wNjgxQzkuMjQzODMgMTAuODkyNCA5LjI0MzgzIDEwLjYwNzUgOS4wNjgwOSAxMC40MzE3TDYuNTg2MjkgNy45NDk5M0wxNC41IDcuOTQ5OTNDMTQuNzQ4NSA3Ljk0OTkzIDE0Ljk1IDcuNzQ4NDYgMTQuOTUgNy40OTk5M0MxNC45NSA3LjI1MTQgMTQuNzQ4NSA3LjA0OTkzIDE0LjUgNy4wNDk5M0w2LjU4NjI5IDcuMDQ5OTNMOS4wNjgwOSA0LjU2ODEzQzkuMjQzODMgNC4zOTIzOSA5LjI0MzgzIDQuMTA3NDYgOS4wNjgwOSAzLjkzMTczQzguODkyMzYgMy43NTU5OSA4LjYwNzQzIDMuNzU1OTkgOC40MzE3IDMuOTMxNzNMNS4xODE3IDcuMTgxNzNDNS4wMDU5NiA3LjM1NzQ2IDUuMDA1OTYgNy42NDIzOSA1LjE4MTcgNy44MTgxMkw4LjQzMTcgMTEuMDY4MVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEtuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMi45NSAxLjUwMDA1QzEyLjk1IDEuMjUxNTIgMTIuNzQ4NSAxLjA1MDA1IDEyLjUgMS4wNTAwNUMxMi4yNTE0IDEuMDUwMDUgMTIuMDUgMS4yNTE1MiAxMi4wNSAxLjUwMDA1TDEyLjA1IDEzLjVDMTIuMDUgMTMuNzQ4NiAxMi4yNTE0IDEzLjk1IDEyLjUgMTMuOTVDMTIuNzQ4NSAxMy45NSAxMi45NSAxMy43NDg2IDEyLjk1IDEzLjVMMTIuOTUgMS41MDAwNVpNNi41NjgzIDMuOTMxODhDNi4zOTI1NyAzLjc1NjE0IDYuMTA3NjQgMy43NTYxNCA1LjkzMTkxIDMuOTMxODhDNS43NTYxNyA0LjEwNzYxIDUuNzU2MTcgNC4zOTI1NCA1LjkzMTkxIDQuNTY4MjdMOC40MTM3MSA3LjA1MDA3TDAuNDk5OTg0IDcuMDUwMDdDMC4yNTE0NTYgNy4wNTAwNyAwLjA0OTk4NDcgNy4yNTE1NSAwLjA0OTk4NDcgNy41MDAwN0MwLjA0OTk4NDYgNy43NDg2IDAuMjUxNDU3IDcuOTUwMDcgMC40OTk5ODQgNy45NTAwN0w4LjQxMzcxIDcuOTUwMDdMNS45MzE5MSAxMC40MzE5QzUuNzU2MTcgMTAuNjA3NiA1Ljc1NjE3IDEwLjg5MjUgNS45MzE5MSAxMS4wNjgzQzYuMTA3NjQgMTEuMjQ0IDYuMzkyNTcgMTEuMjQ0IDYuNTY4MzEgMTEuMDY4M0w5LjgxODMgNy44MTgyN0M5Ljk5NDA0IDcuNjQyNTQgOS45OTQwNCA3LjM1NzYxIDkuODE4MyA3LjE4MTg4TDYuNTY4MyAzLjkzMTg4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sWG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuNTAwMDUgMS4wNTAwNUMxLjI1MTUyIDEuMDUwMDUgMS4wNTAwNSAxLjI1MTUyIDEuMDUwMDUgMS41MDAwNUMxLjA1MDA1IDEuNzQ4NTggMS4yNTE1MiAxLjk1MDA1IDEuNTAwMDUgMS45NTAwNUwxMy41IDEuOTUwMDVDMTMuNzQ4NiAxLjk1MDA1IDEzLjk1IDEuNzQ4NTggMTMuOTUgMS41MDAwNUMxMy45NSAxLjI1MTUyIDEzLjc0ODYgMS4wNTAwNSAxMy41IDEuMDUwMDVIMS41MDAwNVpNMy45MzE4OCA3LjQzMTY5QzMuNzU2MTQgNy42MDc0MyAzLjc1NjE0IDcuODkyMzYgMy45MzE4OCA4LjA2ODA5QzQuMTA3NjEgOC4yNDM4MyA0LjM5MjU0IDguMjQzODMgNC41NjgyNyA4LjA2ODA5TDcuMDUwMDcgNS41ODYyOVYxMy41QzcuMDUwMDcgMTMuNzQ4NSA3LjI1MTU1IDEzLjk1IDcuNTAwMDcgMTMuOTVDNy43NDg2IDEzLjk1IDcuOTUwMDcgMTMuNzQ4NSA3Ljk1MDA3IDEzLjVMNy45NTAwNyA1LjU4NjI5TDEwLjQzMTkgOC4wNjgwOUMxMC42MDc2IDguMjQzODMgMTAuODkyNSA4LjI0MzgzIDExLjA2ODMgOC4wNjgwOUMxMS4yNDQgNy44OTIzNSAxMS4yNDQgNy42MDc0MyAxMS4wNjgzIDcuNDMxNjlMNy44MTgyNyA0LjE4MTY5QzcuNjQyNTQgNC4wMDU5NiA3LjM1NzYxIDQuMDA1OTYgNy4xODE4OCA0LjE4MTY5TDMuOTMxODggNy40MzE2OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEpuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjI0MTgyIDIuMzIxODFDMy4zOTE5IDIuMjMxMzIgMy41Nzg0IDIuMjI2MDEgMy43MzMzOCAyLjMwNzgxTDEyLjczMzQgNy4wNTc4MUMxMi44OTc0IDcuMTQ0MzYgMTMgNy4zMTQ1NyAxMyA3LjVDMTMgNy42ODU0MyAxMi44OTc0IDcuODU1NjQgMTIuNzMzNCA3Ljk0MjE5TDMuNzMzMzggMTIuNjkyMkMzLjU3ODQgMTIuNzc0IDMuMzkxOSAxMi43Njg3IDMuMjQxODIgMTIuNjc4MkMzLjA5MTc1IDEyLjU4NzcgMyAxMi40MjUyIDMgMTIuMjVWMi43NUMzIDIuNTc0NzYgMy4wOTE3NSAyLjQxMjMgMy4yNDE4MiAyLjMyMTgxWk00IDMuNTc5MjVWMTEuNDIwN0wxMS40Mjg4IDcuNUw0IDMuNTc5MjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxRbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOCAyLjc1QzggMi40NzM4NiA3Ljc3NjE0IDIuMjUgNy41IDIuMjVDNy4yMjM4NiAyLjI1IDcgMi40NzM4NiA3IDIuNzVWN0gyLjc1QzIuNDczODYgNyAyLjI1IDcuMjIzODYgMi4yNSA3LjVDMi4yNSA3Ljc3NjE0IDIuNDczODYgOCAyLjc1IDhIN1YxMi4yNUM3IDEyLjUyNjEgNy4yMjM4NiAxMi43NSA3LjUgMTIuNzVDNy43NzYxNCAxMi43NSA4IDEyLjUyNjEgOCAxMi4yNVY4SDEyLjI1QzEyLjUyNjEgOCAxMi43NSA3Ljc3NjE0IDEyLjc1IDcuNUMxMi43NSA3LjIyMzg2IDEyLjUyNjEgNyAxMi4yNSA3SDhWMi43NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGVyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTkxIDAuODc2ODkyQzMuODQyMjIgMC44NzY4OTIgMC44NzcwNzUgMy44NDIwNCAwLjg3NzA3NSA3LjQ5OTcyQzAuODc3MDc1IDExLjE1NzQgMy44NDIyMiAxNC4xMjI2IDcuNDk5OTEgMTQuMTIyNkMxMS4xNTc2IDE0LjEyMjYgMTQuMTIyNyAxMS4xNTc0IDE0LjEyMjcgNy40OTk3MkMxNC4xMjI3IDMuODQyMDQgMTEuMTU3NiAwLjg3Njg5MiA3LjQ5OTkxIDAuODc2ODkyWk0xLjgyNzA3IDcuNDk5NzJDMS44MjcwNyA0LjM2NjcxIDQuMzY2ODkgMS44MjY4OSA3LjQ5OTkxIDEuODI2ODlDMTAuNjMyOSAxLjgyNjg5IDEzLjE3MjcgNC4zNjY3MSAxMy4xNzI3IDcuNDk5NzJDMTMuMTcyNyAxMC42MzI3IDEwLjYzMjkgMTMuMTcyNiA3LjQ5OTkxIDEzLjE3MjZDNC4zNjY4OSAxMy4xNzI2IDEuODI3MDcgMTAuNjMyNyAxLjgyNzA3IDcuNDk5NzJaTTcuNTAwMDMgNEM3Ljc3NjE3IDQgOC4wMDAwMyA0LjIyMzg2IDguMDAwMDMgNC41VjdIMTAuNUMxMC43NzYyIDcgMTEgNy4yMjM4NiAxMSA3LjVDMTEgNy43NzYxNCAxMC43NzYyIDggMTAuNSA4SDguMDAwMDNWMTAuNUM4LjAwMDAzIDEwLjc3NjEgNy43NzYxNyAxMSA3LjUwMDAzIDExQzcuMjIzODkgMTEgNy4wMDAwMyAxMC43NzYxIDcuMDAwMDMgMTAuNVY4SDQuNTAwMDNDNC4yMjM4OSA4IDQuMDAwMDMgNy43NzYxNCA0LjAwMDAzIDcuNUM0LjAwMDAzIDcuMjIzODYgNC4yMjM4OSA3IDQuNTAwMDMgN0g3LjAwMDAzVjQuNUM3LjAwMDAzIDQuMjIzODYgNy4yMjM4OSA0IDcuNTAwMDMgNFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHRyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjA3NTA1IDQuMTAwMDFDNS4wNzUwNSAyLjkxMTAzIDYuMjU3MjcgMS45MjUwMiA3LjUwMDA1IDEuOTI1MDJDOC43NDI4MyAxLjkyNTAyIDkuOTI1MDUgMi45MTEwMyA5LjkyNTA1IDQuMTAwMDFDOS45MjUwNSA1LjE5ODYxIDkuMzY3ODIgNS43MTQzNiA4LjYxODU0IDYuMzc4ODRMOC41ODc1NyA2LjQwNjNDNy44NDQ4MSA3LjA2NDY3IDYuOTI1MDUgNy44Nzk5NSA2LjkyNTA1IDkuNUM2LjkyNTA1IDkuODE3NTcgNy4xODI0OCAxMC4wNzUgNy41MDAwNSAxMC4wNzVDNy44MTc2MSAxMC4wNzUgOC4wNzUwNSA5LjgxNzU3IDguMDc1MDUgOS41QzguMDc1MDUgOC40MTUxNyA4LjYyOTQ1IDcuOTA2MjMgOS4zODE1NiA3LjIzOTI1TDkuNDAyMzggNy4yMjA3OUMxMC4xNDk2IDYuNTU4MjkgMTEuMDc1IDUuNzM3NzUgMTEuMDc1IDQuMTAwMDFDMTEuMDc1IDIuMTI3NTcgOS4yMTg2OSAwLjc3NTAyNCA3LjUwMDA1IDAuNzc1MDI0QzUuNzgxNCAwLjc3NTAyNCAzLjkyNTA1IDIuMTI3NTcgMy45MjUwNSA0LjEwMDAxQzMuOTI1MDUgNC40MTc1OCA0LjE4MjQ5IDQuNjc1MDEgNC41MDAwNSA0LjY3NTAxQzQuODE3NjEgNC42NzUwMSA1LjA3NTA1IDQuNDE3NTggNS4wNzUwNSA0LjEwMDAxWk03LjUwMDA1IDEzLjM1NzVDNy45ODMzIDEzLjM1NzUgOC4zNzUwNSAxMi45NjU3IDguMzc1MDUgMTIuNDgyNUM4LjM3NTA1IDExLjk5OTIgNy45ODMzIDExLjYwNzUgNy41MDAwNSAxMS42MDc1QzcuMDE2OCAxMS42MDc1IDYuNjI1MDUgMTEuOTk5MiA2LjYyNTA1IDEyLjQ4MjVDNi42MjUwNSAxMi45NjU3IDcuMDE2OCAxMy4zNTc1IDcuNTAwMDUgMTMuMzU3NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG5yPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wLjg3NzA3NSA3LjQ5OTcyQzAuODc3MDc1IDMuODQyMDQgMy44NDIyMiAwLjg3Njg5MiA3LjQ5OTkxIDAuODc2ODkyQzExLjE1NzYgMC44NzY4OTIgMTQuMTIyNyAzLjg0MjA0IDE0LjEyMjcgNy40OTk3MkMxNC4xMjI3IDExLjE1NzQgMTEuMTU3NiAxNC4xMjI2IDcuNDk5OTEgMTQuMTIyNkMzLjg0MjIyIDE0LjEyMjYgMC44NzcwNzUgMTEuMTU3NCAwLjg3NzA3NSA3LjQ5OTcyWk03LjQ5OTkxIDEuODI2ODlDNC4zNjY4OSAxLjgyNjg5IDEuODI3MDggNC4zNjY3MSAxLjgyNzA4IDcuNDk5NzJDMS44MjcwOCAxMC42MzI3IDQuMzY2ODkgMTMuMTcyNiA3LjQ5OTkxIDEzLjE3MjZDMTAuNjMyOSAxMy4xNzI2IDEzLjE3MjcgMTAuNjMyNyAxMy4xNzI3IDcuNDk5NzJDMTMuMTcyNyA0LjM2NjcxIDEwLjYzMjkgMS44MjY4OSA3LjQ5OTkxIDEuODI2ODlaTTguMjQ5OTMgMTAuNUM4LjI0OTkzIDEwLjkxNDIgNy45MTQxNCAxMS4yNSA3LjQ5OTkzIDExLjI1QzcuMDg1NzEgMTEuMjUgNi43NDk5MyAxMC45MTQyIDYuNzQ5OTMgMTAuNUM2Ljc0OTkzIDEwLjA4NTggNy4wODU3MSA5Ljc1IDcuNDk5OTMgOS43NUM3LjkxNDE0IDkuNzUgOC4yNDk5MyAxMC4wODU4IDguMjQ5OTMgMTAuNVpNNi4wNTAwMyA2LjI1QzYuMDUwMDMgNS41NzIxMSA2LjYzNTExIDQuOTI1IDcuNTAwMDMgNC45MjVDOC4zNjQ5NiA0LjkyNSA4Ljk1MDAzIDUuNTcyMTEgOC45NTAwMyA2LjI1QzguOTUwMDMgNi43NDExOCA4LjY4MDAyIDYuOTkyMTIgOC4yMTQ0NyA3LjI3NDk0QzguMTYyNTEgNy4zMDY1MSA4LjEwMjU4IDcuMzQxMzEgOC4wMzg0NyA3LjM3ODU0TDguMDM4NDEgNy4zNzg1OEM3Ljg1NTIxIDcuNDg0OTcgNy42Mzc4OCA3LjYxMTE5IDcuNDc0NDkgNy43Mzg0OUM3LjIzMjE0IDcuOTI3MzIgNi45NTAwMyA4LjIzMTk4IDYuOTUwMDMgOC43QzYuOTUwMDQgOS4wMDM3NiA3LjE5NjI4IDkuMjUgNy41MDAwNCA5LjI1QzcuODAyNCA5LjI1IDguMDQ3NzggOS4wMDYwMSA4LjA1MDAyIDguNzA0MTdMOC4wNTA1NiA4LjcwMzNDOC4wNTkyNCA4LjY4OTYgOC4wODQ5MyA4LjY1NzM1IDguMTUwNTggOC42MDYyQzguMjUyMDcgOC41MjcxMiA4LjM2NTA4IDguNDYxNjMgOC41MTU2NyA4LjM3NDM2TDguNTE1NzEgOC4zNzQzM0M4LjU5NDIyIDguMzI4ODMgOC42ODI5NiA4LjI3NzQxIDguNzg1NTkgOC4yMTUwNkM5LjMyMDA0IDcuODkwMzggMTAuMDUgNy4zNTM4MiAxMC4wNSA2LjI1QzEwLjA1IDQuOTI3ODkgOC45MzUxMSAzLjgyNSA3LjUwMDAzIDMuODI1QzYuMDY0OTYgMy44MjUgNC45NTAwMyA0LjkyNzg5IDQuOTUwMDMgNi4yNUM0Ljk1MDAzIDYuNTUzNzYgNS4xOTYyOCA2LjggNS41MDAwMyA2LjhDNS44MDM3OSA2LjggNi4wNTAwMyA2LjU1Mzc2IDYuMDUwMDMgNi4yNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHJyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk05LjQyNTAzIDMuNDQxMzZDMTAuMDU2MSAzLjIzNjU0IDEwLjc4MzcgMy4yNDAyIDExLjM3OTIgMy41NDYyM0MxMi43NTMyIDQuMjUyMjQgMTMuMzQ3NyA2LjA3MTkxIDEyLjc5NDYgOEMxMi41NDY1IDguODY0OSAxMi4xMTAyIDkuNzA0NzIgMTEuMTg2MSAxMC41NTI0QzEwLjI2MiAxMS40IDguOTgwMzQgMTEuOSA4LjM4NTcxIDExLjlDOC4xNzI2OSAxMS45IDggMTEuNzMyMSA4IDExLjUyNUM4IDExLjMxNzkgOC4xNzY0NCAxMS4xNSA4LjM4NTcxIDExLjE1QzkuMDY0OTcgMTEuMTUgOS42NzE4OSAxMC43ODA0IDEwLjM5MDYgMTAuMjM2QzEwLjk0MDYgOS44MTkzIDExLjM3MDEgOS4yODYzMyAxMS42MDggOC44MjE5MUMxMi4wNjI4IDcuOTMzNjcgMTIuMDc4MiA2LjY4MTc0IDExLjM0MzMgNi4zNDkwMUMxMC45OTA0IDYuNzM0NTUgMTAuNTI5NSA2Ljk1OTQ2IDkuOTc3MjUgNi45NTk0NkM4Ljc3NzMgNi45NTk0NiA4LjA3MDEgNS45OTQxMiA4LjEwMDUxIDUuMTIwMDlDOC4xMjk1NyA0LjI4NDc0IDguNjYwMzIgMy42ODk1NCA5LjQyNTAzIDMuNDQxMzZaTTMuNDI1MDMgMy40NDEzNkM0LjA1NjE0IDMuMjM2NTQgNC43ODM2NiAzLjI0MDIgNS4zNzkyMyAzLjU0NjIzQzYuNzUzMiA0LjI1MjI0IDcuMzQ3NjYgNi4wNzE5MSA2Ljc5NDYyIDhDNi41NDY1NCA4Ljg2NDkgNi4xMTAxOSA5LjcwNDcyIDUuMTg2MSAxMC41NTI0QzQuMjYyMDEgMTEuNCAyLjk4MDM0IDExLjkgMi4zODU3MSAxMS45QzIuMTcyNjkgMTEuOSAyIDExLjczMjEgMiAxMS41MjVDMiAxMS4zMTc5IDIuMTc2NDQgMTEuMTUgMi4zODU3MSAxMS4xNUMzLjA2NDk3IDExLjE1IDMuNjcxODkgMTAuNzgwNCA0LjM5MDU4IDEwLjIzNkM0Ljk0MDY1IDkuODE5MyA1LjM3MDE0IDkuMjg2MzMgNS42MDc5NyA4LjgyMTkxQzYuMDYyODIgNy45MzM2NyA2LjA3ODIxIDYuNjgxNzQgNS4zNDMzIDYuMzQ5MDFDNC45OTAzNyA2LjczNDU1IDQuNTI5NDggNi45NTk0NiAzLjk3NzI1IDYuOTU5NDZDMi43NzczIDYuOTU5NDYgMi4wNzAxIDUuOTk0MTIgMi4xMDA1MSA1LjEyMDA5QzIuMTI5NTcgNC4yODQ3NCAyLjY2MDMyIDMuNjg5NTQgMy40MjUwMyAzLjQ0MTM2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sb3I9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5ODUgMC44NzcwNDVDMy44NDIxNiAwLjg3NzA0NSAwLjg3NzAxNCAzLjg0MjE5IDAuODc3MDE0IDcuNDk5ODhDMC44NzcwMTQgMTEuMTU3NSAzLjg0MjE2IDE0LjEyMjcgNy40OTk4NSAxNC4xMjI3QzExLjE1NzUgMTQuMTIyNyAxNC4xMjI3IDExLjE1NzUgMTQuMTIyNyA3LjQ5OTg4QzE0LjEyMjcgMy44NDIxOSAxMS4xNTc1IDAuODc3MDQ1IDcuNDk5ODUgMC44NzcwNDVaTTEuODI3MDEgNy40OTk4OEMxLjgyNzAxIDQuMzY2ODYgNC4zNjY4MyAxLjgyNzA0IDcuNDk5ODUgMS44MjcwNEMxMC42MzI4IDEuODI3MDQgMTMuMTcyNyA0LjM2Njg2IDEzLjE3MjcgNy40OTk4OEMxMy4xNzI3IDEwLjYzMjkgMTAuNjMyOCAxMy4xNzI3IDcuNDk5ODUgMTMuMTcyN0M0LjM2NjgzIDEzLjE3MjcgMS44MjcwMSAxMC42MzI5IDEuODI3MDEgNy40OTk4OFpNNy40OTk5OSA5LjQ5OTk5QzguNjA0NTYgOS40OTk5OSA5LjQ5OTk5IDguNjA0NTYgOS40OTk5OSA3LjQ5OTk5QzkuNDk5OTkgNi4zOTU0MiA4LjYwNDU2IDUuNDk5OTkgNy40OTk5OSA1LjQ5OTk5QzYuMzk1NDIgNS40OTk5OSA1LjQ5OTk5IDYuMzk1NDIgNS40OTk5OSA3LjQ5OTk5QzUuNDk5OTkgOC42MDQ1NiA2LjM5NTQyIDkuNDk5OTkgNy40OTk5OSA5LjQ5OTk5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0saXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuMiAxSDQuMTc3NDFINC4xNzc0QzMuODY5MzYgMC45OTk5ODggMy42MDM2OCAwLjk5OTk3OCAzLjM4NjA5IDEuMDIwNjdDMy4xNTU3NiAxLjA0MjU3IDIuOTI4MjUgMS4wOTExMyAyLjcxNjI1IDEuMjIxMDRDMi41MTQ0MiAxLjM0NDcyIDIuMzQ0NzMgMS41MTQ0MiAyLjIyMTA0IDEuNzE2MjVDMi4wOTExMyAxLjkyODI1IDIuMDQyNTcgMi4xNTU3NiAyLjAyMDY3IDIuMzg2MDlDMS45OTk5OCAyLjYwMzY3IDEuOTk5OTkgMi44NjkzNSAyIDMuMTc3MzhWMy4xNzc0VjMuMlYxMS44VjExLjgyMjZWMTEuODIyNkMxLjk5OTk5IDEyLjEzMDcgMS45OTk5OCAxMi4zOTYzIDIuMDIwNjcgMTIuNjEzOUMyLjA0MjU3IDEyLjg0NDIgMi4wOTExMyAxMy4wNzE3IDIuMjIxMDQgMTMuMjgzN0MyLjM0NDczIDEzLjQ4NTYgMi41MTQ0MiAxMy42NTUzIDIuNzE2MjUgMTMuNzc5QzIuOTI4MjUgMTMuOTA4OSAzLjE1NTc2IDEzLjk1NzQgMy4zODYwOSAxMy45NzkzQzMuNjAzNjggMTQgMy44NjkzNyAxNCA0LjE3NzQxIDE0SDQuMkgxMC44SDEwLjgyMjZDMTEuMTMwNiAxNCAxMS4zOTYzIDE0IDExLjYxMzkgMTMuOTc5M0MxMS44NDQyIDEzLjk1NzQgMTIuMDcxNyAxMy45MDg5IDEyLjI4MzcgMTMuNzc5QzEyLjQ4NTYgMTMuNjU1MyAxMi42NTUzIDEzLjQ4NTYgMTIuNzc5IDEzLjI4MzdDMTIuOTA4OSAxMy4wNzE3IDEyLjk1NzQgMTIuODQ0MiAxMi45NzkzIDEyLjYxMzlDMTMgMTIuMzk2MyAxMyAxMi4xMzA2IDEzIDExLjgyMjZWMTEuOFYzLjJWMy4xNzc0MUMxMyAyLjg2OTM2IDEzIDIuNjAzNjggMTIuOTc5MyAyLjM4NjA5QzEyLjk1NzQgMi4xNTU3NiAxMi45MDg5IDEuOTI4MjUgMTIuNzc5IDEuNzE2MjVDMTIuNjU1MyAxLjUxNDQyIDEyLjQ4NTYgMS4zNDQ3MiAxMi4yODM3IDEuMjIxMDRDMTIuMDcxNyAxLjA5MTEzIDExLjg0NDIgMS4wNDI1NyAxMS42MTM5IDEuMDIwNjdDMTEuMzk2MyAwLjk5OTk3OCAxMS4xMzA2IDAuOTk5OTg4IDEwLjgyMjYgMUgxMC44SDQuMlpNMy4yMzg3NSAyLjA3MzY4QzMuMjY3MjIgMi4wNTYyMyAzLjMyMzYyIDIuMDMxMTIgMy40ODA3NSAyLjAxNjE4QzMuNjQ1MzIgMi4wMDA1MyAzLjg2Mjk4IDIgNC4yIDJIMTAuOEMxMS4xMzcgMiAxMS4zNTQ3IDIuMDAwNTMgMTEuNTE5MyAyLjAxNjE4QzExLjY3NjQgMi4wMzExMiAxMS43MzI4IDIuMDU2MjMgMTEuNzYxMyAyLjA3MzY4QzExLjgyODUgMi4xMTQ5MSAxMS44ODUxIDIuMTcxNDcgMTEuOTI2MyAyLjIzODc1QzExLjk0MzggMi4yNjcyMiAxMS45Njg5IDIuMzIzNjIgMTEuOTgzOCAyLjQ4MDc1QzExLjk5OTUgMi42NDUzMiAxMiAyLjg2Mjk4IDEyIDMuMlYxMS44QzEyIDEyLjEzNyAxMS45OTk1IDEyLjM1NDcgMTEuOTgzOCAxMi41MTkzQzExLjk2ODkgMTIuNjc2NCAxMS45NDM4IDEyLjczMjggMTEuOTI2MyAxMi43NjEzQzExLjg4NTEgMTIuODI4NSAxMS44Mjg1IDEyLjg4NTEgMTEuNzYxMyAxMi45MjYzQzExLjczMjggMTIuOTQzOCAxMS42NzY0IDEyLjk2ODkgMTEuNTE5MyAxMi45ODM4QzExLjM1NDcgMTIuOTk5NSAxMS4xMzcgMTMgMTAuOCAxM0g0LjJDMy44NjI5OCAxMyAzLjY0NTMyIDEyLjk5OTUgMy40ODA3NSAxMi45ODM4QzMuMzIzNjIgMTIuOTY4OSAzLjI2NzIyIDEyLjk0MzggMy4yMzg3NSAxMi45MjYzQzMuMTcxNDcgMTIuODg1MSAzLjExNDkxIDEyLjgyODUgMy4wNzM2OCAxMi43NjEzQzMuMDU2MjQgMTIuNzMyOCAzLjAzMTEyIDEyLjY3NjQgMy4wMTYxOCAxMi41MTkzQzMuMDAwNTMgMTIuMzU0NyAzIDEyLjEzNyAzIDExLjhWMy4yQzMgMi44NjI5OCAzLjAwMDUzIDIuNjQ1MzIgMy4wMTYxOCAyLjQ4MDc1QzMuMDMxMTIgMi4zMjM2MiAzLjA1NjI0IDIuMjY3MjIgMy4wNzM2OCAyLjIzODc1QzMuMTE0OTEgMi4xNzE0NyAzLjE3MTQ3IDIuMTE0OTEgMy4yMzg3NSAyLjA3MzY4Wk01IDEwQzQuNzIzODYgMTAgNC41IDEwLjIyMzkgNC41IDEwLjVDNC41IDEwLjc3NjEgNC43MjM4NiAxMSA1IDExSDhDOC4yNzYxNCAxMSA4LjUgMTAuNzc2MSA4LjUgMTAuNUM4LjUgMTAuMjIzOSA4LjI3NjE0IDEwIDggMTBINVpNNC41IDcuNUM0LjUgNy4yMjM4NiA0LjcyMzg2IDcgNSA3SDEwQzEwLjI3NjEgNyAxMC41IDcuMjIzODYgMTAuNSA3LjVDMTAuNSA3Ljc3NjE0IDEwLjI3NjEgOCAxMCA4SDVDNC43MjM4NiA4IDQuNSA3Ljc3NjE0IDQuNSA3LjVaTTUgNEM0LjcyMzg2IDQgNC41IDQuMjIzODYgNC41IDQuNUM0LjUgNC43NzYxNCA0LjcyMzg2IDUgNSA1SDEwQzEwLjI3NjEgNSAxMC41IDQuNzc2MTQgMTAuNSA0LjVDMTAuNSA0LjIyMzg2IDEwLjI3NjEgNCAxMCA0SDVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxhcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS44NDk5OCA3LjQ5OTk4QzEuODQ5OTggNC42NjQ1OCA0LjA1OTc5IDEuODQ5OTggNy40OTk5OCAxLjg0OTk4QzEwLjI3ODMgMS44NDk5OCAxMS42NTE1IDMuOTA2NCAxMi4yMzY3IDVIMTAuNUMxMC4yMjM5IDUgMTAgNS4yMjM4NiAxMCA1LjVDMTAgNS43NzYxNCAxMC4yMjM5IDYgMTAuNSA2SDEzLjVDMTMuNzc2MSA2IDE0IDUuNzc2MTQgMTQgNS41VjIuNUMxNCAyLjIyMzg2IDEzLjc3NjEgMiAxMy41IDJDMTMuMjIzOSAyIDEzIDIuMjIzODYgMTMgMi41VjQuMzEzMThDMTIuMjk1NSAzLjA3MTI2IDEwLjY2NTkgMC44NDk5NzYgNy40OTk5OCAwLjg0OTk3NkMzLjQzNzE2IDAuODQ5OTc2IDAuODQ5OTc2IDQuMTg1MzcgMC44NDk5NzYgNy40OTk5OEMwLjg0OTk3NiAxMC44MTQ2IDMuNDM3MTYgMTQuMTUgNy40OTk5OCAxNC4xNUM5LjQ0MzgyIDE0LjE1IDExLjA2MjIgMTMuMzgwOCAxMi4yMTQ1IDEyLjIwODRDMTIuODMxNSAxMS41ODA2IDEzLjMxMzMgMTAuODM5IDEzLjY0MTggMTAuMDQwN0MxMy43NDY5IDkuNzg1MzYgMTMuNjI1MSA5LjQ5MzE1IDEzLjM2OTggOS4zODgwNkMxMy4xMTQ0IDkuMjgyOTYgMTIuODIyMiA5LjQwNDc4IDEyLjcxNzEgOS42NjAxNEMxMi40MzYzIDEwLjM0MjUgMTIuMDI1MSAxMC45NzQ1IDExLjUwMTMgMTEuNTA3NEMxMC41Mjk1IDEyLjQ5NjMgOS4xNjUwNCAxMy4xNSA3LjQ5OTk4IDEzLjE1QzQuMDU5NzkgMTMuMTUgMS44NDk5OCAxMC4zMzU0IDEuODQ5OTggNy40OTk5OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGxyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00Ljg1MzU1IDIuMTQ2NDVDNS4wNDg4MiAyLjM0MTcxIDUuMDQ4ODIgMi42NTgyOSA0Ljg1MzU1IDIuODUzNTVMMy43MDcxMSA0SDlDMTEuNDg1MyA0IDEzLjUgNi4wMTQ3MiAxMy41IDguNUMxMy41IDEwLjk4NTMgMTEuNDg1MyAxMyA5IDEzSDVDNC43MjM4NiAxMyA0LjUgMTIuNzc2MSA0LjUgMTIuNUM0LjUgMTIuMjIzOSA0LjcyMzg2IDEyIDUgMTJIOUMxMC45MzMgMTIgMTIuNSAxMC40MzMgMTIuNSA4LjVDMTIuNSA2LjU2NyAxMC45MzMgNSA5IDVIMy43MDcxMUw0Ljg1MzU1IDYuMTQ2NDVDNS4wNDg4MiA2LjM0MTcxIDUuMDQ4ODIgNi42NTgyOSA0Ljg1MzU1IDYuODUzNTVDNC42NTgyOSA3LjA0ODgyIDQuMzQxNzEgNy4wNDg4MiA0LjE0NjQ1IDYuODUzNTVMMi4xNDY0NSA0Ljg1MzU1QzEuOTUxMTggNC42NTgyOSAxLjk1MTE4IDQuMzQxNzEgMi4xNDY0NSA0LjE0NjQ1TDQuMTQ2NDUgMi4xNDY0NUM0LjM0MTcxIDEuOTUxMTggNC42NTgyOSAxLjk1MTE4IDQuODUzNTUgMi4xNDY0NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHNyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjA0OTk1IDIuNzQ5OTVDMy4wNDk5NSAyLjQ0NjE5IDIuODAzNzEgMi4xOTk5NSAyLjQ5OTk1IDIuMTk5OTVDMi4xOTYxOSAyLjE5OTk1IDEuOTQ5OTUgMi40NDYxOSAxLjk0OTk1IDIuNzQ5OTVWMTIuMjVDMS45NDk5NSAxMi41NTM3IDIuMTk2MTkgMTIuOCAyLjQ5OTk1IDEyLjhDMi44MDM3MSAxMi44IDMuMDQ5OTUgMTIuNTUzNyAzLjA0OTk1IDEyLjI1VjIuNzQ5OTVaTTUuNzMzMzMgMi4zMDc3NkM1LjU3ODM1IDIuMjI1OTYgNS4zOTE4NSAyLjIzMTI3IDUuMjQxNzcgMi4zMjE3NkM1LjA5MTcgMi40MTIyNSA0Ljk5OTk1IDIuNTc0NzEgNC45OTk5NSAyLjc0OTk1VjEyLjI1QzQuOTk5OTUgMTIuNDI1MiA1LjA5MTcgMTIuNTg3NyA1LjI0MTc3IDEyLjY3ODFDNS4zOTE4NSAxMi43Njg2IDUuNTc4MzUgMTIuNzczOSA1LjczMzMzIDEyLjY5MjFMMTQuNzMzMyA3Ljk0MjE0QzE0Ljg5NzMgNy44NTU1OSAxNSA3LjY4NTM5IDE1IDcuNDk5OTVDMTUgNy4zMTQ1MiAxNC44OTczIDcuMTQ0MzEgMTQuNzMzMyA3LjA1Nzc2TDUuNzMzMzMgMi4zMDc3NlpNNS45OTk5NSAxMS40MjA3VjMuNTc5MkwxMy40Mjg3IDcuNDk5OTVMNS45OTk5NSAxMS40MjA3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sY3I9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTYuODUzNTcgMy44NTM1NUw3LjY1MzU1IDMuMDUzNTNDOC4yOTgxIDIuNDA5MDEgOS40Mjg1OCAxLjk2MTcyIDEwLjU1MiAxLjgwMTI1QzExLjEwNTYgMS43MjIxNyAxMS42MjkxIDEuNzE3MjUgMTIuMDU2NCAxLjc4MTI0QzEyLjQ5ODcgMS44NDc0OCAxMi43Njk4IDEuOTc2OTYgMTIuODk2NSAyLjEwMzU3QzEzLjAyMzEgMi4yMzAxOCAxMy4xNTI2IDIuNTAxMjUgMTMuMjE4OCAyLjk0MzU3QzEzLjI4MjggMy4zNzA4NiAxMy4yNzc5IDMuODk0MzkgMTMuMTk4OCA0LjQ0ODAxQzEzLjAzODMgNS41NzEzOSAxMi41OTEgNi43MDE4OCAxMS45NDY0IDcuMzQ2NDVMNy40OTk5OSAxMS43OTI5TDYuMzUzNTQgMTAuNjQ2NUM2LjE1ODI3IDEwLjQ1MTIgNS44NDE2OSAxMC40NTEyIDUuNjQ2NDMgMTAuNjQ2NUM1LjQ1MTE3IDEwLjg0MTcgNS40NTExNyAxMS4xNTgzIDUuNjQ2NDMgMTEuMzUzNkw3LjE0NjQ0IDEyLjg1MzZDNy4zNDE3MSAxMy4wNDg4IDcuNjU4MjkgMTMuMDQ4OCA3Ljg1MzU1IDEyLjg1MzZMOC40MDA3MyAxMi4zMDY0TDkuNTcxMjQgMTQuMjU3MkM5LjY1MDQ2IDE0LjM4OTMgOS43ODYwOCAxNC40Nzc0IDkuOTM4OSAxNC40OTYzQzEwLjA5MTcgMTQuNTE1MSAxMC4yNDQ3IDE0LjQ2MjQgMTAuMzUzNSAxNC4zNTM2TDEyLjM1MzUgMTIuMzUzNkMxMi40NjQ4IDEyLjI0MjMgMTIuNTE3MiAxMi4wODUxIDEyLjQ5NSAxMS45MjkzTDEyLjAzMDMgOC42NzY3OUwxMi42NTM2IDguMDUzNTVDMTMuNTA5IDcuMTk4MDggMTQuMDExNyA1LjgyODU1IDE0LjE4ODcgNC41ODk0M0MxNC4yNzg0IDMuOTYxOCAxNC4yODkxIDMuMzM4NDcgMTQuMjA3OCAyLjc5NTQ2QzE0LjEyODcgMi4yNjc0OCAxMy45NTE5IDEuNzQ0ODIgMTMuNjAzNSAxLjM5NjQ1QzEzLjI1NTIgMS4wNDgwOSAxMi43MzI1IDAuODcxMzMyIDEyLjIwNDUgMC43OTIyNjRDMTEuNjYxNSAwLjcxMDk0NSAxMS4wMzgyIDAuNzIxNjQ0IDEwLjQxMDUgMC44MTEzQzkuMTcxNDMgMC45ODgzMDYgNy44MDE4OSAxLjQ5MSA2Ljk0NjQ0IDIuMzQ2NDJMNi4zMjMyMiAyLjk2OTY4TDMuMDcwNzEgMi41MDUwNEMyLjkxNDkyIDIuNDgyNzggMi43NTc3MyAyLjUzNTE3IDIuNjQ2NDUgMi42NDY0NkwwLjY0NjQ1MSA0LjY0NjQ1QzAuNTM3NTc5IDQuNzU1MzMgMC40ODQ5MzggNC45MDgyOSAwLjUwMzc1IDUuMDYxMUMwLjUyMjU2MyA1LjIxMzkxIDAuNjEwNzMgNS4zNDk1NCAwLjc0Mjc1NyA1LjQyODc2TDIuNjkzNjQgNi41OTkyOEwyLjE0NjQ2IDcuMTQ2NDVDMi4wNTI3IDcuMjQwMjIgMi4wMDAwMiA3LjM2NzQgMi4wMDAwMiA3LjUwMDAxQzIuMDAwMDIgNy42MzI2MSAyLjA1MjcgNy43NTk3OSAyLjE0NjQ2IDcuODUzNTZMMy42NDY0NyA5LjM1MzU2QzMuODQxNzMgOS41NDg4MyA0LjE1ODMxIDkuNTQ4ODMgNC4zNTM1NyA5LjM1MzU2QzQuNTQ4ODQgOS4xNTgzIDQuNTQ4ODQgOC44NDE3MiA0LjM1MzU3IDguNjQ2NDZMMy4yMDcxMiA3LjUwMDAxTDMuODUzNTcgNi44NTM1Nkw2Ljg1MzU3IDMuODUzNTVaTTEwLjA5OTMgMTMuMTkzNkw5LjEyOTU5IDExLjU3NzVMMTEuMTQ2NCA5LjU2MDY3TDExLjQ2OTcgMTEuODIzMkwxMC4wOTkzIDEzLjE5MzZaTTMuNDIyNTEgNS44NzA0MUw1LjQzOTM1IDMuODUzNTZMMy4xNzY3OCAzLjUzMDM0TDEuODA2MzggNC45MDA3NEwzLjQyMjUxIDUuODcwNDFaTTIuMzUzNTYgMTAuMzUzNUMyLjU0ODgyIDEwLjE1ODMgMi41NDg4MiA5Ljg0MTcgMi4zNTM1NiA5LjY0NjQ0QzIuMTU4MyA5LjQ1MTE4IDEuODQxNzEgOS40NTExOCAxLjY0NjQ1IDkuNjQ2NDRMMC42NDY0NTEgMTAuNjQ2NEMwLjQ1MTE4OCAxMC44NDE3IDAuNDUxMTg4IDExLjE1ODMgMC42NDY0NTEgMTEuMzUzNUMwLjg0MTcxMyAxMS41NDg4IDEuMTU4MyAxMS41NDg4IDEuMzUzNTYgMTEuMzUzNUwyLjM1MzU2IDEwLjM1MzVaTTMuODUzNTggMTEuODUzNkM0LjA0ODg0IDExLjY1ODMgNC4wNDg4NSAxMS4zNDE3IDMuODUzNTkgMTEuMTQ2NUMzLjY1ODMzIDEwLjk1MTIgMy4zNDE3NSAxMC45NTEyIDMuMTQ2NDggMTEuMTQ2NUwxLjE0NjQ1IDEzLjE0NjRDMC45NTExOSAxMy4zNDE3IDAuOTUxMTg3IDEzLjY1ODMgMS4xNDY0NSAxMy44NTM1QzEuMzQxNzEgMTQuMDQ4OCAxLjY1ODI5IDE0LjA0ODggMS44NTM1NSAxMy44NTM2TDMuODUzNTggMTEuODUzNlpNNS4zNTM1NiAxMy4zNTM1QzUuNTQ4ODIgMTMuMTU4MyA1LjU0ODgyIDEyLjg0MTcgNS4zNTM1NiAxMi42NDY0QzUuMTU4MyAxMi40NTEyIDQuODQxNzEgMTIuNDUxMiA0LjY0NjQ1IDEyLjY0NjRMMy42NDY0NSAxMy42NDY0QzMuNDUxMTkgMTMuODQxNyAzLjQ1MTE5IDE0LjE1ODMgMy42NDY0NSAxNC4zNTM1QzMuODQxNzEgMTQuNTQ4OCA0LjE1ODMgMTQuNTQ4OCA0LjM1MzU2IDE0LjM1MzVMNS4zNTM1NiAxMy4zNTM1Wk05LjQ5OTk3IDYuNzQ4ODFDMTAuMTg5NyA2Ljc0ODgxIDEwLjc0ODggNi4xODk3IDEwLjc0ODggNS41QzEwLjc0ODggNC44MTAzIDEwLjE4OTcgNC4yNTExOCA5LjQ5OTk3IDQuMjUxMThDOC44MTAyNiA0LjI1MTE4IDguMjUxMTUgNC44MTAzIDguMjUxMTUgNS41QzguMjUxMTUgNi4xODk3IDguODEwMjYgNi43NDg4MSA5LjQ5OTk3IDYuNzQ4ODFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx1cj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41OTY2NCAyLjkzNjI4QzcuNzYwODUgMy4wNjQwMSA4LjAwMDEyIDIuOTQ2OTggOC4wMDAxMiAyLjczODk1VjEuOTk5OThDOS45ODE0MyAyIDExLjE4NDggMi4zNjM3IDExLjkxMDUgMy4wODk0NUMxMi42MzYzIDMuODE1MjIgMTMgNS4wMTg2IDEzIDYuOTk5OThDMTMgNy4yNzYxMyAxMy4yMjM5IDcuNDk5OTggMTMuNSA3LjQ5OTk4QzEzLjc3NjEgNy40OTk5OCAxNCA3LjI3NjEzIDE0IDYuOTk5OThDMTQgNC45NDM4IDEzLjYzMjUgMy4zOTcxOSAxMi42MTc2IDIuMzgyMzRDMTEuNjAyOCAxLjM2NzUyIDEwLjA1NjIgMC45OTk5OTkgOC4wMDAxMiAwLjk5OTk4NFYwLjI2MTI2NkM4LjAwMDEyIDAuMDUzMjI5MyA3Ljc2MDg1IC0wLjA2Mzc5NDQgNy41OTY2NCAwLjA2MzkyOEw2LjAwMzg0IDEuMzAyNzdDNS44NzUxNiAxLjQwMjg2IDUuODc1MTYgMS41OTczNSA2LjAwMzg0IDEuNjk3NDRMNy41OTY2NCAyLjkzNjI4Wk05LjUgNUgyLjVDMi4yMjM4NiA1IDIgNS4yMjM4NiAyIDUuNVYxMi41QzIgMTIuNzc2MSAyLjIyMzg2IDEzIDIuNSAxM0g5LjVDOS43NzYxNCAxMyAxMCAxMi43NzYxIDEwIDEyLjVWNS41QzEwIDUuMjIzODYgOS43NzYxNCA1IDkuNSA1Wk0yLjUgNEMxLjY3MTU3IDQgMSA0LjY3MTU3IDEgNS41VjEyLjVDMSAxMy4zMjg0IDEuNjcxNTcgMTQgMi41IDE0SDkuNUMxMC4zMjg0IDE0IDExIDEzLjMyODQgMTEgMTIuNVY1LjVDMTEgNC42NzE1NyAxMC4zMjg0IDQgOS41IDRIMi41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZnI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuODE4MzIgMC42ODE3OUM3LjY0MjU4IDAuNTA2MDU0IDcuMzU3NjYgMC41MDYwNTQgNy4xODE5MiAwLjY4MTc5TDUuMTgxOTIgMi42ODE3OUM1LjAwNjE5IDIuODU3NTMgNS4wMDYxOSAzLjE0MjQ1IDUuMTgxOTIgMy4zMTgxOUM1LjM1NzY2IDMuNDkzOTIgNS42NDI1OCAzLjQ5MzkyIDUuODE4MzIgMy4zMTgxOUw3LjA1MDEyIDIuMDg2MzhMNy4wNTAxMiA1LjUwMDIzQzcuMDUwMTIgNS43NDg3NiA3LjI1MTU5IDUuOTUwMjMgNy41MDAxMiA1Ljk1MDIzQzcuNzQ4NjUgNS45NTAyMyA3Ljk1MDEyIDUuNzQ4NzYgNy45NTAxMiA1LjUwMDIzTDcuOTUwMTIgMi4wODYzOEw5LjE4MTkyIDMuMzE4MTlDOS4zNTc2NiAzLjQ5MzkyIDkuNjQyNTggMy40OTM5MiA5LjgxODMyIDMuMzE4MTlDOS45OTQwNiAzLjE0MjQ1IDkuOTk0MDYgMi44NTc1MyA5LjgxODMyIDIuNjgxNzlMNy44MTgzMiAwLjY4MTc5Wk03Ljk1MDEyIDEyLjkxMzZWOS41MDAyM0M3Ljk1MDEyIDkuMjUxNyA3Ljc0ODY1IDkuMDUwMjMgNy41MDAxMiA5LjA1MDIzQzcuMjUxNTkgOS4wNTAyMyA3LjA1MDEyIDkuMjUxNyA3LjA1MDEyIDkuNTAwMjNWMTIuOTEzNkw1LjgxODMyIDExLjY4MThDNS42NDI1OCAxMS41MDYxIDUuMzU3NjYgMTEuNTA2MSA1LjE4MTkyIDExLjY4MThDNS4wMDYxOSAxMS44NTc1IDUuMDA2MTkgMTIuMTQyNCA1LjE4MTkyIDEyLjMxODJMNy4xODE5MiAxNC4zMTgyQzcuMjY2MzIgMTQuNDAyNiA3LjM4MDc3IDE0LjQ1IDcuNTAwMTIgMTQuNDVDNy42MTk0NyAxNC40NSA3LjczMzkzIDE0LjQwMjYgNy44MTgzMiAxNC4zMTgyTDkuODE4MzIgMTIuMzE4MkM5Ljk5NDA2IDEyLjE0MjQgOS45OTQwNiAxMS44NTc1IDkuODE4MzIgMTEuNjgxOEM5LjY0MjU4IDExLjUwNjEgOS4zNTc2NiAxMS41MDYxIDkuMTgxOTIgMTEuNjgxOEw3Ljk1MDEyIDEyLjkxMzZaTTEuNDk5OTQgNy4wMDAxN0MxLjIyMzggNy4wMDAxNyAwLjk5OTkzOSA3LjIyNDAzIDAuOTk5OTM5IDcuNTAwMTdDMC45OTk5MzkgNy43NzYzMSAxLjIyMzggOC4wMDAxNyAxLjQ5OTk0IDguMDAwMTdMMTMuNDk5OSA4LjAwMDE3QzEzLjc3NjEgOC4wMDAxNyAxMy45OTk5IDcuNzc2MzEgMTMuOTk5OSA3LjUwMDE3QzEzLjk5OTkgNy4yMjQwMyAxMy43NzYxIDcuMDAwMTcgMTMuNDk5OSA3LjAwMDE3TDEuNDk5OTQgNy4wMDAxN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGRyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xNCAxMi44NUwxIDEyLjg1TDEgMTQuMTVMMTQgMTQuMTVMMTQgMTIuODVaTTE0IDguODUwMDJMMSA4Ljg1MDAyTDEgMTAuMTVMMTQgMTAuMTVMMTQgOC44NTAwMlpNMSA0Ljg1MDAzTDE0IDQuODUwMDNMMTQgNi4xNTAwM0wxIDYuMTUwMDJMMSA0Ljg1MDAzWk0xNCAwLjg1MDAyNUwxIDAuODUwMDI1TDEgMi4xNTAwMkwxNCAyLjE1MDAyTDE0IDAuODUwMDI1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuNSA0QzAuMjIzODU4IDQgMCA0LjIyMzg2IDAgNC41VjEwLjVDMCAxMC43NzYxIDAuMjIzODU4IDExIDAuNSAxMUgxNC41QzE0Ljc3NjEgMTEgMTUgMTAuNzc2MSAxNSAxMC41VjQuNUMxNSA0LjIyMzg2IDE0Ljc3NjEgNCAxNC41IDRIMC41Wk0xIDEwVjVIMi4wNzVWNy41QzIuMDc1IDcuNzM0NzIgMi4yNjUyOCA3LjkyNSAyLjUgNy45MjVDMi43MzQ3MiA3LjkyNSAyLjkyNSA3LjczNDcyIDIuOTI1IDcuNVY1SDQuMDc1VjYuNUM0LjA3NSA2LjczNDcyIDQuMjY1MjggNi45MjUgNC41IDYuOTI1QzQuNzM0NzIgNi45MjUgNC45MjUgNi43MzQ3MiA0LjkyNSA2LjVWNUg2LjA3NVY2LjVDNi4wNzUgNi43MzQ3MiA2LjI2NTI4IDYuOTI1IDYuNSA2LjkyNUM2LjczNDcyIDYuOTI1IDYuOTI1IDYuNzM0NzIgNi45MjUgNi41VjVIOC4wNzVWNy41QzguMDc1IDcuNzM0NzIgOC4yNjUyOCA3LjkyNSA4LjUgNy45MjVDOC43MzQ3MiA3LjkyNSA4LjkyNSA3LjczNDcyIDguOTI1IDcuNVY1SDEwLjA3NVY2LjVDMTAuMDc1IDYuNzM0NzIgMTAuMjY1MyA2LjkyNSAxMC41IDYuOTI1QzEwLjczNDcgNi45MjUgMTAuOTI1IDYuNzM0NzIgMTAuOTI1IDYuNVY1SDEyLjA3NVY2LjVDMTIuMDc1IDYuNzM0NzIgMTIuMjY1MyA2LjkyNSAxMi41IDYuOTI1QzEyLjczNDcgNi45MjUgMTIuOTI1IDYuNzM0NzIgMTIuOTI1IDYuNVY1SDE0VjEwSDFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxocj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC41IDBDMC4yMjM4NTggMCAwIDAuMjIzODU4IDAgMC41VjE0LjVDMCAxNC43NzYxIDAuMjIzODU4IDE1IDAuNSAxNUg0LjVDNC43NzYxNCAxNSA1IDE0Ljc3NjEgNSAxNC41VjVIMTQuNUMxNC43NzYxIDUgMTUgNC43NzYxNCAxNSA0LjVWMC41QzE1IDAuMjIzODU4IDE0Ljc3NjEgMCAxNC41IDBIMC41Wk0xIDQuMDc1MDVMMSAxSDQuMDc1MDJDNC4wNzUwMiAxIDQuMDc1MDIgMSA0LjA3NTAyIDFMNC4wNzUwNSA0LjA3NTA3TDEgNC4wNzUwNVpNMC45OTk5OTcgNC45MjUwNUwxIDE0SDRWMTIuOTI1SDIuNzUwMDJDMi41MTUzIDEyLjkyNSAyLjMyNTAyIDEyLjczNDggMi4zMjUwMiAxMi41QzIuMzI1MDIgMTIuMjY1MyAyLjUxNTMgMTIuMDc1IDIuNzUwMDIgMTIuMDc1SDRWMTAuOTI1SDIuMjUwMDJDMi4wMTUzIDEwLjkyNSAxLjgyNTAyIDEwLjczNDcgMS44MjUwMiAxMC41QzEuODI1MDIgMTAuMjY1MyAyLjAxNTMgMTAuMDc1IDIuMjUwMDIgMTAuMDc1SDRWOC45MjUwNEwyLjc1MDAyIDguOTI1MDJDMi41MTUzIDguOTI1MDIgMi4zMjUwMiA4LjczNDc0IDIuMzI1MDIgOC41MDAwMkMyLjMyNTAzIDguMjY1MjkgMi41MTUzMSA4LjA3NTAyIDIuNzUwMDMgOC4wNzUwMkw0IDguMDc1MDRWNi45MjUwMkwyLjc0OTk5IDYuOTI1QzIuNTE1MjcgNi45MjUgMi4zMjUgNi43MzQ3MiAyLjMyNSA2LjVDMi4zMjUgNi4yNjUyOCAyLjUxNTI5IDYuMDc1IDIuNzUwMDEgNi4wNzVMNCA2LjA3NTAyVjQuOTI1MDdMMC45OTk5OTcgNC45MjUwNVpNNC45MjUwNSA0SDYuMDc1VjIuNzUwMDZDNi4wNzUgMi41MTUzNCA2LjI2NTI4IDIuMzI1MDYgNi41IDIuMzI1MDZDNi43MzQ3MiAyLjMyNTA2IDYuOTI1IDIuNTE1MzQgNi45MjUgMi43NTAwNlY0SDguMDc1MDJWMi43NTAwNUM4LjA3NTAyIDIuNTE1MzMgOC4yNjUzIDIuMzI1MDUgOC41MDAwMiAyLjMyNTA1QzguNzM0NzQgMi4zMjUwNSA4LjkyNTAyIDIuNTE1MzMgOC45MjUwMiAyLjc1MDA1VjRIMTAuMDc1MVYyLjI1MDA1QzEwLjA3NTEgMi4wMTUzMyAxMC4yNjUzIDEuODI1MDUgMTAuNTAwMSAxLjgyNTA1QzEwLjczNDggMS44MjUwNSAxMC45MjUxIDIuMDE1MzMgMTAuOTI1MSAyLjI1MDA1VjRIMTIuMDc1MVYyLjc1MDA1QzEyLjA3NTEgMi41MTUzMyAxMi4yNjU0IDIuMzI1MDUgMTIuNTAwMSAyLjMyNTA1QzEyLjczNDggMi4zMjUwNSAxMi45MjUxIDIuNTE1MzMgMTIuOTI1MSAyLjc1MDA1VjRIMTRWMUg0LjkyNTAyTDQuOTI1MDUgNFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGdyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yIDEuNUMyIDEuNzc2MTQgMS43NzYxNCAyIDEuNSAyQzEuMjIzODYgMiAxIDEuNzc2MTQgMSAxLjVDMSAxLjIyMzg2IDEuMjIzODYgMSAxLjUgMUMxLjc3NjE0IDEgMiAxLjIyMzg2IDIgMS41Wk0yIDVMMiAxMEgxM1Y1SDJaTTIgNEMxLjQ0NzcyIDQgMSA0LjQ0NzcyIDEgNVYxMEMxIDEwLjU1MjMgMS40NDc3MiAxMSAyIDExSDEzQzEzLjU1MjMgMTEgMTQgMTAuNTUyMyAxNCAxMFY1QzE0IDQuNDQ3NzIgMTMuNTUyMyA0IDEzIDRIMlpNMS41IDE0QzEuNzc2MTQgMTQgMiAxMy43NzYxIDIgMTMuNUMyIDEzLjIyMzkgMS43NzYxNCAxMyAxLjUgMTNDMS4yMjM4NiAxMyAxIDEzLjIyMzkgMSAxMy41QzEgMTMuNzc2MSAxLjIyMzg2IDE0IDEuNSAxNFpNNCAxLjVDNCAxLjc3NjE0IDMuNzc2MTQgMiAzLjUgMkMzLjIyMzg2IDIgMyAxLjc3NjE0IDMgMS41QzMgMS4yMjM4NiAzLjIyMzg2IDEgMy41IDFDMy43NzYxNCAxIDQgMS4yMjM4NiA0IDEuNVpNMy41IDE0QzMuNzc2MTQgMTQgNCAxMy43NzYxIDQgMTMuNUM0IDEzLjIyMzkgMy43NzYxNCAxMyAzLjUgMTNDMy4yMjM4NiAxMyAzIDEzLjIyMzkgMyAxMy41QzMgMTMuNzc2MSAzLjIyMzg2IDE0IDMuNSAxNFpNNiAxLjVDNiAxLjc3NjE0IDUuNzc2MTQgMiA1LjUgMkM1LjIyMzg2IDIgNSAxLjc3NjE0IDUgMS41QzUgMS4yMjM4NiA1LjIyMzg2IDEgNS41IDFDNS43NzYxNCAxIDYgMS4yMjM4NiA2IDEuNVpNNS41IDE0QzUuNzc2MTQgMTQgNiAxMy43NzYxIDYgMTMuNUM2IDEzLjIyMzkgNS43NzYxNCAxMyA1LjUgMTNDNS4yMjM4NiAxMyA1IDEzLjIyMzkgNSAxMy41QzUgMTMuNzc2MSA1LjIyMzg2IDE0IDUuNSAxNFpNOCAxLjVDOCAxLjc3NjE0IDcuNzc2MTQgMiA3LjUgMkM3LjIyMzg2IDIgNyAxLjc3NjE0IDcgMS41QzcgMS4yMjM4NiA3LjIyMzg2IDEgNy41IDFDNy43NzYxNCAxIDggMS4yMjM4NiA4IDEuNVpNNy41IDE0QzcuNzc2MTQgMTQgOCAxMy43NzYxIDggMTMuNUM4IDEzLjIyMzkgNy43NzYxNCAxMyA3LjUgMTNDNy4yMjM4NiAxMyA3IDEzLjIyMzkgNyAxMy41QzcgMTMuNzc2MSA3LjIyMzg2IDE0IDcuNSAxNFpNMTAgMS41QzEwIDEuNzc2MTQgOS43NzYxNCAyIDkuNSAyQzkuMjIzODYgMiA5IDEuNzc2MTQgOSAxLjVDOSAxLjIyMzg2IDkuMjIzODYgMSA5LjUgMUM5Ljc3NjE0IDEgMTAgMS4yMjM4NiAxMCAxLjVaTTkuNSAxNEM5Ljc3NjE0IDE0IDEwIDEzLjc3NjEgMTAgMTMuNUMxMCAxMy4yMjM5IDkuNzc2MTQgMTMgOS41IDEzQzkuMjIzODYgMTMgOSAxMy4yMjM5IDkgMTMuNUM5IDEzLjc3NjEgOS4yMjM4NiAxNCA5LjUgMTRaTTEyIDEuNUMxMiAxLjc3NjE0IDExLjc3NjEgMiAxMS41IDJDMTEuMjIzOSAyIDExIDEuNzc2MTQgMTEgMS41QzExIDEuMjIzODYgMTEuMjIzOSAxIDExLjUgMUMxMS43NzYxIDEgMTIgMS4yMjM4NiAxMiAxLjVaTTExLjUgMTRDMTEuNzc2MSAxNCAxMiAxMy43NzYxIDEyIDEzLjVDMTIgMTMuMjIzOSAxMS43NzYxIDEzIDExLjUgMTNDMTEuMjIzOSAxMyAxMSAxMy4yMjM5IDExIDEzLjVDMTEgMTMuNzc2MSAxMS4yMjM5IDE0IDExLjUgMTRaTTE0IDEuNUMxNCAxLjc3NjE0IDEzLjc3NjEgMiAxMy41IDJDMTMuMjIzOSAyIDEzIDEuNzc2MTQgMTMgMS41QzEzIDEuMjIzODYgMTMuMjIzOSAxIDEzLjUgMUMxMy43NzYxIDEgMTQgMS4yMjM4NiAxNCAxLjVaTTEzLjUgMTRDMTMuNzc2MSAxNCAxNCAxMy43NzYxIDE0IDEzLjVDMTQgMTMuMjIzOSAxMy43NzYxIDEzIDEzLjUgMTNDMTMuMjIzOSAxMyAxMyAxMy4yMjM5IDEzIDEzLjVDMTMgMTMuNzc2MSAxMy4yMjM5IDE0IDEzLjUgMTRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx2cj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNiAzLjVDNiAyLjY3MTU3IDYuNjcxNTcgMiA3LjUgMkM4LjMyODQzIDIgOSAyLjY3MTU3IDkgMy41QzkgNC4zMjg0MyA4LjMyODQzIDUgNy41IDVDNi42NzE1NyA1IDYgNC4zMjg0MyA2IDMuNVpNOCA1Ljk0OTk5QzkuMTQxMTIgNS43MTgzNiAxMCA0LjcwOTQ4IDEwIDMuNUMxMCAyLjExOTI5IDguODgwNzEgMSA3LjUgMUM2LjExOTI5IDEgNSAyLjExOTI5IDUgMy41QzUgNC43MDk0OCA1Ljg1ODg4IDUuNzE4MzYgNyA1Ljk0OTk5VjEzLjVDNyAxMy43NzYxIDcuMjIzODYgMTQgNy41IDE0QzcuNzc2MTQgMTQgOCAxMy43NzYxIDggMTMuNVY1Ljk0OTk5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEwIDMuNUMxMCA0LjcwOTQ4IDkuMTQxMTIgNS43MTgzNiA4IDUuOTQ5OTlWMTMuNUM4IDEzLjc3NjEgNy43NzYxNCAxNCA3LjUgMTRDNy4yMjM4NiAxNCA3IDEzLjc3NjEgNyAxMy41VjUuOTQ5OTlDNS44NTg4OCA1LjcxODM2IDUgNC43MDk0OCA1IDMuNUM1IDIuMTE5MjkgNi4xMTkyOSAxIDcuNSAxQzguODgwNzEgMSAxMCAyLjExOTI5IDEwIDMuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LENyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wLjg3NzA3NSA3LjQ5OTg4QzAuODc3MDc1IDMuODQyMTkgMy44NDIyMiAwLjg3NzA0NSA3LjQ5OTkxIDAuODc3MDQ1QzExLjE1NzYgMC44NzcwNDUgMTQuMTIyNyAzLjg0MjE5IDE0LjEyMjcgNy40OTk4OEMxNC4xMjI3IDExLjE1NzUgMTEuMTU3NiAxNC4xMjI3IDcuNDk5OTEgMTQuMTIyN0MzLjg0MjIyIDE0LjEyMjcgMC44NzcwNzUgMTEuMTU3NSAwLjg3NzA3NSA3LjQ5OTg4Wk03LjQ5OTkxIDEuODI3MDRDNC4zNjY4OSAxLjgyNzA0IDEuODI3MDggNC4zNjY4NiAxLjgyNzA4IDcuNDk5ODhDMS44MjcwOCAxMC42MzI5IDQuMzY2ODkgMTMuMTcyNyA3LjQ5OTkxIDEzLjE3MjdDMTAuNjMyOSAxMy4xNzI3IDEzLjE3MjcgMTAuNjMyOSAxMy4xNzI3IDcuNDk5ODhDMTMuMTcyNyA0LjM2Njg2IDEwLjYzMjkgMS44MjcwNCA3LjQ5OTkxIDEuODI3MDRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4wNVwiLGQ6XCJNNi43ODI5NiAxMy4zNzZDOC43MzkwNCA5Ljk1Mjg0IDguNzM5MDQgNS4wNDcxOSA2Ljc4Mjk2IDEuNjI0MDVMNy4yMTcwOCAxLjM3NTk4QzkuMjYxIDQuOTUyODMgOS4yNjEgMTAuMDQ3MiA3LjIxNzA4IDEzLjYyNEw2Ljc4Mjk2IDEzLjM3NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjFcIixkOlwiTTcuMjgyMDQgMTMuNDc3NUM5LjIzOTI5IDkuOTk1MjMgOS4yMzkyOSA1LjAwNDc1IDcuMjgyMDQgMS41MjI0OEw3LjcxNzkxIDEuMjc3NUM5Ljc2MDY3IDQuOTExOSA5Ljc2MDY3IDEwLjA4ODEgNy43MTc5MSAxMy43MjI1TDcuMjgyMDQgMTMuNDc3NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjE1XCIsZDpcIk03LjgyMDk4IDEzLjUwNjRDOS43MjUwMiA5Ljk5NTIzIDkuNzI2MzYgNS4wMTQxMSA3LjgyNDkyIDEuNTAwODRMOC4yNjQ2NSAxLjI2Mjg1QzEwLjI0NjUgNC45MjQ2NiAxMC4yNDUxIDEwLjA4NSA4LjI2MDUyIDEzLjc0NDhMNy44MjA5OCAxMy41MDY0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMlwiLGQ6XCJNOC40MTI4NCAxMy40MjlDMTAuMTk1MiA5LjkyODQyIDEwLjE5NTcgNS4wNzUzNyA4LjQxNDM1IDEuNTc0MDJMOC44NTk5OSAxLjM0NzI5QzEwLjcxMzkgNC45OTExMyAxMC43MTMzIDEwLjAxMjggOC44NTg0MSAxMy42NTU5TDguNDEyODQgMTMuNDI5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMjVcIixkOlwiTTkuMDI0NDEgMTMuMjk1NkMxMC42NTY3IDkuODM3OSAxMC42NTg2IDUuMTc3MTUgOS4wMzAwNSAxLjcxNjU2TDkuNDgyNDUgMS41MDM2NkMxMS4xNzQ1IDUuMDk5MTkgMTEuMTcyNiA5LjkxNjI5IDkuNDc2NTcgMTMuNTA5MUw5LjAyNDQxIDEzLjI5NTZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4zXCIsZDpcIk05LjY2ODA5IDEzLjA2NTVDMTEuMTA5NyA5LjY5NTcyIDExLjExMDcgNS4zMTIxIDkuNjcwODggMS45NDA5NUwxMC4xMzA3IDEuNzQ0NTdDMTEuNjI0MSA1LjI0MTIxIDExLjYyMzEgOS43NjY4MyAxMC4xMjc4IDEzLjI2MjJMOS42NjgwOSAxMy4wNjU1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMzVcIixkOlwiTTEwLjMzMSAxMi43NDU2QzExLjU1NTEgOS41MjA3MyAxMS41NTY0IDUuNDkxMDMgMTAuMzM0NyAyLjI2NDQ0TDEwLjgwMjQgMi4wODc0QzEyLjA2NzIgNS40MjgxNSAxMi4wNjU5IDkuNTgzOTQgMTAuNzk4NSAxMi45MjMxTDEwLjMzMSAxMi43NDU2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuNFwiLGQ6XCJNMTEuMDE1NSAxMi4yOTg2QzExLjk5MzggOS4yOTc0NCAxMS45OTQ4IDUuNzEyOTYgMTEuMDE4NCAyLjcxMDY3TDExLjQ5MzkgMi41NTYwM0MxMi41MDMgNS42NTg5IDEyLjUwMiA5LjM1MTc4IDExLjQ5MDkgMTIuNDUzNUwxMS4wMTU1IDEyLjI5ODZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi40NVwiLGQ6XCJNMTEuNzIxNCAxMS42NjhDMTIuNDI1NCA5LjAxMzAzIDEyLjQyNjIgNS45OTY5MSAxMS43MjM3IDMuMzQxMTZMMTIuMjA3MSAzLjIxMzI5QzEyLjkzMTggNS45NTI5MiAxMi45MzEgOS4wNTcyOCAxMi4yMDQ3IDExLjc5NjFMMTEuNzIxNCAxMS42NjhaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi41XCIsZDpcIk0xMi40NDMyIDEwLjc1MkMxMi44NTI0IDguNjM3NjIgMTIuODUyMyA2LjM2MDg5IDEyLjQ0MjkgNC4yNDY2TDEyLjkzMzggNC4xNTE1NUMxMy4zNTUzIDYuMzI4NjEgMTMuMzU1NCA4LjY2OTg1IDEyLjkzNDEgMTAuODQ3TDEyLjQ0MzIgMTAuNzUyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0seXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuODc3MDc1IDcuNDk5ODhDMC44NzcwNzUgMy44NDIxOSAzLjg0MjIyIDAuODc3MDQ1IDcuNDk5OTEgMC44NzcwNDVDMTEuMTU3NiAwLjg3NzA0NSAxNC4xMjI3IDMuODQyMTkgMTQuMTIyNyA3LjQ5OTg4QzE0LjEyMjcgMTEuMTU3NSAxMS4xNTc2IDE0LjEyMjcgNy40OTk5MSAxNC4xMjI3QzMuODQyMjIgMTQuMTIyNyAwLjg3NzA3NSAxMS4xNTc1IDAuODc3MDc1IDcuNDk5ODhaTTcuNDk5OTEgMS44MjcwNEM0LjM2Njg5IDEuODI3MDQgMS44MjcwOCA0LjM2Njg2IDEuODI3MDggNy40OTk4OEMxLjgyNzA4IDEwLjYzMjkgNC4zNjY4OSAxMy4xNzI3IDcuNDk5OTEgMTMuMTcyN0MxMC42MzI5IDEzLjE3MjcgMTMuMTcyNyAxMC42MzI5IDEzLjE3MjcgNy40OTk4OEMxMy4xNzI3IDQuMzY2ODYgMTAuNjMyOSAxLjgyNzA0IDcuNDk5OTEgMS44MjcwNFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjA1XCIsZDpcIk0xMi4xNjE5IDMuODUxODJDOC4zNTgxNyA0Ljg4OTE4IDQuODg5MzYgOC4zNTggMy44NTE5OSAxMi4xNjE3TDMuMzY5NiAxMi4wMzAxQzQuNDUzNTYgOC4wNTU2NCA4LjA1NTgxIDQuNDUzMzkgMTIuMDMwMyAzLjM2OTQzTDEyLjE2MTkgMy44NTE4MlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjFcIixkOlwiTTExLjg4MDcgMy40MjcwN0M4LjAzNDQxIDQuNTA1NDIgNC41MDU2MSA4LjAzNDIyIDMuNDI3MjYgMTEuODgwNUwyLjk0NTgyIDExLjc0NTZDNC4wNzEyOSA3LjczMTIxIDcuNzMxNCA0LjA3MTEgMTEuNzQ1OCAyLjk0NTYzTDExLjg4MDcgMy40MjcwN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjE1XCIsZDpcIk0xMS41MjAxIDMuMDI1NTZDNy42OTA5MiA0LjE2MTk5IDQuMTY3NzkgNy42ODMyMyAzLjAyODA1IDExLjUxMkwyLjU0ODgzIDExLjM2OTRDMy43MzY3NiA3LjM3ODY5IDcuMzg2NTkgMy43MzA3NiAxMS4zNzc4IDIuNTQ2MjNMMTEuNTIwMSAzLjAyNTU2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMlwiLGQ6XCJNMTEuMDQ2OCAyLjY2MTY5QzcuMzExMTcgMy44NzY2NCAzLjg3OTE4IDcuMzA3OSAyLjY2Mjk4IDExLjA0MzRMMi4xODc1NCAxMC44ODg2QzMuNDUzMjQgNy4wMDEwOSA3LjAwNDQ1IDMuNDUwNjIgMTAuODkyMSAyLjE4NjIxTDExLjA0NjggMi42NjE2OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjI1XCIsZDpcIk0xMC41MjAxIDIuMzIzNjVDNi45MjA5MSAzLjYxNDQ3IDMuNjIzOTEgNi45MDg3NiAyLjMyODQ1IDEwLjUwNzNMMS44NTggMTAuMzM4QzMuMjAzOTggNi41OTkwOSA2LjYxMTU1IDMuMTk0MjQgMTAuMzUxMyAxLjg1MzAxTDEwLjUyMDEgMi4zMjM2NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjNcIixkOlwiTTkuOTAyMjIgMi4wMzEyMkM2LjUwMDAzIDMuMzk0NjUgMy4zOTk2OCA2LjQ5MzY3IDIuMDMzOTkgOS44OTU1MUwxLjU2OTk4IDkuNzA5MjRDMi45ODY1MSA2LjE4MDc2IDYuMTg3MjggMi45ODEzMyA5LjcxNjIyIDEuNTY3MUw5LjkwMjIyIDIuMDMxMjJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4zNVwiLGQ6XCJNOS4yMDcyNyAxLjc4ODczQzYuMDYxMzYgMy4yMDM0OSAzLjIxMTAzIDYuMDUyMDMgMS43OTMzMSA5LjE5NzM4TDEuMzM3NDcgOC45OTE5MkMyLjgwNTM2IDUuNzM1MjggNS43NDQ4NSAyLjc5NzYgOS4wMDIyIDEuMzMyNzJMOS4yMDcyNyAxLjc4ODczWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuNFwiLGQ6XCJNOC40MDcxMyAxLjYyMDg1QzUuNTkzMjMgMy4wNTExNyAzLjA1Nzk0IDUuNTg1MDkgMS42MjU0NCA4LjM5ODQ3TDEuMTc5ODcgOC4xNzE2QzIuNjYwMzYgNS4yNjM5NyA1LjI3MjMyIDIuNjUzNCA4LjE4MDU3IDEuMTc1MTNMOC40MDcxMyAxLjYyMDg1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuNDVcIixkOlwiTTcuNDYyMDcgMS41Njc0N0M1LjA4Njg5IDIuOTQ2OTUgMi45NTM2MiA1LjA3OTEyIDEuNTcyNDkgNy40NTM3OUwxLjE0MDI4IDcuMjAyNDFDMi41NjUwMyA0Ljc1MjczIDQuNzYwNyAyLjU1ODE4IDcuMjEwOTYgMS4xMzUxTDcuNDYyMDcgMS41Njc0N1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjVcIixkOlwiTTYuMzA0MDcgMS43MDQ4N0M0LjUxOTY0IDIuOTEwNjMgMi45MDk4MyA0LjUyMDYxIDEuNzA0MyA2LjMwNTEzTDEuMjg5OTggNi4wMjUyNEMyLjUzMTMgNC4xODc3MyA0LjE4NjczIDIuNTMyMTQgNi4wMjQxMyAxLjI5MDU5TDYuMzA0MDcgMS43MDQ4N1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHdyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTkxIDAuODc3MDQ1QzMuODQyMjIgMC44NzcwNDUgMC44NzcwNzUgMy44NDIxOSAwLjg3NzA3NSA3LjQ5OTg4QzAuODc3MDc1IDkuMTQ4OCAxLjQ3OTY5IDEwLjY1NyAyLjQ3NjcgMTEuODE2MkwxLjY0NjQ3IDEyLjY0NjRDMS40NTEyMSAxMi44NDE3IDEuNDUxMjEgMTMuMTU4MyAxLjY0NjQ3IDEzLjM1MzVDMS44NDE3MyAxMy41NDg4IDIuMTU4MzIgMTMuNTQ4OCAyLjM1MzU4IDEzLjM1MzVMMy4xODM4MyAxMi41MjMzQzQuMzQzMDIgMTMuNTIwMiA1Ljg1MTEgMTQuMTIyNyA3LjQ5OTkxIDE0LjEyMjdDMTEuMTU3NiAxNC4xMjI3IDE0LjEyMjcgMTEuMTU3NSAxNC4xMjI3IDcuNDk5ODhDMTQuMTIyNyA1Ljg1MTA3IDEzLjUyMDIgNC4zNDI5OCAxMi41MjMzIDMuMTgzOEwxMy4zNTM2IDIuMzUzNTVDMTMuNTQ4OCAyLjE1ODI5IDEzLjU0ODggMS44NDE3IDEzLjM1MzYgMS42NDY0NEMxMy4xNTgzIDEuNDUxMTggMTIuODQxNyAxLjQ1MTE4IDEyLjY0NjUgMS42NDY0NEwxMS44MTYyIDIuNDc2NjdDMTAuNjU3IDEuNDc5NjYgOS4xNDg4MyAwLjg3NzA0NSA3LjQ5OTkxIDAuODc3MDQ1Wk0xMS4xNDIzIDMuMTUwNjVDMTAuMTU2OCAyLjMyNDQ5IDguODg2NDQgMS44MjcwNCA3LjQ5OTkxIDEuODI3MDRDNC4zNjY4OSAxLjgyNzA0IDEuODI3MDggNC4zNjY4NiAxLjgyNzA4IDcuNDk5ODhDMS44MjcwOCA4Ljg4NjQxIDIuMzI0NTIgMTAuMTU2OCAzLjE1MDY5IDExLjE0MjJMMTEuMTQyMyAzLjE1MDY1Wk0zLjg1NzgxIDExLjg0OTNDNC44NDMyMiAxMi42NzUzIDYuMTEzNDggMTMuMTcyNyA3LjQ5OTkxIDEzLjE3MjdDMTAuNjMyOSAxMy4xNzI3IDEzLjE3MjcgMTAuNjMyOSAxMy4xNzI3IDcuNDk5ODhDMTMuMTcyNyA2LjExMzQ1IDEyLjY3NTQgNC44NDMxOSAxMS44NDkzIDMuODU3NzhMMy44NTc4MSAxMS44NDkzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMDVcIixkOlwiTTYuNzgyOTYgMTMuMzc2QzguNzM5MDQgOS45NTI4NCA4LjczOTA0IDUuMDQ3MTkgNi43ODI5NiAxLjYyNDA1TDcuMjE3MDggMS4zNzU5OEM5LjI2MSA0Ljk1MjgzIDkuMjYxIDEwLjA0NzIgNy4yMTcwOCAxMy42MjRMNi43ODI5NiAxMy4zNzZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4xXCIsZDpcIk03LjI4MjA0IDEzLjQ3NzVDOS4yMzkyOSA5Ljk5NTIzIDkuMjM5MjkgNS4wMDQ3NSA3LjI4MjA0IDEuNTIyNDhMNy43MTc5MSAxLjI3NzVDOS43NjA2NyA0LjkxMTkgOS43NjA2NyAxMC4wODgxIDcuNzE3OTEgMTMuNzIyNUw3LjI4MjA0IDEzLjQ3NzVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4xNVwiLGQ6XCJNNy44MjA5OCAxMy41MDY0QzkuNzI1MDIgOS45OTUyMyA5LjcyNjM2IDUuMDE0MTEgNy44MjQ5MiAxLjUwMDg0TDguMjY0NjUgMS4yNjI4NUMxMC4yNDY1IDQuOTI0NjYgMTAuMjQ1MSAxMC4wODUgOC4yNjA1MiAxMy43NDQ4TDcuODIwOTggMTMuNTA2NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjJcIixkOlwiTTguNDEyODQgMTMuNDI5QzEwLjE5NTIgOS45Mjg0MiAxMC4xOTU3IDUuMDc1MzcgOC40MTQzNSAxLjU3NDAyTDguODU5OTkgMS4zNDcyOUMxMC43MTM5IDQuOTkxMTMgMTAuNzEzMyAxMC4wMTI4IDguODU4NDEgMTMuNjU1OUw4LjQxMjg0IDEzLjQyOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjI1XCIsZDpcIk05LjAyNDQxIDEzLjI5NTZDMTAuNjU2NyA5LjgzNzkgMTAuNjU4NiA1LjE3NzE1IDkuMDMwMDUgMS43MTY1Nkw5LjQ4MjQ1IDEuNTAzNjZDMTEuMTc0NSA1LjA5OTE5IDExLjE3MjYgOS45MTYyOSA5LjQ3NjU3IDEzLjUwOTFMOS4wMjQ0MSAxMy4yOTU2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuM1wiLGQ6XCJNOS42NjgwOSAxMy4wNjU1QzExLjEwOTcgOS42OTU3MiAxMS4xMTA3IDUuMzEyMSA5LjY3MDg4IDEuOTQwOTVMMTAuMTMwNyAxLjc0NDU3QzExLjYyNDEgNS4yNDEyMSAxMS42MjMxIDkuNzY2ODMgMTAuMTI3OCAxMy4yNjIyTDkuNjY4MDkgMTMuMDY1NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjM1XCIsZDpcIk0xMC4zMzEgMTIuNzQ1NkMxMS41NTUxIDkuNTIwNzMgMTEuNTU2NCA1LjQ5MTAzIDEwLjMzNDcgMi4yNjQ0NEwxMC44MDI0IDIuMDg3NEMxMi4wNjcyIDUuNDI4MTUgMTIuMDY1OSA5LjU4Mzk0IDEwLjc5ODUgMTIuOTIzMUwxMC4zMzEgMTIuNzQ1NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjRcIixkOlwiTTExLjAxNTUgMTIuMjk4NkMxMS45OTM4IDkuMjk3NDQgMTEuOTk0OCA1LjcxMjk2IDExLjAxODQgMi43MTA2N0wxMS40OTM5IDIuNTU2MDNDMTIuNTAzIDUuNjU4OSAxMi41MDIgOS4zNTE3OCAxMS40OTA5IDEyLjQ1MzVMMTEuMDE1NSAxMi4yOTg2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuNDVcIixkOlwiTTExLjcyMTQgMTEuNjY4QzEyLjQyNTQgOS4wMTMwMyAxMi40MjYyIDUuOTk2OTEgMTEuNzIzNyAzLjM0MTE2TDEyLjIwNzEgMy4yMTMyOUMxMi45MzE4IDUuOTUyOTIgMTIuOTMxIDkuMDU3MjggMTIuMjA0NyAxMS43OTYxTDExLjcyMTQgMTEuNjY4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuNVwiLGQ6XCJNMTIuNDQzMiAxMC43NTJDMTIuODUyNCA4LjYzNzYyIDEyLjg1MjMgNi4zNjA4OSAxMi40NDI5IDQuMjQ2NkwxMi45MzM4IDQuMTUxNTVDMTMuMzU1MyA2LjMyODYxIDEzLjM1NTQgOC42Njk4NSAxMi45MzQxIDEwLjg0N0wxMi40NDMyIDEwLjc1MlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGJyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4wNVwiLGQ6XCJNMTIuMTM5OCAzLjg4NjE2QzEzLjg1NTMgNC45NDE1OSAxNSA2LjgzNyAxNSA4Ljk5OTk5QzE1IDEyLjMxMzcgMTIuMzEzNyAxNSA5LjAwMDAxIDE1QzYuODQzNSAxNSA0Ljk1Mjk1IDEzLjg2MjEgMy44OTU2OSAxMi4xNTUyTDQuMzIwNzUgMTEuODkxOUM1LjI5MDY5IDEzLjQ1NzggNy4wMjM3NSAxNC41IDkuMDAwMDEgMTQuNUMxMi4wMzc1IDE0LjUgMTQuNSAxMi4wMzc1IDE0LjUgOC45OTk5OUMxNC41IDcuMDE3OCAxMy40NTE2IDUuMjgwMjYgMTEuODc3OCA0LjMxMjAyTDEyLjEzOTggMy44ODYxNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjJcIixkOlwiTTEyLjg1MSA1LjA3MzJDMTMuODY4NCA2LjA3MTA1IDE0LjUgNy40NjE5OCAxNC41IDguOTk5OTlDMTQuNSAxMi4wMzc1IDEyLjAzNzYgMTQuNSA5LjAwMDAyIDE0LjVDNy40NjIxNCAxNC41IDYuMDcxMzEgMTMuODY4NSA1LjA3MzQ4IDEyLjg1MTJMNS40MzA0MiAxMi41MDExQzYuMzM4MDkgMTMuNDI2NCA3LjYwMTg1IDE0IDkuMDAwMDIgMTRDMTEuNzYxNCAxNCAxNCAxMS43NjE0IDE0IDguOTk5OTlDMTQgNy42MDE3IDEzLjQyNjQgNi4zMzc4NSAxMi41MDA5IDUuNDMwMTdMMTIuODUxIDUuMDczMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjM1XCIsZDpcIk0xMy4zMDIxIDYuNDUwNzFDMTMuNzQ1NSA3LjE5NzM3IDE0IDguMDY5MzQgMTQgOUMxNCAxMS43NjE0IDExLjc2MTQgMTQgOS4wMDAwMSAxNEM4LjA0ODY3IDE0IDcuMTU4NjcgMTMuNzM0MSA2LjQwMTE4IDEzLjI3MjNMNi42NjE0MSAxMi44NDU0QzcuMzQyNzQgMTMuMjYwNyA4LjE0MzA1IDEzLjUgOS4wMDAwMSAxMy41QzExLjQ4NTMgMTMuNSAxMy41IDExLjQ4NTMgMTMuNSA5QzEzLjUgOC4xNjE2NCAxMy4yNzEgNy4zNzc1MyAxMi44NzIyIDYuNzA1OThMMTMuMzAyMSA2LjQ1MDcxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuNVwiLGQ6XCJNMTMuMzc0NCA3Ljk0MDIxQzEzLjQ1NjYgOC4yODAzIDEzLjUgOC42MzUyNCAxMy41IDlDMTMuNSAxMS40ODUzIDExLjQ4NTMgMTMuNSA5LjAwMDAyIDEzLjVDOC42MTEwMyAxMy41IDguMjMzMjEgMTMuNDUwNiA3Ljg3MjY3IDEzLjM1NzZMNy45OTc1OCAxMi44NzM0QzguMzE3NjcgMTIuOTU2IDguNjUzNTIgMTMgOS4wMDAwMiAxM0MxMS4yMDkxIDEzIDEzIDExLjIwOTEgMTMgOUMxMyA4LjY3NTA3IDEyLjk2MTMgOC4zNTk1MiAxMi44ODg0IDguMDU3NTZMMTMuMzc0NCA3Ljk0MDIxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuNjVcIixkOlwiTTEyLjkxNTUgOS44MjEzMkMxMi41ODk4IDExLjM4MTMgMTEuMzU2MiAxMi42MDcyIDkuNzkyMDMgMTIuOTIxNUw5LjY5MzUzIDEyLjQzMTNDMTEuMDYxMyAxMi4xNTY1IDEyLjE0MTMgMTEuMDgzMyAxMi40MjYxIDkuNzE5MTNMMTIuOTE1NSA5LjgyMTMyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS4yNzcxIDcuNTAyNTJDMS4yNzcxIDQuMDY0NTUgNC4wNjQxMyAxLjI3NzUzIDcuNTAyMDkgMS4yNzc1M0MxMC45NCAxLjI3NzUzIDEzLjcyNzEgNC4wNjQ1NSAxMy43MjcxIDcuNTAyNTJDMTMuNzI3MSAxMC45NDA1IDEwLjk0IDEzLjcyNzUgNy41MDIwOSAxMy43Mjc1QzQuMDY0MTIgMTMuNzI3NSAxLjI3NzEgMTAuOTQwNSAxLjI3NzEgNy41MDI1MlpNNy41MDIwOSAyLjIyNzUyQzQuNTg4OCAyLjIyNzUyIDIuMjI3MSA0LjU4OTIyIDIuMjI3MSA3LjUwMjUyQzIuMjI3MSAxMC40MTU4IDQuNTg4OCAxMi43Nzc1IDcuNTAyMDkgMTIuNzc3NUMxMC40MTU0IDEyLjc3NzUgMTIuNzc3MSAxMC40MTU4IDEyLjc3NzEgNy41MDI1MkMxMi43NzcxIDQuNTg5MjIgMTAuNDE1NCAyLjIyNzUyIDcuNTAyMDkgMi4yMjc1MlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHhyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01IDcuNTAwMDNDNSA4LjMyODQ1IDQuMzI4NDMgOS4wMDAwMyAzLjUgOS4wMDAwM0MyLjY3MTU3IDkuMDAwMDMgMiA4LjMyODQ1IDIgNy41MDAwM0MyIDYuNjcxNiAyLjY3MTU3IDYuMDAwMDMgMy41IDYuMDAwMDNDNC4zMjg0MyA2LjAwMDAzIDUgNi42NzE2IDUgNy41MDAwM1pNNS43MTMxMyA4LjY2Mzg4QzUuMjk0NDUgOS40NTgzOCA0LjQ2MDQ4IDEwIDMuNSAxMEMyLjExOTI5IDEwIDEgOC44ODA3NCAxIDcuNTAwMDNDMSA2LjExOTMxIDIuMTE5MjkgNS4wMDAwMyAzLjUgNS4wMDAwM0M0LjQ2MDQ4IDUuMDAwMDMgNS4yOTQ0NSA1LjU0MTY3IDUuNzEzMTMgNi4zMzYxNkw5LjEwNDI0IDQuMjE2NzFDOS4wMzY0MyAzLjk4OTY4IDkgMy43NDkxMSA5IDMuNTAwMDNDOSAyLjExOTMyIDEwLjExOTMgMS4wMDAwMyAxMS41IDEuMDAwMDNDMTIuODgwNyAxLjAwMDAzIDE0IDIuMTE5MzIgMTQgMy41MDAwM0MxNCA0Ljg4MDc0IDEyLjg4MDcgNi4wMDAwMyAxMS41IDYuMDAwMDNDMTAuNjkxNSA2LjAwMDAzIDkuOTcyNjQgNS42MTYyNCA5LjUxNTY2IDUuMDIwOUw1Ljk4NTMgNy4yMjczOEM1Ljk5NTAyIDcuMzE2OTIgNiA3LjQwNzg5IDYgNy41MDAwM0M2IDcuNTkyMTYgNS45OTUwMiA3LjY4MzEyIDUuOTg1MyA3Ljc3MjY3TDkuNTE1NjcgOS45NzkxNUM5Ljk3MjY1IDkuMzgzODIgMTAuNjkxNSA5LjAwMDAzIDExLjUgOS4wMDAwM0MxMi44ODA3IDkuMDAwMDMgMTQgMTAuMTE5MyAxNCAxMS41QzE0IDEyLjg4MDcgMTIuODgwNyAxNCAxMS41IDE0QzEwLjExOTMgMTQgOSAxMi44ODA3IDkgMTEuNUM5IDExLjI1MDkgOS4wMzY0MyAxMS4wMTA0IDkuMTA0MjUgMTAuNzgzM0w1LjcxMzEzIDguNjYzODhaTTExLjUgNS4wMDAwM0MxMi4zMjg0IDUuMDAwMDMgMTMgNC4zMjg0NiAxMyAzLjUwMDAzQzEzIDIuNjcxNiAxMi4zMjg0IDIuMDAwMDMgMTEuNSAyLjAwMDAzQzEwLjY3MTYgMi4wMDAwMyAxMCAyLjY3MTYgMTAgMy41MDAwM0MxMCA0LjMyODQ2IDEwLjY3MTYgNS4wMDAwMyAxMS41IDUuMDAwMDNaTTEzIDExLjVDMTMgMTIuMzI4NSAxMi4zMjg0IDEzIDExLjUgMTNDMTAuNjcxNiAxMyAxMCAxMi4zMjg1IDEwIDExLjVDMTAgMTAuNjcxNiAxMC42NzE2IDEwIDExLjUgMTBDMTIuMzI4NCAxMCAxMyAxMC42NzE2IDEzIDExLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxfcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy41IDUuMDAwMDZDMy4yMjM4NiA1LjAwMDA2IDMgNS4yMjM5MiAzIDUuNTAwMDZMMyAxMS41MDAxQzMgMTEuNzc2MiAzLjIyMzg2IDEyLjAwMDEgMy41IDEyLjAwMDFMMTEuNSAxMi4wMDAxQzExLjc3NjEgMTIuMDAwMSAxMiAxMS43NzYyIDEyIDExLjUwMDFMMTIgNS41MDAwNkMxMiA1LjIyMzkyIDExLjc3NjEgNS4wMDAwNiAxMS41IDUuMDAwMDZMMTAuMjUgNS4wMDAwNkM5Ljk3Mzg2IDUuMDAwMDYgOS43NSA0Ljc3NjIgOS43NSA0LjUwMDA2QzkuNzUgNC4yMjM5MiA5Ljk3Mzg2IDQuMDAwMDYgMTAuMjUgNC4wMDAwNkwxMS41IDQuMDAwMDZDMTIuMzI4NCA0LjAwMDA2IDEzIDQuNjcxNjMgMTMgNS41MDAwNkwxMyAxMS41MDAxQzEzIDEyLjMyODUgMTIuMzI4NCAxMy4wMDAxIDExLjUgMTMuMDAwMUwzLjUgMTMuMDAwMUMyLjY3MTU3IDEzLjAwMDEgMiAxMi4zMjg1IDIgMTEuNTAwMUwyIDUuNTAwMDZDMiA0LjY3MTYzIDIuNjcxNTcgNC4wMDAwNiAzLjUgNC4wMDAwNkw0Ljc1IDQuMDAwMDZDNS4wMjYxNCA0LjAwMDA2IDUuMjUgNC4yMjM5MiA1LjI1IDQuNTAwMDZDNS4yNSA0Ljc3NjIgNS4wMjYxNCA1LjAwMDA2IDQuNzUgNS4wMDAwNkwzLjUgNS4wMDAwNlpNNyAxLjYzNjRMNS41NjgyIDMuMDY4MkM1LjM5MjQ2IDMuMjQzOTMgNS4xMDc1NCAzLjI0MzkzIDQuOTMxOCAzLjA2ODJDNC43NTYwNyAyLjg5MjQ2IDQuNzU2MDcgMi42MDc1NCA0LjkzMTggMi40MzE4TDcuMTgxOCAwLjE4MTgwMkM3LjI2NjE5IDAuMDk3NDEgNy4zODA2NSAwLjA0OTk5OSA3LjUgMC4wNDk5OTlDNy42MTkzNSAwLjA0OTk5OSA3LjczMzgxIDAuMDk3NDEgNy44MTgyIDAuMTgxODAyTDEwLjA2ODIgMi40MzE4QzEwLjI0MzkgMi42MDc1NCAxMC4yNDM5IDIuODkyNDYgMTAuMDY4MiAzLjA2ODJDOS44OTI0NiAzLjI0MzkzIDkuNjA3NTQgMy4yNDM5MyA5LjQzMTggMy4wNjgyTDggMS42MzY0TDggOC41QzggOC43NzYxNCA3Ljc3NjE0IDkgNy41IDlDNy4yMjM4NiA5IDcgOC43NzYxNCA3IDguNUw3IDEuNjM2NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE9yPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMi4zNTM2IDEuMTQ2NDVDMTIuMTU4MyAwLjk1MTE4NCAxMS44NDE3IDAuOTUxMTg0IDExLjY0NjQgMS4xNDY0NUMxMS40NTEyIDEuMzQxNzEgMTEuNDUxMiAxLjY1ODI5IDExLjY0NjQgMS44NTM1NUwxMi43OTI5IDNIMTJDMTAuNzAzNyAzIDkuNzExMTEgMy41ODQyMyA4Ljg3MjQ4IDQuMzg5MzFDOC4yMDA2NSA1LjAzNDI3IDcuNTkzNDkgNS44NTY4NCA2Ljk5NDYxIDYuNjY4MkM2Ljg2Mjg3IDYuODQ2NjggNi43MzE1NCA3LjAyNDYyIDYuNiA3LjJDNS4xMDg3NCA5LjE4ODM1IDMuNDkwMzcgMTEgMC41IDExQzAuMjIzODU4IDExIDAgMTEuMjIzOSAwIDExLjVDMCAxMS43NzYxIDAuMjIzODU4IDEyIDAuNSAxMkM0LjAwOTYzIDEyIDUuODkxMjYgOS44MTE2NSA3LjQgNy44QzcuNTQzNjcgNy42MDg0NSA3LjY4MzIgNy40MTk2MiA3LjgxOTk2IDcuMjM0NTRMNy44MjAwNSA3LjIzNDQzTDcuODIwMDYgNy4yMzQ0MUM4LjQxNjc0IDYuNDI2OTUgOC45NjA2OSA1LjY5MDg1IDkuNTY1MDIgNS4xMTA2OUMxMC4yODg5IDQuNDE1NzcgMTEuMDQ2MyA0IDEyIDRIMTIuNzkyOUwxMS42NDY0IDUuMTQ2NDVDMTEuNDUxMiA1LjM0MTcxIDExLjQ1MTIgNS42NTgyOSAxMS42NDY0IDUuODUzNTVDMTEuODQxNyA2LjA0ODgyIDEyLjE1ODMgNi4wNDg4MiAxMi4zNTM2IDUuODUzNTVMMTQuMzUzNiAzLjg1MzU1QzE0LjU0ODggMy42NTgyOSAxNC41NDg4IDMuMzQxNzEgMTQuMzUzNiAzLjE0NjQ1TDEyLjM1MzYgMS4xNDY0NVpNMC41IDNDMy4zNTI3OCAzIDUuMTI5OTIgNC40NDU4OCA2LjUwNTQ4IDYuMDY3NDZMNi4zNzYyIDYuMjQyNjZDNi4yNDgzIDYuNDE2MSA2LjEyMjkzIDYuNTg2MDkgNiA2Ljc1QzUuOTYzOTcgNi43OTgwNCA1LjkyNzk4IDYuODQ1ODEgNS44OTIgNi44OTMzMUM0LjU3MzQ4IDUuMjkzMDYgMy4wMjYzNyA0IDAuNSA0QzAuMjIzODU4IDQgMCAzLjc3NjE0IDAgMy41QzAgMy4yMjM4NiAwLjIyMzg1OCAzIDAuNSAzWk04Ljg3MjQ4IDEwLjYxMDdDOC4zNzI4NCAxMC4xMzEgNy45MDg5NyA5LjU1MzE0IDcuNDU3NjcgOC45NTQ2OEM3LjY0Njg4IDguNzE2OTMgNy44MjcwNCA4LjQ4MDYxIDggOC4yNUw4LjA4OTg3IDguMTI5ODdDOC41ODQxMiA4Ljc5NDAyIDkuMDUyODggOS4zOTc2NiA5LjU2NTAyIDkuODg5MzFDMTAuMjg4OSAxMC41ODQyIDExLjA0NjMgMTEgMTIgMTFIMTIuNzkyOUwxMS42NDY0IDkuODUzNTVDMTEuNDUxMiA5LjY1ODI5IDExLjQ1MTIgOS4zNDE3MSAxMS42NDY0IDkuMTQ2NDVDMTEuODQxNyA4Ljk1MTE4IDEyLjE1ODMgOC45NTExOCAxMi4zNTM2IDkuMTQ2NDVMMTQuMzUzNiAxMS4xNDY0QzE0LjU0ODggMTEuMzQxNyAxNC41NDg4IDExLjY1ODMgMTQuMzUzNiAxMS44NTM2TDEyLjM1MzYgMTMuODUzNkMxMi4xNTgzIDE0LjA0ODggMTEuODQxNyAxNC4wNDg4IDExLjY0NjQgMTMuODUzNkMxMS40NTEyIDEzLjY1ODMgMTEuNDUxMiAxMy4zNDE3IDExLjY0NjQgMTMuMTQ2NEwxMi43OTI5IDEySDEyQzEwLjcwMzcgMTIgOS43MTExMSAxMS40MTU4IDguODcyNDggMTAuNjEwN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LExyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMS41IDMuMDQ5OTlDMTEuNzQ4NSAzLjA0OTk5IDExLjk1IDMuMjUxNDYgMTEuOTUgMy40OTk5OVY3LjQ5OTk5QzExLjk1IDcuNzQ4NTIgMTEuNzQ4NSA3Ljk0OTk5IDExLjUgNy45NDk5OUMxMS4yNTE1IDcuOTQ5OTkgMTEuMDUgNy43NDg1MiAxMS4wNSA3LjQ5OTk5VjQuNTg2MzlMNC41ODYzOCAxMS4wNUg3LjQ5OTk5QzcuNzQ4NTIgMTEuMDUgNy45NDk5OSAxMS4yNTE1IDcuOTQ5OTkgMTEuNUM3Ljk0OTk5IDExLjc0ODUgNy43NDg1MiAxMS45NSA3LjQ5OTk5IDExLjk1TDMuNDk5OTkgMTEuOTVDMy4zODA2NCAxMS45NSAzLjI2NjE4IDExLjkwMjYgMy4xODE3OSAxMS44MTgyQzMuMDk3NCAxMS43MzM4IDMuMDQ5OTkgMTEuNjE5MyAzLjA0OTk5IDExLjVMMy4wNDk5OSA3LjQ5OTk5QzMuMDQ5OTkgNy4yNTE0NiAzLjI1MTQ2IDcuMDQ5OTkgMy40OTk5OSA3LjA0OTk5QzMuNzQ4NTIgNy4wNDk5OSAzLjk0OTk5IDcuMjUxNDYgMy45NDk5OSA3LjQ5OTk5TDMuOTQ5OTkgMTAuNDEzNkwxMC40MTM2IDMuOTQ5OTlMNy40OTk5OSAzLjk0OTk5QzcuMjUxNDYgMy45NDk5OSA3LjA0OTk5IDMuNzQ4NTIgNy4wNDk5OSAzLjQ5OTk5QzcuMDQ5OTkgMy4yNTE0NiA3LjI1MTQ2IDMuMDQ5OTkgNy40OTk5OSAzLjA0OTk5TDExLjUgMy4wNDk5OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEVyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUzNzMxIDAuODI2ODczQzcuNTEyNSAwLjgyNDM5MiA3LjQ4NzUgMC44MjQzOTIgNy40NjI2OSAwLjgyNjg3M0wzLjk2MjY5IDEuMTc2ODdDMy44NTY3MiAxLjE4NzQ3IDMuNzYwMjUgMS4yNDI2MiAzLjY5NzM2IDEuMzI4NTdMMC42OTk3NzEgNS40MjUyOEMwLjY1NDA0NiA1LjQ4NjI3IDAuNjI2NDcgNS41NjE2NSAwLjYyNTA1NyA1LjY0MzRDMC42MjUwMTkgNS42NDU2IDAuNjI1IDUuNjQ3ODEgMC42MjUgNS42NTAwMUMwLjYyNSA1LjY1MDUyIDAuNjI1MDAxIDUuNjUxMDMgMC42MjUwMDMgNS42NTE1M0MwLjYyNTM2MyA1Ljc0MjM3IDAuNjU4MDIxIDUuODI1NTkgMC43MTIwODcgNS44OTAzTDcuMjEwNDIgMTMuNzg4M0M3LjI4MTY1IDEzLjg3NDkgNy4zODc4OSAxMy45MjUgNy41IDEzLjkyNUM3LjYxMjExIDEzLjkyNSA3LjcxODM1IDEzLjg3NDkgNy43ODk1OCAxMy43ODgzTDE0LjI4NzkgNS44OTAzMUMxNC4zNDIgNS44MjU2IDE0LjM3NDYgNS43NDIzNyAxNC4zNzUgNS42NTE1M0MxNC4zNzUgNS42NTEwMyAxNC4zNzUgNS42NTA1MiAxNC4zNzUgNS42NTAwMUMxNC4zNzUgNS42NDg0OSAxNC4zNzUgNS42NDY5NyAxNC4zNzUgNS42NDU0NUMxNC4zNzQ5IDUuNjM5NjMgMTQuMzc0NyA1LjYzMzgyIDE0LjM3NDQgNS42MjgwMUMxNC4zNyA1LjU1MjE5IDE0LjM0MzEgNS40ODI0MiAxNC4zMDAyIDUuNDI1MjdMMTEuMzAyNiAxLjMyODU3QzExLjIzOTcgMS4yNDI2MiAxMS4xNDMzIDEuMTg3NDcgMTEuMDM3MyAxLjE3Njg3TDcuNTM3MzEgMC44MjY4NzNaTTEwLjkyNSA1LjI3NTAxVjUuMjUyMzZMMTAuOTIyMyA1LjI3NTAxSDEwLjkyNVpNMTAuOTM0MiA1LjE3NDk4SDEzLjE4NzdMMTEuMjQ5NSAyLjUyNjFMMTAuOTM0MiA1LjE3NDk4Wk0xMC41NzA3IDEuODgzOTVMOC4wNDQzMiAxLjYzMTMxTDEwLjE3NDcgNS4yMTAzNEwxMC41NzA3IDEuODgzOTVaTTYuOTU1NjggMS42MzEzMUw0LjQyOTMxIDEuODgzOTVMNC44MjUzMSA1LjIxMDM0TDYuOTU1NjggMS42MzEzMVpNMy43NTA0NiAyLjUyNjFMMS44MTIyNiA1LjE3NDk4SDQuMDY1OEwzLjc1MDQ2IDIuNTI2MVpNMS43OTQxNiA2LjAyNTAxTDYuNzU4NjEgMTIuMDU4N0w0LjIyMzcxIDYuMDY2OUM0LjIxNzg3IDYuMDUzMSA0LjIxMzE0IDYuMDM5MSA0LjIwOTQ5IDYuMDI1MDFIMS43OTQxNlpNNS4xNTA1NSA2LjAyNTAxTDcuNDk5OTkgMTIuMTA4NUw5Ljg0OTQzIDYuMDI1MDFIOS43ODY4MUg1LjIxMzE5SDUuMTUwNTVaTTEwLjc5MDUgNi4wMjUwMUMxMC43ODY5IDYuMDM5MSAxMC43ODIxIDYuMDUzMSAxMC43NzYzIDYuMDY2OUw4LjI0MTM5IDEyLjA1ODdMMTMuMjA1OCA2LjAyNTAxSDEwLjc5MDVaTTcuNSAyLjE4MzE3TDkuMzQwMzggNS4yNzUwMUg1LjY1OTYyTDcuNSAyLjE4MzE3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sU3I9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuMTA4NzYgMTRMOS40NjU4MiAxSDEwLjgxNzhMNS40NjA3NCAxNEg0LjEwODc2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sanI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEwLjMwMDQgNy40OTk5MUMxMC4zMDA0IDguNDk0MyA5LjQ5NDI2IDkuMzAwNDEgOC40OTk4OCA5LjMwMDQxQzcuNTA1NDkgOS4zMDA0MSA2LjY5OTM4IDguNDk0MyA2LjY5OTM4IDcuNDk5OTFDNi42OTkzOCA2LjUwNTUzIDcuNTA1NDkgNS42OTk0MiA4LjQ5OTg4IDUuNjk5NDJDOS40OTQyNiA1LjY5OTQyIDEwLjMwMDQgNi41MDU1MyAxMC4zMDA0IDcuNDk5OTFaTTExLjIwNSA4QzEwLjk2OTkgOS4yODAyOSA5Ljg0ODE2IDEwLjI1MDQgOC40OTk4OCAxMC4yNTA0QzcuMTUxNiAxMC4yNTA0IDYuMDI5OSA5LjI4MDI5IDUuNzk0NzMgOEgwLjVDMC4yMjM4NTggOCAwIDcuNzc2MTQgMCA3LjVDMCA3LjIyMzg2IDAuMjIzODU4IDcgMC41IDdINS43OTQ3QzYuMDI5OCA1LjcxOTYyIDcuMTUxNTQgNC43NDk0MiA4LjQ5OTg4IDQuNzQ5NDJDOS44NDgyMiA0Ljc0OTQyIDEwLjk2OTkgNS43MTk2MiAxMS4yMDUxIDdIMTQuNUMxNC43NzYxIDcgMTUgNy4yMjM4NiAxNSA3LjVDMTUgNy43NzYxNCAxNC43NzYxIDggMTQuNSA4SDExLjIwNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE1yPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xNC40OTk5IDAuOTk5OTk0QzE0LjIyMzcgMC45OTk5OTQgMTMuOTk5OSAxLjIyMzg1IDEzLjk5OTkgMS40OTk5OUwxMy45OTk5IDUuOTk5OTVMOS45OTk5MiA1Ljk5OTk1QzkuNDQ3NjQgNS45OTk5NSA4Ljk5OTkzIDYuNDQ3NjYgOC45OTk5MyA2Ljk5OTk0TDguOTk5OTMgNy45OTk5NEM4Ljk5OTkzIDguNTUyMjIgOS40NDc2NCA4Ljk5OTkzIDkuOTk5OTIgOC45OTk5M0wxMy45OTk5IDguOTk5OTNMMTMuOTk5OSAxMy40OTk5QzEzLjk5OTkgMTMuNzc2IDE0LjIyMzcgMTMuOTk5OSAxNC40OTk5IDEzLjk5OTlDMTQuNzc2IDEzLjk5OTkgMTQuOTk5OSAxMy43NzYgMTQuOTk5OSAxMy40OTk5TDE0Ljk5OTkgMS40OTk5OUMxNC45OTk5IDEuMjIzODUgMTQuNzc2IDAuOTk5OTk0IDE0LjQ5OTkgMC45OTk5OTRaTTQuOTk5OTYgNS45OTk5NUwwLjk5OTk5MiA1Ljk5OTk1TDAuOTk5OTkyIDEuNDk5OTlDMC45OTk5OTIgMS4yMjM4NSAwLjc3NjEzNiAwLjk5OTk5NCAwLjQ5OTk5NiAwLjk5OTk5NEMwLjIyMzg1NiAwLjk5OTk5NCAtOS43ODUyZS0wOSAxLjIyMzg1IC0yLjE4NTU3ZS0wOCAxLjQ5OTk5TDQuMDcyNzllLTA3IDEzLjQ5OTlDMy45NTIwOGUtMDcgMTMuNzc2IDAuMjIzODU1IDEzLjk5OTkgMC40OTk5OTYgMTMuOTk5OUMwLjc3NjEzNiAxMy45OTk5IDAuOTk5OTkyIDEzLjc3NiAwLjk5OTk5MiAxMy40OTk5TDAuOTk5OTkyIDguOTk5OTNMNC45OTk5NiA4Ljk5OTkzQzUuNTUyMjQgOC45OTk5MyA1Ljk5OTk1IDguNTUyMjIgNS45OTk5NSA3Ljk5OTkzTDUuOTk5OTUgNi45OTk5NEM1Ljk5OTk1IDYuNDQ3NjYgNS41NTIyNCA1Ljk5OTk1IDQuOTk5OTYgNS45OTk5NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGtyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wLjk5OTg3OCAwLjVDMC45OTk4NzggMC4yMjM4NTggMS4yMjM3NCAwIDEuNDk5ODggMEgxMy40OTk5QzEzLjc3NiAwIDEzLjk5OTkgMC4yMjM4NTggMTMuOTk5OSAwLjVDMTMuOTk5OSAwLjc3NjE0MiAxMy43NzYgMSAxMy40OTk5IDFMOSAxVjVDOSA1LjU1MjI4IDguNTUyMjggNiA4IDZIN0M2LjQ0NzcyIDYgNiA1LjU1MjI4IDYgNVYxSDEuNDk5ODhDMS4yMjM3NCAxIDAuOTk5ODc4IDAuNzc2MTQyIDAuOTk5ODc4IDAuNVpNNyA5QzYuNDQ3NzIgOSA2IDkuNDQ3NzEgNiAxMFYxNEgxLjQ5OTg4QzEuMjIzNzQgMTQgMC45OTk4NzggMTQuMjIzOSAwLjk5OTg3OCAxNC41QzAuOTk5ODc4IDE0Ljc3NjEgMS4yMjM3NCAxNSAxLjQ5OTg4IDE1SDEzLjQ5OTlDMTMuNzc2IDE1IDEzLjk5OTkgMTQuNzc2MSAxMy45OTk5IDE0LjVDMTMuOTk5OSAxNC4yMjM5IDEzLjc3NiAxNCAxMy40OTk5IDE0SDlWMTBDOSA5LjQ0NzcyIDguNTUyMjggOSA4IDlIN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFJyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xNC40OTk5IDAuOTk5OTkyQzE0LjIyMzcgMC45OTk5OTIgMTMuOTk5OSAxLjIyMzg1IDEzLjk5OTkgMS40OTk5OUwxMy45OTk5IDEzLjQ5OTlDMTMuOTk5OSAxMy43NzYgMTQuMjIzNyAxMy45OTk5IDE0LjQ5OTkgMTMuOTk5OUMxNC43NzYgMTMuOTk5OSAxNC45OTk5IDEzLjc3NiAxNC45OTk5IDEzLjQ5OTlMMTQuOTk5OSAxLjQ5OTk5QzE0Ljk5OTkgMS4yMjM4NSAxNC43NzYgMC45OTk5OTIgMTQuNDk5OSAwLjk5OTk5MlpNMC40OTk5OTYgMC45OTk5OTJDMC4yMjM4NTYgMC45OTk5OTIgLTkuNzg1MDllLTA5IDEuMjIzODUgLTIuMTg1NTZlLTA4IDEuNDk5OTlMNC4wNzI3OWUtMDcgMTMuNDk5OUMzLjk1MjA4ZS0wNyAxMy43NzYgMC4yMjM4NTUgMTMuOTk5OSAwLjQ5OTk5NiAxMy45OTk5QzAuNzc2MTM2IDEzLjk5OTkgMC45OTk5OTIgMTMuNzc2IDAuOTk5OTkyIDEzLjQ5OTlMMC45OTk5OTIgMS40OTk5OUMwLjk5OTk5MiAxLjIyMzg1IDAuNzc2MTM2IDAuOTk5OTkyIDAuNDk5OTk2IDAuOTk5OTkyWk0xLjk5OTk4IDYuOTk5OTRDMS45OTk5OCA2LjQ0NzY2IDIuNDQ3NjkgNS45OTk5NSAyLjk5OTk4IDUuOTk5OTVMNS45OTk5NSA1Ljk5OTk1QzYuNTUyMjMgNS45OTk5NSA2Ljk5OTk0IDYuNDQ3NjYgNi45OTk5NCA2Ljk5OTk0TDYuOTk5OTQgNy45OTk5M0M2Ljk5OTk0IDguNTUyMjEgNi41NTIyMyA4Ljk5OTkyIDUuOTk5OTUgOC45OTk5MkwyLjk5OTk4IDguOTk5OTJDMi40NDc3IDguOTk5OTIgMS45OTk5OCA4LjU1MjIxIDEuOTk5OTggNy45OTk5M0wxLjk5OTk4IDYuOTk5OTRaTTguOTk5OTMgNS45OTk5NUM4LjQ0NzY1IDUuOTk5OTUgNy45OTk5MyA2LjQ0NzY2IDcuOTk5OTMgNi45OTk5NEw3Ljk5OTkzIDcuOTk5OTNDNy45OTk5MyA4LjU1MjIxIDguNDQ3NjUgOC45OTk5MiA4Ljk5OTkzIDguOTk5OTJMMTEuOTk5OSA4Ljk5OTkyQzEyLjU1MjIgOC45OTk5MiAxMi45OTk5IDguNTUyMjEgMTIuOTk5OSA3Ljk5OTkzTDEyLjk5OTkgNi45OTk5NEMxMi45OTk5IDYuNDQ3NjYgMTIuNTUyMiA1Ljk5OTk1IDExLjk5OTkgNS45OTk5NUw4Ljk5OTkzIDUuOTk5OTVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxQcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC45OTk4NzggMC41QzAuOTk5ODc4IDAuMjIzODU4IDEuMjIzNzQgMCAxLjQ5OTg4IDBIMTMuNDk5OUMxMy43NzYgMCAxMy45OTk5IDAuMjIzODU4IDEzLjk5OTkgMC41QzEzLjk5OTkgMC43NzYxNDIgMTMuNzc2IDEgMTMuNDk5OSAxSDEuNDk5ODhDMS4yMjM3NCAxIDAuOTk5ODc4IDAuNzc2MTQyIDAuOTk5ODc4IDAuNVpNNyAyQzYuNDQ3NzIgMiA2IDIuNDQ3NzIgNiAzVjZDNiA2LjU1MjI4IDYuNDQ3NzIgNyA3IDdIOEM4LjU1MjI4IDcgOSA2LjU1MjI4IDkgNlYzQzkgMi40NDc3MiA4LjU1MjI4IDIgOCAySDdaTTcgOEM2LjQ0NzcyIDggNiA4LjQ0NzcxIDYgOVYxMkM2IDEyLjU1MjMgNi40NDc3MiAxMyA3IDEzSDhDOC41NTIyOCAxMyA5IDEyLjU1MjMgOSAxMlY5QzkgOC40NDc3MiA4LjU1MjI4IDggOCA4SDdaTTEuNDk5ODggMTRDMS4yMjM3NCAxNCAwLjk5OTg3OCAxNC4yMjM5IDAuOTk5ODc4IDE0LjVDMC45OTk4NzggMTQuNzc2MSAxLjIyMzc0IDE1IDEuNDk5ODggMTVIMTMuNDk5OUMxMy43NzYgMTUgMTMuOTk5OSAxNC43NzYxIDEzLjk5OTkgMTQuNUMxMy45OTk5IDE0LjIyMzkgMTMuNzc2IDE0IDEzLjQ5OTkgMTRIMS40OTk4OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LElyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ2OTY4IDEuMDUwODVDNy42NDEyMiAxLjEzNDc1IDcuNzUgMS4zMDkwNCA3Ljc1IDEuNVYxMy41QzcuNzUgMTMuNjkxIDcuNjQxMjIgMTMuODY1MyA3LjQ2OTY4IDEzLjk0OTJDNy4yOTgxMyAxNC4wMzMxIDcuMDkzNzcgMTQuMDExOSA2Ljk0MzAzIDEzLjg5NDdMMy4yMjEzIDExSDEuNUMwLjY3MTU3MSAxMSAwIDEwLjMyODQgMCA5LjVWNS41QzAgNC42NzE1OCAwLjY3MTU3MyA0IDEuNSA0SDMuMjIxM0w2Ljk0MzAzIDEuMTA1MzNDNy4wOTM3NyAwLjk4ODA4NSA3LjI5ODEzIDAuOTY2OTQ1IDcuNDY5NjggMS4wNTA4NVpNNi43NSAyLjUyMjMyTDMuNjk5ODMgNC44OTQ2OEMzLjYxMjA2IDQuOTYyOTQgMy41MDQwNSA1IDMuMzkyODYgNUgxLjVDMS4yMjM4NiA1IDEgNS4yMjM4NiAxIDUuNVY5LjVDMSA5Ljc3NjE1IDEuMjIzODYgMTAgMS41IDEwSDMuMzkyODZDMy41MDQwNSAxMCAzLjYxMjA2IDEwLjAzNzEgMy42OTk4MyAxMC4xMDUzTDYuNzUgMTIuNDc3N1YyLjUyMjMyWk0xMC4yNzg0IDMuODQ4MDRDMTAuNDYyMyAzLjcyNTY3IDEwLjcxMDYgMy43NzU1NyAxMC44MzMgMy45NTk0OUMxMi4yNTU4IDYuMDk3OTggMTIuMjU1OCA4LjkwMTk5IDEwLjgzMyAxMS4wNDA1QzEwLjcxMDYgMTEuMjI0NCAxMC40NjIzIDExLjI3NDMgMTAuMjc4NCAxMS4xNTE5QzEwLjA5NDQgMTEuMDI5NiAxMC4wNDQ1IDEwLjc4MTMgMTAuMTY2OSAxMC41OTczQzExLjQxMTEgOC43MjcyOCAxMS40MTExIDYuMjcyNjkgMTAuMTY2OSA0LjQwMjY0QzEwLjA0NDUgNC4yMTg3MSAxMC4wOTQ0IDMuOTcwNDEgMTAuMjc4NCAzLjg0ODA0Wk0xMi42Nzg1IDEuNDMwNDRDMTIuNTM1NiAxLjI2MTkgMTIuMjgzMiAxLjI0MTA0IDEyLjExNDcgMS4zODM4NkMxMS45NDYyIDEuNTI2NjcgMTEuOTI1MyAxLjc3OTA4IDEyLjA2ODEgMS45NDc2MkMxNC43NzczIDUuMTQ0ODggMTQuNzc3MyA5Ljg1NTEzIDEyLjA2ODEgMTMuMDUyNEMxMS45MjUzIDEzLjIyMDkgMTEuOTQ2MiAxMy40NzMzIDEyLjExNDcgMTMuNjE2MUMxMi4yODMyIDEzLjc1OSAxMi41MzU2IDEzLjczODEgMTIuNjc4NSAxMy41Njk2QzE1LjY0MDYgMTAuMDczOSAxNS42NDA2IDQuOTI2MTIgMTIuNjc4NSAxLjQzMDQ0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTggMS41QzggMS4zMTA2MiA3Ljg5MyAxLjEzNzQ5IDcuNzIzNjEgMS4wNTI3OUM3LjU1NDIxIDAuOTY4MDkzIDcuMzUxNTEgMC45ODYzNzEgNy4yIDEuMUwzLjMzMzMzIDRIMS41QzAuNjcxNTczIDQgMCA0LjY3MTU4IDAgNS41VjkuNUMwIDEwLjMyODQgMC42NzE1NzMgMTEgMS41IDExSDMuMzMzMzNMNy4yIDEzLjlDNy4zNTE1MSAxNC4wMTM2IDcuNTU0MjEgMTQuMDMxOSA3LjcyMzYxIDEzLjk0NzJDNy44OTMgMTMuODYyNSA4IDEzLjY4OTQgOCAxMy41VjEuNVpNMy44IDQuOUw3IDIuNVYxMi41TDMuOCAxMC4xQzMuNzEzNDUgMTAuMDM1MSAzLjYwODE5IDEwIDMuNSAxMEgxLjVDMS4yMjM4NiAxMCAxIDkuNzc2MTQgMSA5LjVWNS41QzEgNS4yMjM4NiAxLjIyMzg2IDUgMS41IDVIMy41QzMuNjA4MTkgNSAzLjcxMzQ1IDQuOTY0OTEgMy44IDQuOVpNMTAuODMzIDMuOTU5NDlDMTAuNzEwNiAzLjc3NTU3IDEwLjQ2MjMgMy43MjU2NyAxMC4yNzg0IDMuODQ4MDRDMTAuMDk0NCAzLjk3MDQxIDEwLjA0NDUgNC4yMTg3MSAxMC4xNjY5IDQuNDAyNjRDMTEuNDExMSA2LjI3MjY4IDExLjQxMTEgOC43MjcyOCAxMC4xNjY5IDEwLjU5NzNDMTAuMDQ0NSAxMC43ODEzIDEwLjA5NDQgMTEuMDI5NiAxMC4yNzg0IDExLjE1MTlDMTAuNDYyMyAxMS4yNzQzIDEwLjcxMDYgMTEuMjI0NCAxMC44MzMgMTEuMDQwNUMxMi4yNTU4IDguOTAxOTkgMTIuMjU1OCA2LjA5Nzk4IDEwLjgzMyAzLjk1OTQ5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNzIzNjEgMS4wNTI3OUM3Ljg5MyAxLjEzNzQ5IDggMS4zMTA2MiA4IDEuNVYxMy41QzggMTMuNjg5NCA3Ljg5MyAxMy44NjI1IDcuNzIzNjEgMTMuOTQ3MkM3LjU1NDIxIDE0LjAzMTkgNy4zNTE1MSAxNC4wMTM2IDcuMiAxMy45TDMuMzMzMzMgMTFIMS41QzAuNjcxNTczIDExIDAgMTAuMzI4NCAwIDkuNVY1LjVDMCA0LjY3MTU4IDAuNjcxNTczIDQgMS41IDRIMy4zMzMzM0w3LjIgMS4xQzcuMzUxNTEgMC45ODYzNzEgNy41NTQyMSAwLjk2ODA5MyA3LjcyMzYxIDEuMDUyNzlaTTcgMi41TDMuOCA0LjlDMy43MTM0NSA0Ljk2NDkxIDMuNjA4MTkgNSAzLjUgNUgxLjVDMS4yMjM4NiA1IDEgNS4yMjM4NiAxIDUuNVY5LjVDMSA5Ljc3NjE0IDEuMjIzODYgMTAgMS41IDEwSDMuNUMzLjYwODE5IDEwIDMuNzEzNDUgMTAuMDM1MSAzLjggMTAuMUw3IDEyLjVWMi41Wk0xNC44NTM2IDUuMTQ2NDVDMTUuMDQ4OCA1LjM0MTcxIDE1LjA0ODggNS42NTgyOSAxNC44NTM2IDUuODUzNTVMMTMuMjA3MSA3LjVMMTQuODUzNiA5LjE0NjQ1QzE1LjA0ODggOS4zNDE3MSAxNS4wNDg4IDkuNjU4MjkgMTQuODUzNiA5Ljg1MzU1QzE0LjY1ODMgMTAuMDQ4OCAxNC4zNDE3IDEwLjA0ODggMTQuMTQ2NCA5Ljg1MzU1TDEyLjUgOC4yMDcxMUwxMC44NTM2IDkuODUzNTVDMTAuNjU4MyAxMC4wNDg4IDEwLjM0MTcgMTAuMDQ4OCAxMC4xNDY0IDkuODUzNTVDOS45NTExOCA5LjY1ODI5IDkuOTUxMTggOS4zNDE3MSAxMC4xNDY0IDkuMTQ2NDVMMTEuNzkyOSA3LjVMMTAuMTQ2NCA1Ljg1MzU1QzkuOTUxMTggNS42NTgyOSA5Ljk1MTE4IDUuMzQxNzEgMTAuMTQ2NCA1LjE0NjQ1QzEwLjM0MTcgNC45NTExOCAxMC42NTgzIDQuOTUxMTggMTAuODUzNiA1LjE0NjQ1TDEyLjUgNi43OTI4OUwxNC4xNDY0IDUuMTQ2NDVDMTQuMzQxNyA0Ljk1MTE4IDE0LjY1ODMgNC45NTExOCAxNC44NTM2IDUuMTQ2NDVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxIcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOCAxLjVDOCAxLjMxMDYyIDcuODkzIDEuMTM3NDkgNy43MjM2MSAxLjA1Mjc5QzcuNTU0MjEgMC45NjgwOTMgNy4zNTE1MSAwLjk4NjM3MSA3LjIgMS4xTDMuMzMzMzMgNEgxLjVDMC42NzE1NzMgNCAwIDQuNjcxNTggMCA1LjVWOS41QzAgMTAuMzI4NCAwLjY3MTU3MyAxMSAxLjUgMTFIMy4zMzMzM0w3LjIgMTMuOUM3LjM1MTUxIDE0LjAxMzYgNy41NTQyMSAxNC4wMzE5IDcuNzIzNjEgMTMuOTQ3MkM3Ljg5MyAxMy44NjI1IDggMTMuNjg5NCA4IDEzLjVWMS41Wk0zLjggNC45TDcgMi41VjEyLjVMMy44IDEwLjFDMy43MTM0NSAxMC4wMzUxIDMuNjA4MTkgMTAgMy41IDEwSDEuNUMxLjIyMzg2IDEwIDEgOS43NzYxNCAxIDkuNVY1LjVDMSA1LjIyMzg2IDEuMjIzODYgNSAxLjUgNUgzLjVDMy42MDgxOSA1IDMuNzEzNDUgNC45NjQ5MSAzLjggNC45Wk0xMC4wODMgNS4wNTU3N0M5Ljk2MDY2IDQuODcxODUgOS43MTIzNSA0LjgyMTk1IDkuNTI4NDMgNC45NDQzMkM5LjM0NDUgNS4wNjY2OSA5LjI5NDYgNS4zMTQ5OSA5LjQxNjk3IDUuNDk4OTJDMTAuMjIwNyA2LjcwNjkzIDEwLjIyMDcgOC4yOTMwMyA5LjQxNjk3IDkuNTAxMDRDOS4yOTQ2IDkuNjg0OTYgOS4zNDQ1IDkuOTMzMjYgOS41Mjg0MyAxMC4wNTU2QzkuNzEyMzUgMTAuMTc4IDkuOTYwNjYgMTAuMTI4MSAxMC4wODMgOS45NDQxOEMxMS4wNjUzIDguNDY3NzMgMTEuMDY1MyA2LjUzMjIyIDEwLjA4MyA1LjA1NTc3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQnI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEgMUgxLjVIMTMuNUgxNFYxLjVWMTMuNVYxNEgxMy41SDEuNUgxVjEzLjVWMS41VjFaTTIgMlYxM0gxM1YySDJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxWcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy43NTQzMiAxLjgxOTU0QzcuNTk3NDIgMS43MjY4MiA3LjQwMjUgMS43MjY4MiA3LjI0NTU5IDEuODE5NTRMMS43NDU1OSA1LjA2OTU0QzEuNTkzMzYgNS4xNTk0OSAxLjQ5OTk2IDUuMzIzMTcgMS40OTk5NiA1LjVDMS40OTk5NiA1LjY3NjgzIDEuNTkzMzYgNS44NDA1MSAxLjc0NTU5IDUuOTMwNDZMNy4yNDU1OSA5LjE4MDQ2QzcuNDAyNSA5LjI3MzE4IDcuNTk3NDIgOS4yNzMxOCA3Ljc1NDMyIDkuMTgwNDZMMTMuMjU0MyA1LjkzMDQ2QzEzLjQwNjYgNS44NDA1MSAxMy41IDUuNjc2ODMgMTMuNSA1LjVDMTMuNSA1LjMyMzE3IDEzLjQwNjYgNS4xNTk0OSAxMy4yNTQzIDUuMDY5NTRMNy43NTQzMiAxLjgxOTU0Wk03LjQ5OTk2IDguMTY5MjNMMi45ODI4IDUuNUw3LjQ5OTk2IDIuODMwNzdMMTIuMDE3MSA1LjVMNy40OTk5NiA4LjE2OTIzWk0yLjI1NDMyIDguMzE5NTRDMi4wMTY1OCA4LjE3OTA2IDEuNzA5OTggOC4yNTc5IDEuNTY5NDkgOC40OTU2NEMxLjQyOTAxIDguNzMzMzcgMS41MDc4NSA5LjAzOTk4IDEuNzQ1NTkgOS4xODA0Nkw3LjI0NTU5IDEyLjQzMDVDNy40MDI1IDEyLjUyMzIgNy41OTc0MiAxMi41MjMyIDcuNzU0MzIgMTIuNDMwNUwxMy4yNTQzIDkuMTgwNDZDMTMuNDkyMSA5LjAzOTk4IDEzLjU3MDkgOC43MzMzNyAxMy40MzA0IDguNDk1NjRDMTMuMjg5OSA4LjI1NzkgMTIuOTgzMyA4LjE3OTA2IDEyLjc0NTYgOC4zMTk1NEw3LjQ5OTk2IDExLjQxOTJMMi4yNTQzMiA4LjMxOTU0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sRHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTYuOTc5NDIgMS4yNTE3MUw2Ljk1ODUgMS4zMDE5OUw1LjU4NjYyIDQuNjAwMzlDNS41NDM0MiA0LjcwNDI2IDUuNDQ1NzMgNC43NzUyMyA1LjMzMzYgNC43ODQyMkwxLjc3MjcgNS4wNjk3TDEuNzE4NDEgNS4wNzQwNUwxLjM4Njg3IDUuMTAwNjNMMS4wODYwOCA1LjEyNDc1QzAuODIwMDg1IDUuMTQ2MDcgMC43MTIyMjggNS40NzgwMiAwLjkxNDg4OSA1LjY1MTYyTDEuMTQ0MDYgNS44NDc5M0wxLjM5NjY2IDYuMDY0MzFMMS40MzgwMiA2LjA5OTc0TDQuMTUxMDUgOC40MjM3NEM0LjIzNjQ4IDguNDk2OTIgNC4yNzM4IDguNjExNzYgNC4yNDc2OSA4LjcyMTE4TDMuNDE4ODIgMTIuMTk2TDMuNDA2MTggMTIuMjQ5TDMuMzI5MDEgMTIuNTcyNUwzLjI1ODk5IDEyLjg2NkMzLjE5NzA4IDEzLjEyNTYgMy40Nzk0NSAxMy4zMzA4IDMuNzA3MTggMTMuMTkxN0wzLjk2NDcgMTMuMDM0NEw0LjI0ODU0IDEyLjg2MUw0LjI5NTAyIDEyLjgzMjZMNy4zNDM2NSAxMC45NzA1QzcuNDM5NjUgMTAuOTExOSA3LjU2MDQgMTAuOTExOSA3LjY1NjQgMTAuOTcwNUwxMC43MDUgMTIuODMyNkwxMC43NTE1IDEyLjg2MUwxMS4wMzU0IDEzLjAzNDRMMTEuMjkyOSAxMy4xOTE3QzExLjUyMDYgMTMuMzMwOCAxMS44MDMgMTMuMTI1NiAxMS43NDExIDEyLjg2NkwxMS42NzEgMTIuNTcyNUwxMS41OTM5IDEyLjI0OUwxMS41ODEyIDEyLjE5NkwxMC43NTI0IDguNzIxMThDMTAuNzI2MyA4LjYxMTc2IDEwLjc2MzYgOC40OTY5MiAxMC44NDkgOC40MjM3NEwxMy41NjIgNi4wOTk3NEwxMy42MDM0IDYuMDY0MzFMMTMuODU2IDUuODQ3OTNMMTQuMDg1MiA1LjY1MTYyQzE0LjI4NzggNS40NzgwMiAxNC4xOCA1LjE0NjA3IDEzLjkxNCA1LjEyNDc1TDEzLjYxMzIgNS4xMDA2M0wxMy4yODE2IDUuMDc0MDVMMTMuMjI3NCA1LjA2OTdMOS42NjY0NSA0Ljc4NDIyQzkuNTU0MzIgNC43NzUyMyA5LjQ1NjYzIDQuNzA0MjYgOS40MTM0MyA0LjYwMDM5TDguMDQxNTUgMS4zMDE5OUw4LjAyMDY0IDEuMjUxNzFMNy44OTI5MSAwLjk0NDYwOUw3Ljc3NzAyIDAuNjY1OTkyQzcuNjc0NTQgMC40MTk2MDQgNy4zMjU1MSAwLjQxOTYwNCA3LjIyMzAzIDAuNjY1OTkyTDcuMTA3MTUgMC45NDQ2MDlMNi45Nzk0MiAxLjI1MTcxWk03LjUwMDAzIDIuNjAzOTdMNi41MDk5NCA0Ljk4NDQyQzYuMzIyNzMgNS40MzQ1MyA1Ljg5OTQ0IDUuNzQyMDcgNS40MTM1MSA1Ljc4MTAzTDIuODQzNjEgNS45ODcwNUw0LjgwMTYgNy42NjQyOEM1LjE3MTgzIDcuOTgxNDIgNS4zMzM1MSA4LjQ3OTAzIDUuMjIwNCA4Ljk1MzIxTDQuNjIyMjEgMTEuNDYxTDYuODIyNCAxMC4xMTcxQzcuMjM4NDIgOS44NjMwMiA3Ljc2MTY0IDkuODYzMDIgOC4xNzc2NiAxMC4xMTcxTDEwLjM3NzggMTEuNDYxTDkuNzc5NjUgOC45NTMyMUM5LjY2NjU0IDguNDc5MDMgOS44MjgyMiA3Ljk4MTQyIDEwLjE5ODQgNy42NjQyOEwxMi4xNTY0IDUuOTg3MDVMOS41ODY1NCA1Ljc4MTAzQzkuMTAwNjEgNS43NDIwNyA4LjY3NzMyIDUuNDM0NTMgOC40OTAxMSA0Ljk4NDQyTDcuNTAwMDMgMi42MDM5N1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFpyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjIyMzAzIDAuNjY1OTkyQzcuMzI1NTEgMC40MTk2MDQgNy42NzQ1NCAwLjQxOTYwNCA3Ljc3NzAyIDAuNjY1OTkyTDkuNDEzNDMgNC42MDAzOUM5LjQ1NjYzIDQuNzA0MjYgOS41NTQzMiA0Ljc3NTIzIDkuNjY2NDUgNC43ODQyMkwxMy45MTQgNS4xMjQ3NUMxNC4xOCA1LjE0NjA3IDE0LjI4NzggNS40NzgwMiAxNC4wODUyIDUuNjUxNjJMMTAuODQ5IDguNDIzNzRDMTAuNzYzNiA4LjQ5NjkyIDEwLjcyNjMgOC42MTE3NiAxMC43NTI0IDguNzIxMThMMTEuNzQxMSAxMi44NjZDMTEuODAzIDEzLjEyNTYgMTEuNTIwNiAxMy4zMzA4IDExLjI5MjkgMTMuMTkxN0w3LjY1NjQgMTAuOTcwNUM3LjU2MDQgMTAuOTExOSA3LjQzOTY1IDEwLjkxMTkgNy4zNDM2NSAxMC45NzA1TDMuNzA3MTggMTMuMTkxN0MzLjQ3OTQ1IDEzLjMzMDggMy4xOTcwOCAxMy4xMjU2IDMuMjU4OTkgMTIuODY2TDQuMjQ3NjkgOC43MjExOEM0LjI3MzggOC42MTE3NiA0LjIzNjQ4IDguNDk2OTIgNC4xNTEwNSA4LjQyMzc0TDAuOTE0ODg5IDUuNjUxNjJDMC43MTIyMjggNS40NzgwMiAwLjgyMDA4NiA1LjE0NjA3IDEuMDg2MDggNS4xMjQ3NUw1LjMzMzYgNC43ODQyMkM1LjQ0NTczIDQuNzc1MjMgNS41NDM0MiA0LjcwNDI2IDUuNTg2NjIgNC42MDAzOUw3LjIyMzAzIDAuNjY1OTkyWlwiLGZpbGw6bn0pKX0sJHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuODQ5OTggNy40OTk5OEMxLjg0OTk4IDcuMjEzMjEgMS44NzEzNCA2LjkzMTQzIDEuOTEyNTYgNi42NTYxNUw5LjU2Mzc0IDIuMjM4NzVDOS44NjMxMSAyLjM1NjI3IDEwLjE1IDIuNDk4NjEgMTAuNDIxOSAyLjY2MzIyTDMuNzcwNjUgNi41MDMzMkMzLjczNjY5IDYuNTIxODMgMy43MDQ4MiA2LjU0NDkgMy42NzYwMiA2LjU3MjM4QzMuNTkxMSA2LjY1MzA4IDMuNTQyNDUgNi43NjI4NiAzLjUzNjgyIDYuODc2NThDMy41MzM1OSA2Ljk0MTggMy41NDQ1MSA3LjAwODMxIDMuNTcwODYgNy4wNzEzN0MzLjU4OTI3IDcuMTE1NyAzLjYxNDkgNy4xNTc0MiAzLjY0NzQ0IDcuMTk0NThDMy42NzMwNiA3LjIyMzk2IDMuNzAyIDcuMjQ5NDEgMy43MzMzNyA3LjI3MDY5TDcuMzI1MzMgOS44MzgxM0wzLjg3MjMyIDExLjgzMTdDMi42MzYwNCAxMC43OTUzIDEuODQ5OTggOS4yMzk0NCAxLjg0OTk4IDcuNDk5OThaTTguMzY4NDMgMTAuMjc1MUM4LjM3NjgyIDEwLjI3MDYgOC4zODUwOSAxMC4yNjU5IDguMzkzMjIgMTAuMjYwOEw5Ljg0MDkxIDkuNDI0OTlDOS44NDcwNiA5LjQyMTYzIDkuODUzMTQgOS40MTgxMiA5Ljg1OTE1IDkuNDE0NDZMMTEuMzEwMSA4LjU3Njc3QzExLjM2NTUgOC41NDY0OSAxMS40MTU0IDguNTA0IDExLjQ1NTQgOC40NDk5NUMxMS42MDM0IDguMjUwMzEgMTEuNTYxNiA3Ljk2ODQ4IDExLjM2MiA3LjgyMDQ2TDcuODI3NzkgNS4yMDAxN0wxMS4yMTYxIDMuMjQzOTNDMTIuNDAxMyA0LjI3OTYzIDEzLjE1IDUuODAyMzcgMTMuMTUgNy40OTk5OEMxMy4xNSA3LjgzNTQ2IDEzLjEyMDcgOC4xNjQxMSAxMy4wNjQ3IDguNDgzNTNMNS41Njg3NSAxMi44MTEzQzUuMjYxMzggMTIuNjk5NSA0Ljk2NjQ2IDEyLjU2MTggNC42ODY2MiAxMi40MDA4TDguMzY4NDMgMTAuMjc1MVpNOC4xODE0OSA5LjM0MzgzTDQuODE2NTkgNi45Mzg2OEw1LjUwOTE4IDYuNTM4ODFMOC44MDYwNCA4Ljk4MzI0TDguMTgxNDkgOS4zNDM4M1pNNi4zNTg3NSA2LjA0ODMyTDYuOTc4MjIgNS42OTA2N0wxMC4yNzUxIDguMTM1MDZMOS42NTU2IDguNDkyNzVMNi4zNTg3NSA2LjA0ODMyWk04LjMzMTggMS45MTA3OEwyLjI0MjYzIDUuNDI2MzZDMy4wNjk0MSAzLjMzMTg4IDUuMTExNjQgMS44NDk5OCA3LjQ5OTk4IDEuODQ5OThDNy43ODI1OCAxLjg0OTk4IDguMDYwMzMgMS44NzA3MiA4LjMzMTggMS45MTA3OFpNNi44NDY4NCAxMy4xMTI2QzcuMDYxMTQgMTMuMTM3MyA3LjI3OTA4IDEzLjE1IDcuNDk5OTggMTMuMTVDOS44MjQ2IDEzLjE1IDExLjgyMTMgMTEuNzQ2MSAxMi42ODg2IDkuNzM5OUw2Ljg0Njg0IDEzLjExMjZaTTcuNDk5OTggMC44NDk5NzZDMy44MjcyOCAwLjg0OTk3NiAwLjg0OTk3NiAzLjgyNzI4IDAuODQ5OTc2IDcuNDk5OThDMC44NDk5NzYgMTEuMTcyNyAzLjgyNzI4IDE0LjE1IDcuNDk5OTggMTQuMTVDMTEuMTcyNyAxNC4xNSAxNC4xNSAxMS4xNzI3IDE0LjE1IDcuNDk5OThDMTQuMTUgMy44MjcyOCAxMS4xNzI3IDAuODQ5OTc2IDcuNDk5OTggMC44NDk5NzZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxOcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiAzQzIgMi40NDc3MiAyLjQ0NzcyIDIgMyAySDEyQzEyLjU1MjMgMiAxMyAyLjQ0NzcyIDEzIDNWMTJDMTMgMTIuNTUyMyAxMi41NTIzIDEzIDEyIDEzSDNDMi40NDc3MiAxMyAyIDEyLjU1MjMgMiAxMlYzWk0xMiAzSDNWMTJIMTJWM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEZyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjQ5OTk4IDAuNUM1LjQ5OTk4IDAuMjIzODU4IDUuNzIzODMgMCA1Ljk5OTk4IDBINy40OTk5OEg4Ljk5OTk4QzkuMjc2MTIgMCA5LjQ5OTk4IDAuMjIzODU4IDkuNDk5OTggMC41QzkuNDk5OTggMC43NzYxNDIgOS4yNzYxMiAxIDguOTk5OTggMUg3Ljk5OTk4VjIuMTE5MjJDOS4wOTgzMiAyLjIwNDA5IDEwLjExOSAyLjU2NjIyIDEwLjk5MiAzLjEzNTcyQzExLjAxMTYgMy4xMDg1MSAxMS4wMzM2IDMuMDgyNTIgMTEuMDU4IDMuMDU4MDZMMTEuODU4IDIuMjU4MDZDMTIuMTAyMSAyLjAxMzk4IDEyLjQ5NzggMi4wMTM5OCAxMi43NDE5IDIuMjU4MDZDMTIuOTg2IDIuNTAyMTQgMTIuOTg2IDIuODk3ODYgMTIuNzQxOSAzLjE0MTk0TDExLjk2NyAzLjkxNjgyQzEzLjE1OTUgNS4wNzkyNSAxMy45IDYuNzAzMTQgMTMuOSA4LjQ5OTk4QzEzLjkgMTIuMDM0NiAxMS4wMzQ2IDE0LjkgNy40OTk5OCAxNC45QzMuOTY1MzUgMTQuOSAxLjA5OTk4IDEyLjAzNDYgMS4wOTk5OCA4LjQ5OTk4QzEuMDk5OTggNS4xMzM2MiAzLjY5OTA0IDIuMzc0MyA2Ljk5OTk4IDIuMTE5MjJWMUg1Ljk5OTk4QzUuNzIzODMgMSA1LjQ5OTk4IDAuNzc2MTQyIDUuNDk5OTggMC41Wk0yLjA5OTk4IDguNDk5OThDMi4wOTk5OCA1LjUxNzY0IDQuNTE3NjQgMy4wOTk5OCA3LjQ5OTk4IDMuMDk5OThDMTAuNDgyMyAzLjA5OTk4IDEyLjkgNS41MTc2NCAxMi45IDguNDk5OThDMTIuOSAxMS40ODIzIDEwLjQ4MjMgMTMuOSA3LjQ5OTk4IDEzLjlDNC41MTc2NCAxMy45IDIuMDk5OTggMTEuNDgyMyAyLjA5OTk4IDguNDk5OThaTTcuOTk5OTggNC41QzcuOTk5OTggNC4yMjM4NiA3Ljc3NjEyIDQgNy40OTk5OCA0QzcuMjIzODMgNCA2Ljk5OTk4IDQuMjIzODYgNi45OTk5OCA0LjVWOS41QzYuOTk5OTggOS43NzYxNCA3LjIyMzgzIDEwIDcuNDk5OTggMTBDNy43NzYxMiAxMCA3Ljk5OTk4IDkuNzc2MTQgNy45OTk5OCA5LjVWNC41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTE0LjQ5OTkgMC45OTk5OTJDMTQuMjIzNyAwLjk5OTk5MiAxMy45OTk5IDEuMjIzODUgMTMuOTk5OSAxLjQ5OTk5TDEzLjk5OTkgNS45OTk5NUwwLjk5OTk5MiA1Ljk5OTk1TDAuOTk5OTkyIDEuNDk5OTlDMC45OTk5OTIgMS4yMjM4NSAwLjc3NjEzNiAwLjk5OTk5MiAwLjQ5OTk5NiAwLjk5OTk5MkMwLjIyMzg1NiAwLjk5OTk5MiAtOS43ODUwOWUtMDkgMS4yMjM4NSAtMi4xODU1NmUtMDggMS40OTk5OUw0LjA3Mjc5ZS0wNyAxMy40OTk5QzMuOTUyMDhlLTA3IDEzLjc3NiAwLjIyMzg1NSAxMy45OTk5IDAuNDk5OTk2IDEzLjk5OTlDMC43NzYxMzYgMTMuOTk5OSAwLjk5OTk5MiAxMy43NzYgMC45OTk5OTIgMTMuNDk5OUwwLjk5OTk5MiA4Ljk5OTkyTDEzLjk5OTkgOC45OTk5MkwxMy45OTk5IDEzLjQ5OTlDMTMuOTk5OSAxMy43NzYgMTQuMjIzNyAxMy45OTk5IDE0LjQ5OTkgMTMuOTk5OUMxNC43NzYgMTMuOTk5OSAxNC45OTk5IDEzLjc3NiAxNC45OTk5IDEzLjQ5OTlMMTQuOTk5OSAxLjQ5OTk5QzE0Ljk5OTkgMS4yMjM4NSAxNC43NzYgMC45OTk5OTIgMTQuNDk5OSAwLjk5OTk5MlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFdyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wLjk5OTg3OCAwLjVDMC45OTk4NzggMC4yMjM4NTggMS4yMjM3NCAwIDEuNDk5ODggMEgxMy40OTk5QzEzLjc3NiAwIDEzLjk5OTkgMC4yMjM4NTggMTMuOTk5OSAwLjVDMTMuOTk5OSAwLjc3NjE0MiAxMy43NzYgMSAxMy40OTk5IDFINkgxLjQ5OTg4QzEuMjIzNzQgMSAwLjk5OTg3OCAwLjc3NjE0MiAwLjk5OTg3OCAwLjVaTTkgMTRWMUw2IDFWMTRIMS40OTk4OEMxLjIyMzc0IDE0IDAuOTk5ODc4IDE0LjIyMzkgMC45OTk4NzggMTQuNUMwLjk5OTg3OCAxNC43NzYxIDEuMjIzNzQgMTUgMS40OTk4OCAxNUgxMy40OTk5QzEzLjc3NiAxNSAxMy45OTk5IDE0Ljc3NjEgMTMuOTk5OSAxNC41QzEzLjk5OTkgMTQuMjIzOSAxMy43NzYgMTQgMTMuNDk5OSAxNEg5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0senI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUuMDAwMDMgMy4yNUM1LjAwMDAzIDIuOTczODYgNC43NzYxNyAyLjc1IDQuNTAwMDMgMi43NUM0LjIyMzg5IDIuNzUgNC4wMDAwMyAyLjk3Mzg2IDQuMDAwMDMgMy4yNVY3LjEwMDAzSDIuNDk5OThDMi4yNzkwNiA3LjEwMDAzIDIuMDk5OTggNy4yNzkxMiAyLjA5OTk4IDcuNTAwMDNDMi4wOTk5OCA3LjcyMDk0IDIuMjc5MDYgNy45MDAwMyAyLjQ5OTk4IDcuOTAwMDNINC4wMDAwM1Y4LjU1QzQuMDAwMDMgMTAuNDgzIDUuNTY3MDMgMTIuMDUgNy41MDAwMyAxMi4wNUM5LjQzMzAzIDEyLjA1IDExIDEwLjQ4MyAxMSA4LjU1VjcuOTAwMDNIMTIuNUMxMi43MjA5IDcuOTAwMDMgMTIuOSA3LjcyMDk0IDEyLjkgNy41MDAwM0MxMi45IDcuMjc5MTIgMTIuNzIwOSA3LjEwMDAzIDEyLjUgNy4xMDAwM0gxMVYzLjI1QzExIDIuOTczODYgMTAuNzc2MiAyLjc1IDEwLjUgMi43NUMxMC4yMjM5IDIuNzUgMTAgMi45NzM4NiAxMCAzLjI1VjcuMTAwMDNINS4wMDAwM1YzLjI1Wk01LjAwMDAzIDcuOTAwMDNWOC41NUM1LjAwMDAzIDkuOTMwNzEgNi4xMTkzMiAxMS4wNSA3LjUwMDAzIDExLjA1QzguODgwNzQgMTEuMDUgMTAgOS45MzA3MSAxMCA4LjU1VjcuOTAwMDNINS4wMDAwM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEdyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUgMEM3Ljc3NjE0IDAgOCAwLjIyMzg1OCA4IDAuNVYyLjVDOCAyLjc3NjE0IDcuNzc2MTQgMyA3LjUgM0M3LjIyMzg2IDMgNyAyLjc3NjE0IDcgMi41VjAuNUM3IDAuMjIzODU4IDcuMjIzODYgMCA3LjUgMFpNMi4xOTY3IDIuMTk2N0MyLjM5MTk2IDIuMDAxNDQgMi43MDg1NCAyLjAwMTQ0IDIuOTAzODEgMi4xOTY3TDQuMzE4MDIgMy42MTA5MUM0LjUxMzI4IDMuODA2MTcgNC41MTMyOCA0LjEyMjc2IDQuMzE4MDIgNC4zMTgwMkM0LjEyMjc2IDQuNTEzMjggMy44MDYxNyA0LjUxMzI4IDMuNjEwOTEgNC4zMTgwMkwyLjE5NjcgMi45MDM4MUMyLjAwMTQ0IDIuNzA4NTQgMi4wMDE0NCAyLjM5MTk2IDIuMTk2NyAyLjE5NjdaTTAuNSA3QzAuMjIzODU4IDcgMCA3LjIyMzg2IDAgNy41QzAgNy43NzYxNCAwLjIyMzg1OCA4IDAuNSA4SDIuNUMyLjc3NjE0IDggMyA3Ljc3NjE0IDMgNy41QzMgNy4yMjM4NiAyLjc3NjE0IDcgMi41IDdIMC41Wk0yLjE5NjcgMTIuODAzM0MyLjAwMTQ0IDEyLjYwOCAyLjAwMTQ0IDEyLjI5MTUgMi4xOTY3IDEyLjA5NjJMMy42MTA5MSAxMC42ODJDMy44MDYxNyAxMC40ODY3IDQuMTIyNzYgMTAuNDg2NyA0LjMxODAyIDEwLjY4MkM0LjUxMzI4IDEwLjg3NzIgNC41MTMyOCAxMS4xOTM4IDQuMzE4MDIgMTEuMzg5MUwyLjkwMzgxIDEyLjgwMzNDMi43MDg1NCAxMi45OTg2IDIuMzkxOTYgMTIuOTk4NiAyLjE5NjcgMTIuODAzM1pNMTIuNSA3QzEyLjIyMzkgNyAxMiA3LjIyMzg2IDEyIDcuNUMxMiA3Ljc3NjE0IDEyLjIyMzkgOCAxMi41IDhIMTQuNUMxNC43NzYxIDggMTUgNy43NzYxNCAxNSA3LjVDMTUgNy4yMjM4NiAxNC43NzYxIDcgMTQuNSA3SDEyLjVaTTEwLjY4MiA0LjMxODAyQzEwLjQ4NjcgNC4xMjI3NiAxMC40ODY3IDMuODA2MTcgMTAuNjgyIDMuNjEwOTFMMTIuMDk2MiAyLjE5NjdDMTIuMjkxNSAyLjAwMTQ0IDEyLjYwOCAyLjAwMTQ0IDEyLjgwMzMgMi4xOTY3QzEyLjk5ODYgMi4zOTE5NiAxMi45OTg2IDIuNzA4NTQgMTIuODAzMyAyLjkwMzgxTDExLjM4OTEgNC4zMTgwMkMxMS4xOTM4IDQuNTEzMjggMTAuODc3MiA0LjUxMzI4IDEwLjY4MiA0LjMxODAyWk04IDEyLjVDOCAxMi4yMjM5IDcuNzc2MTQgMTIgNy41IDEyQzcuMjIzODYgMTIgNyAxMi4yMjM5IDcgMTIuNVYxNC41QzcgMTQuNzc2MSA3LjIyMzg2IDE1IDcuNSAxNUM3Ljc3NjE0IDE1IDggMTQuNzc2MSA4IDE0LjVWMTIuNVpNMTAuNjgyIDEwLjY4MkMxMC44NzcyIDEwLjQ4NjcgMTEuMTkzOCAxMC40ODY3IDExLjM4OTEgMTAuNjgyTDEyLjgwMzMgMTIuMDk2MkMxMi45OTg2IDEyLjI5MTUgMTIuOTk4NiAxMi42MDggMTIuODAzMyAxMi44MDMzQzEyLjYwOCAxMi45OTg2IDEyLjI5MTUgMTIuOTk4NiAxMi4wOTYyIDEyLjgwMzNMMTAuNjgyIDExLjM4OTFDMTAuNDg2NyAxMS4xOTM4IDEwLjQ4NjcgMTAuODc3MiAxMC42ODIgMTAuNjgyWk01LjUgNy41QzUuNSA2LjM5NTQzIDYuMzk1NDMgNS41IDcuNSA1LjVDOC42MDQ1NyA1LjUgOS41IDYuMzk1NDMgOS41IDcuNUM5LjUgOC42MDQ1NyA4LjYwNDU3IDkuNSA3LjUgOS41QzYuMzk1NDMgOS41IDUuNSA4LjYwNDU3IDUuNSA3LjVaTTcuNSA0LjVDNS44NDMxNSA0LjUgNC41IDUuODQzMTUgNC41IDcuNUM0LjUgOS4xNTY4NSA1Ljg0MzE1IDEwLjUgNy41IDEwLjVDOS4xNTY4NSAxMC41IDEwLjUgOS4xNTY4NSAxMC41IDcuNUMxMC41IDUuODQzMTUgOS4xNTY4NSA0LjUgNy41IDQuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHFyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMC41IDRDOC41NjcgNCA3IDUuNTY3IDcgNy41QzcgOS40MzMgOC41NjcgMTEgMTAuNSAxMUMxMi40MzMgMTEgMTQgOS40MzMgMTQgNy41QzE0IDUuNTY3IDEyLjQzMyA0IDEwLjUgNFpNNy42NzEzMyAxMUM2LjY1MTgzIDEwLjE3NSA2IDguOTEzNjMgNiA3LjVDNiA2LjA4NjM3IDYuNjUxODMgNC44MjQ5OCA3LjY3MTMzIDRINC41QzIuNTY3IDQgMSA1LjU2NyAxIDcuNUMxIDkuNDMzIDIuNTY3IDExIDQuNSAxMUg3LjY3MTMzWk0wIDcuNUMwIDUuMDE0NzIgMi4wMTQ3MiAzIDQuNSAzSDEwLjVDMTIuOTg1MyAzIDE1IDUuMDE0NzIgMTUgNy41QzE1IDkuOTg1MjggMTIuOTg1MyAxMiAxMC41IDEySDQuNUMyLjAxNDcyIDEyIDAgOS45ODUyOCAwIDcuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFlyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjkwMzIxIDcuMjk2NzdDMS45MDMyMSAxMC4zNDEgNC4xMTA0MSAxMi40MTQ3IDYuNTg4OTMgMTIuODQzOUM2Ljg3MjU1IDEyLjg5MyA3LjA2MjY2IDEzLjE2MjcgNy4wMTM1NSAxMy40NDY0QzYuOTY0NDQgMTMuNzMgNi42OTQ3MSAxMy45MjAxIDYuNDExMDkgMTMuODcxQzMuNDk5NDIgMTMuMzY2OCAwLjg2MDg0IDEwLjkxMjcgMC44NjA4NCA3LjI5Njc3QzAuODYwODM5IDUuNzYwMDkgMS41NTk5NiA0LjU1MjQ1IDIuMzc2MzkgMy42MzM3N0MyLjk2MTI0IDIuOTc1NjggMy42MzAzNCAyLjQ0MTM1IDQuMTY4NDYgMi4wMzIwMkwyLjUzMjA1IDIuMDMyMDJDMi4yNTU5MSAyLjAzMjAyIDIuMDMyMDUgMS44MDgxNiAyLjAzMjA1IDEuNTMyMDJDMi4wMzIwNSAxLjI1NTg4IDIuMjU1OTEgMS4wMzIwMiAyLjUzMjA1IDEuMDMyMDJMNS41MzIwNSAxLjAzMjAyQzUuODA4MTkgMS4wMzIwMiA2LjAzMjA1IDEuMjU1ODggNi4wMzIwNSAxLjUzMjAyTDYuMDMyMDUgNC41MzIwMkM2LjAzMjA1IDQuODA4MTYgNS44MDgxOSA1LjAzMjAyIDUuNTMyMDUgNS4wMzIwMkM1LjI1NTkxIDUuMDMyMDIgNS4wMzIwNSA0LjgwODE2IDUuMDMyMDUgNC41MzIwMkw1LjAzMjA1IDIuNjg2NDVMNS4wMzA1NCAyLjY4NzU5TDUuMDMwNDUgMi42ODc2Nkw1LjAzMDQ0IDIuNjg3NjdMNS4wMzA0MyAyLjY4NzY3QzQuNDU4OTYgMy4xMTg2OCAzLjc2MDU5IDMuNjQ1MzggMy4xNTU1NCA0LjMyNjJDMi40NDEwMiA1LjEzMDIxIDEuOTAzMjEgNi4xMDE1NCAxLjkwMzIxIDcuMjk2NzdaTTEzLjAxMDkgNy43MDMyMUMxMy4wMTA5IDQuNjkxMTUgMTAuODUwNSAyLjYyOTYgOC40MDM4NCAyLjE3MDI5QzguMTIwOTMgMi4xMTcxOCA3LjkzNDY1IDEuODQ0NzkgNy45ODc3NiAxLjU2MTg4QzguMDQwODcgMS4yNzg5OCA4LjMxMzI2IDEuMDkyNyA4LjU5NjE2IDEuMTQ1ODFDMTEuNDcwNCAxLjY4NTQxIDE0LjA1MzIgNC4xMjYwNSAxNC4wNTMyIDcuNzAzMjFDMTQuMDUzMiA5LjIzOTg4IDEzLjM1NDEgMTAuNDQ3NSAxMi41Mzc3IDExLjM2NjJDMTEuOTUyOCAxMi4wMjQzIDExLjI4MzcgMTIuNTU4NiAxMC43NDU2IDEyLjk2OEwxMi4zODIxIDEyLjk2OEMxMi42NTgyIDEyLjk2OCAxMi44ODIxIDEzLjE5MTggMTIuODgyMSAxMy40NjhDMTIuODgyMSAxMy43NDQxIDEyLjY1ODIgMTMuOTY4IDEyLjM4MjEgMTMuOTY4TDkuMzgyMDUgMTMuOTY4QzkuMTA1OTEgMTMuOTY4IDguODgyMDUgMTMuNzQ0MSA4Ljg4MjA1IDEzLjQ2OEw4Ljg4MjA1IDEwLjQ2OEM4Ljg4MjA1IDEwLjE5MTggOS4xMDU5MSA5Ljk2Nzk2IDkuMzgyMDUgOS45Njc5NkM5LjY1ODE5IDkuOTY3OTYgOS44ODIwNSAxMC4xOTE4IDkuODgyMDUgMTAuNDY4TDkuODgyMDUgMTIuMzEzNUw5Ljg4MzYyIDEyLjMxMjNDMTAuNDU1MSAxMS44ODEzIDExLjE1MzUgMTEuMzU0NiAxMS43NTg1IDEwLjY3MzhDMTIuNDczMSA5Ljg2OTc2IDEzLjAxMDkgOC44OTg0NCAxMy4wMTA5IDcuNzAzMjFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxLcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOCAySDEyLjVDMTIuNzc2MSAyIDEzIDIuMjIzODYgMTMgMi41VjVIOFYyWk03IDVWMkgyLjVDMi4yMjM4NiAyIDIgMi4yMjM4NiAyIDIuNVY1SDdaTTIgNlY5SDdWNkgyWk04IDZIMTNWOUg4VjZaTTggMTBIMTNWMTIuNUMxMyAxMi43NzYxIDEyLjc3NjEgMTMgMTIuNSAxM0g4VjEwWk0yIDEyLjVWMTBIN1YxM0gyLjVDMi4yMjM4NiAxMyAyIDEyLjc3NjEgMiAxMi41Wk0xIDIuNUMxIDEuNjcxNTcgMS42NzE1NyAxIDIuNSAxSDEyLjVDMTMuMzI4NCAxIDE0IDEuNjcxNTcgMTQgMi41VjEyLjVDMTQgMTMuMzI4NCAxMy4zMjg0IDE0IDEyLjUgMTRIMi41QzEuNjcxNTcgMTQgMSAxMy4zMjg0IDEgMTIuNVYyLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxYcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC45MDAwMjQgNy41MDAwMkMwLjkwMDAyNCAzLjg1NDk1IDMuODU0OTUgMC45MDAwMjQgNy41MDAwMiAwLjkwMDAyNEMxMS4xNDUxIDAuOTAwMDI0IDE0LjEgMy44NTQ5NSAxNC4xIDcuNTAwMDJDMTQuMSAxMS4xNDUxIDExLjE0NTEgMTQuMSA3LjUwMDAyIDE0LjFDMy44NTQ5NSAxNC4xIDAuOTAwMDI0IDExLjE0NTEgMC45MDAwMjQgNy41MDAwMlpNNy41MDAwMiAxLjgwMDAyQzQuMzUyMDEgMS44MDAwMiAxLjgwMDAyIDQuMzUyMDEgMS44MDAwMiA3LjUwMDAyQzEuODAwMDIgMTAuNjQ4IDQuMzUyMDEgMTMuMiA3LjUwMDAyIDEzLjJDMTAuNjQ4IDEzLjIgMTMuMiAxMC42NDggMTMuMiA3LjUwMDAyQzEzLjIgNC4zNTIwMSAxMC42NDggMS44MDAwMiA3LjUwMDAyIDEuODAwMDJaTTMuMDc1MDQgNy41MDAwMkMzLjA3NTA0IDUuMDU2MTcgNS4wNTYxOCAzLjA3NTAyIDcuNTAwMDQgMy4wNzUwMkM5Ljk0Mzg4IDMuMDc1MDIgMTEuOTI1IDUuMDU2MTcgMTEuOTI1IDcuNTAwMDJDMTEuOTI1IDkuOTQzODYgOS45NDM4OCAxMS45MjUgNy41MDAwNCAxMS45MjVDNS4wNTYxOCAxMS45MjUgMy4wNzUwNCA5Ljk0Mzg2IDMuMDc1MDQgNy41MDAwMlpNNy41MDAwNCAzLjkyNTAyQzUuNTI1NjIgMy45MjUwMiAzLjkyNTA0IDUuNTI1NjEgMy45MjUwNCA3LjUwMDAyQzMuOTI1MDQgOS40NzQ0MiA1LjUyNTYzIDExLjA3NSA3LjUwMDA0IDExLjA3NUM5LjQ3NDQ0IDExLjA3NSAxMS4wNzUgOS40NzQ0MiAxMS4wNzUgNy41MDAwMkMxMS4wNzUgNS41MjU2MSA5LjQ3NDQ0IDMuOTI1MDIgNy41MDAwNCAzLjkyNTAyWk03LjUwMDA0IDUuMjUwMDJDNi4yNTc0IDUuMjUwMDIgNS4yNTAwNCA2LjI1NzM5IDUuMjUwMDQgNy41MDAwMkM1LjI1MDA0IDguNzQyNjYgNi4yNTc0IDkuNzUwMDIgNy41MDAwNCA5Ljc1MDAyQzguNzQyNjcgOS43NTAwMiA5Ljc1MDA0IDguNzQyNjYgOS43NTAwNCA3LjUwMDAyQzkuNzUwMDQgNi4yNTczOCA4Ljc0MjY3IDUuMjUwMDIgNy41MDAwNCA1LjI1MDAyWk02LjA1MDA0IDcuNTAwMDJDNi4wNTAwNCA2LjY5OTIxIDYuNjk5MjMgNi4wNTAwMiA3LjUwMDA0IDYuMDUwMDJDOC4zMDA4NCA2LjA1MDAyIDguOTUwMDQgNi42OTkyMSA4Ljk1MDA0IDcuNTAwMDJDOC45NTAwNCA4LjMwMDgzIDguMzAwODQgOC45NTAwMiA3LjUwMDA0IDguOTUwMDJDNi42OTkyMyA4Ljk1MDAyIDYuMDUwMDQgOC4zMDA4MyA2LjA1MDA0IDcuNTAwMDJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxKcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy45NDk5MyAyLjk1MDAyTDMuOTQ5OTMgNC40OTk5OEMzLjk0OTkzIDQuNzQ4NTEgMy43NDg0NSA0Ljk0OTk4IDMuNDk5OTMgNC45NDk5OEMzLjI1MTQgNC45NDk5OCAzLjA0OTkzIDQuNzQ4NTEgMy4wNDk5MyA0LjQ5OTk4VjIuNTAwMDRDMy4wNDk5MyAyLjQ1MjQ2IDMuMDU3MzEgMi40MDY2MSAzLjA3MDk5IDIuMzYzNTdDMy4xMjg3OCAyLjE4MTc1IDMuMjk4OTcgMi4wNTAwMiAzLjQ5OTkzIDIuMDUwMDJIMTEuNDk5OUMxMS42NTUzIDIuMDUwMDIgMTEuNzkyMiAyLjEyODcyIDExLjg3MzEgMi4yNDg0MkMxMS45MjE2IDIuMzIwMjQgMTEuOTQ5OSAyLjQwNjgyIDExLjk0OTkgMi41MDAwMkwxMS45NDk5IDIuNTAwMDRWNC40OTk5OEMxMS45NDk5IDQuNzQ4NTEgMTEuNzQ4NSA0Ljk0OTk4IDExLjQ5OTkgNC45NDk5OEMxMS4yNTE0IDQuOTQ5OTggMTEuMDQ5OSA0Ljc0ODUxIDExLjA0OTkgNC40OTk5OFYyLjk1MDAySDguMDQ5OTNWMTIuMDVIOS4yNTQyOEM5LjUwMjgxIDEyLjA1IDkuNzA0MjggMTIuMjUxNSA5LjcwNDI4IDEyLjVDOS43MDQyOCAxMi43NDg2IDkuNTAyODEgMTIuOTUgOS4yNTQyOCAxMi45NUg1Ljc1NDI4QzUuNTA1NzUgMTIuOTUgNS4zMDQyOCAxMi43NDg2IDUuMzA0MjggMTIuNUM1LjMwNDI4IDEyLjI1MTUgNS41MDU3NSAxMi4wNSA1Ljc1NDI4IDEyLjA1SDYuOTQ5OTNWMi45NTAwMkgzLjk0OTkzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIgNC41QzIgNC4yMjM4NiAyLjIyMzg2IDQgMi41IDRIMTIuNUMxMi43NzYxIDQgMTMgNC4yMjM4NiAxMyA0LjVDMTMgNC43NzYxNCAxMi43NzYxIDUgMTIuNSA1SDIuNUMyLjIyMzg2IDUgMiA0Ljc3NjE0IDIgNC41Wk00IDcuNUM0IDcuMjIzODYgNC4yMjM4NiA3IDQuNSA3SDEwLjVDMTAuNzc2MSA3IDExIDcuMjIzODYgMTEgNy41QzExIDcuNzc2MTQgMTAuNzc2MSA4IDEwLjUgOEg0LjVDNC4yMjM4NiA4IDQgNy43NzYxNCA0IDcuNVpNMyAxMC41QzMgMTAuMjIzOSAzLjIyMzg2IDEwIDMuNSAxMEgxMS41QzExLjc3NjEgMTAgMTIgMTAuMjIzOSAxMiAxMC41QzEyIDEwLjc3NjEgMTEuNzc2MSAxMSAxMS41IDExSDMuNUMzLjIyMzg2IDExIDMgMTAuNzc2MSAzIDEwLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxlbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi41IDRDMi4yMjM4NiA0IDIgNC4yMjM4NiAyIDQuNUMyIDQuNzc2MTQgMi4yMjM4NiA1IDIuNSA1SDEyLjVDMTIuNzc2MSA1IDEzIDQuNzc2MTQgMTMgNC41QzEzIDQuMjIzODYgMTIuNzc2MSA0IDEyLjUgNEgyLjVaTTIgNy41QzIgNy4yMjM4NiAyLjIyMzg2IDcgMi41IDdIMTIuNUMxMi43NzYxIDcgMTMgNy4yMjM4NiAxMyA3LjVDMTMgNy43NzYxNCAxMi43NzYxIDggMTIuNSA4SDIuNUMyLjIyMzg2IDggMiA3Ljc3NjE0IDIgNy41Wk0yIDEwLjVDMiAxMC4yMjM5IDIuMjIzODYgMTAgMi41IDEwSDEyLjVDMTIuNzc2MSAxMCAxMyAxMC4yMjM5IDEzIDEwLjVDMTMgMTAuNzc2MSAxMi43NzYxIDExIDEyLjUgMTFIMi41QzIuMjIzODYgMTEgMiAxMC43NzYxIDIgMTAuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHRvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yIDQuNUMyIDQuMjIzODYgMi4yMjM4NiA0IDIuNSA0SDEyLjVDMTIuNzc2MSA0IDEzIDQuMjIzODYgMTMgNC41QzEzIDQuNzc2MTQgMTIuNzc2MSA1IDEyLjUgNUgyLjVDMi4yMjM4NiA1IDIgNC43NzYxNCAyIDQuNVpNMiA3LjVDMiA3LjIyMzg2IDIuMjIzODYgNyAyLjUgN0g3LjVDNy43NzYxNCA3IDggNy4yMjM4NiA4IDcuNUM4IDcuNzc2MTQgNy43NzYxNCA4IDcuNSA4SDIuNUMyLjIyMzg2IDggMiA3Ljc3NjE0IDIgNy41Wk0yIDEwLjVDMiAxMC4yMjM5IDIuMjIzODYgMTAgMi41IDEwSDEwLjVDMTAuNzc2MSAxMCAxMSAxMC4yMjM5IDExIDEwLjVDMTEgMTAuNzc2MSAxMC43NzYxIDExIDEwLjUgMTFIMi41QzIuMjIzODYgMTEgMiAxMC43NzYxIDIgMTAuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG5vPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yIDQuNUMyIDQuMjIzODYgMi4yMjM4NiA0IDIuNSA0SDEyLjVDMTIuNzc2MSA0IDEzIDQuMjIzODYgMTMgNC41QzEzIDQuNzc2MTQgMTIuNzc2MSA1IDEyLjUgNUgyLjVDMi4yMjM4NiA1IDIgNC43NzYxNCAyIDQuNVpNNyA3LjVDNyA3LjIyMzg2IDcuMjIzODYgNyA3LjUgN0gxMi41QzEyLjc3NjEgNyAxMyA3LjIyMzg2IDEzIDcuNUMxMyA3Ljc3NjE0IDEyLjc3NjEgOCAxMi41IDhINy41QzcuMjIzODYgOCA3IDcuNzc2MTQgNyA3LjVaTTQgMTAuNUM0IDEwLjIyMzkgNC4yMjM4NiAxMCA0LjUgMTBIMTIuNUMxMi43NzYxIDEwIDEzIDEwLjIyMzkgMTMgMTAuNUMxMyAxMC43NzYxIDEyLjc3NjEgMTEgMTIuNSAxMUg0LjVDNC4yMjM4NiAxMSA0IDEwLjc3NjEgNCAxMC41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scm89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEzLjM1MzYgMi4zNTM1NUMxMy41NDg4IDIuMTU4MjkgMTMuNTQ4OCAxLjg0MTcxIDEzLjM1MzYgMS42NDY0NUMxMy4xNTgzIDEuNDUxMTggMTIuODQxNyAxLjQ1MTE4IDEyLjY0NjQgMS42NDY0NUwxMS45MjkxIDIuMzYzODNDMTEuOTE1OSAyLjMyMjQ2IDExLjg5NyAyLjI4MzY4IDExLjg3MzIgMi4yNDg0NUMxMS43OTIzIDIuMTI4NzUgMTEuNjU1NCAyLjA1MDA1IDExLjUwMDEgMi4wNTAwNUgzLjUwMDA1QzMuMjk5MDkgMi4wNTAwNSAzLjEyODkgMi4xODE3OCAzLjA3MTExIDIuMzYzNkMzLjA1NzQzIDIuNDA2NjUgMy4wNTAwNSAyLjQ1MjQ5IDMuMDUwMDUgMi41MDAwN1Y0LjUwMDAxQzMuMDUwMDUgNC43NDg1NCAzLjI1MTUyIDQuOTUwMDEgMy41MDAwNSA0Ljk1MDAxQzMuNzQ4NTggNC45NTAwMSAzLjk1MDA1IDQuNzQ4NTQgMy45NTAwNSA0LjUwMDAxVjIuOTUwMDVINi45NTAwNlY3LjM0Mjg0TDEuNjQ2NDUgMTIuNjQ2NEMxLjQ1MTE4IDEyLjg0MTcgMS40NTExOCAxMy4xNTgzIDEuNjQ2NDUgMTMuMzUzNkMxLjg0MTcxIDEzLjU0ODggMi4xNTgyOSAxMy41NDg4IDIuMzUzNTUgMTMuMzUzNkw2Ljk1MDA2IDguNzU3MDVWMTIuMDUwMUg1Ljc1NDRDNS41MDU4NyAxMi4wNTAxIDUuMzA0NCAxMi4yNTE1IDUuMzA0NCAxMi41MDAxQzUuMzA0NCAxMi43NDg2IDUuNTA1ODcgMTIuOTUwMSA1Ljc1NDQgMTIuOTUwMUg5LjI1NDRDOS41MDI5MyAxMi45NTAxIDkuNzA0NCAxMi43NDg2IDkuNzA0NCAxMi41MDAxQzkuNzA0NCAxMi4yNTE1IDkuNTAyOTMgMTIuMDUwMSA5LjI1NDQgMTIuMDUwMUg4LjA1MDA2VjcuNjU3MDVMMTMuMzUzNiAyLjM1MzU1Wk04LjA1MDA2IDYuMjQyODRMMTEuMDUwMSAzLjI0MjgzVjIuOTUwMDVIOC4wNTAwNlY2LjI0Mjg0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sb289ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUgMy41QzUgMy4yMjM4NiA1LjIyMzg2IDMgNS41IDNIOS41QzkuNzc2MTQgMyAxMCAzLjIyMzg2IDEwIDMuNVY2SDEyLjVDMTIuNjg3MyA2IDEyLjg1ODkgNi4xMDQ2NyAxMi45NDQ2IDYuMjcxMjFDMTMuMDMwMyA2LjQzNzc0IDEzLjAxNTcgNi42MzgyMSAxMi45MDY5IDYuNzkwNjJMNy45MDY4NyAxMy43OTA2QzcuODEzMDEgMTMuOTIyIDcuNjYxNDggMTQgNy41IDE0QzcuMzM4NTMgMTQgNy4xODY5OSAxMy45MjIgNy4wOTMxNCAxMy43OTA2TDIuMDkzMTQgNi43OTA2MkMxLjk4NDI3IDYuNjM4MjEgMS45Njk3MiA2LjQzNzc0IDIuMDU1NDIgNi4yNzEyMUMyLjE0MTEyIDYuMTA0NjcgMi4zMTI3MSA2IDIuNSA2SDVWMy41Wk02IDRWNi41QzYgNi43NzYxNCA1Ljc3NjE0IDcgNS41IDdIMy40NzE2TDcuNSAxMi42Mzk4TDExLjUyODQgN0g5LjVDOS4yMjM4NiA3IDkgNi43NzYxNCA5IDYuNVY0SDZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxpbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMSA3LjVDMSA3LjY2MTQ4IDEuMDc3OTggNy44MTMwMSAxLjIwOTM4IDcuOTA2ODdMOC4yMDkzOCAxMi45MDY5QzguMzYxNzkgMTMuMDE1NyA4LjU2MjI2IDEzLjAzMDMgOC43Mjg3OSAxMi45NDQ2QzguODk1MzMgMTIuODU4OSA5IDEyLjY4NzMgOSAxMi41TDkgMTBMMTEuNSAxMEMxMS43NzYxIDEwIDEyIDkuNzc2MTQgMTIgOS41TDEyIDUuNUMxMiA1LjIyMzg2IDExLjc3NjEgNSAxMS41IDVMOSA1TDkgMi41QzkgMi4zMTI3MSA4Ljg5NTMzIDIuMTQxMTIgOC43Mjg3OSAyLjA1NTQyQzguNTYyMjYgMS45Njk3MiA4LjM2MTc5IDEuOTg0MjcgOC4yMDkzOCAyLjA5MzEzTDEuMjA5MzggNy4wOTMxNEMxLjA3Nzk4IDcuMTg2OTkgMSA3LjMzODUzIDEgNy41Wk04IDMuNDcxNkw4IDUuNUM4IDUuNzc2MTQgOC4yMjM4NiA2IDguNSA2TDExIDZMMTEgOUw4LjUgOUM4LjIyMzg2IDkgOCA5LjIyMzg2IDggOS41TDggMTEuNTI4NEwyLjM2MDIzIDcuNUw4IDMuNDcxNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGFvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xNCA3LjVDMTQgNy42NjE0OCAxMy45MjIgNy44MTMwMSAxMy43OTA2IDcuOTA2ODdMNi43OTA2MiAxMi45MDY5QzYuNjM4MjEgMTMuMDE1NyA2LjQzNzc0IDEzLjAzMDMgNi4yNzEyMSAxMi45NDQ2QzYuMTA0NjcgMTIuODU4OSA2IDEyLjY4NzMgNiAxMi41TDYgMTBMMy41IDEwQzMuMjIzODYgMTAgMyA5Ljc3NjE0IDMgOS41TDMgNS41QzMgNS4yMjM4NiAzLjIyMzg2IDUgMy41IDVMNiA1TDYgMi41QzYgMi4zMTI3MSA2LjEwNDY3IDIuMTQxMTIgNi4yNzEyMSAyLjA1NTQyQzYuNDM3NzQgMS45Njk3MiA2LjYzODIxIDEuOTg0MjcgNi43OTA2MiAyLjA5MzEzTDEzLjc5MDYgNy4wOTMxNEMxMy45MjIgNy4xODY5OSAxNCA3LjMzODUzIDE0IDcuNVpNNyAzLjQ3MTZMNyA1LjVDNyA1Ljc3NjE0IDYuNzc2MTQgNiA2LjUgNkw0IDZMNCA5TDYuNSA5QzYuNzc2MTQgOSA3IDkuMjIzODYgNyA5LjVMNyAxMS41Mjg0TDEyLjYzOTggNy41TDcgMy40NzE2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbG89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNSAxQzcuNjYxNDggMSA3LjgxMzAxIDEuMDc3OTggNy45MDY4NyAxLjIwOTM4TDEyLjkwNjkgOC4yMDkzOEMxMy4wMTU3IDguMzYxNzkgMTMuMDMwMyA4LjU2MjI2IDEyLjk0NDYgOC43Mjg3OUMxMi44NTg5IDguODk1MzMgMTIuNjg3MyA5IDEyLjUgOUgxMFYxMS41QzEwIDExLjc3NjEgOS43NzYxNCAxMiA5LjUgMTJINS41QzUuMjIzODYgMTIgNSAxMS43NzYxIDUgMTEuNVY5SDIuNUMyLjMxMjcxIDkgMi4xNDExMiA4Ljg5NTMzIDIuMDU1NDIgOC43Mjg3OUMxLjk2OTcyIDguNTYyMjYgMS45ODQyNyA4LjM2MTc5IDIuMDkzMTQgOC4yMDkzOEw3LjA5MzE0IDEuMjA5MzhDNy4xODY5OSAxLjA3Nzk4IDcuMzM4NTMgMSA3LjUgMVpNMy40NzE2IDhINS41QzUuNzc2MTQgOCA2IDguMjIzODYgNiA4LjVWMTFIOVY4LjVDOSA4LjIyMzg2IDkuMjIzODYgOCA5LjUgOEgxMS41Mjg0TDcuNSAyLjM2MDIzTDMuNDcxNiA4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sc289ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5OTggMC44NDk5NzZDNy4yMjM4MyAwLjg0OTk3NiA2Ljk5OTk4IDEuMDczODMgNi45OTk5OCAxLjM0OTk4VjMuNTIyMzRDNi45OTk5OCAzLjc5ODQ4IDcuMjIzODMgNC4wMjIzNCA3LjQ5OTk4IDQuMDIyMzRDNy43NzYxMiA0LjAyMjM0IDcuOTk5OTggMy43OTg0OCA3Ljk5OTk4IDMuNTIyMzRWMS44NzE4QzEwLjg4NjIgMi4xMjQ4OCAxMy4xNSA0LjU0ODA2IDEzLjE1IDcuNDk5OThDMTMuMTUgMTAuNjIwNCAxMC42MjA0IDEzLjE1IDcuNDk5OTggMTMuMTVDNC4zNzk1NyAxMy4xNSAxLjg0OTk4IDEwLjYyMDQgMS44NDk5OCA3LjQ5OTk4QzEuODQ5OTggNi4xMDYxMiAyLjM1NDA3IDQuODMxMjggMy4xOTA0OSAzLjg0NTlDMy4zNjkxOSAzLjYzNTM4IDMuMzQzMzkgMy4zMTk4NSAzLjEzMjg2IDMuMTQxMTVDMi45MjIzNCAyLjk2MjQ1IDIuNjA2ODEgMi45ODgyNSAyLjQyODExIDMuMTk4NzdDMS40NDQwNSA0LjM1ODA4IDAuODQ5OTc2IDUuODYwMjkgMC44NDk5NzYgNy40OTk5OEMwLjg0OTk3NiAxMS4xNzI3IDMuODI3MjggMTQuMTUgNy40OTk5OCAxNC4xNUMxMS4xNzI3IDE0LjE1IDE0LjE1IDExLjE3MjcgMTQuMTUgNy40OTk5OEMxNC4xNSAzLjgyNzI4IDExLjE3MjcgMC44NDk5NzYgNy40OTk5OCAwLjg0OTk3NlpNNi43NDA0OSA4LjA4MDcyTDQuMjIzNjMgNC41NzIzN0M0LjE1MjMxIDQuNDcyOTUgNC4xNjM0NiA0LjMzNjUyIDQuMjQ5OTggNC4yNUM0LjMzNjQ5IDQuMTYzNDggNC40NzI5MyA0LjE1MjMzIDQuNTcyMzQgNC4yMjM2NUw4LjA4MDY5IDYuNzQwNTFDOC41NjIyNyA3LjA4NTk5IDguNjE5MDYgNy43ODA5MSA4LjE5OTk4IDguMkM3Ljc4MDg5IDguNjE5MDkgNy4wODU5NyA4LjU2MjI5IDYuNzQwNDkgOC4wODA3MlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGNvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjUgMkMzLjExOTI5IDIgMiAzLjExOTI5IDIgNC41QzIgNS44ODA3MiAzLjExOTI5IDcgNC41IDdDNS44ODA3MiA3IDcgNS44ODA3MiA3IDQuNUM3IDMuMTE5MjkgNS44ODA3MiAyIDQuNSAyWk0zIDQuNUMzIDMuNjcxNTcgMy42NzE1NyAzIDQuNSAzQzUuMzI4NDMgMyA2IDMuNjcxNTcgNiA0LjVDNiA1LjMyODQzIDUuMzI4NDMgNiA0LjUgNkMzLjY3MTU3IDYgMyA1LjMyODQzIDMgNC41Wk0xMC41IDJDOS4xMTkyOSAyIDggMy4xMTkyOSA4IDQuNUM4IDUuODgwNzIgOS4xMTkyOSA3IDEwLjUgN0MxMS44ODA3IDcgMTMgNS44ODA3MiAxMyA0LjVDMTMgMy4xMTkyOSAxMS44ODA3IDIgMTAuNSAyWk05IDQuNUM5IDMuNjcxNTcgOS42NzE1NyAzIDEwLjUgM0MxMS4zMjg0IDMgMTIgMy42NzE1NyAxMiA0LjVDMTIgNS4zMjg0MyAxMS4zMjg0IDYgMTAuNSA2QzkuNjcxNTcgNiA5IDUuMzI4NDMgOSA0LjVaTTIgMTAuNUMyIDkuMTE5MjkgMy4xMTkyOSA4IDQuNSA4QzUuODgwNzIgOCA3IDkuMTE5MjkgNyAxMC41QzcgMTEuODgwNyA1Ljg4MDcyIDEzIDQuNSAxM0MzLjExOTI5IDEzIDIgMTEuODgwNyAyIDEwLjVaTTQuNSA5QzMuNjcxNTcgOSAzIDkuNjcxNTcgMyAxMC41QzMgMTEuMzI4NCAzLjY3MTU3IDEyIDQuNSAxMkM1LjMyODQzIDEyIDYgMTEuMzI4NCA2IDEwLjVDNiA5LjY3MTU3IDUuMzI4NDMgOSA0LjUgOVpNMTAuNSA4QzkuMTE5MjkgOCA4IDkuMTE5MjkgOCAxMC41QzggMTEuODgwNyA5LjExOTI5IDEzIDEwLjUgMTNDMTEuODgwNyAxMyAxMyAxMS44ODA3IDEzIDEwLjVDMTMgOS4xMTkyOSAxMS44ODA3IDggMTAuNSA4Wk05IDEwLjVDOSA5LjY3MTU3IDkuNjcxNTcgOSAxMC41IDlDMTEuMzI4NCA5IDEyIDkuNjcxNTcgMTIgMTAuNUMxMiAxMS4zMjg0IDExLjMyODQgMTIgMTAuNSAxMkM5LjY3MTU3IDEyIDkgMTEuMzI4NCA5IDEwLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx1bz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTMuMDUwMiAyLjc0OTg5QzEzLjA1MDIgMi40NDYxMyAxMi44MDQgMi4xOTk4OSAxMi41MDAyIDIuMTk5ODlDMTIuMTk2NSAyLjE5OTg5IDExLjk1MDIgMi40NDYxMyAxMS45NTAyIDIuNzQ5ODlWNy4yODI1QzExLjkwNDYgNy4xODgwMiAxMS44Mjk1IDcuMTA4NTEgMTEuNzMzNCA3LjA1Nzc2TDIuNzMzMzggMi4zMDc3NkMyLjU3ODQgMi4yMjU5NiAyLjM5MTkgMi4yMzEyNyAyLjI0MTgyIDIuMzIxNzZDMi4wOTE3NSAyLjQxMjI1IDIgMi41NzQ3MSAyIDIuNzQ5OTVWMTIuMjVDMiAxMi40MjUyIDIuMDkxNzUgMTIuNTg3NyAyLjI0MTgyIDEyLjY3ODFDMi4zOTE5IDEyLjc2ODYgMi41Nzg0IDEyLjc3MzkgMi43MzMzOCAxMi42OTIxTDExLjczMzQgNy45NDIxNEMxMS44Mjk1IDcuODkxMzkgMTEuOTA0NiA3LjgxMTg4IDExLjk1MDIgNy43MTc0VjEyLjI0OTlDMTEuOTUwMiAxMi41NTM2IDEyLjE5NjUgMTIuNzk5OSAxMi41MDAyIDEyLjc5OTlDMTIuODA0IDEyLjc5OTkgMTMuMDUwMiAxMi41NTM2IDEzLjA1MDIgMTIuMjQ5OVYyLjc0OTg5Wk0zIDExLjQyMDdWMy41NzkyTDEwLjQyODggNy40OTk5NUwzIDExLjQyMDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxmbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS45NDk3NiAyLjc0OTg5QzEuOTQ5NzYgMi40NDYxMyAyLjE5NiAyLjE5OTg5IDIuNDk5NzYgMi4xOTk4OUMyLjgwMzUxIDIuMTk5ODkgMy4wNDk3NiAyLjQ0NjEzIDMuMDQ5NzYgMi43NDk4OVY3LjI4MjVDMy4wOTU0IDcuMTg4MDIgMy4xNzA0NiA3LjEwODUxIDMuMjY2NjIgNy4wNTc3NkwxMi4yNjY2IDIuMzA3NzZDMTIuNDIxNiAyLjIyNTk2IDEyLjYwODEgMi4yMzEyNyAxMi43NTgyIDIuMzIxNzZDMTIuOTA4MyAyLjQxMjI1IDEzIDIuNTc0NzEgMTMgMi43NDk5NVYxMi4yNUMxMyAxMi40MjUyIDEyLjkwODMgMTIuNTg3NyAxMi43NTgyIDEyLjY3ODFDMTIuNjA4MSAxMi43Njg2IDEyLjQyMTYgMTIuNzczOSAxMi4yNjY2IDEyLjY5MjFMMy4yNjY2MiA3Ljk0MjE0QzMuMTcwNDYgNy44OTEzOSAzLjA5NTQgNy44MTE4OCAzLjA0OTc2IDcuNzE3NFYxMi4yNDk5QzMuMDQ5NzYgMTIuNTUzNiAyLjgwMzUxIDEyLjc5OTkgMi40OTk3NiAxMi43OTk5QzIuMTk2IDEyLjc5OTkgMS45NDk3NiAxMi41NTM2IDEuOTQ5NzYgMTIuMjQ5OVYyLjc0OTg5Wk00LjU3MTIyIDcuNDk5OTVMMTIgMTEuNDIwN1YzLjU3OTJMNC41NzEyMiA3LjQ5OTk1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scG89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjI1XCIsZDpcIk0wIDBIM1YzSDBWMFpNNiAzSDNWNkgwVjlIM1YxMkgwVjE1SDNWMTJINlYxNUg5VjEySDEyVjE1SDE1VjEySDEyVjlIMTVWNkgxMlYzSDE1VjBIMTJWM0g5VjBINlYzWk02IDZWM0g5VjZINlpNNiA5SDNWNkg2VjlaTTkgOVY2SDEyVjlIOVpNOSA5SDZWMTJIOVY5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0saG89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUuNSAxQzUuMjIzODYgMSA1IDEuMjIzODYgNSAxLjVDNSAxLjc3NjE0IDUuMjIzODYgMiA1LjUgMkg5LjVDOS43NzYxNCAyIDEwIDEuNzc2MTQgMTAgMS41QzEwIDEuMjIzODYgOS43NzYxNCAxIDkuNSAxSDUuNVpNMyAzLjVDMyAzLjIyMzg2IDMuMjIzODYgMyAzLjUgM0g1SDEwSDExLjVDMTEuNzc2MSAzIDEyIDMuMjIzODYgMTIgMy41QzEyIDMuNzc2MTQgMTEuNzc2MSA0IDExLjUgNEgxMVYxMkMxMSAxMi41NTIzIDEwLjU1MjMgMTMgMTAgMTNINUM0LjQ0NzcyIDEzIDQgMTIuNTUyMyA0IDEyVjRMMy41IDRDMy4yMjM4NiA0IDMgMy43NzYxNCAzIDMuNVpNNSA0SDEwVjEySDVWNFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGdvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00IDZIMTFMNy41IDEwLjVMNCA2WlwiLGZpbGw6bn0pKX0sdm89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTkgNEw5IDExTDQuNSA3LjVMOSA0WlwiLGZpbGw6bn0pKX0sbW89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTYgMTFMNiA0TDEwLjUgNy41TDYgMTFaXCIsZmlsbDpufSkpfSxDbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNCA5SDExTDcuNSA0LjVMNCA5WlwiLGZpbGw6bn0pKX0seW89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuMjMzMzYgNC42OTYyOUM3LjIzMzM2IDIuOTY4ODQgOC42MzMzNSAxLjU2ODU3IDEwLjM2IDEuNTY4NTdDMTEuMzczNiAxLjU2ODU3IDEyLjE4MyAyLjA0ODA0IDEyLjcyNTQgMi43NDM4NUMxMy4zMDc5IDIuNjI0NjcgMTMuODU1NyAyLjQwOTEzIDE0LjM1MTMgMi4xMTUwOEMxNC4xNTU5IDIuNzI1OTggMTMuNzQyNCAzLjIzOTYgMTMuMjAzMyAzLjU2NDYzQzEzLjIwMzggMy41NjU2OCAxMy4yMDQyIDMuNTY2NzQgMTMuMjA0NyAzLjU2Nzc5QzEzLjczMzQgMy41MDM2MSAxNC4yMzY0IDMuMzYzMDIgMTQuNzA0OCAzLjE1NTQ2TDE0LjcwMzcgMy4xNTcxNUMxNC4zNjY3IDMuNjYxODMgMTMuOTQzMSA0LjEwNzM2IDEzLjQ1NjEgNC40NzAzNEMxMy40ODIzIDQuNjQ2NzIgMTMuNDk1NiA0LjgyNDI3IDEzLjQ5NTYgNS4wMDA3OUMxMy40OTU2IDguNjg3MSAxMC42ODczIDEyLjk3NDYgNS41MjEyMiAxMi45NzQ2QzMuOTM5MDYgMTIuOTc0NiAyLjQ2NTQ0IDEyLjUxMSAxLjIyNTA1IDExLjcxNTJDMC45OTI2MzIgMTEuNTY2MSAwLjkyNTEwOCAxMS4yNTY4IDEuMDc0MjMgMTEuMDI0NEMxLjA4NzQgMTEuMDAzOCAxLjEwMTgzIDEwLjk4NDYgMS4xMTczNCAxMC45NjY2QzEuMjA1ODIgMTAuODIwMiAxLjM3NDM4IDEwLjczMDkgMS41NTU0IDEwLjc1MjJDMi40NzA2NiAxMC44NjAxIDMuMzg1NjggMTAuNzQ4NSA0LjE5MjE5IDEwLjM5NjJDMy4zOTIyNiAxMC4wNDM0IDIuNzcxMjkgOS4zNTk3NSAyLjUwMjA0IDguNTE5NzRDMi40NTM1OSA4LjM2ODYgMi40ODgzNSA4LjIwMzExIDIuNTkzNTEgOC4wODQyMkMyLjU5NzE2IDguMDgwMSAyLjYwMDg3IDguMDc2MDYgMi42MDQ2NCA4LjA3MjFDMS45NjM5MSA3LjUwODE5IDEuNTU5NzMgNi42ODIwOCAxLjU1OTczIDUuNzYxNDNWNS43Mjc1OUMxLjU1OTczIDUuNTY4MTQgMS42NDQxMSA1LjQyMDU5IDEuNzgxNTUgNS4zMzk3NEMxLjgyNjcxIDUuMzEzMTcgMS44NzUzNyA1LjI5NTExIDEuOTI1MzIgNS4yODU1OEMxLjcwNTQ5IDQuODYxNTQgMS41ODExNiA0LjM3OTg0IDEuNTgxMTYgMy44Njk1OEMxLjU4MTE2IDMuNDAxNjUgMS41ODM4NCAyLjgxMTkyIDEuOTEzMzIgMi4yODA4MUMxLjk4NzE4IDIuMTYxNzUgMi4xMDc1OCAyLjA4OTE1IDIuMjM2NCAyLjA3MTk1QzIuNDI1ODggMi4wMTIzNyAyLjY0MDg3IDIuMDY5NjkgMi43NzQwNiAyLjIzMzAyQzMuODY1MzYgMy41NzEyNiA1LjQ0MDY2IDQuNDk1ODMgNy4yMzM2NiA0LjczOTYxTDcuMjMzMzYgNC42OTYyOVpNNS41MjEyMiAxMS45NzQ2QzQuNzMzODcgMTEuOTc0NiAzLjk3NzgxIDExLjg0MzUgMy4yNzI0OCAxMS42MDIzQzQuMTMwMTIgMTEuNDUzOCA0Ljk1MzA3IDExLjExNTkgNS42NjIxOCAxMC41NjAyQzUuODEyMTEgMTAuNDQyNyA1Ljg3MTgyIDEwLjI0MzUgNS44MTEyNiAxMC4wNjI5QzUuNzUwNyA5Ljg4MjM0IDUuNTgzIDkuNzU5NDMgNS4zOTI1NSA5Ljc1NjA3QzQuNjg5NjggOS43NDM2NiA0LjA2NzEyIDkuMzk3MTYgMy42Nzc5MyA4Ljg2ODQ1QzMuODY4MjggOC44NTMwNiA0LjA1NDI4IDguODIwMzkgNC4yMzQ0NSA4Ljc3MTY3QzQuNDM2MDMgOC43MTcxNiA0LjU3MzYzIDguNTMxMTQgNC41NjY3NCA4LjMyMjQzQzQuNTU5ODUgOC4xMTM3MiA0LjQxMDI5IDcuOTM3MTggNC4yMDU1NSA3Ljg5NjA3QzMuNDI2OTQgNy43Mzk3NyAyLjc5ODgzIDcuMTY3NjQgMi41NjE2OSA2LjQyMTc0QzIuNzYyNTUgNi40NzAyNSAyLjk3MTAyIDYuNDk5MSAzLjE4NDgyIDYuNTA2MUMzLjM4NTYzIDYuNTEyNjcgMy41NjY0NiA2LjM4NTMzIDMuNjI3OTUgNi4xOTQwNUMzLjY4OTQzIDYuMDAyNzcgMy42MTY2NiA1Ljc5MzkxIDMuNDQ5NjMgNS42ODIyNEMyLjg2NTIzIDUuMjkxNTUgMi40ODExNiA0LjYyNDY0IDIuNDgxMTYgMy44Njk1OEMyLjQ4MTE2IDMuNzAyMTMgMi40ODM1MiAzLjU1MjY4IDIuNDkzNTUgMy40MTcxOUMzLjg1MTE1IDQuNzk5MTMgNS43MDg3MyA1LjY4OTMxIDcuNzc1ODggNS43OTMzOEM3LjkzMjI1IDUuODAxMjYgOC4wODMyOCA1LjczNTQzIDguMTgzOTUgNS42MTU1M0M4LjI4NDYzIDUuNDk1NjIgOC4zMjMzMiA1LjMzNTQ4IDguMjg4NTEgNS4xODI4NEM4LjI1MjU1IDUuMDI1MTcgOC4yMzMzNiA0Ljg2Mjg0IDguMjMzMzYgNC42OTYyOUM4LjIzMzM2IDMuNTIwODUgOS4xODU5MSAyLjU2ODU3IDEwLjM2IDIuNTY4NTdDMTEuNTk0MyAyLjU2ODU3IDEyLjQ5NTYgMy43MTIwOCAxMi40OTU2IDUuMDAwNzlDMTIuNDk1NiA4LjI1NzA5IDEwLjAyMDIgMTEuOTc0NiA1LjUyMTIyIDExLjk3NDZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx3bz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNS4wMDAwMSAyLjc1QzUuMDAwMDEgMi40NzM4NiA0Ljc3NjE1IDIuMjUgNC41MDAwMSAyLjI1QzQuMjIzODcgMi4yNSA0LjAwMDAxIDIuNDczODYgNC4wMDAwMSAyLjc1VjguMDVDNC4wMDAwMSA5Ljk4MyA1LjU2NzAyIDExLjU1IDcuNTAwMDEgMTEuNTVDOS40MzMwMSAxMS41NSAxMSA5Ljk4MyAxMSA4LjA1VjIuNzVDMTEgMi40NzM4NiAxMC43NzYyIDIuMjUgMTAuNSAyLjI1QzEwLjIyMzkgMi4yNSAxMCAyLjQ3Mzg2IDEwIDIuNzVWOC4wNUMxMCA5LjQzMDcxIDguODgwNzIgMTAuNTUgNy41MDAwMSAxMC41NUM2LjExOTMgMTAuNTUgNS4wMDAwMSA5LjQzMDcxIDUuMDAwMDEgOC4wNVYyLjc1Wk0zLjQ5OTk4IDEzLjEwMDFDMy4yNzkwNiAxMy4xMDAxIDMuMDk5OTggMTMuMjc5MSAzLjA5OTk4IDEzLjUwMDFDMy4wOTk5OCAxMy43MjEgMy4yNzkwNiAxMy45MDAxIDMuNDk5OTggMTMuOTAwMUgxMS41QzExLjcyMDkgMTMuOTAwMSAxMS45IDEzLjcyMSAxMS45IDEzLjUwMDFDMTEuOSAxMy4yNzkxIDExLjcyMDkgMTMuMTAwMSAxMS41IDEzLjEwMDFIMy40OTk5OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGJvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjkwMzIxIDcuMjk2NzdDMS45MDMyMSAxMC4zNDEgNC4xMTA0MSAxMi40MTQ3IDYuNTg4OTMgMTIuODQzOUM2Ljg3MjU1IDEyLjg5MyA3LjA2MjY2IDEzLjE2MjcgNy4wMTM1NSAxMy40NDY0QzYuOTY0NDQgMTMuNzMgNi42OTQ3MSAxMy45MjAxIDYuNDExMDkgMTMuODcxQzMuNDk5NDIgMTMuMzY2OCAwLjg2MDg0IDEwLjkxMjcgMC44NjA4NCA3LjI5Njc3QzAuODYwODM5IDUuNzYwMDkgMS41NTk5NiA0LjU1MjQ1IDIuMzc2MzkgMy42MzM3N0MyLjk2MTI0IDIuOTc1NjggMy42MzAzNCAyLjQ0MTM1IDQuMTY4NDYgMi4wMzIwMkwyLjUzMjA1IDIuMDMyMDJDMi4yNTU5MSAyLjAzMjAyIDIuMDMyMDUgMS44MDgxNiAyLjAzMjA1IDEuNTMyMDJDMi4wMzIwNSAxLjI1NTg4IDIuMjU1OTEgMS4wMzIwMiAyLjUzMjA1IDEuMDMyMDJMNS41MzIwNSAxLjAzMjAyQzUuODA4MTkgMS4wMzIwMiA2LjAzMjA1IDEuMjU1ODggNi4wMzIwNSAxLjUzMjAyTDYuMDMyMDUgNC41MzIwMkM2LjAzMjA1IDQuODA4MTYgNS44MDgxOSA1LjAzMjAyIDUuNTMyMDUgNS4wMzIwMkM1LjI1NTkxIDUuMDMyMDIgNS4wMzIwNSA0LjgwODE2IDUuMDMyMDUgNC41MzIwMkw1LjAzMjA1IDIuNjg2NDVMNS4wMzA1NCAyLjY4NzU5TDUuMDMwNDUgMi42ODc2Nkw1LjAzMDQ0IDIuNjg3NjdMNS4wMzA0MyAyLjY4NzY3QzQuNDU4OTYgMy4xMTg2OCAzLjc2MDU5IDMuNjQ1MzggMy4xNTU1NCA0LjMyNjJDMi40NDEwMiA1LjEzMDIxIDEuOTAzMjEgNi4xMDE1NCAxLjkwMzIxIDcuMjk2NzdaTTEzLjAxMDkgNy43MDMyMUMxMy4wMTA5IDQuNjkxMTUgMTAuODUwNSAyLjYyOTYgOC40MDM4NCAyLjE3MDI5QzguMTIwOTMgMi4xMTcxOCA3LjkzNDY1IDEuODQ0NzkgNy45ODc3NiAxLjU2MTg4QzguMDQwODcgMS4yNzg5OCA4LjMxMzI2IDEuMDkyNyA4LjU5NjE2IDEuMTQ1ODFDMTEuNDcwNCAxLjY4NTQxIDE0LjA1MzIgNC4xMjYwNSAxNC4wNTMyIDcuNzAzMjFDMTQuMDUzMiA5LjIzOTg4IDEzLjM1NDEgMTAuNDQ3NSAxMi41Mzc3IDExLjM2NjJDMTEuOTUyOCAxMi4wMjQzIDExLjI4MzcgMTIuNTU4NiAxMC43NDU2IDEyLjk2OEwxMi4zODIxIDEyLjk2OEMxMi42NTgyIDEyLjk2OCAxMi44ODIxIDEzLjE5MTggMTIuODgyMSAxMy40NjhDMTIuODgyMSAxMy43NDQxIDEyLjY1ODIgMTMuOTY4IDEyLjM4MjEgMTMuOTY4TDkuMzgyMDUgMTMuOTY4QzkuMTA1OTEgMTMuOTY4IDguODgyMDUgMTMuNzQ0MSA4Ljg4MjA1IDEzLjQ2OEw4Ljg4MjA1IDEwLjQ2OEM4Ljg4MjA1IDEwLjE5MTggOS4xMDU5MSA5Ljk2Nzk2IDkuMzgyMDUgOS45Njc5NkM5LjY1ODE5IDkuOTY3OTYgOS44ODIwNSAxMC4xOTE4IDkuODgyMDUgMTAuNDY4TDkuODgyMDUgMTIuMzEzNUw5Ljg4MzYyIDEyLjMxMjNDMTAuNDU1MSAxMS44ODEzIDExLjE1MzUgMTEuMzU0NiAxMS43NTg1IDEwLjY3MzhDMTIuNDczMSA5Ljg2OTc2IDEzLjAxMDkgOC44OTg0NCAxMy4wMTA5IDcuNzAzMjFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx4bz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy44MTgyNSAxLjE4MTg4QzcuNjQyNTEgMS4wMDYxNSA3LjM1NzU5IDEuMDA2MTUgNy4xODE4NSAxLjE4MTg4TDQuMTgxODUgNC4xODE4OEM0LjAwNjExIDQuMzU3NjIgNC4wMDYxMSA0LjY0MjU0IDQuMTgxODUgNC44MTgyOEM0LjM1NzU5IDQuOTk0MDEgNC42NDI1MSA0Ljk5NDAxIDQuODE4MjUgNC44MTgyOEw3LjA1MDA1IDIuNTg2NDhWOS40OTk5NkM3LjA1MDA1IDkuNzQ4NDkgNy4yNTE1MiA5Ljk0OTk2IDcuNTAwMDUgOS45NDk5NkM3Ljc0ODU4IDkuOTQ5OTYgNy45NTAwNSA5Ljc0ODQ5IDcuOTUwMDUgOS40OTk5NlYyLjU4NjQ4TDEwLjE4MTkgNC44MTgyOEMxMC4zNTc2IDQuOTk0MDEgMTAuNjQyNSA0Ljk5NDAxIDEwLjgxODIgNC44MTgyOEMxMC45OTQgNC42NDI1NCAxMC45OTQgNC4zNTc2MiAxMC44MTgyIDQuMTgxODhMNy44MTgyNSAxLjE4MTg4Wk0yLjUgOS45OTk5N0MyLjc3NjE0IDkuOTk5OTcgMyAxMC4yMjM4IDMgMTAuNVYxMkMzIDEyLjU1MzggMy40NDU2NSAxMyAzLjk5NjM1IDEzSDExLjAwMTJDMTEuNTUyOSAxMyAxMiAxMi41NTI4IDEyIDEyVjEwLjVDMTIgMTAuMjIzOCAxMi4yMjM5IDkuOTk5OTcgMTIuNSA5Ljk5OTk3QzEyLjc3NjEgOS45OTk5NyAxMyAxMC4yMjM4IDEzIDEwLjVWMTJDMTMgMTMuMTA0IDEyLjEwNjIgMTQgMTEuMDAxMiAxNEgzLjk5NjM1QzIuODkwMTkgMTQgMiAxMy4xMDMgMiAxMlYxMC41QzIgMTAuMjIzOCAyLjIyMzg2IDkuOTk5OTcgMi41IDkuOTk5OTdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxfbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC44NzcwNzUgNy40OTk4OEMwLjg3NzA3NSAzLjg0MjE5IDMuODQyMjIgMC44NzcwNDUgNy40OTk5MSAwLjg3NzA0NUMxMS4xNTc2IDAuODc3MDQ1IDE0LjEyMjcgMy44NDIxOSAxNC4xMjI3IDcuNDk5ODhDMTQuMTIyNyAxMS4xNTc1IDExLjE1NzYgMTQuMTIyNyA3LjQ5OTkxIDE0LjEyMjdDMy44NDIyMiAxNC4xMjI3IDAuODc3MDc1IDExLjE1NzUgMC44NzcwNzUgNy40OTk4OFpNNy40OTk5MSAxLjgyNzA0QzQuMzY2ODkgMS44MjcwNCAxLjgyNzA4IDQuMzY2ODYgMS44MjcwOCA3LjQ5OTg4QzEuODI3MDggMTAuNjMyOSA0LjM2Njg5IDEzLjE3MjcgNy40OTk5MSAxMy4xNzI3QzEwLjYzMjkgMTMuMTcyNyAxMy4xNzI3IDEwLjYzMjkgMTMuMTcyNyA3LjQ5OTg4QzEzLjE3MjcgNC4zNjY4NiAxMC42MzI5IDEuODI3MDQgNy40OTk5MSAxLjgyNzA0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sT289ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5ODUgMC44NzcwNDVDMy44NDIxNiAwLjg3NzA0NSAwLjg3NzAxNCAzLjg0MjE5IDAuODc3MDE0IDcuNDk5ODhDMC44NzcwMTQgOS4xNDg4IDEuNDc5NjMgMTAuNjU3IDIuNDc2NjUgMTEuODE2MkwxLjY0NjQzIDEyLjY0NjRDMS40NTExNyAxMi44NDE3IDEuNDUxMTcgMTMuMTU4MyAxLjY0NjQzIDEzLjM1MzVDMS44NDE3IDEzLjU0ODggMi4xNTgyOCAxMy41NDg4IDIuMzUzNTQgMTMuMzUzNUwzLjE4Mzc3IDEyLjUyMzNDNC4zNDI5NiAxMy41MjAyIDUuODUxMDQgMTQuMTIyNyA3LjQ5OTg1IDE0LjEyMjdDMTEuMTU3NSAxNC4xMjI3IDE0LjEyMjcgMTEuMTU3NSAxNC4xMjI3IDcuNDk5ODhDMTQuMTIyNyA1Ljg1MTA3IDEzLjUyMDIgNC4zNDI5OSAxMi41MjMzIDMuMTgzOEwxMy4zNTM1IDIuMzUzNTRDMTMuNTQ4OCAyLjE1ODI3IDEzLjU0ODggMS44NDE2OSAxMy4zNTM1IDEuNjQ2NDNDMTMuMTU4MyAxLjQ1MTE3IDEyLjg0MTcgMS40NTExNyAxMi42NDY0IDEuNjQ2NDNMMTEuODE2MiAyLjQ3NjY4QzEwLjY1NyAxLjQ3OTY2IDkuMTQ4NzcgMC44NzcwNDUgNy40OTk4NSAwLjg3NzA0NVpNMTEuMTQyMiAzLjE1MDY2QzEwLjE1NjcgMi4zMjQ0OSA4Ljg4NjM5IDEuODI3MDQgNy40OTk4NSAxLjgyNzA0QzQuMzY2ODMgMS44MjcwNCAxLjgyNzAxIDQuMzY2ODYgMS44MjcwMSA3LjQ5OTg4QzEuODI3MDEgOC44ODY0MiAyLjMyNDQ2IDEwLjE1NjggMy4xNTA2MyAxMS4xNDIyTDExLjE0MjIgMy4xNTA2NlpNMy44NTc3NiAxMS44NDkzQzQuODQzMTcgMTIuNjc1MyA2LjExMzQzIDEzLjE3MjcgNy40OTk4NSAxMy4xNzI3QzEwLjYzMjggMTMuMTcyNyAxMy4xNzI3IDEwLjYzMjkgMTMuMTcyNyA3LjQ5OTg4QzEzLjE3MjcgNi4xMTM0NiAxMi42NzUzIDQuODQzMiAxMS44NDkzIDMuODU3NzlMMy44NTc3NiAxMS44NDkzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTG89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5OTggMUw2LjkyMzIxIDIuMDAzMDdMMS4xNzQ5OCAxMkwwLjU5OTk3NiAxM0gxLjc1MzVIMTMuMjQ2NEgxNC40TDEzLjgyNSAxMkw4LjA3Njc0IDIuMDAzMDdMNy40OTk5OCAxWk03LjQ5OTk4IDMuMDA2MTNMMi4zMjg1IDEySDEyLjY3MTRMNy40OTk5OCAzLjAwNjEzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sRW89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuNzY0NDcgMy4xMjE5OUM1LjYzMTUxIDMuMDQ4NTkgNi41NjA4MiAzIDcuNSAzQzguNDM5MTggMyA5LjM2ODQ5IDMuMDQ4NTkgMTAuMjM1NSAzLjEyMTk5QzExLjI3OTYgMy4yMTAzNyAxMS45NTUzIDMuMjcwMDggMTIuNDcyIDMuMzkyMDNDMTIuOTQyNSAzLjUwMzA0IDEzLjIwNDggMy42NDk3NiAxMy40MzA2IDMuODgwODZDMTMuNDU1MyAzLjkwNjE4IDEzLjQ5MDIgMy45NDQxNCAxMy41MTMzIDMuOTcwOTJDMTMuNzEyNiA0LjIwMTQ5IDEzLjg0MzUgNC40ODg3IDEzLjkxOCA1LjAzMjgzQzEzLjk5NzggNS42MTU2IDE0IDYuMzc2NDQgMTQgNy41MjQ5M0MxNCA4LjY2MDI2IDEzLjk5NzggOS40MTAxOSAxMy45MTgxIDkuOTg1MzhDMTMuODQzOSAxMC41MjA2IDEzLjcxMzcgMTAuODA2MSAxMy41MTI1IDExLjAzODdDMTMuNDg5NiAxMS4wNjUxIDEzLjQ1NDEgMTEuMTAzOCAxMy40Mjk2IDExLjEyODdDMTMuMjAwOSAxMS4zNjI1IDEyLjk0MDYgMTEuNTA3NiAxMi40ODE4IDExLjYxNjRDMTEuOTc1MiAxMS43MzY1IDExLjMxNDMgMTEuNzk0MiAxMC4yODc4IDExLjg3OTdDOS40MTk0OCAxMS45NTIxIDguNDc1NjYgMTIgNy41IDEyQzYuNTI0MzQgMTIgNS41ODA1MiAxMS45NTIxIDQuNzEyMiAxMS44Nzk3QzMuNjg1NzIgMTEuNzk0MiAzLjAyNDc3IDExLjczNjUgMi41MTgxNiAxMS42MTY0QzIuMDU5MzYgMTEuNTA3NiAxLjc5OTEgMTEuMzYyNSAxLjU3MDM3IDExLjEyODdDMS41NDU5MyAxMS4xMDM4IDEuNTEwMzUgMTEuMDY1MSAxLjQ4NzQ4IDExLjAzODdDMS4yODYyOCAxMC44MDYxIDEuMTU2MTIgMTAuNTIwNiAxLjA4MTkzIDkuOTg1MzhDMS4wMDIyMSA5LjQxMDE5IDEgOC42NjAyNiAxIDcuNTI0OTNDMSA2LjM3NjQ0IDEuMDAyMTYgNS42MTU2IDEuMDgyIDUuMDMyODNDMS4xNTY1NCA0LjQ4ODcgMS4yODc0NCA0LjIwMTQ5IDEuNDg2NjYgMy45NzA5MkMxLjUwOTggMy45NDQxNCAxLjU0NDY4IDMuOTA2MTggMS41Njk0MiAzLjg4MDg2QzEuNzk1MiAzLjY0OTc2IDIuMDU3NTIgMy41MDMwNCAyLjUyNzk2IDMuMzkyMDNDMy4wNDQ3MyAzLjI3MDA4IDMuNzIwNCAzLjIxMDM3IDQuNzY0NDcgMy4xMjE5OVpNMCA3LjUyNDkzQzAgNS4yODI5NiAwIDQuMTYxOTggMC43Mjk5ODUgMy4zMTcxM0MwLjc2NjQ1NyAzLjI3NDkxIDAuODE1MTM5IDMuMjIxOTQgMC44NTQxMjMgMy4xODIwNEMxLjYzNDM5IDIuMzgzMzkgMi42NDk2MyAyLjI5NzQ0IDQuNjgwMTIgMi4xMjU1NUM1LjU2OTIzIDIuMDUwMjggNi41MjcyNCAyIDcuNSAyQzguNDcyNzYgMiA5LjQzMDc3IDIuMDUwMjggMTAuMzE5OSAyLjEyNTU1QzEyLjM1MDQgMi4yOTc0NCAxMy4zNjU2IDIuMzgzMzkgMTQuMTQ1OSAzLjE4MjA0QzE0LjE4NDkgMy4yMjE5NCAxNC4yMzM1IDMuMjc0OTEgMTQuMjcgMy4zMTcxM0MxNSA0LjE2MTk4IDE1IDUuMjgyOTYgMTUgNy41MjQ5M0MxNSA5Ljc0MDEyIDE1IDEwLjg0NzcgMTQuMjY4OCAxMS42OTI5QzE0LjIzMjYgMTEuNzM0OCAxNC4xODMyIDExLjc4ODUgMTQuMTQ0NCAxMS44MjgxQzEzLjM2MjkgMTIuNjI2OSAxMi4zNjU1IDEyLjcxIDEwLjM3MDkgMTIuODc2M0M5LjQ3OTcxIDEyLjk1MDUgOC41MDc4MiAxMyA3LjUgMTNDNi40OTIxOCAxMyA1LjUyMDI4IDEyLjk1MDUgNC42MjkxNSAxMi44NzYzQzIuNjM0NDYgMTIuNzEgMS42MzcxMiAxMi42MjY5IDAuODU1NTU4IDExLjgyODFDMC44MTY4NDQgMTEuNzg4NSAwLjc2NzQ0MiAxMS43MzQ4IDAuNzMxMjIxIDExLjY5MjlDMCAxMC44NDc3IDAgOS43NDAxMiAwIDcuNTI0OTNaTTUuMjUgNS4zODI2NEM1LjI1IDUuMjAyMjUgNS40MzUyMiA1LjA4MTI0IDUuNjAwNDEgNS4xNTM2OUwxMC40MjggNy4yNzEwNUMxMC42Mjc0IDcuMzU4NTMgMTAuNjI3NCA3LjY0MTQ3IDEwLjQyOCA3LjcyODk1TDUuNjAwNDEgOS44NDYzMUM1LjQzNTIyIDkuOTE4NzYgNS4yNSA5Ljc5Nzc1IDUuMjUgOS42MTczNlY1LjM4MjY0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sU289ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcgMkgxLjVDMS4yMjM4NiAyIDEgMi4yMjM4NiAxIDIuNVY3SDdWMlpNOCAyVjdIMTRWMi41QzE0IDIuMjIzODYgMTMuNzc2MSAyIDEzLjUgMkg4Wk03IDhIMVYxMi41QzEgMTIuNzc2MSAxLjIyMzg2IDEzIDEuNSAxM0g3VjhaTTggMTNWOEgxNFYxMi41QzE0IDEyLjc3NjEgMTMuNzc2MSAxMyAxMy41IDEzSDhaTTEuNSAxQzAuNjcxNTczIDEgMCAxLjY3MTU3IDAgMi41VjEyLjVDMCAxMy4zMjg0IDAuNjcxNTczIDE0IDEuNSAxNEgxMy41QzE0LjMyODQgMTQgMTUgMTMuMzI4NCAxNSAxMi41VjIuNUMxNSAxLjY3MTU3IDE0LjMyODQgMSAxMy41IDFIMS41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sam89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuNSAySDEzLjVDMTMuNzc2MSAyIDE0IDIuMjIzODYgMTQgMi41VjdIMVYyLjVDMSAyLjIyMzg2IDEuMjIzODYgMiAxLjUgMlpNMSA4VjEyLjVDMSAxMi43NzYxIDEuMjIzODYgMTMgMS41IDEzSDEzLjVDMTMuNzc2MSAxMyAxNCAxMi43NzYxIDE0IDEyLjVWOEgxWk0wIDIuNUMwIDEuNjcxNTcgMC42NzE1NzMgMSAxLjUgMUgxMy41QzE0LjMyODQgMSAxNSAxLjY3MTU3IDE1IDIuNVYxMi41QzE1IDEzLjMyODQgMTQuMzI4NCAxNCAxMy41IDE0SDEuNUMwLjY3MTU3MyAxNCAwIDEzLjMyODQgMCAxMi41VjIuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE1vPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xNCAyLjU4NzExTDEuODUxNjMgMTNIMTMuNUMxMy43NzYxIDEzIDE0IDEyLjc3NjEgMTQgMTIuNVYyLjU4NzExWk0wLjc2Mjg3OSAxMy44MDY3TDAuODI1Mzk2IDEzLjg3OTZMMC44NTQ3MTcgMTMuODU0NUMxLjA1MDE3IDEzLjk0NzggMS4yNjg5OSAxNCAxLjUgMTRIMTMuNUMxNC4zMjg0IDE0IDE1IDEzLjMyODQgMTUgMTIuNVYyLjVDMTUgMS45Mzk0OSAxNC42OTI2IDEuNDUwNzggMTQuMjM3MSAxLjE5MzMxTDE0LjE3NDYgMS4xMjAzN0wxNC4xNDUzIDEuMTQ1NUMxMy45NDk4IDEuMDUyMjIgMTMuNzMxIDEgMTMuNSAxSDEuNUMwLjY3MTU3MyAxIDAgMS42NzE1NyAwIDIuNVYxMi41QzAgMTMuMDYwNSAwLjMwNzQzNSAxMy41NDkyIDAuNzYyODc5IDEzLjgwNjdaTTEgMTIuNDEyOUwxMy4xNDg0IDJIMS41QzEuMjIzODYgMiAxIDIuMjIzODYgMSAyLjVWMTIuNDEyOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGtvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk04IDJIMTMuNUMxMy43NzYxIDIgMTQgMi4yMjM4NiAxNCAyLjVWMTIuNUMxNCAxMi43NzYxIDEzLjc3NjEgMTMgMTMuNSAxM0g4VjJaTTcgMkgxLjVDMS4yMjM4NiAyIDEgMi4yMjM4NiAxIDIuNVYxMi41QzEgMTIuNzc2MSAxLjIyMzg2IDEzIDEuNSAxM0g3VjJaTTAgMi41QzAgMS42NzE1NyAwLjY3MTU3MyAxIDEuNSAxSDEzLjVDMTQuMzI4NCAxIDE1IDEuNjcxNTcgMTUgMi41VjEyLjVDMTUgMTMuMzI4NCAxNC4zMjg0IDE0IDEzLjUgMTRIMS41QzAuNjcxNTczIDE0IDAgMTMuMzI4NCAwIDEyLjVWMi41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUm89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuODE4MTIgNC42ODE2MUM0Ljk5Mzg2IDQuODU3MzQgNC45OTM4NiA1LjE0MjI3IDQuODE4MTIgNS4zMThMMy4wODYzMiA3LjA0OThIMTEuOTEzNUwxMC4xODE3IDUuMzE4QzEwLjAwNiA1LjE0MjI3IDEwLjAwNiA0Ljg1NzM0IDEwLjE4MTcgNC42ODE2MUMxMC4zNTc1IDQuNTA1ODcgMTAuNjQyNCA0LjUwNTg3IDEwLjgxODEgNC42ODE2MUwxMy4zMTgxIDcuMTgxNjFDMTMuNDkzOSA3LjM1NzM0IDEzLjQ5MzkgNy42NDIyNyAxMy4zMTgxIDcuODE4TDEwLjgxODEgMTAuMzE4QzEwLjY0MjQgMTAuNDkzNyAxMC4zNTc1IDEwLjQ5MzcgMTAuMTgxNyAxMC4zMThDMTAuMDA2IDEwLjE0MjMgMTAuMDA2IDkuODU3MzQgMTAuMTgxNyA5LjY4MTYxTDExLjkxMzUgNy45NDk4SDMuMDg2MzJMNC44MTgxMiA5LjY4MTYxQzQuOTkzODYgOS44NTczNCA0Ljk5Mzg2IDEwLjE0MjMgNC44MTgxMiAxMC4zMThDNC42NDIzOSAxMC40OTM3IDQuMzU3NDYgMTAuNDkzNyA0LjE4MTczIDEwLjMxOEwxLjY4MTczIDcuODE4QzEuNTA1OTkgNy42NDIyNyAxLjUwNTk5IDcuMzU3MzQgMS42ODE3MyA3LjE4MTYxTDQuMTgxNzMgNC42ODE2MUM0LjM1NzQ2IDQuNTA1ODcgNC42NDIzOSA0LjUwNTg3IDQuODE4MTIgNC42ODE2MVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFBvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMCA2LjVDMTAgOC40MzMgOC40MzMgMTAgNi41IDEwQzQuNTY3IDEwIDMgOC40MzMgMyA2LjVDMyA0LjU2NyA0LjU2NyAzIDYuNSAzQzguNDMzIDMgMTAgNC41NjcgMTAgNi41Wk05LjMwODg0IDEwLjAxNTlDOC41MzkwMSAxMC42MzE4IDcuNTYyNTEgMTEgNi41IDExQzQuMDE0NzIgMTEgMiA4Ljk4NTI4IDIgNi41QzIgNC4wMTQ3MiA0LjAxNDcyIDIgNi41IDJDOC45ODUyOCAyIDExIDQuMDE0NzIgMTEgNi41QzExIDcuNTYyNTEgMTAuNjMxOCA4LjUzOTAxIDEwLjAxNTkgOS4zMDg4NEwxMi44NTM2IDEyLjE0NjRDMTMuMDQ4OCAxMi4zNDE3IDEzLjA0ODggMTIuNjU4MyAxMi44NTM2IDEyLjg1MzZDMTIuNjU4MyAxMy4wNDg4IDEyLjM0MTcgMTMuMDQ4OCAxMi4xNDY0IDEyLjg1MzZMOS4zMDg4NCAxMC4wMTU5Wk00LjI1IDYuNUM0LjI1IDYuMjIzODYgNC40NzM4NiA2IDQuNzUgNkg2VjQuNzVDNiA0LjQ3Mzg2IDYuMjIzODYgNC4yNSA2LjUgNC4yNUM2Ljc3NjE0IDQuMjUgNyA0LjQ3Mzg2IDcgNC43NVY2SDguMjVDOC41MjYxNCA2IDguNzUgNi4yMjM4NiA4Ljc1IDYuNUM4Ljc1IDYuNzc2MTQgOC41MjYxNCA3IDguMjUgN0g3VjguMjVDNyA4LjUyNjE0IDYuNzc2MTQgOC43NSA2LjUgOC43NUM2LjIyMzg2IDguNzUgNiA4LjUyNjE0IDYgOC4yNVY3SDQuNzVDNC40NzM4NiA3IDQuMjUgNi43NzYxNCA0LjI1IDYuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LElvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02LjUgMTBDOC40MzMgMTAgMTAgOC40MzMgMTAgNi41QzEwIDQuNTY3IDguNDMzIDMgNi41IDNDNC41NjcgMyAzIDQuNTY3IDMgNi41QzMgOC40MzMgNC41NjcgMTAgNi41IDEwWk02LjUgMTFDNy41NjI1MSAxMSA4LjUzOTAxIDEwLjYzMTggOS4zMDg4NCAxMC4wMTU5TDEyLjE0NjQgMTIuODUzNkMxMi4zNDE3IDEzLjA0ODggMTIuNjU4MyAxMy4wNDg4IDEyLjg1MzYgMTIuODUzNkMxMy4wNDg4IDEyLjY1ODMgMTMuMDQ4OCAxMi4zNDE3IDEyLjg1MzYgMTIuMTQ2NEwxMC4wMTU5IDkuMzA4ODRDMTAuNjMxOCA4LjUzOTAxIDExIDcuNTYyNTEgMTEgNi41QzExIDQuMDE0NzIgOC45ODUyOCAyIDYuNSAyQzQuMDE0NzIgMiAyIDQuMDE0NzIgMiA2LjVDMiA4Ljk4NTI4IDQuMDE0NzIgMTEgNi41IDExWk00Ljc1IDZDNC40NzM4NiA2IDQuMjUgNi4yMjM4NiA0LjI1IDYuNUM0LjI1IDYuNzc2MTQgNC40NzM4NiA3IDQuNzUgN0g4LjI1QzguNTI2MTQgNyA4Ljc1IDYuNzc2MTQgOC43NSA2LjVDOC43NSA2LjIyMzg2IDguNTI2MTQgNiA4LjI1IDZINC43NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9fSw1Mjk5OihlLHQsbik9PntuLnIodCksbi5kKHQse2RlZmF1bHQ6KCk9Pmx9KTt2YXIgcj1uKDgwODEpLG89bi5uKHIpLGk9bigzNjQ1KSxhPW4ubihpKSgpKG8oKSk7YS5wdXNoKFtlLmlkLFwiLnJlYWN0LWNhbGVuZGFyIHtcXG4gIHdpZHRoOiAzNTBweDtcXG4gIG1heC13aWR0aDogMTAwJTtcXG4gIGJhY2tncm91bmQ6IHdoaXRlO1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2EwYTA5NjtcXG4gIGZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xcbiAgbGluZS1oZWlnaHQ6IDEuMTI1ZW07XFxufVxcbi5yZWFjdC1jYWxlbmRhci0tZG91YmxlVmlldyB7XFxuICB3aWR0aDogNzAwcHg7XFxufVxcbi5yZWFjdC1jYWxlbmRhci0tZG91YmxlVmlldyAucmVhY3QtY2FsZW5kYXJfX3ZpZXdDb250YWluZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIG1hcmdpbjogLTAuNWVtO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXItLWRvdWJsZVZpZXcgLnJlYWN0LWNhbGVuZGFyX192aWV3Q29udGFpbmVyID4gKiB7XFxuICB3aWR0aDogNTAlO1xcbiAgbWFyZ2luOiAwLjVlbTtcXG59XFxuLnJlYWN0LWNhbGVuZGFyLFxcbi5yZWFjdC1jYWxlbmRhciAqLFxcbi5yZWFjdC1jYWxlbmRhciAqOmJlZm9yZSxcXG4ucmVhY3QtY2FsZW5kYXIgKjphZnRlciB7XFxuICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbn1cXG4ucmVhY3QtY2FsZW5kYXIgYnV0dG9uIHtcXG4gIG1hcmdpbjogMDtcXG4gIGJvcmRlcjogMDtcXG4gIG91dGxpbmU6IG5vbmU7XFxufVxcbi5yZWFjdC1jYWxlbmRhciBidXR0b246ZW5hYmxlZDpob3ZlciB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fbmF2aWdhdGlvbiB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgaGVpZ2h0OiA0NHB4O1xcbiAgbWFyZ2luLWJvdHRvbTogMWVtO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX25hdmlnYXRpb24gYnV0dG9uIHtcXG4gIG1pbi13aWR0aDogNDRweDtcXG4gIGJhY2tncm91bmQ6IG5vbmU7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fbmF2aWdhdGlvbiBidXR0b246ZGlzYWJsZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX19uYXZpZ2F0aW9uIGJ1dHRvbjplbmFibGVkOmhvdmVyLFxcbi5yZWFjdC1jYWxlbmRhcl9fbmF2aWdhdGlvbiBidXR0b246ZW5hYmxlZDpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2O1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdfX3dlZWtkYXlzIHtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XFxuICBmb250LXdlaWdodDogYm9sZDtcXG4gIGZvbnQtc2l6ZTogMC43NWVtO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdfX3dlZWtkYXlzX193ZWVrZGF5IHtcXG4gIHBhZGRpbmc6IDAuNWVtO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdfX3dlZWtOdW1iZXJzIC5yZWFjdC1jYWxlbmRhcl9fdGlsZSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgZm9udC1zaXplOiAwLjc1ZW07XFxuICBmb250LXdlaWdodDogYm9sZDtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX19tb250aC12aWV3X19kYXlzX19kYXktLXdlZWtlbmQge1xcbiAgY29sb3I6ICNkMTAwMDA7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fbW9udGgtdmlld19fZGF5c19fZGF5LS1uZWlnaGJvcmluZ01vbnRoIHtcXG4gIGNvbG9yOiAjNzU3NTc1O1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX3llYXItdmlldyAucmVhY3QtY2FsZW5kYXJfX3RpbGUsXFxuLnJlYWN0LWNhbGVuZGFyX19kZWNhZGUtdmlldyAucmVhY3QtY2FsZW5kYXJfX3RpbGUsXFxuLnJlYWN0LWNhbGVuZGFyX19jZW50dXJ5LXZpZXcgLnJlYWN0LWNhbGVuZGFyX190aWxlIHtcXG4gIHBhZGRpbmc6IDJlbSAwLjVlbTtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX190aWxlIHtcXG4gIG1heC13aWR0aDogMTAwJTtcXG4gIHBhZGRpbmc6IDEwcHggNi42NjY3cHg7XFxuICBiYWNrZ3JvdW5kOiBub25lO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgbGluZS1oZWlnaHQ6IDE2cHg7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fdGlsZTpkaXNhYmxlZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYwO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX3RpbGU6ZW5hYmxlZDpob3ZlcixcXG4ucmVhY3QtY2FsZW5kYXJfX3RpbGU6ZW5hYmxlZDpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2O1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX3RpbGUtLW5vdyB7XFxuICBiYWNrZ3JvdW5kOiAjZmZmZjc2O1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX3RpbGUtLW5vdzplbmFibGVkOmhvdmVyLFxcbi5yZWFjdC1jYWxlbmRhcl9fdGlsZS0tbm93OmVuYWJsZWQ6Zm9jdXMge1xcbiAgYmFja2dyb3VuZDogI2ZmZmZhOTtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX190aWxlLS1oYXNBY3RpdmUge1xcbiAgYmFja2dyb3VuZDogIzc2YmFmZjtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX190aWxlLS1oYXNBY3RpdmU6ZW5hYmxlZDpob3ZlcixcXG4ucmVhY3QtY2FsZW5kYXJfX3RpbGUtLWhhc0FjdGl2ZTplbmFibGVkOmZvY3VzIHtcXG4gIGJhY2tncm91bmQ6ICNhOWQ0ZmY7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fdGlsZS0tYWN0aXZlIHtcXG4gIGJhY2tncm91bmQ6ICMwMDZlZGM7XFxuICBjb2xvcjogd2hpdGU7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fdGlsZS0tYWN0aXZlOmVuYWJsZWQ6aG92ZXIsXFxuLnJlYWN0LWNhbGVuZGFyX190aWxlLS1hY3RpdmU6ZW5hYmxlZDpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kOiAjMTA4N2ZmO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXItLXNlbGVjdFJhbmdlIC5yZWFjdC1jYWxlbmRhcl9fdGlsZS0taG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZTZlNjtcXG59XFxuXCIsXCJcIl0pO2NvbnN0IGw9YX0sMzY0NTplPT57ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKChmdW5jdGlvbih0KXt2YXIgbj1cIlwiLHI9dm9pZCAwIT09dFs1XTtyZXR1cm4gdFs0XSYmKG4rPVwiQHN1cHBvcnRzIChcIi5jb25jYXQodFs0XSxcIikge1wiKSksdFsyXSYmKG4rPVwiQG1lZGlhIFwiLmNvbmNhdCh0WzJdLFwiIHtcIikpLHImJihuKz1cIkBsYXllclwiLmNvbmNhdCh0WzVdLmxlbmd0aD4wP1wiIFwiLmNvbmNhdCh0WzVdKTpcIlwiLFwiIHtcIikpLG4rPWUodCksciYmKG4rPVwifVwiKSx0WzJdJiYobis9XCJ9XCIpLHRbNF0mJihuKz1cIn1cIiksbn0pKS5qb2luKFwiXCIpfSx0Lmk9ZnVuY3Rpb24oZSxuLHIsbyxpKXtcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9W1tudWxsLGUsdm9pZCAwXV0pO3ZhciBhPXt9O2lmKHIpZm9yKHZhciBsPTA7bDx0aGlzLmxlbmd0aDtsKyspe3ZhciBzPXRoaXNbbF1bMF07bnVsbCE9cyYmKGFbc109ITApfWZvcih2YXIgYz0wO2M8ZS5sZW5ndGg7YysrKXt2YXIgdT1bXS5jb25jYXQoZVtjXSk7ciYmYVt1WzBdXXx8KHZvaWQgMCE9PWkmJih2b2lkIDA9PT11WzVdfHwodVsxXT1cIkBsYXllclwiLmNvbmNhdCh1WzVdLmxlbmd0aD4wP1wiIFwiLmNvbmNhdCh1WzVdKTpcIlwiLFwiIHtcIikuY29uY2F0KHVbMV0sXCJ9XCIpKSx1WzVdPWkpLG4mJih1WzJdPyh1WzFdPVwiQG1lZGlhIFwiLmNvbmNhdCh1WzJdLFwiIHtcIikuY29uY2F0KHVbMV0sXCJ9XCIpLHVbMl09bik6dVsyXT1uKSxvJiYodVs0XT8odVsxXT1cIkBzdXBwb3J0cyAoXCIuY29uY2F0KHVbNF0sXCIpIHtcIikuY29uY2F0KHVbMV0sXCJ9XCIpLHVbNF09byk6dVs0XT1cIlwiLmNvbmNhdChvKSksdC5wdXNoKHUpKX19LHR9fSw4MDgxOmU9PntlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV19fSw0NDgzOihlLHQsbik9PntmdW5jdGlvbiByKGUpe3JldHVybiByPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlP1wic3ltYm9sXCI6dHlwZW9mIGV9LHIoZSl9ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBvPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sbyhlLHQpfWZ1bmN0aW9uIGkoZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIGV9ZnVuY3Rpb24gYShlKXtyZXR1cm4gYT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sYShlKX1mdW5jdGlvbiBsKGUpe3ZhciB0PWZ1bmN0aW9uKGUsdCl7aWYoXCJvYmplY3RcIiE9PXIoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciBuPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1uKXt2YXIgbz1uLmNhbGwoZSxcInN0cmluZ1wiKTtpZihcIm9iamVjdFwiIT09cihvKSlyZXR1cm4gbzt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIil9cmV0dXJuIFN0cmluZyhlKX0oZSk7cmV0dXJuXCJzeW1ib2xcIj09PXIodCk/dDpTdHJpbmcodCl9dmFyIHM9big2Njg5KSxjPW4oNTY5NyksdT1uKDUzMDMpLmNyZWF0ZUZvY3VzVHJhcCxmPW4oODM4OCkuaXNGb2N1c2FibGUsZD1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwicHJvdG90eXBlXCIse3dyaXRhYmxlOiExfSksdCYmbyhlLHQpfShwLGUpO3ZhciB0LG4sYyx1LGQ9KGM9cCx1PWZ1bmN0aW9uKCl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCksZnVuY3Rpb24oKXt2YXIgZSx0PWEoYyk7aWYodSl7dmFyIG49YSh0aGlzKS5jb25zdHJ1Y3RvcjtlPVJlZmxlY3QuY29uc3RydWN0KHQsYXJndW1lbnRzLG4pfWVsc2UgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoXCJvYmplY3RcIj09PXIodCl8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO3JldHVybiBpKGUpfSh0aGlzLGUpfSk7ZnVuY3Rpb24gcChlKXt2YXIgdCxuLHIsbzshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfSh0aGlzLHApLG49aSh0PWQuY2FsbCh0aGlzLGUpKSxvPWZ1bmN0aW9uKGUpe3ZhciB0LG49bnVsbCE9PSh0PXRoaXMuaW50ZXJuYWxPcHRpb25zW2VdKSYmdm9pZCAwIT09dD90OnRoaXMub3JpZ2luYWxPcHRpb25zW2VdO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4pe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoLG89bmV3IEFycmF5KHI+MT9yLTE6MCksaT0xO2k8cjtpKyspb1tpLTFdPWFyZ3VtZW50c1tpXTtuPW4uYXBwbHkodm9pZCAwLG8pfWlmKCEwPT09biYmKG49dm9pZCAwKSwhbil7aWYodm9pZCAwPT09bnx8ITE9PT1uKXJldHVybiBuO3Rocm93IG5ldyBFcnJvcihcImBcIi5jb25jYXQoZSxcImAgd2FzIHNwZWNpZmllZCBidXQgd2FzIG5vdCBhIG5vZGUsIG9yIGRpZCBub3QgcmV0dXJuIGEgbm9kZVwiKSl9dmFyIGEsbD1uO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuJiYhKGw9bnVsbD09PShhPXRoaXMuZ2V0RG9jdW1lbnQoKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEucXVlcnlTZWxlY3RvcihuKSkpdGhyb3cgbmV3IEVycm9yKFwiYFwiLmNvbmNhdChlLFwiYCBhcyBzZWxlY3RvciByZWZlcnMgdG8gbm8ga25vd24gbm9kZVwiKSk7cmV0dXJuIGx9LChyPWwocj1cImdldE5vZGVGb3JPcHRpb25cIikpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobixyLHt2YWx1ZTpvLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6bltyXT1vLHQuaGFuZGxlRGVhY3RpdmF0ZT10LmhhbmRsZURlYWN0aXZhdGUuYmluZChpKHQpKSx0LmhhbmRsZVBvc3REZWFjdGl2YXRlPXQuaGFuZGxlUG9zdERlYWN0aXZhdGUuYmluZChpKHQpKSx0LmhhbmRsZUNsaWNrT3V0c2lkZURlYWN0aXZhdGVzPXQuaGFuZGxlQ2xpY2tPdXRzaWRlRGVhY3RpdmF0ZXMuYmluZChpKHQpKSx0LmludGVybmFsT3B0aW9ucz17cmV0dXJuRm9jdXNPbkRlYWN0aXZhdGU6ITEsY2hlY2tDYW5SZXR1cm5Gb2N1czpudWxsLG9uRGVhY3RpdmF0ZTp0LmhhbmRsZURlYWN0aXZhdGUsb25Qb3N0RGVhY3RpdmF0ZTp0LmhhbmRsZVBvc3REZWFjdGl2YXRlLGNsaWNrT3V0c2lkZURlYWN0aXZhdGVzOnQuaGFuZGxlQ2xpY2tPdXRzaWRlRGVhY3RpdmF0ZXN9LHQub3JpZ2luYWxPcHRpb25zPXtyZXR1cm5Gb2N1c09uRGVhY3RpdmF0ZTohMCxvbkRlYWN0aXZhdGU6bnVsbCxvblBvc3REZWFjdGl2YXRlOm51bGwsY2hlY2tDYW5SZXR1cm5Gb2N1czpudWxsLGNsaWNrT3V0c2lkZURlYWN0aXZhdGVzOiExfTt2YXIgYT1lLmZvY3VzVHJhcE9wdGlvbnM7Zm9yKHZhciBzIGluIGEpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEscykmJihcInJldHVybkZvY3VzT25EZWFjdGl2YXRlXCIhPT1zJiZcIm9uRGVhY3RpdmF0ZVwiIT09cyYmXCJvblBvc3REZWFjdGl2YXRlXCIhPT1zJiZcImNoZWNrQ2FuUmV0dXJuRm9jdXNcIiE9PXMmJlwiY2xpY2tPdXRzaWRlRGVhY3RpdmF0ZXNcIiE9PXM/dC5pbnRlcm5hbE9wdGlvbnNbc109YVtzXTp0Lm9yaWdpbmFsT3B0aW9uc1tzXT1hW3NdKTtyZXR1cm4gdC5vdXRzaWRlQ2xpY2s9bnVsbCx0LmZvY3VzVHJhcEVsZW1lbnRzPWUuY29udGFpbmVyRWxlbWVudHN8fFtdLHQudXBkYXRlUHJldmlvdXNFbGVtZW50KCksdH1yZXR1cm4gdD1wLChuPVt7a2V5OlwiZ2V0RG9jdW1lbnRcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3BzLmZvY3VzVHJhcE9wdGlvbnMuZG9jdW1lbnR8fChcInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQ/ZG9jdW1lbnQ6dm9pZCAwKX19LHtrZXk6XCJnZXRSZXR1cm5Gb2N1c05vZGVcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0Tm9kZUZvck9wdGlvbihcInNldFJldHVybkZvY3VzXCIsdGhpcy5wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQpO3JldHVybiBlfHwhMSE9PWUmJnRoaXMucHJldmlvdXNseUZvY3VzZWRFbGVtZW50fX0se2tleTpcInVwZGF0ZVByZXZpb3VzRWxlbWVudFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXREb2N1bWVudCgpO2UmJih0aGlzLnByZXZpb3VzbHlGb2N1c2VkRWxlbWVudD1lLmFjdGl2ZUVsZW1lbnQpfX0se2tleTpcImRlYWN0aXZhdGVUcmFwXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmZvY3VzVHJhcCYmdGhpcy5mb2N1c1RyYXAuYWN0aXZlJiZ0aGlzLmZvY3VzVHJhcC5kZWFjdGl2YXRlKHtyZXR1cm5Gb2N1czohMSxjaGVja0NhblJldHVybkZvY3VzOm51bGwsb25EZWFjdGl2YXRlOnRoaXMub3JpZ2luYWxPcHRpb25zLm9uRGVhY3RpdmF0ZX0pfX0se2tleTpcImhhbmRsZUNsaWNrT3V0c2lkZURlYWN0aXZhdGVzXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5vcmlnaW5hbE9wdGlvbnMuY2xpY2tPdXRzaWRlRGVhY3RpdmF0ZXM/dGhpcy5vcmlnaW5hbE9wdGlvbnMuY2xpY2tPdXRzaWRlRGVhY3RpdmF0ZXMuY2FsbChudWxsLGUpOnRoaXMub3JpZ2luYWxPcHRpb25zLmNsaWNrT3V0c2lkZURlYWN0aXZhdGVzO3JldHVybiB0JiYodGhpcy5vdXRzaWRlQ2xpY2s9e3RhcmdldDplLnRhcmdldCxhbGxvd0RlYWN0aXZhdGlvbjp0fSksdH19LHtrZXk6XCJoYW5kbGVEZWFjdGl2YXRlXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm9yaWdpbmFsT3B0aW9ucy5vbkRlYWN0aXZhdGUmJnRoaXMub3JpZ2luYWxPcHRpb25zLm9uRGVhY3RpdmF0ZS5jYWxsKG51bGwpLHRoaXMuZGVhY3RpdmF0ZVRyYXAoKX19LHtrZXk6XCJoYW5kbGVQb3N0RGVhY3RpdmF0ZVwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWZ1bmN0aW9uKCl7dmFyIHQ9ZS5nZXRSZXR1cm5Gb2N1c05vZGUoKSxuPSEoIWUub3JpZ2luYWxPcHRpb25zLnJldHVybkZvY3VzT25EZWFjdGl2YXRlfHxudWxsPT10fHwhdC5mb2N1c3x8ZS5vdXRzaWRlQ2xpY2smJighZS5vdXRzaWRlQ2xpY2suYWxsb3dEZWFjdGl2YXRpb258fGYoZS5vdXRzaWRlQ2xpY2sudGFyZ2V0LGUuaW50ZXJuYWxPcHRpb25zLnRhYmJhYmxlT3B0aW9ucykpKSxyPWUuaW50ZXJuYWxPcHRpb25zLnByZXZlbnRTY3JvbGwsbz12b2lkIDAhPT1yJiZyO24mJnQuZm9jdXMoe3ByZXZlbnRTY3JvbGw6b30pLGUub3JpZ2luYWxPcHRpb25zLm9uUG9zdERlYWN0aXZhdGUmJmUub3JpZ2luYWxPcHRpb25zLm9uUG9zdERlYWN0aXZhdGUuY2FsbChudWxsKSxlLm91dHNpZGVDbGljaz1udWxsfTt0aGlzLm9yaWdpbmFsT3B0aW9ucy5jaGVja0NhblJldHVybkZvY3VzP3RoaXMub3JpZ2luYWxPcHRpb25zLmNoZWNrQ2FuUmV0dXJuRm9jdXMuY2FsbChudWxsLHRoaXMuZ2V0UmV0dXJuRm9jdXNOb2RlKCkpLnRoZW4odCx0KTp0KCl9fSx7a2V5Olwic2V0dXBGb2N1c1RyYXBcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZm9jdXNUcmFwP3RoaXMucHJvcHMuYWN0aXZlJiYhdGhpcy5mb2N1c1RyYXAuYWN0aXZlJiYodGhpcy5mb2N1c1RyYXAuYWN0aXZhdGUoKSx0aGlzLnByb3BzLnBhdXNlZCYmdGhpcy5mb2N1c1RyYXAucGF1c2UoKSk6dGhpcy5mb2N1c1RyYXBFbGVtZW50cy5zb21lKEJvb2xlYW4pJiYodGhpcy5mb2N1c1RyYXA9dGhpcy5wcm9wcy5fY3JlYXRlRm9jdXNUcmFwKHRoaXMuZm9jdXNUcmFwRWxlbWVudHMsdGhpcy5pbnRlcm5hbE9wdGlvbnMpLHRoaXMucHJvcHMuYWN0aXZlJiZ0aGlzLmZvY3VzVHJhcC5hY3RpdmF0ZSgpLHRoaXMucHJvcHMucGF1c2VkJiZ0aGlzLmZvY3VzVHJhcC5wYXVzZSgpKX19LHtrZXk6XCJjb21wb25lbnREaWRNb3VudFwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5wcm9wcy5hY3RpdmUmJnRoaXMuc2V0dXBGb2N1c1RyYXAoKX19LHtrZXk6XCJjb21wb25lbnREaWRVcGRhdGVcIix2YWx1ZTpmdW5jdGlvbihlKXtpZih0aGlzLmZvY3VzVHJhcCl7ZS5jb250YWluZXJFbGVtZW50cyE9PXRoaXMucHJvcHMuY29udGFpbmVyRWxlbWVudHMmJnRoaXMuZm9jdXNUcmFwLnVwZGF0ZUNvbnRhaW5lckVsZW1lbnRzKHRoaXMucHJvcHMuY29udGFpbmVyRWxlbWVudHMpO3ZhciB0PSFlLmFjdGl2ZSYmdGhpcy5wcm9wcy5hY3RpdmUsbj1lLmFjdGl2ZSYmIXRoaXMucHJvcHMuYWN0aXZlLHI9IWUucGF1c2VkJiZ0aGlzLnByb3BzLnBhdXNlZCxvPWUucGF1c2VkJiYhdGhpcy5wcm9wcy5wYXVzZWQ7aWYodCYmKHRoaXMudXBkYXRlUHJldmlvdXNFbGVtZW50KCksdGhpcy5mb2N1c1RyYXAuYWN0aXZhdGUoKSksbilyZXR1cm4gdm9pZCB0aGlzLmRlYWN0aXZhdGVUcmFwKCk7ciYmdGhpcy5mb2N1c1RyYXAucGF1c2UoKSxvJiZ0aGlzLmZvY3VzVHJhcC51bnBhdXNlKCl9ZWxzZSBlLmNvbnRhaW5lckVsZW1lbnRzIT09dGhpcy5wcm9wcy5jb250YWluZXJFbGVtZW50cyYmKHRoaXMuZm9jdXNUcmFwRWxlbWVudHM9dGhpcy5wcm9wcy5jb250YWluZXJFbGVtZW50cyksdGhpcy5wcm9wcy5hY3RpdmUmJih0aGlzLnVwZGF0ZVByZXZpb3VzRWxlbWVudCgpLHRoaXMuc2V0dXBGb2N1c1RyYXAoKSl9fSx7a2V5OlwiY29tcG9uZW50V2lsbFVubW91bnRcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGVhY3RpdmF0ZVRyYXAoKX19LHtrZXk6XCJyZW5kZXJcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnByb3BzLmNoaWxkcmVuP3MuQ2hpbGRyZW4ub25seSh0aGlzLnByb3BzLmNoaWxkcmVuKTp2b2lkIDA7aWYodCl7aWYodC50eXBlJiZ0LnR5cGU9PT1zLkZyYWdtZW50KXRocm93IG5ldyBFcnJvcihcIkEgZm9jdXMtdHJhcCBjYW5ub3QgdXNlIGEgRnJhZ21lbnQgYXMgaXRzIGNoaWxkIGNvbnRhaW5lci4gVHJ5IHJlcGxhY2luZyBpdCB3aXRoIGEgPGRpdj4gZWxlbWVudC5cIik7cmV0dXJuIHMuY2xvbmVFbGVtZW50KHQse3JlZjpmdW5jdGlvbihuKXt2YXIgcj1lLnByb3BzLmNvbnRhaW5lckVsZW1lbnRzO3QmJihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LnJlZj90LnJlZihuKTp0LnJlZiYmKHQucmVmLmN1cnJlbnQ9bikpLGUuZm9jdXNUcmFwRWxlbWVudHM9cnx8W25dfX0pfXJldHVybiBudWxsfX1dKSYmZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbChyLmtleSkscil9fSh0LnByb3RvdHlwZSxuKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcInByb3RvdHlwZVwiLHt3cml0YWJsZTohMX0pLHB9KHMuQ29tcG9uZW50KSxwPVwidW5kZWZpbmVkXCI9PXR5cGVvZiBFbGVtZW50P0Z1bmN0aW9uOkVsZW1lbnQ7ZC5wcm9wVHlwZXM9e2FjdGl2ZTpjLmJvb2wscGF1c2VkOmMuYm9vbCxmb2N1c1RyYXBPcHRpb25zOmMuc2hhcGUoe2RvY3VtZW50OmMub2JqZWN0LG9uQWN0aXZhdGU6Yy5mdW5jLG9uUG9zdEFjdGl2YXRlOmMuZnVuYyxjaGVja0NhbkZvY3VzVHJhcDpjLmZ1bmMsb25EZWFjdGl2YXRlOmMuZnVuYyxvblBvc3REZWFjdGl2YXRlOmMuZnVuYyxjaGVja0NhblJldHVybkZvY3VzOmMuZnVuYyxpbml0aWFsRm9jdXM6Yy5vbmVPZlR5cGUoW2MuaW5zdGFuY2VPZihwKSxjLnN0cmluZyxjLmJvb2wsYy5mdW5jXSksZmFsbGJhY2tGb2N1czpjLm9uZU9mVHlwZShbYy5pbnN0YW5jZU9mKHApLGMuc3RyaW5nLGMuZnVuY10pLGVzY2FwZURlYWN0aXZhdGVzOmMub25lT2ZUeXBlKFtjLmJvb2wsYy5mdW5jXSksY2xpY2tPdXRzaWRlRGVhY3RpdmF0ZXM6Yy5vbmVPZlR5cGUoW2MuYm9vbCxjLmZ1bmNdKSxyZXR1cm5Gb2N1c09uRGVhY3RpdmF0ZTpjLmJvb2wsc2V0UmV0dXJuRm9jdXM6Yy5vbmVPZlR5cGUoW2MuaW5zdGFuY2VPZihwKSxjLnN0cmluZyxjLmJvb2wsYy5mdW5jXSksYWxsb3dPdXRzaWRlQ2xpY2s6Yy5vbmVPZlR5cGUoW2MuYm9vbCxjLmZ1bmNdKSxwcmV2ZW50U2Nyb2xsOmMuYm9vbCx0YWJiYWJsZU9wdGlvbnM6Yy5zaGFwZSh7ZGlzcGxheUNoZWNrOmMub25lT2YoW1wiZnVsbFwiLFwibGVnYWN5LWZ1bGxcIixcIm5vbi16ZXJvLWFyZWFcIixcIm5vbmVcIl0pLGdldFNoYWRvd1Jvb3Q6Yy5vbmVPZlR5cGUoW2MuYm9vbCxjLmZ1bmNdKX0pLHRyYXBTdGFjazpjLmFycmF5LGlzS2V5Rm9yd2FyZDpjLmZ1bmMsaXNLZXlCYWNrd2FyZDpjLmZ1bmN9KSxjb250YWluZXJFbGVtZW50czpjLmFycmF5T2YoYy5pbnN0YW5jZU9mKHApKSxjaGlsZHJlbjpjLm9uZU9mVHlwZShbYy5lbGVtZW50LGMuaW5zdGFuY2VPZihwKV0pfSxkLmRlZmF1bHRQcm9wcz17YWN0aXZlOiEwLHBhdXNlZDohMSxmb2N1c1RyYXBPcHRpb25zOnt9LF9jcmVhdGVGb2N1c1RyYXA6dX0sZS5leHBvcnRzPWR9LDUzMDM6KGUsdCxuKT0+e24ucih0KSxuLmQodCx7Y3JlYXRlRm9jdXNUcmFwOigpPT5nfSk7dmFyIHI9big4Mzg4KTtmdW5jdGlvbiBvKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBpKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP28oT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXthKGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpvKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfWZ1bmN0aW9uIGEoZSx0LG4pe3JldHVybih0PWZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKGUsdCl7aWYoXCJvYmplY3RcIiE9dHlwZW9mIGV8fG51bGw9PT1lKXJldHVybiBlO3ZhciBuPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1uKXt2YXIgcj1uLmNhbGwoZSxcInN0cmluZ1wiKTtpZihcIm9iamVjdFwiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIil9cmV0dXJuIFN0cmluZyhlKX0oZSk7cmV0dXJuXCJzeW1ib2xcIj09dHlwZW9mIHQ/dDpTdHJpbmcodCl9KHQpKWluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfXZhciBsPWZ1bmN0aW9uKGUpe3JldHVyblwiVGFiXCI9PT1lLmtleXx8OT09PWUua2V5Q29kZX0scz1mdW5jdGlvbihlKXtyZXR1cm4gbChlKSYmIWUuc2hpZnRLZXl9LGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGwoZSkmJmUuc2hpZnRLZXl9LHU9ZnVuY3Rpb24oZSl7cmV0dXJuIHNldFRpbWVvdXQoZSwwKX0sZj1mdW5jdGlvbihlLHQpe3ZhciBuPS0xO3JldHVybiBlLmV2ZXJ5KChmdW5jdGlvbihlLHIpe3JldHVybiF0KGUpfHwobj1yLCExKX0pKSxufSxkPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KHQ+MT90LTE6MCkscj0xO3I8dDtyKyspbltyLTFdPWFyZ3VtZW50c1tyXTtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2UuYXBwbHkodm9pZCAwLG4pOmV9LHA9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudGFyZ2V0LnNoYWRvd1Jvb3QmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuY29tcG9zZWRQYXRoP2UuY29tcG9zZWRQYXRoKClbMF06ZS50YXJnZXR9LGg9W10sZz1mdW5jdGlvbihlLHQpe3ZhciBuLG89KG51bGw9PXQ/dm9pZCAwOnQuZG9jdW1lbnQpfHxkb2N1bWVudCxhPShudWxsPT10P3ZvaWQgMDp0LnRyYXBTdGFjayl8fGgsZz1pKHtyZXR1cm5Gb2N1c09uRGVhY3RpdmF0ZTohMCxlc2NhcGVEZWFjdGl2YXRlczohMCxkZWxheUluaXRpYWxGb2N1czohMCxpc0tleUZvcndhcmQ6cyxpc0tleUJhY2t3YXJkOmN9LHQpLHY9e2NvbnRhaW5lcnM6W10sY29udGFpbmVyR3JvdXBzOltdLHRhYmJhYmxlR3JvdXBzOltdLG5vZGVGb2N1c2VkQmVmb3JlQWN0aXZhdGlvbjpudWxsLG1vc3RSZWNlbnRseUZvY3VzZWROb2RlOm51bGwsYWN0aXZlOiExLHBhdXNlZDohMSxkZWxheUluaXRpYWxGb2N1c1RpbWVyOnZvaWQgMH0sbT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUmJnZvaWQgMCE9PWVbdF0/ZVt0XTpnW258fHRdfSxDPWZ1bmN0aW9uKGUpe3JldHVybiB2LmNvbnRhaW5lckdyb3Vwcy5maW5kSW5kZXgoKGZ1bmN0aW9uKHQpe3ZhciBuPXQuY29udGFpbmVyLHI9dC50YWJiYWJsZU5vZGVzO3JldHVybiBuLmNvbnRhaW5zKGUpfHxyLmZpbmQoKGZ1bmN0aW9uKHQpe3JldHVybiB0PT09ZX0pKX0pKX0seT1mdW5jdGlvbihlKXt2YXIgdD1nW2VdO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpe2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KG4+MT9uLTE6MCksaT0xO2k8bjtpKyspcltpLTFdPWFyZ3VtZW50c1tpXTt0PXQuYXBwbHkodm9pZCAwLHIpfWlmKCEwPT09dCYmKHQ9dm9pZCAwKSwhdCl7aWYodm9pZCAwPT09dHx8ITE9PT10KXJldHVybiB0O3Rocm93IG5ldyBFcnJvcihcImBcIi5jb25jYXQoZSxcImAgd2FzIHNwZWNpZmllZCBidXQgd2FzIG5vdCBhIG5vZGUsIG9yIGRpZCBub3QgcmV0dXJuIGEgbm9kZVwiKSl9dmFyIGE9dDtpZihcInN0cmluZ1wiPT10eXBlb2YgdCYmIShhPW8ucXVlcnlTZWxlY3Rvcih0KSkpdGhyb3cgbmV3IEVycm9yKFwiYFwiLmNvbmNhdChlLFwiYCBhcyBzZWxlY3RvciByZWZlcnMgdG8gbm8ga25vd24gbm9kZVwiKSk7cmV0dXJuIGF9LHc9ZnVuY3Rpb24oKXt2YXIgZT15KFwiaW5pdGlhbEZvY3VzXCIpO2lmKCExPT09ZSlyZXR1cm4hMTtpZih2b2lkIDA9PT1lKWlmKEMoby5hY3RpdmVFbGVtZW50KT49MCllPW8uYWN0aXZlRWxlbWVudDtlbHNle3ZhciB0PXYudGFiYmFibGVHcm91cHNbMF07ZT10JiZ0LmZpcnN0VGFiYmFibGVOb2RlfHx5KFwiZmFsbGJhY2tGb2N1c1wiKX1pZighZSl0aHJvdyBuZXcgRXJyb3IoXCJZb3VyIGZvY3VzLXRyYXAgbmVlZHMgdG8gaGF2ZSBhdCBsZWFzdCBvbmUgZm9jdXNhYmxlIGVsZW1lbnRcIik7cmV0dXJuIGV9LGI9ZnVuY3Rpb24oKXtpZih2LmNvbnRhaW5lckdyb3Vwcz12LmNvbnRhaW5lcnMubWFwKChmdW5jdGlvbihlKXt2YXIgdD0oMCxyLnRhYmJhYmxlKShlLGcudGFiYmFibGVPcHRpb25zKSxuPSgwLHIuZm9jdXNhYmxlKShlLGcudGFiYmFibGVPcHRpb25zKTtyZXR1cm57Y29udGFpbmVyOmUsdGFiYmFibGVOb2Rlczp0LGZvY3VzYWJsZU5vZGVzOm4sZmlyc3RUYWJiYWJsZU5vZGU6dC5sZW5ndGg+MD90WzBdOm51bGwsbGFzdFRhYmJhYmxlTm9kZTp0Lmxlbmd0aD4wP3RbdC5sZW5ndGgtMV06bnVsbCxuZXh0VGFiYmFibGVOb2RlOmZ1bmN0aW9uKGUpe3ZhciB0PSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sbz1uLmZpbmRJbmRleCgoZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1lfSkpO2lmKCEobzwwKSlyZXR1cm4gdD9uLnNsaWNlKG8rMSkuZmluZCgoZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5pc1RhYmJhYmxlKShlLGcudGFiYmFibGVPcHRpb25zKX0pKTpuLnNsaWNlKDAsbykucmV2ZXJzZSgpLmZpbmQoKGZ1bmN0aW9uKGUpe3JldHVybigwLHIuaXNUYWJiYWJsZSkoZSxnLnRhYmJhYmxlT3B0aW9ucyl9KSl9fX0pKSx2LnRhYmJhYmxlR3JvdXBzPXYuY29udGFpbmVyR3JvdXBzLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUudGFiYmFibGVOb2Rlcy5sZW5ndGg+MH0pKSx2LnRhYmJhYmxlR3JvdXBzLmxlbmd0aDw9MCYmIXkoXCJmYWxsYmFja0ZvY3VzXCIpKXRocm93IG5ldyBFcnJvcihcIllvdXIgZm9jdXMtdHJhcCBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGNvbnRhaW5lciB3aXRoIGF0IGxlYXN0IG9uZSB0YWJiYWJsZSBub2RlIGluIGl0IGF0IGFsbCB0aW1lc1wiKX0seD1mdW5jdGlvbiBlKHQpeyExIT09dCYmdCE9PW8uYWN0aXZlRWxlbWVudCYmKHQmJnQuZm9jdXM/KHQuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ISFnLnByZXZlbnRTY3JvbGx9KSx2Lm1vc3RSZWNlbnRseUZvY3VzZWROb2RlPXQsZnVuY3Rpb24oZSl7cmV0dXJuIGUudGFnTmFtZSYmXCJpbnB1dFwiPT09ZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuc2VsZWN0fSh0KSYmdC5zZWxlY3QoKSk6ZSh3KCkpKX0sXz1mdW5jdGlvbihlKXt2YXIgdD15KFwic2V0UmV0dXJuRm9jdXNcIixlKTtyZXR1cm4gdHx8ITEhPT10JiZlfSxPPWZ1bmN0aW9uKGUpe3ZhciB0PXAoZSk7Qyh0KT49MHx8KGQoZy5jbGlja091dHNpZGVEZWFjdGl2YXRlcyxlKT9uLmRlYWN0aXZhdGUoe3JldHVybkZvY3VzOmcucmV0dXJuRm9jdXNPbkRlYWN0aXZhdGV9KTpkKGcuYWxsb3dPdXRzaWRlQ2xpY2ssZSl8fGUucHJldmVudERlZmF1bHQoKSl9LEw9ZnVuY3Rpb24oZSl7dmFyIHQ9cChlKSxuPUModCk+PTA7bnx8dCBpbnN0YW5jZW9mIERvY3VtZW50P24mJih2Lm1vc3RSZWNlbnRseUZvY3VzZWROb2RlPXQpOihlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHgodi5tb3N0UmVjZW50bHlGb2N1c2VkTm9kZXx8dygpKSl9LEU9ZnVuY3Rpb24oZSl7aWYoKFwiRXNjYXBlXCI9PT0odD1lKS5rZXl8fFwiRXNjXCI9PT10LmtleXx8Mjc9PT10LmtleUNvZGUpJiYhMSE9PWQoZy5lc2NhcGVEZWFjdGl2YXRlcyxlKSlyZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpLHZvaWQgbi5kZWFjdGl2YXRlKCk7dmFyIHQ7KGcuaXNLZXlGb3J3YXJkKGUpfHxnLmlzS2V5QmFja3dhcmQoZSkpJiZmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLG49cChlKTtiKCk7dmFyIG89bnVsbDtpZih2LnRhYmJhYmxlR3JvdXBzLmxlbmd0aD4wKXt2YXIgaT1DKG4pLGE9aT49MD92LmNvbnRhaW5lckdyb3Vwc1tpXTp2b2lkIDA7aWYoaTwwKW89dD92LnRhYmJhYmxlR3JvdXBzW3YudGFiYmFibGVHcm91cHMubGVuZ3RoLTFdLmxhc3RUYWJiYWJsZU5vZGU6di50YWJiYWJsZUdyb3Vwc1swXS5maXJzdFRhYmJhYmxlTm9kZTtlbHNlIGlmKHQpe3ZhciBzPWYodi50YWJiYWJsZUdyb3VwcywoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5maXJzdFRhYmJhYmxlTm9kZTtyZXR1cm4gbj09PXR9KSk7aWYoczwwJiYoYS5jb250YWluZXI9PT1ufHwoMCxyLmlzRm9jdXNhYmxlKShuLGcudGFiYmFibGVPcHRpb25zKSYmISgwLHIuaXNUYWJiYWJsZSkobixnLnRhYmJhYmxlT3B0aW9ucykmJiFhLm5leHRUYWJiYWJsZU5vZGUobiwhMSkpJiYocz1pKSxzPj0wKXt2YXIgYz0wPT09cz92LnRhYmJhYmxlR3JvdXBzLmxlbmd0aC0xOnMtMTtvPXYudGFiYmFibGVHcm91cHNbY10ubGFzdFRhYmJhYmxlTm9kZX1lbHNlIGwoZSl8fChvPWEubmV4dFRhYmJhYmxlTm9kZShuLCExKSl9ZWxzZXt2YXIgdT1mKHYudGFiYmFibGVHcm91cHMsKGZ1bmN0aW9uKGUpe3ZhciB0PWUubGFzdFRhYmJhYmxlTm9kZTtyZXR1cm4gbj09PXR9KSk7aWYodTwwJiYoYS5jb250YWluZXI9PT1ufHwoMCxyLmlzRm9jdXNhYmxlKShuLGcudGFiYmFibGVPcHRpb25zKSYmISgwLHIuaXNUYWJiYWJsZSkobixnLnRhYmJhYmxlT3B0aW9ucykmJiFhLm5leHRUYWJiYWJsZU5vZGUobikpJiYodT1pKSx1Pj0wKXt2YXIgZD11PT09di50YWJiYWJsZUdyb3Vwcy5sZW5ndGgtMT8wOnUrMTtvPXYudGFiYmFibGVHcm91cHNbZF0uZmlyc3RUYWJiYWJsZU5vZGV9ZWxzZSBsKGUpfHwobz1hLm5leHRUYWJiYWJsZU5vZGUobikpfX1lbHNlIG89eShcImZhbGxiYWNrRm9jdXNcIik7byYmKGwoZSkmJmUucHJldmVudERlZmF1bHQoKSx4KG8pKX0oZSxnLmlzS2V5QmFja3dhcmQoZSkpfSxTPWZ1bmN0aW9uKGUpe3ZhciB0PXAoZSk7Qyh0KT49MHx8ZChnLmNsaWNrT3V0c2lkZURlYWN0aXZhdGVzLGUpfHxkKGcuYWxsb3dPdXRzaWRlQ2xpY2ssZSl8fChlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSl9LGo9ZnVuY3Rpb24oKXtpZih2LmFjdGl2ZSlyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZihlLmxlbmd0aD4wKXt2YXIgbj1lW2UubGVuZ3RoLTFdO24hPT10JiZuLnBhdXNlKCl9dmFyIHI9ZS5pbmRleE9mKHQpOy0xPT09cnx8ZS5zcGxpY2UociwxKSxlLnB1c2godCl9KGEsbiksdi5kZWxheUluaXRpYWxGb2N1c1RpbWVyPWcuZGVsYXlJbml0aWFsRm9jdXM/dSgoZnVuY3Rpb24oKXt4KHcoKSl9KSk6eCh3KCkpLG8uYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzaW5cIixMLCEwKSxvLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIixPLHtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9KSxvLmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsTyx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSksby5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIixTLHtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9KSxvLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsRSx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSksbn0sTT1mdW5jdGlvbigpe2lmKHYuYWN0aXZlKXJldHVybiBvLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c2luXCIsTCwhMCksby5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsTywhMCksby5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLE8sITApLG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsUywhMCksby5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLEUsITApLG59O3JldHVybihuPXtnZXQgYWN0aXZlKCl7cmV0dXJuIHYuYWN0aXZlfSxnZXQgcGF1c2VkKCl7cmV0dXJuIHYucGF1c2VkfSxhY3RpdmF0ZTpmdW5jdGlvbihlKXtpZih2LmFjdGl2ZSlyZXR1cm4gdGhpczt2YXIgdD1tKGUsXCJvbkFjdGl2YXRlXCIpLG49bShlLFwib25Qb3N0QWN0aXZhdGVcIikscj1tKGUsXCJjaGVja0NhbkZvY3VzVHJhcFwiKTtyfHxiKCksdi5hY3RpdmU9ITAsdi5wYXVzZWQ9ITEsdi5ub2RlRm9jdXNlZEJlZm9yZUFjdGl2YXRpb249by5hY3RpdmVFbGVtZW50LHQmJnQoKTt2YXIgaT1mdW5jdGlvbigpe3ImJmIoKSxqKCksbiYmbigpfTtyZXR1cm4gcj8ocih2LmNvbnRhaW5lcnMuY29uY2F0KCkpLnRoZW4oaSxpKSx0aGlzKTooaSgpLHRoaXMpfSxkZWFjdGl2YXRlOmZ1bmN0aW9uKGUpe2lmKCF2LmFjdGl2ZSlyZXR1cm4gdGhpczt2YXIgdD1pKHtvbkRlYWN0aXZhdGU6Zy5vbkRlYWN0aXZhdGUsb25Qb3N0RGVhY3RpdmF0ZTpnLm9uUG9zdERlYWN0aXZhdGUsY2hlY2tDYW5SZXR1cm5Gb2N1czpnLmNoZWNrQ2FuUmV0dXJuRm9jdXN9LGUpO2NsZWFyVGltZW91dCh2LmRlbGF5SW5pdGlhbEZvY3VzVGltZXIpLHYuZGVsYXlJbml0aWFsRm9jdXNUaW1lcj12b2lkIDAsTSgpLHYuYWN0aXZlPSExLHYucGF1c2VkPSExLGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5pbmRleE9mKHQpOy0xIT09biYmZS5zcGxpY2UobiwxKSxlLmxlbmd0aD4wJiZlW2UubGVuZ3RoLTFdLnVucGF1c2UoKX0oYSxuKTt2YXIgcj1tKHQsXCJvbkRlYWN0aXZhdGVcIiksbz1tKHQsXCJvblBvc3REZWFjdGl2YXRlXCIpLGw9bSh0LFwiY2hlY2tDYW5SZXR1cm5Gb2N1c1wiKSxzPW0odCxcInJldHVybkZvY3VzXCIsXCJyZXR1cm5Gb2N1c09uRGVhY3RpdmF0ZVwiKTtyJiZyKCk7dmFyIGM9ZnVuY3Rpb24oKXt1KChmdW5jdGlvbigpe3MmJngoXyh2Lm5vZGVGb2N1c2VkQmVmb3JlQWN0aXZhdGlvbikpLG8mJm8oKX0pKX07cmV0dXJuIHMmJmw/KGwoXyh2Lm5vZGVGb2N1c2VkQmVmb3JlQWN0aXZhdGlvbikpLnRoZW4oYyxjKSx0aGlzKTooYygpLHRoaXMpfSxwYXVzZTpmdW5jdGlvbigpe3JldHVybiB2LnBhdXNlZHx8IXYuYWN0aXZlfHwodi5wYXVzZWQ9ITAsTSgpKSx0aGlzfSx1bnBhdXNlOmZ1bmN0aW9uKCl7cmV0dXJuIHYucGF1c2VkJiZ2LmFjdGl2ZT8odi5wYXVzZWQ9ITEsYigpLGooKSx0aGlzKTp0aGlzfSx1cGRhdGVDb250YWluZXJFbGVtZW50czpmdW5jdGlvbihlKXt2YXIgdD1bXS5jb25jYXQoZSkuZmlsdGVyKEJvb2xlYW4pO3JldHVybiB2LmNvbnRhaW5lcnM9dC5tYXAoKGZ1bmN0aW9uKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlP28ucXVlcnlTZWxlY3RvcihlKTplfSkpLHYuYWN0aXZlJiZiKCksdGhpc319KS51cGRhdGVDb250YWluZXJFbGVtZW50cyhlKSxufX0sOTE0MTooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIHI9big2NTUpLG89big2Njg5KSxpPW4oNDM5NCksYT1uKDM1NzMpLGw9big5Mjk0KSxzPW4oNDgzOSk7ZnVuY3Rpb24gYyhlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZGVmYXVsdFwiaW4gZT9lOntkZWZhdWx0OmV9fXZhciB1PWZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBlJiZPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihuKXtpZihcImRlZmF1bHRcIiE9PW4pe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxuKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHIuZ2V0P3I6e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGVbbl19fSl9fSkpLHQuZGVmYXVsdD1lLE9iamVjdC5mcmVlemUodCl9KG8pLGY9YyhvKSxkPWMocykscD1mdW5jdGlvbihlKXtyZXR1cm57aXNFbmFibGVkOmZ1bmN0aW9uKHQpe3JldHVybiBlLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiEhdFtlXX0pKX19fSxoPXttZWFzdXJlTGF5b3V0OnAoW1wibGF5b3V0XCIsXCJsYXlvdXRJZFwiLFwiZHJhZ1wiLFwiX2xheW91dFJlc2V0VHJhbnNmb3JtXCJdKSxhbmltYXRpb246cChbXCJhbmltYXRlXCIsXCJleGl0XCIsXCJ2YXJpYW50c1wiLFwid2hpbGVIb3ZlclwiLFwid2hpbGVUYXBcIixcIndoaWxlRm9jdXNcIixcIndoaWxlRHJhZ1wiXSksZXhpdDpwKFtcImV4aXRcIl0pLGRyYWc6cChbXCJkcmFnXCIsXCJkcmFnQ29udHJvbHNcIl0pLGZvY3VzOnAoW1wid2hpbGVGb2N1c1wiXSksaG92ZXI6cChbXCJ3aGlsZUhvdmVyXCIsXCJvbkhvdmVyU3RhcnRcIixcIm9uSG92ZXJFbmRcIl0pLHRhcDpwKFtcIndoaWxlVGFwXCIsXCJvblRhcFwiLFwib25UYXBTdGFydFwiLFwib25UYXBDYW5jZWxcIl0pLHBhbjpwKFtcIm9uUGFuXCIsXCJvblBhblN0YXJ0XCIsXCJvblBhblNlc3Npb25TdGFydFwiLFwib25QYW5FbmRcIl0pLGxheW91dEFuaW1hdGlvbjpwKFtcImxheW91dFwiLFwibGF5b3V0SWRcIl0pfTtmdW5jdGlvbiBnKGUpe2Zvcih2YXIgdCBpbiBlKXt2YXIgbj1lW3RdO251bGwhPT1uJiYoaFt0XS5Db21wb25lbnQ9bil9fXZhciB2PW8uY3JlYXRlQ29udGV4dCh7c3RyaWN0OiExfSksbT1PYmplY3Qua2V5cyhoKSxDPW0ubGVuZ3RoLHk9by5jcmVhdGVDb250ZXh0KHt0cmFuc2Zvcm1QYWdlUG9pbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGlzU3RhdGljOiExfSksdz1vLmNyZWF0ZUNvbnRleHQoe30pO2Z1bmN0aW9uIGIoKXtyZXR1cm4gby51c2VDb250ZXh0KHcpLnZpc3VhbEVsZW1lbnR9dmFyIHg9by5jcmVhdGVDb250ZXh0KG51bGwpO2Z1bmN0aW9uIF8oZSl7dmFyIHQ9by51c2VSZWYobnVsbCk7cmV0dXJuIG51bGw9PT10LmN1cnJlbnQmJih0LmN1cnJlbnQ9ZSgpKSx0LmN1cnJlbnR9ZnVuY3Rpb24gTygpe3ZhciBlPW8udXNlQ29udGV4dCh4KTtpZihudWxsPT09ZSlyZXR1cm5bITAsbnVsbF07dmFyIHQ9ZS5pc1ByZXNlbnQsbj1lLm9uRXhpdENvbXBsZXRlLHI9ZS5yZWdpc3RlcixpPWooKTtyZXR1cm4gby51c2VFZmZlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHIoaSl9KSxbXSksIXQmJm4/WyExLGZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PW4/dm9pZCAwOm4oaSl9XTpbITBdfWZ1bmN0aW9uIEwoZSl7cmV0dXJuIG51bGw9PT1lfHxlLmlzUHJlc2VudH12YXIgRT0wLFM9ZnVuY3Rpb24oKXtyZXR1cm4gRSsrfSxqPWZ1bmN0aW9uKCl7cmV0dXJuIF8oUyl9LE09by5jcmVhdGVDb250ZXh0KG51bGwpLGs9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyxSPWs/by51c2VMYXlvdXRFZmZlY3Q6by51c2VFZmZlY3Q7ZnVuY3Rpb24gUChlKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsXCJjdXJyZW50XCIpfWZ1bmN0aW9uIEkoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSl9ZnVuY3Rpb24gQShlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZXx8SShlKX1mdW5jdGlvbiBUKGUsdCxuLHIsbyl7dmFyIGk7cmV0dXJuIHZvaWQgMD09PXImJihyPXt9KSx2b2lkIDA9PT1vJiYobz17fSksXCJzdHJpbmdcIj09dHlwZW9mIHQmJih0PW51bGw9PT0oaT1lLnZhcmlhbnRzKXx8dm9pZCAwPT09aT92b2lkIDA6aVt0XSksXCJmdW5jdGlvblwiPT10eXBlb2YgdD90KG51bGwhPW4/bjplLmN1c3RvbSxyLG8pOnR9ZnVuY3Rpb24gSChlLHQsbil7dmFyIHI9ZS5nZXRQcm9wcygpO3JldHVybiBUKHIsdCxudWxsIT1uP246ci5jdXN0b20sZnVuY3Rpb24oZSl7dmFyIHQ9e307cmV0dXJuIGUuZm9yRWFjaFZhbHVlKChmdW5jdGlvbihlLG4pe3JldHVybiB0W25dPWUuZ2V0KCl9KSksdH0oZSksZnVuY3Rpb24oZSl7dmFyIHQ9e307cmV0dXJuIGUuZm9yRWFjaFZhbHVlKChmdW5jdGlvbihlLG4pe3JldHVybiB0W25dPWUuZ2V0VmVsb2NpdHkoKX0pKSx0fShlKSl9ZnVuY3Rpb24gQihlKXt2YXIgdDtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZihudWxsPT09KHQ9ZS5hbmltYXRlKXx8dm9pZCAwPT09dD92b2lkIDA6dC5zdGFydCl8fEEoZS5pbml0aWFsKXx8QShlLmFuaW1hdGUpfHxBKGUud2hpbGVIb3Zlcil8fEEoZS53aGlsZURyYWcpfHxBKGUud2hpbGVUYXApfHxBKGUud2hpbGVGb2N1cyl8fEEoZS5leGl0KX1mdW5jdGlvbiBWKGUpe3JldHVybiBCb29sZWFuKEIoZSl8fGUudmFyaWFudHMpfWZ1bmN0aW9uIEQoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZS5qb2luKFwiIFwiKTplfWZ1bmN0aW9uIFooZSl7dmFyIHQ9ZS5wcmVsb2FkZWRGZWF0dXJlcyxuPWUuY3JlYXRlVmlzdWFsRWxlbWVudCxpPWUudXNlUmVuZGVyLGE9ZS51c2VWaXN1YWxTdGF0ZSxsPWUuQ29tcG9uZW50O3JldHVybiB0JiZnKHQpLG8uZm9yd2FyZFJlZigoZnVuY3Rpb24oZSx0KXt2YXIgcz1vLnVzZUNvbnRleHQoeSkuaXNTdGF0aWMsYz1udWxsLGY9ZnVuY3Rpb24oZSx0KXt2YXIgbj1mdW5jdGlvbihlLHQpe2lmKEIoZSkpe3ZhciBuPWUuaW5pdGlhbCxyPWUuYW5pbWF0ZTtyZXR1cm57aW5pdGlhbDohMT09PW58fEEobik/bjp2b2lkIDAsYW5pbWF0ZTpBKHIpP3I6dm9pZCAwfX1yZXR1cm4hMSE9PWUuaW5oZXJpdD90Ont9fShlLG8udXNlQ29udGV4dCh3KSkscj1uLmluaXRpYWwsaT1uLmFuaW1hdGU7cmV0dXJuIG8udXNlTWVtbygoZnVuY3Rpb24oKXtyZXR1cm57aW5pdGlhbDpyLGFuaW1hdGU6aX19KSx0P1tEKHIpLEQoaSldOltdKX0oZSxzKSxkPWEoZSxzKTtyZXR1cm4hcyYmayYmKGYudmlzdWFsRWxlbWVudD1mdW5jdGlvbihlLHQsbixpKXt2YXIgYT1vLnVzZUNvbnRleHQoeSksbD1vLnVzZUNvbnRleHQodikscz1iKCksYz1vLnVzZUNvbnRleHQoeCksdT1mdW5jdGlvbihlKXt2YXIgdD1lLmxheW91dElkLG49by51c2VDb250ZXh0KE0pO3JldHVybiBuJiZ2b2lkIDAhPT10P24rXCItXCIrdDp0fShuKSxmPW8udXNlUmVmKHZvaWQgMCk7aXx8KGk9bC5yZW5kZXJlciksIWYuY3VycmVudCYmaSYmKGYuY3VycmVudD1pKGUse3Zpc3VhbFN0YXRlOnQscGFyZW50OnMscHJvcHM6ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LG4pLHtsYXlvdXRJZDp1fSkscHJlc2VuY2VJZDpudWxsPT1jP3ZvaWQgMDpjLmlkLGJsb2NrSW5pdGlhbEFuaW1hdGlvbjohMT09PShudWxsPT1jP3ZvaWQgMDpjLmluaXRpYWwpfSkpO3ZhciBkPWYuY3VycmVudDtyZXR1cm4gUigoZnVuY3Rpb24oKXtkJiYoZC5zZXRQcm9wcyhyLl9fYXNzaWduKHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxhKSxuKSx7bGF5b3V0SWQ6dX0pKSxkLmlzUHJlc2VudD1MKGMpLGQuaXNQcmVzZW5jZVJvb3Q9IXN8fHMucHJlc2VuY2VJZCE9PShudWxsPT1jP3ZvaWQgMDpjLmlkKSxkLnN5bmNSZW5kZXIoKSl9KSksby51c2VFZmZlY3QoKGZ1bmN0aW9uKCl7dmFyIGU7ZCYmKG51bGw9PT0oZT1kLmFuaW1hdGlvblN0YXRlKXx8dm9pZCAwPT09ZXx8ZS5hbmltYXRlQ2hhbmdlcygpKX0pKSxSKChmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBudWxsPT1kP3ZvaWQgMDpkLm5vdGlmeVVubW91bnQoKX19KSxbXSksZH0obCxkLGUsbiksYz1mdW5jdGlvbihlLHQsbil7dmFyIGk9W107aWYoby51c2VDb250ZXh0KHYpLCF0KXJldHVybiBudWxsO2Zvcih2YXIgYT0wO2E8QzthKyspe3ZhciBsPW1bYV0scz1oW2xdLGM9cy5pc0VuYWJsZWQsZj1zLkNvbXBvbmVudDtjKGUpJiZmJiZpLnB1c2godS5jcmVhdGVFbGVtZW50KGYsci5fX2Fzc2lnbih7a2V5Omx9LGUse3Zpc3VhbEVsZW1lbnQ6dH0pKSl9cmV0dXJuIGl9KGUsZi52aXN1YWxFbGVtZW50KSksdS5jcmVhdGVFbGVtZW50KHUuRnJhZ21lbnQsbnVsbCx1LmNyZWF0ZUVsZW1lbnQody5Qcm92aWRlcix7dmFsdWU6Zn0saShsLGUsZnVuY3Rpb24oZSx0LG4pe3JldHVybiBvLnVzZUNhbGxiYWNrKChmdW5jdGlvbihyKXt2YXIgbztyJiYobnVsbD09PShvPWUubW91bnQpfHx2b2lkIDA9PT1vfHxvLmNhbGwoZSxyKSksdCYmKHI/dC5tb3VudChyKTp0LnVubW91bnQoKSksbiYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4/bihyKTpQKG4pJiYobi5jdXJyZW50PXIpKX0pLFt0XSl9KGQsZi52aXN1YWxFbGVtZW50LHQpLGQscykpLGMpfSkpfWZ1bmN0aW9uICQoZSl7ZnVuY3Rpb24gdCh0LG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj17fSksWihlKHQsbikpfXZhciBuPW5ldyBNYXA7cmV0dXJuIG5ldyBQcm94eSh0LHtnZXQ6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gbi5oYXMocil8fG4uc2V0KHIsdChyKSksbi5nZXQocil9fSl9dmFyIE49W1wiYW5pbWF0ZVwiLFwiY2lyY2xlXCIsXCJkZWZzXCIsXCJkZXNjXCIsXCJlbGxpcHNlXCIsXCJnXCIsXCJpbWFnZVwiLFwibGluZVwiLFwiZmlsdGVyXCIsXCJtYXJrZXJcIixcIm1hc2tcIixcIm1ldGFkYXRhXCIsXCJwYXRoXCIsXCJwYXR0ZXJuXCIsXCJwb2x5Z29uXCIsXCJwb2x5bGluZVwiLFwicmVjdFwiLFwic3RvcFwiLFwic3ZnXCIsXCJzd2l0Y2hcIixcInN5bWJvbFwiLFwidGV4dFwiLFwidHNwYW5cIixcInVzZVwiLFwidmlld1wiXTtmdW5jdGlvbiBGKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlJiYhZS5pbmNsdWRlcyhcIi1cIikmJiEhKE4uaW5kZXhPZihlKT4tMXx8L1tBLVpdLy50ZXN0KGUpKX12YXIgVT17fTtmdW5jdGlvbiBXKGUpe2Zvcih2YXIgdCBpbiBlKVVbdF09ZVt0XX12YXIgej1bXCJcIixcIlhcIixcIllcIixcIlpcIl0sRz1bXCJ0cmFuc2Zvcm1QZXJzcGVjdGl2ZVwiLFwieFwiLFwieVwiLFwielwiXTtmdW5jdGlvbiBxKGUsdCl7cmV0dXJuIEcuaW5kZXhPZihlKS1HLmluZGV4T2YodCl9W1widHJhbnNsYXRlXCIsXCJzY2FsZVwiLFwicm90YXRlXCIsXCJza2V3XCJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiB6LmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiBHLnB1c2goZSt0KX0pKX0pKTt2YXIgWT1uZXcgU2V0KEcpO2Z1bmN0aW9uIEsoZSl7cmV0dXJuIFkuaGFzKGUpfXZhciBYPW5ldyBTZXQoW1wib3JpZ2luWFwiLFwib3JpZ2luWVwiLFwib3JpZ2luWlwiXSk7ZnVuY3Rpb24gSihlKXtyZXR1cm4gWC5oYXMoZSl9ZnVuY3Rpb24gUShlLHQpe3ZhciBuPXQubGF5b3V0LHI9dC5sYXlvdXRJZDtyZXR1cm4gSyhlKXx8SihlKXx8KG58fHZvaWQgMCE9PXIpJiYoISFVW2VdfHxcIm9wYWNpdHlcIj09PWUpfXZhciBlZT1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9PWUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZlLmdldFZlbG9jaXR5fSx0ZT17eDpcInRyYW5zbGF0ZVhcIix5OlwidHJhbnNsYXRlWVwiLHo6XCJ0cmFuc2xhdGVaXCIsdHJhbnNmb3JtUGVyc3BlY3RpdmU6XCJwZXJzcGVjdGl2ZVwifTtmdW5jdGlvbiBuZShlKXtyZXR1cm4gZS5zdGFydHNXaXRoKFwiLS1cIil9dmFyIHJlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQmJlwibnVtYmVyXCI9PXR5cGVvZiBlP3QudHJhbnNmb3JtKGUpOmV9LG9lPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxhLm51bWJlcikse3RyYW5zZm9ybTpNYXRoLnJvdW5kfSksaWU9e2JvcmRlcldpZHRoOmEucHgsYm9yZGVyVG9wV2lkdGg6YS5weCxib3JkZXJSaWdodFdpZHRoOmEucHgsYm9yZGVyQm90dG9tV2lkdGg6YS5weCxib3JkZXJMZWZ0V2lkdGg6YS5weCxib3JkZXJSYWRpdXM6YS5weCxyYWRpdXM6YS5weCxib3JkZXJUb3BMZWZ0UmFkaXVzOmEucHgsYm9yZGVyVG9wUmlnaHRSYWRpdXM6YS5weCxib3JkZXJCb3R0b21SaWdodFJhZGl1czphLnB4LGJvcmRlckJvdHRvbUxlZnRSYWRpdXM6YS5weCx3aWR0aDphLnB4LG1heFdpZHRoOmEucHgsaGVpZ2h0OmEucHgsbWF4SGVpZ2h0OmEucHgsc2l6ZTphLnB4LHRvcDphLnB4LHJpZ2h0OmEucHgsYm90dG9tOmEucHgsbGVmdDphLnB4LHBhZGRpbmc6YS5weCxwYWRkaW5nVG9wOmEucHgscGFkZGluZ1JpZ2h0OmEucHgscGFkZGluZ0JvdHRvbTphLnB4LHBhZGRpbmdMZWZ0OmEucHgsbWFyZ2luOmEucHgsbWFyZ2luVG9wOmEucHgsbWFyZ2luUmlnaHQ6YS5weCxtYXJnaW5Cb3R0b206YS5weCxtYXJnaW5MZWZ0OmEucHgscm90YXRlOmEuZGVncmVlcyxyb3RhdGVYOmEuZGVncmVlcyxyb3RhdGVZOmEuZGVncmVlcyxyb3RhdGVaOmEuZGVncmVlcyxzY2FsZTphLnNjYWxlLHNjYWxlWDphLnNjYWxlLHNjYWxlWTphLnNjYWxlLHNjYWxlWjphLnNjYWxlLHNrZXc6YS5kZWdyZWVzLHNrZXdYOmEuZGVncmVlcyxza2V3WTphLmRlZ3JlZXMsZGlzdGFuY2U6YS5weCx0cmFuc2xhdGVYOmEucHgsdHJhbnNsYXRlWTphLnB4LHRyYW5zbGF0ZVo6YS5weCx4OmEucHgseTphLnB4LHo6YS5weCxwZXJzcGVjdGl2ZTphLnB4LHRyYW5zZm9ybVBlcnNwZWN0aXZlOmEucHgsb3BhY2l0eTphLmFscGhhLG9yaWdpblg6YS5wcm9ncmVzc1BlcmNlbnRhZ2Usb3JpZ2luWTphLnByb2dyZXNzUGVyY2VudGFnZSxvcmlnaW5aOmEucHgsekluZGV4Om9lLGZpbGxPcGFjaXR5OmEuYWxwaGEsc3Ryb2tlT3BhY2l0eTphLmFscGhhLG51bU9jdGF2ZXM6b2V9O2Z1bmN0aW9uIGFlKGUsdCxuLHIsbyxpLGEsbCl7dmFyIHMsYz1lLnN0eWxlLHU9ZS52YXJzLGY9ZS50cmFuc2Zvcm0sZD1lLnRyYW5zZm9ybUtleXMscD1lLnRyYW5zZm9ybU9yaWdpbjtkLmxlbmd0aD0wO3ZhciBoPSExLGc9ITEsdj0hMDtmb3IodmFyIG0gaW4gdCl7dmFyIEM9dFttXTtpZihuZShtKSl1W21dPUM7ZWxzZXt2YXIgeT1pZVttXSx3PXJlKEMseSk7aWYoSyhtKSl7aWYoaD0hMCxmW21dPXcsZC5wdXNoKG0pLCF2KWNvbnRpbnVlO0MhPT0obnVsbCE9PShzPXkuZGVmYXVsdCkmJnZvaWQgMCE9PXM/czowKSYmKHY9ITEpfWVsc2UgaWYoSihtKSlwW21dPXcsZz0hMDtlbHNlIGlmKChudWxsPT1uP3ZvaWQgMDpuLmlzSHlkcmF0ZWQpJiYobnVsbD09cj92b2lkIDA6ci5pc0h5ZHJhdGVkKSYmVVttXSl7dmFyIGI9VVttXS5wcm9jZXNzKEMscixuKSx4PVVbbV0uYXBwbHlUbztpZih4KWZvcih2YXIgXz14Lmxlbmd0aCxPPTA7TzxfO08rKyljW3hbT11dPWI7ZWxzZSBjW21dPWJ9ZWxzZSBjW21dPXd9fXImJm4mJmEmJmw/KGMudHJhbnNmb3JtPWEoci5kZWx0YUZpbmFsLHIudHJlZVNjYWxlLGg/Zjp2b2lkIDApLGkmJihjLnRyYW5zZm9ybT1pKGYsYy50cmFuc2Zvcm0pKSxjLnRyYW5zZm9ybU9yaWdpbj1sKHIpKTooaCYmKGMudHJhbnNmb3JtPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPWUudHJhbnNmb3JtLGk9ZS50cmFuc2Zvcm1LZXlzLGE9dC5lbmFibGVIYXJkd2FyZUFjY2VsZXJhdGlvbixsPXZvaWQgMD09PWF8fGEscz10LmFsbG93VHJhbnNmb3JtTm9uZSxjPXZvaWQgMD09PXN8fHMsdT1cIlwiO2kuc29ydChxKTtmb3IodmFyIGY9ITEsZD1pLmxlbmd0aCxwPTA7cDxkO3ArKyl7dmFyIGg9aVtwXTt1Kz0odGVbaF18fGgpK1wiKFwiK29baF0rXCIpIFwiLFwielwiPT09aCYmKGY9ITApfXJldHVybiFmJiZsP3UrPVwidHJhbnNsYXRlWigwKVwiOnU9dS50cmltKCkscj91PXIobyxuP1wiXCI6dSk6YyYmbiYmKHU9XCJub25lXCIpLHV9KGUsbyx2LGkpKSxnJiYoYy50cmFuc2Zvcm1PcmlnaW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vcmlnaW5YLG49dm9pZCAwPT09dD9cIjUwJVwiOnQscj1lLm9yaWdpblksbz12b2lkIDA9PT1yP1wiNTAlXCI6cixpPWUub3JpZ2luWjtyZXR1cm4gbitcIiBcIitvK1wiIFwiKyh2b2lkIDA9PT1pPzA6aSl9KHApKSl9dmFyIGxlPWZ1bmN0aW9uKCl7cmV0dXJue3N0eWxlOnt9LHRyYW5zZm9ybTp7fSx0cmFuc2Zvcm1LZXlzOltdLHRyYW5zZm9ybU9yaWdpbjp7fSx2YXJzOnt9fX07ZnVuY3Rpb24gc2UoZSx0LG4pe2Zvcih2YXIgciBpbiB0KWVlKHRbcl0pfHxRKHIsbil8fChlW3JdPXRbcl0pfWZ1bmN0aW9uIGNlKGUsdCxuKXt2YXIgaT17fSxhPWZ1bmN0aW9uKGUsdCxuKXt2YXIgaT17fTtyZXR1cm4gc2UoaSxlLnN0eWxlfHx7fSxlKSxPYmplY3QuYXNzaWduKGksZnVuY3Rpb24oZSx0LG4pe3ZhciBpPWUudHJhbnNmb3JtVGVtcGxhdGU7cmV0dXJuIG8udXNlTWVtbygoZnVuY3Rpb24oKXt2YXIgZT1sZSgpO2FlKGUsdCx2b2lkIDAsdm9pZCAwLHtlbmFibGVIYXJkd2FyZUFjY2VsZXJhdGlvbjohbn0saSk7dmFyIG89ZS52YXJzLGE9ZS5zdHlsZTtyZXR1cm4gci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LG8pLGEpfSksW3RdKX0oZSx0LG4pKSxlLnRyYW5zZm9ybVZhbHVlcyYmKGk9ZS50cmFuc2Zvcm1WYWx1ZXMoaSkpLGl9KGUsdCxuKTtyZXR1cm4gQm9vbGVhbihlLmRyYWcpJiYoaS5kcmFnZ2FibGU9ITEsYS51c2VyU2VsZWN0PWEuV2Via2l0VXNlclNlbGVjdD1hLldlYmtpdFRvdWNoQ2FsbG91dD1cIm5vbmVcIixhLnRvdWNoQWN0aW9uPSEwPT09ZS5kcmFnP1wibm9uZVwiOlwicGFuLVwiKyhcInhcIj09PWUuZHJhZz9cInlcIjpcInhcIikpLGkuc3R5bGU9YSxpfXZhciB1ZT1uZXcgU2V0KFtcImluaXRpYWxcIixcImFuaW1hdGVcIixcImV4aXRcIixcInN0eWxlXCIsXCJ2YXJpYW50c1wiLFwidHJhbnNpdGlvblwiLFwidHJhbnNmb3JtVGVtcGxhdGVcIixcInRyYW5zZm9ybVZhbHVlc1wiLFwiY3VzdG9tXCIsXCJpbmhlcml0XCIsXCJsYXlvdXRcIixcImxheW91dElkXCIsXCJfbGF5b3V0UmVzZXRUcmFuc2Zvcm1cIixcIm9uTGF5b3V0QW5pbWF0aW9uQ29tcGxldGVcIixcIm9uVmlld3BvcnRCb3hVcGRhdGVcIixcIm9uTGF5b3V0TWVhc3VyZVwiLFwib25CZWZvcmVMYXlvdXRNZWFzdXJlXCIsXCJvbkFuaW1hdGlvblN0YXJ0XCIsXCJvbkFuaW1hdGlvbkNvbXBsZXRlXCIsXCJvblVwZGF0ZVwiLFwib25EcmFnU3RhcnRcIixcIm9uRHJhZ1wiLFwib25EcmFnRW5kXCIsXCJvbk1lYXN1cmVEcmFnQ29uc3RyYWludHNcIixcIm9uRGlyZWN0aW9uTG9ja1wiLFwib25EcmFnVHJhbnNpdGlvbkVuZFwiLFwiZHJhZ1wiLFwiZHJhZ0NvbnRyb2xzXCIsXCJkcmFnTGlzdGVuZXJcIixcImRyYWdDb25zdHJhaW50c1wiLFwiZHJhZ0RpcmVjdGlvbkxvY2tcIixcIl9kcmFnWFwiLFwiX2RyYWdZXCIsXCJkcmFnRWxhc3RpY1wiLFwiZHJhZ01vbWVudHVtXCIsXCJkcmFnUHJvcGFnYXRpb25cIixcImRyYWdUcmFuc2l0aW9uXCIsXCJ3aGlsZURyYWdcIixcIm9uUGFuXCIsXCJvblBhblN0YXJ0XCIsXCJvblBhbkVuZFwiLFwib25QYW5TZXNzaW9uU3RhcnRcIixcIm9uVGFwXCIsXCJvblRhcFN0YXJ0XCIsXCJvblRhcENhbmNlbFwiLFwib25Ib3ZlclN0YXJ0XCIsXCJvbkhvdmVyRW5kXCIsXCJ3aGlsZUZvY3VzXCIsXCJ3aGlsZVRhcFwiLFwid2hpbGVIb3ZlclwiXSk7ZnVuY3Rpb24gZmUoZSl7cmV0dXJuIHVlLmhhcyhlKX12YXIgZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIWZlKGUpfTt0cnl7dmFyIHBlPW4oODU5NCkuWjtkZT1mdW5jdGlvbihlKXtyZXR1cm4gZS5zdGFydHNXaXRoKFwib25cIik/IWZlKGUpOnBlKGUpfX1jYXRjaChlKXt9ZnVuY3Rpb24gaGUoZSx0LG4pe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlP2U6YS5weC50cmFuc2Zvcm0odCtuKmUpfXZhciBnZT1mdW5jdGlvbihlLHQpe3JldHVybiBhLnB4LnRyYW5zZm9ybShlKnQpfSx2ZT17b2Zmc2V0Olwic3Ryb2tlLWRhc2hvZmZzZXRcIixhcnJheTpcInN0cm9rZS1kYXNoYXJyYXlcIn0sbWU9e29mZnNldDpcInN0cm9rZURhc2hvZmZzZXRcIixhcnJheTpcInN0cm9rZURhc2hhcnJheVwifTtmdW5jdGlvbiBDZShlLHQsbixvLGksYSxsLHMpe3ZhciBjPXQuYXR0clgsdT10LmF0dHJZLGY9dC5vcmlnaW5YLGQ9dC5vcmlnaW5ZLHA9dC5wYXRoTGVuZ3RoLGg9dC5wYXRoU3BhY2luZyxnPXZvaWQgMD09PWg/MTpoLHY9dC5wYXRoT2Zmc2V0LG09dm9pZCAwPT09dj8wOnY7YWUoZSxyLl9fcmVzdCh0LFtcImF0dHJYXCIsXCJhdHRyWVwiLFwib3JpZ2luWFwiLFwib3JpZ2luWVwiLFwicGF0aExlbmd0aFwiLFwicGF0aFNwYWNpbmdcIixcInBhdGhPZmZzZXRcIl0pLG4sbyxpLGEsbCxzKSxlLmF0dHJzPWUuc3R5bGUsZS5zdHlsZT17fTt2YXIgQz1lLmF0dHJzLHk9ZS5zdHlsZSx3PWUuZGltZW5zaW9ucyxiPWUudG90YWxQYXRoTGVuZ3RoO0MudHJhbnNmb3JtJiYodyYmKHkudHJhbnNmb3JtPUMudHJhbnNmb3JtKSxkZWxldGUgQy50cmFuc2Zvcm0pLHcmJih2b2lkIDAhPT1mfHx2b2lkIDAhPT1kfHx5LnRyYW5zZm9ybSkmJih5LnRyYW5zZm9ybU9yaWdpbj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGhlKHQsZS54LGUud2lkdGgpK1wiIFwiK2hlKG4sZS55LGUuaGVpZ2h0KX0odyx2b2lkIDAhPT1mP2Y6LjUsdm9pZCAwIT09ZD9kOi41KSksdm9pZCAwIT09YyYmKEMueD1jKSx2b2lkIDAhPT11JiYoQy55PXUpLHZvaWQgMCE9PWImJnZvaWQgMCE9PXAmJmZ1bmN0aW9uKGUsdCxuLHIsbyxpKXt2b2lkIDA9PT1yJiYocj0xKSx2b2lkIDA9PT1vJiYobz0wKSx2b2lkIDA9PT1pJiYoaT0hMCk7dmFyIGE9aT92ZTptZTtlW2Eub2Zmc2V0XT1nZSgtbyx0KTt2YXIgbD1nZShuLHQpLHM9Z2Uocix0KTtlW2EuYXJyYXldPWwrXCIgXCIrc30oQyxiLHAsZyxtLCExKX12YXIgeWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGxlKCkpLHthdHRyczp7fX0pfTtmdW5jdGlvbiB3ZShlLHQpe3ZhciBuPW8udXNlTWVtbygoZnVuY3Rpb24oKXt2YXIgbj15ZSgpO3JldHVybiBDZShuLHQsdm9pZCAwLHZvaWQgMCx7ZW5hYmxlSGFyZHdhcmVBY2NlbGVyYXRpb246ITF9LGUudHJhbnNmb3JtVGVtcGxhdGUpLHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxuLmF0dHJzKSx7c3R5bGU6ci5fX2Fzc2lnbih7fSxuLnN0eWxlKX0pfSksW3RdKTtpZihlLnN0eWxlKXt2YXIgaT17fTtzZShpLGUuc3R5bGUsZSksbi5zdHlsZT1yLl9fYXNzaWduKHIuX19hc3NpZ24oe30saSksbi5zdHlsZSl9cmV0dXJuIG59ZnVuY3Rpb24gYmUoZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSExKSxmdW5jdGlvbih0LG4saSxhLGwpe3ZhciBzPWEubGF0ZXN0VmFsdWVzLGM9KEYodCk/d2U6Y2UpKG4scyxsKSx1PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj17fTtmb3IodmFyIG8gaW4gZSkoZGUobyl8fCEwPT09biYmZmUobyl8fCF0JiYhZmUobykpJiYocltvXT1lW29dKTtyZXR1cm4gcn0obixcInN0cmluZ1wiPT10eXBlb2YgdCxlKSxmPXIuX19hc3NpZ24oci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LHUpLGMpLHtyZWY6aX0pO3JldHVybiBvLmNyZWF0ZUVsZW1lbnQodCxmKX19dmFyIHhlPS8oW2Etel0pKFtBLVpdKS9nLF9lPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoeGUsXCIkMS0kMlwiKS50b0xvd2VyQ2FzZSgpfTtmdW5jdGlvbiBPZShlLHQpe3ZhciBuPXQuc3R5bGUscj10LnZhcnM7Zm9yKHZhciBvIGluIE9iamVjdC5hc3NpZ24oZS5zdHlsZSxuKSxyKWUuc3R5bGUuc2V0UHJvcGVydHkobyxyW29dKX12YXIgTGU9bmV3IFNldChbXCJiYXNlRnJlcXVlbmN5XCIsXCJkaWZmdXNlQ29uc3RhbnRcIixcImtlcm5lbE1hdHJpeFwiLFwia2VybmVsVW5pdExlbmd0aFwiLFwia2V5U3BsaW5lc1wiLFwia2V5VGltZXNcIixcImxpbWl0aW5nQ29uZUFuZ2xlXCIsXCJtYXJrZXJIZWlnaHRcIixcIm1hcmtlcldpZHRoXCIsXCJudW1PY3RhdmVzXCIsXCJ0YXJnZXRYXCIsXCJ0YXJnZXRZXCIsXCJzdXJmYWNlU2NhbGVcIixcInNwZWN1bGFyQ29uc3RhbnRcIixcInNwZWN1bGFyRXhwb25lbnRcIixcInN0ZERldmlhdGlvblwiLFwidGFibGVWYWx1ZXNcIixcInZpZXdCb3hcIixcImdyYWRpZW50VHJhbnNmb3JtXCJdKTtmdW5jdGlvbiBFZShlLHQpe2Zvcih2YXIgbiBpbiBPZShlLHQpLHQuYXR0cnMpZS5zZXRBdHRyaWJ1dGUoTGUuaGFzKG4pP246X2UobiksdC5hdHRyc1tuXSl9ZnVuY3Rpb24gU2UoZSl7dmFyIHQ9ZS5zdHlsZSxuPXt9O2Zvcih2YXIgciBpbiB0KShlZSh0W3JdKXx8UShyLGUpKSYmKG5bcl09dFtyXSk7cmV0dXJuIG59ZnVuY3Rpb24gamUoZSl7dmFyIHQ9U2UoZSk7Zm9yKHZhciBuIGluIGUpZWUoZVtuXSkmJih0W1wieFwiPT09bnx8XCJ5XCI9PT1uP1wiYXR0clwiK24udG9VcHBlckNhc2UoKTpuXT1lW25dKTtyZXR1cm4gdH1mdW5jdGlvbiBNZShlKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5zdGFydH12YXIga2U9ZnVuY3Rpb24oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSl9LFJlPWZ1bmN0aW9uKGUpe3JldHVybiBCb29sZWFuKGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZlLm1peCYmZS50b1ZhbHVlKX0sUGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGtlKGUpP2VbZS5sZW5ndGgtMV18fDA6ZX07ZnVuY3Rpb24gSWUoZSl7dmFyIHQ9ZWUoZSk/ZS5nZXQoKTplO3JldHVybiBSZSh0KT90LnRvVmFsdWUoKTp0fWZ1bmN0aW9uIEFlKGUsdCxuLHIpe3ZhciBvPWUuc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzLGk9ZS5jcmVhdGVSZW5kZXJTdGF0ZSxhPWUub25Nb3VudCxsPXtsYXRlc3RWYWx1ZXM6SGUodCxuLHIsbykscmVuZGVyU3RhdGU6aSgpfTtyZXR1cm4gYSYmKGwubW91bnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGEodCxlLGwpfSksbH12YXIgVGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dmFyIHI9by51c2VDb250ZXh0KHcpLGk9by51c2VDb250ZXh0KHgpO3JldHVybiBuP0FlKGUsdCxyLGkpOl8oKGZ1bmN0aW9uKCl7cmV0dXJuIEFlKGUsdCxyLGkpfSkpfX07ZnVuY3Rpb24gSGUoZSx0LG4sbyl7dmFyIGk9e30sYT0hMT09PShudWxsPT1uP3ZvaWQgMDpuLmluaXRpYWwpLGw9byhlKTtmb3IodmFyIHMgaW4gbClpW3NdPUllKGxbc10pO3ZhciBjPWUuaW5pdGlhbCx1PWUuYW5pbWF0ZSxmPUIoZSksZD1WKGUpO3QmJmQmJiFmJiYhMSE9PWUuaW5oZXJpdCYmKG51bGwhPWN8fChjPXQuaW5pdGlhbCksbnVsbCE9dXx8KHU9dC5hbmltYXRlKSk7dmFyIHA9YXx8ITE9PT1jP3U6YztyZXR1cm4gcCYmXCJib29sZWFuXCIhPXR5cGVvZiBwJiYhTWUocCkmJihBcnJheS5pc0FycmF5KHApP3A6W3BdKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1UKGUsdCk7aWYobil7dmFyIG89bi50cmFuc2l0aW9uRW5kO24udHJhbnNpdGlvbjt2YXIgYT1yLl9fcmVzdChuLFtcInRyYW5zaXRpb25FbmRcIixcInRyYW5zaXRpb25cIl0pO2Zvcih2YXIgbCBpbiBhKWlbbF09YVtsXTtmb3IodmFyIGwgaW4gbylpW2xdPW9bbF19fSkpLGl9dmFyIEJlLFZlPXt1c2VWaXN1YWxTdGF0ZTpUZSh7c2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzOmplLGNyZWF0ZVJlbmRlclN0YXRlOnllLG9uTW91bnQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4ucmVuZGVyU3RhdGUsbz1uLmxhdGVzdFZhbHVlczt0cnl7ci5kaW1lbnNpb25zPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQuZ2V0QkJveD90LmdldEJCb3goKTp0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfWNhdGNoKGUpe3IuZGltZW5zaW9ucz17eDowLHk6MCx3aWR0aDowLGhlaWdodDowfX1cInBhdGhcIj09PXQudGFnTmFtZSYmKHIudG90YWxQYXRoTGVuZ3RoPXQuZ2V0VG90YWxMZW5ndGgoKSksQ2UocixvLHZvaWQgMCx2b2lkIDAse2VuYWJsZUhhcmR3YXJlQWNjZWxlcmF0aW9uOiExfSxlLnRyYW5zZm9ybVRlbXBsYXRlKSxFZSh0LHIpfX0pfSxEZT17dXNlVmlzdWFsU3RhdGU6VGUoe3NjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wczpTZSxjcmVhdGVSZW5kZXJTdGF0ZTpsZX0pfTtmdW5jdGlvbiBaZShlLHQsbixvKXt2YXIgaT10LmZvcndhcmRNb3Rpb25Qcm9wcyxhPXZvaWQgMCE9PWkmJmksbD1GKGUpP1ZlOkRlO3JldHVybiByLl9fYXNzaWduKHIuX19hc3NpZ24oe30sbCkse3ByZWxvYWRlZEZlYXR1cmVzOm4sdXNlUmVuZGVyOmJlKGEpLGNyZWF0ZVZpc3VhbEVsZW1lbnQ6byxDb21wb25lbnQ6ZX0pfWZ1bmN0aW9uICRlKGUsdCxuLHIpe3JldHVybiBlLmFkZEV2ZW50TGlzdGVuZXIodCxuLHIpLGZ1bmN0aW9uKCl7cmV0dXJuIGUucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4scil9fWZ1bmN0aW9uIE5lKGUsdCxuLHIpe28udXNlRWZmZWN0KChmdW5jdGlvbigpe3ZhciBvPWUuY3VycmVudDtpZihuJiZvKXJldHVybiAkZShvLHQsbixyKX0pLFtlLHQsbixyXSl9ZnVuY3Rpb24gRmUoZSl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFBvaW50ZXJFdmVudCYmZSBpbnN0YW5jZW9mIFBvaW50ZXJFdmVudD8hKFwibW91c2VcIiE9PWUucG9pbnRlclR5cGUpOmUgaW5zdGFuY2VvZiBNb3VzZUV2ZW50fWZ1bmN0aW9uIFVlKGUpe3JldHVybiEhZS50b3VjaGVzfSFmdW5jdGlvbihlKXtlLkFuaW1hdGU9XCJhbmltYXRlXCIsZS5Ib3Zlcj1cIndoaWxlSG92ZXJcIixlLlRhcD1cIndoaWxlVGFwXCIsZS5EcmFnPVwid2hpbGVEcmFnXCIsZS5Gb2N1cz1cIndoaWxlRm9jdXNcIixlLkV4aXQ9XCJleGl0XCJ9KEJlfHwoQmU9e30pKTt2YXIgV2U9e3BhZ2VYOjAscGFnZVk6MH07ZnVuY3Rpb24gemUoZSx0KXt2b2lkIDA9PT10JiYodD1cInBhZ2VcIik7dmFyIG49ZS50b3VjaGVzWzBdfHxlLmNoYW5nZWRUb3VjaGVzWzBdfHxXZTtyZXR1cm57eDpuW3QrXCJYXCJdLHk6blt0K1wiWVwiXX19ZnVuY3Rpb24gR2UoZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9XCJwYWdlXCIpLHt4OmVbdCtcIlhcIl0seTplW3QrXCJZXCJdfX1mdW5jdGlvbiBxZShlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD1cInBhZ2VcIikse3BvaW50OlVlKGUpP3plKGUsdCk6R2UoZSx0KX19dmFyIFllPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9ITEpO3ZhciBuLHI9ZnVuY3Rpb24odCl7cmV0dXJuIGUodCxxZSh0KSl9O3JldHVybiB0PyhuPXIsZnVuY3Rpb24oZSl7dmFyIHQ9ZSBpbnN0YW5jZW9mIE1vdXNlRXZlbnQ7KCF0fHx0JiYwPT09ZS5idXR0b24pJiZuKGUpfSk6cn0sS2U9ZnVuY3Rpb24oKXtyZXR1cm4gayYmbnVsbD09PXdpbmRvdy5vbnBvaW50ZXJkb3dufSxYZT1mdW5jdGlvbigpe3JldHVybiBrJiZudWxsPT09d2luZG93Lm9udG91Y2hzdGFydH0sSmU9ZnVuY3Rpb24oKXtyZXR1cm4gayYmbnVsbD09PXdpbmRvdy5vbm1vdXNlZG93bn0sUWU9e3BvaW50ZXJkb3duOlwibW91c2Vkb3duXCIscG9pbnRlcm1vdmU6XCJtb3VzZW1vdmVcIixwb2ludGVydXA6XCJtb3VzZXVwXCIscG9pbnRlcmNhbmNlbDpcIm1vdXNlY2FuY2VsXCIscG9pbnRlcm92ZXI6XCJtb3VzZW92ZXJcIixwb2ludGVyb3V0OlwibW91c2VvdXRcIixwb2ludGVyZW50ZXI6XCJtb3VzZWVudGVyXCIscG9pbnRlcmxlYXZlOlwibW91c2VsZWF2ZVwifSxldD17cG9pbnRlcmRvd246XCJ0b3VjaHN0YXJ0XCIscG9pbnRlcm1vdmU6XCJ0b3VjaG1vdmVcIixwb2ludGVydXA6XCJ0b3VjaGVuZFwiLHBvaW50ZXJjYW5jZWw6XCJ0b3VjaGNhbmNlbFwifTtmdW5jdGlvbiB0dChlKXtyZXR1cm4gS2UoKT9lOlhlKCk/ZXRbZV06SmUoKT9RZVtlXTplfWZ1bmN0aW9uIG50KGUsdCxuLHIpe3JldHVybiAkZShlLHR0KHQpLFllKG4sXCJwb2ludGVyZG93blwiPT09dCkscil9ZnVuY3Rpb24gcnQoZSx0LG4scil7cmV0dXJuIE5lKGUsdHQodCksbiYmWWUobixcInBvaW50ZXJkb3duXCI9PT10KSxyKX1mdW5jdGlvbiBvdChlKXt2YXIgdD1udWxsO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBudWxsPT09dCYmKHQ9ZSxmdW5jdGlvbigpe3Q9bnVsbH0pfX12YXIgaXQ9b3QoXCJkcmFnSG9yaXpvbnRhbFwiKSxhdD1vdChcImRyYWdWZXJ0aWNhbFwiKTtmdW5jdGlvbiBsdChlKXt2YXIgdD0hMTtpZihcInlcIj09PWUpdD1hdCgpO2Vsc2UgaWYoXCJ4XCI9PT1lKXQ9aXQoKTtlbHNle3ZhciBuPWl0KCkscj1hdCgpO24mJnI/dD1mdW5jdGlvbigpe24oKSxyKCl9OihuJiZuKCksciYmcigpKX1yZXR1cm4gdH1mdW5jdGlvbiBzdCgpe3ZhciBlPWx0KCEwKTtyZXR1cm4hZXx8KGUoKSwhMSl9ZnVuY3Rpb24gY3QoZSx0LG4pe3JldHVybiBmdW5jdGlvbihyLG8pe3ZhciBpO0ZlKHIpJiYhc3QoKSYmKG51bGw9PW58fG4ocixvKSxudWxsPT09KGk9ZS5hbmltYXRpb25TdGF0ZSl8fHZvaWQgMD09PWl8fGkuc2V0QWN0aXZlKEJlLkhvdmVyLHQpKX19dmFyIHV0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuISF0JiYoZT09PXR8fHV0KGUsdC5wYXJlbnRFbGVtZW50KSl9O2Z1bmN0aW9uIGZ0KGUpe3JldHVybiBvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSgpfX0pLFtdKX12YXIgZHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpLG51bGx9fSxwdD17dGFwOmR0KChmdW5jdGlvbihlKXt2YXIgdD1lLm9uVGFwLG49ZS5vblRhcFN0YXJ0LHI9ZS5vblRhcENhbmNlbCxpPWUud2hpbGVUYXAsYT1lLnZpc3VhbEVsZW1lbnQscz10fHxufHxyfHxpLGM9by51c2VSZWYoITEpLHU9by51c2VSZWYobnVsbCk7ZnVuY3Rpb24gZigpe3ZhciBlO251bGw9PT0oZT11LmN1cnJlbnQpfHx2b2lkIDA9PT1lfHxlLmNhbGwodSksdS5jdXJyZW50PW51bGx9ZnVuY3Rpb24gZCgpe3ZhciBlO3JldHVybiBmKCksYy5jdXJyZW50PSExLG51bGw9PT0oZT1hLmFuaW1hdGlvblN0YXRlKXx8dm9pZCAwPT09ZXx8ZS5zZXRBY3RpdmUoQmUuVGFwLCExKSwhc3QoKX1mdW5jdGlvbiBwKGUsbil7ZCgpJiYodXQoYS5nZXRJbnN0YW5jZSgpLGUudGFyZ2V0KT9udWxsPT10fHx0KGUsbik6bnVsbD09cnx8cihlLG4pKX1mdW5jdGlvbiBoKGUsdCl7ZCgpJiYobnVsbD09cnx8cihlLHQpKX1ydChhLFwicG9pbnRlcmRvd25cIixzP2Z1bmN0aW9uKGUsdCl7dmFyIHI7ZigpLGMuY3VycmVudHx8KGMuY3VycmVudD0hMCx1LmN1cnJlbnQ9bC5waXBlKG50KHdpbmRvdyxcInBvaW50ZXJ1cFwiLHApLG50KHdpbmRvdyxcInBvaW50ZXJjYW5jZWxcIixoKSksbnVsbD09bnx8bihlLHQpLG51bGw9PT0ocj1hLmFuaW1hdGlvblN0YXRlKXx8dm9pZCAwPT09cnx8ci5zZXRBY3RpdmUoQmUuVGFwLCEwKSl9OnZvaWQgMCksZnQoZil9KSksZm9jdXM6ZHQoKGZ1bmN0aW9uKGUpe3ZhciB0PWUud2hpbGVGb2N1cyxuPWUudmlzdWFsRWxlbWVudDtOZShuLFwiZm9jdXNcIix0P2Z1bmN0aW9uKCl7dmFyIGU7bnVsbD09PShlPW4uYW5pbWF0aW9uU3RhdGUpfHx2b2lkIDA9PT1lfHxlLnNldEFjdGl2ZShCZS5Gb2N1cywhMCl9OnZvaWQgMCksTmUobixcImJsdXJcIix0P2Z1bmN0aW9uKCl7dmFyIGU7bnVsbD09PShlPW4uYW5pbWF0aW9uU3RhdGUpfHx2b2lkIDA9PT1lfHxlLnNldEFjdGl2ZShCZS5Gb2N1cywhMSl9OnZvaWQgMCl9KSksaG92ZXI6ZHQoKGZ1bmN0aW9uKGUpe3ZhciB0PWUub25Ib3ZlclN0YXJ0LG49ZS5vbkhvdmVyRW5kLHI9ZS53aGlsZUhvdmVyLG89ZS52aXN1YWxFbGVtZW50O3J0KG8sXCJwb2ludGVyZW50ZXJcIix0fHxyP2N0KG8sITAsdCk6dm9pZCAwKSxydChvLFwicG9pbnRlcmxlYXZlXCIsbnx8cj9jdChvLCExLG4pOnZvaWQgMCl9KSl9O2Z1bmN0aW9uIGh0KGUsdCl7aWYoIUFycmF5LmlzQXJyYXkodCkpcmV0dXJuITE7dmFyIG49dC5sZW5ndGg7aWYobiE9PWUubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgcj0wO3I8bjtyKyspaWYodFtyXSE9PWVbcl0pcmV0dXJuITE7cmV0dXJuITB9dmFyIGd0PWZ1bmN0aW9uKGUpe3JldHVybiAxZTMqZX0sdnQ9e2xpbmVhcjpsLmxpbmVhcixlYXNlSW46bC5lYXNlSW4sZWFzZUluT3V0OmwuZWFzZUluT3V0LGVhc2VPdXQ6bC5lYXNlT3V0LGNpcmNJbjpsLmNpcmNJbixjaXJjSW5PdXQ6bC5jaXJjSW5PdXQsY2lyY091dDpsLmNpcmNPdXQsYmFja0luOmwuYmFja0luLGJhY2tJbk91dDpsLmJhY2tJbk91dCxiYWNrT3V0OmwuYmFja091dCxhbnRpY2lwYXRlOmwuYW50aWNpcGF0ZSxib3VuY2VJbjpsLmJvdW5jZUluLGJvdW5jZUluT3V0OmwuYm91bmNlSW5PdXQsYm91bmNlT3V0OmwuYm91bmNlT3V0fSxtdD1mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXtpLmludmFyaWFudCg0PT09ZS5sZW5ndGgsXCJDdWJpYyBiZXppZXIgYXJyYXlzIG11c3QgY29udGFpbiBmb3VyIG51bWVyaWNhbCB2YWx1ZXMuXCIpO3ZhciB0PXIuX19yZWFkKGUsNCksbj10WzBdLG89dFsxXSxhPXRbMl0scz10WzNdO3JldHVybiBsLmN1YmljQmV6aWVyKG4sbyxhLHMpfXJldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlPyhpLmludmFyaWFudCh2b2lkIDAhPT12dFtlXSxcIkludmFsaWQgZWFzaW5nIHR5cGUgJ1wiK2UrXCInXCIpLHZ0W2VdKTplfSxDdD1mdW5jdGlvbihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKSYmXCJudW1iZXJcIiE9dHlwZW9mIGVbMF19LHl0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIShcInpJbmRleFwiPT09ZXx8XCJudW1iZXJcIiE9dHlwZW9mIHQmJiFBcnJheS5pc0FycmF5KHQpJiYoXCJzdHJpbmdcIiE9dHlwZW9mIHR8fCFhLmNvbXBsZXgudGVzdCh0KXx8dC5zdGFydHNXaXRoKFwidXJsKFwiKSkpfSx3dD1mdW5jdGlvbigpe3JldHVybnt0eXBlOlwic3ByaW5nXCIsc3RpZmZuZXNzOjUwMCxkYW1waW5nOjI1LHJlc3REZWx0YTouNSxyZXN0U3BlZWQ6MTB9fSxidD1mdW5jdGlvbihlKXtyZXR1cm57dHlwZTpcInNwcmluZ1wiLHN0aWZmbmVzczo1NTAsZGFtcGluZzowPT09ZT8yKk1hdGguc3FydCg1NTApOjMwLHJlc3REZWx0YTouMDEscmVzdFNwZWVkOjEwfX0seHQ9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTpcImtleWZyYW1lc1wiLGVhc2U6XCJsaW5lYXJcIixkdXJhdGlvbjouM319LF90PWZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOlwia2V5ZnJhbWVzXCIsZHVyYXRpb246LjgsdmFsdWVzOmV9fSxPdD17eDp3dCx5Ond0LHo6d3Qscm90YXRlOnd0LHJvdGF0ZVg6d3Qscm90YXRlWTp3dCxyb3RhdGVaOnd0LHNjYWxlWDpidCxzY2FsZVk6YnQsc2NhbGU6YnQsb3BhY2l0eTp4dCxiYWNrZ3JvdW5kQ29sb3I6eHQsY29sb3I6eHQsZGVmYXVsdDpidH0sTHQ9ZnVuY3Rpb24oZSx0KXt2YXIgbjtyZXR1cm4gbj1rZSh0KT9fdDpPdFtlXXx8T3QuZGVmYXVsdCxyLl9fYXNzaWduKHt0bzp0fSxuKHQpKX0sRXQ9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGllKSx7Y29sb3I6YS5jb2xvcixiYWNrZ3JvdW5kQ29sb3I6YS5jb2xvcixvdXRsaW5lQ29sb3I6YS5jb2xvcixmaWxsOmEuY29sb3Isc3Ryb2tlOmEuY29sb3IsYm9yZGVyQ29sb3I6YS5jb2xvcixib3JkZXJUb3BDb2xvcjphLmNvbG9yLGJvcmRlclJpZ2h0Q29sb3I6YS5jb2xvcixib3JkZXJCb3R0b21Db2xvcjphLmNvbG9yLGJvcmRlckxlZnRDb2xvcjphLmNvbG9yLGZpbHRlcjphLmZpbHRlcixXZWJraXRGaWx0ZXI6YS5maWx0ZXJ9KSxTdD1mdW5jdGlvbihlKXtyZXR1cm4gRXRbZV19O2Z1bmN0aW9uIGp0KGUsdCl7dmFyIG4scj1TdChlKTtyZXR1cm4gciE9PWEuZmlsdGVyJiYocj1hLmNvbXBsZXgpLG51bGw9PT0obj1yLmdldEFuaW1hdGFibGVOb25lKXx8dm9pZCAwPT09bj92b2lkIDA6bi5jYWxsKHIsdCl9dmFyIE10PSExO2Z1bmN0aW9uIGt0KGUpe3JldHVybiAwPT09ZXx8XCJzdHJpbmdcIj09dHlwZW9mIGUmJjA9PT1wYXJzZUZsb2F0KGUpJiYtMT09PWUuaW5kZXhPZihcIiBcIil9ZnVuY3Rpb24gUnQoZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGU/MDpqdChcIlwiLGUpfWZ1bmN0aW9uIFB0KGUsdCl7cmV0dXJuIGVbdF18fGUuZGVmYXVsdHx8ZX1mdW5jdGlvbiBJdChlLHQsbixvKXtyZXR1cm4gdm9pZCAwPT09byYmKG89e30pLHQuc3RhcnQoKGZ1bmN0aW9uKGEpe3ZhciBzLGMsdT1mdW5jdGlvbihlLHQsbixvLGEpe3ZhciBzLGM9UHQobyxlKSx1PW51bGwhPT0ocz1jLmZyb20pJiZ2b2lkIDAhPT1zP3M6dC5nZXQoKSxmPXl0KGUsbik7XCJub25lXCI9PT11JiZmJiZcInN0cmluZ1wiPT10eXBlb2Ygbj91PWp0KGUsbik6a3QodSkmJlwic3RyaW5nXCI9PXR5cGVvZiBuP3U9UnQobik6IUFycmF5LmlzQXJyYXkobikmJmt0KG4pJiZcInN0cmluZ1wiPT10eXBlb2YgdSYmKG49UnQodSkpO3ZhciBkPXl0KGUsdSk7cmV0dXJuIGkud2FybmluZyhkPT09ZixcIllvdSBhcmUgdHJ5aW5nIHRvIGFuaW1hdGUgXCIrZSsnIGZyb20gXCInK3UrJ1wiIHRvIFwiJytuKydcIi4gJyt1K1wiIGlzIG5vdCBhbiBhbmltYXRhYmxlIHZhbHVlIC0gdG8gZW5hYmxlIHRoaXMgYW5pbWF0aW9uIHNldCBcIit1K1wiIHRvIGEgdmFsdWUgYW5pbWF0YWJsZSB0byBcIituK1wiIHZpYSB0aGUgYHN0eWxlYCBwcm9wZXJ0eS5cIiksZCYmZiYmITEhPT1jLnR5cGU/ZnVuY3Rpb24oKXt2YXIgbz17ZnJvbTp1LHRvOm4sdmVsb2NpdHk6dC5nZXRWZWxvY2l0eSgpLG9uQ29tcGxldGU6YSxvblVwZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gdC5zZXQoZSl9fTtyZXR1cm5cImluZXJ0aWFcIj09PWMudHlwZXx8XCJkZWNheVwiPT09Yy50eXBlP2wuaW5lcnRpYShyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sbyksYykpOmwuYW5pbWF0ZShyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sZnVuY3Rpb24oZSx0LG4pe3ZhciBvO3JldHVybiBBcnJheS5pc0FycmF5KHQudG8pJiYobnVsbCE9PShvPWUuZHVyYXRpb24pJiZ2b2lkIDAhPT1vfHwoZS5kdXJhdGlvbj0uOCkpLGZ1bmN0aW9uKGUpe0FycmF5LmlzQXJyYXkoZS50bykmJm51bGw9PT1lLnRvWzBdJiYoZS50bz1yLl9fc3ByZWFkQXJyYXkoW10sci5fX3JlYWQoZS50bykpLGUudG9bMF09ZS5mcm9tKX0odCksZnVuY3Rpb24oZSl7ZS53aGVuLGUuZGVsYXksZS5kZWxheUNoaWxkcmVuLGUuc3RhZ2dlckNoaWxkcmVuLGUuc3RhZ2dlckRpcmVjdGlvbixlLnJlcGVhdCxlLnJlcGVhdFR5cGUsZS5yZXBlYXREZWxheSxlLmZyb207dmFyIHQ9ci5fX3Jlc3QoZSxbXCJ3aGVuXCIsXCJkZWxheVwiLFwiZGVsYXlDaGlsZHJlblwiLFwic3RhZ2dlckNoaWxkcmVuXCIsXCJzdGFnZ2VyRGlyZWN0aW9uXCIsXCJyZXBlYXRcIixcInJlcGVhdFR5cGVcIixcInJlcGVhdERlbGF5XCIsXCJmcm9tXCJdKTtyZXR1cm4hIU9iamVjdC5rZXlzKHQpLmxlbmd0aH0oZSl8fChlPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxlKSxMdChuLHQudG8pKSksci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LHQpLGZ1bmN0aW9uKGUpe3ZhciB0PWUuZWFzZSxuPWUudGltZXMsbz1lLnlveW8sYT1lLmZsaXAsbD1lLmxvb3Ascz1yLl9fcmVzdChlLFtcImVhc2VcIixcInRpbWVzXCIsXCJ5b3lvXCIsXCJmbGlwXCIsXCJsb29wXCJdKSxjPXIuX19hc3NpZ24oe30scyk7cmV0dXJuIG4mJihjLm9mZnNldD1uKSxzLmR1cmF0aW9uJiYoYy5kdXJhdGlvbj1ndChzLmR1cmF0aW9uKSkscy5yZXBlYXREZWxheSYmKGMucmVwZWF0RGVsYXk9Z3Qocy5yZXBlYXREZWxheSkpLHQmJihjLmVhc2U9Q3QodCk/dC5tYXAobXQpOm10KHQpKSxcInR3ZWVuXCI9PT1zLnR5cGUmJihjLnR5cGU9XCJrZXlmcmFtZXNcIiksKG98fGx8fGEpJiYoaS53YXJuaW5nKCFNdCxcInlveW8sIGxvb3AgYW5kIGZsaXAgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgQVBJLiBSZXBsYWNlIHdpdGggcmVwZWF0IGFuZCByZXBlYXRUeXBlIG9wdGlvbnMuXCIpLE10PSEwLG8/Yy5yZXBlYXRUeXBlPVwicmV2ZXJzZVwiOmw/Yy5yZXBlYXRUeXBlPVwibG9vcFwiOmEmJihjLnJlcGVhdFR5cGU9XCJtaXJyb3JcIiksYy5yZXBlYXQ9bHx8b3x8YXx8cy5yZXBlYXQpLFwic3ByaW5nXCIhPT1zLnR5cGUmJihjLnR5cGU9XCJrZXlmcmFtZXNcIiksY30oZSkpfShjLG8sZSkpLHtvblVwZGF0ZTpmdW5jdGlvbihlKXt2YXIgdDtvLm9uVXBkYXRlKGUpLG51bGw9PT0odD1jLm9uVXBkYXRlKXx8dm9pZCAwPT09dHx8dC5jYWxsKGMsZSl9LG9uQ29tcGxldGU6ZnVuY3Rpb24oKXt2YXIgZTtvLm9uQ29tcGxldGUoKSxudWxsPT09KGU9Yy5vbkNvbXBsZXRlKXx8dm9pZCAwPT09ZXx8ZS5jYWxsKGMpfX0pKX06ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdC5zZXQobiksYSgpLG51bGw9PT0oZT1udWxsPT1jP3ZvaWQgMDpjLm9uQ29tcGxldGUpfHx2b2lkIDA9PT1lfHxlLmNhbGwoYykse3N0b3A6ZnVuY3Rpb24oKXt9fX19KGUsdCxuLG8sYSksZj1mdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBudWxsIT09KG49KFB0KGUsdCl8fHt9KS5kZWxheSkmJnZvaWQgMCE9PW4/bjowfShvLGUpLGQ9ZnVuY3Rpb24oKXtyZXR1cm4gYz11KCl9O3JldHVybiBmP3M9c2V0VGltZW91dChkLGd0KGYpKTpkKCksZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQocyksbnVsbD09Y3x8Yy5zdG9wKCl9fSkpfWZ1bmN0aW9uIEF0KGUsdCl7LTE9PT1lLmluZGV4T2YodCkmJmUucHVzaCh0KX1mdW5jdGlvbiBUdChlLHQpe3ZhciBuPWUuaW5kZXhPZih0KTtuPi0xJiZlLnNwbGljZShuLDEpfXZhciBIdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnN1YnNjcmlwdGlvbnM9W119cmV0dXJuIGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiBBdCh0aGlzLnN1YnNjcmlwdGlvbnMsZSksZnVuY3Rpb24oKXtyZXR1cm4gVHQodC5zdWJzY3JpcHRpb25zLGUpfX0sZS5wcm90b3R5cGUubm90aWZ5PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLnN1YnNjcmlwdGlvbnMubGVuZ3RoO2lmKHIpaWYoMT09PXIpdGhpcy5zdWJzY3JpcHRpb25zWzBdKGUsdCxuKTtlbHNlIGZvcih2YXIgbz0wO288cjtvKyspe3ZhciBpPXRoaXMuc3Vic2NyaXB0aW9uc1tvXTtpJiZpKGUsdCxuKX19LGUucHJvdG90eXBlLmdldFNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdWJzY3JpcHRpb25zLmxlbmd0aH0sZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLnN1YnNjcmlwdGlvbnMubGVuZ3RoPTB9LGV9KCksQnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciB0LG49dGhpczt0aGlzLnRpbWVEZWx0YT0wLHRoaXMubGFzdFVwZGF0ZWQ9MCx0aGlzLnVwZGF0ZVN1YnNjcmliZXJzPW5ldyBIdCx0aGlzLnZlbG9jaXR5VXBkYXRlU3Vic2NyaWJlcnM9bmV3IEh0LHRoaXMucmVuZGVyU3Vic2NyaWJlcnM9bmV3IEh0LHRoaXMuY2FuVHJhY2tWZWxvY2l0eT0hMSx0aGlzLnVwZGF0ZUFuZE5vdGlmeT1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PSEwKSxuLnByZXY9bi5jdXJyZW50LG4uY3VycmVudD1lO3ZhciByPXMuZ2V0RnJhbWVEYXRhKCksbz1yLmRlbHRhLGk9ci50aW1lc3RhbXA7bi5sYXN0VXBkYXRlZCE9PWkmJihuLnRpbWVEZWx0YT1vLG4ubGFzdFVwZGF0ZWQ9aSxkLmRlZmF1bHQucG9zdFJlbmRlcihuLnNjaGVkdWxlVmVsb2NpdHlDaGVjaykpLG4ucHJldiE9PW4uY3VycmVudCYmbi51cGRhdGVTdWJzY3JpYmVycy5ub3RpZnkobi5jdXJyZW50KSxuLnZlbG9jaXR5VXBkYXRlU3Vic2NyaWJlcnMuZ2V0U2l6ZSgpJiZuLnZlbG9jaXR5VXBkYXRlU3Vic2NyaWJlcnMubm90aWZ5KG4uZ2V0VmVsb2NpdHkoKSksdCYmbi5yZW5kZXJTdWJzY3JpYmVycy5ub3RpZnkobi5jdXJyZW50KX0sdGhpcy5zY2hlZHVsZVZlbG9jaXR5Q2hlY2s9ZnVuY3Rpb24oKXtyZXR1cm4gZC5kZWZhdWx0LnBvc3RSZW5kZXIobi52ZWxvY2l0eUNoZWNrKX0sdGhpcy52ZWxvY2l0eUNoZWNrPWZ1bmN0aW9uKGUpe2UudGltZXN0YW1wIT09bi5sYXN0VXBkYXRlZCYmKG4ucHJldj1uLmN1cnJlbnQsbi52ZWxvY2l0eVVwZGF0ZVN1YnNjcmliZXJzLm5vdGlmeShuLmdldFZlbG9jaXR5KCkpKX0sdGhpcy5oYXNBbmltYXRlZD0hMSx0aGlzLnByZXY9dGhpcy5jdXJyZW50PWUsdGhpcy5jYW5UcmFja1ZlbG9jaXR5PSh0PXRoaXMuY3VycmVudCwhaXNOYU4ocGFyc2VGbG9hdCh0KSkpfXJldHVybiBlLnByb3RvdHlwZS5vbkNoYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy51cGRhdGVTdWJzY3JpYmVycy5hZGQoZSl9LGUucHJvdG90eXBlLmNsZWFyTGlzdGVuZXJzPWZ1bmN0aW9uKCl7dGhpcy51cGRhdGVTdWJzY3JpYmVycy5jbGVhcigpfSxlLnByb3RvdHlwZS5vblJlbmRlclJlcXVlc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGUodGhpcy5nZXQoKSksdGhpcy5yZW5kZXJTdWJzY3JpYmVycy5hZGQoZSl9LGUucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbihlKXt0aGlzLnBhc3NpdmVFZmZlY3Q9ZX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9ITApLHQmJnRoaXMucGFzc2l2ZUVmZmVjdD90aGlzLnBhc3NpdmVFZmZlY3QoZSx0aGlzLnVwZGF0ZUFuZE5vdGlmeSk6dGhpcy51cGRhdGVBbmROb3RpZnkoZSx0KX0sZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sZS5wcm90b3R5cGUuZ2V0UHJldmlvdXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmV2fSxlLnByb3RvdHlwZS5nZXRWZWxvY2l0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhblRyYWNrVmVsb2NpdHk/bC52ZWxvY2l0eVBlclNlY29uZChwYXJzZUZsb2F0KHRoaXMuY3VycmVudCktcGFyc2VGbG9hdCh0aGlzLnByZXYpLHRoaXMudGltZURlbHRhKTowfSxlLnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLnN0b3AoKSxuZXcgUHJvbWlzZSgoZnVuY3Rpb24obil7dC5oYXNBbmltYXRlZD0hMCx0LnN0b3BBbmltYXRpb249ZShuKX0pKS50aGVuKChmdW5jdGlvbigpe3JldHVybiB0LmNsZWFyQW5pbWF0aW9uKCl9KSl9LGUucHJvdG90eXBlLnN0b3A9ZnVuY3Rpb24oKXt0aGlzLnN0b3BBbmltYXRpb24mJnRoaXMuc3RvcEFuaW1hdGlvbigpLHRoaXMuY2xlYXJBbmltYXRpb24oKX0sZS5wcm90b3R5cGUuaXNBbmltYXRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuc3RvcEFuaW1hdGlvbn0sZS5wcm90b3R5cGUuY2xlYXJBbmltYXRpb249ZnVuY3Rpb24oKXt0aGlzLnN0b3BBbmltYXRpb249bnVsbH0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMudXBkYXRlU3Vic2NyaWJlcnMuY2xlYXIoKSx0aGlzLnJlbmRlclN1YnNjcmliZXJzLmNsZWFyKCksdGhpcy5zdG9wKCl9LGV9KCk7ZnVuY3Rpb24gVnQoZSl7cmV0dXJuIG5ldyBCdChlKX12YXIgRHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LnRlc3QoZSl9fSxadD1bYS5udW1iZXIsYS5weCxhLnBlcmNlbnQsYS5kZWdyZWVzLGEudncsYS52aCx7dGVzdDpmdW5jdGlvbihlKXtyZXR1cm5cImF1dG9cIj09PWV9LHBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybiBlfX1dLCR0PWZ1bmN0aW9uKGUpe3JldHVybiBadC5maW5kKER0KGUpKX0sTnQ9ci5fX3NwcmVhZEFycmF5KHIuX19zcHJlYWRBcnJheShbXSxyLl9fcmVhZChadCkpLFthLmNvbG9yLGEuY29tcGxleF0pO2Z1bmN0aW9uIEZ0KGUsdCxuKXtlLmhhc1ZhbHVlKHQpP2UuZ2V0VmFsdWUodCkuc2V0KG4pOmUuYWRkVmFsdWUodCxWdChuKSl9ZnVuY3Rpb24gVXQoZSx0KXt2YXIgbj1IKGUsdCksbz1uP2UubWFrZVRhcmdldEFuaW1hdGFibGUobiwhMSk6e30saT1vLnRyYW5zaXRpb25FbmQsYT12b2lkIDA9PT1pP3t9Omk7by50cmFuc2l0aW9uO3ZhciBsPXIuX19yZXN0KG8sW1widHJhbnNpdGlvbkVuZFwiLFwidHJhbnNpdGlvblwiXSk7Zm9yKHZhciBzIGluIGw9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGwpLGEpKUZ0KGUscyxQZShsW3NdKSl9ZnVuY3Rpb24gV3QoZSx0KXtyLl9fc3ByZWFkQXJyYXkoW10sci5fX3JlYWQodCkpLnJldmVyc2UoKS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgcixvPWUuZ2V0VmFyaWFudChuKTtvJiZVdChlLG8pLG51bGw9PT0ocj1lLnZhcmlhbnRDaGlsZHJlbil8fHZvaWQgMD09PXJ8fHIuZm9yRWFjaCgoZnVuY3Rpb24oZSl7V3QoZSx0KX0pKX0pKX1mdW5jdGlvbiB6dChlLHQsbil7dmFyIHIsbyxpLGwscyxjPU9iamVjdC5rZXlzKHQpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIWUuaGFzVmFsdWUodCl9KSksdT1jLmxlbmd0aDtpZih1KWZvcih2YXIgZj0wO2Y8dTtmKyspe3ZhciBkPWNbZl0scD10W2RdLGg9bnVsbDtBcnJheS5pc0FycmF5KHApJiYoaD1wWzBdKSxudWxsPT09aCYmKGg9bnVsbCE9PShvPW51bGwhPT0ocj1uW2RdKSYmdm9pZCAwIT09cj9yOmUucmVhZFZhbHVlKGQpKSYmdm9pZCAwIT09bz9vOnRbZF0pLG51bGwhPWgmJihcInN0cmluZ1wiPT10eXBlb2YgaCYmL15cXC0/XFxkKlxcLj9cXGQrJC8udGVzdChoKT9oPXBhcnNlRmxvYXQoaCk6KHM9aCwhTnQuZmluZChEdChzKSkmJmEuY29tcGxleC50ZXN0KHApJiYoaD1qdChkLHApKSksZS5hZGRWYWx1ZShkLFZ0KGgpKSxudWxsIT09KGk9KGw9bilbZF0pJiZ2b2lkIDAhPT1pfHwobFtkXT1oKSxlLnNldEJhc2VUYXJnZXQoZCxoKSl9fWZ1bmN0aW9uIEd0KGUsdCl7aWYodClyZXR1cm4odFtlXXx8dC5kZWZhdWx0fHx0KS5mcm9tfWZ1bmN0aW9uIHF0KGUsdCxuKXt2YXIgcixvLGk9e307Zm9yKHZhciBhIGluIGUpaVthXT1udWxsIT09KHI9R3QoYSx0KSkmJnZvaWQgMCE9PXI/cjpudWxsPT09KG89bi5nZXRWYWx1ZShhKSl8fHZvaWQgMD09PW8/dm9pZCAwOm8uZ2V0KCk7cmV0dXJuIGl9ZnVuY3Rpb24gWXQoZSx0LG4pe3ZhciByO2lmKHZvaWQgMD09PW4mJihuPXt9KSxlLm5vdGlmeUFuaW1hdGlvblN0YXJ0KCksQXJyYXkuaXNBcnJheSh0KSl7dmFyIG89dC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBLdChlLHQsbil9KSk7cj1Qcm9taXNlLmFsbChvKX1lbHNlIGlmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXI9S3QoZSx0LG4pO2Vsc2V7dmFyIGk9XCJmdW5jdGlvblwiPT10eXBlb2YgdD9IKGUsdCxuLmN1c3RvbSk6dDtyPVh0KGUsaSxuKX1yZXR1cm4gci50aGVuKChmdW5jdGlvbigpe3JldHVybiBlLm5vdGlmeUFuaW1hdGlvbkNvbXBsZXRlKHQpfSkpfWZ1bmN0aW9uIEt0KGUsdCxuKXt2YXIgbzt2b2lkIDA9PT1uJiYobj17fSk7dmFyIGk9SChlLHQsbi5jdXN0b20pLGE9KGl8fHt9KS50cmFuc2l0aW9uLGw9dm9pZCAwPT09YT9lLmdldERlZmF1bHRUcmFuc2l0aW9uKCl8fHt9OmE7bi50cmFuc2l0aW9uT3ZlcnJpZGUmJihsPW4udHJhbnNpdGlvbk92ZXJyaWRlKTt2YXIgcz1pP2Z1bmN0aW9uKCl7cmV0dXJuIFh0KGUsaSxuKX06ZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCl9LGM9KG51bGw9PT0obz1lLnZhcmlhbnRDaGlsZHJlbil8fHZvaWQgMD09PW8/dm9pZCAwOm8uc2l6ZSk/ZnVuY3Rpb24obyl7dm9pZCAwPT09byYmKG89MCk7dmFyIGk9bC5kZWxheUNoaWxkcmVuLGE9dm9pZCAwPT09aT8wOmkscz1sLnN0YWdnZXJDaGlsZHJlbixjPWwuc3RhZ2dlckRpcmVjdGlvbjtyZXR1cm4gZnVuY3Rpb24oZSx0LG4sbyxpLGEpe3ZvaWQgMD09PW4mJihuPTApLHZvaWQgMD09PW8mJihvPTApLHZvaWQgMD09PWkmJihpPTEpO3ZhciBsPVtdLHM9KGUudmFyaWFudENoaWxkcmVuLnNpemUtMSkqbyxjPTE9PT1pP2Z1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0wKSxlKm99OmZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0wKSxzLWUqb307cmV0dXJuIEFycmF5LmZyb20oZS52YXJpYW50Q2hpbGRyZW4pLnNvcnQoSnQpLmZvckVhY2goKGZ1bmN0aW9uKGUsbyl7bC5wdXNoKEt0KGUsdCxyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sYSkse2RlbGF5Om4rYyhvKX0pKS50aGVuKChmdW5jdGlvbigpe3JldHVybiBlLm5vdGlmeUFuaW1hdGlvbkNvbXBsZXRlKHQpfSkpKX0pKSxQcm9taXNlLmFsbChsKX0oZSx0LGErbyxzLGMsbil9OmZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfSx1PWwud2hlbjtpZih1KXt2YXIgZj1yLl9fcmVhZChcImJlZm9yZUNoaWxkcmVuXCI9PT11P1tzLGNdOltjLHNdLDIpLGQ9ZlswXSxwPWZbMV07cmV0dXJuIGQoKS50aGVuKHApfXJldHVybiBQcm9taXNlLmFsbChbcygpLGMobi5kZWxheSldKX1mdW5jdGlvbiBYdChlLHQsbil7dmFyIG8saT12b2lkIDA9PT1uP3t9Om4sYT1pLmRlbGF5LGw9dm9pZCAwPT09YT8wOmEscz1pLnRyYW5zaXRpb25PdmVycmlkZSxjPWkudHlwZSx1PWUubWFrZVRhcmdldEFuaW1hdGFibGUodCksZj11LnRyYW5zaXRpb24sZD12b2lkIDA9PT1mP2UuZ2V0RGVmYXVsdFRyYW5zaXRpb24oKTpmLHA9dS50cmFuc2l0aW9uRW5kLGg9ci5fX3Jlc3QodSxbXCJ0cmFuc2l0aW9uXCIsXCJ0cmFuc2l0aW9uRW5kXCJdKTtzJiYoZD1zKTt2YXIgZz1bXSx2PWMmJihudWxsPT09KG89ZS5hbmltYXRpb25TdGF0ZSl8fHZvaWQgMD09PW8/dm9pZCAwOm8uZ2V0U3RhdGUoKVtjXSk7Zm9yKHZhciBtIGluIGgpe3ZhciBDPWUuZ2V0VmFsdWUobSkseT1oW21dO2lmKCEoIUN8fHZvaWQgMD09PXl8fHYmJlF0KHYsbSkpKXt2YXIgdz1JdChtLEMseSxyLl9fYXNzaWduKHtkZWxheTpsfSxkKSk7Zy5wdXNoKHcpfX1yZXR1cm4gUHJvbWlzZS5hbGwoZykudGhlbigoZnVuY3Rpb24oKXtwJiZVdChlLHApfSkpfWZ1bmN0aW9uIEp0KGUsdCl7cmV0dXJuIGUuc29ydE5vZGVQb3NpdGlvbih0KX1mdW5jdGlvbiBRdChlLHQpe3ZhciBuPWUucHJvdGVjdGVkS2V5cyxyPWUubmVlZHNBbmltYXRpbmcsbz1uLmhhc093blByb3BlcnR5KHQpJiYhMCE9PXJbdF07cmV0dXJuIHJbdF09ITEsb312YXIgZW49W0JlLkFuaW1hdGUsQmUuSG92ZXIsQmUuVGFwLEJlLkRyYWcsQmUuRm9jdXMsQmUuRXhpdF0sdG49ci5fX3NwcmVhZEFycmF5KFtdLHIuX19yZWFkKGVuKSkucmV2ZXJzZSgpLG5uPWVuLmxlbmd0aDtmdW5jdGlvbiBybihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9ITEpLHtpc0FjdGl2ZTplLHByb3RlY3RlZEtleXM6e30sbmVlZHNBbmltYXRpbmc6e30scHJldlJlc29sdmVkVmFsdWVzOnt9fX12YXIgb249e2FuaW1hdGlvbjpkdCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS52aXN1YWxFbGVtZW50LG49ZS5hbmltYXRlO3QuYW5pbWF0aW9uU3RhdGV8fCh0LmFuaW1hdGlvblN0YXRlPWZ1bmN0aW9uKGUpe3ZhciB0LG49ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBQcm9taXNlLmFsbCh0Lm1hcCgoZnVuY3Rpb24odCl7dmFyIG49dC5hbmltYXRpb24scj10Lm9wdGlvbnM7cmV0dXJuIFl0KGUsbixyKX0pKSl9fShlKSxvPSgodD17fSlbQmUuQW5pbWF0ZV09cm4oITApLHRbQmUuSG92ZXJdPXJuKCksdFtCZS5UYXBdPXJuKCksdFtCZS5EcmFnXT1ybigpLHRbQmUuRm9jdXNdPXJuKCksdFtCZS5FeGl0XT1ybigpLHQpLGk9e30sYT0hMCxsPWZ1bmN0aW9uKHQsbil7dmFyIG89SChlLG4pO2lmKG8pe28udHJhbnNpdGlvbjt2YXIgaT1vLnRyYW5zaXRpb25FbmQsYT1yLl9fcmVzdChvLFtcInRyYW5zaXRpb25cIixcInRyYW5zaXRpb25FbmRcIl0pO3Q9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sdCksYSksaSl9cmV0dXJuIHR9O2Z1bmN0aW9uIHModCxzKXtmb3IodmFyIGMsdT1lLmdldFByb3BzKCksZj1lLmdldFZhcmlhbnRDb250ZXh0KCEwKXx8e30sZD1bXSxwPW5ldyBTZXQsaD17fSxnPTEvMCx2PWZ1bmN0aW9uKG4pe3ZhciBpPXRuW25dLHY9b1tpXSxtPW51bGwhPT0oYz11W2ldKSYmdm9pZCAwIT09Yz9jOmZbaV0sQz1BKG0pLHk9aT09PXM/di5pc0FjdGl2ZTpudWxsOyExPT09eSYmKGc9bik7dmFyIHc9bT09PWZbaV0mJm0hPT11W2ldJiZDO2lmKHcmJmEmJmUubWFudWFsbHlBbmltYXRlT25Nb3VudCYmKHc9ITEpLHYucHJvdGVjdGVkS2V5cz1yLl9fYXNzaWduKHt9LGgpLCF2LmlzQWN0aXZlJiZudWxsPT09eXx8IW0mJiF2LnByZXZQcm9wfHxNZShtKXx8XCJib29sZWFuXCI9PXR5cGVvZiBtKXJldHVyblwiY29udGludWVcIjt2YXIgYj1mdW5jdGlvbihlLHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0P3QhPT1lOiEhSSh0KSYmIWh0KHQsZSl9KHYucHJldlByb3AsbSl8fGk9PT1zJiZ2LmlzQWN0aXZlJiYhdyYmQ3x8bj5nJiZDLHg9QXJyYXkuaXNBcnJheShtKT9tOlttXSxfPXgucmVkdWNlKGwse30pOyExPT09eSYmKF89e30pO3ZhciBPPXYucHJldlJlc29sdmVkVmFsdWVzLEw9dm9pZCAwPT09Tz97fTpPLEU9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LEwpLF8pLFM9ZnVuY3Rpb24oZSl7Yj0hMCxwLmRlbGV0ZShlKSx2Lm5lZWRzQW5pbWF0aW5nW2VdPSEwfTtmb3IodmFyIGogaW4gRSl7dmFyIE09X1tqXSxrPUxbal07aC5oYXNPd25Qcm9wZXJ0eShqKXx8KE0hPT1rP2tlKE0pJiZrZShrKT9odChNLGspP3YucHJvdGVjdGVkS2V5c1tqXT0hMDpTKGopOnZvaWQgMCE9PU0/UyhqKTpwLmFkZChqKTp2b2lkIDAhPT1NJiZwLmhhcyhqKT9TKGopOnYucHJvdGVjdGVkS2V5c1tqXT0hMCl9di5wcmV2UHJvcD1tLHYucHJldlJlc29sdmVkVmFsdWVzPV8sdi5pc0FjdGl2ZSYmKGg9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGgpLF8pKSxhJiZlLmJsb2NrSW5pdGlhbEFuaW1hdGlvbiYmKGI9ITEpLGImJiF3JiZkLnB1c2guYXBwbHkoZCxyLl9fc3ByZWFkQXJyYXkoW10sci5fX3JlYWQoeC5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybnthbmltYXRpb246ZSxvcHRpb25zOnIuX19hc3NpZ24oe3R5cGU6aX0sdCl9fSkpKSkpfSxtPTA7bTxubjttKyspdihtKTtpZihpPXIuX19hc3NpZ24oe30saCkscC5zaXplKXt2YXIgQz17fTtwLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPWUuZ2V0QmFzZVRhcmdldCh0KTt2b2lkIDAhPT1uJiYoQ1t0XT1uKX0pKSxkLnB1c2goe2FuaW1hdGlvbjpDfSl9dmFyIHk9Qm9vbGVhbihkLmxlbmd0aCk7cmV0dXJuIGEmJiExPT09dS5pbml0aWFsJiYhZS5tYW51YWxseUFuaW1hdGVPbk1vdW50JiYoeT0hMSksYT0hMSx5P24oZCk6UHJvbWlzZS5yZXNvbHZlKCl9cmV0dXJue2lzQW5pbWF0ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWlbZV19LGFuaW1hdGVDaGFuZ2VzOnMsc2V0QWN0aXZlOmZ1bmN0aW9uKHQsbixyKXt2YXIgaTtyZXR1cm4gb1t0XS5pc0FjdGl2ZT09PW4/UHJvbWlzZS5yZXNvbHZlKCk6KG51bGw9PT0oaT1lLnZhcmlhbnRDaGlsZHJlbil8fHZvaWQgMD09PWl8fGkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI7cmV0dXJuIG51bGw9PT0ocj1lLmFuaW1hdGlvblN0YXRlKXx8dm9pZCAwPT09cj92b2lkIDA6ci5zZXRBY3RpdmUodCxuKX0pKSxvW3RdLmlzQWN0aXZlPW4scyhyLHQpKX0sc2V0QW5pbWF0ZUZ1bmN0aW9uOmZ1bmN0aW9uKHQpe249dChlKX0sZ2V0U3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gb319fSh0KSksTWUobikmJm8udXNlRWZmZWN0KChmdW5jdGlvbigpe3JldHVybiBuLnN1YnNjcmliZSh0KX0pLFtuXSl9KSksZXhpdDpkdCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jdXN0b20sbj1lLnZpc3VhbEVsZW1lbnQsaT1yLl9fcmVhZChPKCksMiksYT1pWzBdLGw9aVsxXSxzPW8udXNlQ29udGV4dCh4KTtvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXt2YXIgZSxyLG89bnVsbD09PShlPW4uYW5pbWF0aW9uU3RhdGUpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnNldEFjdGl2ZShCZS5FeGl0LCFhLHtjdXN0b206bnVsbCE9PShyPW51bGw9PXM/dm9pZCAwOnMuY3VzdG9tKSYmdm9pZCAwIT09cj9yOnR9KTshYSYmKG51bGw9PW98fG8udGhlbihsKSl9KSxbYV0pfSkpfSxhbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3ZhciBvPXRoaXMsaT0odm9pZCAwPT09bj97fTpuKS50cmFuc2Zvcm1QYWdlUG9pbnQ7aWYodGhpcy5zdGFydEV2ZW50PW51bGwsdGhpcy5sYXN0TW92ZUV2ZW50PW51bGwsdGhpcy5sYXN0TW92ZUV2ZW50SW5mbz1udWxsLHRoaXMuaGFuZGxlcnM9e30sdGhpcy51cGRhdGVQb2ludD1mdW5jdGlvbigpe2lmKG8ubGFzdE1vdmVFdmVudCYmby5sYXN0TW92ZUV2ZW50SW5mbyl7dmFyIGU9Y24oby5sYXN0TW92ZUV2ZW50SW5mbyxvLmhpc3RvcnkpLHQ9bnVsbCE9PW8uc3RhcnRFdmVudCxuPWwuZGlzdGFuY2UoZS5vZmZzZXQse3g6MCx5OjB9KT49MztpZih0fHxuKXt2YXIgaT1lLnBvaW50LGE9cy5nZXRGcmFtZURhdGEoKS50aW1lc3RhbXA7by5oaXN0b3J5LnB1c2goci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGkpLHt0aW1lc3RhbXA6YX0pKTt2YXIgYz1vLmhhbmRsZXJzLHU9Yy5vblN0YXJ0LGY9Yy5vbk1vdmU7dHx8KHUmJnUoby5sYXN0TW92ZUV2ZW50LGUpLG8uc3RhcnRFdmVudD1vLmxhc3RNb3ZlRXZlbnQpLGYmJmYoby5sYXN0TW92ZUV2ZW50LGUpfX19LHRoaXMuaGFuZGxlUG9pbnRlck1vdmU9ZnVuY3Rpb24oZSx0KXtvLmxhc3RNb3ZlRXZlbnQ9ZSxvLmxhc3RNb3ZlRXZlbnRJbmZvPWxuKHQsby50cmFuc2Zvcm1QYWdlUG9pbnQpLEZlKGUpJiYwPT09ZS5idXR0b25zP28uaGFuZGxlUG9pbnRlclVwKGUsdCk6ZC5kZWZhdWx0LnVwZGF0ZShvLnVwZGF0ZVBvaW50LCEwKX0sdGhpcy5oYW5kbGVQb2ludGVyVXA9ZnVuY3Rpb24oZSx0KXtvLmVuZCgpO3ZhciBuPW8uaGFuZGxlcnMscj1uLm9uRW5kLGk9bi5vblNlc3Npb25FbmQsYT1jbihsbih0LG8udHJhbnNmb3JtUGFnZVBvaW50KSxvLmhpc3RvcnkpO28uc3RhcnRFdmVudCYmciYmcihlLGEpLGkmJmkoZSxhKX0sIShVZShlKSYmZS50b3VjaGVzLmxlbmd0aD4xKSl7dGhpcy5oYW5kbGVycz10LHRoaXMudHJhbnNmb3JtUGFnZVBvaW50PWk7dmFyIGE9bG4ocWUoZSksdGhpcy50cmFuc2Zvcm1QYWdlUG9pbnQpLGM9YS5wb2ludCx1PXMuZ2V0RnJhbWVEYXRhKCkudGltZXN0YW1wO3RoaXMuaGlzdG9yeT1bci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGMpLHt0aW1lc3RhbXA6dX0pXTt2YXIgZj10Lm9uU2Vzc2lvblN0YXJ0O2YmJmYoZSxjbihhLHRoaXMuaGlzdG9yeSkpLHRoaXMucmVtb3ZlTGlzdGVuZXJzPWwucGlwZShudCh3aW5kb3csXCJwb2ludGVybW92ZVwiLHRoaXMuaGFuZGxlUG9pbnRlck1vdmUpLG50KHdpbmRvdyxcInBvaW50ZXJ1cFwiLHRoaXMuaGFuZGxlUG9pbnRlclVwKSxudCh3aW5kb3csXCJwb2ludGVyY2FuY2VsXCIsdGhpcy5oYW5kbGVQb2ludGVyVXApKX19cmV0dXJuIGUucHJvdG90eXBlLnVwZGF0ZUhhbmRsZXJzPWZ1bmN0aW9uKGUpe3RoaXMuaGFuZGxlcnM9ZX0sZS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVMaXN0ZW5lcnMmJnRoaXMucmVtb3ZlTGlzdGVuZXJzKCkscy5jYW5jZWxTeW5jLnVwZGF0ZSh0aGlzLnVwZGF0ZVBvaW50KX0sZX0oKTtmdW5jdGlvbiBsbihlLHQpe3JldHVybiB0P3twb2ludDp0KGUucG9pbnQpfTplfWZ1bmN0aW9uIHNuKGUsdCl7cmV0dXJue3g6ZS54LXQueCx5OmUueS10Lnl9fWZ1bmN0aW9uIGNuKGUsdCl7dmFyIG49ZS5wb2ludDtyZXR1cm57cG9pbnQ6bixkZWx0YTpzbihuLGZuKHQpKSxvZmZzZXQ6c24obix1bih0KSksdmVsb2NpdHk6ZG4odCwuMSl9fWZ1bmN0aW9uIHVuKGUpe3JldHVybiBlWzBdfWZ1bmN0aW9uIGZuKGUpe3JldHVybiBlW2UubGVuZ3RoLTFdfWZ1bmN0aW9uIGRuKGUsdCl7aWYoZS5sZW5ndGg8MilyZXR1cm57eDowLHk6MH07Zm9yKHZhciBuPWUubGVuZ3RoLTEscj1udWxsLG89Zm4oZSk7bj49MCYmKHI9ZVtuXSwhKG8udGltZXN0YW1wLXIudGltZXN0YW1wPmd0KHQpKSk7KW4tLTtpZighcilyZXR1cm57eDowLHk6MH07dmFyIGk9KG8udGltZXN0YW1wLXIudGltZXN0YW1wKS8xZTM7aWYoMD09PWkpcmV0dXJue3g6MCx5OjB9O3ZhciBhPXt4OihvLngtci54KS9pLHk6KG8ueS1yLnkpL2l9O3JldHVybiBhLng9PT0xLzAmJihhLng9MCksYS55PT09MS8wJiYoYS55PTApLGF9ZnVuY3Rpb24gcG4oZSl7cmV0dXJuIGV9ZnVuY3Rpb24gaG4oZSl7dmFyIHQ9ZS50b3A7cmV0dXJue3g6e21pbjplLmxlZnQsbWF4OmUucmlnaHR9LHk6e21pbjp0LG1heDplLmJvdHRvbX19fXZhciBnbj17dHJhbnNsYXRlOjAsc2NhbGU6MSxvcmlnaW46MCxvcmlnaW5Qb2ludDowfTtmdW5jdGlvbiB2bigpe3JldHVybnt4OnIuX19hc3NpZ24oe30sZ24pLHk6ci5fX2Fzc2lnbih7fSxnbil9fWZ1bmN0aW9uIG1uKGUpe3JldHVybltlKFwieFwiKSxlKFwieVwiKV19ZnVuY3Rpb24gQ24oZSx0LG4pe3JldHVybiB2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1uJiYobj0uMDEpLGwuZGlzdGFuY2UoZSx0KTxufWZ1bmN0aW9uIHluKGUpe3JldHVybiBlLm1heC1lLm1pbn1mdW5jdGlvbiB3bihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj0uNSksZS5vcmlnaW49cixlLm9yaWdpblBvaW50PWwubWl4KHQubWluLHQubWF4LGUub3JpZ2luKSxlLnNjYWxlPXluKG4pL3luKHQpLENuKGUuc2NhbGUsMSwxZS00KSYmKGUuc2NhbGU9MSksZS50cmFuc2xhdGU9bC5taXgobi5taW4sbi5tYXgsZS5vcmlnaW4pLWUub3JpZ2luUG9pbnQsQ24oZS50cmFuc2xhdGUpJiYoZS50cmFuc2xhdGU9MCl9ZnVuY3Rpb24gYm4oZSx0LG4scil7d24oZS54LHQueCxuLngseG4oci5vcmlnaW5YKSksd24oZS55LHQueSxuLnkseG4oci5vcmlnaW5ZKSl9ZnVuY3Rpb24geG4oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGU/ZTouNX1mdW5jdGlvbiBfbihlLHQsbil7ZS5taW49bi5taW4rdC5taW4sZS5tYXg9ZS5taW4reW4odCl9ZnVuY3Rpb24gT24oZSx0LG4pe3ZhciByPXQubWluLG89dC5tYXg7cmV0dXJuIHZvaWQgMCE9PXImJmU8cj9lPW4/bC5taXgocixlLG4ubWluKTpNYXRoLm1heChlLHIpOnZvaWQgMCE9PW8mJmU+byYmKGU9bj9sLm1peChvLGUsbi5tYXgpOk1hdGgubWluKGUsbykpLGV9ZnVuY3Rpb24gTG4oZSx0LG4pe3JldHVybnttaW46dm9pZCAwIT09dD9lLm1pbit0OnZvaWQgMCxtYXg6dm9pZCAwIT09bj9lLm1heCtuLShlLm1heC1lLm1pbik6dm9pZCAwfX1mdW5jdGlvbiBFbihlLHQpe3ZhciBuLG89dC5taW4tZS5taW4saT10Lm1heC1lLm1heDtyZXR1cm4gdC5tYXgtdC5taW48ZS5tYXgtZS5taW4mJihvPShuPXIuX19yZWFkKFtpLG9dLDIpKVswXSxpPW5bMV0pLHttaW46ZS5taW4rbyxtYXg6ZS5taW4raX19ZnVuY3Rpb24gU24oZSx0LG4pe3JldHVybnttaW46am4oZSx0KSxtYXg6am4oZSxuKX19ZnVuY3Rpb24gam4oZSx0KXt2YXIgbjtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZT9lOm51bGwhPT0obj1lW3RdKSYmdm9pZCAwIT09bj9uOjB9ZnVuY3Rpb24gTW4oZSx0KXtyZXR1cm4gaG4oZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnRvcCxyPWUubGVmdCxvPWUuYm90dG9tLGk9ZS5yaWdodDt2b2lkIDA9PT10JiYodD1wbik7dmFyIGE9dCh7eDpyLHk6bn0pLGw9dCh7eDppLHk6b30pO3JldHVybnt0b3A6YS55LGxlZnQ6YS54LGJvdHRvbTpsLnkscmlnaHQ6bC54fX0oZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0KSl9dmFyIGtuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZGVwdGgtdC5kZXB0aH07ZnVuY3Rpb24gUm4oZSl7cmV0dXJuIGUucHJvamVjdGlvbi5pc0VuYWJsZWR8fGUuc2hvdWxkUmVzZXRUcmFuc2Zvcm0oKX1mdW5jdGlvbiBQbihlLHQpe3ZvaWQgMD09PXQmJih0PVtdKTt2YXIgbj1lLnBhcmVudDtyZXR1cm4gbiYmUG4obix0KSxSbihlKSYmdC5wdXNoKGUpLHR9ZnVuY3Rpb24gSW4oZSl7aWYoIWUuc2hvdWxkUmVzZXRUcmFuc2Zvcm0oKSl7dmFyIHQsbj1lLmdldExheW91dFN0YXRlKCk7ZS5ub3RpZnlCZWZvcmVMYXlvdXRNZWFzdXJlKG4ubGF5b3V0KSxuLmlzSHlkcmF0ZWQ9ITAsbi5sYXlvdXQ9ZS5tZWFzdXJlVmlld3BvcnRCb3goKSxuLmxheW91dENvcnJlY3RlZD0odD1uLmxheW91dCx7eDpyLl9fYXNzaWduKHt9LHQueCkseTpyLl9fYXNzaWduKHt9LHQueSl9KSxlLm5vdGlmeUxheW91dE1lYXN1cmUobi5sYXlvdXQsZS5wcmV2Vmlld3BvcnRCb3h8fG4ubGF5b3V0KSxkLmRlZmF1bHQudXBkYXRlKChmdW5jdGlvbigpe3JldHVybiBlLnJlYmFzZVByb2plY3Rpb25UYXJnZXQoKX0pKX19ZnVuY3Rpb24gQW4oZSl7ZS5zaG91bGRSZXNldFRyYW5zZm9ybSgpfHwoZS5wcmV2Vmlld3BvcnRCb3g9ZS5tZWFzdXJlVmlld3BvcnRCb3goITEpLGUucmViYXNlUHJvamVjdGlvblRhcmdldCghMSxlLnByZXZWaWV3cG9ydEJveCkpfWZ1bmN0aW9uIFRuKGUsdCl7cmV0dXJue21pbjp0Lm1pbi1lLm1pbixtYXg6dC5tYXgtZS5taW59fWZ1bmN0aW9uIEhuKGUsdCl7cmV0dXJue3g6VG4oZS54LHQueCkseTpUbihlLnksdC55KX19ZnVuY3Rpb24gQm4oZSl7dmFyIHQ9ZS5nZXRQcm9wcygpLG49dC5kcmFnLHI9dC5fZHJhZ1g7cmV0dXJuIG4mJiFyfWZ1bmN0aW9uIFZuKGUsdCl7ZS5taW49dC5taW4sZS5tYXg9dC5tYXh9ZnVuY3Rpb24gRG4oZSx0LG4pe3JldHVybiBuK3QqKGUtbil9ZnVuY3Rpb24gWm4oZSx0LG4scixvKXtyZXR1cm4gdm9pZCAwIT09byYmKGU9RG4oZSxvLHIpKSxEbihlLG4scikrdH1mdW5jdGlvbiAkbihlLHQsbixyLG8pe3ZvaWQgMD09PXQmJih0PTApLHZvaWQgMD09PW4mJihuPTEpLGUubWluPVpuKGUubWluLHQsbixyLG8pLGUubWF4PVpuKGUubWF4LHQsbixyLG8pfWZ1bmN0aW9uIE5uKGUsdCl7dmFyIG49dC54LHI9dC55OyRuKGUueCxuLnRyYW5zbGF0ZSxuLnNjYWxlLG4ub3JpZ2luUG9pbnQpLCRuKGUueSxyLnRyYW5zbGF0ZSxyLnNjYWxlLHIub3JpZ2luUG9pbnQpfWZ1bmN0aW9uIEZuKGUsdCxuLG8pe3ZhciBpPXIuX19yZWFkKG8sMyksYT1pWzBdLHM9aVsxXSxjPWlbMl07ZS5taW49dC5taW4sZS5tYXg9dC5tYXg7dmFyIHU9dm9pZCAwIT09bltjXT9uW2NdOi41LGY9bC5taXgodC5taW4sdC5tYXgsdSk7JG4oZSxuW2FdLG5bc10sZixuLnNjYWxlKX12YXIgVW49W1wieFwiLFwic2NhbGVYXCIsXCJvcmlnaW5YXCJdLFduPVtcInlcIixcInNjYWxlWVwiLFwib3JpZ2luWVwiXTtmdW5jdGlvbiB6bihlLHQsbil7Rm4oZS54LHQueCxuLFVuKSxGbihlLnksdC55LG4sV24pfWZ1bmN0aW9uIEduKGUsdCxuLHIsbyl7cmV0dXJuIGU9RG4oZS09dCwxL24sciksdm9pZCAwIT09byYmKGU9RG4oZSwxL28scikpLGV9ZnVuY3Rpb24gcW4oZSx0LG4pe3ZhciBvPXIuX19yZWFkKG4sMyksaT1vWzBdLGE9b1sxXSxzPW9bMl07IWZ1bmN0aW9uKGUsdCxuLHIsbyl7dm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09biYmKG49MSksdm9pZCAwPT09ciYmKHI9LjUpO3ZhciBpPWwubWl4KGUubWluLGUubWF4LHIpLXQ7ZS5taW49R24oZS5taW4sdCxuLGksbyksZS5tYXg9R24oZS5tYXgsdCxuLGksbyl9KGUsdFtpXSx0W2FdLHRbc10sdC5zY2FsZSl9ZnVuY3Rpb24gWW4oZSx0KXtxbihlLngsdCxVbikscW4oZS55LHQsV24pfXZhciBLbj1uZXcgU2V0O2Z1bmN0aW9uIFhuKGUsdCxuKXtlW25dfHwoZVtuXT1bXSksZVtuXS5wdXNoKHQpfWZ1bmN0aW9uIEpuKGUpe3JldHVybiBLbi5hZGQoZSksZnVuY3Rpb24oKXtyZXR1cm4gS24uZGVsZXRlKGUpfX1mdW5jdGlvbiBRbigpe2lmKEtuLnNpemUpe3ZhciBlPTAsdD1bW11dLG49W10scj1mdW5jdGlvbihuKXtyZXR1cm4gWG4odCxuLGUpfSxvPWZ1bmN0aW9uKHQpe1huKG4sdCxlKSxlKyt9O0tuLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QocixvKSxlPTB9KSksS24uY2xlYXIoKTtmb3IodmFyIGk9bi5sZW5ndGgsYT0wO2E8PWk7YSsrKXRbYV0mJnRbYV0uZm9yRWFjaCh0ciksblthXSYmblthXS5mb3JFYWNoKHRyKX19dmFyIGVyLHRyPWZ1bmN0aW9uKGUpe3JldHVybiBlKCl9LG5yPW5ldyBXZWFrTWFwLHJyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgdD1lLnZpc3VhbEVsZW1lbnQ7dGhpcy5pc0RyYWdnaW5nPSExLHRoaXMuY3VycmVudERpcmVjdGlvbj1udWxsLHRoaXMuY29uc3RyYWludHM9ITEsdGhpcy5lbGFzdGljPXt4OnttaW46MCxtYXg6MX0seTp7bWluOjAsbWF4OjF9fSx0aGlzLnByb3BzPXt9LHRoaXMuaGFzTXV0YXRlZENvbnN0cmFpbnRzPSExLHRoaXMuY3Vyc29yUHJvZ3Jlc3M9e3g6LjUseTouNX0sdGhpcy5vcmlnaW5Qb2ludD17fSx0aGlzLm9wZW5HbG9iYWxMb2NrPW51bGwsdGhpcy5wYW5TZXNzaW9uPW51bGwsdGhpcy52aXN1YWxFbGVtZW50PXQsdGhpcy52aXN1YWxFbGVtZW50LmVuYWJsZUxheW91dFByb2plY3Rpb24oKSxuci5zZXQodCx0aGlzKX1yZXR1cm4gZS5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLG89dm9pZCAwPT09dD97fTp0LGk9by5zbmFwVG9DdXJzb3IsYT12b2lkIDAhPT1pJiZpLGM9by5jdXJzb3JQcm9ncmVzcyx1PXRoaXMucHJvcHMudHJhbnNmb3JtUGFnZVBvaW50O3RoaXMucGFuU2Vzc2lvbj1uZXcgYW4oZSx7b25TZXNzaW9uU3RhcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ7bi5zdG9wTW90aW9uKCk7dmFyIG89ZnVuY3Rpb24oZSl7cmV0dXJuIHFlKGUsXCJjbGllbnRcIil9KGUpLnBvaW50O251bGw9PT0odD1uLmNhbmNlbExheW91dCl8fHZvaWQgMD09PXR8fHQuY2FsbChuKSxuLmNhbmNlbExheW91dD1KbigoZnVuY3Rpb24oZSx0KXt2YXIgaT1QbihuLnZpc3VhbEVsZW1lbnQpLHU9ZnVuY3Rpb24oZSl7dmFyIHQ9W10sbj1mdW5jdGlvbihlKXtSbihlKSYmdC5wdXNoKGUpLGUuY2hpbGRyZW4uZm9yRWFjaChuKX07cmV0dXJuIGUuY2hpbGRyZW4uZm9yRWFjaChuKSx0LnNvcnQoa24pfShuLnZpc3VhbEVsZW1lbnQpLGY9ci5fX3NwcmVhZEFycmF5KHIuX19zcHJlYWRBcnJheShbXSxyLl9fcmVhZChpKSksci5fX3JlYWQodSkpLGQ9ITE7bi5pc0xheW91dERyYWcoKSYmbi52aXN1YWxFbGVtZW50LmxvY2tQcm9qZWN0aW9uVGFyZ2V0KCksdCgoZnVuY3Rpb24oKXtmLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlc2V0VHJhbnNmb3JtKCl9KSl9KSksZSgoZnVuY3Rpb24oKXtJbihuLnZpc3VhbEVsZW1lbnQpLHUuZm9yRWFjaChJbil9KSksdCgoZnVuY3Rpb24oKXtmLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlc3RvcmVUcmFuc2Zvcm0oKX0pKSxhJiYoZD1uLnNuYXBUb0N1cnNvcihvKSl9KSksZSgoZnVuY3Rpb24oKXtCb29sZWFuKG4uZ2V0QXhpc01vdGlvblZhbHVlKFwieFwiKSYmIW4uaXNFeHRlcm5hbERyYWcoKSl8fG4udmlzdWFsRWxlbWVudC5yZWJhc2VQcm9qZWN0aW9uVGFyZ2V0KCEwLG4udmlzdWFsRWxlbWVudC5tZWFzdXJlVmlld3BvcnRCb3goITEpKSxuLnZpc3VhbEVsZW1lbnQuc2NoZWR1bGVVcGRhdGVMYXlvdXRQcm9qZWN0aW9uKCk7dmFyIGU9bi52aXN1YWxFbGVtZW50LnByb2plY3Rpb247bW4oKGZ1bmN0aW9uKHQpe2lmKCFkKXt2YXIgcj1lLnRhcmdldFt0XSxpPXIubWluLGE9ci5tYXg7bi5jdXJzb3JQcm9ncmVzc1t0XT1jP2NbdF06bC5wcm9ncmVzcyhpLGEsb1t0XSl9dmFyIHM9bi5nZXRBeGlzTW90aW9uVmFsdWUodCk7cyYmKG4ub3JpZ2luUG9pbnRbdF09cy5nZXQoKSl9KSl9KSksdCgoZnVuY3Rpb24oKXtzLmZsdXNoU3luYy51cGRhdGUoKSxzLmZsdXNoU3luYy5wcmVSZW5kZXIoKSxzLmZsdXNoU3luYy5yZW5kZXIoKSxzLmZsdXNoU3luYy5wb3N0UmVuZGVyKCl9KSksZSgoZnVuY3Rpb24oKXtyZXR1cm4gbi5yZXNvbHZlRHJhZ0NvbnN0cmFpbnRzKCl9KSl9KSl9LG9uU3RhcnQ6ZnVuY3Rpb24oZSx0KXt2YXIgcixvLGksYT1uLnByb3BzLGw9YS5kcmFnLHM9YS5kcmFnUHJvcGFnYXRpb247KCFsfHxzfHwobi5vcGVuR2xvYmFsTG9jayYmbi5vcGVuR2xvYmFsTG9jaygpLG4ub3Blbkdsb2JhbExvY2s9bHQobCksbi5vcGVuR2xvYmFsTG9jaykpJiYoUW4oKSxuLmlzRHJhZ2dpbmc9ITAsbi5jdXJyZW50RGlyZWN0aW9uPW51bGwsbnVsbD09PShvPShyPW4ucHJvcHMpLm9uRHJhZ1N0YXJ0KXx8dm9pZCAwPT09b3x8by5jYWxsKHIsZSx0KSxudWxsPT09KGk9bi52aXN1YWxFbGVtZW50LmFuaW1hdGlvblN0YXRlKXx8dm9pZCAwPT09aXx8aS5zZXRBY3RpdmUoQmUuRHJhZywhMCkpfSxvbk1vdmU6ZnVuY3Rpb24oZSx0KXt2YXIgcixvLGksYSxsPW4ucHJvcHMscz1sLmRyYWdQcm9wYWdhdGlvbixjPWwuZHJhZ0RpcmVjdGlvbkxvY2s7aWYoc3x8bi5vcGVuR2xvYmFsTG9jayl7dmFyIHU9dC5vZmZzZXQ7aWYoYyYmbnVsbD09PW4uY3VycmVudERpcmVjdGlvbilyZXR1cm4gbi5jdXJyZW50RGlyZWN0aW9uPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9MTApO3ZhciBuPW51bGw7cmV0dXJuIE1hdGguYWJzKGUueSk+dD9uPVwieVwiOk1hdGguYWJzKGUueCk+dCYmKG49XCJ4XCIpLG59KHUpLHZvaWQobnVsbCE9PW4uY3VycmVudERpcmVjdGlvbiYmKG51bGw9PT0obz0ocj1uLnByb3BzKS5vbkRpcmVjdGlvbkxvY2spfHx2b2lkIDA9PT1vfHxvLmNhbGwocixuLmN1cnJlbnREaXJlY3Rpb24pKSk7bi51cGRhdGVBeGlzKFwieFwiLHQucG9pbnQsdSksbi51cGRhdGVBeGlzKFwieVwiLHQucG9pbnQsdSksbnVsbD09PShhPShpPW4ucHJvcHMpLm9uRHJhZyl8fHZvaWQgMD09PWF8fGEuY2FsbChpLGUsdCksZXI9ZX19LG9uU2Vzc2lvbkVuZDpmdW5jdGlvbihlLHQpe3JldHVybiBuLnN0b3AoZSx0KX19LHt0cmFuc2Zvcm1QYWdlUG9pbnQ6dX0pfSxlLnByb3RvdHlwZS5yZXNvbHZlRHJhZ0NvbnN0cmFpbnRzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMsbj10LmRyYWdDb25zdHJhaW50cyxyPXQuZHJhZ0VsYXN0aWMsbz10aGlzLnZpc3VhbEVsZW1lbnQuZ2V0TGF5b3V0U3RhdGUoKS5sYXlvdXRDb3JyZWN0ZWQ7dGhpcy5jb25zdHJhaW50cz0hIW4mJihQKG4pP3RoaXMucmVzb2x2ZVJlZkNvbnN0cmFpbnRzKG8sbik6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnRvcCxyPXQubGVmdCxvPXQuYm90dG9tLGk9dC5yaWdodDtyZXR1cm57eDpMbihlLngscixpKSx5OkxuKGUueSxuLG8pfX0obyxuKSksdGhpcy5lbGFzdGljPWZ1bmN0aW9uKGUpe3JldHVybiExPT09ZT9lPTA6ITA9PT1lJiYoZT0uMzUpLHt4OlNuKGUsXCJsZWZ0XCIsXCJyaWdodFwiKSx5OlNuKGUsXCJ0b3BcIixcImJvdHRvbVwiKX19KHIpLHRoaXMuY29uc3RyYWludHMmJiF0aGlzLmhhc011dGF0ZWRDb25zdHJhaW50cyYmbW4oKGZ1bmN0aW9uKHQpe2UuZ2V0QXhpc01vdGlvblZhbHVlKHQpJiYoZS5jb25zdHJhaW50c1t0XT1mdW5jdGlvbihlLHQpe3ZhciBuPXt9O3JldHVybiB2b2lkIDAhPT10Lm1pbiYmKG4ubWluPXQubWluLWUubWluKSx2b2lkIDAhPT10Lm1heCYmKG4ubWF4PXQubWF4LWUubWluKSxufShvW3RdLGUuY29uc3RyYWludHNbdF0pKX0pKX0sZS5wcm90b3R5cGUucmVzb2x2ZVJlZkNvbnN0cmFpbnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5wcm9wcyxyPW4ub25NZWFzdXJlRHJhZ0NvbnN0cmFpbnRzLG89bi50cmFuc2Zvcm1QYWdlUG9pbnQsYT10LmN1cnJlbnQ7aS5pbnZhcmlhbnQobnVsbCE9PWEsXCJJZiBgZHJhZ0NvbnN0cmFpbnRzYCBpcyBzZXQgYXMgYSBSZWFjdCByZWYsIHRoYXQgcmVmIG11c3QgYmUgcGFzc2VkIHRvIGFub3RoZXIgY29tcG9uZW50J3MgYHJlZmAgcHJvcC5cIiksdGhpcy5jb25zdHJhaW50c0JveD1NbihhLG8pO3ZhciBsPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3g6RW4oZS54LHQueCkseTpFbihlLnksdC55KX19KGUsdGhpcy5jb25zdHJhaW50c0JveCk7aWYocil7dmFyIHM9cihmdW5jdGlvbihlKXt2YXIgdD1lLngsbj1lLnk7cmV0dXJue3RvcDpuLm1pbixib3R0b206bi5tYXgsbGVmdDp0Lm1pbixyaWdodDp0Lm1heH19KGwpKTt0aGlzLmhhc011dGF0ZWRDb25zdHJhaW50cz0hIXMscyYmKGw9aG4ocykpfXJldHVybiBsfSxlLnByb3RvdHlwZS5jYW5jZWxEcmFnPWZ1bmN0aW9uKCl7dmFyIGUsdDt0aGlzLnZpc3VhbEVsZW1lbnQudW5sb2NrUHJvamVjdGlvblRhcmdldCgpLG51bGw9PT0oZT10aGlzLmNhbmNlbExheW91dCl8fHZvaWQgMD09PWV8fGUuY2FsbCh0aGlzKSx0aGlzLmlzRHJhZ2dpbmc9ITEsdGhpcy5wYW5TZXNzaW9uJiZ0aGlzLnBhblNlc3Npb24uZW5kKCksdGhpcy5wYW5TZXNzaW9uPW51bGwsIXRoaXMucHJvcHMuZHJhZ1Byb3BhZ2F0aW9uJiZ0aGlzLm9wZW5HbG9iYWxMb2NrJiYodGhpcy5vcGVuR2xvYmFsTG9jaygpLHRoaXMub3Blbkdsb2JhbExvY2s9bnVsbCksbnVsbD09PSh0PXRoaXMudmlzdWFsRWxlbWVudC5hbmltYXRpb25TdGF0ZSl8fHZvaWQgMD09PXR8fHQuc2V0QWN0aXZlKEJlLkRyYWcsITEpfSxlLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixvO251bGw9PT0obj10aGlzLnBhblNlc3Npb24pfHx2b2lkIDA9PT1ufHxuLmVuZCgpLHRoaXMucGFuU2Vzc2lvbj1udWxsO3ZhciBpPXRoaXMuaXNEcmFnZ2luZztpZih0aGlzLmNhbmNlbERyYWcoKSxpKXt2YXIgYT10LnZlbG9jaXR5O3RoaXMuYW5pbWF0ZURyYWdFbmQoYSksbnVsbD09PShvPShyPXRoaXMucHJvcHMpLm9uRHJhZ0VuZCl8fHZvaWQgMD09PW98fG8uY2FsbChyLGUsdCl9fSxlLnByb3RvdHlwZS5zbmFwVG9DdXJzb3I9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztyZXR1cm4gbW4oKGZ1bmN0aW9uKG4pe2lmKG9yKG4sdC5wcm9wcy5kcmFnLHQuY3VycmVudERpcmVjdGlvbikpe3ZhciByPXQuZ2V0QXhpc01vdGlvblZhbHVlKG4pO2lmKCFyKXJldHVybiB0LmN1cnNvclByb2dyZXNzW25dPS41LCEwO3ZhciBvPXQudmlzdWFsRWxlbWVudC5nZXRMYXlvdXRTdGF0ZSgpLmxheW91dCxpPW9bbl0ubWF4LW9bbl0ubWluLGE9b1tuXS5taW4raS8yLGw9ZVtuXS1hO3Qub3JpZ2luUG9pbnRbbl09ZVtuXSxyLnNldChsKX19KSkuaW5jbHVkZXMoITApfSxlLnByb3RvdHlwZS51cGRhdGVBeGlzPWZ1bmN0aW9uKGUsdCxuKXtpZihvcihlLHRoaXMucHJvcHMuZHJhZyx0aGlzLmN1cnJlbnREaXJlY3Rpb24pKXJldHVybiB0aGlzLmdldEF4aXNNb3Rpb25WYWx1ZShlKT90aGlzLnVwZGF0ZUF4aXNNb3Rpb25WYWx1ZShlLG4pOnRoaXMudXBkYXRlVmlzdWFsRWxlbWVudEF4aXMoZSx0KX0sZS5wcm90b3R5cGUudXBkYXRlQXhpc01vdGlvblZhbHVlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5nZXRBeGlzTW90aW9uVmFsdWUoZSk7aWYodCYmbil7dmFyIHI9dGhpcy5vcmlnaW5Qb2ludFtlXSt0W2VdLG89dGhpcy5jb25zdHJhaW50cz9PbihyLHRoaXMuY29uc3RyYWludHNbZV0sdGhpcy5lbGFzdGljW2VdKTpyO24uc2V0KG8pfX0sZS5wcm90b3R5cGUudXBkYXRlVmlzdWFsRWxlbWVudEF4aXM9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPXRoaXMudmlzdWFsRWxlbWVudC5nZXRMYXlvdXRTdGF0ZSgpLmxheW91dFtlXSxvPXIubWF4LXIubWluLGk9dGhpcy5jdXJzb3JQcm9ncmVzc1tlXSxhPWZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIGk9ZS10Km47cmV0dXJuIHI/T24oaSxyLG8pOml9KHRbZV0sbyxpLG51bGw9PT0obj10aGlzLmNvbnN0cmFpbnRzKXx8dm9pZCAwPT09bj92b2lkIDA6bltlXSx0aGlzLmVsYXN0aWNbZV0pO3RoaXMudmlzdWFsRWxlbWVudC5zZXRQcm9qZWN0aW9uVGFyZ2V0QXhpcyhlLGEsYStvKX0sZS5wcm90b3R5cGUuc2V0UHJvcHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kcmFnLG49dm9pZCAwIT09dCYmdCxvPWUuZHJhZ0RpcmVjdGlvbkxvY2ssaT12b2lkIDAhPT1vJiZvLGE9ZS5kcmFnUHJvcGFnYXRpb24sbD12b2lkIDAhPT1hJiZhLHM9ZS5kcmFnQ29uc3RyYWludHMsYz12b2lkIDAhPT1zJiZzLHU9ZS5kcmFnRWxhc3RpYyxmPXZvaWQgMD09PXU/LjM1OnUsZD1lLmRyYWdNb21lbnR1bSxwPXZvaWQgMD09PWR8fGQsaD1yLl9fcmVzdChlLFtcImRyYWdcIixcImRyYWdEaXJlY3Rpb25Mb2NrXCIsXCJkcmFnUHJvcGFnYXRpb25cIixcImRyYWdDb25zdHJhaW50c1wiLFwiZHJhZ0VsYXN0aWNcIixcImRyYWdNb21lbnR1bVwiXSk7dGhpcy5wcm9wcz1yLl9fYXNzaWduKHtkcmFnOm4sZHJhZ0RpcmVjdGlvbkxvY2s6aSxkcmFnUHJvcGFnYXRpb246bCxkcmFnQ29uc3RyYWludHM6YyxkcmFnRWxhc3RpYzpmLGRyYWdNb21lbnR1bTpwfSxoKX0sZS5wcm90b3R5cGUuZ2V0QXhpc01vdGlvblZhbHVlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMsbj10LmxheW91dCxyPXQubGF5b3V0SWQsbz1cIl9kcmFnXCIrZS50b1VwcGVyQ2FzZSgpO3JldHVybiB0aGlzLnByb3BzW29dP3RoaXMucHJvcHNbb106bnx8dm9pZCAwIT09cj92b2lkIDA6dGhpcy52aXN1YWxFbGVtZW50LmdldFZhbHVlKGUsMCl9LGUucHJvdG90eXBlLmlzTGF5b3V0RHJhZz1mdW5jdGlvbigpe3JldHVybiF0aGlzLmdldEF4aXNNb3Rpb25WYWx1ZShcInhcIil9LGUucHJvdG90eXBlLmlzRXh0ZXJuYWxEcmFnPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuX2RyYWdYLG49ZS5fZHJhZ1k7cmV0dXJuIHR8fG59LGUucHJvdG90eXBlLmFuaW1hdGVEcmFnRW5kPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10aGlzLnByb3BzLG89bi5kcmFnLGk9bi5kcmFnTW9tZW50dW0sYT1uLmRyYWdFbGFzdGljLGw9bi5kcmFnVHJhbnNpdGlvbixzPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9ITApO3ZhciBuLHI9ZS5nZXRQcm9qZWN0aW9uUGFyZW50KCk7cmV0dXJuISFyJiYodD9ZbihuPUhuKHIucHJvamVjdGlvbi50YXJnZXQsZS5wcm9qZWN0aW9uLnRhcmdldCksci5nZXRMYXRlc3RWYWx1ZXMoKSk6bj1IbihyLmdldExheW91dFN0YXRlKCkubGF5b3V0LGUuZ2V0TGF5b3V0U3RhdGUoKS5sYXlvdXQpLG1uKChmdW5jdGlvbih0KXtyZXR1cm4gZS5zZXRQcm9qZWN0aW9uVGFyZ2V0QXhpcyh0LG5bdF0ubWluLG5bdF0ubWF4LCEwKX0pKSwhMCl9KHRoaXMudmlzdWFsRWxlbWVudCx0aGlzLmlzTGF5b3V0RHJhZygpJiYhdGhpcy5pc0V4dGVybmFsRHJhZygpKSxjPXRoaXMuY29uc3RyYWludHN8fHt9O2lmKHMmJk9iamVjdC5rZXlzKGMpLmxlbmd0aCYmdGhpcy5pc0xheW91dERyYWcoKSl7dmFyIHU9dGhpcy52aXN1YWxFbGVtZW50LmdldFByb2plY3Rpb25QYXJlbnQoKTtpZih1KXt2YXIgZj1Ibih1LnByb2plY3Rpb24udGFyZ2V0RmluYWwsYyk7bW4oKGZ1bmN0aW9uKGUpe3ZhciB0PWZbZV0sbj10Lm1pbixyPXQubWF4O2NbZV09e21pbjppc05hTihuKT92b2lkIDA6bixtYXg6aXNOYU4ocik/dm9pZCAwOnJ9fSkpfX12YXIgZD1tbigoZnVuY3Rpb24obil7dmFyIHU7aWYob3IobixvLHQuY3VycmVudERpcmVjdGlvbikpe3ZhciBmPW51bGwhPT0odT1udWxsPT1jP3ZvaWQgMDpjW25dKSYmdm9pZCAwIT09dT91Ont9LGQ9YT8yMDA6MWU2LHA9YT80MDoxZTcsaD1yLl9fYXNzaWduKHIuX19hc3NpZ24oe3R5cGU6XCJpbmVydGlhXCIsdmVsb2NpdHk6aT9lW25dOjAsYm91bmNlU3RpZmZuZXNzOmQsYm91bmNlRGFtcGluZzpwLHRpbWVDb25zdGFudDo3NTAscmVzdERlbHRhOjEscmVzdFNwZWVkOjEwfSxsKSxmKTtyZXR1cm4gdC5nZXRBeGlzTW90aW9uVmFsdWUobik/dC5zdGFydEF4aXNWYWx1ZUFuaW1hdGlvbihuLGgpOnQudmlzdWFsRWxlbWVudC5zdGFydExheW91dEFuaW1hdGlvbihuLGgscyl9fSkpO3JldHVybiBQcm9taXNlLmFsbChkKS50aGVuKChmdW5jdGlvbigpe3ZhciBlLG47bnVsbD09PShuPShlPXQucHJvcHMpLm9uRHJhZ1RyYW5zaXRpb25FbmQpfHx2b2lkIDA9PT1ufHxuLmNhbGwoZSl9KSl9LGUucHJvdG90eXBlLnN0b3BNb3Rpb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzO21uKChmdW5jdGlvbih0KXt2YXIgbj1lLmdldEF4aXNNb3Rpb25WYWx1ZSh0KTtuP24uc3RvcCgpOmUudmlzdWFsRWxlbWVudC5zdG9wTGF5b3V0QW5pbWF0aW9uKCl9KSl9LGUucHJvdG90eXBlLnN0YXJ0QXhpc1ZhbHVlQW5pbWF0aW9uPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5nZXRBeGlzTW90aW9uVmFsdWUoZSk7aWYobil7dmFyIHI9bi5nZXQoKTtyZXR1cm4gbi5zZXQociksbi5zZXQociksSXQoZSxuLDAsdCl9fSxlLnByb3RvdHlwZS5zY2FsZVBvaW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMsbj10LmRyYWc7aWYoUCh0LmRyYWdDb25zdHJhaW50cykmJnRoaXMuY29uc3RyYWludHNCb3gpe3RoaXMuc3RvcE1vdGlvbigpO3ZhciByPXt4OjAseTowfTttbigoZnVuY3Rpb24odCl7dmFyIG4sbyxpLGEscyxjO3JbdF09KG49ZS52aXN1YWxFbGVtZW50LnByb2plY3Rpb24udGFyZ2V0W3RdLG89ZS5jb25zdHJhaW50c0JveFt0XSxhPS41LHM9eW4obiksKGM9eW4obykpPnM/YT1sLnByb2dyZXNzKG8ubWluLG8ubWF4LXMsbi5taW4pOnM+YyYmKGE9bC5wcm9ncmVzcyhuLm1pbixuLm1heC1jLG8ubWluKSksaT1hLGwuY2xhbXAoMCwxLGkpKX0pKSx0aGlzLnVwZGF0ZUNvbnN0cmFpbnRzKChmdW5jdGlvbigpe21uKChmdW5jdGlvbih0KXtpZihvcih0LG4sbnVsbCkpe3ZhciBvPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLm1heC1lLm1pbixvPWwubWl4KHQubWluLHQubWF4LXIsbik7cmV0dXJue21pbjpvLG1heDpvK3J9fShlLnZpc3VhbEVsZW1lbnQucHJvamVjdGlvbi50YXJnZXRbdF0sZS5jb25zdHJhaW50c0JveFt0XSxyW3RdKSxpPW8ubWluLGE9by5tYXg7ZS52aXN1YWxFbGVtZW50LnNldFByb2plY3Rpb25UYXJnZXRBeGlzKHQsaSxhKX19KSl9KSksc2V0VGltZW91dChRbiwxKX19LGUucHJvdG90eXBlLnVwZGF0ZUNvbnN0cmFpbnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5jYW5jZWxMYXlvdXQ9Sm4oKGZ1bmN0aW9uKG4scil7dmFyIG89UG4odC52aXN1YWxFbGVtZW50KTtyKChmdW5jdGlvbigpe3JldHVybiBvLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlc2V0VHJhbnNmb3JtKCl9KSl9KSksbigoZnVuY3Rpb24oKXtyZXR1cm4gSW4odC52aXN1YWxFbGVtZW50KX0pKSxyKChmdW5jdGlvbigpe3JldHVybiBvLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlc3RvcmVUcmFuc2Zvcm0oKX0pKX0pKSxuKChmdW5jdGlvbigpe3QucmVzb2x2ZURyYWdDb25zdHJhaW50cygpfSkpLGUmJnIoZSl9KSl9LGUucHJvdG90eXBlLm1vdW50PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj1udChlLmdldEluc3RhbmNlKCksXCJwb2ludGVyZG93blwiLChmdW5jdGlvbihlKXt2YXIgbj10LnByb3BzLHI9bi5kcmFnLG89bi5kcmFnTGlzdGVuZXI7ciYmKHZvaWQgMD09PW98fG8pJiZ0LnN0YXJ0KGUpfSkpLHI9JGUod2luZG93LFwicmVzaXplXCIsKGZ1bmN0aW9uKCl7dC5zY2FsZVBvaW50KCl9KSksbz1lLm9uTGF5b3V0VXBkYXRlKChmdW5jdGlvbigpe3QuaXNEcmFnZ2luZyYmdC5yZXNvbHZlRHJhZ0NvbnN0cmFpbnRzKCl9KSksaT1lLnByZXZEcmFnQ3Vyc29yO3JldHVybiBpJiZ0aGlzLnN0YXJ0KGVyLHtjdXJzb3JQcm9ncmVzczppfSksZnVuY3Rpb24oKXtudWxsPT1ufHxuKCksbnVsbD09cnx8cigpLG51bGw9PW98fG8oKSx0LmNhbmNlbERyYWcoKX19LGV9KCk7ZnVuY3Rpb24gb3IoZSx0LG4pe3JldHVybiEoITAhPT10JiZ0IT09ZXx8bnVsbCE9PW4mJm4hPT1lKX12YXIgaXIsYXIsbHI9e3BhbjpkdCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vblBhbixuPWUub25QYW5TdGFydCxyPWUub25QYW5FbmQsaT1lLm9uUGFuU2Vzc2lvblN0YXJ0LGE9ZS52aXN1YWxFbGVtZW50LGw9dHx8bnx8cnx8aSxzPW8udXNlUmVmKG51bGwpLGM9by51c2VDb250ZXh0KHkpLnRyYW5zZm9ybVBhZ2VQb2ludCx1PXtvblNlc3Npb25TdGFydDppLG9uU3RhcnQ6bixvbk1vdmU6dCxvbkVuZDpmdW5jdGlvbihlLHQpe3MuY3VycmVudD1udWxsLHImJnIoZSx0KX19O28udXNlRWZmZWN0KChmdW5jdGlvbigpe251bGwhPT1zLmN1cnJlbnQmJnMuY3VycmVudC51cGRhdGVIYW5kbGVycyh1KX0pKSxydChhLFwicG9pbnRlcmRvd25cIixsJiZmdW5jdGlvbihlKXtzLmN1cnJlbnQ9bmV3IGFuKGUsdSx7dHJhbnNmb3JtUGFnZVBvaW50OmN9KX0pLGZ0KChmdW5jdGlvbigpe3JldHVybiBzLmN1cnJlbnQmJnMuY3VycmVudC5lbmQoKX0pKX0pKSxkcmFnOmR0KChmdW5jdGlvbihlKXt2YXIgdD1lLmRyYWdDb250cm9scyxuPWUudmlzdWFsRWxlbWVudCxpPW8udXNlQ29udGV4dCh5KS50cmFuc2Zvcm1QYWdlUG9pbnQsYT1fKChmdW5jdGlvbigpe3JldHVybiBuZXcgcnIoe3Zpc3VhbEVsZW1lbnQ6bn0pfSkpO2Euc2V0UHJvcHMoci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGUpLHt0cmFuc2Zvcm1QYWdlUG9pbnQ6aX0pKSxvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdCYmdC5zdWJzY3JpYmUoYSl9KSxbYV0pLG8udXNlRWZmZWN0KChmdW5jdGlvbigpe3JldHVybiBhLm1vdW50KG4pfSksW10pfSkpfTtmdW5jdGlvbiBzcihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZSYmZS5zdGFydHNXaXRoKFwidmFyKC0tXCIpfSFmdW5jdGlvbihlKXtlW2UuRW50ZXJpbmc9MF09XCJFbnRlcmluZ1wiLGVbZS5QcmVzZW50PTFdPVwiUHJlc2VudFwiLGVbZS5FeGl0aW5nPTJdPVwiRXhpdGluZ1wifShpcnx8KGlyPXt9KSksdC5WaXNpYmlsaXR5QWN0aW9uPXZvaWQgMCwoYXI9dC5WaXNpYmlsaXR5QWN0aW9ufHwodC5WaXNpYmlsaXR5QWN0aW9uPXt9KSlbYXIuSGlkZT0wXT1cIkhpZGVcIixhclthci5TaG93PTFdPVwiU2hvd1wiO3ZhciBjcj0vdmFyXFwoKC0tW2EtekEtWjAtOS1fXSspLD8gPyhbYS16QS1aMC05ICgpJSMuLC1dKyk/XFwpLztmdW5jdGlvbiB1cihlLHQsbil7dm9pZCAwPT09biYmKG49MSksaS5pbnZhcmlhbnQobjw9NCwnTWF4IENTUyB2YXJpYWJsZSBmYWxsYmFjayBkZXB0aCBkZXRlY3RlZCBpbiBwcm9wZXJ0eSBcIicrZSsnXCIuIFRoaXMgbWF5IGluZGljYXRlIGEgY2lyY3VsYXIgZmFsbGJhY2sgZGVwZW5kZW5jeS4nKTt2YXIgbz1yLl9fcmVhZChmdW5jdGlvbihlKXt2YXIgdD1jci5leGVjKGUpO2lmKCF0KXJldHVyblssXTt2YXIgbj1yLl9fcmVhZCh0LDMpO3JldHVybltuWzFdLG5bMl1dfShlKSwyKSxhPW9bMF0sbD1vWzFdO2lmKGEpe3ZhciBzPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpLmdldFByb3BlcnR5VmFsdWUoYSk7cmV0dXJuIHM/cy50cmltKCk6c3IobCk/dXIobCx0LG4rMSk6bH19ZnVuY3Rpb24gZnIoZSx0KXtyZXR1cm4gZS8odC5tYXgtdC5taW4pKjEwMH12YXIgZHI9XCJfJGNzc1wiLHByPXtwcm9jZXNzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uLnRhcmdldDtpZihcInN0cmluZ1wiPT10eXBlb2YgZSl7aWYoIWEucHgudGVzdChlKSlyZXR1cm4gZTtlPXBhcnNlRmxvYXQoZSl9cmV0dXJuIGZyKGUsci54KStcIiUgXCIrZnIoZSxyLnkpK1wiJVwifX0saHI9e2JvcmRlclJhZGl1czpyLl9fYXNzaWduKHIuX19hc3NpZ24oe30scHIpLHthcHBseVRvOltcImJvcmRlclRvcExlZnRSYWRpdXNcIixcImJvcmRlclRvcFJpZ2h0UmFkaXVzXCIsXCJib3JkZXJCb3R0b21MZWZ0UmFkaXVzXCIsXCJib3JkZXJCb3R0b21SaWdodFJhZGl1c1wiXX0pLGJvcmRlclRvcExlZnRSYWRpdXM6cHIsYm9yZGVyVG9wUmlnaHRSYWRpdXM6cHIsYm9yZGVyQm90dG9tTGVmdFJhZGl1czpwcixib3JkZXJCb3R0b21SaWdodFJhZGl1czpwcixib3hTaGFkb3c6e3Byb2Nlc3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmRlbHRhLHI9dC50cmVlU2NhbGUsbz1lLGk9ZS5pbmNsdWRlcyhcInZhcihcIikscz1bXTtpJiYoZT1lLnJlcGxhY2UoY3IsKGZ1bmN0aW9uKGUpe3JldHVybiBzLnB1c2goZSksZHJ9KSkpO3ZhciBjPWEuY29tcGxleC5wYXJzZShlKTtpZihjLmxlbmd0aD41KXJldHVybiBvO3ZhciB1PWEuY29tcGxleC5jcmVhdGVUcmFuc2Zvcm1lcihlKSxmPVwibnVtYmVyXCIhPXR5cGVvZiBjWzBdPzE6MCxkPW4ueC5zY2FsZSpyLngscD1uLnkuc2NhbGUqci55O2NbMCtmXS89ZCxjWzErZl0vPXA7dmFyIGg9bC5taXgoZCxwLC41KTtcIm51bWJlclwiPT10eXBlb2YgY1syK2ZdJiYoY1syK2ZdLz1oKSxcIm51bWJlclwiPT10eXBlb2YgY1szK2ZdJiYoY1szK2ZdLz1oKTt2YXIgZz11KGMpO2lmKGkpe3ZhciB2PTA7Zz1nLnJlcGxhY2UoZHIsKGZ1bmN0aW9uKCl7dmFyIGU9c1t2XTtyZXR1cm4gdisrLGV9KSl9cmV0dXJuIGd9fX0sZ3I9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3ZhciBuPW51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gbi5mcmFtZVRhcmdldD17eDp7bWluOjAsbWF4OjF9LHk6e21pbjowLG1heDoxfX0sbi5jdXJyZW50QW5pbWF0aW9uVGFyZ2V0PXt4OnttaW46MCxtYXg6MX0seTp7bWluOjAsbWF4OjF9fSxuLmlzQW5pbWF0aW5nPXt4OiExLHk6ITF9LG4uc3RvcEF4aXNBbmltYXRpb249e3g6dm9pZCAwLHk6dm9pZCAwfSxuLmlzQW5pbWF0aW5nVHJlZT0hMSxuLmFuaW1hdGU9ZnVuY3Rpb24oZSxvLGkpe3ZvaWQgMD09PWkmJihpPXt9KTt2YXIgYT1pLm9yaWdpbkJveCxsPWkudGFyZ2V0Qm94LHM9aS52aXNpYmlsaXR5QWN0aW9uLGM9aS5zaG91bGRTdGFja0FuaW1hdGUsdT1pLm9uQ29tcGxldGUsZj1pLnByZXZQYXJlbnQsZD1yLl9fcmVzdChpLFtcIm9yaWdpbkJveFwiLFwidGFyZ2V0Qm94XCIsXCJ2aXNpYmlsaXR5QWN0aW9uXCIsXCJzaG91bGRTdGFja0FuaW1hdGVcIixcIm9uQ29tcGxldGVcIixcInByZXZQYXJlbnRcIl0pLHA9bi5wcm9wcyxoPXAudmlzdWFsRWxlbWVudCxnPXAubGF5b3V0O2lmKCExPT09YylyZXR1cm4gbi5pc0FuaW1hdGluZ1RyZWU9ITEsbi5zYWZlVG9SZW1vdmUoKTtpZighbi5pc0FuaW1hdGluZ1RyZWV8fCEwPT09Yyl7YyYmKG4uaXNBbmltYXRpbmdUcmVlPSEwKSxvPWF8fG8sZT1sfHxlO3ZhciB2LG0sQyx5PSExLHc9aC5nZXRQcm9qZWN0aW9uUGFyZW50KCk7aWYodyl7dmFyIGI9dy5wcmV2Vmlld3BvcnRCb3gseD13LmdldExheW91dFN0YXRlKCkubGF5b3V0O2YmJihsJiYoeD1mLmdldExheW91dFN0YXRlKCkubGF5b3V0KSxhJiYobT13LCh2PWYpLmdldExheW91dElkKCk9PT0oQz1tLmdldExheW91dElkKCkpJiYodm9pZCAwIT09Q3x8dj09PW0pKSYmZi5wcmV2Vmlld3BvcnRCb3gmJihiPWYucHJldlZpZXdwb3J0Qm94KSksYiYmZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlfHwhZSYmISh0fHxuKX0oZixhLGwpJiYoeT0hMCxvPUhuKGIsbyksZT1Ibih4LGUpKX12YXIgXyxPLEw9KE89ZSwhKG1yKF89byl8fG1yKE8pfHxDcihfLngsTy54KSYmQ3IoXy55LE8ueSkpKSxFPW1uKChmdW5jdGlvbihpKXt2YXIgYSxsO2lmKFwicG9zaXRpb25cIj09PWcpe3ZhciBjPWVbaV0ubWF4LWVbaV0ubWluO29baV0ubWF4PW9baV0ubWluK2N9aWYoIWgucHJvamVjdGlvbi5pc1RhcmdldExvY2tlZClyZXR1cm4gdm9pZCAwPT09cz9MP24uYW5pbWF0ZUF4aXMoaSxlW2ldLG9baV0sci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGQpLHtpc1JlbGF0aXZlOnl9KSk6KG51bGw9PT0obD0oYT1uLnN0b3BBeGlzQW5pbWF0aW9uKVtpXSl8fHZvaWQgMD09PWx8fGwuY2FsbChhKSxoLnNldFByb2plY3Rpb25UYXJnZXRBeGlzKGksZVtpXS5taW4sZVtpXS5tYXgseSkpOnZvaWQgaC5zZXRWaXNpYmlsaXR5KHM9PT10LlZpc2liaWxpdHlBY3Rpb24uU2hvdyl9KSk7cmV0dXJuIGguc3luY1JlbmRlcigpLFByb21pc2UuYWxsKEUpLnRoZW4oKGZ1bmN0aW9uKCl7bi5pc0FuaW1hdGluZ1RyZWU9ITEsdSYmdSgpLGgubm90aWZ5TGF5b3V0QW5pbWF0aW9uQ29tcGxldGUoKX0pKX19LG59cmV0dXJuIHIuX19leHRlbmRzKG4sZSksbi5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcy52aXN1YWxFbGVtZW50O3QuYW5pbWF0ZU1vdGlvblZhbHVlPUl0LHQuZW5hYmxlTGF5b3V0UHJvamVjdGlvbigpLHRoaXMudW5zdWJMYXlvdXRSZWFkeT10Lm9uTGF5b3V0VXBkYXRlKHRoaXMuYW5pbWF0ZSksdC5sYXlvdXRTYWZlVG9SZW1vdmU9ZnVuY3Rpb24oKXtyZXR1cm4gZS5zYWZlVG9SZW1vdmUoKX0sVyhocil9LG4ucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLnVuc3ViTGF5b3V0UmVhZHkoKSxtbigoZnVuY3Rpb24odCl7dmFyIG4scjtyZXR1cm4gbnVsbD09PShyPShuPWUuc3RvcEF4aXNBbmltYXRpb24pW3RdKXx8dm9pZCAwPT09cj92b2lkIDA6ci5jYWxsKG4pfSkpfSxuLnByb3RvdHlwZS5hbmltYXRlQXhpcz1mdW5jdGlvbihlLHQsbixyKXt2YXIgbyxpLGE9dGhpcyxzPXZvaWQgMD09PXI/e306cixjPXMudHJhbnNpdGlvbix1PXMuaXNSZWxhdGl2ZTtpZighdGhpcy5pc0FuaW1hdGluZ1tlXXx8IUNyKHQsdGhpcy5jdXJyZW50QW5pbWF0aW9uVGFyZ2V0W2VdKSl7bnVsbD09PShpPShvPXRoaXMuc3RvcEF4aXNBbmltYXRpb24pW2VdKXx8dm9pZCAwPT09aXx8aS5jYWxsKG8pLHRoaXMuaXNBbmltYXRpbmdbZV09ITA7dmFyIGY9dGhpcy5wcm9wcy52aXN1YWxFbGVtZW50LGQ9dGhpcy5mcmFtZVRhcmdldFtlXSxwPWYuZ2V0UHJvamVjdGlvbkFuaW1hdGlvblByb2dyZXNzKClbZV07cC5jbGVhckxpc3RlbmVycygpLHAuc2V0KDApLHAuc2V0KDApO3ZhciBoPWZ1bmN0aW9uKCl7dmFyIHI9cC5nZXQoKS8xZTM7IWZ1bmN0aW9uKGUsdCxuLHIpe2UubWluPWwubWl4KHQubWluLG4ubWluLHIpLGUubWF4PWwubWl4KHQubWF4LG4ubWF4LHIpfShkLG4sdCxyKSxmLnNldFByb2plY3Rpb25UYXJnZXRBeGlzKGUsZC5taW4sZC5tYXgsdSl9O2goKTt2YXIgZz1wLm9uQ2hhbmdlKGgpO3RoaXMuc3RvcEF4aXNBbmltYXRpb25bZV09ZnVuY3Rpb24oKXthLmlzQW5pbWF0aW5nW2VdPSExLHAuc3RvcCgpLGcoKX0sdGhpcy5jdXJyZW50QW5pbWF0aW9uVGFyZ2V0W2VdPXQ7dmFyIHY9Y3x8Zi5nZXREZWZhdWx0VHJhbnNpdGlvbigpfHx5cjtyZXR1cm4gSXQoXCJ4XCI9PT1lP1wibGF5b3V0WFwiOlwibGF5b3V0WVwiLHAsMWUzLHYmJlB0KHYsXCJsYXlvdXRcIikpLnRoZW4odGhpcy5zdG9wQXhpc0FuaW1hdGlvbltlXSl9fSxuLnByb3RvdHlwZS5zYWZlVG9SZW1vdmU9ZnVuY3Rpb24oKXt2YXIgZSx0O251bGw9PT0odD0oZT10aGlzLnByb3BzKS5zYWZlVG9SZW1vdmUpfHx2b2lkIDA9PT10fHx0LmNhbGwoZSl9LG4ucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiBudWxsfSxufSh1LkNvbXBvbmVudCksdnI9e21pbjowLG1heDowfTtmdW5jdGlvbiBtcihlKXtyZXR1cm4gQ3IoZS54LHZyKSYmQ3IoZS55LHZyKX1mdW5jdGlvbiBDcihlLHQpe3JldHVybiBlLm1pbj09PXQubWluJiZlLm1heD09PXQubWF4fXZhciB5cj17ZHVyYXRpb246LjQ1LGVhc2U6Wy40LDAsLjEsMV19LHdyPXtsYXlvdXRSZWFkeTpmdW5jdGlvbihlKXtyZXR1cm4gZS5ub3RpZnlMYXlvdXRSZWFkeSgpfX07ZnVuY3Rpb24gYnIoKXt2YXIgZT1uZXcgU2V0O3JldHVybnthZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIGUuYWRkKHQpfSxmbHVzaDpmdW5jdGlvbih0KXt2YXIgbj12b2lkIDA9PT10P3dyOnQsbz1uLmxheW91dFJlYWR5LGk9bi5wYXJlbnQ7Sm4oKGZ1bmN0aW9uKHQsbil7dmFyIGE9QXJyYXkuZnJvbShlKS5zb3J0KGtuKSxsPWk/UG4oaSk6W107bigoZnVuY3Rpb24oKXtyLl9fc3ByZWFkQXJyYXkoci5fX3NwcmVhZEFycmF5KFtdLHIuX19yZWFkKGwpKSxyLl9fcmVhZChhKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVzZXRUcmFuc2Zvcm0oKX0pKX0pKSx0KChmdW5jdGlvbigpe2EuZm9yRWFjaChJbil9KSksbigoZnVuY3Rpb24oKXtsLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlc3RvcmVUcmFuc2Zvcm0oKX0pKSxhLmZvckVhY2gobyl9KSksdCgoZnVuY3Rpb24oKXthLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuaXNQcmVzZW50JiYoZS5wcmVzZW5jZT1pci5QcmVzZW50KX0pKX0pKSxuKChmdW5jdGlvbigpe3MuZmx1c2hTeW5jLnByZVJlbmRlcigpLHMuZmx1c2hTeW5jLnJlbmRlcigpfSkpLHQoKGZ1bmN0aW9uKCl7ZC5kZWZhdWx0LnBvc3RSZW5kZXIoKGZ1bmN0aW9uKCl7cmV0dXJuIGEuZm9yRWFjaCh4cil9KSksZS5jbGVhcigpfSkpfSkpLFFuKCl9fX1mdW5jdGlvbiB4cihlKXtlLnByZXZWaWV3cG9ydEJveD1lLnByb2plY3Rpb24udGFyZ2V0fXZhciBfcj1vLmNyZWF0ZUNvbnRleHQoYnIoKSksT3I9by5jcmVhdGVDb250ZXh0KGJyKCkpO2Z1bmN0aW9uIExyKGUpe3JldHVybiEhZS5mb3JjZVVwZGF0ZX12YXIgRXI9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBudWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIHIuX19leHRlbmRzKHQsZSksdC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5zeW5jTGF5b3V0LG49ZS5mcmFtZXJTeW5jTGF5b3V0LHI9ZS52aXN1YWxFbGVtZW50O0xyKHQpJiZ0LnJlZ2lzdGVyKHIpLExyKG4pJiZuLnJlZ2lzdGVyKHIpLHIub25Vbm1vdW50KChmdW5jdGlvbigpe0xyKHQpJiZ0LnJlbW92ZShyKSxMcihuKSYmbi5yZW1vdmUocil9KSl9LHQucHJvdG90eXBlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuc3luY0xheW91dCxuPWUudmlzdWFsRWxlbWVudDtyZXR1cm4gTHIodCk/dC5zeW5jVXBkYXRlKCk6KEFuKG4pLHQuYWRkKG4pKSxudWxsfSx0LnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLnN5bmNMYXlvdXQ7THIoZSl8fGUuZmx1c2goKX0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHR9KGYuZGVmYXVsdC5Db21wb25lbnQpLFNyPXttZWFzdXJlTGF5b3V0OmZ1bmN0aW9uKGUpe3ZhciB0PW8udXNlQ29udGV4dChfciksbj1vLnVzZUNvbnRleHQoT3IpO3JldHVybiBmLmRlZmF1bHQuY3JlYXRlRWxlbWVudChFcixyLl9fYXNzaWduKHt9LGUse3N5bmNMYXlvdXQ6dCxmcmFtZXJTeW5jTGF5b3V0Om59KSl9LGxheW91dEFuaW1hdGlvbjpmdW5jdGlvbihlKXt2YXIgdD1yLl9fcmVhZChPKCksMilbMV07cmV0dXJuIHUuY3JlYXRlRWxlbWVudChncixyLl9fYXNzaWduKHt9LGUse3NhZmVUb1JlbW92ZTp0fSkpfX07ZnVuY3Rpb24ganIoKXtyZXR1cm57aXNIeWRyYXRlZDohMSxsYXlvdXQ6e3g6e21pbjowLG1heDoxfSx5OnttaW46MCxtYXg6MX19LGxheW91dENvcnJlY3RlZDp7eDp7bWluOjAsbWF4OjF9LHk6e21pbjowLG1heDoxfX0sdHJlZVNjYWxlOnt4OjEseToxfSxkZWx0YTp2bigpLGRlbHRhRmluYWw6dm4oKSxkZWx0YVRyYW5zZm9ybTpcIlwifX12YXIgTXI9anIoKTtmdW5jdGlvbiBrcihlLHQsbil7dmFyIHI9ZS54LG89ZS55LGk9XCJ0cmFuc2xhdGUzZChcIityLnRyYW5zbGF0ZS90LngrXCJweCwgXCIrby50cmFuc2xhdGUvdC55K1wicHgsIDApIFwiO2lmKG4pe3ZhciBhPW4ucm90YXRlLGw9bi5yb3RhdGVYLHM9bi5yb3RhdGVZO2EmJihpKz1cInJvdGF0ZShcIithK1wiKSBcIiksbCYmKGkrPVwicm90YXRlWChcIitsK1wiKSBcIikscyYmKGkrPVwicm90YXRlWShcIitzK1wiKSBcIil9cmV0dXJuIGkrPVwic2NhbGUoXCIrci5zY2FsZStcIiwgXCIrby5zY2FsZStcIilcIixufHxpIT09UHI/aTpcIlwifWZ1bmN0aW9uIFJyKGUpe3ZhciB0PWUuZGVsdGFGaW5hbDtyZXR1cm4gMTAwKnQueC5vcmlnaW4rXCIlIFwiKzEwMCp0Lnkub3JpZ2luK1wiJSAwXCJ9dmFyIFByPWtyKE1yLmRlbHRhLE1yLnRyZWVTY2FsZSx7eDoxLHk6MX0pLElyPVtcIkxheW91dE1lYXN1cmVcIixcIkJlZm9yZUxheW91dE1lYXN1cmVcIixcIkxheW91dFVwZGF0ZVwiLFwiVmlld3BvcnRCb3hVcGRhdGVcIixcIlVwZGF0ZVwiLFwiUmVuZGVyXCIsXCJBbmltYXRpb25Db21wbGV0ZVwiLFwiTGF5b3V0QW5pbWF0aW9uQ29tcGxldGVcIixcIkFuaW1hdGlvblN0YXJ0XCIsXCJTZXRBeGlzVGFyZ2V0XCIsXCJVbm1vdW50XCJdLEFyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuY2hpbGRyZW49W10sdGhpcy5pc0RpcnR5PSExfXJldHVybiBlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7QXQodGhpcy5jaGlsZHJlbixlKSx0aGlzLmlzRGlydHk9ITB9LGUucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihlKXtUdCh0aGlzLmNoaWxkcmVuLGUpLHRoaXMuaXNEaXJ0eT0hMH0sZS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihlKXt0aGlzLmlzRGlydHkmJnRoaXMuY2hpbGRyZW4uc29ydChrbiksdGhpcy5pc0RpcnR5PSExLHRoaXMuY2hpbGRyZW4uZm9yRWFjaChlKX0sZX0oKSxUcj1mdW5jdGlvbihlKXt2YXIgdD1lLnRyZWVUeXBlLG49dm9pZCAwPT09dD9cIlwiOnQsbz1lLmJ1aWxkLGk9ZS5nZXRCYXNlVGFyZ2V0LGE9ZS5tYWtlVGFyZ2V0QW5pbWF0YWJsZSxjPWUubWVhc3VyZVZpZXdwb3J0Qm94LHU9ZS5yZW5kZXIsZj1lLnJlYWRWYWx1ZUZyb21JbnN0YW5jZSxwPWUucmVzZXRUcmFuc2Zvcm0saD1lLnJlc3RvcmVUcmFuc2Zvcm0sZz1lLnJlbW92ZVZhbHVlRnJvbVJlbmRlclN0YXRlLHY9ZS5zb3J0Tm9kZVBvc2l0aW9uLG09ZS5zY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHM7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7dmFyIEM9ZS5wYXJlbnQseT1lLnByb3BzLHc9ZS5wcmVzZW5jZUlkLGI9ZS5ibG9ja0luaXRpYWxBbmltYXRpb24seD1lLnZpc3VhbFN0YXRlO3ZvaWQgMD09PXQmJih0PXt9KTt2YXIgXyxPLEwsRSxTLGosTT14LmxhdGVzdFZhbHVlcyxrPXgucmVuZGVyU3RhdGUsUj1mdW5jdGlvbigpe3ZhciBlPUlyLm1hcCgoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEh0fSkpLHQ9e30sbj17Y2xlYXJBbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGVhcigpfSkpfSx1cGRhdGVQcm9wTGlzdGVuZXJzOmZ1bmN0aW9uKGUpe3JldHVybiBJci5mb3JFYWNoKChmdW5jdGlvbihyKXt2YXIgbztudWxsPT09KG89dFtyXSl8fHZvaWQgMD09PW98fG8uY2FsbCh0KTt2YXIgaT1cIm9uXCIrcixhPWVbaV07YSYmKHRbcl09bltpXShhKSl9KSl9fTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe25bXCJvblwiK0lyW3RdXT1mdW5jdGlvbih0KXtyZXR1cm4gZS5hZGQodCl9LG5bXCJub3RpZnlcIitJclt0XV09ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJuIGUubm90aWZ5LmFwcGx5KGUsci5fX3NwcmVhZEFycmF5KFtdLHIuX19yZWFkKHQpKSl9fSkpLG59KCksUD17aXNFbmFibGVkOiExLGlzSHlkcmF0ZWQ6ITEsaXNUYXJnZXRMb2NrZWQ6ITEsdGFyZ2V0Ont4OnttaW46MCxtYXg6MX0seTp7bWluOjAsbWF4OjF9fSx0YXJnZXRGaW5hbDp7eDp7bWluOjAsbWF4OjF9LHk6e21pbjowLG1heDoxfX19LEk9UCxUPU0sSD1qcigpLEQ9ITEsWj1uZXcgTWFwLCQ9bmV3IE1hcCxOPXt9LEY9ci5fX2Fzc2lnbih7fSxNKTtmdW5jdGlvbiBVKCl7XyYmKFEuaXNQcm9qZWN0aW9uUmVhZHkoKSYmKHpuKEkudGFyZ2V0RmluYWwsSS50YXJnZXQsVCksYm4oSC5kZWx0YUZpbmFsLEgubGF5b3V0Q29ycmVjdGVkLEkudGFyZ2V0RmluYWwsTSkpLFcoKSx1KF8saykpfWZ1bmN0aW9uIFcoKXt2YXIgZT1NO2lmKEUmJkUuaXNBY3RpdmUoKSl7dmFyIG49RS5nZXRDcm9zc2ZhZGVTdGF0ZShRKTtuJiYoZT1uKX1vKFEsayxlLEksSCx0LHkpfWZ1bmN0aW9uIHooKXtSLm5vdGlmeVVwZGF0ZShNKX1mdW5jdGlvbiBHKCl7US5sYXlvdXRUcmVlLmZvckVhY2goQnIpfXZhciBxPW0oeSk7Zm9yKHZhciBZIGluIHEpe3ZhciBLPXFbWV07dm9pZCAwIT09TVtZXSYmZWUoSykmJksuc2V0KE1bWV0sITEpfXZhciBYPUIoeSksSj1WKHkpLFE9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt0cmVlVHlwZTpuLGN1cnJlbnQ6bnVsbCxkZXB0aDpDP0MuZGVwdGgrMTowLHBhcmVudDpDLGNoaWxkcmVuOm5ldyBTZXQscGF0aDpDP3IuX19zcHJlYWRBcnJheShyLl9fc3ByZWFkQXJyYXkoW10sci5fX3JlYWQoQy5wYXRoKSksW0NdKTpbXSxsYXlvdXRUcmVlOkM/Qy5sYXlvdXRUcmVlOm5ldyBBcixwcmVzZW5jZUlkOncscHJvamVjdGlvbjpQLHZhcmlhbnRDaGlsZHJlbjpKP25ldyBTZXQ6dm9pZCAwLGlzVmlzaWJsZTp2b2lkIDAsbWFudWFsbHlBbmltYXRlT25Nb3VudDpCb29sZWFuKG51bGw9PUM/dm9pZCAwOkMuaXNNb3VudGVkKCkpLGJsb2NrSW5pdGlhbEFuaW1hdGlvbjpiLGlzTW91bnRlZDpmdW5jdGlvbigpe3JldHVybiBCb29sZWFuKF8pfSxtb3VudDpmdW5jdGlvbihlKXtfPVEuY3VycmVudD1lLFEucG9pbnRUbyhRKSxKJiZDJiYhWCYmKGo9bnVsbD09Qz92b2lkIDA6Qy5hZGRWYXJpYW50Q2hpbGQoUSkpLG51bGw9PUN8fEMuY2hpbGRyZW4uYWRkKFEpfSx1bm1vdW50OmZ1bmN0aW9uKCl7cy5jYW5jZWxTeW5jLnVwZGF0ZSh6KSxzLmNhbmNlbFN5bmMucmVuZGVyKFUpLHMuY2FuY2VsU3luYy5wcmVSZW5kZXIoUS51cGRhdGVMYXlvdXRQcm9qZWN0aW9uKSwkLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlKCl9KSksUS5zdG9wTGF5b3V0QW5pbWF0aW9uKCksUS5sYXlvdXRUcmVlLnJlbW92ZShRKSxudWxsPT1qfHxqKCksbnVsbD09Q3x8Qy5jaGlsZHJlbi5kZWxldGUoUSksbnVsbD09THx8TCgpLFIuY2xlYXJBbGxMaXN0ZW5lcnMoKX0sYWRkVmFyaWFudENoaWxkOmZ1bmN0aW9uKGUpe3ZhciB0LG49US5nZXRDbG9zZXN0VmFyaWFudE5vZGUoKTtpZihuKXJldHVybiBudWxsPT09KHQ9bi52YXJpYW50Q2hpbGRyZW4pfHx2b2lkIDA9PT10fHx0LmFkZChlKSxmdW5jdGlvbigpe3JldHVybiBuLnZhcmlhbnRDaGlsZHJlbi5kZWxldGUoZSl9fSxzb3J0Tm9kZVBvc2l0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiB2JiZuPT09ZS50cmVlVHlwZT92KFEuZ2V0SW5zdGFuY2UoKSxlLmdldEluc3RhbmNlKCkpOjB9LGdldENsb3Nlc3RWYXJpYW50Tm9kZTpmdW5jdGlvbigpe3JldHVybiBKP1E6bnVsbD09Qz92b2lkIDA6Qy5nZXRDbG9zZXN0VmFyaWFudE5vZGUoKX0sc2NoZWR1bGVVcGRhdGVMYXlvdXRQcm9qZWN0aW9uOkM/Qy5zY2hlZHVsZVVwZGF0ZUxheW91dFByb2plY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gZC5kZWZhdWx0LnByZVJlbmRlcihRLnVwZGF0ZVRyZWVMYXlvdXRQcm9qZWN0aW9uLCExLCEwKX0sZ2V0TGF5b3V0SWQ6ZnVuY3Rpb24oKXtyZXR1cm4geS5sYXlvdXRJZH0sZ2V0SW5zdGFuY2U6ZnVuY3Rpb24oKXtyZXR1cm4gX30sZ2V0U3RhdGljVmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIE1bZV19LHNldFN0YXRpY1ZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1bZV09dH0sZ2V0TGF0ZXN0VmFsdWVzOmZ1bmN0aW9uKCl7cmV0dXJuIE19LHNldFZpc2liaWxpdHk6ZnVuY3Rpb24oZSl7US5pc1Zpc2libGUhPT1lJiYoUS5pc1Zpc2libGU9ZSxRLnNjaGVkdWxlUmVuZGVyKCkpfSxtYWtlVGFyZ2V0QW5pbWF0YWJsZTpmdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0hMCksYShRLGUseSx0KX0sYWRkVmFsdWU6ZnVuY3Rpb24oZSx0KXtRLmhhc1ZhbHVlKGUpJiZRLnJlbW92ZVZhbHVlKGUpLFouc2V0KGUsdCksTVtlXT10LmdldCgpLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5vbkNoYW5nZSgoZnVuY3Rpb24odCl7TVtlXT10LHkub25VcGRhdGUmJmQuZGVmYXVsdC51cGRhdGUoeiwhMSwhMCl9KSkscj10Lm9uUmVuZGVyUmVxdWVzdChRLnNjaGVkdWxlUmVuZGVyKTskLnNldChlLChmdW5jdGlvbigpe24oKSxyKCl9KSl9KGUsdCl9LHJlbW92ZVZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0O1ouZGVsZXRlKGUpLG51bGw9PT0odD0kLmdldChlKSl8fHZvaWQgMD09PXR8fHQoKSwkLmRlbGV0ZShlKSxkZWxldGUgTVtlXSxnKGUsayl9LGhhc1ZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBaLmhhcyhlKX0sZ2V0VmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj1aLmdldChlKTtyZXR1cm4gdm9pZCAwPT09biYmdm9pZCAwIT09dCYmKG49VnQodCksUS5hZGRWYWx1ZShlLG4pKSxufSxmb3JFYWNoVmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIFouZm9yRWFjaChlKX0scmVhZFZhbHVlOmZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBudWxsIT09KG49TVtlXSkmJnZvaWQgMCE9PW4/bjpmKF8sZSx0KX0sc2V0QmFzZVRhcmdldDpmdW5jdGlvbihlLHQpe0ZbZV09dH0sZ2V0QmFzZVRhcmdldDpmdW5jdGlvbihlKXtpZihpKXt2YXIgdD1pKHksZSk7aWYodm9pZCAwIT09dCYmIWVlKHQpKXJldHVybiB0fXJldHVybiBGW2VdfX0sUikse2J1aWxkOmZ1bmN0aW9uKCl7cmV0dXJuIFcoKSxrfSxzY2hlZHVsZVJlbmRlcjpmdW5jdGlvbigpe2QuZGVmYXVsdC5yZW5kZXIoVSwhMSwhMCl9LHN5bmNSZW5kZXI6VSxzZXRQcm9wczpmdW5jdGlvbihlKXt5PWUsUi51cGRhdGVQcm9wTGlzdGVuZXJzKGUpLE49ZnVuY3Rpb24oZSx0LG4pe3ZhciByO2Zvcih2YXIgbyBpbiB0KXt2YXIgaT10W29dLGE9bltvXTtpZihlZShpKSllLmFkZFZhbHVlKG8saSk7ZWxzZSBpZihlZShhKSllLmFkZFZhbHVlKG8sVnQoaSkpO2Vsc2UgaWYoYSE9PWkpaWYoZS5oYXNWYWx1ZShvKSl7dmFyIGw9ZS5nZXRWYWx1ZShvKTshbC5oYXNBbmltYXRlZCYmbC5zZXQoaSl9ZWxzZSBlLmFkZFZhbHVlKG8sVnQobnVsbCE9PShyPWUuZ2V0U3RhdGljVmFsdWUobykpJiZ2b2lkIDAhPT1yP3I6aSkpfWZvcih2YXIgbyBpbiBuKXZvaWQgMD09PXRbb10mJmUucmVtb3ZlVmFsdWUobyk7cmV0dXJuIHR9KFEsbSh5KSxOKX0sZ2V0UHJvcHM6ZnVuY3Rpb24oKXtyZXR1cm4geX0sZ2V0VmFyaWFudDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gbnVsbD09PSh0PXkudmFyaWFudHMpfHx2b2lkIDA9PT10P3ZvaWQgMDp0W2VdfSxnZXREZWZhdWx0VHJhbnNpdGlvbjpmdW5jdGlvbigpe3JldHVybiB5LnRyYW5zaXRpb259LGdldFZhcmlhbnRDb250ZXh0OmZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUmJihlPSExKSxlKXJldHVybiBudWxsPT1DP3ZvaWQgMDpDLmdldFZhcmlhbnRDb250ZXh0KCk7aWYoIVgpe3ZhciB0PShudWxsPT1DP3ZvaWQgMDpDLmdldFZhcmlhbnRDb250ZXh0KCkpfHx7fTtyZXR1cm4gdm9pZCAwIT09eS5pbml0aWFsJiYodC5pbml0aWFsPXkuaW5pdGlhbCksdH1mb3IodmFyIG49e30scj0wO3I8WnI7cisrKXt2YXIgbz1EcltyXSxpPXlbb107KEEoaSl8fCExPT09aSkmJihuW29dPWkpfXJldHVybiBufSxlbmFibGVMYXlvdXRQcm9qZWN0aW9uOmZ1bmN0aW9uKCl7UC5pc0VuYWJsZWQ9ITAsUS5sYXlvdXRUcmVlLmFkZChRKX0sbG9ja1Byb2plY3Rpb25UYXJnZXQ6ZnVuY3Rpb24oKXtQLmlzVGFyZ2V0TG9ja2VkPSEwfSx1bmxvY2tQcm9qZWN0aW9uVGFyZ2V0OmZ1bmN0aW9uKCl7US5zdG9wTGF5b3V0QW5pbWF0aW9uKCksUC5pc1RhcmdldExvY2tlZD0hMX0sZ2V0TGF5b3V0U3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gSH0sc2V0Q3Jvc3NmYWRlcjpmdW5jdGlvbihlKXtFPWV9LGlzUHJvamVjdGlvblJlYWR5OmZ1bmN0aW9uKCl7cmV0dXJuIFAuaXNFbmFibGVkJiZQLmlzSHlkcmF0ZWQmJkguaXNIeWRyYXRlZH0sc3RhcnRMYXlvdXRBbmltYXRpb246ZnVuY3Rpb24oZSx0LG4pe3ZvaWQgMD09PW4mJihuPSExKTt2YXIgcj1RLmdldFByb2plY3Rpb25BbmltYXRpb25Qcm9ncmVzcygpW2VdLG89bj9QLnJlbGF0aXZlVGFyZ2V0W2VdOlAudGFyZ2V0W2VdLGk9by5taW4sYT1vLm1heC1pO3JldHVybiByLmNsZWFyTGlzdGVuZXJzKCksci5zZXQoaSksci5zZXQoaSksci5vbkNoYW5nZSgoZnVuY3Rpb24odCl7US5zZXRQcm9qZWN0aW9uVGFyZ2V0QXhpcyhlLHQsdCthLG4pfSkpLFEuYW5pbWF0ZU1vdGlvblZhbHVlKGUsciwwLHQpfSxzdG9wTGF5b3V0QW5pbWF0aW9uOmZ1bmN0aW9uKCl7bW4oKGZ1bmN0aW9uKGUpe3JldHVybiBRLmdldFByb2plY3Rpb25BbmltYXRpb25Qcm9ncmVzcygpW2VdLnN0b3AoKX0pKX0sbWVhc3VyZVZpZXdwb3J0Qm94OmZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPSEwKTt2YXIgbj1jKF8sdCk7cmV0dXJuIGV8fFluKG4sTSksbn0sZ2V0UHJvamVjdGlvbkFuaW1hdGlvblByb2dyZXNzOmZ1bmN0aW9uKCl7cmV0dXJuIFN8fChTPXt4OlZ0KDApLHk6VnQoMCl9KSxTfSxzZXRQcm9qZWN0aW9uVGFyZ2V0QXhpczpmdW5jdGlvbihlLHQsbixyKXt2YXIgbzt2b2lkIDA9PT1yJiYocj0hMSkscj8oUC5yZWxhdGl2ZVRhcmdldHx8KFAucmVsYXRpdmVUYXJnZXQ9e3g6e21pbjowLG1heDoxfSx5OnttaW46MCxtYXg6MX19KSxvPVAucmVsYXRpdmVUYXJnZXRbZV0pOihQLnJlbGF0aXZlVGFyZ2V0PXZvaWQgMCxvPVAudGFyZ2V0W2VdKSxQLmlzSHlkcmF0ZWQ9ITAsby5taW49dCxvLm1heD1uLEQ9ITAsUi5ub3RpZnlTZXRBeGlzVGFyZ2V0KCl9LHJlYmFzZVByb2plY3Rpb25UYXJnZXQ6ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD1ILmxheW91dCk7dmFyIG49US5nZXRQcm9qZWN0aW9uQW5pbWF0aW9uUHJvZ3Jlc3MoKSxyPW4ueCxvPW4ueSxpPSEoUC5yZWxhdGl2ZVRhcmdldHx8UC5pc1RhcmdldExvY2tlZHx8ci5pc0FuaW1hdGluZygpfHxvLmlzQW5pbWF0aW5nKCkpOyhlfHxpKSYmbW4oKGZ1bmN0aW9uKGUpe3ZhciBuPXRbZV0scj1uLm1pbixvPW4ubWF4O1Euc2V0UHJvamVjdGlvblRhcmdldEF4aXMoZSxyLG8pfSkpfSxub3RpZnlMYXlvdXRSZWFkeTpmdW5jdGlvbihlKXshZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRQcm9qZWN0aW9uUGFyZW50KCk7aWYodCl7dmFyIG49SG4odC5nZXRMYXlvdXRTdGF0ZSgpLmxheW91dCxlLmdldExheW91dFN0YXRlKCkubGF5b3V0KTttbigoZnVuY3Rpb24odCl7ZS5zZXRQcm9qZWN0aW9uVGFyZ2V0QXhpcyh0LG5bdF0ubWluLG5bdF0ubWF4LCEwKX0pKX1lbHNlIGUucmViYXNlUHJvamVjdGlvblRhcmdldCgpfShRKSxRLm5vdGlmeUxheW91dFVwZGF0ZShILmxheW91dCxRLnByZXZWaWV3cG9ydEJveHx8SC5sYXlvdXQsZSl9LHJlc2V0VHJhbnNmb3JtOmZ1bmN0aW9uKCl7cmV0dXJuIHAoUSxfLHkpfSxyZXN0b3JlVHJhbnNmb3JtOmZ1bmN0aW9uKCl7cmV0dXJuIGgoXyxrKX0sdXBkYXRlTGF5b3V0UHJvamVjdGlvbjpmdW5jdGlvbigpe2lmKFEuaXNQcm9qZWN0aW9uUmVhZHkoKSl7dmFyIGU9SC5kZWx0YSx0PUgudHJlZVNjYWxlLG49dC54LHI9dC55LG89SC5kZWx0YVRyYW5zZm9ybTsoZnVuY3Rpb24oZSx0LG4scil7dmFyIG8saSxhPWUuZGVsdGEsbD1lLmxheW91dCxzPWUubGF5b3V0Q29ycmVjdGVkLGM9ZS50cmVlU2NhbGUsdT10LnRhcmdldDtpPWwsVm4oKG89cykueCxpLngpLFZuKG8ueSxpLnkpLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uLmxlbmd0aDtpZihyKXt2YXIgbyxpO3QueD10Lnk9MTtmb3IodmFyIGE9MDthPHI7YSsrKWk9KG89blthXSkuZ2V0TGF5b3V0U3RhdGUoKS5kZWx0YSx0LngqPWkueC5zY2FsZSx0LnkqPWkueS5zY2FsZSxObihlLGkpLEJuKG8pJiZ6bihlLGUsby5nZXRMYXRlc3RWYWx1ZXMoKSl9fShzLGMsbiksYm4oYSxzLHUscil9KShILEksUS5wYXRoLE0pLEQmJlEubm90aWZ5Vmlld3BvcnRCb3hVcGRhdGUoSS50YXJnZXQsZSksRD0hMTt2YXIgaT1rcihlLHQpO2k9PT1vJiZuPT09dC54JiZyPT09dC55fHxRLnNjaGVkdWxlUmVuZGVyKCksSC5kZWx0YVRyYW5zZm9ybT1pfX0sdXBkYXRlVHJlZUxheW91dFByb2plY3Rpb246ZnVuY3Rpb24oKXtRLmxheW91dFRyZWUuZm9yRWFjaChIciksZC5kZWZhdWx0LnByZVJlbmRlcihHLCExLCEwKX0sZ2V0UHJvamVjdGlvblBhcmVudDpmdW5jdGlvbigpe2lmKHZvaWQgMD09PU8pe2Zvcih2YXIgZT0hMSx0PVEucGF0aC5sZW5ndGgtMTt0Pj0wO3QtLSl7dmFyIG49US5wYXRoW3RdO2lmKG4ucHJvamVjdGlvbi5pc0VuYWJsZWQpe2U9bjticmVha319Tz1lfXJldHVybiBPfSxyZXNvbHZlUmVsYXRpdmVUYXJnZXRCb3g6ZnVuY3Rpb24oKXt2YXIgZT1RLmdldFByb2plY3Rpb25QYXJlbnQoKTtpZihQLnJlbGF0aXZlVGFyZ2V0JiZlJiYoZnVuY3Rpb24oZSx0KXtfbihlLnRhcmdldC54LGUucmVsYXRpdmVUYXJnZXQueCx0LnRhcmdldC54KSxfbihlLnRhcmdldC55LGUucmVsYXRpdmVUYXJnZXQueSx0LnRhcmdldC55KX0oUCxlLnByb2plY3Rpb24pLEJuKGUpKSl7dmFyIHQ9UC50YXJnZXQ7em4odCx0LGUuZ2V0TGF0ZXN0VmFsdWVzKCkpfX0sc2hvdWxkUmVzZXRUcmFuc2Zvcm06ZnVuY3Rpb24oKXtyZXR1cm4gQm9vbGVhbih5Ll9sYXlvdXRSZXNldFRyYW5zZm9ybSl9LHBvaW50VG86ZnVuY3Rpb24oZSl7ST1lLnByb2plY3Rpb24sVD1lLmdldExhdGVzdFZhbHVlcygpLG51bGw9PUx8fEwoKSxMPWwucGlwZShlLm9uU2V0QXhpc1RhcmdldChRLnNjaGVkdWxlVXBkYXRlTGF5b3V0UHJvamVjdGlvbiksZS5vbkxheW91dEFuaW1hdGlvbkNvbXBsZXRlKChmdW5jdGlvbigpe3ZhciBlO1EuaXNQcmVzZW50P1EucHJlc2VuY2U9aXIuUHJlc2VudDpudWxsPT09KGU9US5sYXlvdXRTYWZlVG9SZW1vdmUpfHx2b2lkIDA9PT1lfHxlLmNhbGwoUSl9KSkpfSxpc1ByZXNlbnQ6ITAscHJlc2VuY2U6aXIuRW50ZXJpbmd9KTtyZXR1cm4gUX19O2Z1bmN0aW9uIEhyKGUpe2UucmVzb2x2ZVJlbGF0aXZlVGFyZ2V0Qm94KCl9ZnVuY3Rpb24gQnIoZSl7ZS51cGRhdGVMYXlvdXRQcm9qZWN0aW9uKCl9dmFyIFZyLERyPXIuX19zcHJlYWRBcnJheShbXCJpbml0aWFsXCJdLHIuX19yZWFkKGVuKSksWnI9RHIubGVuZ3RoLCRyPW5ldyBTZXQoW1wid2lkdGhcIixcImhlaWdodFwiLFwidG9wXCIsXCJsZWZ0XCIsXCJyaWdodFwiLFwiYm90dG9tXCIsXCJ4XCIsXCJ5XCJdKSxOcj1mdW5jdGlvbihlKXtyZXR1cm4gJHIuaGFzKGUpfSxGcj1mdW5jdGlvbihlLHQpe2Uuc2V0KHQsITEpLGUuc2V0KHQpfSxVcj1mdW5jdGlvbihlKXtyZXR1cm4gZT09PWEubnVtYmVyfHxlPT09YS5weH07IWZ1bmN0aW9uKGUpe2Uud2lkdGg9XCJ3aWR0aFwiLGUuaGVpZ2h0PVwiaGVpZ2h0XCIsZS5sZWZ0PVwibGVmdFwiLGUucmlnaHQ9XCJyaWdodFwiLGUudG9wPVwidG9wXCIsZS5ib3R0b209XCJib3R0b21cIn0oVnJ8fChWcj17fSkpO3ZhciBXcj1mdW5jdGlvbihlLHQpe3JldHVybiBwYXJzZUZsb2F0KGUuc3BsaXQoXCIsIFwiKVt0XSl9LHpyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7dmFyIG89ci50cmFuc2Zvcm07aWYoXCJub25lXCI9PT1vfHwhbylyZXR1cm4gMDt2YXIgaT1vLm1hdGNoKC9ebWF0cml4M2RcXCgoLispXFwpJC8pO2lmKGkpcmV0dXJuIFdyKGlbMV0sdCk7dmFyIGE9by5tYXRjaCgvXm1hdHJpeFxcKCguKylcXCkkLyk7cmV0dXJuIGE/V3IoYVsxXSxlKTowfX0sR3I9bmV3IFNldChbXCJ4XCIsXCJ5XCIsXCJ6XCJdKSxxcj1HLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIUdyLmhhcyhlKX0pKSxZcj17d2lkdGg6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS54O3JldHVybiB0Lm1heC10Lm1pbn0saGVpZ2h0OmZ1bmN0aW9uKGUpe3ZhciB0PWUueTtyZXR1cm4gdC5tYXgtdC5taW59LHRvcDpmdW5jdGlvbihlLHQpe3ZhciBuPXQudG9wO3JldHVybiBwYXJzZUZsb2F0KG4pfSxsZWZ0OmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5sZWZ0O3JldHVybiBwYXJzZUZsb2F0KG4pfSxib3R0b206ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnkscj10LnRvcDtyZXR1cm4gcGFyc2VGbG9hdChyKSsobi5tYXgtbi5taW4pfSxyaWdodDpmdW5jdGlvbihlLHQpe3ZhciBuPWUueCxyPXQubGVmdDtyZXR1cm4gcGFyc2VGbG9hdChyKSsobi5tYXgtbi5taW4pfSx4OnpyKDQsMTMpLHk6enIoNSwxNCl9O2Z1bmN0aW9uIEtyKGUsdCxuLG8pe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkuc29tZShOcil9KHQpP2Z1bmN0aW9uKGUsdCxuLG8pe3ZvaWQgMD09PW4mJihuPXt9KSx2b2lkIDA9PT1vJiYobz17fSksdD1yLl9fYXNzaWduKHt9LHQpLG89ci5fX2Fzc2lnbih7fSxvKTt2YXIgbD1PYmplY3Qua2V5cyh0KS5maWx0ZXIoTnIpLHM9W10sYz0hMSx1PVtdO2lmKGwuZm9yRWFjaCgoZnVuY3Rpb24ocil7dmFyIGw9ZS5nZXRWYWx1ZShyKTtpZihlLmhhc1ZhbHVlKHIpKXt2YXIgZixkPW5bcl0scD10W3JdLGg9JHQoZCk7aWYoa2UocCkpZm9yKHZhciBnPXAubGVuZ3RoLHY9bnVsbD09PXBbMF0/MTowO3Y8Zzt2KyspZj9pLmludmFyaWFudCgkdChwW3ZdKT09PWYsXCJBbGwga2V5ZnJhbWVzIG11c3QgYmUgb2YgdGhlIHNhbWUgdHlwZVwiKTooZj0kdChwW3ZdKSxpLmludmFyaWFudChmPT09aHx8VXIoaCkmJlVyKGYpLFwiS2V5ZnJhbWVzIG11c3QgYmUgb2YgdGhlIHNhbWUgZGltZW5zaW9uIGFzIHRoZSBjdXJyZW50IHZhbHVlXCIpKTtlbHNlIGY9JHQocCk7aWYoaCE9PWYpaWYoVXIoaCkmJlVyKGYpKXt2YXIgbT1sLmdldCgpO1wic3RyaW5nXCI9PXR5cGVvZiBtJiZsLnNldChwYXJzZUZsb2F0KG0pKSxcInN0cmluZ1wiPT10eXBlb2YgcD90W3JdPXBhcnNlRmxvYXQocCk6QXJyYXkuaXNBcnJheShwKSYmZj09PWEucHgmJih0W3JdPXAubWFwKHBhcnNlRmxvYXQpKX1lbHNlKG51bGw9PWg/dm9pZCAwOmgudHJhbnNmb3JtKSYmKG51bGw9PWY/dm9pZCAwOmYudHJhbnNmb3JtKSYmKDA9PT1kfHwwPT09cCk/MD09PWQ/bC5zZXQoZi50cmFuc2Zvcm0oZCkpOnRbcl09aC50cmFuc2Zvcm0ocCk6KGN8fChzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiBxci5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgcj1lLmdldFZhbHVlKG4pO3ZvaWQgMCE9PXImJih0LnB1c2goW24sci5nZXQoKV0pLHIuc2V0KG4uc3RhcnRzV2l0aChcInNjYWxlXCIpPzE6MCkpfSkpLHQubGVuZ3RoJiZlLnN5bmNSZW5kZXIoKSx0fShlKSxjPSEwKSx1LnB1c2gociksb1tyXT12b2lkIDAhPT1vW3JdP29bcl06dFtyXSxGcihsLHApKX19KSksdS5sZW5ndGgpe3ZhciBmPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10Lm1lYXN1cmVWaWV3cG9ydEJveCgpLG89dC5nZXRJbnN0YW5jZSgpLGk9Z2V0Q29tcHV0ZWRTdHlsZShvKSxhPWkuZGlzcGxheSxsPXt0b3A6aS50b3AsbGVmdDppLmxlZnQsYm90dG9tOmkuYm90dG9tLHJpZ2h0OmkucmlnaHQsdHJhbnNmb3JtOmkudHJhbnNmb3JtfTtcIm5vbmVcIj09PWEmJnQuc2V0U3RhdGljVmFsdWUoXCJkaXNwbGF5XCIsZS5kaXNwbGF5fHxcImJsb2NrXCIpLHQuc3luY1JlbmRlcigpO3ZhciBzPXQubWVhc3VyZVZpZXdwb3J0Qm94KCk7cmV0dXJuIG4uZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIG89dC5nZXRWYWx1ZShuKTtGcihvLFlyW25dKHIsbCkpLGVbbl09WXJbbl0ocyxpKX0pKSxlfSh0LGUsdSk7cmV0dXJuIHMubGVuZ3RoJiZzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPXIuX19yZWFkKHQsMiksbz1uWzBdLGk9blsxXTtlLmdldFZhbHVlKG8pLnNldChpKX0pKSxlLnN5bmNSZW5kZXIoKSx7dGFyZ2V0OmYsdHJhbnNpdGlvbkVuZDpvfX1yZXR1cm57dGFyZ2V0OnQsdHJhbnNpdGlvbkVuZDpvfX0oZSx0LG4sbyk6e3RhcmdldDp0LHRyYW5zaXRpb25FbmQ6b319dmFyIFhyPXt0cmVlVHlwZTpcImRvbVwiLHJlYWRWYWx1ZUZyb21JbnN0YW5jZTpmdW5jdGlvbihlLHQpe2lmKEsodCkpe3ZhciBuPVN0KHQpO3JldHVybiBuJiZuLmRlZmF1bHR8fDB9dmFyIHIsbz0ocj1lLHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHIpKTtyZXR1cm4obmUodCk/by5nZXRQcm9wZXJ0eVZhbHVlKHQpOm9bdF0pfHwwfSxzb3J0Tm9kZVBvc2l0aW9uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIDImZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0KT8xOi0xfSxnZXRCYXNlVGFyZ2V0OmZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuIG51bGw9PT0obj1lLnN0eWxlKXx8dm9pZCAwPT09bj92b2lkIDA6blt0XX0sbWVhc3VyZVZpZXdwb3J0Qm94OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1uKGUsdC50cmFuc2Zvcm1QYWdlUG9pbnQpfSxyZXNldFRyYW5zZm9ybTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bi50cmFuc2Zvcm1UZW1wbGF0ZTt0LnN0eWxlLnRyYW5zZm9ybT1yP3Ioe30sXCJcIik6XCJub25lXCIsZS5zY2hlZHVsZVJlbmRlcigpfSxyZXN0b3JlVHJhbnNmb3JtOmZ1bmN0aW9uKGUsdCl7ZS5zdHlsZS50cmFuc2Zvcm09dC5zdHlsZS50cmFuc2Zvcm19LHJlbW92ZVZhbHVlRnJvbVJlbmRlclN0YXRlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC52YXJzLHI9dC5zdHlsZTtkZWxldGUgbltlXSxkZWxldGUgcltlXX0sbWFrZVRhcmdldEFuaW1hdGFibGU6ZnVuY3Rpb24oZSx0LG4sbyl7dmFyIGk9bi50cmFuc2Zvcm1WYWx1ZXM7dm9pZCAwPT09byYmKG89ITApO3ZhciBhPXQudHJhbnNpdGlvbixsPXQudHJhbnNpdGlvbkVuZCxzPXIuX19yZXN0KHQsW1widHJhbnNpdGlvblwiLFwidHJhbnNpdGlvbkVuZFwiXSksYz1xdChzLGF8fHt9LGUpO2lmKGkmJihsJiYobD1pKGwpKSxzJiYocz1pKHMpKSxjJiYoYz1pKGMpKSksbyl7enQoZSxzLGMpO3ZhciB1PWZ1bmN0aW9uKGUsdCxuLG8pe3ZhciBpPWZ1bmN0aW9uKGUsdCxuKXt2YXIgbyxpPXIuX19yZXN0KHQsW10pLGE9ZS5nZXRJbnN0YW5jZSgpO2lmKCEoYSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSlyZXR1cm57dGFyZ2V0OmksdHJhbnNpdGlvbkVuZDpufTtmb3IodmFyIGwgaW4gbiYmKG49ci5fX2Fzc2lnbih7fSxuKSksZS5mb3JFYWNoVmFsdWUoKGZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0KCk7aWYoc3IodCkpe3ZhciBuPXVyKHQsYSk7biYmZS5zZXQobil9fSkpLGkpe3ZhciBzPWlbbF07aWYoc3Iocykpe3ZhciBjPXVyKHMsYSk7YyYmKGlbbF09YyxuJiYobnVsbCE9PShvPW5bbF0pJiZ2b2lkIDAhPT1vfHwobltsXT1zKSkpfX1yZXR1cm57dGFyZ2V0OmksdHJhbnNpdGlvbkVuZDpufX0oZSx0LG8pO3JldHVybiBLcihlLHQ9aS50YXJnZXQsbixvPWkudHJhbnNpdGlvbkVuZCl9KGUscyxjLGwpO2w9dS50cmFuc2l0aW9uRW5kLHM9dS50YXJnZXR9cmV0dXJuIHIuX19hc3NpZ24oe3RyYW5zaXRpb246YSx0cmFuc2l0aW9uRW5kOmx9LHMpfSxzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHM6U2UsYnVpbGQ6ZnVuY3Rpb24oZSx0LG4scixvLGksYSl7dm9pZCAwIT09ZS5pc1Zpc2libGUmJih0LnN0eWxlLnZpc2liaWxpdHk9ZS5pc1Zpc2libGU/XCJ2aXNpYmxlXCI6XCJoaWRkZW5cIik7dmFyIGw9ci5pc0VuYWJsZWQmJm8uaXNIeWRyYXRlZDthZSh0LG4scixvLGksYS50cmFuc2Zvcm1UZW1wbGF0ZSxsP2tyOnZvaWQgMCxsP1JyOnZvaWQgMCl9LHJlbmRlcjpPZX0sSnI9VHIoWHIpLFFyPVRyKHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxYcikse2dldEJhc2VUYXJnZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XX0scmVhZFZhbHVlRnJvbUluc3RhbmNlOmZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuIEsodCk/KG51bGw9PT0obj1TdCh0KSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZGVmYXVsdCl8fDA6KHQ9TGUuaGFzKHQpP3Q6X2UodCksZS5nZXRBdHRyaWJ1dGUodCkpfSxzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHM6amUsYnVpbGQ6ZnVuY3Rpb24oZSx0LG4scixvLGksYSl7dmFyIGw9ci5pc0VuYWJsZWQmJm8uaXNIeWRyYXRlZDtDZSh0LG4scixvLGksYS50cmFuc2Zvcm1UZW1wbGF0ZSxsP2tyOnZvaWQgMCxsP1JyOnZvaWQgMCl9LHJlbmRlcjpFZX0pKSxlbz1mdW5jdGlvbihlLHQpe3JldHVybiBGKGUpP1FyKHQse2VuYWJsZUhhcmR3YXJlQWNjZWxlcmF0aW9uOiExfSk6SnIodCx7ZW5hYmxlSGFyZHdhcmVBY2NlbGVyYXRpb246ITB9KX0sdG89ci5fX2Fzc2lnbihyLl9fYXNzaWduKHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxvbikscHQpLGxyKSxTciksbm89JCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gWmUoZSx0LHRvLGVvKX0pKSxybz0kKFplKSxvbz0wO2Z1bmN0aW9uIGlvKCl7dmFyIGU9b287cmV0dXJuIG9vKyssZX12YXIgYW89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jaGlsZHJlbixuPWUuaW5pdGlhbCxyPWUuaXNQcmVzZW50LGk9ZS5vbkV4aXRDb21wbGV0ZSxhPWUuY3VzdG9tLGw9ZS5wcmVzZW5jZUFmZmVjdHNMYXlvdXQscz1fKGxvKSxjPV8oaW8pLGY9by51c2VNZW1vKChmdW5jdGlvbigpe3JldHVybntpZDpjLGluaXRpYWw6bixpc1ByZXNlbnQ6cixjdXN0b206YSxvbkV4aXRDb21wbGV0ZTpmdW5jdGlvbihlKXtzLnNldChlLCEwKTt2YXIgdD0hMDtzLmZvckVhY2goKGZ1bmN0aW9uKGUpe2V8fCh0PSExKX0pKSx0JiYobnVsbD09aXx8aSgpKX0scmVnaXN0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHMuc2V0KGUsITEpLGZ1bmN0aW9uKCl7cmV0dXJuIHMuZGVsZXRlKGUpfX19fSksbD92b2lkIDA6W3JdKTtyZXR1cm4gby51c2VNZW1vKChmdW5jdGlvbigpe3MuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gcy5zZXQodCwhMSl9KSl9KSxbcl0pLHUudXNlRWZmZWN0KChmdW5jdGlvbigpeyFyJiYhcy5zaXplJiYobnVsbD09aXx8aSgpKX0pLFtyXSksdS5jcmVhdGVFbGVtZW50KHguUHJvdmlkZXIse3ZhbHVlOmZ9LHQpfTtmdW5jdGlvbiBsbygpe3JldHVybiBuZXcgTWFwfWZ1bmN0aW9uIHNvKGUpe3JldHVybiBlLmtleXx8XCJcIn1mdW5jdGlvbiBjbyhlLHQsbil7dm9pZCAwPT09biYmKG49e30pO3ZhciByPWVlKGUpP2U6VnQoZSk7cmV0dXJuIEl0KFwiXCIscix0LG4pLHtzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIHIuc3RvcCgpfX19ZnVuY3Rpb24gdW8oKXt2YXIgZT1WdCgxKSx0PXtsZWFkOnZvaWQgMCxmb2xsb3c6dm9pZCAwLGNyb3NzZmFkZU9wYWNpdHk6ITEscHJlc2VydmVGb2xsb3dPcGFjaXR5OiExfSxuPXIuX19hc3NpZ24oe30sdCksbz17fSxpPXt9LGE9ITEsYz1udWxsLHU9MDtmdW5jdGlvbiBmKG4sbyl7dmFyIGk9dC5sZWFkLGw9dC5mb2xsb3c7YT0hMCxjPW51bGw7dmFyIHU9ITEsZj1mdW5jdGlvbigpe3U9ITAsaSYmaS5zY2hlZHVsZVJlbmRlcigpLGwmJmwuc2NoZWR1bGVSZW5kZXIoKX0scD1mdW5jdGlvbigpe2E9ITEsYz1zLmdldEZyYW1lRGF0YSgpLnRpbWVzdGFtcH07cmV0dXJuIG89byYmUHQobyxcImNyb3NzZmFkZVwiKSxjbyhlLG4sci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LG8pLHtvblVwZGF0ZTpmLG9uQ29tcGxldGU6ZnVuY3Rpb24oKXt1P3AoKTooZS5zZXQobiksZC5kZWZhdWx0LnJlYWQocCkpLGYoKX19KSl9cmV0dXJue2lzQWN0aXZlOmZ1bmN0aW9uKCl7cmV0dXJuIG8mJihhfHxzLmdldEZyYW1lRGF0YSgpLnRpbWVzdGFtcD09PWMpfSxmcm9tTGVhZDpmdW5jdGlvbihlKXtyZXR1cm4gZigwLGUpfSx0b0xlYWQ6ZnVuY3Rpb24ocil7dmFyIG89MDtyZXR1cm4gdC5wcmV2VmFsdWVzfHx0LmZvbGxvdz9uLmxlYWQ9PT10LmZvbGxvdyYmbi5mb2xsb3c9PT10LmxlYWQmJihvPTEtZS5nZXQoKSk6bz0xLGUuc2V0KG8pLGYoMSxyKX0scmVzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5zZXQoMSl9LHN0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gZS5zdG9wKCl9LGdldENyb3NzZmFkZVN0YXRlOmZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciBuLHIsYT1zLmdldEZyYW1lRGF0YSgpLnRpbWVzdGFtcCxjPXQubGVhZCxmPXQuZm9sbG93O2lmKGEhPT11JiZjKXt1PWE7dmFyIGQ9Yy5nZXRMYXRlc3RWYWx1ZXMoKTtPYmplY3QuYXNzaWduKG8sZCk7dmFyIHA9Zj9mLmdldExhdGVzdFZhbHVlcygpOnQucHJldlZhbHVlcztPYmplY3QuYXNzaWduKGkscCk7dmFyIGg9ZS5nZXQoKSxnPW51bGwhPT0obj1kLm9wYWNpdHkpJiZ2b2lkIDAhPT1uP246MSx2PW51bGwhPT0ocj1udWxsPT1wP3ZvaWQgMDpwLm9wYWNpdHkpJiZ2b2lkIDAhPT1yP3I6MTt0LmNyb3NzZmFkZU9wYWNpdHkmJmY/KG8ub3BhY2l0eT1sLm1peCghMSE9PWYuaXNWaXNpYmxlPzA6dixnLGZvKGgpKSxpLm9wYWNpdHk9dC5wcmVzZXJ2ZUZvbGxvd09wYWNpdHk/djpsLm1peCh2LDAscG8oaCkpKTpmfHwoby5vcGFjaXR5PWwubWl4KHYsZyxoKSksZnVuY3Rpb24oZSx0LG4scixvLGkpe2Zvcih2YXIgYT0wO2E8dm87YSsrKXt2YXIgcz1cImJvcmRlclwiK2dvW2FdK1wiUmFkaXVzXCIsYz1tbyhyLHMpLHU9bW8obixzKTtpZigodm9pZCAwIT09Y3x8dm9pZCAwIT09dSkmJihjfHwoYz0wKSx1fHwodT0wKSxcIm51bWJlclwiPT10eXBlb2YgYyYmXCJudW1iZXJcIj09dHlwZW9mIHUpKXt2YXIgZj1NYXRoLm1heChsLm1peChjLHUsaSksMCk7ZVtzXT10W3NdPWZ9fWlmKHIucm90YXRlfHxuLnJvdGF0ZSl7dmFyIGQ9bC5taXgoci5yb3RhdGV8fDAsbi5yb3RhdGV8fDAsaSk7ZS5yb3RhdGU9dC5yb3RhdGU9ZH0hbyYmbi5iYWNrZ3JvdW5kQ29sb3ImJnIuYmFja2dyb3VuZENvbG9yJiYoZS5iYWNrZ3JvdW5kQ29sb3I9dC5iYWNrZ3JvdW5kQ29sb3I9bC5taXhDb2xvcihyLmJhY2tncm91bmRDb2xvcixuLmJhY2tncm91bmRDb2xvcikoaSkpfShvLGksZCxwfHx7fSxCb29sZWFuKGYpLGgpfX0oKSxuPT09dC5sZWFkP286bj09PXQuZm9sbG93P2k6dm9pZCAwfSxzZXRPcHRpb25zOmZ1bmN0aW9uKGUpe249dCx0PWUsbz17fSxpPXt9fSxnZXRMYXRlc3RWYWx1ZXM6ZnVuY3Rpb24oKXtyZXR1cm4gb319fXZhciBmbz1obygwLC41LGwuY2lyY091dCkscG89aG8oLjUsLjk1LGwubGluZWFyKTtmdW5jdGlvbiBobyhlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiByPGU/MDpyPnQ/MTpuKGwucHJvZ3Jlc3MoZSx0LHIpKX19dmFyIGdvPVtcIlRvcExlZnRcIixcIlRvcFJpZ2h0XCIsXCJCb3R0b21MZWZ0XCIsXCJCb3R0b21SaWdodFwiXSx2bz1nby5sZW5ndGg7ZnVuY3Rpb24gbW8oZSx0KXt2YXIgbjtyZXR1cm4gbnVsbCE9PShuPWVbdF0pJiZ2b2lkIDAhPT1uP246ZS5ib3JkZXJSYWRpdXN9dmFyIENvPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgdD1udWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHQuY2hpbGRyZW49bmV3IFNldCx0LnN0YWNrcz1uZXcgTWFwLHQuaGFzTW91bnRlZD0hMSx0LnVwZGF0ZVNjaGVkdWxlZD0hMSx0LnJlbmRlclNjaGVkdWxlZD0hMSx0LnN5bmNDb250ZXh0PXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxicigpKSx7c3luY1VwZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gdC5zY2hlZHVsZVVwZGF0ZShlKX0sZm9yY2VVcGRhdGU6ZnVuY3Rpb24oKXt0LnN5bmNDb250ZXh0PXIuX19hc3NpZ24oe30sdC5zeW5jQ29udGV4dCksdC5zY2hlZHVsZVVwZGF0ZSghMCl9LHJlZ2lzdGVyOmZ1bmN0aW9uKGUpe3JldHVybiB0LmFkZENoaWxkKGUpfSxyZW1vdmU6ZnVuY3Rpb24oZSl7cmV0dXJuIHQucmVtb3ZlQ2hpbGQoZSl9fSksdH1yZXR1cm4gci5fX2V4dGVuZHModCxlKSx0LnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3RoaXMuaGFzTW91bnRlZD0hMH0sdC5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5zdGFydExheW91dEFuaW1hdGlvbigpfSx0LnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXJTY2hlZHVsZWQ9ITAsITB9LHQucHJvdG90eXBlLnN0YXJ0TGF5b3V0QW5pbWF0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLnJlbmRlclNjaGVkdWxlZD10aGlzLnVwZGF0ZVNjaGVkdWxlZD0hMTt2YXIgdD10aGlzLnByb3BzLnR5cGU7dGhpcy5jaGlsZHJlbi5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmlzUHJlc2VudD9lLnByZXNlbmNlIT09aXIuRW50ZXJpbmcmJihlLnByZXNlbmNlPWUucHJlc2VuY2U9PT1pci5FeGl0aW5nP2lyLkVudGVyaW5nOmlyLlByZXNlbnQpOmUucHJlc2VuY2U9aXIuRXhpdGluZ30pKSx0aGlzLnVwZGF0ZVN0YWNrcygpO3ZhciBuPXtsYXlvdXRSZWFkeTpmdW5jdGlvbihuKXt2b2lkIDAhPT1uLmdldExheW91dElkKCk/ZS5nZXRTdGFjayhuKS5hbmltYXRlKG4sXCJjcm9zc2ZhZGVcIj09PXQpOm4ubm90aWZ5TGF5b3V0UmVhZHkoKX0scGFyZW50OnRoaXMuY29udGV4dC52aXN1YWxFbGVtZW50fTt0aGlzLmNoaWxkcmVuLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiBlLnN5bmNDb250ZXh0LmFkZCh0KX0pKSx0aGlzLnN5bmNDb250ZXh0LmZsdXNoKG4pLHRoaXMuc3RhY2tzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNsZWFyU25hcHNob3QoKX0pKX0sdC5wcm90b3R5cGUudXBkYXRlU3RhY2tzPWZ1bmN0aW9uKCl7dGhpcy5zdGFja3MuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudXBkYXRlTGVhZEFuZEZvbGxvdygpfSkpfSx0LnByb3RvdHlwZS5zY2hlZHVsZVVwZGF0ZT1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT0hMSksIWUmJnRoaXMudXBkYXRlU2NoZWR1bGVkfHwodGhpcy51cGRhdGVTY2hlZHVsZWQ9ITAsdGhpcy5jaGlsZHJlbi5mb3JFYWNoKChmdW5jdGlvbihlKXshZnVuY3Rpb24oZSl7Zm9yKHZhciB0PSExLG49e30scj0wO3I8ei5sZW5ndGg7cisrKXt2YXIgbz1cInJvdGF0ZVwiK3pbcl07ZS5oYXNWYWx1ZShvKSYmMCE9PWUuZ2V0U3RhdGljVmFsdWUobykmJih0PSEwLG5bb109ZS5nZXRTdGF0aWNWYWx1ZShvKSxlLnNldFN0YXRpY1ZhbHVlKG8sMCkpfWlmKHQpe2Zvcih2YXIgbyBpbiBlLnN5bmNSZW5kZXIoKSxuKWUuc2V0U3RhdGljVmFsdWUobyxuW29dKTtlLnNjaGVkdWxlUmVuZGVyKCl9fShlKSxlLnNob3VsZFJlc2V0VHJhbnNmb3JtKCkmJmUucmVzZXRUcmFuc2Zvcm0oKX0pKSx0aGlzLmNoaWxkcmVuLmZvckVhY2goQW4pLHRoaXMuc3RhY2tzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLnVwZGF0ZVNuYXBzaG90KCl9KSksIWUmJnRoaXMucmVuZGVyU2NoZWR1bGVkfHwodGhpcy5yZW5kZXJTY2hlZHVsZWQ9ITAsdGhpcy5mb3JjZVVwZGF0ZSgpKSl9LHQucHJvdG90eXBlLmFkZENoaWxkPWZ1bmN0aW9uKGUpe3RoaXMuY2hpbGRyZW4uYWRkKGUpLHRoaXMuYWRkVG9TdGFjayhlKSxlLnByZXNlbmNlPXRoaXMuaGFzTW91bnRlZD9pci5FbnRlcmluZzppci5QcmVzZW50fSx0LnByb3RvdHlwZS5yZW1vdmVDaGlsZD1mdW5jdGlvbihlKXt0aGlzLnNjaGVkdWxlVXBkYXRlKCksdGhpcy5jaGlsZHJlbi5kZWxldGUoZSksdGhpcy5yZW1vdmVGcm9tU3RhY2soZSl9LHQucHJvdG90eXBlLmFkZFRvU3RhY2s9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRTdGFjayhlKTtudWxsPT10fHx0LmFkZChlKX0sdC5wcm90b3R5cGUucmVtb3ZlRnJvbVN0YWNrPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0U3RhY2soZSk7bnVsbD09dHx8dC5yZW1vdmUoZSl9LHQucHJvdG90eXBlLmdldFN0YWNrPWZ1bmN0aW9uKGUpe3ZhciB0LG4sbyxpLGEsbCxzLGMsdT1lLmdldExheW91dElkKCk7aWYodm9pZCAwIT09dSlyZXR1cm4hdGhpcy5zdGFja3MuaGFzKHUpJiZ0aGlzLnN0YWNrcy5zZXQodSwoaT1uZXcgU2V0LGE9e2xlYWRJc0V4aXRpbmc6ITF9LGw9ci5fX2Fzc2lnbih7fSxhKSxzPXVvKCksYz0hMSx7YWRkOmZ1bmN0aW9uKGUpe2Uuc2V0Q3Jvc3NmYWRlcihzKSxpLmFkZChlKSxvJiYoZS5wcmV2RHJhZ0N1cnNvcj1vKSxhLmxlYWR8fChhLmxlYWQ9ZSl9LHJlbW92ZTpmdW5jdGlvbihlKXtpLmRlbGV0ZShlKX0sZ2V0TGVhZDpmdW5jdGlvbigpe3JldHVybiBhLmxlYWR9LHVwZGF0ZVNuYXBzaG90OmZ1bmN0aW9uKCl7aWYoYS5sZWFkKXt0PXMuaXNBY3RpdmUoKT9zLmdldExhdGVzdFZhbHVlcygpOmEubGVhZC5nZXRMYXRlc3RWYWx1ZXMoKSxuPWEubGVhZC5wcmV2Vmlld3BvcnRCb3g7dmFyIGU9bnIuZ2V0KGEubGVhZCk7ZSYmZS5pc0RyYWdnaW5nJiYobz1lLmN1cnNvclByb2dyZXNzKX19LGNsZWFyU25hcHNob3Q6ZnVuY3Rpb24oKXtvPW49dm9pZCAwfSx1cGRhdGVMZWFkQW5kRm9sbG93OmZ1bmN0aW9uKCl7dmFyIGUsbixvO2w9ci5fX2Fzc2lnbih7fSxhKTtmb3IodmFyIHU9QXJyYXkuZnJvbShpKSxmPXUubGVuZ3RoO2YtLTtmPj0wKXt2YXIgZD11W2ZdO2lmKG4mJihudWxsIT1vfHwobz1kKSksbnVsbCE9bnx8KG49ZCksbiYmbylicmVha31hLmxlYWQ9bixhLmZvbGxvdz1vLGEubGVhZElzRXhpdGluZz0obnVsbD09PShlPWEubGVhZCl8fHZvaWQgMD09PWU/dm9pZCAwOmUucHJlc2VuY2UpPT09aXIuRXhpdGluZyxzLnNldE9wdGlvbnMoe2xlYWQ6bixmb2xsb3c6byxwcmV2VmFsdWVzOnQsY3Jvc3NmYWRlT3BhY2l0eToobnVsbD09bz92b2lkIDA6by5pc1ByZXNlbmNlUm9vdCl8fChudWxsPT1uP3ZvaWQgMDpuLmlzUHJlc2VuY2VSb290KX0pLGEubGVhZD09PWwuZm9sbG93fHxsLmxlYWQ9PT1hLmxlYWQmJmwubGVhZElzRXhpdGluZz09PWEubGVhZElzRXhpdGluZ3x8KGM9ITApfSxhbmltYXRlOmZ1bmN0aW9uKGUsdCl7dmFyIHI7aWYodm9pZCAwPT09dCYmKHQ9ITEpLGU9PT1hLmxlYWQpe3Q/ZS5wb2ludFRvKGEubGVhZCk6ZS5zZXRWaXNpYmlsaXR5KCEwKTt2YXIgbz17fSxpPW51bGw9PT0ocj1hLmZvbGxvdyl8fHZvaWQgMD09PXI/dm9pZCAwOnIuZ2V0UHJvamVjdGlvblBhcmVudCgpO2lmKGkmJihvLnByZXZQYXJlbnQ9aSksZS5wcmVzZW5jZT09PWlyLkVudGVyaW5nP28ub3JpZ2luQm94PWEuZm9sbG93P2EuZm9sbG93LnByZXZWaWV3cG9ydEJveDpuOmUucHJlc2VuY2U9PT1pci5FeGl0aW5nJiYoby50YXJnZXRCb3g9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gbnVsbD09PShlPWEuZm9sbG93KXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5nZXRMYXlvdXRTdGF0ZSgpLmxheW91dH0oKSksYyl7Yz0hMTt2YXIgbD1lLmdldERlZmF1bHRUcmFuc2l0aW9uKCk7ZS5wcmVzZW5jZT09PWlyLkVudGVyaW5nP3MudG9MZWFkKGwpOnMuZnJvbUxlYWQobCl9ZS5ub3RpZnlMYXlvdXRSZWFkeShvKX1lbHNlIHQ/YS5sZWFkJiZlLnBvaW50VG8oYS5sZWFkKTplLnNldFZpc2liaWxpdHkoITEpfX0pKSx0aGlzLnN0YWNrcy5nZXQodSl9LHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiB1LmNyZWF0ZUVsZW1lbnQoX3IuUHJvdmlkZXIse3ZhbHVlOnRoaXMuc3luY0NvbnRleHR9LHRoaXMucHJvcHMuY2hpbGRyZW4pfSx0LmNvbnRleHRUeXBlPXcsdH0odS5Db21wb25lbnQpO2Z1bmN0aW9uIHlvKGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGV9dmFyIHdvPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7cmVuZGVyZXI6ZW99LG9uKSxwdCksYm89ci5fX2Fzc2lnbihyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sd28pLGxyKSxTcik7ZnVuY3Rpb24geG8oZSl7dmFyIHQ9XygoZnVuY3Rpb24oKXtyZXR1cm4gVnQoZSl9KSk7aWYoby51c2VDb250ZXh0KHkpLmlzU3RhdGljKXt2YXIgbj1yLl9fcmVhZChvLnVzZVN0YXRlKGUpLDIpWzFdO28udXNlRWZmZWN0KChmdW5jdGlvbigpe3JldHVybiB0Lm9uQ2hhbmdlKG4pfSksW10pfXJldHVybiB0fWZ1bmN0aW9uIF9vKGUsdCl7by51c2VFZmZlY3QoKGZ1bmN0aW9uKCl7aWYoZWUoZSkpcmV0dXJuIGUub25DaGFuZ2UodCl9KSxbdF0pfWZ1bmN0aW9uIE9vKGUsdCl7dmFyIG49eG8odCgpKSxyPWZ1bmN0aW9uKCl7cmV0dXJuIG4uc2V0KHQoKSl9O3JldHVybiByKCksZnVuY3Rpb24oZSx0KXtvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXt2YXIgbj1lLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUub25DaGFuZ2UodCl9KSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG4uZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUoKX0pKX19KSl9KGUsKGZ1bmN0aW9uKCl7cmV0dXJuIGQuZGVmYXVsdC51cGRhdGUociwhMSwhMCl9KSksbn12YXIgTG8sRW89ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiBlJiZlLm1peH0oZSk/ZS5taXg6dm9pZCAwfTtmdW5jdGlvbiBTbygpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTt2YXIgbj0hQXJyYXkuaXNBcnJheShlWzBdKSxvPW4/MDotMSxpPWVbMCtvXSxhPWVbMStvXSxzPWVbMitvXSxjPWVbMytvXSx1PWwuaW50ZXJwb2xhdGUoYSxzLHIuX19hc3NpZ24oe21peGVyOkVvKHNbMF0pfSxjKSk7cmV0dXJuIG4/dShpKTp1fWZ1bmN0aW9uIGpvKGUsdCxuLG8pe3ZhciBpPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpTbyh0LG4sbyk7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/TW8oZSxpKTpNbyhbZV0sKGZ1bmN0aW9uKGUpe3ZhciB0PXIuX19yZWFkKGUsMSlbMF07cmV0dXJuIGkodCl9KSl9ZnVuY3Rpb24gTW8oZSx0KXt2YXIgbj1fKChmdW5jdGlvbigpe3JldHVybltdfSkpO3JldHVybiBPbyhlLChmdW5jdGlvbigpe24ubGVuZ3RoPTA7Zm9yKHZhciByPWUubGVuZ3RoLG89MDtvPHI7bysrKW5bb109ZVtvXS5nZXQoKTtyZXR1cm4gdChuKX0pKX1mdW5jdGlvbiBrbygpe3JldHVybntzY3JvbGxYOlZ0KDApLHNjcm9sbFk6VnQoMCksc2Nyb2xsWFByb2dyZXNzOlZ0KDApLHNjcm9sbFlQcm9ncmVzczpWdCgwKX19ZnVuY3Rpb24gUm8oZSx0LG4pe24uc2V0KGUmJnQ/ZS90OjApfWZ1bmN0aW9uIFBvKGUsdCl7dmFyIG49ZnVuY3Rpb24oKXt2YXIgbj10KCkscj1uLnhPZmZzZXQsbz1uLnlPZmZzZXQsaT1uLnhNYXhPZmZzZXQsYT1uLnlNYXhPZmZzZXQ7ZS5zY3JvbGxYLnNldChyKSxlLnNjcm9sbFkuc2V0KG8pLFJvKHIsaSxlLnNjcm9sbFhQcm9ncmVzcyksUm8obyxhLGUuc2Nyb2xsWVByb2dyZXNzKX07cmV0dXJuIG4oKSxufWZ1bmN0aW9uIElvKCl7cmV0dXJue3hPZmZzZXQ6d2luZG93LnBhZ2VYT2Zmc2V0LHlPZmZzZXQ6d2luZG93LnBhZ2VZT2Zmc2V0LHhNYXhPZmZzZXQ6ZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aC13aW5kb3cuaW5uZXJXaWR0aCx5TWF4T2Zmc2V0OmRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0LXdpbmRvdy5pbm5lckhlaWdodH19dmFyIEFvLFRvPSExO2Z1bmN0aW9uIEhvKCl7dmFyIGU9ITEsdD1bXSxuPW5ldyBTZXQsbz17c3Vic2NyaWJlOmZ1bmN0aW9uKGUpe3JldHVybiBuLmFkZChlKSxmdW5jdGlvbigpe24uZGVsZXRlKGUpfX0sc3RhcnQ6ZnVuY3Rpb24ocixvKXtpZihlKXt2YXIgaT1bXTtyZXR1cm4gbi5mb3JFYWNoKChmdW5jdGlvbihlKXtpLnB1c2goWXQoZSxyLHt0cmFuc2l0aW9uT3ZlcnJpZGU6b30pKX0pKSxQcm9taXNlLmFsbChpKX1yZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe3QucHVzaCh7YW5pbWF0aW9uOltyLG9dLHJlc29sdmU6ZX0pfSkpfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGkuaW52YXJpYW50KGUsXCJjb250cm9scy5zZXQoKSBzaG91bGQgb25seSBiZSBjYWxsZWQgYWZ0ZXIgYSBjb21wb25lbnQgaGFzIG1vdW50ZWQuIENvbnNpZGVyIGNhbGxpbmcgd2l0aGluIGEgdXNlRWZmZWN0IGhvb2suXCIpLG4uZm9yRWFjaCgoZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7QXJyYXkuaXNBcnJheSh0KT9XdChlLHQpOlwic3RyaW5nXCI9PXR5cGVvZiB0P1d0KGUsW3RdKTpVdChlLHQpfShlLHQpfSkpfSxzdG9wOmZ1bmN0aW9uKCl7bi5mb3JFYWNoKChmdW5jdGlvbihlKXshZnVuY3Rpb24oZSl7ZS5mb3JFYWNoVmFsdWUoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnN0b3AoKX0pKX0oZSl9KSl9LG1vdW50OmZ1bmN0aW9uKCl7cmV0dXJuIGU9ITAsdC5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lLmFuaW1hdGlvbixuPWUucmVzb2x2ZTtvLnN0YXJ0LmFwcGx5KG8sci5fX3NwcmVhZEFycmF5KFtdLHIuX19yZWFkKHQpKSkudGhlbihuKX0pKSxmdW5jdGlvbigpe2U9ITEsby5zdG9wKCl9fX07cmV0dXJuIG99dmFyIEJvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuY29tcG9uZW50Q29udHJvbHM9bmV3IFNldH1yZXR1cm4gZS5wcm90b3R5cGUuc3Vic2NyaWJlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuY29tcG9uZW50Q29udHJvbHMuYWRkKGUpLGZ1bmN0aW9uKCl7cmV0dXJuIHQuY29tcG9uZW50Q29udHJvbHMuZGVsZXRlKGUpfX0sZS5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24oZSx0KXt0aGlzLmNvbXBvbmVudENvbnRyb2xzLmZvckVhY2goKGZ1bmN0aW9uKG4pe24uc3RhcnQoZS5uYXRpdmVFdmVudHx8ZSx0KX0pKX0sZS5wcm90b3R5cGUudXBkYXRlQ29uc3RyYWludHM9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9ITApLHRoaXMuY29tcG9uZW50Q29udHJvbHMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS51cGRhdGVDb25zdHJhaW50cygpfSkpLGUmJlFuKCl9LGV9KCksVm89ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEJvfSxEbz1mdW5jdGlvbigpe3JldHVybnt9fSxabz1Ucih7YnVpbGQ6ZnVuY3Rpb24oKXt9LG1lYXN1cmVWaWV3cG9ydEJveDpmdW5jdGlvbigpe3JldHVybnt4OnttaW46MCxtYXg6MX0seTp7bWluOjAsbWF4OjF9fX0scmVzZXRUcmFuc2Zvcm06ZnVuY3Rpb24oKXt9LHJlc3RvcmVUcmFuc2Zvcm06ZnVuY3Rpb24oKXt9LHJlbW92ZVZhbHVlRnJvbVJlbmRlclN0YXRlOmZ1bmN0aW9uKCl7fSxyZW5kZXI6ZnVuY3Rpb24oKXt9LHNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wczpEbyxyZWFkVmFsdWVGcm9tSW5zdGFuY2U6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuLmluaXRpYWxTdGF0ZVt0XXx8MH0sbWFrZVRhcmdldEFuaW1hdGFibGU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnRyYW5zaXRpb24sbz10LnRyYW5zaXRpb25FbmQsaT1yLl9fcmVzdCh0LFtcInRyYW5zaXRpb25cIixcInRyYW5zaXRpb25FbmRcIl0pO3JldHVybiB6dChlLGkscXQoaSxufHx7fSxlKSksci5fX2Fzc2lnbih7dHJhbnNpdGlvbjpuLHRyYW5zaXRpb25FbmQ6b30saSl9fSksJG89VGUoe3NjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wczpEbyxjcmVhdGVSZW5kZXJTdGF0ZTpEb30pLE5vPWZ1bmN0aW9uKGUpe3JldHVybiBlPi4wMDE/MS9lOjFlNX0sRm89ITE7dC5BbmltYXRlUHJlc2VuY2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jaGlsZHJlbixuPWUuY3VzdG9tLGk9ZS5pbml0aWFsLGE9dm9pZCAwPT09aXx8aSxsPWUub25FeGl0Q29tcGxldGUscz1lLmV4aXRCZWZvcmVFbnRlcixjPWUucHJlc2VuY2VBZmZlY3RzTGF5b3V0LGY9dm9pZCAwPT09Y3x8YyxkPWZ1bmN0aW9uKCl7dmFyIGU9by51c2VSZWYoITEpLHQ9ci5fX3JlYWQoby51c2VTdGF0ZSgwKSwyKSxuPXRbMF0saT10WzFdO3JldHVybiBmdCgoZnVuY3Rpb24oKXtyZXR1cm4gZS5jdXJyZW50PSEwfSkpLG8udXNlQ2FsbGJhY2soKGZ1bmN0aW9uKCl7IWUuY3VycmVudCYmaShuKzEpfSksW25dKX0oKSxwPW8udXNlQ29udGV4dChfcik7THIocCkmJihkPXAuZm9yY2VVcGRhdGUpO3ZhciBoPW8udXNlUmVmKCEwKSxnPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiBvLkNoaWxkcmVuLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7by5pc1ZhbGlkRWxlbWVudChlKSYmdC5wdXNoKGUpfSkpLHR9KHQpLHY9by51c2VSZWYoZyksbT1vLnVzZVJlZihuZXcgTWFwKS5jdXJyZW50LEM9by51c2VSZWYobmV3IFNldCkuY3VycmVudDtpZihmdW5jdGlvbihlLHQpe2UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49c28oZSk7dC5zZXQobixlKX0pKX0oZyxtKSxoLmN1cnJlbnQpcmV0dXJuIGguY3VycmVudD0hMSx1LmNyZWF0ZUVsZW1lbnQodS5GcmFnbWVudCxudWxsLGcubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gdS5jcmVhdGVFbGVtZW50KGFvLHtrZXk6c28oZSksaXNQcmVzZW50OiEwLGluaXRpYWw6ISFhJiZ2b2lkIDAscHJlc2VuY2VBZmZlY3RzTGF5b3V0OmZ9LGUpfSkpKTtmb3IodmFyIHk9ci5fX3NwcmVhZEFycmF5KFtdLHIuX19yZWFkKGcpKSx3PXYuY3VycmVudC5tYXAoc28pLGI9Zy5tYXAoc28pLHg9dy5sZW5ndGgsXz0wO188eDtfKyspe3ZhciBPPXdbX107LTE9PT1iLmluZGV4T2YoTyk/Qy5hZGQoTyk6Qy5kZWxldGUoTyl9cmV0dXJuIHMmJkMuc2l6ZSYmKHk9W10pLEMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYoLTE9PT1iLmluZGV4T2YoZSkpe3ZhciB0PW0uZ2V0KGUpO2lmKHQpe3ZhciByPXcuaW5kZXhPZihlKTt5LnNwbGljZShyLDAsdS5jcmVhdGVFbGVtZW50KGFvLHtrZXk6c28odCksaXNQcmVzZW50OiExLG9uRXhpdENvbXBsZXRlOmZ1bmN0aW9uKCl7bS5kZWxldGUoZSksQy5kZWxldGUoZSk7dmFyIHQ9di5jdXJyZW50LmZpbmRJbmRleCgoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5PT09ZX0pKTt2LmN1cnJlbnQuc3BsaWNlKHQsMSksQy5zaXplfHwodi5jdXJyZW50PWcsZCgpLGwmJmwoKSl9LGN1c3RvbTpuLHByZXNlbmNlQWZmZWN0c0xheW91dDpmfSx0KSl9fX0pKSx5PXkubWFwKChmdW5jdGlvbihlKXt2YXIgdD1lLmtleTtyZXR1cm4gQy5oYXModCk/ZTp1LmNyZWF0ZUVsZW1lbnQoYW8se2tleTpzbyhlKSxpc1ByZXNlbnQ6ITAscHJlc2VuY2VBZmZlY3RzTGF5b3V0OmZ9LGUpfSkpLHYuY3VycmVudD15LHUuY3JlYXRlRWxlbWVudCh1LkZyYWdtZW50LG51bGwsQy5zaXplP3k6eS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBvLmNsb25lRWxlbWVudChlKX0pKSl9LHQuQW5pbWF0ZVNoYXJlZExheW91dD1Dbyx0LkRyYWdDb250cm9scz1Cbyx0LkZsYXRUcmVlPUFyLHQuRnJhbWVyVHJlZUxheW91dENvbnRleHQ9T3IsdC5MYXlvdXRHcm91cENvbnRleHQ9TSx0LkxhenlNb3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jaGlsZHJlbixuPWUuZmVhdHVyZXMsaT1lLnN0cmljdCxhPXZvaWQgMCE9PWkmJmksbD1yLl9fcmVhZChvLnVzZVN0YXRlKCF5byhuKSksMilbMV0scz1vLnVzZVJlZih2b2lkIDApO2lmKCF5byhuKSl7dmFyIGM9bi5yZW5kZXJlcixmPXIuX19yZXN0KG4sW1wicmVuZGVyZXJcIl0pO3MuY3VycmVudD1jLGcoZil9cmV0dXJuIG8udXNlRWZmZWN0KChmdW5jdGlvbigpe3lvKG4pJiZuKCkudGhlbigoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZW5kZXJlcjtnKHIuX19yZXN0KGUsW1wicmVuZGVyZXJcIl0pKSxzLmN1cnJlbnQ9dCxsKCEwKX0pKX0pLFtdKSx1LmNyZWF0ZUVsZW1lbnQodi5Qcm92aWRlcix7dmFsdWU6e3JlbmRlcmVyOnMuY3VycmVudCxzdHJpY3Q6YX19LHQpfSx0Lk1vdGlvbkNvbmZpZz1mdW5jdGlvbihlKXt2YXIgdD1lLmNoaWxkcmVuLG49ci5fX3Jlc3QoZSxbXCJjaGlsZHJlblwiXSk7KG49ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LG8udXNlQ29udGV4dCh5KSksbikpLmlzU3RhdGljPV8oKGZ1bmN0aW9uKCl7cmV0dXJuIG4uaXNTdGF0aWN9KSk7dmFyIGk9XCJvYmplY3RcIj09dHlwZW9mIG4udHJhbnNpdGlvbj9uLnRyYW5zaXRpb24udG9TdHJpbmcoKTpcIlwiLGE9by51c2VNZW1vKChmdW5jdGlvbigpe3JldHVybiBufSksW2ksbi50cmFuc2Zvcm1QYWdlUG9pbnRdKTtyZXR1cm4gdS5jcmVhdGVFbGVtZW50KHkuUHJvdmlkZXIse3ZhbHVlOmF9LHQpfSx0Lk1vdGlvbkNvbmZpZ0NvbnRleHQ9eSx0Lk1vdGlvblZhbHVlPUJ0LHQuUHJlc2VuY2VDb250ZXh0PXgsdC5TaGFyZWRMYXlvdXRDb250ZXh0PV9yLHQuYWRkU2NhbGVDb3JyZWN0aW9uPVcsdC5hbmltYXRlPWNvLHQuYW5pbWF0ZVZpc3VhbEVsZW1lbnQ9WXQsdC5hbmltYXRpb25Db250cm9scz1Ibyx0LmJhdGNoTGF5b3V0PUpuLHQuY3JlYXRlQmF0Y2hlcj1icix0LmNyZWF0ZUNyb3NzZmFkZXI9dW8sdC5jcmVhdGVEb21Nb3Rpb25Db21wb25lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIFooWmUoZSx7Zm9yd2FyZE1vdGlvblByb3BzOiExfSx0byxlbykpfSx0LmNyZWF0ZU1vdGlvbkNvbXBvbmVudD1aLHQuZG9tQW5pbWF0aW9uPXdvLHQuZG9tTWF4PWJvLHQuZmx1c2hMYXlvdXQ9UW4sdC5pc1ZhbGlkTW90aW9uUHJvcD1mZSx0Lm09cm8sdC5tb3Rpb249bm8sdC5tb3Rpb25WYWx1ZT1WdCx0LnJlc29sdmVNb3Rpb25WYWx1ZT1JZSx0LnNuYXBzaG90Vmlld3BvcnRCb3g9QW4sdC50cmFuc2Zvcm09U28sdC51c2VBbmltYXRpb249ZnVuY3Rpb24oKXt2YXIgZT1fKEhvKTtyZXR1cm4gby51c2VFZmZlY3QoZS5tb3VudCxbXSksZX0sdC51c2VDeWNsZT1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTt2YXIgbj1vLnVzZVJlZigwKSxpPXIuX19yZWFkKG8udXNlU3RhdGUoZVtuLmN1cnJlbnRdKSwyKSxhPWlbMF0scz1pWzFdO3JldHVyblthLGZ1bmN0aW9uKHQpe24uY3VycmVudD1cIm51bWJlclwiIT10eXBlb2YgdD9sLndyYXAoMCxlLmxlbmd0aCxuLmN1cnJlbnQrMSk6dCxzKGVbbi5jdXJyZW50XSl9XX0sdC51c2VEZXByZWNhdGVkQW5pbWF0ZWRTdGF0ZT1mdW5jdGlvbihlKXt2YXIgdD1yLl9fcmVhZChvLnVzZVN0YXRlKGUpLDIpLG49dFswXSxpPXRbMV0sYT0kbyh7fSwhMSksbD1fKChmdW5jdGlvbigpe3JldHVybiBabyh7cHJvcHM6e30sdmlzdWFsU3RhdGU6YX0se2luaXRpYWxTdGF0ZTplfSl9KSk7cmV0dXJuIG8udXNlRWZmZWN0KChmdW5jdGlvbigpe3JldHVybiBsLm1vdW50KHt9KSxsLnVubW91bnQoKX0pLFtdKSxvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXtsLnNldFByb3BzKHtvblVwZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gaShyLl9fYXNzaWduKHt9LGUpKX19KX0pKSxbbixfKChmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gWXQobCxlKX19KSldfSx0LnVzZURlcHJlY2F0ZWRJbnZlcnRlZFNjYWxlPWZ1bmN0aW9uKGUpe3ZhciB0PXhvKDEpLG49eG8oMSkscj1iKCk7cmV0dXJuIGkuaW52YXJpYW50KCEoIWUmJiFyKSxcIklmIG5vIHNjYWxlIHZhbHVlcyBhcmUgcHJvdmlkZWQsIHVzZUludmVydGVkU2NhbGUgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIGNoaWxkIG9mIGFub3RoZXIgbW90aW9uIGNvbXBvbmVudC5cIiksaS53YXJuaW5nKEZvLFwidXNlSW52ZXJ0ZWRTY2FsZSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gMy4wLiBVc2UgdGhlIGxheW91dCBwcm9wIGluc3RlYWQuXCIpLEZvPSEwLGU/KHQ9ZS5zY2FsZVh8fHQsbj1lLnNjYWxlWXx8bik6ciYmKHQ9ci5nZXRWYWx1ZShcInNjYWxlWFwiLDEpLG49ci5nZXRWYWx1ZShcInNjYWxlWVwiLDEpKSx7c2NhbGVYOmpvKHQsTm8pLHNjYWxlWTpqbyhuLE5vKX19LHQudXNlRG9tRXZlbnQ9TmUsdC51c2VEcmFnQ29udHJvbHM9ZnVuY3Rpb24oKXtyZXR1cm4gXyhWbyl9LHQudXNlRWxlbWVudFNjcm9sbD1mdW5jdGlvbihlKXt2YXIgdD1fKGtvKTtyZXR1cm4gUigoZnVuY3Rpb24oKXt2YXIgbj1lLmN1cnJlbnQ7aWYoaS5pbnZhcmlhbnQoISFuLFwicmVmIHByb3ZpZGVkIHRvIHVzZVNjcm9sbCBtdXN0IGJlIHBhc3NlZCBpbnRvIGEgSFRNTCBlbGVtZW50LlwiKSxuKXt2YXIgcj1Qbyh0LGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybnt4T2Zmc2V0OmUuc2Nyb2xsTGVmdCx5T2Zmc2V0OmUuc2Nyb2xsVG9wLHhNYXhPZmZzZXQ6ZS5zY3JvbGxXaWR0aC1lLm9mZnNldFdpZHRoLHlNYXhPZmZzZXQ6ZS5zY3JvbGxIZWlnaHQtZS5vZmZzZXRIZWlnaHR9fX0obikpLG89JGUobixcInNjcm9sbFwiLHIse3Bhc3NpdmU6ITB9KSxhPSRlKG4sXCJyZXNpemVcIixyKTtyZXR1cm4gZnVuY3Rpb24oKXtvJiZvKCksYSYmYSgpfX19KSxbXSksdH0sdC51c2VJc1ByZXNlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gTChvLnVzZUNvbnRleHQoeCkpfSx0LnVzZU1vdGlvblRlbXBsYXRlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMV09YXJndW1lbnRzW25dO3ZhciByPWUubGVuZ3RoO3JldHVybiBPbyh0LChmdW5jdGlvbigpe2Zvcih2YXIgbj1cIlwiLG89MDtvPHI7bysrKW4rPWVbb10sdFtvXSYmKG4rPXRbb10uZ2V0KCkpO3JldHVybiBufSkpfSx0LnVzZU1vdGlvblZhbHVlPXhvLHQudXNlUHJlc2VuY2U9Tyx0LnVzZVJlZHVjZWRNb3Rpb249ZnVuY3Rpb24oKXshQW8mJmZ1bmN0aW9uKCl7aWYoQW89VnQobnVsbCksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdylpZih3aW5kb3cubWF0Y2hNZWRpYSl7dmFyIGU9d2luZG93Lm1hdGNoTWVkaWEoXCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbilcIiksdD1mdW5jdGlvbigpe3JldHVybiBBby5zZXQoZS5tYXRjaGVzKX07ZS5hZGRMaXN0ZW5lcih0KSx0KCl9ZWxzZSBBby5zZXQoITEpfSgpO3ZhciBlPXIuX19yZWFkKG8udXNlU3RhdGUoQW8uZ2V0KCkpLDIpLHQ9ZVswXSxuPWVbMV07cmV0dXJuIF9vKEFvLG4pLHR9LHQudXNlU3ByaW5nPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9e30pO3ZhciBuPW8udXNlQ29udGV4dCh5KS5pc1N0YXRpYyxpPW8udXNlUmVmKG51bGwpLGE9eG8oZWUoZSk/ZS5nZXQoKTplKTtyZXR1cm4gby51c2VNZW1vKChmdW5jdGlvbigpe3JldHVybiBhLmF0dGFjaCgoZnVuY3Rpb24oZSxvKXtyZXR1cm4gbj9vKGUpOihpLmN1cnJlbnQmJmkuY3VycmVudC5zdG9wKCksaS5jdXJyZW50PWwuYW5pbWF0ZShyLl9fYXNzaWduKHIuX19hc3NpZ24oe2Zyb206YS5nZXQoKSx0bzplLHZlbG9jaXR5OmEuZ2V0VmVsb2NpdHkoKX0sdCkse29uVXBkYXRlOm99KSksYS5nZXQoKSl9KSl9KSxPYmplY3QudmFsdWVzKHQpKSxfbyhlLChmdW5jdGlvbihlKXtyZXR1cm4gYS5zZXQocGFyc2VGbG9hdChlKSl9KSksYX0sdC51c2VUcmFuc2Zvcm09am8sdC51c2VWZWxvY2l0eT1mdW5jdGlvbihlKXt2YXIgdD14byhlLmdldFZlbG9jaXR5KCkpO3JldHVybiBvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gZS52ZWxvY2l0eVVwZGF0ZVN1YnNjcmliZXJzLmFkZCgoZnVuY3Rpb24oZSl7dC5zZXQoZSl9KSl9KSxbZV0pLHR9LHQudXNlVmlld3BvcnRTY3JvbGw9ZnVuY3Rpb24oKXtyZXR1cm4gTG98fChMbz1rbygpKSxSKChmdW5jdGlvbigpeyFUbyYmZnVuY3Rpb24oKXtpZihUbz0hMCxcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93KXt2YXIgZT1QbyhMbyxJbyk7JGUod2luZG93LFwic2Nyb2xsXCIsZSx7cGFzc2l2ZTohMH0pLCRlKHdpbmRvdyxcInJlc2l6ZVwiLGUpfX0oKX0pLFtdKSxMb30sdC52aXN1YWxFbGVtZW50PVRyfSw0ODM5OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIG49MS82MCoxZTMscj1cInVuZGVmaW5lZFwiIT10eXBlb2YgcGVyZm9ybWFuY2U/ZnVuY3Rpb24oKXtyZXR1cm4gcGVyZm9ybWFuY2Uubm93KCl9OmZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCl9LG89XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz9mdW5jdGlvbihlKXtyZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShlKX06ZnVuY3Rpb24oZSl7cmV0dXJuIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cmV0dXJuIGUocigpKX0pLG4pfSxpPSEwLGE9ITEsbD0hMSxzPXtkZWx0YTowLHRpbWVzdGFtcDowfSxjPVtcInJlYWRcIixcInVwZGF0ZVwiLFwicHJlUmVuZGVyXCIsXCJyZW5kZXJcIixcInBvc3RSZW5kZXJcIl0sdT1jLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XT1mdW5jdGlvbihlKXt2YXIgdD1bXSxuPVtdLHI9MCxvPSExLGk9bmV3IFdlYWtTZXQsYT17c2NoZWR1bGU6ZnVuY3Rpb24oZSxhLGwpe3ZvaWQgMD09PWEmJihhPSExKSx2b2lkIDA9PT1sJiYobD0hMSk7dmFyIHM9bCYmbyxjPXM/dDpuO3JldHVybiBhJiZpLmFkZChlKSwtMT09PWMuaW5kZXhPZihlKSYmKGMucHVzaChlKSxzJiZvJiYocj10Lmxlbmd0aCkpLGV9LGNhbmNlbDpmdW5jdGlvbihlKXt2YXIgdD1uLmluZGV4T2YoZSk7LTEhPT10JiZuLnNwbGljZSh0LDEpLGkuZGVsZXRlKGUpfSxwcm9jZXNzOmZ1bmN0aW9uKGwpe3ZhciBzO2lmKG89ITAsdD0ocz1bbix0XSlbMF0sKG49c1sxXSkubGVuZ3RoPTAscj10Lmxlbmd0aClmb3IodmFyIGM9MDtjPHI7YysrKXt2YXIgdT10W2NdO3UobCksaS5oYXModSkmJihhLnNjaGVkdWxlKHUpLGUoKSl9bz0hMX19O3JldHVybiBhfSgoZnVuY3Rpb24oKXtyZXR1cm4gYT0hMH0pKSxlfSkse30pLGY9Yy5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7dmFyIG49dVt0XTtyZXR1cm4gZVt0XT1mdW5jdGlvbihlLHQscil7cmV0dXJuIHZvaWQgMD09PXQmJih0PSExKSx2b2lkIDA9PT1yJiYocj0hMSksYXx8digpLG4uc2NoZWR1bGUoZSx0LHIpfSxlfSkse30pLGQ9Yy5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF09dVt0XS5jYW5jZWwsZX0pLHt9KSxwPWMucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlW3RdPWZ1bmN0aW9uKCl7cmV0dXJuIHVbdF0ucHJvY2VzcyhzKX0sZX0pLHt9KSxoPWZ1bmN0aW9uKGUpe3JldHVybiB1W2VdLnByb2Nlc3Mocyl9LGc9ZnVuY3Rpb24oZSl7YT0hMSxzLmRlbHRhPWk/bjpNYXRoLm1heChNYXRoLm1pbihlLXMudGltZXN0YW1wLDQwKSwxKSxzLnRpbWVzdGFtcD1lLGw9ITAsYy5mb3JFYWNoKGgpLGw9ITEsYSYmKGk9ITEsbyhnKSl9LHY9ZnVuY3Rpb24oKXthPSEwLGk9ITAsbHx8byhnKX07dC5jYW5jZWxTeW5jPWQsdC5kZWZhdWx0PWYsdC5mbHVzaFN5bmM9cCx0LmdldEZyYW1lRGF0YT1mdW5jdGlvbigpe3JldHVybiBzfX0sNDM5NDooZSx0LG4pPT57bi5yKHQpLG4uZCh0LHtpbnZhcmlhbnQ6KCk9Pm8sd2FybmluZzooKT0+cn0pO3ZhciByPWZ1bmN0aW9uKCl7fSxvPWZ1bmN0aW9uKCl7fX0sNzczOihlLHQsbik9Pnt2YXIgcixvPVwiX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfX1wiLGk9L15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLyxhPVwib2JqZWN0XCI9PXR5cGVvZiBuLmcmJm4uZyYmbi5nLk9iamVjdD09PU9iamVjdCYmbi5nLGw9XCJvYmplY3RcIj09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLHM9YXx8bHx8RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpLGM9QXJyYXkucHJvdG90eXBlLHU9RnVuY3Rpb24ucHJvdG90eXBlLGY9T2JqZWN0LnByb3RvdHlwZSxkPXNbXCJfX2NvcmUtanNfc2hhcmVkX19cIl0scD0ocj0vW14uXSskLy5leGVjKGQmJmQua2V5cyYmZC5rZXlzLklFX1BST1RPfHxcIlwiKSk/XCJTeW1ib2woc3JjKV8xLlwiK3I6XCJcIixoPXUudG9TdHJpbmcsZz1mLmhhc093blByb3BlcnR5LHY9Zi50b1N0cmluZyxtPVJlZ0V4cChcIl5cIitoLmNhbGwoZykucmVwbGFjZSgvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2csXCJcXFxcJCZcIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZyxcIiQxLio/XCIpK1wiJFwiKSxDPWMuc3BsaWNlLHk9RShzLFwiTWFwXCIpLHc9RShPYmplY3QsXCJjcmVhdGVcIik7ZnVuY3Rpb24gYihlKXt2YXIgdD0tMSxuPWU/ZS5sZW5ndGg6MDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiB4KGUpe3ZhciB0PS0xLG49ZT9lLmxlbmd0aDowO2Zvcih0aGlzLmNsZWFyKCk7Kyt0PG47KXt2YXIgcj1lW3RdO3RoaXMuc2V0KHJbMF0sclsxXSl9fWZ1bmN0aW9uIF8oZSl7dmFyIHQ9LTEsbj1lP2UubGVuZ3RoOjA7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24gTyhlLHQpe2Zvcih2YXIgbixyLG89ZS5sZW5ndGg7by0tOylpZigobj1lW29dWzBdKT09PShyPXQpfHxuIT1uJiZyIT1yKXJldHVybiBvO3JldHVybi0xfWZ1bmN0aW9uIEwoZSx0KXt2YXIgbixyLG89ZS5fX2RhdGFfXztyZXR1cm4oXCJzdHJpbmdcIj09KHI9dHlwZW9mKG49dCkpfHxcIm51bWJlclwiPT1yfHxcInN5bWJvbFwiPT1yfHxcImJvb2xlYW5cIj09cj9cIl9fcHJvdG9fX1wiIT09bjpudWxsPT09bik/b1tcInN0cmluZ1wiPT10eXBlb2YgdD9cInN0cmluZ1wiOlwiaGFzaFwiXTpvLm1hcH1mdW5jdGlvbiBFKGUsdCl7dmFyIG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZT92b2lkIDA6ZVt0XX0oZSx0KTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoIWooZSl8fHAmJnAgaW4gZSlyZXR1cm4hMTt2YXIgdD1mdW5jdGlvbihlKXt2YXIgdD1qKGUpP3YuY2FsbChlKTpcIlwiO3JldHVyblwiW29iamVjdCBGdW5jdGlvbl1cIj09dHx8XCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXVwiPT10fShlKXx8ZnVuY3Rpb24oZSl7dmFyIHQ9ITE7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZS50b1N0cmluZyl0cnl7dD0hIShlK1wiXCIpfWNhdGNoKGUpe31yZXR1cm4gdH0oZSk/bTppO3JldHVybiB0LnRlc3QoZnVuY3Rpb24oZSl7aWYobnVsbCE9ZSl7dHJ5e3JldHVybiBoLmNhbGwoZSl9Y2F0Y2goZSl7fXRyeXtyZXR1cm4gZStcIlwifWNhdGNoKGUpe319cmV0dXJuXCJcIn0oZSkpfShuKT9uOnZvaWQgMH1mdW5jdGlvbiBTKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZXx8dCYmXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgYSBmdW5jdGlvblwiKTt2YXIgbj1mdW5jdGlvbigpe3ZhciByPWFyZ3VtZW50cyxvPXQ/dC5hcHBseSh0aGlzLHIpOnJbMF0saT1uLmNhY2hlO2lmKGkuaGFzKG8pKXJldHVybiBpLmdldChvKTt2YXIgYT1lLmFwcGx5KHRoaXMscik7cmV0dXJuIG4uY2FjaGU9aS5zZXQobyxhKSxhfTtyZXR1cm4gbi5jYWNoZT1uZXcoUy5DYWNoZXx8Xyksbn1mdW5jdGlvbiBqKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiEhZSYmKFwib2JqZWN0XCI9PXR8fFwiZnVuY3Rpb25cIj09dCl9Yi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPXc/dyhudWxsKTp7fX0sYi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmhhcyhlKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bZV19LGIucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fO2lmKHcpe3ZhciBuPXRbZV07cmV0dXJuIG49PT1vP3ZvaWQgMDpufXJldHVybiBnLmNhbGwodCxlKT90W2VdOnZvaWQgMH0sYi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX187cmV0dXJuIHc/dm9pZCAwIT09dFtlXTpnLmNhbGwodCxlKX0sYi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX19kYXRhX19bZV09dyYmdm9pZCAwPT09dD9vOnQsdGhpc30seC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPVtdfSx4LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxuPU8odCxlKTtyZXR1cm4hKG48MHx8KG49PXQubGVuZ3RoLTE/dC5wb3AoKTpDLmNhbGwodCxuLDEpLDApKX0seC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX18sbj1PKHQsZSk7cmV0dXJuIG48MD92b2lkIDA6dFtuXVsxXX0seC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiBPKHRoaXMuX19kYXRhX18sZSk+LTF9LHgucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX19kYXRhX18scj1PKG4sZSk7cmV0dXJuIHI8MD9uLnB1c2goW2UsdF0pOm5bcl1bMV09dCx0aGlzfSxfLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189e2hhc2g6bmV3IGIsbWFwOm5ldyh5fHx4KSxzdHJpbmc6bmV3IGJ9fSxfLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oZSl7cmV0dXJuIEwodGhpcyxlKS5kZWxldGUoZSl9LF8ucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gTCh0aGlzLGUpLmdldChlKX0sXy5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiBMKHRoaXMsZSkuaGFzKGUpfSxfLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTCh0aGlzLGUpLnNldChlLHQpLHRoaXN9LFMuQ2FjaGU9XyxlLmV4cG9ydHM9U30sNjQ4NjpmdW5jdGlvbihlLHQsbil7dmFyIHI7ZT1uLm5tZChlKSxmdW5jdGlvbigpe3ZhciBvLGk9XCJFeHBlY3RlZCBhIGZ1bmN0aW9uXCIsYT1cIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX19cIixsPVwiX19sb2Rhc2hfcGxhY2Vob2xkZXJfX1wiLHM9MzIsYz0xMjgsdT0xLzAsZj05MDA3MTk5MjU0NzQwOTkxLGQ9TmFOLHA9NDI5NDk2NzI5NSxoPVtbXCJhcnlcIixjXSxbXCJiaW5kXCIsMV0sW1wiYmluZEtleVwiLDJdLFtcImN1cnJ5XCIsOF0sW1wiY3VycnlSaWdodFwiLDE2XSxbXCJmbGlwXCIsNTEyXSxbXCJwYXJ0aWFsXCIsc10sW1wicGFydGlhbFJpZ2h0XCIsNjRdLFtcInJlYXJnXCIsMjU2XV0sZz1cIltvYmplY3QgQXJndW1lbnRzXVwiLHY9XCJbb2JqZWN0IEFycmF5XVwiLG09XCJbb2JqZWN0IEJvb2xlYW5dXCIsQz1cIltvYmplY3QgRGF0ZV1cIix5PVwiW29iamVjdCBFcnJvcl1cIix3PVwiW29iamVjdCBGdW5jdGlvbl1cIixiPVwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl1cIix4PVwiW29iamVjdCBNYXBdXCIsXz1cIltvYmplY3QgTnVtYmVyXVwiLE89XCJbb2JqZWN0IE9iamVjdF1cIixMPVwiW29iamVjdCBQcm9taXNlXVwiLEU9XCJbb2JqZWN0IFJlZ0V4cF1cIixTPVwiW29iamVjdCBTZXRdXCIsaj1cIltvYmplY3QgU3RyaW5nXVwiLE09XCJbb2JqZWN0IFN5bWJvbF1cIixrPVwiW29iamVjdCBXZWFrTWFwXVwiLFI9XCJbb2JqZWN0IEFycmF5QnVmZmVyXVwiLFA9XCJbb2JqZWN0IERhdGFWaWV3XVwiLEk9XCJbb2JqZWN0IEZsb2F0MzJBcnJheV1cIixBPVwiW29iamVjdCBGbG9hdDY0QXJyYXldXCIsVD1cIltvYmplY3QgSW50OEFycmF5XVwiLEg9XCJbb2JqZWN0IEludDE2QXJyYXldXCIsQj1cIltvYmplY3QgSW50MzJBcnJheV1cIixWPVwiW29iamVjdCBVaW50OEFycmF5XVwiLEQ9XCJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XVwiLFo9XCJbb2JqZWN0IFVpbnQxNkFycmF5XVwiLCQ9XCJbb2JqZWN0IFVpbnQzMkFycmF5XVwiLE49L1xcYl9fcCBcXCs9ICcnOy9nLEY9L1xcYihfX3AgXFwrPSkgJycgXFwrL2csVT0vKF9fZVxcKC4qP1xcKXxcXGJfX3RcXCkpIFxcK1xcbicnOy9nLFc9LyYoPzphbXB8bHR8Z3R8cXVvdHwjMzkpOy9nLHo9L1smPD5cIiddL2csRz1SZWdFeHAoVy5zb3VyY2UpLHE9UmVnRXhwKHouc291cmNlKSxZPS88JS0oW1xcc1xcU10rPyklPi9nLEs9LzwlKFtcXHNcXFNdKz8pJT4vZyxYPS88JT0oW1xcc1xcU10rPyklPi9nLEo9L1xcLnxcXFsoPzpbXltcXF1dKnwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKj9cXDEpXFxdLyxRPS9eXFx3KiQvLGVlPS9bXi5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwkKSkvZyx0ZT0vW1xcXFxeJC4qKz8oKVtcXF17fXxdL2csbmU9UmVnRXhwKHRlLnNvdXJjZSkscmU9L15cXHMrLyxvZT0vXFxzLyxpZT0vXFx7KD86XFxuXFwvXFwqIFxcW3dyYXBwZWQgd2l0aCAuK1xcXSBcXCpcXC8pP1xcbj8vLGFlPS9cXHtcXG5cXC9cXCogXFxbd3JhcHBlZCB3aXRoICguKylcXF0gXFwqLyxsZT0vLD8gJiAvLHNlPS9bXlxceDAwLVxceDJmXFx4M2EtXFx4NDBcXHg1Yi1cXHg2MFxceDdiLVxceDdmXSsvZyxjZT0vWygpPSx7fVxcW1xcXVxcL1xcc10vLHVlPS9cXFxcKFxcXFwpPy9nLGZlPS9cXCRcXHsoW15cXFxcfV0qKD86XFxcXC5bXlxcXFx9XSopKilcXH0vZyxkZT0vXFx3KiQvLHBlPS9eWy0rXTB4WzAtOWEtZl0rJC9pLGhlPS9eMGJbMDFdKyQvaSxnZT0vXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvLHZlPS9eMG9bMC03XSskL2ksbWU9L14oPzowfFsxLTldXFxkKikkLyxDZT0vW1xceGMwLVxceGQ2XFx4ZDgtXFx4ZjZcXHhmOC1cXHhmZlxcdTAxMDAtXFx1MDE3Zl0vZyx5ZT0vKCReKS8sd2U9L1snXFxuXFxyXFx1MjAyOFxcdTIwMjlcXFxcXS9nLGJlPVwiXFxcXHVkODAwLVxcXFx1ZGZmZlwiLHhlPVwiXFxcXHUwMzAwLVxcXFx1MDM2ZlxcXFx1ZmUyMC1cXFxcdWZlMmZcXFxcdTIwZDAtXFxcXHUyMGZmXCIsX2U9XCJcXFxcdTI3MDAtXFxcXHUyN2JmXCIsT2U9XCJhLXpcXFxceGRmLVxcXFx4ZjZcXFxceGY4LVxcXFx4ZmZcIixMZT1cIkEtWlxcXFx4YzAtXFxcXHhkNlxcXFx4ZDgtXFxcXHhkZVwiLEVlPVwiXFxcXHVmZTBlXFxcXHVmZTBmXCIsU2U9XCJcXFxceGFjXFxcXHhiMVxcXFx4ZDdcXFxceGY3XFxcXHgwMC1cXFxceDJmXFxcXHgzYS1cXFxceDQwXFxcXHg1Yi1cXFxceDYwXFxcXHg3Yi1cXFxceGJmXFxcXHUyMDAwLVxcXFx1MjA2ZiBcXFxcdFxcXFx4MGJcXFxcZlxcXFx4YTBcXFxcdWZlZmZcXFxcblxcXFxyXFxcXHUyMDI4XFxcXHUyMDI5XFxcXHUxNjgwXFxcXHUxODBlXFxcXHUyMDAwXFxcXHUyMDAxXFxcXHUyMDAyXFxcXHUyMDAzXFxcXHUyMDA0XFxcXHUyMDA1XFxcXHUyMDA2XFxcXHUyMDA3XFxcXHUyMDA4XFxcXHUyMDA5XFxcXHUyMDBhXFxcXHUyMDJmXFxcXHUyMDVmXFxcXHUzMDAwXCIsamU9XCJbXCIrYmUrXCJdXCIsTWU9XCJbXCIrU2UrXCJdXCIsa2U9XCJbXCIreGUrXCJdXCIsUmU9XCJcXFxcZCtcIixQZT1cIltcIitfZStcIl1cIixJZT1cIltcIitPZStcIl1cIixBZT1cIlteXCIrYmUrU2UrUmUrX2UrT2UrTGUrXCJdXCIsVGU9XCJcXFxcdWQ4M2NbXFxcXHVkZmZiLVxcXFx1ZGZmZl1cIixIZT1cIlteXCIrYmUrXCJdXCIsQmU9XCIoPzpcXFxcdWQ4M2NbXFxcXHVkZGU2LVxcXFx1ZGRmZl0pezJ9XCIsVmU9XCJbXFxcXHVkODAwLVxcXFx1ZGJmZl1bXFxcXHVkYzAwLVxcXFx1ZGZmZl1cIixEZT1cIltcIitMZStcIl1cIixaZT1cIlxcXFx1MjAwZFwiLCRlPVwiKD86XCIrSWUrXCJ8XCIrQWUrXCIpXCIsTmU9XCIoPzpcIitEZStcInxcIitBZStcIilcIixGZT1cIig/Olsn4oCZXSg/OmR8bGx8bXxyZXxzfHR8dmUpKT9cIixVZT1cIig/Olsn4oCZXSg/OkR8TEx8TXxSRXxTfFR8VkUpKT9cIixXZT1cIig/OlwiK2tlK1wifFwiK1RlK1wiKT9cIix6ZT1cIltcIitFZStcIl0/XCIsR2U9emUrV2UrXCIoPzpcIitaZStcIig/OlwiK1tIZSxCZSxWZV0uam9pbihcInxcIikrXCIpXCIremUrV2UrXCIpKlwiLHFlPVwiKD86XCIrW1BlLEJlLFZlXS5qb2luKFwifFwiKStcIilcIitHZSxZZT1cIig/OlwiK1tIZStrZStcIj9cIixrZSxCZSxWZSxqZV0uam9pbihcInxcIikrXCIpXCIsS2U9UmVnRXhwKFwiWyfigJldXCIsXCJnXCIpLFhlPVJlZ0V4cChrZSxcImdcIiksSmU9UmVnRXhwKFRlK1wiKD89XCIrVGUrXCIpfFwiK1llK0dlLFwiZ1wiKSxRZT1SZWdFeHAoW0RlK1wiP1wiK0llK1wiK1wiK0ZlK1wiKD89XCIrW01lLERlLFwiJFwiXS5qb2luKFwifFwiKStcIilcIixOZStcIitcIitVZStcIig/PVwiK1tNZSxEZSskZSxcIiRcIl0uam9pbihcInxcIikrXCIpXCIsRGUrXCI/XCIrJGUrXCIrXCIrRmUsRGUrXCIrXCIrVWUsXCJcXFxcZCooPzoxU1R8Mk5EfDNSRHwoPyFbMTIzXSlcXFxcZFRIKSg/PVxcXFxifFthLXpfXSlcIixcIlxcXFxkKig/OjFzdHwybmR8M3JkfCg/IVsxMjNdKVxcXFxkdGgpKD89XFxcXGJ8W0EtWl9dKVwiLFJlLHFlXS5qb2luKFwifFwiKSxcImdcIiksZXQ9UmVnRXhwKFwiW1wiK1plK2JlK3hlK0VlK1wiXVwiKSx0dD0vW2Etel1bQS1aXXxbQS1aXXsyfVthLXpdfFswLTldW2EtekEtWl18W2EtekEtWl1bMC05XXxbXmEtekEtWjAtOSBdLyxudD1bXCJBcnJheVwiLFwiQnVmZmVyXCIsXCJEYXRhVmlld1wiLFwiRGF0ZVwiLFwiRXJyb3JcIixcIkZsb2F0MzJBcnJheVwiLFwiRmxvYXQ2NEFycmF5XCIsXCJGdW5jdGlvblwiLFwiSW50OEFycmF5XCIsXCJJbnQxNkFycmF5XCIsXCJJbnQzMkFycmF5XCIsXCJNYXBcIixcIk1hdGhcIixcIk9iamVjdFwiLFwiUHJvbWlzZVwiLFwiUmVnRXhwXCIsXCJTZXRcIixcIlN0cmluZ1wiLFwiU3ltYm9sXCIsXCJUeXBlRXJyb3JcIixcIlVpbnQ4QXJyYXlcIixcIlVpbnQ4Q2xhbXBlZEFycmF5XCIsXCJVaW50MTZBcnJheVwiLFwiVWludDMyQXJyYXlcIixcIldlYWtNYXBcIixcIl9cIixcImNsZWFyVGltZW91dFwiLFwiaXNGaW5pdGVcIixcInBhcnNlSW50XCIsXCJzZXRUaW1lb3V0XCJdLHJ0PS0xLG90PXt9O290W0ldPW90W0FdPW90W1RdPW90W0hdPW90W0JdPW90W1ZdPW90W0RdPW90W1pdPW90WyRdPSEwLG90W2ddPW90W3ZdPW90W1JdPW90W21dPW90W1BdPW90W0NdPW90W3ldPW90W3ddPW90W3hdPW90W19dPW90W09dPW90W0VdPW90W1NdPW90W2pdPW90W2tdPSExO3ZhciBpdD17fTtpdFtnXT1pdFt2XT1pdFtSXT1pdFtQXT1pdFttXT1pdFtDXT1pdFtJXT1pdFtBXT1pdFtUXT1pdFtIXT1pdFtCXT1pdFt4XT1pdFtfXT1pdFtPXT1pdFtFXT1pdFtTXT1pdFtqXT1pdFtNXT1pdFtWXT1pdFtEXT1pdFtaXT1pdFskXT0hMCxpdFt5XT1pdFt3XT1pdFtrXT0hMTt2YXIgYXQ9e1wiXFxcXFwiOlwiXFxcXFwiLFwiJ1wiOlwiJ1wiLFwiXFxuXCI6XCJuXCIsXCJcXHJcIjpcInJcIixcIlxcdTIwMjhcIjpcInUyMDI4XCIsXCJcXHUyMDI5XCI6XCJ1MjAyOVwifSxsdD1wYXJzZUZsb2F0LHN0PXBhcnNlSW50LGN0PVwib2JqZWN0XCI9PXR5cGVvZiBuLmcmJm4uZyYmbi5nLk9iamVjdD09PU9iamVjdCYmbi5nLHV0PVwib2JqZWN0XCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixmdD1jdHx8dXR8fEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSxkdD10JiYhdC5ub2RlVHlwZSYmdCxwdD1kdCYmZSYmIWUubm9kZVR5cGUmJmUsaHQ9cHQmJnB0LmV4cG9ydHM9PT1kdCxndD1odCYmY3QucHJvY2Vzcyx2dD1mdW5jdGlvbigpe3RyeXtyZXR1cm4gcHQmJnB0LnJlcXVpcmUmJnB0LnJlcXVpcmUoXCJ1dGlsXCIpLnR5cGVzfHxndCYmZ3QuYmluZGluZyYmZ3QuYmluZGluZyhcInV0aWxcIil9Y2F0Y2goZSl7fX0oKSxtdD12dCYmdnQuaXNBcnJheUJ1ZmZlcixDdD12dCYmdnQuaXNEYXRlLHl0PXZ0JiZ2dC5pc01hcCx3dD12dCYmdnQuaXNSZWdFeHAsYnQ9dnQmJnZ0LmlzU2V0LHh0PXZ0JiZ2dC5pc1R5cGVkQXJyYXk7ZnVuY3Rpb24gX3QoZSx0LG4pe3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBlLmNhbGwodCk7Y2FzZSAxOnJldHVybiBlLmNhbGwodCxuWzBdKTtjYXNlIDI6cmV0dXJuIGUuY2FsbCh0LG5bMF0sblsxXSk7Y2FzZSAzOnJldHVybiBlLmNhbGwodCxuWzBdLG5bMV0sblsyXSl9cmV0dXJuIGUuYXBwbHkodCxuKX1mdW5jdGlvbiBPdChlLHQsbixyKXtmb3IodmFyIG89LTEsaT1udWxsPT1lPzA6ZS5sZW5ndGg7KytvPGk7KXt2YXIgYT1lW29dO3QocixhLG4oYSksZSl9cmV0dXJuIHJ9ZnVuY3Rpb24gTHQoZSx0KXtmb3IodmFyIG49LTEscj1udWxsPT1lPzA6ZS5sZW5ndGg7KytuPHImJiExIT09dChlW25dLG4sZSk7KTtyZXR1cm4gZX1mdW5jdGlvbiBFdChlLHQpe2Zvcih2YXIgbj1udWxsPT1lPzA6ZS5sZW5ndGg7bi0tJiYhMSE9PXQoZVtuXSxuLGUpOyk7cmV0dXJuIGV9ZnVuY3Rpb24gU3QoZSx0KXtmb3IodmFyIG49LTEscj1udWxsPT1lPzA6ZS5sZW5ndGg7KytuPHI7KWlmKCF0KGVbbl0sbixlKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBqdChlLHQpe2Zvcih2YXIgbj0tMSxyPW51bGw9PWU/MDplLmxlbmd0aCxvPTAsaT1bXTsrK248cjspe3ZhciBhPWVbbl07dChhLG4sZSkmJihpW28rK109YSl9cmV0dXJuIGl9ZnVuY3Rpb24gTXQoZSx0KXtyZXR1cm4hKG51bGw9PWV8fCFlLmxlbmd0aCkmJkR0KGUsdCwwKT4tMX1mdW5jdGlvbiBrdChlLHQsbil7Zm9yKHZhciByPS0xLG89bnVsbD09ZT8wOmUubGVuZ3RoOysrcjxvOylpZihuKHQsZVtyXSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gUnQoZSx0KXtmb3IodmFyIG49LTEscj1udWxsPT1lPzA6ZS5sZW5ndGgsbz1BcnJheShyKTsrK248cjspb1tuXT10KGVbbl0sbixlKTtyZXR1cm4gb31mdW5jdGlvbiBQdChlLHQpe2Zvcih2YXIgbj0tMSxyPXQubGVuZ3RoLG89ZS5sZW5ndGg7KytuPHI7KWVbbytuXT10W25dO3JldHVybiBlfWZ1bmN0aW9uIEl0KGUsdCxuLHIpe3ZhciBvPS0xLGk9bnVsbD09ZT8wOmUubGVuZ3RoO2ZvcihyJiZpJiYobj1lWysrb10pOysrbzxpOyluPXQobixlW29dLG8sZSk7cmV0dXJuIG59ZnVuY3Rpb24gQXQoZSx0LG4scil7dmFyIG89bnVsbD09ZT8wOmUubGVuZ3RoO2ZvcihyJiZvJiYobj1lWy0tb10pO28tLTspbj10KG4sZVtvXSxvLGUpO3JldHVybiBufWZ1bmN0aW9uIFR0KGUsdCl7Zm9yKHZhciBuPS0xLHI9bnVsbD09ZT8wOmUubGVuZ3RoOysrbjxyOylpZih0KGVbbl0sbixlKSlyZXR1cm4hMDtyZXR1cm4hMX12YXIgSHQ9RnQoXCJsZW5ndGhcIik7ZnVuY3Rpb24gQnQoZSx0LG4pe3ZhciByO3JldHVybiBuKGUsKGZ1bmN0aW9uKGUsbixvKXtpZih0KGUsbixvKSlyZXR1cm4gcj1uLCExfSkpLHJ9ZnVuY3Rpb24gVnQoZSx0LG4scil7Zm9yKHZhciBvPWUubGVuZ3RoLGk9bisocj8xOi0xKTtyP2ktLTorK2k8bzspaWYodChlW2ldLGksZSkpcmV0dXJuIGk7cmV0dXJuLTF9ZnVuY3Rpb24gRHQoZSx0LG4pe3JldHVybiB0PT10P2Z1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bi0xLG89ZS5sZW5ndGg7KytyPG87KWlmKGVbcl09PT10KXJldHVybiByO3JldHVybi0xfShlLHQsbik6VnQoZSwkdCxuKX1mdW5jdGlvbiBadChlLHQsbixyKXtmb3IodmFyIG89bi0xLGk9ZS5sZW5ndGg7KytvPGk7KWlmKHIoZVtvXSx0KSlyZXR1cm4gbztyZXR1cm4tMX1mdW5jdGlvbiAkdChlKXtyZXR1cm4gZSE9ZX1mdW5jdGlvbiBOdChlLHQpe3ZhciBuPW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gbj96dChlLHQpL246ZH1mdW5jdGlvbiBGdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/bzp0W2VdfX1mdW5jdGlvbiBVdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PWU/bzplW3RdfX1mdW5jdGlvbiBXdChlLHQsbixyLG8pe3JldHVybiBvKGUsKGZ1bmN0aW9uKGUsbyxpKXtuPXI/KHI9ITEsZSk6dChuLGUsbyxpKX0pKSxufWZ1bmN0aW9uIHp0KGUsdCl7Zm9yKHZhciBuLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspe3ZhciBhPXQoZVtyXSk7YSE9PW8mJihuPW49PT1vP2E6bithKX1yZXR1cm4gbn1mdW5jdGlvbiBHdChlLHQpe2Zvcih2YXIgbj0tMSxyPUFycmF5KGUpOysrbjxlOylyW25dPXQobik7cmV0dXJuIHJ9ZnVuY3Rpb24gcXQoZSl7cmV0dXJuIGU/ZS5zbGljZSgwLGZuKGUpKzEpLnJlcGxhY2UocmUsXCJcIik6ZX1mdW5jdGlvbiBZdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCl9fWZ1bmN0aW9uIEt0KGUsdCl7cmV0dXJuIFJ0KHQsKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfSkpfWZ1bmN0aW9uIFh0KGUsdCl7cmV0dXJuIGUuaGFzKHQpfWZ1bmN0aW9uIEp0KGUsdCl7Zm9yKHZhciBuPS0xLHI9ZS5sZW5ndGg7KytuPHImJkR0KHQsZVtuXSwwKT4tMTspO3JldHVybiBufWZ1bmN0aW9uIFF0KGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoO24tLSYmRHQodCxlW25dLDApPi0xOyk7cmV0dXJuIG59dmFyIGVuPVV0KHvDgDpcIkFcIizDgTpcIkFcIizDgjpcIkFcIizDgzpcIkFcIizDhDpcIkFcIizDhTpcIkFcIizDoDpcImFcIizDoTpcImFcIizDojpcImFcIizDozpcImFcIizDpDpcImFcIizDpTpcImFcIizDhzpcIkNcIizDpzpcImNcIizDkDpcIkRcIizDsDpcImRcIizDiDpcIkVcIizDiTpcIkVcIizDijpcIkVcIizDizpcIkVcIizDqDpcImVcIizDqTpcImVcIizDqjpcImVcIizDqzpcImVcIizDjDpcIklcIizDjTpcIklcIizDjjpcIklcIizDjzpcIklcIizDrDpcImlcIizDrTpcImlcIizDrjpcImlcIizDrzpcImlcIizDkTpcIk5cIizDsTpcIm5cIizDkjpcIk9cIizDkzpcIk9cIizDlDpcIk9cIizDlTpcIk9cIizDljpcIk9cIizDmDpcIk9cIizDsjpcIm9cIizDszpcIm9cIizDtDpcIm9cIizDtTpcIm9cIizDtjpcIm9cIizDuDpcIm9cIizDmTpcIlVcIizDmjpcIlVcIizDmzpcIlVcIizDnDpcIlVcIizDuTpcInVcIizDujpcInVcIizDuzpcInVcIizDvDpcInVcIizDnTpcIllcIizDvTpcInlcIizDvzpcInlcIizDhjpcIkFlXCIsw6Y6XCJhZVwiLMOeOlwiVGhcIizDvjpcInRoXCIsw586XCJzc1wiLMSAOlwiQVwiLMSCOlwiQVwiLMSEOlwiQVwiLMSBOlwiYVwiLMSDOlwiYVwiLMSFOlwiYVwiLMSGOlwiQ1wiLMSIOlwiQ1wiLMSKOlwiQ1wiLMSMOlwiQ1wiLMSHOlwiY1wiLMSJOlwiY1wiLMSLOlwiY1wiLMSNOlwiY1wiLMSOOlwiRFwiLMSQOlwiRFwiLMSPOlwiZFwiLMSROlwiZFwiLMSSOlwiRVwiLMSUOlwiRVwiLMSWOlwiRVwiLMSYOlwiRVwiLMSaOlwiRVwiLMSTOlwiZVwiLMSVOlwiZVwiLMSXOlwiZVwiLMSZOlwiZVwiLMSbOlwiZVwiLMScOlwiR1wiLMSeOlwiR1wiLMSgOlwiR1wiLMSiOlwiR1wiLMSdOlwiZ1wiLMSfOlwiZ1wiLMShOlwiZ1wiLMSjOlwiZ1wiLMSkOlwiSFwiLMSmOlwiSFwiLMSlOlwiaFwiLMSnOlwiaFwiLMSoOlwiSVwiLMSqOlwiSVwiLMSsOlwiSVwiLMSuOlwiSVwiLMSwOlwiSVwiLMSpOlwiaVwiLMSrOlwiaVwiLMStOlwiaVwiLMSvOlwiaVwiLMSxOlwiaVwiLMS0OlwiSlwiLMS1OlwialwiLMS2OlwiS1wiLMS3Olwia1wiLMS4Olwia1wiLMS5OlwiTFwiLMS7OlwiTFwiLMS9OlwiTFwiLMS/OlwiTFwiLMWBOlwiTFwiLMS6OlwibFwiLMS8OlwibFwiLMS+OlwibFwiLMWAOlwibFwiLMWCOlwibFwiLMWDOlwiTlwiLMWFOlwiTlwiLMWHOlwiTlwiLMWKOlwiTlwiLMWEOlwiblwiLMWGOlwiblwiLMWIOlwiblwiLMWLOlwiblwiLMWMOlwiT1wiLMWOOlwiT1wiLMWQOlwiT1wiLMWNOlwib1wiLMWPOlwib1wiLMWROlwib1wiLMWUOlwiUlwiLMWWOlwiUlwiLMWYOlwiUlwiLMWVOlwiclwiLMWXOlwiclwiLMWZOlwiclwiLMWaOlwiU1wiLMWcOlwiU1wiLMWeOlwiU1wiLMWgOlwiU1wiLMWbOlwic1wiLMWdOlwic1wiLMWfOlwic1wiLMWhOlwic1wiLMWiOlwiVFwiLMWkOlwiVFwiLMWmOlwiVFwiLMWjOlwidFwiLMWlOlwidFwiLMWnOlwidFwiLMWoOlwiVVwiLMWqOlwiVVwiLMWsOlwiVVwiLMWuOlwiVVwiLMWwOlwiVVwiLMWyOlwiVVwiLMWpOlwidVwiLMWrOlwidVwiLMWtOlwidVwiLMWvOlwidVwiLMWxOlwidVwiLMWzOlwidVwiLMW0OlwiV1wiLMW1Olwid1wiLMW2OlwiWVwiLMW3OlwieVwiLMW4OlwiWVwiLMW5OlwiWlwiLMW7OlwiWlwiLMW9OlwiWlwiLMW6OlwielwiLMW8OlwielwiLMW+OlwielwiLMSyOlwiSUpcIizEszpcImlqXCIsxZI6XCJPZVwiLMWTOlwib2VcIizFiTpcIiduXCIsxb86XCJzXCJ9KSx0bj1VdCh7XCImXCI6XCImYW1wO1wiLFwiPFwiOlwiJmx0O1wiLFwiPlwiOlwiJmd0O1wiLCdcIic6XCImcXVvdDtcIixcIidcIjpcIiYjMzk7XCJ9KTtmdW5jdGlvbiBubihlKXtyZXR1cm5cIlxcXFxcIithdFtlXX1mdW5jdGlvbiBybihlKXtyZXR1cm4gZXQudGVzdChlKX1mdW5jdGlvbiBvbihlKXt2YXIgdD0tMSxuPUFycmF5KGUuc2l6ZSk7cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXtuWysrdF09W3IsZV19KSksbn1mdW5jdGlvbiBhbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gZSh0KG4pKX19ZnVuY3Rpb24gbG4oZSx0KXtmb3IodmFyIG49LTEscj1lLmxlbmd0aCxvPTAsaT1bXTsrK248cjspe3ZhciBhPWVbbl07YSE9PXQmJmEhPT1sfHwoZVtuXT1sLGlbbysrXT1uKX1yZXR1cm4gaX1mdW5jdGlvbiBzbihlKXt2YXIgdD0tMSxuPUFycmF5KGUuc2l6ZSk7cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7blsrK3RdPWV9KSksbn1mdW5jdGlvbiBjbihlKXtyZXR1cm4gcm4oZSk/ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PUplLmxhc3RJbmRleD0wO0plLnRlc3QoZSk7KSsrdDtyZXR1cm4gdH0oZSk6SHQoZSl9ZnVuY3Rpb24gdW4oZSl7cmV0dXJuIHJuKGUpP2Z1bmN0aW9uKGUpe3JldHVybiBlLm1hdGNoKEplKXx8W119KGUpOmZ1bmN0aW9uKGUpe3JldHVybiBlLnNwbGl0KFwiXCIpfShlKX1mdW5jdGlvbiBmbihlKXtmb3IodmFyIHQ9ZS5sZW5ndGg7dC0tJiZvZS50ZXN0KGUuY2hhckF0KHQpKTspO3JldHVybiB0fXZhciBkbj1VdCh7XCImYW1wO1wiOlwiJlwiLFwiJmx0O1wiOlwiPFwiLFwiJmd0O1wiOlwiPlwiLFwiJnF1b3Q7XCI6J1wiJyxcIiYjMzk7XCI6XCInXCJ9KSxwbj1mdW5jdGlvbiBlKHQpe3ZhciBuLHI9KHQ9bnVsbD09dD9mdDpwbi5kZWZhdWx0cyhmdC5PYmplY3QoKSx0LHBuLnBpY2soZnQsbnQpKSkuQXJyYXksb2U9dC5EYXRlLGJlPXQuRXJyb3IseGU9dC5GdW5jdGlvbixfZT10Lk1hdGgsT2U9dC5PYmplY3QsTGU9dC5SZWdFeHAsRWU9dC5TdHJpbmcsU2U9dC5UeXBlRXJyb3IsamU9ci5wcm90b3R5cGUsTWU9eGUucHJvdG90eXBlLGtlPU9lLnByb3RvdHlwZSxSZT10W1wiX19jb3JlLWpzX3NoYXJlZF9fXCJdLFBlPU1lLnRvU3RyaW5nLEllPWtlLmhhc093blByb3BlcnR5LEFlPTAsVGU9KG49L1teLl0rJC8uZXhlYyhSZSYmUmUua2V5cyYmUmUua2V5cy5JRV9QUk9UT3x8XCJcIikpP1wiU3ltYm9sKHNyYylfMS5cIituOlwiXCIsSGU9a2UudG9TdHJpbmcsQmU9UGUuY2FsbChPZSksVmU9ZnQuXyxEZT1MZShcIl5cIitQZS5jYWxsKEllKS5yZXBsYWNlKHRlLFwiXFxcXCQmXCIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csXCIkMS4qP1wiKStcIiRcIiksWmU9aHQ/dC5CdWZmZXI6bywkZT10LlN5bWJvbCxOZT10LlVpbnQ4QXJyYXksRmU9WmU/WmUuYWxsb2NVbnNhZmU6byxVZT1hbihPZS5nZXRQcm90b3R5cGVPZixPZSksV2U9T2UuY3JlYXRlLHplPWtlLnByb3BlcnR5SXNFbnVtZXJhYmxlLEdlPWplLnNwbGljZSxxZT0kZT8kZS5pc0NvbmNhdFNwcmVhZGFibGU6byxZZT0kZT8kZS5pdGVyYXRvcjpvLEplPSRlPyRlLnRvU3RyaW5nVGFnOm8sZXQ9ZnVuY3Rpb24oKXt0cnl7dmFyIGU9c2koT2UsXCJkZWZpbmVQcm9wZXJ0eVwiKTtyZXR1cm4gZSh7fSxcIlwiLHt9KSxlfWNhdGNoKGUpe319KCksYXQ9dC5jbGVhclRpbWVvdXQhPT1mdC5jbGVhclRpbWVvdXQmJnQuY2xlYXJUaW1lb3V0LGN0PW9lJiZvZS5ub3chPT1mdC5EYXRlLm5vdyYmb2Uubm93LHV0PXQuc2V0VGltZW91dCE9PWZ0LnNldFRpbWVvdXQmJnQuc2V0VGltZW91dCxkdD1fZS5jZWlsLHB0PV9lLmZsb29yLGd0PU9lLmdldE93blByb3BlcnR5U3ltYm9scyx2dD1aZT9aZS5pc0J1ZmZlcjpvLEh0PXQuaXNGaW5pdGUsVXQ9amUuam9pbixobj1hbihPZS5rZXlzLE9lKSxnbj1fZS5tYXgsdm49X2UubWluLG1uPW9lLm5vdyxDbj10LnBhcnNlSW50LHluPV9lLnJhbmRvbSx3bj1qZS5yZXZlcnNlLGJuPXNpKHQsXCJEYXRhVmlld1wiKSx4bj1zaSh0LFwiTWFwXCIpLF9uPXNpKHQsXCJQcm9taXNlXCIpLE9uPXNpKHQsXCJTZXRcIiksTG49c2kodCxcIldlYWtNYXBcIiksRW49c2koT2UsXCJjcmVhdGVcIiksU249TG4mJm5ldyBMbixqbj17fSxNbj1IaShibiksa249SGkoeG4pLFJuPUhpKF9uKSxQbj1IaShPbiksSW49SGkoTG4pLEFuPSRlPyRlLnByb3RvdHlwZTpvLFRuPUFuP0FuLnZhbHVlT2Y6byxIbj1Bbj9Bbi50b1N0cmluZzpvO2Z1bmN0aW9uIEJuKGUpe2lmKFFhKGUpJiYhTmEoZSkmJiEoZSBpbnN0YW5jZW9mICRuKSl7aWYoZSBpbnN0YW5jZW9mIFpuKXJldHVybiBlO2lmKEllLmNhbGwoZSxcIl9fd3JhcHBlZF9fXCIpKXJldHVybiBCaShlKX1yZXR1cm4gbmV3IFpuKGUpfXZhciBWbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKCFKYSh0KSlyZXR1cm57fTtpZihXZSlyZXR1cm4gV2UodCk7ZS5wcm90b3R5cGU9dDt2YXIgbj1uZXcgZTtyZXR1cm4gZS5wcm90b3R5cGU9byxufX0oKTtmdW5jdGlvbiBEbigpe31mdW5jdGlvbiBabihlLHQpe3RoaXMuX193cmFwcGVkX189ZSx0aGlzLl9fYWN0aW9uc19fPVtdLHRoaXMuX19jaGFpbl9fPSEhdCx0aGlzLl9faW5kZXhfXz0wLHRoaXMuX192YWx1ZXNfXz1vfWZ1bmN0aW9uICRuKGUpe3RoaXMuX193cmFwcGVkX189ZSx0aGlzLl9fYWN0aW9uc19fPVtdLHRoaXMuX19kaXJfXz0xLHRoaXMuX19maWx0ZXJlZF9fPSExLHRoaXMuX19pdGVyYXRlZXNfXz1bXSx0aGlzLl9fdGFrZUNvdW50X189cCx0aGlzLl9fdmlld3NfXz1bXX1mdW5jdGlvbiBObihlKXt2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiBGbihlKXt2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiBVbihlKXt2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiBXbihlKXt2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgVW47Kyt0PG47KXRoaXMuYWRkKGVbdF0pfWZ1bmN0aW9uIHpuKGUpe3ZhciB0PXRoaXMuX19kYXRhX189bmV3IEZuKGUpO3RoaXMuc2l6ZT10LnNpemV9ZnVuY3Rpb24gR24oZSx0KXt2YXIgbj1OYShlKSxyPSFuJiYkYShlKSxvPSFuJiYhciYmemEoZSksaT0hbiYmIXImJiFvJiZsbChlKSxhPW58fHJ8fG98fGksbD1hP0d0KGUubGVuZ3RoLEVlKTpbXSxzPWwubGVuZ3RoO2Zvcih2YXIgYyBpbiBlKSF0JiYhSWUuY2FsbChlLGMpfHxhJiYoXCJsZW5ndGhcIj09Y3x8byYmKFwib2Zmc2V0XCI9PWN8fFwicGFyZW50XCI9PWMpfHxpJiYoXCJidWZmZXJcIj09Y3x8XCJieXRlTGVuZ3RoXCI9PWN8fFwiYnl0ZU9mZnNldFwiPT1jKXx8Z2koYyxzKSl8fGwucHVzaChjKTtyZXR1cm4gbH1mdW5jdGlvbiBxbihlKXt2YXIgdD1lLmxlbmd0aDtyZXR1cm4gdD9lW1VyKDAsdC0xKV06b31mdW5jdGlvbiBZbihlLHQpe3JldHVybiBSaShFbyhlKSxvcih0LDAsZS5sZW5ndGgpKX1mdW5jdGlvbiBLbihlKXtyZXR1cm4gUmkoRW8oZSkpfWZ1bmN0aW9uIFhuKGUsdCxuKXsobiE9PW8mJiFWYShlW3RdLG4pfHxuPT09byYmISh0IGluIGUpKSYmbnIoZSx0LG4pfWZ1bmN0aW9uIEpuKGUsdCxuKXt2YXIgcj1lW3RdO0llLmNhbGwoZSx0KSYmVmEocixuKSYmKG4hPT1vfHx0IGluIGUpfHxucihlLHQsbil9ZnVuY3Rpb24gUW4oZSx0KXtmb3IodmFyIG49ZS5sZW5ndGg7bi0tOylpZihWYShlW25dWzBdLHQpKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIGVyKGUsdCxuLHIpe3JldHVybiBjcihlLChmdW5jdGlvbihlLG8saSl7dChyLGUsbihlKSxpKX0pKSxyfWZ1bmN0aW9uIHRyKGUsdCl7cmV0dXJuIGUmJlNvKHQsTWwodCksZSl9ZnVuY3Rpb24gbnIoZSx0LG4pe1wiX19wcm90b19fXCI9PXQmJmV0P2V0KGUsdCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6bix3cml0YWJsZTohMH0pOmVbdF09bn1mdW5jdGlvbiBycihlLHQpe2Zvcih2YXIgbj0tMSxpPXQubGVuZ3RoLGE9cihpKSxsPW51bGw9PWU7KytuPGk7KWFbbl09bD9vOk9sKGUsdFtuXSk7cmV0dXJuIGF9ZnVuY3Rpb24gb3IoZSx0LG4pe3JldHVybiBlPT1lJiYobiE9PW8mJihlPWU8PW4/ZTpuKSx0IT09byYmKGU9ZT49dD9lOnQpKSxlfWZ1bmN0aW9uIGlyKGUsdCxuLHIsaSxhKXt2YXIgbCxzPTEmdCxjPTImdCx1PTQmdDtpZihuJiYobD1pP24oZSxyLGksYSk6bihlKSksbCE9PW8pcmV0dXJuIGw7aWYoIUphKGUpKXJldHVybiBlO3ZhciBmPU5hKGUpO2lmKGYpe2lmKGw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgsbj1uZXcgZS5jb25zdHJ1Y3Rvcih0KTtyZXR1cm4gdCYmXCJzdHJpbmdcIj09dHlwZW9mIGVbMF0mJkllLmNhbGwoZSxcImluZGV4XCIpJiYobi5pbmRleD1lLmluZGV4LG4uaW5wdXQ9ZS5pbnB1dCksbn0oZSksIXMpcmV0dXJuIEVvKGUsbCl9ZWxzZXt2YXIgZD1maShlKSxwPWQ9PXd8fGQ9PWI7aWYoemEoZSkpcmV0dXJuIHdvKGUscyk7aWYoZD09T3x8ZD09Z3x8cCYmIWkpe2lmKGw9Y3x8cD97fTpwaShlKSwhcylyZXR1cm4gYz9mdW5jdGlvbihlLHQpe3JldHVybiBTbyhlLHVpKGUpLHQpfShlLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJlNvKHQsa2wodCksZSl9KGwsZSkpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFNvKGUsY2koZSksdCl9KGUsdHIobCxlKSl9ZWxzZXtpZighaXRbZF0pcmV0dXJuIGk/ZTp7fTtsPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvPWUuY29uc3RydWN0b3I7c3dpdGNoKHQpe2Nhc2UgUjpyZXR1cm4gYm8oZSk7Y2FzZSBtOmNhc2UgQzpyZXR1cm4gbmV3IG8oK2UpO2Nhc2UgUDpyZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgbj10P2JvKGUuYnVmZmVyKTplLmJ1ZmZlcjtyZXR1cm4gbmV3IGUuY29uc3RydWN0b3IobixlLmJ5dGVPZmZzZXQsZS5ieXRlTGVuZ3RoKX0oZSxuKTtjYXNlIEk6Y2FzZSBBOmNhc2UgVDpjYXNlIEg6Y2FzZSBCOmNhc2UgVjpjYXNlIEQ6Y2FzZSBaOmNhc2UgJDpyZXR1cm4geG8oZSxuKTtjYXNlIHg6cmV0dXJuIG5ldyBvO2Nhc2UgXzpjYXNlIGo6cmV0dXJuIG5ldyBvKGUpO2Nhc2UgRTpyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IGUuY29uc3RydWN0b3IoZS5zb3VyY2UsZGUuZXhlYyhlKSk7cmV0dXJuIHQubGFzdEluZGV4PWUubGFzdEluZGV4LHR9KGUpO2Nhc2UgUzpyZXR1cm4gbmV3IG87Y2FzZSBNOnJldHVybiByPWUsVG4/T2UoVG4uY2FsbChyKSk6e319fShlLGQscyl9fWF8fChhPW5ldyB6bik7dmFyIGg9YS5nZXQoZSk7aWYoaClyZXR1cm4gaDthLnNldChlLGwpLG9sKGUpP2UuZm9yRWFjaCgoZnVuY3Rpb24ocil7bC5hZGQoaXIocix0LG4scixlLGEpKX0pKTplbChlKSYmZS5mb3JFYWNoKChmdW5jdGlvbihyLG8pe2wuc2V0KG8saXIocix0LG4sbyxlLGEpKX0pKTt2YXIgdj1mP286KHU/Yz90aTplaTpjP2tsOk1sKShlKTtyZXR1cm4gTHQodnx8ZSwoZnVuY3Rpb24ocixvKXt2JiYocj1lW289cl0pLEpuKGwsbyxpcihyLHQsbixvLGUsYSkpfSkpLGx9ZnVuY3Rpb24gYXIoZSx0LG4pe3ZhciByPW4ubGVuZ3RoO2lmKG51bGw9PWUpcmV0dXJuIXI7Zm9yKGU9T2UoZSk7ci0tOyl7dmFyIGk9bltyXSxhPXRbaV0sbD1lW2ldO2lmKGw9PT1vJiYhKGkgaW4gZSl8fCFhKGwpKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIGxyKGUsdCxuKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBTZShpKTtyZXR1cm4gU2koKGZ1bmN0aW9uKCl7ZS5hcHBseShvLG4pfSksdCl9ZnVuY3Rpb24gc3IoZSx0LG4scil7dmFyIG89LTEsaT1NdCxhPSEwLGw9ZS5sZW5ndGgscz1bXSxjPXQubGVuZ3RoO2lmKCFsKXJldHVybiBzO24mJih0PVJ0KHQsWXQobikpKSxyPyhpPWt0LGE9ITEpOnQubGVuZ3RoPj0yMDAmJihpPVh0LGE9ITEsdD1uZXcgV24odCkpO2U6Zm9yKDsrK288bDspe3ZhciB1PWVbb10sZj1udWxsPT1uP3U6bih1KTtpZih1PXJ8fDAhPT11P3U6MCxhJiZmPT1mKXtmb3IodmFyIGQ9YztkLS07KWlmKHRbZF09PT1mKWNvbnRpbnVlIGU7cy5wdXNoKHUpfWVsc2UgaSh0LGYscil8fHMucHVzaCh1KX1yZXR1cm4gc31Cbi50ZW1wbGF0ZVNldHRpbmdzPXtlc2NhcGU6WSxldmFsdWF0ZTpLLGludGVycG9sYXRlOlgsdmFyaWFibGU6XCJcIixpbXBvcnRzOntfOkJufX0sQm4ucHJvdG90eXBlPURuLnByb3RvdHlwZSxCbi5wcm90b3R5cGUuY29uc3RydWN0b3I9Qm4sWm4ucHJvdG90eXBlPVZuKERuLnByb3RvdHlwZSksWm4ucHJvdG90eXBlLmNvbnN0cnVjdG9yPVpuLCRuLnByb3RvdHlwZT1WbihEbi5wcm90b3R5cGUpLCRuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj0kbixObi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPUVuP0VuKG51bGwpOnt9LHRoaXMuc2l6ZT0wfSxObi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaGFzKGUpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1tlXTtyZXR1cm4gdGhpcy5zaXplLT10PzE6MCx0fSxObi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX187aWYoRW4pe3ZhciBuPXRbZV07cmV0dXJuIG49PT1hP286bn1yZXR1cm4gSWUuY2FsbCh0LGUpP3RbZV06b30sTm4ucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fO3JldHVybiBFbj90W2VdIT09bzpJZS5jYWxsKHQsZSl9LE5uLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKGUpPzA6MSxuW2VdPUVuJiZ0PT09bz9hOnQsdGhpc30sRm4ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH0sRm4ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fLG49UW4odCxlKTtyZXR1cm4hKG48MHx8KG49PXQubGVuZ3RoLTE/dC5wb3AoKTpHZS5jYWxsKHQsbiwxKSwtLXRoaXMuc2l6ZSwwKSl9LEZuLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxuPVFuKHQsZSk7cmV0dXJuIG48MD9vOnRbbl1bMV19LEZuLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIFFuKHRoaXMuX19kYXRhX18sZSk+LTF9LEZuLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fLHI9UW4obixlKTtyZXR1cm4gcjwwPygrK3RoaXMuc2l6ZSxuLnB1c2goW2UsdF0pKTpuW3JdWzFdPXQsdGhpc30sVW4ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgTm4sbWFwOm5ldyh4bnx8Rm4pLHN0cmluZzpuZXcgTm59fSxVbi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3ZhciB0PWFpKHRoaXMsZSkuZGVsZXRlKGUpO3JldHVybiB0aGlzLnNpemUtPXQ/MTowLHR9LFVuLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFpKHRoaXMsZSkuZ2V0KGUpfSxVbi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiBhaSh0aGlzLGUpLmhhcyhlKX0sVW4ucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3ZhciBuPWFpKHRoaXMsZSkscj1uLnNpemU7cmV0dXJuIG4uc2V0KGUsdCksdGhpcy5zaXplKz1uLnNpemU9PXI/MDoxLHRoaXN9LFduLnByb3RvdHlwZS5hZGQ9V24ucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uc2V0KGUsYSksdGhpc30sV24ucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoZSl9LHpuLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189bmV3IEZuLHRoaXMuc2l6ZT0wfSx6bi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX18sbj10LmRlbGV0ZShlKTtyZXR1cm4gdGhpcy5zaXplPXQuc2l6ZSxufSx6bi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldChlKX0sem4ucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoZSl9LHpuLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fO2lmKG4gaW5zdGFuY2VvZiBGbil7dmFyIHI9bi5fX2RhdGFfXztpZigheG58fHIubGVuZ3RoPDE5OSlyZXR1cm4gci5wdXNoKFtlLHRdKSx0aGlzLnNpemU9KytuLnNpemUsdGhpcztuPXRoaXMuX19kYXRhX189bmV3IFVuKHIpfXJldHVybiBuLnNldChlLHQpLHRoaXMuc2l6ZT1uLnNpemUsdGhpc307dmFyIGNyPWtvKG1yKSx1cj1rbyhDciwhMCk7ZnVuY3Rpb24gZnIoZSx0KXt2YXIgbj0hMDtyZXR1cm4gY3IoZSwoZnVuY3Rpb24oZSxyLG8pe3JldHVybiBuPSEhdChlLHIsbyl9KSksbn1mdW5jdGlvbiBkcihlLHQsbil7Zm9yKHZhciByPS0xLGk9ZS5sZW5ndGg7KytyPGk7KXt2YXIgYT1lW3JdLGw9dChhKTtpZihudWxsIT1sJiYocz09PW8/bD09bCYmIWFsKGwpOm4obCxzKSkpdmFyIHM9bCxjPWF9cmV0dXJuIGN9ZnVuY3Rpb24gcHIoZSx0KXt2YXIgbj1bXTtyZXR1cm4gY3IoZSwoZnVuY3Rpb24oZSxyLG8pe3QoZSxyLG8pJiZuLnB1c2goZSl9KSksbn1mdW5jdGlvbiBocihlLHQsbixyLG8pe3ZhciBpPS0xLGE9ZS5sZW5ndGg7Zm9yKG58fChuPWhpKSxvfHwobz1bXSk7KytpPGE7KXt2YXIgbD1lW2ldO3Q+MCYmbihsKT90PjE/aHIobCx0LTEsbixyLG8pOlB0KG8sbCk6cnx8KG9bby5sZW5ndGhdPWwpfXJldHVybiBvfXZhciBncj1SbygpLHZyPVJvKCEwKTtmdW5jdGlvbiBtcihlLHQpe3JldHVybiBlJiZncihlLHQsTWwpfWZ1bmN0aW9uIENyKGUsdCl7cmV0dXJuIGUmJnZyKGUsdCxNbCl9ZnVuY3Rpb24geXIoZSx0KXtyZXR1cm4ganQodCwoZnVuY3Rpb24odCl7cmV0dXJuIFlhKGVbdF0pfSkpfWZ1bmN0aW9uIHdyKGUsdCl7Zm9yKHZhciBuPTAscj0odD12byh0LGUpKS5sZW5ndGg7bnVsbCE9ZSYmbjxyOyllPWVbVGkodFtuKytdKV07cmV0dXJuIG4mJm49PXI/ZTpvfWZ1bmN0aW9uIGJyKGUsdCxuKXt2YXIgcj10KGUpO3JldHVybiBOYShlKT9yOlB0KHIsbihlKSl9ZnVuY3Rpb24geHIoZSl7cmV0dXJuIG51bGw9PWU/ZT09PW8/XCJbb2JqZWN0IFVuZGVmaW5lZF1cIjpcIltvYmplY3QgTnVsbF1cIjpKZSYmSmUgaW4gT2UoZSk/ZnVuY3Rpb24oZSl7dmFyIHQ9SWUuY2FsbChlLEplKSxuPWVbSmVdO3RyeXtlW0plXT1vO3ZhciByPSEwfWNhdGNoKGUpe312YXIgaT1IZS5jYWxsKGUpO3JldHVybiByJiYodD9lW0plXT1uOmRlbGV0ZSBlW0plXSksaX0oZSk6ZnVuY3Rpb24oZSl7cmV0dXJuIEhlLmNhbGwoZSl9KGUpfWZ1bmN0aW9uIF9yKGUsdCl7cmV0dXJuIGU+dH1mdW5jdGlvbiBPcihlLHQpe3JldHVybiBudWxsIT1lJiZJZS5jYWxsKGUsdCl9ZnVuY3Rpb24gTHIoZSx0KXtyZXR1cm4gbnVsbCE9ZSYmdCBpbiBPZShlKX1mdW5jdGlvbiBFcihlLHQsbil7Zm9yKHZhciBpPW4/a3Q6TXQsYT1lWzBdLmxlbmd0aCxsPWUubGVuZ3RoLHM9bCxjPXIobCksdT0xLzAsZj1bXTtzLS07KXt2YXIgZD1lW3NdO3MmJnQmJihkPVJ0KGQsWXQodCkpKSx1PXZuKGQubGVuZ3RoLHUpLGNbc109IW4mJih0fHxhPj0xMjAmJmQubGVuZ3RoPj0xMjApP25ldyBXbihzJiZkKTpvfWQ9ZVswXTt2YXIgcD0tMSxoPWNbMF07ZTpmb3IoOysrcDxhJiZmLmxlbmd0aDx1Oyl7dmFyIGc9ZFtwXSx2PXQ/dChnKTpnO2lmKGc9bnx8MCE9PWc/ZzowLCEoaD9YdChoLHYpOmkoZix2LG4pKSl7Zm9yKHM9bDstLXM7KXt2YXIgbT1jW3NdO2lmKCEobT9YdChtLHYpOmkoZVtzXSx2LG4pKSljb250aW51ZSBlfWgmJmgucHVzaCh2KSxmLnB1c2goZyl9fXJldHVybiBmfWZ1bmN0aW9uIFNyKGUsdCxuKXt2YXIgcj1udWxsPT0oZT1PaShlLHQ9dm8odCxlKSkpP2U6ZVtUaShxaSh0KSldO3JldHVybiBudWxsPT1yP286X3QocixlLG4pfWZ1bmN0aW9uIGpyKGUpe3JldHVybiBRYShlKSYmeHIoZSk9PWd9ZnVuY3Rpb24gTXIoZSx0LG4scixpKXtyZXR1cm4gZT09PXR8fChudWxsPT1lfHxudWxsPT10fHwhUWEoZSkmJiFRYSh0KT9lIT1lJiZ0IT10OmZ1bmN0aW9uKGUsdCxuLHIsaSxhKXt2YXIgbD1OYShlKSxzPU5hKHQpLGM9bD92OmZpKGUpLHU9cz92OmZpKHQpLGY9KGM9Yz09Zz9POmMpPT1PLGQ9KHU9dT09Zz9POnUpPT1PLHA9Yz09dTtpZihwJiZ6YShlKSl7aWYoIXphKHQpKXJldHVybiExO2w9ITAsZj0hMX1pZihwJiYhZilyZXR1cm4gYXx8KGE9bmV3IHpuKSxsfHxsbChlKT9KbyhlLHQsbixyLGksYSk6ZnVuY3Rpb24oZSx0LG4scixvLGksYSl7c3dpdGNoKG4pe2Nhc2UgUDppZihlLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8ZS5ieXRlT2Zmc2V0IT10LmJ5dGVPZmZzZXQpcmV0dXJuITE7ZT1lLmJ1ZmZlcix0PXQuYnVmZmVyO2Nhc2UgUjpyZXR1cm4hKGUuYnl0ZUxlbmd0aCE9dC5ieXRlTGVuZ3RofHwhaShuZXcgTmUoZSksbmV3IE5lKHQpKSk7Y2FzZSBtOmNhc2UgQzpjYXNlIF86cmV0dXJuIFZhKCtlLCt0KTtjYXNlIHk6cmV0dXJuIGUubmFtZT09dC5uYW1lJiZlLm1lc3NhZ2U9PXQubWVzc2FnZTtjYXNlIEU6Y2FzZSBqOnJldHVybiBlPT10K1wiXCI7Y2FzZSB4OnZhciBsPW9uO2Nhc2UgUzp2YXIgcz0xJnI7aWYobHx8KGw9c24pLGUuc2l6ZSE9dC5zaXplJiYhcylyZXR1cm4hMTt2YXIgYz1hLmdldChlKTtpZihjKXJldHVybiBjPT10O3J8PTIsYS5zZXQoZSx0KTt2YXIgdT1KbyhsKGUpLGwodCkscixvLGksYSk7cmV0dXJuIGEuZGVsZXRlKGUpLHU7Y2FzZSBNOmlmKFRuKXJldHVybiBUbi5jYWxsKGUpPT1Ubi5jYWxsKHQpfXJldHVybiExfShlLHQsYyxuLHIsaSxhKTtpZighKDEmbikpe3ZhciBoPWYmJkllLmNhbGwoZSxcIl9fd3JhcHBlZF9fXCIpLHc9ZCYmSWUuY2FsbCh0LFwiX193cmFwcGVkX19cIik7aWYoaHx8dyl7dmFyIGI9aD9lLnZhbHVlKCk6ZSxMPXc/dC52YWx1ZSgpOnQ7cmV0dXJuIGF8fChhPW5ldyB6biksaShiLEwsbixyLGEpfX1yZXR1cm4hIXAmJihhfHwoYT1uZXcgem4pLGZ1bmN0aW9uKGUsdCxuLHIsaSxhKXt2YXIgbD0xJm4scz1laShlKSxjPXMubGVuZ3RoO2lmKGMhPWVpKHQpLmxlbmd0aCYmIWwpcmV0dXJuITE7Zm9yKHZhciB1PWM7dS0tOyl7dmFyIGY9c1t1XTtpZighKGw/ZiBpbiB0OkllLmNhbGwodCxmKSkpcmV0dXJuITF9dmFyIGQ9YS5nZXQoZSkscD1hLmdldCh0KTtpZihkJiZwKXJldHVybiBkPT10JiZwPT1lO3ZhciBoPSEwO2Euc2V0KGUsdCksYS5zZXQodCxlKTtmb3IodmFyIGc9bDsrK3U8Yzspe3ZhciB2PWVbZj1zW3VdXSxtPXRbZl07aWYocil2YXIgQz1sP3IobSx2LGYsdCxlLGEpOnIodixtLGYsZSx0LGEpO2lmKCEoQz09PW8/dj09PW18fGkodixtLG4scixhKTpDKSl7aD0hMTticmVha31nfHwoZz1cImNvbnN0cnVjdG9yXCI9PWYpfWlmKGgmJiFnKXt2YXIgeT1lLmNvbnN0cnVjdG9yLHc9dC5jb25zdHJ1Y3Rvcjt5PT13fHwhKFwiY29uc3RydWN0b3JcImluIGUpfHwhKFwiY29uc3RydWN0b3JcImluIHQpfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiB5JiZ5IGluc3RhbmNlb2YgeSYmXCJmdW5jdGlvblwiPT10eXBlb2YgdyYmdyBpbnN0YW5jZW9mIHd8fChoPSExKX1yZXR1cm4gYS5kZWxldGUoZSksYS5kZWxldGUodCksaH0oZSx0LG4scixpLGEpKX0oZSx0LG4scixNcixpKSl9ZnVuY3Rpb24ga3IoZSx0LG4scil7dmFyIGk9bi5sZW5ndGgsYT1pLGw9IXI7aWYobnVsbD09ZSlyZXR1cm4hYTtmb3IoZT1PZShlKTtpLS07KXt2YXIgcz1uW2ldO2lmKGwmJnNbMl0/c1sxXSE9PWVbc1swXV06IShzWzBdaW4gZSkpcmV0dXJuITF9Zm9yKDsrK2k8YTspe3ZhciBjPShzPW5baV0pWzBdLHU9ZVtjXSxmPXNbMV07aWYobCYmc1syXSl7aWYodT09PW8mJiEoYyBpbiBlKSlyZXR1cm4hMX1lbHNle3ZhciBkPW5ldyB6bjtpZihyKXZhciBwPXIodSxmLGMsZSx0LGQpO2lmKCEocD09PW8/TXIoZix1LDMscixkKTpwKSlyZXR1cm4hMX19cmV0dXJuITB9ZnVuY3Rpb24gUnIoZSl7cmV0dXJuISghSmEoZSl8fCh0PWUsVGUmJlRlIGluIHQpKSYmKFlhKGUpP0RlOmdlKS50ZXN0KEhpKGUpKTt2YXIgdH1mdW5jdGlvbiBQcihlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6bnVsbD09ZT90czpcIm9iamVjdFwiPT10eXBlb2YgZT9OYShlKT9CcihlWzBdLGVbMV0pOkhyKGUpOnVzKGUpfWZ1bmN0aW9uIElyKGUpe2lmKCF3aShlKSlyZXR1cm4gaG4oZSk7dmFyIHQ9W107Zm9yKHZhciBuIGluIE9lKGUpKUllLmNhbGwoZSxuKSYmXCJjb25zdHJ1Y3RvclwiIT1uJiZ0LnB1c2gobik7cmV0dXJuIHR9ZnVuY3Rpb24gQXIoZSx0KXtyZXR1cm4gZTx0fWZ1bmN0aW9uIFRyKGUsdCl7dmFyIG49LTEsbz1VYShlKT9yKGUubGVuZ3RoKTpbXTtyZXR1cm4gY3IoZSwoZnVuY3Rpb24oZSxyLGkpe29bKytuXT10KGUscixpKX0pKSxvfWZ1bmN0aW9uIEhyKGUpe3ZhciB0PWxpKGUpO3JldHVybiAxPT10Lmxlbmd0aCYmdFswXVsyXT94aSh0WzBdWzBdLHRbMF1bMV0pOmZ1bmN0aW9uKG4pe3JldHVybiBuPT09ZXx8a3IobixlLHQpfX1mdW5jdGlvbiBCcihlLHQpe3JldHVybiBtaShlKSYmYmkodCk/eGkoVGkoZSksdCk6ZnVuY3Rpb24obil7dmFyIHI9T2wobixlKTtyZXR1cm4gcj09PW8mJnI9PT10P0xsKG4sZSk6TXIodCxyLDMpfX1mdW5jdGlvbiBWcihlLHQsbixyLGkpe2UhPT10JiZncih0LChmdW5jdGlvbihhLGwpe2lmKGl8fChpPW5ldyB6biksSmEoYSkpIWZ1bmN0aW9uKGUsdCxuLHIsaSxhLGwpe3ZhciBzPUxpKGUsbiksYz1MaSh0LG4pLHU9bC5nZXQoYyk7aWYodSlYbihlLG4sdSk7ZWxzZXt2YXIgZj1hP2EocyxjLG4rXCJcIixlLHQsbCk6byxkPWY9PT1vO2lmKGQpe3ZhciBwPU5hKGMpLGg9IXAmJnphKGMpLGc9IXAmJiFoJiZsbChjKTtmPWMscHx8aHx8Zz9OYShzKT9mPXM6V2Eocyk/Zj1FbyhzKTpoPyhkPSExLGY9d28oYywhMCkpOmc/KGQ9ITEsZj14byhjLCEwKSk6Zj1bXTpubChjKXx8JGEoYyk/KGY9cywkYShzKT9mPWdsKHMpOkphKHMpJiYhWWEocyl8fChmPXBpKGMpKSk6ZD0hMX1kJiYobC5zZXQoYyxmKSxpKGYsYyxyLGEsbCksbC5kZWxldGUoYykpLFhuKGUsbixmKX19KGUsdCxsLG4sVnIscixpKTtlbHNle3ZhciBzPXI/cihMaShlLGwpLGEsbCtcIlwiLGUsdCxpKTpvO3M9PT1vJiYocz1hKSxYbihlLGwscyl9fSksa2wpfWZ1bmN0aW9uIERyKGUsdCl7dmFyIG49ZS5sZW5ndGg7aWYobilyZXR1cm4gZ2kodCs9dDwwP246MCxuKT9lW3RdOm99ZnVuY3Rpb24gWnIoZSx0LG4pe3Q9dC5sZW5ndGg/UnQodCwoZnVuY3Rpb24oZSl7cmV0dXJuIE5hKGUpP2Z1bmN0aW9uKHQpe3JldHVybiB3cih0LDE9PT1lLmxlbmd0aD9lWzBdOmUpfTplfSkpOlt0c107dmFyIHI9LTE7dD1SdCh0LFl0KGlpKCkpKTt2YXIgbz1UcihlLChmdW5jdGlvbihlLG4sbyl7dmFyIGk9UnQodCwoZnVuY3Rpb24odCl7cmV0dXJuIHQoZSl9KSk7cmV0dXJue2NyaXRlcmlhOmksaW5kZXg6KytyLHZhbHVlOmV9fSkpO3JldHVybiBmdW5jdGlvbihlLHQpe3ZhciByPWUubGVuZ3RoO2ZvcihlLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9LTEsbz1lLmNyaXRlcmlhLGk9dC5jcml0ZXJpYSxhPW8ubGVuZ3RoLGw9bi5sZW5ndGg7KytyPGE7KXt2YXIgcz1fbyhvW3JdLGlbcl0pO2lmKHMpcmV0dXJuIHI+PWw/czpzKihcImRlc2NcIj09bltyXT8tMToxKX1yZXR1cm4gZS5pbmRleC10LmluZGV4fShlLHQsbil9KSk7ci0tOyllW3JdPWVbcl0udmFsdWU7cmV0dXJuIGV9KG8pfWZ1bmN0aW9uICRyKGUsdCxuKXtmb3IodmFyIHI9LTEsbz10Lmxlbmd0aCxpPXt9OysrcjxvOyl7dmFyIGE9dFtyXSxsPXdyKGUsYSk7bihsLGEpJiZZcihpLHZvKGEsZSksbCl9cmV0dXJuIGl9ZnVuY3Rpb24gTnIoZSx0LG4scil7dmFyIG89cj9adDpEdCxpPS0xLGE9dC5sZW5ndGgsbD1lO2ZvcihlPT09dCYmKHQ9RW8odCkpLG4mJihsPVJ0KGUsWXQobikpKTsrK2k8YTspZm9yKHZhciBzPTAsYz10W2ldLHU9bj9uKGMpOmM7KHM9byhsLHUscyxyKSk+LTE7KWwhPT1lJiZHZS5jYWxsKGwscywxKSxHZS5jYWxsKGUscywxKTtyZXR1cm4gZX1mdW5jdGlvbiBGcihlLHQpe2Zvcih2YXIgbj1lP3QubGVuZ3RoOjAscj1uLTE7bi0tOyl7dmFyIG89dFtuXTtpZihuPT1yfHxvIT09aSl7dmFyIGk9bztnaShvKT9HZS5jYWxsKGUsbywxKTpsbyhlLG8pfX1yZXR1cm4gZX1mdW5jdGlvbiBVcihlLHQpe3JldHVybiBlK3B0KHluKCkqKHQtZSsxKSl9ZnVuY3Rpb24gV3IoZSx0KXt2YXIgbj1cIlwiO2lmKCFlfHx0PDF8fHQ+ZilyZXR1cm4gbjtkb3t0JTImJihuKz1lKSwodD1wdCh0LzIpKSYmKGUrPWUpfXdoaWxlKHQpO3JldHVybiBufWZ1bmN0aW9uIHpyKGUsdCl7cmV0dXJuIGppKF9pKGUsdCx0cyksZStcIlwiKX1mdW5jdGlvbiBHcihlKXtyZXR1cm4gcW4oVmwoZSkpfWZ1bmN0aW9uIHFyKGUsdCl7dmFyIG49VmwoZSk7cmV0dXJuIFJpKG4sb3IodCwwLG4ubGVuZ3RoKSl9ZnVuY3Rpb24gWXIoZSx0LG4scil7aWYoIUphKGUpKXJldHVybiBlO2Zvcih2YXIgaT0tMSxhPSh0PXZvKHQsZSkpLmxlbmd0aCxsPWEtMSxzPWU7bnVsbCE9cyYmKytpPGE7KXt2YXIgYz1UaSh0W2ldKSx1PW47aWYoXCJfX3Byb3RvX19cIj09PWN8fFwiY29uc3RydWN0b3JcIj09PWN8fFwicHJvdG90eXBlXCI9PT1jKXJldHVybiBlO2lmKGkhPWwpe3ZhciBmPXNbY107KHU9cj9yKGYsYyxzKTpvKT09PW8mJih1PUphKGYpP2Y6Z2kodFtpKzFdKT9bXTp7fSl9Sm4ocyxjLHUpLHM9c1tjXX1yZXR1cm4gZX12YXIgS3I9U24/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gU24uc2V0KGUsdCksZX06dHMsWHI9ZXQ/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZXQoZSxcInRvU3RyaW5nXCIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOkpsKHQpLHdyaXRhYmxlOiEwfSl9OnRzO2Z1bmN0aW9uIEpyKGUpe3JldHVybiBSaShWbChlKSl9ZnVuY3Rpb24gUXIoZSx0LG4pe3ZhciBvPS0xLGk9ZS5sZW5ndGg7dDwwJiYodD0tdD5pPzA6aSt0KSwobj1uPmk/aTpuKTwwJiYobis9aSksaT10Pm4/MDpuLXQ+Pj4wLHQ+Pj49MDtmb3IodmFyIGE9cihpKTsrK288aTspYVtvXT1lW28rdF07cmV0dXJuIGF9ZnVuY3Rpb24gZW8oZSx0KXt2YXIgbjtyZXR1cm4gY3IoZSwoZnVuY3Rpb24oZSxyLG8pe3JldHVybiEobj10KGUscixvKSl9KSksISFufWZ1bmN0aW9uIHRvKGUsdCxuKXt2YXIgcj0wLG89bnVsbD09ZT9yOmUubGVuZ3RoO2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0PT10JiZvPD0yMTQ3NDgzNjQ3KXtmb3IoO3I8bzspe3ZhciBpPXIrbz4+PjEsYT1lW2ldO251bGwhPT1hJiYhYWwoYSkmJihuP2E8PXQ6YTx0KT9yPWkrMTpvPWl9cmV0dXJuIG99cmV0dXJuIG5vKGUsdCx0cyxuKX1mdW5jdGlvbiBubyhlLHQsbixyKXt2YXIgaT0wLGE9bnVsbD09ZT8wOmUubGVuZ3RoO2lmKDA9PT1hKXJldHVybiAwO2Zvcih2YXIgbD0odD1uKHQpKSE9dCxzPW51bGw9PT10LGM9YWwodCksdT10PT09bztpPGE7KXt2YXIgZj1wdCgoaSthKS8yKSxkPW4oZVtmXSkscD1kIT09byxoPW51bGw9PT1kLGc9ZD09ZCx2PWFsKGQpO2lmKGwpdmFyIG09cnx8ZztlbHNlIG09dT9nJiYocnx8cCk6cz9nJiZwJiYocnx8IWgpOmM/ZyYmcCYmIWgmJihyfHwhdik6IWgmJiF2JiYocj9kPD10OmQ8dCk7bT9pPWYrMTphPWZ9cmV0dXJuIHZuKGEsNDI5NDk2NzI5NCl9ZnVuY3Rpb24gcm8oZSx0KXtmb3IodmFyIG49LTEscj1lLmxlbmd0aCxvPTAsaT1bXTsrK248cjspe3ZhciBhPWVbbl0sbD10P3QoYSk6YTtpZighbnx8IVZhKGwscykpe3ZhciBzPWw7aVtvKytdPTA9PT1hPzA6YX19cmV0dXJuIGl9ZnVuY3Rpb24gb28oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGU/ZTphbChlKT9kOitlfWZ1bmN0aW9uIGlvKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBlO2lmKE5hKGUpKXJldHVybiBSdChlLGlvKStcIlwiO2lmKGFsKGUpKXJldHVybiBIbj9Ibi5jYWxsKGUpOlwiXCI7dmFyIHQ9ZStcIlwiO3JldHVyblwiMFwiPT10JiYxL2U9PS0xLzA/XCItMFwiOnR9ZnVuY3Rpb24gYW8oZSx0LG4pe3ZhciByPS0xLG89TXQsaT1lLmxlbmd0aCxhPSEwLGw9W10scz1sO2lmKG4pYT0hMSxvPWt0O2Vsc2UgaWYoaT49MjAwKXt2YXIgYz10P251bGw6em8oZSk7aWYoYylyZXR1cm4gc24oYyk7YT0hMSxvPVh0LHM9bmV3IFdufWVsc2Ugcz10P1tdOmw7ZTpmb3IoOysrcjxpOyl7dmFyIHU9ZVtyXSxmPXQ/dCh1KTp1O2lmKHU9bnx8MCE9PXU/dTowLGEmJmY9PWYpe2Zvcih2YXIgZD1zLmxlbmd0aDtkLS07KWlmKHNbZF09PT1mKWNvbnRpbnVlIGU7dCYmcy5wdXNoKGYpLGwucHVzaCh1KX1lbHNlIG8ocyxmLG4pfHwocyE9PWwmJnMucHVzaChmKSxsLnB1c2godSkpfXJldHVybiBsfWZ1bmN0aW9uIGxvKGUsdCl7cmV0dXJuIG51bGw9PShlPU9pKGUsdD12byh0LGUpKSl8fGRlbGV0ZSBlW1RpKHFpKHQpKV19ZnVuY3Rpb24gc28oZSx0LG4scil7cmV0dXJuIFlyKGUsdCxuKHdyKGUsdCkpLHIpfWZ1bmN0aW9uIGNvKGUsdCxuLHIpe2Zvcih2YXIgbz1lLmxlbmd0aCxpPXI/bzotMTsocj9pLS06KytpPG8pJiZ0KGVbaV0saSxlKTspO3JldHVybiBuP1FyKGUscj8wOmkscj9pKzE6byk6UXIoZSxyP2krMTowLHI/bzppKX1mdW5jdGlvbiB1byhlLHQpe3ZhciBuPWU7cmV0dXJuIG4gaW5zdGFuY2VvZiAkbiYmKG49bi52YWx1ZSgpKSxJdCh0LChmdW5jdGlvbihlLHQpe3JldHVybiB0LmZ1bmMuYXBwbHkodC50aGlzQXJnLFB0KFtlXSx0LmFyZ3MpKX0pLG4pfWZ1bmN0aW9uIGZvKGUsdCxuKXt2YXIgbz1lLmxlbmd0aDtpZihvPDIpcmV0dXJuIG8/YW8oZVswXSk6W107Zm9yKHZhciBpPS0xLGE9cihvKTsrK2k8bzspZm9yKHZhciBsPWVbaV0scz0tMTsrK3M8bzspcyE9aSYmKGFbaV09c3IoYVtpXXx8bCxlW3NdLHQsbikpO3JldHVybiBhbyhocihhLDEpLHQsbil9ZnVuY3Rpb24gcG8oZSx0LG4pe2Zvcih2YXIgcj0tMSxpPWUubGVuZ3RoLGE9dC5sZW5ndGgsbD17fTsrK3I8aTspe3ZhciBzPXI8YT90W3JdOm87bihsLGVbcl0scyl9cmV0dXJuIGx9ZnVuY3Rpb24gaG8oZSl7cmV0dXJuIFdhKGUpP2U6W119ZnVuY3Rpb24gZ28oZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZT9lOnRzfWZ1bmN0aW9uIHZvKGUsdCl7cmV0dXJuIE5hKGUpP2U6bWkoZSx0KT9bZV06QWkodmwoZSkpfXZhciBtbz16cjtmdW5jdGlvbiBDbyhlLHQsbil7dmFyIHI9ZS5sZW5ndGg7cmV0dXJuIG49bj09PW8/cjpuLCF0JiZuPj1yP2U6UXIoZSx0LG4pfXZhciB5bz1hdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGZ0LmNsZWFyVGltZW91dChlKX07ZnVuY3Rpb24gd28oZSx0KXtpZih0KXJldHVybiBlLnNsaWNlKCk7dmFyIG49ZS5sZW5ndGgscj1GZT9GZShuKTpuZXcgZS5jb25zdHJ1Y3RvcihuKTtyZXR1cm4gZS5jb3B5KHIpLHJ9ZnVuY3Rpb24gYm8oZSl7dmFyIHQ9bmV3IGUuY29uc3RydWN0b3IoZS5ieXRlTGVuZ3RoKTtyZXR1cm4gbmV3IE5lKHQpLnNldChuZXcgTmUoZSkpLHR9ZnVuY3Rpb24geG8oZSx0KXt2YXIgbj10P2JvKGUuYnVmZmVyKTplLmJ1ZmZlcjtyZXR1cm4gbmV3IGUuY29uc3RydWN0b3IobixlLmJ5dGVPZmZzZXQsZS5sZW5ndGgpfWZ1bmN0aW9uIF9vKGUsdCl7aWYoZSE9PXQpe3ZhciBuPWUhPT1vLHI9bnVsbD09PWUsaT1lPT1lLGE9YWwoZSksbD10IT09byxzPW51bGw9PT10LGM9dD09dCx1PWFsKHQpO2lmKCFzJiYhdSYmIWEmJmU+dHx8YSYmbCYmYyYmIXMmJiF1fHxyJiZsJiZjfHwhbiYmY3x8IWkpcmV0dXJuIDE7aWYoIXImJiFhJiYhdSYmZTx0fHx1JiZuJiZpJiYhciYmIWF8fHMmJm4mJml8fCFsJiZpfHwhYylyZXR1cm4tMX1yZXR1cm4gMH1mdW5jdGlvbiBPbyhlLHQsbixvKXtmb3IodmFyIGk9LTEsYT1lLmxlbmd0aCxsPW4ubGVuZ3RoLHM9LTEsYz10Lmxlbmd0aCx1PWduKGEtbCwwKSxmPXIoYyt1KSxkPSFvOysrczxjOylmW3NdPXRbc107Zm9yKDsrK2k8bDspKGR8fGk8YSkmJihmW25baV1dPWVbaV0pO2Zvcig7dS0tOylmW3MrK109ZVtpKytdO3JldHVybiBmfWZ1bmN0aW9uIExvKGUsdCxuLG8pe2Zvcih2YXIgaT0tMSxhPWUubGVuZ3RoLGw9LTEscz1uLmxlbmd0aCxjPS0xLHU9dC5sZW5ndGgsZj1nbihhLXMsMCksZD1yKGYrdSkscD0hbzsrK2k8ZjspZFtpXT1lW2ldO2Zvcih2YXIgaD1pOysrYzx1OylkW2grY109dFtjXTtmb3IoOysrbDxzOykocHx8aTxhKSYmKGRbaCtuW2xdXT1lW2krK10pO3JldHVybiBkfWZ1bmN0aW9uIEVvKGUsdCl7dmFyIG49LTEsbz1lLmxlbmd0aDtmb3IodHx8KHQ9cihvKSk7KytuPG87KXRbbl09ZVtuXTtyZXR1cm4gdH1mdW5jdGlvbiBTbyhlLHQsbixyKXt2YXIgaT0hbjtufHwobj17fSk7Zm9yKHZhciBhPS0xLGw9dC5sZW5ndGg7KythPGw7KXt2YXIgcz10W2FdLGM9cj9yKG5bc10sZVtzXSxzLG4sZSk6bztjPT09byYmKGM9ZVtzXSksaT9ucihuLHMsYyk6Sm4obixzLGMpfXJldHVybiBufWZ1bmN0aW9uIGpvKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7dmFyIG89TmEobik/T3Q6ZXIsaT10P3QoKTp7fTtyZXR1cm4gbyhuLGUsaWkociwyKSxpKX19ZnVuY3Rpb24gTW8oZSl7cmV0dXJuIHpyKChmdW5jdGlvbih0LG4pe3ZhciByPS0xLGk9bi5sZW5ndGgsYT1pPjE/bltpLTFdOm8sbD1pPjI/blsyXTpvO2ZvcihhPWUubGVuZ3RoPjMmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGE/KGktLSxhKTpvLGwmJnZpKG5bMF0sblsxXSxsKSYmKGE9aTwzP286YSxpPTEpLHQ9T2UodCk7KytyPGk7KXt2YXIgcz1uW3JdO3MmJmUodCxzLHIsYSl9cmV0dXJuIHR9KSl9ZnVuY3Rpb24ga28oZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXtpZihudWxsPT1uKXJldHVybiBuO2lmKCFVYShuKSlyZXR1cm4gZShuLHIpO2Zvcih2YXIgbz1uLmxlbmd0aCxpPXQ/bzotMSxhPU9lKG4pOyh0P2ktLTorK2k8bykmJiExIT09cihhW2ldLGksYSk7KTtyZXR1cm4gbn19ZnVuY3Rpb24gUm8oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXtmb3IodmFyIG89LTEsaT1PZSh0KSxhPXIodCksbD1hLmxlbmd0aDtsLS07KXt2YXIgcz1hW2U/bDorK29dO2lmKCExPT09bihpW3NdLHMsaSkpYnJlYWt9cmV0dXJuIHR9fWZ1bmN0aW9uIFBvKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj1ybih0PXZsKHQpKT91bih0KTpvLHI9bj9uWzBdOnQuY2hhckF0KDApLGk9bj9DbyhuLDEpLmpvaW4oXCJcIik6dC5zbGljZSgxKTtyZXR1cm4gcltlXSgpK2l9fWZ1bmN0aW9uIElvKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gSXQoWWwoJGwodCkucmVwbGFjZShLZSxcIlwiKSksZSxcIlwiKX19ZnVuY3Rpb24gQW8oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzO3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgZTtjYXNlIDE6cmV0dXJuIG5ldyBlKHRbMF0pO2Nhc2UgMjpyZXR1cm4gbmV3IGUodFswXSx0WzFdKTtjYXNlIDM6cmV0dXJuIG5ldyBlKHRbMF0sdFsxXSx0WzJdKTtjYXNlIDQ6cmV0dXJuIG5ldyBlKHRbMF0sdFsxXSx0WzJdLHRbM10pO2Nhc2UgNTpyZXR1cm4gbmV3IGUodFswXSx0WzFdLHRbMl0sdFszXSx0WzRdKTtjYXNlIDY6cmV0dXJuIG5ldyBlKHRbMF0sdFsxXSx0WzJdLHRbM10sdFs0XSx0WzVdKTtjYXNlIDc6cmV0dXJuIG5ldyBlKHRbMF0sdFsxXSx0WzJdLHRbM10sdFs0XSx0WzVdLHRbNl0pfXZhciBuPVZuKGUucHJvdG90eXBlKSxyPWUuYXBwbHkobix0KTtyZXR1cm4gSmEocik/cjpufX1mdW5jdGlvbiBUbyhlKXtyZXR1cm4gZnVuY3Rpb24odCxuLHIpe3ZhciBpPU9lKHQpO2lmKCFVYSh0KSl7dmFyIGE9aWkobiwzKTt0PU1sKHQpLG49ZnVuY3Rpb24oZSl7cmV0dXJuIGEoaVtlXSxlLGkpfX12YXIgbD1lKHQsbixyKTtyZXR1cm4gbD4tMT9pW2E/dFtsXTpsXTpvfX1mdW5jdGlvbiBIbyhlKXtyZXR1cm4gUW8oKGZ1bmN0aW9uKHQpe3ZhciBuPXQubGVuZ3RoLHI9bixhPVpuLnByb3RvdHlwZS50aHJ1O2ZvcihlJiZ0LnJldmVyc2UoKTtyLS07KXt2YXIgbD10W3JdO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGwpdGhyb3cgbmV3IFNlKGkpO2lmKGEmJiFzJiZcIndyYXBwZXJcIj09cmkobCkpdmFyIHM9bmV3IFpuKFtdLCEwKX1mb3Iocj1zP3I6bjsrK3I8bjspe3ZhciBjPXJpKGw9dFtyXSksdT1cIndyYXBwZXJcIj09Yz9uaShsKTpvO3M9dSYmQ2kodVswXSkmJjQyND09dVsxXSYmIXVbNF0ubGVuZ3RoJiYxPT11WzldP3NbcmkodVswXSldLmFwcGx5KHMsdVszXSk6MT09bC5sZW5ndGgmJkNpKGwpP3NbY10oKTpzLnRocnUobCl9cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLHI9ZVswXTtpZihzJiYxPT1lLmxlbmd0aCYmTmEocikpcmV0dXJuIHMucGxhbnQocikudmFsdWUoKTtmb3IodmFyIG89MCxpPW4/dFtvXS5hcHBseSh0aGlzLGUpOnI7KytvPG47KWk9dFtvXS5jYWxsKHRoaXMsaSk7cmV0dXJuIGl9fSkpfWZ1bmN0aW9uIEJvKGUsdCxuLGksYSxsLHMsdSxmLGQpe3ZhciBwPXQmYyxoPTEmdCxnPTImdCx2PTI0JnQsbT01MTImdCxDPWc/bzpBbyhlKTtyZXR1cm4gZnVuY3Rpb24gYygpe2Zvcih2YXIgeT1hcmd1bWVudHMubGVuZ3RoLHc9cih5KSxiPXk7Yi0tOyl3W2JdPWFyZ3VtZW50c1tiXTtpZih2KXZhciB4PW9pKGMpLF89ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49ZS5sZW5ndGgscj0wO24tLTspZVtuXT09PXQmJisrcjtyZXR1cm4gcn0odyx4KTtpZihpJiYodz1Pbyh3LGksYSx2KSksbCYmKHc9TG8odyxsLHMsdikpLHktPV8sdiYmeTxkKXt2YXIgTz1sbih3LHgpO3JldHVybiBVbyhlLHQsQm8sYy5wbGFjZWhvbGRlcixuLHcsTyx1LGYsZC15KX12YXIgTD1oP246dGhpcyxFPWc/TFtlXTplO3JldHVybiB5PXcubGVuZ3RoLHU/dz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1lLmxlbmd0aCxyPXZuKHQubGVuZ3RoLG4pLGk9RW8oZSk7ci0tOyl7dmFyIGE9dFtyXTtlW3JdPWdpKGEsbik/aVthXTpvfXJldHVybiBlfSh3LHUpOm0mJnk+MSYmdy5yZXZlcnNlKCkscCYmZjx5JiYody5sZW5ndGg9ZiksdGhpcyYmdGhpcyE9PWZ0JiZ0aGlzIGluc3RhbmNlb2YgYyYmKEU9Q3x8QW8oRSkpLEUuYXBwbHkoTCx3KX19ZnVuY3Rpb24gVm8oZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG1yKGUsKGZ1bmN0aW9uKGUsbyxpKXt0KHIsbihlKSxvLGkpfSkpLHJ9KG4sZSx0KHIpLHt9KX19ZnVuY3Rpb24gRG8oZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXt2YXIgaTtpZihuPT09byYmcj09PW8pcmV0dXJuIHQ7aWYobiE9PW8mJihpPW4pLHIhPT1vKXtpZihpPT09bylyZXR1cm4gcjtcInN0cmluZ1wiPT10eXBlb2Ygbnx8XCJzdHJpbmdcIj09dHlwZW9mIHI/KG49aW8obikscj1pbyhyKSk6KG49b28obikscj1vbyhyKSksaT1lKG4scil9cmV0dXJuIGl9fWZ1bmN0aW9uIFpvKGUpe3JldHVybiBRbygoZnVuY3Rpb24odCl7cmV0dXJuIHQ9UnQodCxZdChpaSgpKSksenIoKGZ1bmN0aW9uKG4pe3ZhciByPXRoaXM7cmV0dXJuIGUodCwoZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUscixuKX0pKX0pKX0pKX1mdW5jdGlvbiAkbyhlLHQpe3ZhciBuPSh0PXQ9PT1vP1wiIFwiOmlvKHQpKS5sZW5ndGg7aWYobjwyKXJldHVybiBuP1dyKHQsZSk6dDt2YXIgcj1Xcih0LGR0KGUvY24odCkpKTtyZXR1cm4gcm4odCk/Q28odW4ociksMCxlKS5qb2luKFwiXCIpOnIuc2xpY2UoMCxlKX1mdW5jdGlvbiBObyhlKXtyZXR1cm4gZnVuY3Rpb24odCxuLGkpe3JldHVybiBpJiZcIm51bWJlclwiIT10eXBlb2YgaSYmdmkodCxuLGkpJiYobj1pPW8pLHQ9ZmwodCksbj09PW8/KG49dCx0PTApOm49ZmwobiksZnVuY3Rpb24oZSx0LG4sbyl7Zm9yKHZhciBpPS0xLGE9Z24oZHQoKHQtZSkvKG58fDEpKSwwKSxsPXIoYSk7YS0tOylsW28/YTorK2ldPWUsZSs9bjtyZXR1cm4gbH0odCxuLGk9aT09PW8/dDxuPzE6LTE6ZmwoaSksZSl9fWZ1bmN0aW9uIEZvKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0JiZcInN0cmluZ1wiPT10eXBlb2Ygbnx8KHQ9aGwodCksbj1obChuKSksZSh0LG4pfX1mdW5jdGlvbiBVbyhlLHQsbixyLGksYSxsLGMsdSxmKXt2YXIgZD04JnQ7dHw9ZD9zOjY0LDQmKHQmPX4oZD82NDpzKSl8fCh0Jj0tNCk7dmFyIHA9W2UsdCxpLGQ/YTpvLGQ/bDpvLGQ/bzphLGQ/bzpsLGMsdSxmXSxoPW4uYXBwbHkobyxwKTtyZXR1cm4gQ2koZSkmJkVpKGgscCksaC5wbGFjZWhvbGRlcj1yLE1pKGgsZSx0KX1mdW5jdGlvbiBXbyhlKXt2YXIgdD1fZVtlXTtyZXR1cm4gZnVuY3Rpb24oZSxuKXtpZihlPWhsKGUpLChuPW51bGw9PW4/MDp2bihkbChuKSwyOTIpKSYmSHQoZSkpe3ZhciByPSh2bChlKStcImVcIikuc3BsaXQoXCJlXCIpO3JldHVybisoKHI9KHZsKHQoclswXStcImVcIisoK3JbMV0rbikpKStcImVcIikuc3BsaXQoXCJlXCIpKVswXStcImVcIisoK3JbMV0tbikpfXJldHVybiB0KGUpfX12YXIgem89T24mJjEvc24obmV3IE9uKFssLTBdKSlbMV09PXU/ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBPbihlKX06YXM7ZnVuY3Rpb24gR28oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPWZpKHQpO3JldHVybiBuPT14P29uKHQpOm49PVM/ZnVuY3Rpb24oZSl7dmFyIHQ9LTEsbj1BcnJheShlLnNpemUpO3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKGUpe25bKyt0XT1bZSxlXX0pKSxufSh0KTpmdW5jdGlvbihlLHQpe3JldHVybiBSdCh0LChmdW5jdGlvbih0KXtyZXR1cm5bdCxlW3RdXX0pKX0odCxlKHQpKX19ZnVuY3Rpb24gcW8oZSx0LG4sYSx1LGYsZCxwKXt2YXIgaD0yJnQ7aWYoIWgmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFNlKGkpO3ZhciBnPWE/YS5sZW5ndGg6MDtpZihnfHwodCY9LTk3LGE9dT1vKSxkPWQ9PT1vP2Q6Z24oZGwoZCksMCkscD1wPT09bz9wOmRsKHApLGctPXU/dS5sZW5ndGg6MCw2NCZ0KXt2YXIgdj1hLG09dTthPXU9b312YXIgQz1oP286bmkoZSkseT1bZSx0LG4sYSx1LHYsbSxmLGQscF07aWYoQyYmZnVuY3Rpb24oZSx0KXt2YXIgbj1lWzFdLHI9dFsxXSxvPW58cixpPW88MTMxLGE9cj09YyYmOD09bnx8cj09YyYmMjU2PT1uJiZlWzddLmxlbmd0aDw9dFs4XXx8Mzg0PT1yJiZ0WzddLmxlbmd0aDw9dFs4XSYmOD09bjtpZighaSYmIWEpcmV0dXJuIGU7MSZyJiYoZVsyXT10WzJdLG98PTEmbj8wOjQpO3ZhciBzPXRbM107aWYocyl7dmFyIHU9ZVszXTtlWzNdPXU/T28odSxzLHRbNF0pOnMsZVs0XT11P2xuKGVbM10sbCk6dFs0XX0ocz10WzVdKSYmKHU9ZVs1XSxlWzVdPXU/TG8odSxzLHRbNl0pOnMsZVs2XT11P2xuKGVbNV0sbCk6dFs2XSksKHM9dFs3XSkmJihlWzddPXMpLHImYyYmKGVbOF09bnVsbD09ZVs4XT90WzhdOnZuKGVbOF0sdFs4XSkpLG51bGw9PWVbOV0mJihlWzldPXRbOV0pLGVbMF09dFswXSxlWzFdPW99KHksQyksZT15WzBdLHQ9eVsxXSxuPXlbMl0sYT15WzNdLHU9eVs0XSwhKHA9eVs5XT15WzldPT09bz9oPzA6ZS5sZW5ndGg6Z24oeVs5XS1nLDApKSYmMjQmdCYmKHQmPS0yNSksdCYmMSE9dCl3PTg9PXR8fDE2PT10P2Z1bmN0aW9uKGUsdCxuKXt2YXIgaT1BbyhlKTtyZXR1cm4gZnVuY3Rpb24gYSgpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLHM9cihsKSxjPWwsdT1vaShhKTtjLS07KXNbY109YXJndW1lbnRzW2NdO3ZhciBmPWw8MyYmc1swXSE9PXUmJnNbbC0xXSE9PXU/W106bG4ocyx1KTtyZXR1cm4obC09Zi5sZW5ndGgpPG4/VW8oZSx0LEJvLGEucGxhY2Vob2xkZXIsbyxzLGYsbyxvLG4tbCk6X3QodGhpcyYmdGhpcyE9PWZ0JiZ0aGlzIGluc3RhbmNlb2YgYT9pOmUsdGhpcyxzKX19KGUsdCxwKTp0IT1zJiYzMyE9dHx8dS5sZW5ndGg/Qm8uYXBwbHkobyx5KTpmdW5jdGlvbihlLHQsbixvKXt2YXIgaT0xJnQsYT1BbyhlKTtyZXR1cm4gZnVuY3Rpb24gdCgpe2Zvcih2YXIgbD0tMSxzPWFyZ3VtZW50cy5sZW5ndGgsYz0tMSx1PW8ubGVuZ3RoLGY9cih1K3MpLGQ9dGhpcyYmdGhpcyE9PWZ0JiZ0aGlzIGluc3RhbmNlb2YgdD9hOmU7KytjPHU7KWZbY109b1tjXTtmb3IoO3MtLTspZltjKytdPWFyZ3VtZW50c1srK2xdO3JldHVybiBfdChkLGk/bjp0aGlzLGYpfX0oZSx0LG4sYSk7ZWxzZSB2YXIgdz1mdW5jdGlvbihlLHQsbil7dmFyIHI9MSZ0LG89QW8oZSk7cmV0dXJuIGZ1bmN0aW9uIHQoKXtyZXR1cm4odGhpcyYmdGhpcyE9PWZ0JiZ0aGlzIGluc3RhbmNlb2YgdD9vOmUpLmFwcGx5KHI/bjp0aGlzLGFyZ3VtZW50cyl9fShlLHQsbik7cmV0dXJuIE1pKChDP0tyOkVpKSh3LHkpLGUsdCl9ZnVuY3Rpb24gWW8oZSx0LG4scil7cmV0dXJuIGU9PT1vfHxWYShlLGtlW25dKSYmIUllLmNhbGwocixuKT90OmV9ZnVuY3Rpb24gS28oZSx0LG4scixpLGEpe3JldHVybiBKYShlKSYmSmEodCkmJihhLnNldCh0LGUpLFZyKGUsdCxvLEtvLGEpLGEuZGVsZXRlKHQpKSxlfWZ1bmN0aW9uIFhvKGUpe3JldHVybiBubChlKT9vOmV9ZnVuY3Rpb24gSm8oZSx0LG4scixpLGEpe3ZhciBsPTEmbixzPWUubGVuZ3RoLGM9dC5sZW5ndGg7aWYocyE9YyYmIShsJiZjPnMpKXJldHVybiExO3ZhciB1PWEuZ2V0KGUpLGY9YS5nZXQodCk7aWYodSYmZilyZXR1cm4gdT09dCYmZj09ZTt2YXIgZD0tMSxwPSEwLGg9MiZuP25ldyBXbjpvO2ZvcihhLnNldChlLHQpLGEuc2V0KHQsZSk7KytkPHM7KXt2YXIgZz1lW2RdLHY9dFtkXTtpZihyKXZhciBtPWw/cih2LGcsZCx0LGUsYSk6cihnLHYsZCxlLHQsYSk7aWYobSE9PW8pe2lmKG0pY29udGludWU7cD0hMTticmVha31pZihoKXtpZighVHQodCwoZnVuY3Rpb24oZSx0KXtpZighWHQoaCx0KSYmKGc9PT1lfHxpKGcsZSxuLHIsYSkpKXJldHVybiBoLnB1c2godCl9KSkpe3A9ITE7YnJlYWt9fWVsc2UgaWYoZyE9PXYmJiFpKGcsdixuLHIsYSkpe3A9ITE7YnJlYWt9fXJldHVybiBhLmRlbGV0ZShlKSxhLmRlbGV0ZSh0KSxwfWZ1bmN0aW9uIFFvKGUpe3JldHVybiBqaShfaShlLG8sRmkpLGUrXCJcIil9ZnVuY3Rpb24gZWkoZSl7cmV0dXJuIGJyKGUsTWwsY2kpfWZ1bmN0aW9uIHRpKGUpe3JldHVybiBicihlLGtsLHVpKX12YXIgbmk9U24/ZnVuY3Rpb24oZSl7cmV0dXJuIFNuLmdldChlKX06YXM7ZnVuY3Rpb24gcmkoZSl7Zm9yKHZhciB0PWUubmFtZStcIlwiLG49am5bdF0scj1JZS5jYWxsKGpuLHQpP24ubGVuZ3RoOjA7ci0tOyl7dmFyIG89bltyXSxpPW8uZnVuYztpZihudWxsPT1pfHxpPT1lKXJldHVybiBvLm5hbWV9cmV0dXJuIHR9ZnVuY3Rpb24gb2koZSl7cmV0dXJuKEllLmNhbGwoQm4sXCJwbGFjZWhvbGRlclwiKT9CbjplKS5wbGFjZWhvbGRlcn1mdW5jdGlvbiBpaSgpe3ZhciBlPUJuLml0ZXJhdGVlfHxucztyZXR1cm4gZT1lPT09bnM/UHI6ZSxhcmd1bWVudHMubGVuZ3RoP2UoYXJndW1lbnRzWzBdLGFyZ3VtZW50c1sxXSk6ZX1mdW5jdGlvbiBhaShlLHQpe3ZhciBuLHIsbz1lLl9fZGF0YV9fO3JldHVybihcInN0cmluZ1wiPT0ocj10eXBlb2Yobj10KSl8fFwibnVtYmVyXCI9PXJ8fFwic3ltYm9sXCI9PXJ8fFwiYm9vbGVhblwiPT1yP1wiX19wcm90b19fXCIhPT1uOm51bGw9PT1uKT9vW1wic3RyaW5nXCI9PXR5cGVvZiB0P1wic3RyaW5nXCI6XCJoYXNoXCJdOm8ubWFwfWZ1bmN0aW9uIGxpKGUpe2Zvcih2YXIgdD1NbChlKSxuPXQubGVuZ3RoO24tLTspe3ZhciByPXRbbl0sbz1lW3JdO3Rbbl09W3IsbyxiaShvKV19cmV0dXJuIHR9ZnVuY3Rpb24gc2koZSx0KXt2YXIgbj1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lP286ZVt0XX0oZSx0KTtyZXR1cm4gUnIobik/bjpvfXZhciBjaT1ndD9mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT9bXTooZT1PZShlKSxqdChndChlKSwoZnVuY3Rpb24odCl7cmV0dXJuIHplLmNhbGwoZSx0KX0pKSl9OnBzLHVpPWd0P2Z1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXTtlOylQdCh0LGNpKGUpKSxlPVVlKGUpO3JldHVybiB0fTpwcyxmaT14cjtmdW5jdGlvbiBkaShlLHQsbil7Zm9yKHZhciByPS0xLG89KHQ9dm8odCxlKSkubGVuZ3RoLGk9ITE7KytyPG87KXt2YXIgYT1UaSh0W3JdKTtpZighKGk9bnVsbCE9ZSYmbihlLGEpKSlicmVhaztlPWVbYV19cmV0dXJuIGl8fCsrciE9bz9pOiEhKG89bnVsbD09ZT8wOmUubGVuZ3RoKSYmWGEobykmJmdpKGEsbykmJihOYShlKXx8JGEoZSkpfWZ1bmN0aW9uIHBpKGUpe3JldHVyblwiZnVuY3Rpb25cIiE9dHlwZW9mIGUuY29uc3RydWN0b3J8fHdpKGUpP3t9OlZuKFVlKGUpKX1mdW5jdGlvbiBoaShlKXtyZXR1cm4gTmEoZSl8fCRhKGUpfHwhIShxZSYmZSYmZVtxZV0pfWZ1bmN0aW9uIGdpKGUsdCl7dmFyIG49dHlwZW9mIGU7cmV0dXJuISEodD1udWxsPT10P2Y6dCkmJihcIm51bWJlclwiPT1ufHxcInN5bWJvbFwiIT1uJiZtZS50ZXN0KGUpKSYmZT4tMSYmZSUxPT0wJiZlPHR9ZnVuY3Rpb24gdmkoZSx0LG4pe2lmKCFKYShuKSlyZXR1cm4hMTt2YXIgcj10eXBlb2YgdDtyZXR1cm4hIShcIm51bWJlclwiPT1yP1VhKG4pJiZnaSh0LG4ubGVuZ3RoKTpcInN0cmluZ1wiPT1yJiZ0IGluIG4pJiZWYShuW3RdLGUpfWZ1bmN0aW9uIG1pKGUsdCl7aWYoTmEoZSkpcmV0dXJuITE7dmFyIG49dHlwZW9mIGU7cmV0dXJuIShcIm51bWJlclwiIT1uJiZcInN5bWJvbFwiIT1uJiZcImJvb2xlYW5cIiE9biYmbnVsbCE9ZSYmIWFsKGUpKXx8US50ZXN0KGUpfHwhSi50ZXN0KGUpfHxudWxsIT10JiZlIGluIE9lKHQpfWZ1bmN0aW9uIENpKGUpe3ZhciB0PXJpKGUpLG49Qm5bdF07aWYoXCJmdW5jdGlvblwiIT10eXBlb2Ygbnx8ISh0IGluICRuLnByb3RvdHlwZSkpcmV0dXJuITE7aWYoZT09PW4pcmV0dXJuITA7dmFyIHI9bmkobik7cmV0dXJuISFyJiZlPT09clswXX0oYm4mJmZpKG5ldyBibihuZXcgQXJyYXlCdWZmZXIoMSkpKSE9UHx8eG4mJmZpKG5ldyB4bikhPXh8fF9uJiZmaShfbi5yZXNvbHZlKCkpIT1MfHxPbiYmZmkobmV3IE9uKSE9U3x8TG4mJmZpKG5ldyBMbikhPWspJiYoZmk9ZnVuY3Rpb24oZSl7dmFyIHQ9eHIoZSksbj10PT1PP2UuY29uc3RydWN0b3I6byxyPW4/SGkobik6XCJcIjtpZihyKXN3aXRjaChyKXtjYXNlIE1uOnJldHVybiBQO2Nhc2Uga246cmV0dXJuIHg7Y2FzZSBSbjpyZXR1cm4gTDtjYXNlIFBuOnJldHVybiBTO2Nhc2UgSW46cmV0dXJuIGt9cmV0dXJuIHR9KTt2YXIgeWk9UmU/WWE6aHM7ZnVuY3Rpb24gd2koZSl7dmFyIHQ9ZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4gZT09PShcImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiZ0LnByb3RvdHlwZXx8a2UpfWZ1bmN0aW9uIGJpKGUpe3JldHVybiBlPT1lJiYhSmEoZSl9ZnVuY3Rpb24geGkoZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG51bGwhPW4mJm5bZV09PT10JiYodCE9PW98fGUgaW4gT2UobikpfX1mdW5jdGlvbiBfaShlLHQsbil7cmV0dXJuIHQ9Z24odD09PW8/ZS5sZW5ndGgtMTp0LDApLGZ1bmN0aW9uKCl7Zm9yKHZhciBvPWFyZ3VtZW50cyxpPS0xLGE9Z24oby5sZW5ndGgtdCwwKSxsPXIoYSk7KytpPGE7KWxbaV09b1t0K2ldO2k9LTE7Zm9yKHZhciBzPXIodCsxKTsrK2k8dDspc1tpXT1vW2ldO3JldHVybiBzW3RdPW4obCksX3QoZSx0aGlzLHMpfX1mdW5jdGlvbiBPaShlLHQpe3JldHVybiB0Lmxlbmd0aDwyP2U6d3IoZSxRcih0LDAsLTEpKX1mdW5jdGlvbiBMaShlLHQpe2lmKChcImNvbnN0cnVjdG9yXCIhPT10fHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBlW3RdKSYmXCJfX3Byb3RvX19cIiE9dClyZXR1cm4gZVt0XX12YXIgRWk9a2koS3IpLFNpPXV0fHxmdW5jdGlvbihlLHQpe3JldHVybiBmdC5zZXRUaW1lb3V0KGUsdCl9LGppPWtpKFhyKTtmdW5jdGlvbiBNaShlLHQsbil7dmFyIHI9dCtcIlwiO3JldHVybiBqaShlLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5sZW5ndGg7aWYoIW4pcmV0dXJuIGU7dmFyIHI9bi0xO3JldHVybiB0W3JdPShuPjE/XCImIFwiOlwiXCIpK3Rbcl0sdD10LmpvaW4obj4yP1wiLCBcIjpcIiBcIiksZS5yZXBsYWNlKGllLFwie1xcbi8qIFt3cmFwcGVkIHdpdGggXCIrdCtcIl0gKi9cXG5cIil9KHIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gTHQoaCwoZnVuY3Rpb24obil7dmFyIHI9XCJfLlwiK25bMF07dCZuWzFdJiYhTXQoZSxyKSYmZS5wdXNoKHIpfSkpLGUuc29ydCgpfShmdW5jdGlvbihlKXt2YXIgdD1lLm1hdGNoKGFlKTtyZXR1cm4gdD90WzFdLnNwbGl0KGxlKTpbXX0ociksbikpKX1mdW5jdGlvbiBraShlKXt2YXIgdD0wLG49MDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1tbigpLGk9MTYtKHItbik7aWYobj1yLGk+MCl7aWYoKyt0Pj04MDApcmV0dXJuIGFyZ3VtZW50c1swXX1lbHNlIHQ9MDtyZXR1cm4gZS5hcHBseShvLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIFJpKGUsdCl7dmFyIG49LTEscj1lLmxlbmd0aCxpPXItMTtmb3IodD10PT09bz9yOnQ7KytuPHQ7KXt2YXIgYT1VcihuLGkpLGw9ZVthXTtlW2FdPWVbbl0sZVtuXT1sfXJldHVybiBlLmxlbmd0aD10LGV9dmFyIFBpLElpLEFpPShQaT1QYSgoZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIDQ2PT09ZS5jaGFyQ29kZUF0KDApJiZ0LnB1c2goXCJcIiksZS5yZXBsYWNlKGVlLChmdW5jdGlvbihlLG4scixvKXt0LnB1c2gocj9vLnJlcGxhY2UodWUsXCIkMVwiKTpufHxlKX0pKSx0fSksKGZ1bmN0aW9uKGUpe3JldHVybiA1MDA9PT1JaS5zaXplJiZJaS5jbGVhcigpLGV9KSksSWk9UGkuY2FjaGUsUGkpO2Z1bmN0aW9uIFRpKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlfHxhbChlKSlyZXR1cm4gZTt2YXIgdD1lK1wiXCI7cmV0dXJuXCIwXCI9PXQmJjEvZT09LTEvMD9cIi0wXCI6dH1mdW5jdGlvbiBIaShlKXtpZihudWxsIT1lKXt0cnl7cmV0dXJuIFBlLmNhbGwoZSl9Y2F0Y2goZSl7fXRyeXtyZXR1cm4gZStcIlwifWNhdGNoKGUpe319cmV0dXJuXCJcIn1mdW5jdGlvbiBCaShlKXtpZihlIGluc3RhbmNlb2YgJG4pcmV0dXJuIGUuY2xvbmUoKTt2YXIgdD1uZXcgWm4oZS5fX3dyYXBwZWRfXyxlLl9fY2hhaW5fXyk7cmV0dXJuIHQuX19hY3Rpb25zX189RW8oZS5fX2FjdGlvbnNfXyksdC5fX2luZGV4X189ZS5fX2luZGV4X18sdC5fX3ZhbHVlc19fPWUuX192YWx1ZXNfXyx0fXZhciBWaT16cigoZnVuY3Rpb24oZSx0KXtyZXR1cm4gV2EoZSk/c3IoZSxocih0LDEsV2EsITApKTpbXX0pKSxEaT16cigoZnVuY3Rpb24oZSx0KXt2YXIgbj1xaSh0KTtyZXR1cm4gV2EobikmJihuPW8pLFdhKGUpP3NyKGUsaHIodCwxLFdhLCEwKSxpaShuLDIpKTpbXX0pKSxaaT16cigoZnVuY3Rpb24oZSx0KXt2YXIgbj1xaSh0KTtyZXR1cm4gV2EobikmJihuPW8pLFdhKGUpP3NyKGUsaHIodCwxLFdhLCEwKSxvLG4pOltdfSkpO2Z1bmN0aW9uICRpKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7aWYoIXIpcmV0dXJuLTE7dmFyIG89bnVsbD09bj8wOmRsKG4pO3JldHVybiBvPDAmJihvPWduKHIrbywwKSksVnQoZSxpaSh0LDMpLG8pfWZ1bmN0aW9uIE5pKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7aWYoIXIpcmV0dXJuLTE7dmFyIGk9ci0xO3JldHVybiBuIT09byYmKGk9ZGwobiksaT1uPDA/Z24ocitpLDApOnZuKGksci0xKSksVnQoZSxpaSh0LDMpLGksITApfWZ1bmN0aW9uIEZpKGUpe3JldHVybiBudWxsIT1lJiZlLmxlbmd0aD9ocihlLDEpOltdfWZ1bmN0aW9uIFVpKGUpe3JldHVybiBlJiZlLmxlbmd0aD9lWzBdOm99dmFyIFdpPXpyKChmdW5jdGlvbihlKXt2YXIgdD1SdChlLGhvKTtyZXR1cm4gdC5sZW5ndGgmJnRbMF09PT1lWzBdP0VyKHQpOltdfSkpLHppPXpyKChmdW5jdGlvbihlKXt2YXIgdD1xaShlKSxuPVJ0KGUsaG8pO3JldHVybiB0PT09cWkobik/dD1vOm4ucG9wKCksbi5sZW5ndGgmJm5bMF09PT1lWzBdP0VyKG4saWkodCwyKSk6W119KSksR2k9enIoKGZ1bmN0aW9uKGUpe3ZhciB0PXFpKGUpLG49UnQoZSxobyk7cmV0dXJuKHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Om8pJiZuLnBvcCgpLG4ubGVuZ3RoJiZuWzBdPT09ZVswXT9FcihuLG8sdCk6W119KSk7ZnVuY3Rpb24gcWkoZSl7dmFyIHQ9bnVsbD09ZT8wOmUubGVuZ3RoO3JldHVybiB0P2VbdC0xXTpvfXZhciBZaT16cihLaSk7ZnVuY3Rpb24gS2koZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGgmJnQmJnQubGVuZ3RoP05yKGUsdCk6ZX12YXIgWGk9UW8oKGZ1bmN0aW9uKGUsdCl7dmFyIG49bnVsbD09ZT8wOmUubGVuZ3RoLHI9cnIoZSx0KTtyZXR1cm4gRnIoZSxSdCh0LChmdW5jdGlvbihlKXtyZXR1cm4gZ2koZSxuKT8rZTplfSkpLnNvcnQoX28pKSxyfSkpO2Z1bmN0aW9uIEppKGUpe3JldHVybiBudWxsPT1lP2U6d24uY2FsbChlKX12YXIgUWk9enIoKGZ1bmN0aW9uKGUpe3JldHVybiBhbyhocihlLDEsV2EsITApKX0pKSxlYT16cigoZnVuY3Rpb24oZSl7dmFyIHQ9cWkoZSk7cmV0dXJuIFdhKHQpJiYodD1vKSxhbyhocihlLDEsV2EsITApLGlpKHQsMikpfSkpLHRhPXpyKChmdW5jdGlvbihlKXt2YXIgdD1xaShlKTtyZXR1cm4gdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6byxhbyhocihlLDEsV2EsITApLG8sdCl9KSk7ZnVuY3Rpb24gbmEoZSl7aWYoIWV8fCFlLmxlbmd0aClyZXR1cm5bXTt2YXIgdD0wO3JldHVybiBlPWp0KGUsKGZ1bmN0aW9uKGUpe2lmKFdhKGUpKXJldHVybiB0PWduKGUubGVuZ3RoLHQpLCEwfSkpLEd0KHQsKGZ1bmN0aW9uKHQpe3JldHVybiBSdChlLEZ0KHQpKX0pKX1mdW5jdGlvbiByYShlLHQpe2lmKCFlfHwhZS5sZW5ndGgpcmV0dXJuW107dmFyIG49bmEoZSk7cmV0dXJuIG51bGw9PXQ/bjpSdChuLChmdW5jdGlvbihlKXtyZXR1cm4gX3QodCxvLGUpfSkpfXZhciBvYT16cigoZnVuY3Rpb24oZSx0KXtyZXR1cm4gV2EoZSk/c3IoZSx0KTpbXX0pKSxpYT16cigoZnVuY3Rpb24oZSl7cmV0dXJuIGZvKGp0KGUsV2EpKX0pKSxhYT16cigoZnVuY3Rpb24oZSl7dmFyIHQ9cWkoZSk7cmV0dXJuIFdhKHQpJiYodD1vKSxmbyhqdChlLFdhKSxpaSh0LDIpKX0pKSxsYT16cigoZnVuY3Rpb24oZSl7dmFyIHQ9cWkoZSk7cmV0dXJuIHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Om8sZm8oanQoZSxXYSksbyx0KX0pKSxzYT16cihuYSksY2E9enIoKGZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoLG49dD4xP2VbdC0xXTpvO3JldHVybiBuPVwiZnVuY3Rpb25cIj09dHlwZW9mIG4/KGUucG9wKCksbik6byxyYShlLG4pfSkpO2Z1bmN0aW9uIHVhKGUpe3ZhciB0PUJuKGUpO3JldHVybiB0Ll9fY2hhaW5fXz0hMCx0fWZ1bmN0aW9uIGZhKGUsdCl7cmV0dXJuIHQoZSl9dmFyIGRhPVFvKChmdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aCxuPXQ/ZVswXTowLHI9dGhpcy5fX3dyYXBwZWRfXyxpPWZ1bmN0aW9uKHQpe3JldHVybiBycih0LGUpfTtyZXR1cm4hKHQ+MXx8dGhpcy5fX2FjdGlvbnNfXy5sZW5ndGgpJiZyIGluc3RhbmNlb2YgJG4mJmdpKG4pPygocj1yLnNsaWNlKG4sK24rKHQ/MTowKSkpLl9fYWN0aW9uc19fLnB1c2goe2Z1bmM6ZmEsYXJnczpbaV0sdGhpc0FyZzpvfSksbmV3IFpuKHIsdGhpcy5fX2NoYWluX18pLnRocnUoKGZ1bmN0aW9uKGUpe3JldHVybiB0JiYhZS5sZW5ndGgmJmUucHVzaChvKSxlfSkpKTp0aGlzLnRocnUoaSl9KSkscGE9am8oKGZ1bmN0aW9uKGUsdCxuKXtJZS5jYWxsKGUsbik/KytlW25dOm5yKGUsbiwxKX0pKSxoYT1UbygkaSksZ2E9VG8oTmkpO2Z1bmN0aW9uIHZhKGUsdCl7cmV0dXJuKE5hKGUpP0x0OmNyKShlLGlpKHQsMykpfWZ1bmN0aW9uIG1hKGUsdCl7cmV0dXJuKE5hKGUpP0V0OnVyKShlLGlpKHQsMykpfXZhciBDYT1qbygoZnVuY3Rpb24oZSx0LG4pe0llLmNhbGwoZSxuKT9lW25dLnB1c2godCk6bnIoZSxuLFt0XSl9KSkseWE9enIoKGZ1bmN0aW9uKGUsdCxuKXt2YXIgbz0tMSxpPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQsYT1VYShlKT9yKGUubGVuZ3RoKTpbXTtyZXR1cm4gY3IoZSwoZnVuY3Rpb24oZSl7YVsrK29dPWk/X3QodCxlLG4pOlNyKGUsdCxuKX0pKSxhfSkpLHdhPWpvKChmdW5jdGlvbihlLHQsbil7bnIoZSxuLHQpfSkpO2Z1bmN0aW9uIGJhKGUsdCl7cmV0dXJuKE5hKGUpP1J0OlRyKShlLGlpKHQsMykpfXZhciB4YT1qbygoZnVuY3Rpb24oZSx0LG4pe2Vbbj8wOjFdLnB1c2godCl9KSwoZnVuY3Rpb24oKXtyZXR1cm5bW10sW11dfSkpLF9hPXpyKChmdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJuW107dmFyIG49dC5sZW5ndGg7cmV0dXJuIG4+MSYmdmkoZSx0WzBdLHRbMV0pP3Q9W106bj4yJiZ2aSh0WzBdLHRbMV0sdFsyXSkmJih0PVt0WzBdXSksWnIoZSxocih0LDEpLFtdKX0pKSxPYT1jdHx8ZnVuY3Rpb24oKXtyZXR1cm4gZnQuRGF0ZS5ub3coKX07ZnVuY3Rpb24gTGEoZSx0LG4pe3JldHVybiB0PW4/bzp0LHQ9ZSYmbnVsbD09dD9lLmxlbmd0aDp0LHFvKGUsYyxvLG8sbyxvLHQpfWZ1bmN0aW9uIEVhKGUsdCl7dmFyIG47aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBuZXcgU2UoaSk7cmV0dXJuIGU9ZGwoZSksZnVuY3Rpb24oKXtyZXR1cm4tLWU+MCYmKG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGU8PTEmJih0PW8pLG59fXZhciBTYT16cigoZnVuY3Rpb24oZSx0LG4pe3ZhciByPTE7aWYobi5sZW5ndGgpe3ZhciBvPWxuKG4sb2koU2EpKTtyfD1zfXJldHVybiBxbyhlLHIsdCxuLG8pfSkpLGphPXpyKChmdW5jdGlvbihlLHQsbil7dmFyIHI9MztpZihuLmxlbmd0aCl7dmFyIG89bG4obixvaShqYSkpO3J8PXN9cmV0dXJuIHFvKHQscixlLG4sbyl9KSk7ZnVuY3Rpb24gTWEoZSx0LG4pe3ZhciByLGEsbCxzLGMsdSxmPTAsZD0hMSxwPSExLGg9ITA7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgU2UoaSk7ZnVuY3Rpb24gZyh0KXt2YXIgbj1yLGk9YTtyZXR1cm4gcj1hPW8sZj10LHM9ZS5hcHBseShpLG4pfWZ1bmN0aW9uIHYoZSl7dmFyIG49ZS11O3JldHVybiB1PT09b3x8bj49dHx8bjwwfHxwJiZlLWY+PWx9ZnVuY3Rpb24gbSgpe3ZhciBlPU9hKCk7aWYodihlKSlyZXR1cm4gQyhlKTtjPVNpKG0sZnVuY3Rpb24oZSl7dmFyIG49dC0oZS11KTtyZXR1cm4gcD92bihuLGwtKGUtZikpOm59KGUpKX1mdW5jdGlvbiBDKGUpe3JldHVybiBjPW8saCYmcj9nKGUpOihyPWE9byxzKX1mdW5jdGlvbiB5KCl7dmFyIGU9T2EoKSxuPXYoZSk7aWYocj1hcmd1bWVudHMsYT10aGlzLHU9ZSxuKXtpZihjPT09bylyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGY9ZSxjPVNpKG0sdCksZD9nKGUpOnN9KHUpO2lmKHApcmV0dXJuIHlvKGMpLGM9U2kobSx0KSxnKHUpfXJldHVybiBjPT09byYmKGM9U2kobSx0KSksc31yZXR1cm4gdD1obCh0KXx8MCxKYShuKSYmKGQ9ISFuLmxlYWRpbmcsbD0ocD1cIm1heFdhaXRcImluIG4pP2duKGhsKG4ubWF4V2FpdCl8fDAsdCk6bCxoPVwidHJhaWxpbmdcImluIG4/ISFuLnRyYWlsaW5nOmgpLHkuY2FuY2VsPWZ1bmN0aW9uKCl7YyE9PW8mJnlvKGMpLGY9MCxyPXU9YT1jPW99LHkuZmx1c2g9ZnVuY3Rpb24oKXtyZXR1cm4gYz09PW8/czpDKE9hKCkpfSx5fXZhciBrYT16cigoZnVuY3Rpb24oZSx0KXtyZXR1cm4gbHIoZSwxLHQpfSkpLFJhPXpyKChmdW5jdGlvbihlLHQsbil7cmV0dXJuIGxyKGUsaGwodCl8fDAsbil9KSk7ZnVuY3Rpb24gUGEoZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlfHxudWxsIT10JiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IG5ldyBTZShpKTt2YXIgbj1mdW5jdGlvbigpe3ZhciByPWFyZ3VtZW50cyxvPXQ/dC5hcHBseSh0aGlzLHIpOnJbMF0saT1uLmNhY2hlO2lmKGkuaGFzKG8pKXJldHVybiBpLmdldChvKTt2YXIgYT1lLmFwcGx5KHRoaXMscik7cmV0dXJuIG4uY2FjaGU9aS5zZXQobyxhKXx8aSxhfTtyZXR1cm4gbi5jYWNoZT1uZXcoUGEuQ2FjaGV8fFVuKSxufWZ1bmN0aW9uIElhKGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFNlKGkpO3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cztzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4hZS5jYWxsKHRoaXMpO2Nhc2UgMTpyZXR1cm4hZS5jYWxsKHRoaXMsdFswXSk7Y2FzZSAyOnJldHVybiFlLmNhbGwodGhpcyx0WzBdLHRbMV0pO2Nhc2UgMzpyZXR1cm4hZS5jYWxsKHRoaXMsdFswXSx0WzFdLHRbMl0pfXJldHVybiFlLmFwcGx5KHRoaXMsdCl9fVBhLkNhY2hlPVVuO3ZhciBBYT1tbygoZnVuY3Rpb24oZSx0KXt2YXIgbj0odD0xPT10Lmxlbmd0aCYmTmEodFswXSk/UnQodFswXSxZdChpaSgpKSk6UnQoaHIodCwxKSxZdChpaSgpKSkpLmxlbmd0aDtyZXR1cm4genIoKGZ1bmN0aW9uKHIpe2Zvcih2YXIgbz0tMSxpPXZuKHIubGVuZ3RoLG4pOysrbzxpOylyW29dPXRbb10uY2FsbCh0aGlzLHJbb10pO3JldHVybiBfdChlLHRoaXMscil9KSl9KSksVGE9enIoKGZ1bmN0aW9uKGUsdCl7dmFyIG49bG4odCxvaShUYSkpO3JldHVybiBxbyhlLHMsbyx0LG4pfSkpLEhhPXpyKChmdW5jdGlvbihlLHQpe3ZhciBuPWxuKHQsb2koSGEpKTtyZXR1cm4gcW8oZSw2NCxvLHQsbil9KSksQmE9UW8oKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHFvKGUsMjU2LG8sbyxvLHQpfSkpO2Z1bmN0aW9uIFZhKGUsdCl7cmV0dXJuIGU9PT10fHxlIT1lJiZ0IT10fXZhciBEYT1GbyhfciksWmE9Rm8oKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU+PXR9KSksJGE9anIoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKT9qcjpmdW5jdGlvbihlKXtyZXR1cm4gUWEoZSkmJkllLmNhbGwoZSxcImNhbGxlZVwiKSYmIXplLmNhbGwoZSxcImNhbGxlZVwiKX0sTmE9ci5pc0FycmF5LEZhPW10P1l0KG10KTpmdW5jdGlvbihlKXtyZXR1cm4gUWEoZSkmJnhyKGUpPT1SfTtmdW5jdGlvbiBVYShlKXtyZXR1cm4gbnVsbCE9ZSYmWGEoZS5sZW5ndGgpJiYhWWEoZSl9ZnVuY3Rpb24gV2EoZSl7cmV0dXJuIFFhKGUpJiZVYShlKX12YXIgemE9dnR8fGhzLEdhPUN0P1l0KEN0KTpmdW5jdGlvbihlKXtyZXR1cm4gUWEoZSkmJnhyKGUpPT1DfTtmdW5jdGlvbiBxYShlKXtpZighUWEoZSkpcmV0dXJuITE7dmFyIHQ9eHIoZSk7cmV0dXJuIHQ9PXl8fFwiW29iamVjdCBET01FeGNlcHRpb25dXCI9PXR8fFwic3RyaW5nXCI9PXR5cGVvZiBlLm1lc3NhZ2UmJlwic3RyaW5nXCI9PXR5cGVvZiBlLm5hbWUmJiFubChlKX1mdW5jdGlvbiBZYShlKXtpZighSmEoZSkpcmV0dXJuITE7dmFyIHQ9eHIoZSk7cmV0dXJuIHQ9PXd8fHQ9PWJ8fFwiW29iamVjdCBBc3luY0Z1bmN0aW9uXVwiPT10fHxcIltvYmplY3QgUHJveHldXCI9PXR9ZnVuY3Rpb24gS2EoZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGUmJmU9PWRsKGUpfWZ1bmN0aW9uIFhhKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlJiZlPi0xJiZlJTE9PTAmJmU8PWZ9ZnVuY3Rpb24gSmEoZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuIG51bGwhPWUmJihcIm9iamVjdFwiPT10fHxcImZ1bmN0aW9uXCI9PXQpfWZ1bmN0aW9uIFFhKGUpe3JldHVybiBudWxsIT1lJiZcIm9iamVjdFwiPT10eXBlb2YgZX12YXIgZWw9eXQ/WXQoeXQpOmZ1bmN0aW9uKGUpe3JldHVybiBRYShlKSYmZmkoZSk9PXh9O2Z1bmN0aW9uIHRsKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlfHxRYShlKSYmeHIoZSk9PV99ZnVuY3Rpb24gbmwoZSl7aWYoIVFhKGUpfHx4cihlKSE9TylyZXR1cm4hMTt2YXIgdD1VZShlKTtpZihudWxsPT09dClyZXR1cm4hMDt2YXIgbj1JZS5jYWxsKHQsXCJjb25zdHJ1Y3RvclwiKSYmdC5jb25zdHJ1Y3RvcjtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBuJiZuIGluc3RhbmNlb2YgbiYmUGUuY2FsbChuKT09QmV9dmFyIHJsPXd0P1l0KHd0KTpmdW5jdGlvbihlKXtyZXR1cm4gUWEoZSkmJnhyKGUpPT1FfSxvbD1idD9ZdChidCk6ZnVuY3Rpb24oZSl7cmV0dXJuIFFhKGUpJiZmaShlKT09U307ZnVuY3Rpb24gaWwoZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGV8fCFOYShlKSYmUWEoZSkmJnhyKGUpPT1qfWZ1bmN0aW9uIGFsKGUpe3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiBlfHxRYShlKSYmeHIoZSk9PU19dmFyIGxsPXh0P1l0KHh0KTpmdW5jdGlvbihlKXtyZXR1cm4gUWEoZSkmJlhhKGUubGVuZ3RoKSYmISFvdFt4cihlKV19LHNsPUZvKEFyKSxjbD1GbygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZTw9dH0pKTtmdW5jdGlvbiB1bChlKXtpZighZSlyZXR1cm5bXTtpZihVYShlKSlyZXR1cm4gaWwoZSk/dW4oZSk6RW8oZSk7aWYoWWUmJmVbWWVdKXJldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHQsbj1bXTshKHQ9ZS5uZXh0KCkpLmRvbmU7KW4ucHVzaCh0LnZhbHVlKTtyZXR1cm4gbn0oZVtZZV0oKSk7dmFyIHQ9ZmkoZSk7cmV0dXJuKHQ9PXg/b246dD09Uz9zbjpWbCkoZSl9ZnVuY3Rpb24gZmwoZSl7cmV0dXJuIGU/KGU9aGwoZSkpPT09dXx8ZT09PS0xLzA/MTc5NzY5MzEzNDg2MjMxNTdlMjkyKihlPDA/LTE6MSk6ZT09ZT9lOjA6MD09PWU/ZTowfWZ1bmN0aW9uIGRsKGUpe3ZhciB0PWZsKGUpLG49dCUxO3JldHVybiB0PT10P24/dC1uOnQ6MH1mdW5jdGlvbiBwbChlKXtyZXR1cm4gZT9vcihkbChlKSwwLHApOjB9ZnVuY3Rpb24gaGwoZSl7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpcmV0dXJuIGU7aWYoYWwoZSkpcmV0dXJuIGQ7aWYoSmEoZSkpe3ZhciB0PVwiZnVuY3Rpb25cIj09dHlwZW9mIGUudmFsdWVPZj9lLnZhbHVlT2YoKTplO2U9SmEodCk/dCtcIlwiOnR9aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpcmV0dXJuIDA9PT1lP2U6K2U7ZT1xdChlKTt2YXIgbj1oZS50ZXN0KGUpO3JldHVybiBufHx2ZS50ZXN0KGUpP3N0KGUuc2xpY2UoMiksbj8yOjgpOnBlLnRlc3QoZSk/ZDorZX1mdW5jdGlvbiBnbChlKXtyZXR1cm4gU28oZSxrbChlKSl9ZnVuY3Rpb24gdmwoZSl7cmV0dXJuIG51bGw9PWU/XCJcIjppbyhlKX12YXIgbWw9TW8oKGZ1bmN0aW9uKGUsdCl7aWYod2kodCl8fFVhKHQpKVNvKHQsTWwodCksZSk7ZWxzZSBmb3IodmFyIG4gaW4gdClJZS5jYWxsKHQsbikmJkpuKGUsbix0W25dKX0pKSxDbD1NbygoZnVuY3Rpb24oZSx0KXtTbyh0LGtsKHQpLGUpfSkpLHlsPU1vKChmdW5jdGlvbihlLHQsbixyKXtTbyh0LGtsKHQpLGUscil9KSksd2w9TW8oKGZ1bmN0aW9uKGUsdCxuLHIpe1NvKHQsTWwodCksZSxyKX0pKSxibD1RbyhycikseGw9enIoKGZ1bmN0aW9uKGUsdCl7ZT1PZShlKTt2YXIgbj0tMSxyPXQubGVuZ3RoLGk9cj4yP3RbMl06bztmb3IoaSYmdmkodFswXSx0WzFdLGkpJiYocj0xKTsrK248cjspZm9yKHZhciBhPXRbbl0sbD1rbChhKSxzPS0xLGM9bC5sZW5ndGg7KytzPGM7KXt2YXIgdT1sW3NdLGY9ZVt1XTsoZj09PW98fFZhKGYsa2VbdV0pJiYhSWUuY2FsbChlLHUpKSYmKGVbdV09YVt1XSl9cmV0dXJuIGV9KSksX2w9enIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnB1c2gobyxLbyksX3QoUGwsbyxlKX0pKTtmdW5jdGlvbiBPbChlLHQsbil7dmFyIHI9bnVsbD09ZT9vOndyKGUsdCk7cmV0dXJuIHI9PT1vP246cn1mdW5jdGlvbiBMbChlLHQpe3JldHVybiBudWxsIT1lJiZkaShlLHQsTHIpfXZhciBFbD1WbygoZnVuY3Rpb24oZSx0LG4pe251bGwhPXQmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHQudG9TdHJpbmcmJih0PUhlLmNhbGwodCkpLGVbdF09bn0pLEpsKHRzKSksU2w9Vm8oKGZ1bmN0aW9uKGUsdCxuKXtudWxsIT10JiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB0LnRvU3RyaW5nJiYodD1IZS5jYWxsKHQpKSxJZS5jYWxsKGUsdCk/ZVt0XS5wdXNoKG4pOmVbdF09W25dfSksaWkpLGpsPXpyKFNyKTtmdW5jdGlvbiBNbChlKXtyZXR1cm4gVWEoZSk/R24oZSk6SXIoZSl9ZnVuY3Rpb24ga2woZSl7cmV0dXJuIFVhKGUpP0duKGUsITApOmZ1bmN0aW9uKGUpe2lmKCFKYShlKSlyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9W107aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gT2UoZSkpdC5wdXNoKG4pO3JldHVybiB0fShlKTt2YXIgdD13aShlKSxuPVtdO2Zvcih2YXIgciBpbiBlKShcImNvbnN0cnVjdG9yXCIhPXJ8fCF0JiZJZS5jYWxsKGUscikpJiZuLnB1c2gocik7cmV0dXJuIG59KGUpfXZhciBSbD1NbygoZnVuY3Rpb24oZSx0LG4pe1ZyKGUsdCxuKX0pKSxQbD1NbygoZnVuY3Rpb24oZSx0LG4scil7VnIoZSx0LG4scil9KSksSWw9UW8oKGZ1bmN0aW9uKGUsdCl7dmFyIG49e307aWYobnVsbD09ZSlyZXR1cm4gbjt2YXIgcj0hMTt0PVJ0KHQsKGZ1bmN0aW9uKHQpe3JldHVybiB0PXZvKHQsZSkscnx8KHI9dC5sZW5ndGg+MSksdH0pKSxTbyhlLHRpKGUpLG4pLHImJihuPWlyKG4sNyxYbykpO2Zvcih2YXIgbz10Lmxlbmd0aDtvLS07KWxvKG4sdFtvXSk7cmV0dXJuIG59KSksQWw9UW8oKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWU/e306ZnVuY3Rpb24oZSx0KXtyZXR1cm4gJHIoZSx0LChmdW5jdGlvbih0LG4pe3JldHVybiBMbChlLG4pfSkpfShlLHQpfSkpO2Z1bmN0aW9uIFRsKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbj1SdCh0aShlKSwoZnVuY3Rpb24oZSl7cmV0dXJuW2VdfSkpO3JldHVybiB0PWlpKHQpLCRyKGUsbiwoZnVuY3Rpb24oZSxuKXtyZXR1cm4gdChlLG5bMF0pfSkpfXZhciBIbD1HbyhNbCksQmw9R28oa2wpO2Z1bmN0aW9uIFZsKGUpe3JldHVybiBudWxsPT1lP1tdOkt0KGUsTWwoZSkpfXZhciBEbD1JbygoZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PXQudG9Mb3dlckNhc2UoKSxlKyhuP1psKHQpOnQpfSkpO2Z1bmN0aW9uIFpsKGUpe3JldHVybiBxbCh2bChlKS50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiAkbChlKXtyZXR1cm4oZT12bChlKSkmJmUucmVwbGFjZShDZSxlbikucmVwbGFjZShYZSxcIlwiKX12YXIgTmw9SW8oKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSsobj9cIi1cIjpcIlwiKSt0LnRvTG93ZXJDYXNlKCl9KSksRmw9SW8oKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSsobj9cIiBcIjpcIlwiKSt0LnRvTG93ZXJDYXNlKCl9KSksVWw9UG8oXCJ0b0xvd2VyQ2FzZVwiKSxXbD1JbygoZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlKyhuP1wiX1wiOlwiXCIpK3QudG9Mb3dlckNhc2UoKX0pKSx6bD1JbygoZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlKyhuP1wiIFwiOlwiXCIpK3FsKHQpfSkpLEdsPUlvKChmdW5jdGlvbihlLHQsbil7cmV0dXJuIGUrKG4/XCIgXCI6XCJcIikrdC50b1VwcGVyQ2FzZSgpfSkpLHFsPVBvKFwidG9VcHBlckNhc2VcIik7ZnVuY3Rpb24gWWwoZSx0LG4pe3JldHVybiBlPXZsKGUpLCh0PW4/bzp0KT09PW8/ZnVuY3Rpb24oZSl7cmV0dXJuIHR0LnRlc3QoZSl9KGUpP2Z1bmN0aW9uKGUpe3JldHVybiBlLm1hdGNoKFFlKXx8W119KGUpOmZ1bmN0aW9uKGUpe3JldHVybiBlLm1hdGNoKHNlKXx8W119KGUpOmUubWF0Y2godCl8fFtdfXZhciBLbD16cigoZnVuY3Rpb24oZSx0KXt0cnl7cmV0dXJuIF90KGUsbyx0KX1jYXRjaChlKXtyZXR1cm4gcWEoZSk/ZTpuZXcgYmUoZSl9fSkpLFhsPVFvKChmdW5jdGlvbihlLHQpe3JldHVybiBMdCh0LChmdW5jdGlvbih0KXt0PVRpKHQpLG5yKGUsdCxTYShlW3RdLGUpKX0pKSxlfSkpO2Z1bmN0aW9uIEpsKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgUWw9SG8oKSxlcz1IbyghMCk7ZnVuY3Rpb24gdHMoZSl7cmV0dXJuIGV9ZnVuY3Rpb24gbnMoZSl7cmV0dXJuIFByKFwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTppcihlLDEpKX12YXIgcnM9enIoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBTcihuLGUsdCl9fSkpLG9zPXpyKChmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gU3IoZSxuLHQpfX0pKTtmdW5jdGlvbiBpcyhlLHQsbil7dmFyIHI9TWwodCksbz15cih0LHIpO251bGwhPW58fEphKHQpJiYoby5sZW5ndGh8fCFyLmxlbmd0aCl8fChuPXQsdD1lLGU9dGhpcyxvPXlyKHQsTWwodCkpKTt2YXIgaT0hKEphKG4pJiZcImNoYWluXCJpbiBuJiYhbi5jaGFpbiksYT1ZYShlKTtyZXR1cm4gTHQobywoZnVuY3Rpb24obil7dmFyIHI9dFtuXTtlW25dPXIsYSYmKGUucHJvdG90eXBlW25dPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX2NoYWluX187aWYoaXx8dCl7dmFyIG49ZSh0aGlzLl9fd3JhcHBlZF9fKTtyZXR1cm4obi5fX2FjdGlvbnNfXz1Fbyh0aGlzLl9fYWN0aW9uc19fKSkucHVzaCh7ZnVuYzpyLGFyZ3M6YXJndW1lbnRzLHRoaXNBcmc6ZX0pLG4uX19jaGFpbl9fPXQsbn1yZXR1cm4gci5hcHBseShlLFB0KFt0aGlzLnZhbHVlKCldLGFyZ3VtZW50cykpfSl9KSksZX1mdW5jdGlvbiBhcygpe312YXIgbHM9Wm8oUnQpLHNzPVpvKFN0KSxjcz1abyhUdCk7ZnVuY3Rpb24gdXMoZSl7cmV0dXJuIG1pKGUpP0Z0KFRpKGUpKTpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHdyKHQsZSl9fShlKX12YXIgZnM9Tm8oKSxkcz1ObyghMCk7ZnVuY3Rpb24gcHMoKXtyZXR1cm5bXX1mdW5jdGlvbiBocygpe3JldHVybiExfXZhciBncyx2cz1EbygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0fSksMCksbXM9V28oXCJjZWlsXCIpLENzPURvKChmdW5jdGlvbihlLHQpe3JldHVybiBlL3R9KSwxKSx5cz1XbyhcImZsb29yXCIpLHdzPURvKChmdW5jdGlvbihlLHQpe3JldHVybiBlKnR9KSwxKSxicz1XbyhcInJvdW5kXCIpLHhzPURvKChmdW5jdGlvbihlLHQpe3JldHVybiBlLXR9KSwwKTtyZXR1cm4gQm4uYWZ0ZXI9ZnVuY3Rpb24oZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IG5ldyBTZShpKTtyZXR1cm4gZT1kbChlKSxmdW5jdGlvbigpe2lmKC0tZTwxKXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LEJuLmFyeT1MYSxCbi5hc3NpZ249bWwsQm4uYXNzaWduSW49Q2wsQm4uYXNzaWduSW5XaXRoPXlsLEJuLmFzc2lnbldpdGg9d2wsQm4uYXQ9YmwsQm4uYmVmb3JlPUVhLEJuLmJpbmQ9U2EsQm4uYmluZEFsbD1YbCxCbi5iaW5kS2V5PWphLEJuLmNhc3RBcnJheT1mdW5jdGlvbigpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybltdO3ZhciBlPWFyZ3VtZW50c1swXTtyZXR1cm4gTmEoZSk/ZTpbZV19LEJuLmNoYWluPXVhLEJuLmNodW5rPWZ1bmN0aW9uKGUsdCxuKXt0PShuP3ZpKGUsdCxuKTp0PT09byk/MTpnbihkbCh0KSwwKTt2YXIgaT1udWxsPT1lPzA6ZS5sZW5ndGg7aWYoIWl8fHQ8MSlyZXR1cm5bXTtmb3IodmFyIGE9MCxsPTAscz1yKGR0KGkvdCkpO2E8aTspc1tsKytdPVFyKGUsYSxhKz10KTtyZXR1cm4gc30sQm4uY29tcGFjdD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGgscj0wLG89W107Kyt0PG47KXt2YXIgaT1lW3RdO2kmJihvW3IrK109aSl9cmV0dXJuIG99LEJuLmNvbmNhdD1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg7aWYoIWUpcmV0dXJuW107Zm9yKHZhciB0PXIoZS0xKSxuPWFyZ3VtZW50c1swXSxvPWU7by0tOyl0W28tMV09YXJndW1lbnRzW29dO3JldHVybiBQdChOYShuKT9FbyhuKTpbbl0saHIodCwxKSl9LEJuLmNvbmQ9ZnVuY3Rpb24oZSl7dmFyIHQ9bnVsbD09ZT8wOmUubGVuZ3RoLG49aWkoKTtyZXR1cm4gZT10P1J0KGUsKGZ1bmN0aW9uKGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGVbMV0pdGhyb3cgbmV3IFNlKGkpO3JldHVybltuKGVbMF0pLGVbMV1dfSkpOltdLHpyKChmdW5jdGlvbihuKXtmb3IodmFyIHI9LTE7KytyPHQ7KXt2YXIgbz1lW3JdO2lmKF90KG9bMF0sdGhpcyxuKSlyZXR1cm4gX3Qob1sxXSx0aGlzLG4pfX0pKX0sQm4uY29uZm9ybXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PU1sKGUpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gYXIobixlLHQpfX0oaXIoZSwxKSl9LEJuLmNvbnN0YW50PUpsLEJuLmNvdW50Qnk9cGEsQm4uY3JlYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49Vm4oZSk7cmV0dXJuIG51bGw9PXQ/bjp0cihuLHQpfSxCbi5jdXJyeT1mdW5jdGlvbiBlKHQsbixyKXt2YXIgaT1xbyh0LDgsbyxvLG8sbyxvLG49cj9vOm4pO3JldHVybiBpLnBsYWNlaG9sZGVyPWUucGxhY2Vob2xkZXIsaX0sQm4uY3VycnlSaWdodD1mdW5jdGlvbiBlKHQsbixyKXt2YXIgaT1xbyh0LDE2LG8sbyxvLG8sbyxuPXI/bzpuKTtyZXR1cm4gaS5wbGFjZWhvbGRlcj1lLnBsYWNlaG9sZGVyLGl9LEJuLmRlYm91bmNlPU1hLEJuLmRlZmF1bHRzPXhsLEJuLmRlZmF1bHRzRGVlcD1fbCxCbi5kZWZlcj1rYSxCbi5kZWxheT1SYSxCbi5kaWZmZXJlbmNlPVZpLEJuLmRpZmZlcmVuY2VCeT1EaSxCbi5kaWZmZXJlbmNlV2l0aD1aaSxCbi5kcm9wPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7cmV0dXJuIHI/UXIoZSwodD1ufHx0PT09bz8xOmRsKHQpKTwwPzA6dCxyKTpbXX0sQm4uZHJvcFJpZ2h0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7cmV0dXJuIHI/UXIoZSwwLCh0PXItKHQ9bnx8dD09PW8/MTpkbCh0KSkpPDA/MDp0KTpbXX0sQm4uZHJvcFJpZ2h0V2hpbGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/Y28oZSxpaSh0LDMpLCEwLCEwKTpbXX0sQm4uZHJvcFdoaWxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP2NvKGUsaWkodCwzKSwhMCk6W119LEJuLmZpbGw9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9bnVsbD09ZT8wOmUubGVuZ3RoO3JldHVybiBpPyhuJiZcIm51bWJlclwiIT10eXBlb2YgbiYmdmkoZSx0LG4pJiYobj0wLHI9aSksZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9ZS5sZW5ndGg7Zm9yKChuPWRsKG4pKTwwJiYobj0tbj5pPzA6aStuKSwocj1yPT09b3x8cj5pP2k6ZGwocikpPDAmJihyKz1pKSxyPW4+cj8wOnBsKHIpO248cjspZVtuKytdPXQ7cmV0dXJuIGV9KGUsdCxuLHIpKTpbXX0sQm4uZmlsdGVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKE5hKGUpP2p0OnByKShlLGlpKHQsMykpfSxCbi5mbGF0TWFwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGhyKGJhKGUsdCksMSl9LEJuLmZsYXRNYXBEZWVwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGhyKGJhKGUsdCksdSl9LEJuLmZsYXRNYXBEZXB0aD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG49bj09PW8/MTpkbChuKSxocihiYShlLHQpLG4pfSxCbi5mbGF0dGVuPUZpLEJuLmZsYXR0ZW5EZWVwPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lJiZlLmxlbmd0aD9ocihlLHUpOltdfSxCbi5mbGF0dGVuRGVwdGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbCE9ZSYmZS5sZW5ndGg/aHIoZSx0PXQ9PT1vPzE6ZGwodCkpOltdfSxCbi5mbGlwPWZ1bmN0aW9uKGUpe3JldHVybiBxbyhlLDUxMil9LEJuLmZsb3c9UWwsQm4uZmxvd1JpZ2h0PWVzLEJuLmZyb21QYWlycz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGgscj17fTsrK3Q8bjspe3ZhciBvPWVbdF07cltvWzBdXT1vWzFdfXJldHVybiByfSxCbi5mdW5jdGlvbnM9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/W106eXIoZSxNbChlKSl9LEJuLmZ1bmN0aW9uc0luPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP1tdOnlyKGUsa2woZSkpfSxCbi5ncm91cEJ5PUNhLEJuLmluaXRpYWw9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWUmJmUubGVuZ3RoP1FyKGUsMCwtMSk6W119LEJuLmludGVyc2VjdGlvbj1XaSxCbi5pbnRlcnNlY3Rpb25CeT16aSxCbi5pbnRlcnNlY3Rpb25XaXRoPUdpLEJuLmludmVydD1FbCxCbi5pbnZlcnRCeT1TbCxCbi5pbnZva2VNYXA9eWEsQm4uaXRlcmF0ZWU9bnMsQm4ua2V5Qnk9d2EsQm4ua2V5cz1NbCxCbi5rZXlzSW49a2wsQm4ubWFwPWJhLEJuLm1hcEtleXM9ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtyZXR1cm4gdD1paSh0LDMpLG1yKGUsKGZ1bmN0aW9uKGUscixvKXtucihuLHQoZSxyLG8pLGUpfSkpLG59LEJuLm1hcFZhbHVlcz1mdW5jdGlvbihlLHQpe3ZhciBuPXt9O3JldHVybiB0PWlpKHQsMyksbXIoZSwoZnVuY3Rpb24oZSxyLG8pe25yKG4scix0KGUscixvKSl9KSksbn0sQm4ubWF0Y2hlcz1mdW5jdGlvbihlKXtyZXR1cm4gSHIoaXIoZSwxKSl9LEJuLm1hdGNoZXNQcm9wZXJ0eT1mdW5jdGlvbihlLHQpe3JldHVybiBCcihlLGlyKHQsMSkpfSxCbi5tZW1vaXplPVBhLEJuLm1lcmdlPVJsLEJuLm1lcmdlV2l0aD1QbCxCbi5tZXRob2Q9cnMsQm4ubWV0aG9kT2Y9b3MsQm4ubWl4aW49aXMsQm4ubmVnYXRlPUlhLEJuLm50aEFyZz1mdW5jdGlvbihlKXtyZXR1cm4gZT1kbChlKSx6cigoZnVuY3Rpb24odCl7cmV0dXJuIERyKHQsZSl9KSl9LEJuLm9taXQ9SWwsQm4ub21pdEJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIFRsKGUsSWEoaWkodCkpKX0sQm4ub25jZT1mdW5jdGlvbihlKXtyZXR1cm4gRWEoMixlKX0sQm4ub3JkZXJCeT1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbnVsbD09ZT9bXTooTmEodCl8fCh0PW51bGw9PXQ/W106W3RdKSxOYShuPXI/bzpuKXx8KG49bnVsbD09bj9bXTpbbl0pLFpyKGUsdCxuKSl9LEJuLm92ZXI9bHMsQm4ub3ZlckFyZ3M9QWEsQm4ub3ZlckV2ZXJ5PXNzLEJuLm92ZXJTb21lPWNzLEJuLnBhcnRpYWw9VGEsQm4ucGFydGlhbFJpZ2h0PUhhLEJuLnBhcnRpdGlvbj14YSxCbi5waWNrPUFsLEJuLnBpY2tCeT1UbCxCbi5wcm9wZXJ0eT11cyxCbi5wcm9wZXJ0eU9mPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09ZT9vOndyKGUsdCl9fSxCbi5wdWxsPVlpLEJuLnB1bGxBbGw9S2ksQm4ucHVsbEFsbEJ5PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSYmZS5sZW5ndGgmJnQmJnQubGVuZ3RoP05yKGUsdCxpaShuLDIpKTplfSxCbi5wdWxsQWxsV2l0aD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUmJmUubGVuZ3RoJiZ0JiZ0Lmxlbmd0aD9OcihlLHQsbyxuKTplfSxCbi5wdWxsQXQ9WGksQm4ucmFuZ2U9ZnMsQm4ucmFuZ2VSaWdodD1kcyxCbi5yZWFyZz1CYSxCbi5yZWplY3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oTmEoZSk/anQ6cHIpKGUsSWEoaWkodCwzKSkpfSxCbi5yZW1vdmU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1bXTtpZighZXx8IWUubGVuZ3RoKXJldHVybiBuO3ZhciByPS0xLG89W10saT1lLmxlbmd0aDtmb3IodD1paSh0LDMpOysrcjxpOyl7dmFyIGE9ZVtyXTt0KGEscixlKSYmKG4ucHVzaChhKSxvLnB1c2gocikpfXJldHVybiBGcihlLG8pLG59LEJuLnJlc3Q9ZnVuY3Rpb24oZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBTZShpKTtyZXR1cm4genIoZSx0PXQ9PT1vP3Q6ZGwodCkpfSxCbi5yZXZlcnNlPUppLEJuLnNhbXBsZVNpemU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PShuP3ZpKGUsdCxuKTp0PT09byk/MTpkbCh0KSwoTmEoZSk/WW46cXIpKGUsdCl9LEJuLnNldD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG51bGw9PWU/ZTpZcihlLHQsbil9LEJuLnNldFdpdGg9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHI9XCJmdW5jdGlvblwiPT10eXBlb2Ygcj9yOm8sbnVsbD09ZT9lOllyKGUsdCxuLHIpfSxCbi5zaHVmZmxlPWZ1bmN0aW9uKGUpe3JldHVybihOYShlKT9LbjpKcikoZSl9LEJuLnNsaWNlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7cmV0dXJuIHI/KG4mJlwibnVtYmVyXCIhPXR5cGVvZiBuJiZ2aShlLHQsbik/KHQ9MCxuPXIpOih0PW51bGw9PXQ/MDpkbCh0KSxuPW49PT1vP3I6ZGwobikpLFFyKGUsdCxuKSk6W119LEJuLnNvcnRCeT1fYSxCbi5zb3J0ZWRVbmlxPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmxlbmd0aD9ybyhlKTpbXX0sQm4uc29ydGVkVW5pcUJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP3JvKGUsaWkodCwyKSk6W119LEJuLnNwbGl0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbiYmXCJudW1iZXJcIiE9dHlwZW9mIG4mJnZpKGUsdCxuKSYmKHQ9bj1vKSwobj1uPT09bz9wOm4+Pj4wKT8oZT12bChlKSkmJihcInN0cmluZ1wiPT10eXBlb2YgdHx8bnVsbCE9dCYmIXJsKHQpKSYmISh0PWlvKHQpKSYmcm4oZSk/Q28odW4oZSksMCxuKTplLnNwbGl0KHQsbik6W119LEJuLnNwcmVhZD1mdW5jdGlvbihlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFNlKGkpO3JldHVybiB0PW51bGw9PXQ/MDpnbihkbCh0KSwwKSx6cigoZnVuY3Rpb24obil7dmFyIHI9blt0XSxvPUNvKG4sMCx0KTtyZXR1cm4gciYmUHQobyxyKSxfdChlLHRoaXMsbyl9KSl9LEJuLnRhaWw9ZnVuY3Rpb24oZSl7dmFyIHQ9bnVsbD09ZT8wOmUubGVuZ3RoO3JldHVybiB0P1FyKGUsMSx0KTpbXX0sQm4udGFrZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUmJmUubGVuZ3RoP1FyKGUsMCwodD1ufHx0PT09bz8xOmRsKHQpKTwwPzA6dCk6W119LEJuLnRha2VSaWdodD1mdW5jdGlvbihlLHQsbil7dmFyIHI9bnVsbD09ZT8wOmUubGVuZ3RoO3JldHVybiByP1FyKGUsKHQ9ci0odD1ufHx0PT09bz8xOmRsKHQpKSk8MD8wOnQscik6W119LEJuLnRha2VSaWdodFdoaWxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP2NvKGUsaWkodCwzKSwhMSwhMCk6W119LEJuLnRha2VXaGlsZT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD9jbyhlLGlpKHQsMykpOltdfSxCbi50YXA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdChlKSxlfSxCbi50aHJvdHRsZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9ITAsbz0hMDtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBTZShpKTtyZXR1cm4gSmEobikmJihyPVwibGVhZGluZ1wiaW4gbj8hIW4ubGVhZGluZzpyLG89XCJ0cmFpbGluZ1wiaW4gbj8hIW4udHJhaWxpbmc6byksTWEoZSx0LHtsZWFkaW5nOnIsbWF4V2FpdDp0LHRyYWlsaW5nOm99KX0sQm4udGhydT1mYSxCbi50b0FycmF5PXVsLEJuLnRvUGFpcnM9SGwsQm4udG9QYWlyc0luPUJsLEJuLnRvUGF0aD1mdW5jdGlvbihlKXtyZXR1cm4gTmEoZSk/UnQoZSxUaSk6YWwoZSk/W2VdOkVvKEFpKHZsKGUpKSl9LEJuLnRvUGxhaW5PYmplY3Q9Z2wsQm4udHJhbnNmb3JtPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1OYShlKSxvPXJ8fHphKGUpfHxsbChlKTtpZih0PWlpKHQsNCksbnVsbD09bil7dmFyIGk9ZSYmZS5jb25zdHJ1Y3RvcjtuPW8/cj9uZXcgaTpbXTpKYShlKSYmWWEoaSk/Vm4oVWUoZSkpOnt9fXJldHVybihvP0x0Om1yKShlLChmdW5jdGlvbihlLHIsbyl7cmV0dXJuIHQobixlLHIsbyl9KSksbn0sQm4udW5hcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIExhKGUsMSl9LEJuLnVuaW9uPVFpLEJuLnVuaW9uQnk9ZWEsQm4udW5pb25XaXRoPXRhLEJuLnVuaXE9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUubGVuZ3RoP2FvKGUpOltdfSxCbi51bmlxQnk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/YW8oZSxpaSh0LDIpKTpbXX0sQm4udW5pcVdpdGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6byxlJiZlLmxlbmd0aD9hbyhlLG8sdCk6W119LEJuLnVuc2V0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWV8fGxvKGUsdCl9LEJuLnVuemlwPW5hLEJuLnVuemlwV2l0aD1yYSxCbi51cGRhdGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBudWxsPT1lP2U6c28oZSx0LGdvKG4pKX0sQm4udXBkYXRlV2l0aD1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gcj1cImZ1bmN0aW9uXCI9PXR5cGVvZiByP3I6byxudWxsPT1lP2U6c28oZSx0LGdvKG4pLHIpfSxCbi52YWx1ZXM9VmwsQm4udmFsdWVzSW49ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/W106S3QoZSxrbChlKSl9LEJuLndpdGhvdXQ9b2EsQm4ud29yZHM9WWwsQm4ud3JhcD1mdW5jdGlvbihlLHQpe3JldHVybiBUYShnbyh0KSxlKX0sQm4ueG9yPWlhLEJuLnhvckJ5PWFhLEJuLnhvcldpdGg9bGEsQm4uemlwPXNhLEJuLnppcE9iamVjdD1mdW5jdGlvbihlLHQpe3JldHVybiBwbyhlfHxbXSx0fHxbXSxKbil9LEJuLnppcE9iamVjdERlZXA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcG8oZXx8W10sdHx8W10sWXIpfSxCbi56aXBXaXRoPWNhLEJuLmVudHJpZXM9SGwsQm4uZW50cmllc0luPUJsLEJuLmV4dGVuZD1DbCxCbi5leHRlbmRXaXRoPXlsLGlzKEJuLEJuKSxCbi5hZGQ9dnMsQm4uYXR0ZW1wdD1LbCxCbi5jYW1lbENhc2U9RGwsQm4uY2FwaXRhbGl6ZT1abCxCbi5jZWlsPW1zLEJuLmNsYW1wPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj09PW8mJihuPXQsdD1vKSxuIT09byYmKG49KG49aGwobikpPT1uP246MCksdCE9PW8mJih0PSh0PWhsKHQpKT09dD90OjApLG9yKGhsKGUpLHQsbil9LEJuLmNsb25lPWZ1bmN0aW9uKGUpe3JldHVybiBpcihlLDQpfSxCbi5jbG9uZURlZXA9ZnVuY3Rpb24oZSl7cmV0dXJuIGlyKGUsNSl9LEJuLmNsb25lRGVlcFdpdGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaXIoZSw1LHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Om8pfSxCbi5jbG9uZVdpdGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaXIoZSw0LHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Om8pfSxCbi5jb25mb3Jtc1RvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PXR8fGFyKGUsdCxNbCh0KSl9LEJuLmRlYnVycj0kbCxCbi5kZWZhdWx0VG89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZXx8ZSE9ZT90OmV9LEJuLmRpdmlkZT1DcyxCbi5lbmRzV2l0aD1mdW5jdGlvbihlLHQsbil7ZT12bChlKSx0PWlvKHQpO3ZhciByPWUubGVuZ3RoLGk9bj1uPT09bz9yOm9yKGRsKG4pLDAscik7cmV0dXJuKG4tPXQubGVuZ3RoKT49MCYmZS5zbGljZShuLGkpPT10fSxCbi5lcT1WYSxCbi5lc2NhcGU9ZnVuY3Rpb24oZSl7cmV0dXJuKGU9dmwoZSkpJiZxLnRlc3QoZSk/ZS5yZXBsYWNlKHosdG4pOmV9LEJuLmVzY2FwZVJlZ0V4cD1mdW5jdGlvbihlKXtyZXR1cm4oZT12bChlKSkmJm5lLnRlc3QoZSk/ZS5yZXBsYWNlKHRlLFwiXFxcXCQmXCIpOmV9LEJuLmV2ZXJ5PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1OYShlKT9TdDpmcjtyZXR1cm4gbiYmdmkoZSx0LG4pJiYodD1vKSxyKGUsaWkodCwzKSl9LEJuLmZpbmQ9aGEsQm4uZmluZEluZGV4PSRpLEJuLmZpbmRLZXk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gQnQoZSxpaSh0LDMpLG1yKX0sQm4uZmluZExhc3Q9Z2EsQm4uZmluZExhc3RJbmRleD1OaSxCbi5maW5kTGFzdEtleT1mdW5jdGlvbihlLHQpe3JldHVybiBCdChlLGlpKHQsMyksQ3IpfSxCbi5mbG9vcj15cyxCbi5mb3JFYWNoPXZhLEJuLmZvckVhY2hSaWdodD1tYSxCbi5mb3JJbj1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lP2U6Z3IoZSxpaSh0LDMpLGtsKX0sQm4uZm9ySW5SaWdodD1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lP2U6dnIoZSxpaSh0LDMpLGtsKX0sQm4uZm9yT3duPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJm1yKGUsaWkodCwzKSl9LEJuLmZvck93blJpZ2h0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJkNyKGUsaWkodCwzKSl9LEJuLmdldD1PbCxCbi5ndD1EYSxCbi5ndGU9WmEsQm4uaGFzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGwhPWUmJmRpKGUsdCxPcil9LEJuLmhhc0luPUxsLEJuLmhlYWQ9VWksQm4uaWRlbnRpdHk9dHMsQm4uaW5jbHVkZXM9ZnVuY3Rpb24oZSx0LG4scil7ZT1VYShlKT9lOlZsKGUpLG49biYmIXI/ZGwobik6MDt2YXIgbz1lLmxlbmd0aDtyZXR1cm4gbjwwJiYobj1nbihvK24sMCkpLGlsKGUpP248PW8mJmUuaW5kZXhPZih0LG4pPi0xOiEhbyYmRHQoZSx0LG4pPi0xfSxCbi5pbmRleE9mPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7aWYoIXIpcmV0dXJuLTE7dmFyIG89bnVsbD09bj8wOmRsKG4pO3JldHVybiBvPDAmJihvPWduKHIrbywwKSksRHQoZSx0LG8pfSxCbi5pblJhbmdlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD1mbCh0KSxuPT09bz8obj10LHQ9MCk6bj1mbChuKSxmdW5jdGlvbihlLHQsbil7cmV0dXJuIGU+PXZuKHQsbikmJmU8Z24odCxuKX0oZT1obChlKSx0LG4pfSxCbi5pbnZva2U9amwsQm4uaXNBcmd1bWVudHM9JGEsQm4uaXNBcnJheT1OYSxCbi5pc0FycmF5QnVmZmVyPUZhLEJuLmlzQXJyYXlMaWtlPVVhLEJuLmlzQXJyYXlMaWtlT2JqZWN0PVdhLEJuLmlzQm9vbGVhbj1mdW5jdGlvbihlKXtyZXR1cm4hMD09PWV8fCExPT09ZXx8UWEoZSkmJnhyKGUpPT1tfSxCbi5pc0J1ZmZlcj16YSxCbi5pc0RhdGU9R2EsQm4uaXNFbGVtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBRYShlKSYmMT09PWUubm9kZVR5cGUmJiFubChlKX0sQm4uaXNFbXB0eT1mdW5jdGlvbihlKXtpZihudWxsPT1lKXJldHVybiEwO2lmKFVhKGUpJiYoTmEoZSl8fFwic3RyaW5nXCI9PXR5cGVvZiBlfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnNwbGljZXx8emEoZSl8fGxsKGUpfHwkYShlKSkpcmV0dXJuIWUubGVuZ3RoO3ZhciB0PWZpKGUpO2lmKHQ9PXh8fHQ9PVMpcmV0dXJuIWUuc2l6ZTtpZih3aShlKSlyZXR1cm4hSXIoZSkubGVuZ3RoO2Zvcih2YXIgbiBpbiBlKWlmKEllLmNhbGwoZSxuKSlyZXR1cm4hMTtyZXR1cm4hMH0sQm4uaXNFcXVhbD1mdW5jdGlvbihlLHQpe3JldHVybiBNcihlLHQpfSxCbi5pc0VxdWFsV2l0aD1mdW5jdGlvbihlLHQsbil7dmFyIHI9KG49XCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uOm8pP24oZSx0KTpvO3JldHVybiByPT09bz9NcihlLHQsbyxuKTohIXJ9LEJuLmlzRXJyb3I9cWEsQm4uaXNGaW5pdGU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGUmJkh0KGUpfSxCbi5pc0Z1bmN0aW9uPVlhLEJuLmlzSW50ZWdlcj1LYSxCbi5pc0xlbmd0aD1YYSxCbi5pc01hcD1lbCxCbi5pc01hdGNoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10fHxrcihlLHQsbGkodCkpfSxCbi5pc01hdGNoV2l0aD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG49XCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uOm8sa3IoZSx0LGxpKHQpLG4pfSxCbi5pc05hTj1mdW5jdGlvbihlKXtyZXR1cm4gdGwoZSkmJmUhPStlfSxCbi5pc05hdGl2ZT1mdW5jdGlvbihlKXtpZih5aShlKSl0aHJvdyBuZXcgYmUoXCJVbnN1cHBvcnRlZCBjb3JlLWpzIHVzZS4gVHJ5IGh0dHBzOi8vbnBtcy5pby9zZWFyY2g/cT1wb255ZmlsbC5cIik7cmV0dXJuIFJyKGUpfSxCbi5pc05pbD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZX0sQm4uaXNOdWxsPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZX0sQm4uaXNOdW1iZXI9dGwsQm4uaXNPYmplY3Q9SmEsQm4uaXNPYmplY3RMaWtlPVFhLEJuLmlzUGxhaW5PYmplY3Q9bmwsQm4uaXNSZWdFeHA9cmwsQm4uaXNTYWZlSW50ZWdlcj1mdW5jdGlvbihlKXtyZXR1cm4gS2EoZSkmJmU+PS05MDA3MTk5MjU0NzQwOTkxJiZlPD1mfSxCbi5pc1NldD1vbCxCbi5pc1N0cmluZz1pbCxCbi5pc1N5bWJvbD1hbCxCbi5pc1R5cGVkQXJyYXk9bGwsQm4uaXNVbmRlZmluZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1vfSxCbi5pc1dlYWtNYXA9ZnVuY3Rpb24oZSl7cmV0dXJuIFFhKGUpJiZmaShlKT09a30sQm4uaXNXZWFrU2V0PWZ1bmN0aW9uKGUpe3JldHVybiBRYShlKSYmXCJbb2JqZWN0IFdlYWtTZXRdXCI9PXhyKGUpfSxCbi5qb2luPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWU/XCJcIjpVdC5jYWxsKGUsdCl9LEJuLmtlYmFiQ2FzZT1ObCxCbi5sYXN0PXFpLEJuLmxhc3RJbmRleE9mPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7aWYoIXIpcmV0dXJuLTE7dmFyIGk9cjtyZXR1cm4gbiE9PW8mJihpPShpPWRsKG4pKTwwP2duKHIraSwwKTp2bihpLHItMSkpLHQ9PXQ/ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1uKzE7ci0tOylpZihlW3JdPT09dClyZXR1cm4gcjtyZXR1cm4gcn0oZSx0LGkpOlZ0KGUsJHQsaSwhMCl9LEJuLmxvd2VyQ2FzZT1GbCxCbi5sb3dlckZpcnN0PVVsLEJuLmx0PXNsLEJuLmx0ZT1jbCxCbi5tYXg9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUubGVuZ3RoP2RyKGUsdHMsX3IpOm99LEJuLm1heEJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP2RyKGUsaWkodCwyKSxfcik6b30sQm4ubWVhbj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoZSx0cyl9LEJuLm1lYW5CeT1mdW5jdGlvbihlLHQpe3JldHVybiBOdChlLGlpKHQsMikpfSxCbi5taW49ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUubGVuZ3RoP2RyKGUsdHMsQXIpOm99LEJuLm1pbkJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP2RyKGUsaWkodCwyKSxBcik6b30sQm4uc3R1YkFycmF5PXBzLEJuLnN0dWJGYWxzZT1ocyxCbi5zdHViT2JqZWN0PWZ1bmN0aW9uKCl7cmV0dXJue319LEJuLnN0dWJTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIlwifSxCbi5zdHViVHJ1ZT1mdW5jdGlvbigpe3JldHVybiEwfSxCbi5tdWx0aXBseT13cyxCbi5udGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/RHIoZSxkbCh0KSk6b30sQm4ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBmdC5fPT09dGhpcyYmKGZ0Ll89VmUpLHRoaXN9LEJuLm5vb3A9YXMsQm4ubm93PU9hLEJuLnBhZD1mdW5jdGlvbihlLHQsbil7ZT12bChlKTt2YXIgcj0odD1kbCh0KSk/Y24oZSk6MDtpZighdHx8cj49dClyZXR1cm4gZTt2YXIgbz0odC1yKS8yO3JldHVybiAkbyhwdChvKSxuKStlKyRvKGR0KG8pLG4pfSxCbi5wYWRFbmQ9ZnVuY3Rpb24oZSx0LG4pe2U9dmwoZSk7dmFyIHI9KHQ9ZGwodCkpP2NuKGUpOjA7cmV0dXJuIHQmJnI8dD9lKyRvKHQtcixuKTplfSxCbi5wYWRTdGFydD1mdW5jdGlvbihlLHQsbil7ZT12bChlKTt2YXIgcj0odD1kbCh0KSk/Y24oZSk6MDtyZXR1cm4gdCYmcjx0PyRvKHQtcixuKStlOmV9LEJuLnBhcnNlSW50PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnx8bnVsbD09dD90PTA6dCYmKHQ9K3QpLENuKHZsKGUpLnJlcGxhY2UocmUsXCJcIiksdHx8MCl9LEJuLnJhbmRvbT1mdW5jdGlvbihlLHQsbil7aWYobiYmXCJib29sZWFuXCIhPXR5cGVvZiBuJiZ2aShlLHQsbikmJih0PW49byksbj09PW8mJihcImJvb2xlYW5cIj09dHlwZW9mIHQ/KG49dCx0PW8pOlwiYm9vbGVhblwiPT10eXBlb2YgZSYmKG49ZSxlPW8pKSxlPT09byYmdD09PW8/KGU9MCx0PTEpOihlPWZsKGUpLHQ9PT1vPyh0PWUsZT0wKTp0PWZsKHQpKSxlPnQpe3ZhciByPWU7ZT10LHQ9cn1pZihufHxlJTF8fHQlMSl7dmFyIGk9eW4oKTtyZXR1cm4gdm4oZStpKih0LWUrbHQoXCIxZS1cIisoKGkrXCJcIikubGVuZ3RoLTEpKSksdCl9cmV0dXJuIFVyKGUsdCl9LEJuLnJlZHVjZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9TmEoZSk/SXQ6V3Qsbz1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIHIoZSxpaSh0LDQpLG4sbyxjcil9LEJuLnJlZHVjZVJpZ2h0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1OYShlKT9BdDpXdCxvPWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gcihlLGlpKHQsNCksbixvLHVyKX0sQm4ucmVwZWF0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD0obj92aShlLHQsbik6dD09PW8pPzE6ZGwodCksV3IodmwoZSksdCl9LEJuLnJlcGxhY2U9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMsdD12bChlWzBdKTtyZXR1cm4gZS5sZW5ndGg8Mz90OnQucmVwbGFjZShlWzFdLGVbMl0pfSxCbi5yZXN1bHQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPS0xLGk9KHQ9dm8odCxlKSkubGVuZ3RoO2ZvcihpfHwoaT0xLGU9byk7KytyPGk7KXt2YXIgYT1udWxsPT1lP286ZVtUaSh0W3JdKV07YT09PW8mJihyPWksYT1uKSxlPVlhKGEpP2EuY2FsbChlKTphfXJldHVybiBlfSxCbi5yb3VuZD1icyxCbi5ydW5JbkNvbnRleHQ9ZSxCbi5zYW1wbGU9ZnVuY3Rpb24oZSl7cmV0dXJuKE5hKGUpP3FuOkdyKShlKX0sQm4uc2l6ZT1mdW5jdGlvbihlKXtpZihudWxsPT1lKXJldHVybiAwO2lmKFVhKGUpKXJldHVybiBpbChlKT9jbihlKTplLmxlbmd0aDt2YXIgdD1maShlKTtyZXR1cm4gdD09eHx8dD09Uz9lLnNpemU6SXIoZSkubGVuZ3RofSxCbi5zbmFrZUNhc2U9V2wsQm4uc29tZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9TmEoZSk/VHQ6ZW87cmV0dXJuIG4mJnZpKGUsdCxuKSYmKHQ9bykscihlLGlpKHQsMykpfSxCbi5zb3J0ZWRJbmRleD1mdW5jdGlvbihlLHQpe3JldHVybiB0byhlLHQpfSxCbi5zb3J0ZWRJbmRleEJ5PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbm8oZSx0LGlpKG4sMikpfSxCbi5zb3J0ZWRJbmRleE9mPWZ1bmN0aW9uKGUsdCl7dmFyIG49bnVsbD09ZT8wOmUubGVuZ3RoO2lmKG4pe3ZhciByPXRvKGUsdCk7aWYocjxuJiZWYShlW3JdLHQpKXJldHVybiByfXJldHVybi0xfSxCbi5zb3J0ZWRMYXN0SW5kZXg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdG8oZSx0LCEwKX0sQm4uc29ydGVkTGFzdEluZGV4Qnk9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBubyhlLHQsaWkobiwyKSwhMCl9LEJuLnNvcnRlZExhc3RJbmRleE9mPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9ZSYmZS5sZW5ndGgpe3ZhciBuPXRvKGUsdCwhMCktMTtpZihWYShlW25dLHQpKXJldHVybiBufXJldHVybi0xfSxCbi5zdGFydENhc2U9emwsQm4uc3RhcnRzV2l0aD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9dmwoZSksbj1udWxsPT1uPzA6b3IoZGwobiksMCxlLmxlbmd0aCksdD1pbyh0KSxlLnNsaWNlKG4sbit0Lmxlbmd0aCk9PXR9LEJuLnN1YnRyYWN0PXhzLEJuLnN1bT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5sZW5ndGg/enQoZSx0cyk6MH0sQm4uc3VtQnk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/enQoZSxpaSh0LDIpKTowfSxCbi50ZW1wbGF0ZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9Qm4udGVtcGxhdGVTZXR0aW5ncztuJiZ2aShlLHQsbikmJih0PW8pLGU9dmwoZSksdD15bCh7fSx0LHIsWW8pO3ZhciBpLGEsbD15bCh7fSx0LmltcG9ydHMsci5pbXBvcnRzLFlvKSxzPU1sKGwpLGM9S3QobCxzKSx1PTAsZj10LmludGVycG9sYXRlfHx5ZSxkPVwiX19wICs9ICdcIixwPUxlKCh0LmVzY2FwZXx8eWUpLnNvdXJjZStcInxcIitmLnNvdXJjZStcInxcIisoZj09PVg/ZmU6eWUpLnNvdXJjZStcInxcIisodC5ldmFsdWF0ZXx8eWUpLnNvdXJjZStcInwkXCIsXCJnXCIpLGg9XCIvLyMgc291cmNlVVJMPVwiKyhJZS5jYWxsKHQsXCJzb3VyY2VVUkxcIik/KHQuc291cmNlVVJMK1wiXCIpLnJlcGxhY2UoL1xccy9nLFwiIFwiKTpcImxvZGFzaC50ZW1wbGF0ZVNvdXJjZXNbXCIrICsrcnQrXCJdXCIpK1wiXFxuXCI7ZS5yZXBsYWNlKHAsKGZ1bmN0aW9uKHQsbixyLG8sbCxzKXtyZXR1cm4gcnx8KHI9byksZCs9ZS5zbGljZSh1LHMpLnJlcGxhY2Uod2Usbm4pLG4mJihpPSEwLGQrPVwiJyArXFxuX19lKFwiK24rXCIpICtcXG4nXCIpLGwmJihhPSEwLGQrPVwiJztcXG5cIitsK1wiO1xcbl9fcCArPSAnXCIpLHImJihkKz1cIicgK1xcbigoX190ID0gKFwiK3IrXCIpKSA9PSBudWxsID8gJycgOiBfX3QpICtcXG4nXCIpLHU9cyt0Lmxlbmd0aCx0fSkpLGQrPVwiJztcXG5cIjt2YXIgZz1JZS5jYWxsKHQsXCJ2YXJpYWJsZVwiKSYmdC52YXJpYWJsZTtpZihnKXtpZihjZS50ZXN0KGcpKXRocm93IG5ldyBiZShcIkludmFsaWQgYHZhcmlhYmxlYCBvcHRpb24gcGFzc2VkIGludG8gYF8udGVtcGxhdGVgXCIpfWVsc2UgZD1cIndpdGggKG9iaikge1xcblwiK2QrXCJcXG59XFxuXCI7ZD0oYT9kLnJlcGxhY2UoTixcIlwiKTpkKS5yZXBsYWNlKEYsXCIkMVwiKS5yZXBsYWNlKFUsXCIkMTtcIiksZD1cImZ1bmN0aW9uKFwiKyhnfHxcIm9ialwiKStcIikge1xcblwiKyhnP1wiXCI6XCJvYmogfHwgKG9iaiA9IHt9KTtcXG5cIikrXCJ2YXIgX190LCBfX3AgPSAnJ1wiKyhpP1wiLCBfX2UgPSBfLmVzY2FwZVwiOlwiXCIpKyhhP1wiLCBfX2ogPSBBcnJheS5wcm90b3R5cGUuam9pbjtcXG5mdW5jdGlvbiBwcmludCgpIHsgX19wICs9IF9fai5jYWxsKGFyZ3VtZW50cywgJycpIH1cXG5cIjpcIjtcXG5cIikrZCtcInJldHVybiBfX3BcXG59XCI7dmFyIHY9S2woKGZ1bmN0aW9uKCl7cmV0dXJuIHhlKHMsaCtcInJldHVybiBcIitkKS5hcHBseShvLGMpfSkpO2lmKHYuc291cmNlPWQscWEodikpdGhyb3cgdjtyZXR1cm4gdn0sQm4udGltZXM9ZnVuY3Rpb24oZSx0KXtpZigoZT1kbChlKSk8MXx8ZT5mKXJldHVybltdO3ZhciBuPXAscj12bihlLHApO3Q9aWkodCksZS09cDtmb3IodmFyIG89R3Qocix0KTsrK248ZTspdChuKTtyZXR1cm4gb30sQm4udG9GaW5pdGU9ZmwsQm4udG9JbnRlZ2VyPWRsLEJuLnRvTGVuZ3RoPXBsLEJuLnRvTG93ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHZsKGUpLnRvTG93ZXJDYXNlKCl9LEJuLnRvTnVtYmVyPWhsLEJuLnRvU2FmZUludGVnZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGU/b3IoZGwoZSksLTkwMDcxOTkyNTQ3NDA5OTEsZik6MD09PWU/ZTowfSxCbi50b1N0cmluZz12bCxCbi50b1VwcGVyPWZ1bmN0aW9uKGUpe3JldHVybiB2bChlKS50b1VwcGVyQ2FzZSgpfSxCbi50cmltPWZ1bmN0aW9uKGUsdCxuKXtpZigoZT12bChlKSkmJihufHx0PT09bykpcmV0dXJuIHF0KGUpO2lmKCFlfHwhKHQ9aW8odCkpKXJldHVybiBlO3ZhciByPXVuKGUpLGk9dW4odCk7cmV0dXJuIENvKHIsSnQocixpKSxRdChyLGkpKzEpLmpvaW4oXCJcIil9LEJuLnRyaW1FbmQ9ZnVuY3Rpb24oZSx0LG4pe2lmKChlPXZsKGUpKSYmKG58fHQ9PT1vKSlyZXR1cm4gZS5zbGljZSgwLGZuKGUpKzEpO2lmKCFlfHwhKHQ9aW8odCkpKXJldHVybiBlO3ZhciByPXVuKGUpO3JldHVybiBDbyhyLDAsUXQocix1bih0KSkrMSkuam9pbihcIlwiKX0sQm4udHJpbVN0YXJ0PWZ1bmN0aW9uKGUsdCxuKXtpZigoZT12bChlKSkmJihufHx0PT09bykpcmV0dXJuIGUucmVwbGFjZShyZSxcIlwiKTtpZighZXx8ISh0PWlvKHQpKSlyZXR1cm4gZTt2YXIgcj11bihlKTtyZXR1cm4gQ28ocixKdChyLHVuKHQpKSkuam9pbihcIlwiKX0sQm4udHJ1bmNhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj0zMCxyPVwiLi4uXCI7aWYoSmEodCkpe3ZhciBpPVwic2VwYXJhdG9yXCJpbiB0P3Quc2VwYXJhdG9yOmk7bj1cImxlbmd0aFwiaW4gdD9kbCh0Lmxlbmd0aCk6bixyPVwib21pc3Npb25cImluIHQ/aW8odC5vbWlzc2lvbik6cn12YXIgYT0oZT12bChlKSkubGVuZ3RoO2lmKHJuKGUpKXt2YXIgbD11bihlKTthPWwubGVuZ3RofWlmKG4+PWEpcmV0dXJuIGU7dmFyIHM9bi1jbihyKTtpZihzPDEpcmV0dXJuIHI7dmFyIGM9bD9DbyhsLDAscykuam9pbihcIlwiKTplLnNsaWNlKDAscyk7aWYoaT09PW8pcmV0dXJuIGMrcjtpZihsJiYocys9Yy5sZW5ndGgtcykscmwoaSkpe2lmKGUuc2xpY2Uocykuc2VhcmNoKGkpKXt2YXIgdSxmPWM7Zm9yKGkuZ2xvYmFsfHwoaT1MZShpLnNvdXJjZSx2bChkZS5leGVjKGkpKStcImdcIikpLGkubGFzdEluZGV4PTA7dT1pLmV4ZWMoZik7KXZhciBkPXUuaW5kZXg7Yz1jLnNsaWNlKDAsZD09PW8/czpkKX19ZWxzZSBpZihlLmluZGV4T2YoaW8oaSkscykhPXMpe3ZhciBwPWMubGFzdEluZGV4T2YoaSk7cD4tMSYmKGM9Yy5zbGljZSgwLHApKX1yZXR1cm4gYytyfSxCbi51bmVzY2FwZT1mdW5jdGlvbihlKXtyZXR1cm4oZT12bChlKSkmJkcudGVzdChlKT9lLnJlcGxhY2UoVyxkbik6ZX0sQm4udW5pcXVlSWQ9ZnVuY3Rpb24oZSl7dmFyIHQ9KytBZTtyZXR1cm4gdmwoZSkrdH0sQm4udXBwZXJDYXNlPUdsLEJuLnVwcGVyRmlyc3Q9cWwsQm4uZWFjaD12YSxCbi5lYWNoUmlnaHQ9bWEsQm4uZmlyc3Q9VWksaXMoQm4sKGdzPXt9LG1yKEJuLChmdW5jdGlvbihlLHQpe0llLmNhbGwoQm4ucHJvdG90eXBlLHQpfHwoZ3NbdF09ZSl9KSksZ3MpLHtjaGFpbjohMX0pLEJuLlZFUlNJT049XCI0LjE3LjIxXCIsTHQoW1wiYmluZFwiLFwiYmluZEtleVwiLFwiY3VycnlcIixcImN1cnJ5UmlnaHRcIixcInBhcnRpYWxcIixcInBhcnRpYWxSaWdodFwiXSwoZnVuY3Rpb24oZSl7Qm5bZV0ucGxhY2Vob2xkZXI9Qm59KSksTHQoW1wiZHJvcFwiLFwidGFrZVwiXSwoZnVuY3Rpb24oZSx0KXskbi5wcm90b3R5cGVbZV09ZnVuY3Rpb24obil7bj1uPT09bz8xOmduKGRsKG4pLDApO3ZhciByPXRoaXMuX19maWx0ZXJlZF9fJiYhdD9uZXcgJG4odGhpcyk6dGhpcy5jbG9uZSgpO3JldHVybiByLl9fZmlsdGVyZWRfXz9yLl9fdGFrZUNvdW50X189dm4obixyLl9fdGFrZUNvdW50X18pOnIuX192aWV3c19fLnB1c2goe3NpemU6dm4obixwKSx0eXBlOmUrKHIuX19kaXJfXzwwP1wiUmlnaHRcIjpcIlwiKX0pLHJ9LCRuLnByb3RvdHlwZVtlK1wiUmlnaHRcIl09ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpW2VdKHQpLnJldmVyc2UoKX19KSksTHQoW1wiZmlsdGVyXCIsXCJtYXBcIixcInRha2VXaGlsZVwiXSwoZnVuY3Rpb24oZSx0KXt2YXIgbj10KzEscj0xPT1ufHwzPT1uOyRuLnByb3RvdHlwZVtlXT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmNsb25lKCk7cmV0dXJuIHQuX19pdGVyYXRlZXNfXy5wdXNoKHtpdGVyYXRlZTppaShlLDMpLHR5cGU6bn0pLHQuX19maWx0ZXJlZF9fPXQuX19maWx0ZXJlZF9ffHxyLHR9fSkpLEx0KFtcImhlYWRcIixcImxhc3RcIl0sKGZ1bmN0aW9uKGUsdCl7dmFyIG49XCJ0YWtlXCIrKHQ/XCJSaWdodFwiOlwiXCIpOyRuLnByb3RvdHlwZVtlXT1mdW5jdGlvbigpe3JldHVybiB0aGlzW25dKDEpLnZhbHVlKClbMF19fSkpLEx0KFtcImluaXRpYWxcIixcInRhaWxcIl0sKGZ1bmN0aW9uKGUsdCl7dmFyIG49XCJkcm9wXCIrKHQ/XCJcIjpcIlJpZ2h0XCIpOyRuLnByb3RvdHlwZVtlXT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZmlsdGVyZWRfXz9uZXcgJG4odGhpcyk6dGhpc1tuXSgxKX19KSksJG4ucHJvdG90eXBlLmNvbXBhY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWx0ZXIodHMpfSwkbi5wcm90b3R5cGUuZmluZD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5maWx0ZXIoZSkuaGVhZCgpfSwkbi5wcm90b3R5cGUuZmluZExhc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpLmZpbmQoZSl9LCRuLnByb3RvdHlwZS5pbnZva2VNYXA9enIoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZT9uZXcgJG4odGhpcyk6dGhpcy5tYXAoKGZ1bmN0aW9uKG4pe3JldHVybiBTcihuLGUsdCl9KSl9KSksJG4ucHJvdG90eXBlLnJlamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5maWx0ZXIoSWEoaWkoZSkpKX0sJG4ucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGUsdCl7ZT1kbChlKTt2YXIgbj10aGlzO3JldHVybiBuLl9fZmlsdGVyZWRfXyYmKGU+MHx8dDwwKT9uZXcgJG4obik6KGU8MD9uPW4udGFrZVJpZ2h0KC1lKTplJiYobj1uLmRyb3AoZSkpLHQhPT1vJiYobj0odD1kbCh0KSk8MD9uLmRyb3BSaWdodCgtdCk6bi50YWtlKHQtZSkpLG4pfSwkbi5wcm90b3R5cGUudGFrZVJpZ2h0V2hpbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpLnRha2VXaGlsZShlKS5yZXZlcnNlKCl9LCRuLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFrZShwKX0sbXIoJG4ucHJvdG90eXBlLChmdW5jdGlvbihlLHQpe3ZhciBuPS9eKD86ZmlsdGVyfGZpbmR8bWFwfHJlamVjdCl8V2hpbGUkLy50ZXN0KHQpLHI9L14oPzpoZWFkfGxhc3QpJC8udGVzdCh0KSxpPUJuW3I/XCJ0YWtlXCIrKFwibGFzdFwiPT10P1wiUmlnaHRcIjpcIlwiKTp0XSxhPXJ8fC9eZmluZC8udGVzdCh0KTtpJiYoQm4ucHJvdG90eXBlW3RdPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX3dyYXBwZWRfXyxsPXI/WzFdOmFyZ3VtZW50cyxzPXQgaW5zdGFuY2VvZiAkbixjPWxbMF0sdT1zfHxOYSh0KSxmPWZ1bmN0aW9uKGUpe3ZhciB0PWkuYXBwbHkoQm4sUHQoW2VdLGwpKTtyZXR1cm4gciYmZD90WzBdOnR9O3UmJm4mJlwiZnVuY3Rpb25cIj09dHlwZW9mIGMmJjEhPWMubGVuZ3RoJiYocz11PSExKTt2YXIgZD10aGlzLl9fY2hhaW5fXyxwPSEhdGhpcy5fX2FjdGlvbnNfXy5sZW5ndGgsaD1hJiYhZCxnPXMmJiFwO2lmKCFhJiZ1KXt0PWc/dDpuZXcgJG4odGhpcyk7dmFyIHY9ZS5hcHBseSh0LGwpO3JldHVybiB2Ll9fYWN0aW9uc19fLnB1c2goe2Z1bmM6ZmEsYXJnczpbZl0sdGhpc0FyZzpvfSksbmV3IFpuKHYsZCl9cmV0dXJuIGgmJmc/ZS5hcHBseSh0aGlzLGwpOih2PXRoaXMudGhydShmKSxoP3I/di52YWx1ZSgpWzBdOnYudmFsdWUoKTp2KX0pfSkpLEx0KFtcInBvcFwiLFwicHVzaFwiLFwic2hpZnRcIixcInNvcnRcIixcInNwbGljZVwiLFwidW5zaGlmdFwiXSwoZnVuY3Rpb24oZSl7dmFyIHQ9amVbZV0sbj0vXig/OnB1c2h8c29ydHx1bnNoaWZ0KSQvLnRlc3QoZSk/XCJ0YXBcIjpcInRocnVcIixyPS9eKD86cG9wfHNoaWZ0KSQvLnRlc3QoZSk7Qm4ucHJvdG90eXBlW2VdPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzO2lmKHImJiF0aGlzLl9fY2hhaW5fXyl7dmFyIG89dGhpcy52YWx1ZSgpO3JldHVybiB0LmFwcGx5KE5hKG8pP286W10sZSl9cmV0dXJuIHRoaXNbbl0oKGZ1bmN0aW9uKG4pe3JldHVybiB0LmFwcGx5KE5hKG4pP246W10sZSl9KSl9fSkpLG1yKCRuLnByb3RvdHlwZSwoZnVuY3Rpb24oZSx0KXt2YXIgbj1Cblt0XTtpZihuKXt2YXIgcj1uLm5hbWUrXCJcIjtJZS5jYWxsKGpuLHIpfHwoam5bcl09W10pLGpuW3JdLnB1c2goe25hbWU6dCxmdW5jOm59KX19KSksam5bQm8obywyKS5uYW1lXT1be25hbWU6XCJ3cmFwcGVyXCIsZnVuYzpvfV0sJG4ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGU9bmV3ICRuKHRoaXMuX193cmFwcGVkX18pO3JldHVybiBlLl9fYWN0aW9uc19fPUVvKHRoaXMuX19hY3Rpb25zX18pLGUuX19kaXJfXz10aGlzLl9fZGlyX18sZS5fX2ZpbHRlcmVkX189dGhpcy5fX2ZpbHRlcmVkX18sZS5fX2l0ZXJhdGVlc19fPUVvKHRoaXMuX19pdGVyYXRlZXNfXyksZS5fX3Rha2VDb3VudF9fPXRoaXMuX190YWtlQ291bnRfXyxlLl9fdmlld3NfXz1Fbyh0aGlzLl9fdmlld3NfXyksZX0sJG4ucHJvdG90eXBlLnJldmVyc2U9ZnVuY3Rpb24oKXtpZih0aGlzLl9fZmlsdGVyZWRfXyl7dmFyIGU9bmV3ICRuKHRoaXMpO2UuX19kaXJfXz0tMSxlLl9fZmlsdGVyZWRfXz0hMH1lbHNlKGU9dGhpcy5jbG9uZSgpKS5fX2Rpcl9fKj0tMTtyZXR1cm4gZX0sJG4ucHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fX3dyYXBwZWRfXy52YWx1ZSgpLHQ9dGhpcy5fX2Rpcl9fLG49TmEoZSkscj10PDAsbz1uP2UubGVuZ3RoOjAsaT1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPS0xLG89bi5sZW5ndGg7KytyPG87KXt2YXIgaT1uW3JdLGE9aS5zaXplO3N3aXRjaChpLnR5cGUpe2Nhc2VcImRyb3BcIjplKz1hO2JyZWFrO2Nhc2VcImRyb3BSaWdodFwiOnQtPWE7YnJlYWs7Y2FzZVwidGFrZVwiOnQ9dm4odCxlK2EpO2JyZWFrO2Nhc2VcInRha2VSaWdodFwiOmU9Z24oZSx0LWEpfX1yZXR1cm57c3RhcnQ6ZSxlbmQ6dH19KDAsbyx0aGlzLl9fdmlld3NfXyksYT1pLnN0YXJ0LGw9aS5lbmQscz1sLWEsYz1yP2w6YS0xLHU9dGhpcy5fX2l0ZXJhdGVlc19fLGY9dS5sZW5ndGgsZD0wLHA9dm4ocyx0aGlzLl9fdGFrZUNvdW50X18pO2lmKCFufHwhciYmbz09cyYmcD09cylyZXR1cm4gdW8oZSx0aGlzLl9fYWN0aW9uc19fKTt2YXIgaD1bXTtlOmZvcig7cy0tJiZkPHA7KXtmb3IodmFyIGc9LTEsdj1lW2MrPXRdOysrZzxmOyl7dmFyIG09dVtnXSxDPW0uaXRlcmF0ZWUseT1tLnR5cGUsdz1DKHYpO2lmKDI9PXkpdj13O2Vsc2UgaWYoIXcpe2lmKDE9PXkpY29udGludWUgZTticmVhayBlfX1oW2QrK109dn1yZXR1cm4gaH0sQm4ucHJvdG90eXBlLmF0PWRhLEJuLnByb3RvdHlwZS5jaGFpbj1mdW5jdGlvbigpe3JldHVybiB1YSh0aGlzKX0sQm4ucHJvdG90eXBlLmNvbW1pdD1mdW5jdGlvbigpe3JldHVybiBuZXcgWm4odGhpcy52YWx1ZSgpLHRoaXMuX19jaGFpbl9fKX0sQm4ucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXt0aGlzLl9fdmFsdWVzX189PT1vJiYodGhpcy5fX3ZhbHVlc19fPXVsKHRoaXMudmFsdWUoKSkpO3ZhciBlPXRoaXMuX19pbmRleF9fPj10aGlzLl9fdmFsdWVzX18ubGVuZ3RoO3JldHVybntkb25lOmUsdmFsdWU6ZT9vOnRoaXMuX192YWx1ZXNfX1t0aGlzLl9faW5kZXhfXysrXX19LEJuLnByb3RvdHlwZS5wbGFudD1mdW5jdGlvbihlKXtmb3IodmFyIHQsbj10aGlzO24gaW5zdGFuY2VvZiBEbjspe3ZhciByPUJpKG4pO3IuX19pbmRleF9fPTAsci5fX3ZhbHVlc19fPW8sdD9pLl9fd3JhcHBlZF9fPXI6dD1yO3ZhciBpPXI7bj1uLl9fd3JhcHBlZF9ffXJldHVybiBpLl9fd3JhcHBlZF9fPWUsdH0sQm4ucHJvdG90eXBlLnJldmVyc2U9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9fd3JhcHBlZF9fO2lmKGUgaW5zdGFuY2VvZiAkbil7dmFyIHQ9ZTtyZXR1cm4gdGhpcy5fX2FjdGlvbnNfXy5sZW5ndGgmJih0PW5ldyAkbih0aGlzKSksKHQ9dC5yZXZlcnNlKCkpLl9fYWN0aW9uc19fLnB1c2goe2Z1bmM6ZmEsYXJnczpbSmldLHRoaXNBcmc6b30pLG5ldyBabih0LHRoaXMuX19jaGFpbl9fKX1yZXR1cm4gdGhpcy50aHJ1KEppKX0sQm4ucHJvdG90eXBlLnRvSlNPTj1Cbi5wcm90b3R5cGUudmFsdWVPZj1Cbi5wcm90b3R5cGUudmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdW8odGhpcy5fX3dyYXBwZWRfXyx0aGlzLl9fYWN0aW9uc19fKX0sQm4ucHJvdG90eXBlLmZpcnN0PUJuLnByb3RvdHlwZS5oZWFkLFllJiYoQm4ucHJvdG90eXBlW1llXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksQm59KCk7ZnQuXz1wbiwocj1mdW5jdGlvbigpe3JldHVybiBwbn0uY2FsbCh0LG4sdCxlKSk9PT1vfHwoZS5leHBvcnRzPXIpfS5jYWxsKHRoaXMpfSw3NDE4OmU9Pnt2YXIgdD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLG49T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxyPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dHJ5e2lmKCFPYmplY3QuYXNzaWduKXJldHVybiExO3ZhciBlPW5ldyBTdHJpbmcoXCJhYmNcIik7aWYoZVs1XT1cImRlXCIsXCI1XCI9PT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKVswXSlyZXR1cm4hMTtmb3IodmFyIHQ9e30sbj0wO248MTA7bisrKXRbXCJfXCIrU3RyaW5nLmZyb21DaGFyQ29kZShuKV09bjtpZihcIjAxMjM0NTY3ODlcIiE9PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KSkuam9pbihcIlwiKSlyZXR1cm4hMTt2YXIgcj17fTtyZXR1cm5cImFiY2RlZmdoaWprbG1ub3BxcnN0XCIuc3BsaXQoXCJcIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cltlXT1lfSkpLFwiYWJjZGVmZ2hpamtsbW5vcHFyc3RcIj09PU9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30scikpLmpvaW4oXCJcIil9Y2F0Y2goZSl7cmV0dXJuITF9fSgpP09iamVjdC5hc3NpZ246ZnVuY3Rpb24oZSxvKXtmb3IodmFyIGksYSxsPWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkXCIpO3JldHVybiBPYmplY3QoZSl9KGUpLHM9MTtzPGFyZ3VtZW50cy5sZW5ndGg7cysrKXtmb3IodmFyIGMgaW4gaT1PYmplY3QoYXJndW1lbnRzW3NdKSluLmNhbGwoaSxjKSYmKGxbY109aVtjXSk7aWYodCl7YT10KGkpO2Zvcih2YXIgdT0wO3U8YS5sZW5ndGg7dSsrKXIuY2FsbChpLGFbdV0pJiYobFthW3VdXT1pW2FbdV1dKX19cmV0dXJuIGx9fSw5Mjk0OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgcj1uKDY1NSksbz1uKDQzOTQpLGk9bigzNTczKSxhPW4oNDgzOSk7dmFyIGw9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX0oYSkscz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIE1hdGgubWluKE1hdGgubWF4KG4sZSksdCl9LGM9LjAwMSx1PS4wMSxmPTEwLGQ9LjA1LHA9MSxoPTEyO2Z1bmN0aW9uIGcoZSx0KXtyZXR1cm4gZSpNYXRoLnNxcnQoMS10KnQpfXZhciB2PVtcImR1cmF0aW9uXCIsXCJib3VuY2VcIl0sbT1bXCJzdGlmZm5lc3NcIixcImRhbXBpbmdcIixcIm1hc3NcIl07ZnVuY3Rpb24gQyhlLHQpe3JldHVybiB0LnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT1lW3RdfSkpfWZ1bmN0aW9uIHkoZSl7dmFyIHQ9ZS5mcm9tLG49dm9pZCAwPT09dD8wOnQsaT1lLnRvLGE9dm9pZCAwPT09aT8xOmksbD1lLnJlc3RTcGVlZCx5PXZvaWQgMD09PWw/MjpsLGI9ZS5yZXN0RGVsdGEseD1yLl9fcmVzdChlLFtcImZyb21cIixcInRvXCIsXCJyZXN0U3BlZWRcIixcInJlc3REZWx0YVwiXSksXz17ZG9uZTohMSx2YWx1ZTpufSxPPWZ1bmN0aW9uKGUpe3ZhciB0PXIuX19hc3NpZ24oe3ZlbG9jaXR5OjAsc3RpZmZuZXNzOjEwMCxkYW1waW5nOjEwLG1hc3M6MSxpc1Jlc29sdmVkRnJvbUR1cmF0aW9uOiExfSxlKTtpZighQyhlLG0pJiZDKGUsdikpe3ZhciBuPWZ1bmN0aW9uKGUpe3ZhciB0LG4scj1lLmR1cmF0aW9uLGk9dm9pZCAwPT09cj84MDA6cixhPWUuYm91bmNlLGw9dm9pZCAwPT09YT8uMjU6YSx2PWUudmVsb2NpdHksbT12b2lkIDA9PT12PzA6dixDPWUubWFzcyx5PXZvaWQgMD09PUM/MTpDO28ud2FybmluZyhpPD0xZTMqZixcIlNwcmluZyBkdXJhdGlvbiBtdXN0IGJlIDEwIHNlY29uZHMgb3IgbGVzc1wiKTt2YXIgdz0xLWw7dz1zKGQscCx3KSxpPXModSxmLGkvMWUzKSx3PDE/KHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZSp3LG49dCppLHI9dC1tLG89ZyhlLHcpLGE9TWF0aC5leHAoLW4pO3JldHVybiBjLXIvbyphfSxuPWZ1bmN0aW9uKGUpe3ZhciBuPWUqdyppLHI9biptK20sbz1NYXRoLnBvdyh3LDIpKk1hdGgucG93KGUsMikqaSxhPU1hdGguZXhwKC1uKSxsPWcoTWF0aC5wb3coZSwyKSx3KTtyZXR1cm4oLXQoZSkrYz4wPy0xOjEpKigoci1vKSphKS9sfSk6KHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZXhwKC1lKmkpKigoZS1tKSppKzEpLWN9LG49ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZXhwKC1lKmkpKihpKmkqKG0tZSkpfSk7dmFyIGI9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1uLG89MTtvPGg7bysrKXItPWUocikvdChyKTtyZXR1cm4gcn0odCxuLDUvaSk7aWYoaSo9MWUzLGlzTmFOKGIpKXJldHVybntzdGlmZm5lc3M6MTAwLGRhbXBpbmc6MTAsZHVyYXRpb246aX07dmFyIHg9TWF0aC5wb3coYiwyKSp5O3JldHVybntzdGlmZm5lc3M6eCxkYW1waW5nOjIqdypNYXRoLnNxcnQoeSp4KSxkdXJhdGlvbjppfX0oZSk7KHQ9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sdCksbikse3ZlbG9jaXR5OjAsbWFzczoxfSkpLmlzUmVzb2x2ZWRGcm9tRHVyYXRpb249ITB9cmV0dXJuIHR9KHgpLEw9Ty5zdGlmZm5lc3MsRT1PLmRhbXBpbmcsUz1PLm1hc3Msaj1PLnZlbG9jaXR5LE09Ty5kdXJhdGlvbixrPU8uaXNSZXNvbHZlZEZyb21EdXJhdGlvbixSPXcsUD13O2Z1bmN0aW9uIEkoKXt2YXIgZT1qPy1qLzFlMzowLHQ9YS1uLHI9RS8oMipNYXRoLnNxcnQoTCpTKSksbz1NYXRoLnNxcnQoTC9TKS8xZTM7aWYobnVsbCE9Ynx8KGI9TWF0aC5hYnMoYS1uKTw9MT8uMDE6LjQpLHI8MSl7dmFyIGk9ZyhvLHIpO1I9ZnVuY3Rpb24obil7dmFyIGw9TWF0aC5leHAoLXIqbypuKTtyZXR1cm4gYS1sKigoZStyKm8qdCkvaSpNYXRoLnNpbihpKm4pK3QqTWF0aC5jb3MoaSpuKSl9LFA9ZnVuY3Rpb24obil7dmFyIGE9TWF0aC5leHAoLXIqbypuKTtyZXR1cm4gcipvKmEqKE1hdGguc2luKGkqbikqKGUrcipvKnQpL2krdCpNYXRoLmNvcyhpKm4pKS1hKihNYXRoLmNvcyhpKm4pKihlK3Iqbyp0KS1pKnQqTWF0aC5zaW4oaSpuKSl9fWVsc2UgaWYoMT09PXIpUj1mdW5jdGlvbihuKXtyZXR1cm4gYS1NYXRoLmV4cCgtbypuKSoodCsoZStvKnQpKm4pfTtlbHNle3ZhciBsPW8qTWF0aC5zcXJ0KHIqci0xKTtSPWZ1bmN0aW9uKG4pe3ZhciBpPU1hdGguZXhwKC1yKm8qbikscz1NYXRoLm1pbihsKm4sMzAwKTtyZXR1cm4gYS1pKigoZStyKm8qdCkqTWF0aC5zaW5oKHMpK2wqdCpNYXRoLmNvc2gocykpL2x9fX1yZXR1cm4gSSgpLHtuZXh0OmZ1bmN0aW9uKGUpe3ZhciB0PVIoZSk7aWYoaylfLmRvbmU9ZT49TTtlbHNle3ZhciBuPTFlMypQKGUpLHI9TWF0aC5hYnMobik8PXksbz1NYXRoLmFicyhhLXQpPD1iO18uZG9uZT1yJiZvfXJldHVybiBfLnZhbHVlPV8uZG9uZT9hOnQsX30sZmxpcFRhcmdldDpmdW5jdGlvbigpe3ZhciBlO2o9LWosbj0oZT1bYSxuXSlbMF0sYT1lWzFdLEkoKX19fXkubmVlZHNJbnRlcnBvbGF0aW9uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGV8fFwic3RyaW5nXCI9PXR5cGVvZiB0fTt2YXIgdz1mdW5jdGlvbihlKXtyZXR1cm4gMH0sYj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dC1lO3JldHVybiAwPT09cj8xOihuLWUpL3J9LHg9ZnVuY3Rpb24oZSx0LG4pe3JldHVybi1uKmUrbip0K2V9LF89ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUqZSxvPXQqdDtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgubWF4KDAsbiooby1yKStyKSl9LE89W2kuaGV4LGkucmdiYSxpLmhzbGFdLEw9ZnVuY3Rpb24oZSl7cmV0dXJuIE8uZmluZCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudGVzdChlKX0pKX0sRT1mdW5jdGlvbihlKXtyZXR1cm5cIidcIitlK1wiJyBpcyBub3QgYW4gYW5pbWF0YWJsZSBjb2xvci4gVXNlIHRoZSBlcXVpdmFsZW50IGNvbG9yIGNvZGUgaW5zdGVhZC5cIn0sUz1mdW5jdGlvbihlLHQpe3ZhciBuPUwoZSksYT1MKHQpO28uaW52YXJpYW50KCEhbixFKGUpKSxvLmludmFyaWFudCghIWEsRSh0KSksby5pbnZhcmlhbnQobi50cmFuc2Zvcm09PT1hLnRyYW5zZm9ybSxcIkJvdGggY29sb3JzIG11c3QgYmUgaGV4L1JHQkEsIE9SIGJvdGggbXVzdCBiZSBIU0xBLlwiKTt2YXIgbD1uLnBhcnNlKGUpLHM9YS5wYXJzZSh0KSxjPXIuX19hc3NpZ24oe30sbCksdT1uPT09aS5oc2xhP3g6XztyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIGMpXCJhbHBoYVwiIT09dCYmKGNbdF09dShsW3RdLHNbdF0sZSkpO3JldHVybiBjLmFscGhhPXgobC5hbHBoYSxzLmFscGhhLGUpLG4udHJhbnNmb3JtKGMpfX0saj17eDowLHk6MCx6OjB9LE09ZnVuY3Rpb24oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGV9LGs9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQoZShuKSl9fSxSPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdF09YXJndW1lbnRzW3RdO3JldHVybiBlLnJlZHVjZShrKX07ZnVuY3Rpb24gUChlLHQpe3JldHVybiBNKGUpP2Z1bmN0aW9uKG4pe3JldHVybiB4KGUsdCxuKX06aS5jb2xvci50ZXN0KGUpP1MoZSx0KTpIKGUsdCl9dmFyIEk9ZnVuY3Rpb24oZSx0KXt2YXIgbj1yLl9fc3ByZWFkQXJyYXkoW10sZSksbz1uLmxlbmd0aCxpPWUubWFwKChmdW5jdGlvbihlLG4pe3JldHVybiBQKGUsdFtuXSl9KSk7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8bzt0Kyspblt0XT1pW3RdKGUpO3JldHVybiBufX0sQT1mdW5jdGlvbihlLHQpe3ZhciBuPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxlKSx0KSxvPXt9O2Zvcih2YXIgaSBpbiBuKXZvaWQgMCE9PWVbaV0mJnZvaWQgMCE9PXRbaV0mJihvW2ldPVAoZVtpXSx0W2ldKSk7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBvKW5bdF09b1t0XShlKTtyZXR1cm4gbn19O2Z1bmN0aW9uIFQoZSl7Zm9yKHZhciB0PWkuY29tcGxleC5wYXJzZShlKSxuPXQubGVuZ3RoLHI9MCxvPTAsYT0wLGw9MDtsPG47bCsrKXJ8fFwibnVtYmVyXCI9PXR5cGVvZiB0W2xdP3IrKzp2b2lkIDAhPT10W2xdLmh1ZT9hKys6bysrO3JldHVybntwYXJzZWQ6dCxudW1OdW1iZXJzOnIsbnVtUkdCOm8sbnVtSFNMOmF9fXZhciBIPWZ1bmN0aW9uKGUsdCl7dmFyIG49aS5jb21wbGV4LmNyZWF0ZVRyYW5zZm9ybWVyKHQpLHI9VChlKSxhPVQodCk7cmV0dXJuIG8uaW52YXJpYW50KHIubnVtSFNMPT09YS5udW1IU0wmJnIubnVtUkdCPT09YS5udW1SR0ImJnIubnVtTnVtYmVycz49YS5udW1OdW1iZXJzLFwiQ29tcGxleCB2YWx1ZXMgJ1wiK2UrXCInIGFuZCAnXCIrdCtcIicgdG9vIGRpZmZlcmVudCB0byBtaXguIEVuc3VyZSBhbGwgY29sb3JzIGFyZSBvZiB0aGUgc2FtZSB0eXBlLlwiKSxSKEkoci5wYXJzZWQsYS5wYXJzZWQpLG4pfSxCPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB4KGUsdCxuKX19O2Z1bmN0aW9uIFYoZSx0LG4pe3ZhciByPXZvaWQgMD09PW4/e306bixhPXIuY2xhbXAsbD12b2lkIDA9PT1hfHxhLGM9ci5lYXNlLHU9ci5taXhlcixmPWUubGVuZ3RoO28uaW52YXJpYW50KGY9PT10Lmxlbmd0aCxcIkJvdGggaW5wdXQgYW5kIG91dHB1dCByYW5nZXMgbXVzdCBiZSB0aGUgc2FtZSBsZW5ndGhcIiksby5pbnZhcmlhbnQoIWN8fCFBcnJheS5pc0FycmF5KGMpfHxjLmxlbmd0aD09PWYtMSxcIkFycmF5IG9mIGVhc2luZyBmdW5jdGlvbnMgbXVzdCBiZSBvZiBsZW5ndGggYGlucHV0Lmxlbmd0aCAtIDFgLCBhcyBpdCBhcHBsaWVzIHRvIHRoZSB0cmFuc2l0aW9ucyAqKmJldHdlZW4qKiB0aGUgZGVmaW5lZCB2YWx1ZXMuXCIpLGVbMF0+ZVtmLTFdJiYoZT1bXS5jb25jYXQoZSksdD1bXS5jb25jYXQodCksZS5yZXZlcnNlKCksdC5yZXZlcnNlKCkpO3ZhciBkPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHIsbz1bXSxhPW58fChcIm51bWJlclwiPT10eXBlb2Yocj1lWzBdKT9COlwic3RyaW5nXCI9PXR5cGVvZiByP2kuY29sb3IudGVzdChyKT9TOkg6QXJyYXkuaXNBcnJheShyKT9JOlwib2JqZWN0XCI9PXR5cGVvZiByP0E6dm9pZCAwKSxsPWUubGVuZ3RoLTEscz0wO3M8bDtzKyspe3ZhciBjPWEoZVtzXSxlW3MrMV0pO2lmKHQpe3ZhciB1PUFycmF5LmlzQXJyYXkodCk/dFtzXTp0O2M9Uih1LGMpfW8ucHVzaChjKX1yZXR1cm4gb30odCxjLHUpLHA9Mj09PWY/ZnVuY3Rpb24oZSx0KXt2YXIgbj1lWzBdLHI9ZVsxXSxvPXRbMF07cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBvKGIobixyLGUpKX19KGUsZCk6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmxlbmd0aCxyPW4tMTtyZXR1cm4gZnVuY3Rpb24obyl7dmFyIGk9MCxhPSExO2lmKG88PWVbMF0/YT0hMDpvPj1lW3JdJiYoaT1yLTEsYT0hMCksIWEpe2Zvcih2YXIgbD0xO2w8biYmIShlW2xdPm98fGw9PT1yKTtsKyspO2k9bC0xfXZhciBzPWIoZVtpXSxlW2krMV0sbyk7cmV0dXJuIHRbaV0ocyl9fShlLGQpO3JldHVybiBsP2Z1bmN0aW9uKHQpe3JldHVybiBwKHMoZVswXSxlW2YtMV0sdCkpfTpwfXZhciBEPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gMS1lKDEtdCl9fSxaPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdDw9LjU/ZSgyKnQpLzI6KDItZSgyKigxLXQpKSkvMn19LCQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyh0LGUpfX0sTj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQqdCooKGUrMSkqdC1lKX19LEY9ZnVuY3Rpb24oZSl7dmFyIHQ9TihlKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuKGUqPTIpPDE/LjUqdChlKTouNSooMi1NYXRoLnBvdygyLC0xMCooZS0xKSkpfX0sVT1mdW5jdGlvbihlKXtyZXR1cm4gZX0sVz0kKDIpLHo9RChXKSxHPVooVykscT1mdW5jdGlvbihlKXtyZXR1cm4gMS1NYXRoLnNpbihNYXRoLmFjb3MoZSkpfSxZPUQocSksSz1aKFkpLFg9TigxLjUyNSksSj1EKFgpLFE9WihYKSxlZT1GKDEuNTI1KSx0ZT1mdW5jdGlvbihlKXtpZigxPT09ZXx8MD09PWUpcmV0dXJuIGU7dmFyIHQ9ZSplO3JldHVybiBlPC4zNjM2MzYzNjM2MzYzNjM2NT83LjU2MjUqdDplPC43MjcyNzI3MjcyNzI3MjczPzkuMDc1KnQtOS45KmUrMy40OmU8Ljk/MTIuMDY2NDgxOTk0NDU5ODMzKnQtMTkuNjM1NDU3MDYzNzExOTEqZSs4Ljg5ODA2MDk0MTgyODI1NToxMC44KmUqZS0yMC41MiplKzEwLjcyfSxuZT1EKHRlKTtmdW5jdGlvbiByZShlLHQpe3JldHVybiBlLm1hcCgoZnVuY3Rpb24oKXtyZXR1cm4gdHx8R30pKS5zcGxpY2UoMCxlLmxlbmd0aC0xKX1mdW5jdGlvbiBvZShlKXt2YXIgdD1lLmZyb20sbj12b2lkIDA9PT10PzA6dCxyPWUudG8sbz12b2lkIDA9PT1yPzE6cixpPWUuZWFzZSxhPWUub2Zmc2V0LGw9ZS5kdXJhdGlvbixzPXZvaWQgMD09PWw/MzAwOmwsYz17ZG9uZTohMSx2YWx1ZTpufSx1PUFycmF5LmlzQXJyYXkobyk/bzpbbixvXSxmPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZSp0fSkpfShhJiZhLmxlbmd0aD09PXUubGVuZ3RoP2E6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGUubWFwKChmdW5jdGlvbihlLG4pe3JldHVybiAwIT09bj9uLyh0LTEpOjB9KSl9KHUpLHMpO2Z1bmN0aW9uIGQoKXtyZXR1cm4gVihmLHUse2Vhc2U6QXJyYXkuaXNBcnJheShpKT9pOnJlKHUsaSl9KX12YXIgcD1kKCk7cmV0dXJue25leHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGMudmFsdWU9cChlKSxjLmRvbmU9ZT49cyxjfSxmbGlwVGFyZ2V0OmZ1bmN0aW9uKCl7dS5yZXZlcnNlKCkscD1kKCl9fX1mdW5jdGlvbiBpZShlKXt2YXIgdD1lLnZlbG9jaXR5LG49dm9pZCAwPT09dD8wOnQscj1lLmZyb20sbz12b2lkIDA9PT1yPzA6cixpPWUucG93ZXIsYT12b2lkIDA9PT1pPy44OmksbD1lLnRpbWVDb25zdGFudCxzPXZvaWQgMD09PWw/MzUwOmwsYz1lLnJlc3REZWx0YSx1PXZvaWQgMD09PWM/LjU6YyxmPWUubW9kaWZ5VGFyZ2V0LGQ9e2RvbmU6ITEsdmFsdWU6b30scD1hKm4saD1vK3AsZz12b2lkIDA9PT1mP2g6ZihoKTtyZXR1cm4gZyE9PWgmJihwPWctbykse25leHQ6ZnVuY3Rpb24oZSl7dmFyIHQ9LXAqTWF0aC5leHAoLWUvcyk7cmV0dXJuIGQuZG9uZT0hKHQ+dXx8dDwtdSksZC52YWx1ZT1kLmRvbmU/ZzpnK3QsZH0sZmxpcFRhcmdldDpmdW5jdGlvbigpe319fXZhciBhZT17a2V5ZnJhbWVzOm9lLHNwcmluZzp5LGRlY2F5OmllfTtmdW5jdGlvbiBsZShlLHQsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPTApLGUtdC1ufXZhciBzZT1mdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbih0KXt2YXIgbj10LmRlbHRhO3JldHVybiBlKG4pfTtyZXR1cm57c3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5kZWZhdWx0LnVwZGF0ZSh0LCEwKX0sc3RvcDpmdW5jdGlvbigpe3JldHVybiBhLmNhbmNlbFN5bmMudXBkYXRlKHQpfX19O2Z1bmN0aW9uIGNlKGUpe3ZhciB0LG4sbyxpLGEsbD1lLmZyb20scz1lLmF1dG9wbGF5LGM9dm9pZCAwPT09c3x8cyx1PWUuZHJpdmVyLGY9dm9pZCAwPT09dT9zZTp1LGQ9ZS5lbGFwc2VkLHA9dm9pZCAwPT09ZD8wOmQsaD1lLnJlcGVhdCxnPXZvaWQgMD09PWg/MDpoLHY9ZS5yZXBlYXRUeXBlLG09dm9pZCAwPT09dj9cImxvb3BcIjp2LEM9ZS5yZXBlYXREZWxheSx3PXZvaWQgMD09PUM/MDpDLGI9ZS5vblBsYXkseD1lLm9uU3RvcCxfPWUub25Db21wbGV0ZSxPPWUub25SZXBlYXQsTD1lLm9uVXBkYXRlLEU9ci5fX3Jlc3QoZSxbXCJmcm9tXCIsXCJhdXRvcGxheVwiLFwiZHJpdmVyXCIsXCJlbGFwc2VkXCIsXCJyZXBlYXRcIixcInJlcGVhdFR5cGVcIixcInJlcGVhdERlbGF5XCIsXCJvblBsYXlcIixcIm9uU3RvcFwiLFwib25Db21wbGV0ZVwiLFwib25SZXBlYXRcIixcIm9uVXBkYXRlXCJdKSxTPUUudG8saj0wLE09RS5kdXJhdGlvbixrPSExLFI9ITAsUD1mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUudG8pKXJldHVybiBvZTtpZihhZVtlLnR5cGVdKXJldHVybiBhZVtlLnR5cGVdO3ZhciB0PW5ldyBTZXQoT2JqZWN0LmtleXMoZSkpO3JldHVybiB0LmhhcyhcImVhc2VcIil8fHQuaGFzKFwiZHVyYXRpb25cIikmJiF0LmhhcyhcImRhbXBpbmdSYXRpb1wiKT9vZTp0LmhhcyhcImRhbXBpbmdSYXRpb1wiKXx8dC5oYXMoXCJzdGlmZm5lc3NcIil8fHQuaGFzKFwibWFzc1wiKXx8dC5oYXMoXCJkYW1waW5nXCIpfHx0LmhhcyhcInJlc3RTcGVlZFwiKXx8dC5oYXMoXCJyZXN0RGVsdGFcIik/eTpvZX0oRSk7KG51bGw9PT0obj0odD1QKS5uZWVkc0ludGVycG9sYXRpb24pfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmNhbGwodCxsLFMpKSYmKGE9VihbMCwxMDBdLFtsLFNdLHtjbGFtcDohMX0pLGw9MCxTPTEwMCk7dmFyIEk9UChyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sRSkse2Zyb206bCx0bzpTfSkpO3JldHVybiBjJiYobnVsbD09Ynx8YigpLChvPWYoKGZ1bmN0aW9uKGUpe2lmKFJ8fChlPS1lKSxwKz1lLCFrKXt2YXIgdD1JLm5leHQoTWF0aC5tYXgoMCxwKSk7aT10LnZhbHVlLGEmJihpPWEoaSkpLGs9Uj90LmRvbmU6cDw9MH1udWxsPT1MfHxMKGkpLGsmJigwPT09aiYmKG51bGwhPU18fChNPXApKSxqPGc/ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHI/ZT49dCtuOmU8PS1ufShwLE0sdyxSKSYmKGorKyxcInJldmVyc2VcIj09PW0/cD1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdm9pZCAwPT09biYmKG49MCksdm9pZCAwPT09ciYmKHI9ITApLHI/bGUodCstZSx0LG4pOnQtKGUtdCkrbn0ocCxNLHcsUj1qJTI9PTApOihwPWxlKHAsTSx3KSxcIm1pcnJvclwiPT09bSYmSS5mbGlwVGFyZ2V0KCkpLGs9ITEsTyYmTygpKTooby5zdG9wKCksXyYmXygpKSl9KSkpLnN0YXJ0KCkpLHtzdG9wOmZ1bmN0aW9uKCl7bnVsbD09eHx8eCgpLG8uc3RvcCgpfX19ZnVuY3Rpb24gdWUoZSx0KXtyZXR1cm4gdD9lKigxZTMvdCk6MH12YXIgZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIDE4MCplL01hdGguUEl9LGRlPWZ1bmN0aW9uKGUpe3JldHVybiBlfSxwZT1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9ZGUpLGZ1bmN0aW9uKHQsbixyKXt2YXIgbz1uLXIsaT0tKDAtdCsxKSooMC1lKE1hdGguYWJzKG8pKSk7cmV0dXJuIG88PTA/bitpOm4taX19LGhlPXBlKCksZ2U9cGUoTWF0aC5zcXJ0KSx2ZT1mdW5jdGlvbihlKXtyZXR1cm4gZSpNYXRoLlBJLzE4MH0sbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaGFzT3duUHJvcGVydHkoXCJ4XCIpJiZlLmhhc093blByb3BlcnR5KFwieVwiKX0sQ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIG1lKGUpJiZlLmhhc093blByb3BlcnR5KFwielwiKX0seWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTWF0aC5hYnMoZS10KX0sd2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9MiksdD1NYXRoLnBvdygxMCx0KSxNYXRoLnJvdW5kKGUqdCkvdH0sYmU9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHZvaWQgMD09PXImJihyPTApLHdlKGUrbioodC1lKS9NYXRoLm1heChyLG4pKX0seGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMS0zKnQrMyplfSxfZT1mdW5jdGlvbihlLHQpe3JldHVybiAzKnQtNiplfSxPZT1mdW5jdGlvbihlKXtyZXR1cm4gMyplfSxMZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuKCh4ZSh0LG4pKmUrX2UodCxuKSkqZStPZSh0KSkqZX0sRWU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiAzKnhlKHQsbikqZSplKzIqX2UodCxuKSplK09lKHQpfSxTZT0uMTt0LmFuZ2xlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PWopLGZlKE1hdGguYXRhbjIodC55LWUueSx0LngtZS54KSl9LHQuYW5pbWF0ZT1jZSx0LmFudGljaXBhdGU9ZWUsdC5hcHBseU9mZnNldD1mdW5jdGlvbihlLHQpe3ZhciBuPSEwO3JldHVybiB2b2lkIDA9PT10JiYodD1lLG49ITEpLGZ1bmN0aW9uKHIpe3JldHVybiBuP3ItZSt0OihlPXIsbj0hMCx0KX19LHQuYXR0cmFjdD1oZSx0LmF0dHJhY3RFeHBvPWdlLHQuYmFja0luPVgsdC5iYWNrSW5PdXQ9USx0LmJhY2tPdXQ9Six0LmJvdW5jZUluPW5lLHQuYm91bmNlSW5PdXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU8LjU/LjUqKDEtdGUoMS0yKmUpKTouNSp0ZSgyKmUtMSkrLjV9LHQuYm91bmNlT3V0PXRlLHQuY2lyY0luPXEsdC5jaXJjSW5PdXQ9Syx0LmNpcmNPdXQ9WSx0LmNsYW1wPXMsdC5jcmVhdGVBbnRpY2lwYXRlPUYsdC5jcmVhdGVBdHRyYWN0b3I9cGUsdC5jcmVhdGVCYWNrSW49Tix0LmNyZWF0ZUV4cG9Jbj0kLHQuY3ViaWNCZXppZXI9ZnVuY3Rpb24oZSx0LG4scil7aWYoZT09PXQmJm49PT1yKXJldHVybiBVO2Zvcih2YXIgbz1uZXcgRmxvYXQzMkFycmF5KDExKSxpPTA7aTwxMTsrK2kpb1tpXT1MZShpKlNlLGUsbik7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiAwPT09aXx8MT09PWk/aTpMZShmdW5jdGlvbih0KXtmb3IodmFyIHI9MCxpPTE7MTAhPT1pJiZvW2ldPD10OysraSlyKz1TZTstLWk7dmFyIGE9cisodC1vW2ldKS8ob1tpKzFdLW9baV0pKlNlLGw9RWUoYSxlLG4pO3JldHVybiBsPj0uMDAxP2Z1bmN0aW9uKGUsdCxuLHIpe2Zvcih2YXIgbz0wO288ODsrK28pe3ZhciBpPUVlKHQsbixyKTtpZigwPT09aSlyZXR1cm4gdDt0LT0oTGUodCxuLHIpLWUpL2l9cmV0dXJuIHR9KHQsYSxlLG4pOjA9PT1sP2E6ZnVuY3Rpb24oZSx0LG4scixvKXt2YXIgaSxhLGw9MDtkb3soaT1MZShhPXQrKG4tdCkvMixyLG8pLWUpPjA/bj1hOnQ9YX13aGlsZShNYXRoLmFicyhpKT4xZS03JiYrK2w8MTApO3JldHVybiBhfSh0LHIscitTZSxlLG4pfShpKSx0LHIpfX0sdC5kZWNheT1pZSx0LmRlZ3JlZXNUb1JhZGlhbnM9dmUsdC5kaXN0YW5jZT1mdW5jdGlvbihlLHQpe2lmKE0oZSkmJk0odCkpcmV0dXJuIHllKGUsdCk7aWYobWUoZSkmJm1lKHQpKXt2YXIgbj15ZShlLngsdC54KSxyPXllKGUueSx0LnkpLG89Q2UoZSkmJkNlKHQpP3llKGUueix0LnopOjA7cmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyhuLDIpK01hdGgucG93KHIsMikrTWF0aC5wb3cobywyKSl9fSx0LmVhc2VJbj1XLHQuZWFzZUluT3V0PUcsdC5lYXNlT3V0PXosdC5pbmVydGlhPWZ1bmN0aW9uKGUpe3ZhciB0LG49ZS5mcm9tLG89dm9pZCAwPT09bj8wOm4saT1lLnZlbG9jaXR5LGw9dm9pZCAwPT09aT8wOmkscz1lLm1pbixjPWUubWF4LHU9ZS5wb3dlcixmPXZvaWQgMD09PXU/Ljg6dSxkPWUudGltZUNvbnN0YW50LHA9dm9pZCAwPT09ZD83NTA6ZCxoPWUuYm91bmNlU3RpZmZuZXNzLGc9dm9pZCAwPT09aD81MDA6aCx2PWUuYm91bmNlRGFtcGluZyxtPXZvaWQgMD09PXY/MTA6dixDPWUucmVzdERlbHRhLHk9dm9pZCAwPT09Qz8xOkMsdz1lLm1vZGlmeVRhcmdldCxiPWUuZHJpdmVyLHg9ZS5vblVwZGF0ZSxfPWUub25Db21wbGV0ZTtmdW5jdGlvbiBPKGUpe3JldHVybiB2b2lkIDAhPT1zJiZlPHN8fHZvaWQgMCE9PWMmJmU+Y31mdW5jdGlvbiBMKGUpe3JldHVybiB2b2lkIDA9PT1zP2M6dm9pZCAwPT09Y3x8TWF0aC5hYnMocy1lKTxNYXRoLmFicyhjLWUpP3M6Y31mdW5jdGlvbiBFKGUpe251bGw9PXR8fHQuc3RvcCgpLHQ9Y2Uoci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGUpLHtkcml2ZXI6YixvblVwZGF0ZTpmdW5jdGlvbih0KXt2YXIgbjtudWxsPT14fHx4KHQpLG51bGw9PT0obj1lLm9uVXBkYXRlKXx8dm9pZCAwPT09bnx8bi5jYWxsKGUsdCl9LG9uQ29tcGxldGU6X30pKX1mdW5jdGlvbiBTKGUpe0Uoci5fX2Fzc2lnbih7dHlwZTpcInNwcmluZ1wiLHN0aWZmbmVzczpnLGRhbXBpbmc6bSxyZXN0RGVsdGE6eX0sZSkpfWlmKE8obykpUyh7ZnJvbTpvLHZlbG9jaXR5OmwsdG86TChvKX0pO2Vsc2V7dmFyIGo9ZipsK287dm9pZCAwIT09dyYmKGo9dyhqKSk7dmFyIE0sayxSPUwoaiksUD1SPT09cz8tMToxO0Uoe3R5cGU6XCJkZWNheVwiLGZyb206byx2ZWxvY2l0eTpsLHRpbWVDb25zdGFudDpwLHBvd2VyOmYscmVzdERlbHRhOnksbW9kaWZ5VGFyZ2V0Oncsb25VcGRhdGU6TyhqKT9mdW5jdGlvbihlKXtNPWssaz1lLGw9dWUoZS1NLGEuZ2V0RnJhbWVEYXRhKCkuZGVsdGEpLCgxPT09UCYmZT5SfHwtMT09PVAmJmU8UikmJlMoe2Zyb206ZSx0bzpSLHZlbG9jaXR5Omx9KX06dm9pZCAwfSl9cmV0dXJue3N0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09dD92b2lkIDA6dC5zdG9wKCl9fX0sdC5pbnRlcnBvbGF0ZT1WLHQuaXNQb2ludD1tZSx0LmlzUG9pbnQzRD1DZSx0LmtleWZyYW1lcz1vZSx0LmxpbmVhcj1VLHQubWlycm9yRWFzaW5nPVosdC5taXg9eCx0Lm1peENvbG9yPVMsdC5taXhDb21wbGV4PUgsdC5waXBlPVIsdC5wb2ludEZyb21WZWN0b3I9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PXZlKHQpLHt4Om4qTWF0aC5jb3ModCkrZS54LHk6bipNYXRoLnNpbih0KStlLnl9fSx0LnByb2dyZXNzPWIsdC5yYWRpYW5zVG9EZWdyZWVzPWZlLHQucmV2ZXJzZUVhc2luZz1ELHQuc21vb3RoPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPTUwKTt2YXIgdD0wLG49MDtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG89YS5nZXRGcmFtZURhdGEoKS50aW1lc3RhbXAsaT1vIT09bj9vLW46MCxsPWk/YmUodCxyLGksZSk6dDtyZXR1cm4gbj1vLHQ9bCxsfX0sdC5zbW9vdGhGcmFtZT1iZSx0LnNuYXA9ZnVuY3Rpb24oZSl7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpcmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQvZSkqZX07dmFyIHQ9MCxuPWUubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbz1NYXRoLmFicyhlWzBdLXIpO2Zvcih0PTE7dDxuO3QrKyl7dmFyIGk9ZVt0XSxhPU1hdGguYWJzKGktcik7aWYoMD09PWEpcmV0dXJuIGk7aWYoYT5vKXJldHVybiBlW3QtMV07aWYodD09PW4tMSlyZXR1cm4gaTtvPWF9fX0sdC5zcHJpbmc9eSx0LnN0ZXBzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PVwiZW5kXCIpLGZ1bmN0aW9uKG4pe3ZhciByPShuPVwiZW5kXCI9PT10P01hdGgubWluKG4sLjk5OSk6TWF0aC5tYXgobiwuMDAxKSkqZSxvPVwiZW5kXCI9PT10P01hdGguZmxvb3Iocik6TWF0aC5jZWlsKHIpO3JldHVybiBzKDAsMSxvL2UpfX0sdC50b0RlY2ltYWw9d2UsdC52ZWxvY2l0eVBlckZyYW1lPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUvKDFlMy90KX0sdC52ZWxvY2l0eVBlclNlY29uZD11ZSx0LndyYXA9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQtZTtyZXR1cm4oKG4tZSklcityKSVyK2V9fSwyNzAzOihlLHQsbik9Pnt2YXIgcj1uKDQxNCk7ZnVuY3Rpb24gbygpe31mdW5jdGlvbiBpKCl7fWkucmVzZXRXYXJuaW5nQ2FjaGU9byxlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLG8saSxhKXtpZihhIT09cil7dmFyIGw9bmV3IEVycm9yKFwiQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gVXNlIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpIHRvIGNhbGwgdGhlbS4gUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlc1wiKTt0aHJvdyBsLm5hbWU9XCJJbnZhcmlhbnQgVmlvbGF0aW9uXCIsbH19ZnVuY3Rpb24gdCgpe3JldHVybiBlfWUuaXNSZXF1aXJlZD1lO3ZhciBuPXthcnJheTplLGJpZ2ludDplLGJvb2w6ZSxmdW5jOmUsbnVtYmVyOmUsb2JqZWN0OmUsc3RyaW5nOmUsc3ltYm9sOmUsYW55OmUsYXJyYXlPZjp0LGVsZW1lbnQ6ZSxlbGVtZW50VHlwZTplLGluc3RhbmNlT2Y6dCxub2RlOmUsb2JqZWN0T2Y6dCxvbmVPZjp0LG9uZU9mVHlwZTp0LHNoYXBlOnQsZXhhY3Q6dCxjaGVja1Byb3BUeXBlczppLHJlc2V0V2FybmluZ0NhY2hlOm99O3JldHVybiBuLlByb3BUeXBlcz1uLG59fSw1Njk3OihlLHQsbik9PntlLmV4cG9ydHM9bigyNzAzKSgpfSw0MTQ6ZT0+e2UuZXhwb3J0cz1cIlNFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEXCJ9LDcyOTI6KGUsdCxuKT0+e24ucih0KSxuLmQodCx7Q2FsZW5kYXI6KCk9PkpuLENlbnR1cnlWaWV3OigpPT5rdCxEZWNhZGVWaWV3OigpPT5OdCxNb250aFZpZXc6KCk9PlNuLE5hdmlnYXRpb246KCk9Pk5lLFllYXJWaWV3OigpPT50bixkZWZhdWx0OigpPT50cn0pO3ZhciByPW4oNjY4OSksbz1uLm4ociksaT1uKDU2OTcpLGE9bi5uKGkpO2Z1bmN0aW9uIGwoZSl7dmFyIHQsbixyPVwiXCI7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGV8fFwibnVtYmVyXCI9PXR5cGVvZiBlKXIrPWU7ZWxzZSBpZihcIm9iamVjdFwiPT10eXBlb2YgZSlpZihBcnJheS5pc0FycmF5KGUpKWZvcih0PTA7dDxlLmxlbmd0aDt0KyspZVt0XSYmKG49bChlW3RdKSkmJihyJiYocis9XCIgXCIpLHIrPW4pO2Vsc2UgZm9yKHQgaW4gZSllW3RdJiYociYmKHIrPVwiIFwiKSxyKz10KTtyZXR1cm4gcn1jb25zdCBzPWZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQsbj0wLHI9XCJcIjtuPGFyZ3VtZW50cy5sZW5ndGg7KShlPWFyZ3VtZW50c1tuKytdKSYmKHQ9bChlKSkmJihyJiYocis9XCIgXCIpLHIrPXQpO3JldHVybiByfTt2YXIgYz1uKDc3MyksdT1uLm4oYyk7ZnVuY3Rpb24gZihlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSl9dmFyIGQ9dSgpKChmdW5jdGlvbihlKXt2YXIgdCxuPXZvaWQgMD09PWU/e306ZSxyPW4udXNlRmFsbGJhY2tMb2NhbGUsbz12b2lkIDA9PT1yfHxyLGk9bi5mYWxsYmFja0xvY2FsZSxhPXZvaWQgMD09PWk/XCJlbi1VU1wiOmksbD1bXTtpZihcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93KXt2YXIgcz13aW5kb3cubmF2aWdhdG9yO2w9bC5jb25jYXQocy5sYW5ndWFnZXMscy5sYW5ndWFnZSxzLnVzZXJMYW5ndWFnZSxzLmJyb3dzZXJMYW5ndWFnZSxzLnN5c3RlbUxhbmd1YWdlKX1yZXR1cm4gbyYmbC5wdXNoKGEpLGZ1bmN0aW9uKGUpe3JldHVybiBlLm1hcCgoZnVuY3Rpb24oZSl7aWYoIWV8fC0xPT09ZS5pbmRleE9mKFwiLVwiKXx8ZS50b0xvd2VyQ2FzZSgpIT09ZSlyZXR1cm4gZTt2YXIgdD1lLnNwbGl0KFwiLVwiKTtyZXR1cm4gdFswXStcIi1cIit0WzFdLnRvVXBwZXJDYXNlKCl9KSl9KCh0PWwpLmZpbHRlcigoZnVuY3Rpb24oZSxuKXtyZXR1cm4gZSYmdC5pbmRleE9mKGUpPT09bn0pKSl9KSxmKSxwPXUoKSgoZnVuY3Rpb24oZSl7cmV0dXJuIGQoZSlbMF18fG51bGx9KSxmKTtjb25zdCBoPXA7ZnVuY3Rpb24gZyhlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKHIsbyl7dm9pZCAwPT09byYmKG89bik7dmFyIGk9ZShyKStvO3JldHVybiB0KGkpfX1mdW5jdGlvbiB2KGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbmV3IERhdGUoZSh0KS5nZXRUaW1lKCktMSl9fWZ1bmN0aW9uIG0oZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuW2UobiksdChuKV19fWZ1bmN0aW9uIEMoZSl7aWYoZSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIGUuZ2V0RnVsbFllYXIoKTtpZihcIm51bWJlclwiPT10eXBlb2YgZSlyZXR1cm4gZTt2YXIgdD1wYXJzZUludChlLDEwKTtpZihcInN0cmluZ1wiPT10eXBlb2YgZSYmIWlzTmFOKHQpKXJldHVybiB0O3Rocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBnZXQgeWVhciBmcm9tIGRhdGU6IFwiLmNvbmNhdChlLFwiLlwiKSl9ZnVuY3Rpb24geShlKXtpZihlIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gZS5nZXRNb250aCgpO3Rocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBnZXQgbW9udGggZnJvbSBkYXRlOiBcIi5jb25jYXQoZSxcIi5cIikpfWZ1bmN0aW9uIHcoZSl7aWYoZSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIGUuZ2V0RGF0ZSgpO3Rocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBnZXQgeWVhciBmcm9tIGRhdGU6IFwiLmNvbmNhdChlLFwiLlwiKSl9ZnVuY3Rpb24gYihlKXt2YXIgdD1DKGUpLG49dCsoMS10KSUxMDAscj1uZXcgRGF0ZTtyZXR1cm4gci5zZXRGdWxsWWVhcihuLDAsMSksci5zZXRIb3VycygwLDAsMCwwKSxyfXZhciB4PWcoQyxiLC0xMDApLF89ZyhDLGIsMTAwKSxPPXYoXyksTD1nKEMsTywtMTAwKSxFPShnKEMsTywxMDApLG0oYixPKSk7ZnVuY3Rpb24gUyhlKXt2YXIgdD1DKGUpLG49dCsoMS10KSUxMCxyPW5ldyBEYXRlO3JldHVybiByLnNldEZ1bGxZZWFyKG4sMCwxKSxyLnNldEhvdXJzKDAsMCwwLDApLHJ9dmFyIGo9ZyhDLFMsLTEwKSxNPWcoQyxTLDEwKSxrPXYoTSksUj1nKEMsaywtMTApLFA9KGcoQyxrLDEwKSxtKFMsaykpO2Z1bmN0aW9uIEkoZSl7dmFyIHQ9QyhlKSxuPW5ldyBEYXRlO3JldHVybiBuLnNldEZ1bGxZZWFyKHQsMCwxKSxuLnNldEhvdXJzKDAsMCwwLDApLG59dmFyIEE9ZyhDLEksLTEpLFQ9ZyhDLEksMSksSD12KFQpLEI9ZyhDLEgsLTEpLFY9KGcoQyxILDEpLG0oSSxIKSk7ZnVuY3Rpb24gRChlLHQpe3JldHVybiBmdW5jdGlvbihuLHIpe3ZvaWQgMD09PXImJihyPXQpO3ZhciBvPUMobiksaT15KG4pK3IsYT1uZXcgRGF0ZTtyZXR1cm4gYS5zZXRGdWxsWWVhcihvLGksMSksYS5zZXRIb3VycygwLDAsMCwwKSxlKGEpfX1mdW5jdGlvbiBaKGUpe3ZhciB0PUMoZSksbj15KGUpLHI9bmV3IERhdGU7cmV0dXJuIHIuc2V0RnVsbFllYXIodCxuLDEpLHIuc2V0SG91cnMoMCwwLDAsMCkscn12YXIgJD1EKFosLTEpLE49RChaLDEpLEY9dihOKSxVPUQoRiwtMSksVz0oRChGLDEpLG0oWixGKSk7ZnVuY3Rpb24geihlLHQpe3JldHVybiBmdW5jdGlvbihuLHIpe3ZvaWQgMD09PXImJihyPXQpO3ZhciBvPUMobiksaT15KG4pLGE9dyhuKStyLGw9bmV3IERhdGU7cmV0dXJuIGwuc2V0RnVsbFllYXIobyxpLGEpLGwuc2V0SG91cnMoMCwwLDAsMCksZShsKX19ZnVuY3Rpb24gRyhlKXt2YXIgdD1DKGUpLG49eShlKSxyPXcoZSksbz1uZXcgRGF0ZTtyZXR1cm4gby5zZXRGdWxsWWVhcih0LG4sciksby5zZXRIb3VycygwLDAsMCwwKSxvfXooRywtMSk7dmFyIHEsWT12KHooRywxKSksSz0oeihZLC0xKSx6KFksMSksbShHLFkpKTtmdW5jdGlvbiBYKGUpe3JldHVybiB3KEYoZSkpfWZ1bmN0aW9uIEooZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIG49MCxyPW5ldyBBcnJheSh0KTtuPHQ7bisrKXJbbl09ZVtuXTtyZXR1cm4gcn1mdW5jdGlvbiBRKGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX12YXIgZWUsdGU9e0FSQUJJQzpcIkFyYWJpY1wiLEhFQlJFVzpcIkhlYnJld1wiLElTT184NjAxOlwiSVNPIDg2MDFcIixVUzpcIlVTXCJ9LG5lPShRKHE9e30sdGUuVVMsW1wiZW4tQ0FcIixcImVuLVVTXCIsXCJlcy1BUlwiLFwiZXMtQk9cIixcImVzLUNMXCIsXCJlcy1DT1wiLFwiZXMtQ1JcIixcImVzLURPXCIsXCJlcy1FQ1wiLFwiZXMtR1RcIixcImVzLUhOXCIsXCJlcy1NWFwiLFwiZXMtTklcIixcImVzLVBBXCIsXCJlcy1QRVwiLFwiZXMtUFJcIixcImVzLVNWXCIsXCJlcy1WRVwiLFwicHQtQlJcIl0pLFEocSx0ZS5BUkFCSUMsW1wiYXJcIixcImFyLUFFXCIsXCJhci1CSFwiLFwiYXItRFpcIixcImFyLUVHXCIsXCJhci1JUVwiLFwiYXItSk9cIixcImFyLUtXXCIsXCJhci1MWVwiLFwiYXItT01cIixcImFyLVFBXCIsXCJhci1TQVwiLFwiYXItU0RcIixcImFyLVNZXCIsXCJhci1ZRVwiLFwiZHZcIixcImR2LU1WXCIsXCJwc1wiLFwicHMtQVJcIl0pLFEocSx0ZS5IRUJSRVcsW1wiaGVcIixcImhlLUlMXCJdKSxxKSxyZT0oZWU9QXJyYXkoNyksZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gSihlKX0oZWUpfHxmdW5jdGlvbihlKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbXCJAQGl0ZXJhdG9yXCJdKXJldHVybiBBcnJheS5mcm9tKGUpfShlZSl8fGZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIEooZSx0KTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuXCJPYmplY3RcIj09PW4mJmUuY29uc3RydWN0b3ImJihuPWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PW58fFwiU2V0XCI9PT1uP0FycmF5LmZyb20oZSk6XCJBcmd1bWVudHNcIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pP0ooZSx0KTp2b2lkIDB9fShlZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCkpLm1hcCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdH0pKSxvZT1uZXcgTWFwO2Z1bmN0aW9uIGllKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXt2YXIgcj10fHxoKCk7b2UuaGFzKHIpfHxvZS5zZXQocixuZXcgTWFwKTt2YXIgbz1vZS5nZXQocik7cmV0dXJuIG8uaGFzKGUpfHxvLnNldChlLG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHIsZSkuZm9ybWF0KSxvLmdldChlKShuKX19KGUpKHQsZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IERhdGUoZSk7cmV0dXJuIG5ldyBEYXRlKHQuc2V0SG91cnMoMTIpKX0obikpfX1pZSh7ZGF5OlwibnVtZXJpY1wiLG1vbnRoOlwibnVtZXJpY1wiLHllYXI6XCJudW1lcmljXCJ9KTt2YXIgYWU9aWUoe2RheTpcIm51bWVyaWNcIn0pLGxlPWllKHtkYXk6XCJudW1lcmljXCIsbW9udGg6XCJsb25nXCIseWVhcjpcIm51bWVyaWNcIn0pLHNlPWllKHttb250aDpcImxvbmdcIn0pLGNlPWllKHttb250aDpcImxvbmdcIix5ZWFyOlwibnVtZXJpY1wifSksdWU9aWUoe3dlZWtkYXk6XCJzaG9ydFwifSksZmU9aWUoe3dlZWtkYXk6XCJsb25nXCJ9KSxkZT1pZSh7eWVhcjpcIm51bWVyaWNcIn0pLHBlPXJlWzBdLGhlPXJlWzVdLGdlPXJlWzZdO2Z1bmN0aW9uIHZlKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0ZS5JU09fODYwMSxuPWUuZ2V0RGF5KCk7c3dpdGNoKHQpe2Nhc2UgdGUuSVNPXzg2MDE6cmV0dXJuKG4rNiklNztjYXNlIHRlLkFSQUJJQzpyZXR1cm4obisxKSU3O2Nhc2UgdGUuSEVCUkVXOmNhc2UgdGUuVVM6cmV0dXJuIG47ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBjYWxlbmRhciB0eXBlLlwiKX19ZnVuY3Rpb24gbWUoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRlLklTT184NjAxLG49QyhlKSxyPXkoZSksbz1lLmdldERhdGUoKS12ZShlLHQpO3JldHVybiBuZXcgRGF0ZShuLHIsbyl9ZnVuY3Rpb24gQ2UoZSx0KXtzd2l0Y2goZSl7Y2FzZVwiY2VudHVyeVwiOnJldHVybiBiKHQpO2Nhc2VcImRlY2FkZVwiOnJldHVybiBTKHQpO2Nhc2VcInllYXJcIjpyZXR1cm4gSSh0KTtjYXNlXCJtb250aFwiOnJldHVybiBaKHQpO2Nhc2VcImRheVwiOnJldHVybiBHKHQpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByYW5nZVR5cGU6IFwiLmNvbmNhdChlKSl9fWZ1bmN0aW9uIHllKGUsdCl7c3dpdGNoKGUpe2Nhc2VcImNlbnR1cnlcIjpyZXR1cm4gXyh0KTtjYXNlXCJkZWNhZGVcIjpyZXR1cm4gTSh0KTtjYXNlXCJ5ZWFyXCI6cmV0dXJuIFQodCk7Y2FzZVwibW9udGhcIjpyZXR1cm4gTih0KTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmFuZ2VUeXBlOiBcIi5jb25jYXQoZSkpfX12YXIgd2U9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZVwiZGVjYWRlXCI6cmV0dXJuIGoodCwtMTAwKTtjYXNlXCJ5ZWFyXCI6cmV0dXJuIEEodCwtMTApO2Nhc2VcIm1vbnRoXCI6cmV0dXJuICQodCwtMTIpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByYW5nZVR5cGU6IFwiLmNvbmNhdChlKSl9fSxiZT1mdW5jdGlvbihlLHQpe3N3aXRjaChlKXtjYXNlXCJkZWNhZGVcIjpyZXR1cm4gTSh0LDEwMCk7Y2FzZVwieWVhclwiOnJldHVybiBUKHQsMTApO2Nhc2VcIm1vbnRoXCI6cmV0dXJuIE4odCwxMik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHJhbmdlVHlwZTogXCIuY29uY2F0KGUpKX19O2Z1bmN0aW9uIHhlKGUsdCl7c3dpdGNoKGUpe2Nhc2VcImNlbnR1cnlcIjpyZXR1cm4gTyh0KTtjYXNlXCJkZWNhZGVcIjpyZXR1cm4gayh0KTtjYXNlXCJ5ZWFyXCI6cmV0dXJuIEgodCk7Y2FzZVwibW9udGhcIjpyZXR1cm4gRih0KTtjYXNlXCJkYXlcIjpyZXR1cm4gWSh0KTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmFuZ2VUeXBlOiBcIi5jb25jYXQoZSkpfX12YXIgX2U9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZVwiZGVjYWRlXCI6cmV0dXJuIFIodCwtMTAwKTtjYXNlXCJ5ZWFyXCI6cmV0dXJuIEIodCwtMTApO2Nhc2VcIm1vbnRoXCI6cmV0dXJuIFUodCwtMTIpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByYW5nZVR5cGU6IFwiLmNvbmNhdChlKSl9fTtmdW5jdGlvbiBPZShlLHQpe3N3aXRjaChlKXtjYXNlXCJjZW50dXJ5XCI6cmV0dXJuIEUodCk7Y2FzZVwiZGVjYWRlXCI6cmV0dXJuIFAodCk7Y2FzZVwieWVhclwiOnJldHVybiBWKHQpO2Nhc2VcIm1vbnRoXCI6cmV0dXJuIFcodCk7Y2FzZVwiZGF5XCI6cmV0dXJuIEsodCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHJhbmdlVHlwZTogXCIuY29uY2F0KGUpKX19ZnVuY3Rpb24gTGUoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmRlO3JldHVybihhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCkubWFwKChmdW5jdGlvbihuKXtyZXR1cm4gdChlLG4pfSkpLmpvaW4oXCIg4oCTIFwiKX1mdW5jdGlvbiBFZShlLHQsbil7cmV0dXJuIExlKGUsdCxQKG4pKX1mdW5jdGlvbiBTZShlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGUuSVNPXzg2MDEsbj1lLmdldERheSgpO3N3aXRjaCh0KXtjYXNlIHRlLkFSQUJJQzpjYXNlIHRlLkhFQlJFVzpyZXR1cm4gbj09PWhlfHxuPT09Z2U7Y2FzZSB0ZS5JU09fODYwMTpjYXNlIHRlLlVTOnJldHVybiBuPT09Z2V8fG49PT1wZTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIGNhbGVuZGFyIHR5cGUuXCIpfX1mdW5jdGlvbiBqZShlKXtyZXR1cm4gamU9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgZX0samUoZSl9dmFyIE1lPU9iamVjdC52YWx1ZXModGUpLGtlPVtcImNlbnR1cnlcIixcImRlY2FkZVwiLFwieWVhclwiLFwibW9udGhcIl0sUmU9YSgpLm9uZU9mKE1lKSxQZT1hKCkub25lT2ZUeXBlKFthKCkuc3RyaW5nLGEoKS5hcnJheU9mKGEoKS5zdHJpbmcpXSksSWU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWVbdF07aWYoIXIpcmV0dXJuIG51bGw7aWYoIShyIGluc3RhbmNlb2YgRGF0ZSkpcmV0dXJuIG5ldyBFcnJvcihcIkludmFsaWQgcHJvcCBgXCIuY29uY2F0KHQsXCJgIG9mIHR5cGUgYFwiKS5jb25jYXQoamUociksXCJgIHN1cHBsaWVkIHRvIGBcIikuY29uY2F0KG4sXCJgLCBleHBlY3RlZCBpbnN0YW5jZSBvZiBgRGF0ZWAuXCIpKTt2YXIgbz1lLm1heERhdGU7cmV0dXJuIG8mJnI+bz9uZXcgRXJyb3IoXCJJbnZhbGlkIHByb3AgYFwiLmNvbmNhdCh0LFwiYCBvZiB0eXBlIGBcIikuY29uY2F0KGplKHIpLFwiYCBzdXBwbGllZCB0byBgXCIpLmNvbmNhdChuLFwiYCwgbWluRGF0ZSBjYW5ub3QgYmUgbGFyZ2VyIHRoYW4gbWF4RGF0ZS5cIikpOm51bGx9LEFlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lW3RdO2lmKCFyKXJldHVybiBudWxsO2lmKCEociBpbnN0YW5jZW9mIERhdGUpKXJldHVybiBuZXcgRXJyb3IoXCJJbnZhbGlkIHByb3AgYFwiLmNvbmNhdCh0LFwiYCBvZiB0eXBlIGBcIikuY29uY2F0KGplKHIpLFwiYCBzdXBwbGllZCB0byBgXCIpLmNvbmNhdChuLFwiYCwgZXhwZWN0ZWQgaW5zdGFuY2Ugb2YgYERhdGVgLlwiKSk7dmFyIG89ZS5taW5EYXRlO3JldHVybiBvJiZyPG8/bmV3IEVycm9yKFwiSW52YWxpZCBwcm9wIGBcIi5jb25jYXQodCxcImAgb2YgdHlwZSBgXCIpLmNvbmNhdChqZShyKSxcImAgc3VwcGxpZWQgdG8gYFwiKS5jb25jYXQobixcImAsIG1heERhdGUgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiBtaW5EYXRlLlwiKSk6bnVsbH0sVGU9YSgpLm9uZU9mVHlwZShbYSgpLmZ1bmMsYSgpLnNoYXBlKHtjdXJyZW50OmEoKS5hbnl9KV0pLEhlPWEoKS5vbmVPZlR5cGUoW2EoKS5pbnN0YW5jZU9mKERhdGUpLGEoKS5hcnJheU9mKGEoKS5pbnN0YW5jZU9mKERhdGUpKV0pLEJlPWEoKS5hcnJheU9mKGEoKS5vbmVPZihrZSkpLFZlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lW3RdLG89ZS52aWV3c3x8a2U7cmV0dXJuIHZvaWQgMCE9PXImJi0xPT09by5pbmRleE9mKHIpP25ldyBFcnJvcihcIkludmFsaWQgcHJvcCBgXCIuY29uY2F0KHQsXCJgIG9mIHZhbHVlIGBcIikuY29uY2F0KHIsXCJgIHN1cHBsaWVkIHRvIGBcIikuY29uY2F0KG4sXCJgLCBleHBlY3RlZCBvbmUgb2YgW1wiKS5jb25jYXQoby5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybidcIicuY29uY2F0KGUsJ1wiJyl9KSkuam9pbihcIiwgXCIpLFwiXS5cIikpOm51bGx9O1ZlLmlzUmVxdWlyZWQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWVbdF07cmV0dXJuIHI/VmUoZSx0LG4pOm5ldyBFcnJvcihcIlRoZSBwcm9wIGBcIi5jb25jYXQodCxcImAgaXMgbWFya2VkIGFzIHJlcXVpcmVkIGluIGBcIikuY29uY2F0KG4sXCJgLCBidXQgaXRzIHZhbHVlIGlzIGBcIikuY29uY2F0KHIsXCJgLlwiKSl9O3ZhciBEZT17YWN0aXZlU3RhcnREYXRlOmEoKS5pbnN0YW5jZU9mKERhdGUpLmlzUmVxdWlyZWQsaG92ZXI6YSgpLmluc3RhbmNlT2YoRGF0ZSksbG9jYWxlOmEoKS5zdHJpbmcsbWF4RGF0ZTpBZSxtaW5EYXRlOkllLG9uQ2xpY2s6YSgpLmZ1bmMsb25Nb3VzZU92ZXI6YSgpLmZ1bmMsdGlsZUNsYXNzTmFtZTphKCkub25lT2ZUeXBlKFthKCkuZnVuYyxQZV0pLHRpbGVDb250ZW50OmEoKS5vbmVPZlR5cGUoW2EoKS5mdW5jLGEoKS5ub2RlXSksdmFsdWU6SGUsdmFsdWVUeXBlOmEoKS5zdHJpbmd9LFplPXthY3RpdmVTdGFydERhdGU6YSgpLmluc3RhbmNlT2YoRGF0ZSkuaXNSZXF1aXJlZCxjbGFzc2VzOmEoKS5hcnJheU9mKGEoKS5zdHJpbmcpLmlzUmVxdWlyZWQsZGF0ZTphKCkuaW5zdGFuY2VPZihEYXRlKS5pc1JlcXVpcmVkLGxvY2FsZTphKCkuc3RyaW5nLG1heERhdGU6QWUsbWluRGF0ZTpJZSxvbkNsaWNrOmEoKS5mdW5jLG9uTW91c2VPdmVyOmEoKS5mdW5jLHN0eWxlOmEoKS5vYmplY3RPZihhKCkub25lT2ZUeXBlKFthKCkuc3RyaW5nLGEoKS5udW1iZXJdKSksdGlsZUNsYXNzTmFtZTphKCkub25lT2ZUeXBlKFthKCkuZnVuYyxQZV0pLHRpbGVDb250ZW50OmEoKS5vbmVPZlR5cGUoW2EoKS5mdW5jLGEoKS5ub2RlXSksdGlsZURpc2FibGVkOmEoKS5mdW5jfSwkZT1cInJlYWN0LWNhbGVuZGFyX19uYXZpZ2F0aW9uXCI7ZnVuY3Rpb24gTmUoZSl7dmFyIHQsbj1lLmFjdGl2ZVN0YXJ0RGF0ZSxyPWUuZHJpbGxVcCxpPWUuZm9ybWF0TW9udGhZZWFyLGE9dm9pZCAwPT09aT9jZTppLGw9ZS5mb3JtYXRZZWFyLHM9dm9pZCAwPT09bD9kZTpsLGM9ZS5sb2NhbGUsdT1lLm1heERhdGUsZj1lLm1pbkRhdGUsZD1lLm5hdmlnYXRpb25BcmlhTGFiZWwsaD12b2lkIDA9PT1kP1wiXCI6ZCxnPWUubmF2aWdhdGlvbkFyaWFMaXZlLHY9ZS5uYXZpZ2F0aW9uTGFiZWwsbT1lLm5leHQyQXJpYUxhYmVsLEM9dm9pZCAwPT09bT9cIlwiOm0seT1lLm5leHQyTGFiZWwsdz12b2lkIDA9PT15P1wiwrtcIjp5LGI9ZS5uZXh0QXJpYUxhYmVsLF89dm9pZCAwPT09Yj9cIlwiOmIsTz1lLm5leHRMYWJlbCxTPXZvaWQgMD09PU8/XCLigLpcIjpPLE09ZS5wcmV2MkFyaWFMYWJlbCxrPXZvaWQgMD09PU0/XCJcIjpNLFA9ZS5wcmV2MkxhYmVsLEk9dm9pZCAwPT09UD9cIsKrXCI6UCxUPWUucHJldkFyaWFMYWJlbCxIPXZvaWQgMD09PVQ/XCJcIjpULFY9ZS5wcmV2TGFiZWwsRD12b2lkIDA9PT1WP1wi4oC5XCI6VixaPWUuc2V0QWN0aXZlU3RhcnREYXRlLE49ZS5zaG93RG91YmxlVmlldyxGPWUudmlldyxXPWUudmlld3MuaW5kZXhPZihGKT4wLHo9XCJjZW50dXJ5XCIhPT1GLEc9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZVwiY2VudHVyeVwiOnJldHVybiB4KHQpO2Nhc2VcImRlY2FkZVwiOnJldHVybiBqKHQpO2Nhc2VcInllYXJcIjpyZXR1cm4gQSh0KTtjYXNlXCJtb250aFwiOnJldHVybiAkKHQpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByYW5nZVR5cGU6IFwiLmNvbmNhdChlKSl9fShGLG4pLHE9eiYmd2UoRixuKSxZPXllKEYsbiksSz16JiZiZShGLG4pLFg9ZnVuY3Rpb24oKXtpZihHLmdldEZ1bGxZZWFyKCk8MClyZXR1cm4hMDt2YXIgZT1mdW5jdGlvbihlLHQpe3N3aXRjaChlKXtjYXNlXCJjZW50dXJ5XCI6cmV0dXJuIEwodCk7Y2FzZVwiZGVjYWRlXCI6cmV0dXJuIFIodCk7Y2FzZVwieWVhclwiOnJldHVybiBCKHQpO2Nhc2VcIm1vbnRoXCI6cmV0dXJuIFUodCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHJhbmdlVHlwZTogXCIuY29uY2F0KGUpKX19KEYsbik7cmV0dXJuIGYmJmY+PWV9KCksSj16JiZmdW5jdGlvbigpe2lmKHEuZ2V0RnVsbFllYXIoKTwwKXJldHVybiEwO3ZhciBlPV9lKEYsbik7cmV0dXJuIGYmJmY+PWV9KCksUT11JiZ1PFksZWU9eiYmdSYmdTxLO2Z1bmN0aW9uIHRlKGUpe3ZhciB0PWZ1bmN0aW9uKCl7c3dpdGNoKEYpe2Nhc2VcImNlbnR1cnlcIjpyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiBMZShlLHQsRShuKSl9KGMscyxlKTtjYXNlXCJkZWNhZGVcIjpyZXR1cm4gRWUoYyxzLGUpO2Nhc2VcInllYXJcIjpyZXR1cm4gcyhjLGUpO2Nhc2VcIm1vbnRoXCI6cmV0dXJuIGEoYyxlKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgdmlldzogXCIuY29uY2F0KEYsXCIuXCIpKX19KCk7cmV0dXJuIHY/dih7ZGF0ZTplLGxhYmVsOnQsbG9jYWxlOmN8fHAoKSx2aWV3OkZ9KTp0fXJldHVybiBvKCkuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6JGV9LG51bGwhPT1JJiZ6JiZvKCkuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLHtcImFyaWEtbGFiZWxcIjprLGNsYXNzTmFtZTpcIlwiLmNvbmNhdCgkZSxcIl9fYXJyb3cgXCIpLmNvbmNhdCgkZSxcIl9fcHJldjItYnV0dG9uXCIpLGRpc2FibGVkOkosb25DbGljazpmdW5jdGlvbigpe1oocSxcInByZXYyXCIpfSx0eXBlOlwiYnV0dG9uXCJ9LEkpLG51bGwhPT1EJiZvKCkuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLHtcImFyaWEtbGFiZWxcIjpILGNsYXNzTmFtZTpcIlwiLmNvbmNhdCgkZSxcIl9fYXJyb3cgXCIpLmNvbmNhdCgkZSxcIl9fcHJldi1idXR0b25cIiksZGlzYWJsZWQ6WCxvbkNsaWNrOmZ1bmN0aW9uKCl7WihHLFwicHJldlwiKX0sdHlwZTpcImJ1dHRvblwifSxEKSwodD1cIlwiLmNvbmNhdCgkZSxcIl9fbGFiZWxcIiksbygpLmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIix7XCJhcmlhLWxhYmVsXCI6aCxcImFyaWEtbGl2ZVwiOmcsY2xhc3NOYW1lOnQsZGlzYWJsZWQ6IVcsb25DbGljazpyLHN0eWxlOntmbGV4R3JvdzoxfSx0eXBlOlwiYnV0dG9uXCJ9LG8oKS5jcmVhdGVFbGVtZW50KFwic3BhblwiLHtjbGFzc05hbWU6XCJcIi5jb25jYXQodCxcIl9fbGFiZWxUZXh0IFwiKS5jb25jYXQodCxcIl9fbGFiZWxUZXh0LS1mcm9tXCIpfSx0ZShuKSksTiYmbygpLmNyZWF0ZUVsZW1lbnQobygpLkZyYWdtZW50LG51bGwsbygpLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIse2NsYXNzTmFtZTpcIlwiLmNvbmNhdCh0LFwiX19kaXZpZGVyXCIpfSxcIiDigJMgXCIpLG8oKS5jcmVhdGVFbGVtZW50KFwic3BhblwiLHtjbGFzc05hbWU6XCJcIi5jb25jYXQodCxcIl9fbGFiZWxUZXh0IFwiKS5jb25jYXQodCxcIl9fbGFiZWxUZXh0LS10b1wiKX0sdGUoWSkpKSkpLG51bGwhPT1TJiZvKCkuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLHtcImFyaWEtbGFiZWxcIjpfLGNsYXNzTmFtZTpcIlwiLmNvbmNhdCgkZSxcIl9fYXJyb3cgXCIpLmNvbmNhdCgkZSxcIl9fbmV4dC1idXR0b25cIiksZGlzYWJsZWQ6USxvbkNsaWNrOmZ1bmN0aW9uKCl7WihZLFwibmV4dFwiKX0sdHlwZTpcImJ1dHRvblwifSxTKSxudWxsIT09dyYmeiYmbygpLmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIix7XCJhcmlhLWxhYmVsXCI6QyxjbGFzc05hbWU6XCJcIi5jb25jYXQoJGUsXCJfX2Fycm93IFwiKS5jb25jYXQoJGUsXCJfX25leHQyLWJ1dHRvblwiKSxkaXNhYmxlZDplZSxvbkNsaWNrOmZ1bmN0aW9uKCl7WihLLFwibmV4dDJcIil9LHR5cGU6XCJidXR0b25cIn0sdykpfU5lLnByb3BUeXBlcz17YWN0aXZlU3RhcnREYXRlOmEoKS5pbnN0YW5jZU9mKERhdGUpLmlzUmVxdWlyZWQsZHJpbGxVcDphKCkuZnVuYy5pc1JlcXVpcmVkLGZvcm1hdE1vbnRoWWVhcjphKCkuZnVuYyxmb3JtYXRZZWFyOmEoKS5mdW5jLGxvY2FsZTphKCkuc3RyaW5nLG1heERhdGU6YSgpLmluc3RhbmNlT2YoRGF0ZSksbWluRGF0ZTphKCkuaW5zdGFuY2VPZihEYXRlKSxuYXZpZ2F0aW9uQXJpYUxhYmVsOmEoKS5zdHJpbmcsbmF2aWdhdGlvbkFyaWFMaXZlOmEoKS5zdHJpbmcsbmF2aWdhdGlvbkxhYmVsOmEoKS5mdW5jLG5leHQyQXJpYUxhYmVsOmEoKS5zdHJpbmcsbmV4dDJMYWJlbDphKCkubm9kZSxuZXh0QXJpYUxhYmVsOmEoKS5zdHJpbmcsbmV4dExhYmVsOmEoKS5ub2RlLHByZXYyQXJpYUxhYmVsOmEoKS5zdHJpbmcscHJldjJMYWJlbDphKCkubm9kZSxwcmV2QXJpYUxhYmVsOmEoKS5zdHJpbmcscHJldkxhYmVsOmEoKS5ub2RlLHNldEFjdGl2ZVN0YXJ0RGF0ZTphKCkuZnVuYy5pc1JlcXVpcmVkLHNob3dEb3VibGVWaWV3OmEoKS5ib29sLHZpZXc6VmUuaXNSZXF1aXJlZCx2aWV3czpCZS5pc1JlcXVpcmVkfTt2YXIgRmU9W1wiY2hpbGRyZW5cIixcImNsYXNzTmFtZVwiLFwiZGlyZWN0aW9uXCIsXCJjb3VudFwiLFwib2Zmc2V0XCIsXCJzdHlsZVwiLFwid3JhcFwiXTtmdW5jdGlvbiBVZSgpe3JldHVybiBVZT1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LFVlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBXZShlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gemUoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fTt0JTI/V2UoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXtHZShlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6V2UoT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSl9cmV0dXJuIGV9ZnVuY3Rpb24gR2UoZSx0LG4pe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIHFlKGUpe3JldHVyblwiXCIuY29uY2F0KGUsXCIlXCIpfWZ1bmN0aW9uIFllKGUpe3ZhciB0PWUuY2hpbGRyZW4sbj1lLmNsYXNzTmFtZSxyPWUuZGlyZWN0aW9uLGk9ZS5jb3VudCxhPWUub2Zmc2V0LGw9ZS5zdHlsZSxzPWUud3JhcCxjPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz17fSxpPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspbj1pW3JdLHQuaW5kZXhPZihuKT49MHx8KG9bbl09ZVtuXSk7cmV0dXJuIG99KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKW49aVtyXSx0LmluZGV4T2Yobik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYob1tuXT1lW25dKX1yZXR1cm4gb30oZSxGZSk7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsVWUoe2NsYXNzTmFtZTpuLHN0eWxlOnplKHtkaXNwbGF5OlwiZmxleFwiLGZsZXhEaXJlY3Rpb246cixmbGV4V3JhcDpzP1wid3JhcFwiOlwibm8td3JhcFwifSxsKX0sYyksbygpLkNoaWxkcmVuLm1hcCh0LChmdW5jdGlvbihlLHQpe3JldHVybiBvKCkuY2xvbmVFbGVtZW50KGUsemUoemUoe30sZS5wcm9wcykse30se3N0eWxlOntmbGV4QmFzaXM6cWUoMTAwL2kpLGZsZXhTaHJpbms6MCxmbGV4R3JvdzowLG92ZXJmbG93OlwiaGlkZGVuXCIsbWFyZ2luTGVmdDphJiYwPT09dD9xZSgxMDAqYS9pKTpudWxsfX0pKX0pKSl9ZnVuY3Rpb24gS2UoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIFhlKGUpfShlKXx8ZnVuY3Rpb24oZSl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lW1wiQEBpdGVyYXRvclwiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oZSl8fGZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIFhlKGUsdCk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVyblwiT2JqZWN0XCI9PT1uJiZlLmNvbnN0cnVjdG9yJiYobj1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT1ufHxcIlNldFwiPT09bj9BcnJheS5mcm9tKGUpOlwiQXJndW1lbnRzXCI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT9YZShlLHQpOnZvaWQgMH19KGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfWZ1bmN0aW9uIFhlKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciBuPTAscj1uZXcgQXJyYXkodCk7bjx0O24rKylyW25dPWVbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gSmUoZSx0KXtyZXR1cm4gdFswXTw9ZSYmdFsxXT49ZX1mdW5jdGlvbiBRZShlLHQpe3JldHVybiBKZShlWzBdLHQpfHxKZShlWzFdLHQpfWZ1bmN0aW9uIGV0KGUsdCxuKXt2YXIgcj1bXTtpZihRZSh0LGUpKXtyLnB1c2gobik7dmFyIG89SmUoZVswXSx0KSxpPUplKGVbMV0sdCk7byYmci5wdXNoKFwiXCIuY29uY2F0KG4sXCJTdGFydFwiKSksaSYmci5wdXNoKFwiXCIuY29uY2F0KG4sXCJFbmRcIikpLG8mJmkmJnIucHVzaChcIlwiLmNvbmNhdChuLFwiQm90aEVuZHNcIikpfXJldHVybiByfWZ1bmN0aW9uIHR0KCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9ZS52YWx1ZSxuPWUudmFsdWVUeXBlLHI9ZS5kYXRlLG89ZS5kYXRlVHlwZSxpPWUuaG92ZXIsYT1cInJlYWN0LWNhbGVuZGFyX190aWxlXCIsbD1bYV07aWYoIXIpcmV0dXJuIGw7aWYoIUFycmF5LmlzQXJyYXkocikmJiFvKXRocm93IG5ldyBFcnJvcihcImdldFRpbGVDbGFzc2VzKCk6IFVuYWJsZSB0byBnZXQgdGlsZSBhY3Rpdml0eSBjbGFzc2VzIGJlY2F1c2Ugb25lIG9yIG1vcmUgcmVxdWlyZWQgYXJndW1lbnRzIHdlcmUgbm90IHBhc3NlZC5cIik7dmFyIHM9bmV3IERhdGUsYz1BcnJheS5pc0FycmF5KHIpP3I6T2UobyxyKTtpZihKZShzLGMpJiZsLnB1c2goXCJcIi5jb25jYXQoYSxcIi0tbm93XCIpKSwhdClyZXR1cm4gbDtpZighQXJyYXkuaXNBcnJheSh0KSYmIW4pdGhyb3cgbmV3IEVycm9yKFwiZ2V0VGlsZUNsYXNzZXMoKTogVW5hYmxlIHRvIGdldCB0aWxlIGFjdGl2aXR5IGNsYXNzZXMgYmVjYXVzZSBvbmUgb3IgbW9yZSByZXF1aXJlZCBhcmd1bWVudHMgd2VyZSBub3QgcGFzc2VkLlwiKTt2YXIgdSxmLGQ9QXJyYXkuaXNBcnJheSh0KT90Ok9lKG4sdCk7Zj1jLCh1PWQpWzBdPD1mWzBdJiZ1WzFdPj1mWzFdP2wucHVzaChcIlwiLmNvbmNhdChhLFwiLS1hY3RpdmVcIikpOlFlKGQsYykmJmwucHVzaChcIlwiLmNvbmNhdChhLFwiLS1oYXNBY3RpdmVcIikpO3ZhciBwPWV0KGQsYyxcIlwiLmNvbmNhdChhLFwiLS1yYW5nZVwiKSk7bC5wdXNoLmFwcGx5KGwsS2UocCkpO3ZhciBoPVtdLmNvbmNhdCh0KTtpZihpJiYxPT09aC5sZW5ndGgpe3ZhciBnPWV0KGk+ZFswXT9bZFswXSxpXTpbaSxkWzBdXSxjLFwiXCIuY29uY2F0KGEsXCItLWhvdmVyXCIpKTtsLnB1c2guYXBwbHkobCxLZShnKSl9cmV0dXJuIGx9WWUucHJvcFR5cGVzPXtjaGlsZHJlbjphKCkubm9kZSxjbGFzc05hbWU6YSgpLnN0cmluZyxjb3VudDphKCkubnVtYmVyLmlzUmVxdWlyZWQsZGlyZWN0aW9uOmEoKS5zdHJpbmcsb2Zmc2V0OmEoKS5udW1iZXIsc3R5bGU6YSgpLm9iamVjdE9mKGEoKS5vbmVPZlR5cGUoW2EoKS5zdHJpbmcsYSgpLm51bWJlcl0pKSx3cmFwOmEoKS5ib29sfTt2YXIgbnQ9W1wiY2xhc3NOYW1lXCIsXCJjb3VudFwiLFwiZGF0ZVRyYW5zZm9ybVwiLFwiZGF0ZVR5cGVcIixcImVuZFwiLFwiaG92ZXJcIixcIm9mZnNldFwiLFwic3RhcnRcIixcInN0ZXBcIixcInRpbGVcIixcInZhbHVlXCIsXCJ2YWx1ZVR5cGVcIl07ZnVuY3Rpb24gcnQoZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIG90KGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP3J0KE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7aXQoZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOnJ0KE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfWZ1bmN0aW9uIGl0KGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBhdCgpe3JldHVybiBhdD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LGF0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBsdChlKXtmb3IodmFyIHQ9ZS5jbGFzc05hbWUsbj1lLmNvdW50LHI9dm9pZCAwPT09bj8zOm4saT1lLmRhdGVUcmFuc2Zvcm0sYT1lLmRhdGVUeXBlLGw9ZS5lbmQscz1lLmhvdmVyLGM9ZS5vZmZzZXQsdT1lLnN0YXJ0LGY9ZS5zdGVwLGQ9dm9pZCAwPT09Zj8xOmYscD1lLnRpbGUsaD1lLnZhbHVlLGc9ZS52YWx1ZVR5cGUsdj1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89e30saT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKW49aVtyXSx0LmluZGV4T2Yobik+PTB8fChvW25dPWVbbl0pO3JldHVybiBvfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKyluPWlbcl0sdC5pbmRleE9mKG4pPj0wfHxPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxuKSYmKG9bbl09ZVtuXSl9cmV0dXJuIG99KGUsbnQpLG09W10sQz11O0M8PWw7Qys9ZCl7dmFyIHk9aShDKTttLnB1c2gobygpLmNyZWF0ZUVsZW1lbnQocCxhdCh7a2V5OnkuZ2V0VGltZSgpLGNsYXNzZXM6dHQoe3ZhbHVlOmgsdmFsdWVUeXBlOmcsZGF0ZTp5LGRhdGVUeXBlOmEsaG92ZXI6c30pLGRhdGU6eSxwb2ludDpDfSx2KSkpfXJldHVybiBvKCkuY3JlYXRlRWxlbWVudChZZSx7Y2xhc3NOYW1lOnQsY291bnQ6cixvZmZzZXQ6Yyx3cmFwOiEwfSxtKX1mdW5jdGlvbiBzdChlKXtyZXR1cm4gc3Q9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgZX0sc3QoZSl9ZnVuY3Rpb24gY3QoZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIHV0KGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP2N0KE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7Z3QoZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOmN0KE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfWZ1bmN0aW9uIGZ0KGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1mdW5jdGlvbiBkdChlLHQpe3JldHVybiBkdD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGR0KGUsdCl9ZnVuY3Rpb24gcHQoZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIGV9ZnVuY3Rpb24gaHQoZSl7cmV0dXJuIGh0PU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxodChlKX1mdW5jdGlvbiBndChlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gdnQoZSx0KXtyZXR1cm4gZSYmIXR8fCFlJiZ0fHxlJiZ0JiZlLmdldFRpbWUoKSE9PXQuZ2V0VGltZSgpfWZ1bmN0aW9uIG10KGUsdCl7dmFyIG49ZS5hY3RpdmVTdGFydERhdGUscj1lLmRhdGUsbz1lLnZpZXc7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdD90KHthY3RpdmVTdGFydERhdGU6bixkYXRlOnIsdmlldzpvfSk6dH1sdC5wcm9wVHlwZXM9b3Qob3Qoe30sRGUpLHt9LHthY3RpdmVTdGFydERhdGU6YSgpLmluc3RhbmNlT2YoRGF0ZSksY291bnQ6YSgpLm51bWJlcixkYXRlVHJhbnNmb3JtOmEoKS5mdW5jLmlzUmVxdWlyZWQsZGF0ZVR5cGU6YSgpLnN0cmluZyxvZmZzZXQ6YSgpLm51bWJlcixzdGVwOmEoKS5udW1iZXIsdGlsZTphKCkuZnVuYy5pc1JlcXVpcmVkfSk7dmFyIEN0PWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJwcm90b3R5cGVcIix7d3JpdGFibGU6ITF9KSx0JiZkdChlLHQpfShjLGUpO3ZhciB0LG4scixpLGEsbD0oaT1jLGE9ZnVuY3Rpb24oKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLHQ9aHQoaSk7aWYoYSl7dmFyIG49aHQodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxuKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKFwib2JqZWN0XCI9PT1zdCh0KXx8XCJmdW5jdGlvblwiPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7cmV0dXJuIHB0KGUpfSh0aGlzLGUpfSk7ZnVuY3Rpb24gYygpe3ZhciBlOyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9KHRoaXMsYyk7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspbltyXT1hcmd1bWVudHNbcl07cmV0dXJuIGd0KHB0KGU9bC5jYWxsLmFwcGx5KGwsW3RoaXNdLmNvbmNhdChuKSkpLFwic3RhdGVcIix7fSksZX1yZXR1cm4gdD1jLHI9W3trZXk6XCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPWUuYWN0aXZlU3RhcnREYXRlLHI9ZS50aWxlQ2xhc3NOYW1lLG89ZS50aWxlQ29udGVudCxpPXt9O3JldHVybihyIT09dC50aWxlQ2xhc3NOYW1lUHJvcHN8fHZ0KG4sdC5hY3RpdmVTdGFydERhdGVQcm9wcykpJiYoaS50aWxlQ2xhc3NOYW1lPW10KGUsciksaS50aWxlQ2xhc3NOYW1lUHJvcHM9ciksKG8hPT10LnRpbGVDb250ZW50UHJvcHN8fHZ0KG4sdC5hY3RpdmVTdGFydERhdGVQcm9wcykpJiYoaS50aWxlQ29udGVudD1tdChlLG8pLGkudGlsZUNvbnRlbnRQcm9wcz1vKSxpLmFjdGl2ZVN0YXJ0RGF0ZVByb3BzPW4saX19XSwobj1be2tleTpcInJlbmRlclwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuYWN0aXZlU3RhcnREYXRlLG49ZS5jaGlsZHJlbixyPWUuY2xhc3NlcyxpPWUuZGF0ZSxhPWUuZm9ybWF0QWJicixsPWUubG9jYWxlLGM9ZS5tYXhEYXRlLHU9ZS5tYXhEYXRlVHJhbnNmb3JtLGY9ZS5taW5EYXRlLGQ9ZS5taW5EYXRlVHJhbnNmb3JtLHA9ZS5vbkNsaWNrLGg9ZS5vbk1vdXNlT3ZlcixnPWUuc3R5bGUsdj1lLnRpbGVEaXNhYmxlZCxtPWUudmlldyxDPXRoaXMuc3RhdGUseT1DLnRpbGVDbGFzc05hbWUsdz1DLnRpbGVDb250ZW50O3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLHtjbGFzc05hbWU6cyhyLHkpLGRpc2FibGVkOmYmJmQoZik+aXx8YyYmdShjKTxpfHx2JiZ2KHthY3RpdmVTdGFydERhdGU6dCxkYXRlOmksdmlldzptfSksb25DbGljazpwJiZmdW5jdGlvbihlKXtyZXR1cm4gcChpLGUpfSxvbkZvY3VzOmgmJmZ1bmN0aW9uKCl7cmV0dXJuIGgoaSl9LG9uTW91c2VPdmVyOmgmJmZ1bmN0aW9uKCl7cmV0dXJuIGgoaSl9LHN0eWxlOmcsdHlwZTpcImJ1dHRvblwifSxhP28oKS5jcmVhdGVFbGVtZW50KFwiYWJiclwiLHtcImFyaWEtbGFiZWxcIjphKGwsaSl9LG4pOm4sdyl9fV0pJiZmdCh0LnByb3RvdHlwZSxuKSxyJiZmdCh0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwicHJvdG90eXBlXCIse3dyaXRhYmxlOiExfSksY30oci5Db21wb25lbnQpO0N0LnByb3BUeXBlcz11dCh1dCh7fSxaZSkse30se2NoaWxkcmVuOmEoKS5ub2RlLmlzUmVxdWlyZWQsZm9ybWF0QWJicjphKCkuZnVuYyxtYXhEYXRlVHJhbnNmb3JtOmEoKS5mdW5jLmlzUmVxdWlyZWQsbWluRGF0ZVRyYW5zZm9ybTphKCkuZnVuYy5pc1JlcXVpcmVkfSk7dmFyIHl0PVtcImNsYXNzZXNcIixcImZvcm1hdFllYXJcIl07ZnVuY3Rpb24gd3QoZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIGJ0KGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP3d0KE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7eHQoZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOnd0KE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfWZ1bmN0aW9uIHh0KGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBfdCgpe3JldHVybiBfdD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LF90LmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgT3Q9XCJyZWFjdC1jYWxlbmRhcl9fY2VudHVyeS12aWV3X19kZWNhZGVzX19kZWNhZGVcIjtmdW5jdGlvbiBMdChlKXt2YXIgdD1lLmNsYXNzZXMsbj1lLmZvcm1hdFllYXIscj12b2lkIDA9PT1uP2RlOm4saT1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89e30saT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKW49aVtyXSx0LmluZGV4T2Yobik+PTB8fChvW25dPWVbbl0pO3JldHVybiBvfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKyluPWlbcl0sdC5pbmRleE9mKG4pPj0wfHxPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxuKSYmKG9bbl09ZVtuXSl9cmV0dXJuIG99KGUseXQpLGE9aS5kYXRlLGw9aS5sb2NhbGU7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KEN0LF90KHt9LGkse2NsYXNzZXM6W10uY29uY2F0KHQsT3QpLG1heERhdGVUcmFuc2Zvcm06ayxtaW5EYXRlVHJhbnNmb3JtOlMsdmlldzpcImNlbnR1cnlcIn0pLEVlKGwscixhKSl9ZnVuY3Rpb24gRXQoZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIFN0KGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBqdCgpe3JldHVybiBqdD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LGp0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBNdChlKXt2YXIgdD1DKGIoZS5hY3RpdmVTdGFydERhdGUpKSxuPXQrOTk7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KGx0LGp0KHt9LGUse2NsYXNzTmFtZTpcInJlYWN0LWNhbGVuZGFyX19jZW50dXJ5LXZpZXdfX2RlY2FkZXNcIixkYXRlVHJhbnNmb3JtOlMsZGF0ZVR5cGU6XCJkZWNhZGVcIixlbmQ6bixzdGFydDp0LHN0ZXA6MTAsdGlsZTpMdH0pKX1mdW5jdGlvbiBrdChlKXtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVhY3QtY2FsZW5kYXJfX2NlbnR1cnktdmlld1wifSxvKCkuY3JlYXRlRWxlbWVudChNdCxlKSl9THQucHJvcFR5cGVzPWJ0KGJ0KHt9LFplKSx7fSx7Zm9ybWF0WWVhcjphKCkuZnVuY30pLE10LnByb3BUeXBlcz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9FdChPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe1N0KGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpFdChPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX0oe30sRGUpO3ZhciBSdD1bXCJjbGFzc2VzXCIsXCJmb3JtYXRZZWFyXCJdO2Z1bmN0aW9uIFB0KGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBJdChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9QdChPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe0F0KGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpQdChPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX1mdW5jdGlvbiBBdChlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gVHQoKXtyZXR1cm4gVHQ9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxUdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIEh0PVwicmVhY3QtY2FsZW5kYXJfX2RlY2FkZS12aWV3X195ZWFyc19feWVhclwiO2Z1bmN0aW9uIEJ0KGUpe3ZhciB0PWUuY2xhc3NlcyxuPWUuZm9ybWF0WWVhcixyPXZvaWQgMD09PW4/ZGU6bixpPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz17fSxpPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspbj1pW3JdLHQuaW5kZXhPZihuKT49MHx8KG9bbl09ZVtuXSk7cmV0dXJuIG99KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKW49aVtyXSx0LmluZGV4T2Yobik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYob1tuXT1lW25dKX1yZXR1cm4gb30oZSxSdCksYT1pLmRhdGUsbD1pLmxvY2FsZTtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQoQ3QsVHQoe30saSx7Y2xhc3NlczpbXS5jb25jYXQodCxIdCksbWF4RGF0ZVRyYW5zZm9ybTpILG1pbkRhdGVUcmFuc2Zvcm06SSx2aWV3OlwiZGVjYWRlXCJ9KSxyKGwsYSkpfWZ1bmN0aW9uIFZ0KGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBEdChlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gWnQoKXtyZXR1cm4gWnQ9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxadC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gJHQoZSl7dmFyIHQ9QyhTKGUuYWN0aXZlU3RhcnREYXRlKSksbj10Kzk7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KGx0LFp0KHt9LGUse2NsYXNzTmFtZTpcInJlYWN0LWNhbGVuZGFyX19kZWNhZGUtdmlld19feWVhcnNcIixkYXRlVHJhbnNmb3JtOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBEYXRlO3JldHVybiB0LnNldEZ1bGxZZWFyKGUsMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApLHR9LGRhdGVUeXBlOlwieWVhclwiLGVuZDpuLHN0YXJ0OnQsdGlsZTpCdH0pKX1mdW5jdGlvbiBOdChlKXtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVhY3QtY2FsZW5kYXJfX2RlY2FkZS12aWV3XCJ9LG8oKS5jcmVhdGVFbGVtZW50KCR0LGUpKX1CdC5wcm9wVHlwZXM9SXQoSXQoe30sWmUpLHt9LHtmb3JtYXRZZWFyOmEoKS5mdW5jfSksJHQucHJvcFR5cGVzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP1Z0KE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7RHQoZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOlZ0KE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfSh7fSxEZSk7dmFyIEZ0PVtcImNsYXNzZXNcIixcImZvcm1hdE1vbnRoXCIsXCJmb3JtYXRNb250aFllYXJcIl07ZnVuY3Rpb24gVXQoZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIFd0KGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP1V0KE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7enQoZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOlV0KE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfWZ1bmN0aW9uIHp0KGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBHdCgpe3JldHVybiBHdD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LEd0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgcXQ9XCJyZWFjdC1jYWxlbmRhcl9feWVhci12aWV3X19tb250aHNfX21vbnRoXCI7ZnVuY3Rpb24gWXQoZSl7dmFyIHQ9ZS5jbGFzc2VzLG49ZS5mb3JtYXRNb250aCxyPXZvaWQgMD09PW4/c2U6bixpPWUuZm9ybWF0TW9udGhZZWFyLGE9dm9pZCAwPT09aT9jZTppLGw9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LGk9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKyluPWlbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb30oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgaT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspbj1pW3JdLHQuaW5kZXhPZihuKT49MHx8T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsbikmJihvW25dPWVbbl0pfXJldHVybiBvfShlLEZ0KSxzPWwuZGF0ZSxjPWwubG9jYWxlO3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChDdCxHdCh7fSxsLHtjbGFzc2VzOltdLmNvbmNhdCh0LHF0KSxmb3JtYXRBYmJyOmEsbWF4RGF0ZVRyYW5zZm9ybTpGLG1pbkRhdGVUcmFuc2Zvcm06Wix2aWV3OlwieWVhclwifSkscihjLHMpKX1mdW5jdGlvbiBLdChlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gWHQoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fTt0JTI/S3QoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXtKdChlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6S3QoT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSl9cmV0dXJuIGV9ZnVuY3Rpb24gSnQoZSx0LG4pe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIFF0KCl7cmV0dXJuIFF0PU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sUXQuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGVuKGUpe3ZhciB0PUMoZS5hY3RpdmVTdGFydERhdGUpO3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChsdCxRdCh7fSxlLHtjbGFzc05hbWU6XCJyZWFjdC1jYWxlbmRhcl9feWVhci12aWV3X19tb250aHNcIixkYXRlVHJhbnNmb3JtOmZ1bmN0aW9uKGUpe3ZhciBuPW5ldyBEYXRlO3JldHVybiBuLnNldEZ1bGxZZWFyKHQsZSwxKSxuLnNldEhvdXJzKDAsMCwwLDApLG59LGRhdGVUeXBlOlwibW9udGhcIixlbmQ6MTEsc3RhcnQ6MCx0aWxlOll0fSkpfWZ1bmN0aW9uIHRuKGUpe3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJyZWFjdC1jYWxlbmRhcl9feWVhci12aWV3XCJ9LG8oKS5jcmVhdGVFbGVtZW50KGVuLGUpKX1ZdC5wcm9wVHlwZXM9V3QoV3Qoe30sWmUpLHt9LHtmb3JtYXRNb250aDphKCkuZnVuYyxmb3JtYXRNb250aFllYXI6YSgpLmZ1bmN9KSxlbi5wcm9wVHlwZXM9WHQoWHQoe30sRGUpLHt9LHtsb2NhbGU6YSgpLnN0cmluZ30pO3ZhciBubj1bXCJmb3JtYXREYXlcIixcImZvcm1hdExvbmdEYXRlXCIsXCJjYWxlbmRhclR5cGVcIixcImNsYXNzZXNcIixcImN1cnJlbnRNb250aEluZGV4XCJdO2Z1bmN0aW9uIHJuKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9ybihPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe2FuKGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpybihPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX1mdW5jdGlvbiBhbihlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gbG4oKXtyZXR1cm4gbG49T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxsbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIHNuPVwicmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdfX2RheXNfX2RheVwiO2Z1bmN0aW9uIGNuKGUpe3ZhciB0PWUuZm9ybWF0RGF5LG49dm9pZCAwPT09dD9hZTp0LHI9ZS5mb3JtYXRMb25nRGF0ZSxpPXZvaWQgMD09PXI/bGU6cixhPWUuY2FsZW5kYXJUeXBlLGw9ZS5jbGFzc2VzLHM9ZS5jdXJyZW50TW9udGhJbmRleCxjPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz17fSxpPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspbj1pW3JdLHQuaW5kZXhPZihuKT49MHx8KG9bbl09ZVtuXSk7cmV0dXJuIG99KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKW49aVtyXSx0LmluZGV4T2Yobik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYob1tuXT1lW25dKX1yZXR1cm4gb30oZSxubiksdT1jLmRhdGUsZj1jLmxvY2FsZTtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQoQ3QsbG4oe30sYyx7Y2xhc3NlczpbXS5jb25jYXQobCxzbixTZSh1LGEpP1wiXCIuY29uY2F0KHNuLFwiLS13ZWVrZW5kXCIpOm51bGwsdS5nZXRNb250aCgpIT09cz9cIlwiLmNvbmNhdChzbixcIi0tbmVpZ2hib3JpbmdNb250aFwiKTpudWxsKSxmb3JtYXRBYmJyOmksbWF4RGF0ZVRyYW5zZm9ybTpZLG1pbkRhdGVUcmFuc2Zvcm06Ryx2aWV3OlwibW9udGhcIn0pLG4oZix1KSl9Y24ucHJvcFR5cGVzPW9uKG9uKHt9LFplKSx7fSx7Y3VycmVudE1vbnRoSW5kZXg6YSgpLm51bWJlci5pc1JlcXVpcmVkLGZvcm1hdERheTphKCkuZnVuYyxmb3JtYXRMb25nRGF0ZTphKCkuZnVuY30pO3ZhciB1bj1bXCJzaG93Rml4ZWROdW1iZXJPZldlZWtzXCIsXCJzaG93TmVpZ2hib3JpbmdNb250aFwiXTtmdW5jdGlvbiBmbihlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gZG4oZSx0LG4pe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIHBuKCl7cmV0dXJuIHBuPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0scG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGhuKGUpe3ZhciB0PWUuYWN0aXZlU3RhcnREYXRlLG49ZS5jYWxlbmRhclR5cGUscj1lLnNob3dGaXhlZE51bWJlck9mV2Vla3MsaT1lLnNob3dOZWlnaGJvcmluZ01vbnRoLGE9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LGk9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKyluPWlbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb30oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgaT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspbj1pW3JdLHQuaW5kZXhPZihuKT49MHx8T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsbikmJihvW25dPWVbbl0pfXJldHVybiBvfShlLHVuKSxsPUModCkscz15KHQpLGM9cnx8aSx1PXZlKHQsbiksZj1jPzA6dSxkPTErKGM/LXU6MCkscD1mdW5jdGlvbigpe2lmKHIpcmV0dXJuIGQrNDItMTt2YXIgZT1YKHQpO2lmKGkpe3ZhciBvPW5ldyBEYXRlO3JldHVybiBvLnNldEZ1bGxZZWFyKGwscyxlKSxvLnNldEhvdXJzKDAsMCwwLDApLGUrKDctdmUobyxuKS0xKX1yZXR1cm4gZX0oKTtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQobHQscG4oe30sYSx7Y2xhc3NOYW1lOlwicmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdfX2RheXNcIixjb3VudDo3LGN1cnJlbnRNb250aEluZGV4OnMsZGF0ZVRyYW5zZm9ybTpmdW5jdGlvbihlKXt2YXIgdD1uZXcgRGF0ZTtyZXR1cm4gdC5zZXRGdWxsWWVhcihsLHMsZSksdC5zZXRIb3VycygwLDAsMCwwKSx0fSxkYXRlVHlwZTpcImRheVwiLGVuZDpwLG9mZnNldDpmLHN0YXJ0OmQsdGlsZTpjbn0pKX1obi5wcm9wVHlwZXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fTt0JTI/Zm4oT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXtkbihlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6Zm4oT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSl9cmV0dXJuIGV9KHtjYWxlbmRhclR5cGU6UmUuaXNSZXF1aXJlZCxzaG93Rml4ZWROdW1iZXJPZldlZWtzOmEoKS5ib29sLHNob3dOZWlnaGJvcmluZ01vbnRoOmEoKS5ib29sfSxEZSk7dmFyIGduPVwicmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdfX3dlZWtkYXlzXCIsdm49XCJcIi5jb25jYXQoZ24sXCJfX3dlZWtkYXlcIik7ZnVuY3Rpb24gbW4oZSl7Zm9yKHZhciB0PWUuY2FsZW5kYXJUeXBlLG49ZS5mb3JtYXRTaG9ydFdlZWtkYXkscj12b2lkIDA9PT1uP3VlOm4saT1lLmZvcm1hdFdlZWtkYXksYT12b2lkIDA9PT1pP2ZlOmksbD1lLmxvY2FsZSxjPWUub25Nb3VzZUxlYXZlLHU9WihuZXcgRGF0ZSksZj1DKHUpLGQ9eSh1KSxwPVtdLGg9MTtoPD03O2grPTEpe3ZhciBnPW5ldyBEYXRlKGYsZCxoLXZlKHUsdCkpLHY9YShsLGcpO3AucHVzaChvKCkuY3JlYXRlRWxlbWVudChcImRpdlwiLHtrZXk6aCxjbGFzc05hbWU6cyh2bixTZShnLHQpJiZcIlwiLmNvbmNhdCh2bixcIi0td2Vla2VuZFwiKSl9LG8oKS5jcmVhdGVFbGVtZW50KFwiYWJiclwiLHtcImFyaWEtbGFiZWxcIjp2LHRpdGxlOnZ9LHIobCxnKS5yZXBsYWNlKFwiLlwiLFwiXCIpKSkpfXJldHVybiBvKCkuY3JlYXRlRWxlbWVudChZZSx7Y2xhc3NOYW1lOmduLGNvdW50Ojcsb25Gb2N1czpjLG9uTW91c2VPdmVyOmN9LHApfW1uLnByb3BUeXBlcz17Y2FsZW5kYXJUeXBlOlJlLmlzUmVxdWlyZWQsZm9ybWF0U2hvcnRXZWVrZGF5OmEoKS5mdW5jLGZvcm1hdFdlZWtkYXk6YSgpLmZ1bmMsbG9jYWxlOmEoKS5zdHJpbmcsb25Nb3VzZUxlYXZlOmEoKS5mdW5jfTt2YXIgQ249W1wiZGF0ZVwiLFwib25DbGlja1dlZWtOdW1iZXJcIixcIndlZWtOdW1iZXJcIl07ZnVuY3Rpb24geW4oKXtyZXR1cm4geW49T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSx5bi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gd24oZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIGJuKGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX12YXIgeG49XCJyZWFjdC1jYWxlbmRhcl9fdGlsZVwiO2Z1bmN0aW9uIF9uKGUpe3ZhciB0PWUuZGF0ZSxuPWUub25DbGlja1dlZWtOdW1iZXIscj1lLndlZWtOdW1iZXIsaT1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89e30saT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKW49aVtyXSx0LmluZGV4T2Yobik+PTB8fChvW25dPWVbbl0pO3JldHVybiBvfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKyluPWlbcl0sdC5pbmRleE9mKG4pPj0wfHxPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxuKSYmKG9bbl09ZVtuXSl9cmV0dXJuIG99KGUsQ24pLGE9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fTt0JTI/d24oT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXtibihlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6d24oT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSl9cmV0dXJuIGV9KHtjbGFzc05hbWU6eG59LGkpLGw9bygpLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsbnVsbCxyKTtyZXR1cm4gbj9vKCkuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLHluKHt9LGEse29uQ2xpY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIG4ocix0LGUpfSx0eXBlOlwiYnV0dG9uXCJ9KSxsKTpvKCkuY3JlYXRlRWxlbWVudChcImRpdlwiLGEsbCl9ZnVuY3Rpb24gT24oZSl7dmFyIHQ9ZS5hY3RpdmVTdGFydERhdGUsbj1lLmNhbGVuZGFyVHlwZSxyPWUub25DbGlja1dlZWtOdW1iZXIsaT1lLm9uTW91c2VMZWF2ZSxhPWUuc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrcyxsPWZ1bmN0aW9uKCl7aWYoYSlyZXR1cm4gNjt2YXIgZT1YKHQpLSg3LXZlKHQsbikpO3JldHVybiAxK01hdGguY2VpbChlLzcpfSgpLHM9ZnVuY3Rpb24oKXtmb3IodmFyIGU9Qyh0KSxyPXkodCksbz13KHQpLGk9W10sYT0wO2E8bDthKz0xKWkucHVzaChtZShuZXcgRGF0ZShlLHIsbys3KmEpLG4pKTtyZXR1cm4gaX0oKSxjPXMubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQsbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGUuSVNPXzg2MDEscj1uPT09dGUuVVM/dGUuVVM6dGUuSVNPXzg2MDEsbz1tZShlLG4pLGk9QyhlKSsxO2Rve3Q9bWUobmV3IERhdGUoaSwwLHI9PT10ZS5JU09fODYwMT80OjEpLG4pLGktPTF9d2hpbGUoZTx0KTtyZXR1cm4gTWF0aC5yb3VuZCgoby10KS82MDQ4ZTUpKzF9KGUsbil9KSk7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KFllLHtjbGFzc05hbWU6XCJyZWFjdC1jYWxlbmRhcl9fbW9udGgtdmlld19fd2Vla051bWJlcnNcIixjb3VudDpsLGRpcmVjdGlvbjpcImNvbHVtblwiLG9uRm9jdXM6aSxvbk1vdXNlT3ZlcjppLHN0eWxlOntmbGV4QmFzaXM6XCJjYWxjKDEwMCUgKiAoMSAvIDgpXCIsZmxleFNocmluazowfX0sYy5tYXAoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KF9uLHtrZXk6ZSxkYXRlOnNbdF0sb25DbGlja1dlZWtOdW1iZXI6cix3ZWVrTnVtYmVyOmV9KX0pKSl9X24ucHJvcFR5cGVzPXtkYXRlOmEoKS5pbnN0YW5jZU9mKERhdGUpLmlzUmVxdWlyZWQsb25DbGlja1dlZWtOdW1iZXI6YSgpLmZ1bmMsd2Vla051bWJlcjphKCkubm9kZS5pc1JlcXVpcmVkfSxPbi5wcm9wVHlwZXM9e2FjdGl2ZVN0YXJ0RGF0ZTphKCkuaW5zdGFuY2VPZihEYXRlKS5pc1JlcXVpcmVkLGNhbGVuZGFyVHlwZTpSZS5pc1JlcXVpcmVkLG9uQ2xpY2tXZWVrTnVtYmVyOmEoKS5mdW5jLG9uTW91c2VMZWF2ZTphKCkuZnVuYyxzaG93Rml4ZWROdW1iZXJPZldlZWtzOmEoKS5ib29sfTt2YXIgTG49W1wiY2FsZW5kYXJUeXBlXCIsXCJmb3JtYXRTaG9ydFdlZWtkYXlcIixcImZvcm1hdFdlZWtkYXlcIixcIm9uQ2xpY2tXZWVrTnVtYmVyXCIsXCJzaG93V2Vla051bWJlcnNcIl07ZnVuY3Rpb24gRW4oKXtyZXR1cm4gRW49T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxFbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gU24oZSl7dmFyIHQ9ZS5hY3RpdmVTdGFydERhdGUsbj1lLmxvY2FsZSxyPWUub25Nb3VzZUxlYXZlLGk9ZS5zaG93Rml4ZWROdW1iZXJPZldlZWtzLGE9ZS5jYWxlbmRhclR5cGUsbD12b2lkIDA9PT1hP2Z1bmN0aW9uKGUpe3JldHVybiBPYmplY3Qua2V5cyhuZSkuZmluZCgoZnVuY3Rpb24odCl7cmV0dXJuIG5lW3RdLmluY2x1ZGVzKGUpfSkpfHx0ZS5JU09fODYwMX0obik6YSxjPWUuZm9ybWF0U2hvcnRXZWVrZGF5LHU9ZS5mb3JtYXRXZWVrZGF5LGY9ZS5vbkNsaWNrV2Vla051bWJlcixkPWUuc2hvd1dlZWtOdW1iZXJzLHA9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LGk9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKyluPWlbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb30oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgaT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspbj1pW3JdLHQuaW5kZXhPZihuKT49MHx8T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsbikmJihvW25dPWVbbl0pfXJldHVybiBvfShlLExuKSxoPVwicmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdcIjtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOnMoaCxkP1wiXCIuY29uY2F0KGgsXCItLXdlZWtOdW1iZXJzXCIpOlwiXCIpfSxvKCkuY3JlYXRlRWxlbWVudChcImRpdlwiLHtzdHlsZTp7ZGlzcGxheTpcImZsZXhcIixhbGlnbkl0ZW1zOlwiZmxleC1lbmRcIn19LGQ/bygpLmNyZWF0ZUVsZW1lbnQoT24se2FjdGl2ZVN0YXJ0RGF0ZTp0LGNhbGVuZGFyVHlwZTpsLG9uQ2xpY2tXZWVrTnVtYmVyOmYsb25Nb3VzZUxlYXZlOnIsc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrczppfSk6bnVsbCxvKCkuY3JlYXRlRWxlbWVudChcImRpdlwiLHtzdHlsZTp7ZmxleEdyb3c6MSx3aWR0aDpcIjEwMCVcIn19LG8oKS5jcmVhdGVFbGVtZW50KG1uLHtjYWxlbmRhclR5cGU6bCxmb3JtYXRTaG9ydFdlZWtkYXk6Yyxmb3JtYXRXZWVrZGF5OnUsbG9jYWxlOm4sb25Nb3VzZUxlYXZlOnJ9KSxvKCkuY3JlYXRlRWxlbWVudChobixFbih7Y2FsZW5kYXJUeXBlOmx9LHApKSkpKX1Tbi5wcm9wVHlwZXM9e2FjdGl2ZVN0YXJ0RGF0ZTphKCkuaW5zdGFuY2VPZihEYXRlKS5pc1JlcXVpcmVkLGNhbGVuZGFyVHlwZTpSZSxmb3JtYXRTaG9ydFdlZWtkYXk6YSgpLmZ1bmMsZm9ybWF0V2Vla2RheTphKCkuZnVuYyxsb2NhbGU6YSgpLnN0cmluZyxvbkNsaWNrV2Vla051bWJlcjphKCkuZnVuYyxvbk1vdXNlTGVhdmU6YSgpLmZ1bmMsc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrczphKCkuYm9vbCxzaG93V2Vla051bWJlcnM6YSgpLmJvb2x9O3ZhciBqbj1bXCJhY3RpdmVTdGFydERhdGVcIixcImRlZmF1bHRBY3RpdmVTdGFydERhdGVcIixcImRlZmF1bHRWYWx1ZVwiLFwiZGVmYXVsdFZpZXdcIixcIm1heERldGFpbFwiLFwibWluRGV0YWlsXCIsXCJ2YWx1ZVwiLFwidmlld1wiXTtmdW5jdGlvbiBNbigpe3JldHVybiBNbj1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LE1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBrbihlKXtyZXR1cm4ga249XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgZX0sa24oZSl9ZnVuY3Rpb24gUm4oZSx0KXtyZXR1cm4gUm49T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxSbihlLHQpfWZ1bmN0aW9uIFBuKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiBlfWZ1bmN0aW9uIEluKGUpe3JldHVybiBJbj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sSW4oZSl9ZnVuY3Rpb24gQW4oZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIFRuKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP0FuKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7SG4oZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOkFuKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfWZ1bmN0aW9uIEhuKGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBCbihlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9bmV3IEFycmF5KHQpO248dDtuKyspcltuXT1lW25dO3JldHVybiByfXZhciBWbj1uZXcgRGF0ZTtWbi5zZXRGdWxsWWVhcigxLDAsMSksVm4uc2V0SG91cnMoMCwwLDAsMCk7dmFyIERuPW5ldyBEYXRlKDg2NGUxMyksWm49XCJyZWFjdC1jYWxlbmRhclwiLCRuPVtcImNlbnR1cnlcIixcImRlY2FkZVwiLFwieWVhclwiLFwibW9udGhcIl0sTm49W10uY29uY2F0KGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBCbihlKX0oZSl8fGZ1bmN0aW9uKGUpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVtcIkBAaXRlcmF0b3JcIl0pcmV0dXJuIEFycmF5LmZyb20oZSl9KGUpfHxmdW5jdGlvbihlLHQpe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBCbihlLHQpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm5cIk9iamVjdFwiPT09biYmZS5jb25zdHJ1Y3RvciYmKG49ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09bnx8XCJTZXRcIj09PW4/QXJyYXkuZnJvbShlKTpcIkFyZ3VtZW50c1wiPT09bnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qobik/Qm4oZSx0KTp2b2lkIDB9fShlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX0oJG4uc2xpY2UoMSkpLFtcImRheVwiXSk7ZnVuY3Rpb24gRm4oZSx0KXtyZXR1cm4gJG4uc2xpY2UoJG4uaW5kZXhPZihlKSwkbi5pbmRleE9mKHQpKzEpfWZ1bmN0aW9uIFVuKGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybi0xIT09Rm4odCxuKS5pbmRleE9mKGUpfShlLHQsbik/ZTpufWZ1bmN0aW9uIFduKGUpe3JldHVybiBOblskbi5pbmRleE9mKGUpXX1mdW5jdGlvbiB6bihlLHQpe3ZhciBuPWUudmFsdWUscj1lLm1pbkRhdGUsbz1lLm1heERhdGUsaT1lLm1heERldGFpbCxhPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuIG51bGw7dmFyIG49QXJyYXkuaXNBcnJheShlKSYmMj09PWUubGVuZ3RoP2VbdF06ZTtpZighbilyZXR1cm4gbnVsbDt2YXIgcj1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIERhdGU/ZTpuZXcgRGF0ZShlKX0obik7aWYoaXNOYU4oci5nZXRUaW1lKCkpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgZGF0ZTogXCIuY29uY2F0KGUpKTtyZXR1cm4gcn0obix0KTtpZighYSlyZXR1cm4gbnVsbDt2YXIgbD1XbihpKTtyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0JiZ0PmU/dDpuJiZuPGU/bjplfShbQ2UseGVdW3RdKGwsYSkscixvKX12YXIgR249ZnVuY3Rpb24oZSl7cmV0dXJuIHpuKGUsMCl9LHFuPWZ1bmN0aW9uKGUpe3JldHVybiB6bihlLDEpfSxZbj1mdW5jdGlvbihlKXt2YXIgdD1lLnZhbHVlO3JldHVybiBBcnJheS5pc0FycmF5KHQpP3Q6W0duLHFuXS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0KGUpfSkpfTtmdW5jdGlvbiBLbihlKXt2YXIgdD1lLm1heERhdGUsbj1lLm1heERldGFpbCxyPWUubWluRGF0ZSxvPWUubWluRGV0YWlsLGk9ZS52YWx1ZTtyZXR1cm4gQ2UoVW4oZS52aWV3LG8sbiksR24oe3ZhbHVlOmksbWluRGF0ZTpyLG1heERhdGU6dCxtYXhEZXRhaWw6bn0pfHxuZXcgRGF0ZSl9dmFyIFhuPWZ1bmN0aW9uKGUpe3JldHVybiBlJiYxPT09W10uY29uY2F0KGUpLmxlbmd0aH0sSm49ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcInByb3RvdHlwZVwiLHt3cml0YWJsZTohMX0pLHQmJlJuKGUsdCl9KGwsZSk7dmFyIHQsbixyLGksYT0ocj1sLGk9ZnVuY3Rpb24oKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLHQ9SW4ocik7aWYoaSl7dmFyIG49SW4odGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxuKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKFwib2JqZWN0XCI9PT1rbih0KXx8XCJmdW5jdGlvblwiPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7cmV0dXJuIFBuKGUpfSh0aGlzLGUpfSk7ZnVuY3Rpb24gbCgpe3ZhciBlOyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9KHRoaXMsbCk7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspbltyXT1hcmd1bWVudHNbcl07cmV0dXJuIEhuKFBuKGU9YS5jYWxsLmFwcGx5KGEsW3RoaXNdLmNvbmNhdChuKSkpLFwic3RhdGVcIix7YWN0aXZlU3RhcnREYXRlOmUucHJvcHMuZGVmYXVsdEFjdGl2ZVN0YXJ0RGF0ZSx2YWx1ZTplLnByb3BzLmRlZmF1bHRWYWx1ZSx2aWV3OmUucHJvcHMuZGVmYXVsdFZpZXd9KSxIbihQbihlKSxcInNldFN0YXRlQW5kQ2FsbENhbGxiYWNrc1wiLChmdW5jdGlvbih0LG4scil7dmFyIG89UG4oZSksaT1vLmFjdGl2ZVN0YXJ0RGF0ZSxhPW8udmlldyxsPWUucHJvcHMscz1sLmFsbG93UGFydGlhbFJhbmdlLGM9bC5vbkFjdGl2ZVN0YXJ0RGF0ZUNoYW5nZSx1PWwub25DaGFuZ2UsZj1sLm9uVmlld0NoYW5nZSxkPWwuc2VsZWN0UmFuZ2UscD17YWN0aXZlU3RhcnREYXRlOmksdmlldzphfTtlLnNldFN0YXRlKHQsKGZ1bmN0aW9uKCl7dmFyIG89e2FjdGlvbjp0LmFjdGlvbixhY3RpdmVTdGFydERhdGU6dC5hY3RpdmVTdGFydERhdGV8fGUuYWN0aXZlU3RhcnREYXRlLHZhbHVlOnQudmFsdWV8fGUudmFsdWUsdmlldzp0LnZpZXd8fGUudmlld307ZnVuY3Rpb24gaShlKXtyZXR1cm4gZSBpbiB0JiYoa24odFtlXSkhPT1rbihwW2VdKXx8KHRbZV1pbnN0YW5jZW9mIERhdGU/dFtlXS5nZXRUaW1lKCkhPT1wW2VdLmdldFRpbWUoKTp0W2VdIT09cFtlXSkpfWkoXCJhY3RpdmVTdGFydERhdGVcIikmJmMmJmMobyksaShcInZpZXdcIikmJmYmJmYobyksaShcInZhbHVlXCIpJiZ1JiYoZCYmWG4odC52YWx1ZSk/cyYmdShbdC52YWx1ZV0sbik6dSh0LnZhbHVlLG4pKSxyJiZyKG8pfSkpfSkpLEhuKFBuKGUpLFwic2V0QWN0aXZlU3RhcnREYXRlXCIsKGZ1bmN0aW9uKHQsbil7ZS5zZXRTdGF0ZUFuZENhbGxDYWxsYmFja3Moe2FjdGlvbjpuLGFjdGl2ZVN0YXJ0RGF0ZTp0fSl9KSksSG4oUG4oZSksXCJkcmlsbERvd25cIiwoZnVuY3Rpb24odCxuKXtpZihlLmRyaWxsRG93bkF2YWlsYWJsZSl7ZS5vbkNsaWNrVGlsZSh0LG4pO3ZhciByPVBuKGUpLG89ci52aWV3LGk9ci52aWV3cyxhPWUucHJvcHMub25EcmlsbERvd24sbD1pW2kuaW5kZXhPZihvKSsxXTtlLnNldFN0YXRlQW5kQ2FsbENhbGxiYWNrcyh7YWN0aW9uOlwiZHJpbGxEb3duXCIsYWN0aXZlU3RhcnREYXRlOnQsdmlldzpsfSx2b2lkIDAsYSl9fSkpLEhuKFBuKGUpLFwiZHJpbGxVcFwiLChmdW5jdGlvbigpe2lmKGUuZHJpbGxVcEF2YWlsYWJsZSl7dmFyIHQ9UG4oZSksbj10LmFjdGl2ZVN0YXJ0RGF0ZSxyPXQudmlldyxvPXQudmlld3MsaT1lLnByb3BzLm9uRHJpbGxVcCxhPW9bby5pbmRleE9mKHIpLTFdLGw9Q2UoYSxuKTtlLnNldFN0YXRlQW5kQ2FsbENhbGxiYWNrcyh7YWN0aW9uOlwiZHJpbGxVcFwiLGFjdGl2ZVN0YXJ0RGF0ZTpsLHZpZXc6YX0sdm9pZCAwLGkpfX0pKSxIbihQbihlKSxcIm9uQ2hhbmdlXCIsKGZ1bmN0aW9uKHQsbil7dmFyIHI9UG4oZSkudmFsdWUsbz1lLnByb3BzLGk9by5nb1RvUmFuZ2VTdGFydE9uU2VsZWN0LGE9by5zZWxlY3RSYW5nZTtlLm9uQ2xpY2tUaWxlKHQsbik7dmFyIGwscyxjLHU9YSYmIVhuKHIpO2lmKGEpe3ZhciBmPVBuKGUpLnZhbHVlVHlwZTtsPXU/Q2UoZix0KTpbQ2Uocz1mLChjPVtyLHRdLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUtdH0pKSlbMF0pLHhlKHMsY1sxXSldfWVsc2UgbD1lLmdldFByb2Nlc3NlZFZhbHVlKHQpO3ZhciBkPSFhfHx1fHxpP0tuKFRuKFRuKHt9LGUucHJvcHMpLHt9LHt2YWx1ZTpsfSkpOm51bGw7bi5wZXJzaXN0KCksZS5zZXRTdGF0ZUFuZENhbGxDYWxsYmFja3Moe2FjdGlvbjpcIm9uQ2hhbmdlXCIsYWN0aXZlU3RhcnREYXRlOmQsdmFsdWU6bH0sbil9KSksSG4oUG4oZSksXCJvbkNsaWNrVGlsZVwiLChmdW5jdGlvbih0LG4pe3ZhciByPVBuKGUpLnZpZXcsbz1lLnByb3BzLGk9by5vbkNsaWNrRGF5LGE9by5vbkNsaWNrRGVjYWRlLGw9by5vbkNsaWNrTW9udGgscz1vLm9uQ2xpY2tZZWFyLGM9ZnVuY3Rpb24oKXtzd2l0Y2gocil7Y2FzZVwiY2VudHVyeVwiOnJldHVybiBhO2Nhc2VcImRlY2FkZVwiOnJldHVybiBzO2Nhc2VcInllYXJcIjpyZXR1cm4gbDtjYXNlXCJtb250aFwiOnJldHVybiBpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB2aWV3OiBcIi5jb25jYXQocixcIi5cIikpfX0oKTtjJiZjKHQsbil9KSksSG4oUG4oZSksXCJvbk1vdXNlT3ZlclwiLChmdW5jdGlvbih0KXtlLnNldFN0YXRlKChmdW5jdGlvbihlKXtyZXR1cm4gZS5ob3ZlciYmZS5ob3Zlci5nZXRUaW1lKCk9PT10LmdldFRpbWUoKT9udWxsOntob3Zlcjp0fX0pKX0pKSxIbihQbihlKSxcIm9uTW91c2VMZWF2ZVwiLChmdW5jdGlvbigpe2Uuc2V0U3RhdGUoe2hvdmVyOm51bGx9KX0pKSxlfXJldHVybiB0PWwsbj1be2tleTpcImFjdGl2ZVN0YXJ0RGF0ZVwiLGdldDpmdW5jdGlvbigpe3ZhciBlLHQsbixyLG8saSxhLGwscyxjLHUsZixkPXRoaXMucHJvcHMuYWN0aXZlU3RhcnREYXRlLHA9dGhpcy5zdGF0ZS5hY3RpdmVTdGFydERhdGU7cmV0dXJuIGR8fHB8fCh0PShlPXRoaXMucHJvcHMpLmFjdGl2ZVN0YXJ0RGF0ZSxuPWUuZGVmYXVsdEFjdGl2ZVN0YXJ0RGF0ZSxyPWUuZGVmYXVsdFZhbHVlLG89ZS5kZWZhdWx0VmlldyxpPWUubWF4RGV0YWlsLGE9ZS5taW5EZXRhaWwsbD1lLnZhbHVlLHM9ZS52aWV3LGM9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LGk9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKyluPWlbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb30oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgaT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspbj1pW3JdLHQuaW5kZXhPZihuKT49MHx8T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsbikmJihvW25dPWVbbl0pfXJldHVybiBvfShlLGpuKSx1PVVuKHMsYSxpKSwoZj10fHxuKT9DZSh1LGYpOktuKFRuKHttYXhEZXRhaWw6aSxtaW5EZXRhaWw6YSx2YWx1ZTpsfHxyLHZpZXc6c3x8b30sYykpKX19LHtrZXk6XCJ2YWx1ZVwiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnNlbGVjdFJhbmdlLG49ZS52YWx1ZSxyPXRoaXMuc3RhdGUudmFsdWU7cmV0dXJuIHQmJlhuKHIpP3I6dm9pZCAwIT09bj9uOnJ9fSx7a2V5OlwidmFsdWVUeXBlXCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFduKHRoaXMucHJvcHMubWF4RGV0YWlsKX19LHtrZXk6XCJ2aWV3XCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUubWluRGV0YWlsLG49ZS5tYXhEZXRhaWwscj1lLnZpZXcsbz10aGlzLnN0YXRlLnZpZXc7cmV0dXJuIFVuKHJ8fG8sdCxuKX19LHtrZXk6XCJ2aWV3c1wiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHM7cmV0dXJuIEZuKGUubWluRGV0YWlsLGUubWF4RGV0YWlsKX19LHtrZXk6XCJob3ZlclwiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuc2VsZWN0UmFuZ2UsdD10aGlzLnN0YXRlLmhvdmVyO3JldHVybiBlP3Q6bnVsbH19LHtrZXk6XCJkcmlsbERvd25BdmFpbGFibGVcIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnZpZXcsdD10aGlzLnZpZXdzO3JldHVybiB0LmluZGV4T2YoZSk8dC5sZW5ndGgtMX19LHtrZXk6XCJkcmlsbFVwQXZhaWxhYmxlXCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy52aWV3O3JldHVybiB0aGlzLnZpZXdzLmluZGV4T2YoZSk+MH19LHtrZXk6XCJnZXRQcm9jZXNzZWRWYWx1ZVwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMsbj10Lm1pbkRhdGUscj10Lm1heERhdGUsbz10Lm1heERldGFpbCxpPXQucmV0dXJuVmFsdWU7cmV0dXJuIGZ1bmN0aW9uKCl7c3dpdGNoKGkpe2Nhc2VcInN0YXJ0XCI6cmV0dXJuIEduO2Nhc2VcImVuZFwiOnJldHVybiBxbjtjYXNlXCJyYW5nZVwiOnJldHVybiBZbjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmV0dXJuVmFsdWUuXCIpfX0oKSh7dmFsdWU6ZSxtaW5EYXRlOm4sbWF4RGF0ZTpyLG1heERldGFpbDpvfSl9fSx7a2V5OlwicmVuZGVyQ29udGVudFwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYWN0aXZlU3RhcnREYXRlLG49dGhpcy5vbk1vdXNlT3ZlcixyPXRoaXMudmFsdWVUeXBlLGk9dGhpcy52YWx1ZSxhPXRoaXMudmlldyxsPXRoaXMucHJvcHMscz1sLmNhbGVuZGFyVHlwZSxjPWwubG9jYWxlLHU9bC5tYXhEYXRlLGY9bC5taW5EYXRlLGQ9bC5zZWxlY3RSYW5nZSxwPWwudGlsZUNsYXNzTmFtZSxoPWwudGlsZUNvbnRlbnQsZz1sLnRpbGVEaXNhYmxlZCx2PXRoaXMuaG92ZXIsbT17YWN0aXZlU3RhcnREYXRlOmU/eWUoYSx0KTpDZShhLHQpLGhvdmVyOnYsbG9jYWxlOmMsbWF4RGF0ZTp1LG1pbkRhdGU6ZixvbkNsaWNrOnRoaXMuZHJpbGxEb3duQXZhaWxhYmxlP3RoaXMuZHJpbGxEb3duOnRoaXMub25DaGFuZ2Usb25Nb3VzZU92ZXI6ZD9uOm51bGwsdGlsZUNsYXNzTmFtZTpwLHRpbGVDb250ZW50OmgsdGlsZURpc2FibGVkOmcsdmFsdWU6aSx2YWx1ZVR5cGU6cn07c3dpdGNoKGEpe2Nhc2VcImNlbnR1cnlcIjp2YXIgQz10aGlzLnByb3BzLmZvcm1hdFllYXI7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KGt0LE1uKHtmb3JtYXRZZWFyOkN9LG0pKTtjYXNlXCJkZWNhZGVcIjp2YXIgeT10aGlzLnByb3BzLmZvcm1hdFllYXI7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KE50LE1uKHtmb3JtYXRZZWFyOnl9LG0pKTtjYXNlXCJ5ZWFyXCI6dmFyIHc9dGhpcy5wcm9wcyxiPXcuZm9ybWF0TW9udGgseD13LmZvcm1hdE1vbnRoWWVhcjtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQodG4sTW4oe2Zvcm1hdE1vbnRoOmIsZm9ybWF0TW9udGhZZWFyOnh9LG0pKTtjYXNlXCJtb250aFwiOnZhciBfPXRoaXMucHJvcHMsTz1fLmZvcm1hdERheSxMPV8uZm9ybWF0TG9uZ0RhdGUsRT1fLmZvcm1hdFNob3J0V2Vla2RheSxTPV8uZm9ybWF0V2Vla2RheSxqPV8ub25DbGlja1dlZWtOdW1iZXIsTT1fLnNob3dEb3VibGVWaWV3LGs9Xy5zaG93Rml4ZWROdW1iZXJPZldlZWtzLFI9Xy5zaG93TmVpZ2hib3JpbmdNb250aCxQPV8uc2hvd1dlZWtOdW1iZXJzLEk9dGhpcy5vbk1vdXNlTGVhdmU7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KFNuLE1uKHtjYWxlbmRhclR5cGU6cyxmb3JtYXREYXk6Tyxmb3JtYXRMb25nRGF0ZTpMLGZvcm1hdFNob3J0V2Vla2RheTpFLGZvcm1hdFdlZWtkYXk6UyxvbkNsaWNrV2Vla051bWJlcjpqLG9uTW91c2VMZWF2ZTpkP0k6bnVsbCxzaG93Rml4ZWROdW1iZXJPZldlZWtzOnZvaWQgMCE9PWs/azpNLHNob3dOZWlnaGJvcmluZ01vbnRoOlIsc2hvd1dlZWtOdW1iZXJzOlB9LG0pKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgdmlldzogXCIuY29uY2F0KGEsXCIuXCIpKX19fSx7a2V5OlwicmVuZGVyTmF2aWdhdGlvblwiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXMucHJvcHMuc2hvd05hdmlnYXRpb24pcmV0dXJuIG51bGw7dmFyIGU9dGhpcy5hY3RpdmVTdGFydERhdGUsdD10aGlzLnZpZXcsbj10aGlzLnZpZXdzLHI9dGhpcy5wcm9wcyxpPXIuZm9ybWF0TW9udGhZZWFyLGE9ci5mb3JtYXRZZWFyLGw9ci5sb2NhbGUscz1yLm1heERhdGUsYz1yLm1pbkRhdGUsdT1yLm5hdmlnYXRpb25BcmlhTGFiZWwsZj1yLm5hdmlnYXRpb25BcmlhTGl2ZSxkPXIubmF2aWdhdGlvbkxhYmVsLHA9ci5uZXh0MkFyaWFMYWJlbCxoPXIubmV4dDJMYWJlbCxnPXIubmV4dEFyaWFMYWJlbCx2PXIubmV4dExhYmVsLG09ci5wcmV2MkFyaWFMYWJlbCxDPXIucHJldjJMYWJlbCx5PXIucHJldkFyaWFMYWJlbCx3PXIucHJldkxhYmVsLGI9ci5zaG93RG91YmxlVmlldztyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQoTmUse2FjdGl2ZVN0YXJ0RGF0ZTplLGRyaWxsVXA6dGhpcy5kcmlsbFVwLGZvcm1hdE1vbnRoWWVhcjppLGZvcm1hdFllYXI6YSxsb2NhbGU6bCxtYXhEYXRlOnMsbWluRGF0ZTpjLG5hdmlnYXRpb25BcmlhTGFiZWw6dSxuYXZpZ2F0aW9uQXJpYUxpdmU6ZixuYXZpZ2F0aW9uTGFiZWw6ZCxuZXh0MkFyaWFMYWJlbDpwLG5leHQyTGFiZWw6aCxuZXh0QXJpYUxhYmVsOmcsbmV4dExhYmVsOnYscHJldjJBcmlhTGFiZWw6bSxwcmV2MkxhYmVsOkMscHJldkFyaWFMYWJlbDp5LHByZXZMYWJlbDp3LHNldEFjdGl2ZVN0YXJ0RGF0ZTp0aGlzLnNldEFjdGl2ZVN0YXJ0RGF0ZSxzaG93RG91YmxlVmlldzpiLHZpZXc6dCx2aWV3czpufSl9fSx7a2V5OlwicmVuZGVyXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5jbGFzc05hbWUsbj1lLmlucHV0UmVmLHI9ZS5zZWxlY3RSYW5nZSxpPWUuc2hvd0RvdWJsZVZpZXcsYT10aGlzLm9uTW91c2VMZWF2ZSxsPXRoaXMudmFsdWUsYz1bXS5jb25jYXQobCk7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpzKFpuLHImJjE9PT1jLmxlbmd0aCYmXCJcIi5jb25jYXQoWm4sXCItLXNlbGVjdFJhbmdlXCIpLGkmJlwiXCIuY29uY2F0KFpuLFwiLS1kb3VibGVWaWV3XCIpLHQpLHJlZjpufSx0aGlzLnJlbmRlck5hdmlnYXRpb24oKSxvKCkuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJcIi5jb25jYXQoWm4sXCJfX3ZpZXdDb250YWluZXJcIiksb25CbHVyOnI/YTpudWxsLG9uTW91c2VMZWF2ZTpyP2E6bnVsbH0sdGhpcy5yZW5kZXJDb250ZW50KCksaSYmdGhpcy5yZW5kZXJDb250ZW50KCEwKSkpfX1dLG4mJmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX0odC5wcm90b3R5cGUsbiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJwcm90b3R5cGVcIix7d3JpdGFibGU6ITF9KSxsfShyLkNvbXBvbmVudCk7Sm4uZGVmYXVsdFByb3BzPXtnb1RvUmFuZ2VTdGFydE9uU2VsZWN0OiEwLG1heERhdGU6RG4sbWF4RGV0YWlsOlwibW9udGhcIixtaW5EYXRlOlZuLG1pbkRldGFpbDpcImNlbnR1cnlcIixyZXR1cm5WYWx1ZTpcInN0YXJ0XCIsc2hvd05hdmlnYXRpb246ITAsc2hvd05laWdoYm9yaW5nTW9udGg6ITB9O3ZhciBRbj1hKCkuaW5zdGFuY2VPZihEYXRlKSxlcj1hKCkub25lT2ZUeXBlKFthKCkuc3RyaW5nLEhlXSk7Sm4ucHJvcFR5cGVzPXthY3RpdmVTdGFydERhdGU6UW4sYWxsb3dQYXJ0aWFsUmFuZ2U6YSgpLmJvb2wsY2FsZW5kYXJUeXBlOlJlLGNsYXNzTmFtZTpQZSxkZWZhdWx0QWN0aXZlU3RhcnREYXRlOlFuLGRlZmF1bHRWYWx1ZTplcixkZWZhdWx0VmlldzpWZSxmb3JtYXREYXk6YSgpLmZ1bmMsZm9ybWF0TG9uZ0RhdGU6YSgpLmZ1bmMsZm9ybWF0TW9udGg6YSgpLmZ1bmMsZm9ybWF0TW9udGhZZWFyOmEoKS5mdW5jLGZvcm1hdFNob3J0V2Vla2RheTphKCkuZnVuYyxmb3JtYXRXZWVrZGF5OmEoKS5mdW5jLGZvcm1hdFllYXI6YSgpLmZ1bmMsZ29Ub1JhbmdlU3RhcnRPblNlbGVjdDphKCkuYm9vbCxpbnB1dFJlZjpUZSxsb2NhbGU6YSgpLnN0cmluZyxtYXhEYXRlOkFlLG1heERldGFpbDphKCkub25lT2YoJG4pLG1pbkRhdGU6SWUsbWluRGV0YWlsOmEoKS5vbmVPZigkbiksbmF2aWdhdGlvbkFyaWFMYWJlbDphKCkuc3RyaW5nLG5hdmlnYXRpb25BcmlhTGl2ZTphKCkub25lT2YoW1wib2ZmXCIsXCJwb2xpdGVcIixcImFzc2VydGl2ZVwiXSksbmF2aWdhdGlvbkxhYmVsOmEoKS5mdW5jLG5leHQyQXJpYUxhYmVsOmEoKS5zdHJpbmcsbmV4dDJMYWJlbDphKCkubm9kZSxuZXh0QXJpYUxhYmVsOmEoKS5zdHJpbmcsbmV4dExhYmVsOmEoKS5ub2RlLG9uQWN0aXZlU3RhcnREYXRlQ2hhbmdlOmEoKS5mdW5jLG9uQ2hhbmdlOmEoKS5mdW5jLG9uQ2xpY2tEYXk6YSgpLmZ1bmMsb25DbGlja0RlY2FkZTphKCkuZnVuYyxvbkNsaWNrTW9udGg6YSgpLmZ1bmMsb25DbGlja1dlZWtOdW1iZXI6YSgpLmZ1bmMsb25DbGlja1llYXI6YSgpLmZ1bmMsb25EcmlsbERvd246YSgpLmZ1bmMsb25EcmlsbFVwOmEoKS5mdW5jLG9uVmlld0NoYW5nZTphKCkuZnVuYyxwcmV2MkFyaWFMYWJlbDphKCkuc3RyaW5nLHByZXYyTGFiZWw6YSgpLm5vZGUscHJldkFyaWFMYWJlbDphKCkuc3RyaW5nLHByZXZMYWJlbDphKCkubm9kZSxyZXR1cm5WYWx1ZTphKCkub25lT2YoW1wic3RhcnRcIixcImVuZFwiLFwicmFuZ2VcIl0pLHNlbGVjdFJhbmdlOmEoKS5ib29sLHNob3dEb3VibGVWaWV3OmEoKS5ib29sLHNob3dGaXhlZE51bWJlck9mV2Vla3M6YSgpLmJvb2wsc2hvd05hdmlnYXRpb246YSgpLmJvb2wsc2hvd05laWdoYm9yaW5nTW9udGg6YSgpLmJvb2wsc2hvd1dlZWtOdW1iZXJzOmEoKS5ib29sLHRpbGVDbGFzc05hbWU6YSgpLm9uZU9mVHlwZShbYSgpLmZ1bmMsUGVdKSx0aWxlQ29udGVudDphKCkub25lT2ZUeXBlKFthKCkuZnVuYyxhKCkubm9kZV0pLHRpbGVEaXNhYmxlZDphKCkuZnVuYyx2YWx1ZTplcix2aWV3OlZlfTtjb25zdCB0cj1Kbn0sNTI1MTooZSx0LG4pPT57big3NDE4KTt2YXIgcj1uKDY2ODkpLG89NjAxMDM7aWYodC5GcmFnbWVudD02MDEwNyxcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3Ipe3ZhciBpPVN5bWJvbC5mb3I7bz1pKFwicmVhY3QuZWxlbWVudFwiKSx0LkZyYWdtZW50PWkoXCJyZWFjdC5mcmFnbWVudFwiKX12YXIgYT1yLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELlJlYWN0Q3VycmVudE93bmVyLGw9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxzPXtrZXk6ITAscmVmOiEwLF9fc2VsZjohMCxfX3NvdXJjZTohMH07ZnVuY3Rpb24gYyhlLHQsbil7dmFyIHIsaT17fSxjPW51bGwsdT1udWxsO2ZvcihyIGluIHZvaWQgMCE9PW4mJihjPVwiXCIrbiksdm9pZCAwIT09dC5rZXkmJihjPVwiXCIrdC5rZXkpLHZvaWQgMCE9PXQucmVmJiYodT10LnJlZiksdClsLmNhbGwodCxyKSYmIXMuaGFzT3duUHJvcGVydHkocikmJihpW3JdPXRbcl0pO2lmKGUmJmUuZGVmYXVsdFByb3BzKWZvcihyIGluIHQ9ZS5kZWZhdWx0UHJvcHMpdm9pZCAwPT09aVtyXSYmKGlbcl09dFtyXSk7cmV0dXJueyQkdHlwZW9mOm8sdHlwZTplLGtleTpjLHJlZjp1LHByb3BzOmksX293bmVyOmEuY3VycmVudH19dC5qc3g9Yyx0LmpzeHM9Y30sNTg5MzooZSx0LG4pPT57ZS5leHBvcnRzPW4oNTI1MSl9LDM1NzM6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciByPW4oNjU1KSxvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLm1heChNYXRoLm1pbihuLHQpLGUpfX0saT1mdW5jdGlvbihlKXtyZXR1cm4gZSUxP051bWJlcihlLnRvRml4ZWQoNSkpOmV9LGE9LygtKT8oW1xcZF0qXFwuP1tcXGRdKSsvZyxsPS8oI1swLTlhLWZdezZ9fCNbMC05YS1mXXszfXwjKD86WzAtOWEtZl17Mn0pezIsNH18KHJnYnxoc2wpYT9cXCgoLT9bXFxkXFwuXSslP1ssXFxzXSspezIsM31cXHMqXFwvKlxccypbXFxkXFwuXSslP1xcKSkvZ2kscz0vXigjWzAtOWEtZl17M318Iyg/OlswLTlhLWZdezJ9KXsyLDR9fChyZ2J8aHNsKWE/XFwoKC0/W1xcZFxcLl0rJT9bLFxcc10rKXsyLDN9XFxzKlxcLypcXHMqW1xcZFxcLl0rJT9cXCkpJC9pO2Z1bmN0aW9uIGMoZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGV9dmFyIHU9e3Rlc3Q6ZnVuY3Rpb24oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGV9LHBhcnNlOnBhcnNlRmxvYXQsdHJhbnNmb3JtOmZ1bmN0aW9uKGUpe3JldHVybiBlfX0sZj1yLl9fYXNzaWduKHIuX19hc3NpZ24oe30sdSkse3RyYW5zZm9ybTpvKDAsMSl9KSxkPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSx1KSx7ZGVmYXVsdDoxfSkscD1mdW5jdGlvbihlKXtyZXR1cm57dGVzdDpmdW5jdGlvbih0KXtyZXR1cm4gYyh0KSYmdC5lbmRzV2l0aChlKSYmMT09PXQuc3BsaXQoXCIgXCIpLmxlbmd0aH0scGFyc2U6cGFyc2VGbG9hdCx0cmFuc2Zvcm06ZnVuY3Rpb24odCl7cmV0dXJuXCJcIit0K2V9fX0saD1wKFwiZGVnXCIpLGc9cChcIiVcIiksdj1wKFwicHhcIiksbT1wKFwidmhcIiksQz1wKFwidndcIikseT1yLl9fYXNzaWduKHIuX19hc3NpZ24oe30sZykse3BhcnNlOmZ1bmN0aW9uKGUpe3JldHVybiBnLnBhcnNlKGUpLzEwMH0sdHJhbnNmb3JtOmZ1bmN0aW9uKGUpe3JldHVybiBnLnRyYW5zZm9ybSgxMDAqZSl9fSksdz1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gQm9vbGVhbihjKG4pJiZzLnRlc3QobikmJm4uc3RhcnRzV2l0aChlKXx8dCYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sdCkpfX0sYj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBvO2lmKCFjKHIpKXJldHVybiByO3ZhciBpPXIubWF0Y2goYSksbD1pWzBdLHM9aVsxXSx1PWlbMl0sZj1pWzNdO3JldHVybihvPXt9KVtlXT1wYXJzZUZsb2F0KGwpLG9bdF09cGFyc2VGbG9hdChzKSxvW25dPXBhcnNlRmxvYXQodSksby5hbHBoYT12b2lkIDAhPT1mP3BhcnNlRmxvYXQoZik6MSxvfX0seD17dGVzdDp3KFwiaHNsXCIsXCJodWVcIikscGFyc2U6YihcImh1ZVwiLFwic2F0dXJhdGlvblwiLFwibGlnaHRuZXNzXCIpLHRyYW5zZm9ybTpmdW5jdGlvbihlKXt2YXIgdD1lLmh1ZSxuPWUuc2F0dXJhdGlvbixyPWUubGlnaHRuZXNzLG89ZS5hbHBoYSxhPXZvaWQgMD09PW8/MTpvO3JldHVyblwiaHNsYShcIitNYXRoLnJvdW5kKHQpK1wiLCBcIitnLnRyYW5zZm9ybShpKG4pKStcIiwgXCIrZy50cmFuc2Zvcm0oaShyKSkrXCIsIFwiK2koZi50cmFuc2Zvcm0oYSkpK1wiKVwifX0sXz1vKDAsMjU1KSxPPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSx1KSx7dHJhbnNmb3JtOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKF8oZSkpfX0pLEw9e3Rlc3Q6dyhcInJnYlwiLFwicmVkXCIpLHBhcnNlOmIoXCJyZWRcIixcImdyZWVuXCIsXCJibHVlXCIpLHRyYW5zZm9ybTpmdW5jdGlvbihlKXt2YXIgdD1lLnJlZCxuPWUuZ3JlZW4scj1lLmJsdWUsbz1lLmFscGhhLGE9dm9pZCAwPT09bz8xOm87cmV0dXJuXCJyZ2JhKFwiK08udHJhbnNmb3JtKHQpK1wiLCBcIitPLnRyYW5zZm9ybShuKStcIiwgXCIrTy50cmFuc2Zvcm0ocikrXCIsIFwiK2koZi50cmFuc2Zvcm0oYSkpK1wiKVwifX0sRT17dGVzdDp3KFwiI1wiKSxwYXJzZTpmdW5jdGlvbihlKXt2YXIgdD1cIlwiLG49XCJcIixyPVwiXCIsbz1cIlwiO3JldHVybiBlLmxlbmd0aD41Pyh0PWUuc3Vic3RyKDEsMiksbj1lLnN1YnN0cigzLDIpLHI9ZS5zdWJzdHIoNSwyKSxvPWUuc3Vic3RyKDcsMikpOih0PWUuc3Vic3RyKDEsMSksbj1lLnN1YnN0cigyLDEpLHI9ZS5zdWJzdHIoMywxKSxvPWUuc3Vic3RyKDQsMSksdCs9dCxuKz1uLHIrPXIsbys9bykse3JlZDpwYXJzZUludCh0LDE2KSxncmVlbjpwYXJzZUludChuLDE2KSxibHVlOnBhcnNlSW50KHIsMTYpLGFscGhhOm8/cGFyc2VJbnQobywxNikvMjU1OjF9fSx0cmFuc2Zvcm06TC50cmFuc2Zvcm19LFM9e3Rlc3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIEwudGVzdChlKXx8RS50ZXN0KGUpfHx4LnRlc3QoZSl9LHBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybiBMLnRlc3QoZSk/TC5wYXJzZShlKTp4LnRlc3QoZSk/eC5wYXJzZShlKTpFLnBhcnNlKGUpfSx0cmFuc2Zvcm06ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSk/ZTplLmhhc093blByb3BlcnR5KFwicmVkXCIpP0wudHJhbnNmb3JtKGUpOngudHJhbnNmb3JtKGUpfX0saj1cIiR7Y31cIixNPVwiJHtufVwiO2Z1bmN0aW9uIGsoZSl7dmFyIHQ9W10sbj0wLHI9ZS5tYXRjaChsKTtyJiYobj1yLmxlbmd0aCxlPWUucmVwbGFjZShsLGopLHQucHVzaC5hcHBseSh0LHIubWFwKFMucGFyc2UpKSk7dmFyIG89ZS5tYXRjaChhKTtyZXR1cm4gbyYmKGU9ZS5yZXBsYWNlKGEsTSksdC5wdXNoLmFwcGx5KHQsby5tYXAodS5wYXJzZSkpKSx7dmFsdWVzOnQsbnVtQ29sb3JzOm4sdG9rZW5pc2VkOmV9fWZ1bmN0aW9uIFIoZSl7cmV0dXJuIGsoZSkudmFsdWVzfWZ1bmN0aW9uIFAoZSl7dmFyIHQ9ayhlKSxuPXQudmFsdWVzLHI9dC5udW1Db2xvcnMsbz10LnRva2VuaXNlZCxhPW4ubGVuZ3RoO3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHQ9byxuPTA7bjxhO24rKyl0PXQucmVwbGFjZShuPHI/ajpNLG48cj9TLnRyYW5zZm9ybShlW25dKTppKGVbbl0pKTtyZXR1cm4gdH19dmFyIEk9ZnVuY3Rpb24oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGU/MDplfSxBPXt0ZXN0OmZ1bmN0aW9uKGUpe3ZhciB0LG4scixvO3JldHVybiBpc05hTihlKSYmYyhlKSYmKG51bGwhPT0obj1udWxsPT09KHQ9ZS5tYXRjaChhKSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQubGVuZ3RoKSYmdm9pZCAwIT09bj9uOjApKyhudWxsIT09KG89bnVsbD09PShyPWUubWF0Y2gobCkpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmxlbmd0aCkmJnZvaWQgMCE9PW8/bzowKT4wfSxwYXJzZTpSLGNyZWF0ZVRyYW5zZm9ybWVyOlAsZ2V0QW5pbWF0YWJsZU5vbmU6ZnVuY3Rpb24oZSl7dmFyIHQ9UihlKTtyZXR1cm4gUChlKSh0Lm1hcChJKSl9fSxUPW5ldyBTZXQoW1wiYnJpZ2h0bmVzc1wiLFwiY29udHJhc3RcIixcInNhdHVyYXRlXCIsXCJvcGFjaXR5XCJdKTtmdW5jdGlvbiBIKGUpe3ZhciB0PWUuc2xpY2UoMCwtMSkuc3BsaXQoXCIoXCIpLG49dFswXSxyPXRbMV07aWYoXCJkcm9wLXNoYWRvd1wiPT09bilyZXR1cm4gZTt2YXIgbz0oci5tYXRjaChhKXx8W10pWzBdO2lmKCFvKXJldHVybiBlO3ZhciBpPXIucmVwbGFjZShvLFwiXCIpLGw9VC5oYXMobik/MTowO3JldHVybiBvIT09ciYmKGwqPTEwMCksbitcIihcIitsK2krXCIpXCJ9dmFyIEI9LyhbYS16LV0qKVxcKC4qP1xcKS9nLFY9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LEEpLHtnZXRBbmltYXRhYmxlTm9uZTpmdW5jdGlvbihlKXt2YXIgdD1lLm1hdGNoKEIpO3JldHVybiB0P3QubWFwKEgpLmpvaW4oXCIgXCIpOmV9fSk7dC5hbHBoYT1mLHQuY29sb3I9Uyx0LmNvbXBsZXg9QSx0LmRlZ3JlZXM9aCx0LmZpbHRlcj1WLHQuaGV4PUUsdC5oc2xhPXgsdC5udW1iZXI9dSx0LnBlcmNlbnQ9Zyx0LnByb2dyZXNzUGVyY2VudGFnZT15LHQucHg9dix0LnJnYlVuaXQ9Tyx0LnJnYmE9TCx0LnNjYWxlPWQsdC52aD1tLHQudnc9Q30sODM4ODooZSx0LG4pPT57bi5yKHQpLG4uZCh0LHtmb2N1c2FibGU6KCk9PncsaXNGb2N1c2FibGU6KCk9Pl8saXNUYWJiYWJsZTooKT0+Yix0YWJiYWJsZTooKT0+eX0pO3ZhciByPVtcImlucHV0Om5vdChbaW5lcnRdKVwiLFwic2VsZWN0Om5vdChbaW5lcnRdKVwiLFwidGV4dGFyZWE6bm90KFtpbmVydF0pXCIsXCJhW2hyZWZdOm5vdChbaW5lcnRdKVwiLFwiYnV0dG9uOm5vdChbaW5lcnRdKVwiLFwiW3RhYmluZGV4XTpub3Qoc2xvdCk6bm90KFtpbmVydF0pXCIsXCJhdWRpb1tjb250cm9sc106bm90KFtpbmVydF0pXCIsXCJ2aWRlb1tjb250cm9sc106bm90KFtpbmVydF0pXCIsJ1tjb250ZW50ZWRpdGFibGVdOm5vdChbY29udGVudGVkaXRhYmxlPVwiZmFsc2VcIl0pOm5vdChbaW5lcnRdKScsXCJkZXRhaWxzPnN1bW1hcnk6Zmlyc3Qtb2YtdHlwZTpub3QoW2luZXJ0XSlcIixcImRldGFpbHM6bm90KFtpbmVydF0pXCJdLG89ci5qb2luKFwiLFwiKSxpPVwidW5kZWZpbmVkXCI9PXR5cGVvZiBFbGVtZW50LGE9aT9mdW5jdGlvbigpe306RWxlbWVudC5wcm90b3R5cGUubWF0Y2hlc3x8RWxlbWVudC5wcm90b3R5cGUubXNNYXRjaGVzU2VsZWN0b3J8fEVsZW1lbnQucHJvdG90eXBlLndlYmtpdE1hdGNoZXNTZWxlY3RvcixsPSFpJiZFbGVtZW50LnByb3RvdHlwZS5nZXRSb290Tm9kZT9mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gbnVsbD09ZXx8bnVsbD09PSh0PWUuZ2V0Um9vdE5vZGUpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmNhbGwoZSl9OmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3ZvaWQgMDplLm93bmVyRG9jdW1lbnR9LHM9ZnVuY3Rpb24gZSh0LG4pe3ZhciByO3ZvaWQgMD09PW4mJihuPSEwKTt2YXIgbz1udWxsPT10fHxudWxsPT09KHI9dC5nZXRBdHRyaWJ1dGUpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmNhbGwodCxcImluZXJ0XCIpO3JldHVyblwiXCI9PT1vfHxcInRydWVcIj09PW98fG4mJnQmJmUodC5wYXJlbnROb2RlKX0sYz1mdW5jdGlvbihlLHQsbil7aWYocyhlKSlyZXR1cm5bXTt2YXIgcj1BcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoZS5xdWVyeVNlbGVjdG9yQWxsKG8pKTtyZXR1cm4gdCYmYS5jYWxsKGUsbykmJnIudW5zaGlmdChlKSxyLmZpbHRlcihuKX0sdT1mdW5jdGlvbiBlKHQsbixyKXtmb3IodmFyIGk9W10sbD1BcnJheS5mcm9tKHQpO2wubGVuZ3RoOyl7dmFyIGM9bC5zaGlmdCgpO2lmKCFzKGMsITEpKWlmKFwiU0xPVFwiPT09Yy50YWdOYW1lKXt2YXIgdT1jLmFzc2lnbmVkRWxlbWVudHMoKSxmPWUodS5sZW5ndGg/dTpjLmNoaWxkcmVuLCEwLHIpO3IuZmxhdHRlbj9pLnB1c2guYXBwbHkoaSxmKTppLnB1c2goe3Njb3BlUGFyZW50OmMsY2FuZGlkYXRlczpmfSl9ZWxzZXthLmNhbGwoYyxvKSYmci5maWx0ZXIoYykmJihufHwhdC5pbmNsdWRlcyhjKSkmJmkucHVzaChjKTt2YXIgZD1jLnNoYWRvd1Jvb3R8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHIuZ2V0U2hhZG93Um9vdCYmci5nZXRTaGFkb3dSb290KGMpLHA9IXMoZCwhMSkmJighci5zaGFkb3dSb290RmlsdGVyfHxyLnNoYWRvd1Jvb3RGaWx0ZXIoYykpO2lmKGQmJnApe3ZhciBoPWUoITA9PT1kP2MuY2hpbGRyZW46ZC5jaGlsZHJlbiwhMCxyKTtyLmZsYXR0ZW4/aS5wdXNoLmFwcGx5KGksaCk6aS5wdXNoKHtzY29wZVBhcmVudDpjLGNhbmRpZGF0ZXM6aH0pfWVsc2UgbC51bnNoaWZ0LmFwcGx5KGwsYy5jaGlsZHJlbil9fXJldHVybiBpfSxmPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudGFiSW5kZXg8MCYmKHR8fC9eKEFVRElPfFZJREVPfERFVEFJTFMpJC8udGVzdChlLnRhZ05hbWUpfHxmdW5jdGlvbihlKXt2YXIgdCxuPW51bGw9PWV8fG51bGw9PT0odD1lLmdldEF0dHJpYnV0ZSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuY2FsbChlLFwiY29udGVudGVkaXRhYmxlXCIpO3JldHVyblwiXCI9PT1ufHxcInRydWVcIj09PW59KGUpKSYmaXNOYU4ocGFyc2VJbnQoZS5nZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiKSwxMCkpPzA6ZS50YWJJbmRleH0sZD1mdW5jdGlvbihlLHQpe3JldHVybiBlLnRhYkluZGV4PT09dC50YWJJbmRleD9lLmRvY3VtZW50T3JkZXItdC5kb2N1bWVudE9yZGVyOmUudGFiSW5kZXgtdC50YWJJbmRleH0scD1mdW5jdGlvbihlKXtyZXR1cm5cIklOUFVUXCI9PT1lLnRhZ05hbWV9LGg9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXQud2lkdGgscj10LmhlaWdodDtyZXR1cm4gMD09PW4mJjA9PT1yfSxnPWZ1bmN0aW9uKGUsdCl7cmV0dXJuISh0LmRpc2FibGVkfHxzKHQpfHxmdW5jdGlvbihlKXtyZXR1cm4gcChlKSYmXCJoaWRkZW5cIj09PWUudHlwZX0odCl8fGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5kaXNwbGF5Q2hlY2sscj10LmdldFNoYWRvd1Jvb3Q7aWYoXCJoaWRkZW5cIj09PWdldENvbXB1dGVkU3R5bGUoZSkudmlzaWJpbGl0eSlyZXR1cm4hMDt2YXIgbz1hLmNhbGwoZSxcImRldGFpbHM+c3VtbWFyeTpmaXJzdC1vZi10eXBlXCIpP2UucGFyZW50RWxlbWVudDplO2lmKGEuY2FsbChvLFwiZGV0YWlsczpub3QoW29wZW5dKSAqXCIpKXJldHVybiEwO2lmKG4mJlwiZnVsbFwiIT09biYmXCJsZWdhY3ktZnVsbFwiIT09bil7aWYoXCJub24temVyby1hcmVhXCI9PT1uKXJldHVybiBoKGUpfWVsc2V7aWYoXCJmdW5jdGlvblwiPT10eXBlb2Ygcil7Zm9yKHZhciBpPWU7ZTspe3ZhciBzPWUucGFyZW50RWxlbWVudCxjPWwoZSk7aWYocyYmIXMuc2hhZG93Um9vdCYmITA9PT1yKHMpKXJldHVybiBoKGUpO2U9ZS5hc3NpZ25lZFNsb3Q/ZS5hc3NpZ25lZFNsb3Q6c3x8Yz09PWUub3duZXJEb2N1bWVudD9zOmMuaG9zdH1lPWl9aWYoZnVuY3Rpb24oZSl7dmFyIHQsbixyLG8saT1lJiZsKGUpLGE9bnVsbD09PSh0PWkpfHx2b2lkIDA9PT10P3ZvaWQgMDp0Lmhvc3Qscz0hMTtpZihpJiZpIT09ZSlmb3Iocz0hIShudWxsIT09KG49YSkmJnZvaWQgMCE9PW4mJm51bGwhPT0ocj1uLm93bmVyRG9jdW1lbnQpJiZ2b2lkIDAhPT1yJiZyLmNvbnRhaW5zKGEpfHxudWxsIT1lJiZudWxsIT09KG89ZS5vd25lckRvY3VtZW50KSYmdm9pZCAwIT09byYmby5jb250YWlucyhlKSk7IXMmJmE7KXt2YXIgYyx1LGY7cz0hKG51bGw9PT0odT1hPW51bGw9PT0oYz1pPWwoYSkpfHx2b2lkIDA9PT1jP3ZvaWQgMDpjLmhvc3QpfHx2b2lkIDA9PT11fHxudWxsPT09KGY9dS5vd25lckRvY3VtZW50KXx8dm9pZCAwPT09Znx8IWYuY29udGFpbnMoYSkpfXJldHVybiBzfShlKSlyZXR1cm4hZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aDtpZihcImxlZ2FjeS1mdWxsXCIhPT1uKXJldHVybiEwfXJldHVybiExfSh0LGUpfHxmdW5jdGlvbihlKXtyZXR1cm5cIkRFVEFJTFNcIj09PWUudGFnTmFtZSYmQXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGUuY2hpbGRyZW4pLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVyblwiU1VNTUFSWVwiPT09ZS50YWdOYW1lfSkpfSh0KXx8ZnVuY3Rpb24oZSl7aWYoL14oSU5QVVR8QlVUVE9OfFNFTEVDVHxURVhUQVJFQSkkLy50ZXN0KGUudGFnTmFtZSkpZm9yKHZhciB0PWUucGFyZW50RWxlbWVudDt0Oyl7aWYoXCJGSUVMRFNFVFwiPT09dC50YWdOYW1lJiZ0LmRpc2FibGVkKXtmb3IodmFyIG49MDtuPHQuY2hpbGRyZW4ubGVuZ3RoO24rKyl7dmFyIHI9dC5jaGlsZHJlbi5pdGVtKG4pO2lmKFwiTEVHRU5EXCI9PT1yLnRhZ05hbWUpcmV0dXJuISFhLmNhbGwodCxcImZpZWxkc2V0W2Rpc2FibGVkXSAqXCIpfHwhci5jb250YWlucyhlKX1yZXR1cm4hMH10PXQucGFyZW50RWxlbWVudH1yZXR1cm4hMX0odCkpfSx2PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIShmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHAoZSkmJlwicmFkaW9cIj09PWUudHlwZX0oZSkmJiFmdW5jdGlvbihlKXtpZighZS5uYW1lKXJldHVybiEwO3ZhciB0LG49ZS5mb3JtfHxsKGUpLHI9ZnVuY3Rpb24oZSl7cmV0dXJuIG4ucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbdHlwZT1cInJhZGlvXCJdW25hbWU9XCInK2UrJ1wiXScpfTtpZihcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZ2b2lkIDAhPT13aW5kb3cuQ1NTJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB3aW5kb3cuQ1NTLmVzY2FwZSl0PXIod2luZG93LkNTUy5lc2NhcGUoZS5uYW1lKSk7ZWxzZSB0cnl7dD1yKGUubmFtZSl9Y2F0Y2goZSl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJMb29rcyBsaWtlIHlvdSBoYXZlIGEgcmFkaW8gYnV0dG9uIHdpdGggYSBuYW1lIGF0dHJpYnV0ZSBjb250YWluaW5nIGludmFsaWQgQ1NTIHNlbGVjdG9yIGNoYXJhY3RlcnMgYW5kIG5lZWQgdGhlIENTUy5lc2NhcGUgcG9seWZpbGw6ICVzXCIsZS5tZXNzYWdlKSwhMX12YXIgbz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKGVbbl0uY2hlY2tlZCYmZVtuXS5mb3JtPT09dClyZXR1cm4gZVtuXX0odCxlLmZvcm0pO3JldHVybiFvfHxvPT09ZX0oZSl9KHQpfHxmKHQpPDB8fCFnKGUsdCkpfSxtPWZ1bmN0aW9uKGUpe3ZhciB0PXBhcnNlSW50KGUuZ2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIiksMTApO3JldHVybiEhKGlzTmFOKHQpfHx0Pj0wKX0sQz1mdW5jdGlvbiBlKHQpe3ZhciBuPVtdLHI9W107cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCxvKXt2YXIgaT0hIXQuc2NvcGVQYXJlbnQsYT1pP3Quc2NvcGVQYXJlbnQ6dCxsPWYoYSxpKSxzPWk/ZSh0LmNhbmRpZGF0ZXMpOmE7MD09PWw/aT9uLnB1c2guYXBwbHkobixzKTpuLnB1c2goYSk6ci5wdXNoKHtkb2N1bWVudE9yZGVyOm8sdGFiSW5kZXg6bCxpdGVtOnQsaXNTY29wZTppLGNvbnRlbnQ6c30pfSkpLHIuc29ydChkKS5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuaXNTY29wZT9lLnB1c2guYXBwbHkoZSx0LmNvbnRlbnQpOmUucHVzaCh0LmNvbnRlbnQpLGV9KSxbXSkuY29uY2F0KG4pfSx5PWZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuIG49KHQ9dHx8e30pLmdldFNoYWRvd1Jvb3Q/dShbZV0sdC5pbmNsdWRlQ29udGFpbmVyLHtmaWx0ZXI6di5iaW5kKG51bGwsdCksZmxhdHRlbjohMSxnZXRTaGFkb3dSb290OnQuZ2V0U2hhZG93Um9vdCxzaGFkb3dSb290RmlsdGVyOm19KTpjKGUsdC5pbmNsdWRlQ29udGFpbmVyLHYuYmluZChudWxsLHQpKSxDKG4pfSx3PWZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQ9dHx8e30pLmdldFNoYWRvd1Jvb3Q/dShbZV0sdC5pbmNsdWRlQ29udGFpbmVyLHtmaWx0ZXI6Zy5iaW5kKG51bGwsdCksZmxhdHRlbjohMCxnZXRTaGFkb3dSb290OnQuZ2V0U2hhZG93Um9vdH0pOmMoZSx0LmluY2x1ZGVDb250YWluZXIsZy5iaW5kKG51bGwsdCkpfSxiPWZ1bmN0aW9uKGUsdCl7aWYodD10fHx7fSwhZSl0aHJvdyBuZXcgRXJyb3IoXCJObyBub2RlIHByb3ZpZGVkXCIpO3JldHVybiExIT09YS5jYWxsKGUsbykmJnYodCxlKX0seD1yLmNvbmNhdChcImlmcmFtZVwiKS5qb2luKFwiLFwiKSxfPWZ1bmN0aW9uKGUsdCl7aWYodD10fHx7fSwhZSl0aHJvdyBuZXcgRXJyb3IoXCJObyBub2RlIHByb3ZpZGVkXCIpO3JldHVybiExIT09YS5jYWxsKGUseCkmJmcodCxlKX19LDk4Mjg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuRm9udHM9dm9pZCAwO2NvbnN0IG89cihuKDQ2NjgpKSxpPXIobig2MDM2KSksYT1yKG4oNTk0MSkpLGw9cihuKDI4MTMpKTt0LkZvbnRzPXtyZWd1bGFyOm8uZGVmYXVsdCxpdGFsaWM6aS5kZWZhdWx0LHNlbWlCb2xkOmEuZGVmYXVsdCxzZW1pQm9sZEl0YWxpYzpsLmRlZmF1bHR9fSw2MjE4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig5ODI4KSx0KX0sNDI0OTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn0sbz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkJ1dHRvblRleHRPbmx5PXQuQnV0dG9uU2Vjb25kYXJ5PXQuQnV0dG9uUHJpbWFyeT10LkJ1dHRvbj12b2lkIDA7Y29uc3QgaT1uKDU4OTMpLGE9byhuKDc1MTgpKSxsPW4oMTMzNSkscz1uKDk1MDcpLGM9big2MTI2KTt0LkJ1dHRvbj1lPT57dmFye2xhYmVsOnQsY2hpbGRyZW46bixzaXplOm89XCJiYXNlXCIsc2hhcGU6YT1cInNxdWFyZVwiLGtpbmQ6bD1cInByaW1hcnlcIixsYXlvdXQ6cz1cImZpdFwiLGhyZWY6Y309ZSxkPXIoZSxbXCJsYWJlbFwiLFwiY2hpbGRyZW5cIixcInNpemVcIixcInNoYXBlXCIsXCJraW5kXCIsXCJsYXlvdXRcIixcImhyZWZcIl0pO3JldHVybigwLGkuanN4KSh1LE9iamVjdC5hc3NpZ24oe2FzOmM/XCJhXCI6XCJidXR0b25cIixzaXplOm8sc2hhcGU6YSxraW5kOmwsbGF5b3V0OnN9LGQse2NoaWxkcmVuOnQ/KDAsaS5qc3gpKGYsT2JqZWN0LmFzc2lnbih7YWxpZ25JdGVtczpcImNlbnRlclwiLGp1c3RpZnlDb250ZW50OlwiY2VudGVyXCJ9LHtjaGlsZHJlbjp0fSkpOm59KSl9O2NvbnN0IHU9YS5kZWZhdWx0LmJ1dHRvbmBcbiAgLyogRGVmYXVsdCB2YWx1ZXMgdGhhdCBnZXQgb3ZlcnJpZGRlbiBieSB2YXJpYW50cyAqL1xuICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXRCYWNrZ3JvdW5kfTtcbiAgYm9yZGVyOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0QmFja2dyb3VuZH07XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5VGV4dH07XG5cbiAgLyogSW5qZWN0IHZhcmlhbnRzICovXG4gICR7KDAscy5nZXRWYXJpYW50Q1NTKShjLnZhcmlhbnRzLGMuVmFyaWFudC5zaXplKX1cbiAgJHsoMCxzLmdldFZhcmlhbnRDU1MpKGMudmFyaWFudHMsYy5WYXJpYW50LnNoYXBlKX1cbiAgJHsoMCxzLmdldFZhcmlhbnRDU1MpKGMudmFyaWFudHMsYy5WYXJpYW50LmtpbmQpfVxuICAkeygwLHMuZ2V0VmFyaWFudENTUykoYy52YXJpYW50cyxjLlZhcmlhbnQubGF5b3V0KX1cblxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbiAgb3V0bGluZTogbm9uZTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBsaW5lLWhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5saW5lSGVpZ2h0LnVpfTtcbiAgZm9udC13ZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUuZm9udFdlaWdodC5ib2xkfTtcbiAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIHZhcigtLW9wZW5maW4tdWktZ2xvYmFsVHJhbnNpdGlvbik7XG5cbiAgJjpub3QoOmRpc2FibGVkKSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5cbiAgJjpkaXNhYmxlZCxcbiAgJjphY3RpdmU6ZGlzYWJsZWQge1xuICAgIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dERpc2FibGVkfTtcbiAgICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dERpc2FibGVkfTtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0UGxhY2Vob2xkZXJ9O1xuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gIH1cbmAsZj0oMCxhLmRlZmF1bHQpKGwuQm94KWBcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YDAgJHtlLnB4LnhzbWFsbH1gfTtcbmA7dC5CdXR0b25QcmltYXJ5PWU9PigwLGkuanN4KSh0LkJ1dHRvbixPYmplY3QuYXNzaWduKHt9LGUse2tpbmQ6XCJwcmltYXJ5XCJ9KSksdC5CdXR0b25TZWNvbmRhcnk9ZT0+KDAsaS5qc3gpKHQuQnV0dG9uLE9iamVjdC5hc3NpZ24oe30sZSx7a2luZDpcInNlY29uZGFyeVwifSkpLHQuQnV0dG9uVGV4dE9ubHk9ZT0+KDAsaS5qc3gpKHQuQnV0dG9uLE9iamVjdC5hc3NpZ24oe30sZSx7a2luZDpcInRleHRPbmx5XCJ9KSl9LDYxMjY6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudmFyaWFudHM9dC5CdXR0b25TaGFwZT10LkJ1dHRvbkxheW91dD10LkJ1dHRvblNpemU9dC5CdXR0b25LaW5kPXQuVmFyaWFudD12b2lkIDA7Y29uc3Qgcj1uKDc1MTgpO3QuVmFyaWFudD17c2hhcGU6XCJzaGFwZVwiLHNpemU6XCJzaXplXCIsa2luZDpcImtpbmRcIixsYXlvdXQ6XCJsYXlvdXRcIn0sdC5CdXR0b25LaW5kPXtwcmltYXJ5OlwicHJpbWFyeVwiLHNlY29uZGFyeTpcInNlY29uZGFyeVwiLHRleHRPbmx5OlwidGV4dE9ubHlcIn0sdC5CdXR0b25TaXplPXtzbWFsbDpcInNtYWxsXCIsYmFzZTpcImJhc2VcIixsYXJnZTpcImxhcmdlXCJ9LHQuQnV0dG9uTGF5b3V0PXtmaXQ6XCJmaXRcIixmdWxsOlwiZnVsbFwifSx0LkJ1dHRvblNoYXBlPXtzcXVhcmU6XCJzcXVhcmVcIixwaWxsOlwicGlsbFwifSx0LnZhcmlhbnRzPXtbdC5WYXJpYW50LnNpemVdOntbdC5CdXR0b25TaXplLmJhc2VdOnIuY3NzYFxuICAgICAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YCR7ZS5weC5zbWFsbH0gJHtlLnB4LmxhcmdlfWB9O1xuICAgICAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmJhc2V9O1xuICAgIGAsW3QuQnV0dG9uU2l6ZS5zbWFsbF06ci5jc3NgXG4gICAgICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5gJHtlLnB4LnhzbWFsbH0gJHtlLnB4LmJhc2V9YH07XG4gICAgICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuc21hbGx9O1xuICAgIGAsW3QuQnV0dG9uU2l6ZS5sYXJnZV06ci5jc3NgXG4gICAgICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5gJHtlLnB4LmJhc2V9ICR7ZS5weC54bGFyZ2V9YH07XG4gICAgICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUubGFyZ2V9O1xuICAgIGB9LFt0LlZhcmlhbnQuc2hhcGVdOntbdC5CdXR0b25TaGFwZS5zcXVhcmVdOnIuY3NzYFxuICAgICAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMuc21hbGx9O1xuICAgIGAsW3QuQnV0dG9uU2hhcGUucGlsbF06ci5jc3NgXG4gICAgICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5waWxsfTtcbiAgICBgfSxbdC5WYXJpYW50LmxheW91dF06e1t0LkJ1dHRvbkxheW91dC5maXRdOnIuY3NzYFxuICAgICAgd2lkdGg6IGZpdC1jb250ZW50O1xuICAgIGAsW3QuQnV0dG9uTGF5b3V0LmZ1bGxdOnIuY3NzYFxuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgYH0sW3QuVmFyaWFudC5raW5kXTp7W3QuQnV0dG9uS2luZC5wcmltYXJ5XTpyLmNzc2BcbiAgICAgIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFByaW1hcnl9O1xuICAgICAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5fTtcblxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFByaW1hcnlIb3Zlcn07XG4gICAgICB9XG5cbiAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kUHJpbWFyeUFjdGl2ZX07XG4gICAgICB9XG5cbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFByaW1hcnlGb2N1c2VkfTtcbiAgICAgIH1cbiAgICBgLFt0LkJ1dHRvbktpbmQuc2Vjb25kYXJ5XTpyLmNzc2BcbiAgICAgIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFNlY29uZGFyeX07XG4gICAgICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFNlY29uZGFyeX07XG4gICAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kU2Vjb25kYXJ5VGV4dH07XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRTZWNvbmRhcnlIb3Zlcn07XG4gICAgICB9XG5cbiAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kU2Vjb25kYXJ5QWN0aXZlfTtcbiAgICAgIH1cblxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kU2Vjb25kYXJ5Rm9jdXNlZH07XG4gICAgICB9XG4gICAgYCxbdC5CdXR0b25LaW5kLnRleHRPbmx5XTpyLmNzc2BcbiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuXG4gICAgICAmOmFjdGl2ZSB7XG4gICAgICAgIG9wYWNpdHk6IDAuODtcbiAgICAgIH1cblxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0Rm9jdXNlZH07XG4gICAgICB9XG4gICAgYH19fSw0MTMwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig0MjQ5KSx0KSxvKG4oNjEyNiksdCl9LDM5MTE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2FyZENvbnRhaW5lcj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGk9cihuKDc1MTgpKSxhPW4oOTUwNyksbD1uKDEzMzUpO3QuQ2FyZENvbnRhaW5lcj1lPT4oMCxvLmpzeCkocyxPYmplY3QuYXNzaWduKHtzdHlsZTp7bWF4SGVpZ2h0OmUubWF4SGVpZ2h0LG92ZXJmbG93WTpcImF1dG9cIn0saWQ6XCJjYXJkLWNvbnRhaW5lclwiLFwiZGF0YS10ZXN0aWRcIjpcImNhcmQtY29udGFpbmVyXCJ9LHtjaGlsZHJlbjooMCxvLmpzeCkoYyx7Y2hpbGRyZW46ZS5jaGlsZHJlbn0pfSkpO2NvbnN0IHM9KDAsaS5kZWZhdWx0KShsLkJveClgXG4gIGRpc3BsYXk6IGJsb2NrO1xuICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDN9O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ1fTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+ZS5weC54c21hbGx9ICR7KHt0aGVtZTplfSk9PmUucHgueHNtYWxsfVxuICAgICR7KHt0aGVtZTplfSk9PmUucHgubGFyZ2V9IDBweDtcbiAgd2lkdGg6IDEwMCU7XG4gICR7YS5NaXhpbnMuc2Nyb2xsYmFyLmJhc2V9O1xuICBnYXA6ICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG5gLGM9aS5kZWZhdWx0LmRpdmBcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH0gJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH0gMHB4XG4gICAgJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcbiAgd2lkdGg6IDEwMCU7XG5gfSwxMjQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ29sbGFwc2libGVDYXJkU3RhdGVsZXNzPXQuQ29sbGFwc2libGVDYXJkPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksaT1uKDY2ODkpLGE9cihuKDc1MTgpKSxsPW4oMzEzNikscz1uKDk2MzQpLGM9bigxMzM1KSx1PW4oMzkxMSksZj1uKDc3NjkpLGQ9big5NTA3KTt0LkNvbGxhcHNpYmxlQ2FyZD0oMCxpLmZvcndhcmRSZWYpKCgoZSxuKT0+e2NvbnN0W3IsYV09KDAsaS51c2VTdGF0ZSkoZS5leHBhbmRlZHx8ITEpO3JldHVybigwLG8uanN4KSh0LkNvbGxhcHNpYmxlQ2FyZFN0YXRlbGVzcyxPYmplY3QuYXNzaWduKHt9LGUse3JlZjpuLGV4cGFuZGVkOnIsb25FeHBhbmQ6ZT0+YSghZSl9KSl9KSksdC5Db2xsYXBzaWJsZUNhcmQuZGlzcGxheU5hbWU9XCJDb2xsYXBzaWJsZUNhcmRcIix0LkNvbGxhcHNpYmxlQ2FyZFN0YXRlbGVzcz0oMCxpLmZvcndhcmRSZWYpKCgoZSx0KT0+e3ZhciBuLHI7cmV0dXJuKDAsby5qc3hzKShwLE9iamVjdC5hc3NpZ24oe1wiZGF0YS10ZXN0aWRcIjpcImNvbGxhcHNpYmxlLWNhcmRcIn0se2NoaWxkcmVuOlsoMCxvLmpzeHMpKGcsT2JqZWN0LmFzc2lnbih7XCJhcmlhLWV4cGFuZGVkXCI6ZS5leHBhbmRlZCxcImRhdGEtdGVzdGlkXCI6XCJoZWFkaW5nLWNvbnRhaW5lclwiLHJlZjp0LHpJbmRleDpudWxsPT09KG49ZS5oZWFkZXJTZXR0aW5ncyl8fHZvaWQgMD09PW4/dm9pZCAwOm4uekluZGV4LGZpeGVkSGVhZGVyOm51bGw9PT0ocj1lLmhlYWRlclNldHRpbmdzKXx8dm9pZCAwPT09cj92b2lkIDA6ci5maXhlZEhlYWRlcixvbkNsaWNrOigpPT5lLm9uRXhwYW5kKGUuZXhwYW5kZWQpLHRhYkluZGV4OjAsb25LZXlEb3duOnQ9Pntzd2l0Y2godC5jb2RlKXtjYXNlXCJFbnRlclwiOmNhc2VcIlNwYWNlXCI6dC5wcmV2ZW50RGVmYXVsdCgpLGUub25FeHBhbmQoZS5leHBhbmRlZCl9fX0se2NoaWxkcmVuOlsoMCxvLmpzeCkoaCx7Y2hpbGRyZW46ZS50aXRsZX0pLCgwLG8uanN4cykoXCJkaXZcIixPYmplY3QuYXNzaWduKHtpZDpcImljb24tY29udGFpbmVyXCJ9LHtjaGlsZHJlbjpbdm9pZCAwIT09ZS5iYWRnZVRleHQmJigwLG8uanN4KShsLkJhZGdlLHtjb3VudDplLmJhZGdlVGV4dCxpZDpcImNvbGxhcHNpYmxlLWNhcmQtaGVhZGluZy1iYWRnZVwiLFwiZGF0YS10ZXN0aWRcIjpcImNvbGxhcHNpYmxlLWNhcmQtaGVhZGluZy1iYWRnZVwifSksKDAsby5qc3gpKHMuSWNvbix7aWNvbjplLmV4cGFuZGVkP1wiQ2hldnJvblVwSWNvblwiOlwiQ2hldnJvbkRvd25JY29uXCJ9KV19KSldfSkpLGUuZXhwYW5kZWQmJigwLG8uanN4KSh1LkNhcmRDb250YWluZXIsT2JqZWN0LmFzc2lnbih7bWF4SGVpZ2h0OmUubWF4SGVpZ2h0fHxcIm5vbmVcIn0se2NoaWxkcmVuOigwLG8uanN4KShcImRpdlwiLHtjaGlsZHJlbjplLmNoaWxkcmVufSl9KSldfSkpfSkpLHQuQ29sbGFwc2libGVDYXJkU3RhdGVsZXNzLmRpc3BsYXlOYW1lPVwiQ29sbGFwc2libGVDYXJkU3RhdGVsZXNzXCI7Y29uc3QgcD1hLmRlZmF1bHQuZGl2YFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDEwMCU7XG5gLGg9KDAsYS5kZWZhdWx0KShmLlRleHQpYFxuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgJHtkLk1peGlucy50ZXh0T3ZlcmZsb3d9O1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuYCxnPSgwLGEuZGVmYXVsdCkoYy5Cb3gpYFxuICBwb3NpdGlvbjogJHsoe2ZpeGVkSGVhZGVyOmV9KT0+ZT9cInN0aWNreVwiOlwicmVsYXRpdmVcIn07XG4gIHRvcDogJHsoe2ZpeGVkSGVhZGVyOmV9KT0+ZT8wOnZvaWQgMH07XG4gIHotaW5kZXg6ICR7KHt6SW5kZXg6ZX0pPT5lfTtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQzfTtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNX07XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDV9O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBnYXA6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGxpbmUtaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmxpbmVIZWlnaHQuaGVhZGluZ307XG4gIG91dGxpbmU6IG5vbmU7XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG4gIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciB2YXIoLS1vcGVuZmluLXVpLWdsb2JhbFRyYW5zaXRpb24pO1xuICB3aWR0aDogMTAwJTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuICAjaWNvbi1jb250YWluZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBtYXJnaW4tbGVmdDogMTBweDtcbiAgfVxuXG4gICNjb2xsYXBzaWJsZS1jYXJkLWhlYWRpbmctYmFkZ2Uge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFByaW1hcnl9O1xuICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgfVxuXG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kMn07XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNX07XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNX07XG4gIH1cblxuICAmOmZvY3VzIHtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJvcmRlck5ldXRyYWx9O1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYm9yZGVyTmV1dHJhbH07XG4gIH1cbmB9LDc0MDE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDEyNCksdCl9LDk2NDQ6KGUsdCk9Pnt2YXIgbjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkV4cGFuZERpcmVjdGlvbj12b2lkIDAsKG49dC5FeHBhbmREaXJlY3Rpb258fCh0LkV4cGFuZERpcmVjdGlvbj17fSkpW24uVXA9MF09XCJVcFwiLG5bbi5Eb3duPTFdPVwiRG93blwifSw0MDIxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkV4cGFuZGFibGVCdXR0b249dm9pZCAwO2NvbnN0IG89big1ODkzKSxpPW4oNjY4OSksYT1uKDQxMzApLGw9cihuKDc1MTgpKSxzPW4oOTYzNCksYz1uKDkxNDEpLHU9bigzMDMwKSxmPW4oMTMzNSksZD1uKDk2NDQpO3QuRXhwYW5kYWJsZUJ1dHRvbj1lPT57dmFyIHQsbixyLGwscyxwO2NvbnN0W3csYl09KDAsaS51c2VTdGF0ZSkoe3Nob3c6ITEscmVxdWVzdGVkQnlDb2xsYXBzZTohMX0pLHg9e3NpemU6ZS5zaXplLGtpbmQ6ZS5raW5kLGRpc2FibGVkOmUuZGlzYWJsZWQsdGFiSW5kZXg6ZS50YWJJbmRleH0sXz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse3NoYXBlOmEuQnV0dG9uU2hhcGUuc3F1YXJlLFwiYXJpYS1sYWJlbFwiOm51bGwhPT0odD1lW1wiYXJpYS1sYWJlbFwiXSkmJnZvaWQgMCE9PXQ/dDpgUHJpbWFyeSBCdXR0b24gJHtlLnRpdGxlfWB9KSxPPW51bGwhPT0obj1lLmV4cGFuZERpcmVjdGlvbikmJnZvaWQgMCE9PW4/bjpkLkV4cGFuZERpcmVjdGlvbi5Eb3duO3JldHVybigwLGkudXNlRWZmZWN0KSgoKCk9PntpZighdy5yZXF1ZXN0ZWRCeUNvbGxhcHNlKXJldHVybjtjb25zdCBlPXNldFRpbWVvdXQoKCgpPT5iKHtyZXF1ZXN0ZWRCeUNvbGxhcHNlOiExLHNob3c6ITF9KSksMjAwKTtyZXR1cm4oKT0+Y2xlYXJUaW1lb3V0KGUpfSksW3cucmVxdWVzdGVkQnlDb2xsYXBzZV0pLCgwLG8uanN4cykoeSx7Y2hpbGRyZW46WygwLG8uanN4cykoQyx7Y2hpbGRyZW46WygwLG8uanN4KShnLE9iamVjdC5hc3NpZ24oe30sXyx7Y2hpbGRyZW46KDAsby5qc3gpKHYse2NoaWxkcmVuOm51bGwhPT0ocj1lLmNoaWxkcmVuKSYmdm9pZCAwIT09cj9yOl8udGl0bGV9KX0pKSxlLnNlY29uZGFyeUJ1dHRvbnMmJmUuc2Vjb25kYXJ5QnV0dG9ucy5sZW5ndGg+MCYmKDAsby5qc3gpKGYuQm94LE9iamVjdC5hc3NpZ24oe2lkOlwiZHJvcGRvd24tY29udGFpbmVyXCJ9LHtjaGlsZHJlbjooMCxvLmpzeHMpKG0sT2JqZWN0LmFzc2lnbih7fSx4LHtyb2xlOlwiY29tYm9ib3hcIixvbkNsaWNrOigpPT57dy5yZXF1ZXN0ZWRCeUNvbGxhcHNlfHxiKHtyZXF1ZXN0ZWRCeUNvbGxhcHNlOiExLHNob3c6IXcuc2hvd30pfSxcImFyaWEtbGFiZWxcIjpcIkV4cGFuZCBTZWNvbmRhcnkgQnV0dG9ucyBQYW5lbFwiLFwiYXJpYS1leHBhbmRlZFwiOncuc2hvd30se2NoaWxkcmVuOltPPT09ZC5FeHBhbmREaXJlY3Rpb24uRG93biYmKDAsby5qc3gpKGgse2tpbmQ6bnVsbCE9PShsPWUua2luZCkmJnZvaWQgMCE9PWw/bDphLkJ1dHRvbktpbmQucHJpbWFyeSxpY29uOlwiQ2FyZXREb3duSWNvblwifSksTz09PWQuRXhwYW5kRGlyZWN0aW9uLlVwJiYoMCxvLmpzeCkoaCx7a2luZDpudWxsIT09KHM9ZS5raW5kKSYmdm9pZCAwIT09cz9zOmEuQnV0dG9uS2luZC5wcmltYXJ5LGljb246XCJDYXJldFVwSWNvblwifSldfSkpfSkpXX0pLGUuc2Vjb25kYXJ5QnV0dG9ucyYmZS5zZWNvbmRhcnlCdXR0b25zLmxlbmd0aD4wJiYoMCxvLmpzeCkoYy5BbmltYXRlUHJlc2VuY2Use2NoaWxkcmVuOncuc2hvdyYmKDAsby5qc3gpKHUuRXhwYW5kYWJsZVBhbmVsLHtleHBhbmREaXJlY3Rpb246TyxzZWNvbmRhcnlCdXR0b25zOm51bGwhPT0ocD1lLnNlY29uZGFyeUJ1dHRvbnMpJiZ2b2lkIDAhPT1wP3A6W10sc3RyZXRjaDplLnN0cmV0Y2hFeHBhbmRhYmxlUGFuZWwsY2xvc2VQYW5lbE9uU2Vjb25kYXJ5QnV0dG9uQ2xpY2s6ZS5jbG9zZVBhbmVsT25TZWNvbmRhcnlCdXR0b25DbGljayxvbkNvbGxhcHNlUmVxdWVzdDooKT0+Yih7c2hvdzohMSxyZXF1ZXN0ZWRCeUNvbGxhcHNlOiEwfSksYnV0dG9uU2l6ZTplLnNpemUsZG9jdW1lbnQ6ZS5kb2N1bWVudH0pfSldfSl9O2NvbnN0IHA9e1thLkJ1dHRvbktpbmQucHJpbWFyeV06ZT0+ZS5wYWxldHRlLmJyYW5kUHJpbWFyeVRleHQsW2EuQnV0dG9uS2luZC5zZWNvbmRhcnldOmU9PmUucGFsZXR0ZS5icmFuZFNlY29uZGFyeVRleHQsW2EuQnV0dG9uS2luZC50ZXh0T25seV06ZT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fSxoPSgwLGwuZGVmYXVsdCkocy5JY29uKWBcbiAgc3ZnIHBhdGgge1xuICAgIGNvbG9yOiAkeyh7dGhlbWU6ZSxraW5kOnR9KT0+cFt0XShlKX07XG4gIH1cbiAgbGluZS1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUubGluZUhlaWdodC51aX07XG4gIGZvbnQtd2VpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRXZWlnaHQuYm9sZH07XG5gLGc9KDAsbC5kZWZhdWx0KShhLkJ1dHRvbilgXG4gIG1hcmdpbi1yaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5weC54c21hbGx9O1xuYCx2PSgwLGwuZGVmYXVsdCkoZi5Cb3gpYFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgZGlzcGxheTogYmxvY2s7XG4gIG92ZXJmbG93OiBoaWRkZW47XG5gLG09KDAsbC5kZWZhdWx0KShhLkJ1dHRvbilgXG4gIHdpZHRoOiAke2U9PmUudGhlbWUucHgueHhsYXJnZX07XG4gIHBhZGRpbmc6IDA7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuYCxDPWwuZGVmYXVsdC5kaXZgXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5gLHk9bC5kZWZhdWx0LmRpdmBcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5gfSwyMTI4OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnNldHVwRXhwYW5kYWJsZVBhbmVsPXZvaWQgMDtjb25zdCByPW4oOTY0NCk7dC5zZXR1cEV4cGFuZGFibGVQYW5lbD0oZSx0LG49ITEpPT57aWYoIWV8fDA9PT1lLmNoaWxkTm9kZXMubGVuZ3RoKXJldHVybjtjb25zdCBvPWUucGFyZW50RWxlbWVudCxpPW51bGw9PW8/dm9pZCAwOm8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKCFpKXJldHVybjtjb25zdCBsPWEuaGVpZ2h0LHM9YS53aWR0aDw9aS53aWR0aHx8bj9hLndpZHRoOmkud2lkdGgsYz1pLngrcz5kb2N1bWVudC5ib2R5LmNsaWVudFdpZHRofHxzPGkud2lkdGg7ZS5zdHlsZS53aWR0aD1gJHtzfXB4YCxlLnN0eWxlLm9wYWNpdHk9XCIxXCIsYz9lLnN0eWxlLnJpZ2h0PVwiMHB4XCI6ZS5zdHlsZS5sZWZ0PVwiMHB4XCIsdD09PXIuRXhwYW5kRGlyZWN0aW9uLkRvd24mJihlLnN0eWxlLnRvcD1gJHtpLmhlaWdodH1weGApLHQ9PT1yLkV4cGFuZERpcmVjdGlvbi5VcCYmKGUuc3R5bGUudG9wPS0xKmwrXCJweFwiKX19LDMwMzA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuRXhwYW5kYWJsZVBhbmVsPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksaT1yKG4oNzUxOCkpLGE9big5MTQxKSxsPW4oNDEzMCkscz1uKDEzMzUpLGM9bigyMTI4KSx1PXIobig0NDgzKSksZj17dHlwZTpcInNwcmluZ1wiLGR1cmF0aW9uOi4yLGJvdW5jZTouMjV9O3QuRXhwYW5kYWJsZVBhbmVsPWU9Pnt2YXIgdDtjb25zdCBuPWAke2UucGFuZWxJZH0tZXhwYW5kYWJsZS1wYW5lbGA7cmV0dXJuKDAsby5qc3gpKHUuZGVmYXVsdCxPYmplY3QuYXNzaWduKHtmb2N1c1RyYXBPcHRpb25zOntmYWxsYmFja0ZvY3VzOmAjJHtufWAsY2xpY2tPdXRzaWRlRGVhY3RpdmF0ZXM6ITAsb25EZWFjdGl2YXRlOmUub25Db2xsYXBzZVJlcXVlc3QsaW5pdGlhbEZvY3VzOiExLGRvY3VtZW50OmUuZG9jdW1lbnQscmV0dXJuRm9jdXNPbkRlYWN0aXZhdGU6ITF9fSx7Y2hpbGRyZW46KDAsby5qc3gpKGgsT2JqZWN0LmFzc2lnbih7cmVmOnQ9PigwLGMuc2V0dXBFeHBhbmRhYmxlUGFuZWwpKHQsZS5leHBhbmREaXJlY3Rpb24sZS5zdHJldGNoKSx0YWJJbmRleDowLGlkOm4saW5pdGlhbDpcImluaXRpYWxcIixleGl0OlwiaGlkZGVuXCIsYnV0dG9uU2l6ZTpudWxsIT09KHQ9ZS5idXR0b25TaXplKSYmdm9pZCAwIT09dD90OmwuQnV0dG9uU2l6ZS5iYXNlLGFuaW1hdGU6XCJ2aXNpYmxlXCIscm9sZTpcIm1lbnVcIix0cmFuc2l0aW9uOmYsb25Nb3VzZU92ZXI6KCk9Pnt2YXIgZTtyZXR1cm4gbnVsbD09PShlPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmJsdXIoKX19LHtjaGlsZHJlbjplLnNlY29uZGFyeUJ1dHRvbnMubWFwKCgodCxuKT0+KDAsby5qc3gpKGwuQnV0dG9uLE9iamVjdC5hc3NpZ24oe2NsYXNzTmFtZTpcIm1lbnUtaXRlbVwiLHRhYkluZGV4Om4rMSx0aXRsZTp0LnRpdGxlLHJvbGU6XCJtZW51aXRlbVwiLHNpemU6ZS5idXR0b25TaXplLGRpc2FibGVkOnQuZGlzYWJsZWQsa2luZDpcInRleHRPbmx5XCIsb25DbGljazpuPT4oKHQsbik9PntlLmNsb3NlUGFuZWxPblNlY29uZGFyeUJ1dHRvbkNsaWNrPyhuLm9uQ2xpY2sodCksZS5vbkNvbGxhcHNlUmVxdWVzdCgpKTpuLm9uQ2xpY2sodCwoKCk9PmUub25Db2xsYXBzZVJlcXVlc3QoKSkpfSkobix0KSxcImFyaWEtbGFiZWxcIjp0LnRpdGxlfSx7Y2hpbGRyZW46KDAsby5qc3gpKGQsT2JqZWN0LmFzc2lnbih7XCJhcmlhLWxhYmVsXCI6dC50aXRsZX0se2NoaWxkcmVuOnQudGl0bGV9KSl9KSxuKSkpfSksXCJleHBhbmRhYmxlUGFuZWxcIil9KSl9O2NvbnN0IGQ9KDAsaS5kZWZhdWx0KShzLkJveClgXG4gIHBhZGRpbmctYm90dG9tOiAxcHg7XG4gIHBhZGRpbmctdG9wOiAxcHg7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICBkaXNwbGF5OiBibG9jaztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbmAscD17W2wuQnV0dG9uU2l6ZS5zbWFsbF06ZT0+ZS5weC5zbWFsbCxbbC5CdXR0b25TaXplLmJhc2VdOmU9PmUucHguYmFzZSxbbC5CdXR0b25TaXplLmxhcmdlXTplPT5lLnB4LmxhcmdlfSxoPSgwLGkuZGVmYXVsdCkoYS5tb3Rpb24uZGl2KWBcbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMuc21hbGx9O1xuICBvcGFjaXR5OiAwO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogJHtlPT5lLnRoZW1lLnB4Lnh4eGxhcmdlfTtcbiAgbWF4LXdpZHRoOiBtYXgtY29udGVudDtcbiAgbWluLXdpZHRoOiA4MHB4O1xuICBiYWNrZ3JvdW5kOiAke2U9PmUudGhlbWUucGFsZXR0ZS5iYWNrZ3JvdW5kNH07XG4gIGJveC1zaGFkb3c6ICR7ZT0+ZS50aGVtZS5zaGFkb3cuYmFzZX07XG4gIGhlaWdodDogbWF4LWNvbnRlbnQ7XG4gIHotaW5kZXg6IDEwMDtcblxuICAubWVudS1pdGVtIHtcbiAgICBib3JkZXItcmFkaXVzOiB1bnNldDtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIGJvcmRlcjogdHJhbnNwYXJlbnQ7XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgb3ZlcmZsb3c6IGNsaXA7XG4gICAgJiA+ICoge1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICB9XG4gICAgZm9udC13ZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUuZm9udFdlaWdodC5ub3JtYWx9O1xuICAgIHBhZGRpbmctdG9wOiAkeyh7dGhlbWU6ZSxidXR0b25TaXplOnR9KT0+cFt0XShlKX07XG4gICAgcGFkZGluZy1ib3R0b206ICR7KHt0aGVtZTplLGJ1dHRvblNpemU6dH0pPT5wW3RdKGUpfTtcbiAgICBwYWRkaW5nLWxlZnQ6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuXG4gICAgOmZpcnN0LWNoaWxkIHtcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG4gICAgfVxuXG4gICAgOmxhc3QtY2hpbGQge1xuICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMuc21hbGx9O1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbiAgICB9XG5cbiAgICAmOmZvY3VzLFxuICAgICY6aG92ZXIge1xuICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICBiYWNrZ3JvdW5kOiAke2U9PmUudGhlbWUucGFsZXR0ZS5iYWNrZ3JvdW5kMn07XG4gICAgfVxuXG4gICAgJjpkaXNhYmxlZCxcbiAgICAmOmFjdGl2ZTpkaXNhYmxlZCB7XG4gICAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHRJbmFjdGl2ZX07XG4gICAgICBiYWNrZ3JvdW5kOiAke2U9PmUudGhlbWUucGFsZXR0ZS5iYWNrZ3JvdW5kNH07XG4gICAgICBvcGFjaXR5OiB1bnNldDtcbiAgICB9XG4gIH1cbmB9LDQ5MjU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDQwMjEpLHQpLG8obig5NjQ0KSx0KX0sOTY1NDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Db250ZW50TWVudT10LmZpbmRQYXRoVG9JdGVtV2l0aElkPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksaT1uKDY2ODkpLGE9bigzMTM3KSxsPXIobig3NTE4KSkscz1uKDEzMzUpO3QuZmluZFBhdGhUb0l0ZW1XaXRoSWQ9KGUsbixyKT0+e2lmKGUuaWQ9PT1yKXJldHVybiBuO2lmKGUuY2hpbGRyZW4pZm9yKGxldCBvPTA7bzxlLmNoaWxkcmVuLmxlbmd0aDsrK28pe2NvbnN0IGk9ZS5jaGlsZHJlbltvXTtuLnB1c2goaS5pZCk7Y29uc3QgYT0oMCx0LmZpbmRQYXRoVG9JdGVtV2l0aElkKShpLG4scik7aWYoYSlyZXR1cm4gYTtuLnBvcCgpfX0sdC5Db250ZW50TWVudT0oe3N0cnVjdHVyZTplLGhhbmRsZUNsaWNrSXRlbTpuLGhhbmRsZUJvb2ttYXJrSXRlbTpyLHRhcmdldElkOmx9KT0+e2NvbnN0W3MsdV09KDAsaS51c2VTdGF0ZSkoW10pLFtmLGRdPSgwLGkudXNlU3RhdGUpKCkscD0oMCxpLnVzZVJlZikobnVsbCksaD0oMCxpLnVzZUNhbGxiYWNrKSgoKCk9PntwLmN1cnJlbnQmJnAuY3VycmVudC5zY3JvbGxUbyh7bGVmdDpwLmN1cnJlbnQuc2Nyb2xsV2lkdGgsYmVoYXZpb3I6XCJzbW9vdGhcIn0pfSksW10pO3JldHVybigwLGkudXNlRWZmZWN0KSgoKCk9PntpZihsKXtjb25zdCBuPSgwLHQuZmluZFBhdGhUb0l0ZW1XaXRoSWQpKHtpZDpcIlwiLGNoaWxkcmVuOmV9LFtdLGwpO2lmKG4pcmV0dXJuIHUobiksdm9pZCBkKGBjb250ZW50LW1lbnUtaXRlbS0ke2x9YCl9ZCh2b2lkIDApfSksW2xdKSwoMCxpLnVzZUVmZmVjdCkoKCgpPT57aCgpfSksW3NdKSwoMCxvLmpzeCkoYyxPYmplY3QuYXNzaWduKHtyZWY6cH0se2NoaWxkcmVuOigwLG8uanN4KShhLkNvbnRlbnRNZW51Q29sdW1uLHtlbnRyaWVzOmUsZGVwdGg6MCxwYXRoOnMsdGFyZ2V0SXRlbUlkOmYsc2V0Q3VycmVudGx5U2VsZWN0ZWRQYXRoOnUsaGFuZGxlQ2xpY2tJdGVtOm4saGFuZGxlQm9va21hcmtJdGVtOnJ9KX0pKX07Y29uc3QgYz0oMCxsLmRlZmF1bHQpKHMuQm94KWBcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMTAwJTtcblxuICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDF9O1xuICBkaXNwbGF5OiBmbGV4O1xuXG4gIG92ZXJmbG93LXg6IGF1dG87XG4gIG92ZXJmbG93LXk6IGhpZGRlbjtcbmB9LDMxMzc6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ29udGVudE1lbnVDb2x1bW49dm9pZCAwO2NvbnN0IG89big1ODkzKSxpPXIobig3NTE4KSksYT1uKDY3NTgpLGw9big2Njg5KSxzPW4oMjY1OSk7dC5Db250ZW50TWVudUNvbHVtbj0oe2VudHJpZXM6ZSxkZXB0aDpuLHBhdGg6cix0YXJnZXRJdGVtSWQ6aSxzZXRDdXJyZW50bHlTZWxlY3RlZFBhdGg6YSxoYW5kbGVDbGlja0l0ZW06ZixoYW5kbGVCb29rbWFya0l0ZW06ZH0pPT57Y29uc3QgcD0oMCxsLnVzZVJlZikobnVsbCksaD1yW25dLGc9aD9lLmZpbmQoKGU9PmUuaWQ9PT1oKSk6dm9pZCAwOygwLGwudXNlRWZmZWN0KSgoKCk9PntpZihpJiZnKXtjb25zdCBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBjb250ZW50LW1lbnUtaXRlbS0ke2cuaWR9YCk7aWYoZSYmcC5jdXJyZW50KXtjb25zdCB0PWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLXAuY3VycmVudC5jaGlsZHJlblswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7cC5jdXJyZW50LnNjcm9sbFRvKHt0b3A6dCxiZWhhdmlvcjpcInNtb290aFwifSl9fX0pLFtpXSk7Y29uc3Qgdj0oMCxsLnVzZUNhbGxiYWNrKSgoZT0+e2EoKHQ9PmU/KHRbbl09ZSx0LnNsaWNlKDAsbisxKSk6dC5zbGljZSgwLG4pKSl9KSxbXSk7cmV0dXJuKDAsby5qc3hzKShvLkZyYWdtZW50LHtjaGlsZHJlbjpbKDAsby5qc3gpKGMsT2JqZWN0LmFzc2lnbih7cmVmOnB9LHtjaGlsZHJlbjplLmxlbmd0aD4wPygwLG8uanN4KShcImRpdlwiLHtjaGlsZHJlbjplLm1hcCgoZT0+KDAsby5qc3gpKHMuQ29udGVudE1lbnVJdGVtLHtlbnRyeTplLGFjdGl2ZTpcImZvbGRlclwiPT09ZS50eXBlJiZlLmlkPT09aCxoYW5kbGVDbGljazplPT57XCJmb2xkZXJcIj09PWUudHlwZT92KGUuaWQpOmYoZSl9LGhhbmRsZUJvb2ttYXJrOmR9LGUuaWQpKSl9KTooMCxvLmpzeCkodSx7Y2hpbGRyZW46XCJObyBjb250ZW50IGF2YWlsYWJsZS5cIn0pfSkpLGcmJlwiZm9sZGVyXCI9PT1nLnR5cGUmJigwLG8uanN4KSh0LkNvbnRlbnRNZW51Q29sdW1uLHtlbnRyaWVzOmcuY2hpbGRyZW4sZGVwdGg6bisxLHBhdGg6cix0YXJnZXRJdGVtSWQ6aSxzZXRDdXJyZW50bHlTZWxlY3RlZFBhdGg6YSxoYW5kbGVDbGlja0l0ZW06ZixoYW5kbGVCb29rbWFya0l0ZW06ZH0pXX0pfTtjb25zdCBjPSgwLGkuZGVmYXVsdCkoYS5NZW51RnJhbWUpYFxuICBoZWlnaHQ6IDEwMCU7XG4gIHdpZHRoOiAyNDFweDtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+ZS5weC54c21hbGx9O1xuICBvdmVyZmxvdy15OiBhdXRvO1xuXG4gIHBvc2l0aW9uOiB1bnNldDtcbiAgZmxleC1zaHJpbms6IDA7XG5cbiAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ1fTtcbmAsdT1pLmRlZmF1bHQuZGl2YFxuICBoZWlnaHQ6IDEwMCU7XG5cbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG5gfSwyNjU5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pfTpmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10fSksaT10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCIhPT1uJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmcih0LGUsbik7cmV0dXJuIG8odCxlKSx0fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNvbnRlbnRNZW51SXRlbT12b2lkIDA7Y29uc3QgYT1uKDU4OTMpLGw9aShuKDc1MTgpKSxzPW4oNjc1OCksYz1uKDk2MzQpLHU9bigxMDA5KTt0LkNvbnRlbnRNZW51SXRlbT0oe2VudHJ5OmUsYWN0aXZlOnQsaGFuZGxlQ2xpY2s6bixoYW5kbGVCb29rbWFyazpyfSk9Pntjb25zdHtsYWJlbDpvLHR5cGU6aX09ZTtyZXR1cm4oMCxhLmpzeHMpKHAsT2JqZWN0LmFzc2lnbih7aWQ6YGNvbnRlbnQtbWVudS1pdGVtLSR7ZS5pZH1gLG9uQ2xpY2s6KCk9Pm4oZSksYWN0aXZlOnR9LHtjaGlsZHJlbjpbXCJpdGVtXCI9PT1pJiYoMCxhLmpzeCkodS5JY29uV2l0aEZhbGxiYWNrLHtpY29uVXJsOmUuaWNvbn0pLCgwLGEuanN4KShmLE9iamVjdC5hc3NpZ24oe3NpemU6XCJiYXNlXCIsd2VpZ2h0Olwibm9ybWFsXCJ9LHtjaGlsZHJlbjpvfSkpLCgwLGEuanN4KShkLE9iamVjdC5hc3NpZ24oe3NpZGU6XCJyaWdodFwiLGJvb2ttYXJrZWQ6ZS5ib29rbWFya2VkLG9uQ2xpY2s6dD0+e251bGw9PXR8fHQuc3RvcFByb3BhZ2F0aW9uKCksciYmcihlKX0sXCJkYXRhLXRlc3RpZFwiOmBjb250ZW50LW1lbnUtaXRlbS0ke2UuaWR9LWJvb2ttYXJrLWljb25gfSx7Y2hpbGRyZW46ZS5ib29rbWFya2VkPygwLGEuanN4KShjLkljb24se2ljb246XCJTdGFyRmlsbGVkSWNvblwifSk6KDAsYS5qc3gpKGMuSWNvbix7aWNvbjpcIlN0YXJJY29uXCJ9KX0pKSxcImZvbGRlclwiPT09aSYmKDAsYS5qc3gpKHMuTWVudUl0ZW1JY29uQ29udGFpbmVyLE9iamVjdC5hc3NpZ24oe3NpZGU6XCJyaWdodFwiLFwiZGF0YS10ZXN0aWRcIjpgY29udGVudC1tZW51LWl0ZW0tJHtlLmlkfS1jaGV2cm9uLWljb25gfSx7Y2hpbGRyZW46KDAsYS5qc3gpKHMuTWVudUl0ZW1SaWdodEljb24se2ljb246XCJDaGV2cm9uUmlnaHRJY29uXCJ9KX0pKV19KSl9O2NvbnN0IGY9KDAsbC5kZWZhdWx0KShzLk1lbnVJdGVtVGV4dClgXG4gIHBhZGRpbmctcmlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHgubGFyZ2V9O1xuYCxkPSgwLGwuZGVmYXVsdCkocy5NZW51SXRlbUljb25Db250YWluZXIpYFxuICAkeyh7Ym9va21hcmtlZDplfSk9PmU/bC5jc3NgXG4gICAgICAgICAgJiArICR7cy5NZW51SXRlbUljb25Db250YWluZXJ9IHtcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiB1bnNldDtcbiAgICAgICAgICB9XG4gICAgICAgIGA6bC5jc3NgXG4gICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgYH07XG5cbiAgc3ZnIHtcbiAgICBoZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHgubGFyZ2V9O1xuICAgIHdpZHRoOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmxhcmdlfTtcbiAgfVxuYCxwPSgwLGwuZGVmYXVsdCkocy5NZW51SXRlbUlubmVyQ29udGFpbmVyKWBcbiAgJHsoe3RoZW1lOmUsYWN0aXZlOnR9KT0+dCYmbC5jc3NgXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UucGFsZXR0ZS5iYWNrZ3JvdW5kM307XG4gICAgYH1cblxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDJ9O1xuXG4gICAgJHtkfSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG5cbiAgICAke2R9ICsgJHtzLk1lbnVJdGVtSWNvbkNvbnRhaW5lcn0ge1xuICAgICAgbWFyZ2luLWxlZnQ6IHVuc2V0O1xuICAgIH1cbiAgfVxuYH0sMTAwOTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5JY29uV2l0aEZhbGxiYWNrPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksaT1yKG4oNzUxOCkpLGE9big5MTA2KSxsPW4oOTYzNCk7dC5JY29uV2l0aEZhbGxiYWNrPSh7aWNvblVybDplLGFsdDp0fSk9Pntjb25zdCBuPSgwLGEudXNlSW1hZ2VMb2FkZXIpKGUpO3JldHVyblwiZXJyb3JcIj09PW4/KDAsby5qc3gpKHMse2NoaWxkcmVuOigwLG8uanN4KShsLkljb24se2ljb246XCJGYWxsYmFja0dsb2JlSWNvblwifSl9KTpcImxvYWRpbmdcIj09PW4/KDAsby5qc3gpKGMse30pOigwLG8uanN4KSh1LHtzcmM6ZSxhbHQ6dH0pfTtjb25zdCBzPWkuZGVmYXVsdC5kaXZgXG4gIGhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5weC5sYXJnZX07XG4gIHdpZHRoOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmxhcmdlfTtcbiAgbWFyZ2luLWxlZnQ6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuXG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbmAsYz1pLmRlZmF1bHQuZGl2YFxuICBoZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHgubGFyZ2V9O1xuICB3aWR0aDogJHsoe3RoZW1lOmV9KT0+ZS5weC5sYXJnZX07XG4gIG1hcmdpbi1sZWZ0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbmAsdT1pLmRlZmF1bHQuaW1nYFxuICBoZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHgubGFyZ2V9O1xuICB3aWR0aDogJHsoe3RoZW1lOmV9KT0+ZS5weC5sYXJnZX07XG4gIG1hcmdpbi1sZWZ0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcblxuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG5cbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG5gfSw5MTA2OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUltYWdlTG9hZGVyPXZvaWQgMDtjb25zdCByPW4oNjY4OSk7dC51c2VJbWFnZUxvYWRlcj1lPT57Y29uc3RbdCxuXT0oMCxyLnVzZVN0YXRlKShcImxvYWRpbmdcIik7cmV0dXJuKDAsci51c2VFZmZlY3QpKCgoKT0+e2lmKCFlKXJldHVybiB2b2lkIG4oXCJlcnJvclwiKTtuKFwibG9hZGluZ1wiKTtjb25zdCB0PW5ldyBJbWFnZSxyPSgpPT57bihcInN1Y2Nlc3NcIil9LG89KCk9PntuKFwiZXJyb3JcIil9O3JldHVybiB0LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsciksdC5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIixvKSx0LnNyYz1lLCgpPT57dC5yZW1vdmVFdmVudExpc3RlbmVyKFwibG9hZFwiLHIpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsbyl9fSksW2VdKSx0fX0sN2UzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig5NjU0KSx0KX0sNDQ3MTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DdXN0b21Db250ZXh0TWVudT10LkNPTlRFWFRfTUVOVV9BTklNQVRJT05fRFVSQVRJT049dC5QUklPUl9DT05URVhUX01FTlVfQ0xBU1M9dC5CQVNFX0NPTlRFWFRfTUVOVT10LkFDVElWRV9DT05URVhUX01FTlVfQ0xBU1M9dC5DT05URVhUX01FTlVfRlJBTUVfSUQ9dm9pZCAwO2NvbnN0IG89big1ODkzKSxpPW4oNjY4OSksYT1yKG4oNzUxOCkpLGw9bigyODUwKSxzPW4oODg5OSksYz1uKDk0NzgpLHU9bigyNDIxKSxmPW4oNDU3MSksZD1uKDI4MzgpLHA9big2NzU4KTt0LkNPTlRFWFRfTUVOVV9GUkFNRV9JRD1cImNvbnRleHRfbWVudV9mcmFtZVwiLHQuQUNUSVZFX0NPTlRFWFRfTUVOVV9DTEFTUz1cImFjdGl2ZV9jb250ZXh0X21lbnVcIix0LkJBU0VfQ09OVEVYVF9NRU5VPVwiYmFzZV9jb250ZXh0X21lbnVcIix0LlBSSU9SX0NPTlRFWFRfTUVOVV9DTEFTUz1cInByZXZpb3VzX2NvbnRleHRfbWVudVwiLHQuQ09OVEVYVF9NRU5VX0FOSU1BVElPTl9EVVJBVElPTj0yMDAsdC5DdXN0b21Db250ZXh0TWVudT0oe21lbnVUZW1wbGF0ZTplLG9uQ2xpY2s6bixpY29uOnIsb25NZW51UmVzaXplOmEsb25Db250ZXh0TWVudVJlYWR5OnAsaXNXaW5kb3dzOnY9ITB9KT0+e3ZhciBtO2NvbnN0IEM9KDAsaS51c2VSZWYpKG51bGwpLFt5LHddPSgwLGkudXNlU3RhdGUpKCExKSxbYix4XT0oMCxpLnVzZVN0YXRlKSh7d2lkdGg6MTYwLGhlaWdodDoxNjB9KSxbXyxPXT0oMCxpLnVzZVN0YXRlKSgwKSxbTCxFXT0oMCxpLnVzZVN0YXRlKShbXSksW1Msal09KDAsaS51c2VTdGF0ZSkoKSxbTSxrXT0oMCxpLnVzZVN0YXRlKShbXSksW1IsUF09KDAsaS51c2VTdGF0ZSkoZS5tYXAoKGU9PmUubGFiZWx8fFwiXCIpKSksW0ksQV09KDAsaS51c2VTdGF0ZSkoLTEpOygwLGkudXNlRWZmZWN0KSgoKCk9PntQKGUubWFwKChlPT5lLmxhYmVsfHxcIlwiKSkpLEEoUi5maW5kSW5kZXgoKGU9PmU9PT1TKSkpfSksW2VdKTtjb25zdHt3aWR0aDpULGhlaWdodDpIfT0oMCxzLnVzZVJlc2l6ZUNvbnRleHRNZW51KShTKSx7aGFuZGxlTmF2aWdhdGVUb1N1Ym1lbnU6QixoYW5kbGVOYXZpZ2F0ZUJhY2tUb1BhcmVudDpWLGhhbmRsZU5hdmlnYXRlVG9CYXNlOkR9PSgwLHUudXNlQ29udGV4dE1lbnVOYXZpZ2F0aW9uKShfLE8sTSxrLFMsaix4LEEsTCxhKTtyZXR1cm4oMCxpLnVzZUVmZmVjdCkoKCgpPT57RSgoMCxjLmdldE1lbnVOYXZpZ2F0aW9uT3JkZXIpKGUpKSxqKHQuQkFTRV9DT05URVhUX01FTlUpLGsoW10pLHgoe3dpZHRoOlQsaGVpZ2h0Okh9KX0pLFtlXSksKDAsZi51c2VDb250ZXh0TWVudUtleWJvYXJkTmF2aWdhdGlvbikobnVsbD09PShtPUwuZmluZCgoZT0+ZS5wYXJlbnRMYWJlbD09PVMpKSl8fHZvaWQgMD09PW0/dm9pZCAwOm0ubWVudVRlbXBsYXRlLE0sUyxJLEEsbixCLFYsRCksKDAsaS51c2VFZmZlY3QpKCgoKT0+e0MuY3VycmVudCYmKHl8fChwJiZwKCksdyghMCkpKX0pLFtDLmN1cnJlbnRdKSwoMCxvLmpzeCkoaCxPYmplY3QuYXNzaWduKHtpZDp0LkNPTlRFWFRfTUVOVV9GUkFNRV9JRCx0cmFuc2l0aW9uU3BlZWQ6Xyxpc1dpbmRvd3M6dn0se2NoaWxkcmVuOkwubWFwKCgoe3BhcmVudExhYmVsOmUsbWVudVRlbXBsYXRlOml9KT0+KDAsby5qc3gpKFwiZGl2XCIsT2JqZWN0LmFzc2lnbih7cmVmOmU9PT1TP0M6dm9pZCAwfSx7Y2hpbGRyZW46KDAsby5qc3hzKShnLE9iamVjdC5hc3NpZ24oe2NsYXNzTmFtZTooMCxjLmdldENsYXNzTmFtZSkoZSxTLE0pLGFjdGl2ZU1lbnVXaWR0aDpiLndpZHRoLHRyYW5zaXRpb25TcGVlZDpfLGlkOmV9LHtjaGlsZHJlbjpbZSE9PXQuQkFTRV9DT05URVhUX01FTlU/KDAsby5qc3gpKGwuQ3VzdG9tQ29udGV4dE1lbnVJdGVtLHt0eXBlOlwic3VibWVudUhlYWRlclwiLGxhYmVsOmUsb25CYWNrOigpPT5WKGUsXCJjbGlja1wiKSxvbkNsb3NlOkQsc2hvd1Nob3VsZEhvbWVCdXR0b246TS5zbGljZSgyKS5pbmNsdWRlcyhlKXx8TS5sZW5ndGg+PTImJlM9PT1lLHNlbGVjdGVkOi0xPT09SX0sYCR7ZX0tc3VibWVudS1oZWFkZXJgKTpyJiYoMCxvLmpzeCkoZC5Sb290TWVudUhlYWRlcix7aWNvbjpyfSksaS5tYXAoKCh0LHIpPT4oMCxvLmpzeCkobC5DdXN0b21Db250ZXh0TWVudUl0ZW0sT2JqZWN0LmFzc2lnbih7b25DbGljazooKT0+e3QuaGFzU3ViTWVudT9CKHQubGFiZWx8fFwiXCIpOm4odC5kYXRhKSxBKC0yKX19LHQse3N1Ym1lbnU6dC5oYXNTdWJNZW51LHNlbGVjdGVkOkk9PT1yfSksYCR7ZX0tJHt0LmxhYmVsfS0ke3J9YCkpKV19KSl9KSxlKSkpfSkpfTtjb25zdCBoPWEuZGVmYXVsdC5kaXZgXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWluLXdpZHRoOiBmaXQtY29udGVudDtcbiAgbWluLWhlaWdodDogZml0LWNvbnRlbnQ7XG4gIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQxfTtcbiAgdHJhbnNpdGlvbjogJHsoe3RyYW5zaXRpb25TcGVlZDplfSk9PmBhbGwgJHtlfW1zIGxpbmVhcmB9O1xuICBib3JkZXI6ICR7KHt0aGVtZTplLGlzV2luZG93czp0fSk9PnQmJmAxcHggc29saWQgJHtlLnBhbGV0dGUuYmFja2dyb3VuZDN9YH07XG4gIGJvcmRlci1yYWRpdXM6ICR7KHtpc1dpbmRvd3M6ZX0pPT4hZSYmXCIxMHB4XCJ9O1xuYCxnPSgwLGEuZGVmYXVsdCkocC5NZW51RnJhbWUpYFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoJHsoe2FjdGl2ZU1lbnVXaWR0aDplfSk9PmAke2V9cHhgfSk7XG4gIHRyYW5zaXRpb246ICR7KHt0cmFuc2l0aW9uU3BlZWQ6ZX0pPT5gYWxsICR7ZX1tcyBjdWJpYy1iZXppZXIoMCwgMCwgMC41OCwgMSlgfTtcbiAgb3BhY2l0eTogMCU7XG5cbiAgJi5hY3RpdmVfY29udGV4dF9tZW51IHtcbiAgICB0cmFuc2Zvcm06IHVuc2V0O1xuICAgIG9wYWNpdHk6IDEwMCU7XG4gIH1cblxuICAmLnByZXZpb3VzX2NvbnRleHRfbWVudSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDAlKTtcbiAgICBvcGFjaXR5OiAwJTtcbiAgfVxuYH0sMjg1MDooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DdXN0b21Db250ZXh0TWVudUl0ZW09dm9pZCAwO2NvbnN0IHI9big2Njg5KSxvPW4oOTUzNyksaT1uKDE1NzcpLGE9big3NTAwKSxsPXtub3JtYWw6aS5Ob3JtYWxDdXN0b21Db250ZXh0TWVudUl0ZW0sY2hlY2tib3g6aS5Ob3JtYWxDdXN0b21Db250ZXh0TWVudUl0ZW0sc3VibWVudTppLk5vcm1hbEN1c3RvbUNvbnRleHRNZW51SXRlbSxzZXBhcmF0b3I6by5TZXBhcmF0b3JDdXN0b21Db250ZXh0TWVudUl0ZW0sc3VibWVudUhlYWRlcjphLlN1Ym1lbnVIZWFkZXJDdXN0b21Db250ZXh0TWVudUl0ZW19O3QuQ3VzdG9tQ29udGV4dE1lbnVJdGVtPSh7dHlwZTplPVwibm9ybWFsXCIsaWNvbjp0LGxhYmVsOm4sZW5hYmxlZDpvPSEwLGNoZWNrZWQ6aSxzdWJtZW51OmEsc2hvd1Nob3VsZEhvbWVCdXR0b246cyxvbkNsaWNrOmMsb25DbG9zZTp1LG9uQmFjazpmLHNlbGVjdGVkOmR9KT0+e2NvbnN0IHA9bFtlXTtsZXQgaDtzd2l0Y2goZSl7Y2FzZVwibm9ybWFsXCI6Y2FzZVwiY2hlY2tib3hcIjpoPXt0eXBlOmUsbGFiZWw6bixpY29uOnQsZW5hYmxlZDpvLGNoZWNrZWQ6aSxzZWxlY3RlZDpkfTticmVhaztjYXNlXCJzdWJtZW51XCI6aD17bGFiZWw6bixlbmFibGVkOm8sY2hlY2tlZDppLHN1Ym1lbnU6YSxzZWxlY3RlZDpkfTticmVhaztjYXNlXCJzdWJtZW51SGVhZGVyXCI6aD17bGFiZWw6bixzaG93U2hvdWxkSG9tZUJ1dHRvbjpzLG9uQ2xvc2U6dSxvbkJhY2s6ZixzZWxlY3RlZDpkfTticmVhaztjYXNlXCJzZXBhcmF0b3JcIjpoPXt9fXJldHVybigwLHIuY3JlYXRlRWxlbWVudCkocCxPYmplY3QuYXNzaWduKHt9LGgse2tleTpuLG9uQ2xpY2s6Y30pKX19LDE1Nzc6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTm9ybWFsQ3VzdG9tQ29udGV4dE1lbnVJdGVtPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksaT1yKG4oNzUxOCkpLGE9big5NjM0KSxsPW4oNjc1OCk7dC5Ob3JtYWxDdXN0b21Db250ZXh0TWVudUl0ZW09KHt0eXBlOmUsbGFiZWw6dCxlbmFibGVkOm49ITAsY2hlY2tlZDpyLHN1Ym1lbnU6aSxvbkNsaWNrOmEsc2VsZWN0ZWQ6Y30pPT4oMCxvLmpzeCkobC5NZW51SXRlbUNvbnRhaW5lcix7Y2hpbGRyZW46KDAsby5qc3hzKShsLk1lbnVJdGVtSW5uZXJDb250YWluZXIsT2JqZWN0LmFzc2lnbih7b25DbGljazpuP2E6dm9pZCAwLGVuYWJsZWQ6bi50b1N0cmluZygpLHNlbGVjdGVkOmN9LHtjaGlsZHJlbjpbXCJjaGVja2JveFwiPT09ZSYmKDAsby5qc3gpKGwuTWVudUl0ZW1JY29uQ29udGFpbmVyLE9iamVjdC5hc3NpZ24oe3NpZGU6XCJsZWZ0XCJ9LHtjaGlsZHJlbjooMCxvLmpzeCkocyx7aWNvbjpcIkNoZWNrSWNvblwiLGVuYWJsZWQ6bi50b1N0cmluZygpLGNoZWNrZWQ6cn0pfSkpLCgwLG8uanN4KShsLk1lbnVJdGVtVGV4dCxPYmplY3QuYXNzaWduKHtzaXplOlwiYmFzZVwiLHdlaWdodDpcIm5vcm1hbFwiLGVuYWJsZWQ6bn0se2NoaWxkcmVuOnR9KSksaSYmKDAsby5qc3gpKGwuTWVudUl0ZW1JY29uQ29udGFpbmVyLE9iamVjdC5hc3NpZ24oe3NpZGU6XCJyaWdodFwifSx7Y2hpbGRyZW46KDAsby5qc3gpKGwuTWVudUl0ZW1SaWdodEljb24se2ljb246XCJDaGV2cm9uUmlnaHRJY29uXCIsZW5hYmxlZDpufSl9KSldfSkpfSk7Y29uc3Qgcz0oMCxpLmRlZmF1bHQpKGEuSWNvbilgXG4gIHN2ZyBwYXRoIHtcbiAgICBmaWxsOiAkeyh7dGhlbWU6ZSxlbmFibGVkOnQsY2hlY2tlZDpufSk9PlwidHJ1ZVwiPT09dD9uP2UucGFsZXR0ZS50ZXh0RGVmYXVsdDpcInRyYW5zcGFyZW50XCI6ZS5wYWxldHRlLnRleHRJbmFjdGl2ZX07XG4gICAgc3Ryb2tlLXdpZHRoOiAxLjI1O1xuICB9XG5gfSwyODM4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlJvb3RNZW51SGVhZGVyPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksaT1yKG4oNzUxOCkpLGE9bigxMzM1KSxsPW4oOTUzNyk7dC5Sb290TWVudUhlYWRlcj0oe2ljb246ZX0pPT4oMCxvLmpzeHMpKG8uRnJhZ21lbnQse2NoaWxkcmVuOlsoMCxvLmpzeCkocyx7Y2hpbGRyZW46ZX0pLCgwLG8uanN4KShsLlNlcGFyYXRvckN1c3RvbUNvbnRleHRNZW51SXRlbSx7fSldfSk7Y29uc3Qgcz0oMCxpLmRlZmF1bHQpKGEuQm94KWBcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMjhweDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAwIDAgMCAke2UucHgubGFyZ2V9YH07XG5gfSw5NTM3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlNlcGFyYXRvckN1c3RvbUNvbnRleHRNZW51SXRlbT12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGk9bigxMzM1KSxhPXIobig3NTE4KSk7dC5TZXBhcmF0b3JDdXN0b21Db250ZXh0TWVudUl0ZW09KCk9PigwLG8uanN4KShsLE9iamVjdC5hc3NpZ24oe1wiZGF0YS10ZXN0aWRcIjpcImN1c3RvbS1jb250ZXh0LW1lbnUtc2VwYXJhdG9yXCJ9LHtjaGlsZHJlbjooMCxvLmpzeCkocyx7fSl9KSk7Y29uc3QgbD0oMCxhLmRlZmF1bHQpKGkuQm94KWBcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9IDA7XG5gLHM9YS5kZWZhdWx0LmhyYFxuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxcHg7XG4gIGJvcmRlcjogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQzfTtcbmB9LDc1MDA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuU3VibWVudUhlYWRlckN1c3RvbUNvbnRleHRNZW51SXRlbT12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGk9big2Njg5KSxhPXIobig3NTE4KSksbD1uKDk2MzQpLHM9big3NzY5KSxjPW4oMTMzNSksdT1uKDk1MzcpO3QuU3VibWVudUhlYWRlckN1c3RvbUNvbnRleHRNZW51SXRlbT0oe2xhYmVsOmUsc2hvd1Nob3VsZEhvbWVCdXR0b246dCxvbkNsb3NlOm4sb25CYWNrOnIsc2VsZWN0ZWQ6YX0pPT57Y29uc3QgbD0oMCxpLnVzZUNhbGxiYWNrKSgoZT0+e2Uuc3RvcFByb3BhZ2F0aW9uKCksbnVsbD09cnx8cigpfSksW3JdKSxzPSgwLGkudXNlQ2FsbGJhY2spKChlPT57ZS5zdG9wUHJvcGFnYXRpb24oKSxudWxsPT1ufHxuKCl9KSxbbl0pO3JldHVybigwLG8uanN4cykoby5GcmFnbWVudCx7Y2hpbGRyZW46WygwLG8uanN4cykoZix7Y2hpbGRyZW46WygwLG8uanN4KShkLE9iamVjdC5hc3NpZ24oe3NpZGU6XCJsZWZ0XCIsc2VsZWN0ZWQ6YX0se2NoaWxkcmVuOigwLG8uanN4KShwLHtpY29uOlwiQXJyb3dMZWZ0SWNvblwiLG9uQ2xpY2s6bCxpZDpcImJhY2staWNvblwiLHNlbGVjdGVkOmF9KX0pKSwoMCxvLmpzeCkoaCxPYmplY3QuYXNzaWduKHtzaXplOlwiYmFzZVwiLHdlaWdodDpcIm5vcm1hbFwifSx7Y2hpbGRyZW46ZX0pKSx0JiYoMCxvLmpzeCkoZCxPYmplY3QuYXNzaWduKHtzaWRlOlwicmlnaHRcIn0se2NoaWxkcmVuOigwLG8uanN4KShnLHtpY29uOlwiQ3Jvc3MySWNvblwiLG9uQ2xpY2s6cyxpZDpcImNsb3NlLWljb25cIn0pfSkpXX0pLCgwLG8uanN4KSh1LlNlcGFyYXRvckN1c3RvbUNvbnRleHRNZW51SXRlbSx7fSldfSl9O2NvbnN0IGY9KDAsYS5kZWZhdWx0KShjLkJveClgXG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDI4cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMuc21hbGx9O1xuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5gMCAke2UucHguc21hbGx9IDAgJHtlLnB4LnNtYWxsfWB9O1xuYCxkPSgwLGEuZGVmYXVsdCkoYy5Cb3gpYFxuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZSxzaWRlOnR9KT0+XCJyaWdodFwiPT09dD9gMCAke2UucHguc21hbGx9IDAgMGA6YDAgMCAwICR7ZS5weC5zbWFsbH1gfTtcbiAgbWFyZ2luLWxlZnQ6ICR7KHtzaWRlOmV9KT0+XCJyaWdodFwiPT09ZT9cImF1dG9cIjowfTtcbmAscD0oMCxhLmRlZmF1bHQpKGwuSWNvbilgXG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3NlbGVjdGVkOmUsdGhlbWU6dH0pPT5lP3QucGFsZXR0ZS5iYWNrZ3JvdW5kMzpcInRyYW5zcGFyZW50XCJ9O1xuICBjb2xvcjogJHsoe3RoZW1lOmUsc2VsZWN0ZWQ6dH0pPT50P2UucGFsZXR0ZS50ZXh0RGVmYXVsdDplLnBhbGV0dGUudGV4dEhlbHB9O1xuICBzdHJva2U6ICR7KHt0aGVtZTplLHNlbGVjdGVkOnR9KT0+dD9lLnBhbGV0dGUudGV4dERlZmF1bHQ6ZS5wYWxldHRlLnRleHRIZWxwfTtcbiAgc3Ryb2tlLXdpZHRoOiAwLjI1O1xuXG4gICY6aG92ZXIge1xuICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICAgIHN0cm9rZTogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgfVxuYCxoPSgwLGEuZGVmYXVsdCkocy5UZXh0KWBcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0SGVscH07XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAwICR7ZS5weC54eHhsYXJnZX0gMCAke2UucHguc21hbGx9YH07XG4gIGN1cnNvcjogZGVmYXVsdDtcbmAsZz0oMCxhLmRlZmF1bHQpKGwuSWNvbilgXG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dEhlbHB9O1xuICBzdHJva2U6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0SGVscH07XG4gIHN0cm9rZS13aWR0aDogMC4yNTtcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG5cbiAgJjpob3ZlciB7XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gICAgc3Ryb2tlOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICB9XG5gfSwyNDUyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig0NDcxKSx0KX0sNDU3MTooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VDb250ZXh0TWVudUtleWJvYXJkTmF2aWdhdGlvbj12b2lkIDA7Y29uc3Qgcj1uKDY2ODkpLG89big0NDcxKTt0LnVzZUNvbnRleHRNZW51S2V5Ym9hcmROYXZpZ2F0aW9uPShlLHQsbixpLGEsbCxzLGMsdSk9Pntjb25zdCBmPXQ9Pnt2YXIgbixyLG87cmV0dXJuXCJzZXBhcmF0b3JcIj09PShudWxsPT09KG49ZVt0XSl8fHZvaWQgMD09PW4/dm9pZCAwOm4udHlwZSl8fCExPT09KG51bGw9PT0ocj1lW3RdKXx8dm9pZCAwPT09cj92b2lkIDA6ci5lbmFibGVkKXx8ITE9PT0obnVsbD09PShvPWVbdF0pfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLnZpc2libGUpfSxkPSgwLHIudXNlQ2FsbGJhY2spKCgoKT0+e2EoKHQ9PntsZXQgbj10O2Rve2lmKG49PT0obnVsbD09ZT92b2lkIDA6ZS5sZW5ndGgpLTEpYnJlYWs7bis9MX13aGlsZShmKG4pKTtyZXR1cm4gZihuKT90Om59KSl9KSxbYSxlXSkscD0oMCxyLnVzZUNhbGxiYWNrKSgoKCk9PnthKChlPT57bGV0IHQ9ZTtkb3tpZihuPT09by5CQVNFX0NPTlRFWFRfTUVOVSYmMD09PXR8fC0xPT09dClicmVhazt0LT0xfXdoaWxlKGYodCkpO3JldHVybiB0fSkpfSksW2EsZV0pLGg9KDAsci51c2VDYWxsYmFjaykoKCgpPT57YShuPT09by5CQVNFX0NPTlRFWFRfTUVOVT8wOi0xKX0pLFthLG5dKSxnPSgwLHIudXNlQ2FsbGJhY2spKCgoKT0+e2EoKHQ9Pntmb3IobGV0IG49ZS5sZW5ndGgtMTtuPj10O24tLSlpZighZihuKSlyZXR1cm4gbjtyZXR1cm4gdH0pKX0pLFtudWxsPT1lP3ZvaWQgMDplLmxlbmd0aCxhXSksdj0oMCxyLnVzZUNhbGxiYWNrKSgoKCk9Pnt2YXIgdCxyO2lmKG51bGw9PT0odD1lW2ldKXx8dm9pZCAwPT09dD92b2lkIDA6dC5oYXNTdWJNZW51KXMoKG51bGw9PT0ocj1lW2ldKXx8dm9pZCAwPT09cj92b2lkIDA6ci5sYWJlbCl8fFwiXCIpO2Vsc2V7aWYoLTE9PT1pKXJldHVybiB2b2lkIGMobixcImtleWJvYXJkXCIpO2woZVtpXS5kYXRhKX1hKC0xKX0pLFthLGwscyxlLGksYyxuXSksbT0oMCxyLnVzZUNhbGxiYWNrKSgoKCk9Pnt2YXIgdCxuOyhudWxsPT09KHQ9ZVtpXSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuaGFzU3ViTWVudSkmJihzKChudWxsPT09KG49ZVtpXSl8fHZvaWQgMD09PW4/dm9pZCAwOm4ubGFiZWwpfHxcIlwiKSxhKC0xKSl9KSxbYSxzLGUsaV0pLEM9KDAsci51c2VDYWxsYmFjaykoKCgpPT57KHQuc2xpY2UoMSkuaW5jbHVkZXMobil8fChudWxsPT10P3ZvaWQgMDp0Lmxlbmd0aCk+PTEpJiZjKG4sXCJrZXlib2FyZFwiKX0pLFtjLHQsbl0pLHk9KDAsci51c2VDYWxsYmFjaykoKCgpPT57dC5zbGljZSgyKS5pbmNsdWRlcyhuKXx8KG51bGw9PXQ/dm9pZCAwOnQubGVuZ3RoKT49Mj91KCk6bCh7dHlwZTpcImNsb3NlXCJ9KX0pLFt1LHQsbl0pOygwLHIudXNlRWZmZWN0KSgoKCk9Pntjb25zdCBlPWU9Pntzd2l0Y2goZS5rZXkpe2Nhc2VcIkFycm93RG93blwiOmQoKTticmVhaztjYXNlXCJBcnJvd1VwXCI6cCgpO2JyZWFrO2Nhc2VcIkhvbWVcIjpjYXNlXCJQYWdlVXBcIjpoKCk7YnJlYWs7Y2FzZVwiRW5kXCI6Y2FzZVwiUGFnZURvd25cIjpnKCk7YnJlYWs7Y2FzZVwiRW50ZXJcIjp2KCk7YnJlYWs7Y2FzZVwiQXJyb3dSaWdodFwiOm0oKTticmVhaztjYXNlXCJBcnJvd0xlZnRcIjpDKCk7YnJlYWs7Y2FzZVwiRXNjYXBlXCI6eSgpfX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsZSksKCk9Pntkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGUpfX0pLFtkLHAsaCxnLHYsbSxDLHldKX19LDI0MjE6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlQ29udGV4dE1lbnVOYXZpZ2F0aW9uPXZvaWQgMDtjb25zdCByPW4oNjY4OSksbz1uKDQ0NzEpO3QudXNlQ29udGV4dE1lbnVOYXZpZ2F0aW9uPShlLHQsbixpLGEsbCxzLGMsdSxmKT0+e2NvbnN0IGQ9KDAsci51c2VDYWxsYmFjaykoKGU9Pntjb25zdCB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpLG49bnVsbD09dD92b2lkIDA6dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57aGVpZ2h0OihudWxsPT1uP3ZvaWQgMDpuLmhlaWdodCl8fDAsd2lkdGg6KG51bGw9PW4/dm9pZCAwOm4ud2lkdGgpfHwwfX0pLFtdKTtyZXR1cm57aGFuZGxlTmF2aWdhdGVUb1N1Ym1lbnU6KDAsci51c2VDYWxsYmFjaykoKHI9Pntjb25zdHtoZWlnaHQ6Yyx3aWR0aDp1fT1kKHIpO2YmJmYoYyx1KSxlfHx0KG8uQ09OVEVYVF9NRU5VX0FOSU1BVElPTl9EVVJBVElPTikscyh7d2lkdGg6dSxoZWlnaHQ6Y30pLGwociksaShbLi4ubixhXSl9KSxbYSxuLGksZix0LGRdKSxoYW5kbGVOYXZpZ2F0ZUJhY2tUb1BhcmVudDooMCxyLnVzZUNhbGxiYWNrKSgoKGUsdD1cImNsaWNrXCIpPT57aWYoZil7Y29uc3QgZT0xPT09bi5sZW5ndGg/by5CQVNFX0NPTlRFWFRfTUVOVTpuW24ubGVuZ3RoLTFdLHtoZWlnaHQ6dCx3aWR0aDpyfT1kKGUpO2YodCxyKX1jb25zdCByPW4sYT1yLnBvcCgpLHM9dS5maW5kKChlPT5lLnBhcmVudExhYmVsPT09YSkpO2woYSksaShyKSxjKFwia2V5Ym9hcmRcIj09PXQ/KG51bGw9PXM/dm9pZCAwOnMubWVudVRlbXBsYXRlLmZpbmRJbmRleCgodD0+dC5sYWJlbD09PWUpKSl8fDA6LTEpfSksW24saSxjLGQsZix1XSksaGFuZGxlTmF2aWdhdGVUb0Jhc2U6KDAsci51c2VDYWxsYmFjaykoKCgpPT57aWYoZil7Y29uc3R7aGVpZ2h0OmUsd2lkdGg6dH09ZChvLkJBU0VfQ09OVEVYVF9NRU5VKTtmKGUsdCl9bChvLkJBU0VfQ09OVEVYVF9NRU5VKSxpKFtdKSxjKC0xKX0pLFtsLGksYyxkLGZdKX19fSw4ODk5OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZVJlc2l6ZUNvbnRleHRNZW51PXZvaWQgMDtjb25zdCByPW4oNjY4OSksbz1uKDQ0NzEpO3QudXNlUmVzaXplQ29udGV4dE1lbnU9ZT0+e2NvbnN0W3Qsbl09KDAsci51c2VTdGF0ZSkoe2hlaWdodDoxNjAsd2lkdGg6MTYwfSk7cmV0dXJuKDAsci51c2VFZmZlY3QpKCgoKT0+e2NvbnN0IHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSkscj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChvLkNPTlRFWFRfTUVOVV9GUkFNRV9JRCk7aWYoIXQpcmV0dXJuO2NvbnN0IGk9bmV3IFJlc2l6ZU9ic2VydmVyKChlPT57Zm9yKGNvbnN0IHQgb2YgZSl7Y29uc3R7d2lkdGg6ZSxoZWlnaHQ6b309dC50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ciYmKHIuc3R5bGUuaGVpZ2h0PWAke299cHhgLHIuc3R5bGUud2lkdGg9YCR7ZX1weGAsbih7d2lkdGg6ZSxoZWlnaHQ6b30pKX19KSk7cmV0dXJuIGkub2JzZXJ2ZSh0KSwoKT0+e2kudW5vYnNlcnZlKHQpfX0pLFtlXSksdH19LDk0Nzg6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZ2V0TWVudU5hdmlnYXRpb25PcmRlcj10LmdldENsYXNzTmFtZT12b2lkIDA7Y29uc3Qgcj1uKDQ0NzEpO3QuZ2V0Q2xhc3NOYW1lPShlLHQsbik9PnQ9PT1lP3IuQUNUSVZFX0NPTlRFWFRfTUVOVV9DTEFTUzpuLmluY2x1ZGVzKGUpP3IuUFJJT1JfQ09OVEVYVF9NRU5VX0NMQVNTOlwiXCIsdC5nZXRNZW51TmF2aWdhdGlvbk9yZGVyPWU9PntpZighZSlyZXR1cm5bXTtjb25zdCB0PVt7cGFyZW50TGFiZWw6ci5CQVNFX0NPTlRFWFRfTUVOVSx0ZW1wbGF0ZTplfV0sbj1bXTtmb3IoO3QubGVuZ3RoOyl7Y29uc3R7dGVtcGxhdGU6ZSxwYXJlbnRMYWJlbDpyfT10LnBvcCgpO2UuZm9yRWFjaCgoKHtzdWJtZW51Om4sbGFiZWw6cn0sbyk9PntuJiYodC5wdXNoKHtwYXJlbnRMYWJlbDpyfHxcIlwiLHRlbXBsYXRlOm59KSxkZWxldGUgZVtvXS5zdWJtZW51LGVbb10uaGFzU3ViTWVudT0hMCl9KSksbi5wdXNoKHtwYXJlbnRMYWJlbDpyLG1lbnVUZW1wbGF0ZTplfSl9cmV0dXJuIG59fSw2NzU4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lk1lbnVJdGVtVGV4dD10Lk1lbnVJdGVtUmlnaHRJY29uPXQuTWVudUl0ZW1JY29uQ29udGFpbmVyPXQuTWVudUl0ZW1Jbm5lckNvbnRhaW5lcj10Lk1lbnVJdGVtQ29udGFpbmVyPXQuTWVudUZyYW1lPXZvaWQgMDtjb25zdCBvPXIobig3NTE4KSksaT1uKDEzMzUpLGE9big5NjM0KSxsPW4oNzc2OSk7dC5NZW51RnJhbWU9KDAsby5kZWZhdWx0KShpLkJveClgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IG1heC1jb250ZW50O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDF9O1xuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5gJHtlLnB4LnNtYWxsfSAwICR7ZS5weC5zbWFsbH0gMGB9O1xuYCx0Lk1lbnVJdGVtQ29udGFpbmVyPSgwLG8uZGVmYXVsdCkoaS5Cb3gpYFxuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YDAgJHtlLnB4LnNtYWxsfSAwICR7ZS5weC5zbWFsbH1gfTtcbmAsdC5NZW51SXRlbUlubmVyQ29udGFpbmVyPSgwLG8uZGVmYXVsdCkoaS5Cb3gpYFxuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAyOHB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmUsc2VsZWN0ZWQ6dCxlbmFibGVkOm59KT0+XCJmYWxzZVwiIT09biYmdD9lLnBhbGV0dGUuYmFja2dyb3VuZDM6XCJ0cmFuc3BhcmVudFwifTtcblxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZSxlbmFibGVkOnR9KT0+XCJmYWxzZVwiIT09dD9lLnBhbGV0dGUuYmFja2dyb3VuZDM6XCJ0cmFuc3BhcmVudFwifTtcbiAgfVxuYCx0Lk1lbnVJdGVtSWNvbkNvbnRhaW5lcj0oMCxvLmRlZmF1bHQpKGkuQm94KWBcbiAgcGFkZGluZzogJHsoe3RoZW1lOmUsc2lkZTp0fSk9PlwicmlnaHRcIj09PXQ/YDAgJHtlLnB4LnNtYWxsfSAwIDBgOmAwIDAgMCAke2UucHguc21hbGx9YH07XG4gIG1hcmdpbi1sZWZ0OiAkeyh7c2lkZTplfSk9PlwicmlnaHRcIj09PWU/XCJhdXRvXCI6MH07XG5gLHQuTWVudUl0ZW1SaWdodEljb249KDAsby5kZWZhdWx0KShhLkljb24pYFxuICBtYXJnaW4tbGVmdDogYXV0bztcblxuICBzdmcgcGF0aCB7XG4gICAgZmlsbDogJHsoe3RoZW1lOmUsZW5hYmxlZDp0fSk9Pm51bGw9PXR8fHQ/ZS5wYWxldHRlLnRleHREZWZhdWx0OmUucGFsZXR0ZS50ZXh0SW5hY3RpdmV9O1xuICAgIHN0cm9rZTogJHsoe3RoZW1lOmUsZW5hYmxlZDp0fSk9Pm51bGw9PXR8fHQ/ZS5wYWxldHRlLnRleHREZWZhdWx0OmUucGFsZXR0ZS50ZXh0SW5hY3RpdmV9O1xuICAgIHN0cm9rZS13aWR0aDogMC41O1xuICB9XG5gLHQuTWVudUl0ZW1UZXh0PSgwLG8uZGVmYXVsdCkobC5UZXh0KWBcbiAgY29sb3I6ICR7KHt0aGVtZTplLGVuYWJsZWQ6dH0pPT5udWxsPT10fHx0P2UucGFsZXR0ZS50ZXh0RGVmYXVsdDplLnBhbGV0dGUudGV4dEluYWN0aXZlfTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YDAgJHtlLnB4Lnh4eGxhcmdlfSAwICR7ZS5weC5zbWFsbH1gfTtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuXG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gIHVzZXItc2VsZWN0OiBub25lO1xuYH0sMjYwOTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oNTk3MSksdCl9LDU5NzE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Ub2dnbGU9dm9pZCAwO2NvbnN0IGk9big1ODkzKSxhPW4oNjY4OSksbD1vKG4oNzUxOCkpLHM9big4NTEwKSxjPW4oMTMzNSksdT1uKDE5NDQpO3QuVG9nZ2xlPWU9Pnt2YXJ7aWQ6dCxsYWJlbDpuLG9uQ2hhbmdlOm8sbGFiZWxTaWRlOmw9XCJyaWdodFwiLHR5cGU6cz1cImNoZWNrYm94XCIsaGVscGVyVGV4dDpjfT1lLGc9cihlLFtcImlkXCIsXCJsYWJlbFwiLFwib25DaGFuZ2VcIixcImxhYmVsU2lkZVwiLFwidHlwZVwiLFwiaGVscGVyVGV4dFwiXSk7Y29uc3RbdixtXT0oMCxhLnVzZVN0YXRlKShnLmNoZWNrZWQpO3JldHVybigwLGEudXNlRWZmZWN0KSgoKCk9PnttKGcuY2hlY2tlZCl9KSxbZy5jaGVja2VkXSksKDAsaS5qc3hzKShmLE9iamVjdC5hc3NpZ24oe2xhYmVsU2lkZTpsfSx7Y2hpbGRyZW46WyhufHxjKSYmKDAsaS5qc3gpKHUuTGFiZWwse2h0bWxGb3I6dCx0ZXh0Om4saGVscGVyVGV4dDpjfSksKDAsaS5qc3hzKShkLE9iamVjdC5hc3NpZ24oe2lzQ2hlY2tlZDp2fSx7Y2hpbGRyZW46WygwLGkuanN4KShoLE9iamVjdC5hc3NpZ24oe30sZyx7aWQ6dCx0eXBlOnMsb25DaGFuZ2U6ZT0+e20oZS50YXJnZXQuY2hlY2tlZCksbnVsbD09b3x8byhlKX19KSksKDAsaS5qc3gpKHAse3RhYkluZGV4Oi0xLFwiYXJpYS1oaWRkZW5cIjpcInRydWVcIixpc0NoZWNrZWQ6dn0pXX0pKV19KSl9O2NvbnN0IGY9bC5kZWZhdWx0LmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgZ2FwOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnhsYXJnZX07XG4gIGZsZXgtZGlyZWN0aW9uOiAkeyh7bGFiZWxTaWRlOmV9KT0+XCJsZWZ0XCI9PT1lP1wicm93XCI6XCJyb3ctcmV2ZXJzZVwifTtcbiAgbGluZS1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHgueGxhcmdlfTtcbmAsZD0oMCxsLmRlZmF1bHQpKGMuQm94KWBcbiAgLS1weC10b2dnbGU6ICR7KHt0aGVtZTplfSk9PmUucHgueGxhcmdlfTtcbiAgLS1weC1rbm9iOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiB2YXIoLS1weC10b2dnbGUpO1xuICB3aWR0aDogY2FsYygyICogdmFyKC0tcHgtdG9nZ2xlKSk7XG4gIGJvcmRlcjogMXB4IHNvbGlkXG4gICAgJHsoe2lzQ2hlY2tlZDplLHRoZW1lOnR9KT0+ZT90LnBhbGV0dGUuYnJhbmRQcmltYXJ5OnQucGFsZXR0ZS5iYWNrZ3JvdW5kNn07XG4gIGJvcmRlci1yYWRpdXM6IGNhbGMoMC41ICogdmFyKC0tcHgtdG9nZ2xlKSk7XG5cbiAgYmFja2dyb3VuZDogJHsoe2lzQ2hlY2tlZDplLHRoZW1lOnR9KT0+ZT90LnBhbGV0dGUuYnJhbmRQcmltYXJ5OnQucGFsZXR0ZS5iYWNrZ3JvdW5kNn07XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQgdmFyKC0tb3BlbmZpbi11aS1nbG9iYWxUcmFuc2l0aW9uKSxcbiAgICBib3JkZXItY29sb3IgdmFyKC0tLW9wZW5maW4tdWktZ2xvYmFsVHJhbnNpdGlvbik7XG5cbiAgJjpmb2N1cy13aXRoaW4ge1xuICAgIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0Rm9jdXNlZH07XG4gIH1cbmAscD1sLmRlZmF1bHQuYnV0dG9uYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiB2YXIoLS1weC1rbm9iKTtcbiAgaGVpZ2h0OiB2YXIoLS1weC1rbm9iKTtcbiAgdG9wOiA1MCU7XG4gIGxlZnQ6ICR7KHt0aGVtZTplfSk9PmUucHgueHNtYWxsfTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGJhY2tncm91bmQ6ICR7KHtpc0NoZWNrZWQ6ZSx0aGVtZTp0fSk9PmU/dC5wYWxldHRlLmJyYW5kUHJpbWFyeVRleHQ6dC5wYWxldHRlLmlucHV0Q29sb3J9O1xuICBib3JkZXI6IG5vbmU7XG4gIG91dGxpbmU6IG5vbmU7XG4gIHRyYW5zaXRpb246IGxlZnQgdmFyKC0tb3BlbmZpbi11aS1nbG9iYWxUcmFuc2l0aW9uKSwgYmFja2dyb3VuZCB2YXIoLS1vcGVuZmluLXVpLWdsb2JhbFRyYW5zaXRpb24pO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTsgLyogQWxsb3cgcGFzcy10aHJ1IGZvciBuYXRpdmUgaW5wdXQgKi9cbmAsaD0oMCxsLmRlZmF1bHQpKHMuUmF3SW5wdXQpYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgb3BhY2l0eTogMDtcbiAgYm9yZGVyOiBub25lO1xuICBvdXRsaW5lOiBub25lO1xuICBhcHBlYXJhbmNlOiBub25lO1xuICBkaXNwbGF5OiBibG9jaztcblxuICAmOmNoZWNrZWQgKyAke3B9IHtcbiAgICBsZWZ0OiBjYWxjKDEwMCUgLSAkeyh7dGhlbWU6ZX0pPT5lLnB4LmxhcmdlfSk7XG4gIH1cbiAgJjpkaXNhYmxlZCArICR7cH0ge1xuICAgIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dERpc2FibGVkfTtcbiAgfVxuICAmOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gIH1cbmB9LDUzMDA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5CYWRnZT12b2lkIDA7Y29uc3QgaT1uKDU4OTMpLGE9byhuKDc1MTgpKSxsPW4oMTMzNSkscz1uKDM4NzcpO3QuQmFkZ2U9ZT0+e3Zhcntjb3VudDp0PTAsbWF4Om59PWUsbz1yKGUsW1wiY291bnRcIixcIm1heFwiXSk7bGV0IGE9dC50b1N0cmluZygpO3JldHVybiBuJiZ0Pm4mJihhPWAke259K2ApLCgwLGkuanN4KShjLE9iamVjdC5hc3NpZ24oe30sbyx7Y2hpbGRyZW46YX0pKX07Y29uc3QgYz0oMCxhLmRlZmF1bHQpKGwuQm94KWBcbiAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnN0YXR1c0NyaXRpY2FsfTtcbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMucGlsbH07XG4gIGNvbG9yOiAke3MuQ29sb3Iud2hpdGV9O1xuICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuc21hbGx9O1xuICBtaW4td2lkdGg6ICR7KHt0aGVtZTplfSk9PmUucHgueGxhcmdlfTtcbiAgcGFkZGluZzogMnB4IDZweDtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBib3gtc2hhZG93OiAkeyh7dGhlbWU6ZX0pPT5lLnNoYWRvdy5iYXNlfTtcbmB9LDMxMzY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDUzMDApLHQpfSw2ODk1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pfTpmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10fSksaT10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCIhPT1uJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmcih0LGUsbik7cmV0dXJuIG8odCxlKSx0fSxhPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LGw9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DYWxlbmRhcj12b2lkIDA7Y29uc3Qgcz1uKDU4OTMpLGM9big2Njg5KSx1PWwobig3NTE4KSksZj1uKDcyOTIpLGQ9big0MTMwKSxwPW4oMTMzNSksaD1pKG4oNTI5OSkpO3QuQ2FsZW5kYXI9ZT0+e3Zhcnt2YWx1ZTp0LG9uQ2hhbmdlOm4sb25EaXNtaXNzOnJ9PWUsbz1hKGUsW1widmFsdWVcIixcIm9uQ2hhbmdlXCIsXCJvbkRpc21pc3NcIl0pO2NvbnN0W2ldPSgwLGMudXNlU3RhdGUpKHQpLFtsLHVdPSgwLGMudXNlU3RhdGUpKHQpLGQ9KDAsYy51c2VDYWxsYmFjaykoKGU9Pnt1KGUpLG51bGw9PW58fG4oZSl9KSxbXSkscD0oMCxjLnVzZUNhbGxiYWNrKSgoKCk9PntkKGkpLG51bGw9PXJ8fHIoKX0pLFtdKTtyZXR1cm4oMCxzLmpzeHMpKG0sT2JqZWN0LmFzc2lnbih7XCJkYXRhLXRlc3RpZFwiOlwicmVhY3QtY2FsZW5kYXJcIn0se2NoaWxkcmVuOlsoMCxzLmpzeCkoZi5DYWxlbmRhcixPYmplY3QuYXNzaWduKHt2YWx1ZTpsLG9uQ2hhbmdlOmQsY2FsZW5kYXJUeXBlOlwiVVNcIixkZWZhdWx0VmlldzpcIm1vbnRoXCIsbWluRGV0YWlsOlwieWVhclwiLG5leHQyTGFiZWw6bnVsbCxwcmV2MkxhYmVsOm51bGwsc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrczohMH0sbykpLCgwLHMuanN4cykoZyx7Y2hpbGRyZW46WygwLHMuanN4KSh2LHtcImRhdGEtdGVzdGlkXCI6XCJjYWxlbmRhci1jYW5jZWwtYnV0dG9uXCIsXCJhcmlhLWxhYmVsXCI6XCJjYW5jZWwtYnV0dG9uXCIsbGFiZWw6XCJDYW5jZWxcIixzaXplOlwiYmFzZVwiLGtpbmQ6XCJ0ZXh0T25seVwiLG9uQ2xpY2s6cH0pLCgwLHMuanN4KSh2LHtcImRhdGEtdGVzdGlkXCI6XCJjYWxlbmRhci1hcHBseS1idXR0b25cIixcImFyaWEtbGFiZWxcIjpcImFwcGx5LWJ1dHRvblwiLGxhYmVsOlwiQXBwbHlcIixzaXplOlwiYmFzZVwiLGtpbmQ6XCJwcmltYXJ5XCIsb25DbGljazpyfSldfSldfSkpfTtjb25zdCBnPSgwLHUuZGVmYXVsdCkocC5Cb3gpYFxuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YCR7ZS5weC5zbWFsbH0gMHB4YH07XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gIG1hcmdpbi1yaWdodDogJHsoe3RoZW1lOmV9KT0+YCR7ZS5weC5zbWFsbH1gfTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ0fTtcbiAgYm9yZGVyOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ2fTtcbiAgYm9yZGVyLXRvcDogbm9uZTtcbmAsdj0oMCx1LmRlZmF1bHQpKGQuQnV0dG9uKWBcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YCR7ZS5weC5zbWFsbH0gJHtlLnB4LnNtYWxsfWB9O1xuICBtYXJnaW4tcmlnaHQ6ICR7KHt0aGVtZTplfSk9PmAke2UucHguc21hbGx9YH07XG5gLG09KDAsdS5kZWZhdWx0KShwLkJveClgXG4gICR7aH07XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICB1c2VyLXNlbGVjdDogbm9uZTtcblxuICAucmVhY3QtY2FsZW5kYXIge1xuICAgIG1pbi13aWR0aDogMjMwcHg7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ0fTtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gICAgYm9yZGVyOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ2fTtcbiAgfVxuXG4gIC5yZWFjdC1jYWxlbmRhcl9fbmF2aWdhdGlvbiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ0fSAhaW1wb3J0YW50O1xuICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICAgIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5iYXNlfTtcbiAgICBtYXJnaW46IDA7XG4gIH1cblxuICAucmVhY3QtY2FsZW5kYXJfX25hdmlnYXRpb25fX2Fycm93IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDR9ICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gICAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmxhcmdlfTtcblxuICAgIDpkaXNhYmxlZCB7XG4gICAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0RGlzYWJsZWR9O1xuICAgIH1cbiAgfVxuXG4gIC5yZWFjdC1jYWxlbmRhcl9fbmF2aWdhdGlvbl9fbGFiZWwge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNH0gIWltcG9ydGFudDtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gIH1cblxuICAucmVhY3QtY2FsZW5kYXJfX3ZpZXdDb250YWluZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNH0gIWltcG9ydGFudDtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0Q29sb3J9O1xuICAgIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5iYXNlfTtcbiAgfVxuXG4gIC5yZWFjdC1jYWxlbmRhcl9fbW9udGgtdmlld19fd2Vla2RheXMge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5iYXNlfTtcblxuICAgIGFiYnIge1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIH1cbiAgfVxuXG4gIC5yZWFjdC1jYWxlbmRhcl9fdGlsZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNH0gIWltcG9ydGFudDtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgICBib3JkZXItcmFkaXVzOiAxMDBweDtcbiAgICBhc3BlY3QtcmF0aW86IDEvMTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgICA6ZGlzYWJsZWQge1xuICAgICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0SW5hY3RpdmV9O1xuICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcblxuICAgICAgOmhvdmVyIHtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgfVxuICAgIH1cblxuICAgIDpob3ZlciB7XG4gICAgICBib3JkZXI6IDJweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5fTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDEwMHB4O1xuICAgIH1cblxuICAgIDpmb2N1cyB7XG4gICAgICBib3JkZXI6IDJweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5fTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDEwMHB4O1xuICAgIH1cbiAgfVxuXG4gIC5yZWFjdC1jYWxlbmRhcl9fdGlsZS0tbm93IHtcbiAgICBib3JkZXI6IDJweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5fSAhaW1wb3J0YW50O1xuICAgIGJvcmRlci1yYWRpdXM6IDEwMHB4O1xuICB9XG5cbiAgLnJlYWN0LWNhbGVuZGFyX190aWxlLS1hY3RpdmUge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFByaW1hcnl9ICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFByaW1hcnlUZXh0fTtcbiAgICBib3JkZXItcmFkaXVzOiAxMDBweDtcblxuICAgIDpmb2N1cyB7XG4gICAgICBib3JkZXI6IDJweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5fTtcbiAgICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICAgICAgYm9yZGVyLXJhZGl1czogMTAwcHg7XG4gICAgfVxuICB9XG5gfSw5NzM0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig2ODk1KSx0KX0sMTYyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkRyb3Bkb3duQnV0dG9uPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksaT1uKDI3OSksYT1uKDcyNjEpLGw9big5NjM0KSxzPW4oNjY4OSksYz1yKG4oNzUxOCkpLHU9bigxMzM1KSxmPW4oOTUwNyksZD1uKDE5NDQpO3QuRHJvcGRvd25CdXR0b249KDAscy5mb3J3YXJkUmVmKSgoKGUsdCk9Pnt2YXIgbixyLGwscyxjO3JldHVybigwLG8uanN4KShoLHtjaGlsZHJlbjooMCxvLmpzeHMpKHAse2NoaWxkcmVuOlsoZS5sYWJlbHx8ZS5oZWxwZXJUZXh0KSYmKDAsby5qc3gpKGQuTGFiZWwse3RleHQ6ZS5sYWJlbCxoZWxwZXJUZXh0OmUuaGVscGVyVGV4dCxodG1sRm9yOmUubmFtZX0pLCgwLG8uanN4cykodixPYmplY3QuYXNzaWduKHtyb2xlOlwiY29tYm94Ym94XCIscmVmOnQsbmFtZTplLm5hbWUsdGFiSW5kZXg6ZS50YWJJbmRleCxcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiOmUuYWN0aXZlRGVzY2VuZGFudCxzdGF0dXM6ZS5zdGF0dXMsXCJhcmlhLWV4cGFuZGVkXCI6ZS5leHBhbmRlZCxcImFyaWEtaGFzcG9wdXBcIjpcImxpc3Rib3hcIixcImFyaWEtY29udHJvbHNcIjpcImRyb3Bkb3duLWxpc3Rib3hcIixvbkNsaWNrOigpPT5lLmhhbmRsZUNsaWNrKCksYXM6XCJidXR0b25cIixcImRhdGEtdGVzdGlkXCI6XCJkcm9wZG93bi1idXR0b25cIix0aXRsZTpudWxsIT09KHI9bnVsbD09PShuPWUuc2VsZWN0ZWQpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLnRpdGxlKSYmdm9pZCAwIT09cj9yOmUucGxhY2Vob2xkZXJ9LHtjaGlsZHJlbjpbKG51bGw9PT0obD1lLnNlbGVjdGVkKXx8dm9pZCAwPT09bD92b2lkIDA6bC5pY29uVXJsKSYmKDAsby5qc3gpKGkuQnV0dG9uSW1hZ2Use3NyYzplLnNlbGVjdGVkLmljb25Vcmx9KSwoMCxvLmpzeCkoYS5PcHRpb25UaXRsZSxPYmplY3QuYXNzaWduKHtcImFyaWEtbGl2ZVwiOlwicG9saXRlXCIsXCJkYXRhLXRlc3RpZFwiOlwic2VsZWN0ZWQtb3B0aW9uXCJ9LHtjaGlsZHJlbjpudWxsIT09KGM9bnVsbD09PShzPWUuc2VsZWN0ZWQpfHx2b2lkIDA9PT1zP3ZvaWQgMDpzLnRpdGxlKSYmdm9pZCAwIT09Yz9jOmUucGxhY2Vob2xkZXJ9KSksKDAsby5qc3gpKGcse3N0YXR1czplLnN0YXR1cyxpY29uOmUuZXhwYW5kZWQ/XCJDaGV2cm9uVXBJY29uXCI6XCJDaGV2cm9uRG93bkljb25cIn0pXX0pKV19KX0pfSkpLHQuRHJvcGRvd25CdXR0b24uZGlzcGxheU5hbWU9XCJEcm9wZG93bkJ1dHRvblwiO2NvbnN0IHA9KDAsYy5kZWZhdWx0KSh1LkJveClgXG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIHdpZHRoOiAxMDAlO1xuYCxoPSgwLGMuZGVmYXVsdCkodS5Cb3gpYFxuICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gIHdpZHRoOiAxMDAlO1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbmAsZz0oMCxjLmRlZmF1bHQpKGwuSWNvbilgXG4gIGNvbG9yOiAkeyh7dGhlbWU6ZSxzdGF0dXM6dH0pPT4oMCxmLmdldFN0YXR1c0NvbG9yKShlLHQsXCJ0ZXh0RGVmYXVsdFwiKX07XG5gLHY9KDAsYy5kZWZhdWx0KSh1LkJveClgXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNH07XG4gIGJvcmRlcjogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dEJhY2tncm91bmR9O1xuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmUsc3RhdHVzOnR9KT0+KDAsZi5nZXRTdGF0dXNDb2xvcikoZSx0LFwiaW5wdXRCb3JkZXJcIil9O1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgZm9udC13ZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUuZm9udFdlaWdodC5ib2xkfTtcbiAgZ2FwOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICBsaW5lLWhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5saW5lSGVpZ2h0LnVpfTtcbiAgb3V0bGluZTogbm9uZTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YCR7ZS5weC5zbWFsbH0gJHtlLnB4LnNtYWxsfWB9O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIHZhcigtLW9wZW5maW4tdWktZ2xvYmFsVHJhbnNpdGlvbik7XG4gIHdpZHRoOiAxMDAlO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gICR7bC5JY29ufSB7XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIH1cblxuICAmOmZvY3VzLXdpdGhpbiB7XG4gICAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXRGb2N1c2VkfTtcbiAgfVxuXG4gICY6Zm9jdXMge1xuICAgIG91dGxpbmU6IDA7XG4gICAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZSxzdGF0dXM6dH0pPT4oMCxmLmdldFN0YXR1c0NvbG9yKShlLHQsXCJpbnB1dEZvY3VzZWRcIil9O1xuICB9XG5gfSw2MDYyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkRyb3Bkb3duTWVudT12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGk9big2Njg5KSxhPW4oMTMzNSksbD1yKG4oNzUxOCkpLHM9big3MjYxKSxjPW4oMjc5KSx1PW4oMzQ3KSxmPW4oMTYyKTt0LkRyb3Bkb3duTWVudT0oMCxpLmZvcndhcmRSZWYpKCgoe2xhYmVsOmUsb3B0aW9uczp0PVtbXV0scGxhY2Vob2xkZXI6bj1cIlNlbGVjdCBhbiBvcHRpb25cIixzZWxlY3RlZDpyLG9uT3B0aW9uSG92ZXI6bCxvbkNoYW5nZTpoLHJlbmRlckxhYmVsOmcsZml0Q29udGVudDp2fSxtKT0+e2lmKHImJiEoKGUsdCk9PmUuc29tZSgoZT0+ZS5zb21lKChlPT5lLnZhbHVlPT09dC52YWx1ZSkpKSkpKHQscikpdGhyb3cgbmV3IEVycm9yKGBUaGUgc2VsZWN0ZWQgb3B0aW9uICR7ci52YWx1ZX0gaXMgbm90IHByZXNlbnQgaW4gdGhlIG9wdGlvbnMgYXJyYXlgKTtjb25zdFtDLHldPSgwLGkudXNlU3RhdGUpKCExKTsoMCxpLnVzZUVmZmVjdCkoKCgpPT57MT09PXRbMF0ubGVuZ3RoJiZ3KCExKX0pLFt0XSk7Y29uc3Qgdz1lPT57eShudWxsIT1lP2U6IUMpfSx7Zm9jdXNlZE9wdGlvbjpiLGhhbmRsZUtleURvd246eH09KDAsdS51c2VEcm9wZG93bktleWJvYXJkTmF2aWdhdGlvbikodCxyLEMsdyxoKTtyZXR1cm4oMCxvLmpzeCkoZCxPYmplY3QuYXNzaWduKHtyZWY6bSxmbGV4RGlyZWN0aW9uOlwiY29sdW1uXCIsb25CbHVyOmU9PntlLmN1cnJlbnRUYXJnZXQuY29udGFpbnMoZS5yZWxhdGVkVGFyZ2V0KXx8eSghMSl9LG9uS2V5RG93bjp4fSx7Y2hpbGRyZW46KDAsby5qc3hzKShhLkJveCxPYmplY3QuYXNzaWduKHtnYXA6XCJzbWFsbFwiLGZsZXhEaXJlY3Rpb246XCJjb2x1bW5cIixzdHlsZTp7d2lkdGg6XCIxMDAlXCJ9fSx7Y2hpbGRyZW46W2UmJigwLG8uanN4KShcImxhYmVsXCIsT2JqZWN0LmFzc2lnbih7aHRtbEZvcjpcImRyb3Bkb3duLWJ1dHRvblwifSx7Y2hpbGRyZW46KDAsby5qc3gpKHMuT3B0aW9uVGl0bGUse2NoaWxkcmVuOmV9KX0pKSwoMCxvLmpzeHMpKHAse2NoaWxkcmVuOltnPygwLG8uanN4KShpLkZyYWdtZW50LHtjaGlsZHJlbjpnKHJ8fHt0aXRsZTpuLHZhbHVlOm51bGx9LEMsdyxiKX0sYHJlbmRlci1sYWJlbC0ke3J9YCk6KDAsby5qc3gpKGYuRHJvcGRvd25CdXR0b24se3RhYkluZGV4OjAsYWN0aXZlRGVzY2VuZGFudDpgbWVudS1vcHRpb24tJHtudWxsPT1iP3ZvaWQgMDpiLnZhbHVlfWAsZXhwYW5kZWQ6QyYmdFswXS5sZW5ndGg+MSxoYW5kbGVDbGljazooKT0+dygpLHNlbGVjdGVkOnIscGxhY2Vob2xkZXI6bn0pLHQubGVuZ3RoJiZ0WzBdLmxlbmd0aD4xJiZDJiYoMCxvLmpzeCkoYy5NZW51LHttZW51SWQ6XCJkcm9wZG93bi1saXN0Ym94XCIsb3B0aW9uczp0LHNlbGVjdGVkOnIsaGFuZGxlRXhwYW5kTWVudTp3LG9uT3B0aW9uSG92ZXI6bCxvbkNoYW5nZTpoLGZpdENvbnRlbnQ6dixmb2N1c2VkT3B0aW9uOmIsYWJzb2x1dGVQb3NpdGlvbjohMH0pXX0pXX0pKX0pKX0pKSx0LkRyb3Bkb3duTWVudS5kaXNwbGF5TmFtZT1cIkRyb3Bkb3duTWVudVwiO2NvbnN0IGQ9KDAsbC5kZWZhdWx0KShhLkJveClgXG4gIHVzZXItc2VsZWN0OiBub25lO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5gLHA9KDAsbC5kZWZhdWx0KShhLkJveClgYH0sNjAyNjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oNjA2MiksdCksbyhuKDI3OSksdCksbyhuKDE2MiksdCl9LDI3OTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5CdXR0b25JbWFnZT10Lk1lbnU9dm9pZCAwO2NvbnN0IG89big1ODkzKSxpPXIobig2Njg5KSksYT1yKG4oNzUxOCkpLGw9big5NjM0KSxzPW4oMTMzNSksYz1uKDcyNjEpO3QuTWVudT0oe29wdGlvbnM6ZSxzZWxlY3RlZDpuLG1lbnVJZDpyLGhhbmRsZUV4cGFuZE1lbnU6YSxvbk9wdGlvbkhvdmVyOmwsb25DaGFuZ2U6cyx3aWR0aDpnLGhlaWdodDp2LGhlYWRlcjptLGZvY3VzZWRPcHRpb246QyxhYnNvbHV0ZVBvc2l0aW9uOnksZml0Q29udGVudDp3fSk9Pntjb25zdCBiPWU9PntudWxsPT1sfHxsKGUpfTtyZXR1cm4oMCxvLmpzeHMpKHUsT2JqZWN0LmFzc2lnbih7cm9sZTpcImxpc3Rib3hcIixmbGV4RGlyZWN0aW9uOlwiY29sdW1uXCIsb25Nb3VzZUxlYXZlOigpPT57YihudWxsKX0sXCJkYXRhLXRlc3RpZFwiOlwibWVudVwiLGlkOnIsd2lkdGg6ZyxoZWlnaHQ6dixhYnNvbHV0ZVBvc2l0aW9uOnksZml0Q29udGVudDp3fSx7Y2hpbGRyZW46W20mJigwLG8uanN4cykoaS5kZWZhdWx0LkZyYWdtZW50LHtjaGlsZHJlbjpbKDAsby5qc3gpKGQse2NoaWxkcmVuOigwLG8uanN4KShjLk9wdGlvblRpdGxlLHtjaGlsZHJlbjptfSl9KSwoMCxvLmpzeCkoaCx7fSldfSksZS5tYXAoKChlLHIpPT4oMCxvLmpzeHMpKGkuZGVmYXVsdC5GcmFnbWVudCx7Y2hpbGRyZW46WzAhPT1yJiYoMCxvLmpzeCkoaCx7fSksZS5tYXAoKChlLHIpPT4oMCxvLmpzeHMpKGYsT2JqZWN0LmFzc2lnbih7cm9sZTpcIm9wdGlvblwiLGlzRm9jdXNlZDoobnVsbD09Qz92b2lkIDA6Qy52YWx1ZSk9PT1lLnZhbHVlLFwiYXJpYS1zZWxlY3RlZFwiOihudWxsPT1uP3ZvaWQgMDpuLnZhbHVlKT09PWUudmFsdWUsYWxpZ25JdGVtczpcImNlbnRlclwiLGFzOlwiYnV0dG9uXCIsXCJkYXRhLXRlc3RpZFwiOmBtZW51LW9wdGlvbi0ke3J9YCxpZDpgbWVudS1vcHRpb24tJHtlLnZhbHVlfWAsdGl0bGU6ZS50aXRsZSxvbkNsaWNrOigpPT57ZS5vdmVycmlkZU9uQ2xpY2s/ZS5vdmVycmlkZU9uQ2xpY2soZSk6cyhlKSxudWxsPT1hfHxhKCl9LG9uTW91c2VPdmVyOigpPT5iKGUudmFsdWUpfSx7Y2hpbGRyZW46WyhudWxsPT1lP3ZvaWQgMDplLmljb25VcmwpJiYoMCxvLmpzeCkodC5CdXR0b25JbWFnZSx7c3JjOmUuaWNvblVybCxzdHlsZTp7bWFyZ2luUmlnaHQ6XCI4cHhcIn19KSwoMCxvLmpzeCkoYy5PcHRpb25UaXRsZSx7Y2hpbGRyZW46ZS50aXRsZX0pLChudWxsPT1uP3ZvaWQgMDpuLnZhbHVlKT09PWUudmFsdWU/KDAsby5qc3gpKHAse2ljb246XCJDaGVja0ljb25cIn0pOigwLG8uanN4KShwLHtjaGlsZHJlbjooMCxvLmpzeCkoby5GcmFnbWVudCx7fSl9KV19KSxyKSkpXX0scikpKV19KSl9O2NvbnN0IHU9KDAsYS5kZWZhdWx0KShzLkJveClgXG4gIHdpZHRoOiAkeyh7d2lkdGg6ZSxmaXRDb250ZW50OnR9KT0+ZXx8KHQ/XCJmaXQtY29udGVudFwiOlwiMTAwJVwiKX07XG4gIG1heC1oZWlnaHQ6ICR7KHtoZWlnaHQ6ZX0pPT5udWxsIT1lP2U6XCJmaXQtY29udGVudFwifTtcbiAgdG9wOiAkeyh7dGhlbWU6ZX0pPT5gY2FsYygxMDAlICsgJHtlLnB4LnhzbWFsbH0pYH07XG4gIGJveC1zaGFkb3c6IDBweCA0cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4yNSk7XG4gIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNH07XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICB6LWluZGV4OiAxMDtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgYm9yZGVyOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0QmFja2dyb3VuZH07XG4gIHBvc2l0aW9uOiAkeyh7YWJzb2x1dGVQb3NpdGlvbjplfSk9PmU/XCJhYnNvbHV0ZVwiOlwiaW5pdGlhbFwifTtcbmAsZj0oMCxhLmRlZmF1bHQpKHMuQm94KWBcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgYm9yZGVyOiAkeyh7aXNGb2N1c2VkOmUsdGhlbWU6dH0pPT5lP2AxcHggc29saWQgJHt0LnBhbGV0dGUuYm9yZGVyTmV1dHJhbH1gOlwiMXB4IHNvbGlkIHRyYW5zcGFyZW50XCJ9O1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgb3V0bGluZTogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAke2UucHguc21hbGx9ICR7ZS5weC5zbWFsbH1gfTtcbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQyfTtcbiAgfVxuYCxkPSgwLGEuZGVmYXVsdCkocy5Cb3gpYFxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiB0cmFuc3BhcmVudDtcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0SGVscH07XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAke2UucHguc21hbGx9ICR7ZS5weC5zbWFsbH1gfTtcbmAscD0oMCxhLmRlZmF1bHQpKGwuSWNvbilgXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuYCxoPSgwLGEuZGVmYXVsdCkocy5Cb3gpYFxuICBib3JkZXItdG9wOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0QmFja2dyb3VuZH07XG5gO3QuQnV0dG9uSW1hZ2U9YS5kZWZhdWx0LmltZ2BcbiAgaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLnhsYXJnZX07XG4gIHdpZHRoOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLnhsYXJnZX07XG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbmB9LDcyNjE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VUb29sdGlwPXQuaXNFbGVtZW50T3ZlcmZsb3duPXQuT3B0aW9uVGl0bGU9dm9pZCAwO2NvbnN0IGk9big1ODkzKSxhPW4oNjY4OSksbD1uKDc3NjkpLHM9big5NTA3KSxjPW8obig3NTE4KSk7dC5PcHRpb25UaXRsZT1lPT57dmFye2NoaWxkcmVuOm59PWUsbz1yKGUsW1wiY2hpbGRyZW5cIl0pO3JldHVybigwLGkuanN4KSh1LE9iamVjdC5hc3NpZ24oe3JlZjooMCx0LnVzZVRvb2x0aXApKG4pfSxvLHtjaGlsZHJlbjooMCxpLmpzeCkoXCJkaXZcIix7Y2hpbGRyZW46bn0pfSkpfTtjb25zdCB1PSgwLGMuZGVmYXVsdCkobC5UZXh0KWBcbiAgJHtzLk1peGlucy50ZXh0T3ZlcmZsb3d9O1xuICBtYXJnaW4tbGVmdDogJHsoe3RoZW1lOmV9KT0+ZS5weC54c21hbGx9O1xuYDtmdW5jdGlvbiBmKGUpe3JldHVybiBlLnNjcm9sbEhlaWdodD5lLmNsaWVudEhlaWdodHx8ZS5zY3JvbGxXaWR0aD5lLmNsaWVudFdpZHRofXQuaXNFbGVtZW50T3ZlcmZsb3duPWYsdC51c2VUb29sdGlwPWU9PigwLGEudXNlQ2FsbGJhY2spKCh0PT57dCYmZSYmZih0KSYmKHQudGl0bGU9ZSl9KSxbXSl9LDcwMDY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5JY29uPXZvaWQgMDtjb25zdCBpPW4oNTg5MyksYT1uKDY2ODkpLGw9byhuKDc1MTgpKSxzPW4oMTMzNSksYz1uKDk1MDcpLHU9bigzNDcxKSxmPW4oOTY2OSksZD0oMCxhLmZvcndhcmRSZWYpKCgoZSx0KT0+e3Zhcnt0YWJJbmRleDpuLGljb246byxjaGlsZHJlbjphLHNpemU6bD1cImJhc2VcIixjb250YWluZXJTaXplOnMsXCJkYXRhLXRlc3RpZFwiOmN9PWUsdT1yKGUsW1widGFiSW5kZXhcIixcImljb25cIixcImNoaWxkcmVuXCIsXCJzaXplXCIsXCJjb250YWluZXJTaXplXCIsXCJkYXRhLXRlc3RpZFwiXSk7cmV0dXJuKDAsaS5qc3gpKGgsT2JqZWN0LmFzc2lnbih7fSx1LHtpY29uU2l6ZTpsLGNvbnRhaW5lclNpemU6c3x8bCxqdXN0aWZ5Q29udGVudDpcImNlbnRlclwiLGFsaWduSXRlbXM6XCJjZW50ZXJcIixcImRhdGEtdGVzdGlkXCI6Yyx0YWJJbmRleDpuLHJlZjp0fSx7Y2hpbGRyZW46bz8oMCxpLmpzeCkocCxPYmplY3QuYXNzaWduKHthcmlhTGFiZWw6dVtcImFyaWEtbGFiZWxcIl0saWNvbjpvfSx1KSk6YX0pKX0pKTtkLmRpc3BsYXlOYW1lPVwiSWNvblwiLHQuSWNvbj0oMCxsLmRlZmF1bHQpKGQpYGA7Y29uc3QgcD0oMCxsLmRlZmF1bHQpKChlPT57dmFye2ljb246dCxhcmlhTGFiZWw6bn09ZSxvPXIoZSxbXCJpY29uXCIsXCJhcmlhTGFiZWxcIl0pO2NvbnN0IGE9dS5JY29uU2V0W3RdO3JldHVybigwLGkuanN4KShhLE9iamVjdC5hc3NpZ24oe3JvbGU6XCJpbWdcIixcImFyaWEtbGFiZWxcIjpufSxvKSl9KSlgYCxoPSgwLGwuZGVmYXVsdCkocy5Cb3gpYFxuICAvKipcbiAgICogMS4gSW5pdGlhbGl6ZSBsb2NhbCB2YXJpYWJsZXMgd2l0aCByZWFzb25hYmxlIGRlZmF1bHRzXG4gICAqL1xuICAtLXB4LWRlZmF1bHQ6ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUuYmFzZX07XG5cbiAgLyoqXG4gICAqIDIuIEluamVjdCB2YXJpYW50cyAtLSA/IFdoYXQgYXJlIFZhcmlhbnRzXG4gICAqL1xuICAkeygwLGMuZ2V0VmFyaWFudENTUykoZi52YXJpYW50cyxmLlZhcmlhbnQuY29udGFpbmVyU2l6ZSl9XG4gICR7KDAsYy5nZXRWYXJpYW50Q1NTKShmLnZhcmlhbnRzLGYuVmFyaWFudC5pY29uU2l6ZSl9XG5cbiAgd2lkdGg6IHZhcigtLXB4LWNvbnRhaW5lciwgdmFyKC0tcHgtZGVmYXVsdCkpO1xuICBoZWlnaHQ6IHZhcigtLXB4LWNvbnRhaW5lciwgdmFyKC0tcHgtZGVmYXVsdCkpO1xuXG4gIC8qIFNWRyBBc3NldCAqL1xuXG4gICYgPiAqLFxuICAke3B9IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogdmFyKC0tcHgtaWNvbiwgdmFyKC0tcHgtZGVmYXVsdCkpO1xuICAgIGhlaWdodDogdmFyKC0tcHgtaWNvbiwgdmFyKC0tcHgtZGVmYXVsdCkpO1xuICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7XG4gIH1cbmB9LDk2Njk6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudmFyaWFudHM9dC5WYXJpYW50PXZvaWQgMDtjb25zdCByPW4oNzUxOCk7dC5WYXJpYW50PXtpY29uU2l6ZTpcImljb25TaXplXCIsY29udGFpbmVyU2l6ZTpcImNvbnRhaW5lclNpemVcIn0sdC52YXJpYW50cz17W3QuVmFyaWFudC5pY29uU2l6ZV06e3hzbWFsbDpyLmNzc2BcbiAgICAgIC0tcHgtaWNvbjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS54c21hbGx9O1xuICAgIGAsc21hbGw6ci5jc3NgXG4gICAgICAtLXB4LWljb246ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUuc21hbGx9O1xuICAgIGAsYmFzZTpyLmNzc2BcbiAgICAgIC0tcHgtaWNvbjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS5iYXNlfTtcbiAgICBgLGxhcmdlOnIuY3NzYFxuICAgICAgLS1weC1pY29uOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLmxhcmdlfTtcbiAgICBgLHhsYXJnZTpyLmNzc2BcbiAgICAgIC0tcHgtaWNvbjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS54bGFyZ2V9O1xuICAgIGAseHhsYXJnZTpyLmNzc2BcbiAgICAgIC0tcHgtaWNvbjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS54eGxhcmdlfTtcbiAgICBgLHh4eGxhcmdlOnIuY3NzYFxuICAgICAgLS1weC1pY29uOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLnh4eGxhcmdlfTtcbiAgICBgfSxbdC5WYXJpYW50LmNvbnRhaW5lclNpemVdOnt4c21hbGw6ci5jc3NgXG4gICAgICAtLXB4LWNvbnRhaW5lcjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS54c21hbGx9O1xuICAgIGAsc21hbGw6ci5jc3NgXG4gICAgICAtLXB4LWNvbnRhaW5lcjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS5zbWFsbH07XG4gICAgYCxiYXNlOnIuY3NzYFxuICAgICAgLS1weC1jb250YWluZXI6ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUuYmFzZX07XG4gICAgYCxsYXJnZTpyLmNzc2BcbiAgICAgIC0tcHgtY29udGFpbmVyOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLmxhcmdlfTtcbiAgICBgLHhsYXJnZTpyLmNzc2BcbiAgICAgIC0tcHgtY29udGFpbmVyOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLnhsYXJnZX07XG4gICAgYCx4eGxhcmdlOnIuY3NzYFxuICAgICAgLS1weC1jb250YWluZXI6ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUueHhsYXJnZX07XG4gICAgYCx4eHhsYXJnZTpyLmNzc2BcbiAgICAgIC0tcHgtY29udGFpbmVyOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLnh4eGxhcmdlfTtcbiAgICBgfX19LDk2MzQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDcwMDYpLHQpfSw5Mjg1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkJlbGxGaWxsZWRJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5CZWxsRmlsbGVkSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3hzKShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMjBcIixoZWlnaHQ6XCIyMFwiLHZpZXdCb3g6XCIwIDAgMjQgMjRcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46WygwLG8uanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk0xMiAyQzExLjIyOTYgMiAxMC41ODQ1IDIuNTgzNzkgMTAuNTA3OCAzLjM1MDQxQzEwLjQ5NTIgMy40NzY3NyAxMC40MDU3IDMuNTgxNTcgMTAuMjg0NiAzLjYxOTcxQzguMDY1NTQgNC4zMTg1MSA2LjQyMjM4IDYuMzM3OTYgNi4zMDAzMyA4Ljc3ODkzTDYuMTIzODIgMTIuMzA5MUM2LjA5OTM2IDEyLjc5ODIgNS44MTMzMSAxMy4yMzYyIDUuMzc1MyAxMy40NTUyTDQuNjA3MzkgMTMuODM5MkM0LjE0NzYxIDE0LjA2OTEgMy44NTcxOCAxNC41MzkgMy44NTcxOCAxNS4wNTMxVjE2LjI1QzMuODU3MTggMTYuNjI0OCA0LjE2MDk4IDE2LjkyODYgNC41MzU3NSAxNi45Mjg2SDE5LjQ2NDNDMTkuODM5MSAxNi45Mjg2IDIwLjE0MjkgMTYuNjI0OCAyMC4xNDI5IDE2LjI1VjE1LjA1MzFDMjAuMTQyOSAxNC41MzkgMTkuODUyNSAxNC4wNjkxIDE5LjM5MjcgMTMuODM5MkwxOC42MjQ3IDEzLjQ1NTJDMTguMTg2NyAxMy4yMzYyIDE3LjkwMDYgMTIuNzk4MiAxNy44NzYyIDEyLjMwOTFMMTcuNjk5NyA4Ljc3ODkzQzE3LjU3NzYgNi4zMzc5NiAxNS45MzQ0IDQuMzE4NTEgMTMuNzE1NCAzLjYxOTcyQzEzLjU5NDIgMy41ODE1NyAxMy41MDQ4IDMuNDc2NzggMTMuNDkyMiAzLjM1MDQxQzEzLjQxNTUgMi41ODM4IDEyLjc3MDQgMiAxMiAyWlwiLGZpbGw6dH0pLCgwLG8uanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk05LjI4NTcxIDE4LjI4NTdDOS4yODU3MSAxOS43ODQ4IDEwLjUwMDkgMjEgMTIgMjFDMTMuNDk5MSAyMSAxNC43MTQzIDE5Ljc4NDggMTQuNzE0MyAxOC4yODU3TDkuMjg1NzEgMTguMjg1N1pcIixmaWxsOnR9KV19KSl9fSw0NzE4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkJlbGxJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5CZWxsSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNNy40NzMwNiAxLjIyOTQzQzYuNTE5MyAxLjIyOTQzIDUuODcyOTEgMS45ODM5OSA1LjY1MzcxIDIuNzI2OTdDNS42NTIwNyAyLjcyOTMyIDUuNjQ5MjEgMi43MzMwMyA1LjY0NDg1IDIuNzM3NTZDNS42MzkyIDIuNzQzNDIgNS42MzI2NCAyLjc0ODk2IDUuNjI1OTkgMi43NTM1NUM1LjYxOTI2IDIuNzU4MTkgNS42MTQ1MiAyLjc2MDQgNS42MTMgMi43NjEwMkw1LjYxMjY1IDIuNzYxMTdDNS4wNTA4OCAyLjk5MjUxIDQuMzkxOTMgMy4zNjAyMiAzLjg3Njk3IDQuMDMzNTdDMy4zNTgxNSA0LjcxMTk2IDMuMDE5NDkgNS42NTU3MSAzLjAxOTQ1IDYuOTc3NDlMNS42NTM3MSAyLjcyNjk3TDMuMDE5NDUgNi45Nzc3NkMzLjAxODY2IDguMzAxNjUgMi44Nzg3MSA5LjAzMTMgMi42NzA5MSA5LjUzNDM5QzIuNDg4NzkgOS45NzUzMSAyLjI0ODg5IDEwLjI2NTggMS45MTIgMTAuNjczOEwxLjkxMTg1IDEwLjY3NEMxLjg2MjYzIDEwLjczMzYgMS44MTEzNSAxMC43OTU3IDEuNzU3ODcgMTAuODYxMkMxLjE0OTIzIDExLjYwNiAxLjcyNzI5IDEyLjY0MTkgMi42NTk4NiAxMi42NDE5SDUuMDkwMTlDNS4yMTE5MSAxMi45OCA1LjQwNzI2IDEzLjI5MDYgNS42NjYxOCAxMy41NDk1QzYuMTI4MjcgMTQuMDExNiA2Ljc1NDk5IDE0LjI3MTIgNy40MDg0OCAxNC4yNzEyQzguMDYxOTcgMTQuMjcxMiA4LjY4ODcgMTQuMDExNiA5LjE1MDc4IDEzLjU0OTVDOS40MDk3MSAxMy4yOTA2IDkuNjA1MDUgMTIuOTggOS43MjY3OCAxMi42NDE5SDEyLjI4OTRDMTMuMjIzNCAxMi42NDE5IDEzLjc5MiAxMS42MDA4IDEzLjE4ODQgMTAuODYxM0wxMy4xODgzIDEwLjg2MTJDMTMuMTM0OCAxMC43OTU3IDEzLjA4MzUgMTAuNzMzNiAxMy4wMzQyIDEwLjY3NEMxMi42OTczIDEwLjI2NTkgMTIuNDU3NCA5Ljk3NTQgMTIuMjc1NSA5LjUzNDUxQzEyLjA2NzggOS4wMzE0NyAxMS45MjgyIDguMzAxODIgMTEuOTI4MiA2Ljk3Nzc2QzExLjkyODIgNS42NTY4OCAxMS41ODkxIDQuNzEyOTkgMTEuMDcwMyA0LjAzNDMzQzEwLjU1NTMgMy4zNjA3NSA5Ljg5NjUyIDIuOTkyMzQgOS4zMzQ5OSAyLjc2MTE1TDkuMzM0NjcgMi43NjEwMkM5LjMzNDA5IDIuNzYwNzkgOS4zMjk4MiAyLjc1ODg4IDkuMzIzMTMgMi43NTQyNEM5LjMxNjU1IDIuNzQ5NjcgOS4zMDk4MSAyLjc0Mzk0IDkuMzAzODIgMi43Mzc3QzkuMjk4NzUgMi43MzI0MSA5LjI5NTQ1IDIuNzI4MDMgOS4yOTM2MyAyLjcyNTMxQzkuMDcyNjQgMS45ODM3OCA4LjQyNjkxIDEuMjI5NDMgNy40NzMwNiAxLjIyOTQzWk04LjY4NjU0IDEyLjY0MTlINi4xMzA0MkM2LjE4NzYgMTIuNzI5NSA2LjI1NDAzIDEyLjgxMTUgNi4zMjkxIDEyLjg4NjZDNi42MTUzNyAxMy4xNzI5IDcuMDAzNjMgMTMuMzMzNyA3LjQwODQ4IDEzLjMzMzdDNy44MTMzMyAxMy4zMzM3IDguMjAxNiAxMy4xNzI5IDguNDg3ODcgMTIuODg2NkM4LjU2MjkzIDEyLjgxMTUgOC42MjkzNyAxMi43Mjk1IDguNjg2NTQgMTIuNjQxOVpNNi41NTE0NSAyLjk5NzE2QzYuNjk1NzEgMi41MDA4NSA3LjA3MTIxIDIuMTY2OTMgNy40NzMwNiAyLjE2NjkzQzcuODc0OTIgMi4xNjY5MyA4LjI1MDUgMi41MDA2MSA4LjM5NjYgMi45OTc4NUw4LjM5Njk1IDIuOTk5MDRDOC40ODQ5OSAzLjI5NTc1IDguNzI4NDMgMy41MjUzOCA4Ljk3ODA5IDMuNjI4MDZDOS40NTYyNSAzLjgyNDkyIDkuOTQ4OTQgNC4xMTExOSAxMC4zMjU1IDQuNjAzNzNDMTAuNjk4MiA1LjA5MTE5IDEwLjk5MDcgNS44MjQ4NiAxMC45OTA3IDYuOTc3NzZDMTAuOTkwNyA4LjM1NTA2IDExLjEzMzcgOS4yMjU1IDExLjQwODkgOS44OTIxN0MxMS42NDgzIDEwLjQ3MjMgMTEuOTgyMyAxMC44NzQ5IDEyLjMxNjcgMTEuMjc4QzEyLjM2NTMgMTEuMzM2NiAxMi40MTM5IDExLjM5NTEgMTIuNDYyMiAxMS40NTQyQzEyLjUwMTYgMTEuNTAyNSAxMi41MDQ2IDExLjU1NTIgMTIuNDc5MyAxMS42MDVDMTIuNDU1MyAxMS42NTI0IDEyLjM5OTYgMTEuNzA0NCAxMi4yODk0IDExLjcwNDRIMi42NTk4NkMyLjU0NjA0IDExLjcwNDQgMi40ODk1NSAxMS42NTA5IDIuNDY1ODggMTEuNjA0NUMyLjQ0MTE5IDExLjU1NjIgMi40NDMyNSAxMS41MDQgMi40ODM4IDExLjQ1NDRMMi40ODM4MyAxMS40NTQ0QzIuNTMyMTUgMTEuMzk1MiAyLjU4MDc1IDExLjMzNjYgMi42MjkzNCAxMS4yNzgxTDIuNjI5NDYgMTEuMjc3OUMyLjk2Mzg5IDEwLjg3NDggMy4yOTc4NSAxMC40NzIzIDMuNTM3NCA5Ljg5MjI5QzMuODEyNzMgOS4yMjU3MSAzLjk1NjE1IDguMzU1MzMgMy45NTY5NSA2Ljk3ODAzVjYuOTc3NzZDMy45NTY5NSA1LjgyMzQxIDQuMjQ5MjggNS4wODk5OSA0LjYyMTY1IDQuNjAzMDlDNC45OTc5MiA0LjExMTEgNS40OTA0NCAzLjgyNTM3IDUuOTY5NjMgMy42MjgwNUM2LjIxNjYxIDMuNTI2NDUgNi40NjI1NyAzLjMwMDAyIDYuNTUxMTEgMi45OTgzM0w2LjU1MTQ1IDIuOTk3MTZaXCIsZmlsbDp0LHJvbGU6XCJpbWdcIn0pfSkpfX0sMTMyNDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Cb29rbWFya0ZpbGxlZD12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuQm9va21hcmtGaWxsZWQ9ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTJcIixoZWlnaHQ6XCIxMlwiLHZpZXdCb3g6XCIwIDAgMTIgMTJcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTIuODAwMDUgMS4xNzU3OEMyLjUyMzkxIDEuMTc1NzggMi4zMDAwNSAxLjM5OTY0IDIuMzAwMDUgMS42NzU3OFYxMC40NzU4QzIuMzAwMDUgMTAuNjY2OSAyLjQwOTA0IDEwLjg0MTQgMi41ODA4NiAxMC45MjUyQzIuNzUyNjcgMTEuMDA5IDIuOTU3MjMgMTAuOTg3NSAzLjEwNzg3IDEwLjg2OThMNS44NDYxNCA4LjczMDUyQzUuOTM2NTggOC42NTk4NiA2LjA2MzUyIDguNjU5ODYgNi4xNTM5NiA4LjczMDUyTDguODkyMjMgMTAuODY5OEM5LjA0Mjg3IDEwLjk4NzUgOS4yNDc0MiAxMS4wMDkgOS40MTkyNCAxMC45MjUyQzkuNTkxMDUgMTAuODQxNCA5LjcwMDA1IDEwLjY2NjkgOS43MDAwNSAxMC40NzU4VjEuNjc1NzhDOS43MDAwNSAxLjM5OTY0IDkuNDc2MTkgMS4xNzU3OCA5LjIwMDA1IDEuMTc1NzhIMi44MDAwNVpcIixmaWxsOnR9KX0pKX19LDExMDM6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQm9va21hcmtPdXRsaW5lZD12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuQm9va21hcmtPdXRsaW5lZD1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxMlwiLGhlaWdodDpcIjEyXCIsdmlld0JveDpcIjAgMCAxMiAxMlwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMi4yOTk5OSAxLjY3NTc4QzIuMjk5OTkgMS4zOTk2NCAyLjUyMzg1IDEuMTc1NzggMi43OTk5OSAxLjE3NTc4SDkuMTk5OTlDOS40NzYxMyAxLjE3NTc4IDkuNjk5OTkgMS4zOTk2NCA5LjY5OTk5IDEuNjc1NzhWMTAuNDc1OEM5LjY5OTk5IDEwLjY2NjkgOS41OTA5OSAxMC44NDE0IDkuNDE5MTggMTAuOTI1MkM5LjI0NzM2IDExLjAwOSA5LjA0MjgxIDEwLjk4NzUgOC44OTIxNyAxMC44Njk4TDYuMTUzOSA4LjczMDUyQzYuMDYzNDYgOC42NTk4NiA1LjkzNjUyIDguNjU5ODYgNS44NDYwOCA4LjczMDUyTDMuMTA3ODEgMTAuODY5OEMyLjk1NzE3IDEwLjk4NzUgMi43NTI2MSAxMS4wMDkgMi41ODA4IDEwLjkyNTJDMi40MDg5OCAxMC44NDE0IDIuMjk5OTkgMTAuNjY2OSAyLjI5OTk5IDEwLjQ3NThWMS42NzU3OFpNMy4yOTk5OSAyLjE3NTc4VjkuNDUwNjZMNS4yMzA0MyA3Ljk0MjVDNS42ODI2NSA3LjU4OTIxIDYuMzE3MzMgNy41ODkyIDYuNzY5NTQgNy45NDI1TDguNjk5OTkgOS40NTA2NlYyLjE3NTc4SDMuMjk5OTlaXCIsZmlsbDp0fSl9KSl9fSw4MjY1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkJyb2tlbkxpbmtJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5Ccm9rZW5MaW5rSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3hzKShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMzJcIixoZWlnaHQ6XCIzMlwiLHZpZXdCb3g6XCIwIDAgMzIgMzJcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46WygwLG8uanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk02LjMzMzUgMy43MDAyQzYuMDU3MzUgMy43MDAyIDUuODMzNSAzLjkyNDA1IDUuODMzNSA0LjIwMDJWMjcuODAwMkM1LjgzMzUgMjguMDc2MyA2LjA1NzM1IDI4LjMwMDIgNi4zMzM1IDI4LjMwMDJIMjUuNjY2OEMyNS45NDMgMjguMzAwMiAyNi4xNjY4IDI4LjA3NjMgMjYuMTY2OCAyNy44MDAyVjEyLjIzMzVIMTguMTMzNUMxNy44NTc0IDEyLjIzMzUgMTcuNjMzNSAxMi4wMDk3IDE3LjYzMzUgMTEuNzMzNVYzLjcwMDJINi4zMzM1Wk0xOC42MzM1IDQuNDA3M0wyNS40NTk3IDExLjIzMzVIMTguNjMzNVY0LjQwNzNaTTQuODMzNSA0LjIwMDJDNC44MzM1IDMuMzcxNzcgNS41MDUwNyAyLjcwMDIgNi4zMzM1IDIuNzAwMkgxOC4xMzM1QzE4LjI2NjEgMi43MDAyIDE4LjM5MzMgMi43NTI4NyAxOC40ODcgMi44NDY2NEwyNy4wMjA0IDExLjM4QzI3LjExNDEgMTEuNDczNyAyNy4xNjY4IDExLjYwMDkgMjcuMTY2OCAxMS43MzM1VjI3LjgwMDJDMjcuMTY2OCAyOC42Mjg2IDI2LjQ5NTMgMjkuMzAwMiAyNS42NjY4IDI5LjMwMDJINi4zMzM1QzUuNTA1MDcgMjkuMzAwMiA0LjgzMzUgMjguNjI4NiA0LjgzMzUgMjcuODAwMlY0LjIwMDJaXCIsZmlsbDp0fSksKDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTE0LjI0OCAyMS45MDg0VjIxLjg0MDlDMTQuMjUyOCAyMS40MDA2IDE0LjI5NjYgMjEuMDUwMiAxNC4zNzk0IDIwLjc4OThDMTQuNDY0NyAyMC41Mjk0IDE0LjU4NTQgMjAuMzE4NyAxNC43NDE3IDIwLjE1NzdDMTQuODk3OSAxOS45OTY3IDE1LjA4NjEgMTkuODQ5OSAxNS4zMDYzIDE5LjcxNzNDMTUuNDQ4MyAxOS42Mjc0IDE1LjU3NjIgMTkuNTI2OCAxNS42ODk4IDE5LjQxNTVDMTUuODAzNCAxOS4zMDQyIDE1Ljg5MzQgMTkuMTc2NCAxNS45NTk3IDE5LjAzMkMxNi4wMjYgMTguODg3NSAxNi4wNTkxIDE4LjcyNzcgMTYuMDU5MSAxOC41NTI2QzE2LjA1OTEgMTguMzQxOSAxNi4wMDk0IDE4LjE1OTYgMTUuOTEgMTguMDA1N0MxNS44MTA1IDE3Ljg1MTggMTUuNjc4IDE3LjczMzQgMTUuNTEyMyAxNy42NTA2QzE1LjM0ODkgMTcuNTY1MyAxNS4xNjY2IDE3LjUyMjcgMTQuOTY1NCAxNy41MjI3QzE0Ljc4MzEgMTcuNTIyNyAxNC42MDkxIDE3LjU2MDYgMTQuNDQzNCAxNy42MzY0QzE0LjI3NzYgMTcuNzEyMSAxNC4xNDAzIDE3LjgzMDUgMTQuMDMxNCAxNy45OTE1QzEzLjkyMjUgMTguMTUwMSAxMy44NTk4IDE4LjM1NDkgMTMuODQzMiAxOC42MDU4SDEyLjc2MzdDMTIuNzgwMiAxOC4xNzk3IDEyLjg4OCAxNy44MTk4IDEzLjA4NjggMTcuNTI2M0MxMy4yODU3IDE3LjIzMDQgMTMuNTQ4NSAxNy4wMDY2IDEzLjg3NTIgMTYuODU1MUMxNC4yMDQyIDE2LjcwMzYgMTQuNTY3NiAxNi42Mjc4IDE0Ljk2NTQgMTYuNjI3OEMxNS40MDEgMTYuNjI3OCAxNS43ODIxIDE2LjcwOTUgMTYuMTA4OCAxNi44NzI5QzE2LjQzNTUgMTcuMDMzOSAxNi42ODg5IDE3LjI1OTkgMTYuODY4OCAxNy41NTExQzE3LjA1MTEgMTcuODQgMTcuMTQyMiAxOC4xNzczIDE3LjE0MjIgMTguNTYzMkMxNy4xNDIyIDE4LjgyODQgMTcuMTAwOCAxOS4wNjc1IDE3LjAxNzkgMTkuMjgwNUMxNi45MzUxIDE5LjQ5MTIgMTYuODE2NyAxOS42Nzk1IDE2LjY2MjggMTkuODQ1MkMxNi41MTEzIDIwLjAxMDkgMTYuMzI5IDIwLjE1NzcgMTYuMTE1OSAyMC4yODU1QzE1LjkxNDcgMjAuNDExIDE1Ljc1MTQgMjAuNTQxMiAxNS42MjU5IDIwLjY3NjFDMTUuNTAyOCAyMC44MTExIDE1LjQxMjggMjAuOTcwOSAxNS4zNTYgMjEuMTU1NUMxNS4yOTkyIDIxLjM0MDIgMTUuMjY4NCAyMS41Njg3IDE1LjI2MzcgMjEuODQwOVYyMS45MDg0SDE0LjI0OFpNMTQuNzg0MyAyNC4wNjc1QzE0LjU5MDEgMjQuMDY3NSAxNC40MjMyIDIzLjk5ODggMTQuMjgzNiAyMy44NjE1QzE0LjE0MzkgMjMuNzIxOCAxNC4wNzQgMjMuNTUzNyAxNC4wNzQgMjMuMzU3MkMxNC4wNzQgMjMuMTYzMSAxNC4xNDM5IDIyLjk5NzQgMTQuMjgzNiAyMi44NjAxQzE0LjQyMzIgMjIuNzIwNCAxNC41OTAxIDIyLjY1MDYgMTQuNzg0MyAyMi42NTA2QzE0Ljk3NiAyMi42NTA2IDE1LjE0MTcgMjIuNzIwNCAxNS4yODE0IDIyLjg2MDFDMTUuNDIzNSAyMi45OTc0IDE1LjQ5NDUgMjMuMTYzMSAxNS40OTQ1IDIzLjM1NzJDMTUuNDk0NSAyMy40ODc1IDE1LjQ2MTQgMjMuNjA3IDE1LjM5NTEgMjMuNzE1OUMxNS4zMzExIDIzLjgyMjQgMTUuMjQ1OSAyMy45MDc3IDE1LjEzOTQgMjMuOTcxNkMxNS4wMzI4IDI0LjAzNTUgMTQuOTE0NSAyNC4wNjc1IDE0Ljc4NDMgMjQuMDY3NVpcIixmaWxsOnR9KV19KSl9fSw2NDQ3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNoZXZyb25Eb3duSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuQ2hldnJvbkRvd25JY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsd2lkdGg6XCIyNFwiLGhlaWdodDpcIjI0XCIsdmlld0JveDpcIjAgMCAyNCAyNFwiLGZpbGw6XCJub25lXCJ9LHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIsT2JqZWN0LmFzc2lnbih7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk01LjA1MjgyIDkuODg3MDdDNS4zMzYxMiA5LjU4NDg5IDUuODEwNzUgOS41Njk1OCA2LjExMjkzIDkuODUyODdMMTIgMTUuMzcyTDE3Ljg4NyA5Ljg1Mjg3QzE4LjE4OTIgOS41Njk1OCAxOC42NjM4IDkuNTg0ODkgMTguOTQ3MSA5Ljg4NzA3QzE5LjIzMDQgMTAuMTg5MyAxOS4yMTUxIDEwLjY2MzkgMTguOTEyOSAxMC45NDcyTDEyLjUxMjkgMTYuOTQ3MkMxMi4yMjQ0IDE3LjIxNzYgMTEuNzc1NSAxNy4yMTc2IDExLjQ4NyAxNi45NDcyTDUuMDg3MDIgMTAuOTQ3MkM0Ljc4NDg0IDEwLjY2MzkgNC43Njk1MiAxMC4xODkzIDUuMDUyODIgOS44ODcwN1pcIixmaWxsOnR9LG4pKX0pKX19LDIxNDc6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2hldnJvbkxlZnRJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5DaGV2cm9uTGVmdEljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3htbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIix3aWR0aDpcIjI0XCIsaGVpZ2h0OlwiMjRcIix2aWV3Qm94OlwiMCAwIDI0IDI0XCIsZmlsbDpcIm5vbmVcIn0se2NoaWxkcmVuOigwLG8uanN4KShcInBhdGhcIixPYmplY3QuYXNzaWduKHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTE0LjExMjcgNS4wNTI3MkMxNC40MTQ5IDUuMzM2MDEgMTQuNDMwMiA1LjgxMDY0IDE0LjE0NjkgNi4xMTI4Mkw4LjYyNzg0IDExLjk5OTlMMTQuMTQ2OSAxNy44ODY5QzE0LjQzMDIgMTguMTg5MSAxNC40MTQ5IDE4LjY2MzcgMTQuMTEyNyAxOC45NDdDMTMuODEwNiAxOS4yMzAzIDEzLjMzNTkgMTkuMjE1IDEzLjA1MjYgMTguOTEyOEw3LjA1MjY0IDEyLjUxMjhDNi43ODIxOCAxMi4yMjQzIDYuNzgyMTggMTEuNzc1NCA3LjA1MjY0IDExLjQ4NjlMMTMuMDUyNiA1LjA4NjkxQzEzLjMzNTkgNC43ODQ3MyAxMy44MTA2IDQuNzY5NDIgMTQuMTEyNyA1LjA1MjcyWlwiLGZpbGw6dH0sbikpfSkpfX0sMjQwMjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DaGV2cm9uUmlnaHRJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5DaGV2cm9uUmlnaHRJY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsd2lkdGg6XCIyNFwiLGhlaWdodDpcIjI0XCIsdmlld0JveDpcIjAgMCAyNCAyNFwiLGZpbGw6XCJub25lXCJ9LHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIsT2JqZWN0LmFzc2lnbih7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk05Ljg4NzYyIDUuMDUyNTZDMTAuMTg5OCA0Ljc2OTI2IDEwLjY2NDQgNC43ODQ1NyAxMC45NDc3IDUuMDg2NzZMMTYuOTQ3NyAxMS40ODY4QzE3LjIxODIgMTEuNzc1MyAxNy4yMTgyIDEyLjIyNDIgMTYuOTQ3NyAxMi41MTI3TDEwLjk0NzcgMTguOTEyN0MxMC42NjQ0IDE5LjIxNDkgMTAuMTg5OCAxOS4yMzAyIDkuODg3NjIgMTguOTQ2OUM5LjU4NTQzIDE4LjY2MzYgOS41NzAxMiAxOC4xODg5IDkuODUzNDIgMTcuODg2OEwxNS4zNzI1IDExLjk5OTdMOS44NTM0MiA2LjExMjY3QzkuNTcwMTIgNS44MTA0OSA5LjU4NTQ0IDUuMzM1ODYgOS44ODc2MiA1LjA1MjU2WlwiLGZpbGw6dH0sbikpfSkpfX0sNDgyNTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DaGV2cm9uVXBJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5DaGV2cm9uVXBJY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsd2lkdGg6XCIyNFwiLGhlaWdodDpcIjI0XCIsdmlld0JveDpcIjAgMCAyNCAyNFwiLGZpbGw6XCJub25lXCJ9LHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIsT2JqZWN0LmFzc2lnbih7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk01LjA1Mjg1IDE0LjExMjlDNS4zMzYxNSAxNC40MTUxIDUuODEwNzggMTQuNDMwNCA2LjExMjk2IDE0LjE0NzFMMTIgOC42MjgwMkwxNy44ODcgMTQuMTQ3MUMxOC4xODkyIDE0LjQzMDQgMTguNjYzOSAxNC40MTUxIDE4Ljk0NzIgMTQuMTEyOUMxOS4yMzA1IDEzLjgxMDcgMTkuMjE1MSAxMy4zMzYxIDE4LjkxMyAxMy4wNTI4TDEyLjUxMyA3LjA1MjgyQzEyLjIyNDUgNi43ODIzNiAxMS43NzU1IDYuNzgyMzYgMTEuNDg3MSA3LjA1MjgyTDUuMDg3MDUgMTMuMDUyOEM0Ljc4NDg3IDEzLjMzNjEgNC43Njk1NiAxMy44MTA3IDUuMDUyODUgMTQuMTEyOVpcIixmaWxsOnR9LG4pKX0pKX19LDEyODE6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuRXhjbGFtYXRpb25DaXJjbGVkRmlsbGVkSWNvbj12b2lkIDA7Y29uc3Qgcj1uKDU4OTMpO3QuRXhjbGFtYXRpb25DaXJjbGVkRmlsbGVkSWNvbj1lPT4oMCxyLmpzeHMpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNlwiLGhlaWdodDpcIjE3XCIsdmlld0JveDpcIjAgMCAxNiAxN1wiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlLHtjaGlsZHJlbjpbKDAsci5qc3gpKFwicGF0aFwiLHtkOlwiTTcuOTk5ODggMTUuMzMxN0MxMS43NzI5IDE1LjMzMTcgMTQuODMxNiAxMi4yNzMxIDE0LjgzMTYgOC41MDAwN0MxNC44MzE2IDQuNzI3MDQgMTEuNzcyOSAxLjY2ODQgNy45OTk4OCAxLjY2ODRDNC4yMjY4NiAxLjY2ODQgMS4xNjgyMSA0LjcyNzA0IDEuMTY4MjEgOC41MDAwN0MxLjE2ODIxIDEyLjI3MzEgNC4yMjY4NiAxNS4zMzE3IDcuOTk5ODggMTUuMzMxN1pcIixmaWxsOlwicmVkXCJ9KSwoMCxyLmpzeCkoXCJtYXNrXCIsT2JqZWN0LmFzc2lnbih7aWQ6XCJwYXRoLTItaW5zaWRlLTFfNl8yNjIwMzNcIixmaWxsOlwid2hpdGVcIn0se2NoaWxkcmVuOigwLHIuanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk03Ljk5OTkzIDQuMzczODRDNy41NzUyNSA0LjM3Mzg0IDcuMjM1NjQgNC43MjY3NiA3LjI1MTk2IDUuMTUxMTNMNy40MjI5NiA5LjU5NzA2QzcuNDM0ODkgOS45MDcwOCA3LjY4OTY4IDEwLjE1MjMgNy45OTk5MyAxMC4xNTIzQzguMzEwMTkgMTAuMTUyMyA4LjU2NDk4IDkuOTA3MDggOC41NzY5IDkuNTk3MDZMOC43NDc5IDUuMTUxMTNDOC43NjQyMiA0LjcyNjc2IDguNDI0NjEgNC4zNzM4NCA3Ljk5OTkzIDQuMzczODRaTTcuOTk5OTMgMTIuNjQwNkM4LjQ2MDIyIDEyLjY0MDYgOC44MzMzNSAxMi4yNjc1IDguODMzMzUgMTEuODA3MkM4LjgzMzM1IDExLjM0NjkgOC40NjAyMiAxMC45NzM4IDcuOTk5OTMgMTAuOTczOEM3LjUzOTY0IDEwLjk3MzggNy4xNjY1IDExLjM0NjkgNy4xNjY1IDExLjgwNzJDNy4xNjY1IDEyLjI2NzUgNy41Mzk2NCAxMi42NDA2IDcuOTk5OTMgMTIuNjQwNlpcIn0pfSkpLCgwLHIuanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk03Ljk5OTkzIDQuMzczODRDNy41NzUyNSA0LjM3Mzg0IDcuMjM1NjQgNC43MjY3NiA3LjI1MTk2IDUuMTUxMTNMNy40MjI5NiA5LjU5NzA2QzcuNDM0ODkgOS45MDcwOCA3LjY4OTY4IDEwLjE1MjMgNy45OTk5MyAxMC4xNTIzQzguMzEwMTkgMTAuMTUyMyA4LjU2NDk4IDkuOTA3MDggOC41NzY5IDkuNTk3MDZMOC43NDc5IDUuMTUxMTNDOC43NjQyMiA0LjcyNjc2IDguNDI0NjEgNC4zNzM4NCA3Ljk5OTkzIDQuMzczODRaTTcuOTk5OTMgMTIuNjQwNkM4LjQ2MDIyIDEyLjY0MDYgOC44MzMzNSAxMi4yNjc1IDguODMzMzUgMTEuODA3MkM4LjgzMzM1IDExLjM0NjkgOC40NjAyMiAxMC45NzM4IDcuOTk5OTMgMTAuOTczOEM3LjUzOTY0IDEwLjk3MzggNy4xNjY1IDExLjM0NjkgNy4xNjY1IDExLjgwNzJDNy4xNjY1IDEyLjI2NzUgNy41Mzk2NCAxMi42NDA2IDcuOTk5OTMgMTIuNjQwNlpcIixmaWxsOlwid2hpdGVcIn0pLCgwLHIuanN4KShcInBhdGhcIix7ZDpcIk03LjI1MTk2IDUuMTUxMTNMNS42NDg3NCA1LjIxMjc5TDUuNjQ4NzQgNS4yMTI3OUw3LjI1MTk2IDUuMTUxMTNaTTcuNDIyOTYgOS41OTcwNkw5LjAyNjE4IDkuNTM1NEw5LjAyNjE4IDkuNTM1NEw3LjQyMjk2IDkuNTk3MDZaTTguNTc2OSA5LjU5NzA2TDEwLjE4MDEgOS42NTg3Mkw4LjU3NjkgOS41OTcwNlpNOC43NDc5IDUuMTUxMTNMMTAuMzUxMSA1LjIxMjc5TDEwLjM1MTEgNS4yMTI3OUw4Ljc0NzkgNS4xNTExM1pNOC44NTUxOSA1LjA4OTQ3QzguODczODUgNS41NzQ3IDguNDg1NTMgNS45NzgyNSA3Ljk5OTkzIDUuOTc4MjVWMi43Njk0M0M2LjY2NDk4IDIuNzY5NDMgNS41OTc0NCAzLjg3ODgyIDUuNjQ4NzQgNS4yMTI3OUw4Ljg1NTE5IDUuMDg5NDdaTTkuMDI2MTggOS41MzU0TDguODU1MTkgNS4wODk0N0w1LjY0ODc0IDUuMjEyNzlMNS44MTk3NCA5LjY1ODcyTDkuMDI2MTggOS41MzU0Wk03Ljk5OTkzIDguNTQ3ODZDOC41NTE3NyA4LjU0Nzg2IDkuMDA0OTggOC45ODM5NiA5LjAyNjE4IDkuNTM1NEw1LjgxOTc0IDkuNjU4NzJDNS44NjQ4IDEwLjgzMDIgNi44Mjc1OCAxMS43NTY3IDcuOTk5OTMgMTEuNzU2N1Y4LjU0Nzg2Wk02Ljk3MzY4IDkuNTM1NEM2Ljk5NDg5IDguOTgzOTYgNy40NDgwOSA4LjU0Nzg2IDcuOTk5OTMgOC41NDc4NlYxMS43NTY3QzkuMTcyMjggMTEuNzU2NyAxMC4xMzUxIDEwLjgzMDIgMTAuMTgwMSA5LjY1ODcyTDYuOTczNjggOS41MzU0Wk03LjE0NDY4IDUuMDg5NDdMNi45NzM2OCA5LjUzNTRMMTAuMTgwMSA5LjY1ODcyTDEwLjM1MTEgNS4yMTI3OUw3LjE0NDY4IDUuMDg5NDdaTTcuOTk5OTMgNS45NzgyNUM3LjUxNDM0IDUuOTc4MjUgNy4xMjYwMiA1LjU3NDcgNy4xNDQ2OCA1LjA4OTQ3TDEwLjM1MTEgNS4yMTI3OUMxMC40MDI0IDMuODc4ODIgOS4zMzQ4OSAyLjc2OTQzIDcuOTk5OTMgMi43Njk0M1Y1Ljk3ODI1Wk03LjIyODk1IDExLjgwNzJDNy4yMjg5NSAxMS4zODE0IDcuNTc0MTMgMTEuMDM2MiA3Ljk5OTkzIDExLjAzNjJWMTQuMjQ1QzkuMzQ2MzEgMTQuMjQ1IDEwLjQzNzggMTMuMTUzNiAxMC40Mzc4IDExLjgwNzJINy4yMjg5NVpNNy45OTk5MyAxMi41NzgyQzcuNTc0MTMgMTIuNTc4MiA3LjIyODk1IDEyLjIzMyA3LjIyODk1IDExLjgwNzJIMTAuNDM3OEMxMC40Mzc4IDEwLjQ2MDggOS4zNDYzMSA5LjM2OTM3IDcuOTk5OTMgOS4zNjkzN1YxMi41NzgyWk04Ljc3MDkxIDExLjgwNzJDOC43NzA5MSAxMi4yMzMgOC40MjU3MyAxMi41NzgyIDcuOTk5OTMgMTIuNTc4MlY5LjM2OTM3QzYuNjUzNTUgOS4zNjkzNyA1LjU2MjEgMTAuNDYwOCA1LjU2MjEgMTEuODA3Mkg4Ljc3MDkxWk03Ljk5OTkzIDExLjAzNjJDOC40MjU3MyAxMS4wMzYyIDguNzcwOTEgMTEuMzgxNCA4Ljc3MDkxIDExLjgwNzJINS41NjIxQzUuNTYyMSAxMy4xNTM2IDYuNjUzNTUgMTQuMjQ1IDcuOTk5OTMgMTQuMjQ1VjExLjAzNjJaXCIsZmlsbDpcIndoaXRlXCIsbWFzazpcInVybCgjcGF0aC0yLWluc2lkZS0xXzZfMjYyMDMzKVwifSldfSkpfSwxNDA5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkZhbGxiYWNrR2xvYmVJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5GYWxsYmFja0dsb2JlSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNlwiLGhlaWdodDpcIjE2XCIsdmlld0JveDpcIjAgMCAxNiAxNlwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNMTQuNDE0MSA1LjE5OTk4QzEzLjU5MzcgMy4zMzA2MiAxMS45Nzg4IDEuODg1ODIgOS45OTg4NiAxLjI5NDMyQzEwLjYxNzcgMi4yNjIwNyAxMS4wNTE3IDMuNjYzNDcgMTEuMjg4NiA1LjE5OTk4SDE0LjQxNDFaTTE0Ljc3NzEgOS43NDk5OEMxNC45MjIgOS4xOTAzMyAxNSA4LjYwNDQzIDE1IDcuOTk5OThDMTUgNy4zOTU1MyAxNC45MjIgNi44MDk2MyAxNC43NzcxIDYuMjQ5OThIMTEuNDE3MUMxMS40NzEzIDYuODI5MjMgMTEuNSA3LjQxNjg4IDExLjUgNy45OTk5OEMxMS41IDguNTgzMDggMTEuNDcxMyA5LjE3MDczIDExLjQxNzEgOS43NDk5OEgxNC43NzcxWk00LjUwMDAxIDcuOTk5OThDNC41MDAwMSA3LjQxNjg4IDQuNTI4NzEgNi44MjkyMyA0LjU4Mjk2IDYuMjQ5OThIMS4yMjI5NUMxLjA3ODA1IDYuODA5NjMgMSA3LjM5NTUzIDEgNy45OTk5OEMxIDguNjA0NDMgMS4wNzgwNSA5LjE5MDMzIDEuMjIyOTUgOS43NDk5OEg0LjU4Mjk2QzQuNTI4NzEgOS4xNzA3MyA0LjUwMDAxIDguNTgzMDggNC41MDAwMSA3Ljk5OTk4Wk0xMC40NSA3Ljk5OTk4QzEwLjQ1IDcuMzg5NTggMTAuNDE2OCA2LjgwNjQ4IDEwLjM2MTggNi4yNDk5OEg1LjYzODIxQzUuNTgzMjYgNi44MDY0OCA1LjU1MDAxIDcuMzg5NTggNS41NTAwMSA3Ljk5OTk4QzUuNTUwMDEgOC42MTAzOCA1LjU4MzI2IDkuMTkzNDggNS42MzgyMSA5Ljc0OTk4SDEwLjM2MThDMTAuNDE2OCA5LjE5MzQ4IDEwLjQ1IDguNjEwMzggMTAuNDUgNy45OTk5OFpNMTAuMjI2NyA1LjE5OTk4QzkuODA3NDEgMi42NzcxNyA4Ljg2NTU2IDAuOTk5OTY5IDguMDAwMDEgMC45OTk5NjlDNy4xMzQ0NiAwLjk5OTk2OSA2LjE5MjYxIDIuNjc3MTcgNS43NzMzMSA1LjE5OTk4SDEwLjIyNjdaTTUuNzczMzEgMTAuOEM2LjE5MjYxIDEzLjMyMjggNy4xMzQ4MSAxNSA4LjAwMDAxIDE1QzguODY1MjEgMTUgOS44MDc0MSAxMy4zMjI4IDEwLjIyNjcgMTAuOEg1Ljc3MzMxWk00LjcxMTQxIDUuMTk5OThDNC45NDgzNiAzLjY2MzQ3IDUuMzgyMzYgMi4yNjIwNyA2LjAwMTE2IDEuMjk0MzJDNC4wMjEyIDEuODg1ODIgMi40MDYzIDMuMzMwNjIgMS41ODU5IDUuMTk5OThINC43MTE0MVpNMTEuMjg4NiAxMC44QzExLjA1MTcgMTIuMzM2NSAxMC42MTc3IDEzLjczNzkgOS45OTg4NiAxNC43MDU2QzExLjk3ODggMTQuMTE0MSAxMy41OTM3IDEyLjY2OTcgMTQuNDE0MSAxMC44SDExLjI4ODZaTTEuNTg1OSAxMC44QzIuNDA2MyAxMi42NjkzIDQuMDIxMiAxNC4xMTQxIDYuMDAxMTYgMTQuNzA1NkM1LjM4MjM2IDEzLjczNzkgNC45NDgzNiAxMi4zMzY1IDQuNzExNDEgMTAuOEgxLjU4NTlaXCIsZmlsbDp0LGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSl9KSl9fSw3NDI5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkZpbGxlZENpcmNsZUljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0LkZpbGxlZENpcmNsZUljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTZcIixoZWlnaHQ6XCIxNlwiLHZpZXdCb3g6XCIwIDAgMTYgMTZcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwiZ1wiLE9iamVjdC5hc3NpZ24oe2lkOlwiLlNsb3RcIn0se2NoaWxkcmVuOigwLG8uanN4KShcImNpcmNsZVwiLHtpZDpcIkVsbGlwc2UgMVwiLGN4OlwiOFwiLGN5OlwiOFwiLHI6XCI4XCIsZmlsbDp0fSl9KSl9KSl9fSw2Nzk1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkZpbHRlckljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0LkZpbHRlckljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTJcIixoZWlnaHQ6XCI3XCIsdmlld0JveDpcIjAgMCAxMiA3XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LG4se2NoaWxkcmVuOigwLG8uanN4KShcInBhdGhcIix7ZDpcIk00IDYuNUM0IDYuMzY3MzkgNC4wNTI2OCA2LjI0MDIxIDQuMTQ2NDUgNi4xNDY0NUM0LjI0MDIxIDYuMDUyNjggNC4zNjczOSA2IDQuNSA2SDcuNUM3LjYzMjYxIDYgNy43NTk3OSA2LjA1MjY4IDcuODUzNTUgNi4xNDY0NUM3Ljk0NzMyIDYuMjQwMjEgOCA2LjM2NzM5IDggNi41QzggNi42MzI2MSA3Ljk0NzMyIDYuNzU5NzkgNy44NTM1NSA2Ljg1MzU1QzcuNzU5NzkgNi45NDczMiA3LjYzMjYxIDcgNy41IDdINC41QzQuMzY3MzkgNyA0LjI0MDIxIDYuOTQ3MzIgNC4xNDY0NSA2Ljg1MzU1QzQuMDUyNjggNi43NTk3OSA0IDYuNjMyNjEgNCA2LjVaTTIgMy41QzIgMy4zNjczOSAyLjA1MjY4IDMuMjQwMjEgMi4xNDY0NSAzLjE0NjQ1QzIuMjQwMjEgMy4wNTI2OCAyLjM2NzM5IDMgMi41IDNIOS41QzkuNjMyNjEgMyA5Ljc1OTc5IDMuMDUyNjggOS44NTM1NSAzLjE0NjQ1QzkuOTQ3MzIgMy4yNDAyMSAxMCAzLjM2NzM5IDEwIDMuNUMxMCAzLjYzMjYxIDkuOTQ3MzIgMy43NTk3OSA5Ljg1MzU1IDMuODUzNTVDOS43NTk3OSAzLjk0NzMyIDkuNjMyNjEgNCA5LjUgNEgyLjVDMi4zNjczOSA0IDIuMjQwMjEgMy45NDczMiAyLjE0NjQ1IDMuODUzNTVDMi4wNTI2OCAzLjc1OTc5IDIgMy42MzI2MSAyIDMuNVpNMCAwLjVDMCAwLjM2NzM5MiAwLjA1MjY3ODUgMC4yNDAyMTUgMC4xNDY0NDcgMC4xNDY0NDdDMC4yNDAyMTUgMC4wNTI2Nzg1IDAuMzY3MzkyIDAgMC41IDBIMTEuNUMxMS42MzI2IDAgMTEuNzU5OCAwLjA1MjY3ODUgMTEuODUzNiAwLjE0NjQ0N0MxMS45NDczIDAuMjQwMjE1IDEyIDAuMzY3MzkyIDEyIDAuNUMxMiAwLjYzMjYwOCAxMS45NDczIDAuNzU5Nzg1IDExLjg1MzYgMC44NTM1NTNDMTEuNzU5OCAwLjk0NzMyMSAxMS42MzI2IDEgMTEuNSAxSDAuNUMwLjM2NzM5MiAxIDAuMjQwMjE1IDAuOTQ3MzIxIDAuMTQ2NDQ3IDAuODUzNTUzQzAuMDUyNjc4NSAwLjc1OTc4NSAwIDAuNjMyNjA4IDAgMC41WlwiLGZpbGw6dH0pfSkpfX0sMTE3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkZsb3BweURpc2tJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5GbG9wcHlEaXNrSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxMlwiLGhlaWdodDpcIjEyXCIsdmlld0JveDpcIjAgMCAxMiAxMlwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNMS44NzUgMi4xODc1QzEuODc1IDIuMTUyOTggMS45MDI5OCAyLjEyNSAxLjkzNzUgMi4xMjVIOC4yMzAzOUM4LjI0Njk3IDIuMTI1IDguMjYyODcgMi4xMzE1OCA4LjI3NDU5IDIuMTQzMzFMOS45ODE2OSAzLjg1MDQxQzkuOTkzNDEgMy44NjIxMyAxMCAzLjg3ODAzIDEwIDMuODk0NjFWMTAuMTg3NUMxMCAxMC4yMjIgOS45NzIwMiAxMC4yNSA5LjkzNzUgMTAuMjVIMS45Mzc1QzEuOTAyOTggMTAuMjUgMS44NzUgMTAuMjIyIDEuODc1IDEwLjE4NzVWMi4xODc1Wk0xLjkzNzUgMS4yNUMxLjQxOTczIDEuMjUgMSAxLjY2OTczIDEgMi4xODc1VjEwLjE4NzVDMSAxMC43MDUzIDEuNDE5NzMgMTEuMTI1IDEuOTM3NSAxMS4xMjVIOS45Mzc1QzEwLjQ1NTMgMTEuMTI1IDEwLjg3NSAxMC43MDUzIDEwLjg3NSAxMC4xODc1VjMuODk0NjFDMTAuODc1IDMuNjQ1OTcgMTAuNzc2MiAzLjQwNzUxIDEwLjYwMDQgMy4yMzE2OUw4Ljg5MzMxIDEuNTI0NTlDOC43MTc0OSAxLjM0ODc3IDguNDc5MDMgMS4yNSA4LjIzMDM5IDEuMjVIMS45Mzc1Wk0yLjg0OTI0IDMuNDA4MUMyLjg0OTI0IDMuMjM3NTQgMi45ODc1MSAzLjA5OTI3IDMuMTU4MDcgMy4wOTkyN0g3LjQ4MTZDNy42NTIxNSAzLjA5OTI3IDcuNzkwNDIgMy4yMzc1NCA3Ljc5MDQyIDMuNDA4MVY0LjY0MzM5QzcuNzkwNDIgNC44MTM5NSA3LjY1MjE1IDQuOTUyMjEgNy40ODE2IDQuOTUyMjFIMy4xNTgwN0MyLjk4NzUxIDQuOTUyMjEgMi44NDkyNCA0LjgxMzk1IDIuODQ5MjQgNC42NDMzOVYzLjQwODFaTTQuNTM2OCA2LjYzOTc3QzQuODI2MzggNi4zNTAxOSA1LjIxOTEzIDYuMTg3NTEgNS42Mjg2NSA2LjE4NzUxQzYuMDM4MTggNi4xODc1MSA2LjQzMDkzIDYuMzUwMTkgNi43MjA1MSA2LjYzOTc3QzcuMDEwMDkgNi45MjkzNSA3LjE3Mjc3IDcuMzIyMSA3LjE3Mjc3IDcuNzMxNjNDNy4xNzI3NyA4LjE0MTE1IDcuMDEwMDkgOC41MzM5IDYuNzIwNTEgOC44MjM0OEM2LjQzMDkzIDkuMTEzMDYgNi4wMzgxOCA5LjI3NTc0IDUuNjI4NjUgOS4yNzU3NEM1LjIxOTEzIDkuMjc1NzQgNC44MjYzOCA5LjExMzA2IDQuNTM2OCA4LjgyMzQ4QzQuMjQ3MjIgOC41MzM5IDQuMDg0NTQgOC4xNDExNSA0LjA4NDU0IDcuNzMxNjNDNC4wODQ1NCA3LjMyMjEgNC4yNDcyMiA2LjkyOTM1IDQuNTM2OCA2LjYzOTc3WlwiLGZpbGw6dCxyb2xlOlwiaW1nXCJ9KX0pKX19LDUyOTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5GcmFnbWVudHNJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5GcmFnbWVudHNJY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjIwXCIsaGVpZ2h0OlwiMjBcIix2aWV3Qm94OlwiMCAwIDI0IDI0XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LG4se2NoaWxkcmVuOigwLG8uanN4KShcInBhdGhcIix7ZDpcIk04LjgwMDAxIDQuODAwMDJINC44MDAwMUMzLjkxNzYxIDQuODAwMDIgMy4yMDAwMSA1LjUxNzYyIDMuMjAwMDEgNi40MDAwMlYxMC40QzMuMjAwMDEgMTEuMjgyNCAzLjkxNzYxIDEyIDQuODAwMDEgMTJIOC44MDAwMUM5LjY4MjQxIDEyIDEwLjQgMTEuMjgyNCAxMC40IDEwLjRWNi40MDAwMkMxMC40IDUuNTE3NjIgOS42ODI0MSA0LjgwMDAyIDguODAwMDEgNC44MDAwMlpNMjAuMzU5MiA2LjQ2ODgyTDE3LjUzMTIgMy42NDAwMkMxNi45MDggMy4wMTYwMiAxNS44OTIgMy4wMTYwMiAxNS4yNjg4IDMuNjQwMDJMMTIuNDQwOCA2LjQ2ODgyQzExLjgxNjggNy4wOTI4MiAxMS44MTY4IDguMTA3MjIgMTIuNDQwOCA4LjczMTIyTDE1LjI2ODggMTEuNTZDMTUuNTgwOCAxMS44NzIgMTUuOTkwNCAxMi4wMjggMTYuNCAxMi4wMjhDMTYuODA5NiAxMi4wMjggMTcuMjE5MiAxMS44NzIgMTcuNTMxMiAxMS41NkwyMC4zNTkyIDguNzMxMjJDMjAuOTgzMiA4LjEwNzIyIDIwLjk4MzIgNy4wOTI4MiAyMC4zNTkyIDYuNDY4ODJaTTguODAwMDEgMTMuNkg0LjgwMDAxQzMuOTE3NjEgMTMuNiAzLjIwMDAxIDE0LjMxNzYgMy4yMDAwMSAxNS4yVjE5LjJDMy4yMDAwMSAyMC4wODI0IDMuOTE3NjEgMjAuOCA0LjgwMDAxIDIwLjhIOC44MDAwMUM5LjY4MjQxIDIwLjggMTAuNCAyMC4wODI0IDEwLjQgMTkuMlYxNS4yQzEwLjQgMTQuMzE3NiA5LjY4MjQxIDEzLjYgOC44MDAwMSAxMy42Wk0xNy42IDEzLjZIMTMuNkMxMi43MTc2IDEzLjYgMTIgMTQuMzE3NiAxMiAxNS4yVjE5LjJDMTIgMjAuMDgyNCAxMi43MTc2IDIwLjggMTMuNiAyMC44SDE3LjZDMTguNDgyNCAyMC44IDE5LjIgMjAuMDgyNCAxOS4yIDE5LjJWMTUuMkMxOS4yIDE0LjMxNzYgMTguNDgyNCAxMy42IDE3LjYgMTMuNlpcIixmaWxsOnR9KX0pKX19LDc3ODg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTGlnaHRCdWxiRmlsbGVkSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuTGlnaHRCdWxiRmlsbGVkSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3hzKShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTBcIixoZWlnaHQ6XCIxMlwiLHZpZXdCb3g6XCIwIDAgMTAgMTJcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46WygwLG8uanN4KShcInBhdGhcIix7ZDpcIk0xLjgzIDEuMzEwMDhDMi4yNDQwOSAwLjg5MTY2NyAyLjczNzY4IDAuNTYwMzA3IDMuMjgxNzQgMC4zMzU1MDRDMy44MjU4MSAwLjExMDcwMSA0LjQwOTM0IC0wLjAwMzAwMzMzIDQuOTk4IDAuMDAxMDgyOTFDNi4xODYyOCAtMC4wMDMxMDc4NSA3LjMyOTA1IDAuNDU3NzMzIDguMTgyIDEuMjg1MDhDOC41OTg4MSAxLjY4NzE5IDguOTMwNDYgMi4xNjkwMyA5LjE1NzIzIDIuNzAxOTRDOS4zODQgMy4yMzQ4NSA5LjUwMTI1IDMuODA3OTMgOS41MDIgNC4zODcwOEM5LjUwMiA1LjY4MDA4IDguOTE3IDYuODMwMDggNy44ODMgNy44MjUwOEw3LjU3NyA5LjAwMDA4SDIuNDY2TDIuMjM2IDguMDM3MDhDMS4xNTQgNi45MDcwOCAwLjU1NiA1LjgxOTA4IDAuNSA0LjU4MjA4VjQuNTQ0MDhDMC41NCAzLjI0ODA4IDEuMDMzIDIuMTIxMDggMS44MzEgMS4zMTEwOEwxLjgzIDEuMzEwMDhaXCIsZmlsbDp0fSksKDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTIuNzA0MSAxMEwyLjkzNzEgMTAuOTc4TDIuOTQ1MSAxMUMzLjA0NTEgMTEuMjk3IDMuMjM3MSAxMS41NDQgMy40NzkxIDExLjcxN0MzLjczMDEgMTEuODk3IDQuMDM3MSAxMS45OTkgNC4zNjExIDExLjk5OUg0LjM2MzFMNS43NDYxIDExLjk5NUw1Ljc2NzEgMTEuOTkzQzYuMDc1ODcgMTEuOTY2OSA2LjM2OTEzIDExLjg0NjUgNi42MDcxIDExLjY0OEM2LjgzODEgMTEuNDU0IDcuMDEzMSAxMS4xODggNy4wODcxIDEwLjg3NEw3LjMxNjEgMTBIMi43MDQxVjEwWlwiLGZpbGw6dH0pXX0pKX19LDM3MDM6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTGlnaHRCdWxiT3V0bGluZWRJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5MaWdodEJ1bGJPdXRsaW5lZEljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTBcIixoZWlnaHQ6XCIxMlwiLHZpZXdCb3g6XCIwIDAgMTAgMTJcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTQuOTk3NjYgMC4wMDEwMDE0OUMzLjc2ODY2IDAuMDAxMDAxNDkgMi42NDc2NiAwLjQ4MjAwMiAxLjgyOTY2IDEuMzExQzEuMDMxNjYgMi4xMjEgMC41Mzk2NTcgMy4yNDggMC40OTk2NTcgNC41NDRMMC40OTg2NTcgNC41NjNWNC41ODNDMC41NTU2NTcgNS44MTkgMS4xNTM2NiA2LjkwNyAyLjIzNTY2IDguMDM3TDIuOTM3NjYgMTAuOTc4TDIuOTQ0NjYgMTFDMy4wNDQ2NiAxMS4yOTcgMy4yMzY2NiAxMS41NDQgMy40Nzg2NiAxMS43MTdDMy43Mjk2NiAxMS44OTcgNC4wMzY2NiAxMS45OTkgNC4zNjE2NiAxMS45OTlMNS43NDU2NiAxMS45OTVMNS43NjY2NiAxMS45OTNDNi4wNzU0MiAxMS45NjY5IDYuMzY4NjkgMTEuODQ2NSA2LjYwNjY2IDExLjY0OEM2LjgzNzY2IDExLjQ1NCA3LjAxMjY2IDExLjE4OCA3LjA4NjY2IDEwLjg3NEw3Ljg4MjY2IDcuODI0QzguOTE2NjYgNi44MyA5LjUwMDY2IDUuNjggOS41MDA2NiA0LjM4N0M5LjQ5OTkxIDMuODA3ODUgOS4zODI2NiAzLjIzNDc3IDkuMTU1ODkgMi43MDE4NkM4LjkyOTEyIDIuMTY4OTUgOC41OTc0NiAxLjY4NzExIDguMTgwNjYgMS4yODVDNy4zMjc5NiAwLjQ1Nzg5NCA2LjE4NTU5IC0wLjAwMjkyNzg4IDQuOTk3NjYgMC4wMDEwMDE0OVpNMi41NDI2NiAyLjAxM0MyLjg2MzQ0IDEuNjg4NzEgMy4yNDU5NiAxLjQzMTk4IDMuNjY3NjIgMS4yNThDNC4wODkyOCAxLjA4NDAxIDQuNTQxNTMgMC45OTYyODMgNC45OTc2NiAxQzUuOTI1MTQgMC45OTU3ODQgNi44MTc0NCAxLjM1NDcxIDcuNDgzNjYgMkM3LjgwNDcxIDIuMzA5MDQgOC4wNjAyMyAyLjY3OTU3IDguMjM0OTYgMy4wODk1MUM4LjQwOTY5IDMuNDk5NDUgOC41MDAwNSAzLjk0MDM4IDguNTAwNjYgNC4zODZDOC41MDA2NiA1LjM3NyA4LjA0NzY2IDYuMzEyIDcuMDk2NjYgNy4xOTFMNi45ODg2NiA3LjI5MUw2LjU0MjY2IDlIMy40OTM2NkwzLjE0NDY2IDcuNTM2TDMuMDQ3NjYgNy40MzZDMS45OTk2NiA2LjM3MiAxLjU0NzY2IDUuNDggMS40OTg2NiA0LjU1N0MxLjUzNjY2IDMuNTA5IDEuOTMyNjYgMi42MzIgMi41NDI2NiAyLjAxNFYyLjAxM1pNMy43MzI2NiAxMEg2LjI4MjY2TDYuMTE3NjYgMTAuNjI3TDYuMTE0NjYgMTAuNjRDNi4wOTIxMSAxMC43MzQyIDYuMDM5NDQgMTAuODE4NSA1Ljk2NDY2IDEwLjg4QzUuODg4NzMgMTAuOTQzNSA1Ljc5NTk1IDEwLjk4MzQgNS42OTc2NiAxMC45OTVMNC4zNjA2NiAxMUM0LjI1MzIxIDExLjAwMDMgNC4xNDgzMyAxMC45NjcxIDQuMDYwNjYgMTAuOTA1QzMuOTg3NyAxMC44NTM2IDMuOTMxMzkgMTAuNzgyIDMuODk4NjYgMTAuNjk5TDMuNzMxNjYgMTBIMy43MzI2NlpcIixmaWxsOnR9KX0pKX19LDgzMTE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTG9ja2VkQ2xvc2VkRmlsbGVkSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuTG9ja2VkQ2xvc2VkRmlsbGVkSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNNS4wMDAwMyA0LjYzNjIzQzUuMDAwMDMgMy43NjA1MiA1LjI0MjIyIDMuMTA1NjEgNS42NDMyNyAyLjY3Mzc4QzYuMDM5MzggMi4yNDcyNyA2LjY0NTg1IDEuOTc4NTIgNy41MDE0MyAxLjk3ODUyQzguMzU3NDggMS45Nzg1MiA4Ljk2MzA5IDIuMjQ2NzMgOS4zNTgyNyAyLjY3MjNDOS43NTg0MSAzLjEwMzIxIDEwIDMuNzU3MjkgMTAgNC42MzM0NlY2LjUwMDIxSDExVjQuNjMzNDZDMTEgMy41NzkxNyAxMC43MDc2IDIuNjU1NzggMTAuMDkxMSAxLjk5MTgzQzkuNDY5NTUgMS4zMjI1NCA4LjU3NTg2IDAuOTc4NTE2IDcuNTAxNDMgMC45Nzg1MTZDNi40MjY3OCAwLjk3ODUxNiA1LjUzMjU1IDEuMzIzNSA0LjkxMDUyIDEuOTkzMjhDNC4yOTM0MiAyLjY1Nzc1IDQuMDAwMDMgMy41ODE2OSA0LjAwMDAzIDQuNjM2MjNWNi41MDAyMUg1LjAwMDAzVjQuNjM2MjNaTTMgNi41MDAyMUMyLjcyMzg2IDYuNTAwMjEgMi41IDYuNzI0MDcgMi41IDcuMDAwMjFWMTMuMDAwMkMyLjUgMTMuMjc2NCAyLjcyMzg2IDEzLjUwMDIgMyAxMy41MDAySDEyQzEyLjI3NjEgMTMuNTAwMiAxMi41IDEzLjI3NjQgMTIuNSAxMy4wMDAyVjcuMDAwMjFDMTIuNSA2LjcyNDA3IDEyLjI3NjEgNi41MDAyMSAxMiA2LjUwMDIxSDNaXCIsZmlsbDp0LHJvbGU6XCJpbWdcIn0pfSkpfX0sNTcyOTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5NaW5pbWl6ZUljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0Lk1pbmltaXplSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMi4xNjYwMiAxMkMyLjE2NjAyIDExLjcyMzkgMi4zODk4NyAxMS41IDIuNjY2MDIgMTEuNUgxMy4zMzI3QzEzLjYwODggMTEuNSAxMy44MzI3IDExLjcyMzkgMTMuODMyNyAxMkMxMy44MzI3IDEyLjI3NjEgMTMuNjA4OCAxMi41IDEzLjMzMjcgMTIuNUgyLjY2NjAyQzIuMzg5ODcgMTIuNSAyLjE2NjAyIDEyLjI3NjEgMi4xNjYwMiAxMlpcIixmaWxsOnQscm9sZTpcImltZ1wifSl9KSl9fSwzNzk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuT3BlbkZpbkljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0Lk9wZW5GaW5JY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LG4se2NoaWxkcmVuOigwLG8uanN4KShcInBhdGhcIix7ZDpcIk0xNC4yNjg1IDUuNzM5MTZDMTQuMTc4NSA1LjY0OTA2IDE0LjA4MTcgNS41NjU5MiAxMy45NzkgNS40OTA0N0wxMy45NDEyIDUuNDY0MjlDMTMuOTE5NiA1LjQ0OTE5IDEzLjg5ODQgNS40MzM1OCAxMy44NzYzIDUuNDE4OThDMTMuODU0MSA1LjQwNDM4IDEzLjgyODQgNS4zODg3OCAxMy44MDQ4IDUuMzc0MThMMTMuNzcxNSA1LjM1MzU0QzEzLjc0MTggNS4zMzU5MiAxMy43MTE2IDUuMzE5MyAxMy42ODE0IDUuMzAzMTlMMTMuNjYzOCA1LjI5MzYzQzEzLjMwNjUgNS4xMDYxOCAxMi45MDkxIDUuMDA4MDcgMTIuNTA1NyA1LjAwNzY4QzExLjg0MTcgNS4wMDcxNSAxMS4yMDUyIDQuNzQyOTEgMTAuNzM2MiA0LjI3MzFDMTAuMjY3MSAzLjgwMzMgMTAuMDA0IDMuMTY2NDIgMTAuMDA0NiAyLjUwMjYyQzEwLjAwNjUgMS40OTIyMiA5LjM5OTMzIDAuNTgwMjE5IDguNDY2MzQgMC4xOTE5MTFDNy41MzMzNSAtMC4xOTYzOTcgNi40NTgyNiAwLjAxNTQ2NiA1Ljc0MjQ0IDAuNzI4NzAxQzUuMDI2NjEgMS40NDE5NCA0LjgxMTAzIDIuNTE2MDcgNS4xOTYyMSAzLjQ1MDJDNS41ODE0IDQuMzg0MzMgNi40OTE1IDQuOTk0NDcgNy41MDIxIDQuOTk2MUM4LjE2NjAzIDQuOTk2NjQgOC44MDI1NiA1LjI2MDg4IDkuMjcxNjEgNS43MzA2OEM5Ljc0MDY2IDYuMjAwNDkgMTAuMDAzOCA2LjgzNzM2IDEwLjAwMzEgNy41MDExN0MxMC4wMDI2IDguMTY0OTcgOS43MzgzIDguODAxMzcgOS4yNjg0IDkuMjcwMzJDOC43OTg1IDkuNzM5MjggOC4xNjE1IDEwLjAwMjQgNy40OTc1NiAxMC4wMDE3QzYuODM0MTMgMTAuMDAyMiA2LjE5NzcyIDkuNzM4OTQgNS43Mjg2NSA5LjI2OTg3QzUuMjU5NTggOC44MDA4IDQuOTk2MzYgOC4xNjQ0NyA0Ljk5NzAzIDcuNTAxMTdDNC45OTcwMyA2LjEyMTU1IDMuODc4NDEgNS4wMDMxNSAyLjQ5ODUyIDUuMDAzMTVDMS4xMTg2MiA1LjAwMzE1IDAgNi4xMjE1NSAwIDcuNTAxMTdDMCA4Ljg4MDc4IDEuMTE4NjIgOS45OTkxOCAyLjQ5ODUyIDkuOTk5MThDMy44Nzg0MSA5Ljk5OTE4IDQuOTk3MDMgMTEuMTE3NiA0Ljk5NzAzIDEyLjQ5NzJDNC45OTcwMyAxMy44Nzk1IDYuMTE3OCAxNSA3LjUwMDMzIDE1QzguODgyODcgMTUgMTAuMDAzNiAxMy44Nzk1IDEwLjAwMzYgMTIuNDk3MkMxMC4wMDM2IDExLjExNzYgMTEuMTIyMyA5Ljk5OTE4IDEyLjUwMjEgOS45OTkxOEMxMi45NDgyIDkuOTk5NDggMTMuMzg2MiA5Ljg4MDIyIDEzLjc3MDUgOS42NTM4M0MxMy44MDM4IDkuNjM0MiAxMy44MzY1IDkuNjEzNTYgMTMuODcxMiA5LjU5MjQxTDEzLjg3ODMgOS41ODc4OEMxMy45MDg1IDkuNTY3NzUgMTMuOTM4NyA5LjU0NjYgMTMuOTY3OSA5LjUyNTQ2TDEzLjk4MSA5LjUxNjRDMTQuMDA3MiA5LjQ5NzI3IDE0LjAzMTQgOS40NzY2MiAxNC4wNTkxIDkuNDU1OThMMTQuMDgxMiA5LjQzODg3QzE0LjEwNTQgOS40MTkyMyAxNC4xMjg2IDkuMzk4NTkgMTQuMTUyMiA5LjM3Nzk1TDE0LjE3NzkgOS4zNTU4QzE0LjIwODEgOS4zMjg2MiAxNC4yMzc4IDkuMzAwNDIgMTQuMjY3IDkuMjcxMjNMMTQuMjcxNiA5LjI2NzJDMTQuMzc5NCA5LjE1ODg3IDE0LjQ3NzIgOS4wNDA5MSAxNC41NjM2IDguOTE0OEMxNC41ODI0IDguODg3NjEgMTQuNjAwNSA4Ljg2MDA5IDE0LjYxOCA4LjgzMjIzQzE1LjIzNyA3Ljg0NTg0IDE1LjA5MiA2LjU2MjY3IDE0LjI2ODUgNS43MzkxNlpcIixmaWxsOnQscm9sZTpcImltZ1wifSl9KSl9fSw5OTQwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlBhZ2VJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5QYWdlSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNFwiLGhlaWdodDpcIjE4XCIsdmlld0JveDpcIjAgMCAxNCAxOFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNMTEuOTk5NyAwLjY2Njk5MkgxLjk5OTY3QzEuMDgwNTEgMC42NjY5OTIgMC4zMzMwMDggMS40MTQ0OSAwLjMzMzAwOCAyLjMzMzY2VjE1LjY2N0MwLjMzMzAwOCAxNi41ODYyIDEuMDgwNTEgMTcuMzMzNyAxLjk5OTY3IDE3LjMzMzdIMTEuOTk5N0MxMi45MTg4IDE3LjMzMzcgMTMuNjY2MyAxNi41ODYyIDEzLjY2NjMgMTUuNjY3VjIuMzMzNjZDMTMuNjY2MyAxLjQxNDQ5IDEyLjkxODggMC42NjY5OTIgMTEuOTk5NyAwLjY2Njk5MlpNNy40MTYzNCA4LjE2Njk5SDMuMjQ5NjdDMy4wMTk2NyA4LjE2Njk5IDIuODMzMDEgNy45ODAzMyAyLjgzMzAxIDcuNzUwMzNWNi45MTY5OUMyLjgzMzAxIDYuNjg2OTkgMy4wMTk2NyA2LjUwMDMzIDMuMjQ5NjcgNi41MDAzM0g3LjQxNjM0QzcuNjQ2MzQgNi41MDAzMyA3LjgzMzAxIDYuNjg2OTkgNy44MzMwMSA2LjkxNjk5VjcuNzUwMzNDNy44MzMwMSA3Ljk4MDMzIDcuNjQ2MzQgOC4xNjY5OSA3LjQxNjM0IDguMTY2OTlaTTEwLjc0OTcgNC44MzM2NkgzLjI0OTY3QzMuMDE5NjcgNC44MzM2NiAyLjgzMzAxIDQuNjQ2OTkgMi44MzMwMSA0LjQxNjk5VjMuNTgzNjZDMi44MzMwMSAzLjM1MzY2IDMuMDE5NjcgMy4xNjY5OSAzLjI0OTY3IDMuMTY2OTlIMTAuNzQ5N0MxMC45Nzk3IDMuMTY2OTkgMTEuMTY2MyAzLjM1MzY2IDExLjE2NjMgMy41ODM2NlY0LjQxNjk5QzExLjE2NjMgNC42NDY5OSAxMC45Nzk3IDQuODMzNjYgMTAuNzQ5NyA0LjgzMzY2WlwiLGZpbGw6dH0pfSkpfX0sMTAwMjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5SZWREb3RJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5SZWREb3RJY29uPWU9Pnt2YXIgdD1yKGUsW10pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiOFwiLGhlaWdodDpcIjhcIix2aWV3Qm94OlwiMCAwIDggOFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSx0LHtjaGlsZHJlbjooMCxvLmpzeCkoXCJyZWN0XCIse3g6XCIwLjVcIix5OlwiMC41XCIsd2lkdGg6XCI3XCIsaGVpZ2h0OlwiN1wiLHJ4OlwiMy41XCIsZmlsbDpcIiNDMjEzMTNcIn0pfSkpfX0sMTUzOTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5TdGFja0ljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0LlN0YWNrSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIyMFwiLGhlaWdodDpcIjIwXCIsdmlld0JveDpcIjAgMCAyNCAyNFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNMTQuMjE3OCAzLjAwMDkyQzE0LjE1MDQgMy4wMDUxNCAxNC4wODM5IDMuMDE4NDQgMTQuMDIgMy4wNDA0N0wzLjUxOTg2IDYuNDI4N0MzLjM2ODY0IDYuNDc3NDMgMy4yMzY4MSA2LjU3MjkxIDMuMTQzMzUgNi43MDEzOEMzLjA0OTg5IDYuODI5ODYgMi45OTk2NCA2Ljk4NDY5IDIuOTk5ODMgNy4xNDM1NlYxNS43NTRDMi45OTg0MyAxNS44NTM0IDMuMDE2NzkgMTUuOTUyMSAzLjA1Mzg1IDE2LjA0NDNDMy4wOTA5MSAxNi4xMzY2IDMuMTQ1OTMgMTYuMjIwNSAzLjIxNTcxIDE2LjI5MTNDMy4yODU1IDE2LjM2MjEgMy4zNjg2NSAxNi40MTgzIDMuNDYwMzUgMTYuNDU2NkMzLjU1MjA0IDE2LjQ5NSAzLjY1MDQ1IDE2LjUxNDcgMy43NDk4NCAxNi41MTQ3QzMuODQ5MjQgMTYuNTE0NyAzLjk0NzY0IDE2LjQ5NSA0LjAzOTM0IDE2LjQ1NjZDNC4xMzEwMyAxNi40MTgzIDQuMjE0MTkgMTYuMzYyMSA0LjI4Mzk3IDE2LjI5MTNDNC4zNTM3NSAxNi4yMjA1IDQuNDA4NzggMTYuMTM2NiA0LjQ0NTg0IDE2LjA0NDNDNC40ODI5IDE1Ljk1MjEgNC41MDEyNiAxNS44NTM0IDQuNDk5ODUgMTUuNzU0VjcuNjg4NDlMMTQuNDggNC40NjcyNUMxNC42NDkgNC40MTUyOSAxNC43OTQyIDQuMzA1MzIgMTQuODkgNC4xNTY3NEMxNC45ODU4IDQuMDA4MTUgMTUuMDI2IDMuODMwNSAxNS4wMDM2IDMuNjU1MTRDMTQuOTgxMiAzLjQ3OTc3IDE0Ljg5NzUgMy4zMTc5NyAxNC43Njc0IDMuMTk4MjdDMTQuNjM3MyAzLjA3ODU3IDE0LjQ2OTEgMy4wMDg2OCAxNC4yOTI1IDMuMDAwOTJDMTQuMjY3NiAyLjk5OTY3IDE0LjI0MjcgMi45OTk2NyAxNC4yMTc4IDMuMDAwOTJaTTE3LjIxNzggNS4yNTA5NUMxNy4xNTA0IDUuMjU1MTcgMTcuMDgzOSA1LjI2ODQ4IDE3LjAyMDEgNS4yOTA1TDYuNTE5OSA4LjY3ODc0QzYuMzY4NjkgOC43Mjc0NiA2LjIzNjg1IDguODIyOTQgNi4xNDMzOSA4Ljk1MTQyQzYuMDQ5OTMgOS4wNzk4OSA1Ljk5OTY4IDkuMjM0NzIgNS45OTk4OCA5LjM5MzU5VjE4LjAwNDFDNS45OTg0NyAxOC4xMDM1IDYuMDE2ODMgMTguMjAyMSA2LjA1Mzg5IDE4LjI5NDRDNi4wOTA5NSAxOC4zODY2IDYuMTQ1OTcgMTguNDcwNSA2LjIxNTc2IDE4LjU0MTNDNi4yODU1NCAxOC42MTIxIDYuMzY4NyAxOC42NjgzIDYuNDYwMzkgMTguNzA2NkM2LjU1MjA5IDE4Ljc0NSA2LjY1MDQ5IDE4Ljc2NDggNi43NDk4OSAxOC43NjQ4QzYuODQ5MjggMTguNzY0OCA2Ljk0NzY5IDE4Ljc0NSA3LjAzOTM4IDE4LjcwNjZDNy4xMzEwOCAxOC42NjgzIDcuMjE0MjMgMTguNjEyMSA3LjI4NDAyIDE4LjU0MTNDNy4zNTM4IDE4LjQ3MDUgNy40MDg4MiAxOC4zODY2IDcuNDQ1ODggMTguMjk0NEM3LjQ4Mjk0IDE4LjIwMjEgNy41MDEzIDE4LjEwMzUgNy40OTk5IDE4LjAwNDFWOS45Mzg1MkwxNy40OCA2LjcxNzI4QzE3LjY0OSA2LjY2NTMzIDE3Ljc5NDIgNi41NTUzNSAxNy44OSA2LjQwNjc3QzE3Ljk4NTggNi4yNTgxOCAxOC4wMjYxIDYuMDgwNTQgMTguMDAzNiA1LjkwNTE3QzE3Ljk4MTIgNS43Mjk4MSAxNy44OTc2IDUuNTY4IDE3Ljc2NzUgNS40NDgzQzE3LjYzNzQgNS4zMjg2MSAxNy40NjkxIDUuMjU4NzEgMTcuMjkyNSA1LjI1MDk1QzE3LjI2NzYgNS4yNDk3MSAxNy4yNDI3IDUuMjQ5NzEgMTcuMjE3OCA1LjI1MDk1Wk0yMC4xOTMgNy41MDUzOEMyMC4xMzQ0IDcuNTA5ODIgMjAuMDc1OCA3LjUyMTk3IDIwLjAxODYgNy41NDA1M0w5LjUxODQ4IDEwLjkyODhDOS4yMDk0OCAxMS4wMjkzIDguOTk5OTIgMTEuMzE4MSA4Ljk5OTkyIDExLjY0MzZWMjAuMjU0MUM4Ljk5OTkyIDIwLjQ5NzkgOS4xMTgyOSAyMC43MjYyIDkuMzE3OCAyMC44NjY0QzkuNDQ2MDUgMjAuOTU3MiA5LjU5NjkzIDIxLjAwNDEgOS43NDk5MyAyMS4wMDQxQzkuODM0NjggMjEuMDA0MSA5LjkyMDE0IDIwLjk4OTQgMTAuMDAxOSAyMC45NjAyTDIwLjUwMiAxNy4yMTAxQzIwLjgwMDYgMTcuMTA0NCAyMS4wMDAxIDE2LjgyMTMgMjEuMDAwMSAxNi41MDRWOC4yNTM5MkMyMS4wMDAxIDguMDE0NjcgMjAuODg1MyA3Ljc4OTIyIDIwLjY5MSA3LjY0NzQ3QzIwLjU0NTkgNy41NDE3MiAyMC4zNjg4IDcuNDkyMDUgMjAuMTkzIDcuNTA1MzhaXCIsZmlsbDp0fSl9KSl9fSw0MDIwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlN0b3JlZnJvbnRJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5TdG9yZWZyb250SWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIyMFwiLGhlaWdodDpcIjIwXCIsdmlld0JveDpcIjAgMCAyNCAyNFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNNSAzQzQuNDQ4IDMgNCAzLjQ0OCA0IDRDNCA0LjU1MiA0LjQ0OCA1IDUgNUgxOUMxOS41NTIgNSAyMCA0LjU1MiAyMCA0QzIwIDMuNDQ4IDE5LjU1MiAzIDE5IDNINVpNNC42MTcxOSA3QzQuMjM4MTkgNyAzLjg5MzYxIDcuMjEzNzMgMy43MjQ2MSA3LjU1MjczTDIuMTA1NDcgMTAuNzg5MUMyLjAzNTQ3IDEwLjkyODEgMiAxMS4wODEzIDIgMTEuMjM2M1YxMkMyIDEyLjU1MiAyLjQ0OCAxMyAzIDEzVjE5QzMgMjAuMTA1IDMuODk1IDIxIDUgMjFIMTlDMjAuMTA1IDIxIDIxIDIwLjEwNSAyMSAxOVYxM0MyMS41NTIgMTMgMjIgMTIuNTUyIDIyIDEyVjExLjIzNjNDMjIgMTEuMDgxMyAyMS45NjQ1IDEwLjkyODEgMjEuODk0NSAxMC43ODkxTDIwLjI3NTQgNy41NTI3M0MyMC4xMDY0IDcuMjEzNzMgMTkuNzYxOCA3IDE5LjM4MjggN0g0LjYxNzE5Wk02IDEzSDE4QzE4LjU1MiAxMyAxOSAxMy40NDggMTkgMTRWMThDMTkgMTguNTUyIDE4LjU1MiAxOSAxOCAxOUg2QzUuNDQ4IDE5IDUgMTguNTUyIDUgMThWMTRDNSAxMy40NDggNS40NDggMTMgNiAxM1pcIixmaWxsOnR9KX0pKX19LDc5Mzc6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuV29ya3NwYWNlSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuV29ya3NwYWNlSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3hzKShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixyb2xlOlwiaW1nXCJ9LG4se2NoaWxkcmVuOlsoMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNNi43MzgxMSAyLjgxMjVIMy41MzEzN0MzLjEzNDQyIDIuODEyNSAyLjgxMjYyIDMuMTM0MyAyLjgxMjYyIDMuNTMxMjVWNy41MTIwNEMyLjgxMjYyIDcuOTA5IDMuMTM0NDIgOC4yMzA3OSAzLjUzMTM3IDguMjMwNzlINi43MzgxMUM3LjEzNTA2IDguMjMwNzkgNy40NTY4NiA3LjkwOSA3LjQ1Njg2IDcuNTEyMDRWMy41MzEyNUM3LjQ1Njg2IDMuMTM0MyA3LjEzNTA2IDIuODEyNSA2LjczODExIDIuODEyNVpcIixmaWxsOnR9KSwoMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNMTIuMTU2NSA2LjI2NzU4SDguOTQ5NzFDOC43NTEyMyA2LjI2NzU4IDguNTkwMzMgNi40Mjg0OCA4LjU5MDMzIDYuNjI2OTZWMTEuMzgxOEM4LjU5MDMzIDExLjU4MDMgOC43NTEyMyAxMS43NDEyIDguOTQ5NzEgMTEuNzQxMkgxMi4xNTY1QzEyLjM1NDkgMTEuNzQxMiAxMi41MTU4IDExLjU4MDMgMTIuNTE1OCAxMS4zODE4VjYuNjI2OTZDMTIuNTE1OCA2LjQyODQ4IDEyLjM1NDkgNi4yNjc1OCAxMi4xNTY1IDYuMjY3NThaXCIsc3Ryb2tlOnQsc3Ryb2tlV2lkdGg6XCIwLjcxODc1M1wifSksKDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTEyLjE1NjQgMi44MTI1SDguOTQ5NzFDOC41NTI3NSAyLjgxMjUgOC4yMzA5NiAzLjEzNDMgOC4yMzA5NiAzLjUzMTI1VjQuNDE1ODdDOC4yMzA5NiA0LjgxMjgzIDguNTUyNzUgNS4xMzQ2MyA4Ljk0OTcxIDUuMTM0NjNIMTIuMTU2NEMxMi41NTM0IDUuMTM0NjMgMTIuODc1MiA0LjgxMjgzIDEyLjg3NTIgNC40MTU4N1YzLjUzMTI1QzEyLjg3NTIgMy4xMzQzIDEyLjU1MzQgMi44MTI1IDEyLjE1NjQgMi44MTI1WlwiLGZpbGw6dH0pLCgwLG8uanN4KShcInBhdGhcIix7ZDpcIk02LjczNzk4IDkuMDA0ODhIMy41MzEyNUMzLjEzNDMgOS4wMDQ4OCAyLjgxMjUgOS4zMjY2OCAyLjgxMjUgOS43MjM2NFYxMS4zODIzQzIuODEyNSAxMS43NzkzIDMuMTM0MyAxMi4xMDExIDMuNTMxMjUgMTIuMTAxMUg2LjczNzk4QzcuMTM0OTQgMTIuMTAxMSA3LjQ1Njc0IDExLjc3OTMgNy40NTY3NCAxMS4zODIzVjkuNzIzNjRDNy40NTY3NCA5LjMyNjY4IDcuMTM0OTQgOS4wMDQ4OCA2LjczNzk4IDkuMDA0ODhaXCIsZmlsbDp0fSldfSkpfX0sMjc3MjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oMzc5KSx0KSxvKG4oNDcxOCksdCksbyhuKDc5MzcpLHQpLG8obig4MzExKSx0KSxvKG4oNTcyOSksdCksbyhuKDc3ODgpLHQpLG8obigzNzAzKSx0KSxvKG4oNjc5NSksdCksbyhuKDgyNjUpLHQpLG8obigxMTcpLHQpLG8obigxNTM5KSx0KSxvKG4oOTI4NSksdCksbyhuKDQwMjApLHQpLG8obig1MjkpLHQpLG8obigyNDAyKSx0KSxvKG4oMjE0NyksdCksbyhuKDQ4MjUpLHQpLG8obig2NDQ3KSx0KSxvKG4oMTI4MSksdCksbyhuKDc0MjkpLHQpLG8obig5OTQwKSx0KSxvKG4oMTAwMiksdCksbyhuKDEzMjQpLHQpLG8obigxMTAzKSx0KSxvKG4oMTQwOSksdCl9LDMxMTc6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5JY29uV2l0aEJhZGdlPXZvaWQgMDtjb25zdCBpPW4oNTg5MyksYT1vKG4oNzUxOCkpLGw9big3MDA2KSxzPW4oMzEzNiksYz1uKDEzMzUpO3QuSWNvbldpdGhCYWRnZT1lPT57dmFye2NvdW50OnQ9MCxtYXg6bn09ZSxvPXIoZSxbXCJjb3VudFwiLFwibWF4XCJdKTtyZXR1cm4oMCxpLmpzeHMpKHUse2NoaWxkcmVuOlsoMCxpLmpzeCkobC5JY29uLE9iamVjdC5hc3NpZ24oe30sbykpLHQ+MCYmKDAsaS5qc3gpKGYse2NvdW50OnQsbWF4Om59KV19KX07Y29uc3QgdT0oMCxhLmRlZmF1bHQpKGMuQm94KWBcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuYCxmPSgwLGEuZGVmYXVsdCkocy5CYWRnZSlgXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdHJhbnNmb3JtOiBzY2FsZSg3MCUpO1xuICByaWdodDogLSR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG4gIHRvcDogLSR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuYH0sMTQ0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obigzMTE3KSx0KX0sMTk0NDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5MYWJlbD12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGk9cihuKDc1MTgpKSxhPW4oMTMzNSksbD1uKDc3NjkpLHM9big5NjM0KTt0LkxhYmVsPSh7aWNvbjplLHRleHQ6dCxoZWxwZXJUZXh0Om4saHRtbEZvcjpyLGlubGluZTppfSk9PigwLG8uanN4cykoZCxPYmplY3QuYXNzaWduKHtpbmxpbmU6aX0se2NoaWxkcmVuOlsoMCxvLmpzeHMpKFwiZGl2XCIsT2JqZWN0LmFzc2lnbih7c3R5bGU6e2Rpc3BsYXk6XCJmbGV4XCJ9fSx7Y2hpbGRyZW46W1wiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZSgpOmU/KDAsby5qc3gpKGYse2ljb246ZX0pOm51bGwsKDAsby5qc3gpKHUsT2JqZWN0LmFzc2lnbih7YXM6XCJsYWJlbFwiLGh0bWxGb3I6cix3ZWlnaHQ6XCJib2xkXCJ9LHtjaGlsZHJlbjp0fSkpXX0pKSxuJiYoMCxvLmpzeCkoYyx7Y2hpbGRyZW46bn0pXX0pKTtjb25zdCBjPSgwLGkuZGVmYXVsdCkobC5UZXh0KWBcbiAgc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5iYXNlfTtcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0SGVscH07XG5gLHU9KDAsaS5kZWZhdWx0KShsLlRleHQpYFxuICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG5gLGY9KDAsaS5kZWZhdWx0KShzLkljb24pYFxuICBtYXJnaW4tcmlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHgueHNtYWxsfTtcbiAgbWluLXdpZHRoOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLnNtYWxsfTtcbiAgbWluLWhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS5zbWFsbH07XG4gIGFsaWduLXNlbGY6IGNlbnRlcjtcbmAsZD0oMCxpLmRlZmF1bHQpKGEuQm94KWBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgbWFyZ2luLWJvdHRvbTogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG5cbiAgJHsoe2lubGluZTplLHRoZW1lOnR9KT0+ZSYmYGN1cnNvcjogcG9pbnRlcjtcXG4gICAgIG1hcmdpbi1ib3R0b206IDA7XFxuICAgICBtYXJnaW4tbGVmdDogJHt0LnB4LnNtYWxsfTtcXG4gICAgIGZvbnQtd2VpZ2h0OiAke3QuZm9udFdlaWdodC5ub3JtYWx9O1xcbiAgYH1cbmB9LDkyMzk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDgyNzUpLHQpLG8obig2OTMpLHQpfSw4Mjc1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTG9hZGVyPXZvaWQgMDtjb25zdCBpPW4oNTg5MyksYT1vKG4oNzUxOCkpLGw9big5NjM0KTt0LkxvYWRlcj0oMCxhLmRlZmF1bHQpKChlPT57dmFyIHQ9cihlLFtdKTtyZXR1cm4oMCxpLmpzeCkobC5JY29uLE9iamVjdC5hc3NpZ24oe30sdCx7Y2hpbGRyZW46KDAsaS5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxMDAlXCIsaGVpZ2h0OlwiMTAwJVwiLHZpZXdCb3g6XCIwIDAgMzggMzhcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsc3Ryb2tlOlwiY3VycmVudENvbG9yXCJ9LHtjaGlsZHJlbjooMCxpLmpzeCkoXCJnXCIsT2JqZWN0LmFzc2lnbih7ZmlsbDpcIm5vbmVcIixmaWxsUnVsZTpcImV2ZW5vZGRcIn0se2NoaWxkcmVuOigwLGkuanN4cykoXCJnXCIsT2JqZWN0LmFzc2lnbih7dHJhbnNmb3JtOlwidHJhbnNsYXRlKDEgMSlcIixzdHJva2VXaWR0aDpcIjJcIn0se2NoaWxkcmVuOlsoMCxpLmpzeCkoXCJjaXJjbGVcIix7c3Ryb2tlT3BhY2l0eTpcIi41XCIsY3g6XCIxOFwiLGN5OlwiMThcIixyOlwiMThcIn0pLCgwLGkuanN4KShcInBhdGhcIixPYmplY3QuYXNzaWduKHtkOlwiTTM2IDE4YzAtOS45NC04LjA2LTE4LTE4LTE4XCJ9LHtjaGlsZHJlbjooMCxpLmpzeCkoXCJhbmltYXRlVHJhbnNmb3JtXCIse2F0dHJpYnV0ZU5hbWU6XCJ0cmFuc2Zvcm1cIix0eXBlOlwicm90YXRlXCIsZnJvbTpcIjAgMTggMThcIix0bzpcIjM2MCAxOCAxOFwiLGR1cjpcIjFzXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9KX0pKV19KSl9KSl9KSl9KSl9KSlgYH0sNjkzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pfTpmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10fSksaT10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCIhPT1uJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmcih0LGUsbik7cmV0dXJuIG8odCxlKSx0fSxhPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuT3BlbmZpbkxvYWRlcj12b2lkIDA7Y29uc3QgbD1uKDU4OTMpLHM9aShuKDc1MTgpKSxjPW4oOTYzNCk7dC5PcGVuZmluTG9hZGVyPSgwLHMuZGVmYXVsdCkoKGU9Pnt2YXIgdD1hKGUsW10pO3JldHVybigwLGwuanN4KShjLkljb24sT2JqZWN0LmFzc2lnbih7fSx0LHtjaGlsZHJlbjooMCxsLmpzeHMpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxMDAlXCIsaGVpZ2h0OlwiMTAwJVwiLHZpZXdCb3g6XCIwIDAgMTggMThcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0se2NoaWxkcmVuOlsoMCxsLmpzeCkodSx7ZDpcIlxcbiAgICAgICAgICAgIE0gMTcuMTIyMiA2Ljg4N1xcbiAgICAgICAgICAgIEMgMTcuMDE0MSA2Ljc3ODg3IDE2Ljg5OCA2LjY3OTExIDE2Ljc3NDggNi41ODg1NlxcbiAgICAgICAgICAgIEwgMTYuNzI5NSA2LjU1NzE1XFxuICAgICAgICAgICAgQyAxNi43MDM1IDYuNTM5MDMgMTYuNjc4MSA2LjUyMDMgMTYuNjUxNSA2LjUwMjc4XFxuICAgICAgICAgICAgQyAxNi42MjUgNi40ODUyNiAxNi41OTQxIDYuNDY2NTMgMTYuNTY1NyA2LjQ0OTAxXFxuICAgICAgICAgICAgTCAxNi41MjU5IDYuNDI0MjRcXG4gICAgICAgICAgICBDIDE2LjQ5MDIgNi40MDMxIDE2LjQ1NCA2LjM4MzE2IDE2LjQxNzcgNi4zNjM4M1xcbiAgICAgICAgICAgIEwgMTYuMzk2NiA2LjM1MjM2XFxuICAgICAgICAgICAgQyAxNS45Njc4IDYuMTI3NDIgMTUuNDkxIDYuMDA5NjggMTUuMDA2OCA2LjAwOTIyXFxuICAgICAgICAgICAgQyAxNC4yMTAxIDYuMDA4NTggMTMuNDQ2MyA1LjY5MTQ5IDEyLjg4MzQgNS4xMjc3MlxcbiAgICAgICAgICAgIEMgMTIuMzIwNSA0LjU2Mzk1IDEyLjAwNDggMy43OTk3MSAxMi4wMDU2IDMuMDAzMTRcXG4gICAgICAgICAgICBDIDEyLjAwNzggMS43OTA2NiAxMS4yNzkyIDAuNjk2MjYzIDEwLjE1OTYgMC4yMzAyOTNcXG4gICAgICAgICAgICBDIDkuMDQwMDIgLTAuMjM1Njc2IDcuNzQ5OTIgMC4wMTg1NTkyIDYuODkwOTMgMC44NzQ0NDFcXG4gICAgICAgICAgICBDIDYuMDMxOTQgMS43MzAzMiA1Ljc3MzIzIDMuMDE5MjggNi4yMzU0NiA0LjE0MDI0XFxuICAgICAgICAgICAgQyA2LjY5NzY4IDUuMjYxMTkgNy43ODk4IDUuOTkzMzcgOS4wMDI1MSA1Ljk5NTMyXFxuICAgICAgICAgICAgQyA5Ljc5OTI0IDUuOTk1OTYgMTAuNTYzMSA2LjMxMzA1IDExLjEyNTkgNi44NzY4MlxcbiAgICAgICAgICAgIEMgMTEuNjg4OCA3LjQ0MDU5IDEyLjAwNDYgOC4yMDQ4NCAxMi4wMDM4IDkuMDAxNFxcbiAgICAgICAgICAgIEMgMTIuMDAzMSA5Ljc5Nzk3IDExLjY4NiAxMC41NjE2IDExLjEyMjEgMTEuMTI0NFxcbiAgICAgICAgICAgIEMgMTAuNTU4MiAxMS42ODcxIDkuNzkzOCAxMi4wMDI4IDguOTk3MDggMTIuMDAyXFxuICAgICAgICAgICAgQyA4LjIwMDk2IDEyLjAwMjcgNy40MzcyNyAxMS42ODY3IDYuODc0MzggMTEuMTIzOFxcbiAgICAgICAgICAgIEMgNi4zMTE1IDEwLjU2MSA1Ljk5NTY0IDkuNzk3MzYgNS45OTY0NCA5LjAwMTRcXG4gICAgICAgICAgICBDIDUuOTk2NDQgNy4zNDU4NiA0LjY1NDA5IDYuMDAzNzggMi45OTgyMiA2LjAwMzc4XFxuICAgICAgICAgICAgQyAxLjM0MjM1IDYuMDAzNzggMCA3LjM0NTg2IDAgOS4wMDE0XFxuICAgICAgICAgICAgQyAwIDEwLjY1NjkgMS4zNDIzNSAxMS45OTkgMi45OTgyMiAxMS45OTlcXG4gICAgICAgICAgICBDIDQuNjU0MDkgMTEuOTk5IDUuOTk2NDQgMTMuMzQxMSA1Ljk5NjQ0IDE0Ljk5NjZcXG4gICAgICAgICAgICBDIDUuOTk2NDQgMTYuNjU1MyA3LjM0MTM2IDE4IDkuMDAwNCAxOFxcbiAgICAgICAgICAgIEMgMTAuNjU5NCAxOCAxMi4wMDQ0IDE2LjY1NTMgMTIuMDA0NCAxNC45OTY2XFxuICAgICAgICAgICAgQyAxMi4wMDQ0IDEzLjM0MTEgMTMuMzQ2NyAxMS45OTkgMTUuMDAyNiAxMS45OTlcXG4gICAgICAgICAgICBDIDE1LjUzNzkgMTEuOTk5NCAxNi4wNjM1IDExLjg1NjMgMTYuNTI0NyAxMS41ODQ2XFxuICAgICAgICAgICAgQyAxNi41NjQ1IDExLjU2MSAxNi42MDM4IDExLjUzNjMgMTYuNjQ1NSAxMS41MTA5XFxuICAgICAgICAgICAgTCAxNi42NTQgMTEuNTA1NVxcbiAgICAgICAgICAgIEMgMTYuNjkwMiAxMS40ODEzIDE2LjcyNjUgMTEuNDU1OSAxNi43NjE1IDExLjQzMDVcXG4gICAgICAgICAgICBMIDE2Ljc3NzIgMTEuNDE5N1xcbiAgICAgICAgICAgIEMgMTYuODA4NiAxMS4zOTY3IDE2LjgzNzYgMTEuMzcyIDE2Ljg3MDkgMTEuMzQ3MlxcbiAgICAgICAgICAgIEwgMTYuODk3NSAxMS4zMjY2XFxuICAgICAgICAgICAgQyAxNi45MjY1IDExLjMwMzEgMTYuOTU0MyAxMS4yNzgzIDE2Ljk4MjcgMTEuMjUzNVxcbiAgICAgICAgICAgIEwgMTcuMDEzNSAxMS4yMjdcXG4gICAgICAgICAgICBDIDE3LjA0OTcgMTEuMTk0MyAxNy4wODU0IDExLjE2MDUgMTcuMTIwNCAxMS4xMjU1XFxuICAgICAgICAgICAgTCAxNy4xMjU5IDExLjEyMDZcXG4gICAgICAgICAgICBDIDE3LjI1NTMgMTAuOTkwNiAxNy4zNzI2IDEwLjg0OTEgMTcuNDc2MyAxMC42OTc4XFxuICAgICAgICAgICAgQyAxNy40OTg5IDEwLjY2NTEgMTcuNTIwNiAxMC42MzIxIDE3LjU0MTYgMTAuNTk4N1xcbiAgICAgICAgICAgIEMgMTguMjg0MyA5LjQxNSAxOC4xMTA0IDcuODc1MiAxNy4xMjIyIDYuODg3WlxcbiAgICAgICAgICAgIFwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pLCgwLGwuanN4KShmLHtjeDpcIjlcIixjeTpcIjNcIixyOlwiMi45XCIsZmlsbDpcImN1cnJlbnRDb2xvclwiLGFuZ2xlOjB9KSwoMCxsLmpzeCkoZix7Y3g6XCIxNVwiLGN5OlwiOVwiLHI6XCIyLjc1XCIsZmlsbDpcImN1cnJlbnRDb2xvclwiLGFuZ2xlOi05MH0pLCgwLGwuanN4KShmLHtjeDpcIjlcIixjeTpcIjE1XCIscjpcIjIuNVwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIixhbmdsZTotMTgwfSksKDAsbC5qc3gpKGYse2N4OlwiM1wiLGN5OlwiOVwiLHI6XCIyLjI1XCIsZmlsbDpcImN1cnJlbnRDb2xvclwiLGFuZ2xlOi0yNzB9KV19KSl9KSl9KSlgYDtjb25zdCB1PXMuZGVmYXVsdC5wYXRoYFxuICBAa2V5ZnJhbWVzIGxvZ29BbmltYXRpb24ge1xuICAgIDAlIHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICAgIDI1JSB7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgICAzNSUge1xuICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG4gICAgNjAlIHtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgfVxuICAgIDc1JSB7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgICAxMDAlIHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICB9XG5cbiAgYW5pbWF0aW9uOiBsb2dvQW5pbWF0aW9uIDJzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuYCxmPXMuZGVmYXVsdC5jaXJjbGVgXG4gIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjtcbiAgYW5pbWF0aW9uOiAkeyh7YW5nbGU6ZX0pPT4oZT0+cy5rZXlmcmFtZXNgXG4gICAgMCUge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgIH1cbiAgICAyNSUge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgICAzMCUge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgICA1MCUge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoJHtlfWRlZyk7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgICA3MCUge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTM2MGRlZyk7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgICA3NSUge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTM2MGRlZyk7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgIH1cbiAgICAxMDAlIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0zNjBkZWcpO1xuICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG5gKShlKX0gMnMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG5gfSw3MDMwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlZhbGlkYXRpb25FcnJvcj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGk9cihuKDc1MTgpKSxhPW4oNzc2OSksbD1uKDk2MzQpO3QuVmFsaWRhdGlvbkVycm9yPSh7Y2hpbGRyZW46ZX0pPT4oMCxvLmpzeHMpKHMse2NoaWxkcmVuOlsoMCxvLmpzeCkobC5JY29uLHtpY29uOlwiRXhjbGFtYXRpb25DaXJjbGVkRmlsbGVkSWNvblwifSksKDAsby5qc3gpKGMse2NoaWxkcmVuOmV9KV19KTtjb25zdCBzPWkuZGVmYXVsdC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGdhcDogJHsoe3RoZW1lOmV9KT0+ZS5weC54c21hbGx9O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIG1hcmdpbi10b3A6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuYCxjPSgwLGkuZGVmYXVsdCkoYS5UZXh0KWBcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0SGVscH07XG5gfSwzNTg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5TdHlsZWRJbnB1dEZpZWxkPXQuQmFzZUlucHV0PXZvaWQgMDtjb25zdCBpPW4oNTg5MyksYT1uKDY2ODkpLGw9byhuKDc1MTgpKSxzPW4oMTMzNSksYz1uKDk1MDcpLHU9big3NzY5KSxmPW4oNzAzMCksZD1uKDE5NDQpO3QuQmFzZUlucHV0PSgwLGEuZm9yd2FyZFJlZikoKChlLG4pPT57dmFye2NsYXNzTmFtZTpvLHJlbmRlcklucHV0OmEsbWVzc2FnZTpsLGxhYmVsOnMsc3RhdHVzOmMsbmFtZTp1LGljb246dix0eXBlOm09XCJ0ZXh0XCIsaGVscGVyVGV4dDpDLHBsYWNlaG9sZGVyOnl9PWUsdz1yKGUsW1wiY2xhc3NOYW1lXCIsXCJyZW5kZXJJbnB1dFwiLFwibWVzc2FnZVwiLFwibGFiZWxcIixcInN0YXR1c1wiLFwibmFtZVwiLFwiaWNvblwiLFwidHlwZVwiLFwiaGVscGVyVGV4dFwiLFwicGxhY2Vob2xkZXJcIl0pO2NvbnN0IGI9XCJjaGVja2JveFwiPT09bXx8XCJyYWRpb1wiPT09bTtyZXR1cm4oMCxpLmpzeHMpKGcsT2JqZWN0LmFzc2lnbih7ZmxleERpcmVjdGlvbjpcImNvbHVtblwiLGFsaWduSXRlbXM6XCJmbGV4LXN0YXJ0XCJ9LHtjaGlsZHJlbjpbKDAsaS5qc3hzKShwLE9iamVjdC5hc3NpZ24oe2lubGluZTpifSx7Y2hpbGRyZW46WyEhcyYmKDAsaS5qc3gpKGQuTGFiZWwse2lubGluZTpiLGljb246dix0ZXh0OnMsaGVscGVyVGV4dDpDLGh0bWxGb3I6dX0pLCEhYSYmYShPYmplY3QuYXNzaWduKHtuYW1lOnUsc3RhdHVzOmMsdHlwZTptfSx3KSksIWEmJigwLGkuanN4KSh0LlN0eWxlZElucHV0RmllbGQsT2JqZWN0LmFzc2lnbih7Y2xhc3NOYW1lOm8sbmFtZTp1LHBsYWNlaG9sZGVyOnksc3RhdHVzOmMsdHlwZTptfSx3LHtyZWY6bn0pKV19KSksbCYmKFwiY3JpdGljYWxcIj09PWM/KDAsaS5qc3gpKGYuVmFsaWRhdGlvbkVycm9yLHtjaGlsZHJlbjpsfSk6KDAsaS5qc3gpKGgsT2JqZWN0LmFzc2lnbih7c3RhdHVzOmN9LHtjaGlsZHJlbjpsfSkpKV19KSl9KSksdC5CYXNlSW5wdXQuZGlzcGxheU5hbWU9XCJCYXNlSW5wdXRcIjtjb25zdCBwPSgwLGwuZGVmYXVsdCkocy5Cb3gpYFxuICBhbGlnbi1pdGVtczogJHsoe2lubGluZTplfSk9PmU/XCJjZW50ZXJcIjpcImZsZXgtc3RhcnRcIn07XG4gIGZsZXgtZGlyZWN0aW9uOiAkeyh7aW5saW5lOmV9KT0+ZT9cInJvdy1yZXZlcnNlXCI6XCJjb2x1bW5cIn07XG4gIGp1c3RpZnktY29udGVudDogJHsoe2lubGluZTplfSk9PmU/XCJmbGV4LWVuZFwiOlwiZmxleC1zdGFydFwifTtcbiAgd2lkdGg6IDEwMCU7XG5gLGg9KDAsbC5kZWZhdWx0KSh1LlRleHQpYFxuICBjb2xvcjogJHsoe3RoZW1lOmUsc3RhdHVzOnR9KT0+KDAsYy5nZXRTdGF0dXNDb2xvcikoZSx0LFwidGV4dEhlbHBcIil9O1xuYCxnPSgwLGwuZGVmYXVsdCkocy5Cb3gpYFxuICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gIHVzZXItc2VsZWN0OiBub25lO1xuYDt0LlN0eWxlZElucHV0RmllbGQ9bC5kZWZhdWx0LmlucHV0YFxuICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDR9O1xuICBib3JkZXI6IDFweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDZ9O1xuICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplLHN0YXR1czp0fSk9PigwLGMuZ2V0U3RhdHVzQ29sb3IpKGUsdCxjLlBhbGV0dGUuaW5wdXRCb3JkZXIpfTtcbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMuc21hbGx9O1xuICBib3gtc2hhZG93OiAkeyh7dGhlbWU6ZX0pPT5lLnNoYWRvdy5iYXNlfTtcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dENvbG9yfTtcbiAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmJhc2V9O1xuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5gJHtlLnB4LnNtYWxsfSAke2UucHguYmFzZX1gfTtcbiAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIHZhcigtLW9wZW5maW4tdWktZ2xvYmFsVHJhbnNpdGlvbik7XG4gIHdpZHRoOiAxMDAlO1xuXG4gICY6Zm9jdXMge1xuICAgIG91dGxpbmU6IDA7XG4gICAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZSxzdGF0dXM6dH0pPT4oMCxjLmdldFN0YXR1c0NvbG9yKShlLHQsYy5QYWxldHRlLmlucHV0Rm9jdXNlZCl9O1xuICB9XG5cbiAgJjpkaXNhYmxlZCB7XG4gICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgfVxuXG4gICY6ZGlzYWJsZWQ6OnBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0RGlzYWJsZWR9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSBoYWNrIHRvIGludmVydCB0aGUgY2FsZW5kYXIgaWNvbi4gVGhpcyBvbmx5IHdvcmtzIGluIGRhcmsgbW9kZS5cbiAgICogVW50aWwgZWl0aGVyIGxpZ2h0IG1vZGUgaXMgYSB0aGluZyBvciB3ZSBnZXQgYSBkYXRldGltZSBwaWNrZXIgZGVzaWduLCB0aGlzIHdpbGwgZG8uXG4gICAqL1xuXG4gIDo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9yIHtcbiAgICBmaWx0ZXI6IGludmVydCgxKTtcbiAgfVxuYH0sODg3ODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oMzU4KSx0KX0sMTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnR9KX06ZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dH0pLGk9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiIT09biYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnIodCxlLG4pO3JldHVybiBvKHQsZSksdH0sYT10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxsPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2hlY2tib3g9dm9pZCAwO2NvbnN0IHM9big1ODkzKSxjPWkobig2Njg5KSksdT1sKG4oNzUxOCkpLGY9big4ODc4KSxkPW4oOTYzNCkscD1uKDk1MDcpO3QuQ2hlY2tib3g9Yy5mb3J3YXJkUmVmKCgoZSx0KT0+e3ZhcntzdGF0dXM6bn09ZSxyPWEoZSxbXCJzdGF0dXNcIl0pO3JldHVybigwLHMuanN4KShmLkJhc2VJbnB1dCxPYmplY3QuYXNzaWduKHt9LHIse3R5cGU6XCJjaGVja2JveFwiLHN0YXR1czpuLHJlbmRlcklucHV0OmU9Pnt2YXIgcj1hKGUsW10pO3JldHVybigwLHMuanN4cykoaCx7Y2hpbGRyZW46WygwLHMuanN4KShtLE9iamVjdC5hc3NpZ24oe3JlZjp0LGlkOnIubmFtZSx0eXBlOlwiY2hlY2tib3hcIn0scikpLCgwLHMuanN4KShnLE9iamVjdC5hc3NpZ24oe3N0YXR1czpufSx7Y2hpbGRyZW46KDAscy5qc3gpKHYse30pfSkpXX0pfX0pKX0pKSx0LkNoZWNrYm94LmRpc3BsYXlOYW1lPVwiQ2hlY2tib3hcIjtjb25zdCBoPXUuZGVmYXVsdC5kaXZgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuYCxnPXUuZGVmYXVsdC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBoZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG4gIHdpZHRoOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuICBib3JkZXI6IDFweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplLHN0YXR1czp0fSk9PigwLHAuZ2V0U3RhdHVzQ29sb3IpKGUsdCxcInRleHREZWZhdWx0XCIpfTtcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbmAsdj0oMCx1LmRlZmF1bHQpKGQuSWNvbikuYXR0cnMoe2ljb246XCJDaGVja0ljb25cIixzaXplOlwic21hbGxcIn0pYFxuICBvcGFjaXR5OiAwO1xuYCxtPXUuZGVmYXVsdC5pbnB1dGBcbiAgb3BhY2l0eTogMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgJjpjaGVja2VkICsgJHtnK1wiIFwiK3Z9IHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG5cbiAgJjpob3ZlciArICR7Z30ge1xuICAgIGJveC1zaGFkb3c6IDAgMCAxcHggMXB4ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dEZvY3VzZWR9O1xuICB9XG5cbiAgJjpmb2N1cyArICR7Z30ge1xuICAgIGJveC1zaGFkb3c6IDAgMCAxcHggMXB4ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dEZvY3VzZWR9O1xuICB9XG5cbiAgJjpkaXNhYmxlZCB7XG4gICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgfVxuXG4gICY6ZGlzYWJsZWQgKyAke2d9IHtcbiAgICBvcGFjaXR5OiAwLjU7XG4gIH1cbmB9LDgwNTE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDEpLHQpfSw5MDIyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pfTpmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10fSksaT10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCIhPT1uJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmcih0LGUsbik7cmV0dXJuIG8odCxlKSx0fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNoZWNrYm94R3JvdXA9dm9pZCAwO2NvbnN0IGE9big1ODkzKSxsPWkobig2Njg5KSkscz1pKG4oNzUxOCkpLGM9bigxMzM1KSx1PW4oNzc2OSksZj1uKDgwNTEpLGQ9big3MDMwKTt0LkNoZWNrYm94R3JvdXA9KHtkaXNhYmxlZDplLGdhcDp0PVwic21hbGxcIixoZWxwZXJUZXh0Om4sbGFiZWw6cixtZXNzYWdlOm8sY2hpbGRyZW46aSx2YWxpZGF0aW9uRXJyb3JNZXNzYWdlOnMsdmFsdWVzOmMsb25DaGFuZ2U6dX0pPT57Y29uc3RbeSx3XT1sLnVzZVN0YXRlKG51bGwhPWM/YzpbXSksYj1lPT57Y29uc3QgdD1lLnRhcmdldC52YWx1ZSxuPXkuaW5jbHVkZXModCk/eS5maWx0ZXIoKGU9PmUhPT10KSk6Wy4uLnksdF07dyhuKSx1JiZ1KG4pfTtyZXR1cm4oMCxhLmpzeHMpKHYse2NoaWxkcmVuOltyJiYoMCxhLmpzeHMpKHAse2NoaWxkcmVuOlsoMCxhLmpzeCkoaCxPYmplY3QuYXNzaWduKHt3ZWlnaHQ6XCJib2xkXCJ9LHtjaGlsZHJlbjpyfSkpLG4mJigwLGEuanN4KShnLHtjaGlsZHJlbjpufSldfSksKDAsYS5qc3gpKG0sT2JqZWN0LmFzc2lnbih7Z2FwOnR9LHtjaGlsZHJlbjpsLkNoaWxkcmVuLm1hcChpLCh0PT57Y29uc3Qgbj10O3JldHVybiBuLnR5cGU9PT1mLkNoZWNrYm94P2wuY2xvbmVFbGVtZW50KG4se2Rpc2FibGVkOmUsb25DaGFuZ2U6YixjaGVja2VkOnkuaW5jbHVkZXMobi5wcm9wcy52YWx1ZSl9KTpufSkpfSkpLCF5Lmxlbmd0aCYmcyYmKDAsYS5qc3gpKGQuVmFsaWRhdGlvbkVycm9yLHtjaGlsZHJlbjpzfSksbz8oMCxhLmpzeCkoQyxPYmplY3QuYXNzaWduKHtkaXNhYmxlZDplfSx7Y2hpbGRyZW46b30pKTpudWxsXX0pfTtjb25zdCBwPSgwLHMuZGVmYXVsdCkoYy5Cb3gpYFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBtYXJnaW4tYm90dG9tOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbmAsaD0oMCxzLmRlZmF1bHQpKHUuVGV4dClgXG4gIHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplO1xuYCxnPSgwLHMuZGVmYXVsdCkodS5UZXh0KWBcbiAgc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5iYXNlfTtcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0SGVscH07XG5gLHY9KDAscy5kZWZhdWx0KShjLkJveClgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHdpZHRoOiBtYXgtY29udGVudDtcbmAsbT0oMCxzLmRlZmF1bHQpKGMuQm94KWBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgYWxpZ24taXRlbXM6IHN0YXJ0O1xuICB3aWR0aDogZml0LWNvbnRlbnQ7XG5gLEM9KDAscy5kZWZhdWx0KSh1LlRleHQpYFxuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0UGxhY2Vob2xkZXJ9O1xuICBtYXJnaW4tdG9wOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuXG4gICR7KHtkaXNhYmxlZDplfSk9PmUmJnMuY3NzYFxuICAgICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dERpc2FibGVkfTtcbiAgICBgfVxuYH0sNDE2OTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oOTAyMiksdCl9LDkzNjg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5EYXRlSW5wdXQ9dm9pZCAwO2NvbnN0IGk9big1ODkzKSxhPW4oNjY4OSksbD1vKG4oNzUxOCkpLHM9big5NjM0KSxjPW4oMTMzNSksdT1uKDg4NzgpO3QuRGF0ZUlucHV0PSgwLGEuZm9yd2FyZFJlZikoKChlLHQpPT57dmFye3ZhbHVlOm49XCJcIix0eXBlOm89XCJkYXRlXCIsZXhwYW5kZWQ6bD0hMSxvbkNoYW5nZTpzfT1lLGM9cihlLFtcInZhbHVlXCIsXCJ0eXBlXCIsXCJleHBhbmRlZFwiLFwib25DaGFuZ2VcIl0pO2NvbnN0W2QscF09KDAsYS51c2VTdGF0ZSkobik7cmV0dXJuKDAsYS51c2VFZmZlY3QpKCgoKT0+cChuKSksW10pLCgwLGkuanN4KSh1LkJhc2VJbnB1dCxPYmplY3QuYXNzaWduKHt0eXBlOm99LGMse3JlbmRlcklucHV0OmU9Pnt2YXIgbj1yKGUsW10pO3JldHVybigwLGkuanN4KShmLE9iamVjdC5hc3NpZ24oe3JlZjp0LHR5cGU6byxvbkNoYW5nZTplPT57Y29uc3R7dmFsdWU6dH09ZS50YXJnZXQ7dCYmcCh0KSxudWxsPT1zfHxzKGUpfSx2YWx1ZTpkLGV4cGFuZGVkOmx9LG4pKX19KSl9KSksdC5EYXRlSW5wdXQuZGlzcGxheU5hbWU9XCJEYXRlSW5wdXRcIjtjb25zdCBmPSgwLGEuZm9yd2FyZFJlZikoKChlLHQpPT57dmFye3R5cGU6bixleHBhbmRlZDpvLG9uRXhwYW5kOmF9PWUsbD1yKGUsW1widHlwZVwiLFwiZXhwYW5kZWRcIixcIm9uRXhwYW5kXCJdKTtyZXR1cm4oMCxpLmpzeHMpKGQse2NoaWxkcmVuOlsoMCxpLmpzeCkoaCx7Y2hpbGRyZW46KDAsaS5qc3gpKHMuSWNvbix7aWNvbjpcInRpbWVcIj09PW4/XCJDbG9ja0ljb25cIjpcIkNhbGVuZGFySWNvblwifSl9KSwoMCxpLmpzeCkodixPYmplY3QuYXNzaWduKHtyZWY6dCx0eXBlOm4sb25LZXlEb3duOmU9PntcIiBcIj09PWUua2V5JiZlLnByZXZlbnREZWZhdWx0KCl9fSxsKSksKDAsaS5qc3gpKGcsT2JqZWN0LmFzc2lnbih7ZmxleERpcmVjdGlvbjpcImNvbHVtblwiLGRpc2FibGVkOmwuZGlzYWJsZWQsb25DbGljazphfSx7Y2hpbGRyZW46KDAsaS5qc3gpKHMuSWNvbix7aWNvbjpvP1wiQ2hldnJvblVwSWNvblwiOlwiQ2hldnJvbkRvd25JY29uXCJ9KX0pKV19KX0pKTtmLmRpc3BsYXlOYW1lPVwiU3R5bGVkRGF0ZUlucHV0XCI7Y29uc3QgZD1sLmRlZmF1bHQuZGl2YFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbiAgd2lkdGg6IDEwMCU7XG5gLHA9KDAsbC5kZWZhdWx0KShjLkJveClgXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMXB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDJweCk7XG5gLGg9KDAsbC5kZWZhdWx0KShwKWBcbiAgbGVmdDogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuYCxnPSgwLGwuZGVmYXVsdCkocClgXG4gIHJpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbiAgcG9pbnRlci1ldmVudHM6ICR7KHtkaXNhYmxlZDplfSk9PmU/XCJub25lXCI6dm9pZCAwfTtcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDZ9O1xuICBwYWRkaW5nLWxlZnQ6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuYCx2PSgwLGwuZGVmYXVsdCkodS5TdHlsZWRJbnB1dEZpZWxkKWBcbiAgYXBwZWFyYW5jZTogdGV4dGZpZWxkO1xuICBwYWRkaW5nLXJpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4Lnh4eGxhcmdlfTtcbiAgcGFkZGluZy1sZWZ0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4Lnh4eGxhcmdlfTtcbiAgOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuICA6Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvciB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgICBhcHBlYXJhbmNlOiBub25lO1xuICB9XG5gfSwxNDY3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig5MzY4KSx0KX0sMTk3ODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oNjg4NCksdCl9LDY4ODQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5OdW1iZXJJbnB1dD10LkRpcmVjdGlvbj12b2lkIDA7Y29uc3QgaT1uKDU4OTMpLGE9big2Njg5KSxsPW8obig3NTE4KSkscz1uKDk2MzQpLGM9bigxMzM1KSx1PW4oODg3OCk7dmFyIGY7IWZ1bmN0aW9uKGUpe2VbZS5VcD0xXT1cIlVwXCIsZVtlLkRvd249LTFdPVwiRG93blwifShmPXQuRGlyZWN0aW9ufHwodC5EaXJlY3Rpb249e30pKSx0Lk51bWJlcklucHV0PSgwLGEuZm9yd2FyZFJlZikoKChlLHQpPT57dmFye21pbjpuLG1heDpvLHN0ZXA6YT0xLG9uVGFrZVN0ZXA6bCx2YWx1ZTpzfT1lLGM9cihlLFtcIm1pblwiLFwibWF4XCIsXCJzdGVwXCIsXCJvblRha2VTdGVwXCIsXCJ2YWx1ZVwiXSk7cmV0dXJuKDAsaS5qc3gpKHUuQmFzZUlucHV0LE9iamVjdC5hc3NpZ24oe3R5cGU6XCJudW1iZXJcIn0sYyx7cmVuZGVySW5wdXQ6ZT0+e3ZhciB1PXIoZSxbXSk7cmV0dXJuKDAsaS5qc3gpKGQsT2JqZWN0LmFzc2lnbih7cHJlcGVuZEljb246Yy5wcmVwZW5kSWNvbixwcmVwZW5kU3RyaW5nOmMucHJlcGVuZFN0cmluZyxyZWY6dCxvbkluY3JlbWVudDooKT0+bCYmbChmLlVwLGEpLG9uRGVjcmVtZW50OigpPT5sJiZsKGYuRG93bixhKSxtaW46bixtYXg6byxzdGVwOmF9LHUse3BsYWNlaG9sZGVyOmMucGxhY2Vob2xkZXIsdmFsdWU6cyxcImFyaWEtdmFsdWVub3dcIjpzLFwiYXJpYS12YWx1ZW1pblwiOm4sXCJhcmlhLXZhbHVlbWF4XCI6b30pKX19KSl9KSksdC5OdW1iZXJJbnB1dC5kaXNwbGF5TmFtZT1cIk51bWJlcklucHV0XCI7Y29uc3QgZD0oMCxhLmZvcndhcmRSZWYpKCgoZSx0KT0+e3ZhcntvbkluY3JlbWVudDpuLG9uRGVjcmVtZW50Om8scHJlcGVuZEljb246bCxwcmVwZW5kU3RyaW5nOmN9PWUsdT1yKGUsW1wib25JbmNyZW1lbnRcIixcIm9uRGVjcmVtZW50XCIsXCJwcmVwZW5kSWNvblwiLFwicHJlcGVuZFN0cmluZ1wiXSk7Y29uc3QgZj0oZSx0KT0+e1wiRW50ZXJcIiE9PWUua2V5JiZcIiBcIiE9PWUua2V5fHwoZS5wcmV2ZW50RGVmYXVsdCgpLHQ/bigpOm8oKSl9LGQ9KDAsYS51c2VSZWYpKG51bGwpLFtDLHldPSgwLGEudXNlU3RhdGUpKDApO3JldHVybigwLGEudXNlRWZmZWN0KSgoKCk9PntkLmN1cnJlbnQ/eShkLmN1cnJlbnQub2Zmc2V0V2lkdGgpOnkoMCl9KSxbZC5jdXJyZW50LGwsY10pLCgwLGkuanN4cykocCx7Y2hpbGRyZW46WyghIWx8fCEhYykmJigwLGkuanN4cykoaCxPYmplY3QuYXNzaWduKHtoYXNJY29uOiEhbCxyZWY6ZCxhbGlnbkl0ZW1zOlwiY2VudGVyXCIsanVzdGlmeUNvbnRlbnQ6XCJjZW50ZXJcIn0se2NoaWxkcmVuOltsJiYoMCxpLmpzeCkocy5JY29uLHtpY29uOmwsc2l6ZTpcImJhc2VcIn0pLGMmJiFsJiZjXX0pKSwoMCxpLmpzeCkobSxPYmplY3QuYXNzaWduKHtwcmVwZW5kQ29udGFpbmVyV2lkdGg6QyxyZWY6dH0sdSkpLCgwLGkuanN4cykoZyxPYmplY3QuYXNzaWduKHtmbGV4RGlyZWN0aW9uOlwiY29sdW1uXCIsZGlzYWJsZWQ6dS5kaXNhYmxlZH0se2NoaWxkcmVuOlsoMCxpLmpzeCkodixPYmplY3QuYXNzaWduKHtvbkNsaWNrOm4sb25LZXlEb3duOmU9PmYoZSwhMCksZGlzYWJsZWQ6dS5kaXNhYmxlZCxcImFyaWEtbGFiZWxcIjpcIkluY3JlbWVudCB2YWx1ZVwiLHRhYkluZGV4OjB9LHtjaGlsZHJlbjooMCxpLmpzeCkocy5JY29uLHtpY29uOlwiVHJpYW5nbGVVcEljb25cIn0pfSkpLCgwLGkuanN4KSh2LE9iamVjdC5hc3NpZ24oe29uS2V5RG93bjplPT5mKGUpLG9uQ2xpY2s6byxcImFyaWEtbGFiZWxcIjpcIkRlY3JlbWVudCB2YWx1ZVwiLGRpc2FibGVkOnUuZGlzYWJsZWQsdGFiSW5kZXg6MH0se2NoaWxkcmVuOigwLGkuanN4KShzLkljb24se2ljb246XCJUcmlhbmdsZURvd25JY29uXCJ9KX0pKV19KSldfSl9KSk7ZC5kaXNwbGF5TmFtZT1cIlN0eWxlZE51bWJlcklucHV0XCI7Y29uc3QgcD1sLmRlZmF1bHQuZGl2YFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbiAgd2lkdGg6IDEwMCU7XG5gLGg9KDAsbC5kZWZhdWx0KShjLkJveClgXG4gIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNn07XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogMXB4O1xuICB0b3A6IDFweDtcbiAgd2lkdGg6ICR7KHt0aGVtZTplLGhhc0ljb246dH0pPT50P2UucHgueHhsYXJnZTpcImZpdC1jb250ZW50XCJ9O1xuICBwYWRkaW5nOiAwICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDJweCk7XG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmAke2UucmFkaXVzLnNtYWxsfSAwIDAgJHtlLnJhZGl1cy5zbWFsbH1gfTtcbmAsZz0oMCxsLmRlZmF1bHQpKGMuQm94KWBcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMXB4O1xuICB0b3A6IDFweDtcbiAgZ2FwOiAxcHg7XG4gIGhlaWdodDogY2FsYygxMDAlIC0gMnB4KTtcbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+YDAgJHtlLnJhZGl1cy5zbWFsbH0gJHtlLnJhZGl1cy5zbWFsbH0gMGB9O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gIHBvaW50ZXItZXZlbnRzOiAkeyh7ZGlzYWJsZWQ6ZX0pPT5lP1wibm9uZVwiOnZvaWQgMH07XG5gLHY9KDAsbC5kZWZhdWx0KShjLkJveClgXG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ2fTtcbiAgcGFkZGluZzogMCAkeyh7dGhlbWU6ZX0pPT5lLnB4LnhzbWFsbH07XG4gIHVzZXItc2VsZWN0OiBub25lO1xuICBoZWlnaHQ6IDUwJTtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cbiAgY29sb3I6ICR7KHtkaXNhYmxlZDplLHRoZW1lOnR9KT0+ZT90LnBhbGV0dGUudGV4dEhlbHA6dC5wYWxldHRlLnRleHREZWZhdWx0fTtcblxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXRGb2N1c2VkfTtcbiAgfVxuXG4gICY6YWN0aXZlIHtcbiAgICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXRDb2xvcn07XG4gIH1cbmAsbT0oMCxsLmRlZmF1bHQpKHUuU3R5bGVkSW5wdXRGaWVsZClgXG4gIGFwcGVhcmFuY2U6IHRleHRmaWVsZDtcbiAgcGFkZGluZy1sZWZ0OiAkeyh7cHJlcGVuZENvbnRhaW5lcldpZHRoOmV9KT0+YCR7ZSsxMH1weGB9O1xuXG4gIDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbiAgOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uIHtcbiAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgIG1hcmdpbjogMDtcbiAgfVxuYH0sNTIxNTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oMjI1NSksdCl9LDIyNTU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImRlZmF1bHRcIix7ZW51bWVyYWJsZTohMCx2YWx1ZTp0fSl9OmZ1bmN0aW9uKGUsdCl7ZS5kZWZhdWx0PXR9KSxpPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIiE9PW4mJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZyKHQsZSxuKTtyZXR1cm4gbyh0LGUpLHR9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuUmFkaW9Hcm91cD12b2lkIDA7Y29uc3QgYT1uKDU4OTMpLGw9aShuKDY2ODkpKSxzPWkobig3NTE4KSksYz1uKDEzMzUpLHU9big3NzY5KSxmPW4oMjU2NSksZD1uKDcwMzApO3QuUmFkaW9Hcm91cD0oe2RpcmVjdGlvbjplPVwiY29sdW1uXCIsbGFiZWw6dCxkaXNhYmxlZDpuLGxhYmVsU2lkZTpyPVwicmlnaHRcIixnYXA6bz1cInNtYWxsXCIsbWVzc2FnZTppLGhlbHBlclRleHQ6cyxuYW1lOmMsY2hpbGRyZW46dSx2YWxpZGF0aW9uRXJyb3JNZXNzYWdlOnksb25DaGFuZ2U6dyx2YWx1ZTpifSk9Pntjb25zdFt4LF9dPWwudXNlU3RhdGUoYiksTz1lPT57XyhlLnRhcmdldC52YWx1ZSksdyYmdyhlKX07cmV0dXJuIGwudXNlRWZmZWN0KCgoKT0+e18oYil9KSxbYl0pLCgwLGEuanN4cykoaCx7Y2hpbGRyZW46WygwLGEuanN4cykocCx7Y2hpbGRyZW46WygwLGEuanN4KShDLE9iamVjdC5hc3NpZ24oe3dlaWdodDpcImJvbGRcIn0se2NoaWxkcmVuOnR9KSkscyYmKDAsYS5qc3gpKGcse2NoaWxkcmVuOnN9KV19KSwoMCxhLmpzeCkodixPYmplY3QuYXNzaWduKHtkaXJlY3Rpb246ZSxsYWJlbFNpZGU6cixnYXA6b30se2NoaWxkcmVuOmwuQ2hpbGRyZW4ubWFwKHUsKGU9Pntjb25zdCB0PWU7cmV0dXJuIHQudHlwZT09PWYuUmFkaW9JbnB1dD9sLmNsb25lRWxlbWVudCh0LHtuYW1lOmMsbGFiZWxTaWRlOnIsZGlzYWJsZWQ6bixvbkNoYW5nZTpPLGNoZWNrZWQ6dC5wcm9wcy52YWx1ZT09PXh9KTp0fSkpfSkpLCF4JiZ5JiYoMCxhLmpzeCkoZC5WYWxpZGF0aW9uRXJyb3Ise2NoaWxkcmVuOnl9KSxpPygwLGEuanN4KShtLE9iamVjdC5hc3NpZ24oe2Rpc2FibGVkOm59LHtjaGlsZHJlbjppfSkpOm51bGxdfSl9O2NvbnN0IHA9KDAscy5kZWZhdWx0KShjLkJveClgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIG1hcmdpbi1ib3R0b206ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuYCxoPSgwLHMuZGVmYXVsdCkoYy5Cb3gpYFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB3aWR0aDogbWF4LWNvbnRlbnQ7XG5gLGc9KDAscy5kZWZhdWx0KSh1LlRleHQpYFxuICBzaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmJhc2V9O1xuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHRIZWxwfTtcbmAsdj0oMCxzLmRlZmF1bHQpKGMuQm94KWBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246ICR7ZT0+ZS5kaXJlY3Rpb259O1xuICBhbGlnbi1pdGVtczogJHtlPT57c3dpdGNoKGUubGFiZWxTaWRlKXtjYXNlXCJsZWZ0XCI6cmV0dXJuXCJlbmRcIjtjYXNlXCJyaWdodFwiOnJldHVyblwic3RhcnRcIjtkZWZhdWx0OnJldHVyblwiY2VudGVyXCJ9fX07XG4gIHdpZHRoOiBmaXQtY29udGVudDtcbmAsbT0oMCxzLmRlZmF1bHQpKHUuVGV4dClgXG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXRQbGFjZWhvbGRlcn07XG4gIG1hcmdpbi10b3A6ICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG5cbiAgJHsoe2Rpc2FibGVkOmV9KT0+ZSYmcy5jc3NgXG4gICAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0RGlzYWJsZWR9O1xuICAgIGB9XG5gLEM9KDAscy5kZWZhdWx0KSh1LlRleHQpYFxuICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcbmB9LDM2NDE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDI1NjUpLHQpfSwyNTY1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pfTpmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10fSksaT10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCIhPT1uJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmcih0LGUsbik7cmV0dXJuIG8odCxlKSx0fSxhPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuUmFkaW9JbnB1dD12b2lkIDA7Y29uc3QgbD1uKDU4OTMpLHM9big3NzY5KSxjPWkobig2Njg5KSksdT1pKG4oNzUxOCkpLGY9bigxMzM1KSxkPW4oOTYzNCk7dC5SYWRpb0lucHV0PWMuZm9yd2FyZFJlZigoKGUsdCk9Pnt2YXJ7ZGlzYWJsZWQ6bixpZDpyLGxhYmVsOm8sbGFiZWxTaWRlOmksaWNvbjpzfT1lLGM9YShlLFtcImRpc2FibGVkXCIsXCJpZFwiLFwibGFiZWxcIixcImxhYmVsU2lkZVwiLFwiaWNvblwiXSk7cmV0dXJuKDAsbC5qc3gpKHAse2NoaWxkcmVuOigwLGwuanN4cykodixPYmplY3QuYXNzaWduKHthczpcImxhYmVsXCIsaHRtbEZvcjpyLGxhYmVsU2lkZTppLGRpc2FibGVkOm59LHtjaGlsZHJlbjpbKDAsbC5qc3gpKGcsT2JqZWN0LmFzc2lnbih7cmVmOnQsdHlwZTpcInJhZGlvXCIsZGlzYWJsZWQ6bn0sYykpLCgwLGwuanN4KShoLHt9KSwhIXMmJigwLGwuanN4KShkLkljb24se2ljb246c30pLG98fFwiXCJdfSkpfSl9KSksdC5SYWRpb0lucHV0LmRpc3BsYXlOYW1lPVwiUmFkaW9JbnB1dFwiO2NvbnN0IHA9KDAsdS5kZWZhdWx0KShmLkJveClgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5gLGg9dS5kZWZhdWx0LmRpdmBcbiAgd2lkdGg6ICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG4gIGhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBib3JkZXItd2lkdGg6IDFweDtcbiAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcblxuICBpbnB1dDpjaGVja2VkIH4gJjphZnRlciB7XG4gICAgY29udGVudDogJyc7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luOiAycHggMXB4IDBweCAycHg7XG4gICAgd2lkdGg6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuICAgIGhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gIH1cblxuICBpbnB1dDpkaXNhYmxlZCB+ICYge1xuICAgIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0RGlzYWJsZWR9O1xuICB9XG5cbiAgaW5wdXQ6ZGlzYWJsZWQgfiAmOmFmdGVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXREaXNhYmxlZH07XG4gIH1cbmAsZz11LmRlZmF1bHQuaW5wdXRgXG4gIG9wYWNpdHk6IDA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICY6ZGlzYWJsZWQge1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgfVxuYCx2PSgwLHUuZGVmYXVsdCkocy5UZXh0KWBcbiAgd2lkdGg6IGZpdC1jb250ZW50O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmbGV4LWRpcmVjdGlvbjogJHsoe2xhYmVsU2lkZTplfSk9Pntzd2l0Y2goZXx8XCJyaWdodFwiKXtjYXNlXCJsZWZ0XCI6cmV0dXJuXCJyb3ctcmV2ZXJzZVwiO2Nhc2VcInJpZ2h0XCI6cmV0dXJuXCJyb3dcIjtjYXNlXCJ0b3BcIjpyZXR1cm5cImNvbHVtbi1yZXZlcnNlXCI7Y2FzZVwiYm90dG9tXCI6cmV0dXJuXCJjb2x1bW5cIn19fTtcbiAgZ2FwOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICR7KHtkaXNhYmxlZDplfSk9PmU/dS5jc3NgXG4gICAgICAgICAgJiB7XG4gICAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dERpc2FibGVkfTtcbiAgICAgICAgYDpudWxsfVxuYH0sODUxMDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oNzA2OCksdCl9LDcwNjg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuUmF3SW5wdXQ9dm9pZCAwO2NvbnN0IG89cihuKDc1MTgpKTt0LlJhd0lucHV0PW8uZGVmYXVsdC5pbnB1dGBgLHQuUmF3SW5wdXQuZGlzcGxheU5hbWU9XCJSYXdJbnB1dFwifSwzMTE5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig3OTkpLHQpfSw3OTk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuVGV4dEFyZWE9dm9pZCAwO2NvbnN0IG89big1ODkzKSxpPW4oNjY4OSksYT1yKG4oNzUxOCkpLGw9big5NTA3KSxzPW4oOTUwNyksYz1uKDEzMzUpLHU9bigxOTQ0KTt0LlRleHRBcmVhPSgwLGkuZm9yd2FyZFJlZikoKChlLHQpPT4oMCxvLmpzeCkoZCxPYmplY3QuYXNzaWduKHtmbGV4RGlyZWN0aW9uOlwiY29sdW1uXCIsYWxpZ25JdGVtczpcImZsZXgtc3RhcnRcIn0se2NoaWxkcmVuOigwLG8uanN4cykoZix7Y2hpbGRyZW46WyEhZS5sYWJlbCYmKDAsby5qc3gpKHUuTGFiZWwse3RleHQ6ZS5sYWJlbCxodG1sRm9yOmUubmFtZSxoZWxwZXJUZXh0OmUuaGVscGVyVGV4dH0pLCgwLG8uanN4KShwLE9iamVjdC5hc3NpZ24oe3JlZjp0fSxlLHtvbkNoYW5nZTplLm9uQ2hhbmdlfSkpXX0pfSkpKSksdC5UZXh0QXJlYS5kaXNwbGF5TmFtZT1cIlRleHRBcmVhXCI7Y29uc3QgZj0oMCxhLmRlZmF1bHQpKGMuQm94KWBcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgd2lkdGg6IDEwMCU7XG5gLGQ9KDAsYS5kZWZhdWx0KShjLkJveClgXG4gIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5iYXNlfTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG5gLHA9YS5kZWZhdWx0LnRleHRhcmVhYFxuICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDR9O1xuICBib3JkZXI6IDFweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXRCb3JkZXJ9O1xuICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplLHN0YXR1czp0fSk9PigwLHMuZ2V0U3RhdHVzQ29sb3IpKGUsdCxcImlucHV0Qm9yZGVyXCIpfTtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICB3aWR0aDogMTAwJTtcbiAgcmVzaXplOiBub25lO1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICAke2wuTWl4aW5zLnNjcm9sbGJhci5zbWFsbH07XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXRDb2xvcn07XG4gIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5iYXNlfTtcbiAgbGluZS1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUubGluZUhlaWdodC50ZXh0fTtcbiAgZm9udC13ZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUuZm9udFdlaWdodC5ub3JtYWx9O1xuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfSAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfSAwcHggJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG5cbiAgJjpmb2N1cyB7XG4gICAgb3V0bGluZTogMDtcbiAgICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplLHN0YXR1czp0fSk9PigwLHMuZ2V0U3RhdHVzQ29sb3IpKGUsdCxcImlucHV0Rm9jdXNlZFwiKX07XG4gIH1cblxuICAmOmRpc2FibGVkOjpwbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dERpc2FibGVkfTtcbiAgfVxuYH0sODk1MTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oMjM1MiksdCl9LDIzNTI6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuVGV4dElucHV0PXZvaWQgMDtjb25zdCByPW4oNTg5Myksbz1uKDY2ODkpLGk9big4ODc4KTt0LlRleHRJbnB1dD0oMCxvLmZvcndhcmRSZWYpKCgoZSx0KT0+KDAsci5qc3gpKGkuQmFzZUlucHV0LE9iamVjdC5hc3NpZ24oe3JlZjp0LHR5cGU6XCJ0ZXh0XCJ9LGUpKSkpLHQuVGV4dElucHV0LmRpc3BsYXlOYW1lPVwiVGV4dElucHV0XCJ9LDMzMzk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQm94PXZvaWQgMDtjb25zdCBvPXIobig3NTE4KSksaT1uKDg3MzIpLGE9big1NDU5KSxsPXsxOmEuUGFsZXR0ZS5iYWNrZ3JvdW5kMSwyOmEuUGFsZXR0ZS5iYWNrZ3JvdW5kMiwzOmEuUGFsZXR0ZS5iYWNrZ3JvdW5kMyw0OmEuUGFsZXR0ZS5iYWNrZ3JvdW5kNCw1OmEuUGFsZXR0ZS5iYWNrZ3JvdW5kNSw2OmEuUGFsZXR0ZS5iYWNrZ3JvdW5kNn07dC5Cb3g9by5kZWZhdWx0LmRpdmBcbiAgLyoqXG4gICAqIFN0eWxlIFNjcm9sbGJhciBmb3IgQm94ZXMgd2l0aCBvdmVyZmxvd1xuICAgKi9cbiAgJHtpLk1peGlucy5zY3JvbGxiYXIuYmFzZX1cblxuICBkaXNwbGF5OiAkeyh7ZGlzcGxheTplPVwiZmxleFwifSk9PmV9O1xuICBmbGV4LWRpcmVjdGlvbjogJHsoe2ZsZXhEaXJlY3Rpb246ZT1cInJvd1wifSk9PmV9O1xuICBmbGV4LXdyYXA6ICR7KHtmbGV4V3JhcDplPVwibm93cmFwXCJ9KT0+ZX07XG4gIGFsaWduLWl0ZW1zOiAkeyh7YWxpZ25JdGVtczplfSk9PmV9O1xuICBqdXN0aWZ5LWNvbnRlbnQ6ICR7KHtqdXN0aWZ5Q29udGVudDplfSk9PmV9O1xuICBnYXA6ICR7KHt0aGVtZTplLGdhcDp0fSk9PnQmJmUucHhbdF19O1xuICBhbGlnbi1zZWxmOiAkeyh7YWxpZ25TZWxmOmV9KT0+ZX07XG4gIGZsZXgtYmFzaXM6ICR7KHtmbGV4QmFzaXM6ZX0pPT5lfTtcbiAgZmxleC1ncm93OiAkeyh7ZmxleEdyb3c6ZX0pPT5lfTtcbiAgZmxleC1zaHJpbms6ICR7KHtmbGV4U2hyaW5rOmV9KT0+ZX07XG4gIG9yZGVyOiAkeyh7b3JkZXI6ZX0pPT5lfTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmUscGFkZGluZzp0fSk9PnQmJmUucHhbdF19O1xuICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZSxiYWNrZ3JvdW5kOnR9KT0+dCYmZS5wYWxldHRlW2xbdF1dfTtcbmAsdC5Cb3guZGlzcGxheU5hbWU9XCJCb3hcIn0sMTMzNTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oMzMzOSksdCl9LDY3MTA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5EZWZpbml0aW9uTGlzdD12b2lkIDA7Y29uc3QgaT1uKDU4OTMpLGE9byhuKDc1MTgpKTt0LkRlZmluaXRpb25MaXN0PWU9Pnt2YXJ7ZGVmaW5pdGlvbnM6dH09ZSxuPXIoZSxbXCJkZWZpbml0aW9uc1wiXSk7cmV0dXJuKDAsaS5qc3gpKHMsT2JqZWN0LmFzc2lnbih7fSxuLHtyb2xlOlwibGlzdFwifSx7Y2hpbGRyZW46KEFycmF5LmlzQXJyYXkodCk/dDpBcnJheS5mcm9tKHQpKS5tYXAoKChbZSx0XSxuKT0+KDAsaS5qc3hzKShsLE9iamVjdC5hc3NpZ24oe3JvbGU6XCJsaXN0aXRlbVwifSx7Y2hpbGRyZW46WygwLGkuanN4KShjLE9iamVjdC5hc3NpZ24oe2lkOmB0ZXJtJHtufWB9LHtjaGlsZHJlbjplfSkpLCgwLGkuanN4KSh1LE9iamVjdC5hc3NpZ24oe1wiYXJpYS1sYWJlbGxlZGJ5XCI6YHRlcm0ke259YH0se2NoaWxkcmVuOnR9KSldfSksYCR7ZX0tJHtufWApKSl9KSl9O2NvbnN0IGw9YS5kZWZhdWx0LmRpdmBcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgM2ZyO1xuYCxzPWEuZGVmYXVsdC5kbGBcbiAgZ2FwOiAkeyh7dGhlbWU6ZX0pPT5gMCAke2UucHgubGFyZ2V9YH07XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAke2UucHguc21hbGx9ICR7ZS5weC5iYXNlfWB9O1xuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuYCxjPWEuZGVmYXVsdC5kdGBcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0SGVscH07XG4gIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5zbWFsbH07XG4gIGZvbnQtd2VpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRXZWlnaHQubm9ybWFsfTtcbiAgbGluZS1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG4gIHBhZGRpbmctYm90dG9tOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbmAsdT1hLmRlZmF1bHQuZGRgXG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuc21hbGx9O1xuICBsaW5lLWhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcbiAgcGFkZGluZy1ib3R0b206ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuYH0sNTM3NzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oNjcxMCksdCl9LDk0MzE6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuR2xvYmFsU3R5bGVzPXZvaWQgMDtjb25zdCByPW4oNzUxOCksbz1uKDU3NSksaT1uKDkyNzIpO3QuR2xvYmFsU3R5bGVzPXIuY3JlYXRlR2xvYmFsU3R5bGVgXG4gIC8qKiAtPiBEZWZpbmUgR2xvYmFsIENTUyBWYXJzICovXG4gIDpyb290IHtcbiAgICAtLW9wZW5maW4tdWktZ2xvYmFsVHJhbnNpdGlvbjogJHsoe3RoZW1lOmV9KT0+ZS50cmFuc2l0aW9uLmJhc2V9O1xuXG4gICAgZm9udC1mYW1pbHk6ICR7KHt0aGVtZTplfSk9PmUuZm9udEZhbWlseX07XG4gICAgLyogTWFwIG92ZXIgdGhlIHBhbGV0dGUga2V5cyBhbmQgY3JlYXRlIHZhcmlhYmxlcyBvdXQgb2YgdGhlbSAqL1xuICAgICR7by5nZXRSb290Q3NzVmFyc31cbiAgfVxuXG4gIC8qKiAtPiBAZm9udC1mYWNlIERlY2xhcmF0aW9uICovXG4gICR7KHtmb250czplfSk9PigwLGkuY3JlYXRlRm9udEZhY2VDc3MpKGUpfVxuXG4gIC8qKiAtPiBNaWNybyBSZXNldCAqL1xuICAqIHtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIC8qKlxuICAgICAqIFByZXZlbnQgYnJvd3NlciBhdXRvLXdlaWdodGluZ1xuICAgICAqIEBsaW5rIGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vYWxtYW5hYy9wcm9wZXJ0aWVzL2YvZm9udC1zeW50aGVzaXMvXG4gICAgICovXG4gICAgZm9udC1zeW50aGVzaXM6IG5vbmU7XG4gIH1cblxuICAvKiogLT4gQXBwbHkgR2xvYmFsIFN0eWxlcyAqL1xuXG4gIGJvZHksXG4gIDpyb290IHtcbiAgICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDF9O1xuICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICAgIGZvbnQtZmFtaWx5OiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRGYW1pbHl9O1xuICAgIGZvbnQtd2VpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRXZWlnaHQubm9ybWFsfTtcbiAgICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gICAgbGluZS1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUubGluZUhlaWdodC50ZXh0fTtcbiAgfVxuXG4gIDo6cGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXRQbGFjZWhvbGRlcn07XG4gIH1cblxuICAvKiogLT4gUmVkdWNlZCBNb3Rpb24gKEFjY2Vzc2liaWxpdHkpICovXG4gIEBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbikge1xuICAgIDpyb290IHtcbiAgICAgIC0tb3BlbmZpbi11aS1nbG9iYWxUcmFuc2l0aW9uOiAkeyh7dGhlbWU6ZX0pPT5lLnRyYW5zaXRpb24ubm9uZX07XG4gICAgfVxuICB9XG5gfSwxMDY5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig5NDMxKSx0KX0sMTMxMDooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSw5NTA3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig5NjM4KSx0KSxvKG4oNDIwKSx0KX0sOTk4NDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5nZXRNb3N0UmVhZGFibGU9dC5kYXJrZW5Db2xvcj10LmxpZ2h0ZW5Db2xvcj12b2lkIDA7Y29uc3Qgbz1yKG4oODIwNykpO3QubGlnaHRlbkNvbG9yPShlLHQpPT5pKGUsXCJsaWdodGVuXCIsdCksdC5kYXJrZW5Db2xvcj0oZSx0KT0+aShlLFwiZGFya2VuXCIsdCk7Y29uc3QgaT0oZSx0LG4pPT57aWYobiYmKG48MHx8bj4xMDApKXRocm93IG5ldyBFcnJvcihgJHtufSBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMTAwYCk7cmV0dXJuKDAsby5kZWZhdWx0KShlKVt0XShuKS50b1N0cmluZygpfTt0LmdldE1vc3RSZWFkYWJsZT0oZSx0KT0+by5kZWZhdWx0Lm1vc3RSZWFkYWJsZShlLHQpLnRvSGV4U3RyaW5nKCl9LDM0NzE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImRlZmF1bHRcIix7ZW51bWVyYWJsZTohMCx2YWx1ZTp0fSl9OmZ1bmN0aW9uKGUsdCl7ZS5kZWZhdWx0PXR9KSxpPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIiE9PW4mJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZyKHQsZSxuKTtyZXR1cm4gbyh0LGUpLHR9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuSWNvblNpemU9dC5JY29uU2V0PXQuVHJhbnNpdGlvbj10LkxpbmVIZWlnaHQ9dC5Gb250V2VpZ2h0PXQuRm9udFNpemU9dC5Gb250RmFtaWx5PXQuU2hhZG93PXQuUmFkaXVzPXQuVW5pdFB4PXQuVW5pdD10LlNpemVOYW1lPXQuU2l6ZT10LkNvbG9yPXZvaWQgMDtjb25zdCBhPWkobigxNTIxKSksbD1pKG4oMjc3MikpO3QuQ29sb3I9e3doaXRlOlwiI0ZGRkZGRlwiLGxpZ2h0R3JheTE6XCIjRkFGQkZFXCIsbGlnaHRHcmF5MjpcIiNGM0Y1RjhcIixsaWdodEdyYXkzOlwiI0VDRUVGMVwiLGxpZ2h0R3JheTQ6XCIjRERERkU0XCIsbGlnaHRHcmF5NTpcIiNDOUNCRDJcIixuZXV0cmFsR3JheTpcIiM3RDgwOEFcIixuZXV0cmFsR3JheTgwOlwicmdiYSgxMjUsMTI4LDEzOCwwLjgpXCIsc2lsdmVyR3JheTpcIiNDMEMxQzJcIixkYXJrR3JheTE6XCIjNTM1NjVGXCIsZGFya0dyYXkyOlwiIzM4M0E0MFwiLGRhcmtHcmF5MzpcIiMyRjMxMzZcIixkYXJrR3JheTQ6XCIjMjQyNjJCXCIsZGFya0dyYXk1OlwiIzFFMUYyM1wiLGRhcmtHcmF5NjpcIiMxMTEyMTRcIixvcGVuRmluRGFya2VzdDpcIiMzRDM5Q0RcIixvcGVuRmluRGFya2VyOlwiIzQ2NDJFMFwiLG9wZW5GaW46XCIjNTA0Q0ZGXCIsb3BlbkZpbkxpZ2h0OlwiIzUyNTRGQlwiLG9wZW5GaW5MaWdodGVyOlwiIzVDNUVGRVwiLG9wZW5GaW5MaWdodGVzdDpcIiM2ODY0RkZcIixmdW5jdGlvbmFsMTpcIiMyMDc3MzVcIixmdW5jdGlvbmFsMjpcIiM0NkM4RjFcIixmdW5jdGlvbmFsMzpcIiMwQTc2RDNcIixmdW5jdGlvbmFsNDpcIiM2Q0FERTVcIixmdW5jdGlvbmFsNTpcIiMwQTc2RDNcIixmdW5jdGlvbmFsNjpcIiM4ODJCRkVcIixmdW5jdGlvbmFsNzpcIiNGMzE4MThcIixmdW5jdGlvbmFsODpcIiNDOTM0MDBcIixmdW5jdGlvbmFsOTpcIiNGRjVFNjBcIixmdW5jdGlvbmFsMTA6XCIjRjQ4RjAwXCIscHVycGxlOlwiIzhDNjFGRlwiLGxpZ2h0Ymx1ZTpcIiMzNkMzRkVcIixhcXVhOlwiIzAwQ0M4OFwiLHllbGxvdzpcIiNGRkVCMDBcIixzYWxtb246XCIjRkY4QzRDXCIscGluazpcIiNGRjVFNjBcIixsaWdodHBpbms6XCIjRkY4RkI4XCIsd2hpdGUwMDpcInJnYmEoMjU1LDI1NSwyNTUsMC4wKVwiLHdoaXRlMTA6XCJyZ2JhKDI1NSwyNTUsMjU1LDAuMSlcIix3aGl0ZTIwOlwicmdiYSgyNTUsMjU1LDI1NSwwLjIpXCIsd2hpdGUzMDpcInJnYmEoMjU1LDI1NSwyNTUsMC4zKVwiLHdoaXRlNDA6XCJyZ2JhKDI1NSwyNTUsMjU1LDAuNClcIix3aGl0ZTUwOlwicmdiYSgyNTUsMjU1LDI1NSwwLjUpXCIsd2hpdGU2MDpcInJnYmEoMjU1LDI1NSwyNTUsMC42KVwiLHdoaXRlNzA6XCJyZ2JhKDI1NSwyNTUsMjU1LDAuNylcIix3aGl0ZTgwOlwicmdiYSgyNTUsMjU1LDI1NSwwLjgpXCIsd2hpdGU5MDpcInJnYmEoMjU1LDI1NSwyNTUsMC45KVwiLGJsYWNrMDA6XCJyZ2JhKDAsMCwwLDAuMClcIixibGFjazEwOlwicmdiYSgwLDAsMCwwLjEpXCIsYmxhY2syMDpcInJnYmEoMCwwLDAsMC4yKVwiLGJsYWNrMzA6XCJyZ2JhKDAsMCwwLDAuMylcIixibGFjazQwOlwicmdiYSgwLDAsMCwwLjQpXCIsYmxhY2s1MDpcInJnYmEoMCwwLDAsMC41KVwiLGJsYWNrNjA6XCJyZ2JhKDAsMCwwLDAuNilcIixibGFjazcwOlwicmdiYSgwLDAsMCwwLjcpXCIsYmxhY2s4MDpcInJnYmEoMCwwLDAsMC44KVwiLGJsYWNrOTA6XCJyZ2JhKDAsMCwwLDAuOSlcIix0cmFuc3BhcmVudDpcInRyYW5zcGFyZW50XCJ9LHQuU2l6ZT17eHNtYWxsOlwieHNtYWxsXCIsc21hbGw6XCJzbWFsbFwiLGJhc2U6XCJiYXNlXCIsbGFyZ2U6XCJsYXJnZVwiLHhsYXJnZTpcInhsYXJnZVwiLHh4bGFyZ2U6XCJ4eGxhcmdlXCIseHh4bGFyZ2U6XCJ4eHhsYXJnZVwiLHh4eHhsYXJnZTpcInh4eHhsYXJnZVwifSx0LlNpemVOYW1lPXtbdC5TaXplLnhzbWFsbF06XCJFeHRyYSBTbWFsbFwiLFt0LlNpemUuc21hbGxdOlwiU21hbGxcIixbdC5TaXplLmJhc2VdOlwiQmFzZVwiLFt0LlNpemUubGFyZ2VdOlwiTGFyZ2VcIixbdC5TaXplLnhsYXJnZV06XCJFeHRyYSBMYXJnZVwiLFt0LlNpemUueHhsYXJnZV06XCIyWCBMYXJnZVwiLFt0LlNpemUueHh4bGFyZ2VdOlwiM1ggTGFyZ2VcIixbdC5TaXplLnh4eHhsYXJnZV06XCI0WCBMYXJnZVwifSx0LlVuaXQ9e1t0LlNpemUueHNtYWxsXTo0LFt0LlNpemUuc21hbGxdOjgsW3QuU2l6ZS5iYXNlXToxMixbdC5TaXplLmxhcmdlXToxNixbdC5TaXplLnhsYXJnZV06MjAsW3QuU2l6ZS54eGxhcmdlXToyNCxbdC5TaXplLnh4eGxhcmdlXTozMixbdC5TaXplLnh4eHhsYXJnZV06NDh9LHQuVW5pdFB4PXtbdC5TaXplLnhzbWFsbF06XCI0cHhcIixbdC5TaXplLnNtYWxsXTpcIjhweFwiLFt0LlNpemUuYmFzZV06XCIxMnB4XCIsW3QuU2l6ZS5sYXJnZV06XCIxNnB4XCIsW3QuU2l6ZS54bGFyZ2VdOlwiMjBweFwiLFt0LlNpemUueHhsYXJnZV06XCIyNHB4XCIsW3QuU2l6ZS54eHhsYXJnZV06XCIzMnB4XCIsW3QuU2l6ZS54eHh4bGFyZ2VdOlwiNDhweFwifSx0LlJhZGl1cz17W3QuU2l6ZS54c21hbGxdOlwiMnB4XCIsW3QuU2l6ZS5zbWFsbF06XCI0cHhcIixbdC5TaXplLmJhc2VdOlwiOHB4XCIsW3QuU2l6ZS5sYXJnZV06XCIyNHB4XCIscGlsbDpcIjEwMHZoXCIscm91bmQ6XCI1MCVcIixub25lOlwiMFwifSx0LlNoYWRvdz17W3QuU2l6ZS5iYXNlXTpcIjAgNHB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMjUpXCJ9LHQuRm9udEZhbWlseT1bXCJJbnRlclwiLFwic3lzdGVtLXVpXCIsXCJCbGlua01hY1N5c3RlbUZvbnRcIixcIlNlZ29lIFVJXCIsXCJSb2JvdG9cIixcIk94eWdlbi1TYW5zXCIsXCJVYnVudHVcIixcIkNhbnRhcmVsbFwiLFwiSGVsdmV0aWNhIE5ldWVcIixcInNhbnMtc2VyaWZcIl0uam9pbihcIixcIiksdC5Gb250U2l6ZT17W3QuU2l6ZS54c21hbGxdOlwiOHB4XCIsW3QuU2l6ZS5zbWFsbF06XCIxMHB4XCIsW3QuU2l6ZS5iYXNlXTpcIjEycHhcIixbdC5TaXplLmxhcmdlXTpcIjE0cHhcIixbdC5TaXplLnhsYXJnZV06XCIxNnB4XCIsW3QuU2l6ZS54eGxhcmdlXTpcIjE4cHhcIixbdC5TaXplLnh4eGxhcmdlXTpcIjIwcHhcIixbdC5TaXplLnh4eHhsYXJnZV06XCI0MHB4XCJ9LHQuRm9udFdlaWdodD17bm9ybWFsOjQwMCxib2xkOjYwMH0sdC5MaW5lSGVpZ2h0PXt1aToxLGhlYWRpbmc6MS4yLHRleHQ6MS41fSx0LlRyYW5zaXRpb249e2Jhc2U6XCIyMDBtcyBjdWJpYy1iZXppZXIoMC4xNiwgMSwgMC4zLCAxKVwiLG5vbmU6XCIwbXNcIn0sdC5JY29uU2V0PU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxhKSxsKSx0Lkljb25TaXplPXtbdC5TaXplLnhzbWFsbF06dC5Vbml0UHguc21hbGwsW3QuU2l6ZS5zbWFsbF06dC5Vbml0UHguYmFzZSxbdC5TaXplLmJhc2VdOlwiMTVweFwiLFt0LlNpemUubGFyZ2VdOnQuVW5pdFB4LnhsYXJnZSxbdC5TaXplLnhsYXJnZV06dC5Vbml0UHgueHhsYXJnZSxbdC5TaXplLnh4bGFyZ2VdOnQuVW5pdFB4Lnh4eGxhcmdlLFt0LlNpemUueHh4bGFyZ2VdOnQuVW5pdFB4Lnh4eHhsYXJnZX19LDkyNzI6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuY3JlYXRlRm9udEZhY2VDc3M9dm9pZCAwO2NvbnN0IHI9big3NTE4KSxvPW4oMzQ3MSk7dC5jcmVhdGVGb250RmFjZUNzcz1mdW5jdGlvbihlKXtyZXR1cm4gci5jc3NgXG4gICAgJHtlLnJlZ3VsYXImJnIuY3NzYFxuICAgICAgQGZvbnQtZmFjZSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnSW50ZXInO1xuICAgICAgICBzcmM6IHVybCgke2UucmVndWxhcn0pIGZvcm1hdCgnd29mZjInKTtcbiAgICAgICAgZm9udC13ZWlnaHQ6ICR7by5Gb250V2VpZ2h0Lm5vcm1hbH07XG4gICAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICAgICAgZm9udC1kaXNwbGF5OiBmYWxsYmFjaztcbiAgICAgIH1cbiAgICBgfVxuICAgICR7ZS5pdGFsaWMmJnIuY3NzYFxuICAgICAgQGZvbnQtZmFjZSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnSW50ZXInO1xuICAgICAgICBzcmM6IHVybCgke2UuaXRhbGljfSkgZm9ybWF0KCd3b2ZmMicpO1xuICAgICAgICBmb250LXdlaWdodDogJHtvLkZvbnRXZWlnaHQubm9ybWFsfTtcbiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgICAgICBmb250LWRpc3BsYXk6IGZhbGxiYWNrO1xuICAgICAgfVxuICAgIGB9XG4gICAgJHtlLnNlbWlCb2xkJiZyLmNzc2BcbiAgICAgIEBmb250LWZhY2Uge1xuICAgICAgICBmb250LWZhbWlseTogJ0ludGVyJztcbiAgICAgICAgc3JjOiB1cmwoJHtlLnNlbWlCb2xkfSkgZm9ybWF0KCd3b2ZmMicpO1xuICAgICAgICBmb250LXdlaWdodDogJHtvLkZvbnRXZWlnaHQuYm9sZH07XG4gICAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICAgICAgZm9udC1kaXNwbGF5OiBmYWxsYmFjaztcbiAgICAgIH1cbiAgICBgfVxuICAgICR7ZS5zZW1pQm9sZEl0YWxpYyYmci5jc3NgXG4gICAgICBAZm9udC1mYWNlIHtcbiAgICAgICAgZm9udC1mYW1pbHk6ICdJbnRlcic7XG4gICAgICAgIHNyYzogdXJsKCR7ZS5zZW1pQm9sZEl0YWxpY30pIGZvcm1hdCgnd29mZjInKTtcbiAgICAgICAgZm9udC13ZWlnaHQ6ICR7by5Gb250V2VpZ2h0LmJvbGR9O1xuICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgICAgIGZvbnQtZGlzcGxheTogZmFsbGJhY2s7XG4gICAgICB9XG4gICAgYH1cbiAgYH19LDY3MTQ6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuY3JlYXRlVGhlbWU9dm9pZCAwO2NvbnN0IHI9bigzNDcxKSxvPW4oOTk4NCksaT1uKDU0NTkpLGE9e2ZvbnRGYW1pbHk6ci5Gb250RmFtaWx5LGZvbnRTaXplOnIuRm9udFNpemUsZm9udFdlaWdodDpyLkZvbnRXZWlnaHQsbGluZUhlaWdodDpyLkxpbmVIZWlnaHQsaWNvblNpemU6ci5JY29uU2l6ZSxyYWRpdXM6ci5SYWRpdXMsc2hhZG93OnIuU2hhZG93LHRyYW5zaXRpb246ci5UcmFuc2l0aW9uLHVuaXQ6ci5Vbml0LHB4OnIuVW5pdFB4fSxsPShlLHQpPT4oe1tgJHtlfUFjdGl2ZWBdOigwLG8uZGFya2VuQ29sb3IpKHQsMiksW2Ake2V9SG92ZXJgXTooMCxvLmxpZ2h0ZW5Db2xvcikodCw1KSxbYCR7ZX1Gb2N1c2VkYF06KDAsby5nZXRNb3N0UmVhZGFibGUpKHQsW3IuQ29sb3Iud2hpdGUsci5Db2xvci5kYXJrR3JheTVdKSxbYCR7ZX1UZXh0YF06KDAsby5nZXRNb3N0UmVhZGFibGUpKHQsW3IuQ29sb3Iud2hpdGUsci5Db2xvci5kYXJrR3JheTVdKX0pO3QuY3JlYXRlVGhlbWU9ZT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGEpLHtwYWxldHRlOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLGwoaS5QYWxldHRlLmJyYW5kUHJpbWFyeSxlLmJyYW5kUHJpbWFyeSkpLGwoaS5QYWxldHRlLmJyYW5kU2Vjb25kYXJ5LGUuYnJhbmRTZWNvbmRhcnkpKX0pfSw1NzU6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuU1VQUE9SVEVEX0xBTkdVQUdFUz10LmdldFN0YXR1c0NvbG9yPXQuZ2V0Um9vdENzc1ZhcnM9dC5nZXRWYXJpYW50Q1NTPXZvaWQgMDtjb25zdCByPW4oNTQ1OSk7dC5nZXRWYXJpYW50Q1NTPShlLHQpPT5uPT5lW3RdW25bdF1dLHQuZ2V0Um9vdENzc1ZhcnM9KHt0aGVtZTplfSk9Pk9iamVjdC5rZXlzKHIuUGFsZXR0ZSkubWFwKCh0PT5gLS1vcGVuZmluLXVpLSR7dH06ICR7ZS5wYWxldHRlW3RdfTtgKSkuam9pbihcIlxcblwiKSx0LmdldFN0YXR1c0NvbG9yPShlLHQsbik9Pntzd2l0Y2godCl7Y2FzZVwiYWN0aXZlXCI6cmV0dXJuIGUucGFsZXR0ZS5zdGF0dXNBY3RpdmU7Y2FzZVwiY3JpdGljYWxcIjpyZXR1cm4gZS5wYWxldHRlLnN0YXR1c0NyaXRpY2FsO2Nhc2VcIndhcm5pbmdcIjpyZXR1cm4gZS5wYWxldHRlLnN0YXR1c1dhcm5pbmc7Y2FzZVwic3VjY2Vzc1wiOnJldHVybiBlLnBhbGV0dGUuc3RhdHVzU3VjY2VzcztkZWZhdWx0OnJldHVybiBuP2UucGFsZXR0ZVtuXTpcImluaGVyaXRcIn19LHQuU1VQUE9SVEVEX0xBTkdVQUdFUz1bXCJlbi1VU1wiLFwiamEtSlBcIixcInpoLUNOXCIsXCJrby1LUlwiLFwicnUtUlVcIixcImRlLURFXCIsXCJ6aC1IYW50XCJdfSw5NjM4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig5OTg0KSx0KSxvKG4oMzQ3MSksdCksbyhuKDkyNzIpLHQpLG8obig2NzE0KSx0KSxvKG4oNTc1KSx0KSxvKG4oMTQ0MSksdCksbyhuKDg3MzIpLHQpLG8obig1NDU5KSx0KSxvKG4oNTMxNyksdCl9LDE0NDE6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0sODczMjooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5NaXhpbnM9dm9pZCAwO2NvbnN0IHI9bigzNDcxKSxvPW4oNzUxOCksaT1vLmNzc2BcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG5gLGE9by5jc3NgXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuYCxsPW8uY3NzYFxuICAmOjotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgd2lkdGg6IHZhcigtLXNjcm9sbGJhclNpemUsICR7ci5Vbml0UHgueHNtYWxsfSk7XG4gICAgaGVpZ2h0OiB2YXIoLS1zY3JvbGxiYXJTaXplLCAke3IuVW5pdFB4LnhzbWFsbH0pO1xuICB9XG5cbiAgJjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xuICAgIGJhY2tncm91bmQ6ICR7ci5Db2xvci5uZXV0cmFsR3JheTgwfTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1zY3JvbGxiYXJTaXplLCAke3IuVW5pdFB4LnhzbWFsbH0pO1xuICAgIG9wYWNpdHk6IDAuODtcbiAgfVxuXG4gICY6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgICBiYWNrZ3JvdW5kOiAke3IuQ29sb3Iud2hpdGU4MH07XG4gICAgd2lkdGg6IHZhcigtLXNjcm9sbGJhclNpemUsICR7ci5Vbml0UHgueHNtYWxsfSk7XG4gICAgaGVpZ2h0OiB2YXIoLS1zY3JvbGxiYXJTaXplLCAke3IuVW5pdFB4LnhzbWFsbH0pO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXNjcm9sbGJhclNpemUsICR7ci5Vbml0UHgueHNtYWxsfSk7XG4gICAgb3BhY2l0eTogMC44O1xuICB9XG5gLHM9by5jc3NgXG4gIC0tc2Nyb2xsYmFyU2l6ZTogMnB4O1xuICAke2x9O1xuYCxjPW8uY3NzYFxuICAtd2Via2l0LWFwcC1yZWdpb246IGRyYWc7XG5gLHU9by5jc3NgXG4gIC13ZWJraXQtYXBwLXJlZ2lvbjogbm8tZHJhZztcbmA7dC5NaXhpbnM9e25vU2VsZWN0OmksdGV4dE92ZXJmbG93OmEsc2Nyb2xsYmFyOntbci5TaXplLmJhc2VdOmwsW3IuU2l6ZS5zbWFsbF06c30sYXBwUmVnaW9uOntkcmFnOmMsbm9EcmFnOnV9fX0sNTQ1OTooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuUGFsZXR0ZT12b2lkIDAsdC5QYWxldHRlPXtiYWNrZ3JvdW5kMTpcImJhY2tncm91bmQxXCIsYmFja2dyb3VuZDI6XCJiYWNrZ3JvdW5kMlwiLGJhY2tncm91bmQzOlwiYmFja2dyb3VuZDNcIixiYWNrZ3JvdW5kNDpcImJhY2tncm91bmQ0XCIsYmFja2dyb3VuZDU6XCJiYWNrZ3JvdW5kNVwiLGJhY2tncm91bmQ2OlwiYmFja2dyb3VuZDZcIixicmFuZFByaW1hcnk6XCJicmFuZFByaW1hcnlcIixicmFuZFNlY29uZGFyeTpcImJyYW5kU2Vjb25kYXJ5XCIsYnJhbmRQcmltYXJ5QWN0aXZlOlwiYnJhbmRQcmltYXJ5QWN0aXZlXCIsYnJhbmRQcmltYXJ5SG92ZXI6XCJicmFuZFByaW1hcnlIb3ZlclwiLGJyYW5kUHJpbWFyeUZvY3VzZWQ6XCJicmFuZFByaW1hcnlGb2N1c2VkXCIsYnJhbmRQcmltYXJ5VGV4dDpcImJyYW5kUHJpbWFyeVRleHRcIixicmFuZFNlY29uZGFyeUFjdGl2ZTpcImJyYW5kU2Vjb25kYXJ5QWN0aXZlXCIsYnJhbmRTZWNvbmRhcnlIb3ZlcjpcImJyYW5kU2Vjb25kYXJ5SG92ZXJcIixicmFuZFNlY29uZGFyeUZvY3VzZWQ6XCJicmFuZFNlY29uZGFyeUZvY3VzZWRcIixicmFuZFNlY29uZGFyeVRleHQ6XCJicmFuZFNlY29uZGFyeVRleHRcIixpbnB1dEJhY2tncm91bmQ6XCJpbnB1dEJhY2tncm91bmRcIixpbnB1dENvbG9yOlwiaW5wdXRDb2xvclwiLGlucHV0UGxhY2Vob2xkZXI6XCJpbnB1dFBsYWNlaG9sZGVyXCIsaW5wdXREaXNhYmxlZDpcImlucHV0RGlzYWJsZWRcIixpbnB1dEZvY3VzZWQ6XCJpbnB1dEZvY3VzZWRcIixpbnB1dEJvcmRlcjpcImlucHV0Qm9yZGVyXCIsc3RhdHVzU3VjY2VzczpcInN0YXR1c1N1Y2Nlc3NcIixzdGF0dXNXYXJuaW5nOlwic3RhdHVzV2FybmluZ1wiLHN0YXR1c0NyaXRpY2FsOlwic3RhdHVzQ3JpdGljYWxcIixzdGF0dXNBY3RpdmU6XCJzdGF0dXNBY3RpdmVcIix0ZXh0RGVmYXVsdDpcInRleHREZWZhdWx0XCIsdGV4dEhlbHA6XCJ0ZXh0SGVscFwiLHRleHRJbmFjdGl2ZTpcInRleHRJbmFjdGl2ZVwiLGJvcmRlck5ldXRyYWw6XCJib3JkZXJOZXV0cmFsXCIsY29udGVudEJhY2tncm91bmQxOlwiY29udGVudEJhY2tncm91bmQxXCIsY29udGVudEJhY2tncm91bmQyOlwiY29udGVudEJhY2tncm91bmQyXCIsY29udGVudEJhY2tncm91bmQzOlwiY29udGVudEJhY2tncm91bmQzXCIsY29udGVudEJhY2tncm91bmQ0OlwiY29udGVudEJhY2tncm91bmQ0XCIsY29udGVudEJhY2tncm91bmQ1OlwiY29udGVudEJhY2tncm91bmQ1XCIsbGlua0RlZmF1bHQ6XCJsaW5rRGVmYXVsdFwiLGxpbmtIb3ZlcjpcImxpbmtIb3ZlclwifX0sNTMxNzooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSw0MjY2OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig5NDgzKSx0KX0sOTQ4MzooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5PcGVuRmluRGFya1RoZW1lPXQuT3BlbkZpbkxpZ2h0VGhlbWU9dm9pZCAwO2NvbnN0IHI9big1NDU5KSxvPW4oMzQ3MSksaT1uKDY3MTQpLGE9e1tyLlBhbGV0dGUuYnJhbmRQcmltYXJ5XTpvLkNvbG9yLm9wZW5GaW4sW3IuUGFsZXR0ZS5zdGF0dXNTdWNjZXNzXTpvLkNvbG9yLmZ1bmN0aW9uYWwxLFtyLlBhbGV0dGUuc3RhdHVzV2FybmluZ106by5Db2xvci5mdW5jdGlvbmFsMTAsW3IuUGFsZXR0ZS5zdGF0dXNDcml0aWNhbF06by5Db2xvci5mdW5jdGlvbmFsNyxbci5QYWxldHRlLnN0YXR1c0FjdGl2ZV06by5Db2xvci5mdW5jdGlvbmFsMyxbci5QYWxldHRlLmJvcmRlck5ldXRyYWxdOm8uQ29sb3Iuc2lsdmVyR3JheSxbci5QYWxldHRlLmNvbnRlbnRCYWNrZ3JvdW5kMV06by5Db2xvci5vcGVuRmluLFtyLlBhbGV0dGUuY29udGVudEJhY2tncm91bmQyXTpcIiMwMDAwMDBcIixbci5QYWxldHRlLmNvbnRlbnRCYWNrZ3JvdW5kM106XCIjMDAwMDAwXCIsW3IuUGFsZXR0ZS5jb250ZW50QmFja2dyb3VuZDRdOlwiIzAwMDAwMFwiLFtyLlBhbGV0dGUuY29udGVudEJhY2tncm91bmQ1XTpcIiMwMDAwMDBcIixbci5QYWxldHRlLmxpbmtEZWZhdWx0XTpvLkNvbG9yLmZ1bmN0aW9uYWw0LFtyLlBhbGV0dGUubGlua0hvdmVyXTpvLkNvbG9yLmZ1bmN0aW9uYWw1fTt0Lk9wZW5GaW5MaWdodFRoZW1lPSgwLGkuY3JlYXRlVGhlbWUpKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxhKSx7W3IuUGFsZXR0ZS5iYWNrZ3JvdW5kMV06by5Db2xvci53aGl0ZSxbci5QYWxldHRlLmJhY2tncm91bmQyXTpvLkNvbG9yLmxpZ2h0R3JheTEsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kM106by5Db2xvci5saWdodEdyYXkyLFtyLlBhbGV0dGUuYmFja2dyb3VuZDRdOm8uQ29sb3IubGlnaHRHcmF5Myxbci5QYWxldHRlLmJhY2tncm91bmQ1XTpvLkNvbG9yLmxpZ2h0R3JheTMsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kNl06by5Db2xvci5saWdodEdyYXk1LFtyLlBhbGV0dGUuYnJhbmRTZWNvbmRhcnldOm8uQ29sb3IubGlnaHRHcmF5NCxbci5QYWxldHRlLmlucHV0QmFja2dyb3VuZF06by5Db2xvci5saWdodEdyYXkzLFtyLlBhbGV0dGUuaW5wdXRDb2xvcl06by5Db2xvci5kYXJrR3JheTUsW3IuUGFsZXR0ZS5pbnB1dFBsYWNlaG9sZGVyXTpvLkNvbG9yLmRhcmtHcmF5Mixbci5QYWxldHRlLmlucHV0RGlzYWJsZWRdOm8uQ29sb3IubmV1dHJhbEdyYXksW3IuUGFsZXR0ZS5pbnB1dEZvY3VzZWRdOm8uQ29sb3IubGlnaHRHcmF5NSxbci5QYWxldHRlLmlucHV0Qm9yZGVyXTpvLkNvbG9yLm5ldXRyYWxHcmF5LFtyLlBhbGV0dGUudGV4dERlZmF1bHRdOm8uQ29sb3IuZGFya0dyYXk1LFtyLlBhbGV0dGUudGV4dEhlbHBdOm8uQ29sb3IubmV1dHJhbEdyYXksW3IuUGFsZXR0ZS50ZXh0SW5hY3RpdmVdOm8uQ29sb3IubmV1dHJhbEdyYXl9KSksdC5PcGVuRmluRGFya1RoZW1lPSgwLGkuY3JlYXRlVGhlbWUpKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxhKSx7W3IuUGFsZXR0ZS5iYWNrZ3JvdW5kMV06by5Db2xvci5kYXJrR3JheTYsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kMl06by5Db2xvci5kYXJrR3JheTUsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kM106by5Db2xvci5kYXJrR3JheTQsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kNF06by5Db2xvci5kYXJrR3JheTMsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kNV06by5Db2xvci5kYXJrR3JheTIsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kNl06by5Db2xvci5kYXJrR3JheTEsW3IuUGFsZXR0ZS5icmFuZFNlY29uZGFyeV06by5Db2xvci5kYXJrR3JheTIsW3IuUGFsZXR0ZS5pbnB1dEJhY2tncm91bmRdOm8uQ29sb3IuZGFya0dyYXkxLFtyLlBhbGV0dGUuaW5wdXRDb2xvcl06by5Db2xvci53aGl0ZSxbci5QYWxldHRlLmlucHV0UGxhY2Vob2xkZXJdOm8uQ29sb3IubGlnaHRHcmF5NSxbci5QYWxldHRlLmlucHV0RGlzYWJsZWRdOm8uQ29sb3IubmV1dHJhbEdyYXksW3IuUGFsZXR0ZS5pbnB1dEZvY3VzZWRdOm8uQ29sb3IubGlnaHRHcmF5NSxbci5QYWxldHRlLmlucHV0Qm9yZGVyXTpvLkNvbG9yLm5ldXRyYWxHcmF5LFtyLlBhbGV0dGUudGV4dERlZmF1bHRdOm8uQ29sb3Iud2hpdGUsW3IuUGFsZXR0ZS50ZXh0SGVscF06by5Db2xvci5saWdodEdyYXk1LFtyLlBhbGV0dGUudGV4dEluYWN0aXZlXTpvLkNvbG9yLm5ldXRyYWxHcmF5fSkpfSw0MjA6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuVGhlbWVQcm92aWRlcj12b2lkIDA7Y29uc3Qgcj1uKDU4OTMpLG89big3NTE4KSxpPW4oMzE5MCksYT1uKDcwODgpLGw9bigxMDY5KSxzPW4oNjIxOCk7dC5UaGVtZVByb3ZpZGVyPSh7Y2hpbGRyZW46ZSx0aGVtZXM6dCxzY2hlbWU6bj1pLkNvbG9yU2NoZW1lLnN5c3RlbSxmb250czpjPXMuRm9udHN9KT0+e2NvbnN0IHU9KDAsYS51c2VUaGVtZSkoe3RoZW1lczp0LHNjaGVtZTpufSk7cmV0dXJuKDAsci5qc3gpKG8uVGhlbWVQcm92aWRlcixPYmplY3QuYXNzaWduKHt0aGVtZTp1fSx7Y2hpbGRyZW46KDAsci5qc3hzKShyLkZyYWdtZW50LHtjaGlsZHJlbjpbKDAsci5qc3gpKGwuR2xvYmFsU3R5bGVzLHtmb250czpjfSksZV19KX0pKX19LDM4Nzc6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDEwNjkpLHQpLG8obigxMzEwKSx0KSxvKG4oOTUwNyksdCl9LDk3NTg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ29udGFjdFN0YXR1c0ljb249dm9pZCAwO2NvbnN0IG89big1ODkzKSxpPXIobig3NTE4KSksYT1uKDEzMzMpLGw9e2F2YWlsYWJsZTooMCxvLmpzeCkoYS5DaGVja1NWRyx7fSksYXdheTooMCxvLmpzeCkoYS5CdXN5U1ZHLHt9KSxcImRvLW5vdC1kaXN0dXJiXCI6KDAsby5qc3gpKGEuRG9Ob3REaXN0dXJiU1ZHLHt9KSxvZmZsaW5lOigwLG8uanN4KShhLk9mZmxpbmVTVkcse30pLGJ1c3k6bnVsbH07dC5Db250YWN0U3RhdHVzSWNvbj0oe29ubGluZVN0YXR1czplfSk9PmU/KDAsby5qc3gpKHMsT2JqZWN0LmFzc2lnbih7b25saW5lU3RhdHVzOmV9LHtjaGlsZHJlbjpsW2VdfHxudWxsfSkpOm51bGw7Y29uc3Qgcz1pLmRlZmF1bHQuZGl2YFxuICBib3JkZXI6IDEuNnB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kMX07XG5cbiAgYmFja2dyb3VuZDogJHsoe29ubGluZVN0YXR1czplfSk9PlwiYnVzeVwiPT09ZT9cIiNDMjEzMTNcIjpcIndoaXRlXCJ9O1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG5cbiAgaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmxhcmdlfTtcbiAgd2lkdGg6ICR7KHt0aGVtZTplfSk9PmUucHgubGFyZ2V9O1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogNzguOTUlO1xuICByaWdodDogLTcuMDIlO1xuICB0b3A6IDc3LjEyJTtcbiAgYm90dG9tOiAtNC4yNCU7XG5gfSwxMzMzOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lk9mZmxpbmVTVkc9dC5Eb05vdERpc3R1cmJTVkc9dC5CdXN5U1ZHPXQuQ2hlY2tTVkc9dm9pZCAwO2NvbnN0IHI9big1ODkzKTt0LkNoZWNrU1ZHPSgpPT4oMCxyLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTZcIix2aWV3Qm94OlwiMCAwIDE2IDE2XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LHtjaGlsZHJlbjooMCxyLmpzeCkoXCJwYXRoXCIse2Q6XCJNOCAwQzguNzM0MzggMCA5LjQ0MDEgMC4wOTYzNTQyIDEwLjExNzIgMC4yODkwNjNDMTAuNzk0MyAwLjQ4MTc3MSAxMS40Mjk3IDAuNzUyNjA0IDEyLjAyMzQgMS4xMDE1NkMxMi42MTcyIDEuNDUwNTIgMTMuMTU2MyAxLjg2OTc5IDEzLjY0MDYgMi4zNTkzOEMxNC4xMzAyIDIuODQzNzUgMTQuNTQ5NSAzLjM4MjgxIDE0Ljg5ODQgMy45NzY1NkMxNS4yNDc0IDQuNTcwMzEgMTUuNTE4MiA1LjIwNTczIDE1LjcxMDkgNS44ODI4MUMxNS45MDM2IDYuNTU5OSAxNiA3LjI2NTYzIDE2IDhDMTYgOC43MjkxNyAxNS45MDM2IDkuNDM0OSAxNS43MTA5IDEwLjExNzJDMTUuNTE4MiAxMC43OTQzIDE1LjI0NzQgMTEuNDI5NyAxNC44OTg0IDEyLjAyMzRDMTQuNTQ5NSAxMi42MTcyIDE0LjEzMDIgMTMuMTU4OSAxMy42NDA2IDEzLjY0ODRDMTMuMTU2MyAxNC4xMzI4IDEyLjYxNzIgMTQuNTQ5NSAxMi4wMjM0IDE0Ljg5ODRDMTEuNDI5NyAxNS4yNDc0IDEwLjc5MTcgMTUuNTE4MiAxMC4xMDk0IDE1LjcxMDlDOS40MzIyOSAxNS45MDM2IDguNzI5MTcgMTYgOCAxNkM3LjI3MDgzIDE2IDYuNTY1MSAxNS45MDM2IDUuODgyODEgMTUuNzEwOUM1LjIwNTczIDE1LjUxODIgNC41NzAzMSAxNS4yNDc0IDMuOTc2NTYgMTQuODk4NEMzLjM4MjgxIDE0LjU0OTUgMi44NDExNSAxNC4xMzI4IDIuMzUxNTYgMTMuNjQ4NEMxLjg2NzE5IDEzLjE1ODkgMS40NTA1MiAxMi42MTcyIDEuMTAxNTYgMTIuMDIzNEMwLjc1MjYwNCAxMS40Mjk3IDAuNDgxNzcxIDEwLjc5NDMgMC4yODkwNjMgMTAuMTE3MkMwLjA5NjM1NDIgOS40MzQ5IDAgOC43MjkxNyAwIDhDMCA3LjI3MDgzIDAuMDk2MzU0MiA2LjU2NzcxIDAuMjg5MDYzIDUuODkwNjNDMC40ODE3NzEgNS4yMDgzMyAwLjc1MjYwNCA0LjU3MDMxIDEuMTAxNTYgMy45NzY1NkMxLjQ1MDUyIDMuMzgyODEgMS44NjcxOSAyLjg0Mzc1IDIuMzUxNTYgMi4zNTkzOEMyLjg0MTE1IDEuODY5NzkgMy4zODI4MSAxLjQ1MDUyIDMuOTc2NTYgMS4xMDE1NkM0LjU3MDMxIDAuNzUyNjA0IDUuMjA1NzMgMC40ODE3NzEgNS44ODI4MSAwLjI4OTA2M0M2LjU2NTEgMC4wOTYzNTQyIDcuMjcwODMgMCA4IDBaTTEwLjYzMjggNS42ODc1QzEwLjQyNDUgNS42ODc1IDEwLjI0NzQgNS43NjA0MiAxMC4xMDE2IDUuOTA2MjVMNy4yNzM0NCA4Ljc1TDYuMjY1NjMgNy43NUM2LjExOTc5IDcuNjA0MTcgNS45NDUzMSA3LjUzMTI1IDUuNzQyMTkgNy41MzEyNUM1LjY0MzIzIDcuNTMxMjUgNS41NDk0OCA3LjU1MjA4IDUuNDYwOTQgNy41OTM3NUM1LjM3MjQgNy42MzU0MiA1LjI5MTY3IDcuNjkyNzEgNS4yMTg3NSA3Ljc2NTYzQzUuMTUxMDQgNy44MzMzMyA1LjA5NjM1IDcuOTExNDYgNS4wNTQ2OSA4QzUuMDEzMDIgOC4wODg1NCA0Ljk5MjE5IDguMTgyMjkgNC45OTIxOSA4LjI4MTI1QzQuOTkyMTkgOC40ODk1OCA1LjA2NTEgOC42NjY2NyA1LjIxMDk0IDguODEyNUw2Ljc0MjE5IDEwLjM0MzhDNi44ODgwMiAxMC40ODk2IDcuMDY1MSAxMC41NjI1IDcuMjczNDQgMTAuNTYyNUM3LjQ4MTc3IDEwLjU2MjUgNy42NTg4NSAxMC40ODk2IDcuODA0NjkgMTAuMzQzOEwxMS4xNjQxIDYuOTY4NzVDMTEuMzA5OSA2LjgyMjkyIDExLjM4MjggNi42NDU4MyAxMS4zODI4IDYuNDM3NUMxMS4zODI4IDYuMzM4NTQgMTEuMzYyIDYuMjQ0NzkgMTEuMzIwMyA2LjE1NjI1QzExLjI3ODYgNi4wNjc3MSAxMS4yMjE0IDUuOTg5NTggMTEuMTQ4NCA1LjkyMTg4QzExLjA4MDcgNS44NDg5NiAxMS4wMDI2IDUuNzkxNjcgMTAuOTE0MSA1Ljc1QzEwLjgyNTUgNS43MDgzMyAxMC43MzE4IDUuNjg3NSAxMC42MzI4IDUuNjg3NVpcIixmaWxsOlwiIzIwNzczNVwifSl9KSksdC5CdXN5U1ZHPSgpPT4oMCxyLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTdcIix2aWV3Qm94OlwiMCAwIDE2IDE3XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LHtjaGlsZHJlbjooMCxyLmpzeCkoXCJwYXRoXCIse2Q6XCJNOCAwLjc5MDIzN0M4LjczNDM4IDAuNzkwMjM3IDkuNDQwMSAwLjg4NjU5MiAxMC4xMTcyIDEuMDc5M0MxMC43OTQzIDEuMjcyMDEgMTEuNDI5NyAxLjU0Mjg0IDEyLjAyMzQgMS44OTE4QzEyLjYxNzIgMi4yNDA3NiAxMy4xNTYzIDIuNjYwMDMgMTMuNjQwNiAzLjE0OTYxQzE0LjEzMDIgMy42MzM5OSAxNC41NDk1IDQuMTczMDUgMTQuODk4NCA0Ljc2NjhDMTUuMjQ3NCA1LjM2MDU1IDE1LjUxODIgNS45OTU5NyAxNS43MTA5IDYuNjczMDVDMTUuOTAzNiA3LjM1MDEzIDE2IDguMDU1ODYgMTYgOC43OTAyNEMxNiA5LjUxOTQgMTUuOTAzNiAxMC4yMjUxIDE1LjcxMDkgMTAuOTA3NEMxNS41MTgyIDExLjU4NDUgMTUuMjQ3NCAxMi4yMTk5IDE0Ljg5ODQgMTIuODEzN0MxNC41NDk1IDEzLjQwNzQgMTQuMTMwMiAxMy45NDkxIDEzLjY0MDYgMTQuNDM4N0MxMy4xNTYzIDE0LjkyMzEgMTIuNjE3MiAxNS4zMzk3IDEyLjAyMzQgMTUuNjg4N0MxMS40Mjk3IDE2LjAzNzYgMTAuNzkxNyAxNi4zMDg1IDEwLjEwOTQgMTYuNTAxMkM5LjQzMjI5IDE2LjY5MzkgOC43MjkxNyAxNi43OTAyIDggMTYuNzkwMkM3LjI3MDgzIDE2Ljc5MDIgNi41NjUxIDE2LjY5MzkgNS44ODI4MSAxNi41MDEyQzUuMjA1NzMgMTYuMzA4NSA0LjU3MDMxIDE2LjAzNzYgMy45NzY1NiAxNS42ODg3QzMuMzgyODEgMTUuMzM5NyAyLjg0MTE1IDE0LjkyMzEgMi4zNTE1NiAxNC40Mzg3QzEuODY3MTkgMTMuOTQ5MSAxLjQ1MDUyIDEzLjQwNzQgMS4xMDE1NiAxMi44MTM3QzAuNzUyNjA0IDEyLjIxOTkgMC40ODE3NzEgMTEuNTg0NSAwLjI4OTA2MyAxMC45MDc0QzAuMDk2MzU0MiAxMC4yMjUxIDAgOS41MTk0IDAgOC43OTAyNEMwIDguMDYxMDcgMC4wOTYzNTQyIDcuMzU3OTUgMC4yODkwNjMgNi42ODA4NkMwLjQ4MTc3MSA1Ljk5ODU3IDAuNzUyNjA0IDUuMzYwNTUgMS4xMDE1NiA0Ljc2NjhDMS40NTA1MiA0LjE3MzA1IDEuODY3MTkgMy42MzM5OSAyLjM1MTU2IDMuMTQ5NjFDMi44NDExNSAyLjY2MDAzIDMuMzgyODEgMi4yNDA3NiAzLjk3NjU2IDEuODkxOEM0LjU3MDMxIDEuNTQyODQgNS4yMDU3MyAxLjI3MjAxIDUuODgyODEgMS4wNzkzQzYuNTY1MSAwLjg4NjU5MiA3LjI3MDgzIDAuNzkwMjM3IDggMC43OTAyMzdaTTcuMzIwMzEgNC4wNDgwNUM3LjIxMDk0IDQuMDQ4MDUgNy4xMDY3NyA0LjA3MTQ5IDcuMDA3ODEgNC4xMTgzNkM2LjkxNDA2IDQuMTYwMDMgNi44MjgxMyA0LjIxOTkyIDYuNzUgNC4yOTgwNUM2LjY3NzA4IDQuMzcwOTcgNi42MTcxOSA0LjQ1NjkgNi41NzAzMSA0LjU1NTg2QzYuNTI4NjUgNC42NDk2MSA2LjUwNzgxIDQuNzUxMTcgNi41MDc4MSA0Ljg2MDU1VjkuMTk2NDlDNi41MDc4MSA5LjMwNTg2IDYuNTI4NjUgOS40MTI2MyA2LjU3MDMxIDkuNTE2OEM2LjYxMTk4IDkuNjIwOTcgNi42NzE4OCA5LjcxMjExIDYuNzUgOS43OTAyNEw5LjE4NzUgMTIuMjEyMUM5LjM0ODk2IDEyLjM3MzYgOS41NDE2NyAxMi40NTQzIDkuNzY1NjMgMTIuNDU0M0M5Ljg3NSAxMi40NTQzIDkuOTc5MTcgMTIuNDMzNSAxMC4wNzgxIDEyLjM5MThDMTAuMTc3MSAxMi4zNDQ5IDEwLjI2MyAxMi4yODUgMTAuMzM1OSAxMi4yMTIxQzEwLjQwODkgMTIuMTM0IDEwLjQ2NjEgMTIuMDQ1NCAxMC41MDc4IDExLjk0NjVDMTAuNTU0NyAxMS44NDc1IDEwLjU3ODEgMTEuNzQzNCAxMC41NzgxIDExLjYzNEMxMC41NzgxIDExLjUyOTggMTAuNTU0NyAxMS40MjgzIDEwLjUwNzggMTEuMzI5M0MxMC40NjYxIDExLjIyNTEgMTAuNDA4OSAxMS4xMzY2IDEwLjMzNTkgMTEuMDYzN0w4LjEzMjgxIDguODc2MThWNC44NjA1NUM4LjEzMjgxIDQuNzUxMTcgOC4xMDkzOCA0LjY0NzAxIDguMDYyNSA0LjU0ODA1QzguMDIwODMgNC40NDkwOSA3Ljk2MzU0IDQuMzYzMTUgNy44OTA2MyA0LjI5MDI0QzcuODE3NzEgNC4yMTczMiA3LjczMTc3IDQuMTYwMDMgNy42MzI4MSA0LjExODM2QzcuNTMzODUgNC4wNzE0OSA3LjQyOTY5IDQuMDQ4MDUgNy4zMjAzMSA0LjA0ODA1WlwiLGZpbGw6XCIjRkU5RjREXCJ9KX0pKSx0LkRvTm90RGlzdHVyYlNWRz0oKT0+KDAsci5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNlwiLGhlaWdodDpcIjE3XCIsdmlld0JveDpcIjAgMCAxNiAxN1wiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSx7Y2hpbGRyZW46KDAsci5qc3gpKFwicGF0aFwiLHtkOlwiTTggMC41OTAyNTZDOC43MzQzOCAwLjU5MDI1NiA5LjQ0MDEgMC42ODY2MSAxMC4xMTcyIDAuODc5MzE4QzEwLjc5NDMgMS4wNzIwMyAxMS40Mjk3IDEuMzQyODYgMTIuMDIzNCAxLjY5MTgyQzEyLjYxNzIgMi4wNDA3OCAxMy4xNTYyIDIuNDYwMDUgMTMuNjQwNiAyLjk0OTYzQzE0LjEzMDIgMy40MzQwMSAxNC41NDk1IDMuOTczMDcgMTQuODk4NCA0LjU2NjgyQzE1LjI0NzQgNS4xNjA1NyAxNS41MTgyIDUuNzk1OTggMTUuNzEwOSA2LjQ3MzA3QzE1LjkwMzYgNy4xNTAxNSAxNiA3Ljg1NTg4IDE2IDguNTkwMjZDMTYgOS4zMTk0MiAxNS45MDM2IDEwLjAyNTIgMTUuNzEwOSAxMC43MDc0QzE1LjUxODIgMTEuMzg0NSAxNS4yNDc0IDEyLjAxOTkgMTQuODk4NCAxMi42MTM3QzE0LjU0OTUgMTMuMjA3NCAxNC4xMzAyIDEzLjc0OTEgMTMuNjQwNiAxNC4yMzg3QzEzLjE1NjIgMTQuNzIzMSAxMi42MTcyIDE1LjEzOTcgMTIuMDIzNCAxNS40ODg3QzExLjQyOTcgMTUuODM3NyAxMC43OTE3IDE2LjEwODUgMTAuMTA5NCAxNi4zMDEyQzkuNDMyMjkgMTYuNDkzOSA4LjcyOTE3IDE2LjU5MDMgOCAxNi41OTAzQzcuMjcwODMgMTYuNTkwMyA2LjU2NTEgMTYuNDkzOSA1Ljg4MjgxIDE2LjMwMTJDNS4yMDU3MyAxNi4xMDg1IDQuNTcwMzEgMTUuODM3NyAzLjk3NjU2IDE1LjQ4ODdDMy4zODI4MSAxNS4xMzk3IDIuODQxMTUgMTQuNzIzMSAyLjM1MTU2IDE0LjIzODdDMS44NjcxOSAxMy43NDkxIDEuNDUwNTIgMTMuMjA3NCAxLjEwMTU2IDEyLjYxMzdDMC43NTI2MDQgMTIuMDE5OSAwLjQ4MTc3MSAxMS4zODQ1IDAuMjg5MDYyIDEwLjcwNzRDMC4wOTYzNTQyIDEwLjAyNTIgMCA5LjMxOTQyIDAgOC41OTAyNkMwIDcuODYxMDkgMC4wOTYzNTQyIDcuMTU3OTYgMC4yODkwNjIgNi40ODA4OEMwLjQ4MTc3MSA1Ljc5ODU5IDAuNzUyNjA0IDUuMTYwNTcgMS4xMDE1NiA0LjU2NjgyQzEuNDUwNTIgMy45NzMwNyAxLjg2NzE5IDMuNDM0MDEgMi4zNTE1NiAyLjk0OTYzQzIuODQxMTUgMi40NjAwNSAzLjM4MjgxIDIuMDQwNzggMy45NzY1NiAxLjY5MTgyQzQuNTcwMzEgMS4zNDI4NiA1LjIwNTczIDEuMDcyMDMgNS44ODI4MSAwLjg3OTMxOEM2LjU2NTEgMC42ODY2MSA3LjI3MDgzIDAuNTkwMjU2IDggMC41OTAyNTZaTTUuNDc2NTYgNy43NDY1MUM1LjM2NzE5IDcuNzQ2NTEgNS4yNjA0MiA3Ljc2OTk0IDUuMTU2MjUgNy44MTY4MkM1LjA1NzI5IDcuODYzNjkgNC45Njg3NSA3LjkyNjE5IDQuODkwNjIgOC4wMDQzMkM0LjgxMjUgOC4wODI0NCA0Ljc1IDguMTczNTkgNC43MDMxMiA4LjI3Nzc2QzQuNjU2MjUgOC4zNzY3MSA0LjYzMjgxIDguNDgwODggNC42MzI4MSA4LjU5MDI2QzQuNjMyODEgOC42OTk2MyA0LjY1NjI1IDguODA2NCA0LjcwMzEyIDguOTEwNTdDNC43NSA5LjAwOTUzIDQuODEyNSA5LjA5ODA3IDQuODkwNjIgOS4xNzYxOUM0Ljk2ODc1IDkuMjU0MzIgNS4wNTcyOSA5LjMxNjgyIDUuMTU2MjUgOS4zNjM2OUM1LjI2MDQyIDkuNDEwNTcgNS4zNjcxOSA5LjQzNDAxIDUuNDc2NTYgOS40MzQwMUgxMC41MjM0QzEwLjYzMjggOS40MzQwMSAxMC43MzcgOS40MTA1NyAxMC44MzU5IDkuMzYzNjlDMTAuOTQwMSA5LjMxNjgyIDExLjAzMTIgOS4yNTQzMiAxMS4xMDk0IDkuMTc2MTlDMTEuMTg3NSA5LjA5ODA3IDExLjI1IDkuMDA5NTMgMTEuMjk2OSA4LjkxMDU3QzExLjM0MzggOC44MDY0IDExLjM2NzIgOC42OTk2MyAxMS4zNjcyIDguNTkwMjZDMTEuMzY3MiA4LjQ4MDg4IDExLjM0MzggOC4zNzY3MSAxMS4yOTY5IDguMjc3NzZDMTEuMjUgOC4xNzM1OSAxMS4xODc1IDguMDgyNDQgMTEuMTA5NCA4LjAwNDMyQzExLjAzMTIgNy45MjYxOSAxMC45NDAxIDcuODYzNjkgMTAuODM1OSA3LjgxNjgyQzEwLjczNyA3Ljc2OTk0IDEwLjYzMjggNy43NDY1MSAxMC41MjM0IDcuNzQ2NTFINS40NzY1NlpcIixmaWxsOlwiI0MyMTMxM1wifSl9KSksdC5PZmZsaW5lU1ZHPSgpPT4oMCxyLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTdcIix2aWV3Qm94OlwiMCAwIDE2IDE3XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LHtjaGlsZHJlbjooMCxyLmpzeCkoXCJwYXRoXCIse2Q6XCJNOCAwLjk5MDI1MkM4LjczNDM4IDAuOTkwMjUyIDkuNDQwMSAxLjA4NjYxIDEwLjExNzIgMS4yNzkzMUMxMC43OTQzIDEuNDcyMDIgMTEuNDI5NyAxLjc0Mjg2IDEyLjAyMzQgMi4wOTE4MUMxMi42MTcyIDIuNDQwNzcgMTMuMTU2MiAyLjg2MDA0IDEzLjY0MDYgMy4zNDk2M0MxNC4xMzAyIDMuODM0IDE0LjU0OTUgNC4zNzMwNiAxNC44OTg0IDQuOTY2ODFDMTUuMjQ3NCA1LjU2MDU2IDE1LjUxODIgNi4xOTU5OCAxNS43MTA5IDYuODczMDZDMTUuOTAzNiA3LjU1MDE1IDE2IDguMjU1ODggMTYgOC45OTAyNUMxNiA5LjcxOTQyIDE1LjkwMzYgMTAuNDI1MSAxNS43MTA5IDExLjEwNzRDMTUuNTE4MiAxMS43ODQ1IDE1LjI0NzQgMTIuNDE5OSAxNC44OTg0IDEzLjAxMzdDMTQuNTQ5NSAxMy42MDc0IDE0LjEzMDIgMTQuMTQ5MSAxMy42NDA2IDE0LjYzODdDMTMuMTU2MiAxNS4xMjMxIDEyLjYxNzIgMTUuNTM5NyAxMi4wMjM0IDE1Ljg4ODdDMTEuNDI5NyAxNi4yMzc2IDEwLjc5MTcgMTYuNTA4NSAxMC4xMDk0IDE2LjcwMTJDOS40MzIyOSAxNi44OTM5IDguNzI5MTcgMTYuOTkwMyA4IDE2Ljk5MDNDNy4yNzA4MyAxNi45OTAzIDYuNTY1MSAxNi44OTM5IDUuODgyODEgMTYuNzAxMkM1LjIwNTczIDE2LjUwODUgNC41NzAzMSAxNi4yMzc2IDMuOTc2NTYgMTUuODg4N0MzLjM4MjgxIDE1LjUzOTcgMi44NDExNSAxNS4xMjMxIDIuMzUxNTYgMTQuNjM4N0MxLjg2NzE5IDE0LjE0OTEgMS40NTA1MiAxMy42MDc0IDEuMTAxNTYgMTMuMDEzN0MwLjc1MjYwNCAxMi40MTk5IDAuNDgxNzcxIDExLjc4NDUgMC4yODkwNjIgMTEuMTA3NEMwLjA5NjM1NDIgMTAuNDI1MSAwIDkuNzE5NDIgMCA4Ljk5MDI1QzAgOC4yNjEwOSAwLjA5NjM1NDIgNy41NTc5NiAwLjI4OTA2MiA2Ljg4MDg4QzAuNDgxNzcxIDYuMTk4NTkgMC43NTI2MDQgNS41NjA1NiAxLjEwMTU2IDQuOTY2ODFDMS40NTA1MiA0LjM3MzA2IDEuODY3MTkgMy44MzQgMi4zNTE1NiAzLjM0OTYzQzIuODQxMTUgMi44NjAwNCAzLjM4MjgxIDIuNDQwNzcgMy45NzY1NiAyLjA5MTgxQzQuNTcwMzEgMS43NDI4NiA1LjIwNTczIDEuNDcyMDIgNS44ODI4MSAxLjI3OTMxQzYuNTY1MSAxLjA4NjYxIDcuMjcwODMgMC45OTAyNTIgOCAwLjk5MDI1MlpNOCAyLjY3Nzc1QzcuNDIxODggMi42Nzc3NSA2Ljg2NDU4IDIuNzUzMjcgNi4zMjgxMiAyLjkwNDMxQzUuNzkxNjcgMy4wNTUzNiA1LjI4OTA2IDMuMjY4OSA0LjgyMDMxIDMuNTQ0OTRDNC4zNTE1NiAzLjgyMDk4IDMuOTI0NDggNC4xNTE3MSAzLjUzOTA2IDQuNTM3MTNDMy4xNTg4NSA0LjkxNzM0IDIuODMwNzMgNS4zNDE4MSAyLjU1NDY5IDUuODEwNTZDMi4yNzg2NSA2LjI3OTMxIDIuMDY1MSA2Ljc4MTkyIDEuOTE0MDYgNy4zMTgzOEMxLjc2MzAyIDcuODU0ODQgMS42ODc1IDguNDEyMTMgMS42ODc1IDguOTkwMjVDMS42ODc1IDkuNTY4MzggMS43NjMwMiAxMC4xMjU3IDEuOTE0MDYgMTAuNjYyMUMyLjA2NTEgMTEuMTk4NiAyLjI3ODY1IDExLjcwMTIgMi41NTQ2OSAxMi4xNjk5QzIuODMwNzMgMTIuNjM4NyAzLjE1ODg1IDEzLjA2NTggMy41MzkwNiAxMy40NTEyQzMuOTI0NDggMTMuODMxNCA0LjM1MTU2IDE0LjE1OTUgNC44MjAzMSAxNC40MzU2QzUuMjg5MDYgMTQuNzExNiA1Ljc5MTY3IDE0LjkyNTEgNi4zMjgxMiAxNS4wNzYyQzYuODY0NTggMTUuMjI3MiA3LjQyMTg4IDE1LjMwMjggOCAxNS4zMDI4QzguNTc4MTIgMTUuMzAyOCA5LjEzNTQyIDE1LjIyNzIgOS42NzE4OCAxNS4wNzYyQzEwLjIwODMgMTQuOTI1MSAxMC43MTA5IDE0LjcxMTYgMTEuMTc5NyAxNC40MzU2QzExLjY0ODQgMTQuMTU5NSAxMi4wNzI5IDEzLjgzMTQgMTIuNDUzMSAxMy40NTEyQzEyLjgzODUgMTMuMDY1OCAxMy4xNjkzIDEyLjYzODcgMTMuNDQ1MyAxMi4xNjk5QzEzLjcyMTQgMTEuNzAxMiAxMy45MzQ5IDExLjE5ODYgMTQuMDg1OSAxMC42NjIxQzE0LjIzNyAxMC4xMjU3IDE0LjMxMjUgOS41NjgzOCAxNC4zMTI1IDguOTkwMjVDMTQuMzEyNSA4LjQxMjEzIDE0LjIzNyA3Ljg1NDg0IDE0LjA4NTkgNy4zMTgzOEMxMy45MzQ5IDYuNzgxOTIgMTMuNzIxNCA2LjI3OTMxIDEzLjQ0NTMgNS44MTA1NkMxMy4xNjkzIDUuMzQxODEgMTIuODM4NSA0LjkxNzM0IDEyLjQ1MzEgNC41MzcxM0MxMi4wNzI5IDQuMTUxNzEgMTEuNjQ4NCAzLjgyMDk4IDExLjE3OTcgMy41NDQ5NEMxMC43MTA5IDMuMjY4OSAxMC4yMDgzIDMuMDU1MzYgOS42NzE4OCAyLjkwNDMxQzkuMTM1NDIgMi43NTMyNyA4LjU3ODEyIDIuNjc3NzUgOCAyLjY3Nzc1WlwiLGZpbGw6XCIjOTc5Nzk3XCJ9KX0pKX0sMzQyOTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnR9KX06ZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dH0pLGk9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiIT09biYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnIodCxlLG4pO3JldHVybiBvKHQsZSksdH0sYT10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxsPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ29udGFjdENhcmQ9dm9pZCAwO2NvbnN0IHM9big1ODkzKSxjPWkobig2Njg5KSksdT1sKG4oNzUxOCkpLGY9big1Mzc3KSxkPW4oNzQ0NCkscD1uKDk3NTgpLGg9big4ODMyKTt0LkNvbnRhY3RDYXJkPWU9Pnt2YXJ7bmFtZTp0LHRpdGxlOm4scGhvdG9Vcmw6cix1c2VJbml0aWFsczpvPSExLGRldGFpbHM6aSxvbmxpbmVTdGF0dXM6bH09ZSx1PWEoZSxbXCJuYW1lXCIsXCJ0aXRsZVwiLFwicGhvdG9VcmxcIixcInVzZUluaXRpYWxzXCIsXCJkZXRhaWxzXCIsXCJvbmxpbmVTdGF0dXNcIl0pO2NvbnN0IGY9cnx8byxFPSgwLGMudXNlTWVtbykoKCgpPT4oMCxkLmdldEluaXRpYWxzKSh0KSksW3RdKSxTPSgwLGMudXNlTWVtbykoKCgpPT4oMCxoLmdlbmVyYXRlQ29sb3JGcm9tU3RyaW5nKSh0KSksW3RdKSxqPSgwLGMuY3JlYXRlUmVmKSgpO3JldHVybigwLGMudXNlRWZmZWN0KSgoKCk9Pnt2YXIgZTtudWxsPT09KGU9ai5jdXJyZW50KXx8dm9pZCAwPT09ZXx8ZS5zY3JvbGxUbygwLDApfSkpLCgwLHMuanN4cykoZyxPYmplY3QuYXNzaWduKHt9LHUse2NoaWxkcmVuOlsoMCxzLmpzeHMpKHYse2NoaWxkcmVuOltmJiYoMCxzLmpzeHMpKG0sT2JqZWN0LmFzc2lnbih7aWNvbkNvbG9yOlN9LHtjaGlsZHJlbjpbcj8oMCxzLmpzeCkoeSx7YWx0Om4sc3JjOnJ9KTooMCxzLmpzeCkoQyx7Y2hpbGRyZW46RX0pLCgwLHMuanN4KShwLkNvbnRhY3RTdGF0dXNJY29uLHtvbmxpbmVTdGF0dXM6bH0pXX0pKSwoMCxzLmpzeHMpKHcse2NoaWxkcmVuOlsoMCxzLmpzeHMpKGIse2NoaWxkcmVuOltcIiBcIix0LFwiIFwiXX0pLG4mJigwLHMuanN4cykoeCx7Y2hpbGRyZW46W1wiIFwiLG4sXCIgXCJdfSldfSldfSksKDAscy5qc3gpKE8se30pLCgwLHMuanN4KShfLE9iamVjdC5hc3NpZ24oe3JlZjpqfSx7Y2hpbGRyZW46KG51bGw9PWk/dm9pZCAwOmkubGVuZ3RoKT4wP2kubWFwKCgoZSxuKT0+KDAscy5qc3hzKShjLmRlZmF1bHQuRnJhZ21lbnQse2NoaWxkcmVuOlsoMCxzLmpzeCkoTCx7ZGVmaW5pdGlvbnM6ZX0pLG48aS5sZW5ndGgtMSYmKDAscy5qc3gpKE8se3BhZGRpbmc6ITB9KV19LGAke3R9LWRldGFpbHMtJHtufWApKSk6KDAscy5qc3gpKFwicFwiLHtjaGlsZHJlbjpcIk5vIGluZm9ybWF0aW9uIGF2YWlsYWJsZS5cIn0pfSkpXX0pKX07Y29uc3QgZz11LmRlZmF1bHQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBoZWlnaHQ6IDEwMCU7XG5gLHY9dS5kZWZhdWx0LmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgcGFkZGluZy1ib3R0b206ICR7KHt0aGVtZTplfSk9PmUucHgubGFyZ2V9O1xuYCxtPXUuZGVmYXVsdC5kaXZgXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6ICR7ZT0+ZS5pY29uQ29sb3J9O1xuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnhzbWFsbH07XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXG4gIGhlaWdodDogNjBweDtcbiAgd2lkdGg6IDYwcHg7XG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuYCxDPXUuZGVmYXVsdC5zcGFuYFxuICBmb250LXNpemU6IDI0cHg7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG5gLHk9dS5kZWZhdWx0LmltZ2BcbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5weC54c21hbGx9O1xuICBvYmplY3QtZml0OiBjb3ZlcjtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDEwMCU7XG5gLHc9dS5kZWZhdWx0LmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICBtaW4td2lkdGg6IDA7XG4gIG1hcmdpbi1sZWZ0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuYCxiPXUuZGVmYXVsdC5zcGFuYFxuICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUubGFyZ2V9O1xuICBsaW5lLWhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5weC5sYXJnZX07XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBhZGRpbmctYm90dG9tOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnhzbWFsbH07XG4gIGZvbnQtd2VpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRXZWlnaHQuYm9sZH07XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuYCx4PXUuZGVmYXVsdC5zcGFuYFxuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHRIZWxwfTtcbiAgbGluZS1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBhZGRpbmctYm90dG9tOiAycHg7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuYCxfPXUuZGVmYXVsdC5kaXZgXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgZmxleDogMTtcbiAgbWFyZ2luLXRvcDogJHsoe3RoZW1lOmV9KT0+ZS5weC5sYXJnZX07XG4gIG1hcmdpbi1ib3R0b206ICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG4gIHBhZGRpbmctcmlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG4gIG92ZXJmbG93LXk6IGF1dG87XG5gLE89dS5kZWZhdWx0LmRpdmBcbiAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNn07XG4gIG1hcmdpbi1ib3R0b206ICR7KHt0aGVtZTplLHBhZGRpbmc6dH0pPT50JiZlLnB4LmJhc2V9O1xuYCxMPSgwLHUuZGVmYXVsdCkoZi5EZWZpbml0aW9uTGlzdClgXG4gIGR0IHtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplO1xuICB9XG5cbiAgZGQge1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgfVxuYH0sMzE4ODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oMzQyOSksdCl9LDc0NDQ6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmdldEluaXRpYWxzPXZvaWQgMCx0LmdldEluaXRpYWxzPWU9Pntjb25zdCB0PWUudHJpbSgpLG49dC5sYXN0SW5kZXhPZihcIiBcIik7cmV0dXJuIG4+LTE/W3QuY2hhckF0KDApLHQuY2hhckF0KG4rMSldLmpvaW4oXCJcIik6dC5zbGljZSgwLDIpfX0sMTk5NjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn0sbz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lkg2PXQuSDU9dC5IND10LkgzPXQuSDI9dC5IMT10LkhlYWRpbmc9dC5kZWZhdWx0U2l6ZT12b2lkIDA7Y29uc3QgaT1uKDU4OTMpLGE9byhuKDc1MTgpKSxsPW4oMzQ3MSkscz1uKDc3NjkpO3QuZGVmYXVsdFNpemU9e2gxOmwuU2l6ZS54eHhsYXJnZSxoMjpsLlNpemUueHhsYXJnZSxoMzpsLlNpemUueGxhcmdlLGg0OmwuU2l6ZS5sYXJnZSxoNTpsLlNpemUuYmFzZSxoNjpsLlNpemUuc21hbGx9LHQuSGVhZGluZz1lPT57dmFye2xldmVsOm49MSxjbGFzc05hbWU6b309ZSxhPXIoZSxbXCJsZXZlbFwiLFwiY2xhc3NOYW1lXCJdKTtjb25zdCBsPWBoJHtufWA7cmV0dXJuKDAsaS5qc3gpKGMsT2JqZWN0LmFzc2lnbih7Y2xhc3NOYW1lOm8sYXM6bCxzaXplOnQuZGVmYXVsdFNpemVbbF0sd2VpZ2h0OlwiYm9sZFwifSxhKSl9O2NvbnN0IGM9KDAsYS5kZWZhdWx0KShzLlRleHQpYFxuICBsaW5lLWhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5saW5lSGVpZ2h0LmhlYWRpbmd9O1xuYDt0LkgxPSgwLGEuZGVmYXVsdCkodC5IZWFkaW5nKS5hdHRycygoZT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtsZXZlbDoxfSkpKWBgLHQuSDI9KDAsYS5kZWZhdWx0KSh0LkhlYWRpbmcpLmF0dHJzKChlPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse2xldmVsOjJ9KSkpYGAsdC5IMz0oMCxhLmRlZmF1bHQpKHQuSGVhZGluZykuYXR0cnMoKGU9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7bGV2ZWw6M30pKSlgYCx0Lkg0PSgwLGEuZGVmYXVsdCkodC5IZWFkaW5nKS5hdHRycygoZT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtsZXZlbDo0fSkpKWBgLHQuSDU9KDAsYS5kZWZhdWx0KSh0LkhlYWRpbmcpLmF0dHJzKChlPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse2xldmVsOjV9KSkpYGAsdC5INj0oMCxhLmRlZmF1bHQpKHQuSGVhZGluZykuYXR0cnMoKGU9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7bGV2ZWw6Nn0pKSlgYH0sNzA2MzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oMTk5NiksdCl9LDc3Njk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDU0MzEpLHQpfSw1NDMxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlRleHQ9dm9pZCAwO2NvbnN0IG89cihuKDc1MTgpKTt0LlRleHQ9by5kZWZhdWx0LnNwYW5gXG4gIGNvbG9yOiAkeyh7dGhlbWU6ZSxjb2xvcjp0PVwidGV4dERlZmF1bHRcIn0pPT5lLnBhbGV0dGVbdF19O1xuICBmb250LXNpemU6ICR7KHt0aGVtZTplLHNpemU6dD1cImJhc2VcIn0pPT5lLmZvbnRTaXplW3RdfTtcbiAgZm9udC13ZWlnaHQ6ICR7KHt0aGVtZTplLHdlaWdodDp0PVwibm9ybWFsXCJ9KT0+ZS5mb250V2VpZ2h0W3RdfTtcbiAgbGluZS1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUubGluZUhlaWdodC50ZXh0fTtcbmAsdC5UZXh0LmRpc3BsYXlOYW1lPVwiVGV4dFwifSwzMTkwOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUNvbG9yU2NoZW1lPXQuQ29sb3JTY2hlbWU9dm9pZCAwO2NvbnN0IHI9big2Njg5KTt0LkNvbG9yU2NoZW1lPXtkYXJrOlwiZGFya1wiLGxpZ2h0OlwibGlnaHRcIixzeXN0ZW06XCJzeXN0ZW1cIn0sdC51c2VDb2xvclNjaGVtZT0oe2NvbG9yU2NoZW1lOmUsZmFsbGJhY2tTY2hlbWU6bj10LkNvbG9yU2NoZW1lLmxpZ2h0fSk9Pntjb25zdFtpLGFdPSgwLHIudXNlU3RhdGUpKGUmJmUhPT10LkNvbG9yU2NoZW1lLnN5c3RlbT9lOm4pLGw9dD0+e2Eobyh0LGV8fG4pKX07cmV0dXJuKDAsci51c2VFZmZlY3QpKCgoKT0+e2NvbnN0IHQ9d2luZG93Lm1hdGNoTWVkaWEoXCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspXCIpO3JldHVybiBhKG8odCxlfHxuKSksdC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsbCksKCk9PnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLGwpfSksW2UsaV0pLGl9O2NvbnN0IG89KGUsbik9Pm49PT10LkNvbG9yU2NoZW1lLnN5c3RlbT9lLm1hdGNoZXM/dC5Db2xvclNjaGVtZS5kYXJrOnQuQ29sb3JTY2hlbWUubGlnaHQ6bn0sMzQ3OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZURyb3Bkb3duS2V5Ym9hcmROYXZpZ2F0aW9uPXZvaWQgMDtjb25zdCByPW4oNjY4OSk7dC51c2VEcm9wZG93bktleWJvYXJkTmF2aWdhdGlvbj0oZSx0LG4sbyxpKT0+e2NvbnN0W2EsbF09KDAsci51c2VTdGF0ZSkoMCksW3MsY109KDAsci51c2VTdGF0ZSkoXCJcIik7bGV0IHU7aWYoKDAsci51c2VFZmZlY3QpKCgoKT0+e2lmKHQmJiFuKXtjb25zdCBuPWUuZmxhdCgpLmZpbmRJbmRleCgoZT0+ZS52YWx1ZT09PXQudmFsdWUpKTtuPj0wJiZsKG4pfX0pLFtlLHQsbl0pLCgwLHIudXNlRWZmZWN0KSgoKCk9PntufHxjKFwiXCIpfSksW25dKSwoMCxyLnVzZUVmZmVjdCkoKCgpPT57aWYocyl7Y29uc3QgdD1lLmZsYXQoKS5maW5kSW5kZXgoKGU9PmUudGl0bGUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHMudG9Mb3dlckNhc2UoKSkpKTt0Pj0wJiZsKHQpfX0pLFtlLHNdKSxlWzBdLmxlbmd0aD4wJiZlLmZsYXQoKS5sZW5ndGg+YSl7Y29uc3RbdCxuXT1bTWF0aC5mbG9vcihhL2VbMF0ubGVuZ3RoKSxhJWVbMF0ubGVuZ3RoXTt1PWVbdF1bbl19cmV0dXJuKDAsci51c2VFZmZlY3QpKCgoKT0+e2NvbnN0IGU9c2V0VGltZW91dCgoKCk9PntjKFwiXCIpfSksNTAwKTtyZXR1cm4oKT0+Y2xlYXJUaW1lb3V0KGUpfSksW3NdKSx7Zm9jdXNlZE9wdGlvbjp1LGhhbmRsZUtleURvd246dD0+e3N3aXRjaCh0LmNvZGUpe2Nhc2VcIkFycm93VXBcIjp0LnByZXZlbnREZWZhdWx0KCksYT4wJiZsKGEtMSk7YnJlYWs7Y2FzZVwiQXJyb3dEb3duXCI6dC5wcmV2ZW50RGVmYXVsdCgpLGE8ZS5mbGF0KCkubGVuZ3RoLTEmJmwoYSsxKTticmVhaztjYXNlXCJFbnRlclwiOmNhc2VcIlNwYWNlXCI6dC5wcmV2ZW50RGVmYXVsdCgpLG4/KChudWxsPT11P3ZvaWQgMDp1Lm92ZXJyaWRlT25DbGljayk/dS5vdmVycmlkZU9uQ2xpY2soKTppKG51bGwhPXU/dTplWzBdWzBdKSxvKCkpOm8oKTticmVhaztjYXNlXCJFc2NhcGVcIjp0LnByZXZlbnREZWZhdWx0KCksbyghMSk7YnJlYWs7ZGVmYXVsdDovXlthLXowLTldJC9pLnRlc3QodC5rZXkpJiZjKChlPT5lK3Qua2V5KSl9fX19fSw0NDgxOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUxheW91dE1lZGlhUXVlcnk9dC51c2VNZWRpYVF1ZXJ5PXZvaWQgMDtjb25zdCByPW4oNjY4OSksbz1lPT50PT57Y29uc3RbbixvXT0oMCxyLnVzZVN0YXRlKSghMSk7cmV0dXJuIGUoKCgpPT57Y29uc3QgZT13aW5kb3cubWF0Y2hNZWRpYSh0KTtpZihlKXtlLm1hdGNoZXMhPT1uJiZvKGUubWF0Y2hlcyk7Y29uc3QgdD0oKT0+byhlLm1hdGNoZXMpLHI9KCk9PmUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLHQpO3JldHVybiBlLmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIix0KSxyfX0pLFtuLHRdKSxufTt0LnVzZU1lZGlhUXVlcnk9byhyLnVzZUVmZmVjdCksdC51c2VMYXlvdXRNZWRpYVF1ZXJ5PW8oci51c2VMYXlvdXRFZmZlY3QpfSwyNzc2OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZVByZXZpb3VzPXZvaWQgMDtjb25zdCByPW4oNjY4OSk7dC51c2VQcmV2aW91cz1lPT57Y29uc3QgdD0oMCxyLnVzZVJlZikoKTtyZXR1cm4oMCxyLnVzZUVmZmVjdCkoKCgpPT57dC5jdXJyZW50PWV9KSxbZV0pLHQuY3VycmVudH19LDcwODg6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlVGhlbWU9dm9pZCAwO2NvbnN0IHI9big2Njg5KSxvPW4oNDI2NiksaT1uKDMxOTApLGE9big5NTA3KSxsPW4oNjQ4Nikscz17W2kuQ29sb3JTY2hlbWUuZGFya106by5PcGVuRmluRGFya1RoZW1lLFtpLkNvbG9yU2NoZW1lLmxpZ2h0XTpvLk9wZW5GaW5MaWdodFRoZW1lfTt0LnVzZVRoZW1lPSh7dGhlbWVzOmUsc2NoZW1lOnR9KT0+e2xldCBuPXt9O2NvbnN0IG89KDAsaS51c2VDb2xvclNjaGVtZSkoe2NvbG9yU2NoZW1lOnR9KTt0cnl7bj0oMCxyLnVzZU1lbW8pKCgoKT0+KChlLHQpPT57Y29uc3Qgbj1udWxsPT10P3ZvaWQgMDp0W2VdO2xldCByPU9iamVjdC5hc3NpZ24oe30sc1tlXSk7cmV0dXJuIG4mJm4ucGFsZXR0ZSYmKHI9KDAsbC5tZXJnZSkocixuLCgwLGEuY3JlYXRlVGhlbWUpKG4ucGFsZXR0ZSkpKSxyfSkobyxlKSksW2Usb10pfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoZSl9cmV0dXJuIG59fSwzNDE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDQxMzApLHQpLG8obig3NDAxKSx0KSxvKG4oMjQ1MiksdCksbyhuKDdlMyksdCksbyhuKDQ5MjUpLHQpLG8obigyNjA5KSx0KSxvKG4oMzEzNiksdCksbyhuKDk3MzQpLHQpLG8obig2MDI2KSx0KSxvKG4oOTYzNCksdCksbyhuKDE0NCksdCksbyhuKDkyMzkpLHQpLG8obig4ODc4KSx0KSxvKG4oODUxMCksdCksbyhuKDg5NTEpLHQpLG8obigxOTc4KSx0KSxvKG4oODA1MSksdCksbyhuKDQxNjkpLHQpLG8obigzNjQxKSx0KSxvKG4oNTIxNSksdCksbyhuKDE0NjcpLHQpLG8obigzMTE5KSx0KSxvKG4oMTMzNSksdCksbyhuKDUzNzcpLHQpLG8obigzODc3KSx0KSxvKG4oMzE4OCksdCksbyhuKDcwNjMpLHQpLG8obig3NzY5KSx0KSxvKG4oMzE5MCksdCksbyhuKDQ0ODEpLHQpLG8obigyNzc2KSx0KSxvKG4oMzQ3KSx0KSxvKG4oNDk5MSksdCksbyhuKDg4MzIpLHQpLG8obig3MDMwKSx0KSxvKG4oNjIxOCksdCl9LDg4MzI6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmdlbmVyYXRlQ29sb3JGcm9tU3RyaW5nPXZvaWQgMCx0LmdlbmVyYXRlQ29sb3JGcm9tU3RyaW5nPWZ1bmN0aW9uKGU9XCJcIix0PTcwLG49NTApe2xldCByPTA7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspcj1lLmNoYXJDb2RlQXQodCkrKChyPDw1KS1yKSxyJj1yO3JldHVybmBoc2woJHtyJTM2MH0sICR7dH0lLCAke259JSlgfX0sNDk5MTooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQud2hlbkZpbj12b2lkIDAsdC53aGVuRmluPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj1cInVuZGVmaW5lZFwiIT10eXBlb2YgZmluP2U6dDtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBuP24oKTpufX0sNjU1OihlLHQsbik9PntuLnIodCksbi5kKHQse19fYXNzaWduOigpPT5pLF9fYXN5bmNEZWxlZ2F0b3I6KCk9PkwsX19hc3luY0dlbmVyYXRvcjooKT0+TyxfX2FzeW5jVmFsdWVzOigpPT5FLF9fYXdhaXQ6KCk9Pl8sX19hd2FpdGVyOigpPT5oLF9fY2xhc3NQcml2YXRlRmllbGRHZXQ6KCk9PlIsX19jbGFzc1ByaXZhdGVGaWVsZEluOigpPT5JLF9fY2xhc3NQcml2YXRlRmllbGRTZXQ6KCk9PlAsX19jcmVhdGVCaW5kaW5nOigpPT52LF9fZGVjb3JhdGU6KCk9PmwsX19lc0RlY29yYXRlOigpPT5jLF9fZXhwb3J0U3RhcjooKT0+bSxfX2V4dGVuZHM6KCk9Pm8sX19nZW5lcmF0b3I6KCk9PmcsX19pbXBvcnREZWZhdWx0OigpPT5rLF9faW1wb3J0U3RhcjooKT0+TSxfX21ha2VUZW1wbGF0ZU9iamVjdDooKT0+UyxfX21ldGFkYXRhOigpPT5wLF9fcGFyYW06KCk9PnMsX19wcm9wS2V5OigpPT5mLF9fcmVhZDooKT0+eSxfX3Jlc3Q6KCk9PmEsX19ydW5Jbml0aWFsaXplcnM6KCk9PnUsX19zZXRGdW5jdGlvbk5hbWU6KCk9PmQsX19zcHJlYWQ6KCk9PncsX19zcHJlYWRBcnJheTooKT0+eCxfX3NwcmVhZEFycmF5czooKT0+YixfX3ZhbHVlczooKT0+Q30pO3ZhciByPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHI9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikmJihlW25dPXRbbl0pfSxyKGUsdCl9O2Z1bmN0aW9uIG8oZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIitTdHJpbmcodCkrXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfXIoZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihuLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgbil9dmFyIGk9ZnVuY3Rpb24oKXtyZXR1cm4gaT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQsbj0xLHI9YXJndW1lbnRzLmxlbmd0aDtuPHI7bisrKWZvcih2YXIgbyBpbiB0PWFyZ3VtZW50c1tuXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxvKSYmKGVbb109dFtvXSk7cmV0dXJuIGV9LGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtmdW5jdGlvbiBhKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn1mdW5jdGlvbiBsKGUsdCxuLHIpe3ZhciBvLGk9YXJndW1lbnRzLmxlbmd0aCxhPWk8Mz90Om51bGw9PT1yP3I9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pOnI7aWYoXCJvYmplY3RcIj09dHlwZW9mIFJlZmxlY3QmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpYT1SZWZsZWN0LmRlY29yYXRlKGUsdCxuLHIpO2Vsc2UgZm9yKHZhciBsPWUubGVuZ3RoLTE7bD49MDtsLS0pKG89ZVtsXSkmJihhPShpPDM/byhhKTppPjM/byh0LG4sYSk6byh0LG4pKXx8YSk7cmV0dXJuIGk+MyYmYSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbixhKSxhfWZ1bmN0aW9uIHMoZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXt0KG4scixlKX19ZnVuY3Rpb24gYyhlLHQsbixyLG8saSl7ZnVuY3Rpb24gYShlKXtpZih2b2lkIDAhPT1lJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoXCJGdW5jdGlvbiBleHBlY3RlZFwiKTtyZXR1cm4gZX1mb3IodmFyIGwscz1yLmtpbmQsYz1cImdldHRlclwiPT09cz9cImdldFwiOlwic2V0dGVyXCI9PT1zP1wic2V0XCI6XCJ2YWx1ZVwiLHU9IXQmJmU/ci5zdGF0aWM/ZTplLnByb3RvdHlwZTpudWxsLGY9dHx8KHU/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih1LHIubmFtZSk6e30pLGQ9ITEscD1uLmxlbmd0aC0xO3A+PTA7cC0tKXt2YXIgaD17fTtmb3IodmFyIGcgaW4gciloW2ddPVwiYWNjZXNzXCI9PT1nP3t9OnJbZ107Zm9yKHZhciBnIGluIHIuYWNjZXNzKWguYWNjZXNzW2ddPXIuYWNjZXNzW2ddO2guYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oZSl7aWYoZCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkXCIpO2kucHVzaChhKGV8fG51bGwpKX07dmFyIHY9KDAsbltwXSkoXCJhY2Nlc3NvclwiPT09cz97Z2V0OmYuZ2V0LHNldDpmLnNldH06ZltjXSxoKTtpZihcImFjY2Vzc29yXCI9PT1zKXtpZih2b2lkIDA9PT12KWNvbnRpbnVlO2lmKG51bGw9PT12fHxcIm9iamVjdFwiIT10eXBlb2Ygdil0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkXCIpOyhsPWEodi5nZXQpKSYmKGYuZ2V0PWwpLChsPWEodi5zZXQpKSYmKGYuc2V0PWwpLChsPWEodi5pbml0KSkmJm8ucHVzaChsKX1lbHNlKGw9YSh2KSkmJihcImZpZWxkXCI9PT1zP28ucHVzaChsKTpmW2NdPWwpfXUmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LHIubmFtZSxmKSxkPSEwfWZ1bmN0aW9uIHUoZSx0LG4pe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjIsbz0wO288dC5sZW5ndGg7bysrKW49cj90W29dLmNhbGwoZSxuKTp0W29dLmNhbGwoZSk7cmV0dXJuIHI/bjp2b2lkIDB9ZnVuY3Rpb24gZihlKXtyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgZT9lOlwiXCIuY29uY2F0KGUpfWZ1bmN0aW9uIGQoZSx0LG4pe3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiB0JiYodD10LmRlc2NyaXB0aW9uP1wiW1wiLmNvbmNhdCh0LmRlc2NyaXB0aW9uLFwiXVwiKTpcIlwiKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcIm5hbWVcIix7Y29uZmlndXJhYmxlOiEwLHZhbHVlOm4/XCJcIi5jb25jYXQobixcIiBcIix0KTp0fSl9ZnVuY3Rpb24gcChlLHQpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBSZWZsZWN0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhKXJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGUsdCl9ZnVuY3Rpb24gaChlLHQsbixyKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24obyxpKXtmdW5jdGlvbiBhKGUpe3RyeXtzKHIubmV4dChlKSl9Y2F0Y2goZSl7aShlKX19ZnVuY3Rpb24gbChlKXt0cnl7cyhyLnRocm93KGUpKX1jYXRjaChlKXtpKGUpfX1mdW5jdGlvbiBzKGUpe3ZhciB0O2UuZG9uZT9vKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIG4/dDpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihhLGwpfXMoKHI9ci5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX1mdW5jdGlvbiBnKGUsdCl7dmFyIG4scixvLGksYT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZvWzBdKXRocm93IG9bMV07cmV0dXJuIG9bMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gaT17bmV4dDpsKDApLHRocm93OmwoMSkscmV0dXJuOmwoMil9LFwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmKGlbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksaTtmdW5jdGlvbiBsKGwpe3JldHVybiBmdW5jdGlvbihzKXtyZXR1cm4gZnVuY3Rpb24obCl7aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtmb3IoO2kmJihpPTAsbFswXSYmKGE9MCkpLGE7KXRyeXtpZihuPTEsciYmKG89MiZsWzBdP3IucmV0dXJuOmxbMF0/ci50aHJvd3x8KChvPXIucmV0dXJuKSYmby5jYWxsKHIpLDApOnIubmV4dCkmJiEobz1vLmNhbGwocixsWzFdKSkuZG9uZSlyZXR1cm4gbztzd2l0Y2gocj0wLG8mJihsPVsyJmxbMF0sby52YWx1ZV0pLGxbMF0pe2Nhc2UgMDpjYXNlIDE6bz1sO2JyZWFrO2Nhc2UgNDpyZXR1cm4gYS5sYWJlbCsrLHt2YWx1ZTpsWzFdLGRvbmU6ITF9O2Nhc2UgNTphLmxhYmVsKysscj1sWzFdLGw9WzBdO2NvbnRpbnVlO2Nhc2UgNzpsPWEub3BzLnBvcCgpLGEudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKG89KG89YS50cnlzKS5sZW5ndGg+MCYmb1tvLmxlbmd0aC0xXSl8fDYhPT1sWzBdJiYyIT09bFswXSkpe2E9MDtjb250aW51ZX1pZigzPT09bFswXSYmKCFvfHxsWzFdPm9bMF0mJmxbMV08b1szXSkpe2EubGFiZWw9bFsxXTticmVha31pZig2PT09bFswXSYmYS5sYWJlbDxvWzFdKXthLmxhYmVsPW9bMV0sbz1sO2JyZWFrfWlmKG8mJmEubGFiZWw8b1syXSl7YS5sYWJlbD1vWzJdLGEub3BzLnB1c2gobCk7YnJlYWt9b1syXSYmYS5vcHMucG9wKCksYS50cnlzLnBvcCgpO2NvbnRpbnVlfWw9dC5jYWxsKGUsYSl9Y2F0Y2goZSl7bD1bNixlXSxyPTB9ZmluYWxseXtuPW89MH1pZig1JmxbMF0pdGhyb3cgbFsxXTtyZXR1cm57dmFsdWU6bFswXT9sWzFdOnZvaWQgMCxkb25lOiEwfX0oW2wsc10pfX19dmFyIHY9T2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfTtmdW5jdGlvbiBtKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8dih0LGUsbil9ZnVuY3Rpb24gQyhlKXt2YXIgdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcixuPXQmJmVbdF0scj0wO2lmKG4pcmV0dXJuIG4uY2FsbChlKTtpZihlJiZcIm51bWJlclwiPT10eXBlb2YgZS5sZW5ndGgpcmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gZSYmcj49ZS5sZW5ndGgmJihlPXZvaWQgMCkse3ZhbHVlOmUmJmVbcisrXSxkb25lOiFlfX19O3Rocm93IG5ldyBUeXBlRXJyb3IodD9cIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCI6XCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpfWZ1bmN0aW9uIHkoZSx0KXt2YXIgbj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXTtpZighbilyZXR1cm4gZTt2YXIgcixvLGk9bi5jYWxsKGUpLGE9W107dHJ5e2Zvcig7KHZvaWQgMD09PXR8fHQtLSA+MCkmJiEocj1pLm5leHQoKSkuZG9uZTspYS5wdXNoKHIudmFsdWUpfWNhdGNoKGUpe289e2Vycm9yOmV9fWZpbmFsbHl7dHJ5e3ImJiFyLmRvbmUmJihuPWkucmV0dXJuKSYmbi5jYWxsKGkpfWZpbmFsbHl7aWYobyl0aHJvdyBvLmVycm9yfX1yZXR1cm4gYX1mdW5jdGlvbiB3KCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWU9ZS5jb25jYXQoeShhcmd1bWVudHNbdF0pKTtyZXR1cm4gZX1mdW5jdGlvbiBiKCl7Zm9yKHZhciBlPTAsdD0wLG49YXJndW1lbnRzLmxlbmd0aDt0PG47dCsrKWUrPWFyZ3VtZW50c1t0XS5sZW5ndGg7dmFyIHI9QXJyYXkoZSksbz0wO2Zvcih0PTA7dDxuO3QrKylmb3IodmFyIGk9YXJndW1lbnRzW3RdLGE9MCxsPWkubGVuZ3RoO2E8bDthKyssbysrKXJbb109aVthXTtyZXR1cm4gcn1mdW5jdGlvbiB4KGUsdCxuKXtpZihufHwyPT09YXJndW1lbnRzLmxlbmd0aClmb3IodmFyIHIsbz0wLGk9dC5sZW5ndGg7bzxpO28rKykhciYmbyBpbiB0fHwocnx8KHI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwwLG8pKSxyW29dPXRbb10pO3JldHVybiBlLmNvbmNhdChyfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSl9ZnVuY3Rpb24gXyhlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF8/KHRoaXMudj1lLHRoaXMpOm5ldyBfKGUpfWZ1bmN0aW9uIE8oZSx0LG4pe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO3ZhciByLG89bi5hcHBseShlLHR8fFtdKSxpPVtdO3JldHVybiByPXt9LGEoXCJuZXh0XCIpLGEoXCJ0aHJvd1wiKSxhKFwicmV0dXJuXCIpLHJbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHI7ZnVuY3Rpb24gYShlKXtvW2VdJiYocltlXT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4scil7aS5wdXNoKFtlLHQsbixyXSk+MXx8bChlLHQpfSkpfSl9ZnVuY3Rpb24gbChlLHQpe3RyeXsobj1vW2VdKHQpKS52YWx1ZSBpbnN0YW5jZW9mIF8/UHJvbWlzZS5yZXNvbHZlKG4udmFsdWUudikudGhlbihzLGMpOnUoaVswXVsyXSxuKX1jYXRjaChlKXt1KGlbMF1bM10sZSl9dmFyIG59ZnVuY3Rpb24gcyhlKXtsKFwibmV4dFwiLGUpfWZ1bmN0aW9uIGMoZSl7bChcInRocm93XCIsZSl9ZnVuY3Rpb24gdShlLHQpe2UodCksaS5zaGlmdCgpLGkubGVuZ3RoJiZsKGlbMF1bMF0saVswXVsxXSl9fWZ1bmN0aW9uIEwoZSl7dmFyIHQsbjtyZXR1cm4gdD17fSxyKFwibmV4dFwiKSxyKFwidGhyb3dcIiwoZnVuY3Rpb24oZSl7dGhyb3cgZX0pKSxyKFwicmV0dXJuXCIpLHRbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSx0O2Z1bmN0aW9uIHIocixvKXt0W3JdPWVbcl0/ZnVuY3Rpb24odCl7cmV0dXJuKG49IW4pP3t2YWx1ZTpfKGVbcl0odCkpLGRvbmU6ITF9Om8/byh0KTp0fTpvfX1mdW5jdGlvbiBFKGUpe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO3ZhciB0LG49ZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl07cmV0dXJuIG4/bi5jYWxsKGUpOihlPUMoZSksdD17fSxyKFwibmV4dFwiKSxyKFwidGhyb3dcIikscihcInJldHVyblwiKSx0W1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSx0KTtmdW5jdGlvbiByKG4pe3Rbbl09ZVtuXSYmZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLG8peyFmdW5jdGlvbihlLHQsbixyKXtQcm9taXNlLnJlc29sdmUocikudGhlbigoZnVuY3Rpb24odCl7ZSh7dmFsdWU6dCxkb25lOm59KX0pLHQpfShyLG8sKHQ9ZVtuXSh0KSkuZG9uZSx0LnZhbHVlKX0pKX19fWZ1bmN0aW9uIFMoZSx0KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5P09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwicmF3XCIse3ZhbHVlOnR9KTplLnJhdz10LGV9dmFyIGo9T2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnR9KX06ZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dH07ZnVuY3Rpb24gTShlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIiE9PW4mJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZ2KHQsZSxuKTtyZXR1cm4gaih0LGUpLHR9ZnVuY3Rpb24gayhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gUihlLHQsbixyKXtpZihcImFcIj09PW4mJiFyKXRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdD9lIT09dHx8IXI6IXQuaGFzKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7cmV0dXJuXCJtXCI9PT1uP3I6XCJhXCI9PT1uP3IuY2FsbChlKTpyP3IudmFsdWU6dC5nZXQoZSl9ZnVuY3Rpb24gUChlLHQsbixyLG8pe2lmKFwibVwiPT09cil0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO2lmKFwiYVwiPT09ciYmIW8pdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P2UhPT10fHwhbzohdC5oYXMoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO3JldHVyblwiYVwiPT09cj9vLmNhbGwoZSxuKTpvP28udmFsdWU9bjp0LnNldChlLG4pLG59ZnVuY3Rpb24gSShlLHQpe2lmKG51bGw9PT10fHxcIm9iamVjdFwiIT10eXBlb2YgdCYmXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3RcIik7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZT90PT09ZTplLmhhcyh0KX19LDYwMzY6ZT0+e2UuZXhwb3J0cz1cImh0dHBzOi8vY2RuLm9wZW5maW4uY28vdWktbGlicmFyeS9mb250cy9JbnRlci1JdGFsaWMud29mZjJcIn0sNDY2ODplPT57ZS5leHBvcnRzPVwiaHR0cHM6Ly9jZG4ub3BlbmZpbi5jby91aS1saWJyYXJ5L2ZvbnRzL0ludGVyLVJlZ3VsYXIud29mZjJcIn0sNTk0MTplPT57ZS5leHBvcnRzPVwiaHR0cHM6Ly9jZG4ub3BlbmZpbi5jby91aS1saWJyYXJ5L2ZvbnRzL0ludGVyLVNlbWlCb2xkLndvZmYyXCJ9LDI4MTM6ZT0+e2UuZXhwb3J0cz1cImh0dHBzOi8vY2RuLm9wZW5maW4uY28vdWktbGlicmFyeS9mb250cy9JbnRlci1TZW1pQm9sZEl0YWxpYy53b2ZmMlwifSw2Njg5OmU9PntlLmV4cG9ydHM9big3Mzc4KX0sNzUxODplPT57ZS5leHBvcnRzPW4oMjkyMSl9LDgyMDc6ZnVuY3Rpb24oZSl7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtyZXR1cm4oZT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT9cInN5bWJvbFwiOnR5cGVvZiBlfSkodCl9dmFyIHQ9L15cXHMrLyxuPS9cXHMrJC87ZnVuY3Rpb24gcihvLGkpe2lmKGk9aXx8e30sKG89b3x8XCJcIilpbnN0YW5jZW9mIHIpcmV0dXJuIG87aWYoISh0aGlzIGluc3RhbmNlb2YgcikpcmV0dXJuIG5ldyByKG8saSk7dmFyIGE9ZnVuY3Rpb24ocil7dmFyIG8saSxhLGw9e3I6MCxnOjAsYjowfSxzPTEsYz1udWxsLHU9bnVsbCxmPW51bGwsZD0hMSxwPSExO3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiByJiYocj1mdW5jdGlvbihlKXtlPWUucmVwbGFjZSh0LFwiXCIpLnJlcGxhY2UobixcIlwiKS50b0xvd2VyQ2FzZSgpO3ZhciByLG89ITE7aWYod1tlXSllPXdbZV0sbz0hMDtlbHNlIGlmKFwidHJhbnNwYXJlbnRcIj09ZSlyZXR1cm57cjowLGc6MCxiOjAsYTowLGZvcm1hdDpcIm5hbWVcIn07cmV0dXJuKHI9SS5yZ2IuZXhlYyhlKSk/e3I6clsxXSxnOnJbMl0sYjpyWzNdfToocj1JLnJnYmEuZXhlYyhlKSk/e3I6clsxXSxnOnJbMl0sYjpyWzNdLGE6cls0XX06KHI9SS5oc2wuZXhlYyhlKSk/e2g6clsxXSxzOnJbMl0sbDpyWzNdfToocj1JLmhzbGEuZXhlYyhlKSk/e2g6clsxXSxzOnJbMl0sbDpyWzNdLGE6cls0XX06KHI9SS5oc3YuZXhlYyhlKSk/e2g6clsxXSxzOnJbMl0sdjpyWzNdfToocj1JLmhzdmEuZXhlYyhlKSk/e2g6clsxXSxzOnJbMl0sdjpyWzNdLGE6cls0XX06KHI9SS5oZXg4LmV4ZWMoZSkpP3tyOkwoclsxXSksZzpMKHJbMl0pLGI6TChyWzNdKSxhOk0ocls0XSksZm9ybWF0Om8/XCJuYW1lXCI6XCJoZXg4XCJ9OihyPUkuaGV4Ni5leGVjKGUpKT97cjpMKHJbMV0pLGc6TChyWzJdKSxiOkwoclszXSksZm9ybWF0Om8/XCJuYW1lXCI6XCJoZXhcIn06KHI9SS5oZXg0LmV4ZWMoZSkpP3tyOkwoclsxXStcIlwiK3JbMV0pLGc6TChyWzJdK1wiXCIrclsyXSksYjpMKHJbM10rXCJcIityWzNdKSxhOk0ocls0XStcIlwiK3JbNF0pLGZvcm1hdDpvP1wibmFtZVwiOlwiaGV4OFwifTohIShyPUkuaGV4My5leGVjKGUpKSYme3I6TChyWzFdK1wiXCIrclsxXSksZzpMKHJbMl0rXCJcIityWzJdKSxiOkwoclszXStcIlwiK3JbM10pLGZvcm1hdDpvP1wibmFtZVwiOlwiaGV4XCJ9fShyKSksXCJvYmplY3RcIj09ZShyKSYmKEEoci5yKSYmQShyLmcpJiZBKHIuYik/KG89ci5yLGk9ci5nLGE9ci5iLGw9e3I6MjU1Kl8obywyNTUpLGc6MjU1Kl8oaSwyNTUpLGI6MjU1Kl8oYSwyNTUpfSxkPSEwLHA9XCIlXCI9PT1TdHJpbmcoci5yKS5zdWJzdHIoLTEpP1wicHJnYlwiOlwicmdiXCIpOkEoci5oKSYmQShyLnMpJiZBKHIudik/KGM9UyhyLnMpLHU9UyhyLnYpLGw9ZnVuY3Rpb24oZSx0LG4pe2U9NipfKGUsMzYwKSx0PV8odCwxMDApLG49XyhuLDEwMCk7dmFyIHI9TWF0aC5mbG9vcihlKSxvPWUtcixpPW4qKDEtdCksYT1uKigxLW8qdCksbD1uKigxLSgxLW8pKnQpLHM9ciU2O3JldHVybntyOjI1NSpbbixhLGksaSxsLG5dW3NdLGc6MjU1KltsLG4sbixhLGksaV1bc10sYjoyNTUqW2ksaSxsLG4sbixhXVtzXX19KHIuaCxjLHUpLGQ9ITAscD1cImhzdlwiKTpBKHIuaCkmJkEoci5zKSYmQShyLmwpJiYoYz1TKHIucyksZj1TKHIubCksbD1mdW5jdGlvbihlLHQsbil7dmFyIHIsbyxpO2Z1bmN0aW9uIGEoZSx0LG4pe3JldHVybiBuPDAmJihuKz0xKSxuPjEmJihuLT0xKSxuPDEvNj9lKzYqKHQtZSkqbjpuPC41P3Q6bjwyLzM/ZSsodC1lKSooMi8zLW4pKjY6ZX1pZihlPV8oZSwzNjApLHQ9Xyh0LDEwMCksbj1fKG4sMTAwKSwwPT09dClyPW89aT1uO2Vsc2V7dmFyIGw9bjwuNT9uKigxK3QpOm4rdC1uKnQscz0yKm4tbDtyPWEocyxsLGUrMS8zKSxvPWEocyxsLGUpLGk9YShzLGwsZS0xLzMpfXJldHVybntyOjI1NSpyLGc6MjU1Km8sYjoyNTUqaX19KHIuaCxjLGYpLGQ9ITAscD1cImhzbFwiKSxyLmhhc093blByb3BlcnR5KFwiYVwiKSYmKHM9ci5hKSkscz14KHMpLHtvazpkLGZvcm1hdDpyLmZvcm1hdHx8cCxyOk1hdGgubWluKDI1NSxNYXRoLm1heChsLnIsMCkpLGc6TWF0aC5taW4oMjU1LE1hdGgubWF4KGwuZywwKSksYjpNYXRoLm1pbigyNTUsTWF0aC5tYXgobC5iLDApKSxhOnN9fShvKTt0aGlzLl9vcmlnaW5hbElucHV0PW8sdGhpcy5fcj1hLnIsdGhpcy5fZz1hLmcsdGhpcy5fYj1hLmIsdGhpcy5fYT1hLmEsdGhpcy5fcm91bmRBPU1hdGgucm91bmQoMTAwKnRoaXMuX2EpLzEwMCx0aGlzLl9mb3JtYXQ9aS5mb3JtYXR8fGEuZm9ybWF0LHRoaXMuX2dyYWRpZW50VHlwZT1pLmdyYWRpZW50VHlwZSx0aGlzLl9yPDEmJih0aGlzLl9yPU1hdGgucm91bmQodGhpcy5fcikpLHRoaXMuX2c8MSYmKHRoaXMuX2c9TWF0aC5yb3VuZCh0aGlzLl9nKSksdGhpcy5fYjwxJiYodGhpcy5fYj1NYXRoLnJvdW5kKHRoaXMuX2IpKSx0aGlzLl9vaz1hLm9rfWZ1bmN0aW9uIG8oZSx0LG4pe2U9XyhlLDI1NSksdD1fKHQsMjU1KSxuPV8obiwyNTUpO3ZhciByLG8saT1NYXRoLm1heChlLHQsbiksYT1NYXRoLm1pbihlLHQsbiksbD0oaSthKS8yO2lmKGk9PWEpcj1vPTA7ZWxzZXt2YXIgcz1pLWE7c3dpdGNoKG89bD4uNT9zLygyLWktYSk6cy8oaSthKSxpKXtjYXNlIGU6cj0odC1uKS9zKyh0PG4/NjowKTticmVhaztjYXNlIHQ6cj0obi1lKS9zKzI7YnJlYWs7Y2FzZSBuOnI9KGUtdCkvcys0fXIvPTZ9cmV0dXJue2g6cixzOm8sbH19ZnVuY3Rpb24gaShlLHQsbil7ZT1fKGUsMjU1KSx0PV8odCwyNTUpLG49XyhuLDI1NSk7dmFyIHIsbyxpPU1hdGgubWF4KGUsdCxuKSxhPU1hdGgubWluKGUsdCxuKSxsPWkscz1pLWE7aWYobz0wPT09aT8wOnMvaSxpPT1hKXI9MDtlbHNle3N3aXRjaChpKXtjYXNlIGU6cj0odC1uKS9zKyh0PG4/NjowKTticmVhaztjYXNlIHQ6cj0obi1lKS9zKzI7YnJlYWs7Y2FzZSBuOnI9KGUtdCkvcys0fXIvPTZ9cmV0dXJue2g6cixzOm8sdjpsfX1mdW5jdGlvbiBhKGUsdCxuLHIpe3ZhciBvPVtFKE1hdGgucm91bmQoZSkudG9TdHJpbmcoMTYpKSxFKE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpKSxFKE1hdGgucm91bmQobikudG9TdHJpbmcoMTYpKV07cmV0dXJuIHImJm9bMF0uY2hhckF0KDApPT1vWzBdLmNoYXJBdCgxKSYmb1sxXS5jaGFyQXQoMCk9PW9bMV0uY2hhckF0KDEpJiZvWzJdLmNoYXJBdCgwKT09b1syXS5jaGFyQXQoMSk/b1swXS5jaGFyQXQoMCkrb1sxXS5jaGFyQXQoMCkrb1syXS5jaGFyQXQoMCk6by5qb2luKFwiXCIpfWZ1bmN0aW9uIGwoZSx0LG4scil7cmV0dXJuW0UoaihyKSksRShNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDE2KSksRShNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDE2KSksRShNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDE2KSldLmpvaW4oXCJcIil9ZnVuY3Rpb24gcyhlLHQpe3Q9MD09PXQ/MDp0fHwxMDt2YXIgbj1yKGUpLnRvSHNsKCk7cmV0dXJuIG4ucy09dC8xMDAsbi5zPU8obi5zKSxyKG4pfWZ1bmN0aW9uIGMoZSx0KXt0PTA9PT10PzA6dHx8MTA7dmFyIG49cihlKS50b0hzbCgpO3JldHVybiBuLnMrPXQvMTAwLG4ucz1PKG4ucykscihuKX1mdW5jdGlvbiB1KGUpe3JldHVybiByKGUpLmRlc2F0dXJhdGUoMTAwKX1mdW5jdGlvbiBmKGUsdCl7dD0wPT09dD8wOnR8fDEwO3ZhciBuPXIoZSkudG9Ic2woKTtyZXR1cm4gbi5sKz10LzEwMCxuLmw9TyhuLmwpLHIobil9ZnVuY3Rpb24gZChlLHQpe3Q9MD09PXQ/MDp0fHwxMDt2YXIgbj1yKGUpLnRvUmdiKCk7cmV0dXJuIG4ucj1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxuLnItTWF0aC5yb3VuZCgtdC8xMDAqMjU1KSkpLG4uZz1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxuLmctTWF0aC5yb3VuZCgtdC8xMDAqMjU1KSkpLG4uYj1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxuLmItTWF0aC5yb3VuZCgtdC8xMDAqMjU1KSkpLHIobil9ZnVuY3Rpb24gcChlLHQpe3Q9MD09PXQ/MDp0fHwxMDt2YXIgbj1yKGUpLnRvSHNsKCk7cmV0dXJuIG4ubC09dC8xMDAsbi5sPU8obi5sKSxyKG4pfWZ1bmN0aW9uIGgoZSx0KXt2YXIgbj1yKGUpLnRvSHNsKCksbz0obi5oK3QpJTM2MDtyZXR1cm4gbi5oPW88MD8zNjArbzpvLHIobil9ZnVuY3Rpb24gZyhlKXt2YXIgdD1yKGUpLnRvSHNsKCk7cmV0dXJuIHQuaD0odC5oKzE4MCklMzYwLHIodCl9ZnVuY3Rpb24gdihlLHQpe2lmKGlzTmFOKHQpfHx0PD0wKXRocm93IG5ldyBFcnJvcihcIkFyZ3VtZW50IHRvIHBvbHlhZCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyXCIpO2Zvcih2YXIgbj1yKGUpLnRvSHNsKCksbz1bcihlKV0saT0zNjAvdCxhPTE7YTx0O2ErKylvLnB1c2gocih7aDoobi5oK2EqaSklMzYwLHM6bi5zLGw6bi5sfSkpO3JldHVybiBvfWZ1bmN0aW9uIG0oZSl7dmFyIHQ9cihlKS50b0hzbCgpLG49dC5oO3JldHVybltyKGUpLHIoe2g6KG4rNzIpJTM2MCxzOnQucyxsOnQubH0pLHIoe2g6KG4rMjE2KSUzNjAsczp0LnMsbDp0Lmx9KV19ZnVuY3Rpb24gQyhlLHQsbil7dD10fHw2LG49bnx8MzA7dmFyIG89cihlKS50b0hzbCgpLGk9MzYwL24sYT1bcihlKV07Zm9yKG8uaD0oby5oLShpKnQ+PjEpKzcyMCklMzYwOy0tdDspby5oPShvLmgraSklMzYwLGEucHVzaChyKG8pKTtyZXR1cm4gYX1mdW5jdGlvbiB5KGUsdCl7dD10fHw2O2Zvcih2YXIgbj1yKGUpLnRvSHN2KCksbz1uLmgsaT1uLnMsYT1uLnYsbD1bXSxzPTEvdDt0LS07KWwucHVzaChyKHtoOm8sczppLHY6YX0pKSxhPShhK3MpJTE7cmV0dXJuIGx9ci5wcm90b3R5cGU9e2lzRGFyazpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEJyaWdodG5lc3MoKTwxMjh9LGlzTGlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5pc0RhcmsoKX0saXNWYWxpZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9va30sZ2V0T3JpZ2luYWxJbnB1dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcmlnaW5hbElucHV0fSxnZXRGb3JtYXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9ybWF0fSxnZXRBbHBoYTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hfSxnZXRCcmlnaHRuZXNzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50b1JnYigpO3JldHVybigyOTkqZS5yKzU4NyplLmcrMTE0KmUuYikvMWUzfSxnZXRMdW1pbmFuY2U6ZnVuY3Rpb24oKXt2YXIgZSx0LG4scj10aGlzLnRvUmdiKCk7cmV0dXJuIGU9ci5yLzI1NSx0PXIuZy8yNTUsbj1yLmIvMjU1LC4yMTI2KihlPD0uMDM5Mjg/ZS8xMi45MjpNYXRoLnBvdygoZSsuMDU1KS8xLjA1NSwyLjQpKSsuNzE1MioodDw9LjAzOTI4P3QvMTIuOTI6TWF0aC5wb3coKHQrLjA1NSkvMS4wNTUsMi40KSkrLjA3MjIqKG48PS4wMzkyOD9uLzEyLjkyOk1hdGgucG93KChuKy4wNTUpLzEuMDU1LDIuNCkpfSxzZXRBbHBoYTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fYT14KGUpLHRoaXMuX3JvdW5kQT1NYXRoLnJvdW5kKDEwMCp0aGlzLl9hKS8xMDAsdGhpc30sdG9Ic3Y6ZnVuY3Rpb24oKXt2YXIgZT1pKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iKTtyZXR1cm57aDozNjAqZS5oLHM6ZS5zLHY6ZS52LGE6dGhpcy5fYX19LHRvSHN2U3RyaW5nOmZ1bmN0aW9uKCl7dmFyIGU9aSh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYiksdD1NYXRoLnJvdW5kKDM2MCplLmgpLG49TWF0aC5yb3VuZCgxMDAqZS5zKSxyPU1hdGgucm91bmQoMTAwKmUudik7cmV0dXJuIDE9PXRoaXMuX2E/XCJoc3YoXCIrdCtcIiwgXCIrbitcIiUsIFwiK3IrXCIlKVwiOlwiaHN2YShcIit0K1wiLCBcIituK1wiJSwgXCIrcitcIiUsIFwiK3RoaXMuX3JvdW5kQStcIilcIn0sdG9Ic2w6ZnVuY3Rpb24oKXt2YXIgZT1vKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iKTtyZXR1cm57aDozNjAqZS5oLHM6ZS5zLGw6ZS5sLGE6dGhpcy5fYX19LHRvSHNsU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIGU9byh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYiksdD1NYXRoLnJvdW5kKDM2MCplLmgpLG49TWF0aC5yb3VuZCgxMDAqZS5zKSxyPU1hdGgucm91bmQoMTAwKmUubCk7cmV0dXJuIDE9PXRoaXMuX2E/XCJoc2woXCIrdCtcIiwgXCIrbitcIiUsIFwiK3IrXCIlKVwiOlwiaHNsYShcIit0K1wiLCBcIituK1wiJSwgXCIrcitcIiUsIFwiK3RoaXMuX3JvdW5kQStcIilcIn0sdG9IZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGEodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IsZSl9LHRvSGV4U3RyaW5nOmZ1bmN0aW9uKGUpe3JldHVyblwiI1wiK3RoaXMudG9IZXgoZSl9LHRvSGV4ODpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4scixvKXt2YXIgaT1bRShNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDE2KSksRShNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDE2KSksRShNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDE2KSksRShqKHIpKV07cmV0dXJuIG8mJmlbMF0uY2hhckF0KDApPT1pWzBdLmNoYXJBdCgxKSYmaVsxXS5jaGFyQXQoMCk9PWlbMV0uY2hhckF0KDEpJiZpWzJdLmNoYXJBdCgwKT09aVsyXS5jaGFyQXQoMSkmJmlbM10uY2hhckF0KDApPT1pWzNdLmNoYXJBdCgxKT9pWzBdLmNoYXJBdCgwKStpWzFdLmNoYXJBdCgwKStpWzJdLmNoYXJBdCgwKStpWzNdLmNoYXJBdCgwKTppLmpvaW4oXCJcIil9KHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLHRoaXMuX2EsZSl9LHRvSGV4OFN0cmluZzpmdW5jdGlvbihlKXtyZXR1cm5cIiNcIit0aGlzLnRvSGV4OChlKX0sdG9SZ2I6ZnVuY3Rpb24oKXtyZXR1cm57cjpNYXRoLnJvdW5kKHRoaXMuX3IpLGc6TWF0aC5yb3VuZCh0aGlzLl9nKSxiOk1hdGgucm91bmQodGhpcy5fYiksYTp0aGlzLl9hfX0sdG9SZ2JTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMT09dGhpcy5fYT9cInJnYihcIitNYXRoLnJvdW5kKHRoaXMuX3IpK1wiLCBcIitNYXRoLnJvdW5kKHRoaXMuX2cpK1wiLCBcIitNYXRoLnJvdW5kKHRoaXMuX2IpK1wiKVwiOlwicmdiYShcIitNYXRoLnJvdW5kKHRoaXMuX3IpK1wiLCBcIitNYXRoLnJvdW5kKHRoaXMuX2cpK1wiLCBcIitNYXRoLnJvdW5kKHRoaXMuX2IpK1wiLCBcIit0aGlzLl9yb3VuZEErXCIpXCJ9LHRvUGVyY2VudGFnZVJnYjpmdW5jdGlvbigpe3JldHVybntyOk1hdGgucm91bmQoMTAwKl8odGhpcy5fciwyNTUpKStcIiVcIixnOk1hdGgucm91bmQoMTAwKl8odGhpcy5fZywyNTUpKStcIiVcIixiOk1hdGgucm91bmQoMTAwKl8odGhpcy5fYiwyNTUpKStcIiVcIixhOnRoaXMuX2F9fSx0b1BlcmNlbnRhZ2VSZ2JTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMT09dGhpcy5fYT9cInJnYihcIitNYXRoLnJvdW5kKDEwMCpfKHRoaXMuX3IsMjU1KSkrXCIlLCBcIitNYXRoLnJvdW5kKDEwMCpfKHRoaXMuX2csMjU1KSkrXCIlLCBcIitNYXRoLnJvdW5kKDEwMCpfKHRoaXMuX2IsMjU1KSkrXCIlKVwiOlwicmdiYShcIitNYXRoLnJvdW5kKDEwMCpfKHRoaXMuX3IsMjU1KSkrXCIlLCBcIitNYXRoLnJvdW5kKDEwMCpfKHRoaXMuX2csMjU1KSkrXCIlLCBcIitNYXRoLnJvdW5kKDEwMCpfKHRoaXMuX2IsMjU1KSkrXCIlLCBcIit0aGlzLl9yb3VuZEErXCIpXCJ9LHRvTmFtZTpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5fYT9cInRyYW5zcGFyZW50XCI6ISh0aGlzLl9hPDEpJiYoYlthKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLCEwKV18fCExKX0sdG9GaWx0ZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9XCIjXCIrbCh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYix0aGlzLl9hKSxuPXQsbz10aGlzLl9ncmFkaWVudFR5cGU/XCJHcmFkaWVudFR5cGUgPSAxLCBcIjpcIlwiO2lmKGUpe3ZhciBpPXIoZSk7bj1cIiNcIitsKGkuX3IsaS5fZyxpLl9iLGkuX2EpfXJldHVyblwicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KFwiK28rXCJzdGFydENvbG9yc3RyPVwiK3QrXCIsZW5kQ29sb3JzdHI9XCIrbitcIilcIn0sdG9TdHJpbmc6ZnVuY3Rpb24oZSl7dmFyIHQ9ISFlO2U9ZXx8dGhpcy5fZm9ybWF0O3ZhciBuPSExLHI9dGhpcy5fYTwxJiZ0aGlzLl9hPj0wO3JldHVybiB0fHwhcnx8XCJoZXhcIiE9PWUmJlwiaGV4NlwiIT09ZSYmXCJoZXgzXCIhPT1lJiZcImhleDRcIiE9PWUmJlwiaGV4OFwiIT09ZSYmXCJuYW1lXCIhPT1lPyhcInJnYlwiPT09ZSYmKG49dGhpcy50b1JnYlN0cmluZygpKSxcInByZ2JcIj09PWUmJihuPXRoaXMudG9QZXJjZW50YWdlUmdiU3RyaW5nKCkpLFwiaGV4XCIhPT1lJiZcImhleDZcIiE9PWV8fChuPXRoaXMudG9IZXhTdHJpbmcoKSksXCJoZXgzXCI9PT1lJiYobj10aGlzLnRvSGV4U3RyaW5nKCEwKSksXCJoZXg0XCI9PT1lJiYobj10aGlzLnRvSGV4OFN0cmluZyghMCkpLFwiaGV4OFwiPT09ZSYmKG49dGhpcy50b0hleDhTdHJpbmcoKSksXCJuYW1lXCI9PT1lJiYobj10aGlzLnRvTmFtZSgpKSxcImhzbFwiPT09ZSYmKG49dGhpcy50b0hzbFN0cmluZygpKSxcImhzdlwiPT09ZSYmKG49dGhpcy50b0hzdlN0cmluZygpKSxufHx0aGlzLnRvSGV4U3RyaW5nKCkpOlwibmFtZVwiPT09ZSYmMD09PXRoaXMuX2E/dGhpcy50b05hbWUoKTp0aGlzLnRvUmdiU3RyaW5nKCl9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIHIodGhpcy50b1N0cmluZygpKX0sX2FwcGx5TW9kaWZpY2F0aW9uOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5hcHBseShudWxsLFt0aGlzXS5jb25jYXQoW10uc2xpY2UuY2FsbCh0KSkpO3JldHVybiB0aGlzLl9yPW4uX3IsdGhpcy5fZz1uLl9nLHRoaXMuX2I9bi5fYix0aGlzLnNldEFscGhhKG4uX2EpLHRoaXN9LGxpZ2h0ZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oZixhcmd1bWVudHMpfSxicmlnaHRlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihkLGFyZ3VtZW50cyl9LGRhcmtlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihwLGFyZ3VtZW50cyl9LGRlc2F0dXJhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24ocyxhcmd1bWVudHMpfSxzYXR1cmF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihjLGFyZ3VtZW50cyl9LGdyZXlzY2FsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbih1LGFyZ3VtZW50cyl9LHNwaW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oaCxhcmd1bWVudHMpfSxfYXBwbHlDb21iaW5hdGlvbjpmdW5jdGlvbihlLHQpe3JldHVybiBlLmFwcGx5KG51bGwsW3RoaXNdLmNvbmNhdChbXS5zbGljZS5jYWxsKHQpKSl9LGFuYWxvZ291czpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKEMsYXJndW1lbnRzKX0sY29tcGxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKGcsYXJndW1lbnRzKX0sbW9ub2Nocm9tYXRpYzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKHksYXJndW1lbnRzKX0sc3BsaXRjb21wbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24obSxhcmd1bWVudHMpfSx0cmlhZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKHYsWzNdKX0sdGV0cmFkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24odixbNF0pfX0sci5mcm9tUmF0aW89ZnVuY3Rpb24odCxuKXtpZihcIm9iamVjdFwiPT1lKHQpKXt2YXIgbz17fTtmb3IodmFyIGkgaW4gdCl0Lmhhc093blByb3BlcnR5KGkpJiYob1tpXT1cImFcIj09PWk/dFtpXTpTKHRbaV0pKTt0PW99cmV0dXJuIHIodCxuKX0sci5lcXVhbHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4hKCFlfHwhdCkmJnIoZSkudG9SZ2JTdHJpbmcoKT09cih0KS50b1JnYlN0cmluZygpfSxyLnJhbmRvbT1mdW5jdGlvbigpe3JldHVybiByLmZyb21SYXRpbyh7cjpNYXRoLnJhbmRvbSgpLGc6TWF0aC5yYW5kb20oKSxiOk1hdGgucmFuZG9tKCl9KX0sci5taXg9ZnVuY3Rpb24oZSx0LG4pe249MD09PW4/MDpufHw1MDt2YXIgbz1yKGUpLnRvUmdiKCksaT1yKHQpLnRvUmdiKCksYT1uLzEwMDtyZXR1cm4gcih7cjooaS5yLW8ucikqYStvLnIsZzooaS5nLW8uZykqYStvLmcsYjooaS5iLW8uYikqYStvLmIsYTooaS5hLW8uYSkqYStvLmF9KX0sci5yZWFkYWJpbGl0eT1mdW5jdGlvbihlLHQpe3ZhciBuPXIoZSksbz1yKHQpO3JldHVybihNYXRoLm1heChuLmdldEx1bWluYW5jZSgpLG8uZ2V0THVtaW5hbmNlKCkpKy4wNSkvKE1hdGgubWluKG4uZ2V0THVtaW5hbmNlKCksby5nZXRMdW1pbmFuY2UoKSkrLjA1KX0sci5pc1JlYWRhYmxlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgbyxpLGEsbCxzLGM9ci5yZWFkYWJpbGl0eShlLHQpO3N3aXRjaChpPSExLChhPW4sXCJBQVwiIT09KGw9KChhPWF8fHtsZXZlbDpcIkFBXCIsc2l6ZTpcInNtYWxsXCJ9KS5sZXZlbHx8XCJBQVwiKS50b1VwcGVyQ2FzZSgpKSYmXCJBQUFcIiE9PWwmJihsPVwiQUFcIiksXCJzbWFsbFwiIT09KHM9KGEuc2l6ZXx8XCJzbWFsbFwiKS50b0xvd2VyQ2FzZSgpKSYmXCJsYXJnZVwiIT09cyYmKHM9XCJzbWFsbFwiKSxvPXtsZXZlbDpsLHNpemU6c30pLmxldmVsK28uc2l6ZSl7Y2FzZVwiQUFzbWFsbFwiOmNhc2VcIkFBQWxhcmdlXCI6aT1jPj00LjU7YnJlYWs7Y2FzZVwiQUFsYXJnZVwiOmk9Yz49MzticmVhaztjYXNlXCJBQUFzbWFsbFwiOmk9Yz49N31yZXR1cm4gaX0sci5tb3N0UmVhZGFibGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciBvLGksYSxsLHM9bnVsbCxjPTA7aT0obj1ufHx7fSkuaW5jbHVkZUZhbGxiYWNrQ29sb3JzLGE9bi5sZXZlbCxsPW4uc2l6ZTtmb3IodmFyIHU9MDt1PHQubGVuZ3RoO3UrKykobz1yLnJlYWRhYmlsaXR5KGUsdFt1XSkpPmMmJihjPW8scz1yKHRbdV0pKTtyZXR1cm4gci5pc1JlYWRhYmxlKGUscyx7bGV2ZWw6YSxzaXplOmx9KXx8IWk/czoobi5pbmNsdWRlRmFsbGJhY2tDb2xvcnM9ITEsci5tb3N0UmVhZGFibGUoZSxbXCIjZmZmXCIsXCIjMDAwXCJdLG4pKX07dmFyIHc9ci5uYW1lcz17YWxpY2VibHVlOlwiZjBmOGZmXCIsYW50aXF1ZXdoaXRlOlwiZmFlYmQ3XCIsYXF1YTpcIjBmZlwiLGFxdWFtYXJpbmU6XCI3ZmZmZDRcIixhenVyZTpcImYwZmZmZlwiLGJlaWdlOlwiZjVmNWRjXCIsYmlzcXVlOlwiZmZlNGM0XCIsYmxhY2s6XCIwMDBcIixibGFuY2hlZGFsbW9uZDpcImZmZWJjZFwiLGJsdWU6XCIwMGZcIixibHVldmlvbGV0OlwiOGEyYmUyXCIsYnJvd246XCJhNTJhMmFcIixidXJseXdvb2Q6XCJkZWI4ODdcIixidXJudHNpZW5uYTpcImVhN2U1ZFwiLGNhZGV0Ymx1ZTpcIjVmOWVhMFwiLGNoYXJ0cmV1c2U6XCI3ZmZmMDBcIixjaG9jb2xhdGU6XCJkMjY5MWVcIixjb3JhbDpcImZmN2Y1MFwiLGNvcm5mbG93ZXJibHVlOlwiNjQ5NWVkXCIsY29ybnNpbGs6XCJmZmY4ZGNcIixjcmltc29uOlwiZGMxNDNjXCIsY3lhbjpcIjBmZlwiLGRhcmtibHVlOlwiMDAwMDhiXCIsZGFya2N5YW46XCIwMDhiOGJcIixkYXJrZ29sZGVucm9kOlwiYjg4NjBiXCIsZGFya2dyYXk6XCJhOWE5YTlcIixkYXJrZ3JlZW46XCIwMDY0MDBcIixkYXJrZ3JleTpcImE5YTlhOVwiLGRhcmtraGFraTpcImJkYjc2YlwiLGRhcmttYWdlbnRhOlwiOGIwMDhiXCIsZGFya29saXZlZ3JlZW46XCI1NTZiMmZcIixkYXJrb3JhbmdlOlwiZmY4YzAwXCIsZGFya29yY2hpZDpcIjk5MzJjY1wiLGRhcmtyZWQ6XCI4YjAwMDBcIixkYXJrc2FsbW9uOlwiZTk5NjdhXCIsZGFya3NlYWdyZWVuOlwiOGZiYzhmXCIsZGFya3NsYXRlYmx1ZTpcIjQ4M2Q4YlwiLGRhcmtzbGF0ZWdyYXk6XCIyZjRmNGZcIixkYXJrc2xhdGVncmV5OlwiMmY0ZjRmXCIsZGFya3R1cnF1b2lzZTpcIjAwY2VkMVwiLGRhcmt2aW9sZXQ6XCI5NDAwZDNcIixkZWVwcGluazpcImZmMTQ5M1wiLGRlZXBza3libHVlOlwiMDBiZmZmXCIsZGltZ3JheTpcIjY5Njk2OVwiLGRpbWdyZXk6XCI2OTY5NjlcIixkb2RnZXJibHVlOlwiMWU5MGZmXCIsZmlyZWJyaWNrOlwiYjIyMjIyXCIsZmxvcmFsd2hpdGU6XCJmZmZhZjBcIixmb3Jlc3RncmVlbjpcIjIyOGIyMlwiLGZ1Y2hzaWE6XCJmMGZcIixnYWluc2Jvcm86XCJkY2RjZGNcIixnaG9zdHdoaXRlOlwiZjhmOGZmXCIsZ29sZDpcImZmZDcwMFwiLGdvbGRlbnJvZDpcImRhYTUyMFwiLGdyYXk6XCI4MDgwODBcIixncmVlbjpcIjAwODAwMFwiLGdyZWVueWVsbG93OlwiYWRmZjJmXCIsZ3JleTpcIjgwODA4MFwiLGhvbmV5ZGV3OlwiZjBmZmYwXCIsaG90cGluazpcImZmNjliNFwiLGluZGlhbnJlZDpcImNkNWM1Y1wiLGluZGlnbzpcIjRiMDA4MlwiLGl2b3J5OlwiZmZmZmYwXCIsa2hha2k6XCJmMGU2OGNcIixsYXZlbmRlcjpcImU2ZTZmYVwiLGxhdmVuZGVyYmx1c2g6XCJmZmYwZjVcIixsYXduZ3JlZW46XCI3Y2ZjMDBcIixsZW1vbmNoaWZmb246XCJmZmZhY2RcIixsaWdodGJsdWU6XCJhZGQ4ZTZcIixsaWdodGNvcmFsOlwiZjA4MDgwXCIsbGlnaHRjeWFuOlwiZTBmZmZmXCIsbGlnaHRnb2xkZW5yb2R5ZWxsb3c6XCJmYWZhZDJcIixsaWdodGdyYXk6XCJkM2QzZDNcIixsaWdodGdyZWVuOlwiOTBlZTkwXCIsbGlnaHRncmV5OlwiZDNkM2QzXCIsbGlnaHRwaW5rOlwiZmZiNmMxXCIsbGlnaHRzYWxtb246XCJmZmEwN2FcIixsaWdodHNlYWdyZWVuOlwiMjBiMmFhXCIsbGlnaHRza3libHVlOlwiODdjZWZhXCIsbGlnaHRzbGF0ZWdyYXk6XCI3ODlcIixsaWdodHNsYXRlZ3JleTpcIjc4OVwiLGxpZ2h0c3RlZWxibHVlOlwiYjBjNGRlXCIsbGlnaHR5ZWxsb3c6XCJmZmZmZTBcIixsaW1lOlwiMGYwXCIsbGltZWdyZWVuOlwiMzJjZDMyXCIsbGluZW46XCJmYWYwZTZcIixtYWdlbnRhOlwiZjBmXCIsbWFyb29uOlwiODAwMDAwXCIsbWVkaXVtYXF1YW1hcmluZTpcIjY2Y2RhYVwiLG1lZGl1bWJsdWU6XCIwMDAwY2RcIixtZWRpdW1vcmNoaWQ6XCJiYTU1ZDNcIixtZWRpdW1wdXJwbGU6XCI5MzcwZGJcIixtZWRpdW1zZWFncmVlbjpcIjNjYjM3MVwiLG1lZGl1bXNsYXRlYmx1ZTpcIjdiNjhlZVwiLG1lZGl1bXNwcmluZ2dyZWVuOlwiMDBmYTlhXCIsbWVkaXVtdHVycXVvaXNlOlwiNDhkMWNjXCIsbWVkaXVtdmlvbGV0cmVkOlwiYzcxNTg1XCIsbWlkbmlnaHRibHVlOlwiMTkxOTcwXCIsbWludGNyZWFtOlwiZjVmZmZhXCIsbWlzdHlyb3NlOlwiZmZlNGUxXCIsbW9jY2FzaW46XCJmZmU0YjVcIixuYXZham93aGl0ZTpcImZmZGVhZFwiLG5hdnk6XCIwMDAwODBcIixvbGRsYWNlOlwiZmRmNWU2XCIsb2xpdmU6XCI4MDgwMDBcIixvbGl2ZWRyYWI6XCI2YjhlMjNcIixvcmFuZ2U6XCJmZmE1MDBcIixvcmFuZ2VyZWQ6XCJmZjQ1MDBcIixvcmNoaWQ6XCJkYTcwZDZcIixwYWxlZ29sZGVucm9kOlwiZWVlOGFhXCIscGFsZWdyZWVuOlwiOThmYjk4XCIscGFsZXR1cnF1b2lzZTpcImFmZWVlZVwiLHBhbGV2aW9sZXRyZWQ6XCJkYjcwOTNcIixwYXBheWF3aGlwOlwiZmZlZmQ1XCIscGVhY2hwdWZmOlwiZmZkYWI5XCIscGVydTpcImNkODUzZlwiLHBpbms6XCJmZmMwY2JcIixwbHVtOlwiZGRhMGRkXCIscG93ZGVyYmx1ZTpcImIwZTBlNlwiLHB1cnBsZTpcIjgwMDA4MFwiLHJlYmVjY2FwdXJwbGU6XCI2NjMzOTlcIixyZWQ6XCJmMDBcIixyb3N5YnJvd246XCJiYzhmOGZcIixyb3lhbGJsdWU6XCI0MTY5ZTFcIixzYWRkbGVicm93bjpcIjhiNDUxM1wiLHNhbG1vbjpcImZhODA3MlwiLHNhbmR5YnJvd246XCJmNGE0NjBcIixzZWFncmVlbjpcIjJlOGI1N1wiLHNlYXNoZWxsOlwiZmZmNWVlXCIsc2llbm5hOlwiYTA1MjJkXCIsc2lsdmVyOlwiYzBjMGMwXCIsc2t5Ymx1ZTpcIjg3Y2VlYlwiLHNsYXRlYmx1ZTpcIjZhNWFjZFwiLHNsYXRlZ3JheTpcIjcwODA5MFwiLHNsYXRlZ3JleTpcIjcwODA5MFwiLHNub3c6XCJmZmZhZmFcIixzcHJpbmdncmVlbjpcIjAwZmY3ZlwiLHN0ZWVsYmx1ZTpcIjQ2ODJiNFwiLHRhbjpcImQyYjQ4Y1wiLHRlYWw6XCIwMDgwODBcIix0aGlzdGxlOlwiZDhiZmQ4XCIsdG9tYXRvOlwiZmY2MzQ3XCIsdHVycXVvaXNlOlwiNDBlMGQwXCIsdmlvbGV0OlwiZWU4MmVlXCIsd2hlYXQ6XCJmNWRlYjNcIix3aGl0ZTpcImZmZlwiLHdoaXRlc21va2U6XCJmNWY1ZjVcIix5ZWxsb3c6XCJmZjBcIix5ZWxsb3dncmVlbjpcIjlhY2QzMlwifSxiPXIuaGV4TmFtZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9e307Zm9yKHZhciBuIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbZVtuXV09bik7cmV0dXJuIHR9KHcpO2Z1bmN0aW9uIHgoZSl7cmV0dXJuIGU9cGFyc2VGbG9hdChlKSwoaXNOYU4oZSl8fGU8MHx8ZT4xKSYmKGU9MSksZX1mdW5jdGlvbiBfKGUsdCl7KGZ1bmN0aW9uKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlJiYtMSE9ZS5pbmRleE9mKFwiLlwiKSYmMT09PXBhcnNlRmxvYXQoZSl9KShlKSYmKGU9XCIxMDAlXCIpO3ZhciBuPWZ1bmN0aW9uKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlJiYtMSE9ZS5pbmRleE9mKFwiJVwiKX0oZSk7cmV0dXJuIGU9TWF0aC5taW4odCxNYXRoLm1heCgwLHBhcnNlRmxvYXQoZSkpKSxuJiYoZT1wYXJzZUludChlKnQsMTApLzEwMCksTWF0aC5hYnMoZS10KTwxZS02PzE6ZSV0L3BhcnNlRmxvYXQodCl9ZnVuY3Rpb24gTyhlKXtyZXR1cm4gTWF0aC5taW4oMSxNYXRoLm1heCgwLGUpKX1mdW5jdGlvbiBMKGUpe3JldHVybiBwYXJzZUludChlLDE2KX1mdW5jdGlvbiBFKGUpe3JldHVybiAxPT1lLmxlbmd0aD9cIjBcIitlOlwiXCIrZX1mdW5jdGlvbiBTKGUpe3JldHVybiBlPD0xJiYoZT0xMDAqZStcIiVcIiksZX1mdW5jdGlvbiBqKGUpe3JldHVybiBNYXRoLnJvdW5kKDI1NSpwYXJzZUZsb2F0KGUpKS50b1N0cmluZygxNil9ZnVuY3Rpb24gTShlKXtyZXR1cm4gTChlKS8yNTV9dmFyIGssUixQLEk9KFI9XCJbXFxcXHN8XFxcXChdKyhcIisoaz1cIig/OlstXFxcXCtdP1xcXFxkKlxcXFwuXFxcXGQrJT8pfCg/OlstXFxcXCtdP1xcXFxkKyU/KVwiKStcIilbLHxcXFxcc10rKFwiK2srXCIpWyx8XFxcXHNdKyhcIitrK1wiKVxcXFxzKlxcXFwpP1wiLFA9XCJbXFxcXHN8XFxcXChdKyhcIitrK1wiKVssfFxcXFxzXSsoXCIraytcIilbLHxcXFxcc10rKFwiK2srXCIpWyx8XFxcXHNdKyhcIitrK1wiKVxcXFxzKlxcXFwpP1wiLHtDU1NfVU5JVDpuZXcgUmVnRXhwKGspLHJnYjpuZXcgUmVnRXhwKFwicmdiXCIrUikscmdiYTpuZXcgUmVnRXhwKFwicmdiYVwiK1ApLGhzbDpuZXcgUmVnRXhwKFwiaHNsXCIrUiksaHNsYTpuZXcgUmVnRXhwKFwiaHNsYVwiK1ApLGhzdjpuZXcgUmVnRXhwKFwiaHN2XCIrUiksaHN2YTpuZXcgUmVnRXhwKFwiaHN2YVwiK1ApLGhleDM6L14jPyhbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KSQvLGhleDY6L14jPyhbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KSQvLGhleDQ6L14jPyhbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkkLyxoZXg4Oi9eIz8oWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pJC99KTtmdW5jdGlvbiBBKGUpe3JldHVybiEhSS5DU1NfVU5JVC5leGVjKGUpfXJldHVybiByfSgpfX0sbz17fTtmdW5jdGlvbiBpKGUpe3ZhciB0PW9bZV07aWYodm9pZCAwIT09dClyZXR1cm4gdC5leHBvcnRzO3ZhciBuPW9bZV09e2lkOmUsbG9hZGVkOiExLGV4cG9ydHM6e319O3JldHVybiByW2VdLmNhbGwobi5leHBvcnRzLG4sbi5leHBvcnRzLGkpLG4ubG9hZGVkPSEwLG4uZXhwb3J0c31pLm49ZT0+e3ZhciB0PWUmJmUuX19lc01vZHVsZT8oKT0+ZS5kZWZhdWx0OigpPT5lO3JldHVybiBpLmQodCx7YTp0fSksdH0saS5kPShlLHQpPT57Zm9yKHZhciBuIGluIHQpaS5vKHQsbikmJiFpLm8oZSxuKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6dFtuXX0pfSxpLmc9ZnVuY3Rpb24oKXtpZihcIm9iamVjdFwiPT10eXBlb2YgZ2xvYmFsVGhpcylyZXR1cm4gZ2xvYmFsVGhpczt0cnl7cmV0dXJuIHRoaXN8fG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCl9Y2F0Y2goZSl7aWYoXCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93fX0oKSxpLm89KGUsdCk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpLGkucj1lPT57XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOlwiTW9kdWxlXCJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0saS5ubWQ9ZT0+KGUucGF0aHM9W10sZS5jaGlsZHJlbnx8KGUuY2hpbGRyZW49W10pLGUpO3ZhciBhPWkoMzQxKSxsPXQ7Zm9yKHZhciBzIGluIGEpbFtzXT1hW3NdO2EuX19lc01vZHVsZSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LDMxOTg6KGUsdCxuKT0+e3ZhciByPU5hTixvPVwiW29iamVjdCBTeW1ib2xdXCIsaT0vXlxccyt8XFxzKyQvZyxhPS9eWy0rXTB4WzAtOWEtZl0rJC9pLGw9L14wYlswMV0rJC9pLHM9L14wb1swLTddKyQvaSxjPXBhcnNlSW50LHU9XCJvYmplY3RcIj09dHlwZW9mIG4uZyYmbi5nJiZuLmcuT2JqZWN0PT09T2JqZWN0JiZuLmcsZj1cIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsZD11fHxmfHxGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCkscD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGg9TWF0aC5tYXgsZz1NYXRoLm1pbix2PWZ1bmN0aW9uKCl7cmV0dXJuIGQuRGF0ZS5ub3coKX07ZnVuY3Rpb24gbShlKXt2YXIgdD10eXBlb2YgZTtyZXR1cm4hIWUmJihcIm9iamVjdFwiPT10fHxcImZ1bmN0aW9uXCI9PXQpfWZ1bmN0aW9uIEMoZSl7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpcmV0dXJuIGU7aWYoZnVuY3Rpb24oZSl7cmV0dXJuXCJzeW1ib2xcIj09dHlwZW9mIGV8fGZ1bmN0aW9uKGUpe3JldHVybiEhZSYmXCJvYmplY3RcIj09dHlwZW9mIGV9KGUpJiZwLmNhbGwoZSk9PW99KGUpKXJldHVybiByO2lmKG0oZSkpe3ZhciB0PVwiZnVuY3Rpb25cIj09dHlwZW9mIGUudmFsdWVPZj9lLnZhbHVlT2YoKTplO2U9bSh0KT90K1wiXCI6dH1pZihcInN0cmluZ1wiIT10eXBlb2YgZSlyZXR1cm4gMD09PWU/ZTorZTtlPWUucmVwbGFjZShpLFwiXCIpO3ZhciBuPWwudGVzdChlKTtyZXR1cm4gbnx8cy50ZXN0KGUpP2MoZS5zbGljZSgyKSxuPzI6OCk6YS50ZXN0KGUpP3I6K2V9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvLGksYSxsLHMsYz0wLHU9ITEsZj0hMSxkPSEwO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGEgZnVuY3Rpb25cIik7ZnVuY3Rpb24gcCh0KXt2YXIgbj1yLGk9bztyZXR1cm4gcj1vPXZvaWQgMCxjPXQsYT1lLmFwcGx5KGksbil9ZnVuY3Rpb24geShlKXt2YXIgbj1lLXM7cmV0dXJuIHZvaWQgMD09PXN8fG4+PXR8fG48MHx8ZiYmZS1jPj1pfWZ1bmN0aW9uIHcoKXt2YXIgZT12KCk7aWYoeShlKSlyZXR1cm4gYihlKTtsPXNldFRpbWVvdXQodyxmdW5jdGlvbihlKXt2YXIgbj10LShlLXMpO3JldHVybiBmP2cobixpLShlLWMpKTpufShlKSl9ZnVuY3Rpb24gYihlKXtyZXR1cm4gbD12b2lkIDAsZCYmcj9wKGUpOihyPW89dm9pZCAwLGEpfWZ1bmN0aW9uIHgoKXt2YXIgZT12KCksbj15KGUpO2lmKHI9YXJndW1lbnRzLG89dGhpcyxzPWUsbil7aWYodm9pZCAwPT09bClyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGM9ZSxsPXNldFRpbWVvdXQodyx0KSx1P3AoZSk6YX0ocyk7aWYoZilyZXR1cm4gbD1zZXRUaW1lb3V0KHcsdCkscChzKX1yZXR1cm4gdm9pZCAwPT09bCYmKGw9c2V0VGltZW91dCh3LHQpKSxhfXJldHVybiB0PUModCl8fDAsbShuKSYmKHU9ISFuLmxlYWRpbmcsaT0oZj1cIm1heFdhaXRcImluIG4pP2goQyhuLm1heFdhaXQpfHwwLHQpOmksZD1cInRyYWlsaW5nXCJpbiBuPyEhbi50cmFpbGluZzpkKSx4LmNhbmNlbD1mdW5jdGlvbigpe3ZvaWQgMCE9PWwmJmNsZWFyVGltZW91dChsKSxjPTAscj1zPW89bD12b2lkIDB9LHguZmx1c2g9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09bD9hOmIodigpKX0seH19LDI1MjU6ZT0+e1widXNlIHN0cmljdFwiO3ZhciB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsbj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHI9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt0cnl7aWYoIU9iamVjdC5hc3NpZ24pcmV0dXJuITE7dmFyIGU9bmV3IFN0cmluZyhcImFiY1wiKTtpZihlWzVdPVwiZGVcIixcIjVcIj09PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpWzBdKXJldHVybiExO2Zvcih2YXIgdD17fSxuPTA7bjwxMDtuKyspdFtcIl9cIitTdHJpbmcuZnJvbUNoYXJDb2RlKG4pXT1uO2lmKFwiMDEyMzQ1Njc4OVwiIT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModCkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pKS5qb2luKFwiXCIpKXJldHVybiExO3ZhciByPXt9O3JldHVyblwiYWJjZGVmZ2hpamtsbW5vcHFyc3RcIi5zcGxpdChcIlwiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtyW2VdPWV9KSksXCJhYmNkZWZnaGlqa2xtbm9wcXJzdFwiPT09T2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxyKSkuam9pbihcIlwiKX1jYXRjaChlKXtyZXR1cm4hMX19KCk/T2JqZWN0LmFzc2lnbjpmdW5jdGlvbihlLG8pe2Zvcih2YXIgaSxhLGw9ZnVuY3Rpb24oZSl7aWYobnVsbD09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWRcIik7cmV0dXJuIE9iamVjdChlKX0oZSkscz0xO3M8YXJndW1lbnRzLmxlbmd0aDtzKyspe2Zvcih2YXIgYyBpbiBpPU9iamVjdChhcmd1bWVudHNbc10pKW4uY2FsbChpLGMpJiYobFtjXT1pW2NdKTtpZih0KXthPXQoaSk7Zm9yKHZhciB1PTA7dTxhLmxlbmd0aDt1Kyspci5jYWxsKGksYVt1XSkmJihsW2FbdV1dPWlbYVt1XV0pfX1yZXR1cm4gbH19LDg3MDI6KGUsdCk9PntcInVzZSBzdHJpY3RcIjt2YXIgbj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3Iscj1uP1N5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpOjYwMTAzLG89bj9TeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpOjYwMTA2LGk9bj9TeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIik6NjAxMDcsYT1uP1N5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKTo2MDEwOCxsPW4/U3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpOjYwMTE0LHM9bj9TeW1ib2wuZm9yKFwicmVhY3QucHJvdmlkZXJcIik6NjAxMDksYz1uP1N5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpOjYwMTEwLHU9bj9TeW1ib2wuZm9yKFwicmVhY3QuYXN5bmNfbW9kZVwiKTo2MDExMSxmPW4/U3ltYm9sLmZvcihcInJlYWN0LmNvbmN1cnJlbnRfbW9kZVwiKTo2MDExMSxkPW4/U3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpOjYwMTEyLHA9bj9TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VcIik6NjAxMTMsaD1uP1N5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpOjYwMTIwLGc9bj9TeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKTo2MDExNSx2PW4/U3ltYm9sLmZvcihcInJlYWN0LmxhenlcIik6NjAxMTYsbT1uP1N5bWJvbC5mb3IoXCJyZWFjdC5ibG9ja1wiKTo2MDEyMSxDPW4/U3ltYm9sLmZvcihcInJlYWN0LmZ1bmRhbWVudGFsXCIpOjYwMTE3LHk9bj9TeW1ib2wuZm9yKFwicmVhY3QucmVzcG9uZGVyXCIpOjYwMTE4LHc9bj9TeW1ib2wuZm9yKFwicmVhY3Quc2NvcGVcIik6NjAxMTk7ZnVuY3Rpb24gYihlKXtpZihcIm9iamVjdFwiPT10eXBlb2YgZSYmbnVsbCE9PWUpe3ZhciB0PWUuJCR0eXBlb2Y7c3dpdGNoKHQpe2Nhc2Ugcjpzd2l0Y2goZT1lLnR5cGUpe2Nhc2UgdTpjYXNlIGY6Y2FzZSBpOmNhc2UgbDpjYXNlIGE6Y2FzZSBwOnJldHVybiBlO2RlZmF1bHQ6c3dpdGNoKGU9ZSYmZS4kJHR5cGVvZil7Y2FzZSBjOmNhc2UgZDpjYXNlIHY6Y2FzZSBnOmNhc2UgczpyZXR1cm4gZTtkZWZhdWx0OnJldHVybiB0fX1jYXNlIG86cmV0dXJuIHR9fX1mdW5jdGlvbiB4KGUpe3JldHVybiBiKGUpPT09Zn10LkZvcndhcmRSZWY9ZCx0LmlzVmFsaWRFbGVtZW50VHlwZT1mdW5jdGlvbihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZXx8XCJmdW5jdGlvblwiPT10eXBlb2YgZXx8ZT09PWl8fGU9PT1mfHxlPT09bHx8ZT09PWF8fGU9PT1wfHxlPT09aHx8XCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lJiYoZS4kJHR5cGVvZj09PXZ8fGUuJCR0eXBlb2Y9PT1nfHxlLiQkdHlwZW9mPT09c3x8ZS4kJHR5cGVvZj09PWN8fGUuJCR0eXBlb2Y9PT1kfHxlLiQkdHlwZW9mPT09Q3x8ZS4kJHR5cGVvZj09PXl8fGUuJCR0eXBlb2Y9PT13fHxlLiQkdHlwZW9mPT09bSl9fSw5MTg1OihlLHQsbik9PntcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9big4NzAyKX0sMTUzNTooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9bigyNTI1KSxvPTYwMTAzLGk9NjAxMDY7dC5GcmFnbWVudD02MDEwNyx0LlN0cmljdE1vZGU9NjAxMDgsdC5Qcm9maWxlcj02MDExNDt2YXIgYT02MDEwOSxsPTYwMTEwLHM9NjAxMTI7dC5TdXNwZW5zZT02MDExMzt2YXIgYz02MDExNSx1PTYwMTE2O2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvcil7dmFyIGY9U3ltYm9sLmZvcjtvPWYoXCJyZWFjdC5lbGVtZW50XCIpLGk9ZihcInJlYWN0LnBvcnRhbFwiKSx0LkZyYWdtZW50PWYoXCJyZWFjdC5mcmFnbWVudFwiKSx0LlN0cmljdE1vZGU9ZihcInJlYWN0LnN0cmljdF9tb2RlXCIpLHQuUHJvZmlsZXI9ZihcInJlYWN0LnByb2ZpbGVyXCIpLGE9ZihcInJlYWN0LnByb3ZpZGVyXCIpLGw9ZihcInJlYWN0LmNvbnRleHRcIikscz1mKFwicmVhY3QuZm9yd2FyZF9yZWZcIiksdC5TdXNwZW5zZT1mKFwicmVhY3Quc3VzcGVuc2VcIiksYz1mKFwicmVhY3QubWVtb1wiKSx1PWYoXCJyZWFjdC5sYXp5XCIpfXZhciBkPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yO2Z1bmN0aW9uIHAoZSl7Zm9yKHZhciB0PVwiaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2Vycm9yLWRlY29kZXIuaHRtbD9pbnZhcmlhbnQ9XCIrZSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0Kz1cIiZhcmdzW109XCIrZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1tuXSk7cmV0dXJuXCJNaW5pZmllZCBSZWFjdCBlcnJvciAjXCIrZStcIjsgdmlzaXQgXCIrdCtcIiBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuXCJ9dmFyIGg9e2lzTW91bnRlZDpmdW5jdGlvbigpe3JldHVybiExfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVSZXBsYWNlU3RhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbigpe319LGc9e307ZnVuY3Rpb24gdihlLHQsbil7dGhpcy5wcm9wcz1lLHRoaXMuY29udGV4dD10LHRoaXMucmVmcz1nLHRoaXMudXBkYXRlcj1ufHxofWZ1bmN0aW9uIG0oKXt9ZnVuY3Rpb24gQyhlLHQsbil7dGhpcy5wcm9wcz1lLHRoaXMuY29udGV4dD10LHRoaXMucmVmcz1nLHRoaXMudXBkYXRlcj1ufHxofXYucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9e30sdi5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oZSx0KXtpZihcIm9iamVjdFwiIT10eXBlb2YgZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZSYmbnVsbCE9ZSl0aHJvdyBFcnJvcihwKDg1KSk7dGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLGUsdCxcInNldFN0YXRlXCIpfSx2LnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsZSxcImZvcmNlVXBkYXRlXCIpfSxtLnByb3RvdHlwZT12LnByb3RvdHlwZTt2YXIgeT1DLnByb3RvdHlwZT1uZXcgbTt5LmNvbnN0cnVjdG9yPUMscih5LHYucHJvdG90eXBlKSx5LmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwO3ZhciB3PXtjdXJyZW50Om51bGx9LGI9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSx4PXtrZXk6ITAscmVmOiEwLF9fc2VsZjohMCxfX3NvdXJjZTohMH07ZnVuY3Rpb24gXyhlLHQsbil7dmFyIHIsaT17fSxhPW51bGwsbD1udWxsO2lmKG51bGwhPXQpZm9yKHIgaW4gdm9pZCAwIT09dC5yZWYmJihsPXQucmVmKSx2b2lkIDAhPT10LmtleSYmKGE9XCJcIit0LmtleSksdCliLmNhbGwodCxyKSYmIXguaGFzT3duUHJvcGVydHkocikmJihpW3JdPXRbcl0pO3ZhciBzPWFyZ3VtZW50cy5sZW5ndGgtMjtpZigxPT09cylpLmNoaWxkcmVuPW47ZWxzZSBpZigxPHMpe2Zvcih2YXIgYz1BcnJheShzKSx1PTA7dTxzO3UrKyljW3VdPWFyZ3VtZW50c1t1KzJdO2kuY2hpbGRyZW49Y31pZihlJiZlLmRlZmF1bHRQcm9wcylmb3IociBpbiBzPWUuZGVmYXVsdFByb3BzKXZvaWQgMD09PWlbcl0mJihpW3JdPXNbcl0pO3JldHVybnskJHR5cGVvZjpvLHR5cGU6ZSxrZXk6YSxyZWY6bCxwcm9wczppLF9vd25lcjp3LmN1cnJlbnR9fWZ1bmN0aW9uIE8oZSl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lJiZlLiQkdHlwZW9mPT09b312YXIgTD0vXFwvKy9nO2Z1bmN0aW9uIEUoZSx0KXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgZSYmbnVsbCE9PWUmJm51bGwhPWUua2V5P2Z1bmN0aW9uKGUpe3ZhciB0PXtcIj1cIjpcIj0wXCIsXCI6XCI6XCI9MlwifTtyZXR1cm5cIiRcIitlLnJlcGxhY2UoL1s9Ol0vZywoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KSl9KFwiXCIrZS5rZXkpOnQudG9TdHJpbmcoMzYpfWZ1bmN0aW9uIFMoZSx0LG4scixhKXt2YXIgbD10eXBlb2YgZTtcInVuZGVmaW5lZFwiIT09bCYmXCJib29sZWFuXCIhPT1sfHwoZT1udWxsKTt2YXIgcz0hMTtpZihudWxsPT09ZSlzPSEwO2Vsc2Ugc3dpdGNoKGwpe2Nhc2VcInN0cmluZ1wiOmNhc2VcIm51bWJlclwiOnM9ITA7YnJlYWs7Y2FzZVwib2JqZWN0XCI6c3dpdGNoKGUuJCR0eXBlb2Ype2Nhc2UgbzpjYXNlIGk6cz0hMH19aWYocylyZXR1cm4gYT1hKHM9ZSksZT1cIlwiPT09cj9cIi5cIitFKHMsMCk6cixBcnJheS5pc0FycmF5KGEpPyhuPVwiXCIsbnVsbCE9ZSYmKG49ZS5yZXBsYWNlKEwsXCIkJi9cIikrXCIvXCIpLFMoYSx0LG4sXCJcIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSkpOm51bGwhPWEmJihPKGEpJiYoYT1mdW5jdGlvbihlLHQpe3JldHVybnskJHR5cGVvZjpvLHR5cGU6ZS50eXBlLGtleTp0LHJlZjplLnJlZixwcm9wczplLnByb3BzLF9vd25lcjplLl9vd25lcn19KGEsbisoIWEua2V5fHxzJiZzLmtleT09PWEua2V5P1wiXCI6KFwiXCIrYS5rZXkpLnJlcGxhY2UoTCxcIiQmL1wiKStcIi9cIikrZSkpLHQucHVzaChhKSksMTtpZihzPTAscj1cIlwiPT09cj9cIi5cIjpyK1wiOlwiLEFycmF5LmlzQXJyYXkoZSkpZm9yKHZhciBjPTA7YzxlLmxlbmd0aDtjKyspe3ZhciB1PXIrRShsPWVbY10sYyk7cys9UyhsLHQsbix1LGEpfWVsc2UgaWYodT1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09PWV8fFwib2JqZWN0XCIhPXR5cGVvZiBlP251bGw6XCJmdW5jdGlvblwiPT10eXBlb2YoZT1kJiZlW2RdfHxlW1wiQEBpdGVyYXRvclwiXSk/ZTpudWxsfShlKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiB1KWZvcihlPXUuY2FsbChlKSxjPTA7IShsPWUubmV4dCgpKS5kb25lOylzKz1TKGw9bC52YWx1ZSx0LG4sdT1yK0UobCxjKyspLGEpO2Vsc2UgaWYoXCJvYmplY3RcIj09PWwpdGhyb3cgdD1cIlwiK2UsRXJyb3IocCgzMSxcIltvYmplY3QgT2JqZWN0XVwiPT09dD9cIm9iamVjdCB3aXRoIGtleXMge1wiK09iamVjdC5rZXlzKGUpLmpvaW4oXCIsIFwiKStcIn1cIjp0KSk7cmV0dXJuIHN9ZnVuY3Rpb24gaihlLHQsbil7aWYobnVsbD09ZSlyZXR1cm4gZTt2YXIgcj1bXSxvPTA7cmV0dXJuIFMoZSxyLFwiXCIsXCJcIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHQuY2FsbChuLGUsbysrKX0pKSxyfWZ1bmN0aW9uIE0oZSl7aWYoLTE9PT1lLl9zdGF0dXMpe3ZhciB0PWUuX3Jlc3VsdDt0PXQoKSxlLl9zdGF0dXM9MCxlLl9yZXN1bHQ9dCx0LnRoZW4oKGZ1bmN0aW9uKHQpezA9PT1lLl9zdGF0dXMmJih0PXQuZGVmYXVsdCxlLl9zdGF0dXM9MSxlLl9yZXN1bHQ9dCl9KSwoZnVuY3Rpb24odCl7MD09PWUuX3N0YXR1cyYmKGUuX3N0YXR1cz0yLGUuX3Jlc3VsdD10KX0pKX1pZigxPT09ZS5fc3RhdHVzKXJldHVybiBlLl9yZXN1bHQ7dGhyb3cgZS5fcmVzdWx0fXZhciBrPXtjdXJyZW50Om51bGx9O2Z1bmN0aW9uIFIoKXt2YXIgZT1rLmN1cnJlbnQ7aWYobnVsbD09PWUpdGhyb3cgRXJyb3IocCgzMjEpKTtyZXR1cm4gZX12YXIgUD17UmVhY3RDdXJyZW50RGlzcGF0Y2hlcjprLFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnOnt0cmFuc2l0aW9uOjB9LFJlYWN0Q3VycmVudE93bmVyOncsSXNTb21lUmVuZGVyZXJBY3Rpbmc6e2N1cnJlbnQ6ITF9LGFzc2lnbjpyfTt0LkNoaWxkcmVuPXttYXA6aixmb3JFYWNoOmZ1bmN0aW9uKGUsdCxuKXtqKGUsKGZ1bmN0aW9uKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxuKX0sY291bnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9MDtyZXR1cm4gaihlLChmdW5jdGlvbigpe3QrK30pKSx0fSx0b0FycmF5OmZ1bmN0aW9uKGUpe3JldHVybiBqKGUsKGZ1bmN0aW9uKGUpe3JldHVybiBlfSkpfHxbXX0sb25seTpmdW5jdGlvbihlKXtpZighTyhlKSl0aHJvdyBFcnJvcihwKDE0MykpO3JldHVybiBlfX0sdC5Db21wb25lbnQ9dix0LlB1cmVDb21wb25lbnQ9Qyx0Ll9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEPVAsdC5jbG9uZUVsZW1lbnQ9ZnVuY3Rpb24oZSx0LG4pe2lmKG51bGw9PWUpdGhyb3cgRXJyb3IocCgyNjcsZSkpO3ZhciBpPXIoe30sZS5wcm9wcyksYT1lLmtleSxsPWUucmVmLHM9ZS5fb3duZXI7aWYobnVsbCE9dCl7aWYodm9pZCAwIT09dC5yZWYmJihsPXQucmVmLHM9dy5jdXJyZW50KSx2b2lkIDAhPT10LmtleSYmKGE9XCJcIit0LmtleSksZS50eXBlJiZlLnR5cGUuZGVmYXVsdFByb3BzKXZhciBjPWUudHlwZS5kZWZhdWx0UHJvcHM7Zm9yKHUgaW4gdCliLmNhbGwodCx1KSYmIXguaGFzT3duUHJvcGVydHkodSkmJihpW3VdPXZvaWQgMD09PXRbdV0mJnZvaWQgMCE9PWM/Y1t1XTp0W3VdKX12YXIgdT1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PXUpaS5jaGlsZHJlbj1uO2Vsc2UgaWYoMTx1KXtjPUFycmF5KHUpO2Zvcih2YXIgZj0wO2Y8dTtmKyspY1tmXT1hcmd1bWVudHNbZisyXTtpLmNoaWxkcmVuPWN9cmV0dXJueyQkdHlwZW9mOm8sdHlwZTplLnR5cGUsa2V5OmEscmVmOmwscHJvcHM6aSxfb3duZXI6c319LHQuY3JlYXRlQ29udGV4dD1mdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD1udWxsKSwoZT17JCR0eXBlb2Y6bCxfY2FsY3VsYXRlQ2hhbmdlZEJpdHM6dCxfY3VycmVudFZhbHVlOmUsX2N1cnJlbnRWYWx1ZTI6ZSxfdGhyZWFkQ291bnQ6MCxQcm92aWRlcjpudWxsLENvbnN1bWVyOm51bGx9KS5Qcm92aWRlcj17JCR0eXBlb2Y6YSxfY29udGV4dDplfSxlLkNvbnN1bWVyPWV9LHQuY3JlYXRlRWxlbWVudD1fLHQuY3JlYXRlRmFjdG9yeT1mdW5jdGlvbihlKXt2YXIgdD1fLmJpbmQobnVsbCxlKTtyZXR1cm4gdC50eXBlPWUsdH0sdC5jcmVhdGVSZWY9ZnVuY3Rpb24oKXtyZXR1cm57Y3VycmVudDpudWxsfX0sdC5mb3J3YXJkUmVmPWZ1bmN0aW9uKGUpe3JldHVybnskJHR5cGVvZjpzLHJlbmRlcjplfX0sdC5pc1ZhbGlkRWxlbWVudD1PLHQubGF6eT1mdW5jdGlvbihlKXtyZXR1cm57JCR0eXBlb2Y6dSxfcGF5bG9hZDp7X3N0YXR1czotMSxfcmVzdWx0OmV9LF9pbml0Ok19fSx0Lm1lbW89ZnVuY3Rpb24oZSx0KXtyZXR1cm57JCR0eXBlb2Y6Yyx0eXBlOmUsY29tcGFyZTp2b2lkIDA9PT10P251bGw6dH19LHQudXNlQ2FsbGJhY2s9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUigpLnVzZUNhbGxiYWNrKGUsdCl9LHQudXNlQ29udGV4dD1mdW5jdGlvbihlLHQpe3JldHVybiBSKCkudXNlQ29udGV4dChlLHQpfSx0LnVzZURlYnVnVmFsdWU9ZnVuY3Rpb24oKXt9LHQudXNlRWZmZWN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIFIoKS51c2VFZmZlY3QoZSx0KX0sdC51c2VJbXBlcmF0aXZlSGFuZGxlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUigpLnVzZUltcGVyYXRpdmVIYW5kbGUoZSx0LG4pfSx0LnVzZUxheW91dEVmZmVjdD1mdW5jdGlvbihlLHQpe3JldHVybiBSKCkudXNlTGF5b3V0RWZmZWN0KGUsdCl9LHQudXNlTWVtbz1mdW5jdGlvbihlLHQpe3JldHVybiBSKCkudXNlTWVtbyhlLHQpfSx0LnVzZVJlZHVjZXI9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBSKCkudXNlUmVkdWNlcihlLHQsbil9LHQudXNlUmVmPWZ1bmN0aW9uKGUpe3JldHVybiBSKCkudXNlUmVmKGUpfSx0LnVzZVN0YXRlPWZ1bmN0aW9uKGUpe3JldHVybiBSKCkudXNlU3RhdGUoZSl9LHQudmVyc2lvbj1cIjE3LjAuMlwifSw3Mzc4OihlLHQsbik9PntcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9bigxNTM1KX0sMjkyMTooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7bi5yKHQpLG4uZCh0LHtTZXJ2ZXJTdHlsZVNoZWV0OigpPT5wdCxTdHlsZVNoZWV0Q29uc3VtZXI6KCk9Pmd0LFN0eWxlU2hlZXRDb250ZXh0OigpPT5odCxTdHlsZVNoZWV0TWFuYWdlcjooKT0+dnQsVGhlbWVDb25zdW1lcjooKT0+ZnQsVGhlbWVDb250ZXh0OigpPT51dCxUaGVtZVByb3ZpZGVyOigpPT5kdCxfX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfSEFVTlRFRF9CWV9TUE9PS1lfR0hPU1RTOigpPT5FdCxjcmVhdGVHbG9iYWxTdHlsZTooKT0+eHQsY3NzOigpPT5CZSxkZWZhdWx0OigpPT5TdCxpc1N0eWxlZENvbXBvbmVudDooKT0+TixrZXlmcmFtZXM6KCk9Pk90LHdpdGhUaGVtZTooKT0+THR9KTt2YXIgcj1uKDE5NDYpLG89bi5uKHIpLGk9big1MjQ2KSxhPW4ubihpKSxsPW4oNzM3OCk7Y29uc3Qgcz17YW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6MSxib3JkZXJJbWFnZU91dHNldDoxLGJvcmRlckltYWdlU2xpY2U6MSxib3JkZXJJbWFnZVdpZHRoOjEsYm94RmxleDoxLGJveEZsZXhHcm91cDoxLGJveE9yZGluYWxHcm91cDoxLGNvbHVtbkNvdW50OjEsY29sdW1uczoxLGZsZXg6MSxmbGV4R3JvdzoxLGZsZXhQb3NpdGl2ZToxLGZsZXhTaHJpbms6MSxmbGV4TmVnYXRpdmU6MSxmbGV4T3JkZXI6MSxncmlkUm93OjEsZ3JpZFJvd0VuZDoxLGdyaWRSb3dTcGFuOjEsZ3JpZFJvd1N0YXJ0OjEsZ3JpZENvbHVtbjoxLGdyaWRDb2x1bW5FbmQ6MSxncmlkQ29sdW1uU3BhbjoxLGdyaWRDb2x1bW5TdGFydDoxLG1zR3JpZFJvdzoxLG1zR3JpZFJvd1NwYW46MSxtc0dyaWRDb2x1bW46MSxtc0dyaWRDb2x1bW5TcGFuOjEsZm9udFdlaWdodDoxLGxpbmVIZWlnaHQ6MSxvcGFjaXR5OjEsb3JkZXI6MSxvcnBoYW5zOjEsdGFiU2l6ZToxLHdpZG93czoxLHpJbmRleDoxLHpvb206MSxXZWJraXRMaW5lQ2xhbXA6MSxmaWxsT3BhY2l0eToxLGZsb29kT3BhY2l0eToxLHN0b3BPcGFjaXR5OjEsc3Ryb2tlRGFzaGFycmF5OjEsc3Ryb2tlRGFzaG9mZnNldDoxLHN0cm9rZU1pdGVybGltaXQ6MSxzdHJva2VPcGFjaXR5OjEsc3Ryb2tlV2lkdGg6MX07dmFyIGM9big5MTg1KSx1PU51bWJlci5pc05hTnx8ZnVuY3Rpb24oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGUmJmUhPWV9O2Z1bmN0aW9uIGYoZSx0KXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKHI9ZVtuXSxvPXRbbl0sIShyPT09b3x8dShyKSYmdShvKSkpcmV0dXJuITE7dmFyIHIsbztyZXR1cm4hMH1jb25zdCBkPWZ1bmN0aW9uKGUsdCl7dmFyIG47dm9pZCAwPT09dCYmKHQ9Zik7dmFyIHIsbz1bXSxpPSExO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgYT1bXSxsPTA7bDxhcmd1bWVudHMubGVuZ3RoO2wrKylhW2xdPWFyZ3VtZW50c1tsXTtyZXR1cm4gaSYmbj09PXRoaXMmJnQoYSxvKXx8KHI9ZS5hcHBseSh0aGlzLGEpLGk9ITAsbj10aGlzLG89YSkscn19O3ZhciBwPS9eKChjaGlsZHJlbnxkYW5nZXJvdXNseVNldElubmVySFRNTHxrZXl8cmVmfGF1dG9Gb2N1c3xkZWZhdWx0VmFsdWV8ZGVmYXVsdENoZWNrZWR8aW5uZXJIVE1MfHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ3xzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmd8dmFsdWVMaW5rfGFjY2VwdHxhY2NlcHRDaGFyc2V0fGFjY2Vzc0tleXxhY3Rpb258YWxsb3d8YWxsb3dVc2VyTWVkaWF8YWxsb3dQYXltZW50UmVxdWVzdHxhbGxvd0Z1bGxTY3JlZW58YWxsb3dUcmFuc3BhcmVuY3l8YWx0fGFzeW5jfGF1dG9Db21wbGV0ZXxhdXRvUGxheXxjYXB0dXJlfGNlbGxQYWRkaW5nfGNlbGxTcGFjaW5nfGNoYWxsZW5nZXxjaGFyU2V0fGNoZWNrZWR8Y2l0ZXxjbGFzc0lEfGNsYXNzTmFtZXxjb2xzfGNvbFNwYW58Y29udGVudHxjb250ZW50RWRpdGFibGV8Y29udGV4dE1lbnV8Y29udHJvbHN8Y29udHJvbHNMaXN0fGNvb3Jkc3xjcm9zc09yaWdpbnxkYXRhfGRhdGVUaW1lfGRlY29kaW5nfGRlZmF1bHR8ZGVmZXJ8ZGlyfGRpc2FibGVkfGRpc2FibGVQaWN0dXJlSW5QaWN0dXJlfGRvd25sb2FkfGRyYWdnYWJsZXxlbmNUeXBlfGZvcm18Zm9ybUFjdGlvbnxmb3JtRW5jVHlwZXxmb3JtTWV0aG9kfGZvcm1Ob1ZhbGlkYXRlfGZvcm1UYXJnZXR8ZnJhbWVCb3JkZXJ8aGVhZGVyc3xoZWlnaHR8aGlkZGVufGhpZ2h8aHJlZnxocmVmTGFuZ3xodG1sRm9yfGh0dHBFcXVpdnxpZHxpbnB1dE1vZGV8aW50ZWdyaXR5fGlzfGtleVBhcmFtc3xrZXlUeXBlfGtpbmR8bGFiZWx8bGFuZ3xsaXN0fGxvYWRpbmd8bG9vcHxsb3d8bWFyZ2luSGVpZ2h0fG1hcmdpbldpZHRofG1heHxtYXhMZW5ndGh8bWVkaWF8bWVkaWFHcm91cHxtZXRob2R8bWlufG1pbkxlbmd0aHxtdWx0aXBsZXxtdXRlZHxuYW1lfG5vbmNlfG5vVmFsaWRhdGV8b3BlbnxvcHRpbXVtfHBhdHRlcm58cGxhY2Vob2xkZXJ8cGxheXNJbmxpbmV8cG9zdGVyfHByZWxvYWR8cHJvZmlsZXxyYWRpb0dyb3VwfHJlYWRPbmx5fHJlZmVycmVyUG9saWN5fHJlbHxyZXF1aXJlZHxyZXZlcnNlZHxyb2xlfHJvd3N8cm93U3BhbnxzYW5kYm94fHNjb3BlfHNjb3BlZHxzY3JvbGxpbmd8c2VhbWxlc3N8c2VsZWN0ZWR8c2hhcGV8c2l6ZXxzaXplc3xzbG90fHNwYW58c3BlbGxDaGVja3xzcmN8c3JjRG9jfHNyY0xhbmd8c3JjU2V0fHN0YXJ0fHN0ZXB8c3R5bGV8c3VtbWFyeXx0YWJJbmRleHx0YXJnZXR8dGl0bGV8dHlwZXx1c2VNYXB8dmFsdWV8d2lkdGh8d21vZGV8d3JhcHxhYm91dHxkYXRhdHlwZXxpbmxpc3R8cHJlZml4fHByb3BlcnR5fHJlc291cmNlfHR5cGVvZnx2b2NhYnxhdXRvQ2FwaXRhbGl6ZXxhdXRvQ29ycmVjdHxhdXRvU2F2ZXxjb2xvcnxpbmVydHxpdGVtUHJvcHxpdGVtU2NvcGV8aXRlbVR5cGV8aXRlbUlEfGl0ZW1SZWZ8b258cmVzdWx0c3xzZWN1cml0eXx1bnNlbGVjdGFibGV8YWNjZW50SGVpZ2h0fGFjY3VtdWxhdGV8YWRkaXRpdmV8YWxpZ25tZW50QmFzZWxpbmV8YWxsb3dSZW9yZGVyfGFscGhhYmV0aWN8YW1wbGl0dWRlfGFyYWJpY0Zvcm18YXNjZW50fGF0dHJpYnV0ZU5hbWV8YXR0cmlidXRlVHlwZXxhdXRvUmV2ZXJzZXxhemltdXRofGJhc2VGcmVxdWVuY3l8YmFzZWxpbmVTaGlmdHxiYXNlUHJvZmlsZXxiYm94fGJlZ2lufGJpYXN8Ynl8Y2FsY01vZGV8Y2FwSGVpZ2h0fGNsaXB8Y2xpcFBhdGhVbml0c3xjbGlwUGF0aHxjbGlwUnVsZXxjb2xvckludGVycG9sYXRpb258Y29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyc3xjb2xvclByb2ZpbGV8Y29sb3JSZW5kZXJpbmd8Y29udGVudFNjcmlwdFR5cGV8Y29udGVudFN0eWxlVHlwZXxjdXJzb3J8Y3h8Y3l8ZHxkZWNlbGVyYXRlfGRlc2NlbnR8ZGlmZnVzZUNvbnN0YW50fGRpcmVjdGlvbnxkaXNwbGF5fGRpdmlzb3J8ZG9taW5hbnRCYXNlbGluZXxkdXJ8ZHh8ZHl8ZWRnZU1vZGV8ZWxldmF0aW9ufGVuYWJsZUJhY2tncm91bmR8ZW5kfGV4cG9uZW50fGV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWR8ZmlsbHxmaWxsT3BhY2l0eXxmaWxsUnVsZXxmaWx0ZXJ8ZmlsdGVyUmVzfGZpbHRlclVuaXRzfGZsb29kQ29sb3J8Zmxvb2RPcGFjaXR5fGZvY3VzYWJsZXxmb250RmFtaWx5fGZvbnRTaXplfGZvbnRTaXplQWRqdXN0fGZvbnRTdHJldGNofGZvbnRTdHlsZXxmb250VmFyaWFudHxmb250V2VpZ2h0fGZvcm1hdHxmcm9tfGZyfGZ4fGZ5fGcxfGcyfGdseXBoTmFtZXxnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbHxnbHlwaE9yaWVudGF0aW9uVmVydGljYWx8Z2x5cGhSZWZ8Z3JhZGllbnRUcmFuc2Zvcm18Z3JhZGllbnRVbml0c3xoYW5naW5nfGhvcml6QWR2WHxob3Jpek9yaWdpblh8aWRlb2dyYXBoaWN8aW1hZ2VSZW5kZXJpbmd8aW58aW4yfGludGVyY2VwdHxrfGsxfGsyfGszfGs0fGtlcm5lbE1hdHJpeHxrZXJuZWxVbml0TGVuZ3RofGtlcm5pbmd8a2V5UG9pbnRzfGtleVNwbGluZXN8a2V5VGltZXN8bGVuZ3RoQWRqdXN0fGxldHRlclNwYWNpbmd8bGlnaHRpbmdDb2xvcnxsaW1pdGluZ0NvbmVBbmdsZXxsb2NhbHxtYXJrZXJFbmR8bWFya2VyTWlkfG1hcmtlclN0YXJ0fG1hcmtlckhlaWdodHxtYXJrZXJVbml0c3xtYXJrZXJXaWR0aHxtYXNrfG1hc2tDb250ZW50VW5pdHN8bWFza1VuaXRzfG1hdGhlbWF0aWNhbHxtb2RlfG51bU9jdGF2ZXN8b2Zmc2V0fG9wYWNpdHl8b3BlcmF0b3J8b3JkZXJ8b3JpZW50fG9yaWVudGF0aW9ufG9yaWdpbnxvdmVyZmxvd3xvdmVybGluZVBvc2l0aW9ufG92ZXJsaW5lVGhpY2tuZXNzfHBhbm9zZTF8cGFpbnRPcmRlcnxwYXRoTGVuZ3RofHBhdHRlcm5Db250ZW50VW5pdHN8cGF0dGVyblRyYW5zZm9ybXxwYXR0ZXJuVW5pdHN8cG9pbnRlckV2ZW50c3xwb2ludHN8cG9pbnRzQXRYfHBvaW50c0F0WXxwb2ludHNBdFp8cHJlc2VydmVBbHBoYXxwcmVzZXJ2ZUFzcGVjdFJhdGlvfHByaW1pdGl2ZVVuaXRzfHJ8cmFkaXVzfHJlZlh8cmVmWXxyZW5kZXJpbmdJbnRlbnR8cmVwZWF0Q291bnR8cmVwZWF0RHVyfHJlcXVpcmVkRXh0ZW5zaW9uc3xyZXF1aXJlZEZlYXR1cmVzfHJlc3RhcnR8cmVzdWx0fHJvdGF0ZXxyeHxyeXxzY2FsZXxzZWVkfHNoYXBlUmVuZGVyaW5nfHNsb3BlfHNwYWNpbmd8c3BlY3VsYXJDb25zdGFudHxzcGVjdWxhckV4cG9uZW50fHNwZWVkfHNwcmVhZE1ldGhvZHxzdGFydE9mZnNldHxzdGREZXZpYXRpb258c3RlbWh8c3RlbXZ8c3RpdGNoVGlsZXN8c3RvcENvbG9yfHN0b3BPcGFjaXR5fHN0cmlrZXRocm91Z2hQb3NpdGlvbnxzdHJpa2V0aHJvdWdoVGhpY2tuZXNzfHN0cmluZ3xzdHJva2V8c3Ryb2tlRGFzaGFycmF5fHN0cm9rZURhc2hvZmZzZXR8c3Ryb2tlTGluZWNhcHxzdHJva2VMaW5lam9pbnxzdHJva2VNaXRlcmxpbWl0fHN0cm9rZU9wYWNpdHl8c3Ryb2tlV2lkdGh8c3VyZmFjZVNjYWxlfHN5c3RlbUxhbmd1YWdlfHRhYmxlVmFsdWVzfHRhcmdldFh8dGFyZ2V0WXx0ZXh0QW5jaG9yfHRleHREZWNvcmF0aW9ufHRleHRSZW5kZXJpbmd8dGV4dExlbmd0aHx0b3x0cmFuc2Zvcm18dTF8dTJ8dW5kZXJsaW5lUG9zaXRpb258dW5kZXJsaW5lVGhpY2tuZXNzfHVuaWNvZGV8dW5pY29kZUJpZGl8dW5pY29kZVJhbmdlfHVuaXRzUGVyRW18dkFscGhhYmV0aWN8dkhhbmdpbmd8dklkZW9ncmFwaGljfHZNYXRoZW1hdGljYWx8dmFsdWVzfHZlY3RvckVmZmVjdHx2ZXJzaW9ufHZlcnRBZHZZfHZlcnRPcmlnaW5YfHZlcnRPcmlnaW5ZfHZpZXdCb3h8dmlld1RhcmdldHx2aXNpYmlsaXR5fHdpZHRoc3x3b3JkU3BhY2luZ3x3cml0aW5nTW9kZXx4fHhIZWlnaHR8eDF8eDJ8eENoYW5uZWxTZWxlY3Rvcnx4bGlua0FjdHVhdGV8eGxpbmtBcmNyb2xlfHhsaW5rSHJlZnx4bGlua1JvbGV8eGxpbmtTaG93fHhsaW5rVGl0bGV8eGxpbmtUeXBlfHhtbEJhc2V8eG1sbnN8eG1sbnNYbGlua3x4bWxMYW5nfHhtbFNwYWNlfHl8eTF8eTJ8eUNoYW5uZWxTZWxlY3Rvcnx6fHpvb21BbmRQYW58Zm9yfGNsYXNzfGF1dG9mb2N1cyl8KChbRGRdW0FhXVtUdF1bQWFdfFtBYV1bUnJdW0lpXVtBYV18eCktLiopKSQvO2NvbnN0IGg9ZnVuY3Rpb24oZSl7dmFyIHQ9e307cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB2b2lkIDA9PT10W25dJiYodFtuXT1lKG4pKSx0W25dfX0oKGZ1bmN0aW9uKGUpe3JldHVybiBwLnRlc3QoZSl8fDExMT09PWUuY2hhckNvZGVBdCgwKSYmMTEwPT09ZS5jaGFyQ29kZUF0KDEpJiZlLmNoYXJDb2RlQXQoMik8OTF9KSk7ZnVuY3Rpb24gZyhlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpfWZ1bmN0aW9uIHYoZSl7cmV0dXJuXCJVbmRlZmluZWRcIj09PWcoZSl9ZnVuY3Rpb24gbShlKXtyZXR1cm5cIk51bGxcIj09PWcoZSl9ZnVuY3Rpb24gQyhlKXtyZXR1cm5cIk9iamVjdFwiPT09ZyhlKSYmKGUuY29uc3RydWN0b3I9PT1PYmplY3QmJk9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PU9iamVjdC5wcm90b3R5cGUpfWZ1bmN0aW9uIHkoZSl7cmV0dXJuXCJBcnJheVwiPT09ZyhlKX1mdW5jdGlvbiB3KGUpe3JldHVyblwiU3ltYm9sXCI9PT1nKGUpfXZhciBiLHgsXyxPLEw7Yj1tLHg9djtmdW5jdGlvbiBFKCl7Zm9yKHZhciBlPTAsdD0wLG49YXJndW1lbnRzLmxlbmd0aDt0PG47dCsrKWUrPWFyZ3VtZW50c1t0XS5sZW5ndGg7dmFyIHI9QXJyYXkoZSksbz0wO2Zvcih0PTA7dDxuO3QrKylmb3IodmFyIGk9YXJndW1lbnRzW3RdLGE9MCxsPWkubGVuZ3RoO2E8bDthKyssbysrKXJbb109aVthXTtyZXR1cm4gcn1mdW5jdGlvbiBTKGUsdCxuLHIpe3ZhciBvPXIucHJvcGVydHlJc0VudW1lcmFibGUodCk/XCJlbnVtZXJhYmxlXCI6XCJub25lbnVtZXJhYmxlXCI7XCJlbnVtZXJhYmxlXCI9PT1vJiYoZVt0XT1uKSxcIm5vbmVudW1lcmFibGVcIj09PW8mJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBqKGUsdCxuKXtpZighQyh0KSlyZXR1cm4gbiYmeShuKSYmbi5mb3JFYWNoKChmdW5jdGlvbihuKXt0PW4oZSx0KX0pKSx0O3ZhciByPXt9O0MoZSkmJihyPUUoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSksT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKSkucmVkdWNlKChmdW5jdGlvbihuLHIpe3ZhciBvPWVbcl07cmV0dXJuKCF3KHIpJiYhT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModCkuaW5jbHVkZXMocil8fHcocikmJiFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmluY2x1ZGVzKHIpKSYmUyhuLHIsbyxlKSxufSkse30pKTtyZXR1cm4gRShPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KSxPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpKS5yZWR1Y2UoKGZ1bmN0aW9uKHIsbyl7dmFyIGk9dFtvXSxhPUMoZSk/ZVtvXTp2b2lkIDA7cmV0dXJuIG4mJnkobikmJm4uZm9yRWFjaCgoZnVuY3Rpb24oZSl7aT1lKGEsaSl9KSksdm9pZCAwIT09YSYmQyhpKSYmKGk9aihhLGksbikpLFMocixvLGksdCkscn0pLHIpfWNvbnN0IE09ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXRbbi0xXT1hcmd1bWVudHNbbl07dmFyIHI9bnVsbCxvPWU7cmV0dXJuIEMoZSkmJmUuZXh0ZW5zaW9ucyYmMT09PU9iamVjdC5rZXlzKGUpLmxlbmd0aCYmKG89e30scj1lLmV4dGVuc2lvbnMpLHQucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBqKGUsdCxyKX0pLG8pfTt2YXIgaz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1bZVswXV0scj0wLG89dC5sZW5ndGg7cjxvO3IrPTEpbi5wdXNoKHRbcl0sZVtyKzFdKTtyZXR1cm4gbn0sUj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT9cInN5bWJvbFwiOnR5cGVvZiBlfSxQPWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX0sST1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbih0LG4scil7cmV0dXJuIG4mJmUodC5wcm90b3R5cGUsbiksciYmZSh0LHIpLHR9fSgpLEE9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sVD1mdW5jdGlvbihlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiK3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfSxIPWZ1bmN0aW9uKGUsdCl7aWYoIWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiF0fHxcIm9iamVjdFwiIT10eXBlb2YgdCYmXCJmdW5jdGlvblwiIT10eXBlb2YgdD9lOnR9LEI9ZnVuY3Rpb24oZSl7cmV0dXJuXCJvYmplY3RcIj09PSh2b2lkIDA9PT1lP1widW5kZWZpbmVkXCI6UihlKSkmJmUuY29uc3RydWN0b3I9PT1PYmplY3R9LFY9T2JqZWN0LmZyZWV6ZShbXSksRD1PYmplY3QuZnJlZXplKHt9KTtmdW5jdGlvbiBaKGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGV9ZnVuY3Rpb24gJChlKXtyZXR1cm4gZS5kaXNwbGF5TmFtZXx8ZS5uYW1lfHxcIkNvbXBvbmVudFwifWZ1bmN0aW9uIE4oZSl7cmV0dXJuIGUmJlwic3RyaW5nXCI9PXR5cGVvZiBlLnN0eWxlZENvbXBvbmVudElkfXZhciBGPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBwcm9jZXNzJiYocHJvY2Vzcy5lbnYuUkVBQ1RfQVBQX1NDX0FUVFJ8fHByb2Nlc3MuZW52LlNDX0FUVFIpfHxcImRhdGEtc3R5bGVkXCIsVT1cImRhdGEtc3R5bGVkLXZlcnNpb25cIixXPVwiZGF0YS1zdHlsZWQtc3RyZWFtZWRcIix6PVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJlwiSFRNTEVsZW1lbnRcImluIHdpbmRvdyxHPVwiYm9vbGVhblwiPT10eXBlb2YgU0NfRElTQUJMRV9TUEVFRFkmJlNDX0RJU0FCTEVfU1BFRURZfHxcInVuZGVmaW5lZFwiIT10eXBlb2YgcHJvY2VzcyYmKHByb2Nlc3MuZW52LlJFQUNUX0FQUF9TQ19ESVNBQkxFX1NQRUVEWXx8cHJvY2Vzcy5lbnYuU0NfRElTQUJMRV9TUEVFRFkpfHwhMSxxPXt9O3ZhciBZPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7UCh0aGlzLHQpO2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoLG89QXJyYXkocj4xP3ItMTowKSxpPTE7aTxyO2krKylvW2ktMV09YXJndW1lbnRzW2ldO3ZhciBhPUgodGhpcyxlLmNhbGwodGhpcyxcIkFuIGVycm9yIG9jY3VycmVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3N0eWxlZC1jb21wb25lbnRzL3N0eWxlZC1jb21wb25lbnRzL2Jsb2IvbWFzdGVyL3BhY2thZ2VzL3N0eWxlZC1jb21wb25lbnRzL3NyYy91dGlscy9lcnJvcnMubWQjXCIrbitcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cIisoby5sZW5ndGg+MD9cIiBBZGRpdGlvbmFsIGFyZ3VtZW50czogXCIrby5qb2luKFwiLCBcIik6XCJcIikpKTtyZXR1cm4gSChhKX1yZXR1cm4gVCh0LGUpLHR9KEVycm9yKSxLPS9eW15cXFNcXG5dKj9cXC9cXCogc2MtY29tcG9uZW50LWlkOlxccyooXFxTKylcXHMrXFwqXFwvL2dtLFg9ZnVuY3Rpb24oZSl7dmFyIHQ9XCJcIisoZXx8XCJcIiksbj1bXTtyZXR1cm4gdC5yZXBsYWNlKEssKGZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gbi5wdXNoKHtjb21wb25lbnRJZDp0LG1hdGNoSW5kZXg6cn0pLGV9KSksbi5tYXAoKGZ1bmN0aW9uKGUscil7dmFyIG89ZS5jb21wb25lbnRJZCxpPWUubWF0Y2hJbmRleCxhPW5bcisxXTtyZXR1cm57Y29tcG9uZW50SWQ6byxjc3NGcm9tRE9NOmE/dC5zbGljZShpLGEubWF0Y2hJbmRleCk6dC5zbGljZShpKX19KSl9LEo9L15cXHMqXFwvXFwvLiokL2dtLFE9bmV3KG8oKSkoe2dsb2JhbDohMSxjYXNjYWRlOiEwLGtleWZyYW1lOiExLHByZWZpeDohMSxjb21wcmVzczohMSxzZW1pY29sb246ITB9KSxlZT1uZXcobygpKSh7Z2xvYmFsOiExLGNhc2NhZGU6ITAsa2V5ZnJhbWU6ITEscHJlZml4OiEwLGNvbXByZXNzOiExLHNlbWljb2xvbjohMX0pLHRlPVtdLG5lPWZ1bmN0aW9uKGUpe2lmKC0yPT09ZSl7dmFyIHQ9dGU7cmV0dXJuIHRlPVtdLHR9fSxyZT1hKCkoKGZ1bmN0aW9uKGUpe3RlLnB1c2goZSl9KSksb2U9dm9pZCAwLGllPXZvaWQgMCxhZT12b2lkIDAsbGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PjAmJi0xIT09bi5zbGljZSgwLHQpLmluZGV4T2YoaWUpJiZuLnNsaWNlKHQtaWUubGVuZ3RoLHQpIT09aWU/XCIuXCIrb2U6ZX07ZWUudXNlKFtmdW5jdGlvbihlLHQsbil7Mj09PWUmJm4ubGVuZ3RoJiZuWzBdLmxhc3RJbmRleE9mKGllKT4wJiYoblswXT1uWzBdLnJlcGxhY2UoYWUsbGUpKX0scmUsbmVdKSxRLnVzZShbcmUsbmVdKTt2YXIgc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIFEoXCJcIixlKX07ZnVuY3Rpb24gY2UoZSx0LG4pe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTpcIiZcIixvPWUuam9pbihcIlwiKS5yZXBsYWNlKEosXCJcIiksaT10JiZuP24rXCIgXCIrdCtcIiB7IFwiK28rXCIgfVwiOm87cmV0dXJuIG9lPXIsaWU9dCxhZT1uZXcgUmVnRXhwKFwiXFxcXFwiK2llK1wiXFxcXGJcIixcImdcIiksZWUobnx8IXQ/XCJcIjp0LGkpfXZhciB1ZT1mdW5jdGlvbigpe3JldHVybiBuLm5jfSxmZT1mdW5jdGlvbihlLHQsbil7biYmKChlW3RdfHwoZVt0XT1PYmplY3QuY3JlYXRlKG51bGwpKSlbbl09ITApfSxkZT1mdW5jdGlvbihlLHQpe2VbdF09T2JqZWN0LmNyZWF0ZShudWxsKX0scGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7cmV0dXJuIHZvaWQgMCE9PWVbdF0mJmVbdF1bbl19fSxoZT1mdW5jdGlvbihlKXt2YXIgdD1cIlwiO2Zvcih2YXIgbiBpbiBlKXQrPU9iamVjdC5rZXlzKGVbbl0pLmpvaW4oXCIgXCIpK1wiIFwiO3JldHVybiB0LnRyaW0oKX0sZ2U9ZnVuY3Rpb24oZSl7aWYoZS5zaGVldClyZXR1cm4gZS5zaGVldDtmb3IodmFyIHQ9ZS5vd25lckRvY3VtZW50LnN0eWxlU2hlZXRzLmxlbmd0aCxuPTA7bjx0O24rPTEpe3ZhciByPWUub3duZXJEb2N1bWVudC5zdHlsZVNoZWV0c1tuXTtpZihyLm93bmVyTm9kZT09PWUpcmV0dXJuIHJ9dGhyb3cgbmV3IFkoMTApfSx2ZT1mdW5jdGlvbihlLHQsbil7aWYoIXQpcmV0dXJuITE7dmFyIHI9ZS5jc3NSdWxlcy5sZW5ndGg7dHJ5e2UuaW5zZXJ0UnVsZSh0LG48PXI/bjpyKX1jYXRjaChlKXtyZXR1cm4hMX1yZXR1cm4hMH0sbWU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJcXG4vKiBzYy1jb21wb25lbnQtaWQ6IFwiK2UrXCIgKi9cXG5cIn0sQ2U9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MCxyPTA7cjw9dDtyKz0xKW4rPWVbcl07cmV0dXJuIG59LHllPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByPXVlKCk7cmV0dXJuXCI8c3R5bGUgXCIrW3ImJidub25jZT1cIicrcisnXCInLEYrJz1cIicraGUodCkrJ1wiJyxVKyc9XCI0LjQuMVwiJyxuXS5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIikrXCI+XCIrZSgpK1wiPC9zdHlsZT5cIn19LHdlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG4scj0oKG49e30pW0ZdPWhlKHQpLG5bVV09XCI0LjQuMVwiLG4pLG89dWUoKTtyZXR1cm4gbyYmKHIubm9uY2U9byksbC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIixBKHt9LHIse2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MOntfX2h0bWw6ZSgpfX0pKX19LGJlPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyhlKX19LHhlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY3JlYXRlVGV4dE5vZGUobWUodCkpfSxfZT1mdW5jdGlvbiBlKHQsbil7dmFyIHI9dm9pZCAwPT09dD9PYmplY3QuY3JlYXRlKG51bGwpOnQsbz12b2lkIDA9PT1uP09iamVjdC5jcmVhdGUobnVsbCk6bixpPWZ1bmN0aW9uKGUpe3ZhciB0PW9bZV07cmV0dXJuIHZvaWQgMCE9PXQ/dDpvW2VdPVtcIlwiXX0sYT1mdW5jdGlvbigpe3ZhciBlPVwiXCI7Zm9yKHZhciB0IGluIG8pe3ZhciBuPW9bdF1bMF07biYmKGUrPW1lKHQpK24pfXJldHVybiBlfSxsPXtjbG9uZTpmdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKHZhciBuIGluIGUpdFtuXT1BKHt9LGVbbl0pO3JldHVybiB0fShyKSxuPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKHZhciBpIGluIG8pbltpXT1bb1tpXVswXV07cmV0dXJuIGUodCxuKX0sY3NzOmEsZ2V0SWRzOmJlKG8pLGhhc05hbWVGb3JJZDpwZShyKSxpbnNlcnRNYXJrZXI6aSxpbnNlcnRSdWxlczpmdW5jdGlvbihlLHQsbil7aShlKVswXSs9dC5qb2luKFwiIFwiKSxmZShyLGUsbil9LHJlbW92ZVJ1bGVzOmZ1bmN0aW9uKGUpe3ZhciB0PW9bZV07dm9pZCAwIT09dCYmKHRbMF09XCJcIixkZShyLGUpKX0sc2VhbGVkOiExLHN0eWxlVGFnOm51bGwsdG9FbGVtZW50OndlKGEsciksdG9IVE1MOnllKGEscil9O3JldHVybiBsfSxPZT1mdW5jdGlvbihlLHQsbixyLG8pe2lmKHomJiFuKXt2YXIgaT1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZG9jdW1lbnQ7ZT9yPWUub3duZXJEb2N1bWVudDp0JiYocj10Lm93bmVyRG9jdW1lbnQpO3ZhciBvPXIuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO28uc2V0QXR0cmlidXRlKEYsXCJcIiksby5zZXRBdHRyaWJ1dGUoVSxcIjQuNC4xXCIpO3ZhciBpPXVlKCk7aWYoaSYmby5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLGkpLG8uYXBwZW5kQ2hpbGQoci5jcmVhdGVUZXh0Tm9kZShcIlwiKSksZSYmIXQpZS5hcHBlbmRDaGlsZChvKTtlbHNle2lmKCF0fHwhZXx8IXQucGFyZW50Tm9kZSl0aHJvdyBuZXcgWSg2KTt0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG8sbj90OnQubmV4dFNpYmxpbmcpfXJldHVybiBvfShlLHQscik7cmV0dXJuIEc/ZnVuY3Rpb24oZSx0KXt2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpLHI9T2JqZWN0LmNyZWF0ZShudWxsKSxvPXZvaWQgMCE9PXQsaT0hMSxhPWZ1bmN0aW9uKHQpe3ZhciBvPXJbdF07cmV0dXJuIHZvaWQgMCE9PW8/bzooclt0XT14ZShlLm93bmVyRG9jdW1lbnQsdCksZS5hcHBlbmRDaGlsZChyW3RdKSxuW3RdPU9iamVjdC5jcmVhdGUobnVsbCksclt0XSl9LGw9ZnVuY3Rpb24oKXt2YXIgZT1cIlwiO2Zvcih2YXIgdCBpbiByKWUrPXJbdF0uZGF0YTtyZXR1cm4gZX07cmV0dXJue2Nsb25lOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IFkoNSl9LGNzczpsLGdldElkczpiZShyKSxoYXNOYW1lRm9ySWQ6cGUobiksaW5zZXJ0TWFya2VyOmEsaW5zZXJ0UnVsZXM6ZnVuY3Rpb24oZSxyLGwpe2Zvcih2YXIgcz1hKGUpLGM9W10sdT1yLmxlbmd0aCxmPTA7Zjx1O2YrPTEpe3ZhciBkPXJbZl0scD1vO2lmKHAmJi0xIT09ZC5pbmRleE9mKFwiQGltcG9ydFwiKSljLnB1c2goZCk7ZWxzZXtwPSExO3ZhciBoPWY9PT11LTE/XCJcIjpcIiBcIjtzLmFwcGVuZERhdGEoXCJcIitkK2gpfX1mZShuLGUsbCksbyYmYy5sZW5ndGg+MCYmKGk9ITAsdCgpLmluc2VydFJ1bGVzKGUrXCItaW1wb3J0XCIsYykpfSxyZW1vdmVSdWxlczpmdW5jdGlvbihhKXt2YXIgbD1yW2FdO2lmKHZvaWQgMCE9PWwpe3ZhciBzPXhlKGUub3duZXJEb2N1bWVudCxhKTtlLnJlcGxhY2VDaGlsZChzLGwpLHJbYV09cyxkZShuLGEpLG8mJmkmJnQoKS5yZW1vdmVSdWxlcyhhK1wiLWltcG9ydFwiKX19LHNlYWxlZDohMSxzdHlsZVRhZzplLHRvRWxlbWVudDp3ZShsLG4pLHRvSFRNTDp5ZShsLG4pfX0oaSxvKTpmdW5jdGlvbihlLHQpe3ZhciBuPU9iamVjdC5jcmVhdGUobnVsbCkscj1PYmplY3QuY3JlYXRlKG51bGwpLG89W10saT12b2lkIDAhPT10LGE9ITEsbD1mdW5jdGlvbihlKXt2YXIgdD1yW2VdO3JldHVybiB2b2lkIDAhPT10P3Q6KHJbZV09by5sZW5ndGgsby5wdXNoKDApLGRlKG4sZSkscltlXSl9LHM9ZnVuY3Rpb24oKXt2YXIgdD1nZShlKS5jc3NSdWxlcyxuPVwiXCI7Zm9yKHZhciBpIGluIHIpe24rPW1lKGkpO2Zvcih2YXIgYT1yW2ldLGw9Q2UobyxhKSxzPWwtb1thXTtzPGw7cys9MSl7dmFyIGM9dFtzXTt2b2lkIDAhPT1jJiYobis9Yy5jc3NUZXh0KX19cmV0dXJuIG59O3JldHVybntjbG9uZTpmdW5jdGlvbigpe3Rocm93IG5ldyBZKDUpfSxjc3M6cyxnZXRJZHM6YmUociksaGFzTmFtZUZvcklkOnBlKG4pLGluc2VydE1hcmtlcjpsLGluc2VydFJ1bGVzOmZ1bmN0aW9uKHIscyxjKXtmb3IodmFyIHU9bChyKSxmPWdlKGUpLGQ9Q2Uobyx1KSxwPTAsaD1bXSxnPXMubGVuZ3RoLHY9MDt2PGc7dis9MSl7dmFyIG09c1t2XSxDPWk7QyYmLTEhPT1tLmluZGV4T2YoXCJAaW1wb3J0XCIpP2gucHVzaChtKTp2ZShmLG0sZCtwKSYmKEM9ITEscCs9MSl9aSYmaC5sZW5ndGg+MCYmKGE9ITAsdCgpLmluc2VydFJ1bGVzKHIrXCItaW1wb3J0XCIsaCkpLG9bdV0rPXAsZmUobixyLGMpfSxyZW1vdmVSdWxlczpmdW5jdGlvbihsKXt2YXIgcz1yW2xdO2lmKHZvaWQgMCE9PXMmJiExIT09ZS5pc0Nvbm5lY3RlZCl7dmFyIGM9b1tzXTshZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj10LW4sbz10O28+cjtvLT0xKWUuZGVsZXRlUnVsZShvKX0oZ2UoZSksQ2UobyxzKS0xLGMpLG9bc109MCxkZShuLGwpLGkmJmEmJnQoKS5yZW1vdmVSdWxlcyhsK1wiLWltcG9ydFwiKX19LHNlYWxlZDohMSxzdHlsZVRhZzplLHRvRWxlbWVudDp3ZShzLG4pLHRvSFRNTDp5ZShzLG4pfX0oaSxvKX1yZXR1cm4gX2UoKX0sTGU9L1xccysvLEVlPXZvaWQgMDtFZT16P0c/NDA6MWUzOi0xO3ZhciBTZT0wLGplPXZvaWQgMCxNZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2YXIgdD10aGlzLG49YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOno/ZG9jdW1lbnQuaGVhZDpudWxsLHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtQKHRoaXMsZSksdGhpcy5nZXRJbXBvcnRSdWxlVGFnPWZ1bmN0aW9uKCl7dmFyIGU9dC5pbXBvcnRSdWxlVGFnO2lmKHZvaWQgMCE9PWUpcmV0dXJuIGU7dmFyIG49dC50YWdzWzBdO3JldHVybiB0LmltcG9ydFJ1bGVUYWc9T2UodC50YXJnZXQsbj9uLnN0eWxlVGFnOm51bGwsdC5mb3JjZVNlcnZlciwhMCl9LFNlKz0xLHRoaXMuaWQ9U2UsdGhpcy5mb3JjZVNlcnZlcj1yLHRoaXMudGFyZ2V0PXI/bnVsbDpuLHRoaXMudGFnTWFwPXt9LHRoaXMuZGVmZXJyZWQ9e30sdGhpcy5yZWh5ZHJhdGVkTmFtZXM9e30sdGhpcy5pZ25vcmVSZWh5ZHJhdGVkTmFtZXM9e30sdGhpcy50YWdzPVtdLHRoaXMuY2FwYWNpdHk9MSx0aGlzLmNsb25lcz1bXX1yZXR1cm4gZS5wcm90b3R5cGUucmVoeWRyYXRlPWZ1bmN0aW9uKCl7aWYoIXp8fHRoaXMuZm9yY2VTZXJ2ZXIpcmV0dXJuIHRoaXM7dmFyIGU9W10sdD1bXSxuPSExLHI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInN0eWxlW1wiK0YrXCJdW1wiK1UrJz1cIjQuNC4xXCJdJyksbz1yLmxlbmd0aDtpZighbylyZXR1cm4gdGhpcztmb3IodmFyIGk9MDtpPG87aSs9MSl7dmFyIGE9cltpXTtufHwobj0hIWEuZ2V0QXR0cmlidXRlKFcpKTtmb3IodmFyIGwscz0oYS5nZXRBdHRyaWJ1dGUoRil8fFwiXCIpLnRyaW0oKS5zcGxpdChMZSksYz1zLmxlbmd0aCx1PTA7dTxjO3UrPTEpbD1zW3VdLHRoaXMucmVoeWRyYXRlZE5hbWVzW2xdPSEwO3QucHVzaC5hcHBseSh0LFgoYS50ZXh0Q29udGVudCkpLGUucHVzaChhKX12YXIgZj10Lmxlbmd0aDtpZighZilyZXR1cm4gdGhpczt2YXIgZD10aGlzLm1ha2VUYWcobnVsbCk7IWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9MCxvPW4ubGVuZ3RoO3I8bztyKz0xKXt2YXIgaT1uW3JdLGE9aS5jb21wb25lbnRJZCxsPWkuY3NzRnJvbURPTSxzPXNlKGwpO2UuaW5zZXJ0UnVsZXMoYSxzKX1mb3IodmFyIGM9MCx1PXQubGVuZ3RoO2M8dTtjKz0xKXt2YXIgZj10W2NdO2YucGFyZW50Tm9kZSYmZi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGYpfX0oZCxlLHQpLHRoaXMuY2FwYWNpdHk9TWF0aC5tYXgoMSxFZS1mKSx0aGlzLnRhZ3MucHVzaChkKTtmb3IodmFyIHA9MDtwPGY7cCs9MSl0aGlzLnRhZ01hcFt0W3BdLmNvbXBvbmVudElkXT1kO3JldHVybiB0aGlzfSxlLnJlc2V0PWZ1bmN0aW9uKCl7amU9bmV3IGUodm9pZCAwLGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0pLnJlaHlkcmF0ZSgpfSxlLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBlKHRoaXMudGFyZ2V0LHRoaXMuZm9yY2VTZXJ2ZXIpO3JldHVybiB0aGlzLmNsb25lcy5wdXNoKHQpLHQudGFncz10aGlzLnRhZ3MubWFwKChmdW5jdGlvbihlKXtmb3IodmFyIG49ZS5nZXRJZHMoKSxyPWUuY2xvbmUoKSxvPTA7bzxuLmxlbmd0aDtvKz0xKXQudGFnTWFwW25bb11dPXI7cmV0dXJuIHJ9KSksdC5yZWh5ZHJhdGVkTmFtZXM9QSh7fSx0aGlzLnJlaHlkcmF0ZWROYW1lcyksdC5kZWZlcnJlZD1BKHt9LHRoaXMuZGVmZXJyZWQpLHR9LGUucHJvdG90eXBlLnNlYWxBbGxUYWdzPWZ1bmN0aW9uKCl7dGhpcy5jYXBhY2l0eT0xLHRoaXMudGFncy5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnNlYWxlZD0hMH0pKX0sZS5wcm90b3R5cGUubWFrZVRhZz1mdW5jdGlvbihlKXt2YXIgdD1lP2Uuc3R5bGVUYWc6bnVsbDtyZXR1cm4gT2UodGhpcy50YXJnZXQsdCx0aGlzLmZvcmNlU2VydmVyLCExLHRoaXMuZ2V0SW1wb3J0UnVsZVRhZyl9LGUucHJvdG90eXBlLmdldFRhZ0ZvcklkPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMudGFnTWFwW2VdO2lmKHZvaWQgMCE9PXQmJiF0LnNlYWxlZClyZXR1cm4gdDt2YXIgbj10aGlzLnRhZ3NbdGhpcy50YWdzLmxlbmd0aC0xXTtyZXR1cm4gdGhpcy5jYXBhY2l0eS09MSwwPT09dGhpcy5jYXBhY2l0eSYmKHRoaXMuY2FwYWNpdHk9RWUsbj10aGlzLm1ha2VUYWcobiksdGhpcy50YWdzLnB1c2gobikpLHRoaXMudGFnTWFwW2VdPW59LGUucHJvdG90eXBlLmhhc0lkPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT10aGlzLnRhZ01hcFtlXX0sZS5wcm90b3R5cGUuaGFzTmFtZUZvcklkPWZ1bmN0aW9uKGUsdCl7aWYodm9pZCAwPT09dGhpcy5pZ25vcmVSZWh5ZHJhdGVkTmFtZXNbZV0mJnRoaXMucmVoeWRyYXRlZE5hbWVzW3RdKXJldHVybiEwO3ZhciBuPXRoaXMudGFnTWFwW2VdO3JldHVybiB2b2lkIDAhPT1uJiZuLmhhc05hbWVGb3JJZChlLHQpfSxlLnByb3RvdHlwZS5kZWZlcnJlZEluamVjdD1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PXRoaXMudGFnTWFwW2VdKXtmb3IodmFyIG49dGhpcy5jbG9uZXMscj0wO3I8bi5sZW5ndGg7cis9MSluW3JdLmRlZmVycmVkSW5qZWN0KGUsdCk7dGhpcy5nZXRUYWdGb3JJZChlKS5pbnNlcnRNYXJrZXIoZSksdGhpcy5kZWZlcnJlZFtlXT10fX0sZS5wcm90b3R5cGUuaW5qZWN0PWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9dGhpcy5jbG9uZXMsbz0wO288ci5sZW5ndGg7bys9MSlyW29dLmluamVjdChlLHQsbik7dmFyIGk9dGhpcy5nZXRUYWdGb3JJZChlKTtpZih2b2lkIDAhPT10aGlzLmRlZmVycmVkW2VdKXt2YXIgYT10aGlzLmRlZmVycmVkW2VdLmNvbmNhdCh0KTtpLmluc2VydFJ1bGVzKGUsYSxuKSx0aGlzLmRlZmVycmVkW2VdPXZvaWQgMH1lbHNlIGkuaW5zZXJ0UnVsZXMoZSx0LG4pfSxlLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy50YWdNYXBbZV07aWYodm9pZCAwIT09dCl7Zm9yKHZhciBuPXRoaXMuY2xvbmVzLHI9MDtyPG4ubGVuZ3RoO3IrPTEpbltyXS5yZW1vdmUoZSk7dC5yZW1vdmVSdWxlcyhlKSx0aGlzLmlnbm9yZVJlaHlkcmF0ZWROYW1lc1tlXT0hMCx0aGlzLmRlZmVycmVkW2VdPXZvaWQgMH19LGUucHJvdG90eXBlLnRvSFRNTD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRhZ3MubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS50b0hUTUwoKX0pKS5qb2luKFwiXCIpfSxlLnByb3RvdHlwZS50b1JlYWN0RWxlbWVudHM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmlkO3JldHVybiB0aGlzLnRhZ3MubWFwKChmdW5jdGlvbih0LG4pe3ZhciByPVwic2MtXCIrZStcIi1cIituO3JldHVybigwLGwuY2xvbmVFbGVtZW50KSh0LnRvRWxlbWVudCgpLHtrZXk6cn0pfSkpfSxJKGUsbnVsbCxbe2tleTpcIm1hc3RlclwiLGdldDpmdW5jdGlvbigpe3JldHVybiBqZXx8KGplPShuZXcgZSkucmVoeWRyYXRlKCkpfX0se2tleTpcImluc3RhbmNlXCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUubWFzdGVyfX1dKSxlfSgpLGtlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4pe3ZhciByPXRoaXM7UCh0aGlzLGUpLHRoaXMuaW5qZWN0PWZ1bmN0aW9uKGUpe2UuaGFzTmFtZUZvcklkKHIuaWQsci5uYW1lKXx8ZS5pbmplY3Qoci5pZCxyLnJ1bGVzLHIubmFtZSl9LHRoaXMudG9TdHJpbmc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgWSgxMixTdHJpbmcoci5uYW1lKSl9LHRoaXMubmFtZT10LHRoaXMucnVsZXM9bix0aGlzLmlkPVwic2Mta2V5ZnJhbWVzLVwiK3R9cmV0dXJuIGUucHJvdG90eXBlLmdldE5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uYW1lfSxlfSgpLFJlPS8oW0EtWl0pL2csUGU9L15tcy0vO2Z1bmN0aW9uIEllKGUpe3JldHVybiBlLnJlcGxhY2UoUmUsXCItJDFcIikudG9Mb3dlckNhc2UoKS5yZXBsYWNlKFBlLFwiLW1zLVwiKX12YXIgQWU9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWV8fCExPT09ZXx8XCJcIj09PWV9LFRlPWZ1bmN0aW9uIGUodCxuKXt2YXIgcj1bXTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24obil7aWYoIUFlKHRbbl0pKXtpZihCKHRbbl0pKXJldHVybiByLnB1c2guYXBwbHkocixlKHRbbl0sbikpLHI7aWYoWih0W25dKSlyZXR1cm4gci5wdXNoKEllKG4pK1wiOlwiLHRbbl0sXCI7XCIpLHI7ci5wdXNoKEllKG4pK1wiOiBcIisobz1uLChudWxsPT0oaT10W25dKXx8XCJib29sZWFuXCI9PXR5cGVvZiBpfHxcIlwiPT09aT9cIlwiOlwibnVtYmVyXCIhPXR5cGVvZiBpfHwwPT09aXx8byBpbiBzP1N0cmluZyhpKS50cmltKCk6aStcInB4XCIpK1wiO1wiKSl9dmFyIG8saTtyZXR1cm4gcn0pKSxuP1tuK1wiIHtcIl0uY29uY2F0KHIsW1wifVwiXSk6cn07ZnVuY3Rpb24gSGUoZSx0LG4pe2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgcixvPVtdLGk9MCxhPWUubGVuZ3RoO2k8YTtpKz0xKW51bGwhPT0ocj1IZShlW2ldLHQsbikpJiYoQXJyYXkuaXNBcnJheShyKT9vLnB1c2guYXBwbHkobyxyKTpvLnB1c2gocikpO3JldHVybiBvfXJldHVybiBBZShlKT9udWxsOk4oZSk/XCIuXCIrZS5zdHlsZWRDb21wb25lbnRJZDpaKGUpP1wiZnVuY3Rpb25cIiE9dHlwZW9mKGw9ZSl8fGwucHJvdG90eXBlJiZsLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50fHwhdD9lOkhlKGUodCksdCxuKTplIGluc3RhbmNlb2Yga2U/bj8oZS5pbmplY3QobiksZS5nZXROYW1lKCkpOmU6QihlKT9UZShlKTplLnRvU3RyaW5nKCk7dmFyIGx9ZnVuY3Rpb24gQmUoZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1BcnJheSh0PjE/dC0xOjApLHI9MTtyPHQ7cisrKW5bci0xXT1hcmd1bWVudHNbcl07cmV0dXJuIFooZSl8fEIoZSk/SGUoayhWLFtlXS5jb25jYXQobikpKTpIZShrKGUsbikpfWZ1bmN0aW9uIFZlKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOkQ7aWYoISgwLGMuaXNWYWxpZEVsZW1lbnRUeXBlKSh0KSl0aHJvdyBuZXcgWSgxLFN0cmluZyh0KSk7dmFyIHI9ZnVuY3Rpb24oKXtyZXR1cm4gZSh0LG4sQmUuYXBwbHkodm9pZCAwLGFyZ3VtZW50cykpfTtyZXR1cm4gci53aXRoQ29uZmlnPWZ1bmN0aW9uKHIpe3JldHVybiBWZShlLHQsQSh7fSxuLHIpKX0sci5hdHRycz1mdW5jdGlvbihyKXtyZXR1cm4gVmUoZSx0LEEoe30sbix7YXR0cnM6QXJyYXkucHJvdG90eXBlLmNvbmNhdChuLmF0dHJzLHIpLmZpbHRlcihCb29sZWFuKX0pKX0scn1mdW5jdGlvbiBEZShlKXtmb3IodmFyIHQsbj0wfGUubGVuZ3RoLHI9MHxuLG89MDtuPj00Oyl0PTE1NDA0ODM0NzcqKDY1NTM1Jih0PTI1NSZlLmNoYXJDb2RlQXQobyl8KDI1NSZlLmNoYXJDb2RlQXQoKytvKSk8PDh8KDI1NSZlLmNoYXJDb2RlQXQoKytvKSk8PDE2fCgyNTUmZS5jaGFyQ29kZUF0KCsrbykpPDwyNCkpKygoMTU0MDQ4MzQ3NyoodD4+PjE2KSY2NTUzNSk8PDE2KSxyPTE1NDA0ODM0NzcqKDY1NTM1JnIpKygoMTU0MDQ4MzQ3Nyoocj4+PjE2KSY2NTUzNSk8PDE2KV4odD0xNTQwNDgzNDc3Kig2NTUzNSYodF49dD4+PjI0KSkrKCgxNTQwNDgzNDc3Kih0Pj4+MTYpJjY1NTM1KTw8MTYpKSxuLT00LCsrbztzd2l0Y2gobil7Y2FzZSAzOnJePSgyNTUmZS5jaGFyQ29kZUF0KG8rMikpPDwxNjtjYXNlIDI6cl49KDI1NSZlLmNoYXJDb2RlQXQobysxKSk8PDg7Y2FzZSAxOnI9MTU0MDQ4MzQ3NyooNjU1MzUmKHJePTI1NSZlLmNoYXJDb2RlQXQobykpKSsoKDE1NDA0ODM0NzcqKHI+Pj4xNikmNjU1MzUpPDwxNil9cmV0dXJuKChyPTE1NDA0ODM0NzcqKDY1NTM1JihyXj1yPj4+MTMpKSsoKDE1NDA0ODM0NzcqKHI+Pj4xNikmNjU1MzUpPDwxNikpXnI+Pj4xNSk+Pj4wfXZhciBaZT01MiwkZT1mdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShlKyhlPjI1PzM5Ojk3KSl9O2Z1bmN0aW9uIE5lKGUpe3ZhciB0PVwiXCIsbj12b2lkIDA7Zm9yKG49ZTtuPlplO249TWF0aC5mbG9vcihuL1plKSl0PSRlKG4lWmUpK3Q7cmV0dXJuICRlKG4lWmUpK3R9ZnVuY3Rpb24gRmUoZSx0KXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rPTEpe3ZhciByPWVbbl07aWYoQXJyYXkuaXNBcnJheShyKSYmIUZlKHIsdCkpcmV0dXJuITE7aWYoWihyKSYmIU4ocikpcmV0dXJuITF9cmV0dXJuIXQuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuIFooZSl8fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBlKWlmKFooZVt0XSkpcmV0dXJuITA7cmV0dXJuITF9KGUpfSkpfXZhciBVZSxXZT1mdW5jdGlvbihlKXtyZXR1cm4gTmUoRGUoZSkpfSx6ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxuLHIpe1AodGhpcyxlKSx0aGlzLnJ1bGVzPXQsdGhpcy5pc1N0YXRpYz1GZSh0LG4pLHRoaXMuY29tcG9uZW50SWQ9cixNZS5tYXN0ZXIuaGFzSWQocil8fE1lLm1hc3Rlci5kZWZlcnJlZEluamVjdChyLFtdKX1yZXR1cm4gZS5wcm90b3R5cGUuZ2VuZXJhdGVBbmRJbmplY3RTdHlsZXM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmlzU3RhdGljLHI9dGhpcy5jb21wb25lbnRJZCxvPXRoaXMubGFzdENsYXNzTmFtZTtpZih6JiZuJiZcInN0cmluZ1wiPT10eXBlb2YgbyYmdC5oYXNOYW1lRm9ySWQocixvKSlyZXR1cm4gbzt2YXIgaT1IZSh0aGlzLnJ1bGVzLGUsdCksYT1XZSh0aGlzLmNvbXBvbmVudElkK2kuam9pbihcIlwiKSk7cmV0dXJuIHQuaGFzTmFtZUZvcklkKHIsYSl8fHQuaW5qZWN0KHRoaXMuY29tcG9uZW50SWQsY2UoaSxcIi5cIithLHZvaWQgMCxyKSxhKSx0aGlzLmxhc3RDbGFzc05hbWU9YSxhfSxlLmdlbmVyYXRlTmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gV2UoZSl9LGV9KCksR2U9ZnVuY3Rpb24oZSx0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06RCxyPSEhbiYmZS50aGVtZT09PW4udGhlbWU7cmV0dXJuIGUudGhlbWUmJiFyP2UudGhlbWU6dHx8bi50aGVtZX0scWU9L1tbXFxdLiMqJD48K349fF46KCksXCInYC1dKy9nLFllPS8oXi18LSQpL2c7ZnVuY3Rpb24gS2UoZSl7cmV0dXJuIGUucmVwbGFjZShxZSxcIi1cIikucmVwbGFjZShZZSxcIlwiKX1mdW5jdGlvbiBYZShlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZSYmITB9dmFyIEplPXtjaGlsZENvbnRleHRUeXBlczohMCxjb250ZXh0VHlwZXM6ITAsZGVmYXVsdFByb3BzOiEwLGRpc3BsYXlOYW1lOiEwLGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczohMCxwcm9wVHlwZXM6ITAsdHlwZTohMH0sUWU9e25hbWU6ITAsbGVuZ3RoOiEwLHByb3RvdHlwZTohMCxjYWxsZXI6ITAsY2FsbGVlOiEwLGFyZ3VtZW50czohMCxhcml0eTohMH0sZXQ9KChVZT17fSlbYy5Gb3J3YXJkUmVmXT17JCR0eXBlb2Y6ITAscmVuZGVyOiEwfSxVZSksdHQ9T2JqZWN0LmRlZmluZVByb3BlcnR5LG50PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzLHJ0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsb3Q9dm9pZCAwPT09cnQ/ZnVuY3Rpb24oKXtyZXR1cm5bXX06cnQsaXQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixhdD1PYmplY3QuZ2V0UHJvdG90eXBlT2YsbHQ9T2JqZWN0LnByb3RvdHlwZSxzdD1BcnJheS5wcm90b3R5cGU7ZnVuY3Rpb24gY3QoZSx0LG4pe2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0KXt2YXIgcj1hdCh0KTtyJiZyIT09bHQmJmN0KGUscixuKTtmb3IodmFyIG89c3QuY29uY2F0KG50KHQpLG90KHQpKSxpPWV0W2UuJCR0eXBlb2ZdfHxKZSxhPWV0W3QuJCR0eXBlb2ZdfHxKZSxsPW8ubGVuZ3RoLHM9dm9pZCAwLGM9dm9pZCAwO2wtLTspaWYoYz1vW2xdLCEoUWVbY118fG4mJm5bY118fGEmJmFbY118fGkmJmlbY10pJiYocz1pdCh0LGMpKSl0cnl7dHQoZSxjLHMpfWNhdGNoKGUpe31yZXR1cm4gZX1yZXR1cm4gZX12YXIgdXQ9KDAsbC5jcmVhdGVDb250ZXh0KSgpLGZ0PXV0LkNvbnN1bWVyLGR0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7UCh0aGlzLHQpO3ZhciByPUgodGhpcyxlLmNhbGwodGhpcyxuKSk7cmV0dXJuIHIuZ2V0Q29udGV4dD1kKHIuZ2V0Q29udGV4dC5iaW5kKHIpKSxyLnJlbmRlcklubmVyPXIucmVuZGVySW5uZXIuYmluZChyKSxyfXJldHVybiBUKHQsZSksdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW4/bC5jcmVhdGVFbGVtZW50KHV0LkNvbnN1bWVyLG51bGwsdGhpcy5yZW5kZXJJbm5lcik6bnVsbH0sdC5wcm90b3R5cGUucmVuZGVySW5uZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRDb250ZXh0KHRoaXMucHJvcHMudGhlbWUsZSk7cmV0dXJuIGwuY3JlYXRlRWxlbWVudCh1dC5Qcm92aWRlcix7dmFsdWU6dH0sdGhpcy5wcm9wcy5jaGlsZHJlbil9LHQucHJvdG90eXBlLmdldFRoZW1lPWZ1bmN0aW9uKGUsdCl7aWYoWihlKSlyZXR1cm4gZSh0KTtpZihudWxsPT09ZXx8QXJyYXkuaXNBcnJheShlKXx8XCJvYmplY3RcIiE9PSh2b2lkIDA9PT1lP1widW5kZWZpbmVkXCI6UihlKSkpdGhyb3cgbmV3IFkoOCk7cmV0dXJuIEEoe30sdCxlKX0sdC5wcm90b3R5cGUuZ2V0Q29udGV4dD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmdldFRoZW1lKGUsdCl9LHR9KGwuQ29tcG9uZW50KSxwdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtQKHRoaXMsZSksdGhpcy5tYXN0ZXJTaGVldD1NZS5tYXN0ZXIsdGhpcy5pbnN0YW5jZT10aGlzLm1hc3RlclNoZWV0LmNsb25lKCksdGhpcy5zZWFsZWQ9ITF9cmV0dXJuIGUucHJvdG90eXBlLnNlYWw9ZnVuY3Rpb24oKXtpZighdGhpcy5zZWFsZWQpe3ZhciBlPXRoaXMubWFzdGVyU2hlZXQuY2xvbmVzLmluZGV4T2YodGhpcy5pbnN0YW5jZSk7dGhpcy5tYXN0ZXJTaGVldC5jbG9uZXMuc3BsaWNlKGUsMSksdGhpcy5zZWFsZWQ9ITB9fSxlLnByb3RvdHlwZS5jb2xsZWN0U3R5bGVzPWZ1bmN0aW9uKGUpe2lmKHRoaXMuc2VhbGVkKXRocm93IG5ldyBZKDIpO3JldHVybiBsLmNyZWF0ZUVsZW1lbnQodnQse3NoZWV0OnRoaXMuaW5zdGFuY2V9LGUpfSxlLnByb3RvdHlwZS5nZXRTdHlsZVRhZ3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWFsKCksdGhpcy5pbnN0YW5jZS50b0hUTUwoKX0sZS5wcm90b3R5cGUuZ2V0U3R5bGVFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VhbCgpLHRoaXMuaW5zdGFuY2UudG9SZWFjdEVsZW1lbnRzKCl9LGUucHJvdG90eXBlLmludGVybGVhdmVXaXRoTm9kZVN0cmVhbT1mdW5jdGlvbihlKXt0aHJvdyBuZXcgWSgzKX0sZX0oKSxodD0oMCxsLmNyZWF0ZUNvbnRleHQpKCksZ3Q9aHQuQ29uc3VtZXIsdnQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtQKHRoaXMsdCk7dmFyIHI9SCh0aGlzLGUuY2FsbCh0aGlzLG4pKTtyZXR1cm4gci5nZXRDb250ZXh0PWQoci5nZXRDb250ZXh0KSxyfXJldHVybiBUKHQsZSksdC5wcm90b3R5cGUuZ2V0Q29udGV4dD1mdW5jdGlvbihlLHQpe2lmKGUpcmV0dXJuIGU7aWYodClyZXR1cm4gbmV3IE1lKHQpO3Rocm93IG5ldyBZKDQpfSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5jaGlsZHJlbixuPWUuc2hlZXQscj1lLnRhcmdldDtyZXR1cm4gbC5jcmVhdGVFbGVtZW50KGh0LlByb3ZpZGVyLHt2YWx1ZTp0aGlzLmdldENvbnRleHQobixyKX0sdCl9LHR9KGwuQ29tcG9uZW50KSxtdD17fTt2YXIgQ3Q9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe1AodGhpcyx0KTt2YXIgbj1IKHRoaXMsZS5jYWxsKHRoaXMpKTtyZXR1cm4gbi5hdHRycz17fSxuLnJlbmRlck91dGVyPW4ucmVuZGVyT3V0ZXIuYmluZChuKSxuLnJlbmRlcklubmVyPW4ucmVuZGVySW5uZXIuYmluZChuKSxufXJldHVybiBUKHQsZSksdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGwuY3JlYXRlRWxlbWVudChndCxudWxsLHRoaXMucmVuZGVyT3V0ZXIpfSx0LnByb3RvdHlwZS5yZW5kZXJPdXRlcj1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpNZS5tYXN0ZXI7cmV0dXJuIHRoaXMuc3R5bGVTaGVldD1lLHRoaXMucHJvcHMuZm9yd2FyZGVkQ29tcG9uZW50LmNvbXBvbmVudFN0eWxlLmlzU3RhdGljP3RoaXMucmVuZGVySW5uZXIoKTpsLmNyZWF0ZUVsZW1lbnQoZnQsbnVsbCx0aGlzLnJlbmRlcklubmVyKX0sdC5wcm90b3R5cGUucmVuZGVySW5uZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcy5mb3J3YXJkZWRDb21wb25lbnQsbj10LmNvbXBvbmVudFN0eWxlLHI9dC5kZWZhdWx0UHJvcHMsbz0odC5kaXNwbGF5TmFtZSx0LmZvbGRlZENvbXBvbmVudElkcyksaT10LnN0eWxlZENvbXBvbmVudElkLGE9dC50YXJnZXQscz12b2lkIDA7cz1uLmlzU3RhdGljP3RoaXMuZ2VuZXJhdGVBbmRJbmplY3RTdHlsZXMoRCx0aGlzLnByb3BzKTp0aGlzLmdlbmVyYXRlQW5kSW5qZWN0U3R5bGVzKEdlKHRoaXMucHJvcHMsZSxyKXx8RCx0aGlzLnByb3BzKTt2YXIgYz10aGlzLnByb3BzLmFzfHx0aGlzLmF0dHJzLmFzfHxhLHU9WGUoYyksZj17fSxkPUEoe30sdGhpcy5wcm9wcyx0aGlzLmF0dHJzKSxwPXZvaWQgMDtmb3IocCBpbiBkKVwiZm9yd2FyZGVkQ29tcG9uZW50XCIhPT1wJiZcImFzXCIhPT1wJiYoXCJmb3J3YXJkZWRSZWZcIj09PXA/Zi5yZWY9ZFtwXTpcImZvcndhcmRlZEFzXCI9PT1wP2YuYXM9ZFtwXTp1JiYhaChwKXx8KGZbcF09ZFtwXSkpO3JldHVybiB0aGlzLnByb3BzLnN0eWxlJiZ0aGlzLmF0dHJzLnN0eWxlJiYoZi5zdHlsZT1BKHt9LHRoaXMuYXR0cnMuc3R5bGUsdGhpcy5wcm9wcy5zdHlsZSkpLGYuY2xhc3NOYW1lPUFycmF5LnByb3RvdHlwZS5jb25jYXQobyxpLHMhPT1pP3M6bnVsbCx0aGlzLnByb3BzLmNsYXNzTmFtZSx0aGlzLmF0dHJzLmNsYXNzTmFtZSkuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpLCgwLGwuY3JlYXRlRWxlbWVudCkoYyxmKX0sdC5wcm90b3R5cGUuYnVpbGRFeGVjdXRpb25Db250ZXh0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLG89QSh7fSx0LHt0aGVtZTplfSk7cmV0dXJuIG4ubGVuZ3RoPyh0aGlzLmF0dHJzPXt9LG4uZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQsbj1lLGk9ITEsYT12b2lkIDAsbD12b2lkIDA7Zm9yKGwgaW4gWihuKSYmKG49bihvKSxpPSEwKSxuKWE9bltsXSxpfHwhWihhKXx8KHQ9YSkmJnQucHJvdG90eXBlJiZ0LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50fHxOKGEpfHwoYT1hKG8pKSxyLmF0dHJzW2xdPWEsb1tsXT1hfSkpLG8pOm99LHQucHJvdG90eXBlLmdlbmVyYXRlQW5kSW5qZWN0U3R5bGVzPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5mb3J3YXJkZWRDb21wb25lbnQscj1uLmF0dHJzLG89bi5jb21wb25lbnRTdHlsZTtuLndhcm5Ub29NYW55Q2xhc3NlcztyZXR1cm4gby5pc1N0YXRpYyYmIXIubGVuZ3RoP28uZ2VuZXJhdGVBbmRJbmplY3RTdHlsZXMoRCx0aGlzLnN0eWxlU2hlZXQpOm8uZ2VuZXJhdGVBbmRJbmplY3RTdHlsZXModGhpcy5idWlsZEV4ZWN1dGlvbkNvbnRleHQoZSx0LHIpLHRoaXMuc3R5bGVTaGVldCl9LHR9KGwuQ29tcG9uZW50KTtmdW5jdGlvbiB5dChlLHQsbil7dmFyIHI9TihlKSxvPSFYZShlKSxpPXQuZGlzcGxheU5hbWUsYT12b2lkIDA9PT1pP2Z1bmN0aW9uKGUpe3JldHVybiBYZShlKT9cInN0eWxlZC5cIitlOlwiU3R5bGVkKFwiKyQoZSkrXCIpXCJ9KGUpOmkscz10LmNvbXBvbmVudElkLGM9dm9pZCAwPT09cz9mdW5jdGlvbihlLHQsbil7dmFyIHI9XCJzdHJpbmdcIiE9dHlwZW9mIHQ/XCJzY1wiOktlKHQpLG89KG10W3JdfHwwKSsxO210W3JdPW87dmFyIGk9citcIi1cIitlLmdlbmVyYXRlTmFtZShyK28pO3JldHVybiBuP24rXCItXCIraTppfSh6ZSx0LmRpc3BsYXlOYW1lLHQucGFyZW50Q29tcG9uZW50SWQpOnMsdT10LlBhcmVudENvbXBvbmVudCxmPXZvaWQgMD09PXU/Q3Q6dSxkPXQuYXR0cnMscD12b2lkIDA9PT1kP1Y6ZCxoPXQuZGlzcGxheU5hbWUmJnQuY29tcG9uZW50SWQ/S2UodC5kaXNwbGF5TmFtZSkrXCItXCIrdC5jb21wb25lbnRJZDp0LmNvbXBvbmVudElkfHxjLGc9ciYmZS5hdHRycz9BcnJheS5wcm90b3R5cGUuY29uY2F0KGUuYXR0cnMscCkuZmlsdGVyKEJvb2xlYW4pOnAsdj1uZXcgemUocj9lLmNvbXBvbmVudFN0eWxlLnJ1bGVzLmNvbmNhdChuKTpuLGcsaCksbT12b2lkIDAsQz1mdW5jdGlvbihlLHQpe3JldHVybiBsLmNyZWF0ZUVsZW1lbnQoZixBKHt9LGUse2ZvcndhcmRlZENvbXBvbmVudDptLGZvcndhcmRlZFJlZjp0fSkpfTtyZXR1cm4gQy5kaXNwbGF5TmFtZT1hLChtPWwuZm9yd2FyZFJlZihDKSkuZGlzcGxheU5hbWU9YSxtLmF0dHJzPWcsbS5jb21wb25lbnRTdHlsZT12LG0uZm9sZGVkQ29tcG9uZW50SWRzPXI/QXJyYXkucHJvdG90eXBlLmNvbmNhdChlLmZvbGRlZENvbXBvbmVudElkcyxlLnN0eWxlZENvbXBvbmVudElkKTpWLG0uc3R5bGVkQ29tcG9uZW50SWQ9aCxtLnRhcmdldD1yP2UudGFyZ2V0OmUsbS53aXRoQ29tcG9uZW50PWZ1bmN0aW9uKGUpe3ZhciByPXQuY29tcG9uZW50SWQsbz1mdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKXQuaW5kZXhPZihyKT49MHx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJihuW3JdPWVbcl0pO3JldHVybiBufSh0LFtcImNvbXBvbmVudElkXCJdKSxpPXImJnIrXCItXCIrKFhlKGUpP2U6S2UoJChlKSkpO3JldHVybiB5dChlLEEoe30sbyx7YXR0cnM6Zyxjb21wb25lbnRJZDppLFBhcmVudENvbXBvbmVudDpmfSksbil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtLFwiZGVmYXVsdFByb3BzXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9mb2xkZWREZWZhdWx0UHJvcHN9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9mb2xkZWREZWZhdWx0UHJvcHM9cj9NKGUuZGVmYXVsdFByb3BzLHQpOnR9fSksbS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiLlwiK20uc3R5bGVkQ29tcG9uZW50SWR9LG8mJmN0KG0sZSx7YXR0cnM6ITAsY29tcG9uZW50U3R5bGU6ITAsZGlzcGxheU5hbWU6ITAsZm9sZGVkQ29tcG9uZW50SWRzOiEwLHN0eWxlZENvbXBvbmVudElkOiEwLHRhcmdldDohMCx3aXRoQ29tcG9uZW50OiEwfSksbX12YXIgd3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIFZlKHl0LGUpfTtbXCJhXCIsXCJhYmJyXCIsXCJhZGRyZXNzXCIsXCJhcmVhXCIsXCJhcnRpY2xlXCIsXCJhc2lkZVwiLFwiYXVkaW9cIixcImJcIixcImJhc2VcIixcImJkaVwiLFwiYmRvXCIsXCJiaWdcIixcImJsb2NrcXVvdGVcIixcImJvZHlcIixcImJyXCIsXCJidXR0b25cIixcImNhbnZhc1wiLFwiY2FwdGlvblwiLFwiY2l0ZVwiLFwiY29kZVwiLFwiY29sXCIsXCJjb2xncm91cFwiLFwiZGF0YVwiLFwiZGF0YWxpc3RcIixcImRkXCIsXCJkZWxcIixcImRldGFpbHNcIixcImRmblwiLFwiZGlhbG9nXCIsXCJkaXZcIixcImRsXCIsXCJkdFwiLFwiZW1cIixcImVtYmVkXCIsXCJmaWVsZHNldFwiLFwiZmlnY2FwdGlvblwiLFwiZmlndXJlXCIsXCJmb290ZXJcIixcImZvcm1cIixcImgxXCIsXCJoMlwiLFwiaDNcIixcImg0XCIsXCJoNVwiLFwiaDZcIixcImhlYWRcIixcImhlYWRlclwiLFwiaGdyb3VwXCIsXCJoclwiLFwiaHRtbFwiLFwiaVwiLFwiaWZyYW1lXCIsXCJpbWdcIixcImlucHV0XCIsXCJpbnNcIixcImtiZFwiLFwia2V5Z2VuXCIsXCJsYWJlbFwiLFwibGVnZW5kXCIsXCJsaVwiLFwibGlua1wiLFwibWFpblwiLFwibWFwXCIsXCJtYXJrXCIsXCJtYXJxdWVlXCIsXCJtZW51XCIsXCJtZW51aXRlbVwiLFwibWV0YVwiLFwibWV0ZXJcIixcIm5hdlwiLFwibm9zY3JpcHRcIixcIm9iamVjdFwiLFwib2xcIixcIm9wdGdyb3VwXCIsXCJvcHRpb25cIixcIm91dHB1dFwiLFwicFwiLFwicGFyYW1cIixcInBpY3R1cmVcIixcInByZVwiLFwicHJvZ3Jlc3NcIixcInFcIixcInJwXCIsXCJydFwiLFwicnVieVwiLFwic1wiLFwic2FtcFwiLFwic2NyaXB0XCIsXCJzZWN0aW9uXCIsXCJzZWxlY3RcIixcInNtYWxsXCIsXCJzb3VyY2VcIixcInNwYW5cIixcInN0cm9uZ1wiLFwic3R5bGVcIixcInN1YlwiLFwic3VtbWFyeVwiLFwic3VwXCIsXCJ0YWJsZVwiLFwidGJvZHlcIixcInRkXCIsXCJ0ZXh0YXJlYVwiLFwidGZvb3RcIixcInRoXCIsXCJ0aGVhZFwiLFwidGltZVwiLFwidGl0bGVcIixcInRyXCIsXCJ0cmFja1wiLFwidVwiLFwidWxcIixcInZhclwiLFwidmlkZW9cIixcIndiclwiLFwiY2lyY2xlXCIsXCJjbGlwUGF0aFwiLFwiZGVmc1wiLFwiZWxsaXBzZVwiLFwiZm9yZWlnbk9iamVjdFwiLFwiZ1wiLFwiaW1hZ2VcIixcImxpbmVcIixcImxpbmVhckdyYWRpZW50XCIsXCJtYXJrZXJcIixcIm1hc2tcIixcInBhdGhcIixcInBhdHRlcm5cIixcInBvbHlnb25cIixcInBvbHlsaW5lXCIsXCJyYWRpYWxHcmFkaWVudFwiLFwicmVjdFwiLFwic3RvcFwiLFwic3ZnXCIsXCJ0ZXh0XCIsXCJ0c3BhblwiXS5mb3JFYWNoKChmdW5jdGlvbihlKXt3dFtlXT13dChlKX0pKTt2YXIgYnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbil7UCh0aGlzLGUpLHRoaXMucnVsZXM9dCx0aGlzLmNvbXBvbmVudElkPW4sdGhpcy5pc1N0YXRpYz1GZSh0LFYpLE1lLm1hc3Rlci5oYXNJZChuKXx8TWUubWFzdGVyLmRlZmVycmVkSW5qZWN0KG4sW10pfXJldHVybiBlLnByb3RvdHlwZS5jcmVhdGVTdHlsZXM9ZnVuY3Rpb24oZSx0KXt2YXIgbj1jZShIZSh0aGlzLnJ1bGVzLGUsdCksXCJcIik7dC5pbmplY3QodGhpcy5jb21wb25lbnRJZCxuKX0sZS5wcm90b3R5cGUucmVtb3ZlU3R5bGVzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY29tcG9uZW50SWQ7ZS5oYXNJZCh0KSYmZS5yZW1vdmUodCl9LGUucHJvdG90eXBlLnJlbmRlclN0eWxlcz1mdW5jdGlvbihlLHQpe3RoaXMucmVtb3ZlU3R5bGVzKHQpLHRoaXMuY3JlYXRlU3R5bGVzKGUsdCl9LGV9KCk7ZnVuY3Rpb24geHQoZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1BcnJheSh0PjE/dC0xOjApLHI9MTtyPHQ7cisrKW5bci0xXT1hcmd1bWVudHNbcl07dmFyIG89QmUuYXBwbHkodm9pZCAwLFtlXS5jb25jYXQobikpLGk9XCJzYy1nbG9iYWwtXCIrRGUoSlNPTi5zdHJpbmdpZnkobykpLGE9bmV3IGJ0KG8saSkscz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe1AodGhpcyx0KTt2YXIgcj1IKHRoaXMsZS5jYWxsKHRoaXMsbikpLG89ci5jb25zdHJ1Y3RvcixpPW8uZ2xvYmFsU3R5bGUsYT1vLnN0eWxlZENvbXBvbmVudElkO3JldHVybiB6JiYod2luZG93LnNjQ0dTSE1SQ2FjaGVbYV09KHdpbmRvdy5zY0NHU0hNUkNhY2hlW2FdfHwwKSsxKSxyLnN0YXRlPXtnbG9iYWxTdHlsZTppLHN0eWxlZENvbXBvbmVudElkOmF9LHJ9cmV0dXJuIFQodCxlKSx0LnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3dpbmRvdy5zY0NHU0hNUkNhY2hlW3RoaXMuc3RhdGUuc3R5bGVkQ29tcG9uZW50SWRdJiYod2luZG93LnNjQ0dTSE1SQ2FjaGVbdGhpcy5zdGF0ZS5zdHlsZWRDb21wb25lbnRJZF0tPTEpLDA9PT13aW5kb3cuc2NDR1NITVJDYWNoZVt0aGlzLnN0YXRlLnN0eWxlZENvbXBvbmVudElkXSYmdGhpcy5zdGF0ZS5nbG9iYWxTdHlsZS5yZW1vdmVTdHlsZXModGhpcy5zdHlsZVNoZWV0KX0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gbC5jcmVhdGVFbGVtZW50KGd0LG51bGwsKGZ1bmN0aW9uKHQpe2Uuc3R5bGVTaGVldD10fHxNZS5tYXN0ZXI7dmFyIG49ZS5zdGF0ZS5nbG9iYWxTdHlsZTtyZXR1cm4gbi5pc1N0YXRpYz8obi5yZW5kZXJTdHlsZXMocSxlLnN0eWxlU2hlZXQpLG51bGwpOmwuY3JlYXRlRWxlbWVudChmdCxudWxsLChmdW5jdGlvbih0KXt2YXIgcj1lLmNvbnN0cnVjdG9yLmRlZmF1bHRQcm9wcyxvPUEoe30sZS5wcm9wcyk7cmV0dXJuIHZvaWQgMCE9PXQmJihvLnRoZW1lPUdlKGUucHJvcHMsdCxyKSksbi5yZW5kZXJTdHlsZXMobyxlLnN0eWxlU2hlZXQpLG51bGx9KSl9KSl9LHR9KGwuQ29tcG9uZW50KTtyZXR1cm4gcy5nbG9iYWxTdHlsZT1hLHMuc3R5bGVkQ29tcG9uZW50SWQ9aSxzfXomJih3aW5kb3cuc2NDR1NITVJDYWNoZT17fSk7dmFyIF90PWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1xcc3xcXFxcbi9nLFwiXCIpfTtmdW5jdGlvbiBPdChlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPUFycmF5KHQ+MT90LTE6MCkscj0xO3I8dDtyKyspbltyLTFdPWFyZ3VtZW50c1tyXTt2YXIgbz1CZS5hcHBseSh2b2lkIDAsW2VdLmNvbmNhdChuKSksaT1OZShEZShfdChKU09OLnN0cmluZ2lmeShvKSkpKTtyZXR1cm4gbmV3IGtlKGksY2UobyxpLFwiQGtleWZyYW1lc1wiKSl9dmFyIEx0PWZ1bmN0aW9uKGUpe3ZhciB0PWwuZm9yd2FyZFJlZigoZnVuY3Rpb24odCxuKXtyZXR1cm4gbC5jcmVhdGVFbGVtZW50KGZ0LG51bGwsKGZ1bmN0aW9uKHIpe3ZhciBvPWUuZGVmYXVsdFByb3BzLGk9R2UodCxyLG8pO3JldHVybiBsLmNyZWF0ZUVsZW1lbnQoZSxBKHt9LHQse3RoZW1lOmkscmVmOm59KSl9KSl9KSk7cmV0dXJuIGN0KHQsZSksdC5kaXNwbGF5TmFtZT1cIldpdGhUaGVtZShcIiskKGUpK1wiKVwiLHR9LEV0PXtTdHlsZVNoZWV0Ok1lfTtjb25zdCBTdD13dH0sNTI0NjplPT57ZS5leHBvcnRzPWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PVwiLyp8Ki9cIixuPXQrXCJ9XCI7ZnVuY3Rpb24gcih0KXtpZih0KXRyeXtlKHQrXCJ9XCIpfWNhdGNoKGUpe319cmV0dXJuIGZ1bmN0aW9uKG8saSxhLGwscyxjLHUsZixkLHApe3N3aXRjaChvKXtjYXNlIDE6aWYoMD09PWQmJjY0PT09aS5jaGFyQ29kZUF0KDApKXJldHVybiBlKGkrXCI7XCIpLFwiXCI7YnJlYWs7Y2FzZSAyOmlmKDA9PT1mKXJldHVybiBpK3Q7YnJlYWs7Y2FzZSAzOnN3aXRjaChmKXtjYXNlIDEwMjpjYXNlIDExMjpyZXR1cm4gZShhWzBdK2kpLFwiXCI7ZGVmYXVsdDpyZXR1cm4gaSsoMD09PXA/dDpcIlwiKX1jYXNlLTI6aS5zcGxpdChuKS5mb3JFYWNoKHIpfX19fSgpfSwxOTQ2OmU9PntlLmV4cG9ydHM9ZnVuY3Rpb24gZSh0KXtcInVzZSBzdHJpY3RcIjt2YXIgbj0vXlxcMCsvZyxyPS9bXFwwXFxyXFxmXS9nLG89LzogKi9nLGk9L3pvb3xncmEvLGE9LyhbLDogXSkodHJhbnNmb3JtKS9nLGw9LywrXFxzKig/IVteKF0qWyldKS9nLHM9LyArXFxzKig/IVteKF0qWyldKS9nLGM9LyAqW1xcMF0gKi9nLHU9LyxcXHIrPy9nLGY9LyhbXFx0XFxyXFxuIF0pKlxcZj8mL2csZD0vOmdsb2JhbFxcKCgoPzpbXlxcKFxcKVxcW1xcXV0qfFxcWy4qXFxdfFxcKFteXFwoXFwpXSpcXCkpKilcXCkvZyxwPS9cXFcrL2csaD0vQChrXFx3KylcXHMqKFxcUyopXFxzKi8sZz0vOjoocGxhY2UpL2csdj0vOihyZWFkLW9ubHkpL2csbT0vXFxzKyg/PVt7XFxdOz06Pl0pL2csQz0vKFtbfT06Pl0pXFxzKy9nLHk9LyhcXHtbXntdKz8pOyg/PVxcfSkvZyx3PS9cXHN7Mix9L2csYj0vKFteXFwoXSkoOispICovZyx4PS9bc3ZoXVxcdystW3RibHJdezJ9LyxfPS9cXChcXHMqKC4qKVxccypcXCkvZyxPPS8oW1xcc1xcU10qPyk7L2csTD0vLXNlbGZ8ZmxleC0vZyxFPS9bXl0qPyg6W3JwXVtlbF1hW1xcdy1dKylbXl0qLyxTPS9zdHJldGNofDpcXHMqXFx3K1xcLSg/OmNvbnRlfGF2YWlsKS8saj0vKFteLV0pKGltYWdlLXNldFxcKCkvLE09XCItd2Via2l0LVwiLGs9XCItbW96LVwiLFI9XCItbXMtXCIsUD01OSxJPTEyNSxBPTEyMyxUPTQwLEg9NDEsQj05MSxWPTkzLEQ9MTAsWj0xMywkPTksTj02NCxGPTMyLFU9MzgsVz00NSx6PTk1LEc9NDIscT00NCxZPTU4LEs9MzksWD0zNCxKPTQ3LFE9NjIsZWU9NDMsdGU9MTI2LG5lPTAscmU9MTIsb2U9MTEsaWU9MTA3LGFlPTEwOSxsZT0xMTUsc2U9MTEyLGNlPTExMSx1ZT0xMDUsZmU9OTksZGU9MTAwLHBlPTExMixoZT0xLGdlPTEsdmU9MCxtZT0xLENlPTEseWU9MSx3ZT0wLGJlPTAseGU9MCxfZT1bXSxPZT1bXSxMZT0wLEVlPW51bGwsU2U9LTIsamU9LTEsTWU9MCxrZT0xLFJlPTIsUGU9MyxJZT0wLEFlPTEsVGU9XCJcIixIZT1cIlwiLEJlPVwiXCI7ZnVuY3Rpb24gVmUoZSx0LG8saSxhKXtmb3IodmFyIGwscyx1PTAsZj0wLGQ9MCxwPTAsbT0wLEM9MCx5PTAsdz0wLHg9MCxPPTAsTD0wLEU9MCxTPTAsaj0wLHo9MCx3ZT0wLE9lPTAsRWU9MCxTZT0wLGplPW8ubGVuZ3RoLFplPWplLTEsemU9XCJcIixHZT1cIlwiLHFlPVwiXCIsWWU9XCJcIixLZT1cIlwiLFhlPVwiXCI7ejxqZTspe2lmKHk9by5jaGFyQ29kZUF0KHopLHo9PT1aZSYmZitwK2QrdSE9PTAmJigwIT09ZiYmKHk9Zj09PUo/RDpKKSxwPWQ9dT0wLGplKyssWmUrKyksZitwK2QrdT09PTApe2lmKHo9PT1aZSYmKHdlPjAmJihHZT1HZS5yZXBsYWNlKHIsXCJcIikpLEdlLnRyaW0oKS5sZW5ndGg+MCkpe3N3aXRjaCh5KXtjYXNlIEY6Y2FzZSAkOmNhc2UgUDpjYXNlIFo6Y2FzZSBEOmJyZWFrO2RlZmF1bHQ6R2UrPW8uY2hhckF0KHopfXk9UH1pZigxPT09T2Upc3dpdGNoKHkpe2Nhc2UgQTpjYXNlIEk6Y2FzZSBQOmNhc2UgWDpjYXNlIEs6Y2FzZSBUOmNhc2UgSDpjYXNlIHE6T2U9MDtjYXNlICQ6Y2FzZSBaOmNhc2UgRDpjYXNlIEY6YnJlYWs7ZGVmYXVsdDpmb3IoT2U9MCxTZT16LG09eSx6LS0seT1QO1NlPGplOylzd2l0Y2goby5jaGFyQ29kZUF0KFNlKyspKXtjYXNlIEQ6Y2FzZSBaOmNhc2UgUDorK3oseT1tLFNlPWplO2JyZWFrO2Nhc2UgWTp3ZT4wJiYoKyt6LHk9bSk7Y2FzZSBBOlNlPWplfX1zd2l0Y2goeSl7Y2FzZSBBOmZvcihtPShHZT1HZS50cmltKCkpLmNoYXJDb2RlQXQoMCksTD0xLFNlPSsrejt6PGplOyl7c3dpdGNoKHk9by5jaGFyQ29kZUF0KHopKXtjYXNlIEE6TCsrO2JyZWFrO2Nhc2UgSTpMLS07YnJlYWs7Y2FzZSBKOnN3aXRjaChDPW8uY2hhckNvZGVBdCh6KzEpKXtjYXNlIEc6Y2FzZSBKOno9V2UoQyx6LFplLG8pfWJyZWFrO2Nhc2UgQjp5Kys7Y2FzZSBUOnkrKztjYXNlIFg6Y2FzZSBLOmZvcig7eisrPFplJiZvLmNoYXJDb2RlQXQoeikhPT15Oyk7fWlmKDA9PT1MKWJyZWFrO3orK31pZihxZT1vLnN1YnN0cmluZyhTZSx6KSxtPT09bmUmJihtPShHZT1HZS5yZXBsYWNlKG4sXCJcIikudHJpbSgpKS5jaGFyQ29kZUF0KDApKSxtPT09Til7c3dpdGNoKHdlPjAmJihHZT1HZS5yZXBsYWNlKHIsXCJcIikpLEM9R2UuY2hhckNvZGVBdCgxKSl7Y2FzZSBkZTpjYXNlIGFlOmNhc2UgbGU6Y2FzZSBXOmw9dDticmVhaztkZWZhdWx0Omw9X2V9aWYoU2U9KHFlPVZlKHQsbCxxZSxDLGErMSkpLmxlbmd0aCx4ZT4wJiYwPT09U2UmJihTZT1HZS5sZW5ndGgpLExlPjAmJihsPURlKF9lLEdlLEVlKSxzPVVlKFBlLHFlLGwsdCxnZSxoZSxTZSxDLGEsaSksR2U9bC5qb2luKFwiXCIpLHZvaWQgMCE9PXMmJjA9PT0oU2U9KHFlPXMudHJpbSgpKS5sZW5ndGgpJiYoQz0wLHFlPVwiXCIpKSxTZT4wKXN3aXRjaChDKXtjYXNlIGxlOkdlPUdlLnJlcGxhY2UoXyxGZSk7Y2FzZSBkZTpjYXNlIGFlOmNhc2UgVzpxZT1HZStcIntcIitxZStcIn1cIjticmVhaztjYXNlIGllOnFlPShHZT1HZS5yZXBsYWNlKGgsXCIkMSAkMlwiKyhBZT4wP1RlOlwiXCIpKSkrXCJ7XCIrcWUrXCJ9XCIscWU9MT09PUNlfHwyPT09Q2UmJk5lKFwiQFwiK3FlLDMpP1wiQFwiK00rcWUrXCJAXCIrcWU6XCJAXCIrcWU7YnJlYWs7ZGVmYXVsdDpxZT1HZStxZSxpPT09cGUmJihZZSs9cWUscWU9XCJcIil9ZWxzZSBxZT1cIlwifWVsc2UgcWU9VmUodCxEZSh0LEdlLEVlKSxxZSxpLGErMSk7S2UrPXFlLEU9MCxPZT0wLGo9MCx3ZT0wLEVlPTAsUz0wLEdlPVwiXCIscWU9XCJcIix5PW8uY2hhckNvZGVBdCgrK3opO2JyZWFrO2Nhc2UgSTpjYXNlIFA6aWYoKFNlPShHZT0od2U+MD9HZS5yZXBsYWNlKHIsXCJcIik6R2UpLnRyaW0oKSkubGVuZ3RoKT4xKXN3aXRjaCgwPT09aiYmKChtPUdlLmNoYXJDb2RlQXQoMCkpPT09V3x8bT45NiYmbTwxMjMpJiYoU2U9KEdlPUdlLnJlcGxhY2UoXCIgXCIsXCI6XCIpKS5sZW5ndGgpLExlPjAmJnZvaWQgMCE9PShzPVVlKGtlLEdlLHQsZSxnZSxoZSxZZS5sZW5ndGgsaSxhLGkpKSYmMD09PShTZT0oR2U9cy50cmltKCkpLmxlbmd0aCkmJihHZT1cIlxcMFxcMFwiKSxtPUdlLmNoYXJDb2RlQXQoMCksQz1HZS5jaGFyQ29kZUF0KDEpLG0pe2Nhc2UgbmU6YnJlYWs7Y2FzZSBOOmlmKEM9PT11ZXx8Qz09PWZlKXtYZSs9R2Urby5jaGFyQXQoeik7YnJlYWt9ZGVmYXVsdDppZihHZS5jaGFyQ29kZUF0KFNlLTEpPT09WSlicmVhaztZZSs9JGUoR2UsbSxDLEdlLmNoYXJDb2RlQXQoMikpfUU9MCxPZT0wLGo9MCx3ZT0wLEVlPTAsR2U9XCJcIix5PW8uY2hhckNvZGVBdCgrK3opfX1zd2l0Y2goeSl7Y2FzZSBaOmNhc2UgRDppZihmK3ArZCt1K2JlPT09MClzd2l0Y2goTyl7Y2FzZSBIOmNhc2UgSzpjYXNlIFg6Y2FzZSBOOmNhc2UgdGU6Y2FzZSBROmNhc2UgRzpjYXNlIGVlOmNhc2UgSjpjYXNlIFc6Y2FzZSBZOmNhc2UgcTpjYXNlIFA6Y2FzZSBBOmNhc2UgSTpicmVhaztkZWZhdWx0Omo+MCYmKE9lPTEpfWY9PT1KP2Y9MDptZStFPT09MCYmaSE9PWllJiZHZS5sZW5ndGg+MCYmKHdlPTEsR2UrPVwiXFwwXCIpLExlKkllPjAmJlVlKE1lLEdlLHQsZSxnZSxoZSxZZS5sZW5ndGgsaSxhLGkpLGhlPTEsZ2UrKzticmVhaztjYXNlIFA6Y2FzZSBJOmlmKGYrcCtkK3U9PT0wKXtoZSsrO2JyZWFrfWRlZmF1bHQ6c3dpdGNoKGhlKyssemU9by5jaGFyQXQoeikseSl7Y2FzZSAkOmNhc2UgRjppZihwK3UrZj09PTApc3dpdGNoKHcpe2Nhc2UgcTpjYXNlIFk6Y2FzZSAkOmNhc2UgRjp6ZT1cIlwiO2JyZWFrO2RlZmF1bHQ6eSE9PUYmJih6ZT1cIiBcIil9YnJlYWs7Y2FzZSBuZTp6ZT1cIlxcXFwwXCI7YnJlYWs7Y2FzZSByZTp6ZT1cIlxcXFxmXCI7YnJlYWs7Y2FzZSBvZTp6ZT1cIlxcXFx2XCI7YnJlYWs7Y2FzZSBVOnArZit1PT09MCYmbWU+MCYmKEVlPTEsd2U9MSx6ZT1cIlxcZlwiK3plKTticmVhaztjYXNlIDEwODppZihwK2YrdSt2ZT09PTAmJmo+MClzd2l0Y2goei1qKXtjYXNlIDI6dz09PXNlJiZvLmNoYXJDb2RlQXQoei0zKT09PVkmJih2ZT13KTtjYXNlIDg6eD09PWNlJiYodmU9eCl9YnJlYWs7Y2FzZSBZOnArZit1PT09MCYmKGo9eik7YnJlYWs7Y2FzZSBxOmYrZCtwK3U9PT0wJiYod2U9MSx6ZSs9XCJcXHJcIik7YnJlYWs7Y2FzZSBYOmNhc2UgSzowPT09ZiYmKHA9cD09PXk/MDowPT09cD95OnApO2JyZWFrO2Nhc2UgQjpwK2YrZD09PTAmJnUrKzticmVhaztjYXNlIFY6cCtmK2Q9PT0wJiZ1LS07YnJlYWs7Y2FzZSBIOnArZit1PT09MCYmZC0tO2JyZWFrO2Nhc2UgVDpwK2YrdT09PTAmJigwPT09RSYmKDIqdyszKng9PTUzM3x8KEw9MCxFPTEpKSxkKyspO2JyZWFrO2Nhc2UgTjpmK2QrcCt1K2orUz09PTAmJihTPTEpO2JyZWFrO2Nhc2UgRzpjYXNlIEo6aWYocCt1K2Q+MClicmVhaztzd2l0Y2goZil7Y2FzZSAwOnN3aXRjaCgyKnkrMypvLmNoYXJDb2RlQXQoeisxKSl7Y2FzZSAyMzU6Zj1KO2JyZWFrO2Nhc2UgMjIwOlNlPXosZj1HfWJyZWFrO2Nhc2UgRzp5PT09SiYmdz09PUcmJlNlKzIhPT16JiYoMzM9PT1vLmNoYXJDb2RlQXQoU2UrMikmJihZZSs9by5zdWJzdHJpbmcoU2UseisxKSksemU9XCJcIixmPTApfX1pZigwPT09Zil7aWYobWUrcCt1K1M9PT0wJiZpIT09aWUmJnkhPT1QKXN3aXRjaCh5KXtjYXNlIHE6Y2FzZSB0ZTpjYXNlIFE6Y2FzZSBlZTpjYXNlIEg6Y2FzZSBUOmlmKDA9PT1FKXtzd2l0Y2godyl7Y2FzZSAkOmNhc2UgRjpjYXNlIEQ6Y2FzZSBaOnplKz1cIlxcMFwiO2JyZWFrO2RlZmF1bHQ6emU9XCJcXDBcIit6ZSsoeT09PXE/XCJcIjpcIlxcMFwiKX13ZT0xfWVsc2Ugc3dpdGNoKHkpe2Nhc2UgVDpqKzc9PT16JiYxMDg9PT13JiYoaj0wKSxFPSsrTDticmVhaztjYXNlIEg6MD09KEU9LS1MKSYmKHdlPTEsemUrPVwiXFwwXCIpfWJyZWFrO2Nhc2UgJDpjYXNlIEY6c3dpdGNoKHcpe2Nhc2UgbmU6Y2FzZSBBOmNhc2UgSTpjYXNlIFA6Y2FzZSBxOmNhc2UgcmU6Y2FzZSAkOmNhc2UgRjpjYXNlIEQ6Y2FzZSBaOmJyZWFrO2RlZmF1bHQ6MD09PUUmJih3ZT0xLHplKz1cIlxcMFwiKX19R2UrPXplLHkhPT1GJiZ5IT09JCYmKE89eSl9fXg9dyx3PXkseisrfWlmKFNlPVllLmxlbmd0aCx4ZT4wJiYwPT09U2UmJjA9PT1LZS5sZW5ndGgmJjA9PT10WzBdLmxlbmd0aD09MCYmKGkhPT1hZXx8MT09PXQubGVuZ3RoJiYobWU+MD9IZTpCZSk9PT10WzBdKSYmKFNlPXQuam9pbihcIixcIikubGVuZ3RoKzIpLFNlPjApe2lmKGw9MD09PW1lJiZpIT09aWU/ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG4sbz0wLGk9ZS5sZW5ndGgsYT1BcnJheShpKTtvPGk7KytvKXtmb3IodmFyIGw9ZVtvXS5zcGxpdChjKSxzPVwiXCIsdT0wLGY9MCxkPTAscD0wLGg9bC5sZW5ndGg7dTxoOysrdSlpZighKDA9PT0oZj0obj1sW3VdKS5sZW5ndGgpJiZoPjEpKXtpZihkPXMuY2hhckNvZGVBdChzLmxlbmd0aC0xKSxwPW4uY2hhckNvZGVBdCgwKSx0PVwiXCIsMCE9PXUpc3dpdGNoKGQpe2Nhc2UgRzpjYXNlIHRlOmNhc2UgUTpjYXNlIGVlOmNhc2UgRjpjYXNlIFQ6YnJlYWs7ZGVmYXVsdDp0PVwiIFwifXN3aXRjaChwKXtjYXNlIFU6bj10K0hlO2Nhc2UgdGU6Y2FzZSBROmNhc2UgZWU6Y2FzZSBGOmNhc2UgSDpjYXNlIFQ6YnJlYWs7Y2FzZSBCOm49dCtuK0hlO2JyZWFrO2Nhc2UgWTpzd2l0Y2goMipuLmNoYXJDb2RlQXQoMSkrMypuLmNoYXJDb2RlQXQoMikpe2Nhc2UgNTMwOmlmKHllPjApe249dCtuLnN1YnN0cmluZyg4LGYtMSk7YnJlYWt9ZGVmYXVsdDoodTwxfHxsW3UtMV0ubGVuZ3RoPDEpJiYobj10K0hlK24pfWJyZWFrO2Nhc2UgcTp0PVwiXCI7ZGVmYXVsdDpuPWY+MSYmbi5pbmRleE9mKFwiOlwiKT4wP3Qrbi5yZXBsYWNlKGIsXCIkMVwiK0hlK1wiJDJcIik6dCtuK0hlfXMrPW59YVtvXT1zLnJlcGxhY2UocixcIlwiKS50cmltKCl9cmV0dXJuIGF9KHQpOnQsTGU+MCYmdm9pZCAwIT09KHM9VWUoUmUsWWUsbCxlLGdlLGhlLFNlLGksYSxpKSkmJjA9PT0oWWU9cykubGVuZ3RoKXJldHVybiBYZStZZStLZTtpZihZZT1sLmpvaW4oXCIsXCIpK1wie1wiK1llK1wifVwiLENlKnZlIT0wKXtzd2l0Y2goMiE9PUNlfHxOZShZZSwyKXx8KHZlPTApLHZlKXtjYXNlIGNlOlllPVllLnJlcGxhY2UodixcIjpcIitrK1wiJDFcIikrWWU7YnJlYWs7Y2FzZSBzZTpZZT1ZZS5yZXBsYWNlKGcsXCI6OlwiK00rXCJpbnB1dC0kMVwiKStZZS5yZXBsYWNlKGcsXCI6OlwiK2srXCIkMVwiKStZZS5yZXBsYWNlKGcsXCI6XCIrUitcImlucHV0LSQxXCIpK1llfXZlPTB9fXJldHVybiBYZStZZStLZX1mdW5jdGlvbiBEZShlLHQsbil7dmFyIHI9dC50cmltKCkuc3BsaXQodSksbz1yLGk9ci5sZW5ndGgsYT1lLmxlbmd0aDtzd2l0Y2goYSl7Y2FzZSAwOmNhc2UgMTpmb3IodmFyIGw9MCxzPTA9PT1hP1wiXCI6ZVswXStcIiBcIjtsPGk7KytsKW9bbF09WmUocyxvW2xdLG4sYSkudHJpbSgpO2JyZWFrO2RlZmF1bHQ6bD0wO3ZhciBjPTA7Zm9yKG89W107bDxpOysrbClmb3IodmFyIGY9MDtmPGE7KytmKW9bYysrXT1aZShlW2ZdK1wiIFwiLHJbbF0sbixhKS50cmltKCl9cmV0dXJuIG99ZnVuY3Rpb24gWmUoZSx0LG4scil7dmFyIG89dCxpPW8uY2hhckNvZGVBdCgwKTtzd2l0Y2goaTwzMyYmKGk9KG89by50cmltKCkpLmNoYXJDb2RlQXQoMCkpLGkpe2Nhc2UgVTpzd2l0Y2gobWUrcil7Y2FzZSAwOmNhc2UgMTppZigwPT09ZS50cmltKCkubGVuZ3RoKWJyZWFrO2RlZmF1bHQ6cmV0dXJuIG8ucmVwbGFjZShmLFwiJDFcIitlLnRyaW0oKSl9YnJlYWs7Y2FzZSBZOmlmKDEwMyE9PW8uY2hhckNvZGVBdCgxKSlyZXR1cm4gZS50cmltKCkrby5yZXBsYWNlKGYsXCIkMVwiK2UudHJpbSgpKTtpZih5ZT4wJiZtZT4wKXJldHVybiBvLnJlcGxhY2UoZCxcIiQxXCIpLnJlcGxhY2UoZixcIiQxXCIrQmUpO2RlZmF1bHQ6aWYobiptZT4wJiZvLmluZGV4T2YoXCJcXGZcIik+MClyZXR1cm4gby5yZXBsYWNlKGYsKGUuY2hhckNvZGVBdCgwKT09PVk/XCJcIjpcIiQxXCIpK2UudHJpbSgpKX1yZXR1cm4gZStvfWZ1bmN0aW9uICRlKGUsdCxuLHIpe3ZhciBjLHU9MCxmPWUrXCI7XCIsZD0yKnQrMypuKzQqcjtpZig5NDQ9PT1kKXJldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aCxuPWUuaW5kZXhPZihcIjpcIiw5KSsxLHI9ZS5zdWJzdHJpbmcoMCxuKS50cmltKCksbz1lLnN1YnN0cmluZyhuLHQtMSkudHJpbSgpO3N3aXRjaChlLmNoYXJDb2RlQXQoOSkqQWUpe2Nhc2UgMDpicmVhaztjYXNlIFc6aWYoMTEwIT09ZS5jaGFyQ29kZUF0KDEwKSlicmVhaztkZWZhdWx0OnZhciBpPW8uc3BsaXQoKG89XCJcIixsKSksYT0wO2ZvcihuPTAsdD1pLmxlbmd0aDthPHQ7bj0wLCsrYSl7Zm9yKHZhciBjPWlbYV0sdT1jLnNwbGl0KHMpO2M9dVtuXTspe3ZhciBmPWMuY2hhckNvZGVBdCgwKTtpZigxPT09QWUmJihmPk4mJmY8OTB8fGY+OTYmJmY8MTIzfHxmPT09enx8Zj09PVcmJmMuY2hhckNvZGVBdCgxKSE9PVcpJiZpc05hTihwYXJzZUZsb2F0KGMpKSsoLTEhPT1jLmluZGV4T2YoXCIoXCIpKT09PTEpc3dpdGNoKGMpe2Nhc2VcImluZmluaXRlXCI6Y2FzZVwiYWx0ZXJuYXRlXCI6Y2FzZVwiYmFja3dhcmRzXCI6Y2FzZVwicnVubmluZ1wiOmNhc2VcIm5vcm1hbFwiOmNhc2VcImZvcndhcmRzXCI6Y2FzZVwiYm90aFwiOmNhc2VcIm5vbmVcIjpjYXNlXCJsaW5lYXJcIjpjYXNlXCJlYXNlXCI6Y2FzZVwiZWFzZS1pblwiOmNhc2VcImVhc2Utb3V0XCI6Y2FzZVwiZWFzZS1pbi1vdXRcIjpjYXNlXCJwYXVzZWRcIjpjYXNlXCJyZXZlcnNlXCI6Y2FzZVwiYWx0ZXJuYXRlLXJldmVyc2VcIjpjYXNlXCJpbmhlcml0XCI6Y2FzZVwiaW5pdGlhbFwiOmNhc2VcInVuc2V0XCI6Y2FzZVwic3RlcC1zdGFydFwiOmNhc2VcInN0ZXAtZW5kXCI6YnJlYWs7ZGVmYXVsdDpjKz1UZX11W24rK109Y31vKz0oMD09PWE/XCJcIjpcIixcIikrdS5qb2luKFwiIFwiKX19cmV0dXJuIG89citvK1wiO1wiLDE9PT1DZXx8Mj09PUNlJiZOZShvLDEpP00rbytvOm99KGYpO2lmKDA9PT1DZXx8Mj09PUNlJiYhTmUoZiwxKSlyZXR1cm4gZjtzd2l0Y2goZCl7Y2FzZSAxMDE1OnJldHVybiA5Nz09PWYuY2hhckNvZGVBdCgxMCk/TStmK2Y6ZjtjYXNlIDk1MTpyZXR1cm4gMTE2PT09Zi5jaGFyQ29kZUF0KDMpP00rZitmOmY7Y2FzZSA5NjM6cmV0dXJuIDExMD09PWYuY2hhckNvZGVBdCg1KT9NK2YrZjpmO2Nhc2UgMTAwOTppZigxMDAhPT1mLmNoYXJDb2RlQXQoNCkpYnJlYWs7Y2FzZSA5Njk6Y2FzZSA5NDI6cmV0dXJuIE0rZitmO2Nhc2UgOTc4OnJldHVybiBNK2YraytmK2Y7Y2FzZSAxMDE5OmNhc2UgOTgzOnJldHVybiBNK2YraytmK1IrZitmO2Nhc2UgODgzOnJldHVybiBmLmNoYXJDb2RlQXQoOCk9PT1XP00rZitmOmYuaW5kZXhPZihcImltYWdlLXNldChcIiwxMSk+MD9mLnJlcGxhY2UoaixcIiQxXCIrTStcIiQyXCIpK2Y6ZjtjYXNlIDkzMjppZihmLmNoYXJDb2RlQXQoNCk9PT1XKXN3aXRjaChmLmNoYXJDb2RlQXQoNSkpe2Nhc2UgMTAzOnJldHVybiBNK1wiYm94LVwiK2YucmVwbGFjZShcIi1ncm93XCIsXCJcIikrTStmK1IrZi5yZXBsYWNlKFwiZ3Jvd1wiLFwicG9zaXRpdmVcIikrZjtjYXNlIDExNTpyZXR1cm4gTStmK1IrZi5yZXBsYWNlKFwic2hyaW5rXCIsXCJuZWdhdGl2ZVwiKStmO2Nhc2UgOTg6cmV0dXJuIE0rZitSK2YucmVwbGFjZShcImJhc2lzXCIsXCJwcmVmZXJyZWQtc2l6ZVwiKStmfXJldHVybiBNK2YrUitmK2Y7Y2FzZSA5NjQ6cmV0dXJuIE0rZitSK1wiZmxleC1cIitmK2Y7Y2FzZSAxMDIzOmlmKDk5IT09Zi5jaGFyQ29kZUF0KDgpKWJyZWFrO3JldHVybiBjPWYuc3Vic3RyaW5nKGYuaW5kZXhPZihcIjpcIiwxNSkpLnJlcGxhY2UoXCJmbGV4LVwiLFwiXCIpLnJlcGxhY2UoXCJzcGFjZS1iZXR3ZWVuXCIsXCJqdXN0aWZ5XCIpLE0rXCJib3gtcGFja1wiK2MrTStmK1IrXCJmbGV4LXBhY2tcIitjK2Y7Y2FzZSAxMDA1OnJldHVybiBpLnRlc3QoZik/Zi5yZXBsYWNlKG8sXCI6XCIrTSkrZi5yZXBsYWNlKG8sXCI6XCIraykrZjpmO2Nhc2UgMWUzOnN3aXRjaCh1PShjPWYuc3Vic3RyaW5nKDEzKS50cmltKCkpLmluZGV4T2YoXCItXCIpKzEsYy5jaGFyQ29kZUF0KDApK2MuY2hhckNvZGVBdCh1KSl7Y2FzZSAyMjY6Yz1mLnJlcGxhY2UoeCxcInRiXCIpO2JyZWFrO2Nhc2UgMjMyOmM9Zi5yZXBsYWNlKHgsXCJ0Yi1ybFwiKTticmVhaztjYXNlIDIyMDpjPWYucmVwbGFjZSh4LFwibHJcIik7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gZn1yZXR1cm4gTStmK1IrYytmO2Nhc2UgMTAxNzppZigtMT09PWYuaW5kZXhPZihcInN0aWNreVwiLDkpKXJldHVybiBmO2Nhc2UgOTc1OnN3aXRjaCh1PShmPWUpLmxlbmd0aC0xMCxkPShjPSgzMz09PWYuY2hhckNvZGVBdCh1KT9mLnN1YnN0cmluZygwLHUpOmYpLnN1YnN0cmluZyhlLmluZGV4T2YoXCI6XCIsNykrMSkudHJpbSgpKS5jaGFyQ29kZUF0KDApKygwfGMuY2hhckNvZGVBdCg3KSkpe2Nhc2UgMjAzOmlmKGMuY2hhckNvZGVBdCg4KTwxMTEpYnJlYWs7Y2FzZSAxMTU6Zj1mLnJlcGxhY2UoYyxNK2MpK1wiO1wiK2Y7YnJlYWs7Y2FzZSAyMDc6Y2FzZSAxMDI6Zj1mLnJlcGxhY2UoYyxNKyhkPjEwMj9cImlubGluZS1cIjpcIlwiKStcImJveFwiKStcIjtcIitmLnJlcGxhY2UoYyxNK2MpK1wiO1wiK2YucmVwbGFjZShjLFIrYytcImJveFwiKStcIjtcIitmfXJldHVybiBmK1wiO1wiO2Nhc2UgOTM4OmlmKGYuY2hhckNvZGVBdCg1KT09PVcpc3dpdGNoKGYuY2hhckNvZGVBdCg2KSl7Y2FzZSAxMDU6cmV0dXJuIGM9Zi5yZXBsYWNlKFwiLWl0ZW1zXCIsXCJcIiksTStmK00rXCJib3gtXCIrYytSK1wiZmxleC1cIitjK2Y7Y2FzZSAxMTU6cmV0dXJuIE0rZitSK1wiZmxleC1pdGVtLVwiK2YucmVwbGFjZShMLFwiXCIpK2Y7ZGVmYXVsdDpyZXR1cm4gTStmK1IrXCJmbGV4LWxpbmUtcGFja1wiK2YucmVwbGFjZShcImFsaWduLWNvbnRlbnRcIixcIlwiKS5yZXBsYWNlKEwsXCJcIikrZn1icmVhaztjYXNlIDk3MzpjYXNlIDk4OTppZihmLmNoYXJDb2RlQXQoMykhPT1XfHwxMjI9PT1mLmNoYXJDb2RlQXQoNCkpYnJlYWs7Y2FzZSA5MzE6Y2FzZSA5NTM6aWYoITA9PT1TLnRlc3QoZSkpcmV0dXJuIDExNT09PShjPWUuc3Vic3RyaW5nKGUuaW5kZXhPZihcIjpcIikrMSkpLmNoYXJDb2RlQXQoMCk/JGUoZS5yZXBsYWNlKFwic3RyZXRjaFwiLFwiZmlsbC1hdmFpbGFibGVcIiksdCxuLHIpLnJlcGxhY2UoXCI6ZmlsbC1hdmFpbGFibGVcIixcIjpzdHJldGNoXCIpOmYucmVwbGFjZShjLE0rYykrZi5yZXBsYWNlKGMsaytjLnJlcGxhY2UoXCJmaWxsLVwiLFwiXCIpKStmO2JyZWFrO2Nhc2UgOTYyOmlmKGY9TStmKygxMDI9PT1mLmNoYXJDb2RlQXQoNSk/UitmOlwiXCIpK2YsbityPT09MjExJiYxMDU9PT1mLmNoYXJDb2RlQXQoMTMpJiZmLmluZGV4T2YoXCJ0cmFuc2Zvcm1cIiwxMCk+MClyZXR1cm4gZi5zdWJzdHJpbmcoMCxmLmluZGV4T2YoXCI7XCIsMjcpKzEpLnJlcGxhY2UoYSxcIiQxXCIrTStcIiQyXCIpK2Z9cmV0dXJuIGZ9ZnVuY3Rpb24gTmUoZSx0KXt2YXIgbj1lLmluZGV4T2YoMT09PXQ/XCI6XCI6XCJ7XCIpLHI9ZS5zdWJzdHJpbmcoMCwzIT09dD9uOjEwKSxvPWUuc3Vic3RyaW5nKG4rMSxlLmxlbmd0aC0xKTtyZXR1cm4gRWUoMiE9PXQ/cjpyLnJlcGxhY2UoRSxcIiQxXCIpLG8sdCl9ZnVuY3Rpb24gRmUoZSx0KXt2YXIgbj0kZSh0LHQuY2hhckNvZGVBdCgwKSx0LmNoYXJDb2RlQXQoMSksdC5jaGFyQ29kZUF0KDIpKTtyZXR1cm4gbiE9PXQrXCI7XCI/bi5yZXBsYWNlKE8sXCIgb3IgKCQxKVwiKS5zdWJzdHJpbmcoNCk6XCIoXCIrdCtcIilcIn1mdW5jdGlvbiBVZShlLHQsbixyLG8saSxhLGwscyxjKXtmb3IodmFyIHUsZj0wLGQ9dDtmPExlOysrZilzd2l0Y2godT1PZVtmXS5jYWxsKEdlLGUsZCxuLHIsbyxpLGEsbCxzLGMpKXtjYXNlIHZvaWQgMDpjYXNlITE6Y2FzZSEwOmNhc2UgbnVsbDpicmVhaztkZWZhdWx0OmQ9dX1pZihkIT09dClyZXR1cm4gZH1mdW5jdGlvbiBXZShlLHQsbixyKXtmb3IodmFyIG89dCsxO288bjsrK28pc3dpdGNoKHIuY2hhckNvZGVBdChvKSl7Y2FzZSBKOmlmKGU9PT1HJiZyLmNoYXJDb2RlQXQoby0xKT09PUcmJnQrMiE9PW8pcmV0dXJuIG8rMTticmVhaztjYXNlIEQ6aWYoZT09PUopcmV0dXJuIG8rMX1yZXR1cm4gb31mdW5jdGlvbiB6ZShlKXtmb3IodmFyIHQgaW4gZSl7dmFyIG49ZVt0XTtzd2l0Y2godCl7Y2FzZVwia2V5ZnJhbWVcIjpBZT0wfG47YnJlYWs7Y2FzZVwiZ2xvYmFsXCI6eWU9MHxuO2JyZWFrO2Nhc2VcImNhc2NhZGVcIjptZT0wfG47YnJlYWs7Y2FzZVwiY29tcHJlc3NcIjp3ZT0wfG47YnJlYWs7Y2FzZVwic2VtaWNvbG9uXCI6YmU9MHxuO2JyZWFrO2Nhc2VcInByZXNlcnZlXCI6eGU9MHxuO2JyZWFrO2Nhc2VcInByZWZpeFwiOkVlPW51bGwsbj9cImZ1bmN0aW9uXCIhPXR5cGVvZiBuP0NlPTE6KENlPTIsRWU9bik6Q2U9MH19cmV0dXJuIHplfWZ1bmN0aW9uIEdlKHQsbil7aWYodm9pZCAwIT09dGhpcyYmdGhpcy5jb25zdHJ1Y3Rvcj09PUdlKXJldHVybiBlKHQpO3ZhciBvPXQsaT1vLmNoYXJDb2RlQXQoMCk7aTwzMyYmKGk9KG89by50cmltKCkpLmNoYXJDb2RlQXQoMCkpLEFlPjAmJihUZT1vLnJlcGxhY2UocCxpPT09Qj9cIlwiOlwiLVwiKSksaT0xLDE9PT1tZT9CZT1vOkhlPW87dmFyIGEsbD1bQmVdO0xlPjAmJnZvaWQgMCE9PShhPVVlKGplLG4sbCxsLGdlLGhlLDAsMCwwLDApKSYmXCJzdHJpbmdcIj09dHlwZW9mIGEmJihuPWEpO3ZhciBzPVZlKF9lLGwsbiwwLDApO3JldHVybiBMZT4wJiZ2b2lkIDAhPT0oYT1VZShTZSxzLGwsbCxnZSxoZSxzLmxlbmd0aCwwLDAsMCkpJiZcInN0cmluZ1wiIT10eXBlb2Yocz1hKSYmKGk9MCksVGU9XCJcIixCZT1cIlwiLEhlPVwiXCIsdmU9MCxnZT0xLGhlPTEsd2UqaT09MD9zOnMucmVwbGFjZShyLFwiXCIpLnJlcGxhY2UobSxcIlwiKS5yZXBsYWNlKEMsXCIkMVwiKS5yZXBsYWNlKHksXCIkMVwiKS5yZXBsYWNlKHcsXCIgXCIpfXJldHVybiBHZS51c2U9ZnVuY3Rpb24gZSh0KXtzd2l0Y2godCl7Y2FzZSB2b2lkIDA6Y2FzZSBudWxsOkxlPU9lLmxlbmd0aD0wO2JyZWFrO2RlZmF1bHQ6aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdClPZVtMZSsrXT10O2Vsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIHQpZm9yKHZhciBuPTAscj10Lmxlbmd0aDtuPHI7KytuKWUodFtuXSk7ZWxzZSBJZT0wfCEhdH1yZXR1cm4gZX0sR2Uuc2V0PXplLHZvaWQgMCE9PXQmJnplKHQpLEdlfShudWxsKX0sMzkyNjooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7bi5kKHQse2E6KCk9PnZ9KTt2YXIgcj1uKDY2NzgpLG89big1NDM4KSxpPW4oNzEwMCksYT1uKDEyMSksbD1uKDcyNzgpLHM9big5NjEwKTt2YXIgYz1uKDExMjcpO2NvbnN0IHU9KDAsbig5MTE3KS5aKShgJHtcInVuZGVmaW5lZFwiIT10eXBlb2YgZmluJiZmaW4/Lm1lLmlkZW50aXR5LnV1aWR9LWVudGVycHJpc2UtYm9va21hcmtzYCk7dmFyIGY9big4NjM2KTtjb25zdCBkPWU9Pih7aWRlbnRpdHk6ZSxvcGVuZmluV2luZG93OmZpbi5XaW5kb3cud3JhcFN5bmMoZSksX2Jvb2ttYXJrczp7X2NyZWF0ZUJvb2ttYXJrTm9kZTphc3luYyBlPT4oYXN5bmMgZT0+KGF3YWl0IHUoKSkuZGlzcGF0Y2goYy5iJC5DcmVhdGVCb29rbWFya05vZGUsZSkpKGUpLF9nZXRCb29rbWFya05vZGU6YXN5bmMgZT0+KGFzeW5jIGU9Pihhd2FpdCB1KCkpLmRpc3BhdGNoKGMuYiQuR2V0Qm9va21hcmtOb2RlLGUpKShlKSxfc2VhcmNoQm9va21hcmtOb2Rlczphc3luYyBlPT4oYXN5bmMgZT0+KGF3YWl0IHUoKSkuZGlzcGF0Y2goYy5iJC5TZWFyY2hCb29rbWFya05vZGVzLGUpKShlKSxfdXBkYXRlQm9va21hcmtOb2RlOmFzeW5jIGU9Pihhc3luYyBlPT4oYXdhaXQgdSgpKS5kaXNwYXRjaChjLmIkLlVwZGF0ZUJvb2ttYXJrTm9kZSxlKSkoZSksX2RlbGV0ZUJvb2ttYXJrTm9kZTphc3luYyBlPT4oYXN5bmMgZT0+KGF3YWl0IHUoKSkuZGlzcGF0Y2goYy5iJC5EZWxldGVCb29rbWFya05vZGUsZSkpKGUpfSxnZXRQYWdlczphc3luYygpPT4oYXdhaXQoMCxvLnhwKShlKSkuZGlzcGF0Y2goby5mbi5HZXRQYWdlc0ZvcldpbmRvdyxlKSxnZXRQYWdlOmFzeW5jIHQ9Pihhd2FpdCgwLG8ueHApKGUpKS5kaXNwYXRjaChvLmZuLkdldFBhZ2VGb3JXaW5kb3cse2lkZW50aXR5OmUscGFnZUlkOnR9KSxhZGRQYWdlOmFzeW5jIHQ9PigwLGYuYUEpKCkuQnJvd3Nlci53cmFwU3luYyhlKS5fYWRkUGFnZSh0KSxfYWRkUGFnZTphc3luYyh0LG4pPT57Y29uc3Qgcj1hd2FpdCgwLG8ueHApKGUpLGk9e2lkZW50aXR5OmUscGFnZTp0LGluc2VydGlvbkluZGV4Om4/LmluZGV4fTtyZXR1cm4gci5kaXNwYXRjaChvLmZuLkFkZFBhZ2UsaSl9LHJlbW92ZVBhZ2U6YXN5bmMgdD0+KGF3YWl0KDAsby54cCkoZSkpLmRpc3BhdGNoKG8uZm4uRGV0YWNoUGFnZXNGcm9tV2luZG93LHtpZGVudGl0eTplLHBhZ2VJZHM6W3RdfSkscmVwYXJlbnRQYWdlOmFzeW5jIHQ9PigwLGYuYUEpKCkuQnJvd3Nlci53cmFwU3luYyhlKS5fcmVwYXJlbnRQYWdlKHQpLF9yZXBhcmVudFBhZ2U6YXN5bmMgdD0+e2NvbnN0e3BhZ2VJZDpufT10LHI9YXdhaXQoMCxvLnhwKShlKSxpPShhd2FpdCByLmRpc3BhdGNoKG8uZm4uR2V0QWxsQXR0YWNoZWRQYWdlcyx2b2lkIDApKS5maW5kKCgoe3BhZ2VJZDplfSk9PmU9PT1uKSk7aWYoIWkpdGhyb3cgbmV3IEVycm9yKGBSZXBhcmVudCBQYWdlIEVycm9yOiBUYXJnZXQgcGFnZSB3aXRoIHBhZ2VJZCAke259IG5vdCBmb3VuZGApO2kubXVsdGlJbnN0YW5jZVZpZXdCZWhhdmlvcj1cInJlcGFyZW50XCI7Y29uc3QgYT17aWRlbnRpdHk6ZSxwYWdlczpbaV0saW5zZXJ0aW9uSW5kZXg6dC5pbmRleH07cmV0dXJuIHIuZGlzcGF0Y2goby5mbi5BdHRhY2hQYWdlc1RvV2luZG93LGEpfSxzZXRBY3RpdmVQYWdlOmFzeW5jIHQ9Pihhd2FpdCgwLG8ueHApKGUpKS5kaXNwYXRjaChvLmZuLlNldEFjdGl2ZVBhZ2Use2lkZW50aXR5OmUscGFnZUlkOnR9KSx1cGRhdGVQYWdlOmFzeW5jIHQ9Pntjb25zdCBuPWF3YWl0KDAsby54cCkoZSk7cmV0dXJuIHQuaWRlbnRpdHk9ZSxuLmRpc3BhdGNoKG8uZm4uVXBkYXRlUGFnZUZvcldpbmRvdyx0KX0scmVvcmRlclBhZ2VzOmFzeW5jIHQ9Pntjb25zdCBuPWF3YWl0KDAsby54cCkoZSk7cmV0dXJuIHQuaWRlbnRpdHk9ZSxuLmRpc3BhdGNoKG8uZm4uUmVvcmRlclBhZ2VzRm9yV2luZG93LHQpfSxfb3Blbkdsb2JhbENvbnRleHRNZW51OmFzeW5jIHQ9Pntjb25zdCBuPWF3YWl0KDAsby54cCkoZSk7cmV0dXJuIHQuaWRlbnRpdHk9ZSxuLmRpc3BhdGNoKG8uZm4uT3Blbkdsb2JhbENvbnRleHRNZW51SW50ZXJuYWwsdCl9LHJlcGxhY2VUb29sYmFyT3B0aW9uczphc3luYyB0PT57YXdhaXQoMCxvLnhwKShlKTtjb25zdCBuPWZpbi5XaW5kb3cud3JhcFN5bmMoZSk7YXdhaXQgbi51cGRhdGVPcHRpb25zKHt3b3Jrc3BhY2VQbGF0Zm9ybTp7dG9vbGJhck9wdGlvbnM6dH19KX0scmVwbGFjZVdpbmRvd1N0YXRlQnV0dG9uT3B0aW9uczphc3luYyB0PT57YXdhaXQoMCxvLnhwKShlKTtjb25zdCBuPWZpbi5XaW5kb3cud3JhcFN5bmMoZSk7YXdhaXQgbi51cGRhdGVPcHRpb25zKHt3b3Jrc3BhY2VQbGF0Zm9ybTp7d2luZG93U3RhdGVCdXR0b25PcHRpb25zOnR9fSl9LHVwZGF0ZUJyb3dzZXJXaW5kb3dUaXRsZTphc3luYyB0PT57Y29uc3Qgbj1maW4uV2luZG93LndyYXBTeW5jKGUpO1wic3RyaW5nXCIhPXR5cGVvZiB0P2F3YWl0IG4udXBkYXRlT3B0aW9ucyh7d29ya3NwYWNlUGxhdGZvcm06e3RpdGxlOnR9fSk6Y29uc29sZS53YXJuKFwiVHlwZSBzdHJpbmcgZm9yIHdpbmRvdyB0aXRsZSBpcyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIFdpbmRvd1RpdGxlIHR5cGUgaW5zdGVhZFwiLHQpfSxfb3BlblZpZXdUYWJDb250ZXh0TWVudTphc3luYyB0PT57Y29uc3Qgbj1hd2FpdCgwLG8ueHApKGUpO3JldHVybiB0LmlkZW50aXR5PWUsbi5kaXNwYXRjaChvLmZuLk9wZW5WaWV3VGFiQ29udGV4dE1lbnVJbnRlcm5hbCx0KX0sX29wZW5QYWdlVGFiQ29udGV4dE1lbnU6YXN5bmMgdD0+e2NvbnN0IG49YXdhaXQoMCxvLnhwKShlKTtyZXR1cm4gdC5pZGVudGl0eT1lLG4uZGlzcGF0Y2goby5mbi5PcGVuUGFnZVRhYkNvbnRleHRNZW51SW50ZXJuYWwsdCl9LF9vcGVuU2F2ZU1vZGFsOmFzeW5jIHQ9Pnthd2FpdCgwLG8ueHApKGUpO3JldHVybihhd2FpdCgwLGMuRG0pKGUpKS5kaXNwYXRjaChjLnl6Lk9wZW5TYXZlTW9kYWxJbnRlcm5hbCx0KX0sX29wZW5TYXZlQnV0dG9uQ29udGV4dE1lbnU6YXN5bmMgdD0+e2NvbnN0IG49YXdhaXQoMCxvLnhwKShlKTtyZXR1cm4gdC5pZGVudGl0eT1lLG4uZGlzcGF0Y2goby5mbi5PcGVuU2F2ZUJ1dHRvbkNvbnRleHRNZW51SW50ZXJuYWwsdCl9LF9hZGREZWZhdWx0UGFnZTphc3luYyB0PT57Y29uc3Qgbj1hd2FpdCgwLG8ueHApKGUpO3JldHVybiB0LmlkZW50aXR5PWUsbi5kaXNwYXRjaChvLmZuLkFkZERlZmF1bHRQYWdlLHQpfSxfdHJhY2tSZW1vdmVkVGFiOmFzeW5jIHQ9Pihhd2FpdCgwLG8ueHApKGUpKS5kaXNwYXRjaChvLmZuLlRyYWNrUmVtb3ZlZFRhYkludGVybmFsLHQpLF9yZXN0b3JlUmVtb3ZlZFRhYjphc3luYyB0PT4oYXdhaXQoMCxvLnhwKShlKSkuZGlzcGF0Y2goby5mbi5SZXN0b3JlUmVtb3ZlZFRhYkludGVybmFsLHQpLF90cmFja1Zpc2l0ZWRTaXRlOmFzeW5jIHQ9Pihhd2FpdCgwLG8ueHApKGUpKS5kaXNwYXRjaChvLmZuLlRyYWNrVmlzaXRlZFNpdGVJbnRlcm5hbCx0KSxfZ2V0UmVjZW50bHlWaXNpdGVkU2l0ZXM6YXN5bmMgdD0+KGF3YWl0KDAsby54cCkoZSkpLmRpc3BhdGNoKG8uZm4uR2V0UmVjZW50bHlWaXNpdGVkU2l0ZXNJbnRlcm5hbCx0KSxfZ2V0RnJlcXVlbnRseVZpc2l0ZWRTaXRlczphc3luYyB0PT4oYXdhaXQoMCxvLnhwKShlKSkuZGlzcGF0Y2goby5mbi5HZXRGcmVxdWVudGx5VmlzaXRlZFNpdGVzSW50ZXJuYWwsdCksX3NlYXJjaFNpdGVzOmFzeW5jIHQ9Pihhd2FpdCgwLG8ueHApKGUpKS5kaXNwYXRjaChvLmZuLlNlYXJjaFNpdGVzSW50ZXJuYWwse2lkZW50aXR5OmUscmVxOnR9KSxfZ2V0Q3VyYXRlZENvbnRlbnQ6YXN5bmMgdD0+KGF3YWl0KDAsby54cCkoZSkpLmRpc3BhdGNoKG8uZm4uR2V0Q3VyYXRlZENvbnRlbnRJbnRlcm5hbCx7aWRlbnRpdHk6ZSxyZXE6dH0pLF9oYW5kbGVSZXF1ZXN0TmF2aWdhdGlvbjphc3luYyB0PT4oYXdhaXQoMCxvLnhwKShlKSkuZGlzcGF0Y2goby5mbi5IYW5kbGVSZXF1ZXN0TmF2aWdhdGlvbkludGVybmFsLHQpfSkscD1lPT57Y29uc3QgdD1maW4uUGxhdGZvcm0ud3JhcFN5bmMoZSk7cmV0dXJue3dyYXBTeW5jOmU9PmQoZSksY3JlYXRlV2luZG93OmFzeW5jIG49Pntjb25zdCByPSgoKT0+e2NvbnN0IGU9YGJyb3dzZXItd2luZG93LXN0YXJ0dXAtJHsoMCxzLkgpKCl9YDtyZXR1cm4gbC5aLm1hcmtTdGFydChlKSxlfSkoKTsoZT0+e2Zpbi5BcHBsaWNhdGlvbi53cmFwU3luYyh7dXVpZDpmaW4ubWUuaWRlbnRpdHkudXVpZH0pLm9uY2UoXCJ3aW5kb3ctc2hvd25cIiwoKCk9PntsLloubWFya0FuZE1lYXN1cmUoXCJicm93c2VyLXdpbmRvdy1zaG93blwiLGUpfSkpfSkociksYXdhaXQoMCxvLnhwKShlKTtjb25zdCBpPWF3YWl0IHQuY3JlYXRlV2luZG93KG4pO3JldHVybihlPT57bC5aLm1hcmtBbmRNZWFzdXJlKFwiYnJvd3Nlci13aW5kb3ctc3RhcnRlZFwiLGUpfSkociksZChpLmlkZW50aXR5KX0sZ2V0QWxsQXR0YWNoZWRQYWdlczphc3luYygpPT4oYXdhaXQoMCxvLnhwKShlKSkuZGlzcGF0Y2goby5mbi5HZXRBbGxBdHRhY2hlZFBhZ2VzLHZvaWQgMCksZ2V0QWxsV2luZG93czphc3luYygpPT57YXdhaXQoMCxvLnhwKShlKTtyZXR1cm4oYXdhaXQoMCxhLkdQKSgpKS5tYXAoKGU9PmQoZS5pZGVudGl0eSkpKX0sZ2V0VW5pcXVlUGFnZVRpdGxlOmFzeW5jIHQ9Pihhd2FpdCgwLG8ueHApKGUpKS5kaXNwYXRjaChvLmZuLkdldFVuaXF1ZVBhZ2VUaXRsZSx0KSxnZXRMYXN0Rm9jdXNlZFdpbmRvdzphc3luYygpPT4oYXdhaXQoMCxvLnhwKShlKSkuZGlzcGF0Y2goby5mbi5HZXRMYXN0Rm9jdXNlZEJyb3dzZXJXaW5kb3csdm9pZCAwKX19LGg9ZT0+KHtjcmVhdGVQYWdlOmFzeW5jIHQ9Pihhd2FpdCgwLG8ueHApKGUpKS5kaXNwYXRjaChvLmZuLkNyZWF0ZVNhdmVkUGFnZUludGVybmFsLHQpLGRlbGV0ZVBhZ2U6YXN5bmMgdD0+KGF3YWl0KDAsby54cCkoZSkpLmRpc3BhdGNoKG8uZm4uRGVsZXRlU2F2ZWRQYWdlSW50ZXJuYWwsdCksdXBkYXRlUGFnZTphc3luYyB0PT4oYXdhaXQoMCxvLnhwKShlKSkuZGlzcGF0Y2goby5mbi5VcGRhdGVTYXZlZFBhZ2VJbnRlcm5hbCx0KSxnZXRQYWdlOmFzeW5jIHQ9Pihhd2FpdCgwLG8ueHApKGUpKS5kaXNwYXRjaChvLmZuLkdldFNhdmVkUGFnZSx0KSxnZXRQYWdlczphc3luYyB0PT4oYXdhaXQoMCxvLnhwKShlKSkuZGlzcGF0Y2goby5mbi5HZXRTYXZlZFBhZ2VzLHQpLHNhdmVQYWdlOmFzeW5jIHQ9Pihhd2FpdCgwLG8ueHApKGUpKS5kaXNwYXRjaChvLmZuLlNhdmVQYWdlLHQpLGNyZWF0ZVdvcmtzcGFjZTphc3luYyB0PT4oYXdhaXQoMCxvLmo3KShlKSkuZGlzcGF0Y2goby5mbi5DcmVhdGVTYXZlZFdvcmtzcGFjZSx0KSxkZWxldGVXb3Jrc3BhY2U6YXN5bmMgdD0+e2NvbnN0IG49digpLHI9YXdhaXQgbi5nZXRDdXJyZW50V29ya3NwYWNlKCk7aWYoci53b3Jrc3BhY2VJZD09PXQpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZGVsZXRlIGN1cnJlbnQgYWN0aXZlIHdvcmtzcGFjZSAke3IudGl0bGV9YCk7cmV0dXJuKGF3YWl0KDAsby5qNykoZSkpLmRpc3BhdGNoKG8uZm4uRGVsZXRlU2F2ZWRXb3Jrc3BhY2UsdCl9LHVwZGF0ZVdvcmtzcGFjZTphc3luYyB0PT4oYXdhaXQoMCxvLmo3KShlKSkuZGlzcGF0Y2goby5mbi5VcGRhdGVTYXZlZFdvcmtzcGFjZSx0KSxnZXRXb3Jrc3BhY2U6YXN5bmMgdD0+KGF3YWl0KDAsby5qNykoZSkpLmRpc3BhdGNoKG8uZm4uR2V0U2F2ZWRXb3Jrc3BhY2UsdCksZ2V0V29ya3NwYWNlczphc3luYyB0PT4oYXdhaXQoMCxvLmo3KShlKSkuZGlzcGF0Y2goby5mbi5HZXRTYXZlZFdvcmtzcGFjZXMsdCksc2F2ZVdvcmtzcGFjZTphc3luYyB0PT4oYXdhaXQoMCxvLmo3KShlKSkuZGlzcGF0Y2goby5mbi5TYXZlV29ya3NwYWNlLHQpLGdldERvY2tQcm92aWRlckNvbmZpZzphc3luYyB0PT4oYXdhaXQoMCxvLmo3KShlKSkuZGlzcGF0Y2goby5mbi5HZXREb2NrUHJvdmlkZXJDb25maWcsdCksc2F2ZURvY2tQcm92aWRlckNvbmZpZzphc3luYyB0PT4oYXdhaXQoMCxvLmo3KShlKSkuZGlzcGF0Y2goby5mbi5TYXZlRG9ja1Byb3ZpZGVyQ29uZmlnLHQpfSk7dmFyIGc9big3MDUpO2NvbnN0IHY9KCk9PihlPT57Y29uc3QgdD1maW4uUGxhdGZvcm0ud3JhcFN5bmMoZSk7bGV0IG47cmV0dXJuIE9iamVjdC5hc3NpZ24odCx7YXBwbHlTbmFwc2hvdDphc3luYyh0LG4pPT57aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQmJiF0Py53aW5kb3dzKXRocm93IG5ldyBFcnJvcihcIk5vdCBhIHZhbGlkIGJyb3dzZXIgc25hcHNob3RcIik7cmV0dXJuIGZpbi5QbGF0Zm9ybS53cmFwU3luYyhlKS5hcHBseVNuYXBzaG90KHQsbil9LGdldFNuYXBzaG90OigpPT5maW4uUGxhdGZvcm0ud3JhcFN5bmMoZSkuZ2V0U25hcHNob3QoKS50aGVuKChlPT5lKSksZ2V0Vmlld1NuYXBzaG90OnQ9PmZpbi5QbGF0Zm9ybS53cmFwU3luYyhlKS5nZXRWaWV3U25hcHNob3QodCksY3JlYXRlVmlldzoodCxuLHIpPT5maW4uUGxhdGZvcm0ud3JhcFN5bmMoZSkuY3JlYXRlVmlldyh0LG4sciksbGF1bmNoQXBwOmFzeW5jIHQ9Pihjb25zb2xlLndhcm4oXCJsYXVuY2hBcHAgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuIEl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSBjcmVhdGVWaWV3IC0gaHR0cHM6Ly9kZXZlbG9wZXJzLm9wZW5maW4uY28vb2YtZG9jcy9kb2NzL3BsYXRmb3JtLWdldHRpbmctc3RhcnRlZCNhZGQtYS12aWV3LXRvLWFuLWV4aXN0aW5nLXdpbmRvdyBvciAgY3JlYXRlV2luZG93IC0gaHR0cHM6Ly9kZXZlbG9wZXJzLm9wZW5maW4uY28vb2YtZG9jcy9kb2NzL3BsYXRmb3JtLWdldHRpbmctc3RhcnRlZCNjcmVhdGUtYS1wbGF0Zm9ybS13aW5kb3cgaW5zdGVhZC5cIiksdC50YXJnZXR8fCh0LnRhcmdldD17dXVpZDpyLkFCLG5hbWU6ci5vQyxlbnRpdHlUeXBlOnIuQ0x8fFwidW5rbm93blwifSksKGF3YWl0KDAsby5qNykoZSkpLmRpc3BhdGNoKG8uZm4uTGF1bmNoQXBwLHQpKSxfaW52b2tlQ3VzdG9tQWN0aW9uOmFzeW5jKHQsbik9Pntjb25zdCByPWF3YWl0KDAsby5qNykoZSksYT17YWN0aW9uSWQ6dCxwYXlsb2FkOnsuLi5uLGNhbGxlclR5cGU6bi5jYWxsZXJUeXBlfHxpLiRnLkFQSX19O3JldHVybiByLmRpc3BhdGNoKG8uZm4uSW52b2tlQ3VzdG9tQWN0aW9uSW50ZXJuYWwsYSl9LF9yZXF1ZXN0UXVpdFBsYXRmb3JtRGlhbG9nOmFzeW5jIHQ9Pihhd2FpdCgwLG8uajcpKGUpKS5kaXNwYXRjaChvLmZuLlJlcXVlc3RRdWl0UGxhdGZvcm1EaWFsb2dJbnRlcm5hbCx0KSxnZXRDdXJyZW50V29ya3NwYWNlOmFzeW5jKCk9Pihhd2FpdCgwLG8uajcpKGUpKS5kaXNwYXRjaChvLmZuLkdldEN1cnJlbnRXb3Jrc3BhY2Usdm9pZCAwKSxhcHBseVdvcmtzcGFjZTphc3luYyh0LG4pPT4oYXdhaXQoMCxvLmo3KShlKSkuZGlzcGF0Y2goby5mbi5BcHBseVdvcmtzcGFjZSx7Li4udCxvcHRpb25zOm59KSxzZXRBY3RpdmVXb3Jrc3BhY2U6YXN5bmMgdD0+KGF3YWl0KDAsby5qNykoZSkpLmRpc3BhdGNoKG8uZm4uU2V0QWN0aXZlV29ya3NwYWNlLHQpLGdldExhbmd1YWdlOmFzeW5jKCk9Pihhd2FpdCgwLG8uajcpKGUpKS5kaXNwYXRjaChvLmZuLkdldExhbmd1YWdlKSxfZ2V0TGFuZ3VhZ2VSZXNvdXJjZXM6YXN5bmMoKT0+KGF3YWl0KDAsby5qNykoZSkpLmRpc3BhdGNoKG8uZm4uR2V0TGFuZ3VhZ2VSZXNvdXJjZXNJbnRlcm5hbCksc2V0TGFuZ3VhZ2U6YXN5bmMgdD0+KGF3YWl0KDAsby5qNykoZSkpLmRpc3BhdGNoKG8uZm4uU2V0TGFuZ3VhZ2UsdCksX3JhaXNlQW5hbHl0aWNzOmFzeW5jIHQ9PntpZihufHwobj1hd2FpdCgwLG8uSGgpKGUpKSxcIm9iamVjdFwiPT10eXBlb2YgbiYmbj8uYW5hbHl0aWNzPy5pc1N1cHBvcnRlZClyZXR1cm4oYXdhaXQoMCxvLmo3KShlKSkuZGlzcGF0Y2goby5mbi5BbmFseXRpY3MsdCk7ZS51dWlkfSxnZXROb3RpZmljYXRpb25zQ29uZmlnOmFzeW5jKCk9Pihhd2FpdCgwLG8uajcpKGUpKS5kaXNwYXRjaChvLmZuLkdldE5vdGlmaWNhdGlvbnNDb25maWcpLF9yZWZyZXNoQm9va21hcmtzSW50ZXJuYWw6YXN5bmMoKT0+KGF3YWl0KDAsby5qNykoZSkpLmRpc3BhdGNoKG8uZm4uUmVmcmVzaEJvb2ttYXJrc0ludGVybmFsKSxUaGVtZTooMCxnLlAwKShlKSxCcm93c2VyOnAoZSksU3RvcmFnZTpoKGUpfSl9KShmaW4ubWUuaWRlbnRpdHkpfSw3MDU6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24uZCh0LHtQMDooKT0+YX0pO24oODA2MSksbig0NzI4KSxuKDYwMDUpLG4oMTIxKSxuKDExMjcpO3ZhciByPW4oOTExNyk7dmFyIG87IWZ1bmN0aW9uKGUpe2UuVXBkYXRlUGxhdGZvcm1UaGVtZVNjaGVtZT1cInVwZGF0ZS1wbGF0Zm9ybS10aGVtZS1zY2hlbWVcIn0ob3x8KG89e30pKTsoMCxyLlopKFwib2Ytd29ya3NwYWNlLW5vdGlmaWNhdGlvbnMtc3luY1wiKTtuKDUxNTApO3ZhciBpPW4oNTQzOCk7Y29uc3QgYT1lPT4oe2dldFRoZW1lczphc3luYygpPT4oYXdhaXQoMCxpLmo3KShlKSkuZGlzcGF0Y2goaS5mbi5HZXRUaGVtZXMsdm9pZCAwKSxzZXRTZWxlY3RlZFNjaGVtZTphc3luYyB0PT4oYXdhaXQoMCxpLmo3KShlKSkuZGlzcGF0Y2goaS5mbi5TZXRTZWxlY3RlZFNjaGVtZSx0KSxnZXRTZWxlY3RlZFNjaGVtZTphc3luYygpPT4oYXdhaXQoMCxpLmo3KShlKSkuZGlzcGF0Y2goaS5mbi5HZXRTZWxlY3RlZFNjaGVtZSx2b2lkIDApfSl9LDg2MzY6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24uZCh0LHthQTooKT0+cS5hfSk7big3MTAwKTt2YXIgcj1uKDY2NzgpLG89big3Mzc4KTtuKDg0MjMpLG4oNjUzMik7dmFyIGk9big1ODA2KTt2YXIgYT1uKDYwMDUpLGw9bigxMjEpO24oODMxMSksbigyMzA0KTtPYmplY3QuY3JlYXRlKG51bGwpOygwLG8uY3JlYXRlQ29udGV4dCkoKTtjb25zdCBzPXt0eXBlOlwibG9nZ2VyXCIsbG9nKGUpe3RoaXMub3V0cHV0KFwibG9nXCIsZSl9LHdhcm4oZSl7dGhpcy5vdXRwdXQoXCJ3YXJuXCIsZSl9LGVycm9yKGUpe3RoaXMub3V0cHV0KFwiZXJyb3JcIixlKX0sb3V0cHV0KGUsdCl7Y29uc29sZSYmY29uc29sZVtlXSYmY29uc29sZVtlXS5hcHBseShjb25zb2xlLHQpfX07Y2xhc3MgY3tjb25zdHJ1Y3RvcihlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307dGhpcy5pbml0KGUsdCl9aW5pdChlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307dGhpcy5wcmVmaXg9dC5wcmVmaXh8fFwiaTE4bmV4dDpcIix0aGlzLmxvZ2dlcj1lfHxzLHRoaXMub3B0aW9ucz10LHRoaXMuZGVidWc9dC5kZWJ1Z31sb2coKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gdGhpcy5mb3J3YXJkKHQsXCJsb2dcIixcIlwiLCEwKX13YXJuKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJuIHRoaXMuZm9yd2FyZCh0LFwid2FyblwiLFwiXCIsITApfWVycm9yKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJuIHRoaXMuZm9yd2FyZCh0LFwiZXJyb3JcIixcIlwiKX1kZXByZWNhdGUoKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gdGhpcy5mb3J3YXJkKHQsXCJ3YXJuXCIsXCJXQVJOSU5HIERFUFJFQ0FURUQ6IFwiLCEwKX1mb3J3YXJkKGUsdCxuLHIpe3JldHVybiByJiYhdGhpcy5kZWJ1Zz9udWxsOihcInN0cmluZ1wiPT10eXBlb2YgZVswXSYmKGVbMF09YCR7bn0ke3RoaXMucHJlZml4fSAke2VbMF19YCksdGhpcy5sb2dnZXJbdF0oZSkpfWNyZWF0ZShlKXtyZXR1cm4gbmV3IGModGhpcy5sb2dnZXIse3ByZWZpeDpgJHt0aGlzLnByZWZpeH06JHtlfTpgLC4uLnRoaXMub3B0aW9uc30pfWNsb25lKGUpe3JldHVybihlPWV8fHRoaXMub3B0aW9ucykucHJlZml4PWUucHJlZml4fHx0aGlzLnByZWZpeCxuZXcgYyh0aGlzLmxvZ2dlcixlKX19dmFyIHU9bmV3IGM7Y2xhc3MgZntjb25zdHJ1Y3Rvcigpe3RoaXMub2JzZXJ2ZXJzPXt9fW9uKGUsdCl7cmV0dXJuIGUuc3BsaXQoXCIgXCIpLmZvckVhY2goKGU9Pnt0aGlzLm9ic2VydmVyc1tlXXx8KHRoaXMub2JzZXJ2ZXJzW2VdPW5ldyBNYXApO2NvbnN0IG49dGhpcy5vYnNlcnZlcnNbZV0uZ2V0KHQpfHwwO3RoaXMub2JzZXJ2ZXJzW2VdLnNldCh0LG4rMSl9KSksdGhpc31vZmYoZSx0KXt0aGlzLm9ic2VydmVyc1tlXSYmKHQ/dGhpcy5vYnNlcnZlcnNbZV0uZGVsZXRlKHQpOmRlbGV0ZSB0aGlzLm9ic2VydmVyc1tlXSl9ZW1pdChlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPW5ldyBBcnJheSh0PjE/dC0xOjApLHI9MTtyPHQ7cisrKW5bci0xXT1hcmd1bWVudHNbcl07aWYodGhpcy5vYnNlcnZlcnNbZV0pe0FycmF5LmZyb20odGhpcy5vYnNlcnZlcnNbZV0uZW50cmllcygpKS5mb3JFYWNoKChlPT57bGV0W3Qscl09ZTtmb3IobGV0IGU9MDtlPHI7ZSsrKXQoLi4ubil9KSl9aWYodGhpcy5vYnNlcnZlcnNbXCIqXCJdKXtBcnJheS5mcm9tKHRoaXMub2JzZXJ2ZXJzW1wiKlwiXS5lbnRyaWVzKCkpLmZvckVhY2goKHQ9PntsZXRbcixvXT10O2ZvcihsZXQgdD0wO3Q8bzt0Kyspci5hcHBseShyLFtlLC4uLm5dKX0pKX19fWZ1bmN0aW9uIGQoKXtsZXQgZSx0O2NvbnN0IG49bmV3IFByb21pc2UoKChuLHIpPT57ZT1uLHQ9cn0pKTtyZXR1cm4gbi5yZXNvbHZlPWUsbi5yZWplY3Q9dCxufWZ1bmN0aW9uIHAoZSl7cmV0dXJuIG51bGw9PWU/XCJcIjpcIlwiK2V9Y29uc3QgaD0vIyMjL2c7ZnVuY3Rpb24gZyhlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5pbmRleE9mKFwiIyMjXCIpPi0xP2UucmVwbGFjZShoLFwiLlwiKTplfWZ1bmN0aW9uIG8oKXtyZXR1cm4hZXx8XCJzdHJpbmdcIj09dHlwZW9mIGV9Y29uc3QgaT1cInN0cmluZ1wiIT10eXBlb2YgdD90OnQuc3BsaXQoXCIuXCIpO2xldCBhPTA7Zm9yKDthPGkubGVuZ3RoLTE7KXtpZihvKCkpcmV0dXJue307Y29uc3QgdD1yKGlbYV0pOyFlW3RdJiZuJiYoZVt0XT1uZXcgbiksZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KT9lW3RdOnt9LCsrYX1yZXR1cm4gbygpP3t9OntvYmo6ZSxrOnIoaVthXSl9fWZ1bmN0aW9uIHYoZSx0LG4pe2NvbnN0e29iajpyLGs6b309ZyhlLHQsT2JqZWN0KTtpZih2b2lkIDAhPT1yfHwxPT09dC5sZW5ndGgpcmV0dXJuIHZvaWQocltvXT1uKTtsZXQgaT10W3QubGVuZ3RoLTFdLGE9dC5zbGljZSgwLHQubGVuZ3RoLTEpLGw9ZyhlLGEsT2JqZWN0KTtmb3IoO3ZvaWQgMD09PWwub2JqJiZhLmxlbmd0aDspaT1gJHthW2EubGVuZ3RoLTFdfS4ke2l9YCxhPWEuc2xpY2UoMCxhLmxlbmd0aC0xKSxsPWcoZSxhLE9iamVjdCksbCYmbC5vYmomJnZvaWQgMCE9PWwub2JqW2Ake2wua30uJHtpfWBdJiYobC5vYmo9dm9pZCAwKTtsLm9ialtgJHtsLmt9LiR7aX1gXT1ufWZ1bmN0aW9uIG0oZSx0KXtjb25zdHtvYmo6bixrOnJ9PWcoZSx0KTtpZihuKXJldHVybiBuW3JdfWZ1bmN0aW9uIEMoZSx0LG4pe2Zvcihjb25zdCByIGluIHQpXCJfX3Byb3RvX19cIiE9PXImJlwiY29uc3RydWN0b3JcIiE9PXImJihyIGluIGU/XCJzdHJpbmdcIj09dHlwZW9mIGVbcl18fGVbcl1pbnN0YW5jZW9mIFN0cmluZ3x8XCJzdHJpbmdcIj09dHlwZW9mIHRbcl18fHRbcl1pbnN0YW5jZW9mIFN0cmluZz9uJiYoZVtyXT10W3JdKTpDKGVbcl0sdFtyXSxuKTplW3JdPXRbcl0pO3JldHVybiBlfWZ1bmN0aW9uIHkoZSl7cmV0dXJuIGUucmVwbGFjZSgvW1xcLVxcW1xcXVxcL1xce1xcfVxcKFxcKVxcKlxcK1xcP1xcLlxcXFxcXF5cXCRcXHxdL2csXCJcXFxcJCZcIil9dmFyIHc9e1wiJlwiOlwiJmFtcDtcIixcIjxcIjpcIiZsdDtcIixcIj5cIjpcIiZndDtcIiwnXCInOlwiJnF1b3Q7XCIsXCInXCI6XCImIzM5O1wiLFwiL1wiOlwiJiN4MkY7XCJ9O2Z1bmN0aW9uIGIoZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGU/ZS5yZXBsYWNlKC9bJjw+XCInXFwvXS9nLChlPT53W2VdKSk6ZX1jb25zdCB4PVtcIiBcIixcIixcIixcIj9cIixcIiFcIixcIjtcIl0sXz1uZXcgY2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5jYXBhY2l0eT1lLHRoaXMucmVnRXhwTWFwPW5ldyBNYXAsdGhpcy5yZWdFeHBRdWV1ZT1bXX1nZXRSZWdFeHAoZSl7Y29uc3QgdD10aGlzLnJlZ0V4cE1hcC5nZXQoZSk7aWYodm9pZCAwIT09dClyZXR1cm4gdDtjb25zdCBuPW5ldyBSZWdFeHAoZSk7cmV0dXJuIHRoaXMucmVnRXhwUXVldWUubGVuZ3RoPT09dGhpcy5jYXBhY2l0eSYmdGhpcy5yZWdFeHBNYXAuZGVsZXRlKHRoaXMucmVnRXhwUXVldWUuc2hpZnQoKSksdGhpcy5yZWdFeHBNYXAuc2V0KGUsbiksdGhpcy5yZWdFeHBRdWV1ZS5wdXNoKGUpLG59fSgyMCk7ZnVuY3Rpb24gTyhlLHQpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpcIi5cIjtpZighZSlyZXR1cm47aWYoZVt0XSlyZXR1cm4gZVt0XTtjb25zdCByPXQuc3BsaXQobik7bGV0IG89ZTtmb3IobGV0IGU9MDtlPHIubGVuZ3RoOyl7aWYoIW98fFwib2JqZWN0XCIhPXR5cGVvZiBvKXJldHVybjtsZXQgdCxpPVwiXCI7Zm9yKGxldCBhPWU7YTxyLmxlbmd0aDsrK2EpaWYoYSE9PWUmJihpKz1uKSxpKz1yW2FdLHQ9b1tpXSx2b2lkIDAhPT10KXtpZihbXCJzdHJpbmdcIixcIm51bWJlclwiLFwiYm9vbGVhblwiXS5pbmRleE9mKHR5cGVvZiB0KT4tMSYmYTxyLmxlbmd0aC0xKWNvbnRpbnVlO2UrPWEtZSsxO2JyZWFrfW89dH1yZXR1cm4gb31mdW5jdGlvbiBMKGUpe3JldHVybiBlJiZlLmluZGV4T2YoXCJfXCIpPjA/ZS5yZXBsYWNlKFwiX1wiLFwiLVwiKTplfWNsYXNzIEUgZXh0ZW5kcyBme2NvbnN0cnVjdG9yKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7bnM6W1widHJhbnNsYXRpb25cIl0sZGVmYXVsdE5TOlwidHJhbnNsYXRpb25cIn07c3VwZXIoKSx0aGlzLmRhdGE9ZXx8e30sdGhpcy5vcHRpb25zPXQsdm9pZCAwPT09dGhpcy5vcHRpb25zLmtleVNlcGFyYXRvciYmKHRoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3I9XCIuXCIpLHZvaWQgMD09PXRoaXMub3B0aW9ucy5pZ25vcmVKU09OU3RydWN0dXJlJiYodGhpcy5vcHRpb25zLmlnbm9yZUpTT05TdHJ1Y3R1cmU9ITApfWFkZE5hbWVzcGFjZXMoZSl7dGhpcy5vcHRpb25zLm5zLmluZGV4T2YoZSk8MCYmdGhpcy5vcHRpb25zLm5zLnB1c2goZSl9cmVtb3ZlTmFtZXNwYWNlcyhlKXtjb25zdCB0PXRoaXMub3B0aW9ucy5ucy5pbmRleE9mKGUpO3Q+LTEmJnRoaXMub3B0aW9ucy5ucy5zcGxpY2UodCwxKX1nZXRSZXNvdXJjZShlLHQsbil7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOnt9O2NvbnN0IG89dm9pZCAwIT09ci5rZXlTZXBhcmF0b3I/ci5rZXlTZXBhcmF0b3I6dGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcixpPXZvaWQgMCE9PXIuaWdub3JlSlNPTlN0cnVjdHVyZT9yLmlnbm9yZUpTT05TdHJ1Y3R1cmU6dGhpcy5vcHRpb25zLmlnbm9yZUpTT05TdHJ1Y3R1cmU7bGV0IGE7ZS5pbmRleE9mKFwiLlwiKT4tMT9hPWUuc3BsaXQoXCIuXCIpOihhPVtlLHRdLG4mJihBcnJheS5pc0FycmF5KG4pP2EucHVzaCguLi5uKTpcInN0cmluZ1wiPT10eXBlb2YgbiYmbz9hLnB1c2goLi4ubi5zcGxpdChvKSk6YS5wdXNoKG4pKSk7Y29uc3QgbD1tKHRoaXMuZGF0YSxhKTtyZXR1cm4hbCYmIXQmJiFuJiZlLmluZGV4T2YoXCIuXCIpPi0xJiYoZT1hWzBdLHQ9YVsxXSxuPWEuc2xpY2UoMikuam9pbihcIi5cIikpLGx8fCFpfHxcInN0cmluZ1wiIT10eXBlb2Ygbj9sOk8odGhpcy5kYXRhJiZ0aGlzLmRhdGFbZV0mJnRoaXMuZGF0YVtlXVt0XSxuLG8pfWFkZFJlc291cmNlKGUsdCxuLHIpe2xldCBvPWFyZ3VtZW50cy5sZW5ndGg+NCYmdm9pZCAwIT09YXJndW1lbnRzWzRdP2FyZ3VtZW50c1s0XTp7c2lsZW50OiExfTtjb25zdCBpPXZvaWQgMCE9PW8ua2V5U2VwYXJhdG9yP28ua2V5U2VwYXJhdG9yOnRoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3I7bGV0IGE9W2UsdF07biYmKGE9YS5jb25jYXQoaT9uLnNwbGl0KGkpOm4pKSxlLmluZGV4T2YoXCIuXCIpPi0xJiYoYT1lLnNwbGl0KFwiLlwiKSxyPXQsdD1hWzFdKSx0aGlzLmFkZE5hbWVzcGFjZXModCksdih0aGlzLmRhdGEsYSxyKSxvLnNpbGVudHx8dGhpcy5lbWl0KFwiYWRkZWRcIixlLHQsbixyKX1hZGRSZXNvdXJjZXMoZSx0LG4pe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTp7c2lsZW50OiExfTtmb3IoY29uc3QgciBpbiBuKVwic3RyaW5nXCIhPXR5cGVvZiBuW3JdJiZcIltvYmplY3QgQXJyYXldXCIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KG5bcl0pfHx0aGlzLmFkZFJlc291cmNlKGUsdCxyLG5bcl0se3NpbGVudDohMH0pO3Iuc2lsZW50fHx0aGlzLmVtaXQoXCJhZGRlZFwiLGUsdCxuKX1hZGRSZXNvdXJjZUJ1bmRsZShlLHQsbixyLG8pe2xldCBpPWFyZ3VtZW50cy5sZW5ndGg+NSYmdm9pZCAwIT09YXJndW1lbnRzWzVdP2FyZ3VtZW50c1s1XTp7c2lsZW50OiExfSxhPVtlLHRdO2UuaW5kZXhPZihcIi5cIik+LTEmJihhPWUuc3BsaXQoXCIuXCIpLHI9bixuPXQsdD1hWzFdKSx0aGlzLmFkZE5hbWVzcGFjZXModCk7bGV0IGw9bSh0aGlzLmRhdGEsYSl8fHt9O3I/QyhsLG4sbyk6bD17Li4ubCwuLi5ufSx2KHRoaXMuZGF0YSxhLGwpLGkuc2lsZW50fHx0aGlzLmVtaXQoXCJhZGRlZFwiLGUsdCxuKX1yZW1vdmVSZXNvdXJjZUJ1bmRsZShlLHQpe3RoaXMuaGFzUmVzb3VyY2VCdW5kbGUoZSx0KSYmZGVsZXRlIHRoaXMuZGF0YVtlXVt0XSx0aGlzLnJlbW92ZU5hbWVzcGFjZXModCksdGhpcy5lbWl0KFwicmVtb3ZlZFwiLGUsdCl9aGFzUmVzb3VyY2VCdW5kbGUoZSx0KXtyZXR1cm4gdm9pZCAwIT09dGhpcy5nZXRSZXNvdXJjZShlLHQpfWdldFJlc291cmNlQnVuZGxlKGUsdCl7cmV0dXJuIHR8fCh0PXRoaXMub3B0aW9ucy5kZWZhdWx0TlMpLFwidjFcIj09PXRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5QVBJP3suLi50aGlzLmdldFJlc291cmNlKGUsdCl9OnRoaXMuZ2V0UmVzb3VyY2UoZSx0KX1nZXREYXRhQnlMYW5ndWFnZShlKXtyZXR1cm4gdGhpcy5kYXRhW2VdfWhhc0xhbmd1YWdlU29tZVRyYW5zbGF0aW9ucyhlKXtjb25zdCB0PXRoaXMuZ2V0RGF0YUJ5TGFuZ3VhZ2UoZSk7cmV0dXJuISEodCYmT2JqZWN0LmtleXModCl8fFtdKS5maW5kKChlPT50W2VdJiZPYmplY3Qua2V5cyh0W2VdKS5sZW5ndGg+MCkpfXRvSlNPTigpe3JldHVybiB0aGlzLmRhdGF9fXZhciBTPXtwcm9jZXNzb3JzOnt9LGFkZFBvc3RQcm9jZXNzb3IoZSl7dGhpcy5wcm9jZXNzb3JzW2UubmFtZV09ZX0saGFuZGxlKGUsdCxuLHIsbyl7cmV0dXJuIGUuZm9yRWFjaCgoZT0+e3RoaXMucHJvY2Vzc29yc1tlXSYmKHQ9dGhpcy5wcm9jZXNzb3JzW2VdLnByb2Nlc3ModCxuLHIsbykpfSkpLHR9fTtjb25zdCBqPXt9O2NsYXNzIE0gZXh0ZW5kcyBme2NvbnN0cnVjdG9yKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtzdXBlcigpLGZ1bmN0aW9uKGUsdCxuKXtlLmZvckVhY2goKGU9Pnt0W2VdJiYobltlXT10W2VdKX0pKX0oW1wicmVzb3VyY2VTdG9yZVwiLFwibGFuZ3VhZ2VVdGlsc1wiLFwicGx1cmFsUmVzb2x2ZXJcIixcImludGVycG9sYXRvclwiLFwiYmFja2VuZENvbm5lY3RvclwiLFwiaTE4bkZvcm1hdFwiLFwidXRpbHNcIl0sZSx0aGlzKSx0aGlzLm9wdGlvbnM9dCx2b2lkIDA9PT10aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yJiYodGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcj1cIi5cIiksdGhpcy5sb2dnZXI9dS5jcmVhdGUoXCJ0cmFuc2xhdG9yXCIpfWNoYW5nZUxhbmd1YWdlKGUpe2UmJih0aGlzLmxhbmd1YWdlPWUpfWV4aXN0cyhlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e2ludGVycG9sYXRpb246e319O2lmKG51bGw9PWUpcmV0dXJuITE7Y29uc3Qgbj10aGlzLnJlc29sdmUoZSx0KTtyZXR1cm4gbiYmdm9pZCAwIT09bi5yZXN9ZXh0cmFjdEZyb21LZXkoZSx0KXtsZXQgbj12b2lkIDAhPT10Lm5zU2VwYXJhdG9yP3QubnNTZXBhcmF0b3I6dGhpcy5vcHRpb25zLm5zU2VwYXJhdG9yO3ZvaWQgMD09PW4mJihuPVwiOlwiKTtjb25zdCByPXZvaWQgMCE9PXQua2V5U2VwYXJhdG9yP3Qua2V5U2VwYXJhdG9yOnRoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3I7bGV0IG89dC5uc3x8dGhpcy5vcHRpb25zLmRlZmF1bHROU3x8W107Y29uc3QgaT1uJiZlLmluZGV4T2Yobik+LTEsYT0hKHRoaXMub3B0aW9ucy51c2VyRGVmaW5lZEtleVNlcGFyYXRvcnx8dC5rZXlTZXBhcmF0b3J8fHRoaXMub3B0aW9ucy51c2VyRGVmaW5lZE5zU2VwYXJhdG9yfHx0Lm5zU2VwYXJhdG9yfHxmdW5jdGlvbihlLHQsbil7dD10fHxcIlwiLG49bnx8XCJcIjtjb25zdCByPXguZmlsdGVyKChlPT50LmluZGV4T2YoZSk8MCYmbi5pbmRleE9mKGUpPDApKTtpZigwPT09ci5sZW5ndGgpcmV0dXJuITA7Y29uc3Qgbz1fLmdldFJlZ0V4cChgKCR7ci5tYXAoKGU9PlwiP1wiPT09ZT9cIlxcXFw/XCI6ZSkpLmpvaW4oXCJ8XCIpfSlgKTtsZXQgaT0hby50ZXN0KGUpO2lmKCFpKXtjb25zdCB0PWUuaW5kZXhPZihuKTt0PjAmJiFvLnRlc3QoZS5zdWJzdHJpbmcoMCx0KSkmJihpPSEwKX1yZXR1cm4gaX0oZSxuLHIpKTtpZihpJiYhYSl7Y29uc3QgdD1lLm1hdGNoKHRoaXMuaW50ZXJwb2xhdG9yLm5lc3RpbmdSZWdleHApO2lmKHQmJnQubGVuZ3RoPjApcmV0dXJue2tleTplLG5hbWVzcGFjZXM6b307Y29uc3QgaT1lLnNwbGl0KG4pOyhuIT09cnx8bj09PXImJnRoaXMub3B0aW9ucy5ucy5pbmRleE9mKGlbMF0pPi0xKSYmKG89aS5zaGlmdCgpKSxlPWkuam9pbihyKX1yZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgbyYmKG89W29dKSx7a2V5OmUsbmFtZXNwYWNlczpvfX10cmFuc2xhdGUoZSx0LG4pe2lmKFwib2JqZWN0XCIhPXR5cGVvZiB0JiZ0aGlzLm9wdGlvbnMub3ZlcmxvYWRUcmFuc2xhdGlvbk9wdGlvbkhhbmRsZXImJih0PXRoaXMub3B0aW9ucy5vdmVybG9hZFRyYW5zbGF0aW9uT3B0aW9uSGFuZGxlcihhcmd1bWVudHMpKSxcIm9iamVjdFwiPT10eXBlb2YgdCYmKHQ9ey4uLnR9KSx0fHwodD17fSksbnVsbD09ZSlyZXR1cm5cIlwiO0FycmF5LmlzQXJyYXkoZSl8fChlPVtTdHJpbmcoZSldKTtjb25zdCByPXZvaWQgMCE9PXQucmV0dXJuRGV0YWlscz90LnJldHVybkRldGFpbHM6dGhpcy5vcHRpb25zLnJldHVybkRldGFpbHMsbz12b2lkIDAhPT10LmtleVNlcGFyYXRvcj90LmtleVNlcGFyYXRvcjp0aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yLHtrZXk6aSxuYW1lc3BhY2VzOmF9PXRoaXMuZXh0cmFjdEZyb21LZXkoZVtlLmxlbmd0aC0xXSx0KSxsPWFbYS5sZW5ndGgtMV0scz10LmxuZ3x8dGhpcy5sYW5ndWFnZSxjPXQuYXBwZW5kTmFtZXNwYWNlVG9DSU1vZGV8fHRoaXMub3B0aW9ucy5hcHBlbmROYW1lc3BhY2VUb0NJTW9kZTtpZihzJiZcImNpbW9kZVwiPT09cy50b0xvd2VyQ2FzZSgpKXtpZihjKXtjb25zdCBlPXQubnNTZXBhcmF0b3J8fHRoaXMub3B0aW9ucy5uc1NlcGFyYXRvcjtyZXR1cm4gcj97cmVzOmAke2x9JHtlfSR7aX1gLHVzZWRLZXk6aSxleGFjdFVzZWRLZXk6aSx1c2VkTG5nOnMsdXNlZE5TOmwsdXNlZFBhcmFtczp0aGlzLmdldFVzZWRQYXJhbXNEZXRhaWxzKHQpfTpgJHtsfSR7ZX0ke2l9YH1yZXR1cm4gcj97cmVzOmksdXNlZEtleTppLGV4YWN0VXNlZEtleTppLHVzZWRMbmc6cyx1c2VkTlM6bCx1c2VkUGFyYW1zOnRoaXMuZ2V0VXNlZFBhcmFtc0RldGFpbHModCl9Oml9Y29uc3QgdT10aGlzLnJlc29sdmUoZSx0KTtsZXQgZj11JiZ1LnJlcztjb25zdCBkPXUmJnUudXNlZEtleXx8aSxwPXUmJnUuZXhhY3RVc2VkS2V5fHxpLGg9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseShmKSxnPXZvaWQgMCE9PXQuam9pbkFycmF5cz90LmpvaW5BcnJheXM6dGhpcy5vcHRpb25zLmpvaW5BcnJheXMsdj0hdGhpcy5pMThuRm9ybWF0fHx0aGlzLmkxOG5Gb3JtYXQuaGFuZGxlQXNPYmplY3Q7aWYodiYmZiYmKFwic3RyaW5nXCIhPXR5cGVvZiBmJiZcImJvb2xlYW5cIiE9dHlwZW9mIGYmJlwibnVtYmVyXCIhPXR5cGVvZiBmKSYmW1wiW29iamVjdCBOdW1iZXJdXCIsXCJbb2JqZWN0IEZ1bmN0aW9uXVwiLFwiW29iamVjdCBSZWdFeHBdXCJdLmluZGV4T2YoaCk8MCYmKFwic3RyaW5nXCIhPXR5cGVvZiBnfHxcIltvYmplY3QgQXJyYXldXCIhPT1oKSl7aWYoIXQucmV0dXJuT2JqZWN0cyYmIXRoaXMub3B0aW9ucy5yZXR1cm5PYmplY3RzKXt0aGlzLm9wdGlvbnMucmV0dXJuZWRPYmplY3RIYW5kbGVyfHx0aGlzLmxvZ2dlci53YXJuKFwiYWNjZXNzaW5nIGFuIG9iamVjdCAtIGJ1dCByZXR1cm5PYmplY3RzIG9wdGlvbnMgaXMgbm90IGVuYWJsZWQhXCIpO2NvbnN0IGU9dGhpcy5vcHRpb25zLnJldHVybmVkT2JqZWN0SGFuZGxlcj90aGlzLm9wdGlvbnMucmV0dXJuZWRPYmplY3RIYW5kbGVyKGQsZix7Li4udCxuczphfSk6YGtleSAnJHtpfSAoJHt0aGlzLmxhbmd1YWdlfSknIHJldHVybmVkIGFuIG9iamVjdCBpbnN0ZWFkIG9mIHN0cmluZy5gO3JldHVybiByPyh1LnJlcz1lLHUudXNlZFBhcmFtcz10aGlzLmdldFVzZWRQYXJhbXNEZXRhaWxzKHQpLHUpOmV9aWYobyl7Y29uc3QgZT1cIltvYmplY3QgQXJyYXldXCI9PT1oLG49ZT9bXTp7fSxyPWU/cDpkO2Zvcihjb25zdCBlIGluIGYpaWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGYsZSkpe2NvbnN0IGk9YCR7cn0ke299JHtlfWA7bltlXT10aGlzLnRyYW5zbGF0ZShpLHsuLi50LGpvaW5BcnJheXM6ITEsbnM6YX0pLG5bZV09PT1pJiYobltlXT1mW2VdKX1mPW59fWVsc2UgaWYodiYmXCJzdHJpbmdcIj09dHlwZW9mIGcmJlwiW29iamVjdCBBcnJheV1cIj09PWgpZj1mLmpvaW4oZyksZiYmKGY9dGhpcy5leHRlbmRUcmFuc2xhdGlvbihmLGUsdCxuKSk7ZWxzZXtsZXQgcj0hMSxhPSExO2NvbnN0IGM9dm9pZCAwIT09dC5jb3VudCYmXCJzdHJpbmdcIiE9dHlwZW9mIHQuY291bnQsZD1NLmhhc0RlZmF1bHRWYWx1ZSh0KSxwPWM/dGhpcy5wbHVyYWxSZXNvbHZlci5nZXRTdWZmaXgocyx0LmNvdW50LHQpOlwiXCIsaD10Lm9yZGluYWwmJmM/dGhpcy5wbHVyYWxSZXNvbHZlci5nZXRTdWZmaXgocyx0LmNvdW50LHtvcmRpbmFsOiExfSk6XCJcIixnPWMmJiF0Lm9yZGluYWwmJjA9PT10LmNvdW50JiZ0aGlzLnBsdXJhbFJlc29sdmVyLnNob3VsZFVzZUludGxBcGkoKSx2PWcmJnRbYGRlZmF1bHRWYWx1ZSR7dGhpcy5vcHRpb25zLnBsdXJhbFNlcGFyYXRvcn16ZXJvYF18fHRbYGRlZmF1bHRWYWx1ZSR7cH1gXXx8dFtgZGVmYXVsdFZhbHVlJHtofWBdfHx0LmRlZmF1bHRWYWx1ZTshdGhpcy5pc1ZhbGlkTG9va3VwKGYpJiZkJiYocj0hMCxmPXYpLHRoaXMuaXNWYWxpZExvb2t1cChmKXx8KGE9ITAsZj1pKTtjb25zdCBtPSh0Lm1pc3NpbmdLZXlOb1ZhbHVlRmFsbGJhY2tUb0tleXx8dGhpcy5vcHRpb25zLm1pc3NpbmdLZXlOb1ZhbHVlRmFsbGJhY2tUb0tleSkmJmE/dm9pZCAwOmYsQz1kJiZ2IT09ZiYmdGhpcy5vcHRpb25zLnVwZGF0ZU1pc3Npbmc7aWYoYXx8cnx8Qyl7aWYodGhpcy5sb2dnZXIubG9nKEM/XCJ1cGRhdGVLZXlcIjpcIm1pc3NpbmdLZXlcIixzLGwsaSxDP3Y6Ziksbyl7Y29uc3QgZT10aGlzLnJlc29sdmUoaSx7Li4udCxrZXlTZXBhcmF0b3I6ITF9KTtlJiZlLnJlcyYmdGhpcy5sb2dnZXIud2FybihcIlNlZW1zIHRoZSBsb2FkZWQgdHJhbnNsYXRpb25zIHdlcmUgaW4gZmxhdCBKU09OIGZvcm1hdCBpbnN0ZWFkIG9mIG5lc3RlZC4gRWl0aGVyIHNldCBrZXlTZXBhcmF0b3I6IGZhbHNlIG9uIGluaXQgb3IgbWFrZSBzdXJlIHlvdXIgdHJhbnNsYXRpb25zIGFyZSBwdWJsaXNoZWQgaW4gbmVzdGVkIGZvcm1hdC5cIil9bGV0IGU9W107Y29uc3Qgbj10aGlzLmxhbmd1YWdlVXRpbHMuZ2V0RmFsbGJhY2tDb2Rlcyh0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcsdC5sbmd8fHRoaXMubGFuZ3VhZ2UpO2lmKFwiZmFsbGJhY2tcIj09PXRoaXMub3B0aW9ucy5zYXZlTWlzc2luZ1RvJiZuJiZuWzBdKWZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKWUucHVzaChuW3RdKTtlbHNlXCJhbGxcIj09PXRoaXMub3B0aW9ucy5zYXZlTWlzc2luZ1RvP2U9dGhpcy5sYW5ndWFnZVV0aWxzLnRvUmVzb2x2ZUhpZXJhcmNoeSh0LmxuZ3x8dGhpcy5sYW5ndWFnZSk6ZS5wdXNoKHQubG5nfHx0aGlzLmxhbmd1YWdlKTtjb25zdCByPShlLG4scik9Pntjb25zdCBvPWQmJnIhPT1mP3I6bTt0aGlzLm9wdGlvbnMubWlzc2luZ0tleUhhbmRsZXI/dGhpcy5vcHRpb25zLm1pc3NpbmdLZXlIYW5kbGVyKGUsbCxuLG8sQyx0KTp0aGlzLmJhY2tlbmRDb25uZWN0b3ImJnRoaXMuYmFja2VuZENvbm5lY3Rvci5zYXZlTWlzc2luZyYmdGhpcy5iYWNrZW5kQ29ubmVjdG9yLnNhdmVNaXNzaW5nKGUsbCxuLG8sQyx0KSx0aGlzLmVtaXQoXCJtaXNzaW5nS2V5XCIsZSxsLG4sZil9O3RoaXMub3B0aW9ucy5zYXZlTWlzc2luZyYmKHRoaXMub3B0aW9ucy5zYXZlTWlzc2luZ1BsdXJhbHMmJmM/ZS5mb3JFYWNoKChlPT57Y29uc3Qgbj10aGlzLnBsdXJhbFJlc29sdmVyLmdldFN1ZmZpeGVzKGUsdCk7ZyYmdFtgZGVmYXVsdFZhbHVlJHt0aGlzLm9wdGlvbnMucGx1cmFsU2VwYXJhdG9yfXplcm9gXSYmbi5pbmRleE9mKGAke3RoaXMub3B0aW9ucy5wbHVyYWxTZXBhcmF0b3J9emVyb2ApPDAmJm4ucHVzaChgJHt0aGlzLm9wdGlvbnMucGx1cmFsU2VwYXJhdG9yfXplcm9gKSxuLmZvckVhY2goKG49PntyKFtlXSxpK24sdFtgZGVmYXVsdFZhbHVlJHtufWBdfHx2KX0pKX0pKTpyKGUsaSx2KSl9Zj10aGlzLmV4dGVuZFRyYW5zbGF0aW9uKGYsZSx0LHUsbiksYSYmZj09PWkmJnRoaXMub3B0aW9ucy5hcHBlbmROYW1lc3BhY2VUb01pc3NpbmdLZXkmJihmPWAke2x9OiR7aX1gKSwoYXx8cikmJnRoaXMub3B0aW9ucy5wYXJzZU1pc3NpbmdLZXlIYW5kbGVyJiYoZj1cInYxXCIhPT10aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUFQST90aGlzLm9wdGlvbnMucGFyc2VNaXNzaW5nS2V5SGFuZGxlcih0aGlzLm9wdGlvbnMuYXBwZW5kTmFtZXNwYWNlVG9NaXNzaW5nS2V5P2Ake2x9OiR7aX1gOmkscj9mOnZvaWQgMCk6dGhpcy5vcHRpb25zLnBhcnNlTWlzc2luZ0tleUhhbmRsZXIoZikpfXJldHVybiByPyh1LnJlcz1mLHUudXNlZFBhcmFtcz10aGlzLmdldFVzZWRQYXJhbXNEZXRhaWxzKHQpLHUpOmZ9ZXh0ZW5kVHJhbnNsYXRpb24oZSx0LG4scixvKXt2YXIgaT10aGlzO2lmKHRoaXMuaTE4bkZvcm1hdCYmdGhpcy5pMThuRm9ybWF0LnBhcnNlKWU9dGhpcy5pMThuRm9ybWF0LnBhcnNlKGUsey4uLnRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmRlZmF1bHRWYXJpYWJsZXMsLi4ubn0sbi5sbmd8fHRoaXMubGFuZ3VhZ2V8fHIudXNlZExuZyxyLnVzZWROUyxyLnVzZWRLZXkse3Jlc29sdmVkOnJ9KTtlbHNlIGlmKCFuLnNraXBJbnRlcnBvbGF0aW9uKXtuLmludGVycG9sYXRpb24mJnRoaXMuaW50ZXJwb2xhdG9yLmluaXQoey4uLm4saW50ZXJwb2xhdGlvbjp7Li4udGhpcy5vcHRpb25zLmludGVycG9sYXRpb24sLi4ubi5pbnRlcnBvbGF0aW9ufX0pO2NvbnN0IGE9XCJzdHJpbmdcIj09dHlwZW9mIGUmJihuJiZuLmludGVycG9sYXRpb24mJnZvaWQgMCE9PW4uaW50ZXJwb2xhdGlvbi5za2lwT25WYXJpYWJsZXM/bi5pbnRlcnBvbGF0aW9uLnNraXBPblZhcmlhYmxlczp0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5za2lwT25WYXJpYWJsZXMpO2xldCBsO2lmKGEpe2NvbnN0IHQ9ZS5tYXRjaCh0aGlzLmludGVycG9sYXRvci5uZXN0aW5nUmVnZXhwKTtsPXQmJnQubGVuZ3RofWxldCBzPW4ucmVwbGFjZSYmXCJzdHJpbmdcIiE9dHlwZW9mIG4ucmVwbGFjZT9uLnJlcGxhY2U6bjtpZih0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5kZWZhdWx0VmFyaWFibGVzJiYocz17Li4udGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZGVmYXVsdFZhcmlhYmxlcywuLi5zfSksZT10aGlzLmludGVycG9sYXRvci5pbnRlcnBvbGF0ZShlLHMsbi5sbmd8fHRoaXMubGFuZ3VhZ2UsbiksYSl7Y29uc3QgdD1lLm1hdGNoKHRoaXMuaW50ZXJwb2xhdG9yLm5lc3RpbmdSZWdleHApO2w8KHQmJnQubGVuZ3RoKSYmKG4ubmVzdD0hMSl9IW4ubG5nJiZcInYxXCIhPT10aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUFQSSYmciYmci5yZXMmJihuLmxuZz1yLnVzZWRMbmcpLCExIT09bi5uZXN0JiYoZT10aGlzLmludGVycG9sYXRvci5uZXN0KGUsKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkoZSksYT0wO2E8ZTthKyspclthXT1hcmd1bWVudHNbYV07cmV0dXJuIG8mJm9bMF09PT1yWzBdJiYhbi5jb250ZXh0PyhpLmxvZ2dlci53YXJuKGBJdCBzZWVtcyB5b3UgYXJlIG5lc3RpbmcgcmVjdXJzaXZlbHkga2V5OiAke3JbMF19IGluIGtleTogJHt0WzBdfWApLG51bGwpOmkudHJhbnNsYXRlKC4uLnIsdCl9KSxuKSksbi5pbnRlcnBvbGF0aW9uJiZ0aGlzLmludGVycG9sYXRvci5yZXNldCgpfWNvbnN0IGE9bi5wb3N0UHJvY2Vzc3x8dGhpcy5vcHRpb25zLnBvc3RQcm9jZXNzLGw9XCJzdHJpbmdcIj09dHlwZW9mIGE/W2FdOmE7cmV0dXJuIG51bGwhPWUmJmwmJmwubGVuZ3RoJiYhMSE9PW4uYXBwbHlQb3N0UHJvY2Vzc29yJiYoZT1TLmhhbmRsZShsLGUsdCx0aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5wb3N0UHJvY2Vzc1Bhc3NSZXNvbHZlZD97aTE4blJlc29sdmVkOnsuLi5yLHVzZWRQYXJhbXM6dGhpcy5nZXRVc2VkUGFyYW1zRGV0YWlscyhuKX0sLi4ubn06bix0aGlzKSksZX1yZXNvbHZlKGUpe2xldCB0LG4scixvLGksYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPVtlXSksZS5mb3JFYWNoKChlPT57aWYodGhpcy5pc1ZhbGlkTG9va3VwKHQpKXJldHVybjtjb25zdCBsPXRoaXMuZXh0cmFjdEZyb21LZXkoZSxhKSxzPWwua2V5O249cztsZXQgYz1sLm5hbWVzcGFjZXM7dGhpcy5vcHRpb25zLmZhbGxiYWNrTlMmJihjPWMuY29uY2F0KHRoaXMub3B0aW9ucy5mYWxsYmFja05TKSk7Y29uc3QgdT12b2lkIDAhPT1hLmNvdW50JiZcInN0cmluZ1wiIT10eXBlb2YgYS5jb3VudCxmPXUmJiFhLm9yZGluYWwmJjA9PT1hLmNvdW50JiZ0aGlzLnBsdXJhbFJlc29sdmVyLnNob3VsZFVzZUludGxBcGkoKSxkPXZvaWQgMCE9PWEuY29udGV4dCYmKFwic3RyaW5nXCI9PXR5cGVvZiBhLmNvbnRleHR8fFwibnVtYmVyXCI9PXR5cGVvZiBhLmNvbnRleHQpJiZcIlwiIT09YS5jb250ZXh0LHA9YS5sbmdzP2EubG5nczp0aGlzLmxhbmd1YWdlVXRpbHMudG9SZXNvbHZlSGllcmFyY2h5KGEubG5nfHx0aGlzLmxhbmd1YWdlLGEuZmFsbGJhY2tMbmcpO2MuZm9yRWFjaCgoZT0+e3RoaXMuaXNWYWxpZExvb2t1cCh0KXx8KGk9ZSwhaltgJHtwWzBdfS0ke2V9YF0mJnRoaXMudXRpbHMmJnRoaXMudXRpbHMuaGFzTG9hZGVkTmFtZXNwYWNlJiYhdGhpcy51dGlscy5oYXNMb2FkZWROYW1lc3BhY2UoaSkmJihqW2Ake3BbMF19LSR7ZX1gXT0hMCx0aGlzLmxvZ2dlci53YXJuKGBrZXkgXCIke259XCIgZm9yIGxhbmd1YWdlcyBcIiR7cC5qb2luKFwiLCBcIil9XCIgd29uJ3QgZ2V0IHJlc29sdmVkIGFzIG5hbWVzcGFjZSBcIiR7aX1cIiB3YXMgbm90IHlldCBsb2FkZWRgLFwiVGhpcyBtZWFucyBzb21ldGhpbmcgSVMgV1JPTkcgaW4geW91ciBzZXR1cC4gWW91IGFjY2VzcyB0aGUgdCBmdW5jdGlvbiBiZWZvcmUgaTE4bmV4dC5pbml0IC8gaTE4bmV4dC5sb2FkTmFtZXNwYWNlIC8gaTE4bmV4dC5jaGFuZ2VMYW5ndWFnZSB3YXMgZG9uZS4gV2FpdCBmb3IgdGhlIGNhbGxiYWNrIG9yIFByb21pc2UgdG8gcmVzb2x2ZSBiZWZvcmUgYWNjZXNzaW5nIGl0ISEhXCIpKSxwLmZvckVhY2goKG49PntpZih0aGlzLmlzVmFsaWRMb29rdXAodCkpcmV0dXJuO289bjtjb25zdCBpPVtzXTtpZih0aGlzLmkxOG5Gb3JtYXQmJnRoaXMuaTE4bkZvcm1hdC5hZGRMb29rdXBLZXlzKXRoaXMuaTE4bkZvcm1hdC5hZGRMb29rdXBLZXlzKGkscyxuLGUsYSk7ZWxzZXtsZXQgZTt1JiYoZT10aGlzLnBsdXJhbFJlc29sdmVyLmdldFN1ZmZpeChuLGEuY291bnQsYSkpO2NvbnN0IHQ9YCR7dGhpcy5vcHRpb25zLnBsdXJhbFNlcGFyYXRvcn16ZXJvYCxyPWAke3RoaXMub3B0aW9ucy5wbHVyYWxTZXBhcmF0b3J9b3JkaW5hbCR7dGhpcy5vcHRpb25zLnBsdXJhbFNlcGFyYXRvcn1gO2lmKHUmJihpLnB1c2gocytlKSxhLm9yZGluYWwmJjA9PT1lLmluZGV4T2YocikmJmkucHVzaChzK2UucmVwbGFjZShyLHRoaXMub3B0aW9ucy5wbHVyYWxTZXBhcmF0b3IpKSxmJiZpLnB1c2gocyt0KSksZCl7Y29uc3Qgbj1gJHtzfSR7dGhpcy5vcHRpb25zLmNvbnRleHRTZXBhcmF0b3J9JHthLmNvbnRleHR9YDtpLnB1c2gobiksdSYmKGkucHVzaChuK2UpLGEub3JkaW5hbCYmMD09PWUuaW5kZXhPZihyKSYmaS5wdXNoKG4rZS5yZXBsYWNlKHIsdGhpcy5vcHRpb25zLnBsdXJhbFNlcGFyYXRvcikpLGYmJmkucHVzaChuK3QpKX19bGV0IGw7Zm9yKDtsPWkucG9wKCk7KXRoaXMuaXNWYWxpZExvb2t1cCh0KXx8KHI9bCx0PXRoaXMuZ2V0UmVzb3VyY2UobixlLGwsYSkpfSkpKX0pKX0pKSx7cmVzOnQsdXNlZEtleTpuLGV4YWN0VXNlZEtleTpyLHVzZWRMbmc6byx1c2VkTlM6aX19aXNWYWxpZExvb2t1cChlKXtyZXR1cm4hKHZvaWQgMD09PWV8fCF0aGlzLm9wdGlvbnMucmV0dXJuTnVsbCYmbnVsbD09PWV8fCF0aGlzLm9wdGlvbnMucmV0dXJuRW1wdHlTdHJpbmcmJlwiXCI9PT1lKX1nZXRSZXNvdXJjZShlLHQsbil7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOnt9O3JldHVybiB0aGlzLmkxOG5Gb3JtYXQmJnRoaXMuaTE4bkZvcm1hdC5nZXRSZXNvdXJjZT90aGlzLmkxOG5Gb3JtYXQuZ2V0UmVzb3VyY2UoZSx0LG4scik6dGhpcy5yZXNvdXJjZVN0b3JlLmdldFJlc291cmNlKGUsdCxuLHIpfWdldFVzZWRQYXJhbXNEZXRhaWxzKCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2NvbnN0IHQ9W1wiZGVmYXVsdFZhbHVlXCIsXCJvcmRpbmFsXCIsXCJjb250ZXh0XCIsXCJyZXBsYWNlXCIsXCJsbmdcIixcImxuZ3NcIixcImZhbGxiYWNrTG5nXCIsXCJuc1wiLFwia2V5U2VwYXJhdG9yXCIsXCJuc1NlcGFyYXRvclwiLFwicmV0dXJuT2JqZWN0c1wiLFwicmV0dXJuRGV0YWlsc1wiLFwiam9pbkFycmF5c1wiLFwicG9zdFByb2Nlc3NcIixcImludGVycG9sYXRpb25cIl0sbj1lLnJlcGxhY2UmJlwic3RyaW5nXCIhPXR5cGVvZiBlLnJlcGxhY2U7bGV0IHI9bj9lLnJlcGxhY2U6ZTtpZihuJiZ2b2lkIDAhPT1lLmNvdW50JiYoci5jb3VudD1lLmNvdW50KSx0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5kZWZhdWx0VmFyaWFibGVzJiYocj17Li4udGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZGVmYXVsdFZhcmlhYmxlcywuLi5yfSksIW4pe3I9ey4uLnJ9O2Zvcihjb25zdCBlIG9mIHQpZGVsZXRlIHJbZV19cmV0dXJuIHJ9c3RhdGljIGhhc0RlZmF1bHRWYWx1ZShlKXtjb25zdCB0PVwiZGVmYXVsdFZhbHVlXCI7Zm9yKGNvbnN0IG4gaW4gZSlpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmdD09PW4uc3Vic3RyaW5nKDAsMTIpJiZ2b2lkIDAhPT1lW25dKXJldHVybiEwO3JldHVybiExfX1mdW5jdGlvbiBrKGUpe3JldHVybiBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSl9Y2xhc3MgUntjb25zdHJ1Y3RvcihlKXt0aGlzLm9wdGlvbnM9ZSx0aGlzLnN1cHBvcnRlZExuZ3M9dGhpcy5vcHRpb25zLnN1cHBvcnRlZExuZ3N8fCExLHRoaXMubG9nZ2VyPXUuY3JlYXRlKFwibGFuZ3VhZ2VVdGlsc1wiKX1nZXRTY3JpcHRQYXJ0RnJvbUNvZGUoZSl7aWYoIShlPUwoZSkpfHxlLmluZGV4T2YoXCItXCIpPDApcmV0dXJuIG51bGw7Y29uc3QgdD1lLnNwbGl0KFwiLVwiKTtyZXR1cm4gMj09PXQubGVuZ3RoP251bGw6KHQucG9wKCksXCJ4XCI9PT10W3QubGVuZ3RoLTFdLnRvTG93ZXJDYXNlKCk/bnVsbDp0aGlzLmZvcm1hdExhbmd1YWdlQ29kZSh0LmpvaW4oXCItXCIpKSl9Z2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUoZSl7aWYoIShlPUwoZSkpfHxlLmluZGV4T2YoXCItXCIpPDApcmV0dXJuIGU7Y29uc3QgdD1lLnNwbGl0KFwiLVwiKTtyZXR1cm4gdGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUodFswXSl9Zm9ybWF0TGFuZ3VhZ2VDb2RlKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlJiZlLmluZGV4T2YoXCItXCIpPi0xKXtjb25zdCB0PVtcImhhbnNcIixcImhhbnRcIixcImxhdG5cIixcImN5cmxcIixcImNhbnNcIixcIm1vbmdcIixcImFyYWJcIl07bGV0IG49ZS5zcGxpdChcIi1cIik7cmV0dXJuIHRoaXMub3B0aW9ucy5sb3dlckNhc2VMbmc/bj1uLm1hcCgoZT0+ZS50b0xvd2VyQ2FzZSgpKSk6Mj09PW4ubGVuZ3RoPyhuWzBdPW5bMF0udG9Mb3dlckNhc2UoKSxuWzFdPW5bMV0udG9VcHBlckNhc2UoKSx0LmluZGV4T2YoblsxXS50b0xvd2VyQ2FzZSgpKT4tMSYmKG5bMV09ayhuWzFdLnRvTG93ZXJDYXNlKCkpKSk6Mz09PW4ubGVuZ3RoJiYoblswXT1uWzBdLnRvTG93ZXJDYXNlKCksMj09PW5bMV0ubGVuZ3RoJiYoblsxXT1uWzFdLnRvVXBwZXJDYXNlKCkpLFwic2duXCIhPT1uWzBdJiYyPT09blsyXS5sZW5ndGgmJihuWzJdPW5bMl0udG9VcHBlckNhc2UoKSksdC5pbmRleE9mKG5bMV0udG9Mb3dlckNhc2UoKSk+LTEmJihuWzFdPWsoblsxXS50b0xvd2VyQ2FzZSgpKSksdC5pbmRleE9mKG5bMl0udG9Mb3dlckNhc2UoKSk+LTEmJihuWzJdPWsoblsyXS50b0xvd2VyQ2FzZSgpKSkpLG4uam9pbihcIi1cIil9cmV0dXJuIHRoaXMub3B0aW9ucy5jbGVhbkNvZGV8fHRoaXMub3B0aW9ucy5sb3dlckNhc2VMbmc/ZS50b0xvd2VyQ2FzZSgpOmV9aXNTdXBwb3J0ZWRDb2RlKGUpe3JldHVybihcImxhbmd1YWdlT25seVwiPT09dGhpcy5vcHRpb25zLmxvYWR8fHRoaXMub3B0aW9ucy5ub25FeHBsaWNpdFN1cHBvcnRlZExuZ3MpJiYoZT10aGlzLmdldExhbmd1YWdlUGFydEZyb21Db2RlKGUpKSwhdGhpcy5zdXBwb3J0ZWRMbmdzfHwhdGhpcy5zdXBwb3J0ZWRMbmdzLmxlbmd0aHx8dGhpcy5zdXBwb3J0ZWRMbmdzLmluZGV4T2YoZSk+LTF9Z2V0QmVzdE1hdGNoRnJvbUNvZGVzKGUpe2lmKCFlKXJldHVybiBudWxsO2xldCB0O3JldHVybiBlLmZvckVhY2goKGU9PntpZih0KXJldHVybjtjb25zdCBuPXRoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKGUpO3RoaXMub3B0aW9ucy5zdXBwb3J0ZWRMbmdzJiYhdGhpcy5pc1N1cHBvcnRlZENvZGUobil8fCh0PW4pfSkpLCF0JiZ0aGlzLm9wdGlvbnMuc3VwcG9ydGVkTG5ncyYmZS5mb3JFYWNoKChlPT57aWYodClyZXR1cm47Y29uc3Qgbj10aGlzLmdldExhbmd1YWdlUGFydEZyb21Db2RlKGUpO2lmKHRoaXMuaXNTdXBwb3J0ZWRDb2RlKG4pKXJldHVybiB0PW47dD10aGlzLm9wdGlvbnMuc3VwcG9ydGVkTG5ncy5maW5kKChlPT5lPT09bj9lOmUuaW5kZXhPZihcIi1cIik8MCYmbi5pbmRleE9mKFwiLVwiKTwwP3ZvaWQgMDowPT09ZS5pbmRleE9mKG4pP2U6dm9pZCAwKSl9KSksdHx8KHQ9dGhpcy5nZXRGYWxsYmFja0NvZGVzKHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZylbMF0pLHR9Z2V0RmFsbGJhY2tDb2RlcyhlLHQpe2lmKCFlKXJldHVybltdO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJihlPWUodCkpLFwic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT1bZV0pLFwiW29iamVjdCBBcnJheV1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuYXBwbHkoZSkpcmV0dXJuIGU7aWYoIXQpcmV0dXJuIGUuZGVmYXVsdHx8W107bGV0IG49ZVt0XTtyZXR1cm4gbnx8KG49ZVt0aGlzLmdldFNjcmlwdFBhcnRGcm9tQ29kZSh0KV0pLG58fChuPWVbdGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUodCldKSxufHwobj1lW3RoaXMuZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUodCldKSxufHwobj1lLmRlZmF1bHQpLG58fFtdfXRvUmVzb2x2ZUhpZXJhcmNoeShlLHQpe2NvbnN0IG49dGhpcy5nZXRGYWxsYmFja0NvZGVzKHR8fHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZ3x8W10sZSkscj1bXSxvPWU9PntlJiYodGhpcy5pc1N1cHBvcnRlZENvZGUoZSk/ci5wdXNoKGUpOnRoaXMubG9nZ2VyLndhcm4oYHJlamVjdGluZyBsYW5ndWFnZSBjb2RlIG5vdCBmb3VuZCBpbiBzdXBwb3J0ZWRMbmdzOiAke2V9YCkpfTtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZSYmKGUuaW5kZXhPZihcIi1cIik+LTF8fGUuaW5kZXhPZihcIl9cIik+LTEpPyhcImxhbmd1YWdlT25seVwiIT09dGhpcy5vcHRpb25zLmxvYWQmJm8odGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUoZSkpLFwibGFuZ3VhZ2VPbmx5XCIhPT10aGlzLm9wdGlvbnMubG9hZCYmXCJjdXJyZW50T25seVwiIT09dGhpcy5vcHRpb25zLmxvYWQmJm8odGhpcy5nZXRTY3JpcHRQYXJ0RnJvbUNvZGUoZSkpLFwiY3VycmVudE9ubHlcIiE9PXRoaXMub3B0aW9ucy5sb2FkJiZvKHRoaXMuZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUoZSkpKTpcInN0cmluZ1wiPT10eXBlb2YgZSYmbyh0aGlzLmZvcm1hdExhbmd1YWdlQ29kZShlKSksbi5mb3JFYWNoKChlPT57ci5pbmRleE9mKGUpPDAmJm8odGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUoZSkpfSkpLHJ9fWxldCBQPVt7bG5nczpbXCJhY2hcIixcImFrXCIsXCJhbVwiLFwiYXJuXCIsXCJiclwiLFwiZmlsXCIsXCJndW5cIixcImxuXCIsXCJtZmVcIixcIm1nXCIsXCJtaVwiLFwib2NcIixcInB0XCIsXCJwdC1CUlwiLFwidGdcIixcInRsXCIsXCJ0aVwiLFwidHJcIixcInV6XCIsXCJ3YVwiXSxucjpbMSwyXSxmYzoxfSx7bG5nczpbXCJhZlwiLFwiYW5cIixcImFzdFwiLFwiYXpcIixcImJnXCIsXCJiblwiLFwiY2FcIixcImRhXCIsXCJkZVwiLFwiZGV2XCIsXCJlbFwiLFwiZW5cIixcImVvXCIsXCJlc1wiLFwiZXRcIixcImV1XCIsXCJmaVwiLFwiZm9cIixcImZ1clwiLFwiZnlcIixcImdsXCIsXCJndVwiLFwiaGFcIixcImhpXCIsXCJodVwiLFwiaHlcIixcImlhXCIsXCJpdFwiLFwia2tcIixcImtuXCIsXCJrdVwiLFwibGJcIixcIm1haVwiLFwibWxcIixcIm1uXCIsXCJtclwiLFwibmFoXCIsXCJuYXBcIixcIm5iXCIsXCJuZVwiLFwibmxcIixcIm5uXCIsXCJub1wiLFwibnNvXCIsXCJwYVwiLFwicGFwXCIsXCJwbXNcIixcInBzXCIsXCJwdC1QVFwiLFwicm1cIixcInNjb1wiLFwic2VcIixcInNpXCIsXCJzb1wiLFwic29uXCIsXCJzcVwiLFwic3ZcIixcInN3XCIsXCJ0YVwiLFwidGVcIixcInRrXCIsXCJ1clwiLFwieW9cIl0sbnI6WzEsMl0sZmM6Mn0se2xuZ3M6W1wiYXlcIixcImJvXCIsXCJjZ2dcIixcImZhXCIsXCJodFwiLFwiaWRcIixcImphXCIsXCJqYm9cIixcImthXCIsXCJrbVwiLFwia29cIixcImt5XCIsXCJsb1wiLFwibXNcIixcInNhaFwiLFwic3VcIixcInRoXCIsXCJ0dFwiLFwidWdcIixcInZpXCIsXCJ3b1wiLFwiemhcIl0sbnI6WzFdLGZjOjN9LHtsbmdzOltcImJlXCIsXCJic1wiLFwiY25yXCIsXCJkelwiLFwiaHJcIixcInJ1XCIsXCJzclwiLFwidWtcIl0sbnI6WzEsMiw1XSxmYzo0fSx7bG5nczpbXCJhclwiXSxucjpbMCwxLDIsMywxMSwxMDBdLGZjOjV9LHtsbmdzOltcImNzXCIsXCJza1wiXSxucjpbMSwyLDVdLGZjOjZ9LHtsbmdzOltcImNzYlwiLFwicGxcIl0sbnI6WzEsMiw1XSxmYzo3fSx7bG5nczpbXCJjeVwiXSxucjpbMSwyLDMsOF0sZmM6OH0se2xuZ3M6W1wiZnJcIl0sbnI6WzEsMl0sZmM6OX0se2xuZ3M6W1wiZ2FcIl0sbnI6WzEsMiwzLDcsMTFdLGZjOjEwfSx7bG5nczpbXCJnZFwiXSxucjpbMSwyLDMsMjBdLGZjOjExfSx7bG5nczpbXCJpc1wiXSxucjpbMSwyXSxmYzoxMn0se2xuZ3M6W1wianZcIl0sbnI6WzAsMV0sZmM6MTN9LHtsbmdzOltcImt3XCJdLG5yOlsxLDIsMyw0XSxmYzoxNH0se2xuZ3M6W1wibHRcIl0sbnI6WzEsMiwxMF0sZmM6MTV9LHtsbmdzOltcImx2XCJdLG5yOlsxLDIsMF0sZmM6MTZ9LHtsbmdzOltcIm1rXCJdLG5yOlsxLDJdLGZjOjE3fSx7bG5nczpbXCJtbmtcIl0sbnI6WzAsMSwyXSxmYzoxOH0se2xuZ3M6W1wibXRcIl0sbnI6WzEsMiwxMSwyMF0sZmM6MTl9LHtsbmdzOltcIm9yXCJdLG5yOlsyLDFdLGZjOjJ9LHtsbmdzOltcInJvXCJdLG5yOlsxLDIsMjBdLGZjOjIwfSx7bG5nczpbXCJzbFwiXSxucjpbNSwxLDIsM10sZmM6MjF9LHtsbmdzOltcImhlXCIsXCJpd1wiXSxucjpbMSwyLDIwLDIxXSxmYzoyMn1dLEk9ezE6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcihlPjEpfSwyOmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoMSE9ZSl9LDM6ZnVuY3Rpb24oZSl7cmV0dXJuIDB9LDQ6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcihlJTEwPT0xJiZlJTEwMCE9MTE/MDplJTEwPj0yJiZlJTEwPD00JiYoZSUxMDA8MTB8fGUlMTAwPj0yMCk/MToyKX0sNTpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDA9PWU/MDoxPT1lPzE6Mj09ZT8yOmUlMTAwPj0zJiZlJTEwMDw9MTA/MzplJTEwMD49MTE/NDo1KX0sNjpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDE9PWU/MDplPj0yJiZlPD00PzE6Mil9LDc6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lPzA6ZSUxMD49MiYmZSUxMDw9NCYmKGUlMTAwPDEwfHxlJTEwMD49MjApPzE6Mil9LDg6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lPzA6Mj09ZT8xOjghPWUmJjExIT1lPzI6Myl9LDk6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcihlPj0yKX0sMTA6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lPzA6Mj09ZT8xOmU8Nz8yOmU8MTE/Mzo0KX0sMTE6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lfHwxMT09ZT8wOjI9PWV8fDEyPT1lPzE6ZT4yJiZlPDIwPzI6Myl9LDEyOmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoZSUxMCE9MXx8ZSUxMDA9PTExKX0sMTM6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigwIT09ZSl9LDE0OmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoMT09ZT8wOjI9PWU/MTozPT1lPzI6Myl9LDE1OmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoZSUxMD09MSYmZSUxMDAhPTExPzA6ZSUxMD49MiYmKGUlMTAwPDEwfHxlJTEwMD49MjApPzE6Mil9LDE2OmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoZSUxMD09MSYmZSUxMDAhPTExPzA6MCE9PWU/MToyKX0sMTc6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lfHxlJTEwPT0xJiZlJTEwMCE9MTE/MDoxKX0sMTg6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigwPT1lPzA6MT09ZT8xOjIpfSwxOTpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDE9PWU/MDowPT1lfHxlJTEwMD4xJiZlJTEwMDwxMT8xOmUlMTAwPjEwJiZlJTEwMDwyMD8yOjMpfSwyMDpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDE9PWU/MDowPT1lfHxlJTEwMD4wJiZlJTEwMDwyMD8xOjIpfSwyMTpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKGUlMTAwPT0xPzE6ZSUxMDA9PTI/MjplJTEwMD09M3x8ZSUxMDA9PTQ/MzowKX0sMjI6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lPzA6Mj09ZT8xOihlPDB8fGU+MTApJiZlJTEwPT0wPzI6Myl9fTtjb25zdCBBPVtcInYxXCIsXCJ2MlwiLFwidjNcIl0sVD1bXCJ2NFwiXSxIPXt6ZXJvOjAsb25lOjEsdHdvOjIsZmV3OjMsbWFueTo0LG90aGVyOjV9O2NsYXNzIEJ7Y29uc3RydWN0b3IoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O3RoaXMubGFuZ3VhZ2VVdGlscz1lLHRoaXMub3B0aW9ucz10LHRoaXMubG9nZ2VyPXUuY3JlYXRlKFwicGx1cmFsUmVzb2x2ZXJcIiksdGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlKU09OJiYhVC5pbmNsdWRlcyh0aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUpTT04pfHxcInVuZGVmaW5lZFwiIT10eXBlb2YgSW50bCYmSW50bC5QbHVyYWxSdWxlc3x8KHRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTj1cInYzXCIsdGhpcy5sb2dnZXIuZXJyb3IoXCJZb3VyIGVudmlyb25tZW50IHNlZW1zIG5vdCB0byBiZSBJbnRsIEFQSSBjb21wYXRpYmxlLCB1c2UgYW4gSW50bC5QbHVyYWxSdWxlcyBwb2x5ZmlsbC4gV2lsbCBmYWxsYmFjayB0byB0aGUgY29tcGF0aWJpbGl0eUpTT04gdjMgZm9ybWF0IGhhbmRsaW5nLlwiKSksdGhpcy5ydWxlcz1mdW5jdGlvbigpe2NvbnN0IGU9e307cmV0dXJuIFAuZm9yRWFjaCgodD0+e3QubG5ncy5mb3JFYWNoKChuPT57ZVtuXT17bnVtYmVyczp0Lm5yLHBsdXJhbHM6SVt0LmZjXX19KSl9KSksZX0oKX1hZGRSdWxlKGUsdCl7dGhpcy5ydWxlc1tlXT10fWdldFJ1bGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2lmKHRoaXMuc2hvdWxkVXNlSW50bEFwaSgpKXRyeXtyZXR1cm4gbmV3IEludGwuUGx1cmFsUnVsZXMoTChcImRldlwiPT09ZT9cImVuXCI6ZSkse3R5cGU6dC5vcmRpbmFsP1wib3JkaW5hbFwiOlwiY2FyZGluYWxcIn0pfWNhdGNoKGUpe3JldHVybn1yZXR1cm4gdGhpcy5ydWxlc1tlXXx8dGhpcy5ydWxlc1t0aGlzLmxhbmd1YWdlVXRpbHMuZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUoZSldfW5lZWRzUGx1cmFsKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtjb25zdCBuPXRoaXMuZ2V0UnVsZShlLHQpO3JldHVybiB0aGlzLnNob3VsZFVzZUludGxBcGkoKT9uJiZuLnJlc29sdmVkT3B0aW9ucygpLnBsdXJhbENhdGVnb3JpZXMubGVuZ3RoPjE6biYmbi5udW1iZXJzLmxlbmd0aD4xfWdldFBsdXJhbEZvcm1zT2ZLZXkoZSx0KXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307cmV0dXJuIHRoaXMuZ2V0U3VmZml4ZXMoZSxuKS5tYXAoKGU9PmAke3R9JHtlfWApKX1nZXRTdWZmaXhlcyhlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307Y29uc3Qgbj10aGlzLmdldFJ1bGUoZSx0KTtyZXR1cm4gbj90aGlzLnNob3VsZFVzZUludGxBcGkoKT9uLnJlc29sdmVkT3B0aW9ucygpLnBsdXJhbENhdGVnb3JpZXMuc29ydCgoKGUsdCk9PkhbZV0tSFt0XSkpLm1hcCgoZT0+YCR7dGhpcy5vcHRpb25zLnByZXBlbmR9JHt0Lm9yZGluYWw/YG9yZGluYWwke3RoaXMub3B0aW9ucy5wcmVwZW5kfWA6XCJcIn0ke2V9YCkpOm4ubnVtYmVycy5tYXAoKG49PnRoaXMuZ2V0U3VmZml4KGUsbix0KSkpOltdfWdldFN1ZmZpeChlLHQpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtjb25zdCByPXRoaXMuZ2V0UnVsZShlLG4pO3JldHVybiByP3RoaXMuc2hvdWxkVXNlSW50bEFwaSgpP2Ake3RoaXMub3B0aW9ucy5wcmVwZW5kfSR7bi5vcmRpbmFsP2BvcmRpbmFsJHt0aGlzLm9wdGlvbnMucHJlcGVuZH1gOlwiXCJ9JHtyLnNlbGVjdCh0KX1gOnRoaXMuZ2V0U3VmZml4UmV0cm9Db21wYXRpYmxlKHIsdCk6KHRoaXMubG9nZ2VyLndhcm4oYG5vIHBsdXJhbCBydWxlIGZvdW5kIGZvcjogJHtlfWApLFwiXCIpfWdldFN1ZmZpeFJldHJvQ29tcGF0aWJsZShlLHQpe2NvbnN0IG49ZS5ub0Ficz9lLnBsdXJhbHModCk6ZS5wbHVyYWxzKE1hdGguYWJzKHQpKTtsZXQgcj1lLm51bWJlcnNbbl07dGhpcy5vcHRpb25zLnNpbXBsaWZ5UGx1cmFsU3VmZml4JiYyPT09ZS5udW1iZXJzLmxlbmd0aCYmMT09PWUubnVtYmVyc1swXSYmKDI9PT1yP3I9XCJwbHVyYWxcIjoxPT09ciYmKHI9XCJcIikpO2NvbnN0IG89KCk9PnRoaXMub3B0aW9ucy5wcmVwZW5kJiZyLnRvU3RyaW5nKCk/dGhpcy5vcHRpb25zLnByZXBlbmQrci50b1N0cmluZygpOnIudG9TdHJpbmcoKTtyZXR1cm5cInYxXCI9PT10aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUpTT04/MT09PXI/XCJcIjpcIm51bWJlclwiPT10eXBlb2Ygcj9gX3BsdXJhbF8ke3IudG9TdHJpbmcoKX1gOm8oKTpcInYyXCI9PT10aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUpTT058fHRoaXMub3B0aW9ucy5zaW1wbGlmeVBsdXJhbFN1ZmZpeCYmMj09PWUubnVtYmVycy5sZW5ndGgmJjE9PT1lLm51bWJlcnNbMF0/bygpOnRoaXMub3B0aW9ucy5wcmVwZW5kJiZuLnRvU3RyaW5nKCk/dGhpcy5vcHRpb25zLnByZXBlbmQrbi50b1N0cmluZygpOm4udG9TdHJpbmcoKX1zaG91bGRVc2VJbnRsQXBpKCl7cmV0dXJuIUEuaW5jbHVkZXModGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlKU09OKX19ZnVuY3Rpb24gVihlLHQsbil7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOlwiLlwiLG89IShhcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XSl8fGFyZ3VtZW50c1s0XSxpPWZ1bmN0aW9uKGUsdCxuKXtjb25zdCByPW0oZSxuKTtyZXR1cm4gdm9pZCAwIT09cj9yOm0odCxuKX0oZSx0LG4pO3JldHVybiFpJiZvJiZcInN0cmluZ1wiPT10eXBlb2YgbiYmKGk9TyhlLG4sciksdm9pZCAwPT09aSYmKGk9Tyh0LG4scikpKSxpfWNsYXNzIER7Y29uc3RydWN0b3IoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307dGhpcy5sb2dnZXI9dS5jcmVhdGUoXCJpbnRlcnBvbGF0b3JcIiksdGhpcy5vcHRpb25zPWUsdGhpcy5mb3JtYXQ9ZS5pbnRlcnBvbGF0aW9uJiZlLmludGVycG9sYXRpb24uZm9ybWF0fHwoZT0+ZSksdGhpcy5pbml0KGUpfWluaXQoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307ZS5pbnRlcnBvbGF0aW9ufHwoZS5pbnRlcnBvbGF0aW9uPXtlc2NhcGVWYWx1ZTohMH0pO2NvbnN0IHQ9ZS5pbnRlcnBvbGF0aW9uO3RoaXMuZXNjYXBlPXZvaWQgMCE9PXQuZXNjYXBlP3QuZXNjYXBlOmIsdGhpcy5lc2NhcGVWYWx1ZT12b2lkIDA9PT10LmVzY2FwZVZhbHVlfHx0LmVzY2FwZVZhbHVlLHRoaXMudXNlUmF3VmFsdWVUb0VzY2FwZT12b2lkIDAhPT10LnVzZVJhd1ZhbHVlVG9Fc2NhcGUmJnQudXNlUmF3VmFsdWVUb0VzY2FwZSx0aGlzLnByZWZpeD10LnByZWZpeD95KHQucHJlZml4KTp0LnByZWZpeEVzY2FwZWR8fFwie3tcIix0aGlzLnN1ZmZpeD10LnN1ZmZpeD95KHQuc3VmZml4KTp0LnN1ZmZpeEVzY2FwZWR8fFwifX1cIix0aGlzLmZvcm1hdFNlcGFyYXRvcj10LmZvcm1hdFNlcGFyYXRvcj90LmZvcm1hdFNlcGFyYXRvcjp0LmZvcm1hdFNlcGFyYXRvcnx8XCIsXCIsdGhpcy51bmVzY2FwZVByZWZpeD10LnVuZXNjYXBlU3VmZml4P1wiXCI6dC51bmVzY2FwZVByZWZpeHx8XCItXCIsdGhpcy51bmVzY2FwZVN1ZmZpeD10aGlzLnVuZXNjYXBlUHJlZml4P1wiXCI6dC51bmVzY2FwZVN1ZmZpeHx8XCJcIix0aGlzLm5lc3RpbmdQcmVmaXg9dC5uZXN0aW5nUHJlZml4P3kodC5uZXN0aW5nUHJlZml4KTp0Lm5lc3RpbmdQcmVmaXhFc2NhcGVkfHx5KFwiJHQoXCIpLHRoaXMubmVzdGluZ1N1ZmZpeD10Lm5lc3RpbmdTdWZmaXg/eSh0Lm5lc3RpbmdTdWZmaXgpOnQubmVzdGluZ1N1ZmZpeEVzY2FwZWR8fHkoXCIpXCIpLHRoaXMubmVzdGluZ09wdGlvbnNTZXBhcmF0b3I9dC5uZXN0aW5nT3B0aW9uc1NlcGFyYXRvcj90Lm5lc3RpbmdPcHRpb25zU2VwYXJhdG9yOnQubmVzdGluZ09wdGlvbnNTZXBhcmF0b3J8fFwiLFwiLHRoaXMubWF4UmVwbGFjZXM9dC5tYXhSZXBsYWNlcz90Lm1heFJlcGxhY2VzOjFlMyx0aGlzLmFsd2F5c0Zvcm1hdD12b2lkIDAhPT10LmFsd2F5c0Zvcm1hdCYmdC5hbHdheXNGb3JtYXQsdGhpcy5yZXNldFJlZ0V4cCgpfXJlc2V0KCl7dGhpcy5vcHRpb25zJiZ0aGlzLmluaXQodGhpcy5vcHRpb25zKX1yZXNldFJlZ0V4cCgpe2NvbnN0IGU9KGUsdCk9PmUmJmUuc291cmNlPT09dD8oZS5sYXN0SW5kZXg9MCxlKTpuZXcgUmVnRXhwKHQsXCJnXCIpO3RoaXMucmVnZXhwPWUodGhpcy5yZWdleHAsYCR7dGhpcy5wcmVmaXh9KC4rPykke3RoaXMuc3VmZml4fWApLHRoaXMucmVnZXhwVW5lc2NhcGU9ZSh0aGlzLnJlZ2V4cFVuZXNjYXBlLGAke3RoaXMucHJlZml4fSR7dGhpcy51bmVzY2FwZVByZWZpeH0oLis/KSR7dGhpcy51bmVzY2FwZVN1ZmZpeH0ke3RoaXMuc3VmZml4fWApLHRoaXMubmVzdGluZ1JlZ2V4cD1lKHRoaXMubmVzdGluZ1JlZ2V4cCxgJHt0aGlzLm5lc3RpbmdQcmVmaXh9KC4rPykke3RoaXMubmVzdGluZ1N1ZmZpeH1gKX1pbnRlcnBvbGF0ZShlLHQsbixyKXtsZXQgbyxpLGE7Y29uc3QgbD10aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uJiZ0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5kZWZhdWx0VmFyaWFibGVzfHx7fTtmdW5jdGlvbiBzKGUpe3JldHVybiBlLnJlcGxhY2UoL1xcJC9nLFwiJCQkJFwiKX1jb25zdCBjPWU9PntpZihlLmluZGV4T2YodGhpcy5mb3JtYXRTZXBhcmF0b3IpPDApe2NvbnN0IG89Vih0LGwsZSx0aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yLHRoaXMub3B0aW9ucy5pZ25vcmVKU09OU3RydWN0dXJlKTtyZXR1cm4gdGhpcy5hbHdheXNGb3JtYXQ/dGhpcy5mb3JtYXQobyx2b2lkIDAsbix7Li4uciwuLi50LGludGVycG9sYXRpb25rZXk6ZX0pOm99Y29uc3Qgbz1lLnNwbGl0KHRoaXMuZm9ybWF0U2VwYXJhdG9yKSxpPW8uc2hpZnQoKS50cmltKCksYT1vLmpvaW4odGhpcy5mb3JtYXRTZXBhcmF0b3IpLnRyaW0oKTtyZXR1cm4gdGhpcy5mb3JtYXQoVih0LGwsaSx0aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yLHRoaXMub3B0aW9ucy5pZ25vcmVKU09OU3RydWN0dXJlKSxhLG4sey4uLnIsLi4udCxpbnRlcnBvbGF0aW9ua2V5Oml9KX07dGhpcy5yZXNldFJlZ0V4cCgpO2NvbnN0IHU9ciYmci5taXNzaW5nSW50ZXJwb2xhdGlvbkhhbmRsZXJ8fHRoaXMub3B0aW9ucy5taXNzaW5nSW50ZXJwb2xhdGlvbkhhbmRsZXIsZj1yJiZyLmludGVycG9sYXRpb24mJnZvaWQgMCE9PXIuaW50ZXJwb2xhdGlvbi5za2lwT25WYXJpYWJsZXM/ci5pbnRlcnBvbGF0aW9uLnNraXBPblZhcmlhYmxlczp0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5za2lwT25WYXJpYWJsZXM7cmV0dXJuW3tyZWdleDp0aGlzLnJlZ2V4cFVuZXNjYXBlLHNhZmVWYWx1ZTplPT5zKGUpfSx7cmVnZXg6dGhpcy5yZWdleHAsc2FmZVZhbHVlOmU9PnRoaXMuZXNjYXBlVmFsdWU/cyh0aGlzLmVzY2FwZShlKSk6cyhlKX1dLmZvckVhY2goKHQ9Pntmb3IoYT0wO289dC5yZWdleC5leGVjKGUpOyl7Y29uc3Qgbj1vWzFdLnRyaW0oKTtpZihpPWMobiksdm9pZCAwPT09aSlpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB1KXtjb25zdCB0PXUoZSxvLHIpO2k9XCJzdHJpbmdcIj09dHlwZW9mIHQ/dDpcIlwifWVsc2UgaWYociYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikpaT1cIlwiO2Vsc2V7aWYoZil7aT1vWzBdO2NvbnRpbnVlfXRoaXMubG9nZ2VyLndhcm4oYG1pc3NlZCB0byBwYXNzIGluIHZhcmlhYmxlICR7bn0gZm9yIGludGVycG9sYXRpbmcgJHtlfWApLGk9XCJcIn1lbHNlXCJzdHJpbmdcIj09dHlwZW9mIGl8fHRoaXMudXNlUmF3VmFsdWVUb0VzY2FwZXx8KGk9cChpKSk7Y29uc3QgbD10LnNhZmVWYWx1ZShpKTtpZihlPWUucmVwbGFjZShvWzBdLGwpLGY/KHQucmVnZXgubGFzdEluZGV4Kz1pLmxlbmd0aCx0LnJlZ2V4Lmxhc3RJbmRleC09b1swXS5sZW5ndGgpOnQucmVnZXgubGFzdEluZGV4PTAsYSsrLGE+PXRoaXMubWF4UmVwbGFjZXMpYnJlYWt9fSkpLGV9bmVzdChlLHQpe2xldCBuLHIsbyxpPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtmdW5jdGlvbiBhKGUsdCl7Y29uc3Qgbj10aGlzLm5lc3RpbmdPcHRpb25zU2VwYXJhdG9yO2lmKGUuaW5kZXhPZihuKTwwKXJldHVybiBlO2NvbnN0IHI9ZS5zcGxpdChuZXcgUmVnRXhwKGAke259WyBdKntgKSk7bGV0IGk9YHske3JbMV19YDtlPXJbMF0saT10aGlzLmludGVycG9sYXRlKGksbyk7Y29uc3QgYT1pLm1hdGNoKC8nL2cpLGw9aS5tYXRjaCgvXCIvZyk7KGEmJmEubGVuZ3RoJTI9PTAmJiFsfHxsLmxlbmd0aCUyIT0wKSYmKGk9aS5yZXBsYWNlKC8nL2csJ1wiJykpO3RyeXtvPUpTT04ucGFyc2UoaSksdCYmKG89ey4uLnQsLi4ub30pfWNhdGNoKHQpe3JldHVybiB0aGlzLmxvZ2dlci53YXJuKGBmYWlsZWQgcGFyc2luZyBvcHRpb25zIHN0cmluZyBpbiBuZXN0aW5nIGZvciBrZXkgJHtlfWAsdCksYCR7ZX0ke259JHtpfWB9cmV0dXJuIGRlbGV0ZSBvLmRlZmF1bHRWYWx1ZSxlfWZvcig7bj10aGlzLm5lc3RpbmdSZWdleHAuZXhlYyhlKTspe2xldCBsPVtdO289ey4uLml9LG89by5yZXBsYWNlJiZcInN0cmluZ1wiIT10eXBlb2Ygby5yZXBsYWNlP28ucmVwbGFjZTpvLG8uYXBwbHlQb3N0UHJvY2Vzc29yPSExLGRlbGV0ZSBvLmRlZmF1bHRWYWx1ZTtsZXQgcz0hMTtpZigtMSE9PW5bMF0uaW5kZXhPZih0aGlzLmZvcm1hdFNlcGFyYXRvcikmJiEvey4qfS8udGVzdChuWzFdKSl7Y29uc3QgZT1uWzFdLnNwbGl0KHRoaXMuZm9ybWF0U2VwYXJhdG9yKS5tYXAoKGU9PmUudHJpbSgpKSk7blsxXT1lLnNoaWZ0KCksbD1lLHM9ITB9aWYocj10KGEuY2FsbCh0aGlzLG5bMV0udHJpbSgpLG8pLG8pLHImJm5bMF09PT1lJiZcInN0cmluZ1wiIT10eXBlb2YgcilyZXR1cm4gcjtcInN0cmluZ1wiIT10eXBlb2YgciYmKHI9cChyKSkscnx8KHRoaXMubG9nZ2VyLndhcm4oYG1pc3NlZCB0byByZXNvbHZlICR7blsxXX0gZm9yIG5lc3RpbmcgJHtlfWApLHI9XCJcIikscyYmKHI9bC5yZWR1Y2UoKChlLHQpPT50aGlzLmZvcm1hdChlLHQsaS5sbmcsey4uLmksaW50ZXJwb2xhdGlvbmtleTpuWzFdLnRyaW0oKX0pKSxyLnRyaW0oKSkpLGU9ZS5yZXBsYWNlKG5bMF0sciksdGhpcy5yZWdleHAubGFzdEluZGV4PTB9cmV0dXJuIGV9fWZ1bmN0aW9uIFooZSl7Y29uc3QgdD17fTtyZXR1cm4gZnVuY3Rpb24obixyLG8pe2NvbnN0IGk9citKU09OLnN0cmluZ2lmeShvKTtsZXQgYT10W2ldO3JldHVybiBhfHwoYT1lKEwociksbyksdFtpXT1hKSxhKG4pfX1jbGFzcyAke2NvbnN0cnVjdG9yKCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O3RoaXMubG9nZ2VyPXUuY3JlYXRlKFwiZm9ybWF0dGVyXCIpLHRoaXMub3B0aW9ucz1lLHRoaXMuZm9ybWF0cz17bnVtYmVyOlooKChlLHQpPT57Y29uc3Qgbj1uZXcgSW50bC5OdW1iZXJGb3JtYXQoZSx7Li4udH0pO3JldHVybiBlPT5uLmZvcm1hdChlKX0pKSxjdXJyZW5jeTpaKCgoZSx0KT0+e2NvbnN0IG49bmV3IEludGwuTnVtYmVyRm9ybWF0KGUsey4uLnQsc3R5bGU6XCJjdXJyZW5jeVwifSk7cmV0dXJuIGU9Pm4uZm9ybWF0KGUpfSkpLGRhdGV0aW1lOlooKChlLHQpPT57Y29uc3Qgbj1uZXcgSW50bC5EYXRlVGltZUZvcm1hdChlLHsuLi50fSk7cmV0dXJuIGU9Pm4uZm9ybWF0KGUpfSkpLHJlbGF0aXZldGltZTpaKCgoZSx0KT0+e2NvbnN0IG49bmV3IEludGwuUmVsYXRpdmVUaW1lRm9ybWF0KGUsey4uLnR9KTtyZXR1cm4gZT0+bi5mb3JtYXQoZSx0LnJhbmdlfHxcImRheVwiKX0pKSxsaXN0OlooKChlLHQpPT57Y29uc3Qgbj1uZXcgSW50bC5MaXN0Rm9ybWF0KGUsey4uLnR9KTtyZXR1cm4gZT0+bi5mb3JtYXQoZSl9KSl9LHRoaXMuaW5pdChlKX1pbml0KGUpe2NvbnN0IHQ9KGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7aW50ZXJwb2xhdGlvbjp7fX0pLmludGVycG9sYXRpb247dGhpcy5mb3JtYXRTZXBhcmF0b3I9dC5mb3JtYXRTZXBhcmF0b3I/dC5mb3JtYXRTZXBhcmF0b3I6dC5mb3JtYXRTZXBhcmF0b3J8fFwiLFwifWFkZChlLHQpe3RoaXMuZm9ybWF0c1tlLnRvTG93ZXJDYXNlKCkudHJpbSgpXT10fWFkZENhY2hlZChlLHQpe3RoaXMuZm9ybWF0c1tlLnRvTG93ZXJDYXNlKCkudHJpbSgpXT1aKHQpfWZvcm1hdChlLHQsbil7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOnt9O3JldHVybiB0LnNwbGl0KHRoaXMuZm9ybWF0U2VwYXJhdG9yKS5yZWR1Y2UoKChlLHQpPT57Y29uc3R7Zm9ybWF0TmFtZTpvLGZvcm1hdE9wdGlvbnM6aX09ZnVuY3Rpb24oZSl7bGV0IHQ9ZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtjb25zdCBuPXt9O2lmKGUuaW5kZXhPZihcIihcIik+LTEpe2NvbnN0IHI9ZS5zcGxpdChcIihcIik7dD1yWzBdLnRvTG93ZXJDYXNlKCkudHJpbSgpO2NvbnN0IG89clsxXS5zdWJzdHJpbmcoMCxyWzFdLmxlbmd0aC0xKTtcImN1cnJlbmN5XCI9PT10JiZvLmluZGV4T2YoXCI6XCIpPDA/bi5jdXJyZW5jeXx8KG4uY3VycmVuY3k9by50cmltKCkpOlwicmVsYXRpdmV0aW1lXCI9PT10JiZvLmluZGV4T2YoXCI6XCIpPDA/bi5yYW5nZXx8KG4ucmFuZ2U9by50cmltKCkpOm8uc3BsaXQoXCI7XCIpLmZvckVhY2goKGU9PntpZighZSlyZXR1cm47Y29uc3RbdCwuLi5yXT1lLnNwbGl0KFwiOlwiKSxvPXIuam9pbihcIjpcIikudHJpbSgpLnJlcGxhY2UoL14nK3wnKyQvZyxcIlwiKTtuW3QudHJpbSgpXXx8KG5bdC50cmltKCldPW8pLFwiZmFsc2VcIj09PW8mJihuW3QudHJpbSgpXT0hMSksXCJ0cnVlXCI9PT1vJiYoblt0LnRyaW0oKV09ITApLGlzTmFOKG8pfHwoblt0LnRyaW0oKV09cGFyc2VJbnQobywxMCkpfSkpfXJldHVybntmb3JtYXROYW1lOnQsZm9ybWF0T3B0aW9uczpufX0odCk7aWYodGhpcy5mb3JtYXRzW29dKXtsZXQgdD1lO3RyeXtjb25zdCBhPXImJnIuZm9ybWF0UGFyYW1zJiZyLmZvcm1hdFBhcmFtc1tyLmludGVycG9sYXRpb25rZXldfHx7fSxsPWEubG9jYWxlfHxhLmxuZ3x8ci5sb2NhbGV8fHIubG5nfHxuO3Q9dGhpcy5mb3JtYXRzW29dKGUsbCx7Li4uaSwuLi5yLC4uLmF9KX1jYXRjaChlKXt0aGlzLmxvZ2dlci53YXJuKGUpfXJldHVybiB0fXJldHVybiB0aGlzLmxvZ2dlci53YXJuKGB0aGVyZSB3YXMgbm8gZm9ybWF0IGZ1bmN0aW9uIGZvciAke299YCksZX0pLGUpfX1jbGFzcyBOIGV4dGVuZHMgZntjb25zdHJ1Y3RvcihlLHQsbil7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOnt9O3N1cGVyKCksdGhpcy5iYWNrZW5kPWUsdGhpcy5zdG9yZT10LHRoaXMuc2VydmljZXM9bix0aGlzLmxhbmd1YWdlVXRpbHM9bi5sYW5ndWFnZVV0aWxzLHRoaXMub3B0aW9ucz1yLHRoaXMubG9nZ2VyPXUuY3JlYXRlKFwiYmFja2VuZENvbm5lY3RvclwiKSx0aGlzLndhaXRpbmdSZWFkcz1bXSx0aGlzLm1heFBhcmFsbGVsUmVhZHM9ci5tYXhQYXJhbGxlbFJlYWRzfHwxMCx0aGlzLnJlYWRpbmdDYWxscz0wLHRoaXMubWF4UmV0cmllcz1yLm1heFJldHJpZXM+PTA/ci5tYXhSZXRyaWVzOjUsdGhpcy5yZXRyeVRpbWVvdXQ9ci5yZXRyeVRpbWVvdXQ+PTE/ci5yZXRyeVRpbWVvdXQ6MzUwLHRoaXMuc3RhdGU9e30sdGhpcy5xdWV1ZT1bXSx0aGlzLmJhY2tlbmQmJnRoaXMuYmFja2VuZC5pbml0JiZ0aGlzLmJhY2tlbmQuaW5pdChuLHIuYmFja2VuZCxyKX1xdWV1ZUxvYWQoZSx0LG4scil7Y29uc3Qgbz17fSxpPXt9LGE9e30sbD17fTtyZXR1cm4gZS5mb3JFYWNoKChlPT57bGV0IHI9ITA7dC5mb3JFYWNoKCh0PT57Y29uc3QgYT1gJHtlfXwke3R9YDshbi5yZWxvYWQmJnRoaXMuc3RvcmUuaGFzUmVzb3VyY2VCdW5kbGUoZSx0KT90aGlzLnN0YXRlW2FdPTI6dGhpcy5zdGF0ZVthXTwwfHwoMT09PXRoaXMuc3RhdGVbYV0/dm9pZCAwPT09aVthXSYmKGlbYV09ITApOih0aGlzLnN0YXRlW2FdPTEscj0hMSx2b2lkIDA9PT1pW2FdJiYoaVthXT0hMCksdm9pZCAwPT09b1thXSYmKG9bYV09ITApLHZvaWQgMD09PWxbdF0mJihsW3RdPSEwKSkpfSkpLHJ8fChhW2VdPSEwKX0pKSwoT2JqZWN0LmtleXMobykubGVuZ3RofHxPYmplY3Qua2V5cyhpKS5sZW5ndGgpJiZ0aGlzLnF1ZXVlLnB1c2goe3BlbmRpbmc6aSxwZW5kaW5nQ291bnQ6T2JqZWN0LmtleXMoaSkubGVuZ3RoLGxvYWRlZDp7fSxlcnJvcnM6W10sY2FsbGJhY2s6cn0pLHt0b0xvYWQ6T2JqZWN0LmtleXMobykscGVuZGluZzpPYmplY3Qua2V5cyhpKSx0b0xvYWRMYW5ndWFnZXM6T2JqZWN0LmtleXMoYSksdG9Mb2FkTmFtZXNwYWNlczpPYmplY3Qua2V5cyhsKX19bG9hZGVkKGUsdCxuKXtjb25zdCByPWUuc3BsaXQoXCJ8XCIpLG89clswXSxpPXJbMV07dCYmdGhpcy5lbWl0KFwiZmFpbGVkTG9hZGluZ1wiLG8saSx0KSxuJiZ0aGlzLnN0b3JlLmFkZFJlc291cmNlQnVuZGxlKG8saSxuKSx0aGlzLnN0YXRlW2VdPXQ/LTE6Mjtjb25zdCBhPXt9O3RoaXMucXVldWUuZm9yRWFjaCgobj0+eyFmdW5jdGlvbihlLHQsbixyKXtjb25zdHtvYmo6byxrOml9PWcoZSx0LE9iamVjdCk7b1tpXT1vW2ldfHxbXSxyJiYob1tpXT1vW2ldLmNvbmNhdChuKSkscnx8b1tpXS5wdXNoKG4pfShuLmxvYWRlZCxbb10saSksZnVuY3Rpb24oZSx0KXt2b2lkIDAhPT1lLnBlbmRpbmdbdF0mJihkZWxldGUgZS5wZW5kaW5nW3RdLGUucGVuZGluZ0NvdW50LS0pfShuLGUpLHQmJm4uZXJyb3JzLnB1c2godCksMCE9PW4ucGVuZGluZ0NvdW50fHxuLmRvbmV8fChPYmplY3Qua2V5cyhuLmxvYWRlZCkuZm9yRWFjaCgoZT0+e2FbZV18fChhW2VdPXt9KTtjb25zdCB0PW4ubG9hZGVkW2VdO3QubGVuZ3RoJiZ0LmZvckVhY2goKHQ9Pnt2b2lkIDA9PT1hW2VdW3RdJiYoYVtlXVt0XT0hMCl9KSl9KSksbi5kb25lPSEwLG4uZXJyb3JzLmxlbmd0aD9uLmNhbGxiYWNrKG4uZXJyb3JzKTpuLmNhbGxiYWNrKCkpfSkpLHRoaXMuZW1pdChcImxvYWRlZFwiLGEpLHRoaXMucXVldWU9dGhpcy5xdWV1ZS5maWx0ZXIoKGU9PiFlLmRvbmUpKX1yZWFkKGUsdCxuKXtsZXQgcj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106MCxvPWFyZ3VtZW50cy5sZW5ndGg+NCYmdm9pZCAwIT09YXJndW1lbnRzWzRdP2FyZ3VtZW50c1s0XTp0aGlzLnJldHJ5VGltZW91dCxpPWFyZ3VtZW50cy5sZW5ndGg+NT9hcmd1bWVudHNbNV06dm9pZCAwO2lmKCFlLmxlbmd0aClyZXR1cm4gaShudWxsLHt9KTtpZih0aGlzLnJlYWRpbmdDYWxscz49dGhpcy5tYXhQYXJhbGxlbFJlYWRzKXJldHVybiB2b2lkIHRoaXMud2FpdGluZ1JlYWRzLnB1c2goe2xuZzplLG5zOnQsZmNOYW1lOm4sdHJpZWQ6cix3YWl0Om8sY2FsbGJhY2s6aX0pO3RoaXMucmVhZGluZ0NhbGxzKys7Y29uc3QgYT0oYSxsKT0+e2lmKHRoaXMucmVhZGluZ0NhbGxzLS0sdGhpcy53YWl0aW5nUmVhZHMubGVuZ3RoPjApe2NvbnN0IGU9dGhpcy53YWl0aW5nUmVhZHMuc2hpZnQoKTt0aGlzLnJlYWQoZS5sbmcsZS5ucyxlLmZjTmFtZSxlLnRyaWVkLGUud2FpdCxlLmNhbGxiYWNrKX1hJiZsJiZyPHRoaXMubWF4UmV0cmllcz9zZXRUaW1lb3V0KCgoKT0+e3RoaXMucmVhZC5jYWxsKHRoaXMsZSx0LG4scisxLDIqbyxpKX0pLG8pOmkoYSxsKX0sbD10aGlzLmJhY2tlbmRbbl0uYmluZCh0aGlzLmJhY2tlbmQpO2lmKDIhPT1sLmxlbmd0aClyZXR1cm4gbChlLHQsYSk7dHJ5e2NvbnN0IG49bChlLHQpO24mJlwiZnVuY3Rpb25cIj09dHlwZW9mIG4udGhlbj9uLnRoZW4oKGU9PmEobnVsbCxlKSkpLmNhdGNoKGEpOmEobnVsbCxuKX1jYXRjaChlKXthKGUpfX1wcmVwYXJlTG9hZGluZyhlLHQpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fSxyPWFyZ3VtZW50cy5sZW5ndGg+Mz9hcmd1bWVudHNbM106dm9pZCAwO2lmKCF0aGlzLmJhY2tlbmQpcmV0dXJuIHRoaXMubG9nZ2VyLndhcm4oXCJObyBiYWNrZW5kIHdhcyBhZGRlZCB2aWEgaTE4bmV4dC51c2UuIFdpbGwgbm90IGxvYWQgcmVzb3VyY2VzLlwiKSxyJiZyKCk7XCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPXRoaXMubGFuZ3VhZ2VVdGlscy50b1Jlc29sdmVIaWVyYXJjaHkoZSkpLFwic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1bdF0pO2NvbnN0IG89dGhpcy5xdWV1ZUxvYWQoZSx0LG4scik7aWYoIW8udG9Mb2FkLmxlbmd0aClyZXR1cm4gby5wZW5kaW5nLmxlbmd0aHx8cigpLG51bGw7by50b0xvYWQuZm9yRWFjaCgoZT0+e3RoaXMubG9hZE9uZShlKX0pKX1sb2FkKGUsdCxuKXt0aGlzLnByZXBhcmVMb2FkaW5nKGUsdCx7fSxuKX1yZWxvYWQoZSx0LG4pe3RoaXMucHJlcGFyZUxvYWRpbmcoZSx0LHtyZWxvYWQ6ITB9LG4pfWxvYWRPbmUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOlwiXCI7Y29uc3Qgbj1lLnNwbGl0KFwifFwiKSxyPW5bMF0sbz1uWzFdO3RoaXMucmVhZChyLG8sXCJyZWFkXCIsdm9pZCAwLHZvaWQgMCwoKG4saSk9PntuJiZ0aGlzLmxvZ2dlci53YXJuKGAke3R9bG9hZGluZyBuYW1lc3BhY2UgJHtvfSBmb3IgbGFuZ3VhZ2UgJHtyfSBmYWlsZWRgLG4pLCFuJiZpJiZ0aGlzLmxvZ2dlci5sb2coYCR7dH1sb2FkZWQgbmFtZXNwYWNlICR7b30gZm9yIGxhbmd1YWdlICR7cn1gLGkpLHRoaXMubG9hZGVkKGUsbixpKX0pKX1zYXZlTWlzc2luZyhlLHQsbixyLG8pe2xldCBpPWFyZ3VtZW50cy5sZW5ndGg+NSYmdm9pZCAwIT09YXJndW1lbnRzWzVdP2FyZ3VtZW50c1s1XTp7fSxhPWFyZ3VtZW50cy5sZW5ndGg+NiYmdm9pZCAwIT09YXJndW1lbnRzWzZdP2FyZ3VtZW50c1s2XTooKT0+e307aWYodGhpcy5zZXJ2aWNlcy51dGlscyYmdGhpcy5zZXJ2aWNlcy51dGlscy5oYXNMb2FkZWROYW1lc3BhY2UmJiF0aGlzLnNlcnZpY2VzLnV0aWxzLmhhc0xvYWRlZE5hbWVzcGFjZSh0KSl0aGlzLmxvZ2dlci53YXJuKGBkaWQgbm90IHNhdmUga2V5IFwiJHtufVwiIGFzIHRoZSBuYW1lc3BhY2UgXCIke3R9XCIgd2FzIG5vdCB5ZXQgbG9hZGVkYCxcIlRoaXMgbWVhbnMgc29tZXRoaW5nIElTIFdST05HIGluIHlvdXIgc2V0dXAuIFlvdSBhY2Nlc3MgdGhlIHQgZnVuY3Rpb24gYmVmb3JlIGkxOG5leHQuaW5pdCAvIGkxOG5leHQubG9hZE5hbWVzcGFjZSAvIGkxOG5leHQuY2hhbmdlTGFuZ3VhZ2Ugd2FzIGRvbmUuIFdhaXQgZm9yIHRoZSBjYWxsYmFjayBvciBQcm9taXNlIHRvIHJlc29sdmUgYmVmb3JlIGFjY2Vzc2luZyBpdCEhIVwiKTtlbHNlIGlmKG51bGwhPW4mJlwiXCIhPT1uKXtpZih0aGlzLmJhY2tlbmQmJnRoaXMuYmFja2VuZC5jcmVhdGUpe2NvbnN0IGw9ey4uLmksaXNVcGRhdGU6b30scz10aGlzLmJhY2tlbmQuY3JlYXRlLmJpbmQodGhpcy5iYWNrZW5kKTtpZihzLmxlbmd0aDw2KXRyeXtsZXQgbztvPTU9PT1zLmxlbmd0aD9zKGUsdCxuLHIsbCk6cyhlLHQsbixyKSxvJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBvLnRoZW4/by50aGVuKChlPT5hKG51bGwsZSkpKS5jYXRjaChhKTphKG51bGwsbyl9Y2F0Y2goZSl7YShlKX1lbHNlIHMoZSx0LG4scixhLGwpfWUmJmVbMF0mJnRoaXMuc3RvcmUuYWRkUmVzb3VyY2UoZVswXSx0LG4scil9fX1mdW5jdGlvbiBGKCl7cmV0dXJue2RlYnVnOiExLGluaXRJbW1lZGlhdGU6ITAsbnM6W1widHJhbnNsYXRpb25cIl0sZGVmYXVsdE5TOltcInRyYW5zbGF0aW9uXCJdLGZhbGxiYWNrTG5nOltcImRldlwiXSxmYWxsYmFja05TOiExLHN1cHBvcnRlZExuZ3M6ITEsbm9uRXhwbGljaXRTdXBwb3J0ZWRMbmdzOiExLGxvYWQ6XCJhbGxcIixwcmVsb2FkOiExLHNpbXBsaWZ5UGx1cmFsU3VmZml4OiEwLGtleVNlcGFyYXRvcjpcIi5cIixuc1NlcGFyYXRvcjpcIjpcIixwbHVyYWxTZXBhcmF0b3I6XCJfXCIsY29udGV4dFNlcGFyYXRvcjpcIl9cIixwYXJ0aWFsQnVuZGxlZExhbmd1YWdlczohMSxzYXZlTWlzc2luZzohMSx1cGRhdGVNaXNzaW5nOiExLHNhdmVNaXNzaW5nVG86XCJmYWxsYmFja1wiLHNhdmVNaXNzaW5nUGx1cmFsczohMCxtaXNzaW5nS2V5SGFuZGxlcjohMSxtaXNzaW5nSW50ZXJwb2xhdGlvbkhhbmRsZXI6ITEscG9zdFByb2Nlc3M6ITEscG9zdFByb2Nlc3NQYXNzUmVzb2x2ZWQ6ITEscmV0dXJuTnVsbDohMSxyZXR1cm5FbXB0eVN0cmluZzohMCxyZXR1cm5PYmplY3RzOiExLGpvaW5BcnJheXM6ITEscmV0dXJuZWRPYmplY3RIYW5kbGVyOiExLHBhcnNlTWlzc2luZ0tleUhhbmRsZXI6ITEsYXBwZW5kTmFtZXNwYWNlVG9NaXNzaW5nS2V5OiExLGFwcGVuZE5hbWVzcGFjZVRvQ0lNb2RlOiExLG92ZXJsb2FkVHJhbnNsYXRpb25PcHRpb25IYW5kbGVyOmZ1bmN0aW9uKGUpe2xldCB0PXt9O2lmKFwib2JqZWN0XCI9PXR5cGVvZiBlWzFdJiYodD1lWzFdKSxcInN0cmluZ1wiPT10eXBlb2YgZVsxXSYmKHQuZGVmYXVsdFZhbHVlPWVbMV0pLFwic3RyaW5nXCI9PXR5cGVvZiBlWzJdJiYodC50RGVzY3JpcHRpb249ZVsyXSksXCJvYmplY3RcIj09dHlwZW9mIGVbMl18fFwib2JqZWN0XCI9PXR5cGVvZiBlWzNdKXtjb25zdCBuPWVbM118fGVbMl07T2JqZWN0LmtleXMobikuZm9yRWFjaCgoZT0+e3RbZV09bltlXX0pKX1yZXR1cm4gdH0saW50ZXJwb2xhdGlvbjp7ZXNjYXBlVmFsdWU6ITAsZm9ybWF0OmU9PmUscHJlZml4Olwie3tcIixzdWZmaXg6XCJ9fVwiLGZvcm1hdFNlcGFyYXRvcjpcIixcIix1bmVzY2FwZVByZWZpeDpcIi1cIixuZXN0aW5nUHJlZml4OlwiJHQoXCIsbmVzdGluZ1N1ZmZpeDpcIilcIixuZXN0aW5nT3B0aW9uc1NlcGFyYXRvcjpcIixcIixtYXhSZXBsYWNlczoxZTMsc2tpcE9uVmFyaWFibGVzOiEwfX19ZnVuY3Rpb24gVShlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZS5ucyYmKGUubnM9W2UubnNdKSxcInN0cmluZ1wiPT10eXBlb2YgZS5mYWxsYmFja0xuZyYmKGUuZmFsbGJhY2tMbmc9W2UuZmFsbGJhY2tMbmddKSxcInN0cmluZ1wiPT10eXBlb2YgZS5mYWxsYmFja05TJiYoZS5mYWxsYmFja05TPVtlLmZhbGxiYWNrTlNdKSxlLnN1cHBvcnRlZExuZ3MmJmUuc3VwcG9ydGVkTG5ncy5pbmRleE9mKFwiY2ltb2RlXCIpPDAmJihlLnN1cHBvcnRlZExuZ3M9ZS5zdXBwb3J0ZWRMbmdzLmNvbmNhdChbXCJjaW1vZGVcIl0pKSxlfWZ1bmN0aW9uIFcoKXt9Y2xhc3MgeiBleHRlbmRzIGZ7Y29uc3RydWN0b3IoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sdD1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMDt2YXIgbjtpZihzdXBlcigpLHRoaXMub3B0aW9ucz1VKGUpLHRoaXMuc2VydmljZXM9e30sdGhpcy5sb2dnZXI9dSx0aGlzLm1vZHVsZXM9e2V4dGVybmFsOltdfSxuPXRoaXMsT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoT2JqZWN0LmdldFByb3RvdHlwZU9mKG4pKS5mb3JFYWNoKChlPT57XCJmdW5jdGlvblwiPT10eXBlb2YgbltlXSYmKG5bZV09bltlXS5iaW5kKG4pKX0pKSx0JiYhdGhpcy5pc0luaXRpYWxpemVkJiYhZS5pc0Nsb25lKXtpZighdGhpcy5vcHRpb25zLmluaXRJbW1lZGlhdGUpcmV0dXJuIHRoaXMuaW5pdChlLHQpLHRoaXM7c2V0VGltZW91dCgoKCk9Pnt0aGlzLmluaXQoZSx0KX0pLDApfX1pbml0KCl7dmFyIGU9dGhpcztsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sbj1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMDtcImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiYobj10LHQ9e30pLCF0LmRlZmF1bHROUyYmITEhPT10LmRlZmF1bHROUyYmdC5ucyYmKFwic3RyaW5nXCI9PXR5cGVvZiB0Lm5zP3QuZGVmYXVsdE5TPXQubnM6dC5ucy5pbmRleE9mKFwidHJhbnNsYXRpb25cIik8MCYmKHQuZGVmYXVsdE5TPXQubnNbMF0pKTtjb25zdCByPUYoKTtmdW5jdGlvbiBvKGUpe3JldHVybiBlP1wiZnVuY3Rpb25cIj09dHlwZW9mIGU/bmV3IGU6ZTpudWxsfWlmKHRoaXMub3B0aW9ucz17Li4uciwuLi50aGlzLm9wdGlvbnMsLi4uVSh0KX0sXCJ2MVwiIT09dGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlBUEkmJih0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbj17Li4uci5pbnRlcnBvbGF0aW9uLC4uLnRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9ufSksdm9pZCAwIT09dC5rZXlTZXBhcmF0b3ImJih0aGlzLm9wdGlvbnMudXNlckRlZmluZWRLZXlTZXBhcmF0b3I9dC5rZXlTZXBhcmF0b3IpLHZvaWQgMCE9PXQubnNTZXBhcmF0b3ImJih0aGlzLm9wdGlvbnMudXNlckRlZmluZWROc1NlcGFyYXRvcj10Lm5zU2VwYXJhdG9yKSwhdGhpcy5vcHRpb25zLmlzQ2xvbmUpe2xldCB0O3RoaXMubW9kdWxlcy5sb2dnZXI/dS5pbml0KG8odGhpcy5tb2R1bGVzLmxvZ2dlciksdGhpcy5vcHRpb25zKTp1LmluaXQobnVsbCx0aGlzLm9wdGlvbnMpLHRoaXMubW9kdWxlcy5mb3JtYXR0ZXI/dD10aGlzLm1vZHVsZXMuZm9ybWF0dGVyOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBJbnRsJiYodD0kKTtjb25zdCBuPW5ldyBSKHRoaXMub3B0aW9ucyk7dGhpcy5zdG9yZT1uZXcgRSh0aGlzLm9wdGlvbnMucmVzb3VyY2VzLHRoaXMub3B0aW9ucyk7Y29uc3QgaT10aGlzLnNlcnZpY2VzO2kubG9nZ2VyPXUsaS5yZXNvdXJjZVN0b3JlPXRoaXMuc3RvcmUsaS5sYW5ndWFnZVV0aWxzPW4saS5wbHVyYWxSZXNvbHZlcj1uZXcgQihuLHtwcmVwZW5kOnRoaXMub3B0aW9ucy5wbHVyYWxTZXBhcmF0b3IsY29tcGF0aWJpbGl0eUpTT046dGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlKU09OLHNpbXBsaWZ5UGx1cmFsU3VmZml4OnRoaXMub3B0aW9ucy5zaW1wbGlmeVBsdXJhbFN1ZmZpeH0pLCF0fHx0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5mb3JtYXQmJnRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmZvcm1hdCE9PXIuaW50ZXJwb2xhdGlvbi5mb3JtYXR8fChpLmZvcm1hdHRlcj1vKHQpLGkuZm9ybWF0dGVyLmluaXQoaSx0aGlzLm9wdGlvbnMpLHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmZvcm1hdD1pLmZvcm1hdHRlci5mb3JtYXQuYmluZChpLmZvcm1hdHRlcikpLGkuaW50ZXJwb2xhdG9yPW5ldyBEKHRoaXMub3B0aW9ucyksaS51dGlscz17aGFzTG9hZGVkTmFtZXNwYWNlOnRoaXMuaGFzTG9hZGVkTmFtZXNwYWNlLmJpbmQodGhpcyl9LGkuYmFja2VuZENvbm5lY3Rvcj1uZXcgTihvKHRoaXMubW9kdWxlcy5iYWNrZW5kKSxpLnJlc291cmNlU3RvcmUsaSx0aGlzLm9wdGlvbnMpLGkuYmFja2VuZENvbm5lY3Rvci5vbihcIipcIiwoZnVuY3Rpb24odCl7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkobj4xP24tMTowKSxvPTE7bzxuO28rKylyW28tMV09YXJndW1lbnRzW29dO2UuZW1pdCh0LC4uLnIpfSkpLHRoaXMubW9kdWxlcy5sYW5ndWFnZURldGVjdG9yJiYoaS5sYW5ndWFnZURldGVjdG9yPW8odGhpcy5tb2R1bGVzLmxhbmd1YWdlRGV0ZWN0b3IpLGkubGFuZ3VhZ2VEZXRlY3Rvci5pbml0JiZpLmxhbmd1YWdlRGV0ZWN0b3IuaW5pdChpLHRoaXMub3B0aW9ucy5kZXRlY3Rpb24sdGhpcy5vcHRpb25zKSksdGhpcy5tb2R1bGVzLmkxOG5Gb3JtYXQmJihpLmkxOG5Gb3JtYXQ9byh0aGlzLm1vZHVsZXMuaTE4bkZvcm1hdCksaS5pMThuRm9ybWF0LmluaXQmJmkuaTE4bkZvcm1hdC5pbml0KHRoaXMpKSx0aGlzLnRyYW5zbGF0b3I9bmV3IE0odGhpcy5zZXJ2aWNlcyx0aGlzLm9wdGlvbnMpLHRoaXMudHJhbnNsYXRvci5vbihcIipcIiwoZnVuY3Rpb24odCl7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkobj4xP24tMTowKSxvPTE7bzxuO28rKylyW28tMV09YXJndW1lbnRzW29dO2UuZW1pdCh0LC4uLnIpfSkpLHRoaXMubW9kdWxlcy5leHRlcm5hbC5mb3JFYWNoKChlPT57ZS5pbml0JiZlLmluaXQodGhpcyl9KSl9aWYodGhpcy5mb3JtYXQ9dGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZm9ybWF0LG58fChuPVcpLHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZyYmIXRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3RvciYmIXRoaXMub3B0aW9ucy5sbmcpe2NvbnN0IGU9dGhpcy5zZXJ2aWNlcy5sYW5ndWFnZVV0aWxzLmdldEZhbGxiYWNrQ29kZXModGhpcy5vcHRpb25zLmZhbGxiYWNrTG5nKTtlLmxlbmd0aD4wJiZcImRldlwiIT09ZVswXSYmKHRoaXMub3B0aW9ucy5sbmc9ZVswXSl9dGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yfHx0aGlzLm9wdGlvbnMubG5nfHx0aGlzLmxvZ2dlci53YXJuKFwiaW5pdDogbm8gbGFuZ3VhZ2VEZXRlY3RvciBpcyB1c2VkIGFuZCBubyBsbmcgaXMgZGVmaW5lZFwiKTtbXCJnZXRSZXNvdXJjZVwiLFwiaGFzUmVzb3VyY2VCdW5kbGVcIixcImdldFJlc291cmNlQnVuZGxlXCIsXCJnZXREYXRhQnlMYW5ndWFnZVwiXS5mb3JFYWNoKCh0PT57dGhpc1t0XT1mdW5jdGlvbigpe3JldHVybiBlLnN0b3JlW3RdKC4uLmFyZ3VtZW50cyl9fSkpO1tcImFkZFJlc291cmNlXCIsXCJhZGRSZXNvdXJjZXNcIixcImFkZFJlc291cmNlQnVuZGxlXCIsXCJyZW1vdmVSZXNvdXJjZUJ1bmRsZVwiXS5mb3JFYWNoKCh0PT57dGhpc1t0XT1mdW5jdGlvbigpe3JldHVybiBlLnN0b3JlW3RdKC4uLmFyZ3VtZW50cyksZX19KSk7Y29uc3QgaT1kKCksYT0oKT0+e2NvbnN0IGU9KGUsdCk9Pnt0aGlzLmlzSW5pdGlhbGl6ZWQmJiF0aGlzLmluaXRpYWxpemVkU3RvcmVPbmNlJiZ0aGlzLmxvZ2dlci53YXJuKFwiaW5pdDogaTE4bmV4dCBpcyBhbHJlYWR5IGluaXRpYWxpemVkLiBZb3Ugc2hvdWxkIGNhbGwgaW5pdCBqdXN0IG9uY2UhXCIpLHRoaXMuaXNJbml0aWFsaXplZD0hMCx0aGlzLm9wdGlvbnMuaXNDbG9uZXx8dGhpcy5sb2dnZXIubG9nKFwiaW5pdGlhbGl6ZWRcIix0aGlzLm9wdGlvbnMpLHRoaXMuZW1pdChcImluaXRpYWxpemVkXCIsdGhpcy5vcHRpb25zKSxpLnJlc29sdmUodCksbihlLHQpfTtpZih0aGlzLmxhbmd1YWdlcyYmXCJ2MVwiIT09dGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlBUEkmJiF0aGlzLmlzSW5pdGlhbGl6ZWQpcmV0dXJuIGUobnVsbCx0aGlzLnQuYmluZCh0aGlzKSk7dGhpcy5jaGFuZ2VMYW5ndWFnZSh0aGlzLm9wdGlvbnMubG5nLGUpfTtyZXR1cm4gdGhpcy5vcHRpb25zLnJlc291cmNlc3x8IXRoaXMub3B0aW9ucy5pbml0SW1tZWRpYXRlP2EoKTpzZXRUaW1lb3V0KGEsMCksaX1sb2FkUmVzb3VyY2VzKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpXO2NvbnN0IG49XCJzdHJpbmdcIj09dHlwZW9mIGU/ZTp0aGlzLmxhbmd1YWdlO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJih0PWUpLCF0aGlzLm9wdGlvbnMucmVzb3VyY2VzfHx0aGlzLm9wdGlvbnMucGFydGlhbEJ1bmRsZWRMYW5ndWFnZXMpe2lmKG4mJlwiY2ltb2RlXCI9PT1uLnRvTG93ZXJDYXNlKCkmJighdGhpcy5vcHRpb25zLnByZWxvYWR8fDA9PT10aGlzLm9wdGlvbnMucHJlbG9hZC5sZW5ndGgpKXJldHVybiB0KCk7Y29uc3QgZT1bXSxyPXQ9PntpZighdClyZXR1cm47aWYoXCJjaW1vZGVcIj09PXQpcmV0dXJuO3RoaXMuc2VydmljZXMubGFuZ3VhZ2VVdGlscy50b1Jlc29sdmVIaWVyYXJjaHkodCkuZm9yRWFjaCgodD0+e1wiY2ltb2RlXCIhPT10JiZlLmluZGV4T2YodCk8MCYmZS5wdXNoKHQpfSkpfTtpZihuKXIobik7ZWxzZXt0aGlzLnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMuZ2V0RmFsbGJhY2tDb2Rlcyh0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcpLmZvckVhY2goKGU9PnIoZSkpKX10aGlzLm9wdGlvbnMucHJlbG9hZCYmdGhpcy5vcHRpb25zLnByZWxvYWQuZm9yRWFjaCgoZT0+cihlKSkpLHRoaXMuc2VydmljZXMuYmFja2VuZENvbm5lY3Rvci5sb2FkKGUsdGhpcy5vcHRpb25zLm5zLChlPT57ZXx8dGhpcy5yZXNvbHZlZExhbmd1YWdlfHwhdGhpcy5sYW5ndWFnZXx8dGhpcy5zZXRSZXNvbHZlZExhbmd1YWdlKHRoaXMubGFuZ3VhZ2UpLHQoZSl9KSl9ZWxzZSB0KG51bGwpfXJlbG9hZFJlc291cmNlcyhlLHQsbil7Y29uc3Qgcj1kKCk7cmV0dXJuIGV8fChlPXRoaXMubGFuZ3VhZ2VzKSx0fHwodD10aGlzLm9wdGlvbnMubnMpLG58fChuPVcpLHRoaXMuc2VydmljZXMuYmFja2VuZENvbm5lY3Rvci5yZWxvYWQoZSx0LChlPT57ci5yZXNvbHZlKCksbihlKX0pKSxyfXVzZShlKXtpZighZSl0aHJvdyBuZXcgRXJyb3IoXCJZb3UgYXJlIHBhc3NpbmcgYW4gdW5kZWZpbmVkIG1vZHVsZSEgUGxlYXNlIGNoZWNrIHRoZSBvYmplY3QgeW91IGFyZSBwYXNzaW5nIHRvIGkxOG5leHQudXNlKClcIik7aWYoIWUudHlwZSl0aHJvdyBuZXcgRXJyb3IoXCJZb3UgYXJlIHBhc3NpbmcgYSB3cm9uZyBtb2R1bGUhIFBsZWFzZSBjaGVjayB0aGUgb2JqZWN0IHlvdSBhcmUgcGFzc2luZyB0byBpMThuZXh0LnVzZSgpXCIpO3JldHVyblwiYmFja2VuZFwiPT09ZS50eXBlJiYodGhpcy5tb2R1bGVzLmJhY2tlbmQ9ZSksKFwibG9nZ2VyXCI9PT1lLnR5cGV8fGUubG9nJiZlLndhcm4mJmUuZXJyb3IpJiYodGhpcy5tb2R1bGVzLmxvZ2dlcj1lKSxcImxhbmd1YWdlRGV0ZWN0b3JcIj09PWUudHlwZSYmKHRoaXMubW9kdWxlcy5sYW5ndWFnZURldGVjdG9yPWUpLFwiaTE4bkZvcm1hdFwiPT09ZS50eXBlJiYodGhpcy5tb2R1bGVzLmkxOG5Gb3JtYXQ9ZSksXCJwb3N0UHJvY2Vzc29yXCI9PT1lLnR5cGUmJlMuYWRkUG9zdFByb2Nlc3NvcihlKSxcImZvcm1hdHRlclwiPT09ZS50eXBlJiYodGhpcy5tb2R1bGVzLmZvcm1hdHRlcj1lKSxcIjNyZFBhcnR5XCI9PT1lLnR5cGUmJnRoaXMubW9kdWxlcy5leHRlcm5hbC5wdXNoKGUpLHRoaXN9c2V0UmVzb2x2ZWRMYW5ndWFnZShlKXtpZihlJiZ0aGlzLmxhbmd1YWdlcyYmIShbXCJjaW1vZGVcIixcImRldlwiXS5pbmRleE9mKGUpPi0xKSlmb3IobGV0IGU9MDtlPHRoaXMubGFuZ3VhZ2VzLmxlbmd0aDtlKyspe2NvbnN0IHQ9dGhpcy5sYW5ndWFnZXNbZV07aWYoIShbXCJjaW1vZGVcIixcImRldlwiXS5pbmRleE9mKHQpPi0xKSYmdGhpcy5zdG9yZS5oYXNMYW5ndWFnZVNvbWVUcmFuc2xhdGlvbnModCkpe3RoaXMucmVzb2x2ZWRMYW5ndWFnZT10O2JyZWFrfX19Y2hhbmdlTGFuZ3VhZ2UoZSx0KXt2YXIgbj10aGlzO3RoaXMuaXNMYW5ndWFnZUNoYW5naW5nVG89ZTtjb25zdCByPWQoKTt0aGlzLmVtaXQoXCJsYW5ndWFnZUNoYW5naW5nXCIsZSk7Y29uc3Qgbz1lPT57dGhpcy5sYW5ndWFnZT1lLHRoaXMubGFuZ3VhZ2VzPXRoaXMuc2VydmljZXMubGFuZ3VhZ2VVdGlscy50b1Jlc29sdmVIaWVyYXJjaHkoZSksdGhpcy5yZXNvbHZlZExhbmd1YWdlPXZvaWQgMCx0aGlzLnNldFJlc29sdmVkTGFuZ3VhZ2UoZSl9LGk9KGUsaSk9PntpPyhvKGkpLHRoaXMudHJhbnNsYXRvci5jaGFuZ2VMYW5ndWFnZShpKSx0aGlzLmlzTGFuZ3VhZ2VDaGFuZ2luZ1RvPXZvaWQgMCx0aGlzLmVtaXQoXCJsYW5ndWFnZUNoYW5nZWRcIixpKSx0aGlzLmxvZ2dlci5sb2coXCJsYW5ndWFnZUNoYW5nZWRcIixpKSk6dGhpcy5pc0xhbmd1YWdlQ2hhbmdpbmdUbz12b2lkIDAsci5yZXNvbHZlKChmdW5jdGlvbigpe3JldHVybiBuLnQoLi4uYXJndW1lbnRzKX0pKSx0JiZ0KGUsKGZ1bmN0aW9uKCl7cmV0dXJuIG4udCguLi5hcmd1bWVudHMpfSkpfSxhPXQ9PntlfHx0fHwhdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yfHwodD1bXSk7Y29uc3Qgbj1cInN0cmluZ1wiPT10eXBlb2YgdD90OnRoaXMuc2VydmljZXMubGFuZ3VhZ2VVdGlscy5nZXRCZXN0TWF0Y2hGcm9tQ29kZXModCk7biYmKHRoaXMubGFuZ3VhZ2V8fG8obiksdGhpcy50cmFuc2xhdG9yLmxhbmd1YWdlfHx0aGlzLnRyYW5zbGF0b3IuY2hhbmdlTGFuZ3VhZ2UobiksdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yJiZ0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuY2FjaGVVc2VyTGFuZ3VhZ2UmJnRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvci5jYWNoZVVzZXJMYW5ndWFnZShuKSksdGhpcy5sb2FkUmVzb3VyY2VzKG4sKGU9PntpKGUsbil9KSl9O3JldHVybiBlfHwhdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yfHx0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuYXN5bmM/IWUmJnRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3RvciYmdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmFzeW5jPzA9PT10aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuZGV0ZWN0Lmxlbmd0aD90aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuZGV0ZWN0KCkudGhlbihhKTp0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuZGV0ZWN0KGEpOmEoZSk6YSh0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuZGV0ZWN0KCkpLHJ9Z2V0Rml4ZWRUKGUsdCxuKXt2YXIgcj10aGlzO2NvbnN0IG89ZnVuY3Rpb24oZSx0KXtsZXQgaTtpZihcIm9iamVjdFwiIT10eXBlb2YgdCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsbD1uZXcgQXJyYXkoYT4yP2EtMjowKSxzPTI7czxhO3MrKylsW3MtMl09YXJndW1lbnRzW3NdO2k9ci5vcHRpb25zLm92ZXJsb2FkVHJhbnNsYXRpb25PcHRpb25IYW5kbGVyKFtlLHRdLmNvbmNhdChsKSl9ZWxzZSBpPXsuLi50fTtpLmxuZz1pLmxuZ3x8by5sbmcsaS5sbmdzPWkubG5nc3x8by5sbmdzLGkubnM9aS5uc3x8by5ucyxpLmtleVByZWZpeD1pLmtleVByZWZpeHx8bnx8by5rZXlQcmVmaXg7Y29uc3QgYz1yLm9wdGlvbnMua2V5U2VwYXJhdG9yfHxcIi5cIjtsZXQgdTtyZXR1cm4gdT1pLmtleVByZWZpeCYmQXJyYXkuaXNBcnJheShlKT9lLm1hcCgoZT0+YCR7aS5rZXlQcmVmaXh9JHtjfSR7ZX1gKSk6aS5rZXlQcmVmaXg/YCR7aS5rZXlQcmVmaXh9JHtjfSR7ZX1gOmUsci50KHUsaSl9O3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlP28ubG5nPWU6by5sbmdzPWUsby5ucz10LG8ua2V5UHJlZml4PW4sb310KCl7cmV0dXJuIHRoaXMudHJhbnNsYXRvciYmdGhpcy50cmFuc2xhdG9yLnRyYW5zbGF0ZSguLi5hcmd1bWVudHMpfWV4aXN0cygpe3JldHVybiB0aGlzLnRyYW5zbGF0b3ImJnRoaXMudHJhbnNsYXRvci5leGlzdHMoLi4uYXJndW1lbnRzKX1zZXREZWZhdWx0TmFtZXNwYWNlKGUpe3RoaXMub3B0aW9ucy5kZWZhdWx0TlM9ZX1oYXNMb2FkZWROYW1lc3BhY2UoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2lmKCF0aGlzLmlzSW5pdGlhbGl6ZWQpcmV0dXJuIHRoaXMubG9nZ2VyLndhcm4oXCJoYXNMb2FkZWROYW1lc3BhY2U6IGkxOG5leHQgd2FzIG5vdCBpbml0aWFsaXplZFwiLHRoaXMubGFuZ3VhZ2VzKSwhMTtpZighdGhpcy5sYW5ndWFnZXN8fCF0aGlzLmxhbmd1YWdlcy5sZW5ndGgpcmV0dXJuIHRoaXMubG9nZ2VyLndhcm4oXCJoYXNMb2FkZWROYW1lc3BhY2U6IGkxOG4ubGFuZ3VhZ2VzIHdlcmUgdW5kZWZpbmVkIG9yIGVtcHR5XCIsdGhpcy5sYW5ndWFnZXMpLCExO2NvbnN0IG49dC5sbmd8fHRoaXMucmVzb2x2ZWRMYW5ndWFnZXx8dGhpcy5sYW5ndWFnZXNbMF0scj0hIXRoaXMub3B0aW9ucyYmdGhpcy5vcHRpb25zLmZhbGxiYWNrTG5nLG89dGhpcy5sYW5ndWFnZXNbdGhpcy5sYW5ndWFnZXMubGVuZ3RoLTFdO2lmKFwiY2ltb2RlXCI9PT1uLnRvTG93ZXJDYXNlKCkpcmV0dXJuITA7Y29uc3QgaT0oZSx0KT0+e2NvbnN0IG49dGhpcy5zZXJ2aWNlcy5iYWNrZW5kQ29ubmVjdG9yLnN0YXRlW2Ake2V9fCR7dH1gXTtyZXR1cm4tMT09PW58fDI9PT1ufTtpZih0LnByZWNoZWNrKXtjb25zdCBlPXQucHJlY2hlY2sodGhpcyxpKTtpZih2b2lkIDAhPT1lKXJldHVybiBlfXJldHVybiEhdGhpcy5oYXNSZXNvdXJjZUJ1bmRsZShuLGUpfHwoISh0aGlzLnNlcnZpY2VzLmJhY2tlbmRDb25uZWN0b3IuYmFja2VuZCYmKCF0aGlzLm9wdGlvbnMucmVzb3VyY2VzfHx0aGlzLm9wdGlvbnMucGFydGlhbEJ1bmRsZWRMYW5ndWFnZXMpKXx8ISghaShuLGUpfHxyJiYhaShvLGUpKSl9bG9hZE5hbWVzcGFjZXMoZSx0KXtjb25zdCBuPWQoKTtyZXR1cm4gdGhpcy5vcHRpb25zLm5zPyhcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9W2VdKSxlLmZvckVhY2goKGU9Pnt0aGlzLm9wdGlvbnMubnMuaW5kZXhPZihlKTwwJiZ0aGlzLm9wdGlvbnMubnMucHVzaChlKX0pKSx0aGlzLmxvYWRSZXNvdXJjZXMoKGU9PntuLnJlc29sdmUoKSx0JiZ0KGUpfSkpLG4pOih0JiZ0KCksUHJvbWlzZS5yZXNvbHZlKCkpfWxvYWRMYW5ndWFnZXMoZSx0KXtjb25zdCBuPWQoKTtcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9W2VdKTtjb25zdCByPXRoaXMub3B0aW9ucy5wcmVsb2FkfHxbXSxvPWUuZmlsdGVyKChlPT5yLmluZGV4T2YoZSk8MCkpO3JldHVybiBvLmxlbmd0aD8odGhpcy5vcHRpb25zLnByZWxvYWQ9ci5jb25jYXQobyksdGhpcy5sb2FkUmVzb3VyY2VzKChlPT57bi5yZXNvbHZlKCksdCYmdChlKX0pKSxuKToodCYmdCgpLFByb21pc2UucmVzb2x2ZSgpKX1kaXIoZSl7aWYoZXx8KGU9dGhpcy5yZXNvbHZlZExhbmd1YWdlfHwodGhpcy5sYW5ndWFnZXMmJnRoaXMubGFuZ3VhZ2VzLmxlbmd0aD4wP3RoaXMubGFuZ3VhZ2VzWzBdOnRoaXMubGFuZ3VhZ2UpKSwhZSlyZXR1cm5cInJ0bFwiO2NvbnN0IHQ9dGhpcy5zZXJ2aWNlcyYmdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZVV0aWxzfHxuZXcgUihGKCkpO3JldHVybltcImFyXCIsXCJzaHVcIixcInNxclwiLFwic3NoXCIsXCJ4YWFcIixcInloZFwiLFwieXVkXCIsXCJhYW9cIixcImFiaFwiLFwiYWJ2XCIsXCJhY21cIixcImFjcVwiLFwiYWN3XCIsXCJhY3hcIixcImFjeVwiLFwiYWRmXCIsXCJhZHNcIixcImFlYlwiLFwiYWVjXCIsXCJhZmJcIixcImFqcFwiLFwiYXBjXCIsXCJhcGRcIixcImFyYlwiLFwiYXJxXCIsXCJhcnNcIixcImFyeVwiLFwiYXJ6XCIsXCJhdXpcIixcImF2bFwiLFwiYXloXCIsXCJheWxcIixcImF5blwiLFwiYXlwXCIsXCJiYnpcIixcInBnYVwiLFwiaGVcIixcIml3XCIsXCJwc1wiLFwicGJ0XCIsXCJwYnVcIixcInBzdFwiLFwicHJwXCIsXCJwcmRcIixcInVnXCIsXCJ1clwiLFwieWRkXCIsXCJ5ZHNcIixcInlpaFwiLFwiamlcIixcInlpXCIsXCJoYm9cIixcIm1lblwiLFwieG1uXCIsXCJmYVwiLFwianByXCIsXCJwZW9cIixcInBlc1wiLFwicHJzXCIsXCJkdlwiLFwic2FtXCIsXCJja2JcIl0uaW5kZXhPZih0LmdldExhbmd1YWdlUGFydEZyb21Db2RlKGUpKT4tMXx8ZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoXCItYXJhYlwiKT4xP1wicnRsXCI6XCJsdHJcIn1zdGF0aWMgY3JlYXRlSW5zdGFuY2UoKXtyZXR1cm4gbmV3IHooYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX1jbG9uZUluc3RhbmNlKCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOlc7Y29uc3Qgbj1lLmZvcmtSZXNvdXJjZVN0b3JlO24mJmRlbGV0ZSBlLmZvcmtSZXNvdXJjZVN0b3JlO2NvbnN0IHI9ey4uLnRoaXMub3B0aW9ucywuLi5lLGlzQ2xvbmU6ITB9LG89bmV3IHoocik7dm9pZCAwPT09ZS5kZWJ1ZyYmdm9pZCAwPT09ZS5wcmVmaXh8fChvLmxvZ2dlcj1vLmxvZ2dlci5jbG9uZShlKSk7cmV0dXJuW1wic3RvcmVcIixcInNlcnZpY2VzXCIsXCJsYW5ndWFnZVwiXS5mb3JFYWNoKChlPT57b1tlXT10aGlzW2VdfSkpLG8uc2VydmljZXM9ey4uLnRoaXMuc2VydmljZXN9LG8uc2VydmljZXMudXRpbHM9e2hhc0xvYWRlZE5hbWVzcGFjZTpvLmhhc0xvYWRlZE5hbWVzcGFjZS5iaW5kKG8pfSxuJiYoby5zdG9yZT1uZXcgRSh0aGlzLnN0b3JlLmRhdGEsciksby5zZXJ2aWNlcy5yZXNvdXJjZVN0b3JlPW8uc3RvcmUpLG8udHJhbnNsYXRvcj1uZXcgTShvLnNlcnZpY2VzLHIpLG8udHJhbnNsYXRvci5vbihcIipcIiwoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkodD4xP3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO28uZW1pdChlLC4uLm4pfSkpLG8uaW5pdChyLHQpLG8udHJhbnNsYXRvci5vcHRpb25zPXIsby50cmFuc2xhdG9yLmJhY2tlbmRDb25uZWN0b3Iuc2VydmljZXMudXRpbHM9e2hhc0xvYWRlZE5hbWVzcGFjZTpvLmhhc0xvYWRlZE5hbWVzcGFjZS5iaW5kKG8pfSxvfXRvSlNPTigpe3JldHVybntvcHRpb25zOnRoaXMub3B0aW9ucyxzdG9yZTp0aGlzLnN0b3JlLGxhbmd1YWdlOnRoaXMubGFuZ3VhZ2UsbGFuZ3VhZ2VzOnRoaXMubGFuZ3VhZ2VzLHJlc29sdmVkTGFuZ3VhZ2U6dGhpcy5yZXNvbHZlZExhbmd1YWdlfX19Y29uc3QgRz16LmNyZWF0ZUluc3RhbmNlKCk7Ry5jcmVhdGVJbnN0YW5jZT16LmNyZWF0ZUluc3RhbmNlO0cuY3JlYXRlSW5zdGFuY2UsRy5kaXIsRy5pbml0LEcubG9hZFJlc291cmNlcyxHLnJlbG9hZFJlc291cmNlcyxHLnVzZSxHLmNoYW5nZUxhbmd1YWdlLEcuZ2V0Rml4ZWRULEcudCxHLmV4aXN0cyxHLnNldERlZmF1bHROYW1lc3BhY2UsRy5oYXNMb2FkZWROYW1lc3BhY2UsRy5sb2FkTmFtZXNwYWNlcyxHLmxvYWRMYW5ndWFnZXM7Ry50O24oMzQyMCksbigxMTI3KTtuKDU0MzgpO3ZhciBxPW4oMzkyNik7bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5xdWV1ZT1bXSx0aGlzLmxvY2tlZD0hMX1sb2NrKCl7cmV0dXJuIG5ldyBQcm9taXNlKChlPT57dGhpcy5sb2NrZWQ/dGhpcy5xdWV1ZS5wdXNoKGUpOih0aGlzLmxvY2tlZD0hMCxlKCkpfSkpfXVubG9jaygpe2lmKHRoaXMucXVldWUubGVuZ3RoPjApe2NvbnN0IGU9dGhpcy5xdWV1ZS5zaGlmdCgpO2UmJmUoKX1lbHNlIHRoaXMubG9ja2VkPSExfX07bmV3IE1hcDt2YXIgWTshZnVuY3Rpb24oZSl7ZS5FUlJPUj1cImVycm9yXCIsZS5TVUNDRVNTPVwic3VjY2Vzc1wiLGUuSU5GTz1cImluZm9cIn0oWXx8KFk9e30pKTtjb25zdCBLPSgoZSx0KT0+e2NvbnN0IG49ZTtyZXR1cm4gbi53b3Jrc3BhY2VQbGF0Zm9ybXx8KG4ud29ya3NwYWNlUGxhdGZvcm09e30pLG4ud29ya3NwYWNlUGxhdGZvcm0uX2ludGVybmFsRGVmZXJTaG93T3B0aW9ucz17c2V0QXNGb3JlZ3JvdW5kOiEhdCxkZWZlclNob3dFbmFibGVkOiEwLGF1dG9TaG93Om4ud29ya3NwYWNlUGxhdGZvcm0/Ll9pbnRlcm5hbEF1dG9TaG93fHxuLndvcmtzcGFjZVBsYXRmb3JtPy5faW50ZXJuYWxEZWZlclNob3dPcHRpb25zPy5hdXRvU2hvd3x8dm9pZCAwPT09bi5hdXRvU2hvd3x8bi5hdXRvU2hvd30sbi5hdXRvU2hvdz0hMSxufSkoe2Fsd2F5c09uVG9wOiEwLGF1dG9TaG93OiExLGZyYW1lOiExLHJlc2l6YWJsZTohMSxzaG93VGFza2Jhckljb246ITF9KTt2YXIgWDshZnVuY3Rpb24oZSl7ZS5Mb2NrZWQ9XCJMb2NrQ2xvc2VkSWNvblwiLGUuVW5sb2NrZWQ9XCJMb2NrT3BlbjFJY29uXCJ9KFh8fChYPXt9KSk7IWZ1bmN0aW9uKGU9Syl7Y29uc3QgdD1uZXcgTWFwfSgpO3ZhciBKPW4oODA2MSksUT1uKDQ3MjgpO24oNjY1MCk7Y29uc3QgZWU9KGUsdD0wKT0+e2xldCBuLHIsbz0hMTtjb25zdCBpPWFzeW5jIHI9Pntjb25zdCBhPWF3YWl0IGUoLi4ucik7aWYobyl7YXdhaXQgbmV3IFByb21pc2UoKGU9PnNldFRpbWVvdXQoZSx0KSkpO2NvbnN0IGU9bjtyZXR1cm4gbj12b2lkIDAsbz0hMSxpKGUpfXJldHVybiBhfTtyZXR1cm4oLi4uZSk9PihyPyhvPSEwLG49ZSk6cj1pKGUpLmNhdGNoKChlPT57dGhyb3cgY29uc29sZS5lcnJvcihcIm1ha2VEZWJvdW5jZWRGdW5jXCIsZSksZX0pKS5maW5hbGx5KCgoKT0+e3I9dm9pZCAwfSkpLHIpfTtmdW5jdGlvbiB0ZShlLHQpe3JldHVybiBhc3luYyhuLC4uLnIpPT57ZS5oYXMobikmJmUuZ2V0KG4pLmZvckVhY2goKGU9PmUoLi4ucikpKSx0JiZhd2FpdCB0KHtldmVudDpuLHBheWxvYWQ6cn0pfX1mdW5jdGlvbiBuZShlLHQpe3JldHVybiB0JiZ0KCh0PT57Y29uc3R7ZXZlbnQ6bixwYXlsb2FkOnJ9PXQ7ZS5oYXMobikmJmUuZ2V0KG4pLmZvckVhY2goKGU9PmUoLi4ucikpKX0pKSwodCxuKT0+e2UuaGFzKHQpfHxlLnNldCh0LG5ldyBTZXQpLGUuZ2V0KHQpLmFkZChuKX19ZnVuY3Rpb24gcmUoZSl7cmV0dXJuKHQsbik9PntlLmhhcyh0KXx8ZS5zZXQodCxuZXcgU2V0KTtjb25zdCByPWUuZ2V0KHQpLG89KC4uLmUpPT57biguLi5lKSxyLmRlbGV0ZShvKX07ci5hZGQobyl9fWZ1bmN0aW9uIG9lKGUpe3JldHVybih0LG4pPT57ZS5oYXModCkmJmUuZ2V0KHQpLmRlbGV0ZShuKX19bigxMDY1KTtsLklBLkJyb3dzZXJNZW51OyhmdW5jdGlvbihlKXtjb25zdCB0PW5ldyBNYXA7dGUodCwodD0+ci5zUyYmZmluLkludGVyQXBwbGljYXRpb25CdXMucHVibGlzaChlLHQpKSksbmUodCwodD0+ci5zUyYmZmluLkludGVyQXBwbGljYXRpb25CdXMuc3Vic2NyaWJlKHt1dWlkOmZpbi5tZS51dWlkfSxlLHQpKSksb2UodCkscmUodCl9KShcIndpbmRvdy5tZW51XCIpLGVlKCgoKT0+KDAsaS5EOSkoKS5nZXRDaGlsZFdpbmRvd3MoKSksNTAwKTtuZXcgTWFwO3ZhciBpZT1uKDMxOTgpO24ubihpZSkoKSgoYXN5bmMoKT0+e2NvbnN0IGU9YXdhaXQgZmluLlBsYXRmb3JtLmdldEN1cnJlbnRTeW5jKCkuQXBwbGljYXRpb24uZ2V0Q2hpbGRXaW5kb3dzKCk7bGV0IHQsbj0hMTtmb3IoY29uc3QgciBvZiBlKWlmKHIuaWRlbnRpdHkubmFtZT09PWwuSUEuQnJvd3Nlck1lbnV8fHIuaWRlbnRpdHkubmFtZT09PWwuSUEuQnJvd3NlclNhdmVNZW51P3Q9cjphd2FpdCgwLGwuQikoci5pZGVudGl0eSkmJihuPSEwKSxuKWJyZWFrOyFuJiZ0JiZ0LmNsb3NlKCl9KSwxMDAse2xlYWRpbmc6ITEsdHJhaWxpbmc6ITB9KTt2YXIgYWU7IWZ1bmN0aW9uKGUpe2UuTGFiZWw9XCJub3JtYWxcIixlLlNlcGFyYXRvcj1cInNlcGFyYXRvclwiLGUuU3VibWVudT1cInN1Ym1lbnVcIixlLkNoZWNrYm94PVwiY2hlY2tib3hcIn0oYWV8fChhZT17fSkpO2FlLlNlcGFyYXRvcjt2YXIgbGU7IWZ1bmN0aW9uKGUpe2UuU2F2ZT1cIlNhdmVcIixlLlNhdmVBcz1cIlNhdmVBc1wifShsZXx8KGxlPXt9KSk7dmFyIHNlOyFmdW5jdGlvbihlKXtlLkdsb2JhbE1lbnU9XCJnbG9iYWwtbWVudVwiLGUuQ29udGV4dE1lbnU9XCJjb250ZXh0LW1lbnVcIixlLlJlbmFtZVN1cGVydGFiPVwicmVuYW1lLXN1cGVydGFiXCIsZS5BZGRFZGl0Qm9va21hcms9XCJhZGQtZWRpdC1ib29rbWFya1wiLGUuRHJvcGRvd25NZW51PVwiZHJvcGRvd24tbWVudVwifShzZXx8KHNlPXt9KSk7big1OTEyKTtmdW5jdGlvbiBjZShlKXtyZXR1cm4gbmV3IFByb21pc2UoKCh0LG4pPT57ZS5vbmNvbXBsZXRlPWUub25zdWNjZXNzPSgpPT50KGUucmVzdWx0KSxlLm9uYWJvcnQ9ZS5vbmVycm9yPSgpPT5uKGUuZXJyb3IpfSkpfWZ1bmN0aW9uIHVlKGUsdCl7Y29uc3Qgbj1pbmRleGVkREIub3BlbihlKTtuLm9udXBncmFkZW5lZWRlZD0oKT0+bi5yZXN1bHQuY3JlYXRlT2JqZWN0U3RvcmUodCk7Y29uc3Qgcj1jZShuKTtyZXR1cm4oZSxuKT0+ci50aGVuKChyPT5uKHIudHJhbnNhY3Rpb24odCxlKS5vYmplY3RTdG9yZSh0KSkpKX1sZXQgZmU7ZnVuY3Rpb24gZGUoKXtyZXR1cm4gZmV8fChmZT11ZShcImtleXZhbC1zdG9yZVwiLFwia2V5dmFsXCIpKSxmZX1mdW5jdGlvbiBwZShlLHQpe3JldHVybiBlLm9wZW5DdXJzb3IoKS5vbnN1Y2Nlc3M9ZnVuY3Rpb24oKXt0aGlzLnJlc3VsdCYmKHQodGhpcy5yZXN1bHQpLHRoaXMucmVzdWx0LmNvbnRpbnVlKCkpfSxjZShlLnRyYW5zYWN0aW9uKX1jb25zdCBoZT1hc3luYyhlLHQsbik9Pntjb25zdCByPVEuclYoSi5aLkhhc01vdmVkU3RvcmUpLG89cj9KU09OLnBhcnNlKHIpOnt9O2lmKG8mJm9bbl0pcmV0dXJuO29bbl09ITAsUS5MUyhKLlouSGFzTW92ZWRTdG9yZSxKU09OLnN0cmluZ2lmeShvKSk7Y29uc3QgaT1hd2FpdCBmdW5jdGlvbihlPWRlKCkpe3JldHVybiBlKFwicmVhZG9ubHlcIiwodD0+e2lmKHQuZ2V0QWxsJiZ0LmdldEFsbEtleXMpcmV0dXJuIFByb21pc2UuYWxsKFtjZSh0LmdldEFsbEtleXMoKSksY2UodC5nZXRBbGwoKSldKS50aGVuKCgoW2UsdF0pPT5lLm1hcCgoKGUsbik9PltlLHRbbl1dKSkpKTtjb25zdCBuPVtdO3JldHVybiBlKFwicmVhZG9ubHlcIiwoZT0+cGUoZSwoZT0+bi5wdXNoKFtlLmtleSxlLnZhbHVlXSkpKS50aGVuKCgoKT0+bikpKSl9KSl9KGUpO2F3YWl0IGZ1bmN0aW9uKGUsdD1kZSgpKXtyZXR1cm4gdChcInJlYWR3cml0ZVwiLCh0PT4oZS5mb3JFYWNoKChlPT50LnB1dChlWzFdLGVbMF0pKSksY2UodC50cmFuc2FjdGlvbikpKSl9KGksdCl9LGdlPShlLHQpPT51ZShlK1wiLVwiK2Zpbi5tZS51dWlkLHQpLHZlPShlLHQpPT57Y29uc3Qgbj1nZShlLHQpLHI9dWUoZSx0KTtyZXR1cm4gaGUocixuLGUpLG59O3IuX1YmJnIuc1MmJnZlKFwib3BlbmZpbi1ob21lLXBhZ2VzXCIsXCJwYWdlc1wiKTtyLl9WJiZyLnNTJiZnZShcIm9wZW5maW4tZW50ZXJwcmlzZS10YWItaGlzdG9yeVwiLFwicmVtb3ZlZC10YWItc3RhY2tcIiksci5fViYmci5zUyYmZ2UoXCJvcGVuZmluLWVudGVycHJpc2Utc2l0ZS1oaXN0b3J5XCIsXCJ2aXNpdGVkLXNpdGVzXCIpO24oMTY0Nik7dmFyIG1lOyFmdW5jdGlvbihlKXtlW2UuQm90dG9tTGVmdD0wXT1cIkJvdHRvbUxlZnRcIixlW2UuQm90dG9tUmlnaHQ9MV09XCJCb3R0b21SaWdodFwiLGVbZS5DZW50ZXI9Ml09XCJDZW50ZXJcIn0obWV8fChtZT17fSkpO3IuX1YmJnIuc1MmJmdlKFwiZG9jay1wcm92aWRlci1jb25maWdzXCIsXCJkb2NrLXByb3ZpZGVyLWNvbmZpZ3NcIik7big3MDUpO3IuX1YmJnIuc1MmJnZlKFwib3BlbmZpbi13b3Jrc3BhY2UtcGxhdGZvcm0td29ya3NwYWNlc1wiLFwid29ya3NwYWNlc1wiKTtuKDY0OTUpO3IucngsYS5aUC5Ccm93c2VyLGwuR2kudXVpZCxsLklBLkJyb3dzZXJBZGRyZXNzU2VhcmNoUHJlZml4O24oNzA5OCksbig3NTY0KSxuKDkxMTcpfSw3MDk4OihlLHQsbik9PntcInVzZSBzdHJpY3RcIn0sNzEwMDooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7bi5kKHQseyRnOigpPT5wfSk7dmFyIHIsbyxpLGEsbCxzLGMsdSxmLGQscCxoO24oNzU2NCksbig2NDk1KSxuKDUzMDQpOyFmdW5jdGlvbihlKXtlLlVybENoYW5nZT1cIlVSTF9DSEFOR0VcIixlLlZpZXdBZGRlZD1cIlZJRVdfQURERURcIixlLlZpZXdSZW1vdmVkPVwiVklFV19SRU1PVkVEXCIsZS5QYWdlQ29udGV4dEFkZGVkPVwiUEFHRV9DT05URVhUX0FEREVEXCIsZS5QYWdlQ29udGV4dFJlbW92ZWQ9XCJQQUdFX0NPTlRFWFRfUkVNT1ZFRFwifShyfHwocj17fSkpLGZ1bmN0aW9uKGUpe2UuTmV3V2luZG93PVwiTmV3V2luZG93XCIsZS5OZXdQYWdlPVwiTmV3UGFnZVwiLGUuU2F2ZVBhZ2U9XCJTYXZlUGFnZVwiLGUuU2F2ZVBhZ2VBcz1cIlNhdmVQYWdlQXNcIixlLlByaW50PVwiUHJpbnRcIixlLlByaW50QWxsPVwiUHJpbnRBbGxcIixlLlByaW50U2NyZWVuPVwiUHJpbnRTY3JlZW5cIixlLkNsb3NlV2luZG93PVwiQ2xvc2VXaW5kb3dcIixlLlJlc3RvcmVDaGFuZ2VzPVwiUmVzdG9yZUNoYW5nZXNcIixlLlNhdmVXb3Jrc3BhY2U9XCJTYXZlV29ya3NwYWNlXCIsZS5TYXZlV29ya3NwYWNlQXM9XCJTYXZlV29ya3NwYWNlQXNcIixlLlJlbmFtZVdvcmtzcGFjZT1cIlJlbmFtZVdvcmtzcGFjZVwiLGUuU3dpdGNoV29ya3NwYWNlPVwiU3dpdGNoV29ya3NwYWNlXCIsZS5EZWxldGVXb3Jrc3BhY2U9XCJEZWxldGVXb3Jrc3BhY2VcIixlLkRvd25sb2Fkcz1cIkRvd25sb2Fkc1wiLGUuT3BlblN0b3JlZnJvbnQ9XCJPcGVuU3RvcmVmcm9udFwiLGUuQXBwZWFyYW5jZT1cIkFwcGVhcmFuY2VcIixlLlF1aXQ9XCJRdWl0XCIsZS5DdXN0b209XCJDdXN0b21cIn0ob3x8KG89e30pKSxmdW5jdGlvbihlKXtlLkxpZ2h0PVwibGlnaHRcIixlLkRhcms9XCJkYXJrXCIsZS5TeXN0ZW09XCJzeXN0ZW1cIn0oaXx8KGk9e30pKSxmdW5jdGlvbihlKXtlLkNsb3NlPVwiQ2xvc2VcIixlLkR1cGxpY2F0ZT1cIkR1cGxpY2F0ZVwiLGUuUmVuYW1lPVwiUmVuYW1lXCIsZS5TYXZlPVwiU2F2ZVwiLGUuU2F2ZUFzPVwiU2F2ZSBBc1wiLGUuTmV3UGFnZT1cIk5ldyBQYWdlXCIsZS5EZWxldGVQYWdlPVwiRGVsZXRlIFBhZ2VcIixlLlNhdmVXb3Jrc3BhY2VBcz1cIlNhdmVXb3Jrc3BhY2VBc1wiLGUuUmVmcmVzaD1cIlJlZnJlc2hcIixlLkNsb3NlT3RoZXJzPVwiQ2xvc2Ugb3RoZXJzXCIsZS5EZWxldGU9XCJEZWxldGVcIixlLkN1c3RvbT1cIkN1c3RvbVwifShhfHwoYT17fSkpLGZ1bmN0aW9uKGUpe2UuTG9jaz1cIkxvY2tcIixlLlNob3dIaWRlVGFicz1cIlNob3dIaWRlVGFic1wiLGUuQWRkVG9DaGFuZWw9XCJBZGRUb0NoYW5uZWxcIixlLlByaW50PVwiUHJpbnRcIixlLlBpbj1cIlBpblwifShsfHwobD17fSkpLGZ1bmN0aW9uKGUpe2UuRWRpdE5hbWU9XCJFZGl0IE5hbWVcIixlLk1vdmU9XCJNb3ZlXCIsZS5EZWxldGU9XCJEZWxldGVcIn0oc3x8KHM9e30pKSxmdW5jdGlvbihlKXtlLk5ld1ZpZXc9XCJOZXdWaWV3XCIsZS5EdXBsaWNhdGVWaWV3cz1cIkR1cGxpY2F0ZVZpZXdcIixlLk9wZW5XaXRoRGVmYXVsdEJyb3dzZXI9XCJPcGVuV2l0aERlZmF1bHRCcm93c2VyXCIsZS5SZWxvYWRWaWV3cz1cIlJlbG9hZFRhYlwiLGUuQ2xvc2VWaWV3cz1cIkNsb3NlVGFiXCIsZS5BZGRUb0NoYW5uZWw9XCJBZGRUb0NoYW5uZWxcIixlLlJlbW92ZUZyb21DaGFubmVsPVwiUmVtb3ZlRnJvbUNoYW5uZWxcIixlLkJhY2s9XCJCYWNrXCIsZS5Gb3J3YXJkPVwiRm9yd2FyZFwiLGUuUHJpbnQ9XCJQcmludFwiLGUuUHJpbnRBbGw9XCJQcmludEFsbFwiLGUuUHJpbnRTY3JlZW49XCJQcmludFNjcmVlblwiLGUuQ3VzdG9tPVwiQ3VzdG9tXCJ9KGN8fChjPXt9KSksZnVuY3Rpb24oZSl7ZS5TaG93SGlkZVRhYnM9XCJTaG93SGlkZVRhYnNcIixlLkNvbG9yTGlua2luZz1cIkNvbG9yTGlua2luZ1wiLGUuUHJlc2V0TGF5b3V0cz1cIlByZXNldExheW91dHNcIixlLkxvY2tVbmxvY2tQYWdlPVwiTG9ja1VubG9ja1BhZ2VcIixlLlNhdmVNZW51PVwiU2F2ZU1lbnVcIixlLlNhdmVQYWdlPVwiU2F2ZVBhZ2VcIixlLk1pbmltaXNlPVwiTWluaW1pc2VcIixlLk1heGltaXNlPVwiTWF4aW1pc2VcIixlLkNsb3NlPVwiQ2xvc2VcIixlLkN1c3RvbT1cIkN1c3RvbVwifSh1fHwodT17fSkpLGZ1bmN0aW9uKGUpe2UuU2F2ZVBhZ2U9XCJTYXZlUGFnZVwiLGUuU2F2ZVdvcmtzcGFjZT1cIlNhdmVXb3Jrc3BhY2VcIixlLlNhdmVQYWdlQXM9XCJTYXZlUGFnZUFzXCIsZS5TYXZlV29ya3NwYWNlQXM9XCJTYXZlV29ya3NwYWNlQXNcIixlLkN1c3RvbT1cIkN1c3RvbVwifShmfHwoZj17fSkpLGZ1bmN0aW9uKGUpe2UuQnJvd3Nlcj1cImJyb3dzZXJcIixlLlBsYXRmb3JtPVwicGxhdGZvcm1cIn0oZHx8KGQ9e30pKSxmdW5jdGlvbihlKXtlLkN1c3RvbUJ1dHRvbj1cIkN1c3RvbUJ1dHRvblwiLGUuU3RvcmVDdXN0b21CdXR0b249XCJTdG9yZUN1c3RvbUJ1dHRvblwiLGUuQ3VzdG9tRHJvcGRvd25JdGVtPVwiQ3VzdG9tRHJvcGRvd25JdGVtXCIsZS5HbG9iYWxDb250ZXh0TWVudT1cIkdsb2JhbENvbnRleHRNZW51XCIsZS5WaWV3VGFiQ29udGV4dE1lbnU9XCJWaWV3VGFiQ29udGV4dE1lbnVcIixlLlBhZ2VUYWJDb250ZXh0TWVudT1cIlBhZ2VUYWJDb250ZXh0TWVudVwiLGUuU2F2ZUJ1dHRvbkNvbnRleHRNZW51PVwiU2F2ZUJ1dHRvbkNvbnRleHRNZW51XCIsZS5BUEk9XCJBUElcIn0ocHx8KHA9e30pKSxmdW5jdGlvbihlKXtlLlNBVkVfUEFHRT1cIlNBVkVfUEFHRVwiLGUuU0FWRV9XT1JLU1BBQ0U9XCJTQVZFX1dPUktTUEFDRVwiLGUuU0FWRV9QQUdFX0FTPVwiU0FWRV9QQUdFX0FTXCIsZS5TQVZFX1dPUktTUEFDRV9BUz1cIlNBVkVfV09SS1NQQUNFX0FTXCIsZS5SRU5BTUVfUEFHRT1cIlJFTkFNRV9QQUdFXCIsZS5SRU5BTUVfV09SS1NQQUNFPVwiUkVOQU1FX1dPUktTUEFDRVwifShofHwoaD17fSkpfSwyNjkzOihlLHQsbik9PntcInVzZSBzdHJpY3RcIjtuLmQodCx7RTooKT0+aX0pO3ZhciByPW4oNTgwNiksbz1uKDcyNzgpO2NvbnN0IGk9KGUsdCk9PntvLloubWFya1N0YXJ0KGAke2V9LXJlZ2lzdHJhdGlvbmApLCgwLHIuVFopKCkub25jZShcInN0YXJ0ZWRcIiwoKCk9Pm8uWi5tYXJrQW5kTWVhc3VyZShcIndvcmtzcGFjZS1hcHAtc3RhcnRlZFwiLGAke2V9LXJlZ2lzdHJhdGlvbmApKSk7Y29uc3Qgbj1maW4uV2luZG93LndyYXBTeW5jKHQpO24ub25jZShcImluaXRpYWxpemVkXCIsKCgpPT5vLloubWFya0FuZE1lYXN1cmUoYCR7ZX0td2luZG93LWluaXRpYWxpemVkYCxgJHtlfS1yZWdpc3RyYXRpb25gKSkpLG4ub25jZShcInNob3duXCIsKCgpPT57by5aLm1hcmtBbmRNZWFzdXJlKGAke2V9LXNob3dgLGAke2V9LXJlZ2lzdHJhdGlvbmApfSkpfX0sMzI2MTooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7bi5yKHQpLG4uZCh0LHtDTElBY3Rpb246KCk9Pl8uUHQsQ0xJRmlsdGVyT3B0aW9uVHlwZTooKT0+Xy5lbCxDTElUZW1wbGF0ZTooKT0+Xy55VyxkZXJlZ2lzdGVyOigpPT5FLGhpZGU6KCk9PmoscmVnaXN0ZXI6KCk9Pkwsc2hvdzooKT0+U30pO3ZhciByPW4oNjY3OCksbz1uKDcyNzgpLGk9big2NTMyKSxhPW4oMTIxKTtjb25zdCBsPXtyZW1vdGVQcm92aWRlckRhdGFTdHJlYW1JZDpcIjBcIixyZW1vdGVDbGllbnRTZWFyY2hTdHJlYW1JZDpcIjFcIixyZW1vdGVQcm92aWRlclJlZ2lzdHJhdGlvblN0cmVhbUlkOlwiMlwiLHJlbW90ZVByb3ZpZGVyRGVyZWdpc3RyYXRpb25TdHJlYW1JZDpcIjNcIixyZW1vdGVQcm92aWRlckluZm9TdHJlYW1JZDpcIjRcIixyZW1vdGVQcm92aWRlckRpc3BhdGNoU3RyZWFtSWQ6XCI1XCIscmVtb3RlU2VhcmNoQ2xvc2VTdHJlYW1JZDpcIjZcIn07dmFyIHM9big1MTUwKSxjPW4oNTQzOCksdT1uKDMyNjQpO3ZhciBmPW4oNzA0Nik7Y29uc3QgZD0oKT0+e307ZnVuY3Rpb24gcChlKXtjb25zdCB0PXt9O2xldCBuPVtdO2xldCByPVtdO2xldCBvPW51bGw7bGV0IGk9Zi53MS5Jbml0aWFsO3QuZ2V0U3RhdHVzPSgpPT5pLHQuZ2V0UmVzdWx0QnVmZmVyPSgpPT5uLHQuc2V0UmVzdWx0QnVmZmVyPWU9PntuPWUsbj8ubGVuZ3RoJiZ0Lm9uQ2hhbmdlKCl9LHQuZ2V0UmV2b2tlZEJ1ZmZlcj0oKT0+cix0LnNldFJldm9rZWRCdWZmZXI9ZT0+e3I9ZSxyPy5sZW5ndGgmJnQub25DaGFuZ2UoKX0sdC5zZXRVcGRhdGVkQ29udGV4dD1lPT57bz1lLG51bGwhPT1vJiZ0Lm9uQ2hhbmdlKCl9LHQuZ2V0VXBkYXRlZENvbnRleHQ9KCk9Pm8sdC5vbkNoYW5nZT1kO2NvbnN0IGE9e307cmV0dXJuIHQucmVzPWEsYS5jbG9zZT0oKT0+e2khPT1mLncxLkNsb3NlJiYoaT1mLncxLkNsb3NlLHQub25DaGFuZ2UoKSl9LGEub3Blbj0oKT0+e2khPT1mLncxLk9wZW4mJihpPWYudzEuT3Blbix0Lm9uQ2hhbmdlKCkpfSxhLnJlc3BvbmQ9bj0+e2NvbnN0IHI9ZnVuY3Rpb24oZT1bXSx0PVtdLG49XCJhc2NlbmRpbmdcIil7Y29uc3Qgcj1bXSxvPW5ldyBNYXA7dC5mb3JFYWNoKChlPT57aWYoZS5rZXkpcmV0dXJuIG8uc2V0KGUua2V5LGUpO3IucHVzaChlKX0pKTtsZXQgaT1lLm1hcCgoZT0+e2lmKGUua2V5KXtjb25zdCB0PW8uZ2V0KGUua2V5KTtpZih0KXJldHVybiBvLmRlbGV0ZShlLmtleSksdH1yZXR1cm4gZX0pKTtyZXR1cm4gaS5wdXNoKC4uLm8udmFsdWVzKCksLi4uciksaT1cImFzY2VuZGluZ1wiPT09bj9pLnNvcnQoKChlLHQpPT4oZT8uc2NvcmU/PzEvMCktKHQ/LnNjb3JlPz8xLzApKSk6aS5zb3J0KCgoZSx0KT0+KHQ/LnNjb3JlPz8xLzApLShlPy5zY29yZT8/MS8wKSkpLGl9KHQuZ2V0UmVzdWx0QnVmZmVyKCksbixlKTt0LnNldFJlc3VsdEJ1ZmZlcihyKX0sYS5yZXZva2U9KC4uLmUpPT57Y29uc3Qgbj1uZXcgU2V0KGUpLHI9dC5nZXRSZXN1bHRCdWZmZXIoKS5maWx0ZXIoKCh7a2V5OmV9KT0+e2NvbnN0IHQ9bi5oYXMoZSk7cmV0dXJuIHQmJm4uZGVsZXRlKGUpLCF0fSkpO3Quc2V0UmVzdWx0QnVmZmVyKHIpLG4uc2l6ZSYmKHQuZ2V0UmV2b2tlZEJ1ZmZlcigpLmZvckVhY2goKGU9Pm4uYWRkKGUpKSksdC5zZXRSZXZva2VkQnVmZmVyKFsuLi5uXSkpfSxhLnVwZGF0ZUNvbnRleHQ9ZT0+e3Quc2V0VXBkYXRlZENvbnRleHQoZSl9LHR9Y29uc3QgaD1uZXcgTWFwLGc9MTAwO2FzeW5jIGZ1bmN0aW9uIHYoZSl7Y29uc3R7aWQ6dCxwcm92aWRlcklkOm59PWUscj13LmdldFByb3ZpZGVyT3JGYWlsKG4pO2xldCBvPWguZ2V0KHQpO298fChvPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj1uZXcgU2V0O2xldCByPSExO3JldHVybntjbG9zZTooKT0+e3I9ITA7Zm9yKGNvbnN0IGUgb2YgbillKCl9LHJlcTp7aWQ6ZSwuLi50LGNvbnRleHQ6dD8uY29udGV4dHx8e30sb25DbG9zZTplPT57bi5hZGQoZSksciYmZSgpfSxyZW1vdmVMaXN0ZW5lcjplPT57bi5kZWxldGUoZSl9fX19KHQsZSksaC5zZXQodCxvKSk7Y29uc3QgaT1wKCksYT0oKT0+e2NvbnN0IGU9aS5nZXRSZXN1bHRCdWZmZXIoKTtpLnNldFJlc3VsdEJ1ZmZlcihbXSk7Y29uc3Qgcj1pLmdldFJldm9rZWRCdWZmZXIoKTtpLnNldFJldm9rZWRCdWZmZXIoW10pO2NvbnN0IG89aS5nZXRVcGRhdGVkQ29udGV4dCgpO2kuc2V0VXBkYXRlZENvbnRleHQobnVsbCk7Y29uc3QgYT1pLmdldFN0YXR1cygpOyFhc3luYyBmdW5jdGlvbihlKXsoYXdhaXQoMCxzLlZEKSgpKS5kaXNwYXRjaChsLnJlbW90ZVByb3ZpZGVyRGF0YVN0cmVhbUlkLGUpfSh7aWQ6dCxwcm92aWRlcklkOm4scmVzdWx0czplLHJldm9rZWQ6cixzdGF0dXM6YSxjb250ZXh0Om99KX07bGV0IGM9ITAsdT0hMTtpLm9uQ2hhbmdlPSgpPT57aWYoYylyZXR1cm4gYz0hMSx2b2lkIGEoKTt1fHwodT0hMCxzZXRUaW1lb3V0KCgoKT0+e3U9ITEsYSgpfSksZykpfTt0cnl7Y29uc3R7cmVzdWx0czplLGNvbnRleHQ6YX09YXdhaXQgci5vblVzZXJJbnB1dChvLnJlcSxpLnJlcyksbD1pLmdldFN0YXR1cygpO3JldHVybntpZDp0LHByb3ZpZGVySWQ6bixzdGF0dXM6bCxyZXN1bHRzOmUsY29udGV4dDphfX1jYXRjaChlKXtyZXR1cm4gY29uc29sZS5lcnJvcihgT3BlbkZpbi9Xb3Jrc3BhY2UvSG9tZS4gVW5jYXVnaHQgZXhjZXB0aW9uIGluIHNlYXJjaCBwcm92aWRlciAke259IGZvciBzZWFyY2ggJHt0fWAsXCJUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHNlYXJjaCBwcm92aWRlci5cIixlKSx7aWQ6dCxwcm92aWRlcklkOm4sZXJyb3I6ZT8ubWVzc2FnZX19fWFzeW5jIGZ1bmN0aW9uIG0oKXtmb3IoY29uc3R7cmVxOmUsY2xvc2U6dH1vZiBoLnZhbHVlcygpKXQoKSxoLmRlbGV0ZShlLmlkKX1hc3luYyBmdW5jdGlvbiBDKGUsdCl7Y29uc3Qgbj13LmdldFByb3ZpZGVyT3JGYWlsKGUucHJvdmlkZXJJZCk7cmV0dXJuIGUucmVzdWx0LmRpc3BhdGNoZXJJZGVudGl0eT10LG4ub25SZXN1bHREaXNwYXRjaD8uKGUucmVzdWx0KX1mdW5jdGlvbiB5KGUpe2NvbnN0IHQ9aC5nZXQoZS5pZCk7dD8uY2xvc2UoKSxoLmRlbGV0ZShlLmlkKX1jb25zdCB3PW5ldyB1LmxUKFwiaG9tZVwiKSxiPWFzeW5jIGU9Pnthd2FpdCgwLHMuYUIpKCk7IShcInNraXBQbGF0Zm9ybUluaXRDaGVja1wiaW4gZSYmITA9PT1lLnNraXBQbGF0Zm9ybUluaXRDaGVjaykmJmF3YWl0KDAsYy5IaCkoZmluLm1lLmlkZW50aXR5KTt3LmFzc2VydE5vdEFscmVhZHlSZWdpc3RlcmVkKGUuaWQpLHcuc2V0UHJvdmlkZXIoZSk7Y29uc3QgdD1hd2FpdCgwLHMuVkQpKCk7cmV0dXJuIGZ1bmN0aW9uKGUpe2UuaG9tZUNoYW5uZWxBY3Rpb25zUmVnaXN0ZXJlZHx8KGUuaG9tZUNoYW5uZWxBY3Rpb25zUmVnaXN0ZXJlZD0hMCxlLnJlZ2lzdGVyKGwucmVtb3RlUHJvdmlkZXJEYXRhU3RyZWFtSWQsdiksZS5yZWdpc3RlcihsLnJlbW90ZVNlYXJjaENsb3NlU3RyZWFtSWQseSksZS5yZWdpc3RlcihsLnJlbW90ZVByb3ZpZGVyRGlzcGF0Y2hTdHJlYW1JZCxDKSxlLmFkZERpc2Nvbm5lY3Rpb25MaXN0ZW5lcihtKSl9KHQpLHQuZGlzcGF0Y2gobC5yZW1vdGVQcm92aWRlclJlZ2lzdHJhdGlvblN0cmVhbUlkLHtpZDplLmlkLHRpdGxlOmUudGl0bGUsaWNvbjplLmljb24sY2xpZW50QVBJVmVyc2lvbjpyLnUwLGlkZW50aXR5OmZpbi5tZS5pZGVudGl0eSxzY29yZU9yZGVyOmUuc2NvcmVPcmRlcixjb21tYW5kQ29kZTplLmNvbW1hbmRDb2RlLGRlc2NyaXB0aW9uOmUuZGVzY3JpcHRpb24saGlkZGVuOmUuaGlkZGVuLGxpc3RUaXRsZTplLmxpc3RUaXRsZSxpbnB1dFBsYWNlaG9sZGVyOmUuaW5wdXRQbGFjZWhvbGRlcixsb2dvVXJsOmUubG9nb1VybCxkaXNwYXRjaEZvY3VzRXZlbnRzOmUuZGlzcGF0Y2hGb2N1c0V2ZW50c30pfTt2YXIgeD1uKDI2OTMpLF89bigzNzU4KTtsZXQgTztjb25zdCBMPWFzeW5jIGU9PntpZighZS5pY29uKXRocm93IG5ldyBFcnJvcihgJHtlLmlkfSBwcm92aWRlciBuZWVkcyB0byBoYXZlIGljb24gcHJvcGVydHkgZGVmaW5lZC5gKTsoMCx4LkUpKFwiaG9tZVwiLGEuT0kpO2NvbnN0IHQ9YXdhaXQgYihlKTtyZXR1cm4gTz1uZXcgUHJvbWlzZSgoKG4sYSk9Pnt0cnl7KDAsaS5jaykoe2FsbG93ZWQ6ITAsY29tcG9uZW50VmVyc2lvbjp0Py53b3Jrc3BhY2VWZXJzaW9ufSksci51MCxuKHsuLi50LGNsaWVudEFQSVZlcnNpb246ci51MCxzZXRTZWFyY2hRdWVyeTphc3luYyB0PT4oYXdhaXQoMCxzLnhaKSgpKS5kaXNwYXRjaChcInNldC1zZWFyY2gtcXVlcnlcIix7cXVlcnk6dCxwcm92aWRlcklEOmUuaWR9KX0pfWNhdGNoKGUpeygwLGkuY2spKHthbGxvd2VkOiExLHJlamVjdGlvbkNvZGU6ZSBpbnN0YW5jZW9mIEVycm9yP2UubWVzc2FnZTpcInVua25vd25cIn0pLGEoZSl9ZmluYWxseXtvLloubWFya0VuZEFuZE1lYXN1cmUoXCJob21lLXJlZ2lzdHJhdGlvblwiKX19KSksT30sRT1hc3luYyBlPT57dy5kZWxldGVQcm92aWRlcihlKTtjb25zdCB0PWF3YWl0KDAscy5WRCkoKTthd2FpdCB0LmRpc3BhdGNoKGwucmVtb3RlUHJvdmlkZXJEZXJlZ2lzdHJhdGlvblN0cmVhbUlkLGUpfTthc3luYyBmdW5jdGlvbiBTKCl7by5aLm1hcmtTdGFydChcImhvbWUtc2hvd1wiKSxhd2FpdCBPO2NvbnN0IGU9YXdhaXQoMCxzLnhaKSgpO2F3YWl0IGUuZGlzcGF0Y2goXCJzaG93LWhvbWVcIix2b2lkIDApfWFzeW5jIGZ1bmN0aW9uIGooKXthd2FpdCBPO2NvbnN0IGU9YXdhaXQoMCxzLnhaKSgpO2F3YWl0IGUuZGlzcGF0Y2goXCJoaWRlLWhvbWVcIix2b2lkIDApfX0sMzI2NDooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7bi5kKHQse2xUOigpPT5kfSk7dmFyIHI9L1xcYig/OmFuP2Q/fGFbc3RdfGJlY2F1c2V8YnV0fGJ5fGVufGZvcnxpW2ZuXXxuZWl0aGVyfG5vcnxvW2Zucl18b25seXxvdmVyfHBlcnxzb3xzb21lfHRoYVt0bl18dGhlfHRvfHVwfHVwb258dnM/XFwuP3x2ZXJzdXN8dmlhfHdoZW58d2l0aHx3aXRob3V0fHlldClcXGIvaSxvPS9bXlxcczrigJPigJQtXSt8Li9nLGk9L1xccy8sYT0vLig/PVtBLVpdfFxcLi4pLyxsPS9bQS1aYS16MC05XFx1MDBDMC1cXHUwMEZGXS87ZnVuY3Rpb24gcyhlKXtmb3IodmFyIHQsbj1cIlwiO251bGwhPT0odD1vLmV4ZWMoZSkpOyl7dmFyIHM9dFswXSxjPXQuaW5kZXg7YS50ZXN0KHMpfHxyLnRlc3QocykmJjAhPT1jJiZjK3MubGVuZ3RoIT09ZS5sZW5ndGh8fFwiOlwiPT09ZS5jaGFyQXQoYytzLmxlbmd0aCkmJiFpLnRlc3QoZS5jaGFyQXQoYytzLmxlbmd0aCsxKSk/bis9czpuKz1zLnJlcGxhY2UobCwoZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9VcHBlckNhc2UoKX0pKX1yZXR1cm4gbn1jbGFzcyBjIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSx0KXtjb25zdCBuPXMoZSk7c3VwZXIoYCR7bn0gUHJvdmlkZXIuICR7bn0gUHJvdmlkZXIke3Q/YCB3aXRoIGlkICR7dH1gOlwiXCJ9IGlzIG5vdCBjdXJyZW50bHkgcmVnaXN0ZXJlZC5gKX19Y2xhc3MgdSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUsdCl7Y29uc3Qgbj1zKGUpO3N1cGVyKGAke259IFByb3ZpZGVyLiAke259IFByb3ZpZGVyJHt0P2Agd2l0aCBpZCAke3R9YDpcIlwifSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuIENhbGwgXFxgZGVyZWdpc3RlclxcYCBiZWZvcmUgcmVnaXN0ZXJpbmcgYWdhaW4uYCl9fWNsYXNzIGYgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlLHQpe2NvbnN0IG49cyhlKTtzdXBlcihgRmFpbGVkIHRvIGdldCAke259IFByb3ZpZGVyLiAke259IFByb3ZpZGVyIHdpdGggaWQgJHt0fSBpcyBub3QgY3VycmVudGx5IHJlZ2lzdGVyZWQuYCl9fWNsYXNzIGR7Y29uc3RydWN0b3IoZSl7dGhpcy5wcm92aWRlcnNNYXA9bmV3IE1hcCx0aGlzLnByb3ZpZGVyVHlwZT1lfWFzc2VydE5vdEFscmVhZHlSZWdpc3RlcmVkKGUpe2lmKHRoaXMuaGFzUHJvdmlkZXIoZSkpdGhyb3cgbmV3IHUodGhpcy5wcm92aWRlclR5cGUsZSl9YXNzZXJ0UmVnaXN0ZXJlZChlKXtpZighdGhpcy5oYXNQcm92aWRlcihlKSl0aHJvdyBuZXcgYyh0aGlzLnByb3ZpZGVyVHlwZSxlKX1nZXRQcm92aWRlcihlKXtyZXR1cm4gdGhpcy5wcm92aWRlcnNNYXAuZ2V0KGUpfWhhc1Byb3ZpZGVyKGUpe3JldHVybiB0aGlzLnByb3ZpZGVyc01hcC5oYXMoZSl9c2V0UHJvdmlkZXIoZSl7dGhpcy5wcm92aWRlcnNNYXAuc2V0KGUuaWQsZSl9ZGVsZXRlUHJvdmlkZXIoZSl7dGhpcy5wcm92aWRlcnNNYXAuZGVsZXRlKGUpfWdldFByb3ZpZGVyT3JGYWlsKGUpe2NvbnN0IHQ9dGhpcy5nZXRQcm92aWRlcihlKTtpZighdCl0aHJvdyBuZXcgZih0aGlzLnByb3ZpZGVyVHlwZSxlKTtyZXR1cm4gdH1jbGVhclByb3ZpZGVycygpe3RoaXMucHJvdmlkZXJzTWFwLmNsZWFyKCl9fX0sMTIyMjooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIHIsbyxpO24uZCh0LHtwOigpPT5vLHc6KCk9Pml9KSxmdW5jdGlvbihlKXtlLkZldGNoaW5nPVwiZmV0Y2hpbmdcIixlLkZldGNoZWQ9XCJmZXRjaGVkXCIsZS5Db21wbGV0ZT1cImNvbXBsZXRlXCJ9KHJ8fChyPXt9KSksZnVuY3Rpb24oZSl7ZS5Vc2VyQWN0aW9uPVwidXNlci1hY3Rpb25cIixlLkZvY3VzQ2hhbmdlPVwiZm9jdXMtY2hhbmdlXCIsZS5SZWxvYWQ9XCJyZWxvYWRcIn0ob3x8KG89e30pKSxmdW5jdGlvbihlKXtlLkFjdGl2ZT1cImFjdGl2ZVwiLGUuRGVmYXVsdD1cImRlZmF1bHRcIn0oaXx8KGk9e30pKX0sNzQyNzooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIHI7bi5kKHQse3Y6KCk9PnJ9KSxmdW5jdGlvbihlKXtlLkFjdGlvbkJ1dHRvbj1cIkFjdGlvbkJ1dHRvblwiLGUuRHJvcGRvd25CdXR0b249XCJEcm9wZG93bkJ1dHRvblwifShyfHwocj17fSkpfSwzNzU4OihlLHQsbik9PntcInVzZSBzdHJpY3RcIjt2YXIgcixvLGk7bi5kKHQse1B0OigpPT5yLGVsOigpPT5pLHlXOigpPT5vfSksZnVuY3Rpb24oZSl7ZS5TdWdnZXN0aW9uPVwic3VnZ2VzdGlvblwifShyfHwocj17fSkpLGZ1bmN0aW9uKGUpe2UuQ29udGFjdD1cIkNvbnRhY3RcIixlLkN1c3RvbT1cIkN1c3RvbVwiLGUuTGlzdD1cIkxpc3RcIixlLlBsYWluPVwiUGxhaW5cIixlLlNpbXBsZVRleHQ9XCJTaW1wbGVUZXh0XCIsZS5Mb2FkaW5nPVwiTG9hZGluZ1wiLGUuRXJyb3I9XCJFcnJvclwifShvfHwobz17fSkpLGZ1bmN0aW9uKGUpe2UuTXVsdGlTZWxlY3Q9XCJNdWx0aVNlbGVjdFwifShpfHwoaT17fSkpfSw3NTY0OihlLHQsbik9PntcInVzZSBzdHJpY3RcIjtuKDEyMjIpLG4oMzc1OCksbig2MTE0KSxuKDIxMDkpLG4oNzQyNyl9LDYxMTQ6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO3ZhciByLG87bi5kKHQse0w6KCk9PnIsVDooKT0+b30pLGZ1bmN0aW9uKGUpe2UuU25hcHNob3Q9XCJzbmFwc2hvdFwiLGUuTWFuaWZlc3Q9XCJtYW5pZmVzdFwiLGUuVmlldz1cInZpZXdcIixlLkV4dGVybmFsPVwiZXh0ZXJuYWxcIn0ocnx8KHI9e30pKSxmdW5jdGlvbihlKXtlLkxhbmRpbmdQYWdlPVwibGFuZGluZ1BhZ2VcIixlLkFwcEdyaWQ9XCJhcHBHcmlkXCJ9KG98fChvPXt9KSl9LDIxMDk6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24uZCh0LHtHbzooKT0+byxaSjooKT0+YSxiSTooKT0+aSxwNjooKT0+cn0pO2NvbnN0IHI9e0NvbnRhaW5lcjpcIkNvbnRhaW5lclwiLEJ1dHRvbjpcIkJ1dHRvblwiLFNwbGl0QnV0dG9uOlwiU3BsaXRCdXR0b25cIn0sbz17VGV4dDpcIlRleHRcIixJbWFnZTpcIkltYWdlXCIsTGlzdDpcIkxpc3RcIn0saT17Li4uciwuLi5vfTt2YXIgYTshZnVuY3Rpb24oZSl7ZS5QcmltYXJ5PVwicHJpbWFyeVwiLGUuU2Vjb25kYXJ5PVwic2Vjb25kYXJ5XCIsZS5UZXh0T25seT1cInRleHRPbmx5XCJ9KGF8fChhPXt9KSl9LDI1Mjg6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24ucih0KSxuLmQodCx7QXBwTWFuaWZlc3RUeXBlOigpPT5pLkwsU3RvcmVmcm9udFRlbXBsYXRlOigpPT5pLlQsZGVyZWdpc3RlcjooKT0+QyxoaWRlOigpPT55LHJlZ2lzdGVyOigpPT5tLHNob3c6KCk9Pnd9KTt2YXIgcj1uKDY1MzIpLG89big1MTUwKSxpPW4oNjExNCksYT1uKDY2NzgpLGw9big3Mjc4KSxzPW4oMTIxKSxjPW4oNTQzOCksdT1uKDMyNjQpO2xldCBmPSExO2FzeW5jIGZ1bmN0aW9uIGQoZSx0LG4pe2NvbnN0IHI9YXdhaXQoMCxvLkRtKSgpO3RyeXtyZXR1cm4gYXdhaXQgci5kaXNwYXRjaChlLmFjdGlvbixlLnBheWxvYWQpfWNhdGNoKG8pe2lmKG8gaW5zdGFuY2VvZiBFcnJvciYmLTEhPT1vLnRvU3RyaW5nKCkuaW5kZXhPZihlLmFjdGlvbikpcmV0dXJuIGZ8fGNvbnNvbGUud2FybihcIllvdSBhcmUgdXNpbmcgYSBuZXdlciB2ZXJzaW9uIG9mIHRoZSBXb3Jrc3BhY2UgY2xpZW50IGxpYnJhcnkgdGhhdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50bHkgcnVubmluZyB3b3Jrc3BhY2UgcHJvdmlkZXIuIFBsZWFzZSB1cGdyYWRlIHRoZSBXb3Jrc3BhY2UgdG8gdmVyc2lvbiA5LjAgb3IgbGF0ZXIuXCIpLGY9ITAsYXdhaXQgci5kaXNwYXRjaCh0LmFjdGlvbix0LnBheWxvYWQpLG47dGhyb3cgb319Y29uc3QgcD1uZXcgdS5sVChcInN0b3JlZnJvbnRcIiksaD1hc3luYyBlPT57YXdhaXQoMCxjLkhoKShmaW4ubWUuaWRlbnRpdHkpO2NvbnN0IHQ9YXdhaXQoMCxvLnhaKSgpO3JldHVybiBwLmFzc2VydE5vdEFscmVhZHlSZWdpc3RlcmVkKGUuaWQpLHAuc2V0UHJvdmlkZXIoZSksKGU9PntlLnN0b3JlZnJvbnRDaGFubmVsQWN0aW9uc1JlZ2lzdGVyZWR8fChlLnN0b3JlZnJvbnRDaGFubmVsQWN0aW9uc1JlZ2lzdGVyZWQ9ITAsZS5yZWdpc3RlcihcImdldC1zdG9yZWZyb250LXByb3ZpZGVyLWFwcHNcIiwoZT0+cC5nZXRQcm92aWRlck9yRmFpbChlKS5nZXRBcHBzKCkpKSxlLnJlZ2lzdGVyKFwiZ2V0LXN0b3JlZnJvbnQtcHJvdmlkZXItZm9vdGVyXCIsKGU9PnAuZ2V0UHJvdmlkZXJPckZhaWwoZSkuZ2V0Rm9vdGVyKCkpKSxlLnJlZ2lzdGVyKFwiZ2V0LXN0b3JlZnJvbnQtcHJvdmlkZXItbGFuZGluZy1wYWdlXCIsKGU9PnAuZ2V0UHJvdmlkZXJPckZhaWwoZSkuZ2V0TGFuZGluZ1BhZ2UoKSkpLGUucmVnaXN0ZXIoXCJnZXQtc3RvcmVmcm9udC1wcm92aWRlci1uYXZpZ2F0aW9uXCIsKGU9PnAuZ2V0UHJvdmlkZXJPckZhaWwoZSkuZ2V0TmF2aWdhdGlvbigpKSksZS5yZWdpc3RlcihcImxhdW5jaC1zdG9yZWZyb250LXByb3ZpZGVyLWFwcFwiLCgoe2lkOmUsYXBwOnR9KT0+cC5nZXRQcm92aWRlck9yRmFpbChlKS5sYXVuY2hBcHAodCkpKSl9KSh0KSxlLmNsaWVudEFQSVZlcnNpb249YS51MCxkKHthY3Rpb246XCJyZWdpc3Rlci1wcm92aWRlclwiLHBheWxvYWQ6e3Byb3ZpZGVyVHlwZTpcInN0b3JlZnJvbnRcIixpbmZvOmV9fSx7YWN0aW9uOlwicmVnaXN0ZXItc3RvcmVmcm9udC1wcm92aWRlclwiLHBheWxvYWQ6ZX0se3dvcmtzcGFjZVZlcnNpb246XCJ1bmtub3duXCJ9KX07dmFyIGc9bigyNjkzKTtsZXQgdjtjb25zdCBtPWFzeW5jIGU9PnsoMCxnLkUpKFwic3RvcmVcIixzLm5kKTtjb25zdCB0PWF3YWl0IGgoZSk7cmV0dXJuIHY9bmV3IFByb21pc2UoKChuLGkpPT57dHJ5eygwLHIuZDkpKHthbGxvd2VkOiEwLGNvbXBvbmVudFZlcnNpb246dD8ud29ya3NwYWNlVmVyc2lvbn0pLGEudTAsbih7Y2xpZW50QVBJVmVyc2lvbjphLnUwLHdvcmtzcGFjZVZlcnNpb246dD8ud29ya3NwYWNlVmVyc2lvbj8/XCJcIix1cGRhdGVBcHBDYXJkQnV0dG9uczphc3luYyB0PT57Y29uc3Qgbj1hd2FpdCgwLG8uWGwpKCk7YXdhaXQgbi5kaXNwYXRjaChcInVwZGF0ZS1hcHAtY2FyZC1idXR0b24tY29uZmlnXCIsey4uLnQsaWQ6ZS5pZCx0aXRsZTplLnRpdGxlLGljb246ZS5pY29uLHBsYXRmb3JtSWRlbnRpdHk6ZmluLm1lLmlkZW50aXR5fSl9fSl9Y2F0Y2goZSl7KDAsci5kOSkoe2FsbG93ZWQ6ITEscmVqZWN0aW9uQ29kZTplIGluc3RhbmNlb2YgRXJyb3I/ZS5tZXNzYWdlOlwidW5rbm93blwifSksaShlKX1maW5hbGx5e2wuWi5tYXJrRW5kQW5kTWVhc3VyZShcInN0b3JlLXJlZ2lzdHJhdGlvblwiKX19KSksdn0sQz1hc3luYyBlPT4oYXdhaXQgdixwLmFzc2VydFJlZ2lzdGVyZWQoZSkscC5kZWxldGVQcm92aWRlcihlKSxhd2FpdCgwLG8uYUIpKCksZCh7YWN0aW9uOlwiZGVyZWdpc3Rlci1wcm92aWRlclwiLHBheWxvYWQ6e3Byb3ZpZGVyVHlwZTpcInN0b3JlZnJvbnRcIixpZDplfX0se2FjdGlvbjpcImRlcmVnaXN0ZXItc3RvcmVmcm9udC1wcm92aWRlclwiLHBheWxvYWQ6ZX0pKSx5PWFzeW5jKCk9Pihhd2FpdCB2LGF3YWl0KDAsby5hQikoKSxkKHthY3Rpb246XCJoaWRlLXByb3ZpZGVyLXdpbmRvd1wiLHBheWxvYWQ6e3Byb3ZpZGVyVHlwZTpcInN0b3JlZnJvbnRcIn19LHthY3Rpb246XCJoaWRlLXN0b3JlZnJvbnRcIn0pKSx3PWFzeW5jKCk9PihsLloubWFya1N0YXJ0KFwic3RvcmUtc2hvd1wiKSxhd2FpdCB2LGF3YWl0KDAsby5hQikoKSxkKHthY3Rpb246XCJzaG93LXByb3ZpZGVyLXdpbmRvd1wiLHBheWxvYWQ6e3Byb3ZpZGVyVHlwZTpcInN0b3JlZnJvbnRcIn19LHthY3Rpb246XCJzaG93LXN0b3JlZnJvbnRcIn0pKX0sMzQyMDooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7bi5kKHQse1ZSOigpPT5jLGhkOigpPT5sfSk7dmFyIHI9big4MzExKSxvPW4oNTkxMiksaT1uKDk2MTApLGE9big1MTUwKTthc3luYyBmdW5jdGlvbiBsKCl7cmV0dXJuKGF3YWl0KDAsYS5EbSkoKSkuZGlzcGF0Y2goXCJnZXQtbGVnYWN5LXBhZ2VzXCIsdm9pZCAwKX1jb25zdCBzPWFzeW5jIGU9Pih7Li4uZSxsYXlvdXREZXRhaWxzOnttYWNoaW5lSWQ6YXdhaXQoMCxvLiR3KSgpLG1hY2hpbmVOYW1lOigwLG8uWDUpKCl9fSksYz1hc3luYyBlPT57Y29uc3QgdD1hd2FpdChhc3luYyhlLHQpPT4oe3BhZ2VJZDooMCxpLkgpKCksdGl0bGU6ZSxsYXlvdXQ6YXdhaXQgcyh0KSxpc1JlYWRPbmx5OiExfSkpKGUudGl0bGUsKDAsci5kRykoZS5sYXlvdXQpKTtyZXR1cm4gZS5wYW5lbHMmJih0LnBhbmVscz1lLnBhbmVscy5tYXAoKGU9Pih7Li4uZSx2aWV3T3B0aW9uczooMCxyLlpTKShlLnZpZXdPcHRpb25zKX0pKSkpLHsuLi5lLC4uLnR9fX0sNjQ5NTooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIHI7IWZ1bmN0aW9uKGUpe2UuTGVmdD1cIkxlZnRcIixlLlJpZ2h0PVwiUmlnaHRcIixlLlRvcD1cIlRvcFwiLGUuQm90dG9tPVwiQm90dG9tXCJ9KHJ8fChyPXt9KSl9LDExMjc6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24uZCh0LHtEbTooKT0+YSxiJDooKT0+dSx5ejooKT0+Zn0pO3ZhciByPW4oOTExNyk7bigxMjEpO2NvbnN0IG89KGUsdCk9PnQ/YCR7dH0tJHtlLnV1aWR9LSR7ZS5uYW1lfWA6YF9fYnJvd3Nlcl93aW5kb3dfXy0ke2UudXVpZH0tJHtlLm5hbWV9YCxpPW5ldyBNYXAsYT0oZSx0KT0+e2NvbnN0IG49byhlLHQpO3JldHVybiBpLmhhcyhuKXx8aS5zZXQobiwoMCxyLlopKG4pKSxpLmdldChuKSgpfTt2YXIgbCxzLGMsdTshZnVuY3Rpb24oZSl7ZS5DbG9zZUJyb3dzZXJXaW5kb3c9XCJjbG9zZS1icm93c2VyLXdpbmRvd1wiLGUuUXVpdFBsYXRmb3JtPVwicXVpdC1wbGF0Zm9ybVwiLGUuQ2xvc2VQYWdlPVwiY2xvc2UtcGFnZVwiLGUuQWRkVG9DaGFubmVsPVwiYWRkLXRvLWNoYW5uZWxcIixlLlJlbW92ZUZyb21DaGFubmVsPVwicmVtb3ZlLWZyb20tY2hhbm5lbFwiLGUuT3BlblNhdmVNb2RhbEludGVybmFsPVwib3Blbi1zYXZlLW1vZGFsLWludGVybmFsXCIsZS5EdXBsaWNhdGVQYWdlPVwiZHVwbGljYXRlLXBhZ2VcIixlLlNldFNlbGVjdGVkU2NoZW1lPVwic2V0LXNlbGVjdGVkLXNjaGVtZVwiLGUuU2hvd0Jyb3dzZXJJbmRpY2F0b3I9XCJzaG93LWJyb3dzZXItaW5kaWNhdG9yXCIsZS5TZXRTZWxlY3RlZExhbmd1YWdlPVwic2V0LXNlbGVjdGVkLWxhbmd1YWdlXCIsZS5SZWZyZXNoQm9va21hcmtzSW50ZXJuYWw9XCJyZWZyZXNoLWJvb2ttYXJrc1wifShsfHwobD17fSkpLGZ1bmN0aW9uKGUpe2UuR2V0UGFnZXM9XCJnZXQtcGFnZXNcIixlLkdldEFjdGl2ZVBhZ2VGb3JXaW5kb3c9XCJnZXQtYWN0aXZlLXBhZ2UtZm9yLXdpbmRvd1wiLGUuQXR0YWNoUGFnZXNUb1dpbmRvdz1cImF0dGFjaC1wYWdlcy10by13aW5kb3dcIixlLkRldGFjaFBhZ2VzRnJvbVdpbmRvdz1cImRldGFjaC1wYWdlcy1mcm9tLXdpbmRvd1wiLGUuU2V0QWN0aXZlUGFnZUZvcldpbmRvdz1cInNldC1hY3RpdmUtcGFnZS1mb3Itd2luZG93XCIsZS5SZW5hbWVQYWdlPVwicmVuYW1lLXBhZ2VcIixlLlJlb3JkZXJQYWdlc0ZvcldpbmRvdz1cInJlb3JkZXItcGFnZXMtZm9yLXdpbmRvd1wiLGUuVXBkYXRlUGFnZUZvcldpbmRvdz1cInVwZGF0ZS1wYWdlLWZvci13aW5kb3dcIixlLlVwZGF0ZVBhZ2VzV2luZG93T3B0aW9ucz1cInVwZGF0ZS1wYWdlcy13aW5kb3ctb3B0aW9uc1wiLGUuSXNEZXRhY2hpbmdQYWdlcz1cImlzLWRldGFjaGluZy1wYWdlc1wiLGUuSXNBY3RpdmVQYWdlQ2hhbmdpbmc9XCJpcy1hY3RpdmUtcGFnZS1jaGFuZ2luZ1wifShzfHwocz17fSkpLGZ1bmN0aW9uKGUpe2UuR2V0QXBwcz1cImdldC1hcHBzXCIsZS5HZXRDdXJhdGVkQ29udGVudD1cImdldC1jdXJhdGVkLWNvbnRlbnRcIixlLkdldFJlY2VudGx5VmlzaXRlZD1cImdldC1yZWNlbnRseS12aXNpdGVkXCJ9KGN8fChjPXt9KSksZnVuY3Rpb24oZSl7ZS5DcmVhdGVCb29rbWFya05vZGU9XCJjcmVhdGUtYm9va21hcmstbm9kZVwiLGUuR2V0Qm9va21hcmtOb2RlPVwiZ2V0LWJvb2ttYXJrLW5vZGVcIixlLlNlYXJjaEJvb2ttYXJrTm9kZXM9XCJzZWFyY2gtYm9va21hcmstbm9kZXNcIixlLlVwZGF0ZUJvb2ttYXJrTm9kZT1cInVwZGF0ZS1ib29rbWFyay1ub2RlXCIsZS5EZWxldGVCb29rbWFya05vZGU9XCJkZWxldGUtYm9va21hcmstbm9kZVwifSh1fHwodT17fSkpO2NvbnN0IGY9ey4uLmwsLi4uc319LDU0Mzg6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO3ZhciByO24uZCh0LHtIaDooKT0+aSxmbjooKT0+cixqNzooKT0+YSx4cDooKT0+bH0pLGZ1bmN0aW9uKGUpe2UuTGF1bmNoQXBwPVwibGF1bmNoQXBwXCIsZS5TYXZlUGFnZT1cInNhdmVQYWdlXCIsZS5HZXRTYXZlZFBhZ2U9XCJnZXRTYXZlZFBhZ2VcIixlLkNyZWF0ZVNhdmVkUGFnZT1cImNyZWF0ZVNhdmVkUGFnZVwiLGUuVXBkYXRlU2F2ZWRQYWdlPVwidXBkYXRlU2F2ZWRQYWdlXCIsZS5EZWxldGVTYXZlZFBhZ2U9XCJkZWxldGVTYXZlZFBhZ2VcIixlLkdldFNhdmVkUGFnZXM9XCJnZXRTYXZlZFBhZ2VzXCIsZS5DcmVhdGVTYXZlZFBhZ2VJbnRlcm5hbD1cImNyZWF0ZVNhdmVkUGFnZUludGVybmFsXCIsZS5VcGRhdGVTYXZlZFBhZ2VJbnRlcm5hbD1cInVwZGF0ZVNhdmVkUGFnZUludGVybmFsXCIsZS5EZWxldGVTYXZlZFBhZ2VJbnRlcm5hbD1cImRlbGV0ZVNhdmVkUGFnZUludGVybmFsXCIsZS5VcGRhdGVQYWdlRm9yV2luZG93PVwidXBkYXRlUGFnZUZvcldpbmRvd1wiLGUuQXR0YWNoUGFnZXNUb1dpbmRvdz1cImF0dGFjaFBhZ2VzVG9XaW5kb3dcIixlLkRldGFjaFBhZ2VzRnJvbVdpbmRvdz1cImRldGFjaFBhZ2VzRnJvbVdpbmRvd1wiLGUuUmVvcmRlclBhZ2VzRm9yV2luZG93PVwicmVvcmRlclBhZ2VzRm9yV2luZG93XCIsZS5TZXRBY3RpdmVQYWdlPVwic2V0QWN0aXZlUGFnZVwiLGUuQWRkUGFnZT1cImFkZFBhZ2VcIixlLkFkZERlZmF1bHRQYWdlPVwiYWRkRGVmYXVsdFBhZ2VcIixlLkdldEFsbEF0dGFjaGVkUGFnZXM9XCJnZXRBbGxBdHRhY2hlZFBhZ2VzXCIsZS5HZXRBY3RpdmVQYWdlSWRGb3JXaW5kb3c9XCJnZXRBY3RpdmVQYWdlSWRGb3JXaW5kb3dcIixlLkdldFBhZ2VzRm9yV2luZG93PVwiZ2V0UGFnZXNGb3JXaW5kb3dcIixlLkdldFBhZ2VGb3JXaW5kb3c9XCJnZXRQYWdlRm9yV2luZG93XCIsZS5HZXRTYXZlZFBhZ2VNZXRhZGF0YT1cImdldFNhdmVkUGFnZU1ldGFkYXRhXCIsZS5HZXRVbmlxdWVQYWdlVGl0bGU9XCJnZXRVbmlxdWVQYWdlVGl0bGVcIixlLkdldExhc3RGb2N1c2VkQnJvd3NlcldpbmRvdz1cImdldExhc3RGb2N1c2VkQnJvd3NlcldpbmRvd1wiLGUuR2V0VGhlbWVzPVwiZ2V0VGhlbWVzXCIsZS5HZXRTZWxlY3RlZFNjaGVtZT1cImdldFNlbGVjdGVkU2NoZW1lXCIsZS5TZXRTZWxlY3RlZFNjaGVtZT1cInNldFNlbGVjdGVkU2NoZW1lXCIsZS5PcGVuR2xvYmFsQ29udGV4dE1lbnVJbnRlcm5hbD1cIm9wZW5HbG9iYWxDb250ZXh0TWVudUludGVybmFsXCIsZS5PcGVuVmlld1RhYkNvbnRleHRNZW51SW50ZXJuYWw9XCJvcGVuVmlld1RhYkNvbnRleHRNZW51SW50ZXJuYWxcIixlLk9wZW5QYWdlVGFiQ29udGV4dE1lbnVJbnRlcm5hbD1cIm9wZW5QYWdlVGFiQ29udGV4dE1lbnVJbnRlcm5hbFwiLGUuT3BlblNhdmVCdXR0b25Db250ZXh0TWVudUludGVybmFsPVwib3BlblNhdmVCdXR0b25Db250ZXh0TWVudUludGVybmFsXCIsZS5JbnZva2VDdXN0b21BY3Rpb25JbnRlcm5hbD1cImludm9rZUN1c3RvbUFjdGlvbkludGVybmFsXCIsZS5SZXF1ZXN0UXVpdFBsYXRmb3JtRGlhbG9nSW50ZXJuYWw9XCJyZXF1ZXN0UXVpdFBsYXRmb3JtRGlhbG9nSW50ZXJuYWxcIixlLkdldFNhdmVkV29ya3NwYWNlPVwiZ2V0U2F2ZWRXb3Jrc3BhY2VcIixlLkNyZWF0ZVNhdmVkV29ya3NwYWNlPVwiY3JlYXRlU2F2ZWRXb3Jrc3BhY2VcIixlLlVwZGF0ZVNhdmVkV29ya3NwYWNlPVwidXBkYXRlU2F2ZWRXb3Jrc3BhY2VcIixlLkRlbGV0ZVNhdmVkV29ya3NwYWNlPVwiZGVsZXRlU2F2ZWRXb3Jrc3BhY2VcIixlLkdldFNhdmVkV29ya3NwYWNlcz1cImdldFNhdmVkV29ya3NwYWNlc1wiLGUuU2F2ZVdvcmtzcGFjZT1cInNhdmVXb3Jrc3BhY2VcIixlLkdldEN1cnJlbnRXb3Jrc3BhY2U9XCJnZXRDdXJyZW50V29ya3NwYWNlXCIsZS5BcHBseVdvcmtzcGFjZT1cImFwcGx5V29ya3NwYWNlXCIsZS5TZXRBY3RpdmVXb3Jrc3BhY2U9XCJzZXRBY3RpdmVXb3Jrc3BhY2VcIixlLklzQnJvd3NlckluaXRpYWxpemVkPVwiaXNCcm93c2VySW5pdGlhbGl6ZWRcIixlLkFuYWx5dGljcz1cImFuYWx5dGljc0ludGVybmFsXCIsZS5HZXRMYW5ndWFnZT1cImdldExhbmd1YWdlXCIsZS5HZXRMYW5ndWFnZVJlc291cmNlc0ludGVybmFsPVwiZ2V0TGFuZ3VhZ2VSZXNvdXJjZXNJbnRlcm5hbFwiLGUuU2V0TGFuZ3VhZ2U9XCJzZXRMYW5ndWFnZVwiLGUuR2V0RG9ja1Byb3ZpZGVyQ29uZmlnPVwiZ2V0RG9ja1Byb3ZpZGVyQ29uZmlnXCIsZS5TYXZlRG9ja1Byb3ZpZGVyQ29uZmlnPVwic2F2ZURvY2tQcm92aWRlckNvbmZpZ1wiLGUuSGFuZGxlU2F2ZU1vZGFsT25QYWdlQ2xvc2U9XCJoYW5kbGVTYXZlTW9kYWxPblBhZ2VDbG9zZVwiLGUuU2hvdWxkUGFnZUNsb3NlPVwic2hvdWxkUGFnZUNsb3NlXCIsZS5TaG91bGRXaW5kb3dDbG9zZT1cInNob3VsZFdpbmRvd0Nsb3NlXCIsZS5Db3B5UGFnZT1cImNvcHlQYWdlXCIsZS5IYW5kbGVQYWdlQ2hhbmdlcz1cImhhbmRsZVBhZ2VDaGFuZ2VzXCIsZS5NYXJrVW5zYXZlZFBhZ2VzQXNTYXZlZEludGVybmFsPVwibWFya1Vuc2F2ZWRQYWdlc0FzU2F2ZWRJbnRlcm5hbFwiLGUuVHJhY2tSZW1vdmVkVGFiSW50ZXJuYWw9XCJ0cmFja1JlbW92ZWRUYWJJbnRlcm5hbFwiLGUuUmVzdG9yZVJlbW92ZWRUYWJJbnRlcm5hbD1cInJlc3RvcmVSZW1vdmVkVGFiSW50ZXJuYWxcIixlLlRyYWNrVmlzaXRlZFNpdGVJbnRlcm5hbD1cInRyYWNrVmlzaXRlZFNpdGVJbnRlcm5hbFwiLGUuR2V0UmVjZW50bHlWaXNpdGVkU2l0ZXNJbnRlcm5hbD1cImdldFJlY2VudGx5VmlzaXRlZFNpdGVzSW50ZXJuYWxcIixlLkdldEZyZXF1ZW50bHlWaXNpdGVkU2l0ZXNJbnRlcm5hbD1cImdldEZyZXF1ZW50bHlWaXNpdGVkU2l0ZXNJbnRlcm5hbFwiLGUuU2VhcmNoU2l0ZXNJbnRlcm5hbD1cInNlYXJjaFNpdGVzSW50ZXJuYWxcIixlLkdldEN1cmF0ZWRDb250ZW50SW50ZXJuYWw9XCJnZXRDdXJhdGVkQ29udGVudEludGVybmFsXCIsZS5IYW5kbGVSZXF1ZXN0TmF2aWdhdGlvbkludGVybmFsPVwiaGFuZGxlUmVxdWVzdE5hdmlnYXRpb25JbnRlcm5hbFwiLGUuUmVmcmVzaEJvb2ttYXJrc0ludGVybmFsPVwicmVmcmVzaEJvb2ttYXJrc0ludGVybmFsXCIsZS5HZXROb3RpZmljYXRpb25zQ29uZmlnPVwiZ2V0Tm90aWZpY2F0aW9uc0NvbmZpZ1wifShyfHwocj17fSkpO2NvbnN0IG89YXN5bmMgZT0+ZmluLlBsYXRmb3JtLndyYXBTeW5jKGUpLmdldENsaWVudCgpLGk9YXN5bmMgZT0+e2NvbnN0IHQ9YXdhaXQgbyhlKSxuPVwiVGFyZ2V0IGlzIG5vdCBhIFdvcmtzcGFjZSBQbGF0Zm9ybS4gVGFyZ2V0IG11c3QgY2FsbCBXb3Jrc3BhY2VQbGF0Zm9ybS5pbml0XCI7bGV0IHI7dHJ5e3I9YXdhaXQgdC5kaXNwYXRjaChcImlzV29ya3NwYWNlUGxhdGZvcm1cIil9Y2F0Y2goZSl7dGhyb3cgbmV3IEVycm9yKG4pfWlmKFwiYm9vbGVhblwiPT10eXBlb2YgciYmcilyZXR1cm4gY29uc29sZS53YXJuKFwiWW91IGFyZSB1c2luZyBhbiBvbGRlciB2ZXJzaW9uIG9mIHRoZSB3b3Jrc3BhY2UgcGxhdGZvcm0uIFBsZWFzZSB1cGRhdGUgeW91ciB3b3Jrc3BhY2UgcGxhdGZvcm0uXCIpLHI7aWYoXCJvYmplY3RcIj09dHlwZW9mIHImJnIuaXNXb3Jrc3BhY2VQbGF0Zm9ybSlyZXR1cm4gcjt0aHJvdyBuZXcgRXJyb3Iobil9LGE9YXN5bmMgZT0+KGF3YWl0IGkoZSksbyhlKSksbD1hc3luYyBlPT57Y29uc3QgdD1hd2FpdCBpKGUpO2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0JiYhMCE9PXQ/LmlzQnJvd3NlckluaXRpYWxpemVkKXRocm93IG5ldyBFcnJvcihcIlRhcmdldCBpcyBub3QgYSBCcm93c2VyLWVuYWJsZWQgV29ya3NwYWNlIFBsYXRmb3JtLlwiKTtyZXR1cm4gbyhlKX19LDUxNTA6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24uZCh0LHtEbTooKT0+cyxWRDooKT0+dSxYbDooKT0+cCxhQjooKT0+ZCx4WjooKT0+aH0pO3ZhciByPW4oOTExNyksbz1uKDY2NzgpLGk9bigxMjEpLGE9big3MDQ2KTtjb25zdCBsPSgwLHIuWikoXCJfX29mX3dvcmtzcGFjZV9wcm90b2NvbF9fXCIpLHM9bCxjPWwsdT0oMCxyLlopKGEuUXgpLGY9ZT0+e2NvbnN0IHQ9bmV3IFVSTChlKTtyZXR1cm4gdC5zZWFyY2hQYXJhbXMuYXBwZW5kKFwiaXNMYXVuY2hlZFZpYUxpYlwiLFwidHJ1ZVwiKSx0LnRvU3RyaW5nKCl9LGQ9YXN5bmMoKT0+e2lmKCFhd2FpdCgwLGkuSlYpKGkuaVcpKXtpZihvLlpLfHwtMT09PW5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZihcIldpblwiKSlyZXR1cm4gdm9pZCBhd2FpdCBmaW4uQXBwbGljYXRpb24uc3RhcnRGcm9tTWFuaWZlc3QoZihvLmFXKSk7YXdhaXQgZmluLlN5c3RlbS5vcGVuVXJsV2l0aEJyb3dzZXIoZihvLkdYKSl9fSxwPWFzeW5jKCk9Pihhd2FpdCBkKCkscygpKSxoPWFzeW5jKCk9Pihhd2FpdCBkKCksYygpKX0sNzA0NjooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7bi5kKHQse1F4OigpPT5yLHcxOigpPT5pfSk7Y29uc3Qgcj1cIl9fc2VhcmNoLW9wZW5maW4tYnJvd3Nlci1ob21lLXRvcGljX19cIjt2YXIgbyxpOyFmdW5jdGlvbihlKXtlLkZldGNoaW5nPVwiZmV0Y2hpbmdcIixlLkZldGNoZWQ9XCJmZXRjaGVkXCIsZS5Db21wbGV0ZT1cImNvbXBsZXRlXCJ9KG98fChvPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkluaXRpYWw9MF09XCJJbml0aWFsXCIsZVtlLk9wZW49MV09XCJPcGVuXCIsZVtlLkNsb3NlPTJdPVwiQ2xvc2VcIn0oaXx8KGk9e30pKX0sMTY0NjooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7bi5kKHQse2U6KCk9Pm99KTt2YXIgcj1uKDg0MjMpO2NvbnN0IG89ZT0+e2NvbnN0IHQ9ZmluLlBsYXRmb3JtLkxheW91dC53cmFwU3luYyhlKTtyZXR1cm57c2hvdzphc3luYygpPT57Y29uc3Qgbj1hd2FpdCB0LmdldENvbmZpZygpLHtzZXR0aW5nczpvLGRpbWVuc2lvbnM6aX09bixhPWF3YWl0KDAsci5ZUSkoZSk7YXdhaXQgdC5yZXBsYWNlKHsuLi5uLHNldHRpbmdzOnsuLi5vLGhhc0hlYWRlcnM6ITAscmVvcmRlckVuYWJsZWQ6ITB9LGRpbWVuc2lvbnM6ey4uLmksaGVhZGVySGVpZ2h0OmE/Mjg6MzB9fSl9LGhpZGU6YXN5bmMgZT0+e2NvbnN0IG49YXdhaXQgdC5nZXRDb25maWcoKSx7c2V0dGluZ3M6cixkaW1lbnNpb25zOm99PWF3YWl0IG47YXdhaXQgdC5yZXBsYWNlKHsuLi5uLHNldHRpbmdzOnsuLi5yLGhhc0hlYWRlcnM6ITEscmVvcmRlckVuYWJsZWQ6ZT8uc2V0dGluZ3M/LnJlb3JkZXJFbmFibGVkPz8hMX0sZGltZW5zaW9uczp7Li4ubyxoZWFkZXJIZWlnaHQ6MH19KX0saXNTaG93aW5nVGFiczphc3luYygpPT57dHJ5e2NvbnN0IGU9YXdhaXQgdC5nZXRDb25maWcoKSx7c2V0dGluZ3M6bn09YXdhaXQgZTtyZXR1cm4gbi5oYXNIZWFkZXJzfWNhdGNoKGUpe3JldHVybiBjb25zb2xlLmVycm9yKFwiZmFpbGVkIHRvIGdldCBsYXlvdXQgY29uZmlnOiBcIixlKSwhMH19fX19LDEwNjU6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO3ZhciByPW4oNTMwNCk7bigxMjEpLG4oODYzNiksbig3MTAwKSxuKDUxNTApLG4oNTQzOCk7Y29uc3Qgbz17W3IuUGFsZXR0ZS5icmFuZFByaW1hcnldOlwiIzBBNzZEM1wiLFtyLlBhbGV0dGUuc3RhdHVzU3VjY2Vzc106ci5Db2xvci5mdW5jdGlvbmFsMSxbci5QYWxldHRlLnN0YXR1c1dhcm5pbmddOnIuQ29sb3IuZnVuY3Rpb25hbDEwLFtyLlBhbGV0dGUuc3RhdHVzQ3JpdGljYWxdOnIuQ29sb3IuZnVuY3Rpb25hbDcsW3IuUGFsZXR0ZS5zdGF0dXNBY3RpdmVdOnIuQ29sb3IuZnVuY3Rpb25hbDMsW3IuUGFsZXR0ZS5jb250ZW50QmFja2dyb3VuZDFdOlwiIzBBNzZEM1wiLFtyLlBhbGV0dGUuY29udGVudEJhY2tncm91bmQyXTpcIiMwMDAwMDBcIixbci5QYWxldHRlLmNvbnRlbnRCYWNrZ3JvdW5kM106XCIjMDAwMDAwXCIsW3IuUGFsZXR0ZS5jb250ZW50QmFja2dyb3VuZDRdOlwiIzAwMDAwMFwiLFtyLlBhbGV0dGUuY29udGVudEJhY2tncm91bmQ1XTpcIiMwMDAwMDBcIn0saT17Li4ubyxbci5QYWxldHRlLmJhY2tncm91bmQxXTpyLkNvbG9yLndoaXRlLFtyLlBhbGV0dGUuYmFja2dyb3VuZDJdOnIuQ29sb3IubGlnaHRHcmF5MSxbci5QYWxldHRlLmJhY2tncm91bmQzXTpyLkNvbG9yLmxpZ2h0R3JheTIsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kNF06ci5Db2xvci5saWdodEdyYXkzLFtyLlBhbGV0dGUuYmFja2dyb3VuZDVdOnIuQ29sb3IubGlnaHRHcmF5NCxbci5QYWxldHRlLmJhY2tncm91bmQ2XTpyLkNvbG9yLmxpZ2h0R3JheTUsW3IuUGFsZXR0ZS5icmFuZFNlY29uZGFyeV06ci5Db2xvci5saWdodEdyYXk0LFtyLlBhbGV0dGUuaW5wdXRCYWNrZ3JvdW5kXTpyLkNvbG9yLmxpZ2h0R3JheTMsW3IuUGFsZXR0ZS5pbnB1dENvbG9yXTpyLkNvbG9yLmRhcmtHcmF5NSxbci5QYWxldHRlLmlucHV0UGxhY2Vob2xkZXJdOnIuQ29sb3IuZGFya0dyYXkyLFtyLlBhbGV0dGUuaW5wdXREaXNhYmxlZF06ci5Db2xvci5uZXV0cmFsR3JheSxbci5QYWxldHRlLmlucHV0Rm9jdXNlZF06ci5Db2xvci5saWdodEdyYXk1LFtyLlBhbGV0dGUuaW5wdXRCb3JkZXJdOnIuQ29sb3IubmV1dHJhbEdyYXksW3IuUGFsZXR0ZS50ZXh0RGVmYXVsdF06ci5Db2xvci5kYXJrR3JheTUsW3IuUGFsZXR0ZS50ZXh0SGVscF06ci5Db2xvci5kYXJrR3JheTMsW3IuUGFsZXR0ZS50ZXh0SW5hY3RpdmVdOnIuQ29sb3IubmV1dHJhbEdyYXl9LGE9ey4uLm8sW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kMV06ci5Db2xvci5kYXJrR3JheTYsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kMl06ci5Db2xvci5kYXJrR3JheTUsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kM106ci5Db2xvci5kYXJrR3JheTQsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kNF06ci5Db2xvci5kYXJrR3JheTMsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kNV06ci5Db2xvci5kYXJrR3JheTIsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kNl06ci5Db2xvci5kYXJrR3JheTEsW3IuUGFsZXR0ZS5icmFuZFNlY29uZGFyeV06ci5Db2xvci5kYXJrR3JheTIsW3IuUGFsZXR0ZS5pbnB1dEJhY2tncm91bmRdOnIuQ29sb3IuZGFya0dyYXkxLFtyLlBhbGV0dGUuaW5wdXRDb2xvcl06ci5Db2xvci53aGl0ZSxbci5QYWxldHRlLmlucHV0UGxhY2Vob2xkZXJdOnIuQ29sb3IubGlnaHRHcmF5NSxbci5QYWxldHRlLmlucHV0RGlzYWJsZWRdOnIuQ29sb3IubmV1dHJhbEdyYXksW3IuUGFsZXR0ZS5pbnB1dEZvY3VzZWRdOnIuQ29sb3IubGlnaHRHcmF5NSxbci5QYWxldHRlLmlucHV0Qm9yZGVyXTpyLkNvbG9yLm5ldXRyYWxHcmF5LFtyLlBhbGV0dGUudGV4dERlZmF1bHRdOnIuQ29sb3Iud2hpdGUsW3IuUGFsZXR0ZS50ZXh0SGVscF06ci5Db2xvci5saWdodEdyYXk1LFtyLlBhbGV0dGUudGV4dEluYWN0aXZlXTpyLkNvbG9yLm5ldXRyYWxHcmF5fTtyLkNvbG9yLmxpZ2h0R3JheTQsci5Db2xvci5kYXJrR3JheTUsci5Db2xvci5kYXJrR3JheTIsci5Db2xvci5kYXJrR3JheTV9LDU4MDY6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24uZCh0LHtEOTooKT0+YyxUWjooKT0+dSxxOTooKT0+cn0pO3ZhciByLG8saT1uKDY2NzgpOyFmdW5jdGlvbihlKXtlLldvcmtzcGFjZT1cIm9wZW5maW4td29ya3NwYWNlXCIsZS5PbGRXb3Jrc3BhY2U9XCJvcGVuZmluLWJyb3dzZXJcIn0ocnx8KHI9e30pKSxmdW5jdGlvbihlKXtlLkZpblByb3RvY29sPVwiZmluLXByb3RvY29sXCJ9KG98fChvPXt9KSk7Y29uc3QgYT17dXVpZDppLkFCfSxsPXt1dWlkOnIuV29ya3NwYWNlfSxzPWU9PntpZighaS5zUyl0aHJvdyBuZXcgRXJyb3IoXCJnZXRBcHBsaWNhdGlvbiBjYW5ub3QgYmUgdXNlZCBpbiBhIG5vbiBPcGVuRmluIGVudi4gQXZvaWQgdXNpbmcgdGhpcyBkdXJpbmcgcHJlLXJlbmRlcmluZy5cIik7cmV0dXJuIGZpbi5BcHBsaWNhdGlvbi53cmFwU3luYyhlKX0sYz0oKT0+cyhhKSx1PSgpPT5zKGwpfSw5MTE3OihlLHQsbik9PntcInVzZSBzdHJpY3RcIjtuLmQodCx7WjooKT0+aX0pO3ZhciByPW4oNjY3OCk7Y29uc3Qgbz1yLkF4JiZcImNvbXBsZXRlXCIhPT1kb2N1bWVudC5yZWFkeVN0YXRlJiZuZXcgUHJvbWlzZSgoZT0+ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInJlYWR5c3RhdGVjaGFuZ2VcIiwoKCk9PntcImNvbXBsZXRlXCI9PT1kb2N1bWVudC5yZWFkeVN0YXRlJiZlKCl9KSkpKTtmdW5jdGlvbiBpKGUpe2xldCB0O2NvbnN0IG49bmV3IFNldDtyZXR1cm4oKT0+e2lmKCFyLnNTKXRocm93IG5ldyBFcnJvcihcImdldENoYW5uZWxDbGllbnQgY2Fubm90IGJlIHVzZWQgb3V0c2lkZSBhbiBPcGVuRmluIGVudi4gQXZvaWQgdXNpbmcgdGhpcyBtZXRob2QgZHVyaW5nIHByZS1yZW5kZXJpbmcuXCIpO3JldHVybiB0fHwodD0oYXN5bmMoKT0+e2F3YWl0IG87Y29uc3QgaT17Y2xpZW50QVBJVmVyc2lvbjpyLnUwfSxhPWF3YWl0IGZpbi5JbnRlckFwcGxpY2F0aW9uQnVzLkNoYW5uZWwuY29ubmVjdChlLHtwYXlsb2FkOml9KTtyZXR1cm4gYS5vbkRpc2Nvbm5lY3Rpb24oKGFzeW5jKCk9PntuLmZvckVhY2goKGU9PmUoKSkpLG4uY2xlYXIoKSxjb25zb2xlLndhcm4oYGRpc2Nvbm5lY3RlZCBmcm9tIGNoYW5uZWwgcHJvdmlkZXIgJHtlfWApLHQ9dm9pZCAwfSkpLGF9KSgpLnRoZW4oKGU9PihlLmFkZERpc2Nvbm5lY3Rpb25MaXN0ZW5lcj1lPT57bi5hZGQoZSl9LGUpKSkuY2F0Y2goKG49Pnt0aHJvdyB0PXZvaWQgMCxuZXcgRXJyb3IoYGZhaWxlZCB0byBjb25uZWN0IHRvIGNoYW5uZWwgcHJvdmlkZXIgJHtlfTogJHtufWApfSkpKSx0fX19LDg0MjM6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24uZCh0LHtZUTooKT0+cn0pO24oNjAwNSksbigxMjEpO2NvbnN0IHI9YXN5bmMgZT0+e2NvbnN0IHQ9ZT9maW4uV2luZG93LndyYXBTeW5jKGUpOmZpbi5XaW5kb3cuZ2V0Q3VycmVudFN5bmMoKSxuPWF3YWl0IHQuZ2V0T3B0aW9ucygpO3JldHVybiBuLndvcmtzcGFjZVBsYXRmb3JtPy53aW5kb3dUeXBlJiZcImVudGVycHJpc2VcIj09PW4ud29ya3NwYWNlUGxhdGZvcm0ud2luZG93VHlwZX19LDY2Nzg6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO3ZhciByO24uZCh0LHtBQjooKT0+cyxBeDooKT0+aSxDTDooKT0+dSxHWDooKT0+ZCxaSzooKT0+ZixfVjooKT0+YSxhVzooKT0+cCxvQzooKT0+YyxyeDooKT0+ZyxzUzooKT0+byx1MDooKT0+dn0pLGZ1bmN0aW9uKGUpe2UuTG9jYWw9XCJsb2NhbFwiLGUuRGV2PVwiZGV2XCIsZS5TdGFnaW5nPVwic3RhZ2luZ1wiLGUuUHJvZD1cInByb2RcIn0ocnx8KHI9e30pKTtjb25zdCBvPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBmaW4saT0oXCJ1bmRlZmluZWRcIj09dHlwZW9mIHByb2Nlc3N8fHByb2Nlc3MuZW52LFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cpLGE9aSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGluZGV4ZWREQixsPWk/d2luZG93Lm9yaWdpbjpyLkxvY2FsLHM9byYmZmluLm1lLnV1aWQsYz1vJiZmaW4ubWUubmFtZSx1PW8mJmZpbi5tZS5lbnRpdHlUeXBlLGY9XCJwcm9kXCI9PT1yLkxvY2FsLGQ9KHIuRGV2LHIuU3RhZ2luZyxyLlByb2QsXCJmaW5zOi8vc3lzdGVtLWFwcHMvd29ya3NwYWNlXCIpLHA9XCJodHRwczovL3dvcmtzcGFjZS5vcGVuZmluLmNvL3dvcmtzcGFjZS8yMC4xLjUvYXBwLmpzb25cIixoPWU9PmUuc3RhcnRzV2l0aChcImh0dHA6Ly9cIil8fGUuc3RhcnRzV2l0aChcImh0dHBzOi8vXCIpP2U6bCtlLGc9KGgoXCJodHRwczovL3dvcmtzcGFjZS5vcGVuZmluLmNvL3dvcmtzcGFjZS8yMC4xLjVcIiksaChcImh0dHBzOi8vd29ya3NwYWNlLm9wZW5maW4uY28vd29ya3NwYWNlLzIwLjEuNVwiKSksdj0oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFdPUktTUEFDRV9ET0NTX1BMQVRGT1JNX1VSTCYmaChXT1JLU1BBQ0VfRE9DU19QTEFURk9STV9VUkwpLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBXT1JLU1BBQ0VfRE9DU19DTElFTlRfVVJMJiZoKFdPUktTUEFDRV9ET0NTX0NMSUVOVF9VUkwpLFwiMjAuMS41XCIpO1widW5kZWZpbmVkXCIhPXR5cGVvZiBXT1JLU1BBQ0VfQlVJTERfU0hBJiZXT1JLU1BBQ0VfQlVJTERfU0hBfSw4MzExOihlLHQsbik9PntcInVzZSBzdHJpY3RcIjtuLmQodCx7WlM6KCk9PnUsZEc6KCk9PmZ9KTt2YXIgcj1uKDMxOTgpLG89bi5uKHIpLGk9KG4oNjY3OCksbigzNDIwKSksYT1uKDE2NDYpLGw9bigzOTI2KSxzPShuKDcwOTgpLG4oMTIxKSk7Y29uc3QgYz0oZSx0KT0+ZS5jb250ZW50P3suLi5lLGNvbnRlbnQ6ZS5jb250ZW50Lm1hcCgoZT0+YyhlLHQpKSl9OnsuLi5lLGNvbXBvbmVudFN0YXRlOnQoZS5jb21wb25lbnRTdGF0ZSl9LHU9ZT0+KHsuLi5lLG5hbWU6dm9pZCAwfSksZj1lPT57Y29uc3QgdD17Li4uZX07cmV0dXJuIGModCx1KX0sZD1lPT57Y29uc3QgdD1bXTtyZXR1cm4oZSYmQXJyYXkuaXNBcnJheShlKT9lOltdKS5mb3JFYWNoKChlPT57aWYoXCJjb21wb25lbnRcIj09PWUudHlwZSlyZXR1cm4gdC5wdXNoKGUuY29tcG9uZW50U3RhdGUpO2NvbnN0IG49ZChlLmNvbnRlbnQpO3QucHVzaCguLi5uKX0pKSx0fTtuZXcgTWFwLG5ldyBNYXA7bygpKChhc3luYyBlPT57dHJ5e2NvbnN0IHQ9YXdhaXQoYXN5bmMgZT0+ZmluLlBsYXRmb3JtLkxheW91dC53cmFwU3luYyh7Li4uZmluLm1lLmlkZW50aXR5LGxheW91dE5hbWU6ZX0pLmdldENvbmZpZygpKShlLmxheW91dENvbnRhaW5lcktleSksbj10LmNvbnRlbnQ/ZCh0LmNvbnRlbnQpOltdLHI9bi5sZW5ndGg7cj4xPyhlPT57XCJtdWx0aVZpZXdcIiE9PWUuYXR0YWNoZWRQYWdlVHlwZSYmKDAsbC5hKSgpLkJyb3dzZXIud3JhcFN5bmMocy5HaSkudXBkYXRlUGFnZSh7cGFnZUlkOmUucGFnZUlkLHBhZ2U6e3NpbmdsZVZpZXdOYW1lOm51bGwsYXR0YWNoZWRQYWdlVHlwZTpcIm11bHRpVmlld1wifX0pfSkoZSk6MT09PXImJihhc3luYyhlLHQpPT57Y29uc3Qgbj0oMCxsLmEpKCkuQnJvd3Nlci53cmFwU3luYyhzLkdpKTtpZihcInNpbmdsZVZpZXdcIiE9PWUuYXR0YWNoZWRQYWdlVHlwZSl7Y29uc3Qgcj1hd2FpdCgwLGkuVlIpKGUpLG89YXdhaXQoMCxsLmEpKCkuQnJvd3Nlci5nZXRVbmlxdWVQYWdlVGl0bGUoKTtkZWxldGUgci5sYXlvdXQ7Y29uc3QgYT17Li4ucixzaW5nbGVWaWV3TmFtZTp0LHRpdGxlOm8saGFzVW5zYXZlZENoYW5nZXM6ITEsYXR0YWNoZWRQYWdlVHlwZTpcInNpbmdsZVZpZXdcIn07YXdhaXQgbi51cGRhdGVQYWdlKHtwYWdlSWQ6ZS5wYWdlSWQscGFnZTphfSl9fSkoZSxuWzBdLm5hbWUpLGF3YWl0KGFzeW5jKGUsdCk9Pntjb25zdCBuPSgwLGEuZSkoey4uLnMuR2ksbGF5b3V0TmFtZTplLmxheW91dENvbnRhaW5lcktleX0pLHI9YXdhaXQgbi5pc1Nob3dpbmdUYWJzKCk7dD4xP3J8fGF3YWl0IG4uc2hvdygpOjE9PT10JiZyJiZhd2FpdCBuLmhpZGUoe3NldHRpbmdzOntyZW9yZGVyRW5hYmxlZDohMH19KX0pKGUscil9Y2F0Y2goZSl7fX0pLDUwLHtsZWFkaW5nOiExLHRyYWlsaW5nOiEwfSl9LDgwNjE6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO3ZhciByO24uZCh0LHtaOigpPT5vfSksZnVuY3Rpb24oZSl7ZS5DdXJyZW50V29ya3NwYWNlSWQ9XCJjdXJyZW50V29ya3NwYWNlSWRcIixlLkxhc3RGb2N1c2VkQnJvd3NlcldpbmRvdz1cImxhc3RGb2N1c2VkQnJvd3NlcldpbmRvd1wiLGUuTWFjaGluZU5hbWU9XCJtYWNoaW5lTmFtZVwiLGUuTmV3VGFiUGFnZUxheW91dD1cIk5ld1RhYlBhZ2VMYXlvdXRcIixlLk5ld1RhYlBhZ2VTb3J0PVwiTmV3VGFiUGFnZVNvcnRcIixlLkRvY2tQb3NpdGlvbj1cIkRvY2tQb3NpdGlvblwiLGUuU2VsZWN0ZWRDb2xvclNjaGVtZT1cIlNlbGVjdGVkQ29sb3JTY2hlbWVcIixlLkhhc01vdmVkU3RvcmU9XCJIYXNNb3ZlZFN0b3JlXCIsZS5QYWdlRHJhZ1N0YXRlPVwiQnJvd3NlclBhZ2VEcmFnU3RhdGVcIn0ocnx8KHI9e30pKTtjb25zdCBvPXJ9LDQ3Mjg6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24uZCh0LHtMUzooKT0+byxyVjooKT0+aX0pO3ZhciByPW4oNjY3OCk7Y29uc3Qgbz0oZSx0KT0+e2xvY2FsU3RvcmFnZS5zZXRJdGVtKGAke3IuQUJ9LSR7ZX1gLHQpfSxpPWU9PmxvY2FsU3RvcmFnZS5nZXRJdGVtKGAke3IuQUJ9LSR7ZX1gKX0sNzI3ODooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7bi5kKHQse1o6KCk9Pm99KTtjb25zdCByPVwib2Ytd29ya3NwYWNlLVwiO2NvbnN0IG89bmV3IGNsYXNze21hcmsoZSl7cGVyZm9ybWFuY2UubWFyayhgJHtyfSR7ZX1gKX1tYXJrU3RhcnQoZSl7cGVyZm9ybWFuY2UubWFyayhgJHtyfSR7ZX0tc3RhcnRgKX1tYXJrRW5kKGUpe3BlcmZvcm1hbmNlLm1hcmsoYCR7cn0ke2V9LWVuZGApfW1hcmtFbmRBbmRNZWFzdXJlKGUpe3BlcmZvcm1hbmNlLm1hcmsoYCR7cn0ke2V9LWVuZGApO3RyeXtyZXR1cm4gcGVyZm9ybWFuY2UubWVhc3VyZShgJHtyfSR7ZX1gLGAke3J9JHtlfS1zdGFydGAsYCR7cn0ke2V9LWVuZGApfWNhdGNoKGUpezB9fW1hcmtBbmRNZWFzdXJlKGUsdCl7cGVyZm9ybWFuY2UubWFyayhgJHtyfSR7ZX1gKTt0cnl7cmV0dXJuIHBlcmZvcm1hbmNlLm1lYXN1cmUoYCR7cn0ke2V9LW1lYXN1cmVgLGAke3J9JHt0fS1zdGFydGAsYCR7cn0ke2V9YCl9Y2F0Y2goZSl7MH19cmVwb3J0V29ya3NwYWNlUGVyZm9ybWFuY2VFbnRyaWVzKCl7cmV0dXJuIHBlcmZvcm1hbmNlLmdldEVudHJpZXNCeVR5cGUoXCJtZWFzdXJlXCIpLmZpbHRlcigoZT0+ZS5uYW1lLnN0YXJ0c1dpdGgocikpKX1yZXBvcnRXb3Jrc3BhY2VQZXJmb3JtYW5jZSgpe3JldHVybiB0aGlzLnJlcG9ydFdvcmtzcGFjZVBlcmZvcm1hbmNlRW50cmllcygpLm1hcCgoZT0+KHtuYW1lOmUubmFtZS5yZXBsYWNlKGAke3J9YCxcIlwiKS5yZXBsYWNlKFwiLW1lYXN1cmVcIixcIlwiKSxkdXJhdGlvbjplLmR1cmF0aW9ufSkpKX19fSw2MDA1OihlLHQsbik9PntcInVzZSBzdHJpY3RcIjt2YXIgcjtuLmQodCx7WlA6KCk9PmwsZGU6KCk9Pml9KSxmdW5jdGlvbihlKXtlLkhvbWU9XCIvaG9tZS9cIixlLkhvbWVTZWFyY2g9XCIvaG9tZS8/ZGVlcGxpbms9c2VhcmNoXCIsZS5Ib21lUGFnZXNSZW5hbWU9XCIvaG9tZS9wYWdlcy9yZW5hbWUvXCIsZS5Eb2NrPVwiL2RvY2svXCIsZS5Ccm93c2VyPVwiL2Jyb3dzZXIvXCIsZS5Ccm93c2VyUG9wdXBNZW51PVwiL2Jyb3dzZXIvcG9wdXAtbWVudS9cIixlLlByb3ZpZGVyPVwiL3Byb3ZpZGVyL1wiLGUuQnJvd3NlclBvcHVwTWVudVNhdmVNb2RhbD1cIi9icm93c2VyL3BvcHVwLW1lbnUvc2F2ZS1tb2RhbC9cIixlLkJyb3dzZXJQb3B1cE1lbnVMYXlvdXRzPVwiL2Jyb3dzZXIvcG9wdXAtbWVudS9sYXlvdXRzL2xheW91dHMvXCIsZS5Ccm93c2VyUG9wdXBNZW51Q29sb3JMaW5raW5nPVwiL2Jyb3dzZXIvcG9wdXAtbWVudS9jb2xvci1saW5raW5nL2NvbG9yLWxpbmtpbmcvXCIsZS5Ccm93c2VySW5kaWNhdG9yPVwiL2Jyb3dzZXIvaW5kaWNhdG9yL1wiLGUuQnJvd3NlclBvcHVwTWVudUFkZHJlc3NTZWFyY2hSZXN1bHRzVmlldz1cIi9icm93c2VyL3BvcHVwLW1lbnUvYWRkcmVzcy1zZWFyY2gtcmVzdWx0cy12aWV3L1wiLGUuUmVzcG9uc2VNb2RhbD1cIi9icm93c2VyL3BvcHVwLW1lbnUvcmVzcG9uc2UtbW9kYWwvXCIsZS5DbG9zZUNvbmZpcm1hdGlvbk1vZGFsPVwiL2Jyb3dzZXIvcG9wdXAtbWVudS9jbG9zZS1jb25maXJtYXRpb24tbW9kYWwvXCIsZS5Eb2NzPVwiL3Byb3ZpZGVyL2RvY3MvXCIsZS5TdG9yZWZyb250PVwiL3N0b3JlZnJvbnQvXCIsZS5EZXByZWNhdGVkQWxlcnQ9XCIvcHJvdmlkZXIvZGVwcmVjYXRlZC1hbGVydC9cIixlLkFuYWx5dGljcz1cIi9wcm92aWRlci9hbmFseXRpY3MvXCIsZS5FbnRlcnByaXNlQnJvd3Nlcj1cIi9icm93c2VyL2VudGVycHJpc2UvXCIsZS5FbnRlcnByaXNlQ29udGV4dE1lbnU9XCIvYnJvd3Nlci9lbnRlcnByaXNlL2NvbnRleHQtbWVudS9cIixlLkVudGVycHJpc2VCb29rbWFya0RpYWxvZz1cIi9icm93c2VyL2VudGVycHJpc2UvYm9va21hcmstZGlhbG9nL1wiLGUuRHJvcGRvd25NZW51PVwiL2Jyb3dzZXIvZW50ZXJwcmlzZS9kcm9wZG93bi1tZW51L1wifShyfHwocj17fSkpO2NvbnN0IG89XCIvbWljcm9zb2Z0LTM2NS1pbnRlZ3JhdGlvbi1hc3NldHMvXCIsaT17SWNvbk9wZW5GaW5Mb2dvOlwiL2ljb25zL29wZW5maW5sb2dvLnN2Z1wiLEljb25GaWx0ZXI6XCIvaWNvbnMvZmlsdGVyLnN2Z1wiLExpZ2h0U3RvcmVmcm9udDpcIi9pY29ucy9zdG9yZS1pY29uLWxpZ2h0LnBuZ1wiLERhcmtTdG9yZWZyb250OlwiL2ljb25zL3N0b3JlLWljb24tZGFyay5wbmdcIixDYWxsSWNvbkxpZ2h0OlwiL2ljb25zL2NhbGwtaWNvbi1saWdodC5zdmdcIixDYWxsSWNvbkRhcms6XCIvaWNvbnMvY2FsbC1pY29uLWRhcmsuc3ZnXCIsQ2hhdEljb25MaWdodDpcIi9pY29ucy9jaGF0LWljb24tbGlnaHQuc3ZnXCIsQ2hhdEljb25EYXJrOlwiL2ljb25zL2NoYXQtaWNvbi1kYXJrLnN2Z1wiLE1lc3NhZ2VJY29uTGlnaHQ6XCIvaWNvbnMvbWVzc2FnZS1pY29uLWxpZ2h0LnN2Z1wiLE1lc3NhZ2VJY29uRGFyazpcIi9pY29ucy9tZXNzYWdlLWljb24tZGFyay5zdmdcIixNaWNyb3NvZnQzNjVBc3NldHM6e01pY3Jvc29mdDM2NURvY3VtZW50SWNvbjpgJHtvfW1pY3Jvc29mdC0zNjUtZG9jdW1lbnQtaWNvbi5zdmdgLE1pY3Jvc29mdDM2NUV4Y2VsSWNvbjpgJHtvfW1pY3Jvc29mdC0zNjUtZXhjZWwtaWNvbi5zdmdgLE1pY3Jvc29mdDM2NVBvd2VycG9pbnRJY29uOmAke299bWljcm9zb2Z0LTM2NS1wb3dlcnBvaW50LWljb24uc3ZnYCxNaWNyb3NvZnQzNjVPdXRsb29rSWNvbjpgJHtvfW1pY3Jvc29mdC0zNjUtb3V0bG9vay1pY29uLnN2Z2AsTWljcm9zb2Z0MzY1VGVhbXNJY29uOmAke299bWljcm9zb2Z0LTM2NS10ZWFtcy1pY29uLnN2Z2AsTWljcm9zb2Z0MzY1SWNvbjpgJHtvfW1pY3Jvc29mdC0zNjUtaWNvbi5zdmdgLFBERkZpbGVJY29uOmAke299cGRmLWZpbGUtaWNvbi5zdmdgfSxEb2NrSWNvbkxpZ2h0OlwiL2ljb25zL2RvY2staWNvbi1saWdodC5wbmdcIixEb2NrSWNvbkRhcms6XCIvaWNvbnMvZG9jay1pY29uLWRhcmsucG5nXCJ9O3ZhciBhOyFmdW5jdGlvbihlKXtlLlNlYXJjaD1cInNlYXJjaFwifShhfHwoYT17fSkpO2NvbnN0IGw9cn0sNjY1MDooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7bi5kKHQse0szOigpPT5pfSk7dmFyIHI7big2Njc4KTshZnVuY3Rpb24oZSl7ZS5Ib21lPVwiL2hvbWVcIixlLkJyb3dzZXI9XCIvYnJvd3NlclwiLGUuUHJvdmlkZXI9XCIvcHJvdmlkZXJcIixlLlN0b3JlZnJvbnQ9XCIvc3RvcmVmcm9udFwiLGUuRG9jaz1cIi9kb2NrXCJ9KHJ8fChyPXt9KSk7Y29uc3Qgbz1cIi93b3Jrc3BhY2UvMjAuMS41XCI7ZnVuY3Rpb24gaShlKXtyZXR1cm4gbytlfX0sNTkxMjooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7bi5kKHQseyR3OigpPT5hLFg1OigpPT5vfSk7big4MzExKTt2YXIgcj1uKDgwNjEpO2Z1bmN0aW9uIG8oKXtyZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oci5aLk1hY2hpbmVOYW1lKT8/XCJ1bmtub3duXCJ9bGV0IGk7YXN5bmMgZnVuY3Rpb24gYSgpe3JldHVybiBpfHwoaT1hd2FpdCBmaW4uU3lzdGVtLmdldE1hY2hpbmVJZCgpKSxpfX0sNjUzMjooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7bi5kKHQse1duOigpPT5jLGNrOigpPT5sLGQ5OigpPT5zfSk7dmFyIHIsbz1uKDY2NzgpLGk9bigxMjEpO24oODYzNik7IWZ1bmN0aW9uKGUpe2UuQnJvd3Nlcj1cIkJyb3dzZXJcIixlLkRvY2s9XCJEb2NrXCIsZS5Ib21lPVwiSG9tZVwiLGUuTm90aWZpY2F0aW9uPVwiTm90aWZpY2F0aW9uXCIsZS5TdG9yZWZyb250PVwiU3RvcmVmcm9udFwiLGUuUGxhdGZvcm09XCJQbGF0Zm9ybVwiLGUuVGhlbWluZz1cIlRoZW1pbmdcIixlLk1pY3JvZmxvdz1cIk1pY3JvZmxvd1wifShyfHwocj17fSkpO2NvbnN0IGE9YXN5bmMoZSx0LG49XCJ3b3Jrc3BhY2UtbGljZW5zaW5nXCIpPT57Y29uc3Qgcj17YXBpVmVyc2lvbjp0LmFwaVZlcnNpb258fG8udTAsY29tcG9uZW50TmFtZTplLGNvbXBvbmVudFZlcnNpb246dC5jb21wb25lbnRWZXJzaW9ufHxvLnUwLGFsbG93ZWQ6dC5hbGxvd2VkLHJlamVjdGlvbkNvZGU6dC5yZWplY3Rpb25Db2RlfTtmaW4uU3lzdGVtLnJlZ2lzdGVyVXNhZ2Uoe3R5cGU6bixkYXRhOnJ9KX07Y29uc3QgbD1lPT57aS5PSS51dWlkPT09aS5HaS51dWlkJiZpLk9JLm5hbWU9PT1pLkdpLm5hbWV8fGEoci5Ib21lLGUpfSxzPWU9PnthKHIuU3RvcmVmcm9udCxlKX0sYz1lPT57YShyLkRvY2ssZSl9O25ldyBNYXB9LDk2MTA6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHIoKXtyZXR1cm4gdm9pZCAwIT09dHlwZW9mIGNyeXB0byYmXCJyYW5kb21VVUlEXCJpbiBjcnlwdG8mJlwiZnVuY3Rpb25cIj09dHlwZW9mIGNyeXB0by5yYW5kb21VVUlEP2NyeXB0by5yYW5kb21VVUlEKCk6XCIxMDAwMDAwMC0xMDAwLTQwMDAtODAwMC0xMDAwMDAwMDAwMDBcIi5yZXBsYWNlKC9bMDE4XS9nLChlPT4oZV5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDEpKVswXSYxNT4+ZS80KS50b1N0cmluZygxNikpKX1uLmQodCx7SDooKT0+cn0pfSwxMjE6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24uZCh0LHtCOigpPT5kLEdQOigpPT5wLEdpOigpPT5sLElBOigpPT5yLEpWOigpPT5oLE9JOigpPT5zLFpKOigpPT5jLGlXOigpPT5mLG5kOigpPT51fSk7dmFyIHIsbz1uKDU4MDYpLGk9big2Njc4KTshZnVuY3Rpb24oZSl7ZS5Ib21lPVwib3BlbmZpbi1ob21lXCIsZS5Eb2NrPVwib3BlbmZpbi1kb2NrXCIsZS5TdG9yZWZyb250PVwib3BlbmZpbi1zdG9yZWZyb250XCIsZS5Ib21lSW50ZXJuYWw9XCJvcGVuZmluLWhvbWUtaW50ZXJuYWxcIixlLkJyb3dzZXJNZW51PVwib3BlbmZpbi1icm93c2VyLW1lbnVcIixlLkJyb3dzZXJTYXZlTWVudT1cIm9wZW5maW4tYnJvd3Nlci1zYXZlLW1lbnVcIixlLkJyb3dzZXJJbmRpY2F0b3I9XCJvcGVuZmluLWJyb3dzZXItaW5kaWNhdG9yXCIsZS5Ccm93c2VyV2luZG93PVwiaW50ZXJuYWwtZ2VuZXJhdGVkLXdpbmRvd1wiLGUuQ2xhc3NpY1dpbmRvdz1cImludGVybmFsLWdlbmVyYXRlZC1jbGFzc2ljLXdpbmRvd1wiLGUuRW50ZXJwcmlzZUNvbnRleHRNZW51PVwib3BlbmZpbi1lbnRlcnByaXNlLWNvbnRleHQtbWVudVwiLGUuQnJvd3NlckFkZHJlc3NTZWFyY2hQcmVmaXg9XCJvcGVuZmluLWJyb3dzZXItbWVudS1hZGRyZXNzLXNlYXJjaC1cIixlLkVudGVycHJpc2VCb29rbWFya0RpYWxvZ1dpbmRvdz1cIm9wZW5maW4tZW50ZXJwcmlzZS1ib29rbWFyay1kaWFsb2dcIixlLkRyb3Bkb3duTWVudT1cIm9wZW5maW4tZW50ZXJwcmlzZS1kcm9wZG93bi1tZW51XCJ9KHJ8fChyPXt9KSk7ZnVuY3Rpb24gYShlKXtpZighaS5zUyl0aHJvdyBuZXcgRXJyb3IoXCJnZXRPRldpbmRvdyBjYW4gb25seSBiZSB1c2VkIGluIGFuIE9wZW5GaW4gZW52LiBBdm9pZCBjYWxsaW5nIHRoaXMgbWV0aG9kIGR1cmluZyBwcmUtcmVuZGVyaW5nLlwiKTtyZXR1cm4gZmluLldpbmRvdy53cmFwU3luYyhlKX1jb25zdCBsPXtuYW1lOmkub0MsdXVpZDppLkFCfTtjb25zdCBzPXtuYW1lOnIuSG9tZSx1dWlkOm8ucTkuV29ya3NwYWNlfSxjPXtuYW1lOnIuRG9jayx1dWlkOm8ucTkuV29ya3NwYWNlfSx1PXtuYW1lOnIuU3RvcmVmcm9udCx1dWlkOm8ucTkuV29ya3NwYWNlfSxmPXtuYW1lOm8ucTkuV29ya3NwYWNlLHV1aWQ6by5xOS5Xb3Jrc3BhY2V9O2NvbnN0IGQ9YXN5bmMgZT0+e3RyeXtjb25zdCB0PWF3YWl0IGZpbi5XaW5kb3cud3JhcFN5bmMoe25hbWU6ZS5uYW1lLHV1aWQ6ZS51dWlkPz9maW4ubWUudXVpZH0pLmdldE9wdGlvbnMoKTtyZXR1cm4oXCJicm93c2VyXCI9PT10LndvcmtzcGFjZVBsYXRmb3JtPy53aW5kb3dUeXBlfHxcImVudGVycHJpc2VcIj09PXQud29ya3NwYWNlUGxhdGZvcm0/LndpbmRvd1R5cGUpJiZ0LndvcmtzcGFjZVBsYXRmb3JtPy5wYWdlc31jYXRjaChlKXtyZXR1cm4gY29uc29sZS53YXJuKFwiaXNCcm93c2VyV2luZG93IGVycm9yOiBcIixlKSwhMX19O2FzeW5jIGZ1bmN0aW9uIHAoKXtjb25zdCBlPWF3YWl0IGZpbi5BcHBsaWNhdGlvbi5nZXRDdXJyZW50U3luYygpLmdldENoaWxkV2luZG93cygpLHQ9YXdhaXQgUHJvbWlzZS5hbGwoZS5tYXAoKGFzeW5jIGU9PmQoZS5pZGVudGl0eSkpKSk7cmV0dXJuIGUuZmlsdGVyKCgoZSxuKT0+dFtuXSkpfWNvbnN0IGg9ZT0+YShlKS5nZXRPcHRpb25zKCkudGhlbigoKCk9PiEwKSkuY2F0Y2goKCgpPT4hMSkpfSwyMzA0OmU9PntlLmV4cG9ydHM9e2FyZWE6ITAsYmFzZTohMCxicjohMCxjb2w6ITAsZW1iZWQ6ITAsaHI6ITAsaW1nOiEwLGlucHV0OiEwLGxpbms6ITAsbWV0YTohMCxwYXJhbTohMCxzb3VyY2U6ITAsdHJhY2s6ITAsd2JyOiEwfX19LHQ9e307ZnVuY3Rpb24gbihyKXt2YXIgbz10W3JdO2lmKHZvaWQgMCE9PW8pcmV0dXJuIG8uZXhwb3J0czt2YXIgaT10W3JdPXtleHBvcnRzOnt9fTtyZXR1cm4gZVtyXShpLGkuZXhwb3J0cyxuKSxpLmV4cG9ydHN9bi5uPWU9Pnt2YXIgdD1lJiZlLl9fZXNNb2R1bGU/KCk9PmUuZGVmYXVsdDooKT0+ZTtyZXR1cm4gbi5kKHQse2E6dH0pLHR9LG4uZD0oZSx0KT0+e2Zvcih2YXIgciBpbiB0KW4ubyh0LHIpJiYhbi5vKGUscikmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIse2VudW1lcmFibGU6ITAsZ2V0OnRbcl19KX0sbi5nPWZ1bmN0aW9uKCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGdsb2JhbFRoaXMpcmV0dXJuIGdsb2JhbFRoaXM7dHJ5e3JldHVybiB0aGlzfHxuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpfWNhdGNoKGUpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvd319KCksbi5vPShlLHQpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KSxuLnI9ZT0+e1widW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZTpcIk1vZHVsZVwifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LG4ubmM9dm9pZCAwO3ZhciByPXt9OygoKT0+e1widXNlIHN0cmljdFwiO24ucihyKSxuLmQocix7QWN0aW9uVHJpZ2dlcjooKT0+R2UucCxBcHBNYW5pZmVzdFR5cGU6KCk9PlllLkwsQnV0dG9uU3R5bGU6KCk9PnFlLlpKLENMSUFjdGlvbjooKT0+JC5QdCxDTElGaWx0ZXJPcHRpb25UeXBlOigpPT4kLmVsLENMSVRlbXBsYXRlOigpPT4kLnlXLENvbnRhaW5lclRlbXBsYXRlRnJhZ21lbnROYW1lczooKT0+cWUucDYsRG9jazooKT0+ZSxEb2NrQnV0dG9uTmFtZXM6KCk9PmQudixIb21lOigpPT5fLEludGVncmF0aW9uczooKT0+dCxMZWdhY3k6KCk9Pm8sUHJlc2VudGF0aW9uVGVtcGxhdGVGcmFnbWVudE5hbWVzOigpPT5xZS5HbyxTZWFyY2hUYWdCYWNrZ3JvdW5kOigpPT5HZS53LFN0b3JlZnJvbnQ6KCk9PnplLFN0b3JlZnJvbnRUZW1wbGF0ZTooKT0+WWUuVCxUZW1wbGF0ZUZyYWdtZW50VHlwZXM6KCk9PnFlLmJJfSk7dmFyIGU9e307bi5yKGUpLG4uZChlLHtEb2NrQnV0dG9uTmFtZXM6KCk9PmQudixkZXJlZ2lzdGVyOigpPT5tLG1pbmltaXplOigpPT5DLHJlZ2lzdGVyOigpPT52LHNob3c6KCk9Pnl9KTt2YXIgdD17fTtuLnIodCksbi5kKHQse01pY3Jvc29mdDM2NVdvcmtmbG93SW50ZWdyYXRpb246KCk9Pk5lfSk7dmFyIG89e307bi5yKG8pLG4uZChvLHtnZXRQYWdlczooKT0+VWUsZ2V0V29ya3NwYWNlczooKT0+V2V9KTt2YXIgaT1uKDY2NzgpLGE9big3Mjc4KSxsPW4oNjUzMikscz1uKDEyMSksYz1uKDUxNTApLHU9big1NDM4KTt2YXIgZj1uKDI2OTMpLGQ9big3NDI3KTtsZXQgcCxoO2NvbnN0IGc9KGU9W10pPT57Y29uc3QgdD1lLmZpbHRlcigoZT0+ISFlLmlkKSkubWFwKChlPT5lLmlkKSk7aWYobmV3IFNldCh0KS5zaXplIT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiRG9jayBwcm92aWRlciBidXR0b25zIG11c3QgaGF2ZSB1bmlxdWUgaWRlbnRpZmllcnMgaWYgc3BlY2lmaWVkLlwiKX0sdj1hc3luYyBlPT57KDAsZi5FKShcImRvY2tcIixzLlpKKTtjb25zdCB0PWF3YWl0KGFzeW5jIGU9Pnthd2FpdCgwLHUuSGgpKGZpbi5tZS5pZGVudGl0eSk7Y29uc3QgdD1hd2FpdCgwLGMueFopKCk7aWYoaCl0aHJvdyBuZXcgRXJyb3IoXCJFcnJvciB1c2luZyBgRG9jay5yZWdpc3RlcmAuIEEgRG9jayBwcm92aWRlciBmb3IgdGhpcyBXb3Jrc3BhY2UgUGxhdGZvcm0gaXMgYWxyZWFkeSByZWdpc3RlcmVkLiBDYWxsIGBEb2NrLmRlcmVnaXN0ZXJgIGJlZm9yZSBjYWxsaW5nIGBEb2NrLnJlZ2lzdGVyYCBhZ2Fpbi5cIik7cmV0dXJuIGg9ZSxlLmNsaWVudEFQSVZlcnNpb249aS51MCx0LmRpc3BhdGNoKFwicmVnaXN0ZXItcHJvdmlkZXJcIix7cHJvdmlkZXJUeXBlOlwiZG9ja1wiLGluZm86ZX0pfSkoZSk7cmV0dXJuIHA9bmV3IFByb21pc2UoKChuLHIpPT57dHJ5eyhlPT57ZS53b3Jrc3BhY2VDb21wb25lbnRzJiYhQXJyYXkuaXNBcnJheShlLndvcmtzcGFjZUNvbXBvbmVudHMpJiZjb25zb2xlLndhcm4oXCJVc2luZyB0aGUgYFdvcmtzcGFjZUNvbXBvbmVudEJ1dHRvbk9wdGlvbnNgIHR5cGUgdG8gY29uZmlndXJlIHRoZSBXb3Jrc3BhY2UgQ29tcG9uZW50cyBCdXR0b25zIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgYFdvcmtzcGFjZUJ1dHRvbnNDb25maWdgIGluc3RlYWQuXCIpfSkoZSksZyhlLmJ1dHRvbnMpLCgwLGwuV24pKHthbGxvd2VkOiEwLGNvbXBvbmVudFZlcnNpb246dD8ud29ya3NwYWNlVmVyc2lvbn0pLGkudTAsbih7Y2xpZW50QVBJVmVyc2lvbjppLnUwLHdvcmtzcGFjZVZlcnNpb246dD8ud29ya3NwYWNlVmVyc2lvbj8/XCJcIix1cGRhdGVEb2NrUHJvdmlkZXJDb25maWc6YXN5bmMgdD0+e2lmKCFoKXRocm93IG5ldyBFcnJvcihcIkVycm9yIHVzaW5nIGBEb2NrLnVwZGF0ZURvY2tQcm92aWRlckNvbmZpZ2AuIERvY2sgcHJvdmlkZXIgaXMgbm90IHJlZ2lzdGVyZWQuIE1ha2Ugc3VyZSB0byBjYWxsIGBEb2NrLnJlZ2lzdGVyYCBmaXJzdC5cIik7Zyh0LmJ1dHRvbnMpO2NvbnN0IG49YXdhaXQoMCxjLnhaKSgpO2F3YWl0IG4uZGlzcGF0Y2goXCJ1cGRhdGUtcHJvdmlkZXJcIix7cHJvdmlkZXJUeXBlOlwiZG9ja1wiLHByb3ZpZGVyOnsuLi5lLHdvcmtzcGFjZUNvbXBvbmVudHM6dC53b3Jrc3BhY2VDb21wb25lbnRzLGJ1dHRvbnM6dC5idXR0b25zLHRpdGxlOnQudGl0bGUsaWNvbjp0Lmljb24sZGlzYWJsZVVzZXJSZWFycmFuZ2VtZW50OnQuZGlzYWJsZVVzZXJSZWFycmFuZ2VtZW50LGlkOmUuaWR9fSl9fSl9Y2F0Y2goZSl7KDAsbC5Xbikoe2FsbG93ZWQ6ITEscmVqZWN0aW9uQ29kZTplIGluc3RhbmNlb2YgRXJyb3I/ZS5tZXNzYWdlOlwidW5rbm93blwifSkscihlKSxwPXZvaWQgMH1maW5hbGx5e2EuWi5tYXJrRW5kQW5kTWVhc3VyZShcImRvY2stcmVnaXN0cmF0aW9uXCIpfX0pKSxwfSxtPWFzeW5jKCk9PntpZihhd2FpdCBwLCFoKXRocm93IG5ldyBFcnJvcihcIkVycm9yIHVzaW5nIGBEb2NrLmRlcmVnaXN0ZXJgLiBEb2NrIHByb3ZpZGVyIGlzIG5vdCByZWdpc3RlcmVkLiBDYWxsIGBEb2NrLnJlZ2lzdGVyYCBiZWZvcmUgY2FsbGluZyBgRG9jay5kZXJlZ2lzdGVyYC5cIik7Y29uc3QgZT1hd2FpdCgwLGMueFopKCk7YXdhaXQgZS5kaXNwYXRjaChcImRlcmVnaXN0ZXItcHJvdmlkZXJcIix7cHJvdmlkZXJUeXBlOlwiZG9ja1wiLGlkOmguaWR9KSxoPXZvaWQgMCxwPXZvaWQgMH0sQz1hc3luYygpPT57YXdhaXQgcCxhd2FpdCgwLGMuYUIpKCksYXdhaXQoYXN5bmMgZT0+KGF3YWl0KDAsYy5EbSkoKSkuZGlzcGF0Y2goXCJoaWRlLXByb3ZpZGVyLXdpbmRvd1wiLHtwcm92aWRlclR5cGU6ZX0pKShcImRvY2tcIil9LHk9YXN5bmMoKT0+e2EuWi5tYXJrU3RhcnQoXCJkb2NrLXNob3dcIiksYXdhaXQgcCxhd2FpdCgwLGMuYUIpKCksYXdhaXQoYXN5bmMgZT0+KGF3YWl0KDAsYy5EbSkoKSkuZGlzcGF0Y2goXCJzaG93LXByb3ZpZGVyLXdpbmRvd1wiLHtwcm92aWRlclR5cGU6ZX0pKShcImRvY2tcIil9O3ZhciB3LGIseCxfPW4oMzI2MSksTz1mdW5jdGlvbihlLHQsbixyLG8pe2lmKFwibVwiPT09cil0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO2lmKFwiYVwiPT09ciYmIW8pdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P2UhPT10fHwhbzohdC5oYXMoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO3JldHVyblwiYVwiPT09cj9vLmNhbGwoZSxuKTpvP28udmFsdWU9bjp0LnNldChlLG4pLG59LEw9ZnVuY3Rpb24oZSx0LG4scil7aWYoXCJhXCI9PT1uJiYhcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/ZSE9PXR8fCFyOiF0LmhhcyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO3JldHVyblwibVwiPT09bj9yOlwiYVwiPT09bj9yLmNhbGwoZSk6cj9yLnZhbHVlOnQuZ2V0KGUpfTt3PW5ldyBXZWFrTWFwLGI9bmV3IFdlYWtNYXAseD1uZXcgV2Vha01hcDtjb25zdCBFPWNsYXNze2NvbnN0cnVjdG9yKGUpe3cuc2V0KHRoaXMsdm9pZCAwKSxiLnNldCh0aGlzLHZvaWQgMCkseC5zZXQodGhpcyx2b2lkIDApLE8odGhpcyx3LGUsXCJmXCIpLE8odGhpcyxiLG5ldyBNYXAsXCJmXCIpLE8odGhpcyx4LFtdLFwiZlwiKX1nZXQoZSl7aWYoTCh0aGlzLGIsXCJmXCIpLmhhcyhlKSlyZXR1cm4gdGhpcy51cGRhdGVRdWV1ZShlKSxMKHRoaXMsYixcImZcIikuZ2V0KGUpfWhhcyhlKXtyZXR1cm4gTCh0aGlzLGIsXCJmXCIpLmhhcyhlKX1wdXQoZSx0KXtpZihMKHRoaXMsYixcImZcIikuaGFzKGUpKUwodGhpcyxiLFwiZlwiKS5zZXQoZSx0KSx0aGlzLnVwZGF0ZVF1ZXVlKGUpO2Vsc2V7aWYoTCh0aGlzLHgsXCJmXCIpLmxlbmd0aD09PUwodGhpcyx3LFwiZlwiKSl7Y29uc3QgZT1MKHRoaXMseCxcImZcIikuc2hpZnQoKTtlJiZMKHRoaXMsYixcImZcIikuZGVsZXRlKGUpfUwodGhpcyxiLFwiZlwiKS5zZXQoZSx0KSxMKHRoaXMseCxcImZcIikucHVzaChlKX19dXBkYXRlUXVldWUoZSl7Y29uc3QgdD1MKHRoaXMseCxcImZcIikuaW5kZXhPZihlKTstMSE9PXQmJihMKHRoaXMseCxcImZcIikuc3BsaWNlKHQsMSksTCh0aGlzLHgsXCJmXCIpLnB1c2goZSkpfX07ZnVuY3Rpb24gUyhlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJiFBcnJheS5pc0FycmF5KGUpfWZ1bmN0aW9uIGooZSwuLi50KXtpZighdC5sZW5ndGgpcmV0dXJuIGU7Y29uc3Qgbj10LnNoaWZ0KCk7cmV0dXJuIFMoZSkmJlMobikmJk9iamVjdC5lbnRyaWVzKG4pLmZvckVhY2goKChbdCxuXSk9PntpZihTKG4pKXJldHVybiBlW3RdfHwoZVt0XT17fSksaihlW3RdLG4pO2VbdF09bn0pKSxqKGUsLi4udCl9dmFyIE0sayxSLFAsSSxBPW4oNjAwNSksVD1uKDY2NTApLEg9ZnVuY3Rpb24oZSx0LG4scixvKXtpZihcIm1cIj09PXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtpZihcImFcIj09PXImJiFvKXRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdD9lIT09dHx8IW86IXQuaGFzKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtyZXR1cm5cImFcIj09PXI/by5jYWxsKGUsbik6bz9vLnZhbHVlPW46dC5zZXQoZSxuKSxufSxCPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKFwiYVwiPT09biYmIXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P2UhPT10fHwhcjohdC5oYXMoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtyZXR1cm5cIm1cIj09PW4/cjpcImFcIj09PW4/ci5jYWxsKGUpOnI/ci52YWx1ZTp0LmdldChlKX07az1uZXcgV2Vha01hcCxSPW5ldyBXZWFrTWFwLFA9bmV3IFdlYWtNYXAsTT1uZXcgV2Vha1NldCxJPWZ1bmN0aW9uKCl7Y29uc3QgZT1BcnJheS5mcm9tKEIodGhpcyxrLFwiZlwiKS5lbnRyaWVzKCkpLnJlZHVjZSgoKGUsdCk9PiFlfHx0WzFdLnRpbWVzdGFtcDxlWzFdLnRpbWVzdGFtcD90OmUpLG51bGwpO3JldHVybiBlP2VbMF06bnVsbH07Y29uc3QgVj1jbGFzc3tjb25zdHJ1Y3RvcihlPTNlNSx0PTEwMCl7TS5hZGQodGhpcyksay5zZXQodGhpcyx2b2lkIDApLFIuc2V0KHRoaXMsdm9pZCAwKSxQLnNldCh0aGlzLHZvaWQgMCksSCh0aGlzLGssbmV3IE1hcCxcImZcIiksSCh0aGlzLFIsZSxcImZcIiksSCh0aGlzLFAsdCxcImZcIil9Z2V0KGUpe2NvbnN0IHQ9Qih0aGlzLGssXCJmXCIpLmdldChlKTtpZighdClyZXR1cm4gbnVsbDtyZXR1cm4gRGF0ZS5ub3coKS10LnRpbWVzdGFtcDxCKHRoaXMsUixcImZcIik/dC52YWx1ZTooQih0aGlzLGssXCJmXCIpLmRlbGV0ZShlKSxudWxsKX1wdXQoZSx0KXtpZihCKHRoaXMsayxcImZcIikuc2l6ZT49Qih0aGlzLFAsXCJmXCIpKXtjb25zdCBlPUIodGhpcyxNLFwibVwiLEkpLmNhbGwodGhpcyk7bnVsbCE9ZSYmQih0aGlzLGssXCJmXCIpLmRlbGV0ZShlKX1CKHRoaXMsayxcImZcIikuc2V0KGUse3ZhbHVlOnQsdGltZXN0YW1wOkRhdGUubm93KCl9KX1yZW1vdmUoZSl7Qih0aGlzLGssXCJmXCIpLmRlbGV0ZShlKX1jbGVhcigpe0IodGhpcyxrLFwiZlwiKS5jbGVhcigpfX07dmFyIEQsWj1uKDk2MTApLCQ9bigzNzU4KSxOPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKFwiYVwiPT09biYmIXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P2UhPT10fHwhcjohdC5oYXMoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtyZXR1cm5cIm1cIj09PW4/cjpcImFcIj09PW4/ci5jYWxsKGUpOnI/ci52YWx1ZTp0LmdldChlKX07Y29uc3QgRj17fTtjbGFzcyBVe2NvbnN0cnVjdG9yKGUpe0Quc2V0KHRoaXMsbmV3IFNldCksdGhpcy5faW5pdGlhbGl6ZVdvcmtmbG93cz1hc3luYyhlPXRoaXMuY29uZmlnKT0+e2NvbnN0e3dvcmtmbG93czp0fT1lO2Zvcihjb25zdCBlIGluIHQpe2lmKCF0W2VdLmRpc2FibGVBdXRvSW5pdGlhbGl6ZSl0cnl7Tih0aGlzLEQsXCJmXCIpLmhhcyhlKT9jb25zb2xlLndhcm4oYFdvcmtmbG93ICR7ZX0gYWxyZWFkeSBpbml0aWFsaXplZC5gKTooTih0aGlzLEQsXCJmXCIpLmFkZChlKSxhd2FpdCB0aGlzLmluaXRpYWxpemVXb3JrZmxvdyhlKSl9Y2F0Y2godCl7Tih0aGlzLEQsXCJmXCIpLmRlbGV0ZShlKSxjb25zb2xlLmVycm9yKGBFcnJvciByZWdpc3RlcmluZyAke2V9OmAsdCl9fX07Y29uc3QgdD1qKHt9LEYsZSk7dGhpcy5jb25maWc9dH1hc3luYyBpbml0aWFsaXplV29ya2Zsb3coZSl7Tih0aGlzLEQsXCJmXCIpLmFkZChlKX19RD1uZXcgV2Vha01hcDt2YXIgVz17ODc2OmU9Pntjb25zdHtBYm9ydENvbnRyb2xsZXI6dCxBYm9ydFNpZ25hbDpufT1cInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnZvaWQgMDtlLmV4cG9ydHM9dCxlLmV4cG9ydHMuQWJvcnRTaWduYWw9bixlLmV4cG9ydHMuZGVmYXVsdD10fSw2MDooZSx0KT0+e3QuYnl0ZUxlbmd0aD1mdW5jdGlvbihlKXt2YXIgdD1sKGUpLG49dFswXSxyPXRbMV07cmV0dXJuIDMqKG4rcikvNC1yfSx0LnRvQnl0ZUFycmF5PWZ1bmN0aW9uKGUpe3ZhciB0LG4saT1sKGUpLGE9aVswXSxzPWlbMV0sYz1uZXcgbyhmdW5jdGlvbihlLHQsbil7cmV0dXJuIDMqKHQrbikvNC1ufSgwLGEscykpLHU9MCxmPXM+MD9hLTQ6YTtmb3Iobj0wO248ZjtuKz00KXQ9cltlLmNoYXJDb2RlQXQobildPDwxOHxyW2UuY2hhckNvZGVBdChuKzEpXTw8MTJ8cltlLmNoYXJDb2RlQXQobisyKV08PDZ8cltlLmNoYXJDb2RlQXQobiszKV0sY1t1KytdPXQ+PjE2JjI1NSxjW3UrK109dD4+OCYyNTUsY1t1KytdPTI1NSZ0O3JldHVybiAyPT09cyYmKHQ9cltlLmNoYXJDb2RlQXQobildPDwyfHJbZS5jaGFyQ29kZUF0KG4rMSldPj40LGNbdSsrXT0yNTUmdCksMT09PXMmJih0PXJbZS5jaGFyQ29kZUF0KG4pXTw8MTB8cltlLmNoYXJDb2RlQXQobisxKV08PDR8cltlLmNoYXJDb2RlQXQobisyKV0+PjIsY1t1KytdPXQ+PjgmMjU1LGNbdSsrXT0yNTUmdCksY30sdC5mcm9tQnl0ZUFycmF5PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPWUubGVuZ3RoLG89ciUzLGk9W10sYT0xNjM4MyxsPTAsYz1yLW87bDxjO2wrPWEpaS5wdXNoKHMoZSxsLGwrYT5jP2M6bCthKSk7cmV0dXJuIDE9PT1vPyh0PWVbci0xXSxpLnB1c2goblt0Pj4yXStuW3Q8PDQmNjNdK1wiPT1cIikpOjI9PT1vJiYodD0oZVtyLTJdPDw4KStlW3ItMV0saS5wdXNoKG5bdD4+MTBdK25bdD4+NCY2M10rblt0PDwyJjYzXStcIj1cIikpLGkuam9pbihcIlwiKX07Zm9yKHZhciBuPVtdLHI9W10sbz1cInVuZGVmaW5lZFwiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LGk9XCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvXCIsYT0wO2E8NjQ7KythKW5bYV09aVthXSxyW2kuY2hhckNvZGVBdChhKV09YTtmdW5jdGlvbiBsKGUpe3ZhciB0PWUubGVuZ3RoO2lmKHQlND4wKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDRcIik7dmFyIG49ZS5pbmRleE9mKFwiPVwiKTtyZXR1cm4tMT09PW4mJihuPXQpLFtuLG49PT10PzA6NC1uJTRdfWZ1bmN0aW9uIHMoZSx0LHIpe2Zvcih2YXIgbyxpLGE9W10sbD10O2w8cjtsKz0zKW89KGVbbF08PDE2JjE2NzExNjgwKSsoZVtsKzFdPDw4JjY1MjgwKSsoMjU1JmVbbCsyXSksYS5wdXNoKG5bKGk9byk+PjE4JjYzXStuW2k+PjEyJjYzXStuW2k+PjYmNjNdK25bNjMmaV0pO3JldHVybiBhLmpvaW4oXCJcIil9cltcIi1cIi5jaGFyQ29kZUF0KDApXT02MixyW1wiX1wiLmNoYXJDb2RlQXQoMCldPTYzfSw0ODU6KGUsdCxuKT0+e2NvbnN0IHI9big2MCksbz1uKDIxNSksaT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbC5mb3I/U3ltYm9sLmZvcihcIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tXCIpOm51bGw7dC5CdWZmZXI9cyx0LlNsb3dCdWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuK2UhPWUmJihlPTApLHMuYWxsb2MoK2UpfSx0LklOU1BFQ1RfTUFYX0JZVEVTPTUwO2NvbnN0IGE9MjE0NzQ4MzY0NztmdW5jdGlvbiBsKGUpe2lmKGU+YSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIFwiJytlKydcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKTtjb25zdCB0PW5ldyBVaW50OEFycmF5KGUpO3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YodCxzLnByb3RvdHlwZSksdH1mdW5jdGlvbiBzKGUsdCxuKXtpZihcIm51bWJlclwiPT10eXBlb2YgZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwic3RyaW5nXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtyZXR1cm4gZihlKX1yZXR1cm4gYyhlLHQsbil9ZnVuY3Rpb24gYyhlLHQsbil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQmJlwiXCIhPT10fHwodD1cInV0ZjhcIiksIXMuaXNFbmNvZGluZyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrdCk7Y29uc3Qgbj0wfGcoZSx0KTtsZXQgcj1sKG4pO2NvbnN0IG89ci53cml0ZShlLHQpO3JldHVybiBvIT09biYmKHI9ci5zbGljZSgwLG8pKSxyfShlLHQpO2lmKEFycmF5QnVmZmVyLmlzVmlldyhlKSlyZXR1cm4gZnVuY3Rpb24oZSl7aWYoWShlLFVpbnQ4QXJyYXkpKXtjb25zdCB0PW5ldyBVaW50OEFycmF5KGUpO3JldHVybiBwKHQuYnVmZmVyLHQuYnl0ZU9mZnNldCx0LmJ5dGVMZW5ndGgpfXJldHVybiBkKGUpfShlKTtpZihudWxsPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSBcIit0eXBlb2YgZSk7aWYoWShlLEFycmF5QnVmZmVyKXx8ZSYmWShlLmJ1ZmZlcixBcnJheUJ1ZmZlcikpcmV0dXJuIHAoZSx0LG4pO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciYmKFkoZSxTaGFyZWRBcnJheUJ1ZmZlcil8fGUmJlkoZS5idWZmZXIsU2hhcmVkQXJyYXlCdWZmZXIpKSlyZXR1cm4gcChlLHQsbik7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwidmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtjb25zdCByPWUudmFsdWVPZiYmZS52YWx1ZU9mKCk7aWYobnVsbCE9ciYmciE9PWUpcmV0dXJuIHMuZnJvbShyLHQsbik7Y29uc3Qgbz1mdW5jdGlvbihlKXtpZihzLmlzQnVmZmVyKGUpKXtjb25zdCB0PTB8aChlLmxlbmd0aCksbj1sKHQpO3JldHVybiAwPT09bi5sZW5ndGh8fGUuY29weShuLDAsMCx0KSxufXJldHVybiB2b2lkIDAhPT1lLmxlbmd0aD9cIm51bWJlclwiIT10eXBlb2YgZS5sZW5ndGh8fEsoZS5sZW5ndGgpP2woMCk6ZChlKTpcIkJ1ZmZlclwiPT09ZS50eXBlJiZBcnJheS5pc0FycmF5KGUuZGF0YSk/ZChlLmRhdGEpOnZvaWQgMH0oZSk7aWYobylyZXR1cm4gbztpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1TeW1ib2wudG9QcmltaXRpdmUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGVbU3ltYm9sLnRvUHJpbWl0aXZlXSlyZXR1cm4gcy5mcm9tKGVbU3ltYm9sLnRvUHJpbWl0aXZlXShcInN0cmluZ1wiKSx0LG4pO3Rocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSBcIit0eXBlb2YgZSl9ZnVuY3Rpb24gdShlKXtpZihcIm51bWJlclwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyJyk7aWYoZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgXCInK2UrJ1wiIGlzIGludmFsaWQgZm9yIG9wdGlvbiBcInNpemVcIicpfWZ1bmN0aW9uIGYoZSl7cmV0dXJuIHUoZSksbChlPDA/MDowfGgoZSkpfWZ1bmN0aW9uIGQoZSl7Y29uc3QgdD1lLmxlbmd0aDwwPzA6MHxoKGUubGVuZ3RoKSxuPWwodCk7Zm9yKGxldCByPTA7cjx0O3IrPTEpbltyXT0yNTUmZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBwKGUsdCxuKXtpZih0PDB8fGUuYnl0ZUxlbmd0aDx0KXRocm93IG5ldyBSYW5nZUVycm9yKCdcIm9mZnNldFwiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO2lmKGUuYnl0ZUxlbmd0aDx0KyhufHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJsZW5ndGhcIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTtsZXQgcjtyZXR1cm4gcj12b2lkIDA9PT10JiZ2b2lkIDA9PT1uP25ldyBVaW50OEFycmF5KGUpOnZvaWQgMD09PW4/bmV3IFVpbnQ4QXJyYXkoZSx0KTpuZXcgVWludDhBcnJheShlLHQsbiksT2JqZWN0LnNldFByb3RvdHlwZU9mKHIscy5wcm90b3R5cGUpLHJ9ZnVuY3Rpb24gaChlKXtpZihlPj1hKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweFwiK2EudG9TdHJpbmcoMTYpK1wiIGJ5dGVzXCIpO3JldHVybiAwfGV9ZnVuY3Rpb24gZyhlLHQpe2lmKHMuaXNCdWZmZXIoZSkpcmV0dXJuIGUubGVuZ3RoO2lmKEFycmF5QnVmZmVyLmlzVmlldyhlKXx8WShlLEFycmF5QnVmZmVyKSlyZXR1cm4gZS5ieXRlTGVuZ3RoO2lmKFwic3RyaW5nXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInN0cmluZ1wiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIG9yIEFycmF5QnVmZmVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIGUpO2NvbnN0IG49ZS5sZW5ndGgscj1hcmd1bWVudHMubGVuZ3RoPjImJiEwPT09YXJndW1lbnRzWzJdO2lmKCFyJiYwPT09bilyZXR1cm4gMDtsZXQgbz0hMTtmb3IoOzspc3dpdGNoKHQpe2Nhc2VcImFzY2lpXCI6Y2FzZVwibGF0aW4xXCI6Y2FzZVwiYmluYXJ5XCI6cmV0dXJuIG47Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuIHooZSkubGVuZ3RoO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiAyKm47Y2FzZVwiaGV4XCI6cmV0dXJuIG4+Pj4xO2Nhc2VcImJhc2U2NFwiOnJldHVybiBHKGUpLmxlbmd0aDtkZWZhdWx0OmlmKG8pcmV0dXJuIHI/LTE6eihlKS5sZW5ndGg7dD0oXCJcIit0KS50b0xvd2VyQ2FzZSgpLG89ITB9fWZ1bmN0aW9uIHYoZSx0LG4pe2xldCByPSExO2lmKCh2b2lkIDA9PT10fHx0PDApJiYodD0wKSx0PnRoaXMubGVuZ3RoKXJldHVyblwiXCI7aWYoKHZvaWQgMD09PW58fG4+dGhpcy5sZW5ndGgpJiYobj10aGlzLmxlbmd0aCksbjw9MClyZXR1cm5cIlwiO2lmKChuPj4+PTApPD0odD4+Pj0wKSlyZXR1cm5cIlwiO2ZvcihlfHwoZT1cInV0ZjhcIik7Oylzd2l0Y2goZSl7Y2FzZVwiaGV4XCI6cmV0dXJuIGsodGhpcyx0LG4pO2Nhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOnJldHVybiBFKHRoaXMsdCxuKTtjYXNlXCJhc2NpaVwiOnJldHVybiBqKHRoaXMsdCxuKTtjYXNlXCJsYXRpbjFcIjpjYXNlXCJiaW5hcnlcIjpyZXR1cm4gTSh0aGlzLHQsbik7Y2FzZVwiYmFzZTY0XCI6cmV0dXJuIEwodGhpcyx0LG4pO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiBSKHRoaXMsdCxuKTtkZWZhdWx0OmlmKHIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK2UpO2U9KGUrXCJcIikudG9Mb3dlckNhc2UoKSxyPSEwfX1mdW5jdGlvbiBtKGUsdCxuKXtjb25zdCByPWVbdF07ZVt0XT1lW25dLGVbbl09cn1mdW5jdGlvbiBDKGUsdCxuLHIsbyl7aWYoMD09PWUubGVuZ3RoKXJldHVybi0xO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuPyhyPW4sbj0wKTpuPjIxNDc0ODM2NDc/bj0yMTQ3NDgzNjQ3Om48LTIxNDc0ODM2NDgmJihuPS0yMTQ3NDgzNjQ4KSxLKG49K24pJiYobj1vPzA6ZS5sZW5ndGgtMSksbjwwJiYobj1lLmxlbmd0aCtuKSxuPj1lLmxlbmd0aCl7aWYobylyZXR1cm4tMTtuPWUubGVuZ3RoLTF9ZWxzZSBpZihuPDApe2lmKCFvKXJldHVybi0xO249MH1pZihcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9cy5mcm9tKHQscikpLHMuaXNCdWZmZXIodCkpcmV0dXJuIDA9PT10Lmxlbmd0aD8tMTp5KGUsdCxuLHIsbyk7aWYoXCJudW1iZXJcIj09dHlwZW9mIHQpcmV0dXJuIHQmPTI1NSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP28/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGUsdCxuKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGUsdCxuKTp5KGUsW3RdLG4scixvKTt0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyXCIpfWZ1bmN0aW9uIHkoZSx0LG4scixvKXtsZXQgaSxhPTEsbD1lLmxlbmd0aCxzPXQubGVuZ3RoO2lmKHZvaWQgMCE9PXImJihcInVjczJcIj09PShyPVN0cmluZyhyKS50b0xvd2VyQ2FzZSgpKXx8XCJ1Y3MtMlwiPT09cnx8XCJ1dGYxNmxlXCI9PT1yfHxcInV0Zi0xNmxlXCI9PT1yKSl7aWYoZS5sZW5ndGg8Mnx8dC5sZW5ndGg8MilyZXR1cm4tMTthPTIsbC89MixzLz0yLG4vPTJ9ZnVuY3Rpb24gYyhlLHQpe3JldHVybiAxPT09YT9lW3RdOmUucmVhZFVJbnQxNkJFKHQqYSl9aWYobyl7bGV0IHI9LTE7Zm9yKGk9bjtpPGw7aSsrKWlmKGMoZSxpKT09PWModCwtMT09PXI/MDppLXIpKXtpZigtMT09PXImJihyPWkpLGktcisxPT09cylyZXR1cm4gciphfWVsc2UtMSE9PXImJihpLT1pLXIpLHI9LTF9ZWxzZSBmb3IobitzPmwmJihuPWwtcyksaT1uO2k+PTA7aS0tKXtsZXQgbj0hMDtmb3IobGV0IHI9MDtyPHM7cisrKWlmKGMoZSxpK3IpIT09Yyh0LHIpKXtuPSExO2JyZWFrfWlmKG4pcmV0dXJuIGl9cmV0dXJuLTF9ZnVuY3Rpb24gdyhlLHQsbixyKXtuPU51bWJlcihuKXx8MDtjb25zdCBvPWUubGVuZ3RoLW47cj8ocj1OdW1iZXIocikpPm8mJihyPW8pOnI9bztjb25zdCBpPXQubGVuZ3RoO2xldCBhO2ZvcihyPmkvMiYmKHI9aS8yKSxhPTA7YTxyOysrYSl7Y29uc3Qgcj1wYXJzZUludCh0LnN1YnN0cigyKmEsMiksMTYpO2lmKEsocikpcmV0dXJuIGE7ZVtuK2FdPXJ9cmV0dXJuIGF9ZnVuY3Rpb24gYihlLHQsbixyKXtyZXR1cm4gcSh6KHQsZS5sZW5ndGgtbiksZSxuLHIpfWZ1bmN0aW9uIHgoZSx0LG4scil7cmV0dXJuIHEoZnVuY3Rpb24oZSl7Y29uc3QgdD1bXTtmb3IobGV0IG49MDtuPGUubGVuZ3RoOysrbil0LnB1c2goMjU1JmUuY2hhckNvZGVBdChuKSk7cmV0dXJuIHR9KHQpLGUsbixyKX1mdW5jdGlvbiBfKGUsdCxuLHIpe3JldHVybiBxKEcodCksZSxuLHIpfWZ1bmN0aW9uIE8oZSx0LG4scil7cmV0dXJuIHEoZnVuY3Rpb24oZSx0KXtsZXQgbixyLG87Y29uc3QgaT1bXTtmb3IobGV0IGE9MDthPGUubGVuZ3RoJiYhKCh0LT0yKTwwKTsrK2Epbj1lLmNoYXJDb2RlQXQoYSkscj1uPj44LG89biUyNTYsaS5wdXNoKG8pLGkucHVzaChyKTtyZXR1cm4gaX0odCxlLmxlbmd0aC1uKSxlLG4scil9ZnVuY3Rpb24gTChlLHQsbil7cmV0dXJuIDA9PT10JiZuPT09ZS5sZW5ndGg/ci5mcm9tQnl0ZUFycmF5KGUpOnIuZnJvbUJ5dGVBcnJheShlLnNsaWNlKHQsbikpfWZ1bmN0aW9uIEUoZSx0LG4pe249TWF0aC5taW4oZS5sZW5ndGgsbik7Y29uc3Qgcj1bXTtsZXQgbz10O2Zvcig7bzxuOyl7Y29uc3QgdD1lW29dO2xldCBpPW51bGwsYT10PjIzOT80OnQ+MjIzPzM6dD4xOTE/MjoxO2lmKG8rYTw9bil7bGV0IG4scixsLHM7c3dpdGNoKGEpe2Nhc2UgMTp0PDEyOCYmKGk9dCk7YnJlYWs7Y2FzZSAyOm49ZVtvKzFdLDEyOD09KDE5MiZuKSYmKHM9KDMxJnQpPDw2fDYzJm4scz4xMjcmJihpPXMpKTticmVhaztjYXNlIDM6bj1lW28rMV0scj1lW28rMl0sMTI4PT0oMTkyJm4pJiYxMjg9PSgxOTImcikmJihzPSgxNSZ0KTw8MTJ8KDYzJm4pPDw2fDYzJnIscz4yMDQ3JiYoczw1NTI5Nnx8cz41NzM0MykmJihpPXMpKTticmVhaztjYXNlIDQ6bj1lW28rMV0scj1lW28rMl0sbD1lW28rM10sMTI4PT0oMTkyJm4pJiYxMjg9PSgxOTImcikmJjEyOD09KDE5MiZsKSYmKHM9KDE1JnQpPDwxOHwoNjMmbik8PDEyfCg2MyZyKTw8Nnw2MyZsLHM+NjU1MzUmJnM8MTExNDExMiYmKGk9cykpfX1udWxsPT09aT8oaT02NTUzMyxhPTEpOmk+NjU1MzUmJihpLT02NTUzNixyLnB1c2goaT4+PjEwJjEwMjN8NTUyOTYpLGk9NTYzMjB8MTAyMyZpKSxyLnB1c2goaSksbys9YX1yZXR1cm4gZnVuY3Rpb24oZSl7Y29uc3QgdD1lLmxlbmd0aDtpZih0PD1TKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlKTtsZXQgbj1cIlwiLHI9MDtmb3IoO3I8dDspbis9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZS5zbGljZShyLHIrPVMpKTtyZXR1cm4gbn0ocil9dC5rTWF4TGVuZ3RoPWEscy5UWVBFRF9BUlJBWV9TVVBQT1JUPWZ1bmN0aW9uKCl7dHJ5e2NvbnN0IGU9bmV3IFVpbnQ4QXJyYXkoMSksdD17Zm9vOmZ1bmN0aW9uKCl7cmV0dXJuIDQyfX07cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZih0LFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KSw0Mj09PWUuZm9vKCl9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLHMuVFlQRURfQVJSQVlfU1VQUE9SVHx8XCJ1bmRlZmluZWRcIj09dHlwZW9mIGNvbnNvbGV8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGNvbnNvbGUuZXJyb3J8fGNvbnNvbGUuZXJyb3IoXCJUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC5cIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHMucHJvdG90eXBlLFwicGFyZW50XCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYocy5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5idWZmZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHMucHJvdG90eXBlLFwib2Zmc2V0XCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYocy5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5ieXRlT2Zmc2V0fX0pLHMucG9vbFNpemU9ODE5MixzLmZyb209ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBjKGUsdCxuKX0sT2JqZWN0LnNldFByb3RvdHlwZU9mKHMucHJvdG90eXBlLFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YocyxVaW50OEFycmF5KSxzLmFsbG9jPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiB1KGUpLGU8PTA/bChlKTp2b2lkIDAhPT10P1wic3RyaW5nXCI9PXR5cGVvZiBuP2woZSkuZmlsbCh0LG4pOmwoZSkuZmlsbCh0KTpsKGUpfShlLHQsbil9LHMuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGYoZSl9LHMuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe3JldHVybiBmKGUpfSxzLmlzQnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lJiYhMD09PWUuX2lzQnVmZmVyJiZlIT09cy5wcm90b3R5cGV9LHMuY29tcGFyZT1mdW5jdGlvbihlLHQpe2lmKFkoZSxVaW50OEFycmF5KSYmKGU9cy5mcm9tKGUsZS5vZmZzZXQsZS5ieXRlTGVuZ3RoKSksWSh0LFVpbnQ4QXJyYXkpJiYodD1zLmZyb20odCx0Lm9mZnNldCx0LmJ5dGVMZW5ndGgpKSwhcy5pc0J1ZmZlcihlKXx8IXMuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiYnVmMVwiLCBcImJ1ZjJcIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKGU9PT10KXJldHVybiAwO2xldCBuPWUubGVuZ3RoLHI9dC5sZW5ndGg7Zm9yKGxldCBvPTAsaT1NYXRoLm1pbihuLHIpO288aTsrK28paWYoZVtvXSE9PXRbb10pe249ZVtvXSxyPXRbb107YnJlYWt9cmV0dXJuIG48cj8tMTpyPG4/MTowfSxzLmlzRW5jb2Rpbmc9ZnVuY3Rpb24oZSl7c3dpdGNoKFN0cmluZyhlKS50b0xvd2VyQ2FzZSgpKXtjYXNlXCJoZXhcIjpjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpjYXNlXCJhc2NpaVwiOmNhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOmNhc2VcImJhc2U2NFwiOmNhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxzLmNvbmNhdD1mdW5jdGlvbihlLHQpe2lmKCFBcnJheS5pc0FycmF5KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gcy5hbGxvYygwKTtsZXQgbjtpZih2b2lkIDA9PT10KWZvcih0PTAsbj0wO248ZS5sZW5ndGg7KytuKXQrPWVbbl0ubGVuZ3RoO2NvbnN0IHI9cy5hbGxvY1Vuc2FmZSh0KTtsZXQgbz0wO2ZvcihuPTA7bjxlLmxlbmd0aDsrK24pe2xldCB0PWVbbl07aWYoWSh0LFVpbnQ4QXJyYXkpKW8rdC5sZW5ndGg+ci5sZW5ndGg/KHMuaXNCdWZmZXIodCl8fCh0PXMuZnJvbSh0KSksdC5jb3B5KHIsbykpOlVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKHIsdCxvKTtlbHNle2lmKCFzLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO3QuY29weShyLG8pfW8rPXQubGVuZ3RofXJldHVybiByfSxzLmJ5dGVMZW5ndGg9ZyxzLnByb3RvdHlwZS5faXNCdWZmZXI9ITAscy5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7Y29uc3QgZT10aGlzLmxlbmd0aDtpZihlJTIhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0c1wiKTtmb3IobGV0IHQ9MDt0PGU7dCs9MiltKHRoaXMsdCx0KzEpO3JldHVybiB0aGlzfSxzLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXtjb25zdCBlPXRoaXMubGVuZ3RoO2lmKGUlNCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzXCIpO2ZvcihsZXQgdD0wO3Q8ZTt0Kz00KW0odGhpcyx0LHQrMyksbSh0aGlzLHQrMSx0KzIpO3JldHVybiB0aGlzfSxzLnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXtjb25zdCBlPXRoaXMubGVuZ3RoO2lmKGUlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzXCIpO2ZvcihsZXQgdD0wO3Q8ZTt0Kz04KW0odGhpcyx0LHQrNyksbSh0aGlzLHQrMSx0KzYpLG0odGhpcyx0KzIsdCs1KSxtKHRoaXMsdCszLHQrNCk7cmV0dXJuIHRoaXN9LHMucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7Y29uc3QgZT10aGlzLmxlbmd0aDtyZXR1cm4gMD09PWU/XCJcIjowPT09YXJndW1lbnRzLmxlbmd0aD9FKHRoaXMsMCxlKTp2LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0scy5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmc9cy5wcm90b3R5cGUudG9TdHJpbmcscy5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe2lmKCFzLmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyXCIpO3JldHVybiB0aGlzPT09ZXx8MD09PXMuY29tcGFyZSh0aGlzLGUpfSxzLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7bGV0IGU9XCJcIjtjb25zdCBuPXQuSU5TUEVDVF9NQVhfQllURVM7cmV0dXJuIGU9dGhpcy50b1N0cmluZyhcImhleFwiLDAsbikucmVwbGFjZSgvKC57Mn0pL2csXCIkMSBcIikudHJpbSgpLHRoaXMubGVuZ3RoPm4mJihlKz1cIiAuLi4gXCIpLFwiPEJ1ZmZlciBcIitlK1wiPlwifSxpJiYocy5wcm90b3R5cGVbaV09cy5wcm90b3R5cGUuaW5zcGVjdCkscy5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihlLHQsbixyLG8pe2lmKFkoZSxVaW50OEFycmF5KSYmKGU9cy5mcm9tKGUsZS5vZmZzZXQsZS5ieXRlTGVuZ3RoKSksIXMuaXNCdWZmZXIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwidGFyZ2V0XCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBlKTtpZih2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1uJiYobj1lP2UubGVuZ3RoOjApLHZvaWQgMD09PXImJihyPTApLHZvaWQgMD09PW8mJihvPXRoaXMubGVuZ3RoKSx0PDB8fG4+ZS5sZW5ndGh8fHI8MHx8bz50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIm91dCBvZiByYW5nZSBpbmRleFwiKTtpZihyPj1vJiZ0Pj1uKXJldHVybiAwO2lmKHI+PW8pcmV0dXJuLTE7aWYodD49bilyZXR1cm4gMTtpZih0aGlzPT09ZSlyZXR1cm4gMDtsZXQgaT0obz4+Pj0wKS0ocj4+Pj0wKSxhPShuPj4+PTApLSh0Pj4+PTApO2NvbnN0IGw9TWF0aC5taW4oaSxhKSxjPXRoaXMuc2xpY2UocixvKSx1PWUuc2xpY2UodCxuKTtmb3IobGV0IGU9MDtlPGw7KytlKWlmKGNbZV0hPT11W2VdKXtpPWNbZV0sYT11W2VdO2JyZWFrfXJldHVybiBpPGE/LTE6YTxpPzE6MH0scy5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybi0xIT09dGhpcy5pbmRleE9mKGUsdCxuKX0scy5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIEModGhpcyxlLHQsbiwhMCl9LHMucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gQyh0aGlzLGUsdCxuLCExKX0scy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSx0LG4scil7aWYodm9pZCAwPT09dClyPVwidXRmOFwiLG49dGhpcy5sZW5ndGgsdD0wO2Vsc2UgaWYodm9pZCAwPT09biYmXCJzdHJpbmdcIj09dHlwZW9mIHQpcj10LG49dGhpcy5sZW5ndGgsdD0wO2Vsc2V7aWYoIWlzRmluaXRlKHQpKXRocm93IG5ldyBFcnJvcihcIkJ1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkXCIpO3Q+Pj49MCxpc0Zpbml0ZShuKT8obj4+Pj0wLHZvaWQgMD09PXImJihyPVwidXRmOFwiKSk6KHI9bixuPXZvaWQgMCl9Y29uc3Qgbz10aGlzLmxlbmd0aC10O2lmKCh2b2lkIDA9PT1ufHxuPm8pJiYobj1vKSxlLmxlbmd0aD4wJiYobjwwfHx0PDApfHx0PnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHNcIik7cnx8KHI9XCJ1dGY4XCIpO2xldCBpPSExO2Zvcig7Oylzd2l0Y2gocil7Y2FzZVwiaGV4XCI6cmV0dXJuIHcodGhpcyxlLHQsbik7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuIGIodGhpcyxlLHQsbik7Y2FzZVwiYXNjaWlcIjpjYXNlXCJsYXRpbjFcIjpjYXNlXCJiaW5hcnlcIjpyZXR1cm4geCh0aGlzLGUsdCxuKTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4gXyh0aGlzLGUsdCxuKTtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4gTyh0aGlzLGUsdCxuKTtkZWZhdWx0OmlmKGkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK3IpO3I9KFwiXCIrcikudG9Mb3dlckNhc2UoKSxpPSEwfX0scy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6XCJCdWZmZXJcIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O2NvbnN0IFM9NDA5NjtmdW5jdGlvbiBqKGUsdCxuKXtsZXQgcj1cIlwiO249TWF0aC5taW4oZS5sZW5ndGgsbik7Zm9yKGxldCBvPXQ7bzxuOysrbylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZlW29dKTtyZXR1cm4gcn1mdW5jdGlvbiBNKGUsdCxuKXtsZXQgcj1cIlwiO249TWF0aC5taW4oZS5sZW5ndGgsbik7Zm9yKGxldCBvPXQ7bzxuOysrbylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVbb10pO3JldHVybiByfWZ1bmN0aW9uIGsoZSx0LG4pe2NvbnN0IHI9ZS5sZW5ndGg7KCF0fHx0PDApJiYodD0wKSwoIW58fG48MHx8bj5yKSYmKG49cik7bGV0IG89XCJcIjtmb3IobGV0IHI9dDtyPG47KytyKW8rPVhbZVtyXV07cmV0dXJuIG99ZnVuY3Rpb24gUihlLHQsbil7Y29uc3Qgcj1lLnNsaWNlKHQsbik7bGV0IG89XCJcIjtmb3IobGV0IGU9MDtlPHIubGVuZ3RoLTE7ZSs9MilvKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHJbZV0rMjU2KnJbZSsxXSk7cmV0dXJuIG99ZnVuY3Rpb24gUChlLHQsbil7aWYoZSUxIT0wfHxlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJvZmZzZXQgaXMgbm90IHVpbnRcIik7aWYoZSt0Pm4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoXCIpfWZ1bmN0aW9uIEkoZSx0LG4scixvLGkpe2lmKCFzLmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKHQ+b3x8dDxpKXRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKG4rcj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkluZGV4IG91dCBvZiByYW5nZVwiKX1mdW5jdGlvbiBBKGUsdCxuLHIsbyl7Tih0LHIsbyxlLG4sNyk7bGV0IGk9TnVtYmVyKHQmQmlnSW50KDQyOTQ5NjcyOTUpKTtlW24rK109aSxpPj49OCxlW24rK109aSxpPj49OCxlW24rK109aSxpPj49OCxlW24rK109aTtsZXQgYT1OdW1iZXIodD4+QmlnSW50KDMyKSZCaWdJbnQoNDI5NDk2NzI5NSkpO3JldHVybiBlW24rK109YSxhPj49OCxlW24rK109YSxhPj49OCxlW24rK109YSxhPj49OCxlW24rK109YSxufWZ1bmN0aW9uIFQoZSx0LG4scixvKXtOKHQscixvLGUsbiw3KTtsZXQgaT1OdW1iZXIodCZCaWdJbnQoNDI5NDk2NzI5NSkpO2Vbbis3XT1pLGk+Pj04LGVbbis2XT1pLGk+Pj04LGVbbis1XT1pLGk+Pj04LGVbbis0XT1pO2xldCBhPU51bWJlcih0Pj5CaWdJbnQoMzIpJkJpZ0ludCg0Mjk0OTY3Mjk1KSk7cmV0dXJuIGVbbiszXT1hLGE+Pj04LGVbbisyXT1hLGE+Pj04LGVbbisxXT1hLGE+Pj04LGVbbl09YSxuKzh9ZnVuY3Rpb24gSChlLHQsbixyLG8saSl7aWYobityPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW5kZXggb3V0IG9mIHJhbmdlXCIpO2lmKG48MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkluZGV4IG91dCBvZiByYW5nZVwiKX1mdW5jdGlvbiBCKGUsdCxuLHIsaSl7cmV0dXJuIHQ9K3Qsbj4+Pj0wLGl8fEgoZSwwLG4sNCksby53cml0ZShlLHQsbixyLDIzLDQpLG4rNH1mdW5jdGlvbiBWKGUsdCxuLHIsaSl7cmV0dXJuIHQ9K3Qsbj4+Pj0wLGl8fEgoZSwwLG4sOCksby53cml0ZShlLHQsbixyLDUyLDgpLG4rOH1zLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihlLHQpe2NvbnN0IG49dGhpcy5sZW5ndGg7KGU9fn5lKTwwPyhlKz1uKTwwJiYoZT0wKTplPm4mJihlPW4pLCh0PXZvaWQgMD09PXQ/bjp+fnQpPDA/KHQrPW4pPDAmJih0PTApOnQ+biYmKHQ9biksdDxlJiYodD1lKTtjb25zdCByPXRoaXMuc3ViYXJyYXkoZSx0KTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHIscy5wcm90b3R5cGUpLHJ9LHMucHJvdG90eXBlLnJlYWRVaW50TEU9cy5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihlLHQsbil7ZT4+Pj0wLHQ+Pj49MCxufHxQKGUsdCx0aGlzLmxlbmd0aCk7bGV0IHI9dGhpc1tlXSxvPTEsaT0wO2Zvcig7KytpPHQmJihvKj0yNTYpOylyKz10aGlzW2UraV0qbztyZXR1cm4gcn0scy5wcm90b3R5cGUucmVhZFVpbnRCRT1zLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKGUsdCxuKXtlPj4+PTAsdD4+Pj0wLG58fFAoZSx0LHRoaXMubGVuZ3RoKTtsZXQgcj10aGlzW2UrLS10XSxvPTE7Zm9yKDt0PjAmJihvKj0yNTYpOylyKz10aGlzW2UrLS10XSpvO3JldHVybiByfSxzLnByb3RvdHlwZS5yZWFkVWludDg9cy5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU+Pj49MCx0fHxQKGUsMSx0aGlzLmxlbmd0aCksdGhpc1tlXX0scy5wcm90b3R5cGUucmVhZFVpbnQxNkxFPXMucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihlLHQpe3JldHVybiBlPj4+PTAsdHx8UChlLDIsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fSxzLnByb3RvdHlwZS5yZWFkVWludDE2QkU9cy5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU+Pj49MCx0fHxQKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXTw8OHx0aGlzW2UrMV19LHMucHJvdG90eXBlLnJlYWRVaW50MzJMRT1zLnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4+Pj0wLHR8fFAoZSw0LHRoaXMubGVuZ3RoKSwodGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNikrMTY3NzcyMTYqdGhpc1tlKzNdfSxzLnByb3RvdHlwZS5yZWFkVWludDMyQkU9cy5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU+Pj49MCx0fHxQKGUsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1tlXSsodGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdKX0scy5wcm90b3R5cGUucmVhZEJpZ1VJbnQ2NExFPUooKGZ1bmN0aW9uKGUpe0YoZT4+Pj0wLFwib2Zmc2V0XCIpO2NvbnN0IHQ9dGhpc1tlXSxuPXRoaXNbZSs3XTt2b2lkIDAhPT10JiZ2b2lkIDAhPT1ufHxVKGUsdGhpcy5sZW5ndGgtOCk7Y29uc3Qgcj10KzI1Nip0aGlzWysrZV0rNjU1MzYqdGhpc1srK2VdK3RoaXNbKytlXSoyKioyNCxvPXRoaXNbKytlXSsyNTYqdGhpc1srK2VdKzY1NTM2KnRoaXNbKytlXStuKjIqKjI0O3JldHVybiBCaWdJbnQocikrKEJpZ0ludChvKTw8QmlnSW50KDMyKSl9KSkscy5wcm90b3R5cGUucmVhZEJpZ1VJbnQ2NEJFPUooKGZ1bmN0aW9uKGUpe0YoZT4+Pj0wLFwib2Zmc2V0XCIpO2NvbnN0IHQ9dGhpc1tlXSxuPXRoaXNbZSs3XTt2b2lkIDAhPT10JiZ2b2lkIDAhPT1ufHxVKGUsdGhpcy5sZW5ndGgtOCk7Y29uc3Qgcj10KjIqKjI0KzY1NTM2KnRoaXNbKytlXSsyNTYqdGhpc1srK2VdK3RoaXNbKytlXSxvPXRoaXNbKytlXSoyKioyNCs2NTUzNip0aGlzWysrZV0rMjU2KnRoaXNbKytlXStuO3JldHVybihCaWdJbnQocik8PEJpZ0ludCgzMikpK0JpZ0ludChvKX0pKSxzLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24oZSx0LG4pe2U+Pj49MCx0Pj4+PTAsbnx8UChlLHQsdGhpcy5sZW5ndGgpO2xldCByPXRoaXNbZV0sbz0xLGk9MDtmb3IoOysraTx0JiYobyo9MjU2KTspcis9dGhpc1tlK2ldKm87cmV0dXJuIG8qPTEyOCxyPj1vJiYoci09TWF0aC5wb3coMiw4KnQpKSxyfSxzLnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24oZSx0LG4pe2U+Pj49MCx0Pj4+PTAsbnx8UChlLHQsdGhpcy5sZW5ndGgpO2xldCByPXQsbz0xLGk9dGhpc1tlKy0tcl07Zm9yKDtyPjAmJihvKj0yNTYpOylpKz10aGlzW2UrLS1yXSpvO3JldHVybiBvKj0xMjgsaT49byYmKGktPU1hdGgucG93KDIsOCp0KSksaX0scy5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4+Pj0wLHR8fFAoZSwxLHRoaXMubGVuZ3RoKSwxMjgmdGhpc1tlXT8tMSooMjU1LXRoaXNbZV0rMSk6dGhpc1tlXX0scy5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oZSx0KXtlPj4+PTAsdHx8UChlLDIsdGhpcy5sZW5ndGgpO2NvbnN0IG49dGhpc1tlXXx0aGlzW2UrMV08PDg7cmV0dXJuIDMyNzY4Jm4/NDI5NDkwMTc2MHxuOm59LHMucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7ZT4+Pj0wLHR8fFAoZSwyLHRoaXMubGVuZ3RoKTtjb25zdCBuPXRoaXNbZSsxXXx0aGlzW2VdPDw4O3JldHVybiAzMjc2OCZuPzQyOTQ5MDE3NjB8bjpufSxzLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiBlPj4+PTAsdHx8UChlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTZ8dGhpc1tlKzNdPDwyNH0scy5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4+Pj0wLHR8fFAoZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2VdPDwyNHx0aGlzW2UrMV08PDE2fHRoaXNbZSsyXTw8OHx0aGlzW2UrM119LHMucHJvdG90eXBlLnJlYWRCaWdJbnQ2NExFPUooKGZ1bmN0aW9uKGUpe0YoZT4+Pj0wLFwib2Zmc2V0XCIpO2NvbnN0IHQ9dGhpc1tlXSxuPXRoaXNbZSs3XTt2b2lkIDAhPT10JiZ2b2lkIDAhPT1ufHxVKGUsdGhpcy5sZW5ndGgtOCk7Y29uc3Qgcj10aGlzW2UrNF0rMjU2KnRoaXNbZSs1XSs2NTUzNip0aGlzW2UrNl0rKG48PDI0KTtyZXR1cm4oQmlnSW50KHIpPDxCaWdJbnQoMzIpKStCaWdJbnQodCsyNTYqdGhpc1srK2VdKzY1NTM2KnRoaXNbKytlXSt0aGlzWysrZV0qMioqMjQpfSkpLHMucHJvdG90eXBlLnJlYWRCaWdJbnQ2NEJFPUooKGZ1bmN0aW9uKGUpe0YoZT4+Pj0wLFwib2Zmc2V0XCIpO2NvbnN0IHQ9dGhpc1tlXSxuPXRoaXNbZSs3XTt2b2lkIDAhPT10JiZ2b2lkIDAhPT1ufHxVKGUsdGhpcy5sZW5ndGgtOCk7Y29uc3Qgcj0odDw8MjQpKzY1NTM2KnRoaXNbKytlXSsyNTYqdGhpc1srK2VdK3RoaXNbKytlXTtyZXR1cm4oQmlnSW50KHIpPDxCaWdJbnQoMzIpKStCaWdJbnQodGhpc1srK2VdKjIqKjI0KzY1NTM2KnRoaXNbKytlXSsyNTYqdGhpc1srK2VdK24pfSkpLHMucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU+Pj49MCx0fHxQKGUsNCx0aGlzLmxlbmd0aCksby5yZWFkKHRoaXMsZSwhMCwyMyw0KX0scy5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4+Pj0wLHR8fFAoZSw0LHRoaXMubGVuZ3RoKSxvLnJlYWQodGhpcyxlLCExLDIzLDQpfSxzLnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4+Pj0wLHR8fFAoZSw4LHRoaXMubGVuZ3RoKSxvLnJlYWQodGhpcyxlLCEwLDUyLDgpfSxzLnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4+Pj0wLHR8fFAoZSw4LHRoaXMubGVuZ3RoKSxvLnJlYWQodGhpcyxlLCExLDUyLDgpfSxzLnByb3RvdHlwZS53cml0ZVVpbnRMRT1zLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihlLHQsbixyKXtlPStlLHQ+Pj49MCxuPj4+PTAscnx8SSh0aGlzLGUsdCxuLE1hdGgucG93KDIsOCpuKS0xLDApO2xldCBvPTEsaT0wO2Zvcih0aGlzW3RdPTI1NSZlOysraTxuJiYobyo9MjU2KTspdGhpc1t0K2ldPWUvbyYyNTU7cmV0dXJuIHQrbn0scy5wcm90b3R5cGUud3JpdGVVaW50QkU9cy5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oZSx0LG4scil7ZT0rZSx0Pj4+PTAsbj4+Pj0wLHJ8fEkodGhpcyxlLHQsbixNYXRoLnBvdygyLDgqbiktMSwwKTtsZXQgbz1uLTEsaT0xO2Zvcih0aGlzW3Qrb109MjU1JmU7LS1vPj0wJiYoaSo9MjU2KTspdGhpc1t0K29dPWUvaSYyNTU7cmV0dXJuIHQrbn0scy5wcm90b3R5cGUud3JpdGVVaW50OD1zLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0Pj4+PTAsbnx8SSh0aGlzLGUsdCwxLDI1NSwwKSx0aGlzW3RdPTI1NSZlLHQrMX0scy5wcm90b3R5cGUud3JpdGVVaW50MTZMRT1zLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0Pj4+PTAsbnx8SSh0aGlzLGUsdCwyLDY1NTM1LDApLHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44LHQrMn0scy5wcm90b3R5cGUud3JpdGVVaW50MTZCRT1zLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0Pj4+PTAsbnx8SSh0aGlzLGUsdCwyLDY1NTM1LDApLHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlLHQrMn0scy5wcm90b3R5cGUud3JpdGVVaW50MzJMRT1zLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0Pj4+PTAsbnx8SSh0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksdGhpc1t0KzNdPWU+Pj4yNCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCsxXT1lPj4+OCx0aGlzW3RdPTI1NSZlLHQrNH0scy5wcm90b3R5cGUud3JpdGVVaW50MzJCRT1zLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0Pj4+PTAsbnx8SSh0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksdGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlLHQrNH0scy5wcm90b3R5cGUud3JpdGVCaWdVSW50NjRMRT1KKChmdW5jdGlvbihlLHQ9MCl7cmV0dXJuIEEodGhpcyxlLHQsQmlnSW50KDApLEJpZ0ludChcIjB4ZmZmZmZmZmZmZmZmZmZmZlwiKSl9KSkscy5wcm90b3R5cGUud3JpdGVCaWdVSW50NjRCRT1KKChmdW5jdGlvbihlLHQ9MCl7cmV0dXJuIFQodGhpcyxlLHQsQmlnSW50KDApLEJpZ0ludChcIjB4ZmZmZmZmZmZmZmZmZmZmZlwiKSl9KSkscy5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihlLHQsbixyKXtpZihlPStlLHQ+Pj49MCwhcil7Y29uc3Qgcj1NYXRoLnBvdygyLDgqbi0xKTtJKHRoaXMsZSx0LG4sci0xLC1yKX1sZXQgbz0wLGk9MSxhPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytvPG4mJihpKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28tMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9pPj4wKS1hJjI1NTtyZXR1cm4gdCtufSxzLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKGU9K2UsdD4+Pj0wLCFyKXtjb25zdCByPU1hdGgucG93KDIsOCpuLTEpO0kodGhpcyxlLHQsbixyLTEsLXIpfWxldCBvPW4tMSxpPTEsYT0wO2Zvcih0aGlzW3Qrb109MjU1JmU7LS1vPj0wJiYoaSo9MjU2KTspZTwwJiYwPT09YSYmMCE9PXRoaXNbdCtvKzFdJiYoYT0xKSx0aGlzW3Qrb109KGUvaT4+MCktYSYyNTU7cmV0dXJuIHQrbn0scy5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0Pj4+PTAsbnx8SSh0aGlzLGUsdCwxLDEyNywtMTI4KSxlPDAmJihlPTI1NStlKzEpLHRoaXNbdF09MjU1JmUsdCsxfSxzLnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHQ+Pj49MCxufHxJKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSx0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCx0KzJ9LHMucHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdD4+Pj0wLG58fEkodGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlLHQrMn0scy5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0Pj4+PTAsbnx8SSh0aGlzLGUsdCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44LHRoaXNbdCsyXT1lPj4+MTYsdGhpc1t0KzNdPWU+Pj4yNCx0KzR9LHMucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdD4+Pj0wLG58fEkodGhpcyxlLHQsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxlPDAmJihlPTQyOTQ5NjcyOTUrZSsxKSx0aGlzW3RdPWU+Pj4yNCx0aGlzW3QrMV09ZT4+PjE2LHRoaXNbdCsyXT1lPj4+OCx0aGlzW3QrM109MjU1JmUsdCs0fSxzLnByb3RvdHlwZS53cml0ZUJpZ0ludDY0TEU9SigoZnVuY3Rpb24oZSx0PTApe3JldHVybiBBKHRoaXMsZSx0LC1CaWdJbnQoXCIweDgwMDAwMDAwMDAwMDAwMDBcIiksQmlnSW50KFwiMHg3ZmZmZmZmZmZmZmZmZmZmXCIpKX0pKSxzLnByb3RvdHlwZS53cml0ZUJpZ0ludDY0QkU9SigoZnVuY3Rpb24oZSx0PTApe3JldHVybiBUKHRoaXMsZSx0LC1CaWdJbnQoXCIweDgwMDAwMDAwMDAwMDAwMDBcIiksQmlnSW50KFwiMHg3ZmZmZmZmZmZmZmZmZmZmXCIpKX0pKSxzLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBCKHRoaXMsZSx0LCEwLG4pfSxzLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBCKHRoaXMsZSx0LCExLG4pfSxzLnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gVih0aGlzLGUsdCwhMCxuKX0scy5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIFYodGhpcyxlLHQsITEsbil9LHMucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZSx0LG4scil7aWYoIXMuaXNCdWZmZXIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlclwiKTtpZihufHwobj0wKSxyfHwwPT09cnx8KHI9dGhpcy5sZW5ndGgpLHQ+PWUubGVuZ3RoJiYodD1lLmxlbmd0aCksdHx8KHQ9MCkscj4wJiZyPG4mJihyPW4pLHI9PT1uKXJldHVybiAwO2lmKDA9PT1lLmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAwO2lmKHQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHNcIik7aWYobjwwfHxuPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkluZGV4IG91dCBvZiByYW5nZVwiKTtpZihyPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kc1wiKTtyPnRoaXMubGVuZ3RoJiYocj10aGlzLmxlbmd0aCksZS5sZW5ndGgtdDxyLW4mJihyPWUubGVuZ3RoLXQrbik7Y29uc3Qgbz1yLW47cmV0dXJuIHRoaXM9PT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluP3RoaXMuY29weVdpdGhpbih0LG4scik6VWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoZSx0aGlzLnN1YmFycmF5KG4sciksdCksb30scy5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihlLHQsbixyKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQ/KHI9dCx0PTAsbj10aGlzLmxlbmd0aCk6XCJzdHJpbmdcIj09dHlwZW9mIG4mJihyPW4sbj10aGlzLmxlbmd0aCksdm9pZCAwIT09ciYmXCJzdHJpbmdcIiE9dHlwZW9mIHIpdGhyb3cgbmV3IFR5cGVFcnJvcihcImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmdcIik7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHImJiFzLmlzRW5jb2RpbmcocikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK3IpO2lmKDE9PT1lLmxlbmd0aCl7Y29uc3QgdD1lLmNoYXJDb2RlQXQoMCk7KFwidXRmOFwiPT09ciYmdDwxMjh8fFwibGF0aW4xXCI9PT1yKSYmKGU9dCl9fWVsc2VcIm51bWJlclwiPT10eXBlb2YgZT9lJj0yNTU6XCJib29sZWFuXCI9PXR5cGVvZiBlJiYoZT1OdW1iZXIoZSkpO2lmKHQ8MHx8dGhpcy5sZW5ndGg8dHx8dGhpcy5sZW5ndGg8bil0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIk91dCBvZiByYW5nZSBpbmRleFwiKTtpZihuPD10KXJldHVybiB0aGlzO2xldCBvO2lmKHQ+Pj49MCxuPXZvaWQgMD09PW4/dGhpcy5sZW5ndGg6bj4+PjAsZXx8KGU9MCksXCJudW1iZXJcIj09dHlwZW9mIGUpZm9yKG89dDtvPG47KytvKXRoaXNbb109ZTtlbHNle2NvbnN0IGk9cy5pc0J1ZmZlcihlKT9lOnMuZnJvbShlLHIpLGE9aS5sZW5ndGg7aWYoMD09PWEpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZhbHVlIFwiJytlKydcIiBpcyBpbnZhbGlkIGZvciBhcmd1bWVudCBcInZhbHVlXCInKTtmb3Iobz0wO288bi10Oysrbyl0aGlzW28rdF09aVtvJWFdfXJldHVybiB0aGlzfTtjb25zdCBEPXt9O2Z1bmN0aW9uIFooZSx0LG4pe0RbZV09Y2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcIm1lc3NhZ2VcIix7dmFsdWU6dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdGhpcy5uYW1lPWAke3RoaXMubmFtZX0gWyR7ZX1dYCx0aGlzLnN0YWNrLGRlbGV0ZSB0aGlzLm5hbWV9Z2V0IGNvZGUoKXtyZXR1cm4gZX1zZXQgY29kZShlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImNvZGVcIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6ZSx3cml0YWJsZTohMH0pfXRvU3RyaW5nKCl7cmV0dXJuYCR7dGhpcy5uYW1lfSBbJHtlfV06ICR7dGhpcy5tZXNzYWdlfWB9fX1mdW5jdGlvbiAkKGUpe2xldCB0PVwiXCIsbj1lLmxlbmd0aDtjb25zdCByPVwiLVwiPT09ZVswXT8xOjA7Zm9yKDtuPj1yKzQ7bi09Myl0PWBfJHtlLnNsaWNlKG4tMyxuKX0ke3R9YDtyZXR1cm5gJHtlLnNsaWNlKDAsbil9JHt0fWB9ZnVuY3Rpb24gTihlLHQsbixyLG8saSl7aWYoZT5ufHxlPHQpe2NvbnN0IHI9XCJiaWdpbnRcIj09dHlwZW9mIHQ/XCJuXCI6XCJcIjtsZXQgbzt0aHJvdyBvPWk+Mz8wPT09dHx8dD09PUJpZ0ludCgwKT9gPj0gMCR7cn0gYW5kIDwgMiR7cn0gKiogJHs4KihpKzEpfSR7cn1gOmA+PSAtKDIke3J9ICoqICR7OCooaSsxKS0xfSR7cn0pIGFuZCA8IDIgKiogJHs4KihpKzEpLTF9JHtyfWA6YD49ICR7dH0ke3J9IGFuZCA8PSAke259JHtyfWAsbmV3IEQuRVJSX09VVF9PRl9SQU5HRShcInZhbHVlXCIsbyxlKX0hZnVuY3Rpb24oZSx0LG4pe0YodCxcIm9mZnNldFwiKSx2b2lkIDAhPT1lW3RdJiZ2b2lkIDAhPT1lW3Qrbl18fFUodCxlLmxlbmd0aC0obisxKSl9KHIsbyxpKX1mdW5jdGlvbiBGKGUsdCl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEQuRVJSX0lOVkFMSURfQVJHX1RZUEUodCxcIm51bWJlclwiLGUpfWZ1bmN0aW9uIFUoZSx0LG4pe2lmKE1hdGguZmxvb3IoZSkhPT1lKXRocm93IEYoZSxuKSxuZXcgRC5FUlJfT1VUX09GX1JBTkdFKG58fFwib2Zmc2V0XCIsXCJhbiBpbnRlZ2VyXCIsZSk7aWYodDwwKXRocm93IG5ldyBELkVSUl9CVUZGRVJfT1VUX09GX0JPVU5EUzt0aHJvdyBuZXcgRC5FUlJfT1VUX09GX1JBTkdFKG58fFwib2Zmc2V0XCIsYD49ICR7bj8xOjB9IGFuZCA8PSAke3R9YCxlKX1aKFwiRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTXCIsKGZ1bmN0aW9uKGUpe3JldHVybiBlP2Ake2V9IGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kc2A6XCJBdHRlbXB0IHRvIGFjY2VzcyBtZW1vcnkgb3V0c2lkZSBidWZmZXIgYm91bmRzXCJ9KSxSYW5nZUVycm9yKSxaKFwiRVJSX0lOVkFMSURfQVJHX1RZUEVcIiwoZnVuY3Rpb24oZSx0KXtyZXR1cm5gVGhlIFwiJHtlfVwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgJHt0eXBlb2YgdH1gfSksVHlwZUVycm9yKSxaKFwiRVJSX09VVF9PRl9SQU5HRVwiLChmdW5jdGlvbihlLHQsbil7bGV0IHI9YFRoZSB2YWx1ZSBvZiBcIiR7ZX1cIiBpcyBvdXQgb2YgcmFuZ2UuYCxvPW47cmV0dXJuIE51bWJlci5pc0ludGVnZXIobikmJk1hdGguYWJzKG4pPjIqKjMyP289JChTdHJpbmcobikpOlwiYmlnaW50XCI9PXR5cGVvZiBuJiYobz1TdHJpbmcobiksKG4+QmlnSW50KDIpKipCaWdJbnQoMzIpfHxuPC0oQmlnSW50KDIpKipCaWdJbnQoMzIpKSkmJihvPSQobykpLG8rPVwiblwiKSxyKz1gIEl0IG11c3QgYmUgJHt0fS4gUmVjZWl2ZWQgJHtvfWAscn0pLFJhbmdlRXJyb3IpO2NvbnN0IFc9L1teKy8wLTlBLVphLXotX10vZztmdW5jdGlvbiB6KGUsdCl7bGV0IG47dD10fHwxLzA7Y29uc3Qgcj1lLmxlbmd0aDtsZXQgbz1udWxsO2NvbnN0IGk9W107Zm9yKGxldCBhPTA7YTxyOysrYSl7aWYobj1lLmNoYXJDb2RlQXQoYSksbj41NTI5NSYmbjw1NzM0NCl7aWYoIW8pe2lmKG4+NTYzMTkpeyh0LT0zKT4tMSYmaS5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihhKzE9PT1yKXsodC09Myk+LTEmJmkucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9bz1uO2NvbnRpbnVlfWlmKG48NTYzMjApeyh0LT0zKT4tMSYmaS5wdXNoKDIzOSwxOTEsMTg5KSxvPW47Y29udGludWV9bj02NTUzNisoby01NTI5Njw8MTB8bi01NjMyMCl9ZWxzZSBvJiYodC09Myk+LTEmJmkucHVzaCgyMzksMTkxLDE4OSk7aWYobz1udWxsLG48MTI4KXtpZigodC09MSk8MClicmVhaztpLnB1c2gobil9ZWxzZSBpZihuPDIwNDgpe2lmKCh0LT0yKTwwKWJyZWFrO2kucHVzaChuPj42fDE5Miw2MyZufDEyOCl9ZWxzZSBpZihuPDY1NTM2KXtpZigodC09Myk8MClicmVhaztpLnB1c2gobj4+MTJ8MjI0LG4+PjYmNjN8MTI4LDYzJm58MTI4KX1lbHNle2lmKCEobjwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNvZGUgcG9pbnRcIik7aWYoKHQtPTQpPDApYnJlYWs7aS5wdXNoKG4+PjE4fDI0MCxuPj4xMiY2M3wxMjgsbj4+NiY2M3wxMjgsNjMmbnwxMjgpfX1yZXR1cm4gaX1mdW5jdGlvbiBHKGUpe3JldHVybiByLnRvQnl0ZUFycmF5KGZ1bmN0aW9uKGUpe2lmKChlPShlPWUuc3BsaXQoXCI9XCIpWzBdKS50cmltKCkucmVwbGFjZShXLFwiXCIpKS5sZW5ndGg8MilyZXR1cm5cIlwiO2Zvcig7ZS5sZW5ndGglNCE9MDspZSs9XCI9XCI7cmV0dXJuIGV9KGUpKX1mdW5jdGlvbiBxKGUsdCxuLHIpe2xldCBvO2ZvcihvPTA7bzxyJiYhKG8rbj49dC5sZW5ndGh8fG8+PWUubGVuZ3RoKTsrK28pdFtvK25dPWVbb107cmV0dXJuIG99ZnVuY3Rpb24gWShlLHQpe3JldHVybiBlIGluc3RhbmNlb2YgdHx8bnVsbCE9ZSYmbnVsbCE9ZS5jb25zdHJ1Y3RvciYmbnVsbCE9ZS5jb25zdHJ1Y3Rvci5uYW1lJiZlLmNvbnN0cnVjdG9yLm5hbWU9PT10Lm5hbWV9ZnVuY3Rpb24gSyhlKXtyZXR1cm4gZSE9ZX1jb25zdCBYPWZ1bmN0aW9uKCl7Y29uc3QgZT1cIjAxMjM0NTY3ODlhYmNkZWZcIix0PW5ldyBBcnJheSgyNTYpO2ZvcihsZXQgbj0wO248MTY7KytuKXtjb25zdCByPTE2Km47Zm9yKGxldCBvPTA7bzwxNjsrK28pdFtyK29dPWVbbl0rZVtvXX1yZXR1cm4gdH0oKTtmdW5jdGlvbiBKKGUpe3JldHVyblwidW5kZWZpbmVkXCI9PXR5cGVvZiBCaWdJbnQ/UTplfWZ1bmN0aW9uIFEoKXt0aHJvdyBuZXcgRXJyb3IoXCJCaWdJbnQgbm90IHN1cHBvcnRlZFwiKX19LDQ2NTplPT57dmFyIHQsbj1cIm9iamVjdFwiPT10eXBlb2YgUmVmbGVjdD9SZWZsZWN0Om51bGwscj1uJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLmFwcGx5P24uYXBwbHk6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChlLHQsbil9O3Q9biYmXCJmdW5jdGlvblwiPT10eXBlb2Ygbi5vd25LZXlzP24ub3duS2V5czpPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKS5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKSl9OmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKX07dmFyIG89TnVtYmVyLmlzTmFOfHxmdW5jdGlvbihlKXtyZXR1cm4gZSE9ZX07ZnVuY3Rpb24gaSgpe2kuaW5pdC5jYWxsKHRoaXMpfWUuZXhwb3J0cz1pLGUuZXhwb3J0cy5vbmNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLHIpe2Z1bmN0aW9uIG8obil7ZS5yZW1vdmVMaXN0ZW5lcih0LGkpLHIobil9ZnVuY3Rpb24gaSgpe1wiZnVuY3Rpb25cIj09dHlwZW9mIGUucmVtb3ZlTGlzdGVuZXImJmUucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLG8pLG4oW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKX1nKGUsdCxpLHtvbmNlOiEwfSksXCJlcnJvclwiIT09dCYmZnVuY3Rpb24oZSx0LG4pe1wiZnVuY3Rpb25cIj09dHlwZW9mIGUub24mJmcoZSxcImVycm9yXCIsdCx7b25jZTohMH0pfShlLG8pfSkpfSxpLkV2ZW50RW1pdHRlcj1pLGkucHJvdG90eXBlLl9ldmVudHM9dm9pZCAwLGkucHJvdG90eXBlLl9ldmVudHNDb3VudD0wLGkucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnM9dm9pZCAwO3ZhciBhPTEwO2Z1bmN0aW9uIGwoZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBlKX1mdW5jdGlvbiBzKGUpe3JldHVybiB2b2lkIDA9PT1lLl9tYXhMaXN0ZW5lcnM/aS5kZWZhdWx0TWF4TGlzdGVuZXJzOmUuX21heExpc3RlbmVyc31mdW5jdGlvbiBjKGUsdCxuLHIpe3ZhciBvLGksYSxjO2lmKGwobiksdm9pZCAwPT09KGk9ZS5fZXZlbnRzKT8oaT1lLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSxlLl9ldmVudHNDb3VudD0wKToodm9pZCAwIT09aS5uZXdMaXN0ZW5lciYmKGUuZW1pdChcIm5ld0xpc3RlbmVyXCIsdCxuLmxpc3RlbmVyP24ubGlzdGVuZXI6biksaT1lLl9ldmVudHMpLGE9aVt0XSksdm9pZCAwPT09YSlhPWlbdF09biwrK2UuX2V2ZW50c0NvdW50O2Vsc2UgaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYT9hPWlbdF09cj9bbixhXTpbYSxuXTpyP2EudW5zaGlmdChuKTphLnB1c2gobiksKG89cyhlKSk+MCYmYS5sZW5ndGg+byYmIWEud2FybmVkKXthLndhcm5lZD0hMDt2YXIgdT1uZXcgRXJyb3IoXCJQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuIFwiK2EubGVuZ3RoK1wiIFwiK1N0cmluZyh0KStcIiBsaXN0ZW5lcnMgYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0XCIpO3UubmFtZT1cIk1heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZ1wiLHUuZW1pdHRlcj1lLHUudHlwZT10LHUuY291bnQ9YS5sZW5ndGgsYz11LGNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKGMpfXJldHVybiBlfWZ1bmN0aW9uIHUoKXtpZighdGhpcy5maXJlZClyZXR1cm4gdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLHRoaXMud3JhcEZuKSx0aGlzLmZpcmVkPSEwLDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCk6dGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCxhcmd1bWVudHMpfWZ1bmN0aW9uIGYoZSx0LG4pe3ZhciByPXtmaXJlZDohMSx3cmFwRm46dm9pZCAwLHRhcmdldDplLHR5cGU6dCxsaXN0ZW5lcjpufSxvPXUuYmluZChyKTtyZXR1cm4gby5saXN0ZW5lcj1uLHIud3JhcEZuPW8sb31mdW5jdGlvbiBkKGUsdCxuKXt2YXIgcj1lLl9ldmVudHM7aWYodm9pZCAwPT09cilyZXR1cm5bXTt2YXIgbz1yW3RdO3JldHVybiB2b2lkIDA9PT1vP1tdOlwiZnVuY3Rpb25cIj09dHlwZW9mIG8/bj9bby5saXN0ZW5lcnx8b106W29dOm4/ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW5ldyBBcnJheShlLmxlbmd0aCksbj0wO248dC5sZW5ndGg7KytuKXRbbl09ZVtuXS5saXN0ZW5lcnx8ZVtuXTtyZXR1cm4gdH0obyk6aChvLG8ubGVuZ3RoKX1mdW5jdGlvbiBwKGUpe3ZhciB0PXRoaXMuX2V2ZW50cztpZih2b2lkIDAhPT10KXt2YXIgbj10W2VdO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4pcmV0dXJuIDE7aWYodm9pZCAwIT09bilyZXR1cm4gbi5sZW5ndGh9cmV0dXJuIDB9ZnVuY3Rpb24gaChlLHQpe2Zvcih2YXIgbj1uZXcgQXJyYXkodCkscj0wO3I8dDsrK3IpbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIGcoZSx0LG4scil7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZS5vbilyLm9uY2U/ZS5vbmNlKHQsbik6ZS5vbih0LG4pO2Vsc2V7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZS5hZGRFdmVudExpc3RlbmVyKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImVtaXR0ZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRXZlbnRFbWl0dGVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIGUpO2UuYWRkRXZlbnRMaXN0ZW5lcih0LChmdW5jdGlvbiBvKGkpe3Iub25jZSYmZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbyksbihpKX0pKX19T2JqZWN0LmRlZmluZVByb3BlcnR5KGksXCJkZWZhdWx0TWF4TGlzdGVuZXJzXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHNldDpmdW5jdGlvbihlKXtpZihcIm51bWJlclwiIT10eXBlb2YgZXx8ZTwwfHxvKGUpKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJkZWZhdWx0TWF4TGlzdGVuZXJzXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJytlK1wiLlwiKTthPWV9fSksaS5pbml0PWZ1bmN0aW9uKCl7dm9pZCAwIT09dGhpcy5fZXZlbnRzJiZ0aGlzLl9ldmVudHMhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykuX2V2ZW50c3x8KHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApLHRoaXMuX21heExpc3RlbmVycz10aGlzLl9tYXhMaXN0ZW5lcnN8fHZvaWQgMH0saS5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKGUpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiBlfHxlPDB8fG8oZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcIm5cIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnK2UrXCIuXCIpO3JldHVybiB0aGlzLl9tYXhMaXN0ZW5lcnM9ZSx0aGlzfSxpLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtyZXR1cm4gcyh0aGlzKX0saS5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdC5wdXNoKGFyZ3VtZW50c1tuXSk7dmFyIG89XCJlcnJvclwiPT09ZSxpPXRoaXMuX2V2ZW50cztpZih2b2lkIDAhPT1pKW89byYmdm9pZCAwPT09aS5lcnJvcjtlbHNlIGlmKCFvKXJldHVybiExO2lmKG8pe3ZhciBhO2lmKHQubGVuZ3RoPjAmJihhPXRbMF0pLGEgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBhO3ZhciBsPW5ldyBFcnJvcihcIlVuaGFuZGxlZCBlcnJvci5cIisoYT9cIiAoXCIrYS5tZXNzYWdlK1wiKVwiOlwiXCIpKTt0aHJvdyBsLmNvbnRleHQ9YSxsfXZhciBzPWlbZV07aWYodm9pZCAwPT09cylyZXR1cm4hMTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBzKXIocyx0aGlzLHQpO2Vsc2V7dmFyIGM9cy5sZW5ndGgsdT1oKHMsYyk7Zm9yKG49MDtuPGM7KytuKXIodVtuXSx0aGlzLHQpfXJldHVybiEwfSxpLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1mdW5jdGlvbihlLHQpe3JldHVybiBjKHRoaXMsZSx0LCExKX0saS5wcm90b3R5cGUub249aS5wcm90b3R5cGUuYWRkTGlzdGVuZXIsaS5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGModGhpcyxlLHQsITApfSxpLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGwodCksdGhpcy5vbihlLGYodGhpcyxlLHQpKSx0aGlzfSxpLnByb3RvdHlwZS5wcmVwZW5kT25jZUxpc3RlbmVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGwodCksdGhpcy5wcmVwZW5kTGlzdGVuZXIoZSxmKHRoaXMsZSx0KSksdGhpc30saS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLG8saSxhO2lmKGwodCksdm9pZCAwPT09KHI9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT0obj1yW2VdKSlyZXR1cm4gdGhpcztpZihuPT09dHx8bi5saXN0ZW5lcj09PXQpMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKTooZGVsZXRlIHJbZV0sci5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KFwicmVtb3ZlTGlzdGVuZXJcIixlLG4ubGlzdGVuZXJ8fHQpKTtlbHNlIGlmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIG4pe2ZvcihvPS0xLGk9bi5sZW5ndGgtMTtpPj0wO2ktLSlpZihuW2ldPT09dHx8bltpXS5saXN0ZW5lcj09PXQpe2E9bltpXS5saXN0ZW5lcixvPWk7YnJlYWt9aWYobzwwKXJldHVybiB0aGlzOzA9PT1vP24uc2hpZnQoKTpmdW5jdGlvbihlLHQpe2Zvcig7dCsxPGUubGVuZ3RoO3QrKyllW3RdPWVbdCsxXTtlLnBvcCgpfShuLG8pLDE9PT1uLmxlbmd0aCYmKHJbZV09blswXSksdm9pZCAwIT09ci5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KFwicmVtb3ZlTGlzdGVuZXJcIixlLGF8fHQpfXJldHVybiB0aGlzfSxpLnByb3RvdHlwZS5vZmY9aS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIsaS5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKGUpe3ZhciB0LG4scjtpZih2b2lkIDA9PT0obj10aGlzLl9ldmVudHMpKXJldHVybiB0aGlzO2lmKHZvaWQgMD09PW4ucmVtb3ZlTGlzdGVuZXIpcmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoPyh0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKTp2b2lkIDAhPT1uW2VdJiYoMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKTpkZWxldGUgbltlXSksdGhpcztpZigwPT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIG8saT1PYmplY3Qua2V5cyhuKTtmb3Iocj0wO3I8aS5sZW5ndGg7KytyKVwicmVtb3ZlTGlzdGVuZXJcIiE9PShvPWlbcl0pJiZ0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhvKTtyZXR1cm4gdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoXCJyZW1vdmVMaXN0ZW5lclwiKSx0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wLHRoaXN9aWYoXCJmdW5jdGlvblwiPT10eXBlb2YodD1uW2VdKSl0aGlzLnJlbW92ZUxpc3RlbmVyKGUsdCk7ZWxzZSBpZih2b2lkIDAhPT10KWZvcihyPXQubGVuZ3RoLTE7cj49MDtyLS0pdGhpcy5yZW1vdmVMaXN0ZW5lcihlLHRbcl0pO3JldHVybiB0aGlzfSxpLnByb3RvdHlwZS5saXN0ZW5lcnM9ZnVuY3Rpb24oZSl7cmV0dXJuIGQodGhpcyxlLCEwKX0saS5wcm90b3R5cGUucmF3TGlzdGVuZXJzPWZ1bmN0aW9uKGUpe3JldHVybiBkKHRoaXMsZSwhMSl9LGkubGlzdGVuZXJDb3VudD1mdW5jdGlvbihlLHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGUubGlzdGVuZXJDb3VudD9lLmxpc3RlbmVyQ291bnQodCk6cC5jYWxsKGUsdCl9LGkucHJvdG90eXBlLmxpc3RlbmVyQ291bnQ9cCxpLnByb3RvdHlwZS5ldmVudE5hbWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50PjA/dCh0aGlzLl9ldmVudHMpOltdfX0sMjE1OihlLHQpPT57dC5yZWFkPWZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIGksYSxsPTgqby1yLTEscz0oMTw8bCktMSxjPXM+PjEsdT0tNyxmPW4/by0xOjAsZD1uPy0xOjEscD1lW3QrZl07Zm9yKGYrPWQsaT1wJigxPDwtdSktMSxwPj49LXUsdSs9bDt1PjA7aT0yNTYqaStlW3QrZl0sZis9ZCx1LT04KTtmb3IoYT1pJigxPDwtdSktMSxpPj49LXUsdSs9cjt1PjA7YT0yNTYqYStlW3QrZl0sZis9ZCx1LT04KTtpZigwPT09aSlpPTEtYztlbHNle2lmKGk9PT1zKXJldHVybiBhP05hTjoxLzAqKHA/LTE6MSk7YSs9TWF0aC5wb3coMixyKSxpLT1jfXJldHVybihwPy0xOjEpKmEqTWF0aC5wb3coMixpLXIpfSx0LndyaXRlPWZ1bmN0aW9uKGUsdCxuLHIsbyxpKXt2YXIgYSxsLHMsYz04Kmktby0xLHU9KDE8PGMpLTEsZj11Pj4xLGQ9MjM9PT1vP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxwPXI/MDppLTEsaD1yPzE6LTEsZz10PDB8fDA9PT10JiYxL3Q8MD8xOjA7Zm9yKHQ9TWF0aC5hYnModCksaXNOYU4odCl8fHQ9PT0xLzA/KGw9aXNOYU4odCk/MTowLGE9dSk6KGE9TWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMiksdCoocz1NYXRoLnBvdygyLC1hKSk8MSYmKGEtLSxzKj0yKSwodCs9YStmPj0xP2QvczpkKk1hdGgucG93KDIsMS1mKSkqcz49MiYmKGErKyxzLz0yKSxhK2Y+PXU/KGw9MCxhPXUpOmErZj49MT8obD0odCpzLTEpKk1hdGgucG93KDIsbyksYSs9Zik6KGw9dCpNYXRoLnBvdygyLGYtMSkqTWF0aC5wb3coMixvKSxhPTApKTtvPj04O2VbbitwXT0yNTUmbCxwKz1oLGwvPTI1NixvLT04KTtmb3IoYT1hPDxvfGwsYys9bztjPjA7ZVtuK3BdPTI1NSZhLHArPWgsYS89MjU2LGMtPTgpO2VbbitwLWhdfD0xMjgqZ319LDk1MTpmdW5jdGlvbihlLHQsbil7dmFyIHI7ZT1uLm5tZChlKSxmdW5jdGlvbigpe3ZhciBvLGk9XCJFeHBlY3RlZCBhIGZ1bmN0aW9uXCIsYT1cIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX19cIixsPVwiX19sb2Rhc2hfcGxhY2Vob2xkZXJfX1wiLHM9MzIsYz0xMjgsdT0xLzAsZj05MDA3MTk5MjU0NzQwOTkxLGQ9TmFOLHA9NDI5NDk2NzI5NSxoPVtbXCJhcnlcIixjXSxbXCJiaW5kXCIsMV0sW1wiYmluZEtleVwiLDJdLFtcImN1cnJ5XCIsOF0sW1wiY3VycnlSaWdodFwiLDE2XSxbXCJmbGlwXCIsNTEyXSxbXCJwYXJ0aWFsXCIsc10sW1wicGFydGlhbFJpZ2h0XCIsNjRdLFtcInJlYXJnXCIsMjU2XV0sZz1cIltvYmplY3QgQXJndW1lbnRzXVwiLHY9XCJbb2JqZWN0IEFycmF5XVwiLG09XCJbb2JqZWN0IEJvb2xlYW5dXCIsQz1cIltvYmplY3QgRGF0ZV1cIix5PVwiW29iamVjdCBFcnJvcl1cIix3PVwiW29iamVjdCBGdW5jdGlvbl1cIixiPVwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl1cIix4PVwiW29iamVjdCBNYXBdXCIsXz1cIltvYmplY3QgTnVtYmVyXVwiLE89XCJbb2JqZWN0IE9iamVjdF1cIixMPVwiW29iamVjdCBQcm9taXNlXVwiLEU9XCJbb2JqZWN0IFJlZ0V4cF1cIixTPVwiW29iamVjdCBTZXRdXCIsaj1cIltvYmplY3QgU3RyaW5nXVwiLE09XCJbb2JqZWN0IFN5bWJvbF1cIixrPVwiW29iamVjdCBXZWFrTWFwXVwiLFI9XCJbb2JqZWN0IEFycmF5QnVmZmVyXVwiLFA9XCJbb2JqZWN0IERhdGFWaWV3XVwiLEk9XCJbb2JqZWN0IEZsb2F0MzJBcnJheV1cIixBPVwiW29iamVjdCBGbG9hdDY0QXJyYXldXCIsVD1cIltvYmplY3QgSW50OEFycmF5XVwiLEg9XCJbb2JqZWN0IEludDE2QXJyYXldXCIsQj1cIltvYmplY3QgSW50MzJBcnJheV1cIixWPVwiW29iamVjdCBVaW50OEFycmF5XVwiLEQ9XCJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XVwiLFo9XCJbb2JqZWN0IFVpbnQxNkFycmF5XVwiLCQ9XCJbb2JqZWN0IFVpbnQzMkFycmF5XVwiLE49L1xcYl9fcCBcXCs9ICcnOy9nLEY9L1xcYihfX3AgXFwrPSkgJycgXFwrL2csVT0vKF9fZVxcKC4qP1xcKXxcXGJfX3RcXCkpIFxcK1xcbicnOy9nLFc9LyYoPzphbXB8bHR8Z3R8cXVvdHwjMzkpOy9nLHo9L1smPD5cIiddL2csRz1SZWdFeHAoVy5zb3VyY2UpLHE9UmVnRXhwKHouc291cmNlKSxZPS88JS0oW1xcc1xcU10rPyklPi9nLEs9LzwlKFtcXHNcXFNdKz8pJT4vZyxYPS88JT0oW1xcc1xcU10rPyklPi9nLEo9L1xcLnxcXFsoPzpbXltcXF1dKnwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKj9cXDEpXFxdLyxRPS9eXFx3KiQvLGVlPS9bXi5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwkKSkvZyx0ZT0vW1xcXFxeJC4qKz8oKVtcXF17fXxdL2csbmU9UmVnRXhwKHRlLnNvdXJjZSkscmU9L15cXHMrLyxvZT0vXFxzLyxpZT0vXFx7KD86XFxuXFwvXFwqIFxcW3dyYXBwZWQgd2l0aCAuK1xcXSBcXCpcXC8pP1xcbj8vLGFlPS9cXHtcXG5cXC9cXCogXFxbd3JhcHBlZCB3aXRoICguKylcXF0gXFwqLyxsZT0vLD8gJiAvLHNlPS9bXlxceDAwLVxceDJmXFx4M2EtXFx4NDBcXHg1Yi1cXHg2MFxceDdiLVxceDdmXSsvZyxjZT0vWygpPSx7fVxcW1xcXVxcL1xcc10vLHVlPS9cXFxcKFxcXFwpPy9nLGZlPS9cXCRcXHsoW15cXFxcfV0qKD86XFxcXC5bXlxcXFx9XSopKilcXH0vZyxkZT0vXFx3KiQvLHBlPS9eWy0rXTB4WzAtOWEtZl0rJC9pLGhlPS9eMGJbMDFdKyQvaSxnZT0vXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvLHZlPS9eMG9bMC03XSskL2ksbWU9L14oPzowfFsxLTldXFxkKikkLyxDZT0vW1xceGMwLVxceGQ2XFx4ZDgtXFx4ZjZcXHhmOC1cXHhmZlxcdTAxMDAtXFx1MDE3Zl0vZyx5ZT0vKCReKS8sd2U9L1snXFxuXFxyXFx1MjAyOFxcdTIwMjlcXFxcXS9nLGJlPVwiXFxcXHVkODAwLVxcXFx1ZGZmZlwiLHhlPVwiXFxcXHUwMzAwLVxcXFx1MDM2ZlxcXFx1ZmUyMC1cXFxcdWZlMmZcXFxcdTIwZDAtXFxcXHUyMGZmXCIsX2U9XCJcXFxcdTI3MDAtXFxcXHUyN2JmXCIsT2U9XCJhLXpcXFxceGRmLVxcXFx4ZjZcXFxceGY4LVxcXFx4ZmZcIixMZT1cIkEtWlxcXFx4YzAtXFxcXHhkNlxcXFx4ZDgtXFxcXHhkZVwiLEVlPVwiXFxcXHVmZTBlXFxcXHVmZTBmXCIsU2U9XCJcXFxceGFjXFxcXHhiMVxcXFx4ZDdcXFxceGY3XFxcXHgwMC1cXFxceDJmXFxcXHgzYS1cXFxceDQwXFxcXHg1Yi1cXFxceDYwXFxcXHg3Yi1cXFxceGJmXFxcXHUyMDAwLVxcXFx1MjA2ZiBcXFxcdFxcXFx4MGJcXFxcZlxcXFx4YTBcXFxcdWZlZmZcXFxcblxcXFxyXFxcXHUyMDI4XFxcXHUyMDI5XFxcXHUxNjgwXFxcXHUxODBlXFxcXHUyMDAwXFxcXHUyMDAxXFxcXHUyMDAyXFxcXHUyMDAzXFxcXHUyMDA0XFxcXHUyMDA1XFxcXHUyMDA2XFxcXHUyMDA3XFxcXHUyMDA4XFxcXHUyMDA5XFxcXHUyMDBhXFxcXHUyMDJmXFxcXHUyMDVmXFxcXHUzMDAwXCIsamU9XCJbXCIrYmUrXCJdXCIsTWU9XCJbXCIrU2UrXCJdXCIsa2U9XCJbXCIreGUrXCJdXCIsUmU9XCJcXFxcZCtcIixQZT1cIltcIitfZStcIl1cIixJZT1cIltcIitPZStcIl1cIixBZT1cIlteXCIrYmUrU2UrUmUrX2UrT2UrTGUrXCJdXCIsVGU9XCJcXFxcdWQ4M2NbXFxcXHVkZmZiLVxcXFx1ZGZmZl1cIixIZT1cIlteXCIrYmUrXCJdXCIsQmU9XCIoPzpcXFxcdWQ4M2NbXFxcXHVkZGU2LVxcXFx1ZGRmZl0pezJ9XCIsVmU9XCJbXFxcXHVkODAwLVxcXFx1ZGJmZl1bXFxcXHVkYzAwLVxcXFx1ZGZmZl1cIixEZT1cIltcIitMZStcIl1cIixaZT1cIlxcXFx1MjAwZFwiLCRlPVwiKD86XCIrSWUrXCJ8XCIrQWUrXCIpXCIsTmU9XCIoPzpcIitEZStcInxcIitBZStcIilcIixGZT1cIig/Olsn4oCZXSg/OmR8bGx8bXxyZXxzfHR8dmUpKT9cIixVZT1cIig/Olsn4oCZXSg/OkR8TEx8TXxSRXxTfFR8VkUpKT9cIixXZT1cIig/OlwiK2tlK1wifFwiK1RlK1wiKT9cIix6ZT1cIltcIitFZStcIl0/XCIsR2U9emUrV2UrXCIoPzpcIitaZStcIig/OlwiK1tIZSxCZSxWZV0uam9pbihcInxcIikrXCIpXCIremUrV2UrXCIpKlwiLHFlPVwiKD86XCIrW1BlLEJlLFZlXS5qb2luKFwifFwiKStcIilcIitHZSxZZT1cIig/OlwiK1tIZStrZStcIj9cIixrZSxCZSxWZSxqZV0uam9pbihcInxcIikrXCIpXCIsS2U9UmVnRXhwKFwiWyfigJldXCIsXCJnXCIpLFhlPVJlZ0V4cChrZSxcImdcIiksSmU9UmVnRXhwKFRlK1wiKD89XCIrVGUrXCIpfFwiK1llK0dlLFwiZ1wiKSxRZT1SZWdFeHAoW0RlK1wiP1wiK0llK1wiK1wiK0ZlK1wiKD89XCIrW01lLERlLFwiJFwiXS5qb2luKFwifFwiKStcIilcIixOZStcIitcIitVZStcIig/PVwiK1tNZSxEZSskZSxcIiRcIl0uam9pbihcInxcIikrXCIpXCIsRGUrXCI/XCIrJGUrXCIrXCIrRmUsRGUrXCIrXCIrVWUsXCJcXFxcZCooPzoxU1R8Mk5EfDNSRHwoPyFbMTIzXSlcXFxcZFRIKSg/PVxcXFxifFthLXpfXSlcIixcIlxcXFxkKig/OjFzdHwybmR8M3JkfCg/IVsxMjNdKVxcXFxkdGgpKD89XFxcXGJ8W0EtWl9dKVwiLFJlLHFlXS5qb2luKFwifFwiKSxcImdcIiksZXQ9UmVnRXhwKFwiW1wiK1plK2JlK3hlK0VlK1wiXVwiKSx0dD0vW2Etel1bQS1aXXxbQS1aXXsyfVthLXpdfFswLTldW2EtekEtWl18W2EtekEtWl1bMC05XXxbXmEtekEtWjAtOSBdLyxudD1bXCJBcnJheVwiLFwiQnVmZmVyXCIsXCJEYXRhVmlld1wiLFwiRGF0ZVwiLFwiRXJyb3JcIixcIkZsb2F0MzJBcnJheVwiLFwiRmxvYXQ2NEFycmF5XCIsXCJGdW5jdGlvblwiLFwiSW50OEFycmF5XCIsXCJJbnQxNkFycmF5XCIsXCJJbnQzMkFycmF5XCIsXCJNYXBcIixcIk1hdGhcIixcIk9iamVjdFwiLFwiUHJvbWlzZVwiLFwiUmVnRXhwXCIsXCJTZXRcIixcIlN0cmluZ1wiLFwiU3ltYm9sXCIsXCJUeXBlRXJyb3JcIixcIlVpbnQ4QXJyYXlcIixcIlVpbnQ4Q2xhbXBlZEFycmF5XCIsXCJVaW50MTZBcnJheVwiLFwiVWludDMyQXJyYXlcIixcIldlYWtNYXBcIixcIl9cIixcImNsZWFyVGltZW91dFwiLFwiaXNGaW5pdGVcIixcInBhcnNlSW50XCIsXCJzZXRUaW1lb3V0XCJdLHJ0PS0xLG90PXt9O290W0ldPW90W0FdPW90W1RdPW90W0hdPW90W0JdPW90W1ZdPW90W0RdPW90W1pdPW90WyRdPSEwLG90W2ddPW90W3ZdPW90W1JdPW90W21dPW90W1BdPW90W0NdPW90W3ldPW90W3ddPW90W3hdPW90W19dPW90W09dPW90W0VdPW90W1NdPW90W2pdPW90W2tdPSExO3ZhciBpdD17fTtpdFtnXT1pdFt2XT1pdFtSXT1pdFtQXT1pdFttXT1pdFtDXT1pdFtJXT1pdFtBXT1pdFtUXT1pdFtIXT1pdFtCXT1pdFt4XT1pdFtfXT1pdFtPXT1pdFtFXT1pdFtTXT1pdFtqXT1pdFtNXT1pdFtWXT1pdFtEXT1pdFtaXT1pdFskXT0hMCxpdFt5XT1pdFt3XT1pdFtrXT0hMTt2YXIgYXQ9e1wiXFxcXFwiOlwiXFxcXFwiLFwiJ1wiOlwiJ1wiLFwiXFxuXCI6XCJuXCIsXCJcXHJcIjpcInJcIixcIlxcdTIwMjhcIjpcInUyMDI4XCIsXCJcXHUyMDI5XCI6XCJ1MjAyOVwifSxsdD1wYXJzZUZsb2F0LHN0PXBhcnNlSW50LGN0PVwib2JqZWN0XCI9PXR5cGVvZiBuLmcmJm4uZyYmbi5nLk9iamVjdD09PU9iamVjdCYmbi5nLHV0PVwib2JqZWN0XCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixmdD1jdHx8dXR8fEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSxkdD10JiYhdC5ub2RlVHlwZSYmdCxwdD1kdCYmZSYmIWUubm9kZVR5cGUmJmUsaHQ9cHQmJnB0LmV4cG9ydHM9PT1kdCxndD1odCYmY3QucHJvY2Vzcyx2dD1mdW5jdGlvbigpe3RyeXtyZXR1cm4gcHQmJnB0LnJlcXVpcmUmJnB0LnJlcXVpcmUoXCJ1dGlsXCIpLnR5cGVzfHxndCYmZ3QuYmluZGluZyYmZ3QuYmluZGluZyhcInV0aWxcIil9Y2F0Y2goZSl7fX0oKSxtdD12dCYmdnQuaXNBcnJheUJ1ZmZlcixDdD12dCYmdnQuaXNEYXRlLHl0PXZ0JiZ2dC5pc01hcCx3dD12dCYmdnQuaXNSZWdFeHAsYnQ9dnQmJnZ0LmlzU2V0LHh0PXZ0JiZ2dC5pc1R5cGVkQXJyYXk7ZnVuY3Rpb24gX3QoZSx0LG4pe3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBlLmNhbGwodCk7Y2FzZSAxOnJldHVybiBlLmNhbGwodCxuWzBdKTtjYXNlIDI6cmV0dXJuIGUuY2FsbCh0LG5bMF0sblsxXSk7Y2FzZSAzOnJldHVybiBlLmNhbGwodCxuWzBdLG5bMV0sblsyXSl9cmV0dXJuIGUuYXBwbHkodCxuKX1mdW5jdGlvbiBPdChlLHQsbixyKXtmb3IodmFyIG89LTEsaT1udWxsPT1lPzA6ZS5sZW5ndGg7KytvPGk7KXt2YXIgYT1lW29dO3QocixhLG4oYSksZSl9cmV0dXJuIHJ9ZnVuY3Rpb24gTHQoZSx0KXtmb3IodmFyIG49LTEscj1udWxsPT1lPzA6ZS5sZW5ndGg7KytuPHImJiExIT09dChlW25dLG4sZSk7KTtyZXR1cm4gZX1mdW5jdGlvbiBFdChlLHQpe2Zvcih2YXIgbj1udWxsPT1lPzA6ZS5sZW5ndGg7bi0tJiYhMSE9PXQoZVtuXSxuLGUpOyk7cmV0dXJuIGV9ZnVuY3Rpb24gU3QoZSx0KXtmb3IodmFyIG49LTEscj1udWxsPT1lPzA6ZS5sZW5ndGg7KytuPHI7KWlmKCF0KGVbbl0sbixlKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBqdChlLHQpe2Zvcih2YXIgbj0tMSxyPW51bGw9PWU/MDplLmxlbmd0aCxvPTAsaT1bXTsrK248cjspe3ZhciBhPWVbbl07dChhLG4sZSkmJihpW28rK109YSl9cmV0dXJuIGl9ZnVuY3Rpb24gTXQoZSx0KXtyZXR1cm4hKG51bGw9PWV8fCFlLmxlbmd0aCkmJkR0KGUsdCwwKT4tMX1mdW5jdGlvbiBrdChlLHQsbil7Zm9yKHZhciByPS0xLG89bnVsbD09ZT8wOmUubGVuZ3RoOysrcjxvOylpZihuKHQsZVtyXSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gUnQoZSx0KXtmb3IodmFyIG49LTEscj1udWxsPT1lPzA6ZS5sZW5ndGgsbz1BcnJheShyKTsrK248cjspb1tuXT10KGVbbl0sbixlKTtyZXR1cm4gb31mdW5jdGlvbiBQdChlLHQpe2Zvcih2YXIgbj0tMSxyPXQubGVuZ3RoLG89ZS5sZW5ndGg7KytuPHI7KWVbbytuXT10W25dO3JldHVybiBlfWZ1bmN0aW9uIEl0KGUsdCxuLHIpe3ZhciBvPS0xLGk9bnVsbD09ZT8wOmUubGVuZ3RoO2ZvcihyJiZpJiYobj1lWysrb10pOysrbzxpOyluPXQobixlW29dLG8sZSk7cmV0dXJuIG59ZnVuY3Rpb24gQXQoZSx0LG4scil7dmFyIG89bnVsbD09ZT8wOmUubGVuZ3RoO2ZvcihyJiZvJiYobj1lWy0tb10pO28tLTspbj10KG4sZVtvXSxvLGUpO3JldHVybiBufWZ1bmN0aW9uIFR0KGUsdCl7Zm9yKHZhciBuPS0xLHI9bnVsbD09ZT8wOmUubGVuZ3RoOysrbjxyOylpZih0KGVbbl0sbixlKSlyZXR1cm4hMDtyZXR1cm4hMX12YXIgSHQ9RnQoXCJsZW5ndGhcIik7ZnVuY3Rpb24gQnQoZSx0LG4pe3ZhciByO3JldHVybiBuKGUsKGZ1bmN0aW9uKGUsbixvKXtpZih0KGUsbixvKSlyZXR1cm4gcj1uLCExfSkpLHJ9ZnVuY3Rpb24gVnQoZSx0LG4scil7Zm9yKHZhciBvPWUubGVuZ3RoLGk9bisocj8xOi0xKTtyP2ktLTorK2k8bzspaWYodChlW2ldLGksZSkpcmV0dXJuIGk7cmV0dXJuLTF9ZnVuY3Rpb24gRHQoZSx0LG4pe3JldHVybiB0PT10P2Z1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bi0xLG89ZS5sZW5ndGg7KytyPG87KWlmKGVbcl09PT10KXJldHVybiByO3JldHVybi0xfShlLHQsbik6VnQoZSwkdCxuKX1mdW5jdGlvbiBadChlLHQsbixyKXtmb3IodmFyIG89bi0xLGk9ZS5sZW5ndGg7KytvPGk7KWlmKHIoZVtvXSx0KSlyZXR1cm4gbztyZXR1cm4tMX1mdW5jdGlvbiAkdChlKXtyZXR1cm4gZSE9ZX1mdW5jdGlvbiBOdChlLHQpe3ZhciBuPW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gbj96dChlLHQpL246ZH1mdW5jdGlvbiBGdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/bzp0W2VdfX1mdW5jdGlvbiBVdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PWU/bzplW3RdfX1mdW5jdGlvbiBXdChlLHQsbixyLG8pe3JldHVybiBvKGUsKGZ1bmN0aW9uKGUsbyxpKXtuPXI/KHI9ITEsZSk6dChuLGUsbyxpKX0pKSxufWZ1bmN0aW9uIHp0KGUsdCl7Zm9yKHZhciBuLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspe3ZhciBhPXQoZVtyXSk7YSE9PW8mJihuPW49PT1vP2E6bithKX1yZXR1cm4gbn1mdW5jdGlvbiBHdChlLHQpe2Zvcih2YXIgbj0tMSxyPUFycmF5KGUpOysrbjxlOylyW25dPXQobik7cmV0dXJuIHJ9ZnVuY3Rpb24gcXQoZSl7cmV0dXJuIGU/ZS5zbGljZSgwLGZuKGUpKzEpLnJlcGxhY2UocmUsXCJcIik6ZX1mdW5jdGlvbiBZdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCl9fWZ1bmN0aW9uIEt0KGUsdCl7cmV0dXJuIFJ0KHQsKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfSkpfWZ1bmN0aW9uIFh0KGUsdCl7cmV0dXJuIGUuaGFzKHQpfWZ1bmN0aW9uIEp0KGUsdCl7Zm9yKHZhciBuPS0xLHI9ZS5sZW5ndGg7KytuPHImJkR0KHQsZVtuXSwwKT4tMTspO3JldHVybiBufWZ1bmN0aW9uIFF0KGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoO24tLSYmRHQodCxlW25dLDApPi0xOyk7cmV0dXJuIG59dmFyIGVuPVV0KHvDgDpcIkFcIizDgTpcIkFcIizDgjpcIkFcIizDgzpcIkFcIizDhDpcIkFcIizDhTpcIkFcIizDoDpcImFcIizDoTpcImFcIizDojpcImFcIizDozpcImFcIizDpDpcImFcIizDpTpcImFcIizDhzpcIkNcIizDpzpcImNcIizDkDpcIkRcIizDsDpcImRcIizDiDpcIkVcIizDiTpcIkVcIizDijpcIkVcIizDizpcIkVcIizDqDpcImVcIizDqTpcImVcIizDqjpcImVcIizDqzpcImVcIizDjDpcIklcIizDjTpcIklcIizDjjpcIklcIizDjzpcIklcIizDrDpcImlcIizDrTpcImlcIizDrjpcImlcIizDrzpcImlcIizDkTpcIk5cIizDsTpcIm5cIizDkjpcIk9cIizDkzpcIk9cIizDlDpcIk9cIizDlTpcIk9cIizDljpcIk9cIizDmDpcIk9cIizDsjpcIm9cIizDszpcIm9cIizDtDpcIm9cIizDtTpcIm9cIizDtjpcIm9cIizDuDpcIm9cIizDmTpcIlVcIizDmjpcIlVcIizDmzpcIlVcIizDnDpcIlVcIizDuTpcInVcIizDujpcInVcIizDuzpcInVcIizDvDpcInVcIizDnTpcIllcIizDvTpcInlcIizDvzpcInlcIizDhjpcIkFlXCIsw6Y6XCJhZVwiLMOeOlwiVGhcIizDvjpcInRoXCIsw586XCJzc1wiLMSAOlwiQVwiLMSCOlwiQVwiLMSEOlwiQVwiLMSBOlwiYVwiLMSDOlwiYVwiLMSFOlwiYVwiLMSGOlwiQ1wiLMSIOlwiQ1wiLMSKOlwiQ1wiLMSMOlwiQ1wiLMSHOlwiY1wiLMSJOlwiY1wiLMSLOlwiY1wiLMSNOlwiY1wiLMSOOlwiRFwiLMSQOlwiRFwiLMSPOlwiZFwiLMSROlwiZFwiLMSSOlwiRVwiLMSUOlwiRVwiLMSWOlwiRVwiLMSYOlwiRVwiLMSaOlwiRVwiLMSTOlwiZVwiLMSVOlwiZVwiLMSXOlwiZVwiLMSZOlwiZVwiLMSbOlwiZVwiLMScOlwiR1wiLMSeOlwiR1wiLMSgOlwiR1wiLMSiOlwiR1wiLMSdOlwiZ1wiLMSfOlwiZ1wiLMShOlwiZ1wiLMSjOlwiZ1wiLMSkOlwiSFwiLMSmOlwiSFwiLMSlOlwiaFwiLMSnOlwiaFwiLMSoOlwiSVwiLMSqOlwiSVwiLMSsOlwiSVwiLMSuOlwiSVwiLMSwOlwiSVwiLMSpOlwiaVwiLMSrOlwiaVwiLMStOlwiaVwiLMSvOlwiaVwiLMSxOlwiaVwiLMS0OlwiSlwiLMS1OlwialwiLMS2OlwiS1wiLMS3Olwia1wiLMS4Olwia1wiLMS5OlwiTFwiLMS7OlwiTFwiLMS9OlwiTFwiLMS/OlwiTFwiLMWBOlwiTFwiLMS6OlwibFwiLMS8OlwibFwiLMS+OlwibFwiLMWAOlwibFwiLMWCOlwibFwiLMWDOlwiTlwiLMWFOlwiTlwiLMWHOlwiTlwiLMWKOlwiTlwiLMWEOlwiblwiLMWGOlwiblwiLMWIOlwiblwiLMWLOlwiblwiLMWMOlwiT1wiLMWOOlwiT1wiLMWQOlwiT1wiLMWNOlwib1wiLMWPOlwib1wiLMWROlwib1wiLMWUOlwiUlwiLMWWOlwiUlwiLMWYOlwiUlwiLMWVOlwiclwiLMWXOlwiclwiLMWZOlwiclwiLMWaOlwiU1wiLMWcOlwiU1wiLMWeOlwiU1wiLMWgOlwiU1wiLMWbOlwic1wiLMWdOlwic1wiLMWfOlwic1wiLMWhOlwic1wiLMWiOlwiVFwiLMWkOlwiVFwiLMWmOlwiVFwiLMWjOlwidFwiLMWlOlwidFwiLMWnOlwidFwiLMWoOlwiVVwiLMWqOlwiVVwiLMWsOlwiVVwiLMWuOlwiVVwiLMWwOlwiVVwiLMWyOlwiVVwiLMWpOlwidVwiLMWrOlwidVwiLMWtOlwidVwiLMWvOlwidVwiLMWxOlwidVwiLMWzOlwidVwiLMW0OlwiV1wiLMW1Olwid1wiLMW2OlwiWVwiLMW3OlwieVwiLMW4OlwiWVwiLMW5OlwiWlwiLMW7OlwiWlwiLMW9OlwiWlwiLMW6OlwielwiLMW8OlwielwiLMW+OlwielwiLMSyOlwiSUpcIizEszpcImlqXCIsxZI6XCJPZVwiLMWTOlwib2VcIizFiTpcIiduXCIsxb86XCJzXCJ9KSx0bj1VdCh7XCImXCI6XCImYW1wO1wiLFwiPFwiOlwiJmx0O1wiLFwiPlwiOlwiJmd0O1wiLCdcIic6XCImcXVvdDtcIixcIidcIjpcIiYjMzk7XCJ9KTtmdW5jdGlvbiBubihlKXtyZXR1cm5cIlxcXFxcIithdFtlXX1mdW5jdGlvbiBybihlKXtyZXR1cm4gZXQudGVzdChlKX1mdW5jdGlvbiBvbihlKXt2YXIgdD0tMSxuPUFycmF5KGUuc2l6ZSk7cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXtuWysrdF09W3IsZV19KSksbn1mdW5jdGlvbiBhbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gZSh0KG4pKX19ZnVuY3Rpb24gbG4oZSx0KXtmb3IodmFyIG49LTEscj1lLmxlbmd0aCxvPTAsaT1bXTsrK248cjspe3ZhciBhPWVbbl07YSE9PXQmJmEhPT1sfHwoZVtuXT1sLGlbbysrXT1uKX1yZXR1cm4gaX1mdW5jdGlvbiBzbihlKXt2YXIgdD0tMSxuPUFycmF5KGUuc2l6ZSk7cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7blsrK3RdPWV9KSksbn1mdW5jdGlvbiBjbihlKXtyZXR1cm4gcm4oZSk/ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PUplLmxhc3RJbmRleD0wO0plLnRlc3QoZSk7KSsrdDtyZXR1cm4gdH0oZSk6SHQoZSl9ZnVuY3Rpb24gdW4oZSl7cmV0dXJuIHJuKGUpP2Z1bmN0aW9uKGUpe3JldHVybiBlLm1hdGNoKEplKXx8W119KGUpOmZ1bmN0aW9uKGUpe3JldHVybiBlLnNwbGl0KFwiXCIpfShlKX1mdW5jdGlvbiBmbihlKXtmb3IodmFyIHQ9ZS5sZW5ndGg7dC0tJiZvZS50ZXN0KGUuY2hhckF0KHQpKTspO3JldHVybiB0fXZhciBkbj1VdCh7XCImYW1wO1wiOlwiJlwiLFwiJmx0O1wiOlwiPFwiLFwiJmd0O1wiOlwiPlwiLFwiJnF1b3Q7XCI6J1wiJyxcIiYjMzk7XCI6XCInXCJ9KSxwbj1mdW5jdGlvbiBlKHQpe3ZhciBuLHI9KHQ9bnVsbD09dD9mdDpwbi5kZWZhdWx0cyhmdC5PYmplY3QoKSx0LHBuLnBpY2soZnQsbnQpKSkuQXJyYXksb2U9dC5EYXRlLGJlPXQuRXJyb3IseGU9dC5GdW5jdGlvbixfZT10Lk1hdGgsT2U9dC5PYmplY3QsTGU9dC5SZWdFeHAsRWU9dC5TdHJpbmcsU2U9dC5UeXBlRXJyb3IsamU9ci5wcm90b3R5cGUsTWU9eGUucHJvdG90eXBlLGtlPU9lLnByb3RvdHlwZSxSZT10W1wiX19jb3JlLWpzX3NoYXJlZF9fXCJdLFBlPU1lLnRvU3RyaW5nLEllPWtlLmhhc093blByb3BlcnR5LEFlPTAsVGU9KG49L1teLl0rJC8uZXhlYyhSZSYmUmUua2V5cyYmUmUua2V5cy5JRV9QUk9UT3x8XCJcIikpP1wiU3ltYm9sKHNyYylfMS5cIituOlwiXCIsSGU9a2UudG9TdHJpbmcsQmU9UGUuY2FsbChPZSksVmU9ZnQuXyxEZT1MZShcIl5cIitQZS5jYWxsKEllKS5yZXBsYWNlKHRlLFwiXFxcXCQmXCIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csXCIkMS4qP1wiKStcIiRcIiksWmU9aHQ/dC5CdWZmZXI6bywkZT10LlN5bWJvbCxOZT10LlVpbnQ4QXJyYXksRmU9WmU/WmUuYWxsb2NVbnNhZmU6byxVZT1hbihPZS5nZXRQcm90b3R5cGVPZixPZSksV2U9T2UuY3JlYXRlLHplPWtlLnByb3BlcnR5SXNFbnVtZXJhYmxlLEdlPWplLnNwbGljZSxxZT0kZT8kZS5pc0NvbmNhdFNwcmVhZGFibGU6byxZZT0kZT8kZS5pdGVyYXRvcjpvLEplPSRlPyRlLnRvU3RyaW5nVGFnOm8sZXQ9ZnVuY3Rpb24oKXt0cnl7dmFyIGU9c2koT2UsXCJkZWZpbmVQcm9wZXJ0eVwiKTtyZXR1cm4gZSh7fSxcIlwiLHt9KSxlfWNhdGNoKGUpe319KCksYXQ9dC5jbGVhclRpbWVvdXQhPT1mdC5jbGVhclRpbWVvdXQmJnQuY2xlYXJUaW1lb3V0LGN0PW9lJiZvZS5ub3chPT1mdC5EYXRlLm5vdyYmb2Uubm93LHV0PXQuc2V0VGltZW91dCE9PWZ0LnNldFRpbWVvdXQmJnQuc2V0VGltZW91dCxkdD1fZS5jZWlsLHB0PV9lLmZsb29yLGd0PU9lLmdldE93blByb3BlcnR5U3ltYm9scyx2dD1aZT9aZS5pc0J1ZmZlcjpvLEh0PXQuaXNGaW5pdGUsVXQ9amUuam9pbixobj1hbihPZS5rZXlzLE9lKSxnbj1fZS5tYXgsdm49X2UubWluLG1uPW9lLm5vdyxDbj10LnBhcnNlSW50LHluPV9lLnJhbmRvbSx3bj1qZS5yZXZlcnNlLGJuPXNpKHQsXCJEYXRhVmlld1wiKSx4bj1zaSh0LFwiTWFwXCIpLF9uPXNpKHQsXCJQcm9taXNlXCIpLE9uPXNpKHQsXCJTZXRcIiksTG49c2kodCxcIldlYWtNYXBcIiksRW49c2koT2UsXCJjcmVhdGVcIiksU249TG4mJm5ldyBMbixqbj17fSxNbj1BaShibiksa249QWkoeG4pLFJuPUFpKF9uKSxQbj1BaShPbiksSW49QWkoTG4pLEFuPSRlPyRlLnByb3RvdHlwZTpvLFRuPUFuP0FuLnZhbHVlT2Y6byxIbj1Bbj9Bbi50b1N0cmluZzpvO2Z1bmN0aW9uIEJuKGUpe2lmKFhhKGUpJiYhWmEoZSkmJiEoZSBpbnN0YW5jZW9mICRuKSl7aWYoZSBpbnN0YW5jZW9mIFpuKXJldHVybiBlO2lmKEllLmNhbGwoZSxcIl9fd3JhcHBlZF9fXCIpKXJldHVybiBUaShlKX1yZXR1cm4gbmV3IFpuKGUpfXZhciBWbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKCFLYSh0KSlyZXR1cm57fTtpZihXZSlyZXR1cm4gV2UodCk7ZS5wcm90b3R5cGU9dDt2YXIgbj1uZXcgZTtyZXR1cm4gZS5wcm90b3R5cGU9byxufX0oKTtmdW5jdGlvbiBEbigpe31mdW5jdGlvbiBabihlLHQpe3RoaXMuX193cmFwcGVkX189ZSx0aGlzLl9fYWN0aW9uc19fPVtdLHRoaXMuX19jaGFpbl9fPSEhdCx0aGlzLl9faW5kZXhfXz0wLHRoaXMuX192YWx1ZXNfXz1vfWZ1bmN0aW9uICRuKGUpe3RoaXMuX193cmFwcGVkX189ZSx0aGlzLl9fYWN0aW9uc19fPVtdLHRoaXMuX19kaXJfXz0xLHRoaXMuX19maWx0ZXJlZF9fPSExLHRoaXMuX19pdGVyYXRlZXNfXz1bXSx0aGlzLl9fdGFrZUNvdW50X189cCx0aGlzLl9fdmlld3NfXz1bXX1mdW5jdGlvbiBObihlKXt2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiBGbihlKXt2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiBVbihlKXt2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiBXbihlKXt2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgVW47Kyt0PG47KXRoaXMuYWRkKGVbdF0pfWZ1bmN0aW9uIHpuKGUpe3ZhciB0PXRoaXMuX19kYXRhX189bmV3IEZuKGUpO3RoaXMuc2l6ZT10LnNpemV9ZnVuY3Rpb24gR24oZSx0KXt2YXIgbj1aYShlKSxyPSFuJiZEYShlKSxvPSFuJiYhciYmVWEoZSksaT0hbiYmIXImJiFvJiZpbChlKSxhPW58fHJ8fG98fGksbD1hP0d0KGUubGVuZ3RoLEVlKTpbXSxzPWwubGVuZ3RoO2Zvcih2YXIgYyBpbiBlKSF0JiYhSWUuY2FsbChlLGMpfHxhJiYoXCJsZW5ndGhcIj09Y3x8byYmKFwib2Zmc2V0XCI9PWN8fFwicGFyZW50XCI9PWMpfHxpJiYoXCJidWZmZXJcIj09Y3x8XCJieXRlTGVuZ3RoXCI9PWN8fFwiYnl0ZU9mZnNldFwiPT1jKXx8Z2koYyxzKSl8fGwucHVzaChjKTtyZXR1cm4gbH1mdW5jdGlvbiBxbihlKXt2YXIgdD1lLmxlbmd0aDtyZXR1cm4gdD9lW1VyKDAsdC0xKV06b31mdW5jdGlvbiBZbihlLHQpe3JldHVybiBSaShFbyhlKSxvcih0LDAsZS5sZW5ndGgpKX1mdW5jdGlvbiBLbihlKXtyZXR1cm4gUmkoRW8oZSkpfWZ1bmN0aW9uIFhuKGUsdCxuKXsobiE9PW8mJiFIYShlW3RdLG4pfHxuPT09byYmISh0IGluIGUpKSYmbnIoZSx0LG4pfWZ1bmN0aW9uIEpuKGUsdCxuKXt2YXIgcj1lW3RdO0llLmNhbGwoZSx0KSYmSGEocixuKSYmKG4hPT1vfHx0IGluIGUpfHxucihlLHQsbil9ZnVuY3Rpb24gUW4oZSx0KXtmb3IodmFyIG49ZS5sZW5ndGg7bi0tOylpZihIYShlW25dWzBdLHQpKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIGVyKGUsdCxuLHIpe3JldHVybiBjcihlLChmdW5jdGlvbihlLG8saSl7dChyLGUsbihlKSxpKX0pKSxyfWZ1bmN0aW9uIHRyKGUsdCl7cmV0dXJuIGUmJlNvKHQsU2wodCksZSl9ZnVuY3Rpb24gbnIoZSx0LG4pe1wiX19wcm90b19fXCI9PXQmJmV0P2V0KGUsdCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6bix3cml0YWJsZTohMH0pOmVbdF09bn1mdW5jdGlvbiBycihlLHQpe2Zvcih2YXIgbj0tMSxpPXQubGVuZ3RoLGE9cihpKSxsPW51bGw9PWU7KytuPGk7KWFbbl09bD9vOnhsKGUsdFtuXSk7cmV0dXJuIGF9ZnVuY3Rpb24gb3IoZSx0LG4pe3JldHVybiBlPT1lJiYobiE9PW8mJihlPWU8PW4/ZTpuKSx0IT09byYmKGU9ZT49dD9lOnQpKSxlfWZ1bmN0aW9uIGlyKGUsdCxuLHIsaSxhKXt2YXIgbCxzPTEmdCxjPTImdCx1PTQmdDtpZihuJiYobD1pP24oZSxyLGksYSk6bihlKSksbCE9PW8pcmV0dXJuIGw7aWYoIUthKGUpKXJldHVybiBlO3ZhciBmPVphKGUpO2lmKGYpe2lmKGw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgsbj1uZXcgZS5jb25zdHJ1Y3Rvcih0KTtyZXR1cm4gdCYmXCJzdHJpbmdcIj09dHlwZW9mIGVbMF0mJkllLmNhbGwoZSxcImluZGV4XCIpJiYobi5pbmRleD1lLmluZGV4LG4uaW5wdXQ9ZS5pbnB1dCksbn0oZSksIXMpcmV0dXJuIEVvKGUsbCl9ZWxzZXt2YXIgZD1maShlKSxwPWQ9PXd8fGQ9PWI7aWYoVWEoZSkpcmV0dXJuIHdvKGUscyk7aWYoZD09T3x8ZD09Z3x8cCYmIWkpe2lmKGw9Y3x8cD97fTpwaShlKSwhcylyZXR1cm4gYz9mdW5jdGlvbihlLHQpe3JldHVybiBTbyhlLHVpKGUpLHQpfShlLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJlNvKHQsamwodCksZSl9KGwsZSkpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFNvKGUsY2koZSksdCl9KGUsdHIobCxlKSl9ZWxzZXtpZighaXRbZF0pcmV0dXJuIGk/ZTp7fTtsPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvPWUuY29uc3RydWN0b3I7c3dpdGNoKHQpe2Nhc2UgUjpyZXR1cm4gYm8oZSk7Y2FzZSBtOmNhc2UgQzpyZXR1cm4gbmV3IG8oK2UpO2Nhc2UgUDpyZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgbj10P2JvKGUuYnVmZmVyKTplLmJ1ZmZlcjtyZXR1cm4gbmV3IGUuY29uc3RydWN0b3IobixlLmJ5dGVPZmZzZXQsZS5ieXRlTGVuZ3RoKX0oZSxuKTtjYXNlIEk6Y2FzZSBBOmNhc2UgVDpjYXNlIEg6Y2FzZSBCOmNhc2UgVjpjYXNlIEQ6Y2FzZSBaOmNhc2UgJDpyZXR1cm4geG8oZSxuKTtjYXNlIHg6cmV0dXJuIG5ldyBvO2Nhc2UgXzpjYXNlIGo6cmV0dXJuIG5ldyBvKGUpO2Nhc2UgRTpyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IGUuY29uc3RydWN0b3IoZS5zb3VyY2UsZGUuZXhlYyhlKSk7cmV0dXJuIHQubGFzdEluZGV4PWUubGFzdEluZGV4LHR9KGUpO2Nhc2UgUzpyZXR1cm4gbmV3IG87Y2FzZSBNOnJldHVybiByPWUsVG4/T2UoVG4uY2FsbChyKSk6e319fShlLGQscyl9fWF8fChhPW5ldyB6bik7dmFyIGg9YS5nZXQoZSk7aWYoaClyZXR1cm4gaDthLnNldChlLGwpLG5sKGUpP2UuZm9yRWFjaCgoZnVuY3Rpb24ocil7bC5hZGQoaXIocix0LG4scixlLGEpKX0pKTpKYShlKSYmZS5mb3JFYWNoKChmdW5jdGlvbihyLG8pe2wuc2V0KG8saXIocix0LG4sbyxlLGEpKX0pKTt2YXIgdj1mP286KHU/Yz90aTplaTpjP2psOlNsKShlKTtyZXR1cm4gTHQodnx8ZSwoZnVuY3Rpb24ocixvKXt2JiYocj1lW289cl0pLEpuKGwsbyxpcihyLHQsbixvLGUsYSkpfSkpLGx9ZnVuY3Rpb24gYXIoZSx0LG4pe3ZhciByPW4ubGVuZ3RoO2lmKG51bGw9PWUpcmV0dXJuIXI7Zm9yKGU9T2UoZSk7ci0tOyl7dmFyIGk9bltyXSxhPXRbaV0sbD1lW2ldO2lmKGw9PT1vJiYhKGkgaW4gZSl8fCFhKGwpKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIGxyKGUsdCxuKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBTZShpKTtyZXR1cm4gU2koKGZ1bmN0aW9uKCl7ZS5hcHBseShvLG4pfSksdCl9ZnVuY3Rpb24gc3IoZSx0LG4scil7dmFyIG89LTEsaT1NdCxhPSEwLGw9ZS5sZW5ndGgscz1bXSxjPXQubGVuZ3RoO2lmKCFsKXJldHVybiBzO24mJih0PVJ0KHQsWXQobikpKSxyPyhpPWt0LGE9ITEpOnQubGVuZ3RoPj0yMDAmJihpPVh0LGE9ITEsdD1uZXcgV24odCkpO2U6Zm9yKDsrK288bDspe3ZhciB1PWVbb10sZj1udWxsPT1uP3U6bih1KTtpZih1PXJ8fDAhPT11P3U6MCxhJiZmPT1mKXtmb3IodmFyIGQ9YztkLS07KWlmKHRbZF09PT1mKWNvbnRpbnVlIGU7cy5wdXNoKHUpfWVsc2UgaSh0LGYscil8fHMucHVzaCh1KX1yZXR1cm4gc31Cbi50ZW1wbGF0ZVNldHRpbmdzPXtlc2NhcGU6WSxldmFsdWF0ZTpLLGludGVycG9sYXRlOlgsdmFyaWFibGU6XCJcIixpbXBvcnRzOntfOkJufX0sQm4ucHJvdG90eXBlPURuLnByb3RvdHlwZSxCbi5wcm90b3R5cGUuY29uc3RydWN0b3I9Qm4sWm4ucHJvdG90eXBlPVZuKERuLnByb3RvdHlwZSksWm4ucHJvdG90eXBlLmNvbnN0cnVjdG9yPVpuLCRuLnByb3RvdHlwZT1WbihEbi5wcm90b3R5cGUpLCRuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj0kbixObi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPUVuP0VuKG51bGwpOnt9LHRoaXMuc2l6ZT0wfSxObi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaGFzKGUpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1tlXTtyZXR1cm4gdGhpcy5zaXplLT10PzE6MCx0fSxObi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX187aWYoRW4pe3ZhciBuPXRbZV07cmV0dXJuIG49PT1hP286bn1yZXR1cm4gSWUuY2FsbCh0LGUpP3RbZV06b30sTm4ucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fO3JldHVybiBFbj90W2VdIT09bzpJZS5jYWxsKHQsZSl9LE5uLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKGUpPzA6MSxuW2VdPUVuJiZ0PT09bz9hOnQsdGhpc30sRm4ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH0sRm4ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fLG49UW4odCxlKTtyZXR1cm4hKG48MHx8KG49PXQubGVuZ3RoLTE/dC5wb3AoKTpHZS5jYWxsKHQsbiwxKSwtLXRoaXMuc2l6ZSwwKSl9LEZuLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxuPVFuKHQsZSk7cmV0dXJuIG48MD9vOnRbbl1bMV19LEZuLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIFFuKHRoaXMuX19kYXRhX18sZSk+LTF9LEZuLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fLHI9UW4obixlKTtyZXR1cm4gcjwwPygrK3RoaXMuc2l6ZSxuLnB1c2goW2UsdF0pKTpuW3JdWzFdPXQsdGhpc30sVW4ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgTm4sbWFwOm5ldyh4bnx8Rm4pLHN0cmluZzpuZXcgTm59fSxVbi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3ZhciB0PWFpKHRoaXMsZSkuZGVsZXRlKGUpO3JldHVybiB0aGlzLnNpemUtPXQ/MTowLHR9LFVuLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFpKHRoaXMsZSkuZ2V0KGUpfSxVbi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiBhaSh0aGlzLGUpLmhhcyhlKX0sVW4ucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3ZhciBuPWFpKHRoaXMsZSkscj1uLnNpemU7cmV0dXJuIG4uc2V0KGUsdCksdGhpcy5zaXplKz1uLnNpemU9PXI/MDoxLHRoaXN9LFduLnByb3RvdHlwZS5hZGQ9V24ucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uc2V0KGUsYSksdGhpc30sV24ucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoZSl9LHpuLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189bmV3IEZuLHRoaXMuc2l6ZT0wfSx6bi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX18sbj10LmRlbGV0ZShlKTtyZXR1cm4gdGhpcy5zaXplPXQuc2l6ZSxufSx6bi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldChlKX0sem4ucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoZSl9LHpuLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fO2lmKG4gaW5zdGFuY2VvZiBGbil7dmFyIHI9bi5fX2RhdGFfXztpZigheG58fHIubGVuZ3RoPDE5OSlyZXR1cm4gci5wdXNoKFtlLHRdKSx0aGlzLnNpemU9KytuLnNpemUsdGhpcztuPXRoaXMuX19kYXRhX189bmV3IFVuKHIpfXJldHVybiBuLnNldChlLHQpLHRoaXMuc2l6ZT1uLnNpemUsdGhpc307dmFyIGNyPWtvKG1yKSx1cj1rbyhDciwhMCk7ZnVuY3Rpb24gZnIoZSx0KXt2YXIgbj0hMDtyZXR1cm4gY3IoZSwoZnVuY3Rpb24oZSxyLG8pe3JldHVybiBuPSEhdChlLHIsbyl9KSksbn1mdW5jdGlvbiBkcihlLHQsbil7Zm9yKHZhciByPS0xLGk9ZS5sZW5ndGg7KytyPGk7KXt2YXIgYT1lW3JdLGw9dChhKTtpZihudWxsIT1sJiYocz09PW8/bD09bCYmIW9sKGwpOm4obCxzKSkpdmFyIHM9bCxjPWF9cmV0dXJuIGN9ZnVuY3Rpb24gcHIoZSx0KXt2YXIgbj1bXTtyZXR1cm4gY3IoZSwoZnVuY3Rpb24oZSxyLG8pe3QoZSxyLG8pJiZuLnB1c2goZSl9KSksbn1mdW5jdGlvbiBocihlLHQsbixyLG8pe3ZhciBpPS0xLGE9ZS5sZW5ndGg7Zm9yKG58fChuPWhpKSxvfHwobz1bXSk7KytpPGE7KXt2YXIgbD1lW2ldO3Q+MCYmbihsKT90PjE/aHIobCx0LTEsbixyLG8pOlB0KG8sbCk6cnx8KG9bby5sZW5ndGhdPWwpfXJldHVybiBvfXZhciBncj1SbygpLHZyPVJvKCEwKTtmdW5jdGlvbiBtcihlLHQpe3JldHVybiBlJiZncihlLHQsU2wpfWZ1bmN0aW9uIENyKGUsdCl7cmV0dXJuIGUmJnZyKGUsdCxTbCl9ZnVuY3Rpb24geXIoZSx0KXtyZXR1cm4ganQodCwoZnVuY3Rpb24odCl7cmV0dXJuIEdhKGVbdF0pfSkpfWZ1bmN0aW9uIHdyKGUsdCl7Zm9yKHZhciBuPTAscj0odD12byh0LGUpKS5sZW5ndGg7bnVsbCE9ZSYmbjxyOyllPWVbSWkodFtuKytdKV07cmV0dXJuIG4mJm49PXI/ZTpvfWZ1bmN0aW9uIGJyKGUsdCxuKXt2YXIgcj10KGUpO3JldHVybiBaYShlKT9yOlB0KHIsbihlKSl9ZnVuY3Rpb24geHIoZSl7cmV0dXJuIG51bGw9PWU/ZT09PW8/XCJbb2JqZWN0IFVuZGVmaW5lZF1cIjpcIltvYmplY3QgTnVsbF1cIjpKZSYmSmUgaW4gT2UoZSk/ZnVuY3Rpb24oZSl7dmFyIHQ9SWUuY2FsbChlLEplKSxuPWVbSmVdO3RyeXtlW0plXT1vO3ZhciByPSEwfWNhdGNoKGUpe312YXIgaT1IZS5jYWxsKGUpO3JldHVybiByJiYodD9lW0plXT1uOmRlbGV0ZSBlW0plXSksaX0oZSk6ZnVuY3Rpb24oZSl7cmV0dXJuIEhlLmNhbGwoZSl9KGUpfWZ1bmN0aW9uIF9yKGUsdCl7cmV0dXJuIGU+dH1mdW5jdGlvbiBPcihlLHQpe3JldHVybiBudWxsIT1lJiZJZS5jYWxsKGUsdCl9ZnVuY3Rpb24gTHIoZSx0KXtyZXR1cm4gbnVsbCE9ZSYmdCBpbiBPZShlKX1mdW5jdGlvbiBFcihlLHQsbil7Zm9yKHZhciBpPW4/a3Q6TXQsYT1lWzBdLmxlbmd0aCxsPWUubGVuZ3RoLHM9bCxjPXIobCksdT0xLzAsZj1bXTtzLS07KXt2YXIgZD1lW3NdO3MmJnQmJihkPVJ0KGQsWXQodCkpKSx1PXZuKGQubGVuZ3RoLHUpLGNbc109IW4mJih0fHxhPj0xMjAmJmQubGVuZ3RoPj0xMjApP25ldyBXbihzJiZkKTpvfWQ9ZVswXTt2YXIgcD0tMSxoPWNbMF07ZTpmb3IoOysrcDxhJiZmLmxlbmd0aDx1Oyl7dmFyIGc9ZFtwXSx2PXQ/dChnKTpnO2lmKGc9bnx8MCE9PWc/ZzowLCEoaD9YdChoLHYpOmkoZix2LG4pKSl7Zm9yKHM9bDstLXM7KXt2YXIgbT1jW3NdO2lmKCEobT9YdChtLHYpOmkoZVtzXSx2LG4pKSljb250aW51ZSBlfWgmJmgucHVzaCh2KSxmLnB1c2goZyl9fXJldHVybiBmfWZ1bmN0aW9uIFNyKGUsdCxuKXt2YXIgcj1udWxsPT0oZT1PaShlLHQ9dm8odCxlKSkpP2U6ZVtJaSh6aSh0KSldO3JldHVybiBudWxsPT1yP286X3QocixlLG4pfWZ1bmN0aW9uIGpyKGUpe3JldHVybiBYYShlKSYmeHIoZSk9PWd9ZnVuY3Rpb24gTXIoZSx0LG4scixpKXtyZXR1cm4gZT09PXR8fChudWxsPT1lfHxudWxsPT10fHwhWGEoZSkmJiFYYSh0KT9lIT1lJiZ0IT10OmZ1bmN0aW9uKGUsdCxuLHIsaSxhKXt2YXIgbD1aYShlKSxzPVphKHQpLGM9bD92OmZpKGUpLHU9cz92OmZpKHQpLGY9KGM9Yz09Zz9POmMpPT1PLGQ9KHU9dT09Zz9POnUpPT1PLHA9Yz09dTtpZihwJiZVYShlKSl7aWYoIVVhKHQpKXJldHVybiExO2w9ITAsZj0hMX1pZihwJiYhZilyZXR1cm4gYXx8KGE9bmV3IHpuKSxsfHxpbChlKT9KbyhlLHQsbixyLGksYSk6ZnVuY3Rpb24oZSx0LG4scixvLGksYSl7c3dpdGNoKG4pe2Nhc2UgUDppZihlLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8ZS5ieXRlT2Zmc2V0IT10LmJ5dGVPZmZzZXQpcmV0dXJuITE7ZT1lLmJ1ZmZlcix0PXQuYnVmZmVyO2Nhc2UgUjpyZXR1cm4hKGUuYnl0ZUxlbmd0aCE9dC5ieXRlTGVuZ3RofHwhaShuZXcgTmUoZSksbmV3IE5lKHQpKSk7Y2FzZSBtOmNhc2UgQzpjYXNlIF86cmV0dXJuIEhhKCtlLCt0KTtjYXNlIHk6cmV0dXJuIGUubmFtZT09dC5uYW1lJiZlLm1lc3NhZ2U9PXQubWVzc2FnZTtjYXNlIEU6Y2FzZSBqOnJldHVybiBlPT10K1wiXCI7Y2FzZSB4OnZhciBsPW9uO2Nhc2UgUzp2YXIgcz0xJnI7aWYobHx8KGw9c24pLGUuc2l6ZSE9dC5zaXplJiYhcylyZXR1cm4hMTt2YXIgYz1hLmdldChlKTtpZihjKXJldHVybiBjPT10O3J8PTIsYS5zZXQoZSx0KTt2YXIgdT1KbyhsKGUpLGwodCkscixvLGksYSk7cmV0dXJuIGEuZGVsZXRlKGUpLHU7Y2FzZSBNOmlmKFRuKXJldHVybiBUbi5jYWxsKGUpPT1Ubi5jYWxsKHQpfXJldHVybiExfShlLHQsYyxuLHIsaSxhKTtpZighKDEmbikpe3ZhciBoPWYmJkllLmNhbGwoZSxcIl9fd3JhcHBlZF9fXCIpLHc9ZCYmSWUuY2FsbCh0LFwiX193cmFwcGVkX19cIik7aWYoaHx8dyl7dmFyIGI9aD9lLnZhbHVlKCk6ZSxMPXc/dC52YWx1ZSgpOnQ7cmV0dXJuIGF8fChhPW5ldyB6biksaShiLEwsbixyLGEpfX1yZXR1cm4hIXAmJihhfHwoYT1uZXcgem4pLGZ1bmN0aW9uKGUsdCxuLHIsaSxhKXt2YXIgbD0xJm4scz1laShlKSxjPXMubGVuZ3RoO2lmKGMhPWVpKHQpLmxlbmd0aCYmIWwpcmV0dXJuITE7Zm9yKHZhciB1PWM7dS0tOyl7dmFyIGY9c1t1XTtpZighKGw/ZiBpbiB0OkllLmNhbGwodCxmKSkpcmV0dXJuITF9dmFyIGQ9YS5nZXQoZSkscD1hLmdldCh0KTtpZihkJiZwKXJldHVybiBkPT10JiZwPT1lO3ZhciBoPSEwO2Euc2V0KGUsdCksYS5zZXQodCxlKTtmb3IodmFyIGc9bDsrK3U8Yzspe3ZhciB2PWVbZj1zW3VdXSxtPXRbZl07aWYocil2YXIgQz1sP3IobSx2LGYsdCxlLGEpOnIodixtLGYsZSx0LGEpO2lmKCEoQz09PW8/dj09PW18fGkodixtLG4scixhKTpDKSl7aD0hMTticmVha31nfHwoZz1cImNvbnN0cnVjdG9yXCI9PWYpfWlmKGgmJiFnKXt2YXIgeT1lLmNvbnN0cnVjdG9yLHc9dC5jb25zdHJ1Y3Rvcjt5PT13fHwhKFwiY29uc3RydWN0b3JcImluIGUpfHwhKFwiY29uc3RydWN0b3JcImluIHQpfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiB5JiZ5IGluc3RhbmNlb2YgeSYmXCJmdW5jdGlvblwiPT10eXBlb2YgdyYmdyBpbnN0YW5jZW9mIHd8fChoPSExKX1yZXR1cm4gYS5kZWxldGUoZSksYS5kZWxldGUodCksaH0oZSx0LG4scixpLGEpKX0oZSx0LG4scixNcixpKSl9ZnVuY3Rpb24ga3IoZSx0LG4scil7dmFyIGk9bi5sZW5ndGgsYT1pLGw9IXI7aWYobnVsbD09ZSlyZXR1cm4hYTtmb3IoZT1PZShlKTtpLS07KXt2YXIgcz1uW2ldO2lmKGwmJnNbMl0/c1sxXSE9PWVbc1swXV06IShzWzBdaW4gZSkpcmV0dXJuITF9Zm9yKDsrK2k8YTspe3ZhciBjPShzPW5baV0pWzBdLHU9ZVtjXSxmPXNbMV07aWYobCYmc1syXSl7aWYodT09PW8mJiEoYyBpbiBlKSlyZXR1cm4hMX1lbHNle3ZhciBkPW5ldyB6bjtpZihyKXZhciBwPXIodSxmLGMsZSx0LGQpO2lmKCEocD09PW8/TXIoZix1LDMscixkKTpwKSlyZXR1cm4hMX19cmV0dXJuITB9ZnVuY3Rpb24gUnIoZSl7cmV0dXJuISghS2EoZSl8fCh0PWUsVGUmJlRlIGluIHQpKSYmKEdhKGUpP0RlOmdlKS50ZXN0KEFpKGUpKTt2YXIgdH1mdW5jdGlvbiBQcihlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6bnVsbD09ZT9RbDpcIm9iamVjdFwiPT10eXBlb2YgZT9aYShlKT9CcihlWzBdLGVbMV0pOkhyKGUpOnNzKGUpfWZ1bmN0aW9uIElyKGUpe2lmKCF3aShlKSlyZXR1cm4gaG4oZSk7dmFyIHQ9W107Zm9yKHZhciBuIGluIE9lKGUpKUllLmNhbGwoZSxuKSYmXCJjb25zdHJ1Y3RvclwiIT1uJiZ0LnB1c2gobik7cmV0dXJuIHR9ZnVuY3Rpb24gQXIoZSx0KXtyZXR1cm4gZTx0fWZ1bmN0aW9uIFRyKGUsdCl7dmFyIG49LTEsbz1OYShlKT9yKGUubGVuZ3RoKTpbXTtyZXR1cm4gY3IoZSwoZnVuY3Rpb24oZSxyLGkpe29bKytuXT10KGUscixpKX0pKSxvfWZ1bmN0aW9uIEhyKGUpe3ZhciB0PWxpKGUpO3JldHVybiAxPT10Lmxlbmd0aCYmdFswXVsyXT94aSh0WzBdWzBdLHRbMF1bMV0pOmZ1bmN0aW9uKG4pe3JldHVybiBuPT09ZXx8a3IobixlLHQpfX1mdW5jdGlvbiBCcihlLHQpe3JldHVybiBtaShlKSYmYmkodCk/eGkoSWkoZSksdCk6ZnVuY3Rpb24obil7dmFyIHI9eGwobixlKTtyZXR1cm4gcj09PW8mJnI9PT10P19sKG4sZSk6TXIodCxyLDMpfX1mdW5jdGlvbiBWcihlLHQsbixyLGkpe2UhPT10JiZncih0LChmdW5jdGlvbihhLGwpe2lmKGl8fChpPW5ldyB6biksS2EoYSkpIWZ1bmN0aW9uKGUsdCxuLHIsaSxhLGwpe3ZhciBzPUxpKGUsbiksYz1MaSh0LG4pLHU9bC5nZXQoYyk7aWYodSlYbihlLG4sdSk7ZWxzZXt2YXIgZj1hP2EocyxjLG4rXCJcIixlLHQsbCk6byxkPWY9PT1vO2lmKGQpe3ZhciBwPVphKGMpLGg9IXAmJlVhKGMpLGc9IXAmJiFoJiZpbChjKTtmPWMscHx8aHx8Zz9aYShzKT9mPXM6RmEocyk/Zj1FbyhzKTpoPyhkPSExLGY9d28oYywhMCkpOmc/KGQ9ITEsZj14byhjLCEwKSk6Zj1bXTplbChjKXx8RGEoYyk/KGY9cyxEYShzKT9mPXBsKHMpOkthKHMpJiYhR2Eocyl8fChmPXBpKGMpKSk6ZD0hMX1kJiYobC5zZXQoYyxmKSxpKGYsYyxyLGEsbCksbC5kZWxldGUoYykpLFhuKGUsbixmKX19KGUsdCxsLG4sVnIscixpKTtlbHNle3ZhciBzPXI/cihMaShlLGwpLGEsbCtcIlwiLGUsdCxpKTpvO3M9PT1vJiYocz1hKSxYbihlLGwscyl9fSksamwpfWZ1bmN0aW9uIERyKGUsdCl7dmFyIG49ZS5sZW5ndGg7aWYobilyZXR1cm4gZ2kodCs9dDwwP246MCxuKT9lW3RdOm99ZnVuY3Rpb24gWnIoZSx0LG4pe3Q9dC5sZW5ndGg/UnQodCwoZnVuY3Rpb24oZSl7cmV0dXJuIFphKGUpP2Z1bmN0aW9uKHQpe3JldHVybiB3cih0LDE9PT1lLmxlbmd0aD9lWzBdOmUpfTplfSkpOltRbF07dmFyIHI9LTE7dD1SdCh0LFl0KGlpKCkpKTt2YXIgbz1UcihlLChmdW5jdGlvbihlLG4sbyl7dmFyIGk9UnQodCwoZnVuY3Rpb24odCl7cmV0dXJuIHQoZSl9KSk7cmV0dXJue2NyaXRlcmlhOmksaW5kZXg6KytyLHZhbHVlOmV9fSkpO3JldHVybiBmdW5jdGlvbihlLHQpe3ZhciBuPWUubGVuZ3RoO2ZvcihlLnNvcnQodCk7bi0tOyllW25dPWVbbl0udmFsdWU7cmV0dXJuIGV9KG8sKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9LTEsbz1lLmNyaXRlcmlhLGk9dC5jcml0ZXJpYSxhPW8ubGVuZ3RoLGw9bi5sZW5ndGg7KytyPGE7KXt2YXIgcz1fbyhvW3JdLGlbcl0pO2lmKHMpcmV0dXJuIHI+PWw/czpzKihcImRlc2NcIj09bltyXT8tMToxKX1yZXR1cm4gZS5pbmRleC10LmluZGV4fShlLHQsbil9KSl9ZnVuY3Rpb24gJHIoZSx0LG4pe2Zvcih2YXIgcj0tMSxvPXQubGVuZ3RoLGk9e307KytyPG87KXt2YXIgYT10W3JdLGw9d3IoZSxhKTtuKGwsYSkmJllyKGksdm8oYSxlKSxsKX1yZXR1cm4gaX1mdW5jdGlvbiBOcihlLHQsbixyKXt2YXIgbz1yP1p0OkR0LGk9LTEsYT10Lmxlbmd0aCxsPWU7Zm9yKGU9PT10JiYodD1Fbyh0KSksbiYmKGw9UnQoZSxZdChuKSkpOysraTxhOylmb3IodmFyIHM9MCxjPXRbaV0sdT1uP24oYyk6Yzsocz1vKGwsdSxzLHIpKT4tMTspbCE9PWUmJkdlLmNhbGwobCxzLDEpLEdlLmNhbGwoZSxzLDEpO3JldHVybiBlfWZ1bmN0aW9uIEZyKGUsdCl7Zm9yKHZhciBuPWU/dC5sZW5ndGg6MCxyPW4tMTtuLS07KXt2YXIgbz10W25dO2lmKG49PXJ8fG8hPT1pKXt2YXIgaT1vO2dpKG8pP0dlLmNhbGwoZSxvLDEpOmxvKGUsbyl9fXJldHVybiBlfWZ1bmN0aW9uIFVyKGUsdCl7cmV0dXJuIGUrcHQoeW4oKSoodC1lKzEpKX1mdW5jdGlvbiBXcihlLHQpe3ZhciBuPVwiXCI7aWYoIWV8fHQ8MXx8dD5mKXJldHVybiBuO2Rve3QlMiYmKG4rPWUpLCh0PXB0KHQvMikpJiYoZSs9ZSl9d2hpbGUodCk7cmV0dXJuIG59ZnVuY3Rpb24genIoZSx0KXtyZXR1cm4gamkoX2koZSx0LFFsKSxlK1wiXCIpfWZ1bmN0aW9uIEdyKGUpe3JldHVybiBxbihIbChlKSl9ZnVuY3Rpb24gcXIoZSx0KXt2YXIgbj1IbChlKTtyZXR1cm4gUmkobixvcih0LDAsbi5sZW5ndGgpKX1mdW5jdGlvbiBZcihlLHQsbixyKXtpZighS2EoZSkpcmV0dXJuIGU7Zm9yKHZhciBpPS0xLGE9KHQ9dm8odCxlKSkubGVuZ3RoLGw9YS0xLHM9ZTtudWxsIT1zJiYrK2k8YTspe3ZhciBjPUlpKHRbaV0pLHU9bjtpZihcIl9fcHJvdG9fX1wiPT09Y3x8XCJjb25zdHJ1Y3RvclwiPT09Y3x8XCJwcm90b3R5cGVcIj09PWMpcmV0dXJuIGU7aWYoaSE9bCl7dmFyIGY9c1tjXTsodT1yP3IoZixjLHMpOm8pPT09byYmKHU9S2EoZik/ZjpnaSh0W2krMV0pP1tdOnt9KX1KbihzLGMsdSkscz1zW2NdfXJldHVybiBlfXZhciBLcj1Tbj9mdW5jdGlvbihlLHQpe3JldHVybiBTbi5zZXQoZSx0KSxlfTpRbCxYcj1ldD9mdW5jdGlvbihlLHQpe3JldHVybiBldChlLFwidG9TdHJpbmdcIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsdmFsdWU6S2wodCksd3JpdGFibGU6ITB9KX06UWw7ZnVuY3Rpb24gSnIoZSl7cmV0dXJuIFJpKEhsKGUpKX1mdW5jdGlvbiBRcihlLHQsbil7dmFyIG89LTEsaT1lLmxlbmd0aDt0PDAmJih0PS10Pmk/MDppK3QpLChuPW4+aT9pOm4pPDAmJihuKz1pKSxpPXQ+bj8wOm4tdD4+PjAsdD4+Pj0wO2Zvcih2YXIgYT1yKGkpOysrbzxpOylhW29dPWVbbyt0XTtyZXR1cm4gYX1mdW5jdGlvbiBlbyhlLHQpe3ZhciBuO3JldHVybiBjcihlLChmdW5jdGlvbihlLHIsbyl7cmV0dXJuIShuPXQoZSxyLG8pKX0pKSwhIW59ZnVuY3Rpb24gdG8oZSx0LG4pe3ZhciByPTAsbz1udWxsPT1lP3I6ZS5sZW5ndGg7aWYoXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ9PXQmJm88PTIxNDc0ODM2NDcpe2Zvcig7cjxvOyl7dmFyIGk9citvPj4+MSxhPWVbaV07bnVsbCE9PWEmJiFvbChhKSYmKG4/YTw9dDphPHQpP3I9aSsxOm89aX1yZXR1cm4gb31yZXR1cm4gbm8oZSx0LFFsLG4pfWZ1bmN0aW9uIG5vKGUsdCxuLHIpe3ZhciBpPTAsYT1udWxsPT1lPzA6ZS5sZW5ndGg7aWYoMD09PWEpcmV0dXJuIDA7Zm9yKHZhciBsPSh0PW4odCkpIT10LHM9bnVsbD09PXQsYz1vbCh0KSx1PXQ9PT1vO2k8YTspe3ZhciBmPXB0KChpK2EpLzIpLGQ9bihlW2ZdKSxwPWQhPT1vLGg9bnVsbD09PWQsZz1kPT1kLHY9b2woZCk7aWYobCl2YXIgbT1yfHxnO2Vsc2UgbT11P2cmJihyfHxwKTpzP2cmJnAmJihyfHwhaCk6Yz9nJiZwJiYhaCYmKHJ8fCF2KTohaCYmIXYmJihyP2Q8PXQ6ZDx0KTttP2k9ZisxOmE9Zn1yZXR1cm4gdm4oYSw0Mjk0OTY3Mjk0KX1mdW5jdGlvbiBybyhlLHQpe2Zvcih2YXIgbj0tMSxyPWUubGVuZ3RoLG89MCxpPVtdOysrbjxyOyl7dmFyIGE9ZVtuXSxsPXQ/dChhKTphO2lmKCFufHwhSGEobCxzKSl7dmFyIHM9bDtpW28rK109MD09PWE/MDphfX1yZXR1cm4gaX1mdW5jdGlvbiBvbyhlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZT9lOm9sKGUpP2Q6K2V9ZnVuY3Rpb24gaW8oZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIGU7aWYoWmEoZSkpcmV0dXJuIFJ0KGUsaW8pK1wiXCI7aWYob2woZSkpcmV0dXJuIEhuP0huLmNhbGwoZSk6XCJcIjt2YXIgdD1lK1wiXCI7cmV0dXJuXCIwXCI9PXQmJjEvZT09LTEvMD9cIi0wXCI6dH1mdW5jdGlvbiBhbyhlLHQsbil7dmFyIHI9LTEsbz1NdCxpPWUubGVuZ3RoLGE9ITAsbD1bXSxzPWw7aWYobilhPSExLG89a3Q7ZWxzZSBpZihpPj0yMDApe3ZhciBjPXQ/bnVsbDp6byhlKTtpZihjKXJldHVybiBzbihjKTthPSExLG89WHQscz1uZXcgV259ZWxzZSBzPXQ/W106bDtlOmZvcig7KytyPGk7KXt2YXIgdT1lW3JdLGY9dD90KHUpOnU7aWYodT1ufHwwIT09dT91OjAsYSYmZj09Zil7Zm9yKHZhciBkPXMubGVuZ3RoO2QtLTspaWYoc1tkXT09PWYpY29udGludWUgZTt0JiZzLnB1c2goZiksbC5wdXNoKHUpfWVsc2UgbyhzLGYsbil8fChzIT09bCYmcy5wdXNoKGYpLGwucHVzaCh1KSl9cmV0dXJuIGx9ZnVuY3Rpb24gbG8oZSx0KXtyZXR1cm4gbnVsbD09KGU9T2koZSx0PXZvKHQsZSkpKXx8ZGVsZXRlIGVbSWkoemkodCkpXX1mdW5jdGlvbiBzbyhlLHQsbixyKXtyZXR1cm4gWXIoZSx0LG4od3IoZSx0KSkscil9ZnVuY3Rpb24gY28oZSx0LG4scil7Zm9yKHZhciBvPWUubGVuZ3RoLGk9cj9vOi0xOyhyP2ktLTorK2k8bykmJnQoZVtpXSxpLGUpOyk7cmV0dXJuIG4/UXIoZSxyPzA6aSxyP2krMTpvKTpRcihlLHI/aSsxOjAscj9vOmkpfWZ1bmN0aW9uIHVvKGUsdCl7dmFyIG49ZTtyZXR1cm4gbiBpbnN0YW5jZW9mICRuJiYobj1uLnZhbHVlKCkpLEl0KHQsKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZnVuYy5hcHBseSh0LnRoaXNBcmcsUHQoW2VdLHQuYXJncykpfSksbil9ZnVuY3Rpb24gZm8oZSx0LG4pe3ZhciBvPWUubGVuZ3RoO2lmKG88MilyZXR1cm4gbz9hbyhlWzBdKTpbXTtmb3IodmFyIGk9LTEsYT1yKG8pOysraTxvOylmb3IodmFyIGw9ZVtpXSxzPS0xOysrczxvOylzIT1pJiYoYVtpXT1zcihhW2ldfHxsLGVbc10sdCxuKSk7cmV0dXJuIGFvKGhyKGEsMSksdCxuKX1mdW5jdGlvbiBwbyhlLHQsbil7Zm9yKHZhciByPS0xLGk9ZS5sZW5ndGgsYT10Lmxlbmd0aCxsPXt9OysrcjxpOyl7dmFyIHM9cjxhP3Rbcl06bztuKGwsZVtyXSxzKX1yZXR1cm4gbH1mdW5jdGlvbiBobyhlKXtyZXR1cm4gRmEoZSk/ZTpbXX1mdW5jdGlvbiBnbyhlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6UWx9ZnVuY3Rpb24gdm8oZSx0KXtyZXR1cm4gWmEoZSk/ZTptaShlLHQpP1tlXTpQaShobChlKSl9dmFyIG1vPXpyO2Z1bmN0aW9uIENvKGUsdCxuKXt2YXIgcj1lLmxlbmd0aDtyZXR1cm4gbj1uPT09bz9yOm4sIXQmJm4+PXI/ZTpRcihlLHQsbil9dmFyIHlvPWF0fHxmdW5jdGlvbihlKXtyZXR1cm4gZnQuY2xlYXJUaW1lb3V0KGUpfTtmdW5jdGlvbiB3byhlLHQpe2lmKHQpcmV0dXJuIGUuc2xpY2UoKTt2YXIgbj1lLmxlbmd0aCxyPUZlP0ZlKG4pOm5ldyBlLmNvbnN0cnVjdG9yKG4pO3JldHVybiBlLmNvcHkocikscn1mdW5jdGlvbiBibyhlKXt2YXIgdD1uZXcgZS5jb25zdHJ1Y3RvcihlLmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgTmUodCkuc2V0KG5ldyBOZShlKSksdH1mdW5jdGlvbiB4byhlLHQpe3ZhciBuPXQ/Ym8oZS5idWZmZXIpOmUuYnVmZmVyO3JldHVybiBuZXcgZS5jb25zdHJ1Y3RvcihuLGUuYnl0ZU9mZnNldCxlLmxlbmd0aCl9ZnVuY3Rpb24gX28oZSx0KXtpZihlIT09dCl7dmFyIG49ZSE9PW8scj1udWxsPT09ZSxpPWU9PWUsYT1vbChlKSxsPXQhPT1vLHM9bnVsbD09PXQsYz10PT10LHU9b2wodCk7aWYoIXMmJiF1JiYhYSYmZT50fHxhJiZsJiZjJiYhcyYmIXV8fHImJmwmJmN8fCFuJiZjfHwhaSlyZXR1cm4gMTtpZighciYmIWEmJiF1JiZlPHR8fHUmJm4mJmkmJiFyJiYhYXx8cyYmbiYmaXx8IWwmJml8fCFjKXJldHVybi0xfXJldHVybiAwfWZ1bmN0aW9uIE9vKGUsdCxuLG8pe2Zvcih2YXIgaT0tMSxhPWUubGVuZ3RoLGw9bi5sZW5ndGgscz0tMSxjPXQubGVuZ3RoLHU9Z24oYS1sLDApLGY9cihjK3UpLGQ9IW87KytzPGM7KWZbc109dFtzXTtmb3IoOysraTxsOykoZHx8aTxhKSYmKGZbbltpXV09ZVtpXSk7Zm9yKDt1LS07KWZbcysrXT1lW2krK107cmV0dXJuIGZ9ZnVuY3Rpb24gTG8oZSx0LG4sbyl7Zm9yKHZhciBpPS0xLGE9ZS5sZW5ndGgsbD0tMSxzPW4ubGVuZ3RoLGM9LTEsdT10Lmxlbmd0aCxmPWduKGEtcywwKSxkPXIoZit1KSxwPSFvOysraTxmOylkW2ldPWVbaV07Zm9yKHZhciBoPWk7KytjPHU7KWRbaCtjXT10W2NdO2Zvcig7KytsPHM7KShwfHxpPGEpJiYoZFtoK25bbF1dPWVbaSsrXSk7cmV0dXJuIGR9ZnVuY3Rpb24gRW8oZSx0KXt2YXIgbj0tMSxvPWUubGVuZ3RoO2Zvcih0fHwodD1yKG8pKTsrK248bzspdFtuXT1lW25dO3JldHVybiB0fWZ1bmN0aW9uIFNvKGUsdCxuLHIpe3ZhciBpPSFuO258fChuPXt9KTtmb3IodmFyIGE9LTEsbD10Lmxlbmd0aDsrK2E8bDspe3ZhciBzPXRbYV0sYz1yP3IobltzXSxlW3NdLHMsbixlKTpvO2M9PT1vJiYoYz1lW3NdKSxpP25yKG4scyxjKTpKbihuLHMsYyl9cmV0dXJuIG59ZnVuY3Rpb24gam8oZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXt2YXIgbz1aYShuKT9PdDplcixpPXQ/dCgpOnt9O3JldHVybiBvKG4sZSxpaShyLDIpLGkpfX1mdW5jdGlvbiBNbyhlKXtyZXR1cm4genIoKGZ1bmN0aW9uKHQsbil7dmFyIHI9LTEsaT1uLmxlbmd0aCxhPWk+MT9uW2ktMV06byxsPWk+Mj9uWzJdOm87Zm9yKGE9ZS5sZW5ndGg+MyYmXCJmdW5jdGlvblwiPT10eXBlb2YgYT8oaS0tLGEpOm8sbCYmdmkoblswXSxuWzFdLGwpJiYoYT1pPDM/bzphLGk9MSksdD1PZSh0KTsrK3I8aTspe3ZhciBzPW5bcl07cyYmZSh0LHMscixhKX1yZXR1cm4gdH0pKX1mdW5jdGlvbiBrbyhlLHQpe3JldHVybiBmdW5jdGlvbihuLHIpe2lmKG51bGw9PW4pcmV0dXJuIG47aWYoIU5hKG4pKXJldHVybiBlKG4scik7Zm9yKHZhciBvPW4ubGVuZ3RoLGk9dD9vOi0xLGE9T2Uobik7KHQ/aS0tOisraTxvKSYmITEhPT1yKGFbaV0saSxhKTspO3JldHVybiBufX1mdW5jdGlvbiBSbyhlKXtyZXR1cm4gZnVuY3Rpb24odCxuLHIpe2Zvcih2YXIgbz0tMSxpPU9lKHQpLGE9cih0KSxsPWEubGVuZ3RoO2wtLTspe3ZhciBzPWFbZT9sOisrb107aWYoITE9PT1uKGlbc10scyxpKSlicmVha31yZXR1cm4gdH19ZnVuY3Rpb24gUG8oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPXJuKHQ9aGwodCkpP3VuKHQpOm8scj1uP25bMF06dC5jaGFyQXQoMCksaT1uP0NvKG4sMSkuam9pbihcIlwiKTp0LnNsaWNlKDEpO3JldHVybiByW2VdKCkraX19ZnVuY3Rpb24gSW8oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBJdChHbChEbCh0KS5yZXBsYWNlKEtlLFwiXCIpKSxlLFwiXCIpfX1mdW5jdGlvbiBBbyhlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHM7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyBlO2Nhc2UgMTpyZXR1cm4gbmV3IGUodFswXSk7Y2FzZSAyOnJldHVybiBuZXcgZSh0WzBdLHRbMV0pO2Nhc2UgMzpyZXR1cm4gbmV3IGUodFswXSx0WzFdLHRbMl0pO2Nhc2UgNDpyZXR1cm4gbmV3IGUodFswXSx0WzFdLHRbMl0sdFszXSk7Y2FzZSA1OnJldHVybiBuZXcgZSh0WzBdLHRbMV0sdFsyXSx0WzNdLHRbNF0pO2Nhc2UgNjpyZXR1cm4gbmV3IGUodFswXSx0WzFdLHRbMl0sdFszXSx0WzRdLHRbNV0pO2Nhc2UgNzpyZXR1cm4gbmV3IGUodFswXSx0WzFdLHRbMl0sdFszXSx0WzRdLHRbNV0sdFs2XSl9dmFyIG49Vm4oZS5wcm90b3R5cGUpLHI9ZS5hcHBseShuLHQpO3JldHVybiBLYShyKT9yOm59fWZ1bmN0aW9uIFRvKGUpe3JldHVybiBmdW5jdGlvbih0LG4scil7dmFyIGk9T2UodCk7aWYoIU5hKHQpKXt2YXIgYT1paShuLDMpO3Q9U2wodCksbj1mdW5jdGlvbihlKXtyZXR1cm4gYShpW2VdLGUsaSl9fXZhciBsPWUodCxuLHIpO3JldHVybiBsPi0xP2lbYT90W2xdOmxdOm99fWZ1bmN0aW9uIEhvKGUpe3JldHVybiBRbygoZnVuY3Rpb24odCl7dmFyIG49dC5sZW5ndGgscj1uLGE9Wm4ucHJvdG90eXBlLnRocnU7Zm9yKGUmJnQucmV2ZXJzZSgpO3ItLTspe3ZhciBsPXRbcl07aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgbCl0aHJvdyBuZXcgU2UoaSk7aWYoYSYmIXMmJlwid3JhcHBlclwiPT1yaShsKSl2YXIgcz1uZXcgWm4oW10sITApfWZvcihyPXM/cjpuOysrcjxuOyl7dmFyIGM9cmkobD10W3JdKSx1PVwid3JhcHBlclwiPT1jP25pKGwpOm87cz11JiZDaSh1WzBdKSYmNDI0PT11WzFdJiYhdVs0XS5sZW5ndGgmJjE9PXVbOV0/c1tyaSh1WzBdKV0uYXBwbHkocyx1WzNdKToxPT1sLmxlbmd0aCYmQ2kobCk/c1tjXSgpOnMudGhydShsKX1yZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMscj1lWzBdO2lmKHMmJjE9PWUubGVuZ3RoJiZaYShyKSlyZXR1cm4gcy5wbGFudChyKS52YWx1ZSgpO2Zvcih2YXIgbz0wLGk9bj90W29dLmFwcGx5KHRoaXMsZSk6cjsrK288bjspaT10W29dLmNhbGwodGhpcyxpKTtyZXR1cm4gaX19KSl9ZnVuY3Rpb24gQm8oZSx0LG4saSxhLGwscyx1LGYsZCl7dmFyIHA9dCZjLGg9MSZ0LGc9MiZ0LHY9MjQmdCxtPTUxMiZ0LEM9Zz9vOkFvKGUpO3JldHVybiBmdW5jdGlvbiBjKCl7Zm9yKHZhciB5PWFyZ3VtZW50cy5sZW5ndGgsdz1yKHkpLGI9eTtiLS07KXdbYl09YXJndW1lbnRzW2JdO2lmKHYpdmFyIHg9b2koYyksXz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1lLmxlbmd0aCxyPTA7bi0tOyllW25dPT09dCYmKytyO3JldHVybiByfSh3LHgpO2lmKGkmJih3PU9vKHcsaSxhLHYpKSxsJiYodz1Mbyh3LGwscyx2KSkseS09Xyx2JiZ5PGQpe3ZhciBPPWxuKHcseCk7cmV0dXJuIFVvKGUsdCxCbyxjLnBsYWNlaG9sZGVyLG4sdyxPLHUsZixkLXkpfXZhciBMPWg/bjp0aGlzLEU9Zz9MW2VdOmU7cmV0dXJuIHk9dy5sZW5ndGgsdT93PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoLHI9dm4odC5sZW5ndGgsbiksaT1FbyhlKTtyLS07KXt2YXIgYT10W3JdO2Vbcl09Z2koYSxuKT9pW2FdOm99cmV0dXJuIGV9KHcsdSk6bSYmeT4xJiZ3LnJldmVyc2UoKSxwJiZmPHkmJih3Lmxlbmd0aD1mKSx0aGlzJiZ0aGlzIT09ZnQmJnRoaXMgaW5zdGFuY2VvZiBjJiYoRT1DfHxBbyhFKSksRS5hcHBseShMLHcpfX1mdW5jdGlvbiBWbyhlLHQpe3JldHVybiBmdW5jdGlvbihuLHIpe3JldHVybiBmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbXIoZSwoZnVuY3Rpb24oZSxvLGkpe3QocixuKGUpLG8saSl9KSkscn0obixlLHQocikse30pfX1mdW5jdGlvbiBEbyhlLHQpe3JldHVybiBmdW5jdGlvbihuLHIpe3ZhciBpO2lmKG49PT1vJiZyPT09bylyZXR1cm4gdDtpZihuIT09byYmKGk9biksciE9PW8pe2lmKGk9PT1vKXJldHVybiByO1wic3RyaW5nXCI9PXR5cGVvZiBufHxcInN0cmluZ1wiPT10eXBlb2Ygcj8obj1pbyhuKSxyPWlvKHIpKToobj1vbyhuKSxyPW9vKHIpKSxpPWUobixyKX1yZXR1cm4gaX19ZnVuY3Rpb24gWm8oZSl7cmV0dXJuIFFvKChmdW5jdGlvbih0KXtyZXR1cm4gdD1SdCh0LFl0KGlpKCkpKSx6cigoZnVuY3Rpb24obil7dmFyIHI9dGhpcztyZXR1cm4gZSh0LChmdW5jdGlvbihlKXtyZXR1cm4gX3QoZSxyLG4pfSkpfSkpfSkpfWZ1bmN0aW9uICRvKGUsdCl7dmFyIG49KHQ9dD09PW8/XCIgXCI6aW8odCkpLmxlbmd0aDtpZihuPDIpcmV0dXJuIG4/V3IodCxlKTp0O3ZhciByPVdyKHQsZHQoZS9jbih0KSkpO3JldHVybiBybih0KT9Dbyh1bihyKSwwLGUpLmpvaW4oXCJcIik6ci5zbGljZSgwLGUpfWZ1bmN0aW9uIE5vKGUpe3JldHVybiBmdW5jdGlvbih0LG4saSl7cmV0dXJuIGkmJlwibnVtYmVyXCIhPXR5cGVvZiBpJiZ2aSh0LG4saSkmJihuPWk9byksdD1jbCh0KSxuPT09bz8obj10LHQ9MCk6bj1jbChuKSxmdW5jdGlvbihlLHQsbixvKXtmb3IodmFyIGk9LTEsYT1nbihkdCgodC1lKS8obnx8MSkpLDApLGw9cihhKTthLS07KWxbbz9hOisraV09ZSxlKz1uO3JldHVybiBsfSh0LG4saT1pPT09bz90PG4/MTotMTpjbChpKSxlKX19ZnVuY3Rpb24gRm8oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQmJlwic3RyaW5nXCI9PXR5cGVvZiBufHwodD1kbCh0KSxuPWRsKG4pKSxlKHQsbil9fWZ1bmN0aW9uIFVvKGUsdCxuLHIsaSxhLGwsYyx1LGYpe3ZhciBkPTgmdDt0fD1kP3M6NjQsNCYodCY9fihkPzY0OnMpKXx8KHQmPS00KTt2YXIgcD1bZSx0LGksZD9hOm8sZD9sOm8sZD9vOmEsZD9vOmwsYyx1LGZdLGg9bi5hcHBseShvLHApO3JldHVybiBDaShlKSYmRWkoaCxwKSxoLnBsYWNlaG9sZGVyPXIsTWkoaCxlLHQpfWZ1bmN0aW9uIFdvKGUpe3ZhciB0PV9lW2VdO3JldHVybiBmdW5jdGlvbihlLG4pe2lmKGU9ZGwoZSksKG49bnVsbD09bj8wOnZuKHVsKG4pLDI5MikpJiZIdChlKSl7dmFyIHI9KGhsKGUpK1wiZVwiKS5zcGxpdChcImVcIik7cmV0dXJuKygocj0oaGwodChyWzBdK1wiZVwiKygrclsxXStuKSkpK1wiZVwiKS5zcGxpdChcImVcIikpWzBdK1wiZVwiKygrclsxXS1uKSl9cmV0dXJuIHQoZSl9fXZhciB6bz1PbiYmMS9zbihuZXcgT24oWywtMF0pKVsxXT09dT9mdW5jdGlvbihlKXtyZXR1cm4gbmV3IE9uKGUpfTpvcztmdW5jdGlvbiBHbyhlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49ZmkodCk7cmV0dXJuIG49PXg/b24odCk6bj09Uz9mdW5jdGlvbihlKXt2YXIgdD0tMSxuPUFycmF5KGUuc2l6ZSk7cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7blsrK3RdPVtlLGVdfSkpLG59KHQpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFJ0KHQsKGZ1bmN0aW9uKHQpe3JldHVyblt0LGVbdF1dfSkpfSh0LGUodCkpfX1mdW5jdGlvbiBxbyhlLHQsbixhLHUsZixkLHApe3ZhciBoPTImdDtpZighaCYmXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgU2UoaSk7dmFyIGc9YT9hLmxlbmd0aDowO2lmKGd8fCh0Jj0tOTcsYT11PW8pLGQ9ZD09PW8/ZDpnbih1bChkKSwwKSxwPXA9PT1vP3A6dWwocCksZy09dT91Lmxlbmd0aDowLDY0JnQpe3ZhciB2PWEsbT11O2E9dT1vfXZhciBDPWg/bzpuaShlKSx5PVtlLHQsbixhLHUsdixtLGYsZCxwXTtpZihDJiZmdW5jdGlvbihlLHQpe3ZhciBuPWVbMV0scj10WzFdLG89bnxyLGk9bzwxMzEsYT1yPT1jJiY4PT1ufHxyPT1jJiYyNTY9PW4mJmVbN10ubGVuZ3RoPD10WzhdfHwzODQ9PXImJnRbN10ubGVuZ3RoPD10WzhdJiY4PT1uO2lmKCFpJiYhYSlyZXR1cm4gZTsxJnImJihlWzJdPXRbMl0sb3w9MSZuPzA6NCk7dmFyIHM9dFszXTtpZihzKXt2YXIgdT1lWzNdO2VbM109dT9Pbyh1LHMsdFs0XSk6cyxlWzRdPXU/bG4oZVszXSxsKTp0WzRdfShzPXRbNV0pJiYodT1lWzVdLGVbNV09dT9Mbyh1LHMsdFs2XSk6cyxlWzZdPXU/bG4oZVs1XSxsKTp0WzZdKSwocz10WzddKSYmKGVbN109cyksciZjJiYoZVs4XT1udWxsPT1lWzhdP3RbOF06dm4oZVs4XSx0WzhdKSksbnVsbD09ZVs5XSYmKGVbOV09dFs5XSksZVswXT10WzBdLGVbMV09b30oeSxDKSxlPXlbMF0sdD15WzFdLG49eVsyXSxhPXlbM10sdT15WzRdLCEocD15WzldPXlbOV09PT1vP2g/MDplLmxlbmd0aDpnbih5WzldLWcsMCkpJiYyNCZ0JiYodCY9LTI1KSx0JiYxIT10KXc9OD09dHx8MTY9PXQ/ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPUFvKGUpO3JldHVybiBmdW5jdGlvbiBhKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgscz1yKGwpLGM9bCx1PW9pKGEpO2MtLTspc1tjXT1hcmd1bWVudHNbY107dmFyIGY9bDwzJiZzWzBdIT09dSYmc1tsLTFdIT09dT9bXTpsbihzLHUpO3JldHVybihsLT1mLmxlbmd0aCk8bj9VbyhlLHQsQm8sYS5wbGFjZWhvbGRlcixvLHMsZixvLG8sbi1sKTpfdCh0aGlzJiZ0aGlzIT09ZnQmJnRoaXMgaW5zdGFuY2VvZiBhP2k6ZSx0aGlzLHMpfX0oZSx0LHApOnQhPXMmJjMzIT10fHx1Lmxlbmd0aD9Cby5hcHBseShvLHkpOmZ1bmN0aW9uKGUsdCxuLG8pe3ZhciBpPTEmdCxhPUFvKGUpO3JldHVybiBmdW5jdGlvbiB0KCl7Zm9yKHZhciBsPS0xLHM9YXJndW1lbnRzLmxlbmd0aCxjPS0xLHU9by5sZW5ndGgsZj1yKHUrcyksZD10aGlzJiZ0aGlzIT09ZnQmJnRoaXMgaW5zdGFuY2VvZiB0P2E6ZTsrK2M8dTspZltjXT1vW2NdO2Zvcig7cy0tOylmW2MrK109YXJndW1lbnRzWysrbF07cmV0dXJuIF90KGQsaT9uOnRoaXMsZil9fShlLHQsbixhKTtlbHNlIHZhciB3PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0xJnQsbz1BbyhlKTtyZXR1cm4gZnVuY3Rpb24gdCgpe3JldHVybih0aGlzJiZ0aGlzIT09ZnQmJnRoaXMgaW5zdGFuY2VvZiB0P286ZSkuYXBwbHkocj9uOnRoaXMsYXJndW1lbnRzKX19KGUsdCxuKTtyZXR1cm4gTWkoKEM/S3I6RWkpKHcseSksZSx0KX1mdW5jdGlvbiBZbyhlLHQsbixyKXtyZXR1cm4gZT09PW98fEhhKGUsa2Vbbl0pJiYhSWUuY2FsbChyLG4pP3Q6ZX1mdW5jdGlvbiBLbyhlLHQsbixyLGksYSl7cmV0dXJuIEthKGUpJiZLYSh0KSYmKGEuc2V0KHQsZSksVnIoZSx0LG8sS28sYSksYS5kZWxldGUodCkpLGV9ZnVuY3Rpb24gWG8oZSl7cmV0dXJuIGVsKGUpP286ZX1mdW5jdGlvbiBKbyhlLHQsbixyLGksYSl7dmFyIGw9MSZuLHM9ZS5sZW5ndGgsYz10Lmxlbmd0aDtpZihzIT1jJiYhKGwmJmM+cykpcmV0dXJuITE7dmFyIHU9YS5nZXQoZSksZj1hLmdldCh0KTtpZih1JiZmKXJldHVybiB1PT10JiZmPT1lO3ZhciBkPS0xLHA9ITAsaD0yJm4/bmV3IFduOm87Zm9yKGEuc2V0KGUsdCksYS5zZXQodCxlKTsrK2Q8czspe3ZhciBnPWVbZF0sdj10W2RdO2lmKHIpdmFyIG09bD9yKHYsZyxkLHQsZSxhKTpyKGcsdixkLGUsdCxhKTtpZihtIT09byl7aWYobSljb250aW51ZTtwPSExO2JyZWFrfWlmKGgpe2lmKCFUdCh0LChmdW5jdGlvbihlLHQpe2lmKCFYdChoLHQpJiYoZz09PWV8fGkoZyxlLG4scixhKSkpcmV0dXJuIGgucHVzaCh0KX0pKSl7cD0hMTticmVha319ZWxzZSBpZihnIT09diYmIWkoZyx2LG4scixhKSl7cD0hMTticmVha319cmV0dXJuIGEuZGVsZXRlKGUpLGEuZGVsZXRlKHQpLHB9ZnVuY3Rpb24gUW8oZSl7cmV0dXJuIGppKF9pKGUsbywkaSksZStcIlwiKX1mdW5jdGlvbiBlaShlKXtyZXR1cm4gYnIoZSxTbCxjaSl9ZnVuY3Rpb24gdGkoZSl7cmV0dXJuIGJyKGUsamwsdWkpfXZhciBuaT1Tbj9mdW5jdGlvbihlKXtyZXR1cm4gU24uZ2V0KGUpfTpvcztmdW5jdGlvbiByaShlKXtmb3IodmFyIHQ9ZS5uYW1lK1wiXCIsbj1qblt0XSxyPUllLmNhbGwoam4sdCk/bi5sZW5ndGg6MDtyLS07KXt2YXIgbz1uW3JdLGk9by5mdW5jO2lmKG51bGw9PWl8fGk9PWUpcmV0dXJuIG8ubmFtZX1yZXR1cm4gdH1mdW5jdGlvbiBvaShlKXtyZXR1cm4oSWUuY2FsbChCbixcInBsYWNlaG9sZGVyXCIpP0JuOmUpLnBsYWNlaG9sZGVyfWZ1bmN0aW9uIGlpKCl7dmFyIGU9Qm4uaXRlcmF0ZWV8fGVzO3JldHVybiBlPWU9PT1lcz9QcjplLGFyZ3VtZW50cy5sZW5ndGg/ZShhcmd1bWVudHNbMF0sYXJndW1lbnRzWzFdKTplfWZ1bmN0aW9uIGFpKGUsdCl7dmFyIG4scixvPWUuX19kYXRhX187cmV0dXJuKFwic3RyaW5nXCI9PShyPXR5cGVvZihuPXQpKXx8XCJudW1iZXJcIj09cnx8XCJzeW1ib2xcIj09cnx8XCJib29sZWFuXCI9PXI/XCJfX3Byb3RvX19cIiE9PW46bnVsbD09PW4pP29bXCJzdHJpbmdcIj09dHlwZW9mIHQ/XCJzdHJpbmdcIjpcImhhc2hcIl06by5tYXB9ZnVuY3Rpb24gbGkoZSl7Zm9yKHZhciB0PVNsKGUpLG49dC5sZW5ndGg7bi0tOyl7dmFyIHI9dFtuXSxvPWVbcl07dFtuXT1bcixvLGJpKG8pXX1yZXR1cm4gdH1mdW5jdGlvbiBzaShlLHQpe3ZhciBuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWU/bzplW3RdfShlLHQpO3JldHVybiBScihuKT9uOm99dmFyIGNpPWd0P2Z1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP1tdOihlPU9lKGUpLGp0KGd0KGUpLChmdW5jdGlvbih0KXtyZXR1cm4gemUuY2FsbChlLHQpfSkpKX06ZnMsdWk9Z3Q/ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdO2U7KVB0KHQsY2koZSkpLGU9VWUoZSk7cmV0dXJuIHR9OmZzLGZpPXhyO2Z1bmN0aW9uIGRpKGUsdCxuKXtmb3IodmFyIHI9LTEsbz0odD12byh0LGUpKS5sZW5ndGgsaT0hMTsrK3I8bzspe3ZhciBhPUlpKHRbcl0pO2lmKCEoaT1udWxsIT1lJiZuKGUsYSkpKWJyZWFrO2U9ZVthXX1yZXR1cm4gaXx8KytyIT1vP2k6ISEobz1udWxsPT1lPzA6ZS5sZW5ndGgpJiZZYShvKSYmZ2koYSxvKSYmKFphKGUpfHxEYShlKSl9ZnVuY3Rpb24gcGkoZSl7cmV0dXJuXCJmdW5jdGlvblwiIT10eXBlb2YgZS5jb25zdHJ1Y3Rvcnx8d2koZSk/e306Vm4oVWUoZSkpfWZ1bmN0aW9uIGhpKGUpe3JldHVybiBaYShlKXx8RGEoZSl8fCEhKHFlJiZlJiZlW3FlXSl9ZnVuY3Rpb24gZ2koZSx0KXt2YXIgbj10eXBlb2YgZTtyZXR1cm4hISh0PW51bGw9PXQ/Zjp0KSYmKFwibnVtYmVyXCI9PW58fFwic3ltYm9sXCIhPW4mJm1lLnRlc3QoZSkpJiZlPi0xJiZlJTE9PTAmJmU8dH1mdW5jdGlvbiB2aShlLHQsbil7aWYoIUthKG4pKXJldHVybiExO3ZhciByPXR5cGVvZiB0O3JldHVybiEhKFwibnVtYmVyXCI9PXI/TmEobikmJmdpKHQsbi5sZW5ndGgpOlwic3RyaW5nXCI9PXImJnQgaW4gbikmJkhhKG5bdF0sZSl9ZnVuY3Rpb24gbWkoZSx0KXtpZihaYShlKSlyZXR1cm4hMTt2YXIgbj10eXBlb2YgZTtyZXR1cm4hKFwibnVtYmVyXCIhPW4mJlwic3ltYm9sXCIhPW4mJlwiYm9vbGVhblwiIT1uJiZudWxsIT1lJiYhb2woZSkpfHxRLnRlc3QoZSl8fCFKLnRlc3QoZSl8fG51bGwhPXQmJmUgaW4gT2UodCl9ZnVuY3Rpb24gQ2koZSl7dmFyIHQ9cmkoZSksbj1Cblt0XTtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBufHwhKHQgaW4gJG4ucHJvdG90eXBlKSlyZXR1cm4hMTtpZihlPT09bilyZXR1cm4hMDt2YXIgcj1uaShuKTtyZXR1cm4hIXImJmU9PT1yWzBdfShibiYmZmkobmV3IGJuKG5ldyBBcnJheUJ1ZmZlcigxKSkpIT1QfHx4biYmZmkobmV3IHhuKSE9eHx8X24mJmZpKF9uLnJlc29sdmUoKSkhPUx8fE9uJiZmaShuZXcgT24pIT1TfHxMbiYmZmkobmV3IExuKSE9aykmJihmaT1mdW5jdGlvbihlKXt2YXIgdD14cihlKSxuPXQ9PU8/ZS5jb25zdHJ1Y3RvcjpvLHI9bj9BaShuKTpcIlwiO2lmKHIpc3dpdGNoKHIpe2Nhc2UgTW46cmV0dXJuIFA7Y2FzZSBrbjpyZXR1cm4geDtjYXNlIFJuOnJldHVybiBMO2Nhc2UgUG46cmV0dXJuIFM7Y2FzZSBJbjpyZXR1cm4ga31yZXR1cm4gdH0pO3ZhciB5aT1SZT9HYTpkcztmdW5jdGlvbiB3aShlKXt2YXIgdD1lJiZlLmNvbnN0cnVjdG9yO3JldHVybiBlPT09KFwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJnQucHJvdG90eXBlfHxrZSl9ZnVuY3Rpb24gYmkoZSl7cmV0dXJuIGU9PWUmJiFLYShlKX1mdW5jdGlvbiB4aShlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbnVsbCE9biYmbltlXT09PXQmJih0IT09b3x8ZSBpbiBPZShuKSl9fWZ1bmN0aW9uIF9pKGUsdCxuKXtyZXR1cm4gdD1nbih0PT09bz9lLmxlbmd0aC0xOnQsMCksZnVuY3Rpb24oKXtmb3IodmFyIG89YXJndW1lbnRzLGk9LTEsYT1nbihvLmxlbmd0aC10LDApLGw9cihhKTsrK2k8YTspbFtpXT1vW3QraV07aT0tMTtmb3IodmFyIHM9cih0KzEpOysraTx0OylzW2ldPW9baV07cmV0dXJuIHNbdF09bihsKSxfdChlLHRoaXMscyl9fWZ1bmN0aW9uIE9pKGUsdCl7cmV0dXJuIHQubGVuZ3RoPDI/ZTp3cihlLFFyKHQsMCwtMSkpfWZ1bmN0aW9uIExpKGUsdCl7aWYoKFwiY29uc3RydWN0b3JcIiE9PXR8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGVbdF0pJiZcIl9fcHJvdG9fX1wiIT10KXJldHVybiBlW3RdfXZhciBFaT1raShLciksU2k9dXR8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ0LnNldFRpbWVvdXQoZSx0KX0samk9a2koWHIpO2Z1bmN0aW9uIE1pKGUsdCxuKXt2YXIgcj10K1wiXCI7cmV0dXJuIGppKGUsZnVuY3Rpb24oZSx0KXt2YXIgbj10Lmxlbmd0aDtpZighbilyZXR1cm4gZTt2YXIgcj1uLTE7cmV0dXJuIHRbcl09KG4+MT9cIiYgXCI6XCJcIikrdFtyXSx0PXQuam9pbihuPjI/XCIsIFwiOlwiIFwiKSxlLnJlcGxhY2UoaWUsXCJ7XFxuLyogW3dyYXBwZWQgd2l0aCBcIit0K1wiXSAqL1xcblwiKX0ocixmdW5jdGlvbihlLHQpe3JldHVybiBMdChoLChmdW5jdGlvbihuKXt2YXIgcj1cIl8uXCIrblswXTt0Jm5bMV0mJiFNdChlLHIpJiZlLnB1c2gocil9KSksZS5zb3J0KCl9KGZ1bmN0aW9uKGUpe3ZhciB0PWUubWF0Y2goYWUpO3JldHVybiB0P3RbMV0uc3BsaXQobGUpOltdfShyKSxuKSkpfWZ1bmN0aW9uIGtpKGUpe3ZhciB0PTAsbj0wO3JldHVybiBmdW5jdGlvbigpe3ZhciByPW1uKCksaT0xNi0oci1uKTtpZihuPXIsaT4wKXtpZigrK3Q+PTgwMClyZXR1cm4gYXJndW1lbnRzWzBdfWVsc2UgdD0wO3JldHVybiBlLmFwcGx5KG8sYXJndW1lbnRzKX19ZnVuY3Rpb24gUmkoZSx0KXt2YXIgbj0tMSxyPWUubGVuZ3RoLGk9ci0xO2Zvcih0PXQ9PT1vP3I6dDsrK248dDspe3ZhciBhPVVyKG4saSksbD1lW2FdO2VbYV09ZVtuXSxlW25dPWx9cmV0dXJuIGUubGVuZ3RoPXQsZX12YXIgUGk9ZnVuY3Rpb24oZSl7dmFyIHQ9a2EoKGZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiA0Nj09PWUuY2hhckNvZGVBdCgwKSYmdC5wdXNoKFwiXCIpLGUucmVwbGFjZShlZSwoZnVuY3Rpb24oZSxuLHIsbyl7dC5wdXNoKHI/by5yZXBsYWNlKHVlLFwiJDFcIik6bnx8ZSl9KSksdH0pLChmdW5jdGlvbihlKXtyZXR1cm4gNTAwPT09bi5zaXplJiZuLmNsZWFyKCksZX0pKSxuPXQuY2FjaGU7cmV0dXJuIHR9KCk7ZnVuY3Rpb24gSWkoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGV8fG9sKGUpKXJldHVybiBlO3ZhciB0PWUrXCJcIjtyZXR1cm5cIjBcIj09dCYmMS9lPT0tMS8wP1wiLTBcIjp0fWZ1bmN0aW9uIEFpKGUpe2lmKG51bGwhPWUpe3RyeXtyZXR1cm4gUGUuY2FsbChlKX1jYXRjaChlKXt9dHJ5e3JldHVybiBlK1wiXCJ9Y2F0Y2goZSl7fX1yZXR1cm5cIlwifWZ1bmN0aW9uIFRpKGUpe2lmKGUgaW5zdGFuY2VvZiAkbilyZXR1cm4gZS5jbG9uZSgpO3ZhciB0PW5ldyBabihlLl9fd3JhcHBlZF9fLGUuX19jaGFpbl9fKTtyZXR1cm4gdC5fX2FjdGlvbnNfXz1FbyhlLl9fYWN0aW9uc19fKSx0Ll9faW5kZXhfXz1lLl9faW5kZXhfXyx0Ll9fdmFsdWVzX189ZS5fX3ZhbHVlc19fLHR9dmFyIEhpPXpyKChmdW5jdGlvbihlLHQpe3JldHVybiBGYShlKT9zcihlLGhyKHQsMSxGYSwhMCkpOltdfSkpLEJpPXpyKChmdW5jdGlvbihlLHQpe3ZhciBuPXppKHQpO3JldHVybiBGYShuKSYmKG49byksRmEoZSk/c3IoZSxocih0LDEsRmEsITApLGlpKG4sMikpOltdfSkpLFZpPXpyKChmdW5jdGlvbihlLHQpe3ZhciBuPXppKHQpO3JldHVybiBGYShuKSYmKG49byksRmEoZSk/c3IoZSxocih0LDEsRmEsITApLG8sbik6W119KSk7ZnVuY3Rpb24gRGkoZSx0LG4pe3ZhciByPW51bGw9PWU/MDplLmxlbmd0aDtpZighcilyZXR1cm4tMTt2YXIgbz1udWxsPT1uPzA6dWwobik7cmV0dXJuIG88MCYmKG89Z24ocitvLDApKSxWdChlLGlpKHQsMyksbyl9ZnVuY3Rpb24gWmkoZSx0LG4pe3ZhciByPW51bGw9PWU/MDplLmxlbmd0aDtpZighcilyZXR1cm4tMTt2YXIgaT1yLTE7cmV0dXJuIG4hPT1vJiYoaT11bChuKSxpPW48MD9nbihyK2ksMCk6dm4oaSxyLTEpKSxWdChlLGlpKHQsMyksaSwhMCl9ZnVuY3Rpb24gJGkoZSl7cmV0dXJuIG51bGwhPWUmJmUubGVuZ3RoP2hyKGUsMSk6W119ZnVuY3Rpb24gTmkoZSl7cmV0dXJuIGUmJmUubGVuZ3RoP2VbMF06b312YXIgRmk9enIoKGZ1bmN0aW9uKGUpe3ZhciB0PVJ0KGUsaG8pO3JldHVybiB0Lmxlbmd0aCYmdFswXT09PWVbMF0/RXIodCk6W119KSksVWk9enIoKGZ1bmN0aW9uKGUpe3ZhciB0PXppKGUpLG49UnQoZSxobyk7cmV0dXJuIHQ9PT16aShuKT90PW86bi5wb3AoKSxuLmxlbmd0aCYmblswXT09PWVbMF0/RXIobixpaSh0LDIpKTpbXX0pKSxXaT16cigoZnVuY3Rpb24oZSl7dmFyIHQ9emkoZSksbj1SdChlLGhvKTtyZXR1cm4odD1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6bykmJm4ucG9wKCksbi5sZW5ndGgmJm5bMF09PT1lWzBdP0VyKG4sbyx0KTpbXX0pKTtmdW5jdGlvbiB6aShlKXt2YXIgdD1udWxsPT1lPzA6ZS5sZW5ndGg7cmV0dXJuIHQ/ZVt0LTFdOm99dmFyIEdpPXpyKHFpKTtmdW5jdGlvbiBxaShlLHQpe3JldHVybiBlJiZlLmxlbmd0aCYmdCYmdC5sZW5ndGg/TnIoZSx0KTplfXZhciBZaT1RbygoZnVuY3Rpb24oZSx0KXt2YXIgbj1udWxsPT1lPzA6ZS5sZW5ndGgscj1ycihlLHQpO3JldHVybiBGcihlLFJ0KHQsKGZ1bmN0aW9uKGUpe3JldHVybiBnaShlLG4pPytlOmV9KSkuc29ydChfbykpLHJ9KSk7ZnVuY3Rpb24gS2koZSl7cmV0dXJuIG51bGw9PWU/ZTp3bi5jYWxsKGUpfXZhciBYaT16cigoZnVuY3Rpb24oZSl7cmV0dXJuIGFvKGhyKGUsMSxGYSwhMCkpfSkpLEppPXpyKChmdW5jdGlvbihlKXt2YXIgdD16aShlKTtyZXR1cm4gRmEodCkmJih0PW8pLGFvKGhyKGUsMSxGYSwhMCksaWkodCwyKSl9KSksUWk9enIoKGZ1bmN0aW9uKGUpe3ZhciB0PXppKGUpO3JldHVybiB0PVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpvLGFvKGhyKGUsMSxGYSwhMCksbyx0KX0pKTtmdW5jdGlvbiBlYShlKXtpZighZXx8IWUubGVuZ3RoKXJldHVybltdO3ZhciB0PTA7cmV0dXJuIGU9anQoZSwoZnVuY3Rpb24oZSl7aWYoRmEoZSkpcmV0dXJuIHQ9Z24oZS5sZW5ndGgsdCksITB9KSksR3QodCwoZnVuY3Rpb24odCl7cmV0dXJuIFJ0KGUsRnQodCkpfSkpfWZ1bmN0aW9uIHRhKGUsdCl7aWYoIWV8fCFlLmxlbmd0aClyZXR1cm5bXTt2YXIgbj1lYShlKTtyZXR1cm4gbnVsbD09dD9uOlJ0KG4sKGZ1bmN0aW9uKGUpe3JldHVybiBfdCh0LG8sZSl9KSl9dmFyIG5hPXpyKChmdW5jdGlvbihlLHQpe3JldHVybiBGYShlKT9zcihlLHQpOltdfSkpLHJhPXpyKChmdW5jdGlvbihlKXtyZXR1cm4gZm8oanQoZSxGYSkpfSkpLG9hPXpyKChmdW5jdGlvbihlKXt2YXIgdD16aShlKTtyZXR1cm4gRmEodCkmJih0PW8pLGZvKGp0KGUsRmEpLGlpKHQsMikpfSkpLGlhPXpyKChmdW5jdGlvbihlKXt2YXIgdD16aShlKTtyZXR1cm4gdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6byxmbyhqdChlLEZhKSxvLHQpfSkpLGFhPXpyKGVhKSxsYT16cigoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgsbj10PjE/ZVt0LTFdOm87cmV0dXJuIG49XCJmdW5jdGlvblwiPT10eXBlb2Ygbj8oZS5wb3AoKSxuKTpvLHRhKGUsbil9KSk7ZnVuY3Rpb24gc2EoZSl7dmFyIHQ9Qm4oZSk7cmV0dXJuIHQuX19jaGFpbl9fPSEwLHR9ZnVuY3Rpb24gY2EoZSx0KXtyZXR1cm4gdChlKX12YXIgdWE9UW8oKGZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoLG49dD9lWzBdOjAscj10aGlzLl9fd3JhcHBlZF9fLGk9ZnVuY3Rpb24odCl7cmV0dXJuIHJyKHQsZSl9O3JldHVybiEodD4xfHx0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCkmJnIgaW5zdGFuY2VvZiAkbiYmZ2kobik/KChyPXIuc2xpY2UobiwrbisodD8xOjApKSkuX19hY3Rpb25zX18ucHVzaCh7ZnVuYzpjYSxhcmdzOltpXSx0aGlzQXJnOm99KSxuZXcgWm4ocix0aGlzLl9fY2hhaW5fXykudGhydSgoZnVuY3Rpb24oZSl7cmV0dXJuIHQmJiFlLmxlbmd0aCYmZS5wdXNoKG8pLGV9KSkpOnRoaXMudGhydShpKX0pKSxmYT1qbygoZnVuY3Rpb24oZSx0LG4pe0llLmNhbGwoZSxuKT8rK2Vbbl06bnIoZSxuLDEpfSkpLGRhPVRvKERpKSxwYT1UbyhaaSk7ZnVuY3Rpb24gaGEoZSx0KXtyZXR1cm4oWmEoZSk/THQ6Y3IpKGUsaWkodCwzKSl9ZnVuY3Rpb24gZ2EoZSx0KXtyZXR1cm4oWmEoZSk/RXQ6dXIpKGUsaWkodCwzKSl9dmFyIHZhPWpvKChmdW5jdGlvbihlLHQsbil7SWUuY2FsbChlLG4pP2Vbbl0ucHVzaCh0KTpucihlLG4sW3RdKX0pKSxtYT16cigoZnVuY3Rpb24oZSx0LG4pe3ZhciBvPS0xLGk9XCJmdW5jdGlvblwiPT10eXBlb2YgdCxhPU5hKGUpP3IoZS5sZW5ndGgpOltdO3JldHVybiBjcihlLChmdW5jdGlvbihlKXthWysrb109aT9fdCh0LGUsbik6U3IoZSx0LG4pfSkpLGF9KSksQ2E9am8oKGZ1bmN0aW9uKGUsdCxuKXtucihlLG4sdCl9KSk7ZnVuY3Rpb24geWEoZSx0KXtyZXR1cm4oWmEoZSk/UnQ6VHIpKGUsaWkodCwzKSl9dmFyIHdhPWpvKChmdW5jdGlvbihlLHQsbil7ZVtuPzA6MV0ucHVzaCh0KX0pLChmdW5jdGlvbigpe3JldHVybltbXSxbXV19KSksYmE9enIoKGZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm5bXTt2YXIgbj10Lmxlbmd0aDtyZXR1cm4gbj4xJiZ2aShlLHRbMF0sdFsxXSk/dD1bXTpuPjImJnZpKHRbMF0sdFsxXSx0WzJdKSYmKHQ9W3RbMF1dKSxacihlLGhyKHQsMSksW10pfSkpLHhhPWN0fHxmdW5jdGlvbigpe3JldHVybiBmdC5EYXRlLm5vdygpfTtmdW5jdGlvbiBfYShlLHQsbil7cmV0dXJuIHQ9bj9vOnQsdD1lJiZudWxsPT10P2UubGVuZ3RoOnQscW8oZSxjLG8sbyxvLG8sdCl9ZnVuY3Rpb24gT2EoZSx0KXt2YXIgbjtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IG5ldyBTZShpKTtyZXR1cm4gZT11bChlKSxmdW5jdGlvbigpe3JldHVybi0tZT4wJiYobj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSksZTw9MSYmKHQ9byksbn19dmFyIExhPXpyKChmdW5jdGlvbihlLHQsbil7dmFyIHI9MTtpZihuLmxlbmd0aCl7dmFyIG89bG4obixvaShMYSkpO3J8PXN9cmV0dXJuIHFvKGUscix0LG4sbyl9KSksRWE9enIoKGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0zO2lmKG4ubGVuZ3RoKXt2YXIgbz1sbihuLG9pKEVhKSk7cnw9c31yZXR1cm4gcW8odCxyLGUsbixvKX0pKTtmdW5jdGlvbiBTYShlLHQsbil7dmFyIHIsYSxsLHMsYyx1LGY9MCxkPSExLHA9ITEsaD0hMDtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBTZShpKTtmdW5jdGlvbiBnKHQpe3ZhciBuPXIsaT1hO3JldHVybiByPWE9byxmPXQscz1lLmFwcGx5KGksbil9ZnVuY3Rpb24gdihlKXt2YXIgbj1lLXU7cmV0dXJuIHU9PT1vfHxuPj10fHxuPDB8fHAmJmUtZj49bH1mdW5jdGlvbiBtKCl7dmFyIGU9eGEoKTtpZih2KGUpKXJldHVybiBDKGUpO2M9U2kobSxmdW5jdGlvbihlKXt2YXIgbj10LShlLXUpO3JldHVybiBwP3ZuKG4sbC0oZS1mKSk6bn0oZSkpfWZ1bmN0aW9uIEMoZSl7cmV0dXJuIGM9byxoJiZyP2coZSk6KHI9YT1vLHMpfWZ1bmN0aW9uIHkoKXt2YXIgZT14YSgpLG49dihlKTtpZihyPWFyZ3VtZW50cyxhPXRoaXMsdT1lLG4pe2lmKGM9PT1vKXJldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZj1lLGM9U2kobSx0KSxkP2coZSk6c30odSk7aWYocClyZXR1cm4geW8oYyksYz1TaShtLHQpLGcodSl9cmV0dXJuIGM9PT1vJiYoYz1TaShtLHQpKSxzfXJldHVybiB0PWRsKHQpfHwwLEthKG4pJiYoZD0hIW4ubGVhZGluZyxsPShwPVwibWF4V2FpdFwiaW4gbik/Z24oZGwobi5tYXhXYWl0KXx8MCx0KTpsLGg9XCJ0cmFpbGluZ1wiaW4gbj8hIW4udHJhaWxpbmc6aCkseS5jYW5jZWw9ZnVuY3Rpb24oKXtjIT09byYmeW8oYyksZj0wLHI9dT1hPWM9b30seS5mbHVzaD1mdW5jdGlvbigpe3JldHVybiBjPT09bz9zOkMoeGEoKSl9LHl9dmFyIGphPXpyKChmdW5jdGlvbihlLHQpe3JldHVybiBscihlLDEsdCl9KSksTWE9enIoKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbHIoZSxkbCh0KXx8MCxuKX0pKTtmdW5jdGlvbiBrYShlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGV8fG51bGwhPXQmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFNlKGkpO3ZhciBuPWZ1bmN0aW9uKCl7dmFyIHI9YXJndW1lbnRzLG89dD90LmFwcGx5KHRoaXMscik6clswXSxpPW4uY2FjaGU7aWYoaS5oYXMobykpcmV0dXJuIGkuZ2V0KG8pO3ZhciBhPWUuYXBwbHkodGhpcyxyKTtyZXR1cm4gbi5jYWNoZT1pLnNldChvLGEpfHxpLGF9O3JldHVybiBuLmNhY2hlPW5ldyhrYS5DYWNoZXx8VW4pLG59ZnVuY3Rpb24gUmEoZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgU2UoaSk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzO3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiFlLmNhbGwodGhpcyk7Y2FzZSAxOnJldHVybiFlLmNhbGwodGhpcyx0WzBdKTtjYXNlIDI6cmV0dXJuIWUuY2FsbCh0aGlzLHRbMF0sdFsxXSk7Y2FzZSAzOnJldHVybiFlLmNhbGwodGhpcyx0WzBdLHRbMV0sdFsyXSl9cmV0dXJuIWUuYXBwbHkodGhpcyx0KX19a2EuQ2FjaGU9VW47dmFyIFBhPW1vKChmdW5jdGlvbihlLHQpe3ZhciBuPSh0PTE9PXQubGVuZ3RoJiZaYSh0WzBdKT9SdCh0WzBdLFl0KGlpKCkpKTpSdChocih0LDEpLFl0KGlpKCkpKSkubGVuZ3RoO3JldHVybiB6cigoZnVuY3Rpb24ocil7Zm9yKHZhciBvPS0xLGk9dm4oci5sZW5ndGgsbik7KytvPGk7KXJbb109dFtvXS5jYWxsKHRoaXMscltvXSk7cmV0dXJuIF90KGUsdGhpcyxyKX0pKX0pKSxJYT16cigoZnVuY3Rpb24oZSx0KXt2YXIgbj1sbih0LG9pKElhKSk7cmV0dXJuIHFvKGUscyxvLHQsbil9KSksQWE9enIoKGZ1bmN0aW9uKGUsdCl7dmFyIG49bG4odCxvaShBYSkpO3JldHVybiBxbyhlLDY0LG8sdCxuKX0pKSxUYT1RbygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gcW8oZSwyNTYsbyxvLG8sdCl9KSk7ZnVuY3Rpb24gSGEoZSx0KXtyZXR1cm4gZT09PXR8fGUhPWUmJnQhPXR9dmFyIEJhPUZvKF9yKSxWYT1GbygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT49dH0pKSxEYT1qcihmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP2pyOmZ1bmN0aW9uKGUpe3JldHVybiBYYShlKSYmSWUuY2FsbChlLFwiY2FsbGVlXCIpJiYhemUuY2FsbChlLFwiY2FsbGVlXCIpfSxaYT1yLmlzQXJyYXksJGE9bXQ/WXQobXQpOmZ1bmN0aW9uKGUpe3JldHVybiBYYShlKSYmeHIoZSk9PVJ9O2Z1bmN0aW9uIE5hKGUpe3JldHVybiBudWxsIT1lJiZZYShlLmxlbmd0aCkmJiFHYShlKX1mdW5jdGlvbiBGYShlKXtyZXR1cm4gWGEoZSkmJk5hKGUpfXZhciBVYT12dHx8ZHMsV2E9Q3Q/WXQoQ3QpOmZ1bmN0aW9uKGUpe3JldHVybiBYYShlKSYmeHIoZSk9PUN9O2Z1bmN0aW9uIHphKGUpe2lmKCFYYShlKSlyZXR1cm4hMTt2YXIgdD14cihlKTtyZXR1cm4gdD09eXx8XCJbb2JqZWN0IERPTUV4Y2VwdGlvbl1cIj09dHx8XCJzdHJpbmdcIj09dHlwZW9mIGUubWVzc2FnZSYmXCJzdHJpbmdcIj09dHlwZW9mIGUubmFtZSYmIWVsKGUpfWZ1bmN0aW9uIEdhKGUpe2lmKCFLYShlKSlyZXR1cm4hMTt2YXIgdD14cihlKTtyZXR1cm4gdD09d3x8dD09Ynx8XCJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dXCI9PXR8fFwiW29iamVjdCBQcm94eV1cIj09dH1mdW5jdGlvbiBxYShlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZSYmZT09dWwoZSl9ZnVuY3Rpb24gWWEoZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGUmJmU+LTEmJmUlMT09MCYmZTw9Zn1mdW5jdGlvbiBLYShlKXt2YXIgdD10eXBlb2YgZTtyZXR1cm4gbnVsbCE9ZSYmKFwib2JqZWN0XCI9PXR8fFwiZnVuY3Rpb25cIj09dCl9ZnVuY3Rpb24gWGEoZSl7cmV0dXJuIG51bGwhPWUmJlwib2JqZWN0XCI9PXR5cGVvZiBlfXZhciBKYT15dD9ZdCh5dCk6ZnVuY3Rpb24oZSl7cmV0dXJuIFhhKGUpJiZmaShlKT09eH07ZnVuY3Rpb24gUWEoZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGV8fFhhKGUpJiZ4cihlKT09X31mdW5jdGlvbiBlbChlKXtpZighWGEoZSl8fHhyKGUpIT1PKXJldHVybiExO3ZhciB0PVVlKGUpO2lmKG51bGw9PT10KXJldHVybiEwO3ZhciBuPUllLmNhbGwodCxcImNvbnN0cnVjdG9yXCIpJiZ0LmNvbnN0cnVjdG9yO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIG4mJm4gaW5zdGFuY2VvZiBuJiZQZS5jYWxsKG4pPT1CZX12YXIgdGw9d3Q/WXQod3QpOmZ1bmN0aW9uKGUpe3JldHVybiBYYShlKSYmeHIoZSk9PUV9LG5sPWJ0P1l0KGJ0KTpmdW5jdGlvbihlKXtyZXR1cm4gWGEoZSkmJmZpKGUpPT1TfTtmdW5jdGlvbiBybChlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZXx8IVphKGUpJiZYYShlKSYmeHIoZSk9PWp9ZnVuY3Rpb24gb2woZSl7cmV0dXJuXCJzeW1ib2xcIj09dHlwZW9mIGV8fFhhKGUpJiZ4cihlKT09TX12YXIgaWw9eHQ/WXQoeHQpOmZ1bmN0aW9uKGUpe3JldHVybiBYYShlKSYmWWEoZS5sZW5ndGgpJiYhIW90W3hyKGUpXX0sYWw9Rm8oQXIpLGxsPUZvKChmdW5jdGlvbihlLHQpe3JldHVybiBlPD10fSkpO2Z1bmN0aW9uIHNsKGUpe2lmKCFlKXJldHVybltdO2lmKE5hKGUpKXJldHVybiBybChlKT91bihlKTpFbyhlKTtpZihZZSYmZVtZZV0pcmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPVtdOyEodD1lLm5leHQoKSkuZG9uZTspbi5wdXNoKHQudmFsdWUpO3JldHVybiBufShlW1llXSgpKTt2YXIgdD1maShlKTtyZXR1cm4odD09eD9vbjp0PT1TP3NuOkhsKShlKX1mdW5jdGlvbiBjbChlKXtyZXR1cm4gZT8oZT1kbChlKSk9PT11fHxlPT09LTEvMD8xNzk3NjkzMTM0ODYyMzE1N2UyOTIqKGU8MD8tMToxKTplPT1lP2U6MDowPT09ZT9lOjB9ZnVuY3Rpb24gdWwoZSl7dmFyIHQ9Y2woZSksbj10JTE7cmV0dXJuIHQ9PXQ/bj90LW46dDowfWZ1bmN0aW9uIGZsKGUpe3JldHVybiBlP29yKHVsKGUpLDAscCk6MH1mdW5jdGlvbiBkbChlKXtpZihcIm51bWJlclwiPT10eXBlb2YgZSlyZXR1cm4gZTtpZihvbChlKSlyZXR1cm4gZDtpZihLYShlKSl7dmFyIHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgZS52YWx1ZU9mP2UudmFsdWVPZigpOmU7ZT1LYSh0KT90K1wiXCI6dH1pZihcInN0cmluZ1wiIT10eXBlb2YgZSlyZXR1cm4gMD09PWU/ZTorZTtlPXF0KGUpO3ZhciBuPWhlLnRlc3QoZSk7cmV0dXJuIG58fHZlLnRlc3QoZSk/c3QoZS5zbGljZSgyKSxuPzI6OCk6cGUudGVzdChlKT9kOitlfWZ1bmN0aW9uIHBsKGUpe3JldHVybiBTbyhlLGpsKGUpKX1mdW5jdGlvbiBobChlKXtyZXR1cm4gbnVsbD09ZT9cIlwiOmlvKGUpfXZhciBnbD1NbygoZnVuY3Rpb24oZSx0KXtpZih3aSh0KXx8TmEodCkpU28odCxTbCh0KSxlKTtlbHNlIGZvcih2YXIgbiBpbiB0KUllLmNhbGwodCxuKSYmSm4oZSxuLHRbbl0pfSkpLHZsPU1vKChmdW5jdGlvbihlLHQpe1NvKHQsamwodCksZSl9KSksbWw9TW8oKGZ1bmN0aW9uKGUsdCxuLHIpe1NvKHQsamwodCksZSxyKX0pKSxDbD1NbygoZnVuY3Rpb24oZSx0LG4scil7U28odCxTbCh0KSxlLHIpfSkpLHlsPVFvKHJyKSx3bD16cigoZnVuY3Rpb24oZSx0KXtlPU9lKGUpO3ZhciBuPS0xLHI9dC5sZW5ndGgsaT1yPjI/dFsyXTpvO2ZvcihpJiZ2aSh0WzBdLHRbMV0saSkmJihyPTEpOysrbjxyOylmb3IodmFyIGE9dFtuXSxsPWpsKGEpLHM9LTEsYz1sLmxlbmd0aDsrK3M8Yzspe3ZhciB1PWxbc10sZj1lW3VdOyhmPT09b3x8SGEoZixrZVt1XSkmJiFJZS5jYWxsKGUsdSkpJiYoZVt1XT1hW3VdKX1yZXR1cm4gZX0pKSxibD16cigoZnVuY3Rpb24oZSl7cmV0dXJuIGUucHVzaChvLEtvKSxfdChrbCxvLGUpfSkpO2Z1bmN0aW9uIHhsKGUsdCxuKXt2YXIgcj1udWxsPT1lP286d3IoZSx0KTtyZXR1cm4gcj09PW8/bjpyfWZ1bmN0aW9uIF9sKGUsdCl7cmV0dXJuIG51bGwhPWUmJmRpKGUsdCxMcil9dmFyIE9sPVZvKChmdW5jdGlvbihlLHQsbil7bnVsbCE9dCYmXCJmdW5jdGlvblwiIT10eXBlb2YgdC50b1N0cmluZyYmKHQ9SGUuY2FsbCh0KSksZVt0XT1ufSksS2woUWwpKSxMbD1WbygoZnVuY3Rpb24oZSx0LG4pe251bGwhPXQmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHQudG9TdHJpbmcmJih0PUhlLmNhbGwodCkpLEllLmNhbGwoZSx0KT9lW3RdLnB1c2gobik6ZVt0XT1bbl19KSxpaSksRWw9enIoU3IpO2Z1bmN0aW9uIFNsKGUpe3JldHVybiBOYShlKT9HbihlKTpJcihlKX1mdW5jdGlvbiBqbChlKXtyZXR1cm4gTmEoZSk/R24oZSwhMCk6ZnVuY3Rpb24oZSl7aWYoIUthKGUpKXJldHVybiBmdW5jdGlvbihlKXt2YXIgdD1bXTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBPZShlKSl0LnB1c2gobik7cmV0dXJuIHR9KGUpO3ZhciB0PXdpKGUpLG49W107Zm9yKHZhciByIGluIGUpKFwiY29uc3RydWN0b3JcIiE9cnx8IXQmJkllLmNhbGwoZSxyKSkmJm4ucHVzaChyKTtyZXR1cm4gbn0oZSl9dmFyIE1sPU1vKChmdW5jdGlvbihlLHQsbil7VnIoZSx0LG4pfSkpLGtsPU1vKChmdW5jdGlvbihlLHQsbixyKXtWcihlLHQsbixyKX0pKSxSbD1RbygoZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtpZihudWxsPT1lKXJldHVybiBuO3ZhciByPSExO3Q9UnQodCwoZnVuY3Rpb24odCl7cmV0dXJuIHQ9dm8odCxlKSxyfHwocj10Lmxlbmd0aD4xKSx0fSkpLFNvKGUsdGkoZSksbiksciYmKG49aXIobiw3LFhvKSk7Zm9yKHZhciBvPXQubGVuZ3RoO28tLTspbG8obix0W29dKTtyZXR1cm4gbn0pKSxQbD1RbygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZT97fTpmdW5jdGlvbihlLHQpe3JldHVybiAkcihlLHQsKGZ1bmN0aW9uKHQsbil7cmV0dXJuIF9sKGUsbil9KSl9KGUsdCl9KSk7ZnVuY3Rpb24gSWwoZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuPVJ0KHRpKGUpLChmdW5jdGlvbihlKXtyZXR1cm5bZV19KSk7cmV0dXJuIHQ9aWkodCksJHIoZSxuLChmdW5jdGlvbihlLG4pe3JldHVybiB0KGUsblswXSl9KSl9dmFyIEFsPUdvKFNsKSxUbD1HbyhqbCk7ZnVuY3Rpb24gSGwoZSl7cmV0dXJuIG51bGw9PWU/W106S3QoZSxTbChlKSl9dmFyIEJsPUlvKChmdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ9dC50b0xvd2VyQ2FzZSgpLGUrKG4/VmwodCk6dCl9KSk7ZnVuY3Rpb24gVmwoZSl7cmV0dXJuIHpsKGhsKGUpLnRvTG93ZXJDYXNlKCkpfWZ1bmN0aW9uIERsKGUpe3JldHVybihlPWhsKGUpKSYmZS5yZXBsYWNlKENlLGVuKS5yZXBsYWNlKFhlLFwiXCIpfXZhciBabD1JbygoZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlKyhuP1wiLVwiOlwiXCIpK3QudG9Mb3dlckNhc2UoKX0pKSwkbD1JbygoZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlKyhuP1wiIFwiOlwiXCIpK3QudG9Mb3dlckNhc2UoKX0pKSxObD1QbyhcInRvTG93ZXJDYXNlXCIpLEZsPUlvKChmdW5jdGlvbihlLHQsbil7cmV0dXJuIGUrKG4/XCJfXCI6XCJcIikrdC50b0xvd2VyQ2FzZSgpfSkpLFVsPUlvKChmdW5jdGlvbihlLHQsbil7cmV0dXJuIGUrKG4/XCIgXCI6XCJcIikremwodCl9KSksV2w9SW8oKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSsobj9cIiBcIjpcIlwiKSt0LnRvVXBwZXJDYXNlKCl9KSksemw9UG8oXCJ0b1VwcGVyQ2FzZVwiKTtmdW5jdGlvbiBHbChlLHQsbil7cmV0dXJuIGU9aGwoZSksKHQ9bj9vOnQpPT09bz9mdW5jdGlvbihlKXtyZXR1cm4gdHQudGVzdChlKX0oZSk/ZnVuY3Rpb24oZSl7cmV0dXJuIGUubWF0Y2goUWUpfHxbXX0oZSk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUubWF0Y2goc2UpfHxbXX0oZSk6ZS5tYXRjaCh0KXx8W119dmFyIHFsPXpyKChmdW5jdGlvbihlLHQpe3RyeXtyZXR1cm4gX3QoZSxvLHQpfWNhdGNoKGUpe3JldHVybiB6YShlKT9lOm5ldyBiZShlKX19KSksWWw9UW8oKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIEx0KHQsKGZ1bmN0aW9uKHQpe3Q9SWkodCksbnIoZSx0LExhKGVbdF0sZSkpfSkpLGV9KSk7ZnVuY3Rpb24gS2woZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBYbD1IbygpLEpsPUhvKCEwKTtmdW5jdGlvbiBRbChlKXtyZXR1cm4gZX1mdW5jdGlvbiBlcyhlKXtyZXR1cm4gUHIoXCJmdW5jdGlvblwiPT10eXBlb2YgZT9lOmlyKGUsMSkpfXZhciB0cz16cigoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIFNyKG4sZSx0KX19KSksbnM9enIoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBTcihlLG4sdCl9fSkpO2Z1bmN0aW9uIHJzKGUsdCxuKXt2YXIgcj1TbCh0KSxvPXlyKHQscik7bnVsbCE9bnx8S2EodCkmJihvLmxlbmd0aHx8IXIubGVuZ3RoKXx8KG49dCx0PWUsZT10aGlzLG89eXIodCxTbCh0KSkpO3ZhciBpPSEoS2EobikmJlwiY2hhaW5cImluIG4mJiFuLmNoYWluKSxhPUdhKGUpO3JldHVybiBMdChvLChmdW5jdGlvbihuKXt2YXIgcj10W25dO2Vbbl09cixhJiYoZS5wcm90b3R5cGVbbl09ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9fY2hhaW5fXztpZihpfHx0KXt2YXIgbj1lKHRoaXMuX193cmFwcGVkX18pO3JldHVybihuLl9fYWN0aW9uc19fPUVvKHRoaXMuX19hY3Rpb25zX18pKS5wdXNoKHtmdW5jOnIsYXJnczphcmd1bWVudHMsdGhpc0FyZzplfSksbi5fX2NoYWluX189dCxufXJldHVybiByLmFwcGx5KGUsUHQoW3RoaXMudmFsdWUoKV0sYXJndW1lbnRzKSl9KX0pKSxlfWZ1bmN0aW9uIG9zKCl7fXZhciBpcz1abyhSdCksYXM9Wm8oU3QpLGxzPVpvKFR0KTtmdW5jdGlvbiBzcyhlKXtyZXR1cm4gbWkoZSk/RnQoSWkoZSkpOmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gd3IodCxlKX19KGUpfXZhciBjcz1ObygpLHVzPU5vKCEwKTtmdW5jdGlvbiBmcygpe3JldHVybltdfWZ1bmN0aW9uIGRzKCl7cmV0dXJuITF9dmFyIHBzLGhzPURvKChmdW5jdGlvbihlLHQpe3JldHVybiBlK3R9KSwwKSxncz1XbyhcImNlaWxcIiksdnM9RG8oKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUvdH0pLDEpLG1zPVdvKFwiZmxvb3JcIiksQ3M9RG8oKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUqdH0pLDEpLHlzPVdvKFwicm91bmRcIiksd3M9RG8oKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUtdH0pLDApO3JldHVybiBCbi5hZnRlcj1mdW5jdGlvbihlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFNlKGkpO3JldHVybiBlPXVsKGUpLGZ1bmN0aW9uKCl7aWYoLS1lPDEpcmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sQm4uYXJ5PV9hLEJuLmFzc2lnbj1nbCxCbi5hc3NpZ25Jbj12bCxCbi5hc3NpZ25JbldpdGg9bWwsQm4uYXNzaWduV2l0aD1DbCxCbi5hdD15bCxCbi5iZWZvcmU9T2EsQm4uYmluZD1MYSxCbi5iaW5kQWxsPVlsLEJuLmJpbmRLZXk9RWEsQm4uY2FzdEFycmF5PWZ1bmN0aW9uKCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuW107dmFyIGU9YXJndW1lbnRzWzBdO3JldHVybiBaYShlKT9lOltlXX0sQm4uY2hhaW49c2EsQm4uY2h1bms9ZnVuY3Rpb24oZSx0LG4pe3Q9KG4/dmkoZSx0LG4pOnQ9PT1vKT8xOmduKHVsKHQpLDApO3ZhciBpPW51bGw9PWU/MDplLmxlbmd0aDtpZighaXx8dDwxKXJldHVybltdO2Zvcih2YXIgYT0wLGw9MCxzPXIoZHQoaS90KSk7YTxpOylzW2wrK109UXIoZSxhLGErPXQpO3JldHVybiBzfSxCbi5jb21wYWN0PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aCxyPTAsbz1bXTsrK3Q8bjspe3ZhciBpPWVbdF07aSYmKG9bcisrXT1pKX1yZXR1cm4gb30sQm4uY29uY2F0PWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDtpZighZSlyZXR1cm5bXTtmb3IodmFyIHQ9cihlLTEpLG49YXJndW1lbnRzWzBdLG89ZTtvLS07KXRbby0xXT1hcmd1bWVudHNbb107cmV0dXJuIFB0KFphKG4pP0VvKG4pOltuXSxocih0LDEpKX0sQm4uY29uZD1mdW5jdGlvbihlKXt2YXIgdD1udWxsPT1lPzA6ZS5sZW5ndGgsbj1paSgpO3JldHVybiBlPXQ/UnQoZSwoZnVuY3Rpb24oZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZVsxXSl0aHJvdyBuZXcgU2UoaSk7cmV0dXJuW24oZVswXSksZVsxXV19KSk6W10senIoKGZ1bmN0aW9uKG4pe2Zvcih2YXIgcj0tMTsrK3I8dDspe3ZhciBvPWVbcl07aWYoX3Qob1swXSx0aGlzLG4pKXJldHVybiBfdChvWzFdLHRoaXMsbil9fSkpfSxCbi5jb25mb3Jtcz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9U2woZSk7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBhcihuLGUsdCl9fShpcihlLDEpKX0sQm4uY29uc3RhbnQ9S2wsQm4uY291bnRCeT1mYSxCbi5jcmVhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1WbihlKTtyZXR1cm4gbnVsbD09dD9uOnRyKG4sdCl9LEJuLmN1cnJ5PWZ1bmN0aW9uIGUodCxuLHIpe3ZhciBpPXFvKHQsOCxvLG8sbyxvLG8sbj1yP286bik7cmV0dXJuIGkucGxhY2Vob2xkZXI9ZS5wbGFjZWhvbGRlcixpfSxCbi5jdXJyeVJpZ2h0PWZ1bmN0aW9uIGUodCxuLHIpe3ZhciBpPXFvKHQsMTYsbyxvLG8sbyxvLG49cj9vOm4pO3JldHVybiBpLnBsYWNlaG9sZGVyPWUucGxhY2Vob2xkZXIsaX0sQm4uZGVib3VuY2U9U2EsQm4uZGVmYXVsdHM9d2wsQm4uZGVmYXVsdHNEZWVwPWJsLEJuLmRlZmVyPWphLEJuLmRlbGF5PU1hLEJuLmRpZmZlcmVuY2U9SGksQm4uZGlmZmVyZW5jZUJ5PUJpLEJuLmRpZmZlcmVuY2VXaXRoPVZpLEJuLmRyb3A9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gcj9RcihlLCh0PW58fHQ9PT1vPzE6dWwodCkpPDA/MDp0LHIpOltdfSxCbi5kcm9wUmlnaHQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gcj9RcihlLDAsKHQ9ci0odD1ufHx0PT09bz8xOnVsKHQpKSk8MD8wOnQpOltdfSxCbi5kcm9wUmlnaHRXaGlsZT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD9jbyhlLGlpKHQsMyksITAsITApOltdfSxCbi5kcm9wV2hpbGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/Y28oZSxpaSh0LDMpLCEwKTpbXX0sQm4uZmlsbD1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT1udWxsPT1lPzA6ZS5sZW5ndGg7cmV0dXJuIGk/KG4mJlwibnVtYmVyXCIhPXR5cGVvZiBuJiZ2aShlLHQsbikmJihuPTAscj1pKSxmdW5jdGlvbihlLHQsbixyKXt2YXIgaT1lLmxlbmd0aDtmb3IoKG49dWwobikpPDAmJihuPS1uPmk/MDppK24pLChyPXI9PT1vfHxyPmk/aTp1bChyKSk8MCYmKHIrPWkpLHI9bj5yPzA6Zmwocik7bjxyOyllW24rK109dDtyZXR1cm4gZX0oZSx0LG4scikpOltdfSxCbi5maWx0ZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oWmEoZSk/anQ6cHIpKGUsaWkodCwzKSl9LEJuLmZsYXRNYXA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaHIoeWEoZSx0KSwxKX0sQm4uZmxhdE1hcERlZXA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaHIoeWEoZSx0KSx1KX0sQm4uZmxhdE1hcERlcHRoPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1uPT09bz8xOnVsKG4pLGhyKHlhKGUsdCksbil9LEJuLmZsYXR0ZW49JGksQm4uZmxhdHRlbkRlZXA9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWUmJmUubGVuZ3RoP2hyKGUsdSk6W119LEJuLmZsYXR0ZW5EZXB0aD1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsIT1lJiZlLmxlbmd0aD9ocihlLHQ9dD09PW8/MTp1bCh0KSk6W119LEJuLmZsaXA9ZnVuY3Rpb24oZSl7cmV0dXJuIHFvKGUsNTEyKX0sQm4uZmxvdz1YbCxCbi5mbG93UmlnaHQ9SmwsQm4uZnJvbVBhaXJzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aCxyPXt9OysrdDxuOyl7dmFyIG89ZVt0XTtyW29bMF1dPW9bMV19cmV0dXJuIHJ9LEJuLmZ1bmN0aW9ucz1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT9bXTp5cihlLFNsKGUpKX0sQm4uZnVuY3Rpb25zSW49ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/W106eXIoZSxqbChlKSl9LEJuLmdyb3VwQnk9dmEsQm4uaW5pdGlhbD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmZS5sZW5ndGg/UXIoZSwwLC0xKTpbXX0sQm4uaW50ZXJzZWN0aW9uPUZpLEJuLmludGVyc2VjdGlvbkJ5PVVpLEJuLmludGVyc2VjdGlvbldpdGg9V2ksQm4uaW52ZXJ0PU9sLEJuLmludmVydEJ5PUxsLEJuLmludm9rZU1hcD1tYSxCbi5pdGVyYXRlZT1lcyxCbi5rZXlCeT1DYSxCbi5rZXlzPVNsLEJuLmtleXNJbj1qbCxCbi5tYXA9eWEsQm4ubWFwS2V5cz1mdW5jdGlvbihlLHQpe3ZhciBuPXt9O3JldHVybiB0PWlpKHQsMyksbXIoZSwoZnVuY3Rpb24oZSxyLG8pe25yKG4sdChlLHIsbyksZSl9KSksbn0sQm4ubWFwVmFsdWVzPWZ1bmN0aW9uKGUsdCl7dmFyIG49e307cmV0dXJuIHQ9aWkodCwzKSxtcihlLChmdW5jdGlvbihlLHIsbyl7bnIobixyLHQoZSxyLG8pKX0pKSxufSxCbi5tYXRjaGVzPWZ1bmN0aW9uKGUpe3JldHVybiBIcihpcihlLDEpKX0sQm4ubWF0Y2hlc1Byb3BlcnR5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEJyKGUsaXIodCwxKSl9LEJuLm1lbW9pemU9a2EsQm4ubWVyZ2U9TWwsQm4ubWVyZ2VXaXRoPWtsLEJuLm1ldGhvZD10cyxCbi5tZXRob2RPZj1ucyxCbi5taXhpbj1ycyxCbi5uZWdhdGU9UmEsQm4ubnRoQXJnPWZ1bmN0aW9uKGUpe3JldHVybiBlPXVsKGUpLHpyKChmdW5jdGlvbih0KXtyZXR1cm4gRHIodCxlKX0pKX0sQm4ub21pdD1SbCxCbi5vbWl0Qnk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gSWwoZSxSYShpaSh0KSkpfSxCbi5vbmNlPWZ1bmN0aW9uKGUpe3JldHVybiBPYSgyLGUpfSxCbi5vcmRlckJ5PWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBudWxsPT1lP1tdOihaYSh0KXx8KHQ9bnVsbD09dD9bXTpbdF0pLFphKG49cj9vOm4pfHwobj1udWxsPT1uP1tdOltuXSksWnIoZSx0LG4pKX0sQm4ub3Zlcj1pcyxCbi5vdmVyQXJncz1QYSxCbi5vdmVyRXZlcnk9YXMsQm4ub3ZlclNvbWU9bHMsQm4ucGFydGlhbD1JYSxCbi5wYXJ0aWFsUmlnaHQ9QWEsQm4ucGFydGl0aW9uPXdhLEJuLnBpY2s9UGwsQm4ucGlja0J5PUlsLEJuLnByb3BlcnR5PXNzLEJuLnByb3BlcnR5T2Y9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT1lP286d3IoZSx0KX19LEJuLnB1bGw9R2ksQm4ucHVsbEFsbD1xaSxCbi5wdWxsQWxsQnk9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlJiZlLmxlbmd0aCYmdCYmdC5sZW5ndGg/TnIoZSx0LGlpKG4sMikpOmV9LEJuLnB1bGxBbGxXaXRoPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSYmZS5sZW5ndGgmJnQmJnQubGVuZ3RoP05yKGUsdCxvLG4pOmV9LEJuLnB1bGxBdD1ZaSxCbi5yYW5nZT1jcyxCbi5yYW5nZVJpZ2h0PXVzLEJuLnJlYXJnPVRhLEJuLnJlamVjdD1mdW5jdGlvbihlLHQpe3JldHVybihaYShlKT9qdDpwcikoZSxSYShpaSh0LDMpKSl9LEJuLnJlbW92ZT1mdW5jdGlvbihlLHQpe3ZhciBuPVtdO2lmKCFlfHwhZS5sZW5ndGgpcmV0dXJuIG47dmFyIHI9LTEsbz1bXSxpPWUubGVuZ3RoO2Zvcih0PWlpKHQsMyk7KytyPGk7KXt2YXIgYT1lW3JdO3QoYSxyLGUpJiYobi5wdXNoKGEpLG8ucHVzaChyKSl9cmV0dXJuIEZyKGUsbyksbn0sQm4ucmVzdD1mdW5jdGlvbihlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFNlKGkpO3JldHVybiB6cihlLHQ9dD09PW8/dDp1bCh0KSl9LEJuLnJldmVyc2U9S2ksQm4uc2FtcGxlU2l6ZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ9KG4/dmkoZSx0LG4pOnQ9PT1vKT8xOnVsKHQpLChaYShlKT9ZbjpxcikoZSx0KX0sQm4uc2V0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnVsbD09ZT9lOllyKGUsdCxuKX0sQm4uc2V0V2l0aD1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gcj1cImZ1bmN0aW9uXCI9PXR5cGVvZiByP3I6byxudWxsPT1lP2U6WXIoZSx0LG4scil9LEJuLnNodWZmbGU9ZnVuY3Rpb24oZSl7cmV0dXJuKFphKGUpP0tuOkpyKShlKX0sQm4uc2xpY2U9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gcj8obiYmXCJudW1iZXJcIiE9dHlwZW9mIG4mJnZpKGUsdCxuKT8odD0wLG49cik6KHQ9bnVsbD09dD8wOnVsKHQpLG49bj09PW8/cjp1bChuKSksUXIoZSx0LG4pKTpbXX0sQm4uc29ydEJ5PWJhLEJuLnNvcnRlZFVuaXE9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUubGVuZ3RoP3JvKGUpOltdfSxCbi5zb3J0ZWRVbmlxQnk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/cm8oZSxpaSh0LDIpKTpbXX0sQm4uc3BsaXQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuJiZcIm51bWJlclwiIT10eXBlb2YgbiYmdmkoZSx0LG4pJiYodD1uPW8pLChuPW49PT1vP3A6bj4+PjApPyhlPWhsKGUpKSYmKFwic3RyaW5nXCI9PXR5cGVvZiB0fHxudWxsIT10JiYhdGwodCkpJiYhKHQ9aW8odCkpJiZybihlKT9Dbyh1bihlKSwwLG4pOmUuc3BsaXQodCxuKTpbXX0sQm4uc3ByZWFkPWZ1bmN0aW9uKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgU2UoaSk7cmV0dXJuIHQ9bnVsbD09dD8wOmduKHVsKHQpLDApLHpyKChmdW5jdGlvbihuKXt2YXIgcj1uW3RdLG89Q28obiwwLHQpO3JldHVybiByJiZQdChvLHIpLF90KGUsdGhpcyxvKX0pKX0sQm4udGFpbD1mdW5jdGlvbihlKXt2YXIgdD1udWxsPT1lPzA6ZS5sZW5ndGg7cmV0dXJuIHQ/UXIoZSwxLHQpOltdfSxCbi50YWtlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSYmZS5sZW5ndGg/UXIoZSwwLCh0PW58fHQ9PT1vPzE6dWwodCkpPDA/MDp0KTpbXX0sQm4udGFrZVJpZ2h0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7cmV0dXJuIHI/UXIoZSwodD1yLSh0PW58fHQ9PT1vPzE6dWwodCkpKTwwPzA6dCxyKTpbXX0sQm4udGFrZVJpZ2h0V2hpbGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/Y28oZSxpaSh0LDMpLCExLCEwKTpbXX0sQm4udGFrZVdoaWxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP2NvKGUsaWkodCwzKSk6W119LEJuLnRhcD1mdW5jdGlvbihlLHQpe3JldHVybiB0KGUpLGV9LEJuLnRocm90dGxlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0hMCxvPSEwO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFNlKGkpO3JldHVybiBLYShuKSYmKHI9XCJsZWFkaW5nXCJpbiBuPyEhbi5sZWFkaW5nOnIsbz1cInRyYWlsaW5nXCJpbiBuPyEhbi50cmFpbGluZzpvKSxTYShlLHQse2xlYWRpbmc6cixtYXhXYWl0OnQsdHJhaWxpbmc6b30pfSxCbi50aHJ1PWNhLEJuLnRvQXJyYXk9c2wsQm4udG9QYWlycz1BbCxCbi50b1BhaXJzSW49VGwsQm4udG9QYXRoPWZ1bmN0aW9uKGUpe3JldHVybiBaYShlKT9SdChlLElpKTpvbChlKT9bZV06RW8oUGkoaGwoZSkpKX0sQm4udG9QbGFpbk9iamVjdD1wbCxCbi50cmFuc2Zvcm09ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVphKGUpLG89cnx8VWEoZSl8fGlsKGUpO2lmKHQ9aWkodCw0KSxudWxsPT1uKXt2YXIgaT1lJiZlLmNvbnN0cnVjdG9yO249bz9yP25ldyBpOltdOkthKGUpJiZHYShpKT9WbihVZShlKSk6e319cmV0dXJuKG8/THQ6bXIpKGUsKGZ1bmN0aW9uKGUscixvKXtyZXR1cm4gdChuLGUscixvKX0pKSxufSxCbi51bmFyeT1mdW5jdGlvbihlKXtyZXR1cm4gX2EoZSwxKX0sQm4udW5pb249WGksQm4udW5pb25CeT1KaSxCbi51bmlvbldpdGg9UWksQm4udW5pcT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5sZW5ndGg/YW8oZSk6W119LEJuLnVuaXFCeT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD9hbyhlLGlpKHQsMikpOltdfSxCbi51bmlxV2l0aD1mdW5jdGlvbihlLHQpe3JldHVybiB0PVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpvLGUmJmUubGVuZ3RoP2FvKGUsbyx0KTpbXX0sQm4udW5zZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZXx8bG8oZSx0KX0sQm4udW56aXA9ZWEsQm4udW56aXBXaXRoPXRhLEJuLnVwZGF0ZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG51bGw9PWU/ZTpzbyhlLHQsZ28obikpfSxCbi51cGRhdGVXaXRoPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiByPVwiZnVuY3Rpb25cIj09dHlwZW9mIHI/cjpvLG51bGw9PWU/ZTpzbyhlLHQsZ28obikscil9LEJuLnZhbHVlcz1IbCxCbi52YWx1ZXNJbj1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT9bXTpLdChlLGpsKGUpKX0sQm4ud2l0aG91dD1uYSxCbi53b3Jkcz1HbCxCbi53cmFwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIElhKGdvKHQpLGUpfSxCbi54b3I9cmEsQm4ueG9yQnk9b2EsQm4ueG9yV2l0aD1pYSxCbi56aXA9YWEsQm4uemlwT2JqZWN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHBvKGV8fFtdLHR8fFtdLEpuKX0sQm4uemlwT2JqZWN0RGVlcD1mdW5jdGlvbihlLHQpe3JldHVybiBwbyhlfHxbXSx0fHxbXSxZcil9LEJuLnppcFdpdGg9bGEsQm4uZW50cmllcz1BbCxCbi5lbnRyaWVzSW49VGwsQm4uZXh0ZW5kPXZsLEJuLmV4dGVuZFdpdGg9bWwscnMoQm4sQm4pLEJuLmFkZD1ocyxCbi5hdHRlbXB0PXFsLEJuLmNhbWVsQ2FzZT1CbCxCbi5jYXBpdGFsaXplPVZsLEJuLmNlaWw9Z3MsQm4uY2xhbXA9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuPT09byYmKG49dCx0PW8pLG4hPT1vJiYobj0obj1kbChuKSk9PW4/bjowKSx0IT09byYmKHQ9KHQ9ZGwodCkpPT10P3Q6MCksb3IoZGwoZSksdCxuKX0sQm4uY2xvbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGlyKGUsNCl9LEJuLmNsb25lRGVlcD1mdW5jdGlvbihlKXtyZXR1cm4gaXIoZSw1KX0sQm4uY2xvbmVEZWVwV2l0aD1mdW5jdGlvbihlLHQpe3JldHVybiBpcihlLDUsdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6byl9LEJuLmNsb25lV2l0aD1mdW5jdGlvbihlLHQpe3JldHVybiBpcihlLDQsdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6byl9LEJuLmNvbmZvcm1zVG89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09dHx8YXIoZSx0LFNsKHQpKX0sQm4uZGVidXJyPURsLEJuLmRlZmF1bHRUbz1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lfHxlIT1lP3Q6ZX0sQm4uZGl2aWRlPXZzLEJuLmVuZHNXaXRoPWZ1bmN0aW9uKGUsdCxuKXtlPWhsKGUpLHQ9aW8odCk7dmFyIHI9ZS5sZW5ndGgsaT1uPW49PT1vP3I6b3IodWwobiksMCxyKTtyZXR1cm4obi09dC5sZW5ndGgpPj0wJiZlLnNsaWNlKG4saSk9PXR9LEJuLmVxPUhhLEJuLmVzY2FwZT1mdW5jdGlvbihlKXtyZXR1cm4oZT1obChlKSkmJnEudGVzdChlKT9lLnJlcGxhY2Uoeix0bik6ZX0sQm4uZXNjYXBlUmVnRXhwPWZ1bmN0aW9uKGUpe3JldHVybihlPWhsKGUpKSYmbmUudGVzdChlKT9lLnJlcGxhY2UodGUsXCJcXFxcJCZcIik6ZX0sQm4uZXZlcnk9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVphKGUpP1N0OmZyO3JldHVybiBuJiZ2aShlLHQsbikmJih0PW8pLHIoZSxpaSh0LDMpKX0sQm4uZmluZD1kYSxCbi5maW5kSW5kZXg9RGksQm4uZmluZEtleT1mdW5jdGlvbihlLHQpe3JldHVybiBCdChlLGlpKHQsMyksbXIpfSxCbi5maW5kTGFzdD1wYSxCbi5maW5kTGFzdEluZGV4PVppLEJuLmZpbmRMYXN0S2V5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEJ0KGUsaWkodCwzKSxDcil9LEJuLmZsb29yPW1zLEJuLmZvckVhY2g9aGEsQm4uZm9yRWFjaFJpZ2h0PWdhLEJuLmZvckluPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWU/ZTpncihlLGlpKHQsMyksamwpfSxCbi5mb3JJblJpZ2h0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWU/ZTp2cihlLGlpKHQsMyksamwpfSxCbi5mb3JPd249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmbXIoZSxpaSh0LDMpKX0sQm4uZm9yT3duUmlnaHQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmQ3IoZSxpaSh0LDMpKX0sQm4uZ2V0PXhsLEJuLmd0PUJhLEJuLmd0ZT1WYSxCbi5oYXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbCE9ZSYmZGkoZSx0LE9yKX0sQm4uaGFzSW49X2wsQm4uaGVhZD1OaSxCbi5pZGVudGl0eT1RbCxCbi5pbmNsdWRlcz1mdW5jdGlvbihlLHQsbixyKXtlPU5hKGUpP2U6SGwoZSksbj1uJiYhcj91bChuKTowO3ZhciBvPWUubGVuZ3RoO3JldHVybiBuPDAmJihuPWduKG8rbiwwKSkscmwoZSk/bjw9byYmZS5pbmRleE9mKHQsbik+LTE6ISFvJiZEdChlLHQsbik+LTF9LEJuLmluZGV4T2Y9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW51bGw9PWU/MDplLmxlbmd0aDtpZighcilyZXR1cm4tMTt2YXIgbz1udWxsPT1uPzA6dWwobik7cmV0dXJuIG88MCYmKG89Z24ocitvLDApKSxEdChlLHQsbyl9LEJuLmluUmFuZ2U9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PWNsKHQpLG49PT1vPyhuPXQsdD0wKTpuPWNsKG4pLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT49dm4odCxuKSYmZTxnbih0LG4pfShlPWRsKGUpLHQsbil9LEJuLmludm9rZT1FbCxCbi5pc0FyZ3VtZW50cz1EYSxCbi5pc0FycmF5PVphLEJuLmlzQXJyYXlCdWZmZXI9JGEsQm4uaXNBcnJheUxpa2U9TmEsQm4uaXNBcnJheUxpa2VPYmplY3Q9RmEsQm4uaXNCb29sZWFuPWZ1bmN0aW9uKGUpe3JldHVybiEwPT09ZXx8ITE9PT1lfHxYYShlKSYmeHIoZSk9PW19LEJuLmlzQnVmZmVyPVVhLEJuLmlzRGF0ZT1XYSxCbi5pc0VsZW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIFhhKGUpJiYxPT09ZS5ub2RlVHlwZSYmIWVsKGUpfSxCbi5pc0VtcHR5PWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpcmV0dXJuITA7aWYoTmEoZSkmJihaYShlKXx8XCJzdHJpbmdcIj09dHlwZW9mIGV8fFwiZnVuY3Rpb25cIj09dHlwZW9mIGUuc3BsaWNlfHxVYShlKXx8aWwoZSl8fERhKGUpKSlyZXR1cm4hZS5sZW5ndGg7dmFyIHQ9ZmkoZSk7aWYodD09eHx8dD09UylyZXR1cm4hZS5zaXplO2lmKHdpKGUpKXJldHVybiFJcihlKS5sZW5ndGg7Zm9yKHZhciBuIGluIGUpaWYoSWUuY2FsbChlLG4pKXJldHVybiExO3JldHVybiEwfSxCbi5pc0VxdWFsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1yKGUsdCl9LEJuLmlzRXF1YWxXaXRoPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0obj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBuP246byk/bihlLHQpOm87cmV0dXJuIHI9PT1vP01yKGUsdCxvLG4pOiEhcn0sQm4uaXNFcnJvcj16YSxCbi5pc0Zpbml0ZT1mdW5jdGlvbihlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZSYmSHQoZSl9LEJuLmlzRnVuY3Rpb249R2EsQm4uaXNJbnRlZ2VyPXFhLEJuLmlzTGVuZ3RoPVlhLEJuLmlzTWFwPUphLEJuLmlzTWF0Y2g9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXR8fGtyKGUsdCxsaSh0KSl9LEJuLmlzTWF0Y2hXaXRoPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBuP246byxrcihlLHQsbGkodCksbil9LEJuLmlzTmFOPWZ1bmN0aW9uKGUpe3JldHVybiBRYShlKSYmZSE9K2V9LEJuLmlzTmF0aXZlPWZ1bmN0aW9uKGUpe2lmKHlpKGUpKXRocm93IG5ldyBiZShcIlVuc3VwcG9ydGVkIGNvcmUtanMgdXNlLiBUcnkgaHR0cHM6Ly9ucG1zLmlvL3NlYXJjaD9xPXBvbnlmaWxsLlwiKTtyZXR1cm4gUnIoZSl9LEJuLmlzTmlsPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lfSxCbi5pc051bGw9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PT1lfSxCbi5pc051bWJlcj1RYSxCbi5pc09iamVjdD1LYSxCbi5pc09iamVjdExpa2U9WGEsQm4uaXNQbGFpbk9iamVjdD1lbCxCbi5pc1JlZ0V4cD10bCxCbi5pc1NhZmVJbnRlZ2VyPWZ1bmN0aW9uKGUpe3JldHVybiBxYShlKSYmZT49LTkwMDcxOTkyNTQ3NDA5OTEmJmU8PWZ9LEJuLmlzU2V0PW5sLEJuLmlzU3RyaW5nPXJsLEJuLmlzU3ltYm9sPW9sLEJuLmlzVHlwZWRBcnJheT1pbCxCbi5pc1VuZGVmaW5lZD1mdW5jdGlvbihlKXtyZXR1cm4gZT09PW99LEJuLmlzV2Vha01hcD1mdW5jdGlvbihlKXtyZXR1cm4gWGEoZSkmJmZpKGUpPT1rfSxCbi5pc1dlYWtTZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIFhhKGUpJiZcIltvYmplY3QgV2Vha1NldF1cIj09eHIoZSl9LEJuLmpvaW49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZT9cIlwiOlV0LmNhbGwoZSx0KX0sQm4ua2ViYWJDYXNlPVpsLEJuLmxhc3Q9emksQm4ubGFzdEluZGV4T2Y9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW51bGw9PWU/MDplLmxlbmd0aDtpZighcilyZXR1cm4tMTt2YXIgaT1yO3JldHVybiBuIT09byYmKGk9KGk9dWwobikpPDA/Z24ocitpLDApOnZuKGksci0xKSksdD09dD9mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPW4rMTtyLS07KWlmKGVbcl09PT10KXJldHVybiByO3JldHVybiByfShlLHQsaSk6VnQoZSwkdCxpLCEwKX0sQm4ubG93ZXJDYXNlPSRsLEJuLmxvd2VyRmlyc3Q9TmwsQm4ubHQ9YWwsQm4ubHRlPWxsLEJuLm1heD1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5sZW5ndGg/ZHIoZSxRbCxfcik6b30sQm4ubWF4Qnk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/ZHIoZSxpaSh0LDIpLF9yKTpvfSxCbi5tZWFuPWZ1bmN0aW9uKGUpe3JldHVybiBOdChlLFFsKX0sQm4ubWVhbkJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE50KGUsaWkodCwyKSl9LEJuLm1pbj1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5sZW5ndGg/ZHIoZSxRbCxBcik6b30sQm4ubWluQnk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/ZHIoZSxpaSh0LDIpLEFyKTpvfSxCbi5zdHViQXJyYXk9ZnMsQm4uc3R1YkZhbHNlPWRzLEJuLnN0dWJPYmplY3Q9ZnVuY3Rpb24oKXtyZXR1cm57fX0sQm4uc3R1YlN0cmluZz1mdW5jdGlvbigpe3JldHVyblwiXCJ9LEJuLnN0dWJUcnVlPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEJuLm11bHRpcGx5PUNzLEJuLm50aD1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD9EcihlLHVsKHQpKTpvfSxCbi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGZ0Ll89PT10aGlzJiYoZnQuXz1WZSksdGhpc30sQm4ubm9vcD1vcyxCbi5ub3c9eGEsQm4ucGFkPWZ1bmN0aW9uKGUsdCxuKXtlPWhsKGUpO3ZhciByPSh0PXVsKHQpKT9jbihlKTowO2lmKCF0fHxyPj10KXJldHVybiBlO3ZhciBvPSh0LXIpLzI7cmV0dXJuICRvKHB0KG8pLG4pK2UrJG8oZHQobyksbil9LEJuLnBhZEVuZD1mdW5jdGlvbihlLHQsbil7ZT1obChlKTt2YXIgcj0odD11bCh0KSk/Y24oZSk6MDtyZXR1cm4gdCYmcjx0P2UrJG8odC1yLG4pOmV9LEJuLnBhZFN0YXJ0PWZ1bmN0aW9uKGUsdCxuKXtlPWhsKGUpO3ZhciByPSh0PXVsKHQpKT9jbihlKTowO3JldHVybiB0JiZyPHQ/JG8odC1yLG4pK2U6ZX0sQm4ucGFyc2VJbnQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBufHxudWxsPT10P3Q9MDp0JiYodD0rdCksQ24oaGwoZSkucmVwbGFjZShyZSxcIlwiKSx0fHwwKX0sQm4ucmFuZG9tPWZ1bmN0aW9uKGUsdCxuKXtpZihuJiZcImJvb2xlYW5cIiE9dHlwZW9mIG4mJnZpKGUsdCxuKSYmKHQ9bj1vKSxuPT09byYmKFwiYm9vbGVhblwiPT10eXBlb2YgdD8obj10LHQ9byk6XCJib29sZWFuXCI9PXR5cGVvZiBlJiYobj1lLGU9bykpLGU9PT1vJiZ0PT09bz8oZT0wLHQ9MSk6KGU9Y2woZSksdD09PW8/KHQ9ZSxlPTApOnQ9Y2wodCkpLGU+dCl7dmFyIHI9ZTtlPXQsdD1yfWlmKG58fGUlMXx8dCUxKXt2YXIgaT15bigpO3JldHVybiB2bihlK2kqKHQtZStsdChcIjFlLVwiKygoaStcIlwiKS5sZW5ndGgtMSkpKSx0KX1yZXR1cm4gVXIoZSx0KX0sQm4ucmVkdWNlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1aYShlKT9JdDpXdCxvPWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gcihlLGlpKHQsNCksbixvLGNyKX0sQm4ucmVkdWNlUmlnaHQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVphKGUpP0F0Old0LG89YXJndW1lbnRzLmxlbmd0aDwzO3JldHVybiByKGUsaWkodCw0KSxuLG8sdXIpfSxCbi5yZXBlYXQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PShuP3ZpKGUsdCxuKTp0PT09byk/MTp1bCh0KSxXcihobChlKSx0KX0sQm4ucmVwbGFjZT1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cyx0PWhsKGVbMF0pO3JldHVybiBlLmxlbmd0aDwzP3Q6dC5yZXBsYWNlKGVbMV0sZVsyXSl9LEJuLnJlc3VsdD1mdW5jdGlvbihlLHQsbil7dmFyIHI9LTEsaT0odD12byh0LGUpKS5sZW5ndGg7Zm9yKGl8fChpPTEsZT1vKTsrK3I8aTspe3ZhciBhPW51bGw9PWU/bzplW0lpKHRbcl0pXTthPT09byYmKHI9aSxhPW4pLGU9R2EoYSk/YS5jYWxsKGUpOmF9cmV0dXJuIGV9LEJuLnJvdW5kPXlzLEJuLnJ1bkluQ29udGV4dD1lLEJuLnNhbXBsZT1mdW5jdGlvbihlKXtyZXR1cm4oWmEoZSk/cW46R3IpKGUpfSxCbi5zaXplPWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpcmV0dXJuIDA7aWYoTmEoZSkpcmV0dXJuIHJsKGUpP2NuKGUpOmUubGVuZ3RoO3ZhciB0PWZpKGUpO3JldHVybiB0PT14fHx0PT1TP2Uuc2l6ZTpJcihlKS5sZW5ndGh9LEJuLnNuYWtlQ2FzZT1GbCxCbi5zb21lPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1aYShlKT9UdDplbztyZXR1cm4gbiYmdmkoZSx0LG4pJiYodD1vKSxyKGUsaWkodCwzKSl9LEJuLnNvcnRlZEluZGV4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRvKGUsdCl9LEJuLnNvcnRlZEluZGV4Qnk9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBubyhlLHQsaWkobiwyKSl9LEJuLnNvcnRlZEluZGV4T2Y9ZnVuY3Rpb24oZSx0KXt2YXIgbj1udWxsPT1lPzA6ZS5sZW5ndGg7aWYobil7dmFyIHI9dG8oZSx0KTtpZihyPG4mJkhhKGVbcl0sdCkpcmV0dXJuIHJ9cmV0dXJuLTF9LEJuLnNvcnRlZExhc3RJbmRleD1mdW5jdGlvbihlLHQpe3JldHVybiB0byhlLHQsITApfSxCbi5zb3J0ZWRMYXN0SW5kZXhCeT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG5vKGUsdCxpaShuLDIpLCEwKX0sQm4uc29ydGVkTGFzdEluZGV4T2Y9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT1lJiZlLmxlbmd0aCl7dmFyIG49dG8oZSx0LCEwKS0xO2lmKEhhKGVbbl0sdCkpcmV0dXJuIG59cmV0dXJuLTF9LEJuLnN0YXJ0Q2FzZT1VbCxCbi5zdGFydHNXaXRoPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT1obChlKSxuPW51bGw9PW4/MDpvcih1bChuKSwwLGUubGVuZ3RoKSx0PWlvKHQpLGUuc2xpY2UobixuK3QubGVuZ3RoKT09dH0sQm4uc3VidHJhY3Q9d3MsQm4uc3VtPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmxlbmd0aD96dChlLFFsKTowfSxCbi5zdW1CeT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD96dChlLGlpKHQsMikpOjB9LEJuLnRlbXBsYXRlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1Cbi50ZW1wbGF0ZVNldHRpbmdzO24mJnZpKGUsdCxuKSYmKHQ9byksZT1obChlKSx0PW1sKHt9LHQscixZbyk7dmFyIGksYSxsPW1sKHt9LHQuaW1wb3J0cyxyLmltcG9ydHMsWW8pLHM9U2wobCksYz1LdChsLHMpLHU9MCxmPXQuaW50ZXJwb2xhdGV8fHllLGQ9XCJfX3AgKz0gJ1wiLHA9TGUoKHQuZXNjYXBlfHx5ZSkuc291cmNlK1wifFwiK2Yuc291cmNlK1wifFwiKyhmPT09WD9mZTp5ZSkuc291cmNlK1wifFwiKyh0LmV2YWx1YXRlfHx5ZSkuc291cmNlK1wifCRcIixcImdcIiksaD1cIi8vIyBzb3VyY2VVUkw9XCIrKEllLmNhbGwodCxcInNvdXJjZVVSTFwiKT8odC5zb3VyY2VVUkwrXCJcIikucmVwbGFjZSgvXFxzL2csXCIgXCIpOlwibG9kYXNoLnRlbXBsYXRlU291cmNlc1tcIisgKytydCtcIl1cIikrXCJcXG5cIjtlLnJlcGxhY2UocCwoZnVuY3Rpb24odCxuLHIsbyxsLHMpe3JldHVybiByfHwocj1vKSxkKz1lLnNsaWNlKHUscykucmVwbGFjZSh3ZSxubiksbiYmKGk9ITAsZCs9XCInICtcXG5fX2UoXCIrbitcIikgK1xcbidcIiksbCYmKGE9ITAsZCs9XCInO1xcblwiK2wrXCI7XFxuX19wICs9ICdcIiksciYmKGQrPVwiJyArXFxuKChfX3QgPSAoXCIrcitcIikpID09IG51bGwgPyAnJyA6IF9fdCkgK1xcbidcIiksdT1zK3QubGVuZ3RoLHR9KSksZCs9XCInO1xcblwiO3ZhciBnPUllLmNhbGwodCxcInZhcmlhYmxlXCIpJiZ0LnZhcmlhYmxlO2lmKGcpe2lmKGNlLnRlc3QoZykpdGhyb3cgbmV3IGJlKFwiSW52YWxpZCBgdmFyaWFibGVgIG9wdGlvbiBwYXNzZWQgaW50byBgXy50ZW1wbGF0ZWBcIil9ZWxzZSBkPVwid2l0aCAob2JqKSB7XFxuXCIrZCtcIlxcbn1cXG5cIjtkPShhP2QucmVwbGFjZShOLFwiXCIpOmQpLnJlcGxhY2UoRixcIiQxXCIpLnJlcGxhY2UoVSxcIiQxO1wiKSxkPVwiZnVuY3Rpb24oXCIrKGd8fFwib2JqXCIpK1wiKSB7XFxuXCIrKGc/XCJcIjpcIm9iaiB8fCAob2JqID0ge30pO1xcblwiKStcInZhciBfX3QsIF9fcCA9ICcnXCIrKGk/XCIsIF9fZSA9IF8uZXNjYXBlXCI6XCJcIikrKGE/XCIsIF9faiA9IEFycmF5LnByb3RvdHlwZS5qb2luO1xcbmZ1bmN0aW9uIHByaW50KCkgeyBfX3AgKz0gX19qLmNhbGwoYXJndW1lbnRzLCAnJykgfVxcblwiOlwiO1xcblwiKStkK1wicmV0dXJuIF9fcFxcbn1cIjt2YXIgdj1xbCgoZnVuY3Rpb24oKXtyZXR1cm4geGUocyxoK1wicmV0dXJuIFwiK2QpLmFwcGx5KG8sYyl9KSk7aWYodi5zb3VyY2U9ZCx6YSh2KSl0aHJvdyB2O3JldHVybiB2fSxCbi50aW1lcz1mdW5jdGlvbihlLHQpe2lmKChlPXVsKGUpKTwxfHxlPmYpcmV0dXJuW107dmFyIG49cCxyPXZuKGUscCk7dD1paSh0KSxlLT1wO2Zvcih2YXIgbz1HdChyLHQpOysrbjxlOyl0KG4pO3JldHVybiBvfSxCbi50b0Zpbml0ZT1jbCxCbi50b0ludGVnZXI9dWwsQm4udG9MZW5ndGg9ZmwsQm4udG9Mb3dlcj1mdW5jdGlvbihlKXtyZXR1cm4gaGwoZSkudG9Mb3dlckNhc2UoKX0sQm4udG9OdW1iZXI9ZGwsQm4udG9TYWZlSW50ZWdlcj1mdW5jdGlvbihlKXtyZXR1cm4gZT9vcih1bChlKSwtOTAwNzE5OTI1NDc0MDk5MSxmKTowPT09ZT9lOjB9LEJuLnRvU3RyaW5nPWhsLEJuLnRvVXBwZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGhsKGUpLnRvVXBwZXJDYXNlKCl9LEJuLnRyaW09ZnVuY3Rpb24oZSx0LG4pe2lmKChlPWhsKGUpKSYmKG58fHQ9PT1vKSlyZXR1cm4gcXQoZSk7aWYoIWV8fCEodD1pbyh0KSkpcmV0dXJuIGU7dmFyIHI9dW4oZSksaT11bih0KTtyZXR1cm4gQ28ocixKdChyLGkpLFF0KHIsaSkrMSkuam9pbihcIlwiKX0sQm4udHJpbUVuZD1mdW5jdGlvbihlLHQsbil7aWYoKGU9aGwoZSkpJiYobnx8dD09PW8pKXJldHVybiBlLnNsaWNlKDAsZm4oZSkrMSk7aWYoIWV8fCEodD1pbyh0KSkpcmV0dXJuIGU7dmFyIHI9dW4oZSk7cmV0dXJuIENvKHIsMCxRdChyLHVuKHQpKSsxKS5qb2luKFwiXCIpfSxCbi50cmltU3RhcnQ9ZnVuY3Rpb24oZSx0LG4pe2lmKChlPWhsKGUpKSYmKG58fHQ9PT1vKSlyZXR1cm4gZS5yZXBsYWNlKHJlLFwiXCIpO2lmKCFlfHwhKHQ9aW8odCkpKXJldHVybiBlO3ZhciByPXVuKGUpO3JldHVybiBDbyhyLEp0KHIsdW4odCkpKS5qb2luKFwiXCIpfSxCbi50cnVuY2F0ZT1mdW5jdGlvbihlLHQpe3ZhciBuPTMwLHI9XCIuLi5cIjtpZihLYSh0KSl7dmFyIGk9XCJzZXBhcmF0b3JcImluIHQ/dC5zZXBhcmF0b3I6aTtuPVwibGVuZ3RoXCJpbiB0P3VsKHQubGVuZ3RoKTpuLHI9XCJvbWlzc2lvblwiaW4gdD9pbyh0Lm9taXNzaW9uKTpyfXZhciBhPShlPWhsKGUpKS5sZW5ndGg7aWYocm4oZSkpe3ZhciBsPXVuKGUpO2E9bC5sZW5ndGh9aWYobj49YSlyZXR1cm4gZTt2YXIgcz1uLWNuKHIpO2lmKHM8MSlyZXR1cm4gcjt2YXIgYz1sP0NvKGwsMCxzKS5qb2luKFwiXCIpOmUuc2xpY2UoMCxzKTtpZihpPT09bylyZXR1cm4gYytyO2lmKGwmJihzKz1jLmxlbmd0aC1zKSx0bChpKSl7aWYoZS5zbGljZShzKS5zZWFyY2goaSkpe3ZhciB1LGY9Yztmb3IoaS5nbG9iYWx8fChpPUxlKGkuc291cmNlLGhsKGRlLmV4ZWMoaSkpK1wiZ1wiKSksaS5sYXN0SW5kZXg9MDt1PWkuZXhlYyhmKTspdmFyIGQ9dS5pbmRleDtjPWMuc2xpY2UoMCxkPT09bz9zOmQpfX1lbHNlIGlmKGUuaW5kZXhPZihpbyhpKSxzKSE9cyl7dmFyIHA9Yy5sYXN0SW5kZXhPZihpKTtwPi0xJiYoYz1jLnNsaWNlKDAscCkpfXJldHVybiBjK3J9LEJuLnVuZXNjYXBlPWZ1bmN0aW9uKGUpe3JldHVybihlPWhsKGUpKSYmRy50ZXN0KGUpP2UucmVwbGFjZShXLGRuKTplfSxCbi51bmlxdWVJZD1mdW5jdGlvbihlKXt2YXIgdD0rK0FlO3JldHVybiBobChlKSt0fSxCbi51cHBlckNhc2U9V2wsQm4udXBwZXJGaXJzdD16bCxCbi5lYWNoPWhhLEJuLmVhY2hSaWdodD1nYSxCbi5maXJzdD1OaSxycyhCbiwocHM9e30sbXIoQm4sKGZ1bmN0aW9uKGUsdCl7SWUuY2FsbChCbi5wcm90b3R5cGUsdCl8fChwc1t0XT1lKX0pKSxwcykse2NoYWluOiExfSksQm4uVkVSU0lPTj1cIjQuMTcuMjFcIixMdChbXCJiaW5kXCIsXCJiaW5kS2V5XCIsXCJjdXJyeVwiLFwiY3VycnlSaWdodFwiLFwicGFydGlhbFwiLFwicGFydGlhbFJpZ2h0XCJdLChmdW5jdGlvbihlKXtCbltlXS5wbGFjZWhvbGRlcj1Cbn0pKSxMdChbXCJkcm9wXCIsXCJ0YWtlXCJdLChmdW5jdGlvbihlLHQpeyRuLnByb3RvdHlwZVtlXT1mdW5jdGlvbihuKXtuPW49PT1vPzE6Z24odWwobiksMCk7dmFyIHI9dGhpcy5fX2ZpbHRlcmVkX18mJiF0P25ldyAkbih0aGlzKTp0aGlzLmNsb25lKCk7cmV0dXJuIHIuX19maWx0ZXJlZF9fP3IuX190YWtlQ291bnRfXz12bihuLHIuX190YWtlQ291bnRfXyk6ci5fX3ZpZXdzX18ucHVzaCh7c2l6ZTp2bihuLHApLHR5cGU6ZSsoci5fX2Rpcl9fPDA/XCJSaWdodFwiOlwiXCIpfSkscn0sJG4ucHJvdG90eXBlW2UrXCJSaWdodFwiXT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZXZlcnNlKClbZV0odCkucmV2ZXJzZSgpfX0pKSxMdChbXCJmaWx0ZXJcIixcIm1hcFwiLFwidGFrZVdoaWxlXCJdLChmdW5jdGlvbihlLHQpe3ZhciBuPXQrMSxyPTE9PW58fDM9PW47JG4ucHJvdG90eXBlW2VdPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY2xvbmUoKTtyZXR1cm4gdC5fX2l0ZXJhdGVlc19fLnB1c2goe2l0ZXJhdGVlOmlpKGUsMyksdHlwZTpufSksdC5fX2ZpbHRlcmVkX189dC5fX2ZpbHRlcmVkX198fHIsdH19KSksTHQoW1wiaGVhZFwiLFwibGFzdFwiXSwoZnVuY3Rpb24oZSx0KXt2YXIgbj1cInRha2VcIisodD9cIlJpZ2h0XCI6XCJcIik7JG4ucHJvdG90eXBlW2VdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbbl0oMSkudmFsdWUoKVswXX19KSksTHQoW1wiaW5pdGlhbFwiLFwidGFpbFwiXSwoZnVuY3Rpb24oZSx0KXt2YXIgbj1cImRyb3BcIisodD9cIlwiOlwiUmlnaHRcIik7JG4ucHJvdG90eXBlW2VdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19maWx0ZXJlZF9fP25ldyAkbih0aGlzKTp0aGlzW25dKDEpfX0pKSwkbi5wcm90b3R5cGUuY29tcGFjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbHRlcihRbCl9LCRuLnByb3RvdHlwZS5maW5kPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmZpbHRlcihlKS5oZWFkKCl9LCRuLnByb3RvdHlwZS5maW5kTGFzdD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5yZXZlcnNlKCkuZmluZChlKX0sJG4ucHJvdG90eXBlLmludm9rZU1hcD16cigoZnVuY3Rpb24oZSx0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP25ldyAkbih0aGlzKTp0aGlzLm1hcCgoZnVuY3Rpb24obil7cmV0dXJuIFNyKG4sZSx0KX0pKX0pKSwkbi5wcm90b3R5cGUucmVqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmZpbHRlcihSYShpaShlKSkpfSwkbi5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oZSx0KXtlPXVsKGUpO3ZhciBuPXRoaXM7cmV0dXJuIG4uX19maWx0ZXJlZF9fJiYoZT4wfHx0PDApP25ldyAkbihuKTooZTwwP249bi50YWtlUmlnaHQoLWUpOmUmJihuPW4uZHJvcChlKSksdCE9PW8mJihuPSh0PXVsKHQpKTwwP24uZHJvcFJpZ2h0KC10KTpuLnRha2UodC1lKSksbil9LCRuLnByb3RvdHlwZS50YWtlUmlnaHRXaGlsZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5yZXZlcnNlKCkudGFrZVdoaWxlKGUpLnJldmVyc2UoKX0sJG4ucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YWtlKHApfSxtcigkbi5wcm90b3R5cGUsKGZ1bmN0aW9uKGUsdCl7dmFyIG49L14oPzpmaWx0ZXJ8ZmluZHxtYXB8cmVqZWN0KXxXaGlsZSQvLnRlc3QodCkscj0vXig/OmhlYWR8bGFzdCkkLy50ZXN0KHQpLGk9Qm5bcj9cInRha2VcIisoXCJsYXN0XCI9PXQ/XCJSaWdodFwiOlwiXCIpOnRdLGE9cnx8L15maW5kLy50ZXN0KHQpO2kmJihCbi5wcm90b3R5cGVbdF09ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9fd3JhcHBlZF9fLGw9cj9bMV06YXJndW1lbnRzLHM9dCBpbnN0YW5jZW9mICRuLGM9bFswXSx1PXN8fFphKHQpLGY9ZnVuY3Rpb24oZSl7dmFyIHQ9aS5hcHBseShCbixQdChbZV0sbCkpO3JldHVybiByJiZkP3RbMF06dH07dSYmbiYmXCJmdW5jdGlvblwiPT10eXBlb2YgYyYmMSE9Yy5sZW5ndGgmJihzPXU9ITEpO3ZhciBkPXRoaXMuX19jaGFpbl9fLHA9ISF0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCxoPWEmJiFkLGc9cyYmIXA7aWYoIWEmJnUpe3Q9Zz90Om5ldyAkbih0aGlzKTt2YXIgdj1lLmFwcGx5KHQsbCk7cmV0dXJuIHYuX19hY3Rpb25zX18ucHVzaCh7ZnVuYzpjYSxhcmdzOltmXSx0aGlzQXJnOm99KSxuZXcgWm4odixkKX1yZXR1cm4gaCYmZz9lLmFwcGx5KHRoaXMsbCk6KHY9dGhpcy50aHJ1KGYpLGg/cj92LnZhbHVlKClbMF06di52YWx1ZSgpOnYpfSl9KSksTHQoW1wicG9wXCIsXCJwdXNoXCIsXCJzaGlmdFwiLFwic29ydFwiLFwic3BsaWNlXCIsXCJ1bnNoaWZ0XCJdLChmdW5jdGlvbihlKXt2YXIgdD1qZVtlXSxuPS9eKD86cHVzaHxzb3J0fHVuc2hpZnQpJC8udGVzdChlKT9cInRhcFwiOlwidGhydVwiLHI9L14oPzpwb3B8c2hpZnQpJC8udGVzdChlKTtCbi5wcm90b3R5cGVbZV09ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHM7aWYociYmIXRoaXMuX19jaGFpbl9fKXt2YXIgbz10aGlzLnZhbHVlKCk7cmV0dXJuIHQuYXBwbHkoWmEobyk/bzpbXSxlKX1yZXR1cm4gdGhpc1tuXSgoZnVuY3Rpb24obil7cmV0dXJuIHQuYXBwbHkoWmEobik/bjpbXSxlKX0pKX19KSksbXIoJG4ucHJvdG90eXBlLChmdW5jdGlvbihlLHQpe3ZhciBuPUJuW3RdO2lmKG4pe3ZhciByPW4ubmFtZStcIlwiO0llLmNhbGwoam4scil8fChqbltyXT1bXSksam5bcl0ucHVzaCh7bmFtZTp0LGZ1bmM6bn0pfX0pKSxqbltCbyhvLDIpLm5hbWVdPVt7bmFtZTpcIndyYXBwZXJcIixmdW5jOm99XSwkbi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgJG4odGhpcy5fX3dyYXBwZWRfXyk7cmV0dXJuIGUuX19hY3Rpb25zX189RW8odGhpcy5fX2FjdGlvbnNfXyksZS5fX2Rpcl9fPXRoaXMuX19kaXJfXyxlLl9fZmlsdGVyZWRfXz10aGlzLl9fZmlsdGVyZWRfXyxlLl9faXRlcmF0ZWVzX189RW8odGhpcy5fX2l0ZXJhdGVlc19fKSxlLl9fdGFrZUNvdW50X189dGhpcy5fX3Rha2VDb3VudF9fLGUuX192aWV3c19fPUVvKHRoaXMuX192aWV3c19fKSxlfSwkbi5wcm90b3R5cGUucmV2ZXJzZT1mdW5jdGlvbigpe2lmKHRoaXMuX19maWx0ZXJlZF9fKXt2YXIgZT1uZXcgJG4odGhpcyk7ZS5fX2Rpcl9fPS0xLGUuX19maWx0ZXJlZF9fPSEwfWVsc2UoZT10aGlzLmNsb25lKCkpLl9fZGlyX18qPS0xO3JldHVybiBlfSwkbi5wcm90b3R5cGUudmFsdWU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9fd3JhcHBlZF9fLnZhbHVlKCksdD10aGlzLl9fZGlyX18sbj1aYShlKSxyPXQ8MCxvPW4/ZS5sZW5ndGg6MCxpPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9LTEsbz1uLmxlbmd0aDsrK3I8bzspe3ZhciBpPW5bcl0sYT1pLnNpemU7c3dpdGNoKGkudHlwZSl7Y2FzZVwiZHJvcFwiOmUrPWE7YnJlYWs7Y2FzZVwiZHJvcFJpZ2h0XCI6dC09YTticmVhaztjYXNlXCJ0YWtlXCI6dD12bih0LGUrYSk7YnJlYWs7Y2FzZVwidGFrZVJpZ2h0XCI6ZT1nbihlLHQtYSl9fXJldHVybntzdGFydDplLGVuZDp0fX0oMCxvLHRoaXMuX192aWV3c19fKSxhPWkuc3RhcnQsbD1pLmVuZCxzPWwtYSxjPXI/bDphLTEsdT10aGlzLl9faXRlcmF0ZWVzX18sZj11Lmxlbmd0aCxkPTAscD12bihzLHRoaXMuX190YWtlQ291bnRfXyk7aWYoIW58fCFyJiZvPT1zJiZwPT1zKXJldHVybiB1byhlLHRoaXMuX19hY3Rpb25zX18pO3ZhciBoPVtdO2U6Zm9yKDtzLS0mJmQ8cDspe2Zvcih2YXIgZz0tMSx2PWVbYys9dF07KytnPGY7KXt2YXIgbT11W2ddLEM9bS5pdGVyYXRlZSx5PW0udHlwZSx3PUModik7aWYoMj09eSl2PXc7ZWxzZSBpZighdyl7aWYoMT09eSljb250aW51ZSBlO2JyZWFrIGV9fWhbZCsrXT12fXJldHVybiBofSxCbi5wcm90b3R5cGUuYXQ9dWEsQm4ucHJvdG90eXBlLmNoYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHNhKHRoaXMpfSxCbi5wcm90b3R5cGUuY29tbWl0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBabih0aGlzLnZhbHVlKCksdGhpcy5fX2NoYWluX18pfSxCbi5wcm90b3R5cGUubmV4dD1mdW5jdGlvbigpe3RoaXMuX192YWx1ZXNfXz09PW8mJih0aGlzLl9fdmFsdWVzX189c2wodGhpcy52YWx1ZSgpKSk7dmFyIGU9dGhpcy5fX2luZGV4X18+PXRoaXMuX192YWx1ZXNfXy5sZW5ndGg7cmV0dXJue2RvbmU6ZSx2YWx1ZTplP286dGhpcy5fX3ZhbHVlc19fW3RoaXMuX19pbmRleF9fKytdfX0sQm4ucHJvdG90eXBlLnBsYW50PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPXRoaXM7biBpbnN0YW5jZW9mIERuOyl7dmFyIHI9VGkobik7ci5fX2luZGV4X189MCxyLl9fdmFsdWVzX189byx0P2kuX193cmFwcGVkX189cjp0PXI7dmFyIGk9cjtuPW4uX193cmFwcGVkX199cmV0dXJuIGkuX193cmFwcGVkX189ZSx0fSxCbi5wcm90b3R5cGUucmV2ZXJzZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX193cmFwcGVkX187aWYoZSBpbnN0YW5jZW9mICRuKXt2YXIgdD1lO3JldHVybiB0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCYmKHQ9bmV3ICRuKHRoaXMpKSwodD10LnJldmVyc2UoKSkuX19hY3Rpb25zX18ucHVzaCh7ZnVuYzpjYSxhcmdzOltLaV0sdGhpc0FyZzpvfSksbmV3IFpuKHQsdGhpcy5fX2NoYWluX18pfXJldHVybiB0aGlzLnRocnUoS2kpfSxCbi5wcm90b3R5cGUudG9KU09OPUJuLnByb3RvdHlwZS52YWx1ZU9mPUJuLnByb3RvdHlwZS52YWx1ZT1mdW5jdGlvbigpe3JldHVybiB1byh0aGlzLl9fd3JhcHBlZF9fLHRoaXMuX19hY3Rpb25zX18pfSxCbi5wcm90b3R5cGUuZmlyc3Q9Qm4ucHJvdG90eXBlLmhlYWQsWWUmJihCbi5wcm90b3R5cGVbWWVdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxCbn0oKTtmdC5fPXBuLChyPWZ1bmN0aW9uKCl7cmV0dXJuIHBufS5jYWxsKHQsbix0LGUpKT09PW98fChlLmV4cG9ydHM9cil9LmNhbGwodGhpcyl9LDMwMDooZSx0LG4pPT57dmFyIHIsbztlPW4ubm1kKGUpLGZ1bmN0aW9uKHQpe3QucnVubmluZ0luTm9kZUpTPWZ1bmN0aW9uKCl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIHByb2Nlc3MmJlwib2JqZWN0XCI9PXR5cGVvZiBwcm9jZXNzLnZlcnNpb25zJiZcInN0cmluZ1wiPT10eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlfSx0LnJ1bm5pbmdJbk1haW5Ob2RlSlNNb2R1bGU9ZnVuY3Rpb24oKXtyZXR1cm4gdC5ydW5uaW5nSW5Ob2RlSlMoKSYmbi5jW24uc109PT1lfSx0LmNvbW1vbkpTQXZhaWxhYmxlPWZ1bmN0aW9uKCl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGUuZXhwb3J0c30sdC5ydW5uaW5nSW5XZWJXb3JrZXI9ZnVuY3Rpb24oKXtyZXR1cm5cInVuZGVmaW5lZFwiPT10eXBlb2Ygd2luZG93JiZcIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmXCJmdW5jdGlvblwiPT10eXBlb2Ygc2VsZi5hZGRFdmVudExpc3RlbmVyJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBzZWxmLmNsb3NlfSx0LnJ1bm5pbmdJbk5vZGVDaGlsZFByb2Nlc3M9ZnVuY3Rpb24oKXtyZXR1cm4gdC5ydW5uaW5nSW5Ob2RlSlMoKSYmXCJmdW5jdGlvblwiPT10eXBlb2YgcHJvY2Vzcy5zZW5kfSx0LnJ1bm5pbmdJbk51bGxPcmlnaW49ZnVuY3Rpb24oKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiZcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93LmxvY2F0aW9uJiZcIm9iamVjdFwiPT10eXBlb2YgZG9jdW1lbnQmJlwiaHR0cDpcIiE9PWRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sJiZcImh0dHBzOlwiIT09ZG9jdW1lbnQubG9jYXRpb24ucHJvdG9jb2x9LHQud2ViV29ya2Vyc0F2YWlsYWJsZT1mdW5jdGlvbigpe3JldHVybiEoXCJmdW5jdGlvblwiIT10eXBlb2YgV29ya2VyfHx0LnJ1bm5pbmdJbk51bGxPcmlnaW4oKXx8dC5ydW5uaW5nSW5Ob2RlSlMoKXx8bmF2aWdhdG9yJiZuYXZpZ2F0b3IudXNlckFnZW50JiZuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoXCJBbmRyb2lkIDQuM1wiKT49MCl9LHQubG9nPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9ITEpLFwib2JqZWN0XCI9PXR5cGVvZiBjb25zb2xlJiZ0JiZcIm9iamVjdFwiPT10eXBlb2YgZG9jdW1lbnQmJihkb2N1bWVudC5ib2R5LmlubmVySFRNTCs9ZStcIjxici8+XCIpfSx0LmNyZWF0ZUVycm9yTWVzc2FnZT1mdW5jdGlvbihlLG4pe2lmKHZvaWQgMD09PW4mJihuPVwiVW5oYW5kbGVkIGV4Y2VwdGlvblwiKSxudWxsPT1lKXJldHVybiBuO2lmKG4rPVwiOiBcIixcIm9iamVjdFwiPT10eXBlb2YgZS5jb250ZW50KXtpZih0LnJ1bm5pbmdJbk5vZGVKUygpKXJldHVybiBuK2UuY29udGVudC5zdGFjazt2YXIgcj1KU09OLnN0cmluZ2lmeShlLmNvbnRlbnQpO3JldHVyblwie31cIiE9PXI/bityOm4rZS5jb250ZW50fXJldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlLmNvbnRlbnQ/bitlLmNvbnRlbnQ6bitlfSx0LnByaW50RXhjZXB0aW9uQW5kU3RhY2tUcmFjZVRvQ29uc29sZT1mdW5jdGlvbihlLG4pe3ZvaWQgMD09PW4mJihuPVwiVW5oYW5kbGVkIGV4Y2VwdGlvblwiKSx0LmxvZyh0LmNyZWF0ZUVycm9yTWVzc2FnZShlLG4pKX0sdC5nZXRHbG9iYWxPYmplY3Q9ZnVuY3Rpb24oKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2Ygbi5nP24uZzpcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93P3dpbmRvdzpcIm9iamVjdFwiPT10eXBlb2Ygc2VsZj9zZWxmOnt9fSx0LnRvU3RyaW5nPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsdC5jb21tb25KU0F2YWlsYWJsZSgpJiYoZS5leHBvcnRzPXQpfShvfHwobz17fSkpLGZ1bmN0aW9uKGUpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIFVpbnQ4QXJyYXkmJjAhPT1uZXcgVWludDhBcnJheSgxKS5zdWJhcnJheSgxKS5ieXRlTGVuZ3RoKXt2YXIgdD1mdW5jdGlvbihlLHQpe3ZhciBuPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZTx0P3Q6ZT5uP246ZX07ZXw9MCx0fD0wLGFyZ3VtZW50cy5sZW5ndGg8MSYmKGU9MCksYXJndW1lbnRzLmxlbmd0aDwyJiYodD10aGlzLmxlbmd0aCksZTwwJiYoZT10aGlzLmxlbmd0aCtlKSx0PDAmJih0PXRoaXMubGVuZ3RoK3QpLGU9bihlLDAsdGhpcy5sZW5ndGgpO3ZhciByPSh0PW4odCwwLHRoaXMubGVuZ3RoKSktZTtyZXR1cm4gcjwwJiYocj0wKSxuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmJ1ZmZlcix0aGlzLmJ5dGVPZmZzZXQrZSp0aGlzLkJZVEVTX1BFUl9FTEVNRU5ULHIpfSxuPVtcIkludDhBcnJheVwiLFwiVWludDhBcnJheVwiLFwiVWludDhDbGFtcGVkQXJyYXlcIixcIkludDE2QXJyYXlcIixcIlVpbnQxNkFycmF5XCIsXCJJbnQzMkFycmF5XCIsXCJVaW50MzJBcnJheVwiLFwiRmxvYXQzMkFycmF5XCIsXCJGbG9hdDY0QXJyYXlcIl0scj12b2lkIDA7aWYoXCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdz9yPXdpbmRvdzpcIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmKHI9c2VsZiksdm9pZCAwIT09cilmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKylyW25bb11dJiYocltuW29dXS5wcm90b3R5cGUuc3ViYXJyYXk9dCl9fShyfHwocj17fSkpLGZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5jb21wcmVzc0FzeW5jPWZ1bmN0aW9uKHQsbixyKXt2YXIgbz1uZXcgZS5UaW1lcixpPW5ldyBlLkNvbXByZXNzb3I7aWYoIXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcImNvbXByZXNzQXN5bmM6IE5vIGNhbGxiYWNrIGFyZ3VtZW50IGdpdmVuXCIpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXQ9ZS5lbmNvZGVVVEY4KHQpO2Vsc2UgaWYobnVsbD09dHx8ISh0IGluc3RhbmNlb2YgVWludDhBcnJheSkpcmV0dXJuIHZvaWQgcih2b2lkIDAsbmV3IFR5cGVFcnJvcihcImNvbXByZXNzQXN5bmM6IEludmFsaWQgaW5wdXQgYXJndW1lbnQsIG9ubHkgJ3N0cmluZycgYW5kICdVaW50OEFycmF5JyBhcmUgc3VwcG9ydGVkXCIpKTt2YXIgYT1lLkFycmF5VG9vbHMuc3BsaXRCeXRlQXJyYXkodCxuLmJsb2NrU2l6ZSksbD1bXSxzPWZ1bmN0aW9uKHQpe2lmKHQ8YS5sZW5ndGgpe3ZhciBjPXZvaWQgMDt0cnl7Yz1pLmNvbXByZXNzQmxvY2soYVt0XSl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcih2b2lkIDAsZSl9bC5wdXNoKGMpLG8uZ2V0RWxhcHNlZFRpbWUoKTw9MjA/cyh0KzEpOihlLmVucXVldWVJbW1lZGlhdGUoKGZ1bmN0aW9uKCl7cmV0dXJuIHModCsxKX0pKSxvLnJlc3RhcnQoKSl9ZWxzZXt2YXIgdT1lLkFycmF5VG9vbHMuY29uY2F0VWludDhBcnJheXMobCk7ZS5lbnF1ZXVlSW1tZWRpYXRlKChmdW5jdGlvbigpe3ZhciB0O3RyeXt0PWUuQ29tcHJlc3Npb25Db21tb24uZW5jb2RlQ29tcHJlc3NlZEJ5dGVzKHUsbi5vdXRwdXRFbmNvZGluZyl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcih2b2lkIDAsZSl9ZS5lbnF1ZXVlSW1tZWRpYXRlKChmdW5jdGlvbigpe3JldHVybiByKHQpfSkpfSkpfX07ZS5lbnF1ZXVlSW1tZWRpYXRlKChmdW5jdGlvbigpe3JldHVybiBzKDApfSkpfSx0LmNyZWF0ZUNvbXByZXNzaW9uU3RyZWFtPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGUuQ29tcHJlc3NvcixyPW5ldyhuKDk5KS5UcmFuc2Zvcm0pKHtkZWNvZGVTdHJpbmdzOiEwLGhpZ2hXYXRlck1hcms6NjU1MzZ9KTtyZXR1cm4gci5fdHJhbnNmb3JtPWZ1bmN0aW9uKG4sbyxpKXt2YXIgYTt0cnl7YT1lLkJ1ZmZlclRvb2xzLnVpbnQ4QXJyYXlUb0J1ZmZlcih0LmNvbXByZXNzQmxvY2soZS5CdWZmZXJUb29scy5idWZmZXJUb1VpbnQ4QXJyYXkobikpKX1jYXRjaChlKXtyZXR1cm4gdm9pZCByLmVtaXQoXCJlcnJvclwiLGUpfXIucHVzaChhKSxpKCl9LHJ9LHR9KCk7ZS5Bc3luY0NvbXByZXNzb3I9dH0ob3x8KG89e30pKSxmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuZGVjb21wcmVzc0FzeW5jPWZ1bmN0aW9uKHQsbixyKXtpZighcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiZGVjb21wcmVzc0FzeW5jOiBObyBjYWxsYmFjayBhcmd1bWVudCBnaXZlblwiKTt2YXIgbz1uZXcgZS5UaW1lcjt0cnl7dD1lLkNvbXByZXNzaW9uQ29tbW9uLmRlY29kZUNvbXByZXNzZWRCeXRlcyh0LG4uaW5wdXRFbmNvZGluZyl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcih2b2lkIDAsZSl9dmFyIGk9bmV3IGUuRGVjb21wcmVzc29yLGE9ZS5BcnJheVRvb2xzLnNwbGl0Qnl0ZUFycmF5KHQsbi5ibG9ja1NpemUpLGw9W10scz1mdW5jdGlvbih0KXtpZih0PGEubGVuZ3RoKXt2YXIgYz12b2lkIDA7dHJ5e2M9aS5kZWNvbXByZXNzQmxvY2soYVt0XSl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcih2b2lkIDAsZSl9bC5wdXNoKGMpLG8uZ2V0RWxhcHNlZFRpbWUoKTw9MjA/cyh0KzEpOihlLmVucXVldWVJbW1lZGlhdGUoKGZ1bmN0aW9uKCl7cmV0dXJuIHModCsxKX0pKSxvLnJlc3RhcnQoKSl9ZWxzZXt2YXIgdT1lLkFycmF5VG9vbHMuY29uY2F0VWludDhBcnJheXMobCk7ZS5lbnF1ZXVlSW1tZWRpYXRlKChmdW5jdGlvbigpe3ZhciB0O3RyeXt0PWUuQ29tcHJlc3Npb25Db21tb24uZW5jb2RlRGVjb21wcmVzc2VkQnl0ZXModSxuLm91dHB1dEVuY29kaW5nKX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKHZvaWQgMCxlKX1lLmVucXVldWVJbW1lZGlhdGUoKGZ1bmN0aW9uKCl7cmV0dXJuIHIodCl9KSl9KSl9fTtlLmVucXVldWVJbW1lZGlhdGUoKGZ1bmN0aW9uKCl7cmV0dXJuIHMoMCl9KSl9LHQuY3JlYXRlRGVjb21wcmVzc2lvblN0cmVhbT1mdW5jdGlvbigpe3ZhciB0PW5ldyBlLkRlY29tcHJlc3NvcixyPW5ldyhuKDk5KS5UcmFuc2Zvcm0pKHtkZWNvZGVTdHJpbmdzOiEwLGhpZ2hXYXRlck1hcms6NjU1MzZ9KTtyZXR1cm4gci5fdHJhbnNmb3JtPWZ1bmN0aW9uKG4sbyxpKXt2YXIgYTt0cnl7YT1lLkJ1ZmZlclRvb2xzLnVpbnQ4QXJyYXlUb0J1ZmZlcih0LmRlY29tcHJlc3NCbG9jayhlLkJ1ZmZlclRvb2xzLmJ1ZmZlclRvVWludDhBcnJheShuKSkpfWNhdGNoKGUpe3JldHVybiB2b2lkIHIuZW1pdChcImVycm9yXCIsZSl9ci5wdXNoKGEpLGkoKX0scn0sdH0oKTtlLkFzeW5jRGVjb21wcmVzc29yPXR9KG98fChvPXt9KSksZnVuY3Rpb24oZSl7dmFyIHQ7IWZ1bmN0aW9uKHQpe3QuY29tcHJlc3NBc3luYz1mdW5jdGlvbihlLG4scil7aWYoXCJCeXRlQXJyYXlcIiE9bi5pbnB1dEVuY29kaW5nfHxlIGluc3RhbmNlb2YgVWludDhBcnJheSl7dmFyIG89e3Rva2VuOk1hdGgucmFuZG9tKCkudG9TdHJpbmcoKSx0eXBlOlwiY29tcHJlc3NcIixkYXRhOmUsaW5wdXRFbmNvZGluZzpuLmlucHV0RW5jb2Rpbmcsb3V0cHV0RW5jb2Rpbmc6bi5vdXRwdXRFbmNvZGluZ30saT1mdW5jdGlvbihlKXt2YXIgbj1lLmRhdGE7biYmbi50b2tlbj09by50b2tlbiYmKHQuZ2xvYmFsV29ya2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsaSksXCJlcnJvclwiPT1uLnR5cGU/cih2b2lkIDAsbmV3IEVycm9yKG4uZXJyb3IpKTpyKG4uZGF0YSkpfTt0Lmdsb2JhbFdvcmtlci5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLGkpLHQuZ2xvYmFsV29ya2VyLnBvc3RNZXNzYWdlKG8sW10pfWVsc2Ugcih2b2lkIDAsbmV3IFR5cGVFcnJvcihcImNvbXByZXNzQXN5bmM6IGlucHV0IGlzIG5vdCBhIFVpbnQ4QXJyYXlcIikpfSx0LmRlY29tcHJlc3NBc3luYz1mdW5jdGlvbihlLG4scil7dmFyIG89e3Rva2VuOk1hdGgucmFuZG9tKCkudG9TdHJpbmcoKSx0eXBlOlwiZGVjb21wcmVzc1wiLGRhdGE6ZSxpbnB1dEVuY29kaW5nOm4uaW5wdXRFbmNvZGluZyxvdXRwdXRFbmNvZGluZzpuLm91dHB1dEVuY29kaW5nfSxpPWZ1bmN0aW9uKGUpe3ZhciBuPWUuZGF0YTtuJiZuLnRva2VuPT1vLnRva2VuJiYodC5nbG9iYWxXb3JrZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIixpKSxcImVycm9yXCI9PW4udHlwZT9yKHZvaWQgMCxuZXcgRXJyb3Iobi5lcnJvcikpOnIobi5kYXRhKSl9O3QuZ2xvYmFsV29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsaSksdC5nbG9iYWxXb3JrZXIucG9zdE1lc3NhZ2UobyxbXSl9LHQuaW5zdGFsbFdlYldvcmtlcklmTmVlZGVkPWZ1bmN0aW9uKCl7XCJvYmplY3RcIj09dHlwZW9mIHNlbGYmJnZvaWQgMD09PXNlbGYuZG9jdW1lbnQmJm51bGwhPXNlbGYuYWRkRXZlbnRMaXN0ZW5lciYmKHNlbGYuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwoZnVuY3Rpb24odCl7dmFyIG49dC5kYXRhO2lmKFwiY29tcHJlc3NcIj09bi50eXBlKXt2YXIgcj12b2lkIDA7dHJ5e3I9ZS5jb21wcmVzcyhuLmRhdGEse291dHB1dEVuY29kaW5nOm4ub3V0cHV0RW5jb2Rpbmd9KX1jYXRjaCh0KXtyZXR1cm4gdm9pZCBzZWxmLnBvc3RNZXNzYWdlKHt0b2tlbjpuLnRva2VuLHR5cGU6XCJlcnJvclwiLGVycm9yOmUuY3JlYXRlRXJyb3JNZXNzYWdlKHQpfSxbXSl9KG89e3Rva2VuOm4udG9rZW4sdHlwZTpcImNvbXByZXNzaW9uUmVzdWx0XCIsZGF0YTpyLGVuY29kaW5nOm4ub3V0cHV0RW5jb2Rpbmd9KS5kYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSYmLTE9PT1uYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmRleE9mKFwiTVNJRSAxMFwiKT9zZWxmLnBvc3RNZXNzYWdlKG8sW28uZGF0YS5idWZmZXJdKTpzZWxmLnBvc3RNZXNzYWdlKG8sW10pfWVsc2UgaWYoXCJkZWNvbXByZXNzXCI9PW4udHlwZSl7dmFyIG8saT12b2lkIDA7dHJ5e2k9ZS5kZWNvbXByZXNzKG4uZGF0YSx7aW5wdXRFbmNvZGluZzpuLmlucHV0RW5jb2Rpbmcsb3V0cHV0RW5jb2Rpbmc6bi5vdXRwdXRFbmNvZGluZ30pfWNhdGNoKHQpe3JldHVybiB2b2lkIHNlbGYucG9zdE1lc3NhZ2Uoe3Rva2VuOm4udG9rZW4sdHlwZTpcImVycm9yXCIsZXJyb3I6ZS5jcmVhdGVFcnJvck1lc3NhZ2UodCl9LFtdKX0obz17dG9rZW46bi50b2tlbix0eXBlOlwiZGVjb21wcmVzc2lvblJlc3VsdFwiLGRhdGE6aSxlbmNvZGluZzpuLm91dHB1dEVuY29kaW5nfSkuZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJi0xPT09bmF2aWdhdG9yLmFwcFZlcnNpb24uaW5kZXhPZihcIk1TSUUgMTBcIik/c2VsZi5wb3N0TWVzc2FnZShvLFtvLmRhdGEuYnVmZmVyXSk6c2VsZi5wb3N0TWVzc2FnZShvLFtdKX19KSksc2VsZi5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwoZnVuY3Rpb24odCl7ZS5sb2coZS5jcmVhdGVFcnJvck1lc3NhZ2UodC5lcnJvcixcIlVuZXhwZWN0ZWQgTFpVVEY4IFdlYldvcmtlciBleGNlcHRpb25cIikpfSkpKX0sdC5jcmVhdGVHbG9iYWxXb3JrZXJJZk5lZWRlZD1mdW5jdGlvbigpe2lmKHQuZ2xvYmFsV29ya2VyKXJldHVybiEwO2lmKCFlLndlYldvcmtlcnNBdmFpbGFibGUoKSlyZXR1cm4hMTtpZighdC5zY3JpcHRVUkkmJlwib2JqZWN0XCI9PXR5cGVvZiBkb2N1bWVudCl7dmFyIG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJsenV0ZjhcIik7bnVsbCE9biYmKHQuc2NyaXB0VVJJPW4uZ2V0QXR0cmlidXRlKFwic3JjXCIpfHx2b2lkIDApfXJldHVybiEhdC5zY3JpcHRVUkkmJih0Lmdsb2JhbFdvcmtlcj1uZXcgV29ya2VyKHQuc2NyaXB0VVJJKSwhMCl9LHQudGVybWluYXRlPWZ1bmN0aW9uKCl7dC5nbG9iYWxXb3JrZXImJih0Lmdsb2JhbFdvcmtlci50ZXJtaW5hdGUoKSx0Lmdsb2JhbFdvcmtlcj12b2lkIDApfX0odD1lLldlYldvcmtlcnx8KGUuV2ViV29ya2VyPXt9KSksdC5pbnN0YWxsV2ViV29ya2VySWZOZWVkZWQoKX0ob3x8KG89e30pKSxmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3RoaXMuY29udGFpbmVyPWUsdGhpcy5zdGFydFBvc2l0aW9uPXQsdGhpcy5sZW5ndGg9bn1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNvbnRhaW5lclt0aGlzLnN0YXJ0UG9zaXRpb24rZV19LGUucHJvdG90eXBlLmdldEluUmV2ZXJzZWRPcmRlcj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jb250YWluZXJbdGhpcy5zdGFydFBvc2l0aW9uK3RoaXMubGVuZ3RoLTEtZV19LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3RoaXMuY29udGFpbmVyW3RoaXMuc3RhcnRQb3NpdGlvbitlXT10fSxlfSgpO2UuQXJyYXlTZWdtZW50PXR9KG98fChvPXt9KSksZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUpe2UuY29weUVsZW1lbnRzPWZ1bmN0aW9uKGUsdCxuLHIsbyl7Zm9yKDtvLS07KW5bcisrXT1lW3QrK119LGUuemVyb0VsZW1lbnRzPWZ1bmN0aW9uKGUsdCxuKXtmb3IoO24tLTspZVt0KytdPTB9LGUuY291bnROb256ZXJvVmFsdWVzSW5BcnJheT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxuPTA7bjxlLmxlbmd0aDtuKyspZVtuXSYmdCsrO3JldHVybiB0fSxlLnRydW5jYXRlU3RhcnRpbmdFbGVtZW50cz1mdW5jdGlvbihlLHQpe2lmKGUubGVuZ3RoPD10KXRocm93IG5ldyBSYW5nZUVycm9yKFwidHJ1bmNhdGVTdGFydGluZ0VsZW1lbnRzOiBSZXF1ZXN0ZWQgbGVuZ3RoIHNob3VsZCBiZSBzbWFsbGVyIHRoYW4gYXJyYXkgbGVuZ3RoXCIpO2Zvcih2YXIgbj1lLmxlbmd0aC10LHI9MDtyPHQ7cisrKWVbcl09ZVtuK3JdO2UubGVuZ3RoPXR9LGUuZG91YmxlQnl0ZUFycmF5Q2FwYWNpdHk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoMiplLmxlbmd0aCk7cmV0dXJuIHQuc2V0KGUpLHR9LGUuY29uY2F0VWludDhBcnJheXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsbj0wLHI9ZTtuPHIubGVuZ3RoO24rKyl0Kz0ocz1yW25dKS5sZW5ndGg7Zm9yKHZhciBvPW5ldyBVaW50OEFycmF5KHQpLGk9MCxhPTAsbD1lO2E8bC5sZW5ndGg7YSsrKXt2YXIgcz1sW2FdO28uc2V0KHMsaSksaSs9cy5sZW5ndGh9cmV0dXJuIG99LGUuc3BsaXRCeXRlQXJyYXk9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W10scj0wO3I8ZS5sZW5ndGg7KXt2YXIgbz1NYXRoLm1pbih0LGUubGVuZ3RoLXIpO24ucHVzaChlLnN1YmFycmF5KHIscitvKSkscis9b31yZXR1cm4gbn19KGUuQXJyYXlUb29sc3x8KGUuQXJyYXlUb29scz17fSkpfShvfHwobz17fSkpLGZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlKXtlLmNvbnZlcnRUb1VpbnQ4QXJyYXlJZk5lZWRlZD1mdW5jdGlvbih0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBCdWZmZXImJkJ1ZmZlci5pc0J1ZmZlcih0KT9lLmJ1ZmZlclRvVWludDhBcnJheSh0KTp0fSxlLnVpbnQ4QXJyYXlUb0J1ZmZlcj1mdW5jdGlvbihlKXtpZihCdWZmZXIucHJvdG90eXBlIGluc3RhbmNlb2YgVWludDhBcnJheSl7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIsZS5ieXRlT2Zmc2V0LGUuYnl0ZUxlbmd0aCk7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZih0LEJ1ZmZlci5wcm90b3R5cGUpLHR9Zm9yKHZhciBuPWUubGVuZ3RoLHI9bmV3IEJ1ZmZlcihuKSxvPTA7bzxuO28rKylyW29dPWVbb107cmV0dXJuIHJ9LGUuYnVmZmVyVG9VaW50OEFycmF5PWZ1bmN0aW9uKGUpe2lmKEJ1ZmZlci5wcm90b3R5cGUgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiBuZXcgVWludDhBcnJheShlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQsZS5ieXRlTGVuZ3RoKTtmb3IodmFyIHQ9ZS5sZW5ndGgsbj1uZXcgVWludDhBcnJheSh0KSxyPTA7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59fShlLkJ1ZmZlclRvb2xzfHwoZS5CdWZmZXJUb29scz17fSkpfShvfHwobz17fSkpLGZ1bmN0aW9uKGUpeyFmdW5jdGlvbih0KXt0LmdldENyb3BwZWRCdWZmZXI9ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9MCk7dmFyIG89bmV3IFVpbnQ4QXJyYXkobityKTtyZXR1cm4gby5zZXQoZS5zdWJhcnJheSh0LHQrbikpLG99LHQuZ2V0Q3JvcHBlZEFuZEFwcGVuZGVkQnl0ZUFycmF5PWZ1bmN0aW9uKHQsbixyLG8pe3JldHVybiBlLkFycmF5VG9vbHMuY29uY2F0VWludDhBcnJheXMoW3Quc3ViYXJyYXkobixuK3IpLG9dKX0sdC5kZXRlY3RDb21wcmVzc2lvblNvdXJjZUVuY29kaW5nPWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcImRldGVjdENvbXByZXNzaW9uU291cmNlRW5jb2Rpbmc6IGlucHV0IGlzIG51bGwgb3IgdW5kZWZpbmVkXCIpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVyblwiU3RyaW5nXCI7aWYoZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fFwiZnVuY3Rpb25cIj09dHlwZW9mIEJ1ZmZlciYmQnVmZmVyLmlzQnVmZmVyKGUpKXJldHVyblwiQnl0ZUFycmF5XCI7dGhyb3cgbmV3IFR5cGVFcnJvcihcImRldGVjdENvbXByZXNzaW9uU291cmNlRW5jb2Rpbmc6IGlucHV0IG11c3QgYmUgb2YgdHlwZSAnc3RyaW5nJywgJ1VpbnQ4QXJyYXknIG9yICdCdWZmZXInXCIpfSx0LmVuY29kZUNvbXByZXNzZWRCeXRlcz1mdW5jdGlvbih0LG4pe3N3aXRjaChuKXtjYXNlXCJCeXRlQXJyYXlcIjpyZXR1cm4gdDtjYXNlXCJCdWZmZXJcIjpyZXR1cm4gZS5CdWZmZXJUb29scy51aW50OEFycmF5VG9CdWZmZXIodCk7Y2FzZVwiQmFzZTY0XCI6cmV0dXJuIGUuZW5jb2RlQmFzZTY0KHQpO2Nhc2VcIkJpbmFyeVN0cmluZ1wiOnJldHVybiBlLmVuY29kZUJpbmFyeVN0cmluZyh0KTtjYXNlXCJTdG9yYWdlQmluYXJ5U3RyaW5nXCI6cmV0dXJuIGUuZW5jb2RlU3RvcmFnZUJpbmFyeVN0cmluZyh0KTtkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoXCJlbmNvZGVDb21wcmVzc2VkQnl0ZXM6IGludmFsaWQgb3V0cHV0IGVuY29kaW5nIHJlcXVlc3RlZFwiKX19LHQuZGVjb2RlQ29tcHJlc3NlZEJ5dGVzPWZ1bmN0aW9uKHQsbil7aWYobnVsbD09bil0aHJvdyBuZXcgVHlwZUVycm9yKFwiZGVjb2RlQ29tcHJlc3NlZERhdGE6IElucHV0IGlzIG51bGwgb3IgdW5kZWZpbmVkXCIpO3N3aXRjaChuKXtjYXNlXCJCeXRlQXJyYXlcIjpjYXNlXCJCdWZmZXJcIjp2YXIgcj1lLkJ1ZmZlclRvb2xzLmNvbnZlcnRUb1VpbnQ4QXJyYXlJZk5lZWRlZCh0KTtpZighKHIgaW5zdGFuY2VvZiBVaW50OEFycmF5KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiZGVjb2RlQ29tcHJlc3NlZERhdGE6ICdCeXRlQXJyYXknIG9yICdCdWZmZXInIGlucHV0IHR5cGUgd2FzIHNwZWNpZmllZCBidXQgaW5wdXQgaXMgbm90IGEgVWludDhBcnJheSBvciBCdWZmZXJcIik7cmV0dXJuIHI7Y2FzZVwiQmFzZTY0XCI6aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcImRlY29kZUNvbXByZXNzZWREYXRhOiAnQmFzZTY0JyBpbnB1dCB0eXBlIHdhcyBzcGVjaWZpZWQgYnV0IGlucHV0IGlzIG5vdCBhIHN0cmluZ1wiKTtyZXR1cm4gZS5kZWNvZGVCYXNlNjQodCk7Y2FzZVwiQmluYXJ5U3RyaW5nXCI6aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcImRlY29kZUNvbXByZXNzZWREYXRhOiAnQmluYXJ5U3RyaW5nJyBpbnB1dCB0eXBlIHdhcyBzcGVjaWZpZWQgYnV0IGlucHV0IGlzIG5vdCBhIHN0cmluZ1wiKTtyZXR1cm4gZS5kZWNvZGVCaW5hcnlTdHJpbmcodCk7Y2FzZVwiU3RvcmFnZUJpbmFyeVN0cmluZ1wiOmlmKFwic3RyaW5nXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJkZWNvZGVDb21wcmVzc2VkRGF0YTogJ1N0b3JhZ2VCaW5hcnlTdHJpbmcnIGlucHV0IHR5cGUgd2FzIHNwZWNpZmllZCBidXQgaW5wdXQgaXMgbm90IGEgc3RyaW5nXCIpO3JldHVybiBlLmRlY29kZVN0b3JhZ2VCaW5hcnlTdHJpbmcodCk7ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKFwiZGVjb2RlQ29tcHJlc3NlZERhdGE6IGludmFsaWQgaW5wdXQgZW5jb2RpbmcgcmVxdWVzdGVkOiAnXCIuY29uY2F0KG4sXCInXCIpKX19LHQuZW5jb2RlRGVjb21wcmVzc2VkQnl0ZXM9ZnVuY3Rpb24odCxuKXtzd2l0Y2gobil7Y2FzZVwiU3RyaW5nXCI6cmV0dXJuIGUuZGVjb2RlVVRGOCh0KTtjYXNlXCJCeXRlQXJyYXlcIjpyZXR1cm4gdDtjYXNlXCJCdWZmZXJcIjppZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBCdWZmZXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcImVuY29kZURlY29tcHJlc3NlZEJ5dGVzOiBhICdCdWZmZXInIHR5cGUgd2FzIHNwZWNpZmllZCBidXQgaXMgbm90IHN1cHBvcnRlZCBhdCB0aGUgY3VycmVudCBlbnZpcm5tZW50XCIpO3JldHVybiBlLkJ1ZmZlclRvb2xzLnVpbnQ4QXJyYXlUb0J1ZmZlcih0KTtkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoXCJlbmNvZGVEZWNvbXByZXNzZWRCeXRlczogaW52YWxpZCBvdXRwdXQgZW5jb2RpbmcgcmVxdWVzdGVkXCIpfX19KGUuQ29tcHJlc3Npb25Db21tb258fChlLkNvbXByZXNzaW9uQ29tbW9uPXt9KSl9KG98fChvPXt9KSksZnVuY3Rpb24oZSl7dmFyIHQ7IWZ1bmN0aW9uKHQpe3ZhciBuLHI9W107dC5lbnF1ZXVlSW1tZWRpYXRlPWZ1bmN0aW9uKGUpe3IucHVzaChlKSwxPT09ci5sZW5ndGgmJm4oKX0sdC5pbml0aWFsaXplU2NoZWR1bGVyPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxuPXI7dDxuLmxlbmd0aDt0Kyspe3ZhciBvPW5bdF07dHJ5e28uY2FsbCh2b2lkIDApfWNhdGNoKHQpe2UucHJpbnRFeGNlcHRpb25BbmRTdGFja1RyYWNlVG9Db25zb2xlKHQsXCJlbnF1ZXVlSW1tZWRpYXRlIGV4Y2VwdGlvblwiKX19ci5sZW5ndGg9MH07aWYoZS5ydW5uaW5nSW5Ob2RlSlMoKSluPWZ1bmN0aW9uKCl7cmV0dXJuIHNldEltbWVkaWF0ZSgoZnVuY3Rpb24oKXtyZXR1cm4gdCgpfSkpfTtlbHNlIGlmKFwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB3aW5kb3cucG9zdE1lc3NhZ2Upe3ZhciBvLGk9XCJlbnF1ZXVlSW1tZWRpYXRlLVwiK01hdGgucmFuZG9tKCkudG9TdHJpbmcoKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwoZnVuY3Rpb24oZSl7ZS5kYXRhPT09aSYmdCgpfSkpLG89ZS5ydW5uaW5nSW5OdWxsT3JpZ2luKCk/XCIqXCI6d2luZG93LmxvY2F0aW9uLmhyZWYsbj1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cucG9zdE1lc3NhZ2UoaSxvKX19ZWxzZSBpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBNZXNzYWdlQ2hhbm5lbCYmXCJmdW5jdGlvblwiPT10eXBlb2YgTWVzc2FnZVBvcnQpe3ZhciBhPW5ldyBNZXNzYWdlQ2hhbm5lbDthLnBvcnQxLm9ubWVzc2FnZT1mdW5jdGlvbigpe3JldHVybiB0KCl9LG49ZnVuY3Rpb24oKXtyZXR1cm4gYS5wb3J0Mi5wb3N0TWVzc2FnZSgwKX19ZWxzZSBuPWZ1bmN0aW9uKCl7cmV0dXJuIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cmV0dXJuIHQoKX0pLDApfX0sdC5pbml0aWFsaXplU2NoZWR1bGVyKCl9KHQ9ZS5FdmVudExvb3B8fChlLkV2ZW50TG9vcD17fSkpLGUuZW5xdWV1ZUltbWVkaWF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gdC5lbnF1ZXVlSW1tZWRpYXRlKGUpfX0ob3x8KG89e30pKSxmdW5jdGlvbihlKXshZnVuY3Rpb24oZSl7ZS5vdmVycmlkZT1mdW5jdGlvbih0LG4pe3JldHVybiBlLmV4dGVuZCh0LG4pfSxlLmV4dGVuZD1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIm9iaiBpcyBudWxsIG9yIHVuZGVmaW5lZFwiKTtpZihcIm9iamVjdFwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwib2JqIGlzIG5vdCBhbiBvYmplY3RcIik7aWYobnVsbD09dCYmKHQ9e30pLFwib2JqZWN0XCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJuZXdQcm9wZXJ0aWVzIGlzIG5vdCBhbiBvYmplY3RcIik7aWYobnVsbCE9dClmb3IodmFyIG4gaW4gdCllW25dPXRbbl07cmV0dXJuIGV9fShlLk9iamVjdFRvb2xzfHwoZS5PYmplY3RUb29scz17fSkpfShvfHwobz17fSkpLGZ1bmN0aW9uKGUpe2UuZ2V0UmFuZG9tSW50ZWdlckluUmFuZ2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZStNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKHQtZSkpfSxlLmdldFJhbmRvbVVURjE2U3RyaW5nT2ZMZW5ndGg9ZnVuY3Rpb24odCl7Zm9yKHZhciBuPVwiXCIscj0wO3I8dDtyKyspe3ZhciBvPXZvaWQgMDtkb3tvPWUuZ2V0UmFuZG9tSW50ZWdlckluUmFuZ2UoMCwxMTE0MTEyKX13aGlsZShvPj01NTI5NiYmbzw9NTczNDMpO24rPWUuRW5jb2RpbmcuQ29kZVBvaW50LmRlY29kZVRvU3RyaW5nKG8pfXJldHVybiBufX0ob3x8KG89e30pKSxmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dm9pZCAwPT09ZSYmKGU9MTAyNCksdGhpcy5vdXRwdXRCdWZmZXJDYXBhY2l0eT1lLHRoaXMub3V0cHV0UG9zaXRpb249MCx0aGlzLm91dHB1dFN0cmluZz1cIlwiLHRoaXMub3V0cHV0QnVmZmVyPW5ldyBVaW50MTZBcnJheSh0aGlzLm91dHB1dEJ1ZmZlckNhcGFjaXR5KX1yZXR1cm4gZS5wcm90b3R5cGUuYXBwZW5kQ2hhckNvZGU9ZnVuY3Rpb24oZSl7dGhpcy5vdXRwdXRCdWZmZXJbdGhpcy5vdXRwdXRQb3NpdGlvbisrXT1lLHRoaXMub3V0cHV0UG9zaXRpb249PT10aGlzLm91dHB1dEJ1ZmZlckNhcGFjaXR5JiZ0aGlzLmZsdXNoQnVmZmVyVG9PdXRwdXRTdHJpbmcoKX0sZS5wcm90b3R5cGUuYXBwZW5kQ2hhckNvZGVzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49ZS5sZW5ndGg7dDxuO3QrKyl0aGlzLmFwcGVuZENoYXJDb2RlKGVbdF0pfSxlLnByb3RvdHlwZS5hcHBlbmRTdHJpbmc9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsbj1lLmxlbmd0aDt0PG47dCsrKXRoaXMuYXBwZW5kQ2hhckNvZGUoZS5jaGFyQ29kZUF0KHQpKX0sZS5wcm90b3R5cGUuYXBwZW5kQ29kZVBvaW50PWZ1bmN0aW9uKGUpe2lmKGU8PTY1NTM1KXRoaXMuYXBwZW5kQ2hhckNvZGUoZSk7ZWxzZXtpZighKGU8PTExMTQxMTEpKXRocm93IG5ldyBFcnJvcihcImFwcGVuZENvZGVQb2ludDogQSBjb2RlIHBvaW50IG9mIFwiLmNvbmNhdChlLFwiIGNhbm5vdCBiZSBlbmNvZGVkIGluIFVURi0xNlwiKSk7dGhpcy5hcHBlbmRDaGFyQ29kZSg1NTI5NisoZS02NTUzNj4+PjEwKSksdGhpcy5hcHBlbmRDaGFyQ29kZSg1NjMyMCsoZS02NTUzNiYxMDIzKSl9fSxlLnByb3RvdHlwZS5nZXRPdXRwdXRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mbHVzaEJ1ZmZlclRvT3V0cHV0U3RyaW5nKCksdGhpcy5vdXRwdXRTdHJpbmd9LGUucHJvdG90eXBlLmZsdXNoQnVmZmVyVG9PdXRwdXRTdHJpbmc9ZnVuY3Rpb24oKXt0aGlzLm91dHB1dFBvc2l0aW9uPT09dGhpcy5vdXRwdXRCdWZmZXJDYXBhY2l0eT90aGlzLm91dHB1dFN0cmluZys9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHRoaXMub3V0cHV0QnVmZmVyKTp0aGlzLm91dHB1dFN0cmluZys9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHRoaXMub3V0cHV0QnVmZmVyLnN1YmFycmF5KDAsdGhpcy5vdXRwdXRQb3NpdGlvbikpLHRoaXMub3V0cHV0UG9zaXRpb249MH0sZX0oKTtlLlN0cmluZ0J1aWxkZXI9dH0ob3x8KG89e30pKSxmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLnJlc3RhcnQoKX1yZXR1cm4gdC5wcm90b3R5cGUucmVzdGFydD1mdW5jdGlvbigpe3RoaXMuc3RhcnRUaW1lPXQuZ2V0VGltZXN0YW1wKCl9LHQucHJvdG90eXBlLmdldEVsYXBzZWRUaW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZ2V0VGltZXN0YW1wKCktdGhpcy5zdGFydFRpbWV9LHQucHJvdG90eXBlLmdldEVsYXBzZWRUaW1lQW5kUmVzdGFydD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0RWxhcHNlZFRpbWUoKTtyZXR1cm4gdGhpcy5yZXN0YXJ0KCksZX0sdC5wcm90b3R5cGUubG9nQW5kUmVzdGFydD1mdW5jdGlvbih0LG4pe3ZvaWQgMD09PW4mJihuPSEwKTt2YXIgcj10aGlzLmdldEVsYXBzZWRUaW1lKCksbz1cIlwiLmNvbmNhdCh0LFwiOiBcIikuY29uY2F0KHIudG9GaXhlZCgzKSxcIm1zXCIpO3JldHVybiBlLmxvZyhvLG4pLHRoaXMucmVzdGFydCgpLHJ9LHQuZ2V0VGltZXN0YW1wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGltZXN0YW1wRnVuY3x8dGhpcy5jcmVhdGVHbG9iYWxUaW1lc3RhbXBGdW5jdGlvbigpLHRoaXMudGltZXN0YW1wRnVuYygpfSx0LmdldE1pY3Jvc2Vjb25kVGltZXN0YW1wPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZmxvb3IoMWUzKnQuZ2V0VGltZXN0YW1wKCkpfSx0LmNyZWF0ZUdsb2JhbFRpbWVzdGFtcEZ1bmN0aW9uPWZ1bmN0aW9uKCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIHByb2Nlc3MmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHByb2Nlc3MuaHJ0aW1lKXt2YXIgZT0wO3RoaXMudGltZXN0YW1wRnVuYz1mdW5jdGlvbigpe3ZhciB0PXByb2Nlc3MuaHJ0aW1lKCksbj0xZTMqdFswXSt0WzFdLzFlNjtyZXR1cm4gZStufSxlPURhdGUubm93KCktdGhpcy50aW1lc3RhbXBGdW5jKCl9ZWxzZSBpZihcIm9iamVjdFwiPT10eXBlb2YgY2hyb21lJiZjaHJvbWUuSW50ZXJ2YWwpe3ZhciB0PURhdGUubm93KCksbj1uZXcgY2hyb21lLkludGVydmFsO24uc3RhcnQoKSx0aGlzLnRpbWVzdGFtcEZ1bmM9ZnVuY3Rpb24oKXtyZXR1cm4gdCtuLm1pY3Jvc2Vjb25kcygpLzFlM319ZWxzZSBpZihcIm9iamVjdFwiPT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdyl7dmFyIHI9RGF0ZS5ub3coKS1wZXJmb3JtYW5jZS5ub3coKTt0aGlzLnRpbWVzdGFtcEZ1bmM9ZnVuY3Rpb24oKXtyZXR1cm4gcitwZXJmb3JtYW5jZS5ub3coKX19ZWxzZSBEYXRlLm5vdz90aGlzLnRpbWVzdGFtcEZ1bmM9ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5ub3coKX06dGhpcy50aW1lc3RhbXBGdW5jPWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9fSx0fSgpO2UuVGltZXI9dH0ob3x8KG89e30pKSxmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dm9pZCAwPT09dCYmKHQ9ITApLHRoaXMuTWluaW11bVNlcXVlbmNlTGVuZ3RoPTQsdGhpcy5NYXhpbXVtU2VxdWVuY2VMZW5ndGg9MzEsdGhpcy5NYXhpbXVtTWF0Y2hEaXN0YW5jZT0zMjc2Nyx0aGlzLlByZWZpeEhhc2hUYWJsZVNpemU9NjU1MzcsdGhpcy5pbnB1dEJ1ZmZlclN0cmVhbU9mZnNldD0xLHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFVpbnQzMkFycmF5P3RoaXMucHJlZml4SGFzaFRhYmxlPW5ldyBlLkNvbXByZXNzb3JDdXN0b21IYXNoVGFibGUodGhpcy5QcmVmaXhIYXNoVGFibGVTaXplKTp0aGlzLnByZWZpeEhhc2hUYWJsZT1uZXcgZS5Db21wcmVzc29yU2ltcGxlSGFzaFRhYmxlKHRoaXMuUHJlZml4SGFzaFRhYmxlU2l6ZSl9cmV0dXJuIHQucHJvdG90eXBlLmNvbXByZXNzQmxvY2s9ZnVuY3Rpb24odCl7aWYobnVsbD09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiY29tcHJlc3NCbG9jazogdW5kZWZpbmVkIG9yIG51bGwgaW5wdXQgcmVjZWl2ZWRcIik7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQmJih0PWUuZW5jb2RlVVRGOCh0KSksdD1lLkJ1ZmZlclRvb2xzLmNvbnZlcnRUb1VpbnQ4QXJyYXlJZk5lZWRlZCh0KSx0aGlzLmNvbXByZXNzVXRmOEJsb2NrKHQpfSx0LnByb3RvdHlwZS5jb21wcmVzc1V0ZjhCbG9jaz1mdW5jdGlvbihlKXtpZighZXx8MD09ZS5sZW5ndGgpcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO3ZhciB0PXRoaXMuY3JvcEFuZEFkZE5ld0J5dGVzVG9JbnB1dEJ1ZmZlcihlKSxuPXRoaXMuaW5wdXRCdWZmZXIscj10aGlzLmlucHV0QnVmZmVyLmxlbmd0aDt0aGlzLm91dHB1dEJ1ZmZlcj1uZXcgVWludDhBcnJheShlLmxlbmd0aCksdGhpcy5vdXRwdXRCdWZmZXJQb3NpdGlvbj0wO2Zvcih2YXIgbz0wLGk9dDtpPHI7aSsrKXt2YXIgYT1uW2ldLGw9aTxvO2lmKGk+ci10aGlzLk1pbmltdW1TZXF1ZW5jZUxlbmd0aClsfHx0aGlzLm91dHB1dFJhd0J5dGUoYSk7ZWxzZXt2YXIgcz10aGlzLmdldEJ1Y2tldEluZGV4Rm9yUHJlZml4KGkpO2lmKCFsKXt2YXIgYz10aGlzLmZpbmRMb25nZXN0TWF0Y2goaSxzKTtudWxsIT1jJiYodGhpcy5vdXRwdXRQb2ludGVyQnl0ZXMoYy5sZW5ndGgsYy5kaXN0YW5jZSksbz1pK2MubGVuZ3RoLGw9ITApfWx8fHRoaXMub3V0cHV0UmF3Qnl0ZShhKTt2YXIgdT10aGlzLmlucHV0QnVmZmVyU3RyZWFtT2Zmc2V0K2k7dGhpcy5wcmVmaXhIYXNoVGFibGUuYWRkVmFsdWVUb0J1Y2tldChzLHUpfX1yZXR1cm4gdGhpcy5vdXRwdXRCdWZmZXIuc3ViYXJyYXkoMCx0aGlzLm91dHB1dEJ1ZmZlclBvc2l0aW9uKX0sdC5wcm90b3R5cGUuZmluZExvbmdlc3RNYXRjaD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMucHJlZml4SGFzaFRhYmxlLmdldEFycmF5U2VnbWVudEZvckJ1Y2tldEluZGV4KHQsdGhpcy5yZXVzYWJsZUFycmF5U2VnbWVudE9iamVjdCk7aWYobnVsbD09bilyZXR1cm4gbnVsbDtmb3IodmFyIHIsbz10aGlzLmlucHV0QnVmZmVyLGk9MCxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBsLHM9bi5nZXRJblJldmVyc2VkT3JkZXIoYSktdGhpcy5pbnB1dEJ1ZmZlclN0cmVhbU9mZnNldCxjPWUtcztpZihsPXZvaWQgMD09PXI/dGhpcy5NaW5pbXVtU2VxdWVuY2VMZW5ndGgtMTpyPDEyOCYmYz49MTI4P2krKGk+Pj4xKTppLGM+dGhpcy5NYXhpbXVtTWF0Y2hEaXN0YW5jZXx8bD49dGhpcy5NYXhpbXVtU2VxdWVuY2VMZW5ndGh8fGUrbD49by5sZW5ndGgpYnJlYWs7aWYob1tzK2xdPT09b1tlK2xdKWZvcih2YXIgdT0wOzt1Kyspe2lmKGUrdT09PW8ubGVuZ3RofHxvW3MrdV0hPT1vW2UrdV0pe3U+bCYmKHI9YyxpPXUpO2JyZWFrfWlmKHU9PT10aGlzLk1heGltdW1TZXF1ZW5jZUxlbmd0aClyZXR1cm57ZGlzdGFuY2U6YyxsZW5ndGg6dGhpcy5NYXhpbXVtU2VxdWVuY2VMZW5ndGh9fX1yZXR1cm4gdm9pZCAwIT09cj97ZGlzdGFuY2U6cixsZW5ndGg6aX06bnVsbH0sdC5wcm90b3R5cGUuZ2V0QnVja2V0SW5kZXhGb3JQcmVmaXg9ZnVuY3Rpb24oZSl7cmV0dXJuKDc4ODA1OTkqdGhpcy5pbnB1dEJ1ZmZlcltlXSszOTYwMSp0aGlzLmlucHV0QnVmZmVyW2UrMV0rMTk5KnRoaXMuaW5wdXRCdWZmZXJbZSsyXSt0aGlzLmlucHV0QnVmZmVyW2UrM10pJXRoaXMuUHJlZml4SGFzaFRhYmxlU2l6ZX0sdC5wcm90b3R5cGUub3V0cHV0UG9pbnRlckJ5dGVzPWZ1bmN0aW9uKGUsdCl7dDwxMjg/KHRoaXMub3V0cHV0UmF3Qnl0ZSgxOTJ8ZSksdGhpcy5vdXRwdXRSYXdCeXRlKHQpKToodGhpcy5vdXRwdXRSYXdCeXRlKDIyNHxlKSx0aGlzLm91dHB1dFJhd0J5dGUodD4+PjgpLHRoaXMub3V0cHV0UmF3Qnl0ZSgyNTUmdCkpfSx0LnByb3RvdHlwZS5vdXRwdXRSYXdCeXRlPWZ1bmN0aW9uKGUpe3RoaXMub3V0cHV0QnVmZmVyW3RoaXMub3V0cHV0QnVmZmVyUG9zaXRpb24rK109ZX0sdC5wcm90b3R5cGUuY3JvcEFuZEFkZE5ld0J5dGVzVG9JbnB1dEJ1ZmZlcj1mdW5jdGlvbih0KXtpZih2b2lkIDA9PT10aGlzLmlucHV0QnVmZmVyKXJldHVybiB0aGlzLmlucHV0QnVmZmVyPXQsMDt2YXIgbj1NYXRoLm1pbih0aGlzLmlucHV0QnVmZmVyLmxlbmd0aCx0aGlzLk1heGltdW1NYXRjaERpc3RhbmNlKSxyPXRoaXMuaW5wdXRCdWZmZXIubGVuZ3RoLW47cmV0dXJuIHRoaXMuaW5wdXRCdWZmZXI9ZS5Db21wcmVzc2lvbkNvbW1vbi5nZXRDcm9wcGVkQW5kQXBwZW5kZWRCeXRlQXJyYXkodGhpcy5pbnB1dEJ1ZmZlcixyLG4sdCksdGhpcy5pbnB1dEJ1ZmZlclN0cmVhbU9mZnNldCs9cixufSx0fSgpO2UuQ29tcHJlc3Nvcj10fShvfHwobz17fSkpLGZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXt0aGlzLm1pbmltdW1CdWNrZXRDYXBhY2l0eT00LHRoaXMubWF4aW11bUJ1Y2tldENhcGFjaXR5PTY0LHRoaXMuYnVja2V0TG9jYXRvcnM9bmV3IFVpbnQzMkFycmF5KDIqZSksdGhpcy5zdG9yYWdlPW5ldyBVaW50MzJBcnJheSgyKmUpLHRoaXMuc3RvcmFnZUluZGV4PTF9cmV0dXJuIHQucHJvdG90eXBlLmFkZFZhbHVlVG9CdWNrZXQ9ZnVuY3Rpb24odCxuKXt0PDw9MSx0aGlzLnN0b3JhZ2VJbmRleD49dGhpcy5zdG9yYWdlLmxlbmd0aD4+PjEmJnRoaXMuY29tcGFjdCgpO3ZhciByLG89dGhpcy5idWNrZXRMb2NhdG9yc1t0XTtpZigwPT09bylvPXRoaXMuc3RvcmFnZUluZGV4LHI9MSx0aGlzLnN0b3JhZ2VbdGhpcy5zdG9yYWdlSW5kZXhdPW4sdGhpcy5zdG9yYWdlSW5kZXgrPXRoaXMubWluaW11bUJ1Y2tldENhcGFjaXR5O2Vsc2V7KHI9dGhpcy5idWNrZXRMb2NhdG9yc1t0KzFdKT09PXRoaXMubWF4aW11bUJ1Y2tldENhcGFjaXR5LTEmJihyPXRoaXMudHJ1bmNhdGVCdWNrZXRUb05ld2VyRWxlbWVudHMobyxyLHRoaXMubWF4aW11bUJ1Y2tldENhcGFjaXR5LzIpKTt2YXIgaT1vK3I7MD09PXRoaXMuc3RvcmFnZVtpXT8odGhpcy5zdG9yYWdlW2ldPW4saT09PXRoaXMuc3RvcmFnZUluZGV4JiYodGhpcy5zdG9yYWdlSW5kZXgrPXIpKTooZS5BcnJheVRvb2xzLmNvcHlFbGVtZW50cyh0aGlzLnN0b3JhZ2Usbyx0aGlzLnN0b3JhZ2UsdGhpcy5zdG9yYWdlSW5kZXgsciksbz10aGlzLnN0b3JhZ2VJbmRleCx0aGlzLnN0b3JhZ2VJbmRleCs9cix0aGlzLnN0b3JhZ2VbdGhpcy5zdG9yYWdlSW5kZXgrK109bix0aGlzLnN0b3JhZ2VJbmRleCs9cikscisrfXRoaXMuYnVja2V0TG9jYXRvcnNbdF09byx0aGlzLmJ1Y2tldExvY2F0b3JzW3QrMV09cn0sdC5wcm90b3R5cGUudHJ1bmNhdGVCdWNrZXRUb05ld2VyRWxlbWVudHM9ZnVuY3Rpb24odCxuLHIpe3ZhciBvPXQrbi1yO3JldHVybiBlLkFycmF5VG9vbHMuY29weUVsZW1lbnRzKHRoaXMuc3RvcmFnZSxvLHRoaXMuc3RvcmFnZSx0LHIpLGUuQXJyYXlUb29scy56ZXJvRWxlbWVudHModGhpcy5zdG9yYWdlLHQrcixuLXIpLHJ9LHQucHJvdG90eXBlLmNvbXBhY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmJ1Y2tldExvY2F0b3JzLG49dGhpcy5zdG9yYWdlO3RoaXMuYnVja2V0TG9jYXRvcnM9bmV3IFVpbnQzMkFycmF5KHRoaXMuYnVja2V0TG9jYXRvcnMubGVuZ3RoKSx0aGlzLnN0b3JhZ2VJbmRleD0xO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cis9Mil7dmFyIG89dFtyKzFdOzAhPT1vJiYodGhpcy5idWNrZXRMb2NhdG9yc1tyXT10aGlzLnN0b3JhZ2VJbmRleCx0aGlzLmJ1Y2tldExvY2F0b3JzW3IrMV09byx0aGlzLnN0b3JhZ2VJbmRleCs9TWF0aC5tYXgoTWF0aC5taW4oMipvLHRoaXMubWF4aW11bUJ1Y2tldENhcGFjaXR5KSx0aGlzLm1pbmltdW1CdWNrZXRDYXBhY2l0eSkpfWZvcih0aGlzLnN0b3JhZ2U9bmV3IFVpbnQzMkFycmF5KDgqdGhpcy5zdG9yYWdlSW5kZXgpLHI9MDtyPHQubGVuZ3RoO3IrPTIpe3ZhciBpPXRbcl07aWYoMCE9PWkpe3ZhciBhPXRoaXMuYnVja2V0TG9jYXRvcnNbcl0sbD10aGlzLmJ1Y2tldExvY2F0b3JzW3IrMV07ZS5BcnJheVRvb2xzLmNvcHlFbGVtZW50cyhuLGksdGhpcy5zdG9yYWdlLGEsbCl9fX0sdC5wcm90b3R5cGUuZ2V0QXJyYXlTZWdtZW50Rm9yQnVja2V0SW5kZXg9ZnVuY3Rpb24odCxuKXt0PDw9MTt2YXIgcj10aGlzLmJ1Y2tldExvY2F0b3JzW3RdO3JldHVybiAwPT09cj9udWxsOih2b2lkIDA9PT1uJiYobj1uZXcgZS5BcnJheVNlZ21lbnQodGhpcy5zdG9yYWdlLHIsdGhpcy5idWNrZXRMb2NhdG9yc1t0KzFdKSksbil9LHQucHJvdG90eXBlLmdldFVzZWRCdWNrZXRDb3VudD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmZsb29yKGUuQXJyYXlUb29scy5jb3VudE5vbnplcm9WYWx1ZXNJbkFycmF5KHRoaXMuYnVja2V0TG9jYXRvcnMpLzIpfSx0LnByb3RvdHlwZS5nZXRUb3RhbEVsZW1lbnRDb3VudD1mdW5jdGlvbigpe2Zvcih2YXIgZT0wLHQ9MDt0PHRoaXMuYnVja2V0TG9jYXRvcnMubGVuZ3RoO3QrPTIpZSs9dGhpcy5idWNrZXRMb2NhdG9yc1t0KzFdO3JldHVybiBlfSx0fSgpO2UuQ29tcHJlc3NvckN1c3RvbUhhc2hUYWJsZT10fShvfHwobz17fSkpLGZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXt0aGlzLm1heGltdW1CdWNrZXRDYXBhY2l0eT02NCx0aGlzLmJ1Y2tldHM9bmV3IEFycmF5KGUpfXJldHVybiB0LnByb3RvdHlwZS5hZGRWYWx1ZVRvQnVja2V0PWZ1bmN0aW9uKHQsbil7dmFyIHI9dGhpcy5idWNrZXRzW3RdO3ZvaWQgMD09PXI/dGhpcy5idWNrZXRzW3RdPVtuXTooci5sZW5ndGg9PT10aGlzLm1heGltdW1CdWNrZXRDYXBhY2l0eS0xJiZlLkFycmF5VG9vbHMudHJ1bmNhdGVTdGFydGluZ0VsZW1lbnRzKHIsdGhpcy5tYXhpbXVtQnVja2V0Q2FwYWNpdHkvMiksci5wdXNoKG4pKX0sdC5wcm90b3R5cGUuZ2V0QXJyYXlTZWdtZW50Rm9yQnVja2V0SW5kZXg9ZnVuY3Rpb24odCxuKXt2YXIgcj10aGlzLmJ1Y2tldHNbdF07cmV0dXJuIHZvaWQgMD09PXI/bnVsbDoodm9pZCAwPT09biYmKG49bmV3IGUuQXJyYXlTZWdtZW50KHIsMCxyLmxlbmd0aCkpLG4pfSx0LnByb3RvdHlwZS5nZXRVc2VkQnVja2V0Q291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5BcnJheVRvb2xzLmNvdW50Tm9uemVyb1ZhbHVlc0luQXJyYXkodGhpcy5idWNrZXRzKX0sdC5wcm90b3R5cGUuZ2V0VG90YWxFbGVtZW50Q291bnQ9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCx0PTA7dDx0aGlzLmJ1Y2tldHMubGVuZ3RoO3QrKyl2b2lkIDAhPT10aGlzLmJ1Y2tldHNbdF0mJihlKz10aGlzLmJ1Y2tldHNbdF0ubGVuZ3RoKTtyZXR1cm4gZX0sdH0oKTtlLkNvbXByZXNzb3JTaW1wbGVIYXNoVGFibGU9dH0ob3x8KG89e30pKSxmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLk1heGltdW1NYXRjaERpc3RhbmNlPTMyNzY3LHRoaXMub3V0cHV0UG9zaXRpb249MH1yZXR1cm4gdC5wcm90b3R5cGUuZGVjb21wcmVzc0Jsb2NrVG9TdHJpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9ZS5CdWZmZXJUb29scy5jb252ZXJ0VG9VaW50OEFycmF5SWZOZWVkZWQodCksZS5kZWNvZGVVVEY4KHRoaXMuZGVjb21wcmVzc0Jsb2NrKHQpKX0sdC5wcm90b3R5cGUuZGVjb21wcmVzc0Jsb2NrPWZ1bmN0aW9uKHQpe3RoaXMuaW5wdXRCdWZmZXJSZW1haW5kZXImJih0PWUuQXJyYXlUb29scy5jb25jYXRVaW50OEFycmF5cyhbdGhpcy5pbnB1dEJ1ZmZlclJlbWFpbmRlcix0XSksdGhpcy5pbnB1dEJ1ZmZlclJlbWFpbmRlcj12b2lkIDApO2Zvcih2YXIgbj10aGlzLmNyb3BPdXRwdXRCdWZmZXJUb1dpbmRvd0FuZEluaXRpYWxpemUoTWF0aC5tYXgoNCp0Lmxlbmd0aCwxMDI0KSkscj0wLG89dC5sZW5ndGg7cjxvO3IrKyl7dmFyIGk9dFtyXTtpZihpPj4+Nj09Myl7dmFyIGE9aT4+PjU7aWYocj09by0xfHxyPT1vLTImJjc9PWEpe3RoaXMuaW5wdXRCdWZmZXJSZW1haW5kZXI9dC5zdWJhcnJheShyKTticmVha31pZih0W3IrMV0+Pj43PT0xKXRoaXMub3V0cHV0Qnl0ZShpKTtlbHNle3ZhciBsPTMxJmkscz12b2lkIDA7Nj09YT8ocz10W3IrMV0scis9MSk6KHM9dFtyKzFdPDw4fHRbcisyXSxyKz0yKTtmb3IodmFyIGM9dGhpcy5vdXRwdXRQb3NpdGlvbi1zLHU9MDt1PGw7dSsrKXRoaXMub3V0cHV0Qnl0ZSh0aGlzLm91dHB1dEJ1ZmZlcltjK3VdKX19ZWxzZSB0aGlzLm91dHB1dEJ5dGUoaSl9cmV0dXJuIHRoaXMucm9sbEJhY2tJZk91dHB1dEJ1ZmZlckVuZHNXaXRoQVRydW5jYXRlZE11bHRpYnl0ZVNlcXVlbmNlKCksZS5Db21wcmVzc2lvbkNvbW1vbi5nZXRDcm9wcGVkQnVmZmVyKHRoaXMub3V0cHV0QnVmZmVyLG4sdGhpcy5vdXRwdXRQb3NpdGlvbi1uKX0sdC5wcm90b3R5cGUub3V0cHV0Qnl0ZT1mdW5jdGlvbih0KXt0aGlzLm91dHB1dFBvc2l0aW9uPT09dGhpcy5vdXRwdXRCdWZmZXIubGVuZ3RoJiYodGhpcy5vdXRwdXRCdWZmZXI9ZS5BcnJheVRvb2xzLmRvdWJsZUJ5dGVBcnJheUNhcGFjaXR5KHRoaXMub3V0cHV0QnVmZmVyKSksdGhpcy5vdXRwdXRCdWZmZXJbdGhpcy5vdXRwdXRQb3NpdGlvbisrXT10fSx0LnByb3RvdHlwZS5jcm9wT3V0cHV0QnVmZmVyVG9XaW5kb3dBbmRJbml0aWFsaXplPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLm91dHB1dEJ1ZmZlcilyZXR1cm4gdGhpcy5vdXRwdXRCdWZmZXI9bmV3IFVpbnQ4QXJyYXkodCksMDt2YXIgbj1NYXRoLm1pbih0aGlzLm91dHB1dFBvc2l0aW9uLHRoaXMuTWF4aW11bU1hdGNoRGlzdGFuY2UpO2lmKHRoaXMub3V0cHV0QnVmZmVyPWUuQ29tcHJlc3Npb25Db21tb24uZ2V0Q3JvcHBlZEJ1ZmZlcih0aGlzLm91dHB1dEJ1ZmZlcix0aGlzLm91dHB1dFBvc2l0aW9uLW4sbix0KSx0aGlzLm91dHB1dFBvc2l0aW9uPW4sdGhpcy5vdXRwdXRCdWZmZXJSZW1haW5kZXIpe2Zvcih2YXIgcj0wO3I8dGhpcy5vdXRwdXRCdWZmZXJSZW1haW5kZXIubGVuZ3RoO3IrKyl0aGlzLm91dHB1dEJ5dGUodGhpcy5vdXRwdXRCdWZmZXJSZW1haW5kZXJbcl0pO3RoaXMub3V0cHV0QnVmZmVyUmVtYWluZGVyPXZvaWQgMH1yZXR1cm4gbn0sdC5wcm90b3R5cGUucm9sbEJhY2tJZk91dHB1dEJ1ZmZlckVuZHNXaXRoQVRydW5jYXRlZE11bHRpYnl0ZVNlcXVlbmNlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTE7ZTw9NCYmdGhpcy5vdXRwdXRQb3NpdGlvbi1lPj0wO2UrKyl7dmFyIHQ9dGhpcy5vdXRwdXRCdWZmZXJbdGhpcy5vdXRwdXRQb3NpdGlvbi1lXTtpZihlPDQmJnQ+Pj4zPT0zMHx8ZTwzJiZ0Pj4+ND09MTR8fGU8MiYmdD4+PjU9PTYpcmV0dXJuIHRoaXMub3V0cHV0QnVmZmVyUmVtYWluZGVyPXRoaXMub3V0cHV0QnVmZmVyLnN1YmFycmF5KHRoaXMub3V0cHV0UG9zaXRpb24tZSx0aGlzLm91dHB1dFBvc2l0aW9uKSx2b2lkKHRoaXMub3V0cHV0UG9zaXRpb24tPWUpfX0sdH0oKTtlLkRlY29tcHJlc3Nvcj10fShvfHwobz17fSkpLGZ1bmN0aW9uKGUpeyFmdW5jdGlvbih0KXshZnVuY3Rpb24odCl7dmFyIG49bmV3IFVpbnQ4QXJyYXkoWzY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExLDExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDExOCwxMTksMTIwLDEyMSwxMjIsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNDMsNDddKSxyPW5ldyBVaW50OEFycmF5KFsyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsNjIsMjU1LDI1NSwyNTUsNjMsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsMjU1LDI1NSwyNTUsMCwyNTUsMjU1LDI1NSwwLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDI1NSwyNTUsMjU1LDI1NV0pO3QuZW5jb2RlPWZ1bmN0aW9uKG4pe3JldHVybiBuJiYwIT1uLmxlbmd0aD9lLnJ1bm5pbmdJbk5vZGVKUygpP2UuQnVmZmVyVG9vbHMudWludDhBcnJheVRvQnVmZmVyKG4pLnRvU3RyaW5nKFwiYmFzZTY0XCIpOnQuZW5jb2RlV2l0aEpTKG4pOlwiXCJ9LHQuZGVjb2RlPWZ1bmN0aW9uKG4pe3JldHVybiBuP2UucnVubmluZ0luTm9kZUpTKCk/ZS5CdWZmZXJUb29scy5idWZmZXJUb1VpbnQ4QXJyYXkoQnVmZmVyLmZyb20obixcImJhc2U2NFwiKSk6dC5kZWNvZGVXaXRoSlMobik6bmV3IFVpbnQ4QXJyYXkoMCl9LHQuZW5jb2RlV2l0aEpTPWZ1bmN0aW9uKHQscil7aWYodm9pZCAwPT09ciYmKHI9ITApLCF0fHwwPT10Lmxlbmd0aClyZXR1cm5cIlwiO2Zvcih2YXIgbyxpPW4sYT1uZXcgZS5TdHJpbmdCdWlsZGVyLGw9MCxzPXQubGVuZ3RoO2w8cztsKz0zKWw8PXMtMz8obz10W2xdPDwxNnx0W2wrMV08PDh8dFtsKzJdLGEuYXBwZW5kQ2hhckNvZGUoaVtvPj4+MTgmNjNdKSxhLmFwcGVuZENoYXJDb2RlKGlbbz4+PjEyJjYzXSksYS5hcHBlbmRDaGFyQ29kZShpW28+Pj42JjYzXSksYS5hcHBlbmRDaGFyQ29kZShpWzYzJm9dKSxvPTApOmw9PT1zLTI/KG89dFtsXTw8MTZ8dFtsKzFdPDw4LGEuYXBwZW5kQ2hhckNvZGUoaVtvPj4+MTgmNjNdKSxhLmFwcGVuZENoYXJDb2RlKGlbbz4+PjEyJjYzXSksYS5hcHBlbmRDaGFyQ29kZShpW28+Pj42JjYzXSksciYmYS5hcHBlbmRDaGFyQ29kZSg2MSkpOmw9PT1zLTEmJihvPXRbbF08PDE2LGEuYXBwZW5kQ2hhckNvZGUoaVtvPj4+MTgmNjNdKSxhLmFwcGVuZENoYXJDb2RlKGlbbz4+PjEyJjYzXSksciYmKGEuYXBwZW5kQ2hhckNvZGUoNjEpLGEuYXBwZW5kQ2hhckNvZGUoNjEpKSk7cmV0dXJuIGEuZ2V0T3V0cHV0U3RyaW5nKCl9LHQuZGVjb2RlV2l0aEpTPWZ1bmN0aW9uKGUsdCl7aWYoIWV8fDA9PWUubGVuZ3RoKXJldHVybiBuZXcgVWludDhBcnJheSgwKTt2YXIgbj1lLmxlbmd0aCU0O2lmKDE9PT1uKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgQmFzZTY0IHN0cmluZzogbGVuZ3RoICUgNCA9PSAxXCIpOzI9PT1uP2UrPVwiPT1cIjozPT09biYmKGUrPVwiPVwiKSx0fHwodD1uZXcgVWludDhBcnJheShlLmxlbmd0aCkpO2Zvcih2YXIgbz0wLGk9ZS5sZW5ndGgsYT0wO2E8aTthKz00KXt2YXIgbD1yW2UuY2hhckNvZGVBdChhKV08PDE4fHJbZS5jaGFyQ29kZUF0KGErMSldPDwxMnxyW2UuY2hhckNvZGVBdChhKzIpXTw8NnxyW2UuY2hhckNvZGVBdChhKzMpXTt0W28rK109bD4+PjE2JjI1NSx0W28rK109bD4+PjgmMjU1LHRbbysrXT0yNTUmbH1yZXR1cm4gNjE9PWUuY2hhckNvZGVBdChpLTEpJiZvLS0sNjE9PWUuY2hhckNvZGVBdChpLTIpJiZvLS0sdC5zdWJhcnJheSgwLG8pfX0odC5CYXNlNjR8fCh0LkJhc2U2ND17fSkpfShlLkVuY29kaW5nfHwoZS5FbmNvZGluZz17fSkpfShvfHwobz17fSkpLGZ1bmN0aW9uKGUpeyFmdW5jdGlvbih0KXshZnVuY3Rpb24odCl7dC5lbmNvZGU9ZnVuY3Rpb24odCl7aWYobnVsbD09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQmluYXJ5U3RyaW5nLmVuY29kZTogdW5kZWZpbmVkIG9yIG51bGwgaW5wdXQgcmVjZWl2ZWRcIik7aWYoMD09PXQubGVuZ3RoKXJldHVyblwiXCI7Zm9yKHZhciBuPXQubGVuZ3RoLHI9bmV3IGUuU3RyaW5nQnVpbGRlcixvPTAsaT0xLGE9MDthPG47YSs9Mil7dmFyIGw7bD1hPT1uLTE/dFthXTw8ODp0W2FdPDw4fHRbYSsxXSxyLmFwcGVuZENoYXJDb2RlKG88PDE2LWl8bD4+PmkpLG89bCYoMTw8aSktMSwxNT09PWk/KHIuYXBwZW5kQ2hhckNvZGUobyksbz0wLGk9MSk6aSs9MSxhPj1uLTImJnIuYXBwZW5kQ2hhckNvZGUobzw8MTYtaSl9cmV0dXJuIHIuYXBwZW5kQ2hhckNvZGUoMzI3Njh8biUyKSxyLmdldE91dHB1dFN0cmluZygpfSx0LmRlY29kZT1mdW5jdGlvbihlKXtpZihcInN0cmluZ1wiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQmluYXJ5U3RyaW5nLmRlY29kZTogaW52YWxpZCBpbnB1dCB0eXBlXCIpO2lmKFwiXCI9PWUpcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO2Zvcih2YXIgdD1uZXcgVWludDhBcnJheSgzKmUubGVuZ3RoKSxuPTAscj1mdW5jdGlvbihlKXt0W24rK109ZT4+PjgsdFtuKytdPTI1NSZlfSxvPTAsaT0wLGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIGw9ZS5jaGFyQ29kZUF0KGEpO2w+PTMyNzY4PygzMjc2OT09bCYmbi0tLGk9MCk6KDA9PWk/bz1sOihyKG88PGl8bD4+PjE1LWkpLG89bCYoMTw8MTUtaSktMSksMTU9PWk/aT0wOmkrPTEpfXJldHVybiB0LnN1YmFycmF5KDAsbil9fSh0LkJpbmFyeVN0cmluZ3x8KHQuQmluYXJ5U3RyaW5nPXt9KSl9KGUuRW5jb2Rpbmd8fChlLkVuY29kaW5nPXt9KSl9KG98fChvPXt9KSksZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlKXtlLmVuY29kZUZyb21TdHJpbmc9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmNoYXJDb2RlQXQodCk7aWYobjw1NTI5Nnx8bj41NjMxOSlyZXR1cm4gbjt2YXIgcj1lLmNoYXJDb2RlQXQodCsxKTtpZihyPj01NjMyMCYmcjw9NTczNDMpcmV0dXJuIHItNTYzMjArKG4tNTUyOTY8PDEwKSs2NTUzNjt0aHJvdyBuZXcgRXJyb3IoXCJnZXRVbmljb2RlQ29kZVBvaW50OiBSZWNlaXZlZCBhIGxlYWQgc3Vycm9nYXRlIGNoYXJhY3RlciwgY2hhciBjb2RlIFwiLmNvbmNhdChuLFwiLCBmb2xsb3dlZCBieSBcIikuY29uY2F0KHIsXCIsIHdoaWNoIGlzIG5vdCBhIHRyYWlsaW5nIHN1cnJvZ2F0ZSBjaGFyYWN0ZXIgY29kZS5cIikpfSxlLmRlY29kZVRvU3RyaW5nPWZ1bmN0aW9uKGUpe2lmKGU8PTY1NTM1KXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGUpO2lmKGU8PTExMTQxMTEpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYrKGUtNjU1MzY+Pj4xMCksNTYzMjArKGUtNjU1MzYmMTAyMykpO3Rocm93IG5ldyBFcnJvcihcImdldFN0cmluZ0Zyb21Vbmljb2RlQ29kZVBvaW50OiBBIGNvZGUgcG9pbnQgb2YgXCIuY29uY2F0KGUsXCIgY2Fubm90IGJlIGVuY29kZWQgaW4gVVRGLTE2XCIpKX19KGUuQ29kZVBvaW50fHwoZS5Db2RlUG9pbnQ9e30pKX0oZS5FbmNvZGluZ3x8KGUuRW5jb2Rpbmc9e30pKX0ob3x8KG89e30pKSxmdW5jdGlvbihlKXshZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUpe3ZhciB0PVtcIjAwMFwiLFwiMDAxXCIsXCIwMDJcIixcIjAwM1wiLFwiMDA0XCIsXCIwMDVcIixcIjAwNlwiLFwiMDA3XCIsXCIwMDhcIixcIjAwOVwiLFwiMDEwXCIsXCIwMTFcIixcIjAxMlwiLFwiMDEzXCIsXCIwMTRcIixcIjAxNVwiLFwiMDE2XCIsXCIwMTdcIixcIjAxOFwiLFwiMDE5XCIsXCIwMjBcIixcIjAyMVwiLFwiMDIyXCIsXCIwMjNcIixcIjAyNFwiLFwiMDI1XCIsXCIwMjZcIixcIjAyN1wiLFwiMDI4XCIsXCIwMjlcIixcIjAzMFwiLFwiMDMxXCIsXCIwMzJcIixcIjAzM1wiLFwiMDM0XCIsXCIwMzVcIixcIjAzNlwiLFwiMDM3XCIsXCIwMzhcIixcIjAzOVwiLFwiMDQwXCIsXCIwNDFcIixcIjA0MlwiLFwiMDQzXCIsXCIwNDRcIixcIjA0NVwiLFwiMDQ2XCIsXCIwNDdcIixcIjA0OFwiLFwiMDQ5XCIsXCIwNTBcIixcIjA1MVwiLFwiMDUyXCIsXCIwNTNcIixcIjA1NFwiLFwiMDU1XCIsXCIwNTZcIixcIjA1N1wiLFwiMDU4XCIsXCIwNTlcIixcIjA2MFwiLFwiMDYxXCIsXCIwNjJcIixcIjA2M1wiLFwiMDY0XCIsXCIwNjVcIixcIjA2NlwiLFwiMDY3XCIsXCIwNjhcIixcIjA2OVwiLFwiMDcwXCIsXCIwNzFcIixcIjA3MlwiLFwiMDczXCIsXCIwNzRcIixcIjA3NVwiLFwiMDc2XCIsXCIwNzdcIixcIjA3OFwiLFwiMDc5XCIsXCIwODBcIixcIjA4MVwiLFwiMDgyXCIsXCIwODNcIixcIjA4NFwiLFwiMDg1XCIsXCIwODZcIixcIjA4N1wiLFwiMDg4XCIsXCIwODlcIixcIjA5MFwiLFwiMDkxXCIsXCIwOTJcIixcIjA5M1wiLFwiMDk0XCIsXCIwOTVcIixcIjA5NlwiLFwiMDk3XCIsXCIwOThcIixcIjA5OVwiLFwiMTAwXCIsXCIxMDFcIixcIjEwMlwiLFwiMTAzXCIsXCIxMDRcIixcIjEwNVwiLFwiMTA2XCIsXCIxMDdcIixcIjEwOFwiLFwiMTA5XCIsXCIxMTBcIixcIjExMVwiLFwiMTEyXCIsXCIxMTNcIixcIjExNFwiLFwiMTE1XCIsXCIxMTZcIixcIjExN1wiLFwiMTE4XCIsXCIxMTlcIixcIjEyMFwiLFwiMTIxXCIsXCIxMjJcIixcIjEyM1wiLFwiMTI0XCIsXCIxMjVcIixcIjEyNlwiLFwiMTI3XCIsXCIxMjhcIixcIjEyOVwiLFwiMTMwXCIsXCIxMzFcIixcIjEzMlwiLFwiMTMzXCIsXCIxMzRcIixcIjEzNVwiLFwiMTM2XCIsXCIxMzdcIixcIjEzOFwiLFwiMTM5XCIsXCIxNDBcIixcIjE0MVwiLFwiMTQyXCIsXCIxNDNcIixcIjE0NFwiLFwiMTQ1XCIsXCIxNDZcIixcIjE0N1wiLFwiMTQ4XCIsXCIxNDlcIixcIjE1MFwiLFwiMTUxXCIsXCIxNTJcIixcIjE1M1wiLFwiMTU0XCIsXCIxNTVcIixcIjE1NlwiLFwiMTU3XCIsXCIxNThcIixcIjE1OVwiLFwiMTYwXCIsXCIxNjFcIixcIjE2MlwiLFwiMTYzXCIsXCIxNjRcIixcIjE2NVwiLFwiMTY2XCIsXCIxNjdcIixcIjE2OFwiLFwiMTY5XCIsXCIxNzBcIixcIjE3MVwiLFwiMTcyXCIsXCIxNzNcIixcIjE3NFwiLFwiMTc1XCIsXCIxNzZcIixcIjE3N1wiLFwiMTc4XCIsXCIxNzlcIixcIjE4MFwiLFwiMTgxXCIsXCIxODJcIixcIjE4M1wiLFwiMTg0XCIsXCIxODVcIixcIjE4NlwiLFwiMTg3XCIsXCIxODhcIixcIjE4OVwiLFwiMTkwXCIsXCIxOTFcIixcIjE5MlwiLFwiMTkzXCIsXCIxOTRcIixcIjE5NVwiLFwiMTk2XCIsXCIxOTdcIixcIjE5OFwiLFwiMTk5XCIsXCIyMDBcIixcIjIwMVwiLFwiMjAyXCIsXCIyMDNcIixcIjIwNFwiLFwiMjA1XCIsXCIyMDZcIixcIjIwN1wiLFwiMjA4XCIsXCIyMDlcIixcIjIxMFwiLFwiMjExXCIsXCIyMTJcIixcIjIxM1wiLFwiMjE0XCIsXCIyMTVcIixcIjIxNlwiLFwiMjE3XCIsXCIyMThcIixcIjIxOVwiLFwiMjIwXCIsXCIyMjFcIixcIjIyMlwiLFwiMjIzXCIsXCIyMjRcIixcIjIyNVwiLFwiMjI2XCIsXCIyMjdcIixcIjIyOFwiLFwiMjI5XCIsXCIyMzBcIixcIjIzMVwiLFwiMjMyXCIsXCIyMzNcIixcIjIzNFwiLFwiMjM1XCIsXCIyMzZcIixcIjIzN1wiLFwiMjM4XCIsXCIyMzlcIixcIjI0MFwiLFwiMjQxXCIsXCIyNDJcIixcIjI0M1wiLFwiMjQ0XCIsXCIyNDVcIixcIjI0NlwiLFwiMjQ3XCIsXCIyNDhcIixcIjI0OVwiLFwiMjUwXCIsXCIyNTFcIixcIjI1MlwiLFwiMjUzXCIsXCIyNTRcIixcIjI1NVwiXTtlLmVuY29kZT1mdW5jdGlvbihlKXtmb3IodmFyIG49W10scj0wO3I8ZS5sZW5ndGg7cisrKW4ucHVzaCh0W2Vbcl1dKTtyZXR1cm4gbi5qb2luKFwiIFwiKX19KGUuRGVjaW1hbFN0cmluZ3x8KGUuRGVjaW1hbFN0cmluZz17fSkpfShlLkVuY29kaW5nfHwoZS5FbmNvZGluZz17fSkpfShvfHwobz17fSkpLGZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlKXshZnVuY3Rpb24odCl7dC5lbmNvZGU9ZnVuY3Rpb24odCl7cmV0dXJuIGUuQmluYXJ5U3RyaW5nLmVuY29kZSh0KS5yZXBsYWNlKC9cXDAvZyxcIuiAglwiKX0sdC5kZWNvZGU9ZnVuY3Rpb24odCl7cmV0dXJuIGUuQmluYXJ5U3RyaW5nLmRlY29kZSh0LnJlcGxhY2UoL1xcdTgwMDIvZyxcIlxcMFwiKSl9fShlLlN0b3JhZ2VCaW5hcnlTdHJpbmd8fChlLlN0b3JhZ2VCaW5hcnlTdHJpbmc9e30pKX0oZS5FbmNvZGluZ3x8KGUuRW5jb2Rpbmc9e30pKX0ob3x8KG89e30pKSxmdW5jdGlvbihlKXshZnVuY3Rpb24odCl7IWZ1bmN0aW9uKG4pe3ZhciByLG87bi5lbmNvZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJjAhPXQubGVuZ3RoP2UucnVubmluZ0luTm9kZUpTKCk/ZS5CdWZmZXJUb29scy5idWZmZXJUb1VpbnQ4QXJyYXkoQnVmZmVyLmZyb20odCxcInV0ZjhcIikpOm4uY3JlYXRlTmF0aXZlVGV4dEVuY29kZXJBbmREZWNvZGVySWZBdmFpbGFibGUoKT9yLmVuY29kZSh0KTpuLmVuY29kZVdpdGhKUyh0KTpuZXcgVWludDhBcnJheSgwKX0sbi5kZWNvZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJjAhPXQubGVuZ3RoP2UucnVubmluZ0luTm9kZUpTKCk/ZS5CdWZmZXJUb29scy51aW50OEFycmF5VG9CdWZmZXIodCkudG9TdHJpbmcoXCJ1dGY4XCIpOm4uY3JlYXRlTmF0aXZlVGV4dEVuY29kZXJBbmREZWNvZGVySWZBdmFpbGFibGUoKT9vLmRlY29kZSh0KTpuLmRlY29kZVdpdGhKUyh0KTpcIlwifSxuLmVuY29kZVdpdGhKUz1mdW5jdGlvbihlLG4pe2lmKCFlfHwwPT1lLmxlbmd0aClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7bnx8KG49bmV3IFVpbnQ4QXJyYXkoNCplLmxlbmd0aCkpO2Zvcih2YXIgcj0wLG89MDtvPGUubGVuZ3RoO28rKyl7dmFyIGk9dC5Db2RlUG9pbnQuZW5jb2RlRnJvbVN0cmluZyhlLG8pO2lmKGk8PTEyNyluW3IrK109aTtlbHNlIGlmKGk8PTIwNDcpbltyKytdPTE5MnxpPj4+NixuW3IrK109MTI4fDYzJmk7ZWxzZSBpZihpPD02NTUzNSluW3IrK109MjI0fGk+Pj4xMixuW3IrK109MTI4fGk+Pj42JjYzLG5bcisrXT0xMjh8NjMmaTtlbHNle2lmKCEoaTw9MTExNDExMSkpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBVVEYtMTYgc3RyaW5nOiBFbmNvdW50ZXJlZCBhIGNoYXJhY3RlciB1bnN1cHBvcnRlZCBieSBVVEYtOC8xNiAoUkZDIDM2MjkpXCIpO25bcisrXT0yNDB8aT4+PjE4LG5bcisrXT0xMjh8aT4+PjEyJjYzLG5bcisrXT0xMjh8aT4+PjYmNjMsbltyKytdPTEyOHw2MyZpLG8rK319cmV0dXJuIG4uc3ViYXJyYXkoMCxyKX0sbi5kZWNvZGVXaXRoSlM9ZnVuY3Rpb24odCxuLHIpe2lmKHZvaWQgMD09PW4mJihuPTApLCF0fHwwPT10Lmxlbmd0aClyZXR1cm5cIlwiO3ZvaWQgMD09PXImJihyPXQubGVuZ3RoKTtmb3IodmFyIG8saSxhPW5ldyBlLlN0cmluZ0J1aWxkZXIsbD1uLHM9cjtsPHM7KXtpZigoaT10W2xdKT4+Pjc9PTApbz1pLGwrPTE7ZWxzZSBpZihpPj4+NT09Nil7aWYobCsxPj1yKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgVVRGLTggc3RyZWFtOiBUcnVuY2F0ZWQgY29kZXBvaW50IHNlcXVlbmNlIGVuY291bnRlcmVkIGF0IHBvc2l0aW9uIFwiK2wpO289KDMxJmkpPDw2fDYzJnRbbCsxXSxsKz0yfWVsc2UgaWYoaT4+PjQ9PTE0KXtpZihsKzI+PXIpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBVVEYtOCBzdHJlYW06IFRydW5jYXRlZCBjb2RlcG9pbnQgc2VxdWVuY2UgZW5jb3VudGVyZWQgYXQgcG9zaXRpb24gXCIrbCk7bz0oMTUmaSk8PDEyfCg2MyZ0W2wrMV0pPDw2fDYzJnRbbCsyXSxsKz0zfWVsc2V7aWYoaT4+PjMhPTMwKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgVVRGLTggc3RyZWFtOiBBbiBpbnZhbGlkIGxlYWQgYnl0ZSB2YWx1ZSBlbmNvdW50ZXJlZCBhdCBwb3NpdGlvbiBcIitsKTtpZihsKzM+PXIpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBVVEYtOCBzdHJlYW06IFRydW5jYXRlZCBjb2RlcG9pbnQgc2VxdWVuY2UgZW5jb3VudGVyZWQgYXQgcG9zaXRpb24gXCIrbCk7bz0oNyZpKTw8MTh8KDYzJnRbbCsxXSk8PDEyfCg2MyZ0W2wrMl0pPDw2fDYzJnRbbCszXSxsKz00fWEuYXBwZW5kQ29kZVBvaW50KG8pfXJldHVybiBhLmdldE91dHB1dFN0cmluZygpfSxuLmNyZWF0ZU5hdGl2ZVRleHRFbmNvZGVyQW5kRGVjb2RlcklmQXZhaWxhYmxlPWZ1bmN0aW9uKCl7cmV0dXJuISFyfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBUZXh0RW5jb2RlciYmKHI9bmV3IFRleHRFbmNvZGVyKFwidXRmLThcIiksbz1uZXcgVGV4dERlY29kZXIoXCJ1dGYtOFwiKSwhMCl9fSh0LlVURjh8fCh0LlVURjg9e30pKX0oZS5FbmNvZGluZ3x8KGUuRW5jb2Rpbmc9e30pKX0ob3x8KG89e30pKSxmdW5jdGlvbihlKXtlLmNvbXByZXNzPWZ1bmN0aW9uKHQsbil7aWYodm9pZCAwPT09biYmKG49e30pLG51bGw9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcImNvbXByZXNzOiB1bmRlZmluZWQgb3IgbnVsbCBpbnB1dCByZWNlaXZlZFwiKTt2YXIgcj1lLkNvbXByZXNzaW9uQ29tbW9uLmRldGVjdENvbXByZXNzaW9uU291cmNlRW5jb2RpbmcodCk7bj1lLk9iamVjdFRvb2xzLm92ZXJyaWRlKHtpbnB1dEVuY29kaW5nOnIsb3V0cHV0RW5jb2Rpbmc6XCJCeXRlQXJyYXlcIn0sbik7dmFyIG89KG5ldyBlLkNvbXByZXNzb3IpLmNvbXByZXNzQmxvY2sodCk7cmV0dXJuIGUuQ29tcHJlc3Npb25Db21tb24uZW5jb2RlQ29tcHJlc3NlZEJ5dGVzKG8sbi5vdXRwdXRFbmNvZGluZyl9LGUuZGVjb21wcmVzcz1mdW5jdGlvbih0LG4pe2lmKHZvaWQgMD09PW4mJihuPXt9KSxudWxsPT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJkZWNvbXByZXNzOiB1bmRlZmluZWQgb3IgbnVsbCBpbnB1dCByZWNlaXZlZFwiKTtuPWUuT2JqZWN0VG9vbHMub3ZlcnJpZGUoe2lucHV0RW5jb2Rpbmc6XCJCeXRlQXJyYXlcIixvdXRwdXRFbmNvZGluZzpcIlN0cmluZ1wifSxuKTt2YXIgcj1lLkNvbXByZXNzaW9uQ29tbW9uLmRlY29kZUNvbXByZXNzZWRCeXRlcyh0LG4uaW5wdXRFbmNvZGluZyksbz0obmV3IGUuRGVjb21wcmVzc29yKS5kZWNvbXByZXNzQmxvY2socik7cmV0dXJuIGUuQ29tcHJlc3Npb25Db21tb24uZW5jb2RlRGVjb21wcmVzc2VkQnl0ZXMobyxuLm91dHB1dEVuY29kaW5nKX0sZS5jb21wcmVzc0FzeW5jPWZ1bmN0aW9uKHQsbixyKXt2YXIgbztudWxsPT1yJiYocj1mdW5jdGlvbigpe30pO3RyeXtvPWUuQ29tcHJlc3Npb25Db21tb24uZGV0ZWN0Q29tcHJlc3Npb25Tb3VyY2VFbmNvZGluZyh0KX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKHZvaWQgMCxlKX1uPWUuT2JqZWN0VG9vbHMub3ZlcnJpZGUoe2lucHV0RW5jb2Rpbmc6byxvdXRwdXRFbmNvZGluZzpcIkJ5dGVBcnJheVwiLHVzZVdlYldvcmtlcjohMCxibG9ja1NpemU6NjU1MzZ9LG4pLGUuZW5xdWV1ZUltbWVkaWF0ZSgoZnVuY3Rpb24oKXtuLnVzZVdlYldvcmtlciYmZS5XZWJXb3JrZXIuY3JlYXRlR2xvYmFsV29ya2VySWZOZWVkZWQoKT9lLldlYldvcmtlci5jb21wcmVzc0FzeW5jKHQsbixyKTplLkFzeW5jQ29tcHJlc3Nvci5jb21wcmVzc0FzeW5jKHQsbixyKX0pKX0sZS5kZWNvbXByZXNzQXN5bmM9ZnVuY3Rpb24odCxuLHIpe2lmKG51bGw9PXImJihyPWZ1bmN0aW9uKCl7fSksbnVsbCE9dCl7bj1lLk9iamVjdFRvb2xzLm92ZXJyaWRlKHtpbnB1dEVuY29kaW5nOlwiQnl0ZUFycmF5XCIsb3V0cHV0RW5jb2Rpbmc6XCJTdHJpbmdcIix1c2VXZWJXb3JrZXI6ITAsYmxvY2tTaXplOjY1NTM2fSxuKTt2YXIgbz1lLkJ1ZmZlclRvb2xzLmNvbnZlcnRUb1VpbnQ4QXJyYXlJZk5lZWRlZCh0KTtlLkV2ZW50TG9vcC5lbnF1ZXVlSW1tZWRpYXRlKChmdW5jdGlvbigpe24udXNlV2ViV29ya2VyJiZlLldlYldvcmtlci5jcmVhdGVHbG9iYWxXb3JrZXJJZk5lZWRlZCgpP2UuV2ViV29ya2VyLmRlY29tcHJlc3NBc3luYyhvLG4scik6ZS5Bc3luY0RlY29tcHJlc3Nvci5kZWNvbXByZXNzQXN5bmModCxuLHIpfSkpfWVsc2Ugcih2b2lkIDAsbmV3IFR5cGVFcnJvcihcImRlY29tcHJlc3NBc3luYzogdW5kZWZpbmVkIG9yIG51bGwgaW5wdXQgcmVjZWl2ZWRcIikpfSxlLmNyZWF0ZUNvbXByZXNzaW9uU3RyZWFtPWZ1bmN0aW9uKCl7cmV0dXJuIGUuQXN5bmNDb21wcmVzc29yLmNyZWF0ZUNvbXByZXNzaW9uU3RyZWFtKCl9LGUuY3JlYXRlRGVjb21wcmVzc2lvblN0cmVhbT1mdW5jdGlvbigpe3JldHVybiBlLkFzeW5jRGVjb21wcmVzc29yLmNyZWF0ZURlY29tcHJlc3Npb25TdHJlYW0oKX0sZS5lbmNvZGVVVEY4PWZ1bmN0aW9uKHQpe3JldHVybiBlLkVuY29kaW5nLlVURjguZW5jb2RlKHQpfSxlLmRlY29kZVVURjg9ZnVuY3Rpb24odCl7cmV0dXJuIGUuRW5jb2RpbmcuVVRGOC5kZWNvZGUodCl9LGUuZW5jb2RlQmFzZTY0PWZ1bmN0aW9uKHQpe3JldHVybiBlLkVuY29kaW5nLkJhc2U2NC5lbmNvZGUodCl9LGUuZGVjb2RlQmFzZTY0PWZ1bmN0aW9uKHQpe3JldHVybiBlLkVuY29kaW5nLkJhc2U2NC5kZWNvZGUodCl9LGUuZW5jb2RlQmluYXJ5U3RyaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBlLkVuY29kaW5nLkJpbmFyeVN0cmluZy5lbmNvZGUodCl9LGUuZGVjb2RlQmluYXJ5U3RyaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBlLkVuY29kaW5nLkJpbmFyeVN0cmluZy5kZWNvZGUodCl9LGUuZW5jb2RlU3RvcmFnZUJpbmFyeVN0cmluZz1mdW5jdGlvbih0KXtyZXR1cm4gZS5FbmNvZGluZy5TdG9yYWdlQmluYXJ5U3RyaW5nLmVuY29kZSh0KX0sZS5kZWNvZGVTdG9yYWdlQmluYXJ5U3RyaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBlLkVuY29kaW5nLlN0b3JhZ2VCaW5hcnlTdHJpbmcuZGVjb2RlKHQpfX0ob3x8KG89e30pKX0sMzc0OihlLHQsbik9Pntjb25zdHtBYm9ydEVycm9yOnIsY29kZXM6b309bigxNDEpLHtpc05vZGVTdHJlYW06aSxpc1dlYlN0cmVhbTphLGtDb250cm9sbGVyRXJyb3JGdW5jdGlvbjpsfT1uKDEzMikscz1uKDg2KSx7RVJSX0lOVkFMSURfQVJHX1RZUEU6Y309bztlLmV4cG9ydHMuYWRkQWJvcnRTaWduYWw9ZnVuY3Rpb24odCxuKXtpZigoKGUsdCk9PntpZihcIm9iamVjdFwiIT10eXBlb2YgZXx8IShcImFib3J0ZWRcImluIGUpKXRocm93IG5ldyBjKFwic2lnbmFsXCIsXCJBYm9ydFNpZ25hbFwiLGUpfSkodCksIWkobikmJiFhKG4pKXRocm93IG5ldyBjKFwic3RyZWFtXCIsW1wiUmVhZGFibGVTdHJlYW1cIixcIldyaXRhYmxlU3RyZWFtXCIsXCJTdHJlYW1cIl0sbik7cmV0dXJuIGUuZXhwb3J0cy5hZGRBYm9ydFNpZ25hbE5vVmFsaWRhdGUodCxuKX0sZS5leHBvcnRzLmFkZEFib3J0U2lnbmFsTm9WYWxpZGF0ZT1mdW5jdGlvbihlLHQpe2lmKFwib2JqZWN0XCIhPXR5cGVvZiBlfHwhKFwiYWJvcnRlZFwiaW4gZSkpcmV0dXJuIHQ7Y29uc3Qgbj1pKHQpPygpPT57dC5kZXN0cm95KG5ldyByKHZvaWQgMCx7Y2F1c2U6ZS5yZWFzb259KSl9OigpPT57dFtsXShuZXcgcih2b2lkIDAse2NhdXNlOmUucmVhc29ufSkpfTtyZXR1cm4gZS5hYm9ydGVkP24oKTooZS5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIixuKSxzKHQsKCgpPT5lLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLG4pKSkpLHR9fSw2MTY6KGUsdCxuKT0+e2NvbnN0e1N0cmluZ1Byb3RvdHlwZVNsaWNlOnIsU3ltYm9sSXRlcmF0b3I6byxUeXBlZEFycmF5UHJvdG90eXBlU2V0OmksVWludDhBcnJheTphfT1uKDE5MSkse0J1ZmZlcjpsfT1uKDQ4NSkse2luc3BlY3Q6c309big3NzUpO2UuZXhwb3J0cz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9cHVzaChlKXtjb25zdCB0PXtkYXRhOmUsbmV4dDpudWxsfTt0aGlzLmxlbmd0aD4wP3RoaXMudGFpbC5uZXh0PXQ6dGhpcy5oZWFkPXQsdGhpcy50YWlsPXQsKyt0aGlzLmxlbmd0aH11bnNoaWZ0KGUpe2NvbnN0IHQ9e2RhdGE6ZSxuZXh0OnRoaXMuaGVhZH07MD09PXRoaXMubGVuZ3RoJiYodGhpcy50YWlsPXQpLHRoaXMuaGVhZD10LCsrdGhpcy5sZW5ndGh9c2hpZnQoKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuO2NvbnN0IGU9dGhpcy5oZWFkLmRhdGE7cmV0dXJuIDE9PT10aGlzLmxlbmd0aD90aGlzLmhlYWQ9dGhpcy50YWlsPW51bGw6dGhpcy5oZWFkPXRoaXMuaGVhZC5uZXh0LC0tdGhpcy5sZW5ndGgsZX1jbGVhcigpe3RoaXMuaGVhZD10aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfWpvaW4oZSl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVyblwiXCI7bGV0IHQ9dGhpcy5oZWFkLG49XCJcIit0LmRhdGE7Zm9yKDtudWxsIT09KHQ9dC5uZXh0KTspbis9ZSt0LmRhdGE7cmV0dXJuIG59Y29uY2F0KGUpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4gbC5hbGxvYygwKTtjb25zdCB0PWwuYWxsb2NVbnNhZmUoZT4+PjApO2xldCBuPXRoaXMuaGVhZCxyPTA7Zm9yKDtuOylpKHQsbi5kYXRhLHIpLHIrPW4uZGF0YS5sZW5ndGgsbj1uLm5leHQ7cmV0dXJuIHR9Y29uc3VtZShlLHQpe2NvbnN0IG49dGhpcy5oZWFkLmRhdGE7aWYoZTxuLmxlbmd0aCl7Y29uc3QgdD1uLnNsaWNlKDAsZSk7cmV0dXJuIHRoaXMuaGVhZC5kYXRhPW4uc2xpY2UoZSksdH1yZXR1cm4gZT09PW4ubGVuZ3RoP3RoaXMuc2hpZnQoKTp0P3RoaXMuX2dldFN0cmluZyhlKTp0aGlzLl9nZXRCdWZmZXIoZSl9Zmlyc3QoKXtyZXR1cm4gdGhpcy5oZWFkLmRhdGF9KltvXSgpe2ZvcihsZXQgZT10aGlzLmhlYWQ7ZTtlPWUubmV4dCl5aWVsZCBlLmRhdGF9X2dldFN0cmluZyhlKXtsZXQgdD1cIlwiLG49dGhpcy5oZWFkLG89MDtkb3tjb25zdCBpPW4uZGF0YTtpZighKGU+aS5sZW5ndGgpKXtlPT09aS5sZW5ndGg/KHQrPWksKytvLG4ubmV4dD90aGlzLmhlYWQ9bi5uZXh0OnRoaXMuaGVhZD10aGlzLnRhaWw9bnVsbCk6KHQrPXIoaSwwLGUpLHRoaXMuaGVhZD1uLG4uZGF0YT1yKGksZSkpO2JyZWFrfXQrPWksZS09aS5sZW5ndGgsKytvfXdoaWxlKG51bGwhPT0obj1uLm5leHQpKTtyZXR1cm4gdGhpcy5sZW5ndGgtPW8sdH1fZ2V0QnVmZmVyKGUpe2NvbnN0IHQ9bC5hbGxvY1Vuc2FmZShlKSxuPWU7bGV0IHI9dGhpcy5oZWFkLG89MDtkb3tjb25zdCBsPXIuZGF0YTtpZighKGU+bC5sZW5ndGgpKXtlPT09bC5sZW5ndGg/KGkodCxsLG4tZSksKytvLHIubmV4dD90aGlzLmhlYWQ9ci5uZXh0OnRoaXMuaGVhZD10aGlzLnRhaWw9bnVsbCk6KGkodCxuZXcgYShsLmJ1ZmZlcixsLmJ5dGVPZmZzZXQsZSksbi1lKSx0aGlzLmhlYWQ9cixyLmRhdGE9bC5zbGljZShlKSk7YnJlYWt9aSh0LGwsbi1lKSxlLT1sLmxlbmd0aCwrK299d2hpbGUobnVsbCE9PShyPXIubmV4dCkpO3JldHVybiB0aGlzLmxlbmd0aC09byx0fVtTeW1ib2wuZm9yKFwibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b21cIildKGUsdCl7cmV0dXJuIHModGhpcyx7Li4udCxkZXB0aDowLGN1c3RvbUluc3BlY3Q6ITF9KX19fSw4MTg6KGUsdCxuKT0+e2NvbnN0e3BpcGVsaW5lOnJ9PW4oNzU0KSxvPW4oMTgyKSx7ZGVzdHJveWVyOml9PW4oMjMwKSx7aXNOb2RlU3RyZWFtOmEsaXNSZWFkYWJsZTpsLGlzV3JpdGFibGU6cyxpc1dlYlN0cmVhbTpjLGlzVHJhbnNmb3JtU3RyZWFtOnUsaXNXcml0YWJsZVN0cmVhbTpmLGlzUmVhZGFibGVTdHJlYW06ZH09bigxMzIpLHtBYm9ydEVycm9yOnAsY29kZXM6e0VSUl9JTlZBTElEX0FSR19WQUxVRTpoLEVSUl9NSVNTSU5HX0FSR1M6Z319PW4oMTQxKSx2PW4oODYpO2UuZXhwb3J0cz1mdW5jdGlvbiguLi5lKXtpZigwPT09ZS5sZW5ndGgpdGhyb3cgbmV3IGcoXCJzdHJlYW1zXCIpO2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gby5mcm9tKGVbMF0pO2NvbnN0IHQ9Wy4uLmVdO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGVbMF0mJihlWzBdPW8uZnJvbShlWzBdKSksXCJmdW5jdGlvblwiPT10eXBlb2YgZVtlLmxlbmd0aC0xXSl7Y29uc3QgdD1lLmxlbmd0aC0xO2VbdF09by5mcm9tKGVbdF0pfWZvcihsZXQgbj0wO248ZS5sZW5ndGg7KytuKWlmKGEoZVtuXSl8fGMoZVtuXSkpe2lmKG48ZS5sZW5ndGgtMSYmIShsKGVbbl0pfHxkKGVbbl0pfHx1KGVbbl0pKSl0aHJvdyBuZXcgaChgc3RyZWFtc1ske259XWAsdFtuXSxcIm11c3QgYmUgcmVhZGFibGVcIik7aWYobj4wJiYhKHMoZVtuXSl8fGYoZVtuXSl8fHUoZVtuXSkpKXRocm93IG5ldyBoKGBzdHJlYW1zWyR7bn1dYCx0W25dLFwibXVzdCBiZSB3cml0YWJsZVwiKX1sZXQgbixtLEMseSx3O2NvbnN0IGI9ZVswXSx4PXIoZSwoZnVuY3Rpb24oZSl7Y29uc3QgdD15O3k9bnVsbCx0P3QoZSk6ZT93LmRlc3Ryb3koZSk6T3x8X3x8dy5kZXN0cm95KCl9KSksXz0hIShzKGIpfHxmKGIpfHx1KGIpKSxPPSEhKGwoeCl8fGQoeCl8fHUoeCkpO2lmKHc9bmV3IG8oe3dyaXRhYmxlT2JqZWN0TW9kZTohKG51bGw9PWJ8fCFiLndyaXRhYmxlT2JqZWN0TW9kZSkscmVhZGFibGVPYmplY3RNb2RlOiEobnVsbD09eHx8IXgud3JpdGFibGVPYmplY3RNb2RlKSx3cml0YWJsZTpfLHJlYWRhYmxlOk99KSxfKXtpZihhKGIpKXcuX3dyaXRlPWZ1bmN0aW9uKGUsdCxyKXtiLndyaXRlKGUsdCk/cigpOm49cn0sdy5fZmluYWw9ZnVuY3Rpb24oZSl7Yi5lbmQoKSxtPWV9LGIub24oXCJkcmFpblwiLChmdW5jdGlvbigpe2lmKG4pe2NvbnN0IGU9bjtuPW51bGwsZSgpfX0pKTtlbHNlIGlmKGMoYikpe2NvbnN0IGU9KHUoYik/Yi53cml0YWJsZTpiKS5nZXRXcml0ZXIoKTt3Ll93cml0ZT1hc3luYyBmdW5jdGlvbih0LG4scil7dHJ5e2F3YWl0IGUucmVhZHksZS53cml0ZSh0KS5jYXRjaCgoKCk9Pnt9KSkscigpfWNhdGNoKGUpe3IoZSl9fSx3Ll9maW5hbD1hc3luYyBmdW5jdGlvbih0KXt0cnl7YXdhaXQgZS5yZWFkeSxlLmNsb3NlKCkuY2F0Y2goKCgpPT57fSkpLG09dH1jYXRjaChlKXt0KGUpfX19Y29uc3QgZT11KHgpP3gucmVhZGFibGU6eDt2KGUsKCgpPT57aWYobSl7Y29uc3QgZT1tO209bnVsbCxlKCl9fSkpfWlmKE8paWYoYSh4KSl4Lm9uKFwicmVhZGFibGVcIiwoZnVuY3Rpb24oKXtpZihDKXtjb25zdCBlPUM7Qz1udWxsLGUoKX19KSkseC5vbihcImVuZFwiLChmdW5jdGlvbigpe3cucHVzaChudWxsKX0pKSx3Ll9yZWFkPWZ1bmN0aW9uKCl7Zm9yKDs7KXtjb25zdCBlPXgucmVhZCgpO2lmKG51bGw9PT1lKXJldHVybiB2b2lkKEM9dy5fcmVhZCk7aWYoIXcucHVzaChlKSlyZXR1cm59fTtlbHNlIGlmKGMoeCkpe2NvbnN0IGU9KHUoeCk/eC5yZWFkYWJsZTp4KS5nZXRSZWFkZXIoKTt3Ll9yZWFkPWFzeW5jIGZ1bmN0aW9uKCl7Zm9yKDs7KXRyeXtjb25zdHt2YWx1ZTp0LGRvbmU6bn09YXdhaXQgZS5yZWFkKCk7aWYoIXcucHVzaCh0KSlyZXR1cm47aWYobilyZXR1cm4gdm9pZCB3LnB1c2gobnVsbCl9Y2F0Y2h7cmV0dXJufX19cmV0dXJuIHcuX2Rlc3Ryb3k9ZnVuY3Rpb24oZSx0KXtlfHxudWxsPT09eXx8KGU9bmV3IHApLEM9bnVsbCxuPW51bGwsbT1udWxsLG51bGw9PT15P3QoZSk6KHk9dCxhKHgpJiZpKHgsZSkpfSx3fX0sMjMwOihlLHQsbik9Pntjb25zdCByPW4oNTMzKSx7YWdncmVnYXRlVHdvRXJyb3JzOm8sY29kZXM6e0VSUl9NVUxUSVBMRV9DQUxMQkFDSzppfSxBYm9ydEVycm9yOmF9PW4oMTQxKSx7U3ltYm9sOmx9PW4oMTkxKSx7a0Rlc3Ryb3llZDpzLGlzRGVzdHJveWVkOmMsaXNGaW5pc2hlZDp1LGlzU2VydmVyUmVxdWVzdDpmfT1uKDEzMiksZD1sKFwia0Rlc3Ryb3lcIikscD1sKFwia0NvbnN0cnVjdFwiKTtmdW5jdGlvbiBoKGUsdCxuKXtlJiYoZS5zdGFjayx0JiYhdC5lcnJvcmVkJiYodC5lcnJvcmVkPWUpLG4mJiFuLmVycm9yZWQmJihuLmVycm9yZWQ9ZSkpfWZ1bmN0aW9uIGcoZSx0LG4pe2xldCBvPSExO2Z1bmN0aW9uIGkodCl7aWYobylyZXR1cm47bz0hMDtjb25zdCBpPWUuX3JlYWRhYmxlU3RhdGUsYT1lLl93cml0YWJsZVN0YXRlO2godCxhLGkpLGEmJihhLmNsb3NlZD0hMCksaSYmKGkuY2xvc2VkPSEwKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBuJiZuKHQpLHQ/ci5uZXh0VGljayh2LGUsdCk6ci5uZXh0VGljayhtLGUpfXRyeXtlLl9kZXN0cm95KHR8fG51bGwsaSl9Y2F0Y2godCl7aSh0KX19ZnVuY3Rpb24gdihlLHQpe0MoZSx0KSxtKGUpfWZ1bmN0aW9uIG0oZSl7Y29uc3QgdD1lLl9yZWFkYWJsZVN0YXRlLG49ZS5fd3JpdGFibGVTdGF0ZTtuJiYobi5jbG9zZUVtaXR0ZWQ9ITApLHQmJih0LmNsb3NlRW1pdHRlZD0hMCksKG51bGwhPW4mJm4uZW1pdENsb3NlfHxudWxsIT10JiZ0LmVtaXRDbG9zZSkmJmUuZW1pdChcImNsb3NlXCIpfWZ1bmN0aW9uIEMoZSx0KXtjb25zdCBuPWUuX3JlYWRhYmxlU3RhdGUscj1lLl93cml0YWJsZVN0YXRlO251bGwhPXImJnIuZXJyb3JFbWl0dGVkfHxudWxsIT1uJiZuLmVycm9yRW1pdHRlZHx8KHImJihyLmVycm9yRW1pdHRlZD0hMCksbiYmKG4uZXJyb3JFbWl0dGVkPSEwKSxlLmVtaXQoXCJlcnJvclwiLHQpKX1mdW5jdGlvbiB5KGUsdCxuKXtjb25zdCBvPWUuX3JlYWRhYmxlU3RhdGUsaT1lLl93cml0YWJsZVN0YXRlO2lmKG51bGwhPWkmJmkuZGVzdHJveWVkfHxudWxsIT1vJiZvLmRlc3Ryb3llZClyZXR1cm4gdGhpcztudWxsIT1vJiZvLmF1dG9EZXN0cm95fHxudWxsIT1pJiZpLmF1dG9EZXN0cm95P2UuZGVzdHJveSh0KTp0JiYodC5zdGFjayxpJiYhaS5lcnJvcmVkJiYoaS5lcnJvcmVkPXQpLG8mJiFvLmVycm9yZWQmJihvLmVycm9yZWQ9dCksbj9yLm5leHRUaWNrKEMsZSx0KTpDKGUsdCkpfWZ1bmN0aW9uIHcoZSl7bGV0IHQ9ITE7ZnVuY3Rpb24gbihuKXtpZih0KXJldHVybiB2b2lkIHkoZSxudWxsIT1uP246bmV3IGkpO3Q9ITA7Y29uc3Qgbz1lLl9yZWFkYWJsZVN0YXRlLGE9ZS5fd3JpdGFibGVTdGF0ZSxsPWF8fG87byYmKG8uY29uc3RydWN0ZWQ9ITApLGEmJihhLmNvbnN0cnVjdGVkPSEwKSxsLmRlc3Ryb3llZD9lLmVtaXQoZCxuKTpuP3koZSxuLCEwKTpyLm5leHRUaWNrKGIsZSl9dHJ5e2UuX2NvbnN0cnVjdCgoZT0+e3IubmV4dFRpY2sobixlKX0pKX1jYXRjaChlKXtyLm5leHRUaWNrKG4sZSl9fWZ1bmN0aW9uIGIoZSl7ZS5lbWl0KHApfWZ1bmN0aW9uIHgoZSl7cmV0dXJuKG51bGw9PWU/dm9pZCAwOmUuc2V0SGVhZGVyKSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5hYm9ydH1mdW5jdGlvbiBfKGUpe2UuZW1pdChcImNsb3NlXCIpfWZ1bmN0aW9uIE8oZSx0KXtlLmVtaXQoXCJlcnJvclwiLHQpLHIubmV4dFRpY2soXyxlKX1lLmV4cG9ydHM9e2NvbnN0cnVjdDpmdW5jdGlvbihlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUuX2NvbnN0cnVjdClyZXR1cm47Y29uc3Qgbj1lLl9yZWFkYWJsZVN0YXRlLG89ZS5fd3JpdGFibGVTdGF0ZTtuJiYobi5jb25zdHJ1Y3RlZD0hMSksbyYmKG8uY29uc3RydWN0ZWQ9ITEpLGUub25jZShwLHQpLGUubGlzdGVuZXJDb3VudChwKT4xfHxyLm5leHRUaWNrKHcsZSl9LGRlc3Ryb3llcjpmdW5jdGlvbihlLHQpe2UmJiFjKGUpJiYodHx8dShlKXx8KHQ9bmV3IGEpLGYoZSk/KGUuc29ja2V0PW51bGwsZS5kZXN0cm95KHQpKTp4KGUpP2UuYWJvcnQoKTp4KGUucmVxKT9lLnJlcS5hYm9ydCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuZGVzdHJveT9lLmRlc3Ryb3kodCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZS5jbG9zZT9lLmNsb3NlKCk6dD9yLm5leHRUaWNrKE8sZSx0KTpyLm5leHRUaWNrKF8sZSksZS5kZXN0cm95ZWR8fChlW3NdPSEwKSl9LGRlc3Ryb3k6ZnVuY3Rpb24oZSx0KXtjb25zdCBuPXRoaXMuX3JlYWRhYmxlU3RhdGUscj10aGlzLl93cml0YWJsZVN0YXRlLGk9cnx8bjtyZXR1cm4gbnVsbCE9ciYmci5kZXN0cm95ZWR8fG51bGwhPW4mJm4uZGVzdHJveWVkPyhcImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiZ0KCksdGhpcyk6KGgoZSxyLG4pLHImJihyLmRlc3Ryb3llZD0hMCksbiYmKG4uZGVzdHJveWVkPSEwKSxpLmNvbnN0cnVjdGVkP2codGhpcyxlLHQpOnRoaXMub25jZShkLChmdW5jdGlvbihuKXtnKHRoaXMsbyhuLGUpLHQpfSkpLHRoaXMpfSx1bmRlc3Ryb3k6ZnVuY3Rpb24oKXtjb25zdCBlPXRoaXMuX3JlYWRhYmxlU3RhdGUsdD10aGlzLl93cml0YWJsZVN0YXRlO2UmJihlLmNvbnN0cnVjdGVkPSEwLGUuY2xvc2VkPSExLGUuY2xvc2VFbWl0dGVkPSExLGUuZGVzdHJveWVkPSExLGUuZXJyb3JlZD1udWxsLGUuZXJyb3JFbWl0dGVkPSExLGUucmVhZGluZz0hMSxlLmVuZGVkPSExPT09ZS5yZWFkYWJsZSxlLmVuZEVtaXR0ZWQ9ITE9PT1lLnJlYWRhYmxlKSx0JiYodC5jb25zdHJ1Y3RlZD0hMCx0LmRlc3Ryb3llZD0hMSx0LmNsb3NlZD0hMSx0LmNsb3NlRW1pdHRlZD0hMSx0LmVycm9yZWQ9bnVsbCx0LmVycm9yRW1pdHRlZD0hMSx0LmZpbmFsQ2FsbGVkPSExLHQucHJlZmluaXNoZWQ9ITEsdC5lbmRlZD0hMT09PXQud3JpdGFibGUsdC5lbmRpbmc9ITE9PT10LndyaXRhYmxlLHQuZmluaXNoZWQ9ITE9PT10LndyaXRhYmxlKX0sZXJyb3JPckRlc3Ryb3k6eX19LDE4MjooZSx0LG4pPT57Y29uc3R7T2JqZWN0RGVmaW5lUHJvcGVydGllczpyLE9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcjpvLE9iamVjdEtleXM6aSxPYmplY3RTZXRQcm90b3R5cGVPZjphfT1uKDE5MSk7ZS5leHBvcnRzPWM7Y29uc3QgbD1uKDg1OCkscz1uKDM3Myk7YShjLnByb3RvdHlwZSxsLnByb3RvdHlwZSksYShjLGwpO3tjb25zdCBlPWkocy5wcm90b3R5cGUpO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXtjb25zdCBuPWVbdF07Yy5wcm90b3R5cGVbbl18fChjLnByb3RvdHlwZVtuXT1zLnByb3RvdHlwZVtuXSl9fWZ1bmN0aW9uIGMoZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgYykpcmV0dXJuIG5ldyBjKGUpO2wuY2FsbCh0aGlzLGUpLHMuY2FsbCh0aGlzLGUpLGU/KHRoaXMuYWxsb3dIYWxmT3Blbj0hMSE9PWUuYWxsb3dIYWxmT3BlbiwhMT09PWUucmVhZGFibGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRhYmxlPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kZWQ9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkPSEwKSwhMT09PWUud3JpdGFibGUmJih0aGlzLl93cml0YWJsZVN0YXRlLndyaXRhYmxlPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nPSEwLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQ9ITAsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZD0hMCkpOnRoaXMuYWxsb3dIYWxmT3Blbj0hMH1sZXQgdSxmO2Z1bmN0aW9uIGQoKXtyZXR1cm4gdm9pZCAwPT09dSYmKHU9e30pLHV9cihjLnByb3RvdHlwZSx7d3JpdGFibGU6e19fcHJvdG9fXzpudWxsLC4uLm8ocy5wcm90b3R5cGUsXCJ3cml0YWJsZVwiKX0sd3JpdGFibGVIaWdoV2F0ZXJNYXJrOntfX3Byb3RvX186bnVsbCwuLi5vKHMucHJvdG90eXBlLFwid3JpdGFibGVIaWdoV2F0ZXJNYXJrXCIpfSx3cml0YWJsZU9iamVjdE1vZGU6e19fcHJvdG9fXzpudWxsLC4uLm8ocy5wcm90b3R5cGUsXCJ3cml0YWJsZU9iamVjdE1vZGVcIil9LHdyaXRhYmxlQnVmZmVyOntfX3Byb3RvX186bnVsbCwuLi5vKHMucHJvdG90eXBlLFwid3JpdGFibGVCdWZmZXJcIil9LHdyaXRhYmxlTGVuZ3RoOntfX3Byb3RvX186bnVsbCwuLi5vKHMucHJvdG90eXBlLFwid3JpdGFibGVMZW5ndGhcIil9LHdyaXRhYmxlRmluaXNoZWQ6e19fcHJvdG9fXzpudWxsLC4uLm8ocy5wcm90b3R5cGUsXCJ3cml0YWJsZUZpbmlzaGVkXCIpfSx3cml0YWJsZUNvcmtlZDp7X19wcm90b19fOm51bGwsLi4ubyhzLnByb3RvdHlwZSxcIndyaXRhYmxlQ29ya2VkXCIpfSx3cml0YWJsZUVuZGVkOntfX3Byb3RvX186bnVsbCwuLi5vKHMucHJvdG90eXBlLFwid3JpdGFibGVFbmRlZFwiKX0sd3JpdGFibGVOZWVkRHJhaW46e19fcHJvdG9fXzpudWxsLC4uLm8ocy5wcm90b3R5cGUsXCJ3cml0YWJsZU5lZWREcmFpblwiKX0sZGVzdHJveWVkOntfX3Byb3RvX186bnVsbCxnZXQoKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQoZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPWUsdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ZSl9fX0pLGMuZnJvbVdlYj1mdW5jdGlvbihlLHQpe3JldHVybiBkKCkubmV3U3RyZWFtRHVwbGV4RnJvbVJlYWRhYmxlV3JpdGFibGVQYWlyKGUsdCl9LGMudG9XZWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGQoKS5uZXdSZWFkYWJsZVdyaXRhYmxlUGFpckZyb21EdXBsZXgoZSl9LGMuZnJvbT1mdW5jdGlvbihlKXtyZXR1cm4gZnx8KGY9big3NDkpKSxmKGUsXCJib2R5XCIpfX0sNzQ5OihlLHQsbik9Pntjb25zdCByPW4oNTMzKSxvPW4oNDg1KSx7aXNSZWFkYWJsZTppLGlzV3JpdGFibGU6YSxpc0l0ZXJhYmxlOmwsaXNOb2RlU3RyZWFtOnMsaXNSZWFkYWJsZU5vZGVTdHJlYW06Yyxpc1dyaXRhYmxlTm9kZVN0cmVhbTp1LGlzRHVwbGV4Tm9kZVN0cmVhbTpmfT1uKDEzMiksZD1uKDg2KSx7QWJvcnRFcnJvcjpwLGNvZGVzOntFUlJfSU5WQUxJRF9BUkdfVFlQRTpoLEVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRTpnfX09bigxNDEpLHtkZXN0cm95ZXI6dn09bigyMzApLG09bigxODIpLEM9big4NTgpLHtjcmVhdGVEZWZlcnJlZFByb21pc2U6eX09big3NzUpLHc9big5MTMpLGI9Z2xvYmFsVGhpcy5CbG9ifHxvLkJsb2IseD12b2lkIDAhPT1iP2Z1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgYn06ZnVuY3Rpb24oZSl7cmV0dXJuITF9LF89Z2xvYmFsVGhpcy5BYm9ydENvbnRyb2xsZXJ8fG4oODc2KS5BYm9ydENvbnRyb2xsZXIse0Z1bmN0aW9uUHJvdG90eXBlQ2FsbDpPfT1uKDE5MSk7Y2xhc3MgTCBleHRlbmRzIG17Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksITE9PT0obnVsbD09ZT92b2lkIDA6ZS5yZWFkYWJsZSkmJih0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRhYmxlPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kZWQ9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkPSEwKSwhMT09PShudWxsPT1lP3ZvaWQgMDplLndyaXRhYmxlKSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUud3JpdGFibGU9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmc9ITAsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZD0hMCx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkPSEwKX19ZnVuY3Rpb24gRShlKXtjb25zdCB0PWUucmVhZGFibGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGUucmVhZGFibGUucmVhZD9DLndyYXAoZS5yZWFkYWJsZSk6ZS5yZWFkYWJsZSxuPWUud3JpdGFibGU7bGV0IHIsbyxsLHMsYyx1PSEhaSh0KSxmPSEhYShuKTtmdW5jdGlvbiBoKGUpe2NvbnN0IHQ9cztzPW51bGwsdD90KGUpOmUmJmMuZGVzdHJveShlKX1yZXR1cm4gYz1uZXcgTCh7cmVhZGFibGVPYmplY3RNb2RlOiEobnVsbD09dHx8IXQucmVhZGFibGVPYmplY3RNb2RlKSx3cml0YWJsZU9iamVjdE1vZGU6IShudWxsPT1ufHwhbi53cml0YWJsZU9iamVjdE1vZGUpLHJlYWRhYmxlOnUsd3JpdGFibGU6Zn0pLGYmJihkKG4sKGU9PntmPSExLGUmJnYodCxlKSxoKGUpfSkpLGMuX3dyaXRlPWZ1bmN0aW9uKGUsdCxvKXtuLndyaXRlKGUsdCk/bygpOnI9b30sYy5fZmluYWw9ZnVuY3Rpb24oZSl7bi5lbmQoKSxvPWV9LG4ub24oXCJkcmFpblwiLChmdW5jdGlvbigpe2lmKHIpe2NvbnN0IGU9cjtyPW51bGwsZSgpfX0pKSxuLm9uKFwiZmluaXNoXCIsKGZ1bmN0aW9uKCl7aWYobyl7Y29uc3QgZT1vO289bnVsbCxlKCl9fSkpKSx1JiYoZCh0LChlPT57dT0hMSxlJiZ2KHQsZSksaChlKX0pKSx0Lm9uKFwicmVhZGFibGVcIiwoZnVuY3Rpb24oKXtpZihsKXtjb25zdCBlPWw7bD1udWxsLGUoKX19KSksdC5vbihcImVuZFwiLChmdW5jdGlvbigpe2MucHVzaChudWxsKX0pKSxjLl9yZWFkPWZ1bmN0aW9uKCl7Zm9yKDs7KXtjb25zdCBlPXQucmVhZCgpO2lmKG51bGw9PT1lKXJldHVybiB2b2lkKGw9Yy5fcmVhZCk7aWYoIWMucHVzaChlKSlyZXR1cm59fSksYy5fZGVzdHJveT1mdW5jdGlvbihlLGkpe2V8fG51bGw9PT1zfHwoZT1uZXcgcCksbD1udWxsLHI9bnVsbCxvPW51bGwsbnVsbD09PXM/aShlKToocz1pLHYobixlKSx2KHQsZSkpfSxjfWUuZXhwb3J0cz1mdW5jdGlvbiBlKHQsbil7aWYoZih0KSlyZXR1cm4gdDtpZihjKHQpKXJldHVybiBFKHtyZWFkYWJsZTp0fSk7aWYodSh0KSlyZXR1cm4gRSh7d3JpdGFibGU6dH0pO2lmKHModCkpcmV0dXJuIEUoe3dyaXRhYmxlOiExLHJlYWRhYmxlOiExfSk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdCl7Y29uc3R7dmFsdWU6ZSx3cml0ZTpvLGZpbmFsOmksZGVzdHJveTphfT1mdW5jdGlvbihlKXtsZXR7cHJvbWlzZTp0LHJlc29sdmU6bn09eSgpO2NvbnN0IG89bmV3IF8saT1vLnNpZ25hbCxhPWUoYXN5bmMgZnVuY3Rpb24qKCl7Zm9yKDs7KXtjb25zdCBlPXQ7dD1udWxsO2NvbnN0e2NodW5rOm8sZG9uZTphLGNiOmx9PWF3YWl0IGU7aWYoci5uZXh0VGljayhsKSxhKXJldHVybjtpZihpLmFib3J0ZWQpdGhyb3cgbmV3IHAodm9pZCAwLHtjYXVzZTppLnJlYXNvbn0pOyh7cHJvbWlzZTp0LHJlc29sdmU6bn09eSgpKSx5aWVsZCBvfX0oKSx7c2lnbmFsOml9KTtyZXR1cm57dmFsdWU6YSx3cml0ZShlLHQscil7Y29uc3Qgbz1uO249bnVsbCxvKHtjaHVuazplLGRvbmU6ITEsY2I6cn0pfSxmaW5hbChlKXtjb25zdCB0PW47bj1udWxsLHQoe2RvbmU6ITAsY2I6ZX0pfSxkZXN0cm95KGUsdCl7by5hYm9ydCgpLHQoZSl9fX0odCk7aWYobChlKSlyZXR1cm4gdyhMLGUse29iamVjdE1vZGU6ITAsd3JpdGU6byxmaW5hbDppLGRlc3Ryb3k6YX0pO2NvbnN0IHM9bnVsbD09ZT92b2lkIDA6ZS50aGVuO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHMpe2xldCB0O2NvbnN0IG49TyhzLGUsKGU9PntpZihudWxsIT1lKXRocm93IG5ldyBnKFwibnVsbHlcIixcImJvZHlcIixlKX0pLChlPT57dih0LGUpfSkpO3JldHVybiB0PW5ldyBMKHtvYmplY3RNb2RlOiEwLHJlYWRhYmxlOiExLHdyaXRlOm8sZmluYWwoZSl7aSgoYXN5bmMoKT0+e3RyeXthd2FpdCBuLHIubmV4dFRpY2soZSxudWxsKX1jYXRjaCh0KXtyLm5leHRUaWNrKGUsdCl9fSkpfSxkZXN0cm95OmF9KX10aHJvdyBuZXcgZyhcIkl0ZXJhYmxlLCBBc3luY0l0ZXJhYmxlIG9yIEFzeW5jRnVuY3Rpb25cIixuLGUpfWlmKHgodCkpcmV0dXJuIGUodC5hcnJheUJ1ZmZlcigpKTtpZihsKHQpKXJldHVybiB3KEwsdCx7b2JqZWN0TW9kZTohMCx3cml0YWJsZTohMX0pO2lmKFwib2JqZWN0XCI9PXR5cGVvZihudWxsPT10P3ZvaWQgMDp0LndyaXRhYmxlKXx8XCJvYmplY3RcIj09dHlwZW9mKG51bGw9PXQ/dm9pZCAwOnQucmVhZGFibGUpKXJldHVybiBFKHtyZWFkYWJsZTpudWxsIT10JiZ0LnJlYWRhYmxlP2MobnVsbD09dD92b2lkIDA6dC5yZWFkYWJsZSk/bnVsbD09dD92b2lkIDA6dC5yZWFkYWJsZTplKHQucmVhZGFibGUpOnZvaWQgMCx3cml0YWJsZTpudWxsIT10JiZ0LndyaXRhYmxlP3UobnVsbD09dD92b2lkIDA6dC53cml0YWJsZSk/bnVsbD09dD92b2lkIDA6dC53cml0YWJsZTplKHQud3JpdGFibGUpOnZvaWQgMH0pO2NvbnN0IG89bnVsbD09dD92b2lkIDA6dC50aGVuO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG8pe2xldCBlO3JldHVybiBPKG8sdCwodD0+e251bGwhPXQmJmUucHVzaCh0KSxlLnB1c2gobnVsbCl9KSwodD0+e3YoZSx0KX0pKSxlPW5ldyBMKHtvYmplY3RNb2RlOiEwLHdyaXRhYmxlOiExLHJlYWQoKXt9fSl9dGhyb3cgbmV3IGgobixbXCJCbG9iXCIsXCJSZWFkYWJsZVN0cmVhbVwiLFwiV3JpdGFibGVTdHJlYW1cIixcIlN0cmVhbVwiLFwiSXRlcmFibGVcIixcIkFzeW5jSXRlcmFibGVcIixcIkZ1bmN0aW9uXCIsXCJ7IHJlYWRhYmxlLCB3cml0YWJsZSB9IHBhaXJcIixcIlByb21pc2VcIl0sdCl9fSw4NjooZSx0LG4pPT57Y29uc3Qgcj1uKDUzMykse0Fib3J0RXJyb3I6byxjb2RlczppfT1uKDE0MSkse0VSUl9JTlZBTElEX0FSR19UWVBFOmEsRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0U6bH09aSx7a0VtcHR5T2JqZWN0OnMsb25jZTpjfT1uKDc3NSkse3ZhbGlkYXRlQWJvcnRTaWduYWw6dSx2YWxpZGF0ZUZ1bmN0aW9uOmYsdmFsaWRhdGVPYmplY3Q6ZCx2YWxpZGF0ZUJvb2xlYW46cH09big5MDQpLHtQcm9taXNlOmgsUHJvbWlzZVByb3RvdHlwZVRoZW46Z309bigxOTEpLHtpc0Nsb3NlZDp2LGlzUmVhZGFibGU6bSxpc1JlYWRhYmxlTm9kZVN0cmVhbTpDLGlzUmVhZGFibGVTdHJlYW06eSxpc1JlYWRhYmxlRmluaXNoZWQ6dyxpc1JlYWRhYmxlRXJyb3JlZDpiLGlzV3JpdGFibGU6eCxpc1dyaXRhYmxlTm9kZVN0cmVhbTpfLGlzV3JpdGFibGVTdHJlYW06Tyxpc1dyaXRhYmxlRmluaXNoZWQ6TCxpc1dyaXRhYmxlRXJyb3JlZDpFLGlzTm9kZVN0cmVhbTpTLHdpbGxFbWl0Q2xvc2U6aixrSXNDbG9zZWRQcm9taXNlOk19PW4oMTMyKSxrPSgpPT57fTtmdW5jdGlvbiBSKGUsdCxuKXt2YXIgaSxwO2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoPyhuPXQsdD1zKTpudWxsPT10P3Q9czpkKHQsXCJvcHRpb25zXCIpLGYobixcImNhbGxiYWNrXCIpLHUodC5zaWduYWwsXCJvcHRpb25zLnNpZ25hbFwiKSxuPWMobikseShlKXx8TyhlKSlyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe2xldCBpPSExLGE9aztpZih0LnNpZ25hbClpZihhPSgpPT57aT0hMCxuLmNhbGwoZSxuZXcgbyh2b2lkIDAse2NhdXNlOnQuc2lnbmFsLnJlYXNvbn0pKX0sdC5zaWduYWwuYWJvcnRlZClyLm5leHRUaWNrKGEpO2Vsc2V7Y29uc3Qgcj1uO249YygoKC4uLm4pPT57dC5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsYSksci5hcHBseShlLG4pfSkpLHQuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLGEpfWNvbnN0IGw9KC4uLnQpPT57aXx8ci5uZXh0VGljaygoKCk9Pm4uYXBwbHkoZSx0KSkpfTtyZXR1cm4gZyhlW01dLnByb21pc2UsbCxsKSxrfShlLHQsbik7aWYoIVMoZSkpdGhyb3cgbmV3IGEoXCJzdHJlYW1cIixbXCJSZWFkYWJsZVN0cmVhbVwiLFwiV3JpdGFibGVTdHJlYW1cIixcIlN0cmVhbVwiXSxlKTtjb25zdCBoPW51bGwhPT0oaT10LnJlYWRhYmxlKSYmdm9pZCAwIT09aT9pOkMoZSksUj1udWxsIT09KHA9dC53cml0YWJsZSkmJnZvaWQgMCE9PXA/cDpfKGUpLFA9ZS5fd3JpdGFibGVTdGF0ZSxJPWUuX3JlYWRhYmxlU3RhdGUsQT0oKT0+e2Uud3JpdGFibGV8fEIoKX07bGV0IFQ9aihlKSYmQyhlKT09PWgmJl8oZSk9PT1SLEg9TChlLCExKTtjb25zdCBCPSgpPT57SD0hMCxlLmRlc3Ryb3llZCYmKFQ9ITEpLCghVHx8ZS5yZWFkYWJsZSYmIWgpJiYoaCYmIVZ8fG4uY2FsbChlKSl9O2xldCBWPXcoZSwhMSk7Y29uc3QgRD0oKT0+e1Y9ITAsZS5kZXN0cm95ZWQmJihUPSExKSwoIVR8fGUud3JpdGFibGUmJiFSKSYmKFImJiFIfHxuLmNhbGwoZSkpfSxaPXQ9PntuLmNhbGwoZSx0KX07bGV0ICQ9dihlKTtjb25zdCBOPSgpPT57JD0hMDtjb25zdCB0PUUoZSl8fGIoZSk7cmV0dXJuIHQmJlwiYm9vbGVhblwiIT10eXBlb2YgdD9uLmNhbGwoZSx0KTpoJiYhViYmQyhlLCEwKSYmIXcoZSwhMSk/bi5jYWxsKGUsbmV3IGwpOiFSfHxIfHxMKGUsITEpP3ZvaWQgbi5jYWxsKGUpOm4uY2FsbChlLG5ldyBsKX0sRj0oKT0+eyQ9ITA7Y29uc3QgdD1FKGUpfHxiKGUpO2lmKHQmJlwiYm9vbGVhblwiIT10eXBlb2YgdClyZXR1cm4gbi5jYWxsKGUsdCk7bi5jYWxsKGUpfSxVPSgpPT57ZS5yZXEub24oXCJmaW5pc2hcIixCKX07IWZ1bmN0aW9uKGUpe3JldHVybiBlLnNldEhlYWRlciYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5hYm9ydH0oZSk/UiYmIVAmJihlLm9uKFwiZW5kXCIsQSksZS5vbihcImNsb3NlXCIsQSkpOihlLm9uKFwiY29tcGxldGVcIixCKSxUfHxlLm9uKFwiYWJvcnRcIixOKSxlLnJlcT9VKCk6ZS5vbihcInJlcXVlc3RcIixVKSksVHx8XCJib29sZWFuXCIhPXR5cGVvZiBlLmFib3J0ZWR8fGUub24oXCJhYm9ydGVkXCIsTiksZS5vbihcImVuZFwiLEQpLGUub24oXCJmaW5pc2hcIixCKSwhMSE9PXQuZXJyb3ImJmUub24oXCJlcnJvclwiLFopLGUub24oXCJjbG9zZVwiLE4pLCQ/ci5uZXh0VGljayhOKTpudWxsIT1QJiZQLmVycm9yRW1pdHRlZHx8bnVsbCE9SSYmSS5lcnJvckVtaXR0ZWQ/VHx8ci5uZXh0VGljayhGKTooaHx8VCYmIW0oZSl8fCFIJiYhMSE9PXgoZSkpJiYoUnx8VCYmIXgoZSl8fCFWJiYhMSE9PW0oZSkpP0kmJmUucmVxJiZlLmFib3J0ZWQmJnIubmV4dFRpY2soRik6ci5uZXh0VGljayhGKTtjb25zdCBXPSgpPT57bj1rLGUucmVtb3ZlTGlzdGVuZXIoXCJhYm9ydGVkXCIsTiksZS5yZW1vdmVMaXN0ZW5lcihcImNvbXBsZXRlXCIsQiksZS5yZW1vdmVMaXN0ZW5lcihcImFib3J0XCIsTiksZS5yZW1vdmVMaXN0ZW5lcihcInJlcXVlc3RcIixVKSxlLnJlcSYmZS5yZXEucmVtb3ZlTGlzdGVuZXIoXCJmaW5pc2hcIixCKSxlLnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIsQSksZS5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsQSksZS5yZW1vdmVMaXN0ZW5lcihcImZpbmlzaFwiLEIpLGUucmVtb3ZlTGlzdGVuZXIoXCJlbmRcIixEKSxlLnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIixaKSxlLnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIixOKX07aWYodC5zaWduYWwmJiEkKXtjb25zdCBpPSgpPT57Y29uc3Qgcj1uO1coKSxyLmNhbGwoZSxuZXcgbyh2b2lkIDAse2NhdXNlOnQuc2lnbmFsLnJlYXNvbn0pKX07aWYodC5zaWduYWwuYWJvcnRlZClyLm5leHRUaWNrKGkpO2Vsc2V7Y29uc3Qgcj1uO249YygoKC4uLm4pPT57dC5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsaSksci5hcHBseShlLG4pfSkpLHQuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLGkpfX1yZXR1cm4gV31lLmV4cG9ydHM9UixlLmV4cG9ydHMuZmluaXNoZWQ9ZnVuY3Rpb24oZSx0KXt2YXIgbjtsZXQgcj0hMTtyZXR1cm4gbnVsbD09PXQmJih0PXMpLG51bGwhPT0obj10KSYmdm9pZCAwIT09biYmbi5jbGVhbnVwJiYocCh0LmNsZWFudXAsXCJjbGVhbnVwXCIpLHI9dC5jbGVhbnVwKSxuZXcgaCgoKG4sbyk9Pntjb25zdCBpPVIoZSx0LChlPT57ciYmaSgpLGU/byhlKTpuKCl9KSl9KSl9fSw5MTM6KGUsdCxuKT0+e2NvbnN0IHI9big1MzMpLHtQcm9taXNlUHJvdG90eXBlVGhlbjpvLFN5bWJvbEFzeW5jSXRlcmF0b3I6aSxTeW1ib2xJdGVyYXRvcjphfT1uKDE5MSkse0J1ZmZlcjpsfT1uKDQ4NSkse0VSUl9JTlZBTElEX0FSR19UWVBFOnMsRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUzpjfT1uKDE0MSkuY29kZXM7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtsZXQgdSxmO2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0fHx0IGluc3RhbmNlb2YgbClyZXR1cm4gbmV3IGUoe29iamVjdE1vZGU6ITAsLi4ubixyZWFkKCl7dGhpcy5wdXNoKHQpLHRoaXMucHVzaChudWxsKX19KTtpZih0JiZ0W2ldKWY9ITAsdT10W2ldKCk7ZWxzZXtpZighdHx8IXRbYV0pdGhyb3cgbmV3IHMoXCJpdGVyYWJsZVwiLFtcIkl0ZXJhYmxlXCJdLHQpO2Y9ITEsdT10W2FdKCl9Y29uc3QgZD1uZXcgZSh7b2JqZWN0TW9kZTohMCxoaWdoV2F0ZXJNYXJrOjEsLi4ubn0pO2xldCBwPSExO3JldHVybiBkLl9yZWFkPWZ1bmN0aW9uKCl7cHx8KHA9ITAsYXN5bmMgZnVuY3Rpb24oKXtmb3IoOzspe3RyeXtjb25zdHt2YWx1ZTplLGRvbmU6dH09Zj9hd2FpdCB1Lm5leHQoKTp1Lm5leHQoKTtpZih0KWQucHVzaChudWxsKTtlbHNle2NvbnN0IHQ9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS50aGVuP2F3YWl0IGU6ZTtpZihudWxsPT09dCl0aHJvdyBwPSExLG5ldyBjO2lmKGQucHVzaCh0KSljb250aW51ZTtwPSExfX1jYXRjaChlKXtkLmRlc3Ryb3koZSl9YnJlYWt9fSgpKX0sZC5fZGVzdHJveT1mdW5jdGlvbihlLHQpe28oYXN5bmMgZnVuY3Rpb24oZSl7Y29uc3QgdD1udWxsIT1lLG49XCJmdW5jdGlvblwiPT10eXBlb2YgdS50aHJvdztpZih0JiZuKXtjb25zdHt2YWx1ZTp0LGRvbmU6bn09YXdhaXQgdS50aHJvdyhlKTtpZihhd2FpdCB0LG4pcmV0dXJufWlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHUucmV0dXJuKXtjb25zdHt2YWx1ZTplfT1hd2FpdCB1LnJldHVybigpO2F3YWl0IGV9fShlKSwoKCk9PnIubmV4dFRpY2sodCxlKSksKG49PnIubmV4dFRpY2sodCxufHxlKSkpfSxkfX0sMjAwOihlLHQsbik9Pntjb25zdHtBcnJheUlzQXJyYXk6cixPYmplY3RTZXRQcm90b3R5cGVPZjpvfT1uKDE5MSkse0V2ZW50RW1pdHRlcjppfT1uKDQ2NSk7ZnVuY3Rpb24gYShlKXtpLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBsKGUsdCxuKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnByZXBlbmRMaXN0ZW5lcilyZXR1cm4gZS5wcmVwZW5kTGlzdGVuZXIodCxuKTtlLl9ldmVudHMmJmUuX2V2ZW50c1t0XT9yKGUuX2V2ZW50c1t0XSk/ZS5fZXZlbnRzW3RdLnVuc2hpZnQobik6ZS5fZXZlbnRzW3RdPVtuLGUuX2V2ZW50c1t0XV06ZS5vbih0LG4pfW8oYS5wcm90b3R5cGUsaS5wcm90b3R5cGUpLG8oYSxpKSxhLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj10aGlzO2Z1bmN0aW9uIHIodCl7ZS53cml0YWJsZSYmITE9PT1lLndyaXRlKHQpJiZuLnBhdXNlJiZuLnBhdXNlKCl9ZnVuY3Rpb24gbygpe24ucmVhZGFibGUmJm4ucmVzdW1lJiZuLnJlc3VtZSgpfW4ub24oXCJkYXRhXCIsciksZS5vbihcImRyYWluXCIsbyksZS5faXNTdGRpb3x8dCYmITE9PT10LmVuZHx8KG4ub24oXCJlbmRcIixzKSxuLm9uKFwiY2xvc2VcIixjKSk7bGV0IGE9ITE7ZnVuY3Rpb24gcygpe2F8fChhPSEwLGUuZW5kKCkpfWZ1bmN0aW9uIGMoKXthfHwoYT0hMCxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmRlc3Ryb3kmJmUuZGVzdHJveSgpKX1mdW5jdGlvbiB1KGUpe2YoKSwwPT09aS5saXN0ZW5lckNvdW50KHRoaXMsXCJlcnJvclwiKSYmdGhpcy5lbWl0KFwiZXJyb3JcIixlKX1mdW5jdGlvbiBmKCl7bi5yZW1vdmVMaXN0ZW5lcihcImRhdGFcIixyKSxlLnJlbW92ZUxpc3RlbmVyKFwiZHJhaW5cIixvKSxuLnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIscyksbi5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsYyksbi5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsdSksZS5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsdSksbi5yZW1vdmVMaXN0ZW5lcihcImVuZFwiLGYpLG4ucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLGYpLGUucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLGYpfXJldHVybiBsKG4sXCJlcnJvclwiLHUpLGwoZSxcImVycm9yXCIsdSksbi5vbihcImVuZFwiLGYpLG4ub24oXCJjbG9zZVwiLGYpLGUub24oXCJjbG9zZVwiLGYpLGUuZW1pdChcInBpcGVcIixuKSxlfSxlLmV4cG9ydHM9e1N0cmVhbTphLHByZXBlbmRMaXN0ZW5lcjpsfX0sNTU0OihlLHQsbik9Pntjb25zdCByPWdsb2JhbFRoaXMuQWJvcnRDb250cm9sbGVyfHxuKDg3NikuQWJvcnRDb250cm9sbGVyLHtjb2Rlczp7RVJSX0lOVkFMSURfQVJHX1ZBTFVFOm8sRVJSX0lOVkFMSURfQVJHX1RZUEU6aSxFUlJfTUlTU0lOR19BUkdTOmEsRVJSX09VVF9PRl9SQU5HRTpsfSxBYm9ydEVycm9yOnN9PW4oMTQxKSx7dmFsaWRhdGVBYm9ydFNpZ25hbDpjLHZhbGlkYXRlSW50ZWdlcjp1LHZhbGlkYXRlT2JqZWN0OmZ9PW4oOTA0KSxkPW4oMTkxKS5TeW1ib2woXCJrV2Vha1wiKSx7ZmluaXNoZWQ6cH09big4NiksaD1uKDgxOCkse2FkZEFib3J0U2lnbmFsTm9WYWxpZGF0ZTpnfT1uKDM3NCkse2lzV3JpdGFibGU6dixpc05vZGVTdHJlYW06bX09bigxMzIpLHtBcnJheVByb3RvdHlwZVB1c2g6QyxNYXRoRmxvb3I6eSxOdW1iZXI6dyxOdW1iZXJJc05hTjpiLFByb21pc2U6eCxQcm9taXNlUmVqZWN0Ol8sUHJvbWlzZVByb3RvdHlwZVRoZW46TyxTeW1ib2w6TH09bigxOTEpLEU9TChcImtFbXB0eVwiKSxTPUwoXCJrRW9mXCIpO2Z1bmN0aW9uIGooZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBpKFwiZm5cIixbXCJGdW5jdGlvblwiLFwiQXN5bmNGdW5jdGlvblwiXSxlKTtudWxsIT10JiZmKHQsXCJvcHRpb25zXCIpLG51bGwhPShudWxsPT10P3ZvaWQgMDp0LnNpZ25hbCkmJmModC5zaWduYWwsXCJvcHRpb25zLnNpZ25hbFwiKTtsZXQgbj0xO3JldHVybiBudWxsIT0obnVsbD09dD92b2lkIDA6dC5jb25jdXJyZW5jeSkmJihuPXkodC5jb25jdXJyZW5jeSkpLHUobixcImNvbmN1cnJlbmN5XCIsMSksYXN5bmMgZnVuY3Rpb24qKCl7dmFyIG8saTtjb25zdCBhPW5ldyByLGw9dGhpcyxjPVtdLHU9YS5zaWduYWwsZj17c2lnbmFsOnV9LGQ9KCk9PmEuYWJvcnQoKTtsZXQgcCxoO251bGwhPXQmJm51bGwhPT0obz10LnNpZ25hbCkmJnZvaWQgMCE9PW8mJm8uYWJvcnRlZCYmZCgpLG51bGw9PXR8fG51bGw9PT0oaT10LnNpZ25hbCl8fHZvaWQgMD09PWl8fGkuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsZCk7bGV0IGc9ITE7ZnVuY3Rpb24gdigpe2c9ITB9IWFzeW5jIGZ1bmN0aW9uKCl7dHJ5e2ZvciBhd2FpdChsZXQgdCBvZiBsKXt2YXIgcjtpZihnKXJldHVybjtpZih1LmFib3J0ZWQpdGhyb3cgbmV3IHM7dHJ5e3Q9ZSh0LGYpfWNhdGNoKGUpe3Q9XyhlKX10IT09RSYmKFwiZnVuY3Rpb25cIj09dHlwZW9mKG51bGw9PT0ocj10KXx8dm9pZCAwPT09cj92b2lkIDA6ci5jYXRjaCkmJnQuY2F0Y2godiksYy5wdXNoKHQpLHAmJihwKCkscD1udWxsKSwhZyYmYy5sZW5ndGgmJmMubGVuZ3RoPj1uJiZhd2FpdCBuZXcgeCgoZT0+e2g9ZX0pKSl9Yy5wdXNoKFMpfWNhdGNoKGUpe2NvbnN0IHQ9XyhlKTtPKHQsdm9pZCAwLHYpLGMucHVzaCh0KX1maW5hbGx5e3ZhciBvO2c9ITAscCYmKHAoKSxwPW51bGwpLG51bGw9PXR8fG51bGw9PT0obz10LnNpZ25hbCl8fHZvaWQgMD09PW98fG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsZCl9fSgpO3RyeXtmb3IoOzspe2Zvcig7Yy5sZW5ndGg+MDspe2NvbnN0IGU9YXdhaXQgY1swXTtpZihlPT09UylyZXR1cm47aWYodS5hYm9ydGVkKXRocm93IG5ldyBzO2UhPT1FJiYoeWllbGQgZSksYy5zaGlmdCgpLGgmJihoKCksaD1udWxsKX1hd2FpdCBuZXcgeCgoZT0+e3A9ZX0pKX19ZmluYWxseXthLmFib3J0KCksZz0hMCxoJiYoaCgpLGg9bnVsbCl9fS5jYWxsKHRoaXMpfWFzeW5jIGZ1bmN0aW9uIE0oZSx0PXZvaWQgMCl7Zm9yIGF3YWl0KGNvbnN0IG4gb2Ygay5jYWxsKHRoaXMsZSx0KSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBrKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgaShcImZuXCIsW1wiRnVuY3Rpb25cIixcIkFzeW5jRnVuY3Rpb25cIl0sZSk7cmV0dXJuIGouY2FsbCh0aGlzLChhc3luYyBmdW5jdGlvbih0LG4pe3JldHVybiBhd2FpdCBlKHQsbik/dDpFfSksdCl9Y2xhc3MgUiBleHRlbmRzIGF7Y29uc3RydWN0b3IoKXtzdXBlcihcInJlZHVjZVwiKSx0aGlzLm1lc3NhZ2U9XCJSZWR1Y2Ugb2YgYW4gZW1wdHkgc3RyZWFtIHJlcXVpcmVzIGFuIGluaXRpYWwgdmFsdWVcIn19ZnVuY3Rpb24gUChlKXtpZihlPXcoZSksYihlKSlyZXR1cm4gMDtpZihlPDApdGhyb3cgbmV3IGwoXCJudW1iZXJcIixcIj49IDBcIixlKTtyZXR1cm4gZX1lLmV4cG9ydHMuc3RyZWFtUmV0dXJuaW5nT3BlcmF0b3JzPXthc0luZGV4ZWRQYWlyczpmdW5jdGlvbihlPXZvaWQgMCl7cmV0dXJuIG51bGwhPWUmJmYoZSxcIm9wdGlvbnNcIiksbnVsbCE9KG51bGw9PWU/dm9pZCAwOmUuc2lnbmFsKSYmYyhlLnNpZ25hbCxcIm9wdGlvbnMuc2lnbmFsXCIpLGFzeW5jIGZ1bmN0aW9uKigpe2xldCB0PTA7Zm9yIGF3YWl0KGNvbnN0IHIgb2YgdGhpcyl7dmFyIG47aWYobnVsbCE9ZSYmbnVsbCE9PShuPWUuc2lnbmFsKSYmdm9pZCAwIT09biYmbi5hYm9ydGVkKXRocm93IG5ldyBzKHtjYXVzZTplLnNpZ25hbC5yZWFzb259KTt5aWVsZFt0Kysscl19fS5jYWxsKHRoaXMpfSxkcm9wOmZ1bmN0aW9uKGUsdD12b2lkIDApe3JldHVybiBudWxsIT10JiZmKHQsXCJvcHRpb25zXCIpLG51bGwhPShudWxsPT10P3ZvaWQgMDp0LnNpZ25hbCkmJmModC5zaWduYWwsXCJvcHRpb25zLnNpZ25hbFwiKSxlPVAoZSksYXN5bmMgZnVuY3Rpb24qKCl7dmFyIG47aWYobnVsbCE9dCYmbnVsbCE9PShuPXQuc2lnbmFsKSYmdm9pZCAwIT09biYmbi5hYm9ydGVkKXRocm93IG5ldyBzO2ZvciBhd2FpdChjb25zdCBuIG9mIHRoaXMpe3ZhciByO2lmKG51bGwhPXQmJm51bGwhPT0ocj10LnNpZ25hbCkmJnZvaWQgMCE9PXImJnIuYWJvcnRlZCl0aHJvdyBuZXcgcztlLS08PTAmJih5aWVsZCBuKX19LmNhbGwodGhpcyl9LGZpbHRlcjprLGZsYXRNYXA6ZnVuY3Rpb24oZSx0KXtjb25zdCBuPWouY2FsbCh0aGlzLGUsdCk7cmV0dXJuIGFzeW5jIGZ1bmN0aW9uKigpe2ZvciBhd2FpdChjb25zdCBlIG9mIG4peWllbGQqZX0uY2FsbCh0aGlzKX0sbWFwOmosdGFrZTpmdW5jdGlvbihlLHQ9dm9pZCAwKXtyZXR1cm4gbnVsbCE9dCYmZih0LFwib3B0aW9uc1wiKSxudWxsIT0obnVsbD09dD92b2lkIDA6dC5zaWduYWwpJiZjKHQuc2lnbmFsLFwib3B0aW9ucy5zaWduYWxcIiksZT1QKGUpLGFzeW5jIGZ1bmN0aW9uKigpe3ZhciBuO2lmKG51bGwhPXQmJm51bGwhPT0obj10LnNpZ25hbCkmJnZvaWQgMCE9PW4mJm4uYWJvcnRlZCl0aHJvdyBuZXcgcztmb3IgYXdhaXQoY29uc3QgbiBvZiB0aGlzKXt2YXIgcjtpZihudWxsIT10JiZudWxsIT09KHI9dC5zaWduYWwpJiZ2b2lkIDAhPT1yJiZyLmFib3J0ZWQpdGhyb3cgbmV3IHM7aWYoIShlLS0gPjApKXJldHVybjt5aWVsZCBufX0uY2FsbCh0aGlzKX0sY29tcG9zZTpmdW5jdGlvbihlLHQpe2lmKG51bGwhPXQmJmYodCxcIm9wdGlvbnNcIiksbnVsbCE9KG51bGw9PXQ/dm9pZCAwOnQuc2lnbmFsKSYmYyh0LnNpZ25hbCxcIm9wdGlvbnMuc2lnbmFsXCIpLG0oZSkmJiF2KGUpKXRocm93IG5ldyBvKFwic3RyZWFtXCIsZSxcIm11c3QgYmUgd3JpdGFibGVcIik7Y29uc3Qgbj1oKHRoaXMsZSk7cmV0dXJuIG51bGwhPXQmJnQuc2lnbmFsJiZnKHQuc2lnbmFsLG4pLG59fSxlLmV4cG9ydHMucHJvbWlzZVJldHVybmluZ09wZXJhdG9ycz17ZXZlcnk6YXN5bmMgZnVuY3Rpb24oZSx0PXZvaWQgMCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgaShcImZuXCIsW1wiRnVuY3Rpb25cIixcIkFzeW5jRnVuY3Rpb25cIl0sZSk7cmV0dXJuIWF3YWl0IE0uY2FsbCh0aGlzLChhc3luYyguLi50KT0+IWF3YWl0IGUoLi4udCkpLHQpfSxmb3JFYWNoOmFzeW5jIGZ1bmN0aW9uKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgaShcImZuXCIsW1wiRnVuY3Rpb25cIixcIkFzeW5jRnVuY3Rpb25cIl0sZSk7Zm9yIGF3YWl0KGNvbnN0IG4gb2Ygai5jYWxsKHRoaXMsKGFzeW5jIGZ1bmN0aW9uKHQsbil7cmV0dXJuIGF3YWl0IGUodCxuKSxFfSksdCkpO30scmVkdWNlOmFzeW5jIGZ1bmN0aW9uKGUsdCxuKXt2YXIgbztpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBpKFwicmVkdWNlclwiLFtcIkZ1bmN0aW9uXCIsXCJBc3luY0Z1bmN0aW9uXCJdLGUpO251bGwhPW4mJmYobixcIm9wdGlvbnNcIiksbnVsbCE9KG51bGw9PW4/dm9pZCAwOm4uc2lnbmFsKSYmYyhuLnNpZ25hbCxcIm9wdGlvbnMuc2lnbmFsXCIpO2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MTtpZihudWxsIT1uJiZudWxsIT09KG89bi5zaWduYWwpJiZ2b2lkIDAhPT1vJiZvLmFib3J0ZWQpe2NvbnN0IGU9bmV3IHModm9pZCAwLHtjYXVzZTpuLnNpZ25hbC5yZWFzb259KTt0aHJvdyB0aGlzLm9uY2UoXCJlcnJvclwiLCgoKT0+e30pKSxhd2FpdCBwKHRoaXMuZGVzdHJveShlKSksZX1jb25zdCBsPW5ldyByLHU9bC5zaWduYWw7aWYobnVsbCE9biYmbi5zaWduYWwpe2NvbnN0IGU9e29uY2U6ITAsW2RdOnRoaXN9O24uc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCgoKT0+bC5hYm9ydCgpKSxlKX1sZXQgaD0hMTt0cnl7Zm9yIGF3YWl0KGNvbnN0IHIgb2YgdGhpcyl7dmFyIGc7aWYoaD0hMCxudWxsIT1uJiZudWxsIT09KGc9bi5zaWduYWwpJiZ2b2lkIDAhPT1nJiZnLmFib3J0ZWQpdGhyb3cgbmV3IHM7YT90PWF3YWl0IGUodCxyLHtzaWduYWw6dX0pOih0PXIsYT0hMCl9aWYoIWgmJiFhKXRocm93IG5ldyBSfWZpbmFsbHl7bC5hYm9ydCgpfXJldHVybiB0fSx0b0FycmF5OmFzeW5jIGZ1bmN0aW9uKGUpe251bGwhPWUmJmYoZSxcIm9wdGlvbnNcIiksbnVsbCE9KG51bGw9PWU/dm9pZCAwOmUuc2lnbmFsKSYmYyhlLnNpZ25hbCxcIm9wdGlvbnMuc2lnbmFsXCIpO2NvbnN0IHQ9W107Zm9yIGF3YWl0KGNvbnN0IHIgb2YgdGhpcyl7dmFyIG47aWYobnVsbCE9ZSYmbnVsbCE9PShuPWUuc2lnbmFsKSYmdm9pZCAwIT09biYmbi5hYm9ydGVkKXRocm93IG5ldyBzKHZvaWQgMCx7Y2F1c2U6ZS5zaWduYWwucmVhc29ufSk7Qyh0LHIpfXJldHVybiB0fSxzb21lOk0sZmluZDphc3luYyBmdW5jdGlvbihlLHQpe2ZvciBhd2FpdChjb25zdCBuIG9mIGsuY2FsbCh0aGlzLGUsdCkpcmV0dXJuIG59fX0sNDY3OihlLHQsbik9Pntjb25zdHtPYmplY3RTZXRQcm90b3R5cGVPZjpyfT1uKDE5MSk7ZS5leHBvcnRzPWk7Y29uc3Qgbz1uKDIxMCk7ZnVuY3Rpb24gaShlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBpKSlyZXR1cm4gbmV3IGkoZSk7by5jYWxsKHRoaXMsZSl9cihpLnByb3RvdHlwZSxvLnByb3RvdHlwZSkscihpLG8pLGkucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oZSx0LG4pe24obnVsbCxlKX19LDc1NDooZSx0LG4pPT57Y29uc3Qgcj1uKDUzMykse0FycmF5SXNBcnJheTpvLFByb21pc2U6aSxTeW1ib2xBc3luY0l0ZXJhdG9yOmF9PW4oMTkxKSxsPW4oODYpLHtvbmNlOnN9PW4oNzc1KSxjPW4oMjMwKSx1PW4oMTgyKSx7YWdncmVnYXRlVHdvRXJyb3JzOmYsY29kZXM6e0VSUl9JTlZBTElEX0FSR19UWVBFOmQsRVJSX0lOVkFMSURfUkVUVVJOX1ZBTFVFOnAsRVJSX01JU1NJTkdfQVJHUzpoLEVSUl9TVFJFQU1fREVTVFJPWUVEOmcsRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0U6dn0sQWJvcnRFcnJvcjptfT1uKDE0MSkse3ZhbGlkYXRlRnVuY3Rpb246Qyx2YWxpZGF0ZUFib3J0U2lnbmFsOnl9PW4oOTA0KSx7aXNJdGVyYWJsZTp3LGlzUmVhZGFibGU6Yixpc1JlYWRhYmxlTm9kZVN0cmVhbTp4LGlzTm9kZVN0cmVhbTpfLGlzVHJhbnNmb3JtU3RyZWFtOk8saXNXZWJTdHJlYW06TCxpc1JlYWRhYmxlU3RyZWFtOkUsaXNSZWFkYWJsZUVuZGVkOlN9PW4oMTMyKSxqPWdsb2JhbFRoaXMuQWJvcnRDb250cm9sbGVyfHxuKDg3NikuQWJvcnRDb250cm9sbGVyO2xldCBNLGs7ZnVuY3Rpb24gUihlLHQsbil7bGV0IHI9ITE7cmV0dXJuIGUub24oXCJjbG9zZVwiLCgoKT0+e3I9ITB9KSkse2Rlc3Ryb3k6dD0+e3J8fChyPSEwLGMuZGVzdHJveWVyKGUsdHx8bmV3IGcoXCJwaXBlXCIpKSl9LGNsZWFudXA6bChlLHtyZWFkYWJsZTp0LHdyaXRhYmxlOm59LChlPT57cj0hZX0pKX19ZnVuY3Rpb24gUChlKXtpZih3KGUpKXJldHVybiBlO2lmKHgoZSkpcmV0dXJuIGFzeW5jIGZ1bmN0aW9uKihlKXtrfHwoaz1uKDg1OCkpLHlpZWxkKmsucHJvdG90eXBlW2FdLmNhbGwoZSl9KGUpO3Rocm93IG5ldyBkKFwidmFsXCIsW1wiUmVhZGFibGVcIixcIkl0ZXJhYmxlXCIsXCJBc3luY0l0ZXJhYmxlXCJdLGUpfWFzeW5jIGZ1bmN0aW9uIEkoZSx0LG4se2VuZDpyfSl7bGV0IG8sYT1udWxsO2NvbnN0IHM9ZT0+e2lmKGUmJihvPWUpLGEpe2NvbnN0IGU9YTthPW51bGwsZSgpfX0sYz0oKT0+bmV3IGkoKChlLHQpPT57bz90KG8pOmE9KCk9PntvP3Qobyk6ZSgpfX0pKTt0Lm9uKFwiZHJhaW5cIixzKTtjb25zdCB1PWwodCx7cmVhZGFibGU6ITF9LHMpO3RyeXt0LndyaXRhYmxlTmVlZERyYWluJiZhd2FpdCBjKCk7Zm9yIGF3YWl0KGNvbnN0IG4gb2YgZSl0LndyaXRlKG4pfHxhd2FpdCBjKCk7ciYmdC5lbmQoKSxhd2FpdCBjKCksbigpfWNhdGNoKGUpe24obyE9PWU/ZihvLGUpOmUpfWZpbmFsbHl7dSgpLHQub2ZmKFwiZHJhaW5cIixzKX19YXN5bmMgZnVuY3Rpb24gQShlLHQsbix7ZW5kOnJ9KXtPKHQpJiYodD10LndyaXRhYmxlKTtjb25zdCBvPXQuZ2V0V3JpdGVyKCk7dHJ5e2ZvciBhd2FpdChjb25zdCB0IG9mIGUpYXdhaXQgby5yZWFkeSxvLndyaXRlKHQpLmNhdGNoKCgoKT0+e30pKTthd2FpdCBvLnJlYWR5LHImJmF3YWl0IG8uY2xvc2UoKSxuKCl9Y2F0Y2goZSl7dHJ5e2F3YWl0IG8uYWJvcnQoZSksbihlKX1jYXRjaChlKXtuKGUpfX19ZnVuY3Rpb24gVChlLHQsaSl7aWYoMT09PWUubGVuZ3RoJiZvKGVbMF0pJiYoZT1lWzBdKSxlLmxlbmd0aDwyKXRocm93IG5ldyBoKFwic3RyZWFtc1wiKTtjb25zdCBhPW5ldyBqLGw9YS5zaWduYWwscz1udWxsPT1pP3ZvaWQgMDppLnNpZ25hbCxjPVtdO2Z1bmN0aW9uIGYoKXtCKG5ldyBtKX1sZXQgZyx2O3kocyxcIm9wdGlvbnMuc2lnbmFsXCIpLG51bGw9PXN8fHMuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsZik7Y29uc3QgQz1bXTtsZXQgUyxrPTA7ZnVuY3Rpb24gVChlKXtCKGUsMD09LS1rKX1mdW5jdGlvbiBCKGUsbil7aWYoIWV8fGcmJlwiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0VcIiE9PWcuY29kZXx8KGc9ZSksZ3x8bil7Zm9yKDtDLmxlbmd0aDspQy5zaGlmdCgpKGcpO251bGw9PXN8fHMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsZiksYS5hYm9ydCgpLG4mJihnfHxjLmZvckVhY2goKGU9PmUoKSkpLHIubmV4dFRpY2sodCxnLHYpKX19Zm9yKGxldCBaPTA7WjxlLmxlbmd0aDtaKyspe2NvbnN0ICQ9ZVtaXSxOPVo8ZS5sZW5ndGgtMSxGPVo+MCxVPU58fCExIT09KG51bGw9PWk/dm9pZCAwOmkuZW5kKSxXPVo9PT1lLmxlbmd0aC0xO2lmKF8oJCkpe2lmKFUpe2NvbnN0e2Rlc3Ryb3k6RyxjbGVhbnVwOnF9PVIoJCxOLEYpO0MucHVzaChHKSxiKCQpJiZXJiZjLnB1c2gocSl9ZnVuY3Rpb24geihlKXtlJiZcIkFib3J0RXJyb3JcIiE9PWUubmFtZSYmXCJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRVwiIT09ZS5jb2RlJiZUKGUpfSQub24oXCJlcnJvclwiLHopLGIoJCkmJlcmJmMucHVzaCgoKCk9PnskLnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIix6KX0pKX1pZigwPT09WilpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiAkKXtpZihTPSQoe3NpZ25hbDpsfSksIXcoUykpdGhyb3cgbmV3IHAoXCJJdGVyYWJsZSwgQXN5bmNJdGVyYWJsZSBvciBTdHJlYW1cIixcInNvdXJjZVwiLFMpfWVsc2UgUz13KCQpfHx4KCQpfHxPKCQpPyQ6dS5mcm9tKCQpO2Vsc2UgaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgJCl7dmFyIFY7aWYoUz1PKFMpP1AobnVsbD09PShWPVMpfHx2b2lkIDA9PT1WP3ZvaWQgMDpWLnJlYWRhYmxlKTpQKFMpLFM9JChTLHtzaWduYWw6bH0pLE4pe2lmKCF3KFMsITApKXRocm93IG5ldyBwKFwiQXN5bmNJdGVyYWJsZVwiLGB0cmFuc2Zvcm1bJHtaLTF9XWAsUyl9ZWxzZXt2YXIgRDtNfHwoTT1uKDQ2NykpO2NvbnN0IFk9bmV3IE0oe29iamVjdE1vZGU6ITB9KSxLPW51bGw9PT0oRD1TKXx8dm9pZCAwPT09RD92b2lkIDA6RC50aGVuO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIEspaysrLEsuY2FsbChTLChlPT57dj1lLG51bGwhPWUmJlkud3JpdGUoZSksVSYmWS5lbmQoKSxyLm5leHRUaWNrKFQpfSksKGU9PntZLmRlc3Ryb3koZSksci5uZXh0VGljayhULGUpfSkpO2Vsc2UgaWYodyhTLCEwKSlrKyssSShTLFksVCx7ZW5kOlV9KTtlbHNle2lmKCFFKFMpJiYhTyhTKSl0aHJvdyBuZXcgcChcIkFzeW5jSXRlcmFibGUgb3IgUHJvbWlzZVwiLFwiZGVzdGluYXRpb25cIixTKTt7Y29uc3QgUT1TLnJlYWRhYmxlfHxTO2srKyxJKFEsWSxULHtlbmQ6VX0pfX1TPVk7Y29uc3R7ZGVzdHJveTpYLGNsZWFudXA6Sn09UihTLCExLCEwKTtDLnB1c2goWCksVyYmYy5wdXNoKEopfX1lbHNlIGlmKF8oJCkpe2lmKHgoUykpe2srPTI7Y29uc3QgZWU9SChTLCQsVCx7ZW5kOlV9KTtiKCQpJiZXJiZjLnB1c2goZWUpfWVsc2UgaWYoTyhTKXx8RShTKSl7Y29uc3QgdGU9Uy5yZWFkYWJsZXx8UztrKyssSSh0ZSwkLFQse2VuZDpVfSl9ZWxzZXtpZighdyhTKSl0aHJvdyBuZXcgZChcInZhbFwiLFtcIlJlYWRhYmxlXCIsXCJJdGVyYWJsZVwiLFwiQXN5bmNJdGVyYWJsZVwiLFwiUmVhZGFibGVTdHJlYW1cIixcIlRyYW5zZm9ybVN0cmVhbVwiXSxTKTtrKyssSShTLCQsVCx7ZW5kOlV9KX1TPSR9ZWxzZSBpZihMKCQpKXtpZih4KFMpKWsrKyxBKFAoUyksJCxULHtlbmQ6VX0pO2Vsc2UgaWYoRShTKXx8dyhTKSlrKyssQShTLCQsVCx7ZW5kOlV9KTtlbHNle2lmKCFPKFMpKXRocm93IG5ldyBkKFwidmFsXCIsW1wiUmVhZGFibGVcIixcIkl0ZXJhYmxlXCIsXCJBc3luY0l0ZXJhYmxlXCIsXCJSZWFkYWJsZVN0cmVhbVwiLFwiVHJhbnNmb3JtU3RyZWFtXCJdLFMpO2srKyxBKFMucmVhZGFibGUsJCxULHtlbmQ6VX0pfVM9JH1lbHNlIFM9dS5mcm9tKCQpfXJldHVybihudWxsIT1sJiZsLmFib3J0ZWR8fG51bGwhPXMmJnMuYWJvcnRlZCkmJnIubmV4dFRpY2soZiksU31mdW5jdGlvbiBIKGUsdCxuLHtlbmQ6b30pe2xldCBpPSExO2lmKHQub24oXCJjbG9zZVwiLCgoKT0+e2l8fG4obmV3IHYpfSkpLGUucGlwZSh0LHtlbmQ6ITF9KSxvKXtmdW5jdGlvbiBhKCl7aT0hMCx0LmVuZCgpfVMoZSk/ci5uZXh0VGljayhhKTplLm9uY2UoXCJlbmRcIixhKX1lbHNlIG4oKTtyZXR1cm4gbChlLHtyZWFkYWJsZTohMCx3cml0YWJsZTohMX0sKHQ9Pntjb25zdCByPWUuX3JlYWRhYmxlU3RhdGU7dCYmXCJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRVwiPT09dC5jb2RlJiZyJiZyLmVuZGVkJiYhci5lcnJvcmVkJiYhci5lcnJvckVtaXR0ZWQ/ZS5vbmNlKFwiZW5kXCIsbikub25jZShcImVycm9yXCIsbik6bih0KX0pKSxsKHQse3JlYWRhYmxlOiExLHdyaXRhYmxlOiEwfSxuKX1lLmV4cG9ydHM9e3BpcGVsaW5lSW1wbDpULHBpcGVsaW5lOmZ1bmN0aW9uKC4uLmUpe3JldHVybiBUKGUscyhmdW5jdGlvbihlKXtyZXR1cm4gQyhlW2UubGVuZ3RoLTFdLFwic3RyZWFtc1tzdHJlYW0ubGVuZ3RoIC0gMV1cIiksZS5wb3AoKX0oZSkpKX19fSw4NTg6KGUsdCxuKT0+e2NvbnN0IHI9big1MzMpLHtBcnJheVByb3RvdHlwZUluZGV4T2Y6byxOdW1iZXJJc0ludGVnZXI6aSxOdW1iZXJJc05hTjphLE51bWJlclBhcnNlSW50OmwsT2JqZWN0RGVmaW5lUHJvcGVydGllczpzLE9iamVjdEtleXM6YyxPYmplY3RTZXRQcm90b3R5cGVPZjp1LFByb21pc2U6ZixTYWZlU2V0OmQsU3ltYm9sQXN5bmNJdGVyYXRvcjpwLFN5bWJvbDpofT1uKDE5MSk7ZS5leHBvcnRzPUQsRC5SZWFkYWJsZVN0YXRlPVY7Y29uc3R7RXZlbnRFbWl0dGVyOmd9PW4oNDY1KSx7U3RyZWFtOnYscHJlcGVuZExpc3RlbmVyOm19PW4oMjAwKSx7QnVmZmVyOkN9PW4oNDg1KSx7YWRkQWJvcnRTaWduYWw6eX09bigzNzQpLHc9big4Nik7bGV0IGI9big3NzUpLmRlYnVnbG9nKFwic3RyZWFtXCIsKGU9PntiPWV9KSk7Y29uc3QgeD1uKDYxNiksXz1uKDIzMCkse2dldEhpZ2hXYXRlck1hcms6TyxnZXREZWZhdWx0SGlnaFdhdGVyTWFyazpMfT1uKDQ5OCkse2FnZ3JlZ2F0ZVR3b0Vycm9yczpFLGNvZGVzOntFUlJfSU5WQUxJRF9BUkdfVFlQRTpTLEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEOmosRVJSX09VVF9PRl9SQU5HRTpNLEVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0Y6ayxFUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UOlJ9fT1uKDE0MSkse3ZhbGlkYXRlT2JqZWN0OlB9PW4oOTA0KSxJPWgoXCJrUGF1c2VkXCIpLHtTdHJpbmdEZWNvZGVyOkF9PW4oNDY0KSxUPW4oOTEzKTt1KEQucHJvdG90eXBlLHYucHJvdG90eXBlKSx1KEQsdik7Y29uc3QgSD0oKT0+e30se2Vycm9yT3JEZXN0cm95OkJ9PV87ZnVuY3Rpb24gVihlLHQscil7XCJib29sZWFuXCIhPXR5cGVvZiByJiYocj10IGluc3RhbmNlb2YgbigxODIpKSx0aGlzLm9iamVjdE1vZGU9ISghZXx8IWUub2JqZWN0TW9kZSksciYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEoIWV8fCFlLnJlYWRhYmxlT2JqZWN0TW9kZSkpLHRoaXMuaGlnaFdhdGVyTWFyaz1lP08odGhpcyxlLFwicmVhZGFibGVIaWdoV2F0ZXJNYXJrXCIscik6TCghMSksdGhpcy5idWZmZXI9bmV3IHgsdGhpcy5sZW5ndGg9MCx0aGlzLnBpcGVzPVtdLHRoaXMuZmxvd2luZz1udWxsLHRoaXMuZW5kZWQ9ITEsdGhpcy5lbmRFbWl0dGVkPSExLHRoaXMucmVhZGluZz0hMSx0aGlzLmNvbnN0cnVjdGVkPSEwLHRoaXMuc3luYz0hMCx0aGlzLm5lZWRSZWFkYWJsZT0hMSx0aGlzLmVtaXR0ZWRSZWFkYWJsZT0hMSx0aGlzLnJlYWRhYmxlTGlzdGVuaW5nPSExLHRoaXMucmVzdW1lU2NoZWR1bGVkPSExLHRoaXNbSV09bnVsbCx0aGlzLmVycm9yRW1pdHRlZD0hMSx0aGlzLmVtaXRDbG9zZT0hZXx8ITEhPT1lLmVtaXRDbG9zZSx0aGlzLmF1dG9EZXN0cm95PSFlfHwhMSE9PWUuYXV0b0Rlc3Ryb3ksdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5lcnJvcmVkPW51bGwsdGhpcy5jbG9zZWQ9ITEsdGhpcy5jbG9zZUVtaXR0ZWQ9ITEsdGhpcy5kZWZhdWx0RW5jb2Rpbmc9ZSYmZS5kZWZhdWx0RW5jb2Rpbmd8fFwidXRmOFwiLHRoaXMuYXdhaXREcmFpbldyaXRlcnM9bnVsbCx0aGlzLm11bHRpQXdhaXREcmFpbj0hMSx0aGlzLnJlYWRpbmdNb3JlPSExLHRoaXMuZGF0YUVtaXR0ZWQ9ITEsdGhpcy5kZWNvZGVyPW51bGwsdGhpcy5lbmNvZGluZz1udWxsLGUmJmUuZW5jb2RpbmcmJih0aGlzLmRlY29kZXI9bmV3IEEoZS5lbmNvZGluZyksdGhpcy5lbmNvZGluZz1lLmVuY29kaW5nKX1mdW5jdGlvbiBEKGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEQpKXJldHVybiBuZXcgRChlKTtjb25zdCB0PXRoaXMgaW5zdGFuY2VvZiBuKDE4Mik7dGhpcy5fcmVhZGFibGVTdGF0ZT1uZXcgVihlLHRoaXMsdCksZSYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUucmVhZCYmKHRoaXMuX3JlYWQ9ZS5yZWFkKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PWUuZGVzdHJveSksXCJmdW5jdGlvblwiPT10eXBlb2YgZS5jb25zdHJ1Y3QmJih0aGlzLl9jb25zdHJ1Y3Q9ZS5jb25zdHJ1Y3QpLGUuc2lnbmFsJiYhdCYmeShlLnNpZ25hbCx0aGlzKSksdi5jYWxsKHRoaXMsZSksXy5jb25zdHJ1Y3QodGhpcywoKCk9Pnt0aGlzLl9yZWFkYWJsZVN0YXRlLm5lZWRSZWFkYWJsZSYmVyh0aGlzLHRoaXMuX3JlYWRhYmxlU3RhdGUpfSkpfWZ1bmN0aW9uIFooZSx0LG4scil7YihcInJlYWRhYmxlQWRkQ2h1bmtcIix0KTtjb25zdCBvPWUuX3JlYWRhYmxlU3RhdGU7bGV0IGk7aWYoby5vYmplY3RNb2RlfHwoXCJzdHJpbmdcIj09dHlwZW9mIHQ/KG49bnx8by5kZWZhdWx0RW5jb2Rpbmcsby5lbmNvZGluZyE9PW4mJihyJiZvLmVuY29kaW5nP3Q9Qy5mcm9tKHQsbikudG9TdHJpbmcoby5lbmNvZGluZyk6KHQ9Qy5mcm9tKHQsbiksbj1cIlwiKSkpOnQgaW5zdGFuY2VvZiBDP249XCJcIjp2Ll9pc1VpbnQ4QXJyYXkodCk/KHQ9di5fdWludDhBcnJheVRvQnVmZmVyKHQpLG49XCJcIik6bnVsbCE9dCYmKGk9bmV3IFMoXCJjaHVua1wiLFtcInN0cmluZ1wiLFwiQnVmZmVyXCIsXCJVaW50OEFycmF5XCJdLHQpKSksaSlCKGUsaSk7ZWxzZSBpZihudWxsPT09dClvLnJlYWRpbmc9ITEsZnVuY3Rpb24oZSx0KXtpZihiKFwib25Fb2ZDaHVua1wiKSwhdC5lbmRlZCl7aWYodC5kZWNvZGVyKXtjb25zdCBlPXQuZGVjb2Rlci5lbmQoKTtlJiZlLmxlbmd0aCYmKHQuYnVmZmVyLnB1c2goZSksdC5sZW5ndGgrPXQub2JqZWN0TW9kZT8xOmUubGVuZ3RoKX10LmVuZGVkPSEwLHQuc3luYz9GKGUpOih0Lm5lZWRSZWFkYWJsZT0hMSx0LmVtaXR0ZWRSZWFkYWJsZT0hMCxVKGUpKX19KGUsbyk7ZWxzZSBpZihvLm9iamVjdE1vZGV8fHQmJnQubGVuZ3RoPjApaWYocilpZihvLmVuZEVtaXR0ZWQpQihlLG5ldyBSKTtlbHNle2lmKG8uZGVzdHJveWVkfHxvLmVycm9yZWQpcmV0dXJuITE7JChlLG8sdCwhMCl9ZWxzZSBpZihvLmVuZGVkKUIoZSxuZXcgayk7ZWxzZXtpZihvLmRlc3Ryb3llZHx8by5lcnJvcmVkKXJldHVybiExO28ucmVhZGluZz0hMSxvLmRlY29kZXImJiFuPyh0PW8uZGVjb2Rlci53cml0ZSh0KSxvLm9iamVjdE1vZGV8fDAhPT10Lmxlbmd0aD8kKGUsbyx0LCExKTpXKGUsbykpOiQoZSxvLHQsITEpfWVsc2Ugcnx8KG8ucmVhZGluZz0hMSxXKGUsbykpO3JldHVybiFvLmVuZGVkJiYoby5sZW5ndGg8by5oaWdoV2F0ZXJNYXJrfHwwPT09by5sZW5ndGgpfWZ1bmN0aW9uICQoZSx0LG4scil7dC5mbG93aW5nJiYwPT09dC5sZW5ndGgmJiF0LnN5bmMmJmUubGlzdGVuZXJDb3VudChcImRhdGFcIik+MD8odC5tdWx0aUF3YWl0RHJhaW4/dC5hd2FpdERyYWluV3JpdGVycy5jbGVhcigpOnQuYXdhaXREcmFpbldyaXRlcnM9bnVsbCx0LmRhdGFFbWl0dGVkPSEwLGUuZW1pdChcImRhdGFcIixuKSk6KHQubGVuZ3RoKz10Lm9iamVjdE1vZGU/MTpuLmxlbmd0aCxyP3QuYnVmZmVyLnVuc2hpZnQobik6dC5idWZmZXIucHVzaChuKSx0Lm5lZWRSZWFkYWJsZSYmRihlKSksVyhlLHQpfWZ1bmN0aW9uIE4oZSx0KXtyZXR1cm4gZTw9MHx8MD09PXQubGVuZ3RoJiZ0LmVuZGVkPzA6dC5vYmplY3RNb2RlPzE6YShlKT90LmZsb3dpbmcmJnQubGVuZ3RoP3QuYnVmZmVyLmZpcnN0KCkubGVuZ3RoOnQubGVuZ3RoOmU8PXQubGVuZ3RoP2U6dC5lbmRlZD90Lmxlbmd0aDowfWZ1bmN0aW9uIEYoZSl7Y29uc3QgdD1lLl9yZWFkYWJsZVN0YXRlO2IoXCJlbWl0UmVhZGFibGVcIix0Lm5lZWRSZWFkYWJsZSx0LmVtaXR0ZWRSZWFkYWJsZSksdC5uZWVkUmVhZGFibGU9ITEsdC5lbWl0dGVkUmVhZGFibGV8fChiKFwiZW1pdFJlYWRhYmxlXCIsdC5mbG93aW5nKSx0LmVtaXR0ZWRSZWFkYWJsZT0hMCxyLm5leHRUaWNrKFUsZSkpfWZ1bmN0aW9uIFUoZSl7Y29uc3QgdD1lLl9yZWFkYWJsZVN0YXRlO2IoXCJlbWl0UmVhZGFibGVfXCIsdC5kZXN0cm95ZWQsdC5sZW5ndGgsdC5lbmRlZCksdC5kZXN0cm95ZWR8fHQuZXJyb3JlZHx8IXQubGVuZ3RoJiYhdC5lbmRlZHx8KGUuZW1pdChcInJlYWRhYmxlXCIpLHQuZW1pdHRlZFJlYWRhYmxlPSExKSx0Lm5lZWRSZWFkYWJsZT0hdC5mbG93aW5nJiYhdC5lbmRlZCYmdC5sZW5ndGg8PXQuaGlnaFdhdGVyTWFyayxLKGUpfWZ1bmN0aW9uIFcoZSx0KXshdC5yZWFkaW5nTW9yZSYmdC5jb25zdHJ1Y3RlZCYmKHQucmVhZGluZ01vcmU9ITAsci5uZXh0VGljayh6LGUsdCkpfWZ1bmN0aW9uIHooZSx0KXtmb3IoOyF0LnJlYWRpbmcmJiF0LmVuZGVkJiYodC5sZW5ndGg8dC5oaWdoV2F0ZXJNYXJrfHx0LmZsb3dpbmcmJjA9PT10Lmxlbmd0aCk7KXtjb25zdCBuPXQubGVuZ3RoO2lmKGIoXCJtYXliZVJlYWRNb3JlIHJlYWQgMFwiKSxlLnJlYWQoMCksbj09PXQubGVuZ3RoKWJyZWFrfXQucmVhZGluZ01vcmU9ITF9ZnVuY3Rpb24gRyhlKXtjb25zdCB0PWUuX3JlYWRhYmxlU3RhdGU7dC5yZWFkYWJsZUxpc3RlbmluZz1lLmxpc3RlbmVyQ291bnQoXCJyZWFkYWJsZVwiKT4wLHQucmVzdW1lU2NoZWR1bGVkJiYhMT09PXRbSV0/dC5mbG93aW5nPSEwOmUubGlzdGVuZXJDb3VudChcImRhdGFcIik+MD9lLnJlc3VtZSgpOnQucmVhZGFibGVMaXN0ZW5pbmd8fCh0LmZsb3dpbmc9bnVsbCl9ZnVuY3Rpb24gcShlKXtiKFwicmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwXCIpLGUucmVhZCgwKX1mdW5jdGlvbiBZKGUsdCl7YihcInJlc3VtZVwiLHQucmVhZGluZyksdC5yZWFkaW5nfHxlLnJlYWQoMCksdC5yZXN1bWVTY2hlZHVsZWQ9ITEsZS5lbWl0KFwicmVzdW1lXCIpLEsoZSksdC5mbG93aW5nJiYhdC5yZWFkaW5nJiZlLnJlYWQoMCl9ZnVuY3Rpb24gSyhlKXtjb25zdCB0PWUuX3JlYWRhYmxlU3RhdGU7Zm9yKGIoXCJmbG93XCIsdC5mbG93aW5nKTt0LmZsb3dpbmcmJm51bGwhPT1lLnJlYWQoKTspO31mdW5jdGlvbiBYKGUsdCl7XCJmdW5jdGlvblwiIT10eXBlb2YgZS5yZWFkJiYoZT1ELndyYXAoZSx7b2JqZWN0TW9kZTohMH0pKTtjb25zdCBuPWFzeW5jIGZ1bmN0aW9uKihlLHQpe2xldCBuLHI9SDtmdW5jdGlvbiBvKHQpe3RoaXM9PT1lPyhyKCkscj1IKTpyPXR9ZS5vbihcInJlYWRhYmxlXCIsbyk7Y29uc3QgaT13KGUse3dyaXRhYmxlOiExfSwoZT0+e249ZT9FKG4sZSk6bnVsbCxyKCkscj1IfSkpO3RyeXtmb3IoOzspe2NvbnN0IHQ9ZS5kZXN0cm95ZWQ/bnVsbDplLnJlYWQoKTtpZihudWxsIT09dCl5aWVsZCB0O2Vsc2V7aWYobil0aHJvdyBuO2lmKG51bGw9PT1uKXJldHVybjthd2FpdCBuZXcgZihvKX19fWNhdGNoKGUpe3Rocm93IG49RShuLGUpLG59ZmluYWxseXshbiYmITE9PT0obnVsbD09dD92b2lkIDA6dC5kZXN0cm95T25SZXR1cm4pfHx2b2lkIDAhPT1uJiYhZS5fcmVhZGFibGVTdGF0ZS5hdXRvRGVzdHJveT8oZS5vZmYoXCJyZWFkYWJsZVwiLG8pLGkoKSk6Xy5kZXN0cm95ZXIoZSxudWxsKX19KGUsdCk7cmV0dXJuIG4uc3RyZWFtPWUsbn1mdW5jdGlvbiBKKGUsdCl7aWYoMD09PXQubGVuZ3RoKXJldHVybiBudWxsO2xldCBuO3JldHVybiB0Lm9iamVjdE1vZGU/bj10LmJ1ZmZlci5zaGlmdCgpOiFlfHxlPj10Lmxlbmd0aD8obj10LmRlY29kZXI/dC5idWZmZXIuam9pbihcIlwiKToxPT09dC5idWZmZXIubGVuZ3RoP3QuYnVmZmVyLmZpcnN0KCk6dC5idWZmZXIuY29uY2F0KHQubGVuZ3RoKSx0LmJ1ZmZlci5jbGVhcigpKTpuPXQuYnVmZmVyLmNvbnN1bWUoZSx0LmRlY29kZXIpLG59ZnVuY3Rpb24gUShlKXtjb25zdCB0PWUuX3JlYWRhYmxlU3RhdGU7YihcImVuZFJlYWRhYmxlXCIsdC5lbmRFbWl0dGVkKSx0LmVuZEVtaXR0ZWR8fCh0LmVuZGVkPSEwLHIubmV4dFRpY2soZWUsdCxlKSl9ZnVuY3Rpb24gZWUoZSx0KXtpZihiKFwiZW5kUmVhZGFibGVOVFwiLGUuZW5kRW1pdHRlZCxlLmxlbmd0aCksIWUuZXJyb3JlZCYmIWUuY2xvc2VFbWl0dGVkJiYhZS5lbmRFbWl0dGVkJiYwPT09ZS5sZW5ndGgpaWYoZS5lbmRFbWl0dGVkPSEwLHQuZW1pdChcImVuZFwiKSx0LndyaXRhYmxlJiYhMT09PXQuYWxsb3dIYWxmT3BlbilyLm5leHRUaWNrKHRlLHQpO2Vsc2UgaWYoZS5hdXRvRGVzdHJveSl7Y29uc3QgZT10Ll93cml0YWJsZVN0YXRlOyghZXx8ZS5hdXRvRGVzdHJveSYmKGUuZmluaXNoZWR8fCExPT09ZS53cml0YWJsZSkpJiZ0LmRlc3Ryb3koKX19ZnVuY3Rpb24gdGUoZSl7ZS53cml0YWJsZSYmIWUud3JpdGFibGVFbmRlZCYmIWUuZGVzdHJveWVkJiZlLmVuZCgpfWxldCBuZTtmdW5jdGlvbiByZSgpe3JldHVybiB2b2lkIDA9PT1uZSYmKG5lPXt9KSxuZX1ELnByb3RvdHlwZS5kZXN0cm95PV8uZGVzdHJveSxELnByb3RvdHlwZS5fdW5kZXN0cm95PV8udW5kZXN0cm95LEQucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKGUsdCl7dChlKX0sRC5wcm90b3R5cGVbZy5jYXB0dXJlUmVqZWN0aW9uU3ltYm9sXT1mdW5jdGlvbihlKXt0aGlzLmRlc3Ryb3koZSl9LEQucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gWih0aGlzLGUsdCwhMSl9LEQucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gWih0aGlzLGUsdCwhMCl9LEQucHJvdG90eXBlLmlzUGF1c2VkPWZ1bmN0aW9uKCl7Y29uc3QgZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiEwPT09ZVtJXXx8ITE9PT1lLmZsb3dpbmd9LEQucHJvdG90eXBlLnNldEVuY29kaW5nPWZ1bmN0aW9uKGUpe2NvbnN0IHQ9bmV3IEEoZSk7dGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyPXQsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZz10aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXIuZW5jb2Rpbmc7Y29uc3Qgbj10aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlcjtsZXQgcj1cIlwiO2Zvcihjb25zdCBlIG9mIG4pcis9dC53cml0ZShlKTtyZXR1cm4gbi5jbGVhcigpLFwiXCIhPT1yJiZuLnB1c2gociksdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGg9ci5sZW5ndGgsdGhpc30sRC5wcm90b3R5cGUucmVhZD1mdW5jdGlvbihlKXtiKFwicmVhZFwiLGUpLHZvaWQgMD09PWU/ZT1OYU46aShlKXx8KGU9bChlLDEwKSk7Y29uc3QgdD10aGlzLl9yZWFkYWJsZVN0YXRlLG49ZTtpZihlPnQuaGlnaFdhdGVyTWFyayYmKHQuaGlnaFdhdGVyTWFyaz1mdW5jdGlvbihlKXtpZihlPjEwNzM3NDE4MjQpdGhyb3cgbmV3IE0oXCJzaXplXCIsXCI8PSAxR2lCXCIsZSk7cmV0dXJuIGUtLSxlfD1lPj4+MSxlfD1lPj4+MixlfD1lPj4+NCxlfD1lPj4+OCxlfD1lPj4+MTYsKytlfShlKSksMCE9PWUmJih0LmVtaXR0ZWRSZWFkYWJsZT0hMSksMD09PWUmJnQubmVlZFJlYWRhYmxlJiYoKDAhPT10LmhpZ2hXYXRlck1hcms/dC5sZW5ndGg+PXQuaGlnaFdhdGVyTWFyazp0Lmxlbmd0aD4wKXx8dC5lbmRlZCkpcmV0dXJuIGIoXCJyZWFkOiBlbWl0UmVhZGFibGVcIix0Lmxlbmd0aCx0LmVuZGVkKSwwPT09dC5sZW5ndGgmJnQuZW5kZWQ/USh0aGlzKTpGKHRoaXMpLG51bGw7aWYoMD09PShlPU4oZSx0KSkmJnQuZW5kZWQpcmV0dXJuIDA9PT10Lmxlbmd0aCYmUSh0aGlzKSxudWxsO2xldCByLG89dC5uZWVkUmVhZGFibGU7aWYoYihcIm5lZWQgcmVhZGFibGVcIixvKSwoMD09PXQubGVuZ3RofHx0Lmxlbmd0aC1lPHQuaGlnaFdhdGVyTWFyaykmJihvPSEwLGIoXCJsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFya1wiLG8pKSx0LmVuZGVkfHx0LnJlYWRpbmd8fHQuZGVzdHJveWVkfHx0LmVycm9yZWR8fCF0LmNvbnN0cnVjdGVkKW89ITEsYihcInJlYWRpbmcsIGVuZGVkIG9yIGNvbnN0cnVjdGluZ1wiLG8pO2Vsc2UgaWYobyl7YihcImRvIHJlYWRcIiksdC5yZWFkaW5nPSEwLHQuc3luYz0hMCwwPT09dC5sZW5ndGgmJih0Lm5lZWRSZWFkYWJsZT0hMCk7dHJ5e3RoaXMuX3JlYWQodC5oaWdoV2F0ZXJNYXJrKX1jYXRjaChlKXtCKHRoaXMsZSl9dC5zeW5jPSExLHQucmVhZGluZ3x8KGU9TihuLHQpKX1yZXR1cm4gcj1lPjA/SihlLHQpOm51bGwsbnVsbD09PXI/KHQubmVlZFJlYWRhYmxlPXQubGVuZ3RoPD10LmhpZ2hXYXRlck1hcmssZT0wKToodC5sZW5ndGgtPWUsdC5tdWx0aUF3YWl0RHJhaW4/dC5hd2FpdERyYWluV3JpdGVycy5jbGVhcigpOnQuYXdhaXREcmFpbldyaXRlcnM9bnVsbCksMD09PXQubGVuZ3RoJiYodC5lbmRlZHx8KHQubmVlZFJlYWRhYmxlPSEwKSxuIT09ZSYmdC5lbmRlZCYmUSh0aGlzKSksbnVsbD09PXJ8fHQuZXJyb3JFbWl0dGVkfHx0LmNsb3NlRW1pdHRlZHx8KHQuZGF0YUVtaXR0ZWQ9ITAsdGhpcy5lbWl0KFwiZGF0YVwiLHIpKSxyfSxELnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbihlKXt0aHJvdyBuZXcgaihcIl9yZWFkKClcIil9LEQucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oZSx0KXtjb25zdCBuPXRoaXMsbz10aGlzLl9yZWFkYWJsZVN0YXRlOzE9PT1vLnBpcGVzLmxlbmd0aCYmKG8ubXVsdGlBd2FpdERyYWlufHwoby5tdWx0aUF3YWl0RHJhaW49ITAsby5hd2FpdERyYWluV3JpdGVycz1uZXcgZChvLmF3YWl0RHJhaW5Xcml0ZXJzP1tvLmF3YWl0RHJhaW5Xcml0ZXJzXTpbXSkpKSxvLnBpcGVzLnB1c2goZSksYihcInBpcGUgY291bnQ9JWQgb3B0cz0lalwiLG8ucGlwZXMubGVuZ3RoLHQpO2NvbnN0IGk9dCYmITE9PT10LmVuZHx8ZT09PXIuc3Rkb3V0fHxlPT09ci5zdGRlcnI/ZzphO2Z1bmN0aW9uIGEoKXtiKFwib25lbmRcIiksZS5lbmQoKX1sZXQgbDtvLmVuZEVtaXR0ZWQ/ci5uZXh0VGljayhpKTpuLm9uY2UoXCJlbmRcIixpKSxlLm9uKFwidW5waXBlXCIsKGZ1bmN0aW9uIHQocixpKXtiKFwib251bnBpcGVcIikscj09PW4mJmkmJiExPT09aS5oYXNVbnBpcGVkJiYoaS5oYXNVbnBpcGVkPSEwLGIoXCJjbGVhbnVwXCIpLGUucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLHApLGUucmVtb3ZlTGlzdGVuZXIoXCJmaW5pc2hcIixoKSxsJiZlLnJlbW92ZUxpc3RlbmVyKFwiZHJhaW5cIixsKSxlLnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIixmKSxlLnJlbW92ZUxpc3RlbmVyKFwidW5waXBlXCIsdCksbi5yZW1vdmVMaXN0ZW5lcihcImVuZFwiLGEpLG4ucmVtb3ZlTGlzdGVuZXIoXCJlbmRcIixnKSxuLnJlbW92ZUxpc3RlbmVyKFwiZGF0YVwiLHUpLHM9ITAsbCYmby5hd2FpdERyYWluV3JpdGVycyYmKCFlLl93cml0YWJsZVN0YXRlfHxlLl93cml0YWJsZVN0YXRlLm5lZWREcmFpbikmJmwoKSl9KSk7bGV0IHM9ITE7ZnVuY3Rpb24gYygpe3N8fCgxPT09by5waXBlcy5sZW5ndGgmJm8ucGlwZXNbMF09PT1lPyhiKFwiZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlXCIsMCksby5hd2FpdERyYWluV3JpdGVycz1lLG8ubXVsdGlBd2FpdERyYWluPSExKTpvLnBpcGVzLmxlbmd0aD4xJiZvLnBpcGVzLmluY2x1ZGVzKGUpJiYoYihcImZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZVwiLG8uYXdhaXREcmFpbldyaXRlcnMuc2l6ZSksby5hd2FpdERyYWluV3JpdGVycy5hZGQoZSkpLG4ucGF1c2UoKSksbHx8KGw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtjb25zdCBuPWUuX3JlYWRhYmxlU3RhdGU7bi5hd2FpdERyYWluV3JpdGVycz09PXQ/KGIoXCJwaXBlT25EcmFpblwiLDEpLG4uYXdhaXREcmFpbldyaXRlcnM9bnVsbCk6bi5tdWx0aUF3YWl0RHJhaW4mJihiKFwicGlwZU9uRHJhaW5cIixuLmF3YWl0RHJhaW5Xcml0ZXJzLnNpemUpLG4uYXdhaXREcmFpbldyaXRlcnMuZGVsZXRlKHQpKSxuLmF3YWl0RHJhaW5Xcml0ZXJzJiYwIT09bi5hd2FpdERyYWluV3JpdGVycy5zaXplfHwhZS5saXN0ZW5lckNvdW50KFwiZGF0YVwiKXx8ZS5yZXN1bWUoKX19KG4sZSksZS5vbihcImRyYWluXCIsbCkpfWZ1bmN0aW9uIHUodCl7YihcIm9uZGF0YVwiKTtjb25zdCBuPWUud3JpdGUodCk7YihcImRlc3Qud3JpdGVcIixuKSwhMT09PW4mJmMoKX1mdW5jdGlvbiBmKHQpe2lmKGIoXCJvbmVycm9yXCIsdCksZygpLGUucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLGYpLDA9PT1lLmxpc3RlbmVyQ291bnQoXCJlcnJvclwiKSl7Y29uc3Qgbj1lLl93cml0YWJsZVN0YXRlfHxlLl9yZWFkYWJsZVN0YXRlO24mJiFuLmVycm9yRW1pdHRlZD9CKGUsdCk6ZS5lbWl0KFwiZXJyb3JcIix0KX19ZnVuY3Rpb24gcCgpe2UucmVtb3ZlTGlzdGVuZXIoXCJmaW5pc2hcIixoKSxnKCl9ZnVuY3Rpb24gaCgpe2IoXCJvbmZpbmlzaFwiKSxlLnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIixwKSxnKCl9ZnVuY3Rpb24gZygpe2IoXCJ1bnBpcGVcIiksbi51bnBpcGUoZSl9cmV0dXJuIG4ub24oXCJkYXRhXCIsdSksbShlLFwiZXJyb3JcIixmKSxlLm9uY2UoXCJjbG9zZVwiLHApLGUub25jZShcImZpbmlzaFwiLGgpLGUuZW1pdChcInBpcGVcIixuKSwhMD09PWUud3JpdGFibGVOZWVkRHJhaW4/by5mbG93aW5nJiZjKCk6by5mbG93aW5nfHwoYihcInBpcGUgcmVzdW1lXCIpLG4ucmVzdW1lKCkpLGV9LEQucHJvdG90eXBlLnVucGlwZT1mdW5jdGlvbihlKXtjb25zdCB0PXRoaXMuX3JlYWRhYmxlU3RhdGU7aWYoMD09PXQucGlwZXMubGVuZ3RoKXJldHVybiB0aGlzO2lmKCFlKXtjb25zdCBlPXQucGlwZXM7dC5waXBlcz1bXSx0aGlzLnBhdXNlKCk7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspZVt0XS5lbWl0KFwidW5waXBlXCIsdGhpcyx7aGFzVW5waXBlZDohMX0pO3JldHVybiB0aGlzfWNvbnN0IG49byh0LnBpcGVzLGUpO3JldHVybi0xPT09bnx8KHQucGlwZXMuc3BsaWNlKG4sMSksMD09PXQucGlwZXMubGVuZ3RoJiZ0aGlzLnBhdXNlKCksZS5lbWl0KFwidW5waXBlXCIsdGhpcyx7aGFzVW5waXBlZDohMX0pKSx0aGlzfSxELnByb3RvdHlwZS5vbj1mdW5jdGlvbihlLHQpe2NvbnN0IG49di5wcm90b3R5cGUub24uY2FsbCh0aGlzLGUsdCksbz10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVyblwiZGF0YVwiPT09ZT8oby5yZWFkYWJsZUxpc3RlbmluZz10aGlzLmxpc3RlbmVyQ291bnQoXCJyZWFkYWJsZVwiKT4wLCExIT09by5mbG93aW5nJiZ0aGlzLnJlc3VtZSgpKTpcInJlYWRhYmxlXCI9PT1lJiYoby5lbmRFbWl0dGVkfHxvLnJlYWRhYmxlTGlzdGVuaW5nfHwoby5yZWFkYWJsZUxpc3RlbmluZz1vLm5lZWRSZWFkYWJsZT0hMCxvLmZsb3dpbmc9ITEsby5lbWl0dGVkUmVhZGFibGU9ITEsYihcIm9uIHJlYWRhYmxlXCIsby5sZW5ndGgsby5yZWFkaW5nKSxvLmxlbmd0aD9GKHRoaXMpOm8ucmVhZGluZ3x8ci5uZXh0VGljayhxLHRoaXMpKSksbn0sRC5wcm90b3R5cGUuYWRkTGlzdGVuZXI9RC5wcm90b3R5cGUub24sRC5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oZSx0KXtjb25zdCBuPXYucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLmNhbGwodGhpcyxlLHQpO3JldHVyblwicmVhZGFibGVcIj09PWUmJnIubmV4dFRpY2soRyx0aGlzKSxufSxELnByb3RvdHlwZS5vZmY9RC5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIsRC5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKGUpe2NvbnN0IHQ9di5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm5cInJlYWRhYmxlXCIhPT1lJiZ2b2lkIDAhPT1lfHxyLm5leHRUaWNrKEcsdGhpcyksdH0sRC5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7Y29uc3QgZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBlLmZsb3dpbmd8fChiKFwicmVzdW1lXCIpLGUuZmxvd2luZz0hZS5yZWFkYWJsZUxpc3RlbmluZyxmdW5jdGlvbihlLHQpe3QucmVzdW1lU2NoZWR1bGVkfHwodC5yZXN1bWVTY2hlZHVsZWQ9ITAsci5uZXh0VGljayhZLGUsdCkpfSh0aGlzLGUpKSxlW0ldPSExLHRoaXN9LEQucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7cmV0dXJuIGIoXCJjYWxsIHBhdXNlIGZsb3dpbmc9JWpcIix0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpLCExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nJiYoYihcInBhdXNlXCIpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz0hMSx0aGlzLmVtaXQoXCJwYXVzZVwiKSksdGhpcy5fcmVhZGFibGVTdGF0ZVtJXT0hMCx0aGlzfSxELnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKGUpe2xldCB0PSExO2Uub24oXCJkYXRhXCIsKG49PnshdGhpcy5wdXNoKG4pJiZlLnBhdXNlJiYodD0hMCxlLnBhdXNlKCkpfSkpLGUub24oXCJlbmRcIiwoKCk9Pnt0aGlzLnB1c2gobnVsbCl9KSksZS5vbihcImVycm9yXCIsKGU9PntCKHRoaXMsZSl9KSksZS5vbihcImNsb3NlXCIsKCgpPT57dGhpcy5kZXN0cm95KCl9KSksZS5vbihcImRlc3Ryb3lcIiwoKCk9Pnt0aGlzLmRlc3Ryb3koKX0pKSx0aGlzLl9yZWFkPSgpPT57dCYmZS5yZXN1bWUmJih0PSExLGUucmVzdW1lKCkpfTtjb25zdCBuPWMoZSk7Zm9yKGxldCB0PTE7dDxuLmxlbmd0aDt0Kyspe2NvbnN0IHI9blt0XTt2b2lkIDA9PT10aGlzW3JdJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlW3JdJiYodGhpc1tyXT1lW3JdLmJpbmQoZSkpfXJldHVybiB0aGlzfSxELnByb3RvdHlwZVtwXT1mdW5jdGlvbigpe3JldHVybiBYKHRoaXMpfSxELnByb3RvdHlwZS5pdGVyYXRvcj1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09ZSYmUChlLFwib3B0aW9uc1wiKSxYKHRoaXMsZSl9LHMoRC5wcm90b3R5cGUse3JlYWRhYmxlOntfX3Byb3RvX186bnVsbCxnZXQoKXtjb25zdCBlPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuISghZXx8ITE9PT1lLnJlYWRhYmxlfHxlLmRlc3Ryb3llZHx8ZS5lcnJvckVtaXR0ZWR8fGUuZW5kRW1pdHRlZCl9LHNldChlKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkYWJsZT0hIWUpfX0scmVhZGFibGVEaWRSZWFkOntfX3Byb3RvX186bnVsbCxlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmRhdGFFbWl0dGVkfX0scmVhZGFibGVBYm9ydGVkOntfX3Byb3RvX186bnVsbCxlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiEoITE9PT10aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRhYmxlfHwhdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQmJiF0aGlzLl9yZWFkYWJsZVN0YXRlLmVycm9yZWR8fHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCl9fSxyZWFkYWJsZUhpZ2hXYXRlck1hcms6e19fcHJvdG9fXzpudWxsLGVudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319LHJlYWRhYmxlQnVmZmVyOntfX3Byb3RvX186bnVsbCxlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlcn19LHJlYWRhYmxlRmxvd2luZzp7X19wcm90b19fOm51bGwsZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz1lKX19LHJlYWRhYmxlTGVuZ3RoOntfX3Byb3RvX186bnVsbCxlbnVtZXJhYmxlOiExLGdldCgpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aH19LHJlYWRhYmxlT2JqZWN0TW9kZTp7X19wcm90b19fOm51bGwsZW51bWVyYWJsZTohMSxnZXQoKXtyZXR1cm4hIXRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUub2JqZWN0TW9kZX19LHJlYWRhYmxlRW5jb2Rpbmc6e19fcHJvdG9fXzpudWxsLGVudW1lcmFibGU6ITEsZ2V0KCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGU/dGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZzpudWxsfX0sZXJyb3JlZDp7X19wcm90b19fOm51bGwsZW51bWVyYWJsZTohMSxnZXQoKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZT90aGlzLl9yZWFkYWJsZVN0YXRlLmVycm9yZWQ6bnVsbH19LGNsb3NlZDp7X19wcm90b19fOm51bGwsZ2V0KCl7cmV0dXJuISF0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmNsb3NlZH19LGRlc3Ryb3llZDp7X19wcm90b19fOm51bGwsZW51bWVyYWJsZTohMSxnZXQoKXtyZXR1cm4hIXRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQoZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPWUpfX0scmVhZGFibGVFbmRlZDp7X19wcm90b19fOm51bGwsZW51bWVyYWJsZTohMSxnZXQoKXtyZXR1cm4hIXRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZH19fSkscyhWLnByb3RvdHlwZSx7cGlwZXNDb3VudDp7X19wcm90b19fOm51bGwsZ2V0KCl7cmV0dXJuIHRoaXMucGlwZXMubGVuZ3RofX0scGF1c2VkOntfX3Byb3RvX186bnVsbCxnZXQoKXtyZXR1cm4hMSE9PXRoaXNbSV19LHNldChlKXt0aGlzW0ldPSEhZX19fSksRC5fZnJvbUxpc3Q9SixELmZyb209ZnVuY3Rpb24oZSx0KXtyZXR1cm4gVChELGUsdCl9LEQuZnJvbVdlYj1mdW5jdGlvbihlLHQpe3JldHVybiByZSgpLm5ld1N0cmVhbVJlYWRhYmxlRnJvbVJlYWRhYmxlU3RyZWFtKGUsdCl9LEQudG9XZWI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcmUoKS5uZXdSZWFkYWJsZVN0cmVhbUZyb21TdHJlYW1SZWFkYWJsZShlLHQpfSxELndyYXA9ZnVuY3Rpb24oZSx0KXt2YXIgbixyO3JldHVybiBuZXcgRCh7b2JqZWN0TW9kZTpudWxsPT09KG49bnVsbCE9PShyPWUucmVhZGFibGVPYmplY3RNb2RlKSYmdm9pZCAwIT09cj9yOmUub2JqZWN0TW9kZSl8fHZvaWQgMD09PW58fG4sLi4udCxkZXN0cm95KHQsbil7Xy5kZXN0cm95ZXIoZSx0KSxuKHQpfX0pLndyYXAoZSl9fSw0OTg6KGUsdCxuKT0+e2NvbnN0e01hdGhGbG9vcjpyLE51bWJlcklzSW50ZWdlcjpvfT1uKDE5MSkse0VSUl9JTlZBTElEX0FSR19WQUxVRTppfT1uKDE0MSkuY29kZXM7ZnVuY3Rpb24gYShlKXtyZXR1cm4gZT8xNjoxNjM4NH1lLmV4cG9ydHM9e2dldEhpZ2hXYXRlck1hcms6ZnVuY3Rpb24oZSx0LG4sbCl7Y29uc3Qgcz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG51bGwhPWUuaGlnaFdhdGVyTWFyaz9lLmhpZ2hXYXRlck1hcms6dD9lW25dOm51bGx9KHQsbCxuKTtpZihudWxsIT1zKXtpZighbyhzKXx8czwwKXRocm93IG5ldyBpKGw/YG9wdGlvbnMuJHtufWA6XCJvcHRpb25zLmhpZ2hXYXRlck1hcmtcIixzKTtyZXR1cm4gcihzKX1yZXR1cm4gYShlLm9iamVjdE1vZGUpfSxnZXREZWZhdWx0SGlnaFdhdGVyTWFyazphfX0sMjEwOihlLHQsbik9Pntjb25zdHtPYmplY3RTZXRQcm90b3R5cGVPZjpyLFN5bWJvbDpvfT1uKDE5MSk7ZS5leHBvcnRzPWM7Y29uc3R7RVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQ6aX09bigxNDEpLmNvZGVzLGE9bigxODIpLHtnZXRIaWdoV2F0ZXJNYXJrOmx9PW4oNDk4KTtyKGMucHJvdG90eXBlLGEucHJvdG90eXBlKSxyKGMsYSk7Y29uc3Qgcz1vKFwia0NhbGxiYWNrXCIpO2Z1bmN0aW9uIGMoZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgYykpcmV0dXJuIG5ldyBjKGUpO2NvbnN0IHQ9ZT9sKHRoaXMsZSxcInJlYWRhYmxlSGlnaFdhdGVyTWFya1wiLCEwKTpudWxsOzA9PT10JiYoZT17Li4uZSxoaWdoV2F0ZXJNYXJrOm51bGwscmVhZGFibGVIaWdoV2F0ZXJNYXJrOnQsd3JpdGFibGVIaWdoV2F0ZXJNYXJrOmUud3JpdGFibGVIaWdoV2F0ZXJNYXJrfHwwfSksYS5jYWxsKHRoaXMsZSksdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLHRoaXNbc109bnVsbCxlJiYoXCJmdW5jdGlvblwiPT10eXBlb2YgZS50cmFuc2Zvcm0mJih0aGlzLl90cmFuc2Zvcm09ZS50cmFuc2Zvcm0pLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUuZmx1c2gmJih0aGlzLl9mbHVzaD1lLmZsdXNoKSksdGhpcy5vbihcInByZWZpbmlzaFwiLGYpfWZ1bmN0aW9uIHUoZSl7XCJmdW5jdGlvblwiIT10eXBlb2YgdGhpcy5fZmx1c2h8fHRoaXMuZGVzdHJveWVkPyh0aGlzLnB1c2gobnVsbCksZSYmZSgpKTp0aGlzLl9mbHVzaCgoKHQsbik9Pnt0P2U/ZSh0KTp0aGlzLmRlc3Ryb3kodCk6KG51bGwhPW4mJnRoaXMucHVzaChuKSx0aGlzLnB1c2gobnVsbCksZSYmZSgpKX0pKX1mdW5jdGlvbiBmKCl7dGhpcy5fZmluYWwhPT11JiZ1LmNhbGwodGhpcyl9Yy5wcm90b3R5cGUuX2ZpbmFsPXUsYy5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihlLHQsbil7dGhyb3cgbmV3IGkoXCJfdHJhbnNmb3JtKClcIil9LGMucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihlLHQsbil7Y29uc3Qgcj10aGlzLl9yZWFkYWJsZVN0YXRlLG89dGhpcy5fd3JpdGFibGVTdGF0ZSxpPXIubGVuZ3RoO3RoaXMuX3RyYW5zZm9ybShlLHQsKChlLHQpPT57ZT9uKGUpOihudWxsIT10JiZ0aGlzLnB1c2godCksby5lbmRlZHx8aT09PXIubGVuZ3RofHxyLmxlbmd0aDxyLmhpZ2hXYXRlck1hcms/bigpOnRoaXNbc109bil9KSl9LGMucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKCl7aWYodGhpc1tzXSl7Y29uc3QgZT10aGlzW3NdO3RoaXNbc109bnVsbCxlKCl9fX0sMTMyOihlLHQsbik9Pntjb25zdHtTeW1ib2w6cixTeW1ib2xBc3luY0l0ZXJhdG9yOm8sU3ltYm9sSXRlcmF0b3I6aSxTeW1ib2xGb3I6YX09bigxOTEpLGw9cihcImtEZXN0cm95ZWRcIikscz1yKFwia0lzRXJyb3JlZFwiKSxjPXIoXCJrSXNSZWFkYWJsZVwiKSx1PXIoXCJrSXNEaXN0dXJiZWRcIiksZj1hKFwibm9kZWpzLndlYnN0cmVhbS5pc0Nsb3NlZFByb21pc2VcIiksZD1hKFwibm9kZWpzLndlYnN0cmVhbS5jb250cm9sbGVyRXJyb3JGdW5jdGlvblwiKTtmdW5jdGlvbiBwKGUsdD0hMSl7dmFyIG47cmV0dXJuISghZXx8XCJmdW5jdGlvblwiIT10eXBlb2YgZS5waXBlfHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBlLm9ufHx0JiYoXCJmdW5jdGlvblwiIT10eXBlb2YgZS5wYXVzZXx8XCJmdW5jdGlvblwiIT10eXBlb2YgZS5yZXN1bWUpfHxlLl93cml0YWJsZVN0YXRlJiYhMT09PShudWxsPT09KG49ZS5fcmVhZGFibGVTdGF0ZSl8fHZvaWQgMD09PW4/dm9pZCAwOm4ucmVhZGFibGUpfHxlLl93cml0YWJsZVN0YXRlJiYhZS5fcmVhZGFibGVTdGF0ZSl9ZnVuY3Rpb24gaChlKXt2YXIgdDtyZXR1cm4hKCFlfHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBlLndyaXRlfHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBlLm9ufHxlLl9yZWFkYWJsZVN0YXRlJiYhMT09PShudWxsPT09KHQ9ZS5fd3JpdGFibGVTdGF0ZSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQud3JpdGFibGUpKX1mdW5jdGlvbiBnKGUpe3JldHVybiBlJiYoZS5fcmVhZGFibGVTdGF0ZXx8ZS5fd3JpdGFibGVTdGF0ZXx8XCJmdW5jdGlvblwiPT10eXBlb2YgZS53cml0ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5vbnx8XCJmdW5jdGlvblwiPT10eXBlb2YgZS5waXBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLm9uKX1mdW5jdGlvbiB2KGUpe3JldHVybiEoIWV8fGcoZSl8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUucGlwZVRocm91Z2h8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUuZ2V0UmVhZGVyfHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBlLmNhbmNlbCl9ZnVuY3Rpb24gbShlKXtyZXR1cm4hKCFlfHxnKGUpfHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBlLmdldFdyaXRlcnx8XCJmdW5jdGlvblwiIT10eXBlb2YgZS5hYm9ydCl9ZnVuY3Rpb24gQyhlKXtyZXR1cm4hKCFlfHxnKGUpfHxcIm9iamVjdFwiIT10eXBlb2YgZS5yZWFkYWJsZXx8XCJvYmplY3RcIiE9dHlwZW9mIGUud3JpdGFibGUpfWZ1bmN0aW9uIHkoZSl7aWYoIWcoZSkpcmV0dXJuIG51bGw7Y29uc3QgdD1lLl93cml0YWJsZVN0YXRlLG49ZS5fcmVhZGFibGVTdGF0ZSxyPXR8fG47cmV0dXJuISEoZS5kZXN0cm95ZWR8fGVbbF18fG51bGwhPXImJnIuZGVzdHJveWVkKX1mdW5jdGlvbiB3KGUpe2lmKCFoKGUpKXJldHVybiBudWxsO2lmKCEwPT09ZS53cml0YWJsZUVuZGVkKXJldHVybiEwO2NvbnN0IHQ9ZS5fd3JpdGFibGVTdGF0ZTtyZXR1cm4obnVsbD09dHx8IXQuZXJyb3JlZCkmJihcImJvb2xlYW5cIiE9dHlwZW9mKG51bGw9PXQ/dm9pZCAwOnQuZW5kZWQpP251bGw6dC5lbmRlZCl9ZnVuY3Rpb24gYihlLHQpe2lmKCFwKGUpKXJldHVybiBudWxsO2NvbnN0IG49ZS5fcmVhZGFibGVTdGF0ZTtyZXR1cm4obnVsbD09bnx8IW4uZXJyb3JlZCkmJihcImJvb2xlYW5cIiE9dHlwZW9mKG51bGw9PW4/dm9pZCAwOm4uZW5kRW1pdHRlZCk/bnVsbDohIShuLmVuZEVtaXR0ZWR8fCExPT09dCYmITA9PT1uLmVuZGVkJiYwPT09bi5sZW5ndGgpKX1mdW5jdGlvbiB4KGUpe3JldHVybiBlJiZudWxsIT1lW2NdP2VbY106XCJib29sZWFuXCIhPXR5cGVvZihudWxsPT1lP3ZvaWQgMDplLnJlYWRhYmxlKT9udWxsOiF5KGUpJiZwKGUpJiZlLnJlYWRhYmxlJiYhYihlKX1mdW5jdGlvbiBfKGUpe3JldHVyblwiYm9vbGVhblwiIT10eXBlb2YobnVsbD09ZT92b2lkIDA6ZS53cml0YWJsZSk/bnVsbDoheShlKSYmaChlKSYmZS53cml0YWJsZSYmIXcoZSl9ZnVuY3Rpb24gTyhlKXtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIGUuX2Nsb3NlZCYmXCJib29sZWFuXCI9PXR5cGVvZiBlLl9kZWZhdWx0S2VlcEFsaXZlJiZcImJvb2xlYW5cIj09dHlwZW9mIGUuX3JlbW92ZWRDb25uZWN0aW9uJiZcImJvb2xlYW5cIj09dHlwZW9mIGUuX3JlbW92ZWRDb250TGVufWZ1bmN0aW9uIEwoZSl7cmV0dXJuXCJib29sZWFuXCI9PXR5cGVvZiBlLl9zZW50MTAwJiZPKGUpfWUuZXhwb3J0cz17a0Rlc3Ryb3llZDpsLGlzRGlzdHVyYmVkOmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiEoIWV8fCEobnVsbCE9PSh0PWVbdV0pJiZ2b2lkIDAhPT10P3Q6ZS5yZWFkYWJsZURpZFJlYWR8fGUucmVhZGFibGVBYm9ydGVkKSl9LGtJc0Rpc3R1cmJlZDp1LGlzRXJyb3JlZDpmdW5jdGlvbihlKXt2YXIgdCxuLHIsbyxpLGEsbCxjLHUsZjtyZXR1cm4hKCFlfHwhKG51bGwhPT0odD1udWxsIT09KG49bnVsbCE9PShyPW51bGwhPT0obz1udWxsIT09KGk9bnVsbCE9PShhPWVbc10pJiZ2b2lkIDAhPT1hP2E6ZS5yZWFkYWJsZUVycm9yZWQpJiZ2b2lkIDAhPT1pP2k6ZS53cml0YWJsZUVycm9yZWQpJiZ2b2lkIDAhPT1vP286bnVsbD09PShsPWUuX3JlYWRhYmxlU3RhdGUpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmVycm9yRW1pdHRlZCkmJnZvaWQgMCE9PXI/cjpudWxsPT09KGM9ZS5fd3JpdGFibGVTdGF0ZSl8fHZvaWQgMD09PWM/dm9pZCAwOmMuZXJyb3JFbWl0dGVkKSYmdm9pZCAwIT09bj9uOm51bGw9PT0odT1lLl9yZWFkYWJsZVN0YXRlKXx8dm9pZCAwPT09dT92b2lkIDA6dS5lcnJvcmVkKSYmdm9pZCAwIT09dD90Om51bGw9PT0oZj1lLl93cml0YWJsZVN0YXRlKXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5lcnJvcmVkKSl9LGtJc0Vycm9yZWQ6cyxpc1JlYWRhYmxlOngsa0lzUmVhZGFibGU6YyxrSXNDbG9zZWRQcm9taXNlOmYsa0NvbnRyb2xsZXJFcnJvckZ1bmN0aW9uOmQsaXNDbG9zZWQ6ZnVuY3Rpb24oZSl7aWYoIWcoZSkpcmV0dXJuIG51bGw7aWYoXCJib29sZWFuXCI9PXR5cGVvZiBlLmNsb3NlZClyZXR1cm4gZS5jbG9zZWQ7Y29uc3QgdD1lLl93cml0YWJsZVN0YXRlLG49ZS5fcmVhZGFibGVTdGF0ZTtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mKG51bGw9PXQ/dm9pZCAwOnQuY2xvc2VkKXx8XCJib29sZWFuXCI9PXR5cGVvZihudWxsPT1uP3ZvaWQgMDpuLmNsb3NlZCk/KG51bGw9PXQ/dm9pZCAwOnQuY2xvc2VkKXx8KG51bGw9PW4/dm9pZCAwOm4uY2xvc2VkKTpcImJvb2xlYW5cIj09dHlwZW9mIGUuX2Nsb3NlZCYmTyhlKT9lLl9jbG9zZWQ6bnVsbH0saXNEZXN0cm95ZWQ6eSxpc0R1cGxleE5vZGVTdHJlYW06ZnVuY3Rpb24oZSl7cmV0dXJuISghZXx8XCJmdW5jdGlvblwiIT10eXBlb2YgZS5waXBlfHwhZS5fcmVhZGFibGVTdGF0ZXx8XCJmdW5jdGlvblwiIT10eXBlb2YgZS5vbnx8XCJmdW5jdGlvblwiIT10eXBlb2YgZS53cml0ZSl9LGlzRmluaXNoZWQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZyhlKT8hKCF5KGUpJiYoITEhPT0obnVsbD09dD92b2lkIDA6dC5yZWFkYWJsZSkmJngoZSl8fCExIT09KG51bGw9PXQ/dm9pZCAwOnQud3JpdGFibGUpJiZfKGUpKSk6bnVsbH0saXNJdGVyYWJsZTpmdW5jdGlvbihlLHQpe3JldHVybiBudWxsIT1lJiYoITA9PT10P1wiZnVuY3Rpb25cIj09dHlwZW9mIGVbb106ITE9PT10P1wiZnVuY3Rpb25cIj09dHlwZW9mIGVbaV06XCJmdW5jdGlvblwiPT10eXBlb2YgZVtvXXx8XCJmdW5jdGlvblwiPT10eXBlb2YgZVtpXSl9LGlzUmVhZGFibGVOb2RlU3RyZWFtOnAsaXNSZWFkYWJsZVN0cmVhbTp2LGlzUmVhZGFibGVFbmRlZDpmdW5jdGlvbihlKXtpZighcChlKSlyZXR1cm4gbnVsbDtpZighMD09PWUucmVhZGFibGVFbmRlZClyZXR1cm4hMDtjb25zdCB0PWUuX3JlYWRhYmxlU3RhdGU7cmV0dXJuISghdHx8dC5lcnJvcmVkKSYmKFwiYm9vbGVhblwiIT10eXBlb2YobnVsbD09dD92b2lkIDA6dC5lbmRlZCk/bnVsbDp0LmVuZGVkKX0saXNSZWFkYWJsZUZpbmlzaGVkOmIsaXNSZWFkYWJsZUVycm9yZWQ6ZnVuY3Rpb24oZSl7dmFyIHQsbjtyZXR1cm4gZyhlKT9lLnJlYWRhYmxlRXJyb3JlZD9lLnJlYWRhYmxlRXJyb3JlZDpudWxsIT09KHQ9bnVsbD09PShuPWUuX3JlYWRhYmxlU3RhdGUpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmVycm9yZWQpJiZ2b2lkIDAhPT10P3Q6bnVsbDpudWxsfSxpc05vZGVTdHJlYW06Zyxpc1dlYlN0cmVhbTpmdW5jdGlvbihlKXtyZXR1cm4gdihlKXx8bShlKXx8QyhlKX0saXNXcml0YWJsZTpfLGlzV3JpdGFibGVOb2RlU3RyZWFtOmgsaXNXcml0YWJsZVN0cmVhbTptLGlzV3JpdGFibGVFbmRlZDp3LGlzV3JpdGFibGVGaW5pc2hlZDpmdW5jdGlvbihlLHQpe2lmKCFoKGUpKXJldHVybiBudWxsO2lmKCEwPT09ZS53cml0YWJsZUZpbmlzaGVkKXJldHVybiEwO2NvbnN0IG49ZS5fd3JpdGFibGVTdGF0ZTtyZXR1cm4obnVsbD09bnx8IW4uZXJyb3JlZCkmJihcImJvb2xlYW5cIiE9dHlwZW9mKG51bGw9PW4/dm9pZCAwOm4uZmluaXNoZWQpP251bGw6ISEobi5maW5pc2hlZHx8ITE9PT10JiYhMD09PW4uZW5kZWQmJjA9PT1uLmxlbmd0aCkpfSxpc1dyaXRhYmxlRXJyb3JlZDpmdW5jdGlvbihlKXt2YXIgdCxuO3JldHVybiBnKGUpP2Uud3JpdGFibGVFcnJvcmVkP2Uud3JpdGFibGVFcnJvcmVkOm51bGwhPT0odD1udWxsPT09KG49ZS5fd3JpdGFibGVTdGF0ZSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZXJyb3JlZCkmJnZvaWQgMCE9PXQ/dDpudWxsOm51bGx9LGlzU2VydmVyUmVxdWVzdDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIGUuX2NvbnN1bWluZyYmXCJib29sZWFuXCI9PXR5cGVvZiBlLl9kdW1wZWQmJnZvaWQgMD09PShudWxsPT09KHQ9ZS5yZXEpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LnVwZ3JhZGVPckNvbm5lY3QpfSxpc1NlcnZlclJlc3BvbnNlOkwsd2lsbEVtaXRDbG9zZTpmdW5jdGlvbihlKXtpZighZyhlKSlyZXR1cm4gbnVsbDtjb25zdCB0PWUuX3dyaXRhYmxlU3RhdGUsbj1lLl9yZWFkYWJsZVN0YXRlLHI9dHx8bjtyZXR1cm4hciYmTChlKXx8ISEociYmci5hdXRvRGVzdHJveSYmci5lbWl0Q2xvc2UmJiExPT09ci5jbG9zZWQpfSxpc1RyYW5zZm9ybVN0cmVhbTpDfX0sMzczOihlLHQsbik9Pntjb25zdCByPW4oNTMzKSx7QXJyYXlQcm90b3R5cGVTbGljZTpvLEVycm9yOmksRnVuY3Rpb25Qcm90b3R5cGVTeW1ib2xIYXNJbnN0YW5jZTphLE9iamVjdERlZmluZVByb3BlcnR5OmwsT2JqZWN0RGVmaW5lUHJvcGVydGllczpzLE9iamVjdFNldFByb3RvdHlwZU9mOmMsU3RyaW5nUHJvdG90eXBlVG9Mb3dlckNhc2U6dSxTeW1ib2w6ZixTeW1ib2xIYXNJbnN0YW5jZTpkfT1uKDE5MSk7ZS5leHBvcnRzPUEsQS5Xcml0YWJsZVN0YXRlPVA7Y29uc3R7RXZlbnRFbWl0dGVyOnB9PW4oNDY1KSxoPW4oMjAwKS5TdHJlYW0se0J1ZmZlcjpnfT1uKDQ4NSksdj1uKDIzMCkse2FkZEFib3J0U2lnbmFsOm19PW4oMzc0KSx7Z2V0SGlnaFdhdGVyTWFyazpDLGdldERlZmF1bHRIaWdoV2F0ZXJNYXJrOnl9PW4oNDk4KSx7RVJSX0lOVkFMSURfQVJHX1RZUEU6dyxFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRDpiLEVSUl9NVUxUSVBMRV9DQUxMQkFDSzp4LEVSUl9TVFJFQU1fQ0FOTk9UX1BJUEU6XyxFUlJfU1RSRUFNX0RFU1RST1lFRDpPLEVSUl9TVFJFQU1fQUxSRUFEWV9GSU5JU0hFRDpMLEVSUl9TVFJFQU1fTlVMTF9WQUxVRVM6RSxFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORDpTLEVSUl9VTktOT1dOX0VOQ09ESU5HOmp9PW4oMTQxKS5jb2Rlcyx7ZXJyb3JPckRlc3Ryb3k6TX09djtmdW5jdGlvbiBrKCl7fWMoQS5wcm90b3R5cGUsaC5wcm90b3R5cGUpLGMoQSxoKTtjb25zdCBSPWYoXCJrT25GaW5pc2hlZFwiKTtmdW5jdGlvbiBQKGUsdCxyKXtcImJvb2xlYW5cIiE9dHlwZW9mIHImJihyPXQgaW5zdGFuY2VvZiBuKDE4MikpLHRoaXMub2JqZWN0TW9kZT0hKCFlfHwhZS5vYmplY3RNb2RlKSxyJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISghZXx8IWUud3JpdGFibGVPYmplY3RNb2RlKSksdGhpcy5oaWdoV2F0ZXJNYXJrPWU/Qyh0aGlzLGUsXCJ3cml0YWJsZUhpZ2hXYXRlck1hcmtcIixyKTp5KCExKSx0aGlzLmZpbmFsQ2FsbGVkPSExLHRoaXMubmVlZERyYWluPSExLHRoaXMuZW5kaW5nPSExLHRoaXMuZW5kZWQ9ITEsdGhpcy5maW5pc2hlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMTtjb25zdCBvPSEoIWV8fCExIT09ZS5kZWNvZGVTdHJpbmdzKTt0aGlzLmRlY29kZVN0cmluZ3M9IW8sdGhpcy5kZWZhdWx0RW5jb2Rpbmc9ZSYmZS5kZWZhdWx0RW5jb2Rpbmd8fFwidXRmOFwiLHRoaXMubGVuZ3RoPTAsdGhpcy53cml0aW5nPSExLHRoaXMuY29ya2VkPTAsdGhpcy5zeW5jPSEwLHRoaXMuYnVmZmVyUHJvY2Vzc2luZz0hMSx0aGlzLm9ud3JpdGU9Vi5iaW5kKHZvaWQgMCx0KSx0aGlzLndyaXRlY2I9bnVsbCx0aGlzLndyaXRlbGVuPTAsdGhpcy5hZnRlcldyaXRlVGlja0luZm89bnVsbCxJKHRoaXMpLHRoaXMucGVuZGluZ2NiPTAsdGhpcy5jb25zdHJ1Y3RlZD0hMCx0aGlzLnByZWZpbmlzaGVkPSExLHRoaXMuZXJyb3JFbWl0dGVkPSExLHRoaXMuZW1pdENsb3NlPSFlfHwhMSE9PWUuZW1pdENsb3NlLHRoaXMuYXV0b0Rlc3Ryb3k9IWV8fCExIT09ZS5hdXRvRGVzdHJveSx0aGlzLmVycm9yZWQ9bnVsbCx0aGlzLmNsb3NlZD0hMSx0aGlzLmNsb3NlRW1pdHRlZD0hMSx0aGlzW1JdPVtdfWZ1bmN0aW9uIEkoZSl7ZS5idWZmZXJlZD1bXSxlLmJ1ZmZlcmVkSW5kZXg9MCxlLmFsbEJ1ZmZlcnM9ITAsZS5hbGxOb29wPSEwfWZ1bmN0aW9uIEEoZSl7Y29uc3QgdD10aGlzIGluc3RhbmNlb2YgbigxODIpO2lmKCF0JiYhYShBLHRoaXMpKXJldHVybiBuZXcgQShlKTt0aGlzLl93cml0YWJsZVN0YXRlPW5ldyBQKGUsdGhpcyx0KSxlJiYoXCJmdW5jdGlvblwiPT10eXBlb2YgZS53cml0ZSYmKHRoaXMuX3dyaXRlPWUud3JpdGUpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUud3JpdGV2JiYodGhpcy5fd3JpdGV2PWUud3JpdGV2KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PWUuZGVzdHJveSksXCJmdW5jdGlvblwiPT10eXBlb2YgZS5maW5hbCYmKHRoaXMuX2ZpbmFsPWUuZmluYWwpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUuY29uc3RydWN0JiYodGhpcy5fY29uc3RydWN0PWUuY29uc3RydWN0KSxlLnNpZ25hbCYmbShlLnNpZ25hbCx0aGlzKSksaC5jYWxsKHRoaXMsZSksdi5jb25zdHJ1Y3QodGhpcywoKCk9Pntjb25zdCBlPXRoaXMuX3dyaXRhYmxlU3RhdGU7ZS53cml0aW5nfHxOKHRoaXMsZSksVSh0aGlzLGUpfSkpfWZ1bmN0aW9uIFQoZSx0LG4sbyl7Y29uc3QgaT1lLl93cml0YWJsZVN0YXRlO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4pbz1uLG49aS5kZWZhdWx0RW5jb2Rpbmc7ZWxzZXtpZihuKXtpZihcImJ1ZmZlclwiIT09biYmIWcuaXNFbmNvZGluZyhuKSl0aHJvdyBuZXcgaihuKX1lbHNlIG49aS5kZWZhdWx0RW5jb2Rpbmc7XCJmdW5jdGlvblwiIT10eXBlb2YgbyYmKG89ayl9aWYobnVsbD09PXQpdGhyb3cgbmV3IEU7aWYoIWkub2JqZWN0TW9kZSlpZihcInN0cmluZ1wiPT10eXBlb2YgdCkhMSE9PWkuZGVjb2RlU3RyaW5ncyYmKHQ9Zy5mcm9tKHQsbiksbj1cImJ1ZmZlclwiKTtlbHNlIGlmKHQgaW5zdGFuY2VvZiBnKW49XCJidWZmZXJcIjtlbHNle2lmKCFoLl9pc1VpbnQ4QXJyYXkodCkpdGhyb3cgbmV3IHcoXCJjaHVua1wiLFtcInN0cmluZ1wiLFwiQnVmZmVyXCIsXCJVaW50OEFycmF5XCJdLHQpO3Q9aC5fdWludDhBcnJheVRvQnVmZmVyKHQpLG49XCJidWZmZXJcIn1sZXQgYTtyZXR1cm4gaS5lbmRpbmc/YT1uZXcgUzppLmRlc3Ryb3llZCYmKGE9bmV3IE8oXCJ3cml0ZVwiKSksYT8oci5uZXh0VGljayhvLGEpLE0oZSxhLCEwKSxhKTooaS5wZW5kaW5nY2IrKyxmdW5jdGlvbihlLHQsbixyLG8pe2NvbnN0IGk9dC5vYmplY3RNb2RlPzE6bi5sZW5ndGg7dC5sZW5ndGgrPWk7Y29uc3QgYT10Lmxlbmd0aDx0LmhpZ2hXYXRlck1hcms7cmV0dXJuIGF8fCh0Lm5lZWREcmFpbj0hMCksdC53cml0aW5nfHx0LmNvcmtlZHx8dC5lcnJvcmVkfHwhdC5jb25zdHJ1Y3RlZD8odC5idWZmZXJlZC5wdXNoKHtjaHVuazpuLGVuY29kaW5nOnIsY2FsbGJhY2s6b30pLHQuYWxsQnVmZmVycyYmXCJidWZmZXJcIiE9PXImJih0LmFsbEJ1ZmZlcnM9ITEpLHQuYWxsTm9vcCYmbyE9PWsmJih0LmFsbE5vb3A9ITEpKToodC53cml0ZWxlbj1pLHQud3JpdGVjYj1vLHQud3JpdGluZz0hMCx0LnN5bmM9ITAsZS5fd3JpdGUobixyLHQub253cml0ZSksdC5zeW5jPSExKSxhJiYhdC5lcnJvcmVkJiYhdC5kZXN0cm95ZWR9KGUsaSx0LG4sbykpfWZ1bmN0aW9uIEgoZSx0LG4scixvLGksYSl7dC53cml0ZWxlbj1yLHQud3JpdGVjYj1hLHQud3JpdGluZz0hMCx0LnN5bmM9ITAsdC5kZXN0cm95ZWQ/dC5vbndyaXRlKG5ldyBPKFwid3JpdGVcIikpOm4/ZS5fd3JpdGV2KG8sdC5vbndyaXRlKTplLl93cml0ZShvLGksdC5vbndyaXRlKSx0LnN5bmM9ITF9ZnVuY3Rpb24gQihlLHQsbixyKXstLXQucGVuZGluZ2NiLHIobiksJCh0KSxNKGUsbil9ZnVuY3Rpb24gVihlLHQpe2NvbnN0IG49ZS5fd3JpdGFibGVTdGF0ZSxvPW4uc3luYyxpPW4ud3JpdGVjYjtcImZ1bmN0aW9uXCI9PXR5cGVvZiBpPyhuLndyaXRpbmc9ITEsbi53cml0ZWNiPW51bGwsbi5sZW5ndGgtPW4ud3JpdGVsZW4sbi53cml0ZWxlbj0wLHQ/KHQuc3RhY2ssbi5lcnJvcmVkfHwobi5lcnJvcmVkPXQpLGUuX3JlYWRhYmxlU3RhdGUmJiFlLl9yZWFkYWJsZVN0YXRlLmVycm9yZWQmJihlLl9yZWFkYWJsZVN0YXRlLmVycm9yZWQ9dCksbz9yLm5leHRUaWNrKEIsZSxuLHQsaSk6QihlLG4sdCxpKSk6KG4uYnVmZmVyZWQubGVuZ3RoPm4uYnVmZmVyZWRJbmRleCYmTihlLG4pLG8/bnVsbCE9PW4uYWZ0ZXJXcml0ZVRpY2tJbmZvJiZuLmFmdGVyV3JpdGVUaWNrSW5mby5jYj09PWk/bi5hZnRlcldyaXRlVGlja0luZm8uY291bnQrKzoobi5hZnRlcldyaXRlVGlja0luZm89e2NvdW50OjEsY2I6aSxzdHJlYW06ZSxzdGF0ZTpufSxyLm5leHRUaWNrKEQsbi5hZnRlcldyaXRlVGlja0luZm8pKTpaKGUsbiwxLGkpKSk6TShlLG5ldyB4KX1mdW5jdGlvbiBEKHtzdHJlYW06ZSxzdGF0ZTp0LGNvdW50Om4sY2I6cn0pe3JldHVybiB0LmFmdGVyV3JpdGVUaWNrSW5mbz1udWxsLFooZSx0LG4scil9ZnVuY3Rpb24gWihlLHQsbixyKXtmb3IoIXQuZW5kaW5nJiYhZS5kZXN0cm95ZWQmJjA9PT10Lmxlbmd0aCYmdC5uZWVkRHJhaW4mJih0Lm5lZWREcmFpbj0hMSxlLmVtaXQoXCJkcmFpblwiKSk7bi0tID4wOyl0LnBlbmRpbmdjYi0tLHIoKTt0LmRlc3Ryb3llZCYmJCh0KSxVKGUsdCl9ZnVuY3Rpb24gJChlKXtpZihlLndyaXRpbmcpcmV0dXJuO2ZvcihsZXQgbj1lLmJ1ZmZlcmVkSW5kZXg7bjxlLmJ1ZmZlcmVkLmxlbmd0aDsrK24pe3ZhciB0O2NvbnN0e2NodW5rOnIsY2FsbGJhY2s6b309ZS5idWZmZXJlZFtuXSxpPWUub2JqZWN0TW9kZT8xOnIubGVuZ3RoO2UubGVuZ3RoLT1pLG8obnVsbCE9PSh0PWUuZXJyb3JlZCkmJnZvaWQgMCE9PXQ/dDpuZXcgTyhcIndyaXRlXCIpKX1jb25zdCBuPWVbUl0uc3BsaWNlKDApO2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKXt2YXIgcjtuW3RdKG51bGwhPT0ocj1lLmVycm9yZWQpJiZ2b2lkIDAhPT1yP3I6bmV3IE8oXCJlbmRcIikpfUkoZSl9ZnVuY3Rpb24gTihlLHQpe2lmKHQuY29ya2VkfHx0LmJ1ZmZlclByb2Nlc3Npbmd8fHQuZGVzdHJveWVkfHwhdC5jb25zdHJ1Y3RlZClyZXR1cm47Y29uc3R7YnVmZmVyZWQ6bixidWZmZXJlZEluZGV4OnIsb2JqZWN0TW9kZTppfT10LGE9bi5sZW5ndGgtcjtpZighYSlyZXR1cm47bGV0IGw9cjtpZih0LmJ1ZmZlclByb2Nlc3Npbmc9ITAsYT4xJiZlLl93cml0ZXYpe3QucGVuZGluZ2NiLT1hLTE7Y29uc3Qgcj10LmFsbE5vb3A/azplPT57Zm9yKGxldCB0PWw7dDxuLmxlbmd0aDsrK3Qpblt0XS5jYWxsYmFjayhlKX0saT10LmFsbE5vb3AmJjA9PT1sP246byhuLGwpO2kuYWxsQnVmZmVycz10LmFsbEJ1ZmZlcnMsSChlLHQsITAsdC5sZW5ndGgsaSxcIlwiLHIpLEkodCl9ZWxzZXtkb3tjb25zdHtjaHVuazpyLGVuY29kaW5nOm8sY2FsbGJhY2s6YX09bltsXTtuW2wrK109bnVsbCxIKGUsdCwhMSxpPzE6ci5sZW5ndGgscixvLGEpfXdoaWxlKGw8bi5sZW5ndGgmJiF0LndyaXRpbmcpO2w9PT1uLmxlbmd0aD9JKHQpOmw+MjU2PyhuLnNwbGljZSgwLGwpLHQuYnVmZmVyZWRJbmRleD0wKTp0LmJ1ZmZlcmVkSW5kZXg9bH10LmJ1ZmZlclByb2Nlc3Npbmc9ITF9ZnVuY3Rpb24gRihlKXtyZXR1cm4gZS5lbmRpbmcmJiFlLmRlc3Ryb3llZCYmZS5jb25zdHJ1Y3RlZCYmMD09PWUubGVuZ3RoJiYhZS5lcnJvcmVkJiYwPT09ZS5idWZmZXJlZC5sZW5ndGgmJiFlLmZpbmlzaGVkJiYhZS53cml0aW5nJiYhZS5lcnJvckVtaXR0ZWQmJiFlLmNsb3NlRW1pdHRlZH1mdW5jdGlvbiBVKGUsdCxuKXtGKHQpJiYoZnVuY3Rpb24oZSx0KXt0LnByZWZpbmlzaGVkfHx0LmZpbmFsQ2FsbGVkfHwoXCJmdW5jdGlvblwiIT10eXBlb2YgZS5fZmluYWx8fHQuZGVzdHJveWVkPyh0LnByZWZpbmlzaGVkPSEwLGUuZW1pdChcInByZWZpbmlzaFwiKSk6KHQuZmluYWxDYWxsZWQ9ITAsZnVuY3Rpb24oZSx0KXtsZXQgbj0hMTtmdW5jdGlvbiBvKG8pe2lmKG4pTShlLG51bGwhPW8/bzp4KCkpO2Vsc2UgaWYobj0hMCx0LnBlbmRpbmdjYi0tLG8pe2NvbnN0IG49dFtSXS5zcGxpY2UoMCk7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspbltlXShvKTtNKGUsbyx0LnN5bmMpfWVsc2UgRih0KSYmKHQucHJlZmluaXNoZWQ9ITAsZS5lbWl0KFwicHJlZmluaXNoXCIpLHQucGVuZGluZ2NiKyssci5uZXh0VGljayhXLGUsdCkpfXQuc3luYz0hMCx0LnBlbmRpbmdjYisrO3RyeXtlLl9maW5hbChvKX1jYXRjaChlKXtvKGUpfXQuc3luYz0hMX0oZSx0KSkpfShlLHQpLDA9PT10LnBlbmRpbmdjYiYmKG4/KHQucGVuZGluZ2NiKyssci5uZXh0VGljaygoKGUsdCk9PntGKHQpP1coZSx0KTp0LnBlbmRpbmdjYi0tfSksZSx0KSk6Rih0KSYmKHQucGVuZGluZ2NiKyssVyhlLHQpKSkpfWZ1bmN0aW9uIFcoZSx0KXt0LnBlbmRpbmdjYi0tLHQuZmluaXNoZWQ9ITA7Y29uc3Qgbj10W1JdLnNwbGljZSgwKTtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyluW2VdKCk7aWYoZS5lbWl0KFwiZmluaXNoXCIpLHQuYXV0b0Rlc3Ryb3kpe2NvbnN0IHQ9ZS5fcmVhZGFibGVTdGF0ZTsoIXR8fHQuYXV0b0Rlc3Ryb3kmJih0LmVuZEVtaXR0ZWR8fCExPT09dC5yZWFkYWJsZSkpJiZlLmRlc3Ryb3koKX19UC5wcm90b3R5cGUuZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5idWZmZXJlZCx0aGlzLmJ1ZmZlcmVkSW5kZXgpfSxsKFAucHJvdG90eXBlLFwiYnVmZmVyZWRSZXF1ZXN0Q291bnRcIix7X19wcm90b19fOm51bGwsZ2V0KCl7cmV0dXJuIHRoaXMuYnVmZmVyZWQubGVuZ3RoLXRoaXMuYnVmZmVyZWRJbmRleH19KSxsKEEsZCx7X19wcm90b19fOm51bGwsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuISFhKHRoaXMsZSl8fHRoaXM9PT1BJiZlJiZlLl93cml0YWJsZVN0YXRlIGluc3RhbmNlb2YgUH19KSxBLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKCl7TSh0aGlzLG5ldyBfKX0sQS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiEwPT09VCh0aGlzLGUsdCxuKX0sQS5wcm90b3R5cGUuY29yaz1mdW5jdGlvbigpe3RoaXMuX3dyaXRhYmxlU3RhdGUuY29ya2VkKyt9LEEucHJvdG90eXBlLnVuY29yaz1mdW5jdGlvbigpe2NvbnN0IGU9dGhpcy5fd3JpdGFibGVTdGF0ZTtlLmNvcmtlZCYmKGUuY29ya2VkLS0sZS53cml0aW5nfHxOKHRoaXMsZSkpfSxBLnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2Rpbmc9ZnVuY3Rpb24oZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPXUoZSkpLCFnLmlzRW5jb2RpbmcoZSkpdGhyb3cgbmV3IGooZSk7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nPWUsdGhpc30sQS5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKGUsdCxuKXtpZighdGhpcy5fd3JpdGV2KXRocm93IG5ldyBiKFwiX3dyaXRlKClcIik7dGhpcy5fd3JpdGV2KFt7Y2h1bms6ZSxlbmNvZGluZzp0fV0sbil9LEEucHJvdG90eXBlLl93cml0ZXY9bnVsbCxBLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oZSx0LG4pe2NvbnN0IG89dGhpcy5fd3JpdGFibGVTdGF0ZTtsZXQgYTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlPyhuPWUsZT1udWxsLHQ9bnVsbCk6XCJmdW5jdGlvblwiPT10eXBlb2YgdCYmKG49dCx0PW51bGwpLG51bGwhPWUpe2NvbnN0IG49VCh0aGlzLGUsdCk7biBpbnN0YW5jZW9mIGkmJihhPW4pfXJldHVybiBvLmNvcmtlZCYmKG8uY29ya2VkPTEsdGhpcy51bmNvcmsoKSksYXx8KG8uZXJyb3JlZHx8by5lbmRpbmc/by5maW5pc2hlZD9hPW5ldyBMKFwiZW5kXCIpOm8uZGVzdHJveWVkJiYoYT1uZXcgTyhcImVuZFwiKSk6KG8uZW5kaW5nPSEwLFUodGhpcyxvLCEwKSxvLmVuZGVkPSEwKSksXCJmdW5jdGlvblwiPT10eXBlb2YgbiYmKGF8fG8uZmluaXNoZWQ/ci5uZXh0VGljayhuLGEpOm9bUl0ucHVzaChuKSksdGhpc30scyhBLnByb3RvdHlwZSx7Y2xvc2VkOntfX3Byb3RvX186bnVsbCxnZXQoKXtyZXR1cm4hIXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuY2xvc2VkfX0sZGVzdHJveWVkOntfX3Byb3RvX186bnVsbCxnZXQoKXtyZXR1cm4hIXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQoZSl7dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPWUpfX0sd3JpdGFibGU6e19fcHJvdG9fXzpudWxsLGdldCgpe2NvbnN0IGU9dGhpcy5fd3JpdGFibGVTdGF0ZTtyZXR1cm4hKCFlfHwhMT09PWUud3JpdGFibGV8fGUuZGVzdHJveWVkfHxlLmVycm9yZWR8fGUuZW5kaW5nfHxlLmVuZGVkKX0sc2V0KGUpe3RoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLndyaXRhYmxlPSEhZSl9fSx3cml0YWJsZUZpbmlzaGVkOntfX3Byb3RvX186bnVsbCxnZXQoKXtyZXR1cm4hIXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWR9fSx3cml0YWJsZU9iamVjdE1vZGU6e19fcHJvdG9fXzpudWxsLGdldCgpe3JldHVybiEhdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5vYmplY3RNb2RlfX0sd3JpdGFibGVCdWZmZXI6e19fcHJvdG9fXzpudWxsLGdldCgpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpfX0sd3JpdGFibGVFbmRlZDp7X19wcm90b19fOm51bGwsZ2V0KCl7cmV0dXJuISF0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZ319LHdyaXRhYmxlTmVlZERyYWluOntfX3Byb3RvX186bnVsbCxnZXQoKXtjb25zdCBlPXRoaXMuX3dyaXRhYmxlU3RhdGU7cmV0dXJuISFlJiYhZS5kZXN0cm95ZWQmJiFlLmVuZGluZyYmZS5uZWVkRHJhaW59fSx3cml0YWJsZUhpZ2hXYXRlck1hcms6e19fcHJvdG9fXzpudWxsLGdldCgpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSx3cml0YWJsZUNvcmtlZDp7X19wcm90b19fOm51bGwsZ2V0KCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGU/dGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQ6MH19LHdyaXRhYmxlTGVuZ3RoOntfX3Byb3RvX186bnVsbCxnZXQoKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGh9fSxlcnJvcmVkOntfX3Byb3RvX186bnVsbCxlbnVtZXJhYmxlOiExLGdldCgpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlP3RoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JlZDpudWxsfX0sd3JpdGFibGVBYm9ydGVkOntfX3Byb3RvX186bnVsbCxlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiEoITE9PT10aGlzLl93cml0YWJsZVN0YXRlLndyaXRhYmxlfHwhdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQmJiF0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yZWR8fHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQpfX19KTtjb25zdCB6PXYuZGVzdHJveTtsZXQgRztmdW5jdGlvbiBxKCl7cmV0dXJuIHZvaWQgMD09PUcmJihHPXt9KSxHfUEucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oZSx0KXtjb25zdCBuPXRoaXMuX3dyaXRhYmxlU3RhdGU7cmV0dXJuIW4uZGVzdHJveWVkJiYobi5idWZmZXJlZEluZGV4PG4uYnVmZmVyZWQubGVuZ3RofHxuW1JdLmxlbmd0aCkmJnIubmV4dFRpY2soJCxuKSx6LmNhbGwodGhpcyxlLHQpLHRoaXN9LEEucHJvdG90eXBlLl91bmRlc3Ryb3k9di51bmRlc3Ryb3ksQS5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oZSx0KXt0KGUpfSxBLnByb3RvdHlwZVtwLmNhcHR1cmVSZWplY3Rpb25TeW1ib2xdPWZ1bmN0aW9uKGUpe3RoaXMuZGVzdHJveShlKX0sQS5mcm9tV2ViPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHEoKS5uZXdTdHJlYW1Xcml0YWJsZUZyb21Xcml0YWJsZVN0cmVhbShlLHQpfSxBLnRvV2ViPWZ1bmN0aW9uKGUpe3JldHVybiBxKCkubmV3V3JpdGFibGVTdHJlYW1Gcm9tU3RyZWFtV3JpdGFibGUoZSl9fSw5MDQ6KGUsdCxuKT0+e2NvbnN0e0FycmF5SXNBcnJheTpyLEFycmF5UHJvdG90eXBlSW5jbHVkZXM6byxBcnJheVByb3RvdHlwZUpvaW46aSxBcnJheVByb3RvdHlwZU1hcDphLE51bWJlcklzSW50ZWdlcjpsLE51bWJlcklzTmFOOnMsTnVtYmVyTUFYX1NBRkVfSU5URUdFUjpjLE51bWJlck1JTl9TQUZFX0lOVEVHRVI6dSxOdW1iZXJQYXJzZUludDpmLE9iamVjdFByb3RvdHlwZUhhc093blByb3BlcnR5OmQsUmVnRXhwUHJvdG90eXBlRXhlYzpwLFN0cmluZzpoLFN0cmluZ1Byb3RvdHlwZVRvVXBwZXJDYXNlOmcsU3RyaW5nUHJvdG90eXBlVHJpbTp2fT1uKDE5MSkse2hpZGVTdGFja0ZyYW1lczptLGNvZGVzOntFUlJfU09DS0VUX0JBRF9QT1JUOkMsRVJSX0lOVkFMSURfQVJHX1RZUEU6eSxFUlJfSU5WQUxJRF9BUkdfVkFMVUU6dyxFUlJfT1VUX09GX1JBTkdFOmIsRVJSX1VOS05PV05fU0lHTkFMOnh9fT1uKDE0MSkse25vcm1hbGl6ZUVuY29kaW5nOl99PW4oNzc1KSx7aXNBc3luY0Z1bmN0aW9uOk8saXNBcnJheUJ1ZmZlclZpZXc6TH09big3NzUpLnR5cGVzLEU9e30sUz0vXlswLTddKyQvLGo9bSgoKGUsdCxuPXUscj1jKT0+e2lmKFwibnVtYmVyXCIhPXR5cGVvZiBlKXRocm93IG5ldyB5KHQsXCJudW1iZXJcIixlKTtpZighbChlKSl0aHJvdyBuZXcgYih0LFwiYW4gaW50ZWdlclwiLGUpO2lmKGU8bnx8ZT5yKXRocm93IG5ldyBiKHQsYD49ICR7bn0gJiYgPD0gJHtyfWAsZSl9KSksTT1tKCgoZSx0LG49LTIxNDc0ODM2NDgscj0yMTQ3NDgzNjQ3KT0+e2lmKFwibnVtYmVyXCIhPXR5cGVvZiBlKXRocm93IG5ldyB5KHQsXCJudW1iZXJcIixlKTtpZighbChlKSl0aHJvdyBuZXcgYih0LFwiYW4gaW50ZWdlclwiLGUpO2lmKGU8bnx8ZT5yKXRocm93IG5ldyBiKHQsYD49ICR7bn0gJiYgPD0gJHtyfWAsZSl9KSksaz1tKCgoZSx0LG49ITEpPT57aWYoXCJudW1iZXJcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IHkodCxcIm51bWJlclwiLGUpO2lmKCFsKGUpKXRocm93IG5ldyBiKHQsXCJhbiBpbnRlZ2VyXCIsZSk7Y29uc3Qgcj1uPzE6MCxvPTQyOTQ5NjcyOTU7aWYoZTxyfHxlPm8pdGhyb3cgbmV3IGIodCxgPj0gJHtyfSAmJiA8PSAke299YCxlKX0pKTtmdW5jdGlvbiBSKGUsdCl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IHkodCxcInN0cmluZ1wiLGUpfWNvbnN0IFA9bSgoKGUsdCxuKT0+e2lmKCFvKG4sZSkpe2NvbnN0IHI9aShhKG4sKGU9Plwic3RyaW5nXCI9PXR5cGVvZiBlP2AnJHtlfSdgOmgoZSkpKSxcIiwgXCIpO3Rocm93IG5ldyB3KHQsZSxcIm11c3QgYmUgb25lIG9mOiBcIityKX19KSk7ZnVuY3Rpb24gSShlLHQpe2lmKFwiYm9vbGVhblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgeSh0LFwiYm9vbGVhblwiLGUpfWZ1bmN0aW9uIEEoZSx0LG4pe3JldHVybiBudWxsIT1lJiZkKGUsdCk/ZVt0XTpufWNvbnN0IFQ9bSgoKGUsdCxuPW51bGwpPT57Y29uc3Qgbz1BKG4sXCJhbGxvd0FycmF5XCIsITEpLGk9QShuLFwiYWxsb3dGdW5jdGlvblwiLCExKTtpZighQShuLFwibnVsbGFibGVcIiwhMSkmJm51bGw9PT1lfHwhbyYmcihlKXx8XCJvYmplY3RcIiE9dHlwZW9mIGUmJighaXx8XCJmdW5jdGlvblwiIT10eXBlb2YgZSkpdGhyb3cgbmV3IHkodCxcIk9iamVjdFwiLGUpfSkpLEg9bSgoKGUsdCk9PntpZihudWxsIT1lJiZcIm9iamVjdFwiIT10eXBlb2YgZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgeSh0LFwiYSBkaWN0aW9uYXJ5XCIsZSl9KSksQj1tKCgoZSx0LG49MCk9PntpZighcihlKSl0aHJvdyBuZXcgeSh0LFwiQXJyYXlcIixlKTtpZihlLmxlbmd0aDxuKXRocm93IG5ldyB3KHQsZSxgbXVzdCBiZSBsb25nZXIgdGhhbiAke259YCl9KSksVj1tKCgoZSx0PVwiYnVmZmVyXCIpPT57aWYoIUwoZSkpdGhyb3cgbmV3IHkodCxbXCJCdWZmZXJcIixcIlR5cGVkQXJyYXlcIixcIkRhdGFWaWV3XCJdLGUpfSkpLEQ9bSgoKGUsdCk9PntpZih2b2lkIDAhPT1lJiYobnVsbD09PWV8fFwib2JqZWN0XCIhPXR5cGVvZiBlfHwhKFwiYWJvcnRlZFwiaW4gZSkpKXRocm93IG5ldyB5KHQsXCJBYm9ydFNpZ25hbFwiLGUpfSkpLFo9bSgoKGUsdCk9PntpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyB5KHQsXCJGdW5jdGlvblwiLGUpfSkpLCQ9bSgoKGUsdCk9PntpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlfHxPKGUpKXRocm93IG5ldyB5KHQsXCJGdW5jdGlvblwiLGUpfSkpLE49bSgoKGUsdCk9PntpZih2b2lkIDAhPT1lKXRocm93IG5ldyB5KHQsXCJ1bmRlZmluZWRcIixlKX0pKSxGPS9eKD86PFtePl0qPikoPzpcXHMqO1xccypbXjtcIlxcc10rKD86PShcIik/W147XCJcXHNdKlxcMSk/KSokLztmdW5jdGlvbiBVKGUsdCl7aWYodm9pZCAwPT09ZXx8IXAoRixlKSl0aHJvdyBuZXcgdyh0LGUsJ211c3QgYmUgYW4gYXJyYXkgb3Igc3RyaW5nIG9mIGZvcm1hdCBcIjwvc3R5bGVzLmNzcz47IHJlbD1wcmVsb2FkOyBhcz1zdHlsZVwiJyl9ZS5leHBvcnRzPXtpc0ludDMyOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09KDB8ZSl9LGlzVWludDMyOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09ZT4+PjB9LHBhcnNlRmlsZU1vZGU6ZnVuY3Rpb24oZSx0LG4pe2lmKHZvaWQgMD09PWUmJihlPW4pLFwic3RyaW5nXCI9PXR5cGVvZiBlKXtpZihudWxsPT09cChTLGUpKXRocm93IG5ldyB3KHQsZSxcIm11c3QgYmUgYSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciBvciBhbiBvY3RhbCBzdHJpbmdcIik7ZT1mKGUsOCl9cmV0dXJuIGsoZSx0KSxlfSx2YWxpZGF0ZUFycmF5OkIsdmFsaWRhdGVTdHJpbmdBcnJheTpmdW5jdGlvbihlLHQpe0IoZSx0KTtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKylSKGVbbl0sYCR7dH1bJHtufV1gKX0sdmFsaWRhdGVCb29sZWFuQXJyYXk6ZnVuY3Rpb24oZSx0KXtCKGUsdCk7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspSShlW25dLGAke3R9WyR7bn1dYCl9LHZhbGlkYXRlQm9vbGVhbjpJLHZhbGlkYXRlQnVmZmVyOlYsdmFsaWRhdGVEaWN0aW9uYXJ5OkgsdmFsaWRhdGVFbmNvZGluZzpmdW5jdGlvbihlLHQpe2NvbnN0IG49Xyh0KSxyPWUubGVuZ3RoO2lmKFwiaGV4XCI9PT1uJiZyJTIhPTApdGhyb3cgbmV3IHcoXCJlbmNvZGluZ1wiLHQsYGlzIGludmFsaWQgZm9yIGRhdGEgb2YgbGVuZ3RoICR7cn1gKX0sdmFsaWRhdGVGdW5jdGlvbjpaLHZhbGlkYXRlSW50MzI6TSx2YWxpZGF0ZUludGVnZXI6aix2YWxpZGF0ZU51bWJlcjpmdW5jdGlvbihlLHQsbj12b2lkIDAscil7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IHkodCxcIm51bWJlclwiLGUpO2lmKG51bGwhPW4mJmU8bnx8bnVsbCE9ciYmZT5yfHwobnVsbCE9bnx8bnVsbCE9cikmJnMoZSkpdGhyb3cgbmV3IGIodCxgJHtudWxsIT1uP2A+PSAke259YDpcIlwifSR7bnVsbCE9biYmbnVsbCE9cj9cIiAmJiBcIjpcIlwifSR7bnVsbCE9cj9gPD0gJHtyfWA6XCJcIn1gLGUpfSx2YWxpZGF0ZU9iamVjdDpULHZhbGlkYXRlT25lT2Y6UCx2YWxpZGF0ZVBsYWluRnVuY3Rpb246JCx2YWxpZGF0ZVBvcnQ6ZnVuY3Rpb24oZSx0PVwiUG9ydFwiLG49ITApe2lmKFwibnVtYmVyXCIhPXR5cGVvZiBlJiZcInN0cmluZ1wiIT10eXBlb2YgZXx8XCJzdHJpbmdcIj09dHlwZW9mIGUmJjA9PT12KGUpLmxlbmd0aHx8K2UhPStlPj4+MHx8ZT42NTUzNXx8MD09PWUmJiFuKXRocm93IG5ldyBDKHQsZSxuKTtyZXR1cm4gMHxlfSx2YWxpZGF0ZVNpZ25hbE5hbWU6ZnVuY3Rpb24oZSx0PVwic2lnbmFsXCIpe2lmKFIoZSx0KSx2b2lkIDA9PT1FW2VdKXtpZih2b2lkIDAhPT1FW2coZSldKXRocm93IG5ldyB4KGUrXCIgKHNpZ25hbHMgbXVzdCB1c2UgYWxsIGNhcGl0YWwgbGV0dGVycylcIik7dGhyb3cgbmV3IHgoZSl9fSx2YWxpZGF0ZVN0cmluZzpSLHZhbGlkYXRlVWludDMyOmssdmFsaWRhdGVVbmRlZmluZWQ6Tix2YWxpZGF0ZVVuaW9uOmZ1bmN0aW9uKGUsdCxuKXtpZighbyhuLGUpKXRocm93IG5ldyB5KHQsYCgnJHtpKG4sXCJ8XCIpfScpYCxlKX0sdmFsaWRhdGVBYm9ydFNpZ25hbDpELHZhbGlkYXRlTGlua0hlYWRlclZhbHVlOmZ1bmN0aW9uKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBVKGUsXCJoaW50c1wiKSxlO2lmKHIoZSkpe2NvbnN0IHQ9ZS5sZW5ndGg7bGV0IG49XCJcIjtpZigwPT09dClyZXR1cm4gbjtmb3IobGV0IHI9MDtyPHQ7cisrKXtjb25zdCBvPWVbcl07VShvLFwiaGludHNcIiksbis9byxyIT09dC0xJiYobis9XCIsIFwiKX1yZXR1cm4gbn10aHJvdyBuZXcgdyhcImhpbnRzXCIsZSwnbXVzdCBiZSBhbiBhcnJheSBvciBzdHJpbmcgb2YgZm9ybWF0IFwiPC9zdHlsZXMuY3NzPjsgcmVsPXByZWxvYWQ7IGFzPXN0eWxlXCInKX19fSw5OTooZSx0LG4pPT57Y29uc3Qgcj1uKDI5Miksbz1uKDc2MCksaT1yLlJlYWRhYmxlLmRlc3Ryb3k7ZS5leHBvcnRzPXIuUmVhZGFibGUsZS5leHBvcnRzLl91aW50OEFycmF5VG9CdWZmZXI9ci5fdWludDhBcnJheVRvQnVmZmVyLGUuZXhwb3J0cy5faXNVaW50OEFycmF5PXIuX2lzVWludDhBcnJheSxlLmV4cG9ydHMuaXNEaXN0dXJiZWQ9ci5pc0Rpc3R1cmJlZCxlLmV4cG9ydHMuaXNFcnJvcmVkPXIuaXNFcnJvcmVkLGUuZXhwb3J0cy5pc1JlYWRhYmxlPXIuaXNSZWFkYWJsZSxlLmV4cG9ydHMuUmVhZGFibGU9ci5SZWFkYWJsZSxlLmV4cG9ydHMuV3JpdGFibGU9ci5Xcml0YWJsZSxlLmV4cG9ydHMuRHVwbGV4PXIuRHVwbGV4LGUuZXhwb3J0cy5UcmFuc2Zvcm09ci5UcmFuc2Zvcm0sZS5leHBvcnRzLlBhc3NUaHJvdWdoPXIuUGFzc1Rocm91Z2gsZS5leHBvcnRzLmFkZEFib3J0U2lnbmFsPXIuYWRkQWJvcnRTaWduYWwsZS5leHBvcnRzLmZpbmlzaGVkPXIuZmluaXNoZWQsZS5leHBvcnRzLmRlc3Ryb3k9ci5kZXN0cm95LGUuZXhwb3J0cy5kZXN0cm95PWksZS5leHBvcnRzLnBpcGVsaW5lPXIucGlwZWxpbmUsZS5leHBvcnRzLmNvbXBvc2U9ci5jb21wb3NlLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwicHJvbWlzZXNcIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OigpPT5vfSksZS5leHBvcnRzLlN0cmVhbT1yLlN0cmVhbSxlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHN9LDE0MTooZSx0LG4pPT57Y29uc3R7Zm9ybWF0OnIsaW5zcGVjdDpvLEFnZ3JlZ2F0ZUVycm9yOml9PW4oNzc1KSxhPWdsb2JhbFRoaXMuQWdncmVnYXRlRXJyb3J8fGksbD1TeW1ib2woXCJrSXNOb2RlRXJyb3JcIikscz1bXCJzdHJpbmdcIixcImZ1bmN0aW9uXCIsXCJudW1iZXJcIixcIm9iamVjdFwiLFwiRnVuY3Rpb25cIixcIk9iamVjdFwiLFwiYm9vbGVhblwiLFwiYmlnaW50XCIsXCJzeW1ib2xcIl0sYz0vXihbQS1aXVthLXowLTldKikrJC8sdT17fTtmdW5jdGlvbiBmKGUsdCl7aWYoIWUpdGhyb3cgbmV3IHUuRVJSX0lOVEVSTkFMX0FTU0VSVElPTih0KX1mdW5jdGlvbiBkKGUpe2xldCB0PVwiXCIsbj1lLmxlbmd0aDtjb25zdCByPVwiLVwiPT09ZVswXT8xOjA7Zm9yKDtuPj1yKzQ7bi09Myl0PWBfJHtlLnNsaWNlKG4tMyxuKX0ke3R9YDtyZXR1cm5gJHtlLnNsaWNlKDAsbil9JHt0fWB9ZnVuY3Rpb24gcChlLHQsbil7bnx8KG49RXJyb3IpO2NsYXNzIG8gZXh0ZW5kcyBue2NvbnN0cnVjdG9yKC4uLm4pe3N1cGVyKGZ1bmN0aW9uKGUsdCxuKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0KXJldHVybiBmKHQubGVuZ3RoPD1uLmxlbmd0aCxgQ29kZTogJHtlfTsgVGhlIHByb3ZpZGVkIGFyZ3VtZW50cyBsZW5ndGggKCR7bi5sZW5ndGh9KSBkb2VzIG5vdCBtYXRjaCB0aGUgcmVxdWlyZWQgb25lcyAoJHt0Lmxlbmd0aH0pLmApLHQoLi4ubik7Y29uc3Qgbz0odC5tYXRjaCgvJVtkZmlqb09zXS9nKXx8W10pLmxlbmd0aDtyZXR1cm4gZihvPT09bi5sZW5ndGgsYENvZGU6ICR7ZX07IFRoZSBwcm92aWRlZCBhcmd1bWVudHMgbGVuZ3RoICgke24ubGVuZ3RofSkgZG9lcyBub3QgbWF0Y2ggdGhlIHJlcXVpcmVkIG9uZXMgKCR7b30pLmApLDA9PT1uLmxlbmd0aD90OnIodCwuLi5uKX0oZSx0LG4pKX10b1N0cmluZygpe3JldHVybmAke3RoaXMubmFtZX0gWyR7ZX1dOiAke3RoaXMubWVzc2FnZX1gfX1PYmplY3QuZGVmaW5lUHJvcGVydGllcyhvLnByb3RvdHlwZSx7bmFtZTp7dmFsdWU6bi5uYW1lLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSx0b1N0cmluZzp7dmFsdWUoKXtyZXR1cm5gJHt0aGlzLm5hbWV9IFske2V9XTogJHt0aGlzLm1lc3NhZ2V9YH0sd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9fSksby5wcm90b3R5cGUuY29kZT1lLG8ucHJvdG90eXBlW2xdPSEwLHVbZV09b31mdW5jdGlvbiBoKGUpe2NvbnN0IHQ9XCJfX25vZGVfaW50ZXJuYWxfXCIrZS5uYW1lO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcIm5hbWVcIix7dmFsdWU6dH0pLGV9Y2xhc3MgZyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGU9XCJUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkXCIsdD12b2lkIDApe2lmKHZvaWQgMCE9PXQmJlwib2JqZWN0XCIhPXR5cGVvZiB0KXRocm93IG5ldyB1LkVSUl9JTlZBTElEX0FSR19UWVBFKFwib3B0aW9uc1wiLFwiT2JqZWN0XCIsdCk7c3VwZXIoZSx0KSx0aGlzLmNvZGU9XCJBQk9SVF9FUlJcIix0aGlzLm5hbWU9XCJBYm9ydEVycm9yXCJ9fXAoXCJFUlJfQVNTRVJUSU9OXCIsXCIlc1wiLEVycm9yKSxwKFwiRVJSX0lOVkFMSURfQVJHX1RZUEVcIiwoKGUsdCxuKT0+e2YoXCJzdHJpbmdcIj09dHlwZW9mIGUsXCInbmFtZScgbXVzdCBiZSBhIHN0cmluZ1wiKSxBcnJheS5pc0FycmF5KHQpfHwodD1bdF0pO2xldCByPVwiVGhlIFwiO2UuZW5kc1dpdGgoXCIgYXJndW1lbnRcIik/cis9YCR7ZX0gYDpyKz1gXCIke2V9XCIgJHtlLmluY2x1ZGVzKFwiLlwiKT9cInByb3BlcnR5XCI6XCJhcmd1bWVudFwifSBgLHIrPVwibXVzdCBiZSBcIjtjb25zdCBpPVtdLGE9W10sbD1bXTtmb3IoY29uc3QgZSBvZiB0KWYoXCJzdHJpbmdcIj09dHlwZW9mIGUsXCJBbGwgZXhwZWN0ZWQgZW50cmllcyBoYXZlIHRvIGJlIG9mIHR5cGUgc3RyaW5nXCIpLHMuaW5jbHVkZXMoZSk/aS5wdXNoKGUudG9Mb3dlckNhc2UoKSk6Yy50ZXN0KGUpP2EucHVzaChlKTooZihcIm9iamVjdFwiIT09ZSwnVGhlIHZhbHVlIFwib2JqZWN0XCIgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgXCJPYmplY3RcIicpLGwucHVzaChlKSk7aWYoYS5sZW5ndGg+MCl7Y29uc3QgZT1pLmluZGV4T2YoXCJvYmplY3RcIik7LTEhPT1lJiYoaS5zcGxpY2UoaSxlLDEpLGEucHVzaChcIk9iamVjdFwiKSl9aWYoaS5sZW5ndGg+MCl7c3dpdGNoKGkubGVuZ3RoKXtjYXNlIDE6cis9YG9mIHR5cGUgJHtpWzBdfWA7YnJlYWs7Y2FzZSAyOnIrPWBvbmUgb2YgdHlwZSAke2lbMF19IG9yICR7aVsxXX1gO2JyZWFrO2RlZmF1bHQ6e2NvbnN0IGU9aS5wb3AoKTtyKz1gb25lIG9mIHR5cGUgJHtpLmpvaW4oXCIsIFwiKX0sIG9yICR7ZX1gfX0oYS5sZW5ndGg+MHx8bC5sZW5ndGg+MCkmJihyKz1cIiBvciBcIil9aWYoYS5sZW5ndGg+MCl7c3dpdGNoKGEubGVuZ3RoKXtjYXNlIDE6cis9YGFuIGluc3RhbmNlIG9mICR7YVswXX1gO2JyZWFrO2Nhc2UgMjpyKz1gYW4gaW5zdGFuY2Ugb2YgJHthWzBdfSBvciAke2FbMV19YDticmVhaztkZWZhdWx0Ontjb25zdCBlPWEucG9wKCk7cis9YGFuIGluc3RhbmNlIG9mICR7YS5qb2luKFwiLCBcIil9LCBvciAke2V9YH19bC5sZW5ndGg+MCYmKHIrPVwiIG9yIFwiKX1zd2l0Y2gobC5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6bFswXS50b0xvd2VyQ2FzZSgpIT09bFswXSYmKHIrPVwiYW4gXCIpLHIrPWAke2xbMF19YDticmVhaztjYXNlIDI6cis9YG9uZSBvZiAke2xbMF19IG9yICR7bFsxXX1gO2JyZWFrO2RlZmF1bHQ6e2NvbnN0IGU9bC5wb3AoKTtyKz1gb25lIG9mICR7bC5qb2luKFwiLCBcIil9LCBvciAke2V9YH19aWYobnVsbD09bilyKz1gLiBSZWNlaXZlZCAke259YDtlbHNlIGlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4mJm4ubmFtZSlyKz1gLiBSZWNlaXZlZCBmdW5jdGlvbiAke24ubmFtZX1gO2Vsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIG4pe3ZhciB1O251bGwhPT0odT1uLmNvbnN0cnVjdG9yKSYmdm9pZCAwIT09dSYmdS5uYW1lP3IrPWAuIFJlY2VpdmVkIGFuIGluc3RhbmNlIG9mICR7bi5jb25zdHJ1Y3Rvci5uYW1lfWA6cis9YC4gUmVjZWl2ZWQgJHtvKG4se2RlcHRoOi0xfSl9YH1lbHNle2xldCBlPW8obix7Y29sb3JzOiExfSk7ZS5sZW5ndGg+MjUmJihlPWAke2Uuc2xpY2UoMCwyNSl9Li4uYCkscis9YC4gUmVjZWl2ZWQgdHlwZSAke3R5cGVvZiBufSAoJHtlfSlgfXJldHVybiByfSksVHlwZUVycm9yKSxwKFwiRVJSX0lOVkFMSURfQVJHX1ZBTFVFXCIsKChlLHQsbj1cImlzIGludmFsaWRcIik9PntsZXQgcj1vKHQpO3JldHVybiByLmxlbmd0aD4xMjgmJihyPXIuc2xpY2UoMCwxMjgpK1wiLi4uXCIpLGBUaGUgJHtlLmluY2x1ZGVzKFwiLlwiKT9cInByb3BlcnR5XCI6XCJhcmd1bWVudFwifSAnJHtlfScgJHtufS4gUmVjZWl2ZWQgJHtyfWB9KSxUeXBlRXJyb3IpLHAoXCJFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUVcIiwoKGUsdCxuKT0+e3ZhciByO3JldHVybmBFeHBlY3RlZCAke2V9IHRvIGJlIHJldHVybmVkIGZyb20gdGhlIFwiJHt0fVwiIGZ1bmN0aW9uIGJ1dCBnb3QgJHtudWxsIT1uJiZudWxsIT09KHI9bi5jb25zdHJ1Y3RvcikmJnZvaWQgMCE9PXImJnIubmFtZT9gaW5zdGFuY2Ugb2YgJHtuLmNvbnN0cnVjdG9yLm5hbWV9YDpcInR5cGUgXCIrdHlwZW9mIG59LmB9KSxUeXBlRXJyb3IpLHAoXCJFUlJfTUlTU0lOR19BUkdTXCIsKCguLi5lKT0+e2xldCB0O2YoZS5sZW5ndGg+MCxcIkF0IGxlYXN0IG9uZSBhcmcgbmVlZHMgdG8gYmUgc3BlY2lmaWVkXCIpO2NvbnN0IG49ZS5sZW5ndGg7c3dpdGNoKGU9KEFycmF5LmlzQXJyYXkoZSk/ZTpbZV0pLm1hcCgoZT0+YFwiJHtlfVwiYCkpLmpvaW4oXCIgb3IgXCIpLG4pe2Nhc2UgMTp0Kz1gVGhlICR7ZVswXX0gYXJndW1lbnRgO2JyZWFrO2Nhc2UgMjp0Kz1gVGhlICR7ZVswXX0gYW5kICR7ZVsxXX0gYXJndW1lbnRzYDticmVhaztkZWZhdWx0Ontjb25zdCBuPWUucG9wKCk7dCs9YFRoZSAke2Uuam9pbihcIiwgXCIpfSwgYW5kICR7bn0gYXJndW1lbnRzYH19cmV0dXJuYCR7dH0gbXVzdCBiZSBzcGVjaWZpZWRgfSksVHlwZUVycm9yKSxwKFwiRVJSX09VVF9PRl9SQU5HRVwiLCgoZSx0LG4pPT57bGV0IHI7cmV0dXJuIGYodCwnTWlzc2luZyBcInJhbmdlXCIgYXJndW1lbnQnKSxOdW1iZXIuaXNJbnRlZ2VyKG4pJiZNYXRoLmFicyhuKT4yKiozMj9yPWQoU3RyaW5nKG4pKTpcImJpZ2ludFwiPT10eXBlb2Ygbj8ocj1TdHJpbmcobiksKG4+Mm4qKjMybnx8bjwtKDJuKiozMm4pKSYmKHI9ZChyKSkscis9XCJuXCIpOnI9byhuKSxgVGhlIHZhbHVlIG9mIFwiJHtlfVwiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSAke3R9LiBSZWNlaXZlZCAke3J9YH0pLFJhbmdlRXJyb3IpLHAoXCJFUlJfTVVMVElQTEVfQ0FMTEJBQ0tcIixcIkNhbGxiYWNrIGNhbGxlZCBtdWx0aXBsZSB0aW1lc1wiLEVycm9yKSxwKFwiRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URURcIixcIlRoZSAlcyBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkXCIsRXJyb3IpLHAoXCJFUlJfU1RSRUFNX0FMUkVBRFlfRklOSVNIRURcIixcIkNhbm5vdCBjYWxsICVzIGFmdGVyIGEgc3RyZWFtIHdhcyBmaW5pc2hlZFwiLEVycm9yKSxwKFwiRVJSX1NUUkVBTV9DQU5OT1RfUElQRVwiLFwiQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZVwiLEVycm9yKSxwKFwiRVJSX1NUUkVBTV9ERVNUUk9ZRURcIixcIkNhbm5vdCBjYWxsICVzIGFmdGVyIGEgc3RyZWFtIHdhcyBkZXN0cm95ZWRcIixFcnJvcikscChcIkVSUl9TVFJFQU1fTlVMTF9WQUxVRVNcIixcIk1heSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtXCIsVHlwZUVycm9yKSxwKFwiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0VcIixcIlByZW1hdHVyZSBjbG9zZVwiLEVycm9yKSxwKFwiRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRlwiLFwic3RyZWFtLnB1c2goKSBhZnRlciBFT0ZcIixFcnJvcikscChcIkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlRcIixcInN0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50XCIsRXJyb3IpLHAoXCJFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORFwiLFwid3JpdGUgYWZ0ZXIgZW5kXCIsRXJyb3IpLHAoXCJFUlJfVU5LTk9XTl9FTkNPRElOR1wiLFwiVW5rbm93biBlbmNvZGluZzogJXNcIixUeXBlRXJyb3IpLGUuZXhwb3J0cz17QWJvcnRFcnJvcjpnLGFnZ3JlZ2F0ZVR3b0Vycm9yczpoKChmdW5jdGlvbihlLHQpe2lmKGUmJnQmJmUhPT10KXtpZihBcnJheS5pc0FycmF5KHQuZXJyb3JzKSlyZXR1cm4gdC5lcnJvcnMucHVzaChlKSx0O2NvbnN0IG49bmV3IGEoW3QsZV0sdC5tZXNzYWdlKTtyZXR1cm4gbi5jb2RlPXQuY29kZSxufXJldHVybiBlfHx0fSkpLGhpZGVTdGFja0ZyYW1lczpoLGNvZGVzOnV9fSwxOTE6ZT0+e2UuZXhwb3J0cz17QXJyYXlJc0FycmF5OmU9PkFycmF5LmlzQXJyYXkoZSksQXJyYXlQcm90b3R5cGVJbmNsdWRlczooZSx0KT0+ZS5pbmNsdWRlcyh0KSxBcnJheVByb3RvdHlwZUluZGV4T2Y6KGUsdCk9PmUuaW5kZXhPZih0KSxBcnJheVByb3RvdHlwZUpvaW46KGUsdCk9PmUuam9pbih0KSxBcnJheVByb3RvdHlwZU1hcDooZSx0KT0+ZS5tYXAodCksQXJyYXlQcm90b3R5cGVQb3A6KGUsdCk9PmUucG9wKHQpLEFycmF5UHJvdG90eXBlUHVzaDooZSx0KT0+ZS5wdXNoKHQpLEFycmF5UHJvdG90eXBlU2xpY2U6KGUsdCxuKT0+ZS5zbGljZSh0LG4pLEVycm9yLEZ1bmN0aW9uUHJvdG90eXBlQ2FsbDooZSx0LC4uLm4pPT5lLmNhbGwodCwuLi5uKSxGdW5jdGlvblByb3RvdHlwZVN5bWJvbEhhc0luc3RhbmNlOihlLHQpPT5GdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXS5jYWxsKGUsdCksTWF0aEZsb29yOk1hdGguZmxvb3IsTnVtYmVyLE51bWJlcklzSW50ZWdlcjpOdW1iZXIuaXNJbnRlZ2VyLE51bWJlcklzTmFOOk51bWJlci5pc05hTixOdW1iZXJNQVhfU0FGRV9JTlRFR0VSOk51bWJlci5NQVhfU0FGRV9JTlRFR0VSLE51bWJlck1JTl9TQUZFX0lOVEVHRVI6TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIsTnVtYmVyUGFyc2VJbnQ6TnVtYmVyLnBhcnNlSW50LE9iamVjdERlZmluZVByb3BlcnRpZXM6KGUsdCk9Pk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsdCksT2JqZWN0RGVmaW5lUHJvcGVydHk6KGUsdCxuKT0+T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxuKSxPYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6KGUsdCk9Pk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KSxPYmplY3RLZXlzOmU9Pk9iamVjdC5rZXlzKGUpLE9iamVjdFNldFByb3RvdHlwZU9mOihlLHQpPT5PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KSxQcm9taXNlLFByb21pc2VQcm90b3R5cGVDYXRjaDooZSx0KT0+ZS5jYXRjaCh0KSxQcm9taXNlUHJvdG90eXBlVGhlbjooZSx0LG4pPT5lLnRoZW4odCxuKSxQcm9taXNlUmVqZWN0OmU9PlByb21pc2UucmVqZWN0KGUpLFJlZmxlY3RBcHBseTpSZWZsZWN0LmFwcGx5LFJlZ0V4cFByb3RvdHlwZVRlc3Q6KGUsdCk9PmUudGVzdCh0KSxTYWZlU2V0OlNldCxTdHJpbmcsU3RyaW5nUHJvdG90eXBlU2xpY2U6KGUsdCxuKT0+ZS5zbGljZSh0LG4pLFN0cmluZ1Byb3RvdHlwZVRvTG93ZXJDYXNlOmU9PmUudG9Mb3dlckNhc2UoKSxTdHJpbmdQcm90b3R5cGVUb1VwcGVyQ2FzZTplPT5lLnRvVXBwZXJDYXNlKCksU3RyaW5nUHJvdG90eXBlVHJpbTplPT5lLnRyaW0oKSxTeW1ib2wsU3ltYm9sRm9yOlN5bWJvbC5mb3IsU3ltYm9sQXN5bmNJdGVyYXRvcjpTeW1ib2wuYXN5bmNJdGVyYXRvcixTeW1ib2xIYXNJbnN0YW5jZTpTeW1ib2wuaGFzSW5zdGFuY2UsU3ltYm9sSXRlcmF0b3I6U3ltYm9sLml0ZXJhdG9yLFR5cGVkQXJyYXlQcm90b3R5cGVTZXQ6KGUsdCxuKT0+ZS5zZXQodCxuKSxVaW50OEFycmF5fX0sNzc1OihlLHQsbik9Pntjb25zdCByPW4oNDg1KSxvPU9iamVjdC5nZXRQcm90b3R5cGVPZigoYXN5bmMgZnVuY3Rpb24oKXt9KSkuY29uc3RydWN0b3IsaT1nbG9iYWxUaGlzLkJsb2J8fHIuQmxvYixhPXZvaWQgMCE9PWk/ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBpfTpmdW5jdGlvbihlKXtyZXR1cm4hMX07Y2xhc3MgbCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUpe2lmKCFBcnJheS5pc0FycmF5KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBpbnB1dCB0byBiZSBhbiBBcnJheSwgZ290IFwiK3R5cGVvZiBlKTtsZXQgdD1cIlwiO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQrPWAgICAgJHtlW25dLnN0YWNrfVxcbmA7c3VwZXIodCksdGhpcy5uYW1lPVwiQWdncmVnYXRlRXJyb3JcIix0aGlzLmVycm9ycz1lfX1lLmV4cG9ydHM9e0FnZ3JlZ2F0ZUVycm9yOmwsa0VtcHR5T2JqZWN0Ok9iamVjdC5mcmVlemUoe30pLG9uY2UoZSl7bGV0IHQ9ITE7cmV0dXJuIGZ1bmN0aW9uKC4uLm4pe3R8fCh0PSEwLGUuYXBwbHkodGhpcyxuKSl9fSxjcmVhdGVEZWZlcnJlZFByb21pc2U6ZnVuY3Rpb24oKXtsZXQgZSx0O3JldHVybntwcm9taXNlOm5ldyBQcm9taXNlKCgobixyKT0+e2U9bix0PXJ9KSkscmVzb2x2ZTplLHJlamVjdDp0fX0scHJvbWlzaWZ5OmU9Pm5ldyBQcm9taXNlKCgodCxuKT0+e2UoKChlLC4uLnIpPT5lP24oZSk6dCguLi5yKSkpfSkpLGRlYnVnbG9nOigpPT5mdW5jdGlvbigpe30sZm9ybWF0OihlLC4uLnQpPT5lLnJlcGxhY2UoLyUoW3NkaWZqXSkvZywoZnVuY3Rpb24oLi4uW2Usbl0pe2NvbnN0IHI9dC5zaGlmdCgpO3JldHVyblwiZlwiPT09bj9yLnRvRml4ZWQoNik6XCJqXCI9PT1uP0pTT04uc3RyaW5naWZ5KHIpOlwic1wiPT09biYmXCJvYmplY3RcIj09dHlwZW9mIHI/YCR7ci5jb25zdHJ1Y3RvciE9PU9iamVjdD9yLmNvbnN0cnVjdG9yLm5hbWU6XCJcIn0ge31gLnRyaW0oKTpyLnRvU3RyaW5nKCl9KSksaW5zcGVjdChlKXtzd2l0Y2godHlwZW9mIGUpe2Nhc2VcInN0cmluZ1wiOmlmKGUuaW5jbHVkZXMoXCInXCIpKXtpZighZS5pbmNsdWRlcygnXCInKSlyZXR1cm5gXCIke2V9XCJgO2lmKCFlLmluY2x1ZGVzKFwiYFwiKSYmIWUuaW5jbHVkZXMoXCIke1wiKSlyZXR1cm5gXFxgJHtlfVxcYGB9cmV0dXJuYCcke2V9J2A7Y2FzZVwibnVtYmVyXCI6cmV0dXJuIGlzTmFOKGUpP1wiTmFOXCI6T2JqZWN0LmlzKGUsLTApP1N0cmluZyhlKTplO2Nhc2VcImJpZ2ludFwiOnJldHVybmAke1N0cmluZyhlKX1uYDtjYXNlXCJib29sZWFuXCI6Y2FzZVwidW5kZWZpbmVkXCI6cmV0dXJuIFN0cmluZyhlKTtjYXNlXCJvYmplY3RcIjpyZXR1cm5cInt9XCJ9fSx0eXBlczp7aXNBc3luY0Z1bmN0aW9uOmU9PmUgaW5zdGFuY2VvZiBvLGlzQXJyYXlCdWZmZXJWaWV3OmU9PkFycmF5QnVmZmVyLmlzVmlldyhlKX0saXNCbG9iOmF9LGUuZXhwb3J0cy5wcm9taXNpZnkuY3VzdG9tPVN5bWJvbC5mb3IoXCJub2RlanMudXRpbC5wcm9taXNpZnkuY3VzdG9tXCIpfSwyOTI6KGUsdCxuKT0+e2NvbnN0e0J1ZmZlcjpyfT1uKDQ4NSkse09iamVjdERlZmluZVByb3BlcnR5Om8sT2JqZWN0S2V5czppLFJlZmxlY3RBcHBseTphfT1uKDE5MSkse3Byb21pc2lmeTp7Y3VzdG9tOmx9fT1uKDc3NSkse3N0cmVhbVJldHVybmluZ09wZXJhdG9yczpzLHByb21pc2VSZXR1cm5pbmdPcGVyYXRvcnM6Y309big1NTQpLHtjb2Rlczp7RVJSX0lMTEVHQUxfQ09OU1RSVUNUT1I6dX19PW4oMTQxKSxmPW4oODE4KSx7cGlwZWxpbmU6ZH09big3NTQpLHtkZXN0cm95ZXI6cH09bigyMzApLGg9big4NiksZz1uKDc2MCksdj1uKDEzMiksbT1lLmV4cG9ydHM9bigyMDApLlN0cmVhbTttLmlzRGlzdHVyYmVkPXYuaXNEaXN0dXJiZWQsbS5pc0Vycm9yZWQ9di5pc0Vycm9yZWQsbS5pc1JlYWRhYmxlPXYuaXNSZWFkYWJsZSxtLlJlYWRhYmxlPW4oODU4KTtmb3IoY29uc3QgeSBvZiBpKHMpKXtjb25zdCB3PXNbeV07ZnVuY3Rpb24gYiguLi5lKXtpZihuZXcudGFyZ2V0KXRocm93IHUoKTtyZXR1cm4gbS5SZWFkYWJsZS5mcm9tKGEodyx0aGlzLGUpKX1vKGIsXCJuYW1lXCIse19fcHJvdG9fXzpudWxsLHZhbHVlOncubmFtZX0pLG8oYixcImxlbmd0aFwiLHtfX3Byb3RvX186bnVsbCx2YWx1ZTp3Lmxlbmd0aH0pLG8obS5SZWFkYWJsZS5wcm90b3R5cGUseSx7X19wcm90b19fOm51bGwsdmFsdWU6YixlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfWZvcihjb25zdCB4IG9mIGkoYykpe2NvbnN0IF89Y1t4XTtmdW5jdGlvbiBPKC4uLmUpe2lmKG5ldy50YXJnZXQpdGhyb3cgdSgpO3JldHVybiBhKF8sdGhpcyxlKX1vKE8sXCJuYW1lXCIse19fcHJvdG9fXzpudWxsLHZhbHVlOl8ubmFtZX0pLG8oTyxcImxlbmd0aFwiLHtfX3Byb3RvX186bnVsbCx2YWx1ZTpfLmxlbmd0aH0pLG8obS5SZWFkYWJsZS5wcm90b3R5cGUseCx7X19wcm90b19fOm51bGwsdmFsdWU6TyxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfW0uV3JpdGFibGU9bigzNzMpLG0uRHVwbGV4PW4oMTgyKSxtLlRyYW5zZm9ybT1uKDIxMCksbS5QYXNzVGhyb3VnaD1uKDQ2NyksbS5waXBlbGluZT1kO2NvbnN0e2FkZEFib3J0U2lnbmFsOkN9PW4oMzc0KTttLmFkZEFib3J0U2lnbmFsPUMsbS5maW5pc2hlZD1oLG0uZGVzdHJveT1wLG0uY29tcG9zZT1mLG8obSxcInByb21pc2VzXCIse19fcHJvdG9fXzpudWxsLGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDooKT0+Z30pLG8oZCxsLHtfX3Byb3RvX186bnVsbCxlbnVtZXJhYmxlOiEwLGdldDooKT0+Zy5waXBlbGluZX0pLG8oaCxsLHtfX3Byb3RvX186bnVsbCxlbnVtZXJhYmxlOiEwLGdldDooKT0+Zy5maW5pc2hlZH0pLG0uU3RyZWFtPW0sbS5faXNVaW50OEFycmF5PWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgVWludDhBcnJheX0sbS5fdWludDhBcnJheVRvQnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiByLmZyb20oZS5idWZmZXIsZS5ieXRlT2Zmc2V0LGUuYnl0ZUxlbmd0aCl9fSw3NjA6KGUsdCxuKT0+e2NvbnN0e0FycmF5UHJvdG90eXBlUG9wOnIsUHJvbWlzZTpvfT1uKDE5MSkse2lzSXRlcmFibGU6aSxpc05vZGVTdHJlYW06YSxpc1dlYlN0cmVhbTpsfT1uKDEzMikse3BpcGVsaW5lSW1wbDpzfT1uKDc1NCkse2ZpbmlzaGVkOmN9PW4oODYpO24oOTEpLGUuZXhwb3J0cz17ZmluaXNoZWQ6YyxwaXBlbGluZTpmdW5jdGlvbiguLi5lKXtyZXR1cm4gbmV3IG8oKCh0LG4pPT57bGV0IG8sYztjb25zdCB1PWVbZS5sZW5ndGgtMV07aWYodSYmXCJvYmplY3RcIj09dHlwZW9mIHUmJiFhKHUpJiYhaSh1KSYmIWwodSkpe2NvbnN0IHQ9cihlKTtvPXQuc2lnbmFsLGM9dC5lbmR9cyhlLCgoZSxyKT0+e2U/bihlKTp0KHIpfSkse3NpZ25hbDpvLGVuZDpjfSl9KSl9fX0sNTMzOmU9Pnt2YXIgdCxuLHI9ZS5leHBvcnRzPXt9O2Z1bmN0aW9uIG8oKXt0aHJvdyBuZXcgRXJyb3IoXCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkXCIpfWZ1bmN0aW9uIGkoKXt0aHJvdyBuZXcgRXJyb3IoXCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWRcIil9ZnVuY3Rpb24gYShlKXtpZih0PT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dChlLDApO2lmKCh0PT09b3x8IXQpJiZzZXRUaW1lb3V0KXJldHVybiB0PXNldFRpbWVvdXQsc2V0VGltZW91dChlLDApO3RyeXtyZXR1cm4gdChlLDApfWNhdGNoKG4pe3RyeXtyZXR1cm4gdC5jYWxsKG51bGwsZSwwKX1jYXRjaChuKXtyZXR1cm4gdC5jYWxsKHRoaXMsZSwwKX19fSFmdW5jdGlvbigpe3RyeXt0PVwiZnVuY3Rpb25cIj09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDpvfWNhdGNoKGUpe3Q9b310cnl7bj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBjbGVhclRpbWVvdXQ/Y2xlYXJUaW1lb3V0Oml9Y2F0Y2goZSl7bj1pfX0oKTt2YXIgbCxzPVtdLGM9ITEsdT0tMTtmdW5jdGlvbiBmKCl7YyYmbCYmKGM9ITEsbC5sZW5ndGg/cz1sLmNvbmNhdChzKTp1PS0xLHMubGVuZ3RoJiZkKCkpfWZ1bmN0aW9uIGQoKXtpZighYyl7dmFyIGU9YShmKTtjPSEwO2Zvcih2YXIgdD1zLmxlbmd0aDt0Oyl7Zm9yKGw9cyxzPVtdOysrdTx0OylsJiZsW3VdLnJ1bigpO3U9LTEsdD1zLmxlbmd0aH1sPW51bGwsYz0hMSxmdW5jdGlvbihlKXtpZihuPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQoZSk7aWYoKG49PT1pfHwhbikmJmNsZWFyVGltZW91dClyZXR1cm4gbj1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KGUpO3RyeXtyZXR1cm4gbihlKX1jYXRjaCh0KXt0cnl7cmV0dXJuIG4uY2FsbChudWxsLGUpfWNhdGNoKHQpe3JldHVybiBuLmNhbGwodGhpcyxlKX19fShlKX19ZnVuY3Rpb24gcChlLHQpe3RoaXMuZnVuPWUsdGhpcy5hcnJheT10fWZ1bmN0aW9uIGgoKXt9ci5uZXh0VGljaz1mdW5jdGlvbihlKXt2YXIgdD1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMV09YXJndW1lbnRzW25dO3MucHVzaChuZXcgcChlLHQpKSwxIT09cy5sZW5ndGh8fGN8fGEoZCl9LHAucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9LHIudGl0bGU9XCJicm93c2VyXCIsci5icm93c2VyPSEwLHIuZW52PXt9LHIuYXJndj1bXSxyLnZlcnNpb249XCJcIixyLnZlcnNpb25zPXt9LHIub249aCxyLmFkZExpc3RlbmVyPWgsci5vbmNlPWgsci5vZmY9aCxyLnJlbW92ZUxpc3RlbmVyPWgsci5yZW1vdmVBbGxMaXN0ZW5lcnM9aCxyLmVtaXQ9aCxyLnByZXBlbmRMaXN0ZW5lcj1oLHIucHJlcGVuZE9uY2VMaXN0ZW5lcj1oLHIubGlzdGVuZXJzPWZ1bmN0aW9uKGUpe3JldHVybltdfSxyLmJpbmRpbmc9ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKFwicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWRcIil9LHIuY3dkPWZ1bmN0aW9uKCl7cmV0dXJuXCIvXCJ9LHIuY2hkaXI9ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKFwicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkXCIpfSxyLnVtYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9fSwzNzc6KGUsdCxuKT0+e3ZhciByPW4oNDg1KSxvPXIuQnVmZmVyO2Z1bmN0aW9uIGkoZSx0KXtmb3IodmFyIG4gaW4gZSl0W25dPWVbbl19ZnVuY3Rpb24gYShlLHQsbil7cmV0dXJuIG8oZSx0LG4pfW8uZnJvbSYmby5hbGxvYyYmby5hbGxvY1Vuc2FmZSYmby5hbGxvY1Vuc2FmZVNsb3c/ZS5leHBvcnRzPXI6KGkocix0KSx0LkJ1ZmZlcj1hKSxpKG8sYSksYS5mcm9tPWZ1bmN0aW9uKGUsdCxuKXtpZihcIm51bWJlclwiPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXJcIik7cmV0dXJuIG8oZSx0LG4pfSxhLmFsbG9jPWZ1bmN0aW9uKGUsdCxuKXtpZihcIm51bWJlclwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlclwiKTt2YXIgcj1vKGUpO3JldHVybiB2b2lkIDAhPT10P1wic3RyaW5nXCI9PXR5cGVvZiBuP3IuZmlsbCh0LG4pOnIuZmlsbCh0KTpyLmZpbGwoMCkscn0sYS5hbGxvY1Vuc2FmZT1mdW5jdGlvbihlKXtpZihcIm51bWJlclwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlclwiKTtyZXR1cm4gbyhlKX0sYS5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZSl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXJcIik7cmV0dXJuIHIuU2xvd0J1ZmZlcihlKX19LDQ2NDooZSx0LG4pPT57dmFyIHI9bigzNzcpLkJ1ZmZlcixvPXIuaXNFbmNvZGluZ3x8ZnVuY3Rpb24oZSl7c3dpdGNoKChlPVwiXCIrZSkmJmUudG9Mb3dlckNhc2UoKSl7Y2FzZVwiaGV4XCI6Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6Y2FzZVwiYXNjaWlcIjpjYXNlXCJiaW5hcnlcIjpjYXNlXCJiYXNlNjRcIjpjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpjYXNlXCJyYXdcIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX07ZnVuY3Rpb24gaShlKXt2YXIgdDtzd2l0Y2godGhpcy5lbmNvZGluZz1mdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbihlKXtpZighZSlyZXR1cm5cInV0ZjhcIjtmb3IodmFyIHQ7Oylzd2l0Y2goZSl7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuXCJ1dGY4XCI7Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuXCJ1dGYxNmxlXCI7Y2FzZVwibGF0aW4xXCI6Y2FzZVwiYmluYXJ5XCI6cmV0dXJuXCJsYXRpbjFcIjtjYXNlXCJiYXNlNjRcIjpjYXNlXCJhc2NpaVwiOmNhc2VcImhleFwiOnJldHVybiBlO2RlZmF1bHQ6aWYodClyZXR1cm47ZT0oXCJcIitlKS50b0xvd2VyQ2FzZSgpLHQ9ITB9fShlKTtpZihcInN0cmluZ1wiIT10eXBlb2YgdCYmKHIuaXNFbmNvZGluZz09PW98fCFvKGUpKSl0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGVuY29kaW5nOiBcIitlKTtyZXR1cm4gdHx8ZX0oZSksdGhpcy5lbmNvZGluZyl7Y2FzZVwidXRmMTZsZVwiOnRoaXMudGV4dD1zLHRoaXMuZW5kPWMsdD00O2JyZWFrO2Nhc2VcInV0ZjhcIjp0aGlzLmZpbGxMYXN0PWwsdD00O2JyZWFrO2Nhc2VcImJhc2U2NFwiOnRoaXMudGV4dD11LHRoaXMuZW5kPWYsdD0zO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHRoaXMud3JpdGU9ZCx2b2lkKHRoaXMuZW5kPXApfXRoaXMubGFzdE5lZWQ9MCx0aGlzLmxhc3RUb3RhbD0wLHRoaXMubGFzdENoYXI9ci5hbGxvY1Vuc2FmZSh0KX1mdW5jdGlvbiBhKGUpe3JldHVybiBlPD0xMjc/MDplPj41PT02PzI6ZT4+ND09MTQ/MzplPj4zPT0zMD80OmU+PjY9PTI/LTE6LTJ9ZnVuY3Rpb24gbChlKXt2YXIgdD10aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLG49ZnVuY3Rpb24oZSx0LG4pe2lmKDEyOCE9KDE5MiZ0WzBdKSlyZXR1cm4gZS5sYXN0TmVlZD0wLFwi77+9XCI7aWYoZS5sYXN0TmVlZD4xJiZ0Lmxlbmd0aD4xKXtpZigxMjghPSgxOTImdFsxXSkpcmV0dXJuIGUubGFzdE5lZWQ9MSxcIu+/vVwiO2lmKGUubGFzdE5lZWQ+MiYmdC5sZW5ndGg+MiYmMTI4IT0oMTkyJnRbMl0pKXJldHVybiBlLmxhc3ROZWVkPTIsXCLvv71cIn19KHRoaXMsZSk7cmV0dXJuIHZvaWQgMCE9PW4/bjp0aGlzLmxhc3ROZWVkPD1lLmxlbmd0aD8oZS5jb3B5KHRoaXMubGFzdENoYXIsdCwwLHRoaXMubGFzdE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMubGFzdFRvdGFsKSk6KGUuY29weSh0aGlzLmxhc3RDaGFyLHQsMCxlLmxlbmd0aCksdm9pZCh0aGlzLmxhc3ROZWVkLT1lLmxlbmd0aCkpfWZ1bmN0aW9uIHMoZSx0KXtpZigoZS5sZW5ndGgtdCklMj09MCl7dmFyIG49ZS50b1N0cmluZyhcInV0ZjE2bGVcIix0KTtpZihuKXt2YXIgcj1uLmNoYXJDb2RlQXQobi5sZW5ndGgtMSk7aWYocj49NTUyOTYmJnI8PTU2MzE5KXJldHVybiB0aGlzLmxhc3ROZWVkPTIsdGhpcy5sYXN0VG90YWw9NCx0aGlzLmxhc3RDaGFyWzBdPWVbZS5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1lW2UubGVuZ3RoLTFdLG4uc2xpY2UoMCwtMSl9cmV0dXJuIG59cmV0dXJuIHRoaXMubGFzdE5lZWQ9MSx0aGlzLmxhc3RUb3RhbD0yLHRoaXMubGFzdENoYXJbMF09ZVtlLmxlbmd0aC0xXSxlLnRvU3RyaW5nKFwidXRmMTZsZVwiLHQsZS5sZW5ndGgtMSl9ZnVuY3Rpb24gYyhlKXt2YXIgdD1lJiZlLmxlbmd0aD90aGlzLndyaXRlKGUpOlwiXCI7aWYodGhpcy5sYXN0TmVlZCl7dmFyIG49dGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZDtyZXR1cm4gdCt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKFwidXRmMTZsZVwiLDAsbil9cmV0dXJuIHR9ZnVuY3Rpb24gdShlLHQpe3ZhciBuPShlLmxlbmd0aC10KSUzO3JldHVybiAwPT09bj9lLnRvU3RyaW5nKFwiYmFzZTY0XCIsdCk6KHRoaXMubGFzdE5lZWQ9My1uLHRoaXMubGFzdFRvdGFsPTMsMT09PW4/dGhpcy5sYXN0Q2hhclswXT1lW2UubGVuZ3RoLTFdOih0aGlzLmxhc3RDaGFyWzBdPWVbZS5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1lW2UubGVuZ3RoLTFdKSxlLnRvU3RyaW5nKFwiYmFzZTY0XCIsdCxlLmxlbmd0aC1uKSl9ZnVuY3Rpb24gZihlKXt2YXIgdD1lJiZlLmxlbmd0aD90aGlzLndyaXRlKGUpOlwiXCI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/dCt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKFwiYmFzZTY0XCIsMCwzLXRoaXMubGFzdE5lZWQpOnR9ZnVuY3Rpb24gZChlKXtyZXR1cm4gZS50b1N0cmluZyh0aGlzLmVuY29kaW5nKX1mdW5jdGlvbiBwKGUpe3JldHVybiBlJiZlLmxlbmd0aD90aGlzLndyaXRlKGUpOlwiXCJ9dC5TdHJpbmdEZWNvZGVyPWksaS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSl7aWYoMD09PWUubGVuZ3RoKXJldHVyblwiXCI7dmFyIHQsbjtpZih0aGlzLmxhc3ROZWVkKXtpZih2b2lkIDA9PT0odD10aGlzLmZpbGxMYXN0KGUpKSlyZXR1cm5cIlwiO249dGhpcy5sYXN0TmVlZCx0aGlzLmxhc3ROZWVkPTB9ZWxzZSBuPTA7cmV0dXJuIG48ZS5sZW5ndGg/dD90K3RoaXMudGV4dChlLG4pOnRoaXMudGV4dChlLG4pOnR8fFwiXCJ9LGkucHJvdG90eXBlLmVuZD1mdW5jdGlvbihlKXt2YXIgdD1lJiZlLmxlbmd0aD90aGlzLndyaXRlKGUpOlwiXCI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/dCtcIu+/vVwiOnR9LGkucHJvdG90eXBlLnRleHQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dC5sZW5ndGgtMTtpZihyPG4pcmV0dXJuIDA7dmFyIG89YSh0W3JdKTtyZXR1cm4gbz49MD8obz4wJiYoZS5sYXN0TmVlZD1vLTEpLG8pOi0tcjxufHwtMj09PW8/MDoobz1hKHRbcl0pKT49MD8obz4wJiYoZS5sYXN0TmVlZD1vLTIpLG8pOi0tcjxufHwtMj09PW8/MDoobz1hKHRbcl0pKT49MD8obz4wJiYoMj09PW8/bz0wOmUubGFzdE5lZWQ9by0zKSxvKTowfSh0aGlzLGUsdCk7aWYoIXRoaXMubGFzdE5lZWQpcmV0dXJuIGUudG9TdHJpbmcoXCJ1dGY4XCIsdCk7dGhpcy5sYXN0VG90YWw9bjt2YXIgcj1lLmxlbmd0aC0obi10aGlzLmxhc3ROZWVkKTtyZXR1cm4gZS5jb3B5KHRoaXMubGFzdENoYXIsMCxyKSxlLnRvU3RyaW5nKFwidXRmOFwiLHQscil9LGkucHJvdG90eXBlLmZpbGxMYXN0PWZ1bmN0aW9uKGUpe2lmKHRoaXMubGFzdE5lZWQ8PWUubGVuZ3RoKXJldHVybiBlLmNvcHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpO2UuY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCxlLmxlbmd0aCksdGhpcy5sYXN0TmVlZC09ZS5sZW5ndGh9fSw1NDooZSx0LG4pPT57bi5kKHQse01TOigpPT5rLGNGOigpPT5SLEFLOigpPT5QLE1fOigpPT5JLGNYOigpPT5BLEJUOigpPT5yZSxfVzooKT0+SCxQZzooKT0+aGUsJGo6KCk9PnRlLFUkOigpPT5OLFU3OigpPT5GfSk7dmFyIHI9e2Q6KGUsdCk9Pntmb3IodmFyIG4gaW4gdClyLm8odCxuKSYmIXIubyhlLG4pJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHtlbnVtZXJhYmxlOiEwLGdldDp0W25dfSl9LG86KGUsdCk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfSxvPXt9O3IuZChvLHtNUzooKT0+aSxjRjooKT0+YSxBSzooKT0+cyxNXzooKT0+bCxjWDooKT0+YyxZZDooKT0+dixuajooKT0+dSxPNDooKT0+TSxfVzooKT0+ZixVJDooKT0+cCxVNzooKT0+aH0pO2NsYXNzIGkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlLHQpe3ZhciBuLHI7c3VwZXIoZT1udWxsIT09KG49bnVsbCE9ZT9lOm51bGw9PXQ/dm9pZCAwOnQubWVzc2FnZSkmJnZvaWQgMCE9PW4/bjpcIkFuIHVuZXhwZWN0ZWQgZXJyb3IgaGFzIG9jY3VycmVkXCIpLHRoaXMubmFtZT10aGlzLmNvbnN0cnVjdG9yLm5hbWUsdGhpcy5zdGFjaz0oZT90aGlzLnN0YWNrOm51bGwhPT0ocj1udWxsPT10P3ZvaWQgMDp0LnN0YWNrKSYmdm9pZCAwIT09cj9yOnRoaXMuc3RhY2spLnJlcGxhY2UoL14oXFx3KkVycm9yKS8sYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfWApfX1jbGFzcyBhIGV4dGVuZHMgaXtjb25zdHJ1Y3RvcihlLHQsbil7dmFyIHI7c3VwZXIoZT1udWxsIT09KHI9bnVsbCE9ZT9lOm51bGw9PW4/dm9pZCAwOm4ubWVzc2FnZSkmJnZvaWQgMCE9PXI/cjpcIkFuIGVycm9yIG9jY3VycmVkIHdoZW4gZXhlY3V0aW5nIHRoZSBBUEkgcmVxdWVzdFwiLG4pLHRoaXMuc3RhdHVzPXR9fWNsYXNzIGwgZXh0ZW5kcyBpe2NvbnN0cnVjdG9yKGUsdCl7dmFyIG47c3VwZXIoZT1udWxsIT09KG49bnVsbCE9ZT9lOm51bGw9PXQ/dm9pZCAwOnQubWVzc2FnZSkmJnZvaWQgMCE9PW4/bjpcIkFuIGF1dGhvcml6YXRpb24gZXJyb3Igb2NjdXJyZWRcIix0KX19Y2xhc3MgcyBleHRlbmRzIGl7Y29uc3RydWN0b3IoZSx0KXt2YXIgbjtzdXBlcihlPW51bGwhPT0obj1udWxsIT1lP2U6bnVsbD09dD92b2lkIDA6dC5tZXNzYWdlKSYmdm9pZCAwIT09bj9uOlwiVGhlIEFQSSByZXF1ZXN0IGZhaWxlZCBhcyB0aGUgYXV0aG9yaXphdGlvbiB0b2tlbnMgaGF2ZSBleHBpcmVkXCIsdCl9fWNsYXNzIGMgZXh0ZW5kcyBpe2NvbnN0cnVjdG9yKGUsdCl7dmFyIG47c3VwZXIoZT1udWxsIT09KG49bnVsbCE9ZT9lOm51bGw9PXQ/dm9pZCAwOnQubWVzc2FnZSkmJnZvaWQgMCE9PW4/bjpcIkFuIGluaXRpYWxpemF0aW9uIGVycm9yIG9jY3VycmVkXCIsdCl9fWNsYXNzIHUgZXh0ZW5kcyBpe2NvbnN0cnVjdG9yKGUsdCl7dmFyIG47c3VwZXIoZT1udWxsIT09KG49bnVsbCE9ZT9lOm51bGw9PXQ/dm9pZCAwOnQubWVzc2FnZSkmJnZvaWQgMCE9PW4/bjpcIlRoZSBtZXRob2QgaGFzIG5vdCBiZWVuIGltcGxlbWVudGVkXCIsdCl9fWNsYXNzIGYgZXh0ZW5kcyBpe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGU9bnVsbCE9ZT9lOlwiSW52YWxpZCBwYXJhbWV0ZXIgZGV0ZWN0ZWRcIil9fWNvbnN0IGQ9ZT0+e2xldCB0PWZpbi5JbnRlZ3JhdGlvbnM7dHx8KGZpbi5JbnRlZ3JhdGlvbnM9e30sdD1maW4uSW50ZWdyYXRpb25zKTtsZXQgbj10W2VdO3JldHVybiBufHwodFtlXT17fSxuPXRbZV0pLG59LHA9ZT0+e2QoZSkubG9nZ2luZ0VuYWJsZWQ9ITF9LGg9KGUsdD1cIjAuMC4wXCIpPT57ZChlKS5sb2dnaW5nRW5hYmxlZD0hMCxnKGUpfSxnPWU9PmBbQG9wZW5maW4vJHtlLnRvTG93ZXJDYXNlKCl9XWA7Y2xhc3Mgdntjb25zdHJ1Y3RvcihlKXt0aGlzLm5hbWU9ZSx0aGlzLnByZWZpeD1nKGUpLHRoaXMuaXNMb2dnaW5nRW5hYmxlZD10aGlzLmlzTG9nZ2luZ0VuYWJsZWQuYmluZCh0aGlzKSx0aGlzLmxvZ0Vycm9yPXRoaXMubG9nRXJyb3IuYmluZCh0aGlzKSx0aGlzLmxvZ0luZm89dGhpcy5sb2dJbmZvLmJpbmQodGhpcyksdGhpcy5sb2dXYXJuaW5nPXRoaXMubG9nV2FybmluZy5iaW5kKHRoaXMpfWlzTG9nZ2luZ0VuYWJsZWQoKXtyZXR1cm4gZCh0aGlzLm5hbWUpLmxvZ2dpbmdFbmFibGVkfWxvZ0Vycm9yKGUpe3RoaXMuaXNMb2dnaW5nRW5hYmxlZCgpJiYoZS5pbm5lckVycm9yP2NvbnNvbGUuZXJyb3IodGhpcy5wcmVmaXgsZSxcIlxcblxcbihpbm5lcilcIixlLmlubmVyRXJyb3IpOmNvbnNvbGUuZXJyb3IodGhpcy5wcmVmaXgsZSkpfWxvZ0luZm8oLi4uZSl7dGhpcy5pc0xvZ2dpbmdFbmFibGVkKCkmJnRoaXMucHJlZml4fWxvZ1dhcm5pbmcoLi4uZSl7dGhpcy5pc0xvZ2dpbmdFbmFibGVkKCkmJmNvbnNvbGUud2Fybih0aGlzLnByZWZpeCwuLi5lKX19Y29uc3QgbT1cIm9hdXRoLWFwaS1hdXRoLWZsb3dcIixDPShlLHQsbixyLG8sYSxsLHMpPT5hc3luYyBjPT57Y29uc3QgdT1uZXcgVVJMKGMpO2lmKDAhPT11LmhyZWYudG9Mb3dlckNhc2UoKS5pbmRleE9mKG8udG9Mb3dlckNhc2UoKSkpcmV0dXJuITE7aWYod2luZG93LmNsZWFySW50ZXJ2YWwocyksd2luZG93LmNsZWFyVGltZW91dCh0KSx3aW5kb3cuY2xlYXJUaW1lb3V0KG4pLGUucmVtb3ZlQWxsTGlzdGVuZXJzKCksZS5jbG9zZSghMCksdS5zZWFyY2hQYXJhbXMuZ2V0KFwiZXJyb3JcIikpe2NvbnN0IGU9bmV3IGkoXCJBdXRob3JpemF0aW9uIGVycm9yXCIpO3JldHVybiBlLmRhdGE9dS50b1N0cmluZygpLGwoZSksITB9aWYodS5zZWFyY2hQYXJhbXMuZ2V0KFwic3RhdGVcIikhPT1yKXtjb25zdCBlPW5ldyBpKFwiU3RhdGUgbWlzbWF0Y2hcIik7cmV0dXJuIGUuZGF0YT11LnRvU3RyaW5nKCksbChlKSwhMH1jb25zdCBmPXUuc2VhcmNoUGFyYW1zLmdldChcImNvZGVcIik7aWYoIWYpe2NvbnN0IGU9bmV3IGkoXCJBdXRob3JpemF0aW9uIGNvZGUgbWlzc2luZ1wiKTtyZXR1cm4gZS5kYXRhPXUudG9TdHJpbmcoKSxsKGUpLCEwfXJldHVybiBhKGYpLCEwfSx5PShlLHQsbixyKT0+YXN5bmMobyxhKT0+e2xldCBsO2NvbnN0IHM9d2luZG93LnNldFRpbWVvdXQoKCgpPT57d2luZG93LmNsZWFySW50ZXJ2YWwobCksd2luZG93LmNsZWFyVGltZW91dChzKSxlLnJlbW92ZUFsbExpc3RlbmVycygpLGUuY2xvc2UoITApLGEobmV3IGkoXCJBdXRob3JpemF0aW9uIHRpbWVkIG91dFwiKSl9KSwzZTUpO2UuYWRkTGlzdGVuZXIoXCJjbG9zaW5nXCIsKGFzeW5jKCk9PntyLmxvZ0luZm8oXCJVc2VyIGNsb3NlZCBhdXRoIHdpbmRvd1wiKSx3aW5kb3cuY2xlYXJJbnRlcnZhbChsKSx3aW5kb3cuY2xlYXJUaW1lb3V0KHMpLGUucmVtb3ZlQWxsTGlzdGVuZXJzKCksYShuZXcgaShcIkZhaWxlZCB0byBjb21wbGV0ZSBhdXRob3JpemF0aW9uIGNvZGUgZmxvd1wiKSl9KSk7Y29uc3QgYz13aW5kb3cuc2V0VGltZW91dCgoYXN5bmMoKT0+e3RyeXthd2FpdCBlLmlzU2hvd2luZygpfHwoci5sb2dJbmZvKFwiU2hvd2luZyBhdXRoIHdpbmRvd1wiKSxhd2FpdCBlLnNob3coITApLGF3YWl0IGUuZm9jdXMoKSl9Y2F0Y2goZSl7ci5sb2dXYXJuaW5nKFwiVW5hYmxlIHRvIHNob3cgYXV0aCB3aW5kb3dcIil9fSksMmUzKSx7dmVyc2lvbjp1fT1hd2FpdCBmaW4uU3lzdGVtLmdldFJ1bnRpbWVJbmZvKCk7cGFyc2VJbnQodS5zcGxpdChcIi5cIilbMF0sMTApPj0zMD9hd2FpdCBDKGUscyxjLHQsbixvLGEpKChhd2FpdCBlLmdldEluZm8oKSkudXJsKXx8YXdhaXQgZS5hZGRMaXN0ZW5lcihcInVybC1jaGFuZ2VkXCIsKGk9PntyLmxvZ0luZm8oXCJBdXRoIHdpbmRvdyBuYXZpZ2F0ZWQgdG9cIixpLnVybCksQyhlLHMsYyx0LG4sbyxhKShpLnVybCl9KSk6bD13aW5kb3cuc2V0SW50ZXJ2YWwoKCgpPT4oYXN5bmMoZSx0LG4scixvLGEsbCxzKT0+e2xldCBjO3RyeXtjPWF3YWl0IGUuZ2V0SW5mbygpfWNhdGNoKGUpe3JldHVybiB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0KSx3aW5kb3cuY2xlYXJUaW1lb3V0KG4pLHdpbmRvdy5jbGVhclRpbWVvdXQocikscyhuZXcgaShcIkNvdWxkIG5vdCBsb2NhdGUgYXV0aCB3aW5kb3dcIikpLCExfXJldHVybiBDKGUsbixyLG8sYSxsLHMsdCkoYy51cmwpfSkoZSxsLHMsYyx0LG4sbyxhKSksNTAwKX0sdz0oKT0+e2xldCBlLHQsbixyO2NvbnN0IG89YXN5bmModCxuPSExKT0+e2NvbnN0e2NvbW1hbmQ6cixkYXRhOmEsaWQ6bH09dCxzPXtjb21tYW5kOnIsaWQ6bH07dHJ5e2lmKCFlKXRocm93IG5ldyBFcnJvcihcIkFjY2VzcyB0b2tlbiBub3QgZm91bmRcIik7Y29uc3R7YXBpUmVxdWVzdFVybDpyLGRhdGE6bCxoZWFkZXJzOmMsaHR0cE1ldGhvZDp1LGluY2x1ZGVBdXRob3JpemF0aW9uOmZ9PWEsZD1hd2FpdChhc3luYyh0LG4scixvLGkpPT57dmFyIGEsbDtjb25zdCBzPU9iamVjdC5hc3NpZ24oe0FjY2VwdDpcImFwcGxpY2F0aW9uL2pzb25cIn0sbyk7XCJQQVRDSFwiIT09biYmXCJQT1NUXCIhPT1uJiZcIlBVVFwiIT09bnx8L2NvbnRlbnQtdHlwZS9pLnRlc3QoT2JqZWN0LmtleXMocykuam9pbihcIixcIikpfHwoc1tcIkNvbnRlbnQtVHlwZVwiXT1cImFwcGxpY2F0aW9uL2pzb25cIiksaSYmKHMuQXV0aG9yaXphdGlvbj1gQmVhcmVyICR7ZX1gKTtjb25zdCBjPWF3YWl0IGZldGNoKHQse2JvZHk6XCJvYmplY3RcIj09dHlwZW9mIHI/SlNPTi5zdHJpbmdpZnkocik6cixoZWFkZXJzOnMsbWV0aG9kOm59KTtpZighYy5vayl7Y29uc3QgZT17bWVzc2FnZTpcIkZhaWxlZCB0byBleGVjdXRlIEFQSSByZXF1ZXN0XCJ9O3JldHVybihudWxsPT09KGE9Yy5oZWFkZXJzLmdldChcIkNvbnRlbnQtVHlwZVwiKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuaW5jbHVkZXMoXCJhcHBsaWNhdGlvbi9qc29uXCIpKSYmKGUuZGF0YT1hd2FpdCBjLmpzb24oKSksW2Muc3RhdHVzLHZvaWQgMCx2b2lkIDAsZV19bGV0IHU7Y29uc3QgZj1udWxsIT09KGw9Yy5oZWFkZXJzLmdldChcIkNvbnRlbnQtVHlwZVwiKSkmJnZvaWQgMCE9PWw/bDpcIlwiO3N3aXRjaCghMCl7Y2FzZSFmOmJyZWFrO2Nhc2UvXmFwcGxpY2F0aW9uXFwvKFxcdytcXCspP2pzb24vaS50ZXN0KGYpOnU9YXdhaXQgYy5qc29uKCk7YnJlYWs7Y2FzZS9ebXVsdGlwYXJ0XFwvZm9ybS0/ZGF0YXxeYXBwbGljYXRpb25cXC94LT93d3ctP2Zvcm0tP3VybGVuY29kZWQvaS50ZXN0KGYpOnU9YXdhaXQgYy5mb3JtRGF0YSgpO2JyZWFrO2Nhc2UvXmFwcGxpY2F0aW9uXFwvKChbXi9dKyk/eG1sfHZuZFxcLm9wZW54bWxmb3JtYXRzKXxedGV4dFxcL3xeaW1hZ2VcXC9zdmcvaS50ZXN0KGYpOnU9YXdhaXQgYy50ZXh0KCk7YnJlYWs7ZGVmYXVsdDp1PWF3YWl0IGMuYXJyYXlCdWZmZXIoKX1yZXR1cm5bYy5zdGF0dXMsdSxmLHZvaWQgMF19KShyLHUsbCxjLGYpLFtwLGgsZyx2XT1kO2lmKHMuc3RhdHVzPXAsdil7aWYoIW4mJjQwMT09PXApe2NvbnN0W2Usbl09YXdhaXQgaSgpO3JldHVybiBuPyhzLnN0YXR1cz1lLHMuZXJyb3I9bixzKTphd2FpdCBvKHQsITApfXMuZXJyb3I9dn1lbHNlIGgmJihzLmRhdGE9aCxzLnR5cGU9Zyl9Y2F0Y2goZSl7ZSBpbnN0YW5jZW9mIEVycm9yP3MuZXJyb3I9e21lc3NhZ2U6ZS5tZXNzYWdlfTpzLmVycm9yPXttZXNzYWdlOlwiRmFpbGVkIHRvIGV4ZWN1dGUgQVBJIHJlcXVlc3RcIn19cmV0dXJuIFByb21pc2UucmVzb2x2ZShzKX0saT1hc3luYygpPT57dmFyIG87aWYoIW4pdGhyb3cgbmV3IEVycm9yKFwiQXV0aG9yaXphdGlvbiBzZXJ2ZXIgbWV0YWRhdGEgbm90IHNldFwiKTtpZighdCl0aHJvdyBuZXcgRXJyb3IoXCJDbGllbnQgSUQgbm90IHNldFwiKTtjb25zdCBpPWBncmFudF90eXBlPXJlZnJlc2hfdG9rZW4mY2xpZW50X2lkPSR7dH0mcmVmcmVzaF90b2tlbj0ke3J9YCxhPWF3YWl0IGZldGNoKG4udG9rZW5fZW5kcG9pbnQse2JvZHk6aSxoZWFkZXJzOntBY2NlcHQ6XCJhcHBsaWNhdGlvbi9qc29uXCIsXCJDb250ZW50LVR5cGVcIjpcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwifSxtZXRob2Q6XCJQT1NUXCJ9KTtpZighYS5vayl7Y29uc3QgZT17bWVzc2FnZTpcIkZhaWxlZCB0byByZWZyZXNoIGFjY2VzcyB0b2tlblwifTtyZXR1cm4obnVsbD09PShvPWEuaGVhZGVycy5nZXQoXCJDb250ZW50LVR5cGVcIikpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLmluY2x1ZGVzKFwiYXBwbGljYXRpb24vanNvblwiKSkmJihlLmRhdGE9YXdhaXQgYS5qc29uKCkpLFthLnN0YXR1cyxlXX1jb25zdCBsPWF3YWl0IGEuanNvbigpO3JldHVybiBlPWwuYWNjZXNzX3Rva2VuLFthLnN0YXR1c119O3NlbGYub25tZXNzYWdlPWFzeW5jIGk9Pntjb25zdHtjb21tYW5kOmEsaWQ6bH09aS5kYXRhO2xldCBzPXtjb21tYW5kOmEsaWQ6bH07c3dpdGNoKGEpe2Nhc2VcIkFQSV9SRVFVRVNUXCI6cz1hd2FpdCBvKGkuZGF0YSk7YnJlYWs7Y2FzZVwiQ09ERV9FWENIQU5HRVwiOnM9YXdhaXQoYXN5bmMgbz0+e3ZhciBpO2NvbnN0e2NvbW1hbmQ6YSxkYXRhOmwsaWQ6c309byxjPXtjb21tYW5kOmEsaWQ6c307dHJ5e2lmKCFuKXRocm93IG5ldyBFcnJvcihcIkF1dGhvcml6YXRpb24gc2VydmVyIG1ldGFkYXRhIG5vdCBzZXRcIik7aWYoIXQpdGhyb3cgbmV3IEVycm9yKFwiQ2xpZW50IElEIG5vdCBzZXRcIik7Y29uc3R7Y29kZTpvLGNvZGVWZXJpZmllcjphLHJlZGlyZWN0VXJpOnN9PWwsdT1gZ3JhbnRfdHlwZT1hdXRob3JpemF0aW9uX2NvZGUmY2xpZW50X2lkPSR7dH0mY29kZT0ke299JmNvZGVfdmVyaWZpZXI9JHthfSZyZWRpcmVjdF91cmk9JHtzfWAsZj1hd2FpdCBmZXRjaChuLnRva2VuX2VuZHBvaW50LHtib2R5OnUsaGVhZGVyczp7QWNjZXB0OlwiYXBwbGljYXRpb24vanNvblwiLFwiQ29udGVudC1UeXBlXCI6XCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIn0sbWV0aG9kOlwiUE9TVFwifSk7aWYoZi5vayl7Y29uc3QgdD1hd2FpdCBmLmpzb24oKTtlPXQuYWNjZXNzX3Rva2VuLHI9dC5yZWZyZXNoX3Rva2VufWVsc2V7Y29uc3QgZT17bWVzc2FnZTpcIkZhaWxlZCB0byByZXRyaWV2ZSB0b2tlbnNcIn07KG51bGw9PT0oaT1mLmhlYWRlcnMuZ2V0KFwiQ29udGVudC1UeXBlXCIpKXx8dm9pZCAwPT09aT92b2lkIDA6aS5pbmNsdWRlcyhcImFwcGxpY2F0aW9uL2pzb25cIikpJiYoZS5kYXRhPWF3YWl0IGYuanNvbigpKSxjLmVycm9yPWV9fWNhdGNoKGUpe2UgaW5zdGFuY2VvZiBFcnJvcj9jLmVycm9yPXttZXNzYWdlOmUubWVzc2FnZX06Yy5lcnJvcj17bWVzc2FnZTpcIkZhaWxlZCB0byByZXRyaWV2ZSB0b2tlbnNcIn19cmV0dXJuIFByb21pc2UucmVzb2x2ZShjKX0pKGkuZGF0YSk7YnJlYWs7Y2FzZVwiRVhQSVJFX1RPS0VOU1wiOnM9YXdhaXQoYXN5bmMgdD0+e3ZhciBvO2NvbnN0e2NvbW1hbmQ6aSxleHBpcmVBY2Nlc3NUb2tlbk9ubHk6YSxpZDpsfT10LHM9e2NvbW1hbmQ6aSxpZDpsfTt0cnl7aWYoIWEmJiFyKXRocm93IG5ldyBFcnJvcihcIlJlZnJlc2ggdG9rZW4gbm90IGZvdW5kXCIpO2lmKCFuKXRocm93IG5ldyBFcnJvcihcIkF1dGhvcml6YXRpb24gc2VydmVyIG1ldGFkYXRhIG5vdCBzZXRcIik7aWYoIW4ucmV2b2NhdGlvbl9lbmRwb2ludCl0aHJvdyBuZXcgRXJyb3IoXCJSZXZvY2F0aW9uIGVuZHBvaW50IG1pc3NpbmcgaW4gYXV0aG9yaXphdGlvbiBzZXJ2ZXIgbWV0YWRhdGFcIik7Y29uc3QgdD1hP2U6cixpPWF3YWl0IGZldGNoKGAke24ucmV2b2NhdGlvbl9lbmRwb2ludH0/dG9rZW49JHt0fWAse2hlYWRlcnM6e0FjY2VwdDpcImFwcGxpY2F0aW9uL2pzb25cIn19KTtpZighaS5vayl7Y29uc3QgZT17bWVzc2FnZTpcIkZhaWxlZCB0byByZXZva2UgdG9rZW5zXCJ9OyhudWxsPT09KG89aS5oZWFkZXJzLmdldChcIkNvbnRlbnQtVHlwZVwiKSl8fHZvaWQgMD09PW8/dm9pZCAwOm8uaW5jbHVkZXMoXCJhcHBsaWNhdGlvbi9qc29uXCIpKSYmKGUuZGF0YT1hd2FpdCBpLmpzb24oKSkscy5lcnJvcj1lfX1jYXRjaChlKXtlIGluc3RhbmNlb2YgRXJyb3I/cy5lcnJvcj17bWVzc2FnZTplLm1lc3NhZ2V9OnMuZXJyb3I9e21lc3NhZ2U6XCJGYWlsZWQgdG8gcmV2b2tlIHRva2Vuc1wifX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHMpfSkoaS5kYXRhKTticmVhaztjYXNlXCJJTklUXCI6cz1hd2FpdChhc3luYyBlPT57Y29uc3R7Y29tbWFuZDpyLGRhdGE6byxpZDppfT1lLGE9e2NvbW1hbmQ6cixpZDppfTtyZXR1cm4gdD1vLmNsaWVudElkLG49by5tZXRhZGF0YSxQcm9taXNlLnJlc29sdmUoYSl9KShpLmRhdGEpO2JyZWFrO2RlZmF1bHQ6cy5lcnJvcj1uZXcgRXJyb3IoYFVuZXhwZWN0ZWQgb2F1dGggd29ya2VyIGNvbW1hbmQ6ICR7YX1gKX1zZWxmLnBvc3RNZXNzYWdlKHMpfX07dmFyIGI7IWZ1bmN0aW9uKGUpe2UuQXBpUmVxdWVzdD1cIkFQSV9SRVFVRVNUXCIsZS5Db2RlRXhjaGFuZ2U9XCJDT0RFX0VYQ0hBTkdFXCIsZS5FeHBpcmVUb2tlbnM9XCJFWFBJUkVfVE9LRU5TXCIsZS5Jbml0PVwiSU5JVFwifShifHwoYj17fSkpO2NvbnN0IHg9W10sXz1lPT57eC5wdXNoKGUpfSxPPShlLHQpPT4obixyLG8pPT5uZXcgUHJvbWlzZSgoKGksYSk9Pntjb25zdCBsPXtjb21tYW5kOmIuQ29kZUV4Y2hhbmdlLGRhdGE6e2NvZGU6bixjb2RlVmVyaWZpZXI6cixyZWRpcmVjdFVyaTpvfSxpZDpEYXRlLm5vdygpLnRvU3RyaW5nKCl9LHtjb21tYW5kOnMsaWQ6Y309bDtfKHtjb21tYW5kOnMsaWQ6YyxyZWplY3Q6YSxyZXNvbHZlOml9KSxlLnBvc3RNZXNzYWdlKGwpLHQubG9nSW5mbyhcIldvcmtlciByZXF1ZXN0IHNlbnRcIixsKX0pKSxMPShlLHQsbik9PihyLG8saSxhLGwpPT5uZXcgUHJvbWlzZSgoKHMsYyk9Pntjb25zdCB1PXtjb21tYW5kOmIuQXBpUmVxdWVzdCxkYXRhOnthcGlSZXF1ZXN0VXJsOnIsY2xpZW50SWQ6ZSxkYXRhOmksaGVhZGVyczphLGh0dHBNZXRob2Q6byxpbmNsdWRlQXV0aG9yaXphdGlvbjpsfSxpZDpEYXRlLm5vdygpLnRvU3RyaW5nKCl9LHtjb21tYW5kOmYsaWQ6ZH09dTtfKHtjb21tYW5kOmYsaWQ6ZCxyZWplY3Q6YyxyZXNvbHZlOnN9KSx0LnBvc3RNZXNzYWdlKHUpLG4ubG9nSW5mbyhcIldvcmtlciByZXF1ZXN0IHNlbnRcIix1KX0pKSxFPShlLHQpPT5uPT5uZXcgUHJvbWlzZSgoKHIsbyk9Pntjb25zdCBpPXtjb21tYW5kOmIuRXhwaXJlVG9rZW5zLGV4cGlyZUFjY2Vzc1Rva2VuT25seTpuLGlkOkRhdGUubm93KCkudG9TdHJpbmcoKX0se2NvbW1hbmQ6YSxpZDpsfT1pO18oe2NvbW1hbmQ6YSxpZDpsLHJlamVjdDpvLHJlc29sdmU6cn0pLGUucG9zdE1lc3NhZ2UoaSksdC5sb2dJbmZvKFwiV29ya2VyIHJlcXVlc3Qgc2VudFwiLGkpfSkpLFM9KGUsdCk9Pntjb25zdCBuPXguZmluZEluZGV4KChuPT5uLmNvbW1hbmQ9PT10JiZuLmlkPT09ZSkpO24+PTAmJnguc3BsaWNlKG4sMSl9LGo9KGUsdCk9PmFzeW5jKCk9Pnt0cnl7YXdhaXQgRShlLHQpKCExKX1jYXRjaChlKXt0LmxvZ1dhcm5pbmcoZS5tZXNzYWdlKX1lLnRlcm1pbmF0ZSgpLHQubG9nSW5mbyhcIldvcmtlciB0ZXJtaW5hdGVkXCIpfTtjbGFzcyBNe2dldCBhcGlPcmlnaW4oKXtyZXR1cm4gdGhpcy5fYXBpT3JpZ2lufWdldCBjbGllbnRJZCgpe3JldHVybiB0aGlzLl9jbGllbnRJZH1nZXQgbG9nZ2VyKCl7cmV0dXJuIHRoaXMuX2xvZ2dlcn1nZXQgbWV0YWRhdGEoKXtyZXR1cm4gdGhpcy5fbWV0YWRhdGF9Z2V0IHdvcmtlcigpe3JldHVybiB0aGlzLl93b3JrZXJ9Y29uc3RydWN0b3IoZSx0LG4scixvKXtpZih0aGlzLmV4ZWN1dGVBcGlSZXF1ZXN0PWFzeW5jKGUsdD1cIkdFVFwiLG4scixvPSEwLGk9ITEpPT57dGhpcy5fbG9nZ2VyLmxvZ0luZm8oXCJFeGVjdXRlQXBpUmVxdWVzdCBzdGFydGVkXCIsZSx0LG4scik7dHJ5e2NvbnN0IGk9YXdhaXQoKGUsdCk9PmFzeW5jKG4scixvLGksbCk9Pnt0cnl7cmV0dXJuIGF3YWl0IHQuZXhlY3V0ZUFwaVJlcXVlc3QoYCR7ZX0ke259YCxyLG8saSxsKX1jYXRjaChlKXtsZXQgdDtjb25zdHtkYXRhOm4sbWVzc2FnZTpyLHN0YXR1czpvfT1lO3Rocm93IHQ9ZSBpbnN0YW5jZW9mIEVycm9yP25ldyBhKHIsbyk6XCJGYWlsZWQgdG8gcmVmcmVzaCBhY2Nlc3MgdG9rZW5cIj09PXI/bmV3IHMocik6bmV3IGEocixvKSx0LmRhdGE9bix0fX0pKHRoaXMuX2FwaU9yaWdpbix0aGlzLl93b3JrZXIpKGUsdCxuLHIsbyk7cmV0dXJuIHRoaXMuX2xvZ2dlci5sb2dJbmZvKFwiRXhlY3V0ZUFwaVJlcXVlc3QgY29tcGxldGVkXCIsaSksaX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgYSl7Y29uc3R7ZGF0YTp0LG1lc3NhZ2U6bixuYW1lOnIsc3RhY2s6b309ZSxpPXRoaXMuZ2V0RXJyb3JNZXNzYWdlRnJvbVNlcnZlclJlc3BvbnNlKHQpO2kmJihlLm1lc3NhZ2U9aSxlLnN0YWNrPW51bGw9PW8/dm9pZCAwOm8ucmVwbGFjZShgJHtyfTogJHtufWAsYCR7cn06ICR7aX1gKSl9dGhyb3cgaSYmdGhpcy5sb2dnZXIubG9nRXJyb3IoZSksZX19LCEoZSYmdCYmbiYmciYmbykpdGhyb3cgbmV3IGMoXCJQcm92aWRlciBoYXMgbm90IGJlZW4gcHJvcGVybHkgaW5pdGlhbGl6ZWQgKGNhbGwgaW5pdCB0byBjcmVhdGUgbmV3IGluc3RhbmNlcylcIik7dGhpcy5fYXBpT3JpZ2luPWUsdGhpcy5fY2xpZW50SWQ9dCx0aGlzLl9tZXRhZGF0YT1uLHRoaXMuX3dvcmtlcj1yLHRoaXMuX2xvZ2dlcj1vLHRoaXMuYXV0aG9yaXplPXRoaXMuYXV0aG9yaXplLmJpbmQodGhpcyksdGhpcy5jbG9zZT10aGlzLmNsb3NlLmJpbmQodGhpcyksdGhpcy5leGVjdXRlQXBpUmVxdWVzdD10aGlzLmV4ZWN1dGVBcGlSZXF1ZXN0LmJpbmQodGhpcyksdGhpcy5leHBpcmVUb2tlbnM9dGhpcy5leHBpcmVUb2tlbnMuYmluZCh0aGlzKSx0aGlzLmdldEVycm9yTWVzc2FnZUZyb21TZXJ2ZXJSZXNwb25zZT10aGlzLmdldEVycm9yTWVzc2FnZUZyb21TZXJ2ZXJSZXNwb25zZS5iaW5kKHRoaXMpfWFzeW5jIGF1dGhvcml6ZShlLHQsbil7aWYodGhpcy5fbG9nZ2VyLmxvZ0luZm8oXCJBdXRob3JpemUgc3RhcnRlZFwiLGUsdCxuKSwhdGhpcy5fbWV0YWRhdGF8fCF0aGlzLl9jbGllbnRJZHx8IXRoaXMuX3dvcmtlcil0aHJvdyBuZXcgYyhcIlByb3ZpZGVyIGhhcyBub3QgYmVlbiBwcm9wZXJseSBpbml0aWFsaXplZCAoY2FsbCBpbml0IHRvIGNyZWF0ZSBuZXcgaW5zdGFuY2VzKVwiKTt0cnl7YXdhaXQocj10aGlzLl9tZXRhZGF0YSxvPXRoaXMuX2NsaWVudElkLGE9dGhpcy5fd29ya2VyLHM9dGhpcy5fbG9nZ2VyLGFzeW5jKGUsdCxuKT0+e2NvbnN0e2F1dGhvcml6YXRpb25fZW5kcG9pbnQ6aX09cixsPWZpbi5BcHBsaWNhdGlvbi5nZXRDdXJyZW50U3luYygpLGM9KGF3YWl0IGwuZ2V0Q2hpbGRXaW5kb3dzKCkpLmZpbmQoKGU9PmUuaWRlbnRpdHkubmFtZT09PW0pKTtjJiZhd2FpdCBjLmNsb3NlKCEwKTtjb25zdCB1PShuZXcgRGF0ZSkuZ2V0VGltZSgpLnRvU3RyaW5nKCksZj0oKCk9Pntjb25zdCBlPW5ldyBVaW50MzJBcnJheSg2NCk7cmV0dXJuIHdpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGUpLEFycmF5LmZyb20oZSwoZT0+YDAke2UudG9TdHJpbmcoMTYpfWAuc2xpY2UoLTIpKSkuam9pbihcIlwiKX0pKCksZD0oYXdhaXQoYXN5bmMgZT0+e2NvbnN0IHQ9KG5ldyBUZXh0RW5jb2RlcikuZW5jb2RlKGUpLG49YXdhaXQgd2luZG93LmNyeXB0by5zdWJ0bGUuZGlnZXN0KFwiU0hBLTI1NlwiLHQpLHI9YXdhaXQoZT0+bmV3IFByb21pc2UoKCh0LG4pPT57dHJ5e2NvbnN0IHI9bmV3IEJsb2IoW2VdKSxvPW5ldyBGaWxlUmVhZGVyO28ub25sb2FkPWU9Pnt2YXIgcixvO2NvbnN0IGk9bnVsbD09PShyPWUudGFyZ2V0KXx8dm9pZCAwPT09cj92b2lkIDA6ci5yZXN1bHQ7aWYoaSl7Y29uc3RbLGVdPUFycmF5LmZyb20obnVsbCE9PShvPWkubWF0Y2goL2Jhc2U2NCwoLiopJC9pKSkmJnZvaWQgMCE9PW8/bzpbXSk7dChudWxsIT1lP2U6XCJcIil9bihuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGVtcHR5IHJlc3VsdFwiKSl9LG8ucmVhZEFzRGF0YVVSTChyKX1jYXRjaChlKXtuKGUpfX0pKSkobik7cmV0dXJuIHIucmVwbGFjZSgvXFwrL2csXCItXCIpLnJlcGxhY2UoL1xcLy9nLFwiX1wiKX0pKGYpKS5yZXBsYWNlKC89KyQvLFwiXCIpO2xldCBwPVwiXCI7dCYmKHA9XCImXCIscCs9T2JqZWN0LmVudHJpZXModCkubWFwKChlPT5gJHtlbmNvZGVVUklDb21wb25lbnQoZVswXSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KGVbMV0pfWApKS5qb2luKFwiJlwiKSk7Y29uc3QgaD1gJHtpfT9jbGllbnRfaWQ9JHtlbmNvZGVVUklDb21wb25lbnQobyl9JnJlZGlyZWN0X3VyaT0ke2VuY29kZVVSSUNvbXBvbmVudChlKX0mcmVzcG9uc2VfdHlwZT1jb2RlJnN0YXRlPSR7dX0mY29kZV9jaGFsbGVuZ2U9JHtkfSZjb2RlX2NoYWxsZW5nZV9tZXRob2Q9UzI1NiR7cH1gLGc9bnVsbCE9bj9uOnt9LHtkZWZhdWx0SGVpZ2h0OnYsZGVmYXVsdFdpZHRoOkN9PWcsdz1mdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59KGcsW1wiZGVmYXVsdEhlaWdodFwiLFwiZGVmYXVsdFdpZHRoXCJdKTtzLmxvZ0luZm8oXCJTdGFydGluZyBPQXV0aCBmbG93XCIsaCk7Y29uc3QgYj1hd2FpdCBmaW4uV2luZG93LmNyZWF0ZShPYmplY3QuYXNzaWduKHthbHdheXNPblRvcDohMCxtYXhpbWl6YWJsZTohMSxtaW5pbWl6YWJsZTohMSxhdXRvU2hvdzohMSxkZWZhdWx0Q2VudGVyZWQ6ITAsZGVmYXVsdEhlaWdodDpudWxsIT12P3Y6NzAwLGRlZmF1bHRXaWR0aDpudWxsIT1DP0M6NjAwLGluY2x1ZGVJblNuYXBzaG90czohMSxuYW1lOm0scmVzaXphYmxlOiExLHNhdmVXaW5kb3dTdGF0ZTohMSxzaG93VGFza2Jhckljb246ITEsdXJsOmh9LHcpKSx4PWF3YWl0IG5ldyBQcm9taXNlKHkoYix1LGUscykpO3MubG9nSW5mbyhcIlJlY2VpdmVkIGF1dGhvcml6YXRpb24gY29kZVwiKSxhd2FpdCBhLmV4Y2hhbmdlQ29kZUZvclRva2Vucyh4LGYsZSkscy5sb2dJbmZvKFwiUmVjZWl2ZWQgdG9rZW5zXCIpfSkoZSx0LG4pLHRoaXMuX2xvZ2dlci5sb2dJbmZvKFwiQXV0aG9yaXplIGNvbXBsZXRlZFwiKX1jYXRjaChlKXtsZXQgdDtpZihlIGluc3RhbmNlb2YgaSl7Y29uc3R7ZGF0YTpufT1lLHI9dGhpcy5nZXRFcnJvck1lc3NhZ2VGcm9tU2VydmVyUmVzcG9uc2Uobik7dD1uZXcgbChyLGUpLHQuZGF0YT1ufWVsc2UgdD1uZXcgbCh2b2lkIDAsZSk7dGhyb3cgdGhpcy5sb2dnZXIubG9nRXJyb3IodCksdH12YXIgcixvLGEsc31hc3luYyBjbG9zZSgpe3ZhciBlO3RoaXMuX2xvZ2dlci5sb2dJbmZvKFwiQ2xvc2Ugc3RhcnRlZFwiKTt0cnl7YXdhaXQobnVsbD09PShlPXRoaXMuX3dvcmtlcil8fHZvaWQgMD09PWU/dm9pZCAwOmUudGVybWluYXRlKCkpLHRoaXMuX3dvcmtlcj12b2lkIDAsdGhpcy5fYXBpT3JpZ2luPXZvaWQgMCx0aGlzLl9jbGllbnRJZD12b2lkIDAsdGhpcy5fbWV0YWRhdGE9dm9pZCAwLHRoaXMuX2xvZ2dlci5sb2dJbmZvKFwiQ2xvc2UgY29tcGxldGVkXCIpfWNhdGNoKGUpe2NvbnN0IHQ9bmV3IGkodm9pZCAwLGUpO3Rocm93IHRoaXMuX2xvZ2dlci5sb2dFcnJvcih0KSx0fX1hc3luYyBleHBpcmVUb2tlbnMoZT0hMSl7dmFyIHQ7dGhpcy5fbG9nZ2VyLmxvZ0luZm8oXCJFeHBpcmVUb2tlbnMgc3RhcnRlZFwiKTt0cnl7YXdhaXQobnVsbD09PSh0PXRoaXMuX3dvcmtlcil8fHZvaWQgMD09PXQ/dm9pZCAwOnQuZXhwaXJlVG9rZW5zKGUpKSx0aGlzLl9sb2dnZXIubG9nSW5mbyhcIkV4cGlyZVRva2VucyBjb21wbGV0ZWRcIil9Y2F0Y2goZSl7Y29uc3QgdD1uZXcgaSh2b2lkIDAsZSk7dGhyb3cgdGhpcy5fbG9nZ2VyLmxvZ0Vycm9yKHQpLHR9fWdldEVycm9yTWVzc2FnZUZyb21TZXJ2ZXJSZXNwb25zZShlKXtlJiZ0aGlzLl9sb2dnZXIubG9nV2FybmluZyhlKX1zdGF0aWMgYXN5bmMgaW5pdChlLHQsbixyLC4uLm8pe2NvbnN0IGE9bmV3IHYocik7bGV0IGw7YS5sb2dJbmZvKFwiSW5pdCBzdGFydGVkXCIsZSx0LG4pO3RyeXtsPW5ldyBVUkwodCl9Y2F0Y2goZSl7Y29uc3QgdD1uZXcgZihcIlVuZXhwZWN0ZWQgaW52YWxpZCBBUEkgb3JpZ2luXCIpO3Rocm93IGEubG9nRXJyb3IodCksdH10cnl7Y29uc3QgdD1hd2FpdChhc3luYyBlPT57bGV0IHQ7dHJ5e3Q9bmV3IFVSTChlKX1jYXRjaChlKXt0aHJvdyBuZXcgZihcIlVuZXhwZWN0ZWQgaW52YWxpZCBtZXRhZGF0YSBVUkxcIil9Y29uc3Qgbj1hd2FpdCBmZXRjaCh0LHtoZWFkZXJzOntBY2NlcHQ6XCJhcHBsaWNhdGlvbi9qc29uXCJ9fSk7aWYoIW4ub2spdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIHJldHJpZXZlIGF1dGhvcml6YXRpb24gc2VydmVyIG1ldGFkYXRhXCIpO2NvbnN0IHI9YXdhaXQgbi5qc29uKCk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBlbXB0eSBhdXRob3JpemF0aW9uIHNlcnZlciBtZXRhZGF0YSByZXNwb25zZVwiKTtpZighci5yZXNwb25zZV90eXBlc19zdXBwb3J0ZWQuZmluZCgoZT0+XCJjb2RlXCI9PT1lLnRvTG93ZXJDYXNlKCkpKSl0aHJvdyBuZXcgRXJyb3IoXCJBdXRob3JpemF0aW9uIHNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBhdXRob3JpemF0aW9uIGNvZGUgcmVzcG9uc2UgdHlwZVwiKTtyZXR1cm4gcn0pKGUpLHI9YXdhaXQoYXN5bmMoZSx0LG4pPT57Y29uc3Qgcj1uZXcgQmxvYihbYCgke3d9KSgpYF0se3R5cGU6XCJ0ZXh0L2phdmFzY3JpcHRcIn0pLG89VVJMLmNyZWF0ZU9iamVjdFVSTChyKSxpPW5ldyBXb3JrZXIobyk7cmV0dXJuIGkub25tZXNzYWdlPShlPT50PT57ZS5sb2dJbmZvKFwiV29ya2VyIHJlc3BvbnNlIHJlY2VpdmVkXCIsdC5kYXRhKTtjb25zdCBuPXQuZGF0YSx7Y29tbWFuZDpyLGVycm9yOm8saWQ6aX09bixhPWZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn0obixbXCJjb21tYW5kXCIsXCJlcnJvclwiLFwiaWRcIl0pLGw9KChlLHQpPT54LmZpbmQoKG49Pm4uY29tbWFuZD09PXQmJm4uaWQ9PT1lKSkpKGkscik7bD8obz8oXCJzdGF0dXNcImluIGEmJnZvaWQgMCE9PWEuc3RhdHVzJiYoby5zdGF0dXM9YS5zdGF0dXMpLGwucmVqZWN0KG8pKTpsLnJlc29sdmUoYSksUyhpLHIpKTplLmxvZ0Vycm9yKG5ldyBFcnJvcihcIlVuYWJsZSB0byBsb2NhdGUgYXdhaXRlZCByZXF1ZXN0XCIpKX0pKG4pLGF3YWl0KChlLHQsbixyKT0+bmV3IFByb21pc2UoKChvLGkpPT57Y29uc3QgYT17Y29tbWFuZDpiLkluaXQsZGF0YTp7Y2xpZW50SWQ6dCxtZXRhZGF0YTplfSxpZDpEYXRlLm5vdygpLnRvU3RyaW5nKCl9LHtjb21tYW5kOmwsaWQ6c309YTtfKHtjb21tYW5kOmwsaWQ6cyxyZWplY3Q6aSxyZXNvbHZlOm99KSxuLnBvc3RNZXNzYWdlKGEpLHIubG9nSW5mbyhcIldvcmtlciByZXF1ZXN0IHNlbnRcIixhKX0pKSkoZSx0LGksbikse2V4Y2hhbmdlQ29kZUZvclRva2VuczpPKGksbiksZXhlY3V0ZUFwaVJlcXVlc3Q6TCh0LGksbiksZXhwaXJlVG9rZW5zOkUoaSxuKSx0ZXJtaW5hdGU6aihpLG4pfX0pKHQsbixhKTtyZXR1cm4gYS5sb2dJbmZvKFwiSW5pdCBjb21wbGV0ZWRcIix0KSxuZXcgTShsLm9yaWdpbixuLHQscixhKX1jYXRjaChlKXtsZXQgdDt0aHJvdyB0PWUgaW5zdGFuY2VvZiBpP2U6bmV3IGModm9pZCAwLGUpLGEubG9nRXJyb3IodCksdH19fXZhciBrPW8uTVMsUj1vLmNGLFA9by5BSyxJPW8uTV8sQT1vLmNYLFQ9by5PNCxIPW8uX1csQj1vLlUkLFY9by5VNyxEPW4oOTUxKTtjb25zdCBaPVwiMS4wLjFcIiwkPVwiTWljcm9zb2Z0MzY1XCIsTj0oKT0+e0IoJCl9LEY9KCk9PntWKCQsWil9O1widW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJihcInVuZGVmaW5lZFwiPT10eXBlb2YgZmluJiZPYmplY3QuYXNzaWduKHdpbmRvdyx7ZmluOnt9fSksT2JqZWN0LmFzc2lnbihmaW4se0ludGVncmF0aW9uczp7TWljcm9zb2Z0MzY1OntlbmFibGVMb2dnaW5nOkYsZGlzYWJsZUxvZ2dpbmc6Tn19fSkpO2NvbnN0IFU9ZT0+YXN5bmModCxuLHIsbyxpKT0+e3ZhciBhO3JldHVybiB0PShhPXQpLnN0YXJ0c1dpdGgoXCIvXCIpP2E6YC8ke2F9YCxlLmV4ZWN1dGVBcGlSZXF1ZXN0KHQsbixyLG8saSwhMCl9LFc9YXN5bmMoZSx0LG49W10pPT57Y29uc3Qgcj1bXCJpZFwiLFwidXNlclByaW5jaXBhbE5hbWVcIixcInVzZXJUeXBlXCIsLi4ubl0uam9pbihcIixcIiksbz1hd2FpdChhc3luYyhlLHQ9W10pPT57aWYoIShudWxsPT10P3ZvaWQgMDp0Lmxlbmd0aCkpcmV0dXJuW107Y29uc3Qgbj1bXTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrPTIwKXtjb25zdCBvPXtyZXF1ZXN0czp0LnNsaWNlKHIscisyMCkubWFwKChlPT4oZS5pZD1jcnlwdG8ucmFuZG9tVVVJRCgpLGUpKSl9O24ucHVzaChlLmV4ZWN1dGVBcGlSZXF1ZXN0KFwiL3YxLjAvJGJhdGNoXCIsXCJQT1NUXCIsbykpfWNvbnN0IHI9KGF3YWl0IFByb21pc2UuYWxsKG4pKS5mbGF0TWFwKChlPT5lLmRhdGEucmVzcG9uc2VzKSk7cmV0dXJuIHQubWFwKChlPT57dmFyIHQ7cmV0dXJuIG51bGw9PT0odD1yLmZpbmQoKHQ9PnQuaWQ9PT1lLmlkKSkpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmJvZHl9KSl9KShlLHQubWFwKChlPT4oe21ldGhvZDpcIkdFVFwiLHVybDpgL3VzZXJzPyRmaWx0ZXI9bWFpbCBlcSAnJHtlbmNvZGVVUklDb21wb25lbnQoZSl9JyYkc2VsZWN0PSR7cn1gfSkpKSksaT1vLm1hcCgoZT0+e3ZhciB0O3JldHVybiBudWxsPT09KHQ9ZS52YWx1ZSl8fHZvaWQgMD09PXQ/dm9pZCAwOnRbMF19KSk7cmV0dXJuIGUubG9nZ2VyLmxvZ0luZm8oXCJSZXNvbHZlZCB1c2VycyBmcm9tIGVtYWlsIGFkZHJlc3Nlc1wiLGksdCksaX07dmFyIHo9bigzMDApO2NvbnN0IEc9ZT0+ZS5tYXAoKGU9PmU/e2lkOmUudXNlclByaW5jaXBhbE5hbWUsZW1haWxBZGRyZXNzOmUubWFpbCxuYW1lOmUuZGlzcGxheU5hbWV9OnZvaWQgMCkpLHE9YXN5bmMoZSx0KT0+e3RyeXthd2FpdCBmaW4uU3lzdGVtLnJlZ2lzdGVyVXNhZ2Uoe3R5cGU6XCJpbnRlZ3JhdGlvbi1mZWF0dXJlXCIsZGF0YTp7YXBpVmVyc2lvbjpaLGNvbXBvbmVudE5hbWU6ZX19KX1jYXRjaChuKXt0LmxvZ1dhcm5pbmcoYFVuYWJsZSB0byByZWdpc3RlciB1c2FnZSBmb3IgZmVhdHVyZSAke2V9OiAke251bGw9PW4/dm9pZCAwOm4ubWVzc2FnZX1gKX19LFk9ZT0+e2xldCB0PWU7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZS5maWx0ZXIoQm9vbGVhbikubWFwKFkpOihcIm9iamVjdFwiPT10eXBlb2YgZSYmKHQ9T2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGUpLmZpbHRlcigoKFssZV0pPT52b2lkIDAhPT0obnVsbCE9ZT9lOnZvaWQgMCkpKS5tYXAoKChbZSx0XSk9PltlLFkodCldKSkpKSx0KX0sSz1lPT4vI0VYVCNALy50ZXN0KGUudXNlclByaW5jaXBhbE5hbWUpO3ZhciBYOyFmdW5jdGlvbihlKXtlLk1TMzY1PVwiTVMtMzY1XCIsZS5UZWFtcz1cIk1TLVRFQU1TXCJ9KFh8fChYPXt9KSk7Y2xhc3MgSiBleHRlbmRzIFR7Z2V0IGN1cnJlbnRVc2VyKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRVc2VyfWdldCByZWRpcmVjdFVyaSgpe3JldHVybiB0aGlzLl9yZWRpcmVjdFVyaX1nZXQgcGVybWlzc2lvbnMoKXtyZXR1cm4gdGhpcy5fcGVybWlzc2lvbnN9Z2V0IHRlbmFudElkKCl7cmV0dXJuIHRoaXMuX3RlbmFudElkfWNvbnN0cnVjdG9yKGUsdCxuLHIsbyxpLGEsbCl7c3VwZXIoZSx0LGksYSxsKSx0aGlzLl9wZXJtaXNzaW9ucz1vLHRoaXMuX3JlZGlyZWN0VXJpPXIsdGhpcy5fdGVuYW50SWQ9bixxKFguTVMzNjUsbCl9YXN5bmMgYXV0aG9yaXplKGUsdCxuKXthd2FpdCBzdXBlci5hdXRob3JpemUoZSx0LG4pO2NvbnN0IHI9YXdhaXQoYXN5bmMgZT0+e2NvbnN0e2RhdGE6dH09YXdhaXQgZS5leGVjdXRlQXBpUmVxdWVzdChcIi92MS4wL21lXCIpO3JldHVybiB0fSkodGhpcyk7dGhpcy5fY3VycmVudFVzZXI9cn1nZXRFcnJvck1lc3NhZ2VGcm9tU2VydmVyUmVzcG9uc2UoZSl7dmFyIHQsbixyO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXRyeXtyZXR1cm4gbnVsbD09PShuPW51bGw9PT0odD1uZXcgVVJMKGUpLnNlYXJjaFBhcmFtcy5nZXQoXCJlcnJvcl9kZXNjcmlwdGlvblwiKSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuc3BsaXQoL1xcclxcbi8pKXx8dm9pZCAwPT09bj92b2lkIDA6blswXX1jYXRjaChlKXtyZXR1cm59cmV0dXJuIG51bGw9PT0ocj1udWxsPT1lP3ZvaWQgMDplLmVycm9yKXx8dm9pZCAwPT09cj92b2lkIDA6ci5tZXNzYWdlfXN0YXRpYyBhc3luYyBpbml0KGUsdCxuLHIsbyxpLGEpe2NvbnN0IGw9YXdhaXQgc3VwZXIuaW5pdChlLHQsbixyKTtyZXR1cm4gbmV3IEoodCxuLG8saSxhLG51bGw9PWw/dm9pZCAwOmwubWV0YWRhdGEsbnVsbD09bD92b2lkIDA6bC53b3JrZXIsbnVsbD09bD92b2lkIDA6bC5sb2dnZXIpfX1jb25zdCBRPVtcIlVzZXIuUmVhZEJhc2ljLkFsbFwiLFwiVGVhbS5SZWFkQmFzaWMuQWxsXCIsXCJDaGFubmVsLlJlYWRCYXNpYy5BbGxcIixcIkNoYW5uZWxNZXNzYWdlLlNlbmRcIixcIkNoYXQuQ3JlYXRlXCIsXCJDaGF0TWVzc2FnZS5TZW5kXCIsXCJvZmZsaW5lX2FjY2Vzc1wiXTtsZXQgZWU7Y29uc3QgdGU9YXN5bmMoZSx0LG4scj1bXSxvLGkpPT57YXdhaXQgbmUoZSx0LG4scik7Y29uc3QgYT1PYmplY3QuYXNzaWduKHtzY29wZTpbLi4uUSwuLi5yXS5qb2luKFwiIFwiKX0sbyksbD1PYmplY3QuYXNzaWduKHtkZWZhdWx0SGVpZ2h0OjYwMCxkZWZhdWx0V2lkdGg6NTUwfSxpKTtyZXR1cm4gYXdhaXQgZWUuYXV0aG9yaXplKG4sYSxsKSx7Y2xpZW50SWQ6ZSxjdXJyZW50VXNlcjplZS5jdXJyZW50VXNlcixkaXNjb25uZWN0OmVlLmNsb3NlLGV4ZWN1dGVBcGlSZXF1ZXN0OlUoZWUpLHByb3ZpZGVyOmVlLHRlbmFudElkOnR9fSxuZT1hc3luYyhlLHQsbixyKT0+e2lmKCFlKXRocm93IG5ldyBIKFwiSW52YWxpZCBjbGllbnQgSURcIik7aWYoIXQpdGhyb3cgbmV3IEgoXCJJbnZhbGlkIHRlbmFudCBJRFwiKTtpZighbil0aHJvdyBuZXcgSChcIkludmFsaWQgcmVkaXJlY3QgVVJJXCIpO2NvbnN0IG89YGh0dHBzOi8vbG9naW4ubWljcm9zb2Z0b25saW5lLmNvbS8ke3R9L3YyLjAvLndlbGwta25vd24vb3BlbmlkLWNvbmZpZ3VyYXRpb25gOyghZWV8fGVlLmNsaWVudElkIT09ZXx8ZWUudGVuYW50SWQhPT10fHxlZS5yZWRpcmVjdFVyaSE9PW58fCgwLEQueG9yKShlZS5wZXJtaXNzaW9ucyxyKS5sZW5ndGg+MCkmJihlZT1hd2FpdCBKLmluaXQobyxcImh0dHBzOi8vZ3JhcGgubWljcm9zb2Z0LmNvbVwiLGUsJCx0LG4scikpfTtjbGFzcyByZSBleHRlbmRzIGt7Y29uc3RydWN0b3IoZSx0KXt2YXIgbjtzdXBlcihlPW51bGwhPT0obj1udWxsIT1lP2U6bnVsbD09dD92b2lkIDA6dC5tZXNzYWdlKSYmdm9pZCAwIT09bj9uOlwiQW4gaW50ZXJvcCBlcnJvciBvY2N1cnJlZFwiLHQpfX12YXIgb2UsaWUsYWUsbGUsc2UsY2U7IWZ1bmN0aW9uKGUpe2UuQXBwTm90Rm91bmQ9XCJBcHBOb3RGb3VuZFwiLGUuRXJyb3JPbkxhdW5jaD1cIkVycm9yT25MYXVuY2hcIixlLkFwcFRpbWVvdXQ9XCJBcHBUaW1lb3V0XCIsZS5SZXNvbHZlclVuYXZhaWxhYmxlPVwiUmVzb2x2ZXJVbmF2YWlsYWJsZVwifShvZXx8KG9lPXt9KSksZnVuY3Rpb24oZSl7ZS5Ob0FwcHNGb3VuZD1cIk5vQXBwc0ZvdW5kXCIsZS5SZXNvbHZlclVuYXZhaWxhYmxlPVwiUmVzb2x2ZXJVbmF2YWlsYWJsZVwiLGUuUmVzb2x2ZXJUaW1lb3V0PVwiUmVzb2x2ZXJUaW1lb3V0XCJ9KGllfHwoaWU9e30pKSxmdW5jdGlvbihlKXtlLk5vQ2hhbm5lbEZvdW5kPVwiTm9DaGFubmVsRm91bmRcIixlLkFjY2Vzc0RlbmllZD1cIkFjY2Vzc0RlbmllZFwiLGUuQ3JlYXRpb25GYWlsZWQ9XCJDcmVhdGlvbkZhaWxlZFwifShhZXx8KGFlPXt9KSksbGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oZSl7dmFyIHQsbj1PYmplY3QucHJvdG90eXBlLHI9bi5oYXNPd25Qcm9wZXJ0eSxvPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30saT1vLml0ZXJhdG9yfHxcIkBAaXRlcmF0b3JcIixhPW8uYXN5bmNJdGVyYXRvcnx8XCJAQGFzeW5jSXRlcmF0b3JcIixsPW8udG9TdHJpbmdUYWd8fFwiQEB0b1N0cmluZ1RhZ1wiO2Z1bmN0aW9uIHMoZSx0LG4pe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksZVt0XX10cnl7cyh7fSxcIlwiKX1jYXRjaChlKXtzPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZVt0XT1ufX1mdW5jdGlvbiBjKGUsdCxuLHIpe3ZhciBvPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2Ygdj90OnYsaT1PYmplY3QuY3JlYXRlKG8ucHJvdG90eXBlKSxhPW5ldyBqKHJ8fFtdKTtyZXR1cm4gaS5faW52b2tlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1mO3JldHVybiBmdW5jdGlvbihvLGkpe2lmKHI9PT1wKXRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7aWYocj09PWgpe2lmKFwidGhyb3dcIj09PW8pdGhyb3cgaTtyZXR1cm4gaygpfWZvcihuLm1ldGhvZD1vLG4uYXJnPWk7Oyl7dmFyIGE9bi5kZWxlZ2F0ZTtpZihhKXt2YXIgbD1MKGEsbik7aWYobCl7aWYobD09PWcpY29udGludWU7cmV0dXJuIGx9fWlmKFwibmV4dFwiPT09bi5tZXRob2Qpbi5zZW50PW4uX3NlbnQ9bi5hcmc7ZWxzZSBpZihcInRocm93XCI9PT1uLm1ldGhvZCl7aWYocj09PWYpdGhyb3cgcj1oLG4uYXJnO24uZGlzcGF0Y2hFeGNlcHRpb24obi5hcmcpfWVsc2VcInJldHVyblwiPT09bi5tZXRob2QmJm4uYWJydXB0KFwicmV0dXJuXCIsbi5hcmcpO3I9cDt2YXIgcz11KGUsdCxuKTtpZihcIm5vcm1hbFwiPT09cy50eXBlKXtpZihyPW4uZG9uZT9oOmQscy5hcmc9PT1nKWNvbnRpbnVlO3JldHVybnt2YWx1ZTpzLmFyZyxkb25lOm4uZG9uZX19XCJ0aHJvd1wiPT09cy50eXBlJiYocj1oLG4ubWV0aG9kPVwidGhyb3dcIixuLmFyZz1zLmFyZyl9fX0oZSxuLGEpLGl9ZnVuY3Rpb24gdShlLHQsbil7dHJ5e3JldHVybnt0eXBlOlwibm9ybWFsXCIsYXJnOmUuY2FsbCh0LG4pfX1jYXRjaChlKXtyZXR1cm57dHlwZTpcInRocm93XCIsYXJnOmV9fX1lLndyYXA9Yzt2YXIgZj1cInN1c3BlbmRlZFN0YXJ0XCIsZD1cInN1c3BlbmRlZFlpZWxkXCIscD1cImV4ZWN1dGluZ1wiLGg9XCJjb21wbGV0ZWRcIixnPXt9O2Z1bmN0aW9uIHYoKXt9ZnVuY3Rpb24gbSgpe31mdW5jdGlvbiBDKCl7fXZhciB5PXt9O3lbaV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307dmFyIHc9T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9dyYmdyh3KE0oW10pKSk7YiYmYiE9PW4mJnIuY2FsbChiLGkpJiYoeT1iKTt2YXIgeD1DLnByb3RvdHlwZT12LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHkpO2Z1bmN0aW9uIF8oZSl7W1wibmV4dFwiLFwidGhyb3dcIixcInJldHVyblwiXS5mb3JFYWNoKChmdW5jdGlvbih0KXtzKGUsdCwoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2ludm9rZSh0LGUpfSkpfSkpfWZ1bmN0aW9uIE8oZSx0KXtmdW5jdGlvbiBuKG8saSxhLGwpe3ZhciBzPXUoZVtvXSxlLGkpO2lmKFwidGhyb3dcIiE9PXMudHlwZSl7dmFyIGM9cy5hcmcsZj1jLnZhbHVlO3JldHVybiBmJiZcIm9iamVjdFwiPT10eXBlb2YgZiYmci5jYWxsKGYsXCJfX2F3YWl0XCIpP3QucmVzb2x2ZShmLl9fYXdhaXQpLnRoZW4oKGZ1bmN0aW9uKGUpe24oXCJuZXh0XCIsZSxhLGwpfSksKGZ1bmN0aW9uKGUpe24oXCJ0aHJvd1wiLGUsYSxsKX0pKTp0LnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24oZSl7Yy52YWx1ZT1lLGEoYyl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIG4oXCJ0aHJvd1wiLGUsYSxsKX0pKX1sKHMuYXJnKX12YXIgbzt0aGlzLl9pbnZva2U9ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBpKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG8pe24oZSxyLHQsbyl9KSl9cmV0dXJuIG89bz9vLnRoZW4oaSxpKTppKCl9fWZ1bmN0aW9uIEwoZSxuKXt2YXIgcj1lLml0ZXJhdG9yW24ubWV0aG9kXTtpZihyPT09dCl7aWYobi5kZWxlZ2F0ZT1udWxsLFwidGhyb3dcIj09PW4ubWV0aG9kKXtpZihlLml0ZXJhdG9yLnJldHVybiYmKG4ubWV0aG9kPVwicmV0dXJuXCIsbi5hcmc9dCxMKGUsbiksXCJ0aHJvd1wiPT09bi5tZXRob2QpKXJldHVybiBnO24ubWV0aG9kPVwidGhyb3dcIixuLmFyZz1uZXcgVHlwZUVycm9yKFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZFwiKX1yZXR1cm4gZ312YXIgbz11KHIsZS5pdGVyYXRvcixuLmFyZyk7aWYoXCJ0aHJvd1wiPT09by50eXBlKXJldHVybiBuLm1ldGhvZD1cInRocm93XCIsbi5hcmc9by5hcmcsbi5kZWxlZ2F0ZT1udWxsLGc7dmFyIGk9by5hcmc7cmV0dXJuIGk/aS5kb25lPyhuW2UucmVzdWx0TmFtZV09aS52YWx1ZSxuLm5leHQ9ZS5uZXh0TG9jLFwicmV0dXJuXCIhPT1uLm1ldGhvZCYmKG4ubWV0aG9kPVwibmV4dFwiLG4uYXJnPXQpLG4uZGVsZWdhdGU9bnVsbCxnKTppOihuLm1ldGhvZD1cInRocm93XCIsbi5hcmc9bmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0XCIpLG4uZGVsZWdhdGU9bnVsbCxnKX1mdW5jdGlvbiBFKGUpe3ZhciB0PXt0cnlMb2M6ZVswXX07MSBpbiBlJiYodC5jYXRjaExvYz1lWzFdKSwyIGluIGUmJih0LmZpbmFsbHlMb2M9ZVsyXSx0LmFmdGVyTG9jPWVbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKHQpfWZ1bmN0aW9uIFMoZSl7dmFyIHQ9ZS5jb21wbGV0aW9ufHx7fTt0LnR5cGU9XCJub3JtYWxcIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gaihlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6XCJyb290XCJ9XSxlLmZvckVhY2goRSx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBNKGUpe2lmKGUpe3ZhciBuPWVbaV07aWYobilyZXR1cm4gbi5jYWxsKGUpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUubmV4dClyZXR1cm4gZTtpZighaXNOYU4oZS5sZW5ndGgpKXt2YXIgbz0tMSxhPWZ1bmN0aW9uIG4oKXtmb3IoOysrbzxlLmxlbmd0aDspaWYoci5jYWxsKGUsbykpcmV0dXJuIG4udmFsdWU9ZVtvXSxuLmRvbmU9ITEsbjtyZXR1cm4gbi52YWx1ZT10LG4uZG9uZT0hMCxufTtyZXR1cm4gYS5uZXh0PWF9fXJldHVybntuZXh0Omt9fWZ1bmN0aW9uIGsoKXtyZXR1cm57dmFsdWU6dCxkb25lOiEwfX1yZXR1cm4gbS5wcm90b3R5cGU9eC5jb25zdHJ1Y3Rvcj1DLEMuY29uc3RydWN0b3I9bSxtLmRpc3BsYXlOYW1lPXMoQyxsLFwiR2VuZXJhdG9yRnVuY3Rpb25cIiksZS5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PVwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJmUuY29uc3RydWN0b3I7cmV0dXJuISF0JiYodD09PW18fFwiR2VuZXJhdG9yRnVuY3Rpb25cIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsQyk6KGUuX19wcm90b19fPUMscyhlLGwsXCJHZW5lcmF0b3JGdW5jdGlvblwiKSksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4KSxlfSxlLmF3cmFwPWZ1bmN0aW9uKGUpe3JldHVybntfX2F3YWl0OmV9fSxfKE8ucHJvdG90eXBlKSxPLnByb3RvdHlwZVthXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxlLkFzeW5jSXRlcmF0b3I9TyxlLmFzeW5jPWZ1bmN0aW9uKHQsbixyLG8saSl7dm9pZCAwPT09aSYmKGk9UHJvbWlzZSk7dmFyIGE9bmV3IE8oYyh0LG4scixvKSxpKTtyZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKG4pP2E6YS5uZXh0KCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZG9uZT9lLnZhbHVlOmEubmV4dCgpfSkpfSxfKHgpLHMoeCxsLFwiR2VuZXJhdG9yXCIpLHhbaV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30seC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiW29iamVjdCBHZW5lcmF0b3JdXCJ9LGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1bXTtmb3IodmFyIG4gaW4gZSl0LnB1c2gobik7cmV0dXJuIHQucmV2ZXJzZSgpLGZ1bmN0aW9uIG4oKXtmb3IoO3QubGVuZ3RoOyl7dmFyIHI9dC5wb3AoKTtpZihyIGluIGUpcmV0dXJuIG4udmFsdWU9cixuLmRvbmU9ITEsbn1yZXR1cm4gbi5kb25lPSEwLG59fSxlLnZhbHVlcz1NLGoucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpqLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXQsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD1cIm5leHRcIix0aGlzLmFyZz10LHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKFMpLCFlKWZvcih2YXIgbiBpbiB0aGlzKVwidFwiPT09bi5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLG4pJiYhaXNOYU4oK24uc2xpY2UoMSkpJiYodGhpc1tuXT10KX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgZT10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZihcInRocm93XCI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIG49dGhpcztmdW5jdGlvbiBvKHIsbyl7cmV0dXJuIGwudHlwZT1cInRocm93XCIsbC5hcmc9ZSxuLm5leHQ9cixvJiYobi5tZXRob2Q9XCJuZXh0XCIsbi5hcmc9dCksISFvfWZvcih2YXIgaT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7aT49MDstLWkpe3ZhciBhPXRoaXMudHJ5RW50cmllc1tpXSxsPWEuY29tcGxldGlvbjtpZihcInJvb3RcIj09PWEudHJ5TG9jKXJldHVybiBvKFwiZW5kXCIpO2lmKGEudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChhLFwiY2F0Y2hMb2NcIiksYz1yLmNhbGwoYSxcImZpbmFsbHlMb2NcIik7aWYocyYmYyl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG8oYS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbyhhLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG8oYS5jYXRjaExvYywhMCl9ZWxzZXtpZighYyl0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBvKGEuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBvPXRoaXMudHJ5RW50cmllc1tuXTtpZihvLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwobyxcImZpbmFsbHlMb2NcIikmJnRoaXMucHJldjxvLmZpbmFsbHlMb2Mpe3ZhciBpPW87YnJlYWt9fWkmJihcImJyZWFrXCI9PT1lfHxcImNvbnRpbnVlXCI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIGE9aT9pLmNvbXBsZXRpb246e307cmV0dXJuIGEudHlwZT1lLGEuYXJnPXQsaT8odGhpcy5tZXRob2Q9XCJuZXh0XCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyxnKTp0aGlzLmNvbXBsZXRlKGEpfSxjb21wbGV0ZTpmdW5jdGlvbihlLHQpe2lmKFwidGhyb3dcIj09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm5cImJyZWFrXCI9PT1lLnR5cGV8fFwiY29udGludWVcIj09PWUudHlwZT90aGlzLm5leHQ9ZS5hcmc6XCJyZXR1cm5cIj09PWUudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPWUuYXJnLHRoaXMubWV0aG9kPVwicmV0dXJuXCIsdGhpcy5uZXh0PVwiZW5kXCIpOlwibm9ybWFsXCI9PT1lLnR5cGUmJnQmJih0aGlzLm5leHQ9dCksZ30sZmluaXNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciBuPXRoaXMudHJ5RW50cmllc1t0XTtpZihuLmZpbmFsbHlMb2M9PT1lKXJldHVybiB0aGlzLmNvbXBsZXRlKG4uY29tcGxldGlvbixuLmFmdGVyTG9jKSxTKG4pLGd9fSxjYXRjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgbj10aGlzLnRyeUVudHJpZXNbdF07aWYobi50cnlMb2M9PT1lKXt2YXIgcj1uLmNvbXBsZXRpb247aWYoXCJ0aHJvd1wiPT09ci50eXBlKXt2YXIgbz1yLmFyZztTKG4pfXJldHVybiBvfX10aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpNKGUpLHJlc3VsdE5hbWU6bixuZXh0TG9jOnJ9LFwibmV4dFwiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz10KSxnfX0sZX0oZS5leHBvcnRzKTt0cnl7cmVnZW5lcmF0b3JSdW50aW1lPXR9Y2F0Y2goZSl7RnVuY3Rpb24oXCJyXCIsXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHQpfX0sbGUoe2V4cG9ydHM6e319KSxmdW5jdGlvbihlKXtlLkNvbnRhY3Q9XCJmZGMzLmNvbnRhY3RcIixlLkNvbnRhY3RMaXN0PVwiZmRjMy5jb250YWN0TGlzdFwiLGUuQ291bnRyeT1cImZkYzMuY291bnRyeVwiLGUuSW5zdHJ1bWVudD1cImZkYzMuaW5zdHJ1bWVudFwiLGUuT3JnYW5pemF0aW9uPVwiZmRjMy5vcmdhbml6YXRpb25cIixlLlBvcnRmb2xpbz1cImZkYzMucG9ydGZvbGlvXCIsZS5Qb3NpdGlvbj1cImZkYzMucG9zaXRpb25cIn0oc2V8fChzZT17fSkpLGZ1bmN0aW9uKGUpe2UuU3RhcnRDYWxsPVwiU3RhcnRDYWxsXCIsZS5TdGFydENoYXQ9XCJTdGFydENoYXRcIixlLlZpZXdDaGFydD1cIlZpZXdDaGFydFwiLGUuVmlld0NvbnRhY3Q9XCJWaWV3Q29udGFjdFwiLGUuVmlld1F1b3RlPVwiVmlld1F1b3RlXCIsZS5WaWV3TmV3cz1cIlZpZXdOZXdzXCIsZS5WaWV3SW5zdHJ1bWVudD1cIlZpZXdJbnN0cnVtZW50XCIsZS5WaWV3QW5hbHlzaXM9XCJWaWV3QW5hbHlzaXNcIn0oY2V8fChjZT17fSkpO2NvbnN0IHVlPVwib2ZtczM2NWFjdGlvblwiLGZlPWU9PmU/XCJtc3RlYW1zOlwiOlwiaHR0cHM6Ly90ZWFtcy5taWNyb3NvZnQuY29tXCIsZGU9YXN5bmMgZT0+e2NvbnN0IHQ9bnVsbD09ZT92b2lkIDA6ZVt1ZV07aWYodCl0cnl7Y29uc3QgZT0oZT0+e2NvbnN0IHQ9KDAsei5kZWNvbXByZXNzKShlLHtpbnB1dEVuY29kaW5nOlwiQmFzZTY0XCIsb3V0cHV0RW5jb2Rpbmc6XCJTdHJpbmdcIn0pO3JldHVybiBKU09OLnBhcnNlKHQpfSkodCkse2NvbnRleHQ6bixpbnRlbnQ6cn09ZSxvPXtjb250ZXh0Om4sbmFtZTpyfTtyZXR1cm4gYXdhaXQgZmluLm1lLmludGVyb3AuZmlyZUludGVudChvKSxvfWNhdGNoKGUpe2NvbnN0IHQ9ZS5tZXNzYWdlO3Rocm93IG5ldyBrKFwiRmFpbGVkIHRvIGRlY29tcHJlc3Mgc2hhcmUgcGF5bG9hZFwiKyh0P2AgKCR7dH0pYDpcIlwiKSxlKX19LHBlPWFzeW5jKGUsdCxuKT0+e2NvbnN0IHI9YXdhaXQoYXN5bmMoZSx0LG49W10pPT57dHJ5e2NvbnN0IHI9W1wiaWRcIiwuLi5uXS5qb2luKFwiLFwiKSx7ZGF0YTpvfT1hd2FpdCBlLmV4ZWN1dGVBcGlSZXF1ZXN0KGAvdjEuMC90ZWFtcy8ke2VuY29kZVVSSUNvbXBvbmVudCh0KX0/JHNlbGVjdD0ke3J9YCk7cmV0dXJuIG99Y2F0Y2goZSl7aWYoNDA0IT09ZS5zdGF0dXMpdGhyb3cgZX19KShlLHQsW1wiZGlzcGxheU5hbWVcIl0pO2lmKCFyKXJldHVybjtsZXQgbztpZihlLmxvZ2dlci5sb2dJbmZvKFwiUmVzb2x2ZWQgdGVhbVwiLHIpLG4pe2lmKG89YXdhaXQoYXN5bmMoZSx0LG4scj1bXSk9Pnt0cnl7Y29uc3Qgbz1bXCJpZFwiLC4uLnJdLmpvaW4oXCIsXCIpLHtkYXRhOml9PWF3YWl0IGUuZXhlY3V0ZUFwaVJlcXVlc3QoYC92MS4wL3RlYW1zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG4pfS9jaGFubmVscy8ke2VuY29kZVVSSUNvbXBvbmVudCh0KX0/JHNlbGVjdD0ke299YCk7cmV0dXJuIGl9Y2F0Y2goZSl7aWYoNDA0IT09ZS5zdGF0dXMpdGhyb3cgZX19KShlLG4sdCxbXCJkaXNwbGF5TmFtZVwiXSksIW8pcmV0dXJuIHZvaWQgZS5sb2dnZXIubG9nV2FybmluZyhgQ291bGQgbm90IHJlc29sdmUgY2hhbm5lbCBmcm9tIGlkICR7bn1gKX1lbHNle2UubG9nZ2VyLmxvZ0luZm8oXCJObyBjaGFubmVsIGlkIHN1cHBsaWVkLCB1c2luZyBwcmltYXJ5IGNoYW5uZWxcIik7Y29uc3R7ZGF0YTpufT1hd2FpdCBlLmV4ZWN1dGVBcGlSZXF1ZXN0KGAvdjEuMC90ZWFtcy8ke2VuY29kZVVSSUNvbXBvbmVudCh0KX0vcHJpbWFyeUNoYW5uZWw/JHNlbGVjdD1kaXNwbGF5TmFtZSxpZGApO289bn1jb25zdCBpPXtjaGFubmVsSWQ6by5pZCxjaGFubmVsTmFtZTpvLmRpc3BsYXlOYW1lLHRlYW1JZDpyLmlkLHRlYW1OYW1lOnIuZGlzcGxheU5hbWV9O3JldHVybiBlLmxvZ2dlci5sb2dJbmZvKFwiUmVzb2x2ZWQgdGVhbSBjaGFubmVsXCIsdCxuLGkpLGl9O2NsYXNzIGhle2NvbnN0cnVjdG9yKGUsdD0hMCl7dGhpcy5sb2dnZXI9ZS5wcm92aWRlci5sb2dnZXIsdGhpcy5wcm92aWRlcj1lLnByb3ZpZGVyLHRoaXMudXNlTXNUZWFtc1Byb3RvY29sPXQsdGhpcy5yZWdpc3RlckludGVudEhhbmRsZXJzPXRoaXMucmVnaXN0ZXJJbnRlbnRIYW5kbGVycy5iaW5kKHRoaXMpLHRoaXMuc2hhcmU9dGhpcy5zaGFyZS5iaW5kKHRoaXMpLHRoaXMuc3RhcnRDYWxsPXRoaXMuc3RhcnRDYWxsLmJpbmQodGhpcyksdGhpcy5zdGFydENoYXQ9dGhpcy5zdGFydENoYXQuYmluZCh0aGlzKSx0aGlzLmVuYWJsZVNoYXJlUGF5bG9hZEhhbmRsZXIoKSxxKFguVGVhbXMsdGhpcy5sb2dnZXIpfWFzeW5jIGVuYWJsZVNoYXJlUGF5bG9hZEhhbmRsZXIoKXtjb25zdHtpbml0aWFsT3B0aW9uczplfT1hd2FpdCBmaW4uQXBwbGljYXRpb24uZ2V0Q3VycmVudFN5bmMoKS5nZXRJbmZvKCkse3VzZXJBcHBDb25maWdBcmdzOnR9PWUsbj1hd2FpdCBkZSh0KTtuJiZ0aGlzLmxvZ2dlci5sb2dJbmZvKFwiRmlyaW5nIGludGVudFwiLG4pLGZpbi5BcHBsaWNhdGlvbi5nZXRDdXJyZW50U3luYygpLmFkZExpc3RlbmVyKFwicnVuLXJlcXVlc3RlZFwiLChhc3luYyBlPT57dHJ5e2NvbnN0IHQ9YXdhaXQgZGUoZS51c2VyQXBwQ29uZmlnQXJncyk7dCYmdGhpcy5sb2dnZXIubG9nSW5mbyhcIkZpcmluZyBpbnRlbnRcIix0KX1jYXRjaChlKXt0aGlzLmxvZ2dlci5sb2dFcnJvcihlKX19KSl9YXN5bmMgb3BlblVybChlKXt0aGlzLmxvZ2dlci5sb2dJbmZvKFwib3BlblVybCBzdGFydGVkXCIsZSk7dHJ5e2NvbnN0IHQ9dGhpcy51c2VNc1RlYW1zUHJvdG9jb2w/ZS5yZXBsYWNlKC9eaHR0cHM6XFwvXFwvdGVhbXMubWljcm9zb2Z0LmNvbVxcLy9pLFwibXN0ZWFtczpcIik6ZTt0aGlzLmxvZ2dlci5sb2dJbmZvKFwiT3BlbmluZyB1cmxcIix0KSxhd2FpdCBmaW4uU3lzdGVtLm9wZW5VcmxXaXRoQnJvd3Nlcih0KSx0aGlzLmxvZ2dlci5sb2dJbmZvKFwib3BlblVybCBjb21wbGV0ZWRcIil9Y2F0Y2goZSl7dGhyb3cgdGhpcy5sb2dnZXIubG9nRXJyb3IoZSksZX19YXN5bmMgcmVnaXN0ZXJJbnRlbnRIYW5kbGVycygpe2lmKHRoaXMubG9nZ2VyLmxvZ0luZm8oXCJyZWdpc3RlckludGVudEhhbmRsZXJzIHN0YXJ0ZWRcIiksdGhpcy51bnN1YnNjcmliZUludGVudEhhbmRsZXJzKXJldHVybnt1bnN1YnNjcmliZTp0aGlzLnVuc3Vic2NyaWJlSW50ZW50SGFuZGxlcnN9O3RyeXthd2FpdCBmaW4ubWUuaW50ZXJvcC5nZXRDb250ZXh0R3JvdXBzKCk7Y29uc3QgZT1hd2FpdCBmaW4ubWUuaW50ZXJvcC5yZWdpc3RlckludGVudEhhbmRsZXIoKGFzeW5jIGU9Pnt0cnl7YXdhaXQoKGUsdCk9PmFzeW5jIG49Pnt2YXIgcixvLGksYTtpZihlLmxvZ2dlci5sb2dJbmZvKFwiaGFuZGxlU3RhcnRDYWxsSW50ZW50IHN0YXJ0ZWRcIixuKSwobnVsbD09PShyPW4ubmFtZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIudG9Mb3dlckNhc2UoKSkhPT1jZS5TdGFydENhbGwudG9Mb3dlckNhc2UoKSl0aHJvdyBuZXcgayhgVW5leHBlY3RlZCBpbnRlbnQgdHlwZTogJHtuLm5hbWV9YCk7Y29uc3R7Y29udGV4dDpsfT1uO2lmKChudWxsPT09KG89bC50eXBlKXx8dm9pZCAwPT09bz92b2lkIDA6by50b0xvd2VyQ2FzZSgpKSE9PXNlLkNvbnRhY3QudG9Mb3dlckNhc2UoKSYmKG51bGw9PT0oaT1sLnR5cGUpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLnRvTG93ZXJDYXNlKCkpIT09c2UuQ29udGFjdExpc3QudG9Mb3dlckNhc2UoKSl0aHJvdyBuZXcgayhgVW5leHBlY3RlZCBjb250ZXh0IHR5cGU6ICR7bC50eXBlfWApO2NvbnN0IHM9KG51bGw9PT0oYT1sLnR5cGUpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnRvTG93ZXJDYXNlKCkpPT09c2UuQ29udGFjdExpc3QudG9Mb3dlckNhc2UoKT9sLmNvbnRhY3RzLm1hcCgoZT0+ZS5pZC5lbWFpbCkpLmZpbHRlcihCb29sZWFuKTpbbC5pZC5lbWFpbF0sYz1hd2FpdCB0KHMpO2UubG9nZ2VyLmxvZ0luZm8oXCJoYW5kbGVTdGFydENhbGxJbnRlbnQgY29tcGxldGVkXCIsYyl9KSh0aGlzLnByb3ZpZGVyLHRoaXMuc3RhcnRDYWxsKShlKX1jYXRjaChlKXt0aHJvdyB0aGlzLmxvZ2dlci5sb2dFcnJvcihlKSxlfX0pLFwiU3RhcnRDYWxsXCIpLHQ9YXdhaXQgZmluLm1lLmludGVyb3AucmVnaXN0ZXJJbnRlbnRIYW5kbGVyKChhc3luYyBlPT57dHJ5e2F3YWl0KChlLHQpPT5hc3luYyBuPT57dmFyIHIsbyxpLGE7aWYoZS5sb2dnZXIubG9nSW5mbyhcImhhbmRsZVN0YXJ0Q2hhdEludGVudCBzdGFydGVkXCIsbiksKG51bGw9PT0ocj1uLm5hbWUpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnRvTG93ZXJDYXNlKCkpIT09Y2UuU3RhcnRDaGF0LnRvTG93ZXJDYXNlKCkpdGhyb3cgbmV3IGsoYFVuZXhwZWN0ZWQgaW50ZW50IHR5cGU6ICR7bi5uYW1lfWApO2NvbnN0e2NvbnRleHQ6bH09bjtpZigobnVsbD09PShvPWwudHlwZSl8fHZvaWQgMD09PW8/dm9pZCAwOm8udG9Mb3dlckNhc2UoKSkhPT1zZS5Db250YWN0LnRvTG93ZXJDYXNlKCkmJihudWxsPT09KGk9bC50eXBlKXx8dm9pZCAwPT09aT92b2lkIDA6aS50b0xvd2VyQ2FzZSgpKSE9PXNlLkNvbnRhY3RMaXN0LnRvTG93ZXJDYXNlKCkpdGhyb3cgbmV3IGsoYFVuZXhwZWN0ZWQgY29udGV4dCB0eXBlOiAke2wudHlwZX1gKTtjb25zdCBzPShudWxsPT09KGE9bC50eXBlKXx8dm9pZCAwPT09YT92b2lkIDA6YS50b0xvd2VyQ2FzZSgpKT09PXNlLkNvbnRhY3RMaXN0LnRvTG93ZXJDYXNlKCk/bC5jb250YWN0cy5tYXAoKGU9PmUuaWQuZW1haWwpKS5maWx0ZXIoQm9vbGVhbik6W2wuaWQuZW1haWxdLGM9YXdhaXQgdCh7ZW1haWxBZGRyZXNzZXM6cyx0b3BpY05hbWU6bC5uYW1lfSk7ZS5sb2dnZXIubG9nSW5mbyhcImhhbmRsZVN0YXJ0Q2hhdEludGVudCBjb21wbGV0ZWRcIixjKX0pKHRoaXMucHJvdmlkZXIsdGhpcy5zdGFydENoYXQpKGUpfWNhdGNoKGUpe3Rocm93IHRoaXMubG9nZ2VyLmxvZ0Vycm9yKGUpLGV9fSksXCJTdGFydENoYXRcIik7cmV0dXJuIHRoaXMudW5zdWJzY3JpYmVJbnRlbnRIYW5kbGVycz1hc3luYygpPT57dGhpcy5sb2dnZXIubG9nSW5mbyhcInVuc3Vic2NyaWJlSW50ZW50SGFuZGxlcnMgc3RhcnRlZFwiKSxhd2FpdCBlLnVuc3Vic2NyaWJlKCksYXdhaXQgdC51bnN1YnNjcmliZSgpLHRoaXMudW5zdWJzY3JpYmVJbnRlbnRIYW5kbGVycz12b2lkIDAsdGhpcy5sb2dnZXIubG9nSW5mbyhcInVuc3Vic2NyaWJlSW50ZW50SGFuZGxlcnMgY29tcGxldGVkXCIpfSx0aGlzLmxvZ2dlci5sb2dJbmZvKFwicmVnaXN0ZXJJbnRlbnRIYW5kbGVycyBjb21wbGV0ZWRcIikse3Vuc3Vic2NyaWJlOnRoaXMudW5zdWJzY3JpYmVJbnRlbnRIYW5kbGVyc319Y2F0Y2goZSl7Y29uc3QgdD1uZXcgcmUoZS5tZXNzYWdlKTt0aHJvdyB0aGlzLmxvZ2dlci5sb2dFcnJvcih0KSx0fX1hc3luYyBzaGFyZShlKXt2YXIgdCxuLHIsbzt0aGlzLmxvZ2dlci5sb2dJbmZvKFwic2hhcmUgc3RhcnRlZFwiLGUpO3RyeXtpZighZS50YXJnZXQpdGhyb3cgbmV3IEgoXCJUYXJnZXQgbm90IHByb3ZpZGVkXCIpO2lmKChudWxsPT09KHQ9ZS5jb250ZXh0KXx8dm9pZCAwPT09dD92b2lkIDA6dC50eXBlLnRvTG93ZXJDYXNlKCkpIT09c2UuSW5zdHJ1bWVudC50b0xvd2VyQ2FzZSgpKXRocm93IG5ldyBIKFwiVW5zdXBwb3J0ZWQgY29udGV4dCB0eXBlXCIpO2lmKCEobnVsbD09PShyPW51bGw9PT0obj1lLmNvbnRleHQpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmlkKXx8dm9pZCAwPT09cj92b2lkIDA6ci50aWNrZXIpKXRocm93IG5ldyBIKFwiVGlja2VyIG5vdCBwcm92aWRlZFwiKTtpZighZS5jaGFydEltYWdlJiZudWxsPT1lLnByaWNlQ3VycmVudCl0aHJvdyBuZXcgSChcIkN1cnJlbnQgcHJpY2Ugbm90IHByb3ZpZGVkXCIpO2NvbnN0IGk9bnVsbD09PShvPWUuc2hvd01lc3NhZ2UpfHx2b2lkIDA9PT1vfHxvLGE9YXdhaXQoYXN5bmMoZSx0KT0+e3ZhciBuLHIsbyxpO2NvbnN0e2NoYXJ0SW1hZ2U6YSxjb250ZXh0Omx9PXQse3ByaWNlQ3VycmVudDpzLHByaWNlSGlnaDpjLHByaWNlTG93OnUscHJpY2VPcGVuOmZ9PXQsZD0obnVsbD09PShyPW51bGw9PT0obj1sLmlkKXx8dm9pZCAwPT09bj92b2lkIDA6bi50aWNrZXIpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnRyaW0oKSl8fHZvaWQgMCxwPShudWxsPT09KG89bC5uYW1lKXx8dm9pZCAwPT09bz92b2lkIDA6by50cmltKCkpfHx2b2lkIDA7bGV0IGgsZyx2LG0sQyx5O2lmKG51bGwhPXQudGltZXN0YW1wfHwhYSl0cnl7aD1uZXcgRGF0ZShudWxsIT09KGk9dC50aW1lc3RhbXApJiZ2b2lkIDAhPT1pP2k6RGF0ZS5ub3coKSkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cXC5cXGQrWiQvLFwiKzAwOjAwXCIpfWNhdGNoKG4pe2UubG9nZ2VyLmxvZ1dhcm5pbmcoXCJJbnZhbGlkIHRpbWVzdGFtcFwiLHQudGltZXN0YW1wKX1pZihudWxsIT1zJiZudWxsIT1mJiYoZz1zLWYsdj1nL2YqMTAwLEM9Zz4wP1wi4payXCI6ZzwwP1wi4pa8XCI6XCLil49cIixtPWc+MD9cIkdvb2RcIjpnPDA/XCJBdHRlbnRpb25cIjpcIldhcm5pbmdcIiksYSl7aWYoIS9eaW1hZ2VcXC8oZ2lmfGpwKGV8ZT9nKXxwbmcpJC9pLnRlc3QoYS50eXBlKSl0aHJvdyBuZXcgSChcIkNoYXJ0IGltYWdlIE1JTUUgdHlwZSBub3Qgc3VwcG9ydGVkXCIpO3RyeXt5PWF3YWl0KGFzeW5jIGU9Pm5ldyBQcm9taXNlKCgodCxuKT0+e2NvbnN0IHI9bmV3IEZpbGVSZWFkZXI7ci5vbmxvYWRlbmQ9KCk9PnQoci5yZXN1bHQpLHIub25lcnJvcj0oKT0+bihuZXcgRXJyb3IoXCJGYWlsZWQgdG8gY29udmVydCBibG9iIHRvIGJhc2U2NFwiKSksci5yZWFkQXNEYXRhVVJMKGUpfSkpKShhKX1jYXRjaChlKXt0aHJvdyBuZXcgayhcIkZhaWxlZCB0byBjb252ZXJ0IGJsb2IgdG8gYmFzZTY0XCIsZSl9fWNvbnN0IHc9KGF3YWl0IGZpbi5TeXN0ZW0uZ2V0UnVudGltZUluZm8oKSkubWFuaWZlc3RVcmwsYj0oeD17Y29udGV4dDpsLGludGVudDphP2NlLlZpZXdDaGFydDpjZS5WaWV3SW5zdHJ1bWVudCx2ZXJzaW9uOlp9LCgwLHouY29tcHJlc3MpKEpTT04uc3RyaW5naWZ5KHgpLHtvdXRwdXRFbmNvZGluZzpcIkJhc2U2NFwifSkpO3ZhciB4O2NvbnN0IF89YCR7d30/JCQke3VlfT0ke2VuY29kZVVSSUNvbXBvbmVudChiKX1gLE89YGh0dHBzOi8vc3RhcnQub3BlbmZpbi5jby8/bWFuaWZlc3Q9JHtlbmNvZGVVUklDb21wb25lbnQoXyl9YCxMPXskc2NoZW1hOlwiaHR0cDovL2FkYXB0aXZlY2FyZHMuaW8vc2NoZW1hcy9hZGFwdGl2ZS1jYXJkLmpzb25cIix0eXBlOlwiQWRhcHRpdmVDYXJkXCIsdmVyc2lvbjpcIjEuNFwiLGJvZHk6W3t0eXBlOlwiQ29sdW1uU2V0XCIsY29sdW1uczpbe3R5cGU6XCJDb2x1bW5cIix3aWR0aDpcInN0cmV0Y2hcIixpdGVtczpbe3R5cGU6XCJDb250YWluZXJcIixpdGVtczpbe3R5cGU6XCJUZXh0QmxvY2tcIix0ZXh0Om51bGwhPXA/cDpkLnRvVXBwZXJDYXNlKCksd3JhcDohMCxzaXplOlwiTGFyZ2VcIixzcGFjaW5nOlwiTm9uZVwifSxwJiZ7dHlwZTpcIlRleHRCbG9ja1wiLHRleHQ6ZC50b1VwcGVyQ2FzZSgpLGlzU3VidGxlOiEwLHdyYXA6ITAsc3BhY2luZzpcIk5vbmVcIn0saCYme3R5cGU6XCJUZXh0QmxvY2tcIix0ZXh0OmB7e0RBVEUoJHtofSwgU0hPUlQpfX0ge3tUSU1FKCR7aH0pfX1gLHdyYXA6ITAsc2l6ZTpcIlNtYWxsXCJ9XX1dfSxudWxsIT1zJiYheSYme3R5cGU6XCJDb2x1bW5cIix3aWR0aDpcInN0cmV0Y2hcIixpdGVtczpbe3R5cGU6XCJUZXh0QmxvY2tcIix0ZXh0OnMudG9GaXhlZCgyKSxzaXplOlwiRXh0cmFMYXJnZVwiLHdyYXA6ITAsaG9yaXpvbnRhbEFsaWdubWVudDpcIlJpZ2h0XCJ9LG51bGwhPWcmJm51bGwhPXYmJnt0eXBlOlwiVGV4dEJsb2NrXCIsdGV4dDpgJHtDfSAke2cudG9GaXhlZCgyKX0gKCR7di50b0ZpeGVkKDIpfSUpYCxjb2xvcjptLHNwYWNpbmc6XCJOb25lXCIsd3JhcDohMCxob3Jpem9udGFsQWxpZ25tZW50OlwiUmlnaHRcIn0sKG51bGwhPWZ8fG51bGwhPWN8fG51bGwhPXUpJiZ7dHlwZTpcIkNvbnRhaW5lclwiLGhvcml6b250YWxBbGlnbm1lbnQ6XCJSaWdodFwiLGl0ZW1zOlt7dHlwZTpcIkNvbHVtblNldFwiLGNvbHVtbnM6W3t0eXBlOlwiQ29sdW1uXCIsd2lkdGg6XCJzdHJldGNoXCIsaXRlbXM6W251bGwhPWYmJnt0eXBlOlwiVGV4dEJsb2NrXCIsdGV4dDpcIk9wZW5cIix3cmFwOiEwLGhvcml6b250YWxBbGlnbm1lbnQ6XCJSaWdodFwiLHNpemU6XCJTbWFsbFwiLHdlaWdodDpcIkJvbGRlclwiLHNwYWNpbmc6XCJOb25lXCJ9LG51bGwhPWMmJnt0eXBlOlwiVGV4dEJsb2NrXCIsdGV4dDpcIkhpZ2hcIix3cmFwOiEwLHNwYWNpbmc6XCJOb25lXCIsaG9yaXpvbnRhbEFsaWdubWVudDpcIlJpZ2h0XCIsc2l6ZTpcIlNtYWxsXCIsd2VpZ2h0OlwiQm9sZGVyXCJ9LG51bGwhPXUmJnt0eXBlOlwiVGV4dEJsb2NrXCIsdGV4dDpcIkxvd1wiLHdyYXA6ITAsc3BhY2luZzpcIk5vbmVcIixob3Jpem9udGFsQWxpZ25tZW50OlwiUmlnaHRcIixzaXplOlwiU21hbGxcIix3ZWlnaHQ6XCJCb2xkZXJcIn1dfSx7dHlwZTpcIkNvbHVtblwiLHdpZHRoOlwiYXV0b1wiLGl0ZW1zOltudWxsIT1mJiZ7dHlwZTpcIlRleHRCbG9ja1wiLHRleHQ6Zi50b0ZpeGVkKDIpLHdyYXA6ITAsc3BhY2luZzpcIk5vbmVcIixob3Jpem9udGFsQWxpZ25tZW50OlwiUmlnaHRcIixzaXplOlwiU21hbGxcIn0sbnVsbCE9YyYme3R5cGU6XCJUZXh0QmxvY2tcIix0ZXh0OmMudG9GaXhlZCgyKSx3cmFwOiEwLHNwYWNpbmc6XCJOb25lXCIsaG9yaXpvbnRhbEFsaWdubWVudDpcIlJpZ2h0XCIsc2l6ZTpcIlNtYWxsXCJ9LG51bGwhPXUmJnt0eXBlOlwiVGV4dEJsb2NrXCIsdGV4dDp1LnRvRml4ZWQoMiksd3JhcDohMCxzcGFjaW5nOlwiTm9uZVwiLGhvcml6b250YWxBbGlnbm1lbnQ6XCJSaWdodFwiLHNpemU6XCJTbWFsbFwifV19XX1dLHNwYWNpbmc6XCJTbWFsbFwifV19XX0seSYme3R5cGU6XCJJbWFnZVwiLHVybDpcIi4uL2hvc3RlZENvbnRlbnRzLzEvJHZhbHVlXCIsc3BhY2luZzpcIlNtYWxsXCJ9LHt0eXBlOlwiQWN0aW9uU2V0XCIsYWN0aW9uczpbe3R5cGU6XCJBY3Rpb24uT3BlblVybFwiLHVybDpPLHRpdGxlOlwiT3BlblwifV19XX0sRT17YXR0YWNobWVudHM6W3tpZDpcIjFcIixjb250ZW50VHlwZTpcImFwcGxpY2F0aW9uL3ZuZC5taWNyb3NvZnQuY2FyZC5hZGFwdGl2ZVwiLGNvbnRlbnQ6SlNPTi5zdHJpbmdpZnkoWShMKSl9XSxib2R5Ontjb250ZW50VHlwZTpcImh0bWxcIixjb250ZW50Oic8YXR0YWNobWVudCBpZD1cIjFcIj48L2F0dGFjaG1lbnQ+J30sc3VtbWFyeTpcIlRlc3Qgc3VtbWFyeVwifTtpZih5KXtjb25zdFssZSx0XT1bLi4ueS5tYXRjaCgvXmRhdGE6KFteO10rKTtiYXNlNjQsKC4rKSQvaSldO0UuaG9zdGVkQ29udGVudHM9W3tcIkBtaWNyb3NvZnQuZ3JhcGgudGVtcG9yYXJ5SWRcIjpcIjFcIixjb250ZW50Qnl0ZXM6dCxjb250ZW50VHlwZTplfV19cmV0dXJuIEV9KSh0aGlzLnByb3ZpZGVyLGUpO2xldCBsO2lmKEFycmF5LmlzQXJyYXkoZS50YXJnZXQpKXtjb25zdHt0YXJnZXQ6dH09ZSxuPWF3YWl0IFcodGhpcy5wcm92aWRlcix0LFtcImRpc3BsYXlOYW1lXCIsXCJtYWlsXCJdKSxyPW4uZmlsdGVyKEJvb2xlYW4pO2lmKCFyLmxlbmd0aClyZXR1cm4gdGhpcy5sb2dnZXIubG9nV2FybmluZyhcIkNvdWxkIG5vdCByZXNvbHZlIGFueSB2YWxpZCB1c2VycyBmcm9tIGVtYWlsIGFkZHJlc3Nlc1wiLHQpLHQubWFwKCgoKT0+e30pKTtjb25zdHtpZDpvLHdlYlVybDpzfT1hd2FpdChhc3luYyhlLHQpPT57Y29uc3Qgbj17Y2hhdFR5cGU6dC5sZW5ndGg+Mj9cImdyb3VwXCI6XCJvbmVPbk9uZVwiLG1lbWJlcnM6dC5tYXAoKHQ9Pih7XCJAb2RhdGEudHlwZVwiOlwiI21pY3Jvc29mdC5ncmFwaC5hYWRVc2VyQ29udmVyc2F0aW9uTWVtYmVyXCIscm9sZXM6Syh0KT9bXCJndWVzdFwiXTpbXCJvd25lclwiXSxcInVzZXJAb2RhdGEuYmluZFwiOmAke2UuYXBpT3JpZ2lufS92MS4wL3VzZXJzKCcke3QuaWR9JylgfSkpKX0se2RhdGE6cn09YXdhaXQgZS5leGVjdXRlQXBpUmVxdWVzdChcIi92MS4wL2NoYXRzXCIsXCJQT1NUXCIsbik7cmV0dXJuIHJ9KSh0aGlzLnByb3ZpZGVyLFt0aGlzLnByb3ZpZGVyLmN1cnJlbnRVc2VyLC4uLnJdKSx7ZGF0YTpjfT1hd2FpdCB0aGlzLnByb3ZpZGVyLmV4ZWN1dGVBcGlSZXF1ZXN0KGAvdjEuMC9jaGF0cy8ke2VuY29kZVVSSUNvbXBvbmVudChvKX0vbWVzc2FnZXNgLFwiUE9TVFwiLGEpO3RoaXMubG9nZ2VyLmxvZ0luZm8oXCJTZW50IGNoYXQgbWVzc2FnZVwiLGMpLGkmJmF3YWl0IHRoaXMub3BlblVybChzKSxsPUcobil9ZWxzZXtjb25zdHt0YXJnZXQ6dH09ZSxuPWF3YWl0IHBlKHRoaXMucHJvdmlkZXIsdC50ZWFtSWQsdC5jaGFubmVsSWQpO2lmKCFuKXJldHVybiB2b2lkIHRoaXMubG9nZ2VyLmxvZ1dhcm5pbmcoXCJDb3VsZCBub3QgcmVzb2x2ZSB0ZWFtL2NoYW5uZWxcIix0LnRlYW1JZCx0LmNoYW5uZWxJZCk7Y29uc3R7Y2hhbm5lbElkOnIsdGVhbUlkOm99PW4se2RhdGE6c309YXdhaXQgdGhpcy5wcm92aWRlci5leGVjdXRlQXBpUmVxdWVzdChgL3YxLjAvdGVhbXMvJHtlbmNvZGVVUklDb21wb25lbnQobyl9L2NoYW5uZWxzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHIpfS9tZXNzYWdlc2AsXCJQT1NUXCIsYSk7dGhpcy5sb2dnZXIubG9nSW5mbyhcIlNlbnQgY2hhdCBtZXNzYWdlXCIscyksaSYmYXdhaXQgdGhpcy5vcGVuVXJsKHMud2ViVXJsKSxsPW59cmV0dXJuIHRoaXMubG9nZ2VyLmxvZ0luZm8oXCJzaGFyZSBjb21wbGV0ZWRcIixsKSxsfWNhdGNoKGUpe3Rocm93IHRoaXMubG9nZ2VyLmxvZ0Vycm9yKGUpLGV9fWFzeW5jIHN0YXJ0Q2FsbChlPVtdLHQ9ITEpe3RoaXMubG9nZ2VyLmxvZ0luZm8oXCJzdGFydENhbGwgc3RhcnRlZFwiLGUpO3RyeXtsZXQgbj1gJHtmZSh0aGlzLnVzZU1zVGVhbXNQcm90b2NvbCl9L2wvY2FsbC8wLzA/YDtjb25zdCByPWF3YWl0IFcodGhpcy5wcm92aWRlcixlLFtcImRpc3BsYXlOYW1lXCIsXCJtYWlsXCJdKSxvPXIuZmlsdGVyKEJvb2xlYW4pLm1hcCgoZT0+ZW5jb2RlVVJJQ29tcG9uZW50KGUudXNlclByaW5jaXBhbE5hbWUpKSk7aWYoIW8ubGVuZ3RoKXJldHVybiB0aGlzLmxvZ2dlci5sb2dXYXJuaW5nKFwiQ291bGQgbm90IHJlc29sdmUgYW55IHZhbGlkIHVzZXJzIGZyb20gc3VwcGxpZWQgZW1haWxzXCIsZSksZS5tYXAoKCgpPT57fSkpO24rPWB1c2Vycz0ke28uam9pbihcIixcIil9JndpdGhWaWRlbz0ke3R9YCx0aGlzLmxvZ2dlci5sb2dJbmZvKFwiT3BlbmluZyBUZWFtc1wiLG4pLGF3YWl0IGZpbi5TeXN0ZW0ub3BlblVybFdpdGhCcm93c2VyKG4pO2NvbnN0IGk9RyhyKTtyZXR1cm4gdGhpcy5sb2dnZXIubG9nSW5mbyhcInN0YXJ0Q2FsbCBjb21wbGV0ZWRcIixpKSxpfWNhdGNoKGUpe3Rocm93IHRoaXMubG9nZ2VyLmxvZ0Vycm9yKGUpLGV9fWFzeW5jIHN0YXJ0Q2hhdChlKXt0aGlzLmxvZ2dlci5sb2dJbmZvKFwic3RhcnRDaGF0IHN0YXJ0ZWRcIixlKTt0cnl7bGV0IHQsbjtpZihcInRlYW1JZFwiaW4gZSl7Y29uc3R7dGVhbUlkOnIsY2hhbm5lbElkOm99PWUsaT1hd2FpdCBwZSh0aGlzLnByb3ZpZGVyLHIsbyk7aWYoIWkpcmV0dXJuIHZvaWQgdGhpcy5sb2dnZXIubG9nV2FybmluZyhcIkNvdWxkIG5vdCByZXNvbHZlIHRlYW0vY2hhbm5lbFwiLHIsbyk7dD1gJHtmZSh0aGlzLnVzZU1zVGVhbXNQcm90b2NvbCl9L2wvY2hhbm5lbC8ke2VuY29kZVVSSUNvbXBvbmVudChpLmNoYW5uZWxJZCl9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KGkuY2hhbm5lbE5hbWUpfT9ncm91cElkPSR7aS50ZWFtSWR9JnRlbmFudElkPSR7dGhpcy5wcm92aWRlci50ZW5hbnRJZH1gLG49aX1lbHNle2NvbnN0e2VtYWlsQWRkcmVzc2VzOnIsbWVzc2FnZTpvLHRvcGljTmFtZTppfT1lO3Q9YCR7ZmUodGhpcy51c2VNc1RlYW1zUHJvdG9jb2wpfS9sL2NoYXQvMC8wP2A7Y29uc3QgYT1hd2FpdCBXKHRoaXMucHJvdmlkZXIscixbXCJkaXNwbGF5TmFtZVwiLFwibWFpbFwiXSksbD1hLmZpbHRlcihCb29sZWFuKS5tYXAoKGU9PmVuY29kZVVSSUNvbXBvbmVudChlLnVzZXJQcmluY2lwYWxOYW1lKSkpO2lmKCFsLmxlbmd0aClyZXR1cm4gdGhpcy5sb2dnZXIubG9nV2FybmluZyhcIkNvdWxkIG5vdCByZXNvbHZlIGFueSB2YWxpZCB1c2VycyBmcm9tIGVtYWlsIGFkZHJlc3Nlc1wiLHIpLHIubWFwKCgoKT0+e30pKTt0Kz1gdXNlcnM9JHtsLmpvaW4oXCIsXCIpfWAsaSYmKHQrPWAmdG9waWNOYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGkpfWApLG8mJih0Kz1gJm1lc3NhZ2U9JHtlbmNvZGVVUklDb21wb25lbnQobyl9YCksbj1HKGEpfXJldHVybiB0aGlzLmxvZ2dlci5sb2dJbmZvKFwiT3BlbmluZyBUZWFtc1wiLHQpLGF3YWl0IGZpbi5TeXN0ZW0ub3BlblVybFdpdGhCcm93c2VyKHQpLHRoaXMubG9nZ2VyLmxvZ0luZm8oXCJzdGFydENoYXQgY29tcGxldGVkXCIsbiksbn1jYXRjaChlKXt0aHJvdyB0aGlzLmxvZ2dlci5sb2dFcnJvcihlKSxlfX19fSw5MTooKT0+e319LHo9e307ZnVuY3Rpb24gRyhlKXt2YXIgdD16W2VdO2lmKHZvaWQgMCE9PXQpcmV0dXJuIHQuZXhwb3J0czt2YXIgbj16W2VdPXtpZDplLGxvYWRlZDohMSxleHBvcnRzOnt9fTtyZXR1cm4gV1tlXS5jYWxsKG4uZXhwb3J0cyxuLG4uZXhwb3J0cyxHKSxuLmxvYWRlZD0hMCxuLmV4cG9ydHN9Ry5jPXosRy5kPShlLHQpPT57Zm9yKHZhciBuIGluIHQpRy5vKHQsbikmJiFHLm8oZSxuKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6dFtuXX0pfSxHLmc9ZnVuY3Rpb24oKXtpZihcIm9iamVjdFwiPT10eXBlb2YgZ2xvYmFsVGhpcylyZXR1cm4gZ2xvYmFsVGhpczt0cnl7cmV0dXJuIHRoaXN8fG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCl9Y2F0Y2goZSl7aWYoXCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93fX0oKSxHLm89KGUsdCk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpLEcubm1kPWU9PihlLnBhdGhzPVtdLGUuY2hpbGRyZW58fChlLmNoaWxkcmVuPVtdKSxlKTt2YXIgcT1HKEcucz01NCksWT0ocS5NUyxxLmNGLHEuQUspLEs9KHEuTV8scS5jWCxxLkJULHEuX1cscS5QZyksWD1xLiRqLEo9KHEuVSQscS5VNyk7bGV0IFE9MDtjb25zdCBlZT17Y2hhdE1lc3NhZ2U6XCJDaGF0IE1lc3NhZ2VcIixldmVudDpcIkV2ZW50XCIsbWVzc2FnZTpcIkVtYWlsXCIsZHJpdmU6XCJEb2N1bWVudFwiLGNvbnRhY3Q6XCJDb250YWN0XCIsdXNlcjpcIlVzZXJcIixsaXN0OlwiTGlzdFwifSx0ZT17cGRmOlwiUERGXCIsZG9jeDpcIldvcmRcIixwcHR4OlwiUG93ZXJQb2ludFwiLHhsc3g6XCJFeGNlbFwiLG9uZW5vdGU6XCJPbmVOb3RlXCJ9LG5lPXtjaGF0TWVzc2FnZTpbXCJDaGF0LlJlYWRcIixcIkNoYW5uZWxNZXNzYWdlLlJlYWQuQWxsXCJdLGxpc3Q6W1wiU2l0ZXMuUmVhZC5BbGxcIl0sZXZlbnQ6W1wiQ2FsZW5kYXJzLlJlYWRcIl0sbWVzc2FnZTpbXCJNYWlsLlJlYWRXcml0ZS5TaGFyZWRcIl0sY29udGFjdDpbXCJDb250YWN0cy5SZWFkLlNoYXJlZFwiLFwiTWFpbC5SZWFkV3JpdGUuU2hhcmVkXCJdLHVzZXI6W1wiVXNlci5SZWFkLkFsbFwiLFwiUHJlc2VuY2UuUmVhZC5BbGxcIl19LHJlPVwiTUlDUk9TT0ZUXzM2NV9TRUFSQ0hfVFlQRV9GSUxURVJcIixvZT1cIk1JQ1JPU09GVF8zNjVfU0VBUkNIX0ZJTEVfVFlQRV9GSUxURVJcIixpZT1cIk1JQ1JPU09GVF8zNjVfU0VBUkNIX0RFUEFSVE1FTlRfRklMVEVSXCIsYWU9XCJNSUNST1NPRlRfMzY1X1NFQVJDSF9KT0JfVElUTEVfRklMVEVSXCIsbGU9XCJUZWFtcyBDYWxsXCIsc2U9XCJUZWFtcyBDaGF0XCIsY2U9XCJFbWFpbFwiLHVlPShlLHQpPT57Y29uc3Qgbj1bXSxyPXtpdGVtOmUuY29udGV4dC5zZWxlY3RlZEZpbHRlcnM/LmZpbmQoKGU9PmUuaWQ9PT1yZSkpLGRvY3VtZW50VHlwZTplLmNvbnRleHQuc2VsZWN0ZWRGaWx0ZXJzPy5maW5kKChlPT5lLmlkPT09b2UpKX0sbz1be3ZhbHVlOlwiRG9jdW1lbnRcIixpc1NlbGVjdGVkOiEhci5pdGVtPy5vcHRpb25zPy5maW5kKCgoe3ZhbHVlOmV9KT0+XCJGaWxlXCI9PT1lKSk/LmlzU2VsZWN0ZWR9LHt2YWx1ZTpcIkNvbnRhY3RcIixpc1NlbGVjdGVkOiEhci5pdGVtPy5vcHRpb25zPy5maW5kKCgoe3ZhbHVlOmV9KT0+XCJDb250YWN0XCI9PT1lKSk/LmlzU2VsZWN0ZWR9LHt2YWx1ZTpcIkNoYXQgTWVzc2FnZVwiLGlzU2VsZWN0ZWQ6ISFyLml0ZW0/Lm9wdGlvbnM/LmZpbmQoKCh7dmFsdWU6ZX0pPT5cIkNoYXQgTWVzc2FnZVwiPT09ZSkpPy5pc1NlbGVjdGVkfSx7dmFsdWU6XCJFbWFpbFwiLGlzU2VsZWN0ZWQ6ISFyLml0ZW0/Lm9wdGlvbnM/LmZpbmQoKCh7dmFsdWU6ZX0pPT5cIkVtYWlsXCI9PT1lKSk/LmlzU2VsZWN0ZWR9LHt2YWx1ZTpcIkV2ZW50XCIsaXNTZWxlY3RlZDohIXIuaXRlbT8ub3B0aW9ucz8uZmluZCgoKHt2YWx1ZTplfSk9PlwiRXZlbnRcIj09PWUpKT8uaXNTZWxlY3RlZH0se3ZhbHVlOlwiTGlzdFwiLGlzU2VsZWN0ZWQ6ISFyLml0ZW0/Lm9wdGlvbnM/LmZpbmQoKCh7dmFsdWU6ZX0pPT5cIkxpc3RcIj09PWUpKT8uaXNTZWxlY3RlZH1dO3JldHVybiBuLnB1c2goe2lkOnJlLHRpdGxlOlwiVHlwZVwiLHR5cGU6JC5lbC5NdWx0aVNlbGVjdCxvcHRpb25zOm8uZmlsdGVyKChlPT50LmhhcyhlLnZhbHVlKSkpfSksXCJEb2N1bWVudFwiPT09ci5pdGVtPy5vcHRpb25zPy5maWx0ZXIoKGU9PmUuaXNTZWxlY3RlZCkpPy5bMF0udmFsdWUmJm4ucHVzaCh7aWQ6b2UsdGl0bGU6XCJGaWxlIFR5cGVcIix0eXBlOiQuZWwuTXVsdGlTZWxlY3Qsb3B0aW9uczpPYmplY3QuZW50cmllcyh0ZSkubWFwKCgoWyxlXSk9Pih7dmFsdWU6ZSxpc1NlbGVjdGVkOiEhci5kb2N1bWVudFR5cGU/Lm9wdGlvbnM/LmZpbHRlcigoZT0+ZS5pc1NlbGVjdGVkKSk/LmZpbmQoKCh7dmFsdWU6ZX0pPT5cIkZpbGVcIj09PWUpKT8uaXNTZWxlY3RlZH0pKSl9KSxufSxmZT0oZSx0KT0+e2NvbnN0IG49dC5jb250ZXh0LnNlbGVjdGVkRmlsdGVycz8uZmluZCgoZT0+ZS5pZD09PXJlKSk/Lm9wdGlvbnM7aWYoIUFycmF5LmlzQXJyYXkobil8fCFuLmZpbmQoKGU9PlwiQ29udGFjdFwiPT09ZS52YWx1ZXx8XCJVc2VyXCI9PT1lLnZhbHVlKSk/LmlzU2VsZWN0ZWQpcmV0dXJuW107Y29uc3R7ZGVwYXJ0bWVudDpyLGpvYlRpdGxlOm99PWUucmVkdWNlKCgoZSx0KT0+KHQuZGVwYXJ0bWVudCYmZS5kZXBhcnRtZW50LmFkZCh0LmRlcGFydG1lbnQpLHQuam9iVGl0bGUmJmUuam9iVGl0bGUuYWRkKHQuam9iVGl0bGUpLGUpKSx7ZGVwYXJ0bWVudDpuZXcgU2V0LGpvYlRpdGxlOm5ldyBTZXR9KSxpPXQuY29udGV4dC5zZWxlY3RlZEZpbHRlcnM/LmZpbmQoKGU9PmUuaWQ9PT1pZSkpLGE9QXJyYXkuZnJvbShyKS5tYXAoKGU9Pih7dmFsdWU6ZSxpc1NlbGVjdGVkOiEhaT8ub3B0aW9ucz8uZmluZCgoKHt2YWx1ZTp0fSk9PnQ9PT1lKSk/LmlzU2VsZWN0ZWR9KSkpLGw9dC5jb250ZXh0LnNlbGVjdGVkRmlsdGVycz8uZmluZCgoZT0+ZS5pZD09PWllKSkscz1BcnJheS5mcm9tKG8pLm1hcCgoZT0+KHt2YWx1ZTplLGlzU2VsZWN0ZWQ6ISFsPy5vcHRpb25zPy5maW5kKCgoe3ZhbHVlOnR9KT0+dD09PWUpKT8uaXNTZWxlY3RlZH0pKSk7cmV0dXJuW3tpZDppZSx0aXRsZTpcIkRlcGFydG1lbnRcIix0eXBlOiQuZWwuTXVsdGlTZWxlY3Qsb3B0aW9uczphfSx7aWQ6YWUsdGl0bGU6XCJKb2IgVGl0bGVcIix0eXBlOiQuZWwuTXVsdGlTZWxlY3Qsb3B0aW9uczpzfV19LGRlPWU9Pntjb25zdCB0PWUuY29udGV4dC5zZWxlY3RlZEZpbHRlcnM/LmZpbmQoKGU9PmUuaWQ9PT1pZSkpLG49QXJyYXkuaXNBcnJheSh0Py5vcHRpb25zKT90Lm9wdGlvbnMuZmlsdGVyKChlPT5lLmlzU2VsZWN0ZWQpKS5tYXAoKGU9PmUudmFsdWUpKTpbXSxyPWUuY29udGV4dC5zZWxlY3RlZEZpbHRlcnM/LmZpbmQoKGU9PmUuaWQ9PT1hZSkpLG89QXJyYXkuaXNBcnJheShyPy5vcHRpb25zKT9yLm9wdGlvbnMuZmlsdGVyKChlPT5lLmlzU2VsZWN0ZWQpKS5tYXAoKGU9PmUudmFsdWUpKTpbXTtyZXR1cm57ZGVwYXJ0bWVudDpuLGpvYlRpdGxlOm99fSxwZT0oZSx0KT0+e2NvbnN0e2RlcGFydG1lbnQ6bixqb2JUaXRsZTpyfT10O3JldHVybiBlLmZpbHRlcigoZT0+KCFuLmxlbmd0aHx8bi5pbmNsdWRlcyhlLmRlcGFydG1lbnQpKSYmKCFyLmxlbmd0aHx8ci5pbmNsdWRlcyhlLmpvYlRpdGxlKSkpKX0saGU9ZT0+e2NvbnN0IHQ9QXJyYXkuaXNBcnJheShlLmNvbnRleHQuc2VsZWN0ZWRGaWx0ZXJzPy5maW5kKChlPT5lLmlkPT09b2UpKT8ub3B0aW9ucyk/ZS5jb250ZXh0LnNlbGVjdGVkRmlsdGVycy5maW5kKChlPT5lLmlkPT09b2UpKT8ub3B0aW9uczpbXTtyZXR1cm57ZmlsdGVyRmlsZXM6dCYmdC5zb21lKCgoe2lzU2VsZWN0ZWQ6ZX0pPT5lKSksc2hvd1dvcmQ6dC5maW5kKCgoe3ZhbHVlOmV9KT0+XCJXb3JkXCI9PT1lKSk/LmlzU2VsZWN0ZWQsc2hvd0V4Y2VsOnQuZmluZCgoKHt2YWx1ZTplfSk9PlwiRXhjZWxcIj09PWUpKT8uaXNTZWxlY3RlZCxzaG93UG93ZXJQb2ludDp0LmZpbmQoKCh7dmFsdWU6ZX0pPT5cIlBvd2VyUG9pbnRcIj09PWUpKT8uaXNTZWxlY3RlZCxzaG93UERGOnQuZmluZCgoKHt2YWx1ZTplfSk9PlwiUERGXCI9PT1lKSk/LmlzU2VsZWN0ZWQsc2hvd09uZU5vdGU6dC5maW5kKCgoe3ZhbHVlOmV9KT0+XCJPbmVOb3RlXCI9PT1lKSk/LmlzU2VsZWN0ZWR9fSxnZT0oZSx0KT0+e2NvbnN0IG49W107cmV0dXJuIHQuc2hvd1dvcmQmJm4ucHVzaChcIi5kb2N4XCIpLHQuc2hvd0V4Y2VsJiZuLnB1c2goXCIueGxzeFwiKSx0LnNob3dQb3dlclBvaW50JiZuLnB1c2goXCIucHB0eFwiKSx0LnNob3dQREYmJm4ucHVzaChcIi5wZGZcIiksdC5zaG93T25lTm90ZSYmbi5wdXNoKFwiLm9uZVwiKSxlLmZpbHRlcigoZT0+e2lmKGUuZmlsZSl7Y29uc3QgdD1lLm5hbWUuc3Vic3RyaW5nKGUubmFtZS5sYXN0SW5kZXhPZihcIi5cIikpO3JldHVybiBuLmluY2x1ZGVzKHQpfXJldHVybiExfSkpfSx2ZT0oZT1cIlwiKT0+e3N3aXRjaChlLnNwbGl0KFwiLlwiKS5wb3AoKT8udG9Mb3dlckNhc2UoKT8/XCJcIil7Y2FzZVwiZG9jeFwiOmNhc2VcImRvY1wiOnJldHVyblwiTWljcm9zb2Z0IFdvcmRcIjtjYXNlXCJ4bHN4XCI6Y2FzZVwieGxzXCI6cmV0dXJuXCJNaWNyb3NvZnQgRXhjZWxcIjtjYXNlXCJwcHR4XCI6Y2FzZVwicHB0XCI6cmV0dXJuXCJNaWNyb3NvZnQgUG93ZXJQb2ludFwiO2Nhc2VcInBkZlwiOnJldHVyblwiUERGXCI7Y2FzZVwicG5nXCI6Y2FzZVwianBnXCI6Y2FzZVwianBlZ1wiOmNhc2VcImdpZlwiOnJldHVyblwiSW1hZ2VcIjtjYXNlXCJ0eHRcIjpyZXR1cm5cIlRleHRcIjtkZWZhdWx0OnJldHVyblwiRmlsZVwifX0sbWU9KGU9XCJcIik9Pntzd2l0Y2goZS5zcGxpdChcIi5cIikucG9wKCk/LnRvTG93ZXJDYXNlKCk/P1wiXCIpe2Nhc2VcImRvY3hcIjpjYXNlXCJkb2NcIjpyZXR1cm4oMCxULkszKShBLmRlLk1pY3Jvc29mdDM2NUFzc2V0cy5NaWNyb3NvZnQzNjVEb2N1bWVudEljb24pO2Nhc2VcInhsc3hcIjpjYXNlXCJ4bHNcIjpyZXR1cm4oMCxULkszKShBLmRlLk1pY3Jvc29mdDM2NUFzc2V0cy5NaWNyb3NvZnQzNjVFeGNlbEljb24pO2Nhc2VcInBwdHhcIjpjYXNlXCJwcHRcIjpyZXR1cm4oMCxULkszKShBLmRlLk1pY3Jvc29mdDM2NUFzc2V0cy5NaWNyb3NvZnQzNjVQb3dlcnBvaW50SWNvbik7Y2FzZVwicGRmXCI6cmV0dXJuKDAsVC5LMykoQS5kZS5NaWNyb3NvZnQzNjVBc3NldHMuUERGRmlsZUljb24pO2RlZmF1bHQ6cmV0dXJufX0sQ2U9ZT0+ZS5yZXBsYWNlKC9cXCsvZyxcIl9cIikucmVwbGFjZSgvXFwvL2csXCItXCIpO3ZhciB5ZSx3ZSxiZSx4ZSxfZSxPZSxMZSxFZSxTZSxqZSxNZSxrZSxSZSxQZSxJZSxBZSxUZSxIZSxCZSxWZSxEZSxaZT1mdW5jdGlvbihlLHQsbixyKXtpZihcImFcIj09PW4mJiFyKXRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdD9lIT09dHx8IXI6IXQuaGFzKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7cmV0dXJuXCJtXCI9PT1uP3I6XCJhXCI9PT1uP3IuY2FsbChlKTpyP3IudmFsdWU6dC5nZXQoZSl9LCRlPWZ1bmN0aW9uKGUsdCxuLHIsbyl7aWYoXCJtXCI9PT1yKXRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7aWYoXCJhXCI9PT1yJiYhbyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/ZSE9PXR8fCFvOiF0LmhhcyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7cmV0dXJuXCJhXCI9PT1yP28uY2FsbChlLG4pOm8/by52YWx1ZT1uOnQuc2V0KGUsbiksbn07Y2xhc3MgTmUgZXh0ZW5kcyBVe2NvbnN0cnVjdG9yKGUpe2NvbnN0IHQ9aih7fSx7d29ya2Zsb3dzOntzZWFyY2g6KFErPTEse2hvbWVQcm92aWRlcjp7ZGVzY3JpcHRpb246XCJNaWNyb3NvZnQgMzY1IHNlYXJjaCByZXN1bHRzIHByb3ZpZGVyXCIsaWQ6YE1TMzY1LSR7ZmluLm1lLmlkZW50aXR5LnV1aWR9LSR7UX1gLGxvZ29Vcmw6KDAsVC5LMykoQS5kZS5NaWNyb3NvZnQzNjVBc3NldHMuTWljcm9zb2Z0MzY1SWNvbiksaWNvbjooMCxULkszKShBLmRlLk1pY3Jvc29mdDM2NUFzc2V0cy5NaWNyb3NvZnQzNjVJY29uKSx0aXRsZTpcIk1pY3Jvc29mdCAzNjUgU2VhcmNoXCIsaW5wdXRQbGFjZWhvbGRlcjpcIldoYXQgd291bGQgeW91IGxpa2UgdG8gc2VhcmNoIGluIE1pY3Jvc29mdCAzNjUgdG9kYXk/XCIsZGlzcGF0Y2hGb2N1c0V2ZW50czohMH0sbWljcm9zb2Z0RW50aXR5VHlwZUNvbmZpZzp7bWVzc2FnZTohMCxjaGF0TWVzc2FnZTohMCxkcml2ZTohMCxldmVudDohMCx1c2VyOiEwLGNvbnRhY3Q6ITAsbGlzdDohMH0sdXNlVGVhbXNEZWVwTGluazohMH0pfX0sZSk7c3VwZXIodCkseWUuYWRkKHRoaXMpLHdlLnNldCh0aGlzLHZvaWQgMCksdGhpcy53b3JrZmxvd0ludGVncmF0aW9uTmFtZT1cIk1pY3Jvc29mdCAzNjVcIixiZS5zZXQodGhpcyx2b2lkIDApLHhlLnNldCh0aGlzLHZvaWQgMCksX2Uuc2V0KHRoaXMsMSksT2Uuc2V0KHRoaXMsbmV3IFNldCksTGUuc2V0KHRoaXMsbmV3IEUoMTAwKSksRWUuc2V0KHRoaXMsbmV3IFYoNmU0KSksdGhpcy5jb25uZWN0PWFzeW5jKGU9dGhpcy5jb25maWcuY29ubmVjdCk9Pntjb25zdHtjbGllbnRJZDp0LHRlbmFudElkOm4scmVkaXJlY3RVcmk6cn09ZSxvPXRoaXMuY29uZmlnLndvcmtmbG93cz8uc2VhcmNoP09iamVjdC5lbnRyaWVzKHRoaXMuY29uZmlnLndvcmtmbG93cz8uc2VhcmNoPy5taWNyb3NvZnRFbnRpdHlUeXBlQ29uZmlnPz97fSkuZmlsdGVyKCgoW2UsdF0pPT50KSkubWFwKCgoW2VdKT0+bmVbZV0pKS5maWx0ZXIoKGU9PnZvaWQgMCE9PWUpKS5mbGF0KCk6W107dGhpcy5jb25maWcuY29ubmVjdD1lLCRlKHRoaXMsd2UsYXdhaXQgWCh0LG4scixbLi4ubmV3IFNldChvKV0pLFwiZlwiKX0sU2Uuc2V0KHRoaXMsKCgpPT57aWYoIVplKHRoaXMsd2UsXCJmXCIpKXRocm93IG5ldyBFcnJvcihcIk1pY3Jvc29mdDM2NVdvcmtmbG93SW50ZWdyYXRpb24gbm90IGNvbm5lY3RlZFwiKTtyZXR1cm4gWmUodGhpcyx3ZSxcImZcIil9KSksUGUuc2V0KHRoaXMsKGFzeW5jIGU9PntpZigkZSh0aGlzLHhlLGUsXCJmXCIpLGUuZGF0YT8uaXRlbT8uaWQpe2NvbnN0IHQ9WmUodGhpcyxFZSxcImZcIikuZ2V0KGUuZGF0YS5pdGVtLmlkKTtpZih0KXJldHVybiB2b2lkIFplKHRoaXMsYmUsXCJmXCIpLnJlc3BvbmQoW3RdKX1pZihcInVzZXJcIj09PWUuZGF0YT8udHlwZSlaZSh0aGlzLEJlLFwiZlwiKS5jYWxsKHRoaXMsZSl9KSksSWUuc2V0KHRoaXMsKGFzeW5jIGU9Pnthd2FpdCBmaW4uUGxhdGZvcm0uZ2V0Q3VycmVudFN5bmMoKS5jcmVhdGVXaW5kb3coe2xheW91dDp7Y29udGVudDpbe3R5cGU6XCJzdGFja1wiLGNvbnRlbnQ6W3t0eXBlOlwiY29tcG9uZW50XCIsY29tcG9uZW50TmFtZTpcInZpZXdcIixjb21wb25lbnRTdGF0ZTp7dXJsOmV9fV19XX0sd29ya3NwYWNlUGxhdGZvcm06dm9pZCAwfSl9KSksQWUuc2V0KHRoaXMsKGFzeW5jIGU9PntpZihlLmRhdGEuaXRlbS5jaGFubmVsSWRlbnRpdHkudGVhbUlkKXtjb25zdCB0PW5ldyBVUkwoYG1zdGVhbXM6L2wvY2hhbm5lbC8ke2UuZGF0YS5pdGVtLmNoYW5uZWxJZGVudGl0eS5jaGFubmVsSWR9LyR7ZS5kYXRhLml0ZW0uaWR9YCk7cmV0dXJuITE9PT10aGlzLmNvbmZpZy53b3JrZmxvd3M/LnNlYXJjaD8udXNlVGVhbXNEZWVwTGluayYmKHQucHJvdG9jb2w9XCJodHRwczpcIiksdC5zZWFyY2hQYXJhbXMuYXBwZW5kKFwiY29udGV4dFwiLEpTT04uc3RyaW5naWZ5KHtjb250ZXh0VHlwZTpcImNoYW5uZWxcIn0pKSx2b2lkIGF3YWl0IGZpbi5TeXN0ZW0ub3BlblVybFdpdGhCcm93c2VyKHQudG9TdHJpbmcoKSl9Y29uc3QgdD1uZXcgVVJMKGBtc3RlYW1zOi9sL21lc3NhZ2UvJHtlLmRhdGEuaXRlbS5jaGF0SWR9LyR7ZS5kYXRhLml0ZW0uaWR9YCk7ITE9PT10aGlzLmNvbmZpZy53b3JrZmxvd3M/LnNlYXJjaD8udXNlVGVhbXNEZWVwTGluayYmKHQucHJvdG9jb2w9XCJodHRwczpcIiksdC5zZWFyY2hQYXJhbXMuYXBwZW5kKFwiY29udGV4dFwiLEpTT04uc3RyaW5naWZ5KHtjb250ZXh0VHlwZTpcImNoYXRcIn0pKSxhd2FpdCBmaW4uU3lzdGVtLm9wZW5VcmxXaXRoQnJvd3Nlcih0LnRvU3RyaW5nKCkpfSkpLFRlLnNldCh0aGlzLChhc3luYyBlPT57c3dpdGNoKGUuYWN0aW9uLm5hbWUpe2Nhc2UgbGU6e2NvbnN0IHQ9bmV3IEsoWmUodGhpcyxTZSxcImZcIikuY2FsbCh0aGlzKSx0aGlzLmNvbmZpZy53b3JrZmxvd3M/LnNlYXJjaD8udXNlVGVhbXNEZWVwTGluayk7WmUodGhpcyx5ZSxcIm1cIixqZSkuY2FsbCh0aGlzLCgoKT0+dC5zdGFydENhbGwoW2UuZGF0YS5pdGVtLm1haWxdKSkpO2JyZWFrfWNhc2UgY2U6e2NvbnN0IHQ9YXdhaXQgdGhpcy5leGVjdXRlQXBpUmVxdWVzdChcIi92MS4wL21lL21lc3NhZ2VzXCIsXCJQT1NUXCIse3RvUmVjaXBpZW50czpbe2VtYWlsQWRkcmVzczp7YWRkcmVzczplLmRhdGEuaXRlbS5tYWlsfX1dfSk7bGV0IG49dC5kYXRhLndlYkxpbms7Y29uc3Qgcj1uZXcgVVJMKHQuZGF0YS53ZWJMaW5rKTtpZihcIi9vd2EvXCI9PT1yLnBhdGhuYW1lKXtjb25zdCBlPXIuc2VhcmNoLnNsaWNlKDEpLnNwbGl0KFwiJlwiKS5yZWR1Y2UoKChlLHQpPT57Y29uc3RbbixyXT10LnNwbGl0KFwiPVwiKTtyZXR1cm4gZVtuXT1yLGV9KSx7fSk7aWYoZS5JdGVtSUQpe2NvbnN0IHQ9ZS5JdGVtSUQ7bj1gJHtyLm9yaWdpbn0vbWFpbC9kZWVwbGluay9jb21wb3NlLyR7dH0/SXRlbUlEPSR7dH0mZXh2c3VybD0xYH19YXdhaXQgZmluLlBsYXRmb3JtLmdldEN1cnJlbnRTeW5jKCkuY3JlYXRlVmlldyh7dXJsOm59KTticmVha31jYXNlIHNlOntjb25zdCB0PVplKHRoaXMsU2UsXCJmXCIpLmNhbGwodGhpcyksbj1uZXcgSyh0LHRoaXMuY29uZmlnLndvcmtmbG93cz8uc2VhcmNoPy51c2VUZWFtc0RlZXBMaW5rKTtaZSh0aGlzLHllLFwibVwiLGplKS5jYWxsKHRoaXMsKCgpPT5uLnN0YXJ0Q2hhdCh7ZW1haWxBZGRyZXNzZXM6W3QuY3VycmVudFVzZXIubWFpbCxlLmRhdGEuaXRlbS5tYWlsXX0pKSk7YnJlYWt9ZGVmYXVsdDpjb25zb2xlLndhcm4oXCJVbmhhbmRsZWQgdXNlciBhY3Rpb24gZm9yIHJlc3VsdDpcIixlLGBVbmtub3duIGFjdGlvbiBcIiR7ZS5hY3Rpb24ubmFtZX1cImApfX0pKSxIZS5zZXQodGhpcywoYXN5bmMgZT0+e3N3aXRjaChlLmRhdGEudHlwZSl7Y2FzZVwiZHJpdmVJdGVtXCI6WmUodGhpcyxJZSxcImZcIikuY2FsbCh0aGlzLGUuZGF0YS5pdGVtLndlYlVybCk7YnJlYWs7Y2FzZVwiZXZlbnRcIjp7Y29uc3QgdD1lLmRhdGEuaXRlbSxuPWF3YWl0IHRoaXMuZXhlY3V0ZUFwaVJlcXVlc3QoYC92MS4wL21lL2V2ZW50cy8ke3QuaWR9YCk7WmUodGhpcyxJZSxcImZcIikuY2FsbCh0aGlzLG4uZGF0YS53ZWJMaW5rKTticmVha31jYXNlXCJjaGF0TWVzc2FnZVwiOlplKHRoaXMsQWUsXCJmXCIpLmNhbGwodGhpcyxlKTticmVhaztjYXNlXCJtZXNzYWdlXCI6WmUodGhpcyxJZSxcImZcIikuY2FsbCh0aGlzLGUuZGF0YS5pdGVtLndlYkxpbmspO2JyZWFrO2Nhc2VcImxpc3RcIjp7Y29uc3QgdD1lLmRhdGEuaXRlbSxuPWF3YWl0IHRoaXMuZXhlY3V0ZUFwaVJlcXVlc3QoYC92MS4wL3NpdGVzLyR7dC5wYXJlbnRSZWZlcmVuY2U/LnNpdGVJZH0vbGlzdHMvJHt0LmlkfWApO1plKHRoaXMsSWUsXCJmXCIpLmNhbGwodGhpcyxuLmRhdGEud2ViVXJsKTticmVha31jYXNlXCJ1c2VyXCI6WmUodGhpcyxUZSxcImZcIikuY2FsbCh0aGlzLGUpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKFwiVW5oYW5kbGVkIHVzZXIgYWN0aW9uIGZvciByZXN1bHQ6XCIsZSxgVW5rbm93biByZXN1bHQgdHlwZSBcIiR7ZS5kYXRhLnR5cGV9XCJgKX19KSksQmUuc2V0KHRoaXMsKGFzeW5jIGU9PntsZXQgdCxuO2NvbnN0IHI9W10sbz1lLmRhdGEuaXRlbTtaZSh0aGlzLExlLFwiZlwiKS5oYXMoby5pZCk/dD1aZSh0aGlzLExlLFwiZlwiKS5nZXQoby5pZCk6ci5wdXNoKHtpZDpcImNvbnRhY3RQaG90b1wiLG1ldGhvZDpcIkdFVFwiLHVybDpgL3VzZXJzLyR7ZS5kYXRhLml0ZW0uaWR9L3Bob3RvLyR2YWx1ZWAsaGVhZGVyczp7Q29uc2lzdGVuY3lMZXZlbDpcImV2ZW50dWFsXCJ9fSksci5wdXNoKHtpZDpcInByZXNlbmNlXCIsbWV0aG9kOlwiR0VUXCIsdXJsOmAvdXNlcnMvJHtlLmRhdGEuaXRlbS5pZH0vcHJlc2VuY2VgfSk7dHJ5e2NvbnN0IGU9YXdhaXQgWmUodGhpcyx5ZSxcIm1cIixNZSkuY2FsbCh0aGlzLHIpLGE9ZS5kYXRhPy5yZXNwb25zZXMuZmluZCgoZT0+XCJjb250YWN0UGhvdG9cIj09PWUuaWQpKTthJiYyMDAhPT1hLnN0YXR1cyYmY29uc29sZS53YXJuKFwiRXJyb3IgZmV0Y2hpbmcgdXNlciBwaG90b1wiLGEpLGE/LmJvZHkmJjIwMD09PWE/LnN0YXR1cyYmKHQ9YGRhdGE6aW1hZ2UvanBlZztiYXNlNjQsJHthLmJvZHl9YCxaZSh0aGlzLExlLFwiZlwiKS5wdXQoby5pZCx0KSk7Y29uc3QgbD1lLmRhdGE/LnJlc3BvbnNlcy5maW5kKChlPT5cInByZXNlbmNlXCI9PT1lLmlkKSk7MjAwIT09bC5zdGF0dXMmJmNvbnNvbGUud2FybihcIkVycm9yIGZldGNoaW5nIHVzZXIgcHJlc2VuY2VcIixsKSxsPy5ib2R5JiYyMDA9PT1sLnN0YXR1cyYmKGk9bC5ib2R5LG49e2F2YWlsYWJsZTpcImF2YWlsYWJsZVwiLGF2YWlsYWJsZWlkbGU6XCJhdmFpbGFibGVcIixhd2F5OlwiYXdheVwiLGJlcmlnaHRiYWNrOlwiYXdheVwiLGJ1c3k6XCJidXN5XCIsYnVzeWlkbGU6XCJidXN5XCIsZG9ub3RkaXN0dXJiOlwiZG8tbm90LWRpc3R1cmJcIixvZmZsaW5lOlwib2ZmbGluZVwiLHByZXNlbmNldW5rbm93bjpcIm9mZmxpbmVcIn1baS5hdmFpbGFiaWxpdHk/LnRvTG93ZXJDYXNlKCldKX1jYXRjaChlKXtjb25zb2xlLmVycm9yKFwiRXJyb3IgZmV0Y2hpbmcgdXNlciBkYXRhXCIsZSl9dmFyIGk7Y29uc3QgYT1bW1wiRGVwYXJ0bWVudFwiLG8uZGVwYXJ0bWVudHx8XCJOL0FcIl0sW1wiRW1haWxcIixvLm1haWx8fFwiTi9BXCJdLFtcIldvcmsgUGhvbmVcIixvLmJ1c2luZXNzUGhvbmVzPy5bMF18fFwiTi9BXCJdLFtcIk1vYmlsZVwiLG8ubW9iaWxlUGhvbmV8fFwiTi9BXCJdLFtcIkxvY2F0aW9uXCIsby5vZmZpY2VMb2NhdGlvbnx8XCJOL0FcIl1dLGw9ey4uLmUsdGVtcGxhdGU6JC55Vy5Db250YWN0LHRlbXBsYXRlQ29udGVudDp7bmFtZTplLmRhdGEuaXRlbS5kaXNwbGF5TmFtZSx0aXRsZTplLmRhdGEuaXRlbS5qb2JUaXRsZSxkZXRhaWxzOlthXSxwaG90b1VybDp0LG9ubGluZVN0YXR1czpuLGJ1dHRvbnM6W3t0eXBlOlwiYnV0dG9uXCIsaWNvbjp7bGlnaHQ6KDAsVC5LMykoQS5kZS5DYWxsSWNvbkxpZ2h0KSxkYXJrOigwLFQuSzMpKEEuZGUuQ2FsbEljb25EYXJrKX0sdG9vbHRpcDpcIlRlYW1zIENhbGxcIixhY3Rpb246bGV9LHt0eXBlOlwiYnV0dG9uXCIsaWNvbjp7bGlnaHQ6KDAsVC5LMykoQS5kZS5DaGF0SWNvbkxpZ2h0KSxkYXJrOigwLFQuSzMpKEEuZGUuQ2hhdEljb25EYXJrKX0sdG9vbHRpcDpcIkNoYXRcIixhY3Rpb246c2V9LHt0eXBlOlwiYnV0dG9uXCIsaWNvbjp7bGlnaHQ6KDAsVC5LMykoQS5kZS5NZXNzYWdlSWNvbkxpZ2h0KSxkYXJrOigwLFQuSzMpKEEuZGUuTWVzc2FnZUljb25EYXJrKX0sdG9vbHRpcDpcIkUtbWFpbFwiLGFjdGlvbjpjZX1dfX07WmUodGhpcyxFZSxcImZcIikucHV0KGUuZGF0YS5pdGVtLmlkLGwpLFplKHRoaXMsYmUsXCJmXCIpLnJlc3BvbmQoW2xdKX0pKSxWZS5zZXQodGhpcywoYXN5bmMoZSx0KT0+e2lmKFplKHRoaXMsYmUsXCJmXCIpJiZaZSh0aGlzLGJlLFwiZlwiKS5jbG9zZSgpLCRlKHRoaXMsYmUsdCxcImZcIiksWmUodGhpcyxiZSxcImZcIikub3BlbigpLGUucXVlcnkubGVuZ3RoPFplKHRoaXMsX2UsXCJmXCIpKXJldHVybntyZXN1bHRzOltdfTtjb25zdCBuPWVuY29kZVVSSUNvbXBvbmVudChlLnF1ZXJ5KSxyPVtdLG89KChlLHQpPT57Y29uc3Qgbj1BcnJheS5pc0FycmF5KGUuY29udGV4dC5zZWxlY3RlZEZpbHRlcnM/LmZpbmQoKGU9PmUuaWQ9PT1yZSkpPy5vcHRpb25zKT9lLmNvbnRleHQuc2VsZWN0ZWRGaWx0ZXJzLmZpbmQoKGU9PmUuaWQ9PT1yZSkpPy5vcHRpb25zOltdLHI9bi5ldmVyeSgoKHtpc1NlbGVjdGVkOmV9KT0+IWUpKTtyZXR1cm57c2hvd0RvY3VtZW50czp0LmhhcyhcIkRvY3VtZW50XCIpJiYocnx8ISFuLmZpbmQoKCh7dmFsdWU6ZX0pPT5cIkRvY3VtZW50XCI9PT1lKSk/LmlzU2VsZWN0ZWQpLHNob3dDb250YWN0czp0LmhhcyhcIkNvbnRhY3RcIikmJihyfHwhIW4uZmluZCgoKHt2YWx1ZTplfSk9PlwiQ29udGFjdFwiPT09ZSkpPy5pc1NlbGVjdGVkKSxzaG93Q2hhdE1lc3NhZ2VzOnQuaGFzKFwiQ2hhdCBNZXNzYWdlXCIpJiYocnx8ISFuLmZpbmQoKCh7dmFsdWU6ZX0pPT5cIkNoYXQgTWVzc2FnZVwiPT09ZSkpPy5pc1NlbGVjdGVkKSxzaG93TWVzc2FnZXM6dC5oYXMoXCJFbWFpbFwiKSYmKHJ8fCEhbi5maW5kKCgoe3ZhbHVlOmV9KT0+XCJFbWFpbFwiPT09ZSkpPy5pc1NlbGVjdGVkKSxzaG93RXZlbnRzOnQuaGFzKFwiRXZlbnRcIikmJihyfHwhIW4uZmluZCgoKHt2YWx1ZTplfSk9PlwiRXZlbnRcIj09PWUpKT8uaXNTZWxlY3RlZCksc2hvd0xpc3RzOnQuaGFzKFwiTGlzdFwiKSYmKHJ8fCEhbi5maW5kKCgoe3ZhbHVlOmV9KT0+XCJMaXN0XCI9PT1lKSk/LmlzU2VsZWN0ZWQpfX0pKGUsWmUodGhpcyxPZSxcImZcIikpO2lmKG8uc2hvd0RvY3VtZW50cyl7Y29uc3QgZT1gJyR7bn0nYDtyLnB1c2goe2lkOlwiZHJpdmVJdGVtXCIsbWV0aG9kOlwiR0VUXCIsdXJsOmAvbWUvZHJpdmUvcm9vdC9zZWFyY2gocT0ke2VuY29kZVVSSUNvbXBvbmVudChlKX0pYCxoZWFkZXJzOntDb25zaXN0ZW5jeUxldmVsOlwiZXZlbnR1YWxcIn19KX1pZihvLnNob3dFdmVudHMmJnIucHVzaCh7aWQ6XCJldmVudFwiLHVybDpcIi9zZWFyY2gvcXVlcnlcIixtZXRob2Q6XCJQT1NUXCIsYm9keTp7cmVxdWVzdHM6W3tlbnRpdHlUeXBlczpbXCJldmVudFwiXSxxdWVyeTp7cXVlcnlTdHJpbmc6ZS5xdWVyeX0sZnJvbTowLHNpemU6MTB9XX0saGVhZGVyczp7XCJDb250ZW50LVR5cGVcIjpcImFwcGxpY2F0aW9uL2pzb25cIn19KSxvLnNob3dDb250YWN0cyl7Y29uc3QgdD1gXCIke2UucXVlcnl9XCJgO3IucHVzaCh7aWQ6XCJjb250YWN0XCIsbWV0aG9kOlwiR0VUXCIsdXJsOmAvbWUvY29udGFjdHM/JHNlYXJjaD0ke2VuY29kZVVSSUNvbXBvbmVudCh0KX0mJHRvcD0xMGB9KTtjb25zdCBuPVtcImRpc3BsYXlOYW1lXCIsXCJnaXZlbk5hbWVcIixcInN1cm5hbWVcIl0ubWFwKCh0PT5gXCIke3R9OiR7ZS5xdWVyeX1cImApKS5qb2luKFwiIE9SIFwiKTtyLnB1c2goe2lkOlwidXNlclwiLG1ldGhvZDpcIkdFVFwiLHVybDpgL3VzZXJzPyRzZWFyY2g9JHtlbmNvZGVVUklDb21wb25lbnQobil9JiR0b3A9MTAmJHNlbGVjdD1pZCxkaXNwbGF5TmFtZSxkZXBhcnRtZW50LG1haWwsYnVzaW5lc3NQaG9uZXMsbW9iaWxlUGhvbmUsb2ZmaWNlTG9jYXRpb24sam9iVGl0bGVgLGhlYWRlcnM6e0NvbnNpc3RlbmN5TGV2ZWw6XCJldmVudHVhbFwifX0pfWlmKG8uc2hvd01lc3NhZ2VzJiZyLnB1c2goe2lkOlwibWVzc2FnZVwiLG1ldGhvZDpcIkdFVFwiLHVybDpgL21lL21lc3NhZ2VzPyRzZWxlY3Q9c2VuZGVyLHN1YmplY3QsYm9keVByZXZpZXcscmVjZWl2ZWREYXRlVGltZSx3ZWJMaW5rJiRzZWFyY2g9JHtlbmNvZGVVUklDb21wb25lbnQoYFwiJHtlLnF1ZXJ5fVwiYCl9JiR0b3A9MTBgfSksby5zaG93Q2hhdE1lc3NhZ2VzJiZyLnB1c2goe2lkOlwiY2hhdE1lc3NhZ2VcIix1cmw6XCIvc2VhcmNoL3F1ZXJ5XCIsbWV0aG9kOlwiUE9TVFwiLGJvZHk6e3JlcXVlc3RzOlt7ZW50aXR5VHlwZXM6W1wiY2hhdE1lc3NhZ2VcIl0scXVlcnk6e3F1ZXJ5U3RyaW5nOmUucXVlcnl9LGZyb206MCxzaXplOjEwfV19LGhlYWRlcnM6e1wiQ29udGVudC1UeXBlXCI6XCJhcHBsaWNhdGlvbi9qc29uXCJ9fSksby5zaG93TGlzdHMmJnIucHVzaCh7aWQ6XCJsaXN0XCIsdXJsOlwiL3NlYXJjaC9xdWVyeVwiLG1ldGhvZDpcIlBPU1RcIixib2R5OntyZXF1ZXN0czpbe2VudGl0eVR5cGVzOltcImxpc3RcIl0scXVlcnk6e3F1ZXJ5U3RyaW5nOmUucXVlcnl9LGZyb206MCxzaXplOjEwfV19LGhlYWRlcnM6e1wiQ29udGVudC1UeXBlXCI6XCJhcHBsaWNhdGlvbi9qc29uXCJ9fSksMD09PXIubGVuZ3RoKXJldHVybntyZXN1bHRzOltdfTtjb25zdHtyZXN1bHRzOmksZmlsdGVyczphfT1hd2FpdCBaZSh0aGlzLHllLFwibVwiLGtlKS5jYWxsKHRoaXMscixlKTtyZXR1cm4gaS5maW5kKChlPT5lLmtleT09PVplKHRoaXMseGUsXCJmXCIpPy5rZXkpKT8udGVtcGxhdGU9PT0kLnlXLkxvYWRpbmcmJlplKHRoaXMsUGUsXCJmXCIpLmNhbGwodGhpcyxaZSh0aGlzLHhlLFwiZlwiKSkse3Jlc3VsdHM6aSxjb250ZXh0OntmaWx0ZXJzOmF9fX0pKSxEZS5zZXQodGhpcywoYXN5bmMgZT0+e3N3aXRjaChlLmFjdGlvbi50cmlnZ2VyKXtjYXNlIEdlLnAuRm9jdXNDaGFuZ2U6WmUodGhpcyxQZSxcImZcIikuY2FsbCh0aGlzLGUpO2JyZWFrO2Nhc2UgR2UucC5Vc2VyQWN0aW9uOlplKHRoaXMsSGUsXCJmXCIpLmNhbGwodGhpcyxlKTticmVhaztjYXNlIEdlLnAuUmVsb2FkOmJyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKGBVbmtub3duIGFjdGlvbiB0cmlnZ2VyOiAke2UuYWN0aW9uLnRyaWdnZXJ9YCl9fSkpLHRoaXMuaW5pdGlhbGl6ZVdvcmtmbG93PWFzeW5jIGU9PntpZihcInNlYXJjaFwiIT09ZSl0aHJvdyBuZXcgRXJyb3IoYEF0dGVtcHRlZCB0byBpbml0aWFsaXplIHVua25vd24gd29ya2Zsb3c6ICR7ZX1gKTthd2FpdCBfLnJlZ2lzdGVyKHsuLi50aGlzLmNvbmZpZy53b3JrZmxvd3Muc2VhcmNoLmhvbWVQcm92aWRlcixvblVzZXJJbnB1dDpaZSh0aGlzLFZlLFwiZlwiKSxvblJlc3VsdERpc3BhdGNoOlplKHRoaXMsRGUsXCJmXCIpfSksSigpLGF3YWl0IHRoaXMuY29ubmVjdCgpLHN1cGVyLmluaXRpYWxpemVXb3JrZmxvdyhlKX0sT2JqZWN0LmVudHJpZXModC53b3JrZmxvd3M/LnNlYXJjaD8ubWljcm9zb2Z0RW50aXR5VHlwZUNvbmZpZ3x8e30pLmZpbHRlcigoKFtlLHRdKT0+dCkpLmZvckVhY2goKChbZV0pPT57WmUodGhpcyxPZSxcImZcIikuYWRkKGVlW2VdKX0pKX1hc3luYyBleGVjdXRlQXBpUmVxdWVzdCguLi5lKXtyZXR1cm4gWmUodGhpcyx5ZSxcIm1cIixqZSkuY2FsbCh0aGlzLCgoKT0+WmUodGhpcyxTZSxcImZcIikuY2FsbCh0aGlzKS5leGVjdXRlQXBpUmVxdWVzdCguLi5lKSkpfX13ZT1uZXcgV2Vha01hcCxiZT1uZXcgV2Vha01hcCx4ZT1uZXcgV2Vha01hcCxfZT1uZXcgV2Vha01hcCxPZT1uZXcgV2Vha01hcCxMZT1uZXcgV2Vha01hcCxFZT1uZXcgV2Vha01hcCxTZT1uZXcgV2Vha01hcCxQZT1uZXcgV2Vha01hcCxJZT1uZXcgV2Vha01hcCxBZT1uZXcgV2Vha01hcCxUZT1uZXcgV2Vha01hcCxIZT1uZXcgV2Vha01hcCxCZT1uZXcgV2Vha01hcCxWZT1uZXcgV2Vha01hcCxEZT1uZXcgV2Vha01hcCx5ZT1uZXcgV2Vha1NldCxqZT1hc3luYyBmdW5jdGlvbihlKXt0cnl7cmV0dXJuIGF3YWl0IGUoKX1jYXRjaCh0KXtpZih0IGluc3RhbmNlb2YgWSlyZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0KCksZSgpO3Rocm93IHR9fSxNZT1hc3luYyBmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5leGVjdXRlQXBpUmVxdWVzdChcIi92MS4wLyRiYXRjaFwiLFwiUE9TVFwiLHtyZXF1ZXN0czplfSl9LGtlPWFzeW5jIGZ1bmN0aW9uKGUsdCl7dHJ5e2NvbnN0IG49YXdhaXQgWmUodGhpcyx5ZSxcIm1cIixNZSkuY2FsbCh0aGlzLGUpLHI9Wy4uLnVlKHQsWmUodGhpcyxPZSxcImZcIikpLC4uLmZlKG4uZGF0YS5yZXNwb25zZXMuZmluZCgoZT0+XCJ1c2VyXCI9PT1lLmlkKSk/LmJvZHk/LnZhbHVlfHxbXSx0KV07cmV0dXJue2ZpbHRlcnM6cixyZXN1bHRzOlplKHRoaXMseWUsXCJtXCIsUmUpLmNhbGwodGhpcyxuLHQpfX1jYXRjaChlKXtyZXR1cm4gY29uc29sZS53YXJuKFwiRmFpbGVkIHRvIGV4ZWN1dGUgQmF0Y2ggQVBJIHJlcXVlc3Q6IFwiLGUpLHtmaWx0ZXJzOltdLHJlc3VsdHM6W3trZXk6KDAsWi5IKSgpLHRpdGxlOlwiRXJyb3IgRmV0Y2hpbmcgU2VhcmNoIFJlc3VsdHNcIixkZXNjcmlwdGlvbjpcIlwiLGFjdGlvbnM6W10sdGVtcGxhdGU6JC55Vy5FcnJvcix0ZW1wbGF0ZUNvbnRlbnQ6YEZhaWxlZCB0byBleGVjdXRlIEJhdGNoIEFQSSByZXF1ZXN0OiAke0pTT04uc3RyaW5naWZ5KGUpfWB9XX19fSxSZT1mdW5jdGlvbihlLHQpe2xldCBuPVtdO2Zvcihjb25zdCByIG9mIGUuZGF0YS5yZXNwb25zZXMpaWYoMjAwPT09ci5zdGF0dXMpc3dpdGNoKHIuaWQpe2Nhc2VcImRyaXZlSXRlbVwiOntjb25zdCBlPWhlKHQpLG89ZS5maWx0ZXJGaWxlcz9nZShyLmJvZHkudmFsdWUsZSk6ci5ib2R5LnZhbHVlO24ucHVzaCguLi4ob3x8W10pLm1hcCgoZT0+KHtrZXk6ZS5pZD8/KDAsWi5IKSgpLHRpdGxlOmUubmFtZT8/XCJcIixkZXNjcmlwdGlvbjplLmZpbGU/Lm1pbWVUeXBlPz9cIlwiLGxhYmVsOnZlKGUubmFtZSksaWNvbjptZShlLm5hbWUpLGRhdGE6e3R5cGU6XCJkcml2ZUl0ZW1cIixpdGVtOmV9LGFjdGlvbnM6W3tuYW1lOlwiTGF1bmNoXCJ9XSx0ZW1wbGF0ZTokLnlXLlBsYWluLHRlbXBsYXRlQ29udGVudDp2b2lkIDB9KSkpKTticmVha31jYXNlXCJldmVudFwiOm4ucHVzaCguLi5yLmJvZHk/LnZhbHVlPy5bMF0/LmhpdHNDb250YWluZXJzPy5bMF0/LmhpdHM/LmZpbHRlcigoZT0+ZS5yZXNvdXJjZS5zdWJqZWN0KSkubWFwKChlPT57Y29uc3QgdD1lLnJlc291cmNlLG49Q2UoZS5oaXRJZCk7cmV0dXJue2tleTpuLHRpdGxlOnQuc3ViamVjdD8/XCJcIixsYWJlbDpcIkNhbGVuZGFyIEV2ZW50XCIsaWNvbjooMCxULkszKShBLmRlLk1pY3Jvc29mdDM2NUFzc2V0cy5NaWNyb3NvZnQzNjVPdXRsb29rSWNvbiksYWN0aW9uczpbe25hbWU6XCJMYXVuY2hcIn1dLGRhdGE6e3R5cGU6XCJldmVudFwiLGl0ZW06ey4uLnQsaWQ6bn19LHRlbXBsYXRlOiQueVcuUGxhaW4sdGVtcGxhdGVDb250ZW50OnZvaWQgMH19KSl8fFtdKTticmVhaztjYXNlXCJjb250YWN0XCI6e2NvbnN0IGU9ZGUodCksbz1wZShyLmJvZHkudmFsdWV8fFtdLGUpO24ucHVzaCguLi4ob3x8W10pLm1hcCgoZT0+KHtrZXk6ZS5pZD8/KDAsWi5IKSgpLHRpdGxlOmUuZGlzcGxheU5hbWU/P1wiXCIsbGFiZWw6XCJPdXRsb29rIGNvbnRhY3RcIixpY29uOigwLFQuSzMpKEEuZGUuTWljcm9zb2Z0MzY1QXNzZXRzLk1pY3Jvc29mdDM2NU91dGxvb2tJY29uKSxhY3Rpb25zOltdLGRhdGE6e3R5cGU6XCJjb250YWN0XCIsaXRlbTplfSx0ZW1wbGF0ZTokLnlXLlBsYWluLHRlbXBsYXRlQ29udGVudDp2b2lkIDB9KSkpKTticmVha31jYXNlXCJ1c2VyXCI6e2NvbnN0IGU9ZGUodCksbz1wZShyLmJvZHkudmFsdWV8fFtdLGUpO24ucHVzaCguLi4ob3x8W10pLm1hcCgoZT0+KHtrZXk6ZS5pZD8/KDAsWi5IKSgpLHRpdGxlOmUuZGlzcGxheU5hbWU/P1wiXCIsbGFiZWw6XCJUZWFtcyBjb250YWN0XCIsaWNvbjooMCxULkszKShBLmRlLk1pY3Jvc29mdDM2NUFzc2V0cy5NaWNyb3NvZnQzNjVUZWFtc0ljb24pLGFjdGlvbnM6W10sZGF0YTp7dHlwZTpcInVzZXJcIixpdGVtOmV9LHRlbXBsYXRlOiQueVcuTG9hZGluZyx0ZW1wbGF0ZUNvbnRlbnQ6dm9pZCAwfSkpKSk7YnJlYWt9Y2FzZVwibWVzc2FnZVwiOm4ucHVzaCguLi4oci5ib2R5LnZhbHVlfHxbXSkubWFwKChlPT4oe2tleTplLmlkPz8oMCxaLkgpKCksdGl0bGU6YCR7ZS5zdWJqZWN0Pz9cIlVudGl0bGVkIE1lc3NhZ2VcIn0ke2UuaXNEcmFmdD9cIiAoRHJhZnQpXCI6XCJcIn1gLGxhYmVsOlwiRW1haWxcIixpY29uOigwLFQuSzMpKEEuZGUuTWljcm9zb2Z0MzY1QXNzZXRzLk1pY3Jvc29mdDM2NU91dGxvb2tJY29uKSxhY3Rpb25zOltdLGRhdGE6e3R5cGU6XCJtZXNzYWdlXCIsaXRlbTplfSx0ZW1wbGF0ZTokLnlXLlBsYWluLHRlbXBsYXRlQ29udGVudDp2b2lkIDB9KSkpKTticmVhaztjYXNlXCJjaGF0TWVzc2FnZVwiOm4ucHVzaCguLi5yLmJvZHk/LnZhbHVlPy5bMF0/LmhpdHNDb250YWluZXJzPy5bMF0/LmhpdHM/Lm1hcCgoZT0+e2NvbnN0IHQ9ZS5yZXNvdXJjZTtyZXR1cm57a2V5OnQuaWQ/PygwLFouSCkoKSx0aXRsZTplLnN1bW1hcnk/P1wiVW50aXRsZWQgTWVzc2FnZVwiLGxhYmVsOlwiQ2hhdFwiLGljb246KDAsVC5LMykoQS5kZS5NaWNyb3NvZnQzNjVBc3NldHMuTWljcm9zb2Z0MzY1VGVhbXNJY29uKSxhY3Rpb25zOltdLGRhdGE6e3R5cGU6XCJjaGF0TWVzc2FnZVwiLGl0ZW06dH0sdGVtcGxhdGU6JC55Vy5QbGFpbix0ZW1wbGF0ZUNvbnRlbnQ6dm9pZCAwfX0pKXx8W10pO2JyZWFrO2Nhc2VcImxpc3RcIjpuLnB1c2goLi4uci5ib2R5Py52YWx1ZT8uWzBdPy5oaXRzQ29udGFpbmVycz8uWzBdPy5oaXRzPy5tYXAoKGU9Pntjb25zdCB0PWUucmVzb3VyY2Usbj1DZShlLmhpdElkKTtyZXR1cm57a2V5Om4sdGl0bGU6dC5kaXNwbGF5TmFtZT8/XCJVbnRpdGxlZCBMaXN0XCIsbGFiZWw6XCJMaXN0XCIsYWN0aW9uczpbe25hbWU6XCJMYXVuY2hcIn1dLGRhdGE6e3R5cGU6XCJsaXN0XCIsaXRlbTp7Li4udCxpZDpufX0sdGVtcGxhdGU6JC55Vy5QbGFpbix0ZW1wbGF0ZUNvbnRlbnQ6dm9pZCAwfX0pKXx8W10pO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKGBVbmtub3duIGJhdGNoIHJlc3BvbnNlIGlkOiAke3IuaWR9YCxyLmJvZHkpfWVsc2UgY29uc29sZS53YXJuKFwiQmF0Y2ggQVBJIHJlcXVlc3QgZmFpbGVkOiBcIixyKTtyZXR1cm4gbj1uLm1hcCgoZT0+e2lmKCFlLmRhdGE/Lml0ZW0/LmlkKXJldHVybiBlO2NvbnN0IHQ9WmUodGhpcyxFZSxcImZcIikuZ2V0KGUuZGF0YS5pdGVtLmlkKTtyZXR1cm4gdD97Li4uZSx0ZW1wbGF0ZTp0LnRlbXBsYXRlLHRlbXBsYXRlQ29udGVudDp0LnRlbXBsYXRlQ29udGVudH06ZX0pKSxuLnNvcnQoKChlLHQpPT5lLnRpdGxlPnQudGl0bGU/MTotMSkpfTt2YXIgRmU9bigzNDIwKTtjb25zdCBVZT0oKT0+RmUuaGQoKSxXZT0oKT0+KGFzeW5jKCk9Pihhd2FpdCgwLGMuRG0pKCkpLmRpc3BhdGNoKFwiZ2V0LWxlZ2FjeS13b3Jrc3BhY2VzXCIsdm9pZCAwKSkoKTt2YXIgemU9bigyNTI4KSxHZT1uKDEyMjIpLHFlPW4oMjEwOSksWWU9big2MTE0KX0pKCksbW9kdWxlLmV4cG9ydHM9cn0pKCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCIndXNlIHN0cmljdCdcblxuZXhwb3J0cy5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuZXhwb3J0cy50b0J5dGVBcnJheSA9IHRvQnl0ZUFycmF5XG5leHBvcnRzLmZyb21CeXRlQXJyYXkgPSBmcm9tQnl0ZUFycmF5XG5cbnZhciBsb29rdXAgPSBbXVxudmFyIHJldkxvb2t1cCA9IFtdXG52YXIgQXJyID0gdHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnID8gVWludDhBcnJheSA6IEFycmF5XG5cbnZhciBjb2RlID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nXG5mb3IgKHZhciBpID0gMCwgbGVuID0gY29kZS5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICBsb29rdXBbaV0gPSBjb2RlW2ldXG4gIHJldkxvb2t1cFtjb2RlLmNoYXJDb2RlQXQoaSldID0gaVxufVxuXG4vLyBTdXBwb3J0IGRlY29kaW5nIFVSTC1zYWZlIGJhc2U2NCBzdHJpbmdzLCBhcyBOb2RlLmpzIGRvZXMuXG4vLyBTZWU6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Jhc2U2NCNVUkxfYXBwbGljYXRpb25zXG5yZXZMb29rdXBbJy0nLmNoYXJDb2RlQXQoMCldID0gNjJcbnJldkxvb2t1cFsnXycuY2hhckNvZGVBdCgwKV0gPSA2M1xuXG5mdW5jdGlvbiBnZXRMZW5zIChiNjQpIHtcbiAgdmFyIGxlbiA9IGI2NC5sZW5ndGhcblxuICBpZiAobGVuICUgNCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQnKVxuICB9XG5cbiAgLy8gVHJpbSBvZmYgZXh0cmEgYnl0ZXMgYWZ0ZXIgcGxhY2Vob2xkZXIgYnl0ZXMgYXJlIGZvdW5kXG4gIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2JlYXRnYW1taXQvYmFzZTY0LWpzL2lzc3Vlcy80MlxuICB2YXIgdmFsaWRMZW4gPSBiNjQuaW5kZXhPZignPScpXG4gIGlmICh2YWxpZExlbiA9PT0gLTEpIHZhbGlkTGVuID0gbGVuXG5cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IHZhbGlkTGVuID09PSBsZW5cbiAgICA/IDBcbiAgICA6IDQgLSAodmFsaWRMZW4gJSA0KVxuXG4gIHJldHVybiBbdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbl1cbn1cblxuLy8gYmFzZTY0IGlzIDQvMyArIHVwIHRvIHR3byBjaGFyYWN0ZXJzIG9mIHRoZSBvcmlnaW5hbCBkYXRhXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChiNjQpIHtcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gX2J5dGVMZW5ndGggKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikge1xuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gdG9CeXRlQXJyYXkgKGI2NCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cblxuICB2YXIgYXJyID0gbmV3IEFycihfYnl0ZUxlbmd0aChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pKVxuXG4gIHZhciBjdXJCeXRlID0gMFxuXG4gIC8vIGlmIHRoZXJlIGFyZSBwbGFjZWhvbGRlcnMsIG9ubHkgZ2V0IHVwIHRvIHRoZSBsYXN0IGNvbXBsZXRlIDQgY2hhcnNcbiAgdmFyIGxlbiA9IHBsYWNlSG9sZGVyc0xlbiA+IDBcbiAgICA/IHZhbGlkTGVuIC0gNFxuICAgIDogdmFsaWRMZW5cblxuICB2YXIgaVxuICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTgpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCAxMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildIDw8IDYpIHxcbiAgICAgIHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMyldXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDE2KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAyKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA+PiA0KVxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMSkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxMCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDQpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA+PiAyKVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBhcnJcbn1cblxuZnVuY3Rpb24gdHJpcGxldFRvQmFzZTY0IChudW0pIHtcbiAgcmV0dXJuIGxvb2t1cFtudW0gPj4gMTggJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiAxMiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDYgJiAweDNGXSArXG4gICAgbG9va3VwW251bSAmIDB4M0ZdXG59XG5cbmZ1bmN0aW9uIGVuY29kZUNodW5rICh1aW50OCwgc3RhcnQsIGVuZCkge1xuICB2YXIgdG1wXG4gIHZhciBvdXRwdXQgPSBbXVxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkgKz0gMykge1xuICAgIHRtcCA9XG4gICAgICAoKHVpbnQ4W2ldIDw8IDE2KSAmIDB4RkYwMDAwKSArXG4gICAgICAoKHVpbnQ4W2kgKyAxXSA8PCA4KSAmIDB4RkYwMCkgK1xuICAgICAgKHVpbnQ4W2kgKyAyXSAmIDB4RkYpXG4gICAgb3V0cHV0LnB1c2godHJpcGxldFRvQmFzZTY0KHRtcCkpXG4gIH1cbiAgcmV0dXJuIG91dHB1dC5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBmcm9tQnl0ZUFycmF5ICh1aW50OCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW4gPSB1aW50OC5sZW5ndGhcbiAgdmFyIGV4dHJhQnl0ZXMgPSBsZW4gJSAzIC8vIGlmIHdlIGhhdmUgMSBieXRlIGxlZnQsIHBhZCAyIGJ5dGVzXG4gIHZhciBwYXJ0cyA9IFtdXG4gIHZhciBtYXhDaHVua0xlbmd0aCA9IDE2MzgzIC8vIG11c3QgYmUgbXVsdGlwbGUgb2YgM1xuXG4gIC8vIGdvIHRocm91Z2ggdGhlIGFycmF5IGV2ZXJ5IHRocmVlIGJ5dGVzLCB3ZSdsbCBkZWFsIHdpdGggdHJhaWxpbmcgc3R1ZmYgbGF0ZXJcbiAgZm9yICh2YXIgaSA9IDAsIGxlbjIgPSBsZW4gLSBleHRyYUJ5dGVzOyBpIDwgbGVuMjsgaSArPSBtYXhDaHVua0xlbmd0aCkge1xuICAgIHBhcnRzLnB1c2goZW5jb2RlQ2h1bmsodWludDgsIGksIChpICsgbWF4Q2h1bmtMZW5ndGgpID4gbGVuMiA/IGxlbjIgOiAoaSArIG1heENodW5rTGVuZ3RoKSkpXG4gIH1cblxuICAvLyBwYWQgdGhlIGVuZCB3aXRoIHplcm9zLCBidXQgbWFrZSBzdXJlIHRvIG5vdCBmb3JnZXQgdGhlIGV4dHJhIGJ5dGVzXG4gIGlmIChleHRyYUJ5dGVzID09PSAxKSB7XG4gICAgdG1wID0gdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAyXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCA0KSAmIDB4M0ZdICtcbiAgICAgICc9PSdcbiAgICApXG4gIH0gZWxzZSBpZiAoZXh0cmFCeXRlcyA9PT0gMikge1xuICAgIHRtcCA9ICh1aW50OFtsZW4gLSAyXSA8PCA4KSArIHVpbnQ4W2xlbiAtIDFdXG4gICAgcGFydHMucHVzaChcbiAgICAgIGxvb2t1cFt0bXAgPj4gMTBdICtcbiAgICAgIGxvb2t1cFsodG1wID4+IDQpICYgMHgzRl0gK1xuICAgICAgbG9va3VwWyh0bXAgPDwgMikgJiAweDNGXSArXG4gICAgICAnPSdcbiAgICApXG4gIH1cblxuICByZXR1cm4gcGFydHMuam9pbignJylcbn1cbiIsIi8qIVxuICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHA6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuXG4ndXNlIHN0cmljdCdcblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJ2Jhc2U2NC1qcycpXG52YXIgaWVlZTc1NCA9IHJlcXVpcmUoJ2llZWU3NTQnKVxudmFyIGlzQXJyYXkgPSByZXF1aXJlKCdpc2FycmF5JylcblxuZXhwb3J0cy5CdWZmZXIgPSBCdWZmZXJcbmV4cG9ydHMuU2xvd0J1ZmZlciA9IFNsb3dCdWZmZXJcbmV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVMgPSA1MFxuXG4vKipcbiAqIElmIGBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVGA6XG4gKiAgID09PSB0cnVlICAgIFVzZSBVaW50OEFycmF5IGltcGxlbWVudGF0aW9uIChmYXN0ZXN0KVxuICogICA9PT0gZmFsc2UgICBVc2UgT2JqZWN0IGltcGxlbWVudGF0aW9uIChtb3N0IGNvbXBhdGlibGUsIGV2ZW4gSUU2KVxuICpcbiAqIEJyb3dzZXJzIHRoYXQgc3VwcG9ydCB0eXBlZCBhcnJheXMgYXJlIElFIDEwKywgRmlyZWZveCA0KywgQ2hyb21lIDcrLCBTYWZhcmkgNS4xKyxcbiAqIE9wZXJhIDExLjYrLCBpT1MgNC4yKy5cbiAqXG4gKiBEdWUgdG8gdmFyaW91cyBicm93c2VyIGJ1Z3MsIHNvbWV0aW1lcyB0aGUgT2JqZWN0IGltcGxlbWVudGF0aW9uIHdpbGwgYmUgdXNlZCBldmVuXG4gKiB3aGVuIHRoZSBicm93c2VyIHN1cHBvcnRzIHR5cGVkIGFycmF5cy5cbiAqXG4gKiBOb3RlOlxuICpcbiAqICAgLSBGaXJlZm94IDQtMjkgbGFja3Mgc3VwcG9ydCBmb3IgYWRkaW5nIG5ldyBwcm9wZXJ0aWVzIHRvIGBVaW50OEFycmF5YCBpbnN0YW5jZXMsXG4gKiAgICAgU2VlOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU0MzguXG4gKlxuICogICAtIENocm9tZSA5LTEwIGlzIG1pc3NpbmcgdGhlIGBUeXBlZEFycmF5LnByb3RvdHlwZS5zdWJhcnJheWAgZnVuY3Rpb24uXG4gKlxuICogICAtIElFMTAgaGFzIGEgYnJva2VuIGBUeXBlZEFycmF5LnByb3RvdHlwZS5zdWJhcnJheWAgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhcnJheXMgb2ZcbiAqICAgICBpbmNvcnJlY3QgbGVuZ3RoIGluIHNvbWUgc2l0dWF0aW9ucy5cblxuICogV2UgZGV0ZWN0IHRoZXNlIGJ1Z2d5IGJyb3dzZXJzIGFuZCBzZXQgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYCB0byBgZmFsc2VgIHNvIHRoZXlcbiAqIGdldCB0aGUgT2JqZWN0IGltcGxlbWVudGF0aW9uLCB3aGljaCBpcyBzbG93ZXIgYnV0IGJlaGF2ZXMgY29ycmVjdGx5LlxuICovXG5CdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCA9IGdsb2JhbC5UWVBFRF9BUlJBWV9TVVBQT1JUICE9PSB1bmRlZmluZWRcbiAgPyBnbG9iYWwuVFlQRURfQVJSQVlfU1VQUE9SVFxuICA6IHR5cGVkQXJyYXlTdXBwb3J0KClcblxuLypcbiAqIEV4cG9ydCBrTWF4TGVuZ3RoIGFmdGVyIHR5cGVkIGFycmF5IHN1cHBvcnQgaXMgZGV0ZXJtaW5lZC5cbiAqL1xuZXhwb3J0cy5rTWF4TGVuZ3RoID0ga01heExlbmd0aCgpXG5cbmZ1bmN0aW9uIHR5cGVkQXJyYXlTdXBwb3J0ICgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gbmV3IFVpbnQ4QXJyYXkoMSlcbiAgICBhcnIuX19wcm90b19fID0ge19fcHJvdG9fXzogVWludDhBcnJheS5wcm90b3R5cGUsIGZvbzogZnVuY3Rpb24gKCkgeyByZXR1cm4gNDIgfX1cbiAgICByZXR1cm4gYXJyLmZvbygpID09PSA0MiAmJiAvLyB0eXBlZCBhcnJheSBpbnN0YW5jZXMgY2FuIGJlIGF1Z21lbnRlZFxuICAgICAgICB0eXBlb2YgYXJyLnN1YmFycmF5ID09PSAnZnVuY3Rpb24nICYmIC8vIGNocm9tZSA5LTEwIGxhY2sgYHN1YmFycmF5YFxuICAgICAgICBhcnIuc3ViYXJyYXkoMSwgMSkuYnl0ZUxlbmd0aCA9PT0gMCAvLyBpZTEwIGhhcyBicm9rZW4gYHN1YmFycmF5YFxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuZnVuY3Rpb24ga01heExlbmd0aCAoKSB7XG4gIHJldHVybiBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVFxuICAgID8gMHg3ZmZmZmZmZlxuICAgIDogMHgzZmZmZmZmZlxufVxuXG5mdW5jdGlvbiBjcmVhdGVCdWZmZXIgKHRoYXQsIGxlbmd0aCkge1xuICBpZiAoa01heExlbmd0aCgpIDwgbGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoJylcbiAgfVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZSwgZm9yIGJlc3QgcGVyZm9ybWFuY2VcbiAgICB0aGF0ID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKVxuICAgIHRoYXQuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIC8vIEZhbGxiYWNrOiBSZXR1cm4gYW4gb2JqZWN0IGluc3RhbmNlIG9mIHRoZSBCdWZmZXIgY2xhc3NcbiAgICBpZiAodGhhdCA9PT0gbnVsbCkge1xuICAgICAgdGhhdCA9IG5ldyBCdWZmZXIobGVuZ3RoKVxuICAgIH1cbiAgICB0aGF0Lmxlbmd0aCA9IGxlbmd0aFxuICB9XG5cbiAgcmV0dXJuIHRoYXRcbn1cblxuLyoqXG4gKiBUaGUgQnVmZmVyIGNvbnN0cnVjdG9yIHJldHVybnMgaW5zdGFuY2VzIG9mIGBVaW50OEFycmF5YCB0aGF0IGhhdmUgdGhlaXJcbiAqIHByb3RvdHlwZSBjaGFuZ2VkIHRvIGBCdWZmZXIucHJvdG90eXBlYC4gRnVydGhlcm1vcmUsIGBCdWZmZXJgIGlzIGEgc3ViY2xhc3Mgb2ZcbiAqIGBVaW50OEFycmF5YCwgc28gdGhlIHJldHVybmVkIGluc3RhbmNlcyB3aWxsIGhhdmUgYWxsIHRoZSBub2RlIGBCdWZmZXJgIG1ldGhvZHNcbiAqIGFuZCB0aGUgYFVpbnQ4QXJyYXlgIG1ldGhvZHMuIFNxdWFyZSBicmFja2V0IG5vdGF0aW9uIHdvcmtzIGFzIGV4cGVjdGVkIC0tIGl0XG4gKiByZXR1cm5zIGEgc2luZ2xlIG9jdGV0LlxuICpcbiAqIFRoZSBgVWludDhBcnJheWAgcHJvdG90eXBlIHJlbWFpbnMgdW5tb2RpZmllZC5cbiAqL1xuXG5mdW5jdGlvbiBCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiYgISh0aGlzIGluc3RhbmNlb2YgQnVmZmVyKSkge1xuICAgIHJldHVybiBuZXcgQnVmZmVyKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgLy8gQ29tbW9uIGNhc2UuXG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIGlmICh0eXBlb2YgZW5jb2RpbmdPck9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0lmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJ1xuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gYWxsb2NVbnNhZmUodGhpcywgYXJnKVxuICB9XG4gIHJldHVybiBmcm9tKHRoaXMsIGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5CdWZmZXIucG9vbFNpemUgPSA4MTkyIC8vIG5vdCB1c2VkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb25cblxuLy8gVE9ETzogTGVnYWN5LCBub3QgbmVlZGVkIGFueW1vcmUuIFJlbW92ZSBpbiBuZXh0IG1ham9yIHZlcnNpb24uXG5CdWZmZXIuX2F1Z21lbnQgPSBmdW5jdGlvbiAoYXJyKSB7XG4gIGFyci5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIHJldHVybiBhcnJcbn1cblxuZnVuY3Rpb24gZnJvbSAodGhhdCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpXG4gIH1cblxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZnJvbVN0cmluZyh0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldClcbiAgfVxuXG4gIHJldHVybiBmcm9tT2JqZWN0KHRoYXQsIHZhbHVlKVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIEJ1ZmZlcihhcmcsIGVuY29kaW5nKSBidXQgdGhyb3dzIGEgVHlwZUVycm9yXG4gKiBpZiB2YWx1ZSBpcyBhIG51bWJlci5cbiAqIEJ1ZmZlci5mcm9tKHN0clssIGVuY29kaW5nXSlcbiAqIEJ1ZmZlci5mcm9tKGFycmF5KVxuICogQnVmZmVyLmZyb20oYnVmZmVyKVxuICogQnVmZmVyLmZyb20oYXJyYXlCdWZmZXJbLCBieXRlT2Zmc2V0WywgbGVuZ3RoXV0pXG4gKiovXG5CdWZmZXIuZnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBmcm9tKG51bGwsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbmlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICBCdWZmZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXkucHJvdG90eXBlXG4gIEJ1ZmZlci5fX3Byb3RvX18gPSBVaW50OEFycmF5XG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wuc3BlY2llcyAmJlxuICAgICAgQnVmZmVyW1N5bWJvbC5zcGVjaWVzXSA9PT0gQnVmZmVyKSB7XG4gICAgLy8gRml4IHN1YmFycmF5KCkgaW4gRVMyMDE2LiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL3B1bGwvOTdcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLCBTeW1ib2wuc3BlY2llcywge1xuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFNpemUgKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9IGVsc2UgaWYgKHNpemUgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJylcbiAgfVxufVxuXG5mdW5jdGlvbiBhbGxvYyAodGhhdCwgc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICBpZiAoc2l6ZSA8PSAwKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKVxuICB9XG4gIGlmIChmaWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPbmx5IHBheSBhdHRlbnRpb24gdG8gZW5jb2RpbmcgaWYgaXQncyBhIHN0cmluZy4gVGhpc1xuICAgIC8vIHByZXZlbnRzIGFjY2lkZW50YWxseSBzZW5kaW5nIGluIGEgbnVtYmVyIHRoYXQgd291bGRcbiAgICAvLyBiZSBpbnRlcnByZXR0ZWQgYXMgYSBzdGFydCBvZmZzZXQuXG4gICAgcmV0dXJuIHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZydcbiAgICAgID8gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgICA6IGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKS5maWxsKGZpbGwpXG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqIGFsbG9jKHNpemVbLCBmaWxsWywgZW5jb2RpbmddXSlcbiAqKi9cbkJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICByZXR1cm4gYWxsb2MobnVsbCwgc2l6ZSwgZmlsbCwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGFsbG9jVW5zYWZlICh0aGF0LCBzaXplKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplIDwgMCA/IDAgOiBjaGVja2VkKHNpemUpIHwgMClcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7XG4gICAgICB0aGF0W2ldID0gMFxuICAgIH1cbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gQnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKG51bGwsIHNpemUpXG59XG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gU2xvd0J1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICovXG5CdWZmZXIuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKG51bGwsIHNpemUpXG59XG5cbmZ1bmN0aW9uIGZyb21TdHJpbmcgKHRoYXQsIHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKHR5cGVvZiBlbmNvZGluZyAhPT0gJ3N0cmluZycgfHwgZW5jb2RpbmcgPT09ICcnKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgfVxuXG4gIGlmICghQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJlbmNvZGluZ1wiIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKVxuICB9XG5cbiAgdmFyIGxlbmd0aCA9IGJ5dGVMZW5ndGgoc3RyaW5nLCBlbmNvZGluZykgfCAwXG4gIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuZ3RoKVxuXG4gIHZhciBhY3R1YWwgPSB0aGF0LndyaXRlKHN0cmluZywgZW5jb2RpbmcpXG5cbiAgaWYgKGFjdHVhbCAhPT0gbGVuZ3RoKSB7XG4gICAgLy8gV3JpdGluZyBhIGhleCBzdHJpbmcsIGZvciBleGFtcGxlLCB0aGF0IGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycyB3aWxsXG4gICAgLy8gY2F1c2UgZXZlcnl0aGluZyBhZnRlciB0aGUgZmlyc3QgaW52YWxpZCBjaGFyYWN0ZXIgdG8gYmUgaWdub3JlZC4gKGUuZy5cbiAgICAvLyAnYWJ4eGNkJyB3aWxsIGJlIHRyZWF0ZWQgYXMgJ2FiJylcbiAgICB0aGF0ID0gdGhhdC5zbGljZSgwLCBhY3R1YWwpXG4gIH1cblxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlICh0aGF0LCBhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoIDwgMCA/IDAgOiBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwXG4gIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuZ3RoKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgdGhhdFtpXSA9IGFycmF5W2ldICYgMjU1XG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5QnVmZmVyICh0aGF0LCBhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gIGFycmF5LmJ5dGVMZW5ndGggLy8gdGhpcyB0aHJvd3MgaWYgYGFycmF5YCBpcyBub3QgYSB2YWxpZCBBcnJheUJ1ZmZlclxuXG4gIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcXCdvZmZzZXRcXCcgaXMgb3V0IG9mIGJvdW5kcycpXG4gIH1cblxuICBpZiAoYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQgKyAobGVuZ3RoIHx8IDApKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1xcJ2xlbmd0aFxcJyBpcyBvdXQgb2YgYm91bmRzJylcbiAgfVxuXG4gIGlmIChieXRlT2Zmc2V0ID09PSB1bmRlZmluZWQgJiYgbGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5KVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldClcbiAgfSBlbHNlIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZSwgZm9yIGJlc3QgcGVyZm9ybWFuY2VcbiAgICB0aGF0ID0gYXJyYXlcbiAgICB0aGF0Ll9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgfSBlbHNlIHtcbiAgICAvLyBGYWxsYmFjazogUmV0dXJuIGFuIG9iamVjdCBpbnN0YW5jZSBvZiB0aGUgQnVmZmVyIGNsYXNzXG4gICAgdGhhdCA9IGZyb21BcnJheUxpa2UodGhhdCwgYXJyYXkpXG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbU9iamVjdCAodGhhdCwgb2JqKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIob2JqKSkge1xuICAgIHZhciBsZW4gPSBjaGVja2VkKG9iai5sZW5ndGgpIHwgMFxuICAgIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuKVxuXG4gICAgaWYgKHRoYXQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhhdFxuICAgIH1cblxuICAgIG9iai5jb3B5KHRoYXQsIDAsIDAsIGxlbilcbiAgICByZXR1cm4gdGhhdFxuICB9XG5cbiAgaWYgKG9iaikge1xuICAgIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICBvYmouYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHx8ICdsZW5ndGgnIGluIG9iaikge1xuICAgICAgaWYgKHR5cGVvZiBvYmoubGVuZ3RoICE9PSAnbnVtYmVyJyB8fCBpc25hbihvYmoubGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIDApXG4gICAgICB9XG4gICAgICByZXR1cm4gZnJvbUFycmF5TGlrZSh0aGF0LCBvYmopXG4gICAgfVxuXG4gICAgaWYgKG9iai50eXBlID09PSAnQnVmZmVyJyAmJiBpc0FycmF5KG9iai5kYXRhKSkge1xuICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UodGhhdCwgb2JqLmRhdGEpXG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcignRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LicpXG59XG5cbmZ1bmN0aW9uIGNoZWNrZWQgKGxlbmd0aCkge1xuICAvLyBOb3RlOiBjYW5ub3QgdXNlIGBsZW5ndGggPCBrTWF4TGVuZ3RoKClgIGhlcmUgYmVjYXVzZSB0aGF0IGZhaWxzIHdoZW5cbiAgLy8gbGVuZ3RoIGlzIE5hTiAod2hpY2ggaXMgb3RoZXJ3aXNlIGNvZXJjZWQgdG8gemVyby4pXG4gIGlmIChsZW5ndGggPj0ga01heExlbmd0aCgpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemU6IDB4JyArIGtNYXhMZW5ndGgoKS50b1N0cmluZygxNikgKyAnIGJ5dGVzJylcbiAgfVxuICByZXR1cm4gbGVuZ3RoIHwgMFxufVxuXG5mdW5jdGlvbiBTbG93QnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKCtsZW5ndGggIT0gbGVuZ3RoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG4gICAgbGVuZ3RoID0gMFxuICB9XG4gIHJldHVybiBCdWZmZXIuYWxsb2MoK2xlbmd0aClcbn1cblxuQnVmZmVyLmlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIgKGIpIHtcbiAgcmV0dXJuICEhKGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlcilcbn1cblxuQnVmZmVyLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGEpIHx8ICFCdWZmZXIuaXNCdWZmZXIoYikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzJylcbiAgfVxuXG4gIGlmIChhID09PSBiKSByZXR1cm4gMFxuXG4gIHZhciB4ID0gYS5sZW5ndGhcbiAgdmFyIHkgPSBiLmxlbmd0aFxuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgIHggPSBhW2ldXG4gICAgICB5ID0gYltpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbkJ1ZmZlci5pc0VuY29kaW5nID0gZnVuY3Rpb24gaXNFbmNvZGluZyAoZW5jb2RpbmcpIHtcbiAgc3dpdGNoIChTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOlxuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnbGF0aW4xJzpcbiAgICBjYXNlICdiaW5hcnknOlxuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbkJ1ZmZlci5jb25jYXQgPSBmdW5jdGlvbiBjb25jYXQgKGxpc3QsIGxlbmd0aCkge1xuICBpZiAoIWlzQXJyYXkobGlzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbGVuZ3RoID0gMFxuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBsZW5ndGggKz0gbGlzdFtpXS5sZW5ndGhcbiAgICB9XG4gIH1cblxuICB2YXIgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGxlbmd0aClcbiAgdmFyIHBvcyA9IDBcbiAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgYnVmID0gbGlzdFtpXVxuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gICAgfVxuICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKVxuICAgIHBvcyArPSBidWYubGVuZ3RoXG4gIH1cbiAgcmV0dXJuIGJ1ZmZlclxufVxuXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmcubGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgKEFycmF5QnVmZmVyLmlzVmlldyhzdHJpbmcpIHx8IHN0cmluZyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSkge1xuICAgIHJldHVybiBzdHJpbmcuYnl0ZUxlbmd0aFxuICB9XG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuICAgIHN0cmluZyA9ICcnICsgc3RyaW5nXG4gIH1cblxuICB2YXIgbGVuID0gc3RyaW5nLmxlbmd0aFxuICBpZiAobGVuID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIFVzZSBhIGZvciBsb29wIHRvIGF2b2lkIHJlY3Vyc2lvblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsZW5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIGxlbiAqIDJcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBsZW4gPj4+IDFcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aCAvLyBhc3N1bWUgdXRmOFxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuQnVmZmVyLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5cbmZ1bmN0aW9uIHNsb3dUb1N0cmluZyAoZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcblxuICAvLyBObyBuZWVkIHRvIHZlcmlmeSB0aGF0IFwidGhpcy5sZW5ndGggPD0gTUFYX1VJTlQzMlwiIHNpbmNlIGl0J3MgYSByZWFkLW9ubHlcbiAgLy8gcHJvcGVydHkgb2YgYSB0eXBlZCBhcnJheS5cblxuICAvLyBUaGlzIGJlaGF2ZXMgbmVpdGhlciBsaWtlIFN0cmluZyBub3IgVWludDhBcnJheSBpbiB0aGF0IHdlIHNldCBzdGFydC9lbmRcbiAgLy8gdG8gdGhlaXIgdXBwZXIvbG93ZXIgYm91bmRzIGlmIHRoZSB2YWx1ZSBwYXNzZWQgaXMgb3V0IG9mIHJhbmdlLlxuICAvLyB1bmRlZmluZWQgaXMgaGFuZGxlZCBzcGVjaWFsbHkgYXMgcGVyIEVDTUEtMjYyIDZ0aCBFZGl0aW9uLFxuICAvLyBTZWN0aW9uIDEzLjMuMy43IFJ1bnRpbWUgU2VtYW50aWNzOiBLZXllZEJpbmRpbmdJbml0aWFsaXphdGlvbi5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQgfHwgc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgLy8gUmV0dXJuIGVhcmx5IGlmIHN0YXJ0ID4gdGhpcy5sZW5ndGguIERvbmUgaGVyZSB0byBwcmV2ZW50IHBvdGVudGlhbCB1aW50MzJcbiAgLy8gY29lcmNpb24gZmFpbCBiZWxvdy5cbiAgaWYgKHN0YXJ0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCB8fCBlbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoZW5kIDw9IDApIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIEZvcmNlIGNvZXJzaW9uIHRvIHVpbnQzMi4gVGhpcyB3aWxsIGFsc28gY29lcmNlIGZhbHNleS9OYU4gdmFsdWVzIHRvIDAuXG4gIGVuZCA+Pj49IDBcbiAgc3RhcnQgPj4+PSAwXG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1dGYxNmxlU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKGVuY29kaW5nICsgJycpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbi8vIFRoZSBwcm9wZXJ0eSBpcyB1c2VkIGJ5IGBCdWZmZXIuaXNCdWZmZXJgIGFuZCBgaXMtYnVmZmVyYCAoaW4gU2FmYXJpIDUtNykgdG8gZGV0ZWN0XG4vLyBCdWZmZXIgaW5zdGFuY2VzLlxuQnVmZmVyLnByb3RvdHlwZS5faXNCdWZmZXIgPSB0cnVlXG5cbmZ1bmN0aW9uIHN3YXAgKGIsIG4sIG0pIHtcbiAgdmFyIGkgPSBiW25dXG4gIGJbbl0gPSBiW21dXG4gIGJbbV0gPSBpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDE2ID0gZnVuY3Rpb24gc3dhcDE2ICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSAyICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMSlcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAzMiA9IGZ1bmN0aW9uIHN3YXAzMiAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgNCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDMpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDIpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwNjQgPSBmdW5jdGlvbiBzd2FwNjQgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDggIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDgpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyA3KVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyA2KVxuICAgIHN3YXAodGhpcywgaSArIDIsIGkgKyA1KVxuICAgIHN3YXAodGhpcywgaSArIDMsIGkgKyA0KVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoKSB7XG4gIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aCB8IDBcbiAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICcnXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIDAsIGxlbmd0aClcbiAgcmV0dXJuIHNsb3dUb1N0cmluZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzIChiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgaWYgKHRoaXMgPT09IGIpIHJldHVybiB0cnVlXG4gIHJldHVybiBCdWZmZXIuY29tcGFyZSh0aGlzLCBiKSA9PT0gMFxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgdmFyIHN0ciA9ICcnXG4gIHZhciBtYXggPSBleHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTXG4gIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICBzdHIgPSB0aGlzLnRvU3RyaW5nKCdoZXgnLCAwLCBtYXgpLm1hdGNoKC8uezJ9L2cpLmpvaW4oJyAnKVxuICAgIGlmICh0aGlzLmxlbmd0aCA+IG1heCkgc3RyICs9ICcgLi4uICdcbiAgfVxuICByZXR1cm4gJzxCdWZmZXIgJyArIHN0ciArICc+J1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlICh0YXJnZXQsIHN0YXJ0LCBlbmQsIHRoaXNTdGFydCwgdGhpc0VuZCkge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0YXJnZXQpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIH1cblxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuZCA9IHRhcmdldCA/IHRhcmdldC5sZW5ndGggOiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc1N0YXJ0ID0gMFxuICB9XG4gIGlmICh0aGlzRW5kID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzRW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChzdGFydCA8IDAgfHwgZW5kID4gdGFyZ2V0Lmxlbmd0aCB8fCB0aGlzU3RhcnQgPCAwIHx8IHRoaXNFbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdvdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kICYmIHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kKSB7XG4gICAgcmV0dXJuIC0xXG4gIH1cbiAgaWYgKHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAxXG4gIH1cblxuICBzdGFydCA+Pj49IDBcbiAgZW5kID4+Pj0gMFxuICB0aGlzU3RhcnQgPj4+PSAwXG4gIHRoaXNFbmQgPj4+PSAwXG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCkgcmV0dXJuIDBcblxuICB2YXIgeCA9IHRoaXNFbmQgLSB0aGlzU3RhcnRcbiAgdmFyIHkgPSBlbmQgLSBzdGFydFxuICB2YXIgbGVuID0gTWF0aC5taW4oeCwgeSlcblxuICB2YXIgdGhpc0NvcHkgPSB0aGlzLnNsaWNlKHRoaXNTdGFydCwgdGhpc0VuZClcbiAgdmFyIHRhcmdldENvcHkgPSB0YXJnZXQuc2xpY2Uoc3RhcnQsIGVuZClcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKHRoaXNDb3B5W2ldICE9PSB0YXJnZXRDb3B5W2ldKSB7XG4gICAgICB4ID0gdGhpc0NvcHlbaV1cbiAgICAgIHkgPSB0YXJnZXRDb3B5W2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuLy8gRmluZHMgZWl0aGVyIHRoZSBmaXJzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPj0gYGJ5dGVPZmZzZXRgLFxuLy8gT1IgdGhlIGxhc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0IDw9IGBieXRlT2Zmc2V0YC5cbi8vXG4vLyBBcmd1bWVudHM6XG4vLyAtIGJ1ZmZlciAtIGEgQnVmZmVyIHRvIHNlYXJjaFxuLy8gLSB2YWwgLSBhIHN0cmluZywgQnVmZmVyLCBvciBudW1iZXJcbi8vIC0gYnl0ZU9mZnNldCAtIGFuIGluZGV4IGludG8gYGJ1ZmZlcmA7IHdpbGwgYmUgY2xhbXBlZCB0byBhbiBpbnQzMlxuLy8gLSBlbmNvZGluZyAtIGFuIG9wdGlvbmFsIGVuY29kaW5nLCByZWxldmFudCBpcyB2YWwgaXMgYSBzdHJpbmdcbi8vIC0gZGlyIC0gdHJ1ZSBmb3IgaW5kZXhPZiwgZmFsc2UgZm9yIGxhc3RJbmRleE9mXG5mdW5jdGlvbiBiaWRpcmVjdGlvbmFsSW5kZXhPZiAoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgLy8gRW1wdHkgYnVmZmVyIG1lYW5zIG5vIG1hdGNoXG4gIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSByZXR1cm4gLTFcblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldFxuICBpZiAodHlwZW9mIGJ5dGVPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBieXRlT2Zmc2V0XG4gICAgYnl0ZU9mZnNldCA9IDBcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0ID4gMHg3ZmZmZmZmZikge1xuICAgIGJ5dGVPZmZzZXQgPSAweDdmZmZmZmZmXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IC0weDgwMDAwMDAwKSB7XG4gICAgYnl0ZU9mZnNldCA9IC0weDgwMDAwMDAwXG4gIH1cbiAgYnl0ZU9mZnNldCA9ICtieXRlT2Zmc2V0ICAvLyBDb2VyY2UgdG8gTnVtYmVyLlxuICBpZiAoaXNOYU4oYnl0ZU9mZnNldCkpIHtcbiAgICAvLyBieXRlT2Zmc2V0OiBpdCBpdCdzIHVuZGVmaW5lZCwgbnVsbCwgTmFOLCBcImZvb1wiLCBldGMsIHNlYXJjaCB3aG9sZSBidWZmZXJcbiAgICBieXRlT2Zmc2V0ID0gZGlyID8gMCA6IChidWZmZXIubGVuZ3RoIC0gMSlcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0OiBuZWdhdGl2ZSBvZmZzZXRzIHN0YXJ0IGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyXG4gIGlmIChieXRlT2Zmc2V0IDwgMCkgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggKyBieXRlT2Zmc2V0XG4gIGlmIChieXRlT2Zmc2V0ID49IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICBpZiAoZGlyKSByZXR1cm4gLTFcbiAgICBlbHNlIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoIC0gMVxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAwKSB7XG4gICAgaWYgKGRpcikgYnl0ZU9mZnNldCA9IDBcbiAgICBlbHNlIHJldHVybiAtMVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIHZhbFxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWwgPSBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICB9XG5cbiAgLy8gRmluYWxseSwgc2VhcmNoIGVpdGhlciBpbmRleE9mIChpZiBkaXIgaXMgdHJ1ZSkgb3IgbGFzdEluZGV4T2ZcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWwpKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBsb29raW5nIGZvciBlbXB0eSBzdHJpbmcvYnVmZmVyIGFsd2F5cyBmYWlsc1xuICAgIGlmICh2YWwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDB4RkYgLy8gU2VhcmNoIGZvciBhIGJ5dGUgdmFsdWUgWzAtMjU1XVxuICAgIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJlxuICAgICAgICB0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKGRpcikge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCBbIHZhbCBdLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyJylcbn1cblxuZnVuY3Rpb24gYXJyYXlJbmRleE9mIChhcnIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICB2YXIgaW5kZXhTaXplID0gMVxuICB2YXIgYXJyTGVuZ3RoID0gYXJyLmxlbmd0aFxuICB2YXIgdmFsTGVuZ3RoID0gdmFsLmxlbmd0aFxuXG4gIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSBTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICBpZiAoZW5jb2RpbmcgPT09ICd1Y3MyJyB8fCBlbmNvZGluZyA9PT0gJ3Vjcy0yJyB8fFxuICAgICAgICBlbmNvZGluZyA9PT0gJ3V0ZjE2bGUnIHx8IGVuY29kaW5nID09PSAndXRmLTE2bGUnKSB7XG4gICAgICBpZiAoYXJyLmxlbmd0aCA8IDIgfHwgdmFsLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIC0xXG4gICAgICB9XG4gICAgICBpbmRleFNpemUgPSAyXG4gICAgICBhcnJMZW5ndGggLz0gMlxuICAgICAgdmFsTGVuZ3RoIC89IDJcbiAgICAgIGJ5dGVPZmZzZXQgLz0gMlxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWQgKGJ1ZiwgaSkge1xuICAgIGlmIChpbmRleFNpemUgPT09IDEpIHtcbiAgICAgIHJldHVybiBidWZbaV1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGJ1Zi5yZWFkVUludDE2QkUoaSAqIGluZGV4U2l6ZSlcbiAgICB9XG4gIH1cblxuICB2YXIgaVxuICBpZiAoZGlyKSB7XG4gICAgdmFyIGZvdW5kSW5kZXggPSAtMVxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPCBhcnJMZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJlYWQoYXJyLCBpKSA9PT0gcmVhZCh2YWwsIGZvdW5kSW5kZXggPT09IC0xID8gMCA6IGkgLSBmb3VuZEluZGV4KSkge1xuICAgICAgICBpZiAoZm91bmRJbmRleCA9PT0gLTEpIGZvdW5kSW5kZXggPSBpXG4gICAgICAgIGlmIChpIC0gZm91bmRJbmRleCArIDEgPT09IHZhbExlbmd0aCkgcmV0dXJuIGZvdW5kSW5kZXggKiBpbmRleFNpemVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ICE9PSAtMSkgaSAtPSBpIC0gZm91bmRJbmRleFxuICAgICAgICBmb3VuZEluZGV4ID0gLTFcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGJ5dGVPZmZzZXQgKyB2YWxMZW5ndGggPiBhcnJMZW5ndGgpIGJ5dGVPZmZzZXQgPSBhcnJMZW5ndGggLSB2YWxMZW5ndGhcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGZvdW5kID0gdHJ1ZVxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YWxMZW5ndGg7IGorKykge1xuICAgICAgICBpZiAocmVhZChhcnIsIGkgKyBqKSAhPT0gcmVhZCh2YWwsIGopKSB7XG4gICAgICAgICAgZm91bmQgPSBmYWxzZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmNsdWRlcyA9IGZ1bmN0aW9uIGluY2x1ZGVzICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiB0aGlzLmluZGV4T2YodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykgIT09IC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIGluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIHRydWUpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZmFsc2UpXG59XG5cbmZ1bmN0aW9uIGhleFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgb2Zmc2V0ID0gTnVtYmVyKG9mZnNldCkgfHwgMFxuICB2YXIgcmVtYWluaW5nID0gYnVmLmxlbmd0aCAtIG9mZnNldFxuICBpZiAoIWxlbmd0aCkge1xuICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IE51bWJlcihsZW5ndGgpXG4gICAgaWYgKGxlbmd0aCA+IHJlbWFpbmluZykge1xuICAgICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gICAgfVxuICB9XG5cbiAgLy8gbXVzdCBiZSBhbiBldmVuIG51bWJlciBvZiBkaWdpdHNcbiAgdmFyIHN0ckxlbiA9IHN0cmluZy5sZW5ndGhcbiAgaWYgKHN0ckxlbiAlIDIgIT09IDApIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgaGV4IHN0cmluZycpXG5cbiAgaWYgKGxlbmd0aCA+IHN0ckxlbiAvIDIpIHtcbiAgICBsZW5ndGggPSBzdHJMZW4gLyAyXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIHZhciBwYXJzZWQgPSBwYXJzZUludChzdHJpbmcuc3Vic3RyKGkgKiAyLCAyKSwgMTYpXG4gICAgaWYgKGlzTmFOKHBhcnNlZCkpIHJldHVybiBpXG4gICAgYnVmW29mZnNldCArIGldID0gcGFyc2VkXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gdXRmOFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmOFRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYXNjaWlXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGFzY2lpVG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBsYXRpbjFXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBhc2NpaVdyaXRlKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYmFzZTY0V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihiYXNlNjRUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIHVjczJXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjE2bGVUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiB3cml0ZSAoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpIHtcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZylcbiAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgZW5jb2RpbmcpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IG9mZnNldFxuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBvZmZzZXRbLCBsZW5ndGhdWywgZW5jb2RpbmddKVxuICB9IGVsc2UgaWYgKGlzRmluaXRlKG9mZnNldCkpIHtcbiAgICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gICAgaWYgKGlzRmluaXRlKGxlbmd0aCkpIHtcbiAgICAgIGxlbmd0aCA9IGxlbmd0aCB8IDBcbiAgICAgIGlmIChlbmNvZGluZyA9PT0gdW5kZWZpbmVkKSBlbmNvZGluZyA9ICd1dGY4J1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNvZGluZyA9IGxlbmd0aFxuICAgICAgbGVuZ3RoID0gdW5kZWZpbmVkXG4gICAgfVxuICAvLyBsZWdhY3kgd3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0LCBsZW5ndGgpIC0gcmVtb3ZlIGluIHYwLjEzXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0J1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkJ1xuICAgIClcbiAgfVxuXG4gIHZhciByZW1haW5pbmcgPSB0aGlzLmxlbmd0aCAtIG9mZnNldFxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgfHwgbGVuZ3RoID4gcmVtYWluaW5nKSBsZW5ndGggPSByZW1haW5pbmdcblxuICBpZiAoKHN0cmluZy5sZW5ndGggPiAwICYmIChsZW5ndGggPCAwIHx8IG9mZnNldCA8IDApKSB8fCBvZmZzZXQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxhdGluMVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIC8vIFdhcm5pbmc6IG1heExlbmd0aCBub3QgdGFrZW4gaW50byBhY2NvdW50IGluIGJhc2U2NFdyaXRlXG4gICAgICAgIHJldHVybiBiYXNlNjRXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdWNzMldyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTiAoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ0J1ZmZlcicsXG4gICAgZGF0YTogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyIHx8IHRoaXMsIDApXG4gIH1cbn1cblxuZnVuY3Rpb24gYmFzZTY0U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBpZiAoc3RhcnQgPT09IDAgJiYgZW5kID09PSBidWYubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1ZilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICB9XG59XG5cbmZ1bmN0aW9uIHV0ZjhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcbiAgdmFyIHJlcyA9IFtdXG5cbiAgdmFyIGkgPSBzdGFydFxuICB3aGlsZSAoaSA8IGVuZCkge1xuICAgIHZhciBmaXJzdEJ5dGUgPSBidWZbaV1cbiAgICB2YXIgY29kZVBvaW50ID0gbnVsbFxuICAgIHZhciBieXRlc1BlclNlcXVlbmNlID0gKGZpcnN0Qnl0ZSA+IDB4RUYpID8gNFxuICAgICAgOiAoZmlyc3RCeXRlID4gMHhERikgPyAzXG4gICAgICA6IChmaXJzdEJ5dGUgPiAweEJGKSA/IDJcbiAgICAgIDogMVxuXG4gICAgaWYgKGkgKyBieXRlc1BlclNlcXVlbmNlIDw9IGVuZCkge1xuICAgICAgdmFyIHNlY29uZEJ5dGUsIHRoaXJkQnl0ZSwgZm91cnRoQnl0ZSwgdGVtcENvZGVQb2ludFxuXG4gICAgICBzd2l0Y2ggKGJ5dGVzUGVyU2VxdWVuY2UpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmIChmaXJzdEJ5dGUgPCAweDgwKSB7XG4gICAgICAgICAgICBjb2RlUG9pbnQgPSBmaXJzdEJ5dGVcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHgxRikgPDwgMHg2IHwgKHNlY29uZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4QyB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKHRoaXJkQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0ZGICYmICh0ZW1wQ29kZVBvaW50IDwgMHhEODAwIHx8IHRlbXBDb2RlUG9pbnQgPiAweERGRkYpKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGZvdXJ0aEJ5dGUgPSBidWZbaSArIDNdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwICYmIChmb3VydGhCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweDEyIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweEMgfCAodGhpcmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKGZvdXJ0aEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweEZGRkYgJiYgdGVtcENvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvZGVQb2ludCA9PT0gbnVsbCkge1xuICAgICAgLy8gd2UgZGlkIG5vdCBnZW5lcmF0ZSBhIHZhbGlkIGNvZGVQb2ludCBzbyBpbnNlcnQgYVxuICAgICAgLy8gcmVwbGFjZW1lbnQgY2hhciAoVStGRkZEKSBhbmQgYWR2YW5jZSBvbmx5IDEgYnl0ZVxuICAgICAgY29kZVBvaW50ID0gMHhGRkZEXG4gICAgICBieXRlc1BlclNlcXVlbmNlID0gMVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50ID4gMHhGRkZGKSB7XG4gICAgICAvLyBlbmNvZGUgdG8gdXRmMTYgKHN1cnJvZ2F0ZSBwYWlyIGRhbmNlKVxuICAgICAgY29kZVBvaW50IC09IDB4MTAwMDBcbiAgICAgIHJlcy5wdXNoKGNvZGVQb2ludCA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMClcbiAgICAgIGNvZGVQb2ludCA9IDB4REMwMCB8IGNvZGVQb2ludCAmIDB4M0ZGXG4gICAgfVxuXG4gICAgcmVzLnB1c2goY29kZVBvaW50KVxuICAgIGkgKz0gYnl0ZXNQZXJTZXF1ZW5jZVxuICB9XG5cbiAgcmV0dXJuIGRlY29kZUNvZGVQb2ludHNBcnJheShyZXMpXG59XG5cbi8vIEJhc2VkIG9uIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIyNzQ3MjcyLzY4MDc0MiwgdGhlIGJyb3dzZXIgd2l0aFxuLy8gdGhlIGxvd2VzdCBsaW1pdCBpcyBDaHJvbWUsIHdpdGggMHgxMDAwMCBhcmdzLlxuLy8gV2UgZ28gMSBtYWduaXR1ZGUgbGVzcywgZm9yIHNhZmV0eVxudmFyIE1BWF9BUkdVTUVOVFNfTEVOR1RIID0gMHgxMDAwXG5cbmZ1bmN0aW9uIGRlY29kZUNvZGVQb2ludHNBcnJheSAoY29kZVBvaW50cykge1xuICB2YXIgbGVuID0gY29kZVBvaW50cy5sZW5ndGhcbiAgaWYgKGxlbiA8PSBNQVhfQVJHVU1FTlRTX0xFTkdUSCkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY29kZVBvaW50cykgLy8gYXZvaWQgZXh0cmEgc2xpY2UoKVxuICB9XG5cbiAgLy8gRGVjb2RlIGluIGNodW5rcyB0byBhdm9pZCBcImNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZFwiLlxuICB2YXIgcmVzID0gJydcbiAgdmFyIGkgPSAwXG4gIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoXG4gICAgICBTdHJpbmcsXG4gICAgICBjb2RlUG9pbnRzLnNsaWNlKGksIGkgKz0gTUFYX0FSR1VNRU5UU19MRU5HVEgpXG4gICAgKVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0gJiAweDdGKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gbGF0aW4xU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gaGV4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gYnVmLmxlbmd0aFxuXG4gIGlmICghc3RhcnQgfHwgc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgfHwgZW5kIDwgMCB8fCBlbmQgPiBsZW4pIGVuZCA9IGxlblxuXG4gIHZhciBvdXQgPSAnJ1xuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIG91dCArPSB0b0hleChidWZbaV0pXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiB1dGYxNmxlU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgYnl0ZXMgPSBidWYuc2xpY2Uoc3RhcnQsIGVuZClcbiAgdmFyIHJlcyA9ICcnXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSArIGJ5dGVzW2kgKyAxXSAqIDI1NilcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiBzbGljZSAoc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgc3RhcnQgPSB+fnN0YXJ0XG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogfn5lbmRcblxuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgKz0gbGVuXG4gICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIH0gZWxzZSBpZiAoc3RhcnQgPiBsZW4pIHtcbiAgICBzdGFydCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gbGVuXG4gICAgaWYgKGVuZCA8IDApIGVuZCA9IDBcbiAgfSBlbHNlIGlmIChlbmQgPiBsZW4pIHtcbiAgICBlbmQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICB2YXIgbmV3QnVmXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIG5ld0J1ZiA9IHRoaXMuc3ViYXJyYXkoc3RhcnQsIGVuZClcbiAgICBuZXdCdWYuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIHZhciBzbGljZUxlbiA9IGVuZCAtIHN0YXJ0XG4gICAgbmV3QnVmID0gbmV3IEJ1ZmZlcihzbGljZUxlbiwgdW5kZWZpbmVkKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpY2VMZW47ICsraSkge1xuICAgICAgbmV3QnVmW2ldID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0J1ZlxufVxuXG4vKlxuICogTmVlZCB0byBtYWtlIHN1cmUgdGhhdCBidWZmZXIgaXNuJ3QgdHJ5aW5nIHRvIHdyaXRlIG91dCBvZiBib3VuZHMuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT2Zmc2V0IChvZmZzZXQsIGV4dCwgbGVuZ3RoKSB7XG4gIGlmICgob2Zmc2V0ICUgMSkgIT09IDAgfHwgb2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ29mZnNldCBpcyBub3QgdWludCcpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludExFID0gZnVuY3Rpb24gcmVhZFVJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludEJFID0gZnVuY3Rpb24gcmVhZFVJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcbiAgfVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF1cbiAgdmFyIG11bCA9IDFcbiAgd2hpbGUgKGJ5dGVMZW5ndGggPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50OCA9IGZ1bmN0aW9uIHJlYWRVSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkxFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCA4KSB8IHRoaXNbb2Zmc2V0ICsgMV1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyTEUgPSBmdW5jdGlvbiByZWFkVUludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKCh0aGlzW29mZnNldF0pIHxcbiAgICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSkgK1xuICAgICAgKHRoaXNbb2Zmc2V0ICsgM10gKiAweDEwMDAwMDApXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkJFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gKiAweDEwMDAwMDApICtcbiAgICAoKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgdGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50TEUgPSBmdW5jdGlvbiByZWFkSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50QkUgPSBmdW5jdGlvbiByZWFkSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgaSA9IGJ5dGVMZW5ndGhcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1pXVxuICB3aGlsZSAoaSA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50OCA9IGZ1bmN0aW9uIHJlYWRJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIGlmICghKHRoaXNbb2Zmc2V0XSAmIDB4ODApKSByZXR1cm4gKHRoaXNbb2Zmc2V0XSlcbiAgcmV0dXJuICgoMHhmZiAtIHRoaXNbb2Zmc2V0XSArIDEpICogLTEpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2TEUgPSBmdW5jdGlvbiByZWFkSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkJFID0gZnVuY3Rpb24gcmVhZEludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgMV0gfCAodGhpc1tvZmZzZXRdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0pIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSA8PCAyNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgMjQpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRMRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdExFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRCRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdEJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUxFID0gZnVuY3Rpb24gcmVhZERvdWJsZUxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCA1MiwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlQkUgPSBmdW5jdGlvbiByZWFkRG91YmxlQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCA1MiwgOClcbn1cblxuZnVuY3Rpb24gY2hlY2tJbnQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKVxuICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4pIHRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlVUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlVUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVVSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweGZmLCAwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB2YWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbmZ1bmN0aW9uIG9iamVjdFdyaXRlVUludDE2IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbikge1xuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZiArIHZhbHVlICsgMVxuICBmb3IgKHZhciBpID0gMCwgaiA9IE1hdGgubWluKGJ1Zi5sZW5ndGggLSBvZmZzZXQsIDIpOyBpIDwgajsgKytpKSB7XG4gICAgYnVmW29mZnNldCArIGldID0gKHZhbHVlICYgKDB4ZmYgPDwgKDggKiAobGl0dGxlRW5kaWFuID8gaSA6IDEgLSBpKSkpKSA+Pj5cbiAgICAgIChsaXR0bGVFbmRpYW4gPyBpIDogMSAtIGkpICogOFxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbmZ1bmN0aW9uIG9iamVjdFdyaXRlVUludDMyIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbikge1xuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgZm9yICh2YXIgaSA9IDAsIGogPSBNYXRoLm1pbihidWYubGVuZ3RoIC0gb2Zmc2V0LCA0KTsgaSA8IGo7ICsraSkge1xuICAgIGJ1ZltvZmZzZXQgKyBpXSA9ICh2YWx1ZSA+Pj4gKGxpdHRsZUVuZGlhbiA/IGkgOiAzIC0gaSkgKiA4KSAmIDB4ZmZcbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSAwXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSAtIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gMFxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSArIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4N2YsIC0weDgwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB2YWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5mdW5jdGlvbiBjaGVja0lFRUU3NTQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG4gIGlmIChvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuZnVuY3Rpb24gd3JpdGVGbG9hdCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA0LCAzLjQwMjgyMzQ2NjM4NTI4ODZlKzM4LCAtMy40MDI4MjM0NjYzODUyODg2ZSszOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCAyMywgNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0TEUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRCRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvdWJsZSAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA4LCAxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOCwgLTEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDUyLCA4KVxuICByZXR1cm4gb2Zmc2V0ICsgOFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlTEUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVCRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbi8vIGNvcHkodGFyZ2V0QnVmZmVyLCB0YXJnZXRTdGFydD0wLCBzb3VyY2VTdGFydD0wLCBzb3VyY2VFbmQ9YnVmZmVyLmxlbmd0aClcbkJ1ZmZlci5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkgKHRhcmdldCwgdGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKCFzdGFydCkgc3RhcnQgPSAwXG4gIGlmICghZW5kICYmIGVuZCAhPT0gMCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldFN0YXJ0ID49IHRhcmdldC5sZW5ndGgpIHRhcmdldFN0YXJ0ID0gdGFyZ2V0Lmxlbmd0aFxuICBpZiAoIXRhcmdldFN0YXJ0KSB0YXJnZXRTdGFydCA9IDBcbiAgaWYgKGVuZCA+IDAgJiYgZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgLy8gQ29weSAwIGJ5dGVzOyB3ZSdyZSBkb25lXG4gIGlmIChlbmQgPT09IHN0YXJ0KSByZXR1cm4gMFxuICBpZiAodGFyZ2V0Lmxlbmd0aCA9PT0gMCB8fCB0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBGYXRhbCBlcnJvciBjb25kaXRpb25zXG4gIGlmICh0YXJnZXRTdGFydCA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIH1cbiAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZVN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICBpZiAoZW5kIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZUVuZCBvdXQgb2YgYm91bmRzJylcblxuICAvLyBBcmUgd2Ugb29iP1xuICBpZiAoZW5kID4gdGhpcy5sZW5ndGgpIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgPCBlbmQgLSBzdGFydCkge1xuICAgIGVuZCA9IHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCArIHN0YXJ0XG4gIH1cblxuICB2YXIgbGVuID0gZW5kIC0gc3RhcnRcbiAgdmFyIGlcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0ICYmIHN0YXJ0IDwgdGFyZ2V0U3RhcnQgJiYgdGFyZ2V0U3RhcnQgPCBlbmQpIHtcbiAgICAvLyBkZXNjZW5kaW5nIGNvcHkgZnJvbSBlbmRcbiAgICBmb3IgKGkgPSBsZW4gLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgdGFyZ2V0W2kgKyB0YXJnZXRTdGFydF0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH0gZWxzZSBpZiAobGVuIDwgMTAwMCB8fCAhQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBhc2NlbmRpbmcgY29weSBmcm9tIHN0YXJ0XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChcbiAgICAgIHRhcmdldCxcbiAgICAgIHRoaXMuc3ViYXJyYXkoc3RhcnQsIHN0YXJ0ICsgbGVuKSxcbiAgICAgIHRhcmdldFN0YXJ0XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGxlblxufVxuXG4vLyBVc2FnZTpcbi8vICAgIGJ1ZmZlci5maWxsKG51bWJlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoYnVmZmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChzdHJpbmdbLCBvZmZzZXRbLCBlbmRdXVssIGVuY29kaW5nXSlcbkJ1ZmZlci5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uIGZpbGwgKHZhbCwgc3RhcnQsIGVuZCwgZW5jb2RpbmcpIHtcbiAgLy8gSGFuZGxlIHN0cmluZyBjYXNlczpcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gc3RhcnRcbiAgICAgIHN0YXJ0ID0gMFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbmQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuZFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9XG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZhciBjb2RlID0gdmFsLmNoYXJDb2RlQXQoMClcbiAgICAgIGlmIChjb2RlIDwgMjU2KSB7XG4gICAgICAgIHZhbCA9IGNvZGVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnICYmICFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAyNTVcbiAgfVxuXG4gIC8vIEludmFsaWQgcmFuZ2VzIGFyZSBub3Qgc2V0IHRvIGEgZGVmYXVsdCwgc28gY2FuIHJhbmdlIGNoZWNrIGVhcmx5LlxuICBpZiAoc3RhcnQgPCAwIHx8IHRoaXMubGVuZ3RoIDwgc3RhcnQgfHwgdGhpcy5sZW5ndGggPCBlbmQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgc3RhcnQgPSBzdGFydCA+Pj4gMFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IHRoaXMubGVuZ3RoIDogZW5kID4+PiAwXG5cbiAgaWYgKCF2YWwpIHZhbCA9IDBcblxuICB2YXIgaVxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgICB0aGlzW2ldID0gdmFsXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBieXRlcyA9IEJ1ZmZlci5pc0J1ZmZlcih2YWwpXG4gICAgICA/IHZhbFxuICAgICAgOiB1dGY4VG9CeXRlcyhuZXcgQnVmZmVyKHZhbCwgZW5jb2RpbmcpLnRvU3RyaW5nKCkpXG4gICAgdmFyIGxlbiA9IGJ5dGVzLmxlbmd0aFxuICAgIGZvciAoaSA9IDA7IGkgPCBlbmQgLSBzdGFydDsgKytpKSB7XG4gICAgICB0aGlzW2kgKyBzdGFydF0gPSBieXRlc1tpICUgbGVuXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhFTFBFUiBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT1cblxudmFyIElOVkFMSURfQkFTRTY0X1JFID0gL1teK1xcLzAtOUEtWmEtei1fXS9nXG5cbmZ1bmN0aW9uIGJhc2U2NGNsZWFuIChzdHIpIHtcbiAgLy8gTm9kZSBzdHJpcHMgb3V0IGludmFsaWQgY2hhcmFjdGVycyBsaWtlIFxcbiBhbmQgXFx0IGZyb20gdGhlIHN0cmluZywgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHN0ciA9IHN0cmluZ3RyaW0oc3RyKS5yZXBsYWNlKElOVkFMSURfQkFTRTY0X1JFLCAnJylcbiAgLy8gTm9kZSBjb252ZXJ0cyBzdHJpbmdzIHdpdGggbGVuZ3RoIDwgMiB0byAnJ1xuICBpZiAoc3RyLmxlbmd0aCA8IDIpIHJldHVybiAnJ1xuICAvLyBOb2RlIGFsbG93cyBmb3Igbm9uLXBhZGRlZCBiYXNlNjQgc3RyaW5ncyAobWlzc2luZyB0cmFpbGluZyA9PT0pLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgd2hpbGUgKHN0ci5sZW5ndGggJSA0ICE9PSAwKSB7XG4gICAgc3RyID0gc3RyICsgJz0nXG4gIH1cbiAgcmV0dXJuIHN0clxufVxuXG5mdW5jdGlvbiBzdHJpbmd0cmltIChzdHIpIHtcbiAgaWYgKHN0ci50cmltKSByZXR1cm4gc3RyLnRyaW0oKVxuICByZXR1cm4gc3RyLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKVxufVxuXG5mdW5jdGlvbiB0b0hleCAobikge1xuICBpZiAobiA8IDE2KSByZXR1cm4gJzAnICsgbi50b1N0cmluZygxNilcbiAgcmV0dXJuIG4udG9TdHJpbmcoMTYpXG59XG5cbmZ1bmN0aW9uIHV0ZjhUb0J5dGVzIChzdHJpbmcsIHVuaXRzKSB7XG4gIHVuaXRzID0gdW5pdHMgfHwgSW5maW5pdHlcbiAgdmFyIGNvZGVQb2ludFxuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aFxuICB2YXIgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcbiAgdmFyIGJ5dGVzID0gW11cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgY29kZVBvaW50ID0gc3RyaW5nLmNoYXJDb2RlQXQoaSlcblxuICAgIC8vIGlzIHN1cnJvZ2F0ZSBjb21wb25lbnRcbiAgICBpZiAoY29kZVBvaW50ID4gMHhEN0ZGICYmIGNvZGVQb2ludCA8IDB4RTAwMCkge1xuICAgICAgLy8gbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICghbGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgICAvLyBubyBsZWFkIHlldFxuICAgICAgICBpZiAoY29kZVBvaW50ID4gMHhEQkZGKSB7XG4gICAgICAgICAgLy8gdW5leHBlY3RlZCB0cmFpbFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSBpZiAoaSArIDEgPT09IGxlbmd0aCkge1xuICAgICAgICAgIC8vIHVucGFpcmVkIGxlYWRcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdmFsaWQgbGVhZFxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMiBsZWFkcyBpbiBhIHJvd1xuICAgICAgaWYgKGNvZGVQb2ludCA8IDB4REMwMCkge1xuICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyB2YWxpZCBzdXJyb2dhdGUgcGFpclxuICAgICAgY29kZVBvaW50ID0gKGxlYWRTdXJyb2dhdGUgLSAweEQ4MDAgPDwgMTAgfCBjb2RlUG9pbnQgLSAweERDMDApICsgMHgxMDAwMFxuICAgIH0gZWxzZSBpZiAobGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgLy8gdmFsaWQgYm1wIGNoYXIsIGJ1dCBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgfVxuXG4gICAgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcblxuICAgIC8vIGVuY29kZSB1dGY4XG4gICAgaWYgKGNvZGVQb2ludCA8IDB4ODApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMSkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChjb2RlUG9pbnQpXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDgwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2IHwgMHhDMCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyB8IDB4RTAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDQpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDEyIHwgMHhGMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb2RlIHBvaW50JylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnl0ZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlUb0J5dGVzIChzdHIpIHtcbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgLy8gTm9kZSdzIGNvZGUgc2VlbXMgdG8gYmUgZG9pbmcgdGhpcyBhbmQgbm90ICYgMHg3Ri4uXG4gICAgYnl0ZUFycmF5LnB1c2goc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGKVxuICB9XG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVRvQnl0ZXMgKHN0ciwgdW5pdHMpIHtcbiAgdmFyIGMsIGhpLCBsb1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcblxuICAgIGMgPSBzdHIuY2hhckNvZGVBdChpKVxuICAgIGhpID0gYyA+PiA4XG4gICAgbG8gPSBjICUgMjU2XG4gICAgYnl0ZUFycmF5LnB1c2gobG8pXG4gICAgYnl0ZUFycmF5LnB1c2goaGkpXG4gIH1cblxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFRvQnl0ZXMgKHN0cikge1xuICByZXR1cm4gYmFzZTY0LnRvQnl0ZUFycmF5KGJhc2U2NGNsZWFuKHN0cikpXG59XG5cbmZ1bmN0aW9uIGJsaXRCdWZmZXIgKHNyYywgZHN0LCBvZmZzZXQsIGxlbmd0aCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgaWYgKChpICsgb2Zmc2V0ID49IGRzdC5sZW5ndGgpIHx8IChpID49IHNyYy5sZW5ndGgpKSBicmVha1xuICAgIGRzdFtpICsgb2Zmc2V0XSA9IHNyY1tpXVxuICB9XG4gIHJldHVybiBpXG59XG5cbmZ1bmN0aW9uIGlzbmFuICh2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gdmFsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG59XG4iLCJleHBvcnRzLnJlYWQgPSBmdW5jdGlvbiAoYnVmZmVyLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbVxuICB2YXIgZUxlbiA9IChuQnl0ZXMgKiA4KSAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgbkJpdHMgPSAtN1xuICB2YXIgaSA9IGlzTEUgPyAobkJ5dGVzIC0gMSkgOiAwXG4gIHZhciBkID0gaXNMRSA/IC0xIDogMVxuICB2YXIgcyA9IGJ1ZmZlcltvZmZzZXQgKyBpXVxuXG4gIGkgKz0gZFxuXG4gIGUgPSBzICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIHMgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IGVMZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IChlICogMjU2KSArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIG0gPSBlICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIGUgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IG1MZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgbSA9IChtICogMjU2KSArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIGlmIChlID09PSAwKSB7XG4gICAgZSA9IDEgLSBlQmlhc1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6ICgocyA/IC0xIDogMSkgKiBJbmZpbml0eSlcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIE1hdGgucG93KDIsIG1MZW4pXG4gICAgZSA9IGUgLSBlQmlhc1xuICB9XG4gIHJldHVybiAocyA/IC0xIDogMSkgKiBtICogTWF0aC5wb3coMiwgZSAtIG1MZW4pXG59XG5cbmV4cG9ydHMud3JpdGUgPSBmdW5jdGlvbiAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG0sIGNcbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIHJ0ID0gKG1MZW4gPT09IDIzID8gTWF0aC5wb3coMiwgLTI0KSAtIE1hdGgucG93KDIsIC03NykgOiAwKVxuICB2YXIgaSA9IGlzTEUgPyAwIDogKG5CeXRlcyAtIDEpXG4gIHZhciBkID0gaXNMRSA/IDEgOiAtMVxuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCAodmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCkgPyAxIDogMFxuXG4gIHZhbHVlID0gTWF0aC5hYnModmFsdWUpXG5cbiAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICBtID0gaXNOYU4odmFsdWUpID8gMSA6IDBcbiAgICBlID0gZU1heFxuICB9IGVsc2Uge1xuICAgIGUgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbHVlKSAvIE1hdGguTE4yKVxuICAgIGlmICh2YWx1ZSAqIChjID0gTWF0aC5wb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLVxuICAgICAgYyAqPSAyXG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogTWF0aC5wb3coMiwgMSAtIGVCaWFzKVxuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrK1xuICAgICAgYyAvPSAyXG4gICAgfVxuXG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMFxuICAgICAgZSA9IGVNYXhcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKCh2YWx1ZSAqIGMpIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IGUgKyBlQmlhc1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gdmFsdWUgKiBNYXRoLnBvdygyLCBlQmlhcyAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSAwXG4gICAgfVxuICB9XG5cbiAgZm9yICg7IG1MZW4gPj0gODsgYnVmZmVyW29mZnNldCArIGldID0gbSAmIDB4ZmYsIGkgKz0gZCwgbSAvPSAyNTYsIG1MZW4gLT0gOCkge31cblxuICBlID0gKGUgPDwgbUxlbikgfCBtXG4gIGVMZW4gKz0gbUxlblxuICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IGUgJiAweGZmLCBpICs9IGQsIGUgLz0gMjU2LCBlTGVuIC09IDgpIHt9XG5cbiAgYnVmZmVyW29mZnNldCArIGkgLSBkXSB8PSBzICogMTI4XG59XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChhcnIpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoYXJyKSA9PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiIsImltcG9ydCB0eXBlIE9wZW5GaW4gZnJvbSBcIkBvcGVuZmluL2NvcmVcIjtcbmltcG9ydCB0eXBlIHsgQXBwLCBBcHBJbnRlbnQgfSBmcm9tIFwiQG9wZW5maW4vd29ya3NwYWNlXCI7XG5pbXBvcnQgeyBBcHBNYW5pZmVzdFR5cGUsIGdldEN1cnJlbnRTeW5jIH0gZnJvbSBcIkBvcGVuZmluL3dvcmtzcGFjZS1wbGF0Zm9ybVwiO1xuaW1wb3J0IHR5cGUgeyBBcHBQcm92aWRlclNldHRpbmdzIH0gZnJvbSBcIi4vc2hhcGVzXCI7XG5cbmxldCBsYXN0Q2FjaGVVcGRhdGU6IG51bWJlciA9IDA7XG5sZXQgY2FjaGVkQXBwczogQXBwW10gPSBbXTtcblxuLyoqXG4gKiBMb2FkIHRoZSBhcHBzIGZyb20gdGhlIGpzb24gZmVlZHMgY29uZmlndXJlZCBpbiB0aGUgY3VzdG9tIHNldHRpbmdzLlxuICogQHBhcmFtIGFwcFNldHRpbmdzIFRoZSBhcHAgc2V0dGluZ3MgZnJvbSB0aGUgbWFuaWZlc3QuXG4gKiBAcmV0dXJucyBUaGUgbGlzdCBvZiBhcHBzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QXBwcyhhcHBTZXR0aW5nczogQXBwUHJvdmlkZXJTZXR0aW5ncyB8IHVuZGVmaW5lZCk6IFByb21pc2U8QXBwW10+IHtcblx0aWYgKGFwcFNldHRpbmdzKSB7XG5cdFx0Y29uc3QgY2FjaGVEdXJhdGlvbkluTWludXRlcyA9IGFwcFNldHRpbmdzPy5jYWNoZUR1cmF0aW9uSW5NaW51dGVzID8/IDE7XG5cdFx0Y29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblx0XHRpZiAobm93IC0gbGFzdENhY2hlVXBkYXRlID4gY2FjaGVEdXJhdGlvbkluTWludXRlcyAqIDYwICogMTAwMCkge1xuXHRcdFx0bGFzdENhY2hlVXBkYXRlID0gbm93O1xuXG5cdFx0XHRjb25zb2xlLmxvZyhcIlJlcXVlc3RpbmcgYXBwcy5cIik7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRsZXQgYXBwczogQXBwW10gPSBbXTtcblxuXHRcdFx0XHRpZiAoYXBwU2V0dGluZ3M/LmFwcFNvdXJjZVVybHMpIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHVybCBvZiBhcHBTZXR0aW5ncy5hcHBTb3VyY2VVcmxzKSB7XG5cdFx0XHRcdFx0XHRjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwgeyBjcmVkZW50aWFsczogXCJpbmNsdWRlXCIgfSk7XG5cdFx0XHRcdFx0XHRjb25zdCBqc29uID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuXHRcdFx0XHRcdFx0YXBwcyA9IGFwcHMuY29uY2F0KGpzb24gYXMgQXBwW10pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhY2hlZEFwcHMgPSBhd2FpdCB2YWxpZGF0ZUVudHJpZXMoYXBwU2V0dGluZ3MsIGFwcHMpO1xuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoXCJFcnJvciByZXRyaWV2aW5nIGFwcHMuIFJldHVybmluZyBlbXB0eSBsaXN0LlwiLCBlcnIpO1xuXHRcdFx0XHRjYWNoZWRBcHBzID0gW107XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGNvbnNvbGUud2FybihcIk5vIGFwcFByb3ZpZGVyIHNldHRpbmdzIGluIHRoZSBtYW5pZmVzdFwiKTtcblx0fVxuXG5cdHJldHVybiBjYWNoZWRBcHBzO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHRoYXQgdGhlIGFwcHMgaGF2ZSB0aGUgY29ycmVjdCBwZXJtaXNzaW9ucyBlbmFibGVkLlxuICogQHBhcmFtIGFwcFNldHRpbmdzIFRoZSBhcHAgc2V0dGluZ3MgZnJvbSB0aGUgbWFuaWZlc3QuXG4gKiBAcGFyYW0gYXBwcyBUaGUgYXBwcyB0aGUgdmFsaWRhdGUuXG4gKiBAcmV0dXJucyBUaGUgbGlzdCBvZiB2YWxpZGF0ZWQgYXBwcy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gdmFsaWRhdGVFbnRyaWVzKGFwcFNldHRpbmdzOiBBcHBQcm92aWRlclNldHRpbmdzLCBhcHBzOiBBcHBbXSk6IFByb21pc2U8QXBwW10+IHtcblx0bGV0IGNhbkxhdW5jaEV4dGVybmFsUHJvY2Vzc1Jlc3BvbnNlO1xuXG5cdHRyeSB7XG5cdFx0Y2FuTGF1bmNoRXh0ZXJuYWxQcm9jZXNzUmVzcG9uc2UgPSBhd2FpdCBmaW4uU3lzdGVtLnF1ZXJ5UGVybWlzc2lvbkZvckN1cnJlbnRDb250ZXh0KFxuXHRcdFx0XCJTeXN0ZW0ubGF1bmNoRXh0ZXJuYWxQcm9jZXNzXCJcblx0XHQpO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdGNvbnNvbGUuZXJyb3IoXCJFcnJvciB3aGlsZSBxdWVyeWluZyBmb3IgU3lzdGVtLmxhdW5jaEV4dGVybmFsUHJvY2VzcyBwZXJtaXNzaW9uXCIsIGVycm9yKTtcblx0fVxuXHRjb25zdCBjYW5MYXVuY2hFeHRlcm5hbFByb2Nlc3MgPSBjYW5MYXVuY2hFeHRlcm5hbFByb2Nlc3NSZXNwb25zZT8uZ3JhbnRlZDtcblxuXHRsZXQgY2FuRG93bmxvYWRBcHBBc3NldHNSZXNwb25zZTtcblx0dHJ5IHtcblx0XHRjYW5Eb3dubG9hZEFwcEFzc2V0c1Jlc3BvbnNlID0gYXdhaXQgZmluLlN5c3RlbS5xdWVyeVBlcm1pc3Npb25Gb3JDdXJyZW50Q29udGV4dChcIlN5c3RlbS5kb3dubG9hZEFzc2V0XCIpO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdGNvbnNvbGUuZXJyb3IoXCJFcnJvciB3aGlsZSBxdWVyeWluZyBmb3IgU3lzdGVtLmRvd25sb2FkQXNzZXQgcGVybWlzc2lvblwiLCBlcnJvcik7XG5cdH1cblxuXHRjb25zdCBjYW5Eb3dubG9hZEFwcEFzc2V0cyA9IGNhbkRvd25sb2FkQXBwQXNzZXRzUmVzcG9uc2U/LmdyYW50ZWQ7XG5cblx0Y29uc3QgdmFsaWRhdGVkQXBwczogQXBwW10gPSBbXTtcblx0Y29uc3QgcmVqZWN0ZWRBcHBJZHMgPSBbXTtcblx0Y29uc3QgYXBwQXNzZXRUYWcgPSBcImFwcGFzc2V0XCI7XG5cdGNvbnN0IHN1cHBvcnRlZE1hbmlmZXN0VHlwZXMgPSBhcHBTZXR0aW5ncz8ubWFuaWZlc3RUeXBlcztcblxuXHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYXBwcykge1xuXHRcdGNvbnN0IG1hbmlmZXN0VHlwZSA9IGVsZW1lbnQubWFuaWZlc3RUeXBlO1xuXHRcdGlmIChtYW5pZmVzdFR5cGUpIHtcblx0XHRcdGxldCB2YWxpZEFwcCA9IHRydWU7XG5cdFx0XHRjb25zdCB0YWdzID0gZWxlbWVudC50YWdzO1xuXG5cdFx0XHRpZiAoc3VwcG9ydGVkTWFuaWZlc3RUeXBlcyAhPT0gdW5kZWZpbmVkICYmIHN1cHBvcnRlZE1hbmlmZXN0VHlwZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHR2YWxpZEFwcCA9IHN1cHBvcnRlZE1hbmlmZXN0VHlwZXMuaW5jbHVkZXMobWFuaWZlc3RUeXBlKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHZhbGlkQXBwKSB7XG5cdFx0XHRcdGlmIChlbGVtZW50Lm1hbmlmZXN0VHlwZSAhPT0gXCJleHRlcm5hbFwiKSB7XG5cdFx0XHRcdFx0dmFsaWRhdGVkQXBwcy5wdXNoKGVsZW1lbnQpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGNhbkxhdW5jaEV4dGVybmFsUHJvY2VzcyA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHRyZWplY3RlZEFwcElkcy5wdXNoKGVsZW1lbnQuYXBwSWQpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodGFncykgJiYgdGFncy5pbmNsdWRlcyhhcHBBc3NldFRhZykgJiYgY2FuRG93bmxvYWRBcHBBc3NldHMgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0cmVqZWN0ZWRBcHBJZHMucHVzaChlbGVtZW50LmFwcElkKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWxpZGF0ZWRBcHBzLnB1c2goZWxlbWVudCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnNvbGUud2Fybihcblx0XHRcdFx0XHRcIkFwcHMudHM6IHZhbGlkYXRlRW50cmllczogQXBwbGljYXRpb24gaXMgbm90IGluIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBtYW5pZmVzdCB0eXBlc1wiLFxuXHRcdFx0XHRcdGVsZW1lbnQuYXBwSWQsXG5cdFx0XHRcdFx0bWFuaWZlc3RUeXBlXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKHJlamVjdGVkQXBwSWRzLmxlbmd0aCA+IDApIHtcblx0XHRjb25zb2xlLndhcm4oXG5cdFx0XHRcIkFwcHMudHM6IHZhbGlkYXRlRW50cmllczogTm90IHBhc3NpbmcgdGhlIGZvbGxvd2luZyBsaXN0IG9mIGFwcGxpY2F0aW9ucyBhcyB0aGV5IHdpbGwgbm90IGJlIGFibGUgdG8gcnVuIG9uIHRoaXMgbWFjaGluZSBkdWUgdG8gbWlzc2luZyBwZXJtaXNzaW9ucy4gQWx0ZXJuYXRpdmVseSB0aGlzIGxvZ2ljIGNvdWxkIGJlIG1vdmVkIHRvIHRoZSBsYXVuY2ggZnVuY3Rpb24gd2hlcmUgYSBzZWxlY3Rpb24gaXMgbm90IGxhdW5jaGVkIGJ1dCB0aGUgdXNlciBpcyBwcmVzZW50ZWQgd2l0aCBhIG1vZGFsIHNheWluZyB0aGV5IGNhbid0IGxhdW5jaCBpdCBkdWUgdG8gcGVybWlzc2lvbnMuXCIsXG5cdFx0XHRyZWplY3RlZEFwcElkc1xuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4gdmFsaWRhdGVkQXBwcztcbn1cblxuLyoqXG4gKiBMYXVuY2ggdGhlIHBhc3NlZCBhcHAgdXNpbmcgaXRzIG1hbmlmZXN0IHR5cGUgdG8gZGV0ZXJtaW5lIGhvdyB0byBsYXVuY2ggaXQuXG4gKiBAcGFyYW0gYXBwIFRoZSBhcHAgdG8gbGF1bmNoLlxuICogQHJldHVybnMgVGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoZSBsYXVuY2guXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsYXVuY2hBcHAoXG5cdGFwcDogQXBwXG4pOiBQcm9taXNlPE9wZW5GaW4uUGxhdGZvcm0gfCBPcGVuRmluLklkZW50aXR5IHwgT3BlbkZpbi5WaWV3IHwgT3BlbkZpbi5BcHBsaWNhdGlvbiB8IHVuZGVmaW5lZD4ge1xuXHRpZiAoIWFwcC5tYW5pZmVzdCkge1xuXHRcdGNvbnNvbGUuZXJyb3IoYE5vIG1hbmlmZXN0IHdhcyBwcm92aWRlZCBmb3IgdHlwZSAke2FwcC5tYW5pZmVzdFR5cGV9YCk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0bGV0IHJldDogT3BlbkZpbi5QbGF0Zm9ybSB8IE9wZW5GaW4uSWRlbnRpdHkgfCBPcGVuRmluLlZpZXcgfCBPcGVuRmluLkFwcGxpY2F0aW9uIHwgdW5kZWZpbmVkO1xuXG5cdGNvbnNvbGUubG9nKFwiQXBwbGljYXRpb24gbGF1bmNoIHJlcXVlc3RlZDpcIiwgYXBwKTtcblxuXHRzd2l0Y2ggKGFwcC5tYW5pZmVzdFR5cGUpIHtcblx0XHRjYXNlIEFwcE1hbmlmZXN0VHlwZS5TbmFwc2hvdDoge1xuXHRcdFx0Y29uc3QgcGxhdGZvcm0gPSBnZXRDdXJyZW50U3luYygpO1xuXHRcdFx0cmV0ID0gYXdhaXQgcGxhdGZvcm0uYXBwbHlTbmFwc2hvdChhcHAubWFuaWZlc3QpO1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXG5cdFx0Y2FzZSBBcHBNYW5pZmVzdFR5cGUuVmlldzoge1xuXHRcdFx0Y29uc3QgcGxhdGZvcm0gPSBnZXRDdXJyZW50U3luYygpO1xuXHRcdFx0cmV0ID0gYXdhaXQgcGxhdGZvcm0uY3JlYXRlVmlldyh7IG1hbmlmZXN0VXJsOiBhcHAubWFuaWZlc3QgfSk7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHRjYXNlIEFwcE1hbmlmZXN0VHlwZS5FeHRlcm5hbDoge1xuXHRcdFx0cmV0ID0gYXdhaXQgZmluLlN5c3RlbS5sYXVuY2hFeHRlcm5hbFByb2Nlc3MoeyBwYXRoOiBhcHAubWFuaWZlc3QsIHV1aWQ6IGFwcC5hcHBJZCB9KTtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblxuXHRcdGNhc2UgXCJ3aW5kb3dcIjoge1xuXHRcdFx0Y29uc3QgbWFuaWZlc3RSZXNwb25zZSA9IGF3YWl0IGZldGNoKGFwcC5tYW5pZmVzdCk7XG5cdFx0XHRjb25zdCBtYW5pZmVzdDogT3BlbkZpbi5XaW5kb3dPcHRpb25zID0gYXdhaXQgbWFuaWZlc3RSZXNwb25zZS5qc29uKCk7XG5cdFx0XHRjb25zdCBwbGF0Zm9ybSA9IGdldEN1cnJlbnRTeW5jKCk7XG5cdFx0XHRyZXQgPSBhd2FpdCBwbGF0Zm9ybS5jcmVhdGVXaW5kb3cobWFuaWZlc3QpO1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXG5cdFx0Y2FzZSBcImlubGluZS1hcHBhc3NldFwiOiB7XG5cdFx0XHRjb25zdCBhcHBBc3NldEluZm86IE9wZW5GaW4uQXBwQXNzZXRJbmZvID0gYXBwLm1hbmlmZXN0IGFzIHVua25vd24gYXMgT3BlbkZpbi5BcHBBc3NldEluZm87XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhd2FpdCBmaW4uU3lzdGVtLmRvd25sb2FkQXNzZXQoYXBwQXNzZXRJbmZvLCAocHJvZ3Jlc3MpID0+IHtcblx0XHRcdFx0XHRjb25zdCBkb3dubG9hZGVkUGVyY2VudCA9IE1hdGguZmxvb3IoKHByb2dyZXNzLmRvd25sb2FkZWRCeXRlcyAvIHByb2dyZXNzLnRvdGFsQnl0ZXMpICogMTAwKTtcblx0XHRcdFx0XHRjb25zb2xlLmluZm8oYERvd25sb2FkZWQgJHtkb3dubG9hZGVkUGVyY2VudH0lIG9mIGFwcCBhc3NldCB3aXRoIGFwcElkIG9mICR7YXBwLmFwcElkfWApO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRyZXQgPSBhd2FpdCBmaW4uU3lzdGVtLmxhdW5jaEV4dGVybmFsUHJvY2Vzcyh7XG5cdFx0XHRcdFx0YWxpYXM6IGFwcEFzc2V0SW5mby5hbGlhcyxcblx0XHRcdFx0XHRhcmd1bWVudHM6IGFwcEFzc2V0SW5mby5hcmdzXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcihgRXJyb3IgdHJ5aW5nIHRvIGRvd25sb2FkIGFwcCBhc3NldCB3aXRoIGFwcCBpZDogJHthcHAuYXBwSWR9YCwgZXJyb3IpO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXG5cdFx0ZGVmYXVsdDoge1xuXHRcdFx0cmV0ID0gYXdhaXQgZmluLkFwcGxpY2F0aW9uLnN0YXJ0RnJvbU1hbmlmZXN0KGFwcC5tYW5pZmVzdCk7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRjb25zb2xlLmxvZyhcIkZpbmlzaGVkIGFwcGxpY2F0aW9uIGxhdW5jaCByZXF1ZXN0XCIpO1xuXG5cdHJldHVybiByZXQ7XG59XG5cbi8qKlxuICogR2V0IGEgc2luZ2xlIGFwcCB1c2luZyBpdCdzIGlkLlxuICogQHBhcmFtIGFwcFByb3ZpZGVyU2V0dGluZ3MgVGhlIGFwcCBwcm92aWRlciBmb3IgcmV0cmlldmluZyB0aGUgYXBwcy5cbiAqIEBwYXJhbSBhcHBJZCBUaGUgaWQgb2YgdGhlIGFwcCB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm5zIFRoZSBhcHAgaWYgaXQgZXhpc3RzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QXBwKFxuXHRhcHBQcm92aWRlclNldHRpbmdzOiBBcHBQcm92aWRlclNldHRpbmdzIHwgdW5kZWZpbmVkLFxuXHRhcHBJZDogc3RyaW5nXG4pOiBQcm9taXNlPEFwcCB8IHVuZGVmaW5lZD4ge1xuXHRjb25zdCBhcHBzID0gYXdhaXQgZ2V0QXBwcyhhcHBQcm92aWRlclNldHRpbmdzKTtcblx0cmV0dXJuIGFwcHMuZmluZCgoZW50cnkpID0+IGVudHJ5LmFwcElkID09PSBhcHBJZCk7XG59XG5cbi8qKlxuICogR2V0IGFsbCB0aGUgaW50ZW50cyB0aGF0IHN1cHBvcnQgdGhlIHJlcXVlc3RlZCBjb250ZXh0LlxuICogQHBhcmFtIGFwcFByb3ZpZGVyU2V0dGluZ3MgVGhlIGFwcCBwcm92aWRlciBmb3IgcmV0cmlldmluZyB0aGUgYXBwcy5cbiAqIEBwYXJhbSBjb250ZXh0VHlwZSBUaGUgY29udGV4dCB0eXBlIHRvIGZpbmQgdGhlIGludGVudHMgZm9yLlxuICogQHJldHVybnMgVGhlIGxpc3Qgb2YgaW50ZW50cyBzdXBwb3J0aW5nIHRoZSBjb250ZXh0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0SW50ZW50c0J5Q29udGV4dChcblx0YXBwUHJvdmlkZXJTZXR0aW5nczogQXBwUHJvdmlkZXJTZXR0aW5ncyB8IHVuZGVmaW5lZCxcblx0Y29udGV4dFR5cGU6IHN0cmluZ1xuKTogUHJvbWlzZTx7IGludGVudDogeyBuYW1lOiBzdHJpbmc7IGRpc3BsYXlOYW1lOiBzdHJpbmcgfTsgYXBwczogQXBwW10gfVtdPiB7XG5cdGNvbnN0IGFwcHMgPSBhd2FpdCBnZXRBcHBzKGFwcFByb3ZpZGVyU2V0dGluZ3MpO1xuXG5cdGlmICghQXJyYXkuaXNBcnJheShhcHBzKSkge1xuXHRcdGNvbnNvbGUud2FybihcIlVuYWJsZSB0byBnZXQgYXBwcyBzbyB3ZSBjYW4gbm90IGdldCBhcHBzIGFuZCBpbnRlbnRzIHRoYXQgc3VwcG9ydCBhIHBhcnRpY3VsYXIgY29udGV4dFwiKTtcblx0XHRyZXR1cm4gW107XG5cdH1cblxuXHRjb25zdCBpbnRlbnRzTWFwOiB7XG5cdFx0W2tleTogc3RyaW5nXToge1xuXHRcdFx0aW50ZW50OiB7IG5hbWU6IHN0cmluZzsgZGlzcGxheU5hbWU6IHN0cmluZyB9O1xuXHRcdFx0YXBwczogQXBwW107XG5cdFx0fTtcblx0fSA9IHt9O1xuXG5cdGZvciAoY29uc3QgYXBwIG9mIGFwcHMpIHtcblx0XHRpZiAoYXBwLmludGVudHMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Zm9yIChjb25zdCBhcHBJbnRlbnQgb2YgYXBwLmludGVudHMpIHtcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoYXBwSW50ZW50LmNvbnRleHRzKSAmJiBhcHBJbnRlbnQuY29udGV4dHMuaW5jbHVkZXMoY29udGV4dFR5cGUpKSB7XG5cdFx0XHRcdFx0dXBkYXRlQXBwSW50ZW50c0VudHJ5KGludGVudHNNYXAsIGFwcEludGVudCwgYXBwKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBPYmplY3QudmFsdWVzKGludGVudHNNYXApO1xufVxuXG4vKipcbiAqIEdldCB0aGUgbGlzdCBvZiBhcHBzIHRoYXQgc3VwcG9ydCBhIHNwZWNpZmljIGludGVudC5cbiAqIEBwYXJhbSBhcHBQcm92aWRlclNldHRpbmdzIFRoZSBhcHAgcHJvdmlkZXIgZm9yIHJldHJpZXZpbmcgdGhlIGFwcHMuXG4gKiBAcGFyYW0gaW50ZW50IFRoZSBpbnRlbnRzIHRvIGZpbmQgc3VwcG9ydGVkIGFwcHMuXG4gKiBAcmV0dXJucyBUaGUgbGlzdCBvZiBhcHAgdGhhdCBzdXBwb3J0IHRoZSBpbnRlbnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBcHBzQnlJbnRlbnQoXG5cdGFwcFByb3ZpZGVyU2V0dGluZ3M6IEFwcFByb3ZpZGVyU2V0dGluZ3MgfCB1bmRlZmluZWQsXG5cdGludGVudDogc3RyaW5nXG4pOiBQcm9taXNlPEFwcFtdPiB7XG5cdGNvbnN0IGFwcHMgPSBhd2FpdCBnZXRBcHBzKGFwcFByb3ZpZGVyU2V0dGluZ3MpO1xuXG5cdHJldHVybiBhcHBzLmZpbHRlcigodmFsdWUpID0+IHtcblx0XHRpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUuaW50ZW50cykpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0Zm9yIChjb25zdCB2YWx1ZUludGVudCBvZiB2YWx1ZS5pbnRlbnRzKSB7XG5cdFx0XHRpZiAodmFsdWVJbnRlbnQubmFtZS50b0xvd2VyQ2FzZSgpID09PSBpbnRlbnQudG9Mb3dlckNhc2UoKSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBHZXQgYW4gaW50ZW50IGFuZCB0aGUgYXBwcyB0aGF0IHN1cHBvcnQgaXQuXG4gKiBAcGFyYW0gYXBwUHJvdmlkZXJTZXR0aW5ncyBUaGUgYXBwIHByb3ZpZGVyIGZvciByZXRyaWV2aW5nIHRoZSBhcHBzLlxuICogQHBhcmFtIGludGVudCBUaGUgaW50ZW50IHRvIGxvb2sgZm9yLlxuICogQHBhcmFtIGNvbnRleHRUeXBlIE9wdGlvbmFsIGNvbnRleHQgdHlwZSB0byBsb29rIGZvci5cbiAqIEByZXR1cm5zIFRoZSBpbnRlbnQgYW5kIGl0cyBzdXBwb3J0aW5nIGFwcHMgaWYgZm91bmQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRJbnRlbnQoXG5cdGFwcFByb3ZpZGVyU2V0dGluZ3M6IEFwcFByb3ZpZGVyU2V0dGluZ3MgfCB1bmRlZmluZWQsXG5cdGludGVudDogc3RyaW5nLFxuXHRjb250ZXh0VHlwZT86IHN0cmluZ1xuKTogUHJvbWlzZTx7IGludGVudDogeyBuYW1lOiBzdHJpbmc7IGRpc3BsYXlOYW1lOiBzdHJpbmcgfTsgYXBwczogQXBwW10gfSB8IHVuZGVmaW5lZD4ge1xuXHRjb25zdCBhcHBzID0gYXdhaXQgZ2V0QXBwcyhhcHBQcm92aWRlclNldHRpbmdzKTtcblxuXHRpZiAoIUFycmF5LmlzQXJyYXkoYXBwcykpIHtcblx0XHRjb25zb2xlLndhcm4oXCJUaGVyZSB3YXMgbm8gYXBwcyByZXR1cm5lZCBzbyB3ZSBhcmUgdW5hYmxlIHRvIGZpbmQgYXBwcyB0aGF0IHN1cHBvcnQgYW4gaW50ZW50LlwiKTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCBpbnRlbnRzTWFwOiB7XG5cdFx0W2tleTogc3RyaW5nXToge1xuXHRcdFx0aW50ZW50OiB7IG5hbWU6IHN0cmluZzsgZGlzcGxheU5hbWU6IHN0cmluZyB9O1xuXHRcdFx0YXBwczogQXBwW107XG5cdFx0fTtcblx0fSA9IHt9O1xuXG5cdGZvciAoY29uc3QgYXBwIG9mIGFwcHMpIHtcblx0XHRpZiAoYXBwLmludGVudHMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Zm9yIChjb25zdCBhcHBJbnRlbnQgb2YgYXBwLmludGVudHMpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGFwcEludGVudC5uYW1lID09PSBpbnRlbnQgJiZcblx0XHRcdFx0XHQoY29udGV4dFR5cGUgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHRcdFx0KEFycmF5LmlzQXJyYXkoYXBwSW50ZW50LmNvbnRleHRzKSAmJiBhcHBJbnRlbnQuY29udGV4dHMuaW5jbHVkZXMoY29udGV4dFR5cGUpKSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0dXBkYXRlQXBwSW50ZW50c0VudHJ5KGludGVudHNNYXAsIGFwcEludGVudCwgYXBwKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHJlc3VsdHMgPSBPYmplY3QudmFsdWVzKGludGVudHNNYXApO1xuXHRpZiAocmVzdWx0cy5sZW5ndGggPT09IDApIHtcblx0XHRjb25zb2xlLmxvZyhgTm8gcmVzdWx0cyBmb3VuZCBmb3IgZmluZEludGVudCBmb3IgaW50ZW50ICR7aW50ZW50fSBhbmQgY29udGV4dCAke2NvbnRleHRUeXBlfWApO1xuXHRcdHJldHVybjtcblx0fSBlbHNlIGlmIChyZXN1bHRzLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiByZXN1bHRzWzBdO1xuXHR9XG5cdGNvbnNvbGUud2Fybihcblx0XHRgUmVjZWl2ZWQgbW9yZSB0aGFuIG9uZSByZXN1bHQgZm9yIGZpbmRJbnRlbnQgZm9yIGludGVudCAke2ludGVudH0gYW5kIGNvbnRleHQgJHtjb250ZXh0VHlwZX0uIFJldHVybmluZyB0aGUgZmlyc3QgZW50cnkuYFxuXHQpO1xuXHRyZXR1cm4gcmVzdWx0c1swXTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgdGhlIGVudHJ5IGZvciBrZWVwaW5nIHRyYWNraW5nIG9mIHN1cHBvcnRlZCBhcHBzIGZvciBpbnRlbnRzLlxuICogQHBhcmFtIGludGVudHNNYXAgVGhlIG1hcCBvZiBpbnRlbnRzLlxuICogQHBhcmFtIGludGVudCBUaGUgaW50ZW50IHRvIGFwcCBhbiBlbnRyeSBmb3IuXG4gKiBAcGFyYW0gYXBwIFRoZSBhcHBsaWNhdGlvbiBzdXBwb3J0aW5nIHRoZSBpbnRlbnQuXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZUFwcEludGVudHNFbnRyeShcblx0aW50ZW50c01hcDoge1xuXHRcdFtrZXk6IHN0cmluZ106IHtcblx0XHRcdGludGVudDogeyBuYW1lOiBzdHJpbmc7IGRpc3BsYXlOYW1lOiBzdHJpbmcgfTtcblx0XHRcdGFwcHM6IEFwcFtdO1xuXHRcdH07XG5cdH0sXG5cdGludGVudDogQXBwSW50ZW50LFxuXHRhcHA6IEFwcFxuKTogdm9pZCB7XG5cdGlmIChpbnRlbnRzTWFwW2ludGVudC5uYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Ly8gaW4gYSBwcm9kdWN0aW9uIGFwcCB5b3Ugd291bGQgZWl0aGVyIG5lZWQgdG8gZW5zdXJlIHRoYXQgZXZlcnkgYXBwIHdhcyBwb3B1bGF0ZWQgd2l0aCB0aGUgc2FtZSBuYW1lICYgZGlzcGxheU5hbWUgZm9yIGFuIGludGVudCBmcm9tIGEgZ29sZGVuIHNvdXJjZSAoZS5nLiBpbnRlbnRzIHRhYmxlKSBzbyBwaWNraW5nIHRoZSBmaXJzdCBlbnRyeSB3b3VsZG4ndCBtYWtlIGEgZGlmZmVyZW5jZS5cblx0XHQvLyBvciB5b3UgY291bGQgcHVsbCBpbiBhIGdvbGRlbiBzb3VyY2Ugb2YgaW50ZW50cyBmcm9tIGEgc2VydmljZSBhbmQgdGhlbiBkbyBhIGxvb2t1cCB1c2luZyB0aGUgaW50ZW50IG5hbWUgdG8gZ2V0IGFuIG9iamVjdCB3aXRoIGludGVudCBuYW1lIGFuZCBvZmZpY2lhbCBkaXNwbGF5IG5hbWUuXG5cdFx0aW50ZW50c01hcFtpbnRlbnQubmFtZV0gPSB7XG5cdFx0XHRpbnRlbnQ6IHtcblx0XHRcdFx0bmFtZTogaW50ZW50Lm5hbWUsXG5cdFx0XHRcdGRpc3BsYXlOYW1lOiBpbnRlbnQuZGlzcGxheU5hbWVcblx0XHRcdH0sXG5cdFx0XHRhcHBzOiBbXVxuXHRcdH07XG5cdH1cblx0aW50ZW50c01hcFtpbnRlbnQubmFtZV0uYXBwcy5wdXNoKGFwcCk7XG59XG4iLCJpbXBvcnQgdHlwZSBPcGVuRmluIGZyb20gXCJAb3BlbmZpbi9jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gXCJAb3BlbmZpbi93b3Jrc3BhY2VcIjtcbmltcG9ydCB7XG5cdGdldEN1cnJlbnRTeW5jLFxuXHR0eXBlIEFwcEludGVudCxcblx0dHlwZSBCcm93c2VyU25hcHNob3QsXG5cdHR5cGUgUGFnZUxheW91dFxufSBmcm9tIFwiQG9wZW5maW4vd29ya3NwYWNlLXBsYXRmb3JtXCI7XG5pbXBvcnQgeyBnZXRBcHAsIGdldEFwcHNCeUludGVudCwgZ2V0SW50ZW50LCBnZXRJbnRlbnRzQnlDb250ZXh0IH0gZnJvbSBcIi4vYXBwc1wiO1xuaW1wb3J0IHR5cGUgeyBDdXN0b21TZXR0aW5ncyB9IGZyb20gXCIuL3NoYXBlc1wiO1xuXG5jb25zdCBOT19BUFBTX0ZPVU5EID0gXCJOb0FwcHNGb3VuZFwiO1xuY29uc3QgUkVTT0xWRVJfVElNRU9VVCA9IFwiUmVzb2x2ZXJUaW1lb3V0XCI7XG5cbi8qKlxuICogQ3JlYXRlIGFuIG92ZXJyaWRlIGZvciB0aGUgcGxhdGZvcm0gaW50ZXJvcC5cbiAqIEBwYXJhbSBjdXN0b21TZXR0aW5ncyBDdXN0b20gc2V0dGluZ3MgdG8gaW5pdGlhbGl6ZSB0aGUgcGxhdGZvcm0uXG4gKiBAcmV0dXJucyBUaGUgb3ZlcnJpZGUgZm9yIHRoZSBpbnRlcm9wIGJyb2tlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUludGVyb3BPdmVycmlkZShcblx0Y3VzdG9tU2V0dGluZ3M6IEN1c3RvbVNldHRpbmdzXG4pOiBPcGVuRmluLkNvbnN0cnVjdG9yT3ZlcnJpZGU8T3BlbkZpbi5JbnRlcm9wQnJva2VyPiB7XG5cdHJldHVybiAoQmFzZTogT3BlbkZpbi5Db25zdHJ1Y3RvcjxPcGVuRmluLkludGVyb3BCcm9rZXI+KSA9PlxuXHRcdC8qKlxuXHRcdCAqIEluIEludGVyb3AgQnJva2VyIEltcGxlbWVudGF0aW9uIHRoYXQgc3VwcG9ydHMgZmRjMyAxLjJcblx0XHQgKi9cblx0XHRjbGFzcyBJbnRlcm9wT3ZlcnJpZGUgZXh0ZW5kcyBCYXNlIHtcblx0XHRcdC8qKlxuXHRcdFx0ICogTGF1bmNoIGFuIGFwcGxpY2F0aW9ucyB3aXRoIGEgc3BlY2lmaWMgaW50ZW50LlxuXHRcdFx0ICogQHBhcmFtIGFwcCBUaGUgYXBwIHRvIGxhdW5jaC5cblx0XHRcdCAqIEBwYXJhbSBpbnRlbnQgVGhlIGludGVudCB0byBsYXVuY2ggdGhlIGFwcCB3aXRoLlxuXHRcdFx0ICogQHJldHVybnMgVGhlIHNvdXJjZSBhbmQgdmVyc2lvbiBvZiB0aGUgYXBwIHRoYXQgd2FzIGxhdW5jaGVkIGlmIHRoZXJlIHdhcyBvbmUuXG5cdFx0XHQgKi9cblx0XHRcdHB1YmxpYyBhc3luYyBsYXVuY2hBcHBXaXRoSW50ZW50KFxuXHRcdFx0XHRhcHA6IEFwcCxcblx0XHRcdFx0aW50ZW50OiBPcGVuRmluLkludGVudFxuXHRcdFx0KTogUHJvbWlzZTxcblx0XHRcdFx0fCB7XG5cdFx0XHRcdFx0XHRzb3VyY2U6IHN0cmluZztcblx0XHRcdFx0XHRcdHZlcnNpb24/OiBzdHJpbmc7XG5cdFx0XHRcdCAgfVxuXHRcdFx0XHR8IHVuZGVmaW5lZFxuXHRcdFx0PiB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKFwiTGF1bmNoaW5nIGFwcCB3aXRoIGludGVudC5cIik7XG5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGFwcC5tYW5pZmVzdFR5cGUgIT09IFwidmlld1wiICYmXG5cdFx0XHRcdFx0YXBwLm1hbmlmZXN0VHlwZSAhPT0gXCJpbmxpbmUtdmlld1wiICYmXG5cdFx0XHRcdFx0YXBwLm1hbmlmZXN0VHlwZSAhPT0gXCJzbmFwc2hvdFwiXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdC8vIG9wdGlvbmFsIGxvZ2ljIHNob3cgYSBwcm9tcHQgdG8gdGhlIHVzZXIgdG8gbGV0IHRoZW0ga25vd1xuXHRcdFx0XHRcdGNvbnNvbGUud2FybihcIlVuYWJsZSB0byByYWlzZSBpbnRlbnQgYWdhaW5zdCBhcHAgYXMgb25seSB2aWV3L3NuYXBzaG90IGJhc2VkIGFwcHMgYXJlIHN1cHBvcnRlZC5cIik7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGFwcC5tYW5pZmVzdFR5cGUgPT09IFwidmlld1wiIHx8IGFwcC5tYW5pZmVzdFR5cGUgPT09IFwiaW5saW5lLXZpZXdcIikge1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKGBUaGUgc3VwcG9ydGluZyBhcHAgaXMgYSB2aWV3ICgke2FwcC5tYW5pZmVzdFR5cGV9KWApO1xuXG5cdFx0XHRcdFx0Y29uc3QgaWRlbnRpdHkgPSBhd2FpdCBsYXVuY2hWaWV3KGFwcCk7XG5cdFx0XHRcdFx0aWYgKCFpZGVudGl0eSkge1xuXHRcdFx0XHRcdFx0Ly8gb3B0aW9uYWwgbG9naWMgc2hvdyBhIHByb21wdCB0byB0aGUgdXNlciB0byBsZXQgdGhlbSBrbm93XG5cdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oXCJVbmFibGUgdG8gcmFpc2UgaW50ZW50IGFnYWluc3QgdmlldyBhcyBubyBpZGVudGl0eSB3YXMgcmV0dXJuZWQuXCIpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRhd2FpdCBzdXBlci5zZXRJbnRlbnRUYXJnZXQoaW50ZW50LCBpZGVudGl0eSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoYXBwLm1hbmlmZXN0VHlwZSA9PT0gXCJzbmFwc2hvdFwiKSB7XG5cdFx0XHRcdFx0Y29uc29sZS5sb2coXCJUaGUgc3VwcG9ydGluZyBhcHAgaXMgYSB2aWV3LlwiKTtcblxuXHRcdFx0XHRcdGNvbnN0IGlkZW50aXRpZXMgPSBhd2FpdCBsYXVuY2hTbmFwc2hvdChhcHApO1xuXHRcdFx0XHRcdGlmICghaWRlbnRpdGllcykge1xuXHRcdFx0XHRcdFx0Ly8gb3B0aW9uYWwgbG9naWMgc2hvdyBhIHByb21wdCB0byB0aGUgdXNlciB0byBsZXQgdGhlbSBrbm93XG5cdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oXCJVbmFibGUgdG8gcmFpc2UgaW50ZW50IGFnYWluc3QgdGFyZ2V0IGFzIG5vIGlkZW50aXR5IHdhcyByZXR1cm5lZC5cIik7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGZvciAoY29uc3QgaWRlbnRpdHkgb2YgaWRlbnRpdGllcykge1xuXHRcdFx0XHRcdFx0YXdhaXQgc3VwZXIuc2V0SW50ZW50VGFyZ2V0KGludGVudCwgaWRlbnRpdHkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0c291cmNlOiBhcHAuYXBwSWQsXG5cdFx0XHRcdFx0dmVyc2lvbjogYXBwLnZlcnNpb25cblx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBHZXQgdGhlIHRhcmdldCBpZGVudGl0eSBvZiB0aGUgcmVxdWVzdGVkIGFwcC5cblx0XHRcdCAqIEBwYXJhbSBhcHBJZCBUaGUgYXBwIGlkIHRvIGdldCB0aGUgdGFyZ2V0IGZvci5cblx0XHRcdCAqIEByZXR1cm5zIFRoZSBpZGVudGl0eSBvZiB0aGUgdGFyZ2V0IGFwcC5cblx0XHRcdCAqL1xuXHRcdFx0cHVibGljIGFzeW5jIGdldFRhcmdldElkZW50aXR5KGFwcElkOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBQcm9taXNlPE9wZW5GaW4uSWRlbnRpdHkgfCB1bmRlZmluZWQ+IHtcblx0XHRcdFx0aWYgKCFhcHBJZCkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBwYXNzZWRJZGVudGl0eSA9IGFwcElkLnNwbGl0KFwiQFwiKTtcblx0XHRcdFx0Y29uc3QgbmFtZSA9IHBhc3NlZElkZW50aXR5WzBdO1xuXHRcdFx0XHRsZXQgdXVpZCA9IGZpbi5tZS5pZGVudGl0eS51dWlkO1xuXHRcdFx0XHRpZiAocGFzc2VkSWRlbnRpdHkubGVuZ3RoID09PSAyKSB7XG5cdFx0XHRcdFx0dXVpZCA9IHBhc3NlZElkZW50aXR5WzFdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlc29sdmVkSWRlbnRpdHkgPSB7IHV1aWQsIG5hbWUgfTtcblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGNvbnN0IHRhcmdldFZpZXcgPSBhd2FpdCBmaW4uVmlldy53cmFwKHsgdXVpZCwgbmFtZSB9KTtcblx0XHRcdFx0XHRhd2FpdCB0YXJnZXRWaWV3LmdldEluZm8oKTtcblx0XHRcdFx0XHQvLyBwYXNzZWQgaWRlbnRpdHkgZm91bmRcblx0XHRcdFx0XHRyZXR1cm4gcmVzb2x2ZWRJZGVudGl0eTtcblx0XHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdFx0Ly8gcGFzc2VkIGlkZW50aXR5IGRvZXMgbm90IGV4aXN0XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBMYXVuY2ggYSBwaWNrZXIgdG8gY2hvc2UgYW4gYXBwbGljYXRpb24gZm9yIGFuIGludGVudC5cblx0XHRcdCAqIEBwYXJhbSBsYXVuY2hPcHRpb25zIFRoZSBsYXVuY2ggb3B0aW9ucyBmb3IgdGhlIGFwcC5cblx0XHRcdCAqIEBwYXJhbSBsYXVuY2hPcHRpb25zLmFwcHMgVGhlIG9wdGlvbmFsIGxpc3Qgb2YgYXBwcyB0byBkaXNwbGF5LlxuXHRcdFx0ICogQHBhcmFtIGxhdW5jaE9wdGlvbnMuaW50ZW50IFRoZSBvcHRpb25hbCBpbnRlbnQgdG8gc3VwcG9ydC5cblx0XHRcdCAqIEBwYXJhbSBsYXVuY2hPcHRpb25zLmludGVudHMgVGhlIG9wdGlvbmFsIGludGVudHMgdG8gcGljayBmcm9tLlxuXHRcdFx0ICogQHJldHVybnMgVGhlIHBpY2tlZCBhcHAuXG5cdFx0XHQgKi9cblx0XHRcdHB1YmxpYyBhc3luYyBsYXVuY2hBcHBQaWNrZXIobGF1bmNoT3B0aW9uczoge1xuXHRcdFx0XHRhcHBzPzogQXBwW107XG5cdFx0XHRcdGludGVudD86IFBhcnRpYWw8QXBwSW50ZW50Pjtcblx0XHRcdFx0aW50ZW50cz86IHsgaW50ZW50OiBQYXJ0aWFsPEFwcEludGVudD47IGFwcHM6IEFwcFtdIH1bXTtcblx0XHRcdH0pOiBQcm9taXNlPFxuXHRcdFx0XHR8IHtcblx0XHRcdFx0XHRcdGFwcElkOiBzdHJpbmc7XG5cdFx0XHRcdFx0XHRpbnRlbnQ6IFBhcnRpYWw8QXBwSW50ZW50Pjtcblx0XHRcdFx0ICB9XG5cdFx0XHRcdHwgdW5kZWZpbmVkXG5cdFx0XHQ+IHtcblx0XHRcdFx0Ly8gc2hvdyBtZW51XG5cdFx0XHRcdC8vIGxhdW5jaCBhIG5ldyB3aW5kb3cgYW5kIG9wdGlvbmFsbHkgcGFzcyB0aGUgYXZhaWxhYmxlIGludGVudHMgYXMgY3VzdG9tRGF0YS5hcHBzIGFzIHBhcnQgb2YgdGhlIHdpbmRvdyBvcHRpb25zXG5cdFx0XHRcdC8vIHRoZSB3aW5kb3cgY2FuIHRoZW4gdXNlIHJhaXNlSW50ZW50IGFnYWluc3QgYSBzcGVjaWZpYyBhcHAgKHRoZSBzZWxlY3RlZCBvbmUpLiBUaGlzIGlzIGEgdmVyeSBiYXNpYyBleGFtcGxlLlxuXHRcdFx0XHRjb25zdCBoZWlnaHQgPSBjdXN0b21TZXR0aW5ncz8ucGxhdGZvcm1Qcm92aWRlcj8uaW50ZW50UGlja2VyPy5oZWlnaHQgPz8gNDAwO1xuXHRcdFx0XHRjb25zdCB3aWR0aCA9IGN1c3RvbVNldHRpbmdzPy5wbGF0Zm9ybVByb3ZpZGVyPy5pbnRlbnRQaWNrZXI/LndpZHRoID8/IDQwMDtcblxuXHRcdFx0XHQvLyB0aGlzIGxvZ2ljIHJ1bnMgaW4gdGhlIHByb3ZpZGVyIHNvIHdlIGFyZSB1c2luZyBpdCBhcyBhIHdheSBvZiBkZXRlcm1pbmluZyB0aGUgcm9vdCAoc28gaXQgd29ya3Mgd2l0aCByb290IGhvc3RpbmcgYW5kIHN1YmRpcmVjdG9yeSBiYXNlZCBob3N0aW5nIGlmIGEgdXJsIGlzIG5vdCBwcm92aWRlZClcblx0XHRcdFx0Y29uc3QgdXJsID1cblx0XHRcdFx0XHRjdXN0b21TZXR0aW5ncz8ucGxhdGZvcm1Qcm92aWRlcj8uaW50ZW50UGlja2VyPy51cmwgPz9cblx0XHRcdFx0XHRcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9jb21tb24vd2luZG93cy9pbnRlbnRzL3BpY2tlci5odG1sXCI7XG5cblx0XHRcdFx0Y29uc3Qgd2luT3B0aW9uOiBPcGVuRmluLldpbmRvd0NyZWF0aW9uT3B0aW9ucyA9IHtcblx0XHRcdFx0XHRuYW1lOiBcImludGVudC1waWNrZXJcIixcblx0XHRcdFx0XHRpbmNsdWRlSW5TbmFwc2hvdHM6IGZhbHNlLFxuXHRcdFx0XHRcdGZkYzNJbnRlcm9wQXBpOiBcIjEuMlwiLFxuXHRcdFx0XHRcdGRlZmF1bHRXaWR0aDogd2lkdGgsXG5cdFx0XHRcdFx0ZGVmYXVsdEhlaWdodDogaGVpZ2h0LFxuXHRcdFx0XHRcdHNob3dUYXNrYmFySWNvbjogZmFsc2UsXG5cdFx0XHRcdFx0c2F2ZVdpbmRvd1N0YXRlOiBmYWxzZSxcblx0XHRcdFx0XHRkZWZhdWx0Q2VudGVyZWQ6IHRydWUsXG5cdFx0XHRcdFx0Y3VzdG9tRGF0YToge1xuXHRcdFx0XHRcdFx0YXBwczogbGF1bmNoT3B0aW9ucy5hcHBzLFxuXHRcdFx0XHRcdFx0aW50ZW50OiBsYXVuY2hPcHRpb25zLmludGVudCxcblx0XHRcdFx0XHRcdGludGVudHM6IGxhdW5jaE9wdGlvbnMuaW50ZW50c1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0dXJsLFxuXHRcdFx0XHRcdGZyYW1lOiBmYWxzZSxcblx0XHRcdFx0XHRhdXRvU2hvdzogdHJ1ZSxcblx0XHRcdFx0XHRhbHdheXNPblRvcDogdHJ1ZVxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGNvbnN0IHdpbiA9IGF3YWl0IGZpbi5XaW5kb3cuY3JlYXRlKHdpbk9wdGlvbik7XG5cdFx0XHRcdGNvbnN0IHdlYldpbmRvdyA9IHdpbi5nZXRXZWJXaW5kb3coKTtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuXHRcdFx0XHRcdGNvbnN0IGdldEludGVudFNlbGVjdGlvbiA9ICh3ZWJXaW5kb3cgYXMgYW55KS5nZXRJbnRlbnRTZWxlY3Rpb247XG5cblx0XHRcdFx0XHRpZiAoZ2V0SW50ZW50U2VsZWN0aW9uKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzZWxlY3RlZEFwcElkID0gYXdhaXQgZ2V0SW50ZW50U2VsZWN0aW9uKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc2VsZWN0ZWRBcHBJZCBhcyB7XG5cdFx0XHRcdFx0XHRcdGFwcElkOiBzdHJpbmc7XG5cdFx0XHRcdFx0XHRcdGludGVudDogQXBwSW50ZW50O1xuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoXCJBcHAgZm9yIGludGVudCBub3Qgc2VsZWN0ZWQvbGF1bmNoZWQuXCIsIGxhdW5jaE9wdGlvbnMuaW50ZW50KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvKipcblx0XHRcdCAqIElzIHRoZSBjb25uZWN0aW9uIGZvciB0aGUgc3BlY2lmaWMgaWRlbnRpdHkgYXV0aG9yaXplZC5cblx0XHRcdCAqIEBwYXJhbSBpZGVudGl0eSBUaGUgaWRlbnRpdHkgb2YgdGhlIGNvbm5lY3Rpb24gdG8gY2hlY2suXG5cdFx0XHQgKiBAcGFyYW0gcGF5bG9hZCBUaGUgb3B0aW9uYWwgcGF5bG9hZC5cblx0XHRcdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGNvbm5lY3Rpb24gaXMgYXV0aG9yaXplZC5cblx0XHRcdCAqL1xuXHRcdFx0cHVibGljIGFzeW5jIGlzQ29ubmVjdGlvbkF1dGhvcml6ZWQoaWRlbnRpdHk6IE9wZW5GaW4uSWRlbnRpdHksIHBheWxvYWQ/OiB1bmtub3duKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKFxuXHRcdFx0XHRcdFwiSW50ZXJvcCBjb25uZWN0aW9uIGJlaW5nIG1hZGUgYnkgdGhlIGZvbGxvd2luZyBpZGVudGl0eSB3aXRoIHBheWxvYWQ6XCIsXG5cdFx0XHRcdFx0aWRlbnRpdHksXG5cdFx0XHRcdFx0cGF5bG9hZFxuXHRcdFx0XHQpO1xuXHRcdFx0XHQvLyBwZXJmb3JtIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBjaGVja3MgaGVyZSBpZiByZXF1aXJlZCBhbmQgcmV0dXJuIGZhbHNlIGlmIGl0IHNob3VsZG4ndCBiZSBhbGxvd2VkLlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBJcyB0aGUgYWN0aW9uIGF1dGhvcml6ZWQuXG5cdFx0XHQgKiBAcGFyYW0gYWN0aW9uIFRoZSBhY3Rpb24gdG8gdGVzdCBmb3IgYmVpbmcgYXV0aG9yaXplZC5cblx0XHRcdCAqIEBwYXJhbSBwYXlsb2FkIFRoZSBwYXlsb2FkIHRvIHVzZSBpbiB0aGUgdGVzdC5cblx0XHRcdCAqIEBwYXJhbSBpZGVudGl0eSBUaGUgaWRlbnRpdHkgb2YgdGhlIGNsaWVudCBiZWluZyBhc2tlZCBhYm91dCB0aGUgYWN0aW9uLlxuXHRcdFx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgYWN0aW9uIGlzIGF1dGhvcml6ZWQuXG5cdFx0XHQgKi9cblx0XHRcdHB1YmxpYyBhc3luYyBpc0FjdGlvbkF1dGhvcml6ZWQoXG5cdFx0XHRcdGFjdGlvbjogc3RyaW5nLFxuXHRcdFx0XHRwYXlsb2FkOiB1bmtub3duLFxuXHRcdFx0XHRpZGVudGl0eTogT3BlbkZpbi5DbGllbnRJZGVudGl0eVxuXHRcdFx0KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKFwiSW50ZXJvcCBCcm9rZXIgaXMgYWN0aW9uIGF1dGhvcml6ZWQ6XCIsIGFjdGlvbiwgcGF5bG9hZCwgaWRlbnRpdHkpO1xuXHRcdFx0XHQvLyBwZXJmb3JtIGNoZWNrIGhlcmUgaWYgeW91IHdpc2ggYW5kIHJldHVybiB0cnVlL2ZhbHNlIGFjY29yZGluZ2x5XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvKipcblx0XHRcdCAqIEdldCB0aGUgaW5mb3JtYXRpb24gZm9yIHRoZSBpbnRlbnRzIGJ5IGNvbnRleHQuXG5cdFx0XHQgKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCB0byBnZXQgdGhlIGluZm9ybWF0aW9uIGZvci5cblx0XHRcdCAqIEBwYXJhbSBjb250ZXh0LnR5cGUgVGhlIHR5cGUgb2YgdGhlIGNvbnRleHQuXG5cdFx0XHQgKiBAcGFyYW0gY2xpZW50SWRlbnRpdHkgVGhlIGlkZW50aXR5IG9mIHRoZSBjbGllbnQgdG8gZ2V0IHRoZSBpbmZvcm1hdGlvbiBmcm9tLlxuXHRcdFx0ICogQHJldHVybnMgVGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbnRlbnRzIGZvciB0aGUgY29udGV4dC5cblx0XHRcdCAqL1xuXHRcdFx0cHVibGljIGFzeW5jIGhhbmRsZUluZm9Gb3JJbnRlbnRzQnlDb250ZXh0KFxuXHRcdFx0XHRjb250ZXh0OiB7IHR5cGU6IHN0cmluZyB9LFxuXHRcdFx0XHRjbGllbnRJZGVudGl0eTogT3BlbkZpbi5JZGVudGl0eVxuXHRcdFx0KTogUHJvbWlzZTxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGludGVudDogeyBuYW1lOiBzdHJpbmc7IGRpc3BsYXlOYW1lOiBzdHJpbmcgfTtcblx0XHRcdFx0XHRhcHBzOiB7IG5hbWU6IHN0cmluZzsgYXBwSWQ6IHN0cmluZzsgdGl0bGU6IHN0cmluZyB9W107XG5cdFx0XHRcdH1bXVxuXHRcdFx0PiB7XG5cdFx0XHRcdGNvbnN0IGludGVudHMgPSBhd2FpdCBnZXRJbnRlbnRzQnlDb250ZXh0KGN1c3RvbVNldHRpbmdzPy5hcHBQcm92aWRlciwgY29udGV4dC50eXBlKTtcblxuXHRcdFx0XHRpZiAoaW50ZW50cy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoTk9fQVBQU19GT1VORCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gaW50ZW50cy5tYXAoKGVudHJ5KSA9PiAoe1xuXHRcdFx0XHRcdGludGVudDogZW50cnkuaW50ZW50LFxuXHRcdFx0XHRcdGFwcHM6IGVudHJ5LmFwcHMubWFwKChhcHApID0+ICh7XG5cdFx0XHRcdFx0XHRuYW1lOiBhcHAuYXBwSWQsXG5cdFx0XHRcdFx0XHRhcHBJZDogYXBwLmFwcElkLFxuXHRcdFx0XHRcdFx0dGl0bGU6IGFwcC50aXRsZVxuXHRcdFx0XHRcdH0pKVxuXHRcdFx0XHR9KSk7XG5cdFx0XHR9XG5cblx0XHRcdC8qKlxuXHRcdFx0ICogR2V0IHRoZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGFwcHMgYnkgaW50ZW50LlxuXHRcdFx0ICogQHBhcmFtIGludGVudE9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIHRoZSBpbnRlbnQuXG5cdFx0XHQgKiBAcGFyYW0gaW50ZW50T3B0aW9ucy5uYW1lIFRoZSBuYW1lIG9mIHRoZSBpbnRlbnQuXG5cdFx0XHQgKiBAcGFyYW0gaW50ZW50T3B0aW9ucy5jb250ZXh0IFRoZSBvcHRpb25hbCBjb250ZXh0IGZvciB0aGUgaW50ZW50LlxuXHRcdFx0ICogQHBhcmFtIGludGVudE9wdGlvbnMuY29udGV4dC50eXBlIFRoZSBjb250ZXh0IHR5cGUuXG5cdFx0XHQgKiBAcGFyYW0gY2xpZW50SWRlbnRpdHkgVGhlIGNsaWVudCBpZGVudGl0eSB0byBnZXQgdGhlIGluZm9ybWF0aW9uIGZyb20uXG5cdFx0XHQgKiBAcmV0dXJucyBUaGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGludGVudHMgZm9yIHRoZSBjb250ZXh0LlxuXHRcdFx0ICovXG5cdFx0XHRwdWJsaWMgYXN5bmMgaGFuZGxlSW5mb0ZvckludGVudChcblx0XHRcdFx0aW50ZW50T3B0aW9uczogeyBuYW1lOiBzdHJpbmc7IGNvbnRleHQ/OiB7IHR5cGU6IHN0cmluZyB9IH0sXG5cdFx0XHRcdGNsaWVudElkZW50aXR5OiBPcGVuRmluLklkZW50aXR5XG5cdFx0XHQpOiBQcm9taXNlPHtcblx0XHRcdFx0aW50ZW50OiB7IG5hbWU6IHN0cmluZzsgZGlzcGxheU5hbWU6IHN0cmluZyB9O1xuXHRcdFx0XHRhcHBzOiB7IG5hbWU6IHN0cmluZzsgYXBwSWQ6IHN0cmluZzsgdGl0bGU6IHN0cmluZyB9W107XG5cdFx0XHR9PiB7XG5cdFx0XHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldEludGVudChcblx0XHRcdFx0XHRjdXN0b21TZXR0aW5ncz8uYXBwUHJvdmlkZXIsXG5cdFx0XHRcdFx0aW50ZW50T3B0aW9ucy5uYW1lLFxuXHRcdFx0XHRcdGludGVudE9wdGlvbnMuY29udGV4dD8udHlwZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoIXJlc3VsdCkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihOT19BUFBTX0ZPVU5EKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0aW50ZW50OiByZXN1bHQuaW50ZW50LFxuXHRcdFx0XHRcdGFwcHM6IHJlc3VsdC5hcHBzLm1hcCgoYXBwKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBhcHBFbnRyeSA9IHtcblx0XHRcdFx0XHRcdFx0bmFtZTogYXBwLmFwcElkLFxuXHRcdFx0XHRcdFx0XHRhcHBJZDogYXBwLmFwcElkLFxuXHRcdFx0XHRcdFx0XHR0aXRsZTogYXBwLnRpdGxlXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0cmV0dXJuIGFwcEVudHJ5O1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdC8qKlxuXHRcdFx0ICogSGFuZGxlIGFuZCBpbnRlbnQgZm9yIHRoZSBmaXJlZCBjb250ZXh0LlxuXHRcdFx0ICogQHBhcmFtIGNvbnRleHRGb3JJbnRlbnQgVGhlIGNvbnRleHQgZm9yIHRoZSBpbnRlbnQuXG5cdFx0XHQgKiBAcGFyYW0gY29udGV4dEZvckludGVudC50eXBlIFRodCB0eXBlIG9mIHRoZSBjb250ZXh0LlxuXHRcdFx0ICogQHBhcmFtIGNvbnRleHRGb3JJbnRlbnQubWV0YWRhdGEgVGhlIG1ldGFkYXRhIGZvciB0aGUgY29udGV4dC5cblx0XHRcdCAqIEBwYXJhbSBjb250ZXh0Rm9ySW50ZW50Lm1ldGFkYXRhLnRhcmdldCBUaGUgb3B0aW9uYWwgdGFyZ2V0IGZvciB0aGUgY29udGV4dC5cblx0XHRcdCAqIEBwYXJhbSBjbGllbnRJZGVudGl0eSBUaGUgaWRlbnRpdHkgb2YgdGhlIGNsaWVudCB0byBoYW5kbGUgdGhlIGludGVudC5cblx0XHRcdCAqIEByZXR1cm5zIFRoZSBhcHBsaWNhdGlvbiBkZXRhaWxzIGZvciB0aGUgYXBwIHRoYXQgaGFuZGxlZCB0aGUgaW50ZW50LlxuXHRcdFx0ICovXG5cdFx0XHRwdWJsaWMgYXN5bmMgaGFuZGxlRmlyZWRJbnRlbnRGb3JDb250ZXh0KFxuXHRcdFx0XHRjb250ZXh0Rm9ySW50ZW50OiB7IHR5cGU6IHN0cmluZzsgbWV0YWRhdGE/OiB7IHRhcmdldD86IHN0cmluZyB9IH0sXG5cdFx0XHRcdGNsaWVudElkZW50aXR5OiBPcGVuRmluLklkZW50aXR5XG5cdFx0XHQpOiBQcm9taXNlPFxuXHRcdFx0XHR8IHtcblx0XHRcdFx0XHRcdHNvdXJjZTogc3RyaW5nO1xuXHRcdFx0XHRcdFx0dmVyc2lvbj86IHN0cmluZztcblx0XHRcdFx0ICB9XG5cdFx0XHRcdHwgdW5kZWZpbmVkXG5cdFx0XHQ+IHtcblx0XHRcdFx0Y29uc3QgYXZhaWxhYmxlSW50ZW50cyA9IGF3YWl0IGdldEludGVudHNCeUNvbnRleHQoXG5cdFx0XHRcdFx0Y3VzdG9tU2V0dGluZ3M/LmFwcFByb3ZpZGVyLFxuXHRcdFx0XHRcdGNvbnRleHRGb3JJbnRlbnQudHlwZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoYXZhaWxhYmxlSW50ZW50cy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoTk9fQVBQU19GT1VORCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgaW50ZW50OiBPcGVuRmluLkludGVudCAmIHsgZGlzcGxheU5hbWU/OiBzdHJpbmcgfSA9IHtcblx0XHRcdFx0XHRjb250ZXh0OiBjb250ZXh0Rm9ySW50ZW50LFxuXHRcdFx0XHRcdG5hbWU6IFwiXCIsXG5cdFx0XHRcdFx0ZGlzcGxheU5hbWU6IHVuZGVmaW5lZFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRsZXQgdGFyZ2V0QXBwOiBBcHAgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdGxldCB0YXJnZXRBcHBJbnRlbnQ7XG5cdFx0XHRcdGxldCB0YXJnZXRBcHBJbnRlbnRDb3VudCA9IDA7XG5cblx0XHRcdFx0aWYgKGNvbnRleHRGb3JJbnRlbnQubWV0YWRhdGE/LnRhcmdldCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGFyZ2V0QXBwID0gYXdhaXQgZ2V0QXBwKGN1c3RvbVNldHRpbmdzPy5hcHBQcm92aWRlciwgY29udGV4dEZvckludGVudC5tZXRhZGF0YT8udGFyZ2V0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0YXJnZXRBcHAgIT09IHVuZGVmaW5lZCAmJiBBcnJheS5pc0FycmF5KHRhcmdldEFwcC5pbnRlbnRzKSkge1xuXHRcdFx0XHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiB0YXJnZXRBcHAuaW50ZW50cykge1xuXHRcdFx0XHRcdFx0dGFyZ2V0QXBwSW50ZW50ID0gZWxlbWVudDtcblx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0QXJyYXkuaXNBcnJheSh0YXJnZXRBcHBJbnRlbnQuY29udGV4dHMpICYmXG5cdFx0XHRcdFx0XHRcdHRhcmdldEFwcEludGVudC5jb250ZXh0cy5pbmNsdWRlcyhjb250ZXh0Rm9ySW50ZW50LnR5cGUpXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0QXBwSW50ZW50Q291bnQrKztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodGFyZ2V0QXBwICE9PSB1bmRlZmluZWQgJiYgdGFyZ2V0QXBwSW50ZW50ICE9PSB1bmRlZmluZWQgJiYgdGFyZ2V0QXBwSW50ZW50Q291bnQgPT09IDEpIHtcblx0XHRcdFx0XHQvLyBhIHByZWZlcnJlZCBuYW1lIGZvciBhbiBhcHAgd2FzIGdpdmVuIHdpdGggdGhlIGNvbnRleHQgb2JqZWN0XG5cdFx0XHRcdFx0Ly8gdGhlIGFwcCBleGlzdGVkIGFuZCBpdCBzdXBwb3J0ZWQgdGhlIGNvbnRleHQgdHlwZSBhbmQgdGhlcmUgd2FzIG9ubHkgb25lIGludGVudCB0aGF0IHN1cHBvcnRlZFxuXHRcdFx0XHRcdC8vIHRoYXQgY29udGV4dCB0eXBlLiBMYXVuY2ggdGhlIGFwcCB3aXRoIHRoYXQgaW50ZW50IG90aGVyd2lzZSBwcmVzZW50IHRoZSB1c2VyIHdpdGggYSBsaXN0IG9mXG5cdFx0XHRcdFx0Ly8gZXZlcnl0aGluZyB0aGF0IHN1cHBvcnRzIHRoYXQgY29udGV4dCB0eXBlXG5cdFx0XHRcdFx0aW50ZW50Lm5hbWUgPSB0YXJnZXRBcHBJbnRlbnQubmFtZTtcblx0XHRcdFx0XHRpbnRlbnQuZGlzcGxheU5hbWUgPSB0YXJnZXRBcHBJbnRlbnQubmFtZTtcblx0XHRcdFx0XHRjb25zdCBpbnRlbnRSZXNvbHZlciA9IGF3YWl0IHRoaXMubGF1bmNoQXBwV2l0aEludGVudCh0YXJnZXRBcHAsIGludGVudCk7XG5cdFx0XHRcdFx0aWYgKCFpbnRlbnRSZXNvbHZlcikge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKE5PX0FQUFNfRk9VTkQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gaW50ZW50UmVzb2x2ZXI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoYXZhaWxhYmxlSW50ZW50cy5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0XHRpbnRlbnQubmFtZSA9IGF2YWlsYWJsZUludGVudHNbMF0uaW50ZW50Lm5hbWU7XG5cdFx0XHRcdFx0aW50ZW50LmRpc3BsYXlOYW1lID0gYXZhaWxhYmxlSW50ZW50c1swXS5pbnRlbnQubmFtZTtcblx0XHRcdFx0XHRpZiAoYXZhaWxhYmxlSW50ZW50c1swXS5hcHBzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgaW50ZW50UmVzb2x2ZXIgPSBhd2FpdCB0aGlzLmxhdW5jaEFwcFdpdGhJbnRlbnQoYXZhaWxhYmxlSW50ZW50c1swXS5hcHBzWzBdLCBpbnRlbnQpO1xuXHRcdFx0XHRcdFx0aWYgKCFpbnRlbnRSZXNvbHZlcikge1xuXHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoTk9fQVBQU19GT1VORCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4gaW50ZW50UmVzb2x2ZXI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChhdmFpbGFibGVJbnRlbnRzWzBdLmFwcHMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgdXNlclNlbGVjdGlvbiA9IGF3YWl0IHRoaXMubGF1bmNoQXBwUGlja2VyKHtcblx0XHRcdFx0XHRcdFx0XHRhcHBzOiBhdmFpbGFibGVJbnRlbnRzWzBdLmFwcHMsXG5cdFx0XHRcdFx0XHRcdFx0aW50ZW50XG5cdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdGlmICh1c2VyU2VsZWN0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc2VsZWN0ZWRBcHAgPSBhdmFpbGFibGVJbnRlbnRzWzBdLmFwcHMuZmluZChcblx0XHRcdFx0XHRcdFx0XHRcdChlbnRyeSkgPT4gZW50cnkuYXBwSWQgPT09IHVzZXJTZWxlY3Rpb24uYXBwSWQgJiYgZW50cnkuYXBwSWQgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHNlbGVjdGVkQXBwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBpbnRlbnRSZXNvbHZlciA9IGF3YWl0IHRoaXMubGF1bmNoQXBwV2l0aEludGVudChzZWxlY3RlZEFwcCwgaW50ZW50KTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICghaW50ZW50UmVzb2x2ZXIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKE5PX0FQUFNfRk9VTkQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGludGVudFJlc29sdmVyO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKFwiV2Ugd2VyZSByZXR1cm5lZCBhIG5vbiBleGlzdGVudCBhcHBJZCB0byBsYXVuY2ggd2l0aCB0aGUgaW50ZW50LlwiKTtcblx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKE5PX0FQUFNfRk9VTkQpO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoXCJBcHAgZm9yIGludGVudCBieSBjb250ZXh0IG5vdCBzZWxlY3RlZC9sYXVuY2hlZC5cIiwgaW50ZW50KTtcblx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFJFU09MVkVSX1RJTUVPVVQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0Y29uc3QgdXNlclNlbGVjdGlvbiA9IGF3YWl0IHRoaXMubGF1bmNoQXBwUGlja2VyKHtcblx0XHRcdFx0XHRcdFx0aW50ZW50LFxuXHRcdFx0XHRcdFx0XHRpbnRlbnRzOiBhdmFpbGFibGVJbnRlbnRzXG5cdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0aWYgKHVzZXJTZWxlY3Rpb24pIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc2VsZWN0ZWRJbnRlbnQgPSBhdmFpbGFibGVJbnRlbnRzLmZpbmQoXG5cdFx0XHRcdFx0XHRcdFx0KGVudHJ5KSA9PiBlbnRyeS5pbnRlbnQubmFtZSA9PT0gdXNlclNlbGVjdGlvbi5pbnRlbnQubmFtZVxuXHRcdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRcdGlmIChzZWxlY3RlZEludGVudCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcihcblx0XHRcdFx0XHRcdFx0XHRcdFwiVGhlIHVzZXIgc2VsZWN0ZWQgYW4gaW50ZW50IGJ1dCBpdCdzIG5hbWUgZG9lc24ndCBtYXRjaCB0aGUgYXZhaWxhYmxlIGludGVudHMuXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHR1c2VyU2VsZWN0aW9uXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoTk9fQVBQU19GT1VORCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Y29uc3Qgc2VsZWN0ZWRBcHAgPSBzZWxlY3RlZEludGVudC5hcHBzLmZpbmQoXG5cdFx0XHRcdFx0XHRcdFx0KGVudHJ5KSA9PiBlbnRyeS5hcHBJZCA9PT0gdXNlclNlbGVjdGlvbi5hcHBJZCAmJiBlbnRyeS5hcHBJZCAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdGlmIChzZWxlY3RlZEFwcCkge1xuXHRcdFx0XHRcdFx0XHRcdGludGVudC5kaXNwbGF5TmFtZSA9IHVzZXJTZWxlY3Rpb24uaW50ZW50LmRpc3BsYXlOYW1lO1xuXHRcdFx0XHRcdFx0XHRcdGludGVudC5uYW1lID0gdXNlclNlbGVjdGlvbi5pbnRlbnQ/Lm5hbWUgPz8gXCJcIjtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBpbnRlbnRSZXNvbHZlciA9IGF3YWl0IHRoaXMubGF1bmNoQXBwV2l0aEludGVudChzZWxlY3RlZEFwcCwgaW50ZW50KTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIWludGVudFJlc29sdmVyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoTk9fQVBQU19GT1VORCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBpbnRlbnRSZXNvbHZlcjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcihcIldlIHdlcmUgcmV0dXJuZWQgYSBub24gZXhpc3RlbnQgYXBwSWQgdG8gbGF1bmNoIHdpdGggdGhlIGludGVudC5cIik7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoTk9fQVBQU19GT1VORCk7XG5cdFx0XHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKFwiQXBwIGZvciBpbnRlbnQgYnkgY29udGV4dCBub3Qgc2VsZWN0ZWQvbGF1bmNoZWQuXCIsIGludGVudCk7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoUkVTT0xWRVJfVElNRU9VVCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8qKlxuXHRcdFx0ICogSGFuZGxlIGFuIGludGVudCB0aGF0IHdhcyBmaXJlZC5cblx0XHRcdCAqIEBwYXJhbSBpbnRlbnQgVGhlIGludGVudCB0aGF0IHdhcyBmaXJlZC5cblx0XHRcdCAqIEByZXR1cm5zIFRoZSBzb3VyY2UgYW5kIHZlcnNpb24gb2YgdGhlIGFwcGxpY2F0aW9uIHRoYXQgd2FzIG9wZW5lZC5cblx0XHRcdCAqL1xuXHRcdFx0cHVibGljIGFzeW5jIGhhbmRsZUZpcmVkSW50ZW50KGludGVudDogT3BlbkZpbi5JbnRlbnQpOiBQcm9taXNlPFxuXHRcdFx0XHR8IHtcblx0XHRcdFx0XHRcdHNvdXJjZTogc3RyaW5nO1xuXHRcdFx0XHRcdFx0dmVyc2lvbj86IHN0cmluZztcblx0XHRcdFx0ICB9XG5cdFx0XHRcdHwgdW5kZWZpbmVkXG5cdFx0XHQ+IHtcblx0XHRcdFx0Y29uc29sZS5sb2coXCJSZWNlaXZlZCByZXF1ZXN0IGZvciBhIHJhaXNlZCBpbnRlbnQ6XCIsIGludGVudCk7XG5cdFx0XHRcdGxldCBpbnRlbnRBcHBzID0gYXdhaXQgZ2V0QXBwc0J5SW50ZW50KGN1c3RvbVNldHRpbmdzPy5hcHBQcm92aWRlciwgaW50ZW50Lm5hbWUpO1xuXHRcdFx0XHRsZXQgdGFyZ2V0QXBwOiBBcHAgfCB1bmRlZmluZWQ7XG5cblx0XHRcdFx0aWYgKGludGVudC5tZXRhZGF0YT8udGFyZ2V0KSB7XG5cdFx0XHRcdFx0dGFyZ2V0QXBwID0gYXdhaXQgZ2V0QXBwKGN1c3RvbVNldHRpbmdzPy5hcHBQcm92aWRlciwgaW50ZW50Lm1ldGFkYXRhLnRhcmdldCBhcyBzdHJpbmcpO1xuXHRcdFx0XHRcdGlmICh0YXJnZXRBcHAgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0Ly8gY2hlY2sgdG8gc2VlIGlmIHlvdSBoYXZlIGJlZW4gcGFzc2VkIGEgc3BlY2lmaWMgaWRlbnRpdHkgZm9yIGEgdmlldyB0aGF0IHNob3VsZCBiZSB0YXJnZXRlZCBpbnN0ZWFkIG9mIGFuIGFwcFxuXHRcdFx0XHRcdFx0Y29uc3QgdGFyZ2V0SWRlbnRpdHkgPSBhd2FpdCB0aGlzLmdldFRhcmdldElkZW50aXR5KGludGVudC5tZXRhZGF0YT8udGFyZ2V0IGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0XHRpZiAodGFyZ2V0SWRlbnRpdHkpIHtcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coXG5cdFx0XHRcdFx0XHRcdFx0XCJXZSB3ZXJlIHBhc3NlZCBhIHZpZXcgaWRlbnRpdHkgaW5zdGVhZCBvZiBhbiBhcHAgZW50cnkgd2hlbiByYWlzaW5nL2ZpcmluZyBhbiBpbnRlbnQuIFdlIHdpbGwgZmlyZSB0aGUgaW50ZW50IGF0IHRoYXQgYXMgaXQgZXhpc3RzIGFuZCBubyBhcHAgZW50cnkgZXhpc3RzIHdpdGggdGhhdCBuYW1lLjpcIixcblx0XHRcdFx0XHRcdFx0XHR0YXJnZXRJZGVudGl0eSxcblx0XHRcdFx0XHRcdFx0XHRpbnRlbnRcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0YXdhaXQgc3VwZXIuc2V0SW50ZW50VGFyZ2V0KGludGVudCwgdGFyZ2V0SWRlbnRpdHkpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdHNvdXJjZTogdGFyZ2V0SWRlbnRpdHkubmFtZVxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChpbnRlbnRBcHBzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKFwiTm8gYXBwcyBzdXBwb3J0IHRoaXMgaW50ZW50LlwiKTtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoTk9fQVBQU19GT1VORCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodGFyZ2V0QXBwICE9PSB1bmRlZmluZWQgJiYgaW50ZW50QXBwcy5pbmNsdWRlcyh0YXJnZXRBcHApKSB7XG5cdFx0XHRcdFx0Y29uc29sZS5sb2coXCJBc3NpZ25pbmcgc2VsZWN0ZWQgYXBwbGljYXRpb24gd2l0aCBpbnRlbnQuXCIsIGludGVudCk7XG5cdFx0XHRcdFx0aW50ZW50QXBwcyA9IFt0YXJnZXRBcHBdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGludGVudEFwcHMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdFx0Ly8gaGFuZGxlIHNpbmdsZSBlbnRyeVxuXHRcdFx0XHRcdGNvbnN0IGludGVudFJlc29sdmVyID0gYXdhaXQgdGhpcy5sYXVuY2hBcHBXaXRoSW50ZW50KGludGVudEFwcHNbMF0sIGludGVudCk7XG5cdFx0XHRcdFx0aWYgKCFpbnRlbnRSZXNvbHZlcikge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKE5PX0FQUFNfRk9VTkQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gaW50ZW50UmVzb2x2ZXI7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gc2hvdyBtZW51XG5cdFx0XHRcdC8vIGxhdW5jaCBhIG5ldyB3aW5kb3cgYW5kIG9wdGlvbmFsbHkgcGFzcyB0aGUgYXZhaWxhYmxlIGludGVudHMgYXMgY3VzdG9tRGF0YS5hcHBzIGFzIHBhcnQgb2YgdGhlIHdpbmRvdyBvcHRpb25zXG5cdFx0XHRcdC8vIHRoZSB3aW5kb3cgY2FuIHRoZW4gdXNlIHJhaXNlSW50ZW50IGFnYWluc3QgYSBzcGVjaWZpYyBhcHAgKHRoZSBzZWxlY3RlZCBvbmUpLiBUaGlzIGlzIGEgdmVyeSBiYXNpYyBleGFtcGxlLlxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGNvbnN0IHVzZXJTZWxlY3Rpb24gPSBhd2FpdCB0aGlzLmxhdW5jaEFwcFBpY2tlcih7XG5cdFx0XHRcdFx0XHRhcHBzOiBpbnRlbnRBcHBzLFxuXHRcdFx0XHRcdFx0aW50ZW50XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0aWYgKGludGVudEFwcHMgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKFwiV2Ugc2hvdWxkIGhhdmUgYSBsaXN0IG9mIGFwcHMgdG8gc2VhcmNoIGZyb20uXCIpO1xuXHRcdFx0XHRcdFx0aW50ZW50QXBwcyA9IFtdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBzZWxlY3RlZEFwcCA9IGludGVudEFwcHMuZmluZChcblx0XHRcdFx0XHRcdChlbnRyeSkgPT4gZW50cnkuYXBwSWQgPT09IHVzZXJTZWxlY3Rpb24/LmFwcElkICYmIGVudHJ5LmFwcElkICE9PSB1bmRlZmluZWRcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGlmIChzZWxlY3RlZEFwcCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgaW50ZW50UmVzb2x2ZXIgPSBhd2FpdCB0aGlzLmxhdW5jaEFwcFdpdGhJbnRlbnQoc2VsZWN0ZWRBcHAsIGludGVudCk7XG5cdFx0XHRcdFx0XHRpZiAoIWludGVudFJlc29sdmVyKSB7XG5cdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihOT19BUFBTX0ZPVU5EKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybiBpbnRlbnRSZXNvbHZlcjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihcIldlIHdlcmUgcmV0dXJuZWQgYSBub24gZXhpc3RlbnQgYXBwSWQgdG8gbGF1bmNoIHdpdGggdGhlIGludGVudC5cIik7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKE5PX0FQUFNfRk9VTkQpO1xuXHRcdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKFwiQXBwIGZvciBpbnRlbnQgbm90IHNlbGVjdGVkL2xhdW5jaGVkLlwiLCBpbnRlbnQpO1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihSRVNPTFZFUl9USU1FT1VUKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG59XG5cbi8qKlxuICogTGF1bmNoIGFuIGFwcGxpY2F0aW9uIGFzIGEgdmlldy5cbiAqIEBwYXJhbSB2aWV3QXBwIFRoZSBhcHBsaWNhdGlvbiB0byBsYXVuY2ggYXMgYSB2aWV3LlxuICogQHJldHVybnMgVGhlIGlkZW50aXR5IG9mIHRoZSB2aWV3IHRoYXQgd2FzIGxhdW5jaGVkLlxuICovXG5hc3luYyBmdW5jdGlvbiBsYXVuY2hWaWV3KHZpZXdBcHA6IEFwcCk6IFByb21pc2U8T3BlbkZpbi5JZGVudGl0eSB8IHVuZGVmaW5lZD4ge1xuXHRpZiAoIXZpZXdBcHApIHtcblx0XHRjb25zb2xlLndhcm4oXCJObyBhcHAgd2FzIHBhc3NlZCB0byBsYXVuY2hWaWV3XCIpO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICh2aWV3QXBwLm1hbmlmZXN0VHlwZSAhPT0gXCJ2aWV3XCIgJiYgdmlld0FwcC5tYW5pZmVzdFR5cGUgIT09IFwiaW5saW5lLXZpZXdcIikge1xuXHRcdGNvbnNvbGUud2FybihcIlRoZSBhcHAgcGFzc2VkIHdhcyBub3Qgb2YgbWFuaWZlc3RUeXBlIHZpZXcgb3IgaW5saW5lLXZpZXcuXCIpO1xuXHRcdHJldHVybjtcblx0fVxuXHRsZXQgbWFuaWZlc3Q6IE9wZW5GaW4uVmlld09wdGlvbnM7XG5cblx0aWYgKHZpZXdBcHAubWFuaWZlc3RUeXBlID09PSBcInZpZXdcIikge1xuXHRcdGlmICghdmlld0FwcC5tYW5pZmVzdCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBtYW5pZmVzdFJlc3BvbnNlID0gYXdhaXQgZmV0Y2godmlld0FwcC5tYW5pZmVzdCk7XG5cdFx0bWFuaWZlc3QgPSBhd2FpdCBtYW5pZmVzdFJlc3BvbnNlLmpzb24oKTtcblx0fSBlbHNlIHtcblx0XHQvLyBjb252ZXJzaW9uIGJlY2F1c2Ugb2YgbWFuaWZlc3RUeXBlLiBJbiBtb3N0IHVzZSBjYXNlcyBtYW5pZmVzdCBpcyBhbHdheXMgYSBwYXRoIHRvIGFuIGV4ZWN1dGFibGUgb3IgdG8gYSBtYW5pZmVzdCBmaWxlLiBGb3Igdmlld3Mgd2UgYXJlIGRlbW9uc3RyYXRpbmcgaG93IGl0IGNvdWxkIGJlIHVzZWRcblx0XHQvLyBmb3IgcGFzc2luZyB0aGUgbWFuaWZlc3QgaW5saW5lXG5cdFx0bWFuaWZlc3QgPSB2aWV3QXBwLm1hbmlmZXN0IGFzIHVua25vd24gYXMgT3BlbkZpbi5WaWV3T3B0aW9ucztcblx0fVxuXG5cdGNvbnN0IG5hbWUgPSBtYW5pZmVzdC5uYW1lO1xuXHRsZXQgaWRlbnRpdHkgPSB7IHV1aWQ6IGZpbi5tZS5pZGVudGl0eS51dWlkLCBuYW1lIH07XG5cdGNvbnN0IHdhc05hbWVTcGVjaWZpZWQgPSBuYW1lICE9PSB1bmRlZmluZWQ7XG5cdGxldCB2aWV3RXhpc3RzID0gZmFsc2U7XG5cblx0aWYgKHdhc05hbWVTcGVjaWZpZWQpIHtcblx0XHR2aWV3RXhpc3RzID0gYXdhaXQgZG9lc1ZpZXdFeGlzdChpZGVudGl0eSk7XG5cdH1cblxuXHRpZiAoIXZpZXdFeGlzdHMpIHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgcGxhdGZvcm0gPSBnZXRDdXJyZW50U3luYygpO1xuXHRcdFx0Y29uc3QgY3JlYXRlZFZpZXcgPSBhd2FpdCBwbGF0Zm9ybS5jcmVhdGVWaWV3KG1hbmlmZXN0KTtcblx0XHRcdGlkZW50aXR5ID0gY3JlYXRlZFZpZXcuaWRlbnRpdHk7XG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKFwiRXJyb3IgbGF1bmNoaW5nIHZpZXdcIiwgZXJyKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGlkZW50aXR5O1xufVxuXG4vKipcbiAqIExhdW5jaCBhIHNuYXBzaG90IGJhc2VkIGFwcGxpY2F0aW9uLlxuICogQHBhcmFtIHNuYXBzaG90QXBwIFRoZSBzbmFwc2hvdCBhcHBsaWNhdGlvbiB0byBsYXVuY2guXG4gKiBAcmV0dXJucyBUaGUgaWRlbnRpdHkgb2YgdGhlIHZpZXdzIGluIHRoZSBzbmFwc2hvdCB0aGF0IHdhcyBsYXVuY2hlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gbGF1bmNoU25hcHNob3Qoc25hcHNob3RBcHA6IEFwcCk6IFByb21pc2U8T3BlbkZpbi5JZGVudGl0eVtdIHwgdW5kZWZpbmVkPiB7XG5cdGlmICghc25hcHNob3RBcHApIHtcblx0XHRjb25zb2xlLndhcm4oXCJObyBhcHAgd2FzIHBhc3NlZCB0byBsYXVuY2hTbmFwc2hvdFwiKTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAoc25hcHNob3RBcHAubWFuaWZlc3RUeXBlICE9PSBcInNuYXBzaG90XCIpIHtcblx0XHRjb25zb2xlLndhcm4oXCJUaGUgYXBwIHBhc3NlZCB3YXMgbm90IG9mIG1hbmlmZXN0VHlwZSBzbmFwc2hvdC5cIik7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKCFzbmFwc2hvdEFwcC5tYW5pZmVzdCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IG1hbmlmZXN0UmVzcG9uc2UgPSBhd2FpdCBmZXRjaChzbmFwc2hvdEFwcC5tYW5pZmVzdCk7XG5cdGNvbnN0IG1hbmlmZXN0OiBCcm93c2VyU25hcHNob3QgPSBhd2FpdCBtYW5pZmVzdFJlc3BvbnNlLmpzb24oKTtcblxuXHRjb25zdCB3aW5kb3dzID0gbWFuaWZlc3Qud2luZG93cztcblx0Y29uc3Qgd2luZG93c1RvQ3JlYXRlID0gW107XG5cblx0aWYgKEFycmF5LmlzQXJyYXkod2luZG93cykpIHtcblx0XHRjb25zdCB3aW5kb3dzVG9HYXRoZXI6IHN0cmluZ1tdID0gW107XG5cdFx0Y29uc3Qgdmlld0lkczogT3BlbkZpbi5JZGVudGl0eVtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IHdpbiBvZiB3aW5kb3dzKSB7XG5cdFx0XHRjb25zdCBnZXRWaWV3SWRzRm9yTGF5b3V0ID0gZmluZFZpZXdOYW1lcyh3aW4ubGF5b3V0IGFzIFBhZ2VMYXlvdXQpO1xuXHRcdFx0aWYgKGdldFZpZXdJZHNGb3JMYXlvdXQubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdGNvbnN0IHV1aWQgPSByYW5kb21VVUlEKCk7XG5cdFx0XHRcdGNvbnN0IG5hbWUgPSBgaW50ZXJuYWwtZ2VuZXJhdGVkLXdpbmRvdy0ke3V1aWR9YDtcblx0XHRcdFx0d2luLm5hbWUgPSBuYW1lO1xuXHRcdFx0XHR3aW5kb3dzVG9DcmVhdGUucHVzaCh3aW4pO1xuXHRcdFx0XHR3aW5kb3dzVG9HYXRoZXIucHVzaChuYW1lKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIHdlIGhhdmUgdmlld3MuIEdyYWIgdGhlIGZpcnN0IG9uZSB0byB2YWxpZGF0ZSBleGlzdGVuY2UuXG5cdFx0XHRcdGNvbnN0IHZpZXdJZCA9IGdldFZpZXdJZHNGb3JMYXlvdXRbMF07XG5cblx0XHRcdFx0Zm9yIChjb25zdCBlbnRyeSBvZiBnZXRWaWV3SWRzRm9yTGF5b3V0KSB7XG5cdFx0XHRcdFx0dmlld0lkcy5wdXNoKHsgbmFtZTogZW50cnksIHV1aWQ6IGZpbi5tZS5pZGVudGl0eS51dWlkIH0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gdGhlc2Ugdmlld3Mgc2hvdWxkIGJlIHJlYWRvbmx5IGFuZCBjYW5ub3QgYmUgcHVsbGVkIG91dCBvZiB0aGUgcGFnZSBvciBjbG9zZWRcblx0XHRcdFx0aWYgKCEoYXdhaXQgZG9lc1ZpZXdFeGlzdCh7IG5hbWU6IHZpZXdJZCwgdXVpZDogZmluLm1lLmlkZW50aXR5LnV1aWQgfSkpKSB7XG5cdFx0XHRcdFx0d2luZG93c1RvQ3JlYXRlLnB1c2god2luKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdG1hbmlmZXN0LndpbmRvd3MgPSB3aW5kb3dzVG9DcmVhdGU7XG5cblx0XHRpZiAod2luZG93c1RvQ3JlYXRlLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IHBsYXRmb3JtID0gZ2V0Q3VycmVudFN5bmMoKTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IHBsYXRmb3JtLmFwcGx5U25hcHNob3QobWFuaWZlc3QpO1xuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoXCJFcnJvciB0cnlpbmcgdG8gYXBwbHkgc25hcHNob3QgdG8gcGxhdGZvcm0uXCIsIGVyciwgbWFuaWZlc3QpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAoY29uc3Qgd2luZG93IG9mIHdpbmRvd3NUb0dhdGhlcikge1xuXHRcdFx0Y29uc3Qgd2luZG93Vmlld0lkcyA9IGF3YWl0IGdldFZpZXdJZGVudGl0aWVzKHsgbmFtZTogd2luZG93LCB1dWlkOiBmaW4ubWUuaWRlbnRpdHkudXVpZCB9KTtcblx0XHRcdHZpZXdJZHMucHVzaCguLi53aW5kb3dWaWV3SWRzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdmlld0lkcztcblx0fVxufVxuXG4vKipcbiAqIEZpbmQgdGhlIG5hbWVzIG9mIGFsbCB0aGUgdmlld3MgaW4gdGhlIGxheW91dC5cbiAqIEBwYXJhbSBsYXlvdXQgVGhlIGxheW91dCB0byBmaW5kIHRoZSB2aWV3IG5hbWVzIGluLlxuICogQHJldHVybnMgVGhlIGxpc3Qgb2YgdmlldyBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gZmluZFZpZXdOYW1lcyhsYXlvdXQ6IFBhZ2VMYXlvdXQpOiBzdHJpbmdbXSB7XG5cdGNvbnN0IGNvbGxlY3RlZE5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdEpTT04uc3RyaW5naWZ5KGxheW91dCwgKF8sIG5lc3RlZFZhbHVlKSA9PiB7XG5cdFx0Ly8gY2hlY2sgdG8gZW5zdXJlIHRoYXQgd2UgaGF2ZSBhIG5hbWUgZmllbGQgYW5kIHRoYXQgd2UgYWxzbyBoYXZlIGEgdXJsIGZpZWxkIGluIHRoaXMgb2JqZWN0IChpbiBjYXNlIG5hbWUgd2FzIGFkZGVkIHRvIGEgcmFuZG9tIHBhcnQgb2YgdGhlIGxheW91dClcblx0XHRpZiAobmVzdGVkVmFsdWU/Lm5hbWU/Lmxlbmd0aCAmJiBuZXN0ZWRWYWx1ZS51cmwgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29sbGVjdGVkTmFtZXMucHVzaChuZXN0ZWRWYWx1ZS5uYW1lIGFzIHN0cmluZyk7XG5cdFx0fVxuXHRcdHJldHVybiBuZXN0ZWRWYWx1ZSBhcyB1bmtub3duO1xuXHR9KTtcblxuXHRyZXR1cm4gY29sbGVjdGVkTmFtZXM7XG59XG5cbi8qKlxuICogRG9lcyB0aGUgdmlldyBleGlzdD9cbiAqIEBwYXJhbSBpZGVudGl0eSBUaGUgaWRlbnRpdHkgb2YgdGhlIHZpZXcgdG8gZmluZC5cbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHZpZXcgZXhpc3RzLlxuICovXG5hc3luYyBmdW5jdGlvbiBkb2VzVmlld0V4aXN0KGlkZW50aXR5OiBPcGVuRmluLklkZW50aXR5KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdGNvbnN0IHZpZXcgPSBmaW4uVmlldy53cmFwU3luYyhpZGVudGl0eSk7XG5cdGxldCBleGlzdHMgPSBmYWxzZTtcblx0dHJ5IHtcblx0XHRhd2FpdCB2aWV3LmdldEluZm8oKTtcblx0XHRjb25zdCB2aWV3SG9zdCA9IGF3YWl0IHZpZXcuZ2V0Q3VycmVudFdpbmRvdygpO1xuXHRcdGF3YWl0IHZpZXdIb3N0LmJyaW5nVG9Gcm9udCgpO1xuXHRcdGV4aXN0cyA9IHRydWU7XG5cdH0gY2F0Y2gge1xuXHRcdGV4aXN0cyA9IGZhbHNlO1xuXHR9XG5cdHJldHVybiBleGlzdHM7XG59XG5cbi8qKlxuICogR2V0IGFsbCB0aGUgdmlldyBpZGVudGl0aWVzIGZvciB0aGUgc3BlY2lmaWVkIHdpbmRvdy5cbiAqIEBwYXJhbSBpZGVudGl0eSBUaGUgaWRlbnRpdHkgb2YgdGhlIHdpbmRvdyB0byBmaW5kIGl0cyB2aWV3cy5cbiAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIHZpZXcgaWRlbnRpdGllcyBmb3IgdGhlIHdpbmRvdy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0Vmlld0lkZW50aXRpZXMoaWRlbnRpdHk6IE9wZW5GaW4uSWRlbnRpdHkpOiBQcm9taXNlPE9wZW5GaW4uSWRlbnRpdHlbXT4ge1xuXHR0cnkge1xuXHRcdGNvbnN0IHdpbiA9IGZpbi5XaW5kb3cud3JhcFN5bmMoaWRlbnRpdHkpO1xuXHRcdGNvbnN0IHZpZXdzID0gYXdhaXQgd2luLmdldEN1cnJlbnRWaWV3cygpO1xuXHRcdGNvbnN0IHZpZXdJZGVudGl0aWVzID0gdmlld3MubWFwKCh2aWV3KSA9PiB2aWV3LmlkZW50aXR5KTtcblx0XHRhd2FpdCB3aW4uc2V0QXNGb3JlZ3JvdW5kKCk7XG5cdFx0cmV0dXJuIHZpZXdJZGVudGl0aWVzO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gW107XG5cdH1cbn1cblxuLyoqXG4gKiBQb2x5ZmlsbHMgcmFuZG9tVVVJRCBpZiBydW5uaW5nIGluIGEgbm9uLXNlY3VyZSBjb250ZXh0LlxuICogQHJldHVybnMgVGhlIHJhbmRvbSBVVUlELlxuICovXG5mdW5jdGlvbiByYW5kb21VVUlEKCk6IHN0cmluZyB7XG5cdGlmIChcInJhbmRvbVVVSURcIiBpbiB3aW5kb3cuY3J5cHRvKSB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG5cdFx0cmV0dXJuIHdpbmRvdy5jcnlwdG8ucmFuZG9tVVVJRCgpO1xuXHR9XG5cdC8vIFBvbHlmaWxsIHRoZSB3aW5kb3cuY3J5cHRvLnJhbmRvbVVVSUQgaWYgd2UgYXJlIHJ1bm5pbmcgaW4gYSBub24gc2VjdXJlIGNvbnRleHQgdGhhdCBkb2Vzbid0IGhhdmUgaXRcblx0Ly8gd2UgYXJlIHN0aWxsIHVzaW5nIHdpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzIHdoaWNoIGlzIGFsd2F5cyBhdmFpbGFibGVcblx0Ly8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIxMTc1MjMvMjgwMDIxOFxuXHQvKipcblx0ICogR2V0IHJhbmRvbSBoZXggdmFsdWUuXG5cdCAqIEBwYXJhbSBjIFRoZSBudW1iZXIgdG8gYmFzZSB0aGUgcmFuZG9tIHZhbHVlIG9uLlxuXHQgKiBAcmV0dXJucyBUaGUgcmFuZG9tIHZhbHVlLlxuXHQgKi9cblx0ZnVuY3Rpb24gZ2V0UmFuZG9tSGV4KGM6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2Vcblx0XHRjb25zdCBybmQgPSB3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheSgxKSlbMF0gJiAoMTUgPj4gKE51bWJlcihjKSAvIDQpKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2Vcblx0XHRcdChOdW1iZXIoYykgXiBybmQpLnRvU3RyaW5nKDE2KVxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIFwiMTAwMDAwMDAtMTAwMC00MDAwLTgwMDAtMTAwMDAwMDAwMDAwXCIucmVwbGFjZSgvWzAxOF0vZywgZ2V0UmFuZG9tSGV4KTtcbn1cbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmFtZE8gPSB7fTsiLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsImltcG9ydCB7IGNsb3VkSW50ZXJvcE92ZXJyaWRlIH0gZnJvbSBcIkBvcGVuZmluL2Nsb3VkLWludGVyb3BcIjtcbmltcG9ydCB0eXBlIE9wZW5GaW4gZnJvbSBcIkBvcGVuZmluL2NvcmVcIjtcbmltcG9ydCB7IENMSVRlbXBsYXRlLCBIb21lLCB0eXBlIEFwcCwgdHlwZSBIb21lU2VhcmNoTGlzdGVuZXJSZXF1ZXN0IH0gZnJvbSBcIkBvcGVuZmluL3dvcmtzcGFjZVwiO1xuaW1wb3J0IHsgaW5pdCB9IGZyb20gXCJAb3BlbmZpbi93b3Jrc3BhY2UtcGxhdGZvcm1cIjtcbmltcG9ydCB7IGdldEFwcHMsIGxhdW5jaEFwcCB9IGZyb20gXCIuL2FwcHNcIjtcbmltcG9ydCB7IGNyZWF0ZUludGVyb3BPdmVycmlkZSB9IGZyb20gXCIuL2ludGVyb3Bicm9rZXJcIjtcbmltcG9ydCB0eXBlIHsgQ3VzdG9tU2V0dGluZ3MgfSBmcm9tIFwiLi9zaGFwZXNcIjtcblxuY29uc3QgUExBVEZPUk1fSUQgPSBcInN1cHBvcnQtY29udGV4dC1hbmQtaW50ZW50c1wiO1xuY29uc3QgUExBVEZPUk1fVElUTEUgPSBcIlN1cHBvcnQgQ29udGV4dCBhbmQgSW50ZW50c1wiO1xuY29uc3QgUExBVEZPUk1fSUNPTiA9IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwL2Zhdmljb24uaWNvXCI7XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBhc3luYyAoKSA9PiB7XG5cdC8vIExvYWQgdGhlIHNldHRpbmdzIGZyb20gdGhlIG1hbmlmZXN0XG5cdGNvbnN0IGN1c3RvbVNldHRpbmdzID0gYXdhaXQgZ2V0TWFuaWZlc3RDdXN0b21TZXR0aW5ncygpO1xuXG5cdC8vIFdoZW4gdGhlIHBsYXRmb3JtIGFwaSBpcyByZWFkeSB3ZSBib290c3RyYXAgdGhlIHBsYXRmb3JtLlxuXHRjb25zdCBwbGF0Zm9ybSA9IGZpbi5QbGF0Zm9ybS5nZXRDdXJyZW50U3luYygpO1xuXHRhd2FpdCBwbGF0Zm9ybS5vbmNlKFwicGxhdGZvcm0tYXBpLXJlYWR5XCIsIGFzeW5jICgpID0+IGluaXRpYWxpemVXb3Jrc3BhY2VDb21wb25lbnRzKGN1c3RvbVNldHRpbmdzKSk7XG5cblx0Ly8gVGhlIERPTSBpcyByZWFkeSBzbyBpbml0aWFsaXplIHRoZSBwbGF0Zm9ybVxuXHQvLyBQcm92aWRlIGRlZmF1bHQgaWNvbnMgYW5kIGRlZmF1bHQgdGhlbWUgZm9yIHRoZSBicm93c2VyIHdpbmRvd3Ncblx0YXdhaXQgaW5pdGlhbGl6ZVdvcmtzcGFjZVBsYXRmb3JtKGN1c3RvbVNldHRpbmdzKTtcbn0pO1xuXG4vKipcbiAqIEluaXRpYWxpemUgdGhlIHdvcmtzcGFjZSBwbGF0Zm9ybS5cbiAqIEBwYXJhbSBjdXN0b21TZXR0aW5ncyBUaGUgY3VzdG9tIHNldHRpbmdzIGZyb20gdGhlIG1hbmlmZXN0LlxuICovXG5hc3luYyBmdW5jdGlvbiBpbml0aWFsaXplV29ya3NwYWNlUGxhdGZvcm0oY3VzdG9tU2V0dGluZ3M6IEN1c3RvbVNldHRpbmdzKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnNvbGUubG9nKFwiSW5pdGlhbGl6aW5nIHdvcmtzcGFjZSBwbGF0Zm9ybVwiKTtcblxuXHRjb25zdCBkZWZhdWx0QnJva2VyID0gY3JlYXRlSW50ZXJvcE92ZXJyaWRlKGN1c3RvbVNldHRpbmdzKTtcblx0Y29uc3QgaW50ZXJvcE92ZXJyaWRlOiBPcGVuRmluLkNvbnN0cnVjdG9yT3ZlcnJpZGU8T3BlbkZpbi5JbnRlcm9wQnJva2VyPltdID0gW2RlZmF1bHRCcm9rZXJdO1xuXG5cdGlmIChcblx0XHRjdXN0b21TZXR0aW5ncz8uY2xvdWRJbnRlcm9wUHJvdmlkZXI/LmVuYWJsZWQgPT09IHRydWUgJiZcblx0XHRjdXN0b21TZXR0aW5ncz8uY2xvdWRJbnRlcm9wUHJvdmlkZXI/LmNvbm5lY3RQYXJhbXMgIT09IHVuZGVmaW5lZFxuXHQpIHtcblx0XHRjb25zb2xlLmxvZyhcIkluaXRpYWxpemluZyB0aGUgY2xvdWQgaW50ZXJvcCBvdmVycmlkZVwiKTtcblx0XHRjb25zdCBpbml0aWFsaXplZENsb3VkSW50ZXJvcE92ZXJyaWRlID0gKGF3YWl0IGNsb3VkSW50ZXJvcE92ZXJyaWRlKFxuXHRcdFx0Y3VzdG9tU2V0dGluZ3M/LmNsb3VkSW50ZXJvcFByb3ZpZGVyPy5jb25uZWN0UGFyYW1zXG5cdFx0KSkgYXMgdW5rbm93biBhcyBPcGVuRmluLkNvbnN0cnVjdG9yT3ZlcnJpZGU8T3BlbkZpbi5JbnRlcm9wQnJva2VyPjtcblx0XHRpbnRlcm9wT3ZlcnJpZGUucHVzaChpbml0aWFsaXplZENsb3VkSW50ZXJvcE92ZXJyaWRlKTtcblx0fVxuXG5cdGF3YWl0IGluaXQoe1xuXHRcdGJyb3dzZXI6IHtcblx0XHRcdGRlZmF1bHRXaW5kb3dPcHRpb25zOiB7XG5cdFx0XHRcdGljb246IFBMQVRGT1JNX0lDT04sXG5cdFx0XHRcdHdvcmtzcGFjZVBsYXRmb3JtOiB7XG5cdFx0XHRcdFx0cGFnZXM6IFtdLFxuXHRcdFx0XHRcdGZhdmljb246IFBMQVRGT1JNX0lDT05cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0dGhlbWU6IFtcblx0XHRcdHtcblx0XHRcdFx0bGFiZWw6IFwiRGVmYXVsdFwiLFxuXHRcdFx0XHRkZWZhdWx0OiBcImRhcmtcIixcblx0XHRcdFx0cGFsZXR0ZToge1xuXHRcdFx0XHRcdGJyYW5kUHJpbWFyeTogXCIjMEE3NkQzXCIsXG5cdFx0XHRcdFx0YnJhbmRTZWNvbmRhcnk6IFwiIzM4M0E0MFwiLFxuXHRcdFx0XHRcdGJhY2tncm91bmRQcmltYXJ5OiBcIiMxRTFGMjNcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XSxcblx0XHQvLyBVc2UgYW4gb3ZlcnJpZGUgZm9yIHRoZSBwbGF0Zm9ybSBpbnRlcm9wIHRvIGhhbmRsZSB0aGUgY29udGV4dCBhbmQgaW50ZW50c1xuXHRcdGludGVyb3BPdmVycmlkZVxuXHR9KTtcbn1cblxuLyoqXG4gKiBCcmluZyB0aGUgcGxhdGZvcm0gdG8gbGlmZS5cbiAqIEBwYXJhbSBjdXN0b21TZXR0aW5ncyBUaGUgY3VzdG9tIHNldHRpbmdzIGZyb20gdGhlIG1hbmlmZXN0LlxuICovXG5hc3luYyBmdW5jdGlvbiBpbml0aWFsaXplV29ya3NwYWNlQ29tcG9uZW50cyhjdXN0b21TZXR0aW5nczogQ3VzdG9tU2V0dGluZ3MpOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc29sZS5sb2coXCJJbml0aWFsaXppbmcgdGhlIGJvb3RzdHJhcHBlclwiKTtcblxuXHQvLyBSZWdpc3RlciB3aXRoIGhvbWUgYW5kIHNob3cgaXRcblx0YXdhaXQgSG9tZS5yZWdpc3Rlcih7XG5cdFx0dGl0bGU6IFBMQVRGT1JNX1RJVExFLFxuXHRcdGlkOiBQTEFURk9STV9JRCxcblx0XHRpY29uOiBQTEFURk9STV9JQ09OLFxuXHRcdG9uVXNlcklucHV0OiBhc3luYyAocmVxdWVzdDogSG9tZVNlYXJjaExpc3RlbmVyUmVxdWVzdCkgPT4ge1xuXHRcdFx0Ly8gR2V0IHRoZSBsaXN0IG9mIGFsbCB0aGUgYXBwc1xuXHRcdFx0bGV0IGFwcHMgPSBhd2FpdCBnZXRBcHBzKGN1c3RvbVNldHRpbmdzLmFwcFByb3ZpZGVyKTtcblxuXHRcdFx0aWYgKHJlcXVlc3QucXVlcnkubGVuZ3RoID49IDMpIHtcblx0XHRcdFx0Ly8gRmlsdGVyIHRoZW0gYnkgdGl0bGUgaWYgd2UgaGF2ZSBhIHF1ZXJ5XG5cdFx0XHRcdGFwcHMgPSBhcHBzLmZpbHRlcigoYXBwKSA9PiBhcHAudGl0bGUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhyZXF1ZXN0LnF1ZXJ5LnRvTG93ZXJDYXNlKCkpKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0Ly8gQWx3YXlzIHJldHVybiBqdXN0IHRoZSBhcHBzIGxpc3QgaW4gaG9tZVxuXHRcdFx0XHRyZXN1bHRzOiBhcHBzLm1hcCgoYXBwKSA9PiAoe1xuXHRcdFx0XHRcdGtleTogYXBwLmFwcElkLFxuXHRcdFx0XHRcdHRpdGxlOiBhcHAudGl0bGUsXG5cdFx0XHRcdFx0aWNvbjogYXBwLmljb25zWzBdPy5zcmMsXG5cdFx0XHRcdFx0ZGF0YTogYXBwLFxuXHRcdFx0XHRcdGxhYmVsOiBhcHAubWFuaWZlc3RUeXBlID09PSBcImlubGluZS1hcHBhc3NldFwiIHx8IGFwcC5tYW5pZmVzdFR5cGUgPT09IFwiZXh0ZXJuYWxcIiA/IFwiQXBwXCIgOiBcIlZpZXdcIixcblx0XHRcdFx0XHRhY3Rpb25zOiBbeyBuYW1lOiBcIkxhdW5jaFwiLCBob3RrZXk6IFwiZW50ZXJcIiB9XSxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogYXBwLmRlc2NyaXB0aW9uLFxuXHRcdFx0XHRcdHNob3J0RGVzY3JpcHRpb246IGFwcC5kZXNjcmlwdGlvbixcblx0XHRcdFx0XHR0ZW1wbGF0ZTogQ0xJVGVtcGxhdGUuU2ltcGxlVGV4dCxcblx0XHRcdFx0XHR0ZW1wbGF0ZUNvbnRlbnQ6IGFwcC5kZXNjcmlwdGlvblxuXHRcdFx0XHR9KSlcblx0XHRcdH07XG5cdFx0fSxcblx0XHRvblJlc3VsdERpc3BhdGNoOiBhc3luYyAocmVzdWx0KSA9PiB7XG5cdFx0XHQvLyBXZSBvbmx5IGhhdmUgYXBwcywgc28ganVzdCBsYXVuY2ggdGhlbVxuXHRcdFx0YXdhaXQgbGF1bmNoQXBwKHJlc3VsdC5kYXRhIGFzIEFwcCk7XG5cdFx0fVxuXHR9KTtcblxuXHRhd2FpdCBIb21lLnNob3coKTtcblxuXHQvLyBXaGVuIHRoZSBwbGF0Zm9ybSByZXF1ZXN0cyB0byBiZSBjbG9zZSB3ZSBkZXJlZ2lzdGVyIGZyb20gaG9tZSBhbmQgcXVpdFxuXHRjb25zdCBwcm92aWRlcldpbmRvdyA9IGZpbi5XaW5kb3cuZ2V0Q3VycmVudFN5bmMoKTtcblx0YXdhaXQgcHJvdmlkZXJXaW5kb3cub25jZShcImNsb3NlLXJlcXVlc3RlZFwiLCBhc3luYyAoKSA9PiB7XG5cdFx0YXdhaXQgSG9tZS5kZXJlZ2lzdGVyKFBMQVRGT1JNX0lEKTtcblx0XHRhd2FpdCBmaW4uUGxhdGZvcm0uZ2V0Q3VycmVudFN5bmMoKS5xdWl0KCk7XG5cdH0pO1xufVxuXG4vKipcbiAqIFJlYWQgdGhlIGN1c3RvbSBzZXR0aW5ncyBmcm9tIHRoZSBtYW5pZmVzdC5maW4uanNvbi5cbiAqIEByZXR1cm5zIFRoZSBjdXN0b20gc2V0dGluZ3MgZnJvbSB0aGUgbWFuaWZlc3QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldE1hbmlmZXN0Q3VzdG9tU2V0dGluZ3MoKTogUHJvbWlzZTxDdXN0b21TZXR0aW5ncz4ge1xuXHQvLyBHZXQgdGhlIG1hbmlmZXN0IGZvciB0aGUgY3VycmVudCBhcHBsaWNhdGlvblxuXHRjb25zdCBhcHAgPSBhd2FpdCBmaW4uQXBwbGljYXRpb24uZ2V0Q3VycmVudCgpO1xuXG5cdC8vIEV4dHJhY3QgdGhlIGN1c3RvbSBzZXR0aW5ncyBmb3IgdGhpcyBhcHBsaWNhdGlvblxuXHRjb25zdCBtYW5pZmVzdDogT3BlbkZpbi5NYW5pZmVzdCAmIHsgY3VzdG9tU2V0dGluZ3M/OiBDdXN0b21TZXR0aW5ncyB9ID0gYXdhaXQgYXBwLmdldE1hbmlmZXN0KCk7XG5cdHJldHVybiBtYW5pZmVzdC5jdXN0b21TZXR0aW5ncyA/PyB7fTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVMsUUFBUTtBQUNqQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEI7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBDQUEwQyxhQUFhO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLFdBQVcsY0FBYztBQUM1QixDQUFDO0FBQ0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkIsQ0FBQzs7QUFFRDtBQUNBLG9EQUFvRCxZQUFZOztBQUVoRTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxZQUFZO0FBQ3ZCO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1EQUFtRDtBQUNuRDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsU0FBUztBQUNwQixXQUFXLFNBQVM7QUFDcEIsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsU0FBUztBQUNwQixXQUFXLFNBQVM7QUFDcEIsV0FBVyxVQUFVO0FBQ3JCO0FBQ0EsYUFBYTtBQUNiOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsa0JBQWtCO0FBQzdCLFdBQVcsUUFBUTtBQUNuQixXQUFXLHFCQUFxQjtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlFQUF5RSwwQ0FBTTtBQUMvRTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsR0FBRztBQUNoQixhQUFhLGVBQWU7QUFDNUIsYUFBYSxzQkFBc0I7QUFDbkMsWUFBWTtBQUNaO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQyxXQUFXLHFCQUFxQjtBQUNoQztBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxTQUFTO0FBQ3BCO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFVBQVU7QUFDdkIsYUFBYSxVQUFVO0FBQ3ZCO0FBQ0EsY0FBYyxRQUFRO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsVUFBVTtBQUN2QjtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFlBQVk7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxTQUFTO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsYUFBYSw0QkFBNEI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFdBQVcsVUFBVTtBQUNyQixXQUFXLFVBQVU7QUFDckI7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0VBQWdFO0FBQ2hFO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHdCQUF3QixpQkFBaUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDJCQUEyQixtQkFBbUI7QUFDOUM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLHNEQUFzRCxNQUFNO0FBQzVELG9EQUFvRDtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCLFdBQVcsU0FBUztBQUNwQjtBQUNBLGFBQWEsR0FBRztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFD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RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0M7QUFDcEMsd0NBQXdDOztBQUV4Qzs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBLFNBQVMsUUFBUTs7QUFFakI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwwQ0FBMEMsU0FBUztBQUNuRCxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsV0FBVyxRQUFROztBQUVuQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVc7QUFDWCxhQUFhLGFBQWE7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsYUFBYTs7QUFFNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCxLQUFLO0FBQ3RELE9BQU87QUFDUCxHQUFHO0FBQ0gsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0wsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsTUFBTTtBQUMvQyxNQUFNO0FBQ047QUFDQTtBQUNBLDhDQUE4QyxNQUFNO0FBQ3BEO0FBQ0EsQ0FBQzs7QUFFRCxzQ0FBc0MsT0FBTzs7QUFFN0M7O0FBRUE7QUFDQTtBQUNBOztBQUVBLFdBQVcsUUFBUTtBQUNuQjtBQUNBOztBQUVBOztBQUVBLG9CQUFvQixZQUFZO0FBQ2hDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHFEQUFxRCxHQUFHO0FBQ3hEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSx5Q0FBeUMsSUFBSTtBQUM3QztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsbUJBQW1CO0FBQzlCLFdBQVcsU0FBUztBQUNwQixXQUFXLFNBQVM7QUFDcEI7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsVUFBVTtBQUNyQjtBQUNBLGFBQWE7QUFDYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZUFBZTtBQUM1QixhQUFhLFNBQVM7QUFDdEI7QUFDQSxlQUFlLFNBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQSxvRUFBb0U7O0FBRXBFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7O0FBRUEsV0FBVyx5Q0FBeUM7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWtEO0FBQ2xEO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekIsS0FBSztBQUNMO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvREFBb0Q7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsVUFBVSxJQUFJO0FBQ2Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckI7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckI7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkO0FBQ0EsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0RBQXdELGlCQUFpQjs7QUFFekU7QUFDQSwyQ0FBMkMsaUJBQWlCOztBQUU1RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRiw2QkFBNkIsdUNBQXVDLGtDQUFrQyx1Q0FBdUMsb0NBQW9DLDJCQUEyQixXQUFXLG1DQUFtQyx1QkFBdUIsdUJBQXVCLEdBQUcsZ0JBQWdCLGdHQUFnRyxtREFBbUQsRUFBRSxVQUFVLGlCQUFpQixlQUFlLFNBQVMsS0FBSyxlQUFlLEVBQUUsU0FBUyxNQUFNLGl2Q0FBaXZDLEVBQUUsZUFBZSwwRkFBMEYsY0FBYyxvRUFBb0UsY0FBYyxRQUFRLHVCQUF1QixNQUFNLG9CQUFvQixFQUFFLEVBQUUsZ0JBQWdCLE9BQU8sa0JBQWtCLG1CQUFtQixnQ0FBZ0MsZUFBZSxvQ0FBb0Msa0NBQWtDLG1CQUFtQix3QkFBd0IsMkRBQTJELGlCQUFpQix5QkFBeUIsZUFBZSxlQUFlLHNCQUFzQixlQUFlLGNBQWMsY0FBYyxVQUFVLGNBQWMsVUFBVSxpQkFBaUIsNENBQTRDLGNBQWMsVUFBVSxjQUFjLG9CQUFvQixlQUFlLHFHQUFxRyxxREFBcUQsY0FBYyxVQUFVLGVBQWUsVUFBVSxxTkFBcU4sSUFBSSxJQUFJLElBQUksa0JBQWtCLDRCQUE0QixrQ0FBa0MsdUNBQXVDLGlGQUFpRiw4Q0FBOEMsa0JBQWtCLCtCQUErQixnQkFBZ0IsZUFBZSxnQkFBZ0IsU0FBUyxlQUFlLFdBQVcsaUJBQWlCLEtBQUssa0RBQWtELFlBQVksS0FBSyxhQUFhLDBCQUEwQixVQUFVLHFDQUFxQyxJQUFJLGlHQUFpRyxhQUFhLGlJQUFpSSw2SEFBNkgsK0hBQStILE9BQU8sc0JBQXNCLFlBQVksb0VBQW9FLFdBQVcsTUFBTSxnREFBZ0QsSUFBSSxnOUJBQWc5QixFQUFFLGNBQWMsTUFBTSxFQUFFLFVBQVUsT0FBTyx1RUFBdUUsRUFBRSxjQUFjLGdCQUFnQiwwREFBMEQsK0lBQStJLElBQUksbUNBQW1DLGdEQUFnRCxjQUFjLGVBQWUsMkVBQTJFLHFCQUFxQixjQUFjLG9CQUFvQixhQUFhLGNBQWMseUJBQXlCLG1CQUFtQixrQkFBa0IsbUJBQW1CLGNBQWMsK0RBQStELFFBQVEsSUFBSSxrSkFBa0osOExBQThMLGNBQWMsa0RBQWtELGtCQUFrQixtQkFBbUIsSUFBSSx1RUFBdUUsa0JBQWtCLGNBQWMsa0RBQWtELElBQUksZ0NBQWdDLDRJQUE0SSxVQUFVLGNBQWMsZ0JBQWdCLE1BQU0sbUNBQW1DLHFFQUFxRSxtQ0FBbUMsSUFBSSwwQkFBMEIsOEJBQThCLElBQUksMEJBQTBCLGVBQWUsTUFBTSxxQ0FBcUMseUJBQXlCLGtDQUFrQyxnQ0FBZ0MsNEhBQTRILHVSQUF1UixLQUFLLCtCQUErQixrQkFBa0IsSUFBSSwrQkFBK0IsaUJBQWlCLElBQUksY0FBYyxnQkFBZ0IsTUFBTSwySEFBMkgsb0RBQW9ELGlCQUFpQix1UkFBdVIsYUFBYSxJQUFJLDJCQUEyQixlQUFlLFlBQVksNkZBQTZGLE1BQU0sV0FBVyw0Q0FBNEMsNkJBQTZCLHdDQUF3Qyw4Q0FBOEMsNkJBQTZCLDRDQUE0QyxFQUFFLGNBQWMsOEVBQThFLHdCQUF3Qiw4Q0FBOEMsa0JBQWtCLHVCQUF1QixnSEFBZ0gsWUFBWSxnQkFBZ0IsZ0JBQWdCLGtCQUFrQixvQ0FBb0MscUNBQXFDLDJKQUEySiw4SkFBOEosbUhBQW1ILDZCQUE2Qix1Q0FBdUMsV0FBVyxjQUFjLDRJQUE0SSxnSkFBZ0osdUJBQXVCLGdCQUFnQiw2RkFBNkYsY0FBYyxvRkFBb0YsOEVBQThFLGtCQUFrQixxRkFBcUYsd0JBQXdCLGlCQUFpQixjQUFjLDRCQUE0QiwwQkFBMEIsWUFBWSwrQkFBK0IsYUFBYSxnQkFBZ0IseUdBQXlHLHFDQUFxQyxpQ0FBaUMsY0FBYyx3Q0FBd0MsWUFBWSxJQUFJLG1CQUFtQixTQUFTLGNBQWMscUJBQXFCLHdCQUF3Qiw2Q0FBNkMsWUFBWSxrQkFBa0Isb0ZBQW9GLHNGQUFzRixNQUFNLGtKQUFrSixjQUFjLGtCQUFrQiwyQkFBMkIsdUNBQXVDLDhFQUE4RSw2REFBNkQsY0FBYyxnSEFBZ0gsV0FBVyxjQUFjLGdDQUFnQyx1QkFBdUIsa0RBQWtELHlCQUF5QiwyT0FBMk8sa0JBQWtCLDBCQUEwQiw0QkFBNEIsSUFBSSxvQkFBb0IsY0FBYyxNQUFNLHNCQUFzQiwwQkFBMEIsZ0NBQWdDLGtKQUFrSixtQkFBbUIsd0JBQXdCLHdGQUF3RixrQ0FBa0MsTUFBTSwwQkFBMEIsV0FBVyxtQkFBbUIsMkJBQTJCLFFBQVEsV0FBVyxLQUFLLFdBQVcsd0hBQXdILGtDQUFrQyx3RUFBd0UsYUFBYSxVQUFVLGdCQUFnQixpQ0FBaUMsZ0VBQWdFLCtJQUErSSx1REFBdUQsc0JBQXNCLFNBQVMsTUFBTSxXQUFXLCtDQUErQywyQ0FBMkMsK0RBQStELHVCQUF1QixpQ0FBaUMsc0NBQXNDLDhCQUE4QixlQUFlLGtCQUFrQixTQUFTLCtIQUErSCxtQkFBbUIsV0FBVyw4QkFBOEIsMkNBQTJDLGdDQUFnQyw4Q0FBOEMsaUNBQWlDLHdFQUF3RSx5REFBeUQsOEJBQThCLHlCQUF5QixrQkFBa0IsV0FBVyxrQkFBa0IsOEJBQThCLGtCQUFrQiw2RUFBNkUsWUFBWSxJQUFJLG1CQUFtQixZQUFZLCtCQUErQixrQkFBa0IsNkVBQTZFLFlBQVksSUFBSSxtQ0FBbUMsWUFBWSwrQkFBK0Isa0JBQWtCLDZFQUE2RSxZQUFZLElBQUksbUVBQW1FLFlBQVksaUNBQWlDLGtCQUFrQiwwRUFBMEUsZ0ZBQWdGLG1FQUFtRSx5Q0FBeUMsZ0NBQWdDLGdDQUFnQyw4Q0FBOEMsRUFBRSwrREFBK0QsaUZBQWlGLHVMQUF1TCwrS0FBK0ssdUJBQXVCLGtCQUFrQixpQkFBaUIsaURBQWlELG9FQUFvRSxZQUFZLEtBQUssc0JBQXNCLGdCQUFnQixNQUFNLHVCQUF1QixzQkFBc0IsMEJBQTBCLHlKQUF5SixlQUFlLGNBQWMscUJBQXFCLGVBQWUseUZBQXlGLDRMQUE0TCw0REFBNEQsc0JBQXNCLDhCQUE4QixtR0FBbUcsb0NBQW9DLG9CQUFvQixrQkFBa0Isd0NBQXdDLE9BQU8sTUFBTSxVQUFVLFNBQVMsS0FBSywwQ0FBMEMsNENBQTRDLGlDQUFpQyw2QkFBNkIsTUFBTSxNQUFNLFVBQVUsWUFBWSxJQUFJLDZCQUE2QixNQUFNLE1BQU0sZ0JBQWdCLFVBQVUscUNBQXFDLGdDQUFnQyxxQ0FBcUMsd0JBQXdCLHlDQUF5Qyx5QkFBeUIsb0JBQW9CLGVBQWUsaUJBQWlCLCtCQUErQixlQUFlLGVBQWUsTUFBTSxRQUFRLElBQUksS0FBSyxtQ0FBbUMsa0JBQWtCLFVBQVUsU0FBUyxvQkFBb0Isa0NBQWtDLG9CQUFvQix1QkFBdUIscUJBQXFCLHVCQUF1QixxQkFBcUIsa0NBQWtDLG9DQUFvQyx5Q0FBeUMsNkRBQTZELHdGQUF3RixnR0FBZ0csb0JBQW9CLGlJQUFpSSxjQUFjLFNBQVMsTUFBTSxXQUFXLCtCQUErQiw0Q0FBNEMsMkRBQTJELG1DQUFtQywwRUFBMEUseURBQXlELDhCQUE4QiwrQkFBK0IsUUFBUSxtRUFBbUUsbUJBQW1CLDRFQUE0RSxtQkFBbUIsdUJBQXVCLGFBQWEsS0FBSyxJQUFJLEVBQUUsOENBQThDLFdBQVcsZUFBZSxVQUFVLG9CQUFvQixNQUFNLGtFQUFrRSxNQUFNLDZIQUE2SCxNQUFNLDZKQUE2SixvR0FBb0csYUFBYSxZQUFZLGVBQWUsZUFBZSxvREFBb0QsYUFBYSxLQUFLLElBQUksdURBQXVELFNBQVMsbUJBQW1CLFNBQVMsdUJBQXVCLFlBQVksSUFBSSxxQ0FBcUMsU0FBUyxtQkFBbUIsU0FBUyx1QkFBdUIsWUFBWSxJQUFJLGlDQUFpQyxTQUFTLG1CQUFtQixlQUFlLHVDQUF1QyxTQUFTLFlBQVksSUFBSSxnQkFBZ0IsU0FBUyxtQkFBbUIsd0JBQXdCLFlBQVksYUFBYSw2Q0FBNkMsU0FBUyxnQ0FBZ0Msa0JBQWtCLHNHQUFzRyx5QkFBeUIsK0NBQStDLG1CQUFtQiwyREFBMkQsdUVBQXVFLDhEQUE4RCx1Q0FBdUMsc0JBQXNCLEtBQUssZ0JBQWdCLGdCQUFnQixTQUFTLCtEQUErRCx1Q0FBdUMsc0JBQXNCLEtBQUssY0FBYyxrQkFBa0IsU0FBUywyREFBMkQsOENBQThDLGlFQUFpRSwyREFBMkQsaUVBQWlFLDJEQUEyRCxpRUFBaUUsOEZBQThGLGlFQUFpRSw4RkFBOEYsNENBQTRDLHVCQUF1QiwwQkFBMEIsOENBQThDLDBHQUEwRyx5Q0FBeUMsNkNBQTZDLHVCQUF1QiwwQkFBMEIsOENBQThDLDBHQUEwRyx5Q0FBeUMsd0NBQXdDLHVDQUF1QyxzQkFBc0IsS0FBSyxnQkFBZ0IsZ0JBQWdCLDJDQUEyQyx1Q0FBdUMsdUNBQXVDLDBCQUEwQixLQUFLLGNBQWMsa0JBQWtCLDJDQUEyQyxvQ0FBb0MsNkVBQTZFLHVDQUF1QywrQkFBK0IsMkJBQTJCLDhCQUE4Qix1Q0FBdUMsK0JBQStCLDJCQUEyQiw4QkFBOEIsdUNBQXVDLHVGQUF1Rix1Q0FBdUMsdUZBQXVGLDJDQUEyQyx1QkFBdUIsMEJBQTBCLDhDQUE4Qyx1REFBdUQsd0ZBQXdGLDRDQUE0Qyx1QkFBdUIsMEJBQTBCLDhDQUE4Qyx1REFBdUQsd0ZBQXdGLHdDQUF3Qyw2REFBNkQsdUNBQXVDLDZEQUE2RCx3Q0FBd0MsNkRBQTZELHdDQUF3Qyw4REFBOEQseUJBQXlCLHFGQUFxRixzRUFBc0UsMkRBQTJELGtFQUFrRSw0QkFBNEIsd0JBQXdCLG9CQUFvQixZQUFZLGtCQUFrQixnQkFBZ0IsbUJBQW1CLFdBQVcsbUVBQW1FLDRCQUE0Qix3QkFBd0Isb0JBQW9CLGNBQWMsb0JBQW9CLGlCQUFpQixtQkFBbUIsV0FBVywrREFBK0QsOERBQThELHFFQUFxRSxnRkFBZ0YscUVBQXFFLGdGQUFnRixxRUFBcUUsdUhBQXVILHFFQUFxRSx3SEFBd0gsdUJBQXVCLGdCQUFnQixtQ0FBbUMseURBQXlELCtDQUErQyxrRUFBa0UsdUJBQXVCLGdCQUFnQixtQ0FBbUMseURBQXlELCtDQUErQyxrRUFBa0UsZ0RBQWdELDJEQUEyRCxrREFBa0QsMkRBQTJELDJDQUEyQyxvQkFBb0IseUJBQXlCLHlCQUF5QixnQkFBZ0Isa0JBQWtCLGdCQUFnQiw2REFBNkQsV0FBVywwQ0FBMEMsb0JBQW9CLHlCQUF5Qix5QkFBeUIsa0JBQWtCLG9CQUFvQixpQkFBaUIsNkRBQTZELFdBQVcsdUNBQXVDLGtGQUFrRiwwQ0FBMEMscUZBQXFGLDBDQUEwQyxxRkFBcUYsMENBQTBDLGlJQUFpSSwwQ0FBMEMseUpBQXlKLGdEQUFnRCwrRUFBK0UsaURBQWlELCtFQUErRSxFQUFFLHlCQUF5QiwyREFBMkQsa0RBQWtELHVCQUF1Qiw2REFBNkQseUNBQXlDLHlCQUF5QiwwQ0FBMEMsMEJBQTBCLHVCQUF1Qiw2REFBNkQsMENBQTBDLHlCQUF5QiwyQ0FBMkMseUJBQXlCLG9DQUFvQyxxRUFBcUUsd0lBQXdJLHlEQUF5RCxrRUFBa0UsdURBQXVELGdFQUFnRSxVQUFVLG1KQUFtSixvQ0FBb0MsdUJBQXVCLHNLQUFzSyxvRkFBb0YsaUJBQWlCLHNCQUFzQiwyQ0FBMkMsbUVBQW1FLGdGQUFnRixvQkFBb0IsZ0RBQWdELE1BQU0sOEJBQThCLElBQUksY0FBYyxNQUFNLDZDQUE2QyxrRkFBa0YsUUFBUSxNQUFNLHNCQUFzQixhQUFhLFVBQVUsbUJBQW1CLHNCQUFzQixjQUFjLDhDQUE4QywwREFBMEQsZUFBZSxXQUFXLEdBQUcsRUFBRSxnQ0FBZ0MsV0FBVyxTQUFTLFlBQVksbUNBQW1DLGtEQUFrRCxHQUFHLFdBQVcsVUFBVSxXQUFXLEdBQUcsRUFBRSxLQUFLLGFBQWEsS0FBSywwQ0FBMEMsWUFBWSxHQUFHLDhFQUE4RSxxREFBcUQsZUFBZSxFQUFFLG1EQUFtRCxTQUFTLEVBQUUsa0RBQWtELHVCQUF1QixFQUFFLHdCQUF3QiwwTEFBMEwsRUFBRSxhQUFhLEVBQUUsSUFBSSxhQUFhLGVBQWUscUNBQXFDLEtBQUssT0FBTyxXQUFXLGVBQWUsRUFBRSxFQUFFLEVBQUUsVUFBVSxhQUFhLEVBQUUsRUFBRSxFQUFFLG1CQUFtQix1RUFBdUUseUJBQXlCLGFBQWEsa0NBQWtDLG9DQUFvQyxHQUFHLFNBQVMsR0FBRyxLQUFLLFFBQVEsRUFBRSxFQUFFLGFBQWEsR0FBRyxLQUFLLFVBQVUsRUFBRSxFQUFFLGVBQWUsVUFBVSxFQUFFLEVBQUUsdUNBQXVDLFdBQVcsaUJBQWlCLHNFQUFzRSxtQkFBbUIsOEpBQThKLEdBQUcsU0FBUyxFQUFFLEtBQUssMkJBQTJCLGVBQWUsb0VBQW9FLEtBQUssZUFBZSxTQUFTLFNBQVMsaUJBQWlCLFNBQVMsNkJBQTZCLFlBQVksSUFBSSxLQUFLLHVDQUF1QyxPQUFPLFlBQVksK0JBQStCLFNBQVMsaUJBQWlCLCtCQUErQixTQUFTLElBQUksU0FBUyxZQUFZLG1DQUFtQyxTQUFTLCtCQUErQix1Q0FBdUMsaUJBQWlCLGtCQUFrQixXQUFXLGdCQUFnQixrQkFBa0IsMkJBQTJCLGlCQUFpQixrQkFBa0Isd0NBQXdDLG1CQUFtQixrQkFBa0IscURBQXFELDJDQUEyQyxTQUFTLGVBQWUsU0FBUyxZQUFZLFdBQVcsZ0NBQWdDLFNBQVMsaUJBQWlCLGVBQWUsWUFBWSx3QkFBd0IseURBQXlELFNBQVMsZUFBZSw0QkFBNEIscUJBQXFCLE1BQU0sUUFBUSxtQ0FBbUMsZ0JBQWdCLFNBQVMsaUJBQWlCLDJHQUEyRyxlQUFlLGFBQWEsa0JBQWtCLDBDQUEwQyxZQUFZLEtBQUssS0FBSyxXQUFXLFlBQVksS0FBSyxzQkFBc0IsU0FBUyxHQUFHLGVBQWUsOEJBQThCLGNBQWMsd0NBQXdDLFVBQVUsNENBQTRDLElBQUksSUFBSSxJQUFJLEtBQUssT0FBTyxLQUFLLE9BQU8sS0FBSyxPQUFPLFFBQVEsVUFBVSxjQUFjLHFCQUFxQixjQUFjLHNEQUFzRCxFQUFFLGNBQWMsTUFBTSxFQUFFLGNBQWMsSUFBSSxJQUFJLElBQUksdUNBQXVDLFNBQVMsRUFBRSxhQUFhLGVBQWUsb0JBQW9CLGFBQWEsU0FBUywwR0FBMEcsbUJBQW1CLDRCQUE0QixRQUFRLHdCQUF3QixlQUFlLEVBQUUsbUJBQW1CLElBQUksSUFBSSxJQUFJLFlBQVksZ0JBQWdCLHdCQUF3Qiw2QkFBNkIscUJBQXFCLDRCQUE0QixvQkFBb0IseUJBQXlCLGlCQUFpQix3QkFBd0IsZ0JBQWdCLHdCQUF3QixnQkFBZ0IseUJBQXlCLGlCQUFpQiw0QkFBNEIsb0JBQW9CLHVDQUF1QyxzQkFBc0IseUNBQXlDLHdEQUF3RCxnUEFBZ1Asb0NBQW9DLDZCQUE2QixvQ0FBb0MscUNBQXFDLDRDQUE0QyxlQUFlLHNCQUFzQiwyQkFBMkIsa0NBQWtDLG9DQUFvQyxrQkFBa0IsNkJBQTZCLG1CQUFtQixrQkFBa0IseUJBQXlCLHFEQUFxRCxpQkFBaUIsZ0RBQWdELG9CQUFvQiwrQkFBK0IsdUJBQXVCLCtCQUErQix1QkFBdUIsd0JBQXdCLGdCQUFnQix3S0FBd0ssa0JBQWtCLGNBQWMsRUFBRSxtQkFBbUIsSUFBSSxJQUFJLElBQUksK0RBQStELHVFQUF1RSx1QkFBdUIsYUFBYSxVQUFVLHdCQUF3QixlQUFlLCtFQUErRSxTQUFTLEdBQUcsU0FBUyxZQUFZLFdBQVcsY0FBYztBQUMxMWxDLEVBQUUscURBQXFELFlBQVksK0NBQStDLFVBQVUsU0FBUyxzQkFBc0IsNEJBQTRCLGtDQUFrQyxRQUFRLFFBQVEsNEJBQTRCLFNBQVMsc0JBQXNCLGNBQWMsMkJBQTJCLDZCQUE2QixFQUFFLFlBQVksb0JBQW9CLGdCQUFnQixrREFBa0QsZ0JBQWdCLHFGQUFxRixnREFBZ0Qsc0JBQXNCLEVBQUUsWUFBWSxpQkFBaUIsb0RBQW9ELG9DQUFvQyxlQUFlLEVBQUUsSUFBSSxnQkFBZ0IsRUFBRSxHQUFHLFdBQVcsRUFBRSxHQUFHLCtEQUErRCx1QkFBdUIsVUFBVSxHQUFHLCtDQUErQyx1QkFBdUIsR0FBRyxRQUFRLG1CQUFtQix1QkFBdUIsc0JBQXNCLDhCQUE4QixZQUFZLHdFQUF3RSxFQUFFLG1CQUFtQixJQUFJLElBQUksSUFBSSxJQUFJLGtDQUFrQyxzREFBc0QsY0FBYywwQkFBMEIsdUJBQXVCLEVBQUUsbUJBQW1CLElBQUksSUFBSSxJQUFJLElBQUksdUNBQXVDLGlOQUFpTixpQkFBaUIsNkNBQTZDLGVBQWUscUNBQXFDLEtBQUssT0FBTyxXQUFXLGVBQWUsRUFBRSxFQUFFLEVBQUUsVUFBVSxhQUFhLEVBQUUsRUFBRSxFQUFFLG1CQUFtQiw4REFBOEQsSUFBSSxpQ0FBaUMsU0FBUyxzQ0FBc0MsU0FBUyxhQUFhLDBDQUEwQyxnQ0FBZ0MsSUFBSSxpQ0FBaUMsU0FBUyxzQ0FBc0MsRUFBRSwrQkFBK0IsbUJBQW1CLGFBQWEsa0JBQWtCLGtCQUFrQixrQkFBa0IsV0FBVyxVQUFVLFdBQVcsR0FBRyxFQUFFLEtBQUssYUFBYSxHQUFHLHFDQUFxQyxNQUFNLHVEQUF1RCxXQUFXLFFBQVEsVUFBVSxXQUFXLEdBQUcsRUFBRSxLQUFLLGFBQWEsRUFBRSw0Q0FBNEMsaURBQWlELGVBQWUsZ0JBQWdCLHVDQUF1QyxRQUFRLElBQUksaUJBQWlCLGdCQUFnQixxREFBcUQsOEJBQThCLHVCQUF1QixZQUFZLDJCQUEyQixvREFBb0QsMEZBQTBGLDJEQUEyRCwrQkFBK0Isb0NBQW9DLDJFQUEyRSxhQUFhLDhCQUE4QixHQUFHLFNBQVMsRUFBRSxJQUFJLHVDQUF1QyxnQkFBZ0IsbUJBQW1CLG1PQUFtTyxlQUFlLDBCQUEwQiw0Q0FBNEMsZUFBZSxpQkFBaUIscUJBQXFCLEtBQUssRUFBRSxNQUFNLHlCQUF5QixNQUFNLEtBQUssS0FBSyxFQUFFLE1BQU0sU0FBUyxjQUFjLGtCQUFrQixhQUFhLE9BQU8sRUFBRSxJQUFJLHVDQUF1QyxlQUFlLGlCQUFpQiw0QkFBNEIsS0FBSyxFQUFFLE1BQU0sNEJBQTRCLE1BQU0sS0FBSyxLQUFLLEVBQUUsTUFBTSxTQUFTLGNBQWMscUJBQXFCLGFBQWEsT0FBTyxFQUFFLElBQUkseUJBQXlCLGlCQUFpQixhQUFhLG1EQUFtRCxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsTUFBTSxLQUFLLEtBQUssRUFBRSxNQUFNLFNBQVMsY0FBYyxhQUFhLGFBQWEsT0FBTyxFQUFFLElBQUksNEJBQTRCLEVBQUUsRUFBRSwrREFBK0QsT0FBTyxFQUFFLDRCQUE0QixNQUFNLGdGQUFnRixtQkFBbUIsRUFBRSxNQUFNLFlBQVksU0FBUyxFQUFFLGlCQUFpQixFQUFFLElBQUksTUFBTSxZQUFZLFVBQVUsRUFBRSxtQkFBbUIsY0FBYyw0QkFBNEIsVUFBVSxHQUFHLEVBQUUsSUFBSSxTQUFTLFlBQVksa0RBQWtELFlBQVkscURBQXFELHVDQUF1QyxHQUFHLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxFQUFFLFlBQVksd0NBQXdDLE1BQU0sMkVBQTJFLG1CQUFtQixVQUFVLFNBQVMsRUFBRSxtQkFBbUIsR0FBRywyQkFBMkIsRUFBRSxxQkFBcUIsRUFBRSxHQUFHLFlBQVksK0JBQStCLHdEQUF3RCxpQkFBaUIsNkNBQTZDLEVBQUUsb0JBQW9CLGlCQUFpQixNQUFNLFVBQVUsTUFBTSxpQkFBaUIsTUFBTSxNQUFNLE1BQU0sV0FBVyxNQUFNLFNBQVMsY0FBYyxVQUFVLGFBQWEsUUFBUSxHQUFHLFlBQVksTUFBTSxVQUFVLEdBQUcsbUJBQW1CLFlBQVksZ0NBQWdDLGlDQUFpQyxNQUFNLG9LQUFvSyxFQUFFLGdDQUFnQyxFQUFFLGFBQWEsRUFBRSxFQUFFLGFBQWEsbUVBQW1FLDBFQUEwRSxxRkFBcUYsK0RBQStELCtFQUErRSw2RUFBNkUseURBQXlELGdFQUFnRSxrRkFBa0YseURBQXlELDREQUE0RCxZQUFZLHNFQUFzRSxFQUFFLG1CQUFtQixJQUFJLElBQUksSUFBSSxJQUFJLG9UQUFvVCxPQUFPLDBCQUEwQixtSEFBbUgsT0FBTyxxQkFBcUIsT0FBTyx3Q0FBd0Msa0JBQWtCLGVBQWUsaUJBQWlCLGVBQWUsaUJBQWlCLDRFQUE0RSxtQkFBbUIsMkNBQTJDLHdDQUF3QyxXQUFXLGlCQUFpQiw0QkFBNEIsaURBQWlELHlDQUF5QyxpQ0FBaUMsR0FBRyxRQUFRLEVBQUUsS0FBSywyQ0FBMkMsaURBQWlELHlDQUF5QyxpQ0FBaUMsR0FBRyxRQUFRLEVBQUUsS0FBSyxxQkFBcUIsaURBQWlELHlDQUF5Qyx5QkFBeUIsaUNBQWlDLEdBQUcsUUFBUSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsaURBQWlELDRCQUE0QixpREFBaUQsMkVBQTJFLGNBQWMsRUFBRSxLQUFLLEVBQUUsMkJBQTJCLEVBQUUsY0FBYyxFQUFFLEtBQUssS0FBSyxvQkFBb0IsYUFBYSwyREFBMkQsRUFBRSxnQkFBZ0IscUJBQXFCLEVBQUUsaUJBQWlCLG1EQUFtRCxtQkFBbUIsZ0NBQWdDLHlCQUF5Qix1REFBdUQsd0hBQXdILGdCQUFnQixzRkFBc0Ysb0JBQW9CLG9DQUFvQyxlQUFlLDZCQUE2QixFQUFFLEVBQUUscUJBQXFCLEVBQUUsaUJBQWlCLFFBQVEsWUFBWSxXQUFXLGVBQWUsRUFBRSxHQUFHLEVBQUUsS0FBSyxpQkFBaUIsUUFBUSxZQUFZLFdBQVcsZUFBZSxFQUFFLEdBQUcsRUFBRSxLQUFLLDBCQUEwQixpSEFBaUgsMkJBQTJCLCtEQUErRCxFQUFFLGlCQUFpQix1QkFBdUIsaUZBQWlGLEVBQUUsR0FBRyw2QkFBNkIscUlBQXFJLFdBQVcsa0JBQWtCLGdHQUFnRyxnQkFBZ0IscURBQXFELGdCQUFnQiw0REFBNEQsZ0JBQWdCLDRDQUE0QyxFQUFFLG1CQUFtQixnQ0FBZ0MsVUFBVSxPQUFPLDJCQUEyQixNQUFNLGdCQUFnQixjQUFjLGlCQUFpQixrR0FBa0csYUFBYSxZQUFZLGVBQWUsNkNBQTZDLFVBQVUsb0JBQW9CLGtCQUFrQixZQUFZLElBQUksS0FBSyxXQUFXLHVDQUF1QyxTQUFTLDZFQUE2RSxhQUFhLFlBQVksWUFBWSxpZUFBaWUsRUFBRSxtQkFBbUIsSUFBSSxJQUFJLElBQUksb0JBQW9CLE9BQU8sY0FBYyxtREFBbUQsY0FBYyxxREFBcUQsWUFBWSxJQUFJLG1EQUFtRCxNQUFNLE9BQU8sSUFBSSx1REFBdUQsTUFBTSxRQUFRLElBQUksZUFBZSwwQ0FBMEMsbUVBQW1FLElBQUksZUFBZSxNQUFNLElBQUkseUJBQXlCLE1BQU0sMkJBQTJCLGVBQWUsNENBQTRDLHVFQUF1RSxJQUFJLGFBQWEsTUFBTSxJQUFJLHVCQUF1QixNQUFNLHlCQUF5Qix5QkFBeUIsY0FBYyxvRUFBb0UsY0FBYyxRQUFRLGFBQWEsTUFBTSxvQkFBb0IsRUFBRSxFQUFFLGdCQUFnQixPQUFPLGtCQUFrQixtQkFBbUIsc0JBQXNCLHdCQUF3QixvQ0FBb0Msa0NBQWtDLG1CQUFtQix3QkFBd0Isa0RBQWtELGlCQUFpQix5QkFBeUIsNEJBQTRCLGtDQUFrQyxtQkFBbUIsY0FBYyxVQUFVLFdBQVcsY0FBYyxlQUFlLGVBQWUsU0FBUyxrQkFBa0IsV0FBVyxVQUFVLHFCQUFxQix5QkFBeUIsV0FBVyxzQkFBc0IsMEJBQTBCLHlCQUF5QixXQUFXLHVCQUF1QixxREFBcUQsa0JBQWtCLFlBQVkscUJBQXFCLG1EQUFtRCxvQkFBb0IsV0FBVyxFQUFFLG1CQUFtQixJQUFJLElBQUksSUFBSSxJQUFJLGdFQUFnRSxxTEFBcUwsb0JBQW9CLE1BQU0sOFBBQThQLGVBQWUsTUFBTSx5SkFBeUosZUFBZSwrR0FBK0csZUFBZSx3SkFBd0osZUFBZSxvSEFBb0gsZUFBZSxpRkFBaUYsZUFBZSwrRUFBK0UsZUFBZSwyQkFBMkIsaUJBQWlCLHFJQUFxSSxlQUFlLHNCQUFzQixpREFBaUQsb0RBQW9ELGVBQWUsc0JBQXNCLGtDQUFrQyx1QkFBdUIscUVBQXFFLGlCQUFpQixzQkFBc0IscUNBQXFDLHVCQUF1QixtSEFBbUgsZUFBZSxzQkFBc0Isa0NBQWtDLHVCQUF1QixnRUFBZ0UsaUJBQWlCLHNCQUFzQix1QkFBdUIsdUhBQXVILGVBQWUsa0dBQWtHLGVBQWUsNkVBQTZFLGlCQUFpQiwrRUFBK0UsZUFBZSxRQUFRLDZJQUE2SSxlQUFlLFFBQVEsNklBQTZJLGVBQWUsc0JBQXNCLDhDQUE4QywwQ0FBMEMsdUlBQXVJLGVBQWUsdUpBQXVKLGVBQWUsMkNBQTJDLGVBQWUsTUFBTSxzSUFBc0ksZUFBZSxzQkFBc0IsaURBQWlELG1FQUFtRSxlQUFlLE1BQU0sb0ZBQW9GLGVBQWUsd0JBQXdCLDJiQUEyYixZQUFZLGtqQkFBa2pCLEVBQUUsbUJBQW1CLElBQUksSUFBSSxJQUFJLGFBQWEsdUJBQXVCLE9BQU8sc0RBQXNELEtBQUssd0JBQXdCLE9BQU8sZ0ZBQWdGLE9BQU8sbUNBQW1DLE9BQU8sMlFBQTJRLE1BQU0sZUFBZSwrQ0FBK0MsY0FBYyxtQkFBbUIsUUFBUSxxSkFBcUosZ0ZBQWdGLHlJQUF5SSxpQkFBaUIsaURBQWlELHFFQUFxRSxtQkFBbUIscUVBQXFFLE9BQU8sYUFBYSxnQkFBZ0IsS0FBSyxtQkFBbUIsNkNBQTZDLHNEQUFzRCw0Q0FBNEMsV0FBVyxRQUFRLEtBQUssbUJBQW1CLDZDQUE2QyxXQUFXLFFBQVEsdUJBQXVCLCthQUErYSxXQUFXLDJVQUEyVSxpQkFBaUIsV0FBVyxRQUFRLDRCQUE0QixzQkFBc0IsS0FBSyxtQ0FBbUMsTUFBTSxRQUFRLGNBQWMsc0RBQXNELHlDQUF5QyxTQUFTLG1CQUFtQixjQUFjLHNCQUFzQiw2QkFBNkIsc0JBQXNCLElBQUksaUNBQWlDLE1BQU0sUUFBUSxjQUFjLHNEQUFzRCx3Q0FBd0MsZUFBZSxtQ0FBbUMsZ0NBQWdDLGlCQUFpQixNQUFNLFNBQVMsa0hBQWtILGlCQUFpQixtQkFBbUIsR0FBRyxFQUFFLGNBQWMsd0JBQXdCLEVBQUUsbUJBQW1CLElBQUksSUFBSSxJQUFJLGFBQWEsNkJBQTZCLHlCQUF5QixlQUFlLE9BQU8sVUFBVSxPQUFPLDhEQUE4RCw0Q0FBNEMsbUJBQW1CLHdFQUF3RSxpQkFBaUIsdURBQXVELDBMQUEwTCxvQkFBb0IsUUFBUSxtQkFBbUIsU0FBUyxjQUFjLFlBQVksS0FBSywwQ0FBMEMsZ0hBQWdILElBQUksdUJBQXVCLFNBQVMsT0FBTyxpQkFBaUIsZUFBZSxlQUFlLDBDQUEwQyw2R0FBNkcsaUJBQWlCLDBDQUEwQyxxSEFBcUgsY0FBYyxnREFBZ0QseVhBQXlYLG1CQUFtQiwwQ0FBMEMsMERBQTBELGtLQUFrSyxpQkFBaUIsMENBQTBDLDBDQUEwQyxzR0FBc0csZUFBZSxTQUFTLGNBQWMsTUFBTSxnQkFBZ0IsT0FBTyxLQUFLLGlEQUFpRCxxR0FBcUcsSUFBSSxpQkFBaUIsa0JBQWtCLEdBQUcsU0FBUyxtQkFBbUIsZUFBZSxZQUFZLGVBQWUsZ0RBQWdELGVBQWUsaUJBQWlCLGlCQUFpQixxQ0FBcUMsaUJBQWlCLCtQQUErUCxZQUFZLHNFQUFzRSxFQUFFLGFBQWEsbUJBQW1CLGVBQWUseUhBQXlILGVBQWUsc0VBQXNFLHFCQUFxQixZQUFZLHVOQUF1TiwrR0FBK0csWUFBWSwySkFBMkosdUhBQXVILFNBQVMsY0FBYyxzTEFBc0wsbUJBQW1CLE9BQU8sa0RBQWtELGNBQWMsaUNBQWlDLG1CQUFtQixnQkFBZ0Isd0JBQXdCLFdBQVcsOEVBQThFLGtDQUFrQyxXQUFXLDZCQUE2QixTQUFTLG1CQUFtQixlQUFlLG1CQUFtQixlQUFlLFdBQVcsaUNBQWlDLDhCQUE4QixTQUFTLGlCQUFpQiwyQkFBMkIsSUFBSSxjQUFjLFNBQVMsb0NBQW9DLElBQUksSUFBSSxJQUFJLHFHQUFxRyw2Q0FBNkMseUZBQXlGLDZFQUE2RSxhQUFhLHNDQUFzQyw2QkFBNkIsYUFBYSw2R0FBNkcsTUFBTSwrQ0FBK0MsNkJBQTZCLFVBQVUsaUJBQWlCLGdLQUFnSyxPQUFPLG9CQUFvQixpTEFBaUwseUNBQXlDLDhJQUE4SSxpQ0FBaUMsd0NBQXdDLGdCQUFnQiw4QkFBOEIsaUJBQWlCLG1CQUFtQix5QkFBeUIsaUNBQWlDLG9DQUFvQyxxQkFBcUIsTUFBTSxNQUFNLG1EQUFtRCw4REFBOEQsb0JBQW9CLFdBQVcsd0JBQXdCLHFDQUFxQyxNQUFNLHlCQUF5QixRQUFRLElBQUkscUJBQXFCLFVBQVUsdUNBQXVDLHVCQUF1QixrRkFBa0YsdUJBQXVCLGdDQUFnQywwQ0FBMEMsK0NBQStDLHVEQUF1RCwwQ0FBMEMsY0FBYywrQ0FBK0MsaUNBQWlDLDZKQUE2Siw4QkFBOEIsc0JBQXNCLEtBQUssb0NBQW9DLG9CQUFvQixNQUFNLG1CQUFtQiw4QkFBOEIsS0FBSyxhQUFhLGdCQUFnQixTQUFTLCtGQUErRixZQUFZLHVGQUF1RixVQUFVLHlDQUF5QywwTUFBME0seUJBQXlCLHVCQUF1QixRQUFRLFdBQVcsNERBQTRELDJHQUEyRyx1REFBdUQsb0NBQW9DLEtBQUssZ0NBQWdDLFlBQVksbUNBQW1DLHFCQUFxQixzQ0FBc0MscUJBQXFCLCtCQUErQiwwRUFBMEUsZ0VBQWdFLGdEQUFnRCxNQUFNLGdCQUFnQix1QkFBdUIsUUFBUSxpQkFBaUIsZ0JBQWdCLHVCQUF1QixRQUFRLGtCQUFrQixFQUFFLFVBQVUsT0FBTyxxSEFBcUgsRUFBRSxpQ0FBaUMsSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLHNCQUFzQiwyQkFBMkIsaUJBQWlCLDhDQUE4QyxNQUFNLG9CQUFvQiwrQkFBK0IsaUNBQWlDLEdBQUcsb0JBQW9CLDZCQUE2QixhQUFhLGdCQUFnQixtQ0FBbUMsTUFBTSx3QkFBd0IsZ0JBQWdCLGdFQUFnRSxtQkFBbUIsR0FBRyxnQkFBZ0IsdURBQXVELHNEQUFzRCxtQ0FBbUMsVUFBVSx1REFBdUQsMEJBQTBCLGNBQWMsbUNBQW1DLGlCQUFpQixnQkFBZ0IsK0NBQStDLGNBQWMsS0FBSyxnQkFBZ0IsZ0NBQWdDLEVBQUUsOEVBQThFLE1BQU0sRUFBRSxtQkFBbUIsSUFBSSxJQUFJLElBQUksSUFBSSx3Q0FBd0MsT0FBTyxnQkFBZ0IsY0FBYyxlQUFlLGlCQUFpQiw4QkFBOEIsVUFBVSxnQ0FBZ0MsV0FBVyxjQUFjLGlEQUFpRCxlQUFlLGFBQWEsa0NBQWtDLCtFQUErRSxTQUFTLGFBQWEsbUJBQW1CLGFBQWEscURBQXFELGNBQWMsOERBQThELGdDQUFnQyxhQUFhLHdQQUF3UCx5RUFBeUUsbUJBQW1CLHNFQUFzRSw0R0FBNEcsWUFBWSwrQkFBK0IsRUFBRSxtQkFBbUIsSUFBSSxJQUFJLElBQUksSUFBSSx1QkFBdUIsT0FBTywyREFBMkQsZUFBZSx3QkFBd0IsZUFBZSx5RUFBeUUsd0NBQXdDLHVHQUF1RyxpREFBaUQsa0RBQWtELGlEQUFpRCxpQkFBaUIseUJBQXlCLGVBQWUsSUFBSSxNQUFNLHFCQUFxQixlQUFlLEtBQUssb0dBQW9HLEVBQUUsbUJBQW1CLElBQUksSUFBSSxJQUFJLElBQUksa0ZBQWtGLE9BQU8sVUFBVSxlQUFlLFdBQVcsTUFBTSxpQkFBaUIsY0FBYyw2Q0FBNkMsUUFBUSxPQUFPLGtCQUFrQixzRUFBc0UsV0FBVyxPQUFPLHVCQUF1QiwwREFBMEQsUUFBUSwwQkFBMEIscUJBQXFCLHlGQUF5RixRQUFRLHdDQUF3QyxRQUFRLDZCQUE2Qiw0QkFBNEIsS0FBSyxrQkFBa0IsYUFBYSxTQUFTLFVBQVUsc0NBQXNDLDRDQUE0QyxLQUFLLEVBQUUsMENBQTBDLFNBQVMsYUFBYSxxQkFBcUIsZUFBZSxtQkFBbUIsbUNBQW1DLHlFQUF5RSxRQUFRLHNCQUFzQixRQUFRLG9CQUFvQixFQUFFLHVCQUF1QixjQUFjLHlCQUF5QixHQUFHLGFBQWEsK0JBQStCLE1BQU0sbUhBQW1ILE1BQU0sS0FBSyx5QkFBeUIsd0JBQXdCLGNBQWMsNENBQTRDLEdBQUcsYUFBYSxzQ0FBc0MsTUFBTSwwSkFBMEosTUFBTSxLQUFLLHlCQUF5Qix3QkFBd0IsZ0RBQWdELGdCQUFnQiw4QkFBOEIsS0FBSyxFQUFFLG1CQUFtQixJQUFJLElBQUksSUFBSSxJQUFJLGdDQUFnQyxPQUFPLHlCQUF5QixZQUFZLG1CQUFtQix5REFBeUQsZUFBZSxvQkFBb0IscUJBQXFCLGdCQUFnQixZQUFZLGdCQUFnQixtQkFBbUIsRUFBRSwwQkFBMEIsa0JBQWtCLGFBQWEsd0JBQXdCLFlBQVksaURBQWlELEVBQUUsZUFBZSxlQUFlLDJFQUEyRSxxQkFBcUIsdUNBQXVDLG1CQUFtQixxQkFBcUIsSUFBSSxxSEFBcUgsa0JBQWtCLGVBQWUsdUZBQXVGLHdCQUF3Qiw4Q0FBOEMsa0JBQWtCLHVCQUF1QixnSEFBZ0gsYUFBYSxpQkFBaUIsbUJBQW1CLDJDQUEyQyx1R0FBdUcsdUNBQXVDLGlDQUFpQyxNQUFNLHNDQUFzQywySkFBMkosK0pBQStKLG1IQUFtSCw2QkFBNkIsdUNBQXVDLGtCQUFrQixrQkFBa0IsNkJBQTZCLHVDQUF1QyxnRkFBZ0YsOERBQThELElBQUksY0FBYyw0SUFBNEksZ0pBQWdKLGVBQWUsb0ZBQW9GLDhFQUE4RSxlQUFlLCtCQUErQixlQUFlLGtEQUFrRCxJQUFJLG1CQUFtQixTQUFTLG1CQUFtQixvRkFBb0Ysc0ZBQXNGLE1BQU0sOElBQThJLGVBQWUsbUlBQW1JLFdBQVcsaUJBQWlCLGlDQUFpQyxnRUFBZ0UsK0lBQStJLHVEQUF1RCxzQkFBc0IsY0FBYyxXQUFXLCtDQUErQywyQ0FBMkMsK0RBQStELHVCQUF1QixpQ0FBaUMsc0NBQXNDLDhCQUE4QixtQkFBbUIsU0FBUyw2SEFBNkgsbUJBQW1CLFdBQVcsOEJBQThCLDJDQUEyQyxnQ0FBZ0MsOENBQThDLGlDQUFpQyx3RUFBd0UseURBQXlELDhCQUE4QixtQkFBbUIsV0FBVyxrQkFBa0IsdUJBQXVCLDBCQUEwQix1SkFBdUosZUFBZSxjQUFjLGFBQWEsZ0JBQWdCLEtBQUssMEZBQTBGLDRMQUE0TCw0REFBNEQsdUJBQXVCLGdDQUFnQyxtR0FBbUcsb0NBQW9DLG9CQUFvQixnQkFBZ0Isc0NBQXNDLE1BQU0sU0FBUyxRQUFRLElBQUksbUNBQW1DLHNDQUFzQyw0QkFBNEIsNEJBQTRCLEtBQUssS0FBSyxpQkFBaUIsSUFBSSwwQkFBMEIsS0FBSyxNQUFNLGNBQWMsVUFBVSxxQkFBcUIsZUFBZSxpQkFBaUIsNkJBQTZCLGVBQWUsZUFBZSxZQUFZLElBQUksS0FBSyxtQ0FBbUMsa0JBQWtCLFVBQVUsU0FBUyxxQkFBcUIsa0NBQWtDLHFCQUFxQixzQkFBc0IsaUJBQWlCLFdBQVcsZ0NBQWdDLFNBQVMsV0FBVyxxQkFBcUIsbUJBQW1CLHFCQUFxQix1QkFBdUIscUJBQXFCLHdCQUF3Qix1QkFBdUIsd0JBQXdCLHlEQUF5RCxTQUFTLHNCQUFzQixtQkFBbUIsOEVBQThFLG1CQUFtQix1QkFBdUIsaUJBQWlCLElBQUksRUFBRSxzREFBc0Qsb0JBQW9CLG9CQUFvQixNQUFNLDREQUE0RCxNQUFNLG1IQUFtSCxNQUFNLDhJQUE4SSxvR0FBb0csbUJBQW1CLGVBQWUsc0RBQXNELGlCQUFpQixJQUFJLHlEQUF5RCxTQUFTLElBQUksbUJBQW1CLFNBQVMsdUJBQXVCLFlBQVksSUFBSSxxQ0FBcUMsU0FBUyxtQkFBbUIsU0FBUyx1QkFBdUIsWUFBWSxJQUFJLGlDQUFpQyxTQUFTLG1CQUFtQixlQUFlLHVDQUF1QyxpQkFBaUIsSUFBSSxnQkFBZ0IsU0FBUyxtQkFBbUIsZ0NBQWdDLFdBQVcsNkNBQTZDLFNBQVMsbUJBQW1CLDBEQUEwRCx1RUFBdUUseUJBQXlCLHFGQUFxRixzRUFBc0UsMkRBQTJELHlCQUF5QiwyREFBMkQsa0RBQWtELHVCQUF1Qiw2REFBNkQsdUJBQXVCLDZEQUE2RCxpQkFBaUIsTUFBTSxTQUFTLG1DQUFtQyxJQUFJLEtBQUssdUNBQXVDLE9BQU8sWUFBWSwrQkFBK0IsU0FBUyxZQUFZLCtCQUErQixTQUFTLElBQUksU0FBUyxZQUFZLG1DQUFtQyxTQUFTLCtCQUErQix1Q0FBdUMsaUJBQWlCLGtCQUFrQixXQUFXLGdCQUFnQixrQkFBa0IsMkJBQTJCLGlCQUFpQixrQkFBa0Isd0NBQXdDLE1BQU0sc0RBQXNELGtCQUFrQixzREFBc0QsU0FBUyxlQUFlLGtDQUFrQyxvRUFBb0UsS0FBSyxjQUFjLFFBQVEsU0FBUyxLQUFLLHFCQUFxQixZQUFZLG1DQUFtQyxnQkFBZ0IsU0FBUyxpQkFBaUIsMkdBQTJHLGVBQWUsWUFBWSxpQkFBaUIsMEJBQTBCLG1CQUFtQixpQkFBaUIsZUFBZSxNQUFNLGlDQUFpQyxrQkFBa0Isb0JBQW9CLFdBQVcsV0FBVyxxQ0FBcUMscUVBQXFFLDBDQUEwQyw0Q0FBNEMsb0JBQW9CLDhCQUE4QixJQUFJLDRGQUE0RixZQUFZLG1CQUFtQiwyQ0FBMkMsTUFBTSxnQ0FBZ0MsTUFBTSwwQ0FBMEMsTUFBTSxnREFBZ0Qsa0VBQWtFLGVBQWUsOERBQThELGVBQWUscURBQXFELGdEQUFnRCw2QkFBNkIsZ0RBQWdELDJFQUEyRSxTQUFTLGlOQUFpTixpQkFBaUIsc0JBQXNCLDhCQUE4QixNQUFNLCtCQUErQiwwSUFBMEksU0FBUywwR0FBMEcsZUFBZSxtQ0FBbUMsa0JBQWtCLG1DQUFtQywrQ0FBK0MsU0FBUyxpQkFBaUIscUJBQXFCLGdOQUFnTixlQUFlLG1DQUFtQyw0RUFBNEUsZUFBZSxpQ0FBaUMsZUFBZSxvQ0FBb0MsOEVBQThFLElBQUksSUFBSSxJQUFJLFFBQVEsdUJBQXVCLDBCQUEwQixtQkFBbUIseUJBQXlCLHVEQUF1RCxtQkFBbUIseUJBQXlCLFFBQVEsSUFBSSxzSkFBc0osbU1BQW1NLDJCQUEyQiwwQ0FBMEMsSUFBSSw2Q0FBNkMsa0pBQWtKLCtJQUErSSxNQUFNLDRDQUE0QyxrREFBa0QsSUFBSSx5QkFBeUIscUVBQXFFLG1DQUFtQyxJQUFJLDBCQUEwQiw4QkFBOEIsSUFBSSwwQkFBMEIsZUFBZSxNQUFNLG1DQUFtQyx1QkFBdUIsa0NBQWtDLDZCQUE2Qiw0SEFBNEgsbVJBQW1SLEtBQUssK0JBQStCLGtCQUFrQixJQUFJLCtCQUErQixrQkFBa0IsTUFBTSx1SEFBdUgsc0NBQXNDLGdDQUFnQyx5QkFBeUIsMERBQTBELElBQUksMkJBQTJCLGVBQWUsWUFBWSw2RkFBNkYsTUFBTSxXQUFXLDJSQUEyUiw2QkFBNkIsd0NBQXdDLDhDQUE4Qyw2QkFBNkIsNENBQTRDLHlDQUF5QyxpQkFBaUIscUhBQXFILHVCQUF1QiwwRkFBMEYsUUFBUSwyQkFBMkIsYUFBYSwrQkFBK0IsYUFBYSx3QkFBd0Isa0RBQWtELHlCQUF5QiwyT0FBMk8sa0JBQWtCLGtEQUFrRCxJQUFJLG9CQUFvQixjQUFjLE1BQU0sc0JBQXNCLDBCQUEwQixnQ0FBZ0Msa0pBQWtKLG1CQUFtQix3QkFBd0Isd0ZBQXdGLGtDQUFrQyxNQUFNLDBCQUEwQixXQUFXLG1CQUFtQiwyQkFBMkIsUUFBUSxXQUFXLEtBQUssV0FBVyxxSEFBcUgseUJBQXlCLFNBQVMsd0VBQXdFLGtCQUFrQiw0RUFBNEUsWUFBWSxJQUFJLG9CQUFvQixZQUFZLCtCQUErQixrQkFBa0IsNEVBQTRFLFlBQVksSUFBSSxxQ0FBcUMsWUFBWSwrQkFBK0Isa0JBQWtCLDRFQUE0RSxZQUFZLElBQUksdUVBQXVFLFlBQVksaUNBQWlDLGtCQUFrQiwyRUFBMkUsZ0ZBQWdGLG1FQUFtRSx1Q0FBdUMsZ0NBQWdDLGdDQUFnQyw4Q0FBOEMsRUFBRSwrREFBK0QsbUZBQW1GLHVMQUF1TCwrS0FBK0ssdUJBQXVCLGtCQUFrQixpQkFBaUIscUJBQXFCLHFHQUFxRyxJQUFJLG9CQUFvQixjQUFjLE1BQU0sc0JBQXNCLHNDQUFzQyxnQ0FBZ0MscUNBQXFDLHlCQUF5Qix5Q0FBeUMseUJBQXlCLHFDQUFxQyx5Q0FBeUMsNkRBQTZELE1BQU0sMkdBQTJHLG1FQUFtRSxvQkFBb0IsaUlBQWlJLGNBQWMsY0FBYyxXQUFXLGdDQUFnQyw2Q0FBNkMsa0NBQWtDLGdEQUFnRCxtQ0FBbUMsMEVBQTBFLHlEQUF5RCw4QkFBOEIsK0JBQStCLFFBQVEsbUVBQW1FLGdDQUFnQyxrQkFBa0Isa0dBQWtHLHlCQUF5Qiw4Q0FBOEMsd0NBQXdDLHFDQUFxQywwQkFBMEIsZ0JBQWdCLGdCQUFnQixTQUFTLHdDQUF3QyxxQ0FBcUMsMEJBQTBCLGNBQWMsa0JBQWtCLFNBQVMscUNBQXFDLDZDQUE2Qyx3Q0FBd0MsMERBQTBELHdDQUF3QywwREFBMEQsd0NBQXdDLDZGQUE2Rix3Q0FBd0MsNkZBQTZGLHVDQUF1QyxxQ0FBcUMsMEJBQTBCLGdCQUFnQixnQkFBZ0IsMkNBQTJDLHVDQUF1QyxxQ0FBcUMsOEJBQThCLGNBQWMsa0JBQWtCLDJDQUEyQyxvQ0FBb0MsNEVBQTRFLHVDQUF1Qyw4QkFBOEIsMkJBQTJCLDhCQUE4Qix1Q0FBdUMsOEJBQThCLDJCQUEyQiw4QkFBOEIsdUNBQXVDLHNGQUFzRix1Q0FBdUMsc0ZBQXNGLHVDQUF1Qyw2REFBNkQsdUNBQXVDLDZEQUE2RCx3Q0FBd0MsNkRBQTZELHdDQUF3Qyw2REFBNkQsMkNBQTJDLHlEQUF5RCxZQUFZLGtCQUFrQixnQkFBZ0IsbUJBQW1CLFdBQVcsMkNBQTJDLHlEQUF5RCxjQUFjLG9CQUFvQixpQkFBaUIsbUJBQW1CLFdBQVcsd0NBQXdDLDZEQUE2RCwyQ0FBMkMsK0VBQStFLDJDQUEyQywrRUFBK0UsMkNBQTJDLHNIQUFzSCwyQ0FBMkMsc0hBQXNILDBDQUEwQyxtQkFBbUIsd0JBQXdCLHVCQUF1QixnQkFBZ0Isa0JBQWtCLGdCQUFnQiw2REFBNkQsV0FBVywwQ0FBMEMsbUJBQW1CLHdCQUF3Qix1QkFBdUIsa0JBQWtCLG9CQUFvQixpQkFBaUIsNkRBQTZELFdBQVcsdUNBQXVDLGlGQUFpRiwwQ0FBMEMsb0ZBQW9GLDBDQUEwQyxvRkFBb0YsMENBQTBDLGdJQUFnSSwwQ0FBMEMsd0pBQXdKLDBDQUEwQyx5QkFBeUIsMENBQTBDLHlCQUF5QiwyQ0FBMkMseUJBQXlCLDJDQUEyQyx5QkFBeUIsb0NBQW9DLHFFQUFxRSx1SUFBdUkseURBQXlELGtFQUFrRSx1REFBdUQsZ0VBQWdFLFVBQVUsdUZBQXVGLHlDQUF5QyxLQUFLLHFCQUFxQiwyREFBMkQsU0FBUyxvQ0FBb0MsdUJBQXVCLHNLQUFzSyxvRkFBb0YsaUJBQWlCLHNCQUFzQiwyQ0FBMkMsa0VBQWtFLGdGQUFnRixvQkFBb0IsTUFBTSw2RUFBNkUsSUFBSSxjQUFjLE1BQU0sNkNBQTZDLGtGQUFrRixRQUFRLE1BQU0sc0JBQXNCLGFBQWEsdUJBQXVCLGNBQWMsNkJBQTZCLEtBQUssdUJBQXVCLEtBQUssdURBQXVELFNBQVMsR0FBRyxVQUFVLHFCQUFxQixjQUFjLEtBQUssb0JBQW9CLGdLQUFnSywyRUFBMkUsaUJBQWlCLDBCQUEwQix1RUFBdUUsWUFBWSx1RUFBdUUsNEJBQTRCLHVFQUF1RSxhQUFhLGdDQUFnQyx1RUFBdUUseUJBQXlCLFdBQVcsNENBQTRDLGtDQUFrQywrSUFBK0ksb0JBQW9CLG1EQUFtRCwwQkFBMEIsUUFBUSxrQkFBa0IsMkNBQTJDLGlDQUFpQyxTQUFTLDBEQUEwRCw4QkFBOEIsbUNBQW1DLGtDQUFrQyxpQ0FBaUMsc0JBQXNCLGlCQUFpQixnQkFBZ0IsZUFBZSxzS0FBc0ssV0FBVyw4Q0FBOEMsaUJBQWlCLGlDQUFpQyx3REFBd0QsbUNBQW1DLDRKQUE0Six3RkFBd0YsaUJBQWlCLGtCQUFrQixFQUFFLFVBQVUsT0FBTyxvQ0FBb0MsRUFBRSxrQkFBa0IsSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLHFCQUFxQixFQUFFLG1CQUFtQixJQUFJLElBQUksSUFBSSxhQUFhLGlFQUFpRSxPQUFPLFVBQVUsZUFBZSxrREFBa0QsWUFBWSxtQkFBbUIsTUFBTSxxREFBcUQsMEJBQTBCLCtCQUErQixFQUFFLE1BQU0sMkJBQTJCLGdDQUFnQyw2Q0FBNkMsYUFBYSxtQ0FBbUMsT0FBTyxtQkFBbUIsZUFBZSwwQkFBMEIsdURBQXVELG9CQUFvQiwyQ0FBMkMsU0FBUyxJQUFJLGVBQWUsa0JBQWtCLG9CQUFvQixnQ0FBZ0MsSUFBSSxRQUFRLGtCQUFrQixVQUFVLG1CQUFtQixNQUFNLEVBQUUsSUFBSSxJQUFJLGVBQWUsMkJBQTJCLGtCQUFrQixNQUFNLDZDQUE2Qyw4QkFBOEIsc0JBQXNCLE9BQU8sU0FBUyxjQUFjLE9BQU8sU0FBUyxlQUFlLEVBQUUsbUJBQW1CLElBQUksSUFBSSxJQUFJLGFBQWEsb01BQW9NLE1BQU0sYUFBYSxtQkFBbUIsSUFBSSxnQkFBZ0IsZUFBZSw2QkFBNkIsT0FBTyxVQUFVLGVBQWUsa0JBQWtCLDJDQUEyQyxLQUFLLG1CQUFtQiwrQ0FBK0MsT0FBTyw2QkFBNkIsOElBQThJLE9BQU8sa0JBQWtCLHdCQUF3QixpQkFBaUIsc0JBQXNCLDZCQUE2QixTQUFTLGFBQWEsRUFBRSxrQkFBa0IsSUFBSSxtQkFBbUIseTNCQUF5M0IsY0FBYyx3Q0FBd0MsMkJBQTJCLHNSQUFzUixnRUFBZ0UsR0FBRywrQkFBK0Isb0NBQW9DLG1DQUFtQyxPQUFPLG1EQUFtRCxrQkFBa0IsK0JBQStCLHdCQUF3QixrQ0FBa0Msd0JBQXdCLHFCQUFxQix3QkFBd0IseUJBQXlCLCtTQUErUyxzQ0FBc0Msc0VBQXNFLE1BQU0sb0NBQW9DLGNBQWMsNkJBQTZCLE1BQU0sb0NBQW9DLGdIQUFnSCwrQkFBK0IsMERBQTBELHFCQUFxQixpUkFBaVIsZ0NBQWdDLDBCQUEwQixtQ0FBbUMsb0NBQW9DLGdCQUFnQixnR0FBZ0csc0NBQXNDLDZCQUE2Qiw2RUFBNkUsa0JBQWtCLGVBQWUseUNBQXlDLCtEQUErRCxpQkFBaUIsZ0pBQWdKLDZCQUE2QixpREFBaUQsOEJBQThCLHNRQUFzUSwrREFBK0QscUJBQXFCLG1OQUFtTixXQUFXLHNFQUFzRSxJQUFJLDZCQUE2QixTQUFTLFlBQVksa0NBQWtDLE1BQU0scVVBQXFVLGlCQUFpQiw2QkFBNkIsY0FBYyxzQkFBc0IsbUVBQW1FLHlFQUF5RSxlQUFlLHVCQUF1Qiw4SkFBOEosZUFBZSx1QkFBdUIsK01BQStNLGlCQUFpQix1RUFBdUUsaUJBQWlCLEtBQUssMEVBQTBFLEVBQUUsZUFBZSwwREFBMEQsa0JBQWtCLDhCQUE4Qix5QkFBeUIsK0JBQStCLGlDQUFpQyxxTUFBcU0seURBQXlELDZEQUE2RCxnQkFBZ0Isa0VBQWtFLGFBQWEsb0JBQW9CLFdBQVcsYUFBYSxnVUFBZ1UsYUFBYSxnU0FBZ1MsZUFBZSxjQUFjLFlBQVksaUJBQWlCLCtCQUErQixjQUFjLGdGQUFnRix5Q0FBeUMsK0NBQStDLGdCQUFnQixhQUFhLGtDQUFrQyxrQkFBa0IsYUFBYSwrQ0FBK0MsbUJBQW1CLGFBQWEseUJBQXlCLDRHQUE0RyxpQkFBaUIsa0JBQWtCLHVCQUF1QiwrUEFBK1AsK0JBQStCLDZCQUE2QixlQUFlLGtDQUFrQyxPQUFPLGNBQWMsd0JBQXdCLFlBQVksV0FBVyw2QkFBNkIsY0FBYyxFQUFFLFlBQVksb0JBQW9CLHdHQUF3Ryw2QkFBNkIsMkRBQTJELCtUQUErVCx1Q0FBdUMseUNBQXlDLGlEQUFpRCwrQ0FBK0MsMkNBQTJDLDJDQUEyQyw0REFBNEQsNkRBQTZELGVBQWUsdUJBQXVCLHlLQUF5SyxlQUFlLHlDQUF5Qyw4QkFBOEIsMEJBQTBCLHlGQUF5RixpQkFBaUIsK0RBQStELGlCQUFpQix5SEFBeUgsNkJBQTZCLGdNQUFnTSxlQUFlLHVCQUF1Qix3QkFBd0IsMkJBQTJCLEdBQUcsNkJBQTZCLFNBQVMsZ0JBQWdCLDBDQUEwQyxrQkFBa0IsaUJBQWlCLG1CQUFtQixZQUFZLG9CQUFvQixnQkFBZ0Isc0JBQXNCLGdCQUFnQixrQkFBa0IsaUNBQWlDLFlBQVksWUFBWSxXQUFXLEtBQUssV0FBVyxtRUFBbUUsYUFBYSwyQkFBMkIsaUJBQWlCLGlDQUFpQywrQ0FBK0MsaUJBQWlCLHdDQUF3QyxjQUFjLEdBQUcsY0FBYyxvQkFBb0IsdUJBQXVCLFNBQVMsY0FBYyx5QkFBeUIsbUJBQW1CLGNBQWMsWUFBWSxLQUFLLDJCQUEyQixFQUFFLElBQUksTUFBTSxFQUFFLGdDQUFnQyxvQkFBb0IsTUFBTSxhQUFhLG1CQUFtQixtQkFBbUIsU0FBUyxrQkFBa0IsUUFBUSwwSEFBMEgsZ0JBQWdCLFVBQVUscUJBQXFCLDBCQUEwQiwwRUFBMEUsUUFBUSwwREFBMEQsa0JBQWtCLDRDQUE0Qyx3Q0FBd0Msa0JBQWtCLDRDQUE0Qyw2SUFBNkksd0JBQXdCLDRDQUE0QywwQ0FBMEMsaUJBQWlCLDRDQUE0Qyx3REFBd0Qsa0JBQWtCLDRDQUE0QyxtQ0FBbUMsaUJBQWlCLHVEQUF1RCxpQkFBaUIsbUNBQW1DLG1DQUFtQyxxQkFBcUIsbUNBQW1DLDhEQUE4RCxtQkFBbUIsbUNBQW1DLDhEQUE4RCxVQUFVLG1DQUFtQyw2REFBNkQsU0FBUyxxQkFBcUIsMERBQTBELFlBQVksbUNBQW1DLDREQUE0RCxRQUFRLHlEQUF5RCxnQkFBZ0IsbUNBQW1DLCtEQUErRCxFQUFFLGlCQUFpQixZQUFZLHFCQUFxQiwwQkFBMEIsU0FBUyxxQkFBcUIscUJBQXFCLFFBQVEsZ0JBQWdCLEVBQUUsZUFBZSxpQkFBaUIsNEJBQTRCLE1BQU0sNk1BQTZNLGVBQWUsdUJBQXVCLDhFQUE4RSxpQkFBaUIsc0dBQXNHLG9GQUFvRix1QkFBdUIsdUJBQXVCLG1FQUFtRSxlQUFlLHFEQUFxRCxxQkFBcUIsa0JBQWtCLE9BQU8sY0FBYywwQkFBMEIsS0FBSyx3QkFBd0Isc0RBQXNELHNCQUFzQixzREFBc0QscUJBQXFCLFFBQVEsY0FBYyxvSEFBb0gseUJBQXlCLFlBQVksRUFBRSxtQkFBbUIsSUFBSSxJQUFJLElBQUksYUFBYSw2TUFBNk0sTUFBTSxjQUFjLG9CQUFvQixJQUFJLGdCQUFnQiw4QkFBOEIsVUFBVSx1QkFBdUIsa0JBQWtCLE9BQU8sK0NBQStDLE9BQU8sZ1BBQWdQLGFBQWEsa0JBQWtCLElBQUksOEJBQThCLFVBQVUsZUFBZSx5QkFBeUIsbUJBQW1CLHdUQUF3VCxrQ0FBa0MsOGRBQThkLGVBQWUsOERBQThELGtDQUFrQyw2Q0FBNkMsd0NBQXdDLHFCQUFxQixnREFBZ0QsRUFBRSxlQUFlLDJCQUEyQixxQ0FBcUMsNFhBQTRYLDBCQUEwQixrQ0FBa0MsR0FBRyxVQUFVLGlDQUFpQyxxRUFBcUUsRUFBRSw2QkFBNkIsa0JBQWtCLHFCQUFxQix1QkFBdUIsZ0RBQWdELE1BQU0sMEJBQTBCLHdEQUF3RCw4QkFBOEIseUJBQXlCLHlGQUF5RixtQ0FBbUMsbUVBQW1FLDhEQUE4RCxNQUFNLDBIQUEwSCxtQ0FBbUMsNEJBQTRCLDZCQUE2QiwrQkFBK0IsK0JBQStCLDBCQUEwQiwrQ0FBK0MsNENBQTRDLG1FQUFtRSxtREFBbUQsdUJBQXVCLDhCQUE4QixZQUFZLCtCQUErQiw0RkFBNEYsOEJBQThCLG1NQUFtTSwyQkFBMkIsbUpBQW1KLHFCQUFxQixrQ0FBa0MsaUJBQWlCLDRDQUE0Qyx5QkFBeUIsYUFBYSxPQUFPLDhXQUE4Vyw4QkFBOEIscURBQXFELGFBQWEsOEJBQThCLEVBQUUsNkNBQTZDLHFCQUFxQix5RkFBeUYsT0FBTyxtQkFBbUIsNEJBQTRCLGVBQWUsb0JBQW9CLDBCQUEwQixvQkFBb0IsS0FBSyxNQUFNLElBQUksbUJBQW1CLHlDQUF5QyxtRUFBbUUsc0JBQXNCLFlBQVksV0FBVyxLQUFLLE1BQU0sd0RBQXdELE9BQU8saUJBQWlCLG9FQUFvRSxJQUFJLHdDQUF3QyxnQkFBZ0IsYUFBYSxRQUFRLHlDQUF5QyxpQkFBaUIsdUJBQXVCLFlBQVksV0FBVyxzQkFBc0IsOEJBQThCLDREQUE0RCxNQUFNLEdBQUcsSUFBSSw4QkFBOEIsTUFBTSxZQUFZLG1CQUFtQixvQkFBb0IsOEJBQThCLDhFQUE4RSx1QkFBdUIsb0NBQW9DLCtCQUErQixtQkFBbUIsS0FBSywrQkFBK0IsMEJBQTBCLGlDQUFpQywwQkFBMEIsNEVBQTRFLE1BQU0sWUFBWSxtQkFBbUIsd0JBQXdCLG1QQUFtUCxlQUFlLHlKQUF5SixpQkFBaUIsU0FBUyxjQUFjLE1BQU0sY0FBYyxPQUFPLHlCQUF5QixzQkFBc0IsWUFBWSxXQUFXLFlBQVksZ0JBQWdCLHNGQUFzRix3QkFBd0IsSUFBSSxhQUFhLFNBQVMsTUFBTSxXQUFXLGlCQUFpQiwrSUFBK0ksbUJBQW1CLHVFQUF1RSw2QkFBNkIseUNBQXlDLGlCQUFpQiw0QkFBNEIsc0JBQXNCLFlBQVksV0FBVyxXQUFXLG1DQUFtQyx1QkFBdUIsb0VBQW9FLGlCQUFpQixRQUFRLHFCQUFxQiwwREFBMEQsWUFBWSxxQkFBcUIsNERBQTRELFFBQVEseURBQXlELFdBQVcscUJBQXFCLDBCQUEwQiwyRUFBMkUsUUFBUSwwREFBMEQsbUJBQW1CLHFCQUFxQiw0REFBNEQscUJBQXFCLHFCQUFxQiw4REFBOEQsaUJBQWlCLHFCQUFxQiw2REFBNkQsZ0JBQWdCLHFCQUFxQiwwREFBMEQsb0JBQW9CLHFCQUFxQiwwQkFBMEIsa0RBQWtELHdCQUF3QixxQkFBcUIsK0RBQStELGlCQUFpQixxQkFBcUIseURBQXlELGlCQUFpQixxQkFBcUIsd0RBQXdELFVBQVUsbUNBQW1DLDZEQUE2RCxrQkFBa0IsNENBQTRDLDRJQUE0SSxFQUFFLGtCQUFrQixtQ0FBbUMsMEJBQTBCLGtIQUFrSCxxQ0FBcUMsb0NBQW9DLE9BQU8sb0RBQW9ELGtCQUFrQixPQUFPLGNBQWMsMEJBQTBCLEtBQUsseUJBQXlCLHNEQUFzRCxxQkFBcUIscURBQXFELEVBQUUsbUJBQW1CLElBQUksSUFBSSxJQUFJLDZCQUE2QixnSUFBZ0ksZUFBZSxxQkFBcUIscURBQXFELE9BQU8sYUFBYSx1QkFBdUIseUJBQXlCLHVFQUF1RSx1QkFBdUIsYUFBYSxVQUFVLHNEQUFzRCx5QkFBeUIsMEJBQTBCLGVBQWUsOFFBQThRLDJCQUEyQixrQkFBa0Isb0JBQW9CLFdBQVcsRUFBRSxvQkFBb0IsV0FBVyxFQUFFLG9CQUFvQix3QkFBd0IsRUFBRSx5QkFBeUIsSUFBSSxrQ0FBa0MsT0FBTyx5QkFBeUIsd0NBQXdDLEVBQUUsY0FBYyx5QkFBeUIsbUJBQW1CLDBDQUEwQyxLQUFLLFNBQVMsRUFBRSxpQkFBaUIsMkNBQTJDLFlBQVksSUFBSSw2QkFBNkIsU0FBUyxtQkFBbUIsR0FBRyxXQUFXLEVBQUUsNkRBQTZELG1DQUFtQyx5QkFBeUIsMEJBQTBCLEVBQUUsK0RBQStELGtKQUFrSixXQUFXLHNCQUFzQixFQUFFLGNBQWMseUJBQXlCLE1BQU0sa0JBQWtCLGlDQUFpQyxLQUFLLFNBQVMsWUFBWSxtQ0FBbUMsRUFBRSwyR0FBMkcscUJBQXFCLHFCQUFxQixlQUFlLElBQUksb0JBQW9CLDBCQUEwQixRQUFRLDBCQUEwQixNQUFNLEVBQUUsUUFBUSxPQUFPLElBQUksb0JBQW9CLFNBQVMsMkJBQTJCLGtDQUFrQyxlQUFlLEVBQUUsSUFBSSxvQkFBb0IsbUJBQW1CLElBQUksU0FBUyxlQUFlLFFBQVEsVUFBVSxxQkFBcUIsR0FBRyxVQUFVLFFBQVEsVUFBVSxhQUFhLEdBQUcsY0FBYyxrQkFBa0IsZUFBZSwrSEFBK0gsY0FBYyxRQUFRLCtCQUErQixpQkFBaUIsZ0lBQWdJLGVBQWUsc0JBQXNCLDJCQUEyQixzQkFBc0Isc0JBQXNCLGFBQWEseUJBQXlCLE1BQU0sUUFBUSxhQUFhLDJCQUEyQixNQUFNLFFBQVEsYUFBYSxnQkFBZ0Isc0JBQXNCLDZCQUE2QixNQUFNLFFBQVEsYUFBYSx3QkFBd0IsY0FBYyxxQkFBcUIsTUFBTSxFQUFFLGVBQWUsYUFBYSxVQUFVLE9BQU8sc0JBQXNCLDJCQUEyQixtRkFBbUYsSUFBSSxFQUFFLG1CQUFtQixJQUFJLElBQUksSUFBSSxJQUFJLGtHQUFrRyxNQUFNLGNBQWMsb0JBQW9CLDhCQUE4QixXQUFXLHVCQUF1QixZQUFZLFdBQVcsS0FBSyxXQUFXLHFEQUFxRCxlQUFlLDBDQUEwQyxtV0FBbVcsaUJBQWlCLFVBQVUsOENBQThDLHdCQUF3QiwyREFBMkQscUJBQXFCLHdEQUF3RCxpQkFBaUIsb0RBQW9ELGlCQUFpQixvREFBb0QsbUJBQW1CLHNEQUFzRCxpQkFBaUIsb0RBQW9ELGdCQUFnQixtREFBbUQsb0JBQW9CLHVEQUF1RCxZQUFZLHFCQUFxQixrSUFBa0ksUUFBUSwrR0FBK0csRUFBRSxPQUFPLGNBQWMsMEJBQTBCLEtBQUsseUJBQXlCLDBEQUEwRCxxQkFBcUIsa0RBQWtELE9BQU8sb0JBQW9CLG9DQUFvQyxFQUFFLG1CQUFtQixJQUFJLElBQUksSUFBSSxJQUFJLGtDQUFrQyxNQUFNLGNBQWMsSUFBSSw4QkFBOEIscUJBQXFCLG9CQUFvQixNQUFNLDhCQUE4QixVQUFVLHVCQUF1QixlQUFlLDBDQUEwQyxtREFBbUQsV0FBVyxpR0FBaUcsME1BQTBNLGVBQWUsb0VBQW9FLE1BQU0sdUJBQXVCLE9BQU8sOENBQThDLDRCQUE0QixjQUFjLGlDQUFpQyx1QkFBdUIsd0NBQXdDLDhCQUE4QixvQ0FBb0MsMkRBQTJELDRCQUE0QixNQUFNLEtBQUssT0FBTyxzRkFBc0YsSUFBSSw4QkFBOEIsYUFBYSxlQUFlLHNCQUFzQixFQUFFLG1CQUFtQixJQUFJLElBQUksSUFBSSxJQUFJLHdCQUF3QixNQUFNLGNBQWMsWUFBWSw4QkFBOEIsVUFBVSxlQUFlLDBDQUEwQyxpQkFBaUIsd0NBQXdDLGFBQWEsRUFBRSxtQkFBbUIsSUFBSSxJQUFJLElBQUksYUFBYSxrREFBa0QsZUFBZSxRQUFRLHVCQUF1Qiw2QkFBNkIsOEhBQThILGVBQWUsT0FBTywyQ0FBMkMsT0FBTywrSUFBK0ksZ0VBQWdFLG1CQUFtQixTQUFTLGtCQUFrQixNQUFNLEVBQUUsWUFBWSxzQkFBc0IsS0FBSyxNQUFNLEVBQUUsUUFBUSxZQUFZLDZDQUE2QyxZQUFZLGVBQWUsOERBQThELGVBQWUsa0JBQWtCLHNCQUFzQiw4REFBOEQscUJBQXFCLDhDQUE4Qyx5QkFBeUIsTUFBTSxFQUFFLG1CQUFtQixlQUFlLFFBQVEsYUFBYSxzQkFBc0IsY0FBYyxjQUFjLEVBQUUsZ0JBQWdCLFlBQVksWUFBWSxJQUFJLElBQUksK0JBQStCLDJDQUEyQywwQkFBMEIsU0FBUyxvQkFBb0IsUUFBUSx1QkFBdUIseUJBQXlCLE1BQU0sRUFBRSxzQkFBc0Isb0JBQW9CLElBQUksMERBQTBELEVBQUUsc0NBQXNDLFNBQVMsSUFBSSx1QkFBdUIsU0FBUyxRQUFRLGtCQUFrQix1QkFBdUIsbUJBQW1CLHVFQUF1RSx5Q0FBeUMsdUJBQXVCLGFBQWEsV0FBVywrQkFBK0IsaUJBQWlCLGNBQWMsY0FBYyxnQkFBZ0Isb0VBQW9FLEtBQUssU0FBUyxjQUFjLDJGQUEyRixNQUFNLFlBQVksV0FBVyxLQUFLLGtFQUFrRSxVQUFVLGtCQUFrQix3RUFBd0UsTUFBTSxJQUFJLHFCQUFxQixXQUFXLGdDQUFnQyxzQ0FBc0MsNkJBQTZCLEdBQUcsa0NBQWtDLFFBQVEsU0FBUyxzRUFBc0UsMENBQTBDLDhCQUE4QixVQUFVLE1BQU0sa0RBQWtELGFBQWEsVUFBVSxTQUFTLEtBQUssdURBQXVELElBQUksTUFBTSxNQUFNLE1BQU0sY0FBYyxjQUFjLGNBQWMsMkNBQTJDLDBDQUEwQyxzREFBc0QsTUFBTSxpQ0FBaUMsRUFBRSwrQkFBK0IsTUFBTSxFQUFFLHNCQUFzQixxQkFBcUIsZUFBZSxNQUFNLEdBQUcsOERBQThELElBQUksSUFBSSxzQkFBc0IsYUFBYSwyQkFBMkIsZUFBZSxVQUFVLEtBQUssZ0JBQWdCLE1BQU0sRUFBRSxxQkFBcUIsc0JBQXNCLG9CQUFvQixjQUFjLE1BQU0sR0FBRyw0QkFBNEIsTUFBTSxFQUFFLHNHQUFzRyxLQUFLLGVBQWUsMkJBQTJCLE1BQU0sRUFBRSxtQ0FBbUMsTUFBTSxFQUFFLHFDQUFxQyxNQUFNLEVBQUUsc0dBQXNHLEtBQUssbUJBQW1CLGtFQUFrRSxtQkFBbUIsTUFBTSxFQUFFLFNBQVMscUJBQXFCLGNBQWMsWUFBWSxPQUFPLEtBQUssaUJBQWlCLGVBQWUsc0NBQXNDLFNBQVMsYUFBYSx3QkFBd0IsS0FBSyx1QkFBdUIsd0hBQXdILFFBQVEsd0JBQXdCLElBQUksWUFBWSw4QkFBOEIsRUFBRSxtQkFBbUIsSUFBSSxJQUFJLElBQUksSUFBSSxZQUFZLGVBQWUsYUFBYSxPQUFPLHdIQUF3SCxPQUFPLHFCQUFxQiw4Q0FBOEMsY0FBYywwQkFBMEIsd0NBQXdDLHFDQUFxQyxhQUFhLG1GQUFtRixpQkFBaUIsb0JBQW9CLFlBQVksV0FBVyxnQ0FBZ0MseUVBQXlFLEVBQUUsNEJBQTRCLGdFQUFnRSxFQUFFLDRCQUE0QixjQUFjLGNBQWMsUUFBUSxrREFBa0QseUVBQXlFLGFBQWEsZ0lBQWdJLEtBQUssa0NBQWtDLHNCQUFzQixzQkFBc0IsYUFBYSx5QkFBeUIsTUFBTSxRQUFRLGFBQWEsRUFBRSxlQUFlLHVDQUF1QywrQkFBK0IsSUFBSSxxQ0FBcUMsT0FBTyxTQUFTLE9BQU8sNEJBQTRCLElBQUksb0NBQW9DLE9BQU8sU0FBUyxTQUFTLHlCQUF5QixVQUFVLE1BQU0sUUFBUSxhQUFhLEdBQUcsTUFBTSxvQ0FBb0MsTUFBTSxRQUFRLGFBQWEsd0JBQXdCLGNBQWMscUJBQXFCLE1BQU0sRUFBRSxlQUFlLGFBQWEsVUFBVSxPQUFPLHVCQUF1QixlQUFlLHVDQUF1Qyx5QkFBeUIsTUFBTSxLQUFLLElBQUksZUFBZSxnQkFBZ0IscUJBQXFCLE1BQU0sYUFBYSxRQUFRLE1BQU0sV0FBVyxnQ0FBZ0Msa0ZBQWtGLEtBQUssRUFBRSxtQkFBbUIsSUFBSSxJQUFJLElBQUkseURBQXlELE9BQU8seUZBQXlGLGVBQWUsT0FBTyw0REFBNEQsK0JBQStCLFlBQVksZUFBZSw0QkFBNEIsT0FBTyw4QkFBOEIsT0FBTywwSEFBMEgsb0NBQW9DLGlCQUFpQixxSUFBcUksaUJBQWlCLDJDQUEyQyxpQkFBaUIsMEVBQTBFLHdFQUF3RSxRQUFRLDJGQUEyRixRQUFRLHVDQUF1QyxTQUFTLGlCQUFpQixpSUFBaUksYUFBYSxhQUFhLE1BQU0sbUJBQW1CLElBQUksc0JBQXNCLE1BQU0sWUFBWSwwQkFBMEIsSUFBSSxVQUFVLFNBQVMsU0FBUyx1SkFBdUosS0FBSyxJQUFJLFlBQVksU0FBUyxZQUFZLDBCQUEwQixRQUFRLE1BQU0sa0dBQWtHLElBQUksSUFBSSxNQUFNLEVBQUUsS0FBSyxXQUFXLEVBQUUsaUJBQWlCLGlCQUFpQiwwQkFBMEIsNkNBQTZDLGlCQUFpQixLQUFLLElBQUksUUFBUSxpQ0FBaUMsWUFBWSxzQkFBc0IsaUdBQWlHLFFBQVEseUJBQXlCLE1BQU0scUVBQXFFLHNCQUFzQixFQUFFLGdCQUFnQixZQUFZLDhCQUE4QiwrQ0FBK0MsVUFBVSw4QkFBOEIsMEVBQTBFLDBEQUEwRCx1QkFBdUIsOENBQThDLHVCQUF1QiwwRUFBMEUsc0JBQXNCLHVCQUF1Qix1Q0FBdUMsaUJBQWlCLDBFQUEwRSxzQkFBc0IseUJBQXlCLHlCQUF5Qix3QkFBd0IsY0FBYyxzRkFBc0YseUJBQXlCLE1BQU0sK0VBQStFLHdFQUF3RSx5QkFBeUIsd0RBQXdELHFCQUFxQixzQkFBc0IsRUFBRSw4QkFBOEIsOEJBQThCLHdCQUF3QixzQkFBc0IsT0FBTyxtQkFBbUIsb0RBQW9ELFNBQVMsSUFBSSx5QkFBeUIsTUFBTSx5RUFBeUUsaUJBQWlCLFNBQVMsY0FBYyx1QkFBdUIsUUFBUSxXQUFXLFNBQVMscUJBQXFCLHdFQUF3RSxTQUFTLHlCQUF5QixNQUFNLDRFQUE0RSxzQkFBc0IsRUFBRSxTQUFTLFNBQVMsaUJBQWlCLHdCQUF3Qix5QkFBeUIsOEJBQThCLFlBQVksZUFBZSwwQkFBMEIsdUNBQXVDLFNBQVMsd0JBQXdCLHlHQUF5RyxNQUFNLG9FQUFvRSx5QkFBeUIsTUFBTSxvRUFBb0Usb0JBQW9CLFlBQVksd0JBQXdCLHlHQUF5RyxNQUFNLG9FQUFvRSx5QkFBeUIsTUFBTSxvRUFBb0Usa0JBQWtCLGFBQWEsWUFBWSxxQ0FBcUMsMEVBQTBFLHNDQUFzQywyREFBMkQsRUFBRSxtQkFBbUIsSUFBSSxJQUFJLElBQUksSUFBSSxnQ0FBZ0MsT0FBTyw2Q0FBNkMsT0FBTyxnQkFBZ0IsT0FBTyxZQUFZLE1BQU0sS0FBSyxrQkFBa0Isc0JBQXNCLHdCQUF3QixrREFBa0QsWUFBWSxvQkFBb0IsYUFBYSxhQUFhLEVBQUUsZUFBZSxHQUFHLEVBQUUsWUFBWSwwQkFBMEIsRUFBRSxtQkFBbUIsSUFBSSxJQUFJLElBQUksSUFBSSxVQUFVLGVBQWUsc0RBQXNELE9BQU8sV0FBVyxXQUFXLE9BQU8seURBQXlELE9BQU8sT0FBTyw0QkFBNEIsZUFBZSxZQUFZLE9BQU8sYUFBYSx3REFBd0QsOEJBQThCLDBCQUEwQiw0QkFBNEIsaUJBQWlCLHFCQUFxQixxQkFBcUIseUJBQXlCLHVDQUF1QyxZQUFZLGFBQWEsNEJBQTRCLGlCQUFpQiw4QkFBOEIsOEJBQThCLGlFQUFpRSxHQUFHLHFCQUFxQixxQkFBcUIseUJBQXlCLHFCQUFxQixZQUFZLGFBQWEsNEJBQTRCLGlCQUFpQiw4QkFBOEIsOEJBQThCLGlFQUFpRSxHQUFHLGlCQUFpQixlQUFlLGtCQUFrQixvQkFBb0IsZUFBZSxJQUFJLGtCQUFrQixNQUFNLHFCQUFxQixlQUFlLGNBQWMsY0FBYyxrQkFBa0IsbURBQW1ELFdBQVcsRUFBRSxVQUFVLG1DQUFtQyxvQkFBb0IsRUFBRSxVQUFVLG1DQUFtQyxvQkFBb0IsRUFBRSxhQUFhLDZCQUE2QixnQ0FBZ0MsbUNBQW1DLHFEQUFxRCxFQUFFLG1CQUFtQixJQUFJLElBQUksSUFBSSwyQ0FBMkMsdUJBQXVCLHNEQUFzRCwwQ0FBMEMsc0NBQXNDLGtDQUFrQyxvQ0FBb0MsZ0NBQWdDLGdDQUFnQyw0QkFBNEIsa0NBQWtDLHNDQUFzQyw0Q0FBNEMsZ0NBQWdDLDhCQUE4QixzQkFBc0IsZ0NBQWdDLDhCQUE4QixxQ0FBcUMsb0NBQW9DLFdBQVcsRUFBRSw0QkFBNEIsK0JBQStCLEVBQUUsbUJBQW1CLElBQUksSUFBSSxJQUFJLDBEQUEwRCxzREFBc0QsYUFBYSxtREFBbUQsSUFBSSwwQkFBMEIsTUFBTSxXQUFXLG1CQUFtQix3RUFBd0UsRUFBRSxtQkFBbUIsSUFBSSxJQUFJLElBQUksSUFBSSxVQUFVLDBDQUEwQyxlQUFlLDBDQUEwQyx1QkFBdUIscUJBQXFCLCtCQUErQixTQUFTLGtEQUFrRCw4QkFBOEIsa0JBQWtCLGlDQUFpQyxzQkFBc0IsUUFBUSxZQUFZLG9CQUFvQixLQUFLLDZCQUE2QiwrQ0FBK0MsT0FBTyx3Q0FBd0Msa0JBQWtCLFlBQVksSUFBSSw0QkFBNEIsVUFBVSw2QkFBNkIsNkJBQTZCLHNCQUFzQiwrQkFBK0IsaUNBQWlDLGtIQUFrSCxvQ0FBb0Msb0lBQW9JLHVEQUF1RCwyQkFBMkIsbUZBQW1GLFlBQVksb0JBQW9CLG9EQUFvRCxTQUFTLHdHQUF3Ryx5QkFBeUIsZUFBZSxvQkFBb0IsS0FBSyw2QkFBNkIsc0NBQXNDLE1BQU0sbUNBQW1DLE1BQU0sZUFBZSxrQ0FBa0Msd0NBQXdDLGtIQUFrSCx3RUFBd0Usa0hBQWtILHNDQUFzQyxvQ0FBb0MsaUNBQWlDLHFEQUFxRCxLQUFLLGtCQUFrQix5R0FBeUcsTUFBTSxvREFBb0QsTUFBTSxhQUFhLGtDQUFrQyxrQkFBa0IsWUFBWSxvQkFBb0IsNEJBQTRCLFVBQVUsZ0NBQWdDLHVCQUF1Qiw0RUFBNEUscUNBQXFDLFdBQVcsc0JBQXNCLDBDQUEwQyxpQkFBaUIsNEJBQTRCLHlFQUF5RSxhQUFhLHVDQUF1QywyQ0FBMkMscUNBQXFDLG9NQUFvTSwrVEFBK1Qsb0NBQW9DLEtBQUssb0JBQW9CLEtBQUssb0JBQW9CLEtBQUssV0FBVywwQkFBMEIscUJBQXFCLDRDQUE0Qyx1QkFBdUIsTUFBTSxpQ0FBaUMsNkJBQTZCLEtBQUssS0FBSyxXQUFXLGtDQUFrQyxvQ0FBb0MsWUFBWSxXQUFXLHNDQUFzQyxXQUFXLFlBQVksT0FBTywwVUFBMFUsNEJBQTRCLDBDQUEwQyxpQ0FBaUMsK0JBQStCLG9DQUFvQyxNQUFNLElBQUksdUNBQXVDLDRDQUE0Qyw0QkFBNEIsdUJBQXVCLGVBQWUsRUFBRSxtQkFBbUIsSUFBSSxJQUFJLElBQUksbUNBQW1DLGVBQWUsMENBQTBDLHlCQUF5QixpQkFBaUIsa0JBQWtCLHlEQUF5RCxZQUFZLDJCQUEyQixpQkFBaUIsK0JBQStCLDZCQUE2QixVQUFVLHFDQUFxQyxVQUFVLHlDQUF5Qyw4QkFBOEIsa0JBQWtCLG9DQUFvQyxrREFBa0QsK0JBQStCLHVDQUF1Qyx1RUFBdUUsNkJBQTZCLHdHQUF3RyxvQ0FBb0MseUNBQXlDLHVDQUF1Qyw2REFBNkQsZ0NBQWdDLGNBQWMsK0JBQStCLDBCQUEwQixFQUFFLG1CQUFtQixJQUFJLElBQUksSUFBSSxhQUFhLGNBQWMsd0dBQXdHLGVBQWUsRUFBRSxtQkFBbUIsSUFBSSxJQUFJLElBQUksa0JBQWtCLFVBQVUsY0FBYyxTQUFTLDRNQUE0TSx1QkFBdUIsK0RBQStELCtCQUErQixvQ0FBb0MsK0JBQStCLG1IQUFtSCxXQUFXLHNCQUFzQixpQkFBaUIsY0FBYyxjQUFjLGVBQWUsYUFBYSxhQUFhLGNBQWMsZ0JBQWdCLHNCQUFzQiwwQkFBMEIsMkJBQTJCLHdCQUF3Qix5REFBeUQseURBQXlELG9CQUFvQixtQkFBbUIsc0JBQXNCLG1CQUFtQixtQkFBbUIsbUJBQW1CLHVCQUF1Qix5REFBeUQsY0FBYyw2bEJBQTZsQixxQkFBcUIsMkJBQTJCLHNCQUFzQix3QkFBd0IsbUJBQW1CLHV1QkFBdXVCLGVBQWUsaURBQWlELGtCQUFrQixzRkFBc0YsSUFBSSwrQkFBK0IsbUNBQW1DLCtCQUErQiw4QkFBOEIsK0JBQStCLCtCQUErQixnQ0FBZ0MsOEJBQThCLCtCQUErQixpQ0FBaUMseUJBQXlCLDBCQUEwQixnQ0FBZ0MsdUNBQXVDLFFBQVEsMkdBQTJHLHVEQUF1RCx3QkFBd0Isd0JBQXdCLHdCQUF3Qiw0QkFBNEIsNEJBQTRCLG1DQUFtQyxTQUFTLGlJQUFpSSw2QkFBNkIscU9BQXFPLDhCQUE4QiwrQ0FBK0Msc0JBQXNCLHdWQUF3Vix3QkFBd0IscUxBQXFMLDBCQUEwQiwreEJBQSt4QixvQkFBb0IsZ0VBQWdFLEVBQUUsbUJBQW1CLElBQUksSUFBSSxJQUFJLDJEQUEyRCx5QkFBeUIsUUFBUSxlQUFlLHlDQUF5Qyx1REFBdUQsNEZBQTRGLGVBQWUsZ0NBQWdDLGlKQUFpSixNQUFNLG9EQUFvRCxVQUFVLDhEQUE4RCwyQ0FBMkMseUNBQXlDLDhEQUE4RCxvRUFBb0Usb0VBQW9FLDhFQUE4RSxrQkFBa0IsZUFBZSxrQkFBa0IsMEhBQTBILGVBQWUsa0JBQWtCLGtIQUFrSCxxQkFBcUIsZUFBZSx5Q0FBeUMsRUFBRSxtQkFBbUIsSUFBSSxJQUFJLElBQUksZUFBZSwySEFBMkgsV0FBVyx3Q0FBd0MsY0FBYyxRQUFRLFlBQVksV0FBVyxvQ0FBb0MsNkNBQTZDLGdCQUFnQixjQUFjLGlCQUFpQixpQkFBaUIscUJBQXFCLHNDQUFzQywwRkFBMEYsUUFBUSwwQ0FBMEMsdUJBQXVCLElBQUksc0JBQXNCLHlCQUF5QixXQUFXLGlDQUFpQyxTQUFTLG9EQUFvRCwwSUFBMEksK0dBQStHLE1BQU0seUNBQXlDLGdCQUFnQiwrQ0FBK0Msd0JBQXdCLGNBQWMsK0NBQStDLDZEQUE2RCxRQUFRLElBQUkscUlBQXFJLGFBQWEsb0VBQW9FLHNCQUFzQixjQUFjLGlDQUFpQyxRQUFRLHlCQUF5QixJQUFJLG9DQUFvQyx5QkFBeUIsSUFBSSxvQ0FBb0MsVUFBVSxjQUFjLDhFQUE4RSxjQUFjLCtDQUErQyxhQUFhLHVKQUF1Siw0QkFBNEIsZUFBZSxFQUFFLG1CQUFtQixJQUFJLElBQUksSUFBSSxpQkFBaUIsV0FBVyxXQUFXLGdCQUFnQixnQkFBZ0IsaUJBQWlCLFNBQVMsWUFBWSxrS0FBa0ssSUFBSSxvd0JBQW93QixjQUFjLDhxQkFBOHFCLGVBQWUscUtBQXFLLDJCQUEyQixpQ0FBaUMsWUFBWSwrQkFBK0IsaUNBQWlDLG1CQUFtQiwwQ0FBMEMsRUFBRSxlQUFlLElBQUksZ0VBQWdFLFFBQVEsY0FBYyxNQUFNLElBQUksK0JBQStCLE9BQU8sc0RBQXNELGNBQWMsSUFBSSxvQkFBb0IsUUFBUSxvQkFBb0IsSUFBSSxjQUFjLFlBQVksaUJBQWlCLElBQUkseUJBQXlCLFNBQVMsbURBQW1ELEVBQUUsbUJBQW1CLElBQUksSUFBSSxJQUFJLGFBQWEsZ0JBQWdCLGdGQUFnRixjQUFjLDZDQUE2QyxpQkFBaUIsNkNBQTZDLHNIQUFzSCxjQUFjLDZJQUE2SSxTQUFTLHVIQUF1SCxzR0FBc0cseVBBQXlQLGdJQUFnSSxlQUFlLCtDQUErQywyQkFBMkIsc0NBQXNDLDBXQUEwVyxlQUFlLGdDQUFnQyxvR0FBb0csZ0JBQWdCLDBDQUEwQyxTQUFTLGtFQUFrRSxvQ0FBb0MsbUNBQW1DLE1BQU0sbUNBQW1DLE1BQU0sbUNBQW1DLE1BQU0sK0VBQStFLE1BQU0sdUNBQXVDLE1BQU0saUNBQWlDLE1BQU0sMkNBQTJDLE1BQU0scUNBQXFDLE1BQU0sbUNBQW1DLHlDQUF5QyxNQUFNLDZCQUE2QixNQUFNLHFEQUFxRCxNQUFNLGtEQUFrRCxnQkFBZ0IsbUJBQW1CLGdCQUFnQixxQ0FBcUMseUVBQXlFLG9GQUFvRixxR0FBcUcseVFBQXlRLGtHQUFrRyxrSEFBa0gsOEtBQThLLG1JQUFtSSxtQkFBbUIsOEJBQThCLE1BQU0sMEdBQTBHLGtHQUFrRyxzTEFBc0wsMEJBQTBCLDhCQUE4Qix3REFBd0QsMEJBQTBCLGtFQUFrRSwyRUFBMkUsMEJBQTBCLDhCQUE4Qiw2REFBNkQsK0ZBQStGLHVLQUF1Syw2RUFBNkUsZUFBZSw2RkFBNkYsaUVBQWlFLGVBQWUsNkZBQTZGLGNBQWMsc0RBQXNELGdCQUFnQixtQkFBbUIsa0JBQWtCLG1DQUFtQyx3Q0FBd0MsNkZBQTZGLHFLQUFxSyxNQUFNLG1DQUFtQyxnREFBZ0Qsc0dBQXNHLHNDQUFzQyw4QkFBOEIsd0RBQXdELDhCQUE4QixnQkFBZ0IsbUJBQW1CLGtCQUFrQixzR0FBc0csd0NBQXdDLHNDQUFzQyw4QkFBOEIsd0RBQXdELDRHQUE0RyxrQkFBa0IscUJBQXFCLGdDQUFnQyxnREFBZ0Qsc0NBQXNDLDhCQUE4Qix3REFBd0QsOEZBQThGLEtBQUssbUJBQW1CLEVBQUUsMEZBQTBGLHdGQUF3RiwwREFBMEQsb0dBQW9HLHlHQUF5RyxpSEFBaUgsMFJBQTBSLEdBQUcsY0FBYyx5TUFBeU0sZUFBZSxrQkFBa0Isa0JBQWtCLG9EQUFvRCxzQ0FBc0MsOEJBQThCLHdEQUF3RCwyRkFBMkYsS0FBSyw2QkFBNkIsRUFBRSx3Q0FBd0Msc0NBQXNDLHFGQUFxRixxR0FBcUcsK0JBQStCLG9CQUFvQix1QkFBdUIsa0JBQWtCLGtEQUFrRCxzQ0FBc0MsOEJBQThCLHdEQUF3RCxnR0FBZ0csS0FBSyxtQkFBbUIsRUFBRSwwQkFBMEIsb0VBQW9FLDBGQUEwRixpQkFBaUIsb0JBQW9CLGtCQUFrQix1RkFBdUYsMEtBQTBLLDZGQUE2RixzQ0FBc0MsOEJBQThCLHdFQUF3RSw2QkFBNkIsRUFBRSx3Q0FBd0MseUZBQXlGLCtCQUErQixxQkFBcUIsMERBQTBELGtCQUFrQiw2REFBNkQsZUFBZSx1REFBdUQscUpBQXFKLE1BQU0sdUpBQXVKLE1BQU0sOERBQThELG9CQUFvQixlQUFlLDhCQUE4Qix5REFBeUQsVUFBVSxtQkFBbUIsa0JBQWtCLDREQUE0RCx5S0FBeUssOEJBQThCLHdEQUF3RCw2Q0FBNkMsYUFBYSxnQkFBZ0Isa0JBQWtCLDBIQUEwSCxrSUFBa0ksOEJBQThCLCtGQUErRixrQkFBa0Isa0JBQWtCLDRLQUE0SyxnQkFBZ0IscUNBQXFDLGlFQUFpRSw4Q0FBOEMsc0RBQXNELG1CQUFtQiw4QkFBOEIsb0RBQW9ELGVBQWUscUNBQXFDLGlFQUFpRSxvQ0FBb0Msc0RBQXNELFlBQVksMkNBQTJDLHlDQUF5QyxtREFBbUQsaUJBQWlCLDJDQUEyQyx5Q0FBeUMsd0RBQXdELG9CQUFvQixzQkFBc0IsbURBQW1ELEtBQUssMkJBQTJCLEVBQUUsK0ZBQStGLEtBQUssTUFBTSw4QkFBOEIsNkhBQTZILGdCQUFnQixnREFBZ0QsYUFBYSxNQUFNLG9IQUFvSCxnQkFBZ0Isd0NBQXdDLHdDQUF3QyxvQ0FBb0Msb0NBQW9DLHlDQUF5Qyx5Q0FBeUMsd0NBQXdDLDBDQUEwQyx5Q0FBeUMsbUJBQW1CLHNCQUFzQixpREFBaUQsS0FBSyxZQUFZLEVBQUUsd0JBQXdCLDhFQUE4RSwyQkFBMkIsK0RBQStELHlCQUF5QixpQ0FBaUMsOENBQThDLDBFQUEwRSxNQUFNLG1CQUFtQiw2Q0FBNkMsMEJBQTBCLFNBQVMsMkxBQTJMLFNBQVMsYUFBYSw2VEFBNlQsY0FBYyx1REFBdUQsZUFBZSxFQUFFLG1CQUFtQixJQUFJLElBQUksSUFBSSxJQUFJLFVBQVUsNEJBQTRCLDhDQUE4QyxlQUFlLHdCQUF3QixzREFBc0QsY0FBYyxZQUFZLEtBQUssaUJBQWlCLGVBQWUsZ0NBQWdDLDBEQUEwRCxnQkFBZ0Isa0RBQWtELGVBQWUsd0JBQXdCLDhCQUE4QixZQUFZLDhGQUE4RixFQUFFLG1CQUFtQixJQUFJLElBQUksSUFBSSxpSUFBaUksWUFBWSxjQUFjLHFCQUFxQixzRkFBc0YsMkJBQTJCLFVBQVUsbUNBQW1DLG9DQUFvQyxnQkFBZ0IsRUFBRSxvQ0FBb0Msa0JBQWtCLEVBQUUsb0NBQW9DLG9CQUFvQixFQUFFLGlDQUFpQyxXQUFXLHFCQUFxQiw2QkFBNkIsaUJBQWlCLElBQUksRUFBRSxtQkFBbUIsSUFBSSxJQUFJLElBQUksWUFBWSxTQUFTLHNPQUFzTyxtQkFBbUIsc0hBQXNILDZCQUE2QiwrQkFBK0IsK0JBQStCLHNFQUFzRSxpQ0FBaUMsOEJBQThCLG1DQUFtQyxnQ0FBZ0MsNENBQTRDLGtDQUFrQyw0QkFBNEIsMkRBQTJELHlDQUF5QyxNQUFNLGVBQWUsUUFBUSxxRUFBcUUsRUFBRSxlQUFlLFlBQVksbUJBQW1CLFdBQVcsNklBQTZJLG1CQUFtQixRQUFRLCtGQUErRixnR0FBZ0csb0ZBQW9GLE1BQU0sZ0ZBQWdGLDZGQUE2RixpR0FBaUcsVUFBVSxRQUFRLFVBQVUsMEJBQTBCLGFBQWEsTUFBTSxxRUFBcUUsMkZBQTJGLDhJQUE4SSw0REFBNEQsT0FBTyxRQUFRLHFDQUFxQyxjQUFjLFNBQVMsOENBQThDLHdEQUF3RCxZQUFZLDZFQUE2RSxvQkFBb0Isd0RBQXdELGlLQUFpSyxRQUFRLDhVQUE4VSxtQkFBbUIsbUNBQW1DLHNEQUFzRCw0RUFBNEUsV0FBVyxVQUFVLDBCQUEwQixhQUFhLGlJQUFpSSxtQkFBbUIsNEJBQTRCLG1DQUFtQyxrR0FBa0csMkNBQTJDLG9DQUFvQyxxREFBcUQsMEhBQTBILFVBQVUsV0FBVyxVQUFVLDBCQUEwQixhQUFhLHFKQUFxSixtQkFBbUIsbUNBQW1DLGtIQUFrSCw4RkFBOEYsV0FBVyw4QkFBOEIsOEJBQThCLGFBQWEsK0pBQStKLG1CQUFtQiwwQkFBMEIsbUNBQW1DLHlFQUF5RSwwRUFBMEUsS0FBSyxXQUFXLFVBQVUsMEJBQTBCLGFBQWEsNENBQTRDLFdBQVcsTUFBTSw0QkFBNEIsOEZBQThGLDRGQUE0RixVQUFVLDZHQUE2Ryx5SEFBeUgsaUJBQWlCLDZHQUE2Ryx3QkFBd0IsNkRBQTZELHVJQUF1SSxTQUFTLGdCQUFnQixnREFBZ0Qsb0tBQW9LLFNBQVMsbUJBQW1CLG1DQUFtQyw4Q0FBOEMsMEVBQTBFLGlEQUFpRCxXQUFXLE1BQU0sOEVBQThFLE1BQU0sMERBQTBELFdBQVcsVUFBVSw4QkFBOEIsYUFBYSx1RkFBdUYsbUJBQW1CLG1DQUFtQywyRUFBMkUsMEVBQTBFLGlEQUFpRCxXQUFXLE1BQU0sbUZBQW1GLHlCQUF5QiwrREFBK0QsV0FBVyxVQUFVLDBCQUEwQixhQUFhLCtFQUErRSxTQUFTLFlBQVksV0FBVyxpQkFBaUIsU0FBUyxtQkFBbUIsbUNBQW1DLCtFQUErRSwwRUFBMEUscURBQXFELFdBQVcsTUFBTSw4RUFBOEUsTUFBTSwwREFBMEQsV0FBVyxVQUFVLDhCQUE4QixhQUFhLG9HQUFvRyxtQkFBbUIsK0JBQStCLG1CQUFtQixtQ0FBbUMsa0RBQWtELFVBQVUsOEJBQThCLGFBQWEsMkdBQTJHLG1CQUFtQixtQ0FBbUMsMkNBQTJDLG9FQUFvRSxrQkFBa0IsaUhBQWlILFVBQVUsaUJBQWlCLG1GQUFtRixFQUFFLE9BQU8sWUFBWSxpR0FBaUcsaUJBQWlCLHNCQUFzQix5REFBeUQsbUJBQW1CLGlCQUFpQixpQkFBaUIsOEZBQThGLGlCQUFpQixZQUFZLG1EQUFtRCxpQkFBaUIsWUFBWSwrQ0FBK0MsaUJBQWlCLGtFQUFrRSxpQkFBaUIsOENBQThDLGlCQUFpQixPQUFPLE9BQU8sUUFBUSxnQkFBZ0IsK0JBQStCLFVBQVUsWUFBWSw2REFBNkQsRUFBRSxJQUFJLEVBQUUsT0FBTyxPQUFPLE1BQU0sWUFBWSx3RUFBd0UsRUFBRSxJQUFJLEVBQUUsT0FBTyxPQUFPLE1BQU0sY0FBYyxxREFBcUQsRUFBRSxJQUFJLEVBQUUsT0FBTyx1QkFBdUIsTUFBTSxhQUFhLDBFQUEwRSxFQUFFLElBQUksRUFBRSxPQUFPLE9BQU8sTUFBTSxhQUFhLCtFQUErRSxFQUFFLElBQUksRUFBRSxPQUFPLE9BQU8sTUFBTSxXQUFXLDhFQUE4RSxFQUFFLElBQUksRUFBRSxPQUFPLHlCQUF5QixNQUFNLGNBQWMsNERBQTRELEVBQUUsSUFBSSxFQUFFLE9BQU8sa0NBQWtDLE1BQU0sWUFBWSw0REFBNEQsRUFBRSxJQUFJLEVBQUUsT0FBTyxnREFBZ0QsV0FBVyxxTEFBcUwsSUFBSSxNQUFNLHVEQUF1RCxFQUFFLElBQUksRUFBRSxPQUFPLFNBQVMscUJBQXFCLG1CQUFtQixnQ0FBZ0MsV0FBVyxLQUFLLDRCQUE0QixNQUFNLE1BQU0seUJBQXlCLEtBQUssZ0JBQWdCLE1BQU0sUUFBUSxxQ0FBcUMsYUFBYSxxQkFBcUIscUlBQXFJLFVBQVUsYUFBYSxFQUFFLGdCQUFnQixpQ0FBaUMsZUFBZSxTQUFTLG1CQUFtQiw2QkFBNkIsWUFBWSx5REFBeUQsTUFBTSxZQUFZLHdEQUF3RCxNQUFNLGNBQWMsMkNBQTJDLE1BQU0sYUFBYSwyQ0FBMkMsTUFBTSxhQUFhLDJDQUEyQyxNQUFNLFdBQVcsMkNBQTJDLE1BQU0sY0FBYywyQ0FBMkMsTUFBTSxZQUFZLDBDQUEwQyxXQUFXLCtCQUErQixvRUFBb0Usd0VBQXdFLEVBQUUsTUFBTSx1REFBdUQsR0FBRyxTQUFTLEVBQUUsUUFBUSxtQkFBbUIsUUFBUSwwRUFBMEUsV0FBVyxnQ0FBZ0MsV0FBVyxpQkFBaUIsaUJBQWlCLGVBQWUsbURBQW1ELGVBQWUsMENBQTBDLGVBQWUsRUFBRSxtQkFBbUIsSUFBSSxJQUFJLElBQUksYUFBYSxnQkFBZ0IsZUFBZSxVQUFVLGNBQWMsaUJBQWlCLGFBQWEsNEJBQTRCLHdCQUF3QixjQUFjLDZDQUE2QyxTQUFTLG1DQUFtQyxTQUFTLDREQUE0RCxRQUFRLDBCQUEwQiw0RUFBNEUsd0JBQXdCLFFBQVEsMEJBQTBCLDZFQUE2RSxTQUFTLFdBQVcsMkJBQTJCLGVBQWUsRUFBRSxjQUFjLElBQUksSUFBSSxJQUFJLHNCQUFzQixpQkFBaUIsdUJBQXVCLEVBQUUsY0FBYyxJQUFJLElBQUksSUFBSSx1Q0FBdUMsU0FBUyxFQUFFLGFBQWEsY0FBYyx5REFBeUQsV0FBVyxvQkFBb0IsOENBQThDLG1CQUFtQiwyQ0FBMkMsWUFBWSxVQUFVLGVBQWUsV0FBVyxlQUFlLEVBQUUsbUJBQW1CLElBQUksSUFBSSxJQUFJLGNBQWMsZUFBZSwwRkFBMEYsZUFBZSxVQUFVLHdCQUF3QixtQkFBbUIsZ0JBQWdCLG1EQUFtRCxXQUFXLEtBQUssa0JBQWtCLG1IQUFtSCxTQUFTLGNBQWMseUNBQXlDLHdDQUF3QyxrQ0FBa0MsdURBQXVELHVEQUF1RCxTQUFTLHdEQUF3RCxXQUFXLHVOQUF1TixTQUFTLGNBQWMseUNBQXlDLHdDQUF3QyxrQ0FBa0MsdURBQXVELHVEQUF1RCxTQUFTLGdCQUFnQixXQUFXLHVOQUF1TixVQUFVLGVBQWUsY0FBYyxtQkFBbUIsZ0JBQWdCLG1EQUFtRCxXQUFXLEtBQUssa0JBQWtCLHVDQUF1QywyQ0FBMkMseUNBQXlDLE1BQU0sbUJBQW1CLDZCQUE2QixTQUFTLGNBQWMseUNBQXlDLHdDQUF3QyxrQ0FBa0MsdURBQXVELHVEQUF1RCxTQUFTLG9CQUFvQix3REFBd0QsV0FBVyx1Q0FBdUMsMkNBQTJDLDBEQUEwRCwwREFBMEQseUNBQXlDLE1BQU0sbUJBQW1CLDZCQUE2Qix5QkFBeUIsY0FBYyx5Q0FBeUMsd0NBQXdDLGtDQUFrQyx1REFBdUQsdURBQXVELFNBQVMsb0JBQW9CLGdCQUFnQixXQUFXLHVDQUF1QywyQ0FBMkMsMERBQTBELDBEQUEwRCx5Q0FBeUMsTUFBTSxtQkFBbUIsNkJBQTZCLDJCQUEyQixFQUFFLG1CQUFtQixJQUFJLElBQUksSUFBSSxtQkFBbUIsRUFBRSxjQUFjLElBQUksSUFBSSxJQUFJLHVDQUF1QyxTQUFTLEVBQUUsMENBQTBDLGVBQWUsbUJBQW1CLFlBQVksV0FBVyxtQkFBbUIsb0NBQW9DLDREQUE0RCxVQUFVLG9CQUFvQixlQUFlLDBDQUEwQyxZQUFZLFdBQVcsNkJBQTZCLFlBQVksc0JBQXNCLEVBQUUsY0FBYyxJQUFJLElBQUksSUFBSSx1Q0FBdUMsU0FBUyxFQUFFLGdCQUFnQixjQUFjLEtBQUssU0FBUyxVQUFVLGVBQWUsa0JBQWtCLDRDQUE0QyxpQ0FBaUMsU0FBUyxzREFBc0QsZUFBZSx3Q0FBd0MsdUNBQXVDLFdBQVcsZUFBZSw0Q0FBNEMsZUFBZSxrQ0FBa0MsaUJBQWlCLE1BQU0sR0FBRyxTQUFTLHVDQUF1QyxnR0FBZ0csU0FBUyx1Q0FBdUMsMERBQTBELFNBQVMscURBQXFELGVBQWUsRUFBRSxjQUFjLElBQUksSUFBSSxJQUFJLHVDQUF1QyxTQUFTLEVBQUUsdURBQXVELDREQUE0RCxzQ0FBc0MsTUFBTSxJQUFJLFlBQVksSUFBSSxVQUFVLEdBQUcsa0NBQWtDLE1BQU0sNEZBQTRGLDBDQUEwQywwRkFBMEYsTUFBTSwrSEFBK0gsUUFBUSxNQUFNLGtJQUFrSSxPQUFPLGlHQUFpRyxNQUFNLGtJQUFrSSxRQUFRLDJDQUEyQyxRQUFRLGlDQUFpQywrREFBK0QsdUZBQXVGLGlCQUFpQixzQ0FBc0MsK0JBQStCLGVBQWUseUJBQXlCLEtBQUssR0FBRyxFQUFFLE1BQU0sUUFBUSxpQ0FBaUMsK0RBQStELHVGQUF1RixpREFBaUQsb0JBQW9CLGVBQWUsc0NBQXNDLEtBQUssR0FBRyxFQUFFLE1BQU0sb0RBQW9ELE1BQU0sNERBQTRELFFBQVEsZUFBZSxFQUFFLG1CQUFtQixZQUFZLG1CQUFtQixFQUFFLGNBQWMsSUFBSSxJQUFJLElBQUksdUNBQXVDLFNBQVMsRUFBRSwwRUFBMEUsNkJBQTZCLGlCQUFpQix1SEFBdUgsMEJBQTBCLHNCQUFzQixNQUFNLFVBQVUsTUFBTSxFQUFFLHNDQUFzQyw2QkFBNkIsV0FBVyw4TkFBOE4saUJBQWlCLHNGQUFzRixrQkFBa0IsZ0NBQWdDLEVBQUUsY0FBYyxJQUFJLElBQUksSUFBSSx1Q0FBdUMsU0FBUyxFQUFFLHNCQUFzQixZQUFZLGdCQUFnQixpcENBQWlwQyxlQUFlLElBQUksWUFBWSwrREFBK0QsT0FBTyw4REFBOEQsT0FBTywrQ0FBK0MsNEJBQTRCLG1CQUFtQiwrREFBK0Qsa0JBQWtCLDZDQUE2QyxRQUFRLHlDQUF5QyxNQUFNLGNBQWMsR0FBRyxnQ0FBZ0MsbUJBQW1CLCtEQUErRCxrQkFBa0IsNkNBQTZDLFFBQVEsb0JBQW9CLE1BQU0sY0FBYyx1REFBdUQsZ0JBQWdCLFlBQVksV0FBVyxLQUFLLFdBQVcsVUFBVSxnQ0FBZ0Msa0JBQWtCLFlBQVksNEJBQTRCLGlCQUFpQixnQ0FBZ0MsSUFBSSxvRUFBb0UsTUFBTSxnQkFBZ0IsaUdBQWlHLE1BQU0sK0RBQStELCtFQUErRSxlQUFlLEVBQUUsY0FBYyxJQUFJLElBQUksSUFBSSx1Q0FBdUMsU0FBUyxFQUFFLCtCQUErQixJQUFJLFVBQVUseURBQXlELFVBQVUsNEdBQTRHLEVBQUUsS0FBSyxrQkFBa0IsT0FBTyx1QkFBdUIsTUFBTSxrQkFBa0IsT0FBTyw2Q0FBNkMsTUFBTSx3REFBd0Qsa0JBQWtCLEtBQUssb0JBQW9CLElBQUksZUFBZSxFQUFFLGNBQWMsSUFBSSxJQUFJLElBQUksdUNBQXVDLFNBQVMsRUFBRSxtQkFBbUIsOElBQThJLGdCQUFnQiw0RUFBNEUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUkseURBQXlELGtCQUFrQixTQUFTLFFBQVEsWUFBWSxPQUFPLFdBQVcsc0JBQXNCLHdCQUF3QixVQUFVLGNBQWMsS0FBSyxjQUFjLFNBQVMseUJBQXlCLDRDQUE0Qyx1Q0FBdUMsNkJBQTZCLHVEQUF1RCxzZEFBc2QscU9BQXFPLGVBQWUsd0JBQXdCLFlBQVksS0FBSyxPQUFPLFlBQVksaUJBQWlCLFlBQVksZ0JBQWdCLFFBQVEsaUJBQWlCLGlCQUFpQixpQkFBaUIsd0VBQXdFLGtDQUFrQyxRQUFRLDRCQUE0QixNQUFNLGlDQUFpQyxZQUFZLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLGNBQWMsYUFBYSxlQUFlLGVBQWUsV0FBVyxlQUFlLFlBQVksYUFBYSxnQkFBZ0IseUJBQXlCLG1CQUFtQix1QkFBdUIsMkJBQTJCLGlCQUFpQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsZ0NBQWdDLFFBQVEsc0dBQXNHLFlBQVksWUFBWSxZQUFZLGtLQUFrSyxVQUFVLGVBQWUsY0FBYyxlQUFlLHFCQUFxQixlQUFlLFdBQVcsZUFBZSxrQkFBa0IsZUFBZSxjQUFjLGVBQWUsbUJBQW1CLGVBQWUsZUFBZSxJQUFJLDRVQUE0VSxHQUFHLGlGQUFpRixvQkFBb0IsK0NBQStDLGlHQUFpRywwSEFBMEgsc0dBQXNHLHVHQUF1RyxraUJBQWtpQixvR0FBb0csc0dBQXNHLFdBQVcscUxBQXFMLG9GQUFvRixXQUFXLGtIQUFrSCwyQ0FBMkMsNEJBQTRCLHFKQUFxSixtQkFBbUIsNEJBQTRCLEtBQUssd0NBQXdDLCtDQUErQyxtREFBbUQsc0JBQXNCLHFDQUFxQyxNQUFNLHFCQUFxQixhQUFhLDBCQUEwQixpQkFBaUIsU0FBUyxrQkFBa0IsK0JBQStCLGNBQWMsc0JBQXNCLGVBQWUsZUFBZSx5QkFBeUIsSUFBSSw2Q0FBNkMsb0JBQW9CLFVBQVUseUJBQXlCLHFCQUFxQix1QkFBdUIsa0JBQWtCLDJCQUEyQixpQkFBaUIsV0FBVyxvREFBb0QsVUFBVSxVQUFVLFVBQVUsVUFBVSxLQUFLLHNCQUFzQixnQ0FBZ0Msc0JBQXNCLHFCQUFxQix1QkFBdUIsZ0JBQWdCLGtGQUFrRixtR0FBbUcsc0pBQXNKLFNBQVMsbUJBQW1CLG1CQUFtQixtQkFBbUIsS0FBSyxVQUFVLGNBQWMsa0VBQWtFLFNBQVMsZUFBZSxlQUFlLGdHQUFnRyxVQUFVLEtBQUssNkJBQTZCLEdBQUcsRUFBRSw2QkFBNkIsMERBQTBELGVBQWUsS0FBSyw2QkFBNkIsR0FBRyxFQUFFLDZCQUE2QiwwREFBMEQsZUFBZSxNQUFNLCtDQUErQyxXQUFXLHdIQUF3SCxZQUFZLHdIQUF3SCxRQUFRLHdCQUF3QixpQkFBaUIsOENBQThDLFNBQVMsd0JBQXdCLGlCQUFpQiw4Q0FBOEMsVUFBVSxzRkFBc0YsV0FBVyxzRkFBc0Ysb0JBQW9CLHNCQUFzQixXQUFXLEVBQUUsd0JBQXdCLHVEQUF1RCxtRUFBbUUsa0JBQWtCLHdCQUF3Qix1REFBdUQsMENBQTBDLG1CQUFtQix3QkFBd0IsdURBQXVELDBDQUEwQyxhQUFhLFNBQVMsc0JBQXNCLGNBQWMsNkNBQTZDLFNBQVMsT0FBTyxTQUFTLHNCQUFzQixjQUFjLEdBQUcsb0VBQW9FLG1DQUFtQyxPQUFPLFNBQVMscUJBQXFCLGlCQUFpQiwwQkFBMEIsa0NBQWtDLCtDQUErQyxTQUFTLFFBQVEsYUFBYSxrQkFBa0IsWUFBWSx5QkFBeUIsb0JBQW9CLHdCQUF3QixZQUFZLEVBQUUseUNBQXlDLElBQUksNEdBQTRHLElBQUksK0JBQStCLDhCQUE4QixpSEFBaUgsd0NBQXdDLHFQQUFxUCxNQUFNLFdBQVcsaUJBQWlCLFVBQVUsd0JBQXdCLGlEQUFpRCxJQUFJLHVCQUF1QixHQUFHLHFGQUFxRiw0RUFBNEUsNkNBQTZDLGdCQUFnQiw2Q0FBNkMsNkJBQTZCLDBCQUEwQixpR0FBaUcsZ0JBQWdCLEtBQUssYUFBYSxrQkFBa0IsWUFBWSxNQUFNLElBQUksS0FBSyxRQUFRLEVBQUUsdUJBQXVCLDJCQUEyQix3REFBd0QsNkJBQTZCLFFBQVEscUJBQXFCLGdCQUFnQixLQUFLLGFBQWEsb0JBQW9CLE1BQU0sd0NBQXdDLDZVQUE2VSxVQUFVLEVBQUUsSUFBSSw4Q0FBOEMsb0JBQW9CLGVBQWUsaUJBQWlCLHlEQUF5RCw4Q0FBOEMsMkRBQTJELHVCQUF1QixVQUFVLFdBQVcsRUFBRSxJQUFJLDZCQUE2QixvQkFBb0IsaUNBQWlDLGlCQUFpQiw0Q0FBNEMsWUFBWSxtQ0FBbUMsdUJBQXVCLGNBQWMsU0FBUyxHQUFHLG1EQUFtRCxnQkFBZ0IsRUFBRSxPQUFPLG9DQUFvQyxjQUFjLElBQUksVUFBVSwyQ0FBMkMscUxBQXFMLFFBQVEsNktBQTZLLCtFQUErRSxJQUFJLFVBQVUsOEdBQThHLHNOQUFzTiw0QkFBNEIsV0FBVyx1QkFBdUIsb0dBQW9HLHVHQUF1RyxJQUFJLHdDQUF3QyxrREFBa0QsNkRBQTZELEVBQUUsaUNBQWlDLDJCQUEyQixtQ0FBbUMsTUFBTSxzQkFBc0IsUUFBUSw4R0FBOEcsa0JBQWtCLEVBQUUsSUFBSSxvZkFBb2YsR0FBRyxrREFBa0QsNERBQTRELEVBQUUsT0FBTyx1T0FBdU8sa0JBQWtCLGVBQWUsb0JBQW9CLHVCQUF1QixzQkFBc0IsTUFBTSxpQkFBaUIsZUFBZSwwQ0FBMEMsaUdBQWlHLGlCQUFpQiwrRUFBK0UsNERBQTRELDRHQUE0RyxVQUFVLEVBQUUsSUFBSSx3SEFBd0gsb0JBQW9CLGVBQWUsOEJBQThCLDBSQUEwUix3QkFBd0IsUUFBUSwyQkFBMkIsTUFBTSwyR0FBMkcsVUFBVSxTQUFTLGdCQUFnQixxQkFBcUIsK0NBQStDLE1BQU0sV0FBVyxpQkFBaUIseVdBQXlXLDZCQUE2QixnQkFBZ0IsS0FBSyxhQUFhLGtCQUFrQixTQUFTLFFBQVEsc0JBQXNCLGNBQWMsR0FBRyxpQkFBaUIsOERBQThELE1BQU0saUJBQWlCLDBFQUEwRSxxTkFBcU4sZ0JBQWdCLEtBQUssYUFBYSxxQkFBcUIsZ0JBQWdCLEVBQUUsY0FBYyxJQUFJLElBQUksSUFBSSw4QkFBOEIsU0FBUyxFQUFFLGlEQUFpRCxhQUFhLGlCQUFpQixxQkFBcUIsVUFBVSxzQkFBc0Isd0JBQXdCLGFBQWEsY0FBYyxVQUFVLGFBQWEsY0FBYyxPQUFPLGNBQWMsUUFBUSxvQkFBb0IsV0FBVywwQkFBMEIsaUJBQWlCLEVBQUUsY0FBYyxJQUFJLElBQUksSUFBSSw4QkFBOEIsU0FBUyxFQUFFLGtCQUFrQixxQ0FBcUMsa0JBQWtCLGtCQUFrQixXQUFXLHNCQUFzQixXQUFXLEdBQUcsUUFBUSxvQkFBb0IsUUFBUSx1Q0FBdUMsTUFBTSw0Q0FBNEMsTUFBTSx5QkFBeUIsT0FBTyxlQUFlLEVBQUUsY0FBYyxJQUFJLElBQUksSUFBSSw4QkFBOEIsU0FBUyxFQUFFLGtCQUFrQixxQ0FBcUMsa0JBQWtCLDJCQUEyQixXQUFXLHNCQUFzQixXQUFXLEdBQUcsUUFBUSwyQkFBMkIsUUFBUSxvQkFBb0IsMENBQTBDLGFBQWEsWUFBWSxJQUFJLCtCQUErQiwyQkFBMkIsNkJBQTZCLGdCQUFnQixNQUFNLHFCQUFxQix1QkFBdUIsbUJBQW1CLFFBQVEscUNBQXFDLE9BQU8sZUFBZSxFQUFFLGNBQWMsSUFBSSxJQUFJLElBQUksOEJBQThCLFNBQVMsRUFBRSxrQkFBa0IscUNBQXFDLGlDQUFpQyxzQkFBc0IsT0FBTyx1REFBdUQsTUFBTSxVQUFVLFdBQVcsc0JBQXNCLGFBQWEsR0FBRyxxQkFBcUIsZ0JBQWdCLHNCQUFzQixLQUFLLGlCQUFpQixLQUFLLGdCQUFnQixLQUFLLElBQUksRUFBRSx5QkFBeUIsd0JBQXdCLGlCQUFpQixhQUFhLE9BQU8sZ0JBQWdCLEtBQUssSUFBSSxFQUFFLCtCQUErQiwyRUFBMkUsaUJBQWlCLGFBQWEsUUFBUSwwQkFBMEIsUUFBUSx5Q0FBeUMsTUFBTSxxQkFBcUIsK0JBQStCLDZEQUE2RCxNQUFNLGlCQUFpQixRQUFRLDRCQUE0QixVQUFVLHdCQUF3QixvSkFBb0osY0FBYyx3QkFBd0IsaURBQWlELFVBQVUsb0JBQW9CLE9BQU8sZUFBZSxFQUFFLGNBQWMsSUFBSSxJQUFJLElBQUksOEJBQThCLFNBQVMsRUFBRSxrQkFBa0IsMkNBQTJDLE9BQU8sZUFBZSxFQUFFLGNBQWMsSUFBSSxJQUFJLElBQUksOEJBQThCLFNBQVMsRUFBRSwrQkFBK0IsY0FBYyxpREFBaUQsRUFBRSxjQUFjLElBQUksSUFBSSxJQUFJLDhCQUE4QixTQUFTLEVBQUUseUJBQXlCLDBEQUEwRCxpQkFBaUIsNkRBQTZELHFFQUFxRSxzQkFBc0IseUZBQXlGLHVCQUF1QiwyRkFBMkYsc0JBQXNCLHNFQUFzRSxHQUFHLGNBQWMsOENBQThDLGVBQWUsNENBQTRDLHNCQUFzQixFQUFFLGNBQWMsSUFBSSxJQUFJLElBQUksOEJBQThCLFNBQVMsRUFBRSxrQkFBa0Isd0JBQXdCLGVBQWUsaUJBQWlCLFdBQVcseUNBQXlDLG1CQUFtQiw2QkFBNkIsT0FBTyx1REFBdUQsNkJBQTZCLHVCQUF1Qiw4REFBOEQsTUFBTSxVQUFVLFdBQVcsc0JBQXNCLGVBQWUsSUFBSSxRQUFRLDBCQUEwQixRQUFRLHNCQUFzQixNQUFNLDJCQUEyQixTQUFTLCtCQUErQixPQUFPLHlCQUF5QixRQUFRLGlCQUFpQixPQUFPLHdCQUF3QixtQkFBbUIsd0NBQXdDLGlCQUFpQixxQkFBcUIsd0NBQXdDLDJDQUEyQyx1QkFBdUIsUUFBUSxZQUFZLFNBQVMsMkNBQTJDLHFDQUFxQywwQkFBMEIsVUFBVSw4Q0FBOEMsWUFBWSx1Q0FBdUMsVUFBVSw0Q0FBNEMscUJBQXFCLHdDQUF3QyxhQUFhLGdCQUFnQixzQ0FBc0MsbUVBQW1FLFFBQVEsWUFBWSxTQUFTLDJDQUEyQyxrQkFBa0IsVUFBVSxrQkFBa0IsU0FBUyxRQUFRLFlBQVksU0FBUyxxREFBcUQscUNBQXFDLFFBQVEsZ0JBQWdCLFdBQVcsWUFBWSxTQUFTLHlCQUF5QixvQkFBb0IsbUJBQW1CLGNBQWMsZUFBZSxPQUFPLGVBQWUsRUFBRSxjQUFjLElBQUksSUFBSSxJQUFJLDhCQUE4QixTQUFTLEVBQUUsa0JBQWtCLGdDQUFnQyxlQUFlLGlCQUFpQixXQUFXLDRDQUE0QyxxQkFBcUIsdUZBQXVGLGtGQUFrRixzQkFBc0IsZ0ZBQWdGLHVCQUF1QixrRkFBa0Ysc0JBQXNCLGdGQUFnRixHQUFHLGNBQWMsb0VBQW9FLGVBQWUsZ0VBQWdFLE9BQU8sOERBQThELDZCQUE2QixrQkFBa0IsaUJBQWlCLHdDQUF3QyxXQUFXLHNCQUFzQixlQUFlLEdBQUcsS0FBSyxJQUFJLFFBQVEsR0FBRyxxRUFBcUUsT0FBTyxhQUFhLGFBQWEscUVBQXFFLFFBQVEsaURBQWlELFFBQVEsa0NBQWtDLE1BQU0sa0NBQWtDLFNBQVMsb0NBQW9DLE9BQU8sb0NBQW9DLFFBQVEsZ0JBQWdCLE9BQU8sZ0JBQWdCLG1CQUFtQix3Q0FBd0MsYUFBYSxLQUFLLElBQUksT0FBTyxXQUFXLHFCQUFxQix3Q0FBd0MsYUFBYSxLQUFLLElBQUksT0FBTyx3QkFBd0IsdUJBQXVCLGFBQWEsS0FBSyxXQUFXLDBCQUEwQixjQUFjLDBCQUEwQixVQUFVLDZFQUE2RSxZQUFZLCtCQUErQixVQUFVLHFCQUFxQixlQUFlLHdCQUF3QixhQUFhLCtCQUErQixXQUFXLHFCQUFxQixlQUFlLHdCQUF3QixxQkFBcUIsd0NBQXdDLGFBQWEsS0FBSyxJQUFJLE9BQU8sT0FBTyxnQkFBZ0Isc0NBQXNDLHNCQUFzQixjQUFjLElBQUksbUJBQW1CLHdCQUF3QixJQUFJLGtCQUFrQixNQUFNLGFBQWEsWUFBWSxJQUFJLFVBQVUsVUFBVSxjQUFjLElBQUksTUFBTSxRQUFRLGVBQWUsYUFBYSxjQUFjLFFBQVEsYUFBYSxLQUFLLFdBQVcsRUFBRSx3Q0FBd0MsT0FBTyxrQkFBa0IsVUFBVSxvQkFBb0IsMEJBQTBCLEtBQUssWUFBWSxFQUFFLFVBQVUsaUNBQWlDLFNBQVMsMkJBQTJCLGFBQWEsS0FBSyxXQUFXLEVBQUUsUUFBUSxLQUFLLDBCQUEwQixpQkFBaUIsdUJBQXVCLGNBQWMsUUFBUSxvQkFBb0IsU0FBUyx5QkFBeUIsV0FBVyxZQUFZLGFBQWEsc0JBQXNCLGFBQWEsR0FBRyxTQUFTLFdBQVcsb0NBQW9DLGVBQWUsRUFBRSxNQUFNLGFBQWEsc0JBQXNCLEtBQUssZ0JBQWdCLE9BQU8sWUFBWSxHQUFHLGNBQWMsV0FBVyxpQkFBaUIsS0FBSyxXQUFXLHdCQUF3QixvQkFBb0IsbUJBQW1CLHFCQUFxQixhQUFhLEtBQUssV0FBVyxrQkFBa0IsZUFBZSxPQUFPLGVBQWUsRUFBRSxjQUFjLElBQUksSUFBSSxJQUFJLDhCQUE4QixTQUFTLEVBQUUsa0JBQWtCLHdCQUF3QixlQUFlLGlCQUFpQixXQUFXLHlDQUF5QyxtQkFBbUIsNkJBQTZCLE9BQU8sdURBQXVELDZCQUE2Qix5QkFBeUIsK0RBQStELFlBQVksNkNBQTZDLHlDQUF5Qyw2Q0FBNkMsc0VBQXNFLElBQUksZ0RBQWdELFlBQVksU0FBUyxtQ0FBbUMsMEJBQTBCLGtFQUFrRSxXQUFXLHNCQUFzQixlQUFlLEdBQUcsSUFBSSxpQ0FBaUMsWUFBWSxJQUFJLDJCQUEyQixpQkFBaUIsU0FBUywwQkFBMEIsWUFBWSxTQUFTLDBCQUEwQiwyREFBMkQsWUFBWSxJQUFJLGtDQUFrQywwQkFBMEIsS0FBSyx3REFBd0QsaURBQWlELDRDQUE0QyxRQUFRLG9GQUFvRixRQUFRLHNCQUFzQixNQUFNLDJCQUEyQixTQUFTLCtCQUErQixPQUFPLHlCQUF5QixRQUFRLDRDQUE0QyxPQUFPLDRDQUE0QyxZQUFZLHlMQUF5TCxVQUFVLHFCQUFxQiw2QkFBNkIsMkhBQTJILGFBQWEsZ01BQWdNLFdBQVcscUJBQXFCLDZCQUE2QixvSEFBb0gsbUJBQW1CLHdDQUF3QyxJQUFJLDJDQUEyQyxXQUFXLG9CQUFvQixxQkFBcUIsd0NBQXdDLElBQUksMkNBQTJDLFdBQVcsZ0JBQWdCLGdCQUFnQixzQ0FBc0MsY0FBYyxJQUFJLG1CQUFtQix3QkFBd0IsSUFBSSxrQkFBa0IsTUFBTSxTQUFTLFlBQVksU0FBUyxvQ0FBb0MsY0FBYyxZQUFZLElBQUkscUJBQXFCLFlBQVksV0FBVyx5QkFBeUIsY0FBYyxPQUFPLDZCQUE2QixJQUFJLDJDQUEyQyxXQUFXLDJDQUEyQyxxQkFBcUIsd0NBQXdDLHlCQUF5QixvQ0FBb0MsTUFBTSxTQUFTLGNBQWMsU0FBUyxvQ0FBb0MsMkJBQTJCLFdBQVcsc0JBQXNCLGVBQWUsR0FBRyxjQUFjLHVCQUF1Qix1QkFBdUIsU0FBUyxZQUFZLFNBQVMsS0FBSyw4QkFBOEIsa0JBQWtCLGVBQWUsWUFBWSxJQUFJLGlDQUFpQyxxQkFBcUIsMEJBQTBCLFVBQVUsOENBQThDLFFBQVEsWUFBWSxTQUFTLHlEQUF5RCxrQkFBa0IsVUFBVSxtQkFBbUIsS0FBSyxJQUFJLEVBQUUsOEJBQThCLHNGQUFzRixTQUFTLDJCQUEyQixrQ0FBa0MsWUFBWSxTQUFTLEtBQUssOEJBQThCLDBDQUEwQyxLQUFLLFNBQVMsZ0JBQWdCLGNBQWMsUUFBUSxTQUFTLFlBQVksU0FBUyxvQ0FBb0MsVUFBVSxZQUFZLFNBQVMsa0NBQWtDLGNBQWMscUJBQXFCLFNBQVMseUJBQXlCLFdBQVcsNkZBQTZGLFlBQVksU0FBUyxtQ0FBbUMsWUFBWSxXQUFXLHlCQUF5QixXQUFXLFlBQVksU0FBUyx1Q0FBdUMsb0JBQW9CLG1CQUFtQixZQUFZLFNBQVMsbUNBQW1DLGVBQWUsT0FBTyxlQUFlLEVBQUUsY0FBYyxJQUFJLElBQUksSUFBSSw4QkFBOEIsU0FBUyxFQUFFLDBDQUEwQyxhQUFhLGlCQUFpQixvR0FBb0csSUFBSSxXQUFXLCtCQUErQixzQkFBc0IsSUFBSSxPQUFPLE1BQU0sV0FBVyxLQUFLLFFBQVEsWUFBWSxLQUFLLFNBQVMsSUFBSSxXQUFXLFFBQVEsVUFBVSxJQUFJLE9BQU8sU0FBUyxNQUFNLFdBQVcsS0FBSyxRQUFRLFlBQVksb0JBQW9CLEtBQUssNkJBQTZCLHFHQUFxRyxLQUFLLDZCQUE2Qix1R0FBdUcsZUFBZSx3QkFBd0IsY0FBYywrQkFBK0IsS0FBSyxpQkFBaUIsMEJBQTBCLEtBQUssaUJBQWlCLDBCQUEwQixLQUFLLHVFQUF1RSwyQkFBMkIsRUFBRSxjQUFjLElBQUksSUFBSSxJQUFJLDhCQUE4QixTQUFTLEVBQUUsa0JBQWtCLDBEQUEwRCw0QkFBNEIsc0JBQXNCLE9BQU8sd0ZBQXdGLHFCQUFxQixNQUFNLFdBQVcsS0FBSyxXQUFXLGdCQUFnQixpQkFBaUIsTUFBTSxJQUFJLHFDQUFxQyxHQUFHLHVCQUF1QixjQUFjLG9CQUFvQixpQkFBaUIsS0FBSyxXQUFXLGlCQUFpQiw4Q0FBOEMscUJBQXFCLDRCQUE0QixxQ0FBcUMsT0FBTyxhQUFhLEtBQUssRUFBRSxFQUFFLG9CQUFvQixhQUFhLHNCQUFzQixjQUFjLFNBQVMsT0FBTyxhQUFhLEtBQUssRUFBRSxvQ0FBb0MsU0FBUyxPQUFPLGFBQWEsS0FBSyxFQUFFLEVBQUUsb0JBQW9CLGlCQUFpQixrQkFBa0IsY0FBYyxTQUFTLFFBQVEsYUFBYSxLQUFLLEVBQUUsbUNBQW1DLFNBQVMsTUFBTSxNQUFNLEVBQUUsV0FBVyxxQkFBcUIsYUFBYSxPQUFPLE9BQU8sWUFBWSxVQUFVLDBEQUEwRCx5QkFBeUIsMERBQTBELE9BQU8sNERBQTRELE1BQU0sVUFBVSwwREFBMEQseUJBQXlCLDBEQUEwRCxPQUFPLDhEQUE4RCxNQUFNLHlDQUF5QyxRQUFRLEtBQUssU0FBUyxFQUFFLGlCQUFpQixJQUFJLE9BQU8sV0FBVyw2Q0FBNkMsb0VBQW9FLFdBQVcsNkRBQTZELFFBQVEsNERBQTRELE1BQU0sTUFBTSxFQUFFLFdBQVcsbUJBQW1CLFdBQVcsWUFBWSxVQUFVLGdCQUFnQixpQ0FBaUMsV0FBVyxTQUFTLGlCQUFpQixzR0FBc0csTUFBTSxXQUFXLHFCQUFxQix1Q0FBdUMsc0NBQXNDLG9EQUFvRCxNQUFNLFVBQVUsZ0JBQWdCLGlDQUFpQyxXQUFXLFNBQVMsaUJBQWlCLHNHQUFzRyxNQUFNLFdBQVcscUJBQXFCLHVDQUF1QyxzQ0FBc0Msb0RBQW9ELFFBQVEsVUFBVSxvQkFBb0IsZ0hBQWdILE9BQU8saUNBQWlDLFVBQVUsTUFBTSxPQUFPLDJEQUEyRCxNQUFNLCtCQUErQixVQUFVLE1BQU0sT0FBTywyREFBMkQsTUFBTSxlQUFlLFVBQVUsZUFBZSxvQkFBb0IsVUFBVSxNQUFNLE9BQU8sYUFBYSw0QkFBNEIsVUFBVSxNQUFNLE9BQU8sNkVBQTZFLDRCQUE0QixFQUFFLG9CQUFvQixRQUFRLGlCQUFpQixvQ0FBb0MsTUFBTSxPQUFPLGFBQWEsaUJBQWlCLG9DQUFvQyxNQUFNLE9BQU8sTUFBTSxNQUFNLFVBQVUsbUJBQW1CLE9BQU8sS0FBSyxFQUFFLEVBQUUsb0JBQW9CLGFBQWEsa0JBQWtCLGNBQWMsaUJBQWlCLFFBQVEsa0VBQWtFLHlCQUF5QixVQUFVLDZFQUE2RSx5REFBeUQseURBQXlELGNBQWMsNEJBQTRCLGNBQWMsb0NBQW9DLHFCQUFxQix3Q0FBd0MsZUFBZSxrQ0FBa0MsbUNBQW1DLFNBQVMscUJBQXFCLHdCQUF3Qix1QkFBdUIsb0NBQW9DLDBCQUEwQixVQUFVLCtDQUErQyxtQkFBbUIsK0VBQStFLFdBQVcsUUFBUSxpQ0FBaUMsbUJBQW1CLHdDQUF3QyxVQUFVLG1CQUFtQixVQUFVLElBQUksTUFBTSxNQUFNLFNBQVMsWUFBWSx1QkFBdUIsa0JBQWtCLHNDQUFzQyxrQkFBa0IsT0FBTyxlQUFlLEVBQUUsY0FBYyxJQUFJLElBQUksSUFBSSw4QkFBOEIsU0FBUyxFQUFFLGtCQUFrQiwwREFBMEQsbUJBQW1CLHNFQUFzRSxvRkFBb0Ysc0JBQXNCLGtGQUFrRix1QkFBdUIsb0ZBQW9GLHNCQUFzQixrRkFBa0YsR0FBRyxZQUFZLHlCQUF5QixnQ0FBZ0MsUUFBUSxxQkFBcUIsTUFBTSxFQUFFLFdBQVcsc0NBQXNDLFVBQVUsT0FBTyxlQUFlLEVBQUUsY0FBYyxJQUFJLElBQUksSUFBSSw4QkFBOEIsU0FBUyxFQUFFLGtCQUFrQixvQ0FBb0MsZUFBZSxpQkFBaUIsV0FBVyxrQ0FBa0MscUJBQXFCLCtCQUErQixjQUFjLG9FQUFvRSxPQUFPLDhEQUE4RCw2QkFBNkIsc0JBQXNCLFdBQVcsV0FBVyxzQkFBc0IsYUFBYSxHQUFHLE1BQU0sNkRBQTZELFFBQVEsNENBQTRDLE1BQU0sa0NBQWtDLFNBQVMsOENBQThDLE9BQU8sb0NBQW9DLFFBQVEsa0NBQWtDLE9BQU8sa0NBQWtDLFlBQVksMEJBQTBCLFFBQVEsdUJBQXVCLDZCQUE2QixjQUFjLHVCQUF1Qiw2QkFBNkIsY0FBYyx1QkFBdUIsNkJBQTZCLHFCQUFxQix1QkFBdUIsNkJBQTZCLHFCQUFxQix3QkFBd0IsNkJBQTZCLFNBQVMsV0FBVyw2QkFBNkIsYUFBYSxTQUFTLG9CQUFvQix1QkFBdUIsT0FBTyxlQUFlLEVBQUUsY0FBYyxJQUFJLElBQUksSUFBSSw4QkFBOEIsU0FBUyxFQUFFLGtCQUFrQixvQ0FBb0MsZUFBZSxpQkFBaUIsV0FBVyxrQ0FBa0MscUJBQXFCLCtCQUErQixjQUFjLG9EQUFvRCxXQUFXLHFCQUFxQixTQUFTLHdCQUF3Qix3QkFBd0IsWUFBWSxrREFBa0QsbUJBQW1CLEVBQUUsT0FBTyw4REFBOEQsNkJBQTZCLHNCQUFzQixXQUFXLFdBQVcsc0JBQXNCLHlCQUF5QixHQUFHLE1BQU0sbUVBQW1FLFFBQVEsNENBQTRDLE1BQU0sa0NBQWtDLFNBQVMsOENBQThDLE9BQU8sb0NBQW9DLFFBQVEscUJBQXFCLGVBQWUsaUJBQWlCLE9BQU8scUJBQXFCLGVBQWUsaUJBQWlCLGNBQWMsdUJBQXVCLDZCQUE2QixjQUFjLHVCQUF1Qiw2QkFBNkIscUJBQXFCLHVCQUF1Qiw2QkFBNkIscUJBQXFCLHdCQUF3Qiw2QkFBNkIsa0JBQWtCLHFCQUFxQixRQUFRLHVCQUF1Qiw2QkFBNkIsbUJBQW1CLDBCQUEwQixTQUFTLFdBQVcsNkJBQTZCLHlCQUF5QixTQUFTLG9CQUFvQix1QkFBdUIsT0FBTyxlQUFlLEVBQUUsY0FBYyxJQUFJLElBQUksSUFBSSw4QkFBOEIsU0FBUyxFQUFFLGNBQWMsZUFBZSxlQUFlLCtDQUErQyxFQUFFLGNBQWMsSUFBSSxJQUFJLElBQUksOEJBQThCLFNBQVMsRUFBRSxpREFBaUQsZ0NBQWdDLGVBQWUsaUJBQWlCLFdBQVcsMENBQTBDLG1CQUFtQixzRUFBc0Usa0ZBQWtGLHNCQUFzQixnRkFBZ0YsdUJBQXVCLGtGQUFrRixzQkFBc0IsZ0ZBQWdGLEtBQUssNEJBQTRCLGtDQUFrQyxjQUFjLDJCQUEyQixnRkFBZ0YseUNBQXlDLEtBQUssSUFBSSxRQUFRLEdBQUcscUVBQXFFLFNBQVMsbUNBQW1DLE1BQU0sTUFBTSx1QkFBdUIsMENBQTBDLHVDQUF1QyxvQ0FBb0MsS0FBSywwQkFBMEIsaUJBQWlCLE1BQU0sZ0JBQWdCLHlCQUF5QixHQUFHLDBCQUEwQixjQUFjLGdGQUFnRixPQUFPLHlDQUF5Qyx1QkFBdUIsbUNBQW1DLDhCQUE4QixRQUFRLG9CQUFvQiwyQkFBMkIsZUFBZSxxQkFBcUIscUZBQXFGLHVCQUF1QixNQUFNLHlDQUF5Qyx1QkFBdUIsd0JBQXdCLHNEQUFzRCxNQUFNLG9DQUFvQyxrQkFBa0Isb0JBQW9CLDBCQUEwQixVQUFVLHlFQUF5RSxxQkFBcUIsd0NBQXdDLGFBQWEsS0FBSyxJQUFJLE9BQU8sMEJBQTBCLHFCQUFxQixFQUFFLGNBQWMsSUFBSSxJQUFJLElBQUksOEJBQThCLFNBQVMsRUFBRSxrQkFBa0IsZ0VBQWdFLHFCQUFxQiwrQkFBK0IsY0FBYyxvRUFBb0UsT0FBTyw4REFBOEQsbUNBQW1DLGtCQUFrQixRQUFRLFdBQVcsc0JBQXNCLGFBQWEsR0FBRyxRQUFRLGtDQUFrQyxNQUFNLGtDQUFrQyxTQUFTLG9DQUFvQyxPQUFPLG9DQUFvQyxRQUFRLGdCQUFnQixPQUFPLGdCQUFnQixZQUFZLDBCQUEwQixtQkFBbUIsd0NBQXdDLGFBQWEsS0FBSyxJQUFJLE9BQU8sV0FBVyxVQUFVLGtCQUFrQiw2QkFBNkIsV0FBVyxpQkFBaUIsS0FBSyxXQUFXLHdCQUF3QixvQkFBb0IsbUJBQW1CLGFBQWEsS0FBSyxXQUFXLGtCQUFrQixlQUFlLE9BQU8sZUFBZSxFQUFFLGNBQWMsSUFBSSxJQUFJLElBQUksOEJBQThCLFNBQVMsRUFBRSxrQkFBa0IsZ0NBQWdDLGVBQWUsaUJBQWlCLFdBQVcsZ0RBQWdELHFCQUFxQiwrQkFBK0IsY0FBYyxvREFBb0QsV0FBVyxxQkFBcUIsU0FBUyx3QkFBd0Isd0JBQXdCLFlBQVksa0RBQWtELG1CQUFtQixFQUFFLE9BQU8sOERBQThELG1DQUFtQyxrQkFBa0IsUUFBUSxXQUFXLHNCQUFzQix5QkFBeUIsR0FBRyxRQUFRLGtDQUFrQyxNQUFNLGtDQUFrQyxTQUFTLG9DQUFvQyxPQUFPLG9DQUFvQyxRQUFRLHlDQUF5QyxPQUFPLHlDQUF5QyxrQkFBa0IscUJBQXFCLHFCQUFxQix5Q0FBeUMsdUJBQXVCLHFDQUFxQyxnQkFBZ0Isb0JBQW9CLG1CQUFtQix3Q0FBd0MsYUFBYSxLQUFLLElBQUksT0FBTyxpQkFBaUIsVUFBVSxrQkFBa0IsNkJBQTZCLFdBQVcsaUJBQWlCLEtBQUssV0FBVyw4QkFBOEIsb0JBQW9CLG1CQUFtQixhQUFhLEtBQUssV0FBVyx3QkFBd0IsZUFBZSxPQUFPLGVBQWUsRUFBRSxjQUFjLElBQUksSUFBSSxJQUFJLDhCQUE4QixTQUFTLEVBQUUsa0NBQWtDLDZCQUE2QixtQkFBbUIsRUFBRSxvQ0FBb0MsNkJBQTZCLG1CQUFtQixFQUFFLG9DQUFvQyw2QkFBNkIsbUJBQW1CLEVBQUUscUNBQXFDLDZCQUE2QixtQkFBbUIsRUFBRSx1Q0FBdUMsNkJBQTZCLG1CQUFtQixFQUFFLHVDQUF1Qyw2QkFBNkIsbUJBQW1CLEVBQUUsMENBQTBDLDZCQUE2QixtQkFBbUIsRUFBRSxrQ0FBa0MsNkJBQTZCLG1CQUFtQixFQUFFLGtDQUFrQyw2QkFBNkIsbUJBQW1CLEVBQUUsbUNBQW1DLDZCQUE2QixtQkFBbUIsRUFBRSw0SEFBNEgsZUFBZSxpQkFBaUIsWUFBWSxFQUFFLG1CQUFtQixJQUFJLElBQUksSUFBSSwyRkFBMkYsaUJBQWlCLHdCQUF3QixnQ0FBZ0MsNkNBQTZDLGlDQUFpQywrRUFBK0UsaUJBQWlCLDRDQUE0Qyx3RkFBd0Ysb0NBQW9DLG9EQUFvRCw4QkFBOEIsc0RBQXNELDJEQUEyRCw0R0FBNEcsNkJBQTZCLDBDQUEwQyw2QkFBNkIscUNBQXFDLHFVQUFxVSw4QkFBOEIsOEJBQThCLDJCQUEyQixtQ0FBbUMsT0FBTywwQ0FBMEMsNEJBQTRCLDhCQUE4QixrQkFBa0IsT0FBTyxRQUFRLHFCQUFxQixtRkFBbUYsMERBQTBELHFCQUFxQiw0Q0FBNEMsdUJBQXVCLE1BQU0scUNBQXFDLFFBQVEsb0JBQW9CLHlQQUF5UCxrQkFBa0IsOEJBQThCLDBFQUEwRSxzQ0FBc0MsdUJBQXVCLDZCQUE2QixzQ0FBc0Msc0NBQXNDLGVBQWUsRUFBRSxtQkFBbUIsSUFBSSxJQUFJLElBQUksWUFBWSwrQkFBK0IsRUFBRSxjQUFjLElBQUksSUFBSSxJQUFJLHVDQUF1QyxTQUFTLEVBQUUsNkJBQTZCLGVBQWUseUNBQXlDLE1BQU0sc0JBQXNCLDZFQUE2RSxTQUFTLCtCQUErQiwrQkFBK0IsMEpBQTBKLG1CQUFtQixnQ0FBZ0MsbUJBQW1CLDJCQUEyQixnREFBZ0QsUUFBUSw4Q0FBOEMsNkNBQTZDLGNBQWMseUNBQXlDLG9FQUFvRSxlQUFlLEVBQUUsY0FBYyxJQUFJLElBQUksSUFBSSwyQ0FBMkMsMEJBQTBCLFlBQVksdUNBQXVDLFNBQVMsRUFBRSwyQ0FBMkMsd0JBQXdCLElBQUksVUFBVSxxREFBcUQsc0VBQXNFLG1DQUFtQyx5Q0FBeUMsMkVBQTJFLE9BQU8scUdBQXFHLHFKQUFxSixrRUFBa0UsMkNBQTJDLGFBQWEsd0RBQXdELGtCQUFrQixLQUFLLHFCQUFxQixlQUFlLEVBQUUsY0FBYyxJQUFJLElBQUksSUFBSSx1Q0FBdUMsU0FBUyxFQUFFLGlCQUFpQixnQ0FBZ0MsNkJBQTZCLFlBQVksTUFBTSwyQkFBMkIsOEJBQThCLGtGQUFrRixpQkFBaUIsa0RBQWtELElBQUksSUFBSSxlQUFlLEVBQUUsY0FBYyxJQUFJLElBQUksSUFBSSwyQ0FBMkMsMEJBQTBCLFlBQVksdUNBQXVDLFNBQVMsRUFBRSw2RUFBNkUsSUFBSSxVQUFVLEdBQUcsMEtBQTBLLE1BQU0sV0FBVywyQkFBMkIsaURBQWlELElBQUkseUZBQXlGLHFDQUFxQyxNQUFNLGdIQUFnSCxNQUFNLHVEQUF1RCxNQUFNLHVDQUF1QyxNQUFNLHVEQUF1RCxNQUFNLG9GQUFvRixNQUFNLDRDQUE0QyxNQUFNLHNEQUFzRCxRQUFRLGVBQWUsRUFBRSxjQUFjLElBQUksSUFBSSxJQUFJLDJDQUEyQywwQkFBMEIsWUFBWSx1Q0FBdUMsU0FBUyxFQUFFLDRCQUE0QiwyQ0FBMkMsd0JBQXdCLG1DQUFtQyxFQUFFLGNBQWMsSUFBSSxJQUFJLElBQUksdUNBQXVDLFNBQVMsRUFBRSw4Q0FBOEMsWUFBWSxNQUFNLDhRQUE4USxTQUFTLFFBQVEsc0pBQXNKLG9GQUFvRixvQkFBb0IsNkJBQTZCLGVBQWUsRUFBRSxtQkFBbUIsSUFBSSxJQUFJLElBQUksZUFBZSxvRUFBb0Usd0JBQVUsMkZBQTJGLElBQUksaUJBQWlCLGtCQUFrQixtQkFBbUIsV0FBVyxtQkFBbUIsZUFBZSxxQkFBcUIscUJBQXFCLCtHQUErRyxtQkFBbUIsNkNBQTZDLDJCQUEyQixhQUFhLEtBQUssU0FBUywrQkFBK0IsY0FBYyw4SEFBOEgsS0FBSyxTQUFTLCtCQUErQixlQUFlLHNDQUFzQyw4Q0FBOEMsR0FBRyxFQUFFLG1CQUFtQixJQUFJLElBQUksSUFBSSxlQUFlLHlFQUF5RSx3QkFBVSxrSEFBa0gsd0JBQXdCLG1CQUFtQixrQkFBa0IsNENBQTRDLGVBQWUsNkNBQTZDLGVBQWUsOEJBQThCLDhCQUE4Qiw4QkFBOEIseUNBQXlDLGFBQWEsU0FBUyx5Q0FBeUMsbUJBQW1CLGVBQWUsdUJBQXVCLGVBQWUscUdBQXFHLHlCQUF5Qiw0REFBNEQsdUJBQXVCLGVBQWUsdUJBQXVCLGVBQWUscUdBQXFHLHFDQUFxQyw2REFBNkQsY0FBYyxzQkFBc0IscUVBQXFFLGdDQUFnQyx1REFBdUQsTUFBTSx1QkFBdUIscUJBQXFCLEVBQUUsa0JBQWtCLGdDQUFnQyxTQUFTLCtCQUErQiw0QkFBNEIsNEJBQTRCLGdDQUFnQyxHQUFHLGVBQWUsZ0NBQWdDLFNBQVMsOEJBQThCLDRCQUE0Qiw0QkFBNEIsK0JBQStCLEdBQUcsZUFBZSwyRkFBMkYsMEJBQTBCLGdEQUFnRCw2QkFBNkIsOERBQThELEdBQUcsaUJBQWlCLDZCQUE2Qiw4REFBOEQsSUFBSSxlQUFlLDJGQUEyRixpQ0FBaUMsNkJBQTZCLDZEQUE2RCxLQUFLLFFBQVEsNERBQTRELFVBQVUsR0FBRyxFQUFFLG1CQUFtQixJQUFJLElBQUksSUFBSSxlQUFlLHlFQUF5RSx3QkFBVSw2R0FBNkcseUJBQXlCLG1CQUFtQixvQkFBb0IsV0FBVyxrQkFBa0IscUJBQXFCLG9CQUFvQiw4QkFBOEIsZUFBZSwyQkFBMkIsb0NBQW9DLDhCQUE4QixLQUFLLFVBQVUsT0FBTyxjQUFjLFFBQVEsNENBQTRDLGFBQWEsc0NBQXNDLGVBQWUsbUdBQW1HLDRCQUE0QixlQUFlLGVBQWUsa0dBQWtHLDRCQUE0QixpQkFBaUIsMEJBQTBCLE9BQU8sbURBQW1ELHVCQUF1Qix3QkFBd0IsaUJBQWlCLDhCQUE4Qix1QkFBdUIscUNBQXFDLG1CQUFtQiw2Q0FBNkMsMENBQTBDLG1CQUFtQiw2Q0FBNkMsMENBQTBDLHdDQUF3QyxhQUFhLElBQUksdUJBQXVCLGdEQUFnRCxvQ0FBb0MsZ0JBQWdCLEVBQUUsS0FBSyxvRkFBb0Ysa0JBQWtCLGdCQUFnQixHQUFHLEtBQUssZ0dBQWdHLDJEQUEyRCwyQkFBMkIsS0FBSyxvRkFBb0YsV0FBVyxTQUFTLGFBQWEsT0FBTyxrQkFBa0IscUJBQXFCLEdBQUcsR0FBRyxxQ0FBcUMsTUFBTSxjQUFjLFdBQVcsK0JBQStCLFlBQVksWUFBWSxxQ0FBcUMsUUFBUSwwQ0FBMEMsY0FBYyxJQUFJLElBQUksYUFBYSwrREFBK0QsdUJBQXVCLEVBQUUsNERBQTRELGFBQWEsT0FBTyxJQUFJLElBQUksOEJBQThCLDRCQUE0QixlQUFlLDJCQUEyQixjQUFjLE1BQU0sOENBQThDLGNBQWMsTUFBTSw4Q0FBOEMsbUVBQW1FLEdBQUcsRUFBRSxjQUFjLElBQUksSUFBSSxJQUFJLGdFQUFnRSxrQkFBa0IsMkNBQTJDLGdFQUFnRSw2QkFBNkIsYUFBYSxnQ0FBZ0MsbUJBQW1CLDZCQUE2Qiw2REFBNkQsbUNBQW1DLHNCQUFzQixHQUFHLGVBQWUsYUFBYSxzQ0FBc0MsNEJBQTRCLFNBQVMsOEZBQThGLGtCQUFrQix1Q0FBdUMsU0FBUyxFQUFFLDRCQUE0QiwwQ0FBMEMsS0FBSyxzREFBc0QsUUFBUSxVQUFVLHVCQUF1Qix1QkFBdUIsd0ZBQXdGLGVBQWUsRUFBRSxjQUFjLElBQUksSUFBSSxJQUFJLDJDQUEyQywwQkFBMEIsWUFBWSx1Q0FBdUMsU0FBUyxFQUFFLHlCQUF5QixnQ0FBZ0MsdUNBQXVDLG9CQUFvQiwyQkFBMkIsZ0JBQWdCLHVCQUF1QixpQkFBaUIsbUpBQW1KLFFBQVEsa0VBQWtFLGdCQUFnQix5SUFBeUksRUFBRSxHQUFHLDBGQUEwRixFQUFFLE1BQU0sVUFBVSxnQ0FBZ0MsYUFBYSx5QkFBeUIsNEJBQTRCLHFDQUFxQywrSEFBK0gsNEhBQTRILHlCQUF5QixlQUFlLEVBQUUsY0FBYyxJQUFJLElBQUksSUFBSSxnRUFBZ0Usa0JBQWtCLDJDQUEyQyxnRUFBZ0UsNkJBQTZCLGFBQWEsZ0NBQWdDLG1CQUFtQiw2QkFBNkIsNkRBQTZELG1DQUFtQyxzQkFBc0IsR0FBRyxlQUFlLGFBQWEsc0NBQXNDLDRCQUE0QixTQUFTLDhGQUE4RixpQkFBaUIsd0NBQXdDLDBCQUEwQixZQUFZLHVDQUF1QyxTQUFTLEVBQUUsMExBQTBMLGdCQUFnQixzQkFBc0IsU0FBUyxHQUFHLE1BQU0sd0tBQXdLLHlDQUF5QyxtQkFBbUIsaUJBQWlCLHVDQUF1QyxFQUFFLGlCQUFpQiwyQkFBMkIsc0ZBQXNGLDQ5QkFBNDlCLGNBQWMscVlBQXFZLHlCQUF5Qix1TkFBdU4sK0NBQStDLDBSQUEwUixJQUFJLFFBQVEsYUFBYSxnQkFBZ0Isa0NBQWtDLFdBQVcsT0FBTyxvQkFBb0IsT0FBTyw0REFBNEQsU0FBUyw4R0FBOEcsbUJBQW1CLHNHQUFzRyxtREFBbUQsdUJBQXVCLGlTQUFpUyw0RkFBNEYsZ0JBQWdCLEtBQUssbUJBQW1CLEtBQUssVUFBVSx5Q0FBeUMsbUJBQW1CLGlEQUFpRCxVQUFVLE1BQU0sb0VBQW9FLHNhQUFzYSxrRUFBa0UsRUFBRSxXQUFXLGlEQUFpRCxnQkFBZ0IsNEVBQTRFLE1BQU0sd0NBQXdDLFFBQVEsd0RBQXdELFFBQVEsZ0NBQWdDLE1BQU0sUUFBUSxjQUFjLG1CQUFtQixtRUFBbUUsVUFBVSxnSkFBZ0osZ0lBQWdJLGdKQUFnSixnREFBZ0QsT0FBTyx5UkFBeVIsNERBQTRELHFCQUFxQixrRUFBa0UsdURBQXVELDBLQUEwSywyTEFBMkwsb0hBQW9ILHFCQUFxQix3QkFBd0IsMEJBQTBCLHVCQUF1QiwwR0FBMEcseUlBQXlJLG1DQUFtQyxpQkFBaUIsc0RBQXNELElBQUksVUFBVSxNQUFNLDBDQUEwQyxpQ0FBaUMsRUFBRSx1QkFBdUIsS0FBSyxJQUFJLCtDQUErQyxHQUFHLDJDQUEyQyxXQUFXLFFBQVEsdUZBQXVGLE9BQU8sa0VBQWtFLCtFQUErRSwwQ0FBMEMsNEJBQTRCLG1GQUFtRixNQUFNLHFGQUFxRixNQUFNLFdBQVcsNEdBQTRHLDRDQUE0QyxPQUFPLG9CQUFvQiwyQkFBMkIsMkJBQTJCLGFBQWEsR0FBRyxFQUFFLGlCQUFpQixtQ0FBbUMsMkNBQTJDLGNBQWMsZ0lBQWdJLDJCQUEyQixtREFBbUQsRUFBRSxTQUFTLHFGQUFxRixPQUFPLE9BQU8saUVBQWlFLE9BQU8sa0NBQWtDLHFIQUFxSCxPQUFPLG1CQUFtQix1SkFBdUosa0NBQWtDLDhDQUE4Qyw2QkFBNkIsNkRBQTZELG1DQUFtQyxXQUFXLHFCQUFxQixvREFBb0QsT0FBTyw2Q0FBNkMsaURBQWlELDBDQUEwQyxTQUFTLGNBQWMsbUNBQW1DLE9BQU8sV0FBVyxtSUFBbUksd0NBQXdDLG1DQUFtQyxvQkFBb0IsT0FBTyxJQUFJLFVBQVUsR0FBRyxZQUFZLFdBQVcsb0JBQW9CLFdBQVcsbUVBQW1FLDRHQUE0RyxvQkFBb0IsT0FBTyxvQkFBb0IsMkJBQTJCLDJCQUEyQixhQUFhLEdBQUcsRUFBRSxtQkFBbUIsdUVBQXVFLDJCQUEyQixtREFBbUQsRUFBRSxTQUFTLDJDQUEyQyxXQUFXLHFCQUFxQixvREFBb0QsT0FBTyxrREFBa0QsZ0pBQWdKLG1DQUFtQyw0RkFBNEYsaUJBQWlCLG1FQUFtRSw0R0FBNEcsb0JBQW9CLE9BQU8sc0JBQXNCLDJCQUEyQiw2QkFBNkIsYUFBYSxHQUFHLEVBQUUsV0FBVyw0TUFBNE0sV0FBVyx1SEFBdUgsNkJBQTZCLG9FQUFvRSxXQUFXLG1FQUFtRSxHQUFHLDZJQUE2SSxRQUFRLGlIQUFpSCwwRkFBMEYsTUFBTSwwV0FBMFcsY0FBYywyQkFBMkIsaUJBQWlCLFlBQVksR0FBRyxFQUFFLHlCQUF5QixxQkFBcUIsSUFBSSxLQUFLLGtCQUFrQiwyQ0FBMkMsaUNBQWlDLEdBQUcsWUFBWSxhQUFhLDZCQUE2QixXQUFXLG9YQUFvWCxpRkFBaUYsaUJBQWlCLDZLQUE2SyxrSkFBa0osSUFBSSxTQUFTLDRHQUE0Ryx1SEFBdUgsSUFBSSx3Q0FBd0MsTUFBTSwwQ0FBMEMseUJBQXlCLDRGQUE0Riw2REFBNkQsc0dBQXNHLFdBQVcsbUNBQW1DLHVCQUF1QiwySkFBMkosYUFBYSwwR0FBMEcsZ0JBQWdCLHdIQUF3SCxrQkFBa0IsNFhBQTRYLHNFQUFzRSxpRkFBaUYsa0JBQWtCLDJJQUEySSxpQkFBaUIsRUFBRSw4U0FBOFMsTUFBTSxxQkFBcUIsaUJBQWlCLElBQUksc0hBQXNILGdGQUFnRixxQkFBcUIsd0VBQXdFLEdBQUcsR0FBRyxHQUFHLGtZQUFrWSxxQkFBcUIsNEVBQTRFLFVBQVUsNkdBQTZHLDZCQUE2QixvQkFBb0IsNEJBQTRCLEdBQUcsb0JBQW9CLHdEQUF3RCxNQUFNLDBDQUEwQyx5QkFBeUIsNkJBQTZCLHFQQUFxUCx5SkFBeUosZ0JBQWdCLGFBQWEsMExBQTBMLGdCQUFnQixhQUFhLDZNQUE2TSxnQkFBZ0IsYUFBYSx1RUFBdUUsNklBQTZJLFNBQVMsdUJBQXVCLGtCQUFrQixtS0FBbUssMkRBQTJELHVPQUF1TyxxQkFBcUIsOEZBQThGLCtCQUErQixNQUFNLEtBQUssT0FBTyxvQkFBb0IsbUJBQW1CLHVCQUF1QixPQUFPLGtHQUFrRyxPQUFPLE1BQU0sdUJBQXVCLE9BQU8sY0FBYyxvQkFBb0IsdUNBQXVDLE9BQU8sK0JBQStCLE9BQU8sY0FBYyx3Q0FBd0MsTUFBTSxzQ0FBc0MsTUFBTSwrREFBK0Qsb0JBQW9CLCtGQUErRixRQUFRLHNCQUFzQixxQkFBcUIsbURBQW1ELG9CQUFvQixlQUFlLDZEQUE2RCxjQUFjLG9HQUFvRyxvQkFBb0IsS0FBSywrQ0FBK0MseUJBQXlCLDRNQUE0TSwyQkFBMkIsMEpBQTBKLHFCQUFxQiwwR0FBMEcsa0JBQWtCLHFGQUFxRixXQUFXLDJEQUEyRCxjQUFjLEdBQUcscUJBQXFCLHdJQUF3SSxlQUFlLHlCQUF5QiwyQ0FBMkMsa01BQWtNLDRDQUE0QyxZQUFZLFdBQVcsS0FBSyxTQUFTLHlFQUF5RSw4QkFBOEIsSUFBSSxvRkFBb0YsZ0NBQWdDLDBCQUEwQixjQUFjLHNCQUFzQix1QkFBdUIsT0FBTyxvR0FBb0csV0FBVywrQ0FBK0MsMERBQTBELFFBQVEsbUVBQW1FLHNDQUFzQywyRkFBMkYsRUFBRSxXQUFXLGFBQWEsa0JBQWtCLE9BQU8scUJBQXFCLE9BQU8sK0VBQStFLElBQUksT0FBTyx1SUFBdUksb0JBQW9CLGdCQUFnQiwwTkFBME4sZ0JBQWdCLFNBQVMsK0ZBQStGLEtBQUssTUFBTSx5R0FBeUcsUUFBUSxLQUFLLDhCQUE4QixnRUFBZ0Usb0NBQW9DLDhEQUE4RCxVQUFVLGlDQUFpQyxLQUFLLG1DQUFtQyxHQUFHLDZCQUE2QiwwSkFBMEosc0NBQXNDLG9DQUFvQyxnREFBZ0QsWUFBWSxTQUFTLGdGQUFnRixLQUFLLDZCQUE2QixlQUFlLEVBQUUsY0FBYyxJQUFJLElBQUksSUFBSSx1Q0FBdUMsU0FBUyxFQUFFLHFCQUFxQixjQUFjLHNEQUFzRCxXQUFXLDREQUE0RCxtQkFBbUIsbUJBQW1CLFlBQVksbUNBQW1DLGNBQWMsOEJBQThCLFFBQVEsZ0NBQWdDLGVBQWUsRUFBRSxlQUFlLDRCQUE0QixpQkFBaUIsd0JBQXdCLGdDQUFnQyxvQkFBb0Isb0JBQW9CLEtBQUssSUFBSSxjQUFjLFNBQVMsK0NBQStDLFdBQVcsZUFBZSx3QkFBd0IsS0FBSyxJQUFJLEVBQUUsd0JBQXdCLDRCQUE0Qix3QkFBd0Isd0VBQXdFLGdCQUFnQixTQUFTLGdEQUFnRCxJQUFJLElBQUksSUFBSSw4REFBOEQsd0pBQXdKLHNDQUFzQyxpQkFBaUIsa0NBQWtDLG9CQUFvQixRQUFRLGtDQUFrQyxNQUFNLGlCQUFpQix5QkFBeUIsZ0JBQWdCLHdEQUF3RCxXQUFXLFlBQVksSUFBSSxrRUFBa0Usb0JBQW9CLElBQUksRUFBRSxRQUFRLGtCQUFrQixPQUFPLDBCQUEwQixvRUFBb0UsdURBQXVELDRCQUE0QixhQUFhLFdBQVcseUNBQXlDLGlCQUFpQix5RkFBeUYsTUFBTSxrQ0FBa0MsZ0JBQWdCLDJDQUEyQyxvQ0FBb0MsbUJBQW1CLG1CQUFtQixJQUFJLEVBQUUsaUJBQWlCLGdDQUFnQyxVQUFVLHdEQUF3RCw0REFBNEQsUUFBUSxjQUFjLE9BQU8sNEJBQTRCLGFBQWEsaUJBQWlCLG1DQUFtQyw0Q0FBNEMsU0FBUyxrQkFBa0IsS0FBSyxzQkFBc0IsK0NBQStDLHlDQUF5Qyx3QkFBd0IsaUNBQWlDLEVBQUUsdUJBQXVCLHdCQUF3QixpREFBaUQsSUFBSSxVQUFVLFVBQVUsV0FBVyxhQUFhLFFBQVEsWUFBWSxFQUFFLGlCQUFpQixpREFBaUQsMkJBQTJCLElBQUksSUFBSSxJQUFJLHFCQUFxQixrQkFBa0IsU0FBUyw2Q0FBNkMsWUFBWSxhQUFhLFVBQVUsNkNBQTZDLGVBQWUsZ0JBQWdCLFlBQVksSUFBSSxLQUFLLG1EQUFtRCxpS0FBaUssU0FBUyxnQkFBZ0IsaUJBQWlCLHNCQUFzQixzQ0FBc0MscUNBQXFDLG1CQUFtQixzQkFBc0IsZ0dBQWdHLGtDQUFrQyxnREFBZ0QsbUNBQW1DLHlDQUF5QyxxRUFBcUUsT0FBTyxnREFBZ0QsVUFBVSxVQUFVLFNBQVMsY0FBYyxFQUFFLGNBQWMsbURBQW1ELGNBQWMscURBQXFELGVBQWUsMENBQTBDLG1FQUFtRSxJQUFJLGVBQWUsTUFBTSxJQUFJLHlCQUF5QixNQUFNLCtCQUErQixjQUFjLGtFQUFrRSxjQUFjLFFBQVEsYUFBYSxNQUFNLG9CQUFvQixFQUFFLEVBQUUsZ0JBQWdCLE9BQU8sa0JBQWtCLG1CQUFtQiwwQkFBMEIsNENBQTRDLHVFQUF1RSxJQUFJLE9BQU8sTUFBTSxJQUFJLHVCQUF1QixNQUFNLDZCQUE2QixNQUFNLGlCQUFpQixxQ0FBcUMsZUFBZSw2Q0FBNkMsSUFBSSxJQUFJLElBQUkseURBQXlELHFCQUFNLFVBQVUsWUFBWSxJQUFJLGdEQUFnRCxNQUFNLE9BQU8sSUFBSSxvREFBb0QsTUFBTSxRQUFRLElBQUksa0JBQWtCLHdCQUF3QixvQ0FBb0Msa0NBQWtDLG1CQUFtQix3QkFBd0IsZ0RBQWdELDZCQUE2Qiw2Q0FBNkMsMkNBQTJDLHdDQUF3QyxtTEFBbUwsVUFBVSx3QkFBd0Isb0RBQW9ELG1CQUFtQixXQUFXLHNCQUFzQixrREFBa0QscUJBQXFCLFVBQVUsTUFBTSxlQUFlLFFBQVEsV0FBVyxXQUFXLFNBQVMsT0FBTyxRQUFRLE9BQU8sYUFBYSxZQUFZLE9BQU8sTUFBTSxRQUFRLG1CQUFtQix1QkFBdUIsc0JBQXNCLGtCQUFrQixTQUFTLFNBQVMsV0FBVyxhQUFhLEVBQUUsY0FBYyxnQkFBZ0IsTUFBTSxXQUFXLEtBQUssYUFBYSxtREFBbUQsYUFBYSxxREFBcUQsWUFBWSxJQUFJLGdEQUFnRCxNQUFNLEtBQUssSUFBSSxvREFBb0QsTUFBTSxNQUFNLElBQUksY0FBYyx5Q0FBeUMsK0RBQStELElBQUksY0FBYyxNQUFNLElBQUksd0JBQXdCLE1BQU0sOEJBQThCLGNBQWMsMkNBQTJDLG1FQUFtRSxJQUFJLFlBQVksTUFBTSxJQUFJLHNCQUFzQixNQUFNLDRCQUE0QixxQkFBcUIsYUFBYSwwREFBMEQsYUFBYSxPQUFPLFdBQVcsS0FBSyxtQkFBbUIsRUFBRSxFQUFFLGFBQWEsTUFBTSxlQUFlLGlCQUFpQixtQkFBbUIsdUJBQXVCLG9DQUFvQyxrQ0FBa0MsbUJBQW1CLHdCQUF3Qiw0Q0FBNEMsZ0JBQWdCLHFDQUFxQywyQkFBMkIsNkNBQTZDLHdDQUF3QyxzQ0FBc0MsY0FBYyxzS0FBc0ssVUFBVSx1QkFBdUIsb0RBQW9ELGtCQUFrQixXQUFXLHFCQUFxQixrREFBa0Qsb0JBQW9CLFNBQVMsSUFBSSwyQkFBMkIsSUFBSSxJQUFJLElBQUksS0FBSyxnRUFBZ0UscUJBQU0sQ0FBQyxRQUFRLHNCQUFzQixlQUFlLFFBQVEsV0FBVyxXQUFXLFNBQVMsT0FBTyxRQUFRLE9BQU8sYUFBYSxZQUFZLE9BQU8sTUFBTSxRQUFRLG1CQUFtQix1QkFBdUIsc0JBQXNCLGtCQUFrQixTQUFTLFNBQVMsV0FBVyxhQUFhLEVBQUUsY0FBYyxnQkFBZ0IsTUFBTSxTQUFTLGNBQWMsZ0dBQWdHLGdCQUFnQixnQ0FBZ0MsWUFBWSxLQUFLLGdDQUFnQyxNQUFNLGdCQUFnQixNQUFNLFdBQVcsd0NBQXdDLG9GQUFvRixlQUFlLHlCQUF5QixtQkFBbUIsMkVBQTJFLFVBQVUsb0NBQW9DLGlCQUFpQixVQUFVLHFDQUFxQywrREFBK0QsU0FBUyw4QkFBOEIsU0FBUyxnQkFBZ0IsdURBQXVELGdDQUFnQyxPQUFPLG1CQUFtQix5Q0FBeUMsVUFBVSxLQUFLLE1BQU0seUdBQXlHLHlEQUF5RCx1QkFBdUIsZ0NBQWdDLDJEQUEyRCw2RUFBNkUsd0JBQXdCLDZDQUE2QyxpQkFBaUIsbUNBQW1DLGNBQWMsbUJBQW1CLEtBQUssbUJBQW1CLDRDQUE0QyxxQ0FBcUMsd0JBQXdCLG9FQUFvRSxZQUFZLGlDQUFpQyxLQUFLLDZCQUE2QixpQ0FBaUMsS0FBSyw0Q0FBNEMsS0FBSyxLQUFLLFVBQVUsUUFBUSxnREFBZ0QsNkJBQTZCLG9EQUFvRCxNQUFNLDRDQUE0QyxlQUFlLGVBQWUsU0FBUyxZQUFZLEtBQUssbUVBQW1FLDZFQUE2RSx1QkFBdUIsU0FBUyxxQkFBcUIsZ0NBQWdDLDBEQUEwRCxLQUFLLGlDQUFpQyxPQUFPLElBQUksT0FBTyxVQUFVLG1EQUFtRCx3QkFBd0IseUZBQXlGLEtBQUssb0JBQW9CLCtDQUErQyx3Q0FBd0Msc0JBQXNCLGlCQUFpQixLQUFLLEtBQUssc0JBQXNCLFdBQVcsT0FBTyxNQUFNLE9BQU8sa0ZBQWtGLG1EQUFtRCxNQUFNLGlCQUFpQixLQUFLLDZCQUE2QixPQUFPLE1BQU0sT0FBTywwQkFBMEIsK0JBQStCLHFCQUFxQixLQUFLLDRDQUE0QyxLQUFLLEtBQUssc0JBQXNCLFdBQVcsT0FBTyxNQUFNLE1BQU0sU0FBUyxvRUFBb0Usc0VBQXNFLG9CQUFvQixpSUFBaUksZ0JBQWdCLG1CQUFtQixLQUFLLE9BQU8sdUNBQXVDLHlCQUF5QixpQ0FBaUMsdUJBQXVCLDRDQUE0QyxLQUFLLEtBQUssNkJBQTZCLE9BQU8sTUFBTSxNQUFNLFNBQVMsb0VBQW9FLDJSQUEyUiw4Q0FBOEMseUJBQXlCLHdCQUF3QixJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssT0FBTyxTQUFTLEVBQUUsVUFBVSxPQUFPLDZJQUE2SSxFQUFFLGNBQWMsdU1BQXVNLG1CQUFtQiwrQ0FBK0MsYUFBYSx3QkFBd0IsY0FBYyxnQkFBZ0IsTUFBTSxTQUFTLGNBQWMsZ0dBQWdHLGdCQUFnQixnQ0FBZ0MsWUFBWSxLQUFLLGdDQUFnQyxNQUFNLGdCQUFnQixNQUFNLFdBQVcsd0NBQXdDLG9GQUFvRixlQUFlLHlCQUF5QixtQkFBbUIsMkVBQTJFLFVBQVUsb0NBQW9DLGlCQUFpQixVQUFVLHFDQUFxQywrREFBK0QsU0FBUyw4QkFBOEIsU0FBUyxnQkFBZ0IsdURBQXVELGdDQUFnQyxPQUFPLG1CQUFtQix5Q0FBeUMsVUFBVSxLQUFLLE1BQU0seUdBQXlHLHlEQUF5RCx1QkFBdUIsZ0NBQWdDLDJEQUEyRCw2RUFBNkUsd0JBQXdCLDZDQUE2QyxpQkFBaUIsbUNBQW1DLGNBQWMsbUJBQW1CLEtBQUssbUJBQW1CLDRDQUE0QyxxQ0FBcUMsd0JBQXdCLG9FQUFvRSxZQUFZLGlDQUFpQyxLQUFLLDZCQUE2QixpQ0FBaUMsS0FBSyw0Q0FBNEMsS0FBSyxLQUFLLFVBQVUsUUFBUSxnREFBZ0QsNkJBQTZCLG9EQUFvRCxNQUFNLDRDQUE0QyxlQUFlLGVBQWUsU0FBUyxZQUFZLEtBQUssbUVBQW1FLDZFQUE2RSx1QkFBdUIsU0FBUyxxQkFBcUIsZ0NBQWdDLDBEQUEwRCxLQUFLLGlDQUFpQyxPQUFPLElBQUksT0FBTyxVQUFVLG1EQUFtRCx3QkFBd0IseUZBQXlGLEtBQUssb0JBQW9CLCtDQUErQyx3Q0FBd0Msc0JBQXNCLGlCQUFpQixLQUFLLEtBQUssc0JBQXNCLFdBQVcsT0FBTyxNQUFNLE9BQU8sa0ZBQWtGLG1EQUFtRCxNQUFNLGlCQUFpQixLQUFLLDZCQUE2QixPQUFPLE1BQU0sT0FBTywwQkFBMEIsK0JBQStCLHFCQUFxQixLQUFLLDRDQUE0QyxLQUFLLEtBQUssc0JBQXNCLFdBQVcsT0FBTyxNQUFNLE1BQU0sU0FBUyxvRUFBb0Usc0VBQXNFLG9CQUFvQixpSUFBaUksZ0JBQWdCLG1CQUFtQixLQUFLLE9BQU8sdUNBQXVDLHlCQUF5QixpQ0FBaUMsdUJBQXVCLDRDQUE0QyxLQUFLLEtBQUssNkJBQTZCLE9BQU8sTUFBTSxNQUFNLFNBQVMsb0VBQW9FLDJSQUEyUiw4Q0FBOEMseUJBQXlCLGVBQWUsbUNBQW1DLGlIQUFpSCxnRkFBZ0Ysc0JBQXNCLGVBQWUsOEJBQThCLFlBQVksV0FBVyxtQkFBbUIsNkJBQTZCLGdJQUFnSSxxRUFBcUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxpQ0FBaUMsMkZBQTJGLG1CQUFtQixlQUFlLGtGQUFrRixpQkFBaUIsWUFBWSxXQUFXLG1CQUFtQiw2QkFBNkIsb0dBQW9HLDZCQUE2QixlQUFlLCtDQUErQyx1REFBdUQseUJBQXlCO0FBQ2x2dFEsOEhBQThILGVBQWUsbUNBQW1DLGlIQUFpSCxnRkFBZ0Ysc0JBQXNCLGVBQWUsOEJBQThCLFlBQVksV0FBVyxtQkFBbUIsNkJBQTZCLGdJQUFnSSxxRUFBcUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxpQ0FBaUMsMkZBQTJGLG1CQUFtQixlQUFlLGtGQUFrRixpQkFBaUIsWUFBWSxXQUFXLG1CQUFtQiw2QkFBNkIsb0dBQW9HLDZCQUE2QixlQUFlLCtDQUErQyx1REFBdUQseUJBQXlCO0FBQ2h5Qyw4SEFBOEgsaUtBQWlLLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxJQUFJLFdBQVcscUJBQXFCLDBCQUEwQixzQkFBc0Isb0NBQW9DLG9CQUFvQixnQkFBZ0IsK0JBQStCLGlCQUFpQixtQ0FBbUMsOEJBQThCLCtCQUErQix3Q0FBd0Msc0JBQXNCLHdGQUF3RixVQUFVLG1GQUFtRixJQUFJO0FBQ3YyQiw4Q0FBOEMsdURBQXVELEtBQUssd0JBQXdCLEtBQUssWUFBWSwrQkFBK0IsS0FBSywrQkFBK0IsS0FBSyxtR0FBbUcsT0FBTyxtQ0FBbUMsMEZBQTBGLHFFQUFxRSw2QkFBNkIsa0JBQWtCLDJDQUEyQyxpQkFBaUIsa0xBQWtMLE9BQU8saUJBQWlCLE1BQU0sNkJBQTZCLHNDQUFzQywwQ0FBMEMsMkJBQTJCLCtDQUErQywyQkFBMkIscUJBQXFCLFlBQVksb0RBQW9ELHNJQUFzSSxZQUFZLEtBQUssTUFBTSxpREFBaUQsMEdBQTBHLDBFQUEwRSwyREFBMkQsSUFBSSxLQUFLLFdBQVcsb0JBQW9CLDRCQUE0QixJQUFJLHVDQUF1QyxpQkFBaUIsZ0RBQWdELDRGQUE0RixRQUFRLGlJQUFpSSx1REFBdUQsOEhBQThILDhCQUE4QixJQUFJLEtBQUssYUFBYSx1QkFBdUIsOEJBQThCLGtEQUFrRCxzQkFBc0Isa0RBQWtELHNCQUFzQixxSkFBcUosNkdBQTZHLHFCQUFxQix1QkFBdUIsaUJBQWlCLG9DQUFvQyxnQ0FBZ0Msb0JBQW9CLDREQUE0RCxzRUFBc0UsbVBBQW1QLGdDQUFnQyx5T0FBeU8sNkJBQTZCLDhCQUE4QixrQ0FBa0MsZ0RBQWdELHdDQUF3QyxtQkFBbUIsYUFBYSxzQkFBc0IseUNBQXlDLFdBQVcsS0FBSyxXQUFXLGNBQWMsd0RBQXdELDJCQUEyQiw2QkFBNkIsV0FBVyxLQUFLLFdBQVcsNkJBQTZCLDRGQUE0Rix3Q0FBd0Msb0JBQW9CLDZCQUE2QixXQUFXLEtBQUssV0FBVyxXQUFXLDJCQUEyQixzRUFBc0UsTUFBTSxzQ0FBc0MsOEJBQThCLEVBQUUsMkhBQTJILHVJQUF1SSxvQ0FBb0MsWUFBWSwwREFBMEQsNk9BQTZPLGdYQUFnWCxtRkFBbUYsc1ZBQXNWLGlHQUFpRyxvR0FBb0csS0FBSyxxRkFBcUYsZUFBZSxJQUFJLGtCQUFrQixxR0FBcUcsK0NBQStDLDZiQUE2YixtQ0FBbUMsNkJBQTZCLG9HQUFvRyxNQUFNLFNBQVMsVUFBVSxnQkFBZ0IsS0FBSyxPQUFPLGtGQUFrRiw4QkFBOEIsbUJBQW1CLG1CQUFtQixNQUFNLFNBQVMsVUFBVSxnQkFBZ0IsTUFBTSw4RkFBOEYsMEVBQTBFLDhCQUE4QixtQkFBbUIsbUJBQW1CLHdLQUF3SyxFQUFFLG1CQUFtQixJQUFJLElBQUksSUFBSSxzQkFBc0IsMkdBQTJHLEVBQUUsY0FBYyxJQUFJLElBQUksSUFBSSx1Q0FBdUMsU0FBUyxFQUFFLG1DQUFtQyw0QkFBNEIsaUJBQWlCLDBCQUEwQixZQUFZLFdBQVcsdUZBQXVGLDZDQUE2QyxhQUFhLCtCQUErQixtQkFBbUIsT0FBTyxjQUFjLHlJQUF5SSw4QkFBOEIsR0FBRyxTQUFTLG9CQUFvQixjQUFjLGlFQUFpRSx3QkFBd0IsR0FBRyxVQUFVLHNDQUFzQyxjQUFjLDhDQUE4QyxjQUFjLG9FQUFvRSxvQkFBb0IsMkRBQTJELG9CQUFvQixLQUFLLHlCQUF5QixFQUFFLElBQUksd0JBQXdCLHlCQUF5Qiw2QkFBNkIsc0JBQXNCLEVBQUUsY0FBYyxJQUFJLElBQUksSUFBSSwyQ0FBMkMsMEJBQTBCLFlBQVksdUNBQXVDLFNBQVMsRUFBRSxnREFBZ0QsdUtBQXVLLGlCQUFpQixTQUFTLFdBQVcsS0FBSyxXQUFXLEdBQUcsT0FBTyxFQUFFLE9BQU8sRUFBRSwwRUFBMEUsZUFBZSxRQUFRLDBHQUEwRywyRUFBMkUsd0hBQXdILElBQUksZUFBZSxZQUFZLGdEQUFnRCwyRkFBMkYsNEJBQTRCLHVEQUF1RCxtRkFBbUYsbUJBQW1CLHNDQUFzQyxjQUFjLEVBQUUsa0JBQWtCLEdBQUcsdUVBQXVFLHNDQUFzQyxHQUFHLGdCQUFnQixFQUFFLEdBQUcsTUFBTSw0RkFBNEYsaUJBQWlCLG1GQUFtRiwwR0FBMEcsZUFBZSxvQkFBb0IsWUFBWSwyQ0FBMkMsNEVBQTRFLGlDQUFpQyxhQUFhLEtBQUssb0JBQW9CLGVBQWUsMkJBQTJCLDZHQUE2Ryw4REFBOEQsV0FBVyxFQUFFLG9DQUFvQywwUEFBMFAsa0JBQWtCLHdCQUF3Qix3QkFBd0IsRUFBRSwrQkFBK0IsYUFBYSx3RUFBd0UsY0FBYywrQ0FBK0MsY0FBYywwQkFBMEIsbUNBQW1DLHdCQUF3QixvQkFBb0IsSUFBSSxPQUFPLEdBQUcsNEtBQTRLLGtCQUFrQix1QkFBdUIsc0JBQXNCLE9BQU8sb0RBQW9ELElBQUksV0FBVyxTQUFTLFlBQVksS0FBSyxjQUFjLGVBQWUsVUFBVSw0QkFBNEIsRUFBRSxVQUFVLE9BQU8sNE9BQTRPLEVBQUUsY0FBYyx1RkFBdUYsa0JBQWtCLElBQUksSUFBSSxJQUFJLElBQUksK0tBQStLLEVBQUUsY0FBYyxJQUFJLElBQUksSUFBSSwyQ0FBMkMsMEJBQTBCLFlBQVksdUNBQXVDLFNBQVMsRUFBRSxnRkFBZ0YsK0RBQStELElBQUksY0FBYyxnQkFBZ0Isa0VBQWtFLHFCQUFxQixHQUFHLGVBQWUsRUFBRSxVQUFVLE9BQU8sZUFBZSxFQUFFLGtCQUFrQixJQUFJLElBQUksSUFBSSxPQUFPLEVBQUUsY0FBYyxJQUFJLElBQUksSUFBSSwyQ0FBMkMsMEJBQTBCLFlBQVksdUNBQXVDLFNBQVMsRUFBRSxvR0FBb0csMFBBQTBQLDRCQUE0QiwwQkFBMEIsaUhBQWlILEVBQUUsY0FBYyxpREFBaUQsMEJBQTBCLGVBQWUsRUFBRSxjQUFjLElBQUksSUFBSSxJQUFJLHVDQUF1QyxTQUFTLEVBQUUsNkNBQTZDLGNBQWMsdUJBQXVCLDBCQUEwQixTQUFTLHdCQUF3QixLQUFLLFNBQVMsa0JBQWtCLEdBQUcsY0FBYyxVQUFVLFVBQVUsTUFBTSxHQUFHLEdBQUcsZUFBZSxzRkFBc0YsR0FBRyxpQkFBaUIseUNBQXlDLEVBQUUsS0FBSyxXQUFXLEVBQUUsT0FBTyxFQUFFLGdEQUFnRCxFQUFFLEtBQUssV0FBVyxHQUFHLE9BQU8sRUFBRSxPQUFPLHNFQUFzRSxjQUFjLGVBQWUsa0JBQWtCLG1CQUFtQixJQUFJLE9BQU8sR0FBRyxvRkFBb0Ysa0JBQWtCLHdDQUF3QyxpQkFBaUIsMEJBQTBCLGVBQWUsR0FBRyxlQUFlLGlIQUFpSCx1RUFBdUUsTUFBTSxjQUFjLHFCQUFxQixvQkFBb0IsZ0VBQWdFLFVBQVUsVUFBVSxVQUFVLElBQUksaUJBQWlCLHVEQUF1RCxVQUFVLE9BQU8sbUJBQW1CLEdBQUcsaUJBQWlCLGVBQWUsRUFBRSxjQUFjLElBQUksSUFBSSxJQUFJLHVDQUF1QyxTQUFTLEVBQUUsbURBQW1ELGNBQWMsdUJBQXVCLDBCQUEwQixzQkFBc0Isd0JBQXdCLEtBQUssUUFBUSxlQUFlLEdBQUcsY0FBYyxnQkFBZ0IsVUFBVSxNQUFNLEdBQUcsR0FBRyxlQUFlLHNGQUFzRixHQUFHLGlCQUFpQiwwQ0FBMEMsRUFBRSxLQUFLLFdBQVcsRUFBRSxPQUFPLEVBQUUsZ0RBQWdELEVBQUUsS0FBSyxXQUFXLEdBQUcsT0FBTyxFQUFFLE9BQU8sc0VBQXNFLGNBQWMsZ0NBQWdDLGtCQUFrQix5QkFBeUIsNEJBQTRCLHNDQUFzQyxZQUFZLE1BQU0scUJBQXFCLCtCQUErQixlQUFlLG9GQUFvRixnQ0FBZ0Msd0JBQXdCLHVCQUF1Qix1QkFBdUIsZUFBZSxJQUFJLGVBQWUsaUhBQWlILHVFQUF1RSxNQUFNLGNBQWMsaUNBQWlDLGtCQUFrQixxREFBcUQsZUFBZSxFQUFFLGNBQWMsSUFBSSxJQUFJLElBQUksMkNBQTJDLDBCQUEwQixZQUFZLHVDQUF1QyxTQUFTLEVBQUUsdUJBQXVCLDREQUE0RCxzRkFBc0YseUNBQXlDLGVBQWUsTUFBTSwrRkFBK0YsaUJBQWlCLFlBQVksbUZBQW1GLHdCQUF3QixrQ0FBa0Msb09BQW9PLHVEQUF1RCx5WUFBeVksNEVBQTRFLDhCQUE4QixNQUFNLDBCQUEwQixNQUFNLDBCQUEwQixNQUFNLDRCQUE0QixNQUFNLG9FQUFvRSxXQUFXLE1BQU0sb0RBQW9ELGFBQWEsaVdBQWlXLCtDQUErQyx5SEFBeUgscUZBQXFGLDJDQUEyQyxjQUFjLHNZQUFzWSwwQkFBMEIsMEJBQTBCLElBQUksc0JBQXNCLDJCQUEyQixpQkFBaUIsWUFBWSxVQUFVLFVBQVUsVUFBVSxXQUFXLG9CQUFvQixzQkFBc0Isa0RBQWtELEVBQUUsYUFBYSwyQkFBMkIsZUFBZSxHQUFHLDJCQUEyQixjQUFjLEdBQUcsRUFBRSxtQkFBbUIsZUFBZSxFQUFFLGFBQWEsSUFBSSxJQUFJLElBQUksOERBQThELGtCQUFrQiwyQ0FBMkMsZ0VBQWdFLDZCQUE2QixhQUFhLGdDQUFnQyxtQkFBbUIsNkJBQTZCLDJEQUEyRCxtQ0FBbUMsc0JBQXNCLEdBQUcsZUFBZSxhQUFhLG9DQUFvQyw0QkFBNEIsU0FBUyw4RkFBOEYsaUJBQWlCLHFDQUFxQyxxRkFBcUYsc0NBQXNDLDBCQUEwQixZQUFZLHNDQUFzQyxTQUFTLEVBQUUsb0pBQW9KLGdCQUFnQix3QkFBd0IsZ0JBQWdCLHNDQUFzQyxnQkFBZ0IscUNBQXFDLGdCQUFnQixtQkFBbUIsZ0JBQWdCLHFCQUFxQix3Q0FBd0MsNkJBQTZCLHdCQUF3QixFQUFFLGdCQUFnQiw4QkFBOEIsb0JBQW9CLFdBQVcsV0FBVyxZQUFZLHVDQUF1Qyw2QkFBNkIsdUJBQXVCLEdBQUcsRUFBRSxjQUFjLElBQUksSUFBSSxJQUFJLGdFQUFnRSxrQkFBa0IsMkNBQTJDLGdFQUFnRSw2QkFBNkIsYUFBYSxnQ0FBZ0MsbUJBQW1CLDZCQUE2Qiw2REFBNkQsbUNBQW1DLHNCQUFzQixHQUFHLGVBQWUsYUFBYSxzQ0FBc0MsNEJBQTRCLFNBQVMsOEZBQThGLGlCQUFpQix1Q0FBdUMsc0ZBQXNGLHVDQUF1QyxTQUFTLEVBQUUsZ0JBQWdCLGNBQWMsYUFBYSxFQUFFO0FBQ3gyckI7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixjQUFjO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxtQkFBbUI7QUFDbEMsZ0JBQWdCLEtBQUs7QUFDckI7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsdUJBQXVCO0FBQ3ZDO0FBQ0EsOERBQThELCtCQUErQjtBQUM3RjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0Esa0dBQWtHLCtCQUErQjtBQUNqSTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsMENBQU07QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLDJFQUEyRSwrQkFBK0I7QUFDMUc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUZBQXVGLFlBQVksSUFBSSxjQUFjLEVBQUUsa0VBQWtFO0FBQ3pMO0FBQ0E7QUFDQSx1SEFBdUgsWUFBWSxJQUFJLGNBQWM7QUFDcko7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMERBQTBELGtFQUFrRSxJQUFJLE1BQU07QUFDdEk7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxpRkFBaUYsdUJBQXVCO0FBQ3hHO0FBQ0EsOEZBQThGLDBCQUEwQjtBQUN4SDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLHNGQUFzRix3QkFBd0I7QUFDOUc7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLDBDQUEwQyxpQkFBaUI7QUFDM0Q7QUFDQSwwQ0FBMEMsaUJBQWlCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBLGdCQUFnQixzQkFBc0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLCtCQUErQixzQkFBc0IsK0JBQStCLEdBQUcsYUFBYTtBQUNoSTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZEQUE2RCwrQkFBK0IsZ0JBQWdCLCtCQUErQjtBQUMzSTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxnQ0FBZ0M7QUFDaEU7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLCtEQUErRDtBQUNuRix5Q0FBeUMsMENBQTBDLDBDQUEwQztBQUM3SDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNERBQTRELFlBQVksY0FBYywwQ0FBTSxzREFBc0Q7QUFDbEo7QUFDQTtBQUNBLG9CQUFvQixxQkFBcUI7QUFDekMsZ0RBQWdELDBDQUFNLFNBQVMsU0FBUyxHQUFHLFNBQVMsc0JBQXNCO0FBQzFHO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLDRCQUE0QjtBQUN2QztBQUNBO0FBQ0EsWUFBWSxtQkFBbUI7QUFDL0IseUNBQXlDLEtBQUs7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixnQ0FBZ0M7QUFDNUQ7QUFDQSxnQ0FBZ0MsSUFBSTtBQUNwQztBQUNBO0FBQ0EsbURBQW1ELGtCQUFrQjtBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxTQUFTO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyxTQUFTO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixtQkFBbUI7QUFDMUMsd0JBQXdCLElBQUk7QUFDNUIsd0JBQXdCO0FBQ3hCLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixJQUFJO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLElBQUk7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFZ0M7Ozs7Ozs7Ozs7O0FDbGpJaEM7QUFDQSxNQUFNLE9BQU8sY0FBYyxPQUFPLGVBQWUsT0FBTyxRQUFRLEVBQUUsazZIQUFrNkgsYUFBYSxhQUFhLG9IQUFvSCxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsY0FBYyxpeE1BQWl4TSxFQUFFLGNBQWMsZ0JBQWdCLG9CQUFvQixZQUFZLGtCQUFrQixRQUFRLFdBQVcsd0NBQXdDLFNBQVMsa0JBQWtCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxvaUNBQW9pQyxHQUFHLGVBQWUsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLGlwQ0FBaXBDLEdBQUcsZUFBZSw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msc1BBQXNQLEdBQUcsZUFBZSw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsaWFBQWlhLEdBQUcsZUFBZSw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msa2RBQWtkLEdBQUcsZUFBZSw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msd2NBQXdjLEdBQUcsZUFBZSw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsZ1hBQWdYLEdBQUcsZUFBZSw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsbVBBQW1QLEdBQUcsZUFBZSw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msa0xBQWtMLEdBQUcsZUFBZSw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsK2dDQUErZ0MsR0FBRyxlQUFlLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxtakJBQW1qQixHQUFHLGVBQWUsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDZhQUE2YSxHQUFHLGVBQWUsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHFiQUFxYixHQUFHLGVBQWUsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLG9jQUFvYyxHQUFHLGVBQWUsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLGtiQUFrYixHQUFHLGVBQWUsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDZhQUE2YSxHQUFHLGVBQWUsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHFhQUFxYSxHQUFHLGVBQWUsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDZhQUE2YSxHQUFHLGVBQWUsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHNiQUFzYixHQUFHLGVBQWUsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDQzQkFBNDNCLEdBQUcsZUFBZSw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msd3FDQUF3cUMsR0FBRyxlQUFlLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxnd0JBQWd3QixHQUFHLGVBQWUsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHlhQUF5YSxHQUFHLGVBQWUsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDI2QkFBMjZCLEdBQUcsZUFBZSw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsK2hDQUEraEMsR0FBRyxlQUFlLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxrWUFBa1ksR0FBRyxlQUFlLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxvWkFBb1osR0FBRyxlQUFlLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxxUEFBcVAsOEJBQThCLGdEQUFnRCw4QkFBOEIsZ0RBQWdELDhCQUE4QixnREFBZ0QsOEJBQThCLGdEQUFnRCw4QkFBOEIsZ0RBQWdELDhCQUE4QixnREFBZ0QsOEJBQThCLGlEQUFpRCw4QkFBOEIsZ0RBQWdELDhCQUE4QixpREFBaUQsR0FBRyxlQUFlLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx3RkFBd0YsOEJBQThCLGdEQUFnRCw4QkFBOEIsaURBQWlELDhCQUE4QixnREFBZ0QsOEJBQThCLGlEQUFpRCw4QkFBOEIsZ0RBQWdELDhCQUE4QixnREFBZ0QsOEJBQThCLGlEQUFpRCw4QkFBOEIsaURBQWlELDhCQUE4QixnREFBZ0QsOEJBQThCLGdEQUFnRCw4QkFBOEIsZ0RBQWdELDhCQUE4QixnREFBZ0QsOEJBQThCLGdEQUFnRCw4QkFBOEIsZ0RBQWdELDhCQUE4QixpREFBaUQsOEJBQThCLGlEQUFpRCw4QkFBOEIsZ0RBQWdELDhCQUE4QixpREFBaUQsOEJBQThCLGlEQUFpRCw4QkFBOEIsa0RBQWtELDhCQUE4QixnREFBZ0QsOEJBQThCLGdEQUFnRCw4QkFBOEIsZ0RBQWdELDhCQUE4QixnREFBZ0QsOEJBQThCLGdEQUFnRCw4QkFBOEIsaURBQWlELEdBQUcsZUFBZSw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsK2JBQStiLEdBQUcsZUFBZSw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsMHNCQUEwc0IsR0FBRyxlQUFlLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyw0RkFBNEYsOEJBQThCLDZFQUE2RSw4QkFBOEIsK0VBQStFLDhCQUE4Qiw2RUFBNkUsOEJBQThCLCtFQUErRSw4QkFBOEIsMkVBQTJFLDhCQUE4Qiw2RUFBNkUsOEJBQThCLDZFQUE2RSw4QkFBOEIsK0VBQStFLDhCQUE4QiwyRUFBMkUsOEJBQThCLDZFQUE2RSw4QkFBOEIsMkVBQTJFLDhCQUE4Qiw2RUFBNkUsOEJBQThCLDJFQUEyRSw4QkFBOEIsNkVBQTZFLDhCQUE4Qiw2RUFBNkUsOEJBQThCLCtFQUErRSw4QkFBOEIsMkVBQTJFLDhCQUE4Qiw2RUFBNkUsOEJBQThCLDJFQUEyRSw4QkFBOEIsNkVBQTZFLDhCQUE4Qiw2RUFBNkUsOEJBQThCLDZFQUE2RSw4QkFBOEIsMkVBQTJFLDhCQUE4Qiw2RUFBNkUsOEJBQThCLDJFQUEyRSw4QkFBOEIsMkVBQTJFLEdBQUcsZUFBZSw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msb0RBQW9ELDhCQUE4QixxREFBcUQsOEJBQThCLG9EQUFvRCw4QkFBOEIscURBQXFELDhCQUE4QixvREFBb0QsOEJBQThCLHFEQUFxRCw4QkFBOEIsb0RBQW9ELDhCQUE4QixxREFBcUQsOEJBQThCLHNEQUFzRCw4QkFBOEIscURBQXFELDhCQUE4QixvREFBb0QsOEJBQThCLHFEQUFxRCw4QkFBOEIsb0RBQW9ELDhCQUE4QixvREFBb0QsOEJBQThCLHFEQUFxRCw4QkFBOEIsb0RBQW9ELDhCQUE4QixvREFBb0QsOEJBQThCLHFEQUFxRCw4QkFBOEIsb0RBQW9ELDhCQUE4QixxREFBcUQsOEJBQThCLHNEQUFzRCw4QkFBOEIscURBQXFELDhCQUE4QixvREFBb0QsOEJBQThCLHFEQUFxRCw4QkFBOEIscURBQXFELDhCQUE4QixzREFBc0QsOEJBQThCLG9EQUFvRCw4QkFBOEIsb0RBQW9ELDhCQUE4QixvREFBb0QsOEJBQThCLHFEQUFxRCw4QkFBOEIsb0RBQW9ELDhCQUE4QixvREFBb0QsOEJBQThCLHFEQUFxRCxHQUFHLGVBQWUsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDZGQUE2Riw4QkFBOEIsb0VBQW9FLDhCQUE4QixxRUFBcUUsOEJBQThCLG9FQUFvRSw4QkFBOEIscUVBQXFFLDhCQUE4QixvRUFBb0UsOEJBQThCLG9FQUFvRSw4QkFBOEIscUVBQXFFLDhCQUE4QixxRUFBcUUsOEJBQThCLG9FQUFvRSw4QkFBOEIsb0VBQW9FLDhCQUE4QixvRUFBb0UsOEJBQThCLG9FQUFvRSw4QkFBOEIsb0VBQW9FLDhCQUE4QixvRUFBb0UsOEJBQThCLHFFQUFxRSw4QkFBOEIscUVBQXFFLDhCQUE4QixvRUFBb0UsOEJBQThCLHFFQUFxRSw4QkFBOEIscUVBQXFFLDhCQUE4QixzRUFBc0UsOEJBQThCLG9FQUFvRSw4QkFBOEIsb0VBQW9FLDhCQUE4QixvRUFBb0UsOEJBQThCLG9FQUFvRSw4QkFBOEIsb0VBQW9FLDhCQUE4QixxRUFBcUUsR0FBRyxlQUFlLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx1TUFBdU0sR0FBRyxlQUFlLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxvREFBb0QsOEJBQThCLG9EQUFvRCw4QkFBOEIsb0RBQW9ELDhCQUE4QixxREFBcUQsOEJBQThCLG9EQUFvRCw4QkFBOEIscURBQXFELDhCQUE4QixvREFBb0QsOEJBQThCLG9EQUFvRCw4QkFBOEIsb0RBQW9ELDhCQUE4QixxREFBcUQsOEJBQThCLG9EQUFvRCw4QkFBOEIscURBQXFELDhCQUE4QixvREFBb0QsOEJBQThCLDRYQUE0WCxHQUFHLGVBQWUsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDIzQ0FBMjNDLEdBQUcsZUFBZSw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsNkZBQTZGLDhCQUE4QiwrRUFBK0UsOEJBQThCLCtFQUErRSw4QkFBOEIsK0VBQStFLDhCQUE4QiwrRUFBK0UsOEJBQThCLDZFQUE2RSw4QkFBOEIsK0VBQStFLDhCQUE4Qiw2RUFBNkUsOEJBQThCLCtFQUErRSw4QkFBOEIsK0VBQStFLDhCQUE4QixpRkFBaUYsOEJBQThCLCtFQUErRSw4QkFBOEIsaUZBQWlGLDhCQUE4Qiw2RUFBNkUsOEJBQThCLCtFQUErRSw4QkFBOEIsNkVBQTZFLDhCQUE4QiwrRUFBK0UsOEJBQThCLDZFQUE2RSw4QkFBOEIsNkVBQTZFLDhCQUE4Qiw2RUFBNkUsOEJBQThCLDZFQUE2RSw4QkFBOEIsaUZBQWlGLDhCQUE4QixpRkFBaUYsOEJBQThCLCtFQUErRSw4QkFBOEIsaUZBQWlGLDhCQUE4QiwrRUFBK0UsOEJBQThCLCtFQUErRSxHQUFHLGVBQWUsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHFVQUFxVSxHQUFHLGVBQWUsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLCtoQkFBK2hCLEdBQUcsZUFBZSw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MscXVCQUFxdUIsR0FBRyxlQUFlLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyw2OERBQTY4RCxHQUFHLGVBQWUsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDAxQkFBMDFCLEdBQUcsZUFBZSw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsdWVBQXVlLEdBQUcsZUFBZSw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsK2xCQUErbEIsR0FBRyxlQUFlLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx5dEJBQXl0QixHQUFHLGVBQWUsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLGlhQUFpYSxHQUFHLGVBQWUsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDRaQUE0WixHQUFHLGVBQWUsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHlaQUF5WixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msa3VCQUFrdUIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLGlhQUFpYSxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MscW5CQUFxbkIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLCtaQUErWixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsNDBCQUE0MEIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHNpQkFBc2lCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyw0V0FBNFcsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLG1YQUFtWCxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsMldBQTJXLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyw0V0FBNFcsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDJkQUEyZCxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsNG1CQUE0bUIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLGtlQUFrZSxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsbzJEQUFvMkQsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLGt1QkFBa3VCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx3NUJBQXc1QixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsMmhDQUEyaEMsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLG9pQ0FBb2lDLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyw0S0FBNEssR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLGdrQkFBZ2tCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx5N0NBQXk3QyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsNDdEQUE0N0QsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLG9YQUFvWCxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsK1lBQStZLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyw4dkJBQTh2QixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsdW1DQUF1bUMsOEJBQThCLDJ1RUFBMnVFLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQywwekRBQTB6RCxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msc2pIQUFzakgsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHFxQkFBcXFCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx1bkJBQXVuQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsMG5CQUEwbkIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLG1uQkFBbW5CLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxzbkJBQXNuQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsazFFQUFrMUUsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDQwQkFBNDBCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxpZ0NBQWlnQyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsK21CQUErbUIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLG1qQkFBbWpCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx5akJBQXlqQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsdStCQUF1K0IsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLCsyQkFBKzJCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyw0NUJBQTQ1QixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MseXFEQUF5cUQsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLGlqQkFBaWpCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx1MEJBQXUwQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsNmhDQUE2aEMsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDRLQUE0SyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsMHhKQUEweEosR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDZ2Q0FBNnZDLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx5M0JBQXkzQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsOEtBQThLLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxrTEFBa0wsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLCtYQUErWCxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsK0tBQStLLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxvaUJBQW9pQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msb2lCQUFvaUIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDRxQkFBNHFCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyw0cUJBQTRxQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsNHFCQUE0cUIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDRxQkFBNHFCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxtdkJBQW12QixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixrQ0FBa0MsZ0NBQWdDLGdDQUFnQyxnQ0FBZ0MsZ0NBQWdDLGtDQUFrQyxnQ0FBZ0Msa0NBQWtDLGdDQUFnQyxtQ0FBbUMsZ0NBQWdDLG1DQUFtQyxnQ0FBZ0MsZ0NBQWdDLGdDQUFnQyxnQ0FBZ0MsZ0NBQWdDLGtDQUFrQyxnQ0FBZ0Msa0NBQWtDLGdDQUFnQyxtQ0FBbUMsZ0NBQWdDLG1DQUFtQyxnQ0FBZ0Msa0NBQWtDLGdDQUFnQyxrQ0FBa0MsZ0NBQWdDLG9DQUFvQyxnQ0FBZ0Msb0NBQW9DLGdDQUFnQyxxQ0FBcUMsZ0NBQWdDLHFDQUFxQyxnQ0FBZ0MsbUNBQW1DLGdDQUFnQyxtQ0FBbUMsZ0NBQWdDLHFDQUFxQyxnQ0FBZ0MscUNBQXFDLGdDQUFnQyxzQ0FBc0MsZ0NBQWdDLHNDQUFzQyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsaWlDQUFpaUMsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLCsxQkFBKzFCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyw2NEJBQTY0QixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsMjFCQUEyMUIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDB3QkFBMHdCLDhCQUE4Qiwwd0JBQTB3QixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsazlCQUFrOUIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDJtQkFBMm1CLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQywycUJBQTJxQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsdVpBQXVaLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQywyZEFBMmQsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLGcxQkFBZzFCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyw2bUJBQTZtQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsMHFCQUEwcUIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLCt0QkFBK3RCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx1dENBQXV0QyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MseTlCQUF5OUIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLGdtQkFBZ21CLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx5dUNBQXl1QyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsczdDQUFzN0MsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLG9hQUFvYSxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MseWdCQUF5Z0IsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDRwQkFBNHBCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx5MEJBQXkwQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsZ3FCQUFncUIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHc0QkFBdzRCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQywwZkFBMGYsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDJlQUEyZSxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsK3NDQUErc0MsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLGdvREFBZ29ELEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyw2a0JBQTZrQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsOG9CQUE4b0IsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLGlwRkFBaXBGLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxxdUNBQXF1QyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsNmFBQTZhLDhCQUE4QixtR0FBbUcsOEJBQThCLG9pQkFBb2lCLDhCQUE4Qiw4ekJBQTh6QixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsK1dBQStXLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxzaUVBQXNpRSxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsMmZBQTJmLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxrWUFBa1ksR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLCthQUErYSxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msa3RJQUFrdEksR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDg4QkFBODhCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx5dEJBQXl0QixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsdXFCQUF1cUIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDZ5REFBNnlELEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxzeEJBQXN4QixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsdS9CQUF1L0IsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDgyQkFBODJCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxpakNBQWlqQyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsZy9CQUFnL0IsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHFsQ0FBcWxDLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxrV0FBa1csR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHdrQ0FBd2tDLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyw0dkNBQTR2QyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msc2tDQUFza0MsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDAzQkFBMDNCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyw0akRBQTRqRCxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsZ3hCQUFneEIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHUyQ0FBdTJDLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx3M0RBQXczRCxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msd2pFQUF3akUsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLGtrREFBa2tELEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx3ckdBQXdyRyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsMDhEQUEwOEQsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLG9qRUFBb2pFLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx1M0JBQXUzQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsbW5CQUFtbkIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLG1nQkFBbWdCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQywwZ0JBQTBnQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsZzVCQUFnNUIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHl4REFBeXhELEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx1Y0FBdWMsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHVsSEFBdWxILEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyw4Z0JBQThnQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MscVZBQXFWLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx1TUFBdU0sR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHFuQkFBcW5CLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQywyOENBQTI4QyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msd25DQUF3bkMsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLG9uQ0FBb25DLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxxbkJBQXFuQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsczVHQUFzNUcsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDB2REFBMHZELEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyw2NkNBQTY2QyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msc1NBQXNTLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxvcUJBQW9xQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsZ2dFQUFnZ0UsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLGdrQkFBZ2tCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxrZEFBa2QsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHloQkFBeWhCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQywwOERBQTA4RCxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsbzdCQUFvN0IsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHNuQkFBc25CLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxvVUFBb1UsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHVyQkFBdXJCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxtc0JBQW1zQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsbXNCQUFtc0IsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHlyQkFBeXJCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxvWUFBb1ksR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHdWQUF3VixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsMHlCQUEweUIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLG0yQkFBbTJCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx1NUNBQXU1QyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsNm1DQUE2bUMsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDRxQkFBNHFCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxzeUVBQXN5RSxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsdXhCQUF1eEIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDJpQkFBMmlCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxvb0JBQW9vQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MseWtGQUF5a0YsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLGd4QkFBZ3hCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxnc0NBQWdzQyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsOFBBQThQLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx1dUJBQXV1QixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsZ3dDQUFnd0MsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHN6REFBc3pELEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyw0V0FBNFcsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDBQQUEwUCxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsMmRBQTJkLDhCQUE4QiwwTUFBME0sOEJBQThCLDhNQUE4TSw4QkFBOEIsZ05BQWdOLDhCQUE4Qiw4TUFBOE0sOEJBQThCLGdOQUFnTiw4QkFBOEIsK01BQStNLDhCQUE4Qiw4TUFBOE0sOEJBQThCLDZNQUE2TSw4QkFBOEIsOE1BQThNLDhCQUE4Qiw0TUFBNE0sR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDJkQUEyZCw4QkFBOEIsOE1BQThNLDhCQUE4Qiw4TUFBOE0sOEJBQThCLGdOQUFnTiw4QkFBOEIsK01BQStNLDhCQUE4Qiw4TUFBOE0sOEJBQThCLCtNQUErTSw4QkFBOEIsK01BQStNLDhCQUE4Qiw4TUFBOE0sOEJBQThCLCtNQUErTSw4QkFBOEIsOE1BQThNLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxxOEJBQXE4Qiw4QkFBOEIsME1BQTBNLDhCQUE4Qiw4TUFBOE0sOEJBQThCLGdOQUFnTiw4QkFBOEIsOE1BQThNLDhCQUE4QixnTkFBZ04sOEJBQThCLCtNQUErTSw4QkFBOEIsOE1BQThNLDhCQUE4Qiw2TUFBNk0sOEJBQThCLDhNQUE4TSw4QkFBOEIsNE1BQTRNLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyw2VkFBNlYsOEJBQThCLDJWQUEyViw4QkFBOEIsb1ZBQW9WLDhCQUE4QixrVkFBa1YsOEJBQThCLGlOQUFpTiw4QkFBOEIsdWNBQXVjLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx3cUNBQXdxQyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msd2lDQUF3aUMsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDBpREFBMGlELEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxxckJBQXFyQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MseTVDQUF5NUMsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLG1HQUFtRyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsaWtCQUFpa0IsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLGszQkFBazNCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxnaEJBQWdoQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msb2xDQUFvbEMsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLGlvQkFBaW9CLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxrb0NBQWtvQyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MseXdCQUF5d0IsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHMrQkFBcytCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxvd0JBQW93QixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msb0hBQW9ILEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxzeEJBQXN4QixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsOGlEQUE4aUQsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDBwQkFBMHBCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx1aERBQXVoRCxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MseUxBQXlMLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxrL0JBQWsvQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msa21CQUFrbUIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHlhQUF5YSxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsK29CQUErb0IsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDB1REFBMHVELEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxvYUFBb2EsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLGsvQ0FBay9DLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyw0WUFBNFksR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHl1Q0FBeXVDLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxzdUJBQXN1QixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsK2FBQSthLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQywrYUFBK2EsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDBhQUEwYSxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsK2FBQSthLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQywrNUJBQSs1QixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsdWZBQXVmLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx3aEJBQXdoQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msa2hCQUFraEIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLGlnQkFBaWdCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQywwNUJBQTA1QixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsczlCQUFzOUIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLG1uQkFBbW5CLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyw2bkJBQTZuQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msc05BQXNOLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyw4WEFBOFgsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLGlDQUFpQyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msa0NBQWtDLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxvQ0FBb0MsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLGdDQUFnQyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsMndFQUEyd0UsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLG9sQkFBb2xCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxrL0NBQWsvQyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MscXhCQUFxeEIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDJkQUEyZCxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsczhCQUFzOEIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLCtNQUErTSxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsbzlEQUFvOUQsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDhXQUE4VyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msb1ZBQW9WLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxzZUFBc2UsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLGtWQUFrVixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsaXFCQUFpcUIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHF1QkFBcXVCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyw0a0JBQTRrQixJQUFJLGdCQUFnQixjQUFjLGNBQWMsRUFBRSxpREFBaUQsK0JBQStCLGlCQUFpQixvQkFBb0Isc0JBQXNCLDhCQUE4Qiw4Q0FBOEMseUJBQXlCLEdBQUcsK0JBQStCLGlCQUFpQixHQUFHLDhEQUE4RCxrQkFBa0IsbUJBQW1CLEdBQUcsa0VBQWtFLGVBQWUsa0JBQWtCLEdBQUcsNEZBQTRGLGdDQUFnQyxtQ0FBbUMsMkJBQTJCLEdBQUcsMEJBQTBCLGNBQWMsY0FBYyxrQkFBa0IsR0FBRyx3Q0FBd0Msb0JBQW9CLEdBQUcsK0JBQStCLGtCQUFrQixpQkFBaUIsdUJBQXVCLEdBQUcsc0NBQXNDLG9CQUFvQixxQkFBcUIsR0FBRywrQ0FBK0MsOEJBQThCLEdBQUcsdUdBQXVHLDhCQUE4QixHQUFHLHlDQUF5Qyx1QkFBdUIsOEJBQThCLHNCQUFzQixzQkFBc0IsR0FBRyxrREFBa0QsbUJBQW1CLEdBQUcsa0VBQWtFLGtCQUFrQix3QkFBd0IsNEJBQTRCLHNCQUFzQixzQkFBc0IsR0FBRyxtREFBbUQsbUJBQW1CLEdBQUcsNERBQTRELG1CQUFtQixHQUFHLCtKQUErSix1QkFBdUIsR0FBRyx5QkFBeUIsb0JBQW9CLDJCQUEyQixxQkFBcUIsdUJBQXVCLHNCQUFzQixHQUFHLGtDQUFrQyw4QkFBOEIsR0FBRyw2RUFBNkUsOEJBQThCLEdBQUcsOEJBQThCLHdCQUF3QixHQUFHLHVGQUF1Rix3QkFBd0IsR0FBRyxvQ0FBb0Msd0JBQXdCLEdBQUcsbUdBQW1HLHdCQUF3QixHQUFHLGlDQUFpQyx3QkFBd0IsaUJBQWlCLEdBQUcsNkZBQTZGLHdCQUF3QixHQUFHLDZEQUE2RCw4QkFBOEIsR0FBRyxTQUFTLFVBQVUsVUFBVSxzQkFBc0IsU0FBUyw2QkFBNkIsNkJBQTZCLHlCQUF5QiwrQ0FBK0MsdUNBQXVDLGdFQUFnRSxxQkFBcUIsZUFBZSxlQUFlLEtBQUssWUFBWSx5QkFBeUIsMENBQTBDLFNBQVMsaUJBQWlCLGNBQWMsS0FBSyxpQkFBaUIsbUJBQW1CLFlBQVksV0FBVyxLQUFLLHNCQUFzQixvR0FBb0csaUJBQWlCLG9EQUFvRCxpQkFBaUIsZ0VBQWdFLGlCQUFpQiwwQ0FBMEMsSUFBSSxVQUFVLHNCQUFzQixhQUFhLGdCQUFnQixjQUFjLGlGQUFpRixnQkFBZ0IsYUFBYSxvR0FBb0csTUFBTSxnQkFBZ0IsMEVBQTBFLHVCQUF1QixRQUFRLGNBQWMsb0dBQW9HLFNBQVMsY0FBYyx3RUFBd0UsNkNBQTZDLE1BQU0sY0FBYyxvQkFBb0Isc0NBQXNDLDRCQUE0QixlQUFlLHlCQUF5Qiw0QkFBNEIsb0VBQW9FLGlCQUFpQixJQUFJLGtDQUFrQyxzRkFBc0YsZUFBZSw0R0FBNEcsMENBQTBDLGFBQWEscUNBQXFDLHVDQUF1QyxZQUFZLFlBQVksTUFBTSxnQ0FBZ0MsNERBQTRELG1DQUFtQyxxQ0FBcUMsSUFBSSxnRkFBZ0YsT0FBTyxTQUFTLFVBQVUsY0FBYyxhQUFhLE1BQU0sMEJBQTBCLG1DQUFtQywrQkFBK0IscUJBQXFCLHVEQUF1RCw4RkFBOEYsWUFBWSxTQUFTLEVBQUUsY0FBYyxZQUFZLGVBQWUsOEVBQThFLDZDQUE2QyxpRkFBaUYseUJBQXlCLHNEQUFzRCxJQUFJLHdCQUF3QixvQkFBb0IsMEJBQTBCLCtCQUErQiw4RkFBOEYsVUFBVSx1S0FBdUssU0FBUyw0REFBNEQsa0RBQWtELGlOQUFpTixvTEFBb0wsb0JBQW9CLHdIQUF3SCx5QkFBeUIsb1BBQW9QLG1HQUFtRyxnQkFBZ0IsbUNBQW1DLDZGQUE2RixFQUFFLDBDQUEwQyw0RUFBNEUsaURBQWlELEVBQUUsNkNBQTZDLHlCQUF5QixvREFBb0QsRUFBRSxzQ0FBc0Msa0VBQWtFLHVGQUF1RixHQUFHLEVBQUUsc0RBQXNELDZLQUE2Syw4QkFBOEIsb0NBQW9DLEtBQUssRUFBRSx3Q0FBd0MsdUdBQXVHLEVBQUUsNENBQTRDLHdCQUF3QixtUUFBbVEsWUFBWSxnQkFBZ0IseUdBQXlHLHNJQUFzSSxFQUFFLHNDQUFzQyx3VkFBd1YsRUFBRSx5Q0FBeUMsMENBQTBDLEVBQUUsMkNBQTJDLG1CQUFtQix5SEFBeUgsZ0lBQWdJLG1HQUFtRyxzREFBc0Qsd0xBQXdMLEVBQUUsNENBQTRDLHVCQUF1QixFQUFFLDhCQUE4Qiw2RUFBNkUsTUFBTSxvSkFBb0oseUJBQXlCLGdCQUFnQixnQ0FBZ0MsNEZBQTRGLEVBQUUsYUFBYSxrQkFBa0IsWUFBWSxXQUFXLEtBQUssV0FBVyxrSEFBa0gscURBQXFELFlBQVksSUFBSSw2REFBNkQsYUFBYSxzREFBc0QsK2pCQUErakIsK0dBQStHLDZEQUE2RCxpR0FBaUcsaUJBQWlCLHVDQUF1QyxvQkFBb0IsYUFBYSxnQkFBZ0IsY0FBYyxzQkFBc0IsRUFBRSxjQUFjLGdCQUFnQixxQkFBcUIsaUNBQWlDLHNDQUFzQyw0QkFBNEIsdURBQXVELHNCQUFzQixTQUFTLGNBQWMsWUFBWSxtQkFBbUIsS0FBSyx5Q0FBeUMseUNBQXlDLFlBQVkscUlBQXFJLGdFQUFnRSxHQUFHLFNBQVMsa0JBQWtCLHFCQUFxQixvQkFBb0IseUNBQXlDLDRCQUE0QixlQUFlLHlCQUF5QiwrQkFBK0Isb0VBQW9FLGlCQUFpQixJQUFJLHFDQUFxQyxvQ0FBb0Msa0RBQWtELFdBQVcsa0JBQWtCLG1DQUFtQyxlQUFlLHlCQUF5QixlQUFlLHdCQUF3QixlQUFlLHVCQUF1QixpQkFBaUIsU0FBUyw4QkFBOEIsc0JBQXNCLEtBQUssZUFBZSxzREFBc0QsSUFBSSx3QkFBd0IsK0NBQStDLGVBQWUsMkZBQTJGLHNCQUFzQixxRkFBcUYsb0dBQW9HLE9BQU8sbUtBQW1LLG1CQUFtQixxQ0FBcUMsZUFBZSxnREFBZ0Qsb0NBQW9DLDBDQUEwQyxhQUFhLEdBQUcsR0FBRyxlQUFlLFdBQVcseUJBQXlCLHNEQUFzRCxJQUFJLHdCQUF3QixvQkFBb0IsMEJBQTBCLCtCQUErQiw4RkFBOEYsUUFBUSxzSEFBc0gsU0FBUyxjQUFjLHdCQUF3QixtQkFBbUIseURBQXlELEtBQUssMEJBQTBCLDZDQUE2QyxzRkFBc0YsU0FBUyxjQUFjLG1EQUFtRCxpRkFBaUYsT0FBTyxnS0FBZ0ssNEZBQTRGLGFBQWEsR0FBRyxrREFBa0QsNENBQTRDLDRDQUE0Qyw0Q0FBNEMsS0FBSywwREFBMEQsZ0NBQWdDLDBLQUEwSyxpQkFBaUIsbURBQW1ELGdDQUFnQywwQ0FBMEMsaUZBQWlGLHlCQUF5QixlQUFlLDRCQUE0QixvQkFBb0IsZUFBZSxXQUFXLHVEQUF1RCxzQ0FBc0MsZ0RBQWdELGVBQWUscUJBQXFCLDJIQUEySCxlQUFlLHNJQUFzSSxNQUFNLHFEQUFxRCxxRUFBcUUsSUFBSSxXQUFXLDhCQUE4Qiw4Q0FBOEMsOEdBQThHLFdBQVcsc0NBQXNDLDBCQUEwQixhQUFhLEdBQUcsa0pBQWtKLDBDQUEwQyx1Q0FBdUMsd0NBQXdDLEtBQUssc0NBQXNDLHlCQUF5QixhQUFhLEdBQUcsK0lBQStJLDBDQUEwQyx3Q0FBd0Msc0NBQXNDLDBCQUEwQixtQ0FBbUMsdUJBQXVCLGVBQWUsV0FBVyxxSEFBcUgsY0FBYyxpQ0FBaUMsZUFBZSxvQkFBb0IsaUJBQWlCLG1CQUFtQixnQ0FBZ0MsaUVBQWlFLE9BQU8sK0VBQStFLHNCQUFzQixxQ0FBcUMsc0JBQXNCLGdDQUFnQyxzQkFBc0Isa0NBQWtDLHNCQUFzQixJQUFJLGNBQWMsdU5BQXVOLFVBQVUsYUFBYSxnQkFBZ0IsY0FBYyxnQkFBZ0Isc0JBQXNCLHdCQUF3QiwyRUFBMkUsb0ZBQW9GLGlCQUFpQixtQkFBbUIsOERBQThELHdCQUF3Qix5QkFBeUIsU0FBUywwR0FBMEcsSUFBSSxpSEFBaUgsbUJBQW1CLDBEQUEwRCxNQUFNLGdJQUFnSSxPQUFPLGlCQUFpQixjQUFjLDhDQUE4QyxJQUFJLDRFQUE0RSxrQkFBa0IsbURBQW1ELG9CQUFvQiwwREFBMEQscUNBQXFDLG1DQUFtQyx1Q0FBdUMsOENBQThDLHVCQUF1QixnQ0FBZ0MsZ0JBQWdCLHNDQUFzQyxTQUFTLEVBQUUsK0RBQStELGNBQWMsK0NBQStDLFdBQVcsa0JBQWtCLDRCQUE0QiwwQkFBMEIsOENBQThDLGtCQUFrQiwyQ0FBMkMsbUNBQW1DLDZCQUE2QixhQUFhLEdBQUcsZ0NBQWdDLGdDQUFnQyxPQUFPLHNCQUFzQiwyQkFBMkIsYUFBYSxLQUFLLElBQUksNmJBQTZiLGNBQWMsZ0JBQWdCLFdBQVcsOEJBQThCLHVCQUF1QixVQUFVLGlEQUFpRCwrQkFBK0IsU0FBUyxhQUFhLHNCQUFzQixFQUFFLGFBQWEscUNBQXFDLDRCQUE0QixjQUFjLHFCQUFxQixtREFBbUQsYUFBYSxzQkFBc0IsNEJBQTRCLHdEQUF3RCwrQkFBK0IsWUFBWSwyQkFBMkIsMkJBQTJCLE9BQU8sY0FBYyw2QkFBNkIscUJBQXFCLFdBQVcsY0FBYyxZQUFZLHdGQUF3RixjQUFjLDRFQUE0RSxjQUFjLHdCQUF3QixjQUFjLCtCQUErQixzQkFBc0IsTUFBTSx3QkFBd0IsbUJBQW1CLHlIQUF5SCxrQkFBa0IsbUJBQW1CLDRDQUE0QyxTQUFTLHFDQUFxQyxvQkFBb0IsS0FBSyxnQkFBZ0IsU0FBUyxxQ0FBcUMsNEJBQTRCLEtBQUssS0FBSyxjQUFjLE1BQU0sa0xBQWtMLGNBQWMsaUNBQWlDLGNBQWMsc0NBQXNDLGNBQWMsaUdBQWlHLDJDQUEyQyxzREFBc0Qsb0JBQW9CLFNBQVMsNEJBQTRCLE9BQU8scURBQXFELDBCQUEwQiw0Q0FBNEMsNkJBQTZCLE9BQU8scUJBQXFCLG9CQUFvQixlQUFlLGdEQUFnRCw4RUFBOEUsbUNBQW1DLCtCQUErQix1QkFBdUIsaURBQWlELHFEQUFxRCxLQUFLLFdBQVcsdUZBQXVGLEdBQUcsZ0JBQWdCLHFCQUFxQixrREFBa0QsUUFBUSxXQUFXLDhGQUE4RiwyQkFBMkIsTUFBTSxpRUFBaUUsaUJBQWlCLGtCQUFrQix5Q0FBeUMsUUFBUSw0QkFBNEIsU0FBUyxrQ0FBa0MsWUFBWSxJQUFJLEtBQUssOENBQThDLDhDQUE4QyxNQUFNLElBQUksZ0JBQWdCLElBQUksU0FBUyxpRkFBaUYsUUFBUSx1QkFBdUIsa0NBQWtDLE1BQU0sa0lBQWtJLE9BQU8sK0JBQStCLEdBQUcsY0FBYyxnQkFBZ0Isd0JBQXdCLFlBQVksY0FBYyxvQkFBb0Isa0JBQWtCLHlDQUF5QyxFQUFFLGtOQUFrTixjQUFjLGlGQUFpRixTQUFTLGNBQWMseUJBQXlCLDhEQUE4RCxnQkFBZ0IsaUNBQWlDLDJEQUEyRCw4QkFBOEIsbUJBQW1CLEdBQUcsR0FBRyxpQkFBaUIsY0FBYyxnQkFBZ0IsK0NBQStDLGNBQWMsZ0JBQWdCLGdCQUFnQiw0QkFBNEIsNERBQTRELG1CQUFtQixtREFBbUQsS0FBSyxpRkFBaUYsZUFBZSwwQkFBMEIscUJBQXFCLDhDQUE4Qyw0QkFBNEIsWUFBWSxxQkFBcUIsTUFBTSxtOEJBQW04Qiw2QkFBNkIsNkVBQTZFLFdBQVcsbUJBQW1CLGdCQUFnQixXQUFXLGdCQUFnQixLQUFLLHNCQUFzQixTQUFTLHFDQUFxQyxtREFBbUQseUJBQXlCLDRFQUE0RSx5Q0FBeUMsNEJBQTRCLElBQUksY0FBYyxZQUFZLGFBQWEsNEpBQTRKLCtIQUErSCxVQUFVLDRCQUE0QixJQUFJLEtBQUssV0FBVyw0Q0FBNEMsNkVBQTZFLDZDQUE2QyxrRkFBa0Ysb0NBQW9DLE1BQU0sa0JBQWtCLE9BQU8sUUFBUSxhQUFhLG9DQUFvQyxXQUFXLG1CQUFtQiw2Q0FBNkMsbUJBQW1CLFFBQVEsbUJBQW1CLFNBQVMsdUJBQXVCLG9DQUFvQywwQkFBMEIsNkJBQTZCLFdBQVcsc0JBQXNCLDhCQUE4QixJQUFJLHVCQUF1QiwrQkFBK0IsT0FBTyxPQUFPLHVEQUF1RCxRQUFRLGdMQUFnTCx5dUJBQXl1QixlQUFlLGlCQUFpQixtQkFBbUIsY0FBYyxJQUFJLGlCQUFpQixlQUFlLHdDQUF3QyxVQUFVLG1CQUFtQixpREFBaUQscUJBQXFCLDJCQUEyQixLQUFLLG9EQUFvRCxLQUFLLG1EQUFtRCw2QkFBNkIsZ0lBQWdJLHVJQUF1SSwyREFBMkQsNElBQTRJLGdEQUFnRCwySEFBMkgsdURBQXVELGNBQWMscUJBQXFCLHdCQUF3QixtQkFBbUIsZUFBZSxrQkFBa0IsK0JBQStCLFFBQVEsU0FBUyxHQUFHLGlCQUFpQiw0QkFBNEIsV0FBVyw2QkFBNkIsOEJBQThCLDhDQUE4QyxXQUFXLG1CQUFtQixVQUFVLEVBQUUsT0FBTyxZQUFZLFNBQVMsZ0RBQWdELGFBQWEsU0FBUyxlQUFlLDhDQUE4Qyw2REFBNkQsU0FBUywrREFBK0QsU0FBUyw4REFBOEQsUUFBUSxNQUFNLEVBQUUsNkJBQTZCLHdDQUF3Qyw0Q0FBNEMsaUJBQWlCLHVCQUF1QixvRUFBb0UsZ1RBQWdULGlCQUFpQiwwRUFBMEUsZUFBZSxtQkFBbUIsK0NBQStDLFNBQVMsZUFBZSxZQUFZLDZFQUE2RSxTQUFTLGVBQWUscURBQXFELG1CQUFtQix3QkFBd0IsZ0JBQWdCLHdEQUF3RCxnQkFBZ0IsaUNBQWlDLGVBQWUsc0JBQXNCLDJCQUEyQixxQkFBcUIseUVBQXlFLDBDQUEwQywrQkFBK0IsZ0JBQWdCLElBQUksbUJBQW1CLHFCQUFxQix3Q0FBd0MsbUNBQW1DLG1CQUFtQixLQUFLLHFCQUFxQixRQUFRLDBDQUEwQyw2QkFBNkIsMENBQTBDLDBFQUEwRSxvQkFBb0IscUZBQXFGLGFBQWEsTUFBTSxzQkFBc0IsYUFBYSxpREFBaUQseUJBQXlCLDBCQUEwQixLQUFLLFdBQVcsbUJBQW1CLDRFQUE0RSxxQ0FBcUMsSUFBSSxnRkFBZ0YsU0FBUyxjQUFjLDBCQUEwQixpRkFBaUYsOEJBQThCLCtCQUErQixFQUFFLEtBQUssbUJBQW1CLG9EQUFvRCxHQUFHLHFCQUFxQix3REFBd0QsK0JBQStCLEtBQUssc0VBQXNFLEVBQUUscUJBQXFCLDRDQUE0QyxxQ0FBcUMscUJBQXFCLHdCQUF3QixnQkFBZ0IsMkJBQTJCLGFBQWEsZUFBZSxxSEFBcUgsZUFBZSxrQkFBa0IsYUFBYSxnSEFBZ0gsV0FBVyxHQUFHLFFBQVEsaUJBQWlCLGlCQUFpQix1QkFBdUIsNENBQTRDLE9BQU8sdUJBQXVCLGlCQUFpQiwrQkFBK0IsdUJBQXVCLGlCQUFpQiwrQkFBK0IsNkJBQTZCLHFCQUFxQixtQkFBbUIsb0JBQW9CLG1CQUFtQiwwQkFBMEIsOEJBQThCLDRCQUE0QixJQUFJLGVBQWUsc0NBQXNDLGVBQWUscUNBQXFDLGVBQWUsb0NBQW9DLEtBQUssa01BQWtNLEtBQUssbUdBQW1HLGVBQWUsc0NBQXNDLHFCQUFxQiw2Q0FBNkMscUJBQXFCLGdEQUFnRCxlQUFlLFdBQVcsa0JBQWtCLGlDQUFpQyxPQUFPLEdBQUcsa0RBQWtELGVBQWUsU0FBUyxrQkFBa0IsdUJBQXVCLEtBQUssa0JBQWtCLGtCQUFrQixRQUFRLGlCQUFpQixTQUFTLGNBQWMsYUFBYSxtQkFBbUIsbUJBQW1CLHFCQUFxQixNQUFNLGtHQUFrRyxxQkFBcUIsMkNBQTJDLGVBQWUsK0JBQStCLGtCQUFrQixZQUFZLE1BQU0sbUJBQW1CLG1CQUFtQixrQkFBa0IsS0FBSyxvQkFBb0IseUhBQXlILGFBQWEsTUFBTSwyREFBMkQsYUFBYSxNQUFNLDhGQUE4RixnQkFBZ0Isb0VBQW9FLGdCQUFnQix1QkFBdUIsbUNBQW1DLE1BQU0sc0xBQXNMLGVBQWUseUJBQXlCLHFDQUFxQywwQkFBMEIsTUFBTSxrRUFBa0Usa0NBQWtDLE1BQU0sa0VBQWtFLFNBQVMseUJBQXlCLHFFQUFxRSx3RkFBd0YsSUFBSSxpQkFBaUIsOEJBQThCLGVBQWUseUJBQXlCLFlBQVksSUFBSSw0QkFBNEIsU0FBUyxtQkFBbUIsYUFBYSxLQUFLLG9SQUFvUixnQkFBZ0IscUJBQXFCLG9GQUFvRixnREFBZ0QsOEJBQThCLDZGQUE2RixnQkFBZ0IsK0NBQStDLGtCQUFrQiw2SEFBNkgsZUFBZSxPQUFPLGtFQUFrRSxnQkFBZ0IsT0FBTywwRkFBMEYsZUFBZSxPQUFPLDRDQUE0QyxnQkFBZ0IsT0FBTyx1Q0FBdUMsS0FBSyx5SUFBeUksa0JBQWtCLE1BQU0sZ0RBQWdELEtBQUssT0FBTyw0QkFBNEIsTUFBTSxtUEFBbVAsaUJBQWlCLGNBQWMsaUJBQWlCLGNBQWMsaUdBQWlHLFVBQVUsZUFBZSx5RUFBeUUsZUFBZSxvQ0FBb0MsaUJBQWlCLDBCQUEwQixxQkFBcUIsd0JBQXdCLHVCQUF1Qiw4QkFBOEIsb0VBQW9FLHNJQUFzSSxjQUFjLCtPQUErTyxPQUFPLHVFQUF1RSxrQkFBa0IsNkVBQTZFLDBDQUEwQyxpQkFBaUIsTUFBTSw2RkFBNkYsOEZBQThGLGdCQUFnQiwrR0FBK0csbUlBQW1JLDhCQUE4QixnQ0FBZ0MseUNBQXlDLGdCQUFnQixxSEFBcUgsSUFBSSw0Y0FBNGMsS0FBSyxVQUFVLHFCQUFxQixNQUFNLDZEQUE2RCx1QkFBdUIsTUFBTSwrREFBK0QsR0FBRyxZQUFZLE1BQU0sbUZBQW1GLG9CQUFvQiw0QkFBNEIsTUFBTSw2QkFBNkIseUJBQXlCLG1CQUFtQixjQUFjLDhDQUE4QyxtQ0FBbUMsR0FBRyxpQkFBaUIsNkJBQTZCLGlCQUFpQixtQkFBbUIsb0JBQW9CLGtCQUFrQixhQUFhLHNCQUFzQixtQ0FBbUMsV0FBVywyQ0FBMkMsOEJBQThCLG9DQUFvQyxnQ0FBZ0MsMkNBQTJDLGlCQUFpQixJQUFJLEtBQUssNEJBQTRCLGFBQWEsZ0NBQWdDLGlDQUFpQyw4QkFBOEIsNEJBQTRCLEdBQUcsaUJBQWlCLGNBQWMsYUFBYSxrTUFBa00sZ0RBQWdELCtDQUErQywrUkFBK1IsdUNBQXVDLDZDQUE2QyxnQ0FBZ0Msb0dBQW9HLDJHQUEyRyx3Q0FBd0MscUNBQXFDLHVDQUF1QywrQkFBK0IseUNBQXlDLG1EQUFtRCxnQ0FBZ0MscUJBQXFCLCtCQUErQiw4R0FBOEcsNEJBQTRCLG9CQUFvQixvQ0FBb0MsaUJBQWlCLG9DQUFvQyxrSEFBa0gsK0JBQStCLFdBQVcsNENBQTRDLHNDQUFzQyxvQkFBb0IsMEJBQTBCLEdBQUcsNkJBQTZCLCtEQUErRCxvQ0FBb0MsMkJBQTJCLHVDQUF1Qyx3QkFBd0IsZ0NBQWdDLDBFQUEwRSxHQUFHLEdBQUcsZUFBZSxpQkFBaUIsbUJBQW1CLG1CQUFtQixrQkFBa0Isa0RBQWtELGlCQUFpQixpQkFBaUIsbUJBQW1CLFVBQVUsaUJBQWlCLHNCQUFzQiwwRUFBMEUsbUJBQW1CLHVEQUF1RCxpQkFBaUIsZ0RBQWdELGtDQUFrQyxHQUFHLGFBQWEsaURBQWlELHVDQUF1Qyx3QkFBd0IsaUJBQWlCLCtEQUErRCx3QkFBd0IsNEVBQTRFLFFBQVEsR0FBRyxHQUFHLG1CQUFtQixtREFBbUQscUJBQXFCLGNBQWMsaUJBQWlCLElBQUksS0FBSyx5QkFBeUIsc1VBQXNVLGlCQUFpQixxQ0FBcUMsbUJBQW1CLGFBQWEseUdBQXlHLFNBQVMsbUJBQW1CLE1BQU0sb0JBQW9CLDZDQUE2Qyx5QkFBeUIsaUJBQWlCLEdBQUcsaUJBQWlCLHVDQUF1QyxLQUFLLDZDQUE2QyxZQUFZLDBCQUEwQixvQ0FBb0MsR0FBRyxtQkFBbUIsTUFBTSxpQkFBaUIsRUFBRSw4QkFBOEIsc0RBQXNELEdBQUcsK0NBQStDLG1CQUFtQixpQkFBaUIsWUFBWSx5QkFBeUIsd0VBQXdFLGtCQUFrQixnRkFBZ0YsNkJBQTZCLHNEQUFzRCw0REFBNEQsNkJBQTZCLGFBQWEsZ0NBQWdDLHFFQUFxRSxzQ0FBc0MsS0FBSyxhQUFhLG9CQUFvQixvQ0FBb0MsSUFBSSxrQkFBa0IsZ0JBQWdCLFlBQVkseUJBQXlCLFVBQVUsTUFBTSxpRUFBaUUsbUJBQW1CLHFDQUFxQyxtQkFBbUIscUJBQXFCLGdOQUFnTixTQUFTLCtFQUErRSxnQkFBZ0IsMkJBQTJCLGtDQUFrQywyQkFBMkIsUUFBUSxLQUFLLFdBQVcsdUNBQXVDLFdBQVcsR0FBRyxpQkFBaUIsNkJBQTZCLGlCQUFpQiwwRUFBMEUsaUJBQWlCLHdIQUF3SCxlQUFlLDJCQUEyQiwyQkFBMkIsa0JBQWtCLHdCQUF3QixRQUFRLDBCQUEwQixrQ0FBa0MsZ0RBQWdELG9CQUFvQixtQkFBbUIsc0NBQXNDLDhCQUE4QixpQkFBaUIsS0FBSyxZQUFZLDZHQUE2RyxzQkFBc0IsYUFBYSxNQUFNLGFBQWEsbUVBQW1FLHFDQUFxQyxVQUFVLFVBQVUsZ0JBQWdCLHNEQUFzRCxvQkFBb0IscUJBQXFCLHVGQUF1RixjQUFjLDRCQUE0Qix1RUFBdUUsd0ZBQXdGLG9CQUFvQixnREFBZ0QseUZBQXlGLEVBQUUsYUFBYSxFQUFFLDBDQUEwQyw2QkFBNkIscUJBQXFCLHlDQUF5QyxnQkFBZ0Isa0JBQWtCLHNKQUFzSiwyRUFBMkUsZ0hBQWdILE9BQU8sZ0NBQWdDLE9BQU8sS0FBSyxNQUFNLEtBQUssS0FBSyxTQUFTLGtCQUFrQixZQUFZLFNBQVMsdUJBQXVCLHlCQUF5QixxQkFBcUIsV0FBVyxZQUFZLEVBQUUsd0JBQXdCLDBGQUEwRixPQUFPLHVCQUF1QixxQkFBcUIsNENBQTRDLE1BQU0sNkdBQTZHLE1BQU0sdUVBQXVFLDJCQUEyQixnQ0FBZ0MsT0FBTyxxQkFBcUIsV0FBVyxvQ0FBb0Msc0JBQXNCLE9BQU8sd0JBQXdCLG1GQUFtRix3QkFBd0IsaUZBQWlGLDBEQUEwRCxFQUFFLHlCQUF5QixPQUFPLEdBQUcsZUFBZSxrQkFBa0IsMkJBQTJCLHVCQUF1Qiw0RkFBNEYsNkJBQTZCLHlDQUF5QyxxRkFBcUYsUUFBUSxLQUFLLFNBQVMsMkNBQTJDLHVDQUF1QyxLQUFLLFlBQVksR0FBRyx3Q0FBd0Msb0ZBQW9GLHNDQUFzQyxnSkFBZ0osb0NBQW9DLFFBQVEsdUZBQXVGLGtDQUFrQywrQkFBK0IsMENBQTBDLCtFQUErRSxzQ0FBc0MsS0FBSyxZQUFZLEdBQUcsdUJBQXVCLHFNQUFxTSw4Q0FBOEMsZ0JBQWdCLDRCQUE0QixtRkFBbUYsR0FBRyxHQUFHLGlCQUFpQixVQUFVLGlCQUFpQixHQUFHLGlCQUFpQixPQUFPLHFCQUFxQixpQkFBaUIsY0FBYyxPQUFPLGdFQUFnRSxlQUFlLFlBQVksZUFBZSxxQkFBcUIsaUJBQWlCLHFCQUFxQixTQUFTLG9DQUFvQyxnREFBZ0QsS0FBSyxhQUFhLFNBQVMsb0NBQW9DLGdCQUFnQixTQUFTLE9BQU8sNkJBQTZCLCtDQUErQyxlQUFlLFNBQVMsZUFBZSxZQUFZLE9BQU8sR0FBRyx1QkFBdUIsSUFBSSxxQkFBcUIsUUFBUSw0Q0FBNEMsY0FBYyxPQUFPLGVBQWUsb0JBQW9CLE1BQU0sZUFBZSxzQkFBc0IsbUJBQW1CLCtEQUErRCxlQUFlLG1CQUFtQixxQkFBcUIsbU5BQW1OLHFCQUFxQiw0REFBNEQsZUFBZSw4QkFBOEIsbUJBQW1CLG9DQUFvQyxtQkFBbUIsb0JBQW9CLGtIQUFrSCxtQkFBbUIsT0FBTywyRUFBMkUsaUJBQWlCLGtDQUFrQyxxRUFBcUUseUJBQXlCLG1CQUFtQixPQUFPLHlCQUF5QixpQkFBaUIsTUFBTSwyREFBMkQsaUJBQWlCLHdCQUF3QiwwQ0FBMEMsbUJBQW1CLFNBQVMsUUFBUSxPQUFPLFFBQVEsRUFBRSxPQUFPLHVDQUF1QywrQkFBK0IscUJBQXFCLHdCQUF3QixlQUFlLHdEQUF3RCxpQkFBaUIsbUJBQW1CLGVBQWUscUNBQXFDLGVBQWUsOEJBQThCLDJCQUEyQixxSEFBcUgsZUFBZSxxQkFBcUIsTUFBTSwyRkFBMkYsa0NBQWtDLElBQUksZUFBZSxzSEFBc0gsaUJBQWlCLE9BQU8saUNBQWlDLGlCQUFpQixPQUFPLDZCQUE2QixlQUFlLHVDQUF1QyxhQUFhLGlCQUFpQix3QkFBd0IsbUJBQW1CLGlCQUFpQix1QkFBdUIsNkNBQTZDLHVCQUF1QixvRkFBb0YsaUJBQWlCLGdCQUFnQixvRkFBb0YscUJBQXFCLHlDQUF5Qyx3QkFBd0IsbURBQW1ELDBCQUEwQiw0REFBNEQsbUJBQW1CLGtDQUFrQyx1QkFBdUIsc0RBQXNELG1CQUFtQix5Q0FBeUMscUJBQXFCLHVEQUF1RCw2QkFBNkIsZ0RBQWdELDJCQUEyQixpQkFBaUIsMEJBQTBCLGVBQWUsbUJBQW1CLDZCQUE2QixlQUFlLDRCQUE0QixxQkFBcUIsY0FBYyxZQUFZLGtDQUFrQyxpQkFBaUIsZUFBZSxlQUFlLHdCQUF3QixXQUFXLGNBQWMsdUJBQXVCLEtBQUssbURBQW1ELHNCQUFzQixXQUFXLDhCQUE4QixjQUFjLHNCQUFzQixnRkFBZ0YsR0FBRyxZQUFZLElBQUksYUFBYSxjQUFjLG9EQUFvRCxVQUFVLG9CQUFvQiwrSEFBK0gsdUNBQXVDLDBCQUEwQix1RkFBdUYsMEJBQTBCLDJCQUEyQixNQUFNLGVBQWUsa0JBQWtCLHNCQUFzQixVQUFVLGtGQUFrRix3Q0FBd0MsdUJBQXVCLHdDQUF3Qyx3Q0FBd0Msc0ZBQXNGLHVFQUF1RSx1QkFBdUIsMEJBQTBCLEdBQUcsaUJBQWlCLGtDQUFrQyxpQkFBaUIsdUJBQXVCLDRCQUE0Qiw0QkFBNEIsaUJBQWlCLDRMQUE0TCxpQ0FBaUMsZ0JBQWdCLE9BQU8sa0NBQWtDLGdEQUFnRCw4QkFBOEIsOEJBQThCLEdBQUcsaUJBQWlCLDJGQUEyRixpQkFBaUIsa0NBQWtDLEdBQUcsR0FBRyx1QkFBdUIsaURBQWlELHFSQUFxUixzQkFBc0IsZ0VBQWdFLHdCQUF3QixlQUFlLHdFQUF3RSxtQkFBbUIsV0FBVyx3REFBd0Qsd0hBQXdILHVIQUF1SCw0QkFBNEIsb0JBQW9CLEVBQUUscUJBQXFCLEVBQUUsK0NBQStDLGtIQUFrSCwwRUFBMEUsMENBQTBDLE9BQU8sNkJBQTZCLGdDQUFnQyxrQ0FBa0MsK0NBQStDLG1FQUFtRSx5REFBeUQsU0FBUyxpRkFBaUYseUJBQXlCLEdBQUcsaURBQWlELGlGQUFpRiwySkFBMkosb0JBQW9CLE9BQU8sNkJBQTZCLHdCQUF3QixNQUFNLG9CQUFvQixnQkFBZ0IsT0FBTywrQ0FBK0MsS0FBSyw0Q0FBNEMsU0FBUyxtQ0FBbUMsUUFBUSx1V0FBdVcsZ0NBQWdDLFVBQVUscUVBQXFFLHNCQUFzQix3QkFBd0IsaUJBQWlCLHVGQUF1RixzQ0FBc0MsV0FBVyx1QkFBdUIsMENBQTBDLDhCQUE4Qix1Q0FBdUMsMEZBQTBGLGdDQUFnQyxnQkFBZ0Isd0NBQXdDLG1KQUFtSixpREFBaUQsaUNBQWlDLFNBQVMsOEZBQThGLFVBQVUsbURBQW1ELG1IQUFtSCxZQUFZLHFCQUFxQiwrRUFBK0Usb0RBQW9ELGtDQUFrQywyVEFBMlQsdUJBQXVCLDRGQUE0RixJQUFJLDRDQUE0QyxtRUFBbUUseUZBQXlGLHFDQUFxQyxvQ0FBb0MsdUNBQXVDLHVDQUF1QyxZQUFZLHdDQUF3QyxxR0FBcUcsbUJBQW1CLGdDQUFnQyw4SkFBOEoseURBQXlELE9BQU8sd0ZBQXdGLGtEQUFrRCwrQ0FBK0MsTUFBTSxxQ0FBcUMsZ0JBQWdCLDJCQUEyQixNQUFNLDZDQUE2QyxJQUFJLHNCQUFzQixNQUFNLCtCQUErQixxREFBcUQsaURBQWlELDZHQUE2RyxPQUFPLDJHQUEyRyxHQUFHLHVDQUF1QyxRQUFRLGtFQUFrRSxHQUFHLG1DQUFtQyxXQUFXLGdCQUFnQiw4QkFBOEIsaURBQWlELEdBQUcsbURBQW1ELGlDQUFpQyxNQUFNLGNBQWMsc0NBQXNDLG1DQUFtQyxpQ0FBaUMsOENBQThDLGtCQUFrQixPQUFPLFNBQVMsZ0JBQWdCLGdCQUFnQiwyTEFBMkwsc0NBQXNDLGdCQUFnQixpQkFBaUIsc0JBQXNCLDJDQUEyQyxPQUFPLGVBQWUsZ0ZBQWdGLGdEQUFnRCxHQUFHLHFCQUFxQiwyQ0FBMkMsV0FBVyxvQ0FBb0MsMEJBQTBCLGNBQWMsOEJBQThCLDBCQUEwQixHQUFHLGlCQUFpQiwyQkFBMkIsaUJBQWlCLDhCQUE4Qiw0QkFBNEIsR0FBRyxpQkFBaUIsMkJBQTJCLFdBQVcsR0FBRywrQkFBK0IsMkRBQTJELHdDQUF3QywrQkFBK0Isb0NBQW9DLGVBQWUsa0NBQWtDLHlDQUF5QyxzQkFBc0IseUJBQXlCLGlCQUFpQixhQUFhLHVEQUF1RCxHQUFHLEdBQUcsbUJBQW1CLHdDQUF3QyxjQUFjLG9CQUFvQix3SkFBd0osd0RBQXdELDJCQUEyQix3QkFBd0IsOENBQThDLHFDQUFxQyxzQkFBc0IscUJBQXFCLEVBQUUsaUJBQWlCLGtDQUFrQyxHQUFHLHdCQUF3Qiw0RkFBNEYsZUFBZSxnQkFBZ0IsRUFBRSxHQUFHLG1DQUFtQyxLQUFLLHFCQUFxQiwyQkFBMkIseUJBQXlCLCtCQUErQixrQkFBa0IsTUFBTSxJQUFJLGVBQWUsaURBQWlELGFBQWEsNkVBQTZFLFdBQVcsMkVBQTJFLDBDQUEwQyw4REFBOEQsbUJBQW1CLHNKQUFzSiwyQkFBMkIsaUJBQWlCLGdCQUFnQixvQkFBb0Isa0JBQWtCLHFCQUFxQixNQUFNLHFEQUFxRCx1Q0FBdUMsaUJBQWlCLDJCQUEyQixtQkFBbUIsd0JBQXdCLGVBQWUsdUJBQXVCLDBCQUEwQixnQkFBZ0IscUNBQXFDLEtBQUsscUNBQXFDLE1BQU0sMEdBQTBHLGlIQUFpSCxzQkFBc0IsMERBQTBELGdDQUFnQyxvQkFBb0IsSUFBSSx5QkFBeUIsdUJBQXVCLGlHQUFpRyxvQkFBb0Isb0JBQW9CLDBFQUEwRSxXQUFXLE1BQU0sUUFBUSwyQkFBMkIsV0FBVyxhQUFhLEdBQUcsV0FBVyxnQkFBZ0IsYUFBYSw4Q0FBOEMsc0JBQXNCLEdBQUcsWUFBWSxJQUFJLGFBQWEsMkJBQTJCLEdBQUcsWUFBWSxJQUFJLGFBQWEsZ0JBQWdCLFVBQVUsc0JBQXNCLGtCQUFrQixnREFBZ0QsaUJBQWlCLEVBQUUsMlBBQTJQLHVEQUF1RCwrQkFBK0Isd0NBQXdDLHlDQUF5QyxNQUFNLG9EQUFvRCwyS0FBMkssc0JBQXNCLG9DQUFvQyw4RUFBOEUsUUFBUSxtQkFBbUIsd0JBQXdCLG9CQUFvQixzR0FBc0csS0FBSyxhQUFhLHFLQUFxSyxHQUFHLHNEQUFzRCw4REFBOEQsSUFBSSxHQUFHLGlFQUFpRSxzQ0FBc0Msd0lBQXdJLHdCQUF3QixPQUFPLDZDQUE2QyxXQUFXLHdDQUF3QyxRQUFRLDBFQUEwRSxHQUFHLDJDQUEyQyw4QkFBOEIsaUNBQWlDLGdFQUFnRSx1RkFBdUYsNkZBQTZGLHFDQUFxQyxpQkFBaUIsa0JBQWtCLG1CQUFtQixzREFBc0Qsc0RBQXNELElBQUksb0JBQW9CLHFDQUFxQyxpQ0FBaUMsa0NBQWtDLHNDQUFzQyxnR0FBZ0cscUNBQXFDLFFBQVEsOERBQThELCtCQUErQixZQUFZLEdBQUcsa0JBQWtCLGFBQWEsZUFBZSw4QkFBOEIsaUJBQWlCLG9DQUFvQyxRQUFRLDhCQUE4QixLQUFLLHdCQUF3QiwrQkFBK0IsY0FBYyxjQUFjLE9BQU8sZ0JBQWdCLGdCQUFnQixtQkFBbUIsaURBQWlELGtCQUFrQiwwQ0FBMEMsY0FBYyxrRkFBa0YsMEJBQTBCLEdBQUcsaUJBQWlCLGNBQWMsaUJBQWlCLHVCQUF1Qiw0QkFBNEIsZ0JBQWdCLGlCQUFpQix1QkFBdUIscUNBQXFDLEdBQUcsaUJBQWlCLDZDQUE2QyxpQkFBaUIsaUNBQWlDLHFCQUFxQixhQUFhLEdBQUcsVUFBVSxlQUFlLHNDQUFzQyxzREFBc0QsZUFBZSxzQkFBc0IsbUJBQW1CLGFBQWEsK0NBQStDLGlFQUFpRSx1RUFBdUUsa0VBQWtFLHNDQUFzQyxHQUFHLGdEQUFnRCxrREFBa0Qsa0RBQWtELDJDQUEyQyw0QkFBNEIsaUJBQWlCLCtCQUErQixZQUFZLEdBQUcsMEJBQTBCLDBCQUEwQiwwQ0FBMEMsK0NBQStDLElBQUksZ0NBQWdDLEdBQUcsNkJBQTZCLHlCQUF5Qix1Q0FBdUMsSUFBSSxlQUFlLEtBQUssY0FBYyxPQUFPLHNCQUFzQixHQUFHLFlBQVksSUFBSSxhQUFhLGtCQUFrQixHQUFHLFlBQVksSUFBSSxhQUFhLFlBQVksUUFBUSwrQ0FBK0MsWUFBWSxtQkFBbUIsa0ZBQWtGLE1BQU0sdUNBQXVDLDZFQUE2RSwyREFBMkQsZUFBZSxtQkFBbUIsZ0RBQWdELGlDQUFpQyxRQUFRLHlNQUF5TSxhQUFhLGlDQUFpQyxtQ0FBbUMsb0NBQW9DLGdDQUFnQyxvQ0FBb0MsaUNBQWlDLDhFQUE4RSxHQUFHLGtCQUFrQixnUkFBZ1IscUJBQXFCLGtGQUFrRixpQkFBaUIsRUFBRSw4REFBOEQseUJBQXlCLGNBQWMsT0FBTyxJQUFJLDZCQUE2Qiw4QkFBOEIsaUJBQWlCLEdBQUcsaUNBQWlDLCtCQUErQixNQUFNLHVDQUF1QyxvQkFBb0Isa0JBQWtCLEtBQUssZ0NBQWdDLDBCQUEwQixnQkFBZ0IsOEJBQThCLGlCQUFpQixtQkFBbUIsc0JBQXNCLDBEQUEwRCxLQUFLLE1BQU0scURBQXFELEdBQUcsWUFBWSxJQUFJLGFBQWEsY0FBYyxHQUFHLFlBQVksSUFBSSxjQUFjLDZDQUE2QyxnQkFBZ0IsSUFBSSxhQUFhLHlIQUF5SCxhQUFhLFFBQVEsb0JBQW9CLDZCQUE2QixTQUFTLGlCQUFpQixhQUFhLGtCQUFrQixhQUFhLHlCQUF5QixXQUFXLGdCQUFnQixXQUFXLHFDQUFxQywyQ0FBMkMsaVdBQWlXLGtCQUFrQixtQkFBbUIsd0dBQXdHLG9CQUFvQixzSEFBc0gsV0FBVyxnSUFBZ0ksNkJBQTZCLGtDQUFrQywwRUFBMEUsb0NBQW9DLDhCQUE4Qiw4REFBOEQsa0NBQWtDLG9EQUFvRCw4RUFBOEUsK0RBQStELHdCQUF3QixrQkFBa0Isd0JBQXdCLFNBQVMsNEJBQTRCLFlBQVksOEJBQThCLGNBQWMsNEJBQTRCLFNBQVMsMkJBQTJCLG9EQUFvRCxvQ0FBb0MscUNBQXFDLHdCQUF3QixzRUFBc0UsOEJBQThCLDZDQUE2Qyx5Q0FBeUMsb0JBQW9CLFFBQVEsR0FBRyxNQUFNLHlCQUF5QixNQUFNLGdGQUFnRixzQkFBc0IsZ0JBQWdCLHdCQUF3QixlQUFlLDJEQUEyRCwwQkFBMEIsb0JBQW9CLHVCQUF1QixNQUFNLDhDQUE4Qyw2QkFBNkIsT0FBTywyQkFBMkIsTUFBTSxhQUFhLCtCQUErQixhQUFhLEtBQUssaUJBQWlCLGFBQWEsMkJBQTJCLDBCQUEwQixtQ0FBbUMsK0NBQStDLE1BQU0sZ0JBQWdCLGtCQUFrQix5QkFBeUIsa0NBQWtDLGdDQUFnQyxvQkFBb0IseUJBQXlCLHNFQUFzRSwrQ0FBK0MsU0FBUyxXQUFXLHFCQUFxQixTQUFTLHdCQUF3QixNQUFNLHFEQUFxRCxpQ0FBaUMsb0JBQW9CLCtCQUErQixvRUFBb0UsT0FBTyxpREFBaUQsbURBQW1ELFlBQVksS0FBSyxLQUFLLEtBQUssbUJBQW1CLHlCQUF5QixTQUFTLG1DQUFtQyxtQ0FBbUMsaUNBQWlDLG9CQUFvQixtQ0FBbUMsNENBQTRDLDJCQUEyQixTQUFTLDJCQUEyQixJQUFJLDhCQUE4QiwrQ0FBK0Msc0NBQXNDLG1CQUFtQixrR0FBa0csb0VBQW9FLHFDQUFxQyxpQ0FBaUMsZ0NBQWdDLGdCQUFnQixvREFBb0QsR0FBRyxnQ0FBZ0MsbUJBQW1CLGFBQWEsb0JBQW9CLDJDQUEyQyxjQUFjLGdCQUFnQixJQUFJLDJDQUEyQyxNQUFNLDJEQUEyRCxHQUFHLFlBQVksSUFBSSxhQUFhLDhIQUE4SCxzQ0FBc0MseUJBQXlCLCtIQUErSCx3QkFBd0IsMkJBQTJCLGlDQUFpQyxHQUFHLCtCQUErQixhQUFhLDhCQUE4QixNQUFNLDhEQUE4RCxnQkFBZ0Isa0RBQWtELEdBQUcsZ0NBQWdDLGlFQUFpRSwyQkFBMkIsZ0JBQWdCLDZCQUE2QixjQUFjLG1DQUFtQywwQkFBMEIsMkRBQTJELG1CQUFtQiwwRUFBMEUsZ0RBQWdELGVBQWUsTUFBTSxRQUFRLFVBQVUsWUFBWSxJQUFJLGdIQUFnSCxvQkFBb0IsOERBQThELGNBQWMsZ0VBQWdFLHVDQUF1QyxzREFBc0QsZ0NBQWdDLGVBQWUsK0JBQStCLEtBQUssS0FBSyxnQkFBZ0IsMkJBQTJCLElBQUksT0FBTyxJQUFJLFNBQVMscUNBQXFDLDhCQUE4Qix1Q0FBdUMsMEZBQTBGLHlCQUF5QixlQUFlLDZCQUE2QixpQ0FBaUMsd0NBQXdDLHFCQUFxQix1SkFBdUosTUFBTSx5RkFBeUYsSUFBSSxtQ0FBbUMsRUFBRSxXQUFXLGVBQWUsNkJBQTZCLGVBQWUsMkJBQTJCLHFKQUFxSixpQkFBaUIsa0JBQWtCLHFCQUFxQixnQkFBZ0IsK0JBQStCLGFBQWEsOEZBQThGLFdBQVcsR0FBRyxxQkFBcUIsb0NBQW9DLGtCQUFrQixxQkFBcUIsa0JBQWtCLDJCQUEyQixvQ0FBb0MsdUJBQXVCLGtDQUFrQyx1QkFBdUIsb0RBQW9ELGlCQUFpQixPQUFPLGtCQUFrQixVQUFVLG1CQUFtQixvQkFBb0IsVUFBVSxtQkFBbUIsbUJBQW1CLFlBQVkscUJBQXFCLG9CQUFvQixhQUFhLHFCQUFxQixzQkFBc0Isa0JBQWtCLG1DQUFtQyxxQkFBcUIsbUJBQW1CLG1DQUFtQyx3QkFBd0IscUJBQXFCLG1CQUFtQiwrQkFBK0Isc0JBQXNCLGlCQUFpQixtQkFBbUIsaUJBQWlCLG1CQUFtQixJQUFJLCtDQUErQywwQkFBMEIsb0JBQW9CLGtCQUFrQiw0QkFBNEIsOENBQThDLElBQUksc0xBQXNMLGFBQWEsMEJBQTBCLGNBQWMsb0lBQW9JLGtKQUFrSixTQUFTLCtCQUErQixvQkFBb0IsbUVBQW1FLDhCQUE4QiwyREFBMkQsYUFBYSxzQkFBc0Isb0ZBQW9GLDJFQUEyRSwwRUFBMEUsNkJBQTZCLDhCQUE4QixvQkFBb0IsaUNBQWlDLEtBQUssUUFBUSx3Q0FBd0Msa0NBQWtDLHFCQUFxQixtQkFBbUIsMEJBQTBCLE9BQU8sMEJBQTBCLFdBQVcsMEJBQTBCLFFBQVEsbURBQW1ELFNBQVMsWUFBWSx1QkFBdUIseUNBQXlDLDRDQUE0QyxnQ0FBZ0MsMkNBQTJDLDZCQUE2QixNQUFNLGtEQUFrRCxrQ0FBa0Msa0NBQWtDLGdDQUFnQywwQkFBMEIsd0JBQXdCLCtCQUErQixnQ0FBZ0Msb0NBQW9DLDBDQUEwQyx1QkFBdUIsd0JBQXdCLHdDQUF3Qyx3QkFBd0IsbUJBQW1CLDhGQUE4RixJQUFJLCtDQUErQyxVQUFVLHdCQUF3QixzQkFBc0IseUNBQXlDLHNDQUFzQywwQkFBMEIsZ0NBQWdDLGlDQUFpQyxjQUFjLFVBQVUsY0FBYyxhQUFhLE1BQU0sV0FBVyxVQUFVLGNBQWMsd0RBQXdELE9BQU8sMEJBQTBCLFFBQVEsNENBQTRDLFVBQVUsNkJBQTZCLG1CQUFtQiw2QkFBNkIsSUFBSSw4REFBOEQsMEVBQTBFLGdDQUFnQywwREFBMEQsV0FBVyx5Q0FBeUMsTUFBTSw0QkFBNEIsWUFBWSxxQ0FBcUMsTUFBTSx1R0FBdUcsOERBQThELGdDQUFnQywwREFBMEQsV0FBVyxvQkFBb0Isa0JBQWtCLDhCQUE4QixRQUFRLDhCQUE4QixFQUFFLGtEQUFrRCxxQ0FBcUMscUJBQXFCLGlCQUFpQixjQUFjLFNBQVMsY0FBYyxtQkFBbUIsMklBQTJJLE9BQU8sK0RBQStELFlBQVksU0FBUyx1QkFBdUIsVUFBVSxxQkFBcUIsc0JBQXNCLDhCQUE4QixzQkFBc0IsZ0JBQWdCLDZCQUE2Qix5QkFBeUIsbUJBQW1CLEdBQUcsK0JBQStCLDRCQUE0QixtQ0FBbUMsUUFBUSxLQUFLLGNBQWMsZUFBZSxlQUFlLGlCQUFpQixtQkFBbUIsaUJBQWlCLEVBQUUsb0JBQW9CLHFCQUFxQixnQkFBZ0Isa0JBQWtCLGNBQWMsZUFBZSx1RUFBdUUsZ0JBQWdCLFFBQVEsS0FBSyxpQkFBaUIsZ0JBQWdCLHdCQUF3QixZQUFZLHNCQUFzQixpREFBaUQsY0FBYyxtQ0FBbUMsNkRBQTZELEtBQUssaUNBQWlDLHdDQUF3QyxHQUFHLE9BQU8sb0JBQW9CLDhDQUE4QyxzQkFBc0IsY0FBYyxvQkFBb0IsUUFBUSxzR0FBc0csa0JBQWtCLGdCQUFnQixpQkFBaUIsZ0JBQWdCLCtCQUErQixrQkFBa0IseURBQXlELGFBQWEsSUFBSSwwQkFBMEIsbUJBQW1CLHlDQUF5QyxtQkFBbUIsMkdBQTJHLDZLQUE2SyxZQUFZLEtBQUssS0FBSyxrREFBa0QseUZBQXlGLCtCQUErQixhQUFhLHVCQUF1Qix1Q0FBdUMsb0JBQW9CLG1JQUFtSSxZQUFZLGdCQUFnQixzQ0FBc0Msd0JBQXdCLFlBQVksTUFBTSw0QkFBNEIsV0FBVyxpREFBaUQsbUJBQW1CLG1CQUFtQix5Q0FBeUMsc0VBQXNFLGlCQUFpQixNQUFNLG9EQUFvRCxtQkFBbUIsYUFBYSw4Q0FBOEMsMklBQTJJLFFBQVEsdUJBQXVCLDJCQUEyQix3QkFBd0IsMkJBQTJCLHFDQUFxQyxzQkFBc0IscUJBQXFCLG9CQUFvQix5QkFBeUIsSUFBSSxpRUFBaUUsbUJBQW1CLDJDQUEyQyw0QkFBNEIsOENBQThDLGtDQUFrQyw2Q0FBNkMsV0FBVyw2Q0FBNkMsc0JBQXNCLG1DQUFtQyx3SEFBd0gsdUJBQXVCLE9BQU8sd0JBQXdCLHdGQUF3RixvQ0FBb0MsbUNBQW1DLDRCQUE0Qiw4REFBOEQseUJBQXlCLEdBQUcscUNBQXFDLGlDQUFpQywrQkFBK0IsR0FBRyx3Q0FBd0MseUdBQXlHLGFBQWEsaUJBQWlCLEtBQUssV0FBVyxLQUFLLG9CQUFvQiw4RkFBOEYsTUFBTSx1REFBdUQsb0JBQW9CLGlEQUFpRCw4REFBOEQsMEJBQTBCLDJFQUEyRSxrQ0FBa0MsMEZBQTBGLHFDQUFxQyxzRUFBc0Usb0NBQW9DLHVCQUF1QixrQkFBa0IseUNBQXlDLHVCQUF1QixxQkFBcUIsa0NBQWtDLHNDQUFzQyx5RUFBeUUsaUJBQWlCLGdCQUFnQixpQkFBaUIsZ0JBQWdCLHVFQUF1RSxvQkFBb0IsWUFBWSxvQkFBb0IsY0FBYywyQkFBMkIsV0FBVyxxRkFBcUYscUJBQXFCLHVDQUF1QywwQkFBMEIsV0FBVyxnQ0FBZ0MsVUFBVSxlQUFlLElBQUksbUNBQW1DLElBQUksTUFBTSxXQUFXLGlEQUFpRCxpSEFBaUgsbUhBQW1ILGdGQUFnRix1QkFBdUIsTUFBTSxrQ0FBa0Msd0NBQXdDLFFBQVEsa0VBQWtFLGlKQUFpSixNQUFNLHdFQUF3RSxPQUFPLEtBQUssK0JBQStCLG1EQUFtRCx1QkFBdUIsc0RBQXNELHNCQUFzQiwrQkFBK0Isb0NBQW9DLHVCQUF1QixzQkFBc0IsbUJBQW1CLGNBQWMsZUFBZSwyQkFBMkIsOEJBQThCLFlBQVksK0NBQStDLGFBQWEsZUFBZSxvQkFBb0IsYUFBYSxHQUFHLDZCQUE2QixtQ0FBbUMsd0JBQXdCLHFCQUFxQixNQUFNLFNBQVMsaUJBQWlCLHdCQUF3Qiw4QkFBOEIsT0FBTyxpQkFBaUIsMkJBQTJCLG1CQUFtQix5QkFBeUIsd0JBQXdCLHlCQUF5QixxQkFBcUIsR0FBRyxrQkFBa0IsOEJBQThCLFdBQVcsSUFBSSxHQUFHLGVBQWUsaUNBQWlDLEtBQUssc0JBQXNCLG1CQUFtQixnQ0FBZ0Msa0JBQWtCLGNBQWMsaUJBQWlCLG1CQUFtQixzQkFBc0Isd0dBQXdHLGVBQWUsS0FBSyxnQkFBZ0IscUJBQXFCLHVDQUF1QyxvREFBb0QsdUJBQXVCLFlBQVksR0FBRyxpQkFBaUIsb0JBQW9CLFNBQVMsR0FBRyx3QkFBd0IsV0FBVyx1QkFBdUIsSUFBSSxvQkFBb0IsWUFBWSxHQUFHLGNBQWMsT0FBTyx5RUFBeUUsbUJBQW1CLGtCQUFrQixpQkFBaUIsaUJBQWlCLGdFQUFnRSx1RkFBdUYsYUFBYSxjQUFjLE9BQU8sdUtBQXVLLGFBQWEsY0FBYywyQkFBMkIsc0JBQXNCLDJCQUEyQixhQUFhLHFCQUFxQixNQUFNLFNBQVMsOEJBQThCLGVBQWUscUJBQXFCLEdBQUcsa0JBQWtCLGdDQUFnQyxRQUFRLDBCQUEwQixFQUFFLEdBQUcsaUJBQWlCLDZKQUE2SixlQUFlLDhEQUE4RCxNQUFNLEdBQUcsaUJBQWlCLHVCQUF1QixhQUFhLDRCQUE0QixnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsa0JBQWtCLG1DQUFtQyw4QkFBOEIseURBQXlELGNBQWMsaUJBQWlCLFNBQVMsa0JBQWtCLGFBQWEsK0JBQStCLHlDQUF5QyxXQUFXLGdEQUFnRCxzQ0FBc0MsaUNBQWlDLDRDQUE0Qyw0QkFBNEIsR0FBRywyQ0FBMkMsK0RBQStELHNCQUFzQixXQUFXLEdBQUcsaUJBQWlCLGNBQWMsZUFBZSxTQUFTLFFBQVEsa0JBQWtCLCtCQUErQixPQUFPLEdBQUcsWUFBWSxJQUFJLGNBQWMsNEJBQTRCLDhCQUE4Qix3Q0FBd0Msb0JBQW9CLHNFQUFzRSw0QkFBNEIsb0NBQW9DLGtGQUFrRix3QkFBd0IsaUJBQWlCLDZCQUE2QixLQUFLLFNBQVMsb0RBQW9ELGlCQUFpQixzQkFBc0IsT0FBTyw4QkFBOEIsc0pBQXNKLDZEQUE2RCxzQkFBc0Isb0JBQW9CLDZCQUE2QixtQkFBbUIsT0FBTyxzQkFBc0IseUJBQXlCLGlDQUFpQyxTQUFTLHlDQUF5QywrQkFBK0IsS0FBSywwRUFBMEUsaUJBQWlCLHVCQUF1QixZQUFZLFdBQVcsR0FBRyx1RkFBdUYsMkJBQTJCLG1FQUFtRSxJQUFJLElBQUkseUZBQXlGLElBQUksS0FBSyxXQUFXLHVDQUF1QyxnREFBZ0Qsc0JBQXNCLGVBQWUsTUFBTSxtQkFBbUIsaUNBQWlDLGlEQUFpRCx3QkFBd0IsdUNBQXVDLGlCQUFpQixHQUFHLHVEQUF1RCxrQ0FBa0MsT0FBTyx3QkFBd0IsWUFBWSxzQ0FBc0MsK0NBQStDLElBQUksMkVBQTJFLHlCQUF5QixJQUFJLHVJQUF1SSxnSEFBZ0gsV0FBVyw0Q0FBNEMsaUJBQWlCLCtCQUErQiw2QkFBNkIsaUJBQWlCLDhDQUE4QyxHQUFHLGtDQUFrQyxPQUFPLDZCQUE2QixJQUFJLDRCQUE0Qiw0Q0FBNEMsMkJBQTJCLDZDQUE2QyxrQkFBa0IsR0FBRyx1RkFBdUYsU0FBUyw0QkFBNEIsbUNBQW1DLFFBQVEsSUFBSSw2UUFBNlEsZUFBZSxzQkFBc0IsU0FBUywrTkFBK04sWUFBWSxpQ0FBaUMsdUJBQXVCLGlCQUFpQixtQkFBbUIsc0JBQXNCLHVFQUF1RSxxQkFBcUIsOEVBQThFLEVBQUUsMENBQTBDLHFEQUFxRCxxQkFBcUIsV0FBVyxRQUFRLGVBQWUsRUFBRSxlQUFlLEVBQUUsR0FBRywrQkFBK0IsaUJBQWlCLGNBQWMsOEJBQThCLFlBQVkscUJBQXFCLHNCQUFzQixNQUFNLEVBQUUsb0JBQW9CLG1CQUFtQixnQkFBZ0IsSUFBSSwwQ0FBMEMsMEJBQTBCLGlWQUFpVixpQ0FBaUMsK0NBQStDLGFBQWEsZ0NBQWdDLFlBQVkscUJBQXFCLGdCQUFnQix1RkFBdUYsdUJBQXVCLGtCQUFrQixPQUFPLDJIQUEySCx3QkFBd0IsV0FBVyxxQkFBcUIsa0JBQWtCLGdCQUFnQixRQUFRLDJCQUEyQiwwQkFBMEIsaUNBQWlDLGlCQUFpQixtQkFBbUIsd0JBQXdCLGVBQWUsd0JBQXdCLGlCQUFpQixJQUFJLGtDQUFrQyxTQUFTLEdBQUcsbUVBQW1FLGdCQUFnQixnRUFBZ0UsaUVBQWlFLDBCQUEwQixxQkFBcUIsZ0JBQWdCLEdBQUcscURBQXFELGtCQUFrQiwyQkFBMkIsaUJBQWlCLEVBQUUsc0VBQXNFLDZCQUE2QiwrQkFBK0Isc0ZBQXNGLDJDQUEyQyxLQUFLLFdBQVcsWUFBWSxHQUFHLHNDQUFzQyw0QkFBNEIsS0FBSyw2Q0FBNkMsMEJBQTBCLCtCQUErQixvREFBb0QsU0FBUyxHQUFHLFNBQVMsZ0NBQWdDLG1DQUFtQyxnQkFBZ0IscUNBQXFDLGdCQUFnQixzQkFBc0IsV0FBVyx5QkFBeUIsR0FBRyxTQUFTLG9CQUFvQixjQUFjLHNDQUFzQyxTQUFTLEVBQUUsNERBQTRELHlCQUF5QixZQUFZLGtCQUFrQiwwQ0FBMEMsdUNBQXVDLGFBQWEsOEJBQThCLGNBQWMsS0FBSyxtQkFBbUIsb0JBQW9CLGlGQUFpRix3QkFBd0Isd0NBQXdDLHlCQUF5QixzQ0FBc0MsbUJBQW1CLHVFQUF1RSxvQkFBb0IsbUJBQW1CLGtDQUFrQyxxQkFBcUIsTUFBTSxnRUFBZ0UsSUFBSSxLQUFLLFdBQVcsbUNBQW1DLE9BQU8sU0FBUyxhQUFhLFlBQVksS0FBSyxJQUFJLDRCQUE0QixXQUFXLDRCQUE0QixzRUFBc0UsR0FBRyxJQUFJLDRCQUE0QiwwQkFBMEIsSUFBSSw0QkFBNEIsdUJBQXVCLHVCQUF1QixHQUFHLElBQUksZ0JBQWdCLHVCQUF1QixlQUFlLDRHQUE0RyxjQUFjLG1CQUFtQixtRUFBbUUsVUFBVSxnQkFBZ0IsY0FBYyw4QkFBOEIsRUFBRSxrQkFBa0IsZ0JBQWdCLGVBQWUsaWRBQWlkLHlJQUF5SSxjQUFjLHdCQUF3QixpQkFBaUIsTUFBTSxFQUFFLFdBQVcscUJBQXFCLGNBQWMsd0JBQXdCLGlCQUFpQixNQUFNLEVBQUUsV0FBVyxxQkFBcUIsY0FBYyx3QkFBd0IsaUJBQWlCLE1BQU0sRUFBRSxXQUFXLHFCQUFxQixnQkFBZ0IsdUJBQXVCLElBQUksNkNBQTZDLFNBQVMsZ0JBQWdCLHFCQUFxQiwrSUFBK0ksZ0JBQWdCLG9CQUFvQiwyQkFBMkIsTUFBTSxtQkFBbUIsNkJBQTZCLGtCQUFrQix3QkFBd0IsOERBQThELGlCQUFpQixTQUFTLDhDQUE4QyxXQUFXLFVBQVUsU0FBUyxRQUFRLDBCQUEwQixZQUFZLElBQUksaUJBQWlCLFVBQVUsSUFBSSxZQUFZLFdBQVcsU0FBUyxLQUFLLGFBQWEsZ0JBQWdCLDRGQUE0RixpQkFBaUIsbURBQW1ELDRCQUE0QixzQkFBc0IsNkJBQTZCLGlDQUFpQyxjQUFjLGVBQWUsd0NBQXdDLDZCQUE2QiwyQkFBMkIsZ0NBQWdDLDRDQUE0Qyw2QkFBNkIsb0JBQW9CLE1BQU0sV0FBVyxzQkFBc0IsK0JBQStCLDZCQUE2QixvQkFBb0IsbUNBQW1DLCtCQUErQiwrQ0FBK0MsOEJBQThCLGlCQUFpQixnQ0FBZ0MsNkJBQTZCLHNEQUFzRCw2QkFBNkIsNkJBQTZCLDBCQUEwQiw2QkFBNkIsNkJBQTZCLCtCQUErQiw2QkFBNkIsd0NBQXdDLDhCQUE4QixlQUFlLHVDQUF1QyxnQ0FBZ0MsMkJBQTJCLDZCQUE2Qix3QkFBd0IsNkJBQTZCLHdCQUF3QiwrQkFBK0IsK0JBQStCLHVCQUF1QixzQkFBc0IsTUFBTSxzQkFBc0IsNDNCQUE0M0IseURBQXlELDhCQUE4Qiw2U0FBNlMsa0RBQWtELCtDQUErQyxzR0FBc0csaUNBQWlDLE1BQU0sYUFBYSxPQUFPLGd6QkFBZ3pCLEVBQUUsa3ZCQUFrdkIsRUFBRSxzWUFBc1ksc0pBQXNKLFVBQVUsNEpBQTRKLFFBQVEsc0VBQXNFLHVSQUF1UixJQUFJLG9GQUFvRixXQUFXLHNIQUFzSCxtQkFBbUIsaUJBQWlCLHdCQUF3Qiw2QkFBNkIsa0NBQWtDLHVDQUF1QyxvQkFBb0IscUJBQXFCLGtDQUFrQyxNQUFNLEVBQUUsV0FBVyxjQUFjLFNBQVMsaUJBQWlCLGtDQUFrQyx3QkFBd0IsRUFBRSxTQUFTLGlCQUFpQiw2QkFBNkIsc0JBQXNCLEVBQUUsU0FBUyxpQkFBaUIsa0NBQWtDLE1BQU0sMEJBQTBCLFNBQVMsaUJBQWlCLDJDQUEyQyxNQUFNLEVBQUUsV0FBVyxxQkFBcUIsU0FBUyxpQkFBaUIsMENBQTBDLG1CQUFtQixrQ0FBa0MsTUFBTSx1QkFBdUIsU0FBUyxpQkFBaUIsNkNBQTZDLE1BQU0sa0JBQWtCLFNBQVMsaUJBQWlCLG1DQUFtQyxNQUFNLGFBQWEsU0FBUyxxQkFBcUIsOEJBQThCLHFCQUFxQixNQUFNLGlCQUFpQixTQUFTLHFCQUFxQix5QkFBeUIscUJBQXFCLElBQUksaUJBQWlCLFNBQVMsaUJBQWlCLGtDQUFrQyxNQUFNLHlCQUF5QixTQUFTLG9CQUFvQixtQkFBbUIsTUFBTSw0QkFBNEIsMEJBQTBCLEtBQUsscUJBQXFCLGdDQUFnQyxZQUFZLHlCQUF5QixTQUFTLG1CQUFtQiw0QkFBNEIseUJBQXlCLE1BQU0sc0JBQXNCLFNBQVMsbUJBQW1CLHFCQUFxQix5QkFBeUIsTUFBTSx1QkFBdUIsU0FBUyxlQUFlLFlBQVksaUJBQWlCLHlCQUF5QixxQkFBcUIsZUFBZSxtQkFBbUIsdUJBQXVCLGVBQWUsbUJBQW1CLHVCQUF1Qix1QkFBdUIsNEJBQTRCLHdCQUF3QixLQUFLLGlCQUFpQiwwQkFBMEIsTUFBTSxFQUFFLGNBQWMsdUJBQXVCLFNBQVMsaUJBQWlCLHdCQUF3QixNQUFNLFdBQVcsU0FBUyxlQUFlLDZDQUE2QyxlQUFlLG1CQUFtQixhQUFhLGlCQUFpQix5QkFBeUIsWUFBWSxHQUFHLGlCQUFpQixnQkFBZ0IsaUJBQWlCLHdCQUF3Qix1QkFBdUIsRUFBRSxTQUFTLGlCQUFpQixtQkFBbUIscUJBQXFCLEVBQUUsU0FBUyxXQUFXLDhuQ0FBOG5DLFNBQVMsVUFBVSxXQUFXLFdBQVcsYUFBYSxZQUFZLEVBQUUsRUFBRSxlQUFlLGlCQUFpQixlQUFlLGtCQUFrQixlQUFlLHlCQUF5QixnQ0FBZ0MsYUFBYSxLQUFLLGlCQUFpQixtQkFBbUIsZ0JBQWdCLGlCQUFpQixpQ0FBaUMsTUFBTSxFQUFFLFdBQVcsZ0NBQWdDLFNBQVMsZUFBZSx5QkFBeUIsOEJBQThCLFNBQVMsS0FBSyxlQUFlLHlCQUF5Qix5QkFBeUIsV0FBVyxLQUFLLFNBQVMsVUFBVSxlQUFlLHlCQUF5Qix1QkFBdUIsZ0JBQWdCLG1CQUFtQixJQUFJLGVBQWUsbUJBQW1CLDBCQUEwQixFQUFFLFNBQVMsV0FBVyxNQUFNLFdBQVcsV0FBVyxhQUFhLFlBQVksTUFBTSxtQkFBbUIsa3ZCQUFrdkIsSUFBSSw4QkFBOEIsV0FBVyxNQUFNLElBQUksV0FBVyxnY0FBZ2MsK0dBQStHLGVBQWUsc0NBQXNDLDRCQUE0Qix5Q0FBeUMsaUJBQWlCLGtCQUFrQixjQUFjLG1CQUFtQixtQkFBbUIsbUJBQW1CLGNBQWMsWUFBWSx3QkFBd0IsR0FBRyxlQUFlLGlCQUFpQiw2RkFBNkYsZUFBZSx3SUFBd0ksZUFBZSw4QkFBOEIsaUJBQWlCLE1BQU0sRUFBRSxXQUFXLHFCQUFxQixlQUFlLDhCQUE4QixpQkFBaUIsTUFBTSxFQUFFLFdBQVcscUJBQXFCLGVBQWUsOEJBQThCLGlCQUFpQixNQUFNLEVBQUUsV0FBVyxxQkFBcUIsZUFBZSw4QkFBOEIseUJBQXlCLE1BQU0sZ0JBQWdCLGVBQWUsOEJBQThCLGlCQUFpQixpQkFBaUIsMkdBQTJHLDBKQUEwSixTQUFTLGVBQWUsZUFBZSx3QkFBd0IsaUJBQWlCLGtDQUFrQyxlQUFlLGlCQUFpQixtQkFBbUIsa0RBQWtELG1CQUFtQixXQUFXLGtEQUFrRCxpQkFBaUIsbUJBQW1CLElBQUksMkJBQTJCLFNBQVMscUJBQXFCLDZCQUE2QixjQUFjLEtBQUssaUJBQWlCLHdCQUF3QixtQkFBbUIsMkJBQTJCLGtEQUFrRCxTQUFTLGlCQUFpQix5Q0FBeUMsTUFBTSxxQkFBcUIsU0FBUyxtQkFBbUIseURBQXlELHlCQUF5Qix3QkFBd0IsMkNBQTJDLG1CQUFtQixZQUFZLE1BQU0saUJBQWlCLHNDQUFzQyx5RkFBeUYsc0JBQXNCLEtBQUsseUJBQXlCLHdCQUF3QixzQkFBc0IsWUFBWSxpQ0FBaUMscUJBQXFCLGlCQUFpQix3QkFBd0IscUJBQXFCLHFCQUFxQixZQUFZLEtBQUssd0JBQXdCLGtCQUFrQixzQkFBc0IsVUFBVSxvQkFBb0IsK0JBQStCLDRCQUE0Qiw4QkFBOEIsc0RBQXNELE1BQU0sOEVBQThFLG9CQUFvQiw4QkFBOEIsMEJBQTBCLDZDQUE2QyxpQ0FBaUMsSUFBSSxvQkFBb0Isd0NBQXdDLFNBQVMsY0FBYyxlQUFlLGNBQWMsd0NBQXdDLHVCQUF1QixtQ0FBbUMseUJBQXlCLEdBQUcsaUNBQWlDLDhCQUE4QixzQ0FBc0MsS0FBSyxtQkFBbUIsZUFBZSxvQkFBb0IsWUFBWSxJQUFJLEVBQUUseUJBQXlCLG9DQUFvQyxTQUFTLG1CQUFtQix3Q0FBd0Msc0JBQXNCLGFBQWEsS0FBSyxxQkFBcUIsOENBQThDLGVBQWUsd0VBQXdFLE9BQU8sTUFBTSxFQUFFLDRCQUE0QiwyQkFBMkIsWUFBWSxJQUFJLHdCQUF3QixVQUFVLHlCQUF5QixTQUFTLHFCQUFxQix1REFBdUQsTUFBTSx5TUFBeU0sNEJBQTRCLGFBQWEsaUNBQWlDLDJDQUEyQywwQkFBMEIsOEJBQThCLG9CQUFvQixPQUFPLFdBQVcsaUJBQWlCLDJCQUEyQiw4QkFBOEIsb0JBQW9CLGdDQUFnQyxnQ0FBZ0Msb0JBQW9CLDBEQUEwRCwrQkFBK0IsNkJBQTZCLGlDQUFpQyw4QkFBOEIsbUVBQW1FLDhCQUE4Qiw4QkFBOEIscUJBQXFCLDhCQUE4Qiw4QkFBOEIsZ0NBQWdDLDhCQUE4QixzREFBc0QsK0JBQStCLDJCQUEyQiwyQ0FBMkMsaUNBQWlDLDJCQUEyQiwwQkFBMEIsOEJBQThCLHlCQUF5Qiw4QkFBOEIseUJBQXlCLGdDQUFnQywwQkFBMEIsZ0RBQWdELGdEQUFnRCxtQ0FBbUMsOEJBQThCLDRCQUE0QiwrQkFBK0IsaUNBQWlDLGlDQUFpQyxrQ0FBa0MsMEJBQTBCLDhCQUE4Qiw0QkFBNEIsOEJBQThCLDRCQUE0QixnQ0FBZ0Msb0JBQW9CLG9CQUFvQixpQkFBaUIsa0VBQWtFLDBCQUEwQix5Q0FBeUMsMkJBQTJCLGlCQUFpQixTQUFTLDZCQUE2QixvQkFBb0IsS0FBSyxtQkFBbUIsd0JBQXdCLE1BQU0sRUFBRSxrQkFBa0Isb0RBQW9ELFNBQVMsaUJBQWlCLFNBQVMsNkJBQTZCLG9CQUFvQixLQUFLLHVCQUF1QixvQkFBb0Isd0JBQXdCLE1BQU0sRUFBRSxXQUFXLHlEQUF5RCxTQUFTLHNCQUFzQixpQkFBaUIscUJBQXFCLGlCQUFpQixxQkFBcUIsaUJBQWlCLHlCQUF5QixnQkFBZ0IsR0FBRyxpQkFBaUIsaUNBQWlDLGFBQWEsaUJBQWlCLG1CQUFtQixtQkFBbUIsV0FBVywwQkFBMEIsZUFBZSxzRkFBc0YsNEJBQTRCLElBQUksUUFBUSxTQUFTLFVBQVUsaUJBQWlCLHFDQUFxQyxnQkFBZ0Isa0JBQWtCLElBQUksaUJBQWlCLFdBQVcsaUJBQWlCLDZCQUE2QixpQkFBaUIsMkJBQTJCLG1CQUFtQixpRUFBaUUsSUFBSSxFQUFFLFdBQVcsMEZBQTBGLE9BQU8sZ0JBQWdCLE9BQU8sa0JBQWtCLEVBQUUsc0JBQXNCLHlDQUF5QyxRQUFRLElBQUksRUFBRSxXQUFXLHVDQUF1Qyx3QkFBd0IsU0FBUyxtQkFBbUIsK0NBQStDLDJCQUEyQixlQUFlLHVCQUF1Qix1QkFBdUIsaUZBQWlGLHVGQUF1RixhQUFhLG1CQUFtQixVQUFVLCtFQUErRSxVQUFVLDBFQUEwRSxzQkFBc0Isb0VBQW9FLHNDQUFzQyxtREFBbUQsNkJBQTZCLGdCQUFnQixpQkFBaUIseUNBQXlDLGVBQWUsaUJBQWlCLGdCQUFnQiw0QkFBNEIscUJBQXFCLDJDQUEyQyxTQUFTLGdCQUFnQixXQUFXLGdFQUFnRSxTQUFTLG9DQUFvQyxtQ0FBbUMsZ0RBQWdELDZCQUE2QixnQ0FBZ0MsWUFBWSxJQUFJLEVBQUUsV0FBVyxxQ0FBcUMsMEJBQTBCLDBCQUEwQixTQUFTLHNCQUFzQixZQUFZLE1BQU0sRUFBRSx1QkFBdUIsMkNBQTJDLG1DQUFtQyxLQUFLLE1BQU0sd0JBQXdCLFVBQVUsb0NBQW9DLHFJQUFxSSxpQ0FBaUMsZUFBZSxnQkFBZ0IscUJBQXFCLHdCQUF3QixvQkFBb0IsWUFBWSxJQUFJLEVBQUUsV0FBVywrQ0FBK0MsS0FBSyxNQUFNLEVBQUUsZ0NBQWdDLFlBQVksNkJBQTZCLEtBQUssYUFBYSwwQkFBMEIsc0NBQXNDLFNBQVMsZUFBZSw4REFBOEQsTUFBTSxlQUFlLDJGQUEyRixlQUFlLHVCQUF1QixTQUFTLDZEQUE2RCxTQUFTLGlCQUFpQixXQUFXLGlCQUFpQixnQ0FBZ0MsNkJBQTZCLGdCQUFnQixLQUFLLGVBQWUsWUFBWSw0REFBNEQseUJBQXlCLGlCQUFpQiw0Q0FBNEMsY0FBYyx1Q0FBdUMsdUJBQXVCLDJCQUEyQixnREFBZ0QsbUNBQW1DLGVBQWUsS0FBSyxvQ0FBb0MsTUFBTSx3Q0FBd0MsZ0pBQWdKLG9EQUFvRCxpQkFBaUIsS0FBSyxrQ0FBa0Msd0JBQXdCLE1BQU0saUJBQWlCLGVBQWUsb0NBQW9DLG1CQUFtQiw2QkFBNkIseUJBQXlCLGlDQUFpQyxHQUFHLFFBQVEsU0FBUyxpQkFBaUIsNEJBQTRCLHdCQUF3QixZQUFZLEdBQUcsT0FBTyw4QkFBOEIsR0FBRyxxQkFBcUIsZUFBZSwwQkFBMEIsdUJBQXVCLDZEQUE2RCxNQUFNLEVBQUUsb0JBQW9CLHlDQUF5Qyx1QkFBdUIsUUFBUSxHQUFHLElBQUksaUJBQWlCLFNBQVMsSUFBSSxtQkFBbUIsNkJBQTZCLE1BQU0sRUFBRSxxQkFBcUIsd0JBQXdCLFNBQVMscUJBQXFCLGtDQUFrQyx3Q0FBd0MsTUFBTSwrQkFBK0Isa0JBQWtCLHNDQUFzQyxTQUFTLGlCQUFpQiw2QkFBNkIsSUFBSSxFQUFFLFdBQVcsZ0JBQWdCLFFBQVEsOEJBQThCLFNBQVMsaUJBQWlCLDBCQUEwQixpQkFBaUIsU0FBUyx5QkFBeUIsR0FBRyxnQ0FBZ0MsU0FBUyxTQUFTLGlCQUFpQiwyQkFBMkIsZUFBZSxpQkFBaUIsaUJBQWlCLFlBQVksOEJBQThCLHFCQUFxQixtQkFBbUIsNENBQTRDLGVBQWUsRUFBRSxtQkFBbUIsZ0VBQWdFLFNBQVMsV0FBVyxpREFBaUQsRUFBRSxpQkFBaUIsU0FBUyx3QkFBd0IscUJBQXFCLHdCQUF3Qix3QkFBd0Isc0RBQXNELEVBQUUsSUFBSSxlQUFlLGlCQUFpQixtQkFBbUIsb0JBQW9CLGlFQUFpRSxlQUFlLE1BQU0sYUFBYSxTQUFTLGlCQUFpQixNQUFNLDZCQUE2QixvQkFBb0IsT0FBTyxtQkFBbUIsNkJBQTZCLDRDQUE0QyxLQUFLLElBQUksRUFBRSxxQkFBcUIseUNBQXlDLFNBQVMsb0JBQW9CLHFCQUFxQiw2QkFBNkIsa0JBQWtCLGlEQUFpRCxJQUFJLEVBQUUsOERBQThELGdCQUFnQiw0RUFBNEUsWUFBWSx3QkFBd0IsaUJBQWlCLGlDQUFpQyxNQUFNLEVBQUUsc0JBQXNCLGlCQUFpQixRQUFRLGtCQUFrQixTQUFTLGVBQWUsc0NBQXNDLGVBQWUsK0JBQStCLDRCQUE0QixpQ0FBaUMsV0FBVywrQkFBK0IsbUJBQW1CLHVDQUF1QyxlQUFlLGdCQUFnQixtQkFBbUIsa0JBQWtCLG1CQUFtQixjQUFjLE9BQU8sTUFBTSxFQUFFLHNCQUFzQiwyQkFBMkIsbUJBQW1CLElBQUksd0JBQXdCLHVCQUF1Qiw0Q0FBNEMsU0FBUyxpQkFBaUIsc0RBQXNELHFCQUFxQiw0QkFBNEIscUJBQXFCLDRCQUE0QiwyQkFBMkIsRUFBRSxpREFBaUQsaUJBQWlCLFFBQVEsMERBQTBELDhDQUE4QyxLQUFLLG1CQUFtQixlQUFlLDRCQUE0QixvQkFBb0IsTUFBTSxxQkFBcUIsTUFBTSxtQ0FBbUMsdUJBQXVCLG1CQUFtQix3Q0FBd0MsTUFBTSxFQUFFLGlCQUFpQixZQUFZLFNBQVMsZUFBZSxrQkFBa0IsZUFBZSxnQ0FBZ0MsaUJBQWlCLHFDQUFxQyxVQUFVLG1CQUFtQixlQUFlLHdDQUF3Qyx1QkFBdUIsMkJBQTJCLGlCQUFpQixzQkFBc0IsK0NBQStDLG1CQUFtQixlQUFlLHNDQUFzQyxrQ0FBa0MsaUJBQWlCLDhCQUE4QixrREFBa0QsaUJBQWlCLFVBQVUsd0VBQXdFLGlFQUFpRSxpRUFBaUUsU0FBUyxxQkFBcUIsNkVBQTZFLE1BQU0sV0FBVyxLQUFLLE1BQU0sMEJBQTBCLEtBQUssSUFBSSxlQUFlLFNBQVMscUJBQXFCLGtGQUFrRixNQUFNLFdBQVcsWUFBWSxNQUFNLGFBQWEsS0FBSyxNQUFNLDhCQUE4QixTQUFTLGlCQUFpQixvQkFBb0IsZ0JBQWdCLE1BQU0sV0FBVyxTQUFTLHFCQUFxQixTQUFTLFFBQVEsRUFBRSx3QkFBd0IsTUFBTSxFQUFFLG9DQUFvQyxzQ0FBc0MsU0FBUyxpQkFBaUIscUJBQXFCLDZCQUE2Qix5QkFBeUIsZUFBZSx5QkFBeUIsZ0RBQWdELDZGQUE2RixNQUFNLEVBQUUsV0FBVyxjQUFjLFNBQVMsR0FBRyxpQkFBaUIscUJBQXFCLG9CQUFvQix3QkFBd0Isb0NBQW9DLGdDQUFnQyxFQUFFLFVBQVUsZUFBZSx1QkFBdUIsdUNBQXVDLElBQUksRUFBRSxpQkFBaUIsMEJBQTBCLFVBQVUsZUFBZSxtQkFBbUIsK0VBQStFLGlCQUFpQixlQUFlLG1CQUFtQiwwQ0FBMEMsZUFBZSxrQkFBa0IsZ0JBQWdCLGlCQUFpQixvQkFBb0IsMEJBQTBCLCtCQUErQixvQ0FBb0MseUNBQXlDLDhDQUE4QyxtREFBbUQsd0RBQXdELHFDQUFxQyxrQkFBa0IsZUFBZSx1QkFBdUIsWUFBWSxXQUFXLGNBQWMsc0JBQXNCLG9CQUFvQixlQUFlLDJCQUEyQixlQUFlLHVCQUF1Qix1Q0FBdUMsbUJBQW1CLElBQUksRUFBRSxXQUFXLHdDQUF3QywrQ0FBK0MsWUFBWSxNQUFNLEVBQUUsd0NBQXdDLDhHQUE4RyxrQkFBa0IsdUJBQXVCLG1EQUFtRCxxQ0FBcUMsTUFBTSxxQkFBcUIsVUFBVSxHQUFHLGlDQUFpQyxpREFBaUQsb0JBQW9CLHNDQUFzQyxJQUFJLG1CQUFtQixpQ0FBaUMsdUJBQXVCLElBQUksZUFBZSxTQUFTLE1BQU0sc0RBQXNELGNBQWMsOENBQThDLDBCQUEwQixvQ0FBb0MsNENBQTRDLElBQUksRUFBRSxXQUFXLG9CQUFvQixTQUFTLDhHQUE4RyxpQkFBaUIscUJBQXFCLHlCQUF5Qiw2QkFBNkIsY0FBYyxLQUFLLFlBQVksR0FBRyxpQkFBaUIscUJBQXFCLE1BQU0seUJBQXlCLHVCQUF1QixrQkFBa0Isb0ZBQW9GLFVBQVUsZUFBZSx1QkFBdUIsd0NBQXdDLFdBQVcsd0JBQXdCLGlCQUFpQixHQUFHLEdBQUcsR0FBRyxpQkFBaUIsaUNBQWlDLDBCQUEwQix3QkFBd0IsaURBQWlELGVBQWUsdUJBQXVCLG1HQUFtRyw2Q0FBNkMsSUFBSSxtQkFBbUIsU0FBUyxnQ0FBZ0MsZUFBZSxxQkFBcUIsd0VBQXdFLGlDQUFpQyxVQUFVLG9DQUFvQywyREFBMkQsZ0RBQWdELGVBQWUsWUFBWSxxQkFBcUIsK0NBQStDLDZCQUE2Qix5RUFBeUUsYUFBYSxpREFBaUQsaUJBQWlCLElBQUksZUFBZSxtQkFBbUIsWUFBWSxtQ0FBbUMseUJBQXlCLDhCQUE4QixhQUFhLEtBQUssa0JBQWtCLHlCQUF5QixlQUFlLEdBQUcsVUFBVSw2QkFBNkIsVUFBVSw0Q0FBNEMsbUJBQW1CLGlGQUFpRixZQUFZLE1BQU0sd0NBQXdDLG9CQUFvQiwrR0FBK0csbUJBQW1CLDRCQUE0QixXQUFXLE1BQU0sV0FBVyw2Q0FBNkMsc0tBQXNLLDRJQUE0SSxZQUFZLG9CQUFvQiw4Q0FBOEMsSUFBSSxtQkFBbUIsMkNBQTJDLGdIQUFnSCw4REFBOEQsa0JBQWtCLG9CQUFvQixrR0FBa0csTUFBTSxXQUFXLEtBQUssSUFBSSx1QkFBdUIseUJBQXlCLFVBQVUsMkJBQTJCLGtCQUFrQixvQkFBb0IsMEVBQTBFLFFBQVEsOEJBQThCLHFCQUFxQiw2Q0FBNkMseUJBQXlCLCtEQUErRCxlQUFlLGlCQUFpQix5QkFBeUIsZ0NBQWdDLDRCQUE0QiwwQkFBMEIsMEJBQTBCLDZCQUE2QiwwQkFBMEIsTUFBTSxFQUFFLGtCQUFrQiwyQ0FBMkMsVUFBVSxjQUFjLEtBQUssTUFBTSxNQUFNLHdCQUF3QixvREFBb0QsSUFBSSxLQUFLLE9BQU8sOEJBQThCLEtBQUssT0FBTyxpQ0FBaUMsZUFBZSwyQkFBMkIsZUFBZSxtQkFBbUIsZUFBZSxtQkFBbUIsc0JBQXNCLGlCQUFpQixJQUFJLGVBQWUsdURBQXVELElBQUksRUFBRSxvQkFBb0IsK0JBQStCLFNBQVMsZUFBZSxtREFBbUQsY0FBYyxzQkFBc0IscUVBQXFFLGlCQUFpQixxQkFBcUIsK0lBQStJLGVBQWUsMkJBQTJCLElBQUksRUFBRSxrQkFBa0IsaUJBQWlCLFNBQVMsaUJBQWlCLG9CQUFvQixzQkFBc0IsTUFBTSxpQkFBaUIsc0JBQXNCLGlEQUFpRCxvQkFBb0IsSUFBSSxzQkFBc0IsYUFBYSxFQUFFLHFCQUFxQixTQUFTLFVBQVUsbUJBQW1CLHVDQUF1QyxNQUFNLEVBQUUsZUFBZSw4QkFBOEIsT0FBTyw0RUFBNEUsZUFBZSxnREFBZ0QsV0FBVyxlQUFlLHNDQUFzQyxpQkFBaUIsZUFBZSxtRkFBbUYsbUJBQW1CLG1CQUFtQixlQUFlLDRFQUE0RSxpQkFBaUIsa0JBQWtCLGVBQWUsNkdBQTZHLGVBQWUsb0JBQW9CLHVEQUF1RCxrQkFBa0IsWUFBWSxvQkFBb0IsMklBQTJJLGdEQUFnRCxlQUFlLGlCQUFpQixpQkFBaUIsaUJBQWlCLGlCQUFpQixpQkFBaUIsU0FBUyxFQUFFLGdCQUFnQixlQUFlLHVCQUF1QixtREFBbUQsZUFBZSxvQkFBb0IsaUJBQWlCLG1CQUFtQiwrQ0FBK0MsbUJBQW1CLDZDQUE2QyxtREFBbUQsTUFBTSxhQUFhLEtBQUssaUJBQWlCLE1BQU0sV0FBVywrQkFBK0IsaUJBQWlCLHFDQUFxQyxpQkFBaUIsNEVBQTRFLG1DQUFtQywwQkFBMEIsV0FBVyxtQkFBbUIsV0FBVywwQkFBMEIsZUFBZSxlQUFlLFVBQVUscUVBQXFFLGlDQUFpQyxpQkFBaUIseUJBQXlCLGdCQUFnQiw0QkFBNEIsWUFBWSxhQUFhLGtCQUFrQiwyQkFBMkIsU0FBUyxlQUFlLFlBQVksa0JBQWtCLHNCQUFzQixZQUFZLGdDQUFnQyxTQUFTLDZCQUE2QixpQkFBaUIsMEJBQTBCLGdCQUFnQixNQUFNLEVBQUUscUJBQXFCLGlCQUFpQixvQkFBb0IsaUNBQWlDLFNBQVMsd0VBQXdFLGtDQUFrQyxLQUFLLGVBQWUsbUNBQW1DLG1CQUFtQixlQUFlLHNDQUFzQyxXQUFXLCtCQUErQixlQUFlLFlBQVksSUFBSSxrQkFBa0IsVUFBVSxJQUFJLFlBQVksV0FBVyxTQUFTLGVBQWUsb0NBQW9DLHdDQUF3QywyRkFBMkYseUJBQXlCLG9DQUFvQyx3QkFBd0IsWUFBWSx5REFBeUQsd0JBQXdCLFlBQVkscURBQXFELEdBQUcsbUJBQW1CLHlCQUF5QixlQUFlLHNCQUFzQiwwQ0FBMEMsbUJBQW1CLHlCQUF5QixlQUFlLFVBQVUscUVBQXFFLGVBQWUsb0NBQW9DLGVBQWUsMEJBQTBCLHVCQUF1QixlQUFlLHNDQUFzQyxzQkFBc0IsdUJBQXVCLG9FQUFvRSxzQkFBc0IsdUJBQXVCLCtFQUErRSxHQUFHLGVBQWUseUJBQXlCLGtCQUFrQixjQUFjLGlCQUFpQiwwQ0FBMEMseUJBQXlCLG1DQUFtQyw4QkFBOEIsb0JBQW9CLGVBQWUsR0FBRyxlQUFlLDRCQUE0Qix1QkFBdUIseUJBQXlCLHNCQUFzQixZQUFZLDhDQUE4QyxzQkFBc0IsWUFBWSx3REFBd0QsR0FBRyxlQUFlLDBCQUEwQixRQUFRLDJCQUEyQixvQ0FBb0MscUJBQXFCLG1CQUFtQixHQUFHLGlCQUFpQiwwQkFBMEIsWUFBWSxtQ0FBbUMsaUJBQWlCLEdBQUcseUJBQXlCLHdCQUF3QixzQkFBc0Isb0JBQW9CLHNCQUFzQixZQUFZLHlDQUF5QyxzQkFBc0IsWUFBWSxtREFBbUQsZ0NBQWdDLDhCQUE4QixvREFBb0QsR0FBRyxlQUFlLFlBQVksd0JBQXdCLGlCQUFpQixZQUFZLHVCQUF1QiwyREFBMkQsZ0JBQWdCLDJHQUEyRywyQkFBMkIsNkNBQTZDLGlDQUFpQyxpQkFBaUIsMEJBQTBCLDhCQUE4Qix1QkFBdUIsaUJBQWlCLCtCQUErQixpQkFBaUIsK0JBQStCLDJCQUEyQixzQ0FBc0MsMEJBQTBCLHVEQUF1RCx5QkFBeUIsNkJBQTZCLEtBQUssMEJBQTBCLFVBQVUsR0FBRyxpQkFBaUIsK0JBQStCLDJCQUEyQixpQkFBaUIsY0FBYyxjQUFjLHdCQUF3QixvQkFBb0IsZUFBZSxzRkFBc0YscUJBQXFCLHNCQUFzQixtQkFBbUIseURBQXlELGlCQUFpQixNQUFNLHdDQUF3QywwQkFBMEIsd0RBQXdELDJCQUEyQixRQUFRLGFBQWEsbUJBQW1CLEtBQUsscUJBQXFCLDBCQUEwQixRQUFRLGFBQWEsbUJBQW1CLEtBQUsscUJBQXFCLEdBQUcsbUJBQW1CLG1DQUFtQyx3Q0FBd0MsY0FBYyxZQUFZLGdDQUFnQyxjQUFjLFVBQVUsbUNBQW1DLGFBQWEsV0FBVyxvQkFBb0IsbUJBQW1CLGNBQWMseUJBQXlCLEtBQUssY0FBYywrQkFBK0IsYUFBYSxrQkFBa0IsNkJBQTZCLDRCQUE0Qiw4QkFBOEIsSUFBSSxpQ0FBaUMsNEJBQTRCLDBJQUEwSSwyQkFBMkIsb0JBQW9CLHVCQUF1QixHQUFHLHlCQUF5QixpQkFBaUIsMEJBQTBCLHdCQUF3QixHQUFHLGlCQUFpQix1RUFBdUUsaUJBQWlCLG1EQUFtRCw0QkFBNEIsc0JBQXNCLGdDQUFnQyxtQ0FBbUMsZUFBZSx3Q0FBd0Msa0JBQWtCLGdCQUFnQixpQkFBaUIsMkJBQTJCLGdDQUFnQyxxQ0FBcUMsMENBQTBDLHdCQUF3QixZQUFZLHlCQUF5Qiw4RUFBOEUsdUJBQXVCLDhCQUE4QixNQUFNLDJCQUEyQixvQkFBb0IsR0FBRyx3QkFBd0IsbUJBQW1CLHFCQUFxQix3QkFBd0IsbUJBQW1CLHNCQUFzQix3QkFBd0IseUJBQXlCLEdBQUcsaUJBQWlCLHlCQUF5QixtQ0FBbUMsWUFBWSxvQkFBb0IsaUJBQWlCLG1CQUFtQix3REFBd0QsdUNBQXVDLHdCQUF3QixlQUFlLHFDQUFxQyxlQUFlLG9CQUFvQix1Q0FBdUMsd0JBQXdCLGVBQWUsbUJBQW1CLFlBQVkscUdBQXFHLGVBQWUsbUJBQW1CLFlBQVksb0VBQW9FLGVBQWUsbUNBQW1DLGVBQWUsNkNBQTZDLGVBQWUsZUFBZSw2Q0FBNkMsZUFBZSxtQ0FBbUMsNkJBQTZCLHdCQUF3QixlQUFlLDBDQUEwQyxlQUFlLDZCQUE2QixZQUFZLHFCQUFxQiw4Q0FBOEMsMkRBQTJELDZCQUE2Qix1QkFBdUIsMEJBQTBCLHdCQUF3QixlQUFlLGtEQUFrRCxlQUFlLDBDQUEwQyw2QkFBNkIsd0NBQXdDLGdDQUFnQyxZQUFZLEdBQUcsZUFBZSxlQUFlLGtDQUFrQyxnQ0FBZ0MsZUFBZSxtQkFBbUIsaUJBQWlCLFNBQVMsVUFBVSxZQUFZLDhCQUE4QixlQUFlLHFGQUFxRixlQUFlLGtCQUFrQixzQkFBc0IsZUFBZSx5QkFBeUIsZUFBZSwrQkFBK0Isa0JBQWtCLFVBQVUsaURBQWlELGVBQWUsd0NBQXdDLFFBQVEsaUJBQWlCLDBEQUEwRCxlQUFlLG1CQUFtQixlQUFlLHdCQUF3Qix5QkFBeUIsOEJBQThCLCtDQUErQyx3QkFBd0IsY0FBYyw0QkFBNEIsZ0JBQWdCLDRCQUE0QixnQkFBZ0Isa0NBQWtDLFFBQVEsaUNBQWlDLDhCQUE4QixNQUFNLHdDQUF3QyxNQUFNLEVBQUUsa0JBQWtCLGlEQUFpRCxTQUFTLHNCQUFzQiwrQkFBK0IsR0FBRyxtQkFBbUIsd0JBQXdCLGlCQUFpQixpQkFBaUIsMkJBQTJCLDJCQUEyQiw4REFBOEQsaUNBQWlDLDBGQUEwRixnQkFBZ0IsZUFBZSx5QkFBeUIsZUFBZSxrQ0FBa0MsNkJBQTZCLFNBQVMsd0NBQXdDLFNBQVMsSUFBSSxpQkFBaUIsK0RBQStELFNBQVMsSUFBSSwyQkFBMkIsVUFBVSw0QkFBNEIsWUFBWSx3QkFBd0IsU0FBUyxvQkFBb0IsU0FBUyxvQkFBb0IscUNBQXFDLG1DQUFtQyxtQkFBbUIsSUFBSSxZQUFZLFNBQVMsd0JBQXdCLGlCQUFpQixlQUFlLDZCQUE2QixlQUFlLEdBQUcsTUFBTSxHQUFHLGlCQUFpQixvQkFBb0IsNEJBQTRCLFVBQVUsR0FBRyxxQ0FBcUMsaUJBQWlCLEdBQUcsd0JBQXdCLGVBQWUsOEJBQThCLDJCQUEyQix1Q0FBdUMsR0FBRyxlQUFlLCtCQUErQixlQUFlLGlEQUFpRCwyQkFBMkIsb0NBQW9DLDBCQUEwQixvQ0FBb0MsK0NBQStDLG9DQUFvQywwQkFBMEIsMEJBQTBCLDBCQUEwQixvQ0FBb0Msd0JBQXdCLG1CQUFtQix5Q0FBeUMsa0JBQWtCLGdCQUFnQix1QkFBdUIsZ0JBQWdCLHVCQUF1QixtQkFBbUIseUJBQXlCLElBQUksaUJBQWlCLFNBQVMsMEJBQTBCLHdCQUF3Qix5QkFBeUIsMkJBQTJCLEtBQUssR0FBRyxlQUFlLGtCQUFrQixVQUFVLHNCQUFzQixlQUFlLFNBQVMsZUFBZSwwQ0FBMEMseUJBQXlCLG1CQUFtQixrQkFBa0Isd0JBQXdCLG1CQUFtQixrQkFBa0IsR0FBRyxtQkFBbUIsc0JBQXNCLHNFQUFzRSw4Q0FBOEMseUJBQXlCLFdBQVcscUNBQXFDLHFCQUFxQixTQUFTLDBCQUEwQixpREFBaUQsZ0NBQWdDLGtCQUFrQiwrQ0FBK0MsRUFBRSxLQUFLLGVBQWUsa0NBQWtDLGVBQWUsbUNBQW1DLG1CQUFtQixnQkFBZ0IsSUFBSSxzQkFBc0IsY0FBYyxTQUFTLGNBQWMsU0FBUyw0QkFBNEIsV0FBVyx3Q0FBd0MsV0FBVyx5Q0FBeUMsV0FBVyx5Q0FBeUMsV0FBVyxLQUFLLDhCQUE4Qix3Q0FBd0MsMEJBQTBCLHlDQUF5QyxnS0FBZ0ssOEJBQThCLG1CQUFtQixtQkFBbUIsc0NBQXNDLG9DQUFvQyx5QkFBeUIsb0JBQW9CLDZCQUE2QixJQUFJLHFCQUFxQixTQUFTLHdCQUF3QiwyQ0FBMkMsTUFBTSxFQUFFLFdBQVcsY0FBYyxTQUFTLHNCQUFzQix1QkFBdUIsZUFBZSxvQ0FBb0MsSUFBSSxxQkFBcUIsbUNBQW1DLHFCQUFxQixnQ0FBZ0MsNkJBQTZCLDJDQUEyQyxxQkFBcUIsc0JBQXNCLGFBQWEsTUFBTSxFQUFFLFdBQVcsMkNBQTJDLEdBQUcseUJBQXlCLG1CQUFtQixZQUFZLG1CQUFtQixrQkFBa0IsVUFBVSxzREFBc0QsWUFBWSx5QkFBeUIsNEJBQTRCLGdDQUFnQyxxQ0FBcUMsaUNBQWlDLGlDQUFpQyxxQ0FBcUMsMkpBQTJKLHlCQUF5QiwrQ0FBK0MsOEJBQThCLHlCQUF5QixxREFBcUQsaUNBQWlDLDBDQUEwQyw0QkFBNEIsdUNBQXVDLDJCQUEyQix5QkFBeUIsd0VBQXdFLGVBQWUsK0VBQStFLElBQUksVUFBVSxTQUFTLGNBQWMseUJBQXlCLCtCQUErQiwwQkFBMEIscUJBQXFCLDhCQUE4QixxQkFBcUIsaUNBQWlDLHFDQUFxQywwQ0FBMEMsb0NBQW9DLCtCQUErQixrREFBa0QscUJBQXFCLGlCQUFpQixxREFBcUQsdUNBQXVDLE1BQU0sRUFBRSxXQUFXLGFBQWEsU0FBUywwQkFBMEIsOEJBQThCLDRCQUE0Qiw4QkFBOEIsc0NBQXNDLHVDQUF1QyxrTUFBa00sU0FBUyx1Q0FBdUMsaUJBQWlCLEtBQUssNEJBQTRCLFNBQVMsdUNBQXVDLGlCQUFpQixLQUFLLHdCQUF3QixtQkFBbUIsa0NBQWtDLHFCQUFxQixzSEFBc0gsK0JBQStCLGVBQWUsR0FBRyxvQ0FBb0MsdUJBQXVCLHFCQUFxQixlQUFlLDhCQUE4Qix3RkFBd0YsNEtBQTRLLG1CQUFtQiwwQkFBMEIsdURBQXVELGtEQUFrRCxnQ0FBZ0MsOENBQThDLCtFQUErRSxtQ0FBbUMseUJBQXlCLFNBQVMsMEJBQTBCLHlCQUF5QixjQUFjLE1BQU0sRUFBRSxXQUFXLGdDQUFnQyxpQkFBaUIsdUJBQXVCLHdDQUF3Qyw2QkFBNkIsNkNBQTZDLHdEQUF3RCx3QkFBd0IsMkJBQTJCLDhCQUE4Qix3REFBd0Qsd0JBQXdCLHVCQUF1QiwwQkFBMEIseUJBQXlCLHVHQUF1Ryx3Q0FBd0MsNEJBQTRCLCtCQUErQixvQ0FBb0MsMEJBQTBCLHFLQUFxSyx5QkFBeUIsd0NBQXdDLCtDQUErQyx1QkFBdUIsK0JBQStCLEdBQUcscUJBQXFCLHlCQUF5QixzQkFBc0IseUJBQXlCLHlEQUF5RCw4QkFBOEIseUJBQXlCLHFEQUFxRCxpQ0FBaUMsMENBQTBDLDRCQUE0QixvQ0FBb0Msc0JBQXNCLGNBQWMsNkJBQTZCLGNBQWMsd0NBQXdDLHNGQUFzRiwrQkFBK0IsRUFBRSw4RUFBOEUsOENBQThDLGtEQUFrRCw4QkFBOEIsc0JBQXNCLHVCQUF1Qix5Q0FBeUMsbUNBQW1DLGtCQUFrQixLQUFLLHNCQUFzQixlQUFlLCtEQUErRCw0QkFBNEIseUJBQXlCLG9DQUFvQywyQkFBMkIsMkRBQTJELHdCQUF3Qix3QkFBd0IsdURBQXVELCtCQUErQixpQ0FBaUMsNERBQTRELHNDQUFzQyw4QkFBOEIsaURBQWlELG1CQUFtQiwwRUFBMEUsMEJBQTBCLGdDQUFnQywwQkFBMEIsa0xBQWtMLDhGQUE4RixzQkFBc0IsZUFBZSwwQkFBMEIsZUFBZSxnQ0FBZ0MsMENBQTBDLDRCQUE0QiwwQ0FBMEMsNkJBQTZCLDhCQUE4Qix5Q0FBeUMseUJBQXlCLDBDQUEwQyxnQkFBZ0IseUNBQXlDLHdDQUF3QyxnQ0FBZ0MsNkNBQTZDLDZCQUE2QixtREFBbUQsMEJBQTBCLGtCQUFrQix3Q0FBd0MscURBQXFELHdCQUF3QixpRUFBaUUsd0JBQXdCLHFFQUFxRSxrQ0FBa0MsNkJBQTZCLGtDQUFrQyx5QkFBeUIsd0JBQXdCLDhCQUE4Qix3QkFBd0IsbURBQW1ELDJCQUEyQixxRUFBcUUsZ0NBQWdDLGVBQWUsMEVBQTBFLDRCQUE0Qix5QkFBeUIsZUFBZSxzQkFBc0Isb0NBQW9DLDRCQUE0Qix1REFBdUQsNkJBQTZCLGNBQWMscUlBQXFJLHNDQUFzQyxzREFBc0QscUNBQXFDLHdCQUF3QixvQkFBb0Isd0dBQXdHLFlBQVksNEJBQTRCLDZCQUE2Qix3Q0FBd0MsU0FBUywwQkFBMEIsZUFBZSxnQ0FBZ0MsNENBQTRDLDZCQUE2Qix1Q0FBdUMsZ0NBQWdDLHNGQUFzRiw0QkFBNEIsZ0NBQWdDLGtEQUFrRCxzQkFBc0Isb0JBQW9CLHlCQUF5Qix5RkFBeUYsYUFBYSxzQkFBc0IsZUFBZSx1QkFBdUIsZ0JBQWdCLGtIQUFrSCx5Q0FBeUMseUZBQXlGLGFBQWEsMEJBQTBCLHVCQUF1QiwwQkFBMEIsd0NBQXdDLHVCQUF1QiwrQkFBK0IsMkRBQTJELHlCQUF5QixlQUFlLFFBQVEsdUVBQXVFLGNBQWMsSUFBSSxzQkFBc0IsU0FBUyxzQkFBc0Isd0VBQXdFLGlDQUFpQyx3QkFBd0Isc0NBQXNDLHFCQUFxQixnQkFBZ0IseUJBQXlCLHFCQUFxQixvQkFBb0IsaUNBQWlDLHdCQUF3QixzQ0FBc0MsMERBQTBELFNBQVMsMEJBQTBCLFNBQVMsd0JBQXdCLFNBQVMscUNBQXFDLGlDQUFpQywwQkFBMEIsbUNBQW1DLDZDQUE2QyxRQUFRLHdCQUF3QixxQkFBcUIsY0FBYyxpQ0FBaUMsMkJBQTJCLFFBQVEsd0JBQXdCLDRCQUE0Qiw2QkFBNkIsUUFBUSx3QkFBd0IsNEJBQTRCLDZCQUE2Qiw4REFBOEQsMkJBQTJCLGtMQUFrTCxRQUFRLFFBQVEsZ0JBQWdCLFdBQVcsbURBQW1ELGVBQWUsMkJBQTJCLHVDQUF1QywyQkFBMkIsZ0NBQWdDLHVDQUF1QywyQkFBMkIsMkJBQTJCLGlEQUFpRCx1QkFBdUIsMkJBQTJCLHlDQUF5QywyQkFBMkIsOEJBQThCLGlCQUFpQixNQUFNLEVBQUUsNEJBQTRCLHFDQUFxQyxTQUFTLHFEQUFxRCx1QkFBdUIscUJBQXFCLG9CQUFvQixxQ0FBcUMsWUFBWSxzQ0FBc0MseUNBQXlDLGtCQUFrQix3Q0FBd0MsOEJBQThCLGVBQWUsa0NBQWtDLHVCQUF1QixnQ0FBZ0MseUJBQXlCLE1BQU0sY0FBYyw0QkFBNEIsU0FBUyxrQ0FBa0Msa0JBQWtCLHNDQUFzQywwQkFBMEIsb0NBQW9DLHNCQUFzQixtQkFBbUIsdUJBQXVCLFNBQVMsK0NBQStDLGlGQUFpRixtQ0FBbUMsOEJBQThCLHdCQUF3QixtQ0FBbUMsNkJBQTZCLDBCQUEwQixtQ0FBbUMsU0FBUyxlQUFlLGdUQUFnVCxtQ0FBbUMsa0dBQWtHLFFBQVEscUZBQXFGLFNBQVMsSUFBSSx3Q0FBd0MsTUFBTSxpRkFBaUYsb0JBQW9CLFVBQVUsSUFBSSxzREFBc0QsZ0NBQWdDLDJCQUEyQixFQUFFLG9GQUFvRixxQkFBcUIsZ0NBQWdDLE1BQU0scUJBQXFCLEVBQUUscUJBQXFCLHNDQUFzQyxHQUFHLDRCQUE0QixTQUFTLHdCQUF3Qiw2QkFBNkIsa0JBQWtCLGFBQWEsa0JBQWtCLE1BQU0sTUFBTSxTQUFTLHNFQUFzRSwyQkFBMkIsNkNBQTZDLGlEQUFpRCx1Q0FBdUMsMkJBQTJCLHlCQUF5QixzQ0FBc0MsMkJBQTJCLG9CQUFvQix3Q0FBd0MsNEJBQTRCLG1EQUFtRCwyQkFBMkIsWUFBWSxzQ0FBc0MsOEJBQThCLGlEQUFpRCwyQkFBMkIsWUFBWSxrQ0FBa0MsMkJBQTJCLGlCQUFpQixVQUFVLG9DQUFvQyxnRUFBZ0UsdUJBQXVCLFVBQVUsWUFBWSxXQUFXLGlCQUFpQixjQUFjLGdCQUFnQix3Q0FBd0Msb0JBQW9CLDZCQUE2Qix5QkFBeUIsVUFBVSxnRUFBZ0UsWUFBWSxlQUFlLHdCQUF3QiwrQkFBK0IsdUJBQXVCLHVCQUF1QixXQUFXLHlCQUF5Qiw2Q0FBNkMseUJBQXlCLFdBQVcsZUFBZSxxRkFBcUYsc0JBQXNCLG1DQUFtQyxRQUFRLFNBQVMsd0dBQXdHLHFCQUFxQixxQ0FBcUMsNEJBQTRCLHNCQUFzQixzREFBc0QsOEVBQThFLDZDQUE2QyxJQUFJLHFDQUFxQyx1Q0FBdUMsa0RBQWtELHVCQUF1Qiw0QkFBNEIsbUJBQW1CLDZCQUE2Qix3QkFBd0Isc0NBQXNDLHFDQUFxQyw0QkFBNEIsMkJBQTJCLDhCQUE4Qix3Q0FBd0MsNEJBQTRCLDJCQUEyQixrREFBa0QsbUNBQW1DLHVCQUF1QiwrQkFBK0IsNkJBQTZCLG1DQUFtQyw4QkFBOEIsMENBQTBDLDhEQUE4RCxpQkFBaUIsR0FBRyxtQ0FBbUMsOEJBQThCLGtDQUFrQyxRQUFRLFdBQVcsMElBQTBJLHlDQUF5Qyw2Q0FBNkMsaUNBQWlDLG9CQUFvQixnQ0FBZ0MsNElBQTRJLCtCQUErQiwyRkFBMkYsNEJBQTRCLG9CQUFvQixrREFBa0QsaUVBQWlFLFVBQVUsbUJBQW1CLG1CQUFtQiwyQkFBMkIsMkJBQTJCLGNBQWMsMEVBQTBFLEVBQUUsb0VBQW9FLHlGQUF5RiwyQkFBMkIsZ0JBQWdCLHVCQUF1QixtQkFBbUIsNkJBQTZCLDRCQUE0Qiw2QkFBNkIsSUFBSSxrQ0FBa0MsWUFBWSxNQUFNLGdCQUFnQixzQ0FBc0MsY0FBYyxHQUFHLHNCQUFzQixzQkFBc0IsZ0NBQWdDLCtCQUErQiw2TUFBNk0saUNBQWlDLHNCQUFzQixtQkFBbUIsK0JBQStCLGlDQUFpQyxTQUFTLCtCQUErQiw2RkFBNkYsd0JBQXdCLE1BQU0sRUFBRSxvQkFBb0IsZUFBZSxnQkFBZ0IsTUFBTSxxQkFBcUIsTUFBTSx1QkFBdUIsTUFBTSw2QkFBNkIsT0FBTyxlQUFlLHNIQUFzSCxvREFBb0QsU0FBUyxPQUFPLFNBQVMsRUFBRSx1QkFBdUIsTUFBTSxFQUFFLHdDQUF3QyxZQUFZLFlBQVksbUJBQW1CLFNBQVMsU0FBUyxTQUFTLGtEQUFrRCxnQkFBZ0IsZ0NBQWdDLDJDQUEyQyw4QkFBOEIsd0RBQXdELDZDQUE2QyxPQUFPLG9EQUFvRCxnQ0FBZ0MsaUJBQWlCLGdCQUFnQixFQUFFLFlBQVksbURBQW1ELFFBQVEsZ0JBQWdCLHlCQUF5QixpQ0FBaUMsdUJBQXVCLG9CQUFvQixRQUFRLG1GQUFtRiw0QkFBNEIsMkJBQTJCLHFCQUFxQix3RUFBd0UsNkNBQTZDLHVFQUF1RSxZQUFZLEtBQUssR0FBRyxzQkFBc0IsVUFBVSxtQ0FBbUMsWUFBWSxVQUFVLDZHQUE2RyxxQkFBcUIsSUFBSSwyQkFBMkIsd0JBQXdCLDZEQUE2RCxZQUFZLEtBQUssS0FBSyxvQ0FBb0MsaUVBQWlFLFlBQVkscUJBQXFCLFNBQVMsNERBQTRELE9BQU8sd0RBQXdELGNBQWMsU0FBUyxVQUFVLCtCQUErQiwwQkFBMEIsd0ZBQXdGLGlCQUFpQixRQUFRLG1CQUFtQixLQUFLLDZEQUE2RCxNQUFNLE9BQU8sWUFBWSxXQUFXLHVDQUF1QyxVQUFVLGdCQUFnQixzQ0FBc0MsU0FBUyxFQUFFLDJDQUEyQyxrQkFBa0IsK0NBQStDLFdBQVcsc0JBQXNCLGlDQUFpQyxrQ0FBa0MsZ0JBQWdCLDBCQUEwQiw2REFBNkQsZ0JBQWdCLDJCQUEyQixxQkFBcUIsR0FBRyxjQUFjLDBKQUEwSixnQkFBZ0IsZUFBZSxrQkFBa0IscUVBQXFFLElBQUksb0JBQW9CLGtCQUFrQiw4SEFBOEgsaUVBQWlFLFVBQVUsNkNBQTZDLDhDQUE4QyxlQUFlLGVBQWUsd0ZBQXdGLG1DQUFtQyxpQkFBaUIsb0NBQW9DLGVBQWUsa0NBQWtDLEVBQUUsc0JBQXNCLGdCQUFnQixJQUFJLGlCQUFpQixTQUFTLFVBQVUsMEJBQTBCLHFDQUFxQyxzQkFBc0IsT0FBTyxtREFBbUQsSUFBSSxzQ0FBc0MsUUFBUSxrQkFBa0IsNkJBQTZCLFNBQVMsb0dBQW9HLGFBQWEsbUVBQW1FLDZDQUE2QyxhQUFhLGNBQWMsdUJBQXVCLHVEQUF1RCxlQUFlLHVCQUF1Qix3R0FBd0csNEJBQTRCLHVDQUF1QyxLQUFLLHlCQUF5QixjQUFjLDJDQUEyQyx5REFBeUQsWUFBWSxpQkFBaUIsV0FBVyxpQkFBaUIsS0FBSyxtREFBbUQsWUFBWSw0QkFBNEIsdUJBQXVCLE1BQU0saUNBQWlDLG1DQUFtQyw4Q0FBOEMsa0JBQWtCLFNBQVMsbUJBQW1CLFVBQVUsdUJBQXVCLG1CQUFtQixpQkFBaUIsbUJBQW1CLGdCQUFnQix3Q0FBd0MsdUNBQXVDLDJCQUEyQixpQkFBaUIsR0FBRyxlQUFlLG1GQUFtRixpQkFBaUIsa0JBQWtCLHlJQUF5SSw2Q0FBNkMscUJBQXFCLG1CQUFtQixrREFBa0Qsb0RBQW9ELElBQUksWUFBWSxlQUFlLHlCQUF5QixpQkFBaUIsbUJBQW1CLGdCQUFnQixjQUFjLGlCQUFpQixtQkFBbUIsc0JBQXNCLG9CQUFvQixnQkFBZ0Isd0JBQXdCLGdCQUFnQiwrQkFBK0Isb0JBQW9CLDhEQUE4RCxpQkFBaUIsR0FBRyxtQkFBbUIsWUFBWSxJQUFJLGlCQUFpQixVQUFVLGlCQUFpQiw4QkFBOEIsWUFBWSxpRUFBaUUsbUJBQW1CLDRCQUE0QixXQUFXLGNBQWMsd0RBQXdELElBQUksMkRBQTJELE9BQU8seUNBQXlDLG9CQUFvQixtREFBbUQsc05BQXNOLGlCQUFpQixtQkFBbUIsa0JBQWtCLGtCQUFrQixtQkFBbUIsMkRBQTJELDRVQUE0VSxzQkFBc0Isd0pBQXdKLElBQUksS0FBSyxxQkFBcUIsTUFBTSw4QkFBOEIsU0FBUyxVQUFVLFNBQVMsOEJBQThCLHlCQUF5QixtQkFBbUIsb0JBQW9CLG9CQUFvQixxQkFBcUIsbUJBQW1CLGFBQWEsMENBQTBDLFlBQVksc0JBQXNCLEtBQUssTUFBTSx1QkFBdUIsZ0JBQWdCLE1BQU0scUJBQXFCLDJCQUEyQixHQUFHLGtCQUFrQixtQkFBbUIsaUJBQWlCLGVBQWUsbUJBQW1CLHdDQUF3QyxlQUFlLG1CQUFtQixzQkFBc0IsZUFBZSxtQkFBbUIsd0JBQXdCLGVBQWUsV0FBVyxtQkFBbUIscURBQXFELGVBQWUsU0FBUyxvQ0FBb0MsZ0NBQWdDLG1FQUFtRSx5QkFBeUIsVUFBVSxrS0FBa0ssVUFBVSxpQkFBaUIseUJBQXlCLFlBQVksd0JBQXdCLGVBQWUsNkdBQTZHLGdCQUFnQiw0Q0FBNEMsMEJBQTBCLFdBQVcsR0FBRyxzQ0FBc0MsZUFBZSw0QkFBNEIsdUJBQXVCLEdBQUcsT0FBTyxhQUFhLGNBQWMsZ0NBQWdDLEVBQUUsVUFBVSxPQUFPLGlCQUFpQixrQ0FBa0MsdUJBQXVCLG9CQUFvQixlQUFlLGdMQUFnTCxnQkFBZ0IsaUNBQWlDLHVCQUF1QixpQkFBaUIsd0JBQXdCLGtEQUFrRCwwQkFBMEIsUUFBUSxnQ0FBZ0MsbUJBQW1CLCtCQUErQixtQkFBbUIsa0JBQWtCLGNBQWMsYUFBYSxPQUFPLGlCQUFpQiw4QkFBOEIsaUJBQWlCLGlDQUFpQyxlQUFlLDZjQUE2YyxpQ0FBaUMsZ0NBQWdDLDhCQUE4QiwyTEFBMkwsSUFBSSw0RkFBNEYsU0FBUyxhQUFhLGdDQUFnQyxLQUFLLFlBQVksR0FBRywwQ0FBMEMsc0JBQXNCLDRCQUE0QixzQ0FBc0MsZ0VBQWdFLHNCQUFzQixrREFBa0QscUVBQXFFLDRGQUE0RixjQUFjLGdCQUFnQix3QkFBd0IsaUJBQWlCLHFCQUFxQixtQkFBbUIscUJBQXFCLGdCQUFnQixTQUFTLGdCQUFnQiwwQ0FBMEMsd0NBQXdDLHFCQUFxQix5Q0FBeUMscUJBQXFCLGdCQUFnQixvREFBb0QsZ0JBQWdCLG9DQUFvQyxrQkFBa0IscUJBQXFCLGtCQUFrQiw0REFBNEQsc0JBQXNCLHFEQUFxRCxrQkFBa0IsaUJBQWlCLGtCQUFrQixlQUFlLGdCQUFnQixXQUFXLG9CQUFvQixzQ0FBc0Msb0JBQW9CLHVDQUF1QyxPQUFPLHNCQUFzQix5REFBeUQsMERBQTBELFNBQVMsMENBQTBDLDZCQUE2Qiw0R0FBNEcsNkNBQTZDLDJLQUEySyx5QkFBeUIsbUNBQW1DLEtBQUssc0JBQXNCLG1CQUFtQixxQ0FBcUMsZ0JBQWdCLGdCQUFnQixVQUFVLElBQUksOENBQThDLGlDQUFpQyxZQUFZLElBQUksS0FBSyxnQkFBZ0Isa0JBQWtCLG1CQUFtQixTQUFTLHNDQUFzQyxZQUFZLEdBQUcsb0NBQW9DLGdDQUFnQyxTQUFTLGVBQWUsVUFBVSwyREFBMkQsNkJBQTZCLGlCQUFpQiw2REFBNkQsNkRBQTZELDREQUE0RCxnVEFBZ1QsY0FBYyx3Q0FBd0MsY0FBYyxnRUFBZ0UsY0FBYywrQ0FBK0MsS0FBSyw4QkFBOEIsTUFBTSw2REFBNkQsY0FBYyxHQUFHLGNBQWMsY0FBYyxnREFBZ0QsS0FBSyxXQUFXLDBCQUEwQixFQUFFLEtBQUssWUFBWSxxQkFBcUIsNEJBQTRCLEdBQUcsMkdBQTJHLHVFQUF1RSx1QkFBdUIsRUFBRSxRQUFRLEVBQUUsT0FBTyxnQkFBZ0IsaUNBQWlDLHVLQUF1SyxnQkFBZ0IseUNBQXlDLDJFQUEyRSxtQkFBbUIsWUFBWSxtQkFBbUIsaUVBQWlFLGtCQUFrQixxQ0FBcUMseUNBQXlDLDBCQUEwQixtQkFBbUIsbUJBQW1CLHVCQUF1QixRQUFRLElBQUksS0FBSywyQkFBMkIsa0JBQWtCLHFCQUFxQixvQkFBb0IsTUFBTSxrQ0FBa0MseUNBQXlDLCtGQUErRixtQkFBbUIsaURBQWlELGlCQUFpQiwrQ0FBK0MsVUFBVSx1QkFBdUIsZ0JBQWdCLGFBQWEsY0FBYyxjQUFjLDJDQUEyQyx3QkFBd0IsVUFBVSxtTUFBbU0sc0NBQXNDLGFBQWEsU0FBUyxlQUFlLE9BQU8sb05BQW9OLHdCQUF3QixnQkFBZ0Isb0JBQW9CLFNBQVMseURBQXlELGdCQUFnQixjQUFjLHVIQUF1SCxFQUFFLDBDQUEwQyxjQUFjLGFBQWEsK0NBQStDLHVEQUF1RCxXQUFXLDBDQUEwQyx5Q0FBeUMsU0FBUyxtQkFBbUIscUJBQXFCLG1CQUFtQixrREFBa0QsVUFBVSxzQkFBc0IsY0FBYyx5QkFBeUIsdUJBQXVCLHFCQUFxQix3RkFBd0YsK0JBQStCLHVCQUF1QixxRkFBcUYsZ0NBQWdDLDBCQUEwQix5REFBeUQsbUJBQW1CLG1DQUFtQyxHQUFHLDZCQUE2QiwyQkFBMkIsSUFBSSx3QkFBd0IscUJBQXFCLEtBQUssVUFBVSxrQkFBa0IscUJBQXFCLGtCQUFrQixhQUFhLGFBQWEsY0FBYyxtQkFBbUIsbUNBQW1DLGdCQUFnQixtQkFBbUIsbUJBQW1CLGNBQWMsNENBQTRDLCtCQUErQixxQkFBcUIsMENBQTBDLGdFQUFnRSxjQUFjLHlDQUF5QyxpRUFBaUUsY0FBYyx3Q0FBd0MsZ0VBQWdFLGNBQWMsb0NBQW9DLGtEQUFrRCwwRUFBMEUsY0FBYyxtQ0FBbUMsa0RBQWtELHNFQUFzRSxjQUFjLHNCQUFzQixrREFBa0Qsa0VBQWtFLGdCQUFnQixxQkFBcUIsa0JBQWtCLCtCQUErQixzREFBc0QsY0FBYyw2QkFBNkIsa0RBQWtELDBEQUEwRCxnQkFBZ0IscUJBQXFCLGtCQUFrQixzQ0FBc0Msc0RBQXNELGNBQWMsb0NBQW9DLGtEQUFrRCxRQUFRLDRDQUE0QyxjQUFjLGVBQWUsZ0JBQWdCLG9DQUFvQywyQkFBMkIsSUFBSSxjQUFjLFNBQVMsa0JBQWtCLHlDQUF5QyxrREFBa0QsV0FBVyxXQUFXLDREQUE0RCxXQUFXLCtYQUErWCxnQ0FBZ0Msa0JBQWtCLG9HQUFvRyxvQkFBb0IsTUFBTSxvQ0FBb0Msb0RBQW9ELGdMQUFnTCxpQkFBaUIsNEpBQTRKLHVCQUF1QixTQUFTLGNBQWMsZUFBZSxxQkFBcUIsbUJBQW1CLHFCQUFxQixhQUFhLDZCQUE2QixnQkFBZ0IsMkVBQTJFLGtCQUFrQixrQkFBa0IsZ0NBQWdDLE1BQU0sSUFBSSw2Q0FBNkMsRUFBRSxXQUFXLGNBQWMsU0FBUywwQ0FBMEMsU0FBUyxhQUFhLFNBQVMsNEJBQTRCLFNBQVMsZ0JBQWdCLFNBQVMsZUFBZSxTQUFTLGVBQWUsNkJBQTZCLGVBQWUsc0ZBQXNGLFVBQVUsK0JBQStCLDZCQUE2QixtQ0FBbUMsdURBQXVELGVBQWUsNkdBQTZHLHVCQUF1QixpQkFBaUIsVUFBVSwwQkFBMEIseUJBQXlCLHVCQUF1Qix3QkFBd0Isc0JBQXNCLDBEQUEwRCxpQkFBaUIsVUFBVSwwQkFBMEIseUJBQXlCLHVCQUF1Qix3QkFBd0IsMERBQTBELHFCQUFxQixVQUFVLDhCQUE4QiwyQkFBMkIsNEJBQTRCLDBEQUEwRCxrQkFBa0IsVUFBVSw2QkFBNkIsMEJBQTBCLDJCQUEyQiwyREFBMkQsaUJBQWlCLFVBQVUsMEJBQTBCLHlCQUF5Qix1QkFBdUIsd0JBQXdCLHNCQUFzQiwwREFBMEQscUJBQXFCLFVBQVUsOEJBQThCLDJCQUEyQiw0QkFBNEIsMkRBQTJELGlCQUFpQixVQUFVLDBCQUEwQix5QkFBeUIsdUJBQXVCLHdCQUF3QixzQkFBc0IsMERBQTBELGVBQWUsZ0VBQWdFLGdFQUFnRSxjQUFjLGVBQWUsbUJBQW1CLG9CQUFvQixlQUFlLHNGQUFzRixVQUFVLG9EQUFvRCxrREFBa0QsdURBQXVELGVBQWUsa0ZBQWtGLGdCQUFnQixhQUFhLG9HQUFvRyxPQUFPLDJKQUEySixXQUFXLGtCQUFrQiwrSkFBK0osZ0JBQWdCLDZKQUE2SixvQkFBb0IsV0FBVyxrQkFBa0IsK0pBQStKLGdCQUFnQiw4SkFBOEosdUNBQXVDLGdCQUFnQixnSUFBZ0kseUJBQXlCLGdMQUFnTCx3QkFBd0IsMkJBQTJCLDhCQUE4QixXQUFXLHNJQUFzSSxRQUFRLGlSQUFpUixLQUFLLHlYQUF5WCxpQ0FBaUMsZUFBZSx1bUJBQXVtQixVQUFVLDBCQUEwQix5QkFBeUIsdUJBQXVCLHdCQUF3QiwwREFBMEQsdURBQXVELDhCQUE4QixvQkFBb0IsVUFBVSwwQkFBMEIseUJBQXlCLHVCQUF1Qix3QkFBd0IsMERBQTBELE1BQU0sZUFBZSxtQkFBbUIsOEJBQThCLGNBQWMsZUFBZSx5QkFBeUIsZUFBZSxpQkFBaUIsVUFBVSxxQ0FBcUMsb0JBQW9CLFFBQVEsOEJBQThCLHlCQUF5QiwwQkFBMEIseURBQXlELEdBQUcsWUFBWSxvQ0FBb0MsSUFBSSxnQ0FBZ0MsYUFBYSwwQ0FBMEMsNEdBQTRHLGFBQWEsZUFBZSwwQ0FBMEMsMkdBQTJHLFlBQVksZUFBZSwyREFBMkQsc0VBQXNFLFdBQVcsZUFBZSwyQkFBMkIsb0VBQW9FLHlFQUF5RSxtQ0FBbUMsa0NBQWtDLGtFQUFrRSxpREFBaUQsMkdBQTJHLFlBQVksZUFBZSw2Q0FBNkMsNkdBQTZHLGFBQWEsZUFBZSxLQUFLLGNBQWMsc2pCQUFzakIsNEVBQTRFLGNBQWMseURBQXlELFlBQVksbUJBQW1CLEtBQUssbUJBQW1CLHNFQUFzRSxTQUFTLDBCQUEwQixpQkFBaUIscUJBQXFCLGlDQUFpQyxzQ0FBc0MsNEJBQTRCLHVEQUF1RCxzQkFBc0IsU0FBUyxlQUFlLFlBQVksbUJBQW1CLEtBQUsseUNBQXlDLDBDQUEwQyxhQUFhLHNJQUFzSSxnRUFBZ0UsR0FBRyxTQUFTLG1CQUFtQix5Q0FBeUMsa0RBQWtELFdBQVcsZUFBZSx1QkFBdUIsZUFBZSxxR0FBcUcsb0JBQW9CLHdCQUF3QixvQkFBb0IsWUFBWSxrQkFBa0IsUUFBUSxXQUFXLHdDQUF3QyxTQUFTLE1BQU0saUNBQWlDLHNDQUFzQyxRQUFRLFdBQVcseUZBQXlGLFNBQVMsT0FBTyxtQ0FBbUMsc0JBQXNCLDJEQUEyRCxJQUFJLHNDQUFzQyxrQ0FBa0MsWUFBWSxFQUFFLE9BQU8sb0dBQW9HLEdBQUcsSUFBSSxlQUFlLG1CQUFtQixpQ0FBaUMsaUJBQWlCLG9HQUFvRyxtQkFBbUIsTUFBTSxxQ0FBcUMsb0RBQW9ELGlMQUFpTCxnQkFBZ0IsNEpBQTRKLEdBQUcsaUJBQWlCLG9DQUFvQywyQkFBMkIsSUFBSSxjQUFjLFNBQVMsaUJBQWlCLHdCQUF3QixpQkFBaUIsOEJBQThCLG1CQUFtQixTQUFTLFlBQVksVUFBVSw4QkFBOEIsb0dBQW9HLFNBQVMsY0FBYywrREFBK0Qsd0ZBQXdGLGVBQWUsMEpBQTBKLDRDQUE0QyxxREFBcUQsMEpBQTBKLHFDQUFxQywyR0FBMkcscUNBQXFDLHNCQUFzQixtQkFBbUIsb0JBQW9CLDREQUE0RCxzQkFBc0IsU0FBUyxjQUFjLG9MQUFvTCx5SEFBeUgsaUJBQWlCLHFCQUFxQixpQ0FBaUMsc0NBQXNDLDRCQUE0Qix1REFBdUQsc0JBQXNCLFNBQVMsZUFBZSxZQUFZLG1CQUFtQixLQUFLLHlDQUF5QywwQ0FBMEMsYUFBYSxzSUFBc0ksZ0VBQWdFLEdBQUcsU0FBUyxtQkFBbUIseUNBQXlDLGtEQUFrRCxXQUFXLGNBQWMseURBQXlELFlBQVksbUJBQW1CLEtBQUssbUJBQW1CLHNFQUFzRSxTQUFTLDBCQUEwQixlQUFlLGtNQUFrTSxvQkFBb0Isd0JBQXdCLG9CQUFvQixZQUFZLGtCQUFrQixRQUFRLFdBQVcsd0NBQXdDLFNBQVMsTUFBTSxpQ0FBaUMsc0NBQXNDLFFBQVEsV0FBVyx5RkFBeUYsU0FBUyxnQkFBZ0IsS0FBSyxNQUFNLFdBQVcsK0JBQStCLDRCQUE0Qiw4Q0FBOEMsaUJBQWlCLE1BQU0sNkJBQTZCLHFDQUFxQyxJQUFJLGVBQWUsa0ZBQWtGLGdCQUFnQixhQUFhLG9HQUFvRyxPQUFPLGlCQUFpQixxQkFBcUIsaUNBQWlDLHNDQUFzQyw0QkFBNEIsdURBQXVELHNCQUFzQixTQUFTLGVBQWUsWUFBWSxtQkFBbUIsS0FBSyx5Q0FBeUMsMENBQTBDLGFBQWEsc0lBQXNJLGdFQUFnRSxHQUFHLFNBQVMsaUJBQWlCLFlBQVksV0FBVyxLQUFLLFdBQVcsK0dBQStHLGlCQUFpQiwyRUFBMkUsdUJBQXVCLFNBQVMsZUFBZSxvR0FBb0csU0FBUyxlQUFlLHlFQUF5RSw2Q0FBNkMsT0FBTyxtQkFBbUIseUNBQXlDLGtEQUFrRCxXQUFXLGlCQUFpQixxREFBcUQsaUJBQWlCLDBDQUEwQyw4QkFBOEIsZ0NBQWdDLElBQUkscUJBQXFCLE9BQU8sRUFBRSx1S0FBdUssRUFBRSxtQkFBbUIsZUFBZSw0R0FBNEcsMENBQTBDLGFBQWEscUNBQXFDLHVDQUF1QyxZQUFZLGFBQWEsTUFBTSxrQ0FBa0MsNERBQTRELG1DQUFtQyxxQ0FBcUMsSUFBSSxnRkFBZ0YsT0FBTyxTQUFTLFVBQVUsY0FBYyxjQUFjLE1BQU0sMkJBQTJCLG1DQUFtQywrQkFBK0IscUJBQXFCLHdEQUF3RCw4RkFBOEYsYUFBYSxTQUFTLEVBQUUsYUFBYSxNQUFNLGVBQWUsOEVBQThFLFNBQVMsOENBQThDLElBQUksc0JBQXNCLDJEQUEyRCxJQUFJLGVBQWUsbURBQW1ELCtEQUErRCxrUEFBa1AsT0FBTyw4QkFBOEIsa1JBQWtSLG1DQUFtQyxzREFBc0QsZ0NBQWdDLHlCQUF5QixjQUFjLHVCQUF1QixZQUFZLDJCQUEyQixZQUFZLHVCQUF1Qiw2QkFBNkIsb0JBQW9CLFVBQVUsc0VBQXNFLFlBQVksSUFBSSxjQUFjLHFCQUFxQixPQUFPLEVBQUUsMkhBQTJILEVBQUUsZ0NBQWdDLGlCQUFpQixxQkFBcUIsaUNBQWlDLHNDQUFzQyw0QkFBNEIsdURBQXVELHNCQUFzQixTQUFTLGVBQWUsWUFBWSxtQkFBbUIsS0FBSyx5Q0FBeUMsMENBQTBDLGFBQWEsc0lBQXNJLGdFQUFnRSxHQUFHLFNBQVMsbUJBQW1CLHlDQUF5QyxrREFBa0QsV0FBVyxjQUFjLHlEQUF5RCxZQUFZLG1CQUFtQixLQUFLLG1CQUFtQixzRUFBc0UsU0FBUywwQkFBMEIsdURBQXVELGVBQWUsaUVBQWlFLG9CQUFvQix3QkFBd0Isb0JBQW9CLFlBQVksa0JBQWtCLFFBQVEsV0FBVyx3Q0FBd0MsU0FBUyxNQUFNLGlDQUFpQyxzQ0FBc0MsUUFBUSxXQUFXLHlGQUF5RixTQUFTLDJCQUEyQixpQ0FBaUMsSUFBSSw2RUFBNkUsYUFBYSxpQkFBaUIscUJBQXFCLGlDQUFpQyxzQ0FBc0MsNEJBQTRCLHVEQUF1RCxzQkFBc0IsU0FBUyxtQkFBbUIseUNBQXlDLGtEQUFrRCxXQUFXLGNBQWMseURBQXlELFlBQVksbUJBQW1CLEtBQUssbUJBQW1CLHNFQUFzRSxTQUFTLDBCQUEwQixlQUFlLHFDQUFxQyxpQ0FBaUMsSUFBSSxrSEFBa0gsR0FBRyxlQUFlLGdDQUFnQyx5Q0FBeUMsMEJBQTBCLHFCQUFxQixPQUFPLEVBQUUsb0JBQW9CLDJCQUEyQixZQUFZLG1CQUFtQixLQUFLLHlDQUF5QywwQ0FBMEMsYUFBYSxzSUFBc0ksZ0VBQWdFLEdBQUcsU0FBUyxHQUFHLEtBQUssZ0NBQWdDLGlCQUFpQixxQkFBcUIsaUNBQWlDLHNDQUFzQyw0QkFBNEIsdURBQXVELHNCQUFzQixTQUFTLGVBQWUsWUFBWSxtQkFBbUIsS0FBSyx5Q0FBeUMsMENBQTBDLGFBQWEsc0lBQXNJLGdFQUFnRSxHQUFHLFNBQVMsbUJBQW1CLHlDQUF5QyxrREFBa0QsV0FBVyxjQUFjLHlEQUF5RCxZQUFZLG1CQUFtQixLQUFLLG1CQUFtQixzRUFBc0UsU0FBUywwQkFBMEIsa0RBQWtELGVBQWUsaUVBQWlFLG9CQUFvQix3QkFBd0Isb0JBQW9CLFlBQVksa0JBQWtCLFFBQVEsV0FBVyx3Q0FBd0MsU0FBUyxNQUFNLGlDQUFpQyxzQ0FBc0MsUUFBUSxXQUFXLHlGQUF5RixTQUFTLDJCQUEyQixpQ0FBaUMsSUFBSSw0RUFBNEUsVUFBVSxpQkFBaUIscUJBQXFCLGlDQUFpQyxzQ0FBc0MsNEJBQTRCLHVEQUF1RCxzQkFBc0IsU0FBUyxtQkFBbUIseUNBQXlDLGtEQUFrRCxXQUFXLGNBQWMseURBQXlELFlBQVksbUJBQW1CLEtBQUssbUJBQW1CLHNFQUFzRSxTQUFTLDBCQUEwQixlQUFlLG9DQUFvQyxpQ0FBaUMsSUFBSSx5RUFBeUUsZUFBZSxrREFBa0QsdUNBQXVDLEdBQUcsZUFBZSxnQ0FBZ0Msd0NBQXdDLDBCQUEwQixxQkFBcUIsT0FBTyxFQUFFLG9CQUFvQiwyQkFBMkIsWUFBWSxtQkFBbUIsS0FBSyx5Q0FBeUMsMENBQTBDLGFBQWEsc0lBQXNJLGdFQUFnRSxHQUFHLFNBQVMsR0FBRyxLQUFLLG1EQUFtRCxpQkFBaUIscUJBQXFCLGlDQUFpQyxzQ0FBc0MsNEJBQTRCLHVEQUF1RCxzQkFBc0IsU0FBUyxlQUFlLFlBQVksbUJBQW1CLEtBQUsseUNBQXlDLDBDQUEwQyxhQUFhLHNJQUFzSSxnRUFBZ0UsR0FBRyxTQUFTLG1CQUFtQix5Q0FBeUMsa0RBQWtELFdBQVcsY0FBYyx5REFBeUQsWUFBWSxtQkFBbUIsS0FBSyxtQkFBbUIsc0VBQXNFLFNBQVMsMEJBQTBCLGtEQUFrRCxlQUFlLHdHQUF3RyxvQkFBb0Isd0JBQXdCLG9CQUFvQixZQUFZLGtCQUFrQixRQUFRLFdBQVcsd0NBQXdDLFNBQVMsTUFBTSxpQ0FBaUMsc0NBQXNDLFFBQVEsV0FBVyx5RkFBeUYsU0FBUywyQkFBMkIsaUNBQWlDLElBQUksdUZBQXVGLFVBQVUsaUJBQWlCLHFCQUFxQixpQ0FBaUMsc0NBQXNDLDRCQUE0Qix1REFBdUQsc0JBQXNCLFNBQVMsZUFBZSxZQUFZLG1CQUFtQixLQUFLLHlDQUF5QywwQ0FBMEMsYUFBYSxzSUFBc0ksZ0VBQWdFLEdBQUcsU0FBUyxtQkFBbUIseUNBQXlDLGtEQUFrRCxXQUFXLGNBQWMseURBQXlELFlBQVksbUJBQW1CLEtBQUssbUJBQW1CLHNFQUFzRSxTQUFTLDBCQUEwQixlQUFlLDJCQUEyQixpQ0FBaUMsSUFBSSx3RUFBd0UsZUFBZSxrREFBa0QseUNBQXlDLEdBQUcsZUFBZSxnQ0FBZ0Msc0NBQXNDLDBCQUEwQixxQkFBcUIsT0FBTyxFQUFFLDhDQUE4Qyx1QkFBdUIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLG1GQUFtRixpQkFBaUIscUJBQXFCLGlDQUFpQyxzQ0FBc0MsNEJBQTRCLHVEQUF1RCxzQkFBc0IsU0FBUyxlQUFlLFlBQVksbUJBQW1CLEtBQUsseUNBQXlDLDBDQUEwQyxhQUFhLHNJQUFzSSxnRUFBZ0UsR0FBRyxTQUFTLG1CQUFtQix5Q0FBeUMsa0RBQWtELFdBQVcsY0FBYyx5REFBeUQsWUFBWSxtQkFBbUIsS0FBSyxtQkFBbUIsc0VBQXNFLFNBQVMsMEJBQTBCLCtDQUErQyxlQUFlLDRJQUE0SSxvQkFBb0Isd0JBQXdCLG9CQUFvQixZQUFZLGtCQUFrQixRQUFRLFdBQVcsd0NBQXdDLFNBQVMsTUFBTSxpQ0FBaUMsc0NBQXNDLFFBQVEsV0FBVyx5RkFBeUYsU0FBUywyQkFBMkIsaUNBQWlDLElBQUksd0xBQXdMLFVBQVUscUJBQXFCLE9BQU8sRUFBRSxtRkFBbUYsRUFBRSx5REFBeUQsaUJBQWlCLHFCQUFxQixpQ0FBaUMsc0NBQXNDLDRCQUE0Qix1REFBdUQsc0JBQXNCLFNBQVMsbUJBQW1CLHlDQUF5QyxrREFBa0QsV0FBVyxjQUFjLHlEQUF5RCxZQUFZLG1CQUFtQixLQUFLLG1CQUFtQixzRUFBc0UsU0FBUywwQkFBMEIsZUFBZSw2R0FBNkcsb0JBQW9CLHdCQUF3QixvQkFBb0IsWUFBWSxrQkFBa0IsUUFBUSxXQUFXLHdDQUF3QyxTQUFTLE1BQU0saUNBQWlDLHNDQUFzQyxRQUFRLFdBQVcseUZBQXlGLFNBQVMsd0VBQXdFLG1CQUFtQixXQUFXLE1BQU0sZUFBZSxnRUFBZ0UsU0FBUyxHQUFHLGlDQUFpQyxJQUFJLG1HQUFtRyxlQUFlLGtEQUFrRCwrQ0FBK0MsR0FBRyx5QkFBeUIsWUFBWSxtQkFBbUIsS0FBSyx5Q0FBeUMsMENBQTBDLGFBQWEsc0lBQXNJLGdFQUFnRSxHQUFHLFNBQVMsRUFBRSx5RkFBeUYsS0FBSywyRUFBMkUsZUFBZSx1S0FBdUssS0FBSyxNQUFNLHVDQUF1QyxnQ0FBZ0MseURBQXlELDJCQUEyQix1QkFBdUIsMkJBQTJCLDZCQUE2Qiw2Q0FBNkMsSUFBSSxjQUFjLHVIQUF1SCxpREFBaUQsY0FBYyx5REFBeUQsWUFBWSxtQkFBbUIsS0FBSyxtQkFBbUIsc0VBQXNFLFNBQVMsMEJBQTBCLGlCQUFpQixxQkFBcUIsaUNBQWlDLHNDQUFzQyw0QkFBNEIsdURBQXVELHNCQUFzQixTQUFTLG1CQUFtQix5Q0FBeUMsa0RBQWtELFdBQVcsOEJBQThCLGVBQWUsa0VBQWtFLG9CQUFvQix3QkFBd0Isb0JBQW9CLFlBQVksa0JBQWtCLFFBQVEsV0FBVyx3Q0FBd0MsU0FBUyxNQUFNLGlDQUFpQyxzQ0FBc0MsUUFBUSxXQUFXLHlGQUF5RixTQUFTLHFCQUFxQixZQUFZLG1CQUFtQixLQUFLLHlDQUF5QywwQ0FBMEMsYUFBYSxzSUFBc0ksZ0VBQWdFLEdBQUcsU0FBUyxFQUFFLGFBQWEsdUNBQXVDLHlDQUF5QyxJQUFJLG9CQUFvQixnQkFBZ0IsZUFBZSxrQ0FBa0MsZUFBZSx3SEFBd0gsY0FBYyx1QkFBdUIsd0JBQXdCLGdCQUFnQixzQ0FBc0MsSUFBSSx1Q0FBdUMsU0FBUyx3QkFBd0IsbUJBQW1CLDRIQUE0SCxHQUFHLCtDQUErQyxXQUFXLGtDQUFrQyxNQUFNLEdBQUcsNkJBQTZCLDhHQUE4Ryw4Q0FBOEMsc0JBQXNCLDZCQUE2QixpREFBaUQsRUFBRSxJQUFJLGNBQWMsK0ZBQStGLGVBQWUsNkpBQTZKLG1HQUFtRyxjQUFjLHlEQUF5RCxZQUFZLG1CQUFtQixLQUFLLG1CQUFtQixzRUFBc0UsU0FBUywwQkFBMEIsZUFBZSx5SEFBeUgseUNBQXlDLHlCQUF5QixnQkFBZ0IseUdBQXlHLG9CQUFvQix3QkFBd0Isb0JBQW9CLFlBQVksa0JBQWtCLFFBQVEsV0FBVyx3Q0FBd0MsU0FBUyxNQUFNLGlDQUFpQyxzQ0FBc0MsUUFBUSxXQUFXLHlGQUF5RixTQUFTLHNDQUFzQyxnQ0FBZ0MsaURBQWlELDBCQUEwQixPQUFPLHNDQUFzQyx5QkFBeUIsNkZBQTZGLGdDQUFnQyxPQUFPLHlCQUF5Qix1QkFBdUIsNEVBQTRFLDJCQUEyQixlQUFlLFFBQVEsY0FBYyxnUEFBZ1Asd0hBQXdILGNBQWMseURBQXlELFlBQVksbUJBQW1CLEtBQUssbUJBQW1CLHNFQUFzRSxTQUFTLDBCQUEwQixlQUFlLGtGQUFrRixnQkFBZ0IsYUFBYSxvR0FBb0csT0FBTyxpQkFBaUIsMkVBQTJFLHVCQUF1QixTQUFTLGVBQWUsb0dBQW9HLFNBQVMsZUFBZSx5RUFBeUUsNkNBQTZDLE9BQU8saUJBQWlCLHFCQUFxQixpQ0FBaUMsc0NBQXNDLDRCQUE0Qix1REFBdUQsc0JBQXNCLFNBQVMsZUFBZSxZQUFZLG1CQUFtQixLQUFLLHlDQUF5QywwQ0FBMEMsYUFBYSxzSUFBc0ksZ0VBQWdFLEdBQUcsU0FBUyxtQkFBbUIseUNBQXlDLGtEQUFrRCxXQUFXLGlCQUFpQixvQ0FBb0MsMkJBQTJCLElBQUksY0FBYyxTQUFTLGdCQUFnQiwyQ0FBMkMsNEdBQTRHLG1CQUFtQixpQ0FBaUMsaUJBQWlCLG9HQUFvRyxtQkFBbUIsTUFBTSxxQ0FBcUMsb0RBQW9ELGlMQUFpTCxnQkFBZ0IsNEpBQTRKLEdBQUcsdUJBQXVCLGlCQUFpQiwrQ0FBK0MsbUJBQW1CLHVCQUF1Qiw4QkFBOEIsWUFBWSxlQUFlLHlCQUF5QixpQkFBaUIsb0VBQW9FLGtCQUFrQiw0Q0FBNEMsa0JBQWtCLGtCQUFrQix1Q0FBdUMsSUFBSSxrRUFBa0UsU0FBUyxNQUFNLGtCQUFrQixZQUFZLHVCQUF1QiwyQkFBMkIsc0JBQXNCLG1CQUFtQixlQUFlLGdCQUFnQixlQUFlLGdCQUFnQixjQUFjLG1EQUFtRCxZQUFZLElBQUksZUFBZSxrRUFBa0UsNkJBQTZCLHdDQUF3QyxhQUFhLG1CQUFtQixrQ0FBa0MsZ0JBQWdCLGVBQWUsNEdBQTRHLDBDQUEwQyxhQUFhLHFDQUFxQyx1Q0FBdUMsWUFBWSxhQUFhLE1BQU0sZ0NBQWdDLDREQUE0RCxtQ0FBbUMscUNBQXFDLElBQUksZ0ZBQWdGLE9BQU8sU0FBUyxVQUFVLGNBQWMsY0FBYyxNQUFNLDJCQUEyQixtQ0FBbUMsK0JBQStCLHFCQUFxQix3REFBd0QsOEZBQThGLGFBQWEsU0FBUyxFQUFFLGFBQWEsTUFBTSxlQUFlLDhFQUE4RSxTQUFTLDhDQUE4QyxJQUFJLHNCQUFzQiwwREFBMEQsbUdBQW1HLHVEQUF1RCxzSkFBc0osMEJBQTBCLHlCQUF5QixPQUFPLGlIQUFpSCxjQUFjLHdHQUF3Ryx3SEFBd0gsR0FBRyxnREFBZ0QsNEJBQTRCLDJCQUEyQixFQUFFLHVDQUF1Qyx5QkFBeUIsbUJBQW1CLHlFQUF5RSw0QkFBNEIsNENBQTRDLFlBQVksa0NBQWtDLHVCQUF1QixxR0FBcUcsNEJBQTRCLDBDQUEwQyxZQUFZLHNDQUFzQyx1RUFBdUUsbUJBQW1CLHNCQUFzQixNQUFNLHNCQUFzQixpREFBaUQsV0FBVyxvQkFBb0IsOEJBQThCLDBCQUEwQixZQUFZLEVBQUUsUUFBUSxRQUFRLHdDQUF3Qyw0Q0FBNEMsSUFBSSx5Q0FBeUMsMEdBQTBHLFVBQVUsdUJBQXVCLHNCQUFzQixvQkFBb0IscUJBQXFCLHlEQUF5RCxHQUFHLFVBQVUsdUNBQXVDLHdCQUF3QixzREFBc0QsU0FBUyxHQUFHLHVDQUF1QyxZQUFZLFdBQVcsRUFBRSxLQUFLLGVBQWUscUNBQXFDLHNGQUFzRiwwS0FBMEssb0JBQW9CLHdCQUF3QixvQkFBb0IsWUFBWSxrQkFBa0IsUUFBUSxXQUFXLHdDQUF3QyxTQUFTLE1BQU0saUNBQWlDLHNDQUFzQyxRQUFRLFdBQVcseUZBQXlGLFNBQVMsMkNBQTJDLDZDQUE2QyxPQUFPLEVBQUUsMkJBQTJCLDhEQUE4RCxrQ0FBa0MsRUFBRSwrQkFBK0IsaUNBQWlDLEVBQUUsMEJBQTBCLHdFQUF3RSxxQkFBcUIsRUFBRSwyQkFBMkIsaUJBQWlCLG9DQUFvQyxFQUFFLDJCQUEyQixnREFBZ0QsaUJBQWlCLEVBQUUsd0NBQXdDLDZCQUE2QixnQ0FBZ0MsRUFBRSxzQ0FBc0MsZ0JBQWdCLGdDQUFnQyxFQUFFLDBDQUEwQyx1RUFBdUUsa0JBQWtCLFVBQVUsc0JBQXNCLG9CQUFvQixzQkFBc0IsaURBQWlELElBQUksd0NBQXdDLEdBQUcsRUFBRSxzQ0FBc0MsNE9BQTRPLDJOQUEyTixVQUFVLDBDQUEwQyxnQ0FBZ0MsYUFBYSxLQUFLLHlDQUF5QyxnQ0FBZ0MsYUFBYSxLQUFLLGdFQUFnRSxnQ0FBZ0MsZ0NBQWdDLEtBQUssNE9BQTRPLGdDQUFnQywwTUFBME0sS0FBSywwREFBMEQsRUFBRSx3Q0FBd0MsMENBQTBDLGlXQUFpVyw2QkFBNkIsK1ZBQStWLEdBQUcsRUFBRSw4QkFBOEIsK0hBQStILGdDQUFnQyx1R0FBdUcsa0RBQWtELGdGQUFnRixtREFBbUQsbUJBQW1CLFlBQVksV0FBVyxLQUFLLFdBQVcsK0dBQStHLHFEQUFxRCxZQUFZLElBQUksY0FBYyxpQkFBaUIscUpBQXFKLDhEQUE4RCxjQUFjLDh2Q0FBOHZDLFlBQVksZ0JBQWdCLFFBQVEsc0JBQXNCLDJEQUEyRCxpQkFBaUIsb0RBQW9ELGtIQUFrSCxxQ0FBcUMsa0JBQWtCLFVBQVUsZUFBZSxzSUFBc0ksMEVBQTBFLE9BQU8sd0RBQXdELGlCQUFpQixnQkFBZ0Isa0JBQWtCLGdCQUFnQixzQ0FBc0MsU0FBUyxFQUFFLDZCQUE2QixtQkFBbUIsa0NBQWtDLGVBQWUsa0NBQWtDLHdDQUF3QyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsRUFBRSxJQUFJLGtDQUFrQyxJQUFJLHdDQUF3QyxFQUFFLGNBQWMsRUFBRSxFQUFFLElBQUksa0NBQWtDLElBQUkseUJBQXlCLGNBQWMseUJBQXlCLE9BQU8saUJBQWlCLHlCQUF5Qix3Q0FBd0MsVUFBVSwyQkFBMkIsS0FBSyxpQkFBaUIsNEJBQTRCLEtBQUssVUFBVSxnQkFBZ0IsT0FBTyxpQkFBaUIsb0RBQW9ELHdDQUF3QyxlQUFlLDZFQUE2RSxLQUFLLGtCQUFrQixzQkFBc0IsdUJBQXVCLDJCQUEyQixrQkFBa0IsbUJBQW1CLGdHQUFnRyxtQkFBbUIsbUJBQW1CLE1BQU0sa0JBQWtCLDZDQUE2QyxXQUFXLCtGQUErRixJQUFJLGtGQUFrRixvRUFBb0Usc0dBQXNHLHNDQUFzQyxLQUFLLHNCQUFzQix5QkFBeUIsS0FBSyx3RUFBd0UsMERBQTBELGlHQUFpRyxJQUFJLDhCQUE4Qix3QkFBd0IsMktBQTJLLDBGQUEwRix1QkFBdUIsSUFBSSxpQkFBaUIsdUNBQXVDLG1CQUFtQiw0REFBNEQsdUJBQXVCLHFFQUFxRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUUsY0FBYywwQkFBMEIsZ0VBQWdFLGlCQUFpQiw2REFBNkQsa0NBQWtDLGNBQWMsbUJBQW1CLGNBQWMsNkRBQTZELG1CQUFtQixnQkFBZ0IsSUFBSSx1REFBdUQsVUFBVSxrQkFBa0IsNkJBQTZCLElBQUksaUJBQWlCLFlBQVksdUxBQXVMLDJEQUEyRCxXQUFXLHVCQUF1QiwyREFBMkQsY0FBYyw2Q0FBNkMsOEJBQThCLDBCQUEwQixlQUFlLHFDQUFxQyxxQ0FBcUMsb0RBQW9ELEtBQUssOEJBQThCLGlCQUFpQiwrQkFBK0IsRUFBRSwwS0FBMEssZ0JBQWdCLGNBQWMsa0VBQWtFLEVBQUUsMFpBQTBaLHlKQUF5SixNQUFNLHNFQUFzRSxhQUFhLHNDQUFzQyxtQkFBbUIsTUFBTSxtQkFBbUIsOEVBQThFLGdEQUFnRCxtQkFBbUIsaUJBQWlCLHlEQUF5RCxnREFBZ0QscUJBQXFCLDZCQUE2QixTQUFTLEVBQUUsZ0JBQWdCLG1DQUFtQywyREFBMkQsb0NBQW9DLDJCQUEyQixFQUFFLEtBQUsseURBQXlELG9JQUFvSSxTQUFTLDJDQUEyQyxvQ0FBb0MsMkJBQTJCLEVBQUUsb0NBQW9DLFNBQVMsaUJBQWlCLGdGQUFnRiwwRkFBMEYseUJBQXlCLGtFQUFrRSxpQkFBaUIscUZBQXFGLGVBQWUsMEJBQTBCLGVBQWUscURBQXFELG9CQUFvQixpQkFBaUIsc0NBQXNDLCtCQUErQixtQkFBbUIsdUNBQXVDLHNEQUFzRCxrRUFBa0UsOENBQThDLHFDQUFxQyxtQ0FBbUMsS0FBSyx5QkFBeUIsWUFBWSxFQUFFLEVBQUUsNkJBQTZCLDJDQUEyQyxnRUFBZ0UsSUFBSSxlQUFlLG9FQUFvRSxzS0FBc0ssTUFBTSxFQUFFLFVBQVUsa0lBQWtJLFNBQVMscUNBQXFDLDhCQUE4QixTQUFTLG1CQUFtQix1RkFBdUYsNEJBQTRCLEdBQUcsaUJBQWlCLGdGQUFnRixFQUFFLEVBQUUsdUNBQXVDLFlBQVksb0JBQW9CLEtBQUsseUJBQXlCLGlGQUFpRixTQUFTLGtCQUFrQixTQUFTLEtBQUssaUJBQWlCLG9CQUFvQixtQkFBbUIsOEJBQThCLGtCQUFrQixvQkFBb0IsbUNBQW1DLGdFQUFnRSx3SEFBd0gsU0FBUyxZQUFZLFNBQVMsOEtBQThLLG9CQUFvQixZQUFZLFdBQVcsK0NBQStDLFdBQVcsZ0JBQWdCLElBQUksc0JBQXNCLGVBQWUsOENBQThDLHlCQUF5QixpQkFBaUIsY0FBYyxnQ0FBZ0MseUVBQXlFLDRDQUE0QyxzREFBc0QsRUFBRSxtQ0FBbUMsK0RBQStELGdCQUFnQixpQkFBaUIsTUFBTSxpQkFBaUIsMENBQTBDLGtGQUFrRiw4Q0FBOEMsaUJBQWlCLGNBQWMsMENBQTBDLCtEQUErRCx5Q0FBeUMsaUJBQWlCLFVBQVUsd0NBQXdDLCtCQUErQixnREFBZ0QsVUFBVSx3Q0FBd0MsZ0NBQWdDLHNCQUFzQiw4Q0FBOEMsMEJBQTBCLFlBQVksc0NBQXNDLFNBQVMsaUJBQWlCLDBEQUEwRCxTQUFTLGdGQUFnRixzQkFBc0IsbUVBQW1FLGtCQUFrQiwyQ0FBMkMsOERBQThELDZCQUE2QixhQUFhLCtCQUErQixtQkFBbUIsNEJBQTRCLDJDQUEyQyxtRkFBbUYsc0NBQXNDLFNBQVMsZUFBZSxzQkFBc0IsdUNBQXVDLFNBQVMsc0ZBQXNGLDZEQUE2RCxRQUFRLHNDQUFzQyxXQUFXLDZGQUE2RixTQUFTLDJDQUEyQywwQkFBMEIsWUFBWSxzQ0FBc0MsU0FBUyxxRUFBcUUsMkRBQTJELGFBQWEsSUFBSSx5RkFBeUYscUVBQXFFLGlDQUFpQyxpREFBaUQsSUFBSSxzQ0FBc0MsNENBQTRDLEVBQUUsV0FBVyxLQUFLLElBQUk7QUFDanBzbUI7QUFDQSxnQkFBZ0IsRUFBRSxRQUFRO0FBQzFCLHNCQUFzQixFQUFFLFFBQVE7QUFDaEMsV0FBVyxFQUFFLFFBQVE7O0FBRXJCO0FBQ0EsSUFBSTtBQUNKLElBQUk7QUFDSixJQUFJO0FBQ0osSUFBSTs7QUFFSjtBQUNBO0FBQ0EsU0FBUyxFQUFFLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLEVBQUUsUUFBUTtBQUMzQixpQkFBaUIsRUFBRSxRQUFRO0FBQzNCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0JBQWtCLEVBQUUsUUFBUTtBQUM1QixvQkFBb0IsRUFBRSxRQUFRO0FBQzlCLGFBQWEsRUFBRSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLGFBQWEsRUFBRSxRQUFRLFFBQVEsWUFBWTtBQUMzQyxFQUFFLHNEQUFzRCxJQUFJLGVBQWUsMkRBQTJELElBQUksaUJBQWlCLDBEQUEwRCxJQUFJLGdCQUFnQixHQUFHLGdCQUFnQixzQ0FBc0MsU0FBUyxxRkFBcUYsZ0JBQWdCLFdBQVcsc0RBQXNELGVBQWUsNERBQTRELGVBQWUsd0NBQXdDLGlCQUFpQixzQkFBc0IsZ0JBQWdCLDRCQUE0QixhQUFhLGtCQUFrQjtBQUNyc0IsaUJBQWlCLEVBQUUsUUFBUSxNQUFNLFlBQVksRUFBRSxXQUFXO0FBQzFELG1CQUFtQixFQUFFLFFBQVE7QUFDN0I7QUFDQSxpQkFBaUIsRUFBRSxRQUFRLE1BQU0sYUFBYSxFQUFFLFVBQVU7QUFDMUQsbUJBQW1CLEVBQUUsUUFBUTtBQUM3QjtBQUNBLGlCQUFpQixFQUFFLFFBQVEsTUFBTSxXQUFXLEVBQUUsWUFBWTtBQUMxRCxtQkFBbUIsRUFBRSxRQUFRO0FBQzdCLE1BQU0sb0JBQW9CO0FBQzFCLHVCQUF1QixFQUFFLFFBQVE7QUFDakM7QUFDQSx1QkFBdUIsRUFBRSxRQUFRO0FBQ2pDLE1BQU0scUJBQXFCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLE1BQU0sbUJBQW1CO0FBQ3pCLG9CQUFvQixFQUFFLFFBQVE7QUFDOUIsc0JBQXNCLEVBQUUsUUFBUTs7QUFFaEM7QUFDQSxzQkFBc0IsRUFBRSxRQUFRO0FBQ2hDOztBQUVBO0FBQ0Esc0JBQXNCLEVBQUUsUUFBUTtBQUNoQzs7QUFFQTtBQUNBLHdCQUF3QixFQUFFLFFBQVE7QUFDbEM7QUFDQTtBQUNBLG9CQUFvQixFQUFFLFFBQVE7QUFDOUIsc0JBQXNCLEVBQUUsUUFBUTtBQUNoQyxlQUFlLEVBQUUsUUFBUTs7QUFFekI7QUFDQSxzQkFBc0IsRUFBRSxRQUFRO0FBQ2hDOztBQUVBO0FBQ0Esc0JBQXNCLEVBQUUsUUFBUTtBQUNoQzs7QUFFQTtBQUNBLHdCQUF3QixFQUFFLFFBQVE7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUUsUUFBUTs7QUFFekI7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0JBQXdCLEVBQUUsUUFBUTtBQUNsQztBQUNBLFFBQVEsc0JBQXNCLG1FQUFtRSxrQkFBa0IsMkNBQTJDLDhEQUE4RCw2QkFBNkIsYUFBYSwrQkFBK0IsbUJBQW1CLDRCQUE0QiwyQ0FBMkMsbUZBQW1GLHNDQUFzQyxTQUFTLDRCQUE0QixzQkFBc0IsOENBQThDLDBCQUEwQixZQUFZLHNDQUFzQyxTQUFTLHlCQUF5QixpREFBaUQsOENBQThDLE9BQU8sdUNBQXVDLG9EQUFvRCxFQUFFLHNCQUFzQixvQkFBb0IsRUFBRSxHQUFHO0FBQ2o4QjtBQUNBLGdCQUFnQixFQUFFLFFBQVE7QUFDMUIsNkJBQTZCLEVBQUUsUUFBUTtBQUN2QyxhQUFhLEVBQUUsUUFBUSxnQkFBZ0IsRUFBRSxFQUFFLFFBQVE7QUFDbkQsTUFBTSxFQUFFLFFBQVEsZUFBZTtBQUMvQjtBQUNBLElBQUk7QUFDSixTQUFTLEVBQUUsUUFBUTtBQUNuQjtBQUNBLGFBQWEsRUFBRSxRQUFRLGVBQWUsRUFBRSxFQUFFLFFBQVEsZUFBZTtBQUNqRSxNQUFNLEVBQUUsUUFBUTtBQUNoQjtBQUNBLEVBQUUscUJBQXFCLDhDQUE4QywwQkFBMEIsWUFBWSxzQ0FBc0MsU0FBUyxzREFBc0QsbUdBQW1HLDRDQUE0QywwQ0FBMEMsMkRBQTJELElBQUksbUNBQW1DLEdBQUcsd0dBQXdHLFFBQVEsa0NBQWtDLGlDQUFpQyxFQUFFLHNDQUFzQyx1UUFBdVEsZUFBZSxvRUFBb0UsRUFBRSx1QkFBdUIsaUJBQWlCLGtDQUFrQyxvQkFBb0IsRUFBRSxtREFBbUQscUdBQXFHLG9CQUFvQixrREFBa0QsR0FBRyxJQUFJLHdEQUF3RCw4QkFBOEIsRUFBRSwwQkFBMEIsb0JBQW9CLEVBQUUsSUFBSSxHQUFHLHFFQUFxRTtBQUM5akQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUUsUUFBUTtBQUNyQixJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLEVBQUUsY0FBYztBQUM5QixTQUFTLEVBQUUsY0FBYztBQUN6QixhQUFhLEVBQUUsU0FBUztBQUN4QjtBQUNBLGdCQUFnQixFQUFFLFFBQVE7QUFDMUIsMEJBQTBCLEVBQUUsUUFBUTtBQUNwQyw2QkFBNkIsRUFBRSxRQUFRO0FBQ3ZDO0FBQ0E7QUFDQSxTQUFTLEVBQUUsUUFBUTtBQUNuQjtBQUNBLGlCQUFpQixFQUFFLFFBQVE7QUFDM0I7QUFDQSxhQUFhLEVBQUUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHdCQUF3QixFQUFFLFFBQVE7QUFDbEM7QUFDQTs7QUFFQTtBQUNBLHdCQUF3QixFQUFFLFFBQVE7QUFDbEMsNEJBQTRCLEVBQUUsUUFBUTtBQUN0QywrQkFBK0IsRUFBRSxRQUFRO0FBQ3pDOztBQUVBO0FBQ0EsNEJBQTRCLEVBQUUsUUFBUTtBQUN0QywrQkFBK0IsRUFBRSxRQUFRO0FBQ3pDO0FBQ0EsRUFBRSxzQkFBc0IsbUVBQW1FLGtCQUFrQiwyQ0FBMkMsOERBQThELDZCQUE2QixhQUFhLCtCQUErQixtQkFBbUIsNEJBQTRCLDJDQUEyQyxtRkFBbUYsc0NBQXNDLFNBQVMsY0FBYyxjQUFjLE1BQU0sc0NBQXNDLFNBQVMsc0VBQXNFLG1DQUFtQyxzQkFBc0IsOENBQThDLDBCQUEwQixZQUFZLHNDQUFzQyxTQUFTLDRCQUE0QixtR0FBbUcsdUJBQXVCLGdCQUFnQiwyQkFBMkIsK0JBQStCLEtBQUssZ0VBQWdFLGlDQUFpQyxLQUFLLG1HQUFtRyxRQUFRLEVBQUUsc0VBQXNFLDRCQUE0QixpQ0FBaUMsMkJBQTJCLCtCQUErQixRQUFRLDBCQUEwQix5Q0FBeUMsd0JBQXdCLHNDQUFzQyxJQUFJLHNCQUFzQixxREFBcUQsRUFBRSxtRkFBbUYsd0JBQXdCLEVBQUUsc0NBQXNDLElBQUksNkJBQTZCLDBCQUEwQixvQ0FBb0MsRUFBRSxzRUFBc0UsRUFBRSxtREFBbUQsK0VBQStFLHlDQUF5Qyw2RUFBNkUsR0FBRyxHQUFHLElBQUksZ0ZBQWdGLDhDQUE4QyxnTkFBZ04sK0JBQStCLHdDQUF3QyxFQUFFLEdBQUcsR0FBRyxTQUFTLCtKQUErSjtBQUNoeUY7QUFDQSxhQUFhLEVBQUUsZUFBZTtBQUM5QjtBQUNBLGlCQUFpQixFQUFFLFFBQVE7QUFDM0IsaUJBQWlCLEVBQUUsUUFBUTtBQUMzQjtBQUNBLGtCQUFrQixFQUFFLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLGdCQUFnQixzQ0FBc0MsU0FBUyxnQ0FBZ0MsZ0JBQWdCLG9DQUFvQyxzQ0FBc0MsK0ZBQStGLGFBQWEsb0dBQW9HLGlCQUFpQixFQUFFLDZHQUE2RyxTQUFTLHdEQUF3RCxzQkFBc0IsOENBQThDLDBCQUEwQixZQUFZLHNDQUFzQyxTQUFTLDJCQUEyQixxRkFBcUYsc0NBQXNDLHNCQUFzQixNQUFNLFdBQVcsVUFBVSxtQkFBbUIseUNBQXlDLGtCQUFrQixrQkFBa0IsRUFBRSw4SEFBOEgsRUFBRSxvQ0FBb0MsZ1BBQWdQLE1BQU0sc0VBQXNFLEVBQUUsMEVBQTBFLDJJQUEySSxpSEFBaUgsNEJBQTRCLEVBQUUsb0NBQW9DLHFCQUFxQixFQUFFLGlCQUFpQixHQUFHLE9BQU8scUJBQXFCLElBQUk7QUFDbjhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssdUdBQXVHO0FBQzVHLG1CQUFtQixFQUFFLFFBQVE7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLEVBQUUsUUFBUTtBQUM3QixtQkFBbUIsRUFBRSxxQkFBcUI7QUFDMUMsc0JBQXNCLEVBQUUscUJBQXFCO0FBQzdDLG9CQUFvQixFQUFFLFFBQVE7QUFDOUIscUJBQXFCLEVBQUUsUUFBUTs7QUFFL0I7QUFDQSxnQ0FBZ0MsRUFBRSxRQUFRO0FBQzFDLGlDQUFpQyxFQUFFLFFBQVE7QUFDM0M7O0FBRUE7QUFDQSxtQ0FBbUMsRUFBRSxRQUFRO0FBQzdDLG9DQUFvQyxFQUFFLFFBQVE7QUFDOUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7O0FBRUE7QUFDQTtBQUNBLGVBQWUsRUFBRSxRQUFRO0FBQ3pCLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQSxFQUFFLHNCQUFzQixtRUFBbUUsa0JBQWtCLDJDQUEyQyw4REFBOEQsNkJBQTZCLGFBQWEsK0JBQStCLG1CQUFtQiw0QkFBNEIsMkNBQTJDLG1GQUFtRixzQ0FBc0MsU0FBUyw0QkFBNEIsc0JBQXNCLDhDQUE4QywwQkFBMEIsWUFBWSxzQ0FBc0MsU0FBUyw4Q0FBOEMsMkRBQTJELGlDQUFpQyxxQkFBcUIsMEJBQTBCLG9CQUFvQixLQUFLLHNCQUFzQixhQUFhLDBDQUEwQyxjQUFjLFNBQVMsaUJBQWlCLDhEQUE4RCxJQUFJLG9HQUFvRywrQkFBK0IsNkNBQTZDLEVBQUUsTUFBTSw0QkFBNEIsTUFBTSxvQ0FBb0MsaUJBQWlCLE9BQU8sNkNBQTZDLEVBQUUsR0FBRyxVQUFVLDZCQUE2QixJQUFJLGtDQUFrQyxNQUFNLEVBQUUsd0NBQXdDLDBHQUEwRyxFQUFFLElBQUk7QUFDOW1EO0FBQ0E7O0FBRUEsc0JBQXNCLEVBQUUsUUFBUTtBQUNoQzs7QUFFQTtBQUNBO0FBQ0EsRUFBRSxzQkFBc0IsOENBQThDLDBCQUEwQixZQUFZLHNDQUFzQyxTQUFTLDZCQUE2QiwyREFBMkQsc0JBQXNCLDBHQUEwRyxJQUFJLG1FQUFtRSxzQkFBc0IsU0FBUyxxREFBcUQsS0FBSyxHQUFHLGlCQUFpQix3RkFBd0Ysb0JBQW9CLHdCQUF3QixJQUFJLE9BQU8sK0JBQStCLCtDQUErQyxNQUFNLDZCQUE2QixxQ0FBcUMsTUFBTSxFQUFFLHFDQUFxQyxnREFBZ0QsMkRBQTJELCtCQUErQixrQkFBa0IsU0FBUyxlQUFlLGlDQUFpQyxFQUFFLHdEQUF3RCxxSEFBcUgsR0FBRyxHQUFHO0FBQ253QztBQUNBO0FBQ0EsYUFBYSxFQUFFLFFBQVE7QUFDdkI7O0FBRUE7QUFDQTs7QUFFQSw0QkFBNEIsRUFBRSxRQUFRO0FBQ3RDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRSxzQkFBc0IsbUVBQW1FLGtCQUFrQiwyQ0FBMkMsOERBQThELDZCQUE2QixhQUFhLCtCQUErQixtQkFBbUIsNEJBQTRCLGdFQUFnRSxtQ0FBbUMsc0JBQXNCLEVBQUUsZUFBZSxZQUFZLHlDQUF5Qyw0QkFBNEIsU0FBUyw2RkFBNkYsaUJBQWlCLHNDQUFzQyxTQUFTLDJCQUEyQiwyREFBMkQsb0JBQW9CLGdEQUFnRCxJQUFJLE1BQU0sZUFBZSxHQUFHLGtDQUFrQyx3QkFBd0IsS0FBSyw0QkFBNEIsRUFBRSxvREFBb0QsZUFBZSw2QkFBNkIsNEJBQTRCLEVBQUUsV0FBVyw4QkFBOEIsaURBQWlELHFDQUFxQyxvQ0FBb0MsS0FBSyxnQkFBZ0IsRUFBRSx3Q0FBd0Msc0JBQXNCLG9CQUFvQixnQkFBZ0IsRUFBRSxrRUFBa0UsZ0RBQWdELEtBQUssZUFBZSxFQUFFLHdDQUF3Qyx3QkFBd0IsRUFBRSxJQUFJLElBQUk7QUFDaGxELG1CQUFtQixFQUFFLFFBQVE7QUFDN0I7QUFDQSxJQUFJLEVBQUUsYUFBYTtBQUNuQixnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGNBQWMsRUFBRSxRQUFRO0FBQ3hCLGFBQWEsRUFBRSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQSxJQUFJLEVBQUUsaUJBQWlCO0FBQ3ZCLDBCQUEwQjtBQUMxQjs7QUFFQTtBQUNBLHdCQUF3QixFQUFFLFFBQVE7O0FBRWxDLE1BQU07QUFDTjtBQUNBOztBQUVBLE1BQU0sR0FBRyxJQUFJO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsRUFBRSxzQkFBc0IsOENBQThDLDBCQUEwQixZQUFZLHNDQUFzQyxTQUFTLDRCQUE0QixpREFBaUQscUJBQXFCLGdCQUFnQixJQUFJLGdDQUFnQywrQkFBK0IsMkJBQTJCLHlCQUF5QixFQUFFLDhCQUE4QixlQUFlLFlBQVksR0FBRztBQUNsYyxZQUFZLEVBQUUsUUFBUTtBQUN0QixXQUFXLEVBQUUsUUFBUTtBQUNyQixpQkFBaUIsRUFBRSxRQUFROztBQUUzQixtQkFBbUIsRUFBRSxRQUFRO0FBQzdCO0FBQ0EsWUFBWSxFQUFFLFFBQVE7QUFDdEIsV0FBVyxFQUFFLFFBQVE7QUFDckIsaUJBQWlCLEVBQUUsUUFBUTtBQUMzQjtBQUNBLFlBQVksRUFBRSxRQUFRO0FBQ3RCLFdBQVcsRUFBRSxRQUFRO0FBQ3JCLGlCQUFpQixFQUFFLFFBQVE7O0FBRTNCLG1CQUFtQixFQUFFLFFBQVE7O0FBRTdCO0FBQ0EsRUFBRSxnQkFBZ0Isc0NBQXNDLFNBQVMsMEJBQTBCLGdCQUFnQixxQkFBcUIscUNBQXFDLDRCQUE0Qiw2QkFBNkIsYUFBYSx5QkFBeUIsYUFBYSxRQUFRLFlBQVksK0VBQStFLGtFQUFrRSxVQUFVLHFCQUFxQixtRUFBbUUsa0JBQWtCLDJDQUEyQyw4REFBOEQsNkJBQTZCLGFBQWEsK0JBQStCLG1CQUFtQiw0QkFBNEIsMkNBQTJDLG1GQUFtRixzQ0FBc0MsU0FBUyxlQUFlLHNCQUFzQiw4Q0FBOEMsMEJBQTBCLFlBQVksc0NBQXNDLFNBQVMsa0tBQWtLLDZHQUE2RyxzUEFBc1AsbUZBQW1GLElBQUksTUFBTSwwRUFBMEUscUJBQXFCLDBLQUEwSyxzQkFBc0Isc0RBQXNELE9BQU8sTUFBTSxpQkFBaUIsZ0NBQWdDLDhFQUE4RSxxREFBcUQsNEJBQTRCLG1FQUFtRSxpQkFBaUIsRUFBRSxpS0FBaUssK0JBQStCLDBDQUEwQyx5REFBeUQsRUFBRSxrQkFBa0IsNkJBQTZCLGtDQUFrQyxtQkFBbUIsRUFBRSxxQ0FBcUMsbUZBQW1GLEVBQUUscUVBQXFFLCtJQUErSSxJQUFJLEVBQUUsaURBQWlELE9BQU8saUVBQWlFLGFBQWEsNkNBQTZDLElBQUksb0NBQW9DLEtBQUssRUFBRSxHQUFHLFFBQVEsR0FBRyxFQUFFLE1BQU0sR0FBRyxPQUFPLElBQUk7QUFDL3lHO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNCQUFzQixFQUFFLFFBQVE7QUFDaEMsZ0JBQWdCLEVBQUUsa0JBQWtCLFVBQVUsRUFBRTtBQUNoRCxZQUFZLEVBQUUsb0JBQW9CLG1CQUFtQixzQkFBc0I7QUFDM0UsbUJBQW1CLEVBQUUsWUFBWTtBQUNqQztBQUNBLDBCQUEwQixFQUFFLGtCQUFrQixNQUFNLEVBQUUsSUFBSTtBQUMxRCxnQkFBZ0IsRUFBRSxrQkFBa0IsVUFBVSxFQUFFO0FBQ2hEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxnQkFBZ0Isc0NBQXNDLFNBQVMsaUNBQWlDLGlEQUFpRCxpTkFBaU4sMEJBQTBCLCtIQUErSCxJQUFJLGFBQWEsTUFBTSxVQUFVLCtCQUErQixzREFBc0QsTUFBTSxpQkFBaUIsa0RBQWtELE1BQU0sdUJBQXVCLDhEQUE4RCxNQUFNLHFCQUFxQiw0Q0FBNEMsSUFBSSxnQkFBZ0IsSUFBSSxzQkFBc0IsOENBQThDLDBCQUEwQixZQUFZLHNDQUFzQyxTQUFTLHVDQUF1QyxpREFBaUQsZ0NBQWdDLHFFQUFxRSxrQ0FBa0MsNERBQTRELG1EQUFtRCxFQUFFLDJFQUEyRSxZQUFZLEVBQUUsc0JBQXNCLGdEQUFnRCxFQUFFLDJDQUEyQyxzQ0FBc0MsRUFBRSxXQUFXLHVEQUF1RCxhQUFhLEVBQUUsd0NBQXdDLGtDQUFrQyxFQUFFLElBQUksR0FBRyxFQUFFO0FBQ3p2RDtBQUNBLFlBQVksRUFBRSw0QkFBNEI7QUFDMUM7QUFDQTtBQUNBLEVBQUUsc0JBQXNCLDhDQUE4QywwQkFBMEIsWUFBWSxzQ0FBc0MsU0FBUywwQkFBMEIsaURBQWlELG1CQUFtQixPQUFPLDBCQUEwQix1QkFBdUIsV0FBVywrQ0FBK0MsR0FBRyxFQUFFO0FBQ2hYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsRUFBRSxRQUFRO0FBQzdCLGFBQWEsRUFBRSxRQUFRLFlBQVksV0FBVztBQUM5QyxFQUFFLHNCQUFzQiw4Q0FBOEMsMEJBQTBCLFlBQVksc0NBQXNDLFNBQVMsMENBQTBDLHVDQUF1QyxnRUFBZ0UsOENBQThDLEVBQUUsdUJBQXVCLEVBQUUsR0FBRztBQUN4WDtBQUNBLGFBQWEsRUFBRSxRQUFRLGVBQWU7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsRUFBRSxRQUFRO0FBQ2hDLEVBQUUsc0JBQXNCLDhDQUE4QywwQkFBMEIsWUFBWSxzQ0FBc0MsU0FBUyw4Q0FBOEMsK0VBQStFLHVDQUF1Qyw2REFBNkQsSUFBSSwrQkFBK0IsaUNBQWlDLGdDQUFnQyxpQ0FBaUMsT0FBTyw2QkFBNkIsd0JBQXdCLHFDQUFxQyx1QkFBdUIsRUFBRSxzQkFBc0IseURBQXlELEVBQUUsOEJBQThCLDRCQUE0QixFQUFFLFdBQVcsaUNBQWlDLGFBQWEsRUFBRSxzQkFBc0IsNENBQTRDLEVBQUUsSUFBSSwrQ0FBK0MsR0FBRyxHQUFHO0FBQ2g4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLEVBQUUsUUFBUTtBQUM3QixhQUFhLEVBQUUsUUFBUSxRQUFRLFlBQVksSUFBSSxXQUFXO0FBQzFEO0FBQ0EsYUFBYSxFQUFFLGVBQWUsb0JBQW9CLFlBQVksY0FBYyxXQUFXO0FBQ3ZGLGlCQUFpQixFQUFFLE9BQU87QUFDMUI7QUFDQSxtQkFBbUIsRUFBRSxRQUFRO0FBQzdCLHNCQUFzQixFQUFFLG1CQUFtQjtBQUMzQyxXQUFXLEVBQUUsbUJBQW1CO0FBQ2hDLFlBQVksRUFBRSxtQkFBbUI7QUFDakM7O0FBRUE7QUFDQSxhQUFhLEVBQUUsUUFBUTtBQUN2QixjQUFjLEVBQUUsUUFBUTtBQUN4QjtBQUNBO0FBQ0EsV0FBVyxFQUFFLFFBQVE7QUFDckIsYUFBYSxFQUFFLFFBQVEsUUFBUSxlQUFlLElBQUksV0FBVztBQUM3RDtBQUNBO0FBQ0EsV0FBVyxFQUFFLFFBQVE7QUFDckIsWUFBWSxFQUFFLFFBQVE7QUFDdEI7QUFDQTs7QUFFQTtBQUNBLGFBQWEsRUFBRSxRQUFRO0FBQ3ZCLGNBQWMsRUFBRSxRQUFRO0FBQ3hCO0FBQ0EsRUFBRSxzQkFBc0IsbUVBQW1FLGtCQUFrQiwyQ0FBMkMsOERBQThELDZCQUE2QixhQUFhLCtCQUErQixtQkFBbUIsNEJBQTRCLDJDQUEyQyxtRkFBbUYsc0NBQXNDLFNBQVMsZUFBZSxnQkFBZ0Isc0NBQXNDLFNBQVMsNENBQTRDLDBCQUEwQix5REFBeUQsWUFBWSxVQUFVLDBLQUEwSywyQkFBMkIsT0FBTyxRQUFRLEdBQUcseUNBQXlDLEtBQUssWUFBWSxnQkFBZ0IsR0FBRyxtQ0FBbUMsT0FBTyxRQUFRLEdBQUcsZ0RBQWdELEtBQUssWUFBWSxTQUFTLEdBQUcsbUNBQW1DLGdDQUFnQyxtQ0FBbUMsT0FBTyxxQkFBcUIsS0FBSyxzQkFBc0IsU0FBUyxHQUFHLHlEQUF5RCxRQUFRLHVHQUF1RyxLQUFLLHNDQUFzQyxhQUFhLE1BQU0sNkNBQTZDLFFBQVEsK0dBQStHLHVDQUF1Qyx3RUFBd0UscUNBQXFDLDREQUE0RCxhQUFhLEVBQUUsV0FBVyxzQkFBc0IsWUFBWSxjQUFjLG9CQUFvQixNQUFNLGtCQUFrQixNQUFNLDRCQUE0QixNQUFNLDZCQUE2QixNQUFNLGdCQUFnQixNQUFNLHFCQUFxQixNQUFNLG9CQUFvQixNQUFNLG1CQUFtQixtREFBbUQsMkNBQTJDLHNCQUFzQixnQkFBZ0Isc0NBQXNDLFNBQVMsb0NBQW9DLDBCQUEwQixtREFBbUQsK0JBQStCLDhFQUE4RSxPQUFPLHVFQUF1RSxNQUFNLE9BQU8sK0NBQStDLE1BQU0saUJBQWlCLE1BQU0scURBQXFELGlCQUFpQixtQkFBbUIsK0VBQStFLE1BQU0sd0RBQXdELGlCQUFpQixNQUFNLE9BQU8scURBQXFELDhGQUE4Riw4REFBOEQsTUFBTSxNQUFNLGlCQUFpQix3QkFBd0IsT0FBTyxtQ0FBbUMsaUJBQWlCLGdCQUFnQixzQ0FBc0MsU0FBUyxnQ0FBZ0MsMEJBQTBCLDJCQUEyQiwyQkFBMkIscUJBQXFCLEVBQUUsNEJBQTRCLHNGQUFzRixhQUFhLGdDQUFnQyxrQkFBa0IsTUFBTSxpQkFBaUIsa0NBQWtDLHNCQUFzQixFQUFFLHFCQUFxQixFQUFFLE9BQU8saUJBQWlCLElBQUksR0FBRyx5QkFBeUIsZ0JBQWdCLFVBQVUsZ0JBQWdCLHNDQUFzQyxTQUFTLGlEQUFpRCxnQkFBZ0IsbUlBQW1JLGVBQWUsVUFBVSwyQ0FBMkMsT0FBTyxLQUFLLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixTQUFTLGFBQWEsa0JBQWtCLE1BQU0sWUFBWSw2QkFBNkIsMENBQTBDLFdBQVcsNkJBQTZCLEVBQUUsVUFBVSxzQkFBc0IsOENBQThDLDBCQUEwQixZQUFZLHNDQUFzQyxTQUFTLDZIQUE2SCxpREFBaUQ7QUFDN3NKO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLEVBQUUsUUFBUTtBQUNoQyxhQUFhLEVBQUUsUUFBUSxNQUFNLFlBQVksSUFBSSxZQUFZO0FBQ3pEO0FBQ0E7QUFDQSxhQUFhLEVBQUUsUUFBUSxRQUFRLFlBQVksSUFBSSxXQUFXO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixFQUFFLFFBQVE7QUFDN0Isc0JBQXNCLEVBQUUsNkJBQTZCOztBQUVyRDtBQUNBLHdCQUF3QixFQUFFLGtCQUFrQjtBQUM1QztBQUNBO0FBQ0EsYUFBYSxFQUFFLGVBQWUsb0JBQW9CLFlBQVksY0FBYyxXQUFXO0FBQ3ZGLGlCQUFpQixFQUFFLE9BQU87QUFDMUI7QUFDQTs7QUFFQTtBQUNBLFlBQVksRUFBRSxrQkFBa0I7QUFDaEMsY0FBYyxFQUFFLGtCQUFrQjtBQUNsQztBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUUsa0JBQWtCO0FBQy9CLGFBQWEsRUFBRSxRQUFRLFFBQVEsZUFBZSxJQUFJLFdBQVc7QUFDN0Q7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRSxzQkFBc0IsbUVBQW1FLGtCQUFrQiwyQ0FBMkMsOERBQThELDZCQUE2QixhQUFhLCtCQUErQixtQkFBbUIsNEJBQTRCLDJDQUEyQyxtRkFBbUYsc0NBQXNDLFNBQVMsZUFBZSxzQkFBc0IsdUNBQXVDLFNBQVMsc0ZBQXNGLDZEQUE2RCxRQUFRLHNDQUFzQyxXQUFXLDZGQUE2RixTQUFTLDJDQUEyQywwQkFBMEIsWUFBWSxzQ0FBc0MsU0FBUyxrQkFBa0IscUVBQXFFLGFBQWEsSUFBSSwyRUFBMkUsb0VBQW9FLHFDQUFxQyw0QkFBNEIsYUFBYSwyQ0FBMkMsWUFBWSxFQUFFLHFDQUFxQyw4QkFBOEIsOEJBQThCLFlBQVksRUFBRSxzQ0FBc0MsSUFBSSx5QkFBeUIsbUNBQW1DLGdCQUFnQiw2Q0FBNkMsR0FBRyxJQUFJLElBQUk7QUFDN3BEO0FBQ0EsU0FBUyxFQUFFLFFBQVE7QUFDbkIsb0JBQW9CLEVBQUUsWUFBWTtBQUNsQyxpQkFBaUIsRUFBRSxRQUFRO0FBQzNCO0FBQ0EsaUJBQWlCLEVBQUUsUUFBUTtBQUMzQixlQUFlLEVBQUUsUUFBUTs7QUFFekI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLEVBQUUsb0JBQW9CO0FBQzVCOztBQUVBLGdCQUFnQixFQUFFLG9CQUFvQjtBQUN0QztBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLEVBQUUsUUFBUTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLEVBQUUsUUFBUTtBQUNwQjtBQUNBO0FBQ0EsZ0JBQWdCLEVBQUUsb0JBQW9CO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGdCQUFnQjtBQUNoQix3QkFBd0IsRUFBRSxRQUFRLGNBQWM7QUFDaEQ7QUFDQSxpQkFBaUI7QUFDakIsa0JBQWtCLEVBQUUsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsc0JBQXNCLHVDQUF1QyxTQUFTLHNGQUFzRiw2REFBNkQsUUFBUSxzQ0FBc0MsV0FBVyw2RkFBNkYsU0FBUywyQ0FBMkMsMEJBQTBCLFlBQVksc0NBQXNDLFNBQVMsaUJBQWlCLGlEQUFpRCxZQUFZLElBQUksZ0JBQWdCLDBCQUEwQixtQkFBbUIscUJBQXFCLEVBQUUsZ0NBQWdDLElBQUksV0FBVyxJQUFJO0FBQ250QixnQkFBZ0IsRUFBRSxRQUFRO0FBQzFCLG1CQUFtQixFQUFFLFFBQVE7QUFDN0IsV0FBVztBQUNYLGVBQWUsRUFBRSxRQUFRO0FBQ3pCLGVBQWUsRUFBRSxRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLEVBQUUsUUFBUTtBQUMxQixFQUFFLHNCQUFzQixtRUFBbUUsa0JBQWtCLDJDQUEyQyw4REFBOEQsNkJBQTZCLGFBQWEsK0JBQStCLG1CQUFtQiw0QkFBNEIsMkNBQTJDLG1GQUFtRixzQ0FBc0MsU0FBUyxlQUFlLHNCQUFzQixtRUFBbUUsa0JBQWtCLDJDQUEyQyw4REFBOEQsNkJBQTZCLGFBQWEsK0JBQStCLG1CQUFtQiw0QkFBNEIsZ0VBQWdFLG1DQUFtQyxzQkFBc0IsRUFBRSxlQUFlLFlBQVkseUNBQXlDLDRCQUE0QixTQUFTLDZGQUE2RixnQkFBZ0Isb0NBQW9DLFNBQVMsc0ZBQXNGLDZEQUE2RCxRQUFRLHNDQUFzQyxXQUFXLDZGQUE2RixTQUFTLDJDQUEyQywwQkFBMEIsWUFBWSxzQ0FBc0MsU0FBUyxvQkFBb0Isa0ZBQWtGLGVBQWUsSUFBSSwrQkFBK0IsMkNBQTJDLDRFQUE0RSxtQkFBbUIsZ0NBQWdDLGtCQUFrQixNQUFNLGtDQUFrQywrQkFBK0IsRUFBRSw4Q0FBOEMsb0lBQW9JLG1CQUFtQix1QkFBdUIseUhBQXlILGVBQWUscUhBQXFILEdBQUcsR0FBRyxJQUFJO0FBQ3RnRjtBQUNBLGFBQWEsRUFBRSxRQUFRLE1BQU0sWUFBWTtBQUN6QztBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsRUFBRSxRQUFRLE1BQU0sV0FBVztBQUM3QyxzQkFBc0IsRUFBRSxRQUFRO0FBQ2hDLHNCQUFzQixFQUFFLFFBQVE7QUFDaEM7QUFDQTtBQUNBLGFBQWEsRUFBRSxRQUFRLE1BQU0sWUFBWSxFQUFFLFdBQVc7QUFDdEQsa0JBQWtCLEVBQUUsUUFBUSxNQUFNLFdBQVc7QUFDN0M7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRSxRQUFRO0FBQ2xDLGFBQWEsRUFBRSxRQUFRO0FBQ3ZCLGlCQUFpQixFQUFFLFFBQVE7QUFDM0Isd0JBQXdCLEVBQUUsUUFBUTtBQUNsQzs7QUFFQTtBQUNBLHdCQUF3QixFQUFFLFFBQVEsMEJBQTBCO0FBQzVELGFBQWEsRUFBRSxRQUFRO0FBQ3ZCLGlCQUFpQixFQUFFLFFBQVE7QUFDM0I7QUFDQTs7QUFFQTtBQUNBLHdCQUF3QixFQUFFLFFBQVEsMEJBQTBCO0FBQzVELGFBQWEsRUFBRSxRQUFRO0FBQ3ZCLGlCQUFpQixFQUFFLFFBQVE7O0FBRTNCO0FBQ0EsZUFBZSxFQUFFLFFBQVE7QUFDekI7QUFDQTs7QUFFQTtBQUNBLHdCQUF3QixFQUFFLFFBQVEsMEJBQTBCO0FBQzVELGFBQWEsRUFBRSxRQUFRO0FBQ3ZCLGlCQUFpQixFQUFFLFFBQVE7QUFDM0I7O0FBRUE7QUFDQSx3QkFBd0IsRUFBRSxRQUFRLDBCQUEwQjtBQUM1RCxhQUFhLEVBQUUsUUFBUTtBQUN2QixpQkFBaUIsRUFBRSxRQUFRO0FBQzNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLEVBQUUsUUFBUTs7QUFFM0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRSxRQUFRLDBCQUEwQjtBQUM1RCxhQUFhLEVBQUUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxlQUFlLEVBQUUsUUFBUTtBQUN6Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBCQUEwQixFQUFFLFFBQVE7QUFDcEM7QUFDQTs7QUFFQTtBQUNBLDBCQUEwQixFQUFFLFFBQVE7QUFDcEM7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0JBQXdCLEVBQUUsUUFBUSwyQkFBMkI7QUFDN0Q7QUFDQTs7QUFFQTtBQUNBLHdCQUF3QixFQUFFLFFBQVEsMkJBQTJCO0FBQzdELGFBQWEsRUFBRSxRQUFRO0FBQ3ZCOztBQUVBO0FBQ0EsMEJBQTBCLEVBQUUsUUFBUTtBQUNwQyxlQUFlLEVBQUUsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQSxFQUFFLHNCQUFzQixtRUFBbUUsa0JBQWtCLDJDQUEyQyw4REFBOEQsNkJBQTZCLGFBQWEsK0JBQStCLG1CQUFtQiw0QkFBNEIsMkNBQTJDLG1GQUFtRixzQ0FBc0MsU0FBUyxlQUFlLHFCQUFxQiw4Q0FBOEMsMEJBQTBCLFlBQVksc0NBQXNDLFNBQVMsMEJBQTBCLGtHQUFrRywyQ0FBMkMsY0FBYyxtQkFBbUIsdUJBQXVCLHNEQUFzRCxvREFBb0QsOEJBQThCLGdYQUFnWCxFQUFFLHlGQUF5Rix1QkFBdUIseUNBQXlDLHFEQUFxRCxFQUFFLGlHQUFpRyxnQkFBZ0Isa0VBQWtFLEdBQUcsSUFBSSxFQUFFLEVBQUUsaURBQWlEO0FBQzF6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxFQUFFLGlCQUFpQjtBQUM5QjtBQUNBO0FBQ0EsZ0JBQWdCLEVBQUUsUUFBUTtBQUMxQixzQkFBc0IsRUFBRSxRQUFRO0FBQ2hDLG1CQUFtQixFQUFFLFFBQVE7QUFDN0IsV0FBVyxFQUFFLFFBQVE7QUFDckI7QUFDQSxrQkFBa0IsRUFBRSxpQkFBaUI7QUFDckM7QUFDQSxpQkFBaUIsRUFBRSxRQUFRO0FBQzNCLFNBQVMsRUFBRSxRQUFRO0FBQ25CO0FBQ0EsaUJBQWlCLEVBQUUsUUFBUTtBQUMzQjtBQUNBLGFBQWEsRUFBRSxRQUFRLE1BQU0sWUFBWSxFQUFFLFdBQVc7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBLG9CQUFvQixFQUFFLFFBQVE7QUFDOUI7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixFQUFFLGlCQUFpQjtBQUN2QztBQUNBLEVBQUUsc0JBQXNCLDhDQUE4QywwQkFBMEIsWUFBWSxzQ0FBc0MsU0FBUyx3QkFBd0Isc0ZBQXNGLG1DQUFtQyx5SEFBeUgsTUFBTSx3R0FBd0csU0FBUyxzQ0FBc0MsOEJBQThCLHNCQUFzQix1QkFBdUIsT0FBTyxZQUFZLGdCQUFnQixFQUFFLGdDQUFnQyxnREFBZ0QsaUNBQWlDLHdDQUF3QyxpREFBaUQsYUFBYSxFQUFFLHlDQUF5QywwQ0FBMEMsY0FBYyxFQUFFLDhDQUE4QywwQkFBMEIsRUFBRSxrQ0FBa0MsV0FBVyxFQUFFLGlCQUFpQixrQ0FBa0MsZUFBZSxtQkFBbUIsUUFBUSxpQkFBaUIsRUFBRSwrQkFBK0IsMkNBQTJDLHVCQUF1Qix5RUFBeUUsZ0RBQWdELDhJQUE4SSxHQUFHLEdBQUcsR0FBRyxHQUFHLDZDQUE2QztBQUN4bkQ7QUFDQTtBQUNBLDJCQUEyQixzQkFBc0IsbUVBQW1FLGtCQUFrQiwyQ0FBMkMsOERBQThELDZCQUE2QixhQUFhLCtCQUErQixtQkFBbUIsNEJBQTRCLDJDQUEyQyxtRkFBbUYsc0NBQXNDLFNBQVMsdUNBQXVDLHFCQUFxQiw4Q0FBOEMsMEJBQTBCLFlBQVksc0NBQXNDLFNBQVMsOEJBQThCLHdFQUF3RSxTQUFTLHNKQUFzSixJQUFJLFlBQVksZUFBZSxrQ0FBa0Msd0RBQXdELFFBQVEsNEVBQTRFLEVBQUUsNENBQTRDLHVCQUF1QixrQ0FBa0MsV0FBVyxFQUFFLGdCQUFnQixHQUFHLCtDQUErQywrQkFBK0IsNENBQTRDLDJLQUEySyxFQUFFLG9CQUFvQixRQUFRLDZCQUE2Qix5REFBeUQsNEJBQTRCLEVBQUUsK0RBQStELHFCQUFxQixtQkFBbUIsMkJBQTJCLGlCQUFpQixrREFBa0QsaUJBQWlCLGVBQWUsZ0NBQWdDLEVBQUUsR0FBRyxRQUFRLE9BQU8sSUFBSTtBQUNoZ0UsV0FBVyxFQUFFLHFCQUFxQjtBQUNsQyxnQkFBZ0IsRUFBRSxTQUFTO0FBQzNCLFNBQVMsRUFBRSxRQUFRLGtCQUFrQixZQUFZO0FBQ2pEO0FBQ0EsZ0JBQWdCLEVBQUUsUUFBUTtBQUMxQixXQUFXLEVBQUUsUUFBUTtBQUNyQjtBQUNBO0FBQ0Esc0JBQXNCLEVBQUUsUUFBUTtBQUNoQyxjQUFjLEVBQUUsbUJBQW1CO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxFQUFFLG9CQUFvQixrQkFBa0Isd0JBQXdCO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxFQUFFLFFBQVE7QUFDckIsYUFBYSxFQUFFLFFBQVEsTUFBTSxZQUFZLEVBQUUsV0FBVztBQUN0RDtBQUNBLGtCQUFrQixFQUFFLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUUsUUFBUTtBQUNyQixhQUFhLEVBQUUsUUFBUSxNQUFNLFlBQVksRUFBRSxXQUFXO0FBQ3REO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixFQUFFLFFBQVE7QUFDcEMsRUFBRTtBQUNGLFlBQVksRUFBRSxRQUFRO0FBQ3RCLFdBQVcsRUFBRSxRQUFRO0FBQ3JCLG1CQUFtQixFQUFFLFFBQVE7QUFDN0IsRUFBRSxzQkFBc0IsdUNBQXVDLFNBQVMsc0ZBQXNGLDZEQUE2RCxRQUFRLHNDQUFzQyxXQUFXLDZGQUE2RixTQUFTLDJDQUEyQywwQkFBMEIsWUFBWSxzQ0FBc0MsU0FBUyx5REFBeUQsMkRBQTJELGtCQUFrQixJQUFJLFdBQVcsdUJBQXVCLGlDQUFpQyx3QkFBd0IsSUFBSSwwQkFBMEIsV0FBVyxFQUFFLElBQUk7QUFDOXdCLElBQUk7QUFDSixpQkFBaUIsRUFBRSxRQUFRO0FBQzNCLEVBQUUsY0FBYyxrRUFBa0UsOERBQThELHdCQUF3QixNQUFNLHNCQUFzQix1Q0FBdUMsU0FBUyxzRkFBc0YsNkRBQTZELFFBQVEsc0NBQXNDLFdBQVcsNkZBQTZGLFNBQVMsMkNBQTJDLDBCQUEwQixZQUFZLHNDQUFzQyxTQUFTLGdCQUFnQiwyR0FBMkcsSUFBSSwyRUFBMkUsOEVBQThFLGtDQUFrQyxJQUFJLDJHQUEyRyxFQUFFLHNDQUFzQyxpQ0FBaUMsT0FBTyxHQUFHLEdBQUcsK0NBQStDLDJCQUEyQixJQUFJLG1CQUFtQiwrQkFBK0IscUJBQXFCLGlDQUFpQywwQkFBMEIsS0FBSztBQUMxM0M7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLEVBQUUsUUFBUTs7QUFFNUI7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLElBQUk7O0FBRUo7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxnQkFBZ0Isc0NBQXNDLFNBQVMsOEJBQThCLGdCQUFnQixXQUFXLGtEQUFrRCxhQUFhLHNCQUFzQjtBQUMvTSxtQkFBbUIsRUFBRSxRQUFRO0FBQzdCO0FBQ0EsbUJBQW1CLEVBQUUsUUFBUTtBQUM3QjtBQUNBLG1CQUFtQixFQUFFLFFBQVE7QUFDN0I7QUFDQSxtQkFBbUIsRUFBRSxRQUFRO0FBQzdCO0FBQ0EsbUJBQW1CLEVBQUUsUUFBUTtBQUM3QjtBQUNBLG1CQUFtQixFQUFFLFFBQVE7QUFDN0I7QUFDQSxtQkFBbUIsRUFBRSxRQUFRO0FBQzdCLE1BQU0sNEJBQTRCO0FBQ2xDLHdCQUF3QixFQUFFLFFBQVE7QUFDbEM7QUFDQSx3QkFBd0IsRUFBRSxRQUFRO0FBQ2xDO0FBQ0Esd0JBQXdCLEVBQUUsUUFBUTtBQUNsQztBQUNBLHdCQUF3QixFQUFFLFFBQVE7QUFDbEM7QUFDQSx3QkFBd0IsRUFBRSxRQUFRO0FBQ2xDO0FBQ0Esd0JBQXdCLEVBQUUsUUFBUTtBQUNsQztBQUNBLHdCQUF3QixFQUFFLFFBQVE7QUFDbEMsUUFBUSxzQkFBc0IsbUVBQW1FLGtCQUFrQiwyQ0FBMkMsOERBQThELDZCQUE2QixhQUFhLCtCQUErQixtQkFBbUIsNEJBQTRCLDJDQUEyQyxtRkFBbUYsc0NBQXNDLFNBQVMsZUFBZSxzQkFBc0IsdUNBQXVDLFNBQVMsc0ZBQXNGLDZEQUE2RCxRQUFRLHNDQUFzQyxXQUFXLDZGQUE2RixVQUFVLHNDQUFzQyxTQUFTLDBCQUEwQixnQkFBZ0IscUJBQXFCLElBQUksdUJBQXVCLG9CQUFvQixzQ0FBc0MsMEZBQTBGLElBQUksNEJBQTRCLGlyQkFBaXJCLG9CQUFvQiwrSkFBK0osR0FBRyxJQUFJLHNCQUFzQix1Q0FBdUMsU0FBUyxzRkFBc0YsNkRBQTZELFFBQVEsc0NBQXNDLFdBQVcsNkZBQTZGLFVBQVUsc0NBQXNDLFNBQVMsb0JBQW9CLGdCQUFnQixlQUFlLElBQUksdUJBQXVCLG9CQUFvQixxQ0FBcUMsMEZBQTBGLElBQUksMkJBQTJCLHk3RUFBeTdFLEVBQUUsSUFBSSxzQkFBc0IsdUNBQXVDLFNBQVMsc0ZBQXNGLDZEQUE2RCxRQUFRLHNDQUFzQyxXQUFXLDZGQUE2RixVQUFVLHNDQUFzQyxTQUFTLDBCQUEwQixnQkFBZ0IscUJBQXFCLElBQUksdUJBQXVCLG9CQUFvQixxQ0FBcUMsMEZBQTBGLElBQUksMkJBQTJCLHljQUF5YyxFQUFFLElBQUksc0JBQXNCLHVDQUF1QyxTQUFTLHNGQUFzRiw2REFBNkQsUUFBUSxzQ0FBc0MsV0FBVyw2RkFBNkYsVUFBVSxzQ0FBc0MsU0FBUyw0QkFBNEIsZ0JBQWdCLHVCQUF1QixJQUFJLHVCQUF1QixvQkFBb0IscUNBQXFDLDBGQUEwRixJQUFJLDJCQUEyQiw2akJBQTZqQixFQUFFLElBQUksc0JBQXNCLHVDQUF1QyxTQUFTLHNGQUFzRiw2REFBNkQsUUFBUSxzQ0FBc0MsV0FBVyw2RkFBNkYsVUFBVSxzQ0FBc0MsU0FBUywwQkFBMEIsZ0JBQWdCLHFCQUFxQixJQUFJLHVCQUF1QixvQkFBb0Isc0NBQXNDLDBGQUEwRixJQUFJLDRCQUE0QiwwbkJBQTBuQixvQkFBb0IsMm1EQUEybUQsR0FBRyxJQUFJLHNCQUFzQix1Q0FBdUMsU0FBUyxzRkFBc0YsNkRBQTZELFFBQVEsc0NBQXNDLFdBQVcsNkZBQTZGLFVBQVUsc0NBQXNDLFNBQVMsMkJBQTJCLGdCQUFnQixzQkFBc0IsSUFBSSx1QkFBdUIsb0JBQW9CLHFDQUFxQywwRkFBMEYsRUFBRSx5Q0FBeUMsMldBQTJXLEtBQUssSUFBSSxzQkFBc0IsdUNBQXVDLFNBQVMsc0ZBQXNGLDZEQUE2RCxRQUFRLHNDQUFzQyxXQUFXLDZGQUE2RixVQUFVLHNDQUFzQyxTQUFTLDJCQUEyQixnQkFBZ0Isc0JBQXNCLElBQUksdUJBQXVCLG9CQUFvQixxQ0FBcUMsMEZBQTBGLEVBQUUseUNBQXlDLGlYQUFpWCxLQUFLLElBQUksc0JBQXNCLHVDQUF1QyxTQUFTLHNGQUFzRiw2REFBNkQsUUFBUSxzQ0FBc0MsV0FBVyw2RkFBNkYsVUFBVSxzQ0FBc0MsU0FBUyw0QkFBNEIsZ0JBQWdCLHVCQUF1QixJQUFJLHVCQUF1QixvQkFBb0IscUNBQXFDLDBGQUEwRixFQUFFLHlDQUF5QyxtWEFBbVgsS0FBSyxJQUFJLHNCQUFzQix1Q0FBdUMsU0FBUyxzRkFBc0YsNkRBQTZELFFBQVEsc0NBQXNDLFdBQVcsNkZBQTZGLFVBQVUsc0NBQXNDLFNBQVMseUJBQXlCLGdCQUFnQixvQkFBb0IsSUFBSSx1QkFBdUIsb0JBQW9CLHFDQUFxQywwRkFBMEYsRUFBRSx5Q0FBeUMsMldBQTJXLEtBQUssSUFBSSxnQkFBZ0Isc0NBQXNDLFNBQVMsd0NBQXdDLGdCQUFnQixrRUFBa0UsMEZBQTBGLElBQUksNEJBQTRCLDhOQUE4TixrQ0FBa0MsMkNBQTJDLEVBQUUsMkJBQTJCLHdlQUF3ZSxFQUFFLHFCQUFxQixxZkFBcWYsb0JBQW9CLDY5Q0FBNjlDLEdBQUcsR0FBRyxzQkFBc0IsdUNBQXVDLFNBQVMsc0ZBQXNGLDZEQUE2RCxRQUFRLHNDQUFzQyxXQUFXLDZGQUE2RixVQUFVLHNDQUFzQyxTQUFTLDZCQUE2QixnQkFBZ0Isd0JBQXdCLElBQUksdUJBQXVCLG9CQUFvQixxQ0FBcUMsMEZBQTBGLElBQUksMkJBQTJCLGsxQ0FBazFDLEVBQUUsSUFBSSxzQkFBc0IsdUNBQXVDLFNBQVMsc0ZBQXNGLDZEQUE2RCxRQUFRLHNDQUFzQyxXQUFXLDZGQUE2RixVQUFVLHNDQUFzQyxTQUFTLDRCQUE0QixnQkFBZ0IsdUJBQXVCLElBQUksdUJBQXVCLG9CQUFvQixxQ0FBcUMsMEZBQTBGLElBQUksc0NBQXNDLFdBQVcsRUFBRSw2QkFBNkIsMENBQTBDLEVBQUUsR0FBRyxJQUFJLHNCQUFzQix1Q0FBdUMsU0FBUyxzRkFBc0YsNkRBQTZELFFBQVEsc0NBQXNDLFdBQVcsNkZBQTZGLFVBQVUsc0NBQXNDLFNBQVMsc0JBQXNCLGdCQUFnQixpQkFBaUIsSUFBSSx1QkFBdUIsb0JBQW9CLHFDQUFxQyx3RkFBd0YsSUFBSSwyQkFBMkIscTlCQUFxOUIsRUFBRSxJQUFJLHFCQUFxQix1Q0FBdUMsU0FBUyxzRkFBc0YsNkRBQTZELFFBQVEsc0NBQXNDLFdBQVcsNkZBQTZGLFVBQVUsc0NBQXNDLFNBQVMsMEJBQTBCLGdCQUFnQixxQkFBcUIsSUFBSSx1QkFBdUIsb0JBQW9CLHFDQUFxQywwRkFBMEYsSUFBSSwyQkFBMkIsNHBDQUE0cEMsRUFBRSxJQUFJLHFCQUFxQix1Q0FBdUMsU0FBUyxzRkFBc0YsNkRBQTZELFFBQVEsc0NBQXNDLFdBQVcsNkZBQTZGLFVBQVUsc0NBQXNDLFNBQVMseUJBQXlCLGdCQUFnQixvQkFBb0IsSUFBSSx1QkFBdUIsb0JBQW9CLHFDQUFxQywwRkFBMEYsSUFBSSwyQkFBMkIsazRCQUFrNEIsRUFBRSxJQUFJLHNCQUFzQix1Q0FBdUMsU0FBUyxzRkFBc0YsNkRBQTZELFFBQVEsc0NBQXNDLFdBQVcsNkZBQTZGLFVBQVUsc0NBQXNDLFNBQVMsK0JBQStCLGdCQUFnQiwwQkFBMEIsSUFBSSx1QkFBdUIsb0JBQW9CLHNDQUFzQywwRkFBMEYsSUFBSSw0QkFBNEIsb2NBQW9jLG9CQUFvQixrUkFBa1IsR0FBRyxJQUFJLHNCQUFzQix1Q0FBdUMsU0FBUyxzRkFBc0YsNkRBQTZELFFBQVEsc0NBQXNDLFdBQVcsNkZBQTZGLFVBQVUsc0NBQXNDLFNBQVMsaUNBQWlDLGdCQUFnQiw0QkFBNEIsSUFBSSx1QkFBdUIsb0JBQW9CLHFDQUFxQywwRkFBMEYsSUFBSSwyQkFBMkIsZ3pDQUFnekMsRUFBRSxJQUFJLHNCQUFzQix1Q0FBdUMsU0FBUyxzRkFBc0YsNkRBQTZELFFBQVEsc0NBQXNDLFdBQVcsNkZBQTZGLFVBQVUsc0NBQXNDLFNBQVMsa0NBQWtDLGdCQUFnQiw2QkFBNkIsSUFBSSx1QkFBdUIsb0JBQW9CLHFDQUFxQywwRkFBMEYsSUFBSSwyQkFBMkIscW9CQUFxb0IsRUFBRSxJQUFJLHNCQUFzQix1Q0FBdUMsU0FBUyxzRkFBc0YsNkRBQTZELFFBQVEsc0NBQXNDLFdBQVcsNkZBQTZGLFVBQVUsc0NBQXNDLFNBQVMsd0JBQXdCLGdCQUFnQixtQkFBbUIsSUFBSSx1QkFBdUIsb0JBQW9CLHFDQUFxQywwRkFBMEYsSUFBSSwyQkFBMkIsNlBBQTZQLEVBQUUsSUFBSSxxQkFBcUIsdUNBQXVDLFNBQVMsc0ZBQXNGLDZEQUE2RCxRQUFRLHNDQUFzQyxXQUFXLDZGQUE2RixVQUFVLHNDQUFzQyxTQUFTLHVCQUF1QixnQkFBZ0Isa0JBQWtCLElBQUksdUJBQXVCLG9CQUFvQixxQ0FBcUMsMEZBQTBGLElBQUksMkJBQTJCLGtxREFBa3FELEVBQUUsSUFBSSxzQkFBc0IsdUNBQXVDLFNBQVMsc0ZBQXNGLDZEQUE2RCxRQUFRLHNDQUFzQyxXQUFXLDZGQUE2RixVQUFVLHNDQUFzQyxTQUFTLG9CQUFvQixnQkFBZ0IsZUFBZSxJQUFJLHVCQUF1QixvQkFBb0IscUNBQXFDLDBGQUEwRixJQUFJLDJCQUEyQixvdUJBQW91QixFQUFFLElBQUksc0JBQXNCLHVDQUF1QyxTQUFTLHNGQUFzRiw2REFBNkQsUUFBUSxzQ0FBc0MsV0FBVyw2RkFBNkYsVUFBVSxzQ0FBc0MsU0FBUyxzQkFBc0IsZ0JBQWdCLGlCQUFpQixjQUFjLHFDQUFxQyxzRkFBc0YsSUFBSSwyQkFBMkIsNkRBQTZELEVBQUUsSUFBSSxzQkFBc0IsdUNBQXVDLFNBQVMsc0ZBQXNGLDZEQUE2RCxRQUFRLHNDQUFzQyxXQUFXLDZGQUE2RixVQUFVLHNDQUFzQyxTQUFTLHFCQUFxQixnQkFBZ0IsZ0JBQWdCLElBQUksdUJBQXVCLG9CQUFvQixxQ0FBcUMsMEZBQTBGLElBQUksMkJBQTJCLHlpRUFBeWlFLEVBQUUsSUFBSSxzQkFBc0IsdUNBQXVDLFNBQVMsc0ZBQXNGLDZEQUE2RCxRQUFRLHNDQUFzQyxXQUFXLDZGQUE2RixVQUFVLHNDQUFzQyxTQUFTLDBCQUEwQixnQkFBZ0IscUJBQXFCLElBQUksdUJBQXVCLG9CQUFvQixxQ0FBcUMsMEZBQTBGLElBQUksMkJBQTJCLHFpQkFBcWlCLEVBQUUsSUFBSSxzQkFBc0IsdUNBQXVDLFNBQVMsc0ZBQXNGLDZEQUE2RCxRQUFRLHNDQUFzQyxXQUFXLDZGQUE2RixVQUFVLHNDQUFzQyxTQUFTLHlCQUF5QixnQkFBZ0Isb0JBQW9CLElBQUksdUJBQXVCLG9CQUFvQixzQ0FBc0MscUdBQXFHLElBQUksNEJBQTRCLG1QQUFtUCxvQkFBb0Isc1JBQXNSLG9CQUFvQix1UEFBdVAsb0JBQW9CLHdQQUF3UCxHQUFHLElBQUksc0JBQXNCLG1FQUFtRSxrQkFBa0IsMkNBQTJDLDhEQUE4RCw2QkFBNkIsYUFBYSwrQkFBK0IsbUJBQW1CLDRCQUE0QiwyQ0FBMkMsbUZBQW1GLHNDQUFzQyxTQUFTLG9VQUFvVSxzQkFBc0IsdUNBQXVDLFNBQVMsc0ZBQXNGLDZEQUE2RCxRQUFRLHNDQUFzQyxXQUFXLDZGQUE2RixTQUFTLDJDQUEyQywwQkFBMEIsWUFBWSxzQ0FBc0MsU0FBUyx5QkFBeUIsMkRBQTJELG9CQUFvQixJQUFJLGdCQUFnQiwwQkFBMEIsb0JBQW9CLDJDQUEyQyx1QkFBdUIsY0FBYyxHQUFHLEdBQUc7QUFDOTUxQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksRUFBRSxRQUFRO0FBQ3RCLFVBQVUsRUFBRSxRQUFRO0FBQ3BCLEVBQUUscUJBQXFCLG1FQUFtRSxrQkFBa0IsMkNBQTJDLDhEQUE4RCw2QkFBNkIsYUFBYSwrQkFBK0IsbUJBQW1CLDRCQUE0QiwyQ0FBMkMsbUZBQW1GLHNDQUFzQyxTQUFTLGVBQWUsc0JBQXNCLDhDQUE4QywwQkFBMEIsWUFBWSxzQ0FBc0MsU0FBUyxpQkFBaUIsMkRBQTJELFVBQVUsOENBQThDLCtCQUErQixTQUFTLEVBQUUsMENBQTBDLE9BQU8sZ0JBQWdCLEVBQUUsa0RBQWtELE9BQU8sa0NBQWtDLG1DQUFtQyxFQUFFLFdBQVcsSUFBSSxtQkFBbUIsV0FBVyxHQUFHLEdBQUc7QUFDdGtDLFVBQVUsRUFBRSxRQUFRO0FBQ3BCLFdBQVcsRUFBRSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQSxXQUFXLEVBQUUsUUFBUTtBQUNyQjtBQUNBLGtCQUFrQixFQUFFLFFBQVE7QUFDNUIsZUFBZSxFQUFFLFFBQVE7QUFDekIsZ0JBQWdCLEVBQUUsUUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixFQUFFLFFBQVE7O0FBRTdCLElBQUksRUFBRSxpQkFBaUIsdUJBQXVCLHdCQUF3QixzQkFBc0IsWUFBWSxzQkFBc0IscUJBQXFCO0FBQ25KLEVBQUUsc0JBQXNCLG1FQUFtRSxrQkFBa0IsMkNBQTJDLDhEQUE4RCw2QkFBNkIsYUFBYSwrQkFBK0IsbUJBQW1CLDRCQUE0QiwyQ0FBMkMsbUZBQW1GLHNDQUFzQyxTQUFTLDJCQUEyQixzQkFBc0IsdUNBQXVDLFNBQVMsc0ZBQXNGLDZEQUE2RCxRQUFRLHNDQUFzQyxXQUFXLDZGQUE2RixTQUFTLDJDQUEyQywwQkFBMEIsWUFBWSxzQ0FBc0MsU0FBUyxrQkFBa0IsdUNBQXVDLDRCQUE0QixjQUFjLHVDQUF1QyxJQUFJLHdDQUF3Qyx3R0FBd0csRUFBRSxzQ0FBc0MsK0JBQStCLEVBQUUsdUNBQXVDLDJDQUEyQyxFQUFFLDhCQUE4QiwwQ0FBMEMsa0NBQWtDLGdDQUFnQyxFQUFFLHVDQUF1Qyx3R0FBd0csRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsS0FBSyxxQkFBcUIsbUVBQW1FLGtCQUFrQiwyQ0FBMkMsOERBQThELDZCQUE2QixhQUFhLCtCQUErQixtQkFBbUIsNEJBQTRCLGdFQUFnRSxtQ0FBbUMsc0JBQXNCLEVBQUUsZUFBZSxZQUFZLHlDQUF5Qyw0QkFBNEIsU0FBUyw2RkFBNkYsZ0JBQWdCLG9DQUFvQyxTQUFTLHNGQUFzRiw2REFBNkQsUUFBUSxzQ0FBc0MsV0FBVyw2RkFBNkYsVUFBVSxzQ0FBc0MsU0FBUyx5QkFBeUIsdUNBQXVDLG1DQUFtQyxjQUFjLHVDQUF1QyxJQUFJLHlDQUF5Qyw4RkFBOEYsRUFBRSx1QkFBdUIsb3lFQUFveUUsZUFBZSxrREFBa0QsZUFBZSxzREFBc0QsZUFBZSxzREFBc0QsZUFBZSxzREFBc0QsR0FBRyxHQUFHLEdBQUcsS0FBSztBQUNwcUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUUsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixFQUFFO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsRUFBRSxzQkFBc0IsOENBQThDLDBCQUEwQixZQUFZLHNDQUFzQyxTQUFTLDJCQUEyQixpREFBaUQsb0JBQW9CLFdBQVcsaUJBQWlCLDRCQUE0QixvQ0FBb0MsZUFBZSxXQUFXLEdBQUcsRUFBRTtBQUN0WDtBQUNBLFNBQVMsRUFBRSxRQUFRO0FBQ25CO0FBQ0E7QUFDQSxnQkFBZ0IsRUFBRSxRQUFRO0FBQzFCO0FBQ0EsV0FBVyxFQUFFLFFBQVE7QUFDckIsRUFBRSxxQkFBcUIsdUNBQXVDLFNBQVMsc0ZBQXNGLDZEQUE2RCxRQUFRLHNDQUFzQyxXQUFXLDZGQUE2RixTQUFTLDJDQUEyQywwQkFBMEIsWUFBWSxzQ0FBc0MsU0FBUyx3Q0FBd0MseUZBQXlGLHNDQUFzQyxJQUFJLDRHQUE0RyxpSEFBaUgsb0NBQW9DLGtDQUFrQywrQ0FBK0MsRUFBRSxzQ0FBc0MsU0FBUyxFQUFFLGtDQUFrQyw4Q0FBOEMsd0JBQXdCLHVCQUF1QixxREFBcUQsaURBQWlELElBQUksTUFBTSxJQUFJLG1EQUFtRCxXQUFXLDZCQUE2QixTQUFTLEVBQUUsV0FBVyxLQUFLLEdBQUcsdUNBQXVDO0FBQzU3QyxpQkFBaUIsRUFBRSxTQUFTO0FBQzVCLG9CQUFvQixFQUFFLFNBQVM7QUFDL0IscUJBQXFCLEVBQUUsU0FBUztBQUNoQztBQUNBO0FBQ0EsV0FBVyxFQUFFLGlCQUFpQjtBQUM5QjtBQUNBLGVBQWUsRUFBRSxRQUFRO0FBQ3pCO0FBQ0EsRUFBRTtBQUNGLGdCQUFnQixFQUFFLFFBQVE7QUFDMUIsc0JBQXNCLEVBQUUsUUFBUTtBQUNoQyxrQkFBa0IsRUFBRSxpQkFBaUI7QUFDckMsbUJBQW1CLEVBQUUsUUFBUTtBQUM3QixnQkFBZ0IsRUFBRSxRQUFRO0FBQzFCLFdBQVcsRUFBRSxRQUFRO0FBQ3JCLGVBQWUsRUFBRSxRQUFRO0FBQ3pCLGFBQWEsRUFBRSxRQUFRLE1BQU0sWUFBWSxFQUFFLFVBQVU7QUFDckQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLEVBQUUsaUJBQWlCO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGFBQWEsRUFBRSxRQUFRO0FBQ3ZCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsc0JBQXNCLG1FQUFtRSxrQkFBa0IsMkNBQTJDLDhEQUE4RCw2QkFBNkIsYUFBYSwrQkFBK0IsbUJBQW1CLDRCQUE0QiwyQ0FBMkMsbUZBQW1GLHNDQUFzQyxTQUFTLGNBQWMsbUJBQW1CLG1FQUFtRSxrQkFBa0IsMkNBQTJDLDhEQUE4RCw2QkFBNkIsYUFBYSwrQkFBK0IsbUJBQW1CLDRCQUE0QixnRUFBZ0UsbUNBQW1DLHNCQUFzQixFQUFFLGVBQWUsWUFBWSx5Q0FBeUMsNEJBQTRCLFNBQVMsNkZBQTZGLGdCQUFnQixvQ0FBb0MsU0FBUyxzRkFBc0YsNkRBQTZELFFBQVEsc0NBQXNDLFdBQVcsNkZBQTZGLFNBQVMsMkNBQTJDLDBCQUEwQixZQUFZLHNDQUFzQyxTQUFTLG9CQUFvQix3RUFBd0UsaUNBQWlDLElBQUksU0FBUyxxQkFBcUIsNENBQTRDLElBQUkseUNBQXlDLGNBQWMsb0JBQW9CLHFDQUFxQyxnQ0FBZ0MsZ0NBQWdDLFNBQVMsRUFBRSx1QkFBdUIsRUFBRSxJQUFJLEdBQUcsR0FBRyxxQ0FBcUM7QUFDcGxFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksRUFBRSxRQUFRO0FBQ3RCLFdBQVcsRUFBRSxRQUFRO0FBQ3JCLHNCQUFzQixFQUFFLFFBQVE7QUFDaEMsa0JBQWtCLEVBQUUsaUJBQWlCO0FBQ3JDO0FBQ0E7QUFDQSxpQ0FBaUMsOEJBQThCO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBLGNBQWM7QUFDZCw4QkFBOEIsRUFBRSxRQUFRO0FBQ3hDOztBQUVBLGNBQWM7QUFDZCw4QkFBOEIsRUFBRSxRQUFRO0FBQ3hDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLEVBQUUsc0JBQXNCLG1FQUFtRSxrQkFBa0IsMkNBQTJDLDhEQUE4RCw2QkFBNkIsYUFBYSwrQkFBK0IsbUJBQW1CLDRCQUE0QiwyQ0FBMkMsbUZBQW1GLHNDQUFzQyxTQUFTLFlBQVksc0JBQXNCLG1FQUFtRSxrQkFBa0IsMkNBQTJDLDhEQUE4RCw2QkFBNkIsYUFBYSwrQkFBK0IsbUJBQW1CLDRCQUE0QixnRUFBZ0UsbUNBQW1DLHNCQUFzQixFQUFFLGVBQWUsWUFBWSx5Q0FBeUMsNEJBQTRCLFNBQVMsNkZBQTZGLGlCQUFpQixzQ0FBc0MsU0FBUyx5QkFBeUIsa0ZBQWtGLGtCQUFrQixnSEFBZ0gsSUFBSSwwQ0FBMEMscUVBQXFFLGNBQWMsb0JBQW9CLDJCQUEyQixxQ0FBcUMsY0FBYyxFQUFFLFdBQVcsbUJBQW1CLFdBQVcsR0FBRyw2QkFBNkIsTUFBTSxFQUFFLCtCQUErQixVQUFVLDZDQUE2Qyx3REFBd0QsSUFBSSxHQUFHLDhDQUE4QyxXQUFXLCtCQUErQixXQUFXLEVBQUUsV0FBVyxTQUFTLEdBQUc7QUFDeGdFO0FBQ0E7QUFDQSxtQkFBbUIsRUFBRSxRQUFRO0FBQzdCO0FBQ0E7QUFDQTtBQUNBLFVBQVUsRUFBRSxRQUFRO0FBQ3BCLFdBQVcsRUFBRSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxFQUFFLFFBQVE7QUFDckIsZ0JBQWdCLEVBQUUsUUFBUTs7QUFFMUIsSUFBSSxFQUFFLFdBQVc7QUFDakIsZUFBZSxFQUFFLFFBQVE7QUFDekI7QUFDQSxFQUFFLHNCQUFzQixtRUFBbUUsa0JBQWtCLDJDQUEyQyw4REFBOEQsNkJBQTZCLGFBQWEsK0JBQStCLG1CQUFtQiw0QkFBNEIsMkNBQTJDLG1GQUFtRixzQ0FBc0MsU0FBUyxlQUFlLHNCQUFzQix1Q0FBdUMsU0FBUyxzRkFBc0YsNkRBQTZELFFBQVEsc0NBQXNDLFdBQVcsNkZBQTZGLFNBQVMsMkNBQTJDLDBCQUEwQixZQUFZLHNDQUFzQyxTQUFTLHFCQUFxQixxRUFBcUUsc0NBQXNDLElBQUksa0RBQWtELGlEQUFpRCw2QkFBNkIsMEVBQTBFLE9BQU8sSUFBSSxnQkFBZ0IsY0FBYyxpQ0FBaUMsMEJBQTBCLE1BQU0sUUFBUSxVQUFVLHNCQUFzQixvQkFBb0IsTUFBTSxHQUFHLHVDQUF1QyxrQ0FBa0MsSUFBSSw2QkFBNkIseUNBQXlDLG9CQUFvQix1QkFBdUIsMkJBQTJCLDJDQUEyQyxFQUFFLDZCQUE2QiwyQkFBMkIsaUNBQWlDLGdDQUFnQyxxREFBcUQsRUFBRSwyQkFBMkIseUNBQXlDLEVBQUUsSUFBSSxFQUFFLEdBQUcsZ0NBQWdDO0FBQ3BpRTtBQUNBO0FBQ0EsbUJBQW1CLEVBQUUsUUFBUTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsRUFBRSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQSxXQUFXLEVBQUUsUUFBUTtBQUNyQixvQkFBb0IsRUFBRSxXQUFXO0FBQ2pDLDJCQUEyQixFQUFFLFFBQVE7QUFDckMsa0JBQWtCLEVBQUUsUUFBUTtBQUM1QjtBQUNBO0FBQ0EsbUJBQW1CLEVBQUUsUUFBUTtBQUM3QixrQkFBa0IsRUFBRSxRQUFRO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLHNCQUFzQixtRUFBbUUsa0JBQWtCLDJDQUEyQyw4REFBOEQsNkJBQTZCLGFBQWEsK0JBQStCLG1CQUFtQiw0QkFBNEIsMkNBQTJDLG1GQUFtRixzQ0FBc0MsU0FBUyxlQUFlLHNCQUFzQixtRUFBbUUsa0JBQWtCLDJDQUEyQyw4REFBOEQsNkJBQTZCLGFBQWEsK0JBQStCLG1CQUFtQiw0QkFBNEIsMkNBQTJDLG1GQUFtRixzQ0FBc0MsU0FBUyxlQUFlLHNCQUFzQix1Q0FBdUMsU0FBUyxzRkFBc0YsNkRBQTZELFFBQVEsc0NBQXNDLFdBQVcsNkZBQTZGLFNBQVMsMkNBQTJDLDBCQUEwQixZQUFZLHNDQUFzQyxTQUFTLG1DQUFtQyxxRUFBcUUsTUFBTSxhQUFhLG1DQUFtQywrQkFBK0IsMkNBQTJDLElBQUksMENBQTBDLG9EQUFvRCwyQ0FBMkMsY0FBYyxJQUFJLGdCQUFnQixjQUFjLGlDQUFpQyw2SUFBNkksSUFBSSx3RkFBd0YsSUFBSSxHQUFHLDJDQUEyQyxrQ0FBa0MsSUFBSSwwREFBMEQsc0VBQXNFLGdCQUFnQiw2REFBNkQsOENBQThDLDRCQUE0Qix3Q0FBd0MsaUNBQWlDLGtEQUFrRCw4REFBOEQsRUFBRSwrQkFBK0IsbUJBQW1CLFlBQVksOEJBQThCLDhCQUE4QixpQ0FBaUMsMkNBQTJDLEVBQUUscUNBQXFDLDZGQUE2RixFQUFFLDJCQUEyQixzQkFBc0IsRUFBRSw4QkFBOEIsMEZBQTBGLEVBQUUsMkJBQTJCLHdCQUF3QixFQUFFLElBQUksSUFBSSxFQUFFLEdBQUcsa0NBQWtDO0FBQ2gwRztBQUNBO0FBQ0EsbUJBQW1CLEVBQUUsUUFBUTtBQUM3QjtBQUNBO0FBQ0Esc0JBQXNCLEVBQUUsUUFBUTtBQUNoQztBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUUsa0JBQWtCO0FBQy9CLGVBQWUsRUFBRSxRQUFRO0FBQ3pCO0FBQ0EsbUJBQW1CLEVBQUUsUUFBUSxNQUFNLGdCQUFnQixNQUFNLGVBQWU7QUFDeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsRUFBRSxRQUFRLFFBQVEsZ0JBQWdCLEVBQUUsZ0JBQWdCO0FBQ3ZFOztBQUVBLG9CQUFvQixFQUFFLFdBQVc7QUFDakM7QUFDQTtBQUNBLGdCQUFnQixFQUFFLFFBQVE7QUFDMUIsZUFBZSxFQUFFLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsV0FBVyxFQUFFLG1CQUFtQjs7QUFFaEM7QUFDQSxrQkFBa0IsRUFBRSxRQUFRO0FBQzVCOztBQUVBO0FBQ0Esa0JBQWtCLEVBQUUsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsRUFBRSx3QkFBd0IsTUFBTSxLQUFLOztBQUV2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxzQkFBc0IsbUVBQW1FLGtCQUFrQiwyQ0FBMkMsOERBQThELDZCQUE2QixhQUFhLCtCQUErQixtQkFBbUIsNEJBQTRCLDJDQUEyQyxtRkFBbUYsc0NBQXNDLFNBQVMsZUFBZSxzQkFBc0IsbUVBQW1FLGtCQUFrQiwyQ0FBMkMsOERBQThELDZCQUE2QixhQUFhLCtCQUErQixtQkFBbUIsNEJBQTRCLGdFQUFnRSxtQ0FBbUMsc0JBQXNCLEVBQUUsZUFBZSxZQUFZLHlDQUF5Qyw0QkFBNEIsU0FBUyw2RkFBNkYsaUJBQWlCLHNDQUFzQyxTQUFTLHNCQUFzQixrRkFBa0YsZUFBZSwrSkFBK0osSUFBSSwrQkFBK0IsMkJBQTJCLHlCQUF5QixLQUFLLHFCQUFxQix3QkFBd0IscUNBQXFDLGNBQWMsRUFBRSxXQUFXLG1CQUFtQixXQUFXLEdBQUcsNkJBQTZCLDhCQUE4QixFQUFFLCtCQUErQixVQUFVLCtDQUErQyxtRUFBbUUsSUFBSSxHQUFHLHVDQUF1QyxXQUFXLCtCQUErQixXQUFXLEVBQUUsV0FBVyxTQUFTLEdBQUc7QUFDM2lFO0FBQ0E7QUFDQSxtQkFBbUIsRUFBRSxRQUFRO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLEVBQUUsUUFBUTtBQUNwQixXQUFXLEVBQUUsUUFBUTtBQUNyQjtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCLGlCQUFpQixJQUFJLG9CQUFvQix1QkFBdUIsMEJBQTBCO0FBQzFGO0FBQ0E7QUFDQSxXQUFXLEVBQUUsUUFBUTtBQUNyQixnQkFBZ0IsRUFBRSxRQUFROztBQUUxQixJQUFJLEVBQUUsV0FBVztBQUNqQixlQUFlLEVBQUUsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQSxFQUFFLHNCQUFzQixtRUFBbUUsa0JBQWtCLDJDQUEyQyw4REFBOEQsNkJBQTZCLGFBQWEsK0JBQStCLG1CQUFtQiw0QkFBNEIsMkNBQTJDLG1GQUFtRixzQ0FBc0MsU0FBUyxlQUFlLHNCQUFzQixtRUFBbUUsa0JBQWtCLDJDQUEyQyw4REFBOEQsNkJBQTZCLGFBQWEsK0JBQStCLG1CQUFtQiw0QkFBNEIsZ0VBQWdFLG1DQUFtQyxzQkFBc0IsRUFBRSxlQUFlLFlBQVkseUNBQXlDLDRCQUE0QixTQUFTLDZGQUE2RixnQkFBZ0Isb0NBQW9DLFNBQVMsc0ZBQXNGLDZEQUE2RCxRQUFRLHNDQUFzQyxXQUFXLDZGQUE2RixVQUFVLHNDQUFzQyxTQUFTLHNCQUFzQix3RUFBd0UsbUNBQW1DLElBQUksMkNBQTJDLHVEQUF1RCxtQkFBbUIscUNBQXFDLDRDQUE0QyxFQUFFLHFDQUFxQyw4QkFBOEIsbUJBQW1CLHlCQUF5QixPQUFPLFNBQVMsR0FBRyxFQUFFLHlDQUF5QztBQUNoakU7QUFDQTtBQUNBO0FBQ0EsV0FBVyxFQUFFLFFBQVE7QUFDckIsWUFBWSxFQUFFLFFBQVE7QUFDdEI7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLEVBQUUsUUFBUTtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsRUFBRSxRQUFRO0FBQ3ZCLGNBQWMsRUFBRSxRQUFRO0FBQ3hCO0FBQ0Esd0JBQXdCLEVBQUUsUUFBUTtBQUNsQzs7QUFFQTtBQUNBLG9CQUFvQixFQUFFLFFBQVE7QUFDOUI7O0FBRUE7QUFDQSx3QkFBd0IsRUFBRSxRQUFRO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsRUFBRSxZQUFZLElBQUksbUJBQW1CLCtCQUErQix3QkFBd0IsaUNBQWlDO0FBQ2pKLFNBQVMsRUFBRSxRQUFRO0FBQ25COztBQUVBLElBQUksRUFBRSxXQUFXO0FBQ2pCO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsRUFBRSxRQUFRO0FBQzdCO0FBQ0EsRUFBRSxzQkFBc0IsbUVBQW1FLGtCQUFrQiwyQ0FBMkMsOERBQThELDZCQUE2QixhQUFhLCtCQUErQixtQkFBbUIsNEJBQTRCLDJDQUEyQyxtRkFBbUYsc0NBQXNDLFNBQVMsZUFBZSxzQkFBc0IsOENBQThDLDBCQUEwQixZQUFZLHNDQUFzQyxTQUFTLG9CQUFvQixtQkFBbUIsK0RBQStELHNCQUFzQixtRUFBbUUsa0JBQWtCLDJDQUEyQyw4REFBOEQsNkJBQTZCLGFBQWEsK0JBQStCLG1CQUFtQiw0QkFBNEIsMkNBQTJDLG1GQUFtRixzQ0FBc0MsU0FBUyxjQUFjLHFCQUFxQiw4Q0FBOEMsMEJBQTBCLFlBQVksc0NBQXNDLFNBQVMsb0JBQW9CLCtFQUErRSwrREFBK0QsK0NBQStDLEVBQUUsdUJBQXVCLHdDQUF3QyxvREFBb0QsNkJBQTZCLE1BQU0sSUFBSSxvQkFBb0IsSUFBSSxFQUFFLHVDQUF1QztBQUN0MUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRSxRQUFRO0FBQ3pCO0FBQ0E7QUFDQSxnQkFBZ0IsRUFBRSxRQUFRO0FBQzFCLHNCQUFzQixFQUFFLFFBQVE7QUFDaEMsa0JBQWtCLEVBQUUsaUJBQWlCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLFdBQVcsRUFBRSxRQUFRO0FBQ3JCLGVBQWUsRUFBRSxRQUFRO0FBQ3pCLGlCQUFpQixFQUFFLFFBQVE7QUFDM0IsaUJBQWlCLEVBQUUsUUFBUTtBQUMzQixhQUFhLEVBQUUsUUFBUSxlQUFlLEVBQUUsRUFBRSxRQUFRLGVBQWUsTUFBTSxFQUFFLFFBQVE7O0FBRWpGO0FBQ0E7QUFDQSxvQkFBb0IsRUFBRSxpQkFBaUI7QUFDdkM7O0FBRUE7QUFDQSxhQUFhLEVBQUUsUUFBUTtBQUN2QjtBQUNBLEVBQUUsc0JBQXNCLG1FQUFtRSxrQkFBa0IsMkNBQTJDLDhEQUE4RCw2QkFBNkIsYUFBYSwrQkFBK0IsbUJBQW1CLDRCQUE0QiwyQ0FBMkMsbUZBQW1GLHNDQUFzQyxTQUFTLGVBQWUsZ0JBQWdCLHNDQUFzQyxTQUFTLHFCQUFxQixvQ0FBb0MsMEVBQTBFLGtCQUFrQiwyQ0FBMkMsc0JBQXNCLDhDQUE4QywwQkFBMEIsWUFBWSxzQ0FBc0MsU0FBUyxlQUFlLDBDQUEwQyxpSkFBaUo7QUFDNW1DO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUosYUFBYSxFQUFFLGlCQUFpQjtBQUNoQyxvQkFBb0IsRUFBRSxzQkFBc0I7QUFDNUMsZUFBZSxFQUFFLG9CQUFvQjtBQUNyQyxpQkFBaUIsRUFBRSxhQUFhO0FBQ2hDLHFCQUFxQixFQUFFLGlCQUFpQjtBQUN4QyxTQUFTLEVBQUUsY0FBYztBQUN6QixnQkFBZ0IsRUFBRSxZQUFZO0FBQzlCLGdCQUFnQixFQUFFLFlBQVk7QUFDOUIsZUFBZSxFQUFFLFdBQVc7QUFDNUIsaUJBQWlCLEVBQUUsYUFBYTtBQUNoQyxXQUFXLEVBQUUsUUFBUTtBQUNyQixhQUFhLEVBQUUsa0JBQWtCO0FBQ2pDLGdCQUFnQixFQUFFLHFCQUFxQjtBQUN2QywwQkFBMEIsc0JBQXNCLG1FQUFtRSxrQkFBa0IsMkNBQTJDLDhEQUE4RCw2QkFBNkIsYUFBYSwrQkFBK0IsbUJBQW1CLDRCQUE0QiwyQ0FBMkMsbUZBQW1GLHNDQUFzQyxTQUFTLGVBQWUsc0JBQXNCLHVDQUF1QyxTQUFTLHNGQUFzRiw2REFBNkQsUUFBUSxzQ0FBc0MsV0FBVyw2RkFBNkYsU0FBUywyQ0FBMkMsMEJBQTBCLFlBQVksc0NBQXNDLFNBQVMsMEJBQTBCLDZCQUE2QixxQkFBcUIsSUFBSSxjQUFjLDBCQUEwQixrQ0FBa0MsSUFBSSxZQUFZLEVBQUUsd0ZBQXdGLGdCQUFnQixFQUFFLHFDQUFxQyxVQUFVLEVBQUUsRUFBRSxFQUFFLFdBQVcsOEJBQThCLHlCQUF5QixFQUFFLEVBQUUsRUFBRSxXQUFXLElBQUksS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLElBQUk7QUFDajlDO0FBQ0E7QUFDQTtBQUNBLFNBQVMsRUFBRSxRQUFRLFFBQVEsV0FBVztBQUN0QztBQUNBLGFBQWEsRUFBRSxRQUFRLE1BQU0sWUFBWSxFQUFFLFVBQVU7QUFDckQ7QUFDQTtBQUNBLFdBQVcsRUFBRSxRQUFRO0FBQ3JCLGVBQWUsRUFBRSxRQUFRO0FBQ3pCLGlCQUFpQixFQUFFLFFBQVE7QUFDM0IsaUJBQWlCLEVBQUUsUUFBUTtBQUMzQixvQkFBb0IsRUFBRSxRQUFRO0FBQzlCO0FBQ0E7QUFDQSxXQUFXLEVBQUUsUUFBUTtBQUNyQixlQUFlLEVBQUUsUUFBUTtBQUN6QixpQkFBaUIsRUFBRSxRQUFRO0FBQzNCLG9CQUFvQixFQUFFLFFBQVE7QUFDOUIsRUFBRSxzQkFBc0IsbUVBQW1FLGtCQUFrQiwyQ0FBMkMsOERBQThELDZCQUE2QixhQUFhLCtCQUErQixtQkFBbUIsNEJBQTRCLDJDQUEyQyxtRkFBbUYsc0NBQXNDLFNBQVMsZUFBZSxnQkFBZ0Isc0NBQXNDLFNBQVMsd0JBQXdCLG1DQUFtQztBQUNwb0I7QUFDQTtBQUNBLHFDQUFxQyxFQUFFLFFBQVE7O0FBRS9DLG1CQUFtQixFQUFFLFFBQVE7QUFDN0I7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQSxJQUFJLEVBQUUsUUFBUTs7QUFFZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0IsRUFBRSxRQUFRO0FBQzVCLGFBQWEsRUFBRSxRQUFRO0FBQ3ZCLG1CQUFtQixFQUFFLFFBQVE7QUFDN0IsbUJBQW1CLEVBQUUsUUFBUTtBQUM3QixpQkFBaUIsRUFBRSxRQUFRO0FBQzNCLG1CQUFtQixFQUFFLFFBQVE7QUFDN0I7O0FBRUE7QUFDQSxhQUFhLEVBQUUsUUFBUTtBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsRUFBRSxRQUFRO0FBQ2pEO0FBQ0E7QUFDQSxFQUFFLHNCQUFzQixtRUFBbUUsa0JBQWtCLDJDQUEyQyw4REFBOEQsNkJBQTZCLGFBQWEsK0JBQStCLG1CQUFtQiw0QkFBNEIsMkNBQTJDLG1GQUFtRixzQ0FBc0MsU0FBUyxlQUFlLGNBQWMsc0NBQXNDLFNBQVMsRUFBRSxzQkFBc0IsbUVBQW1FLGtCQUFrQiwyQ0FBMkMsOERBQThELDZCQUE2QixhQUFhLCtCQUErQixtQkFBbUIsNEJBQTRCLDJDQUEyQyxtRkFBbUYsc0NBQXNDLFNBQVMsMkJBQTJCLHNCQUFzQiw4Q0FBOEMsMEJBQTBCLFlBQVksc0NBQXNDLFNBQVMsd0RBQXdELG1CQUFtQiw0RUFBNEUsa0JBQWtCLHNDQUFzQyxHQUFHLHFDQUFxQyx5Q0FBeUMsbUVBQW1FLHNCQUFzQixtRUFBbUUsa0JBQWtCLDJDQUEyQyw4REFBOEQsNkJBQTZCLGFBQWEsK0JBQStCLG1CQUFtQiw0QkFBNEIsZ0VBQWdFLG1DQUFtQyxzQkFBc0IsRUFBRSxlQUFlLFlBQVkseUNBQXlDLDRCQUE0QixTQUFTLDZGQUE2RixpQkFBaUIsc0NBQXNDLFNBQVMseUpBQXlKLGdDQUFnQyxTQUFTLG00Q0FBbTRDLFNBQVMsb0lBQW9JLGFBQWEsc05BQXNOLFNBQVMsd0pBQXdKLFdBQVcsd0xBQXdMLFdBQVcsdUhBQXVILFdBQVcsOENBQThDLG9LQUFvSyx5TEFBeUwsZUFBZSxvQkFBb0IsZUFBZSwwQkFBMEIsZUFBZSxzREFBc0QseUNBQXlDLG1CQUFtQiwwTkFBME4sZ0JBQWdCLHNDQUFzQyxTQUFTLDZCQUE2QiwwQkFBMEIsZ0NBQWdDO0FBQ3BwTCxNQUFNO0FBQ047QUFDQTtBQUNBLG1CQUFtQixVQUFVO0FBQzdCLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsbUJBQW1CLFNBQVM7QUFDNUIsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxtQkFBbUIsV0FBVztBQUM5Qix1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLG1CQUFtQixpQkFBaUI7QUFDcEMsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxnQkFBZ0Isc0NBQXNDLFNBQVMsdUJBQXVCLHVDQUF1QyxnTUFBZ00sWUFBWSxJQUFJLEVBQUUsb0NBQW9DLEVBQUUsb0NBQW9DLEVBQUUseUVBQXlFLEVBQUUsa0VBQWtFLEVBQUUsK0NBQStDLEtBQUssb0RBQW9ELDRGQUE0RixFQUFFLGVBQWUsc0NBQXNDLFNBQVMsaUZBQWlGLGdCQUFnQix3REFBd0QsUUFBUSxrREFBa0QsRUFBRSxJQUFJLGNBQWMsMENBQTBDLFVBQVUsMkNBQTJDLCtDQUErQyw2Q0FBNkMsNkNBQTZDLHlDQUF5QyxtRkFBbUYsc0JBQXNCLG1FQUFtRSxrQkFBa0IsMkNBQTJDLDhEQUE4RCw2QkFBNkIsYUFBYSwrQkFBK0IsbUJBQW1CLDRCQUE0QiwyQ0FBMkMsbUZBQW1GLHNDQUFzQyxTQUFTLHNIQUFzSCxjQUFjLHNDQUFzQyxTQUFTLEVBQUUsZ0JBQWdCLHNDQUFzQyxTQUFTLGtCQUFrQjtBQUM3bkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsZ0JBQWdCO0FBQ2xELG1DQUFtQyxnQkFBZ0I7QUFDbkQ7O0FBRUE7QUFDQSxrQkFBa0I7QUFDbEIsMENBQTBDLGdCQUFnQjtBQUMxRDtBQUNBOztBQUVBO0FBQ0Esa0JBQWtCO0FBQ2xCLGtDQUFrQyxnQkFBZ0I7QUFDbEQsbUNBQW1DLGdCQUFnQjtBQUNuRCwwQ0FBMEMsZ0JBQWdCO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxVQUFVLHFDQUFxQyxpQ0FBaUMsWUFBWSxrQkFBa0IsY0FBYyxzQ0FBc0MsU0FBUyw4QkFBOEIsMnFDQUEycUMsY0FBYyxzQ0FBc0MsU0FBUyxFQUFFLHNCQUFzQixtRUFBbUUsa0JBQWtCLDJDQUEyQyw4REFBOEQsNkJBQTZCLGFBQWEsK0JBQStCLG1CQUFtQiw0QkFBNEIsMkNBQTJDLG1GQUFtRixzQ0FBc0MsU0FBUyxlQUFlLGdCQUFnQixzQ0FBc0MsU0FBUyxnREFBZ0QsdUNBQXVDLHlqQkFBeWpCLG9FQUFvRSxLQUFLLHdyQkFBd3JCLHNFQUFzRSxLQUFLLDZxQkFBNnFCLEdBQUcsZUFBZSxzQ0FBc0MsU0FBUyx5QkFBeUIsa0VBQWtFLGtCQUFrQixrRUFBa0UsSUFBSSx3QkFBd0Isa0JBQWtCLEVBQUUsK0NBQStDLFFBQVEsRUFBRSxnQ0FBZ0Msb0NBQW9DLFFBQVEsS0FBSyxFQUFFLElBQUksc0JBQXNCLG1FQUFtRSxrQkFBa0IsMkNBQTJDLDhEQUE4RCw2QkFBNkIsYUFBYSwrQkFBK0IsbUJBQW1CLDRCQUE0QiwyQ0FBMkMsbUZBQW1GLHNDQUFzQyxTQUFTLHlDQUF5QyxzQkFBc0IsOENBQThDLDBCQUEwQixZQUFZLHNDQUFzQyxTQUFTLDZCQUE2QiwwQ0FBMEMsaUNBQWlDLDZCQUE2QixpREFBaUQsbUNBQW1DLGFBQWEsc0JBQXNCLGVBQWUsZ0NBQWdDLGVBQWUsRUFBRSxvQkFBb0IsUUFBUTtBQUN4a0wsd0JBQXdCLEVBQUUsUUFBUTs7QUFFbEMsZ0JBQWdCLEVBQUUsZUFBZTtBQUNqQzs7QUFFQSxZQUFZLEVBQUUsUUFBUTtBQUN0QixXQUFXLEVBQUUsUUFBUTs7QUFFckI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLGdCQUFnQixzQ0FBc0MsU0FBUyw2REFBNkQsZ0JBQWdCLDhDQUE4QywwRkFBMEYsRUFBRSwyQkFBMkIscXlEQUFxeUQsRUFBRSxnREFBZ0QsMEZBQTBGLEVBQUUsMkJBQTJCLHc5REFBdzlELEVBQUUsd0RBQXdELDBGQUEwRixFQUFFLDJCQUEyQixnNURBQWc1RCxFQUFFLG1EQUFtRCwwRkFBMEYsRUFBRSwyQkFBMkIsK3VFQUErdUUsRUFBRSxHQUFHLHNCQUFzQixtRUFBbUUsa0JBQWtCLDJDQUEyQyw4REFBOEQsNkJBQTZCLGFBQWEsK0JBQStCLG1CQUFtQiw0QkFBNEIsZ0VBQWdFLG1DQUFtQyxzQkFBc0IsRUFBRSxlQUFlLFlBQVkseUNBQXlDLDRCQUE0QixTQUFTLDZGQUE2RixnQkFBZ0Isb0NBQW9DLFNBQVMsc0ZBQXNGLDZEQUE2RCxRQUFRLHNDQUFzQyxXQUFXLDZGQUE2RixTQUFTLDJDQUEyQywwQkFBMEIsWUFBWSxzQ0FBc0MsU0FBUyx1QkFBdUIsa0ZBQWtGLGtCQUFrQixJQUFJLG9FQUFvRSw2RUFBNkUsNklBQTZJLDRCQUE0QixNQUFNLGtEQUFrRCxnQ0FBZ0MsSUFBSSx3QkFBd0IseUNBQXlDLFlBQVksRUFBRSx5QkFBeUIsWUFBWSxlQUFlLFdBQVcsaUNBQWlDLGVBQWUsR0FBRyxpQkFBaUIsd0JBQXdCLHFCQUFxQixtQkFBbUIscUJBQXFCLEdBQUcsR0FBRyxnQkFBZ0IsNkJBQTZCLE1BQU0sRUFBRSxrRkFBa0YsdUJBQXVCLGNBQWMsNkJBQTZCLFdBQVcsR0FBRyxJQUFJLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixxQ0FBcUMsRUFBRSxJQUFJLElBQUk7QUFDcjZWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsRUFBRSxRQUFRO0FBQzlCO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEIsbUJBQW1CLEVBQUUsUUFBUTtBQUM3QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixFQUFFLFFBQVE7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLEVBQUUsUUFBUTtBQUMzQjtBQUNBLGVBQWUsRUFBRSxRQUFRO0FBQ3pCLGlCQUFpQixFQUFFLFFBQVE7QUFDM0I7QUFDQSxvQkFBb0IsRUFBRSxRQUFRO0FBQzlCLGlCQUFpQixFQUFFLFFBQVE7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxFQUFFLFFBQVE7QUFDckIsaUJBQWlCLEVBQUUsUUFBUTtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixFQUFFLFFBQVE7QUFDMUIsbUJBQW1CLEVBQUUsUUFBUTtBQUM3QixtQkFBbUIsRUFBRSxRQUFRO0FBQzdCO0FBQ0E7QUFDQSw2QkFBNkIsRUFBRSxRQUFRO0FBQ3ZDLG1CQUFtQixFQUFFLGtCQUFrQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsc0JBQXNCLG1FQUFtRSxrQkFBa0IsMkNBQTJDLDhEQUE4RCw2QkFBNkIsYUFBYSwrQkFBK0IsbUJBQW1CLDRCQUE0QiwyQ0FBMkMsbUZBQW1GLHNDQUFzQyxTQUFTLGVBQWUsY0FBYyxzQ0FBc0MsU0FBUyx5Q0FBeUMsc0NBQXNDLCtEQUErRCxzQkFBc0IsdUNBQXVDLFNBQVMsc0ZBQXNGLDZEQUE2RCxRQUFRLHNDQUFzQyxXQUFXLDZGQUE2RixTQUFTLDJDQUEyQywwQkFBMEIsWUFBWSxzQ0FBc0MsU0FBUywrREFBK0QsaURBQWlELGVBQWUscUdBQXFHLGVBQWUsSUFBSSxzQkFBc0IsZ0NBQWdDLFlBQVksRUFBRSxFQUFFLGlDQUFpQyxxREFBcUQsTUFBTTtBQUN0bUQsaUJBQWlCLEVBQUUsUUFBUTtBQUMzQixFQUFFLHNFQUFzRSxLQUFLLFFBQVEsNEVBQTRFLEtBQUssUUFBUSw0RUFBNEUsS0FBSyxRQUFRLDRFQUE0RSxLQUFLLFFBQVEsNEVBQTRFLEtBQUssUUFBUSw0RUFBNEUsS0FBSyxRQUFRLE1BQU0sc0JBQXNCLG1FQUFtRSxrQkFBa0IsMkNBQTJDLDhEQUE4RCw2QkFBNkIsYUFBYSwrQkFBK0IsbUJBQW1CLDRCQUE0QiwyQ0FBMkMsbUZBQW1GLHNDQUFzQyxTQUFTLGVBQWUsc0JBQXNCLG1FQUFtRSxrQkFBa0IsMkNBQTJDLDhEQUE4RCw2QkFBNkIsYUFBYSwrQkFBK0IsbUJBQW1CLDRCQUE0QiwyQ0FBMkMsbUZBQW1GLHNDQUFzQyxTQUFTLGVBQWUsc0JBQXNCLDhDQUE4QywwQkFBMEIsWUFBWSxzQ0FBc0MsU0FBUyxnQkFBZ0IsbUJBQW1CO0FBQ3B1RCxXQUFXLEVBQUUsOEJBQThCO0FBQzNDLGVBQWUsRUFBRSxzQkFBc0I7QUFDdkMsaUJBQWlCLEVBQUUsMEJBQTBCO0FBQzdDLGlCQUFpQixFQUFFLFFBQVE7QUFDM0IsNEJBQTRCLGdCQUFnQixzQ0FBc0MsU0FBUyx3Q0FBd0MsZ0JBQWdCLGVBQWUsMENBQTBDLG9CQUFvQixtREFBbUQsSUFBSSxpRUFBaUUsY0FBYyw0QkFBNEIsMERBQTBELHlGQUF5RixZQUFZLDJGQUEyRixlQUFlLHNDQUFzQyxTQUFTLHlDQUF5QyxnQkFBZ0IsOENBQThDLHNEQUFzRCxNQUFNLHlCQUF5QixVQUFVLG1EQUFtRCxZQUFZLGlDQUFpQyxTQUFTLDZCQUE2QixNQUFNLG1GQUFtRixZQUFZLDJDQUEyQyxxREFBcUQsVUFBVSw0QkFBNEIseUJBQXlCLE1BQU0sT0FBTywwQkFBMEIsUUFBUSxrQ0FBa0MsZUFBZSw2Q0FBNkMsTUFBTSwrREFBK0QsTUFBTSxtSUFBbUksTUFBTSxzQ0FBc0MsTUFBTSx1REFBdUQsZ0JBQWdCLHNDQUFzQyxTQUFTLCtDQUErQyx5QkFBeUIsOEJBQThCLGVBQWUsNkJBQTZCLE1BQU0sNEJBQTRCLGlFQUFpRSx5Q0FBeUMsWUFBWSwwRUFBMEUsZ0JBQWdCLHNDQUFzQyxTQUFTLHVCQUF1QixnQkFBZ0Isa0JBQWtCLHVCQUF1Qiw0QkFBNEIsWUFBWSxrQkFBa0IsZ0JBQWdCLHNDQUFzQyxTQUFTLG9CQUFvQiwyREFBMkQsbUZBQW1GLGFBQWEsa0JBQWtCLElBQUksU0FBUyw4QkFBOEIsY0FBYyxFQUFFLElBQUksOEJBQThCLDRCQUE0QixzQkFBc0IsT0FBTyx5RUFBeUUsZUFBZSxTQUFTLGlCQUFpQixVQUFVLHFCQUFxQixtRUFBbUUsa0JBQWtCLDJDQUEyQyw4REFBOEQsNkJBQTZCLGFBQWEsK0JBQStCLG1CQUFtQiw0QkFBNEIsMkNBQTJDLG1GQUFtRixzQ0FBc0MsU0FBUyxtZEFBbWQsY0FBYyxzQ0FBc0MsU0FBUyxzRkFBc0YsUUFBUSxZQUFZLFdBQVcsc0NBQXNDLGFBQWEsTUFBTSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssY0FBYyxzQ0FBc0MsU0FBUywyQ0FBMkMsb0NBQW9DLGtDQUFrQyxlQUFlLGNBQWMsd2pCQUF3akIsRUFBRSxvQkFBb0IsaUNBQWlDLGFBQWEsZ0NBQWdDLGNBQWMsZ0JBQWdCLHNFQUFzRSxTQUFTLGdCQUFnQix3SEFBd0gsYUFBYSxtQkFBbUIsNkVBQTZFLGlCQUFpQixvQ0FBb0MsaUNBQWlDLElBQUksdUZBQXVGLFNBQVMsMEJBQTBCLGdCQUFnQixTQUFTLHNGQUFzRiw2REFBNkQsUUFBUSxzQ0FBc0MsV0FBVyw2RkFBNkYsU0FBUyxvQkFBb0IsbUZBQW1GLDZGQUE2RiwwQkFBMEIsS0FBSyxvREFBb0QsOENBQThDLGdCQUFnQixxQkFBcUIsVUFBVSx3QkFBd0IsY0FBYyw2RUFBNkUsU0FBUywySkFBMkosb0JBQW9CLEtBQUssS0FBSyxTQUFTLG1DQUFtQyxNQUFNLDhDQUE4Qyw2QkFBNkIsbUZBQW1GLG9CQUFvQiwrQkFBK0Isb0JBQW9CLFNBQVMsbUJBQW1CLHVCQUF1Qix1RUFBdUUseUVBQXlFLDZDQUE2QywwQ0FBMEMsa0JBQWtCLGlDQUFpQyxXQUFXLG9DQUFvQyxrQkFBa0IsY0FBYyx3Q0FBd0Msa0JBQWtCLDZHQUE2Ryw2Q0FBNkMsRUFBRSxnQkFBZ0IsOEZBQThGLG9CQUFvQiwwQ0FBMEMsY0FBYyxJQUFJLGFBQWEsU0FBUyxNQUFNLGNBQWMsSUFBSSxjQUFjLFNBQVMsTUFBTSxjQUFjLE1BQU0saUVBQWlFLEtBQUssY0FBYywrQkFBK0IsR0FBRyxnQkFBZ0IsZUFBZSx3QkFBd0IscUJBQXFCLFlBQVksaUJBQWlCLFVBQVUsaUNBQWlDLDJEQUEyRCxZQUFZLElBQUksY0FBYyxtQkFBbUIsbUJBQW1CLDREQUE0RCxLQUFLLHVCQUF1QixLQUFLLGtIQUFrSCx5Q0FBeUMsa0JBQWtCLE1BQU0seUJBQXlCLG9CQUFvQiw4QkFBOEIsU0FBUyxrQ0FBa0MsU0FBUywwRUFBMEUsSUFBSSxTQUFTLHlDQUF5QyxhQUFhLE1BQU0sMkJBQTJCLGlCQUFpQixNQUFNLG9CQUFvQiwyQkFBMkIsTUFBTSwrQkFBK0IsU0FBUyxjQUFjLFNBQVMsWUFBWSxRQUFRLE1BQU0scUJBQXFCLE9BQU8sZ0NBQWdDLFVBQVUsc0NBQXNDLGtCQUFrQiwyQ0FBMkMsOERBQThELDZCQUE2QixhQUFhLCtCQUErQixtQkFBbUIsNkJBQTZCLGdCQUFnQixrRkFBa0YsY0FBYywrREFBK0Qsc0JBQXNCLHVDQUF1QyxnQkFBZ0IsbUNBQW1DLDJCQUEyQixtRkFBbUYsZ0JBQWdCLG9EQUFvRCxlQUFlLHlCQUF5QixJQUFJLEtBQUsseUNBQXlDLGlCQUFpQixTQUFTLEdBQUcsU0FBUyxRQUFRLElBQUksb0NBQW9DLFFBQVEsb0JBQW9CLFNBQVMsYUFBYSxpQkFBaUIsbUJBQW1CLGdDQUFnQyxTQUFTLGFBQWEsbUNBQW1DLElBQUksMkJBQTJCLG1CQUFtQixRQUFRLElBQUksMENBQTBDLElBQUksa0JBQWtCLFNBQVMsa0JBQWtCLG9EQUFvRCxJQUFJLHFFQUFxRSxrREFBa0QsY0FBYyxrREFBa0Qsa0JBQWtCLHFGQUFxRiw4QkFBOEIsV0FBVyxxRUFBcUUsWUFBWSxHQUFHLGNBQWMsd0JBQXdCLGtDQUFrQyw0QkFBNEIsR0FBRyxFQUFFLGdCQUFnQixJQUFJLGlGQUFpRixTQUFTLGFBQWEsTUFBTSxjQUFjLFlBQVksY0FBYyxhQUFhLGdCQUFnQiw2Q0FBNkMsY0FBYyxRQUFRLFdBQVcsa0NBQWtDLFFBQVEsNkNBQTZDLFlBQVksR0FBRyxnQkFBZ0Isc0JBQXNCLGNBQWMseUJBQXlCLFVBQVUsSUFBSSxjQUFjLHFGQUFxRixnQ0FBZ0MsK0JBQStCLHFFQUFxRSxZQUFZLElBQUksY0FBYyx1QkFBdUIsa0NBQWtDLG1CQUFtQixxQ0FBcUMsR0FBRyxlQUFlLEVBQUUsS0FBSywrQkFBK0IsS0FBSyxnQkFBZ0IsNERBQTRELFFBQVEsWUFBWSxrQ0FBa0MsbUNBQW1DLHNCQUFzQixFQUFFLGVBQWUsYUFBYSxjQUFjLDRCQUE0QixTQUFTLDZGQUE2RixnQkFBZ0IsY0FBYywwQkFBMEIsV0FBVyxvQkFBb0Isb0ZBQW9GLDRJQUE0SSxxREFBcUQsc0JBQXNCLGlFQUFpRSxvRkFBb0YsMklBQTJJLG1EQUFtRCxnQkFBZ0Isb0hBQW9ILDJDQUEyQyxVQUFVLHVFQUF1RSxVQUFVLHdFQUF3RSxVQUFVLHlFQUF5RSxVQUFVLCtFQUErRSxVQUFVLGlCQUFpQixVQUFVLGlCQUFpQixrQkFBa0IscUJBQXFCLGNBQWMsaUZBQWlGLGdCQUFnQixhQUFhLG9HQUFvRyxLQUFLLHNCQUFzQixnQkFBZ0IsVUFBVSxnQ0FBZ0MsMENBQTBDLGtCQUFrQixhQUFhLFlBQVksb0NBQW9DLHlDQUF5Qyw4Q0FBOEMsV0FBVyxvQkFBb0IsZ0NBQWdDLCtCQUErQix5QkFBeUIscUJBQXFCLHFCQUFxQiw0QkFBNEIsb0JBQW9CLHFCQUFxQixxQkFBcUIsNEJBQTRCLG9CQUFvQixxQkFBcUIscUJBQXFCLDRCQUE0QixxQkFBcUIsK0RBQStELHFCQUFxQixvREFBb0QscUJBQXFCLCtGQUErRix3QkFBd0IsNkVBQTZFLG1FQUFtRSw2Q0FBNkMsK0dBQStHLG1DQUFtQyxzRUFBc0UsT0FBTyxzRUFBc0UscUZBQXFGLFVBQVUsa0JBQWtCLGtGQUFrRixrREFBa0QsS0FBSyxtQ0FBbUMseUNBQXlDLE9BQU8seUJBQXlCLGdFQUFnRSw2SEFBNkgsSUFBSSwwVEFBMFQsa0JBQWtCLGlDQUFpQyxzREFBc0QsY0FBYyxLQUFLLFVBQVUsbUNBQW1DLDJCQUEyQixNQUFNLG1CQUFtQixNQUFNLG1CQUFtQixLQUFLLE9BQU8sV0FBVyxrQkFBa0IsaUNBQWlDLHNEQUFzRCwwQkFBMEIsS0FBSyxVQUFVLDJCQUEyQixNQUFNLG1CQUFtQixNQUFNLG1CQUFtQixLQUFLLE9BQU8sYUFBYSxvQkFBb0Isa0dBQWtHLGlLQUFpSyxvQkFBb0IsbUhBQW1ILGdCQUFnQixnQkFBZ0IsbUJBQW1CLGtDQUFrQyxnQkFBZ0IsZ0JBQWdCLG1CQUFtQixrQ0FBa0MsY0FBYyw0QkFBNEIsZ0JBQWdCLGdCQUFnQixtQkFBbUIsa0NBQWtDLGdCQUFnQixnQkFBZ0IsbUJBQW1CLHVMQUF1TCxnQkFBZ0IsZ0JBQWdCLG1CQUFtQixrQ0FBa0MsZ0JBQWdCLGlDQUFpQyw0QkFBNEIsY0FBYyxtQkFBbUIsOEJBQThCLGdCQUFnQixrRkFBa0YsNENBQTRDLElBQUksY0FBYyw0QkFBNEIsR0FBRyxTQUFTLGNBQWMseUJBQXlCLGVBQWUseUJBQXlCLEtBQUssMEJBQTBCLEdBQUcsa0JBQWtCLGVBQWUsb0NBQW9DLCtCQUErQixJQUFJLDhCQUE4QixTQUFTLGdCQUFnQixPQUFPLG9EQUFvRCxJQUFJLFdBQVcsWUFBWSxhQUFhLFNBQVMsYUFBYSxrQkFBa0IsZ0NBQWdDLG9CQUFvQixxQkFBcUIsb0JBQW9CLGdCQUFnQiw2QkFBNkIsMkJBQTJCLHNCQUFzQixvQkFBb0IscUJBQXFCLGVBQWUsMEJBQTBCLG1CQUFtQixvQ0FBb0MseUJBQXlCLHlCQUF5QiwwTUFBME0sc0JBQXNCLGtFQUFrRSxrQkFBa0IsaUNBQWlDLE9BQU8saUNBQWlDLHdCQUF3QixtR0FBbUcsK0ZBQStGLGtCQUFrQixpQ0FBaUMsT0FBTyxpQ0FBaUMsd0JBQXdCLG1HQUFtRywrRkFBK0YsbUJBQW1CLG9DQUFvQyx5QkFBeUIsd0JBQXdCLG9CQUFvQiwyQkFBMkIsMEdBQTBHLGdOQUFnTixvQ0FBb0MsMEJBQTBCLHlCQUF5QixrQkFBa0IsT0FBTyw2RUFBNkUsd0JBQXdCLHVNQUF1TSw0QkFBNEIsT0FBTywwSEFBMEgsa0NBQWtDLCtRQUErUSxtQkFBbUIsc0ZBQXNGLHNCQUFzQiw4RkFBOEYsTUFBTSxXQUFXLDZCQUE2QiwrRkFBK0Ysc0JBQXNCLFVBQVUsa0JBQWtCLGlDQUFpQyxtZkFBbWYsa0JBQWtCLDBCQUEwQixrQ0FBa0Msb0RBQW9ELHVFQUF1RSxvQkFBb0IsNENBQTRDLHFCQUFxQiw0Q0FBNEMsbUJBQW1CLDRDQUE0Qyx1QkFBdUIsNENBQTRDLHFCQUFxQiw0Q0FBNEMsc0JBQXNCLDRDQUE0QyxpQkFBaUIsNENBQTRDLGlDQUFpQyxxREFBcUQsc0JBQXNCLDJDQUEyQyx1QkFBdUIsMkNBQTJDLDBCQUEwQiwyQ0FBMkMsNEJBQTRCLDJDQUEyQyxrQkFBa0IscUNBQXFDLG1CQUFtQixzQ0FBc0MsMkJBQTJCLG1CQUFtQixTQUFTLGdFQUFnRSxJQUFJLGNBQWMsd0JBQXdCLHdEQUF3RCxxQkFBcUIsb0JBQW9CLGdEQUFnRCxFQUFFLHVCQUF1QixnQkFBZ0IsMENBQTBDLFVBQVUsd0VBQXdFLEVBQUUsNkJBQTZCLGtCQUFrQiwwR0FBMEcsOEJBQThCLG1DQUFtQyxtQ0FBbUMsd0JBQXdCLDhIQUE4SCxlQUFlLGdCQUFnQixzQ0FBc0MsTUFBTSxxQkFBcUIsTUFBTSxzQkFBc0IsU0FBUyxnQ0FBZ0MsdUJBQXVCLFVBQVUsMkNBQTJDLFlBQVksV0FBVyxpREFBaUQseUJBQXlCLGVBQWUsMEVBQTBFLGVBQWUsbXVGQUFtdUYsMEJBQTBCLFNBQVMsZ0RBQWdELFNBQVMsSUFBSSxjQUFjLHFEQUFxRCxnQkFBZ0IsYUFBYSxnRUFBZ0UsaUJBQWlCLGtCQUFrQiw2Q0FBNkMsSUFBSSxrSEFBa0gsY0FBYyxpQ0FBaUMsY0FBYyxzQkFBc0IsY0FBYyw4QkFBOEIsY0FBYyw2QkFBNkIsY0FBYyxrREFBa0QsY0FBYyxnQkFBZ0Isb01BQW9NLG1NQUFtTSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsMEJBQTBCLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSwwQkFBMEIsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSwwQkFBMEIsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsY0FBYywyQkFBMkIsU0FBUyxJQUFJLE1BQU0sY0FBYyxXQUFXLCtCQUErQixZQUFZLDJCQUEyQixnRUFBZ0UsUUFBUSwwQ0FBMEMsY0FBYyxJQUFJLElBQUksYUFBYSwrREFBK0QsdUJBQXVCLEVBQUUsZ0JBQWdCLGlEQUFpRCxJQUFJLDJDQUEyQyxTQUFTLDBDQUEwQyxnRUFBZ0UsNEZBQTRGLGVBQWUsd0NBQXdDLFNBQVMsRUFBRSxxREFBcUQsaUJBQWlCLHlCQUF5QixvREFBb0QsU0FBUyxFQUFFLGVBQWUsK1RBQStULHFCQUFxQixjQUFjLGVBQWUsd0NBQXdDLGNBQWMsK0JBQStCLGVBQWUsc0NBQXNDLDhCQUE4QixrQkFBa0IsYUFBYSxTQUFTLGlEQUFpRCxjQUFjLHdDQUF3QyxrQkFBa0IsZ0JBQWdCLHVEQUF1RCwwQkFBMEIsbUNBQW1DLG1FQUFtRSxjQUFjLFlBQVkscUNBQXFDLGNBQWMsVUFBVSx3Q0FBd0MsYUFBYSxVQUFVLG9CQUFvQiwyQkFBMkIsY0FBYyx3QkFBd0IsS0FBSyxjQUFjLHlDQUF5QyxhQUFhLGlCQUFpQiw2QkFBNkIsaUNBQWlDLHNDQUFzQyxJQUFJLG1DQUFtQyx5Q0FBeUMsc0lBQXNJLCtDQUErQyxvQkFBb0IsMkJBQTJCLElBQUksU0FBUyxhQUFhLDZHQUE2RyxxQkFBcUIsSUFBSSwyQkFBMkIsd0JBQXdCLDZEQUE2RCxZQUFZLEtBQUssS0FBSyxvQ0FBb0MsaUVBQWlFLFlBQVkscUJBQXFCLFNBQVMsNERBQTRELE9BQU8sd0RBQXdELGNBQWMsU0FBUyxVQUFVLCtCQUErQiwwQkFBMEIsd0ZBQXdGLGlCQUFpQixRQUFRLG1CQUFtQixLQUFLLDZEQUE2RCxNQUFNLE9BQU8sWUFBWSxXQUFXLHVDQUF1QyxVQUFVLGFBQWEsYUFBYSxndkJBQWd2QixjQUFjLGlDQUFpQyxpQkFBaUIsVUFBVSx3QkFBd0IsbURBQW1ELGdDQUFnQyw0Q0FBNEMsa0JBQWtCLGtCQUFrQixjQUFjLGdCQUFnQixnREFBZ0QsMFFBQTBRLGVBQWUsYUFBYSxpQkFBaUIsZUFBZSxhQUFhLDZCQUE2QixxREFBcUQsNEJBQTRCLGlCQUFpQixvQkFBb0IsMENBQTBDLGlCQUFpQixrUkFBa1IsaURBQWlELGNBQWMseUVBQXlFLG1CQUFtQixtREFBbUQsb0NBQW9DLDJIQUEySCxPQUFPLHFCQUFxQixTQUFTLGdDQUFnQyxpQ0FBaUMsOEJBQThCLE1BQU0sa0JBQWtCLDBEQUEwRCxjQUFjLGtCQUFrQiwwREFBMEQsK0JBQStCLG9DQUFvQyx3RUFBd0Usa0RBQWtELHFDQUFxQyxzREFBc0QseUJBQXlCLHdCQUF3QiwyREFBMkQsT0FBTyxhQUFhLHNDQUFzQyxxQ0FBcUMsa0JBQWtCLFVBQVUsZUFBZSw0SEFBNEgseUJBQXlCLHNCQUFzQixhQUFhLHVCQUF1QixJQUFJLHdCQUF3QixhQUFhLDBFQUEwRSxPQUFPLHdEQUF3RCxjQUFjLG1EQUFtRCxhQUFhLGdCQUFnQiw0REFBNEQsT0FBTyxtQkFBbUIseUNBQXlDLFlBQVksR0FBRywwQkFBMEIsc0JBQXNCLGVBQWUseUNBQXlDLFNBQVMsaUJBQWlCLGVBQWUsK0JBQStCLE1BQU0sZ0NBQWdDLG9CQUFvQiw4SEFBOEgsU0FBUyxxQ0FBcUMsT0FBTyxzRUFBc0Usb0ZBQW9GLHVEQUF1RCxXQUFXLEtBQUssb0JBQW9CLGdCQUFnQixzQkFBc0IsK0ZBQStGLDZDQUE2QyxtQkFBbUIsb0NBQW9DLHNGQUFzRiw4QkFBOEIsTUFBTSxTQUFTLGtCQUFrQixvQkFBb0IsYUFBYSxnQ0FBZ0MsdUJBQXVCLEtBQUssY0FBYyxtQkFBbUIsZ0JBQWdCLGtEQUFrRCxxREFBcUQsZUFBZSx5Q0FBeUMsR0FBRyxrQ0FBa0MsZ0JBQWdCLE9BQU8sY0FBYyxhQUFhLGdCQUFnQixnQ0FBZ0MsU0FBUyxPQUFPLGtEQUFrRCxhQUFhLDJDQUEyQyxXQUFXLFdBQVcsWUFBWSw4QkFBOEIsZ0JBQWdCLHdCQUF3QixLQUFLLG1CQUFtQixRQUFRLHVCQUF1QixJQUFJLEtBQUsscUJBQXFCLHdCQUF3QixTQUFTLE9BQU8sa0JBQWtCLDZCQUE2QixVQUFVLHVIQUF1SCxpQ0FBaUMsVUFBVSxxQ0FBcUMsWUFBWSw0SEFBNEgseUZBQXlGLHlCQUF5QixzQkFBc0IsYUFBYSxXQUFXLFlBQVksSUFBSSx3QkFBd0IsYUFBYSxPQUFPLHFEQUFxRCwrQkFBK0IsZ0NBQWdDLCtHQUErRyxZQUFZLHNCQUFzQixjQUFjLCtDQUErQyxxQkFBcUIsa0JBQWtCLHdCQUF3QixPQUFPLGNBQWMsMEJBQTBCLE9BQU8scUJBQXFCLHVDQUF1QyxPQUFPLHFCQUFxQixxQkFBcUIsVUFBVSxzQkFBc0IsT0FBTyw2Q0FBNkMsNkJBQTZCLDRCQUE0Qiw0QkFBNEIsMkJBQTJCLDZCQUE2QiwyQkFBMkIsMEJBQTBCLHVDQUF1QyxzQ0FBc0MsaUNBQWlDLGdDQUFnQyx5QkFBeUIsd0JBQXdCLDhCQUE4Qiw2QkFBNkIsc0JBQXNCLHFCQUFxQix3QkFBd0IsdUJBQXVCLG9CQUFvQixlQUFlLGFBQWEsaUJBQWlCLGVBQWUsYUFBYSxjQUFjLDJVQUEyVSxFQUFFLGlEQUFpRCxTQUFTLCtuQkFBK25CLHlDQUF5QyxnQ0FBZ0MsZ0JBQWdCLGdDQUFnQyxZQUFZLFdBQVcsbURBQW1ELFFBQVEsU0FBUyxzQkFBc0IsTUFBTSxrQkFBa0IsZ0JBQWdCLGtCQUFrQixpQkFBaUIsbUJBQW1CLHNCQUFzQixvRUFBb0UsazZIQUFrNkgsb0JBQW9CLFNBQVMsbUJBQW1CLHdDQUF3QyxjQUFjLG1GQUFtRixHQUFHLGNBQWMscURBQXFELGNBQWMseUJBQXlCLGNBQWMsb0JBQW9CLGNBQWMsNkZBQTZGLGNBQWMscUJBQXFCLGNBQWMsc0JBQXNCLGNBQWMsUUFBUSxhQUFhLG1DQUFtQyxJQUFJLDJCQUEyQixtQkFBbUIsUUFBUSxJQUFJLDBDQUEwQyxJQUFJLGtCQUFrQixTQUFTLG9CQUFvQiw2REFBNkQsMkVBQTJFLGtEQUFrRCxFQUFFLGtCQUFrQixnREFBZ0QsU0FBUyxLQUFLLFNBQVMsZ0dBQWdHLFdBQVcsNEhBQTRILElBQUksR0FBRyw4RkFBOEYsOEJBQThCLHVDQUF1QyxTQUFTLCtDQUErQyxLQUFLLG9CQUFvQixpQkFBaUIsbUJBQW1CLHdCQUF3QixlQUFlLDJEQUEyRCx5Q0FBeUMsZ0JBQWdCLE1BQU0sb0JBQW9CLGdDQUFnQyxJQUFJLHlCQUF5QixTQUFTLDJFQUEyRSxnQkFBZ0IsYUFBYSxvR0FBb0csaUJBQWlCLDhFQUE4RSxjQUFjLGdCQUFnQixZQUFZLFdBQVcsS0FBSyxXQUFXLCtHQUErRyx1QkFBdUIsd0NBQXdDLGdDQUFnQyxZQUFZLG1CQUFtQixLQUFLLG1CQUFtQixzRUFBc0UsU0FBUyxpQkFBaUIsMkhBQTJILDBDQUEwQyxhQUFhLG1EQUFtRCxzRUFBc0UsaUJBQWlCLDRGQUE0Rix1REFBdUQsZUFBZSx1RUFBdUUsdUNBQXVDLEVBQUUsY0FBYywyQkFBMkIsY0FBYywwQ0FBMEMsY0FBYywrQ0FBK0Msc1hBQXNYLGtCQUFrQixjQUFjLFVBQVUsa0RBQWtELElBQUksd0JBQXdCLHlQQUF5UCxZQUFZLGdCQUFnQiwyRUFBMkUsc0JBQXNCLG9DQUFvQyxlQUFlLDJCQUEyQixJQUFJLHdCQUF3Qiw0Q0FBNEMsT0FBTywrREFBK0QsR0FBRywrQkFBK0Isb0VBQW9FLGVBQWUsb0VBQW9FLHVCQUF1QixXQUFXLFNBQVMsZ0JBQWdCLHFCQUFxQixXQUFXLG9EQUFvRCxpRkFBaUYsd0JBQXdCLG9FQUFvRSx3QkFBd0IsbUJBQW1CLGdCQUFnQixtQkFBbUIsK0dBQStHLE9BQU8sSUFBSSxtRUFBbUUsa0JBQWtCLFlBQVksb0JBQW9CLDhDQUE4QyxrQkFBa0IseUJBQXlCLGdCQUFnQixxQkFBcUIsK0JBQStCLGdCQUFnQixTQUFTLGtEQUFrRCxnQkFBZ0IsZ0JBQWdCLDBCQUEwQixpREFBaUQsSUFBSSxNQUFNLHFDQUFxQyw0QkFBNEIsZ0JBQWdCLG9CQUFvQixlQUFlLHdCQUF3QixJQUFJLHlCQUF5QixTQUFTLFNBQVMsU0FBUyxnQkFBZ0IseUNBQXlDLGtCQUFrQixnQkFBZ0IsS0FBSyxhQUFhLFNBQVMsa0JBQWtCLG1CQUFtQixXQUFXLG1IQUFtSCxrQkFBa0Isa0JBQWtCLGNBQWMsa0NBQWtDLGtEQUFrRCxJQUFJLHlCQUF5QixZQUFZLElBQUksZ0JBQWdCLGtCQUFrQix1QkFBdUIsa0JBQWtCLCtCQUErQixvQkFBb0Isd0ZBQXdGLFdBQVcsOEJBQThCLGNBQWMsU0FBUyxnQkFBZ0IsY0FBYyxnQkFBZ0IsU0FBUyxJQUFJLGlCQUFpQixrQkFBa0IsMEJBQTBCLHdCQUF3QixPQUFPLFNBQVMsMEJBQTBCLDhCQUE4QixjQUFjLGtGQUFrRiwrQkFBK0IseUJBQXlCLFdBQVcsOEJBQThCLDJEQUEyRCxTQUFTLHdCQUF3QixVQUFVLHNCQUFzQixlQUFlLDJDQUEyQywrQkFBK0IsK0NBQStDLFdBQVcsMkZBQTJGLEtBQUssd0NBQXdDLCtDQUErQyxTQUFTLFFBQVEsdUJBQXVCLGdGQUFnRixXQUFXLG1HQUFtRyxjQUFjLFNBQVMsNEJBQTRCLFVBQVUsT0FBTyxpQkFBaUIsZUFBZSxrRkFBa0YsbUNBQW1DLElBQUksTUFBTSxlQUFlLDBDQUEwQyxLQUFLLEtBQUsscUJBQXFCLHNCQUFzQiwrREFBK0QseUJBQXlCLFdBQVcsZUFBZSw0QkFBNEIsdUVBQXVFLHdEQUF3RCxvQkFBb0IscUZBQXFGLFdBQVcsMkRBQTJELGNBQWMsMEJBQTBCLGdCQUFnQixTQUFTLGtDQUFrQyxJQUFJLE1BQU0sV0FBVyw0QkFBNEIsVUFBVSxPQUFPLGlCQUFpQixlQUFlLGtGQUFrRix5REFBeUQsSUFBSSxNQUFNLGVBQWUsZ0VBQWdFLHVFQUF1RSx5QkFBeUIsV0FBVyxtQ0FBbUMsV0FBVyxpQkFBaUIsa0JBQWtCLElBQUkscUJBQXFCLHVFQUF1RSx3REFBd0QsTUFBTSxZQUFZLG9CQUFvQixpQkFBaUIsaUNBQWlDLGFBQWEsbUpBQW1KLDJDQUEyQyxzQkFBc0IsdUJBQXVCLGdCQUFnQix1RUFBdUUsd0VBQXdFLGlCQUFpQix3QkFBd0IsOEJBQThCLDZDQUE2Qyx3Q0FBd0Msb0NBQW9DLHlGQUF5RixrQkFBa0IsWUFBWSxJQUFJLE1BQU0sV0FBVywyQkFBMkIsb0VBQW9FLElBQUksdUNBQXVDLDJDQUEyQyxlQUFlLGtCQUFrQix5QkFBeUIsaUJBQWlCLHVCQUF1QixJQUFJLE1BQU0sa0RBQWtELG1CQUFtQix1QkFBdUIsSUFBSSxNQUFNLFdBQVcsMkNBQTJDLHlEQUF5RCxZQUFZLElBQUkscUNBQXFDLFlBQVksb0JBQW9CLHFGQUFxRiw4QkFBOEIsMENBQTBDLDZEQUE2RCxxQ0FBcUMsV0FBVyxzQkFBc0IsU0FBUyx5QkFBeUIsc0NBQXNDLGtCQUFrQixvQ0FBb0MsK0NBQStDLFlBQVksR0FBRyxpQ0FBaUMsd0JBQXdCLG1FQUFtRSxxQ0FBcUMscUJBQXFCLGtDQUFrQyxvQ0FBb0MsbUhBQW1ILCtCQUErQiwrQkFBK0Isd0NBQXdDLDRFQUE0RSxxQkFBcUIsdUNBQXVDLDBDQUEwQyw0QkFBNEIsMEJBQTBCLFdBQVcsOEJBQThCLHdEQUF3RCxvQ0FBb0MsMEJBQTBCLFdBQVcsd0JBQXdCLDBCQUEwQiw4QkFBOEIsaUNBQWlDLDZDQUE2QywwQkFBMEIsZ0NBQWdDLHFCQUFxQixlQUFlLDBCQUEwQixXQUFXLG9CQUFvQiwyRUFBMkUsK0JBQStCLGtDQUFrQyxrQkFBa0IsWUFBWSx3Q0FBd0MsY0FBYyxvQ0FBb0Msb0JBQW9CLHdDQUF3QyxNQUFNLEVBQUUsR0FBRyxZQUFZLDRCQUE0QixxQ0FBcUMsRUFBRSw4QkFBOEIsaUJBQWlCLEtBQUssaUJBQWlCLGdCQUFnQixXQUFXLGtDQUFrQywyREFBMkQsMEJBQTBCLCtCQUErQixvREFBb0Qsc0NBQXNDLGlCQUFpQixHQUFHLDJCQUEyQixlQUFlLDREQUE0RCxtQkFBbUIsK0JBQStCLG9CQUFvQixTQUFTLDJDQUEyQyxjQUFjLDhDQUE4QywwQ0FBMEMsS0FBSyxvSUFBb0ksSUFBSSxRQUFRLFNBQVMsV0FBVyxlQUFlLE9BQU8sbUJBQW1CLHFCQUFxQiw4QkFBOEIsSUFBSSw2RUFBNkUsU0FBUyxnTkFBZ04sTUFBTSxlQUFlLGtEQUFrRCxJQUFJLHdCQUF3QixvREFBb0QsaUJBQWlCLCtEQUErRCx5REFBeUQsaUJBQWlCLDBDQUEwQyxnQ0FBZ0Msa0JBQWtCLE9BQU8scUJBQXFCLGtCQUFrQixJQUFJLHdEQUF3RCxHQUFHLEdBQUcsZUFBZSxpQ0FBaUMsS0FBSywwU0FBMFMsVUFBVSxzQ0FBc0MscUNBQXFDLHVGQUF1Rix3RkFBd0YseUJBQXlCLDRDQUE0QyxlQUFlLGtCQUFrQixRQUFRLEtBQUssZ0NBQWdDLGtCQUFrQixpQkFBaUIsWUFBWSxXQUFXLE1BQU0sV0FBVyx1Q0FBdUMsd0JBQXdCLDJCQUEyQix5QkFBeUIsbUNBQW1DLFNBQVMsSUFBSSxHQUFHLHNCQUFzQixpQkFBaUIsZUFBZSxrQkFBa0IsbUhBQW1ILHlEQUF5RCw0REFBNEQsMERBQTBELDJEQUEyRCxxR0FBcUcsNEJBQTRCLGFBQWEsR0FBRyxvQkFBb0Isd0ZBQXdGLHNDQUFzQywrQ0FBK0MsZUFBZSx3Q0FBd0MsZUFBZSw2QkFBNkIsUUFBUSxxSEFBcUgsS0FBSyx5RUFBeUUsV0FBVyxpQkFBaUIsc0JBQXNCLHNIQUFzSCxTQUFTLHVHQUF1RyxtQkFBbUIsdUJBQXVCLFlBQVkscUJBQXFCLHdHQUF3RyxJQUFJLGdFQUFnRSxVQUFVLFVBQVUsU0FBUyxTQUFTLDJEQUEyRCxjQUFjLFVBQVUsNkJBQTZCLGtGQUFrRiw0Q0FBNEMsbUZBQW1GLHFDQUFxQywwQ0FBMEMsb0NBQW9DLFFBQVEsc0JBQXNCLG9DQUFvQyxvQkFBb0IsdUZBQXVGLFdBQVcsTUFBTSxzQ0FBc0MsMEJBQTBCLEdBQUcsNEJBQTRCLGFBQWEsMkZBQTJGLG1DQUFtQyxpQkFBaUIscURBQXFELG9EQUFvRCx1Q0FBdUMsOEJBQThCLDJCQUEyQixvQkFBb0IsSUFBSSxxQ0FBcUMsMENBQTBDLHdDQUF3QyxtREFBbUQsa0RBQWtELGVBQWUsR0FBRywwREFBMEQsY0FBYyxVQUFVLDZCQUE2QixzQ0FBc0MsbURBQW1ELGNBQWMsc0JBQXNCLGVBQWUsK0JBQStCLG1EQUFtRCxvQ0FBb0MsMkJBQTJCLElBQUksR0FBRyxvQkFBb0IsbUJBQW1CLGFBQWEsVUFBVSwyQkFBMkIsaUJBQWlCLDJFQUEyRSw0Q0FBNEMsaURBQWlELG9DQUFvQyx1RUFBdUUsNElBQTRJLHFDQUFxQyx5SkFBeUosdUhBQXVILGtEQUFrRCxPQUFPLGlDQUFpQyxpSUFBaUksd0RBQXdELHVMQUF1TCxtREFBbUQsaUJBQWlCLElBQUksUUFBUSxFQUFFLDhCQUE4Qix3QkFBd0IsaUNBQWlDLHFJQUFxSSxRQUFRLG1EQUFtRCx3REFBd0QscUJBQXFCLHVKQUF1SixHQUFHLGNBQWMsbUJBQW1CLDZEQUE2RCw0Q0FBNEMsbURBQW1ELG1EQUFtRCxRQUFRLGdDQUFnQyxtQkFBbUIsMlVBQTJVLDZCQUE2QixJQUFJLG9DQUFvQyxJQUFJLHdQQUF3UCxvQ0FBb0MsU0FBUyx1RkFBdUYsU0FBUyxrREFBa0QsZ0JBQWdCLElBQUksd0NBQXdDLEtBQUsseUNBQXlDLGVBQWUsZ0NBQWdDLGlCQUFpQixrREFBa0Qsd0JBQXdCLDhCQUE4QixZQUFZLGdIQUFnSCxJQUFJLG1CQUFtQixpQkFBaUIsZ2lDQUFnaUMsWUFBWSxHQUFHLGtCQUFrQixnQkFBZ0IsbUhBQW1ILDhDQUE4QyxnQ0FBZ0MsNkJBQTZCLHNDQUFzQyx1QkFBdUIsd0JBQXdCLHdDQUF3Qyw0Q0FBNEMsR0FBRyxHQUFHLGVBQWUsa0RBQWtELElBQUksd0JBQXdCLHNHQUFzRyxjQUFjLFVBQVUsbUZBQW1GLDRFQUE0RSxrQ0FBa0MsR0FBRywwREFBMEQseU5BQXlOLCtCQUErQixXQUFXLDRDQUE0QywwQkFBMEIsMEJBQTBCLDZGQUE2Rix1Q0FBdUMsVUFBVSxpRkFBaUYsR0FBRyxHQUFHLEdBQUcsY0FBYywrQ0FBK0MsMkJBQTJCLEVBQUUsbUJBQW1CLGdDQUFnQyxlQUFlLGtEQUFrRCxJQUFJLHdCQUF3QixxRUFBcUUsc0NBQXNDLG1CQUFtQixrQ0FBa0MsNENBQTRDLGlDQUFpQyw2QkFBNkIsSUFBSSxjQUFjLEdBQUcsR0FBRyxHQUFHLHFEQUFxRCxLQUFLLGVBQWUsWUFBWSxTQUFTLHFCQUFxQixhQUFhLG1CQUFtQixvQkFBb0IsRUFBRSxjQUFjLFNBQVMsTUFBTSxHQUFHLFdBQVcscUNBQXFDLFVBQVUsbURBQW1ELE1BQU0sTUFBTSwyQkFBMkIsTUFBTSxpQkFBaUIsc0NBQXNDLDhCQUE4QixnQ0FBZ0MsR0FBRyxTQUFTLHdCQUF3QixhQUFhLDBTQUEwUyxHQUFHLGVBQWUsaUJBQWlCLEdBQUcsS0FBSyxLQUFLLFVBQVUsR0FBRyx5Q0FBeUMsRUFBRSxvQ0FBb0MsOGRBQThkLHVCQUF1QixvSkFBb0osS0FBSyxFQUFFLGdHQUFnRyw2REFBNkQsVUFBVSx5Q0FBeUMsd0JBQXdCLElBQUksb0JBQW9CLDZEQUE2RCxrQ0FBa0Msa0NBQWtDLE1BQU0sNEJBQTRCLG1DQUFtQyxNQUFNLHVCQUF1QixjQUFjLFVBQVUscURBQXFELEtBQUssRUFBRSwwQkFBMEIsV0FBVyxNQUFNLFdBQVcsTUFBTSxtQ0FBbUMsNkJBQTZCLE1BQU0sV0FBVyxXQUFXLG1CQUFtQiw0QkFBNEIsR0FBRyxlQUFlLElBQUksc0ZBQXNGLHVEQUF1RCxtQ0FBbUMsTUFBTSxhQUFhLDBNQUEwTSw0QkFBNEIsK0JBQStCLE9BQU8sRUFBRSxNQUFNLHFEQUFxRCxPQUFPLHlEQUF5RCxNQUFNLHdDQUF3QyxXQUFXLG1DQUFtQyxrRUFBa0UsTUFBTSw4U0FBOFMsY0FBYywwQkFBMEIsbUJBQW1CLE1BQU0seUNBQXlDLGdDQUFnQyxrREFBa0QsVUFBVSwwQ0FBMEMsaUhBQWlILG9CQUFvQixnSEFBZ0gsTUFBTSw4QkFBOEIsS0FBSyxNQUFNLHNDQUFzQyxxQ0FBcUMsa0NBQWtDLE1BQU0sd0JBQXdCLE1BQU0saUJBQWlCLE1BQU0saUJBQWlCLE1BQU0saUJBQWlCLE1BQU0sK0NBQStDLE1BQU0sMENBQTBDLDZDQUE2QyxzQkFBc0IsTUFBTSx3QkFBd0IsTUFBTSxvQ0FBb0MsTUFBTSwyQ0FBMkMsTUFBTSxzQkFBc0IsTUFBTSxzQkFBc0IsTUFBTSxzQkFBc0IsTUFBTSx5REFBeUQsTUFBTSw4QkFBOEIsTUFBTSwrQkFBK0IsVUFBVSx1Q0FBdUMsYUFBYSxNQUFNLGtCQUFrQixNQUFNLCtGQUErRixVQUFVLHlDQUF5QyxzREFBc0QsVUFBVSxxQ0FBcUMsTUFBTSxtQ0FBbUMsS0FBSyxlQUFlLHFDQUFxQyxNQUFNLG1DQUFtQyxNQUFNLHdCQUF3Qiw4RUFBOEUsZ0NBQWdDLDRCQUE0QixZQUFZLDhJQUE4SSxnQ0FBZ0Msc0NBQXNDLElBQUksS0FBSyx3REFBd0QsSUFBSSx3Q0FBd0MscUVBQXFFLGtEQUFrRCxjQUFjLFVBQVUsY0FBYyxrREFBa0QsZ0JBQWdCLE1BQU0sbURBQW1ELGtCQUFrQix1QkFBdUIsTUFBTSwyQ0FBMkMsTUFBTSxZQUFZLG1FQUFtRSxLQUFLLDRCQUE0QixTQUFTLHlGQUF5RixvQkFBb0IsT0FBTyxZQUFZLG9DQUFvQyx1Q0FBdUMsTUFBTSx1R0FBdUcsTUFBTSxnQkFBZ0IsbUJBQW1CLGtEQUFrRCxVQUFVLDhDQUE4QyxJQUFJLCtCQUErQixNQUFNLFlBQVksUUFBUSxTQUFTLElBQUksZ0JBQWdCLElBQUksd0NBQXdDLFNBQVMscUJBQXFCLDBCQUEwQiwrQ0FBK0Msb0JBQW9CLDJDQUEyQywwQ0FBMEMsTUFBTSwyRUFBMkUsMERBQTBELGdHQUFnRyxXQUFXLHFCQUFxQixnQkFBZ0IsZ0JBQWdCLDhCQUE4QiwwRkFBMEYsMkJBQTJCLGFBQWEsdUNBQXVDLG9DQUFvQyxtQkFBbUIsSUFBSSxTQUFTLDRCQUE0QixPQUFPLEVBQUUsc0JBQXNCLGlJQUFpSSx1VEFBdVQsY0FBYyxTQUFTLCtCQUErQixlQUFlLGtDQUFrQyxJQUFJLHFDQUFxQyxVQUFVLCtDQUErQyw4Q0FBOEMsOENBQThDLHlDQUF5QywrQkFBK0IsMEJBQTBCLHdDQUF3QyxvR0FBb0csd0RBQXdELG9GQUFvRix1REFBdUQsMkRBQTJELGlCQUFpQixrQ0FBa0Msd0NBQXdDLG9JQUFvSSxxRUFBcUUsNkZBQTZGLDZCQUE2QixNQUFNLGdDQUFnQyxNQUFNLDZCQUE2QixNQUFNLGlCQUFpQixpQkFBaUIsaURBQWlELDBKQUEwSixzQ0FBc0MsOEJBQThCLElBQUksTUFBTSxnRUFBZ0UscUJBQXFCLDJCQUEyQixJQUFJLFdBQVcsRUFBRSx3REFBd0Qsc0VBQXNFLHFEQUFxRCxvRkFBb0YsTUFBTSxzRUFBc0UsK09BQStPLE1BQU0sbUpBQW1KLGtDQUFrQyxTQUFTLGlCQUFpQiw0QkFBNEIsNkRBQTZELHlDQUF5QyxpQkFBaUIsNERBQTRELGVBQWUsaURBQWlELGlDQUFpQyxrQkFBa0IsS0FBSyxpREFBaUQsMENBQTBDLFlBQVksa0JBQWtCLHFCQUFxQixjQUFjLElBQUksNEJBQTRCLDJEQUEyRCxNQUFNLDJCQUEyQixTQUFTLGVBQWUsZ0JBQWdCLFdBQVcsVUFBVSxzQkFBc0IsTUFBTSxvQkFBb0IsTUFBTSxxQkFBcUIsTUFBTSxzQkFBc0IsTUFBTSx1QkFBdUIsTUFBTSxzQkFBc0IsTUFBTSxtRUFBbUUsVUFBVSxpQkFBaUIsb0RBQW9ELDBCQUEwQiwrRkFBK0YsYUFBYSx5RUFBeUUscUJBQXFCLGtOQUFrTiw0QkFBNEIsVUFBVSxxQ0FBcUMsTUFBTSwyQ0FBMkMsa0RBQWtELElBQUksWUFBWSxjQUFjLFNBQVMsZ0NBQWdDLE9BQU8sU0FBUyxXQUFXLGlIQUFpSCxNQUFNLGNBQWMsV0FBVywrQkFBK0IsWUFBWSxZQUFZLHFDQUFxQyxRQUFRLDBDQUEwQyxjQUFjLElBQUksSUFBSSxhQUFhLCtEQUErRCx1QkFBdUIsRUFBRSxnQkFBZ0IsaURBQWlELElBQUksMkNBQTJDLFNBQVMsMENBQTBDLGdFQUFnRSw0RkFBNEYsZUFBZSx3Q0FBd0MsU0FBUyxFQUFFLGFBQWEsU0FBUyxNQUFNLGFBQWEsb0JBQW9CLGNBQWMsbWZBQW1mLGNBQWMsZ0VBQWdFLFNBQVMsZUFBZSwwRUFBMEUsU0FBUyxlQUFlLHNDQUFzQyxTQUFTLGVBQWUsMEJBQTBCLFNBQVMsZUFBZSxrSUFBa0ksU0FBUyxlQUFlLDRCQUE0QixTQUFTLGVBQWUsZ0ZBQWdGLFNBQVMsZUFBZSxnREFBZ0QsU0FBUyxHQUFHLFVBQVUsYUFBYSxrRUFBa0UsU0FBUyxlQUFlLGdFQUFnRSxTQUFTLGVBQWUsNERBQTRELFNBQVMsR0FBRyx1Q0FBdUMsYUFBYSxtS0FBbUssU0FBUyxlQUFlLGdnQkFBZ2dCLFNBQVMsZUFBZSxnREFBZ0QsU0FBUyxlQUFlLG9RQUFvUSxTQUFTLGVBQWUscUdBQXFHLFNBQVMsZUFBZSx1REFBdUQsU0FBUyxlQUFlLHFWQUFxVixTQUFTLGVBQWUsd1BBQXdQLFNBQVMsZUFBZSxzSUFBc0ksU0FBUyxlQUFlLDBDQUEwQyxTQUFTLGVBQWUsd1NBQXdTLFNBQVMsZUFBZSxrTUFBa00sU0FBUyxlQUFlLDhEQUE4RCxTQUFTLEdBQUcsdW9CQUF1b0IsNkRBQTZELGFBQWEsNENBQTRDLE1BQU0sbUJBQW1CLGNBQWMsdUJBQXVCLGdDQUFnQyxFQUFFLGlFQUFpRSwrQkFBK0IsMEJBQTBCLDZCQUE2QixFQUFFLDBEQUEwRCxJQUFJLHNDQUFzQyxnQkFBZ0IsRUFBRSx3RkFBd0YsV0FBVyxHQUFHLEdBQUcsa0RBQWtELFNBQVMsZUFBZSxpQ0FBaUMsZ0JBQWdCLEVBQUUsNEVBQTRFLFdBQVcsR0FBRyxTQUFTLDRCQUE0QixnQ0FBZ0MsNEJBQTRCLGtEQUFrRCx1RkFBdUYsRUFBRSw4VUFBOFUsR0FBRyxVQUFVLFVBQVUsR0FBRyxNQUFNLG1CQUFtQixtQ0FBbUMsU0FBUyxtQkFBbUIsOERBQThELEtBQUssb0RBQW9ELEVBQUUsZUFBZSxzTEFBc0wsRUFBRSxJQUFJLFNBQVMsK0pBQStKLEVBQUUsR0FBRyxZQUFZLE1BQU0sYUFBYSxrZ0NBQWtnQyxTQUFTLEdBQUcsTUFBTSxhQUFhLGtCQUFrQixTQUFTLEdBQUcsVUFBVSxRQUFRLGFBQWEsaUVBQWlFLFNBQVMsZUFBZSw2QkFBNkIsU0FBUyxHQUFHLFNBQVMsT0FBTyxvQkFBb0Isb0hBQW9ILG1DQUFtQyxhQUFhLE9BQU8sYUFBYSw2a0JBQTZrQixXQUFXLEdBQUcsZUFBZSx5SEFBeUgsOEJBQThCLFVBQVUsZUFBZSx3Q0FBd0MsVUFBVSxxQ0FBcUMsd0JBQXdCLHFCQUFxQixjQUFjLDZGQUE2RixtQkFBbUIsSUFBSSxtQ0FBbUMscUNBQXFDLGVBQWUsZ0lBQWdJLFNBQVMsc0RBQXNELG9CQUFvQix1SEFBdUgsK0JBQStCLG9CQUFvQix5SEFBeUgscUZBQXFGLE1BQU0sR0FBRyxPQUFPLEdBQUcsU0FBUyxHQUFHLFFBQVEsR0FBRyxTQUFTLEdBQUcsUUFBUSxFQUFFLGlCQUFpQiwrSUFBK0ksK0JBQStCLHNDQUFzQyw2REFBNkQscUJBQXFCLDBDQUEwQyxpRUFBaUUsZ0JBQWdCLHVCQUF1Qix1QkFBdUIsR0FBRyxHQUFHLHNDQUFzQyxVQUFVLG1CQUFtQixvRkFBb0Ysc0ZBQXNGLFFBQVEsK0RBQStELHdCQUF3QixPQUFPLGFBQWEsMEtBQTBLLFdBQVcsR0FBRyw4Q0FBOEMsU0FBUyxtSUFBbUksMEJBQTBCLGNBQWMsR0FBRyxVQUFVLHdCQUF3QixxQkFBcUIseUNBQXlDLGtCQUFrQix1QkFBdUIsaUJBQWlCLElBQUksNkJBQTZCLFNBQVMsb0RBQW9ELGNBQWMsOEJBQThCLHNCQUFzQixHQUFHLE9BQU8sbUJBQW1CLHlCQUF5QixzRUFBc0Usd0ZBQXdGLGVBQWUsZ0RBQWdELG9CQUFvQixzQkFBc0Isa0JBQWtCLDBEQUEwRCw4QkFBOEIsYUFBYSxPQUFPLGNBQWMsNEJBQTRCLGFBQWEscVZBQXFWLFdBQVcsR0FBRyxZQUFZLGNBQWMsdURBQXVELE9BQU8sb0JBQW9CLG1EQUFtRCxhQUFhLDRFQUE0RSx3REFBd0QsTUFBTSxpRkFBaUYsb0JBQW9CLHVCQUF1QixzQkFBc0IsNEJBQTRCLFVBQVUscUJBQXFCLDZEQUE2RCx5Q0FBeUMsYUFBYSxPQUFPLHNCQUFzQiwwREFBMEQsY0FBYyxtUEFBbVAsaUhBQWlILHNDQUFzQyxLQUFLLGVBQWUsTUFBTSxnQkFBZ0IsV0FBVywrSEFBK0gsd0JBQXdCLFNBQVMsU0FBUyxtQkFBbUIsb0RBQW9ELFVBQVUsRUFBRSxvQ0FBb0MsaUZBQWlGLEVBQUUsWUFBWSxLQUFLLDZDQUE2QyxTQUFTLGlCQUFpQixrRUFBa0UsRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLFVBQVUsYUFBYSxnRUFBZ0UsV0FBVyxlQUFlLGlFQUFpRSxXQUFXLEdBQUcsK0NBQStDLDRDQUE0QyxvQkFBb0Isb0JBQW9CLHVDQUF1QyxtQkFBbUIscURBQXFELGVBQWUsdUNBQXVDLDhDQUE4QyxtQ0FBbUMsTUFBTSxXQUFXLFFBQVEsd0NBQXdDLE9BQU8sZUFBZSw2QkFBNkIsd0JBQXdCLGlCQUFpQixpQkFBaUIsZUFBZSxxQ0FBcUMsYUFBYSwyQkFBMkIsRUFBRSxnQkFBZ0IsNkJBQTZCLHdCQUF3QixTQUFTLGlCQUFpQixlQUFlLGtFQUFrRSxhQUFhLHFCQUFxQixFQUFFLHlCQUF5QixJQUFJLDZCQUE2QixXQUFXLFNBQVMsb0JBQW9CLFNBQVMsK0RBQStELE9BQU8sYUFBYSw0NUZBQTQ1RixXQUFXLEdBQUcsb0VBQW9FLG9HQUFvRyxNQUFNLElBQUksMENBQTBDLFNBQVMsbUJBQW1CLG9KQUFvSixzREFBc0QsbUJBQW1CLDhDQUE4QyxvQkFBb0IsMkhBQTJILGFBQWEsb0JBQW9CLG1CQUFtQixRQUFRLG9CQUFvQixHQUFHLEVBQUUsRUFBRSxHQUFHLGFBQWEsb0JBQW9CLEdBQUcsRUFBRSxFQUFFLFNBQVMsV0FBVyxvQkFBb0IsR0FBRyxFQUFFLEVBQUUsT0FBTyxxQkFBcUIsb0JBQW9CLEdBQUcsRUFBRSxFQUFFLE9BQU8sSUFBSSw4QkFBOEIsR0FBRyxFQUFFLEVBQUUsS0FBSyxHQUFHLEVBQUUsRUFBRSxXQUFXLEdBQUcsRUFBRSxFQUFFLE9BQU8sU0FBUyxHQUFHLG9CQUFvQixvQkFBb0IsR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLDhCQUE4QixHQUFHLEVBQUUsRUFBRSxhQUFhLEdBQUcsRUFBRSxFQUFFLFdBQVcsR0FBRyxFQUFFLEVBQUUsR0FBRyxTQUFTLEdBQUcsb0NBQW9DLGtGQUFrRiw2QkFBNkIsMERBQTBELHVCQUF1QixHQUFHLGlEQUFpRCxLQUFLLGdCQUFnQixFQUFFLEdBQUcsT0FBTyxHQUFHLE9BQU8sd0JBQXdCLE9BQU8sR0FBRyxPQUFPLHdCQUF3QixnQkFBZ0IsK0NBQStDLGdCQUFnQixhQUFhLHliQUF5YixXQUFXLGVBQWUsb2ZBQW9mLFdBQVcsZUFBZSwyR0FBMkcsV0FBVyxlQUFlLHdOQUF3TixXQUFXLEdBQUcsVUFBVSxZQUFZLFVBQVUsK0NBQStDLGdDQUFnQyw0REFBNEQsOGJBQThiLCtIQUErSCxvQkFBb0IsOEVBQThFLHVCQUF1QiwyQ0FBMkMsZ0NBQWdDLHNFQUFzRSx1QkFBdUIsMEZBQTBGLE1BQU0sU0FBUyw2RUFBNkUsU0FBUyxXQUFXLHNFQUFzRSxHQUFHLFlBQVksdUNBQXVDLFNBQVMsNkNBQTZDLDRDQUE0QyxpRUFBaUUsb0JBQW9CLHVCQUF1QixvQkFBb0IseURBQXlELHdCQUF3QixvQkFBb0IsMkRBQTJELGtDQUFrQyxvQkFBb0IsbUVBQW1FLGlDQUFpQyxZQUFZLCtCQUErQix1QkFBdUIsbUJBQW1CLGtCQUFrQixFQUFFLDJDQUEyQyxZQUFZLCtCQUErQix1QkFBdUIsbUJBQW1CLDRCQUE0QixFQUFFLG9DQUFvQywrQkFBK0IsMENBQTBDLG1CQUFtQixTQUFTLG9HQUFvRyxtQ0FBbUMsb0JBQW9CLG9FQUFvRSxtQ0FBbUMsb0JBQW9CLG9FQUFvRSwwQkFBMEIsWUFBWSx5REFBeUQsc0NBQXNDLG9CQUFvQix1RUFBdUUsMkJBQTJCLG9CQUFvQixvREFBb0QsMmZBQTJmLGlCQUFpQixtRkFBbUYsaUJBQWlCLGlHQUFpRyxTQUFTLGlDQUFpQyxPQUFPLHlDQUF5QyxjQUFjLGtDQUFrQyxLQUFLLEVBQUUseUJBQXlCLElBQUksS0FBSywwQkFBMEIsMEJBQTBCLDRCQUE0Qiw0Q0FBNEMsR0FBRyxpQkFBaUIsZ0NBQWdDLFdBQVcsOENBQThDLG9CQUFvQiw0R0FBNEcsWUFBWSw0Q0FBNEMsMEtBQTBLLFNBQVMsZ2ZBQWdmLDZDQUE2QywrRUFBK0UsUUFBUSxHQUFHLHdEQUF3RCxnY0FBZ2MsYUFBYSx3QkFBd0IsRUFBRSxHQUFHLEVBQUUsS0FBSywrQkFBK0IsRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLGFBQWEsMkRBQTJELFdBQVcsR0FBRyx1REFBdUQsd05BQXdOLGVBQWUsbUJBQW1CLDBDQUEwQyxjQUFjLG1CQUFtQiwrQ0FBK0MsU0FBUyxFQUFFLGNBQWMsbUJBQW1CLG9DQUFvQyw2QkFBNkIseUNBQXlDLElBQUksY0FBYywwRUFBMEUsa0JBQWtCLGdGQUFnRixpRkFBaUYsb0NBQW9DLDRDQUE0Qyx5Q0FBeUMsSUFBSSxjQUFjLG1CQUFtQixvQ0FBb0MsNkJBQTZCLHlDQUF5QyxJQUFJLGNBQWMsa0JBQWtCLDJDQUEyQyxFQUFFLHlDQUF5QyxjQUFjLGtCQUFrQixvREFBb0QsRUFBRSxzREFBc0QsR0FBRyxjQUFjLGtCQUFrQixrQ0FBa0MsRUFBRSxzREFBc0QsR0FBRyxjQUFjLHdDQUF3QyxrR0FBa0csU0FBUyx3REFBd0QsU0FBUyxnREFBZ0QsSUFBSSxtQ0FBbUMsZUFBZSxTQUFTLHdEQUF3RCxRQUFRLGlDQUFpQyxNQUFNLHdCQUF3QiwyQkFBMkIsbUZBQW1GLG1EQUFtRCx1TkFBdU4seVVBQXlVLHNDQUFzQyxFQUFFLDZDQUE2QyxrQ0FBa0MsdUJBQXVCLG9CQUFvQixzQ0FBc0MsbURBQW1ELDRQQUE0UCxlQUFlLHlUQUF5VCxxRUFBcUUsNkNBQTZDLE9BQU8sa05BQWtOLEVBQUUsZ0NBQWdDLG9CQUFvQixxSUFBcUksZ0JBQWdCLGFBQWEsaUJBQWlCLFlBQVksU0FBUyx5REFBeUQseUNBQXlDLEVBQUUsd0NBQXdDLFlBQVksa0JBQWtCLG1EQUFtRCxLQUFLLDBCQUEwQiw0RkFBNEYsTUFBTSxTQUFTLGlCQUFpQixTQUFTLFNBQVMsTUFBTSxnQkFBZ0IsUUFBUSxTQUFTLE1BQU0sd0RBQXdELFFBQVEsV0FBVyw4Q0FBOEMsd0RBQXdELHNCQUFzQixhQUFhLE1BQU0sZ0JBQWdCLGlCQUFpQixzQkFBc0IsT0FBTyxhQUFhLHVJQUF1SSxPQUFPLG1CQUFtQix3QkFBd0Isd0JBQXdCLGdCQUFnQixJQUFJLHFEQUFxRCxnQ0FBZ0MsNkVBQTZFLFNBQVMsd0VBQXdFLHNCQUFzQixrREFBa0QsRUFBRSwwQkFBMEIsa0NBQWtDLHNDQUFzQyw4REFBOEQsZ0JBQWdCLFNBQVMsa0ZBQWtGLG9CQUFvQix1QkFBdUIsR0FBRyxrQ0FBa0MsWUFBWSxzQ0FBc0MsNEJBQTRCLDhDQUE4QyxVQUFVLG1CQUFtQixFQUFFLE9BQU8sV0FBVyxNQUFNLHVCQUF1QixFQUFFLE9BQU8sb0JBQW9CLDBHQUEwRyxPQUFPLE1BQU0sWUFBWSxXQUFXLFlBQVksV0FBVyxZQUFZLGFBQWEsWUFBWSxhQUFhLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxZQUFZLGFBQWEsZUFBZSxjQUFjLGFBQWEsWUFBWSxNQUFNLGFBQWEsV0FBVyx1TkFBdU4sVUFBVSx3QkFBd0IsWUFBWSxnRUFBZ0UsSUFBSSxZQUFZLDhCQUE4QixLQUFLLE1BQU0sc0JBQXNCLFVBQVUscUJBQXFCLHFCQUFxQixTQUFTLHNCQUFzQixVQUFVLHVCQUF1QixhQUFhLG1EQUFtRCxTQUFTLGVBQWUsZ0VBQWdFLGVBQWUsUUFBUSxnRUFBZ0UscUZBQXFGLE1BQU0sOENBQThDLElBQUksc0JBQXNCLG1DQUFtQyxPQUFPLDhDQUE4QyxJQUFJLHNCQUFzQixvQ0FBb0MsUUFBUSw4Q0FBOEMsSUFBSSxzQkFBc0Isa0NBQWtDLFlBQVksOENBQThDLElBQUksc0JBQXNCLHdEQUF3RCxpQkFBaUIsNERBQTRELEVBQUUsRUFBRSxhQUFhLEVBQUUsS0FBSyxzQkFBc0IsVUFBVSwyQkFBMkIsVUFBVSxZQUFZLEdBQUcsRUFBRSxtQkFBbUIsRUFBRSxTQUFTLDhFQUE4RSxjQUFjLFNBQVMsY0FBYyxrQkFBa0IsUUFBUSxpQ0FBaUMsK0NBQStDLG9DQUFvQyw2QkFBNkIsUUFBUSxTQUFTLDRFQUE0RSxRQUFRLHNEQUFzRCxJQUFJLHdCQUF3QixzQkFBc0IscURBQXFELFdBQVcsWUFBWSxJQUFJLFlBQVksR0FBRyx3QkFBd0IsdURBQXVELFdBQVcsWUFBWSxJQUFJLHdCQUF3QixLQUFLLGNBQWMsUUFBUSw2QkFBNkIsUUFBUSxHQUFHLGdDQUFnQyxlQUFlLHVCQUF1QixnQkFBZ0IsbUJBQW1CLGNBQWMsa0RBQWtELGFBQWEsNkJBQTZCLDBDQUEwQyxRQUFRLEtBQUssYUFBYSxFQUFFLGdCQUFnQixnQkFBZ0IsMEVBQTBFLEtBQUssYUFBYSxFQUFFLGlCQUFpQixtQkFBbUIsTUFBTSxVQUFVLGdCQUFnQixnREFBZ0QsNkRBQTZELEtBQUsseUJBQXlCLE1BQU0sY0FBYyxHQUFHLEVBQUUsdUVBQXVFLElBQUksR0FBRyxFQUFFLG1CQUFtQixTQUFTLElBQUksR0FBRyxFQUFFLEtBQUssaUJBQWlCLE1BQU0sVUFBVSxTQUFTLGlCQUFpQixtQkFBbUIsa01BQWtNLFNBQVMsZUFBZSw2QkFBNkIsRUFBRSxnQ0FBZ0MsUUFBUSxVQUFVLFdBQVcsV0FBVyxhQUFhLFlBQVksYUFBYSxHQUFHLGVBQWUsOERBQThELDRCQUE0QixnQkFBZ0IsZUFBZSwyREFBMkQsYUFBYSw4QkFBOEIsdUJBQXVCLHNCQUFzQixvSkFBb0osS0FBSyxpQkFBaUIsaUVBQWlFLGFBQWEsb0JBQW9CLG1CQUFtQixRQUFRLFlBQVksV0FBVyxFQUFFLGlDQUFpQyxXQUFXLFlBQVksV0FBVyxnREFBZ0QsNkVBQTZFLFNBQVMsTUFBTSxJQUFJLFNBQVMsZUFBZSxnREFBZ0Qsb0JBQW9CLGVBQWUsOERBQThELDRDQUE0Qyx1QkFBdUIscUtBQXFLLGlCQUFpQixzREFBc0Qsb0JBQW9CLG1DQUFtQyxrQ0FBa0MsbUJBQW1CLGdFQUFnRSxpS0FBaUssTUFBTSxvSUFBb0ksd0JBQXdCLHlKQUF5SixxQkFBcUIsOERBQThELFdBQVcseUVBQXlFLFlBQVksNEpBQTRKLG9CQUFvQiw4REFBOEQsV0FBVywrSEFBK0gsVUFBVSxFQUFFLG1DQUFtQyw2QkFBNkIsOERBQThELFVBQVUsU0FBUyx5RUFBeUUsMEJBQTBCLGVBQWUsVUFBVSxzREFBc0QsMEJBQTBCLHNHQUFzRyx1QkFBdUIsc0NBQXNDLHVCQUF1QiwyRUFBMkUseUJBQXlCLHVCQUF1QixxQkFBcUIsb0JBQW9CLCtCQUErQixrQ0FBa0MsNEVBQTRFLFNBQVMsa0JBQWtCLFFBQVEsYUFBYSxxQkFBcUIsMEJBQTBCLG1CQUFtQixzQkFBc0IsNERBQTRELE9BQU8sWUFBWSxvQkFBb0IsZUFBZSxnRUFBZ0Usd0JBQXdCLGVBQWUsa0JBQWtCLEdBQUcsME9BQTBPLGtCQUFrQixxQkFBcUIsVUFBVSw4REFBOEQsa0JBQWtCLG9CQUFvQiwwQkFBMEIseUJBQXlCLG9CQUFvQixvRUFBb0Usb0JBQW9CLHlFQUF5RSx1Q0FBdUMseUpBQXlKLGdCQUFnQix1REFBdUQseUJBQXlCLHlCQUF5QixzQ0FBc0MsSUFBSSxpQkFBaUIsT0FBTyxxQkFBcUIsdUNBQXVDLFNBQVMsU0FBUyxVQUFVLGlEQUFpRCx3QkFBd0Isb0JBQW9CLG1CQUFtQiw0RUFBNEUsbUNBQW1DLG9CQUFvQixpQkFBaUIsMkpBQTJKLEtBQUssVUFBVSxtQkFBbUIsa0NBQWtDLGdKQUFnSixtQkFBbUIsK0lBQStJLGtDQUFrQyxNQUFNLGdEQUFnRCxVQUFVLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLHNGQUFzRixJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVUsMEZBQTBGLEdBQUcsMEJBQTBCLGVBQWUsb01BQW9NLDRMQUE0TCxrREFBa0Qsd0hBQXdILG1GQUFtRixVQUFVLFVBQVUsR0FBRyxHQUFHLGNBQWMsMENBQTBDLGlFQUFpRSxNQUFNLHNDQUFzQyxTQUFTLCtEQUErRCxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLHVCQUF1Qix3QkFBd0Isd0JBQXdCLEtBQUssdUdBQXVHLEtBQUssY0FBYyxxTEFBcUwsV0FBVyxnR0FBZ0csNkJBQTZCLHlCQUF5QixFQUFFLHFCQUFxQixFQUFFLG1CQUFtQix3RUFBd0UsMklBQTJJLFlBQVksOERBQThELHdCQUF3QixxQkFBcUIsRUFBRSw4TUFBOE0sU0FBUywyRkFBMkYsZ0VBQWdFLFdBQVcsaUJBQWlCLGtJQUFrSSxrQkFBa0IscUJBQXFCLHFOQUFxTiw2RUFBNkUsNkNBQTZDLG9CQUFvQiw2QkFBNkIscUJBQXFCLDZCQUE2QixvQkFBb0IsNkJBQTZCLHNCQUFzQiwyQkFBMkIsRUFBRSxPQUFPLEdBQUcsYUFBYSw4RkFBOEYsRUFBRSxHQUFHLEVBQUUsd0tBQXdLLEVBQUUsR0FBRyxFQUFFLHdEQUF3RCxpRUFBaUUsNkJBQTZCLFdBQVcscUVBQXFFLG9EQUFvRCxxREFBcUQsV0FBVyxFQUFFLDhCQUE4Qix5Q0FBeUMsb0JBQW9CLGtEQUFrRCxFQUFFLHNLQUFzSyxNQUFNLE1BQU0saURBQWlELGNBQWMsd0RBQXdELG9EQUFvRCxvREFBb0QsaUVBQWlFLGlEQUFpRCw2QkFBNkIsK0hBQStILDhDQUE4QyxJQUFJLHNCQUFzQiw4RkFBOEYsTUFBTSxVQUFVLEtBQUssNkJBQTZCLGlEQUFpRCwyRUFBMkUsK0hBQStILGNBQWMsNkNBQTZDLE1BQU0sWUFBWSxXQUFXLDBFQUEwRSxpREFBaUQsZ0NBQWdDLHlDQUF5QyxJQUFJLG1CQUFtQiwrREFBK0QsaVRBQWlULGVBQWUsbUNBQW1DLEtBQUssR0FBRyxFQUFFLHlGQUF5RixLQUFLLEdBQUcsRUFBRSwrQkFBK0IsRUFBRSxtQkFBbUIsYUFBYSxxQ0FBcUMsRUFBRSxrUUFBa1EsZ0NBQWdDLElBQUksWUFBWSwyRkFBMkYsS0FBSyxNQUFNLGtEQUFrRCxXQUFXLDZCQUE2QixXQUFXLDZCQUE2QixTQUFTLDZCQUE2QixFQUFFLHVIQUF1SCxXQUFXLEVBQUUsRUFBRSw4QkFBOEIsRUFBRSxVQUFVLEVBQUUsNEhBQTRILE1BQU0sS0FBSyxVQUFVLDBEQUEwRCxJQUFJLEdBQUcsSUFBSSxtREFBbUQsaUJBQWlCLGlHQUFpRyxtQkFBbUIsZ0VBQWdFLGlJQUFpSSx1QkFBdUIsZ0VBQWdFLHVPQUF1TyxvQkFBb0IsMkZBQTJGLG9EQUFvRCxNQUFNLEdBQUcsTUFBTSw2QkFBNkIsU0FBUywwQkFBMEIsdUJBQXVCLDZHQUE2RyxVQUFVLGVBQWUsNENBQTRDLFNBQVMsZUFBZSx3R0FBd0cseUJBQXlCLDRDQUE0QyxxQkFBcUIsK0dBQStHLDJCQUEyQix5Q0FBeUMscUJBQXFCLHFDQUFxQyxzQkFBc0IsMENBQTBDLDJEQUEyRCxtQkFBbUIsc2RBQXNkLDJFQUEyRSxtQkFBbUIseU1BQXlNLHlCQUF5QixrQkFBa0IsTUFBTSxzQkFBc0IsWUFBWSxtQ0FBbUMsNERBQTRELGtEQUFrRCxZQUFZLHdDQUF3QyxzQ0FBc0Msb0hBQW9ILCtEQUErRCxzQkFBc0IsZUFBZSw2SEFBNkgsMkJBQTJCLFdBQVcscUpBQXFKLHdCQUF3Qiw0RUFBNEUsOEdBQThHLEVBQUUsS0FBSyxvWEFBb1gsOENBQThDLE1BQU0sU0FBUyxpSUFBaUksRUFBRSw4VkFBOFYsRUFBRSxvSUFBb0ksRUFBRSxnRUFBZ0UsRUFBRSxxQ0FBcUMsRUFBRSxpQ0FBaUMsRUFBRSxrQ0FBa0MsRUFBRSw4QkFBOEIsRUFBRSwwQkFBMEIsRUFBRSxrQ0FBa0MsRUFBRSxnQ0FBZ0MsRUFBRSwyQkFBMkIsRUFBRSwyQkFBMkIsRUFBRSwrQkFBK0IsRUFBRSw4QkFBOEIsRUFBRSw2QkFBNkIsRUFBRSwyQkFBMkIsRUFBRSw4QkFBOEIsRUFBRSxpQ0FBaUMsRUFBRSwwQkFBMEIsRUFBRSw4QkFBOEIsRUFBRSwrQkFBK0IsRUFBRSxzQ0FBc0MsTUFBTSxjQUFjLG1CQUFtQixlQUFlLG9CQUFvQixlQUFlLFNBQVMsZUFBZSxnRkFBZ0YsZUFBZSx3RUFBd0UsZUFBZSxxQ0FBcUMsZUFBZSxrRUFBa0UsZUFBZSw2Q0FBNkMsZUFBZSxvQkFBb0IsZ0JBQWdCLDRDQUE0QyxnQkFBZ0IseURBQXlELGdCQUFnQixrQ0FBa0MsZ0JBQWdCLHFCQUFxQixnQkFBZ0Isc0NBQXNDLGdCQUFnQix1RUFBdUUsZ0JBQWdCLDhDQUE4QyxnQkFBZ0IsNENBQTRDLGdCQUFnQiwrQkFBK0IsZ0JBQWdCLHVFQUF1RSxnQkFBZ0Isa0RBQWtELGdCQUFnQiw0REFBNEQsZ0JBQWdCLHdEQUF3RCx3Q0FBd0MseUNBQXlDLFNBQVMsZUFBZSxnRUFBZ0UsMGFBQTBhLFdBQVcsdUJBQXVCLG9CQUFvQixNQUFNLCtCQUErQixHQUFHLEtBQUssR0FBRyxhQUFhLGdCQUFnQixXQUFXLGdFQUFnRSwrQkFBK0Isa0RBQWtELG9DQUFvQyxFQUFFLFNBQVMsT0FBTyxnRkFBZ0YsZUFBZSxnRUFBZ0UsMEJBQTBCLHNHQUFzRyx5QkFBeUIsZ0VBQWdFLHdDQUF3QyxFQUFFLEVBQUUsRUFBRSxJQUFJLGVBQWUsZ0VBQWdFLDBCQUEwQiw0R0FBNEcscUJBQXFCLEVBQUUsb0JBQW9CLHFCQUFxQixLQUFLLEVBQUUsRUFBRSxpREFBaUQsZUFBZSxnRUFBZ0UsMEJBQTBCLG9DQUFvQyxxQkFBcUIsRUFBRSxvQkFBb0IscUJBQXFCLEtBQUssRUFBRSxZQUFZLG9GQUFvRixFQUFFLE9BQU8sOEJBQThCLG9EQUFvRCxtQkFBbUIsNEdBQTRHLDhGQUE4RixtRkFBbUYsYUFBYSw2TUFBNk0sbUJBQW1CLG9EQUFvRCxtQkFBbUIsZ0pBQWdKLGdCQUFnQiw0QkFBNEIsUUFBUSwyRUFBMkUsU0FBUyxjQUFjLGdFQUFnRSw4SEFBOEgsT0FBTyxnRUFBZ0UsbUNBQW1DLGVBQWUsRUFBRSx3QkFBd0Isc09BQXNPLHdEQUF3RCw4bUJBQThtQixRQUFRLHNDQUFzQyxjQUFjLG1FQUFtRSw2QkFBNkIsWUFBWSxPQUFPLFlBQVksZ0RBQWdELFlBQVksRUFBRSxvQkFBb0IsT0FBTyxvQkFBb0IsRUFBRSxZQUFZLDhDQUE4QyxtQkFBbUIsT0FBTyxtQkFBbUIsR0FBRyxxQkFBcUIsVUFBVSxrR0FBa0csY0FBYywrQkFBK0IsWUFBWSxzQ0FBc0MsNkVBQTZFLGlEQUFpRCw2QkFBNkIsSUFBSSwrRkFBK0YsNkZBQTZGLDZCQUE2QixHQUFHLG1CQUFtQiw2TkFBNk4sUUFBUSw0Q0FBNEMsRUFBRSx1RUFBdUUsZUFBZSxRQUFRLGtCQUFrQixFQUFFLG9CQUFvQiw4Q0FBOEMsaUJBQWlCLDBCQUEwQiwwREFBMEQsS0FBSyxNQUFNLE9BQU8sU0FBUywrQ0FBK0MsR0FBRyxvQkFBb0IsRUFBRSxRQUFRLDREQUE0RCx1QkFBdUIseUlBQXlJLEtBQUssVUFBVSxzRUFBc0UsZ0JBQWdCLHFDQUFxQywyQkFBMkIsOEJBQThCLEVBQUUsS0FBSyxJQUFJLFFBQVEsRUFBRSxLQUFLLEVBQUUsK0JBQStCLHNDQUFzQywrREFBK0QsSUFBSSx1QkFBdUIsVUFBVSxFQUFFLFNBQVMsNEVBQTRFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSwrQkFBK0IsS0FBSyw2QkFBNkIsRUFBRSxTQUFTLEdBQUcsS0FBSyxtR0FBbUcsU0FBUywrQ0FBK0MsR0FBRyxjQUFjLDREQUE0RCx3QkFBd0IsOEVBQThFLHdFQUF3RSxNQUFNLGNBQWMsRUFBRSx1REFBdUQsa0NBQWtDLDBEQUEwRCxVQUFVLGVBQWUsV0FBVyx1QkFBdUIsNEJBQTRCLFdBQVcsc0NBQXNDLFNBQVMsY0FBYyxnRUFBZ0UsZ0VBQWdFLG1CQUFtQixpQ0FBaUMsS0FBSyxFQUFFLHNCQUFzQix3QkFBd0IsaUNBQWlDLHNCQUFzQixFQUFFLHNCQUFzQix3QkFBd0IsbUNBQW1DLEtBQUssRUFBRSxzQkFBc0IsNEJBQTRCLHVDQUF1QyxLQUFLLEVBQUUscUNBQXFDLG9CQUFvQiwrQkFBK0IsS0FBSyxFQUFFLHNCQUFzQixHQUFHLGNBQWMsUUFBUSxpRUFBaUUsaUJBQWlCLGdCQUFnQixnRkFBZ0YsU0FBUyx1Q0FBdUMsZUFBZSwyQ0FBMkMsY0FBYyxnRUFBZ0UscURBQXFELE1BQU0sNkJBQTZCLGFBQWEsNkJBQTZCLFdBQVcsc0JBQXNCLHFCQUFxQiw0QkFBNEIsd0NBQXdDLDhJQUE4SSxnQkFBZ0IsYUFBYSx1RUFBdUUsK0hBQStILEdBQUcsT0FBTyw4QkFBOEIsSUFBSSxvQkFBb0IsUUFBUSxJQUFJLGlFQUFpRSx1Q0FBdUMsdUJBQXVCLGVBQWUsRUFBRSxTQUFTLG9CQUFvQixTQUFTLDREQUE0RCxFQUFFLEtBQUssTUFBTSxvQkFBb0IsbUJBQW1CLGdFQUFnRSx5VkFBeVYsaUZBQWlGLG1CQUFtQixVQUFVLEtBQUssS0FBSyxNQUFNLHNCQUFzQixTQUFTLGVBQWUsV0FBVyxFQUFFLEdBQUcsRUFBRSxFQUFFLDZOQUE2TixnQkFBZ0Isb0VBQW9FLHNEQUFzRCxzQkFBc0IsR0FBRyw2R0FBNkcsY0FBYyxtQ0FBbUMsZ0dBQWdHLFdBQVcsd0JBQXdCLG1CQUFtQixNQUFNLFVBQVUsZ0JBQWdCLHVEQUF1RCwrQkFBK0IsOERBQThELDBGQUEwRixjQUFjLEVBQUUsb0JBQW9CLHlCQUF5QiwrQkFBK0IsR0FBRyxnRUFBZ0Usb0VBQW9FLFlBQVksbUxBQW1MLDZCQUE2QixFQUFFLGdGQUFnRiw4Q0FBOEMsRUFBRSxvQkFBb0IsZ0JBQWdCLG1EQUFtRCxrQ0FBa0MseURBQXlELHlDQUF5QyxxQ0FBcUMsWUFBWSxzQ0FBc0MsZ0NBQWdDLElBQUksZUFBZSx1RUFBdUUsU0FBUyxNQUFNLG9CQUFvQiwrREFBK0QsMENBQTBDLGtIQUFrSCw2RkFBNkYsZ0NBQWdDLHNEQUFzRCxzQkFBc0IsZ0JBQWdCLEdBQUcsWUFBWSwwQkFBMEIsSUFBSSxjQUFjLHlCQUF5QixVQUFVLElBQUksV0FBVyxnRUFBZ0UsbUNBQW1DLDRDQUE0Qyx1QkFBdUIsRUFBRSxvQkFBb0IsR0FBRyxlQUFlLEdBQUcscUNBQXFDLEVBQUUsbUJBQW1CLEdBQUcsZUFBZSxFQUFFLHdCQUF3QixHQUFHLHVCQUF1QiwrREFBK0QsaUVBQWlFLGlKQUFpSixFQUFFLHNCQUFzQixFQUFFLGtQQUFrUCx5QkFBeUIsc0NBQXNDLFNBQVMsZ0JBQWdCLDBDQUEwQyxrQkFBa0IsTUFBTSw4R0FBOEcsU0FBUyxLQUFLLG9CQUFvQiw4Q0FBOEMsY0FBYyxPQUFPLGtyQkFBa3JCLFNBQVMsMktBQTJLLG1CQUFtQiw0QkFBNEIsVUFBVSxHQUFHLFNBQVMsZ0JBQWdCLHFDQUFxQyxZQUFZLGdKQUFnSixlQUFlLHFSQUFxUixlQUFlLG9CQUFvQixjQUFjLCtEQUErRCwwQ0FBMEMsTUFBTSw4Q0FBOEMsOEJBQThCLFlBQVksMEVBQTBFLDZDQUE2Qyx1Q0FBdUMsMERBQTBELGlCQUFpQixlQUFlLE1BQU0sT0FBTyxXQUFXLCtEQUErRCwwQ0FBMEMsK0JBQStCLHNJQUFzSSxhQUFhLGNBQWMsMkNBQTJDLGlCQUFpQiw4QkFBOEIsb0VBQW9FLGlEQUFpRCxvTEFBb0wsTUFBTSw2S0FBNkssNkJBQTZCLHVEQUF1RCxzQkFBc0Isb0ZBQW9GLDZJQUE2SSw2UUFBNlEsc0RBQXNELDBIQUEwSCxzREFBc0QsSUFBSSx3QkFBd0IsZUFBZSxxWEFBcVgsc0RBQXNELElBQUksd0JBQXdCLGVBQWUsc0NBQXNDLHFCQUFxQixHQUFHLHlJQUF5SSwrRUFBK0Usa0RBQWtELDhIQUE4SCx5RkFBeUYsbUJBQW1CLGlDQUFpQyxHQUFHLHVGQUF1RixtQkFBbUIsbUNBQW1DLEdBQUcsb0JBQW9CLGdCQUFnQiw2UkFBNlIsOEdBQThHLHlDQUF5QyxpRkFBaUYsaUJBQWlCLGdFQUFnRSwyQ0FBMkMsOEZBQThGLHNHQUFzRyxpQkFBaUIsYUFBYSx1QkFBdUIsK0RBQStELHdDQUF3QyxJQUFJLFVBQVUsS0FBSywwRkFBMEYseUhBQXlILHVGQUF1RixHQUFHLGFBQWEsdUJBQXVCLGFBQWEsNkdBQTZHLGlCQUFpQixLQUFLLE9BQU8sdUhBQXVILHVIQUF1SCxvWUFBb1ksdUJBQXVCLG9FQUFvRSx3QkFBd0IsS0FBSywwQkFBMEIsaUZBQWlGLHdCQUF3QixRQUFRLG9CQUFvQixXQUFXLDRCQUE0QixhQUFhLGdDQUFnQyxZQUFZLDBJQUEwSSxXQUFXLHVNQUF1TSx5QkFBeUIsc0JBQXNCLHlCQUF5QixHQUFHLE9BQU8sOENBQThDLGtGQUFrRixxUEFBcVAsT0FBTyxJQUFJLHFWQUFxVixpQkFBaUIsV0FBVyxzQkFBc0IsTUFBTSx1QkFBdUIsc0RBQXNELElBQUksd0JBQXdCLDhEQUE4RCxRQUFRLE1BQU0saUdBQWlHLG9DQUFvQyxNQUFNLG9EQUFvRCxZQUFZLEVBQUUsRUFBRSxFQUFFLEVBQUUsbUJBQW1CLFlBQVksRUFBRSxFQUFFLEVBQUUsRUFBRSxjQUFjLGlFQUFpRSxJQUFJLGdFQUFnRSxTQUFTLDZEQUE2RCx1QkFBdUIseUJBQXlCLHNCQUFzQixnRUFBZ0Usb0hBQW9ILG1KQUFtSiw2SUFBNkksdUNBQXVDLGdCQUFnQixnREFBZ0QsRUFBRSxHQUFHLEVBQUUsR0FBRyxxQkFBcUIsZUFBZSwyQkFBMkIsdUJBQXVCLDBLQUEwSyxvQkFBb0IsYUFBYSxtRUFBbUUsc0RBQXNELDJCQUEyQixvQkFBb0IsaUNBQWlDLG1CQUFtQixhQUFhLDRCQUE0QixpRUFBaUUsMEVBQTBFLG9CQUFvQixpQ0FBaUMsT0FBTywwSEFBMEgsaUVBQWlFLDJjQUEyYyx3QkFBd0IsdUVBQXVFLHlDQUF5QyxnQkFBZ0IsK0RBQStELDZEQUE2RCw0QkFBNEIsOEJBQThCLFNBQVMsZ0NBQWdDLGFBQWEsa0VBQWtFLG1EQUFtRCxhQUFhLGVBQWUsaUJBQWlCLG1CQUFtQixnREFBZ0QsNElBQTRJLHNEQUFzRCxJQUFJLHdCQUF3QixlQUFlLG9GQUFvRixnREFBZ0QsR0FBRyxTQUFTLE9BQU8sK0hBQStILDZCQUE2QixvQ0FBb0MsME1BQTBNLHNCQUFzQix1M0NBQXUzQyxRQUFRLDhPQUE4TyxPQUFPLHNZQUFzWSxZQUFZLGlJQUFpSSxZQUFZLDRLQUE0SyxZQUFZLHk0QkFBeTRCLFdBQVcsK0hBQStILE9BQU8sbUVBQW1FLE9BQU8sOElBQThJLFlBQVksdUlBQXVJLGFBQWEsaWxCQUFpbEIsUUFBUSw2QkFBNkIsUUFBUSxtQ0FBbUMsT0FBTyxxTEFBcUwsT0FBTyx3REFBd0QsT0FBTyx3REFBd0QsT0FBTyxvREFBb0QsT0FBTyxrdEJBQWt0QixPQUFPLDJDQUEyQyxPQUFPLG9EQUFvRCxPQUFPLGdVQUFnVSxPQUFPLHVUQUF1VCxZQUFZLCtwQkFBK3BCLFFBQVEsdUxBQXVMLE9BQU8sMFJBQTBSLE9BQU8sOEpBQThKLE9BQU8sNFNBQTRTLE9BQU8sa0RBQWtELG1CQUFtQiw0M0NBQTQzQyxRQUFRLGlQQUFpUCxPQUFPLDhZQUE4WSxXQUFXLG1JQUFtSSxZQUFZLG1MQUFtTCxZQUFZLCs0QkFBKzRCLFdBQVcsaUlBQWlJLE9BQU8sbUVBQW1FLE9BQU8sMklBQTJJLFlBQVksd0lBQXdJLGFBQWEscWxCQUFxbEIsUUFBUSxnQ0FBZ0MsUUFBUSxxQ0FBcUMsT0FBTyw0TEFBNEwsT0FBTyx1REFBdUQsT0FBTyxtREFBbUQsT0FBTyxvREFBb0QsT0FBTyxzdEJBQXN0QixPQUFPLDJDQUEyQyxPQUFPLG9EQUFvRCxPQUFPLGdVQUFnVSxPQUFPLHVUQUF1VCxZQUFZLCtwQkFBK3BCLFFBQVEsdUxBQXVMLE9BQU8sMFJBQTBSLE9BQU8sOEpBQThKLE9BQU8sNFNBQTRTLE9BQU8sa0RBQWtELG1CQUFtQiw0c0JBQTRzQixlQUFlLHk5QkFBeTlCLFFBQVEsMlNBQTJTLE9BQU8sZ2lCQUFnaUIsV0FBVyw0TkFBNE4sWUFBWSwwU0FBMFMsWUFBWSw2b0NBQTZvQyxXQUFXLDhJQUE4SSxPQUFPLHVFQUF1RSxPQUFPLDhKQUE4SixZQUFZLCtMQUErTCxhQUFhLHV1QkFBdXVCLE9BQU8sZ0RBQWdELE9BQU8sK0JBQStCLE9BQU8sOFJBQThSLE9BQU8sa0ZBQWtGLE9BQU8sc0VBQXNFLE9BQU8sd0VBQXdFLE9BQU8sc3NCQUFzc0IsT0FBTyx3Q0FBd0MsT0FBTyxpREFBaUQsT0FBTyxpVEFBaVQsTUFBTSxzU0FBc1MsWUFBWSwybkJBQTJuQixRQUFRLGlMQUFpTCxPQUFPLGlSQUFpUixPQUFPLHdKQUF3SixPQUFPLGdTQUFnUyxNQUFNLDZDQUE2QyxtQkFBbUIsazVEQUFrNUQsUUFBUSxnVkFBZ1YsT0FBTyxpcEJBQWlwQixXQUFXLHFRQUFxUSxZQUFZLDJUQUEyVCxZQUFZLDB3Q0FBMHdDLFdBQVcsdUpBQXVKLE9BQU8sa0ZBQWtGLE9BQU8sb0tBQW9LLFlBQVksaU5BQWlOLGFBQWEsNDFCQUE0MUIsT0FBTyxtREFBbUQsT0FBTyxtQ0FBbUMsT0FBTyx5WEFBeVgsT0FBTyxtR0FBbUcsT0FBTywwRkFBMEYsT0FBTyxvRkFBb0YsT0FBTyxveEJBQW94QixPQUFPLDJDQUEyQyxPQUFPLG9EQUFvRCxPQUFPLGdVQUFnVSxPQUFPLHVUQUF1VCxZQUFZLCtwQkFBK3BCLFFBQVEsdUxBQXVMLE9BQU8sMFJBQTBSLE9BQU8sOEpBQThKLE9BQU8sNFNBQTRTLE9BQU8sa0RBQWtELG1CQUFtQixtL0NBQW0vQyxPQUFPLG1RQUFtUSxPQUFPLG9hQUFvYSxXQUFXLHFKQUFxSixXQUFXLHdOQUF3TixXQUFXLDgvQkFBOC9CLFdBQVcsd0pBQXdKLE9BQU8sZ0VBQWdFLE9BQU8scUtBQXFLLFdBQVcsMktBQTJLLFlBQVksd3BCQUF3cEIsT0FBTyw0QkFBNEIsT0FBTyxrQ0FBa0MsT0FBTyw4TkFBOE4sTUFBTSx1RUFBdUUsTUFBTSxvRUFBb0UsTUFBTSw2REFBNkQsTUFBTSwydUJBQTJ1QixPQUFPLDJDQUEyQyxPQUFPLG9EQUFvRCxPQUFPLGdVQUFnVSxPQUFPLHVUQUF1VCxZQUFZLCtwQkFBK3BCLFFBQVEsdUxBQXVMLE9BQU8sMFJBQTBSLE9BQU8sOEpBQThKLE9BQU8sNFNBQTRTLE9BQU8sa0RBQWtELG1CQUFtQiw2N0NBQTY3QyxPQUFPLCtRQUErUSxPQUFPLHNiQUFzYixXQUFXLDhKQUE4SixXQUFXLHNOQUFzTixZQUFZLHk3QkFBeTdCLFdBQVcsOElBQThJLE9BQU8saUVBQWlFLE9BQU8sMEpBQTBKLFlBQVksb0pBQW9KLGFBQWEsa25CQUFrbkIsT0FBTywyQkFBMkIsT0FBTyxpQ0FBaUMsUUFBUSxpTkFBaU4sT0FBTyw0REFBNEQsT0FBTyw2REFBNkQsT0FBTyx5REFBeUQsT0FBTyx3dUJBQXd1QixPQUFPLDJDQUEyQyxPQUFPLG9EQUFvRCxPQUFPLGdVQUFnVSxPQUFPLHVUQUF1VCxZQUFZLCtwQkFBK3BCLFFBQVEsdUxBQXVMLE9BQU8sMFJBQTBSLE9BQU8sOEpBQThKLE9BQU8sNFNBQTRTLE9BQU8sa0RBQWtELG1CQUFtQiwwK0RBQTArRCxRQUFRLHVVQUF1VSxPQUFPLDJtQkFBMm1CLFdBQVcsaU9BQWlPLFlBQVksb1RBQW9ULFdBQVcsb3hDQUFveEMsV0FBVyxrS0FBa0ssT0FBTyxtRkFBbUYsT0FBTyxrTUFBa00sWUFBWSxnTkFBZ04sYUFBYSwrekJBQSt6QixPQUFPLCtEQUErRCxPQUFPLHFDQUFxQyxPQUFPLHFXQUFxVyxNQUFNLGlHQUFpRyxNQUFNLDZGQUE2RixNQUFNLDhGQUE4RixNQUFNLDB2QkFBMHZCLE9BQU8sMkNBQTJDLE9BQU8sb0RBQW9ELE9BQU8sZ1VBQWdVLE9BQU8sdVRBQXVULFlBQVksK3BCQUErcEIsUUFBUSx1TEFBdUwsT0FBTywwUkFBMFIsT0FBTyw2SkFBNkosT0FBTyw0U0FBNFMsT0FBTyxrREFBa0QsR0FBRywyQkFBMkIsb0JBQW9CLHFDQUFxQyx1RUFBdUUsVUFBVSxlQUFlLGtCQUFrQixxQ0FBcUMsR0FBRyxFQUFFLEtBQUssS0FBSyxNQUFNLE9BQU8sa0JBQWtCLG9CQUFvQixHQUFHLHFCQUFxQiw4Q0FBOEMsdUhBQXVILHFCQUFxQixxR0FBcUcsa0JBQWtCLGlCQUFpQixLQUFLLDRCQUE0QixpREFBaUQsR0FBRyxHQUFHLEVBQUUsY0FBYyxvQkFBb0IsUUFBUSxtQ0FBbUMsS0FBSyxlQUFlLE1BQU0sZUFBZSxjQUFjLG1CQUFtQiwwQ0FBMEMsSUFBSSxzQkFBc0IsU0FBUywyQkFBMkIsNkJBQTZCLHVDQUF1QyxxQ0FBcUMscUlBQXFJLGdFQUFnRSxxREFBcUQseUNBQXlDLCtCQUErQixJQUFJLFdBQVcsT0FBTyxJQUFJLG9GQUFvRixPQUFPLEVBQUUsY0FBYyw4RUFBOEUsV0FBVyxnQkFBZ0IsSUFBSSxjQUFjLHNFQUFzRSxnQkFBZ0IsRUFBRSxvQ0FBb0MsdUJBQXVCLE1BQU0sT0FBTyxlQUFlLDZFQUE2RSxjQUFjLFNBQVMsbURBQW1ELHVDQUF1QyxZQUFZLEVBQUUsY0FBYywrRUFBK0UsY0FBYyxnRkFBZ0YsdUJBQXVCLG9CQUFvQixzREFBc0QsK0VBQStFLGNBQWMsY0FBYyw2QkFBNkIsT0FBTyx3QkFBd0Isb0RBQW9ELEdBQUcsU0FBUyx3QkFBd0IsMkJBQTJCLE9BQU8sc0JBQXNCLHFCQUFxQixnQkFBZ0IsSUFBSSxnSUFBZ0ksUUFBUSxPQUFPLGVBQWUsUUFBUSxhQUFhLG1CQUFtQixPQUFPLEVBQUUsT0FBTyw2Q0FBNkMsbUJBQW1CLGtCQUFrQixFQUFFLHlDQUF5QywwREFBMEQsNEVBQTRFLHdCQUF3QiwrQ0FBK0MscUNBQXFDLCtDQUErQyxzREFBc0QsbURBQW1ELHFCQUFxQixPQUFPLG9CQUFvQixtQkFBbUIsbUJBQW1CLEVBQUUsMERBQTBELHFDQUFxQyxNQUFNLGlEQUFpRCwyQ0FBMkMscUdBQXFHLEVBQUUscUdBQXFHLEdBQUcsbURBQW1ELEVBQUUsdUNBQXVDLDREQUE0RCxFQUFFLG1CQUFtQiw0REFBNEQsRUFBRSxPQUFPLGdDQUFnQyxtQkFBbUIsT0FBTyxFQUFFLGFBQWEscUJBQXFCLE9BQU8sc0JBQXNCLG1CQUFtQixxRUFBcUUsbUNBQW1DLDJCQUEyQixtQ0FBbUMsNEJBQTRCLHNCQUFzQixzQkFBc0IsNkJBQTZCLDBCQUEwQixFQUFFLElBQUksSUFBSSx5Q0FBeUMsVUFBVSxjQUFjLHVEQUF1RCxvQkFBb0IsZ0JBQWdCLG9CQUFvQixFQUFFLG1CQUFtQiwyREFBMkQsRUFBRSxLQUFLLGFBQWEsK0VBQStFLHFCQUFxQixlQUFlLFFBQVEsNkpBQTZKLG1CQUFtQixxREFBcUQsYUFBYSxJQUFJLHNLQUFzSyxJQUFJLEtBQUssaUJBQWlCLHdCQUF3QixPQUFPLHdCQUF3QixtQkFBbUIsS0FBSyxzQ0FBc0MsNkRBQTZELHNOQUFzTixrQ0FBa0MsSUFBSSx5Q0FBeUMsd0NBQXdDLE1BQU0sSUFBSSwrREFBK0Qsc0dBQXNHLEVBQUUsNkNBQTZDLElBQUksZ0VBQWdFLDBCQUEwQixFQUFFLHNDQUFzQyx3Q0FBd0MsdURBQXVELGFBQWEsYUFBYSwwQkFBMEIsNEJBQTRCLHFEQUFxRCxpRUFBaUUsS0FBSyxJQUFJLE9BQU8sYUFBYSxrREFBa0QsV0FBVyxHQUFHLGlCQUFpQixVQUFVLG1EQUFtRCxpREFBaUQsbUxBQW1MLGtCQUFrQixhQUFhLG9FQUFvRSxFQUFFLE9BQU8sYUFBYSxxREFBcUQsV0FBVyxHQUFHLHFDQUFxQyxnQkFBZ0IsMEJBQTBCLGFBQWEsTUFBTSwyQkFBMkIsVUFBVSxnQkFBZ0IsNkJBQTZCLHdCQUF3QixFQUFFLGdCQUFnQixXQUFXLGdCQUFnQixHQUFHLFdBQVcsRUFBRSxjQUFjLEVBQUUsU0FBUywyQkFBMkIsRUFBRSxlQUFlLEdBQUcsYUFBYSxHQUFHLEVBQUUsRUFBRSxzREFBc0Qsa0JBQWtCLEVBQUUsU0FBUyxzQ0FBc0MsNEVBQTRFLHdMQUF3TCxtREFBbUQsY0FBYyx3QkFBd0IsNkJBQTZCLE9BQU8sMkJBQTJCLFlBQVksSUFBSSxHQUFHLCtCQUErQix1QkFBdUIsU0FBUywrRUFBK0UsaUJBQWlCLHdCQUF3Qix1Q0FBdUMsNEJBQTRCLDhKQUE4SixFQUFFLFVBQVUsV0FBVyxjQUFjLGdEQUFnRCwyQkFBMkIsV0FBVyw2QkFBNkIsR0FBRyxhQUFhLEVBQUUsd0JBQXdCLDJCQUEyQiw2QkFBNkIsZ0NBQWdDLHVCQUF1QixNQUFNLG9CQUFvQix5REFBeUQsT0FBTywwQkFBMEIsb0JBQW9CLE1BQU0sYUFBYSxhQUFhLDhFQUE4RSx5QkFBeUIsTUFBTSxvREFBb0QsWUFBWSxFQUFFLE9BQU8sZUFBZSx1QkFBdUIsc0RBQXNELGVBQWUsRUFBRSxHQUFHLFNBQVMsa0JBQWtCLDhFQUE4RSx1RkFBdUYsc0JBQXNCLHNDQUFzQyxPQUFPLGFBQWEscUdBQXFHLFdBQVcsR0FBRyxtQkFBbUIsYUFBYSxrQkFBa0Isc0JBQXNCLE1BQU0sd0NBQXdDLFVBQVUsMEJBQTBCLFVBQVUsOENBQThDLDZDQUE2QyxpQkFBaUIsU0FBUyxPQUFPLGlCQUFpQix1QkFBdUIscURBQXFELGtCQUFrQixHQUFHLGlCQUFpQixpQkFBaUIsTUFBTSxrQkFBa0IsR0FBRyx5Q0FBeUMsV0FBVyw0Q0FBNEMsZUFBZSxjQUFjLDJCQUEyQiw0QkFBNEIscUJBQXFCLFVBQVUsZUFBZSxjQUFjLDhCQUE4QixzREFBc0QsOEVBQThFLGlGQUFpRixnQkFBZ0Isa0xBQWtMLFdBQVcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsdUNBQXVDLFFBQVEsOENBQThDLHdCQUF3QixNQUFNLHNCQUFzQixjQUFjLGdDQUFnQyxvQkFBb0IsYUFBYSxrSEFBa0gsZ0JBQWdCLHVCQUF1QixLQUFLLEVBQUUsS0FBSyxTQUFTLEtBQUssRUFBRSxLQUFLLFNBQVMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLHFGQUFxRixPQUFPLEtBQUssRUFBRSxLQUFLLFNBQVMsS0FBSyxFQUFFLEtBQUssU0FBUyxLQUFLLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixLQUFLLFlBQVksc0JBQXNCLFdBQVcsc0JBQXNCLDhEQUE4RCxFQUFFLHFGQUFxRixTQUFTLGVBQWUsY0FBYyxVQUFVLG9CQUFvQixFQUFFLG9DQUFvQyxFQUFFLG9DQUFvQyxFQUFFLG9DQUFvQyxFQUFFLG9DQUFvQyxFQUFFLG9DQUFvQyxFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLGtDQUFrQyxFQUFFLG1DQUFtQyxFQUFFLG1DQUFtQyxFQUFFLG1DQUFtQyxFQUFFLG9DQUFvQyxFQUFFLGdCQUFnQixZQUFZLFdBQVcsbUNBQW1DLG9CQUFvQixLQUFLLEtBQUsseWFBQXlhLEtBQUssNHJCQUE0ckIsS0FBSyxtckJBQW1yQixNQUFNLHVEQUF1RCxPQUFPLG1HQUFtRyxPQUFPLG9HQUFvRyxTQUFTLE1BQU0sMEJBQTBCLEdBQUcsT0FBTyxzQ0FBc0MsUUFBUSxNQUFNLGVBQWUsNEJBQTRCLCtCQUErQixrQ0FBa0MsU0FBUyxLQUFLLElBQUksTUFBTSx1REFBdUQsa0RBQWtELFVBQVUsVUFBVSxJQUFJLFVBQVUsRUFBRSxPQUFPLFVBQVUsT0FBTyxZQUFZLDRCQUE0QixnQkFBZ0IsdUJBQXVCLGlCQUFpQixHQUFHLGVBQWUsTUFBTSxxREFBcUQsRUFBRSxjQUFjLFVBQVUsTUFBTSxzQkFBc0IseUNBQXlDLDZGQUE2RixJQUFJLGdCQUFnQixPQUFPLHNCQUFzQixLQUFLLHdFQUF3RSxnQkFBZ0IsY0FBYyxNQUFNLDBCQUEwQixpQkFBaUIsd0VBQXdFLCtCQUErQiwyRkFBMkYsU0FBUyxLQUFLLFFBQVEsdUNBQXVDLHFEQUFxRCxlQUFlLE9BQU8sT0FBTyx1Q0FBdUMsZUFBZSxxQkFBcUIsT0FBTyxjQUFjLHFGQUFxRiwrRkFBK0YsS0FBSyw2S0FBNkssZUFBZSxTQUFTLFlBQVksMkJBQTJCLDBFQUEwRSwyQkFBMkIseUNBQXlDLFdBQVcsV0FBVyxJQUFJLFdBQVcsRUFBRSx5QkFBeUIsY0FBYyxxQkFBcUIsZ0JBQWdCLE9BQU8sbUhBQW1ILGlCQUFpQix5Q0FBeUMsZ0VBQWdFLFVBQVUscUVBQXFFLGlCQUFpQix1QkFBdUIsaUJBQWlCLHNGQUFzRixzRUFBc0UsOEJBQThCLE1BQU0sR0FBRyxhQUFhLEdBQUcsbUJBQW1CLHVCQUF1QixFQUFFLGVBQWUsT0FBTyxHQUFHLDhCQUE4QixrREFBa0QsSUFBSSwrQkFBK0IsTUFBTSx3QkFBd0Isa0JBQWtCLGlDQUFpQywwQkFBMEIsbUVBQW1FLHFCQUFxQixrQkFBa0IscUJBQXFCLEVBQUUscUNBQXFDLGFBQWEscUJBQXFCLEVBQUUsMkJBQTJCLEtBQUssTUFBTSxpQkFBaUIsZUFBZSw4QkFBOEIsMEZBQTBGLCtIQUErSCwyQkFBMkIsb0JBQW9CLDZCQUE2Qiw0QkFBNEIsd0JBQXdCLGtCQUFrQixxQkFBcUIsd0NBQXdDLDZCQUE2QixxRUFBcUUsMkRBQTJELHlCQUF5QiwrRUFBK0UsU0FBUyxHQUFHLG1CQUFtQiw2REFBNkQsZ0hBQWdILE1BQU0sNkJBQTZCLGtCQUFrQixLQUFLLElBQUksaUJBQWlCLEdBQUcsc0JBQXNCLEVBQUUsS0FBSyxNQUFNLFNBQVMsZ0JBQWdCLG9CQUFvQixJQUFJLGlDQUFpQywwQkFBMEIsSUFBSSx1QkFBdUIsS0FBSyxhQUFhLE9BQU8sSUFBSSxnQ0FBZ0MsR0FBRyxpQkFBaUIsdUJBQXVCLG1CQUFtQiw4QkFBOEIsb0JBQW9CLFlBQVksRUFBRSxHQUFHLEdBQUcsc0JBQXNCLE1BQU0sdUJBQXVCLHNHQUFzRyxPQUFPLGtFQUFrRSxNQUFNLEtBQUssS0FBSyxvQ0FBb0MsTUFBTSx3RkFBd0YsTUFBTSxNQUFNLCtCQUErQixHQUFHLGVBQWUsK0JBQStCLE9BQU8saUZBQWlGLEtBQUssaUJBQWlCLEdBQUcsNEJBQTRCLDZFQUE2RSx1QkFBdUIsdUZBQXVGLHlDQUF5QyxTQUFTLHVIQUF1SCx3QkFBd0IsTUFBTSwwQkFBMEIscUJBQXFCLHdDQUF3QywyR0FBMkcsVUFBVSxpQ0FBaUMsWUFBWSxtREFBbUQsUUFBUSx1REFBdUQsRUFBRSx1REFBdUQsSUFBSSxzQ0FBc0MsNEJBQTRCLDZCQUE2QixvQkFBb0IsbUJBQW1CLGlCQUFpQixNQUFNLDBCQUEwQixxQkFBcUIsd0NBQXdDLDJHQUEyRyxVQUFVLHlDQUF5QyxFQUFFLFdBQVcsUUFBUSx1REFBdUQsRUFBRSx1REFBdUQsSUFBSSwrQ0FBK0MsNEJBQTRCLDZCQUE2QixvQkFBb0IsbUJBQW1CLG1CQUFtQixNQUFNLDBCQUEwQixxQkFBcUIscUNBQXFDLDJHQUEyRyxVQUFVLG1FQUFtRSxZQUFZLDRDQUE0QyxRQUFRLHVEQUF1RCxFQUFFLHVEQUF1RCxJQUFJLHNDQUFzQyw0QkFBNEIsNkJBQTZCLG9CQUFvQixtQkFBbUIsY0FBYyxNQUFNLDBCQUEwQixrQkFBa0IsdUNBQXVDLDJHQUEyRyxVQUFVLGtFQUFrRSxRQUFRLHVEQUF1RCxFQUFFLHVEQUF1RCxJQUFJLDZDQUE2Qyw0QkFBNEIsNkJBQTZCLG9CQUFvQixtQkFBbUIsaUJBQWlCLE1BQU0sMEJBQTBCLG9CQUFvQix5REFBeUQsK0NBQStDLEVBQUUsSUFBSSxtQ0FBbUMsOEZBQThGLFVBQVUsaURBQWlELFFBQVEsa0VBQWtFLFFBQVEsdURBQXVELEVBQUUscURBQXFELEtBQUssOENBQThDLDRCQUE0Qiw0QkFBNEIsb0JBQW9CLG9CQUFvQixtQkFBbUIsZUFBZSxFQUFFLElBQUksaUhBQWlILGFBQWEsa0NBQWtDLDhCQUE4Qix3RUFBd0Usb0ZBQW9GLFNBQVMscUVBQXFFLFNBQVMsZUFBZSx3Q0FBd0MsMEJBQTBCLDRCQUE0QixTQUFTLHlEQUF5RCxvQkFBb0IscUNBQXFDLE9BQU8sNENBQTRDLGFBQWEsYUFBYSxvQkFBb0IsZ0RBQWdELGtDQUFrQyxrQkFBa0IscURBQXFELE9BQU8sZUFBZSxhQUFhLGFBQWEsa09BQWtPLHNDQUFzQyxpRUFBaUUsWUFBWSxFQUFFLDBDQUEwQyw0QkFBNEIsUUFBUSxPQUFPLGVBQWUsY0FBYyxlQUFlLG1EQUFtRCx3QkFBd0IsbUVBQW1FLDBCQUEwQixLQUFLLEtBQUssa0JBQWtCLGdCQUFnQiwwSEFBMEgsY0FBYywrRkFBK0YsZ0lBQWdJLEtBQUssOEJBQThCLHdCQUF3QiwwQkFBMEIsR0FBRyxRQUFRLHlDQUF5Qyw2QkFBNkIsRUFBRSxjQUFjLGtDQUFrQyxhQUFhLHNDQUFzQyx5QkFBeUIsK0JBQStCLEVBQUUsaUJBQWlCLDhLQUE4SyxTQUFTLGtDQUFrQyx3RkFBd0YsdUJBQXVCLHNCQUFzQixzQkFBc0IsaUxBQWlMLGNBQWMsR0FBRyxNQUFNLGlGQUFpRix1QkFBdUIsaUNBQWlDLEVBQUUsWUFBWSxpQkFBaUIsNkZBQTZGLGtCQUFrQixvQ0FBb0MsTUFBTSw0RUFBNEUsRUFBRSxLQUFLLHFEQUFxRCxVQUFVLHVCQUF1QixzREFBc0QscURBQXFELEVBQUUsR0FBRyxjQUFjLHVIQUF1SCxJQUFJLDZDQUE2Qyx1RUFBdUUsb0RBQW9ELGlEQUFpRCxLQUFLLGFBQWEsZ0JBQWdCLHVIQUF1SCxzREFBc0QsK0NBQStDLFlBQVksR0FBRyx3QkFBd0IsNkRBQTZELGNBQWMsU0FBUyxpREFBaUQsY0FBYyxpREFBaUQscUJBQXFCLFFBQVEsZ0RBQWdELHVCQUF1Qix3QkFBd0IsbUJBQW1CLElBQUksK0JBQStCLDBIQUEwSCxrSEFBa0gsMENBQTBDLGFBQWEscUJBQXFCLGtDQUFrQyxxQkFBcUIsbUhBQW1ILEVBQUUsc0dBQXNHLGVBQWUsaUVBQWlFLEdBQUcsd0NBQXdDLGVBQWUsYUFBYSw0QkFBNEIsZ0RBQWdELEdBQUcsR0FBRyxTQUFTLG1HQUFtRyxPQUFPLGNBQWMsbUJBQW1CLG1CQUFtQixXQUFXLHFCQUFxQixxQkFBcUIsbUJBQW1CLG9DQUFvQyw2QkFBNkIsMkNBQTJDLElBQUksTUFBTSxjQUFjLHdFQUF3RSxPQUFPLHFEQUFxRCw2QkFBNkIsMEJBQTBCLGlCQUFpQixxQ0FBcUMsU0FBUyxlQUFlLFVBQVUsZUFBZSxVQUFVLGVBQWUsVUFBVSxlQUFlLFVBQVUsZUFBZSxVQUFVLGVBQWUsWUFBWSxpQkFBaUIsRUFBRSxpQkFBaUIsZUFBZSxtRkFBbUYsR0FBRyxtQkFBbUIsNkdBQTZHLG1CQUFtQiw4RUFBOEUsc0JBQXNCLHVEQUF1RCxNQUFNLFNBQVMsZ0JBQWdCLDBCQUEwQixjQUFjLG1DQUFtQyxxRUFBcUUsMkJBQTJCLEVBQUUsNENBQTRDLEdBQUcsZ0NBQWdDLGdDQUFnQywwRUFBMEUsd0JBQXdCLDBCQUEwQixJQUFJLHlDQUF5QywwQkFBMEIsSUFBSSxJQUFJLDJEQUEyRCxVQUFVLFVBQVUscUJBQXFCLHdEQUF3RCx5REFBeUQsZ0JBQWdCLGdDQUFnQyw4QkFBOEIsMEJBQTBCLFdBQVcsU0FBUywyQkFBMkIsbUJBQW1CLGtDQUFrQyx3QkFBd0IsS0FBSyx3QkFBd0IsbUNBQW1DLGdCQUFnQixnQ0FBZ0MsdUNBQXVDLFlBQVksZ0NBQWdDLElBQUksNkVBQTZFLFNBQVMscURBQXFELG9CQUFvQix3Q0FBd0Msd0NBQXdDLGFBQWEsc0JBQXNCLHdCQUF3QixTQUFTLDhEQUE4RCxFQUFFLElBQUkscUNBQXFDLHlCQUF5Qix3Q0FBd0MsMEJBQTBCLGtDQUFrQyxTQUFTLGlFQUFpRSxJQUFJLHlCQUF5QiwwRUFBMEUsV0FBVyxvSUFBb0ksaUJBQWlCLE9BQU8sdUJBQXVCLGVBQWUsNEJBQTRCLFVBQVUsZ0JBQWdCLHFCQUFxQixJQUFJLGlHQUFpRyxFQUFFLElBQUksZ0JBQWdCLCtCQUErQixtQkFBbUIsR0FBRyxFQUFFLHVEQUF1RCxPQUFPLGFBQWEsbUZBQW1GLFdBQVcsR0FBRyxVQUFVLCtCQUErQixPQUFPLGFBQWEsZ0NBQWdDLFdBQVcsR0FBRyxPQUFPLGFBQWEsZ0tBQWdLLFdBQVcsR0FBRyxlQUFlLDRCQUE0Qiw0RUFBNEUsR0FBRyxpQkFBaUIsMEJBQTBCLG9EQUFvRCxjQUFjLCtEQUErRCxPQUFPLGNBQWMsK0NBQStDLHNCQUFzQix1Q0FBdUMsd0JBQXdCLDBEQUEwRCxzQkFBc0IsMkRBQTJELGlCQUFpQiwyQ0FBMkMscURBQXFELG1CQUFtQixvQkFBb0IseUJBQXlCLDBDQUEwQyxXQUFXLDhDQUE4QyxHQUFHLG9CQUFvQix5QkFBeUIsNEhBQTRILFdBQVcsMkVBQTJFLEdBQUcsd0JBQXdCLGtEQUFrRCxrQkFBa0IsK0NBQStDLG9CQUFvQix5QkFBeUIsZ0ZBQWdGLE1BQU0sOENBQThDLDBCQUEwQixtQkFBbUIsa0dBQWtHLHFCQUFxQixxRUFBcUUsdUJBQXVCLDhEQUE4RCxxQkFBcUIsMEVBQTBFLDBGQUEwRix3Q0FBd0MsbUJBQW1CLE9BQU8sRUFBRSx3RUFBd0Usd0JBQXdCLHFCQUFxQix3RUFBd0UsZUFBZSxtQkFBbUIsZ0JBQWdCLEVBQUUsd0VBQXdFLDBEQUEwRCxVQUFVLE9BQU8sNEJBQTRCLHFGQUFxRixvQkFBb0IsNkVBQTZFLHVCQUF1Qix5QkFBeUIsb0ZBQW9GLDZEQUE2RCx5Q0FBeUMsY0FBYyxxQkFBcUIsZUFBZSxpREFBaUQsaURBQWlELFNBQVMsK0ZBQStGLHdEQUF3RCxvQkFBb0IsVUFBVSwrRkFBK0YsYUFBYSxXQUFXLHNEQUFzRCxrQkFBa0IsVUFBVSw0RkFBNEYsaUJBQWlCLFVBQVUsZ0dBQWdHLG1CQUFtQixjQUFjLHFGQUFxRixlQUFlLFdBQVcsV0FBVyx3Q0FBd0MsV0FBVyx3Q0FBd0MsV0FBVyxtQ0FBbUMseUJBQXlCLHNDQUFzQyxPQUFPLDBEQUEwRCxtQ0FBbUMsZ0JBQWdCLDZDQUE2QyxRQUFRLG1FQUFtRSxrQ0FBa0MsRUFBRSxpRUFBaUUsaUNBQWlDLEVBQUUscUVBQXFFLG1DQUFtQyxFQUFFLG9CQUFvQixvQkFBb0IsYUFBYSwrQkFBK0IsZUFBZSxvQkFBb0Isc0JBQXNCLCtCQUErQix1QkFBdUIsZUFBZSxvQkFBb0Isc0JBQXNCLG1CQUFtQixxQ0FBcUMsaURBQWlELDRIQUE0SCxRQUFRLG9EQUFvRCxzQkFBc0IsYUFBYSxVQUFVLDBEQUEwRCxxQkFBcUIsYUFBYSxVQUFVLDREQUE0RCx3QkFBd0IsVUFBVSw0REFBNEQsdUJBQXVCLGFBQWEscURBQXFELCtEQUErRCxFQUFFLCtEQUErRCxVQUFVLHdDQUF3QyxFQUFFLHdDQUF3QyxVQUFVLHdDQUF3QyxrQkFBa0IsRUFBRSxrQ0FBa0MsOERBQThELGdEQUFnRCx3Q0FBd0MsbUJBQW1CLE9BQU8sd0NBQXdDLDBEQUEwRCxhQUFhLFdBQVcsRUFBRSw2REFBNkQsaUJBQWlCLFdBQVcsd0RBQXdELG9CQUFvQixtQkFBbUIsdUJBQXVCLDJEQUEyRCx1QkFBdUIsaUNBQWlDLGlCQUFpQixvRUFBb0UsTUFBTSxZQUFZLGFBQWEsNkVBQTZFLE9BQU8sZ0NBQWdDLEtBQUssc0NBQXNDLGlCQUFpQixvRkFBb0YseUJBQXlCLGFBQWEscUJBQXFCLGlFQUFpRSxHQUFHLFlBQVkscUJBQXFCLDZCQUE2QixtQkFBbUIsTUFBTSxNQUFNLHNCQUFzQixvREFBb0Qsc0NBQXNDLE9BQU8sR0FBRyxtQkFBbUIsU0FBUyxnQ0FBZ0MsMENBQTBDLGlCQUFpQiwrQ0FBK0MsaUJBQWlCLGFBQWEsNENBQTRDLFdBQVcsZ0ZBQWdGLFVBQVUsNEJBQTRCLHdEQUF3RCxxQkFBcUIsbUJBQW1CLE1BQU0sK0JBQStCLDJEQUEyRCxxQkFBcUIsbUJBQW1CLE1BQU0sdUNBQXVDLE1BQU0sK0JBQStCLCtCQUErQixFQUFFLE1BQU0sa0NBQWtDLHFCQUFxQixFQUFFLE1BQU0scUNBQXFDLDJIQUEySCw2RkFBNkYsaUJBQWlCLEVBQUUsc0NBQXNDLHFCQUFxQixxQkFBcUIsR0FBRyxxQkFBcUIsTUFBTSwwREFBMEQsTUFBTSxzREFBc0QsNkJBQTZCLGlCQUFpQixHQUFHLE1BQU0sNkJBQTZCLE1BQU0sNENBQTRDLE1BQU0sbURBQW1ELE1BQU0sK0NBQStDLE1BQU0sMkJBQTJCLFNBQVMsK0dBQStHLDJDQUEyQyxrQkFBa0IscUJBQXFCLHNCQUFzQixhQUFhLHFGQUFxRixPQUFPLG9GQUFvRixxQkFBcUIsZUFBZSwyQkFBMkIsaUdBQWlHLHFDQUFxQyxvQkFBb0IsZ0JBQWdCLGdDQUFnQyxzQkFBc0Isc0JBQXNCLEVBQUUsTUFBTSxrRkFBa0YsTUFBTSxrQkFBa0Isb0JBQW9CLGlDQUFpQyxtQkFBbUIsbUNBQW1DLEVBQUUsTUFBTSxZQUFZLE1BQU0sY0FBYyxvQ0FBb0MscUNBQXFDLGVBQWUsRUFBRSxNQUFNLDBFQUEwRSxNQUFNLGlCQUFpQixTQUFTLE9BQU8sWUFBWSxlQUFlLGtCQUFrQixNQUFNLGFBQWEsYUFBYSxzRkFBc0YsaUJBQWlCLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLE1BQU0scURBQXFELE1BQU0saUNBQWlDLE1BQU0sNEJBQTRCLE1BQU0sOEJBQThCLE1BQU0sbUNBQW1DLE1BQU0seUNBQXlDLDRCQUE0QixFQUFFLE1BQU0sMENBQTBDLDBGQUEwRixvQkFBb0IsOENBQThDLEVBQUUsT0FBTyxNQUFNLDBDQUEwQywwRkFBMEYsdUhBQXVILE9BQU8sTUFBTSw2QkFBNkIsTUFBTSwrREFBK0QsTUFBTSxhQUFhLGFBQWEsMERBQTBELE1BQU0saUNBQWlDLG1CQUFtQixJQUFJLE1BQU0sdUJBQXVCLCtCQUErQiw2Q0FBNkMsaUZBQWlGLEdBQUcsdUJBQXVCLFNBQVMsY0FBYyxNQUFNLEVBQUUsTUFBTSx1Q0FBdUMsTUFBTSwrQkFBK0IsK0JBQStCLEVBQUUsTUFBTSxrQ0FBa0MscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsU0FBUyxnRkFBZ0Ysd0NBQXdDLG9HQUFvRyxTQUFTLEtBQUssbUJBQW1CLGlEQUFpRCxjQUFjLGdGQUFnRixXQUFXLDBDQUEwQyxNQUFNLDRDQUE0QyxNQUFNLG9DQUFvQyxNQUFNLHFDQUFxQyw0RkFBNEYsa01BQWtNLGNBQWMsSUFBSSx1QkFBdUIsTUFBTSx1Q0FBdUMsMENBQTBDLGdDQUFnQyxtQkFBbUIseUJBQXlCLHVIQUF1SCxpQkFBaUIsRUFBRSwwREFBMEQsbUNBQW1DLEVBQUUsTUFBTSx1REFBdUQsTUFBTSxrQ0FBa0Msc0RBQXNELGtDQUFrQyx1REFBdUQsa0JBQWtCLEVBQUUsT0FBTyxnREFBZ0QsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsU0FBUywwR0FBMEcsd0NBQXdDLG9HQUFvRyxTQUFTLElBQUksTUFBTSxrQ0FBa0MsaUdBQWlHLDREQUE0RCxzQkFBc0IsaUNBQWlDLFlBQVksR0FBRyx1QkFBdUIsTUFBTSxzQ0FBc0Msc0RBQXNELHVGQUF1RixrQkFBa0IsR0FBRyx1QkFBdUIsTUFBTSw2Q0FBNkMsaUJBQWlCLFlBQVksbUJBQW1CLGVBQWUsNEJBQTRCLE1BQU0saUNBQWlDLE1BQU0sOEJBQThCLE1BQU0sbUNBQW1DLE1BQU0sMkJBQTJCLFNBQVMsNkdBQTZHLHdDQUF3QyxvR0FBb0csU0FBUyxPQUFPLE9BQU8sYUFBYSx1RkFBdUYsV0FBVyxHQUFHLDBCQUEwQixNQUFNLHlDQUF5QyxrQkFBa0IsT0FBTywwQkFBMEIsbUlBQW1JLHdHQUF3Ryw2QkFBNkIsMkNBQTJDLEVBQUUsb0NBQW9DLDBDQUEwQywyQkFBMkIsS0FBSyxHQUFHLElBQUksbUJBQW1CLEdBQUcsZ0NBQWdDLHVGQUF1RixZQUFZLElBQUksR0FBRyxtQkFBbUIsaURBQWlELDZIQUE2SCxrR0FBa0csd0RBQXdELEVBQUUsbUJBQW1CLHlCQUF5QixRQUFRLHVCQUF1Qiw4Q0FBOEMsMkJBQTJCLElBQUksdU1BQXVNLG1CQUFtQixJQUFJLG9CQUFvQixzQkFBc0Isa0JBQWtCLE1BQU0sa0JBQWtCLFFBQVEsb0RBQW9ELE1BQU0sa0JBQWtCLE9BQU8sa0JBQWtCLFNBQVMsR0FBRyxrREFBa0Qsb0RBQW9ELHFEQUFxRCxFQUFFLEdBQUcsTUFBTSxZQUFZLElBQUksUUFBUSxJQUFJLDRCQUE0QixNQUFNLHFDQUFxQyxzQ0FBc0MsdUJBQXVCLFNBQVMsa0JBQWtCLHVDQUF1Qyx1QkFBdUIsMkJBQTJCLDJIQUEySCxvQkFBb0Isa0hBQWtILDZEQUE2RCxnQkFBZ0IsS0FBSyx1Q0FBdUMsZ0JBQWdCLEVBQUUsZ0VBQWdFLGlCQUFpQixxQkFBcUIsS0FBSyxtR0FBbUcsYUFBYSxXQUFXLE1BQU0sNkRBQTZELGdCQUFnQixLQUFLLG1FQUFtRSxjQUFjLDZCQUE2QixFQUFFLGdFQUFnRSxpQkFBaUIscUJBQXFCLEtBQUssbUVBQW1FLFlBQVksV0FBVyxFQUFFLHFFQUFxRSxjQUFjLFdBQVcsS0FBSyxxRUFBcUUsa0JBQWtCLGFBQWEsS0FBSyxtR0FBbUcsYUFBYSxXQUFXLE1BQU0scURBQXFELFlBQVksWUFBWSxFQUFFLG9EQUFvRCxjQUFjLFlBQVksRUFBRSw4Q0FBOEMsd0JBQXdCLEVBQUUsb0NBQW9DLGdCQUFnQixLQUFLLHFEQUFxRCxjQUFjLGFBQWEsRUFBRSwwREFBMEQsaUJBQWlCLHFCQUFxQixLQUFLLG9EQUFvRCxhQUFhLFdBQVcsRUFBRSxpQkFBaUIsMEJBQTBCLGlDQUFpQyxpQkFBaUIsdUNBQXVDLHVCQUF1QixTQUFTLDhCQUE4QiwwSEFBMEgsUUFBUSxzRUFBc0Usc0JBQXNCLEVBQUUseURBQXlELHdCQUF3QixFQUFFLDhCQUE4QixFQUFFLHFEQUFxRCxpQkFBaUIsRUFBRSxvREFBb0QsbUJBQW1CLEVBQUUsaUJBQWlCLDBDQUEwQyxtRUFBbUUscUJBQXFCLHFGQUFxRixpQ0FBaUMseUVBQXlFLEdBQUcscUJBQXFCLG9CQUFvQix3RUFBd0UscUJBQXFCLDBFQUEwRSx1QkFBdUIsd0VBQXdFLHFCQUFxQiwyRUFBMkUsMEZBQTBGLHdDQUF3QyxtQkFBbUIsWUFBWSxFQUFFLDZFQUE2RSxrREFBa0QsNkVBQTZFLFFBQVEsb0JBQW9CLDZCQUE2QixxQkFBcUIsNkVBQTZFLGVBQWUsbUJBQW1CLDBCQUEwQixFQUFFLDhFQUE4RSx1REFBdUQsVUFBVSxZQUFZLGlDQUFpQyxhQUFhLHlEQUF5RCxZQUFZLHlCQUF5QixRQUFRLDhCQUE4QixRQUFRLG1CQUFtQiwrU0FBK1Msa0JBQWtCLG1EQUFtRCw4QkFBOEIsU0FBUyxpTEFBaUwsc0JBQXNCLEVBQUUsOEdBQThHLHlCQUF5Qiw2RkFBNkYsV0FBVyw4QkFBOEIsYUFBYSxHQUFHLDRFQUE0RSxXQUFXLDZEQUE2RCxPQUFPLG1DQUFtQyxHQUFHLDhDQUE4QyxFQUFFLHdDQUF3Qyw4Q0FBOEMsS0FBSyxnQkFBZ0IsUUFBUSxtQkFBbUIsZUFBZSx3Q0FBd0MsY0FBYyw4REFBOEQsaUJBQWlCLFNBQVMsbUNBQW1DLGVBQWUsNkJBQTZCLFFBQVEsRUFBRSxPQUFPLCtFQUErRSxHQUFHLDBFQUEwRSxZQUFZLCtCQUErQiw0Q0FBNEMseUJBQXlCLFFBQVEsOEhBQThILGtEQUFrRCxzQkFBc0IscUNBQXFDLHdCQUF3Qiw2Q0FBNkMsdUJBQXVCLHVDQUF1QywyREFBMkQsYUFBYSw4QkFBOEIsa0RBQWtELEtBQUssa0JBQWtCLHNDQUFzQyxrREFBa0Qsa0JBQWtCLG9CQUFvQixXQUFXLGVBQWUsb0RBQW9ELHdFQUF3RSxVQUFVLDJCQUEyQixpQkFBaUIseUJBQXlCLFdBQVcsMEJBQTBCLGFBQWEsaURBQWlELDZGQUE2RixRQUFRLG9CQUFvQixtQ0FBbUMsaURBQWlELDBCQUEwQixtRkFBbUYsOERBQThELDBFQUEwRSwwREFBMEQsOEVBQThFLHFDQUFxQyxvSEFBb0gsS0FBSyxxSkFBcUosdURBQXVELFdBQVcsa0JBQWtCLG9FQUFvRSwwQkFBMEIsZ0JBQWdCLGVBQWUsa0NBQWtDLDBDQUEwQyxJQUFJLFVBQVUseUdBQXlHLDBOQUEwTix1QkFBdUIsV0FBVyxpQkFBaUIsR0FBRyxLQUFLLGdFQUFnRSx1S0FBdUssaUJBQWlCLEdBQUcsS0FBSyxFQUFFLHFEQUFxRCw4RkFBOEYsNkRBQTZELHdCQUF3QiwyQkFBMkIsV0FBVyxzQ0FBc0MsK0JBQStCLGdCQUFnQixTQUFTLHNCQUFzQixTQUFTLHlCQUF5Qiw4RkFBOEYsUUFBUSw0SUFBNEksa0JBQWtCLDBDQUEwQyx5QkFBeUIsK0JBQStCLDBCQUEwQixXQUFXLDBCQUEwQixTQUFTLDZCQUE2Qiw4QkFBOEIsU0FBUyxhQUFhLGNBQWMsaUZBQWlGLGtHQUFrRyw2REFBNkQsUUFBUSxjQUFjLHVEQUF1RCxtREFBbUQsK0JBQStCLEtBQUssU0FBUyxnQ0FBZ0MsU0FBUyxrQ0FBa0MsWUFBWSxtQ0FBbUMsRUFBRSxLQUFLLFNBQVMsK0JBQStCLFNBQVMsK0JBQStCLEVBQUUsa0NBQWtDLFlBQVksK0JBQStCLEVBQUUsbUNBQW1DLEVBQUUsMkNBQTJDLG1HQUFtRyxxQ0FBcUMsWUFBWSw2QkFBNkIsZ0JBQWdCLGtDQUFrQyw0QkFBNEIsMkpBQTJKLDRCQUE0QixrREFBa0QsSUFBSSxHQUFHLG1CQUFtQixrQ0FBa0MsNEJBQTRCLHdPQUF3TyxxQ0FBcUMsZ0RBQWdELElBQUksR0FBRyxzQkFBc0Isa0NBQWtDLDRCQUE0QiwwT0FBME8sd0NBQXdDLG1EQUFtRCxJQUFJLEdBQUcsS0FBSywySUFBMkksTUFBTSxjQUFjLGlEQUFpRCxTQUFTLFFBQVEsTUFBTSxjQUFjLGlEQUFpRCxVQUFVLG1CQUFtQixlQUFlLEVBQUUsc0NBQXNDLHVCQUF1QixtREFBbUQsdUNBQXVDLHNDQUFzQywwQkFBMEIseURBQXlELDhCQUE4QixnREFBZ0QsY0FBYyxxQkFBcUIsNERBQTRELEVBQUUsTUFBTSx5REFBeUQsNkJBQTZCLEVBQUUsOERBQThELE9BQU8sY0FBYyxRQUFRLGNBQWMsOENBQThDLDRCQUE0QixPQUFPLFdBQVcscUJBQXFCLGtDQUFrQyx3Q0FBd0Msd0JBQXdCLEVBQUUscUJBQXFCLG9EQUFvRCxxQkFBcUIscURBQXFELHFCQUFxQixvQ0FBb0MsNkJBQTZCLHNIQUFzSCxHQUFHLHVDQUF1QyxVQUFVLGdCQUFnQixvQkFBb0IsaUJBQWlCLHVCQUF1QixjQUFjLHVDQUF1QywyREFBMkQsZ0JBQWdCLDJ2SEFBMnZILDJCQUEyQix3QkFBd0Isb0JBQW9CLDZJQUE2SSxPQUFPLDJDQUEyQyxjQUFjLGNBQWMsOEJBQThCLDJFQUEyRSxtQ0FBbUMsR0FBRyxLQUFLLE9BQU8seUJBQXlCLHFDQUFxQyxpQkFBaUIscUJBQXFCLHFCQUFxQixFQUFFLFFBQVEsa0RBQWtELGNBQWMsbUJBQW1CLG9CQUFvQix3RUFBd0UsU0FBUyxJQUFJLHNIQUFzSCxjQUFjLGNBQWMsOEJBQThCLCtEQUErRCxzQkFBc0IsR0FBRyxLQUFLLDBCQUEwQixxQkFBcUIsRUFBRSx3QkFBd0IsNEJBQTRCLG9GQUFvRixrRUFBa0UsOEZBQThGLHFEQUFxRCxzQ0FBc0MsV0FBVywrREFBK0Qsc0JBQXNCLElBQUksTUFBTSxHQUFHLFdBQVcsd0NBQXdDLHdEQUF3RCw2REFBNkQsZUFBZSxxQkFBcUIsNENBQTRDLEVBQUUsaUZBQWlGLGdEQUFnRCx1Q0FBdUMsMEJBQTBCLEtBQUssd0JBQXdCLGtCQUFrQixVQUFVLDZGQUE2RixvREFBb0Qsb0JBQW9CLDBDQUEwQyx1QkFBdUIscUNBQXFDLGtDQUFrQyxNQUFNLDhCQUE4QixpQkFBaUIsOEJBQThCLEdBQUcsZ0dBQWdHLHlHQUF5RyxLQUFLLDhCQUE4QixTQUFTLHFCQUFxQiwwSEFBMEgsWUFBWSw2QkFBNkIsdUJBQXVCLG1CQUFtQixrREFBa0QsK0RBQStELE9BQU8sUUFBUSx5Q0FBeUMsV0FBVywrREFBK0Qsc0JBQXNCLElBQUksc0JBQXNCLDBMQUEwTCw4REFBOEQsTUFBTSx1QkFBdUIsMEJBQTBCLHdCQUF3QixpREFBaUQsU0FBUyw0QkFBNEIsb0NBQW9DLGdGQUFnRix1QkFBdUIseUpBQXlKLHlCQUF5Qiw4RUFBOEUseUJBQXlCLHdCQUF3QiwwQkFBMEIsd0JBQXdCLDRCQUE0Qix3QkFBd0IsNEJBQTRCLHdCQUF3Qiw0QkFBNEIsd0JBQXdCLDhCQUE4Qix3QkFBd0IsK0JBQStCLHdCQUF3QixpQ0FBaUMsd0JBQXdCLGlDQUFpQyx3QkFBd0IsaUNBQWlDLHdCQUF3QixrQ0FBa0Msd0JBQXdCLG1DQUFtQyx3QkFBd0IsNkJBQTZCLDRCQUE0QixzQkFBc0IsYUFBYSxFQUFFLGlCQUFpQixxREFBcUQsd0JBQXdCLEdBQUcsbUVBQW1FLDZGQUE2RixNQUFNLHVEQUF1RCxVQUFVLDBDQUEwQyxzQkFBc0IsR0FBRyxrRUFBa0UsU0FBUyx1Q0FBdUMsVUFBVSxhQUFhLFFBQVEsR0FBRyxTQUFTLDRCQUE0QiwyQ0FBMkMsb0JBQW9CLGtDQUFrQyx3QkFBd0IsZ0RBQWdELHlDQUF5QyxFQUFFLDBCQUEwQix3QkFBd0IsMENBQTBDLHdCQUF3QixrQ0FBa0MsMERBQTBELDJDQUEyQyx3QkFBd0IsbUNBQW1DLDRDQUE0QywyQ0FBMkMsd0JBQXdCLG1DQUFtQyw0Q0FBNEMsc0NBQXNDLHdCQUF3Qiw4Q0FBOEMsd0JBQXdCLHdCQUF3Qix3QkFBd0IsOEJBQThCLHdCQUF3Qiw4QkFBOEIsd0JBQXdCLDhCQUE4Qix3QkFBd0IsNkJBQTZCLHVDQUF1Qyx3QkFBd0IsNEJBQTRCLHdCQUF3Qiw4QkFBOEIsd0JBQXdCLGdDQUFnQyx3QkFBd0IscUJBQXFCLHdCQUF3QiwrQkFBK0IsU0FBUyx3QkFBd0Isd0JBQXdCLG9CQUFvQixzQkFBc0Isb0NBQW9DLHdCQUF3QixrQ0FBa0Msd0JBQXdCLHFCQUFxQixlQUFlLHdDQUF3Qyx5QkFBeUIsSUFBSSxvQ0FBb0MsMENBQTBDLDZEQUE2RCx3QkFBd0Isd0NBQXdDLHFDQUFxQyxFQUFFLG1DQUFtQyxtQkFBbUIsMkNBQTJDLEVBQUUscUNBQXFDLHdCQUF3Qiw0Q0FBNEMsOEJBQThCLDhDQUE4Qyx3QkFBd0IsZ0NBQWdDLDhCQUE4QixzQ0FBc0MsOEJBQThCLDZDQUE2QyxpQ0FBaUMscURBQXFELFdBQVcsSUFBSSxvREFBb0QsTUFBTSxtQkFBbUIsZ0JBQWdCLElBQUksNkVBQTZFLFNBQVMsb0RBQW9ELG9CQUFvQixzQkFBc0IseUNBQXlDLHlDQUF5QyxHQUFHLGVBQWUsT0FBTyxhQUFhLDZHQUE2RyxFQUFFLGdFQUFnRSwwQkFBMEIsc0NBQXNDLFFBQVEsK0VBQStFLGNBQWMsSUFBSSxJQUFJLGNBQWMsRUFBRSx1Q0FBdUMscUJBQXFCLGdDQUFnQyxHQUFHLFVBQVUsOEJBQThCLGdCQUFnQixFQUFFLElBQUkseUJBQXlCLDRGQUE0RixLQUFLLFdBQVcsc0RBQXNELFNBQVMsTUFBTSxhQUFhLEdBQUcsRUFBRSwyQkFBMkIsNkJBQTZCLHdCQUF3QixpQ0FBaUMsbUJBQW1CLFFBQVEsZ0JBQWdCLHdDQUF3QyxJQUFJLDZEQUE2RCxpREFBaUQsdUJBQXVCLGlIQUFpSCxTQUFTLEtBQUssNERBQTRELEtBQUssR0FBRyxLQUFLLEdBQUcsS0FBSyxpQkFBaUIsTUFBTSx3QkFBd0IsWUFBWSxrSUFBa0ksZUFBZSwySUFBMkksUUFBUSxPQUFPLFdBQVcsaUVBQWlFLHFCQUFxQjtBQUN6bTJTOzs7Ozs7Ozs7O0FDbjRDQTtBQUNBLE1BQU0sT0FBTyxlQUFlLE9BQU8sZUFBZSxPQUFPLFFBQVEsRUFBRSxrNkhBQWs2SCxhQUFhLGFBQWEsb0hBQW9ILE1BQU0sRUFBRSxNQUFNLGdCQUFnQixjQUFjLGl4TUFBaXhNLEVBQUUsY0FBYyxnQkFBZ0Isb0JBQW9CLFlBQVksa0JBQWtCLFFBQVEsV0FBVyx3Q0FBd0MsU0FBUyxrQkFBa0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLG9pQ0FBb2lDLEdBQUcsZUFBZSw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsaXBDQUFpcEMsR0FBRyxlQUFlLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxzUEFBc1AsR0FBRyxlQUFlLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxpYUFBaWEsR0FBRyxlQUFlLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxrZEFBa2QsR0FBRyxlQUFlLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx3Y0FBd2MsR0FBRyxlQUFlLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxnWEFBZ1gsR0FBRyxlQUFlLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxtUEFBbVAsR0FBRyxlQUFlLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxrTEFBa0wsR0FBRyxlQUFlLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQywrZ0NBQStnQyxHQUFHLGVBQWUsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLG1qQkFBbWpCLEdBQUcsZUFBZSw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsNmFBQTZhLEdBQUcsZUFBZSw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MscWJBQXFiLEdBQUcsZUFBZSw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msb2NBQW9jLEdBQUcsZUFBZSw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msa2JBQWtiLEdBQUcsZUFBZSw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsNmFBQTZhLEdBQUcsZUFBZSw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MscWFBQXFhLEdBQUcsZUFBZSw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsNmFBQTZhLEdBQUcsZUFBZSw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msc2JBQXNiLEdBQUcsZUFBZSw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsNDNCQUE0M0IsR0FBRyxlQUFlLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx3cUNBQXdxQyxHQUFHLGVBQWUsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLGd3QkFBZ3dCLEdBQUcsZUFBZSw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MseWFBQXlhLEdBQUcsZUFBZSw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsMjZCQUEyNkIsR0FBRyxlQUFlLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQywraENBQStoQyxHQUFHLGVBQWUsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLGtZQUFrWSxHQUFHLGVBQWUsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLG9aQUFvWixHQUFHLGVBQWUsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHFQQUFxUCw4QkFBOEIsZ0RBQWdELDhCQUE4QixnREFBZ0QsOEJBQThCLGdEQUFnRCw4QkFBOEIsZ0RBQWdELDhCQUE4QixnREFBZ0QsOEJBQThCLGdEQUFnRCw4QkFBOEIsaURBQWlELDhCQUE4QixnREFBZ0QsOEJBQThCLGlEQUFpRCxHQUFHLGVBQWUsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHdGQUF3Riw4QkFBOEIsZ0RBQWdELDhCQUE4QixpREFBaUQsOEJBQThCLGdEQUFnRCw4QkFBOEIsaURBQWlELDhCQUE4QixnREFBZ0QsOEJBQThCLGdEQUFnRCw4QkFBOEIsaURBQWlELDhCQUE4QixpREFBaUQsOEJBQThCLGdEQUFnRCw4QkFBOEIsZ0RBQWdELDhCQUE4QixnREFBZ0QsOEJBQThCLGdEQUFnRCw4QkFBOEIsZ0RBQWdELDhCQUE4QixnREFBZ0QsOEJBQThCLGlEQUFpRCw4QkFBOEIsaURBQWlELDhCQUE4QixnREFBZ0QsOEJBQThCLGlEQUFpRCw4QkFBOEIsaURBQWlELDhCQUE4QixrREFBa0QsOEJBQThCLGdEQUFnRCw4QkFBOEIsZ0RBQWdELDhCQUE4QixnREFBZ0QsOEJBQThCLGdEQUFnRCw4QkFBOEIsZ0RBQWdELDhCQUE4QixpREFBaUQsR0FBRyxlQUFlLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQywrYkFBK2IsR0FBRyxlQUFlLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQywwc0JBQTBzQixHQUFHLGVBQWUsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDRGQUE0Riw4QkFBOEIsNkVBQTZFLDhCQUE4QiwrRUFBK0UsOEJBQThCLDZFQUE2RSw4QkFBOEIsK0VBQStFLDhCQUE4QiwyRUFBMkUsOEJBQThCLDZFQUE2RSw4QkFBOEIsNkVBQTZFLDhCQUE4QiwrRUFBK0UsOEJBQThCLDJFQUEyRSw4QkFBOEIsNkVBQTZFLDhCQUE4QiwyRUFBMkUsOEJBQThCLDZFQUE2RSw4QkFBOEIsMkVBQTJFLDhCQUE4Qiw2RUFBNkUsOEJBQThCLDZFQUE2RSw4QkFBOEIsK0VBQStFLDhCQUE4QiwyRUFBMkUsOEJBQThCLDZFQUE2RSw4QkFBOEIsMkVBQTJFLDhCQUE4Qiw2RUFBNkUsOEJBQThCLDZFQUE2RSw4QkFBOEIsNkVBQTZFLDhCQUE4QiwyRUFBMkUsOEJBQThCLDZFQUE2RSw4QkFBOEIsMkVBQTJFLDhCQUE4QiwyRUFBMkUsR0FBRyxlQUFlLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxvREFBb0QsOEJBQThCLHFEQUFxRCw4QkFBOEIsb0RBQW9ELDhCQUE4QixxREFBcUQsOEJBQThCLG9EQUFvRCw4QkFBOEIscURBQXFELDhCQUE4QixvREFBb0QsOEJBQThCLHFEQUFxRCw4QkFBOEIsc0RBQXNELDhCQUE4QixxREFBcUQsOEJBQThCLG9EQUFvRCw4QkFBOEIscURBQXFELDhCQUE4QixvREFBb0QsOEJBQThCLG9EQUFvRCw4QkFBOEIscURBQXFELDhCQUE4QixvREFBb0QsOEJBQThCLG9EQUFvRCw4QkFBOEIscURBQXFELDhCQUE4QixvREFBb0QsOEJBQThCLHFEQUFxRCw4QkFBOEIsc0RBQXNELDhCQUE4QixxREFBcUQsOEJBQThCLG9EQUFvRCw4QkFBOEIscURBQXFELDhCQUE4QixxREFBcUQsOEJBQThCLHNEQUFzRCw4QkFBOEIsb0RBQW9ELDhCQUE4QixvREFBb0QsOEJBQThCLG9EQUFvRCw4QkFBOEIscURBQXFELDhCQUE4QixvREFBb0QsOEJBQThCLG9EQUFvRCw4QkFBOEIscURBQXFELEdBQUcsZUFBZSw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsNkZBQTZGLDhCQUE4QixvRUFBb0UsOEJBQThCLHFFQUFxRSw4QkFBOEIsb0VBQW9FLDhCQUE4QixxRUFBcUUsOEJBQThCLG9FQUFvRSw4QkFBOEIsb0VBQW9FLDhCQUE4QixxRUFBcUUsOEJBQThCLHFFQUFxRSw4QkFBOEIsb0VBQW9FLDhCQUE4QixvRUFBb0UsOEJBQThCLG9FQUFvRSw4QkFBOEIsb0VBQW9FLDhCQUE4QixvRUFBb0UsOEJBQThCLG9FQUFvRSw4QkFBOEIscUVBQXFFLDhCQUE4QixxRUFBcUUsOEJBQThCLG9FQUFvRSw4QkFBOEIscUVBQXFFLDhCQUE4QixxRUFBcUUsOEJBQThCLHNFQUFzRSw4QkFBOEIsb0VBQW9FLDhCQUE4QixvRUFBb0UsOEJBQThCLG9FQUFvRSw4QkFBOEIsb0VBQW9FLDhCQUE4QixvRUFBb0UsOEJBQThCLHFFQUFxRSxHQUFHLGVBQWUsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHVNQUF1TSxHQUFHLGVBQWUsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLG9EQUFvRCw4QkFBOEIsb0RBQW9ELDhCQUE4QixvREFBb0QsOEJBQThCLHFEQUFxRCw4QkFBOEIsb0RBQW9ELDhCQUE4QixxREFBcUQsOEJBQThCLG9EQUFvRCw4QkFBOEIsb0RBQW9ELDhCQUE4QixvREFBb0QsOEJBQThCLHFEQUFxRCw4QkFBOEIsb0RBQW9ELDhCQUE4QixxREFBcUQsOEJBQThCLG9EQUFvRCw4QkFBOEIsNFhBQTRYLEdBQUcsZUFBZSw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsMjNDQUEyM0MsR0FBRyxlQUFlLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyw2RkFBNkYsOEJBQThCLCtFQUErRSw4QkFBOEIsK0VBQStFLDhCQUE4QiwrRUFBK0UsOEJBQThCLCtFQUErRSw4QkFBOEIsNkVBQTZFLDhCQUE4QiwrRUFBK0UsOEJBQThCLDZFQUE2RSw4QkFBOEIsK0VBQStFLDhCQUE4QiwrRUFBK0UsOEJBQThCLGlGQUFpRiw4QkFBOEIsK0VBQStFLDhCQUE4QixpRkFBaUYsOEJBQThCLDZFQUE2RSw4QkFBOEIsK0VBQStFLDhCQUE4Qiw2RUFBNkUsOEJBQThCLCtFQUErRSw4QkFBOEIsNkVBQTZFLDhCQUE4Qiw2RUFBNkUsOEJBQThCLDZFQUE2RSw4QkFBOEIsNkVBQTZFLDhCQUE4QixpRkFBaUYsOEJBQThCLGlGQUFpRiw4QkFBOEIsK0VBQStFLDhCQUE4QixpRkFBaUYsOEJBQThCLCtFQUErRSw4QkFBOEIsK0VBQStFLEdBQUcsZUFBZSw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MscVVBQXFVLEdBQUcsZUFBZSw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsK2hCQUEraEIsR0FBRyxlQUFlLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxxdUJBQXF1QixHQUFHLGVBQWUsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDY4REFBNjhELEdBQUcsZUFBZSw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsMDFCQUEwMUIsR0FBRyxlQUFlLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx1ZUFBdWUsR0FBRyxlQUFlLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQywrbEJBQStsQixHQUFHLGVBQWUsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHl0QkFBeXRCLEdBQUcsZUFBZSw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsaWFBQWlhLEdBQUcsZUFBZSw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsNFpBQTRaLEdBQUcsZUFBZSw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MseVpBQXlaLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxrdUJBQWt1QixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsaWFBQWlhLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxxbkJBQXFuQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsK1pBQStaLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyw0MEJBQTQwQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msc2lCQUFzaUIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDRXQUE0VyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsbVhBQW1YLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQywyV0FBMlcsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDRXQUE0VyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsMmRBQTJkLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyw0bUJBQTRtQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msa2VBQWtlLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxvMkRBQW8yRCxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msa3VCQUFrdUIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHc1QkFBdzVCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQywyaENBQTJoQyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msb2lDQUFvaUMsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDRLQUE0SyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsZ2tCQUFna0IsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHk3Q0FBeTdDLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyw0N0RBQTQ3RCxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msb1hBQW9YLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQywrWUFBK1ksR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDh2QkFBOHZCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx1bUNBQXVtQyw4QkFBOEIsMnVFQUEydUUsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDB6REFBMHpELEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxzakhBQXNqSCxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MscXFCQUFxcUIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHVuQkFBdW5CLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQywwbkJBQTBuQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsbW5CQUFtbkIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHNuQkFBc25CLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxrMUVBQWsxRSxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsNDBCQUE0MEIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLGlnQ0FBaWdDLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQywrbUJBQSttQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsbWpCQUFtakIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHlqQkFBeWpCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx1K0JBQXUrQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsKzJCQUErMkIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDQ1QkFBNDVCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx5cURBQXlxRCxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsaWpCQUFpakIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHUwQkFBdTBCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyw2aENBQTZoQyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsNEtBQTRLLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQywweEpBQTB4SixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsNnZDQUE2dkMsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHkzQkFBeTNCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyw4S0FBOEssR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLGtMQUFrTCxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsK1hBQStYLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQywrS0FBK0ssR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLG9pQkFBb2lCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxvaUJBQW9pQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsNHFCQUE0cUIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDRxQkFBNHFCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyw0cUJBQTRxQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsNHFCQUE0cUIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLG12QkFBbXZCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGtDQUFrQyxnQ0FBZ0MsZ0NBQWdDLGdDQUFnQyxnQ0FBZ0Msa0NBQWtDLGdDQUFnQyxrQ0FBa0MsZ0NBQWdDLG1DQUFtQyxnQ0FBZ0MsbUNBQW1DLGdDQUFnQyxnQ0FBZ0MsZ0NBQWdDLGdDQUFnQyxnQ0FBZ0Msa0NBQWtDLGdDQUFnQyxrQ0FBa0MsZ0NBQWdDLG1DQUFtQyxnQ0FBZ0MsbUNBQW1DLGdDQUFnQyxrQ0FBa0MsZ0NBQWdDLGtDQUFrQyxnQ0FBZ0Msb0NBQW9DLGdDQUFnQyxvQ0FBb0MsZ0NBQWdDLHFDQUFxQyxnQ0FBZ0MscUNBQXFDLGdDQUFnQyxtQ0FBbUMsZ0NBQWdDLG1DQUFtQyxnQ0FBZ0MscUNBQXFDLGdDQUFnQyxxQ0FBcUMsZ0NBQWdDLHNDQUFzQyxnQ0FBZ0Msc0NBQXNDLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxpaUNBQWlpQyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsKzFCQUErMUIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDY0QkFBNjRCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQywyMUJBQTIxQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsMHdCQUEwd0IsOEJBQThCLDB3QkFBMHdCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxrOUJBQWs5QixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsMm1CQUEybUIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDJxQkFBMnFCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx1WkFBdVosR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDJkQUEyZCxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsZzFCQUFnMUIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDZtQkFBNm1CLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQywwcUJBQTBxQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsK3RCQUErdEIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHV0Q0FBdXRDLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx5OUJBQXk5QixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsZ21CQUFnbUIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHl1Q0FBeXVDLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxzN0NBQXM3QyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msb2FBQW9hLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx5Z0JBQXlnQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsNHBCQUE0cEIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHkwQkFBeTBCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxncUJBQWdxQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsdzRCQUF3NEIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDBmQUEwZixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsMmVBQTJlLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQywrc0NBQStzQyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsZ29EQUFnb0QsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDZrQkFBNmtCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyw4b0JBQThvQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsaXBGQUFpcEYsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHF1Q0FBcXVDLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyw2YUFBNmEsOEJBQThCLG1HQUFtRyw4QkFBOEIsb2lCQUFvaUIsOEJBQThCLDh6QkFBOHpCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQywrV0FBK1csR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHNpRUFBc2lFLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQywyZkFBMmYsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLGtZQUFrWSxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsK2FBQSthLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxrdElBQWt0SSxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsODhCQUE4OEIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHl0QkFBeXRCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx1cUJBQXVxQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsNnlEQUE2eUQsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHN4QkFBc3hCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx1L0JBQXUvQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsODJCQUE4MkIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLGlqQ0FBaWpDLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxnL0JBQWcvQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MscWxDQUFxbEMsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLGtXQUFrVyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msd2tDQUF3a0MsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDR2Q0FBNHZDLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxza0NBQXNrQyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsMDNCQUEwM0IsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDRqREFBNGpELEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxneEJBQWd4QixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsdTJDQUF1MkMsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHczREFBdzNELEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx3akVBQXdqRSxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msa2tEQUFra0QsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHdyR0FBd3JHLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQywwOERBQTA4RCxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msb2pFQUFvakUsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHUzQkFBdTNCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxtbkJBQW1uQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsbWdCQUFtZ0IsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDBnQkFBMGdCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxnNUJBQWc1QixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MseXhEQUF5eEQsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHVjQUF1YyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsdWxIQUF1bEgsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDhnQkFBOGdCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxxVkFBcVYsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHVNQUF1TSxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MscW5CQUFxbkIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDI4Q0FBMjhDLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx3bkNBQXduQyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msb25DQUFvbkMsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHFuQkFBcW5CLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxzNUdBQXM1RyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsMHZEQUEwdkQsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDY2Q0FBNjZDLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxzU0FBc1MsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLG9xQkFBb3FCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxnZ0VBQWdnRSxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsZ2tCQUFna0IsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLGtkQUFrZCxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MseWhCQUF5aEIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDA4REFBMDhELEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxvN0JBQW83QixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msc25CQUFzbkIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLG9VQUFvVSxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsdXJCQUF1ckIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLG1zQkFBbXNCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxtc0JBQW1zQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MseXJCQUF5ckIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLG9ZQUFvWSxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msd1ZBQXdWLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQywweUJBQTB5QixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsbTJCQUFtMkIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHU1Q0FBdTVDLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyw2bUNBQTZtQyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsNHFCQUE0cUIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHN5RUFBc3lFLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx1eEJBQXV4QixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsMmlCQUEyaUIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLG9vQkFBb29CLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx5a0ZBQXlrRixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsZ3hCQUFneEIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLGdzQ0FBZ3NDLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyw4UEFBOFAsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHV1QkFBdXVCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxnd0NBQWd3QyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msc3pEQUFzekQsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDRXQUE0VyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsMFBBQTBQLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQywyZEFBMmQsOEJBQThCLDBNQUEwTSw4QkFBOEIsOE1BQThNLDhCQUE4QixnTkFBZ04sOEJBQThCLDhNQUE4TSw4QkFBOEIsZ05BQWdOLDhCQUE4QiwrTUFBK00sOEJBQThCLDhNQUE4TSw4QkFBOEIsNk1BQTZNLDhCQUE4Qiw4TUFBOE0sOEJBQThCLDRNQUE0TSxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsMmRBQTJkLDhCQUE4Qiw4TUFBOE0sOEJBQThCLDhNQUE4TSw4QkFBOEIsZ05BQWdOLDhCQUE4QiwrTUFBK00sOEJBQThCLDhNQUE4TSw4QkFBOEIsK01BQStNLDhCQUE4QiwrTUFBK00sOEJBQThCLDhNQUE4TSw4QkFBOEIsK01BQStNLDhCQUE4Qiw4TUFBOE0sR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHE4QkFBcThCLDhCQUE4QiwwTUFBME0sOEJBQThCLDhNQUE4TSw4QkFBOEIsZ05BQWdOLDhCQUE4Qiw4TUFBOE0sOEJBQThCLGdOQUFnTiw4QkFBOEIsK01BQStNLDhCQUE4Qiw4TUFBOE0sOEJBQThCLDZNQUE2TSw4QkFBOEIsOE1BQThNLDhCQUE4Qiw0TUFBNE0sR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDZWQUE2Viw4QkFBOEIsMlZBQTJWLDhCQUE4QixvVkFBb1YsOEJBQThCLGtWQUFrViw4QkFBOEIsaU5BQWlOLDhCQUE4Qix1Y0FBdWMsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHdxQ0FBd3FDLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx3aUNBQXdpQyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsMGlEQUEwaUQsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHFyQkFBcXJCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx5NUNBQXk1QyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsbUdBQW1HLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxpa0JBQWlrQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsazNCQUFrM0IsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLGdoQkFBZ2hCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxvbENBQW9sQyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsaW9CQUFpb0IsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLGtvQ0FBa29DLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx5d0JBQXl3QixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MscytCQUFzK0IsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLG93QkFBb3dCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxvSEFBb0gsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHN4QkFBc3hCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyw4aURBQThpRCxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsMHBCQUEwcEIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHVoREFBdWhELEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx5TEFBeUwsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLGsvQkFBay9CLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxrbUJBQWttQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MseWFBQXlhLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQywrb0JBQStvQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsMHVEQUEwdUQsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLG9hQUFvYSxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msay9DQUFrL0MsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDRZQUE0WSxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MseXVDQUF5dUMsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHN1QkFBc3VCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQywrYUFBK2EsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLCthQUErYSxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsMGFBQTBhLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQywrYUFBK2EsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLCs1QkFBKzVCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyx1ZkFBdWYsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHdoQkFBd2hCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxraEJBQWtoQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsaWdCQUFpZ0IsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDA1QkFBMDVCLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxzOUJBQXM5QixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsbW5CQUFtbkIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDZuQkFBNm5CLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxzTkFBc04sR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDhYQUE4WCxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsaUNBQWlDLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxrQ0FBa0MsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLG9DQUFvQyxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsZ0NBQWdDLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQywyd0VBQTJ3RSxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msb2xCQUFvbEIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLGsvQ0FBay9DLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxxeEJBQXF4QixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsMmRBQTJkLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxzOEJBQXM4QixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsK01BQStNLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxvOURBQW85RCxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MsOFdBQThXLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxvVkFBb1YsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLHNlQUFzZSxHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0Msa1ZBQWtWLEdBQUcsZ0JBQWdCLDZEQUE2RCwrQ0FBK0MsMEZBQTBGLGdDQUFnQyxpcUJBQWlxQixHQUFHLGdCQUFnQiw2REFBNkQsK0NBQStDLDBGQUEwRixnQ0FBZ0MscXVCQUFxdUIsR0FBRyxnQkFBZ0IsNkRBQTZELCtDQUErQywwRkFBMEYsZ0NBQWdDLDRrQkFBNGtCLElBQUksZ0JBQWdCLGNBQWMsY0FBYyxFQUFFLGlEQUFpRCwrQkFBK0IsaUJBQWlCLG9CQUFvQixzQkFBc0IsOEJBQThCLDhDQUE4Qyx5QkFBeUIsR0FBRywrQkFBK0IsaUJBQWlCLEdBQUcsOERBQThELGtCQUFrQixtQkFBbUIsR0FBRyxrRUFBa0UsZUFBZSxrQkFBa0IsR0FBRyw0RkFBNEYsZ0NBQWdDLG1DQUFtQywyQkFBMkIsR0FBRywwQkFBMEIsY0FBYyxjQUFjLGtCQUFrQixHQUFHLHdDQUF3QyxvQkFBb0IsR0FBRywrQkFBK0Isa0JBQWtCLGlCQUFpQix1QkFBdUIsR0FBRyxzQ0FBc0Msb0JBQW9CLHFCQUFxQixHQUFHLCtDQUErQyw4QkFBOEIsR0FBRyx1R0FBdUcsOEJBQThCLEdBQUcseUNBQXlDLHVCQUF1Qiw4QkFBOEIsc0JBQXNCLHNCQUFzQixHQUFHLGtEQUFrRCxtQkFBbUIsR0FBRyxrRUFBa0Usa0JBQWtCLHdCQUF3Qiw0QkFBNEIsc0JBQXNCLHNCQUFzQixHQUFHLG1EQUFtRCxtQkFBbUIsR0FBRyw0REFBNEQsbUJBQW1CLEdBQUcsK0pBQStKLHVCQUF1QixHQUFHLHlCQUF5QixvQkFBb0IsMkJBQTJCLHFCQUFxQix1QkFBdUIsc0JBQXNCLEdBQUcsa0NBQWtDLDhCQUE4QixHQUFHLDZFQUE2RSw4QkFBOEIsR0FBRyw4QkFBOEIsd0JBQXdCLEdBQUcsdUZBQXVGLHdCQUF3QixHQUFHLG9DQUFvQyx3QkFBd0IsR0FBRyxtR0FBbUcsd0JBQXdCLEdBQUcsaUNBQWlDLHdCQUF3QixpQkFBaUIsR0FBRyw2RkFBNkYsd0JBQXdCLEdBQUcsNkRBQTZELDhCQUE4QixHQUFHLFNBQVMsVUFBVSxVQUFVLHNCQUFzQixTQUFTLDZCQUE2Qiw2QkFBNkIseUJBQXlCLCtDQUErQyx1Q0FBdUMsZ0VBQWdFLHFCQUFxQixlQUFlLGVBQWUsS0FBSyxZQUFZLHlCQUF5QiwwQ0FBMEMsU0FBUyxpQkFBaUIsY0FBYyxLQUFLLGlCQUFpQixtQkFBbUIsWUFBWSxXQUFXLEtBQUssc0JBQXNCLG9HQUFvRyxpQkFBaUIsb0RBQW9ELGlCQUFpQixnRUFBZ0UsaUJBQWlCLDBDQUEwQyxJQUFJLFVBQVUsc0JBQXNCLGFBQWEsZ0JBQWdCLGNBQWMsaUZBQWlGLGdCQUFnQixhQUFhLG9HQUFvRyxNQUFNLGdCQUFnQiwwRUFBMEUsdUJBQXVCLFFBQVEsY0FBYyxvR0FBb0csU0FBUyxjQUFjLHdFQUF3RSw2Q0FBNkMsTUFBTSxjQUFjLG9CQUFvQixzQ0FBc0MsNEJBQTRCLGVBQWUseUJBQXlCLDRCQUE0QixvRUFBb0UsaUJBQWlCLElBQUksa0NBQWtDLHNGQUFzRixlQUFlLDRHQUE0RywwQ0FBMEMsYUFBYSxxQ0FBcUMsdUNBQXVDLFlBQVksWUFBWSxNQUFNLGdDQUFnQyw0REFBNEQsbUNBQW1DLHFDQUFxQyxJQUFJLGdGQUFnRixPQUFPLFNBQVMsVUFBVSxjQUFjLGFBQWEsTUFBTSwwQkFBMEIsbUNBQW1DLCtCQUErQixxQkFBcUIsdURBQXVELDhGQUE4RixZQUFZLFNBQVMsRUFBRSxjQUFjLFlBQVksZUFBZSw4RUFBOEUsNkNBQTZDLGlGQUFpRix5QkFBeUIsc0RBQXNELElBQUksd0JBQXdCLG9CQUFvQiwwQkFBMEIsK0JBQStCLDhGQUE4RixVQUFVLHVLQUF1SyxTQUFTLDREQUE0RCxrREFBa0QsaU5BQWlOLG9MQUFvTCxvQkFBb0Isd0hBQXdILHlCQUF5QixvUEFBb1AsbUdBQW1HLGdCQUFnQixtQ0FBbUMsNkZBQTZGLEVBQUUsMENBQTBDLDRFQUE0RSxpREFBaUQsRUFBRSw2Q0FBNkMseUJBQXlCLG9EQUFvRCxFQUFFLHNDQUFzQyxrRUFBa0UsdUZBQXVGLEdBQUcsRUFBRSxzREFBc0QsNktBQTZLLDhCQUE4QixvQ0FBb0MsS0FBSyxFQUFFLHdDQUF3Qyx1R0FBdUcsRUFBRSw0Q0FBNEMsd0JBQXdCLG1RQUFtUSxZQUFZLGdCQUFnQix5R0FBeUcsc0lBQXNJLEVBQUUsc0NBQXNDLHdWQUF3VixFQUFFLHlDQUF5QywwQ0FBMEMsRUFBRSwyQ0FBMkMsbUJBQW1CLHlIQUF5SCxnSUFBZ0ksbUdBQW1HLHNEQUFzRCx3TEFBd0wsRUFBRSw0Q0FBNEMsdUJBQXVCLEVBQUUsOEJBQThCLDZFQUE2RSxNQUFNLG9KQUFvSix5QkFBeUIsZ0JBQWdCLGdDQUFnQyw0RkFBNEYsRUFBRSxhQUFhLGtCQUFrQixZQUFZLFdBQVcsS0FBSyxXQUFXLGtIQUFrSCxxREFBcUQsWUFBWSxJQUFJLDZEQUE2RCxhQUFhLHNEQUFzRCwrakJBQStqQiwrR0FBK0csNkRBQTZELGlHQUFpRyxpQkFBaUIsdUNBQXVDLG9CQUFvQixhQUFhLGdCQUFnQixjQUFjLHNCQUFzQixFQUFFLGNBQWMsZ0JBQWdCLHFCQUFxQixpQ0FBaUMsc0NBQXNDLDRCQUE0Qix1REFBdUQsc0JBQXNCLFNBQVMsY0FBYyxZQUFZLG1CQUFtQixLQUFLLHlDQUF5Qyx5Q0FBeUMsWUFBWSxxSUFBcUksZ0VBQWdFLEdBQUcsU0FBUyxrQkFBa0IscUJBQXFCLG9CQUFvQix5Q0FBeUMsNEJBQTRCLGVBQWUseUJBQXlCLCtCQUErQixvRUFBb0UsaUJBQWlCLElBQUkscUNBQXFDLG9DQUFvQyxrREFBa0QsV0FBVyxrQkFBa0IsbUNBQW1DLGVBQWUseUJBQXlCLGVBQWUsd0JBQXdCLGVBQWUsdUJBQXVCLGlCQUFpQixTQUFTLDhCQUE4QixzQkFBc0IsS0FBSyxlQUFlLHNEQUFzRCxJQUFJLHdCQUF3QiwrQ0FBK0MsZUFBZSwyRkFBMkYsc0JBQXNCLHFGQUFxRixvR0FBb0csT0FBTyxtS0FBbUssbUJBQW1CLHFDQUFxQyxlQUFlLGdEQUFnRCxvQ0FBb0MsMENBQTBDLGFBQWEsR0FBRyxHQUFHLGVBQWUsV0FBVyx5QkFBeUIsc0RBQXNELElBQUksd0JBQXdCLG9CQUFvQiwwQkFBMEIsK0JBQStCLDhGQUE4RixRQUFRLHNIQUFzSCxTQUFTLGNBQWMsd0JBQXdCLG1CQUFtQix5REFBeUQsS0FBSywwQkFBMEIsNkNBQTZDLHNGQUFzRixTQUFTLGNBQWMsbURBQW1ELGlGQUFpRixPQUFPLGdLQUFnSyw0RkFBNEYsYUFBYSxHQUFHLGtEQUFrRCw0Q0FBNEMsNENBQTRDLDRDQUE0QyxLQUFLLDBEQUEwRCxnQ0FBZ0MsMEtBQTBLLGlCQUFpQixtREFBbUQsZ0NBQWdDLDBDQUEwQyxpRkFBaUYseUJBQXlCLGVBQWUsNEJBQTRCLG9CQUFvQixlQUFlLFdBQVcsdURBQXVELHNDQUFzQyxnREFBZ0QsZUFBZSxxQkFBcUIsMkhBQTJILGVBQWUsc0lBQXNJLE1BQU0scURBQXFELHFFQUFxRSxJQUFJLFdBQVcsOEJBQThCLDhDQUE4Qyw4R0FBOEcsV0FBVyxzQ0FBc0MsMEJBQTBCLGFBQWEsR0FBRyxrSkFBa0osMENBQTBDLHVDQUF1Qyx3Q0FBd0MsS0FBSyxzQ0FBc0MseUJBQXlCLGFBQWEsR0FBRywrSUFBK0ksMENBQTBDLHdDQUF3QyxzQ0FBc0MsMEJBQTBCLG1DQUFtQyx1QkFBdUIsZUFBZSxXQUFXLHFIQUFxSCxjQUFjLGlDQUFpQyxlQUFlLG9CQUFvQixpQkFBaUIsbUJBQW1CLGdDQUFnQyxpRUFBaUUsT0FBTywrRUFBK0Usc0JBQXNCLHFDQUFxQyxzQkFBc0IsZ0NBQWdDLHNCQUFzQixrQ0FBa0Msc0JBQXNCLElBQUksY0FBYyx1TkFBdU4sVUFBVSxhQUFhLGdCQUFnQixjQUFjLGdCQUFnQixzQkFBc0Isd0JBQXdCLDJFQUEyRSxvRkFBb0YsaUJBQWlCLG1CQUFtQiw4REFBOEQsd0JBQXdCLHlCQUF5QixTQUFTLDBHQUEwRyxJQUFJLGlIQUFpSCxtQkFBbUIsMERBQTBELE1BQU0sZ0lBQWdJLE9BQU8saUJBQWlCLGNBQWMsOENBQThDLElBQUksNEVBQTRFLGtCQUFrQixtREFBbUQsb0JBQW9CLDBEQUEwRCxxQ0FBcUMsbUNBQW1DLHVDQUF1Qyw4Q0FBOEMsdUJBQXVCLGdDQUFnQyxnQkFBZ0Isc0NBQXNDLFNBQVMsRUFBRSwrREFBK0QsY0FBYywrQ0FBK0MsV0FBVyxrQkFBa0IsNEJBQTRCLDBCQUEwQiw4Q0FBOEMsa0JBQWtCLDJDQUEyQyxtQ0FBbUMsNkJBQTZCLGFBQWEsR0FBRyxnQ0FBZ0MsZ0NBQWdDLE9BQU8sc0JBQXNCLDJCQUEyQixhQUFhLEtBQUssSUFBSSw2YkFBNmIsY0FBYyxnQkFBZ0IsV0FBVyw4QkFBOEIsdUJBQXVCLFVBQVUsaURBQWlELCtCQUErQixTQUFTLGFBQWEsc0JBQXNCLEVBQUUsYUFBYSxxQ0FBcUMsNEJBQTRCLGNBQWMscUJBQXFCLG1EQUFtRCxhQUFhLHNCQUFzQiw0QkFBNEIsd0RBQXdELCtCQUErQixZQUFZLDJCQUEyQiwyQkFBMkIsT0FBTyxjQUFjLDZCQUE2QixxQkFBcUIsV0FBVyxjQUFjLFlBQVksd0ZBQXdGLGNBQWMsNEVBQTRFLGNBQWMsd0JBQXdCLGNBQWMsK0JBQStCLHNCQUFzQixNQUFNLHdCQUF3QixtQkFBbUIseUhBQXlILGtCQUFrQixtQkFBbUIsNENBQTRDLFNBQVMscUNBQXFDLG9CQUFvQixLQUFLLGdCQUFnQixTQUFTLHFDQUFxQyw0QkFBNEIsS0FBSyxLQUFLLGNBQWMsTUFBTSxrTEFBa0wsY0FBYyxpQ0FBaUMsY0FBYyxzQ0FBc0MsY0FBYyxpR0FBaUcsMkNBQTJDLHNEQUFzRCxvQkFBb0IsU0FBUyw0QkFBNEIsT0FBTyxxREFBcUQsMEJBQTBCLDRDQUE0Qyw2QkFBNkIsT0FBTyxxQkFBcUIsb0JBQW9CLGVBQWUsZ0RBQWdELDhFQUE4RSxtQ0FBbUMsK0JBQStCLHVCQUF1QixpREFBaUQscURBQXFELEtBQUssV0FBVyx1RkFBdUYsR0FBRyxnQkFBZ0IscUJBQXFCLGtEQUFrRCxRQUFRLFdBQVcsOEZBQThGLDJCQUEyQixNQUFNLGlFQUFpRSxpQkFBaUIsa0JBQWtCLHlDQUF5QyxRQUFRLDRCQUE0QixTQUFTLGtDQUFrQyxZQUFZLElBQUksS0FBSyw4Q0FBOEMsOENBQThDLE1BQU0sSUFBSSxnQkFBZ0IsSUFBSSxTQUFTLGlGQUFpRixRQUFRLHVCQUF1QixrQ0FBa0MsTUFBTSxrSUFBa0ksT0FBTywrQkFBK0IsR0FBRyxjQUFjLGdCQUFnQix3QkFBd0IsWUFBWSxjQUFjLG9CQUFvQixrQkFBa0IseUNBQXlDLEVBQUUsa05BQWtOLGNBQWMsaUZBQWlGLFNBQVMsY0FBYyx5QkFBeUIsOERBQThELGdCQUFnQixpQ0FBaUMsMkRBQTJELDhCQUE4QixtQkFBbUIsR0FBRyxHQUFHLGlCQUFpQixjQUFjLGdCQUFnQiwrQ0FBK0MsY0FBYyxnQkFBZ0IsZ0JBQWdCLDRCQUE0Qiw0REFBNEQsbUJBQW1CLG1EQUFtRCxLQUFLLGlGQUFpRixlQUFlLDBCQUEwQixxQkFBcUIsOENBQThDLDRCQUE0QixZQUFZLHFCQUFxQixNQUFNLG04QkFBbThCLDZCQUE2Qiw2RUFBNkUsV0FBVyxtQkFBbUIsZ0JBQWdCLFdBQVcsZ0JBQWdCLEtBQUssc0JBQXNCLFNBQVMscUNBQXFDLG1EQUFtRCx5QkFBeUIsNEVBQTRFLHlDQUF5Qyw0QkFBNEIsSUFBSSxjQUFjLFlBQVksYUFBYSw0SkFBNEosK0hBQStILFVBQVUsNEJBQTRCLElBQUksS0FBSyxXQUFXLDRDQUE0Qyw2RUFBNkUsNkNBQTZDLGtGQUFrRixvQ0FBb0MsTUFBTSxrQkFBa0IsT0FBTyxRQUFRLGFBQWEsb0NBQW9DLFdBQVcsbUJBQW1CLDZDQUE2QyxtQkFBbUIsUUFBUSxtQkFBbUIsU0FBUyx1QkFBdUIsb0NBQW9DLDBCQUEwQiw2QkFBNkIsV0FBVyxzQkFBc0IsOEJBQThCLElBQUksdUJBQXVCLCtCQUErQixPQUFPLE9BQU8sdURBQXVELFFBQVEsZ0xBQWdMLHl1QkFBeXVCLGVBQWUsaUJBQWlCLG1CQUFtQixjQUFjLElBQUksaUJBQWlCLGVBQWUsd0NBQXdDLFVBQVUsbUJBQW1CLGlEQUFpRCxxQkFBcUIsMkJBQTJCLEtBQUssb0RBQW9ELEtBQUssbURBQW1ELDZCQUE2QixnSUFBZ0ksdUlBQXVJLDJEQUEyRCw0SUFBNEksZ0RBQWdELDJIQUEySCx1REFBdUQsY0FBYyxxQkFBcUIsd0JBQXdCLG1CQUFtQixlQUFlLGtCQUFrQiwrQkFBK0IsUUFBUSxTQUFTLEdBQUcsaUJBQWlCLDRCQUE0QixXQUFXLDZCQUE2Qiw4QkFBOEIsOENBQThDLFdBQVcsbUJBQW1CLFVBQVUsRUFBRSxPQUFPLFlBQVksU0FBUyxnREFBZ0QsYUFBYSxTQUFTLGVBQWUsOENBQThDLDZEQUE2RCxTQUFTLCtEQUErRCxTQUFTLDhEQUE4RCxRQUFRLE1BQU0sRUFBRSw2QkFBNkIsd0NBQXdDLDRDQUE0QyxpQkFBaUIsdUJBQXVCLG9FQUFvRSxnVEFBZ1QsaUJBQWlCLDBFQUEwRSxlQUFlLG1CQUFtQiwrQ0FBK0MsU0FBUyxlQUFlLFlBQVksNkVBQTZFLFNBQVMsZUFBZSxxREFBcUQsbUJBQW1CLHdCQUF3QixnQkFBZ0Isd0RBQXdELGdCQUFnQixpQ0FBaUMsZUFBZSxzQkFBc0IsMkJBQTJCLHFCQUFxQix5RUFBeUUsMENBQTBDLCtCQUErQixnQkFBZ0IsSUFBSSxtQkFBbUIscUJBQXFCLHdDQUF3QyxtQ0FBbUMsbUJBQW1CLEtBQUsscUJBQXFCLFFBQVEsMENBQTBDLDZCQUE2QiwwQ0FBMEMsMEVBQTBFLG9CQUFvQixxRkFBcUYsYUFBYSxNQUFNLHNCQUFzQixhQUFhLGlEQUFpRCx5QkFBeUIsMEJBQTBCLEtBQUssV0FBVyxtQkFBbUIsNEVBQTRFLHFDQUFxQyxJQUFJLGdGQUFnRixTQUFTLGNBQWMsMEJBQTBCLGlGQUFpRiw4QkFBOEIsK0JBQStCLEVBQUUsS0FBSyxtQkFBbUIsb0RBQW9ELEdBQUcscUJBQXFCLHdEQUF3RCwrQkFBK0IsS0FBSyxzRUFBc0UsRUFBRSxxQkFBcUIsNENBQTRDLHFDQUFxQyxxQkFBcUIsd0JBQXdCLGdCQUFnQiwyQkFBMkIsYUFBYSxlQUFlLHFIQUFxSCxlQUFlLGtCQUFrQixhQUFhLGdIQUFnSCxXQUFXLEdBQUcsUUFBUSxpQkFBaUIsaUJBQWlCLHVCQUF1Qiw0Q0FBNEMsT0FBTyx1QkFBdUIsaUJBQWlCLCtCQUErQix1QkFBdUIsaUJBQWlCLCtCQUErQiw2QkFBNkIscUJBQXFCLG1CQUFtQixvQkFBb0IsbUJBQW1CLDBCQUEwQiw4QkFBOEIsNEJBQTRCLElBQUksZUFBZSxzQ0FBc0MsZUFBZSxxQ0FBcUMsZUFBZSxvQ0FBb0MsS0FBSyxrTUFBa00sS0FBSyxtR0FBbUcsZUFBZSxzQ0FBc0MscUJBQXFCLDZDQUE2QyxxQkFBcUIsZ0RBQWdELGVBQWUsV0FBVyxrQkFBa0IsaUNBQWlDLE9BQU8sR0FBRyxrREFBa0QsZUFBZSxTQUFTLGtCQUFrQix1QkFBdUIsS0FBSyxrQkFBa0Isa0JBQWtCLFFBQVEsaUJBQWlCLFNBQVMsY0FBYyxhQUFhLG1CQUFtQixtQkFBbUIscUJBQXFCLE1BQU0sa0dBQWtHLHFCQUFxQiwyQ0FBMkMsZUFBZSwrQkFBK0Isa0JBQWtCLFlBQVksTUFBTSxtQkFBbUIsbUJBQW1CLGtCQUFrQixLQUFLLG9CQUFvQix5SEFBeUgsYUFBYSxNQUFNLDJEQUEyRCxhQUFhLE1BQU0sOEZBQThGLGdCQUFnQixvRUFBb0UsZ0JBQWdCLHVCQUF1QixtQ0FBbUMsTUFBTSxzTEFBc0wsZUFBZSx5QkFBeUIscUNBQXFDLDBCQUEwQixNQUFNLGtFQUFrRSxrQ0FBa0MsTUFBTSxrRUFBa0UsU0FBUyx5QkFBeUIscUVBQXFFLHdGQUF3RixJQUFJLGlCQUFpQiw4QkFBOEIsZUFBZSx5QkFBeUIsWUFBWSxJQUFJLDRCQUE0QixTQUFTLG1CQUFtQixhQUFhLEtBQUssb1JBQW9SLGdCQUFnQixxQkFBcUIsb0ZBQW9GLGdEQUFnRCw4QkFBOEIsNkZBQTZGLGdCQUFnQiwrQ0FBK0Msa0JBQWtCLDZIQUE2SCxlQUFlLE9BQU8sa0VBQWtFLGdCQUFnQixPQUFPLDBGQUEwRixlQUFlLE9BQU8sNENBQTRDLGdCQUFnQixPQUFPLHVDQUF1QyxLQUFLLHlJQUF5SSxrQkFBa0IsTUFBTSxnREFBZ0QsS0FBSyxPQUFPLDRCQUE0QixNQUFNLG1QQUFtUCxpQkFBaUIsY0FBYyxpQkFBaUIsY0FBYyxpR0FBaUcsVUFBVSxlQUFlLHlFQUF5RSxlQUFlLG9DQUFvQyxpQkFBaUIsMEJBQTBCLHFCQUFxQix3QkFBd0IsdUJBQXVCLDhCQUE4QixvRUFBb0Usc0lBQXNJLGNBQWMsK09BQStPLE9BQU8sdUVBQXVFLGtCQUFrQiw2RUFBNkUsMENBQTBDLGlCQUFpQixNQUFNLDZGQUE2Riw4RkFBOEYsZ0JBQWdCLCtHQUErRyxtSUFBbUksOEJBQThCLGdDQUFnQyx5Q0FBeUMsZ0JBQWdCLHFIQUFxSCxJQUFJLDRjQUE0YyxLQUFLLFVBQVUscUJBQXFCLE1BQU0sNkRBQTZELHVCQUF1QixNQUFNLCtEQUErRCxHQUFHLFlBQVksTUFBTSxtRkFBbUYsb0JBQW9CLDRCQUE0QixNQUFNLDZCQUE2Qix5QkFBeUIsbUJBQW1CLGNBQWMsOENBQThDLG1DQUFtQyxHQUFHLGlCQUFpQiw2QkFBNkIsaUJBQWlCLG1CQUFtQixvQkFBb0Isa0JBQWtCLGFBQWEsc0JBQXNCLG1DQUFtQyxXQUFXLDJDQUEyQyw4QkFBOEIsb0NBQW9DLGdDQUFnQywyQ0FBMkMsaUJBQWlCLElBQUksS0FBSyw0QkFBNEIsYUFBYSxnQ0FBZ0MsaUNBQWlDLDhCQUE4Qiw0QkFBNEIsR0FBRyxpQkFBaUIsY0FBYyxhQUFhLGtNQUFrTSxnREFBZ0QsK0NBQStDLCtSQUErUix1Q0FBdUMsNkNBQTZDLGdDQUFnQyxvR0FBb0csMkdBQTJHLHdDQUF3QyxxQ0FBcUMsdUNBQXVDLCtCQUErQix5Q0FBeUMsbURBQW1ELGdDQUFnQyxxQkFBcUIsK0JBQStCLDhHQUE4Ryw0QkFBNEIsb0JBQW9CLG9DQUFvQyxpQkFBaUIsb0NBQW9DLGtIQUFrSCwrQkFBK0IsV0FBVyw0Q0FBNEMsc0NBQXNDLG9CQUFvQiwwQkFBMEIsR0FBRyw2QkFBNkIsK0RBQStELG9DQUFvQywyQkFBMkIsdUNBQXVDLHdCQUF3QixnQ0FBZ0MsMEVBQTBFLEdBQUcsR0FBRyxlQUFlLGlCQUFpQixtQkFBbUIsbUJBQW1CLGtCQUFrQixrREFBa0QsaUJBQWlCLGlCQUFpQixtQkFBbUIsVUFBVSxpQkFBaUIsc0JBQXNCLDBFQUEwRSxtQkFBbUIsdURBQXVELGlCQUFpQixnREFBZ0Qsa0NBQWtDLEdBQUcsYUFBYSxpREFBaUQsdUNBQXVDLHdCQUF3QixpQkFBaUIsK0RBQStELHdCQUF3Qiw0RUFBNEUsUUFBUSxHQUFHLEdBQUcsbUJBQW1CLG1EQUFtRCxxQkFBcUIsY0FBYyxpQkFBaUIsSUFBSSxLQUFLLHlCQUF5QixzVUFBc1UsaUJBQWlCLHFDQUFxQyxtQkFBbUIsYUFBYSx5R0FBeUcsU0FBUyxtQkFBbUIsTUFBTSxvQkFBb0IsNkNBQTZDLHlCQUF5QixpQkFBaUIsR0FBRyxpQkFBaUIsdUNBQXVDLEtBQUssNkNBQTZDLFlBQVksMEJBQTBCLG9DQUFvQyxHQUFHLG1CQUFtQixNQUFNLGlCQUFpQixFQUFFLDhCQUE4QixzREFBc0QsR0FBRywrQ0FBK0MsbUJBQW1CLGlCQUFpQixZQUFZLHlCQUF5Qix3RUFBd0Usa0JBQWtCLGdGQUFnRiw2QkFBNkIsc0RBQXNELDREQUE0RCw2QkFBNkIsYUFBYSxnQ0FBZ0MscUVBQXFFLHNDQUFzQyxLQUFLLGFBQWEsb0JBQW9CLG9DQUFvQyxJQUFJLGtCQUFrQixnQkFBZ0IsWUFBWSx5QkFBeUIsVUFBVSxNQUFNLGlFQUFpRSxtQkFBbUIscUNBQXFDLG1CQUFtQixxQkFBcUIsZ05BQWdOLFNBQVMsK0VBQStFLGdCQUFnQiwyQkFBMkIsa0NBQWtDLDJCQUEyQixRQUFRLEtBQUssV0FBVyx1Q0FBdUMsV0FBVyxHQUFHLGlCQUFpQiw2QkFBNkIsaUJBQWlCLDBFQUEwRSxpQkFBaUIsd0hBQXdILGVBQWUsMkJBQTJCLDJCQUEyQixrQkFBa0Isd0JBQXdCLFFBQVEsMEJBQTBCLGtDQUFrQyxnREFBZ0Qsb0JBQW9CLG1CQUFtQixzQ0FBc0MsOEJBQThCLGlCQUFpQixLQUFLLFlBQVksNkdBQTZHLHNCQUFzQixhQUFhLE1BQU0sYUFBYSxtRUFBbUUscUNBQXFDLFVBQVUsVUFBVSxnQkFBZ0Isc0RBQXNELG9CQUFvQixxQkFBcUIsdUZBQXVGLGNBQWMsNEJBQTRCLHVFQUF1RSx3RkFBd0Ysb0JBQW9CLGdEQUFnRCx5RkFBeUYsRUFBRSxhQUFhLEVBQUUsMENBQTBDLDZCQUE2QixxQkFBcUIseUNBQXlDLGdCQUFnQixrQkFBa0Isc0pBQXNKLDJFQUEyRSxnSEFBZ0gsT0FBTyxnQ0FBZ0MsT0FBTyxLQUFLLE1BQU0sS0FBSyxLQUFLLFNBQVMsa0JBQWtCLFlBQVksU0FBUyx1QkFBdUIseUJBQXlCLHFCQUFxQixXQUFXLFlBQVksRUFBRSx3QkFBd0IsMEZBQTBGLE9BQU8sdUJBQXVCLHFCQUFxQiw0Q0FBNEMsTUFBTSw2R0FBNkcsTUFBTSx1RUFBdUUsMkJBQTJCLGdDQUFnQyxPQUFPLHFCQUFxQixXQUFXLG9DQUFvQyxzQkFBc0IsT0FBTyx3QkFBd0IsbUZBQW1GLHdCQUF3QixpRkFBaUYsMERBQTBELEVBQUUseUJBQXlCLE9BQU8sR0FBRyxlQUFlLGtCQUFrQiwyQkFBMkIsdUJBQXVCLDRGQUE0Riw2QkFBNkIseUNBQXlDLHFGQUFxRixRQUFRLEtBQUssU0FBUywyQ0FBMkMsdUNBQXVDLEtBQUssWUFBWSxHQUFHLHdDQUF3QyxvRkFBb0Ysc0NBQXNDLGdKQUFnSixvQ0FBb0MsUUFBUSx1RkFBdUYsa0NBQWtDLCtCQUErQiwwQ0FBMEMsK0VBQStFLHNDQUFzQyxLQUFLLFlBQVksR0FBRyx1QkFBdUIscU1BQXFNLDhDQUE4QyxnQkFBZ0IsNEJBQTRCLG1GQUFtRixHQUFHLEdBQUcsaUJBQWlCLFVBQVUsaUJBQWlCLEdBQUcsaUJBQWlCLE9BQU8scUJBQXFCLGlCQUFpQixjQUFjLE9BQU8sZ0VBQWdFLGVBQWUsWUFBWSxlQUFlLHFCQUFxQixpQkFBaUIscUJBQXFCLFNBQVMsb0NBQW9DLGdEQUFnRCxLQUFLLGFBQWEsU0FBUyxvQ0FBb0MsZ0JBQWdCLFNBQVMsT0FBTyw2QkFBNkIsK0NBQStDLGVBQWUsU0FBUyxlQUFlLFlBQVksT0FBTyxHQUFHLHVCQUF1QixJQUFJLHFCQUFxQixRQUFRLDRDQUE0QyxjQUFjLE9BQU8sZUFBZSxvQkFBb0IsTUFBTSxlQUFlLHNCQUFzQixtQkFBbUIsK0RBQStELGVBQWUsbUJBQW1CLHFCQUFxQixtTkFBbU4scUJBQXFCLDREQUE0RCxlQUFlLDhCQUE4QixtQkFBbUIsb0NBQW9DLG1CQUFtQixvQkFBb0Isa0hBQWtILG1CQUFtQixPQUFPLDJFQUEyRSxpQkFBaUIsa0NBQWtDLHFFQUFxRSx5QkFBeUIsbUJBQW1CLE9BQU8seUJBQXlCLGlCQUFpQixNQUFNLDJEQUEyRCxpQkFBaUIsd0JBQXdCLDBDQUEwQyxtQkFBbUIsU0FBUyxRQUFRLE9BQU8sUUFBUSxFQUFFLE9BQU8sdUNBQXVDLCtCQUErQixxQkFBcUIsd0JBQXdCLGVBQWUsd0RBQXdELGlCQUFpQixtQkFBbUIsZUFBZSxxQ0FBcUMsZUFBZSw4QkFBOEIsMkJBQTJCLHFIQUFxSCxlQUFlLHFCQUFxQixNQUFNLDJGQUEyRixrQ0FBa0MsSUFBSSxlQUFlLHNIQUFzSCxpQkFBaUIsT0FBTyxpQ0FBaUMsaUJBQWlCLE9BQU8sNkJBQTZCLGVBQWUsdUNBQXVDLGFBQWEsaUJBQWlCLHdCQUF3QixtQkFBbUIsaUJBQWlCLHVCQUF1Qiw2Q0FBNkMsdUJBQXVCLG9GQUFvRixpQkFBaUIsZ0JBQWdCLG9GQUFvRixxQkFBcUIseUNBQXlDLHdCQUF3QixtREFBbUQsMEJBQTBCLDREQUE0RCxtQkFBbUIsa0NBQWtDLHVCQUF1QixzREFBc0QsbUJBQW1CLHlDQUF5QyxxQkFBcUIsdURBQXVELDZCQUE2QixnREFBZ0QsMkJBQTJCLGlCQUFpQiwwQkFBMEIsZUFBZSxtQkFBbUIsNkJBQTZCLGVBQWUsNEJBQTRCLHFCQUFxQixjQUFjLFlBQVksa0NBQWtDLGlCQUFpQixlQUFlLGVBQWUsd0JBQXdCLFdBQVcsY0FBYyx1QkFBdUIsS0FBSyxtREFBbUQsc0JBQXNCLFdBQVcsOEJBQThCLGNBQWMsc0JBQXNCLGdGQUFnRixHQUFHLFlBQVksSUFBSSxhQUFhLGNBQWMsb0RBQW9ELFVBQVUsb0JBQW9CLCtIQUErSCx1Q0FBdUMsMEJBQTBCLHVGQUF1RiwwQkFBMEIsMkJBQTJCLE1BQU0sZUFBZSxrQkFBa0Isc0JBQXNCLFVBQVUsa0ZBQWtGLHdDQUF3Qyx1QkFBdUIsd0NBQXdDLHdDQUF3QyxzRkFBc0YsdUVBQXVFLHVCQUF1QiwwQkFBMEIsR0FBRyxpQkFBaUIsa0NBQWtDLGlCQUFpQix1QkFBdUIsNEJBQTRCLDRCQUE0QixpQkFBaUIsNExBQTRMLGlDQUFpQyxnQkFBZ0IsT0FBTyxrQ0FBa0MsZ0RBQWdELDhCQUE4Qiw4QkFBOEIsR0FBRyxpQkFBaUIsMkZBQTJGLGlCQUFpQixrQ0FBa0MsR0FBRyxHQUFHLHVCQUF1QixpREFBaUQscVJBQXFSLHNCQUFzQixnRUFBZ0Usd0JBQXdCLGVBQWUsd0VBQXdFLG1CQUFtQixXQUFXLHdEQUF3RCx3SEFBd0gsdUhBQXVILDRCQUE0QixvQkFBb0IsRUFBRSxxQkFBcUIsRUFBRSwrQ0FBK0Msa0hBQWtILDBFQUEwRSwwQ0FBMEMsT0FBTyw2QkFBNkIsZ0NBQWdDLGtDQUFrQywrQ0FBK0MsbUVBQW1FLHlEQUF5RCxTQUFTLGlGQUFpRix5QkFBeUIsR0FBRyxpREFBaUQsaUZBQWlGLDJKQUEySixvQkFBb0IsT0FBTyw2QkFBNkIsd0JBQXdCLE1BQU0sb0JBQW9CLGdCQUFnQixPQUFPLCtDQUErQyxLQUFLLDRDQUE0QyxTQUFTLG1DQUFtQyxRQUFRLHVXQUF1VyxnQ0FBZ0MsVUFBVSxxRUFBcUUsc0JBQXNCLHdCQUF3QixpQkFBaUIsdUZBQXVGLHNDQUFzQyxXQUFXLHVCQUF1QiwwQ0FBMEMsOEJBQThCLHVDQUF1QywwRkFBMEYsZ0NBQWdDLGdCQUFnQix3Q0FBd0MsbUpBQW1KLGlEQUFpRCxpQ0FBaUMsU0FBUyw4RkFBOEYsVUFBVSxtREFBbUQsbUhBQW1ILFlBQVkscUJBQXFCLCtFQUErRSxvREFBb0Qsa0NBQWtDLDJUQUEyVCx1QkFBdUIsNEZBQTRGLElBQUksNENBQTRDLG1FQUFtRSx5RkFBeUYscUNBQXFDLG9DQUFvQyx1Q0FBdUMsdUNBQXVDLFlBQVksd0NBQXdDLHFHQUFxRyxtQkFBbUIsZ0NBQWdDLDhKQUE4Six5REFBeUQsT0FBTyx3RkFBd0Ysa0RBQWtELCtDQUErQyxNQUFNLHFDQUFxQyxnQkFBZ0IsMkJBQTJCLE1BQU0sNkNBQTZDLElBQUksc0JBQXNCLE1BQU0sK0JBQStCLHFEQUFxRCxpREFBaUQsNkdBQTZHLE9BQU8sMkdBQTJHLEdBQUcsdUNBQXVDLFFBQVEsa0VBQWtFLEdBQUcsbUNBQW1DLFdBQVcsZ0JBQWdCLDhCQUE4QixpREFBaUQsR0FBRyxtREFBbUQsaUNBQWlDLE1BQU0sY0FBYyxzQ0FBc0MsbUNBQW1DLGlDQUFpQyw4Q0FBOEMsa0JBQWtCLE9BQU8sU0FBUyxnQkFBZ0IsZ0JBQWdCLDJMQUEyTCxzQ0FBc0MsZ0JBQWdCLGlCQUFpQixzQkFBc0IsMkNBQTJDLE9BQU8sZUFBZSxnRkFBZ0YsZ0RBQWdELEdBQUcscUJBQXFCLDJDQUEyQyxXQUFXLG9DQUFvQywwQkFBMEIsY0FBYyw4QkFBOEIsMEJBQTBCLEdBQUcsaUJBQWlCLDJCQUEyQixpQkFBaUIsOEJBQThCLDRCQUE0QixHQUFHLGlCQUFpQiwyQkFBMkIsV0FBVyxHQUFHLCtCQUErQiwyREFBMkQsd0NBQXdDLCtCQUErQixvQ0FBb0MsZUFBZSxrQ0FBa0MseUNBQXlDLHNCQUFzQix5QkFBeUIsaUJBQWlCLGFBQWEsdURBQXVELEdBQUcsR0FBRyxtQkFBbUIsd0NBQXdDLGNBQWMsb0JBQW9CLHdKQUF3Six3REFBd0QsMkJBQTJCLHdCQUF3Qiw4Q0FBOEMscUNBQXFDLHNCQUFzQixxQkFBcUIsRUFBRSxpQkFBaUIsa0NBQWtDLEdBQUcsd0JBQXdCLDRGQUE0RixlQUFlLGdCQUFnQixFQUFFLEdBQUcsbUNBQW1DLEtBQUsscUJBQXFCLDJCQUEyQix5QkFBeUIsK0JBQStCLGtCQUFrQixNQUFNLElBQUksZUFBZSxpREFBaUQsYUFBYSw2RUFBNkUsV0FBVywyRUFBMkUsMENBQTBDLDhEQUE4RCxtQkFBbUIsc0pBQXNKLDJCQUEyQixpQkFBaUIsZ0JBQWdCLG9CQUFvQixrQkFBa0IscUJBQXFCLE1BQU0scURBQXFELHVDQUF1QyxpQkFBaUIsMkJBQTJCLG1CQUFtQix3QkFBd0IsZUFBZSx1QkFBdUIsMEJBQTBCLGdCQUFnQixxQ0FBcUMsS0FBSyxxQ0FBcUMsTUFBTSwwR0FBMEcsaUhBQWlILHNCQUFzQiwwREFBMEQsZ0NBQWdDLG9CQUFvQixJQUFJLHlCQUF5Qix1QkFBdUIsaUdBQWlHLG9CQUFvQixvQkFBb0IsMEVBQTBFLFdBQVcsTUFBTSxRQUFRLDJCQUEyQixXQUFXLGFBQWEsR0FBRyxXQUFXLGdCQUFnQixhQUFhLDhDQUE4QyxzQkFBc0IsR0FBRyxZQUFZLElBQUksYUFBYSwyQkFBMkIsR0FBRyxZQUFZLElBQUksYUFBYSxnQkFBZ0IsVUFBVSxzQkFBc0Isa0JBQWtCLGdEQUFnRCxpQkFBaUIsRUFBRSwyUEFBMlAsdURBQXVELCtCQUErQix3Q0FBd0MseUNBQXlDLE1BQU0sb0RBQW9ELDJLQUEySyxzQkFBc0Isb0NBQW9DLDhFQUE4RSxRQUFRLG1CQUFtQix3QkFBd0Isb0JBQW9CLHNHQUFzRyxLQUFLLGFBQWEscUtBQXFLLEdBQUcsc0RBQXNELDhEQUE4RCxJQUFJLEdBQUcsaUVBQWlFLHNDQUFzQyx3SUFBd0ksd0JBQXdCLE9BQU8sNkNBQTZDLFdBQVcsd0NBQXdDLFFBQVEsMEVBQTBFLEdBQUcsMkNBQTJDLDhCQUE4QixpQ0FBaUMsZ0VBQWdFLHVGQUF1Riw2RkFBNkYscUNBQXFDLGlCQUFpQixrQkFBa0IsbUJBQW1CLHNEQUFzRCxzREFBc0QsSUFBSSxvQkFBb0IscUNBQXFDLGlDQUFpQyxrQ0FBa0Msc0NBQXNDLGdHQUFnRyxxQ0FBcUMsUUFBUSw4REFBOEQsK0JBQStCLFlBQVksR0FBRyxrQkFBa0IsYUFBYSxlQUFlLDhCQUE4QixpQkFBaUIsb0NBQW9DLFFBQVEsOEJBQThCLEtBQUssd0JBQXdCLCtCQUErQixjQUFjLGNBQWMsT0FBTyxnQkFBZ0IsZ0JBQWdCLG1CQUFtQixpREFBaUQsa0JBQWtCLDBDQUEwQyxjQUFjLGtGQUFrRiwwQkFBMEIsR0FBRyxpQkFBaUIsY0FBYyxpQkFBaUIsdUJBQXVCLDRCQUE0QixnQkFBZ0IsaUJBQWlCLHVCQUF1QixxQ0FBcUMsR0FBRyxpQkFBaUIsNkNBQTZDLGlCQUFpQixpQ0FBaUMscUJBQXFCLGFBQWEsR0FBRyxVQUFVLGVBQWUsc0NBQXNDLHNEQUFzRCxlQUFlLHNCQUFzQixtQkFBbUIsYUFBYSwrQ0FBK0MsaUVBQWlFLHVFQUF1RSxrRUFBa0Usc0NBQXNDLEdBQUcsZ0RBQWdELGtEQUFrRCxrREFBa0QsMkNBQTJDLDRCQUE0QixpQkFBaUIsK0JBQStCLFlBQVksR0FBRywwQkFBMEIsMEJBQTBCLDBDQUEwQywrQ0FBK0MsSUFBSSxnQ0FBZ0MsR0FBRyw2QkFBNkIseUJBQXlCLHVDQUF1QyxJQUFJLGVBQWUsS0FBSyxjQUFjLE9BQU8sc0JBQXNCLEdBQUcsWUFBWSxJQUFJLGFBQWEsa0JBQWtCLEdBQUcsWUFBWSxJQUFJLGFBQWEsWUFBWSxRQUFRLCtDQUErQyxZQUFZLG1CQUFtQixrRkFBa0YsTUFBTSx1Q0FBdUMsNkVBQTZFLDJEQUEyRCxlQUFlLG1CQUFtQixnREFBZ0QsaUNBQWlDLFFBQVEseU1BQXlNLGFBQWEsaUNBQWlDLG1DQUFtQyxvQ0FBb0MsZ0NBQWdDLG9DQUFvQyxpQ0FBaUMsOEVBQThFLEdBQUcsa0JBQWtCLGdSQUFnUixxQkFBcUIsa0ZBQWtGLGlCQUFpQixFQUFFLDhEQUE4RCx5QkFBeUIsY0FBYyxPQUFPLElBQUksNkJBQTZCLDhCQUE4QixpQkFBaUIsR0FBRyxpQ0FBaUMsK0JBQStCLE1BQU0sdUNBQXVDLG9CQUFvQixrQkFBa0IsS0FBSyxnQ0FBZ0MsMEJBQTBCLGdCQUFnQiw4QkFBOEIsaUJBQWlCLG1CQUFtQixzQkFBc0IsMERBQTBELEtBQUssTUFBTSxxREFBcUQsR0FBRyxZQUFZLElBQUksYUFBYSxjQUFjLEdBQUcsWUFBWSxJQUFJLGNBQWMsNkNBQTZDLGdCQUFnQixJQUFJLGFBQWEseUhBQXlILGFBQWEsUUFBUSxvQkFBb0IsNkJBQTZCLFNBQVMsaUJBQWlCLGFBQWEsa0JBQWtCLGFBQWEseUJBQXlCLFdBQVcsZ0JBQWdCLFdBQVcscUNBQXFDLDJDQUEyQyxpV0FBaVcsa0JBQWtCLG1CQUFtQix3R0FBd0csb0JBQW9CLHNIQUFzSCxXQUFXLGdJQUFnSSw2QkFBNkIsa0NBQWtDLDBFQUEwRSxvQ0FBb0MsOEJBQThCLDhEQUE4RCxrQ0FBa0Msb0RBQW9ELDhFQUE4RSwrREFBK0Qsd0JBQXdCLGtCQUFrQix3QkFBd0IsU0FBUyw0QkFBNEIsWUFBWSw4QkFBOEIsY0FBYyw0QkFBNEIsU0FBUywyQkFBMkIsb0RBQW9ELG9DQUFvQyxxQ0FBcUMsd0JBQXdCLHNFQUFzRSw4QkFBOEIsNkNBQTZDLHlDQUF5QyxvQkFBb0IsUUFBUSxHQUFHLE1BQU0seUJBQXlCLE1BQU0sZ0ZBQWdGLHNCQUFzQixnQkFBZ0Isd0JBQXdCLGVBQWUsMkRBQTJELDBCQUEwQixvQkFBb0IsdUJBQXVCLE1BQU0sOENBQThDLDZCQUE2QixPQUFPLDJCQUEyQixNQUFNLGFBQWEsK0JBQStCLGFBQWEsS0FBSyxpQkFBaUIsYUFBYSwyQkFBMkIsMEJBQTBCLG1DQUFtQywrQ0FBK0MsTUFBTSxnQkFBZ0Isa0JBQWtCLHlCQUF5QixrQ0FBa0MsZ0NBQWdDLG9CQUFvQix5QkFBeUIsc0VBQXNFLCtDQUErQyxTQUFTLFdBQVcscUJBQXFCLFNBQVMsd0JBQXdCLE1BQU0scURBQXFELGlDQUFpQyxvQkFBb0IsK0JBQStCLG9FQUFvRSxPQUFPLGlEQUFpRCxtREFBbUQsWUFBWSxLQUFLLEtBQUssS0FBSyxtQkFBbUIseUJBQXlCLFNBQVMsbUNBQW1DLG1DQUFtQyxpQ0FBaUMsb0JBQW9CLG1DQUFtQyw0Q0FBNEMsMkJBQTJCLFNBQVMsMkJBQTJCLElBQUksOEJBQThCLCtDQUErQyxzQ0FBc0MsbUJBQW1CLGtHQUFrRyxvRUFBb0UscUNBQXFDLGlDQUFpQyxnQ0FBZ0MsZ0JBQWdCLG9EQUFvRCxHQUFHLGdDQUFnQyxtQkFBbUIsYUFBYSxvQkFBb0IsMkNBQTJDLGNBQWMsZ0JBQWdCLElBQUksMkNBQTJDLE1BQU0sMkRBQTJELEdBQUcsWUFBWSxJQUFJLGFBQWEsOEhBQThILHNDQUFzQyx5QkFBeUIsK0hBQStILHdCQUF3QiwyQkFBMkIsaUNBQWlDLEdBQUcsK0JBQStCLGFBQWEsOEJBQThCLE1BQU0sOERBQThELGdCQUFnQixrREFBa0QsR0FBRyxnQ0FBZ0MsaUVBQWlFLDJCQUEyQixnQkFBZ0IsNkJBQTZCLGNBQWMsbUNBQW1DLDBCQUEwQiwyREFBMkQsbUJBQW1CLDBFQUEwRSxnREFBZ0QsZUFBZSxNQUFNLFFBQVEsVUFBVSxZQUFZLElBQUksZ0hBQWdILG9CQUFvQiw4REFBOEQsY0FBYyxnRUFBZ0UsdUNBQXVDLHNEQUFzRCxnQ0FBZ0MsZUFBZSwrQkFBK0IsS0FBSyxLQUFLLGdCQUFnQiwyQkFBMkIsSUFBSSxPQUFPLElBQUksU0FBUyxxQ0FBcUMsOEJBQThCLHVDQUF1QywwRkFBMEYseUJBQXlCLGVBQWUsNkJBQTZCLGlDQUFpQyx3Q0FBd0MscUJBQXFCLHVKQUF1SixNQUFNLHlGQUF5RixJQUFJLG1DQUFtQyxFQUFFLFdBQVcsZUFBZSw2QkFBNkIsZUFBZSwyQkFBMkIscUpBQXFKLGlCQUFpQixrQkFBa0IscUJBQXFCLGdCQUFnQiwrQkFBK0IsYUFBYSw4RkFBOEYsV0FBVyxHQUFHLHFCQUFxQixvQ0FBb0Msa0JBQWtCLHFCQUFxQixrQkFBa0IsMkJBQTJCLG9DQUFvQyx1QkFBdUIsa0NBQWtDLHVCQUF1QixvREFBb0QsaUJBQWlCLE9BQU8sa0JBQWtCLFVBQVUsbUJBQW1CLG9CQUFvQixVQUFVLG1CQUFtQixtQkFBbUIsWUFBWSxxQkFBcUIsb0JBQW9CLGFBQWEscUJBQXFCLHNCQUFzQixrQkFBa0IsbUNBQW1DLHFCQUFxQixtQkFBbUIsbUNBQW1DLHdCQUF3QixxQkFBcUIsbUJBQW1CLCtCQUErQixzQkFBc0IsaUJBQWlCLG1CQUFtQixpQkFBaUIsbUJBQW1CLElBQUksK0NBQStDLDBCQUEwQixvQkFBb0Isa0JBQWtCLDRCQUE0Qiw4Q0FBOEMsSUFBSSxzTEFBc0wsYUFBYSwwQkFBMEIsY0FBYyxvSUFBb0ksa0pBQWtKLFNBQVMsK0JBQStCLG9CQUFvQixtRUFBbUUsOEJBQThCLDJEQUEyRCxhQUFhLHNCQUFzQixvRkFBb0YsMkVBQTJFLDBFQUEwRSw2QkFBNkIsOEJBQThCLG9CQUFvQixpQ0FBaUMsS0FBSyxRQUFRLHdDQUF3QyxrQ0FBa0MscUJBQXFCLG1CQUFtQiwwQkFBMEIsT0FBTywwQkFBMEIsV0FBVywwQkFBMEIsUUFBUSxtREFBbUQsU0FBUyxZQUFZLHVCQUF1Qix5Q0FBeUMsNENBQTRDLGdDQUFnQywyQ0FBMkMsNkJBQTZCLE1BQU0sa0RBQWtELGtDQUFrQyxrQ0FBa0MsZ0NBQWdDLDBCQUEwQix3QkFBd0IsK0JBQStCLGdDQUFnQyxvQ0FBb0MsMENBQTBDLHVCQUF1Qix3QkFBd0Isd0NBQXdDLHdCQUF3QixtQkFBbUIsOEZBQThGLElBQUksK0NBQStDLFVBQVUsd0JBQXdCLHNCQUFzQix5Q0FBeUMsc0NBQXNDLDBCQUEwQixnQ0FBZ0MsaUNBQWlDLGNBQWMsVUFBVSxjQUFjLGFBQWEsTUFBTSxXQUFXLFVBQVUsY0FBYyx3REFBd0QsT0FBTywwQkFBMEIsUUFBUSw0Q0FBNEMsVUFBVSw2QkFBNkIsbUJBQW1CLDZCQUE2QixJQUFJLDhEQUE4RCwwRUFBMEUsZ0NBQWdDLDBEQUEwRCxXQUFXLHlDQUF5QyxNQUFNLDRCQUE0QixZQUFZLHFDQUFxQyxNQUFNLHVHQUF1Ryw4REFBOEQsZ0NBQWdDLDBEQUEwRCxXQUFXLG9CQUFvQixrQkFBa0IsOEJBQThCLFFBQVEsOEJBQThCLEVBQUUsa0RBQWtELHFDQUFxQyxxQkFBcUIsaUJBQWlCLGNBQWMsU0FBUyxjQUFjLG1CQUFtQiwySUFBMkksT0FBTywrREFBK0QsWUFBWSxTQUFTLHVCQUF1QixVQUFVLHFCQUFxQixzQkFBc0IsOEJBQThCLHNCQUFzQixnQkFBZ0IsNkJBQTZCLHlCQUF5QixtQkFBbUIsR0FBRywrQkFBK0IsNEJBQTRCLG1DQUFtQyxRQUFRLEtBQUssY0FBYyxlQUFlLGVBQWUsaUJBQWlCLG1CQUFtQixpQkFBaUIsRUFBRSxvQkFBb0IscUJBQXFCLGdCQUFnQixrQkFBa0IsY0FBYyxlQUFlLHVFQUF1RSxnQkFBZ0IsUUFBUSxLQUFLLGlCQUFpQixnQkFBZ0Isd0JBQXdCLFlBQVksc0JBQXNCLGlEQUFpRCxjQUFjLG1DQUFtQyw2REFBNkQsS0FBSyxpQ0FBaUMsd0NBQXdDLEdBQUcsT0FBTyxvQkFBb0IsOENBQThDLHNCQUFzQixjQUFjLG9CQUFvQixRQUFRLHNHQUFzRyxrQkFBa0IsZ0JBQWdCLGlCQUFpQixnQkFBZ0IsK0JBQStCLGtCQUFrQix5REFBeUQsYUFBYSxJQUFJLDBCQUEwQixtQkFBbUIseUNBQXlDLG1CQUFtQiwyR0FBMkcsNktBQTZLLFlBQVksS0FBSyxLQUFLLGtEQUFrRCx5RkFBeUYsK0JBQStCLGFBQWEsdUJBQXVCLHVDQUF1QyxvQkFBb0IsbUlBQW1JLFlBQVksZ0JBQWdCLHNDQUFzQyx3QkFBd0IsWUFBWSxNQUFNLDRCQUE0QixXQUFXLGlEQUFpRCxtQkFBbUIsbUJBQW1CLHlDQUF5QyxzRUFBc0UsaUJBQWlCLE1BQU0sb0RBQW9ELG1CQUFtQixhQUFhLDhDQUE4QywySUFBMkksUUFBUSx1QkFBdUIsMkJBQTJCLHdCQUF3QiwyQkFBMkIscUNBQXFDLHNCQUFzQixxQkFBcUIsb0JBQW9CLHlCQUF5QixJQUFJLGlFQUFpRSxtQkFBbUIsMkNBQTJDLDRCQUE0Qiw4Q0FBOEMsa0NBQWtDLDZDQUE2QyxXQUFXLDZDQUE2QyxzQkFBc0IsbUNBQW1DLHdIQUF3SCx1QkFBdUIsT0FBTyx3QkFBd0Isd0ZBQXdGLG9DQUFvQyxtQ0FBbUMsNEJBQTRCLDhEQUE4RCx5QkFBeUIsR0FBRyxxQ0FBcUMsaUNBQWlDLCtCQUErQixHQUFHLHdDQUF3Qyx5R0FBeUcsYUFBYSxpQkFBaUIsS0FBSyxXQUFXLEtBQUssb0JBQW9CLDhGQUE4RixNQUFNLHVEQUF1RCxvQkFBb0IsaURBQWlELDhEQUE4RCwwQkFBMEIsMkVBQTJFLGtDQUFrQywwRkFBMEYscUNBQXFDLHNFQUFzRSxvQ0FBb0MsdUJBQXVCLGtCQUFrQix5Q0FBeUMsdUJBQXVCLHFCQUFxQixrQ0FBa0Msc0NBQXNDLHlFQUF5RSxpQkFBaUIsZ0JBQWdCLGlCQUFpQixnQkFBZ0IsdUVBQXVFLG9CQUFvQixZQUFZLG9CQUFvQixjQUFjLDJCQUEyQixXQUFXLHFGQUFxRixxQkFBcUIsdUNBQXVDLDBCQUEwQixXQUFXLGdDQUFnQyxVQUFVLGVBQWUsSUFBSSxtQ0FBbUMsSUFBSSxNQUFNLFdBQVcsaURBQWlELGlIQUFpSCxtSEFBbUgsZ0ZBQWdGLHVCQUF1QixNQUFNLGtDQUFrQyx3Q0FBd0MsUUFBUSxrRUFBa0UsaUpBQWlKLE1BQU0sd0VBQXdFLE9BQU8sS0FBSywrQkFBK0IsbURBQW1ELHVCQUF1QixzREFBc0Qsc0JBQXNCLCtCQUErQixvQ0FBb0MsdUJBQXVCLHNCQUFzQixtQkFBbUIsY0FBYyxlQUFlLDJCQUEyQiw4QkFBOEIsWUFBWSwrQ0FBK0MsYUFBYSxlQUFlLG9CQUFvQixhQUFhLEdBQUcsNkJBQTZCLG1DQUFtQyx3QkFBd0IscUJBQXFCLE1BQU0sU0FBUyxpQkFBaUIsd0JBQXdCLDhCQUE4QixPQUFPLGlCQUFpQiwyQkFBMkIsbUJBQW1CLHlCQUF5Qix3QkFBd0IseUJBQXlCLHFCQUFxQixHQUFHLGtCQUFrQiw4QkFBOEIsV0FBVyxJQUFJLEdBQUcsZUFBZSxpQ0FBaUMsS0FBSyxzQkFBc0IsbUJBQW1CLGdDQUFnQyxrQkFBa0IsY0FBYyxpQkFBaUIsbUJBQW1CLHNCQUFzQix3R0FBd0csZUFBZSxLQUFLLGdCQUFnQixxQkFBcUIsdUNBQXVDLG9EQUFvRCx1QkFBdUIsWUFBWSxHQUFHLGlCQUFpQixvQkFBb0IsU0FBUyxHQUFHLHdCQUF3QixXQUFXLHVCQUF1QixJQUFJLG9CQUFvQixZQUFZLEdBQUcsY0FBYyxPQUFPLHlFQUF5RSxtQkFBbUIsa0JBQWtCLGlCQUFpQixpQkFBaUIsZ0VBQWdFLHVGQUF1RixhQUFhLGNBQWMsT0FBTyx1S0FBdUssYUFBYSxjQUFjLDJCQUEyQixzQkFBc0IsMkJBQTJCLGFBQWEscUJBQXFCLE1BQU0sU0FBUyw4QkFBOEIsZUFBZSxxQkFBcUIsR0FBRyxrQkFBa0IsZ0NBQWdDLFFBQVEsMEJBQTBCLEVBQUUsR0FBRyxpQkFBaUIsNkpBQTZKLGVBQWUsOERBQThELE1BQU0sR0FBRyxpQkFBaUIsdUJBQXVCLGFBQWEsNEJBQTRCLGdCQUFnQixHQUFHLElBQUksR0FBRyxrQkFBa0IsbUNBQW1DLDhCQUE4Qix5REFBeUQsY0FBYyxpQkFBaUIsU0FBUyxrQkFBa0IsYUFBYSwrQkFBK0IseUNBQXlDLFdBQVcsZ0RBQWdELHNDQUFzQyxpQ0FBaUMsNENBQTRDLDRCQUE0QixHQUFHLDJDQUEyQywrREFBK0Qsc0JBQXNCLFdBQVcsR0FBRyxpQkFBaUIsY0FBYyxlQUFlLFNBQVMsUUFBUSxrQkFBa0IsK0JBQStCLE9BQU8sR0FBRyxZQUFZLElBQUksY0FBYyw0QkFBNEIsOEJBQThCLHdDQUF3QyxvQkFBb0Isc0VBQXNFLDRCQUE0QixvQ0FBb0Msa0ZBQWtGLHdCQUF3QixpQkFBaUIsNkJBQTZCLEtBQUssU0FBUyxvREFBb0QsaUJBQWlCLHNCQUFzQixPQUFPLDhCQUE4QixzSkFBc0osNkRBQTZELHNCQUFzQixvQkFBb0IsNkJBQTZCLG1CQUFtQixPQUFPLHNCQUFzQix5QkFBeUIsaUNBQWlDLFNBQVMseUNBQXlDLCtCQUErQixLQUFLLDBFQUEwRSxpQkFBaUIsdUJBQXVCLFlBQVksV0FBVyxHQUFHLHVGQUF1RiwyQkFBMkIsbUVBQW1FLElBQUksSUFBSSx5RkFBeUYsSUFBSSxLQUFLLFdBQVcsdUNBQXVDLGdEQUFnRCxzQkFBc0IsZUFBZSxNQUFNLG1CQUFtQixpQ0FBaUMsaURBQWlELHdCQUF3Qix1Q0FBdUMsaUJBQWlCLEdBQUcsdURBQXVELGtDQUFrQyxPQUFPLHdCQUF3QixZQUFZLHNDQUFzQywrQ0FBK0MsSUFBSSwyRUFBMkUseUJBQXlCLElBQUksdUlBQXVJLGdIQUFnSCxXQUFXLDRDQUE0QyxpQkFBaUIsK0JBQStCLDZCQUE2QixpQkFBaUIsOENBQThDLEdBQUcsa0NBQWtDLE9BQU8sNkJBQTZCLElBQUksNEJBQTRCLDRDQUE0QywyQkFBMkIsNkNBQTZDLGtCQUFrQixHQUFHLHVGQUF1RixTQUFTLDRCQUE0QixtQ0FBbUMsUUFBUSxJQUFJLDZRQUE2USxlQUFlLHNCQUFzQixTQUFTLCtOQUErTixZQUFZLGlDQUFpQyx1QkFBdUIsaUJBQWlCLG1CQUFtQixzQkFBc0IsdUVBQXVFLHFCQUFxQiw4RUFBOEUsRUFBRSwwQ0FBMEMscURBQXFELHFCQUFxQixXQUFXLFFBQVEsZUFBZSxFQUFFLGVBQWUsRUFBRSxHQUFHLCtCQUErQixpQkFBaUIsY0FBYyw4QkFBOEIsWUFBWSxxQkFBcUIsc0JBQXNCLE1BQU0sRUFBRSxvQkFBb0IsbUJBQW1CLGdCQUFnQixJQUFJLDBDQUEwQywwQkFBMEIsaVZBQWlWLGlDQUFpQywrQ0FBK0MsYUFBYSxnQ0FBZ0MsWUFBWSxxQkFBcUIsZ0JBQWdCLHVGQUF1Rix1QkFBdUIsa0JBQWtCLE9BQU8sMkhBQTJILHdCQUF3QixXQUFXLHFCQUFxQixrQkFBa0IsZ0JBQWdCLFFBQVEsMkJBQTJCLDBCQUEwQixpQ0FBaUMsaUJBQWlCLG1CQUFtQix3QkFBd0IsZUFBZSx3QkFBd0IsaUJBQWlCLElBQUksa0NBQWtDLFNBQVMsR0FBRyxtRUFBbUUsZ0JBQWdCLGdFQUFnRSxpRUFBaUUsMEJBQTBCLHFCQUFxQixnQkFBZ0IsR0FBRyxxREFBcUQsa0JBQWtCLDJCQUEyQixpQkFBaUIsRUFBRSxzRUFBc0UsNkJBQTZCLCtCQUErQixzRkFBc0YsMkNBQTJDLEtBQUssV0FBVyxZQUFZLEdBQUcsc0NBQXNDLDRCQUE0QixLQUFLLDZDQUE2QywwQkFBMEIsK0JBQStCLG9EQUFvRCxTQUFTLEdBQUcsU0FBUyxnQ0FBZ0MsbUNBQW1DLGdCQUFnQixxQ0FBcUMsZ0JBQWdCLHNCQUFzQixXQUFXLHlCQUF5QixHQUFHLFNBQVMsb0JBQW9CLGNBQWMsc0NBQXNDLFNBQVMsRUFBRSw0REFBNEQseUJBQXlCLFlBQVksa0JBQWtCLDBDQUEwQyx1Q0FBdUMsYUFBYSw4QkFBOEIsY0FBYyxLQUFLLG1CQUFtQixvQkFBb0IsaUZBQWlGLHdCQUF3Qix3Q0FBd0MseUJBQXlCLHNDQUFzQyxtQkFBbUIsdUVBQXVFLG9CQUFvQixtQkFBbUIsa0NBQWtDLHFCQUFxQixNQUFNLGdFQUFnRSxJQUFJLEtBQUssV0FBVyxtQ0FBbUMsT0FBTyxTQUFTLGFBQWEsWUFBWSxLQUFLLElBQUksNEJBQTRCLFdBQVcsNEJBQTRCLHNFQUFzRSxHQUFHLElBQUksNEJBQTRCLDBCQUEwQixJQUFJLDRCQUE0Qix1QkFBdUIsdUJBQXVCLEdBQUcsSUFBSSxnQkFBZ0IsdUJBQXVCLGVBQWUsNEdBQTRHLGNBQWMsbUJBQW1CLG1FQUFtRSxVQUFVLGdCQUFnQixjQUFjLDhCQUE4QixFQUFFLGtCQUFrQixnQkFBZ0IsZUFBZSxpZEFBaWQseUlBQXlJLGNBQWMsd0JBQXdCLGlCQUFpQixNQUFNLEVBQUUsV0FBVyxxQkFBcUIsY0FBYyx3QkFBd0IsaUJBQWlCLE1BQU0sRUFBRSxXQUFXLHFCQUFxQixjQUFjLHdCQUF3QixpQkFBaUIsTUFBTSxFQUFFLFdBQVcscUJBQXFCLGdCQUFnQix1QkFBdUIsSUFBSSw2Q0FBNkMsU0FBUyxnQkFBZ0IscUJBQXFCLCtJQUErSSxnQkFBZ0Isb0JBQW9CLDJCQUEyQixNQUFNLG1CQUFtQiw2QkFBNkIsa0JBQWtCLHdCQUF3Qiw4REFBOEQsaUJBQWlCLFNBQVMsOENBQThDLFdBQVcsVUFBVSxTQUFTLFFBQVEsMEJBQTBCLFlBQVksSUFBSSxpQkFBaUIsVUFBVSxJQUFJLFlBQVksV0FBVyxTQUFTLEtBQUssYUFBYSxnQkFBZ0IsNEZBQTRGLGlCQUFpQixtREFBbUQsNEJBQTRCLHNCQUFzQiw2QkFBNkIsaUNBQWlDLGNBQWMsZUFBZSx3Q0FBd0MsNkJBQTZCLDJCQUEyQixnQ0FBZ0MsNENBQTRDLDZCQUE2QixvQkFBb0IsTUFBTSxXQUFXLHNCQUFzQiwrQkFBK0IsNkJBQTZCLG9CQUFvQixtQ0FBbUMsK0JBQStCLCtDQUErQyw4QkFBOEIsaUJBQWlCLGdDQUFnQyw2QkFBNkIsc0RBQXNELDZCQUE2Qiw2QkFBNkIsMEJBQTBCLDZCQUE2Qiw2QkFBNkIsK0JBQStCLDZCQUE2Qix3Q0FBd0MsOEJBQThCLGVBQWUsdUNBQXVDLGdDQUFnQywyQkFBMkIsNkJBQTZCLHdCQUF3Qiw2QkFBNkIsd0JBQXdCLCtCQUErQiwrQkFBK0IsdUJBQXVCLHNCQUFzQixNQUFNLHNCQUFzQiw0M0JBQTQzQix5REFBeUQsOEJBQThCLDZTQUE2UyxrREFBa0QsK0NBQStDLHNHQUFzRyxpQ0FBaUMsTUFBTSxhQUFhLE9BQU8sZ3pCQUFnekIsRUFBRSxrdkJBQWt2QixFQUFFLHNZQUFzWSxzSkFBc0osVUFBVSw0SkFBNEosUUFBUSxzRUFBc0UsdVJBQXVSLElBQUksb0ZBQW9GLFdBQVcsc0hBQXNILG1CQUFtQixpQkFBaUIsd0JBQXdCLDZCQUE2QixrQ0FBa0MsdUNBQXVDLG9CQUFvQixxQkFBcUIsa0NBQWtDLE1BQU0sRUFBRSxXQUFXLGNBQWMsU0FBUyxpQkFBaUIsa0NBQWtDLHdCQUF3QixFQUFFLFNBQVMsaUJBQWlCLDZCQUE2QixzQkFBc0IsRUFBRSxTQUFTLGlCQUFpQixrQ0FBa0MsTUFBTSwwQkFBMEIsU0FBUyxpQkFBaUIsMkNBQTJDLE1BQU0sRUFBRSxXQUFXLHFCQUFxQixTQUFTLGlCQUFpQiwwQ0FBMEMsbUJBQW1CLGtDQUFrQyxNQUFNLHVCQUF1QixTQUFTLGlCQUFpQiw2Q0FBNkMsTUFBTSxrQkFBa0IsU0FBUyxpQkFBaUIsbUNBQW1DLE1BQU0sYUFBYSxTQUFTLHFCQUFxQiw4QkFBOEIscUJBQXFCLE1BQU0saUJBQWlCLFNBQVMscUJBQXFCLHlCQUF5QixxQkFBcUIsSUFBSSxpQkFBaUIsU0FBUyxpQkFBaUIsa0NBQWtDLE1BQU0seUJBQXlCLFNBQVMsb0JBQW9CLG1CQUFtQixNQUFNLDRCQUE0QiwwQkFBMEIsS0FBSyxxQkFBcUIsZ0NBQWdDLFlBQVkseUJBQXlCLFNBQVMsbUJBQW1CLDRCQUE0Qix5QkFBeUIsTUFBTSxzQkFBc0IsU0FBUyxtQkFBbUIscUJBQXFCLHlCQUF5QixNQUFNLHVCQUF1QixTQUFTLGVBQWUsWUFBWSxpQkFBaUIseUJBQXlCLHFCQUFxQixlQUFlLG1CQUFtQix1QkFBdUIsZUFBZSxtQkFBbUIsdUJBQXVCLHVCQUF1Qiw0QkFBNEIsd0JBQXdCLEtBQUssaUJBQWlCLDBCQUEwQixNQUFNLEVBQUUsY0FBYyx1QkFBdUIsU0FBUyxpQkFBaUIsd0JBQXdCLE1BQU0sV0FBVyxTQUFTLGVBQWUsNkNBQTZDLGVBQWUsbUJBQW1CLGFBQWEsaUJBQWlCLHlCQUF5QixZQUFZLEdBQUcsaUJBQWlCLGdCQUFnQixpQkFBaUIsd0JBQXdCLHVCQUF1QixFQUFFLFNBQVMsaUJBQWlCLG1CQUFtQixxQkFBcUIsRUFBRSxTQUFTLFdBQVcsOG5DQUE4bkMsU0FBUyxVQUFVLFdBQVcsV0FBVyxhQUFhLFlBQVksRUFBRSxFQUFFLGVBQWUsaUJBQWlCLGVBQWUsa0JBQWtCLGVBQWUseUJBQXlCLGdDQUFnQyxhQUFhLEtBQUssaUJBQWlCLG1CQUFtQixnQkFBZ0IsaUJBQWlCLGlDQUFpQyxNQUFNLEVBQUUsV0FBVyxnQ0FBZ0MsU0FBUyxlQUFlLHlCQUF5Qiw4QkFBOEIsU0FBUyxLQUFLLGVBQWUseUJBQXlCLHlCQUF5QixXQUFXLEtBQUssU0FBUyxVQUFVLGVBQWUseUJBQXlCLHVCQUF1QixnQkFBZ0IsbUJBQW1CLElBQUksZUFBZSxtQkFBbUIsMEJBQTBCLEVBQUUsU0FBUyxXQUFXLE1BQU0sV0FBVyxXQUFXLGFBQWEsWUFBWSxNQUFNLG1CQUFtQixrdkJBQWt2QixJQUFJLDhCQUE4QixXQUFXLE1BQU0sSUFBSSxXQUFXLGdjQUFnYywrR0FBK0csZUFBZSxzQ0FBc0MsNEJBQTRCLHlDQUF5QyxpQkFBaUIsa0JBQWtCLGNBQWMsbUJBQW1CLG1CQUFtQixtQkFBbUIsY0FBYyxZQUFZLHdCQUF3QixHQUFHLGVBQWUsaUJBQWlCLDZGQUE2RixlQUFlLHdJQUF3SSxlQUFlLDhCQUE4QixpQkFBaUIsTUFBTSxFQUFFLFdBQVcscUJBQXFCLGVBQWUsOEJBQThCLGlCQUFpQixNQUFNLEVBQUUsV0FBVyxxQkFBcUIsZUFBZSw4QkFBOEIsaUJBQWlCLE1BQU0sRUFBRSxXQUFXLHFCQUFxQixlQUFlLDhCQUE4Qix5QkFBeUIsTUFBTSxnQkFBZ0IsZUFBZSw4QkFBOEIsaUJBQWlCLGlCQUFpQiwyR0FBMkcsMEpBQTBKLFNBQVMsZUFBZSxlQUFlLHdCQUF3QixpQkFBaUIsa0NBQWtDLGVBQWUsaUJBQWlCLG1CQUFtQixrREFBa0QsbUJBQW1CLFdBQVcsa0RBQWtELGlCQUFpQixtQkFBbUIsSUFBSSwyQkFBMkIsU0FBUyxxQkFBcUIsNkJBQTZCLGNBQWMsS0FBSyxpQkFBaUIsd0JBQXdCLG1CQUFtQiwyQkFBMkIsa0RBQWtELFNBQVMsaUJBQWlCLHlDQUF5QyxNQUFNLHFCQUFxQixTQUFTLG1CQUFtQix5REFBeUQseUJBQXlCLHdCQUF3QiwyQ0FBMkMsbUJBQW1CLFlBQVksTUFBTSxpQkFBaUIsc0NBQXNDLHlGQUF5RixzQkFBc0IsS0FBSyx5QkFBeUIsd0JBQXdCLHNCQUFzQixZQUFZLGlDQUFpQyxxQkFBcUIsaUJBQWlCLHdCQUF3QixxQkFBcUIscUJBQXFCLFlBQVksS0FBSyx3QkFBd0Isa0JBQWtCLHNCQUFzQixVQUFVLG9CQUFvQiwrQkFBK0IsNEJBQTRCLDhCQUE4QixzREFBc0QsTUFBTSw4RUFBOEUsb0JBQW9CLDhCQUE4QiwwQkFBMEIsNkNBQTZDLGlDQUFpQyxJQUFJLG9CQUFvQix3Q0FBd0MsU0FBUyxjQUFjLGVBQWUsY0FBYyx3Q0FBd0MsdUJBQXVCLG1DQUFtQyx5QkFBeUIsR0FBRyxpQ0FBaUMsOEJBQThCLHNDQUFzQyxLQUFLLG1CQUFtQixlQUFlLG9CQUFvQixZQUFZLElBQUksRUFBRSx5QkFBeUIsb0NBQW9DLFNBQVMsbUJBQW1CLHdDQUF3QyxzQkFBc0IsYUFBYSxLQUFLLHFCQUFxQiw4Q0FBOEMsZUFBZSx3RUFBd0UsT0FBTyxNQUFNLEVBQUUsNEJBQTRCLDJCQUEyQixZQUFZLElBQUksd0JBQXdCLFVBQVUseUJBQXlCLFNBQVMscUJBQXFCLHVEQUF1RCxNQUFNLHlNQUF5TSw0QkFBNEIsYUFBYSxpQ0FBaUMsMkNBQTJDLDBCQUEwQiw4QkFBOEIsb0JBQW9CLE9BQU8sV0FBVyxpQkFBaUIsMkJBQTJCLDhCQUE4QixvQkFBb0IsZ0NBQWdDLGdDQUFnQyxvQkFBb0IsMERBQTBELCtCQUErQiw2QkFBNkIsaUNBQWlDLDhCQUE4QixtRUFBbUUsOEJBQThCLDhCQUE4QixxQkFBcUIsOEJBQThCLDhCQUE4QixnQ0FBZ0MsOEJBQThCLHNEQUFzRCwrQkFBK0IsMkJBQTJCLDJDQUEyQyxpQ0FBaUMsMkJBQTJCLDBCQUEwQiw4QkFBOEIseUJBQXlCLDhCQUE4Qix5QkFBeUIsZ0NBQWdDLDBCQUEwQixnREFBZ0QsZ0RBQWdELG1DQUFtQyw4QkFBOEIsNEJBQTRCLCtCQUErQixpQ0FBaUMsaUNBQWlDLGtDQUFrQywwQkFBMEIsOEJBQThCLDRCQUE0Qiw4QkFBOEIsNEJBQTRCLGdDQUFnQyxvQkFBb0Isb0JBQW9CLGlCQUFpQixrRUFBa0UsMEJBQTBCLHlDQUF5QywyQkFBMkIsaUJBQWlCLFNBQVMsNkJBQTZCLG9CQUFvQixLQUFLLG1CQUFtQix3QkFBd0IsTUFBTSxFQUFFLGtCQUFrQixvREFBb0QsU0FBUyxpQkFBaUIsU0FBUyw2QkFBNkIsb0JBQW9CLEtBQUssdUJBQXVCLG9CQUFvQix3QkFBd0IsTUFBTSxFQUFFLFdBQVcseURBQXlELFNBQVMsc0JBQXNCLGlCQUFpQixxQkFBcUIsaUJBQWlCLHFCQUFxQixpQkFBaUIseUJBQXlCLGdCQUFnQixHQUFHLGlCQUFpQixpQ0FBaUMsYUFBYSxpQkFBaUIsbUJBQW1CLG1CQUFtQixXQUFXLDBCQUEwQixlQUFlLHNGQUFzRiw0QkFBNEIsSUFBSSxRQUFRLFNBQVMsVUFBVSxpQkFBaUIscUNBQXFDLGdCQUFnQixrQkFBa0IsSUFBSSxpQkFBaUIsV0FBVyxpQkFBaUIsNkJBQTZCLGlCQUFpQiwyQkFBMkIsbUJBQW1CLGlFQUFpRSxJQUFJLEVBQUUsV0FBVywwRkFBMEYsT0FBTyxnQkFBZ0IsT0FBTyxrQkFBa0IsRUFBRSxzQkFBc0IseUNBQXlDLFFBQVEsSUFBSSxFQUFFLFdBQVcsdUNBQXVDLHdCQUF3QixTQUFTLG1CQUFtQiwrQ0FBK0MsMkJBQTJCLGVBQWUsdUJBQXVCLHVCQUF1QixpRkFBaUYsdUZBQXVGLGFBQWEsbUJBQW1CLFVBQVUsK0VBQStFLFVBQVUsMEVBQTBFLHNCQUFzQixvRUFBb0Usc0NBQXNDLG1EQUFtRCw2QkFBNkIsZ0JBQWdCLGlCQUFpQix5Q0FBeUMsZUFBZSxpQkFBaUIsZ0JBQWdCLDRCQUE0QixxQkFBcUIsMkNBQTJDLFNBQVMsZ0JBQWdCLFdBQVcsZ0VBQWdFLFNBQVMsb0NBQW9DLG1DQUFtQyxnREFBZ0QsNkJBQTZCLGdDQUFnQyxZQUFZLElBQUksRUFBRSxXQUFXLHFDQUFxQywwQkFBMEIsMEJBQTBCLFNBQVMsc0JBQXNCLFlBQVksTUFBTSxFQUFFLHVCQUF1QiwyQ0FBMkMsbUNBQW1DLEtBQUssTUFBTSx3QkFBd0IsVUFBVSxvQ0FBb0MscUlBQXFJLGlDQUFpQyxlQUFlLGdCQUFnQixxQkFBcUIsd0JBQXdCLG9CQUFvQixZQUFZLElBQUksRUFBRSxXQUFXLCtDQUErQyxLQUFLLE1BQU0sRUFBRSxnQ0FBZ0MsWUFBWSw2QkFBNkIsS0FBSyxhQUFhLDBCQUEwQixzQ0FBc0MsU0FBUyxlQUFlLDhEQUE4RCxNQUFNLGVBQWUsMkZBQTJGLGVBQWUsdUJBQXVCLFNBQVMsNkRBQTZELFNBQVMsaUJBQWlCLFdBQVcsaUJBQWlCLGdDQUFnQyw2QkFBNkIsZ0JBQWdCLEtBQUssZUFBZSxZQUFZLDREQUE0RCx5QkFBeUIsaUJBQWlCLDRDQUE0QyxjQUFjLHVDQUF1Qyx1QkFBdUIsMkJBQTJCLGdEQUFnRCxtQ0FBbUMsZUFBZSxLQUFLLG9DQUFvQyxNQUFNLHdDQUF3QyxnSkFBZ0osb0RBQW9ELGlCQUFpQixLQUFLLGtDQUFrQyx3QkFBd0IsTUFBTSxpQkFBaUIsZUFBZSxvQ0FBb0MsbUJBQW1CLDZCQUE2Qix5QkFBeUIsaUNBQWlDLEdBQUcsUUFBUSxTQUFTLGlCQUFpQiw0QkFBNEIsd0JBQXdCLFlBQVksR0FBRyxPQUFPLDhCQUE4QixHQUFHLHFCQUFxQixlQUFlLDBCQUEwQix1QkFBdUIsNkRBQTZELE1BQU0sRUFBRSxvQkFBb0IseUNBQXlDLHVCQUF1QixRQUFRLEdBQUcsSUFBSSxpQkFBaUIsU0FBUyxJQUFJLG1CQUFtQiw2QkFBNkIsTUFBTSxFQUFFLHFCQUFxQix3QkFBd0IsU0FBUyxxQkFBcUIsa0NBQWtDLHdDQUF3QyxNQUFNLCtCQUErQixrQkFBa0Isc0NBQXNDLFNBQVMsaUJBQWlCLDZCQUE2QixJQUFJLEVBQUUsV0FBVyxnQkFBZ0IsUUFBUSw4QkFBOEIsU0FBUyxpQkFBaUIsMEJBQTBCLGlCQUFpQixTQUFTLHlCQUF5QixHQUFHLGdDQUFnQyxTQUFTLFNBQVMsaUJBQWlCLDJCQUEyQixlQUFlLGlCQUFpQixpQkFBaUIsWUFBWSw4QkFBOEIscUJBQXFCLG1CQUFtQiw0Q0FBNEMsZUFBZSxFQUFFLG1CQUFtQixnRUFBZ0UsU0FBUyxXQUFXLGlEQUFpRCxFQUFFLGlCQUFpQixTQUFTLHdCQUF3QixxQkFBcUIsd0JBQXdCLHdCQUF3QixzREFBc0QsRUFBRSxJQUFJLGVBQWUsaUJBQWlCLG1CQUFtQixvQkFBb0IsaUVBQWlFLGVBQWUsTUFBTSxhQUFhLFNBQVMsaUJBQWlCLE1BQU0sNkJBQTZCLG9CQUFvQixPQUFPLG1CQUFtQiw2QkFBNkIsNENBQTRDLEtBQUssSUFBSSxFQUFFLHFCQUFxQix5Q0FBeUMsU0FBUyxvQkFBb0IscUJBQXFCLDZCQUE2QixrQkFBa0IsaURBQWlELElBQUksRUFBRSw4REFBOEQsZ0JBQWdCLDRFQUE0RSxZQUFZLHdCQUF3QixpQkFBaUIsaUNBQWlDLE1BQU0sRUFBRSxzQkFBc0IsaUJBQWlCLFFBQVEsa0JBQWtCLFNBQVMsZUFBZSxzQ0FBc0MsZUFBZSwrQkFBK0IsNEJBQTRCLGlDQUFpQyxXQUFXLCtCQUErQixtQkFBbUIsdUNBQXVDLGVBQWUsZ0JBQWdCLG1CQUFtQixrQkFBa0IsbUJBQW1CLGNBQWMsT0FBTyxNQUFNLEVBQUUsc0JBQXNCLDJCQUEyQixtQkFBbUIsSUFBSSx3QkFBd0IsdUJBQXVCLDRDQUE0QyxTQUFTLGlCQUFpQixzREFBc0QscUJBQXFCLDRCQUE0QixxQkFBcUIsNEJBQTRCLDJCQUEyQixFQUFFLGlEQUFpRCxpQkFBaUIsUUFBUSwwREFBMEQsOENBQThDLEtBQUssbUJBQW1CLGVBQWUsNEJBQTRCLG9CQUFvQixNQUFNLHFCQUFxQixNQUFNLG1DQUFtQyx1QkFBdUIsbUJBQW1CLHdDQUF3QyxNQUFNLEVBQUUsaUJBQWlCLFlBQVksU0FBUyxlQUFlLGtCQUFrQixlQUFlLGdDQUFnQyxpQkFBaUIscUNBQXFDLFVBQVUsbUJBQW1CLGVBQWUsd0NBQXdDLHVCQUF1QiwyQkFBMkIsaUJBQWlCLHNCQUFzQiwrQ0FBK0MsbUJBQW1CLGVBQWUsc0NBQXNDLGtDQUFrQyxpQkFBaUIsOEJBQThCLGtEQUFrRCxpQkFBaUIsVUFBVSx3RUFBd0UsaUVBQWlFLGlFQUFpRSxTQUFTLHFCQUFxQiw2RUFBNkUsTUFBTSxXQUFXLEtBQUssTUFBTSwwQkFBMEIsS0FBSyxJQUFJLGVBQWUsU0FBUyxxQkFBcUIsa0ZBQWtGLE1BQU0sV0FBVyxZQUFZLE1BQU0sYUFBYSxLQUFLLE1BQU0sOEJBQThCLFNBQVMsaUJBQWlCLG9CQUFvQixnQkFBZ0IsTUFBTSxXQUFXLFNBQVMscUJBQXFCLFNBQVMsUUFBUSxFQUFFLHdCQUF3QixNQUFNLEVBQUUsb0NBQW9DLHNDQUFzQyxTQUFTLGlCQUFpQixxQkFBcUIsNkJBQTZCLHlCQUF5QixlQUFlLHlCQUF5QixnREFBZ0QsNkZBQTZGLE1BQU0sRUFBRSxXQUFXLGNBQWMsU0FBUyxHQUFHLGlCQUFpQixxQkFBcUIsb0JBQW9CLHdCQUF3QixvQ0FBb0MsZ0NBQWdDLEVBQUUsVUFBVSxlQUFlLHVCQUF1Qix1Q0FBdUMsSUFBSSxFQUFFLGlCQUFpQiwwQkFBMEIsVUFBVSxlQUFlLG1CQUFtQiwrRUFBK0UsaUJBQWlCLGVBQWUsbUJBQW1CLDBDQUEwQyxlQUFlLGtCQUFrQixnQkFBZ0IsaUJBQWlCLG9CQUFvQiwwQkFBMEIsK0JBQStCLG9DQUFvQyx5Q0FBeUMsOENBQThDLG1EQUFtRCx3REFBd0QscUNBQXFDLGtCQUFrQixlQUFlLHVCQUF1QixZQUFZLFdBQVcsY0FBYyxzQkFBc0Isb0JBQW9CLGVBQWUsMkJBQTJCLGVBQWUsdUJBQXVCLHVDQUF1QyxtQkFBbUIsSUFBSSxFQUFFLFdBQVcsd0NBQXdDLCtDQUErQyxZQUFZLE1BQU0sRUFBRSx3Q0FBd0MsOEdBQThHLGtCQUFrQix1QkFBdUIsbURBQW1ELHFDQUFxQyxNQUFNLHFCQUFxQixVQUFVLEdBQUcsaUNBQWlDLGlEQUFpRCxvQkFBb0Isc0NBQXNDLElBQUksbUJBQW1CLGlDQUFpQyx1QkFBdUIsSUFBSSxlQUFlLFNBQVMsTUFBTSxzREFBc0QsY0FBYyw4Q0FBOEMsMEJBQTBCLG9DQUFvQyw0Q0FBNEMsSUFBSSxFQUFFLFdBQVcsb0JBQW9CLFNBQVMsOEdBQThHLGlCQUFpQixxQkFBcUIseUJBQXlCLDZCQUE2QixjQUFjLEtBQUssWUFBWSxHQUFHLGlCQUFpQixxQkFBcUIsTUFBTSx5QkFBeUIsdUJBQXVCLGtCQUFrQixvRkFBb0YsVUFBVSxlQUFlLHVCQUF1Qix3Q0FBd0MsV0FBVyx3QkFBd0IsaUJBQWlCLEdBQUcsR0FBRyxHQUFHLGlCQUFpQixpQ0FBaUMsMEJBQTBCLHdCQUF3QixpREFBaUQsZUFBZSx1QkFBdUIsbUdBQW1HLDZDQUE2QyxJQUFJLG1CQUFtQixTQUFTLGdDQUFnQyxlQUFlLHFCQUFxQix3RUFBd0UsaUNBQWlDLFVBQVUsb0NBQW9DLDJEQUEyRCxnREFBZ0QsZUFBZSxZQUFZLHFCQUFxQiwrQ0FBK0MsNkJBQTZCLHlFQUF5RSxhQUFhLGlEQUFpRCxpQkFBaUIsSUFBSSxlQUFlLG1CQUFtQixZQUFZLG1DQUFtQyx5QkFBeUIsOEJBQThCLGFBQWEsS0FBSyxrQkFBa0IseUJBQXlCLGVBQWUsR0FBRyxVQUFVLDZCQUE2QixVQUFVLDRDQUE0QyxtQkFBbUIsaUZBQWlGLFlBQVksTUFBTSx3Q0FBd0Msb0JBQW9CLCtHQUErRyxtQkFBbUIsNEJBQTRCLFdBQVcsTUFBTSxXQUFXLDZDQUE2QyxzS0FBc0ssNElBQTRJLFlBQVksb0JBQW9CLDhDQUE4QyxJQUFJLG1CQUFtQiwyQ0FBMkMsZ0hBQWdILDhEQUE4RCxrQkFBa0Isb0JBQW9CLGtHQUFrRyxNQUFNLFdBQVcsS0FBSyxJQUFJLHVCQUF1Qix5QkFBeUIsVUFBVSwyQkFBMkIsa0JBQWtCLG9CQUFvQiwwRUFBMEUsUUFBUSw4QkFBOEIscUJBQXFCLDZDQUE2Qyx5QkFBeUIsK0RBQStELGVBQWUsaUJBQWlCLHlCQUF5QixnQ0FBZ0MsNEJBQTRCLDBCQUEwQiwwQkFBMEIsNkJBQTZCLDBCQUEwQixNQUFNLEVBQUUsa0JBQWtCLDJDQUEyQyxVQUFVLGNBQWMsS0FBSyxNQUFNLE1BQU0sd0JBQXdCLG9EQUFvRCxJQUFJLEtBQUssT0FBTyw4QkFBOEIsS0FBSyxPQUFPLGlDQUFpQyxlQUFlLDJCQUEyQixlQUFlLG1CQUFtQixlQUFlLG1CQUFtQixzQkFBc0IsaUJBQWlCLElBQUksZUFBZSx1REFBdUQsSUFBSSxFQUFFLG9CQUFvQiwrQkFBK0IsU0FBUyxlQUFlLG1EQUFtRCxjQUFjLHNCQUFzQixxRUFBcUUsaUJBQWlCLHFCQUFxQiwrSUFBK0ksZUFBZSwyQkFBMkIsSUFBSSxFQUFFLGtCQUFrQixpQkFBaUIsU0FBUyxpQkFBaUIsb0JBQW9CLHNCQUFzQixNQUFNLGlCQUFpQixzQkFBc0IsaURBQWlELG9CQUFvQixJQUFJLHNCQUFzQixhQUFhLEVBQUUscUJBQXFCLFNBQVMsVUFBVSxtQkFBbUIsdUNBQXVDLE1BQU0sRUFBRSxlQUFlLDhCQUE4QixPQUFPLDRFQUE0RSxlQUFlLGdEQUFnRCxXQUFXLGVBQWUsc0NBQXNDLGlCQUFpQixlQUFlLG1GQUFtRixtQkFBbUIsbUJBQW1CLGVBQWUsNEVBQTRFLGlCQUFpQixrQkFBa0IsZUFBZSw2R0FBNkcsZUFBZSxvQkFBb0IsdURBQXVELGtCQUFrQixZQUFZLG9CQUFvQiwySUFBMkksZ0RBQWdELGVBQWUsaUJBQWlCLGlCQUFpQixpQkFBaUIsaUJBQWlCLGlCQUFpQixTQUFTLEVBQUUsZ0JBQWdCLGVBQWUsdUJBQXVCLG1EQUFtRCxlQUFlLG9CQUFvQixpQkFBaUIsbUJBQW1CLCtDQUErQyxtQkFBbUIsNkNBQTZDLG1EQUFtRCxNQUFNLGFBQWEsS0FBSyxpQkFBaUIsTUFBTSxXQUFXLCtCQUErQixpQkFBaUIscUNBQXFDLGlCQUFpQiw0RUFBNEUsbUNBQW1DLDBCQUEwQixXQUFXLG1CQUFtQixXQUFXLDBCQUEwQixlQUFlLGVBQWUsVUFBVSxxRUFBcUUsaUNBQWlDLGlCQUFpQix5QkFBeUIsZ0JBQWdCLDRCQUE0QixZQUFZLGFBQWEsa0JBQWtCLDJCQUEyQixTQUFTLGVBQWUsWUFBWSxrQkFBa0Isc0JBQXNCLFlBQVksZ0NBQWdDLFNBQVMsNkJBQTZCLGlCQUFpQiwwQkFBMEIsZ0JBQWdCLE1BQU0sRUFBRSxxQkFBcUIsaUJBQWlCLG9CQUFvQixpQ0FBaUMsU0FBUyx3RUFBd0Usa0NBQWtDLEtBQUssZUFBZSxtQ0FBbUMsbUJBQW1CLGVBQWUsc0NBQXNDLFdBQVcsK0JBQStCLGVBQWUsWUFBWSxJQUFJLGtCQUFrQixVQUFVLElBQUksWUFBWSxXQUFXLFNBQVMsZUFBZSxvQ0FBb0Msd0NBQXdDLDJGQUEyRix5QkFBeUIsb0NBQW9DLHdCQUF3QixZQUFZLHlEQUF5RCx3QkFBd0IsWUFBWSxxREFBcUQsR0FBRyxtQkFBbUIseUJBQXlCLGVBQWUsc0JBQXNCLDBDQUEwQyxtQkFBbUIseUJBQXlCLGVBQWUsVUFBVSxxRUFBcUUsZUFBZSxvQ0FBb0MsZUFBZSwwQkFBMEIsdUJBQXVCLGVBQWUsc0NBQXNDLHNCQUFzQix1QkFBdUIsb0VBQW9FLHNCQUFzQix1QkFBdUIsK0VBQStFLEdBQUcsZUFBZSx5QkFBeUIsa0JBQWtCLGNBQWMsaUJBQWlCLDBDQUEwQyx5QkFBeUIsbUNBQW1DLDhCQUE4QixvQkFBb0IsZUFBZSxHQUFHLGVBQWUsNEJBQTRCLHVCQUF1Qix5QkFBeUIsc0JBQXNCLFlBQVksOENBQThDLHNCQUFzQixZQUFZLHdEQUF3RCxHQUFHLGVBQWUsMEJBQTBCLFFBQVEsMkJBQTJCLG9DQUFvQyxxQkFBcUIsbUJBQW1CLEdBQUcsaUJBQWlCLDBCQUEwQixZQUFZLG1DQUFtQyxpQkFBaUIsR0FBRyx5QkFBeUIsd0JBQXdCLHNCQUFzQixvQkFBb0Isc0JBQXNCLFlBQVkseUNBQXlDLHNCQUFzQixZQUFZLG1EQUFtRCxnQ0FBZ0MsOEJBQThCLG9EQUFvRCxHQUFHLGVBQWUsWUFBWSx3QkFBd0IsaUJBQWlCLFlBQVksdUJBQXVCLDJEQUEyRCxnQkFBZ0IsMkdBQTJHLDJCQUEyQiw2Q0FBNkMsaUNBQWlDLGlCQUFpQiwwQkFBMEIsOEJBQThCLHVCQUF1QixpQkFBaUIsK0JBQStCLGlCQUFpQiwrQkFBK0IsMkJBQTJCLHNDQUFzQywwQkFBMEIsdURBQXVELHlCQUF5Qiw2QkFBNkIsS0FBSywwQkFBMEIsVUFBVSxHQUFHLGlCQUFpQiwrQkFBK0IsMkJBQTJCLGlCQUFpQixjQUFjLGNBQWMsd0JBQXdCLG9CQUFvQixlQUFlLHNGQUFzRixxQkFBcUIsc0JBQXNCLG1CQUFtQix5REFBeUQsaUJBQWlCLE1BQU0sd0NBQXdDLDBCQUEwQix3REFBd0QsMkJBQTJCLFFBQVEsYUFBYSxtQkFBbUIsS0FBSyxxQkFBcUIsMEJBQTBCLFFBQVEsYUFBYSxtQkFBbUIsS0FBSyxxQkFBcUIsR0FBRyxtQkFBbUIsbUNBQW1DLHdDQUF3QyxjQUFjLFlBQVksZ0NBQWdDLGNBQWMsVUFBVSxtQ0FBbUMsYUFBYSxXQUFXLG9CQUFvQixtQkFBbUIsY0FBYyx5QkFBeUIsS0FBSyxjQUFjLCtCQUErQixhQUFhLGtCQUFrQiw2QkFBNkIsNEJBQTRCLDhCQUE4QixJQUFJLGlDQUFpQyw0QkFBNEIsMElBQTBJLDJCQUEyQixvQkFBb0IsdUJBQXVCLEdBQUcseUJBQXlCLGlCQUFpQiwwQkFBMEIsd0JBQXdCLEdBQUcsaUJBQWlCLHVFQUF1RSxpQkFBaUIsbURBQW1ELDRCQUE0QixzQkFBc0IsZ0NBQWdDLG1DQUFtQyxlQUFlLHdDQUF3QyxrQkFBa0IsZ0JBQWdCLGlCQUFpQiwyQkFBMkIsZ0NBQWdDLHFDQUFxQywwQ0FBMEMsd0JBQXdCLFlBQVkseUJBQXlCLDhFQUE4RSx1QkFBdUIsOEJBQThCLE1BQU0sMkJBQTJCLG9CQUFvQixHQUFHLHdCQUF3QixtQkFBbUIscUJBQXFCLHdCQUF3QixtQkFBbUIsc0JBQXNCLHdCQUF3Qix5QkFBeUIsR0FBRyxpQkFBaUIseUJBQXlCLG1DQUFtQyxZQUFZLG9CQUFvQixpQkFBaUIsbUJBQW1CLHdEQUF3RCx1Q0FBdUMsd0JBQXdCLGVBQWUscUNBQXFDLGVBQWUsb0JBQW9CLHVDQUF1Qyx3QkFBd0IsZUFBZSxtQkFBbUIsWUFBWSxxR0FBcUcsZUFBZSxtQkFBbUIsWUFBWSxvRUFBb0UsZUFBZSxtQ0FBbUMsZUFBZSw2Q0FBNkMsZUFBZSxlQUFlLDZDQUE2QyxlQUFlLG1DQUFtQyw2QkFBNkIsd0JBQXdCLGVBQWUsMENBQTBDLGVBQWUsNkJBQTZCLFlBQVkscUJBQXFCLDhDQUE4QywyREFBMkQsNkJBQTZCLHVCQUF1QiwwQkFBMEIsd0JBQXdCLGVBQWUsa0RBQWtELGVBQWUsMENBQTBDLDZCQUE2Qix3Q0FBd0MsZ0NBQWdDLFlBQVksR0FBRyxlQUFlLGVBQWUsa0NBQWtDLGdDQUFnQyxlQUFlLG1CQUFtQixpQkFBaUIsU0FBUyxVQUFVLFlBQVksOEJBQThCLGVBQWUscUZBQXFGLGVBQWUsa0JBQWtCLHNCQUFzQixlQUFlLHlCQUF5QixlQUFlLCtCQUErQixrQkFBa0IsVUFBVSxpREFBaUQsZUFBZSx3Q0FBd0MsUUFBUSxpQkFBaUIsMERBQTBELGVBQWUsbUJBQW1CLGVBQWUsd0JBQXdCLHlCQUF5Qiw4QkFBOEIsK0NBQStDLHdCQUF3QixjQUFjLDRCQUE0QixnQkFBZ0IsNEJBQTRCLGdCQUFnQixrQ0FBa0MsUUFBUSxpQ0FBaUMsOEJBQThCLE1BQU0sd0NBQXdDLE1BQU0sRUFBRSxrQkFBa0IsaURBQWlELFNBQVMsc0JBQXNCLCtCQUErQixHQUFHLG1CQUFtQix3QkFBd0IsaUJBQWlCLGlCQUFpQiwyQkFBMkIsMkJBQTJCLDhEQUE4RCxpQ0FBaUMsMEZBQTBGLGdCQUFnQixlQUFlLHlCQUF5QixlQUFlLGtDQUFrQyw2QkFBNkIsU0FBUyx3Q0FBd0MsU0FBUyxJQUFJLGlCQUFpQiwrREFBK0QsU0FBUyxJQUFJLDJCQUEyQixVQUFVLDRCQUE0QixZQUFZLHdCQUF3QixTQUFTLG9CQUFvQixTQUFTLG9CQUFvQixxQ0FBcUMsbUNBQW1DLG1CQUFtQixJQUFJLFlBQVksU0FBUyx3QkFBd0IsaUJBQWlCLGVBQWUsNkJBQTZCLGVBQWUsR0FBRyxNQUFNLEdBQUcsaUJBQWlCLG9CQUFvQiw0QkFBNEIsVUFBVSxHQUFHLHFDQUFxQyxpQkFBaUIsR0FBRyx3QkFBd0IsZUFBZSw4QkFBOEIsMkJBQTJCLHVDQUF1QyxHQUFHLGVBQWUsK0JBQStCLGVBQWUsaURBQWlELDJCQUEyQixvQ0FBb0MsMEJBQTBCLG9DQUFvQywrQ0FBK0Msb0NBQW9DLDBCQUEwQiwwQkFBMEIsMEJBQTBCLG9DQUFvQyx3QkFBd0IsbUJBQW1CLHlDQUF5QyxrQkFBa0IsZ0JBQWdCLHVCQUF1QixnQkFBZ0IsdUJBQXVCLG1CQUFtQix5QkFBeUIsSUFBSSxpQkFBaUIsU0FBUywwQkFBMEIsd0JBQXdCLHlCQUF5QiwyQkFBMkIsS0FBSyxHQUFHLGVBQWUsa0JBQWtCLFVBQVUsc0JBQXNCLGVBQWUsU0FBUyxlQUFlLDBDQUEwQyx5QkFBeUIsbUJBQW1CLGtCQUFrQix3QkFBd0IsbUJBQW1CLGtCQUFrQixHQUFHLG1CQUFtQixzQkFBc0Isc0VBQXNFLDhDQUE4Qyx5QkFBeUIsV0FBVyxxQ0FBcUMscUJBQXFCLFNBQVMsMEJBQTBCLGlEQUFpRCxnQ0FBZ0Msa0JBQWtCLCtDQUErQyxFQUFFLEtBQUssZUFBZSxrQ0FBa0MsZUFBZSxtQ0FBbUMsbUJBQW1CLGdCQUFnQixJQUFJLHNCQUFzQixjQUFjLFNBQVMsY0FBYyxTQUFTLDRCQUE0QixXQUFXLHdDQUF3QyxXQUFXLHlDQUF5QyxXQUFXLHlDQUF5QyxXQUFXLEtBQUssOEJBQThCLHdDQUF3QywwQkFBMEIseUNBQXlDLGdLQUFnSyw4QkFBOEIsbUJBQW1CLG1CQUFtQixzQ0FBc0Msb0NBQW9DLHlCQUF5QixvQkFBb0IsNkJBQTZCLElBQUkscUJBQXFCLFNBQVMsd0JBQXdCLDJDQUEyQyxNQUFNLEVBQUUsV0FBVyxjQUFjLFNBQVMsc0JBQXNCLHVCQUF1QixlQUFlLG9DQUFvQyxJQUFJLHFCQUFxQixtQ0FBbUMscUJBQXFCLGdDQUFnQyw2QkFBNkIsMkNBQTJDLHFCQUFxQixzQkFBc0IsYUFBYSxNQUFNLEVBQUUsV0FBVywyQ0FBMkMsR0FBRyx5QkFBeUIsbUJBQW1CLFlBQVksbUJBQW1CLGtCQUFrQixVQUFVLHNEQUFzRCxZQUFZLHlCQUF5Qiw0QkFBNEIsZ0NBQWdDLHFDQUFxQyxpQ0FBaUMsaUNBQWlDLHFDQUFxQywySkFBMkoseUJBQXlCLCtDQUErQyw4QkFBOEIseUJBQXlCLHFEQUFxRCxpQ0FBaUMsMENBQTBDLDRCQUE0Qix1Q0FBdUMsMkJBQTJCLHlCQUF5Qix3RUFBd0UsZUFBZSwrRUFBK0UsSUFBSSxVQUFVLFNBQVMsY0FBYyx5QkFBeUIsK0JBQStCLDBCQUEwQixxQkFBcUIsOEJBQThCLHFCQUFxQixpQ0FBaUMscUNBQXFDLDBDQUEwQyxvQ0FBb0MsK0JBQStCLGtEQUFrRCxxQkFBcUIsaUJBQWlCLHFEQUFxRCx1Q0FBdUMsTUFBTSxFQUFFLFdBQVcsYUFBYSxTQUFTLDBCQUEwQiw4QkFBOEIsNEJBQTRCLDhCQUE4QixzQ0FBc0MsdUNBQXVDLGtNQUFrTSxTQUFTLHVDQUF1QyxpQkFBaUIsS0FBSyw0QkFBNEIsU0FBUyx1Q0FBdUMsaUJBQWlCLEtBQUssd0JBQXdCLG1CQUFtQixrQ0FBa0MscUJBQXFCLHNIQUFzSCwrQkFBK0IsZUFBZSxHQUFHLG9DQUFvQyx1QkFBdUIscUJBQXFCLGVBQWUsOEJBQThCLHdGQUF3Riw0S0FBNEssbUJBQW1CLDBCQUEwQix1REFBdUQsa0RBQWtELGdDQUFnQyw4Q0FBOEMsK0VBQStFLG1DQUFtQyx5QkFBeUIsU0FBUywwQkFBMEIseUJBQXlCLGNBQWMsTUFBTSxFQUFFLFdBQVcsZ0NBQWdDLGlCQUFpQix1QkFBdUIsd0NBQXdDLDZCQUE2Qiw2Q0FBNkMsd0RBQXdELHdCQUF3QiwyQkFBMkIsOEJBQThCLHdEQUF3RCx3QkFBd0IsdUJBQXVCLDBCQUEwQix5QkFBeUIsdUdBQXVHLHdDQUF3Qyw0QkFBNEIsK0JBQStCLG9DQUFvQywwQkFBMEIscUtBQXFLLHlCQUF5Qix3Q0FBd0MsK0NBQStDLHVCQUF1QiwrQkFBK0IsR0FBRyxxQkFBcUIseUJBQXlCLHNCQUFzQix5QkFBeUIseURBQXlELDhCQUE4Qix5QkFBeUIscURBQXFELGlDQUFpQywwQ0FBMEMsNEJBQTRCLG9DQUFvQyxzQkFBc0IsY0FBYyw2QkFBNkIsY0FBYyx3Q0FBd0Msc0ZBQXNGLCtCQUErQixFQUFFLDhFQUE4RSw4Q0FBOEMsa0RBQWtELDhCQUE4QixzQkFBc0IsdUJBQXVCLHlDQUF5QyxtQ0FBbUMsa0JBQWtCLEtBQUssc0JBQXNCLGVBQWUsK0RBQStELDRCQUE0Qix5QkFBeUIsb0NBQW9DLDJCQUEyQiwyREFBMkQsd0JBQXdCLHdCQUF3Qix1REFBdUQsK0JBQStCLGlDQUFpQyw0REFBNEQsc0NBQXNDLDhCQUE4QixpREFBaUQsbUJBQW1CLDBFQUEwRSwwQkFBMEIsZ0NBQWdDLDBCQUEwQixrTEFBa0wsOEZBQThGLHNCQUFzQixlQUFlLDBCQUEwQixlQUFlLGdDQUFnQywwQ0FBMEMsNEJBQTRCLDBDQUEwQyw2QkFBNkIsOEJBQThCLHlDQUF5Qyx5QkFBeUIsMENBQTBDLGdCQUFnQix5Q0FBeUMsd0NBQXdDLGdDQUFnQyw2Q0FBNkMsNkJBQTZCLG1EQUFtRCwwQkFBMEIsa0JBQWtCLHdDQUF3QyxxREFBcUQsd0JBQXdCLGlFQUFpRSx3QkFBd0IscUVBQXFFLGtDQUFrQyw2QkFBNkIsa0NBQWtDLHlCQUF5Qix3QkFBd0IsOEJBQThCLHdCQUF3QixtREFBbUQsMkJBQTJCLHFFQUFxRSxnQ0FBZ0MsZUFBZSwwRUFBMEUsNEJBQTRCLHlCQUF5QixlQUFlLHNCQUFzQixvQ0FBb0MsNEJBQTRCLHVEQUF1RCw2QkFBNkIsY0FBYyxxSUFBcUksc0NBQXNDLHNEQUFzRCxxQ0FBcUMsd0JBQXdCLG9CQUFvQix3R0FBd0csWUFBWSw0QkFBNEIsNkJBQTZCLHdDQUF3QyxTQUFTLDBCQUEwQixlQUFlLGdDQUFnQyw0Q0FBNEMsNkJBQTZCLHVDQUF1QyxnQ0FBZ0Msc0ZBQXNGLDRCQUE0QixnQ0FBZ0Msa0RBQWtELHNCQUFzQixvQkFBb0IseUJBQXlCLHlGQUF5RixhQUFhLHNCQUFzQixlQUFlLHVCQUF1QixnQkFBZ0Isa0hBQWtILHlDQUF5Qyx5RkFBeUYsYUFBYSwwQkFBMEIsdUJBQXVCLDBCQUEwQix3Q0FBd0MsdUJBQXVCLCtCQUErQiwyREFBMkQseUJBQXlCLGVBQWUsUUFBUSx1RUFBdUUsY0FBYyxJQUFJLHNCQUFzQixTQUFTLHNCQUFzQix3RUFBd0UsaUNBQWlDLHdCQUF3QixzQ0FBc0MscUJBQXFCLGdCQUFnQix5QkFBeUIscUJBQXFCLG9CQUFvQixpQ0FBaUMsd0JBQXdCLHNDQUFzQywwREFBMEQsU0FBUywwQkFBMEIsU0FBUyx3QkFBd0IsU0FBUyxxQ0FBcUMsaUNBQWlDLDBCQUEwQixtQ0FBbUMsNkNBQTZDLFFBQVEsd0JBQXdCLHFCQUFxQixjQUFjLGlDQUFpQywyQkFBMkIsUUFBUSx3QkFBd0IsNEJBQTRCLDZCQUE2QixRQUFRLHdCQUF3Qiw0QkFBNEIsNkJBQTZCLDhEQUE4RCwyQkFBMkIsa0xBQWtMLFFBQVEsUUFBUSxnQkFBZ0IsV0FBVyxtREFBbUQsZUFBZSwyQkFBMkIsdUNBQXVDLDJCQUEyQixnQ0FBZ0MsdUNBQXVDLDJCQUEyQiwyQkFBMkIsaURBQWlELHVCQUF1QiwyQkFBMkIseUNBQXlDLDJCQUEyQiw4QkFBOEIsaUJBQWlCLE1BQU0sRUFBRSw0QkFBNEIscUNBQXFDLFNBQVMscURBQXFELHVCQUF1QixxQkFBcUIsb0JBQW9CLHFDQUFxQyxZQUFZLHNDQUFzQyx5Q0FBeUMsa0JBQWtCLHdDQUF3Qyw4QkFBOEIsZUFBZSxrQ0FBa0MsdUJBQXVCLGdDQUFnQyx5QkFBeUIsTUFBTSxjQUFjLDRCQUE0QixTQUFTLGtDQUFrQyxrQkFBa0Isc0NBQXNDLDBCQUEwQixvQ0FBb0Msc0JBQXNCLG1CQUFtQix1QkFBdUIsU0FBUywrQ0FBK0MsaUZBQWlGLG1DQUFtQyw4QkFBOEIsd0JBQXdCLG1DQUFtQyw2QkFBNkIsMEJBQTBCLG1DQUFtQyxTQUFTLGVBQWUsZ1RBQWdULG1DQUFtQyxrR0FBa0csUUFBUSxxRkFBcUYsU0FBUyxJQUFJLHdDQUF3QyxNQUFNLGlGQUFpRixvQkFBb0IsVUFBVSxJQUFJLHNEQUFzRCxnQ0FBZ0MsMkJBQTJCLEVBQUUsb0ZBQW9GLHFCQUFxQixnQ0FBZ0MsTUFBTSxxQkFBcUIsRUFBRSxxQkFBcUIsc0NBQXNDLEdBQUcsNEJBQTRCLFNBQVMsd0JBQXdCLDZCQUE2QixrQkFBa0IsYUFBYSxrQkFBa0IsTUFBTSxNQUFNLFNBQVMsc0VBQXNFLDJCQUEyQiw2Q0FBNkMsaURBQWlELHVDQUF1QywyQkFBMkIseUJBQXlCLHNDQUFzQywyQkFBMkIsb0JBQW9CLHdDQUF3Qyw0QkFBNEIsbURBQW1ELDJCQUEyQixZQUFZLHNDQUFzQyw4QkFBOEIsaURBQWlELDJCQUEyQixZQUFZLGtDQUFrQywyQkFBMkIsaUJBQWlCLFVBQVUsb0NBQW9DLGdFQUFnRSx1QkFBdUIsVUFBVSxZQUFZLFdBQVcsaUJBQWlCLGNBQWMsZ0JBQWdCLHdDQUF3QyxvQkFBb0IsNkJBQTZCLHlCQUF5QixVQUFVLGdFQUFnRSxZQUFZLGVBQWUsd0JBQXdCLCtCQUErQix1QkFBdUIsdUJBQXVCLFdBQVcseUJBQXlCLDZDQUE2Qyx5QkFBeUIsV0FBVyxlQUFlLHFGQUFxRixzQkFBc0IsbUNBQW1DLFFBQVEsU0FBUyx3R0FBd0cscUJBQXFCLHFDQUFxQyw0QkFBNEIsc0JBQXNCLHNEQUFzRCw4RUFBOEUsNkNBQTZDLElBQUkscUNBQXFDLHVDQUF1QyxrREFBa0QsdUJBQXVCLDRCQUE0QixtQkFBbUIsNkJBQTZCLHdCQUF3QixzQ0FBc0MscUNBQXFDLDRCQUE0QiwyQkFBMkIsOEJBQThCLHdDQUF3Qyw0QkFBNEIsMkJBQTJCLGtEQUFrRCxtQ0FBbUMsdUJBQXVCLCtCQUErQiw2QkFBNkIsbUNBQW1DLDhCQUE4QiwwQ0FBMEMsOERBQThELGlCQUFpQixHQUFHLG1DQUFtQyw4QkFBOEIsa0NBQWtDLFFBQVEsV0FBVywwSUFBMEkseUNBQXlDLDZDQUE2QyxpQ0FBaUMsb0JBQW9CLGdDQUFnQyw0SUFBNEksK0JBQStCLDJGQUEyRiw0QkFBNEIsb0JBQW9CLGtEQUFrRCxpRUFBaUUsVUFBVSxtQkFBbUIsbUJBQW1CLDJCQUEyQiwyQkFBMkIsY0FBYywwRUFBMEUsRUFBRSxvRUFBb0UseUZBQXlGLDJCQUEyQixnQkFBZ0IsdUJBQXVCLG1CQUFtQiw2QkFBNkIsNEJBQTRCLDZCQUE2QixJQUFJLGtDQUFrQyxZQUFZLE1BQU0sZ0JBQWdCLHNDQUFzQyxjQUFjLEdBQUcsc0JBQXNCLHNCQUFzQixnQ0FBZ0MsK0JBQStCLDZNQUE2TSxpQ0FBaUMsc0JBQXNCLG1CQUFtQiwrQkFBK0IsaUNBQWlDLFNBQVMsK0JBQStCLDZGQUE2Rix3QkFBd0IsTUFBTSxFQUFFLG9CQUFvQixlQUFlLGdCQUFnQixNQUFNLHFCQUFxQixNQUFNLHVCQUF1QixNQUFNLDZCQUE2QixPQUFPLGVBQWUsc0hBQXNILG9EQUFvRCxTQUFTLE9BQU8sU0FBUyxFQUFFLHVCQUF1QixNQUFNLEVBQUUsd0NBQXdDLFlBQVksWUFBWSxtQkFBbUIsU0FBUyxTQUFTLFNBQVMsa0RBQWtELGdCQUFnQixnQ0FBZ0MsMkNBQTJDLDhCQUE4Qix3REFBd0QsNkNBQTZDLE9BQU8sb0RBQW9ELGdDQUFnQyxpQkFBaUIsZ0JBQWdCLEVBQUUsWUFBWSxtREFBbUQsUUFBUSxnQkFBZ0IseUJBQXlCLGlDQUFpQyx1QkFBdUIsb0JBQW9CLFFBQVEsbUZBQW1GLDRCQUE0QiwyQkFBMkIscUJBQXFCLHdFQUF3RSw2Q0FBNkMsdUVBQXVFLFlBQVksS0FBSyxHQUFHLHNCQUFzQixVQUFVLG1DQUFtQyxZQUFZLFVBQVUsNkdBQTZHLHFCQUFxQixJQUFJLDJCQUEyQix3QkFBd0IsNkRBQTZELFlBQVksS0FBSyxLQUFLLG9DQUFvQyxpRUFBaUUsWUFBWSxxQkFBcUIsU0FBUyw0REFBNEQsT0FBTyx3REFBd0QsY0FBYyxTQUFTLFVBQVUsK0JBQStCLDBCQUEwQix3RkFBd0YsaUJBQWlCLFFBQVEsbUJBQW1CLEtBQUssNkRBQTZELE1BQU0sT0FBTyxZQUFZLFdBQVcsdUNBQXVDLFVBQVUsZ0JBQWdCLHNDQUFzQyxTQUFTLEVBQUUsMkNBQTJDLGtCQUFrQiwrQ0FBK0MsV0FBVyxzQkFBc0IsaUNBQWlDLGtDQUFrQyxnQkFBZ0IsMEJBQTBCLDZEQUE2RCxnQkFBZ0IsMkJBQTJCLHFCQUFxQixHQUFHLGNBQWMsMEpBQTBKLGdCQUFnQixlQUFlLGtCQUFrQixxRUFBcUUsSUFBSSxvQkFBb0Isa0JBQWtCLDhIQUE4SCxpRUFBaUUsVUFBVSw2Q0FBNkMsOENBQThDLGVBQWUsZUFBZSx3RkFBd0YsbUNBQW1DLGlCQUFpQixvQ0FBb0MsZUFBZSxrQ0FBa0MsRUFBRSxzQkFBc0IsZ0JBQWdCLElBQUksaUJBQWlCLFNBQVMsVUFBVSwwQkFBMEIscUNBQXFDLHNCQUFzQixPQUFPLG1EQUFtRCxJQUFJLHNDQUFzQyxRQUFRLGtCQUFrQiw2QkFBNkIsU0FBUyxvR0FBb0csYUFBYSxtRUFBbUUsNkNBQTZDLGFBQWEsY0FBYyx1QkFBdUIsdURBQXVELGVBQWUsdUJBQXVCLHdHQUF3Ryw0QkFBNEIsdUNBQXVDLEtBQUsseUJBQXlCLGNBQWMsMkNBQTJDLHlEQUF5RCxZQUFZLGlCQUFpQixXQUFXLGlCQUFpQixLQUFLLG1EQUFtRCxZQUFZLDRCQUE0Qix1QkFBdUIsTUFBTSxpQ0FBaUMsbUNBQW1DLDhDQUE4QyxrQkFBa0IsU0FBUyxtQkFBbUIsVUFBVSx1QkFBdUIsbUJBQW1CLGlCQUFpQixtQkFBbUIsZ0JBQWdCLHdDQUF3Qyx1Q0FBdUMsMkJBQTJCLGlCQUFpQixHQUFHLGVBQWUsbUZBQW1GLGlCQUFpQixrQkFBa0IseUlBQXlJLDZDQUE2QyxxQkFBcUIsbUJBQW1CLGtEQUFrRCxvREFBb0QsSUFBSSxZQUFZLGVBQWUseUJBQXlCLGlCQUFpQixtQkFBbUIsZ0JBQWdCLGNBQWMsaUJBQWlCLG1CQUFtQixzQkFBc0Isb0JBQW9CLGdCQUFnQix3QkFBd0IsZ0JBQWdCLCtCQUErQixvQkFBb0IsOERBQThELGlCQUFpQixHQUFHLG1CQUFtQixZQUFZLElBQUksaUJBQWlCLFVBQVUsaUJBQWlCLDhCQUE4QixZQUFZLGlFQUFpRSxtQkFBbUIsNEJBQTRCLFdBQVcsY0FBYyx3REFBd0QsSUFBSSwyREFBMkQsT0FBTyx5Q0FBeUMsb0JBQW9CLG1EQUFtRCxzTkFBc04saUJBQWlCLG1CQUFtQixrQkFBa0Isa0JBQWtCLG1CQUFtQiwyREFBMkQsNFVBQTRVLHNCQUFzQix3SkFBd0osSUFBSSxLQUFLLHFCQUFxQixNQUFNLDhCQUE4QixTQUFTLFVBQVUsU0FBUyw4QkFBOEIseUJBQXlCLG1CQUFtQixvQkFBb0Isb0JBQW9CLHFCQUFxQixtQkFBbUIsYUFBYSwwQ0FBMEMsWUFBWSxzQkFBc0IsS0FBSyxNQUFNLHVCQUF1QixnQkFBZ0IsTUFBTSxxQkFBcUIsMkJBQTJCLEdBQUcsa0JBQWtCLG1CQUFtQixpQkFBaUIsZUFBZSxtQkFBbUIsd0NBQXdDLGVBQWUsbUJBQW1CLHNCQUFzQixlQUFlLG1CQUFtQix3QkFBd0IsZUFBZSxXQUFXLG1CQUFtQixxREFBcUQsZUFBZSxTQUFTLG9DQUFvQyxnQ0FBZ0MsbUVBQW1FLHlCQUF5QixVQUFVLGtLQUFrSyxVQUFVLGlCQUFpQix5QkFBeUIsWUFBWSx3QkFBd0IsZUFBZSw2R0FBNkcsZ0JBQWdCLDRDQUE0QywwQkFBMEIsV0FBVyxHQUFHLHNDQUFzQyxlQUFlLDRCQUE0Qix1QkFBdUIsR0FBRyxPQUFPLGFBQWEsY0FBYyxnQ0FBZ0MsRUFBRSxVQUFVLE9BQU8saUJBQWlCLGtDQUFrQyx1QkFBdUIsb0JBQW9CLGVBQWUsZ0xBQWdMLGdCQUFnQixpQ0FBaUMsdUJBQXVCLGlCQUFpQix3QkFBd0Isa0RBQWtELDBCQUEwQixRQUFRLGdDQUFnQyxtQkFBbUIsK0JBQStCLG1CQUFtQixrQkFBa0IsY0FBYyxhQUFhLE9BQU8saUJBQWlCLDhCQUE4QixpQkFBaUIsaUNBQWlDLGVBQWUsNmNBQTZjLGlDQUFpQyxnQ0FBZ0MsOEJBQThCLDJMQUEyTCxJQUFJLDRGQUE0RixTQUFTLGFBQWEsZ0NBQWdDLEtBQUssWUFBWSxHQUFHLDBDQUEwQyxzQkFBc0IsNEJBQTRCLHNDQUFzQyxnRUFBZ0Usc0JBQXNCLGtEQUFrRCxxRUFBcUUsNEZBQTRGLGNBQWMsZ0JBQWdCLHdCQUF3QixpQkFBaUIscUJBQXFCLG1CQUFtQixxQkFBcUIsZ0JBQWdCLFNBQVMsZ0JBQWdCLDBDQUEwQyx3Q0FBd0MscUJBQXFCLHlDQUF5QyxxQkFBcUIsZ0JBQWdCLG9EQUFvRCxnQkFBZ0Isb0NBQW9DLGtCQUFrQixxQkFBcUIsa0JBQWtCLDREQUE0RCxzQkFBc0IscURBQXFELGtCQUFrQixpQkFBaUIsa0JBQWtCLGVBQWUsZ0JBQWdCLFdBQVcsb0JBQW9CLHNDQUFzQyxvQkFBb0IsdUNBQXVDLE9BQU8sc0JBQXNCLHlEQUF5RCwwREFBMEQsU0FBUywwQ0FBMEMsNkJBQTZCLDRHQUE0Ryw2Q0FBNkMsMktBQTJLLHlCQUF5QixtQ0FBbUMsS0FBSyxzQkFBc0IsbUJBQW1CLHFDQUFxQyxnQkFBZ0IsZ0JBQWdCLFVBQVUsSUFBSSw4Q0FBOEMsaUNBQWlDLFlBQVksSUFBSSxLQUFLLGdCQUFnQixrQkFBa0IsbUJBQW1CLFNBQVMsc0NBQXNDLFlBQVksR0FBRyxvQ0FBb0MsZ0NBQWdDLFNBQVMsZUFBZSxVQUFVLDJEQUEyRCw2QkFBNkIsaUJBQWlCLDZEQUE2RCw2REFBNkQsNERBQTRELGdUQUFnVCxjQUFjLHdDQUF3QyxjQUFjLGdFQUFnRSxjQUFjLCtDQUErQyxLQUFLLDhCQUE4QixNQUFNLDZEQUE2RCxjQUFjLEdBQUcsY0FBYyxjQUFjLGdEQUFnRCxLQUFLLFdBQVcsMEJBQTBCLEVBQUUsS0FBSyxZQUFZLHFCQUFxQiw0QkFBNEIsR0FBRywyR0FBMkcsdUVBQXVFLHVCQUF1QixFQUFFLFFBQVEsRUFBRSxPQUFPLGdCQUFnQixpQ0FBaUMsdUtBQXVLLGdCQUFnQix5Q0FBeUMsMkVBQTJFLG1CQUFtQixZQUFZLG1CQUFtQixpRUFBaUUsa0JBQWtCLHFDQUFxQyx5Q0FBeUMsMEJBQTBCLG1CQUFtQixtQkFBbUIsdUJBQXVCLFFBQVEsSUFBSSxLQUFLLDJCQUEyQixrQkFBa0IscUJBQXFCLG9CQUFvQixNQUFNLGtDQUFrQyx5Q0FBeUMsK0ZBQStGLG1CQUFtQixpREFBaUQsaUJBQWlCLCtDQUErQyxVQUFVLHVCQUF1QixnQkFBZ0IsYUFBYSxjQUFjLGNBQWMsMkNBQTJDLHdCQUF3QixVQUFVLG1NQUFtTSxzQ0FBc0MsYUFBYSxTQUFTLGVBQWUsT0FBTyxvTkFBb04sd0JBQXdCLGdCQUFnQixvQkFBb0IsU0FBUyx5REFBeUQsZ0JBQWdCLGNBQWMsdUhBQXVILEVBQUUsMENBQTBDLGNBQWMsYUFBYSwrQ0FBK0MsdURBQXVELFdBQVcsMENBQTBDLHlDQUF5QyxTQUFTLG1CQUFtQixxQkFBcUIsbUJBQW1CLGtEQUFrRCxVQUFVLHNCQUFzQixjQUFjLHlCQUF5Qix1QkFBdUIscUJBQXFCLHdGQUF3RiwrQkFBK0IsdUJBQXVCLHFGQUFxRixnQ0FBZ0MsMEJBQTBCLHlEQUF5RCxtQkFBbUIsbUNBQW1DLEdBQUcsNkJBQTZCLDJCQUEyQixJQUFJLHdCQUF3QixxQkFBcUIsS0FBSyxVQUFVLGtCQUFrQixxQkFBcUIsa0JBQWtCLGFBQWEsYUFBYSxjQUFjLG1CQUFtQixtQ0FBbUMsZ0JBQWdCLG1CQUFtQixtQkFBbUIsY0FBYyw0Q0FBNEMsK0JBQStCLHFCQUFxQiwwQ0FBMEMsZ0VBQWdFLGNBQWMseUNBQXlDLGlFQUFpRSxjQUFjLHdDQUF3QyxnRUFBZ0UsY0FBYyxvQ0FBb0Msa0RBQWtELDBFQUEwRSxjQUFjLG1DQUFtQyxrREFBa0Qsc0VBQXNFLGNBQWMsc0JBQXNCLGtEQUFrRCxrRUFBa0UsZ0JBQWdCLHFCQUFxQixrQkFBa0IsK0JBQStCLHNEQUFzRCxjQUFjLDZCQUE2QixrREFBa0QsMERBQTBELGdCQUFnQixxQkFBcUIsa0JBQWtCLHNDQUFzQyxzREFBc0QsY0FBYyxvQ0FBb0Msa0RBQWtELFFBQVEsNENBQTRDLGNBQWMsZUFBZSxnQkFBZ0Isb0NBQW9DLDJCQUEyQixJQUFJLGNBQWMsU0FBUyxrQkFBa0IseUNBQXlDLGtEQUFrRCxXQUFXLFdBQVcsNERBQTRELFdBQVcsK1hBQStYLGdDQUFnQyxrQkFBa0Isb0dBQW9HLG9CQUFvQixNQUFNLG9DQUFvQyxvREFBb0QsZ0xBQWdMLGlCQUFpQiw0SkFBNEosdUJBQXVCLFNBQVMsY0FBYyxlQUFlLHFCQUFxQixtQkFBbUIscUJBQXFCLGFBQWEsNkJBQTZCLGdCQUFnQiwyRUFBMkUsa0JBQWtCLGtCQUFrQixnQ0FBZ0MsTUFBTSxJQUFJLDZDQUE2QyxFQUFFLFdBQVcsY0FBYyxTQUFTLDBDQUEwQyxTQUFTLGFBQWEsU0FBUyw0QkFBNEIsU0FBUyxnQkFBZ0IsU0FBUyxlQUFlLFNBQVMsZUFBZSw2QkFBNkIsZUFBZSxzRkFBc0YsVUFBVSwrQkFBK0IsNkJBQTZCLG1DQUFtQyx1REFBdUQsZUFBZSw2R0FBNkcsdUJBQXVCLGlCQUFpQixVQUFVLDBCQUEwQix5QkFBeUIsdUJBQXVCLHdCQUF3QixzQkFBc0IsMERBQTBELGlCQUFpQixVQUFVLDBCQUEwQix5QkFBeUIsdUJBQXVCLHdCQUF3QiwwREFBMEQscUJBQXFCLFVBQVUsOEJBQThCLDJCQUEyQiw0QkFBNEIsMERBQTBELGtCQUFrQixVQUFVLDZCQUE2QiwwQkFBMEIsMkJBQTJCLDJEQUEyRCxpQkFBaUIsVUFBVSwwQkFBMEIseUJBQXlCLHVCQUF1Qix3QkFBd0Isc0JBQXNCLDBEQUEwRCxxQkFBcUIsVUFBVSw4QkFBOEIsMkJBQTJCLDRCQUE0QiwyREFBMkQsaUJBQWlCLFVBQVUsMEJBQTBCLHlCQUF5Qix1QkFBdUIsd0JBQXdCLHNCQUFzQiwwREFBMEQsZUFBZSxnRUFBZ0UsZ0VBQWdFLGNBQWMsZUFBZSxtQkFBbUIsb0JBQW9CLGVBQWUsc0ZBQXNGLFVBQVUsb0RBQW9ELGtEQUFrRCx1REFBdUQsZUFBZSxrRkFBa0YsZ0JBQWdCLGFBQWEsb0dBQW9HLE9BQU8sMkpBQTJKLFdBQVcsa0JBQWtCLCtKQUErSixnQkFBZ0IsNkpBQTZKLG9CQUFvQixXQUFXLGtCQUFrQiwrSkFBK0osZ0JBQWdCLDhKQUE4Six1Q0FBdUMsZ0JBQWdCLGdJQUFnSSx5QkFBeUIsZ0xBQWdMLHdCQUF3QiwyQkFBMkIsOEJBQThCLFdBQVcsc0lBQXNJLFFBQVEsaVJBQWlSLEtBQUsseVhBQXlYLGlDQUFpQyxlQUFlLHVtQkFBdW1CLFVBQVUsMEJBQTBCLHlCQUF5Qix1QkFBdUIsd0JBQXdCLDBEQUEwRCx1REFBdUQsOEJBQThCLG9CQUFvQixVQUFVLDBCQUEwQix5QkFBeUIsdUJBQXVCLHdCQUF3QiwwREFBMEQsTUFBTSxlQUFlLG1CQUFtQiw4QkFBOEIsY0FBYyxlQUFlLHlCQUF5QixlQUFlLGlCQUFpQixVQUFVLHFDQUFxQyxvQkFBb0IsUUFBUSw4QkFBOEIseUJBQXlCLDBCQUEwQix5REFBeUQsR0FBRyxZQUFZLG9DQUFvQyxJQUFJLGdDQUFnQyxhQUFhLDBDQUEwQyw0R0FBNEcsYUFBYSxlQUFlLDBDQUEwQywyR0FBMkcsWUFBWSxlQUFlLDJEQUEyRCxzRUFBc0UsV0FBVyxlQUFlLDJCQUEyQixvRUFBb0UseUVBQXlFLG1DQUFtQyxrQ0FBa0Msa0VBQWtFLGlEQUFpRCwyR0FBMkcsWUFBWSxlQUFlLDZDQUE2Qyw2R0FBNkcsYUFBYSxlQUFlLEtBQUssY0FBYyxzakJBQXNqQiw0RUFBNEUsY0FBYyx5REFBeUQsWUFBWSxtQkFBbUIsS0FBSyxtQkFBbUIsc0VBQXNFLFNBQVMsMEJBQTBCLGlCQUFpQixxQkFBcUIsaUNBQWlDLHNDQUFzQyw0QkFBNEIsdURBQXVELHNCQUFzQixTQUFTLGVBQWUsWUFBWSxtQkFBbUIsS0FBSyx5Q0FBeUMsMENBQTBDLGFBQWEsc0lBQXNJLGdFQUFnRSxHQUFHLFNBQVMsbUJBQW1CLHlDQUF5QyxrREFBa0QsV0FBVyxlQUFlLHVCQUF1QixlQUFlLHFHQUFxRyxvQkFBb0Isd0JBQXdCLG9CQUFvQixZQUFZLGtCQUFrQixRQUFRLFdBQVcsd0NBQXdDLFNBQVMsTUFBTSxpQ0FBaUMsc0NBQXNDLFFBQVEsV0FBVyx5RkFBeUYsU0FBUyxPQUFPLG1DQUFtQyxzQkFBc0IsMkRBQTJELElBQUksc0NBQXNDLGtDQUFrQyxZQUFZLEVBQUUsT0FBTyxvR0FBb0csR0FBRyxJQUFJLGVBQWUsbUJBQW1CLGlDQUFpQyxpQkFBaUIsb0dBQW9HLG1CQUFtQixNQUFNLHFDQUFxQyxvREFBb0QsaUxBQWlMLGdCQUFnQiw0SkFBNEosR0FBRyxpQkFBaUIsb0NBQW9DLDJCQUEyQixJQUFJLGNBQWMsU0FBUyxpQkFBaUIsd0JBQXdCLGlCQUFpQiw4QkFBOEIsbUJBQW1CLFNBQVMsWUFBWSxVQUFVLDhCQUE4QixvR0FBb0csU0FBUyxjQUFjLCtEQUErRCx3RkFBd0YsZUFBZSwwSkFBMEosNENBQTRDLHFEQUFxRCwwSkFBMEoscUNBQXFDLDJHQUEyRyxxQ0FBcUMsc0JBQXNCLG1CQUFtQixvQkFBb0IsNERBQTRELHNCQUFzQixTQUFTLGNBQWMsb0xBQW9MLHlIQUF5SCxpQkFBaUIscUJBQXFCLGlDQUFpQyxzQ0FBc0MsNEJBQTRCLHVEQUF1RCxzQkFBc0IsU0FBUyxlQUFlLFlBQVksbUJBQW1CLEtBQUsseUNBQXlDLDBDQUEwQyxhQUFhLHNJQUFzSSxnRUFBZ0UsR0FBRyxTQUFTLG1CQUFtQix5Q0FBeUMsa0RBQWtELFdBQVcsY0FBYyx5REFBeUQsWUFBWSxtQkFBbUIsS0FBSyxtQkFBbUIsc0VBQXNFLFNBQVMsMEJBQTBCLGVBQWUsa01BQWtNLG9CQUFvQix3QkFBd0Isb0JBQW9CLFlBQVksa0JBQWtCLFFBQVEsV0FBVyx3Q0FBd0MsU0FBUyxNQUFNLGlDQUFpQyxzQ0FBc0MsUUFBUSxXQUFXLHlGQUF5RixTQUFTLGdCQUFnQixLQUFLLE1BQU0sV0FBVywrQkFBK0IsNEJBQTRCLDhDQUE4QyxpQkFBaUIsTUFBTSw2QkFBNkIscUNBQXFDLElBQUksZUFBZSxrRkFBa0YsZ0JBQWdCLGFBQWEsb0dBQW9HLE9BQU8saUJBQWlCLHFCQUFxQixpQ0FBaUMsc0NBQXNDLDRCQUE0Qix1REFBdUQsc0JBQXNCLFNBQVMsZUFBZSxZQUFZLG1CQUFtQixLQUFLLHlDQUF5QywwQ0FBMEMsYUFBYSxzSUFBc0ksZ0VBQWdFLEdBQUcsU0FBUyxpQkFBaUIsWUFBWSxXQUFXLEtBQUssV0FBVywrR0FBK0csaUJBQWlCLDJFQUEyRSx1QkFBdUIsU0FBUyxlQUFlLG9HQUFvRyxTQUFTLGVBQWUseUVBQXlFLDZDQUE2QyxPQUFPLG1CQUFtQix5Q0FBeUMsa0RBQWtELFdBQVcsaUJBQWlCLHFEQUFxRCxpQkFBaUIsMENBQTBDLDhCQUE4QixnQ0FBZ0MsSUFBSSxxQkFBcUIsT0FBTyxFQUFFLHVLQUF1SyxFQUFFLG1CQUFtQixlQUFlLDRHQUE0RywwQ0FBMEMsYUFBYSxxQ0FBcUMsdUNBQXVDLFlBQVksYUFBYSxNQUFNLGtDQUFrQyw0REFBNEQsbUNBQW1DLHFDQUFxQyxJQUFJLGdGQUFnRixPQUFPLFNBQVMsVUFBVSxjQUFjLGNBQWMsTUFBTSwyQkFBMkIsbUNBQW1DLCtCQUErQixxQkFBcUIsd0RBQXdELDhGQUE4RixhQUFhLFNBQVMsRUFBRSxhQUFhLE1BQU0sZUFBZSw4RUFBOEUsU0FBUyw4Q0FBOEMsSUFBSSxzQkFBc0IsMkRBQTJELElBQUksZUFBZSxtREFBbUQsK0RBQStELGtQQUFrUCxPQUFPLDhCQUE4QixrUkFBa1IsbUNBQW1DLHNEQUFzRCxnQ0FBZ0MseUJBQXlCLGNBQWMsdUJBQXVCLFlBQVksMkJBQTJCLFlBQVksdUJBQXVCLDZCQUE2QixvQkFBb0IsVUFBVSxzRUFBc0UsWUFBWSxJQUFJLGNBQWMscUJBQXFCLE9BQU8sRUFBRSwySEFBMkgsRUFBRSxnQ0FBZ0MsaUJBQWlCLHFCQUFxQixpQ0FBaUMsc0NBQXNDLDRCQUE0Qix1REFBdUQsc0JBQXNCLFNBQVMsZUFBZSxZQUFZLG1CQUFtQixLQUFLLHlDQUF5QywwQ0FBMEMsYUFBYSxzSUFBc0ksZ0VBQWdFLEdBQUcsU0FBUyxtQkFBbUIseUNBQXlDLGtEQUFrRCxXQUFXLGNBQWMseURBQXlELFlBQVksbUJBQW1CLEtBQUssbUJBQW1CLHNFQUFzRSxTQUFTLDBCQUEwQix1REFBdUQsZUFBZSxpRUFBaUUsb0JBQW9CLHdCQUF3QixvQkFBb0IsWUFBWSxrQkFBa0IsUUFBUSxXQUFXLHdDQUF3QyxTQUFTLE1BQU0saUNBQWlDLHNDQUFzQyxRQUFRLFdBQVcseUZBQXlGLFNBQVMsMkJBQTJCLGlDQUFpQyxJQUFJLDZFQUE2RSxhQUFhLGlCQUFpQixxQkFBcUIsaUNBQWlDLHNDQUFzQyw0QkFBNEIsdURBQXVELHNCQUFzQixTQUFTLG1CQUFtQix5Q0FBeUMsa0RBQWtELFdBQVcsY0FBYyx5REFBeUQsWUFBWSxtQkFBbUIsS0FBSyxtQkFBbUIsc0VBQXNFLFNBQVMsMEJBQTBCLGVBQWUscUNBQXFDLGlDQUFpQyxJQUFJLGtIQUFrSCxHQUFHLGVBQWUsZ0NBQWdDLHlDQUF5QywwQkFBMEIscUJBQXFCLE9BQU8sRUFBRSxvQkFBb0IsMkJBQTJCLFlBQVksbUJBQW1CLEtBQUsseUNBQXlDLDBDQUEwQyxhQUFhLHNJQUFzSSxnRUFBZ0UsR0FBRyxTQUFTLEdBQUcsS0FBSyxnQ0FBZ0MsaUJBQWlCLHFCQUFxQixpQ0FBaUMsc0NBQXNDLDRCQUE0Qix1REFBdUQsc0JBQXNCLFNBQVMsZUFBZSxZQUFZLG1CQUFtQixLQUFLLHlDQUF5QywwQ0FBMEMsYUFBYSxzSUFBc0ksZ0VBQWdFLEdBQUcsU0FBUyxtQkFBbUIseUNBQXlDLGtEQUFrRCxXQUFXLGNBQWMseURBQXlELFlBQVksbUJBQW1CLEtBQUssbUJBQW1CLHNFQUFzRSxTQUFTLDBCQUEwQixrREFBa0QsZUFBZSxpRUFBaUUsb0JBQW9CLHdCQUF3QixvQkFBb0IsWUFBWSxrQkFBa0IsUUFBUSxXQUFXLHdDQUF3QyxTQUFTLE1BQU0saUNBQWlDLHNDQUFzQyxRQUFRLFdBQVcseUZBQXlGLFNBQVMsMkJBQTJCLGlDQUFpQyxJQUFJLDRFQUE0RSxVQUFVLGlCQUFpQixxQkFBcUIsaUNBQWlDLHNDQUFzQyw0QkFBNEIsdURBQXVELHNCQUFzQixTQUFTLG1CQUFtQix5Q0FBeUMsa0RBQWtELFdBQVcsY0FBYyx5REFBeUQsWUFBWSxtQkFBbUIsS0FBSyxtQkFBbUIsc0VBQXNFLFNBQVMsMEJBQTBCLGVBQWUsb0NBQW9DLGlDQUFpQyxJQUFJLHlFQUF5RSxlQUFlLGtEQUFrRCx1Q0FBdUMsR0FBRyxlQUFlLGdDQUFnQyx3Q0FBd0MsMEJBQTBCLHFCQUFxQixPQUFPLEVBQUUsb0JBQW9CLDJCQUEyQixZQUFZLG1CQUFtQixLQUFLLHlDQUF5QywwQ0FBMEMsYUFBYSxzSUFBc0ksZ0VBQWdFLEdBQUcsU0FBUyxHQUFHLEtBQUssbURBQW1ELGlCQUFpQixxQkFBcUIsaUNBQWlDLHNDQUFzQyw0QkFBNEIsdURBQXVELHNCQUFzQixTQUFTLGVBQWUsWUFBWSxtQkFBbUIsS0FBSyx5Q0FBeUMsMENBQTBDLGFBQWEsc0lBQXNJLGdFQUFnRSxHQUFHLFNBQVMsbUJBQW1CLHlDQUF5QyxrREFBa0QsV0FBVyxjQUFjLHlEQUF5RCxZQUFZLG1CQUFtQixLQUFLLG1CQUFtQixzRUFBc0UsU0FBUywwQkFBMEIsa0RBQWtELGVBQWUsd0dBQXdHLG9CQUFvQix3QkFBd0Isb0JBQW9CLFlBQVksa0JBQWtCLFFBQVEsV0FBVyx3Q0FBd0MsU0FBUyxNQUFNLGlDQUFpQyxzQ0FBc0MsUUFBUSxXQUFXLHlGQUF5RixTQUFTLDJCQUEyQixpQ0FBaUMsSUFBSSx1RkFBdUYsVUFBVSxpQkFBaUIscUJBQXFCLGlDQUFpQyxzQ0FBc0MsNEJBQTRCLHVEQUF1RCxzQkFBc0IsU0FBUyxlQUFlLFlBQVksbUJBQW1CLEtBQUsseUNBQXlDLDBDQUEwQyxhQUFhLHNJQUFzSSxnRUFBZ0UsR0FBRyxTQUFTLG1CQUFtQix5Q0FBeUMsa0RBQWtELFdBQVcsY0FBYyx5REFBeUQsWUFBWSxtQkFBbUIsS0FBSyxtQkFBbUIsc0VBQXNFLFNBQVMsMEJBQTBCLGVBQWUsMkJBQTJCLGlDQUFpQyxJQUFJLHdFQUF3RSxlQUFlLGtEQUFrRCx5Q0FBeUMsR0FBRyxlQUFlLGdDQUFnQyxzQ0FBc0MsMEJBQTBCLHFCQUFxQixPQUFPLEVBQUUsOENBQThDLHVCQUF1QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUZBQW1GLGlCQUFpQixxQkFBcUIsaUNBQWlDLHNDQUFzQyw0QkFBNEIsdURBQXVELHNCQUFzQixTQUFTLGVBQWUsWUFBWSxtQkFBbUIsS0FBSyx5Q0FBeUMsMENBQTBDLGFBQWEsc0lBQXNJLGdFQUFnRSxHQUFHLFNBQVMsbUJBQW1CLHlDQUF5QyxrREFBa0QsV0FBVyxjQUFjLHlEQUF5RCxZQUFZLG1CQUFtQixLQUFLLG1CQUFtQixzRUFBc0UsU0FBUywwQkFBMEIsK0NBQStDLGVBQWUsNElBQTRJLG9CQUFvQix3QkFBd0Isb0JBQW9CLFlBQVksa0JBQWtCLFFBQVEsV0FBVyx3Q0FBd0MsU0FBUyxNQUFNLGlDQUFpQyxzQ0FBc0MsUUFBUSxXQUFXLHlGQUF5RixTQUFTLDJCQUEyQixpQ0FBaUMsSUFBSSx3TEFBd0wsVUFBVSxxQkFBcUIsT0FBTyxFQUFFLG1GQUFtRixFQUFFLHlEQUF5RCxpQkFBaUIscUJBQXFCLGlDQUFpQyxzQ0FBc0MsNEJBQTRCLHVEQUF1RCxzQkFBc0IsU0FBUyxtQkFBbUIseUNBQXlDLGtEQUFrRCxXQUFXLGNBQWMseURBQXlELFlBQVksbUJBQW1CLEtBQUssbUJBQW1CLHNFQUFzRSxTQUFTLDBCQUEwQixlQUFlLDZHQUE2RyxvQkFBb0Isd0JBQXdCLG9CQUFvQixZQUFZLGtCQUFrQixRQUFRLFdBQVcsd0NBQXdDLFNBQVMsTUFBTSxpQ0FBaUMsc0NBQXNDLFFBQVEsV0FBVyx5RkFBeUYsU0FBUyx3RUFBd0UsbUJBQW1CLFdBQVcsTUFBTSxlQUFlLGdFQUFnRSxTQUFTLEdBQUcsaUNBQWlDLElBQUksbUdBQW1HLGVBQWUsa0RBQWtELCtDQUErQyxHQUFHLHlCQUF5QixZQUFZLG1CQUFtQixLQUFLLHlDQUF5QywwQ0FBMEMsYUFBYSxzSUFBc0ksZ0VBQWdFLEdBQUcsU0FBUyxFQUFFLHlGQUF5RixLQUFLLDJFQUEyRSxlQUFlLHVLQUF1SyxLQUFLLE1BQU0sdUNBQXVDLGdDQUFnQyx5REFBeUQsMkJBQTJCLHVCQUF1QiwyQkFBMkIsNkJBQTZCLDZDQUE2QyxJQUFJLGNBQWMsdUhBQXVILGlEQUFpRCxjQUFjLHlEQUF5RCxZQUFZLG1CQUFtQixLQUFLLG1CQUFtQixzRUFBc0UsU0FBUywwQkFBMEIsaUJBQWlCLHFCQUFxQixpQ0FBaUMsc0NBQXNDLDRCQUE0Qix1REFBdUQsc0JBQXNCLFNBQVMsbUJBQW1CLHlDQUF5QyxrREFBa0QsV0FBVyw4QkFBOEIsZUFBZSxrRUFBa0Usb0JBQW9CLHdCQUF3QixvQkFBb0IsWUFBWSxrQkFBa0IsUUFBUSxXQUFXLHdDQUF3QyxTQUFTLE1BQU0saUNBQWlDLHNDQUFzQyxRQUFRLFdBQVcseUZBQXlGLFNBQVMscUJBQXFCLFlBQVksbUJBQW1CLEtBQUsseUNBQXlDLDBDQUEwQyxhQUFhLHNJQUFzSSxnRUFBZ0UsR0FBRyxTQUFTLEVBQUUsYUFBYSx1Q0FBdUMseUNBQXlDLElBQUksb0JBQW9CLGdCQUFnQixlQUFlLGtDQUFrQyxlQUFlLHdIQUF3SCxjQUFjLHVCQUF1Qix3QkFBd0IsZ0JBQWdCLHNDQUFzQyxJQUFJLHVDQUF1QyxTQUFTLHdCQUF3QixtQkFBbUIsNEhBQTRILEdBQUcsK0NBQStDLFdBQVcsa0NBQWtDLE1BQU0sR0FBRyw2QkFBNkIsOEdBQThHLDhDQUE4QyxzQkFBc0IsNkJBQTZCLGlEQUFpRCxFQUFFLElBQUksY0FBYywrRkFBK0YsZUFBZSw2SkFBNkosbUdBQW1HLGNBQWMseURBQXlELFlBQVksbUJBQW1CLEtBQUssbUJBQW1CLHNFQUFzRSxTQUFTLDBCQUEwQixlQUFlLHlIQUF5SCx5Q0FBeUMseUJBQXlCLGdCQUFnQix5R0FBeUcsb0JBQW9CLHdCQUF3QixvQkFBb0IsWUFBWSxrQkFBa0IsUUFBUSxXQUFXLHdDQUF3QyxTQUFTLE1BQU0saUNBQWlDLHNDQUFzQyxRQUFRLFdBQVcseUZBQXlGLFNBQVMsc0NBQXNDLGdDQUFnQyxpREFBaUQsMEJBQTBCLE9BQU8sc0NBQXNDLHlCQUF5Qiw2RkFBNkYsZ0NBQWdDLE9BQU8seUJBQXlCLHVCQUF1Qiw0RUFBNEUsMkJBQTJCLGVBQWUsUUFBUSxjQUFjLGdQQUFnUCx3SEFBd0gsY0FBYyx5REFBeUQsWUFBWSxtQkFBbUIsS0FBSyxtQkFBbUIsc0VBQXNFLFNBQVMsMEJBQTBCLGVBQWUsa0ZBQWtGLGdCQUFnQixhQUFhLG9HQUFvRyxPQUFPLGlCQUFpQiwyRUFBMkUsdUJBQXVCLFNBQVMsZUFBZSxvR0FBb0csU0FBUyxlQUFlLHlFQUF5RSw2Q0FBNkMsT0FBTyxpQkFBaUIscUJBQXFCLGlDQUFpQyxzQ0FBc0MsNEJBQTRCLHVEQUF1RCxzQkFBc0IsU0FBUyxlQUFlLFlBQVksbUJBQW1CLEtBQUsseUNBQXlDLDBDQUEwQyxhQUFhLHNJQUFzSSxnRUFBZ0UsR0FBRyxTQUFTLG1CQUFtQix5Q0FBeUMsa0RBQWtELFdBQVcsaUJBQWlCLG9DQUFvQywyQkFBMkIsSUFBSSxjQUFjLFNBQVMsZ0JBQWdCLDJDQUEyQyw0R0FBNEcsbUJBQW1CLGlDQUFpQyxpQkFBaUIsb0dBQW9HLG1CQUFtQixNQUFNLHFDQUFxQyxvREFBb0QsaUxBQWlMLGdCQUFnQiw0SkFBNEosR0FBRyx1QkFBdUIsaUJBQWlCLCtDQUErQyxtQkFBbUIsdUJBQXVCLDhCQUE4QixZQUFZLGVBQWUseUJBQXlCLGlCQUFpQixvRUFBb0Usa0JBQWtCLDRDQUE0QyxrQkFBa0Isa0JBQWtCLHVDQUF1QyxJQUFJLGtFQUFrRSxTQUFTLE1BQU0sa0JBQWtCLFlBQVksdUJBQXVCLDJCQUEyQixzQkFBc0IsbUJBQW1CLGVBQWUsZ0JBQWdCLGVBQWUsZ0JBQWdCLGNBQWMsbURBQW1ELFlBQVksSUFBSSxlQUFlLGtFQUFrRSw2QkFBNkIsd0NBQXdDLGFBQWEsbUJBQW1CLGtDQUFrQyxnQkFBZ0IsZUFBZSw0R0FBNEcsMENBQTBDLGFBQWEscUNBQXFDLHVDQUF1QyxZQUFZLGFBQWEsTUFBTSxnQ0FBZ0MsNERBQTRELG1DQUFtQyxxQ0FBcUMsSUFBSSxnRkFBZ0YsT0FBTyxTQUFTLFVBQVUsY0FBYyxjQUFjLE1BQU0sMkJBQTJCLG1DQUFtQywrQkFBK0IscUJBQXFCLHdEQUF3RCw4RkFBOEYsYUFBYSxTQUFTLEVBQUUsYUFBYSxNQUFNLGVBQWUsOEVBQThFLFNBQVMsOENBQThDLElBQUksc0JBQXNCLDBEQUEwRCxtR0FBbUcsdURBQXVELHNKQUFzSiwwQkFBMEIseUJBQXlCLE9BQU8saUhBQWlILGNBQWMsd0dBQXdHLHdIQUF3SCxHQUFHLGdEQUFnRCw0QkFBNEIsMkJBQTJCLEVBQUUsdUNBQXVDLHlCQUF5QixtQkFBbUIseUVBQXlFLDRCQUE0Qiw0Q0FBNEMsWUFBWSxrQ0FBa0MsdUJBQXVCLHFHQUFxRyw0QkFBNEIsMENBQTBDLFlBQVksc0NBQXNDLHVFQUF1RSxtQkFBbUIsc0JBQXNCLE1BQU0sc0JBQXNCLGlEQUFpRCxXQUFXLG9CQUFvQiw4QkFBOEIsMEJBQTBCLFlBQVksRUFBRSxRQUFRLFFBQVEsd0NBQXdDLDRDQUE0QyxJQUFJLHlDQUF5QywwR0FBMEcsVUFBVSx1QkFBdUIsc0JBQXNCLG9CQUFvQixxQkFBcUIseURBQXlELEdBQUcsVUFBVSx1Q0FBdUMsd0JBQXdCLHNEQUFzRCxTQUFTLEdBQUcsdUNBQXVDLFlBQVksV0FBVyxFQUFFLEtBQUssZUFBZSxxQ0FBcUMsc0ZBQXNGLDBLQUEwSyxvQkFBb0Isd0JBQXdCLG9CQUFvQixZQUFZLGtCQUFrQixRQUFRLFdBQVcsd0NBQXdDLFNBQVMsTUFBTSxpQ0FBaUMsc0NBQXNDLFFBQVEsV0FBVyx5RkFBeUYsU0FBUywyQ0FBMkMsNkNBQTZDLE9BQU8sRUFBRSwyQkFBMkIsOERBQThELGtDQUFrQyxFQUFFLCtCQUErQixpQ0FBaUMsRUFBRSwwQkFBMEIsd0VBQXdFLHFCQUFxQixFQUFFLDJCQUEyQixpQkFBaUIsb0NBQW9DLEVBQUUsMkJBQTJCLGdEQUFnRCxpQkFBaUIsRUFBRSx3Q0FBd0MsNkJBQTZCLGdDQUFnQyxFQUFFLHNDQUFzQyxnQkFBZ0IsZ0NBQWdDLEVBQUUsMENBQTBDLHVFQUF1RSxrQkFBa0IsVUFBVSxzQkFBc0Isb0JBQW9CLHNCQUFzQixpREFBaUQsSUFBSSx3Q0FBd0MsR0FBRyxFQUFFLHNDQUFzQyw0T0FBNE8sMk5BQTJOLFVBQVUsMENBQTBDLGdDQUFnQyxhQUFhLEtBQUsseUNBQXlDLGdDQUFnQyxhQUFhLEtBQUssZ0VBQWdFLGdDQUFnQyxnQ0FBZ0MsS0FBSyw0T0FBNE8sZ0NBQWdDLDBNQUEwTSxLQUFLLDBEQUEwRCxFQUFFLHdDQUF3QywwQ0FBMEMsaVdBQWlXLDZCQUE2QiwrVkFBK1YsR0FBRyxFQUFFLDhCQUE4QiwrSEFBK0gsZ0NBQWdDLHVHQUF1RyxrREFBa0QsZ0ZBQWdGLG1EQUFtRCxtQkFBbUIsWUFBWSxXQUFXLEtBQUssV0FBVywrR0FBK0cscURBQXFELFlBQVksSUFBSSxjQUFjLGlCQUFpQixxSkFBcUosOERBQThELGNBQWMsOHZDQUE4dkMsWUFBWSxnQkFBZ0IsUUFBUSxzQkFBc0IsMkRBQTJELGlCQUFpQixvREFBb0Qsa0hBQWtILHFDQUFxQyxrQkFBa0IsVUFBVSxlQUFlLHNJQUFzSSwwRUFBMEUsT0FBTyx3REFBd0QsaUJBQWlCLGdCQUFnQixrQkFBa0IsZ0JBQWdCLHNDQUFzQyxTQUFTLEVBQUUsNkJBQTZCLG1CQUFtQixrQ0FBa0MsZUFBZSxrQ0FBa0Msd0NBQXdDLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxFQUFFLElBQUksa0NBQWtDLElBQUksd0NBQXdDLEVBQUUsY0FBYyxFQUFFLEVBQUUsSUFBSSxrQ0FBa0MsSUFBSSx5QkFBeUIsY0FBYyx5QkFBeUIsT0FBTyxpQkFBaUIseUJBQXlCLHdDQUF3QyxVQUFVLDJCQUEyQixLQUFLLGlCQUFpQiw0QkFBNEIsS0FBSyxVQUFVLGdCQUFnQixPQUFPLGlCQUFpQixvREFBb0Qsd0NBQXdDLGVBQWUsNkVBQTZFLEtBQUssa0JBQWtCLHNCQUFzQix1QkFBdUIsMkJBQTJCLGtCQUFrQixtQkFBbUIsZ0dBQWdHLG1CQUFtQixtQkFBbUIsTUFBTSxrQkFBa0IsNkNBQTZDLFdBQVcsK0ZBQStGLElBQUksa0ZBQWtGLG9FQUFvRSxzR0FBc0csc0NBQXNDLEtBQUssc0JBQXNCLHlCQUF5QixLQUFLLHdFQUF3RSwwREFBMEQsaUdBQWlHLElBQUksOEJBQThCLHdCQUF3QiwyS0FBMkssMEZBQTBGLHVCQUF1QixJQUFJLGlCQUFpQix1Q0FBdUMsbUJBQW1CLDREQUE0RCx1QkFBdUIscUVBQXFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxjQUFjLDBCQUEwQixnRUFBZ0UsaUJBQWlCLDZEQUE2RCxrQ0FBa0MsY0FBYyxtQkFBbUIsY0FBYyw2REFBNkQsbUJBQW1CLGdCQUFnQixJQUFJLHVEQUF1RCxVQUFVLGtCQUFrQiw2QkFBNkIsSUFBSSxpQkFBaUIsWUFBWSx1TEFBdUwsMkRBQTJELFdBQVcsdUJBQXVCLDJEQUEyRCxjQUFjLDZDQUE2Qyw4QkFBOEIsMEJBQTBCLGVBQWUscUNBQXFDLHFDQUFxQyxvREFBb0QsS0FBSyw4QkFBOEIsaUJBQWlCLCtCQUErQixFQUFFLDBLQUEwSyxnQkFBZ0IsY0FBYyxrRUFBa0UsRUFBRSwwWkFBMFoseUpBQXlKLE1BQU0sc0VBQXNFLGFBQWEsc0NBQXNDLG1CQUFtQixNQUFNLG1CQUFtQiw4RUFBOEUsZ0RBQWdELG1CQUFtQixpQkFBaUIseURBQXlELGdEQUFnRCxxQkFBcUIsNkJBQTZCLFNBQVMsRUFBRSxnQkFBZ0IsbUNBQW1DLDJEQUEyRCxvQ0FBb0MsMkJBQTJCLEVBQUUsS0FBSyx5REFBeUQsb0lBQW9JLFNBQVMsMkNBQTJDLG9DQUFvQywyQkFBMkIsRUFBRSxvQ0FBb0MsU0FBUyxpQkFBaUIsZ0ZBQWdGLDBGQUEwRix5QkFBeUIsa0VBQWtFLGlCQUFpQixxRkFBcUYsZUFBZSwwQkFBMEIsZUFBZSxxREFBcUQsb0JBQW9CLGlCQUFpQixzQ0FBc0MsK0JBQStCLG1CQUFtQix1Q0FBdUMsc0RBQXNELGtFQUFrRSw4Q0FBOEMscUNBQXFDLG1DQUFtQyxLQUFLLHlCQUF5QixZQUFZLEVBQUUsRUFBRSw2QkFBNkIsMkNBQTJDLGdFQUFnRSxJQUFJLGVBQWUsb0VBQW9FLHNLQUFzSyxNQUFNLEVBQUUsVUFBVSxrSUFBa0ksU0FBUyxxQ0FBcUMsOEJBQThCLFNBQVMsbUJBQW1CLHVGQUF1Riw0QkFBNEIsR0FBRyxpQkFBaUIsZ0ZBQWdGLEVBQUUsRUFBRSx1Q0FBdUMsWUFBWSxvQkFBb0IsS0FBSyx5QkFBeUIsaUZBQWlGLFNBQVMsa0JBQWtCLFNBQVMsS0FBSyxpQkFBaUIsb0JBQW9CLG1CQUFtQiw4QkFBOEIsa0JBQWtCLG9CQUFvQixtQ0FBbUMsZ0VBQWdFLHdIQUF3SCxTQUFTLFlBQVksU0FBUyw4S0FBOEssb0JBQW9CLFlBQVksV0FBVywrQ0FBK0MsV0FBVyxnQkFBZ0IsSUFBSSxzQkFBc0IsZUFBZSw4Q0FBOEMseUJBQXlCLGlCQUFpQixjQUFjLGdDQUFnQyx5RUFBeUUsNENBQTRDLHNEQUFzRCxFQUFFLG1DQUFtQywrREFBK0QsZ0JBQWdCLGlCQUFpQixNQUFNLGlCQUFpQiwwQ0FBMEMsa0ZBQWtGLDhDQUE4QyxpQkFBaUIsY0FBYywwQ0FBMEMsK0RBQStELHlDQUF5QyxpQkFBaUIsVUFBVSx3Q0FBd0MsK0JBQStCLGdEQUFnRCxVQUFVLHdDQUF3QyxnQ0FBZ0Msc0JBQXNCLDhDQUE4QywwQkFBMEIsWUFBWSxzQ0FBc0MsU0FBUyxpQkFBaUIsMERBQTBELFNBQVMsZ0ZBQWdGLHNCQUFzQixtRUFBbUUsa0JBQWtCLDJDQUEyQyw4REFBOEQsNkJBQTZCLGFBQWEsK0JBQStCLG1CQUFtQiw0QkFBNEIsMkNBQTJDLG1GQUFtRixzQ0FBc0MsU0FBUyxlQUFlLHNCQUFzQix1Q0FBdUMsU0FBUyxzRkFBc0YsNkRBQTZELFFBQVEsc0NBQXNDLFdBQVcsNkZBQTZGLFNBQVMsMkNBQTJDLDBCQUEwQixZQUFZLHNDQUFzQyxTQUFTLHFFQUFxRSwyREFBMkQsYUFBYSxJQUFJLHlGQUF5RixxRUFBcUUsaUNBQWlDLGlEQUFpRCxJQUFJLHNDQUFzQyw0Q0FBNEMsRUFBRSxXQUFXLEtBQUssSUFBSTtBQUNscHNtQjtBQUNBLGdCQUFnQixFQUFFLFFBQVE7QUFDMUIsc0JBQXNCLEVBQUUsUUFBUTtBQUNoQyxXQUFXLEVBQUUsUUFBUTs7QUFFckI7QUFDQSxJQUFJO0FBQ0osSUFBSTtBQUNKLElBQUk7QUFDSixJQUFJOztBQUVKO0FBQ0E7QUFDQSxTQUFTLEVBQUUsUUFBUTtBQUNuQjtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsRUFBRSxRQUFRO0FBQzNCLGlCQUFpQixFQUFFLFFBQVE7QUFDM0I7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0IsRUFBRSxRQUFRO0FBQzVCLG9CQUFvQixFQUFFLFFBQVE7QUFDOUIsYUFBYSxFQUFFLFFBQVE7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsYUFBYSxFQUFFLFFBQVEsUUFBUSxZQUFZO0FBQzNDLEVBQUUsc0RBQXNELElBQUksZUFBZSwyREFBMkQsSUFBSSxpQkFBaUIsMERBQTBELElBQUksZ0JBQWdCLEdBQUcsZ0JBQWdCLHNDQUFzQyxTQUFTLHFGQUFxRixnQkFBZ0IsV0FBVyxzREFBc0QsZUFBZSw0REFBNEQsZUFBZSx3Q0FBd0MsaUJBQWlCLHNCQUFzQixnQkFBZ0IsNEJBQTRCLGFBQWEsa0JBQWtCO0FBQ3JzQixpQkFBaUIsRUFBRSxRQUFRLE1BQU0sWUFBWSxFQUFFLFdBQVc7QUFDMUQsbUJBQW1CLEVBQUUsUUFBUTtBQUM3QjtBQUNBLGlCQUFpQixFQUFFLFFBQVEsTUFBTSxhQUFhLEVBQUUsVUFBVTtBQUMxRCxtQkFBbUIsRUFBRSxRQUFRO0FBQzdCO0FBQ0EsaUJBQWlCLEVBQUUsUUFBUSxNQUFNLFdBQVcsRUFBRSxZQUFZO0FBQzFELG1CQUFtQixFQUFFLFFBQVE7QUFDN0IsTUFBTSxvQkFBb0I7QUFDMUIsdUJBQXVCLEVBQUUsUUFBUTtBQUNqQztBQUNBLHVCQUF1QixFQUFFLFFBQVE7QUFDakMsTUFBTSxxQkFBcUI7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsTUFBTSxtQkFBbUI7QUFDekIsb0JBQW9CLEVBQUUsUUFBUTtBQUM5QixzQkFBc0IsRUFBRSxRQUFROztBQUVoQztBQUNBLHNCQUFzQixFQUFFLFFBQVE7QUFDaEM7O0FBRUE7QUFDQSxzQkFBc0IsRUFBRSxRQUFRO0FBQ2hDOztBQUVBO0FBQ0Esd0JBQXdCLEVBQUUsUUFBUTtBQUNsQztBQUNBO0FBQ0Esb0JBQW9CLEVBQUUsUUFBUTtBQUM5QixzQkFBc0IsRUFBRSxRQUFRO0FBQ2hDLGVBQWUsRUFBRSxRQUFROztBQUV6QjtBQUNBLHNCQUFzQixFQUFFLFFBQVE7QUFDaEM7O0FBRUE7QUFDQSxzQkFBc0IsRUFBRSxRQUFRO0FBQ2hDOztBQUVBO0FBQ0Esd0JBQXdCLEVBQUUsUUFBUTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRSxRQUFROztBQUV6QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0IsRUFBRSxRQUFRO0FBQ2xDO0FBQ0EsUUFBUSxzQkFBc0IsbUVBQW1FLGtCQUFrQiwyQ0FBMkMsOERBQThELDZCQUE2QixhQUFhLCtCQUErQixtQkFBbUIsNEJBQTRCLDJDQUEyQyxtRkFBbUYsc0NBQXNDLFNBQVMsNEJBQTRCLHNCQUFzQiw4Q0FBOEMsMEJBQTBCLFlBQVksc0NBQXNDLFNBQVMseUJBQXlCLGlEQUFpRCw4Q0FBOEMsT0FBTyx1Q0FBdUMsb0RBQW9ELEVBQUUsc0JBQXNCLG9CQUFvQixFQUFFLEdBQUc7QUFDajhCO0FBQ0EsZ0JBQWdCLEVBQUUsUUFBUTtBQUMxQiw2QkFBNkIsRUFBRSxRQUFRO0FBQ3ZDLGFBQWEsRUFBRSxRQUFRLGdCQUFnQixFQUFFLEVBQUUsUUFBUTtBQUNuRCxNQUFNLEVBQUUsUUFBUSxlQUFlO0FBQy9CO0FBQ0EsSUFBSTtBQUNKLFNBQVMsRUFBRSxRQUFRO0FBQ25CO0FBQ0EsYUFBYSxFQUFFLFFBQVEsZUFBZSxFQUFFLEVBQUUsUUFBUSxlQUFlO0FBQ2pFLE1BQU0sRUFBRSxRQUFRO0FBQ2hCO0FBQ0EsRUFBRSxxQkFBcUIsOENBQThDLDBCQUEwQixZQUFZLHNDQUFzQyxTQUFTLHNEQUFzRCxtR0FBbUcsNENBQTRDLDBDQUEwQywyREFBMkQsSUFBSSxtQ0FBbUMsR0FBRyx3R0FBd0csUUFBUSxrQ0FBa0MsaUNBQWlDLEVBQUUsc0NBQXNDLHVRQUF1USxlQUFlLG9FQUFvRSxFQUFFLHVCQUF1QixpQkFBaUIsa0NBQWtDLG9CQUFvQixFQUFFLG1EQUFtRCxxR0FBcUcsb0JBQW9CLGtEQUFrRCxHQUFHLElBQUksd0RBQXdELDhCQUE4QixFQUFFLDBCQUEwQixvQkFBb0IsRUFBRSxJQUFJLEdBQUcscUVBQXFFO0FBQzlqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsRUFBRSxRQUFRO0FBQ3JCLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsRUFBRSxjQUFjO0FBQzlCLFNBQVMsRUFBRSxjQUFjO0FBQ3pCLGFBQWEsRUFBRSxTQUFTO0FBQ3hCO0FBQ0EsZ0JBQWdCLEVBQUUsUUFBUTtBQUMxQiwwQkFBMEIsRUFBRSxRQUFRO0FBQ3BDLDZCQUE2QixFQUFFLFFBQVE7QUFDdkM7QUFDQTtBQUNBLFNBQVMsRUFBRSxRQUFRO0FBQ25CO0FBQ0EsaUJBQWlCLEVBQUUsUUFBUTtBQUMzQjtBQUNBLGFBQWEsRUFBRSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0JBQXdCLEVBQUUsUUFBUTtBQUNsQztBQUNBOztBQUVBO0FBQ0Esd0JBQXdCLEVBQUUsUUFBUTtBQUNsQyw0QkFBNEIsRUFBRSxRQUFRO0FBQ3RDLCtCQUErQixFQUFFLFFBQVE7QUFDekM7O0FBRUE7QUFDQSw0QkFBNEIsRUFBRSxRQUFRO0FBQ3RDLCtCQUErQixFQUFFLFFBQVE7QUFDekM7QUFDQSxFQUFFLHNCQUFzQixtRUFBbUUsa0JBQWtCLDJDQUEyQyw4REFBOEQsNkJBQTZCLGFBQWEsK0JBQStCLG1CQUFtQiw0QkFBNEIsMkNBQTJDLG1GQUFtRixzQ0FBc0MsU0FBUyxjQUFjLGNBQWMsTUFBTSxzQ0FBc0MsU0FBUyxzRUFBc0UsbUNBQW1DLHNCQUFzQiw4Q0FBOEMsMEJBQTBCLFlBQVksc0NBQXNDLFNBQVMsNEJBQTRCLG1HQUFtRyx1QkFBdUIsZ0JBQWdCLDJCQUEyQiwrQkFBK0IsS0FBSyxnRUFBZ0UsaUNBQWlDLEtBQUssbUdBQW1HLFFBQVEsRUFBRSxzRUFBc0UsNEJBQTRCLGlDQUFpQywyQkFBMkIsK0JBQStCLFFBQVEsMEJBQTBCLHlDQUF5Qyx3QkFBd0Isc0NBQXNDLElBQUksc0JBQXNCLHFEQUFxRCxFQUFFLG1GQUFtRix3QkFBd0IsRUFBRSxzQ0FBc0MsSUFBSSw2QkFBNkIsMEJBQTBCLG9DQUFvQyxFQUFFLHNFQUFzRSxFQUFFLG1EQUFtRCwrRUFBK0UseUNBQXlDLDZFQUE2RSxHQUFHLEdBQUcsSUFBSSxnRkFBZ0YsOENBQThDLGdOQUFnTiwrQkFBK0Isd0NBQXdDLEVBQUUsR0FBRyxHQUFHLFNBQVMsK0pBQStKO0FBQ2h5RjtBQUNBLGFBQWEsRUFBRSxlQUFlO0FBQzlCO0FBQ0EsaUJBQWlCLEVBQUUsUUFBUTtBQUMzQixpQkFBaUIsRUFBRSxRQUFRO0FBQzNCO0FBQ0Esa0JBQWtCLEVBQUUsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsZ0JBQWdCLHNDQUFzQyxTQUFTLGdDQUFnQyxnQkFBZ0Isb0NBQW9DLHNDQUFzQywrRkFBK0YsYUFBYSxvR0FBb0csaUJBQWlCLEVBQUUsNkdBQTZHLFNBQVMsd0RBQXdELHNCQUFzQiw4Q0FBOEMsMEJBQTBCLFlBQVksc0NBQXNDLFNBQVMsMkJBQTJCLHFGQUFxRixzQ0FBc0Msc0JBQXNCLE1BQU0sV0FBVyxVQUFVLG1CQUFtQix5Q0FBeUMsa0JBQWtCLGtCQUFrQixFQUFFLDhIQUE4SCxFQUFFLG9DQUFvQyxnUEFBZ1AsTUFBTSxzRUFBc0UsRUFBRSwwRUFBMEUsMklBQTJJLGlIQUFpSCw0QkFBNEIsRUFBRSxvQ0FBb0MscUJBQXFCLEVBQUUsaUJBQWlCLEdBQUcsT0FBTyxxQkFBcUIsSUFBSTtBQUNuOEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyx1R0FBdUc7QUFDNUcsbUJBQW1CLEVBQUUsUUFBUTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsRUFBRSxRQUFRO0FBQzdCLG1CQUFtQixFQUFFLHFCQUFxQjtBQUMxQyxzQkFBc0IsRUFBRSxxQkFBcUI7QUFDN0Msb0JBQW9CLEVBQUUsUUFBUTtBQUM5QixxQkFBcUIsRUFBRSxRQUFROztBQUUvQjtBQUNBLGdDQUFnQyxFQUFFLFFBQVE7QUFDMUMsaUNBQWlDLEVBQUUsUUFBUTtBQUMzQzs7QUFFQTtBQUNBLG1DQUFtQyxFQUFFLFFBQVE7QUFDN0Msb0NBQW9DLEVBQUUsUUFBUTtBQUM5Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjs7QUFFQTtBQUNBO0FBQ0EsZUFBZSxFQUFFLFFBQVE7QUFDekIsb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBLEVBQUUsc0JBQXNCLG1FQUFtRSxrQkFBa0IsMkNBQTJDLDhEQUE4RCw2QkFBNkIsYUFBYSwrQkFBK0IsbUJBQW1CLDRCQUE0QiwyQ0FBMkMsbUZBQW1GLHNDQUFzQyxTQUFTLDRCQUE0QixzQkFBc0IsOENBQThDLDBCQUEwQixZQUFZLHNDQUFzQyxTQUFTLDhDQUE4QywyREFBMkQsaUNBQWlDLHFCQUFxQiwwQkFBMEIsb0JBQW9CLEtBQUssc0JBQXNCLGFBQWEsMENBQTBDLGNBQWMsU0FBUyxpQkFBaUIsOERBQThELElBQUksb0dBQW9HLCtCQUErQiw2Q0FBNkMsRUFBRSxNQUFNLDRCQUE0QixNQUFNLG9DQUFvQyxpQkFBaUIsT0FBTyw2Q0FBNkMsRUFBRSxHQUFHLFVBQVUsNkJBQTZCLElBQUksa0NBQWtDLE1BQU0sRUFBRSx3Q0FBd0MsMEdBQTBHLEVBQUUsSUFBSTtBQUM5bUQ7QUFDQTs7QUFFQSxzQkFBc0IsRUFBRSxRQUFRO0FBQ2hDOztBQUVBO0FBQ0E7QUFDQSxFQUFFLHNCQUFzQiw4Q0FBOEMsMEJBQTBCLFlBQVksc0NBQXNDLFNBQVMsNkJBQTZCLDJEQUEyRCxzQkFBc0IsMEdBQTBHLElBQUksbUVBQW1FLHNCQUFzQixTQUFTLHFEQUFxRCxLQUFLLEdBQUcsaUJBQWlCLHdGQUF3RixvQkFBb0Isd0JBQXdCLElBQUksT0FBTywrQkFBK0IsK0NBQStDLE1BQU0sNkJBQTZCLHFDQUFxQyxNQUFNLEVBQUUscUNBQXFDLGdEQUFnRCwyREFBMkQsK0JBQStCLGtCQUFrQixTQUFTLGVBQWUsaUNBQWlDLEVBQUUsd0RBQXdELHFIQUFxSCxHQUFHLEdBQUc7QUFDbndDO0FBQ0E7QUFDQSxhQUFhLEVBQUUsUUFBUTtBQUN2Qjs7QUFFQTtBQUNBOztBQUVBLDRCQUE0QixFQUFFLFFBQVE7QUFDdEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFLHNCQUFzQixtRUFBbUUsa0JBQWtCLDJDQUEyQyw4REFBOEQsNkJBQTZCLGFBQWEsK0JBQStCLG1CQUFtQiw0QkFBNEIsZ0VBQWdFLG1DQUFtQyxzQkFBc0IsRUFBRSxlQUFlLFlBQVkseUNBQXlDLDRCQUE0QixTQUFTLDZGQUE2RixpQkFBaUIsc0NBQXNDLFNBQVMsMkJBQTJCLDJEQUEyRCxvQkFBb0IsZ0RBQWdELElBQUksTUFBTSxlQUFlLEdBQUcsa0NBQWtDLHdCQUF3QixLQUFLLDRCQUE0QixFQUFFLG9EQUFvRCxlQUFlLDZCQUE2Qiw0QkFBNEIsRUFBRSxXQUFXLDhCQUE4QixpREFBaUQscUNBQXFDLG9DQUFvQyxLQUFLLGdCQUFnQixFQUFFLHdDQUF3QyxzQkFBc0Isb0JBQW9CLGdCQUFnQixFQUFFLGtFQUFrRSxnREFBZ0QsS0FBSyxlQUFlLEVBQUUsd0NBQXdDLHdCQUF3QixFQUFFLElBQUksSUFBSTtBQUNobEQsbUJBQW1CLEVBQUUsUUFBUTtBQUM3QjtBQUNBLElBQUksRUFBRSxhQUFhO0FBQ25CLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxFQUFFLFFBQVE7QUFDeEIsYUFBYSxFQUFFLFFBQVE7QUFDdkI7QUFDQTtBQUNBLElBQUksRUFBRSxpQkFBaUI7QUFDdkIsMEJBQTBCO0FBQzFCOztBQUVBO0FBQ0Esd0JBQXdCLEVBQUUsUUFBUTs7QUFFbEMsTUFBTTtBQUNOO0FBQ0E7O0FBRUEsTUFBTSxHQUFHLElBQUk7QUFDYjtBQUNBO0FBQ0E7QUFDQSxFQUFFLHNCQUFzQiw4Q0FBOEMsMEJBQTBCLFlBQVksc0NBQXNDLFNBQVMsNEJBQTRCLGlEQUFpRCxxQkFBcUIsZ0JBQWdCLElBQUksZ0NBQWdDLCtCQUErQiwyQkFBMkIseUJBQXlCLEVBQUUsOEJBQThCLGVBQWUsWUFBWSxHQUFHO0FBQ2xjLFlBQVksRUFBRSxRQUFRO0FBQ3RCLFdBQVcsRUFBRSxRQUFRO0FBQ3JCLGlCQUFpQixFQUFFLFFBQVE7O0FBRTNCLG1CQUFtQixFQUFFLFFBQVE7QUFDN0I7QUFDQSxZQUFZLEVBQUUsUUFBUTtBQUN0QixXQUFXLEVBQUUsUUFBUTtBQUNyQixpQkFBaUIsRUFBRSxRQUFRO0FBQzNCO0FBQ0EsWUFBWSxFQUFFLFFBQVE7QUFDdEIsV0FBVyxFQUFFLFFBQVE7QUFDckIsaUJBQWlCLEVBQUUsUUFBUTs7QUFFM0IsbUJBQW1CLEVBQUUsUUFBUTs7QUFFN0I7QUFDQSxFQUFFLGdCQUFnQixzQ0FBc0MsU0FBUywwQkFBMEIsZ0JBQWdCLHFCQUFxQixxQ0FBcUMsNEJBQTRCLDZCQUE2QixhQUFhLHlCQUF5QixhQUFhLFFBQVEsWUFBWSwrRUFBK0Usa0VBQWtFLFVBQVUscUJBQXFCLG1FQUFtRSxrQkFBa0IsMkNBQTJDLDhEQUE4RCw2QkFBNkIsYUFBYSwrQkFBK0IsbUJBQW1CLDRCQUE0QiwyQ0FBMkMsbUZBQW1GLHNDQUFzQyxTQUFTLGVBQWUsc0JBQXNCLDhDQUE4QywwQkFBMEIsWUFBWSxzQ0FBc0MsU0FBUyxrS0FBa0ssNkdBQTZHLHNQQUFzUCxtRkFBbUYsSUFBSSxNQUFNLDBFQUEwRSxxQkFBcUIsMEtBQTBLLHNCQUFzQixzREFBc0QsT0FBTyxNQUFNLGlCQUFpQixnQ0FBZ0MsOEVBQThFLHFEQUFxRCw0QkFBNEIsbUVBQW1FLGlCQUFpQixFQUFFLGlLQUFpSywrQkFBK0IsMENBQTBDLHlEQUF5RCxFQUFFLGtCQUFrQiw2QkFBNkIsa0NBQWtDLG1CQUFtQixFQUFFLHFDQUFxQyxtRkFBbUYsRUFBRSxxRUFBcUUsK0lBQStJLElBQUksRUFBRSxpREFBaUQsT0FBTyxpRUFBaUUsYUFBYSw2Q0FBNkMsSUFBSSxvQ0FBb0MsS0FBSyxFQUFFLEdBQUcsUUFBUSxHQUFHLEVBQUUsTUFBTSxHQUFHLE9BQU8sSUFBSTtBQUMveUc7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsc0JBQXNCLEVBQUUsUUFBUTtBQUNoQyxnQkFBZ0IsRUFBRSxrQkFBa0IsVUFBVSxFQUFFO0FBQ2hELFlBQVksRUFBRSxvQkFBb0IsbUJBQW1CLHNCQUFzQjtBQUMzRSxtQkFBbUIsRUFBRSxZQUFZO0FBQ2pDO0FBQ0EsMEJBQTBCLEVBQUUsa0JBQWtCLE1BQU0sRUFBRSxJQUFJO0FBQzFELGdCQUFnQixFQUFFLGtCQUFrQixVQUFVLEVBQUU7QUFDaEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLGdCQUFnQixzQ0FBc0MsU0FBUyxpQ0FBaUMsaURBQWlELGlOQUFpTiwwQkFBMEIsK0hBQStILElBQUksYUFBYSxNQUFNLFVBQVUsK0JBQStCLHNEQUFzRCxNQUFNLGlCQUFpQixrREFBa0QsTUFBTSx1QkFBdUIsOERBQThELE1BQU0scUJBQXFCLDRDQUE0QyxJQUFJLGdCQUFnQixJQUFJLHNCQUFzQiw4Q0FBOEMsMEJBQTBCLFlBQVksc0NBQXNDLFNBQVMsdUNBQXVDLGlEQUFpRCxnQ0FBZ0MscUVBQXFFLGtDQUFrQyw0REFBNEQsbURBQW1ELEVBQUUsMkVBQTJFLFlBQVksRUFBRSxzQkFBc0IsZ0RBQWdELEVBQUUsMkNBQTJDLHNDQUFzQyxFQUFFLFdBQVcsdURBQXVELGFBQWEsRUFBRSx3Q0FBd0Msa0NBQWtDLEVBQUUsSUFBSSxHQUFHLEVBQUU7QUFDenZEO0FBQ0EsWUFBWSxFQUFFLDRCQUE0QjtBQUMxQztBQUNBO0FBQ0EsRUFBRSxzQkFBc0IsOENBQThDLDBCQUEwQixZQUFZLHNDQUFzQyxTQUFTLDBCQUEwQixpREFBaUQsbUJBQW1CLE9BQU8sMEJBQTBCLHVCQUF1QixXQUFXLCtDQUErQyxHQUFHLEVBQUU7QUFDaFg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixFQUFFLFFBQVE7QUFDN0IsYUFBYSxFQUFFLFFBQVEsWUFBWSxXQUFXO0FBQzlDLEVBQUUsc0JBQXNCLDhDQUE4QywwQkFBMEIsWUFBWSxzQ0FBc0MsU0FBUywwQ0FBMEMsdUNBQXVDLGdFQUFnRSw4Q0FBOEMsRUFBRSx1QkFBdUIsRUFBRSxHQUFHO0FBQ3hYO0FBQ0EsYUFBYSxFQUFFLFFBQVEsZUFBZTtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixFQUFFLFFBQVE7QUFDaEMsRUFBRSxzQkFBc0IsOENBQThDLDBCQUEwQixZQUFZLHNDQUFzQyxTQUFTLDhDQUE4QywrRUFBK0UsdUNBQXVDLDZEQUE2RCxJQUFJLCtCQUErQixpQ0FBaUMsZ0NBQWdDLGlDQUFpQyxPQUFPLDZCQUE2Qix3QkFBd0IscUNBQXFDLHVCQUF1QixFQUFFLHNCQUFzQix5REFBeUQsRUFBRSw4QkFBOEIsNEJBQTRCLEVBQUUsV0FBVyxpQ0FBaUMsYUFBYSxFQUFFLHNCQUFzQiw0Q0FBNEMsRUFBRSxJQUFJLCtDQUErQyxHQUFHLEdBQUc7QUFDaDhCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsRUFBRSxRQUFRO0FBQzdCLGFBQWEsRUFBRSxRQUFRLFFBQVEsWUFBWSxJQUFJLFdBQVc7QUFDMUQ7QUFDQSxhQUFhLEVBQUUsZUFBZSxvQkFBb0IsWUFBWSxjQUFjLFdBQVc7QUFDdkYsaUJBQWlCLEVBQUUsT0FBTztBQUMxQjtBQUNBLG1CQUFtQixFQUFFLFFBQVE7QUFDN0Isc0JBQXNCLEVBQUUsbUJBQW1CO0FBQzNDLFdBQVcsRUFBRSxtQkFBbUI7QUFDaEMsWUFBWSxFQUFFLG1CQUFtQjtBQUNqQzs7QUFFQTtBQUNBLGFBQWEsRUFBRSxRQUFRO0FBQ3ZCLGNBQWMsRUFBRSxRQUFRO0FBQ3hCO0FBQ0E7QUFDQSxXQUFXLEVBQUUsUUFBUTtBQUNyQixhQUFhLEVBQUUsUUFBUSxRQUFRLGVBQWUsSUFBSSxXQUFXO0FBQzdEO0FBQ0E7QUFDQSxXQUFXLEVBQUUsUUFBUTtBQUNyQixZQUFZLEVBQUUsUUFBUTtBQUN0QjtBQUNBOztBQUVBO0FBQ0EsYUFBYSxFQUFFLFFBQVE7QUFDdkIsY0FBYyxFQUFFLFFBQVE7QUFDeEI7QUFDQSxFQUFFLHNCQUFzQixtRUFBbUUsa0JBQWtCLDJDQUEyQyw4REFBOEQsNkJBQTZCLGFBQWEsK0JBQStCLG1CQUFtQiw0QkFBNEIsMkNBQTJDLG1GQUFtRixzQ0FBc0MsU0FBUyxlQUFlLGdCQUFnQixzQ0FBc0MsU0FBUyw0Q0FBNEMsMEJBQTBCLHlEQUF5RCxZQUFZLFVBQVUsMEtBQTBLLDJCQUEyQixPQUFPLFFBQVEsR0FBRyx5Q0FBeUMsS0FBSyxZQUFZLGdCQUFnQixHQUFHLG1DQUFtQyxPQUFPLFFBQVEsR0FBRyxnREFBZ0QsS0FBSyxZQUFZLFNBQVMsR0FBRyxtQ0FBbUMsZ0NBQWdDLG1DQUFtQyxPQUFPLHFCQUFxQixLQUFLLHNCQUFzQixTQUFTLEdBQUcseURBQXlELFFBQVEsdUdBQXVHLEtBQUssc0NBQXNDLGFBQWEsTUFBTSw2Q0FBNkMsUUFBUSwrR0FBK0csdUNBQXVDLHdFQUF3RSxxQ0FBcUMsNERBQTRELGFBQWEsRUFBRSxXQUFXLHNCQUFzQixZQUFZLGNBQWMsb0JBQW9CLE1BQU0sa0JBQWtCLE1BQU0sNEJBQTRCLE1BQU0sNkJBQTZCLE1BQU0sZ0JBQWdCLE1BQU0scUJBQXFCLE1BQU0sb0JBQW9CLE1BQU0sbUJBQW1CLG1EQUFtRCwyQ0FBMkMsc0JBQXNCLGdCQUFnQixzQ0FBc0MsU0FBUyxvQ0FBb0MsMEJBQTBCLG1EQUFtRCwrQkFBK0IsOEVBQThFLE9BQU8sdUVBQXVFLE1BQU0sT0FBTywrQ0FBK0MsTUFBTSxpQkFBaUIsTUFBTSxxREFBcUQsaUJBQWlCLG1CQUFtQiwrRUFBK0UsTUFBTSx3REFBd0QsaUJBQWlCLE1BQU0sT0FBTyxxREFBcUQsOEZBQThGLDhEQUE4RCxNQUFNLE1BQU0saUJBQWlCLHdCQUF3QixPQUFPLG1DQUFtQyxpQkFBaUIsZ0JBQWdCLHNDQUFzQyxTQUFTLGdDQUFnQywwQkFBMEIsMkJBQTJCLDJCQUEyQixxQkFBcUIsRUFBRSw0QkFBNEIsc0ZBQXNGLGFBQWEsZ0NBQWdDLGtCQUFrQixNQUFNLGlCQUFpQixrQ0FBa0Msc0JBQXNCLEVBQUUscUJBQXFCLEVBQUUsT0FBTyxpQkFBaUIsSUFBSSxHQUFHLHlCQUF5QixnQkFBZ0IsVUFBVSxnQkFBZ0Isc0NBQXNDLFNBQVMsaURBQWlELGdCQUFnQixtSUFBbUksZUFBZSxVQUFVLDJDQUEyQyxPQUFPLEtBQUssU0FBUyxFQUFFLE1BQU0seUJBQXlCLFNBQVMsYUFBYSxrQkFBa0IsTUFBTSxZQUFZLDZCQUE2QiwwQ0FBMEMsV0FBVyw2QkFBNkIsRUFBRSxVQUFVLHNCQUFzQiw4Q0FBOEMsMEJBQTBCLFlBQVksc0NBQXNDLFNBQVMsNkhBQTZILGlEQUFpRDtBQUM3c0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsRUFBRSxRQUFRO0FBQ2hDLGFBQWEsRUFBRSxRQUFRLE1BQU0sWUFBWSxJQUFJLFlBQVk7QUFDekQ7QUFDQTtBQUNBLGFBQWEsRUFBRSxRQUFRLFFBQVEsWUFBWSxJQUFJLFdBQVc7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLEVBQUUsUUFBUTtBQUM3QixzQkFBc0IsRUFBRSw2QkFBNkI7O0FBRXJEO0FBQ0Esd0JBQXdCLEVBQUUsa0JBQWtCO0FBQzVDO0FBQ0E7QUFDQSxhQUFhLEVBQUUsZUFBZSxvQkFBb0IsWUFBWSxjQUFjLFdBQVc7QUFDdkYsaUJBQWlCLEVBQUUsT0FBTztBQUMxQjtBQUNBOztBQUVBO0FBQ0EsWUFBWSxFQUFFLGtCQUFrQjtBQUNoQyxjQUFjLEVBQUUsa0JBQWtCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLFdBQVcsRUFBRSxrQkFBa0I7QUFDL0IsYUFBYSxFQUFFLFFBQVEsUUFBUSxlQUFlLElBQUksV0FBVztBQUM3RDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFLHNCQUFzQixtRUFBbUUsa0JBQWtCLDJDQUEyQyw4REFBOEQsNkJBQTZCLGFBQWEsK0JBQStCLG1CQUFtQiw0QkFBNEIsMkNBQTJDLG1GQUFtRixzQ0FBc0MsU0FBUyxlQUFlLHNCQUFzQix1Q0FBdUMsU0FBUyxzRkFBc0YsNkRBQTZELFFBQVEsc0NBQXNDLFdBQVcsNkZBQTZGLFNBQVMsMkNBQTJDLDBCQUEwQixZQUFZLHNDQUFzQyxTQUFTLGtCQUFrQixxRUFBcUUsYUFBYSxJQUFJLDJFQUEyRSxvRUFBb0UscUNBQXFDLDRCQUE0QixhQUFhLDJDQUEyQyxZQUFZLEVBQUUscUNBQXFDLDhCQUE4Qiw4QkFBOEIsWUFBWSxFQUFFLHNDQUFzQyxJQUFJLHlCQUF5QixtQ0FBbUMsZ0JBQWdCLDZDQUE2QyxHQUFHLElBQUksSUFBSTtBQUM3cEQ7QUFDQSxTQUFTLEVBQUUsUUFBUTtBQUNuQixvQkFBb0IsRUFBRSxZQUFZO0FBQ2xDLGlCQUFpQixFQUFFLFFBQVE7QUFDM0I7QUFDQSxpQkFBaUIsRUFBRSxRQUFRO0FBQzNCLGVBQWUsRUFBRSxRQUFROztBQUV6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sRUFBRSxvQkFBb0I7QUFDNUI7O0FBRUEsZ0JBQWdCLEVBQUUsb0JBQW9CO0FBQ3RDO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsRUFBRSxRQUFRO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsRUFBRSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQSxnQkFBZ0IsRUFBRSxvQkFBb0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCO0FBQ2hCLHdCQUF3QixFQUFFLFFBQVEsY0FBYztBQUNoRDtBQUNBLGlCQUFpQjtBQUNqQixrQkFBa0IsRUFBRSxRQUFRO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxzQkFBc0IsdUNBQXVDLFNBQVMsc0ZBQXNGLDZEQUE2RCxRQUFRLHNDQUFzQyxXQUFXLDZGQUE2RixTQUFTLDJDQUEyQywwQkFBMEIsWUFBWSxzQ0FBc0MsU0FBUyxpQkFBaUIsaURBQWlELFlBQVksSUFBSSxnQkFBZ0IsMEJBQTBCLG1CQUFtQixxQkFBcUIsRUFBRSxnQ0FBZ0MsSUFBSSxXQUFXLElBQUk7QUFDbnRCLGdCQUFnQixFQUFFLFFBQVE7QUFDMUIsbUJBQW1CLEVBQUUsUUFBUTtBQUM3QixXQUFXO0FBQ1gsZUFBZSxFQUFFLFFBQVE7QUFDekIsZUFBZSxFQUFFLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsRUFBRSxRQUFRO0FBQzFCLEVBQUUsc0JBQXNCLG1FQUFtRSxrQkFBa0IsMkNBQTJDLDhEQUE4RCw2QkFBNkIsYUFBYSwrQkFBK0IsbUJBQW1CLDRCQUE0QiwyQ0FBMkMsbUZBQW1GLHNDQUFzQyxTQUFTLGVBQWUsc0JBQXNCLG1FQUFtRSxrQkFBa0IsMkNBQTJDLDhEQUE4RCw2QkFBNkIsYUFBYSwrQkFBK0IsbUJBQW1CLDRCQUE0QixnRUFBZ0UsbUNBQW1DLHNCQUFzQixFQUFFLGVBQWUsWUFBWSx5Q0FBeUMsNEJBQTRCLFNBQVMsNkZBQTZGLGdCQUFnQixvQ0FBb0MsU0FBUyxzRkFBc0YsNkRBQTZELFFBQVEsc0NBQXNDLFdBQVcsNkZBQTZGLFNBQVMsMkNBQTJDLDBCQUEwQixZQUFZLHNDQUFzQyxTQUFTLG9CQUFvQixrRkFBa0YsZUFBZSxJQUFJLCtCQUErQiwyQ0FBMkMsNEVBQTRFLG1CQUFtQixnQ0FBZ0Msa0JBQWtCLE1BQU0sa0NBQWtDLCtCQUErQixFQUFFLDhDQUE4QyxvSUFBb0ksbUJBQW1CLHVCQUF1Qix5SEFBeUgsZUFBZSxxSEFBcUgsR0FBRyxHQUFHLElBQUk7QUFDdGdGO0FBQ0EsYUFBYSxFQUFFLFFBQVEsTUFBTSxZQUFZO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixFQUFFLFFBQVEsTUFBTSxXQUFXO0FBQzdDLHNCQUFzQixFQUFFLFFBQVE7QUFDaEMsc0JBQXNCLEVBQUUsUUFBUTtBQUNoQztBQUNBO0FBQ0EsYUFBYSxFQUFFLFFBQVEsTUFBTSxZQUFZLEVBQUUsV0FBVztBQUN0RCxrQkFBa0IsRUFBRSxRQUFRLE1BQU0sV0FBVztBQUM3QztBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFLFFBQVE7QUFDbEMsYUFBYSxFQUFFLFFBQVE7QUFDdkIsaUJBQWlCLEVBQUUsUUFBUTtBQUMzQix3QkFBd0IsRUFBRSxRQUFRO0FBQ2xDOztBQUVBO0FBQ0Esd0JBQXdCLEVBQUUsUUFBUSwwQkFBMEI7QUFDNUQsYUFBYSxFQUFFLFFBQVE7QUFDdkIsaUJBQWlCLEVBQUUsUUFBUTtBQUMzQjtBQUNBOztBQUVBO0FBQ0Esd0JBQXdCLEVBQUUsUUFBUSwwQkFBMEI7QUFDNUQsYUFBYSxFQUFFLFFBQVE7QUFDdkIsaUJBQWlCLEVBQUUsUUFBUTs7QUFFM0I7QUFDQSxlQUFlLEVBQUUsUUFBUTtBQUN6QjtBQUNBOztBQUVBO0FBQ0Esd0JBQXdCLEVBQUUsUUFBUSwwQkFBMEI7QUFDNUQsYUFBYSxFQUFFLFFBQVE7QUFDdkIsaUJBQWlCLEVBQUUsUUFBUTtBQUMzQjs7QUFFQTtBQUNBLHdCQUF3QixFQUFFLFFBQVEsMEJBQTBCO0FBQzVELGFBQWEsRUFBRSxRQUFRO0FBQ3ZCLGlCQUFpQixFQUFFLFFBQVE7QUFDM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsRUFBRSxRQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFLFFBQVEsMEJBQTBCO0FBQzVELGFBQWEsRUFBRSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGVBQWUsRUFBRSxRQUFRO0FBQ3pCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCLEVBQUUsUUFBUTtBQUNwQztBQUNBOztBQUVBO0FBQ0EsMEJBQTBCLEVBQUUsUUFBUTtBQUNwQztBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0IsRUFBRSxRQUFRLDJCQUEyQjtBQUM3RDtBQUNBOztBQUVBO0FBQ0Esd0JBQXdCLEVBQUUsUUFBUSwyQkFBMkI7QUFDN0QsYUFBYSxFQUFFLFFBQVE7QUFDdkI7O0FBRUE7QUFDQSwwQkFBMEIsRUFBRSxRQUFRO0FBQ3BDLGVBQWUsRUFBRSxRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLEVBQUUsc0JBQXNCLG1FQUFtRSxrQkFBa0IsMkNBQTJDLDhEQUE4RCw2QkFBNkIsYUFBYSwrQkFBK0IsbUJBQW1CLDRCQUE0QiwyQ0FBMkMsbUZBQW1GLHNDQUFzQyxTQUFTLGVBQWUscUJBQXFCLDhDQUE4QywwQkFBMEIsWUFBWSxzQ0FBc0MsU0FBUywwQkFBMEIsa0dBQWtHLDJDQUEyQyxjQUFjLG1CQUFtQix1QkFBdUIsc0RBQXNELG9EQUFvRCw4QkFBOEIsZ1hBQWdYLEVBQUUseUZBQXlGLHVCQUF1Qix5Q0FBeUMscURBQXFELEVBQUUsaUdBQWlHLGdCQUFnQixrRUFBa0UsR0FBRyxJQUFJLEVBQUUsRUFBRSxpREFBaUQ7QUFDMXpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEVBQUUsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUUsaUJBQWlCO0FBQzlCO0FBQ0E7QUFDQSxnQkFBZ0IsRUFBRSxRQUFRO0FBQzFCLHNCQUFzQixFQUFFLFFBQVE7QUFDaEMsbUJBQW1CLEVBQUUsUUFBUTtBQUM3QixXQUFXLEVBQUUsUUFBUTtBQUNyQjtBQUNBLGtCQUFrQixFQUFFLGlCQUFpQjtBQUNyQztBQUNBLGlCQUFpQixFQUFFLFFBQVE7QUFDM0IsU0FBUyxFQUFFLFFBQVE7QUFDbkI7QUFDQSxpQkFBaUIsRUFBRSxRQUFRO0FBQzNCO0FBQ0EsYUFBYSxFQUFFLFFBQVEsTUFBTSxZQUFZLEVBQUUsV0FBVztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLEVBQUUsUUFBUTtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLEVBQUUsaUJBQWlCO0FBQ3ZDO0FBQ0EsRUFBRSxzQkFBc0IsOENBQThDLDBCQUEwQixZQUFZLHNDQUFzQyxTQUFTLHdCQUF3QixzRkFBc0YsbUNBQW1DLHlIQUF5SCxNQUFNLHdHQUF3RyxTQUFTLHNDQUFzQyw4QkFBOEIsc0JBQXNCLHVCQUF1QixPQUFPLFlBQVksZ0JBQWdCLEVBQUUsZ0NBQWdDLGdEQUFnRCxpQ0FBaUMsd0NBQXdDLGlEQUFpRCxhQUFhLEVBQUUseUNBQXlDLDBDQUEwQyxjQUFjLEVBQUUsOENBQThDLDBCQUEwQixFQUFFLGtDQUFrQyxXQUFXLEVBQUUsaUJBQWlCLGtDQUFrQyxlQUFlLG1CQUFtQixRQUFRLGlCQUFpQixFQUFFLCtCQUErQiwyQ0FBMkMsdUJBQXVCLHlFQUF5RSxnREFBZ0QsOElBQThJLEdBQUcsR0FBRyxHQUFHLEdBQUcsNkNBQTZDO0FBQ3huRDtBQUNBO0FBQ0EsMkJBQTJCLHNCQUFzQixtRUFBbUUsa0JBQWtCLDJDQUEyQyw4REFBOEQsNkJBQTZCLGFBQWEsK0JBQStCLG1CQUFtQiw0QkFBNEIsMkNBQTJDLG1GQUFtRixzQ0FBc0MsU0FBUyx1Q0FBdUMscUJBQXFCLDhDQUE4QywwQkFBMEIsWUFBWSxzQ0FBc0MsU0FBUyw4QkFBOEIsd0VBQXdFLFNBQVMsc0pBQXNKLElBQUksWUFBWSxlQUFlLGtDQUFrQyx3REFBd0QsUUFBUSw0RUFBNEUsRUFBRSw0Q0FBNEMsdUJBQXVCLGtDQUFrQyxXQUFXLEVBQUUsZ0JBQWdCLEdBQUcsK0NBQStDLCtCQUErQiw0Q0FBNEMsMktBQTJLLEVBQUUsb0JBQW9CLFFBQVEsNkJBQTZCLHlEQUF5RCw0QkFBNEIsRUFBRSwrREFBK0QscUJBQXFCLG1CQUFtQiwyQkFBMkIsaUJBQWlCLGtEQUFrRCxpQkFBaUIsZUFBZSxnQ0FBZ0MsRUFBRSxHQUFHLFFBQVEsT0FBTyxJQUFJO0FBQ2hnRSxXQUFXLEVBQUUscUJBQXFCO0FBQ2xDLGdCQUFnQixFQUFFLFNBQVM7QUFDM0IsU0FBUyxFQUFFLFFBQVEsa0JBQWtCLFlBQVk7QUFDakQ7QUFDQSxnQkFBZ0IsRUFBRSxRQUFRO0FBQzFCLFdBQVcsRUFBRSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQSxzQkFBc0IsRUFBRSxRQUFRO0FBQ2hDLGNBQWMsRUFBRSxtQkFBbUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLEVBQUUsb0JBQW9CLGtCQUFrQix3QkFBd0I7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUUsUUFBUTtBQUNyQixhQUFhLEVBQUUsUUFBUSxNQUFNLFlBQVksRUFBRSxXQUFXO0FBQ3REO0FBQ0Esa0JBQWtCLEVBQUUsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsRUFBRSxRQUFRO0FBQ3JCLGFBQWEsRUFBRSxRQUFRLE1BQU0sWUFBWSxFQUFFLFdBQVc7QUFDdEQ7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLEVBQUUsUUFBUTtBQUNwQyxFQUFFO0FBQ0YsWUFBWSxFQUFFLFFBQVE7QUFDdEIsV0FBVyxFQUFFLFFBQVE7QUFDckIsbUJBQW1CLEVBQUUsUUFBUTtBQUM3QixFQUFFLHNCQUFzQix1Q0FBdUMsU0FBUyxzRkFBc0YsNkRBQTZELFFBQVEsc0NBQXNDLFdBQVcsNkZBQTZGLFNBQVMsMkNBQTJDLDBCQUEwQixZQUFZLHNDQUFzQyxTQUFTLHlEQUF5RCwyREFBMkQsa0JBQWtCLElBQUksV0FBVyx1QkFBdUIsaUNBQWlDLHdCQUF3QixJQUFJLDBCQUEwQixXQUFXLEVBQUUsSUFBSTtBQUM5d0IsSUFBSTtBQUNKLGlCQUFpQixFQUFFLFFBQVE7QUFDM0IsRUFBRSxjQUFjLGtFQUFrRSw4REFBOEQsd0JBQXdCLE1BQU0sc0JBQXNCLHVDQUF1QyxTQUFTLHNGQUFzRiw2REFBNkQsUUFBUSxzQ0FBc0MsV0FBVyw2RkFBNkYsU0FBUywyQ0FBMkMsMEJBQTBCLFlBQVksc0NBQXNDLFNBQVMsZ0JBQWdCLDJHQUEyRyxJQUFJLDJFQUEyRSw4RUFBOEUsa0NBQWtDLElBQUksMkdBQTJHLEVBQUUsc0NBQXNDLGlDQUFpQyxPQUFPLEdBQUcsR0FBRywrQ0FBK0MsMkJBQTJCLElBQUksbUJBQW1CLCtCQUErQixxQkFBcUIsaUNBQWlDLDBCQUEwQixLQUFLO0FBQzEzQztBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsRUFBRSxRQUFROztBQUU1QjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osSUFBSTs7QUFFSjtBQUNBOztBQUVBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLGdCQUFnQixzQ0FBc0MsU0FBUyw4QkFBOEIsZ0JBQWdCLFdBQVcsa0RBQWtELGFBQWEsc0JBQXNCO0FBQy9NLG1CQUFtQixFQUFFLFFBQVE7QUFDN0I7QUFDQSxtQkFBbUIsRUFBRSxRQUFRO0FBQzdCO0FBQ0EsbUJBQW1CLEVBQUUsUUFBUTtBQUM3QjtBQUNBLG1CQUFtQixFQUFFLFFBQVE7QUFDN0I7QUFDQSxtQkFBbUIsRUFBRSxRQUFRO0FBQzdCO0FBQ0EsbUJBQW1CLEVBQUUsUUFBUTtBQUM3QjtBQUNBLG1CQUFtQixFQUFFLFFBQVE7QUFDN0IsTUFBTSw0QkFBNEI7QUFDbEMsd0JBQXdCLEVBQUUsUUFBUTtBQUNsQztBQUNBLHdCQUF3QixFQUFFLFFBQVE7QUFDbEM7QUFDQSx3QkFBd0IsRUFBRSxRQUFRO0FBQ2xDO0FBQ0Esd0JBQXdCLEVBQUUsUUFBUTtBQUNsQztBQUNBLHdCQUF3QixFQUFFLFFBQVE7QUFDbEM7QUFDQSx3QkFBd0IsRUFBRSxRQUFRO0FBQ2xDO0FBQ0Esd0JBQXdCLEVBQUUsUUFBUTtBQUNsQyxRQUFRLHNCQUFzQixtRUFBbUUsa0JBQWtCLDJDQUEyQyw4REFBOEQsNkJBQTZCLGFBQWEsK0JBQStCLG1CQUFtQiw0QkFBNEIsMkNBQTJDLG1GQUFtRixzQ0FBc0MsU0FBUyxlQUFlLHNCQUFzQix1Q0FBdUMsU0FBUyxzRkFBc0YsNkRBQTZELFFBQVEsc0NBQXNDLFdBQVcsNkZBQTZGLFVBQVUsc0NBQXNDLFNBQVMsMEJBQTBCLGdCQUFnQixxQkFBcUIsSUFBSSx1QkFBdUIsb0JBQW9CLHNDQUFzQywwRkFBMEYsSUFBSSw0QkFBNEIsaXJCQUFpckIsb0JBQW9CLCtKQUErSixHQUFHLElBQUksc0JBQXNCLHVDQUF1QyxTQUFTLHNGQUFzRiw2REFBNkQsUUFBUSxzQ0FBc0MsV0FBVyw2RkFBNkYsVUFBVSxzQ0FBc0MsU0FBUyxvQkFBb0IsZ0JBQWdCLGVBQWUsSUFBSSx1QkFBdUIsb0JBQW9CLHFDQUFxQywwRkFBMEYsSUFBSSwyQkFBMkIseTdFQUF5N0UsRUFBRSxJQUFJLHNCQUFzQix1Q0FBdUMsU0FBUyxzRkFBc0YsNkRBQTZELFFBQVEsc0NBQXNDLFdBQVcsNkZBQTZGLFVBQVUsc0NBQXNDLFNBQVMsMEJBQTBCLGdCQUFnQixxQkFBcUIsSUFBSSx1QkFBdUIsb0JBQW9CLHFDQUFxQywwRkFBMEYsSUFBSSwyQkFBMkIseWNBQXljLEVBQUUsSUFBSSxzQkFBc0IsdUNBQXVDLFNBQVMsc0ZBQXNGLDZEQUE2RCxRQUFRLHNDQUFzQyxXQUFXLDZGQUE2RixVQUFVLHNDQUFzQyxTQUFTLDRCQUE0QixnQkFBZ0IsdUJBQXVCLElBQUksdUJBQXVCLG9CQUFvQixxQ0FBcUMsMEZBQTBGLElBQUksMkJBQTJCLDZqQkFBNmpCLEVBQUUsSUFBSSxzQkFBc0IsdUNBQXVDLFNBQVMsc0ZBQXNGLDZEQUE2RCxRQUFRLHNDQUFzQyxXQUFXLDZGQUE2RixVQUFVLHNDQUFzQyxTQUFTLDBCQUEwQixnQkFBZ0IscUJBQXFCLElBQUksdUJBQXVCLG9CQUFvQixzQ0FBc0MsMEZBQTBGLElBQUksNEJBQTRCLDBuQkFBMG5CLG9CQUFvQiwybURBQTJtRCxHQUFHLElBQUksc0JBQXNCLHVDQUF1QyxTQUFTLHNGQUFzRiw2REFBNkQsUUFBUSxzQ0FBc0MsV0FBVyw2RkFBNkYsVUFBVSxzQ0FBc0MsU0FBUywyQkFBMkIsZ0JBQWdCLHNCQUFzQixJQUFJLHVCQUF1QixvQkFBb0IscUNBQXFDLDBGQUEwRixFQUFFLHlDQUF5QywyV0FBMlcsS0FBSyxJQUFJLHNCQUFzQix1Q0FBdUMsU0FBUyxzRkFBc0YsNkRBQTZELFFBQVEsc0NBQXNDLFdBQVcsNkZBQTZGLFVBQVUsc0NBQXNDLFNBQVMsMkJBQTJCLGdCQUFnQixzQkFBc0IsSUFBSSx1QkFBdUIsb0JBQW9CLHFDQUFxQywwRkFBMEYsRUFBRSx5Q0FBeUMsaVhBQWlYLEtBQUssSUFBSSxzQkFBc0IsdUNBQXVDLFNBQVMsc0ZBQXNGLDZEQUE2RCxRQUFRLHNDQUFzQyxXQUFXLDZGQUE2RixVQUFVLHNDQUFzQyxTQUFTLDRCQUE0QixnQkFBZ0IsdUJBQXVCLElBQUksdUJBQXVCLG9CQUFvQixxQ0FBcUMsMEZBQTBGLEVBQUUseUNBQXlDLG1YQUFtWCxLQUFLLElBQUksc0JBQXNCLHVDQUF1QyxTQUFTLHNGQUFzRiw2REFBNkQsUUFBUSxzQ0FBc0MsV0FBVyw2RkFBNkYsVUFBVSxzQ0FBc0MsU0FBUyx5QkFBeUIsZ0JBQWdCLG9CQUFvQixJQUFJLHVCQUF1QixvQkFBb0IscUNBQXFDLDBGQUEwRixFQUFFLHlDQUF5QywyV0FBMlcsS0FBSyxJQUFJLGdCQUFnQixzQ0FBc0MsU0FBUyx3Q0FBd0MsZ0JBQWdCLGtFQUFrRSwwRkFBMEYsSUFBSSw0QkFBNEIsOE5BQThOLGtDQUFrQywyQ0FBMkMsRUFBRSwyQkFBMkIsd2VBQXdlLEVBQUUscUJBQXFCLHFmQUFxZixvQkFBb0IsNjlDQUE2OUMsR0FBRyxHQUFHLHNCQUFzQix1Q0FBdUMsU0FBUyxzRkFBc0YsNkRBQTZELFFBQVEsc0NBQXNDLFdBQVcsNkZBQTZGLFVBQVUsc0NBQXNDLFNBQVMsNkJBQTZCLGdCQUFnQix3QkFBd0IsSUFBSSx1QkFBdUIsb0JBQW9CLHFDQUFxQywwRkFBMEYsSUFBSSwyQkFBMkIsazFDQUFrMUMsRUFBRSxJQUFJLHNCQUFzQix1Q0FBdUMsU0FBUyxzRkFBc0YsNkRBQTZELFFBQVEsc0NBQXNDLFdBQVcsNkZBQTZGLFVBQVUsc0NBQXNDLFNBQVMsNEJBQTRCLGdCQUFnQix1QkFBdUIsSUFBSSx1QkFBdUIsb0JBQW9CLHFDQUFxQywwRkFBMEYsSUFBSSxzQ0FBc0MsV0FBVyxFQUFFLDZCQUE2QiwwQ0FBMEMsRUFBRSxHQUFHLElBQUksc0JBQXNCLHVDQUF1QyxTQUFTLHNGQUFzRiw2REFBNkQsUUFBUSxzQ0FBc0MsV0FBVyw2RkFBNkYsVUFBVSxzQ0FBc0MsU0FBUyxzQkFBc0IsZ0JBQWdCLGlCQUFpQixJQUFJLHVCQUF1QixvQkFBb0IscUNBQXFDLHdGQUF3RixJQUFJLDJCQUEyQixxOUJBQXE5QixFQUFFLElBQUkscUJBQXFCLHVDQUF1QyxTQUFTLHNGQUFzRiw2REFBNkQsUUFBUSxzQ0FBc0MsV0FBVyw2RkFBNkYsVUFBVSxzQ0FBc0MsU0FBUywwQkFBMEIsZ0JBQWdCLHFCQUFxQixJQUFJLHVCQUF1QixvQkFBb0IscUNBQXFDLDBGQUEwRixJQUFJLDJCQUEyQiw0cENBQTRwQyxFQUFFLElBQUkscUJBQXFCLHVDQUF1QyxTQUFTLHNGQUFzRiw2REFBNkQsUUFBUSxzQ0FBc0MsV0FBVyw2RkFBNkYsVUFBVSxzQ0FBc0MsU0FBUyx5QkFBeUIsZ0JBQWdCLG9CQUFvQixJQUFJLHVCQUF1QixvQkFBb0IscUNBQXFDLDBGQUEwRixJQUFJLDJCQUEyQixrNEJBQWs0QixFQUFFLElBQUksc0JBQXNCLHVDQUF1QyxTQUFTLHNGQUFzRiw2REFBNkQsUUFBUSxzQ0FBc0MsV0FBVyw2RkFBNkYsVUFBVSxzQ0FBc0MsU0FBUywrQkFBK0IsZ0JBQWdCLDBCQUEwQixJQUFJLHVCQUF1QixvQkFBb0Isc0NBQXNDLDBGQUEwRixJQUFJLDRCQUE0QixvY0FBb2Msb0JBQW9CLGtSQUFrUixHQUFHLElBQUksc0JBQXNCLHVDQUF1QyxTQUFTLHNGQUFzRiw2REFBNkQsUUFBUSxzQ0FBc0MsV0FBVyw2RkFBNkYsVUFBVSxzQ0FBc0MsU0FBUyxpQ0FBaUMsZ0JBQWdCLDRCQUE0QixJQUFJLHVCQUF1QixvQkFBb0IscUNBQXFDLDBGQUEwRixJQUFJLDJCQUEyQixnekNBQWd6QyxFQUFFLElBQUksc0JBQXNCLHVDQUF1QyxTQUFTLHNGQUFzRiw2REFBNkQsUUFBUSxzQ0FBc0MsV0FBVyw2RkFBNkYsVUFBVSxzQ0FBc0MsU0FBUyxrQ0FBa0MsZ0JBQWdCLDZCQUE2QixJQUFJLHVCQUF1QixvQkFBb0IscUNBQXFDLDBGQUEwRixJQUFJLDJCQUEyQixxb0JBQXFvQixFQUFFLElBQUksc0JBQXNCLHVDQUF1QyxTQUFTLHNGQUFzRiw2REFBNkQsUUFBUSxzQ0FBc0MsV0FBVyw2RkFBNkYsVUFBVSxzQ0FBc0MsU0FBUyx3QkFBd0IsZ0JBQWdCLG1CQUFtQixJQUFJLHVCQUF1QixvQkFBb0IscUNBQXFDLDBGQUEwRixJQUFJLDJCQUEyQiw2UEFBNlAsRUFBRSxJQUFJLHFCQUFxQix1Q0FBdUMsU0FBUyxzRkFBc0YsNkRBQTZELFFBQVEsc0NBQXNDLFdBQVcsNkZBQTZGLFVBQVUsc0NBQXNDLFNBQVMsdUJBQXVCLGdCQUFnQixrQkFBa0IsSUFBSSx1QkFBdUIsb0JBQW9CLHFDQUFxQywwRkFBMEYsSUFBSSwyQkFBMkIsa3FEQUFrcUQsRUFBRSxJQUFJLHNCQUFzQix1Q0FBdUMsU0FBUyxzRkFBc0YsNkRBQTZELFFBQVEsc0NBQXNDLFdBQVcsNkZBQTZGLFVBQVUsc0NBQXNDLFNBQVMsb0JBQW9CLGdCQUFnQixlQUFlLElBQUksdUJBQXVCLG9CQUFvQixxQ0FBcUMsMEZBQTBGLElBQUksMkJBQTJCLG91QkFBb3VCLEVBQUUsSUFBSSxzQkFBc0IsdUNBQXVDLFNBQVMsc0ZBQXNGLDZEQUE2RCxRQUFRLHNDQUFzQyxXQUFXLDZGQUE2RixVQUFVLHNDQUFzQyxTQUFTLHNCQUFzQixnQkFBZ0IsaUJBQWlCLGNBQWMscUNBQXFDLHNGQUFzRixJQUFJLDJCQUEyQiw2REFBNkQsRUFBRSxJQUFJLHNCQUFzQix1Q0FBdUMsU0FBUyxzRkFBc0YsNkRBQTZELFFBQVEsc0NBQXNDLFdBQVcsNkZBQTZGLFVBQVUsc0NBQXNDLFNBQVMscUJBQXFCLGdCQUFnQixnQkFBZ0IsSUFBSSx1QkFBdUIsb0JBQW9CLHFDQUFxQywwRkFBMEYsSUFBSSwyQkFBMkIseWlFQUF5aUUsRUFBRSxJQUFJLHNCQUFzQix1Q0FBdUMsU0FBUyxzRkFBc0YsNkRBQTZELFFBQVEsc0NBQXNDLFdBQVcsNkZBQTZGLFVBQVUsc0NBQXNDLFNBQVMsMEJBQTBCLGdCQUFnQixxQkFBcUIsSUFBSSx1QkFBdUIsb0JBQW9CLHFDQUFxQywwRkFBMEYsSUFBSSwyQkFBMkIscWlCQUFxaUIsRUFBRSxJQUFJLHNCQUFzQix1Q0FBdUMsU0FBUyxzRkFBc0YsNkRBQTZELFFBQVEsc0NBQXNDLFdBQVcsNkZBQTZGLFVBQVUsc0NBQXNDLFNBQVMseUJBQXlCLGdCQUFnQixvQkFBb0IsSUFBSSx1QkFBdUIsb0JBQW9CLHNDQUFzQyxxR0FBcUcsSUFBSSw0QkFBNEIsbVBBQW1QLG9CQUFvQixzUkFBc1Isb0JBQW9CLHVQQUF1UCxvQkFBb0Isd1BBQXdQLEdBQUcsSUFBSSxzQkFBc0IsbUVBQW1FLGtCQUFrQiwyQ0FBMkMsOERBQThELDZCQUE2QixhQUFhLCtCQUErQixtQkFBbUIsNEJBQTRCLDJDQUEyQyxtRkFBbUYsc0NBQXNDLFNBQVMsb1VBQW9VLHNCQUFzQix1Q0FBdUMsU0FBUyxzRkFBc0YsNkRBQTZELFFBQVEsc0NBQXNDLFdBQVcsNkZBQTZGLFNBQVMsMkNBQTJDLDBCQUEwQixZQUFZLHNDQUFzQyxTQUFTLHlCQUF5QiwyREFBMkQsb0JBQW9CLElBQUksZ0JBQWdCLDBCQUEwQixvQkFBb0IsMkNBQTJDLHVCQUF1QixjQUFjLEdBQUcsR0FBRztBQUM5NTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxFQUFFLFFBQVE7QUFDdEIsVUFBVSxFQUFFLFFBQVE7QUFDcEIsRUFBRSxxQkFBcUIsbUVBQW1FLGtCQUFrQiwyQ0FBMkMsOERBQThELDZCQUE2QixhQUFhLCtCQUErQixtQkFBbUIsNEJBQTRCLDJDQUEyQyxtRkFBbUYsc0NBQXNDLFNBQVMsZUFBZSxzQkFBc0IsOENBQThDLDBCQUEwQixZQUFZLHNDQUFzQyxTQUFTLGlCQUFpQiwyREFBMkQsVUFBVSw4Q0FBOEMsK0JBQStCLFNBQVMsRUFBRSwwQ0FBMEMsT0FBTyxnQkFBZ0IsRUFBRSxrREFBa0QsT0FBTyxrQ0FBa0MsbUNBQW1DLEVBQUUsV0FBVyxJQUFJLG1CQUFtQixXQUFXLEdBQUcsR0FBRztBQUN0a0MsVUFBVSxFQUFFLFFBQVE7QUFDcEIsV0FBVyxFQUFFLFFBQVE7QUFDckI7QUFDQTtBQUNBLFdBQVcsRUFBRSxRQUFRO0FBQ3JCO0FBQ0Esa0JBQWtCLEVBQUUsUUFBUTtBQUM1QixlQUFlLEVBQUUsUUFBUTtBQUN6QixnQkFBZ0IsRUFBRSxRQUFRO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLEVBQUUsUUFBUTs7QUFFN0IsSUFBSSxFQUFFLGlCQUFpQix1QkFBdUIsd0JBQXdCLHNCQUFzQixZQUFZLHNCQUFzQixxQkFBcUI7QUFDbkosRUFBRSxzQkFBc0IsbUVBQW1FLGtCQUFrQiwyQ0FBMkMsOERBQThELDZCQUE2QixhQUFhLCtCQUErQixtQkFBbUIsNEJBQTRCLDJDQUEyQyxtRkFBbUYsc0NBQXNDLFNBQVMsMkJBQTJCLHNCQUFzQix1Q0FBdUMsU0FBUyxzRkFBc0YsNkRBQTZELFFBQVEsc0NBQXNDLFdBQVcsNkZBQTZGLFNBQVMsMkNBQTJDLDBCQUEwQixZQUFZLHNDQUFzQyxTQUFTLGtCQUFrQix1Q0FBdUMsNEJBQTRCLGNBQWMsdUNBQXVDLElBQUksd0NBQXdDLHdHQUF3RyxFQUFFLHNDQUFzQywrQkFBK0IsRUFBRSx1Q0FBdUMsMkNBQTJDLEVBQUUsOEJBQThCLDBDQUEwQyxrQ0FBa0MsZ0NBQWdDLEVBQUUsdUNBQXVDLHdHQUF3RyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxLQUFLLHFCQUFxQixtRUFBbUUsa0JBQWtCLDJDQUEyQyw4REFBOEQsNkJBQTZCLGFBQWEsK0JBQStCLG1CQUFtQiw0QkFBNEIsZ0VBQWdFLG1DQUFtQyxzQkFBc0IsRUFBRSxlQUFlLFlBQVkseUNBQXlDLDRCQUE0QixTQUFTLDZGQUE2RixnQkFBZ0Isb0NBQW9DLFNBQVMsc0ZBQXNGLDZEQUE2RCxRQUFRLHNDQUFzQyxXQUFXLDZGQUE2RixVQUFVLHNDQUFzQyxTQUFTLHlCQUF5Qix1Q0FBdUMsbUNBQW1DLGNBQWMsdUNBQXVDLElBQUkseUNBQXlDLDhGQUE4RixFQUFFLHVCQUF1QixveUVBQW95RSxlQUFlLGtEQUFrRCxlQUFlLHNEQUFzRCxlQUFlLHNEQUFzRCxlQUFlLHNEQUFzRCxHQUFHLEdBQUcsR0FBRyxLQUFLO0FBQ3BxTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsRUFBRSxRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLEVBQUU7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxFQUFFLHNCQUFzQiw4Q0FBOEMsMEJBQTBCLFlBQVksc0NBQXNDLFNBQVMsMkJBQTJCLGlEQUFpRCxvQkFBb0IsV0FBVyxpQkFBaUIsNEJBQTRCLG9DQUFvQyxlQUFlLFdBQVcsR0FBRyxFQUFFO0FBQ3RYO0FBQ0EsU0FBUyxFQUFFLFFBQVE7QUFDbkI7QUFDQTtBQUNBLGdCQUFnQixFQUFFLFFBQVE7QUFDMUI7QUFDQSxXQUFXLEVBQUUsUUFBUTtBQUNyQixFQUFFLHFCQUFxQix1Q0FBdUMsU0FBUyxzRkFBc0YsNkRBQTZELFFBQVEsc0NBQXNDLFdBQVcsNkZBQTZGLFNBQVMsMkNBQTJDLDBCQUEwQixZQUFZLHNDQUFzQyxTQUFTLHdDQUF3Qyx5RkFBeUYsc0NBQXNDLElBQUksNEdBQTRHLGlIQUFpSCxvQ0FBb0Msa0NBQWtDLCtDQUErQyxFQUFFLHNDQUFzQyxTQUFTLEVBQUUsa0NBQWtDLDhDQUE4Qyx3QkFBd0IsdUJBQXVCLHFEQUFxRCxpREFBaUQsSUFBSSxNQUFNLElBQUksbURBQW1ELFdBQVcsNkJBQTZCLFNBQVMsRUFBRSxXQUFXLEtBQUssR0FBRyx1Q0FBdUM7QUFDNTdDLGlCQUFpQixFQUFFLFNBQVM7QUFDNUIsb0JBQW9CLEVBQUUsU0FBUztBQUMvQixxQkFBcUIsRUFBRSxTQUFTO0FBQ2hDO0FBQ0E7QUFDQSxXQUFXLEVBQUUsaUJBQWlCO0FBQzlCO0FBQ0EsZUFBZSxFQUFFLFFBQVE7QUFDekI7QUFDQSxFQUFFO0FBQ0YsZ0JBQWdCLEVBQUUsUUFBUTtBQUMxQixzQkFBc0IsRUFBRSxRQUFRO0FBQ2hDLGtCQUFrQixFQUFFLGlCQUFpQjtBQUNyQyxtQkFBbUIsRUFBRSxRQUFRO0FBQzdCLGdCQUFnQixFQUFFLFFBQVE7QUFDMUIsV0FBVyxFQUFFLFFBQVE7QUFDckIsZUFBZSxFQUFFLFFBQVE7QUFDekIsYUFBYSxFQUFFLFFBQVEsTUFBTSxZQUFZLEVBQUUsVUFBVTtBQUNyRDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsRUFBRSxpQkFBaUI7QUFDdkM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsYUFBYSxFQUFFLFFBQVE7QUFDdkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRSxzQkFBc0IsbUVBQW1FLGtCQUFrQiwyQ0FBMkMsOERBQThELDZCQUE2QixhQUFhLCtCQUErQixtQkFBbUIsNEJBQTRCLDJDQUEyQyxtRkFBbUYsc0NBQXNDLFNBQVMsY0FBYyxtQkFBbUIsbUVBQW1FLGtCQUFrQiwyQ0FBMkMsOERBQThELDZCQUE2QixhQUFhLCtCQUErQixtQkFBbUIsNEJBQTRCLGdFQUFnRSxtQ0FBbUMsc0JBQXNCLEVBQUUsZUFBZSxZQUFZLHlDQUF5Qyw0QkFBNEIsU0FBUyw2RkFBNkYsZ0JBQWdCLG9DQUFvQyxTQUFTLHNGQUFzRiw2REFBNkQsUUFBUSxzQ0FBc0MsV0FBVyw2RkFBNkYsU0FBUywyQ0FBMkMsMEJBQTBCLFlBQVksc0NBQXNDLFNBQVMsb0JBQW9CLHdFQUF3RSxpQ0FBaUMsSUFBSSxTQUFTLHFCQUFxQiw0Q0FBNEMsSUFBSSx5Q0FBeUMsY0FBYyxvQkFBb0IscUNBQXFDLGdDQUFnQyxnQ0FBZ0MsU0FBUyxFQUFFLHVCQUF1QixFQUFFLElBQUksR0FBRyxHQUFHLHFDQUFxQztBQUNwbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxFQUFFLFFBQVE7QUFDdEIsV0FBVyxFQUFFLFFBQVE7QUFDckIsc0JBQXNCLEVBQUUsUUFBUTtBQUNoQyxrQkFBa0IsRUFBRSxpQkFBaUI7QUFDckM7QUFDQTtBQUNBLGlDQUFpQyw4QkFBOEI7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCO0FBQ2hCO0FBQ0E7O0FBRUEsY0FBYztBQUNkLDhCQUE4QixFQUFFLFFBQVE7QUFDeEM7O0FBRUEsY0FBYztBQUNkLDhCQUE4QixFQUFFLFFBQVE7QUFDeEM7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EsRUFBRSxzQkFBc0IsbUVBQW1FLGtCQUFrQiwyQ0FBMkMsOERBQThELDZCQUE2QixhQUFhLCtCQUErQixtQkFBbUIsNEJBQTRCLDJDQUEyQyxtRkFBbUYsc0NBQXNDLFNBQVMsWUFBWSxzQkFBc0IsbUVBQW1FLGtCQUFrQiwyQ0FBMkMsOERBQThELDZCQUE2QixhQUFhLCtCQUErQixtQkFBbUIsNEJBQTRCLGdFQUFnRSxtQ0FBbUMsc0JBQXNCLEVBQUUsZUFBZSxZQUFZLHlDQUF5Qyw0QkFBNEIsU0FBUyw2RkFBNkYsaUJBQWlCLHNDQUFzQyxTQUFTLHlCQUF5QixrRkFBa0Ysa0JBQWtCLGdIQUFnSCxJQUFJLDBDQUEwQyxxRUFBcUUsY0FBYyxvQkFBb0IsMkJBQTJCLHFDQUFxQyxjQUFjLEVBQUUsV0FBVyxtQkFBbUIsV0FBVyxHQUFHLDZCQUE2QixNQUFNLEVBQUUsK0JBQStCLFVBQVUsNkNBQTZDLHdEQUF3RCxJQUFJLEdBQUcsOENBQThDLFdBQVcsK0JBQStCLFdBQVcsRUFBRSxXQUFXLFNBQVMsR0FBRztBQUN4Z0U7QUFDQTtBQUNBLG1CQUFtQixFQUFFLFFBQVE7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsVUFBVSxFQUFFLFFBQVE7QUFDcEIsV0FBVyxFQUFFLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUUsUUFBUTtBQUNyQixnQkFBZ0IsRUFBRSxRQUFROztBQUUxQixJQUFJLEVBQUUsV0FBVztBQUNqQixlQUFlLEVBQUUsUUFBUTtBQUN6QjtBQUNBLEVBQUUsc0JBQXNCLG1FQUFtRSxrQkFBa0IsMkNBQTJDLDhEQUE4RCw2QkFBNkIsYUFBYSwrQkFBK0IsbUJBQW1CLDRCQUE0QiwyQ0FBMkMsbUZBQW1GLHNDQUFzQyxTQUFTLGVBQWUsc0JBQXNCLHVDQUF1QyxTQUFTLHNGQUFzRiw2REFBNkQsUUFBUSxzQ0FBc0MsV0FBVyw2RkFBNkYsU0FBUywyQ0FBMkMsMEJBQTBCLFlBQVksc0NBQXNDLFNBQVMscUJBQXFCLHFFQUFxRSxzQ0FBc0MsSUFBSSxrREFBa0QsaURBQWlELDZCQUE2QiwwRUFBMEUsT0FBTyxJQUFJLGdCQUFnQixjQUFjLGlDQUFpQywwQkFBMEIsTUFBTSxRQUFRLFVBQVUsc0JBQXNCLG9CQUFvQixNQUFNLEdBQUcsdUNBQXVDLGtDQUFrQyxJQUFJLDZCQUE2Qix5Q0FBeUMsb0JBQW9CLHVCQUF1QiwyQkFBMkIsMkNBQTJDLEVBQUUsNkJBQTZCLDJCQUEyQixpQ0FBaUMsZ0NBQWdDLHFEQUFxRCxFQUFFLDJCQUEyQix5Q0FBeUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxnQ0FBZ0M7QUFDcGlFO0FBQ0E7QUFDQSxtQkFBbUIsRUFBRSxRQUFRO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxFQUFFLFFBQVE7QUFDcEI7QUFDQTtBQUNBLFdBQVcsRUFBRSxRQUFRO0FBQ3JCLG9CQUFvQixFQUFFLFdBQVc7QUFDakMsMkJBQTJCLEVBQUUsUUFBUTtBQUNyQyxrQkFBa0IsRUFBRSxRQUFRO0FBQzVCO0FBQ0E7QUFDQSxtQkFBbUIsRUFBRSxRQUFRO0FBQzdCLGtCQUFrQixFQUFFLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsc0JBQXNCLG1FQUFtRSxrQkFBa0IsMkNBQTJDLDhEQUE4RCw2QkFBNkIsYUFBYSwrQkFBK0IsbUJBQW1CLDRCQUE0QiwyQ0FBMkMsbUZBQW1GLHNDQUFzQyxTQUFTLGVBQWUsc0JBQXNCLG1FQUFtRSxrQkFBa0IsMkNBQTJDLDhEQUE4RCw2QkFBNkIsYUFBYSwrQkFBK0IsbUJBQW1CLDRCQUE0QiwyQ0FBMkMsbUZBQW1GLHNDQUFzQyxTQUFTLGVBQWUsc0JBQXNCLHVDQUF1QyxTQUFTLHNGQUFzRiw2REFBNkQsUUFBUSxzQ0FBc0MsV0FBVyw2RkFBNkYsU0FBUywyQ0FBMkMsMEJBQTBCLFlBQVksc0NBQXNDLFNBQVMsbUNBQW1DLHFFQUFxRSxNQUFNLGFBQWEsbUNBQW1DLCtCQUErQiwyQ0FBMkMsSUFBSSwwQ0FBMEMsb0RBQW9ELDJDQUEyQyxjQUFjLElBQUksZ0JBQWdCLGNBQWMsaUNBQWlDLDZJQUE2SSxJQUFJLHdGQUF3RixJQUFJLEdBQUcsMkNBQTJDLGtDQUFrQyxJQUFJLDBEQUEwRCxzRUFBc0UsZ0JBQWdCLDZEQUE2RCw4Q0FBOEMsNEJBQTRCLHdDQUF3QyxpQ0FBaUMsa0RBQWtELDhEQUE4RCxFQUFFLCtCQUErQixtQkFBbUIsWUFBWSw4QkFBOEIsOEJBQThCLGlDQUFpQywyQ0FBMkMsRUFBRSxxQ0FBcUMsNkZBQTZGLEVBQUUsMkJBQTJCLHNCQUFzQixFQUFFLDhCQUE4QiwwRkFBMEYsRUFBRSwyQkFBMkIsd0JBQXdCLEVBQUUsSUFBSSxJQUFJLEVBQUUsR0FBRyxrQ0FBa0M7QUFDaDBHO0FBQ0E7QUFDQSxtQkFBbUIsRUFBRSxRQUFRO0FBQzdCO0FBQ0E7QUFDQSxzQkFBc0IsRUFBRSxRQUFRO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLFdBQVcsRUFBRSxrQkFBa0I7QUFDL0IsZUFBZSxFQUFFLFFBQVE7QUFDekI7QUFDQSxtQkFBbUIsRUFBRSxRQUFRLE1BQU0sZ0JBQWdCLE1BQU0sZUFBZTtBQUN4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixFQUFFLFFBQVEsUUFBUSxnQkFBZ0IsRUFBRSxnQkFBZ0I7QUFDdkU7O0FBRUEsb0JBQW9CLEVBQUUsV0FBVztBQUNqQztBQUNBO0FBQ0EsZ0JBQWdCLEVBQUUsUUFBUTtBQUMxQixlQUFlLEVBQUUsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxXQUFXLEVBQUUsbUJBQW1COztBQUVoQztBQUNBLGtCQUFrQixFQUFFLFFBQVE7QUFDNUI7O0FBRUE7QUFDQSxrQkFBa0IsRUFBRSxRQUFRO0FBQzVCO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixFQUFFLHdCQUF3QixNQUFNLEtBQUs7O0FBRXZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLHNCQUFzQixtRUFBbUUsa0JBQWtCLDJDQUEyQyw4REFBOEQsNkJBQTZCLGFBQWEsK0JBQStCLG1CQUFtQiw0QkFBNEIsMkNBQTJDLG1GQUFtRixzQ0FBc0MsU0FBUyxlQUFlLHNCQUFzQixtRUFBbUUsa0JBQWtCLDJDQUEyQyw4REFBOEQsNkJBQTZCLGFBQWEsK0JBQStCLG1CQUFtQiw0QkFBNEIsZ0VBQWdFLG1DQUFtQyxzQkFBc0IsRUFBRSxlQUFlLFlBQVkseUNBQXlDLDRCQUE0QixTQUFTLDZGQUE2RixpQkFBaUIsc0NBQXNDLFNBQVMsc0JBQXNCLGtGQUFrRixlQUFlLCtKQUErSixJQUFJLCtCQUErQiwyQkFBMkIseUJBQXlCLEtBQUsscUJBQXFCLHdCQUF3QixxQ0FBcUMsY0FBYyxFQUFFLFdBQVcsbUJBQW1CLFdBQVcsR0FBRyw2QkFBNkIsOEJBQThCLEVBQUUsK0JBQStCLFVBQVUsK0NBQStDLG1FQUFtRSxJQUFJLEdBQUcsdUNBQXVDLFdBQVcsK0JBQStCLFdBQVcsRUFBRSxXQUFXLFNBQVMsR0FBRztBQUMzaUU7QUFDQTtBQUNBLG1CQUFtQixFQUFFLFFBQVE7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsRUFBRSxRQUFRO0FBQ3BCLFdBQVcsRUFBRSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEIsaUJBQWlCLElBQUksb0JBQW9CLHVCQUF1QiwwQkFBMEI7QUFDMUY7QUFDQTtBQUNBLFdBQVcsRUFBRSxRQUFRO0FBQ3JCLGdCQUFnQixFQUFFLFFBQVE7O0FBRTFCLElBQUksRUFBRSxXQUFXO0FBQ2pCLGVBQWUsRUFBRSxRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLEVBQUUsc0JBQXNCLG1FQUFtRSxrQkFBa0IsMkNBQTJDLDhEQUE4RCw2QkFBNkIsYUFBYSwrQkFBK0IsbUJBQW1CLDRCQUE0QiwyQ0FBMkMsbUZBQW1GLHNDQUFzQyxTQUFTLGVBQWUsc0JBQXNCLG1FQUFtRSxrQkFBa0IsMkNBQTJDLDhEQUE4RCw2QkFBNkIsYUFBYSwrQkFBK0IsbUJBQW1CLDRCQUE0QixnRUFBZ0UsbUNBQW1DLHNCQUFzQixFQUFFLGVBQWUsWUFBWSx5Q0FBeUMsNEJBQTRCLFNBQVMsNkZBQTZGLGdCQUFnQixvQ0FBb0MsU0FBUyxzRkFBc0YsNkRBQTZELFFBQVEsc0NBQXNDLFdBQVcsNkZBQTZGLFVBQVUsc0NBQXNDLFNBQVMsc0JBQXNCLHdFQUF3RSxtQ0FBbUMsSUFBSSwyQ0FBMkMsdURBQXVELG1CQUFtQixxQ0FBcUMsNENBQTRDLEVBQUUscUNBQXFDLDhCQUE4QixtQkFBbUIseUJBQXlCLE9BQU8sU0FBUyxHQUFHLEVBQUUseUNBQXlDO0FBQ2hqRTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUUsUUFBUTtBQUNyQixZQUFZLEVBQUUsUUFBUTtBQUN0QjtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsRUFBRSxRQUFRO0FBQzVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxFQUFFLFFBQVE7QUFDdkIsY0FBYyxFQUFFLFFBQVE7QUFDeEI7QUFDQSx3QkFBd0IsRUFBRSxRQUFRO0FBQ2xDOztBQUVBO0FBQ0Esb0JBQW9CLEVBQUUsUUFBUTtBQUM5Qjs7QUFFQTtBQUNBLHdCQUF3QixFQUFFLFFBQVE7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixFQUFFLFlBQVksSUFBSSxtQkFBbUIsK0JBQStCLHdCQUF3QixpQ0FBaUM7QUFDakosU0FBUyxFQUFFLFFBQVE7QUFDbkI7O0FBRUEsSUFBSSxFQUFFLFdBQVc7QUFDakI7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixFQUFFLFFBQVE7QUFDN0I7QUFDQSxFQUFFLHNCQUFzQixtRUFBbUUsa0JBQWtCLDJDQUEyQyw4REFBOEQsNkJBQTZCLGFBQWEsK0JBQStCLG1CQUFtQiw0QkFBNEIsMkNBQTJDLG1GQUFtRixzQ0FBc0MsU0FBUyxlQUFlLHNCQUFzQiw4Q0FBOEMsMEJBQTBCLFlBQVksc0NBQXNDLFNBQVMsb0JBQW9CLG1CQUFtQiwrREFBK0Qsc0JBQXNCLG1FQUFtRSxrQkFBa0IsMkNBQTJDLDhEQUE4RCw2QkFBNkIsYUFBYSwrQkFBK0IsbUJBQW1CLDRCQUE0QiwyQ0FBMkMsbUZBQW1GLHNDQUFzQyxTQUFTLGNBQWMscUJBQXFCLDhDQUE4QywwQkFBMEIsWUFBWSxzQ0FBc0MsU0FBUyxvQkFBb0IsK0VBQStFLCtEQUErRCwrQ0FBK0MsRUFBRSx1QkFBdUIsd0NBQXdDLG9EQUFvRCw2QkFBNkIsTUFBTSxJQUFJLG9CQUFvQixJQUFJLEVBQUUsdUNBQXVDO0FBQ3QxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxFQUFFLFFBQVE7QUFDekI7QUFDQTtBQUNBLGdCQUFnQixFQUFFLFFBQVE7QUFDMUIsc0JBQXNCLEVBQUUsUUFBUTtBQUNoQyxrQkFBa0IsRUFBRSxpQkFBaUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osV0FBVyxFQUFFLFFBQVE7QUFDckIsZUFBZSxFQUFFLFFBQVE7QUFDekIsaUJBQWlCLEVBQUUsUUFBUTtBQUMzQixpQkFBaUIsRUFBRSxRQUFRO0FBQzNCLGFBQWEsRUFBRSxRQUFRLGVBQWUsRUFBRSxFQUFFLFFBQVEsZUFBZSxNQUFNLEVBQUUsUUFBUTs7QUFFakY7QUFDQTtBQUNBLG9CQUFvQixFQUFFLGlCQUFpQjtBQUN2Qzs7QUFFQTtBQUNBLGFBQWEsRUFBRSxRQUFRO0FBQ3ZCO0FBQ0EsRUFBRSxzQkFBc0IsbUVBQW1FLGtCQUFrQiwyQ0FBMkMsOERBQThELDZCQUE2QixhQUFhLCtCQUErQixtQkFBbUIsNEJBQTRCLDJDQUEyQyxtRkFBbUYsc0NBQXNDLFNBQVMsZUFBZSxnQkFBZ0Isc0NBQXNDLFNBQVMscUJBQXFCLG9DQUFvQywwRUFBMEUsa0JBQWtCLDJDQUEyQyxzQkFBc0IsOENBQThDLDBCQUEwQixZQUFZLHNDQUFzQyxTQUFTLGVBQWUsMENBQTBDLGlKQUFpSjtBQUM1bUM7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSixhQUFhLEVBQUUsaUJBQWlCO0FBQ2hDLG9CQUFvQixFQUFFLHNCQUFzQjtBQUM1QyxlQUFlLEVBQUUsb0JBQW9CO0FBQ3JDLGlCQUFpQixFQUFFLGFBQWE7QUFDaEMscUJBQXFCLEVBQUUsaUJBQWlCO0FBQ3hDLFNBQVMsRUFBRSxjQUFjO0FBQ3pCLGdCQUFnQixFQUFFLFlBQVk7QUFDOUIsZ0JBQWdCLEVBQUUsWUFBWTtBQUM5QixlQUFlLEVBQUUsV0FBVztBQUM1QixpQkFBaUIsRUFBRSxhQUFhO0FBQ2hDLFdBQVcsRUFBRSxRQUFRO0FBQ3JCLGFBQWEsRUFBRSxrQkFBa0I7QUFDakMsZ0JBQWdCLEVBQUUscUJBQXFCO0FBQ3ZDLDBCQUEwQixzQkFBc0IsbUVBQW1FLGtCQUFrQiwyQ0FBMkMsOERBQThELDZCQUE2QixhQUFhLCtCQUErQixtQkFBbUIsNEJBQTRCLDJDQUEyQyxtRkFBbUYsc0NBQXNDLFNBQVMsZUFBZSxzQkFBc0IsdUNBQXVDLFNBQVMsc0ZBQXNGLDZEQUE2RCxRQUFRLHNDQUFzQyxXQUFXLDZGQUE2RixTQUFTLDJDQUEyQywwQkFBMEIsWUFBWSxzQ0FBc0MsU0FBUywwQkFBMEIsNkJBQTZCLHFCQUFxQixJQUFJLGNBQWMsMEJBQTBCLGtDQUFrQyxJQUFJLFlBQVksRUFBRSx3RkFBd0YsZ0JBQWdCLEVBQUUscUNBQXFDLFVBQVUsRUFBRSxFQUFFLEVBQUUsV0FBVyw4QkFBOEIseUJBQXlCLEVBQUUsRUFBRSxFQUFFLFdBQVcsSUFBSSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssSUFBSTtBQUNqOUM7QUFDQTtBQUNBO0FBQ0EsU0FBUyxFQUFFLFFBQVEsUUFBUSxXQUFXO0FBQ3RDO0FBQ0EsYUFBYSxFQUFFLFFBQVEsTUFBTSxZQUFZLEVBQUUsVUFBVTtBQUNyRDtBQUNBO0FBQ0EsV0FBVyxFQUFFLFFBQVE7QUFDckIsZUFBZSxFQUFFLFFBQVE7QUFDekIsaUJBQWlCLEVBQUUsUUFBUTtBQUMzQixpQkFBaUIsRUFBRSxRQUFRO0FBQzNCLG9CQUFvQixFQUFFLFFBQVE7QUFDOUI7QUFDQTtBQUNBLFdBQVcsRUFBRSxRQUFRO0FBQ3JCLGVBQWUsRUFBRSxRQUFRO0FBQ3pCLGlCQUFpQixFQUFFLFFBQVE7QUFDM0Isb0JBQW9CLEVBQUUsUUFBUTtBQUM5QixFQUFFLHNCQUFzQixtRUFBbUUsa0JBQWtCLDJDQUEyQyw4REFBOEQsNkJBQTZCLGFBQWEsK0JBQStCLG1CQUFtQiw0QkFBNEIsMkNBQTJDLG1GQUFtRixzQ0FBc0MsU0FBUyxlQUFlLGdCQUFnQixzQ0FBc0MsU0FBUyx3QkFBd0IsbUNBQW1DO0FBQ3BvQjtBQUNBO0FBQ0EscUNBQXFDLEVBQUUsUUFBUTs7QUFFL0MsbUJBQW1CLEVBQUUsUUFBUTtBQUM3QjtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBLElBQUksRUFBRSxRQUFROztBQUVkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLGtCQUFrQixFQUFFLFFBQVE7QUFDNUIsYUFBYSxFQUFFLFFBQVE7QUFDdkIsbUJBQW1CLEVBQUUsUUFBUTtBQUM3QixtQkFBbUIsRUFBRSxRQUFRO0FBQzdCLGlCQUFpQixFQUFFLFFBQVE7QUFDM0IsbUJBQW1CLEVBQUUsUUFBUTtBQUM3Qjs7QUFFQTtBQUNBLGFBQWEsRUFBRSxRQUFRO0FBQ3ZCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxFQUFFLFFBQVE7QUFDakQ7QUFDQTtBQUNBLEVBQUUsc0JBQXNCLG1FQUFtRSxrQkFBa0IsMkNBQTJDLDhEQUE4RCw2QkFBNkIsYUFBYSwrQkFBK0IsbUJBQW1CLDRCQUE0QiwyQ0FBMkMsbUZBQW1GLHNDQUFzQyxTQUFTLGVBQWUsY0FBYyxzQ0FBc0MsU0FBUyxFQUFFLHNCQUFzQixtRUFBbUUsa0JBQWtCLDJDQUEyQyw4REFBOEQsNkJBQTZCLGFBQWEsK0JBQStCLG1CQUFtQiw0QkFBNEIsMkNBQTJDLG1GQUFtRixzQ0FBc0MsU0FBUywyQkFBMkIsc0JBQXNCLDhDQUE4QywwQkFBMEIsWUFBWSxzQ0FBc0MsU0FBUyx3REFBd0QsbUJBQW1CLDRFQUE0RSxrQkFBa0Isc0NBQXNDLEdBQUcscUNBQXFDLHlDQUF5QyxtRUFBbUUsc0JBQXNCLG1FQUFtRSxrQkFBa0IsMkNBQTJDLDhEQUE4RCw2QkFBNkIsYUFBYSwrQkFBK0IsbUJBQW1CLDRCQUE0QixnRUFBZ0UsbUNBQW1DLHNCQUFzQixFQUFFLGVBQWUsWUFBWSx5Q0FBeUMsNEJBQTRCLFNBQVMsNkZBQTZGLGlCQUFpQixzQ0FBc0MsU0FBUyx5SkFBeUosZ0NBQWdDLFNBQVMsbTRDQUFtNEMsU0FBUyxvSUFBb0ksYUFBYSxzTkFBc04sU0FBUyx3SkFBd0osV0FBVyx3TEFBd0wsV0FBVyx1SEFBdUgsV0FBVyw4Q0FBOEMsb0tBQW9LLHlMQUF5TCxlQUFlLG9CQUFvQixlQUFlLDBCQUEwQixlQUFlLHNEQUFzRCx5Q0FBeUMsbUJBQW1CLDBOQUEwTixnQkFBZ0Isc0NBQXNDLFNBQVMsNkJBQTZCLDBCQUEwQixnQ0FBZ0M7QUFDcHBMLE1BQU07QUFDTjtBQUNBO0FBQ0EsbUJBQW1CLFVBQVU7QUFDN0IsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxtQkFBbUIsU0FBUztBQUM1Qix1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLG1CQUFtQixXQUFXO0FBQzlCLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsbUJBQW1CLGlCQUFpQjtBQUNwQyx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLGdCQUFnQixzQ0FBc0MsU0FBUyx1QkFBdUIsdUNBQXVDLGdNQUFnTSxZQUFZLElBQUksRUFBRSxvQ0FBb0MsRUFBRSxvQ0FBb0MsRUFBRSx5RUFBeUUsRUFBRSxrRUFBa0UsRUFBRSwrQ0FBK0MsS0FBSyxvREFBb0QsNEZBQTRGLEVBQUUsZUFBZSxzQ0FBc0MsU0FBUyxpRkFBaUYsZ0JBQWdCLHdEQUF3RCxRQUFRLGtEQUFrRCxFQUFFLElBQUksY0FBYywwQ0FBMEMsVUFBVSwyQ0FBMkMsK0NBQStDLDZDQUE2Qyw2Q0FBNkMseUNBQXlDLG1GQUFtRixzQkFBc0IsbUVBQW1FLGtCQUFrQiwyQ0FBMkMsOERBQThELDZCQUE2QixhQUFhLCtCQUErQixtQkFBbUIsNEJBQTRCLDJDQUEyQyxtRkFBbUYsc0NBQXNDLFNBQVMsc0hBQXNILGNBQWMsc0NBQXNDLFNBQVMsRUFBRSxnQkFBZ0Isc0NBQXNDLFNBQVMsa0JBQWtCO0FBQzduRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxnQkFBZ0I7QUFDbEQsbUNBQW1DLGdCQUFnQjtBQUNuRDs7QUFFQTtBQUNBLGtCQUFrQjtBQUNsQiwwQ0FBMEMsZ0JBQWdCO0FBQzFEO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0I7QUFDbEIsa0NBQWtDLGdCQUFnQjtBQUNsRCxtQ0FBbUMsZ0JBQWdCO0FBQ25ELDBDQUEwQyxnQkFBZ0I7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLFVBQVUscUNBQXFDLGlDQUFpQyxZQUFZLGtCQUFrQixjQUFjLHNDQUFzQyxTQUFTLDhCQUE4QiwycUNBQTJxQyxjQUFjLHNDQUFzQyxTQUFTLEVBQUUsc0JBQXNCLG1FQUFtRSxrQkFBa0IsMkNBQTJDLDhEQUE4RCw2QkFBNkIsYUFBYSwrQkFBK0IsbUJBQW1CLDRCQUE0QiwyQ0FBMkMsbUZBQW1GLHNDQUFzQyxTQUFTLGVBQWUsZ0JBQWdCLHNDQUFzQyxTQUFTLGdEQUFnRCx1Q0FBdUMseWpCQUF5akIsb0VBQW9FLEtBQUssd3JCQUF3ckIsc0VBQXNFLEtBQUssNnFCQUE2cUIsR0FBRyxlQUFlLHNDQUFzQyxTQUFTLHlCQUF5QixrRUFBa0Usa0JBQWtCLGtFQUFrRSxJQUFJLHdCQUF3QixrQkFBa0IsRUFBRSwrQ0FBK0MsUUFBUSxFQUFFLGdDQUFnQyxvQ0FBb0MsUUFBUSxLQUFLLEVBQUUsSUFBSSxzQkFBc0IsbUVBQW1FLGtCQUFrQiwyQ0FBMkMsOERBQThELDZCQUE2QixhQUFhLCtCQUErQixtQkFBbUIsNEJBQTRCLDJDQUEyQyxtRkFBbUYsc0NBQXNDLFNBQVMseUNBQXlDLHNCQUFzQiw4Q0FBOEMsMEJBQTBCLFlBQVksc0NBQXNDLFNBQVMsNkJBQTZCLDBDQUEwQyxpQ0FBaUMsNkJBQTZCLGlEQUFpRCxtQ0FBbUMsYUFBYSxzQkFBc0IsZUFBZSxnQ0FBZ0MsZUFBZSxFQUFFLG9CQUFvQixRQUFRO0FBQ3hrTCx3QkFBd0IsRUFBRSxRQUFROztBQUVsQyxnQkFBZ0IsRUFBRSxlQUFlO0FBQ2pDOztBQUVBLFlBQVksRUFBRSxRQUFRO0FBQ3RCLFdBQVcsRUFBRSxRQUFROztBQUVyQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsZ0JBQWdCLHNDQUFzQyxTQUFTLDZEQUE2RCxnQkFBZ0IsOENBQThDLDBGQUEwRixFQUFFLDJCQUEyQixxeURBQXF5RCxFQUFFLGdEQUFnRCwwRkFBMEYsRUFBRSwyQkFBMkIsdzlEQUF3OUQsRUFBRSx3REFBd0QsMEZBQTBGLEVBQUUsMkJBQTJCLGc1REFBZzVELEVBQUUsbURBQW1ELDBGQUEwRixFQUFFLDJCQUEyQiwrdUVBQSt1RSxFQUFFLEdBQUcsc0JBQXNCLG1FQUFtRSxrQkFBa0IsMkNBQTJDLDhEQUE4RCw2QkFBNkIsYUFBYSwrQkFBK0IsbUJBQW1CLDRCQUE0QixnRUFBZ0UsbUNBQW1DLHNCQUFzQixFQUFFLGVBQWUsWUFBWSx5Q0FBeUMsNEJBQTRCLFNBQVMsNkZBQTZGLGdCQUFnQixvQ0FBb0MsU0FBUyxzRkFBc0YsNkRBQTZELFFBQVEsc0NBQXNDLFdBQVcsNkZBQTZGLFNBQVMsMkNBQTJDLDBCQUEwQixZQUFZLHNDQUFzQyxTQUFTLHVCQUF1QixrRkFBa0Ysa0JBQWtCLElBQUksb0VBQW9FLDZFQUE2RSw2SUFBNkksNEJBQTRCLE1BQU0sa0RBQWtELGdDQUFnQyxJQUFJLHdCQUF3Qix5Q0FBeUMsWUFBWSxFQUFFLHlCQUF5QixZQUFZLGVBQWUsV0FBVyxpQ0FBaUMsZUFBZSxHQUFHLGlCQUFpQix3QkFBd0IscUJBQXFCLG1CQUFtQixxQkFBcUIsR0FBRyxHQUFHLGdCQUFnQiw2QkFBNkIsTUFBTSxFQUFFLGtGQUFrRix1QkFBdUIsY0FBYyw2QkFBNkIsV0FBVyxHQUFHLElBQUksRUFBRSxXQUFXLEVBQUUsb0JBQW9CLHFDQUFxQyxFQUFFLElBQUksSUFBSTtBQUNyNlY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixFQUFFLFFBQVE7QUFDOUI7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QixtQkFBbUIsRUFBRSxRQUFRO0FBQzdCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLEVBQUUsUUFBUTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsRUFBRSxRQUFRO0FBQzNCO0FBQ0EsZUFBZSxFQUFFLFFBQVE7QUFDekIsaUJBQWlCLEVBQUUsUUFBUTtBQUMzQjtBQUNBLG9CQUFvQixFQUFFLFFBQVE7QUFDOUIsaUJBQWlCLEVBQUUsUUFBUTtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUUsUUFBUTtBQUNyQixpQkFBaUIsRUFBRSxRQUFRO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLEVBQUUsUUFBUTtBQUMxQixtQkFBbUIsRUFBRSxRQUFRO0FBQzdCLG1CQUFtQixFQUFFLFFBQVE7QUFDN0I7QUFDQTtBQUNBLDZCQUE2QixFQUFFLFFBQVE7QUFDdkMsbUJBQW1CLEVBQUUsa0JBQWtCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxzQkFBc0IsbUVBQW1FLGtCQUFrQiwyQ0FBMkMsOERBQThELDZCQUE2QixhQUFhLCtCQUErQixtQkFBbUIsNEJBQTRCLDJDQUEyQyxtRkFBbUYsc0NBQXNDLFNBQVMsZUFBZSxjQUFjLHNDQUFzQyxTQUFTLHlDQUF5QyxzQ0FBc0MsK0RBQStELHNCQUFzQix1Q0FBdUMsU0FBUyxzRkFBc0YsNkRBQTZELFFBQVEsc0NBQXNDLFdBQVcsNkZBQTZGLFNBQVMsMkNBQTJDLDBCQUEwQixZQUFZLHNDQUFzQyxTQUFTLCtEQUErRCxpREFBaUQsZUFBZSxxR0FBcUcsZUFBZSxJQUFJLHNCQUFzQixnQ0FBZ0MsWUFBWSxFQUFFLEVBQUUsaUNBQWlDLHFEQUFxRCxNQUFNO0FBQ3RtRCxpQkFBaUIsRUFBRSxRQUFRO0FBQzNCLEVBQUUsc0VBQXNFLEtBQUssUUFBUSw0RUFBNEUsS0FBSyxRQUFRLDRFQUE0RSxLQUFLLFFBQVEsNEVBQTRFLEtBQUssUUFBUSw0RUFBNEUsS0FBSyxRQUFRLDRFQUE0RSxLQUFLLFFBQVEsTUFBTSxzQkFBc0IsbUVBQW1FLGtCQUFrQiwyQ0FBMkMsOERBQThELDZCQUE2QixhQUFhLCtCQUErQixtQkFBbUIsNEJBQTRCLDJDQUEyQyxtRkFBbUYsc0NBQXNDLFNBQVMsZUFBZSxzQkFBc0IsbUVBQW1FLGtCQUFrQiwyQ0FBMkMsOERBQThELDZCQUE2QixhQUFhLCtCQUErQixtQkFBbUIsNEJBQTRCLDJDQUEyQyxtRkFBbUYsc0NBQXNDLFNBQVMsZUFBZSxzQkFBc0IsOENBQThDLDBCQUEwQixZQUFZLHNDQUFzQyxTQUFTLGdCQUFnQixtQkFBbUI7QUFDcHVELFdBQVcsRUFBRSw4QkFBOEI7QUFDM0MsZUFBZSxFQUFFLHNCQUFzQjtBQUN2QyxpQkFBaUIsRUFBRSwwQkFBMEI7QUFDN0MsaUJBQWlCLEVBQUUsUUFBUTtBQUMzQiw0QkFBNEIsZ0JBQWdCLHNDQUFzQyxTQUFTLHdDQUF3QyxnQkFBZ0IsZUFBZSwwQ0FBMEMsb0JBQW9CLG1EQUFtRCxJQUFJLGlFQUFpRSxjQUFjLDRCQUE0QiwwREFBMEQseUZBQXlGLFlBQVksMkZBQTJGLGVBQWUsc0NBQXNDLFNBQVMseUNBQXlDLGdCQUFnQiw4Q0FBOEMsc0RBQXNELE1BQU0seUJBQXlCLFVBQVUsbURBQW1ELFlBQVksaUNBQWlDLFNBQVMsNkJBQTZCLE1BQU0sbUZBQW1GLFlBQVksMkNBQTJDLHFEQUFxRCxVQUFVLDRCQUE0Qix5QkFBeUIsTUFBTSxPQUFPLDBCQUEwQixRQUFRLGtDQUFrQyxlQUFlLDZDQUE2QyxNQUFNLCtEQUErRCxNQUFNLG1JQUFtSSxNQUFNLHNDQUFzQyxNQUFNLHVEQUF1RCxnQkFBZ0Isc0NBQXNDLFNBQVMsK0NBQStDLHlCQUF5Qiw4QkFBOEIsZUFBZSw2QkFBNkIsTUFBTSw0QkFBNEIsaUVBQWlFLHlDQUF5QyxZQUFZLDBFQUEwRSxnQkFBZ0Isc0NBQXNDLFNBQVMsdUJBQXVCLGdCQUFnQixrQkFBa0IsdUJBQXVCLDRCQUE0QixZQUFZLGtCQUFrQixnQkFBZ0Isc0NBQXNDLFNBQVMsb0JBQW9CLDJEQUEyRCxtRkFBbUYsYUFBYSxrQkFBa0IsSUFBSSxTQUFTLDhCQUE4QixjQUFjLEVBQUUsSUFBSSw4QkFBOEIsNEJBQTRCLHNCQUFzQixPQUFPLHlFQUF5RSxlQUFlLFNBQVMsaUJBQWlCLFVBQVUscUJBQXFCLG1FQUFtRSxrQkFBa0IsMkNBQTJDLDhEQUE4RCw2QkFBNkIsYUFBYSwrQkFBK0IsbUJBQW1CLDRCQUE0QiwyQ0FBMkMsbUZBQW1GLHNDQUFzQyxTQUFTLG1kQUFtZCxjQUFjLHNDQUFzQyxTQUFTLHNGQUFzRixRQUFRLFlBQVksV0FBVyxzQ0FBc0MsYUFBYSxNQUFNLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxjQUFjLHNDQUFzQyxTQUFTLDJDQUEyQyxvQ0FBb0Msa0NBQWtDLGVBQWUsY0FBYyx3akJBQXdqQixFQUFFLG9CQUFvQixpQ0FBaUMsYUFBYSxnQ0FBZ0MsY0FBYyxnQkFBZ0Isc0VBQXNFLFNBQVMsZ0JBQWdCLHdIQUF3SCxhQUFhLG1CQUFtQiw2RUFBNkUsaUJBQWlCLG9DQUFvQyxpQ0FBaUMsSUFBSSx1RkFBdUYsU0FBUywwQkFBMEIsZ0JBQWdCLFNBQVMsc0ZBQXNGLDZEQUE2RCxRQUFRLHNDQUFzQyxXQUFXLDZGQUE2RixTQUFTLG9CQUFvQixtRkFBbUYsNkZBQTZGLDBCQUEwQixLQUFLLG9EQUFvRCw4Q0FBOEMsZ0JBQWdCLHFCQUFxQixVQUFVLHdCQUF3QixjQUFjLDZFQUE2RSxTQUFTLDJKQUEySixvQkFBb0IsS0FBSyxLQUFLLFNBQVMsbUNBQW1DLE1BQU0sOENBQThDLDZCQUE2QixtRkFBbUYsb0JBQW9CLCtCQUErQixvQkFBb0IsU0FBUyxtQkFBbUIsdUJBQXVCLHVFQUF1RSx5RUFBeUUsNkNBQTZDLDBDQUEwQyxrQkFBa0IsaUNBQWlDLFdBQVcsb0NBQW9DLGtCQUFrQixjQUFjLHdDQUF3QyxrQkFBa0IsNkdBQTZHLDZDQUE2QyxFQUFFLGdCQUFnQiw4RkFBOEYsb0JBQW9CLDBDQUEwQyxjQUFjLElBQUksYUFBYSxTQUFTLE1BQU0sY0FBYyxJQUFJLGNBQWMsU0FBUyxNQUFNLGNBQWMsTUFBTSxpRUFBaUUsS0FBSyxjQUFjLCtCQUErQixHQUFHLGdCQUFnQixlQUFlLHdCQUF3QixxQkFBcUIsWUFBWSxpQkFBaUIsVUFBVSxpQ0FBaUMsMkRBQTJELFlBQVksSUFBSSxjQUFjLG1CQUFtQixtQkFBbUIsNERBQTRELEtBQUssdUJBQXVCLEtBQUssa0hBQWtILHlDQUF5QyxrQkFBa0IsTUFBTSx5QkFBeUIsb0JBQW9CLDhCQUE4QixTQUFTLGtDQUFrQyxTQUFTLDBFQUEwRSxJQUFJLFNBQVMseUNBQXlDLGFBQWEsTUFBTSwyQkFBMkIsaUJBQWlCLE1BQU0sb0JBQW9CLDJCQUEyQixNQUFNLCtCQUErQixTQUFTLGNBQWMsU0FBUyxZQUFZLFFBQVEsTUFBTSxxQkFBcUIsT0FBTyxnQ0FBZ0MsVUFBVSxzQ0FBc0Msa0JBQWtCLDJDQUEyQyw4REFBOEQsNkJBQTZCLGFBQWEsK0JBQStCLG1CQUFtQiw2QkFBNkIsZ0JBQWdCLGtGQUFrRixjQUFjLCtEQUErRCxzQkFBc0IsdUNBQXVDLGdCQUFnQixtQ0FBbUMsMkJBQTJCLG1GQUFtRixnQkFBZ0Isb0RBQW9ELGVBQWUseUJBQXlCLElBQUksS0FBSyx5Q0FBeUMsaUJBQWlCLFNBQVMsR0FBRyxTQUFTLFFBQVEsSUFBSSxvQ0FBb0MsUUFBUSxvQkFBb0IsU0FBUyxhQUFhLGlCQUFpQixtQkFBbUIsZ0NBQWdDLFNBQVMsYUFBYSxtQ0FBbUMsSUFBSSwyQkFBMkIsbUJBQW1CLFFBQVEsSUFBSSwwQ0FBMEMsSUFBSSxrQkFBa0IsU0FBUyxrQkFBa0Isb0RBQW9ELElBQUkscUVBQXFFLGtEQUFrRCxjQUFjLGtEQUFrRCxrQkFBa0IscUZBQXFGLDhCQUE4QixXQUFXLHFFQUFxRSxZQUFZLEdBQUcsY0FBYyx3QkFBd0Isa0NBQWtDLDRCQUE0QixHQUFHLEVBQUUsZ0JBQWdCLElBQUksaUZBQWlGLFNBQVMsYUFBYSxNQUFNLGNBQWMsWUFBWSxjQUFjLGFBQWEsZ0JBQWdCLDZDQUE2QyxjQUFjLFFBQVEsV0FBVyxrQ0FBa0MsUUFBUSw2Q0FBNkMsWUFBWSxHQUFHLGdCQUFnQixzQkFBc0IsY0FBYyx5QkFBeUIsVUFBVSxJQUFJLGNBQWMscUZBQXFGLGdDQUFnQywrQkFBK0IscUVBQXFFLFlBQVksSUFBSSxjQUFjLHVCQUF1QixrQ0FBa0MsbUJBQW1CLHFDQUFxQyxHQUFHLGVBQWUsRUFBRSxLQUFLLCtCQUErQixLQUFLLGdCQUFnQiw0REFBNEQsUUFBUSxZQUFZLGtDQUFrQyxtQ0FBbUMsc0JBQXNCLEVBQUUsZUFBZSxhQUFhLGNBQWMsNEJBQTRCLFNBQVMsNkZBQTZGLGdCQUFnQixjQUFjLDBCQUEwQixXQUFXLG9CQUFvQixvRkFBb0YsNElBQTRJLHFEQUFxRCxzQkFBc0IsaUVBQWlFLG9GQUFvRiwySUFBMkksbURBQW1ELGdCQUFnQixvSEFBb0gsMkNBQTJDLFVBQVUsdUVBQXVFLFVBQVUsd0VBQXdFLFVBQVUseUVBQXlFLFVBQVUsK0VBQStFLFVBQVUsa0JBQWtCLFVBQVUsa0JBQWtCLGtCQUFrQixxQkFBcUIsY0FBYyxpRkFBaUYsZ0JBQWdCLGFBQWEsb0dBQW9HLEtBQUssc0JBQXNCLGdCQUFnQixVQUFVLGdDQUFnQywwQ0FBMEMsa0JBQWtCLGFBQWEsWUFBWSxvQ0FBb0MseUNBQXlDLDhDQUE4QyxXQUFXLG9CQUFvQixnQ0FBZ0MsK0JBQStCLHlCQUF5QixxQkFBcUIscUJBQXFCLDRCQUE0QixvQkFBb0IscUJBQXFCLHFCQUFxQiw0QkFBNEIsb0JBQW9CLHFCQUFxQixxQkFBcUIsNEJBQTRCLHFCQUFxQiwrREFBK0QscUJBQXFCLG9EQUFvRCxxQkFBcUIsK0ZBQStGLHdCQUF3Qiw2RUFBNkUsbUVBQW1FLDZDQUE2QywrR0FBK0csbUNBQW1DLHNFQUFzRSxPQUFPLHNFQUFzRSxxRkFBcUYsVUFBVSxrQkFBa0Isa0ZBQWtGLGtEQUFrRCxLQUFLLG1DQUFtQyx5Q0FBeUMsT0FBTyx5QkFBeUIsZ0VBQWdFLDZIQUE2SCxJQUFJLDBUQUEwVCxrQkFBa0IsaUNBQWlDLHNEQUFzRCxjQUFjLEtBQUssVUFBVSxtQ0FBbUMsMkJBQTJCLE1BQU0sbUJBQW1CLE1BQU0sbUJBQW1CLEtBQUssT0FBTyxXQUFXLGtCQUFrQixpQ0FBaUMsc0RBQXNELDBCQUEwQixLQUFLLFVBQVUsMkJBQTJCLE1BQU0sbUJBQW1CLE1BQU0sbUJBQW1CLEtBQUssT0FBTyxhQUFhLG9CQUFvQixrR0FBa0csaUtBQWlLLG9CQUFvQixtSEFBbUgsZ0JBQWdCLGdCQUFnQixtQkFBbUIsa0NBQWtDLGdCQUFnQixnQkFBZ0IsbUJBQW1CLGtDQUFrQyxjQUFjLDRCQUE0QixnQkFBZ0IsZ0JBQWdCLG1CQUFtQixrQ0FBa0MsZ0JBQWdCLGdCQUFnQixtQkFBbUIsdUxBQXVMLGdCQUFnQixnQkFBZ0IsbUJBQW1CLGtDQUFrQyxnQkFBZ0IsaUNBQWlDLDRCQUE0QixjQUFjLG1CQUFtQiw4QkFBOEIsZ0JBQWdCLGtGQUFrRiw0Q0FBNEMsSUFBSSxjQUFjLDRCQUE0QixHQUFHLFNBQVMsY0FBYyx5QkFBeUIsZUFBZSx5QkFBeUIsS0FBSywwQkFBMEIsR0FBRyxrQkFBa0IsZUFBZSxvQ0FBb0MsK0JBQStCLElBQUksOEJBQThCLFNBQVMsZ0JBQWdCLE9BQU8sb0RBQW9ELElBQUksV0FBVyxZQUFZLGFBQWEsU0FBUyxhQUFhLGtCQUFrQixnQ0FBZ0Msb0JBQW9CLHFCQUFxQixvQkFBb0IsZ0JBQWdCLDZCQUE2QiwyQkFBMkIsc0JBQXNCLG9CQUFvQixxQkFBcUIsZUFBZSwwQkFBMEIsbUJBQW1CLG9DQUFvQyx5QkFBeUIseUJBQXlCLDBNQUEwTSxzQkFBc0Isa0VBQWtFLGtCQUFrQixpQ0FBaUMsT0FBTyxpQ0FBaUMsd0JBQXdCLG1HQUFtRywrRkFBK0Ysa0JBQWtCLGlDQUFpQyxPQUFPLGlDQUFpQyx3QkFBd0IsbUdBQW1HLCtGQUErRixtQkFBbUIsb0NBQW9DLHlCQUF5Qix3QkFBd0Isb0JBQW9CLDJCQUEyQiwwR0FBMEcsZ05BQWdOLG9DQUFvQywwQkFBMEIseUJBQXlCLGtCQUFrQixPQUFPLDZFQUE2RSx3QkFBd0IsdU1BQXVNLDRCQUE0QixPQUFPLDBIQUEwSCxrQ0FBa0MsK1FBQStRLG1CQUFtQixzRkFBc0Ysc0JBQXNCLDhGQUE4RixNQUFNLFdBQVcsNkJBQTZCLCtGQUErRixzQkFBc0IsVUFBVSxrQkFBa0IsaUNBQWlDLG1mQUFtZixrQkFBa0IsMEJBQTBCLGtDQUFrQyxvREFBb0QsdUVBQXVFLG9CQUFvQiw0Q0FBNEMscUJBQXFCLDRDQUE0QyxtQkFBbUIsNENBQTRDLHVCQUF1Qiw0Q0FBNEMscUJBQXFCLDRDQUE0QyxzQkFBc0IsNENBQTRDLGlCQUFpQiw0Q0FBNEMsaUNBQWlDLHFEQUFxRCxzQkFBc0IsMkNBQTJDLHVCQUF1QiwyQ0FBMkMsMEJBQTBCLDJDQUEyQyw0QkFBNEIsMkNBQTJDLGtCQUFrQixxQ0FBcUMsbUJBQW1CLHNDQUFzQywyQkFBMkIsbUJBQW1CLFNBQVMsZ0VBQWdFLElBQUksY0FBYyx3QkFBd0Isd0RBQXdELHFCQUFxQixvQkFBb0IsZ0RBQWdELEVBQUUsdUJBQXVCLGdCQUFnQiwwQ0FBMEMsVUFBVSx3RUFBd0UsRUFBRSw2QkFBNkIsa0JBQWtCLDBHQUEwRyw4QkFBOEIsbUNBQW1DLG1DQUFtQyx3QkFBd0IsOEhBQThILGVBQWUsZ0JBQWdCLHNDQUFzQyxNQUFNLHFCQUFxQixNQUFNLHNCQUFzQixTQUFTLGdDQUFnQyx1QkFBdUIsVUFBVSwyQ0FBMkMsWUFBWSxXQUFXLGlEQUFpRCx5QkFBeUIsZUFBZSwwRUFBMEUsZUFBZSxtdUZBQW11RiwwQkFBMEIsU0FBUyxnREFBZ0QsU0FBUyxJQUFJLGNBQWMscURBQXFELGdCQUFnQixhQUFhLGdFQUFnRSxpQkFBaUIsa0JBQWtCLDZDQUE2QyxJQUFJLGtIQUFrSCxjQUFjLGlDQUFpQyxjQUFjLHNCQUFzQixjQUFjLDhCQUE4QixjQUFjLDZCQUE2QixjQUFjLGtEQUFrRCxjQUFjLGdCQUFnQixvTUFBb00sbU1BQW1NLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSwwQkFBMEIsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLDBCQUEwQixFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLDBCQUEwQixFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxjQUFjLDJCQUEyQixTQUFTLElBQUksTUFBTSxjQUFjLFdBQVcsK0JBQStCLFlBQVksMkJBQTJCLGdFQUFnRSxRQUFRLDBDQUEwQyxjQUFjLElBQUksSUFBSSxhQUFhLCtEQUErRCx1QkFBdUIsRUFBRSxnQkFBZ0IsaURBQWlELElBQUksMkNBQTJDLFNBQVMsMENBQTBDLGdFQUFnRSw0RkFBNEYsZUFBZSx3Q0FBd0MsU0FBUyxFQUFFLHFEQUFxRCxpQkFBaUIseUJBQXlCLG9EQUFvRCxTQUFTLEVBQUUsZ0JBQWdCLCtUQUErVCxxQkFBcUIsY0FBYyxlQUFlLHdDQUF3QyxjQUFjLCtCQUErQixlQUFlLHNDQUFzQyw4QkFBOEIsa0JBQWtCLGFBQWEsU0FBUyxpREFBaUQsY0FBYyx3Q0FBd0Msa0JBQWtCLGdCQUFnQix1REFBdUQsMEJBQTBCLG1DQUFtQyxtRUFBbUUsY0FBYyxZQUFZLHFDQUFxQyxjQUFjLFVBQVUsd0NBQXdDLGFBQWEsVUFBVSxvQkFBb0IsMkJBQTJCLGNBQWMsd0JBQXdCLEtBQUssY0FBYyx5Q0FBeUMsYUFBYSxpQkFBaUIsNkJBQTZCLGlDQUFpQyxzQ0FBc0MsSUFBSSxtQ0FBbUMseUNBQXlDLHNJQUFzSSwrQ0FBK0Msb0JBQW9CLDJCQUEyQixJQUFJLFVBQVUsYUFBYSw2R0FBNkcscUJBQXFCLElBQUksMkJBQTJCLHdCQUF3Qiw2REFBNkQsWUFBWSxLQUFLLEtBQUssb0NBQW9DLGlFQUFpRSxZQUFZLHFCQUFxQixTQUFTLDREQUE0RCxPQUFPLHdEQUF3RCxjQUFjLFNBQVMsVUFBVSwrQkFBK0IsMEJBQTBCLHdGQUF3RixpQkFBaUIsUUFBUSxtQkFBbUIsS0FBSyw2REFBNkQsTUFBTSxPQUFPLFlBQVksV0FBVyx1Q0FBdUMsVUFBVSxjQUFjLGFBQWEsZ3ZCQUFndkIsY0FBYyxpQ0FBaUMsaUJBQWlCLFVBQVUsd0JBQXdCLG1EQUFtRCxnQ0FBZ0MsNENBQTRDLGtCQUFrQixrQkFBa0IsY0FBYyxnQkFBZ0IsZ0RBQWdELDBRQUEwUSxnQkFBZ0IsYUFBYSxrQkFBa0IsZ0JBQWdCLGFBQWEsOEJBQThCLHFEQUFxRCw0QkFBNEIsaUJBQWlCLG9CQUFvQiwwQ0FBMEMsaUJBQWlCLGtSQUFrUixpREFBaUQsY0FBYyx5RUFBeUUsbUJBQW1CLG1EQUFtRCxvQ0FBb0MsMkhBQTJILE9BQU8scUJBQXFCLFNBQVMsZ0NBQWdDLGlDQUFpQyw4QkFBOEIsTUFBTSxrQkFBa0IsMERBQTBELGNBQWMsa0JBQWtCLDBEQUEwRCwrQkFBK0Isb0NBQW9DLHdFQUF3RSxrREFBa0QscUNBQXFDLHNEQUFzRCx5QkFBeUIsd0JBQXdCLDJEQUEyRCxPQUFPLGFBQWEsc0NBQXNDLHFDQUFxQyxrQkFBa0IsVUFBVSxlQUFlLDRIQUE0SCx5QkFBeUIsc0JBQXNCLGFBQWEsdUJBQXVCLElBQUksd0JBQXdCLGFBQWEsMEVBQTBFLE9BQU8sd0RBQXdELGNBQWMsbURBQW1ELGFBQWEsZ0JBQWdCLDREQUE0RCxPQUFPLG1CQUFtQix5Q0FBeUMsWUFBWSxHQUFHLDBCQUEwQixzQkFBc0IsZUFBZSx5Q0FBeUMsU0FBUyxpQkFBaUIsZUFBZSwrQkFBK0IsTUFBTSxnQ0FBZ0Msb0JBQW9CLDhIQUE4SCxTQUFTLHFDQUFxQyxPQUFPLHNFQUFzRSxvRkFBb0YsdURBQXVELFdBQVcsS0FBSyxvQkFBb0IsZ0JBQWdCLHNCQUFzQiwrRkFBK0YsNkNBQTZDLG1CQUFtQixvQ0FBb0Msc0ZBQXNGLDhCQUE4QixNQUFNLFNBQVMsa0JBQWtCLG9CQUFvQixhQUFhLGdDQUFnQyx1QkFBdUIsS0FBSyxjQUFjLG1CQUFtQixnQkFBZ0Isa0RBQWtELHFEQUFxRCxlQUFlLHlDQUF5QyxHQUFHLGtDQUFrQyxnQkFBZ0IsT0FBTyxjQUFjLGFBQWEsZ0JBQWdCLGdDQUFnQyxTQUFTLE9BQU8sa0RBQWtELGFBQWEsMkNBQTJDLFdBQVcsV0FBVyxZQUFZLDhCQUE4QixnQkFBZ0Isd0JBQXdCLEtBQUssbUJBQW1CLFFBQVEsdUJBQXVCLElBQUksS0FBSyxxQkFBcUIsd0JBQXdCLFNBQVMsT0FBTyxrQkFBa0IsNkJBQTZCLFVBQVUsdUhBQXVILGlDQUFpQyxVQUFVLHFDQUFxQyxZQUFZLDRIQUE0SCx5RkFBeUYseUJBQXlCLHNCQUFzQixhQUFhLFdBQVcsWUFBWSxJQUFJLHdCQUF3QixhQUFhLE9BQU8scURBQXFELCtCQUErQixnQ0FBZ0MsK0dBQStHLFlBQVksc0JBQXNCLGNBQWMsK0NBQStDLHFCQUFxQixrQkFBa0Isd0JBQXdCLE9BQU8sY0FBYywwQkFBMEIsT0FBTyxxQkFBcUIsdUNBQXVDLE9BQU8scUJBQXFCLHFCQUFxQixVQUFVLHNCQUFzQixPQUFPLDZDQUE2Qyw2QkFBNkIsNEJBQTRCLDRCQUE0QiwyQkFBMkIsNkJBQTZCLDJCQUEyQiwwQkFBMEIsdUNBQXVDLHNDQUFzQyxpQ0FBaUMsZ0NBQWdDLHlCQUF5Qix3QkFBd0IsOEJBQThCLDZCQUE2QixzQkFBc0IscUJBQXFCLHdCQUF3Qix1QkFBdUIsb0JBQW9CLGdCQUFnQixhQUFhLGtCQUFrQixnQkFBZ0IsYUFBYSxjQUFjLDJVQUEyVSxFQUFFLG9EQUFvRCxTQUFTLCtuQkFBK25CLDBDQUEwQyxnQ0FBZ0MsZ0JBQWdCLGdDQUFnQyxZQUFZLFdBQVcsbURBQW1ELFFBQVEsU0FBUyxzQkFBc0IsTUFBTSxrQkFBa0IsZ0JBQWdCLGtCQUFrQixpQkFBaUIsbUJBQW1CLHNCQUFzQixvRUFBb0UsazZIQUFrNkgsb0JBQW9CLFNBQVMsbUJBQW1CLHdDQUF3QyxjQUFjLG1GQUFtRixHQUFHLGNBQWMscURBQXFELGNBQWMseUJBQXlCLGNBQWMsb0JBQW9CLGNBQWMsNkZBQTZGLGNBQWMscUJBQXFCLGNBQWMsc0JBQXNCLGNBQWMsUUFBUSxhQUFhLG1DQUFtQyxJQUFJLDJCQUEyQixtQkFBbUIsUUFBUSxJQUFJLDBDQUEwQyxJQUFJLGtCQUFrQixTQUFTLG9CQUFvQiw2REFBNkQsMkVBQTJFLGtEQUFrRCxFQUFFLGtCQUFrQixnREFBZ0QsU0FBUyxLQUFLLFNBQVMsZ0dBQWdHLFdBQVcsNEhBQTRILElBQUksR0FBRyw4RkFBOEYsOEJBQThCLHVDQUF1QyxTQUFTLCtDQUErQyxLQUFLLG9CQUFvQixpQkFBaUIsbUJBQW1CLHdCQUF3QixlQUFlLDJEQUEyRCx5Q0FBeUMsZ0JBQWdCLE1BQU0sb0JBQW9CLGdDQUFnQyxJQUFJLHlCQUF5QixTQUFTLDJFQUEyRSxnQkFBZ0IsYUFBYSxvR0FBb0csaUJBQWlCLDhFQUE4RSxjQUFjLGdCQUFnQixZQUFZLFdBQVcsS0FBSyxXQUFXLCtHQUErRyx1QkFBdUIsd0NBQXdDLGdDQUFnQyxZQUFZLG1CQUFtQixLQUFLLG1CQUFtQixzRUFBc0UsU0FBUyxpQkFBaUIsMkhBQTJILDBDQUEwQyxhQUFhLG1EQUFtRCxzRUFBc0UsaUJBQWlCLDRGQUE0Rix1REFBdUQsZUFBZSx1RUFBdUUsdUNBQXVDLEVBQUUsY0FBYywyQkFBMkIsY0FBYywwQ0FBMEMsY0FBYywrQ0FBK0Msc1hBQXNYLGtCQUFrQixjQUFjLFVBQVUsa0RBQWtELElBQUksd0JBQXdCLHlQQUF5UCxZQUFZLGdCQUFnQiwyRUFBMkUsc0JBQXNCLG9DQUFvQyxlQUFlLDJCQUEyQixJQUFJLHdCQUF3Qiw0Q0FBNEMsT0FBTywrREFBK0QsR0FBRywrQkFBK0Isb0VBQW9FLGVBQWUsb0VBQW9FLHVCQUF1QixXQUFXLFNBQVMsZ0JBQWdCLHFCQUFxQixXQUFXLG9EQUFvRCxpRkFBaUYsd0JBQXdCLG9FQUFvRSx3QkFBd0IsbUJBQW1CLGdCQUFnQixtQkFBbUIsK0dBQStHLE9BQU8sSUFBSSxtRUFBbUUsa0JBQWtCLFlBQVksb0JBQW9CLDhDQUE4QyxrQkFBa0IseUJBQXlCLGdCQUFnQixxQkFBcUIsK0JBQStCLGdCQUFnQixTQUFTLGtEQUFrRCxnQkFBZ0IsZ0JBQWdCLDBCQUEwQixpREFBaUQsSUFBSSxNQUFNLHFDQUFxQyw0QkFBNEIsZ0JBQWdCLG9CQUFvQixlQUFlLHdCQUF3QixJQUFJLHlCQUF5QixTQUFTLFNBQVMsU0FBUyxnQkFBZ0IseUNBQXlDLGtCQUFrQixnQkFBZ0IsS0FBSyxhQUFhLFNBQVMsa0JBQWtCLG1CQUFtQixXQUFXLG1IQUFtSCxrQkFBa0Isa0JBQWtCLGNBQWMsa0NBQWtDLGtEQUFrRCxJQUFJLHlCQUF5QixZQUFZLElBQUksZ0JBQWdCLGtCQUFrQix1QkFBdUIsa0JBQWtCLCtCQUErQixvQkFBb0Isd0ZBQXdGLFdBQVcsOEJBQThCLGNBQWMsU0FBUyxnQkFBZ0IsY0FBYyxnQkFBZ0IsU0FBUyxJQUFJLGlCQUFpQixrQkFBa0IsMEJBQTBCLHdCQUF3QixPQUFPLFNBQVMsMEJBQTBCLDhCQUE4QixjQUFjLGtGQUFrRiwrQkFBK0IseUJBQXlCLFdBQVcsOEJBQThCLDJEQUEyRCxTQUFTLHdCQUF3QixVQUFVLHNCQUFzQixlQUFlLDJDQUEyQywrQkFBK0IsK0NBQStDLFdBQVcsMkZBQTJGLEtBQUssd0NBQXdDLCtDQUErQyxTQUFTLFFBQVEsdUJBQXVCLGdGQUFnRixXQUFXLG1HQUFtRyxjQUFjLFNBQVMsNEJBQTRCLFVBQVUsT0FBTyxpQkFBaUIsZUFBZSxrRkFBa0YsbUNBQW1DLElBQUksTUFBTSxlQUFlLDBDQUEwQyxLQUFLLEtBQUsscUJBQXFCLHNCQUFzQiwrREFBK0QseUJBQXlCLFdBQVcsZUFBZSw0QkFBNEIsdUVBQXVFLHdEQUF3RCxvQkFBb0IscUZBQXFGLFdBQVcsMkRBQTJELGNBQWMsMEJBQTBCLGdCQUFnQixTQUFTLGtDQUFrQyxJQUFJLE1BQU0sV0FBVyw0QkFBNEIsVUFBVSxPQUFPLGlCQUFpQixlQUFlLGtGQUFrRix5REFBeUQsSUFBSSxNQUFNLGVBQWUsZ0VBQWdFLHVFQUF1RSx5QkFBeUIsV0FBVyxtQ0FBbUMsV0FBVyxpQkFBaUIsa0JBQWtCLElBQUkscUJBQXFCLHVFQUF1RSx3REFBd0QsTUFBTSxZQUFZLG9CQUFvQixpQkFBaUIsaUNBQWlDLGFBQWEsbUpBQW1KLDJDQUEyQyxzQkFBc0IsdUJBQXVCLGdCQUFnQix1RUFBdUUsd0VBQXdFLGlCQUFpQix3QkFBd0IsOEJBQThCLDZDQUE2Qyx3Q0FBd0Msb0NBQW9DLHlGQUF5RixrQkFBa0IsWUFBWSxJQUFJLE1BQU0sV0FBVywyQkFBMkIsb0VBQW9FLElBQUksdUNBQXVDLDJDQUEyQyxlQUFlLGtCQUFrQix5QkFBeUIsaUJBQWlCLHVCQUF1QixJQUFJLE1BQU0sa0RBQWtELG1CQUFtQix1QkFBdUIsSUFBSSxNQUFNLFdBQVcsMkNBQTJDLHlEQUF5RCxZQUFZLElBQUkscUNBQXFDLFlBQVksb0JBQW9CLHFGQUFxRiw4QkFBOEIsMENBQTBDLDZEQUE2RCxxQ0FBcUMsV0FBVyxzQkFBc0IsU0FBUyx5QkFBeUIsc0NBQXNDLGtCQUFrQixvQ0FBb0MsK0NBQStDLFlBQVksR0FBRyxpQ0FBaUMsd0JBQXdCLG1FQUFtRSxxQ0FBcUMscUJBQXFCLGtDQUFrQyxvQ0FBb0MsbUhBQW1ILCtCQUErQiwrQkFBK0Isd0NBQXdDLDRFQUE0RSxxQkFBcUIsdUNBQXVDLDBDQUEwQyw0QkFBNEIsMEJBQTBCLFdBQVcsOEJBQThCLHdEQUF3RCxvQ0FBb0MsMEJBQTBCLFdBQVcsd0JBQXdCLDBCQUEwQiw4QkFBOEIsaUNBQWlDLDZDQUE2QywwQkFBMEIsZ0NBQWdDLHFCQUFxQixlQUFlLDBCQUEwQixXQUFXLG9CQUFvQiwyRUFBMkUsK0JBQStCLGtDQUFrQyxrQkFBa0IsWUFBWSx3Q0FBd0MsY0FBYyxvQ0FBb0Msb0JBQW9CLHdDQUF3QyxNQUFNLEVBQUUsR0FBRyxZQUFZLDRCQUE0QixxQ0FBcUMsRUFBRSw4QkFBOEIsaUJBQWlCLEtBQUssaUJBQWlCLGdCQUFnQixXQUFXLGtDQUFrQywyREFBMkQsMEJBQTBCLCtCQUErQixvREFBb0Qsc0NBQXNDLGlCQUFpQixHQUFHLDJCQUEyQixlQUFlLDREQUE0RCxtQkFBbUIsK0JBQStCLG9CQUFvQixTQUFTLDJDQUEyQyxjQUFjLDhDQUE4QywwQ0FBMEMsS0FBSyxvSUFBb0ksSUFBSSxRQUFRLFNBQVMsV0FBVyxlQUFlLE9BQU8sbUJBQW1CLHFCQUFxQiw4QkFBOEIsSUFBSSw2RUFBNkUsU0FBUyxnTkFBZ04sTUFBTSxlQUFlLGtEQUFrRCxJQUFJLHdCQUF3QixvREFBb0QsaUJBQWlCLCtEQUErRCx5REFBeUQsaUJBQWlCLDBDQUEwQyxnQ0FBZ0Msa0JBQWtCLE9BQU8scUJBQXFCLGtCQUFrQixJQUFJLHdEQUF3RCxHQUFHLEdBQUcsZUFBZSxpQ0FBaUMsS0FBSywwU0FBMFMsVUFBVSxzQ0FBc0MscUNBQXFDLHVGQUF1Rix3RkFBd0YseUJBQXlCLDRDQUE0QyxlQUFlLGtCQUFrQixRQUFRLEtBQUssZ0NBQWdDLGtCQUFrQixpQkFBaUIsWUFBWSxXQUFXLE1BQU0sV0FBVyx1Q0FBdUMsd0JBQXdCLDJCQUEyQix5QkFBeUIsbUNBQW1DLFNBQVMsSUFBSSxHQUFHLHNCQUFzQixpQkFBaUIsZUFBZSxrQkFBa0IsbUhBQW1ILHlEQUF5RCw0REFBNEQsMERBQTBELDJEQUEyRCxxR0FBcUcsNEJBQTRCLGFBQWEsR0FBRyxvQkFBb0Isd0ZBQXdGLHNDQUFzQywrQ0FBK0MsZUFBZSx3Q0FBd0MsZUFBZSw2QkFBNkIsUUFBUSxxSEFBcUgsS0FBSyx5RUFBeUUsV0FBVyxpQkFBaUIsc0JBQXNCLHNIQUFzSCxTQUFTLHVHQUF1RyxtQkFBbUIsdUJBQXVCLFlBQVkscUJBQXFCLHdHQUF3RyxJQUFJLGdFQUFnRSxVQUFVLFVBQVUsU0FBUyxTQUFTLDJEQUEyRCxjQUFjLFVBQVUsNkJBQTZCLGtGQUFrRiw0Q0FBNEMsbUZBQW1GLHFDQUFxQywwQ0FBMEMsb0NBQW9DLFFBQVEsc0JBQXNCLG9DQUFvQyxvQkFBb0IsdUZBQXVGLFdBQVcsTUFBTSxzQ0FBc0MsMEJBQTBCLEdBQUcsNEJBQTRCLGFBQWEsMkZBQTJGLG1DQUFtQyxpQkFBaUIscURBQXFELG9EQUFvRCx1Q0FBdUMsOEJBQThCLDJCQUEyQixvQkFBb0IsSUFBSSxxQ0FBcUMsMENBQTBDLHdDQUF3QyxtREFBbUQsa0RBQWtELGVBQWUsR0FBRywwREFBMEQsY0FBYyxVQUFVLDZCQUE2QixzQ0FBc0MsbURBQW1ELGNBQWMsc0JBQXNCLGVBQWUsK0JBQStCLG1EQUFtRCxvQ0FBb0MsMkJBQTJCLElBQUksR0FBRyxvQkFBb0IsbUJBQW1CLGFBQWEsVUFBVSwyQkFBMkIsaUJBQWlCLDJFQUEyRSw0Q0FBNEMsaURBQWlELG9DQUFvQyx1RUFBdUUsNElBQTRJLHFDQUFxQyx5SkFBeUosdUhBQXVILGtEQUFrRCxPQUFPLGlDQUFpQyxpSUFBaUksd0RBQXdELHVMQUF1TCxtREFBbUQsaUJBQWlCLElBQUksUUFBUSxFQUFFLDhCQUE4Qix3QkFBd0IsaUNBQWlDLHFJQUFxSSxRQUFRLG1EQUFtRCx3REFBd0QscUJBQXFCLHVKQUF1SixHQUFHLGNBQWMsbUJBQW1CLDZEQUE2RCw0Q0FBNEMsbURBQW1ELG1EQUFtRCxRQUFRLGdDQUFnQyxtQkFBbUIsMlVBQTJVLDZCQUE2QixJQUFJLG9DQUFvQyxJQUFJLHdQQUF3UCxvQ0FBb0MsU0FBUyx1RkFBdUYsU0FBUyxrREFBa0QsZ0JBQWdCLElBQUksd0NBQXdDLEtBQUsseUNBQXlDLGVBQWUsZ0NBQWdDLGlCQUFpQixrREFBa0Qsd0JBQXdCLDhCQUE4QixZQUFZLGdIQUFnSCxJQUFJLG1CQUFtQixpQkFBaUIsZ2lDQUFnaUMsWUFBWSxHQUFHLGtCQUFrQixnQkFBZ0IsbUhBQW1ILDhDQUE4QyxnQ0FBZ0MsNkJBQTZCLHNDQUFzQyx1QkFBdUIsd0JBQXdCLHdDQUF3Qyw0Q0FBNEMsR0FBRyxHQUFHLGVBQWUsa0RBQWtELElBQUksd0JBQXdCLHNHQUFzRyxjQUFjLFVBQVUsbUZBQW1GLDRFQUE0RSxrQ0FBa0MsR0FBRywwREFBMEQseU5BQXlOLCtCQUErQixXQUFXLDRDQUE0QywwQkFBMEIsMEJBQTBCLDZGQUE2Rix1Q0FBdUMsVUFBVSxpRkFBaUYsR0FBRyxHQUFHLEdBQUcsY0FBYywrQ0FBK0MsMkJBQTJCLEVBQUUsbUJBQW1CLGdDQUFnQyxlQUFlLGtEQUFrRCxJQUFJLHdCQUF3QixxRUFBcUUsc0NBQXNDLG1CQUFtQixrQ0FBa0MsNENBQTRDLGlDQUFpQyw2QkFBNkIsSUFBSSxjQUFjLEdBQUcsR0FBRyxHQUFHLHFEQUFxRCxLQUFLLGVBQWUsWUFBWSxVQUFVLHFCQUFxQixhQUFhLG1CQUFtQixvQkFBb0IsRUFBRSxjQUFjLFNBQVMsTUFBTSxHQUFHLFdBQVcscUNBQXFDLFVBQVUsbURBQW1ELE1BQU0sTUFBTSwyQkFBMkIsTUFBTSxpQkFBaUIsc0NBQXNDLDhCQUE4QixnQ0FBZ0MsR0FBRyxVQUFVLHdCQUF3QixhQUFhLDBTQUEwUyxHQUFHLGVBQWUsaUJBQWlCLEdBQUcsS0FBSyxLQUFLLFVBQVUsR0FBRyx5Q0FBeUMsRUFBRSxvQ0FBb0MsOGRBQThkLHVCQUF1QixvSkFBb0osS0FBSyxFQUFFLGdHQUFnRyw2REFBNkQsVUFBVSx5Q0FBeUMsd0JBQXdCLElBQUksb0JBQW9CLDZEQUE2RCxrQ0FBa0Msa0NBQWtDLE1BQU0sNEJBQTRCLG1DQUFtQyxNQUFNLHVCQUF1QixjQUFjLFVBQVUscURBQXFELEtBQUssRUFBRSwwQkFBMEIsV0FBVyxNQUFNLFdBQVcsTUFBTSxtQ0FBbUMsNkJBQTZCLE1BQU0sV0FBVyxXQUFXLG1CQUFtQiw0QkFBNEIsR0FBRyxlQUFlLElBQUksc0ZBQXNGLHVEQUF1RCxtQ0FBbUMsTUFBTSxhQUFhLDBNQUEwTSw0QkFBNEIsK0JBQStCLE9BQU8sRUFBRSxNQUFNLHFEQUFxRCxPQUFPLHlEQUF5RCxNQUFNLHdDQUF3QyxXQUFXLG1DQUFtQyxrRUFBa0UsTUFBTSw4U0FBOFMsY0FBYywwQkFBMEIsbUJBQW1CLE1BQU0seUNBQXlDLGdDQUFnQyxrREFBa0QsVUFBVSwwQ0FBMEMsaUhBQWlILG9CQUFvQixnSEFBZ0gsTUFBTSw4QkFBOEIsS0FBSyxNQUFNLHNDQUFzQyxxQ0FBcUMsa0NBQWtDLE1BQU0sd0JBQXdCLE1BQU0saUJBQWlCLE1BQU0saUJBQWlCLE1BQU0saUJBQWlCLE1BQU0sK0NBQStDLE1BQU0sMENBQTBDLDZDQUE2QyxzQkFBc0IsTUFBTSx3QkFBd0IsTUFBTSxvQ0FBb0MsTUFBTSwyQ0FBMkMsTUFBTSxzQkFBc0IsTUFBTSxzQkFBc0IsTUFBTSxzQkFBc0IsTUFBTSx5REFBeUQsTUFBTSw4QkFBOEIsTUFBTSwrQkFBK0IsVUFBVSx1Q0FBdUMsYUFBYSxNQUFNLGtCQUFrQixNQUFNLCtGQUErRixVQUFVLHlDQUF5QyxzREFBc0QsVUFBVSxxQ0FBcUMsTUFBTSxtQ0FBbUMsS0FBSyxlQUFlLHFDQUFxQyxNQUFNLG1DQUFtQyxNQUFNLHdCQUF3Qiw4RUFBOEUsZ0NBQWdDLDRCQUE0QixZQUFZLDhJQUE4SSxnQ0FBZ0Msc0NBQXNDLElBQUksS0FBSyx3REFBd0QsSUFBSSx3Q0FBd0MscUVBQXFFLGtEQUFrRCxjQUFjLFVBQVUsY0FBYyxrREFBa0QsZ0JBQWdCLE1BQU0sbURBQW1ELGtCQUFrQix1QkFBdUIsTUFBTSwyQ0FBMkMsTUFBTSxZQUFZLG1FQUFtRSxLQUFLLDRCQUE0QixTQUFTLHlGQUF5RixvQkFBb0IsT0FBTyxZQUFZLG9DQUFvQyx1Q0FBdUMsTUFBTSx1R0FBdUcsTUFBTSxnQkFBZ0IsbUJBQW1CLGtEQUFrRCxVQUFVLDhDQUE4QyxJQUFJLCtCQUErQixNQUFNLFlBQVksUUFBUSxTQUFTLElBQUksZ0JBQWdCLElBQUksd0NBQXdDLFNBQVMscUJBQXFCLDBCQUEwQiwrQ0FBK0Msb0JBQW9CLDJDQUEyQywwQ0FBMEMsTUFBTSwyRUFBMkUsMERBQTBELGdHQUFnRyxXQUFXLHFCQUFxQixnQkFBZ0IsZ0JBQWdCLDhCQUE4QiwwRkFBMEYsMkJBQTJCLGFBQWEsdUNBQXVDLG9DQUFvQyxtQkFBbUIsSUFBSSxTQUFTLDRCQUE0QixPQUFPLEVBQUUsc0JBQXNCLGlJQUFpSSx1VEFBdVQsY0FBYyxTQUFTLCtCQUErQixlQUFlLGtDQUFrQyxJQUFJLHFDQUFxQyxVQUFVLCtDQUErQyw4Q0FBOEMsOENBQThDLHlDQUF5QywrQkFBK0IsMEJBQTBCLHdDQUF3QyxvR0FBb0csd0RBQXdELG9GQUFvRix1REFBdUQsMkRBQTJELGlCQUFpQixrQ0FBa0Msd0NBQXdDLG9JQUFvSSxxRUFBcUUsNkZBQTZGLDZCQUE2QixNQUFNLGdDQUFnQyxNQUFNLDZCQUE2QixNQUFNLGlCQUFpQixpQkFBaUIsaURBQWlELDBKQUEwSixzQ0FBc0MsOEJBQThCLElBQUksTUFBTSxnRUFBZ0UscUJBQXFCLDJCQUEyQixJQUFJLFdBQVcsRUFBRSx3REFBd0Qsc0VBQXNFLHFEQUFxRCxvRkFBb0YsTUFBTSxzRUFBc0UsK09BQStPLE1BQU0sbUpBQW1KLGtDQUFrQyxTQUFTLGlCQUFpQiw0QkFBNEIsNkRBQTZELHlDQUF5QyxpQkFBaUIsNERBQTRELGVBQWUsaURBQWlELGlDQUFpQyxrQkFBa0IsS0FBSyxpREFBaUQsMENBQTBDLFlBQVksa0JBQWtCLHFCQUFxQixjQUFjLElBQUksNEJBQTRCLDJEQUEyRCxNQUFNLDJCQUEyQixTQUFTLGVBQWUsZ0JBQWdCLFdBQVcsVUFBVSxzQkFBc0IsTUFBTSxvQkFBb0IsTUFBTSxxQkFBcUIsTUFBTSxzQkFBc0IsTUFBTSx1QkFBdUIsTUFBTSxzQkFBc0IsTUFBTSxtRUFBbUUsVUFBVSxpQkFBaUIsb0RBQW9ELDBCQUEwQiwrRkFBK0YsYUFBYSx5RUFBeUUscUJBQXFCLGtOQUFrTiw0QkFBNEIsVUFBVSxxQ0FBcUMsTUFBTSwyQ0FBMkMsa0RBQWtELElBQUksWUFBWSxjQUFjLFNBQVMsZ0NBQWdDLE9BQU8sZ0JBQWdCLGFBQWEsT0FBTyxRQUFRLEVBQUUsK0RBQStELGNBQWMseUJBQXlCLCtDQUErQyx3QkFBd0IsY0FBYyxhQUFhLDREQUE0RCxtY0FBbWMsNklBQTZJLG9CQUFvQixvRkFBb0YsNEJBQTRCLDJDQUEyQyxrQ0FBa0MsNkVBQTZFLHVCQUF1QixnR0FBZ0csTUFBTSxTQUFTLG9GQUFvRixTQUFTLFdBQVcsc0VBQXNFLEdBQUcsWUFBWSx1Q0FBdUMsU0FBUyw2Q0FBNkMsOENBQThDLHdFQUF3RSxvQkFBb0IsdUJBQXVCLHlCQUF5QiwyREFBMkQsd0JBQXdCLHlCQUF5Qiw2REFBNkQsa0NBQWtDLHlCQUF5QixxRUFBcUUsaUNBQWlDLGlCQUFpQiwrQkFBK0IsdUJBQXVCLG1CQUFtQixrQkFBa0IsRUFBRSwyQ0FBMkMsaUJBQWlCLCtCQUErQix1QkFBdUIsbUJBQW1CLDRCQUE0QixFQUFFLG9DQUFvQywrQkFBK0IsMENBQTBDLG1CQUFtQixTQUFTLG9HQUFvRyxtQ0FBbUMseUJBQXlCLHNFQUFzRSxtQ0FBbUMseUJBQXlCLHNFQUFzRSwwQkFBMEIsaUJBQWlCLGdFQUFnRSxzQ0FBc0MseUJBQXlCLHlFQUF5RSwyQkFBMkIseUJBQXlCLHNEQUFzRCxxaUJBQXFpQixpQkFBaUIsMEZBQTBGLGlCQUFpQix3R0FBd0csUUFBUSxpQ0FBaUMsT0FBTyx3Q0FBd0MsY0FBYyxrQ0FBa0MsVUFBVSxFQUFFLDBCQUEwQixJQUFJLEtBQUssMEJBQTBCLDBCQUEwQiw0QkFBNEIsNkNBQTZDLEdBQUcsc0JBQXNCLGdDQUFnQyxXQUFXLCtDQUErQyxtQkFBbUIsbUhBQW1ILGlCQUFpQixnREFBZ0Qsd0xBQXdMLFFBQVEsaWlCQUFpaUIsNENBQTRDLCtFQUErRSxRQUFRLEdBQUcsK0RBQStELDBlQUEwZSxFQUFFLGFBQWEsaUJBQWlCLGlDQUFpQyxNQUFNLHdCQUF3QiwyQkFBMkIsbUZBQW1GLG1EQUFtRCxnaUJBQWdpQiwrQ0FBK0Msa0ZBQWtGLDRCQUE0QixvQkFBb0IseUNBQXlDLHFEQUFxRCxpUkFBaVIsZUFBZSxxVkFBcVYsNkhBQTZILE9BQU8sb09BQW9PLEVBQUUsbUJBQW1CLGVBQWUsYUFBYSxPQUFPLFNBQVMsRUFBRSx1Q0FBdUMsY0FBYyxNQUFNLGFBQWEsMkRBQTJELFNBQVMsR0FBRywyQ0FBMkMsUUFBUSxjQUFjLGFBQWEsNk9BQTZPLEVBQUUsZ0JBQWdCLGFBQWEsT0FBTyxXQUFXLEVBQUUsUUFBUSx3QkFBd0IsZ0JBQWdCLGNBQWMsdUJBQXVCLGdCQUFnQixvQkFBb0Isc0JBQXNCLFNBQVMscUJBQXFCLHFCQUFxQixTQUFTLHNCQUFzQixVQUFVLHVCQUF1QixhQUFhLG1EQUFtRCxRQUFRLGVBQWUsZ0VBQWdFLGVBQWUsUUFBUSxnRUFBZ0Usb0ZBQW9GLE1BQU0sOENBQThDLElBQUksc0JBQXNCLG1DQUFtQyxPQUFPLDhDQUE4QyxJQUFJLHNCQUFzQixvQ0FBb0MsUUFBUSw4Q0FBOEMsSUFBSSxzQkFBc0Isa0NBQWtDLFlBQVksOENBQThDLElBQUksc0JBQXNCLHdEQUF3RCxpQkFBaUIsNERBQTRELEVBQUUsRUFBRSxhQUFhLEVBQUUsS0FBSyxzQkFBc0IsVUFBVSwwQkFBMEIsVUFBVSxZQUFZLEdBQUcsRUFBRSxtQkFBbUIsRUFBRSxTQUFTLDZFQUE2RSxZQUFZLFFBQVEsY0FBYyxrQkFBa0IsUUFBUSxpQ0FBaUMsK0NBQStDLG9DQUFvQyw2QkFBNkIsUUFBUSxTQUFTLDRFQUE0RSxRQUFRLHNEQUFzRCxJQUFJLHdCQUF3QixzQkFBc0IscURBQXFELFdBQVcsWUFBWSxJQUFJLFlBQVksR0FBRyx3QkFBd0IsdURBQXVELFdBQVcsWUFBWSxJQUFJLHdCQUF3QixLQUFLLGFBQWEsUUFBUSw2QkFBNkIsUUFBUSxHQUFHLGdDQUFnQyxjQUFjLHVCQUF1QixlQUFlLGtCQUFrQixjQUFjLGlEQUFpRCxhQUFhLDZCQUE2QiwwQ0FBMEMsUUFBUSxLQUFLLGFBQWEsRUFBRSxnQkFBZ0IsZ0JBQWdCLDBFQUEwRSxLQUFLLGFBQWEsRUFBRSxpQkFBaUIsa0JBQWtCLE1BQU0sVUFBVSxlQUFlLGdEQUFnRCw0REFBNEQsS0FBSyx5QkFBeUIsTUFBTSxjQUFjLEdBQUcsRUFBRSxzRUFBc0UsSUFBSSxHQUFHLEVBQUUsbUJBQW1CLFNBQVMsSUFBSSxHQUFHLEVBQUUsS0FBSyxnQkFBZ0IsTUFBTSxVQUFVLFFBQVEsaUJBQWlCLGtCQUFrQixpTUFBaU0sU0FBUyxjQUFjLDZCQUE2QixFQUFFLGdDQUFnQyxPQUFPLFVBQVUsV0FBVyxXQUFXLGFBQWEsWUFBWSxhQUFhLEdBQUcsY0FBYyw2REFBNkQsMkJBQTJCLGVBQWUsZUFBZSwyREFBMkQsYUFBYSw4QkFBOEIsdUJBQXVCLHNCQUFzQixvSkFBb0osS0FBSyxnQkFBZ0IsaUVBQWlFLGFBQWEsb0JBQW9CLG1CQUFtQixRQUFRLFlBQVksV0FBVyxFQUFFLGlDQUFpQyxXQUFXLFlBQVksV0FBVyxnREFBZ0QsNkVBQTZFLFNBQVMsTUFBTSxJQUFJLFNBQVMsY0FBYyxnREFBZ0Qsa0JBQWtCLGVBQWUsOERBQThELDRDQUE0Qyx1QkFBdUIscUtBQXFLLGlCQUFpQixzREFBc0Qsb0JBQW9CLG1DQUFtQyxrQ0FBa0MsbUJBQW1CLGdFQUFnRSxpS0FBaUssTUFBTSxvSUFBb0ksdUJBQXVCLHdKQUF3SixxQkFBcUIsOERBQThELFdBQVcseUVBQXlFLFlBQVksMkpBQTJKLG9CQUFvQiw4REFBOEQsV0FBVywrSEFBK0gsVUFBVSxFQUFFLG1DQUFtQyw2QkFBNkIsOERBQThELFVBQVUsU0FBUyx5RUFBeUUseUJBQXlCLGNBQWMsVUFBVSxxREFBcUQsMEJBQTBCLHNHQUFzRyx1QkFBdUIsc0NBQXNDLHVCQUF1QiwyRUFBMkUseUJBQXlCLHVCQUF1QixxQkFBcUIsb0JBQW9CLCtCQUErQixrQ0FBa0MsNEVBQTRFLFNBQVMsa0JBQWtCLE9BQU8sYUFBYSxxQkFBcUIsMEJBQTBCLG1CQUFtQixzQkFBc0IsNERBQTRELE9BQU8sV0FBVyxrQkFBa0IsZUFBZSxnRUFBZ0Usd0JBQXdCLGVBQWUsa0JBQWtCLEdBQUcseU9BQXlPLGtCQUFrQixxQkFBcUIsVUFBVSw4REFBOEQsa0JBQWtCLG9CQUFvQiwwQkFBMEIseUJBQXlCLG9CQUFvQixvRUFBb0Usb0JBQW9CLHlFQUF5RSx1Q0FBdUMseUpBQXlKLGdCQUFnQixzREFBc0QseUJBQXlCLHdCQUF3QixzQ0FBc0MsSUFBSSxpQkFBaUIsT0FBTyxxQkFBcUIsdUNBQXVDLFNBQVMsU0FBUyxVQUFVLGlEQUFpRCx3QkFBd0Isb0JBQW9CLG1CQUFtQiw0RUFBNEUsbUNBQW1DLG9CQUFvQixpQkFBaUIsMkpBQTJKLEtBQUssVUFBVSxtQkFBbUIsa0NBQWtDLGdKQUFnSixtQkFBbUIsK0lBQStJLGtDQUFrQyxNQUFNLGdEQUFnRCxVQUFVLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLHNGQUFzRixJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVUsMEZBQTBGLEdBQUcsMEJBQTBCLGVBQWUsb01BQW9NLDRMQUE0TCxrREFBa0Qsd0hBQXdILG1GQUFtRixVQUFVLFVBQVUsR0FBRyxHQUFHLGNBQWMsMENBQTBDLGlFQUFpRSxNQUFNLHNDQUFzQyxTQUFTLCtEQUErRCxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLHVCQUF1Qix3QkFBd0Isd0JBQXdCLEtBQUssdUdBQXVHLEtBQUssY0FBYyxvTEFBb0wsV0FBVyxnR0FBZ0csNkJBQTZCLHlCQUF5QixFQUFFLHFCQUFxQixFQUFFLG1CQUFtQix3RUFBd0UsMklBQTJJLFlBQVksOERBQThELHdCQUF3QixxQkFBcUIsRUFBRSw4TUFBOE0sU0FBUywyRkFBMkYsZ0VBQWdFLFdBQVcsaUJBQWlCLGtJQUFrSSxrQkFBa0IscUJBQXFCLHFOQUFxTiw2RUFBNkUsNkNBQTZDLG9CQUFvQiw2QkFBNkIscUJBQXFCLDZCQUE2QixvQkFBb0IsNkJBQTZCLHNCQUFzQiwyQkFBMkIsRUFBRSxPQUFPLEdBQUcsYUFBYSw4RkFBOEYsRUFBRSxHQUFHLEVBQUUsd0tBQXdLLEVBQUUsR0FBRyxFQUFFLHdEQUF3RCxpRUFBaUUsNkJBQTZCLFdBQVcscUVBQXFFLG9EQUFvRCxxREFBcUQsV0FBVyxFQUFFLDhCQUE4Qix5Q0FBeUMsb0JBQW9CLGtEQUFrRCxFQUFFLHNLQUFzSyxNQUFNLE1BQU0saURBQWlELGNBQWMsd0RBQXdELG9EQUFvRCxvREFBb0QsaUVBQWlFLGlEQUFpRCw2QkFBNkIsK0hBQStILDhDQUE4QyxJQUFJLHNCQUFzQiw4RkFBOEYsTUFBTSxVQUFVLEtBQUssNkJBQTZCLGlEQUFpRCwyRUFBMkUsOEhBQThILGNBQWMsNkNBQTZDLE1BQU0sWUFBWSxXQUFXLDBFQUEwRSxpREFBaUQsZ0NBQWdDLHlDQUF5QyxJQUFJLG1CQUFtQiwrREFBK0QsaVRBQWlULGVBQWUsa0NBQWtDLEtBQUssR0FBRyxFQUFFLHdGQUF3RixLQUFLLEdBQUcsRUFBRSwrQkFBK0IsRUFBRSxtQkFBbUIsYUFBYSxxQ0FBcUMsRUFBRSxrUUFBa1EsZ0NBQWdDLElBQUksWUFBWSwyRkFBMkYsS0FBSyxNQUFNLGtEQUFrRCxXQUFXLDZCQUE2QixXQUFXLDZCQUE2QixTQUFTLDZCQUE2QixFQUFFLHVIQUF1SCxXQUFXLEVBQUUsRUFBRSw4QkFBOEIsRUFBRSxVQUFVLEVBQUUsNEhBQTRILE1BQU0sS0FBSyxVQUFVLDBEQUEwRCxJQUFJLEdBQUcsSUFBSSxtREFBbUQsaUJBQWlCLGlHQUFpRyxtQkFBbUIsZ0VBQWdFLGlJQUFpSSx1QkFBdUIsZ0VBQWdFLHVPQUF1TyxvQkFBb0IsMkZBQTJGLG9EQUFvRCxNQUFNLEdBQUcsTUFBTSw2QkFBNkIsU0FBUywwQkFBMEIsdUJBQXVCLDZHQUE2RyxVQUFVLGNBQWMsNENBQTRDLFFBQVEsZUFBZSx1R0FBdUcseUJBQXlCLDJDQUEyQyxxQkFBcUIsK0dBQStHLDJCQUEyQix3Q0FBd0MscUJBQXFCLHFDQUFxQyxzQkFBc0IsMENBQTBDLDJEQUEyRCxtQkFBbUIsbWRBQW1kLDJFQUEyRSxtQkFBbUIseU1BQXlNLHlCQUF5QixrQkFBa0IsTUFBTSxzQkFBc0IsWUFBWSxtQ0FBbUMsNERBQTRELGtEQUFrRCxZQUFZLHdDQUF3QyxzQ0FBc0Msb0hBQW9ILCtEQUErRCxzQkFBc0IsZUFBZSw2SEFBNkgsMkJBQTJCLFdBQVcscUpBQXFKLHdCQUF3Qiw0RUFBNEUsOEdBQThHLEVBQUUsS0FBSyxvWEFBb1gsOENBQThDLE1BQU0sUUFBUSxpSUFBaUksRUFBRSw4VkFBOFYsRUFBRSxvSUFBb0ksRUFBRSxnRUFBZ0UsRUFBRSxxQ0FBcUMsRUFBRSxpQ0FBaUMsRUFBRSxrQ0FBa0MsRUFBRSw4QkFBOEIsRUFBRSwwQkFBMEIsRUFBRSxrQ0FBa0MsRUFBRSxnQ0FBZ0MsRUFBRSwyQkFBMkIsRUFBRSwyQkFBMkIsRUFBRSwrQkFBK0IsRUFBRSw4QkFBOEIsRUFBRSw2QkFBNkIsRUFBRSwyQkFBMkIsRUFBRSw4QkFBOEIsRUFBRSxpQ0FBaUMsRUFBRSwwQkFBMEIsRUFBRSw4QkFBOEIsRUFBRSwrQkFBK0IsRUFBRSxzQ0FBc0MsS0FBSyxjQUFjLG1CQUFtQixlQUFlLG9CQUFvQixlQUFlLFNBQVMsZUFBZSxnRkFBZ0YsZUFBZSx3RUFBd0UsZUFBZSxxQ0FBcUMsZUFBZSxrRUFBa0UsZUFBZSw2Q0FBNkMsZUFBZSxvQkFBb0IsZ0JBQWdCLDRDQUE0QyxnQkFBZ0IseURBQXlELGdCQUFnQixrQ0FBa0MsZ0JBQWdCLHFCQUFxQixnQkFBZ0Isc0NBQXNDLGdCQUFnQix1RUFBdUUsZ0JBQWdCLDhDQUE4QyxnQkFBZ0IsNENBQTRDLGdCQUFnQiwrQkFBK0IsZ0JBQWdCLHVFQUF1RSxnQkFBZ0Isa0RBQWtELGdCQUFnQiw0REFBNEQsZ0JBQWdCLHdEQUF3RCxxQ0FBcUMseUNBQXlDLFFBQVEsZUFBZSxnRUFBZ0Usd2FBQXdhLFdBQVcsc0JBQXNCLG9CQUFvQixNQUFNLDhCQUE4QixHQUFHLEtBQUssR0FBRyxhQUFhLGdCQUFnQixXQUFXLGdFQUFnRSwrQkFBK0IsaURBQWlELG9DQUFvQyxFQUFFLFNBQVMsT0FBTyxnRkFBZ0YsZUFBZSxnRUFBZ0UsMEJBQTBCLHNHQUFzRyx5QkFBeUIsZ0VBQWdFLHdDQUF3QyxFQUFFLEVBQUUsRUFBRSxJQUFJLGVBQWUsZ0VBQWdFLDBCQUEwQiwwR0FBMEcscUJBQXFCLEVBQUUsb0JBQW9CLHFCQUFxQixLQUFLLEVBQUUsRUFBRSxpREFBaUQsZUFBZSxnRUFBZ0UsMEJBQTBCLG9DQUFvQyxxQkFBcUIsRUFBRSxvQkFBb0IscUJBQXFCLEtBQUssRUFBRSxZQUFZLG9GQUFvRixFQUFFLE9BQU8sOEJBQThCLG9EQUFvRCxtQkFBbUIsNEdBQTRHLDhGQUE4RixtRkFBbUYsYUFBYSw2TUFBNk0sbUJBQW1CLG1EQUFtRCxrQkFBa0IsZ0pBQWdKLGVBQWUsMkJBQTJCLFFBQVEseUVBQXlFLFFBQVEsY0FBYyxnRUFBZ0UsNkhBQTZILE9BQU8sZ0VBQWdFLG1DQUFtQyxlQUFlLEVBQUUsd0JBQXdCLG9PQUFvTyx1REFBdUQsMG1CQUEwbUIsUUFBUSxzQ0FBc0MsY0FBYyxtRUFBbUUsNkJBQTZCLFlBQVksT0FBTyxZQUFZLGdEQUFnRCxZQUFZLEVBQUUsb0JBQW9CLE9BQU8sb0JBQW9CLEVBQUUsWUFBWSw4Q0FBOEMsbUJBQW1CLE9BQU8sbUJBQW1CLEdBQUcscUJBQXFCLFVBQVUsa0dBQWtHLGNBQWMsK0JBQStCLFlBQVksc0NBQXNDLDRFQUE0RSxpREFBaUQsNkJBQTZCLElBQUksK0ZBQStGLDRGQUE0Riw2QkFBNkIsR0FBRyxtQkFBbUIsNk5BQTZOLFFBQVEsNENBQTRDLEVBQUUsdUVBQXVFLGVBQWUsUUFBUSxrQkFBa0IsRUFBRSxvQkFBb0IsOENBQThDLGlCQUFpQiwwQkFBMEIsMERBQTBELEtBQUssTUFBTSxPQUFPLFNBQVMsK0NBQStDLEdBQUcsb0JBQW9CLEVBQUUsUUFBUSwyREFBMkQsdUJBQXVCLHlJQUF5SSxLQUFLLFVBQVUsc0VBQXNFLGdCQUFnQixxQ0FBcUMsMkJBQTJCLDhCQUE4QixFQUFFLEtBQUssSUFBSSxRQUFRLEVBQUUsS0FBSyxFQUFFLCtCQUErQixzQ0FBc0MsK0RBQStELElBQUksdUJBQXVCLFVBQVUsRUFBRSxTQUFTLDRFQUE0RSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsK0JBQStCLEtBQUssNkJBQTZCLEVBQUUsU0FBUyxHQUFHLEtBQUssbUdBQW1HLFNBQVMsK0NBQStDLEdBQUcsY0FBYyw0REFBNEQsd0JBQXdCLDhFQUE4RSx1RUFBdUUsTUFBTSxjQUFjLEVBQUUsdURBQXVELGtDQUFrQywwREFBMEQsVUFBVSxjQUFjLFdBQVcsdUJBQXVCLDRCQUE0QixXQUFXLHFDQUFxQyxRQUFRLGNBQWMsZ0VBQWdFLCtEQUErRCxrQkFBa0IsaUNBQWlDLEtBQUssRUFBRSxzQkFBc0IsdUJBQXVCLGlDQUFpQyxzQkFBc0IsRUFBRSxzQkFBc0IsdUJBQXVCLG1DQUFtQyxLQUFLLEVBQUUsc0JBQXNCLDJCQUEyQix1Q0FBdUMsS0FBSyxFQUFFLHFDQUFxQyxtQkFBbUIsK0JBQStCLEtBQUssRUFBRSxzQkFBc0IsR0FBRyxjQUFjLFFBQVEsaUVBQWlFLGlCQUFpQixnQkFBZ0IsZ0ZBQWdGLFNBQVMsdUNBQXVDLGVBQWUsMENBQTBDLGNBQWMsZ0VBQWdFLHFEQUFxRCxNQUFNLDZCQUE2QixhQUFhLDZCQUE2QixXQUFXLHNCQUFzQixxQkFBcUIsNEJBQTRCLHdDQUF3Qyw4SUFBOEksZ0JBQWdCLGFBQWEsdUVBQXVFLCtIQUErSCxHQUFHLE9BQU8sOEJBQThCLElBQUksb0JBQW9CLFFBQVEsSUFBSSxpRUFBaUUsdUNBQXVDLHVCQUF1QixlQUFlLEVBQUUsU0FBUyxvQkFBb0IsU0FBUyw0REFBNEQsRUFBRSxLQUFLLE1BQU0sa0JBQWtCLG1CQUFtQixnRUFBZ0Usd1ZBQXdWLGlGQUFpRixtQkFBbUIsVUFBVSxLQUFLLEtBQUssTUFBTSxzQkFBc0IsU0FBUyxlQUFlLFdBQVcsRUFBRSxHQUFHLEVBQUUsRUFBRSw2TkFBNk4sZ0JBQWdCLG9FQUFvRSxzREFBc0Qsc0JBQXNCLEdBQUcsNkdBQTZHLGNBQWMsbUNBQW1DLGdHQUFnRyxXQUFXLHdCQUF3QixtQkFBbUIsTUFBTSxVQUFVLGVBQWUsdURBQXVELCtCQUErQiw4REFBOEQsMEZBQTBGLGNBQWMsRUFBRSxvQkFBb0IseUJBQXlCLCtCQUErQixHQUFHLGdFQUFnRSxvRUFBb0UsWUFBWSxtTEFBbUwsNkJBQTZCLEVBQUUsZ0ZBQWdGLDhDQUE4QyxFQUFFLG9CQUFvQixnQkFBZ0IsbURBQW1ELGtDQUFrQyx5REFBeUQseUNBQXlDLHFDQUFxQyxZQUFZLHNDQUFzQyxnQ0FBZ0MsSUFBSSxlQUFlLHVFQUF1RSxTQUFTLE1BQU0sb0JBQW9CLCtEQUErRCwwQ0FBMEMsa0hBQWtILDZGQUE2RixnQ0FBZ0Msc0RBQXNELHNCQUFzQixnQkFBZ0IsR0FBRyxZQUFZLDBCQUEwQixJQUFJLGNBQWMseUJBQXlCLFVBQVUsSUFBSSxXQUFXLGdFQUFnRSxtQ0FBbUMsNENBQTRDLHVCQUF1QixFQUFFLG9CQUFvQixHQUFHLGVBQWUsR0FBRyxxQ0FBcUMsRUFBRSxtQkFBbUIsR0FBRyxlQUFlLEVBQUUsd0JBQXdCLEdBQUcsdUJBQXVCLCtEQUErRCxpRUFBaUUsaUpBQWlKLEVBQUUsc0JBQXNCLEVBQUUsa1BBQWtQLHlCQUF5QixzQ0FBc0MsU0FBUyxnQkFBZ0IsMENBQTBDLGtCQUFrQixNQUFNLDhHQUE4RyxTQUFTLEtBQUssb0JBQW9CLDhDQUE4QyxhQUFhLE9BQU8sa3JCQUFrckIsU0FBUywyS0FBMkssbUJBQW1CLDRCQUE0QixVQUFVLEdBQUcsU0FBUyxnQkFBZ0IscUNBQXFDLFlBQVksZ0pBQWdKLGNBQWMscVJBQXFSLGNBQWMsa0JBQWtCLGNBQWMsK0RBQStELDBDQUEwQyxNQUFNLDZDQUE2Qyw2QkFBNkIsWUFBWSwwRUFBMEUsNkNBQTZDLHVDQUF1QywwREFBMEQsaUJBQWlCLGVBQWUsTUFBTSxPQUFPLFdBQVcsK0RBQStELDBDQUEwQywrQkFBK0Isc0lBQXNJLFlBQVksY0FBYywyQ0FBMkMsaUJBQWlCLDZCQUE2QixvRUFBb0UsaURBQWlELG9MQUFvTCxNQUFNLDBLQUEwSyw0QkFBNEIsc0RBQXNELHNCQUFzQixrRkFBa0YsNklBQTZJLDRRQUE0USxzREFBc0QseUhBQXlILHNEQUFzRCxJQUFJLHdCQUF3QixlQUFlLG9YQUFvWCxzREFBc0QsSUFBSSx3QkFBd0IsZUFBZSxzQ0FBc0MscUJBQXFCLEdBQUcsd0lBQXdJLCtFQUErRSxrREFBa0QsOEhBQThILHlGQUF5RixtQkFBbUIsaUNBQWlDLEdBQUcsdUZBQXVGLG1CQUFtQixtQ0FBbUMsR0FBRyxtQkFBbUIsZ0JBQWdCLDZSQUE2Uiw4R0FBOEcseUNBQXlDLGlGQUFpRixpQkFBaUIsK0RBQStELDJDQUEyQyw4RkFBOEYsc0dBQXNHLGlCQUFpQixhQUFhLHVCQUF1QiwrREFBK0Qsd0NBQXdDLElBQUksVUFBVSxLQUFLLDBGQUEwRix5SEFBeUgsdUZBQXVGLEdBQUcsYUFBYSx1QkFBdUIsWUFBWSw0R0FBNEcsaUJBQWlCLEtBQUssT0FBTyx1SEFBdUgsdUhBQXVILG1ZQUFtWSx1QkFBdUIsb0VBQW9FLHdCQUF3QixLQUFLLDBCQUEwQixpRkFBaUYsd0JBQXdCLFFBQVEsb0JBQW9CLFdBQVcsNEJBQTRCLFlBQVksZ0NBQWdDLFlBQVksMElBQTBJLFdBQVcsdU1BQXVNLHlCQUF5QixzQkFBc0IseUJBQXlCLEdBQUcsT0FBTyw4Q0FBOEMsa0ZBQWtGLHFQQUFxUCxPQUFPLElBQUkscVZBQXFWLGlCQUFpQixXQUFXLHNCQUFzQixNQUFNLHVCQUF1QixzREFBc0QsSUFBSSx3QkFBd0IsOERBQThELFFBQVEsTUFBTSxpR0FBaUcsb0NBQW9DLE1BQU0sb0RBQW9ELFlBQVksRUFBRSxFQUFFLEVBQUUsRUFBRSxtQkFBbUIsWUFBWSxFQUFFLEVBQUUsRUFBRSxFQUFFLGNBQWMsaUVBQWlFLElBQUksZ0VBQWdFLFNBQVMsNkRBQTZELHVCQUF1Qix5QkFBeUIsc0JBQXNCLGdFQUFnRSxvSEFBb0gsbUpBQW1KLDZJQUE2SSx1Q0FBdUMsZ0JBQWdCLGdEQUFnRCxFQUFFLEdBQUcsRUFBRSxHQUFHLHFCQUFxQixlQUFlLDJCQUEyQix1QkFBdUIsMEtBQTBLLG9CQUFvQixZQUFZLG1FQUFtRSxzREFBc0QsMkJBQTJCLG9CQUFvQixpQ0FBaUMsbUJBQW1CLFlBQVksNEJBQTRCLGlFQUFpRSwwRUFBMEUsb0JBQW9CLGlDQUFpQyxPQUFPLDBIQUEwSCwrREFBK0QsMmNBQTJjLHdCQUF3QixzRUFBc0UseUNBQXlDLGdCQUFnQiwrREFBK0QsNERBQTRELDRCQUE0Qiw4QkFBOEIsU0FBUyxnQ0FBZ0MsWUFBWSxrRUFBa0UsbURBQW1ELGFBQWEsZUFBZSxpQkFBaUIsbUJBQW1CLGdEQUFnRCwwSUFBMEksc0RBQXNELElBQUksd0JBQXdCLGVBQWUsb0ZBQW9GLGdEQUFnRCxHQUFHLFNBQVMsT0FBTywrSEFBK0gsMkJBQTJCLGtDQUFrQyw0TEFBNEwsSUFBSSxnQkFBZ0IsUUFBUSxjQUFjLFVBQVUsY0FBYyw2QkFBNkIsT0FBTyx3QkFBd0Isb0RBQW9ELEdBQUcsU0FBUyx3QkFBd0IsMkJBQTJCLE9BQU8sc0JBQXNCLFFBQVEsTUFBTSxhQUFhLGtEQUFrRCxTQUFTLEdBQUcsaUJBQWlCLFVBQVUsbURBQW1ELGlEQUFpRCxtTEFBbUwsaUJBQWlCLEdBQUcsb0VBQW9FLEVBQUUsTUFBTSxhQUFhLHFEQUFxRCxTQUFTLEdBQUcsZUFBZSxnQkFBZ0IsR0FBRyx3QkFBd0IsUUFBUSxtQkFBbUIsYUFBYSxrQkFBa0Isc0JBQXNCLE1BQU0sd0NBQXdDLFVBQVUsMEJBQTBCLFVBQVUsOENBQThDLDZDQUE2QyxpQkFBaUIsU0FBUyxPQUFPLGlCQUFpQix1QkFBdUIscURBQXFELGtCQUFrQixHQUFHLGlCQUFpQixpQkFBaUIsTUFBTSxrQkFBa0IsR0FBRyx5Q0FBeUMsV0FBVyw0Q0FBNEMsZUFBZSxjQUFjLDJCQUEyQiw0QkFBNEIscUJBQXFCLFVBQVUsZUFBZSxjQUFjLDhCQUE4QixRQUFRLGlCQUFpQixhQUFhLGdCQUFnQix3R0FBd0csaUJBQWlCLG9CQUFvQiw0REFBNEQsUUFBUSxlQUFlLHFCQUFxQiwwRUFBMEUsV0FBVyw0SUFBNEksaUJBQWlCLE9BQU8sdUJBQXVCLEVBQUUsT0FBTyxhQUFhLG1GQUFtRixXQUFXLEdBQUcsYUFBYSxPQUFPLGFBQWEsZ0NBQWdDLFdBQVcsR0FBRyxPQUFPLGFBQWEsZ0tBQWdLLFdBQVcsR0FBRyxRQUFRLGVBQWUsNEJBQTRCLDRFQUE0RSxHQUFHLGlCQUFpQiwwQkFBMEIsb0RBQW9ELGNBQWMsK0RBQStELE9BQU8sY0FBYywrQ0FBK0MsaUJBQWlCLDJDQUEyQyxxREFBcUQsbUJBQW1CLHdCQUF3QixxREFBcUQsa0JBQWtCLGtEQUFrRCwrQkFBK0IseUJBQXlCLDRIQUE0SCxXQUFXLDJFQUEyRSxHQUFHLElBQUkseUJBQXlCLGdGQUFnRixNQUFNLDhDQUE4QywwQkFBMEIsb0JBQW9CLDZDQUE2Qyx1SUFBdUksUUFBUSxPQUFPLGFBQWEsdUZBQXVGLFdBQVcsR0FBRyxnRUFBZ0UsT0FBTyxxRUFBcUUsUUFBUSw0REFBNEQsd0JBQXdCLGdCQUFnQixhQUFhLGdCQUFnQixhQUFhLE9BQU8sU0FBUyxFQUFFLDRCQUE0Qix3QkFBd0IsYUFBYSxtS0FBbUssU0FBUyxlQUFlLGdnQkFBZ2dCLFNBQVMsZUFBZSxnREFBZ0QsU0FBUyxlQUFlLG9RQUFvUSxTQUFTLGVBQWUscUdBQXFHLFNBQVMsZUFBZSx1REFBdUQsU0FBUyxlQUFlLHFWQUFxVixTQUFTLGVBQWUsd1BBQXdQLFNBQVMsZUFBZSxzSUFBc0ksU0FBUyxlQUFlLDBDQUEwQyxTQUFTLGVBQWUsd1NBQXdTLFNBQVMsZUFBZSxrTUFBa00sU0FBUyxHQUFHLGdCQUFnQixhQUFhLE9BQU8sUUFBUSxFQUFFLHdCQUF3QixnQkFBZ0IsaUJBQWlCLEVBQUUsNkZBQTZGLEVBQUUsa0JBQWtCLCtCQUErQixnREFBZ0QsRUFBRSx3QkFBd0IsRUFBRSx1Q0FBdUMsc0JBQXNCLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixJQUFJLGdCQUFnQixhQUFhLGNBQWMsMkhBQTJILEVBQUUsMkNBQTJDLFNBQVMsK09BQStPLGtDQUFrQyxjQUFjLGVBQWUsY0FBYyxXQUFXLFNBQVMsU0FBUyxXQUFXLG1CQUFtQixnRUFBZ0UsNEJBQTRCLGlEQUFpRCw0QkFBNEIseUJBQXlCLDJCQUEyQix3Q0FBd0MsV0FBVyw0QkFBNEIsNENBQTRDLGFBQWEsMENBQTBDLGVBQWUsMENBQTBDLHFCQUFxQixlQUFlLCtCQUErQixVQUFVLEdBQUcsaUJBQWlCLFVBQVUscUJBQXFCLDhCQUE4QixTQUFTLEdBQUcsd0pBQXdKLDBCQUEwQixxQkFBcUIsbUJBQW1CLG1EQUFtRCxNQUFNLElBQUksaUJBQWlCLHlCQUF5QixHQUFHLHNHQUFzRyxxQkFBcUIsdUJBQXVCLEdBQUcsc0JBQXNCLG9CQUFvQixNQUFNLGtCQUFrQiw0QkFBNEIsZUFBZSxvQkFBb0IsZ0JBQWdCLFNBQVMsT0FBTyxXQUFXLEtBQUsscUJBQXFCLE1BQU0sZ0NBQWdDLGFBQWEsZ0JBQWdCLG9CQUFvQixlQUFlLGtCQUFrQixtQkFBbUIsNEJBQTRCLHNCQUFzQiw2QkFBNkIsdUJBQXVCLDhCQUE4QiwwQkFBMEIsc0JBQXNCLG1CQUFtQiwyREFBMkQsRUFBRSx5REFBeUQsR0FBRyxjQUFjLGdCQUFnQiwwQkFBMEIsMEJBQTBCLFNBQVMsT0FBTyxJQUFJLE1BQU0sb0JBQW9CLGtEQUFrRCxPQUFPLGdEQUFnRCxTQUFTLHNGQUFzRixHQUFHLGFBQWEsRUFBRSwyRUFBMkUscUNBQXFDLG1CQUFtQixVQUFVLGNBQWMsaUNBQWlDLHNCQUFzQiwwQ0FBMEMsb0VBQW9FLGNBQWMsb0JBQW9CLDBCQUEwQixxQ0FBcUMsZ0JBQWdCLDZGQUE2RixvREFBb0Qsd0JBQXdCLG1CQUFtQixzT0FBc08scURBQXFELG1TQUFtUyxHQUFHLHdCQUF3QixNQUFNLGtCQUFrQiw4QkFBOEIsTUFBTSxnREFBZ0QscUJBQXFCLG1CQUFtQiw4QkFBOEIsSUFBSSxVQUFVLGdEQUFnRCxVQUFVLGtHQUFrRyx3QkFBd0IsRUFBRSxFQUFFLFNBQVMsVUFBVSxnRUFBZ0UsT0FBTyxRQUFRLDRDQUE0QyxLQUFLLGFBQWEsb0JBQW9CLHdCQUF3Qiw0REFBNEQsbUJBQW1CLG1DQUFtQyx3QkFBd0IscUNBQXFDLG1CQUFtQixRQUFRLHdCQUF3QixzQ0FBc0MsZ0JBQWdCLGFBQWEsT0FBTyxTQUFTLEVBQUUsME9BQTBPLGNBQWMsZUFBZSxxQkFBcUIsRUFBRSxxQkFBcUIsaUpBQWlKLHVCQUF1QixHQUFHLFNBQVMsc0JBQXNCLGlCQUFpQixhQUFhLFNBQVMsR0FBRyxZQUFZLEdBQUcsVUFBVSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0Msc0JBQXNCLGlCQUFpQixhQUFhLFNBQVMsR0FBRyxZQUFZLEdBQUcsVUFBVSxjQUFjLEVBQUUsTUFBTSx3RUFBd0Usc0JBQXNCLGlCQUFpQixhQUFhLHVCQUF1QixHQUFHLFlBQVksR0FBRyxtQkFBbUIsR0FBRyxnQ0FBZ0MsUUFBUSxlQUFlLDhDQUE4Qyw4QkFBOEIsd0RBQXdELG9CQUFvQix5REFBeUQsZUFBZSxnQ0FBZ0MsZUFBZSxnQ0FBZ0MsZUFBZSw4QkFBOEIsa0JBQWtCLDRCQUE0QixxQkFBcUIsNEJBQTRCLHVDQUF1QyxTQUFTLGlCQUFpQiw0QkFBNEIsZ0JBQWdCLGFBQWEsVUFBVSxPQUFPLGdCQUFnQixjQUFjLGdFQUFnRSxTQUFTLGVBQWUsMEVBQTBFLFNBQVMsZUFBZSxzQ0FBc0MsU0FBUyxHQUFHLGdCQUFnQixhQUFhLE1BQU0sT0FBTyxRQUFRLGNBQWMsZ0VBQWdFLFNBQVMsR0FBRyxnQkFBZ0IsYUFBYSxVQUFVLE9BQU8sMkJBQTJCLGNBQWMsMEJBQTBCLFNBQVMsZUFBZSxrSUFBa0ksU0FBUyxlQUFlLDRCQUE0QixTQUFTLEdBQUcsZ0JBQWdCLGFBQWEsd0NBQXdDLGdCQUFnQixhQUFhLFFBQVEsT0FBTyxnQkFBZ0IsY0FBYyxnRkFBZ0YsU0FBUyxlQUFlLGdEQUFnRCxTQUFTLEdBQUcsZ0JBQWdCLGFBQWEsT0FBTyxvQ0FBb0MsRUFBRSxTQUFTLGdFQUFnRSxJQUFJLHNDQUFzQyxJQUFJLFdBQVcsTUFBTSxhQUFhLGtFQUFrRSxTQUFTLEdBQUcsZ0JBQWdCLGFBQWEsY0FBYyx5R0FBeUcsRUFBRSxtRkFBbUYsU0FBUyx3QkFBd0Isd0JBQXdCLElBQUksNENBQTRDLFNBQVMsd1RBQXdULFNBQVMsMkNBQTJDLCtCQUErQix3QkFBd0IsZ0VBQWdFLGllQUFpZSxXQUFXLDBDQUEwQyxnQ0FBZ0Msb0NBQW9DLGtDQUFrQyxFQUFFLGdEQUFnRCxFQUFFLDJCQUEyQixHQUFHLGNBQWMsTUFBTSxrQkFBa0Isc0JBQXNCLG1CQUFtQiw4QkFBOEIsSUFBSSxVQUFVLGdEQUFnRCxVQUFVLDhGQUE4Rix3QkFBd0Isa0RBQWtELHdFQUF3RSxHQUFHLEVBQUUsU0FBUyxVQUFVLGdFQUFnRSxPQUFPLFFBQVEsNkNBQTZDLEtBQUssa0ZBQWtGLHNDQUFzQyxnQ0FBZ0MsRUFBRSxrREFBa0QsMENBQTBDLHVDQUF1QywyQkFBMkIsRUFBRSx5QkFBeUIsc0VBQXNFLHVDQUF1QywyQkFBMkIsRUFBRSx5QkFBeUIsR0FBRyxnQkFBZ0IsYUFBYSxPQUFPLGtCQUFrQixFQUFFLDRDQUE0QyxtQkFBbUIsNERBQTRELG1CQUFtQixvQkFBb0Isa0RBQWtELGNBQWMsNEJBQTRCLHlEQUF5RCwrQkFBK0IsOENBQThDLHlDQUF5QyxNQUFNLFlBQVksZ0JBQWdCLGFBQWEsTUFBTSxhQUFhLDREQUE0RCxTQUFTLEdBQUcsZ0JBQWdCLGFBQWEsT0FBTywyQkFBMkIsRUFBRSxjQUFjLE9BQU8sb0JBQW9CLEVBQUUsR0FBRyxPQUFPLEdBQUcsT0FBTyx3QkFBd0IsT0FBTyxHQUFHLE9BQU8sc0JBQXNCLGVBQWUsaURBQWlELFlBQVksYUFBYSx5YkFBeWIsU0FBUyxlQUFlLG9mQUFvZixTQUFTLGVBQWUsMkdBQTJHLFNBQVMsZUFBZSx3TkFBd04sU0FBUyxHQUFHLFNBQVMsV0FBVyxnQkFBZ0IsYUFBYSxNQUFNLE9BQU8sb0NBQW9DLGNBQWMsNDVGQUE0NUYsU0FBUyxHQUFHLGtFQUFrRSxtR0FBbUcsTUFBTSxJQUFJLDBDQUEwQyxTQUFTLG1CQUFtQixvSkFBb0osc0RBQXNELG1CQUFtQiwwQ0FBMEMsbUJBQW1CLDJIQUEySCxhQUFhLGdCQUFnQixhQUFhLE9BQU8sNkNBQTZDLEVBQUUsMkNBQTJDLDJFQUEyRSxtQkFBbUIscUVBQXFFLGFBQWEseUJBQXlCLDhHQUE4Ryw4Q0FBOEMsdURBQXVELGdCQUFnQixhQUFhLE9BQU8sa0JBQWtCLEVBQUUsZ0RBQWdELFFBQVEsYUFBYSxnRUFBZ0UsU0FBUyxlQUFlLGlFQUFpRSxTQUFTLEdBQUcsZ0JBQWdCLGFBQWEsT0FBTyxRQUFRLEVBQUUsY0FBYyxZQUFZLHdDQUF3QyxPQUFPLGVBQWUsNkJBQTZCLHdCQUF3QixzQkFBc0IsaUJBQWlCLGVBQWUscUNBQXFDLGFBQWEsMkJBQTJCLEVBQUUsZ0JBQWdCLDZCQUE2Qix3QkFBd0IsU0FBUyxpQkFBaUIsZUFBZSxrRUFBa0UsYUFBYSxxQkFBcUIsRUFBRSx5QkFBeUIsSUFBSSw2QkFBNkIsV0FBVyxTQUFTLG9CQUFvQixTQUFTLCtEQUErRCxnQkFBZ0IsYUFBYSxjQUFjLHVDQUF1QyxTQUFTLHlhQUF5YSxJQUFJLDJyQkFBMnJCLElBQUksbXJCQUFtckIseUVBQXlFLGdCQUFnQixhQUFhLE9BQU8sMkJBQTJCLEVBQUUsa0JBQWtCLGFBQWEsaUVBQWlFLFNBQVMsZUFBZSw2QkFBNkIsU0FBUyxHQUFHLFNBQVMsVUFBVSxJQUFJLGlCQUFpQixPQUFPLHVIQUF1SCxtQ0FBbUMsdUJBQXVCLGdCQUFnQixhQUFhLE9BQU8sUUFBUSxFQUFFLGNBQWMsbUhBQW1ILHNDQUFzQyxLQUFLLGNBQWMsTUFBTSxnQkFBZ0IsV0FBVyxrSUFBa0ksd0JBQXdCLFFBQVEsU0FBUyxzQkFBc0Isb0RBQW9ELFVBQVUsRUFBRSxvQ0FBb0MsaUZBQWlGLEVBQUUsWUFBWSxLQUFLLDZDQUE2QyxTQUFTLGlCQUFpQixrRUFBa0UsRUFBRSxJQUFJLEVBQUUsR0FBRyxRQUFRLGdCQUFnQixhQUFhLE9BQU8sU0FBUyxFQUFFLGVBQWUsa0JBQWtCLG9GQUFvRix1RkFBdUYsZ0JBQWdCLGFBQWEsTUFBTSxPQUFPLG1HQUFtRyxjQUFjLDhEQUE4RCxTQUFTLEdBQUcsa3RCQUFrdEIsNkRBQTZELGdCQUFnQixhQUFhLE9BQU8sa0JBQWtCLEVBQUUsa0ZBQWtGLDBCQUEwQix3Q0FBd0MsRUFBRSx3Q0FBd0MsUUFBUSxpQkFBaUIsUUFBUSxTQUFTLE1BQU0sY0FBYyxPQUFPLFdBQVcsOENBQThDLHdEQUF3RCxxQkFBcUIsYUFBYSxNQUFNLGdCQUFnQixlQUFlLElBQUkscURBQXFELGdDQUFnQyw0RUFBNEUsU0FBUywrRUFBK0Usc0JBQXNCLGtEQUFrRCxFQUFFLDBCQUEwQix5Q0FBeUMsc0NBQXNDLHVFQUF1RSxnQkFBZ0IsU0FBUyxrRkFBa0Ysb0JBQW9CLHVCQUF1QixHQUFHLGtDQUFrQyxpQkFBaUIsd0NBQXdDLDRCQUE0Qiw4Q0FBOEMsVUFBVSxtQkFBbUIsRUFBRSxPQUFPLFdBQVcsTUFBTSx1QkFBdUIsRUFBRSxnQkFBZ0IsYUFBYSxNQUFNLE9BQU8sUUFBUSxjQUFjLHFWQUFxVixTQUFTLEdBQUcsVUFBVSxnQkFBZ0IsYUFBYSxPQUFPLGtCQUFrQixFQUFFLGNBQWMsZ0JBQWdCLHdCQUF3QixLQUFLLEdBQUcsRUFBRSxLQUFLLDhCQUE4QixLQUFLLEdBQUcsRUFBRSxHQUFHLGdCQUFnQixhQUFhLE9BQU8sUUFBUSxFQUFFLHdCQUF3QixrQkFBa0IsUUFBUSxvQkFBb0IsRUFBRSxFQUFFLEVBQUUsR0FBRyxhQUFhLG9CQUFvQixFQUFFLEVBQUUsRUFBRSxTQUFTLFdBQVcsb0JBQW9CLEVBQUUsRUFBRSxFQUFFLE9BQU8scUJBQXFCLG9CQUFvQixFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksOEJBQThCLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxPQUFPLFNBQVMsR0FBRyxvQkFBb0Isb0JBQW9CLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSw4QkFBOEIsRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLEdBQUcsU0FBUyxHQUFHLG9DQUFvQyxpRkFBaUYsNkJBQTZCLDBEQUEwRCx1QkFBdUIsRUFBRSxpREFBaUQsTUFBTSxnQkFBZ0IsYUFBYSxNQUFNLE9BQU8sa0JBQWtCLGNBQWMsa2dDQUFrZ0MsU0FBUyxHQUFHLGdEQUFnRCw4YkFBOGIsNEJBQTRCLEVBQUUsMERBQTBELEVBQUUsNERBQTRELEVBQUUsOERBQThELEVBQUUseURBQXlELEVBQUUsa0RBQWtELEVBQUUsdUNBQXVDLEVBQUUsbUJBQW1CLHNGQUFzRixNQUFNLGFBQWEsa0JBQWtCLFNBQVMsR0FBRyxVQUFVLGdCQUFnQixhQUFhLE9BQU8sU0FBUyxFQUFFLE1BQU0sUUFBUSxhQUFhLHFHQUFxRyxTQUFTLEdBQUcsNEJBQTRCLGNBQWMsWUFBWSxnQkFBZ0IsYUFBYSxPQUFPLGtCQUFrQixFQUFFLFFBQVEsY0FBYyxhQUFhLHdEQUF3RCxNQUFNLG1CQUFtQixpREFBaUQsZ0JBQWdCLGFBQWEsT0FBTywyQkFBMkIsRUFBRSx5QkFBeUIsUUFBUSxhQUFhLDBLQUEwSyxTQUFTLEdBQUcsNkNBQTZDLFNBQVMseUlBQXlJLDBCQUEwQixjQUFjLEdBQUcsWUFBWSwwREFBMEQsT0FBTyxrQkFBa0IsT0FBTyxhQUFhLFFBQVEsZ0JBQWdCLGFBQWEsYUFBYSxtUEFBbVAsT0FBTyxRQUFRLEVBQUUsZUFBZSxhQUFhLE9BQU8sZ0ZBQWdGLEVBQUUsMEJBQTBCLGFBQWEsNmtCQUE2a0IsU0FBUyxHQUFHLGNBQWMsNEhBQTRILDhCQUE4QixTQUFTLHFCQUFxQixTQUFTLGdDQUFnQyxJQUFJLGdDQUFnQyxJQUFJLHNDQUFzQyxJQUFJLHlDQUF5QyxrQkFBa0IsSUFBSSxtQ0FBbUMscUNBQXFDLGVBQWUsZ0lBQWdJLFNBQVMsc0RBQXNELG1CQUFtQixzSEFBc0gsK0JBQStCLDREQUE0RCxVQUFVLFdBQVcsaUhBQWlILE1BQU0sY0FBYyxXQUFXLCtCQUErQixZQUFZLFlBQVkscUNBQXFDLFFBQVEsMENBQTBDLGNBQWMsSUFBSSxJQUFJLGFBQWEsK0RBQStELHVCQUF1QixFQUFFLGdCQUFnQixpREFBaUQsSUFBSSwyQ0FBMkMsU0FBUywwQ0FBMEMsZ0VBQWdFLDRGQUE0RixlQUFlLHdDQUF3QyxTQUFTLEVBQUUsYUFBYSxTQUFTLE1BQU0sYUFBYSxjQUFjLHlaQUF5WixFQUFFLFNBQVMsY0FBYyxrRkFBa0YsRUFBRSxTQUFTLGNBQWMsdUNBQXVDLEVBQUUsU0FBUyxjQUFjLHFDQUFxQyxFQUFFLCtEQUErRCx3QkFBd0IsUUFBUSxpQkFBaUIsNkNBQTZDLGtIQUFrSCxhQUFhLHFCQUFxQix3QkFBd0IsK0JBQStCLHdCQUF3QixxTEFBcUwsbUVBQW1FLDJCQUEyQixFQUFFLEtBQUssOEJBQThCLElBQUksS0FBSyx5T0FBeU8sNEJBQTRCLGdEQUFnRCxVQUFVLGtHQUFrRyxnSkFBZ0osYUFBYSx3QkFBd0Isb0NBQW9DLDhCQUE4Qix3SkFBd0osR0FBRyxFQUFFLFNBQVMsVUFBVSxnRUFBZ0UsZ0JBQWdCLFFBQVEsNENBQTRDLEtBQUssYUFBYSx3SkFBd0osd0JBQXdCLHdDQUF3Qyw0QkFBNEIsb0JBQW9CLGFBQWEsMEZBQTBGLGVBQWUsV0FBVyxhQUFhLHFIQUFxSCxlQUFlLFlBQVksMENBQTBDLGlFQUFpRSxvRkFBb0YsMklBQTJJLG1EQUFtRCxxQkFBcUIsb0ZBQW9GLDRJQUE0SSxzREFBc0QsMENBQTBDLGNBQWMsZUFBZSxnSEFBZ0gsT0FBTyx3RUFBd0UsT0FBTyw0QkFBNEIsU0FBUyxtRUFBbUUsS0FBSyx5Q0FBeUMsOEJBQThCLDJCQUEyQiw4Q0FBOEMsZUFBZSxpQ0FBaUMsNERBQTRELGNBQWMsZ0RBQWdELG1CQUFtQixzQkFBc0Isa0JBQWtCLHdEQUF3RCw2QkFBNkIsWUFBWSxPQUFPLGFBQWEsd0RBQXdELGlFQUFpRSxvRkFBb0YsMklBQTJJLG1EQUFtRCxxQkFBcUIsb0ZBQW9GLDRJQUE0SSxzREFBc0QscUVBQXFFLHdHQUF3RyxvQkFBb0IsY0FBYyx5QkFBeUIsMkhBQTJILE9BQU8sNkJBQTZCLGtCQUFrQixtRkFBbUYsU0FBUyxzQ0FBc0MsbUNBQW1DLGlDQUFpQyxxQkFBcUIsNkJBQTZCLEVBQUUsVUFBVSx3QkFBd0IsUUFBUSx3QkFBd0IsOENBQThDLG9GQUFvRiw0SUFBNEksc0RBQXNELFdBQVcsUUFBUSxlQUFlLHFFQUFxRSxNQUFNLFlBQVksR0FBRyxrQkFBa0IsbUNBQW1DLDhDQUE4QyxHQUFHLCtFQUErRSxTQUFTLDJEQUEyRCxFQUFFLFNBQVMsWUFBWSxNQUFNLGNBQWMsNEJBQTRCLHNCQUFzQixjQUFjLE9BQU8sUUFBUSxNQUFNLGdDQUFnQyx3RUFBd0Usd0RBQXdELFlBQVkseUJBQXlCLHlCQUF5QixtQkFBbUIsMkJBQTJCLHFEQUFxRCxtQkFBbUIseUJBQXlCLFFBQVEsSUFBSSxrSkFBa0osOExBQThMLDZCQUE2QixrREFBa0QsSUFBSSxnQ0FBZ0MsNklBQTZJLDZJQUE2SSxLQUFLLG1DQUFtQyxjQUFjLGVBQWUsMkVBQTJFLHFCQUFxQixzQ0FBc0Msa0JBQWtCLHFCQUFxQixJQUFJLGlIQUFpSCxrQkFBa0IsZ0RBQWdELGVBQWUsZ0lBQWdJLG9DQUFvQywrQkFBK0Isd0JBQXdCLG1CQUFtQixjQUFjLDhFQUE4RSwwQkFBMEIsOENBQThDLGtCQUFrQix1QkFBdUIsZ0hBQWdILFlBQVksZ0JBQWdCLGtCQUFrQiwyQ0FBMkMsdUdBQXVHLGlCQUFpQixXQUFXLHFCQUFxQixpQ0FBaUMsTUFBTSw0Q0FBNEMsb0JBQW9CLDBCQUEwQiw2Q0FBNkMsWUFBWSxJQUFJLDJKQUEySixnRUFBZ0UscUhBQXFILG1IQUFtSCwrQkFBK0IsdUNBQXVDLG9CQUFvQixrQkFBa0IsNkJBQTZCLHVDQUF1QyxvSUFBb0ksSUFBSSxjQUFjLHFKQUFxSixnSkFBZ0osY0FBYyxvRkFBb0YsOEVBQThFLGNBQWMsNEJBQTRCLGNBQWMsMENBQTBDLFlBQVksSUFBSSxtQkFBbUIsU0FBUyxrQkFBa0Isb0ZBQW9GLHNGQUFzRixNQUFNLDhJQUE4SSxjQUFjLGdIQUFnSCxXQUFXLGdCQUFnQixpQ0FBaUMsK0RBQStELCtJQUErSSx5REFBeUQsc0JBQXNCLFNBQVMsTUFBTSxXQUFXLCtDQUErQywwQ0FBMEMsK0RBQStELHVCQUF1QixnQ0FBZ0MscUNBQXFDLDZCQUE2QixrQkFBa0IsU0FBUyxtREFBbUQsOERBQThELCtCQUErQixtQkFBbUIsV0FBVyw2QkFBNkIsMENBQTBDLCtCQUErQiw2Q0FBNkMsZ0NBQWdDLHVFQUF1RSx5REFBeUQsNkJBQTZCLGtCQUFrQixhQUFhLGlCQUFpQixzQkFBc0IseUJBQXlCLHNKQUFzSixjQUFjLGFBQWEsYUFBYSxlQUFlLElBQUkseUZBQXlGLDJMQUEyTCw0REFBNEQsc0JBQXNCLGdDQUFnQyxtR0FBbUcsbUNBQW1DLG1CQUFtQixnQkFBZ0Isc0NBQXNDLE1BQU0sU0FBUyxRQUFRLElBQUksbUNBQW1DLHNDQUFzQywwQkFBMEIsNEJBQTRCLEtBQUssS0FBSyxTQUFTLFlBQVksSUFBSSwwQkFBMEIsS0FBSyxNQUFNLGNBQWMsU0FBUyxvQkFBb0IsZUFBZSxtQkFBbUIsNkJBQTZCLGlCQUFpQixNQUFNLHVCQUF1QixJQUFJLEtBQUsscUNBQXFDLGlCQUFpQixTQUFTLFNBQVMsb0JBQW9CLGdDQUFnQyxvQkFBb0IscUJBQXFCLFdBQVcsWUFBWSxXQUFXLGdDQUFnQyxTQUFTLFdBQVcsb0JBQW9CLHFCQUFxQixvQkFBb0IsdUJBQXVCLFVBQVUsV0FBVyxZQUFZLHdCQUF3Qix5REFBeUQsU0FBUyxzQkFBc0Isa0JBQWtCLDRFQUE0RSxrQkFBa0IsdUJBQXVCLFdBQVcsUUFBUSxLQUFLLElBQUksRUFBRSxhQUFhLHVDQUF1QyxXQUFXLFlBQVksVUFBVSxvQkFBb0IsTUFBTSw4REFBOEQsTUFBTSxxSEFBcUgsTUFBTSxnSkFBZ0osbUdBQW1HLG1CQUFtQixpQkFBaUIsbURBQW1ELGFBQWEsS0FBSyxJQUFJLHNEQUFzRCxTQUFTLElBQUksZ0RBQWdELElBQUksNkJBQTZCLGVBQWUsWUFBWSw2RkFBNkYsU0FBUyxVQUFVLG9TQUFvUyw2QkFBNkIsd0NBQXdDLDhDQUE4Qyw2QkFBNkIsNENBQTRDLHlDQUF5QyxnQkFBZ0IscUhBQXFILHVCQUF1QixxRkFBcUYsUUFBUSwyQkFBMkIsWUFBWSwrQkFBK0IsWUFBWSx3QkFBd0Isa0RBQWtELHlCQUF5Qix5T0FBeU8sa0JBQWtCLDBCQUEwQiw0QkFBNEIsSUFBSSxvQkFBb0IsY0FBYyxNQUFNLHNCQUFzQiwwQkFBMEIsZ0NBQWdDLGlKQUFpSixrQkFBa0Isd0JBQXdCLHdGQUF3RixrQ0FBa0MsTUFBTSwwQkFBMEIsV0FBVyxtQkFBbUIseUJBQXlCLFFBQVEsUUFBUSxXQUFXLEtBQUssV0FBVyx1SEFBdUgsS0FBSyxxRkFBcUYsWUFBWSxZQUFZLFNBQVMsdUVBQXVFLG9CQUFvQiw0RUFBNEUsWUFBWSxJQUFJLG1CQUFtQixZQUFZLCtCQUErQixvQkFBb0IsNEVBQTRFLFlBQVksSUFBSSxtQ0FBbUMsWUFBWSwrQkFBK0Isb0JBQW9CLDRFQUE0RSxZQUFZLElBQUksbUVBQW1FLFlBQVksaUNBQWlDLG9CQUFvQix5RUFBeUUsZ0ZBQWdGLG1FQUFtRSx1Q0FBdUMsZ0NBQWdDLFNBQVMsNEJBQTRCLDhDQUE4QyxFQUFFLCtEQUErRCxpRkFBaUYsc0xBQXNMLCtLQUErSyx1QkFBdUIsaUJBQWlCLGlCQUFpQixxQkFBcUIsNENBQTRDLHVEQUF1RCxZQUFZLElBQUksb0JBQW9CLGNBQWMsTUFBTSxzQkFBc0Isc0NBQXNDLCtCQUErQixxQ0FBcUMsd0JBQXdCLHlDQUF5Qyx3QkFBd0IscUNBQXFDLHlDQUF5Qyw2REFBNkQsS0FBSywyR0FBMkcsa0VBQWtFLHNCQUFzQixpSUFBaUksY0FBYyxTQUFTLE1BQU0sV0FBVywrQkFBK0IsNENBQTRDLDJEQUEyRCxrQ0FBa0MseUVBQXlFLHlEQUF5RCw2QkFBNkIsK0JBQStCLE9BQU8sbUVBQW1FLGFBQWEsa0JBQWtCLFNBQVMsdUJBQXVCLFlBQVksSUFBSSxxQ0FBcUMsU0FBUyxrQkFBa0IsU0FBUyx1QkFBdUIsWUFBWSxJQUFJLGlDQUFpQyxTQUFTLGtCQUFrQixpQkFBaUIsdUNBQXVDLFNBQVMsWUFBWSxJQUFJLGVBQWUsU0FBUyxrQkFBa0IscUJBQXFCLFNBQVMsWUFBWSxhQUFhLDZDQUE2QyxTQUFTLGtCQUFrQiwwREFBMEQsdUVBQXVFLHdCQUF3QixxRkFBcUYsc0VBQXNFLDJEQUEyRCxzQkFBc0IsZUFBZSxtQ0FBbUMsc0RBQXNELCtDQUErQywrREFBK0Qsc0JBQXNCLGVBQWUsbUNBQW1DLHNEQUFzRCwrQ0FBK0MsK0RBQStELHdCQUF3QiwyREFBMkQsa0RBQWtELHNCQUFzQiwyREFBMkQsc0JBQXNCLDJEQUEyRCxnQ0FBZ0Msb0JBQW9CLGtHQUFrRywyQkFBMkIsOENBQThDLCtEQUErRCxvQ0FBb0Msc0JBQXNCLEtBQUssZ0JBQWdCLGdCQUFnQixTQUFTLCtEQUErRCxvQ0FBb0Msc0JBQXNCLEtBQUssY0FBYyxrQkFBa0IsU0FBUywyREFBMkQsNENBQTRDLGlFQUFpRSx5REFBeUQsaUVBQWlFLHlEQUF5RCxpRUFBaUUsNEZBQTRGLGlFQUFpRSw0RkFBNEYsNENBQTRDLG1CQUFtQiw0QkFBNEIsMkNBQTJDLDBHQUEwRyx5Q0FBeUMsOENBQThDLG1CQUFtQiw0QkFBNEIsMkNBQTJDLDBHQUEwRyx3Q0FBd0MseUNBQXlDLG9DQUFvQyxzQkFBc0IsS0FBSyxnQkFBZ0IsZ0JBQWdCLDJDQUEyQyx1Q0FBdUMsb0NBQW9DLDBCQUEwQixLQUFLLGNBQWMsa0JBQWtCLDJDQUEyQyxvQ0FBb0MsMkVBQTJFLHVDQUF1Qyw2QkFBNkIsNkJBQTZCLDhCQUE4Qix1Q0FBdUMsNkJBQTZCLDZCQUE2Qiw4QkFBOEIsdUNBQXVDLHFGQUFxRix1Q0FBdUMscUZBQXFGLDJDQUEyQyxtQkFBbUIsNEJBQTRCLDJDQUEyQyx3REFBd0Qsc0ZBQXNGLDZDQUE2QyxtQkFBbUIsNEJBQTRCLDJDQUEyQyx3REFBd0Qsc0ZBQXNGLHlDQUF5QywyREFBMkQsdUNBQXVDLDJEQUEyRCx3Q0FBd0MsMkRBQTJELHdDQUF3QywyREFBMkQsbUVBQW1FLHdEQUF3RCxZQUFZLGtCQUFrQixnQkFBZ0IsbUJBQW1CLFdBQVcsbUVBQW1FLHdEQUF3RCxjQUFjLG9CQUFvQixpQkFBaUIsbUJBQW1CLFdBQVcsK0RBQStELDREQUE0RCxxRUFBcUUsOEVBQThFLHFFQUFxRSw4RUFBOEUscUVBQXFFLHFIQUFxSCxxRUFBcUUscUhBQXFILGlEQUFpRCwwREFBMEQsbURBQW1ELDBEQUEwRCw0Q0FBNEMsbUJBQW1CLDBCQUEwQixxQkFBcUIsZ0JBQWdCLGtCQUFrQixnQkFBZ0IsNkRBQTZELFdBQVcsMENBQTBDLG1CQUFtQiwwQkFBMEIscUJBQXFCLGtCQUFrQixvQkFBb0IsaUJBQWlCLDZEQUE2RCxXQUFXLHVDQUF1QyxnRkFBZ0YsMENBQTBDLG1GQUFtRiwwQ0FBMEMsbUZBQW1GLDBDQUEwQywrSEFBK0gsMENBQTBDLHVKQUF1SixnREFBZ0QsOEVBQThFLGtEQUFrRCw4RUFBOEUsNENBQTRDLHdCQUF3QiwwQ0FBMEMsd0JBQXdCLDJDQUEyQyx3QkFBd0IsMkNBQTJDLHdCQUF3QixvQ0FBb0MscUVBQXFFLHdHQUF3RywwQ0FBMEMseURBQXlELGtFQUFrRSx1REFBdUQsZ0VBQWdFLFlBQVksbUpBQW1KLG9DQUFvQyx1QkFBdUIsc0tBQXNLLG9GQUFvRixpQkFBaUIsd0JBQXdCLDBDQUEwQyxpRUFBaUUsZ0ZBQWdGLG9CQUFvQixNQUFNLDZFQUE2RSxJQUFJLGNBQWMsS0FBSywrQ0FBK0Msa0ZBQWtGLFFBQVEsTUFBTSxxQkFBcUIsYUFBYSxXQUFXLGtCQUFrQixxQkFBcUIsY0FBYyw4Q0FBOEMsMERBQTBELGVBQWUsV0FBVyxHQUFHLEVBQUUsK0JBQStCLFdBQVcsU0FBUyxZQUFZLG1DQUFtQyxrREFBa0QsRUFBRSxXQUFXLFNBQVMsV0FBVyxHQUFHLEVBQUUsS0FBSyxhQUFhLElBQUksY0FBYyxvQkFBb0IsdUJBQXVCLEtBQUssT0FBTyxXQUFXLGVBQWUsRUFBRSxFQUFFLEVBQUUsU0FBUyxhQUFhLEVBQUUsRUFBRSxFQUFFLHdCQUF3QixhQUFhLGtDQUFrQyxNQUFNLHdDQUF3QyxHQUFHLFNBQVMsR0FBRyxLQUFLLFFBQVEsRUFBRSxFQUFFLFdBQVcsR0FBRyxLQUFLLFVBQVUsRUFBRSxFQUFFLGVBQWUsVUFBVSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLHNDQUFzQyxpQkFBaUIsa0VBQWtFLFFBQVEsZ0JBQWdCLHFFQUFxRSxrQkFBa0IscUZBQXFGLDRDQUE0QywrQ0FBK0MsT0FBTyxTQUFTLEVBQUUsS0FBSywwQ0FBMEMsWUFBWSxHQUFHLDhFQUE4RSxzREFBc0QsY0FBYyxFQUFFLG1EQUFtRCxTQUFTLEVBQUUsbURBQW1ELHVCQUF1QixFQUFFLHdCQUF3Qix3TEFBd0wsRUFBRSxhQUFhLEVBQUUsSUFBSSxjQUFjLDRCQUE0QixnQkFBZ0IsTUFBTSxTQUFTLGlCQUFpQixXQUFXLFdBQVcsWUFBWSxJQUFJLEtBQUssdUNBQXVDLE9BQU8sWUFBWSwrQkFBK0IsU0FBUyxZQUFZLCtCQUErQixTQUFTLElBQUksU0FBUyxZQUFZLG1DQUFtQyxTQUFTLDhCQUE4Qix1Q0FBdUMsaUJBQWlCLGtCQUFrQixVQUFVLGdCQUFnQixrQkFBa0IsMEJBQTBCLGlCQUFpQixrQkFBa0IsdUNBQXVDLEtBQUssc0RBQXNELGtCQUFrQixxREFBcUQsU0FBUyxjQUFjLGlDQUFpQyxrRUFBa0UsS0FBSyxjQUFjLFFBQVEsU0FBUyxLQUFLLG9CQUFvQixNQUFNLFFBQVEsbUNBQW1DLGdCQUFnQixTQUFTLGdCQUFnQiwyR0FBMkcsY0FBYyxZQUFZLG1CQUFtQiw0Q0FBNEMsWUFBWSxLQUFLLEtBQUssYUFBYSxZQUFZLEtBQUsscUJBQXFCLFNBQVMsR0FBRyxjQUFjLHFDQUFxQyxhQUFhLHlDQUF5QyxTQUFTLHNHQUFzRyw2Q0FBNkMscUZBQXFGLDZFQUE2RSxhQUFhLHNDQUFzQyxnQ0FBZ0MsYUFBYSxhQUFhLGtCQUFrQix5Q0FBeUMsa0NBQWtDLGNBQWMsMkJBQTJCLGFBQWEsNkZBQTZGLFNBQVMsUUFBUSwrQkFBK0Isd0NBQXdDLFFBQVEsRUFBRSxNQUFNLEdBQUcseUdBQXlHLFNBQVMsY0FBYyx5SEFBeUgsY0FBYyxzRUFBc0Usb0JBQW9CLFlBQVksc05BQXNOLDhHQUE4RyxZQUFZLDJKQUEySixzSEFBc0gsU0FBUyxhQUFhLHNMQUFzTCxrQkFBa0IsT0FBTyxrREFBa0QsYUFBYSxpQ0FBaUMsa0JBQWtCLGdCQUFnQix1QkFBdUIsV0FBVyw4RUFBOEUsa0NBQWtDLFdBQVcsNkJBQTZCLFNBQVMsa0JBQWtCLGNBQWMsbUJBQW1CLGVBQWUsV0FBVyxpQ0FBaUMsOEJBQThCLFNBQVMsZ0JBQWdCLDJCQUEyQixJQUFJLGNBQWMsU0FBUyxvQkFBb0Isd0RBQXdELEtBQUssNklBQTZJLG9DQUFvQyx3Q0FBd0MsSUFBSSwrQ0FBK0MsNkJBQTZCLFNBQVMsaUJBQWlCLCtKQUErSixLQUFLLG9CQUFvQixnTEFBZ0wseUNBQXlDLDZJQUE2SSxpQ0FBaUMsd0NBQXdDLGVBQWUsOEJBQThCLGlCQUFpQixtQkFBbUIseUJBQXlCLGlDQUFpQyxvQ0FBb0Msb0JBQW9CLE1BQU0sTUFBTSxtREFBbUQsOERBQThELG9CQUFvQixXQUFXLHVCQUF1QixvQ0FBb0MsS0FBSyx3QkFBd0IsUUFBUSxJQUFJLG1CQUFtQixTQUFTLHVDQUF1QyxzQkFBc0Isa0ZBQWtGLHNCQUFzQixnQ0FBZ0Msd0NBQXdDLCtDQUErQyxxREFBcUQsMENBQTBDLGNBQWMsOENBQThDLGlDQUFpQyw2SkFBNkosOEJBQThCLHNCQUFzQixLQUFLLG9DQUFvQyxvQkFBb0IsTUFBTSxtQkFBbUIsOEJBQThCLEtBQUssYUFBYSxnQkFBZ0IsUUFBUSw4RkFBOEYsWUFBWSx1RkFBdUYsVUFBVSx5Q0FBeUMsME1BQTBNLHlCQUF5Qix1QkFBdUIsUUFBUSxXQUFXLDREQUE0RCwyR0FBMkcsdURBQXVELG9DQUFvQyxLQUFLLGdDQUFnQyxZQUFZLG1DQUFtQyxvQkFBb0Isc0NBQXNDLG9CQUFvQiwrQkFBK0Isd0VBQXdFLCtEQUErRCwrQ0FBK0MsYUFBYSwyQkFBMkIscUVBQXFFLG1DQUFtQyxJQUFJLDBCQUEwQiw4QkFBOEIsSUFBSSwwQkFBMEIsZUFBZSxLQUFLLG1DQUFtQyxzQkFBc0IsaUNBQWlDLCtCQUErQiw0SEFBNEgsbVJBQW1SLEtBQUssK0JBQStCLGtCQUFrQixJQUFJLCtCQUErQixpQkFBaUIscUJBQXFCLE1BQU0sc0JBQXNCLDQzQkFBNDNCLHlEQUF5RCw4QkFBOEIsNlNBQTZTLGtEQUFrRCwrQ0FBK0Msc0dBQXNHLGlDQUFpQyxNQUFNLGFBQWEsT0FBTyxnekJBQWd6QixFQUFFLGt2QkFBa3ZCLEVBQUUsc1lBQXNZLHNKQUFzSixVQUFVLDRKQUE0SixRQUFRLHNFQUFzRSx1UkFBdVIsSUFBSSxvRkFBb0YsV0FBVyxzSEFBc0gsbUJBQW1CLGlCQUFpQix3QkFBd0IsNkJBQTZCLGtDQUFrQyx1Q0FBdUMsb0JBQW9CLHFCQUFxQixrQ0FBa0MsTUFBTSxFQUFFLFdBQVcsY0FBYyxTQUFTLGlCQUFpQixrQ0FBa0Msd0JBQXdCLEVBQUUsU0FBUyxpQkFBaUIsNkJBQTZCLHNCQUFzQixFQUFFLFNBQVMsaUJBQWlCLGtDQUFrQyxNQUFNLDBCQUEwQixTQUFTLGlCQUFpQiwyQ0FBMkMsTUFBTSxFQUFFLFdBQVcscUJBQXFCLFNBQVMsaUJBQWlCLDBDQUEwQyxtQkFBbUIsa0NBQWtDLE1BQU0sdUJBQXVCLFNBQVMsaUJBQWlCLDZDQUE2QyxNQUFNLGtCQUFrQixTQUFTLGlCQUFpQixtQ0FBbUMsTUFBTSxhQUFhLFNBQVMscUJBQXFCLDhCQUE4QixxQkFBcUIsTUFBTSxpQkFBaUIsU0FBUyxxQkFBcUIseUJBQXlCLHFCQUFxQixJQUFJLGlCQUFpQixTQUFTLGlCQUFpQixrQ0FBa0MsTUFBTSx5QkFBeUIsU0FBUyxvQkFBb0IsbUJBQW1CLE1BQU0sNEJBQTRCLDBCQUEwQixLQUFLLHFCQUFxQixnQ0FBZ0MsWUFBWSx5QkFBeUIsU0FBUyxtQkFBbUIsNEJBQTRCLHlCQUF5QixNQUFNLHNCQUFzQixTQUFTLG1CQUFtQixxQkFBcUIseUJBQXlCLE1BQU0sdUJBQXVCLFNBQVMsZUFBZSxZQUFZLGlCQUFpQix5QkFBeUIscUJBQXFCLGVBQWUsbUJBQW1CLHVCQUF1QixlQUFlLG1CQUFtQix1QkFBdUIsdUJBQXVCLDRCQUE0Qix3QkFBd0IsS0FBSyxpQkFBaUIsMEJBQTBCLE1BQU0sRUFBRSxjQUFjLHVCQUF1QixTQUFTLGlCQUFpQix3QkFBd0IsTUFBTSxXQUFXLFNBQVMsZUFBZSw2Q0FBNkMsZUFBZSxtQkFBbUIsYUFBYSxpQkFBaUIseUJBQXlCLFlBQVksR0FBRyxpQkFBaUIsZ0JBQWdCLGlCQUFpQix3QkFBd0IsdUJBQXVCLEVBQUUsU0FBUyxpQkFBaUIsbUJBQW1CLHFCQUFxQixFQUFFLFNBQVMsV0FBVyw4bkNBQThuQyxTQUFTLFVBQVUsV0FBVyxXQUFXLGFBQWEsWUFBWSxFQUFFLEVBQUUsZUFBZSxpQkFBaUIsZUFBZSxrQkFBa0IsZUFBZSx5QkFBeUIsZ0NBQWdDLGFBQWEsS0FBSyxpQkFBaUIsbUJBQW1CLGdCQUFnQixpQkFBaUIsaUNBQWlDLE1BQU0sRUFBRSxXQUFXLGdDQUFnQyxTQUFTLGVBQWUseUJBQXlCLDhCQUE4QixTQUFTLEtBQUssZUFBZSx5QkFBeUIseUJBQXlCLFdBQVcsS0FBSyxTQUFTLFVBQVUsZUFBZSx5QkFBeUIsdUJBQXVCLGdCQUFnQixtQkFBbUIsSUFBSSxlQUFlLG1CQUFtQiwwQkFBMEIsRUFBRSxTQUFTLFdBQVcsTUFBTSxXQUFXLFdBQVcsYUFBYSxZQUFZLE1BQU0sbUJBQW1CLGt2QkFBa3ZCLElBQUksOEJBQThCLFdBQVcsTUFBTSxJQUFJLFdBQVcsZ2NBQWdjLCtHQUErRyxlQUFlLHNDQUFzQyw0QkFBNEIseUNBQXlDLGlCQUFpQixrQkFBa0IsY0FBYyxtQkFBbUIsbUJBQW1CLG1CQUFtQixjQUFjLFlBQVksd0JBQXdCLEdBQUcsZUFBZSxpQkFBaUIsNkZBQTZGLGVBQWUsd0lBQXdJLGVBQWUsOEJBQThCLGlCQUFpQixNQUFNLEVBQUUsV0FBVyxxQkFBcUIsZUFBZSw4QkFBOEIsaUJBQWlCLE1BQU0sRUFBRSxXQUFXLHFCQUFxQixlQUFlLDhCQUE4QixpQkFBaUIsTUFBTSxFQUFFLFdBQVcscUJBQXFCLGVBQWUsOEJBQThCLHlCQUF5QixNQUFNLGdCQUFnQixlQUFlLDhCQUE4QixpQkFBaUIsaUJBQWlCLDJHQUEyRywwSkFBMEosU0FBUyxlQUFlLGVBQWUsd0JBQXdCLGlCQUFpQixrQ0FBa0MsZUFBZSxpQkFBaUIsbUJBQW1CLGtEQUFrRCxtQkFBbUIsV0FBVyxrREFBa0QsaUJBQWlCLG1CQUFtQixJQUFJLDJCQUEyQixTQUFTLHFCQUFxQiw2QkFBNkIsY0FBYyxLQUFLLGlCQUFpQix3QkFBd0IsbUJBQW1CLDJCQUEyQixrREFBa0QsU0FBUyxpQkFBaUIseUNBQXlDLE1BQU0scUJBQXFCLFNBQVMsbUJBQW1CLHlEQUF5RCx5QkFBeUIsd0JBQXdCLDJDQUEyQyxtQkFBbUIsWUFBWSxNQUFNLGlCQUFpQixzQ0FBc0MseUZBQXlGLHNCQUFzQixLQUFLLHlCQUF5Qix3QkFBd0Isc0JBQXNCLFlBQVksaUNBQWlDLHFCQUFxQixpQkFBaUIsd0JBQXdCLHFCQUFxQixxQkFBcUIsWUFBWSxLQUFLLHdCQUF3QixrQkFBa0Isc0JBQXNCLFVBQVUsb0JBQW9CLCtCQUErQiw0QkFBNEIsOEJBQThCLHNEQUFzRCxNQUFNLDhFQUE4RSxvQkFBb0IsOEJBQThCLDBCQUEwQiw2Q0FBNkMsaUNBQWlDLElBQUksb0JBQW9CLHdDQUF3QyxTQUFTLGNBQWMsZUFBZSxjQUFjLHdDQUF3Qyx1QkFBdUIsbUNBQW1DLHlCQUF5QixHQUFHLGlDQUFpQyw4QkFBOEIsc0NBQXNDLEtBQUssbUJBQW1CLGVBQWUsb0JBQW9CLFlBQVksSUFBSSxFQUFFLHlCQUF5QixvQ0FBb0MsU0FBUyxtQkFBbUIsd0NBQXdDLHNCQUFzQixhQUFhLEtBQUsscUJBQXFCLDhDQUE4QyxlQUFlLHdFQUF3RSxPQUFPLE1BQU0sRUFBRSw0QkFBNEIsMkJBQTJCLFlBQVksSUFBSSx3QkFBd0IsVUFBVSx5QkFBeUIsU0FBUyxxQkFBcUIsdURBQXVELE1BQU0seU1BQXlNLDRCQUE0QixhQUFhLGlDQUFpQywyQ0FBMkMsMEJBQTBCLDhCQUE4QixvQkFBb0IsT0FBTyxXQUFXLGlCQUFpQiwyQkFBMkIsOEJBQThCLG9CQUFvQixnQ0FBZ0MsZ0NBQWdDLG9CQUFvQiwwREFBMEQsK0JBQStCLDZCQUE2QixpQ0FBaUMsOEJBQThCLG1FQUFtRSw4QkFBOEIsOEJBQThCLHFCQUFxQiw4QkFBOEIsOEJBQThCLGdDQUFnQyw4QkFBOEIsc0RBQXNELCtCQUErQiwyQkFBMkIsMkNBQTJDLGlDQUFpQywyQkFBMkIsMEJBQTBCLDhCQUE4Qix5QkFBeUIsOEJBQThCLHlCQUF5QixnQ0FBZ0MsMEJBQTBCLGdEQUFnRCxnREFBZ0QsbUNBQW1DLDhCQUE4Qiw0QkFBNEIsK0JBQStCLGlDQUFpQyxpQ0FBaUMsa0NBQWtDLDBCQUEwQiw4QkFBOEIsNEJBQTRCLDhCQUE4Qiw0QkFBNEIsZ0NBQWdDLG9CQUFvQixvQkFBb0IsaUJBQWlCLGtFQUFrRSwwQkFBMEIseUNBQXlDLDJCQUEyQixpQkFBaUIsU0FBUyw2QkFBNkIsb0JBQW9CLEtBQUssbUJBQW1CLHdCQUF3QixNQUFNLEVBQUUsa0JBQWtCLG9EQUFvRCxTQUFTLGlCQUFpQixTQUFTLDZCQUE2QixvQkFBb0IsS0FBSyx1QkFBdUIsb0JBQW9CLHdCQUF3QixNQUFNLEVBQUUsV0FBVyx5REFBeUQsU0FBUyxzQkFBc0IsaUJBQWlCLHFCQUFxQixpQkFBaUIscUJBQXFCLGlCQUFpQix5QkFBeUIsZ0JBQWdCLEdBQUcsaUJBQWlCLGlDQUFpQyxhQUFhLGlCQUFpQixtQkFBbUIsbUJBQW1CLFdBQVcsMEJBQTBCLGVBQWUsc0ZBQXNGLDRCQUE0QixJQUFJLFFBQVEsU0FBUyxVQUFVLGlCQUFpQixxQ0FBcUMsZ0JBQWdCLGtCQUFrQixJQUFJLGlCQUFpQixXQUFXLGlCQUFpQiw2QkFBNkIsaUJBQWlCLDJCQUEyQixtQkFBbUIsaUVBQWlFLElBQUksRUFBRSxXQUFXLDBGQUEwRixPQUFPLGdCQUFnQixPQUFPLGtCQUFrQixFQUFFLHNCQUFzQix5Q0FBeUMsUUFBUSxJQUFJLEVBQUUsV0FBVyx1Q0FBdUMsd0JBQXdCLFNBQVMsbUJBQW1CLCtDQUErQywyQkFBMkIsZUFBZSx1QkFBdUIsdUJBQXVCLGlGQUFpRix1RkFBdUYsYUFBYSxtQkFBbUIsVUFBVSwrRUFBK0UsVUFBVSwwRUFBMEUsc0JBQXNCLG9FQUFvRSxzQ0FBc0MsbURBQW1ELDZCQUE2QixnQkFBZ0IsaUJBQWlCLHlDQUF5QyxlQUFlLGlCQUFpQixnQkFBZ0IsNEJBQTRCLHFCQUFxQiwyQ0FBMkMsU0FBUyxnQkFBZ0IsV0FBVyxnRUFBZ0UsU0FBUyxvQ0FBb0MsbUNBQW1DLGdEQUFnRCw2QkFBNkIsZ0NBQWdDLFlBQVksSUFBSSxFQUFFLFdBQVcscUNBQXFDLDBCQUEwQiwwQkFBMEIsU0FBUyxzQkFBc0IsWUFBWSxNQUFNLEVBQUUsdUJBQXVCLDJDQUEyQyxtQ0FBbUMsS0FBSyxNQUFNLHdCQUF3QixVQUFVLG9DQUFvQyxxSUFBcUksaUNBQWlDLGVBQWUsZ0JBQWdCLHFCQUFxQix3QkFBd0Isb0JBQW9CLFlBQVksSUFBSSxFQUFFLFdBQVcsK0NBQStDLEtBQUssTUFBTSxFQUFFLGdDQUFnQyxZQUFZLDZCQUE2QixLQUFLLGFBQWEsMEJBQTBCLHNDQUFzQyxTQUFTLGVBQWUsOERBQThELE1BQU0sZUFBZSwyRkFBMkYsZUFBZSx1QkFBdUIsU0FBUyw2REFBNkQsU0FBUyxpQkFBaUIsV0FBVyxpQkFBaUIsZ0NBQWdDLDZCQUE2QixnQkFBZ0IsS0FBSyxlQUFlLFlBQVksNERBQTRELHlCQUF5QixpQkFBaUIsNENBQTRDLGNBQWMsdUNBQXVDLHVCQUF1QiwyQkFBMkIsZ0RBQWdELG1DQUFtQyxlQUFlLEtBQUssb0NBQW9DLE1BQU0sd0NBQXdDLGdKQUFnSixvREFBb0QsaUJBQWlCLEtBQUssa0NBQWtDLHdCQUF3QixNQUFNLGlCQUFpQixlQUFlLG9DQUFvQyxtQkFBbUIsNkJBQTZCLHlCQUF5QixpQ0FBaUMsR0FBRyxRQUFRLFNBQVMsaUJBQWlCLDRCQUE0Qix3QkFBd0IsWUFBWSxHQUFHLE9BQU8sOEJBQThCLEdBQUcscUJBQXFCLGVBQWUsY0FBYyxJQUFJLGlCQUFpQixTQUFTLGtCQUFrQix1QkFBdUIsNkRBQTZELE1BQU0sRUFBRSxvQkFBb0IseUNBQXlDLHVCQUF1QixRQUFRLEdBQUcsbUJBQW1CLDZCQUE2QixNQUFNLEVBQUUscUJBQXFCLHdCQUF3QixTQUFTLHFCQUFxQixrQ0FBa0Msd0NBQXdDLE1BQU0sK0JBQStCLGtCQUFrQixzQ0FBc0MsU0FBUyxpQkFBaUIsNkJBQTZCLElBQUksRUFBRSxXQUFXLGdCQUFnQixRQUFRLDhCQUE4QixTQUFTLGlCQUFpQiwwQkFBMEIsaUJBQWlCLFNBQVMseUJBQXlCLEdBQUcsZ0NBQWdDLFNBQVMsU0FBUyxpQkFBaUIsMkJBQTJCLGVBQWUsaUJBQWlCLGlCQUFpQixZQUFZLDhCQUE4QixxQkFBcUIsbUJBQW1CLDRDQUE0QyxlQUFlLEVBQUUsbUJBQW1CLGdFQUFnRSxTQUFTLFdBQVcsaURBQWlELEVBQUUsaUJBQWlCLFNBQVMsd0JBQXdCLHFCQUFxQix3QkFBd0Isd0JBQXdCLHNEQUFzRCxFQUFFLElBQUksZUFBZSxpQkFBaUIsbUJBQW1CLG9CQUFvQixpRUFBaUUsZUFBZSxNQUFNLGFBQWEsU0FBUyxpQkFBaUIsTUFBTSw2QkFBNkIsb0JBQW9CLE9BQU8sbUJBQW1CLDZCQUE2Qiw0Q0FBNEMsS0FBSyxJQUFJLEVBQUUscUJBQXFCLHlDQUF5QyxTQUFTLG9CQUFvQixxQkFBcUIsNkJBQTZCLGtCQUFrQixpREFBaUQsSUFBSSxFQUFFLDhEQUE4RCxnQkFBZ0IsNEVBQTRFLFlBQVksd0JBQXdCLGlCQUFpQixpQ0FBaUMsTUFBTSxFQUFFLHNCQUFzQixpQkFBaUIsUUFBUSxrQkFBa0IsU0FBUyxlQUFlLHNDQUFzQyxlQUFlLCtCQUErQiw0QkFBNEIsaUNBQWlDLFdBQVcsK0JBQStCLG1CQUFtQix1Q0FBdUMsZUFBZSxnQkFBZ0IsbUJBQW1CLGtCQUFrQixtQkFBbUIsY0FBYyxPQUFPLE1BQU0sRUFBRSxzQkFBc0IsMkJBQTJCLG1CQUFtQixJQUFJLHdCQUF3Qix1QkFBdUIsNENBQTRDLFNBQVMsaUJBQWlCLHNEQUFzRCxxQkFBcUIsNEJBQTRCLHFCQUFxQiw0QkFBNEIsMkJBQTJCLEVBQUUsaURBQWlELGlCQUFpQixRQUFRLDBEQUEwRCw4Q0FBOEMsS0FBSyxtQkFBbUIsZUFBZSw0QkFBNEIsb0JBQW9CLE1BQU0scUJBQXFCLE1BQU0sbUNBQW1DLHVCQUF1QixtQkFBbUIsd0NBQXdDLE1BQU0sRUFBRSxpQkFBaUIsWUFBWSxTQUFTLGVBQWUsa0JBQWtCLGVBQWUsZ0NBQWdDLGlCQUFpQixxQ0FBcUMsVUFBVSxtQkFBbUIsZUFBZSx3Q0FBd0MsdUJBQXVCLDJCQUEyQixpQkFBaUIsc0JBQXNCLCtDQUErQyxtQkFBbUIsZUFBZSxzQ0FBc0Msa0NBQWtDLGlCQUFpQiw4QkFBOEIsa0RBQWtELGlCQUFpQixVQUFVLHdFQUF3RSxpRUFBaUUsaUVBQWlFLFNBQVMscUJBQXFCLDZFQUE2RSxNQUFNLFdBQVcsS0FBSyxNQUFNLDBCQUEwQixLQUFLLElBQUksZUFBZSxTQUFTLHFCQUFxQixrRkFBa0YsTUFBTSxXQUFXLFlBQVksTUFBTSxhQUFhLEtBQUssTUFBTSw4QkFBOEIsU0FBUyxpQkFBaUIsb0JBQW9CLGdCQUFnQixNQUFNLFdBQVcsU0FBUyxxQkFBcUIsU0FBUyxRQUFRLEVBQUUsd0JBQXdCLE1BQU0sRUFBRSxvQ0FBb0Msc0NBQXNDLFNBQVMsaUJBQWlCLHFCQUFxQiw2QkFBNkIseUJBQXlCLGVBQWUseUJBQXlCLGdEQUFnRCw2RkFBNkYsTUFBTSxFQUFFLFdBQVcsY0FBYyxTQUFTLEdBQUcsaUJBQWlCLHFCQUFxQixvQkFBb0Isd0JBQXdCLG9DQUFvQyxnQ0FBZ0MsRUFBRSxVQUFVLGVBQWUsdUJBQXVCLHVDQUF1QyxJQUFJLEVBQUUsaUJBQWlCLDBCQUEwQixVQUFVLGVBQWUsbUJBQW1CLCtFQUErRSxpQkFBaUIsZUFBZSxtQkFBbUIsMENBQTBDLGVBQWUsa0JBQWtCLGdCQUFnQixpQkFBaUIsb0JBQW9CLDBCQUEwQiwrQkFBK0Isb0NBQW9DLHlDQUF5Qyw4Q0FBOEMsbURBQW1ELHdEQUF3RCxxQ0FBcUMsa0JBQWtCLGVBQWUsdUJBQXVCLFlBQVksV0FBVyxjQUFjLHNCQUFzQixvQkFBb0IsZUFBZSwyQkFBMkIsZUFBZSx1QkFBdUIsdUNBQXVDLG1CQUFtQixJQUFJLEVBQUUsV0FBVyx3Q0FBd0MsK0NBQStDLFlBQVksTUFBTSxFQUFFLHdDQUF3Qyw4R0FBOEcsa0JBQWtCLHVCQUF1QixtREFBbUQscUNBQXFDLE1BQU0scUJBQXFCLFVBQVUsR0FBRyxpQ0FBaUMsaURBQWlELG9CQUFvQixzQ0FBc0MsSUFBSSxtQkFBbUIsaUNBQWlDLHVCQUF1QixJQUFJLGVBQWUsU0FBUyxNQUFNLHNEQUFzRCxjQUFjLDhDQUE4QywwQkFBMEIsb0NBQW9DLDRDQUE0QyxJQUFJLEVBQUUsV0FBVyxvQkFBb0IsU0FBUyw4R0FBOEcsaUJBQWlCLHFCQUFxQix5QkFBeUIsNkJBQTZCLGNBQWMsS0FBSyxZQUFZLEdBQUcsaUJBQWlCLHFCQUFxQixNQUFNLHlCQUF5Qix1QkFBdUIsa0JBQWtCLG9GQUFvRixVQUFVLGVBQWUsdUJBQXVCLHdDQUF3QyxXQUFXLHdCQUF3QixpQkFBaUIsR0FBRyxHQUFHLEdBQUcsaUJBQWlCLGlDQUFpQywwQkFBMEIsd0JBQXdCLGlEQUFpRCxlQUFlLHVCQUF1QixtR0FBbUcsNkNBQTZDLElBQUksbUJBQW1CLFNBQVMsZ0NBQWdDLGVBQWUscUJBQXFCLHdFQUF3RSxpQ0FBaUMsVUFBVSxvQ0FBb0MsMkRBQTJELGdEQUFnRCxlQUFlLFlBQVkscUJBQXFCLCtDQUErQyw2QkFBNkIseUVBQXlFLGFBQWEsaURBQWlELGlCQUFpQixJQUFJLGVBQWUsbUJBQW1CLFlBQVksbUNBQW1DLHlCQUF5Qiw4QkFBOEIsYUFBYSxLQUFLLGtCQUFrQix5QkFBeUIsZUFBZSxHQUFHLFVBQVUsNkJBQTZCLFVBQVUsNENBQTRDLG1CQUFtQixpRkFBaUYsWUFBWSxNQUFNLHdDQUF3QyxvQkFBb0IsK0dBQStHLG1CQUFtQiw0QkFBNEIsV0FBVyxNQUFNLFdBQVcsNkNBQTZDLHNLQUFzSyw0SUFBNEksWUFBWSxvQkFBb0IsOENBQThDLElBQUksbUJBQW1CLDJDQUEyQyxnSEFBZ0gsOERBQThELGtCQUFrQixvQkFBb0Isa0dBQWtHLE1BQU0sV0FBVyxLQUFLLElBQUksdUJBQXVCLHlCQUF5QixVQUFVLDJCQUEyQixrQkFBa0Isb0JBQW9CLDBFQUEwRSxRQUFRLDhCQUE4QixxQkFBcUIsNkNBQTZDLHlCQUF5QiwrREFBK0QsZUFBZSxpQkFBaUIseUJBQXlCLGdDQUFnQyw0QkFBNEIsMEJBQTBCLDBCQUEwQiw2QkFBNkIsMEJBQTBCLE1BQU0sRUFBRSxrQkFBa0IsMkNBQTJDLFVBQVUsY0FBYyxLQUFLLE1BQU0sTUFBTSx3QkFBd0Isb0RBQW9ELElBQUksS0FBSyxPQUFPLDhCQUE4QixLQUFLLE9BQU8saUNBQWlDLGVBQWUsMkJBQTJCLGVBQWUsbUJBQW1CLGVBQWUsbUJBQW1CLHNCQUFzQixpQkFBaUIsSUFBSSxlQUFlLHVEQUF1RCxJQUFJLEVBQUUsb0JBQW9CLCtCQUErQixTQUFTLGVBQWUsbURBQW1ELGNBQWMsc0JBQXNCLHFFQUFxRSxpQkFBaUIscUJBQXFCLCtJQUErSSxlQUFlLDJCQUEyQixJQUFJLEVBQUUsa0JBQWtCLGlCQUFpQixTQUFTLGlCQUFpQixvQkFBb0Isc0JBQXNCLE1BQU0saUJBQWlCLHNCQUFzQixpREFBaUQsb0JBQW9CLElBQUksc0JBQXNCLGFBQWEsRUFBRSxxQkFBcUIsU0FBUyxVQUFVLG1CQUFtQix1Q0FBdUMsTUFBTSxFQUFFLGVBQWUsOEJBQThCLE9BQU8sNEVBQTRFLGVBQWUsZ0RBQWdELFdBQVcsZUFBZSxzQ0FBc0MsaUJBQWlCLGVBQWUsbUZBQW1GLG1CQUFtQixtQkFBbUIsZUFBZSw0RUFBNEUsaUJBQWlCLGtCQUFrQixlQUFlLDZHQUE2RyxlQUFlLG9CQUFvQix1REFBdUQsa0JBQWtCLFlBQVksb0JBQW9CLDJJQUEySSxnREFBZ0QsZUFBZSxpQkFBaUIsaUJBQWlCLGlCQUFpQixpQkFBaUIsaUJBQWlCLFNBQVMsRUFBRSxnQkFBZ0IsZUFBZSx1QkFBdUIsbURBQW1ELGVBQWUsb0JBQW9CLGlCQUFpQixtQkFBbUIsK0NBQStDLG1CQUFtQiw2Q0FBNkMsbURBQW1ELE1BQU0sYUFBYSxLQUFLLGlCQUFpQixNQUFNLFdBQVcsK0JBQStCLGlCQUFpQixxQ0FBcUMsaUJBQWlCLDRFQUE0RSxtQ0FBbUMsMEJBQTBCLFdBQVcsbUJBQW1CLFdBQVcsMEJBQTBCLGVBQWUsZUFBZSxVQUFVLHFFQUFxRSxpQ0FBaUMsaUJBQWlCLHlCQUF5QixnQkFBZ0IsNEJBQTRCLFlBQVksYUFBYSxrQkFBa0IsMkJBQTJCLFNBQVMsZUFBZSxZQUFZLGtCQUFrQixzQkFBc0IsWUFBWSxnQ0FBZ0MsU0FBUyw2QkFBNkIsaUJBQWlCLDBCQUEwQixnQkFBZ0IsTUFBTSxFQUFFLHFCQUFxQixpQkFBaUIsb0JBQW9CLG1CQUFtQixzQkFBc0IsU0FBUyx3RUFBd0Usa0NBQWtDLEtBQUssZUFBZSxpQ0FBaUMsYUFBYSxTQUFTLEdBQUcsZUFBZSxzQ0FBc0MsV0FBVywrQkFBK0IsZUFBZSxZQUFZLElBQUksa0JBQWtCLFVBQVUsSUFBSSxZQUFZLFdBQVcsU0FBUyxlQUFlLG9DQUFvQyx3Q0FBd0MsMkZBQTJGLHlCQUF5QixvQ0FBb0Msd0JBQXdCLFlBQVkseURBQXlELHdCQUF3QixZQUFZLHFEQUFxRCxHQUFHLG1CQUFtQix5QkFBeUIsZUFBZSxzQkFBc0IsMENBQTBDLG1CQUFtQix5QkFBeUIsZUFBZSxVQUFVLHFFQUFxRSxlQUFlLG9DQUFvQyxlQUFlLDBCQUEwQix1QkFBdUIsZUFBZSxzQ0FBc0Msc0JBQXNCLHVCQUF1QixvRUFBb0Usc0JBQXNCLHVCQUF1QiwrRUFBK0UsR0FBRyxlQUFlLHlCQUF5QixrQkFBa0IsY0FBYyxpQkFBaUIsMENBQTBDLHlCQUF5QixtQ0FBbUMsOEJBQThCLG9CQUFvQixlQUFlLEdBQUcsZUFBZSw0QkFBNEIsdUJBQXVCLHlCQUF5QixzQkFBc0IsWUFBWSw4Q0FBOEMsc0JBQXNCLFlBQVksd0RBQXdELEdBQUcsZUFBZSwwQkFBMEIsUUFBUSwyQkFBMkIsb0NBQW9DLHFCQUFxQixtQkFBbUIsR0FBRyxpQkFBaUIsMEJBQTBCLFlBQVksbUNBQW1DLGlCQUFpQixHQUFHLHlCQUF5Qix3QkFBd0Isc0JBQXNCLG9CQUFvQixzQkFBc0IsWUFBWSx5Q0FBeUMsc0JBQXNCLFlBQVksbURBQW1ELGdDQUFnQyw4QkFBOEIsb0RBQW9ELEdBQUcsZUFBZSxZQUFZLHdCQUF3QixpQkFBaUIsWUFBWSx1QkFBdUIsMkRBQTJELGdCQUFnQiwyR0FBMkcsMkJBQTJCLDZDQUE2QyxpQ0FBaUMsaUJBQWlCLDBCQUEwQiw4QkFBOEIsdUJBQXVCLGlCQUFpQiwrQkFBK0IsaUJBQWlCLCtCQUErQiwyQkFBMkIsc0NBQXNDLDBCQUEwQix1REFBdUQseUJBQXlCLDZCQUE2QixLQUFLLDBCQUEwQixVQUFVLEdBQUcsaUJBQWlCLCtCQUErQiwyQkFBMkIsaUJBQWlCLGNBQWMsY0FBYyx3QkFBd0Isb0JBQW9CLGVBQWUsc0ZBQXNGLHFCQUFxQixzQkFBc0IsbUJBQW1CLHlEQUF5RCxpQkFBaUIsTUFBTSx3Q0FBd0MsMEJBQTBCLHdEQUF3RCwyQkFBMkIsUUFBUSxhQUFhLG1CQUFtQixLQUFLLHFCQUFxQiwwQkFBMEIsUUFBUSxhQUFhLG1CQUFtQixLQUFLLHFCQUFxQixHQUFHLG1CQUFtQixtQ0FBbUMsd0NBQXdDLGNBQWMsWUFBWSxnQ0FBZ0MsY0FBYyxVQUFVLG1DQUFtQyxhQUFhLFdBQVcsb0JBQW9CLG1CQUFtQixjQUFjLHlCQUF5QixLQUFLLGNBQWMsK0JBQStCLGFBQWEsa0JBQWtCLDZCQUE2Qiw0QkFBNEIsOEJBQThCLElBQUksaUNBQWlDLDRCQUE0QiwwSUFBMEksMkJBQTJCLG9CQUFvQix1QkFBdUIsR0FBRyx5QkFBeUIsaUJBQWlCLDBCQUEwQix3QkFBd0IsR0FBRyxpQkFBaUIsdUVBQXVFLGlCQUFpQixtREFBbUQsNEJBQTRCLHNCQUFzQixnQ0FBZ0MsbUNBQW1DLGVBQWUsd0NBQXdDLGtCQUFrQixnQkFBZ0IsaUJBQWlCLDJCQUEyQixnQ0FBZ0MscUNBQXFDLDBDQUEwQyx3QkFBd0IsWUFBWSx5QkFBeUIsOEVBQThFLHVCQUF1Qiw4QkFBOEIsTUFBTSwyQkFBMkIsb0JBQW9CLEdBQUcsd0JBQXdCLG1CQUFtQixxQkFBcUIsd0JBQXdCLG1CQUFtQixzQkFBc0Isd0JBQXdCLHlCQUF5QixHQUFHLGlCQUFpQix5QkFBeUIsbUNBQW1DLFlBQVksb0JBQW9CLGlCQUFpQixtQkFBbUIsd0RBQXdELHVDQUF1Qyx3QkFBd0IsZUFBZSxxQ0FBcUMsZUFBZSxvQkFBb0IsdUNBQXVDLHdCQUF3QixlQUFlLG1CQUFtQixZQUFZLHFHQUFxRyxlQUFlLG1CQUFtQixZQUFZLG9FQUFvRSxlQUFlLG1DQUFtQyxlQUFlLDZDQUE2QyxlQUFlLGVBQWUsNkNBQTZDLGVBQWUsbUNBQW1DLDZCQUE2Qix3QkFBd0IsZUFBZSwwQ0FBMEMsZUFBZSw2QkFBNkIsWUFBWSxxQkFBcUIsOENBQThDLDJEQUEyRCw2QkFBNkIsdUJBQXVCLDBCQUEwQix3QkFBd0IsZUFBZSxrREFBa0QsZUFBZSwwQ0FBMEMsNkJBQTZCLHdDQUF3QyxnQ0FBZ0MsWUFBWSxHQUFHLGVBQWUsZUFBZSxrQ0FBa0MsZ0NBQWdDLGVBQWUsbUJBQW1CLGlCQUFpQixTQUFTLFVBQVUsWUFBWSw4QkFBOEIsZUFBZSxxRkFBcUYsZUFBZSxrQkFBa0Isc0JBQXNCLGVBQWUseUJBQXlCLGVBQWUsK0JBQStCLGtCQUFrQixVQUFVLGlEQUFpRCxlQUFlLHdDQUF3QyxRQUFRLGlCQUFpQiwwREFBMEQsZUFBZSxtQkFBbUIsZUFBZSx3QkFBd0IseUJBQXlCLDhCQUE4QiwrQ0FBK0Msd0JBQXdCLGNBQWMsNEJBQTRCLGdCQUFnQiw0QkFBNEIsZ0JBQWdCLGtDQUFrQyxRQUFRLGlDQUFpQyw4QkFBOEIsTUFBTSx3Q0FBd0MsTUFBTSxFQUFFLGtCQUFrQixpREFBaUQsU0FBUyxzQkFBc0IsK0JBQStCLEdBQUcsbUJBQW1CLHdCQUF3QixpQkFBaUIsaUJBQWlCLDJCQUEyQiwyQkFBMkIsOERBQThELGlDQUFpQywwRkFBMEYsZ0JBQWdCLGVBQWUseUJBQXlCLGVBQWUsa0NBQWtDLDZCQUE2QixTQUFTLHdDQUF3QyxTQUFTLElBQUksaUJBQWlCLCtEQUErRCxTQUFTLElBQUksMkJBQTJCLFVBQVUsNEJBQTRCLFlBQVksd0JBQXdCLFNBQVMsb0JBQW9CLFNBQVMsb0JBQW9CLHFDQUFxQyxtQ0FBbUMsbUJBQW1CLElBQUksWUFBWSxTQUFTLHdCQUF3QixpQkFBaUIsZUFBZSw2QkFBNkIsZUFBZSxHQUFHLE1BQU0sR0FBRyxpQkFBaUIsb0JBQW9CLDRCQUE0QixVQUFVLEdBQUcscUNBQXFDLGlCQUFpQixHQUFHLHdCQUF3QixlQUFlLDhCQUE4QiwyQkFBMkIsdUNBQXVDLEdBQUcsZUFBZSwrQkFBK0IsZUFBZSxpREFBaUQsMkJBQTJCLG9DQUFvQywwQkFBMEIsb0NBQW9DLCtDQUErQyxvQ0FBb0MsMEJBQTBCLDBCQUEwQiwwQkFBMEIsb0NBQW9DLHdCQUF3QixtQkFBbUIseUNBQXlDLGtCQUFrQixnQkFBZ0IsdUJBQXVCLGdCQUFnQix1QkFBdUIsbUJBQW1CLHlCQUF5QixJQUFJLGlCQUFpQixTQUFTLDBCQUEwQix3QkFBd0IseUJBQXlCLDJCQUEyQixLQUFLLEdBQUcsZUFBZSxrQkFBa0IsVUFBVSxzQkFBc0IsZUFBZSxTQUFTLGVBQWUsMENBQTBDLHlCQUF5QixtQkFBbUIsa0JBQWtCLHdCQUF3QixtQkFBbUIsa0JBQWtCLEdBQUcsbUJBQW1CLHNCQUFzQixzRUFBc0UsOENBQThDLHlCQUF5QixXQUFXLHFDQUFxQyxxQkFBcUIsU0FBUywwQkFBMEIsaURBQWlELGdDQUFnQyxrQkFBa0IsK0NBQStDLEVBQUUsS0FBSyxlQUFlLGtDQUFrQyxlQUFlLG1DQUFtQyxtQkFBbUIsZ0JBQWdCLElBQUksc0JBQXNCLGNBQWMsU0FBUyxjQUFjLFNBQVMsNEJBQTRCLFdBQVcsd0NBQXdDLFdBQVcseUNBQXlDLFdBQVcseUNBQXlDLFdBQVcsS0FBSyw4QkFBOEIsd0NBQXdDLDBCQUEwQix5Q0FBeUMsZ0tBQWdLLDhCQUE4QixtQkFBbUIsbUJBQW1CLHNDQUFzQyxvQ0FBb0MseUJBQXlCLG9CQUFvQiw2QkFBNkIsSUFBSSxxQkFBcUIsU0FBUyx3QkFBd0IsMkNBQTJDLE1BQU0sRUFBRSxXQUFXLGNBQWMsU0FBUyxzQkFBc0IsdUJBQXVCLGVBQWUsb0NBQW9DLElBQUkscUJBQXFCLG1DQUFtQyxxQkFBcUIsZ0NBQWdDLDZCQUE2QiwyQ0FBMkMscUJBQXFCLHNCQUFzQixhQUFhLE1BQU0sRUFBRSxXQUFXLDJDQUEyQyxHQUFHLHlCQUF5QixtQkFBbUIsWUFBWSxtQkFBbUIsa0JBQWtCLFVBQVUsc0RBQXNELFlBQVkseUJBQXlCLDRCQUE0QixnQ0FBZ0MscUNBQXFDLGlDQUFpQyxpQ0FBaUMscUNBQXFDLDJKQUEySix5QkFBeUIsK0NBQStDLDhCQUE4Qix5QkFBeUIscURBQXFELGlDQUFpQywwQ0FBMEMsNEJBQTRCLHVDQUF1QywyQkFBMkIseUJBQXlCLHdFQUF3RSxlQUFlLCtFQUErRSxJQUFJLFVBQVUsU0FBUyxjQUFjLHlCQUF5QiwrQkFBK0IsMEJBQTBCLHFCQUFxQiw4QkFBOEIscUJBQXFCLGlDQUFpQyxxQ0FBcUMsMENBQTBDLG9DQUFvQywrQkFBK0Isa0RBQWtELHFCQUFxQixpQkFBaUIscURBQXFELHVDQUF1QyxNQUFNLEVBQUUsV0FBVyxhQUFhLFNBQVMsMEJBQTBCLDhCQUE4Qiw0QkFBNEIsOEJBQThCLHNDQUFzQyx1Q0FBdUMsa01BQWtNLFNBQVMsdUNBQXVDLGlCQUFpQixLQUFLLDRCQUE0QixTQUFTLHVDQUF1QyxpQkFBaUIsS0FBSyx3QkFBd0IsbUJBQW1CLGtDQUFrQyxxQkFBcUIsc0hBQXNILCtCQUErQixlQUFlLEdBQUcsb0NBQW9DLHVCQUF1QixxQkFBcUIsZUFBZSw4QkFBOEIsd0ZBQXdGLDRLQUE0SyxtQkFBbUIsMEJBQTBCLHVEQUF1RCxrREFBa0QsZ0NBQWdDLDhDQUE4QywrRUFBK0UsbUNBQW1DLHlCQUF5QixTQUFTLDBCQUEwQix5QkFBeUIsY0FBYyxNQUFNLEVBQUUsV0FBVyxnQ0FBZ0MsaUJBQWlCLHVCQUF1Qix3Q0FBd0MsNkJBQTZCLDZDQUE2Qyx3REFBd0Qsd0JBQXdCLDJCQUEyQiw4QkFBOEIsd0RBQXdELHdCQUF3Qix1QkFBdUIsMEJBQTBCLHlCQUF5Qix1R0FBdUcsd0NBQXdDLDRCQUE0QiwrQkFBK0Isb0NBQW9DLDBCQUEwQixxS0FBcUsseUJBQXlCLHdDQUF3QywrQ0FBK0MsdUJBQXVCLCtCQUErQixHQUFHLHFCQUFxQix5QkFBeUIsc0JBQXNCLHlCQUF5Qix5REFBeUQsOEJBQThCLHlCQUF5QixxREFBcUQsaUNBQWlDLDBDQUEwQyw0QkFBNEIsb0NBQW9DLHNCQUFzQixjQUFjLDZCQUE2QixjQUFjLHdDQUF3QyxzRkFBc0YsK0JBQStCLEVBQUUsOEVBQThFLDhDQUE4QyxrREFBa0QsOEJBQThCLHNCQUFzQix1QkFBdUIseUNBQXlDLG1DQUFtQyxrQkFBa0IsS0FBSyxzQkFBc0IsZUFBZSwrREFBK0QsNEJBQTRCLHlCQUF5QixvQ0FBb0MsMkJBQTJCLDJEQUEyRCx3QkFBd0Isd0JBQXdCLHVEQUF1RCwrQkFBK0IsaUNBQWlDLDREQUE0RCxzQ0FBc0MsOEJBQThCLGlEQUFpRCxtQkFBbUIsMEVBQTBFLDBCQUEwQixnQ0FBZ0MsMEJBQTBCLGtMQUFrTCw4RkFBOEYsc0JBQXNCLGVBQWUsMEJBQTBCLGVBQWUsZ0NBQWdDLDBDQUEwQyw0QkFBNEIsMENBQTBDLDZCQUE2Qiw4QkFBOEIseUNBQXlDLHlCQUF5QiwwQ0FBMEMsZ0JBQWdCLHlDQUF5Qyx3Q0FBd0MsZ0NBQWdDLDZDQUE2Qyw2QkFBNkIsbURBQW1ELDBCQUEwQixrQkFBa0Isd0NBQXdDLHFEQUFxRCx3QkFBd0IsaUVBQWlFLHdCQUF3QixxRUFBcUUsa0NBQWtDLDZCQUE2QixrQ0FBa0MseUJBQXlCLHdCQUF3Qiw4QkFBOEIsd0JBQXdCLG1EQUFtRCwyQkFBMkIscUVBQXFFLGdDQUFnQyxlQUFlLDBFQUEwRSw0QkFBNEIseUJBQXlCLGVBQWUsc0JBQXNCLG9DQUFvQyw0QkFBNEIsdURBQXVELDZCQUE2QixjQUFjLHFJQUFxSSxzQ0FBc0Msc0RBQXNELHFDQUFxQyx3QkFBd0Isb0JBQW9CLHdHQUF3RyxZQUFZLDRCQUE0Qiw2QkFBNkIsd0NBQXdDLFNBQVMsMEJBQTBCLGVBQWUsZ0NBQWdDLDRDQUE0Qyw2QkFBNkIsdUNBQXVDLGdDQUFnQyxzRkFBc0YsNEJBQTRCLGdDQUFnQyxrREFBa0Qsc0JBQXNCLG9CQUFvQix5QkFBeUIseUZBQXlGLGFBQWEsc0JBQXNCLGVBQWUsdUJBQXVCLGdCQUFnQixrSEFBa0gseUNBQXlDLHlGQUF5RixhQUFhLDBCQUEwQix1QkFBdUIsMEJBQTBCLHdDQUF3Qyx1QkFBdUIsK0JBQStCLDJEQUEyRCx5QkFBeUIsZUFBZSxRQUFRLHVFQUF1RSxjQUFjLElBQUksc0JBQXNCLFNBQVMsc0JBQXNCLHdFQUF3RSxpQ0FBaUMsd0JBQXdCLHNDQUFzQyxxQkFBcUIsZ0JBQWdCLHlCQUF5QixxQkFBcUIsb0JBQW9CLGlDQUFpQyx3QkFBd0Isc0NBQXNDLDBEQUEwRCxTQUFTLDBCQUEwQixTQUFTLHdCQUF3QixTQUFTLHFDQUFxQyxpQ0FBaUMsMEJBQTBCLG1DQUFtQyw2Q0FBNkMsUUFBUSx3QkFBd0IscUJBQXFCLGNBQWMsaUNBQWlDLDJCQUEyQixRQUFRLHdCQUF3Qiw0QkFBNEIsNkJBQTZCLFFBQVEsd0JBQXdCLDRCQUE0Qiw2QkFBNkIsOERBQThELDJCQUEyQixrTEFBa0wsUUFBUSxRQUFRLGdCQUFnQixXQUFXLG1EQUFtRCxlQUFlLDJCQUEyQix1Q0FBdUMsMkJBQTJCLGdDQUFnQyx1Q0FBdUMsMkJBQTJCLDJCQUEyQixpREFBaUQsdUJBQXVCLDJCQUEyQix5Q0FBeUMsMkJBQTJCLDhCQUE4QixpQkFBaUIsTUFBTSxFQUFFLDRCQUE0QixxQ0FBcUMsU0FBUyxxREFBcUQsdUJBQXVCLHFCQUFxQixvQkFBb0IscUNBQXFDLFlBQVksc0NBQXNDLHlDQUF5QyxrQkFBa0Isd0NBQXdDLDhCQUE4QixlQUFlLGtDQUFrQyx1QkFBdUIsZ0NBQWdDLHlCQUF5QixNQUFNLGNBQWMsNEJBQTRCLFNBQVMsa0NBQWtDLGtCQUFrQixzQ0FBc0MsMEJBQTBCLG9DQUFvQyxzQkFBc0IsbUJBQW1CLHVCQUF1QixTQUFTLCtDQUErQyxpRkFBaUYsbUNBQW1DLDhCQUE4Qix3QkFBd0IsbUNBQW1DLDZCQUE2QiwwQkFBMEIsbUNBQW1DLFNBQVMsZUFBZSxnVEFBZ1QsbUNBQW1DLGtHQUFrRyxRQUFRLHFGQUFxRixTQUFTLElBQUksd0NBQXdDLE1BQU0saUZBQWlGLG9CQUFvQixVQUFVLElBQUksc0RBQXNELGdDQUFnQywyQkFBMkIsRUFBRSxvRkFBb0YscUJBQXFCLGdDQUFnQyxNQUFNLHFCQUFxQixFQUFFLHFCQUFxQixzQ0FBc0MsR0FBRyw0QkFBNEIsU0FBUyx3QkFBd0IsNkJBQTZCLGtCQUFrQixhQUFhLGtCQUFrQixNQUFNLE1BQU0sU0FBUyxzRUFBc0UsMkJBQTJCLDZDQUE2QyxpREFBaUQsdUNBQXVDLDJCQUEyQix5QkFBeUIsc0NBQXNDLDJCQUEyQixvQkFBb0Isd0NBQXdDLDRCQUE0QixtREFBbUQsMkJBQTJCLFlBQVksc0NBQXNDLDhCQUE4QixpREFBaUQsMkJBQTJCLFlBQVksa0NBQWtDLDJCQUEyQixpQkFBaUIsVUFBVSxvQ0FBb0MsZ0VBQWdFLHVCQUF1QixVQUFVLFlBQVksV0FBVyxpQkFBaUIsY0FBYyxnQkFBZ0Isd0NBQXdDLG9CQUFvQiw2QkFBNkIseUJBQXlCLFVBQVUsZ0VBQWdFLFlBQVksZUFBZSx3QkFBd0IsK0JBQStCLHVCQUF1Qix1QkFBdUIsV0FBVyx5QkFBeUIsNkNBQTZDLHlCQUF5QixXQUFXLGVBQWUscUZBQXFGLHNCQUFzQixtQ0FBbUMsUUFBUSxTQUFTLHdHQUF3RyxxQkFBcUIscUNBQXFDLDRCQUE0QixzQkFBc0Isc0RBQXNELDhFQUE4RSw2Q0FBNkMsSUFBSSxxQ0FBcUMsdUNBQXVDLGtEQUFrRCx1QkFBdUIsNEJBQTRCLG1CQUFtQiw2QkFBNkIsd0JBQXdCLHNDQUFzQyxxQ0FBcUMsNEJBQTRCLDJCQUEyQiw4QkFBOEIsd0NBQXdDLDRCQUE0QiwyQkFBMkIsa0RBQWtELG1DQUFtQyx1QkFBdUIsK0JBQStCLDZCQUE2QixtQ0FBbUMsOEJBQThCLDBDQUEwQyw4REFBOEQsaUJBQWlCLEdBQUcsbUNBQW1DLDhCQUE4QixrQ0FBa0MsUUFBUSxXQUFXLDBJQUEwSSx5Q0FBeUMsNkNBQTZDLGlDQUFpQyxvQkFBb0IsZ0NBQWdDLDRJQUE0SSwrQkFBK0IsMkZBQTJGLDRCQUE0QixvQkFBb0Isa0RBQWtELGlFQUFpRSxVQUFVLG1CQUFtQixtQkFBbUIsMkJBQTJCLDJCQUEyQixjQUFjLDBFQUEwRSxFQUFFLG9FQUFvRSx5RkFBeUYsMkJBQTJCLGdCQUFnQix1QkFBdUIsbUJBQW1CLDZCQUE2Qiw0QkFBNEIsNkJBQTZCLElBQUksa0NBQWtDLFlBQVksTUFBTSxnQkFBZ0Isc0NBQXNDLGNBQWMsR0FBRyxzQkFBc0Isc0JBQXNCLGdDQUFnQywrQkFBK0IsNk1BQTZNLGlDQUFpQyxzQkFBc0IsbUJBQW1CLCtCQUErQixpQ0FBaUMsU0FBUywrQkFBK0IsNkZBQTZGLHdCQUF3QixNQUFNLEVBQUUsb0JBQW9CLGVBQWUsZ0JBQWdCLE1BQU0scUJBQXFCLE1BQU0sdUJBQXVCLE1BQU0sNkJBQTZCLE9BQU8sZUFBZSxzSEFBc0gsb0RBQW9ELFNBQVMsT0FBTyxTQUFTLEVBQUUsdUJBQXVCLE1BQU0sRUFBRSx3Q0FBd0MsWUFBWSxZQUFZLG1CQUFtQixTQUFTLFNBQVMsU0FBUyxrREFBa0QsZ0JBQWdCLGdDQUFnQywyQ0FBMkMsOEJBQThCLHdEQUF3RCw2Q0FBNkMsT0FBTyxvREFBb0QsZ0NBQWdDLGlCQUFpQixnQkFBZ0IsRUFBRSxZQUFZLG1EQUFtRCxRQUFRLGdCQUFnQix5QkFBeUIsaUNBQWlDLHVCQUF1QixvQkFBb0IsUUFBUSxtRkFBbUYsNEJBQTRCLDJCQUEyQixxQkFBcUIsd0VBQXdFLDZDQUE2Qyx1RUFBdUUsWUFBWSxLQUFLLEdBQUcsc0JBQXNCLFVBQVUsbUNBQW1DLFlBQVksZUFBZSxRQUFRLHVCQUF1Qiw2QkFBNkIsMEdBQTBHLHdDQUF3Qyx5Q0FBeUMsZ0NBQWdDLGlDQUFpQyxpQ0FBaUMsaUlBQWlJLHdDQUF3Qyw0REFBNEQsa0NBQWtDLHdLQUF3SyxrQ0FBa0MsZ0tBQWdLLHFCQUFxQixnSEFBZ0gsb0NBQW9DLDBEQUEwRCx1Q0FBdUMsZ0RBQWdELGdDQUFnQyxTQUFTLHNCQUFzQixpREFBaUQsc0RBQXNELHVFQUF1RSw4QkFBOEIsNEZBQTRGLDJFQUEyRSxTQUFTLGVBQWUsZ0ZBQWdGLG9CQUFvQixzQkFBc0Isc0JBQXNCLDJJQUEySSwrQkFBK0IsK0ZBQStGLCtJQUErSSwyRkFBMkYsV0FBVyw2Q0FBNkMsU0FBUyxlQUFlLGlCQUFpQixjQUFjLHVDQUF1QyxxQ0FBcUMsdUVBQXVFLHdDQUF3Qyx1S0FBdUssb0VBQW9FLGVBQWUsYUFBYSxJQUFJLHdCQUF3QixTQUFTLHdCQUF3Qix3RUFBd0UsY0FBYyxnQkFBZ0IsS0FBSyx3Q0FBd0MsK0JBQStCLE1BQU0sSUFBSSxnRUFBZ0UsU0FBUyx3QkFBd0IsK0JBQStCLFlBQVksR0FBRyxLQUFLLCtCQUErQixZQUFZLEdBQUcsc0NBQXNDLCtDQUErQyxxQ0FBcUMsRUFBRSxvQ0FBb0MsTUFBTSxJQUFJLHlGQUF5RixTQUFTLDhCQUE4QixjQUFjLEdBQUcsR0FBRyxHQUFHLG9CQUFvQixTQUFTLGVBQWUsaUJBQWlCLGNBQWMseUNBQXlDLHlFQUF5RSxrQkFBa0IsSUFBSSwrREFBK0QsU0FBUyx3QkFBd0IseUZBQXlGLGVBQWUsYUFBYSxJQUFJLDBCQUEwQixTQUFTLHdCQUF3Qix3RUFBd0UsY0FBYyxnQkFBZ0IsS0FBSyx3Q0FBd0MsK0JBQStCLE1BQU0sSUFBSSxrRUFBa0UsU0FBUyx3QkFBd0IsK0JBQStCLFlBQVksR0FBRyxLQUFLLCtCQUErQixZQUFZLEdBQUcsd0NBQXdDLGlEQUFpRCxxQ0FBcUMsRUFBRSxvQ0FBb0MsTUFBTSxJQUFJLDJGQUEyRixTQUFTLDhCQUE4QixjQUFjLEdBQUcsR0FBRyxHQUFHLHNCQUFzQixTQUFTLGVBQWUsTUFBTSxhQUFhLGdDQUFnQywwREFBMEQsT0FBTyxvSEFBb0gsZUFBZSxhQUFhLCtIQUErSCw4RUFBOEUseUVBQXlFLG1DQUFtQyxPQUFPLHNIQUFzSCxlQUFlLGFBQWEsK0hBQStILDhFQUE4RSx1Q0FBdUMsMEhBQTBILGFBQWEsdUJBQXVCLGFBQWEsSUFBSSxxQkFBcUIsZ0NBQWdDLEVBQUUsU0FBUyw4QkFBOEIseURBQXlELEtBQUssSUFBSSx3RUFBd0Usc0lBQXNJLDhCQUE4QixlQUFlLElBQUksdUJBQXVCLDhEQUE4RCxFQUFFLFNBQVMsOEJBQThCLHlEQUF5RCxLQUFLLElBQUksMEVBQTBFLHVJQUF1SSw4Q0FBOEMsNkVBQTZFLElBQUkseUNBQXlDLDJCQUEyQixxQ0FBcUMsNENBQTRDLHdDQUF3QyxxREFBcUQsaUVBQWlFLHdCQUF3QixvRUFBb0UsK0JBQStCLGdDQUFnQyxTQUFTLGVBQWUsaUJBQWlCLGtCQUFrQixvREFBb0QsbUNBQW1DLDRDQUE0Qyw0Q0FBNEMsMERBQTBELCtCQUErQix1Q0FBdUMsR0FBRyxHQUFHLGlCQUFpQixTQUFTLGVBQWUsYUFBYSxtQ0FBbUMsS0FBSyxJQUFJLGVBQWUsZ0NBQWdDLEtBQUssSUFBSSxVQUFVLHlDQUF5QyxnQkFBZ0IsV0FBVyxjQUFjLFNBQVMsMENBQTBDLHNIQUFzSCx5QkFBeUIsSUFBSSxnQkFBZ0IsV0FBVyx1Q0FBdUMsaUNBQWlDLGtCQUFrQixpQ0FBaUMsb0JBQW9CLFdBQVcsdUJBQXVCLHdDQUF3QyxXQUFXLEtBQUssV0FBVyx1QkFBdUIsU0FBUyxnQ0FBZ0MsaUJBQWlCLFdBQVcsRUFBRSw2QkFBNkIsK0JBQStCLFVBQVUsK0JBQStCLEdBQUcsU0FBUyxlQUFlLGFBQWEsMENBQTBDLDhFQUE4RSxrQ0FBa0MsMkNBQTJDLHlEQUF5RCxtREFBbUQsdUNBQXVDLElBQUksY0FBYyxTQUFTLGtDQUFrQyxvR0FBb0csMkNBQTJDLElBQUksY0FBYyxVQUFVLGlDQUFpQyxHQUFHLFNBQVMsZUFBZSxhQUFhLHFDQUFxQyxrQkFBa0IsMEJBQTBCLGtDQUFrQyxvREFBb0QsNkRBQTZELCtDQUErQyw4RkFBOEYscUNBQXFDLDRGQUE0RixpSEFBaUgsdUNBQXVDLFVBQVUseUJBQXlCLHdEQUF3RCxzQ0FBc0Msa0RBQWtELGdFQUFnRSx5RkFBeUYsdUNBQXVDLG1GQUFtRixVQUFVLGdGQUFnRixvS0FBb0ssU0FBUyw0SUFBNEkseUJBQXlCLHdKQUF3SiwrQkFBK0Isc0tBQXNLLHNDQUFzQyx3R0FBd0cseUNBQXlDLFVBQVUsb0NBQW9DLHlCQUF5Qix1S0FBdUssMkNBQTJDLDRGQUE0Riw2Q0FBNkMsR0FBRyxTQUFTLGVBQWUsTUFBTSxhQUFhLFdBQVcsK0JBQStCLDRCQUE0QixrQ0FBa0MsaUJBQWlCLGdCQUFnQixXQUFXLEtBQUssV0FBVyxJQUFJLGVBQWUsU0FBUyx3RUFBd0UsWUFBWSxvQ0FBb0MsZ0NBQWdDLFdBQVcsSUFBSSxvSEFBb0gscURBQXFELCtDQUErQyxnQkFBZ0IsbUVBQW1FLGdDQUFnQywyRUFBMkUseUJBQXlCLDZCQUE2QixXQUFXLGNBQWMsK0JBQStCLGtCQUFrQiw4QkFBOEIsV0FBVyxNQUFNLHlCQUF5QiwrQkFBK0Isa0NBQWtDLDhCQUE4QixTQUFTLGVBQWUsYUFBYSx5QkFBeUIscUJBQXFCLHdCQUF3QiwyREFBMkQsa0VBQWtFLGlCQUFpQiwyRUFBMkUsb0NBQW9DLFVBQVUsaUNBQWlDLEdBQUcsU0FBUyxlQUFlLHdDQUF3Qyx5Q0FBeUMsNENBQTRDLGlCQUFpQixJQUFJLEtBQUssYUFBYSxHQUFHLHVDQUF1QywwQkFBMEIsMENBQTBDLFVBQVUsU0FBUyxlQUFlLGlCQUFpQixjQUFjLHlKQUF5Siw4Q0FBOEMsNkhBQTZILHlDQUF5Qyx1QkFBdUIsSUFBSSw4QkFBOEIsc0NBQXNDLHVCQUF1QixJQUFJLHlDQUF5Qyx5Q0FBeUMsbUNBQW1DLEtBQUssK0dBQStHLHFGQUFxRix3Q0FBd0MsMERBQTBELGtEQUFrRCxnUEFBZ1AsR0FBRyxHQUFHLGtCQUFrQixTQUFTLGVBQWUsaUJBQWlCLGFBQWEsZUFBZSxzQ0FBc0MsZ0NBQWdDLHVDQUF1Qyx1Q0FBdUMsaURBQWlELDRCQUE0Qix3QkFBd0IseUNBQXlDLG1CQUFtQiwwRUFBMEUsbUNBQW1DLDJCQUEyQixxRkFBcUYsc0NBQXNDLHdDQUF3Qyw0Q0FBNEMsZ0VBQWdFLFFBQVEsOEJBQThCLDJDQUEyQyxXQUFXLG1DQUFtQyxrREFBa0QsdUNBQXVDLHdDQUF3QywrQkFBK0IsdURBQXVELG1DQUFtQyw4QkFBOEIsNEJBQTRCLDRDQUE0QyxrQkFBa0IsK0JBQStCLDRCQUE0QixHQUFHLEdBQUcsVUFBVSxTQUFTLGVBQWUsaUJBQWlCLGNBQWMsNFdBQTRXLDZDQUE2QyxrRkFBa0YsdUhBQXVILDJDQUEyQyw0Q0FBNEMsMkZBQTJGLHVFQUF1RSxnQkFBZ0IsSUFBSSxLQUFLLGlCQUFpQiwyREFBMkQsS0FBSyxzQ0FBc0MsT0FBTyxpQ0FBaUMsMEVBQTBFLHlCQUF5QixxQ0FBcUMsNENBQTRDLCtEQUErRCw0Q0FBNEMsNEZBQTRGLHVCQUF1QixxQ0FBcUMsV0FBVyxLQUFLLG1FQUFtRSx1SkFBdUosZ0NBQWdDLEtBQUssb0NBQW9DLGVBQWUsTUFBTSx5Q0FBeUMsK0NBQStDLG1CQUFtQixvQkFBb0IsTUFBTSxpREFBaUQseUlBQXlJLDhDQUE4Qyx3SUFBd0ksdUNBQXVDLGlEQUFpRCx5REFBeUQseURBQXlELDhGQUE4RixxSUFBcUksR0FBRyxHQUFHLGVBQWUsU0FBUyxlQUFlLGlCQUFpQixjQUFjLDBKQUEwSixrREFBa0QsaUVBQWlFLCtCQUErQixpSEFBaUgsS0FBSyxzSUFBc0ksVUFBVSx5UUFBeVEsb0RBQW9ELDJEQUEyRCxZQUFZLG9IQUFvSCxnQ0FBZ0MseUNBQXlDLG9GQUFvRixZQUFZLFdBQVcsTUFBTSxhQUFhLDhLQUE4SywwREFBMEQsV0FBVyxNQUFNLFdBQVcsVUFBVSx3REFBd0Qsa0RBQWtELHlEQUF5RCxNQUFNLDZCQUE2QixrR0FBa0csMkNBQTJDLGlGQUFpRiw2Q0FBNkMsZ0JBQWdCLDZCQUE2QixpQ0FBaUMsU0FBUyxHQUFHLEdBQUcsOEJBQThCLFNBQVMsZUFBZSxpQkFBaUIsY0FBYyx3REFBd0Qsa0RBQWtELHNCQUFzQiwwSkFBMEoseURBQXlELHNCQUFzQiw0RUFBNEUsMkNBQTJDLDREQUE0RCw2Q0FBNkMsZ0JBQWdCLHNCQUFzQiwwREFBMEQsU0FBUyxHQUFHLEdBQUcsOEJBQThCLFNBQVMsZUFBZSxpQkFBaUIsYUFBYSxzREFBc0QsdURBQXVELDRGQUE0Rix5Q0FBeUMsOEhBQThILCtGQUErRixJQUFJLEtBQUssV0FBVyxhQUFhLFlBQVkseUJBQXlCLHdDQUF3QyxNQUFNLG9DQUFvQyxLQUFLLG9CQUFvQiwrQ0FBK0Msb0NBQW9DLElBQUksNkNBQTZDLHdCQUF3Qix3SkFBd0osb0NBQW9DLHVLQUF1SywrREFBK0QsbUVBQW1FLDhEQUE4RCx5SkFBeUosWUFBWSxvQ0FBb0MsbURBQW1ELGtDQUFrQyxTQUFTLGtGQUFrRixZQUFZLCtCQUErQixLQUFLLCtDQUErQyx1TEFBdUwsR0FBRyxHQUFHLGlCQUFpQixTQUFTLGVBQWUsYUFBYSxhQUFhLG1yQkFBbXJCLHFCQUFxQixzSEFBc0gsc0JBQXNCLDJIQUEySCw4QkFBOEIsK0NBQStDLG1EQUFtRCxJQUFJLDBiQUEwYiwyQkFBMkIsOEJBQThCLDRDQUE0QyxpQkFBaUIsbUVBQW1FLDhEQUE4RCwyQkFBMkIsSUFBSSxNQUFNLG1HQUFtRyxnREFBZ0QsOEVBQThFLHVCQUF1QixHQUFHLDJCQUEyQixHQUFHLFNBQVMsZUFBZSxhQUFhLGFBQWEscUJBQXFCLHdGQUF3Rix5QkFBeUIscURBQXFELElBQUksTUFBTSxNQUFNLHlKQUF5Six1REFBdUQsc0JBQXNCLHFGQUFxRixrQ0FBa0MsdURBQXVELDBCQUEwQixhQUFhLFdBQVcsS0FBSyxzQkFBc0IsMEZBQTBGLHdCQUF3QixtQ0FBbUMsR0FBRywyQkFBMkIsR0FBRyxTQUFTLGVBQWUsYUFBYSxhQUFhLGlDQUFpQyxzQkFBc0IsNkJBQTZCLHdCQUF3Qix5REFBeUQsbUxBQW1MLDhCQUE4QiwwQ0FBMEMsb0ZBQW9GLDZHQUE2Ryw2QkFBNkIsR0FBRywyQkFBMkIsR0FBRyxTQUFTLGVBQWUsYUFBYSxhQUFhLHdnREFBd2dELHFCQUFxQixpQkFBaUIsV0FBVyxvQkFBb0Isb0JBQW9CLHFDQUFxQyxHQUFHLDJCQUEyQixHQUFHLFNBQVMsZUFBZSxhQUFhLGFBQWEscUJBQXFCLG1EQUFtRCxzQkFBc0IseURBQXlELGlEQUFpRCxHQUFHLDJCQUEyQixHQUFHLFNBQVMsZUFBZSxhQUFhLGFBQWEsUUFBUSxxQkFBcUIsbU1BQW1NLHNCQUFzQixpTEFBaUwsOEJBQThCLDRDQUE0QyxrQ0FBa0MsZ0JBQWdCLFdBQVcsS0FBSyx3Q0FBd0MsbUJBQW1CLGlEQUFpRCx1RUFBdUUsS0FBSyxzSEFBc0gsZ0ZBQWdGLHVCQUF1QixnQ0FBZ0MsOENBQThDLHlCQUF5QiwwQ0FBMEMsSUFBSSxFQUFFLDRCQUE0QixrQkFBa0IsMkdBQTJHLDJCQUEyQixtQkFBbUIsMkdBQTJHLDJDQUEyQyxLQUFLLDRHQUE0RywyR0FBMkcsMERBQTBELHFCQUFxQiwyQkFBMkIsMkRBQTJELHVHQUF1RyxtQkFBbUIsR0FBRywyQkFBMkIsR0FBRyxTQUFTLGVBQWUseUJBQXlCLG9CQUFvQiw0RUFBNEUsNkRBQTZELDBCQUEwQiwyQ0FBMkMsSUFBSSwwQ0FBMEMscUVBQXFFLDRCQUE0QixvQkFBb0IsOEVBQThFLDBCQUEwQixrREFBa0QsSUFBSSw2R0FBNkcsdUVBQXVFLGlDQUFpQyxNQUFNLHdCQUF3QixFQUFFLElBQUkseURBQXlELFNBQVMsd0JBQXdCLDBCQUEwQiwyRUFBMkUsbUNBQW1DLGlJQUFpSSxHQUFHLG1DQUFtQywyQkFBMkIsV0FBVywwQkFBMEIsa0ZBQWtGLElBQUksbURBQW1ELHlDQUF5Qyx1SUFBdUksR0FBRyxrRkFBa0Ysc0NBQXNDLG1EQUFtRCx3Q0FBd0MsdURBQXVELDBCQUEwQixpQ0FBaUMsMEJBQTBCLGlDQUFpQyw0QkFBNEIsbUNBQW1DLDRCQUE0QixtQ0FBbUMsa0NBQWtDLHlDQUF5QyxrQ0FBa0MseUNBQXlDLHlDQUF5QyxnREFBZ0QseUNBQXlDLGlEQUFpRCxTQUFTLEdBQUcsZUFBZSxNQUFNLHFCQUFxQixTQUFTLHdEQUF3RCxpQkFBaUIsdUJBQXVCLEdBQUcsdUNBQXVDLFlBQVksOEVBQThFLHVGQUF1RiwrQ0FBK0Msa0RBQWtELGlEQUFpRCxrQkFBa0Isd0JBQXdCLGVBQWUsR0FBRyxNQUFNLG1CQUFtQixlQUFlLElBQUksb0dBQW9HLGVBQWUsTUFBTSw4RUFBOEUsU0FBUyxTQUFTLFNBQVMsVUFBVSxRQUFRLGdCQUFnQixjQUFjLDRDQUE0QyxRQUFRLFNBQVMsa0JBQWtCLHFFQUFxRSxXQUFXLFNBQVMsdUJBQXVCLHlEQUF5RCxRQUFRLDBCQUEwQix1QkFBdUIseUZBQXlGLFFBQVEsdUNBQXVDLFFBQVEsNEJBQTRCLDRCQUE0QixLQUFLLGtCQUFrQixhQUFhLFNBQVMsVUFBVSxxQ0FBcUMsNkJBQTZCLG9CQUFvQixLQUFLLEVBQUUseUNBQXlDLFNBQVMsYUFBYSx1QkFBdUIsZUFBZSxxQkFBcUIsbUNBQW1DLHlFQUF5RSxRQUFRLHNCQUFzQixPQUFPLG9CQUFvQixFQUFFLHNCQUFzQixjQUFjLHlCQUF5QixHQUFHLGVBQWUsa0JBQWtCLGlIQUFpSCxNQUFNLHFCQUFxQix5QkFBeUIsd0JBQXdCLGNBQWMsNkJBQTZCLG9CQUFvQixHQUFHLGVBQWUsa0JBQWtCLHVKQUF1SixNQUFNLDJCQUEyQix5QkFBeUIsd0JBQXdCLGdEQUFnRCxlQUFlLDhCQUE4QixJQUFJLGVBQWUsTUFBTSxXQUFXLGtCQUFrQixZQUFZLFNBQVMsaUhBQWlILFNBQVMsb0JBQW9CLDRDQUE0QyxnQkFBZ0IseUJBQXlCLHVDQUF1QyxvQ0FBb0MsZUFBZSxrRkFBa0YsbUJBQW1CLGtCQUFrQixZQUFZLFdBQVcseUJBQXlCLHFFQUFxRSxFQUFFLDRCQUE0Qiw0REFBNEQsRUFBRSw0QkFBNEIsY0FBYyxnQ0FBZ0MsVUFBVSwrQ0FBK0MsaURBQWlELFlBQVksZ0lBQWdJLEtBQUssaUNBQWlDLHFCQUFxQixzQkFBc0IsWUFBWSwwQkFBMEIsTUFBTSxVQUFVLFlBQVksR0FBRyxjQUFjLHdDQUF3QywrQkFBK0IsSUFBSSxzQ0FBc0MsT0FBTyxTQUFTLE1BQU0sNEJBQTRCLElBQUkscUNBQXFDLE9BQU8sU0FBUyxPQUFPLDBCQUEwQixVQUFVLE1BQU0sVUFBVSxZQUFZLEdBQUcseUNBQXlDLE1BQU0sVUFBVSxZQUFZLDBCQUEwQixhQUFhLHNCQUFzQixNQUFNLEVBQUUsaUJBQWlCLG1DQUFtQyx1QkFBdUIsY0FBYyx3Q0FBd0MseUJBQXlCLE1BQU0sS0FBSyxNQUFNLGVBQWUsZ0JBQWdCLHFCQUFxQiw4QkFBOEIsTUFBTSxTQUFTLGdDQUFnQyw2RUFBNkUsSUFBSSxlQUFlLGdCQUFnQiw0QkFBNEIsd0JBQXdCLGNBQWMsU0FBUyxTQUFTLFNBQVMsMERBQTBELDBDQUEwQyxrQkFBa0IsdUVBQXVFLGtCQUFrQixTQUFTLGNBQWMsWUFBWSxLQUFLLDRDQUE0QywwR0FBMEcsSUFBSSxzQkFBc0IsU0FBUyxNQUFNLGdCQUFnQixZQUFZLGNBQWMsNENBQTRDLDRHQUE0RyxnQkFBZ0IsNENBQTRDLG9IQUFvSCxrQkFBa0IsNENBQTRDLDBEQUEwRCw4SkFBOEosY0FBYyxTQUFTLGNBQWMsc0NBQXNDLEtBQUssbURBQW1ELGdHQUFnRyxJQUFJLGtCQUFrQixnQkFBZ0IsR0FBRyxTQUFTLGlCQUFpQixjQUFjLFVBQVUsY0FBYywrREFBK0QsY0FBYyxnQkFBZ0IsZ0JBQWdCLGtDQUFrQyxXQUFXLHdCQUF3QiwwQ0FBMEMsNENBQTRDLDhGQUE4Rix5QkFBeUIsaVBBQWlQLHVCQUF1Qix5REFBeUQsd0xBQXdMLGlCQUFpQixTQUFTLHNCQUFzQixrREFBa0Qsd1hBQXdYLG1CQUFtQixlQUFlLE1BQU0sOEZBQThGLFFBQVEsWUFBWSx3QkFBd0IsbUNBQW1DLHVCQUF1QixZQUFZLFdBQVcsS0FBSyxhQUFhLGlEQUFpRCxjQUFjLHdDQUF3QyxnV0FBZ1csUUFBUSxhQUFhLHdCQUF3QixJQUFJLGVBQWUsVUFBVSw0Q0FBNEMsd0JBQXdCLHlEQUF5RCxxQkFBcUIsc0RBQXNELGlCQUFpQixrREFBa0QsaUJBQWlCLGtEQUFrRCxtQkFBbUIsb0RBQW9ELGlCQUFpQixrREFBa0QsZ0JBQWdCLGlEQUFpRCxvQkFBb0IscURBQXFELFlBQVkscUJBQXFCLGdJQUFnSSxRQUFRLDhHQUE4RywwQkFBMEIsd0RBQXdELHFCQUFxQixnREFBZ0Qsb0JBQW9CLGtDQUFrQyxlQUFlLHlCQUF5Qix5SEFBeUgsaUJBQWlCLG9CQUFvQixtREFBbUQsU0FBUyxZQUFZLDJCQUEyQix3QkFBd0Isb0VBQW9FLHNCQUFzQixhQUFhLFNBQVMsdURBQXVELHdCQUF3QixRQUFRLGtCQUFrQixlQUFlLDRTQUE0UyxjQUFjLGtHQUFrRyxnQ0FBZ0MsY0FBYyxVQUFVLDhCQUE4QixnQkFBZ0IsZ0lBQWdJLGVBQWUsb0JBQW9CLDRCQUE0QixxQkFBcUIsc0JBQXNCLFlBQVksMEJBQTBCLE1BQU0sVUFBVSxZQUFZLDZCQUE2QixNQUFNLFVBQVUsWUFBWSxpQkFBaUIsb0JBQW9CLCtCQUErQixNQUFNLFVBQVUsWUFBWSwwQkFBMEIsYUFBYSxzQkFBc0IsTUFBTSxFQUFFLGlCQUFpQixtQ0FBbUMsc0JBQXNCLDJCQUEyQiw4RUFBOEUsR0FBRywwQkFBMEIsaUJBQWlCLGtCQUFrQixXQUFXLEVBQUUsa0JBQWtCLFdBQVcsRUFBRSxrQkFBa0Isd0JBQXdCLEVBQUUseUJBQXlCLE1BQU0sa0NBQWtDLGFBQWEsSUFBSSxvQkFBb0IsS0FBSywrQ0FBK0MsTUFBTSxFQUFFLFVBQVUsT0FBTyxNQUFNLG9CQUFvQixTQUFTLDBCQUEwQixpQ0FBaUMsZUFBZSxFQUFFLEVBQUUsb0JBQW9CLGVBQWUsSUFBSSxTQUFTLEVBQUUsT0FBTyxxQkFBcUIsVUFBVSxVQUFVLHFCQUFxQixFQUFFLFVBQVUsVUFBVSxVQUFVLGFBQWEsRUFBRSxjQUFjLGlCQUFpQixJQUFJLHNCQUFzQix3Q0FBd0MsRUFBRSw4QkFBOEIseUJBQXlCLE1BQU0sbUJBQW1CLHlDQUF5QyxPQUFPLE9BQU8sR0FBRyxnQkFBZ0IsMkNBQTJDLGFBQWEsSUFBSSwyQkFBMkIsU0FBUyxpQkFBaUIsR0FBRyxXQUFXLEVBQUUsNERBQTRELGtDQUFrQyxzQkFBc0IsMEJBQTBCLEVBQUUsc0dBQXNHLGtOQUFrTixFQUFFLDhCQUE4Qix5QkFBeUIsTUFBTSxrQkFBa0IsZ0NBQWdDLE9BQU8sT0FBTyxZQUFZLG1DQUFtQyxFQUFFLDBHQUEwRyxxQkFBcUIscUJBQXFCLGNBQWMsZ0JBQWdCLHFCQUFxQixTQUFTLG9EQUFvRCxJQUFJLHNCQUFzQixTQUFTLDRFQUE0RSxTQUFTLGlDQUFpQyxTQUFTLDZQQUE2UCxpQkFBaUIsa0JBQWtCLFFBQVEsbUpBQW1KLGFBQWEsc0JBQXNCLDRCQUE0QixzQkFBc0IsR0FBRyxnQ0FBZ0MsS0FBSyxVQUFVLGNBQWMscURBQXFELHdDQUF3QyxpQkFBaUIsbUNBQW1DLDZCQUE2QixRQUFRLDhFQUE4RSx5SUFBeUksaUJBQWlCLHlDQUF5QyxhQUFhLG1FQUFtRSxjQUFjLGFBQWEsa0VBQWtFLE9BQU8sYUFBYSxXQUFXLGFBQWEsS0FBSyxtQkFBbUIsaUlBQWlJLFFBQVEsS0FBSyxtQkFBbUIsNkNBQTZDLFVBQVUsUUFBUSxzQkFBc0IsYUFBYSwrQ0FBK0MsNGFBQTRhLGFBQWEseVVBQXlVLGlCQUFpQixhQUFhLFVBQVUsMkJBQTJCLHNCQUFzQixJQUFJLGtDQUFrQyxLQUFLLFVBQVUsY0FBYyxxREFBcUQseUNBQXlDLFNBQVMsNkNBQTZDLE1BQU0sU0FBUyxnSEFBZ0gsbUJBQW1CLGtCQUFrQixHQUFHLElBQUksZUFBZSxnQkFBZ0IsOERBQThELFNBQVMsU0FBUyxTQUFTLGdEQUFnRCxjQUFjLDBCQUEwQixRQUFRLG9EQUFvRCwwQkFBMEIsOEJBQThCLEVBQUUseUJBQXlCLEtBQUssb0RBQW9ELGNBQWMsZUFBZSxtQ0FBbUMsRUFBRSxTQUFTLDBCQUEwQiwwQkFBMEIsTUFBTSxFQUFFLElBQUksTUFBTSxlQUFlLDJCQUEyQixrQkFBa0IsS0FBSywrQ0FBK0MsNkJBQTZCLHNCQUFzQixNQUFNLFNBQVMsYUFBYSxPQUFPLElBQUksMEJBQTBCLG9CQUFvQiw2Q0FBNkMsU0FBUyxNQUFNLGVBQWUsa0JBQWtCLG9CQUFvQixnQ0FBZ0MsTUFBTSxRQUFRLGtCQUFrQixTQUFTLG1EQUFtRCxJQUFJLGVBQWUsTUFBTSxzQ0FBc0MsU0FBUyxlQUFlLFFBQVEsY0FBYyxlQUFlLGtCQUFrQixzRUFBc0Usd0dBQXdHLGlFQUFpRSxhQUFhLGNBQWMsZ0RBQWdELGFBQWEsaUNBQWlDLDBGQUEwRixTQUFTLGFBQWEsa0JBQWtCLGFBQWEsb0RBQW9ELGNBQWMsNERBQTRELGFBQWEsdVBBQXVQLHNHQUFzRyxZQUFZLDRCQUE0QixlQUFlLDREQUE0RCxPQUFPLHFGQUFxRixjQUFjLFNBQVMseURBQXlELGtDQUFrQyxXQUFXLGlCQUFpQiwyQkFBMkIsU0FBUyw0QkFBNEIsU0FBUyxrSEFBa0gsa0NBQWtDLGdCQUFnQix5RUFBeUUsc0ZBQXNGLFFBQVEseUdBQXlHLFFBQVEsd0NBQXdDLFNBQVMsaUJBQWlCLFFBQVEsaUlBQWlJLFNBQVMsYUFBYSxLQUFLLGtCQUFrQixJQUFJLHNCQUFzQixNQUFNLFlBQVkseUJBQXlCLElBQUksU0FBUyxTQUFTLE9BQU8sc0pBQXNKLElBQUksSUFBSSxVQUFVLFNBQVMsYUFBYSx3QkFBd0IsUUFBUSxNQUFNLGlHQUFpRyxHQUFHLElBQUksTUFBTSxFQUFFLEtBQUssV0FBVyxFQUFFLG1CQUFtQixnQkFBZ0IseUJBQXlCLDJDQUEyQyxpQkFBaUIsSUFBSSxJQUFJLFFBQVEsZ0NBQWdDLFlBQVksNkJBQTZCLCtDQUErQyxTQUFTLGdCQUFnQix5RUFBeUUsd0NBQXdDLHdCQUF3QixLQUFLLGtCQUFrQixjQUFjLG9GQUFvRixjQUFjLHdCQUF3QixzQ0FBc0MsU0FBUyxvQ0FBb0Msa0NBQWtDLCtHQUErRyxRQUFRLDJCQUEyQixNQUFNLG9FQUFvRSxzQkFBc0IsRUFBRSxjQUFjLFlBQVksMkJBQTJCLHNIQUFzSCxNQUFNLG1FQUFtRSwyQkFBMkIsTUFBTSxtRUFBbUUsbUJBQW1CLFlBQVksZ0NBQWdDLHlCQUF5Qix5QkFBeUIsK0JBQStCLFlBQVksaUNBQWlDLHNIQUFzSCxNQUFNLG1FQUFtRSwyQkFBMkIsTUFBTSxtRUFBbUUsb0JBQW9CLFNBQVMsWUFBWSx1QkFBdUIsZ0pBQWdKLGtCQUFrQiwyQ0FBMkMsc0NBQXNDLGlDQUFpQyx5RUFBeUUsMERBQTBELDZCQUE2Qix5RUFBeUUsc0RBQXNELHNCQUFzQixPQUFPLDhCQUE4QixNQUFNLDhFQUE4RSxzRkFBc0YseUJBQXlCLHdEQUF3RCxzQkFBc0Isc0JBQXNCLEVBQUUsK0JBQStCLDhCQUE4Qix5QkFBeUIsc0JBQXNCLFNBQVMsa0JBQWtCLHFEQUFxRCxTQUFTLElBQUksMkJBQTJCLE1BQU0sd0VBQXdFLGlCQUFpQixTQUFTLGFBQWEsc0JBQXNCLFFBQVEsVUFBVSxTQUFTLDJCQUEyQixzRkFBc0YsV0FBVywyQkFBMkIsTUFBTSwyRUFBMkUsc0JBQXNCLEVBQUUsT0FBTyxTQUFTLGlDQUFpQyxpREFBaUQsZUFBZSxNQUFNLHVCQUF1QixRQUFRLFlBQVksZUFBZSxjQUFjLHdDQUF3QyxlQUFlLHlFQUF5RSxXQUFXLGVBQWUsZ0JBQWdCLCtDQUErQyxpQkFBaUIsT0FBTywyQkFBMkIsNEJBQTRCLHlIQUF5SCxjQUFjLFNBQVMseUNBQXlDLFNBQVMsdUlBQXVJLDZEQUE2RCxRQUFRLGtCQUFrQixTQUFTLDBCQUEwQixLQUFLLElBQUksWUFBWSwwQ0FBMEMsY0FBYyxzQkFBc0IsTUFBTSxLQUFLLElBQUksY0FBYyxpQkFBaUIsa0NBQWtDLDJDQUEyQyxJQUFJLDZEQUE2RCx3QkFBd0IsTUFBTSxFQUFFLGFBQWEsWUFBWSxlQUFlLFVBQVUsWUFBWSxzQkFBc0IsY0FBYyxZQUFZLEdBQUcsZ0JBQWdCLGFBQWEsWUFBWSxJQUFJLElBQUksK0JBQStCLDZDQUE2Qyx5QkFBeUIsU0FBUyxrQkFBa0IsUUFBUSxzQkFBc0Isd0JBQXdCLE1BQU0sRUFBRSxxQkFBcUIsc0JBQXNCLElBQUksNkRBQTZELEdBQUcscUNBQXFDLFNBQVMsSUFBSSxzQkFBc0IsU0FBUyxPQUFPLGtCQUFrQixxRUFBcUUsd0RBQXdELGFBQWEsU0FBUyxRQUFRLDZEQUE2RCxXQUFXLFVBQVUsY0FBYyxZQUFZLGdCQUFnQiw2REFBNkQsS0FBSyxTQUFTLGNBQWMsbUdBQW1HLFlBQVksV0FBVyxLQUFLLG9GQUFvRixTQUFTLE1BQU0sTUFBTSxvQkFBb0IsVUFBVSw2QkFBNkIsY0FBYyxzRUFBc0Usc0NBQXNDLDRCQUE0QixHQUFHLGtDQUFrQyxRQUFRLFNBQVMsb0VBQW9FLG9DQUFvQyw4QkFBOEIsTUFBTSxvRUFBb0UsU0FBUyxLQUFLLHFEQUFxRCxJQUFJLE1BQU0sS0FBSyxNQUFNLGNBQWMsZUFBZSxjQUFjLDJDQUEyQywwQ0FBMEMsaURBQWlELE9BQU8sNkJBQTZCLEdBQUcsNkJBQTZCLE1BQU0sRUFBRSxLQUFLLHlFQUF5RSxzQkFBc0IsYUFBYSxNQUFNLEdBQUcsSUFBSSxNQUFNLG9CQUFvQixZQUFZLHdCQUF3QixjQUFjLFNBQVMsS0FBSyxrQkFBa0IsTUFBTSxFQUFFLG9CQUFvQixvQkFBb0IsdUJBQXVCLGNBQWMsTUFBTSxFQUFFLEtBQUsseUdBQXlHLGFBQWEsTUFBTSxFQUFFLElBQUksY0FBYyx3QkFBd0IsTUFBTSxFQUFFLGdDQUFnQyxNQUFNLEVBQUUsS0FBSyx5R0FBeUcsc0JBQXNCLE1BQU0sRUFBRSxJQUFJLGlCQUFpQixnRUFBZ0Usa0JBQWtCLE1BQU0sRUFBRSxTQUFTLHNCQUFzQixZQUFZLGFBQWEsT0FBTyxLQUFLLGFBQWEsYUFBYSxtQ0FBbUMsU0FBUyxZQUFZLHdCQUF3QixNQUFNLHlCQUF5Qix1SEFBdUgsUUFBUSx3QkFBd0IsSUFBSSxXQUFXLHVDQUF1Qyx5QkFBeUIsNkRBQTZELFFBQVEsZUFBZSxnQkFBZ0IseUxBQXlMLFFBQVEsOEJBQThCLE1BQU0sZUFBZSxTQUFTLDJCQUEyQixTQUFTLFNBQVMsU0FBUyxpQkFBaUIsZ0JBQWdCLG9DQUFvQyxJQUFJLEdBQUcseUJBQXlCLDZDQUE2QyxTQUFTLDRCQUE0Qix5SUFBeUksU0FBUyxpQkFBaUIsd0JBQXdCLGdCQUFnQixpQkFBaUIsa0NBQWtDLGNBQWMsRUFBRSxpQkFBaUIsR0FBRyxrQkFBa0IsdTNCQUF1M0IsY0FBYyx3Q0FBd0MsK0JBQStCLG1SQUFtUiw4REFBOEQsR0FBRyxvQkFBb0Isd0JBQXdCLHlCQUF5QixNQUFNLHdTQUF3Uyw0Q0FBNEMsNkJBQTZCLGNBQWMsd0JBQXdCLGtFQUFrRSxzRUFBc0UsTUFBTSxvRUFBb0UsS0FBSyxtQ0FBbUMsWUFBWSwyQkFBMkIsS0FBSyxtQ0FBbUMsNEdBQTRHLDhCQUE4Qix5REFBeUQsb0JBQW9CLDhRQUE4USxnQkFBZ0IsK0lBQStJLGNBQWMseUJBQXlCLDJKQUEySixjQUFjLHlCQUF5QiwyTUFBMk0sZ0JBQWdCLG9FQUFvRSxnQkFBZ0IsS0FBSywwRUFBMEUsRUFBRSxpQkFBaUIsMERBQTBELGlCQUFpQixjQUFjLHlCQUF5Qix1S0FBdUssY0FBYyx3Q0FBd0MsZ0JBQWdCLHVIQUF1SCxjQUFjLHlCQUF5Qix3QkFBd0IsMkJBQTJCLEdBQUcsZ0JBQWdCLHdDQUF3QyxjQUFjLEdBQUcsNkJBQTZCLFVBQVUsY0FBYyx1QkFBdUIsbUJBQW1CLGFBQWEsWUFBWSxNQUFNLHdCQUF3QixHQUFHLElBQUksTUFBTSxFQUFFLGtDQUFrQyxvQkFBb0IsS0FBSyxhQUFhLG1CQUFtQixpQkFBaUIsU0FBUyxpQkFBaUIsUUFBUSxzSUFBc0ksTUFBTSxvQkFBb0IsZ0JBQWdCLDRCQUE0QixNQUFNLHlNQUF5TSxjQUFjLHlCQUF5Qiw0RUFBNEUsaUJBQWlCLHdMQUF3TCx1QkFBdUIseUJBQXlCLGlFQUFpRSxlQUFlLG9EQUFvRCxPQUFPLGNBQWMsMEJBQTBCLEtBQUssb0dBQW9HLEtBQUssbURBQW1ELGdCQUFnQixnQ0FBZ0Msc0JBQXNCLG1DQUFtQyxzQkFBc0IsaUNBQWlDLDRCQUE0QixnQ0FBZ0MscUNBQXFDLGlCQUFpQixnR0FBZ0csbUNBQW1DLFNBQVMsK0JBQStCLDRFQUE0RSw4QkFBOEIsK0NBQStDLGdDQUFnQyxtREFBbUQsZ0RBQWdELDZEQUE2RCwyTkFBMk4sNkRBQTZELHVCQUF1QixtTkFBbU4sV0FBVyxzRUFBc0UsSUFBSSw0QkFBNEIsU0FBUyxVQUFVLGdDQUFnQyw4VEFBOFQsK0JBQStCLHVCQUF1QixnQ0FBZ0MsbUNBQW1DLG9NQUFvTSxzREFBc0QsYUFBYSxtQkFBbUIsTUFBTSwwRUFBMEUsNFhBQTRYLEdBQUcsU0FBUyxhQUFhLG9SQUFvUixrQkFBa0IseUJBQXlCLDRQQUE0UCx1QkFBdUIsY0FBYyxZQUFZLG1CQUFtQiw4QkFBOEIsY0FBYyxnRkFBZ0YsMkNBQTJDLDZDQUE2QyxhQUFhLGlDQUFpQyxhQUFhLDhDQUE4QyxhQUFhLHdCQUF3Qiw4S0FBOEssZ0NBQWdDLDRCQUE0QixrQ0FBa0MsT0FBTyxnQkFBZ0Isd0JBQXdCLFlBQVksV0FBVyw2QkFBNkIsY0FBYyxFQUFFLFlBQVkscUJBQXFCLDBGQUEwRixjQUFjLFFBQVEsOEJBQThCLDREQUE0RCwwVEFBMFQsaUZBQWlGLGtEQUFrRCwyQ0FBMkMsdUZBQXVGLDZEQUE2RCx1REFBdUQsK0JBQStCLDRCQUE0Qiw0RUFBNEUsNERBQTRELHVCQUF1Qiw4QkFBOEIsOExBQThMLDhCQUE4QixTQUFTLGlCQUFpQix5Q0FBeUMsb0JBQW9CLGdCQUFnQixxQkFBcUIsVUFBVSxzQkFBc0IsZUFBZSx3QkFBd0IsZUFBZSxtQkFBbUIsZ0NBQWdDLGFBQWEsWUFBWSxXQUFXLEtBQUssYUFBYSxrRUFBa0UsWUFBWSwyQkFBMkIsZUFBZSxrQ0FBa0MsNENBQTRDLGdCQUFnQixVQUFVLHFCQUFxQiw0QkFBNEIsd0VBQXdFLFFBQVEseURBQXlELGtCQUFrQiw0Q0FBNEMsd0NBQXdDLGtCQUFrQiw0Q0FBNEMsMElBQTBJLHdCQUF3Qiw0Q0FBNEMsMENBQTBDLGlCQUFpQiw0Q0FBNEMsd0RBQXdELGtCQUFrQiw0Q0FBNEMsbUNBQW1DLGlCQUFpQixzREFBc0QsaUJBQWlCLG1DQUFtQyxtQ0FBbUMscUJBQXFCLG1DQUFtQyw2REFBNkQsbUJBQW1CLG1DQUFtQyw4REFBOEQsVUFBVSxtQ0FBbUMsNkRBQTZELFNBQVMscUJBQXFCLHlEQUF5RCxZQUFZLG1DQUFtQywyREFBMkQsUUFBUSx3REFBd0QsZ0JBQWdCLG1DQUFtQyw4REFBOEQsaUJBQWlCLFlBQVkscUJBQXFCLDBCQUEwQixTQUFTLHFCQUFxQixtQkFBbUIsUUFBUSxjQUFjLHFDQUFxQyxnQkFBZ0IseUJBQXlCLHFEQUFxRCx1QkFBdUIscURBQXFELHNCQUFzQixRQUFRLGNBQWMsa0hBQWtILHVCQUF1QixXQUFXLGVBQWUsTUFBTSw4QkFBOEIsU0FBUyx3QkFBd0IsY0FBYyxjQUFjLGtCQUFrQixXQUFXLG1DQUFtQyx3QkFBd0IseURBQXlELFFBQVEsWUFBWSx1Q0FBdUMsRUFBRSw2QkFBNkIsWUFBWSx1QkFBdUIsNEJBQTRCLGVBQWUsTUFBTSxnQ0FBZ0MsUUFBUSxZQUFZLE1BQU0sNkJBQTZCLHdCQUF3QixtQkFBbUIsUUFBUSxrQ0FBa0MsdUJBQXVCLGNBQWMsd0NBQXdDLG9EQUFvRCxXQUFXLGlHQUFpRyxzTUFBc00sY0FBYyw2RkFBNkYsd0VBQXdFLEdBQUcsYUFBYSw4QkFBOEIsNERBQTRELDRCQUE0QixvQ0FBb0MsNkRBQTZELDZCQUE2Qiw2RkFBNkYsR0FBRyw4QkFBOEIsWUFBWSxnQkFBZ0IsbUJBQW1CLGVBQWUsTUFBTSw0REFBNEQsMktBQTJLLG1CQUFtQixNQUFNLHVQQUF1UCxjQUFjLE1BQU0scUpBQXFKLGNBQWMsd0pBQXdKLGNBQWMsaUhBQWlILGNBQWMsOEVBQThFLGNBQWMsNEVBQTRFLGNBQWMscUJBQXFCLG1EQUFtRCxrREFBa0QsY0FBYyxxQkFBcUIsaUNBQWlDLHlCQUF5QixzRkFBc0YsZ0JBQWdCLHFCQUFxQix5QkFBeUIsd0lBQXdJLGNBQWMsMkdBQTJHLGNBQWMsdUZBQXVGLGNBQWMsc0pBQXNKLGNBQWMseUNBQXlDLFdBQVcscUNBQXFDLE1BQU0sbUZBQW1GLHNDQUFzQyx3QkFBd0IsNmJBQTZiLDRHQUE0RyxxQkFBcUIsOENBQThDLDRDQUE0QyxtTUFBbU0sOENBQThDLCtHQUErRywwQkFBMEIsNEdBQTRHLDBCQUEwQixpSUFBaUksdUVBQXVFLHFCQUFxQixpQ0FBaUMseUJBQXlCLGlGQUFpRixvREFBb0QsUUFBUSw0SUFBNEksd0NBQXdDLHdCQUF3QiwyR0FBMkcscUJBQXFCLG9DQUFvQyx5QkFBeUIsb0lBQW9JLCtCQUErQixRQUFRLDRJQUE0SSw2QkFBNkIsTUFBTSxxSUFBcUksOENBQThDLHFCQUFxQixtREFBbUQsaUVBQWlFLHNCQUFzQixlQUFlLGdCQUFnQixvTUFBb00sUUFBUSw4QkFBOEIsTUFBTSxlQUFlLHlCQUF5QixTQUFTLGtCQUFrQixpQkFBaUIsU0FBUyw2Q0FBNkMsU0FBUyx1T0FBdU8sZUFBZSxpQkFBaUIsR0FBRyxjQUFjLGtDQUFrQyx5QkFBeUIsa0JBQWtCLDBUQUEwVCxvQ0FBb0MsMGRBQTBkLGNBQWMsNkRBQTZELGNBQWMsK0JBQStCLGtDQUFrQyx5WEFBeVgsNEJBQTRCLCtCQUErQixHQUFHLG9CQUFvQix5QkFBeUIsZ0RBQWdELEtBQUssTUFBTSxpREFBaUQseUJBQXlCLDRCQUE0Qix3QkFBd0Isd0ZBQXdGLGtDQUFrQyxLQUFLLCtFQUErRSxzQ0FBc0MsTUFBTSwySEFBMkgsZ0NBQWdDLFlBQVksaUNBQWlDLDRGQUE0Riw4QkFBOEIsa01BQWtNLGFBQWEsMEJBQTBCLGlKQUFpSixvQkFBb0IsK0JBQStCLGdCQUFnQiw4Q0FBOEMsZ1lBQWdZLDhCQUE4Qiw2REFBNkQsWUFBWSw4QkFBOEIsRUFBRSw0Q0FBNEMsb0JBQW9CLHlGQUF5RixPQUFPLG1CQUFtQix5QkFBeUIsY0FBYyxvQkFBb0IsMEJBQTBCLG9CQUFvQixLQUFLLE1BQU0sTUFBTSxtQkFBbUIseUNBQXlDLGlFQUFpRSx1QkFBdUIsWUFBWSxXQUFXLEtBQUssTUFBTSxzREFBc0QsS0FBSyxnQkFBZ0Isb0VBQW9FLE1BQU0sd0NBQXdDLGdCQUFnQixhQUFhLFFBQVEseUNBQXlDLGlCQUFpQix3QkFBd0IsWUFBWSxXQUFXLHFCQUFxQiw2QkFBNkIseURBQXlELEtBQUssR0FBRyxNQUFNLDhCQUE4QixNQUFNLHlDQUF5Qyw4QkFBOEIsNEVBQTRFLHNCQUFzQixjQUFjLHlKQUF5SixrQkFBa0IscUJBQXFCLCtJQUErSSxTQUFTLGNBQWMsd0JBQXdCLDhCQUE4Qix1QkFBdUIsWUFBWSxXQUFXLFlBQVksY0FBYyxrRkFBa0Ysd0JBQXdCLElBQUksWUFBWSxTQUFTLEtBQUssVUFBVSxRQUFRLDZEQUE2RCwwQkFBMEIsdUNBQXVDLGdCQUFnQiw0QkFBNEIsdUJBQXVCLFlBQVksV0FBVyxXQUFXLG1DQUFtQyx5QkFBeUIsbUVBQW1FLGlDQUFpQywyQ0FBMkMsdUNBQXVDLHFCQUFxQixnREFBZ0QsU0FBUyxpQ0FBaUMsK0RBQStELDhCQUE4QixjQUFjLG1DQUFtQyx5QkFBeUIsNkJBQTZCLDZCQUE2QiwrQkFBK0IsNEJBQTRCLDRDQUE0Qyw0Q0FBNEMsZ0VBQWdFLGtEQUFrRCxvQ0FBb0MseUNBQXlDLGVBQWUsbUJBQW1CLEtBQUssMERBQTBELDRCQUE0QixNQUFNLHdGQUF3RixvQkFBb0Isc0JBQXNCLDJPQUEyTyxnQkFBZ0IsUUFBUSxxQkFBcUIseURBQXlELFlBQVkscUJBQXFCLDJEQUEyRCxRQUFRLHdEQUF3RCxXQUFXLHFCQUFxQiw0QkFBNEIsd0VBQXdFLFFBQVEseURBQXlELG1CQUFtQixxQkFBcUIsMkRBQTJELHFCQUFxQixxQkFBcUIsNkRBQTZELGlCQUFpQixxQkFBcUIsNkRBQTZELGdCQUFnQixxQkFBcUIseURBQXlELG9CQUFvQixxQkFBcUIsNEJBQTRCLGlEQUFpRCx3QkFBd0IscUJBQXFCLCtEQUErRCxpQkFBaUIscUJBQXFCLHlEQUF5RCxpQkFBaUIscUJBQXFCLHdEQUF3RCxVQUFVLG1DQUFtQyw2REFBNkQsa0JBQWtCLDRDQUE0Qyx5SUFBeUksRUFBRSxrQkFBa0IsTUFBTSxhQUFhLHdCQUF3QixJQUFJLGtDQUFrQyw0QkFBNEIsNEdBQTRHLHVFQUF1RSxLQUFLLG1EQUFtRCxnQkFBZ0IseUJBQXlCLG9EQUFvRCxxQkFBcUIsbURBQW1ELGVBQWUsTUFBTSxzU0FBc1MsU0FBUyx5QkFBeUIsOEdBQThHLFNBQVMsb0JBQW9CLFNBQVMsc0NBQXNDLGtCQUFrQixtQ0FBbUMsZ0RBQWdELHVDQUF1QyxnQ0FBZ0MsR0FBRyxRQUFRLEVBQUUsS0FBSywyQ0FBMkMsZ0RBQWdELHVDQUF1QyxnQ0FBZ0MsR0FBRyxRQUFRLEVBQUUsS0FBSyxxQkFBcUIsZ0RBQWdELHVDQUF1QywyQkFBMkIsZ0NBQWdDLEdBQUcsUUFBUSxFQUFFLEtBQUssR0FBRyxnQkFBZ0IsZ0RBQWdELHFCQUFxQixZQUFZLHlDQUF5QyxFQUFFLGdCQUFnQix1Q0FBdUMsR0FBRyxnQkFBZ0Isa0RBQWtELGtCQUFrQiw4QkFBOEIsMEJBQTBCLHVEQUF1RCxxSEFBcUgsZ0JBQWdCLHFGQUFxRixvQkFBb0Isa0NBQWtDLHFEQUFxRCxFQUFFLEdBQUcseUJBQXlCLDZEQUE2RCxnQkFBZ0IsK0ZBQStGLGdCQUFnQixvREFBb0QsZ0JBQWdCLDBEQUEwRCxnQkFBZ0IsMkNBQTJDLHlCQUF5QixNQUFNLGdCQUFnQixjQUFjLGdCQUFnQiw2RkFBNkYsYUFBYSxZQUFZLFdBQVcsb0JBQW9CLGlCQUFpQixzQkFBc0IsaUJBQWlCLCtCQUErQix5Q0FBeUMseUZBQXlGLFNBQVMsZ0JBQWdCLG1EQUFtRCxPQUFPLFlBQVksV0FBVyxjQUFjLEVBQUUsR0FBRyxFQUFFLElBQUksb0NBQW9DLE9BQU8sWUFBWSxXQUFXLGNBQWMsRUFBRSxHQUFHLEVBQUUsSUFBSSx3RkFBd0Ysd0JBQXdCLCtFQUErRSxFQUFFLEdBQUcsOEZBQThGLGdEQUFnRCx5RUFBeUUsY0FBYyxFQUFFLEtBQUssRUFBRSwyQkFBMkIsRUFBRSxjQUFjLEVBQUUsS0FBSyxLQUFLLGlHQUFpRyxrSUFBa0ksV0FBVywyQ0FBMkMseUJBQXlCLDZFQUE2RSxnQkFBZ0IscUZBQXFGLDhCQUE4QixTQUFTLE9BQU8sMkRBQTJELDRDQUE0QyxTQUFTLGlCQUFpQixTQUFTLGtCQUFrQixZQUFZLElBQUksS0FBSyxhQUFhLHFDQUFxQyxTQUFTLDRFQUE0RSxhQUFhLGNBQWMsY0FBYyw2Q0FBNkMsdWtCQUF1a0Isd0NBQXdDLHdEQUF3RCxlQUFlLE1BQU0sb0NBQW9DLHVMQUF1TCxnQkFBZ0IsNENBQTRDLGNBQWMsb0JBQW9CLHVCQUF1QixLQUFLLE9BQU8sV0FBVyxlQUFlLEVBQUUsRUFBRSxFQUFFLFNBQVMsYUFBYSxFQUFFLEVBQUUsRUFBRSxrQkFBa0IsYUFBYSxrQkFBa0Isa0JBQWtCLHNCQUFzQiw2REFBNkQsSUFBSSxpQ0FBaUMsU0FBUyxzQ0FBc0MsU0FBUyxhQUFhLDRDQUE0QywrQkFBK0IsSUFBSSxpQ0FBaUMsU0FBUyxzQ0FBc0MsRUFBRSw4QkFBOEIsU0FBUyxXQUFXLFNBQVMsV0FBVyxHQUFHLEVBQUUsS0FBSyxhQUFhLEdBQUcscUNBQXFDLE1BQU0sdURBQXVELFdBQVcsUUFBUSxTQUFTLFdBQVcsR0FBRyxFQUFFLEtBQUssYUFBYSxFQUFFLDRDQUE0Qyw4Q0FBOEMsY0FBYyxrQ0FBa0MsdUNBQXVDLFFBQVEsSUFBSSxzQkFBc0Isb0RBQW9ELHlGQUF5Rix5REFBeUQsa0VBQWtFLDBFQUEwRSxhQUFhLDhCQUE4QixHQUFHLFNBQVMsRUFBRSxJQUFJLHVDQUF1QyxnQkFBZ0IscUJBQXFCLGlPQUFpTyxlQUFlLDRCQUE0QiwyQ0FBMkMsZUFBZSxpQkFBaUIscUJBQXFCLEtBQUssRUFBRSxNQUFNLHlCQUF5QixNQUFNLEtBQUssS0FBSyxFQUFFLE1BQU0sU0FBUyxnQkFBZ0Isa0JBQWtCLGFBQWEsT0FBTyxFQUFFLEdBQUcsc0NBQXNDLGVBQWUsaUJBQWlCLDRCQUE0QixLQUFLLEVBQUUsTUFBTSw0QkFBNEIsTUFBTSxLQUFLLEtBQUssRUFBRSxNQUFNLFNBQVMsZ0JBQWdCLHFCQUFxQixhQUFhLE9BQU8sRUFBRSxHQUFHLHdCQUF3QixpQkFBaUIsYUFBYSxtREFBbUQsS0FBSyxFQUFFLE1BQU0sb0JBQW9CLE1BQU0sS0FBSyxLQUFLLEVBQUUsTUFBTSxTQUFTLGdCQUFnQixhQUFhLGFBQWEsT0FBTyxFQUFFLEdBQUcsNEJBQTRCLEVBQUUsRUFBRSwrREFBK0QsT0FBTyxFQUFFLDRCQUE0QixNQUFNLDZFQUE2RSxtQkFBbUIsbUJBQW1CLEtBQUssU0FBUyxFQUFFLEVBQUUsS0FBSyxXQUFXLFVBQVUsRUFBRSxtQkFBbUIsY0FBYyw0QkFBNEIsVUFBVSxHQUFHLEVBQUUsR0FBRyxTQUFTLCtEQUErRCxXQUFXLHFEQUFxRCx1Q0FBdUMsR0FBRyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsRUFBRSxxREFBcUQsTUFBTSxrQkFBa0IsR0FBRywyQkFBMkIsRUFBRSxxQkFBcUIscUVBQXFFLG1CQUFtQixtQkFBbUIsR0FBRyw0Q0FBNEMsTUFBTSx1REFBdUQsaUJBQWlCLDhDQUE4QyxFQUFFLHFCQUFxQixpQkFBaUIsTUFBTSxVQUFVLE1BQU0saUJBQWlCLE1BQU0sTUFBTSxNQUFNLFdBQVcsTUFBTSxTQUFTLGdCQUFnQixVQUFVLGFBQWEsUUFBUSxHQUFHLFlBQVksU0FBUyxHQUFHLG1CQUFtQiw2Q0FBNkMsTUFBTSxpTUFBaU0sRUFBRSxnQ0FBZ0MsRUFBRSxhQUFhLEVBQUUsRUFBRSwyd0JBQTJ3QixpREFBaUQsZ0JBQWdCLHFEQUFxRCwrQkFBK0IsdUJBQXVCLFlBQVksOEJBQThCLFNBQVMsV0FBVyw4OUNBQTg5QyxlQUFlLDBEQUEwRCxrRUFBa0Usc0JBQXNCLGFBQWEsVUFBVSxzQkFBc0IsZUFBZSx5RkFBeUYsU0FBUyxZQUFZLFdBQVcsY0FBYyxXQUFXLElBQUksbURBQW1ELFdBQVcsOENBQThDLFVBQVUsU0FBUyxzQkFBc0IsMkJBQTJCLGtDQUFrQyxRQUFRLE9BQU8sNkJBQTZCLFFBQVEsdUJBQXVCLG1DQUFtQyw4QkFBOEIsNEJBQTRCLDhEQUE4RCxrQkFBa0Isb0ZBQW9GLGdEQUFnRCxzQkFBc0IsY0FBYyxpQkFBaUIsaUNBQWlDLDhCQUE4QixFQUFFLEdBQUcsb0NBQW9DLGNBQWMsRUFBRSxJQUFJLFVBQVUsRUFBRSxHQUFHLCtEQUErRCxzQkFBc0IsVUFBVSxHQUFHLCtDQUErQyxzQkFBc0IsR0FBRyxRQUFRLDZFQUE2RSxVQUFVLHVFQUF1RSxlQUFlLE1BQU0sU0FBUyxTQUFTLG1EQUFtRCxTQUFTLFdBQVcsVUFBVSxTQUFTLHVEQUF1RCxTQUFTLE9BQU8sMkJBQTJCLGtCQUFrQixXQUFXLFNBQVMsWUFBWSw0REFBNEQsZ0dBQWdHLHFCQUFxQixhQUFhLGlCQUFpQix3QkFBd0Isb0NBQW9DLFlBQVksNEJBQTRCLGdCQUFnQiw4QkFBOEIsNEJBQTRCLGlFQUFpRSxFQUFFLHFCQUFxQixhQUFhLGlCQUFpQix3QkFBd0IsbUJBQW1CLFlBQVksNEJBQTRCLGdCQUFnQiw4QkFBOEIsNEJBQTRCLGlFQUFpRSxFQUFFLHVGQUF1RixNQUFNLGlCQUFpQixRQUFRLHdFQUF3RSx1REFBdUQsU0FBUyxnREFBZ0QsU0FBUyxnREFBZ0QseUNBQXlDLCtCQUErQixtQ0FBbUMsbURBQW1ELGVBQWUsTUFBTSw4QkFBOEIsU0FBUywwQ0FBMEMsU0FBUyxlQUFlLFNBQVMsV0FBVyxPQUFPLGlCQUFpQixtQ0FBbUMsc0JBQXNCLFFBQVEsc0JBQXNCLCtDQUErQyxhQUFhLG1CQUFtQixhQUFhLFlBQVksR0FBRyxlQUFlLEVBQUUsS0FBSyxTQUFTLHVCQUF1QixhQUFhLG1EQUFtRCxhQUFhLHFEQUFxRCxjQUFjLHlDQUF5QywrREFBK0QsSUFBSSxjQUFjLFNBQVMsSUFBSSx3QkFBd0IsU0FBUywwQkFBMEIsWUFBWSxJQUFJLDZDQUE2QyxTQUFTLElBQUksSUFBSSxpREFBaUQsU0FBUyxLQUFLLEdBQUcscUJBQXFCLGFBQWEsdURBQXVELGFBQWEsT0FBTyxXQUFXLEtBQUssbUJBQW1CLEVBQUUsRUFBRSxhQUFhLE1BQU0sZUFBZSxnQkFBZ0Isd0JBQXdCLDJDQUEyQyxtRUFBbUUsSUFBSSxZQUFZLFNBQVMsSUFBSSxzQkFBc0IsU0FBUyx3QkFBd0IsS0FBSyxnQkFBZ0Isd0JBQXdCLGNBQWMsdUJBQXVCLG9DQUFvQyxrQ0FBa0MsbUJBQW1CLHdCQUF3Qix5Q0FBeUMsNEJBQTRCLGdDQUFnQyx3Q0FBd0MscUNBQXFDLGdLQUFnSyxTQUFTLHVCQUF1QixvREFBb0Qsa0JBQWtCLFVBQVUscUJBQXFCLGtEQUFrRCxvQkFBb0IsVUFBVSxlQUFlLHdCQUF3QixnQkFBZ0IseUJBQXlCLGtCQUFrQixnQkFBZ0IsZ0hBQWdILDJFQUEyRSxnQkFBZ0IseUJBQXlCLHVFQUF1RSxXQUFXLHVFQUF1RSwyQkFBMkIsdUVBQXVFLFlBQVksK0JBQStCLHVFQUF1RSx3QkFBd0IsZUFBZSxnREFBZ0Qsa0NBQWtDLDhJQUE4SSxtQkFBbUIsY0FBYyxNQUFNLGlDQUFpQyxrQkFBa0IsbUJBQW1CLFdBQVcsV0FBVyxvQ0FBb0Msb0VBQW9FLHlDQUF5Qyw0Q0FBNEMsb0JBQW9CLDZCQUE2QixJQUFJLHlGQUF5RixZQUFZLG1CQUFtQix5Q0FBeUMsTUFBTSwrQkFBK0IsTUFBTSx3Q0FBd0MsTUFBTSw2Q0FBNkMsZ0VBQWdFLGNBQWMsOERBQThELGNBQWMscURBQXFELDJDQUEyQyw2QkFBNkIsMkNBQTJDLHNFQUFzRSxTQUFTLGdOQUFnTixnQkFBZ0Isc0JBQXNCLDhCQUE4QixNQUFNLCtCQUErQiwwSUFBMEksU0FBUywwR0FBMEcsY0FBYyxtQ0FBbUMsa0JBQWtCLG1DQUFtQywrQ0FBK0MsU0FBUyxnQkFBZ0IscUJBQXFCLGdOQUFnTixjQUFjLG1DQUFtQyw0RUFBNEUsY0FBYyxpQ0FBaUMsY0FBYyxvQ0FBb0MsZ0RBQWdELHlCQUF5QixRQUFRLGtCQUFrQiwwQ0FBMEMsZ0NBQWdDLFNBQVMsMERBQTBELDZCQUE2QixtQ0FBbUMsNkJBQTZCLGdDQUFnQyxzQkFBc0IsaUJBQWlCLGdCQUFnQixjQUFjLG9LQUFvSyxXQUFXLDhDQUE4QyxpQkFBaUIsaUNBQWlDLHdEQUF3RCxrQ0FBa0MsNEpBQTRKLHVGQUF1RixjQUFjLE9BQU8sc0dBQXNHLEVBQUUsT0FBTyxVQUFVLCtEQUErRCx1QkFBdUIsRUFBRSxvREFBb0QsTUFBTSxPQUFPLG1HQUFtRyxFQUFFLHNCQUFzQixpQkFBaUIsUUFBUSxzUEFBc1Asc0JBQXNCLElBQUksa0JBQWtCLG1CQUFtQixNQUFNLHlJQUF5SSxrQkFBa0IsaUJBQWlCLE1BQU0sMEdBQTBHLGtCQUFrQixpQkFBaUIsTUFBTSwwSUFBMEksa0JBQWtCLGlCQUFpQixNQUFNLDJHQUEyRyxrQkFBa0IsaUJBQWlCLE1BQU0sOEdBQThHLGtCQUFrQixlQUFlLGlEQUFpRCxZQUFZLHVCQUF1Qix1QkFBdUIscUJBQXFCLFdBQVcsa0JBQWtCLFdBQVcsT0FBTyx1QkFBdUIsbUJBQW1CLDRCQUE0QixtQkFBbUIsZ0JBQWdCLEdBQUcsUUFBUSxlQUFlLDJNQUEyTSxtQkFBbUIsbUNBQW1DLFlBQVksNkhBQTZILGNBQWMscUNBQXFDLGlCQUFpQix5REFBeUQsNkRBQTZELG1CQUFtQiw4REFBOEQseUlBQXlJLHFDQUFxQyxtQ0FBbUMsb0NBQW9DLGdDQUFnQyxtQ0FBbUMsbUNBQW1DLE9BQU8sNENBQTRDLG1DQUFtQyxlQUFlLDJCQUEyQixNQUFNLGdDQUFnQyxzSEFBc0gsT0FBTyxtQ0FBbUMsa0tBQWtLLEdBQUcscUNBQXFDLElBQUkseUZBQXlGLFNBQVMsNENBQTRDLFFBQVEsVUFBVSxtQ0FBbUMseUhBQXlILG9FQUFvRSx1REFBdUQsTUFBTSxJQUFJLG9CQUFvQixTQUFTLHlIQUF5SCxpQ0FBaUMseUJBQXlCLFFBQVEsWUFBWSx3QkFBd0IsTUFBTSxzQkFBc0IsTUFBTSxnQkFBZ0IsSUFBSSxnREFBZ0QsTUFBTSxxRUFBcUUsOEJBQThCLFFBQVEsdUJBQXVCLDBCQUEwQixJQUFJLHlKQUF5SixFQUFFLEdBQUcsdUJBQXVCLCtEQUErRCxFQUFFLFVBQVUsU0FBUyx5Q0FBeUMsdUpBQXVKLE1BQU0sa0VBQWtFLFdBQVcsYUFBYSwyREFBMkQsTUFBTSxrR0FBa0csTUFBTSxvR0FBb0csTUFBTSxnQ0FBZ0MsNEJBQTRCLHlCQUF5QixpQkFBaUIsZ0JBQWdCLHFCQUFxQixnREFBZ0QsVUFBVSw0QkFBNEIsU0FBUyw0QkFBNEIsa0JBQWtCLFVBQVUseUNBQXlDLDBCQUEwQixhQUFhLE1BQU0sK0RBQStELDJDQUEyQyw4Q0FBOEMsRUFBRSxpQkFBaUIsRUFBRSxrQ0FBa0MsZ0JBQWdCLDZFQUE2RSxlQUFlLEVBQUUsVUFBVSxTQUFTLDBDQUEwQyx5SUFBeUksdUJBQXVCLG9DQUFvQyx5QkFBeUIsTUFBTSxlQUFlLFFBQVEsT0FBTyxnQkFBZ0IsVUFBVSxvQ0FBb0MsTUFBTSxzQ0FBc0MsTUFBTSxNQUFNLHNCQUFzQixNQUFNLGdCQUFnQixJQUFJLCtEQUErRCwyQ0FBMkMsTUFBTSxvQ0FBb0MsZ0RBQWdELEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGtDQUFrQyxnQkFBZ0IsNkVBQTZFLGVBQWUsRUFBRSxTQUFTLHVCQUF1QixtQ0FBbUMsS0FBSyxTQUFTLHFDQUFxQyxpSUFBaUksU0FBUyw0QkFBNEIsa0JBQWtCLFVBQVUscUNBQXFDLDBCQUEwQixVQUFVLE1BQU0sc0NBQXNDLE1BQU0sTUFBTSx1Q0FBdUMsTUFBTSxnQkFBZ0IsSUFBSSxxREFBcUQsK0RBQStELDBHQUEwRywrQkFBK0Isc0JBQXNCLFNBQVMsRUFBRSxHQUFHLFNBQVMsMkJBQTJCLEVBQUUsVUFBVSxTQUFTLG1DQUFtQyxpSUFBaUksU0FBUyw0QkFBNEIsa0JBQWtCLFVBQVUsbUNBQW1DLDBCQUEwQixVQUFVLE1BQU0sNkJBQTZCLE1BQU0sc0JBQXNCLE1BQU0sZ0JBQWdCLG9EQUFvRCxVQUFVLE1BQU0sOERBQThELEVBQUUsR0FBRyxzQkFBc0IsTUFBTSxhQUFhLHVHQUF1RyxTQUFTLEdBQUcsaUJBQWlCLFVBQVUsd0NBQXdDLFNBQVMsNkJBQTZCLG9DQUFvQywwQkFBMEIsRUFBRSxlQUFlLEdBQUcsR0FBRyxrQ0FBa0Msc0RBQXNELGdEQUFnRCxTQUFTLDJCQUEyQixnRkFBZ0YsMEJBQTBCLEVBQUUsZUFBZSxHQUFHLEdBQUcsa0NBQWtDLHNEQUFzRCxvQ0FBb0MsU0FBUyx3RUFBd0UsRUFBRSxlQUFlLEdBQUcsR0FBRyxrQ0FBa0Msc0RBQXNELGFBQWEsa0RBQWtELG9CQUFvQixvQkFBb0IsSUFBSSxpQkFBaUIsU0FBUyx3QkFBd0IsOENBQThDLFFBQVEsZ0JBQWdCLHVCQUF1QixlQUFlLHNCQUFzQixhQUFhLG9CQUFvQixlQUFlLHNCQUFzQixhQUFhLG9CQUFvQix1QkFBdUIsMkRBQTJELDBEQUEwRCxJQUFJLHdDQUF3QyxJQUFJLG9DQUFvQyxFQUFFLEVBQUUsRUFBRSxXQUFXLFNBQVMsTUFBTSxNQUFNLDBCQUEwQixHQUFHLDJHQUEyRywyQ0FBMkMsK0RBQStELFNBQVMsbUJBQW1CLE1BQU0sZ0NBQWdDLCtDQUErQyxvREFBb0QsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLG9DQUFvQyxnSEFBZ0gsNlZBQTZWLHVCQUF1QixpTUFBaU0sSUFBSSxxRkFBcUYsTUFBTSx5QkFBeUIsbUdBQW1HLHFCQUFxQixnREFBZ0QsNEJBQTRCLDZEQUE2RCxlQUFlLHVCQUF1Qix1QkFBdUIscUhBQXFILElBQUksdUNBQXVDLGFBQWEsUUFBUSx3REFBd0QsTUFBTSwyRUFBMkUsZ0JBQWdCLHdDQUF3QyxvQkFBb0IsU0FBUyxNQUFNLE9BQU8sK0NBQStDLHdCQUF3QixTQUFTLDBDQUEwQyx5QkFBeUIsR0FBRyx5QkFBeUIsZUFBZSxXQUFXLEVBQUUsYUFBYSxzQkFBc0IsZ0JBQWdCLHNCQUFzQiw0QkFBNEIsRUFBRSxrQkFBa0IsRUFBRSw2QkFBNkIsRUFBRSxnQkFBZ0IsRUFBRSwrQkFBK0IsbUJBQW1CLFNBQVMsc0ZBQXNGLDZEQUE2RCxRQUFRLHNDQUFzQyxXQUFXLDZGQUE2RixTQUFTLHFDQUFxQyxtQ0FBbUMsK0NBQStDLHlOQUF5TixxQ0FBcUMsMkdBQTJHLHFEQUFxRCxTQUFTLE1BQU0sbUJBQW1CLE1BQU0sT0FBTywrQ0FBK0Msc0JBQXNCLHVCQUF1QixnQ0FBZ0MsWUFBWSxjQUFjLE1BQU0sc0NBQXNDLElBQUksK0xBQStMLFNBQVMsd0JBQXdCLGtDQUFrQyx5QkFBeUIsTUFBTSw2Q0FBNkMsSUFBSSxtSEFBbUgsU0FBUyx3QkFBd0Isa0NBQWtDLHFDQUFxQyw4QkFBOEIsZ0NBQWdDLGlCQUFpQixNQUFNLGdDQUFnQyxJQUFJLGFBQWEsU0FBUywrQ0FBK0Msc0JBQXNCLElBQUksd0JBQXdCLE1BQU0sSUFBSSxhQUFhLFNBQVMsK0NBQStDLHVCQUF1QixTQUFTLDJCQUEyQixFQUFFLDZFQUE2RSx1QkFBdUIsaUZBQWlGLGlLQUFpSyxTQUFTLDRCQUE0QixzQkFBc0IsRUFBRSxPQUFPLHVCQUF1QiwyQ0FBMkMsMkJBQTJCLDZDQUE2QyxnQkFBZ0IsdUJBQXVCLG1CQUFtQixTQUFTLHNGQUFzRiw2REFBNkQsUUFBUSxzQ0FBc0MsV0FBVyw2RkFBNkYsU0FBUyxrRkFBa0YsdUpBQXVKLDJDQUEyQyxTQUFTLHFCQUFxQixzQkFBc0IsMEJBQTBCLEVBQUUsZUFBZSxHQUFHLEdBQUcsa0NBQWtDLHNEQUFzRCxjQUFjLDhGQUE4RixTQUFTLDZEQUE2RCxTQUFTLE1BQU0sMkRBQTJELDRFQUE0RSx3Q0FBd0MsS0FBSyxRQUFRLFFBQVEsNEVBQTRFLE9BQU8scUJBQXFCLGNBQWMsY0FBYyxtQ0FBbUMsR0FBRyw4QkFBOEIsTUFBTSxxQ0FBcUMsRUFBRSxvQ0FBb0MscUJBQXFCLHFGQUFxRix1Q0FBdUMsV0FBVyxZQUFZLFdBQVcsT0FBTyxTQUFTLGlFQUFpRSxxREFBcUQsOERBQThELGtCQUFrQixNQUFNLHFFQUFxRSxHQUFHLGdCQUFnQiw0Q0FBNEMsc0JBQXNCLFlBQVksRUFBRSxFQUFFLGtCQUFrQixNQUFNLGtEQUFrRCxHQUFHLHNFQUFzRSxhQUFhLHdCQUF3Qiw4REFBOEQseUJBQXlCLElBQUksZ0NBQWdDLGlDQUFpQyw4QkFBOEIsRUFBRSxTQUFTLHFEQUFxRCxFQUFFLElBQUkseUJBQXlCLElBQUksT0FBTyxRQUFRLDBMQUEwTCx5Q0FBeUMsTUFBTSxhQUFhLG9DQUFvQyxTQUFTLEdBQUcsa0JBQWtCLGtCQUFrQix5QkFBeUIsa0JBQWtCLHlCQUF5QixrQkFBa0IseUJBQXlCLGVBQWUsc0JBQXNCLDZCQUE2Qix1RkFBdUYsdUJBQXVCLDZCQUE2Qix3QkFBd0IsTUFBTSxPQUFPLHVDQUF1QyxTQUFTLFFBQVEsb0JBQW9CLHFDQUFxQyxVQUFVLDBCQUEwQix5SUFBeUksU0FBUyxPQUFPLHNFQUFzRSxpQ0FBaUMsa0NBQWtDLG1HQUFtRyxvSkFBb0osT0FBTyxpQ0FBaUMsa0JBQWtCLHVCQUF1Qiw0QkFBNEIscUJBQXFCLG1DQUFtQyxJQUFJLGtDQUFrQywwR0FBMEcscUJBQXFCLHVDQUF1Qyx1Q0FBdUMsMENBQTBDLDZDQUE2QyxFQUFFLHdDQUF3QyxpS0FBaUssbUJBQW1CLGlCQUFpQixNQUFNLG9HQUFvRyxzQkFBc0IsYUFBYSxrSUFBa0ksV0FBVyxlQUFlLDRHQUE0RyxXQUFXLGVBQWUsa0dBQWtHLFdBQVcsa0JBQWtCLGtCQUFrQixpRkFBaUYsa0dBQWtHLGtCQUFrQixrQ0FBa0Msa0RBQWtELE9BQU8sSUFBSSxJQUFJLEtBQUssU0FBUyxrQkFBa0IsZUFBZSxvQkFBb0Isa0ZBQWtGLGlDQUFpQyxRQUFRLHFCQUFxQix5REFBeUQsVUFBVSx1QkFBdUIsV0FBVyx3QkFBd0IsRUFBRSxpQkFBaUIsTUFBTSxhQUFhLE1BQU0sa0JBQWtCLFVBQVUsMENBQTBDLDRCQUE0Qix5QkFBeUIsMkJBQTJCLGtEQUFrRCxJQUFJLGVBQWUsc0JBQXNCLG1DQUFtQyxPQUFPLHlCQUF5Qix1REFBdUQsVUFBVSxrQkFBa0IsSUFBSSxPQUFPLCtCQUErQixTQUFTLE9BQU8scUJBQXFCLFNBQVMsMkVBQTJFLGNBQWMsY0FBYyxjQUFjLFNBQVMsZ0JBQWdCLGFBQWEsNkNBQTZDLDZCQUE2QiwrQ0FBK0MsY0FBYywrQ0FBK0MsbUJBQW1CLHlCQUF5QixHQUFHLEdBQUcsZ0JBQWdCLG9CQUFvQixrQkFBa0IscUJBQXFCLHNCQUFzQix5RkFBeUYsZ0JBQWdCLGVBQWUsaUJBQWlCLGtDQUFrQyxlQUFlLGVBQWUsd0JBQXdCLEdBQUcsU0FBUyxNQUFNLDJCQUEyQixhQUFhLDRCQUE0QixXQUFXLEdBQUcsNEJBQTRCLGdCQUFnQiwyQkFBMkIsVUFBVSx1Q0FBdUMscUZBQXFGLHVGQUF1RixTQUFTLDRCQUE0QiwwRUFBMEUsWUFBWSwyTkFBMk4sY0FBYyxPQUFPLGFBQWEsOEZBQThGLGNBQWMsdUJBQXVCLDRDQUE0QyxjQUFjLGtCQUFrQixjQUFjLG1DQUFtQyxjQUFjLE1BQU0sV0FBVyxzQkFBc0Isc0NBQXNDLHFCQUFxQix3QkFBd0IsS0FBSyxhQUFhLGdEQUFnRCw4QkFBOEIsaUJBQWlCLE9BQU8sUUFBUSxhQUFhLE9BQU8saUJBQWlCLDhIQUE4SCwwQ0FBMEMsa0VBQWtFLG9CQUFvQixrSUFBa0kscUJBQXFCLE9BQU8sV0FBVywwQ0FBMEMsWUFBWSwrQ0FBK0Msd0JBQXdCLDBCQUEwQiw2REFBNkQsK0JBQStCLEdBQUcseUNBQXlDLFlBQVksdUJBQXVCLDJCQUEyQixvQkFBb0IsU0FBUyx5QkFBeUIsZ0NBQWdDLEtBQUssU0FBUyxFQUFFLGNBQWMsdUNBQXVDLG9CQUFvQix5QkFBeUIsZ0NBQWdDLG9PQUFvTyxpQkFBaUIsYUFBYSxvQ0FBb0MsZ0NBQWdDLGlCQUFpQiwrQkFBK0IscUJBQXFCLFdBQVcsZ0JBQWdCLHdFQUF3RSxtQ0FBbUMsS0FBSyxLQUFLLHdDQUF3QyxxQ0FBcUMsd0JBQXdCLG9EQUFvRCxTQUFTLGdEQUFnRCxpREFBaUQsV0FBVyxnREFBZ0QsS0FBSyxnRUFBZ0Usb0RBQW9ELHNCQUFzQixtQ0FBbUMsS0FBSyxLQUFLLHlCQUF5Qix3RUFBd0UsUUFBUSxPQUFPLHlFQUF5RSx3QkFBd0IseUZBQXlGLHdCQUF3QixnQ0FBZ0Msb0xBQW9MLG9CQUFvQixtQ0FBbUMsS0FBSyxLQUFLLHlCQUF5QiwwRUFBMEUsbUJBQW1CLG1DQUFtQyxLQUFLLEtBQUsseUJBQXlCLGlCQUFpQixtQkFBbUIscUJBQXFCLFlBQVksS0FBSyxVQUFVLHlDQUF5QywrQkFBK0Isc0JBQXNCLHFDQUFxQyx1Q0FBdUMsR0FBRyxZQUFZLElBQUkscUJBQXFCLFNBQVMsMkNBQTJDLEtBQUssV0FBVyxjQUFjLDZNQUE2TSxXQUFXLGVBQWUsa05BQWtOLFdBQVcsR0FBRyx1RkFBdUYsNkJBQTZCLFNBQVMsYUFBYSw0QkFBNEIsK0NBQStDLEVBQUUscUJBQXFCLE1BQU0sbUJBQW1CLE1BQU0sa0JBQWtCLDRDQUE0QyxTQUFTLGtCQUFrQix5REFBeUQsRUFBRSxXQUFXLG1CQUFtQixnQ0FBZ0MsSUFBSSwrQkFBK0IsT0FBTywwQ0FBMEMsc0JBQXNCLFdBQVcsRUFBRSxHQUFHLFNBQVMsU0FBUywyQkFBMkIsdUJBQXVCLGFBQWEsTUFBTSwwQ0FBMEMsK0JBQStCLElBQUksK0JBQStCLE9BQU8sMENBQTBDLHNCQUFzQixZQUFZLHNCQUFzQixXQUFXLEVBQUUsR0FBRyxTQUFTLFNBQVMsMkJBQTJCLGlHQUFpRyxFQUFFLEdBQUcsS0FBSyxrRUFBa0UsTUFBTSxPQUFPLDBDQUEwQyxzQkFBc0IseUNBQXlDLElBQUksU0FBUyw2RUFBNkUsMERBQTBELFNBQVMsb0JBQW9CLCtUQUErVCxrQ0FBa0MsTUFBTSxpQkFBaUIsbURBQW1ELG9CQUFvQixpQkFBaUIsa0hBQWtILElBQUksc0NBQXNDLDBDQUEwQyxTQUFTLHlCQUF5QixHQUFHLGlCQUFpQix5Q0FBeUMsSUFBSSw0RkFBNEYscUhBQXFILFNBQVMsaUNBQWlDLCtCQUErQiwrRkFBK0YsNENBQTRDLElBQUksd0NBQXdDLDhEQUE4RCxJQUFJLHVCQUF1QixZQUFZLGtMQUFrTCxPQUFPLEdBQUcsTUFBTSxVQUFVLEdBQUcsb05BQW9OLE9BQU8sR0FBRyx3S0FBd0ssc0RBQXNELG1DQUFtQyxTQUFTLGlDQUFpQyx1RUFBdUUsSUFBSSx1QkFBdUIsWUFBWSxrTEFBa0wsT0FBTyxHQUFHLE1BQU0sVUFBVSxHQUFHLG9OQUFvTixPQUFPLEdBQUcsc0tBQXNLLGtDQUFrQyxFQUFFLHNEQUFzRCxtQ0FBbUMsU0FBUyxpQ0FBaUMsZUFBZSxnREFBZ0Qsc01BQXNNLDBEQUEwRCw0Q0FBNEMsU0FBUywwQkFBMEIsaUNBQWlDLGVBQWUsWUFBWSx1Q0FBdUMsSUFBSSxnREFBZ0Qsd0lBQXdJLDZIQUE2SCxpRkFBaUYscUVBQXFFLFlBQVksTUFBTSx1QkFBdUIsSUFBSSxrREFBa0QsNEpBQTRKLGdCQUFnQiw2QkFBNkIsc0dBQXNHLFNBQVMscURBQXFELHVHQUF1RyxvR0FBb0csSUFBSSxzQ0FBc0MsdUJBQXVCLDhHQUE4RyxPQUFPLFNBQVMsbURBQW1ELDhEQUE4RCw0REFBNEQsbUNBQW1DLHdCQUF3QixHQUFHLE1BQU0sV0FBVyxFQUFFLEtBQUssR0FBRyxHQUFHLHNCQUFzQiwwQ0FBMEMsc0JBQXNCLEtBQUssc0dBQXNHLDJCQUEyQixzQ0FBc0MseUJBQXlCLG9GQUFvRixLQUFLLHlFQUF5RSxLQUFLLHlCQUF5QixPQUFPLEVBQUUsYUFBYSxPQUFPLEVBQUUsR0FBRyx1QkFBdUIsRUFBRSxFQUFFLGVBQWUsc0NBQXNDLHlGQUF5RixvQkFBb0IseUJBQXlCLEdBQUcsRUFBRSxjQUFjLEdBQUcsYUFBYSwrREFBK0QsK0JBQStCLHFEQUFxRCwyQkFBMkIsK0NBQStDLDZHQUE2RyxXQUFXLDZHQUE2RyxXQUFXLDRHQUE0RyxFQUFFLEVBQUUsNENBQTRDLG1HQUFtRyxXQUFXLG1HQUFtRyxXQUFXLG1HQUFtRyxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxLQUFLLDhEQUE4RCxFQUFFLDJCQUEyQix5Q0FBeUMsRUFBRSxFQUFFLElBQUksY0FBYywwRkFBMEYsUUFBUSw4REFBOEQseUJBQXlCLE1BQU0sbUNBQW1DLElBQUksaUJBQWlCLG1CQUFtQixnRUFBZ0UsRUFBRSxTQUFTLG1CQUFtQixNQUFNLDRCQUE0QixNQUFNLFNBQVMseUVBQXlFLG9IQUFvSCxHQUFHLE1BQU0sY0FBYyxvQkFBb0IsU0FBUywyREFBMkQsK0dBQStHLFlBQVksZUFBZSxLQUFLLElBQUksSUFBSSxFQUFFLE9BQU8sbURBQW1ELFNBQVMsbURBQW1ELE9BQU8sc0RBQXNELHNCQUFzQixxQkFBcUIsMkVBQTJFLEtBQUssTUFBTSxTQUFTLGtEQUFrRCxnR0FBZ0csTUFBTSxxQkFBcUIsSUFBSSxPQUFPLHNEQUFzRCxzQkFBc0IsWUFBWSxzQkFBc0IscUJBQXFCLCtFQUErRSxrREFBa0QsU0FBUyxpQ0FBaUMsMkJBQTJCLDJDQUEyQyxJQUFJLFNBQVMsNEJBQTRCLGNBQWMsOEhBQThILG9IQUFvSCxHQUFHLFlBQVksWUFBWSxhQUFhLEVBQUUsZ0ZBQWdGLGFBQWEsc0RBQXNELFNBQVMsaUNBQWlDLG1CQUFtQiwyQ0FBMkMsSUFBSSxRQUFRLGlCQUFpQixNQUFNLHFCQUFxQixpQ0FBaUMsK0VBQStFLEtBQUssNEJBQTRCLGFBQWEsZ0NBQWdDLEdBQUcsa0NBQWtDLFdBQVcsU0FBUyxZQUFZLHVCQUF1QixNQUFNLEtBQUssTUFBTSx1Q0FBdUMsR0FBRyxLQUFLLDRCQUE0QixjQUFjLDhIQUE4SCxvSEFBb0gsR0FBRyxZQUFZLFlBQVksdUJBQXVCLHNCQUFzQixzQkFBc0Isc0JBQXNCLFVBQVUsb0lBQW9JLFNBQVMsbUNBQW1DLFdBQVcsTUFBTSxjQUFjLFdBQVcsK0JBQStCLFlBQVksMkJBQTJCLGdFQUFnRSxrQkFBa0IsK0RBQStELHVCQUF1QixFQUFFLGdCQUFnQixpREFBaUQsSUFBSSwyQ0FBMkMsU0FBUywwQ0FBMEMsNEdBQTRHLHFGQUFxRixRQUFRLFVBQVUsb0hBQW9ILEtBQUssdUVBQXVFLEtBQUssMk9BQTJPLCtOQUErTixjQUFjLGtIQUFrSCxLQUFLLHVEQUF1RCxRQUFRLDRCQUE0QixFQUFFLHNEQUFzRCxRQUFRLCtCQUErQixFQUFFLDJEQUEyRCxRQUFRLG9DQUFvQyxFQUFFLG9EQUFvRCxRQUFRLDZCQUE2QixFQUFFLG9EQUFvRCxRQUFRLDZCQUE2QixFQUFFLG1EQUFtRCxRQUFRLDRCQUE0QixFQUFFLGVBQWUsK0VBQStFLDhFQUE4RSx3RkFBd0YsaUZBQWlGLFFBQVEsNEJBQTRCLElBQUksSUFBSSxZQUFZLGlFQUFpRSwrRkFBK0YsTUFBTSx3QkFBd0IsNEdBQTRHLG9DQUFvQyw4RUFBOEUseUNBQXlDLFFBQVEsdUJBQXVCLGdGQUFnRix5Q0FBeUMsUUFBUSx1QkFBdUIsSUFBSSxRQUFRLHlEQUF5RCxFQUFFLHdEQUF3RCxFQUFFLFFBQVEsb1JBQW9SLE9BQU8seUJBQXlCLFlBQVksTUFBTSx3QkFBd0IsR0FBRyxpR0FBaUcsUUFBUSwySUFBMkksT0FBTyx5QkFBeUIsYUFBYSwwQkFBMEIsUUFBUSxnREFBZ0QsUUFBUSxzREFBc0QsUUFBUSxvREFBb0QsUUFBUSxpREFBaUQsUUFBUSxnQ0FBZ0MsWUFBWSxXQUFXLHdLQUF3SyxXQUFXLGtEQUFrRCxxQkFBcUIsU0FBUyxHQUFHLGFBQWEsOENBQThDLDRDQUE0Qyw2Q0FBNkMsa0RBQWtELHNCQUFzQix1REFBdUQsdUJBQXVCLHNCQUFzQixhQUFhLDhDQUE4QyxzRkFBc0YsbUZBQW1GLHdGQUF3Riw4REFBOEQsZ0JBQWdCLCtDQUErQyx3RkFBd0Ysb0ZBQW9GLDRJQUE0SSxxREFBcUQsd0JBQXdCLGlFQUFpRSxvRkFBb0YsMklBQTJJLG9EQUFvRCxtQkFBbUIsZUFBZSxZQUFZLEVBQUUsV0FBVyxjQUFjLGNBQWMsZ0VBQWdFLHFCQUFxQixHQUFHLEVBQUUsa1BBQWtQLDRCQUE0Qix1RUFBdUUscUJBQXFCLEdBQUcsSUFBSSwrUEFBK1AsTUFBTSxvQ0FBb0MsOEdBQThHLDZFQUE2RSxxRUFBcUUsbUJBQW1CLHFGQUFxRix1QkFBdUIsMEJBQTBCLHVDQUF1Qyw0Q0FBNEMsOENBQThDLHNEQUFzRCwwQkFBMEIsa0RBQWtELFFBQVEsVUFBVSx1QkFBdUIsc0RBQXNELE9BQU8sRUFBRSxFQUFFLDBCQUEwQixFQUFFLDBCQUEwQix1Q0FBdUMsc0NBQXNDLHNDQUFzQyxHQUFHLGVBQWUsR0FBRyxrSUFBa0ksc0JBQXNCLDBEQUEwRCxzQ0FBc0MsbUJBQW1CLEdBQUcsZUFBZSxHQUFHLDRIQUE0SCxtQkFBbUIscURBQXFELDBCQUEwQixzQkFBc0IsU0FBUywwRkFBMEYsb0VBQW9FLE1BQU0sU0FBUyxpRUFBaUUsZUFBZSxjQUFjLDBCQUEwQixFQUFFLEVBQUUscUJBQXFCLGdDQUFnQyx5QkFBeUIscURBQXFELHdCQUF3QixnQkFBZ0IsSUFBSSxFQUFFLGFBQWEsaUJBQWlCLEtBQUssU0FBUyx5QkFBeUIsRUFBRSxVQUFVLEVBQUUsYUFBYSxnREFBZ0QsTUFBTSxFQUFFLE1BQU0sU0FBUyw4RkFBOEYsK0NBQStDLHFEQUFxRCxJQUFJLE1BQU0sOEVBQThFLGNBQWMsS0FBSywwQkFBMEIsb0JBQW9CLDhEQUE4RCxNQUFNLGFBQWEsc0VBQXNFLEtBQUssR0FBRywwQ0FBMEMsTUFBTSwrQ0FBK0MsTUFBTSw2REFBNkQsTUFBTSxZQUFZLGtFQUFrRSwwQkFBMEIsU0FBUyxLQUFLLEdBQUcseUNBQXlDLE1BQU0sd0NBQXdDLE1BQU0sbUZBQW1GLFlBQVksS0FBSywwQkFBMEIsUUFBUSx5QkFBeUIsOERBQThELDZDQUE2QyxlQUFlLHdCQUF3Qiw2QkFBNkIsVUFBVSx5Q0FBeUMsZUFBZSxXQUFXLEVBQUUsSUFBSSxtR0FBbUcsNkdBQTZHLFNBQVMsT0FBTywrQkFBK0IsdURBQXVELHFHQUFxRyxxTEFBcUwsaUNBQWlDLFNBQVMsNENBQTRDLE1BQU0seUxBQXlMLDRDQUE0Qyx3R0FBd0csb0JBQW9CLG9FQUFvRSxnQ0FBZ0MsRUFBRSxvQkFBb0Isb0VBQW9FLDBCQUEwQixFQUFFLG9CQUFvQiwwRUFBMEUsNEJBQTRCLElBQUksbUVBQW1FLDZCQUE2QiwySEFBMkgsWUFBWSxvREFBb0Qsd0pBQXdKLGFBQWEsUUFBUSxPQUFPLGlEQUFpRCxRQUFRLGdGQUFnRixRQUFRLHdGQUF3RixRQUFRLGtGQUFrRixRQUFRLHlFQUF5RSxRQUFRLHVFQUF1RSxRQUFRLDhCQUE4QixxQkFBcUIsb0JBQW9CLFlBQVksRUFBRSxHQUFHLFFBQVEsMkRBQTJELHNCQUFzQixZQUFZLDZCQUE2QixFQUFFLHlCQUF5QixtREFBbUQsV0FBVyw2QkFBNkIsb0JBQW9CLGdCQUFnQixFQUFFLFVBQVUsbUNBQW1DLGtCQUFrQixZQUFZLFFBQVEsR0FBRyxRQUFRLHNEQUFzRCxzQkFBc0IsVUFBVSxFQUFFLDBEQUEwRCxFQUFFLEdBQUcsUUFBUSxrQkFBa0IsUUFBUSw2Q0FBNkMsc0JBQXNCLDZHQUE2Ryw2QkFBNkIsRUFBRSwyQkFBMkIsa0hBQWtILHVCQUF1QixRQUFRLElBQUksVUFBVSw4QkFBOEIseURBQXlELFdBQVcsbUNBQW1DLG9CQUFvQixnQkFBZ0IsRUFBRSxVQUFVLG1DQUFtQyx1QkFBdUIsa0RBQWtELFdBQVcsNEJBQTRCLG9CQUFvQixnQkFBZ0IsRUFBRSxVQUFVLG1DQUFtQyxzQkFBc0IsWUFBWSxNQUFNLG9CQUFvQix5Q0FBeUMsdUhBQXVILG1CQUFtQixZQUFZLDBCQUEwQix5QkFBeUIsbURBQW1ELE1BQU0sa0RBQWtELE1BQU0sdUJBQXVCLGdEQUFnRCxpQkFBaUIsSUFBSSxxQ0FBcUMsNkVBQTZFLEVBQUUsR0FBRyxrQkFBa0IsMEdBQTBHLHVEQUF1RCxrRUFBa0Usd0NBQXdDLDJCQUEyQixHQUFHLDhCQUE4QiwrRkFBK0Ysb1JBQW9SLElBQUksaUJBQWlCLFNBQVMsa0RBQWtELFNBQVMsc0JBQXNCLHFEQUFxRCxXQUFXLEVBQUUsd0JBQXdCLElBQUksK0lBQStJLE9BQU8scURBQXFELFNBQVMsZ0VBQWdFLHFCQUFxQiwwSkFBMEosa0JBQWtCLEVBQUUsSUFBSSxrQkFBa0IsU0FBUywrREFBK0QsaUJBQWlCLDhEQUE4RCw0QkFBNEIsNkdBQTZHLHdCQUF3QixXQUFXLGNBQWMsNkNBQTZDLEtBQUssTUFBTSw4R0FBOEcsaUNBQWlDLE9BQU8sMEhBQTBILGNBQWMsUUFBUSxtQkFBbUIsV0FBVyw2Q0FBNkMsUUFBUSxNQUFNLGVBQWUsdUNBQXVDLDRCQUE0QixvSkFBb0osc0JBQXNCLDRDQUE0QyxLQUFLLE1BQU0sWUFBWSx1Q0FBdUMsNEJBQTRCLGdKQUFnSixtQkFBbUIsOENBQThDLEtBQUssTUFBTSxxREFBcUQsNkJBQTZCLDhCQUE4QixFQUFFLHdCQUF3QixnR0FBZ0csc0JBQXNCLDRDQUE0QyxLQUFLLE1BQU0sb0ZBQW9GLG1CQUFtQixPQUFPLG1KQUFtSiwwQkFBMEIsNkNBQTZDLFFBQVEsTUFBTSw2RUFBNkUsaUNBQWlDLE9BQU8sa0VBQWtFLGNBQWMsUUFBUSxrQkFBa0IsV0FBVyw2Q0FBNkMsUUFBUSxNQUFNLG1EQUFtRCxLQUFLLFVBQVUsa0RBQWtELG9CQUFvQiw4QkFBOEIsNENBQTRDLFVBQVUsMkRBQTJELEdBQUcsMENBQTBDLGVBQWUsb0dBQW9HLGdEQUFnRCxxQkFBcUI7QUFDM3BqYzs7Ozs7Ozs7Ozs7QUNuNENZOztBQUVaLGtCQUFrQjtBQUNsQixtQkFBbUI7QUFDbkIscUJBQXFCOztBQUVyQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQ0FBbUMsU0FBUztBQUM1QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLFNBQVM7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixTQUFTO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkNBQTJDLFVBQVU7QUFDckQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7Ozs7Ozs7O0FDckpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVZOztBQUVaLGFBQWEsbUJBQU8sQ0FBQyx3REFBVztBQUNoQyxjQUFjLG1CQUFPLENBQUMsb0RBQVM7QUFDL0IsY0FBYyxtQkFBTyxDQUFDLG9EQUFTOztBQUUvQixjQUFjO0FBQ2Qsa0JBQWtCO0FBQ2xCLHlCQUF5Qjs7QUFFekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIscUJBQU07QUFDbkMsSUFBSSxxQkFBTTtBQUNWOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLG9EQUFvRDtBQUN6RTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFVBQVU7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLFlBQVk7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSx3Q0FBd0MsU0FBUztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsaUJBQWlCO0FBQ2pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsY0FBYyxpQkFBaUI7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLFNBQVM7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixTQUFTO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixTQUFTO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELEVBQUU7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsa0JBQWtCLFNBQVM7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLGVBQWU7QUFDeEM7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EseUJBQXlCLFFBQVE7QUFDakM7QUFDQSxzQkFBc0IsZUFBZTtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsWUFBWTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsc0JBQXNCLFNBQVM7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHNCQUFzQixTQUFTO0FBQy9CO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHNCQUFzQixTQUFTO0FBQy9CO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixrQkFBa0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLG9CQUFvQixjQUFjO0FBQ2xDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx3REFBd0QsT0FBTztBQUMvRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esd0RBQXdELE9BQU87QUFDL0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7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ZSxFQUFFLEdBQUcsQ0FBQyxXQUFXO2lCQUNoQyxDQUFDLENBQUM7YUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELGdCQUFnQixFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNsQyx5Q0FBeUM7WUFDekMsTUFBTSxnREFBUyxDQUFDLE1BQU0sQ0FBQyxJQUFXLENBQUMsQ0FBQztRQUNyQyxDQUFDO0tBQ0QsQ0FBQyxDQUFDO0lBRUgsTUFBTSxvREFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBRWxCLDBFQUEwRTtJQUMxRSxNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ25ELE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN2RCxNQUFNLG9EQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sR0FBRyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM1QyxDQUFDLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxLQUFLLFVBQVUseUJBQXlCO0lBQ3ZDLCtDQUErQztJQUMvQyxNQUFNLEdBQUcsR0FBRyxNQUFNLEdBQUcsQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUM7SUFFL0MsbURBQW1EO0lBQ25ELE1BQU0sUUFBUSxHQUEyRCxNQUFNLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNqRyxPQUFPLFFBQVEsQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDO0FBQ3RDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tc3VwcG9ydC1jb250ZXh0LWFuZC1pbnRlbnRzLy4uLy4uL25vZGVfbW9kdWxlcy9Ab3BlbmZpbi9jbG91ZC1pbnRlcm9wL291dC9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tc3VwcG9ydC1jb250ZXh0LWFuZC1pbnRlbnRzLy4uLy4uL25vZGVfbW9kdWxlcy9Ab3BlbmZpbi93b3Jrc3BhY2UtcGxhdGZvcm0vaW5kZXguanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLXN1cHBvcnQtY29udGV4dC1hbmQtaW50ZW50cy8uLi8uLi9ub2RlX21vZHVsZXMvQG9wZW5maW4vd29ya3NwYWNlL2luZGV4LmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1zdXBwb3J0LWNvbnRleHQtYW5kLWludGVudHMvLi4vLi4vbm9kZV9tb2R1bGVzL2Jhc2U2NC1qcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tc3VwcG9ydC1jb250ZXh0LWFuZC1pbnRlbnRzLy4uLy4uL25vZGVfbW9kdWxlcy9idWZmZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLXN1cHBvcnQtY29udGV4dC1hbmQtaW50ZW50cy8uLi8uLi9ub2RlX21vZHVsZXMvaWVlZTc1NC9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tc3VwcG9ydC1jb250ZXh0LWFuZC1pbnRlbnRzLy4uLy4uL25vZGVfbW9kdWxlcy9pc2FycmF5L2luZGV4LmpzIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1zdXBwb3J0LWNvbnRleHQtYW5kLWludGVudHMvLi9jbGllbnQvc3JjL2FwcHMudHMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLXN1cHBvcnQtY29udGV4dC1hbmQtaW50ZW50cy8uL2NsaWVudC9zcmMvaW50ZXJvcGJyb2tlci50cyIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tc3VwcG9ydC1jb250ZXh0LWFuZC1pbnRlbnRzL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1zdXBwb3J0LWNvbnRleHQtYW5kLWludGVudHMvd2VicGFjay9ydW50aW1lL2FtZCBvcHRpb25zIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1zdXBwb3J0LWNvbnRleHQtYW5kLWludGVudHMvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLXN1cHBvcnQtY29udGV4dC1hbmQtaW50ZW50cy93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLXN1cHBvcnQtY29udGV4dC1hbmQtaW50ZW50cy93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL29wZW5maW4td29ya3NwYWNlLS1zdXBwb3J0LWNvbnRleHQtYW5kLWludGVudHMvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9vcGVuZmluLXdvcmtzcGFjZS0tc3VwcG9ydC1jb250ZXh0LWFuZC1pbnRlbnRzL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vb3BlbmZpbi13b3Jrc3BhY2UtLXN1cHBvcnQtY29udGV4dC1hbmQtaW50ZW50cy8uL2NsaWVudC9zcmMvcHJvdmlkZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJztcblxuZnVuY3Rpb24gYmluZChmbiwgdGhpc0FyZykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcCgpIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuLy8gdXRpbHMgaXMgYSBsaWJyYXJ5IG9mIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBub24tc3BlY2lmaWMgdG8gYXhpb3NcblxuY29uc3Qge3RvU3RyaW5nfSA9IE9iamVjdC5wcm90b3R5cGU7XG5jb25zdCB7Z2V0UHJvdG90eXBlT2Z9ID0gT2JqZWN0O1xuXG5jb25zdCBraW5kT2YgPSAoY2FjaGUgPT4gdGhpbmcgPT4ge1xuICAgIGNvbnN0IHN0ciA9IHRvU3RyaW5nLmNhbGwodGhpbmcpO1xuICAgIHJldHVybiBjYWNoZVtzdHJdIHx8IChjYWNoZVtzdHJdID0gc3RyLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpKTtcbn0pKE9iamVjdC5jcmVhdGUobnVsbCkpO1xuXG5jb25zdCBraW5kT2ZUZXN0ID0gKHR5cGUpID0+IHtcbiAgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuICh0aGluZykgPT4ga2luZE9mKHRoaW5nKSA9PT0gdHlwZVxufTtcblxuY29uc3QgdHlwZU9mVGVzdCA9IHR5cGUgPT4gdGhpbmcgPT4gdHlwZW9mIHRoaW5nID09PSB0eXBlO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3Qge2lzQXJyYXl9ID0gQXJyYXk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNVbmRlZmluZWQgPSB0eXBlT2ZUZXN0KCd1bmRlZmluZWQnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0J1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsKSAmJiB2YWwuY29uc3RydWN0b3IgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbC5jb25zdHJ1Y3RvcilcbiAgICAmJiBpc0Z1bmN0aW9uKHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikgJiYgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNBcnJheUJ1ZmZlciA9IGtpbmRPZlRlc3QoJ0FycmF5QnVmZmVyJyk7XG5cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXJWaWV3KHZhbCkge1xuICBsZXQgcmVzdWx0O1xuICBpZiAoKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpICYmIChBcnJheUJ1ZmZlci5pc1ZpZXcpKSB7XG4gICAgcmVzdWx0ID0gQXJyYXlCdWZmZXIuaXNWaWV3KHZhbCk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gKHZhbCkgJiYgKHZhbC5idWZmZXIpICYmIChpc0FycmF5QnVmZmVyKHZhbC5idWZmZXIpKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyaW5nXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmluZywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzU3RyaW5nID0gdHlwZU9mVGVzdCgnc3RyaW5nJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGdW5jdGlvbiA9IHR5cGVPZlRlc3QoJ2Z1bmN0aW9uJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBOdW1iZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgTnVtYmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNOdW1iZXIgPSB0eXBlT2ZUZXN0KCdudW1iZXInKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNPYmplY3QgPSAodGhpbmcpID0+IHRoaW5nICE9PSBudWxsICYmIHR5cGVvZiB0aGluZyA9PT0gJ29iamVjdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCb29sZWFuXG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCb29sZWFuLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNCb29sZWFuID0gdGhpbmcgPT4gdGhpbmcgPT09IHRydWUgfHwgdGhpbmcgPT09IGZhbHNlO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzUGxhaW5PYmplY3QgPSAodmFsKSA9PiB7XG4gIGlmIChraW5kT2YodmFsKSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBwcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZih2YWwpO1xuICByZXR1cm4gKHByb3RvdHlwZSA9PT0gbnVsbCB8fCBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkgPT09IG51bGwpICYmICEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIHZhbCkgJiYgIShTeW1ib2wuaXRlcmF0b3IgaW4gdmFsKTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBEYXRlXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIERhdGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0RhdGUgPSBraW5kT2ZUZXN0KCdEYXRlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0ZpbGUgPSBraW5kT2ZUZXN0KCdGaWxlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCbG9iXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJsb2IsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Jsb2IgPSBraW5kT2ZUZXN0KCdCbG9iJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlTGlzdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGaWxlTGlzdCA9IGtpbmRPZlRlc3QoJ0ZpbGVMaXN0Jyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJlYW1cbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNTdHJlYW0gPSAodmFsKSA9PiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gRm9ybURhdGEsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Zvcm1EYXRhID0gKHRoaW5nKSA9PiB7XG4gIGxldCBraW5kO1xuICByZXR1cm4gdGhpbmcgJiYgKFxuICAgICh0eXBlb2YgRm9ybURhdGEgPT09ICdmdW5jdGlvbicgJiYgdGhpbmcgaW5zdGFuY2VvZiBGb3JtRGF0YSkgfHwgKFxuICAgICAgaXNGdW5jdGlvbih0aGluZy5hcHBlbmQpICYmIChcbiAgICAgICAgKGtpbmQgPSBraW5kT2YodGhpbmcpKSA9PT0gJ2Zvcm1kYXRhJyB8fFxuICAgICAgICAvLyBkZXRlY3QgZm9ybS1kYXRhIGluc3RhbmNlXG4gICAgICAgIChraW5kID09PSAnb2JqZWN0JyAmJiBpc0Z1bmN0aW9uKHRoaW5nLnRvU3RyaW5nKSAmJiB0aGluZy50b1N0cmluZygpID09PSAnW29iamVjdCBGb3JtRGF0YV0nKVxuICAgICAgKVxuICAgIClcbiAgKVxufTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzVVJMU2VhcmNoUGFyYW1zID0ga2luZE9mVGVzdCgnVVJMU2VhcmNoUGFyYW1zJyk7XG5cbmNvbnN0IFtpc1JlYWRhYmxlU3RyZWFtLCBpc1JlcXVlc3QsIGlzUmVzcG9uc2UsIGlzSGVhZGVyc10gPSBbJ1JlYWRhYmxlU3RyZWFtJywgJ1JlcXVlc3QnLCAnUmVzcG9uc2UnLCAnSGVhZGVycyddLm1hcChraW5kT2ZUZXN0KTtcblxuLyoqXG4gKiBUcmltIGV4Y2VzcyB3aGl0ZXNwYWNlIG9mZiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBTdHJpbmcgdG8gdHJpbVxuICpcbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBTdHJpbmcgZnJlZWQgb2YgZXhjZXNzIHdoaXRlc3BhY2VcbiAqL1xuY29uc3QgdHJpbSA9IChzdHIpID0+IHN0ci50cmltID9cbiAgc3RyLnRyaW0oKSA6IHN0ci5yZXBsYWNlKC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZywgJycpO1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbiBBcnJheSBvciBhbiBPYmplY3QgaW52b2tpbmcgYSBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmIGBvYmpgIGlzIGFuIEFycmF5IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwgaW5kZXgsIGFuZCBjb21wbGV0ZSBhcnJheSBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmICdvYmonIGlzIGFuIE9iamVjdCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGtleSwgYW5kIGNvbXBsZXRlIG9iamVjdCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gb2JqIFRoZSBvYmplY3QgdG8gaXRlcmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGNhbGxiYWNrIHRvIGludm9rZSBmb3IgZWFjaCBpdGVtXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBbYWxsT3duS2V5cyA9IGZhbHNlXVxuICogQHJldHVybnMge2FueX1cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaChvYmosIGZuLCB7YWxsT3duS2V5cyA9IGZhbHNlfSA9IHt9KSB7XG4gIC8vIERvbid0IGJvdGhlciBpZiBubyB2YWx1ZSBwcm92aWRlZFxuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IGk7XG4gIGxldCBsO1xuXG4gIC8vIEZvcmNlIGFuIGFycmF5IGlmIG5vdCBhbHJlYWR5IHNvbWV0aGluZyBpdGVyYWJsZVxuICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBvYmogPSBbb2JqXTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgYXJyYXkgdmFsdWVzXG4gICAgZm9yIChpID0gMCwgbCA9IG9iai5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgb2JqZWN0IGtleXNcbiAgICBjb25zdCBrZXlzID0gYWxsT3duS2V5cyA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikgOiBPYmplY3Qua2V5cyhvYmopO1xuICAgIGNvbnN0IGxlbiA9IGtleXMubGVuZ3RoO1xuICAgIGxldCBrZXk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtrZXldLCBrZXksIG9iaik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRLZXkob2JqLCBrZXkpIHtcbiAga2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICBsZXQgX2tleTtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBfa2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoa2V5ID09PSBfa2V5LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHJldHVybiBfa2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuY29uc3QgX2dsb2JhbCA9ICgoKSA9PiB7XG4gIC8qZXNsaW50IG5vLXVuZGVmOjAqL1xuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBnbG9iYWxUaGlzO1xuICByZXR1cm4gdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogZ2xvYmFsKVxufSkoKTtcblxuY29uc3QgaXNDb250ZXh0RGVmaW5lZCA9IChjb250ZXh0KSA9PiAhaXNVbmRlZmluZWQoY29udGV4dCkgJiYgY29udGV4dCAhPT0gX2dsb2JhbDtcblxuLyoqXG4gKiBBY2NlcHRzIHZhcmFyZ3MgZXhwZWN0aW5nIGVhY2ggYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0LCB0aGVuXG4gKiBpbW11dGFibHkgbWVyZ2VzIHRoZSBwcm9wZXJ0aWVzIG9mIGVhY2ggb2JqZWN0IGFuZCByZXR1cm5zIHJlc3VsdC5cbiAqXG4gKiBXaGVuIG11bHRpcGxlIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBrZXkgdGhlIGxhdGVyIG9iamVjdCBpblxuICogdGhlIGFyZ3VtZW50cyBsaXN0IHdpbGwgdGFrZSBwcmVjZWRlbmNlLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZXN1bHQgPSBtZXJnZSh7Zm9vOiAxMjN9LCB7Zm9vOiA0NTZ9KTtcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5mb28pOyAvLyBvdXRwdXRzIDQ1NlxuICogYGBgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iajEgT2JqZWN0IHRvIG1lcmdlXG4gKlxuICogQHJldHVybnMge09iamVjdH0gUmVzdWx0IG9mIGFsbCBtZXJnZSBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIG1lcmdlKC8qIG9iajEsIG9iajIsIG9iajMsIC4uLiAqLykge1xuICBjb25zdCB7Y2FzZWxlc3N9ID0gaXNDb250ZXh0RGVmaW5lZCh0aGlzKSAmJiB0aGlzIHx8IHt9O1xuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgY29uc3QgYXNzaWduVmFsdWUgPSAodmFsLCBrZXkpID0+IHtcbiAgICBjb25zdCB0YXJnZXRLZXkgPSBjYXNlbGVzcyAmJiBmaW5kS2V5KHJlc3VsdCwga2V5KSB8fCBrZXk7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QocmVzdWx0W3RhcmdldEtleV0pICYmIGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSBtZXJnZShyZXN1bHRbdGFyZ2V0S2V5XSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSBtZXJnZSh7fSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSB2YWwuc2xpY2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSB2YWw7XG4gICAgfVxuICB9O1xuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGFyZ3VtZW50c1tpXSAmJiBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0ZW5kcyBvYmplY3QgYSBieSBtdXRhYmx5IGFkZGluZyB0byBpdCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXG4gKiBAcGFyYW0ge09iamVjdH0gYiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBUaGUgb2JqZWN0IHRvIGJpbmQgZnVuY3Rpb24gdG9cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFthbGxPd25LZXlzXVxuICogQHJldHVybnMge09iamVjdH0gVGhlIHJlc3VsdGluZyB2YWx1ZSBvZiBvYmplY3QgYVxuICovXG5jb25zdCBleHRlbmQgPSAoYSwgYiwgdGhpc0FyZywge2FsbE93bktleXN9PSB7fSkgPT4ge1xuICBmb3JFYWNoKGIsICh2YWwsIGtleSkgPT4ge1xuICAgIGlmICh0aGlzQXJnICYmIGlzRnVuY3Rpb24odmFsKSkge1xuICAgICAgYVtrZXldID0gYmluZCh2YWwsIHRoaXNBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhW2tleV0gPSB2YWw7XG4gICAgfVxuICB9LCB7YWxsT3duS2V5c30pO1xuICByZXR1cm4gYTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGJ5dGUgb3JkZXIgbWFya2VyLiBUaGlzIGNhdGNoZXMgRUYgQkIgQkYgKHRoZSBVVEYtOCBCT00pXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgd2l0aCBCT01cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBjb250ZW50IHZhbHVlIHdpdGhvdXQgQk9NXG4gKi9cbmNvbnN0IHN0cmlwQk9NID0gKGNvbnRlbnQpID0+IHtcbiAgaWYgKGNvbnRlbnQuY2hhckNvZGVBdCgwKSA9PT0gMHhGRUZGKSB7XG4gICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMSk7XG4gIH1cbiAgcmV0dXJuIGNvbnRlbnQ7XG59O1xuXG4vKipcbiAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHN1cGVyQ29uc3RydWN0b3JcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcHJvcHNdXG4gKiBAcGFyYW0ge29iamVjdH0gW2Rlc2NyaXB0b3JzXVxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5jb25zdCBpbmhlcml0cyA9IChjb25zdHJ1Y3Rvciwgc3VwZXJDb25zdHJ1Y3RvciwgcHJvcHMsIGRlc2NyaXB0b3JzKSA9PiB7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIGRlc2NyaXB0b3JzKTtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY29uc3RydWN0b3I7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb25zdHJ1Y3RvciwgJ3N1cGVyJywge1xuICAgIHZhbHVlOiBzdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZVxuICB9KTtcbiAgcHJvcHMgJiYgT2JqZWN0LmFzc2lnbihjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3BzKTtcbn07XG5cbi8qKlxuICogUmVzb2x2ZSBvYmplY3Qgd2l0aCBkZWVwIHByb3RvdHlwZSBjaGFpbiB0byBhIGZsYXQgb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlT2JqIHNvdXJjZSBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBbZGVzdE9ial1cbiAqIEBwYXJhbSB7RnVuY3Rpb258Qm9vbGVhbn0gW2ZpbHRlcl1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcm9wRmlsdGVyXVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cbmNvbnN0IHRvRmxhdE9iamVjdCA9IChzb3VyY2VPYmosIGRlc3RPYmosIGZpbHRlciwgcHJvcEZpbHRlcikgPT4ge1xuICBsZXQgcHJvcHM7XG4gIGxldCBpO1xuICBsZXQgcHJvcDtcbiAgY29uc3QgbWVyZ2VkID0ge307XG5cbiAgZGVzdE9iaiA9IGRlc3RPYmogfHwge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICBpZiAoc291cmNlT2JqID09IG51bGwpIHJldHVybiBkZXN0T2JqO1xuXG4gIGRvIHtcbiAgICBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZU9iaik7XG4gICAgaSA9IHByb3BzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgcHJvcCA9IHByb3BzW2ldO1xuICAgICAgaWYgKCghcHJvcEZpbHRlciB8fCBwcm9wRmlsdGVyKHByb3AsIHNvdXJjZU9iaiwgZGVzdE9iaikpICYmICFtZXJnZWRbcHJvcF0pIHtcbiAgICAgICAgZGVzdE9ialtwcm9wXSA9IHNvdXJjZU9ialtwcm9wXTtcbiAgICAgICAgbWVyZ2VkW3Byb3BdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc291cmNlT2JqID0gZmlsdGVyICE9PSBmYWxzZSAmJiBnZXRQcm90b3R5cGVPZihzb3VyY2VPYmopO1xuICB9IHdoaWxlIChzb3VyY2VPYmogJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKHNvdXJjZU9iaiwgZGVzdE9iaikpICYmIHNvdXJjZU9iaiAhPT0gT2JqZWN0LnByb3RvdHlwZSk7XG5cbiAgcmV0dXJuIGRlc3RPYmo7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIHN0cmluZyBlbmRzIHdpdGggdGhlIGNoYXJhY3RlcnMgb2YgYSBzcGVjaWZpZWQgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFN0cmluZ1xuICogQHBhcmFtIHtOdW1iZXJ9IFtwb3NpdGlvbj0gMF1cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgZW5kc1dpdGggPSAoc3RyLCBzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKSA9PiB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAocG9zaXRpb24gPT09IHVuZGVmaW5lZCB8fCBwb3NpdGlvbiA+IHN0ci5sZW5ndGgpIHtcbiAgICBwb3NpdGlvbiA9IHN0ci5sZW5ndGg7XG4gIH1cbiAgcG9zaXRpb24gLT0gc2VhcmNoU3RyaW5nLmxlbmd0aDtcbiAgY29uc3QgbGFzdEluZGV4ID0gc3RyLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbik7XG4gIHJldHVybiBsYXN0SW5kZXggIT09IC0xICYmIGxhc3RJbmRleCA9PT0gcG9zaXRpb247XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyBuZXcgYXJyYXkgZnJvbSBhcnJheSBsaWtlIG9iamVjdCBvciBudWxsIGlmIGZhaWxlZFxuICpcbiAqIEBwYXJhbSB7Kn0gW3RoaW5nXVxuICpcbiAqIEByZXR1cm5zIHs/QXJyYXl9XG4gKi9cbmNvbnN0IHRvQXJyYXkgPSAodGhpbmcpID0+IHtcbiAgaWYgKCF0aGluZykgcmV0dXJuIG51bGw7XG4gIGlmIChpc0FycmF5KHRoaW5nKSkgcmV0dXJuIHRoaW5nO1xuICBsZXQgaSA9IHRoaW5nLmxlbmd0aDtcbiAgaWYgKCFpc051bWJlcihpKSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGFyciA9IG5ldyBBcnJheShpKTtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBhcnJbaV0gPSB0aGluZ1tpXTtcbiAgfVxuICByZXR1cm4gYXJyO1xufTtcblxuLyoqXG4gKiBDaGVja2luZyBpZiB0aGUgVWludDhBcnJheSBleGlzdHMgYW5kIGlmIGl0IGRvZXMsIGl0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiB0aGVcbiAqIHRoaW5nIHBhc3NlZCBpbiBpcyBhbiBpbnN0YW5jZSBvZiBVaW50OEFycmF5XG4gKlxuICogQHBhcmFtIHtUeXBlZEFycmF5fVxuICpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbmNvbnN0IGlzVHlwZWRBcnJheSA9IChUeXBlZEFycmF5ID0+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIHRoaW5nID0+IHtcbiAgICByZXR1cm4gVHlwZWRBcnJheSAmJiB0aGluZyBpbnN0YW5jZW9mIFR5cGVkQXJyYXk7XG4gIH07XG59KSh0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2V0UHJvdG90eXBlT2YoVWludDhBcnJheSkpO1xuXG4vKipcbiAqIEZvciBlYWNoIGVudHJ5IGluIHRoZSBvYmplY3QsIGNhbGwgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGtleSBhbmQgdmFsdWUuXG4gKlxuICogQHBhcmFtIHtPYmplY3Q8YW55LCBhbnk+fSBvYmogLSBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggZW50cnkuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmNvbnN0IGZvckVhY2hFbnRyeSA9IChvYmosIGZuKSA9PiB7XG4gIGNvbnN0IGdlbmVyYXRvciA9IG9iaiAmJiBvYmpbU3ltYm9sLml0ZXJhdG9yXTtcblxuICBjb25zdCBpdGVyYXRvciA9IGdlbmVyYXRvci5jYWxsKG9iaik7XG5cbiAgbGV0IHJlc3VsdDtcblxuICB3aGlsZSAoKHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKSkgJiYgIXJlc3VsdC5kb25lKSB7XG4gICAgY29uc3QgcGFpciA9IHJlc3VsdC52YWx1ZTtcbiAgICBmbi5jYWxsKG9iaiwgcGFpclswXSwgcGFpclsxXSk7XG4gIH1cbn07XG5cbi8qKlxuICogSXQgdGFrZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gYW5kIGEgc3RyaW5nLCBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBhbGwgdGhlIG1hdGNoZXNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVnRXhwIC0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBhZ2FpbnN0LlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFRoZSBzdHJpbmcgdG8gc2VhcmNoLlxuICpcbiAqIEByZXR1cm5zIHtBcnJheTxib29sZWFuPn1cbiAqL1xuY29uc3QgbWF0Y2hBbGwgPSAocmVnRXhwLCBzdHIpID0+IHtcbiAgbGV0IG1hdGNoZXM7XG4gIGNvbnN0IGFyciA9IFtdO1xuXG4gIHdoaWxlICgobWF0Y2hlcyA9IHJlZ0V4cC5leGVjKHN0cikpICE9PSBudWxsKSB7XG4gICAgYXJyLnB1c2gobWF0Y2hlcyk7XG4gIH1cblxuICByZXR1cm4gYXJyO1xufTtcblxuLyogQ2hlY2tpbmcgaWYgdGhlIGtpbmRPZlRlc3QgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gcGFzc2VkIGFuIEhUTUxGb3JtRWxlbWVudC4gKi9cbmNvbnN0IGlzSFRNTEZvcm0gPSBraW5kT2ZUZXN0KCdIVE1MRm9ybUVsZW1lbnQnKTtcblxuY29uc3QgdG9DYW1lbENhc2UgPSBzdHIgPT4ge1xuICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXFxzXShbYS16XFxkXSkoXFx3KikvZyxcbiAgICBmdW5jdGlvbiByZXBsYWNlcihtLCBwMSwgcDIpIHtcbiAgICAgIHJldHVybiBwMS50b1VwcGVyQ2FzZSgpICsgcDI7XG4gICAgfVxuICApO1xufTtcblxuLyogQ3JlYXRpbmcgYSBmdW5jdGlvbiB0aGF0IHdpbGwgY2hlY2sgaWYgYW4gb2JqZWN0IGhhcyBhIHByb3BlcnR5LiAqL1xuY29uc3QgaGFzT3duUHJvcGVydHkgPSAoKHtoYXNPd25Qcm9wZXJ0eX0pID0+IChvYmosIHByb3ApID0+IGhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkoT2JqZWN0LnByb3RvdHlwZSk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFJlZ0V4cCBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1JlZ0V4cCA9IGtpbmRPZlRlc3QoJ1JlZ0V4cCcpO1xuXG5jb25zdCByZWR1Y2VEZXNjcmlwdG9ycyA9IChvYmosIHJlZHVjZXIpID0+IHtcbiAgY29uc3QgZGVzY3JpcHRvcnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmopO1xuICBjb25zdCByZWR1Y2VkRGVzY3JpcHRvcnMgPSB7fTtcblxuICBmb3JFYWNoKGRlc2NyaXB0b3JzLCAoZGVzY3JpcHRvciwgbmFtZSkgPT4ge1xuICAgIGxldCByZXQ7XG4gICAgaWYgKChyZXQgPSByZWR1Y2VyKGRlc2NyaXB0b3IsIG5hbWUsIG9iaikpICE9PSBmYWxzZSkge1xuICAgICAgcmVkdWNlZERlc2NyaXB0b3JzW25hbWVdID0gcmV0IHx8IGRlc2NyaXB0b3I7XG4gICAgfVxuICB9KTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvYmosIHJlZHVjZWREZXNjcmlwdG9ycyk7XG59O1xuXG4vKipcbiAqIE1ha2VzIGFsbCBtZXRob2RzIHJlYWQtb25seVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICovXG5cbmNvbnN0IGZyZWV6ZU1ldGhvZHMgPSAob2JqKSA9PiB7XG4gIHJlZHVjZURlc2NyaXB0b3JzKG9iaiwgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICAvLyBza2lwIHJlc3RyaWN0ZWQgcHJvcHMgaW4gc3RyaWN0IG1vZGVcbiAgICBpZiAoaXNGdW5jdGlvbihvYmopICYmIFsnYXJndW1lbnRzJywgJ2NhbGxlcicsICdjYWxsZWUnXS5pbmRleE9mKG5hbWUpICE9PSAtMSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gb2JqW25hbWVdO1xuXG4gICAgaWYgKCFpc0Z1bmN0aW9uKHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZmFsc2U7XG5cbiAgICBpZiAoJ3dyaXRhYmxlJyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgICBkZXNjcmlwdG9yLndyaXRhYmxlID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFkZXNjcmlwdG9yLnNldCkge1xuICAgICAgZGVzY3JpcHRvci5zZXQgPSAoKSA9PiB7XG4gICAgICAgIHRocm93IEVycm9yKCdDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCBcXCcnICsgbmFtZSArICdcXCcnKTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcbn07XG5cbmNvbnN0IHRvT2JqZWN0U2V0ID0gKGFycmF5T3JTdHJpbmcsIGRlbGltaXRlcikgPT4ge1xuICBjb25zdCBvYmogPSB7fTtcblxuICBjb25zdCBkZWZpbmUgPSAoYXJyKSA9PiB7XG4gICAgYXJyLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgb2JqW3ZhbHVlXSA9IHRydWU7XG4gICAgfSk7XG4gIH07XG5cbiAgaXNBcnJheShhcnJheU9yU3RyaW5nKSA/IGRlZmluZShhcnJheU9yU3RyaW5nKSA6IGRlZmluZShTdHJpbmcoYXJyYXlPclN0cmluZykuc3BsaXQoZGVsaW1pdGVyKSk7XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcblxuY29uc3QgdG9GaW5pdGVOdW1iZXIgPSAodmFsdWUsIGRlZmF1bHRWYWx1ZSkgPT4ge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUodmFsdWUgPSArdmFsdWUpID8gdmFsdWUgOiBkZWZhdWx0VmFsdWU7XG59O1xuXG5jb25zdCBBTFBIQSA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eic7XG5cbmNvbnN0IERJR0lUID0gJzAxMjM0NTY3ODknO1xuXG5jb25zdCBBTFBIQUJFVCA9IHtcbiAgRElHSVQsXG4gIEFMUEhBLFxuICBBTFBIQV9ESUdJVDogQUxQSEEgKyBBTFBIQS50b1VwcGVyQ2FzZSgpICsgRElHSVRcbn07XG5cbmNvbnN0IGdlbmVyYXRlU3RyaW5nID0gKHNpemUgPSAxNiwgYWxwaGFiZXQgPSBBTFBIQUJFVC5BTFBIQV9ESUdJVCkgPT4ge1xuICBsZXQgc3RyID0gJyc7XG4gIGNvbnN0IHtsZW5ndGh9ID0gYWxwaGFiZXQ7XG4gIHdoaWxlIChzaXplLS0pIHtcbiAgICBzdHIgKz0gYWxwaGFiZXRbTWF0aC5yYW5kb20oKSAqIGxlbmd0aHwwXTtcbiAgfVxuXG4gIHJldHVybiBzdHI7XG59O1xuXG4vKipcbiAqIElmIHRoZSB0aGluZyBpcyBhIEZvcm1EYXRhIG9iamVjdCwgcmV0dXJuIHRydWUsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXG4gKlxuICogQHBhcmFtIHt1bmtub3dufSB0aGluZyAtIFRoZSB0aGluZyB0byBjaGVjay5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNTcGVjQ29tcGxpYW50Rm9ybSh0aGluZykge1xuICByZXR1cm4gISEodGhpbmcgJiYgaXNGdW5jdGlvbih0aGluZy5hcHBlbmQpICYmIHRoaW5nW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdGb3JtRGF0YScgJiYgdGhpbmdbU3ltYm9sLml0ZXJhdG9yXSk7XG59XG5cbmNvbnN0IHRvSlNPTk9iamVjdCA9IChvYmopID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgQXJyYXkoMTApO1xuXG4gIGNvbnN0IHZpc2l0ID0gKHNvdXJjZSwgaSkgPT4ge1xuXG4gICAgaWYgKGlzT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIGlmIChzdGFjay5pbmRleE9mKHNvdXJjZSkgPj0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmKCEoJ3RvSlNPTicgaW4gc291cmNlKSkge1xuICAgICAgICBzdGFja1tpXSA9IHNvdXJjZTtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gaXNBcnJheShzb3VyY2UpID8gW10gOiB7fTtcblxuICAgICAgICBmb3JFYWNoKHNvdXJjZSwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICBjb25zdCByZWR1Y2VkVmFsdWUgPSB2aXNpdCh2YWx1ZSwgaSArIDEpO1xuICAgICAgICAgICFpc1VuZGVmaW5lZChyZWR1Y2VkVmFsdWUpICYmICh0YXJnZXRba2V5XSA9IHJlZHVjZWRWYWx1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN0YWNrW2ldID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfTtcblxuICByZXR1cm4gdmlzaXQob2JqLCAwKTtcbn07XG5cbmNvbnN0IGlzQXN5bmNGbiA9IGtpbmRPZlRlc3QoJ0FzeW5jRnVuY3Rpb24nKTtcblxuY29uc3QgaXNUaGVuYWJsZSA9ICh0aGluZykgPT5cbiAgdGhpbmcgJiYgKGlzT2JqZWN0KHRoaW5nKSB8fCBpc0Z1bmN0aW9uKHRoaW5nKSkgJiYgaXNGdW5jdGlvbih0aGluZy50aGVuKSAmJiBpc0Z1bmN0aW9uKHRoaW5nLmNhdGNoKTtcblxuLy8gb3JpZ2luYWwgY29kZVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0RpZ2l0YWxCcmFpbkpTL0F4aW9zUHJvbWlzZS9ibG9iLzE2ZGVhYjEzNzEwZWMwOTc3OTkyMjEzMWYzZmE1OTU0MzIwZjgzYWIvbGliL3V0aWxzLmpzI0wxMS1MMzRcblxuY29uc3QgX3NldEltbWVkaWF0ZSA9ICgoc2V0SW1tZWRpYXRlU3VwcG9ydGVkLCBwb3N0TWVzc2FnZVN1cHBvcnRlZCkgPT4ge1xuICBpZiAoc2V0SW1tZWRpYXRlU3VwcG9ydGVkKSB7XG4gICAgcmV0dXJuIHNldEltbWVkaWF0ZTtcbiAgfVxuXG4gIHJldHVybiBwb3N0TWVzc2FnZVN1cHBvcnRlZCA/ICgodG9rZW4sIGNhbGxiYWNrcykgPT4ge1xuICAgIF9nbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgKHtzb3VyY2UsIGRhdGF9KSA9PiB7XG4gICAgICBpZiAoc291cmNlID09PSBfZ2xvYmFsICYmIGRhdGEgPT09IHRva2VuKSB7XG4gICAgICAgIGNhbGxiYWNrcy5sZW5ndGggJiYgY2FsbGJhY2tzLnNoaWZ0KCkoKTtcbiAgICAgIH1cbiAgICB9LCBmYWxzZSk7XG5cbiAgICByZXR1cm4gKGNiKSA9PiB7XG4gICAgICBjYWxsYmFja3MucHVzaChjYik7XG4gICAgICBfZ2xvYmFsLnBvc3RNZXNzYWdlKHRva2VuLCBcIipcIik7XG4gICAgfVxuICB9KShgYXhpb3NAJHtNYXRoLnJhbmRvbSgpfWAsIFtdKSA6IChjYikgPT4gc2V0VGltZW91dChjYik7XG59KShcbiAgdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gJ2Z1bmN0aW9uJyxcbiAgaXNGdW5jdGlvbihfZ2xvYmFsLnBvc3RNZXNzYWdlKVxuKTtcblxuY29uc3QgYXNhcCA9IHR5cGVvZiBxdWV1ZU1pY3JvdGFzayAhPT0gJ3VuZGVmaW5lZCcgP1xuICBxdWV1ZU1pY3JvdGFzay5iaW5kKF9nbG9iYWwpIDogKCB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJvY2Vzcy5uZXh0VGljayB8fCBfc2V0SW1tZWRpYXRlKTtcblxuLy8gKioqKioqKioqKioqKioqKioqKioqXG5cbnZhciB1dGlscyQxID0ge1xuICBpc0FycmF5LFxuICBpc0FycmF5QnVmZmVyLFxuICBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXcsXG4gIGlzU3RyaW5nLFxuICBpc051bWJlcixcbiAgaXNCb29sZWFuLFxuICBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNSZWFkYWJsZVN0cmVhbSxcbiAgaXNSZXF1ZXN0LFxuICBpc1Jlc3BvbnNlLFxuICBpc0hlYWRlcnMsXG4gIGlzVW5kZWZpbmVkLFxuICBpc0RhdGUsXG4gIGlzRmlsZSxcbiAgaXNCbG9iLFxuICBpc1JlZ0V4cCxcbiAgaXNGdW5jdGlvbixcbiAgaXNTdHJlYW0sXG4gIGlzVVJMU2VhcmNoUGFyYW1zLFxuICBpc1R5cGVkQXJyYXksXG4gIGlzRmlsZUxpc3QsXG4gIGZvckVhY2gsXG4gIG1lcmdlLFxuICBleHRlbmQsXG4gIHRyaW0sXG4gIHN0cmlwQk9NLFxuICBpbmhlcml0cyxcbiAgdG9GbGF0T2JqZWN0LFxuICBraW5kT2YsXG4gIGtpbmRPZlRlc3QsXG4gIGVuZHNXaXRoLFxuICB0b0FycmF5LFxuICBmb3JFYWNoRW50cnksXG4gIG1hdGNoQWxsLFxuICBpc0hUTUxGb3JtLFxuICBoYXNPd25Qcm9wZXJ0eSxcbiAgaGFzT3duUHJvcDogaGFzT3duUHJvcGVydHksIC8vIGFuIGFsaWFzIHRvIGF2b2lkIEVTTGludCBuby1wcm90b3R5cGUtYnVpbHRpbnMgZGV0ZWN0aW9uXG4gIHJlZHVjZURlc2NyaXB0b3JzLFxuICBmcmVlemVNZXRob2RzLFxuICB0b09iamVjdFNldCxcbiAgdG9DYW1lbENhc2UsXG4gIG5vb3AsXG4gIHRvRmluaXRlTnVtYmVyLFxuICBmaW5kS2V5LFxuICBnbG9iYWw6IF9nbG9iYWwsXG4gIGlzQ29udGV4dERlZmluZWQsXG4gIEFMUEhBQkVULFxuICBnZW5lcmF0ZVN0cmluZyxcbiAgaXNTcGVjQ29tcGxpYW50Rm9ybSxcbiAgdG9KU09OT2JqZWN0LFxuICBpc0FzeW5jRm4sXG4gIGlzVGhlbmFibGUsXG4gIHNldEltbWVkaWF0ZTogX3NldEltbWVkaWF0ZSxcbiAgYXNhcFxufTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UsIGNvbmZpZywgZXJyb3IgY29kZSwgcmVxdWVzdCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtjb25maWddIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIEF4aW9zRXJyb3IkMShtZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIEVycm9yLmNhbGwodGhpcyk7XG5cbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5zdGFjayA9IChuZXcgRXJyb3IoKSkuc3RhY2s7XG4gIH1cblxuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICB0aGlzLm5hbWUgPSAnQXhpb3NFcnJvcic7XG4gIGNvZGUgJiYgKHRoaXMuY29kZSA9IGNvZGUpO1xuICBjb25maWcgJiYgKHRoaXMuY29uZmlnID0gY29uZmlnKTtcbiAgcmVxdWVzdCAmJiAodGhpcy5yZXF1ZXN0ID0gcmVxdWVzdCk7XG4gIGlmIChyZXNwb25zZSkge1xuICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICB0aGlzLnN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cyA/IHJlc3BvbnNlLnN0YXR1cyA6IG51bGw7XG4gIH1cbn1cblxudXRpbHMkMS5pbmhlcml0cyhBeGlvc0Vycm9yJDEsIEVycm9yLCB7XG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBTdGFuZGFyZFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgLy8gTWljcm9zb2Z0XG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIG51bWJlcjogdGhpcy5udW1iZXIsXG4gICAgICAvLyBNb3ppbGxhXG4gICAgICBmaWxlTmFtZTogdGhpcy5maWxlTmFtZSxcbiAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlcixcbiAgICAgIGNvbHVtbk51bWJlcjogdGhpcy5jb2x1bW5OdW1iZXIsXG4gICAgICBzdGFjazogdGhpcy5zdGFjayxcbiAgICAgIC8vIEF4aW9zXG4gICAgICBjb25maWc6IHV0aWxzJDEudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxcbiAgICAgIGNvZGU6IHRoaXMuY29kZSxcbiAgICAgIHN0YXR1czogdGhpcy5zdGF0dXNcbiAgICB9O1xuICB9XG59KTtcblxuY29uc3QgcHJvdG90eXBlJDEgPSBBeGlvc0Vycm9yJDEucHJvdG90eXBlO1xuY29uc3QgZGVzY3JpcHRvcnMgPSB7fTtcblxuW1xuICAnRVJSX0JBRF9PUFRJT05fVkFMVUUnLFxuICAnRVJSX0JBRF9PUFRJT04nLFxuICAnRUNPTk5BQk9SVEVEJyxcbiAgJ0VUSU1FRE9VVCcsXG4gICdFUlJfTkVUV09SSycsXG4gICdFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTJyxcbiAgJ0VSUl9ERVBSRUNBVEVEJyxcbiAgJ0VSUl9CQURfUkVTUE9OU0UnLFxuICAnRVJSX0JBRF9SRVFVRVNUJyxcbiAgJ0VSUl9DQU5DRUxFRCcsXG4gICdFUlJfTk9UX1NVUFBPUlQnLFxuICAnRVJSX0lOVkFMSURfVVJMJ1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbl0uZm9yRWFjaChjb2RlID0+IHtcbiAgZGVzY3JpcHRvcnNbY29kZV0gPSB7dmFsdWU6IGNvZGV9O1xufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEF4aW9zRXJyb3IkMSwgZGVzY3JpcHRvcnMpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvdHlwZSQxLCAnaXNBeGlvc0Vycm9yJywge3ZhbHVlOiB0cnVlfSk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5BeGlvc0Vycm9yJDEuZnJvbSA9IChlcnJvciwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSwgY3VzdG9tUHJvcHMpID0+IHtcbiAgY29uc3QgYXhpb3NFcnJvciA9IE9iamVjdC5jcmVhdGUocHJvdG90eXBlJDEpO1xuXG4gIHV0aWxzJDEudG9GbGF0T2JqZWN0KGVycm9yLCBheGlvc0Vycm9yLCBmdW5jdGlvbiBmaWx0ZXIob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAhPT0gRXJyb3IucHJvdG90eXBlO1xuICB9LCBwcm9wID0+IHtcbiAgICByZXR1cm4gcHJvcCAhPT0gJ2lzQXhpb3NFcnJvcic7XG4gIH0pO1xuXG4gIEF4aW9zRXJyb3IkMS5jYWxsKGF4aW9zRXJyb3IsIGVycm9yLm1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpO1xuXG4gIGF4aW9zRXJyb3IuY2F1c2UgPSBlcnJvcjtcblxuICBheGlvc0Vycm9yLm5hbWUgPSBlcnJvci5uYW1lO1xuXG4gIGN1c3RvbVByb3BzICYmIE9iamVjdC5hc3NpZ24oYXhpb3NFcnJvciwgY3VzdG9tUHJvcHMpO1xuXG4gIHJldHVybiBheGlvc0Vycm9yO1xufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHN0cmljdFxudmFyIGh0dHBBZGFwdGVyID0gbnVsbDtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiB0aGluZyBpcyBhIGFycmF5IG9yIGpzIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGhpbmcgLSBUaGUgb2JqZWN0IG9yIGFycmF5IHRvIGJlIHZpc2l0ZWQuXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVmlzaXRhYmxlKHRoaW5nKSB7XG4gIHJldHVybiB1dGlscyQxLmlzUGxhaW5PYmplY3QodGhpbmcpIHx8IHV0aWxzJDEuaXNBcnJheSh0aGluZyk7XG59XG5cbi8qKlxuICogSXQgcmVtb3ZlcyB0aGUgYnJhY2tldHMgZnJvbSB0aGUgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIHBhcmFtZXRlci5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUga2V5IHdpdGhvdXQgdGhlIGJyYWNrZXRzLlxuICovXG5mdW5jdGlvbiByZW1vdmVCcmFja2V0cyhrZXkpIHtcbiAgcmV0dXJuIHV0aWxzJDEuZW5kc1dpdGgoa2V5LCAnW10nKSA/IGtleS5zbGljZSgwLCAtMikgOiBrZXk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBwYXRoLCBhIGtleSwgYW5kIGEgYm9vbGVhbiwgYW5kIHJldHVybnMgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBjdXJyZW50IGtleS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBjdXJyZW50IG9iamVjdCBiZWluZyBpdGVyYXRlZCBvdmVyLlxuICogQHBhcmFtIHtzdHJpbmd9IGRvdHMgLSBJZiB0cnVlLCB0aGUga2V5IHdpbGwgYmUgcmVuZGVyZWQgd2l0aCBkb3RzIGluc3RlYWQgb2YgYnJhY2tldHMuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHBhdGggdG8gdGhlIGN1cnJlbnQga2V5LlxuICovXG5mdW5jdGlvbiByZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSB7XG4gIGlmICghcGF0aCkgcmV0dXJuIGtleTtcbiAgcmV0dXJuIHBhdGguY29uY2F0KGtleSkubWFwKGZ1bmN0aW9uIGVhY2godG9rZW4sIGkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICB0b2tlbiA9IHJlbW92ZUJyYWNrZXRzKHRva2VuKTtcbiAgICByZXR1cm4gIWRvdHMgJiYgaSA/ICdbJyArIHRva2VuICsgJ10nIDogdG9rZW47XG4gIH0pLmpvaW4oZG90cyA/ICcuJyA6ICcnKTtcbn1cblxuLyoqXG4gKiBJZiB0aGUgYXJyYXkgaXMgYW4gYXJyYXkgYW5kIG5vbmUgb2YgaXRzIGVsZW1lbnRzIGFyZSB2aXNpdGFibGUsIHRoZW4gaXQncyBhIGZsYXQgYXJyYXkuXG4gKlxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcnIgLSBUaGUgYXJyYXkgdG8gY2hlY2tcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNGbGF0QXJyYXkoYXJyKSB7XG4gIHJldHVybiB1dGlscyQxLmlzQXJyYXkoYXJyKSAmJiAhYXJyLnNvbWUoaXNWaXNpdGFibGUpO1xufVxuXG5jb25zdCBwcmVkaWNhdGVzID0gdXRpbHMkMS50b0ZsYXRPYmplY3QodXRpbHMkMSwge30sIG51bGwsIGZ1bmN0aW9uIGZpbHRlcihwcm9wKSB7XG4gIHJldHVybiAvXmlzW0EtWl0vLnRlc3QocHJvcCk7XG59KTtcblxuLyoqXG4gKiBDb252ZXJ0IGEgZGF0YSBvYmplY3QgdG8gRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0gez9PYmplY3R9IFtmb3JtRGF0YV1cbiAqIEBwYXJhbSB7P09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy52aXNpdG9yXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5tZXRhVG9rZW5zID0gdHJ1ZV1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuZG90cyA9IGZhbHNlXVxuICogQHBhcmFtIHs/Qm9vbGVhbn0gW29wdGlvbnMuaW5kZXhlcyA9IGZhbHNlXVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKiovXG5cbi8qKlxuICogSXQgY29udmVydHMgYW4gb2JqZWN0IGludG8gYSBGb3JtRGF0YSBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdDxhbnksIGFueT59IG9iaiAtIFRoZSBvYmplY3QgdG8gY29udmVydCB0byBmb3JtIGRhdGEuXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybURhdGEgLSBUaGUgRm9ybURhdGEgb2JqZWN0IHRvIGFwcGVuZCB0by5cbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zXG4gKi9cbmZ1bmN0aW9uIHRvRm9ybURhdGEkMShvYmosIGZvcm1EYXRhLCBvcHRpb25zKSB7XG4gIGlmICghdXRpbHMkMS5pc09iamVjdChvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgZm9ybURhdGEgPSBmb3JtRGF0YSB8fCBuZXcgKEZvcm1EYXRhKSgpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBvcHRpb25zID0gdXRpbHMkMS50b0ZsYXRPYmplY3Qob3B0aW9ucywge1xuICAgIG1ldGFUb2tlbnM6IHRydWUsXG4gICAgZG90czogZmFsc2UsXG4gICAgaW5kZXhlczogZmFsc2VcbiAgfSwgZmFsc2UsIGZ1bmN0aW9uIGRlZmluZWQob3B0aW9uLCBzb3VyY2UpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgICByZXR1cm4gIXV0aWxzJDEuaXNVbmRlZmluZWQoc291cmNlW29wdGlvbl0pO1xuICB9KTtcblxuICBjb25zdCBtZXRhVG9rZW5zID0gb3B0aW9ucy5tZXRhVG9rZW5zO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgY29uc3QgdmlzaXRvciA9IG9wdGlvbnMudmlzaXRvciB8fCBkZWZhdWx0VmlzaXRvcjtcbiAgY29uc3QgZG90cyA9IG9wdGlvbnMuZG90cztcbiAgY29uc3QgaW5kZXhlcyA9IG9wdGlvbnMuaW5kZXhlcztcbiAgY29uc3QgX0Jsb2IgPSBvcHRpb25zLkJsb2IgfHwgdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIEJsb2I7XG4gIGNvbnN0IHVzZUJsb2IgPSBfQmxvYiAmJiB1dGlscyQxLmlzU3BlY0NvbXBsaWFudEZvcm0oZm9ybURhdGEpO1xuXG4gIGlmICghdXRpbHMkMS5pc0Z1bmN0aW9uKHZpc2l0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnZlcnRWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICcnO1xuXG4gICAgaWYgKHV0aWxzJDEuaXNEYXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvSVNPU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKCF1c2VCbG9iICYmIHV0aWxzJDEuaXNCbG9iKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IkMSgnQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4nKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMkMS5pc0FycmF5QnVmZmVyKHZhbHVlKSB8fCB1dGlscyQxLmlzVHlwZWRBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB1c2VCbG9iICYmIHR5cGVvZiBCbG9iID09PSAnZnVuY3Rpb24nID8gbmV3IEJsb2IoW3ZhbHVlXSkgOiBCdWZmZXIuZnJvbSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgdmlzaXRvci5cbiAgICpcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IGtleVxuICAgKiBAcGFyYW0ge0FycmF5PFN0cmluZ3xOdW1iZXI+fSBwYXRoXG4gICAqIEB0aGlzIHtGb3JtRGF0YX1cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHJldHVybiB0cnVlIHRvIHZpc2l0IHRoZSBlYWNoIHByb3Agb2YgdGhlIHZhbHVlIHJlY3Vyc2l2ZWx5XG4gICAqL1xuICBmdW5jdGlvbiBkZWZhdWx0VmlzaXRvcih2YWx1ZSwga2V5LCBwYXRoKSB7XG4gICAgbGV0IGFyciA9IHZhbHVlO1xuXG4gICAgaWYgKHZhbHVlICYmICFwYXRoICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmICh1dGlscyQxLmVuZHNXaXRoKGtleSwgJ3t9JykpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGtleSA9IG1ldGFUb2tlbnMgPyBrZXkgOiBrZXkuc2xpY2UoMCwgLTIpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgdmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAodXRpbHMkMS5pc0FycmF5KHZhbHVlKSAmJiBpc0ZsYXRBcnJheSh2YWx1ZSkpIHx8XG4gICAgICAgICgodXRpbHMkMS5pc0ZpbGVMaXN0KHZhbHVlKSB8fCB1dGlscyQxLmVuZHNXaXRoKGtleSwgJ1tdJykpICYmIChhcnIgPSB1dGlscyQxLnRvQXJyYXkodmFsdWUpKVxuICAgICAgICApKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBrZXkgPSByZW1vdmVCcmFja2V0cyhrZXkpO1xuXG4gICAgICAgIGFyci5mb3JFYWNoKGZ1bmN0aW9uIGVhY2goZWwsIGluZGV4KSB7XG4gICAgICAgICAgISh1dGlscyQxLmlzVW5kZWZpbmVkKGVsKSB8fCBlbCA9PT0gbnVsbCkgJiYgZm9ybURhdGEuYXBwZW5kKFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5lc3RlZC10ZXJuYXJ5XG4gICAgICAgICAgICBpbmRleGVzID09PSB0cnVlID8gcmVuZGVyS2V5KFtrZXldLCBpbmRleCwgZG90cykgOiAoaW5kZXhlcyA9PT0gbnVsbCA/IGtleSA6IGtleSArICdbXScpLFxuICAgICAgICAgICAgY29udmVydFZhbHVlKGVsKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzVmlzaXRhYmxlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZm9ybURhdGEuYXBwZW5kKHJlbmRlcktleShwYXRoLCBrZXksIGRvdHMpLCBjb252ZXJ0VmFsdWUodmFsdWUpKTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHN0YWNrID0gW107XG5cbiAgY29uc3QgZXhwb3NlZEhlbHBlcnMgPSBPYmplY3QuYXNzaWduKHByZWRpY2F0ZXMsIHtcbiAgICBkZWZhdWx0VmlzaXRvcixcbiAgICBjb252ZXJ0VmFsdWUsXG4gICAgaXNWaXNpdGFibGVcbiAgfSk7XG5cbiAgZnVuY3Rpb24gYnVpbGQodmFsdWUsIHBhdGgpIHtcbiAgICBpZiAodXRpbHMkMS5pc1VuZGVmaW5lZCh2YWx1ZSkpIHJldHVybjtcblxuICAgIGlmIChzdGFjay5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHtcbiAgICAgIHRocm93IEVycm9yKCdDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gJyArIHBhdGguam9pbignLicpKTtcbiAgICB9XG5cbiAgICBzdGFjay5wdXNoKHZhbHVlKTtcblxuICAgIHV0aWxzJDEuZm9yRWFjaCh2YWx1ZSwgZnVuY3Rpb24gZWFjaChlbCwga2V5KSB7XG4gICAgICBjb25zdCByZXN1bHQgPSAhKHV0aWxzJDEuaXNVbmRlZmluZWQoZWwpIHx8IGVsID09PSBudWxsKSAmJiB2aXNpdG9yLmNhbGwoXG4gICAgICAgIGZvcm1EYXRhLCBlbCwgdXRpbHMkMS5pc1N0cmluZyhrZXkpID8ga2V5LnRyaW0oKSA6IGtleSwgcGF0aCwgZXhwb3NlZEhlbHBlcnNcbiAgICAgICk7XG5cbiAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHtcbiAgICAgICAgYnVpbGQoZWwsIHBhdGggPyBwYXRoLmNvbmNhdChrZXkpIDogW2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3RhY2sucG9wKCk7XG4gIH1cblxuICBpZiAoIXV0aWxzJDEuaXNPYmplY3Qob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2RhdGEgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuXG4gIGJ1aWxkKG9iaik7XG5cbiAgcmV0dXJuIGZvcm1EYXRhO1xufVxuXG4vKipcbiAqIEl0IGVuY29kZXMgYSBzdHJpbmcgYnkgcmVwbGFjaW5nIGFsbCBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBpbiB0aGUgdW5yZXNlcnZlZCBzZXQgd2l0aFxuICogdGhlaXIgcGVyY2VudC1lbmNvZGVkIGVxdWl2YWxlbnRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFRoZSBzdHJpbmcgdG8gZW5jb2RlLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBlbmNvZGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlJDEoc3RyKSB7XG4gIGNvbnN0IGNoYXJNYXAgPSB7XG4gICAgJyEnOiAnJTIxJyxcbiAgICBcIidcIjogJyUyNycsXG4gICAgJygnOiAnJTI4JyxcbiAgICAnKSc6ICclMjknLFxuICAgICd+JzogJyU3RScsXG4gICAgJyUyMCc6ICcrJyxcbiAgICAnJTAwJzogJ1xceDAwJ1xuICB9O1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvWyEnKCl+XXwlMjB8JTAwL2csIGZ1bmN0aW9uIHJlcGxhY2VyKG1hdGNoKSB7XG4gICAgcmV0dXJuIGNoYXJNYXBbbWF0Y2hdO1xuICB9KTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHBhcmFtcyBvYmplY3QgYW5kIGNvbnZlcnRzIGl0IHRvIGEgRm9ybURhdGEgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyB0byBiZSBjb252ZXJ0ZWQgdG8gYSBGb3JtRGF0YSBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3QgcGFzc2VkIHRvIHRoZSBBeGlvcyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBvcHRpb25zKSB7XG4gIHRoaXMuX3BhaXJzID0gW107XG5cbiAgcGFyYW1zICYmIHRvRm9ybURhdGEkMShwYXJhbXMsIHRoaXMsIG9wdGlvbnMpO1xufVxuXG5jb25zdCBwcm90b3R5cGUgPSBBeGlvc1VSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGU7XG5cbnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiBhcHBlbmQobmFtZSwgdmFsdWUpIHtcbiAgdGhpcy5fcGFpcnMucHVzaChbbmFtZSwgdmFsdWVdKTtcbn07XG5cbnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKGVuY29kZXIpIHtcbiAgY29uc3QgX2VuY29kZSA9IGVuY29kZXIgPyBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBlbmNvZGVyLmNhbGwodGhpcywgdmFsdWUsIGVuY29kZSQxKTtcbiAgfSA6IGVuY29kZSQxO1xuXG4gIHJldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24gZWFjaChwYWlyKSB7XG4gICAgcmV0dXJuIF9lbmNvZGUocGFpclswXSkgKyAnPScgKyBfZW5jb2RlKHBhaXJbMV0pO1xuICB9LCAnJykuam9pbignJicpO1xufTtcblxuLyoqXG4gKiBJdCByZXBsYWNlcyBhbGwgaW5zdGFuY2VzIG9mIHRoZSBjaGFyYWN0ZXJzIGA6YCwgYCRgLCBgLGAsIGArYCwgYFtgLCBhbmQgYF1gIHdpdGggdGhlaXJcbiAqIFVSSSBlbmNvZGVkIGNvdW50ZXJwYXJ0c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWwgVGhlIHZhbHVlIHRvIGJlIGVuY29kZWQuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGVuY29kZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZSh2YWwpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLlxuICAgIHJlcGxhY2UoLyUzQS9naSwgJzonKS5cbiAgICByZXBsYWNlKC8lMjQvZywgJyQnKS5cbiAgICByZXBsYWNlKC8lMkMvZ2ksICcsJykuXG4gICAgcmVwbGFjZSgvJTIwL2csICcrJykuXG4gICAgcmVwbGFjZSgvJTVCL2dpLCAnWycpLlxuICAgIHJlcGxhY2UoLyU1RC9naSwgJ10nKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIFVSTCBieSBhcHBlbmRpbmcgcGFyYW1zIHRvIHRoZSBlbmRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBiYXNlIG9mIHRoZSB1cmwgKGUuZy4sIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbSlcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBUaGUgcGFyYW1zIHRvIGJlIGFwcGVuZGVkXG4gKiBAcGFyYW0gez9vYmplY3R9IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHVybFxuICovXG5mdW5jdGlvbiBidWlsZFVSTCh1cmwsIHBhcmFtcywgb3B0aW9ucykge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIFxuICBjb25zdCBfZW5jb2RlID0gb3B0aW9ucyAmJiBvcHRpb25zLmVuY29kZSB8fCBlbmNvZGU7XG5cbiAgY29uc3Qgc2VyaWFsaXplRm4gPSBvcHRpb25zICYmIG9wdGlvbnMuc2VyaWFsaXplO1xuXG4gIGxldCBzZXJpYWxpemVkUGFyYW1zO1xuXG4gIGlmIChzZXJpYWxpemVGbikge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBzZXJpYWxpemVGbihwYXJhbXMsIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSB1dGlscyQxLmlzVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykgP1xuICAgICAgcGFyYW1zLnRvU3RyaW5nKCkgOlxuICAgICAgbmV3IEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgb3B0aW9ucykudG9TdHJpbmcoX2VuY29kZSk7XG4gIH1cblxuICBpZiAoc2VyaWFsaXplZFBhcmFtcykge1xuICAgIGNvbnN0IGhhc2htYXJrSW5kZXggPSB1cmwuaW5kZXhPZihcIiNcIik7XG5cbiAgICBpZiAoaGFzaG1hcmtJbmRleCAhPT0gLTEpIHtcbiAgICAgIHVybCA9IHVybC5zbGljZSgwLCBoYXNobWFya0luZGV4KTtcbiAgICB9XG4gICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemVkUGFyYW1zO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn1cblxuY2xhc3MgSW50ZXJjZXB0b3JNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBpbnRlcmNlcHRvciB0byB0aGUgc3RhY2tcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVsZmlsbGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHRoZW5gIGZvciBhIGBQcm9taXNlYFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3RlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGByZWplY3RgIGZvciBhIGBQcm9taXNlYFxuICAgKlxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IEFuIElEIHVzZWQgdG8gcmVtb3ZlIGludGVyY2VwdG9yIGxhdGVyXG4gICAqL1xuICB1c2UoZnVsZmlsbGVkLCByZWplY3RlZCwgb3B0aW9ucykge1xuICAgIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgICBmdWxmaWxsZWQsXG4gICAgICByZWplY3RlZCxcbiAgICAgIHN5bmNocm9ub3VzOiBvcHRpb25zID8gb3B0aW9ucy5zeW5jaHJvbm91cyA6IGZhbHNlLFxuICAgICAgcnVuV2hlbjogb3B0aW9ucyA/IG9wdGlvbnMucnVuV2hlbiA6IG51bGxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBpbnRlcmNlcHRvciBmcm9tIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcGFyYW0ge051bWJlcn0gaWQgVGhlIElEIHRoYXQgd2FzIHJldHVybmVkIGJ5IGB1c2VgXG4gICAqXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIGludGVyY2VwdG9yIHdhcyByZW1vdmVkLCBgZmFsc2VgIG90aGVyd2lzZVxuICAgKi9cbiAgZWplY3QoaWQpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcbiAgICAgIHRoaXMuaGFuZGxlcnNbaWRdID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIGludGVyY2VwdG9ycyBmcm9tIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGNsZWFyKCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXJzKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIHJlZ2lzdGVyZWQgaW50ZXJjZXB0b3JzXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHNraXBwaW5nIG92ZXIgYW55XG4gICAqIGludGVyY2VwdG9ycyB0aGF0IG1heSBoYXZlIGJlY29tZSBgbnVsbGAgY2FsbGluZyBgZWplY3RgLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBpbnRlcmNlcHRvclxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZvckVhY2goZm4pIHtcbiAgICB1dGlscyQxLmZvckVhY2godGhpcy5oYW5kbGVycywgZnVuY3Rpb24gZm9yRWFjaEhhbmRsZXIoaCkge1xuICAgICAgaWYgKGggIT09IG51bGwpIHtcbiAgICAgICAgZm4oaCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxudmFyIHRyYW5zaXRpb25hbERlZmF1bHRzID0ge1xuICBzaWxlbnRKU09OUGFyc2luZzogdHJ1ZSxcbiAgZm9yY2VkSlNPTlBhcnNpbmc6IHRydWUsXG4gIGNsYXJpZnlUaW1lb3V0RXJyb3I6IGZhbHNlXG59O1xuXG52YXIgVVJMU2VhcmNoUGFyYW1zJDEgPSB0eXBlb2YgVVJMU2VhcmNoUGFyYW1zICE9PSAndW5kZWZpbmVkJyA/IFVSTFNlYXJjaFBhcmFtcyA6IEF4aW9zVVJMU2VhcmNoUGFyYW1zO1xuXG52YXIgRm9ybURhdGEkMSA9IHR5cGVvZiBGb3JtRGF0YSAhPT0gJ3VuZGVmaW5lZCcgPyBGb3JtRGF0YSA6IG51bGw7XG5cbnZhciBCbG9iJDEgPSB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgPyBCbG9iIDogbnVsbDtcblxudmFyIHBsYXRmb3JtJDEgPSB7XG4gIGlzQnJvd3NlcjogdHJ1ZSxcbiAgY2xhc3Nlczoge1xuICAgIFVSTFNlYXJjaFBhcmFtczogVVJMU2VhcmNoUGFyYW1zJDEsXG4gICAgRm9ybURhdGE6IEZvcm1EYXRhJDEsXG4gICAgQmxvYjogQmxvYiQxXG4gIH0sXG4gIHByb3RvY29sczogWydodHRwJywgJ2h0dHBzJywgJ2ZpbGUnLCAnYmxvYicsICd1cmwnLCAnZGF0YSddXG59O1xuXG5jb25zdCBoYXNCcm93c2VyRW52ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJztcblxuY29uc3QgX25hdmlnYXRvciA9IHR5cGVvZiBuYXZpZ2F0b3IgPT09ICdvYmplY3QnICYmIG5hdmlnYXRvciB8fCB1bmRlZmluZWQ7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50XG4gKlxuICogVGhpcyBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlciwgYW5kIHJlYWN0LW5hdGl2ZS5cbiAqIEJvdGggZW52aXJvbm1lbnRzIHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QsIGJ1dCBub3QgZnVsbHkgc3RhbmRhcmQgZ2xvYmFscy5cbiAqXG4gKiB3ZWIgd29ya2VyczpcbiAqICB0eXBlb2Ygd2luZG93IC0+IHVuZGVmaW5lZFxuICogIHR5cGVvZiBkb2N1bWVudCAtPiB1bmRlZmluZWRcbiAqXG4gKiByZWFjdC1uYXRpdmU6XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ1JlYWN0TmF0aXZlJ1xuICogbmF0aXZlc2NyaXB0XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ05hdGl2ZVNjcmlwdCcgb3IgJ05TJ1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBoYXNTdGFuZGFyZEJyb3dzZXJFbnYgPSBoYXNCcm93c2VyRW52ICYmXG4gICghX25hdmlnYXRvciB8fCBbJ1JlYWN0TmF0aXZlJywgJ05hdGl2ZVNjcmlwdCcsICdOUyddLmluZGV4T2YoX25hdmlnYXRvci5wcm9kdWN0KSA8IDApO1xuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciB3ZWJXb3JrZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBBbHRob3VnaCB0aGUgYGlzU3RhbmRhcmRCcm93c2VyRW52YCBtZXRob2QgaW5kaWNhdGVzIHRoYXRcbiAqIGBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlcmAsIHRoZSBXZWJXb3JrZXIgd2lsbCBzdGlsbCBiZVxuICogZmlsdGVyZWQgb3V0IGR1ZSB0byBpdHMganVkZ21lbnQgc3RhbmRhcmRcbiAqIGB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnYC5cbiAqIFRoaXMgbGVhZHMgdG8gYSBwcm9ibGVtIHdoZW4gYXhpb3MgcG9zdCBgRm9ybURhdGFgIGluIHdlYldvcmtlclxuICovXG5jb25zdCBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYgPSAoKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICBzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUgJiZcbiAgICB0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzID09PSAnZnVuY3Rpb24nXG4gICk7XG59KSgpO1xuXG5jb25zdCBvcmlnaW4gPSBoYXNCcm93c2VyRW52ICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmIHx8ICdodHRwOi8vbG9jYWxob3N0JztcblxudmFyIHV0aWxzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIGhhc0Jyb3dzZXJFbnY6IGhhc0Jyb3dzZXJFbnYsXG4gIGhhc1N0YW5kYXJkQnJvd3NlckVudjogaGFzU3RhbmRhcmRCcm93c2VyRW52LFxuICBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6IGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudixcbiAgbmF2aWdhdG9yOiBfbmF2aWdhdG9yLFxuICBvcmlnaW46IG9yaWdpblxufSk7XG5cbnZhciBwbGF0Zm9ybSA9IHtcbiAgLi4udXRpbHMsXG4gIC4uLnBsYXRmb3JtJDFcbn07XG5cbmZ1bmN0aW9uIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgb3B0aW9ucykge1xuICByZXR1cm4gdG9Gb3JtRGF0YSQxKGRhdGEsIG5ldyBwbGF0Zm9ybS5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcygpLCBPYmplY3QuYXNzaWduKHtcbiAgICB2aXNpdG9yOiBmdW5jdGlvbih2YWx1ZSwga2V5LCBwYXRoLCBoZWxwZXJzKSB7XG4gICAgICBpZiAocGxhdGZvcm0uaXNOb2RlICYmIHV0aWxzJDEuaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKGtleSwgdmFsdWUudG9TdHJpbmcoJ2Jhc2U2NCcpKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaGVscGVycy5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfSwgb3B0aW9ucykpO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nIGxpa2UgYGZvb1t4XVt5XVt6XWAgYW5kIHJldHVybnMgYW4gYXJyYXkgbGlrZSBgWydmb28nLCAneCcsICd5JywgJ3onXVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzdHJpbmdzLlxuICovXG5mdW5jdGlvbiBwYXJzZVByb3BQYXRoKG5hbWUpIHtcbiAgLy8gZm9vW3hdW3ldW3pdXG4gIC8vIGZvby54LnkuelxuICAvLyBmb28teC15LXpcbiAgLy8gZm9vIHggeSB6XG4gIHJldHVybiB1dGlscyQxLm1hdGNoQWxsKC9cXHcrfFxcWyhcXHcqKV0vZywgbmFtZSkubWFwKG1hdGNoID0+IHtcbiAgICByZXR1cm4gbWF0Y2hbMF0gPT09ICdbXScgPyAnJyA6IG1hdGNoWzFdIHx8IG1hdGNoWzBdO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFuIGFycmF5IHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGFyciAtIFRoZSBhcnJheSB0byBjb252ZXJ0IHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBrZXlzIGFuZCB2YWx1ZXMgYXMgdGhlIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheVRvT2JqZWN0KGFycikge1xuICBjb25zdCBvYmogPSB7fTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGFycik7XG4gIGxldCBpO1xuICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgbGV0IGtleTtcbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAga2V5ID0ga2V5c1tpXTtcbiAgICBvYmpba2V5XSA9IGFycltrZXldO1xuICB9XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBGb3JtRGF0YSBvYmplY3QgYW5kIHJldHVybnMgYSBKYXZhU2NyaXB0IG9iamVjdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtRGF0YSBUaGUgRm9ybURhdGEgb2JqZWN0IHRvIGNvbnZlcnQgdG8gSlNPTi5cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0PHN0cmluZywgYW55PiB8IG51bGx9IFRoZSBjb252ZXJ0ZWQgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBmb3JtRGF0YVRvSlNPTihmb3JtRGF0YSkge1xuICBmdW5jdGlvbiBidWlsZFBhdGgocGF0aCwgdmFsdWUsIHRhcmdldCwgaW5kZXgpIHtcbiAgICBsZXQgbmFtZSA9IHBhdGhbaW5kZXgrK107XG5cbiAgICBpZiAobmFtZSA9PT0gJ19fcHJvdG9fXycpIHJldHVybiB0cnVlO1xuXG4gICAgY29uc3QgaXNOdW1lcmljS2V5ID0gTnVtYmVyLmlzRmluaXRlKCtuYW1lKTtcbiAgICBjb25zdCBpc0xhc3QgPSBpbmRleCA+PSBwYXRoLmxlbmd0aDtcbiAgICBuYW1lID0gIW5hbWUgJiYgdXRpbHMkMS5pc0FycmF5KHRhcmdldCkgPyB0YXJnZXQubGVuZ3RoIDogbmFtZTtcblxuICAgIGlmIChpc0xhc3QpIHtcbiAgICAgIGlmICh1dGlscyQxLmhhc093blByb3AodGFyZ2V0LCBuYW1lKSkge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSBbdGFyZ2V0W25hbWVdLCB2YWx1ZV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXRbbmFtZV0gfHwgIXV0aWxzJDEuaXNPYmplY3QodGFyZ2V0W25hbWVdKSkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gW107XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXRbbmFtZV0sIGluZGV4KTtcblxuICAgIGlmIChyZXN1bHQgJiYgdXRpbHMkMS5pc0FycmF5KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IGFycmF5VG9PYmplY3QodGFyZ2V0W25hbWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gIWlzTnVtZXJpY0tleTtcbiAgfVxuXG4gIGlmICh1dGlscyQxLmlzRm9ybURhdGEoZm9ybURhdGEpICYmIHV0aWxzJDEuaXNGdW5jdGlvbihmb3JtRGF0YS5lbnRyaWVzKSkge1xuICAgIGNvbnN0IG9iaiA9IHt9O1xuXG4gICAgdXRpbHMkMS5mb3JFYWNoRW50cnkoZm9ybURhdGEsIChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgYnVpbGRQYXRoKHBhcnNlUHJvcFBhdGgobmFtZSksIHZhbHVlLCBvYmosIDApO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nLCB0cmllcyB0byBwYXJzZSBpdCwgYW5kIGlmIGl0IGZhaWxzLCBpdCByZXR1cm5zIHRoZSBzdHJpbmdpZmllZCB2ZXJzaW9uXG4gKiBvZiB0aGUgaW5wdXRcbiAqXG4gKiBAcGFyYW0ge2FueX0gcmF3VmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgc3RyaW5naWZpZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJzZXIgLSBBIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgc3RyaW5nIGludG8gYSBKYXZhU2NyaXB0IG9iamVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVuY29kZXIgLSBBIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSB2YWx1ZSBhbmQgcmV0dXJucyBhIHN0cmluZy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIHN0cmluZ2lmaWVkIHZlcnNpb24gb2YgdGhlIHJhd1ZhbHVlLlxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnlTYWZlbHkocmF3VmFsdWUsIHBhcnNlciwgZW5jb2Rlcikge1xuICBpZiAodXRpbHMkMS5pc1N0cmluZyhyYXdWYWx1ZSkpIHtcbiAgICB0cnkge1xuICAgICAgKHBhcnNlciB8fCBKU09OLnBhcnNlKShyYXdWYWx1ZSk7XG4gICAgICByZXR1cm4gdXRpbHMkMS50cmltKHJhd1ZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5uYW1lICE9PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICgwLCBKU09OLnN0cmluZ2lmeSkocmF3VmFsdWUpO1xufVxuXG5jb25zdCBkZWZhdWx0cyA9IHtcblxuICB0cmFuc2l0aW9uYWw6IHRyYW5zaXRpb25hbERlZmF1bHRzLFxuXG4gIGFkYXB0ZXI6IFsneGhyJywgJ2h0dHAnLCAnZmV0Y2gnXSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSBoZWFkZXJzLmdldENvbnRlbnRUeXBlKCkgfHwgJyc7XG4gICAgY29uc3QgaGFzSlNPTkNvbnRlbnRUeXBlID0gY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24vanNvbicpID4gLTE7XG4gICAgY29uc3QgaXNPYmplY3RQYXlsb2FkID0gdXRpbHMkMS5pc09iamVjdChkYXRhKTtcblxuICAgIGlmIChpc09iamVjdFBheWxvYWQgJiYgdXRpbHMkMS5pc0hUTUxGb3JtKGRhdGEpKSB7XG4gICAgICBkYXRhID0gbmV3IEZvcm1EYXRhKGRhdGEpO1xuICAgIH1cblxuICAgIGNvbnN0IGlzRm9ybURhdGEgPSB1dGlscyQxLmlzRm9ybURhdGEoZGF0YSk7XG5cbiAgICBpZiAoaXNGb3JtRGF0YSkge1xuICAgICAgcmV0dXJuIGhhc0pTT05Db250ZW50VHlwZSA/IEpTT04uc3RyaW5naWZ5KGZvcm1EYXRhVG9KU09OKGRhdGEpKSA6IGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzJDEuaXNBcnJheUJ1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMkMS5pc0J1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMkMS5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMkMS5pc0ZpbGUoZGF0YSkgfHxcbiAgICAgIHV0aWxzJDEuaXNCbG9iKGRhdGEpIHx8XG4gICAgICB1dGlscyQxLmlzUmVhZGFibGVTdHJlYW0oZGF0YSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodXRpbHMkMS5pc0FycmF5QnVmZmVyVmlldyhkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGEuYnVmZmVyO1xuICAgIH1cbiAgICBpZiAodXRpbHMkMS5pc1VSTFNlYXJjaFBhcmFtcyhkYXRhKSkge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgnLCBmYWxzZSk7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGxldCBpc0ZpbGVMaXN0O1xuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCkge1xuICAgICAgaWYgKGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpID4gLTEpIHtcbiAgICAgICAgcmV0dXJuIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKChpc0ZpbGVMaXN0ID0gdXRpbHMkMS5pc0ZpbGVMaXN0KGRhdGEpKSB8fCBjb250ZW50VHlwZS5pbmRleE9mKCdtdWx0aXBhcnQvZm9ybS1kYXRhJykgPiAtMSkge1xuICAgICAgICBjb25zdCBfRm9ybURhdGEgPSB0aGlzLmVudiAmJiB0aGlzLmVudi5Gb3JtRGF0YTtcblxuICAgICAgICByZXR1cm4gdG9Gb3JtRGF0YSQxKFxuICAgICAgICAgIGlzRmlsZUxpc3QgPyB7J2ZpbGVzW10nOiBkYXRhfSA6IGRhdGEsXG4gICAgICAgICAgX0Zvcm1EYXRhICYmIG5ldyBfRm9ybURhdGEoKSxcbiAgICAgICAgICB0aGlzLmZvcm1TZXJpYWxpemVyXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCB8fCBoYXNKU09OQ29udGVudFR5cGUgKSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi9qc29uJywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHN0cmluZ2lmeVNhZmVseShkYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgdHJhbnNmb3JtUmVzcG9uc2U6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXNwb25zZShkYXRhKSB7XG4gICAgY29uc3QgdHJhbnNpdGlvbmFsID0gdGhpcy50cmFuc2l0aW9uYWwgfHwgZGVmYXVsdHMudHJhbnNpdGlvbmFsO1xuICAgIGNvbnN0IGZvcmNlZEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5mb3JjZWRKU09OUGFyc2luZztcbiAgICBjb25zdCBKU09OUmVxdWVzdGVkID0gdGhpcy5yZXNwb25zZVR5cGUgPT09ICdqc29uJztcblxuICAgIGlmICh1dGlscyQxLmlzUmVzcG9uc2UoZGF0YSkgfHwgdXRpbHMkMS5pc1JlYWRhYmxlU3RyZWFtKGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YSAmJiB1dGlscyQxLmlzU3RyaW5nKGRhdGEpICYmICgoZm9yY2VkSlNPTlBhcnNpbmcgJiYgIXRoaXMucmVzcG9uc2VUeXBlKSB8fCBKU09OUmVxdWVzdGVkKSkge1xuICAgICAgY29uc3Qgc2lsZW50SlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLnNpbGVudEpTT05QYXJzaW5nO1xuICAgICAgY29uc3Qgc3RyaWN0SlNPTlBhcnNpbmcgPSAhc2lsZW50SlNPTlBhcnNpbmcgJiYgSlNPTlJlcXVlc3RlZDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChzdHJpY3RKU09OUGFyc2luZykge1xuICAgICAgICAgIGlmIChlLm5hbWUgPT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgICAgIHRocm93IEF4aW9zRXJyb3IkMS5mcm9tKGUsIEF4aW9zRXJyb3IkMS5FUlJfQkFEX1JFU1BPTlNFLCB0aGlzLCBudWxsLCB0aGlzLnJlc3BvbnNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICAvKipcbiAgICogQSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBhYm9ydCBhIHJlcXVlc3QuIElmIHNldCB0byAwIChkZWZhdWx0KSBhXG4gICAqIHRpbWVvdXQgaXMgbm90IGNyZWF0ZWQuXG4gICAqL1xuICB0aW1lb3V0OiAwLFxuXG4gIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXG4gIHhzcmZIZWFkZXJOYW1lOiAnWC1YU1JGLVRPS0VOJyxcblxuICBtYXhDb250ZW50TGVuZ3RoOiAtMSxcbiAgbWF4Qm9keUxlbmd0aDogLTEsXG5cbiAgZW52OiB7XG4gICAgRm9ybURhdGE6IHBsYXRmb3JtLmNsYXNzZXMuRm9ybURhdGEsXG4gICAgQmxvYjogcGxhdGZvcm0uY2xhc3Nlcy5CbG9iXG4gIH0sXG5cbiAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgfSxcblxuICBoZWFkZXJzOiB7XG4gICAgY29tbW9uOiB7XG4gICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKicsXG4gICAgICAnQ29udGVudC1UeXBlJzogdW5kZWZpbmVkXG4gICAgfVxuICB9XG59O1xuXG51dGlscyQxLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgKG1ldGhvZCkgPT4ge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB7fTtcbn0pO1xuXG4vLyBSYXdBeGlvc0hlYWRlcnMgd2hvc2UgZHVwbGljYXRlcyBhcmUgaWdub3JlZCBieSBub2RlXG4vLyBjLmYuIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfbWVzc2FnZV9oZWFkZXJzXG5jb25zdCBpZ25vcmVEdXBsaWNhdGVPZiA9IHV0aWxzJDEudG9PYmplY3RTZXQoW1xuICAnYWdlJywgJ2F1dGhvcml6YXRpb24nLCAnY29udGVudC1sZW5ndGgnLCAnY29udGVudC10eXBlJywgJ2V0YWcnLFxuICAnZXhwaXJlcycsICdmcm9tJywgJ2hvc3QnLCAnaWYtbW9kaWZpZWQtc2luY2UnLCAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdsYXN0LW1vZGlmaWVkJywgJ2xvY2F0aW9uJywgJ21heC1mb3J3YXJkcycsICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLCAncmV0cnktYWZ0ZXInLCAndXNlci1hZ2VudCdcbl0pO1xuXG4vKipcbiAqIFBhcnNlIGhlYWRlcnMgaW50byBhbiBvYmplY3RcbiAqXG4gKiBgYGBcbiAqIERhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMDg6NTg6NDkgR01UXG4gKiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cbiAqIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAqIFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcmF3SGVhZGVycyBIZWFkZXJzIG5lZWRpbmcgdG8gYmUgcGFyc2VkXG4gKlxuICogQHJldHVybnMge09iamVjdH0gSGVhZGVycyBwYXJzZWQgaW50byBhbiBvYmplY3RcbiAqL1xudmFyIHBhcnNlSGVhZGVycyA9IHJhd0hlYWRlcnMgPT4ge1xuICBjb25zdCBwYXJzZWQgPSB7fTtcbiAgbGV0IGtleTtcbiAgbGV0IHZhbDtcbiAgbGV0IGk7XG5cbiAgcmF3SGVhZGVycyAmJiByYXdIZWFkZXJzLnNwbGl0KCdcXG4nKS5mb3JFYWNoKGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IGxpbmUuc3Vic3RyaW5nKDAsIGkpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbCA9IGxpbmUuc3Vic3RyaW5nKGkgKyAxKS50cmltKCk7XG5cbiAgICBpZiAoIWtleSB8fCAocGFyc2VkW2tleV0gJiYgaWdub3JlRHVwbGljYXRlT2Zba2V5XSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIGlmIChwYXJzZWRba2V5XSkge1xuICAgICAgICBwYXJzZWRba2V5XS5wdXNoKHZhbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IFt2YWxdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG5cbmNvbnN0ICRpbnRlcm5hbHMgPSBTeW1ib2woJ2ludGVybmFscycpO1xuXG5mdW5jdGlvbiBub3JtYWxpemVIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXIgJiYgU3RyaW5nKGhlYWRlcikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gZmFsc2UgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB1dGlscyQxLmlzQXJyYXkodmFsdWUpID8gdmFsdWUubWFwKG5vcm1hbGl6ZVZhbHVlKSA6IFN0cmluZyh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVG9rZW5zKHN0cikge1xuICBjb25zdCB0b2tlbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBjb25zdCB0b2tlbnNSRSA9IC8oW15cXHMsOz1dKylcXHMqKD86PVxccyooW14sO10rKSk/L2c7XG4gIGxldCBtYXRjaDtcblxuICB3aGlsZSAoKG1hdGNoID0gdG9rZW5zUkUuZXhlYyhzdHIpKSkge1xuICAgIHRva2Vuc1ttYXRjaFsxXV0gPSBtYXRjaFsyXTtcbiAgfVxuXG4gIHJldHVybiB0b2tlbnM7XG59XG5cbmNvbnN0IGlzVmFsaWRIZWFkZXJOYW1lID0gKHN0cikgPT4gL15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChzdHIudHJpbSgpKTtcblxuZnVuY3Rpb24gbWF0Y2hIZWFkZXJWYWx1ZShjb250ZXh0LCB2YWx1ZSwgaGVhZGVyLCBmaWx0ZXIsIGlzSGVhZGVyTmFtZUZpbHRlcikge1xuICBpZiAodXRpbHMkMS5pc0Z1bmN0aW9uKGZpbHRlcikpIHtcbiAgICByZXR1cm4gZmlsdGVyLmNhbGwodGhpcywgdmFsdWUsIGhlYWRlcik7XG4gIH1cblxuICBpZiAoaXNIZWFkZXJOYW1lRmlsdGVyKSB7XG4gICAgdmFsdWUgPSBoZWFkZXI7XG4gIH1cblxuICBpZiAoIXV0aWxzJDEuaXNTdHJpbmcodmFsdWUpKSByZXR1cm47XG5cbiAgaWYgKHV0aWxzJDEuaXNTdHJpbmcoZmlsdGVyKSkge1xuICAgIHJldHVybiB2YWx1ZS5pbmRleE9mKGZpbHRlcikgIT09IC0xO1xuICB9XG5cbiAgaWYgKHV0aWxzJDEuaXNSZWdFeHAoZmlsdGVyKSkge1xuICAgIHJldHVybiBmaWx0ZXIudGVzdCh2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0SGVhZGVyKGhlYWRlcikge1xuICByZXR1cm4gaGVhZGVyLnRyaW0oKVxuICAgIC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywgKHcsIGNoYXIsIHN0cikgPT4ge1xuICAgICAgcmV0dXJuIGNoYXIudG9VcHBlckNhc2UoKSArIHN0cjtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBY2Nlc3NvcnMob2JqLCBoZWFkZXIpIHtcbiAgY29uc3QgYWNjZXNzb3JOYW1lID0gdXRpbHMkMS50b0NhbWVsQ2FzZSgnICcgKyBoZWFkZXIpO1xuXG4gIFsnZ2V0JywgJ3NldCcsICdoYXMnXS5mb3JFYWNoKG1ldGhvZE5hbWUgPT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIG1ldGhvZE5hbWUgKyBhY2Nlc3Nvck5hbWUsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbihhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZE5hbWVdLmNhbGwodGhpcywgaGVhZGVyLCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgICAgIH0sXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfSk7XG59XG5cbmxldCBBeGlvc0hlYWRlcnMkMSA9IGNsYXNzIEF4aW9zSGVhZGVycyB7XG4gIGNvbnN0cnVjdG9yKGhlYWRlcnMpIHtcbiAgICBoZWFkZXJzICYmIHRoaXMuc2V0KGhlYWRlcnMpO1xuICB9XG5cbiAgc2V0KGhlYWRlciwgdmFsdWVPclJld3JpdGUsIHJld3JpdGUpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIHNldEhlYWRlcihfdmFsdWUsIF9oZWFkZXIsIF9yZXdyaXRlKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWxIZWFkZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkoc2VsZiwgbEhlYWRlcik7XG5cbiAgICAgIGlmKCFrZXkgfHwgc2VsZltrZXldID09PSB1bmRlZmluZWQgfHwgX3Jld3JpdGUgPT09IHRydWUgfHwgKF9yZXdyaXRlID09PSB1bmRlZmluZWQgJiYgc2VsZltrZXldICE9PSBmYWxzZSkpIHtcbiAgICAgICAgc2VsZltrZXkgfHwgX2hlYWRlcl0gPSBub3JtYWxpemVWYWx1ZShfdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNldEhlYWRlcnMgPSAoaGVhZGVycywgX3Jld3JpdGUpID0+XG4gICAgICB1dGlscyQxLmZvckVhY2goaGVhZGVycywgKF92YWx1ZSwgX2hlYWRlcikgPT4gc2V0SGVhZGVyKF92YWx1ZSwgX2hlYWRlciwgX3Jld3JpdGUpKTtcblxuICAgIGlmICh1dGlscyQxLmlzUGxhaW5PYmplY3QoaGVhZGVyKSB8fCBoZWFkZXIgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKSB7XG4gICAgICBzZXRIZWFkZXJzKGhlYWRlciwgdmFsdWVPclJld3JpdGUpO1xuICAgIH0gZWxzZSBpZih1dGlscyQxLmlzU3RyaW5nKGhlYWRlcikgJiYgKGhlYWRlciA9IGhlYWRlci50cmltKCkpICYmICFpc1ZhbGlkSGVhZGVyTmFtZShoZWFkZXIpKSB7XG4gICAgICBzZXRIZWFkZXJzKHBhcnNlSGVhZGVycyhoZWFkZXIpLCB2YWx1ZU9yUmV3cml0ZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscyQxLmlzSGVhZGVycyhoZWFkZXIpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBoZWFkZXIuZW50cmllcygpKSB7XG4gICAgICAgIHNldEhlYWRlcih2YWx1ZSwga2V5LCByZXdyaXRlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZGVyICE9IG51bGwgJiYgc2V0SGVhZGVyKHZhbHVlT3JSZXdyaXRlLCBoZWFkZXIsIHJld3JpdGUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0KGhlYWRlciwgcGFyc2VyKSB7XG4gICAgaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKGhlYWRlcik7XG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkodGhpcywgaGVhZGVyKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNba2V5XTtcblxuICAgICAgICBpZiAoIXBhcnNlcikge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJzZXIgPT09IHRydWUpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VUb2tlbnModmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzJDEuaXNGdW5jdGlvbihwYXJzZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5jYWxsKHRoaXMsIHZhbHVlLCBrZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzJDEuaXNSZWdFeHAocGFyc2VyKSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZXIuZXhlYyh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhcyhoZWFkZXIsIG1hdGNoZXIpIHtcbiAgICBoZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoaGVhZGVyKTtcblxuICAgIGlmIChoZWFkZXIpIHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzJDEuZmluZEtleSh0aGlzLCBoZWFkZXIpO1xuXG4gICAgICByZXR1cm4gISEoa2V5ICYmIHRoaXNba2V5XSAhPT0gdW5kZWZpbmVkICYmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHRoaXMsIHRoaXNba2V5XSwga2V5LCBtYXRjaGVyKSkpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGRlbGV0ZShoZWFkZXIsIG1hdGNoZXIpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gZGVsZXRlSGVhZGVyKF9oZWFkZXIpIHtcbiAgICAgIF9oZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmIChfaGVhZGVyKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHV0aWxzJDEuZmluZEtleShzZWxmLCBfaGVhZGVyKTtcblxuICAgICAgICBpZiAoa2V5ICYmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHNlbGYsIHNlbGZba2V5XSwga2V5LCBtYXRjaGVyKSkpIHtcbiAgICAgICAgICBkZWxldGUgc2VsZltrZXldO1xuXG4gICAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXRpbHMkMS5pc0FycmF5KGhlYWRlcikpIHtcbiAgICAgIGhlYWRlci5mb3JFYWNoKGRlbGV0ZUhlYWRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZUhlYWRlcihoZWFkZXIpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgY2xlYXIobWF0Y2hlcikge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzKTtcbiAgICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG5cbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZSh0aGlzLCB0aGlzW2tleV0sIGtleSwgbWF0Y2hlciwgdHJ1ZSkpIHtcbiAgICAgICAgZGVsZXRlIHRoaXNba2V5XTtcbiAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWQ7XG4gIH1cblxuICBub3JtYWxpemUoZm9ybWF0KSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgaGVhZGVycyA9IHt9O1xuXG4gICAgdXRpbHMkMS5mb3JFYWNoKHRoaXMsICh2YWx1ZSwgaGVhZGVyKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkoaGVhZGVycywgaGVhZGVyKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBzZWxmW2tleV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IGZvcm1hdCA/IGZvcm1hdEhlYWRlcihoZWFkZXIpIDogU3RyaW5nKGhlYWRlcikudHJpbSgpO1xuXG4gICAgICBpZiAobm9ybWFsaXplZCAhPT0gaGVhZGVyKSB7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICB9XG5cbiAgICAgIHNlbGZbbm9ybWFsaXplZF0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgIGhlYWRlcnNbbm9ybWFsaXplZF0gPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjb25jYXQoLi4udGFyZ2V0cykge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLCAuLi50YXJnZXRzKTtcbiAgfVxuXG4gIHRvSlNPTihhc1N0cmluZ3MpIHtcbiAgICBjb25zdCBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgdXRpbHMkMS5mb3JFYWNoKHRoaXMsICh2YWx1ZSwgaGVhZGVyKSA9PiB7XG4gICAgICB2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9PSBmYWxzZSAmJiAob2JqW2hlYWRlcl0gPSBhc1N0cmluZ3MgJiYgdXRpbHMkMS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLmpvaW4oJywgJykgOiB2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtoZWFkZXIsIHZhbHVlXSkgPT4gaGVhZGVyICsgJzogJyArIHZhbHVlKS5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ0F4aW9zSGVhZGVycyc7XG4gIH1cblxuICBzdGF0aWMgZnJvbSh0aGluZykge1xuICAgIHJldHVybiB0aGluZyBpbnN0YW5jZW9mIHRoaXMgPyB0aGluZyA6IG5ldyB0aGlzKHRoaW5nKTtcbiAgfVxuXG4gIHN0YXRpYyBjb25jYXQoZmlyc3QsIC4uLnRhcmdldHMpIHtcbiAgICBjb25zdCBjb21wdXRlZCA9IG5ldyB0aGlzKGZpcnN0KTtcblxuICAgIHRhcmdldHMuZm9yRWFjaCgodGFyZ2V0KSA9PiBjb21wdXRlZC5zZXQodGFyZ2V0KSk7XG5cbiAgICByZXR1cm4gY29tcHV0ZWQ7XG4gIH1cblxuICBzdGF0aWMgYWNjZXNzb3IoaGVhZGVyKSB7XG4gICAgY29uc3QgaW50ZXJuYWxzID0gdGhpc1skaW50ZXJuYWxzXSA9ICh0aGlzWyRpbnRlcm5hbHNdID0ge1xuICAgICAgYWNjZXNzb3JzOiB7fVxuICAgIH0pO1xuXG4gICAgY29uc3QgYWNjZXNzb3JzID0gaW50ZXJuYWxzLmFjY2Vzc29ycztcbiAgICBjb25zdCBwcm90b3R5cGUgPSB0aGlzLnByb3RvdHlwZTtcblxuICAgIGZ1bmN0aW9uIGRlZmluZUFjY2Vzc29yKF9oZWFkZXIpIHtcbiAgICAgIGNvbnN0IGxIZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmICghYWNjZXNzb3JzW2xIZWFkZXJdKSB7XG4gICAgICAgIGJ1aWxkQWNjZXNzb3JzKHByb3RvdHlwZSwgX2hlYWRlcik7XG4gICAgICAgIGFjY2Vzc29yc1tsSGVhZGVyXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdXRpbHMkMS5pc0FycmF5KGhlYWRlcikgPyBoZWFkZXIuZm9yRWFjaChkZWZpbmVBY2Nlc3NvcikgOiBkZWZpbmVBY2Nlc3NvcihoZWFkZXIpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn07XG5cbkF4aW9zSGVhZGVycyQxLmFjY2Vzc29yKFsnQ29udGVudC1UeXBlJywgJ0NvbnRlbnQtTGVuZ3RoJywgJ0FjY2VwdCcsICdBY2NlcHQtRW5jb2RpbmcnLCAnVXNlci1BZ2VudCcsICdBdXRob3JpemF0aW9uJ10pO1xuXG4vLyByZXNlcnZlZCBuYW1lcyBob3RmaXhcbnV0aWxzJDEucmVkdWNlRGVzY3JpcHRvcnMoQXhpb3NIZWFkZXJzJDEucHJvdG90eXBlLCAoe3ZhbHVlfSwga2V5KSA9PiB7XG4gIGxldCBtYXBwZWQgPSBrZXlbMF0udG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKTsgLy8gbWFwIGBzZXRgID0+IGBTZXRgXG4gIHJldHVybiB7XG4gICAgZ2V0OiAoKSA9PiB2YWx1ZSxcbiAgICBzZXQoaGVhZGVyVmFsdWUpIHtcbiAgICAgIHRoaXNbbWFwcGVkXSA9IGhlYWRlclZhbHVlO1xuICAgIH1cbiAgfVxufSk7XG5cbnV0aWxzJDEuZnJlZXplTWV0aG9kcyhBeGlvc0hlYWRlcnMkMSk7XG5cbi8qKlxuICogVHJhbnNmb3JtIHRoZSBkYXRhIGZvciBhIHJlcXVlc3Qgb3IgYSByZXNwb25zZVxuICpcbiAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb259IGZucyBBIHNpbmdsZSBmdW5jdGlvbiBvciBBcnJheSBvZiBmdW5jdGlvbnNcbiAqIEBwYXJhbSB7P09iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHsqfSBUaGUgcmVzdWx0aW5nIHRyYW5zZm9ybWVkIGRhdGFcbiAqL1xuZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShmbnMsIHJlc3BvbnNlKSB7XG4gIGNvbnN0IGNvbmZpZyA9IHRoaXMgfHwgZGVmYXVsdHM7XG4gIGNvbnN0IGNvbnRleHQgPSByZXNwb25zZSB8fCBjb25maWc7XG4gIGNvbnN0IGhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKGNvbnRleHQuaGVhZGVycyk7XG4gIGxldCBkYXRhID0gY29udGV4dC5kYXRhO1xuXG4gIHV0aWxzJDEuZm9yRWFjaChmbnMsIGZ1bmN0aW9uIHRyYW5zZm9ybShmbikge1xuICAgIGRhdGEgPSBmbi5jYWxsKGNvbmZpZywgZGF0YSwgaGVhZGVycy5ub3JtYWxpemUoKSwgcmVzcG9uc2UgPyByZXNwb25zZS5zdGF0dXMgOiB1bmRlZmluZWQpO1xuICB9KTtcblxuICBoZWFkZXJzLm5vcm1hbGl6ZSgpO1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBpc0NhbmNlbCQxKHZhbHVlKSB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX0NBTkNFTF9fKTtcbn1cblxuLyoqXG4gKiBBIGBDYW5jZWxlZEVycm9yYCBpcyBhbiBvYmplY3QgdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgY2FuY2VsZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gcmVxdWVzdCBUaGUgcmVxdWVzdC5cbiAqXG4gKiBAcmV0dXJucyB7Q2FuY2VsZWRFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIENhbmNlbGVkRXJyb3IkMShtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gIEF4aW9zRXJyb3IkMS5jYWxsKHRoaXMsIG1lc3NhZ2UgPT0gbnVsbCA/ICdjYW5jZWxlZCcgOiBtZXNzYWdlLCBBeGlvc0Vycm9yJDEuRVJSX0NBTkNFTEVELCBjb25maWcsIHJlcXVlc3QpO1xuICB0aGlzLm5hbWUgPSAnQ2FuY2VsZWRFcnJvcic7XG59XG5cbnV0aWxzJDEuaW5oZXJpdHMoQ2FuY2VsZWRFcnJvciQxLCBBeGlvc0Vycm9yJDEsIHtcbiAgX19DQU5DRUxfXzogdHJ1ZVxufSk7XG5cbi8qKlxuICogUmVzb2x2ZSBvciByZWplY3QgYSBQcm9taXNlIGJhc2VkIG9uIHJlc3BvbnNlIHN0YXR1cy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvbHZlIEEgZnVuY3Rpb24gdGhhdCByZXNvbHZlcyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdCBBIGZ1bmN0aW9uIHRoYXQgcmVqZWN0cyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2UuXG4gKlxuICogQHJldHVybnMge29iamVjdH0gVGhlIHJlc3BvbnNlLlxuICovXG5mdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICBjb25zdCB2YWxpZGF0ZVN0YXR1cyA9IHJlc3BvbnNlLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztcbiAgaWYgKCFyZXNwb25zZS5zdGF0dXMgfHwgIXZhbGlkYXRlU3RhdHVzIHx8IHZhbGlkYXRlU3RhdHVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgfSBlbHNlIHtcbiAgICByZWplY3QobmV3IEF4aW9zRXJyb3IkMShcbiAgICAgICdSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICcgKyByZXNwb25zZS5zdGF0dXMsXG4gICAgICBbQXhpb3NFcnJvciQxLkVSUl9CQURfUkVRVUVTVCwgQXhpb3NFcnJvciQxLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IocmVzcG9uc2Uuc3RhdHVzIC8gMTAwKSAtIDRdLFxuICAgICAgcmVzcG9uc2UuY29uZmlnLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VQcm90b2NvbCh1cmwpIHtcbiAgY29uc3QgbWF0Y2ggPSAvXihbLStcXHddezEsMjV9KSg6P1xcL1xcL3w6KS8uZXhlYyh1cmwpO1xuICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIGRhdGEgbWF4UmF0ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtzYW1wbGVzQ291bnQ9IDEwXVxuICogQHBhcmFtIHtOdW1iZXJ9IFttaW49IDEwMDBdXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHNwZWVkb21ldGVyKHNhbXBsZXNDb3VudCwgbWluKSB7XG4gIHNhbXBsZXNDb3VudCA9IHNhbXBsZXNDb3VudCB8fCAxMDtcbiAgY29uc3QgYnl0ZXMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgY29uc3QgdGltZXN0YW1wcyA9IG5ldyBBcnJheShzYW1wbGVzQ291bnQpO1xuICBsZXQgaGVhZCA9IDA7XG4gIGxldCB0YWlsID0gMDtcbiAgbGV0IGZpcnN0U2FtcGxlVFM7XG5cbiAgbWluID0gbWluICE9PSB1bmRlZmluZWQgPyBtaW4gOiAxMDAwO1xuXG4gIHJldHVybiBmdW5jdGlvbiBwdXNoKGNodW5rTGVuZ3RoKSB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IHRpbWVzdGFtcHNbdGFpbF07XG5cbiAgICBpZiAoIWZpcnN0U2FtcGxlVFMpIHtcbiAgICAgIGZpcnN0U2FtcGxlVFMgPSBub3c7XG4gICAgfVxuXG4gICAgYnl0ZXNbaGVhZF0gPSBjaHVua0xlbmd0aDtcbiAgICB0aW1lc3RhbXBzW2hlYWRdID0gbm93O1xuXG4gICAgbGV0IGkgPSB0YWlsO1xuICAgIGxldCBieXRlc0NvdW50ID0gMDtcblxuICAgIHdoaWxlIChpICE9PSBoZWFkKSB7XG4gICAgICBieXRlc0NvdW50ICs9IGJ5dGVzW2krK107XG4gICAgICBpID0gaSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBoZWFkID0gKGhlYWQgKyAxKSAlIHNhbXBsZXNDb3VudDtcblxuICAgIGlmIChoZWFkID09PSB0YWlsKSB7XG4gICAgICB0YWlsID0gKHRhaWwgKyAxKSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBpZiAobm93IC0gZmlyc3RTYW1wbGVUUyA8IG1pbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhc3NlZCA9IHN0YXJ0ZWRBdCAmJiBub3cgLSBzdGFydGVkQXQ7XG5cbiAgICByZXR1cm4gcGFzc2VkID8gTWF0aC5yb3VuZChieXRlc0NvdW50ICogMTAwMCAvIHBhc3NlZCkgOiB1bmRlZmluZWQ7XG4gIH07XG59XG5cbi8qKlxuICogVGhyb3R0bGUgZGVjb3JhdG9yXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtOdW1iZXJ9IGZyZXFcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiB0aHJvdHRsZShmbiwgZnJlcSkge1xuICBsZXQgdGltZXN0YW1wID0gMDtcbiAgbGV0IHRocmVzaG9sZCA9IDEwMDAgLyBmcmVxO1xuICBsZXQgbGFzdEFyZ3M7XG4gIGxldCB0aW1lcjtcblxuICBjb25zdCBpbnZva2UgPSAoYXJncywgbm93ID0gRGF0ZS5ub3coKSkgPT4ge1xuICAgIHRpbWVzdGFtcCA9IG5vdztcbiAgICBsYXN0QXJncyA9IG51bGw7XG4gICAgaWYgKHRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgdGltZXIgPSBudWxsO1xuICAgIH1cbiAgICBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgfTtcblxuICBjb25zdCB0aHJvdHRsZWQgPSAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcGFzc2VkID0gbm93IC0gdGltZXN0YW1wO1xuICAgIGlmICggcGFzc2VkID49IHRocmVzaG9sZCkge1xuICAgICAgaW52b2tlKGFyZ3MsIG5vdyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhc3RBcmdzID0gYXJncztcbiAgICAgIGlmICghdGltZXIpIHtcbiAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aW1lciA9IG51bGw7XG4gICAgICAgICAgaW52b2tlKGxhc3RBcmdzKTtcbiAgICAgICAgfSwgdGhyZXNob2xkIC0gcGFzc2VkKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZmx1c2ggPSAoKSA9PiBsYXN0QXJncyAmJiBpbnZva2UobGFzdEFyZ3MpO1xuXG4gIHJldHVybiBbdGhyb3R0bGVkLCBmbHVzaF07XG59XG5cbmNvbnN0IHByb2dyZXNzRXZlbnRSZWR1Y2VyID0gKGxpc3RlbmVyLCBpc0Rvd25sb2FkU3RyZWFtLCBmcmVxID0gMykgPT4ge1xuICBsZXQgYnl0ZXNOb3RpZmllZCA9IDA7XG4gIGNvbnN0IF9zcGVlZG9tZXRlciA9IHNwZWVkb21ldGVyKDUwLCAyNTApO1xuXG4gIHJldHVybiB0aHJvdHRsZShlID0+IHtcbiAgICBjb25zdCBsb2FkZWQgPSBlLmxvYWRlZDtcbiAgICBjb25zdCB0b3RhbCA9IGUubGVuZ3RoQ29tcHV0YWJsZSA/IGUudG90YWwgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcHJvZ3Jlc3NCeXRlcyA9IGxvYWRlZCAtIGJ5dGVzTm90aWZpZWQ7XG4gICAgY29uc3QgcmF0ZSA9IF9zcGVlZG9tZXRlcihwcm9ncmVzc0J5dGVzKTtcbiAgICBjb25zdCBpblJhbmdlID0gbG9hZGVkIDw9IHRvdGFsO1xuXG4gICAgYnl0ZXNOb3RpZmllZCA9IGxvYWRlZDtcblxuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBsb2FkZWQsXG4gICAgICB0b3RhbCxcbiAgICAgIHByb2dyZXNzOiB0b3RhbCA/IChsb2FkZWQgLyB0b3RhbCkgOiB1bmRlZmluZWQsXG4gICAgICBieXRlczogcHJvZ3Jlc3NCeXRlcyxcbiAgICAgIHJhdGU6IHJhdGUgPyByYXRlIDogdW5kZWZpbmVkLFxuICAgICAgZXN0aW1hdGVkOiByYXRlICYmIHRvdGFsICYmIGluUmFuZ2UgPyAodG90YWwgLSBsb2FkZWQpIC8gcmF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGV2ZW50OiBlLFxuICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdG90YWwgIT0gbnVsbCxcbiAgICAgIFtpc0Rvd25sb2FkU3RyZWFtID8gJ2Rvd25sb2FkJyA6ICd1cGxvYWQnXTogdHJ1ZVxuICAgIH07XG5cbiAgICBsaXN0ZW5lcihkYXRhKTtcbiAgfSwgZnJlcSk7XG59O1xuXG5jb25zdCBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yID0gKHRvdGFsLCB0aHJvdHRsZWQpID0+IHtcbiAgY29uc3QgbGVuZ3RoQ29tcHV0YWJsZSA9IHRvdGFsICE9IG51bGw7XG5cbiAgcmV0dXJuIFsobG9hZGVkKSA9PiB0aHJvdHRsZWRbMF0oe1xuICAgIGxlbmd0aENvbXB1dGFibGUsXG4gICAgdG90YWwsXG4gICAgbG9hZGVkXG4gIH0pLCB0aHJvdHRsZWRbMV1dO1xufTtcblxuY29uc3QgYXN5bmNEZWNvcmF0b3IgPSAoZm4pID0+ICguLi5hcmdzKSA9PiB1dGlscyQxLmFzYXAoKCkgPT4gZm4oLi4uYXJncykpO1xuXG52YXIgaXNVUkxTYW1lT3JpZ2luID0gcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52ID9cblxuLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIGhhdmUgZnVsbCBzdXBwb3J0IG9mIHRoZSBBUElzIG5lZWRlZCB0byB0ZXN0XG4vLyB3aGV0aGVyIHRoZSByZXF1ZXN0IFVSTCBpcyBvZiB0aGUgc2FtZSBvcmlnaW4gYXMgY3VycmVudCBsb2NhdGlvbi5cbiAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICBjb25zdCBtc2llID0gcGxhdGZvcm0ubmF2aWdhdG9yICYmIC8obXNpZXx0cmlkZW50KS9pLnRlc3QocGxhdGZvcm0ubmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgY29uc3QgdXJsUGFyc2luZ05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgbGV0IG9yaWdpblVSTDtcblxuICAgIC8qKlxuICAgICogUGFyc2UgYSBVUkwgdG8gZGlzY292ZXIgaXRzIGNvbXBvbmVudHNcbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSBVUkwgdG8gYmUgcGFyc2VkXG4gICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgICovXG4gICAgZnVuY3Rpb24gcmVzb2x2ZVVSTCh1cmwpIHtcbiAgICAgIGxldCBocmVmID0gdXJsO1xuXG4gICAgICBpZiAobXNpZSkge1xuICAgICAgICAvLyBJRSBuZWVkcyBhdHRyaWJ1dGUgc2V0IHR3aWNlIHRvIG5vcm1hbGl6ZSBwcm9wZXJ0aWVzXG4gICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuICAgICAgICBocmVmID0gdXJsUGFyc2luZ05vZGUuaHJlZjtcbiAgICAgIH1cblxuICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG5cbiAgICAgIC8vIHVybFBhcnNpbmdOb2RlIHByb3ZpZGVzIHRoZSBVcmxVdGlscyBpbnRlcmZhY2UgLSBodHRwOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsdXRpbHNcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhyZWY6IHVybFBhcnNpbmdOb2RlLmhyZWYsXG4gICAgICAgIHByb3RvY29sOiB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbCA/IHVybFBhcnNpbmdOb2RlLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpIDogJycsXG4gICAgICAgIGhvc3Q6IHVybFBhcnNpbmdOb2RlLmhvc3QsXG4gICAgICAgIHNlYXJjaDogdXJsUGFyc2luZ05vZGUuc2VhcmNoID8gdXJsUGFyc2luZ05vZGUuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCAnJykgOiAnJyxcbiAgICAgICAgaGFzaDogdXJsUGFyc2luZ05vZGUuaGFzaCA/IHVybFBhcnNpbmdOb2RlLmhhc2gucmVwbGFjZSgvXiMvLCAnJykgOiAnJyxcbiAgICAgICAgaG9zdG5hbWU6IHVybFBhcnNpbmdOb2RlLmhvc3RuYW1lLFxuICAgICAgICBwb3J0OiB1cmxQYXJzaW5nTm9kZS5wb3J0LFxuICAgICAgICBwYXRobmFtZTogKHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSA/XG4gICAgICAgICAgdXJsUGFyc2luZ05vZGUucGF0aG5hbWUgOlxuICAgICAgICAgICcvJyArIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lXG4gICAgICB9O1xuICAgIH1cblxuICAgIG9yaWdpblVSTCA9IHJlc29sdmVVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuXG4gICAgLyoqXG4gICAgKiBEZXRlcm1pbmUgaWYgYSBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgY3VycmVudCBsb2NhdGlvblxuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0VVJMIFRoZSBVUkwgdG8gdGVzdFxuICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4sIG90aGVyd2lzZSBmYWxzZVxuICAgICovXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbihyZXF1ZXN0VVJMKSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSAodXRpbHMkMS5pc1N0cmluZyhyZXF1ZXN0VVJMKSkgPyByZXNvbHZlVVJMKHJlcXVlc3RVUkwpIDogcmVxdWVzdFVSTDtcbiAgICAgIHJldHVybiAocGFyc2VkLnByb3RvY29sID09PSBvcmlnaW5VUkwucHJvdG9jb2wgJiZcbiAgICAgICAgICBwYXJzZWQuaG9zdCA9PT0gb3JpZ2luVVJMLmhvc3QpO1xuICAgIH07XG4gIH0pKCkgOlxuXG4gIC8vIE5vbiBzdGFuZGFyZCBicm93c2VyIGVudnMgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbigpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gIH0pKCk7XG5cbnZhciBjb29raWVzID0gcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52ID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgc3VwcG9ydCBkb2N1bWVudC5jb29raWVcbiAge1xuICAgIHdyaXRlKG5hbWUsIHZhbHVlLCBleHBpcmVzLCBwYXRoLCBkb21haW4sIHNlY3VyZSkge1xuICAgICAgY29uc3QgY29va2llID0gW25hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpXTtcblxuICAgICAgdXRpbHMkMS5pc051bWJlcihleHBpcmVzKSAmJiBjb29raWUucHVzaCgnZXhwaXJlcz0nICsgbmV3IERhdGUoZXhwaXJlcykudG9HTVRTdHJpbmcoKSk7XG5cbiAgICAgIHV0aWxzJDEuaXNTdHJpbmcocGF0aCkgJiYgY29va2llLnB1c2goJ3BhdGg9JyArIHBhdGgpO1xuXG4gICAgICB1dGlscyQxLmlzU3RyaW5nKGRvbWFpbikgJiYgY29va2llLnB1c2goJ2RvbWFpbj0nICsgZG9tYWluKTtcblxuICAgICAgc2VjdXJlID09PSB0cnVlICYmIGNvb2tpZS5wdXNoKCdzZWN1cmUnKTtcblxuICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llLmpvaW4oJzsgJyk7XG4gICAgfSxcblxuICAgIHJlYWQobmFtZSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58O1xcXFxzKikoJyArIG5hbWUgKyAnKT0oW147XSopJykpO1xuICAgICAgcmV0dXJuIChtYXRjaCA/IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFszXSkgOiBudWxsKTtcbiAgICB9LFxuXG4gICAgcmVtb3ZlKG5hbWUpIHtcbiAgICAgIHRoaXMud3JpdGUobmFtZSwgJycsIERhdGUubm93KCkgLSA4NjQwMDAwMCk7XG4gICAgfVxuICB9XG5cbiAgOlxuXG4gIC8vIE5vbi1zdGFuZGFyZCBicm93c2VyIGVudiAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAge1xuICAgIHdyaXRlKCkge30sXG4gICAgcmVhZCgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgcmVtb3ZlKCkge31cbiAgfTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBYnNvbHV0ZVVSTCh1cmwpIHtcbiAgLy8gQSBVUkwgaXMgY29uc2lkZXJlZCBhYnNvbHV0ZSBpZiBpdCBiZWdpbnMgd2l0aCBcIjxzY2hlbWU+Oi8vXCIgb3IgXCIvL1wiIChwcm90b2NvbC1yZWxhdGl2ZSBVUkwpLlxuICAvLyBSRkMgMzk4NiBkZWZpbmVzIHNjaGVtZSBuYW1lIGFzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBiZWdpbm5pbmcgd2l0aCBhIGxldHRlciBhbmQgZm9sbG93ZWRcbiAgLy8gYnkgYW55IGNvbWJpbmF0aW9uIG9mIGxldHRlcnMsIGRpZ2l0cywgcGx1cywgcGVyaW9kLCBvciBoeXBoZW4uXG4gIHJldHVybiAvXihbYS16XVthLXpcXGQrXFwtLl0qOik/XFwvXFwvL2kudGVzdCh1cmwpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgc3BlY2lmaWVkIFVSTHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGl2ZVVSTCBUaGUgcmVsYXRpdmUgVVJMXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIFVSTFxuICovXG5mdW5jdGlvbiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZWxhdGl2ZVVSTCkge1xuICByZXR1cm4gcmVsYXRpdmVVUkxcbiAgICA/IGJhc2VVUkwucmVwbGFjZSgvXFwvP1xcLyQvLCAnJykgKyAnLycgKyByZWxhdGl2ZVVSTC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgIDogYmFzZVVSTDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIGJhc2VVUkwgd2l0aCB0aGUgcmVxdWVzdGVkVVJMLFxuICogb25seSB3aGVuIHRoZSByZXF1ZXN0ZWRVUkwgaXMgbm90IGFscmVhZHkgYW4gYWJzb2x1dGUgVVJMLlxuICogSWYgdGhlIHJlcXVlc3RVUkwgaXMgYWJzb2x1dGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVxdWVzdGVkVVJMIHVudG91Y2hlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0ZWRVUkwgQWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGNvbWJpbmVcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgZnVsbCBwYXRoXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkRnVsbFBhdGgoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKSB7XG4gIGlmIChiYXNlVVJMICYmICFpc0Fic29sdXRlVVJMKHJlcXVlc3RlZFVSTCkpIHtcbiAgICByZXR1cm4gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdGVkVVJMO1xufVxuXG5jb25zdCBoZWFkZXJzVG9PYmplY3QgPSAodGhpbmcpID0+IHRoaW5nIGluc3RhbmNlb2YgQXhpb3NIZWFkZXJzJDEgPyB7IC4uLnRoaW5nIH0gOiB0aGluZztcblxuLyoqXG4gKiBDb25maWctc3BlY2lmaWMgbWVyZ2UtZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhIG5ldyBjb25maWctb2JqZWN0XG4gKiBieSBtZXJnaW5nIHR3byBjb25maWd1cmF0aW9uIG9iamVjdHMgdG9nZXRoZXIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzFcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcyXG4gKlxuICogQHJldHVybnMge09iamVjdH0gTmV3IG9iamVjdCByZXN1bHRpbmcgZnJvbSBtZXJnaW5nIGNvbmZpZzIgdG8gY29uZmlnMVxuICovXG5mdW5jdGlvbiBtZXJnZUNvbmZpZyQxKGNvbmZpZzEsIGNvbmZpZzIpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGNvbmZpZzIgPSBjb25maWcyIHx8IHt9O1xuICBjb25zdCBjb25maWcgPSB7fTtcblxuICBmdW5jdGlvbiBnZXRNZXJnZWRWYWx1ZSh0YXJnZXQsIHNvdXJjZSwgY2FzZWxlc3MpIHtcbiAgICBpZiAodXRpbHMkMS5pc1BsYWluT2JqZWN0KHRhcmdldCkgJiYgdXRpbHMkMS5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscyQxLm1lcmdlLmNhbGwoe2Nhc2VsZXNzfSwgdGFyZ2V0LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMkMS5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscyQxLm1lcmdlKHt9LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMkMS5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBzb3VyY2Uuc2xpY2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURlZXBQcm9wZXJ0aWVzKGEsIGIsIGNhc2VsZXNzKSB7XG4gICAgaWYgKCF1dGlscyQxLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoYSwgYiwgY2FzZWxlc3MpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoYSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEsIGNhc2VsZXNzKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gdmFsdWVGcm9tQ29uZmlnMihhLCBiKSB7XG4gICAgaWYgKCF1dGlscyQxLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBiKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gZGVmYXVsdFRvQ29uZmlnMihhLCBiKSB7XG4gICAgaWYgKCF1dGlscyQxLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBiKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscyQxLmlzVW5kZWZpbmVkKGEpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEaXJlY3RLZXlzKGEsIGIsIHByb3ApIHtcbiAgICBpZiAocHJvcCBpbiBjb25maWcyKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoYSwgYik7XG4gICAgfSBlbHNlIGlmIChwcm9wIGluIGNvbmZpZzEpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1lcmdlTWFwID0ge1xuICAgIHVybDogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBtZXRob2Q6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgZGF0YTogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBiYXNlVVJMOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zZm9ybVJlcXVlc3Q6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNmb3JtUmVzcG9uc2U6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcGFyYW1zU2VyaWFsaXplcjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0aW1lb3V0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRpbWVvdXRNZXNzYWdlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHdpdGhDcmVkZW50aWFsczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB3aXRoWFNSRlRva2VuOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGFkYXB0ZXI6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcmVzcG9uc2VUeXBlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHhzcmZDb29raWVOYW1lOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHhzcmZIZWFkZXJOYW1lOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgb25Eb3dubG9hZFByb2dyZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGRlY29tcHJlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgbWF4Q29udGVudExlbmd0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBtYXhCb2R5TGVuZ3RoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGJlZm9yZVJlZGlyZWN0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zcG9ydDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBodHRwQWdlbnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgaHR0cHNBZ2VudDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBjYW5jZWxUb2tlbjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBzb2NrZXRQYXRoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHJlc3BvbnNlRW5jb2Rpbmc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdmFsaWRhdGVTdGF0dXM6IG1lcmdlRGlyZWN0S2V5cyxcbiAgICBoZWFkZXJzOiAoYSwgYikgPT4gbWVyZ2VEZWVwUHJvcGVydGllcyhoZWFkZXJzVG9PYmplY3QoYSksIGhlYWRlcnNUb09iamVjdChiKSwgdHJ1ZSlcbiAgfTtcblxuICB1dGlscyQxLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgY29uZmlnMSwgY29uZmlnMikpLCBmdW5jdGlvbiBjb21wdXRlQ29uZmlnVmFsdWUocHJvcCkge1xuICAgIGNvbnN0IG1lcmdlID0gbWVyZ2VNYXBbcHJvcF0gfHwgbWVyZ2VEZWVwUHJvcGVydGllcztcbiAgICBjb25zdCBjb25maWdWYWx1ZSA9IG1lcmdlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0sIHByb3ApO1xuICAgICh1dGlscyQxLmlzVW5kZWZpbmVkKGNvbmZpZ1ZhbHVlKSAmJiBtZXJnZSAhPT0gbWVyZ2VEaXJlY3RLZXlzKSB8fCAoY29uZmlnW3Byb3BdID0gY29uZmlnVmFsdWUpO1xuICB9KTtcblxuICByZXR1cm4gY29uZmlnO1xufVxuXG52YXIgcmVzb2x2ZUNvbmZpZyA9IChjb25maWcpID0+IHtcbiAgY29uc3QgbmV3Q29uZmlnID0gbWVyZ2VDb25maWckMSh7fSwgY29uZmlnKTtcblxuICBsZXQge2RhdGEsIHdpdGhYU1JGVG9rZW4sIHhzcmZIZWFkZXJOYW1lLCB4c3JmQ29va2llTmFtZSwgaGVhZGVycywgYXV0aH0gPSBuZXdDb25maWc7XG5cbiAgbmV3Q29uZmlnLmhlYWRlcnMgPSBoZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShoZWFkZXJzKTtcblxuICBuZXdDb25maWcudXJsID0gYnVpbGRVUkwoYnVpbGRGdWxsUGF0aChuZXdDb25maWcuYmFzZVVSTCwgbmV3Q29uZmlnLnVybCksIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKTtcblxuICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gIGlmIChhdXRoKSB7XG4gICAgaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmFzaWMgJyArXG4gICAgICBidG9hKChhdXRoLnVzZXJuYW1lIHx8ICcnKSArICc6JyArIChhdXRoLnBhc3N3b3JkID8gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgucGFzc3dvcmQpKSA6ICcnKSlcbiAgICApO1xuICB9XG5cbiAgbGV0IGNvbnRlbnRUeXBlO1xuXG4gIGlmICh1dGlscyQxLmlzRm9ybURhdGEoZGF0YSkpIHtcbiAgICBpZiAocGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52IHx8IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudikge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSh1bmRlZmluZWQpOyAvLyBMZXQgdGhlIGJyb3dzZXIgc2V0IGl0XG4gICAgfSBlbHNlIGlmICgoY29udGVudFR5cGUgPSBoZWFkZXJzLmdldENvbnRlbnRUeXBlKCkpICE9PSBmYWxzZSkge1xuICAgICAgLy8gZml4IHNlbWljb2xvbiBkdXBsaWNhdGlvbiBpc3N1ZSBmb3IgUmVhY3ROYXRpdmUgRm9ybURhdGEgaW1wbGVtZW50YXRpb25cbiAgICAgIGNvbnN0IFt0eXBlLCAuLi50b2tlbnNdID0gY29udGVudFR5cGUgPyBjb250ZW50VHlwZS5zcGxpdCgnOycpLm1hcCh0b2tlbiA9PiB0b2tlbi50cmltKCkpLmZpbHRlcihCb29sZWFuKSA6IFtdO1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZShbdHlwZSB8fCAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsIC4uLnRva2Vuc10uam9pbignOyAnKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gIC8vIFRoaXMgaXMgb25seSBkb25lIGlmIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50LlxuICAvLyBTcGVjaWZpY2FsbHkgbm90IGlmIHdlJ3JlIGluIGEgd2ViIHdvcmtlciwgb3IgcmVhY3QtbmF0aXZlLlxuXG4gIGlmIChwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYpIHtcbiAgICB3aXRoWFNSRlRva2VuICYmIHV0aWxzJDEuaXNGdW5jdGlvbih3aXRoWFNSRlRva2VuKSAmJiAod2l0aFhTUkZUb2tlbiA9IHdpdGhYU1JGVG9rZW4obmV3Q29uZmlnKSk7XG5cbiAgICBpZiAod2l0aFhTUkZUb2tlbiB8fCAod2l0aFhTUkZUb2tlbiAhPT0gZmFsc2UgJiYgaXNVUkxTYW1lT3JpZ2luKG5ld0NvbmZpZy51cmwpKSkge1xuICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICBjb25zdCB4c3JmVmFsdWUgPSB4c3JmSGVhZGVyTmFtZSAmJiB4c3JmQ29va2llTmFtZSAmJiBjb29raWVzLnJlYWQoeHNyZkNvb2tpZU5hbWUpO1xuXG4gICAgICBpZiAoeHNyZlZhbHVlKSB7XG4gICAgICAgIGhlYWRlcnMuc2V0KHhzcmZIZWFkZXJOYW1lLCB4c3JmVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdDb25maWc7XG59O1xuXG5jb25zdCBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgPSB0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT09ICd1bmRlZmluZWQnO1xuXG52YXIgeGhyQWRhcHRlciA9IGlzWEhSQWRhcHRlclN1cHBvcnRlZCAmJiBmdW5jdGlvbiAoY29uZmlnKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiBkaXNwYXRjaFhoclJlcXVlc3QocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgY29uc3QgX2NvbmZpZyA9IHJlc29sdmVDb25maWcoY29uZmlnKTtcbiAgICBsZXQgcmVxdWVzdERhdGEgPSBfY29uZmlnLmRhdGE7XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKF9jb25maWcuaGVhZGVycykubm9ybWFsaXplKCk7XG4gICAgbGV0IHtyZXNwb25zZVR5cGUsIG9uVXBsb2FkUHJvZ3Jlc3MsIG9uRG93bmxvYWRQcm9ncmVzc30gPSBfY29uZmlnO1xuICAgIGxldCBvbkNhbmNlbGVkO1xuICAgIGxldCB1cGxvYWRUaHJvdHRsZWQsIGRvd25sb2FkVGhyb3R0bGVkO1xuICAgIGxldCBmbHVzaFVwbG9hZCwgZmx1c2hEb3dubG9hZDtcblxuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBmbHVzaFVwbG9hZCAmJiBmbHVzaFVwbG9hZCgpOyAvLyBmbHVzaCBldmVudHNcbiAgICAgIGZsdXNoRG93bmxvYWQgJiYgZmx1c2hEb3dubG9hZCgpOyAvLyBmbHVzaCBldmVudHNcblxuICAgICAgX2NvbmZpZy5jYW5jZWxUb2tlbiAmJiBfY29uZmlnLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuXG4gICAgICBfY29uZmlnLnNpZ25hbCAmJiBfY29uZmlnLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgIH1cblxuICAgIGxldCByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICByZXF1ZXN0Lm9wZW4oX2NvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKSwgX2NvbmZpZy51cmwsIHRydWUpO1xuXG4gICAgLy8gU2V0IHRoZSByZXF1ZXN0IHRpbWVvdXQgaW4gTVNcbiAgICByZXF1ZXN0LnRpbWVvdXQgPSBfY29uZmlnLnRpbWVvdXQ7XG5cbiAgICBmdW5jdGlvbiBvbmxvYWRlbmQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gUHJlcGFyZSB0aGUgcmVzcG9uc2VcbiAgICAgIGNvbnN0IHJlc3BvbnNlSGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20oXG4gICAgICAgICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgJiYgcmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9ICFyZXNwb25zZVR5cGUgfHwgcmVzcG9uc2VUeXBlID09PSAndGV4dCcgfHwgcmVzcG9uc2VUeXBlID09PSAnanNvbicgP1xuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVGV4dCA6IHJlcXVlc3QucmVzcG9uc2U7XG4gICAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXF1ZXN0XG4gICAgICB9O1xuXG4gICAgICBzZXR0bGUoZnVuY3Rpb24gX3Jlc29sdmUodmFsdWUpIHtcbiAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIGZ1bmN0aW9uIF9yZWplY3QoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCByZXNwb25zZSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICgnb25sb2FkZW5kJyBpbiByZXF1ZXN0KSB7XG4gICAgICAvLyBVc2Ugb25sb2FkZW5kIGlmIGF2YWlsYWJsZVxuICAgICAgcmVxdWVzdC5vbmxvYWRlbmQgPSBvbmxvYWRlbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIExpc3RlbiBmb3IgcmVhZHkgc3RhdGUgdG8gZW11bGF0ZSBvbmxvYWRlbmRcbiAgICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlTG9hZCgpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0IHx8IHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSByZXF1ZXN0IGVycm9yZWQgb3V0IGFuZCB3ZSBkaWRuJ3QgZ2V0IGEgcmVzcG9uc2UsIHRoaXMgd2lsbCBiZVxuICAgICAgICAvLyBoYW5kbGVkIGJ5IG9uZXJyb3IgaW5zdGVhZFxuICAgICAgICAvLyBXaXRoIG9uZSBleGNlcHRpb246IHJlcXVlc3QgdGhhdCB1c2luZyBmaWxlOiBwcm90b2NvbCwgbW9zdCBicm93c2Vyc1xuICAgICAgICAvLyB3aWxsIHJldHVybiBzdGF0dXMgYXMgMCBldmVuIHRob3VnaCBpdCdzIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0XG4gICAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMCAmJiAhKHJlcXVlc3QucmVzcG9uc2VVUkwgJiYgcmVxdWVzdC5yZXNwb25zZVVSTC5pbmRleE9mKCdmaWxlOicpID09PSAwKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyByZWFkeXN0YXRlIGhhbmRsZXIgaXMgY2FsbGluZyBiZWZvcmUgb25lcnJvciBvciBvbnRpbWVvdXQgaGFuZGxlcnMsXG4gICAgICAgIC8vIHNvIHdlIHNob3VsZCBjYWxsIG9ubG9hZGVuZCBvbiB0aGUgbmV4dCAndGljaydcbiAgICAgICAgc2V0VGltZW91dChvbmxvYWRlbmQpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgYnJvd3NlciByZXF1ZXN0IGNhbmNlbGxhdGlvbiAoYXMgb3Bwb3NlZCB0byBhIG1hbnVhbCBjYW5jZWxsYXRpb24pXG4gICAgcmVxdWVzdC5vbmFib3J0ID0gZnVuY3Rpb24gaGFuZGxlQWJvcnQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IkMSgnUmVxdWVzdCBhYm9ydGVkJywgQXhpb3NFcnJvciQxLkVDT05OQUJPUlRFRCwgY29uZmlnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgbG93IGxldmVsIG5ldHdvcmsgZXJyb3JzXG4gICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gaGFuZGxlRXJyb3IoKSB7XG4gICAgICAvLyBSZWFsIGVycm9ycyBhcmUgaGlkZGVuIGZyb20gdXMgYnkgdGhlIGJyb3dzZXJcbiAgICAgIC8vIG9uZXJyb3Igc2hvdWxkIG9ubHkgZmlyZSBpZiBpdCdzIGEgbmV0d29yayBlcnJvclxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yJDEoJ05ldHdvcmsgRXJyb3InLCBBeGlvc0Vycm9yJDEuRVJSX05FVFdPUkssIGNvbmZpZywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIHRpbWVvdXRcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7XG4gICAgICBsZXQgdGltZW91dEVycm9yTWVzc2FnZSA9IF9jb25maWcudGltZW91dCA/ICd0aW1lb3V0IG9mICcgKyBfY29uZmlnLnRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnIDogJ3RpbWVvdXQgZXhjZWVkZWQnO1xuICAgICAgY29uc3QgdHJhbnNpdGlvbmFsID0gX2NvbmZpZy50cmFuc2l0aW9uYWwgfHwgdHJhbnNpdGlvbmFsRGVmYXVsdHM7XG4gICAgICBpZiAoX2NvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlKSB7XG4gICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBfY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2U7XG4gICAgICB9XG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IkMShcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSxcbiAgICAgICAgdHJhbnNpdGlvbmFsLmNsYXJpZnlUaW1lb3V0RXJyb3IgPyBBeGlvc0Vycm9yJDEuRVRJTUVET1VUIDogQXhpb3NFcnJvciQxLkVDT05OQUJPUlRFRCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgcmVxdWVzdERhdGEgPT09IHVuZGVmaW5lZCAmJiByZXF1ZXN0SGVhZGVycy5zZXRDb250ZW50VHlwZShudWxsKTtcblxuICAgIC8vIEFkZCBoZWFkZXJzIHRvIHRoZSByZXF1ZXN0XG4gICAgaWYgKCdzZXRSZXF1ZXN0SGVhZGVyJyBpbiByZXF1ZXN0KSB7XG4gICAgICB1dGlscyQxLmZvckVhY2gocmVxdWVzdEhlYWRlcnMudG9KU09OKCksIGZ1bmN0aW9uIHNldFJlcXVlc3RIZWFkZXIodmFsLCBrZXkpIHtcbiAgICAgICAgcmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFkZCB3aXRoQ3JlZGVudGlhbHMgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoX2NvbmZpZy53aXRoQ3JlZGVudGlhbHMpKSB7XG4gICAgICByZXF1ZXN0LndpdGhDcmVkZW50aWFscyA9ICEhX2NvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChyZXNwb25zZVR5cGUgJiYgcmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gX2NvbmZpZy5yZXNwb25zZVR5cGU7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHByb2dyZXNzIGlmIG5lZWRlZFxuICAgIGlmIChvbkRvd25sb2FkUHJvZ3Jlc3MpIHtcbiAgICAgIChbZG93bmxvYWRUaHJvdHRsZWQsIGZsdXNoRG93bmxvYWRdID0gcHJvZ3Jlc3NFdmVudFJlZHVjZXIob25Eb3dubG9hZFByb2dyZXNzLCB0cnVlKSk7XG4gICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgZG93bmxvYWRUaHJvdHRsZWQpO1xuICAgIH1cblxuICAgIC8vIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCB1cGxvYWQgZXZlbnRzXG4gICAgaWYgKG9uVXBsb2FkUHJvZ3Jlc3MgJiYgcmVxdWVzdC51cGxvYWQpIHtcbiAgICAgIChbdXBsb2FkVGhyb3R0bGVkLCBmbHVzaFVwbG9hZF0gPSBwcm9ncmVzc0V2ZW50UmVkdWNlcihvblVwbG9hZFByb2dyZXNzKSk7XG5cbiAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdXBsb2FkVGhyb3R0bGVkKTtcblxuICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVuZCcsIGZsdXNoVXBsb2FkKTtcbiAgICB9XG5cbiAgICBpZiAoX2NvbmZpZy5jYW5jZWxUb2tlbiB8fCBfY29uZmlnLnNpZ25hbCkge1xuICAgICAgLy8gSGFuZGxlIGNhbmNlbGxhdGlvblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIG9uQ2FuY2VsZWQgPSBjYW5jZWwgPT4ge1xuICAgICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KCFjYW5jZWwgfHwgY2FuY2VsLnR5cGUgPyBuZXcgQ2FuY2VsZWRFcnJvciQxKG51bGwsIGNvbmZpZywgcmVxdWVzdCkgOiBjYW5jZWwpO1xuICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG4gICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgfTtcblxuICAgICAgX2NvbmZpZy5jYW5jZWxUb2tlbiAmJiBfY29uZmlnLmNhbmNlbFRva2VuLnN1YnNjcmliZShvbkNhbmNlbGVkKTtcbiAgICAgIGlmIChfY29uZmlnLnNpZ25hbCkge1xuICAgICAgICBfY29uZmlnLnNpZ25hbC5hYm9ydGVkID8gb25DYW5jZWxlZCgpIDogX2NvbmZpZy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwcm90b2NvbCA9IHBhcnNlUHJvdG9jb2woX2NvbmZpZy51cmwpO1xuXG4gICAgaWYgKHByb3RvY29sICYmIHBsYXRmb3JtLnByb3RvY29scy5pbmRleE9mKHByb3RvY29sKSA9PT0gLTEpIHtcbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvciQxKCdVbnN1cHBvcnRlZCBwcm90b2NvbCAnICsgcHJvdG9jb2wgKyAnOicsIEF4aW9zRXJyb3IkMS5FUlJfQkFEX1JFUVVFU1QsIGNvbmZpZykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSB8fCBudWxsKTtcbiAgfSk7XG59O1xuXG5jb25zdCBjb21wb3NlU2lnbmFscyA9IChzaWduYWxzLCB0aW1lb3V0KSA9PiB7XG4gIGNvbnN0IHtsZW5ndGh9ID0gKHNpZ25hbHMgPSBzaWduYWxzID8gc2lnbmFscy5maWx0ZXIoQm9vbGVhbikgOiBbXSk7XG5cbiAgaWYgKHRpbWVvdXQgfHwgbGVuZ3RoKSB7XG4gICAgbGV0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBsZXQgYWJvcnRlZDtcblxuICAgIGNvbnN0IG9uYWJvcnQgPSBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICBpZiAoIWFib3J0ZWQpIHtcbiAgICAgICAgYWJvcnRlZCA9IHRydWU7XG4gICAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGNvbnN0IGVyciA9IHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yID8gcmVhc29uIDogdGhpcy5yZWFzb247XG4gICAgICAgIGNvbnRyb2xsZXIuYWJvcnQoZXJyIGluc3RhbmNlb2YgQXhpb3NFcnJvciQxID8gZXJyIDogbmV3IENhbmNlbGVkRXJyb3IkMShlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogZXJyKSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGxldCB0aW1lciA9IHRpbWVvdXQgJiYgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aW1lciA9IG51bGw7XG4gICAgICBvbmFib3J0KG5ldyBBeGlvc0Vycm9yJDEoYHRpbWVvdXQgJHt0aW1lb3V0fSBvZiBtcyBleGNlZWRlZGAsIEF4aW9zRXJyb3IkMS5FVElNRURPVVQpKTtcbiAgICB9LCB0aW1lb3V0KTtcblxuICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gKCkgPT4ge1xuICAgICAgaWYgKHNpZ25hbHMpIHtcbiAgICAgICAgdGltZXIgJiYgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgICBzaWduYWxzLmZvckVhY2goc2lnbmFsID0+IHtcbiAgICAgICAgICBzaWduYWwudW5zdWJzY3JpYmUgPyBzaWduYWwudW5zdWJzY3JpYmUob25hYm9ydCkgOiBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbmFib3J0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHNpZ25hbHMgPSBudWxsO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBzaWduYWxzLmZvckVhY2goKHNpZ25hbCkgPT4gc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25hYm9ydCkpO1xuXG4gICAgY29uc3Qge3NpZ25hbH0gPSBjb250cm9sbGVyO1xuXG4gICAgc2lnbmFsLnVuc3Vic2NyaWJlID0gKCkgPT4gdXRpbHMkMS5hc2FwKHVuc3Vic2NyaWJlKTtcblxuICAgIHJldHVybiBzaWduYWw7XG4gIH1cbn07XG5cbmNvbnN0IHN0cmVhbUNodW5rID0gZnVuY3Rpb24qIChjaHVuaywgY2h1bmtTaXplKSB7XG4gIGxldCBsZW4gPSBjaHVuay5ieXRlTGVuZ3RoO1xuXG4gIGlmIChsZW4gPCBjaHVua1NpemUpIHtcbiAgICB5aWVsZCBjaHVuaztcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgcG9zID0gMDtcbiAgbGV0IGVuZDtcblxuICB3aGlsZSAocG9zIDwgbGVuKSB7XG4gICAgZW5kID0gcG9zICsgY2h1bmtTaXplO1xuICAgIHlpZWxkIGNodW5rLnNsaWNlKHBvcywgZW5kKTtcbiAgICBwb3MgPSBlbmQ7XG4gIH1cbn07XG5cbmNvbnN0IHJlYWRCeXRlcyA9IGFzeW5jIGZ1bmN0aW9uKiAoaXRlcmFibGUsIGNodW5rU2l6ZSkge1xuICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHJlYWRTdHJlYW0oaXRlcmFibGUpKSB7XG4gICAgeWllbGQqIHN0cmVhbUNodW5rKGNodW5rLCBjaHVua1NpemUpO1xuICB9XG59O1xuXG5jb25zdCByZWFkU3RyZWFtID0gYXN5bmMgZnVuY3Rpb24qIChzdHJlYW0pIHtcbiAgaWYgKHN0cmVhbVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pIHtcbiAgICB5aWVsZCogc3RyZWFtO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgdHJ5IHtcbiAgICBmb3IgKDs7KSB7XG4gICAgICBjb25zdCB7ZG9uZSwgdmFsdWV9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKTtcbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgeWllbGQgdmFsdWU7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHJlYWRlci5jYW5jZWwoKTtcbiAgfVxufTtcblxuY29uc3QgdHJhY2tTdHJlYW0gPSAoc3RyZWFtLCBjaHVua1NpemUsIG9uUHJvZ3Jlc3MsIG9uRmluaXNoKSA9PiB7XG4gIGNvbnN0IGl0ZXJhdG9yID0gcmVhZEJ5dGVzKHN0cmVhbSwgY2h1bmtTaXplKTtcblxuICBsZXQgYnl0ZXMgPSAwO1xuICBsZXQgZG9uZTtcbiAgbGV0IF9vbkZpbmlzaCA9IChlKSA9PiB7XG4gICAgaWYgKCFkb25lKSB7XG4gICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIG9uRmluaXNoICYmIG9uRmluaXNoKGUpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICBhc3luYyBwdWxsKGNvbnRyb2xsZXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHtkb25lLCB2YWx1ZX0gPSBhd2FpdCBpdGVyYXRvci5uZXh0KCk7XG5cbiAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgIF9vbkZpbmlzaCgpO1xuICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbGVuID0gdmFsdWUuYnl0ZUxlbmd0aDtcbiAgICAgICAgaWYgKG9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgICBsZXQgbG9hZGVkQnl0ZXMgPSBieXRlcyArPSBsZW47XG4gICAgICAgICAgb25Qcm9ncmVzcyhsb2FkZWRCeXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHZhbHVlKSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgX29uRmluaXNoKGVycik7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNhbmNlbChyZWFzb24pIHtcbiAgICAgIF9vbkZpbmlzaChyZWFzb24pO1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yLnJldHVybigpO1xuICAgIH1cbiAgfSwge1xuICAgIGhpZ2hXYXRlck1hcms6IDJcbiAgfSlcbn07XG5cbmNvbnN0IGlzRmV0Y2hTdXBwb3J0ZWQgPSB0eXBlb2YgZmV0Y2ggPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFJlcXVlc3QgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFJlc3BvbnNlID09PSAnZnVuY3Rpb24nO1xuY29uc3QgaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCA9IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgdHlwZW9mIFJlYWRhYmxlU3RyZWFtID09PSAnZnVuY3Rpb24nO1xuXG4vLyB1c2VkIG9ubHkgaW5zaWRlIHRoZSBmZXRjaCBhZGFwdGVyXG5jb25zdCBlbmNvZGVUZXh0ID0gaXNGZXRjaFN1cHBvcnRlZCAmJiAodHlwZW9mIFRleHRFbmNvZGVyID09PSAnZnVuY3Rpb24nID9cbiAgICAoKGVuY29kZXIpID0+IChzdHIpID0+IGVuY29kZXIuZW5jb2RlKHN0cikpKG5ldyBUZXh0RW5jb2RlcigpKSA6XG4gICAgYXN5bmMgKHN0cikgPT4gbmV3IFVpbnQ4QXJyYXkoYXdhaXQgbmV3IFJlc3BvbnNlKHN0cikuYXJyYXlCdWZmZXIoKSlcbik7XG5cbmNvbnN0IHRlc3QgPSAoZm4sIC4uLmFyZ3MpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFmbiguLi5hcmdzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59O1xuXG5jb25zdCBzdXBwb3J0c1JlcXVlc3RTdHJlYW0gPSBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkICYmIHRlc3QoKCkgPT4ge1xuICBsZXQgZHVwbGV4QWNjZXNzZWQgPSBmYWxzZTtcblxuICBjb25zdCBoYXNDb250ZW50VHlwZSA9IG5ldyBSZXF1ZXN0KHBsYXRmb3JtLm9yaWdpbiwge1xuICAgIGJvZHk6IG5ldyBSZWFkYWJsZVN0cmVhbSgpLFxuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGdldCBkdXBsZXgoKSB7XG4gICAgICBkdXBsZXhBY2Nlc3NlZCA9IHRydWU7XG4gICAgICByZXR1cm4gJ2hhbGYnO1xuICAgIH0sXG4gIH0pLmhlYWRlcnMuaGFzKCdDb250ZW50LVR5cGUnKTtcblxuICByZXR1cm4gZHVwbGV4QWNjZXNzZWQgJiYgIWhhc0NvbnRlbnRUeXBlO1xufSk7XG5cbmNvbnN0IERFRkFVTFRfQ0hVTktfU0laRSA9IDY0ICogMTAyNDtcblxuY29uc3Qgc3VwcG9ydHNSZXNwb25zZVN0cmVhbSA9IGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgJiZcbiAgdGVzdCgoKSA9PiB1dGlscyQxLmlzUmVhZGFibGVTdHJlYW0obmV3IFJlc3BvbnNlKCcnKS5ib2R5KSk7XG5cblxuY29uc3QgcmVzb2x2ZXJzID0ge1xuICBzdHJlYW06IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKChyZXMpID0+IHJlcy5ib2R5KVxufTtcblxuaXNGZXRjaFN1cHBvcnRlZCAmJiAoKChyZXMpID0+IHtcbiAgWyd0ZXh0JywgJ2FycmF5QnVmZmVyJywgJ2Jsb2InLCAnZm9ybURhdGEnLCAnc3RyZWFtJ10uZm9yRWFjaCh0eXBlID0+IHtcbiAgICAhcmVzb2x2ZXJzW3R5cGVdICYmIChyZXNvbHZlcnNbdHlwZV0gPSB1dGlscyQxLmlzRnVuY3Rpb24ocmVzW3R5cGVdKSA/IChyZXMpID0+IHJlc1t0eXBlXSgpIDpcbiAgICAgIChfLCBjb25maWcpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IkMShgUmVzcG9uc2UgdHlwZSAnJHt0eXBlfScgaXMgbm90IHN1cHBvcnRlZGAsIEF4aW9zRXJyb3IkMS5FUlJfTk9UX1NVUFBPUlQsIGNvbmZpZyk7XG4gICAgICB9KTtcbiAgfSk7XG59KShuZXcgUmVzcG9uc2UpKTtcblxuY29uc3QgZ2V0Qm9keUxlbmd0aCA9IGFzeW5jIChib2R5KSA9PiB7XG4gIGlmIChib2R5ID09IG51bGwpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGlmKHV0aWxzJDEuaXNCbG9iKGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHkuc2l6ZTtcbiAgfVxuXG4gIGlmKHV0aWxzJDEuaXNTcGVjQ29tcGxpYW50Rm9ybShib2R5KSkge1xuICAgIGNvbnN0IF9yZXF1ZXN0ID0gbmV3IFJlcXVlc3QocGxhdGZvcm0ub3JpZ2luLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHksXG4gICAgfSk7XG4gICAgcmV0dXJuIChhd2FpdCBfcmVxdWVzdC5hcnJheUJ1ZmZlcigpKS5ieXRlTGVuZ3RoO1xuICB9XG5cbiAgaWYodXRpbHMkMS5pc0FycmF5QnVmZmVyVmlldyhib2R5KSB8fCB1dGlscyQxLmlzQXJyYXlCdWZmZXIoYm9keSkpIHtcbiAgICByZXR1cm4gYm9keS5ieXRlTGVuZ3RoO1xuICB9XG5cbiAgaWYodXRpbHMkMS5pc1VSTFNlYXJjaFBhcmFtcyhib2R5KSkge1xuICAgIGJvZHkgPSBib2R5ICsgJyc7XG4gIH1cblxuICBpZih1dGlscyQxLmlzU3RyaW5nKGJvZHkpKSB7XG4gICAgcmV0dXJuIChhd2FpdCBlbmNvZGVUZXh0KGJvZHkpKS5ieXRlTGVuZ3RoO1xuICB9XG59O1xuXG5jb25zdCByZXNvbHZlQm9keUxlbmd0aCA9IGFzeW5jIChoZWFkZXJzLCBib2R5KSA9PiB7XG4gIGNvbnN0IGxlbmd0aCA9IHV0aWxzJDEudG9GaW5pdGVOdW1iZXIoaGVhZGVycy5nZXRDb250ZW50TGVuZ3RoKCkpO1xuXG4gIHJldHVybiBsZW5ndGggPT0gbnVsbCA/IGdldEJvZHlMZW5ndGgoYm9keSkgOiBsZW5ndGg7XG59O1xuXG52YXIgZmV0Y2hBZGFwdGVyID0gaXNGZXRjaFN1cHBvcnRlZCAmJiAoYXN5bmMgKGNvbmZpZykgPT4ge1xuICBsZXQge1xuICAgIHVybCxcbiAgICBtZXRob2QsXG4gICAgZGF0YSxcbiAgICBzaWduYWwsXG4gICAgY2FuY2VsVG9rZW4sXG4gICAgdGltZW91dCxcbiAgICBvbkRvd25sb2FkUHJvZ3Jlc3MsXG4gICAgb25VcGxvYWRQcm9ncmVzcyxcbiAgICByZXNwb25zZVR5cGUsXG4gICAgaGVhZGVycyxcbiAgICB3aXRoQ3JlZGVudGlhbHMgPSAnc2FtZS1vcmlnaW4nLFxuICAgIGZldGNoT3B0aW9uc1xuICB9ID0gcmVzb2x2ZUNvbmZpZyhjb25maWcpO1xuXG4gIHJlc3BvbnNlVHlwZSA9IHJlc3BvbnNlVHlwZSA/IChyZXNwb25zZVR5cGUgKyAnJykudG9Mb3dlckNhc2UoKSA6ICd0ZXh0JztcblxuICBsZXQgY29tcG9zZWRTaWduYWwgPSBjb21wb3NlU2lnbmFscyhbc2lnbmFsLCBjYW5jZWxUb2tlbiAmJiBjYW5jZWxUb2tlbi50b0Fib3J0U2lnbmFsKCldLCB0aW1lb3V0KTtcblxuICBsZXQgcmVxdWVzdDtcblxuICBjb25zdCB1bnN1YnNjcmliZSA9IGNvbXBvc2VkU2lnbmFsICYmIGNvbXBvc2VkU2lnbmFsLnVuc3Vic2NyaWJlICYmICgoKSA9PiB7XG4gICAgICBjb21wb3NlZFNpZ25hbC51bnN1YnNjcmliZSgpO1xuICB9KTtcblxuICBsZXQgcmVxdWVzdENvbnRlbnRMZW5ndGg7XG5cbiAgdHJ5IHtcbiAgICBpZiAoXG4gICAgICBvblVwbG9hZFByb2dyZXNzICYmIHN1cHBvcnRzUmVxdWVzdFN0cmVhbSAmJiBtZXRob2QgIT09ICdnZXQnICYmIG1ldGhvZCAhPT0gJ2hlYWQnICYmXG4gICAgICAocmVxdWVzdENvbnRlbnRMZW5ndGggPSBhd2FpdCByZXNvbHZlQm9keUxlbmd0aChoZWFkZXJzLCBkYXRhKSkgIT09IDBcbiAgICApIHtcbiAgICAgIGxldCBfcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHVybCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgYm9keTogZGF0YSxcbiAgICAgICAgZHVwbGV4OiBcImhhbGZcIlxuICAgICAgfSk7XG5cbiAgICAgIGxldCBjb250ZW50VHlwZUhlYWRlcjtcblxuICAgICAgaWYgKHV0aWxzJDEuaXNGb3JtRGF0YShkYXRhKSAmJiAoY29udGVudFR5cGVIZWFkZXIgPSBfcmVxdWVzdC5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykpKSB7XG4gICAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoY29udGVudFR5cGVIZWFkZXIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoX3JlcXVlc3QuYm9keSkge1xuICAgICAgICBjb25zdCBbb25Qcm9ncmVzcywgZmx1c2hdID0gcHJvZ3Jlc3NFdmVudERlY29yYXRvcihcbiAgICAgICAgICByZXF1ZXN0Q29udGVudExlbmd0aCxcbiAgICAgICAgICBwcm9ncmVzc0V2ZW50UmVkdWNlcihhc3luY0RlY29yYXRvcihvblVwbG9hZFByb2dyZXNzKSlcbiAgICAgICAgKTtcblxuICAgICAgICBkYXRhID0gdHJhY2tTdHJlYW0oX3JlcXVlc3QuYm9keSwgREVGQVVMVF9DSFVOS19TSVpFLCBvblByb2dyZXNzLCBmbHVzaCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF1dGlscyQxLmlzU3RyaW5nKHdpdGhDcmVkZW50aWFscykpIHtcbiAgICAgIHdpdGhDcmVkZW50aWFscyA9IHdpdGhDcmVkZW50aWFscyA/ICdpbmNsdWRlJyA6ICdvbWl0JztcbiAgICB9XG5cbiAgICAvLyBDbG91ZGZsYXJlIFdvcmtlcnMgdGhyb3dzIHdoZW4gY3JlZGVudGlhbHMgYXJlIGRlZmluZWRcbiAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Nsb3VkZmxhcmUvd29ya2VyZC9pc3N1ZXMvOTAyXG4gICAgY29uc3QgaXNDcmVkZW50aWFsc1N1cHBvcnRlZCA9IFwiY3JlZGVudGlhbHNcIiBpbiBSZXF1ZXN0LnByb3RvdHlwZTtcbiAgICByZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCB7XG4gICAgICAuLi5mZXRjaE9wdGlvbnMsXG4gICAgICBzaWduYWw6IGNvbXBvc2VkU2lnbmFsLFxuICAgICAgbWV0aG9kOiBtZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAgIGhlYWRlcnM6IGhlYWRlcnMubm9ybWFsaXplKCkudG9KU09OKCksXG4gICAgICBib2R5OiBkYXRhLFxuICAgICAgZHVwbGV4OiBcImhhbGZcIixcbiAgICAgIGNyZWRlbnRpYWxzOiBpc0NyZWRlbnRpYWxzU3VwcG9ydGVkID8gd2l0aENyZWRlbnRpYWxzIDogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChyZXF1ZXN0KTtcblxuICAgIGNvbnN0IGlzU3RyZWFtUmVzcG9uc2UgPSBzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmIChyZXNwb25zZVR5cGUgPT09ICdzdHJlYW0nIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3Jlc3BvbnNlJyk7XG5cbiAgICBpZiAoc3VwcG9ydHNSZXNwb25zZVN0cmVhbSAmJiAob25Eb3dubG9hZFByb2dyZXNzIHx8IChpc1N0cmVhbVJlc3BvbnNlICYmIHVuc3Vic2NyaWJlKSkpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7fTtcblxuICAgICAgWydzdGF0dXMnLCAnc3RhdHVzVGV4dCcsICdoZWFkZXJzJ10uZm9yRWFjaChwcm9wID0+IHtcbiAgICAgICAgb3B0aW9uc1twcm9wXSA9IHJlc3BvbnNlW3Byb3BdO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlQ29udGVudExlbmd0aCA9IHV0aWxzJDEudG9GaW5pdGVOdW1iZXIocmVzcG9uc2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtbGVuZ3RoJykpO1xuXG4gICAgICBjb25zdCBbb25Qcm9ncmVzcywgZmx1c2hdID0gb25Eb3dubG9hZFByb2dyZXNzICYmIHByb2dyZXNzRXZlbnREZWNvcmF0b3IoXG4gICAgICAgIHJlc3BvbnNlQ29udGVudExlbmd0aCxcbiAgICAgICAgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoYXN5bmNEZWNvcmF0b3Iob25Eb3dubG9hZFByb2dyZXNzKSwgdHJ1ZSlcbiAgICAgICkgfHwgW107XG5cbiAgICAgIHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKFxuICAgICAgICB0cmFja1N0cmVhbShyZXNwb25zZS5ib2R5LCBERUZBVUxUX0NIVU5LX1NJWkUsIG9uUHJvZ3Jlc3MsICgpID0+IHtcbiAgICAgICAgICBmbHVzaCAmJiBmbHVzaCgpO1xuICAgICAgICAgIHVuc3Vic2NyaWJlICYmIHVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0pLFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuICAgIH1cblxuICAgIHJlc3BvbnNlVHlwZSA9IHJlc3BvbnNlVHlwZSB8fCAndGV4dCc7XG5cbiAgICBsZXQgcmVzcG9uc2VEYXRhID0gYXdhaXQgcmVzb2x2ZXJzW3V0aWxzJDEuZmluZEtleShyZXNvbHZlcnMsIHJlc3BvbnNlVHlwZSkgfHwgJ3RleHQnXShyZXNwb25zZSwgY29uZmlnKTtcblxuICAgICFpc1N0cmVhbVJlc3BvbnNlICYmIHVuc3Vic2NyaWJlICYmIHVuc3Vic2NyaWJlKCk7XG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIGhlYWRlcnM6IEF4aW9zSGVhZGVycyQxLmZyb20ocmVzcG9uc2UuaGVhZGVycyksXG4gICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXNwb25zZS5zdGF0dXNUZXh0LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3RcbiAgICAgIH0pO1xuICAgIH0pXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHVuc3Vic2NyaWJlICYmIHVuc3Vic2NyaWJlKCk7XG5cbiAgICBpZiAoZXJyICYmIGVyci5uYW1lID09PSAnVHlwZUVycm9yJyAmJiAvZmV0Y2gvaS50ZXN0KGVyci5tZXNzYWdlKSkge1xuICAgICAgdGhyb3cgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgbmV3IEF4aW9zRXJyb3IkMSgnTmV0d29yayBFcnJvcicsIEF4aW9zRXJyb3IkMS5FUlJfTkVUV09SSywgY29uZmlnLCByZXF1ZXN0KSxcbiAgICAgICAge1xuICAgICAgICAgIGNhdXNlOiBlcnIuY2F1c2UgfHwgZXJyXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9XG5cbiAgICB0aHJvdyBBeGlvc0Vycm9yJDEuZnJvbShlcnIsIGVyciAmJiBlcnIuY29kZSwgY29uZmlnLCByZXF1ZXN0KTtcbiAgfVxufSk7XG5cbmNvbnN0IGtub3duQWRhcHRlcnMgPSB7XG4gIGh0dHA6IGh0dHBBZGFwdGVyLFxuICB4aHI6IHhockFkYXB0ZXIsXG4gIGZldGNoOiBmZXRjaEFkYXB0ZXJcbn07XG5cbnV0aWxzJDEuZm9yRWFjaChrbm93bkFkYXB0ZXJzLCAoZm4sIHZhbHVlKSA9PiB7XG4gIGlmIChmbikge1xuICAgIHRyeSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sICduYW1lJywge3ZhbHVlfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ2FkYXB0ZXJOYW1lJywge3ZhbHVlfSk7XG4gIH1cbn0pO1xuXG5jb25zdCByZW5kZXJSZWFzb24gPSAocmVhc29uKSA9PiBgLSAke3JlYXNvbn1gO1xuXG5jb25zdCBpc1Jlc29sdmVkSGFuZGxlID0gKGFkYXB0ZXIpID0+IHV0aWxzJDEuaXNGdW5jdGlvbihhZGFwdGVyKSB8fCBhZGFwdGVyID09PSBudWxsIHx8IGFkYXB0ZXIgPT09IGZhbHNlO1xuXG52YXIgYWRhcHRlcnMgPSB7XG4gIGdldEFkYXB0ZXI6IChhZGFwdGVycykgPT4ge1xuICAgIGFkYXB0ZXJzID0gdXRpbHMkMS5pc0FycmF5KGFkYXB0ZXJzKSA/IGFkYXB0ZXJzIDogW2FkYXB0ZXJzXTtcblxuICAgIGNvbnN0IHtsZW5ndGh9ID0gYWRhcHRlcnM7XG4gICAgbGV0IG5hbWVPckFkYXB0ZXI7XG4gICAgbGV0IGFkYXB0ZXI7XG5cbiAgICBjb25zdCByZWplY3RlZFJlYXNvbnMgPSB7fTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIG5hbWVPckFkYXB0ZXIgPSBhZGFwdGVyc1tpXTtcbiAgICAgIGxldCBpZDtcblxuICAgICAgYWRhcHRlciA9IG5hbWVPckFkYXB0ZXI7XG5cbiAgICAgIGlmICghaXNSZXNvbHZlZEhhbmRsZShuYW1lT3JBZGFwdGVyKSkge1xuICAgICAgICBhZGFwdGVyID0ga25vd25BZGFwdGVyc1soaWQgPSBTdHJpbmcobmFtZU9yQWRhcHRlcikpLnRvTG93ZXJDYXNlKCldO1xuXG4gICAgICAgIGlmIChhZGFwdGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvciQxKGBVbmtub3duIGFkYXB0ZXIgJyR7aWR9J2ApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhZGFwdGVyKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICByZWplY3RlZFJlYXNvbnNbaWQgfHwgJyMnICsgaV0gPSBhZGFwdGVyO1xuICAgIH1cblxuICAgIGlmICghYWRhcHRlcikge1xuXG4gICAgICBjb25zdCByZWFzb25zID0gT2JqZWN0LmVudHJpZXMocmVqZWN0ZWRSZWFzb25zKVxuICAgICAgICAubWFwKChbaWQsIHN0YXRlXSkgPT4gYGFkYXB0ZXIgJHtpZH0gYCArXG4gICAgICAgICAgKHN0YXRlID09PSBmYWxzZSA/ICdpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCcgOiAnaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQnKVxuICAgICAgICApO1xuXG4gICAgICBsZXQgcyA9IGxlbmd0aCA/XG4gICAgICAgIChyZWFzb25zLmxlbmd0aCA+IDEgPyAnc2luY2UgOlxcbicgKyByZWFzb25zLm1hcChyZW5kZXJSZWFzb24pLmpvaW4oJ1xcbicpIDogJyAnICsgcmVuZGVyUmVhc29uKHJlYXNvbnNbMF0pKSA6XG4gICAgICAgICdhcyBubyBhZGFwdGVyIHNwZWNpZmllZCc7XG5cbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yJDEoXG4gICAgICAgIGBUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0IGAgKyBzLFxuICAgICAgICAnRVJSX05PVF9TVVBQT1JUJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRhcHRlcjtcbiAgfSxcbiAgYWRhcHRlcnM6IGtub3duQWRhcHRlcnNcbn07XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cblxuICBpZiAoY29uZmlnLnNpZ25hbCAmJiBjb25maWcuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgQ2FuY2VsZWRFcnJvciQxKG51bGwsIGNvbmZpZyk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB1c2luZyB0aGUgY29uZmlndXJlZCBhZGFwdGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKlxuICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICovXG5mdW5jdGlvbiBkaXNwYXRjaFJlcXVlc3QoY29uZmlnKSB7XG4gIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICBjb25maWcuaGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20oY29uZmlnLmhlYWRlcnMpO1xuXG4gIC8vIFRyYW5zZm9ybSByZXF1ZXN0IGRhdGFcbiAgY29uZmlnLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgY29uZmlnLFxuICAgIGNvbmZpZy50cmFuc2Zvcm1SZXF1ZXN0XG4gICk7XG5cbiAgaWYgKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXS5pbmRleE9mKGNvbmZpZy5tZXRob2QpICE9PSAtMSkge1xuICAgIGNvbmZpZy5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLCBmYWxzZSk7XG4gIH1cblxuICBjb25zdCBhZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcihjb25maWcuYWRhcHRlciB8fCBkZWZhdWx0cy5hZGFwdGVyKTtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgIGNvbmZpZyxcbiAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSxcbiAgICAgIHJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJlc3BvbnNlLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKHJlc3BvbnNlLmhlYWRlcnMpO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9LCBmdW5jdGlvbiBvbkFkYXB0ZXJSZWplY3Rpb24ocmVhc29uKSB7XG4gICAgaWYgKCFpc0NhbmNlbCQxKHJlYXNvbikpIHtcbiAgICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICAgIGlmIChyZWFzb24gJiYgcmVhc29uLnJlc3BvbnNlKSB7XG4gICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2UsXG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlXG4gICAgICAgICk7XG4gICAgICAgIHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShyZWFzb24ucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gIH0pO1xufVxuXG5jb25zdCBWRVJTSU9OJDEgPSBcIjEuNy43XCI7XG5cbmNvbnN0IHZhbGlkYXRvcnMkMSA9IHt9O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuWydvYmplY3QnLCAnYm9vbGVhbicsICdudW1iZXInLCAnZnVuY3Rpb24nLCAnc3RyaW5nJywgJ3N5bWJvbCddLmZvckVhY2goKHR5cGUsIGkpID0+IHtcbiAgdmFsaWRhdG9ycyQxW3R5cGVdID0gZnVuY3Rpb24gdmFsaWRhdG9yKHRoaW5nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGluZyA9PT0gdHlwZSB8fCAnYScgKyAoaSA8IDEgPyAnbiAnIDogJyAnKSArIHR5cGU7XG4gIH07XG59KTtcblxuY29uc3QgZGVwcmVjYXRlZFdhcm5pbmdzID0ge307XG5cbi8qKlxuICogVHJhbnNpdGlvbmFsIG9wdGlvbiB2YWxpZGF0b3JcbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufGJvb2xlYW4/fSB2YWxpZGF0b3IgLSBzZXQgdG8gZmFsc2UgaWYgdGhlIHRyYW5zaXRpb25hbCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZFxuICogQHBhcmFtIHtzdHJpbmc/fSB2ZXJzaW9uIC0gZGVwcmVjYXRlZCB2ZXJzaW9uIC8gcmVtb3ZlZCBzaW5jZSB2ZXJzaW9uXG4gKiBAcGFyYW0ge3N0cmluZz99IG1lc3NhZ2UgLSBzb21lIG1lc3NhZ2Ugd2l0aCBhZGRpdGlvbmFsIGluZm9cbiAqXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbnZhbGlkYXRvcnMkMS50cmFuc2l0aW9uYWwgPSBmdW5jdGlvbiB0cmFuc2l0aW9uYWwodmFsaWRhdG9yLCB2ZXJzaW9uLCBtZXNzYWdlKSB7XG4gIGZ1bmN0aW9uIGZvcm1hdE1lc3NhZ2Uob3B0LCBkZXNjKSB7XG4gICAgcmV0dXJuICdbQXhpb3MgdicgKyBWRVJTSU9OJDEgKyAnXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFxcJycgKyBvcHQgKyAnXFwnJyArIGRlc2MgKyAobWVzc2FnZSA/ICcuICcgKyBtZXNzYWdlIDogJycpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuICh2YWx1ZSwgb3B0LCBvcHRzKSA9PiB7XG4gICAgaWYgKHZhbGlkYXRvciA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yJDEoXG4gICAgICAgIGZvcm1hdE1lc3NhZ2Uob3B0LCAnIGhhcyBiZWVuIHJlbW92ZWQnICsgKHZlcnNpb24gPyAnIGluICcgKyB2ZXJzaW9uIDogJycpKSxcbiAgICAgICAgQXhpb3NFcnJvciQxLkVSUl9ERVBSRUNBVEVEXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh2ZXJzaW9uICYmICFkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSkge1xuICAgICAgZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0gPSB0cnVlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgZm9ybWF0TWVzc2FnZShcbiAgICAgICAgICBvcHQsXG4gICAgICAgICAgJyBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYnICsgdmVyc2lvbiArICcgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUnXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRvciA/IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRzKSA6IHRydWU7XG4gIH07XG59O1xuXG4vKipcbiAqIEFzc2VydCBvYmplY3QncyBwcm9wZXJ0aWVzIHR5cGVcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtvYmplY3R9IHNjaGVtYVxuICogQHBhcmFtIHtib29sZWFuP30gYWxsb3dVbmtub3duXG4gKlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuXG5mdW5jdGlvbiBhc3NlcnRPcHRpb25zKG9wdGlvbnMsIHNjaGVtYSwgYWxsb3dVbmtub3duKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgQXhpb3NFcnJvciQxKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JywgQXhpb3NFcnJvciQxLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgfVxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyk7XG4gIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgY29uc3Qgb3B0ID0ga2V5c1tpXTtcbiAgICBjb25zdCB2YWxpZGF0b3IgPSBzY2hlbWFbb3B0XTtcbiAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnNbb3B0XTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdGlvbnMpO1xuICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvciQxKCdvcHRpb24gJyArIG9wdCArICcgbXVzdCBiZSAnICsgcmVzdWx0LCBBeGlvc0Vycm9yJDEuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChhbGxvd1Vua25vd24gIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yJDEoJ1Vua25vd24gb3B0aW9uICcgKyBvcHQsIEF4aW9zRXJyb3IkMS5FUlJfQkFEX09QVElPTik7XG4gICAgfVxuICB9XG59XG5cbnZhciB2YWxpZGF0b3IgPSB7XG4gIGFzc2VydE9wdGlvbnMsXG4gIHZhbGlkYXRvcnM6IHZhbGlkYXRvcnMkMVxufTtcblxuY29uc3QgdmFsaWRhdG9ycyA9IHZhbGlkYXRvci52YWxpZGF0b3JzO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZUNvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5sZXQgQXhpb3MkMSA9IGNsYXNzIEF4aW9zIHtcbiAgY29uc3RydWN0b3IoaW5zdGFuY2VDb25maWcpIHtcbiAgICB0aGlzLmRlZmF1bHRzID0gaW5zdGFuY2VDb25maWc7XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMgPSB7XG4gICAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKCksXG4gICAgICByZXNwb25zZTogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwYXRjaCBhIHJlcXVlc3RcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBjb25maWdPclVybCBUaGUgY29uZmlnIHNwZWNpZmljIGZvciB0aGlzIHJlcXVlc3QgKG1lcmdlZCB3aXRoIHRoaXMuZGVmYXVsdHMpXG4gICAqIEBwYXJhbSB7P09iamVjdH0gY29uZmlnXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAgICovXG4gIGFzeW5jIHJlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBsZXQgZHVtbXk7XG5cbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UgPyBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShkdW1teSA9IHt9KSA6IChkdW1teSA9IG5ldyBFcnJvcigpKTtcblxuICAgICAgICAvLyBzbGljZSBvZmYgdGhlIEVycm9yOiAuLi4gbGluZVxuICAgICAgICBjb25zdCBzdGFjayA9IGR1bW15LnN0YWNrID8gZHVtbXkuc3RhY2sucmVwbGFjZSgvXi4rXFxuLywgJycpIDogJyc7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKCFlcnIuc3RhY2spIHtcbiAgICAgICAgICAgIGVyci5zdGFjayA9IHN0YWNrO1xuICAgICAgICAgICAgLy8gbWF0Y2ggd2l0aG91dCB0aGUgMiB0b3Agc3RhY2sgbGluZXNcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0YWNrICYmICFTdHJpbmcoZXJyLnN0YWNrKS5lbmRzV2l0aChzdGFjay5yZXBsYWNlKC9eLitcXG4uK1xcbi8sICcnKSkpIHtcbiAgICAgICAgICAgIGVyci5zdGFjayArPSAnXFxuJyArIHN0YWNrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIGlnbm9yZSB0aGUgY2FzZSB3aGVyZSBcInN0YWNrXCIgaXMgYW4gdW4td3JpdGFibGUgcHJvcGVydHlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgX3JlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIC8vIEFsbG93IGZvciBheGlvcygnZXhhbXBsZS91cmwnWywgY29uZmlnXSkgYSBsYSBmZXRjaCBBUElcbiAgICBpZiAodHlwZW9mIGNvbmZpZ09yVXJsID09PSAnc3RyaW5nJykge1xuICAgICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgICAgY29uZmlnLnVybCA9IGNvbmZpZ09yVXJsO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcgPSBjb25maWdPclVybCB8fCB7fTtcbiAgICB9XG5cbiAgICBjb25maWcgPSBtZXJnZUNvbmZpZyQxKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG5cbiAgICBjb25zdCB7dHJhbnNpdGlvbmFsLCBwYXJhbXNTZXJpYWxpemVyLCBoZWFkZXJzfSA9IGNvbmZpZztcblxuICAgIGlmICh0cmFuc2l0aW9uYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnModHJhbnNpdGlvbmFsLCB7XG4gICAgICAgIHNpbGVudEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICBmb3JjZWRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgY2xhcmlmeVRpbWVvdXRFcnJvcjogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKVxuICAgICAgfSwgZmFsc2UpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXNTZXJpYWxpemVyICE9IG51bGwpIHtcbiAgICAgIGlmICh1dGlscyQxLmlzRnVuY3Rpb24ocGFyYW1zU2VyaWFsaXplcikpIHtcbiAgICAgICAgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIgPSB7XG4gICAgICAgICAgc2VyaWFsaXplOiBwYXJhbXNTZXJpYWxpemVyXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyhwYXJhbXNTZXJpYWxpemVyLCB7XG4gICAgICAgICAgZW5jb2RlOiB2YWxpZGF0b3JzLmZ1bmN0aW9uLFxuICAgICAgICAgIHNlcmlhbGl6ZTogdmFsaWRhdG9ycy5mdW5jdGlvblxuICAgICAgICB9LCB0cnVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgY29uZmlnLm1ldGhvZFxuICAgIGNvbmZpZy5tZXRob2QgPSAoY29uZmlnLm1ldGhvZCB8fCB0aGlzLmRlZmF1bHRzLm1ldGhvZCB8fCAnZ2V0JykudG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIEZsYXR0ZW4gaGVhZGVyc1xuICAgIGxldCBjb250ZXh0SGVhZGVycyA9IGhlYWRlcnMgJiYgdXRpbHMkMS5tZXJnZShcbiAgICAgIGhlYWRlcnMuY29tbW9uLFxuICAgICAgaGVhZGVyc1tjb25maWcubWV0aG9kXVxuICAgICk7XG5cbiAgICBoZWFkZXJzICYmIHV0aWxzJDEuZm9yRWFjaChcbiAgICAgIFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJywgJ2NvbW1vbiddLFxuICAgICAgKG1ldGhvZCkgPT4ge1xuICAgICAgICBkZWxldGUgaGVhZGVyc1ttZXRob2RdO1xuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25maWcuaGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmNvbmNhdChjb250ZXh0SGVhZGVycywgaGVhZGVycyk7XG5cbiAgICAvLyBmaWx0ZXIgb3V0IHNraXBwZWQgaW50ZXJjZXB0b3JzXG4gICAgY29uc3QgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgICBsZXQgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gdHJ1ZTtcbiAgICB0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24gdW5zaGlmdFJlcXVlc3RJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICAgIGlmICh0eXBlb2YgaW50ZXJjZXB0b3IucnVuV2hlbiA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnRlcmNlcHRvci5ydW5XaGVuKGNvbmZpZykgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9yLnN5bmNocm9ub3VzO1xuXG4gICAgICByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi51bnNoaWZ0KGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluID0gW107XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbiBwdXNoUmVzcG9uc2VJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICAgIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5wdXNoKGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgbGV0IHByb21pc2U7XG4gICAgbGV0IGkgPSAwO1xuICAgIGxldCBsZW47XG5cbiAgICBpZiAoIXN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycykge1xuICAgICAgY29uc3QgY2hhaW4gPSBbZGlzcGF0Y2hSZXF1ZXN0LmJpbmQodGhpcyksIHVuZGVmaW5lZF07XG4gICAgICBjaGFpbi51bnNoaWZ0LmFwcGx5KGNoYWluLCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbik7XG4gICAgICBjaGFpbi5wdXNoLmFwcGx5KGNoYWluLCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4pO1xuICAgICAgbGVuID0gY2hhaW4ubGVuZ3RoO1xuXG4gICAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGNvbmZpZyk7XG5cbiAgICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oY2hhaW5baSsrXSwgY2hhaW5baSsrXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cblxuICAgIGxlbiA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLmxlbmd0aDtcblxuICAgIGxldCBuZXdDb25maWcgPSBjb25maWc7XG5cbiAgICBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICBjb25zdCBvbkZ1bGZpbGxlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluW2krK107XG4gICAgICBjb25zdCBvblJlamVjdGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW5baSsrXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIG5ld0NvbmZpZyA9IG9uRnVsZmlsbGVkKG5ld0NvbmZpZyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBvblJlamVjdGVkLmNhbGwodGhpcywgZXJyb3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcHJvbWlzZSA9IGRpc3BhdGNoUmVxdWVzdC5jYWxsKHRoaXMsIG5ld0NvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfVxuXG4gICAgaSA9IDA7XG4gICAgbGVuID0gcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLmxlbmd0aDtcblxuICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbltpKytdLCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW5baSsrXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICBnZXRVcmkoY29uZmlnKSB7XG4gICAgY29uZmlnID0gbWVyZ2VDb25maWckMSh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG4gICAgcmV0dXJuIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG4gIH1cbn07XG5cbi8vIFByb3ZpZGUgYWxpYXNlcyBmb3Igc3VwcG9ydGVkIHJlcXVlc3QgbWV0aG9kc1xudXRpbHMkMS5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ29wdGlvbnMnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MkMS5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyQxKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgZGF0YTogKGNvbmZpZyB8fCB7fSkuZGF0YVxuICAgIH0pKTtcbiAgfTtcbn0pO1xuXG51dGlscyQxLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVIVFRQTWV0aG9kKGlzRm9ybSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBodHRwTWV0aG9kKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnJDEoY29uZmlnIHx8IHt9LCB7XG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgaGVhZGVyczogaXNGb3JtID8ge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSdcbiAgICAgICAgfSA6IHt9LFxuICAgICAgICB1cmwsXG4gICAgICAgIGRhdGFcbiAgICAgIH0pKTtcbiAgICB9O1xuICB9XG5cbiAgQXhpb3MkMS5wcm90b3R5cGVbbWV0aG9kXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCgpO1xuXG4gIEF4aW9zJDEucHJvdG90eXBlW21ldGhvZCArICdGb3JtJ10gPSBnZW5lcmF0ZUhUVFBNZXRob2QodHJ1ZSk7XG59KTtcblxuLyoqXG4gKiBBIGBDYW5jZWxUb2tlbmAgaXMgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVxdWVzdCBjYW5jZWxsYXRpb24gb2YgYW4gb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGV4ZWN1dG9yIFRoZSBleGVjdXRvciBmdW5jdGlvbi5cbiAqXG4gKiBAcmV0dXJucyB7Q2FuY2VsVG9rZW59XG4gKi9cbmxldCBDYW5jZWxUb2tlbiQxID0gY2xhc3MgQ2FuY2VsVG9rZW4ge1xuICBjb25zdHJ1Y3RvcihleGVjdXRvcikge1xuICAgIGlmICh0eXBlb2YgZXhlY3V0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzb2x2ZVByb21pc2U7XG5cbiAgICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiBwcm9taXNlRXhlY3V0b3IocmVzb2x2ZSkge1xuICAgICAgcmVzb2x2ZVByb21pc2UgPSByZXNvbHZlO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbihjYW5jZWwgPT4ge1xuICAgICAgaWYgKCF0b2tlbi5fbGlzdGVuZXJzKSByZXR1cm47XG5cbiAgICAgIGxldCBpID0gdG9rZW4uX2xpc3RlbmVycy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICAgIHRva2VuLl9saXN0ZW5lcnNbaV0oY2FuY2VsKTtcbiAgICAgIH1cbiAgICAgIHRva2VuLl9saXN0ZW5lcnMgPSBudWxsO1xuICAgIH0pO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbiA9IG9uZnVsZmlsbGVkID0+IHtcbiAgICAgIGxldCBfcmVzb2x2ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRva2VuLnN1YnNjcmliZShyZXNvbHZlKTtcbiAgICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgfSkudGhlbihvbmZ1bGZpbGxlZCk7XG5cbiAgICAgIHByb21pc2UuY2FuY2VsID0gZnVuY3Rpb24gcmVqZWN0KCkge1xuICAgICAgICB0b2tlbi51bnN1YnNjcmliZShfcmVzb2x2ZSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9O1xuXG4gICAgZXhlY3V0b3IoZnVuY3Rpb24gY2FuY2VsKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAgICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgICAvLyBDYW5jZWxsYXRpb24gaGFzIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWRcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0b2tlbi5yZWFzb24gPSBuZXcgQ2FuY2VsZWRFcnJvciQxKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCk7XG4gICAgICByZXNvbHZlUHJvbWlzZSh0b2tlbi5yZWFzb24pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICAgKi9cbiAgdGhyb3dJZlJlcXVlc3RlZCgpIHtcbiAgICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICAgIHRocm93IHRoaXMucmVhc29uO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gdGhlIGNhbmNlbCBzaWduYWxcbiAgICovXG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICBsaXN0ZW5lcih0aGlzLnJlYXNvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2xpc3RlbmVycykge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMgPSBbbGlzdGVuZXJdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbnN1YnNjcmliZSBmcm9tIHRoZSBjYW5jZWwgc2lnbmFsXG4gICAqL1xuXG4gIHVuc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKCF0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgdG9BYm9ydFNpZ25hbCgpIHtcbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgY29uc3QgYWJvcnQgPSAoZXJyKSA9PiB7XG4gICAgICBjb250cm9sbGVyLmFib3J0KGVycik7XG4gICAgfTtcblxuICAgIHRoaXMuc3Vic2NyaWJlKGFib3J0KTtcblxuICAgIGNvbnRyb2xsZXIuc2lnbmFsLnVuc3Vic2NyaWJlID0gKCkgPT4gdGhpcy51bnN1YnNjcmliZShhYm9ydCk7XG5cbiAgICByZXR1cm4gY29udHJvbGxlci5zaWduYWw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjb250YWlucyBhIG5ldyBgQ2FuY2VsVG9rZW5gIGFuZCBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gY2FsbGVkLFxuICAgKiBjYW5jZWxzIHRoZSBgQ2FuY2VsVG9rZW5gLlxuICAgKi9cbiAgc3RhdGljIHNvdXJjZSgpIHtcbiAgICBsZXQgY2FuY2VsO1xuICAgIGNvbnN0IHRva2VuID0gbmV3IENhbmNlbFRva2VuKGZ1bmN0aW9uIGV4ZWN1dG9yKGMpIHtcbiAgICAgIGNhbmNlbCA9IGM7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRva2VuLFxuICAgICAgY2FuY2VsXG4gICAgfTtcbiAgfVxufTtcblxuLyoqXG4gKiBTeW50YWN0aWMgc3VnYXIgZm9yIGludm9raW5nIGEgZnVuY3Rpb24gYW5kIGV4cGFuZGluZyBhbiBhcnJheSBmb3IgYXJndW1lbnRzLlxuICpcbiAqIENvbW1vbiB1c2UgY2FzZSB3b3VsZCBiZSB0byB1c2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseWAuXG4gKlxuICogIGBgYGpzXG4gKiAgZnVuY3Rpb24gZih4LCB5LCB6KSB7fVxuICogIHZhciBhcmdzID0gWzEsIDIsIDNdO1xuICogIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gKiAgYGBgXG4gKlxuICogV2l0aCBgc3ByZWFkYCB0aGlzIGV4YW1wbGUgY2FuIGJlIHJlLXdyaXR0ZW4uXG4gKlxuICogIGBgYGpzXG4gKiAgc3ByZWFkKGZ1bmN0aW9uKHgsIHksIHopIHt9KShbMSwgMiwgM10pO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBzcHJlYWQkMShjYWxsYmFjaykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcChhcnIpIHtcbiAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkobnVsbCwgYXJyKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zXG4gKlxuICogQHBhcmFtIHsqfSBwYXlsb2FkIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBeGlvc0Vycm9yJDEocGF5bG9hZCkge1xuICByZXR1cm4gdXRpbHMkMS5pc09iamVjdChwYXlsb2FkKSAmJiAocGF5bG9hZC5pc0F4aW9zRXJyb3IgPT09IHRydWUpO1xufVxuXG5jb25zdCBIdHRwU3RhdHVzQ29kZSQxID0ge1xuICBDb250aW51ZTogMTAwLFxuICBTd2l0Y2hpbmdQcm90b2NvbHM6IDEwMSxcbiAgUHJvY2Vzc2luZzogMTAyLFxuICBFYXJseUhpbnRzOiAxMDMsXG4gIE9rOiAyMDAsXG4gIENyZWF0ZWQ6IDIwMSxcbiAgQWNjZXB0ZWQ6IDIwMixcbiAgTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOiAyMDMsXG4gIE5vQ29udGVudDogMjA0LFxuICBSZXNldENvbnRlbnQ6IDIwNSxcbiAgUGFydGlhbENvbnRlbnQ6IDIwNixcbiAgTXVsdGlTdGF0dXM6IDIwNyxcbiAgQWxyZWFkeVJlcG9ydGVkOiAyMDgsXG4gIEltVXNlZDogMjI2LFxuICBNdWx0aXBsZUNob2ljZXM6IDMwMCxcbiAgTW92ZWRQZXJtYW5lbnRseTogMzAxLFxuICBGb3VuZDogMzAyLFxuICBTZWVPdGhlcjogMzAzLFxuICBOb3RNb2RpZmllZDogMzA0LFxuICBVc2VQcm94eTogMzA1LFxuICBVbnVzZWQ6IDMwNixcbiAgVGVtcG9yYXJ5UmVkaXJlY3Q6IDMwNyxcbiAgUGVybWFuZW50UmVkaXJlY3Q6IDMwOCxcbiAgQmFkUmVxdWVzdDogNDAwLFxuICBVbmF1dGhvcml6ZWQ6IDQwMSxcbiAgUGF5bWVudFJlcXVpcmVkOiA0MDIsXG4gIEZvcmJpZGRlbjogNDAzLFxuICBOb3RGb3VuZDogNDA0LFxuICBNZXRob2ROb3RBbGxvd2VkOiA0MDUsXG4gIE5vdEFjY2VwdGFibGU6IDQwNixcbiAgUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA0MDcsXG4gIFJlcXVlc3RUaW1lb3V0OiA0MDgsXG4gIENvbmZsaWN0OiA0MDksXG4gIEdvbmU6IDQxMCxcbiAgTGVuZ3RoUmVxdWlyZWQ6IDQxMSxcbiAgUHJlY29uZGl0aW9uRmFpbGVkOiA0MTIsXG4gIFBheWxvYWRUb29MYXJnZTogNDEzLFxuICBVcmlUb29Mb25nOiA0MTQsXG4gIFVuc3VwcG9ydGVkTWVkaWFUeXBlOiA0MTUsXG4gIFJhbmdlTm90U2F0aXNmaWFibGU6IDQxNixcbiAgRXhwZWN0YXRpb25GYWlsZWQ6IDQxNyxcbiAgSW1BVGVhcG90OiA0MTgsXG4gIE1pc2RpcmVjdGVkUmVxdWVzdDogNDIxLFxuICBVbnByb2Nlc3NhYmxlRW50aXR5OiA0MjIsXG4gIExvY2tlZDogNDIzLFxuICBGYWlsZWREZXBlbmRlbmN5OiA0MjQsXG4gIFRvb0Vhcmx5OiA0MjUsXG4gIFVwZ3JhZGVSZXF1aXJlZDogNDI2LFxuICBQcmVjb25kaXRpb25SZXF1aXJlZDogNDI4LFxuICBUb29NYW55UmVxdWVzdHM6IDQyOSxcbiAgUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOiA0MzEsXG4gIFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOiA0NTEsXG4gIEludGVybmFsU2VydmVyRXJyb3I6IDUwMCxcbiAgTm90SW1wbGVtZW50ZWQ6IDUwMSxcbiAgQmFkR2F0ZXdheTogNTAyLFxuICBTZXJ2aWNlVW5hdmFpbGFibGU6IDUwMyxcbiAgR2F0ZXdheVRpbWVvdXQ6IDUwNCxcbiAgSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6IDUwNSxcbiAgVmFyaWFudEFsc29OZWdvdGlhdGVzOiA1MDYsXG4gIEluc3VmZmljaWVudFN0b3JhZ2U6IDUwNyxcbiAgTG9vcERldGVjdGVkOiA1MDgsXG4gIE5vdEV4dGVuZGVkOiA1MTAsXG4gIE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA1MTEsXG59O1xuXG5PYmplY3QuZW50cmllcyhIdHRwU3RhdHVzQ29kZSQxKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgSHR0cFN0YXR1c0NvZGUkMVt2YWx1ZV0gPSBrZXk7XG59KTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm5zIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdENvbmZpZykge1xuICBjb25zdCBjb250ZXh0ID0gbmV3IEF4aW9zJDEoZGVmYXVsdENvbmZpZyk7XG4gIGNvbnN0IGluc3RhbmNlID0gYmluZChBeGlvcyQxLnByb3RvdHlwZS5yZXF1ZXN0LCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGF4aW9zLnByb3RvdHlwZSB0byBpbnN0YW5jZVxuICB1dGlscyQxLmV4dGVuZChpbnN0YW5jZSwgQXhpb3MkMS5wcm90b3R5cGUsIGNvbnRleHQsIHthbGxPd25LZXlzOiB0cnVlfSk7XG5cbiAgLy8gQ29weSBjb250ZXh0IHRvIGluc3RhbmNlXG4gIHV0aWxzJDEuZXh0ZW5kKGluc3RhbmNlLCBjb250ZXh0LCBudWxsLCB7YWxsT3duS2V5czogdHJ1ZX0pO1xuXG4gIC8vIEZhY3RvcnkgZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXNcbiAgaW5zdGFuY2UuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGluc3RhbmNlQ29uZmlnKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUluc3RhbmNlKG1lcmdlQ29uZmlnJDEoZGVmYXVsdENvbmZpZywgaW5zdGFuY2VDb25maWcpKTtcbiAgfTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxuY29uc3QgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcyQxO1xuXG4vLyBFeHBvc2UgQ2FuY2VsICYgQ2FuY2VsVG9rZW5cbmF4aW9zLkNhbmNlbGVkRXJyb3IgPSBDYW5jZWxlZEVycm9yJDE7XG5heGlvcy5DYW5jZWxUb2tlbiA9IENhbmNlbFRva2VuJDE7XG5heGlvcy5pc0NhbmNlbCA9IGlzQ2FuY2VsJDE7XG5heGlvcy5WRVJTSU9OID0gVkVSU0lPTiQxO1xuYXhpb3MudG9Gb3JtRGF0YSA9IHRvRm9ybURhdGEkMTtcblxuLy8gRXhwb3NlIEF4aW9zRXJyb3IgY2xhc3NcbmF4aW9zLkF4aW9zRXJyb3IgPSBBeGlvc0Vycm9yJDE7XG5cbi8vIGFsaWFzIGZvciBDYW5jZWxlZEVycm9yIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG5heGlvcy5DYW5jZWwgPSBheGlvcy5DYW5jZWxlZEVycm9yO1xuXG4vLyBFeHBvc2UgYWxsL3NwcmVhZFxuYXhpb3MuYWxsID0gZnVuY3Rpb24gYWxsKHByb21pc2VzKSB7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59O1xuXG5heGlvcy5zcHJlYWQgPSBzcHJlYWQkMTtcblxuLy8gRXhwb3NlIGlzQXhpb3NFcnJvclxuYXhpb3MuaXNBeGlvc0Vycm9yID0gaXNBeGlvc0Vycm9yJDE7XG5cbi8vIEV4cG9zZSBtZXJnZUNvbmZpZ1xuYXhpb3MubWVyZ2VDb25maWcgPSBtZXJnZUNvbmZpZyQxO1xuXG5heGlvcy5BeGlvc0hlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMTtcblxuYXhpb3MuZm9ybVRvSlNPTiA9IHRoaW5nID0+IGZvcm1EYXRhVG9KU09OKHV0aWxzJDEuaXNIVE1MRm9ybSh0aGluZykgPyBuZXcgRm9ybURhdGEodGhpbmcpIDogdGhpbmcpO1xuXG5heGlvcy5nZXRBZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcjtcblxuYXhpb3MuSHR0cFN0YXR1c0NvZGUgPSBIdHRwU3RhdHVzQ29kZSQxO1xuXG5heGlvcy5kZWZhdWx0ID0gYXhpb3M7XG5cbi8vIFRoaXMgbW9kdWxlIGlzIGludGVuZGVkIHRvIHVud3JhcCBBeGlvcyBkZWZhdWx0IGV4cG9ydCBhcyBuYW1lZC5cbi8vIEtlZXAgdG9wLWxldmVsIGV4cG9ydCBzYW1lIHdpdGggc3RhdGljIHByb3BlcnRpZXNcbi8vIHNvIHRoYXQgaXQgY2FuIGtlZXAgc2FtZSB3aXRoIGVzIG1vZHVsZSBvciBjanNcbmNvbnN0IHtcbiAgQXhpb3MsXG4gIEF4aW9zRXJyb3IsXG4gIENhbmNlbGVkRXJyb3IsXG4gIGlzQ2FuY2VsLFxuICBDYW5jZWxUb2tlbixcbiAgVkVSU0lPTixcbiAgYWxsLFxuICBDYW5jZWwsXG4gIGlzQXhpb3NFcnJvcixcbiAgc3ByZWFkLFxuICB0b0Zvcm1EYXRhLFxuICBBeGlvc0hlYWRlcnMsXG4gIEh0dHBTdGF0dXNDb2RlLFxuICBmb3JtVG9KU09OLFxuICBnZXRBZGFwdGVyLFxuICBtZXJnZUNvbmZpZ1xufSA9IGF4aW9zO1xuXG52YXIgeXM9T2JqZWN0LmRlZmluZVByb3BlcnR5O3ZhciBLZz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO3ZhciBHZz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lczt2YXIgUWc9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt2YXIgX2U9KHQsZSk9PigpPT4odCYmKGU9dCh0PTApKSxlKTt2YXIgTT0odCxlKT0+KCk9PihlfHx0KChlPXtleHBvcnRzOnt9fSkuZXhwb3J0cyxlKSxlLmV4cG9ydHMpLEp0PSh0LGUpPT57Zm9yKHZhciByIGluIGUpeXModCxyLHtnZXQ6ZVtyXSxlbnVtZXJhYmxlOiEwfSk7fSxZZz0odCxlLHIsaSk9PntpZihlJiZ0eXBlb2YgZT09XCJvYmplY3RcInx8dHlwZW9mIGU9PVwiZnVuY3Rpb25cIilmb3IobGV0IG4gb2YgR2coZSkpIVFnLmNhbGwodCxuKSYmbiE9PXImJnlzKHQsbix7Z2V0OigpPT5lW25dLGVudW1lcmFibGU6IShpPUtnKGUsbikpfHxpLmVudW1lcmFibGV9KTtyZXR1cm4gdH07dmFyIFg9dD0+WWcoeXMoe30sXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdCk7dmFyIF89X2UoKCk9Pnt9KTt2YXIgQj17fTtKdChCLHtfZGVidWdFbmQ6KCk9Pnl1LF9kZWJ1Z1Byb2Nlc3M6KCk9Pmd1LF9ldmVudHM6KCk9Pk91LF9ldmVudHNDb3VudDooKT0+eHUsX2V4aXRpbmc6KCk9PllsLF9mYXRhbEV4Y2VwdGlvbnM6KCk9PmN1LF9nZXRBY3RpdmVIYW5kbGVzOigpPT5ldSxfZ2V0QWN0aXZlUmVxdWVzdHM6KCk9PlpsLF9raWxsOigpPT5ydSxfbGlua2VkQmluZGluZzooKT0+R2wsX21heExpc3RlbmVyczooKT0+a3UsX3ByZWxvYWRfbW9kdWxlczooKT0+Q3UsX3Jhd0RlYnVnOigpPT56bCxfc3RhcnRQcm9maWxlcklkbGVOb3RpZmllcjooKT0+YnUsX3N0b3BQcm9maWxlcklkbGVOb3RpZmllcjooKT0+d3UsX3RpY2tDYWxsYmFjazooKT0+cHUsYWJvcnQ6KCk9PkV1LGFkZExpc3RlbmVyOigpPT5NdSxhbGxvd2VkTm9kZUVudmlyb25tZW50RmxhZ3M6KCk9Pmx1LGFyY2g6KCk9PnhsLGFyZ3Y6KCk9PlVsLGFyZ3YwOigpPT5SdSxhc3NlcnQ6KCk9PnV1LGJpbmRpbmc6KCk9PkZsLGNoZGlyOigpPT5IbCxjb25maWc6KCk9PkpsLGNwdVVzYWdlOigpPT4kaSxjd2Q6KCk9PiRsLGRlYnVnUG9ydDooKT0+VHUsZGVmYXVsdDooKT0+JHUsZGxvcGVuOigpPT5YbCxkb21haW46KCk9PlFsLGVtaXQ6KCk9PkR1LGVtaXRXYXJuaW5nOigpPT5qbCxlbnY6KCk9PkxsLGV4ZWNBcmd2OigpPT5ObCxleGVjUGF0aDooKT0+SXUsZXhpdDooKT0+b3UsZmVhdHVyZXM6KCk9PmZ1LGhhc1VuY2F1Z2h0RXhjZXB0aW9uQ2FwdHVyZUNhbGxiYWNrOigpPT5kdSxocnRpbWU6KCk9PldpLGtpbGw6KCk9PnN1LGxpc3RlbmVyczooKT0+V3UsbWVtb3J5VXNhZ2U6KCk9Pm51LG1vZHVsZUxvYWRMaXN0OigpPT5LbCxuZXh0VGljazooKT0+UGwsb2ZmOigpPT5VdSxvbjooKT0+d3Qsb25jZTooKT0+THUsb3BlblN0ZGluOigpPT5hdSxwaWQ6KCk9PlN1LHBsYXRmb3JtOigpPT5NbCxwcGlkOigpPT5BdSxwcmVwZW5kTGlzdGVuZXI6KCk9Pmp1LHByZXBlbmRPbmNlTGlzdGVuZXI6KCk9PkZ1LHJlYWxseUV4aXQ6KCk9PnR1LHJlbGVhc2U6KCk9PlZsLHJlbW92ZUFsbExpc3RlbmVyczooKT0+cXUscmVtb3ZlTGlzdGVuZXI6KCk9Pk51LHJlc291cmNlVXNhZ2U6KCk9Pml1LHNldFNvdXJjZU1hcHNFbmFibGVkOigpPT5CdSxzZXRVbmNhdWdodEV4Y2VwdGlvbkNhcHR1cmVDYWxsYmFjazooKT0+aHUsc3RkZXJyOigpPT5tdSxzdGRpbjooKT0+dnUsc3Rkb3V0OigpPT5fdSx0aXRsZTooKT0+T2wsdW1hc2s6KCk9PldsLHVwdGltZTooKT0+UHUsdmVyc2lvbjooKT0+cWwsdmVyc2lvbnM6KCk9PkRsfSk7ZnVuY3Rpb24gX3ModCl7dGhyb3cgbmV3IEVycm9yKFwiTm9kZS5qcyBwcm9jZXNzIFwiK3QrXCIgaXMgbm90IHN1cHBvcnRlZCBieSBKU1BNIGNvcmUgb3V0c2lkZSBvZiBOb2RlLmpzXCIpfWZ1bmN0aW9uIEpnKCl7IUxyfHwhWHR8fChMcj0hMSxYdC5sZW5ndGg/YnQ9WHQuY29uY2F0KGJ0KTpGaT0tMSxidC5sZW5ndGgmJkJsKCkpO31mdW5jdGlvbiBCbCgpe2lmKCFMcil7dmFyIHQ9c2V0VGltZW91dChKZywwKTtMcj0hMDtmb3IodmFyIGU9YnQubGVuZ3RoO2U7KXtmb3IoWHQ9YnQsYnQ9W107KytGaTxlOylYdCYmWHRbRmldLnJ1bigpO0ZpPS0xLGU9YnQubGVuZ3RoO31YdD1udWxsLExyPSExLGNsZWFyVGltZW91dCh0KTt9fWZ1bmN0aW9uIFBsKHQpe3ZhciBlPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKWVbci0xXT1hcmd1bWVudHNbcl07YnQucHVzaChuZXcga2wodCxlKSksYnQubGVuZ3RoPT09MSYmIUxyJiZzZXRUaW1lb3V0KEJsLDApO31mdW5jdGlvbiBrbCh0LGUpe3RoaXMuZnVuPXQsdGhpcy5hcnJheT1lO31mdW5jdGlvbiBFZSgpe31mdW5jdGlvbiBHbCh0KXtfcyhcIl9saW5rZWRCaW5kaW5nXCIpO31mdW5jdGlvbiBYbCh0KXtfcyhcImRsb3BlblwiKTt9ZnVuY3Rpb24gWmwoKXtyZXR1cm4gW119ZnVuY3Rpb24gZXUoKXtyZXR1cm4gW119ZnVuY3Rpb24gdXUodCxlKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoZXx8XCJhc3NlcnRpb24gZXJyb3JcIil9ZnVuY3Rpb24gZHUoKXtyZXR1cm4gITF9ZnVuY3Rpb24gUHUoKXtyZXR1cm4gTHQubm93KCkvMWUzfWZ1bmN0aW9uIFdpKHQpe3ZhciBlPU1hdGguZmxvb3IoKERhdGUubm93KCktTHQubm93KCkpKi4wMDEpLHI9THQubm93KCkqLjAwMSxpPU1hdGguZmxvb3IocikrZSxuPU1hdGguZmxvb3IociUxKjFlOSk7cmV0dXJuIHQmJihpPWktdFswXSxuPW4tdFsxXSxuPDAmJihpLS0sbis9d3MpKSxbaSxuXX1mdW5jdGlvbiB3dCgpe3JldHVybiAkdX1mdW5jdGlvbiBXdSh0KXtyZXR1cm4gW119dmFyIGJ0LExyLFh0LEZpLE9sLHhsLE1sLExsLFVsLE5sLHFsLERsLGpsLEZsLFdsLCRsLEhsLFZsLHpsLEtsLFFsLFlsLEpsLHR1LHJ1LCRpLGl1LG51LHN1LG91LGF1LGx1LGZ1LGN1LGh1LHB1LGd1LHl1LGJ1LHd1LF91LG11LHZ1LEV1LFN1LEF1LEl1LFR1LFJ1LEN1LEJ1LEx0LGJzLHdzLGt1LE91LHh1LE11LEx1LFV1LE51LHF1LER1LGp1LEZ1LCR1LEh1PV9lKCgpPT57XygpO3YoKTttKCk7YnQ9W10sTHI9ITEsRmk9LTE7a2wucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSk7fTtPbD1cImJyb3dzZXJcIix4bD1cIng2NFwiLE1sPVwiYnJvd3NlclwiLExsPXtQQVRIOlwiL3Vzci9iaW5cIixMQU5HOm5hdmlnYXRvci5sYW5ndWFnZStcIi5VVEYtOFwiLFBXRDpcIi9cIixIT01FOlwiL2hvbWVcIixUTVA6XCIvdG1wXCJ9LFVsPVtcIi91c3IvYmluL25vZGVcIl0sTmw9W10scWw9XCJ2MTYuOC4wXCIsRGw9e30samw9ZnVuY3Rpb24odCxlKXtjb25zb2xlLndhcm4oKGU/ZStcIjogXCI6XCJcIikrdCk7fSxGbD1mdW5jdGlvbih0KXtfcyhcImJpbmRpbmdcIik7fSxXbD1mdW5jdGlvbih0KXtyZXR1cm4gMH0sJGw9ZnVuY3Rpb24oKXtyZXR1cm4gXCIvXCJ9LEhsPWZ1bmN0aW9uKHQpe30sVmw9e25hbWU6XCJub2RlXCIsc291cmNlVXJsOlwiXCIsaGVhZGVyc1VybDpcIlwiLGxpYlVybDpcIlwifTt6bD1FZSxLbD1bXTtRbD17fSxZbD0hMSxKbD17fTt0dT1FZSxydT1FZSwkaT1mdW5jdGlvbigpe3JldHVybiB7fX0saXU9JGksbnU9JGksc3U9RWUsb3U9RWUsYXU9RWUsbHU9e307ZnU9e2luc3BlY3RvcjohMSxkZWJ1ZzohMSx1djohMSxpcHY2OiExLHRsc19hbHBuOiExLHRsc19zbmk6ITEsdGxzX29jc3A6ITEsdGxzOiExLGNhY2hlZF9idWlsdGluczohMH0sY3U9RWUsaHU9RWU7cHU9RWUsZ3U9RWUseXU9RWUsYnU9RWUsd3U9RWUsX3U9dm9pZCAwLG11PXZvaWQgMCx2dT12b2lkIDAsRXU9RWUsU3U9MixBdT0xLEl1PVwiL2Jpbi91c3Ivbm9kZVwiLFR1PTkyMjksUnU9XCJub2RlXCIsQ3U9W10sQnU9RWUsTHQ9e25vdzp0eXBlb2YgcGVyZm9ybWFuY2U8XCJ1XCI/cGVyZm9ybWFuY2Uubm93LmJpbmQocGVyZm9ybWFuY2UpOnZvaWQgMCx0aW1pbmc6dHlwZW9mIHBlcmZvcm1hbmNlPFwidVwiP3BlcmZvcm1hbmNlLnRpbWluZzp2b2lkIDB9O0x0Lm5vdz09PXZvaWQgMCYmKGJzPURhdGUubm93KCksTHQudGltaW5nJiZMdC50aW1pbmcubmF2aWdhdGlvblN0YXJ0JiYoYnM9THQudGltaW5nLm5hdmlnYXRpb25TdGFydCksTHQubm93PSgpPT5EYXRlLm5vdygpLWJzKTt3cz0xZTk7V2kuYmlnaW50PWZ1bmN0aW9uKHQpe3ZhciBlPVdpKHQpO3JldHVybiB0eXBlb2YgQmlnSW50PlwidVwiP2VbMF0qd3MrZVsxXTpCaWdJbnQoZVswXSp3cykrQmlnSW50KGVbMV0pfTtrdT0xMCxPdT17fSx4dT0wO011PXd0LEx1PXd0LFV1PXd0LE51PXd0LHF1PXd0LER1PUVlLGp1PXd0LEZ1PXd0OyR1PXt2ZXJzaW9uOnFsLHZlcnNpb25zOkRsLGFyY2g6eGwscGxhdGZvcm06TWwscmVsZWFzZTpWbCxfcmF3RGVidWc6emwsbW9kdWxlTG9hZExpc3Q6S2wsYmluZGluZzpGbCxfbGlua2VkQmluZGluZzpHbCxfZXZlbnRzOk91LF9ldmVudHNDb3VudDp4dSxfbWF4TGlzdGVuZXJzOmt1LG9uOnd0LGFkZExpc3RlbmVyOk11LG9uY2U6THUsb2ZmOlV1LHJlbW92ZUxpc3RlbmVyOk51LHJlbW92ZUFsbExpc3RlbmVyczpxdSxlbWl0OkR1LHByZXBlbmRMaXN0ZW5lcjpqdSxwcmVwZW5kT25jZUxpc3RlbmVyOkZ1LGxpc3RlbmVyczpXdSxkb21haW46UWwsX2V4aXRpbmc6WWwsY29uZmlnOkpsLGRsb3BlbjpYbCx1cHRpbWU6UHUsX2dldEFjdGl2ZVJlcXVlc3RzOlpsLF9nZXRBY3RpdmVIYW5kbGVzOmV1LHJlYWxseUV4aXQ6dHUsX2tpbGw6cnUsY3B1VXNhZ2U6JGkscmVzb3VyY2VVc2FnZTppdSxtZW1vcnlVc2FnZTpudSxraWxsOnN1LGV4aXQ6b3Usb3BlblN0ZGluOmF1LGFsbG93ZWROb2RlRW52aXJvbm1lbnRGbGFnczpsdSxhc3NlcnQ6dXUsZmVhdHVyZXM6ZnUsX2ZhdGFsRXhjZXB0aW9uczpjdSxzZXRVbmNhdWdodEV4Y2VwdGlvbkNhcHR1cmVDYWxsYmFjazpodSxoYXNVbmNhdWdodEV4Y2VwdGlvbkNhcHR1cmVDYWxsYmFjazpkdSxlbWl0V2FybmluZzpqbCxuZXh0VGljazpQbCxfdGlja0NhbGxiYWNrOnB1LF9kZWJ1Z1Byb2Nlc3M6Z3UsX2RlYnVnRW5kOnl1LF9zdGFydFByb2ZpbGVySWRsZU5vdGlmaWVyOmJ1LF9zdG9wUHJvZmlsZXJJZGxlTm90aWZpZXI6d3Usc3Rkb3V0Ol91LHN0ZGluOnZ1LHN0ZGVycjptdSxhYm9ydDpFdSx1bWFzazpXbCxjaGRpcjpIbCxjd2Q6JGwsZW52OkxsLHRpdGxlOk9sLGFyZ3Y6VWwsZXhlY0FyZ3Y6TmwscGlkOlN1LHBwaWQ6QXUsZXhlY1BhdGg6SXUsZGVidWdQb3J0OlR1LGhydGltZTpXaSxhcmd2MDpSdSxfcHJlbG9hZF9tb2R1bGVzOkN1LHNldFNvdXJjZU1hcHNFbmFibGVkOkJ1fTt9KTt2YXIgbT1fZSgoKT0+e0h1KCk7fSk7dmFyIG1lPXt9O0p0KG1lLHtCdWZmZXI6KCk9PngsSU5TUEVDVF9NQVhfQllURVM6KCk9PnR5LGRlZmF1bHQ6KCk9PlV0LGtNYXhMZW5ndGg6KCk9PnJ5fSk7ZnVuY3Rpb24gWGcoKXtpZihWdSlyZXR1cm4gY2k7VnU9ITAsY2kuYnl0ZUxlbmd0aD1hLGNpLnRvQnl0ZUFycmF5PWMsY2kuZnJvbUJ5dGVBcnJheT1nO2Zvcih2YXIgdD1bXSxlPVtdLHI9dHlwZW9mIFVpbnQ4QXJyYXk8XCJ1XCI/VWludDhBcnJheTpBcnJheSxpPVwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL1wiLG49MCxvPWkubGVuZ3RoO248bzsrK24pdFtuXT1pW25dLGVbaS5jaGFyQ29kZUF0KG4pXT1uO2VbXCItXCIuY2hhckNvZGVBdCgwKV09NjIsZVtcIl9cIi5jaGFyQ29kZUF0KDApXT02MztmdW5jdGlvbiBzKHkpe3ZhciB3PXkubGVuZ3RoO2lmKHclND4wKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDRcIik7dmFyIFM9eS5pbmRleE9mKFwiPVwiKTtTPT09LTEmJihTPXcpO3ZhciBFPVM9PT13PzA6NC1TJTQ7cmV0dXJuIFtTLEVdfWZ1bmN0aW9uIGEoeSl7dmFyIHc9cyh5KSxTPXdbMF0sRT13WzFdO3JldHVybiAoUytFKSozLzQtRX1mdW5jdGlvbiBsKHksdyxTKXtyZXR1cm4gKHcrUykqMy80LVN9ZnVuY3Rpb24gYyh5KXt2YXIgdyxTPXMoeSksRT1TWzBdLEk9U1sxXSxDPW5ldyByKGwoeSxFLEkpKSxSPTAsVT1JPjA/RS00OkUsTjtmb3IoTj0wO048VTtOKz00KXc9ZVt5LmNoYXJDb2RlQXQoTildPDwxOHxlW3kuY2hhckNvZGVBdChOKzEpXTw8MTJ8ZVt5LmNoYXJDb2RlQXQoTisyKV08PDZ8ZVt5LmNoYXJDb2RlQXQoTiszKV0sQ1tSKytdPXc+PjE2JjI1NSxDW1IrK109dz4+OCYyNTUsQ1tSKytdPXcmMjU1O3JldHVybiBJPT09MiYmKHc9ZVt5LmNoYXJDb2RlQXQoTildPDwyfGVbeS5jaGFyQ29kZUF0KE4rMSldPj40LENbUisrXT13JjI1NSksST09PTEmJih3PWVbeS5jaGFyQ29kZUF0KE4pXTw8MTB8ZVt5LmNoYXJDb2RlQXQoTisxKV08PDR8ZVt5LmNoYXJDb2RlQXQoTisyKV0+PjIsQ1tSKytdPXc+PjgmMjU1LENbUisrXT13JjI1NSksQ31mdW5jdGlvbiBoKHkpe3JldHVybiB0W3k+PjE4JjYzXSt0W3k+PjEyJjYzXSt0W3k+PjYmNjNdK3RbeSY2M119ZnVuY3Rpb24gZCh5LHcsUyl7Zm9yKHZhciBFLEk9W10sQz13O0M8UztDKz0zKUU9KHlbQ108PDE2JjE2NzExNjgwKSsoeVtDKzFdPDw4JjY1MjgwKSsoeVtDKzJdJjI1NSksSS5wdXNoKGgoRSkpO3JldHVybiBJLmpvaW4oXCJcIil9ZnVuY3Rpb24gZyh5KXtmb3IodmFyIHcsUz15Lmxlbmd0aCxFPVMlMyxJPVtdLEM9MTYzODMsUj0wLFU9Uy1FO1I8VTtSKz1DKUkucHVzaChkKHksUixSK0M+VT9VOlIrQykpO3JldHVybiBFPT09MT8odz15W1MtMV0sSS5wdXNoKHRbdz4+Ml0rdFt3PDw0JjYzXStcIj09XCIpKTpFPT09MiYmKHc9KHlbUy0yXTw8OCkreVtTLTFdLEkucHVzaCh0W3c+PjEwXSt0W3c+PjQmNjNdK3Rbdzw8MiY2M10rXCI9XCIpKSxJLmpvaW4oXCJcIil9cmV0dXJuIGNpfWZ1bmN0aW9uIFpnKCl7aWYoenUpcmV0dXJuIEhpO3p1PSEwO3JldHVybiBIaS5yZWFkPWZ1bmN0aW9uKHQsZSxyLGksbil7dmFyIG8scyxhPW4qOC1pLTEsbD0oMTw8YSktMSxjPWw+PjEsaD0tNyxkPXI/bi0xOjAsZz1yPy0xOjEseT10W2UrZF07Zm9yKGQrPWcsbz15JigxPDwtaCktMSx5Pj49LWgsaCs9YTtoPjA7bz1vKjI1Nit0W2UrZF0sZCs9ZyxoLT04KTtmb3Iocz1vJigxPDwtaCktMSxvPj49LWgsaCs9aTtoPjA7cz1zKjI1Nit0W2UrZF0sZCs9ZyxoLT04KTtpZihvPT09MClvPTEtYztlbHNlIHtpZihvPT09bClyZXR1cm4gcz9OYU46KHk/LTE6MSkqKDEvMCk7cz1zK01hdGgucG93KDIsaSksbz1vLWM7fXJldHVybiAoeT8tMToxKSpzKk1hdGgucG93KDIsby1pKX0sSGkud3JpdGU9ZnVuY3Rpb24odCxlLHIsaSxuLG8pe3ZhciBzLGEsbCxjPW8qOC1uLTEsaD0oMTw8YyktMSxkPWg+PjEsZz1uPT09MjM/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLHk9aT8wOm8tMSx3PWk/MTotMSxTPWU8MHx8ZT09PTAmJjEvZTwwPzE6MDtmb3IoZT1NYXRoLmFicyhlKSxpc05hTihlKXx8ZT09PTEvMD8oYT1pc05hTihlKT8xOjAscz1oKToocz1NYXRoLmZsb29yKE1hdGgubG9nKGUpL01hdGguTE4yKSxlKihsPU1hdGgucG93KDIsLXMpKTwxJiYocy0tLGwqPTIpLHMrZD49MT9lKz1nL2w6ZSs9ZypNYXRoLnBvdygyLDEtZCksZSpsPj0yJiYocysrLGwvPTIpLHMrZD49aD8oYT0wLHM9aCk6cytkPj0xPyhhPShlKmwtMSkqTWF0aC5wb3coMixuKSxzPXMrZCk6KGE9ZSpNYXRoLnBvdygyLGQtMSkqTWF0aC5wb3coMixuKSxzPTApKTtuPj04O3Rbcit5XT1hJjI1NSx5Kz13LGEvPTI1NixuLT04KTtmb3Iocz1zPDxufGEsYys9bjtjPjA7dFtyK3ldPXMmMjU1LHkrPXcscy89MjU2LGMtPTgpO3Rbcit5LXddfD1TKjEyODt9LEhpfWZ1bmN0aW9uIGV5KCl7aWYoS3UpcmV0dXJuIFp0O0t1PSEwO2xldCB0PVhnKCksZT1aZygpLHI9dHlwZW9mIFN5bWJvbD09XCJmdW5jdGlvblwiJiZ0eXBlb2YgU3ltYm9sLmZvcj09XCJmdW5jdGlvblwiP1N5bWJvbC5mb3IoXCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbVwiKTpudWxsO1p0LkJ1ZmZlcj1zLFp0LlNsb3dCdWZmZXI9SSxadC5JTlNQRUNUX01BWF9CWVRFUz01MDtsZXQgaT0yMTQ3NDgzNjQ3O1p0LmtNYXhMZW5ndGg9aSxzLlRZUEVEX0FSUkFZX1NVUFBPUlQ9bigpLCFzLlRZUEVEX0FSUkFZX1NVUFBPUlQmJnR5cGVvZiBjb25zb2xlPFwidVwiJiZ0eXBlb2YgY29uc29sZS5lcnJvcj09XCJmdW5jdGlvblwiJiZjb25zb2xlLmVycm9yKFwiVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGBidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuXCIpO2Z1bmN0aW9uIG4oKXt0cnl7bGV0IHA9bmV3IFVpbnQ4QXJyYXkoMSksdT17Zm9vOmZ1bmN0aW9uKCl7cmV0dXJuIDQyfX07cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZih1LFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YocCx1KSxwLmZvbygpPT09NDJ9Y2F0Y2h7cmV0dXJuICExfX1PYmplY3QuZGVmaW5lUHJvcGVydHkocy5wcm90b3R5cGUsXCJwYXJlbnRcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihzLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ1ZmZlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocy5wcm90b3R5cGUsXCJvZmZzZXRcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihzLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ5dGVPZmZzZXR9fSk7ZnVuY3Rpb24gbyhwKXtpZihwPmkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBcIicrcCsnXCIgaXMgaW52YWxpZCBmb3Igb3B0aW9uIFwic2l6ZVwiJyk7bGV0IHU9bmV3IFVpbnQ4QXJyYXkocCk7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZih1LHMucHJvdG90eXBlKSx1fWZ1bmN0aW9uIHMocCx1LGYpe2lmKHR5cGVvZiBwPT1cIm51bWJlclwiKXtpZih0eXBlb2YgdT09XCJzdHJpbmdcIil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJzdHJpbmdcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO3JldHVybiBoKHApfXJldHVybiBhKHAsdSxmKX1zLnBvb2xTaXplPTgxOTI7ZnVuY3Rpb24gYShwLHUsZil7aWYodHlwZW9mIHA9PVwic3RyaW5nXCIpcmV0dXJuIGQocCx1KTtpZihBcnJheUJ1ZmZlci5pc1ZpZXcocCkpcmV0dXJuIHkocCk7aWYocD09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgXCIrdHlwZW9mIHApO2lmKFllKHAsQXJyYXlCdWZmZXIpfHxwJiZZZShwLmJ1ZmZlcixBcnJheUJ1ZmZlcil8fHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcjxcInVcIiYmKFllKHAsU2hhcmVkQXJyYXlCdWZmZXIpfHxwJiZZZShwLmJ1ZmZlcixTaGFyZWRBcnJheUJ1ZmZlcikpKXJldHVybiB3KHAsdSxmKTtpZih0eXBlb2YgcD09XCJudW1iZXJcIil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO2xldCBiPXAudmFsdWVPZiYmcC52YWx1ZU9mKCk7aWYoYiE9bnVsbCYmYiE9PXApcmV0dXJuIHMuZnJvbShiLHUsZik7bGV0IEE9UyhwKTtpZihBKXJldHVybiBBO2lmKHR5cGVvZiBTeW1ib2w8XCJ1XCImJlN5bWJvbC50b1ByaW1pdGl2ZSE9bnVsbCYmdHlwZW9mIHBbU3ltYm9sLnRvUHJpbWl0aXZlXT09XCJmdW5jdGlvblwiKXJldHVybiBzLmZyb20ocFtTeW1ib2wudG9QcmltaXRpdmVdKFwic3RyaW5nXCIpLHUsZik7dGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlIFwiK3R5cGVvZiBwKX1zLmZyb209ZnVuY3Rpb24ocCx1LGYpe3JldHVybiBhKHAsdSxmKX0sT2JqZWN0LnNldFByb3RvdHlwZU9mKHMucHJvdG90eXBlLFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YocyxVaW50OEFycmF5KTtmdW5jdGlvbiBsKHApe2lmKHR5cGVvZiBwIT1cIm51bWJlclwiKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKTtpZihwPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBcIicrcCsnXCIgaXMgaW52YWxpZCBmb3Igb3B0aW9uIFwic2l6ZVwiJyl9ZnVuY3Rpb24gYyhwLHUsZil7cmV0dXJuIGwocCkscDw9MD9vKHApOnUhPT12b2lkIDA/dHlwZW9mIGY9PVwic3RyaW5nXCI/byhwKS5maWxsKHUsZik6byhwKS5maWxsKHUpOm8ocCl9cy5hbGxvYz1mdW5jdGlvbihwLHUsZil7cmV0dXJuIGMocCx1LGYpfTtmdW5jdGlvbiBoKHApe3JldHVybiBsKHApLG8ocDwwPzA6RShwKXwwKX1zLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHApe3JldHVybiBoKHApfSxzLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihwKXtyZXR1cm4gaChwKX07ZnVuY3Rpb24gZChwLHUpe2lmKCh0eXBlb2YgdSE9XCJzdHJpbmdcInx8dT09PVwiXCIpJiYodT1cInV0ZjhcIiksIXMuaXNFbmNvZGluZyh1KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrdSk7bGV0IGY9QyhwLHUpfDAsYj1vKGYpLEE9Yi53cml0ZShwLHUpO3JldHVybiBBIT09ZiYmKGI9Yi5zbGljZSgwLEEpKSxifWZ1bmN0aW9uIGcocCl7bGV0IHU9cC5sZW5ndGg8MD8wOkUocC5sZW5ndGgpfDAsZj1vKHUpO2ZvcihsZXQgYj0wO2I8dTtiKz0xKWZbYl09cFtiXSYyNTU7cmV0dXJuIGZ9ZnVuY3Rpb24geShwKXtpZihZZShwLFVpbnQ4QXJyYXkpKXtsZXQgdT1uZXcgVWludDhBcnJheShwKTtyZXR1cm4gdyh1LmJ1ZmZlcix1LmJ5dGVPZmZzZXQsdS5ieXRlTGVuZ3RoKX1yZXR1cm4gZyhwKX1mdW5jdGlvbiB3KHAsdSxmKXtpZih1PDB8fHAuYnl0ZUxlbmd0aDx1KXRocm93IG5ldyBSYW5nZUVycm9yKCdcIm9mZnNldFwiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO2lmKHAuYnl0ZUxlbmd0aDx1KyhmfHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJsZW5ndGhcIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTtsZXQgYjtyZXR1cm4gdT09PXZvaWQgMCYmZj09PXZvaWQgMD9iPW5ldyBVaW50OEFycmF5KHApOmY9PT12b2lkIDA/Yj1uZXcgVWludDhBcnJheShwLHUpOmI9bmV3IFVpbnQ4QXJyYXkocCx1LGYpLE9iamVjdC5zZXRQcm90b3R5cGVPZihiLHMucHJvdG90eXBlKSxifWZ1bmN0aW9uIFMocCl7aWYocy5pc0J1ZmZlcihwKSl7bGV0IHU9RShwLmxlbmd0aCl8MCxmPW8odSk7cmV0dXJuIGYubGVuZ3RoPT09MHx8cC5jb3B5KGYsMCwwLHUpLGZ9aWYocC5sZW5ndGghPT12b2lkIDApcmV0dXJuIHR5cGVvZiBwLmxlbmd0aCE9XCJudW1iZXJcInx8Z3MocC5sZW5ndGgpP28oMCk6ZyhwKTtpZihwLnR5cGU9PT1cIkJ1ZmZlclwiJiZBcnJheS5pc0FycmF5KHAuZGF0YSkpcmV0dXJuIGcocC5kYXRhKX1mdW5jdGlvbiBFKHApe2lmKHA+PWkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4XCIraS50b1N0cmluZygxNikrXCIgYnl0ZXNcIik7cmV0dXJuIHB8MH1mdW5jdGlvbiBJKHApe3JldHVybiArcCE9cCYmKHA9MCkscy5hbGxvYygrcCl9cy5pc0J1ZmZlcj1mdW5jdGlvbih1KXtyZXR1cm4gdSE9bnVsbCYmdS5faXNCdWZmZXI9PT0hMCYmdSE9PXMucHJvdG90eXBlfSxzLmNvbXBhcmU9ZnVuY3Rpb24odSxmKXtpZihZZSh1LFVpbnQ4QXJyYXkpJiYodT1zLmZyb20odSx1Lm9mZnNldCx1LmJ5dGVMZW5ndGgpKSxZZShmLFVpbnQ4QXJyYXkpJiYoZj1zLmZyb20oZixmLm9mZnNldCxmLmJ5dGVMZW5ndGgpKSwhcy5pc0J1ZmZlcih1KXx8IXMuaXNCdWZmZXIoZikpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiYnVmMVwiLCBcImJ1ZjJcIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKHU9PT1mKXJldHVybiAwO2xldCBiPXUubGVuZ3RoLEE9Zi5sZW5ndGg7Zm9yKGxldCBUPTAsUD1NYXRoLm1pbihiLEEpO1Q8UDsrK1QpaWYodVtUXSE9PWZbVF0pe2I9dVtUXSxBPWZbVF07YnJlYWt9cmV0dXJuIGI8QT8tMTpBPGI/MTowfSxzLmlzRW5jb2Rpbmc9ZnVuY3Rpb24odSl7c3dpdGNoKFN0cmluZyh1KS50b0xvd2VyQ2FzZSgpKXtjYXNlXCJoZXhcIjpjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpjYXNlXCJhc2NpaVwiOmNhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOmNhc2VcImJhc2U2NFwiOmNhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiAhMDtkZWZhdWx0OnJldHVybiAhMX19LHMuY29uY2F0PWZ1bmN0aW9uKHUsZil7aWYoIUFycmF5LmlzQXJyYXkodSkpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYodS5sZW5ndGg9PT0wKXJldHVybiBzLmFsbG9jKDApO2xldCBiO2lmKGY9PT12b2lkIDApZm9yKGY9MCxiPTA7Yjx1Lmxlbmd0aDsrK2IpZis9dVtiXS5sZW5ndGg7bGV0IEE9cy5hbGxvY1Vuc2FmZShmKSxUPTA7Zm9yKGI9MDtiPHUubGVuZ3RoOysrYil7bGV0IFA9dVtiXTtpZihZZShQLFVpbnQ4QXJyYXkpKVQrUC5sZW5ndGg+QS5sZW5ndGg/KHMuaXNCdWZmZXIoUCl8fChQPXMuZnJvbShQKSksUC5jb3B5KEEsVCkpOlVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKEEsUCxUKTtlbHNlIGlmKHMuaXNCdWZmZXIoUCkpUC5jb3B5KEEsVCk7ZWxzZSB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtUKz1QLmxlbmd0aDt9cmV0dXJuIEF9O2Z1bmN0aW9uIEMocCx1KXtpZihzLmlzQnVmZmVyKHApKXJldHVybiBwLmxlbmd0aDtpZihBcnJheUJ1ZmZlci5pc1ZpZXcocCl8fFllKHAsQXJyYXlCdWZmZXIpKXJldHVybiBwLmJ5dGVMZW5ndGg7aWYodHlwZW9mIHAhPVwic3RyaW5nXCIpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwic3RyaW5nXCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3IgQXJyYXlCdWZmZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgcCk7bGV0IGY9cC5sZW5ndGgsYj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXT09PSEwO2lmKCFiJiZmPT09MClyZXR1cm4gMDtsZXQgQT0hMTtmb3IoOzspc3dpdGNoKHUpe2Nhc2VcImFzY2lpXCI6Y2FzZVwibGF0aW4xXCI6Y2FzZVwiYmluYXJ5XCI6cmV0dXJuIGY7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuIHBzKHApLmxlbmd0aDtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4gZioyO2Nhc2VcImhleFwiOnJldHVybiBmPj4+MTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4gQ2wocCkubGVuZ3RoO2RlZmF1bHQ6aWYoQSlyZXR1cm4gYj8tMTpwcyhwKS5sZW5ndGg7dT0oXCJcIit1KS50b0xvd2VyQ2FzZSgpLEE9ITA7fX1zLmJ5dGVMZW5ndGg9QztmdW5jdGlvbiBSKHAsdSxmKXtsZXQgYj0hMTtpZigodT09PXZvaWQgMHx8dTwwKSYmKHU9MCksdT50aGlzLmxlbmd0aHx8KChmPT09dm9pZCAwfHxmPnRoaXMubGVuZ3RoKSYmKGY9dGhpcy5sZW5ndGgpLGY8PTApfHwoZj4+Pj0wLHU+Pj49MCxmPD11KSlyZXR1cm4gXCJcIjtmb3IocHx8KHA9XCJ1dGY4XCIpOzspc3dpdGNoKHApe2Nhc2VcImhleFwiOnJldHVybiBxZyh0aGlzLHUsZik7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuIFByKHRoaXMsdSxmKTtjYXNlXCJhc2NpaVwiOnJldHVybiBocyh0aGlzLHUsZik7Y2FzZVwibGF0aW4xXCI6Y2FzZVwiYmluYXJ5XCI6cmV0dXJuIE5nKHRoaXMsdSxmKTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4gZ2UodGhpcyx1LGYpO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiBEZyh0aGlzLHUsZik7ZGVmYXVsdDppZihiKXRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmtub3duIGVuY29kaW5nOiBcIitwKTtwPShwK1wiXCIpLnRvTG93ZXJDYXNlKCksYj0hMDt9fXMucHJvdG90eXBlLl9pc0J1ZmZlcj0hMDtmdW5jdGlvbiBVKHAsdSxmKXtsZXQgYj1wW3VdO3BbdV09cFtmXSxwW2ZdPWI7fXMucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe2xldCB1PXRoaXMubGVuZ3RoO2lmKHUlMiE9PTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0c1wiKTtmb3IobGV0IGY9MDtmPHU7Zis9MilVKHRoaXMsZixmKzEpO3JldHVybiB0aGlzfSxzLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXtsZXQgdT10aGlzLmxlbmd0aDtpZih1JTQhPT0wKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHNcIik7Zm9yKGxldCBmPTA7Zjx1O2YrPTQpVSh0aGlzLGYsZiszKSxVKHRoaXMsZisxLGYrMik7cmV0dXJuIHRoaXN9LHMucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe2xldCB1PXRoaXMubGVuZ3RoO2lmKHUlOCE9PTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0c1wiKTtmb3IobGV0IGY9MDtmPHU7Zis9OClVKHRoaXMsZixmKzcpLFUodGhpcyxmKzEsZis2KSxVKHRoaXMsZisyLGYrNSksVSh0aGlzLGYrMyxmKzQpO3JldHVybiB0aGlzfSxzLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe2xldCB1PXRoaXMubGVuZ3RoO3JldHVybiB1PT09MD9cIlwiOmFyZ3VtZW50cy5sZW5ndGg9PT0wP1ByKHRoaXMsMCx1KTpSLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0scy5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmc9cy5wcm90b3R5cGUudG9TdHJpbmcscy5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHUpe2lmKCFzLmlzQnVmZmVyKHUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyXCIpO3JldHVybiB0aGlzPT09dT8hMDpzLmNvbXBhcmUodGhpcyx1KT09PTB9LHMucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtsZXQgdT1cIlwiLGY9WnQuSU5TUEVDVF9NQVhfQllURVM7cmV0dXJuIHU9dGhpcy50b1N0cmluZyhcImhleFwiLDAsZikucmVwbGFjZSgvKC57Mn0pL2csXCIkMSBcIikudHJpbSgpLHRoaXMubGVuZ3RoPmYmJih1Kz1cIiAuLi4gXCIpLFwiPEJ1ZmZlciBcIit1K1wiPlwifSxyJiYocy5wcm90b3R5cGVbcl09cy5wcm90b3R5cGUuaW5zcGVjdCkscy5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbih1LGYsYixBLFQpe2lmKFllKHUsVWludDhBcnJheSkmJih1PXMuZnJvbSh1LHUub2Zmc2V0LHUuYnl0ZUxlbmd0aCkpLCFzLmlzQnVmZmVyKHUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInRhcmdldFwiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgdSk7aWYoZj09PXZvaWQgMCYmKGY9MCksYj09PXZvaWQgMCYmKGI9dT91Lmxlbmd0aDowKSxBPT09dm9pZCAwJiYoQT0wKSxUPT09dm9pZCAwJiYoVD10aGlzLmxlbmd0aCksZjwwfHxiPnUubGVuZ3RofHxBPDB8fFQ+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJvdXQgb2YgcmFuZ2UgaW5kZXhcIik7aWYoQT49VCYmZj49YilyZXR1cm4gMDtpZihBPj1UKXJldHVybiAtMTtpZihmPj1iKXJldHVybiAxO2lmKGY+Pj49MCxiPj4+PTAsQT4+Pj0wLFQ+Pj49MCx0aGlzPT09dSlyZXR1cm4gMDtsZXQgUD1ULUEsJD1iLWYsc2U9TWF0aC5taW4oUCwkKSx0ZT10aGlzLnNsaWNlKEEsVCksb2U9dS5zbGljZShmLGIpO2ZvcihsZXQgSj0wO0o8c2U7KytKKWlmKHRlW0pdIT09b2VbSl0pe1A9dGVbSl0sJD1vZVtKXTticmVha31yZXR1cm4gUDwkPy0xOiQ8UD8xOjB9O2Z1bmN0aW9uIE4ocCx1LGYsYixBKXtpZihwLmxlbmd0aD09PTApcmV0dXJuIC0xO2lmKHR5cGVvZiBmPT1cInN0cmluZ1wiPyhiPWYsZj0wKTpmPjIxNDc0ODM2NDc/Zj0yMTQ3NDgzNjQ3OmY8LTIxNDc0ODM2NDgmJihmPS0yMTQ3NDgzNjQ4KSxmPStmLGdzKGYpJiYoZj1BPzA6cC5sZW5ndGgtMSksZjwwJiYoZj1wLmxlbmd0aCtmKSxmPj1wLmxlbmd0aCl7aWYoQSlyZXR1cm4gLTE7Zj1wLmxlbmd0aC0xO31lbHNlIGlmKGY8MClpZihBKWY9MDtlbHNlIHJldHVybiAtMTtpZih0eXBlb2YgdT09XCJzdHJpbmdcIiYmKHU9cy5mcm9tKHUsYikpLHMuaXNCdWZmZXIodSkpcmV0dXJuIHUubGVuZ3RoPT09MD8tMTpXKHAsdSxmLGIsQSk7aWYodHlwZW9mIHU9PVwibnVtYmVyXCIpcmV0dXJuIHU9dSYyNTUsdHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y9PVwiZnVuY3Rpb25cIj9BP1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChwLHUsZik6VWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChwLHUsZik6VyhwLFt1XSxmLGIsQSk7dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlclwiKX1mdW5jdGlvbiBXKHAsdSxmLGIsQSl7bGV0IFQ9MSxQPXAubGVuZ3RoLCQ9dS5sZW5ndGg7aWYoYiE9PXZvaWQgMCYmKGI9U3RyaW5nKGIpLnRvTG93ZXJDYXNlKCksYj09PVwidWNzMlwifHxiPT09XCJ1Y3MtMlwifHxiPT09XCJ1dGYxNmxlXCJ8fGI9PT1cInV0Zi0xNmxlXCIpKXtpZihwLmxlbmd0aDwyfHx1Lmxlbmd0aDwyKXJldHVybiAtMTtUPTIsUC89MiwkLz0yLGYvPTI7fWZ1bmN0aW9uIHNlKG9lLEope3JldHVybiBUPT09MT9vZVtKXTpvZS5yZWFkVUludDE2QkUoSipUKX1sZXQgdGU7aWYoQSl7bGV0IG9lPS0xO2Zvcih0ZT1mO3RlPFA7dGUrKylpZihzZShwLHRlKT09PXNlKHUsb2U9PT0tMT8wOnRlLW9lKSl7aWYob2U9PT0tMSYmKG9lPXRlKSx0ZS1vZSsxPT09JClyZXR1cm4gb2UqVH1lbHNlIG9lIT09LTEmJih0ZS09dGUtb2UpLG9lPS0xO31lbHNlIGZvcihmKyQ+UCYmKGY9UC0kKSx0ZT1mO3RlPj0wO3RlLS0pe2xldCBvZT0hMDtmb3IobGV0IEo9MDtKPCQ7SisrKWlmKHNlKHAsdGUrSikhPT1zZSh1LEopKXtvZT0hMTticmVha31pZihvZSlyZXR1cm4gdGV9cmV0dXJuIC0xfXMucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKHUsZixiKXtyZXR1cm4gdGhpcy5pbmRleE9mKHUsZixiKSE9PS0xfSxzLnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKHUsZixiKXtyZXR1cm4gTih0aGlzLHUsZixiLCEwKX0scy5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24odSxmLGIpe3JldHVybiBOKHRoaXMsdSxmLGIsITEpfTtmdW5jdGlvbiBLKHAsdSxmLGIpe2Y9TnVtYmVyKGYpfHwwO2xldCBBPXAubGVuZ3RoLWY7Yj8oYj1OdW1iZXIoYiksYj5BJiYoYj1BKSk6Yj1BO2xldCBUPXUubGVuZ3RoO2I+VC8yJiYoYj1ULzIpO2xldCBQO2ZvcihQPTA7UDxiOysrUCl7bGV0ICQ9cGFyc2VJbnQodS5zdWJzdHIoUCoyLDIpLDE2KTtpZihncygkKSlyZXR1cm4gUDtwW2YrUF09JDt9cmV0dXJuIFB9ZnVuY3Rpb24geihwLHUsZixiKXtyZXR1cm4gamkocHModSxwLmxlbmd0aC1mKSxwLGYsYil9ZnVuY3Rpb24gUShwLHUsZixiKXtyZXR1cm4gamkoJGcodSkscCxmLGIpfWZ1bmN0aW9uIHBlKHAsdSxmLGIpe3JldHVybiBqaShDbCh1KSxwLGYsYil9ZnVuY3Rpb24gWXQocCx1LGYsYil7cmV0dXJuIGppKEhnKHUscC5sZW5ndGgtZikscCxmLGIpfXMucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHUsZixiLEEpe2lmKGY9PT12b2lkIDApQT1cInV0ZjhcIixiPXRoaXMubGVuZ3RoLGY9MDtlbHNlIGlmKGI9PT12b2lkIDAmJnR5cGVvZiBmPT1cInN0cmluZ1wiKUE9ZixiPXRoaXMubGVuZ3RoLGY9MDtlbHNlIGlmKGlzRmluaXRlKGYpKWY9Zj4+PjAsaXNGaW5pdGUoYik/KGI9Yj4+PjAsQT09PXZvaWQgMCYmKEE9XCJ1dGY4XCIpKTooQT1iLGI9dm9pZCAwKTtlbHNlIHRocm93IG5ldyBFcnJvcihcIkJ1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkXCIpO2xldCBUPXRoaXMubGVuZ3RoLWY7aWYoKGI9PT12b2lkIDB8fGI+VCkmJihiPVQpLHUubGVuZ3RoPjAmJihiPDB8fGY8MCl8fGY+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kc1wiKTtBfHwoQT1cInV0ZjhcIik7bGV0IFA9ITE7Zm9yKDs7KXN3aXRjaChBKXtjYXNlXCJoZXhcIjpyZXR1cm4gSyh0aGlzLHUsZixiKTtjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpyZXR1cm4geih0aGlzLHUsZixiKTtjYXNlXCJhc2NpaVwiOmNhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOnJldHVybiBRKHRoaXMsdSxmLGIpO2Nhc2VcImJhc2U2NFwiOnJldHVybiBwZSh0aGlzLHUsZixiKTtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4gWXQodGhpcyx1LGYsYik7ZGVmYXVsdDppZihQKXRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmtub3duIGVuY29kaW5nOiBcIitBKTtBPShcIlwiK0EpLnRvTG93ZXJDYXNlKCksUD0hMDt9fSxzLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4ge3R5cGU6XCJCdWZmZXJcIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O2Z1bmN0aW9uIGdlKHAsdSxmKXtyZXR1cm4gdT09PTAmJmY9PT1wLmxlbmd0aD90LmZyb21CeXRlQXJyYXkocCk6dC5mcm9tQnl0ZUFycmF5KHAuc2xpY2UodSxmKSl9ZnVuY3Rpb24gUHIocCx1LGYpe2Y9TWF0aC5taW4ocC5sZW5ndGgsZik7bGV0IGI9W10sQT11O2Zvcig7QTxmOyl7bGV0IFQ9cFtBXSxQPW51bGwsJD1UPjIzOT80OlQ+MjIzPzM6VD4xOTE/MjoxO2lmKEErJDw9Zil7bGV0IHNlLHRlLG9lLEo7c3dpdGNoKCQpe2Nhc2UgMTpUPDEyOCYmKFA9VCk7YnJlYWs7Y2FzZSAyOnNlPXBbQSsxXSwoc2UmMTkyKT09PTEyOCYmKEo9KFQmMzEpPDw2fHNlJjYzLEo+MTI3JiYoUD1KKSk7YnJlYWs7Y2FzZSAzOnNlPXBbQSsxXSx0ZT1wW0ErMl0sKHNlJjE5Mik9PT0xMjgmJih0ZSYxOTIpPT09MTI4JiYoSj0oVCYxNSk8PDEyfChzZSY2Myk8PDZ8dGUmNjMsSj4yMDQ3JiYoSjw1NTI5Nnx8Sj41NzM0MykmJihQPUopKTticmVhaztjYXNlIDQ6c2U9cFtBKzFdLHRlPXBbQSsyXSxvZT1wW0ErM10sKHNlJjE5Mik9PT0xMjgmJih0ZSYxOTIpPT09MTI4JiYob2UmMTkyKT09PTEyOCYmKEo9KFQmMTUpPDwxOHwoc2UmNjMpPDwxMnwodGUmNjMpPDw2fG9lJjYzLEo+NjU1MzUmJko8MTExNDExMiYmKFA9SikpO319UD09PW51bGw/KFA9NjU1MzMsJD0xKTpQPjY1NTM1JiYoUC09NjU1MzYsYi5wdXNoKFA+Pj4xMCYxMDIzfDU1Mjk2KSxQPTU2MzIwfFAmMTAyMyksYi5wdXNoKFApLEErPSQ7fXJldHVybiBPcihiKX1sZXQga3I9NDA5NjtmdW5jdGlvbiBPcihwKXtsZXQgdT1wLmxlbmd0aDtpZih1PD1rcilyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcscCk7bGV0IGY9XCJcIixiPTA7Zm9yKDtiPHU7KWYrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLHAuc2xpY2UoYixiKz1rcikpO3JldHVybiBmfWZ1bmN0aW9uIGhzKHAsdSxmKXtsZXQgYj1cIlwiO2Y9TWF0aC5taW4ocC5sZW5ndGgsZik7Zm9yKGxldCBBPXU7QTxmOysrQSliKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHBbQV0mMTI3KTtyZXR1cm4gYn1mdW5jdGlvbiBOZyhwLHUsZil7bGV0IGI9XCJcIjtmPU1hdGgubWluKHAubGVuZ3RoLGYpO2ZvcihsZXQgQT11O0E8ZjsrK0EpYis9U3RyaW5nLmZyb21DaGFyQ29kZShwW0FdKTtyZXR1cm4gYn1mdW5jdGlvbiBxZyhwLHUsZil7bGV0IGI9cC5sZW5ndGg7KCF1fHx1PDApJiYodT0wKSwoIWZ8fGY8MHx8Zj5iKSYmKGY9Yik7bGV0IEE9XCJcIjtmb3IobGV0IFQ9dTtUPGY7KytUKUErPVZnW3BbVF1dO3JldHVybiBBfWZ1bmN0aW9uIERnKHAsdSxmKXtsZXQgYj1wLnNsaWNlKHUsZiksQT1cIlwiO2ZvcihsZXQgVD0wO1Q8Yi5sZW5ndGgtMTtUKz0yKUErPVN0cmluZy5mcm9tQ2hhckNvZGUoYltUXStiW1QrMV0qMjU2KTtyZXR1cm4gQX1zLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbih1LGYpe2xldCBiPXRoaXMubGVuZ3RoO3U9fn51LGY9Zj09PXZvaWQgMD9iOn5+Zix1PDA/KHUrPWIsdTwwJiYodT0wKSk6dT5iJiYodT1iKSxmPDA/KGYrPWIsZjwwJiYoZj0wKSk6Zj5iJiYoZj1iKSxmPHUmJihmPXUpO2xldCBBPXRoaXMuc3ViYXJyYXkodSxmKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKEEscy5wcm90b3R5cGUpLEF9O2Z1bmN0aW9uIHllKHAsdSxmKXtpZihwJTEhPT0wfHxwPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJvZmZzZXQgaXMgbm90IHVpbnRcIik7aWYocCt1PmYpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoXCIpfXMucHJvdG90eXBlLnJlYWRVaW50TEU9cy5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbih1LGYsYil7dT11Pj4+MCxmPWY+Pj4wLGJ8fHllKHUsZix0aGlzLmxlbmd0aCk7bGV0IEE9dGhpc1t1XSxUPTEsUD0wO2Zvcig7KytQPGYmJihUKj0yNTYpOylBKz10aGlzW3UrUF0qVDtyZXR1cm4gQX0scy5wcm90b3R5cGUucmVhZFVpbnRCRT1zLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKHUsZixiKXt1PXU+Pj4wLGY9Zj4+PjAsYnx8eWUodSxmLHRoaXMubGVuZ3RoKTtsZXQgQT10aGlzW3UrLS1mXSxUPTE7Zm9yKDtmPjAmJihUKj0yNTYpOylBKz10aGlzW3UrLS1mXSpUO3JldHVybiBBfSxzLnByb3RvdHlwZS5yZWFkVWludDg9cy5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKHUsZil7cmV0dXJuIHU9dT4+PjAsZnx8eWUodSwxLHRoaXMubGVuZ3RoKSx0aGlzW3VdfSxzLnByb3RvdHlwZS5yZWFkVWludDE2TEU9cy5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKHUsZil7cmV0dXJuIHU9dT4+PjAsZnx8eWUodSwyLHRoaXMubGVuZ3RoKSx0aGlzW3VdfHRoaXNbdSsxXTw8OH0scy5wcm90b3R5cGUucmVhZFVpbnQxNkJFPXMucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbih1LGYpe3JldHVybiB1PXU+Pj4wLGZ8fHllKHUsMix0aGlzLmxlbmd0aCksdGhpc1t1XTw8OHx0aGlzW3UrMV19LHMucHJvdG90eXBlLnJlYWRVaW50MzJMRT1zLnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24odSxmKXtyZXR1cm4gdT11Pj4+MCxmfHx5ZSh1LDQsdGhpcy5sZW5ndGgpLCh0aGlzW3VdfHRoaXNbdSsxXTw8OHx0aGlzW3UrMl08PDE2KSt0aGlzW3UrM10qMTY3NzcyMTZ9LHMucHJvdG90eXBlLnJlYWRVaW50MzJCRT1zLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24odSxmKXtyZXR1cm4gdT11Pj4+MCxmfHx5ZSh1LDQsdGhpcy5sZW5ndGgpLHRoaXNbdV0qMTY3NzcyMTYrKHRoaXNbdSsxXTw8MTZ8dGhpc1t1KzJdPDw4fHRoaXNbdSszXSl9LHMucHJvdG90eXBlLnJlYWRCaWdVSW50NjRMRT1NdChmdW5jdGlvbih1KXt1PXU+Pj4wLE1yKHUsXCJvZmZzZXRcIik7bGV0IGY9dGhpc1t1XSxiPXRoaXNbdSs3XTsoZj09PXZvaWQgMHx8Yj09PXZvaWQgMCkmJmZpKHUsdGhpcy5sZW5ndGgtOCk7bGV0IEE9Zit0aGlzWysrdV0qMioqOCt0aGlzWysrdV0qMioqMTYrdGhpc1srK3VdKjIqKjI0LFQ9dGhpc1srK3VdK3RoaXNbKyt1XSoyKio4K3RoaXNbKyt1XSoyKioxNitiKjIqKjI0O3JldHVybiBCaWdJbnQoQSkrKEJpZ0ludChUKTw8QmlnSW50KDMyKSl9KSxzLnByb3RvdHlwZS5yZWFkQmlnVUludDY0QkU9TXQoZnVuY3Rpb24odSl7dT11Pj4+MCxNcih1LFwib2Zmc2V0XCIpO2xldCBmPXRoaXNbdV0sYj10aGlzW3UrN107KGY9PT12b2lkIDB8fGI9PT12b2lkIDApJiZmaSh1LHRoaXMubGVuZ3RoLTgpO2xldCBBPWYqMioqMjQrdGhpc1srK3VdKjIqKjE2K3RoaXNbKyt1XSoyKio4K3RoaXNbKyt1XSxUPXRoaXNbKyt1XSoyKioyNCt0aGlzWysrdV0qMioqMTYrdGhpc1srK3VdKjIqKjgrYjtyZXR1cm4gKEJpZ0ludChBKTw8QmlnSW50KDMyKSkrQmlnSW50KFQpfSkscy5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKHUsZixiKXt1PXU+Pj4wLGY9Zj4+PjAsYnx8eWUodSxmLHRoaXMubGVuZ3RoKTtsZXQgQT10aGlzW3VdLFQ9MSxQPTA7Zm9yKDsrK1A8ZiYmKFQqPTI1Nik7KUErPXRoaXNbdStQXSpUO3JldHVybiBUKj0xMjgsQT49VCYmKEEtPU1hdGgucG93KDIsOCpmKSksQX0scy5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKHUsZixiKXt1PXU+Pj4wLGY9Zj4+PjAsYnx8eWUodSxmLHRoaXMubGVuZ3RoKTtsZXQgQT1mLFQ9MSxQPXRoaXNbdSstLUFdO2Zvcig7QT4wJiYoVCo9MjU2KTspUCs9dGhpc1t1Ky0tQV0qVDtyZXR1cm4gVCo9MTI4LFA+PVQmJihQLT1NYXRoLnBvdygyLDgqZikpLFB9LHMucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKHUsZil7cmV0dXJuIHU9dT4+PjAsZnx8eWUodSwxLHRoaXMubGVuZ3RoKSx0aGlzW3VdJjEyOD8oMjU1LXRoaXNbdV0rMSkqLTE6dGhpc1t1XX0scy5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24odSxmKXt1PXU+Pj4wLGZ8fHllKHUsMix0aGlzLmxlbmd0aCk7bGV0IGI9dGhpc1t1XXx0aGlzW3UrMV08PDg7cmV0dXJuIGImMzI3Njg/Ynw0Mjk0OTAxNzYwOmJ9LHMucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uKHUsZil7dT11Pj4+MCxmfHx5ZSh1LDIsdGhpcy5sZW5ndGgpO2xldCBiPXRoaXNbdSsxXXx0aGlzW3VdPDw4O3JldHVybiBiJjMyNzY4P2J8NDI5NDkwMTc2MDpifSxzLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbih1LGYpe3JldHVybiB1PXU+Pj4wLGZ8fHllKHUsNCx0aGlzLmxlbmd0aCksdGhpc1t1XXx0aGlzW3UrMV08PDh8dGhpc1t1KzJdPDwxNnx0aGlzW3UrM108PDI0fSxzLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbih1LGYpe3JldHVybiB1PXU+Pj4wLGZ8fHllKHUsNCx0aGlzLmxlbmd0aCksdGhpc1t1XTw8MjR8dGhpc1t1KzFdPDwxNnx0aGlzW3UrMl08PDh8dGhpc1t1KzNdfSxzLnByb3RvdHlwZS5yZWFkQmlnSW50NjRMRT1NdChmdW5jdGlvbih1KXt1PXU+Pj4wLE1yKHUsXCJvZmZzZXRcIik7bGV0IGY9dGhpc1t1XSxiPXRoaXNbdSs3XTsoZj09PXZvaWQgMHx8Yj09PXZvaWQgMCkmJmZpKHUsdGhpcy5sZW5ndGgtOCk7bGV0IEE9dGhpc1t1KzRdK3RoaXNbdSs1XSoyKio4K3RoaXNbdSs2XSoyKioxNisoYjw8MjQpO3JldHVybiAoQmlnSW50KEEpPDxCaWdJbnQoMzIpKStCaWdJbnQoZit0aGlzWysrdV0qMioqOCt0aGlzWysrdV0qMioqMTYrdGhpc1srK3VdKjIqKjI0KX0pLHMucHJvdG90eXBlLnJlYWRCaWdJbnQ2NEJFPU10KGZ1bmN0aW9uKHUpe3U9dT4+PjAsTXIodSxcIm9mZnNldFwiKTtsZXQgZj10aGlzW3VdLGI9dGhpc1t1KzddOyhmPT09dm9pZCAwfHxiPT09dm9pZCAwKSYmZmkodSx0aGlzLmxlbmd0aC04KTtsZXQgQT0oZjw8MjQpK3RoaXNbKyt1XSoyKioxNit0aGlzWysrdV0qMioqOCt0aGlzWysrdV07cmV0dXJuIChCaWdJbnQoQSk8PEJpZ0ludCgzMikpK0JpZ0ludCh0aGlzWysrdV0qMioqMjQrdGhpc1srK3VdKjIqKjE2K3RoaXNbKyt1XSoyKio4K2IpfSkscy5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24odSxmKXtyZXR1cm4gdT11Pj4+MCxmfHx5ZSh1LDQsdGhpcy5sZW5ndGgpLGUucmVhZCh0aGlzLHUsITAsMjMsNCl9LHMucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKHUsZil7cmV0dXJuIHU9dT4+PjAsZnx8eWUodSw0LHRoaXMubGVuZ3RoKSxlLnJlYWQodGhpcyx1LCExLDIzLDQpfSxzLnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24odSxmKXtyZXR1cm4gdT11Pj4+MCxmfHx5ZSh1LDgsdGhpcy5sZW5ndGgpLGUucmVhZCh0aGlzLHUsITAsNTIsOCl9LHMucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbih1LGYpe3JldHVybiB1PXU+Pj4wLGZ8fHllKHUsOCx0aGlzLmxlbmd0aCksZS5yZWFkKHRoaXMsdSwhMSw1Miw4KX07ZnVuY3Rpb24gQ2UocCx1LGYsYixBLFQpe2lmKCFzLmlzQnVmZmVyKHApKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKHU+QXx8dTxUKXRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKGYrYj5wLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkluZGV4IG91dCBvZiByYW5nZVwiKX1zLnByb3RvdHlwZS53cml0ZVVpbnRMRT1zLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbih1LGYsYixBKXtpZih1PSt1LGY9Zj4+PjAsYj1iPj4+MCwhQSl7bGV0ICQ9TWF0aC5wb3coMiw4KmIpLTE7Q2UodGhpcyx1LGYsYiwkLDApO31sZXQgVD0xLFA9MDtmb3IodGhpc1tmXT11JjI1NTsrK1A8YiYmKFQqPTI1Nik7KXRoaXNbZitQXT11L1QmMjU1O3JldHVybiBmK2J9LHMucHJvdG90eXBlLndyaXRlVWludEJFPXMucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKHUsZixiLEEpe2lmKHU9K3UsZj1mPj4+MCxiPWI+Pj4wLCFBKXtsZXQgJD1NYXRoLnBvdygyLDgqYiktMTtDZSh0aGlzLHUsZixiLCQsMCk7fWxldCBUPWItMSxQPTE7Zm9yKHRoaXNbZitUXT11JjI1NTstLVQ+PTAmJihQKj0yNTYpOyl0aGlzW2YrVF09dS9QJjI1NTtyZXR1cm4gZitifSxzLnByb3RvdHlwZS53cml0ZVVpbnQ4PXMucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24odSxmLGIpe3JldHVybiB1PSt1LGY9Zj4+PjAsYnx8Q2UodGhpcyx1LGYsMSwyNTUsMCksdGhpc1tmXT11JjI1NSxmKzF9LHMucHJvdG90eXBlLndyaXRlVWludDE2TEU9cy5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbih1LGYsYil7cmV0dXJuIHU9K3UsZj1mPj4+MCxifHxDZSh0aGlzLHUsZiwyLDY1NTM1LDApLHRoaXNbZl09dSYyNTUsdGhpc1tmKzFdPXU+Pj44LGYrMn0scy5wcm90b3R5cGUud3JpdGVVaW50MTZCRT1zLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKHUsZixiKXtyZXR1cm4gdT0rdSxmPWY+Pj4wLGJ8fENlKHRoaXMsdSxmLDIsNjU1MzUsMCksdGhpc1tmXT11Pj4+OCx0aGlzW2YrMV09dSYyNTUsZisyfSxzLnByb3RvdHlwZS53cml0ZVVpbnQzMkxFPXMucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24odSxmLGIpe3JldHVybiB1PSt1LGY9Zj4+PjAsYnx8Q2UodGhpcyx1LGYsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbZiszXT11Pj4+MjQsdGhpc1tmKzJdPXU+Pj4xNix0aGlzW2YrMV09dT4+PjgsdGhpc1tmXT11JjI1NSxmKzR9LHMucHJvdG90eXBlLndyaXRlVWludDMyQkU9cy5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbih1LGYsYil7cmV0dXJuIHU9K3UsZj1mPj4+MCxifHxDZSh0aGlzLHUsZiw0LDQyOTQ5NjcyOTUsMCksdGhpc1tmXT11Pj4+MjQsdGhpc1tmKzFdPXU+Pj4xNix0aGlzW2YrMl09dT4+PjgsdGhpc1tmKzNdPXUmMjU1LGYrNH07ZnVuY3Rpb24gdmwocCx1LGYsYixBKXtSbCh1LGIsQSxwLGYsNyk7bGV0IFQ9TnVtYmVyKHUmQmlnSW50KDQyOTQ5NjcyOTUpKTtwW2YrK109VCxUPVQ+PjgscFtmKytdPVQsVD1UPj44LHBbZisrXT1ULFQ9VD4+OCxwW2YrK109VDtsZXQgUD1OdW1iZXIodT4+QmlnSW50KDMyKSZCaWdJbnQoNDI5NDk2NzI5NSkpO3JldHVybiBwW2YrK109UCxQPVA+PjgscFtmKytdPVAsUD1QPj44LHBbZisrXT1QLFA9UD4+OCxwW2YrK109UCxmfWZ1bmN0aW9uIEVsKHAsdSxmLGIsQSl7UmwodSxiLEEscCxmLDcpO2xldCBUPU51bWJlcih1JkJpZ0ludCg0Mjk0OTY3Mjk1KSk7cFtmKzddPVQsVD1UPj44LHBbZis2XT1ULFQ9VD4+OCxwW2YrNV09VCxUPVQ+PjgscFtmKzRdPVQ7bGV0IFA9TnVtYmVyKHU+PkJpZ0ludCgzMikmQmlnSW50KDQyOTQ5NjcyOTUpKTtyZXR1cm4gcFtmKzNdPVAsUD1QPj44LHBbZisyXT1QLFA9UD4+OCxwW2YrMV09UCxQPVA+PjgscFtmXT1QLGYrOH1zLnByb3RvdHlwZS53cml0ZUJpZ1VJbnQ2NExFPU10KGZ1bmN0aW9uKHUsZj0wKXtyZXR1cm4gdmwodGhpcyx1LGYsQmlnSW50KDApLEJpZ0ludChcIjB4ZmZmZmZmZmZmZmZmZmZmZlwiKSl9KSxzLnByb3RvdHlwZS53cml0ZUJpZ1VJbnQ2NEJFPU10KGZ1bmN0aW9uKHUsZj0wKXtyZXR1cm4gRWwodGhpcyx1LGYsQmlnSW50KDApLEJpZ0ludChcIjB4ZmZmZmZmZmZmZmZmZmZmZlwiKSl9KSxzLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKHUsZixiLEEpe2lmKHU9K3UsZj1mPj4+MCwhQSl7bGV0IHNlPU1hdGgucG93KDIsOCpiLTEpO0NlKHRoaXMsdSxmLGIsc2UtMSwtc2UpO31sZXQgVD0wLFA9MSwkPTA7Zm9yKHRoaXNbZl09dSYyNTU7KytUPGImJihQKj0yNTYpOyl1PDAmJiQ9PT0wJiZ0aGlzW2YrVC0xXSE9PTAmJigkPTEpLHRoaXNbZitUXT0odS9QPj4wKS0kJjI1NTtyZXR1cm4gZitifSxzLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKHUsZixiLEEpe2lmKHU9K3UsZj1mPj4+MCwhQSl7bGV0IHNlPU1hdGgucG93KDIsOCpiLTEpO0NlKHRoaXMsdSxmLGIsc2UtMSwtc2UpO31sZXQgVD1iLTEsUD0xLCQ9MDtmb3IodGhpc1tmK1RdPXUmMjU1Oy0tVD49MCYmKFAqPTI1Nik7KXU8MCYmJD09PTAmJnRoaXNbZitUKzFdIT09MCYmKCQ9MSksdGhpc1tmK1RdPSh1L1A+PjApLSQmMjU1O3JldHVybiBmK2J9LHMucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbih1LGYsYil7cmV0dXJuIHU9K3UsZj1mPj4+MCxifHxDZSh0aGlzLHUsZiwxLDEyNywtMTI4KSx1PDAmJih1PTI1NSt1KzEpLHRoaXNbZl09dSYyNTUsZisxfSxzLnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24odSxmLGIpe3JldHVybiB1PSt1LGY9Zj4+PjAsYnx8Q2UodGhpcyx1LGYsMiwzMjc2NywtMzI3NjgpLHRoaXNbZl09dSYyNTUsdGhpc1tmKzFdPXU+Pj44LGYrMn0scy5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKHUsZixiKXtyZXR1cm4gdT0rdSxmPWY+Pj4wLGJ8fENlKHRoaXMsdSxmLDIsMzI3NjcsLTMyNzY4KSx0aGlzW2ZdPXU+Pj44LHRoaXNbZisxXT11JjI1NSxmKzJ9LHMucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbih1LGYsYil7cmV0dXJuIHU9K3UsZj1mPj4+MCxifHxDZSh0aGlzLHUsZiw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHRoaXNbZl09dSYyNTUsdGhpc1tmKzFdPXU+Pj44LHRoaXNbZisyXT11Pj4+MTYsdGhpc1tmKzNdPXU+Pj4yNCxmKzR9LHMucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbih1LGYsYil7cmV0dXJuIHU9K3UsZj1mPj4+MCxifHxDZSh0aGlzLHUsZiw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHU8MCYmKHU9NDI5NDk2NzI5NSt1KzEpLHRoaXNbZl09dT4+PjI0LHRoaXNbZisxXT11Pj4+MTYsdGhpc1tmKzJdPXU+Pj44LHRoaXNbZiszXT11JjI1NSxmKzR9LHMucHJvdG90eXBlLndyaXRlQmlnSW50NjRMRT1NdChmdW5jdGlvbih1LGY9MCl7cmV0dXJuIHZsKHRoaXMsdSxmLC1CaWdJbnQoXCIweDgwMDAwMDAwMDAwMDAwMDBcIiksQmlnSW50KFwiMHg3ZmZmZmZmZmZmZmZmZmZmXCIpKX0pLHMucHJvdG90eXBlLndyaXRlQmlnSW50NjRCRT1NdChmdW5jdGlvbih1LGY9MCl7cmV0dXJuIEVsKHRoaXMsdSxmLC1CaWdJbnQoXCIweDgwMDAwMDAwMDAwMDAwMDBcIiksQmlnSW50KFwiMHg3ZmZmZmZmZmZmZmZmZmZmXCIpKX0pO2Z1bmN0aW9uIFNsKHAsdSxmLGIsQSxUKXtpZihmK2I+cC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbmRleCBvdXQgb2YgcmFuZ2VcIik7aWYoZjwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW5kZXggb3V0IG9mIHJhbmdlXCIpfWZ1bmN0aW9uIEFsKHAsdSxmLGIsQSl7cmV0dXJuIHU9K3UsZj1mPj4+MCxBfHxTbChwLHUsZiw0KSxlLndyaXRlKHAsdSxmLGIsMjMsNCksZis0fXMucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbih1LGYsYil7cmV0dXJuIEFsKHRoaXMsdSxmLCEwLGIpfSxzLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24odSxmLGIpe3JldHVybiBBbCh0aGlzLHUsZiwhMSxiKX07ZnVuY3Rpb24gSWwocCx1LGYsYixBKXtyZXR1cm4gdT0rdSxmPWY+Pj4wLEF8fFNsKHAsdSxmLDgpLGUud3JpdGUocCx1LGYsYiw1Miw4KSxmKzh9cy5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbih1LGYsYil7cmV0dXJuIElsKHRoaXMsdSxmLCEwLGIpfSxzLnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKHUsZixiKXtyZXR1cm4gSWwodGhpcyx1LGYsITEsYil9LHMucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odSxmLGIsQSl7aWYoIXMuaXNCdWZmZXIodSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlclwiKTtpZihifHwoYj0wKSwhQSYmQSE9PTAmJihBPXRoaXMubGVuZ3RoKSxmPj11Lmxlbmd0aCYmKGY9dS5sZW5ndGgpLGZ8fChmPTApLEE+MCYmQTxiJiYoQT1iKSxBPT09Ynx8dS5sZW5ndGg9PT0wfHx0aGlzLmxlbmd0aD09PTApcmV0dXJuIDA7aWYoZjwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kc1wiKTtpZihiPDB8fGI+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW5kZXggb3V0IG9mIHJhbmdlXCIpO2lmKEE8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInNvdXJjZUVuZCBvdXQgb2YgYm91bmRzXCIpO0E+dGhpcy5sZW5ndGgmJihBPXRoaXMubGVuZ3RoKSx1Lmxlbmd0aC1mPEEtYiYmKEE9dS5sZW5ndGgtZitiKTtsZXQgVD1BLWI7cmV0dXJuIHRoaXM9PT11JiZ0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbj09XCJmdW5jdGlvblwiP3RoaXMuY29weVdpdGhpbihmLGIsQSk6VWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwodSx0aGlzLnN1YmFycmF5KGIsQSksZiksVH0scy5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbih1LGYsYixBKXtpZih0eXBlb2YgdT09XCJzdHJpbmdcIil7aWYodHlwZW9mIGY9PVwic3RyaW5nXCI/KEE9ZixmPTAsYj10aGlzLmxlbmd0aCk6dHlwZW9mIGI9PVwic3RyaW5nXCImJihBPWIsYj10aGlzLmxlbmd0aCksQSE9PXZvaWQgMCYmdHlwZW9mIEEhPVwic3RyaW5nXCIpdGhyb3cgbmV3IFR5cGVFcnJvcihcImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmdcIik7aWYodHlwZW9mIEE9PVwic3RyaW5nXCImJiFzLmlzRW5jb2RpbmcoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK0EpO2lmKHUubGVuZ3RoPT09MSl7bGV0IFA9dS5jaGFyQ29kZUF0KDApOyhBPT09XCJ1dGY4XCImJlA8MTI4fHxBPT09XCJsYXRpbjFcIikmJih1PVApO319ZWxzZSB0eXBlb2YgdT09XCJudW1iZXJcIj91PXUmMjU1OnR5cGVvZiB1PT1cImJvb2xlYW5cIiYmKHU9TnVtYmVyKHUpKTtpZihmPDB8fHRoaXMubGVuZ3RoPGZ8fHRoaXMubGVuZ3RoPGIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJPdXQgb2YgcmFuZ2UgaW5kZXhcIik7aWYoYjw9ZilyZXR1cm4gdGhpcztmPWY+Pj4wLGI9Yj09PXZvaWQgMD90aGlzLmxlbmd0aDpiPj4+MCx1fHwodT0wKTtsZXQgVDtpZih0eXBlb2YgdT09XCJudW1iZXJcIilmb3IoVD1mO1Q8YjsrK1QpdGhpc1tUXT11O2Vsc2Uge2xldCBQPXMuaXNCdWZmZXIodSk/dTpzLmZyb20odSxBKSwkPVAubGVuZ3RoO2lmKCQ9PT0wKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSB2YWx1ZSBcIicrdSsnXCIgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgXCJ2YWx1ZVwiJyk7Zm9yKFQ9MDtUPGItZjsrK1QpdGhpc1tUK2ZdPVBbVCUkXTt9cmV0dXJuIHRoaXN9O2xldCB4cj17fTtmdW5jdGlvbiBkcyhwLHUsZil7eHJbcF09Y2xhc3MgZXh0ZW5kcyBme2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcIm1lc3NhZ2VcIix7dmFsdWU6dS5hcHBseSh0aGlzLGFyZ3VtZW50cyksd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdGhpcy5uYW1lPWAke3RoaXMubmFtZX0gWyR7cH1dYCx0aGlzLnN0YWNrLGRlbGV0ZSB0aGlzLm5hbWU7fWdldCBjb2RlKCl7cmV0dXJuIHB9c2V0IGNvZGUoQSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJjb2RlXCIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOkEsd3JpdGFibGU6ITB9KTt9dG9TdHJpbmcoKXtyZXR1cm4gYCR7dGhpcy5uYW1lfSBbJHtwfV06ICR7dGhpcy5tZXNzYWdlfWB9fTt9ZHMoXCJFUlJfQlVGRkVSX09VVF9PRl9CT1VORFNcIixmdW5jdGlvbihwKXtyZXR1cm4gcD9gJHtwfSBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHNgOlwiQXR0ZW1wdCB0byBhY2Nlc3MgbWVtb3J5IG91dHNpZGUgYnVmZmVyIGJvdW5kc1wifSxSYW5nZUVycm9yKSxkcyhcIkVSUl9JTlZBTElEX0FSR19UWVBFXCIsZnVuY3Rpb24ocCx1KXtyZXR1cm4gYFRoZSBcIiR7cH1cIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlICR7dHlwZW9mIHV9YH0sVHlwZUVycm9yKSxkcyhcIkVSUl9PVVRfT0ZfUkFOR0VcIixmdW5jdGlvbihwLHUsZil7bGV0IGI9YFRoZSB2YWx1ZSBvZiBcIiR7cH1cIiBpcyBvdXQgb2YgcmFuZ2UuYCxBPWY7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoZikmJk1hdGguYWJzKGYpPjIqKjMyP0E9VGwoU3RyaW5nKGYpKTp0eXBlb2YgZj09XCJiaWdpbnRcIiYmKEE9U3RyaW5nKGYpLChmPkJpZ0ludCgyKSoqQmlnSW50KDMyKXx8ZjwtKEJpZ0ludCgyKSoqQmlnSW50KDMyKSkpJiYoQT1UbChBKSksQSs9XCJuXCIpLGIrPWAgSXQgbXVzdCBiZSAke3V9LiBSZWNlaXZlZCAke0F9YCxifSxSYW5nZUVycm9yKTtmdW5jdGlvbiBUbChwKXtsZXQgdT1cIlwiLGY9cC5sZW5ndGgsYj1wWzBdPT09XCItXCI/MTowO2Zvcig7Zj49Yis0O2YtPTMpdT1gXyR7cC5zbGljZShmLTMsZil9JHt1fWA7cmV0dXJuIGAke3Auc2xpY2UoMCxmKX0ke3V9YH1mdW5jdGlvbiBqZyhwLHUsZil7TXIodSxcIm9mZnNldFwiKSwocFt1XT09PXZvaWQgMHx8cFt1K2ZdPT09dm9pZCAwKSYmZmkodSxwLmxlbmd0aC0oZisxKSk7fWZ1bmN0aW9uIFJsKHAsdSxmLGIsQSxUKXtpZihwPmZ8fHA8dSl7bGV0IFA9dHlwZW9mIHU9PVwiYmlnaW50XCI/XCJuXCI6XCJcIiwkO3Rocm93IHU9PT0wfHx1PT09QmlnSW50KDApPyQ9YD49IDAke1B9IGFuZCA8IDIke1B9ICoqICR7KFQrMSkqOH0ke1B9YDokPWA+PSAtKDIke1B9ICoqICR7KFQrMSkqOC0xfSR7UH0pIGFuZCA8IDIgKiogJHsoVCsxKSo4LTF9JHtQfWAsbmV3IHhyLkVSUl9PVVRfT0ZfUkFOR0UoXCJ2YWx1ZVwiLCQscCl9amcoYixBLFQpO31mdW5jdGlvbiBNcihwLHUpe2lmKHR5cGVvZiBwIT1cIm51bWJlclwiKXRocm93IG5ldyB4ci5FUlJfSU5WQUxJRF9BUkdfVFlQRSh1LFwibnVtYmVyXCIscCl9ZnVuY3Rpb24gZmkocCx1LGYpe3Rocm93IE1hdGguZmxvb3IocCkhPT1wPyhNcihwLGYpLG5ldyB4ci5FUlJfT1VUX09GX1JBTkdFKFwib2Zmc2V0XCIsXCJhbiBpbnRlZ2VyXCIscCkpOnU8MD9uZXcgeHIuRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTOm5ldyB4ci5FUlJfT1VUX09GX1JBTkdFKFwib2Zmc2V0XCIsYD49ICR7MH0gYW5kIDw9ICR7dX1gLHApfWxldCBGZz0vW14rLzAtOUEtWmEtei1fXS9nO2Z1bmN0aW9uIFdnKHApe2lmKHA9cC5zcGxpdChcIj1cIilbMF0scD1wLnRyaW0oKS5yZXBsYWNlKEZnLFwiXCIpLHAubGVuZ3RoPDIpcmV0dXJuIFwiXCI7Zm9yKDtwLmxlbmd0aCU0IT09MDspcD1wK1wiPVwiO3JldHVybiBwfWZ1bmN0aW9uIHBzKHAsdSl7dT11fHwxLzA7bGV0IGYsYj1wLmxlbmd0aCxBPW51bGwsVD1bXTtmb3IobGV0IFA9MDtQPGI7KytQKXtpZihmPXAuY2hhckNvZGVBdChQKSxmPjU1Mjk1JiZmPDU3MzQ0KXtpZighQSl7aWYoZj41NjMxOSl7KHUtPTMpPi0xJiZULnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWVsc2UgaWYoUCsxPT09Yil7KHUtPTMpPi0xJiZULnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfUE9Zjtjb250aW51ZX1pZihmPDU2MzIwKXsodS09Myk+LTEmJlQucHVzaCgyMzksMTkxLDE4OSksQT1mO2NvbnRpbnVlfWY9KEEtNTUyOTY8PDEwfGYtNTYzMjApKzY1NTM2O31lbHNlIEEmJih1LT0zKT4tMSYmVC5wdXNoKDIzOSwxOTEsMTg5KTtpZihBPW51bGwsZjwxMjgpe2lmKCh1LT0xKTwwKWJyZWFrO1QucHVzaChmKTt9ZWxzZSBpZihmPDIwNDgpe2lmKCh1LT0yKTwwKWJyZWFrO1QucHVzaChmPj42fDE5MixmJjYzfDEyOCk7fWVsc2UgaWYoZjw2NTUzNil7aWYoKHUtPTMpPDApYnJlYWs7VC5wdXNoKGY+PjEyfDIyNCxmPj42JjYzfDEyOCxmJjYzfDEyOCk7fWVsc2UgaWYoZjwxMTE0MTEyKXtpZigodS09NCk8MClicmVhaztULnB1c2goZj4+MTh8MjQwLGY+PjEyJjYzfDEyOCxmPj42JjYzfDEyOCxmJjYzfDEyOCk7fWVsc2UgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBjb2RlIHBvaW50XCIpfXJldHVybiBUfWZ1bmN0aW9uICRnKHApe2xldCB1PVtdO2ZvcihsZXQgZj0wO2Y8cC5sZW5ndGg7KytmKXUucHVzaChwLmNoYXJDb2RlQXQoZikmMjU1KTtyZXR1cm4gdX1mdW5jdGlvbiBIZyhwLHUpe2xldCBmLGIsQSxUPVtdO2ZvcihsZXQgUD0wO1A8cC5sZW5ndGgmJiEoKHUtPTIpPDApOysrUClmPXAuY2hhckNvZGVBdChQKSxiPWY+PjgsQT1mJTI1NixULnB1c2goQSksVC5wdXNoKGIpO3JldHVybiBUfWZ1bmN0aW9uIENsKHApe3JldHVybiB0LnRvQnl0ZUFycmF5KFdnKHApKX1mdW5jdGlvbiBqaShwLHUsZixiKXtsZXQgQTtmb3IoQT0wO0E8YiYmIShBK2Y+PXUubGVuZ3RofHxBPj1wLmxlbmd0aCk7KytBKXVbQStmXT1wW0FdO3JldHVybiBBfWZ1bmN0aW9uIFllKHAsdSl7cmV0dXJuIHAgaW5zdGFuY2VvZiB1fHxwIT1udWxsJiZwLmNvbnN0cnVjdG9yIT1udWxsJiZwLmNvbnN0cnVjdG9yLm5hbWUhPW51bGwmJnAuY29uc3RydWN0b3IubmFtZT09PXUubmFtZX1mdW5jdGlvbiBncyhwKXtyZXR1cm4gcCE9PXB9bGV0IFZnPWZ1bmN0aW9uKCl7bGV0IHA9XCIwMTIzNDU2Nzg5YWJjZGVmXCIsdT1uZXcgQXJyYXkoMjU2KTtmb3IobGV0IGY9MDtmPDE2OysrZil7bGV0IGI9ZioxNjtmb3IobGV0IEE9MDtBPDE2OysrQSl1W2IrQV09cFtmXStwW0FdO31yZXR1cm4gdX0oKTtmdW5jdGlvbiBNdChwKXtyZXR1cm4gdHlwZW9mIEJpZ0ludD5cInVcIj96ZzpwfWZ1bmN0aW9uIHpnKCl7dGhyb3cgbmV3IEVycm9yKFwiQmlnSW50IG5vdCBzdXBwb3J0ZWRcIil9cmV0dXJuIFp0fXZhciBjaSxWdSxIaSx6dSxadCxLdSxVdCx4LHR5LHJ5LGJlPV9lKCgpPT57XygpO3YoKTttKCk7Y2k9e30sVnU9ITE7SGk9e30senU9ITE7WnQ9e30sS3U9ITE7VXQ9ZXkoKTtVdC5CdWZmZXI7VXQuU2xvd0J1ZmZlcjtVdC5JTlNQRUNUX01BWF9CWVRFUztVdC5rTWF4TGVuZ3RoO3g9VXQuQnVmZmVyLHR5PVV0LklOU1BFQ1RfTUFYX0JZVEVTLHJ5PVV0LmtNYXhMZW5ndGg7fSk7dmFyIHY9X2UoKCk9PntiZSgpO30pO3ZhciBHdT1NKHZzPT57XygpO3YoKTttKCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHZzLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBtcz1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLmFsaWFzVG9Ub3BpYz17fSx0aGlzLm1heD1lO31wdXQoZSxyKXtyZXR1cm4gcj09PTB8fHI+dGhpcy5tYXg/ITE6KHRoaXMuYWxpYXNUb1RvcGljW3JdPWUsdGhpcy5sZW5ndGg9T2JqZWN0LmtleXModGhpcy5hbGlhc1RvVG9waWMpLmxlbmd0aCwhMCl9Z2V0VG9waWNCeUFsaWFzKGUpe3JldHVybiB0aGlzLmFsaWFzVG9Ub3BpY1tlXX1jbGVhcigpe3RoaXMuYWxpYXNUb1RvcGljPXt9O319O3ZzLmRlZmF1bHQ9bXM7fSk7dmFyIGNlPU0oKHhBLFF1KT0+e18oKTt2KCk7bSgpO1F1LmV4cG9ydHM9e0FycmF5SXNBcnJheSh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KX0sQXJyYXlQcm90b3R5cGVJbmNsdWRlcyh0LGUpe3JldHVybiB0LmluY2x1ZGVzKGUpfSxBcnJheVByb3RvdHlwZUluZGV4T2YodCxlKXtyZXR1cm4gdC5pbmRleE9mKGUpfSxBcnJheVByb3RvdHlwZUpvaW4odCxlKXtyZXR1cm4gdC5qb2luKGUpfSxBcnJheVByb3RvdHlwZU1hcCh0LGUpe3JldHVybiB0Lm1hcChlKX0sQXJyYXlQcm90b3R5cGVQb3AodCxlKXtyZXR1cm4gdC5wb3AoZSl9LEFycmF5UHJvdG90eXBlUHVzaCh0LGUpe3JldHVybiB0LnB1c2goZSl9LEFycmF5UHJvdG90eXBlU2xpY2UodCxlLHIpe3JldHVybiB0LnNsaWNlKGUscil9LEVycm9yLEZ1bmN0aW9uUHJvdG90eXBlQ2FsbCh0LGUsLi4ucil7cmV0dXJuIHQuY2FsbChlLC4uLnIpfSxGdW5jdGlvblByb3RvdHlwZVN5bWJvbEhhc0luc3RhbmNlKHQsZSl7cmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdLmNhbGwodCxlKX0sTWF0aEZsb29yOk1hdGguZmxvb3IsTnVtYmVyLE51bWJlcklzSW50ZWdlcjpOdW1iZXIuaXNJbnRlZ2VyLE51bWJlcklzTmFOOk51bWJlci5pc05hTixOdW1iZXJNQVhfU0FGRV9JTlRFR0VSOk51bWJlci5NQVhfU0FGRV9JTlRFR0VSLE51bWJlck1JTl9TQUZFX0lOVEVHRVI6TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIsTnVtYmVyUGFyc2VJbnQ6TnVtYmVyLnBhcnNlSW50LE9iamVjdERlZmluZVByb3BlcnRpZXModCxlKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxlKX0sT2JqZWN0RGVmaW5lUHJvcGVydHkodCxlLHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHIpfSxPYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpfSxPYmplY3RLZXlzKHQpe3JldHVybiBPYmplY3Qua2V5cyh0KX0sT2JqZWN0U2V0UHJvdG90eXBlT2YodCxlKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHQsZSl9LFByb21pc2UsUHJvbWlzZVByb3RvdHlwZUNhdGNoKHQsZSl7cmV0dXJuIHQuY2F0Y2goZSl9LFByb21pc2VQcm90b3R5cGVUaGVuKHQsZSxyKXtyZXR1cm4gdC50aGVuKGUscil9LFByb21pc2VSZWplY3QodCl7cmV0dXJuIFByb21pc2UucmVqZWN0KHQpfSxSZWZsZWN0QXBwbHk6UmVmbGVjdC5hcHBseSxSZWdFeHBQcm90b3R5cGVUZXN0KHQsZSl7cmV0dXJuIHQudGVzdChlKX0sU2FmZVNldDpTZXQsU3RyaW5nLFN0cmluZ1Byb3RvdHlwZVNsaWNlKHQsZSxyKXtyZXR1cm4gdC5zbGljZShlLHIpfSxTdHJpbmdQcm90b3R5cGVUb0xvd2VyQ2FzZSh0KXtyZXR1cm4gdC50b0xvd2VyQ2FzZSgpfSxTdHJpbmdQcm90b3R5cGVUb1VwcGVyQ2FzZSh0KXtyZXR1cm4gdC50b1VwcGVyQ2FzZSgpfSxTdHJpbmdQcm90b3R5cGVUcmltKHQpe3JldHVybiB0LnRyaW0oKX0sU3ltYm9sLFN5bWJvbEZvcjpTeW1ib2wuZm9yLFN5bWJvbEFzeW5jSXRlcmF0b3I6U3ltYm9sLmFzeW5jSXRlcmF0b3IsU3ltYm9sSGFzSW5zdGFuY2U6U3ltYm9sLmhhc0luc3RhbmNlLFN5bWJvbEl0ZXJhdG9yOlN5bWJvbC5pdGVyYXRvcixUeXBlZEFycmF5UHJvdG90eXBlU2V0KHQsZSxyKXtyZXR1cm4gdC5zZXQoZSxyKX0sVWludDhBcnJheX07fSk7dmFyIEplPU0oKCRBLFNzKT0+e18oKTt2KCk7bSgpO3ZhciBpeT0oYmUoKSxYKG1lKSksbnk9T2JqZWN0LmdldFByb3RvdHlwZU9mKGFzeW5jIGZ1bmN0aW9uKCl7fSkuY29uc3RydWN0b3IsWXU9Z2xvYmFsVGhpcy5CbG9ifHxpeS5CbG9iLHN5PXR5cGVvZiBZdTxcInVcIj9mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFl1fTpmdW5jdGlvbihlKXtyZXR1cm4gITF9LEVzPWNsYXNzIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSl7aWYoIUFycmF5LmlzQXJyYXkoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgaW5wdXQgdG8gYmUgYW4gQXJyYXksIGdvdCAke3R5cGVvZiBlfWApO2xldCByPVwiXCI7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspcis9YCAgICAke2VbaV0uc3RhY2t9XG5gO3N1cGVyKHIpLHRoaXMubmFtZT1cIkFnZ3JlZ2F0ZUVycm9yXCIsdGhpcy5lcnJvcnM9ZTt9fTtTcy5leHBvcnRzPXtBZ2dyZWdhdGVFcnJvcjpFcyxrRW1wdHlPYmplY3Q6T2JqZWN0LmZyZWV6ZSh7fSksb25jZSh0KXtsZXQgZT0hMTtyZXR1cm4gZnVuY3Rpb24oLi4ucil7ZXx8KGU9ITAsdC5hcHBseSh0aGlzLHIpKTt9fSxjcmVhdGVEZWZlcnJlZFByb21pc2U6ZnVuY3Rpb24oKXtsZXQgdCxlO3JldHVybiB7cHJvbWlzZTpuZXcgUHJvbWlzZSgoaSxuKT0+e3Q9aSxlPW47fSkscmVzb2x2ZTp0LHJlamVjdDplfX0scHJvbWlzaWZ5KHQpe3JldHVybiBuZXcgUHJvbWlzZSgoZSxyKT0+e3QoKGksLi4ubik9Pmk/cihpKTplKC4uLm4pKTt9KX0sZGVidWdsb2coKXtyZXR1cm4gZnVuY3Rpb24oKXt9fSxmb3JtYXQodCwuLi5lKXtyZXR1cm4gdC5yZXBsYWNlKC8lKFtzZGlmal0pL2csZnVuY3Rpb24oLi4uW3IsaV0pe2xldCBuPWUuc2hpZnQoKTtyZXR1cm4gaT09PVwiZlwiP24udG9GaXhlZCg2KTppPT09XCJqXCI/SlNPTi5zdHJpbmdpZnkobik6aT09PVwic1wiJiZ0eXBlb2Ygbj09XCJvYmplY3RcIj9gJHtuLmNvbnN0cnVjdG9yIT09T2JqZWN0P24uY29uc3RydWN0b3IubmFtZTpcIlwifSB7fWAudHJpbSgpOm4udG9TdHJpbmcoKX0pfSxpbnNwZWN0KHQpe3N3aXRjaCh0eXBlb2YgdCl7Y2FzZVwic3RyaW5nXCI6aWYodC5pbmNsdWRlcyhcIidcIikpaWYodC5pbmNsdWRlcygnXCInKSl7aWYoIXQuaW5jbHVkZXMoXCJgXCIpJiYhdC5pbmNsdWRlcyhcIiR7XCIpKXJldHVybiBgXFxgJHt0fVxcYGB9ZWxzZSByZXR1cm4gYFwiJHt0fVwiYDtyZXR1cm4gYCcke3R9J2A7Y2FzZVwibnVtYmVyXCI6cmV0dXJuIGlzTmFOKHQpP1wiTmFOXCI6T2JqZWN0LmlzKHQsLTApP1N0cmluZyh0KTp0O2Nhc2VcImJpZ2ludFwiOnJldHVybiBgJHtTdHJpbmcodCl9bmA7Y2FzZVwiYm9vbGVhblwiOmNhc2VcInVuZGVmaW5lZFwiOnJldHVybiBTdHJpbmcodCk7Y2FzZVwib2JqZWN0XCI6cmV0dXJuIFwie31cIn19LHR5cGVzOntpc0FzeW5jRnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBueX0saXNBcnJheUJ1ZmZlclZpZXcodCl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyh0KX19LGlzQmxvYjpzeX07U3MuZXhwb3J0cy5wcm9taXNpZnkuY3VzdG9tPVN5bWJvbC5mb3IoXCJub2RlanMudXRpbC5wcm9taXNpZnkuY3VzdG9tXCIpO30pO3ZhciB6aT1NKChaQSxWaSk9PntfKCk7digpO20oKTt2YXJ7QWJvcnRDb250cm9sbGVyOkp1LEFib3J0U2lnbmFsOm95fT10eXBlb2Ygc2VsZjxcInVcIj9zZWxmOnR5cGVvZiB3aW5kb3c8XCJ1XCI/d2luZG93OnZvaWQgMDtWaS5leHBvcnRzPUp1O1ZpLmV4cG9ydHMuQWJvcnRTaWduYWw9b3k7VmkuZXhwb3J0cy5kZWZhdWx0PUp1O30pO3ZhciBBZT1NKCh1SSxlZik9PntfKCk7digpO20oKTt2YXJ7Zm9ybWF0OmF5LGluc3BlY3Q6S2ksQWdncmVnYXRlRXJyb3I6bHl9PUplKCksdXk9Z2xvYmFsVGhpcy5BZ2dyZWdhdGVFcnJvcnx8bHksZnk9U3ltYm9sKFwia0lzTm9kZUVycm9yXCIpLGN5PVtcInN0cmluZ1wiLFwiZnVuY3Rpb25cIixcIm51bWJlclwiLFwib2JqZWN0XCIsXCJGdW5jdGlvblwiLFwiT2JqZWN0XCIsXCJib29sZWFuXCIsXCJiaWdpbnRcIixcInN5bWJvbFwiXSxoeT0vXihbQS1aXVthLXowLTldKikrJC8sZHk9XCJfX25vZGVfaW50ZXJuYWxfXCIsR2k9e307ZnVuY3Rpb24gZXIodCxlKXtpZighdCl0aHJvdyBuZXcgR2kuRVJSX0lOVEVSTkFMX0FTU0VSVElPTihlKX1mdW5jdGlvbiBYdSh0KXtsZXQgZT1cIlwiLHI9dC5sZW5ndGgsaT10WzBdPT09XCItXCI/MTowO2Zvcig7cj49aSs0O3ItPTMpZT1gXyR7dC5zbGljZShyLTMscil9JHtlfWA7cmV0dXJuIGAke3Quc2xpY2UoMCxyKX0ke2V9YH1mdW5jdGlvbiBweSh0LGUscil7aWYodHlwZW9mIGU9PVwiZnVuY3Rpb25cIilyZXR1cm4gZXIoZS5sZW5ndGg8PXIubGVuZ3RoLGBDb2RlOiAke3R9OyBUaGUgcHJvdmlkZWQgYXJndW1lbnRzIGxlbmd0aCAoJHtyLmxlbmd0aH0pIGRvZXMgbm90IG1hdGNoIHRoZSByZXF1aXJlZCBvbmVzICgke2UubGVuZ3RofSkuYCksZSguLi5yKTtsZXQgaT0oZS5tYXRjaCgvJVtkZmlqb09zXS9nKXx8W10pLmxlbmd0aDtyZXR1cm4gZXIoaT09PXIubGVuZ3RoLGBDb2RlOiAke3R9OyBUaGUgcHJvdmlkZWQgYXJndW1lbnRzIGxlbmd0aCAoJHtyLmxlbmd0aH0pIGRvZXMgbm90IG1hdGNoIHRoZSByZXF1aXJlZCBvbmVzICgke2l9KS5gKSxyLmxlbmd0aD09PTA/ZTpheShlLC4uLnIpfWZ1bmN0aW9uIHZlKHQsZSxyKXtyfHwocj1FcnJvcik7Y2xhc3MgaSBleHRlbmRzIHJ7Y29uc3RydWN0b3IoLi4ubyl7c3VwZXIocHkodCxlLG8pKTt9dG9TdHJpbmcoKXtyZXR1cm4gYCR7dGhpcy5uYW1lfSBbJHt0fV06ICR7dGhpcy5tZXNzYWdlfWB9fU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGkucHJvdG90eXBlLHtuYW1lOnt2YWx1ZTpyLm5hbWUsd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9LHRvU3RyaW5nOnt2YWx1ZSgpe3JldHVybiBgJHt0aGlzLm5hbWV9IFske3R9XTogJHt0aGlzLm1lc3NhZ2V9YH0sd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9fSksaS5wcm90b3R5cGUuY29kZT10LGkucHJvdG90eXBlW2Z5XT0hMCxHaVt0XT1pO31mdW5jdGlvbiBadSh0KXtsZXQgZT1keSt0Lm5hbWU7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwibmFtZVwiLHt2YWx1ZTplfSksdH1mdW5jdGlvbiBneSh0LGUpe2lmKHQmJmUmJnQhPT1lKXtpZihBcnJheS5pc0FycmF5KGUuZXJyb3JzKSlyZXR1cm4gZS5lcnJvcnMucHVzaCh0KSxlO2xldCByPW5ldyB1eShbZSx0XSxlLm1lc3NhZ2UpO3JldHVybiByLmNvZGU9ZS5jb2RlLHJ9cmV0dXJuIHR8fGV9dmFyIEFzPWNsYXNzIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZT1cIlRoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWRcIixyPXZvaWQgMCl7aWYociE9PXZvaWQgMCYmdHlwZW9mIHIhPVwib2JqZWN0XCIpdGhyb3cgbmV3IEdpLkVSUl9JTlZBTElEX0FSR19UWVBFKFwib3B0aW9uc1wiLFwiT2JqZWN0XCIscik7c3VwZXIoZSxyKSx0aGlzLmNvZGU9XCJBQk9SVF9FUlJcIix0aGlzLm5hbWU9XCJBYm9ydEVycm9yXCI7fX07dmUoXCJFUlJfQVNTRVJUSU9OXCIsXCIlc1wiLEVycm9yKTt2ZShcIkVSUl9JTlZBTElEX0FSR19UWVBFXCIsKHQsZSxyKT0+e2VyKHR5cGVvZiB0PT1cInN0cmluZ1wiLFwiJ25hbWUnIG11c3QgYmUgYSBzdHJpbmdcIiksQXJyYXkuaXNBcnJheShlKXx8KGU9W2VdKTtsZXQgaT1cIlRoZSBcIjt0LmVuZHNXaXRoKFwiIGFyZ3VtZW50XCIpP2krPWAke3R9IGA6aSs9YFwiJHt0fVwiICR7dC5pbmNsdWRlcyhcIi5cIik/XCJwcm9wZXJ0eVwiOlwiYXJndW1lbnRcIn0gYCxpKz1cIm11c3QgYmUgXCI7bGV0IG49W10sbz1bXSxzPVtdO2ZvcihsZXQgbCBvZiBlKWVyKHR5cGVvZiBsPT1cInN0cmluZ1wiLFwiQWxsIGV4cGVjdGVkIGVudHJpZXMgaGF2ZSB0byBiZSBvZiB0eXBlIHN0cmluZ1wiKSxjeS5pbmNsdWRlcyhsKT9uLnB1c2gobC50b0xvd2VyQ2FzZSgpKTpoeS50ZXN0KGwpP28ucHVzaChsKTooZXIobCE9PVwib2JqZWN0XCIsJ1RoZSB2YWx1ZSBcIm9iamVjdFwiIHNob3VsZCBiZSB3cml0dGVuIGFzIFwiT2JqZWN0XCInKSxzLnB1c2gobCkpO2lmKG8ubGVuZ3RoPjApe2xldCBsPW4uaW5kZXhPZihcIm9iamVjdFwiKTtsIT09LTEmJihuLnNwbGljZShuLGwsMSksby5wdXNoKFwiT2JqZWN0XCIpKTt9aWYobi5sZW5ndGg+MCl7c3dpdGNoKG4ubGVuZ3RoKXtjYXNlIDE6aSs9YG9mIHR5cGUgJHtuWzBdfWA7YnJlYWs7Y2FzZSAyOmkrPWBvbmUgb2YgdHlwZSAke25bMF19IG9yICR7blsxXX1gO2JyZWFrO2RlZmF1bHQ6e2xldCBsPW4ucG9wKCk7aSs9YG9uZSBvZiB0eXBlICR7bi5qb2luKFwiLCBcIil9LCBvciAke2x9YDt9fShvLmxlbmd0aD4wfHxzLmxlbmd0aD4wKSYmKGkrPVwiIG9yIFwiKTt9aWYoby5sZW5ndGg+MCl7c3dpdGNoKG8ubGVuZ3RoKXtjYXNlIDE6aSs9YGFuIGluc3RhbmNlIG9mICR7b1swXX1gO2JyZWFrO2Nhc2UgMjppKz1gYW4gaW5zdGFuY2Ugb2YgJHtvWzBdfSBvciAke29bMV19YDticmVhaztkZWZhdWx0OntsZXQgbD1vLnBvcCgpO2krPWBhbiBpbnN0YW5jZSBvZiAke28uam9pbihcIiwgXCIpfSwgb3IgJHtsfWA7fX1zLmxlbmd0aD4wJiYoaSs9XCIgb3IgXCIpO31zd2l0Y2gocy5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6c1swXS50b0xvd2VyQ2FzZSgpIT09c1swXSYmKGkrPVwiYW4gXCIpLGkrPWAke3NbMF19YDticmVhaztjYXNlIDI6aSs9YG9uZSBvZiAke3NbMF19IG9yICR7c1sxXX1gO2JyZWFrO2RlZmF1bHQ6e2xldCBsPXMucG9wKCk7aSs9YG9uZSBvZiAke3Muam9pbihcIiwgXCIpfSwgb3IgJHtsfWA7fX1pZihyPT1udWxsKWkrPWAuIFJlY2VpdmVkICR7cn1gO2Vsc2UgaWYodHlwZW9mIHI9PVwiZnVuY3Rpb25cIiYmci5uYW1lKWkrPWAuIFJlY2VpdmVkIGZ1bmN0aW9uICR7ci5uYW1lfWA7ZWxzZSBpZih0eXBlb2Ygcj09XCJvYmplY3RcIil7dmFyIGE7aWYoKGE9ci5jb25zdHJ1Y3RvcikhPT1udWxsJiZhIT09dm9pZCAwJiZhLm5hbWUpaSs9YC4gUmVjZWl2ZWQgYW4gaW5zdGFuY2Ugb2YgJHtyLmNvbnN0cnVjdG9yLm5hbWV9YDtlbHNlIHtsZXQgbD1LaShyLHtkZXB0aDotMX0pO2krPWAuIFJlY2VpdmVkICR7bH1gO319ZWxzZSB7bGV0IGw9S2kocix7Y29sb3JzOiExfSk7bC5sZW5ndGg+MjUmJihsPWAke2wuc2xpY2UoMCwyNSl9Li4uYCksaSs9YC4gUmVjZWl2ZWQgdHlwZSAke3R5cGVvZiByfSAoJHtsfSlgO31yZXR1cm4gaX0sVHlwZUVycm9yKTt2ZShcIkVSUl9JTlZBTElEX0FSR19WQUxVRVwiLCh0LGUscj1cImlzIGludmFsaWRcIik9PntsZXQgaT1LaShlKTtyZXR1cm4gaS5sZW5ndGg+MTI4JiYoaT1pLnNsaWNlKDAsMTI4KStcIi4uLlwiKSxgVGhlICR7dC5pbmNsdWRlcyhcIi5cIik/XCJwcm9wZXJ0eVwiOlwiYXJndW1lbnRcIn0gJyR7dH0nICR7cn0uIFJlY2VpdmVkICR7aX1gfSxUeXBlRXJyb3IpO3ZlKFwiRVJSX0lOVkFMSURfUkVUVVJOX1ZBTFVFXCIsKHQsZSxyKT0+e3ZhciBpO2xldCBuPXIhPW51bGwmJihpPXIuY29uc3RydWN0b3IpIT09bnVsbCYmaSE9PXZvaWQgMCYmaS5uYW1lP2BpbnN0YW5jZSBvZiAke3IuY29uc3RydWN0b3IubmFtZX1gOmB0eXBlICR7dHlwZW9mIHJ9YDtyZXR1cm4gYEV4cGVjdGVkICR7dH0gdG8gYmUgcmV0dXJuZWQgZnJvbSB0aGUgXCIke2V9XCIgZnVuY3Rpb24gYnV0IGdvdCAke259LmB9LFR5cGVFcnJvcik7dmUoXCJFUlJfTUlTU0lOR19BUkdTXCIsKC4uLnQpPT57ZXIodC5sZW5ndGg+MCxcIkF0IGxlYXN0IG9uZSBhcmcgbmVlZHMgdG8gYmUgc3BlY2lmaWVkXCIpO2xldCBlLHI9dC5sZW5ndGg7c3dpdGNoKHQ9KEFycmF5LmlzQXJyYXkodCk/dDpbdF0pLm1hcChpPT5gXCIke2l9XCJgKS5qb2luKFwiIG9yIFwiKSxyKXtjYXNlIDE6ZSs9YFRoZSAke3RbMF19IGFyZ3VtZW50YDticmVhaztjYXNlIDI6ZSs9YFRoZSAke3RbMF19IGFuZCAke3RbMV19IGFyZ3VtZW50c2A7YnJlYWs7ZGVmYXVsdDp7bGV0IGk9dC5wb3AoKTtlKz1gVGhlICR7dC5qb2luKFwiLCBcIil9LCBhbmQgJHtpfSBhcmd1bWVudHNgO31icmVha31yZXR1cm4gYCR7ZX0gbXVzdCBiZSBzcGVjaWZpZWRgfSxUeXBlRXJyb3IpO3ZlKFwiRVJSX09VVF9PRl9SQU5HRVwiLCh0LGUscik9PntlcihlLCdNaXNzaW5nIFwicmFuZ2VcIiBhcmd1bWVudCcpO2xldCBpO3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKHIpJiZNYXRoLmFicyhyKT4yKiozMj9pPVh1KFN0cmluZyhyKSk6dHlwZW9mIHI9PVwiYmlnaW50XCI/KGk9U3RyaW5nKHIpLChyPjJuKiozMm58fHI8LSgybioqMzJuKSkmJihpPVh1KGkpKSxpKz1cIm5cIik6aT1LaShyKSxgVGhlIHZhbHVlIG9mIFwiJHt0fVwiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSAke2V9LiBSZWNlaXZlZCAke2l9YH0sUmFuZ2VFcnJvcik7dmUoXCJFUlJfTVVMVElQTEVfQ0FMTEJBQ0tcIixcIkNhbGxiYWNrIGNhbGxlZCBtdWx0aXBsZSB0aW1lc1wiLEVycm9yKTt2ZShcIkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEXCIsXCJUaGUgJXMgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZFwiLEVycm9yKTt2ZShcIkVSUl9TVFJFQU1fQUxSRUFEWV9GSU5JU0hFRFwiLFwiQ2Fubm90IGNhbGwgJXMgYWZ0ZXIgYSBzdHJlYW0gd2FzIGZpbmlzaGVkXCIsRXJyb3IpO3ZlKFwiRVJSX1NUUkVBTV9DQU5OT1RfUElQRVwiLFwiQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZVwiLEVycm9yKTt2ZShcIkVSUl9TVFJFQU1fREVTVFJPWUVEXCIsXCJDYW5ub3QgY2FsbCAlcyBhZnRlciBhIHN0cmVhbSB3YXMgZGVzdHJveWVkXCIsRXJyb3IpO3ZlKFwiRVJSX1NUUkVBTV9OVUxMX1ZBTFVFU1wiLFwiTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW1cIixUeXBlRXJyb3IpO3ZlKFwiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0VcIixcIlByZW1hdHVyZSBjbG9zZVwiLEVycm9yKTt2ZShcIkVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0ZcIixcInN0cmVhbS5wdXNoKCkgYWZ0ZXIgRU9GXCIsRXJyb3IpO3ZlKFwiRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVFwiLFwic3RyZWFtLnVuc2hpZnQoKSBhZnRlciBlbmQgZXZlbnRcIixFcnJvcik7dmUoXCJFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORFwiLFwid3JpdGUgYWZ0ZXIgZW5kXCIsRXJyb3IpO3ZlKFwiRVJSX1VOS05PV05fRU5DT0RJTkdcIixcIlVua25vd24gZW5jb2Rpbmc6ICVzXCIsVHlwZUVycm9yKTtlZi5leHBvcnRzPXtBYm9ydEVycm9yOkFzLGFnZ3JlZ2F0ZVR3b0Vycm9yczpadShneSksaGlkZVN0YWNrRnJhbWVzOlp1LGNvZGVzOkdpfTt9KTt2YXIgaGk9TSgoX0ksZmYpPT57XygpO3YoKTttKCk7dmFye0FycmF5SXNBcnJheTpUcyxBcnJheVByb3RvdHlwZUluY2x1ZGVzOnNmLEFycmF5UHJvdG90eXBlSm9pbjpvZixBcnJheVByb3RvdHlwZU1hcDp5eSxOdW1iZXJJc0ludGVnZXI6UnMsTnVtYmVySXNOYU46YnksTnVtYmVyTUFYX1NBRkVfSU5URUdFUjp3eSxOdW1iZXJNSU5fU0FGRV9JTlRFR0VSOl95LE51bWJlclBhcnNlSW50Om15LE9iamVjdFByb3RvdHlwZUhhc093blByb3BlcnR5OnZ5LFJlZ0V4cFByb3RvdHlwZUV4ZWM6YWYsU3RyaW5nOkV5LFN0cmluZ1Byb3RvdHlwZVRvVXBwZXJDYXNlOlN5LFN0cmluZ1Byb3RvdHlwZVRyaW06QXl9PWNlKCkse2hpZGVTdGFja0ZyYW1lczpVZSxjb2Rlczp7RVJSX1NPQ0tFVF9CQURfUE9SVDpJeSxFUlJfSU5WQUxJRF9BUkdfVFlQRTpJZSxFUlJfSU5WQUxJRF9BUkdfVkFMVUU6VXIsRVJSX09VVF9PRl9SQU5HRTp0cixFUlJfVU5LTk9XTl9TSUdOQUw6dGZ9fT1BZSgpLHtub3JtYWxpemVFbmNvZGluZzpUeX09SmUoKSx7aXNBc3luY0Z1bmN0aW9uOlJ5LGlzQXJyYXlCdWZmZXJWaWV3OkN5fT1KZSgpLnR5cGVzLHJmPXt9O2Z1bmN0aW9uIEJ5KHQpe3JldHVybiB0PT09KHR8MCl9ZnVuY3Rpb24gUHkodCl7cmV0dXJuIHQ9PT10Pj4+MH12YXIga3k9L15bMC03XSskLyxPeT1cIm11c3QgYmUgYSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciBvciBhbiBvY3RhbCBzdHJpbmdcIjtmdW5jdGlvbiB4eSh0LGUscil7aWYodHlwZW9mIHQ+XCJ1XCImJih0PXIpLHR5cGVvZiB0PT1cInN0cmluZ1wiKXtpZihhZihreSx0KT09PW51bGwpdGhyb3cgbmV3IFVyKGUsdCxPeSk7dD1teSh0LDgpO31yZXR1cm4gbGYodCxlKSx0fXZhciBNeT1VZSgodCxlLHI9X3ksaT13eSk9PntpZih0eXBlb2YgdCE9XCJudW1iZXJcIil0aHJvdyBuZXcgSWUoZSxcIm51bWJlclwiLHQpO2lmKCFScyh0KSl0aHJvdyBuZXcgdHIoZSxcImFuIGludGVnZXJcIix0KTtpZih0PHJ8fHQ+aSl0aHJvdyBuZXcgdHIoZSxgPj0gJHtyfSAmJiA8PSAke2l9YCx0KX0pLEx5PVVlKCh0LGUscj0tMjE0NzQ4MzY0OCxpPTIxNDc0ODM2NDcpPT57aWYodHlwZW9mIHQhPVwibnVtYmVyXCIpdGhyb3cgbmV3IEllKGUsXCJudW1iZXJcIix0KTtpZighUnModCkpdGhyb3cgbmV3IHRyKGUsXCJhbiBpbnRlZ2VyXCIsdCk7aWYodDxyfHx0PmkpdGhyb3cgbmV3IHRyKGUsYD49ICR7cn0gJiYgPD0gJHtpfWAsdCl9KSxsZj1VZSgodCxlLHI9ITEpPT57aWYodHlwZW9mIHQhPVwibnVtYmVyXCIpdGhyb3cgbmV3IEllKGUsXCJudW1iZXJcIix0KTtpZighUnModCkpdGhyb3cgbmV3IHRyKGUsXCJhbiBpbnRlZ2VyXCIsdCk7bGV0IGk9cj8xOjAsbj00Mjk0OTY3Mjk1O2lmKHQ8aXx8dD5uKXRocm93IG5ldyB0cihlLGA+PSAke2l9ICYmIDw9ICR7bn1gLHQpfSk7ZnVuY3Rpb24gQ3ModCxlKXtpZih0eXBlb2YgdCE9XCJzdHJpbmdcIil0aHJvdyBuZXcgSWUoZSxcInN0cmluZ1wiLHQpfWZ1bmN0aW9uIFV5KHQsZSxyPXZvaWQgMCxpKXtpZih0eXBlb2YgdCE9XCJudW1iZXJcIil0aHJvdyBuZXcgSWUoZSxcIm51bWJlclwiLHQpO2lmKHIhPW51bGwmJnQ8cnx8aSE9bnVsbCYmdD5pfHwociE9bnVsbHx8aSE9bnVsbCkmJmJ5KHQpKXRocm93IG5ldyB0cihlLGAke3IhPW51bGw/YD49ICR7cn1gOlwiXCJ9JHtyIT1udWxsJiZpIT1udWxsP1wiICYmIFwiOlwiXCJ9JHtpIT1udWxsP2A8PSAke2l9YDpcIlwifWAsdCl9dmFyIE55PVVlKCh0LGUscik9PntpZighc2Yocix0KSl7bGV0IG49XCJtdXN0IGJlIG9uZSBvZjogXCIrb2YoeXkocixvPT50eXBlb2Ygbz09XCJzdHJpbmdcIj9gJyR7b30nYDpFeShvKSksXCIsIFwiKTt0aHJvdyBuZXcgVXIoZSx0LG4pfX0pO2Z1bmN0aW9uIHVmKHQsZSl7aWYodHlwZW9mIHQhPVwiYm9vbGVhblwiKXRocm93IG5ldyBJZShlLFwiYm9vbGVhblwiLHQpfWZ1bmN0aW9uIElzKHQsZSxyKXtyZXR1cm4gdD09bnVsbHx8IXZ5KHQsZSk/cjp0W2VdfXZhciBxeT1VZSgodCxlLHI9bnVsbCk9PntsZXQgaT1JcyhyLFwiYWxsb3dBcnJheVwiLCExKSxuPUlzKHIsXCJhbGxvd0Z1bmN0aW9uXCIsITEpO2lmKCFJcyhyLFwibnVsbGFibGVcIiwhMSkmJnQ9PT1udWxsfHwhaSYmVHModCl8fHR5cGVvZiB0IT1cIm9iamVjdFwiJiYoIW58fHR5cGVvZiB0IT1cImZ1bmN0aW9uXCIpKXRocm93IG5ldyBJZShlLFwiT2JqZWN0XCIsdCl9KSxEeT1VZSgodCxlKT0+e2lmKHQhPW51bGwmJnR5cGVvZiB0IT1cIm9iamVjdFwiJiZ0eXBlb2YgdCE9XCJmdW5jdGlvblwiKXRocm93IG5ldyBJZShlLFwiYSBkaWN0aW9uYXJ5XCIsdCl9KSxCcz1VZSgodCxlLHI9MCk9PntpZighVHModCkpdGhyb3cgbmV3IEllKGUsXCJBcnJheVwiLHQpO2lmKHQubGVuZ3RoPHIpe2xldCBpPWBtdXN0IGJlIGxvbmdlciB0aGFuICR7cn1gO3Rocm93IG5ldyBVcihlLHQsaSl9fSk7ZnVuY3Rpb24gankodCxlKXtCcyh0LGUpO2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKUNzKHRbcl0sYCR7ZX1bJHtyfV1gKTt9ZnVuY3Rpb24gRnkodCxlKXtCcyh0LGUpO2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXVmKHRbcl0sYCR7ZX1bJHtyfV1gKTt9ZnVuY3Rpb24gV3kodCxlPVwic2lnbmFsXCIpe2lmKENzKHQsZSkscmZbdF09PT12b2lkIDApdGhyb3cgcmZbU3kodCldIT09dm9pZCAwP25ldyB0Zih0K1wiIChzaWduYWxzIG11c3QgdXNlIGFsbCBjYXBpdGFsIGxldHRlcnMpXCIpOm5ldyB0Zih0KX12YXIgJHk9VWUoKHQsZT1cImJ1ZmZlclwiKT0+e2lmKCFDeSh0KSl0aHJvdyBuZXcgSWUoZSxbXCJCdWZmZXJcIixcIlR5cGVkQXJyYXlcIixcIkRhdGFWaWV3XCJdLHQpfSk7ZnVuY3Rpb24gSHkodCxlKXtsZXQgcj1UeShlKSxpPXQubGVuZ3RoO2lmKHI9PT1cImhleFwiJiZpJTIhPT0wKXRocm93IG5ldyBVcihcImVuY29kaW5nXCIsZSxgaXMgaW52YWxpZCBmb3IgZGF0YSBvZiBsZW5ndGggJHtpfWApfWZ1bmN0aW9uIFZ5KHQsZT1cIlBvcnRcIixyPSEwKXtpZih0eXBlb2YgdCE9XCJudW1iZXJcIiYmdHlwZW9mIHQhPVwic3RyaW5nXCJ8fHR5cGVvZiB0PT1cInN0cmluZ1wiJiZBeSh0KS5sZW5ndGg9PT0wfHwrdCE9PSt0Pj4+MHx8dD42NTUzNXx8dD09PTAmJiFyKXRocm93IG5ldyBJeShlLHQscik7cmV0dXJuIHR8MH12YXIgenk9VWUoKHQsZSk9PntpZih0IT09dm9pZCAwJiYodD09PW51bGx8fHR5cGVvZiB0IT1cIm9iamVjdFwifHwhKFwiYWJvcnRlZFwiaW4gdCkpKXRocm93IG5ldyBJZShlLFwiQWJvcnRTaWduYWxcIix0KX0pLEt5PVVlKCh0LGUpPT57aWYodHlwZW9mIHQhPVwiZnVuY3Rpb25cIil0aHJvdyBuZXcgSWUoZSxcIkZ1bmN0aW9uXCIsdCl9KSxHeT1VZSgodCxlKT0+e2lmKHR5cGVvZiB0IT1cImZ1bmN0aW9uXCJ8fFJ5KHQpKXRocm93IG5ldyBJZShlLFwiRnVuY3Rpb25cIix0KX0pLFF5PVVlKCh0LGUpPT57aWYodCE9PXZvaWQgMCl0aHJvdyBuZXcgSWUoZSxcInVuZGVmaW5lZFwiLHQpfSk7ZnVuY3Rpb24gWXkodCxlLHIpe2lmKCFzZihyLHQpKXRocm93IG5ldyBJZShlLGAoJyR7b2YocixcInxcIil9JylgLHQpfXZhciBKeT0vXig/OjxbXj5dKj4pKD86XFxzKjtcXHMqW147XCJcXHNdKyg/Oj0oXCIpP1teO1wiXFxzXSpcXDEpPykqJC87ZnVuY3Rpb24gbmYodCxlKXtpZih0eXBlb2YgdD5cInVcInx8IWFmKEp5LHQpKXRocm93IG5ldyBVcihlLHQsJ211c3QgYmUgYW4gYXJyYXkgb3Igc3RyaW5nIG9mIGZvcm1hdCBcIjwvc3R5bGVzLmNzcz47IHJlbD1wcmVsb2FkOyBhcz1zdHlsZVwiJyl9ZnVuY3Rpb24gWHkodCl7aWYodHlwZW9mIHQ9PVwic3RyaW5nXCIpcmV0dXJuIG5mKHQsXCJoaW50c1wiKSx0O2lmKFRzKHQpKXtsZXQgZT10Lmxlbmd0aCxyPVwiXCI7aWYoZT09PTApcmV0dXJuIHI7Zm9yKGxldCBpPTA7aTxlO2krKyl7bGV0IG49dFtpXTtuZihuLFwiaGludHNcIikscis9bixpIT09ZS0xJiYocis9XCIsIFwiKTt9cmV0dXJuIHJ9dGhyb3cgbmV3IFVyKFwiaGludHNcIix0LCdtdXN0IGJlIGFuIGFycmF5IG9yIHN0cmluZyBvZiBmb3JtYXQgXCI8L3N0eWxlcy5jc3M+OyByZWw9cHJlbG9hZDsgYXM9c3R5bGVcIicpfWZmLmV4cG9ydHM9e2lzSW50MzI6QnksaXNVaW50MzI6UHkscGFyc2VGaWxlTW9kZTp4eSx2YWxpZGF0ZUFycmF5OkJzLHZhbGlkYXRlU3RyaW5nQXJyYXk6anksdmFsaWRhdGVCb29sZWFuQXJyYXk6RnksdmFsaWRhdGVCb29sZWFuOnVmLHZhbGlkYXRlQnVmZmVyOiR5LHZhbGlkYXRlRGljdGlvbmFyeTpEeSx2YWxpZGF0ZUVuY29kaW5nOkh5LHZhbGlkYXRlRnVuY3Rpb246S3ksdmFsaWRhdGVJbnQzMjpMeSx2YWxpZGF0ZUludGVnZXI6TXksdmFsaWRhdGVOdW1iZXI6VXksdmFsaWRhdGVPYmplY3Q6cXksdmFsaWRhdGVPbmVPZjpOeSx2YWxpZGF0ZVBsYWluRnVuY3Rpb246R3ksdmFsaWRhdGVQb3J0OlZ5LHZhbGlkYXRlU2lnbmFsTmFtZTpXeSx2YWxpZGF0ZVN0cmluZzpDcyx2YWxpZGF0ZVVpbnQzMjpsZix2YWxpZGF0ZVVuZGVmaW5lZDpReSx2YWxpZGF0ZVVuaW9uOll5LHZhbGlkYXRlQWJvcnRTaWduYWw6enksdmFsaWRhdGVMaW5rSGVhZGVyVmFsdWU6WHl9O30pO3ZhciBOdD1NKChCSSxwZik9PntfKCk7digpO20oKTt2YXIgYWU9cGYuZXhwb3J0cz17fSxYZSxaZTtmdW5jdGlvbiBQcygpe3Rocm93IG5ldyBFcnJvcihcInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWRcIil9ZnVuY3Rpb24ga3MoKXt0aHJvdyBuZXcgRXJyb3IoXCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWRcIil9KGZ1bmN0aW9uKCl7dHJ5e3R5cGVvZiBzZXRUaW1lb3V0PT1cImZ1bmN0aW9uXCI/WGU9c2V0VGltZW91dDpYZT1Qczt9Y2F0Y2h7WGU9UHM7fXRyeXt0eXBlb2YgY2xlYXJUaW1lb3V0PT1cImZ1bmN0aW9uXCI/WmU9Y2xlYXJUaW1lb3V0OlplPWtzO31jYXRjaHtaZT1rczt9fSkoKTtmdW5jdGlvbiBjZih0KXtpZihYZT09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRpbWVvdXQodCwwKTtpZigoWGU9PT1Qc3x8IVhlKSYmc2V0VGltZW91dClyZXR1cm4gWGU9c2V0VGltZW91dCxzZXRUaW1lb3V0KHQsMCk7dHJ5e3JldHVybiBYZSh0LDApfWNhdGNoe3RyeXtyZXR1cm4gWGUuY2FsbChudWxsLHQsMCl9Y2F0Y2h7cmV0dXJuIFhlLmNhbGwodGhpcyx0LDApfX19ZnVuY3Rpb24gWnkodCl7aWYoWmU9PT1jbGVhclRpbWVvdXQpcmV0dXJuIGNsZWFyVGltZW91dCh0KTtpZigoWmU9PT1rc3x8IVplKSYmY2xlYXJUaW1lb3V0KXJldHVybiBaZT1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KHQpO3RyeXtyZXR1cm4gWmUodCl9Y2F0Y2h7dHJ5e3JldHVybiBaZS5jYWxsKG51bGwsdCl9Y2F0Y2h7cmV0dXJuIFplLmNhbGwodGhpcyx0KX19fXZhciBfdD1bXSxOcj0hMSxycixRaT0tMTtmdW5jdGlvbiBlYigpeyFOcnx8IXJyfHwoTnI9ITEscnIubGVuZ3RoP190PXJyLmNvbmNhdChfdCk6UWk9LTEsX3QubGVuZ3RoJiZoZigpKTt9ZnVuY3Rpb24gaGYoKXtpZighTnIpe3ZhciB0PWNmKGViKTtOcj0hMDtmb3IodmFyIGU9X3QubGVuZ3RoO2U7KXtmb3IocnI9X3QsX3Q9W107KytRaTxlOylyciYmcnJbUWldLnJ1bigpO1FpPS0xLGU9X3QubGVuZ3RoO31ycj1udWxsLE5yPSExLFp5KHQpO319YWUubmV4dFRpY2s9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZvcih2YXIgcj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspZVtyLTFdPWFyZ3VtZW50c1tyXTtfdC5wdXNoKG5ldyBkZih0LGUpKSxfdC5sZW5ndGg9PT0xJiYhTnImJmNmKGhmKTt9O2Z1bmN0aW9uIGRmKHQsZSl7dGhpcy5mdW49dCx0aGlzLmFycmF5PWU7fWRmLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpO307YWUudGl0bGU9XCJicm93c2VyXCI7YWUuYnJvd3Nlcj0hMDthZS5lbnY9e307YWUuYXJndj1bXTthZS52ZXJzaW9uPVwiXCI7YWUudmVyc2lvbnM9e307ZnVuY3Rpb24gbXQoKXt9YWUub249bXQ7YWUuYWRkTGlzdGVuZXI9bXQ7YWUub25jZT1tdDthZS5vZmY9bXQ7YWUucmVtb3ZlTGlzdGVuZXI9bXQ7YWUucmVtb3ZlQWxsTGlzdGVuZXJzPW10O2FlLmVtaXQ9bXQ7YWUucHJlcGVuZExpc3RlbmVyPW10O2FlLnByZXBlbmRPbmNlTGlzdGVuZXI9bXQ7YWUubGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3JldHVybiBbXX07YWUuYmluZGluZz1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoXCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZFwiKX07YWUuY3dkPWZ1bmN0aW9uKCl7cmV0dXJuIFwiL1wifTthZS5jaGRpcj1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoXCJwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWRcIil9O2FlLnVtYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9O30pO3ZhciB0dD1NKChESSxQZik9PntfKCk7digpO20oKTt2YXJ7U3ltYm9sOllpLFN5bWJvbEFzeW5jSXRlcmF0b3I6Z2YsU3ltYm9sSXRlcmF0b3I6eWYsU3ltYm9sRm9yOmJmfT1jZSgpLHdmPVlpKFwia0Rlc3Ryb3llZFwiKSxfZj1ZaShcImtJc0Vycm9yZWRcIiksT3M9WWkoXCJrSXNSZWFkYWJsZVwiKSxtZj1ZaShcImtJc0Rpc3R1cmJlZFwiKSx0Yj1iZihcIm5vZGVqcy53ZWJzdHJlYW0uaXNDbG9zZWRQcm9taXNlXCIpLHJiPWJmKFwibm9kZWpzLndlYnN0cmVhbS5jb250cm9sbGVyRXJyb3JGdW5jdGlvblwiKTtmdW5jdGlvbiBKaSh0LGU9ITEpe3ZhciByO3JldHVybiAhISh0JiZ0eXBlb2YgdC5waXBlPT1cImZ1bmN0aW9uXCImJnR5cGVvZiB0Lm9uPT1cImZ1bmN0aW9uXCImJighZXx8dHlwZW9mIHQucGF1c2U9PVwiZnVuY3Rpb25cIiYmdHlwZW9mIHQucmVzdW1lPT1cImZ1bmN0aW9uXCIpJiYoIXQuX3dyaXRhYmxlU3RhdGV8fCgocj10Ll9yZWFkYWJsZVN0YXRlKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIucmVhZGFibGUpIT09ITEpJiYoIXQuX3dyaXRhYmxlU3RhdGV8fHQuX3JlYWRhYmxlU3RhdGUpKX1mdW5jdGlvbiBYaSh0KXt2YXIgZTtyZXR1cm4gISEodCYmdHlwZW9mIHQud3JpdGU9PVwiZnVuY3Rpb25cIiYmdHlwZW9mIHQub249PVwiZnVuY3Rpb25cIiYmKCF0Ll9yZWFkYWJsZVN0YXRlfHwoKGU9dC5fd3JpdGFibGVTdGF0ZSk9PT1udWxsfHxlPT09dm9pZCAwP3ZvaWQgMDplLndyaXRhYmxlKSE9PSExKSl9ZnVuY3Rpb24gaWIodCl7cmV0dXJuICEhKHQmJnR5cGVvZiB0LnBpcGU9PVwiZnVuY3Rpb25cIiYmdC5fcmVhZGFibGVTdGF0ZSYmdHlwZW9mIHQub249PVwiZnVuY3Rpb25cIiYmdHlwZW9mIHQud3JpdGU9PVwiZnVuY3Rpb25cIil9ZnVuY3Rpb24gZXQodCl7cmV0dXJuIHQmJih0Ll9yZWFkYWJsZVN0YXRlfHx0Ll93cml0YWJsZVN0YXRlfHx0eXBlb2YgdC53cml0ZT09XCJmdW5jdGlvblwiJiZ0eXBlb2YgdC5vbj09XCJmdW5jdGlvblwifHx0eXBlb2YgdC5waXBlPT1cImZ1bmN0aW9uXCImJnR5cGVvZiB0Lm9uPT1cImZ1bmN0aW9uXCIpfWZ1bmN0aW9uIHZmKHQpe3JldHVybiAhISh0JiYhZXQodCkmJnR5cGVvZiB0LnBpcGVUaHJvdWdoPT1cImZ1bmN0aW9uXCImJnR5cGVvZiB0LmdldFJlYWRlcj09XCJmdW5jdGlvblwiJiZ0eXBlb2YgdC5jYW5jZWw9PVwiZnVuY3Rpb25cIil9ZnVuY3Rpb24gRWYodCl7cmV0dXJuICEhKHQmJiFldCh0KSYmdHlwZW9mIHQuZ2V0V3JpdGVyPT1cImZ1bmN0aW9uXCImJnR5cGVvZiB0LmFib3J0PT1cImZ1bmN0aW9uXCIpfWZ1bmN0aW9uIFNmKHQpe3JldHVybiAhISh0JiYhZXQodCkmJnR5cGVvZiB0LnJlYWRhYmxlPT1cIm9iamVjdFwiJiZ0eXBlb2YgdC53cml0YWJsZT09XCJvYmplY3RcIil9ZnVuY3Rpb24gbmIodCl7cmV0dXJuIHZmKHQpfHxFZih0KXx8U2YodCl9ZnVuY3Rpb24gc2IodCxlKXtyZXR1cm4gdD09bnVsbD8hMTplPT09ITA/dHlwZW9mIHRbZ2ZdPT1cImZ1bmN0aW9uXCI6ZT09PSExP3R5cGVvZiB0W3lmXT09XCJmdW5jdGlvblwiOnR5cGVvZiB0W2dmXT09XCJmdW5jdGlvblwifHx0eXBlb2YgdFt5Zl09PVwiZnVuY3Rpb25cIn1mdW5jdGlvbiBaaSh0KXtpZighZXQodCkpcmV0dXJuIG51bGw7bGV0IGU9dC5fd3JpdGFibGVTdGF0ZSxyPXQuX3JlYWRhYmxlU3RhdGUsaT1lfHxyO3JldHVybiAhISh0LmRlc3Ryb3llZHx8dFt3Zl18fGkhPW51bGwmJmkuZGVzdHJveWVkKX1mdW5jdGlvbiBBZih0KXtpZighWGkodCkpcmV0dXJuIG51bGw7aWYodC53cml0YWJsZUVuZGVkPT09ITApcmV0dXJuICEwO2xldCBlPXQuX3dyaXRhYmxlU3RhdGU7cmV0dXJuIGUhPW51bGwmJmUuZXJyb3JlZD8hMTp0eXBlb2YgZT8uZW5kZWQhPVwiYm9vbGVhblwiP251bGw6ZS5lbmRlZH1mdW5jdGlvbiBvYih0LGUpe2lmKCFYaSh0KSlyZXR1cm4gbnVsbDtpZih0LndyaXRhYmxlRmluaXNoZWQ9PT0hMClyZXR1cm4gITA7bGV0IHI9dC5fd3JpdGFibGVTdGF0ZTtyZXR1cm4gciE9bnVsbCYmci5lcnJvcmVkPyExOnR5cGVvZiByPy5maW5pc2hlZCE9XCJib29sZWFuXCI/bnVsbDohIShyLmZpbmlzaGVkfHxlPT09ITEmJnIuZW5kZWQ9PT0hMCYmci5sZW5ndGg9PT0wKX1mdW5jdGlvbiBhYih0KXtpZighSmkodCkpcmV0dXJuIG51bGw7aWYodC5yZWFkYWJsZUVuZGVkPT09ITApcmV0dXJuICEwO2xldCBlPXQuX3JlYWRhYmxlU3RhdGU7cmV0dXJuICFlfHxlLmVycm9yZWQ/ITE6dHlwZW9mIGU/LmVuZGVkIT1cImJvb2xlYW5cIj9udWxsOmUuZW5kZWR9ZnVuY3Rpb24gSWYodCxlKXtpZighSmkodCkpcmV0dXJuIG51bGw7bGV0IHI9dC5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gciE9bnVsbCYmci5lcnJvcmVkPyExOnR5cGVvZiByPy5lbmRFbWl0dGVkIT1cImJvb2xlYW5cIj9udWxsOiEhKHIuZW5kRW1pdHRlZHx8ZT09PSExJiZyLmVuZGVkPT09ITAmJnIubGVuZ3RoPT09MCl9ZnVuY3Rpb24gVGYodCl7cmV0dXJuIHQmJnRbT3NdIT1udWxsP3RbT3NdOnR5cGVvZiB0Py5yZWFkYWJsZSE9XCJib29sZWFuXCI/bnVsbDpaaSh0KT8hMTpKaSh0KSYmdC5yZWFkYWJsZSYmIUlmKHQpfWZ1bmN0aW9uIFJmKHQpe3JldHVybiB0eXBlb2YgdD8ud3JpdGFibGUhPVwiYm9vbGVhblwiP251bGw6WmkodCk/ITE6WGkodCkmJnQud3JpdGFibGUmJiFBZih0KX1mdW5jdGlvbiBsYih0LGUpe3JldHVybiBldCh0KT9aaSh0KT8hMDohKGU/LnJlYWRhYmxlIT09ITEmJlRmKHQpfHxlPy53cml0YWJsZSE9PSExJiZSZih0KSk6bnVsbH1mdW5jdGlvbiB1Yih0KXt2YXIgZSxyO3JldHVybiBldCh0KT90LndyaXRhYmxlRXJyb3JlZD90LndyaXRhYmxlRXJyb3JlZDooZT0ocj10Ll93cml0YWJsZVN0YXRlKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIuZXJyb3JlZCkhPT1udWxsJiZlIT09dm9pZCAwP2U6bnVsbDpudWxsfWZ1bmN0aW9uIGZiKHQpe3ZhciBlLHI7cmV0dXJuIGV0KHQpP3QucmVhZGFibGVFcnJvcmVkP3QucmVhZGFibGVFcnJvcmVkOihlPShyPXQuX3JlYWRhYmxlU3RhdGUpPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci5lcnJvcmVkKSE9PW51bGwmJmUhPT12b2lkIDA/ZTpudWxsOm51bGx9ZnVuY3Rpb24gY2IodCl7aWYoIWV0KHQpKXJldHVybiBudWxsO2lmKHR5cGVvZiB0LmNsb3NlZD09XCJib29sZWFuXCIpcmV0dXJuIHQuY2xvc2VkO2xldCBlPXQuX3dyaXRhYmxlU3RhdGUscj10Ll9yZWFkYWJsZVN0YXRlO3JldHVybiB0eXBlb2YgZT8uY2xvc2VkPT1cImJvb2xlYW5cInx8dHlwZW9mIHI/LmNsb3NlZD09XCJib29sZWFuXCI/ZT8uY2xvc2VkfHxyPy5jbG9zZWQ6dHlwZW9mIHQuX2Nsb3NlZD09XCJib29sZWFuXCImJkNmKHQpP3QuX2Nsb3NlZDpudWxsfWZ1bmN0aW9uIENmKHQpe3JldHVybiB0eXBlb2YgdC5fY2xvc2VkPT1cImJvb2xlYW5cIiYmdHlwZW9mIHQuX2RlZmF1bHRLZWVwQWxpdmU9PVwiYm9vbGVhblwiJiZ0eXBlb2YgdC5fcmVtb3ZlZENvbm5lY3Rpb249PVwiYm9vbGVhblwiJiZ0eXBlb2YgdC5fcmVtb3ZlZENvbnRMZW49PVwiYm9vbGVhblwifWZ1bmN0aW9uIEJmKHQpe3JldHVybiB0eXBlb2YgdC5fc2VudDEwMD09XCJib29sZWFuXCImJkNmKHQpfWZ1bmN0aW9uIGhiKHQpe3ZhciBlO3JldHVybiB0eXBlb2YgdC5fY29uc3VtaW5nPT1cImJvb2xlYW5cIiYmdHlwZW9mIHQuX2R1bXBlZD09XCJib29sZWFuXCImJigoZT10LnJlcSk9PT1udWxsfHxlPT09dm9pZCAwP3ZvaWQgMDplLnVwZ3JhZGVPckNvbm5lY3QpPT09dm9pZCAwfWZ1bmN0aW9uIGRiKHQpe2lmKCFldCh0KSlyZXR1cm4gbnVsbDtsZXQgZT10Ll93cml0YWJsZVN0YXRlLHI9dC5fcmVhZGFibGVTdGF0ZSxpPWV8fHI7cmV0dXJuICFpJiZCZih0KXx8ISEoaSYmaS5hdXRvRGVzdHJveSYmaS5lbWl0Q2xvc2UmJmkuY2xvc2VkPT09ITEpfWZ1bmN0aW9uIHBiKHQpe3ZhciBlO3JldHVybiAhISh0JiYoKGU9dFttZl0pIT09bnVsbCYmZSE9PXZvaWQgMD9lOnQucmVhZGFibGVEaWRSZWFkfHx0LnJlYWRhYmxlQWJvcnRlZCkpfWZ1bmN0aW9uIGdiKHQpe3ZhciBlLHIsaSxuLG8scyxhLGwsYyxoO3JldHVybiAhISh0JiYoKGU9KHI9KGk9KG49KG89KHM9dFtfZl0pIT09bnVsbCYmcyE9PXZvaWQgMD9zOnQucmVhZGFibGVFcnJvcmVkKSE9PW51bGwmJm8hPT12b2lkIDA/bzp0LndyaXRhYmxlRXJyb3JlZCkhPT1udWxsJiZuIT09dm9pZCAwP246KGE9dC5fcmVhZGFibGVTdGF0ZSk9PT1udWxsfHxhPT09dm9pZCAwP3ZvaWQgMDphLmVycm9yRW1pdHRlZCkhPT1udWxsJiZpIT09dm9pZCAwP2k6KGw9dC5fd3JpdGFibGVTdGF0ZSk9PT1udWxsfHxsPT09dm9pZCAwP3ZvaWQgMDpsLmVycm9yRW1pdHRlZCkhPT1udWxsJiZyIT09dm9pZCAwP3I6KGM9dC5fcmVhZGFibGVTdGF0ZSk9PT1udWxsfHxjPT09dm9pZCAwP3ZvaWQgMDpjLmVycm9yZWQpIT09bnVsbCYmZSE9PXZvaWQgMD9lOiEoKGg9dC5fd3JpdGFibGVTdGF0ZSk9PT1udWxsfHxoPT09dm9pZCAwKSYmaC5lcnJvcmVkKSl9UGYuZXhwb3J0cz17a0Rlc3Ryb3llZDp3Zixpc0Rpc3R1cmJlZDpwYixrSXNEaXN0dXJiZWQ6bWYsaXNFcnJvcmVkOmdiLGtJc0Vycm9yZWQ6X2YsaXNSZWFkYWJsZTpUZixrSXNSZWFkYWJsZTpPcyxrSXNDbG9zZWRQcm9taXNlOnRiLGtDb250cm9sbGVyRXJyb3JGdW5jdGlvbjpyYixpc0Nsb3NlZDpjYixpc0Rlc3Ryb3llZDpaaSxpc0R1cGxleE5vZGVTdHJlYW06aWIsaXNGaW5pc2hlZDpsYixpc0l0ZXJhYmxlOnNiLGlzUmVhZGFibGVOb2RlU3RyZWFtOkppLGlzUmVhZGFibGVTdHJlYW06dmYsaXNSZWFkYWJsZUVuZGVkOmFiLGlzUmVhZGFibGVGaW5pc2hlZDpJZixpc1JlYWRhYmxlRXJyb3JlZDpmYixpc05vZGVTdHJlYW06ZXQsaXNXZWJTdHJlYW06bmIsaXNXcml0YWJsZTpSZixpc1dyaXRhYmxlTm9kZVN0cmVhbTpYaSxpc1dyaXRhYmxlU3RyZWFtOkVmLGlzV3JpdGFibGVFbmRlZDpBZixpc1dyaXRhYmxlRmluaXNoZWQ6b2IsaXNXcml0YWJsZUVycm9yZWQ6dWIsaXNTZXJ2ZXJSZXF1ZXN0OmhiLGlzU2VydmVyUmVzcG9uc2U6QmYsd2lsbEVtaXRDbG9zZTpkYixpc1RyYW5zZm9ybVN0cmVhbTpTZn07fSk7dmFyIHZ0PU0oKFFJLE5zKT0+e18oKTt2KCk7bSgpO3ZhciBxdD1OdCgpLHtBYm9ydEVycm9yOkRmLGNvZGVzOnlifT1BZSgpLHtFUlJfSU5WQUxJRF9BUkdfVFlQRTpiYixFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRTprZn09eWIse2tFbXB0eU9iamVjdDpNcyxvbmNlOkxzfT1KZSgpLHt2YWxpZGF0ZUFib3J0U2lnbmFsOndiLHZhbGlkYXRlRnVuY3Rpb246X2IsdmFsaWRhdGVPYmplY3Q6bWIsdmFsaWRhdGVCb29sZWFuOnZifT1oaSgpLHtQcm9taXNlOkViLFByb21pc2VQcm90b3R5cGVUaGVuOlNifT1jZSgpLHtpc0Nsb3NlZDpBYixpc1JlYWRhYmxlOk9mLGlzUmVhZGFibGVOb2RlU3RyZWFtOnhzLGlzUmVhZGFibGVTdHJlYW06SWIsaXNSZWFkYWJsZUZpbmlzaGVkOnhmLGlzUmVhZGFibGVFcnJvcmVkOk1mLGlzV3JpdGFibGU6TGYsaXNXcml0YWJsZU5vZGVTdHJlYW06VWYsaXNXcml0YWJsZVN0cmVhbTpUYixpc1dyaXRhYmxlRmluaXNoZWQ6TmYsaXNXcml0YWJsZUVycm9yZWQ6cWYsaXNOb2RlU3RyZWFtOlJiLHdpbGxFbWl0Q2xvc2U6Q2Isa0lzQ2xvc2VkUHJvbWlzZTpCYn09dHQoKTtmdW5jdGlvbiBQYih0KXtyZXR1cm4gdC5zZXRIZWFkZXImJnR5cGVvZiB0LmFib3J0PT1cImZ1bmN0aW9uXCJ9dmFyIFVzPSgpPT57fTtmdW5jdGlvbiBqZih0LGUscil7dmFyIGksbjtpZihhcmd1bWVudHMubGVuZ3RoPT09Mj8ocj1lLGU9TXMpOmU9PW51bGw/ZT1NczptYihlLFwib3B0aW9uc1wiKSxfYihyLFwiY2FsbGJhY2tcIiksd2IoZS5zaWduYWwsXCJvcHRpb25zLnNpZ25hbFwiKSxyPUxzKHIpLEliKHQpfHxUYih0KSlyZXR1cm4ga2IodCxlLHIpO2lmKCFSYih0KSl0aHJvdyBuZXcgYmIoXCJzdHJlYW1cIixbXCJSZWFkYWJsZVN0cmVhbVwiLFwiV3JpdGFibGVTdHJlYW1cIixcIlN0cmVhbVwiXSx0KTtsZXQgbz0oaT1lLnJlYWRhYmxlKSE9PW51bGwmJmkhPT12b2lkIDA/aTp4cyh0KSxzPShuPWUud3JpdGFibGUpIT09bnVsbCYmbiE9PXZvaWQgMD9uOlVmKHQpLGE9dC5fd3JpdGFibGVTdGF0ZSxsPXQuX3JlYWRhYmxlU3RhdGUsYz0oKT0+e3Qud3JpdGFibGV8fGcoKTt9LGg9Q2IodCkmJnhzKHQpPT09byYmVWYodCk9PT1zLGQ9TmYodCwhMSksZz0oKT0+e2Q9ITAsdC5kZXN0cm95ZWQmJihoPSExKSwhKGgmJighdC5yZWFkYWJsZXx8bykpJiYoIW98fHkpJiZyLmNhbGwodCk7fSx5PXhmKHQsITEpLHc9KCk9Pnt5PSEwLHQuZGVzdHJveWVkJiYoaD0hMSksIShoJiYoIXQud3JpdGFibGV8fHMpKSYmKCFzfHxkKSYmci5jYWxsKHQpO30sUz1OPT57ci5jYWxsKHQsTik7fSxFPUFiKHQpLEk9KCk9PntFPSEwO2xldCBOPXFmKHQpfHxNZih0KTtpZihOJiZ0eXBlb2YgTiE9XCJib29sZWFuXCIpcmV0dXJuIHIuY2FsbCh0LE4pO2lmKG8mJiF5JiZ4cyh0LCEwKSYmIXhmKHQsITEpKXJldHVybiByLmNhbGwodCxuZXcga2YpO2lmKHMmJiFkJiYhTmYodCwhMSkpcmV0dXJuIHIuY2FsbCh0LG5ldyBrZik7ci5jYWxsKHQpO30sQz0oKT0+e0U9ITA7bGV0IE49cWYodCl8fE1mKHQpO2lmKE4mJnR5cGVvZiBOIT1cImJvb2xlYW5cIilyZXR1cm4gci5jYWxsKHQsTik7ci5jYWxsKHQpO30sUj0oKT0+e3QucmVxLm9uKFwiZmluaXNoXCIsZyk7fTtQYih0KT8odC5vbihcImNvbXBsZXRlXCIsZyksaHx8dC5vbihcImFib3J0XCIsSSksdC5yZXE/UigpOnQub24oXCJyZXF1ZXN0XCIsUikpOnMmJiFhJiYodC5vbihcImVuZFwiLGMpLHQub24oXCJjbG9zZVwiLGMpKSwhaCYmdHlwZW9mIHQuYWJvcnRlZD09XCJib29sZWFuXCImJnQub24oXCJhYm9ydGVkXCIsSSksdC5vbihcImVuZFwiLHcpLHQub24oXCJmaW5pc2hcIixnKSxlLmVycm9yIT09ITEmJnQub24oXCJlcnJvclwiLFMpLHQub24oXCJjbG9zZVwiLEkpLEU/cXQubmV4dFRpY2soSSk6YSE9bnVsbCYmYS5lcnJvckVtaXR0ZWR8fGwhPW51bGwmJmwuZXJyb3JFbWl0dGVkP2h8fHF0Lm5leHRUaWNrKEMpOighbyYmKCFofHxPZih0KSkmJihkfHxMZih0KT09PSExKXx8IXMmJighaHx8TGYodCkpJiYoeXx8T2YodCk9PT0hMSl8fGwmJnQucmVxJiZ0LmFib3J0ZWQpJiZxdC5uZXh0VGljayhDKTtsZXQgVT0oKT0+e3I9VXMsdC5yZW1vdmVMaXN0ZW5lcihcImFib3J0ZWRcIixJKSx0LnJlbW92ZUxpc3RlbmVyKFwiY29tcGxldGVcIixnKSx0LnJlbW92ZUxpc3RlbmVyKFwiYWJvcnRcIixJKSx0LnJlbW92ZUxpc3RlbmVyKFwicmVxdWVzdFwiLFIpLHQucmVxJiZ0LnJlcS5yZW1vdmVMaXN0ZW5lcihcImZpbmlzaFwiLGcpLHQucmVtb3ZlTGlzdGVuZXIoXCJlbmRcIixjKSx0LnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIixjKSx0LnJlbW92ZUxpc3RlbmVyKFwiZmluaXNoXCIsZyksdC5yZW1vdmVMaXN0ZW5lcihcImVuZFwiLHcpLHQucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLFMpLHQucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLEkpO307aWYoZS5zaWduYWwmJiFFKXtsZXQgTj0oKT0+e2xldCBXPXI7VSgpLFcuY2FsbCh0LG5ldyBEZih2b2lkIDAse2NhdXNlOmUuc2lnbmFsLnJlYXNvbn0pKTt9O2lmKGUuc2lnbmFsLmFib3J0ZWQpcXQubmV4dFRpY2soTik7ZWxzZSB7bGV0IFc9cjtyPUxzKCguLi5LKT0+e2Uuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLE4pLFcuYXBwbHkodCxLKTt9KSxlLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIixOKTt9fXJldHVybiBVfWZ1bmN0aW9uIGtiKHQsZSxyKXtsZXQgaT0hMSxuPVVzO2lmKGUuc2lnbmFsKWlmKG49KCk9PntpPSEwLHIuY2FsbCh0LG5ldyBEZih2b2lkIDAse2NhdXNlOmUuc2lnbmFsLnJlYXNvbn0pKTt9LGUuc2lnbmFsLmFib3J0ZWQpcXQubmV4dFRpY2sobik7ZWxzZSB7bGV0IHM9cjtyPUxzKCguLi5hKT0+e2Uuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLG4pLHMuYXBwbHkodCxhKTt9KSxlLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIixuKTt9bGV0IG89KC4uLnMpPT57aXx8cXQubmV4dFRpY2soKCk9PnIuYXBwbHkodCxzKSk7fTtyZXR1cm4gU2IodFtCYl0ucHJvbWlzZSxvLG8pLFVzfWZ1bmN0aW9uIE9iKHQsZSl7dmFyIHI7bGV0IGk9ITE7cmV0dXJuIGU9PT1udWxsJiYoZT1NcyksKHI9ZSkhPT1udWxsJiZyIT09dm9pZCAwJiZyLmNsZWFudXAmJih2YihlLmNsZWFudXAsXCJjbGVhbnVwXCIpLGk9ZS5jbGVhbnVwKSxuZXcgRWIoKG4sbyk9PntsZXQgcz1qZih0LGUsYT0+e2kmJnMoKSxhP28oYSk6bigpO30pO30pfU5zLmV4cG9ydHM9amY7TnMuZXhwb3J0cy5maW5pc2hlZD1PYjt9KTt2YXIgaXI9TSgoc1QsR2YpPT57XygpO3YoKTttKCk7dmFyIHJ0PU50KCkse2FnZ3JlZ2F0ZVR3b0Vycm9yczp4Yixjb2Rlczp7RVJSX01VTFRJUExFX0NBTExCQUNLOk1ifSxBYm9ydEVycm9yOkxifT1BZSgpLHtTeW1ib2w6JGZ9PWNlKCkse2tEZXN0cm95ZWQ6VWIsaXNEZXN0cm95ZWQ6TmIsaXNGaW5pc2hlZDpxYixpc1NlcnZlclJlcXVlc3Q6RGJ9PXR0KCksSGY9JGYoXCJrRGVzdHJveVwiKSxxcz0kZihcImtDb25zdHJ1Y3RcIik7ZnVuY3Rpb24gVmYodCxlLHIpe3QmJih0LnN0YWNrLGUmJiFlLmVycm9yZWQmJihlLmVycm9yZWQ9dCksciYmIXIuZXJyb3JlZCYmKHIuZXJyb3JlZD10KSk7fWZ1bmN0aW9uIGpiKHQsZSl7bGV0IHI9dGhpcy5fcmVhZGFibGVTdGF0ZSxpPXRoaXMuX3dyaXRhYmxlU3RhdGUsbj1pfHxyO3JldHVybiBpIT1udWxsJiZpLmRlc3Ryb3llZHx8ciE9bnVsbCYmci5kZXN0cm95ZWQ/KHR5cGVvZiBlPT1cImZ1bmN0aW9uXCImJmUoKSx0aGlzKTooVmYodCxpLHIpLGkmJihpLmRlc3Ryb3llZD0hMCksciYmKHIuZGVzdHJveWVkPSEwKSxuLmNvbnN0cnVjdGVkP0ZmKHRoaXMsdCxlKTp0aGlzLm9uY2UoSGYsZnVuY3Rpb24obyl7RmYodGhpcyx4YihvLHQpLGUpO30pLHRoaXMpfWZ1bmN0aW9uIEZmKHQsZSxyKXtsZXQgaT0hMTtmdW5jdGlvbiBuKG8pe2lmKGkpcmV0dXJuO2k9ITA7bGV0IHM9dC5fcmVhZGFibGVTdGF0ZSxhPXQuX3dyaXRhYmxlU3RhdGU7VmYobyxhLHMpLGEmJihhLmNsb3NlZD0hMCkscyYmKHMuY2xvc2VkPSEwKSx0eXBlb2Ygcj09XCJmdW5jdGlvblwiJiZyKG8pLG8/cnQubmV4dFRpY2soRmIsdCxvKTpydC5uZXh0VGljayh6Zix0KTt9dHJ5e3QuX2Rlc3Ryb3koZXx8bnVsbCxuKTt9Y2F0Y2gobyl7bihvKTt9fWZ1bmN0aW9uIEZiKHQsZSl7RHModCxlKSx6Zih0KTt9ZnVuY3Rpb24gemYodCl7bGV0IGU9dC5fcmVhZGFibGVTdGF0ZSxyPXQuX3dyaXRhYmxlU3RhdGU7ciYmKHIuY2xvc2VFbWl0dGVkPSEwKSxlJiYoZS5jbG9zZUVtaXR0ZWQ9ITApLChyIT1udWxsJiZyLmVtaXRDbG9zZXx8ZSE9bnVsbCYmZS5lbWl0Q2xvc2UpJiZ0LmVtaXQoXCJjbG9zZVwiKTt9ZnVuY3Rpb24gRHModCxlKXtsZXQgcj10Ll9yZWFkYWJsZVN0YXRlLGk9dC5fd3JpdGFibGVTdGF0ZTtpIT1udWxsJiZpLmVycm9yRW1pdHRlZHx8ciE9bnVsbCYmci5lcnJvckVtaXR0ZWR8fChpJiYoaS5lcnJvckVtaXR0ZWQ9ITApLHImJihyLmVycm9yRW1pdHRlZD0hMCksdC5lbWl0KFwiZXJyb3JcIixlKSk7fWZ1bmN0aW9uIFdiKCl7bGV0IHQ9dGhpcy5fcmVhZGFibGVTdGF0ZSxlPXRoaXMuX3dyaXRhYmxlU3RhdGU7dCYmKHQuY29uc3RydWN0ZWQ9ITAsdC5jbG9zZWQ9ITEsdC5jbG9zZUVtaXR0ZWQ9ITEsdC5kZXN0cm95ZWQ9ITEsdC5lcnJvcmVkPW51bGwsdC5lcnJvckVtaXR0ZWQ9ITEsdC5yZWFkaW5nPSExLHQuZW5kZWQ9dC5yZWFkYWJsZT09PSExLHQuZW5kRW1pdHRlZD10LnJlYWRhYmxlPT09ITEpLGUmJihlLmNvbnN0cnVjdGVkPSEwLGUuZGVzdHJveWVkPSExLGUuY2xvc2VkPSExLGUuY2xvc2VFbWl0dGVkPSExLGUuZXJyb3JlZD1udWxsLGUuZXJyb3JFbWl0dGVkPSExLGUuZmluYWxDYWxsZWQ9ITEsZS5wcmVmaW5pc2hlZD0hMSxlLmVuZGVkPWUud3JpdGFibGU9PT0hMSxlLmVuZGluZz1lLndyaXRhYmxlPT09ITEsZS5maW5pc2hlZD1lLndyaXRhYmxlPT09ITEpO31mdW5jdGlvbiBqcyh0LGUscil7bGV0IGk9dC5fcmVhZGFibGVTdGF0ZSxuPXQuX3dyaXRhYmxlU3RhdGU7aWYobiE9bnVsbCYmbi5kZXN0cm95ZWR8fGkhPW51bGwmJmkuZGVzdHJveWVkKXJldHVybiB0aGlzO2khPW51bGwmJmkuYXV0b0Rlc3Ryb3l8fG4hPW51bGwmJm4uYXV0b0Rlc3Ryb3k/dC5kZXN0cm95KGUpOmUmJihlLnN0YWNrLG4mJiFuLmVycm9yZWQmJihuLmVycm9yZWQ9ZSksaSYmIWkuZXJyb3JlZCYmKGkuZXJyb3JlZD1lKSxyP3J0Lm5leHRUaWNrKERzLHQsZSk6RHModCxlKSk7fWZ1bmN0aW9uICRiKHQsZSl7aWYodHlwZW9mIHQuX2NvbnN0cnVjdCE9XCJmdW5jdGlvblwiKXJldHVybjtsZXQgcj10Ll9yZWFkYWJsZVN0YXRlLGk9dC5fd3JpdGFibGVTdGF0ZTtyJiYoci5jb25zdHJ1Y3RlZD0hMSksaSYmKGkuY29uc3RydWN0ZWQ9ITEpLHQub25jZShxcyxlKSwhKHQubGlzdGVuZXJDb3VudChxcyk+MSkmJnJ0Lm5leHRUaWNrKEhiLHQpO31mdW5jdGlvbiBIYih0KXtsZXQgZT0hMTtmdW5jdGlvbiByKGkpe2lmKGUpe2pzKHQsaT8/bmV3IE1iKTtyZXR1cm59ZT0hMDtsZXQgbj10Ll9yZWFkYWJsZVN0YXRlLG89dC5fd3JpdGFibGVTdGF0ZSxzPW98fG47biYmKG4uY29uc3RydWN0ZWQ9ITApLG8mJihvLmNvbnN0cnVjdGVkPSEwKSxzLmRlc3Ryb3llZD90LmVtaXQoSGYsaSk6aT9qcyh0LGksITApOnJ0Lm5leHRUaWNrKFZiLHQpO310cnl7dC5fY29uc3RydWN0KGk9PntydC5uZXh0VGljayhyLGkpO30pO31jYXRjaChpKXtydC5uZXh0VGljayhyLGkpO319ZnVuY3Rpb24gVmIodCl7dC5lbWl0KHFzKTt9ZnVuY3Rpb24gV2YodCl7cmV0dXJuIHQ/LnNldEhlYWRlciYmdHlwZW9mIHQuYWJvcnQ9PVwiZnVuY3Rpb25cIn1mdW5jdGlvbiBLZih0KXt0LmVtaXQoXCJjbG9zZVwiKTt9ZnVuY3Rpb24gemIodCxlKXt0LmVtaXQoXCJlcnJvclwiLGUpLHJ0Lm5leHRUaWNrKEtmLHQpO31mdW5jdGlvbiBLYih0LGUpeyF0fHxOYih0KXx8KCFlJiYhcWIodCkmJihlPW5ldyBMYiksRGIodCk/KHQuc29ja2V0PW51bGwsdC5kZXN0cm95KGUpKTpXZih0KT90LmFib3J0KCk6V2YodC5yZXEpP3QucmVxLmFib3J0KCk6dHlwZW9mIHQuZGVzdHJveT09XCJmdW5jdGlvblwiP3QuZGVzdHJveShlKTp0eXBlb2YgdC5jbG9zZT09XCJmdW5jdGlvblwiP3QuY2xvc2UoKTplP3J0Lm5leHRUaWNrKHpiLHQsZSk6cnQubmV4dFRpY2soS2YsdCksdC5kZXN0cm95ZWR8fCh0W1ViXT0hMCkpO31HZi5leHBvcnRzPXtjb25zdHJ1Y3Q6JGIsZGVzdHJveWVyOktiLGRlc3Ryb3k6amIsdW5kZXN0cm95OldiLGVycm9yT3JEZXN0cm95OmpzfTt9KTtmdW5jdGlvbiBZKCl7WS5pbml0LmNhbGwodGhpcyk7fWZ1bmN0aW9uIGVuKHQpe2lmKHR5cGVvZiB0IT1cImZ1bmN0aW9uXCIpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwibGlzdGVuZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgdCl9ZnVuY3Rpb24gbmModCl7cmV0dXJuIHQuX21heExpc3RlbmVycz09PXZvaWQgMD9ZLmRlZmF1bHRNYXhMaXN0ZW5lcnM6dC5fbWF4TGlzdGVuZXJzfWZ1bmN0aW9uIFhmKHQsZSxyLGkpe3ZhciBuLG8scyxhO2lmKGVuKHIpLChvPXQuX2V2ZW50cyk9PT12b2lkIDA/KG89dC5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdC5fZXZlbnRzQ291bnQ9MCk6KG8ubmV3TGlzdGVuZXIhPT12b2lkIDAmJih0LmVtaXQoXCJuZXdMaXN0ZW5lclwiLGUsci5saXN0ZW5lcj9yLmxpc3RlbmVyOnIpLG89dC5fZXZlbnRzKSxzPW9bZV0pLHM9PT12b2lkIDApcz1vW2VdPXIsKyt0Ll9ldmVudHNDb3VudDtlbHNlIGlmKHR5cGVvZiBzPT1cImZ1bmN0aW9uXCI/cz1vW2VdPWk/W3Isc106W3Mscl06aT9zLnVuc2hpZnQocik6cy5wdXNoKHIpLChuPW5jKHQpKT4wJiZzLmxlbmd0aD5uJiYhcy53YXJuZWQpe3Mud2FybmVkPSEwO3ZhciBsPW5ldyBFcnJvcihcIlBvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gXCIrcy5sZW5ndGgrXCIgXCIrU3RyaW5nKGUpK1wiIGxpc3RlbmVycyBhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXRcIik7bC5uYW1lPVwiTWF4TGlzdGVuZXJzRXhjZWVkZWRXYXJuaW5nXCIsbC5lbWl0dGVyPXQsbC50eXBlPWUsbC5jb3VudD1zLmxlbmd0aCxhPWwsY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oYSk7fXJldHVybiB0fWZ1bmN0aW9uIEdiKCl7aWYoIXRoaXMuZmlyZWQpcmV0dXJuIHRoaXMudGFyZ2V0LnJlbW92ZUxpc3RlbmVyKHRoaXMudHlwZSx0aGlzLndyYXBGbiksdGhpcy5maXJlZD0hMCxhcmd1bWVudHMubGVuZ3RoPT09MD90aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpOnRoaXMubGlzdGVuZXIuYXBwbHkodGhpcy50YXJnZXQsYXJndW1lbnRzKX1mdW5jdGlvbiBaZih0LGUscil7dmFyIGk9e2ZpcmVkOiExLHdyYXBGbjp2b2lkIDAsdGFyZ2V0OnQsdHlwZTplLGxpc3RlbmVyOnJ9LG49R2IuYmluZChpKTtyZXR1cm4gbi5saXN0ZW5lcj1yLGkud3JhcEZuPW4sbn1mdW5jdGlvbiBlYyh0LGUscil7dmFyIGk9dC5fZXZlbnRzO2lmKGk9PT12b2lkIDApcmV0dXJuIFtdO3ZhciBuPWlbZV07cmV0dXJuIG49PT12b2lkIDA/W106dHlwZW9mIG49PVwiZnVuY3Rpb25cIj9yP1tuLmxpc3RlbmVyfHxuXTpbbl06cj9mdW5jdGlvbihvKXtmb3IodmFyIHM9bmV3IEFycmF5KG8ubGVuZ3RoKSxhPTA7YTxzLmxlbmd0aDsrK2Epc1thXT1vW2FdLmxpc3RlbmVyfHxvW2FdO3JldHVybiBzfShuKTpzYyhuLG4ubGVuZ3RoKX1mdW5jdGlvbiB0Yyh0KXt2YXIgZT10aGlzLl9ldmVudHM7aWYoZSE9PXZvaWQgMCl7dmFyIHI9ZVt0XTtpZih0eXBlb2Ygcj09XCJmdW5jdGlvblwiKXJldHVybiAxO2lmKHIhPT12b2lkIDApcmV0dXJuIHIubGVuZ3RofXJldHVybiAwfWZ1bmN0aW9uIHNjKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlKSxpPTA7aTxlOysraSlyW2ldPXRbaV07cmV0dXJuIHJ9dmFyIHJjLGljLHFyLFFmLFlmLEpmLEJlLEZzPV9lKCgpPT57XygpO3YoKTttKCk7cXI9dHlwZW9mIFJlZmxlY3Q9PVwib2JqZWN0XCI/UmVmbGVjdDpudWxsLFFmPXFyJiZ0eXBlb2YgcXIuYXBwbHk9PVwiZnVuY3Rpb25cIj9xci5hcHBseTpmdW5jdGlvbih0LGUscil7cmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKHQsZSxyKX07aWM9cXImJnR5cGVvZiBxci5vd25LZXlzPT1cImZ1bmN0aW9uXCI/cXIub3duS2V5czpPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KS5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KSl9OmZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KX07WWY9TnVtYmVyLmlzTmFOfHxmdW5jdGlvbih0KXtyZXR1cm4gdCE9dH07cmM9WSxZLkV2ZW50RW1pdHRlcj1ZLFkucHJvdG90eXBlLl9ldmVudHM9dm9pZCAwLFkucHJvdG90eXBlLl9ldmVudHNDb3VudD0wLFkucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnM9dm9pZCAwO0pmPTEwO09iamVjdC5kZWZpbmVQcm9wZXJ0eShZLFwiZGVmYXVsdE1heExpc3RlbmVyc1wiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBKZn0sc2V0OmZ1bmN0aW9uKHQpe2lmKHR5cGVvZiB0IT1cIm51bWJlclwifHx0PDB8fFlmKHQpKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJkZWZhdWx0TWF4TGlzdGVuZXJzXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyt0K1wiLlwiKTtKZj10O319KSxZLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLl9ldmVudHMhPT12b2lkIDAmJnRoaXMuX2V2ZW50cyE9PU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fZXZlbnRzfHwodGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCksdGhpcy5fbWF4TGlzdGVuZXJzPXRoaXMuX21heExpc3RlbmVyc3x8dm9pZCAwO30sWS5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKHQpe2lmKHR5cGVvZiB0IT1cIm51bWJlclwifHx0PDB8fFlmKHQpKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJuXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyt0K1wiLlwiKTtyZXR1cm4gdGhpcy5fbWF4TGlzdGVuZXJzPXQsdGhpc30sWS5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIG5jKHRoaXMpfSxZLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyllLnB1c2goYXJndW1lbnRzW3JdKTt2YXIgaT10PT09XCJlcnJvclwiLG49dGhpcy5fZXZlbnRzO2lmKG4hPT12b2lkIDApaT1pJiZuLmVycm9yPT09dm9pZCAwO2Vsc2UgaWYoIWkpcmV0dXJuICExO2lmKGkpe3ZhciBvO2lmKGUubGVuZ3RoPjAmJihvPWVbMF0pLG8gaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBvO3ZhciBzPW5ldyBFcnJvcihcIlVuaGFuZGxlZCBlcnJvci5cIisobz9cIiAoXCIrby5tZXNzYWdlK1wiKVwiOlwiXCIpKTt0aHJvdyBzLmNvbnRleHQ9byxzfXZhciBhPW5bdF07aWYoYT09PXZvaWQgMClyZXR1cm4gITE7aWYodHlwZW9mIGE9PVwiZnVuY3Rpb25cIilRZihhLHRoaXMsZSk7ZWxzZSB7dmFyIGw9YS5sZW5ndGgsYz1zYyhhLGwpO2ZvcihyPTA7cjxsOysrcilRZihjW3JdLHRoaXMsZSk7fXJldHVybiAhMH0sWS5wcm90b3R5cGUuYWRkTGlzdGVuZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gWGYodGhpcyx0LGUsITEpfSxZLnByb3RvdHlwZS5vbj1ZLnByb3RvdHlwZS5hZGRMaXN0ZW5lcixZLnByb3RvdHlwZS5wcmVwZW5kTGlzdGVuZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gWGYodGhpcyx0LGUsITApfSxZLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVuKGUpLHRoaXMub24odCxaZih0aGlzLHQsZSkpLHRoaXN9LFkucHJvdG90eXBlLnByZXBlbmRPbmNlTGlzdGVuZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZW4oZSksdGhpcy5wcmVwZW5kTGlzdGVuZXIodCxaZih0aGlzLHQsZSkpLHRoaXN9LFkucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxuLG8scztpZihlbihlKSwoaT10aGlzLl9ldmVudHMpPT09dm9pZCAwKXJldHVybiB0aGlzO2lmKChyPWlbdF0pPT09dm9pZCAwKXJldHVybiB0aGlzO2lmKHI9PT1lfHxyLmxpc3RlbmVyPT09ZSktLXRoaXMuX2V2ZW50c0NvdW50PT0wP3RoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpOihkZWxldGUgaVt0XSxpLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoXCJyZW1vdmVMaXN0ZW5lclwiLHQsci5saXN0ZW5lcnx8ZSkpO2Vsc2UgaWYodHlwZW9mIHIhPVwiZnVuY3Rpb25cIil7Zm9yKG49LTEsbz1yLmxlbmd0aC0xO28+PTA7by0tKWlmKHJbb109PT1lfHxyW29dLmxpc3RlbmVyPT09ZSl7cz1yW29dLmxpc3RlbmVyLG49bzticmVha31pZihuPDApcmV0dXJuIHRoaXM7bj09PTA/ci5zaGlmdCgpOmZ1bmN0aW9uKGEsbCl7Zm9yKDtsKzE8YS5sZW5ndGg7bCsrKWFbbF09YVtsKzFdO2EucG9wKCk7fShyLG4pLHIubGVuZ3RoPT09MSYmKGlbdF09clswXSksaS5yZW1vdmVMaXN0ZW5lciE9PXZvaWQgMCYmdGhpcy5lbWl0KFwicmVtb3ZlTGlzdGVuZXJcIix0LHN8fGUpO31yZXR1cm4gdGhpc30sWS5wcm90b3R5cGUub2ZmPVkucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLFkucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbih0KXt2YXIgZSxyLGk7aWYoKHI9dGhpcy5fZXZlbnRzKT09PXZvaWQgMClyZXR1cm4gdGhpcztpZihyLnJlbW92ZUxpc3RlbmVyPT09dm9pZCAwKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MD8odGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCk6clt0XSE9PXZvaWQgMCYmKC0tdGhpcy5fZXZlbnRzQ291bnQ9PTA/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6ZGVsZXRlIHJbdF0pLHRoaXM7aWYoYXJndW1lbnRzLmxlbmd0aD09PTApe3ZhciBuLG89T2JqZWN0LmtleXMocik7Zm9yKGk9MDtpPG8ubGVuZ3RoOysraSkobj1vW2ldKSE9PVwicmVtb3ZlTGlzdGVuZXJcIiYmdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMobik7cmV0dXJuIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKFwicmVtb3ZlTGlzdGVuZXJcIiksdGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCx0aGlzfWlmKHR5cGVvZihlPXJbdF0pPT1cImZ1bmN0aW9uXCIpdGhpcy5yZW1vdmVMaXN0ZW5lcih0LGUpO2Vsc2UgaWYoZSE9PXZvaWQgMClmb3IoaT1lLmxlbmd0aC0xO2k+PTA7aS0tKXRoaXMucmVtb3ZlTGlzdGVuZXIodCxlW2ldKTtyZXR1cm4gdGhpc30sWS5wcm90b3R5cGUubGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3JldHVybiBlYyh0aGlzLHQsITApfSxZLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnM9ZnVuY3Rpb24odCl7cmV0dXJuIGVjKHRoaXMsdCwhMSl9LFkubGlzdGVuZXJDb3VudD1mdW5jdGlvbih0LGUpe3JldHVybiB0eXBlb2YgdC5saXN0ZW5lckNvdW50PT1cImZ1bmN0aW9uXCI/dC5saXN0ZW5lckNvdW50KGUpOnRjLmNhbGwodCxlKX0sWS5wcm90b3R5cGUubGlzdGVuZXJDb3VudD10YyxZLnByb3RvdHlwZS5ldmVudE5hbWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50PjA/aWModGhpcy5fZXZlbnRzKTpbXX07QmU9cmM7QmUuRXZlbnRFbWl0dGVyO0JlLmRlZmF1bHRNYXhMaXN0ZW5lcnM7QmUuaW5pdDtCZS5saXN0ZW5lckNvdW50O0JlLkV2ZW50RW1pdHRlcjtCZS5kZWZhdWx0TWF4TGlzdGVuZXJzO0JlLmluaXQ7QmUubGlzdGVuZXJDb3VudDt9KTt2YXIgbnI9e307SnQobnIse0V2ZW50RW1pdHRlcjooKT0+UWIsZGVmYXVsdDooKT0+QmUsZGVmYXVsdE1heExpc3RlbmVyczooKT0+WWIsaW5pdDooKT0+SmIsbGlzdGVuZXJDb3VudDooKT0+WGIsb246KCk9PlpiLG9uY2U6KCk9PmV3fSk7dmFyIFFiLFliLEpiLFhiLFpiLGV3LHNyPV9lKCgpPT57XygpO3YoKTttKCk7RnMoKTtGcygpO0JlLm9uY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IFByb21pc2UoKHIsaSk9PntmdW5jdGlvbiBuKC4uLnMpe28hPT12b2lkIDAmJnQucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLG8pLHIocyk7fWxldCBvO2UhPT1cImVycm9yXCImJihvPXM9Pnt0LnJlbW92ZUxpc3RlbmVyKG5hbWUsbiksaShzKTt9LHQub25jZShcImVycm9yXCIsbykpLHQub25jZShlLG4pO30pfTtCZS5vbj1mdW5jdGlvbih0LGUpe2xldCByPVtdLGk9W10sbj1udWxsLG89ITEscz17YXN5bmMgbmV4dCgpe2xldCBjPXIuc2hpZnQoKTtpZihjKXJldHVybiBjcmVhdGVJdGVyUmVzdWx0KGMsITEpO2lmKG4pe2xldCBoPVByb21pc2UucmVqZWN0KG4pO3JldHVybiBuPW51bGwsaH1yZXR1cm4gbz9jcmVhdGVJdGVyUmVzdWx0KHZvaWQgMCwhMCk6bmV3IFByb21pc2UoKGgsZCk9PmkucHVzaCh7cmVzb2x2ZTpoLHJlamVjdDpkfSkpfSxhc3luYyByZXR1cm4oKXt0LnJlbW92ZUxpc3RlbmVyKGUsYSksdC5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsbCksbz0hMDtmb3IobGV0IGMgb2YgaSljLnJlc29sdmUoY3JlYXRlSXRlclJlc3VsdCh2b2lkIDAsITApKTtyZXR1cm4gY3JlYXRlSXRlclJlc3VsdCh2b2lkIDAsITApfSx0aHJvdyhjKXtuPWMsdC5yZW1vdmVMaXN0ZW5lcihlLGEpLHQucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLGwpO30sW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpe3JldHVybiB0aGlzfX07cmV0dXJuIHQub24oZSxhKSx0Lm9uKFwiZXJyb3JcIixsKSxzO2Z1bmN0aW9uIGEoLi4uYyl7bGV0IGg9aS5zaGlmdCgpO2g/aC5yZXNvbHZlKGNyZWF0ZUl0ZXJSZXN1bHQoYywhMSkpOnIucHVzaChjKTt9ZnVuY3Rpb24gbChjKXtvPSEwO2xldCBoPWkuc2hpZnQoKTtoP2gucmVqZWN0KGMpOm49YyxzLnJldHVybigpO319Oyh7RXZlbnRFbWl0dGVyOlFiLGRlZmF1bHRNYXhMaXN0ZW5lcnM6WWIsaW5pdDpKYixsaXN0ZW5lckNvdW50OlhiLG9uOlpiLG9uY2U6ZXd9PUJlKTt9KTt2YXIgbm49TSgoVVQsYWMpPT57XygpO3YoKTttKCk7dmFye0FycmF5SXNBcnJheTp0dyxPYmplY3RTZXRQcm90b3R5cGVPZjpvY309Y2UoKSx7RXZlbnRFbWl0dGVyOnRufT0oc3IoKSxYKG5yKSk7ZnVuY3Rpb24gcm4odCl7dG4uY2FsbCh0aGlzLHQpO31vYyhybi5wcm90b3R5cGUsdG4ucHJvdG90eXBlKTtvYyhybix0bik7cm4ucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24odCxlKXtsZXQgcj10aGlzO2Z1bmN0aW9uIGkoaCl7dC53cml0YWJsZSYmdC53cml0ZShoKT09PSExJiZyLnBhdXNlJiZyLnBhdXNlKCk7fXIub24oXCJkYXRhXCIsaSk7ZnVuY3Rpb24gbigpe3IucmVhZGFibGUmJnIucmVzdW1lJiZyLnJlc3VtZSgpO310Lm9uKFwiZHJhaW5cIixuKSwhdC5faXNTdGRpbyYmKCFlfHxlLmVuZCE9PSExKSYmKHIub24oXCJlbmRcIixzKSxyLm9uKFwiY2xvc2VcIixhKSk7bGV0IG89ITE7ZnVuY3Rpb24gcygpe298fChvPSEwLHQuZW5kKCkpO31mdW5jdGlvbiBhKCl7b3x8KG89ITAsdHlwZW9mIHQuZGVzdHJveT09XCJmdW5jdGlvblwiJiZ0LmRlc3Ryb3koKSk7fWZ1bmN0aW9uIGwoaCl7YygpLHRuLmxpc3RlbmVyQ291bnQodGhpcyxcImVycm9yXCIpPT09MCYmdGhpcy5lbWl0KFwiZXJyb3JcIixoKTt9V3MocixcImVycm9yXCIsbCksV3ModCxcImVycm9yXCIsbCk7ZnVuY3Rpb24gYygpe3IucmVtb3ZlTGlzdGVuZXIoXCJkYXRhXCIsaSksdC5yZW1vdmVMaXN0ZW5lcihcImRyYWluXCIsbiksci5yZW1vdmVMaXN0ZW5lcihcImVuZFwiLHMpLHIucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLGEpLHIucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLGwpLHQucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLGwpLHIucmVtb3ZlTGlzdGVuZXIoXCJlbmRcIixjKSxyLnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIixjKSx0LnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIixjKTt9cmV0dXJuIHIub24oXCJlbmRcIixjKSxyLm9uKFwiY2xvc2VcIixjKSx0Lm9uKFwiY2xvc2VcIixjKSx0LmVtaXQoXCJwaXBlXCIsciksdH07ZnVuY3Rpb24gV3ModCxlLHIpe2lmKHR5cGVvZiB0LnByZXBlbmRMaXN0ZW5lcj09XCJmdW5jdGlvblwiKXJldHVybiB0LnByZXBlbmRMaXN0ZW5lcihlLHIpOyF0Ll9ldmVudHN8fCF0Ll9ldmVudHNbZV0/dC5vbihlLHIpOnR3KHQuX2V2ZW50c1tlXSk/dC5fZXZlbnRzW2VdLnVuc2hpZnQocik6dC5fZXZlbnRzW2VdPVtyLHQuX2V2ZW50c1tlXV07fWFjLmV4cG9ydHM9e1N0cmVhbTpybixwcmVwZW5kTGlzdGVuZXI6V3N9O30pO3ZhciBkaT1NKCh6VCxzbik9PntfKCk7digpO20oKTt2YXJ7QWJvcnRFcnJvcjpsYyxjb2Rlczpyd309QWUoKSx7aXNOb2RlU3RyZWFtOnVjLGlzV2ViU3RyZWFtOml3LGtDb250cm9sbGVyRXJyb3JGdW5jdGlvbjpud309dHQoKSxzdz12dCgpLHtFUlJfSU5WQUxJRF9BUkdfVFlQRTpmY309cncsb3c9KHQsZSk9PntpZih0eXBlb2YgdCE9XCJvYmplY3RcInx8IShcImFib3J0ZWRcImluIHQpKXRocm93IG5ldyBmYyhlLFwiQWJvcnRTaWduYWxcIix0KX07c24uZXhwb3J0cy5hZGRBYm9ydFNpZ25hbD1mdW5jdGlvbihlLHIpe2lmKG93KGUsXCJzaWduYWxcIiksIXVjKHIpJiYhaXcocikpdGhyb3cgbmV3IGZjKFwic3RyZWFtXCIsW1wiUmVhZGFibGVTdHJlYW1cIixcIldyaXRhYmxlU3RyZWFtXCIsXCJTdHJlYW1cIl0scik7cmV0dXJuIHNuLmV4cG9ydHMuYWRkQWJvcnRTaWduYWxOb1ZhbGlkYXRlKGUscil9O3NuLmV4cG9ydHMuYWRkQWJvcnRTaWduYWxOb1ZhbGlkYXRlPWZ1bmN0aW9uKHQsZSl7aWYodHlwZW9mIHQhPVwib2JqZWN0XCJ8fCEoXCJhYm9ydGVkXCJpbiB0KSlyZXR1cm4gZTtsZXQgcj11YyhlKT8oKT0+e2UuZGVzdHJveShuZXcgbGModm9pZCAwLHtjYXVzZTp0LnJlYXNvbn0pKTt9OigpPT57ZVtud10obmV3IGxjKHZvaWQgMCx7Y2F1c2U6dC5yZWFzb259KSk7fTtyZXR1cm4gdC5hYm9ydGVkP3IoKToodC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIixyKSxzdyhlLCgpPT50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLHIpKSksZX07fSk7dmFyIGRjPU0oKGkyLGhjKT0+e18oKTt2KCk7bSgpO3ZhcntTdHJpbmdQcm90b3R5cGVTbGljZTpjYyxTeW1ib2xJdGVyYXRvcjphdyxUeXBlZEFycmF5UHJvdG90eXBlU2V0Om9uLFVpbnQ4QXJyYXk6bHd9PWNlKCkse0J1ZmZlcjokc309KGJlKCksWChtZSkpLHtpbnNwZWN0OnV3fT1KZSgpO2hjLmV4cG9ydHM9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wO31wdXNoKGUpe2xldCByPXtkYXRhOmUsbmV4dDpudWxsfTt0aGlzLmxlbmd0aD4wP3RoaXMudGFpbC5uZXh0PXI6dGhpcy5oZWFkPXIsdGhpcy50YWlsPXIsKyt0aGlzLmxlbmd0aDt9dW5zaGlmdChlKXtsZXQgcj17ZGF0YTplLG5leHQ6dGhpcy5oZWFkfTt0aGlzLmxlbmd0aD09PTAmJih0aGlzLnRhaWw9ciksdGhpcy5oZWFkPXIsKyt0aGlzLmxlbmd0aDt9c2hpZnQoKXtpZih0aGlzLmxlbmd0aD09PTApcmV0dXJuO2xldCBlPXRoaXMuaGVhZC5kYXRhO3JldHVybiB0aGlzLmxlbmd0aD09PTE/dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsOnRoaXMuaGVhZD10aGlzLmhlYWQubmV4dCwtLXRoaXMubGVuZ3RoLGV9Y2xlYXIoKXt0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MDt9am9pbihlKXtpZih0aGlzLmxlbmd0aD09PTApcmV0dXJuIFwiXCI7bGV0IHI9dGhpcy5oZWFkLGk9XCJcIityLmRhdGE7Zm9yKDsocj1yLm5leHQpIT09bnVsbDspaSs9ZStyLmRhdGE7cmV0dXJuIGl9Y29uY2F0KGUpe2lmKHRoaXMubGVuZ3RoPT09MClyZXR1cm4gJHMuYWxsb2MoMCk7bGV0IHI9JHMuYWxsb2NVbnNhZmUoZT4+PjApLGk9dGhpcy5oZWFkLG49MDtmb3IoO2k7KW9uKHIsaS5kYXRhLG4pLG4rPWkuZGF0YS5sZW5ndGgsaT1pLm5leHQ7cmV0dXJuIHJ9Y29uc3VtZShlLHIpe2xldCBpPXRoaXMuaGVhZC5kYXRhO2lmKGU8aS5sZW5ndGgpe2xldCBuPWkuc2xpY2UoMCxlKTtyZXR1cm4gdGhpcy5oZWFkLmRhdGE9aS5zbGljZShlKSxufXJldHVybiBlPT09aS5sZW5ndGg/dGhpcy5zaGlmdCgpOnI/dGhpcy5fZ2V0U3RyaW5nKGUpOnRoaXMuX2dldEJ1ZmZlcihlKX1maXJzdCgpe3JldHVybiB0aGlzLmhlYWQuZGF0YX0qW2F3XSgpe2ZvcihsZXQgZT10aGlzLmhlYWQ7ZTtlPWUubmV4dCl5aWVsZCBlLmRhdGE7fV9nZXRTdHJpbmcoZSl7bGV0IHI9XCJcIixpPXRoaXMuaGVhZCxuPTA7ZG97bGV0IG89aS5kYXRhO2lmKGU+by5sZW5ndGgpcis9byxlLT1vLmxlbmd0aDtlbHNlIHtlPT09by5sZW5ndGg/KHIrPW8sKytuLGkubmV4dD90aGlzLmhlYWQ9aS5uZXh0OnRoaXMuaGVhZD10aGlzLnRhaWw9bnVsbCk6KHIrPWNjKG8sMCxlKSx0aGlzLmhlYWQ9aSxpLmRhdGE9Y2MobyxlKSk7YnJlYWt9KytuO313aGlsZSgoaT1pLm5leHQpIT09bnVsbCk7cmV0dXJuIHRoaXMubGVuZ3RoLT1uLHJ9X2dldEJ1ZmZlcihlKXtsZXQgcj0kcy5hbGxvY1Vuc2FmZShlKSxpPWUsbj10aGlzLmhlYWQsbz0wO2Rve2xldCBzPW4uZGF0YTtpZihlPnMubGVuZ3RoKW9uKHIscyxpLWUpLGUtPXMubGVuZ3RoO2Vsc2Uge2U9PT1zLmxlbmd0aD8ob24ocixzLGktZSksKytvLG4ubmV4dD90aGlzLmhlYWQ9bi5uZXh0OnRoaXMuaGVhZD10aGlzLnRhaWw9bnVsbCk6KG9uKHIsbmV3IGx3KHMuYnVmZmVyLHMuYnl0ZU9mZnNldCxlKSxpLWUpLHRoaXMuaGVhZD1uLG4uZGF0YT1zLnNsaWNlKGUpKTticmVha30rK287fXdoaWxlKChuPW4ubmV4dCkhPT1udWxsKTtyZXR1cm4gdGhpcy5sZW5ndGgtPW8scn1bU3ltYm9sLmZvcihcIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tXCIpXShlLHIpe3JldHVybiB1dyh0aGlzLHsuLi5yLGRlcHRoOjAsY3VzdG9tSW5zcGVjdDohMX0pfX07fSk7dmFyIGFuPU0oKGQyLGdjKT0+e18oKTt2KCk7bSgpO3ZhcntNYXRoRmxvb3I6ZncsTnVtYmVySXNJbnRlZ2VyOmN3fT1jZSgpLHtFUlJfSU5WQUxJRF9BUkdfVkFMVUU6aHd9PUFlKCkuY29kZXM7ZnVuY3Rpb24gZHcodCxlLHIpe3JldHVybiB0LmhpZ2hXYXRlck1hcmshPW51bGw/dC5oaWdoV2F0ZXJNYXJrOmU/dFtyXTpudWxsfWZ1bmN0aW9uIHBjKHQpe3JldHVybiB0PzE2OjE2KjEwMjR9ZnVuY3Rpb24gcHcodCxlLHIsaSl7bGV0IG49ZHcoZSxpLHIpO2lmKG4hPW51bGwpe2lmKCFjdyhuKXx8bjwwKXtsZXQgbz1pP2BvcHRpb25zLiR7cn1gOlwib3B0aW9ucy5oaWdoV2F0ZXJNYXJrXCI7dGhyb3cgbmV3IGh3KG8sbil9cmV0dXJuIGZ3KG4pfXJldHVybiBwYyh0Lm9iamVjdE1vZGUpfWdjLmV4cG9ydHM9e2dldEhpZ2hXYXRlck1hcms6cHcsZ2V0RGVmYXVsdEhpZ2hXYXRlck1hcms6cGN9O30pO2Z1bmN0aW9uIHdjKHQpe3ZhciBlPXQubGVuZ3RoO2lmKGUlND4wKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDRcIik7dmFyIHI9dC5pbmRleE9mKFwiPVwiKTtyZXR1cm4gcj09PS0xJiYocj1lKSxbcixyPT09ZT8wOjQtciU0XX1mdW5jdGlvbiBndyh0LGUscil7Zm9yKHZhciBpLG4sbz1bXSxzPWU7czxyO3MrPTMpaT0odFtzXTw8MTYmMTY3MTE2ODApKyh0W3MrMV08PDgmNjUyODApKygyNTUmdFtzKzJdKSxvLnB1c2goJGVbKG49aSk+PjE4JjYzXSskZVtuPj4xMiY2M10rJGVbbj4+NiY2M10rJGVbNjMmbl0pO3JldHVybiBvLmpvaW4oXCJcIil9ZnVuY3Rpb24gRXQodCl7aWYodD4yMTQ3NDgzNjQ3KXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgXCInK3QrJ1wiIGlzIGludmFsaWQgZm9yIG9wdGlvbiBcInNpemVcIicpO3ZhciBlPW5ldyBVaW50OEFycmF5KHQpO3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YoZSxPLnByb3RvdHlwZSksZX1mdW5jdGlvbiBPKHQsZSxyKXtpZih0eXBlb2YgdD09XCJudW1iZXJcIil7aWYodHlwZW9mIGU9PVwic3RyaW5nXCIpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwic3RyaW5nXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtyZXR1cm4gS3ModCl9cmV0dXJuIENjKHQsZSxyKX1mdW5jdGlvbiBDYyh0LGUscil7aWYodHlwZW9mIHQ9PVwic3RyaW5nXCIpcmV0dXJuIGZ1bmN0aW9uKG8scyl7aWYodHlwZW9mIHM9PVwic3RyaW5nXCImJnMhPT1cIlwifHwocz1cInV0ZjhcIiksIU8uaXNFbmNvZGluZyhzKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrcyk7dmFyIGE9MHxQYyhvLHMpLGw9RXQoYSksYz1sLndyaXRlKG8scyk7cmV0dXJuIGMhPT1hJiYobD1sLnNsaWNlKDAsYykpLGx9KHQsZSk7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KHQpKXJldHVybiBIcyh0KTtpZih0PT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSBcIit0eXBlb2YgdCk7aWYoU3QodCxBcnJheUJ1ZmZlcil8fHQmJlN0KHQuYnVmZmVyLEFycmF5QnVmZmVyKXx8dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyPFwidVwiJiYoU3QodCxTaGFyZWRBcnJheUJ1ZmZlcil8fHQmJlN0KHQuYnVmZmVyLFNoYXJlZEFycmF5QnVmZmVyKSkpcmV0dXJuIG1jKHQsZSxyKTtpZih0eXBlb2YgdD09XCJudW1iZXJcIil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO3ZhciBpPXQudmFsdWVPZiYmdC52YWx1ZU9mKCk7aWYoaSE9bnVsbCYmaSE9PXQpcmV0dXJuIE8uZnJvbShpLGUscik7dmFyIG49ZnVuY3Rpb24obyl7aWYoTy5pc0J1ZmZlcihvKSl7dmFyIHM9MHxZcyhvLmxlbmd0aCksYT1FdChzKTtyZXR1cm4gYS5sZW5ndGg9PT0wfHxvLmNvcHkoYSwwLDAscyksYX1pZihvLmxlbmd0aCE9PXZvaWQgMClyZXR1cm4gdHlwZW9mIG8ubGVuZ3RoIT1cIm51bWJlclwifHxKcyhvLmxlbmd0aCk/RXQoMCk6SHMobyk7aWYoby50eXBlPT09XCJCdWZmZXJcIiYmQXJyYXkuaXNBcnJheShvLmRhdGEpKXJldHVybiBIcyhvLmRhdGEpfSh0KTtpZihuKXJldHVybiBuO2lmKHR5cGVvZiBTeW1ib2w8XCJ1XCImJlN5bWJvbC50b1ByaW1pdGl2ZSE9bnVsbCYmdHlwZW9mIHRbU3ltYm9sLnRvUHJpbWl0aXZlXT09XCJmdW5jdGlvblwiKXJldHVybiBPLmZyb20odFtTeW1ib2wudG9QcmltaXRpdmVdKFwic3RyaW5nXCIpLGUscik7dGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlIFwiK3R5cGVvZiB0KX1mdW5jdGlvbiBCYyh0KXtpZih0eXBlb2YgdCE9XCJudW1iZXJcIil0aHJvdyBuZXcgVHlwZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyJyk7aWYodDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgXCInK3QrJ1wiIGlzIGludmFsaWQgZm9yIG9wdGlvbiBcInNpemVcIicpfWZ1bmN0aW9uIEtzKHQpe3JldHVybiBCYyh0KSxFdCh0PDA/MDowfFlzKHQpKX1mdW5jdGlvbiBIcyh0KXtmb3IodmFyIGU9dC5sZW5ndGg8MD8wOjB8WXModC5sZW5ndGgpLHI9RXQoZSksaT0wO2k8ZTtpKz0xKXJbaV09MjU1JnRbaV07cmV0dXJuIHJ9ZnVuY3Rpb24gbWModCxlLHIpe2lmKGU8MHx8dC5ieXRlTGVuZ3RoPGUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wib2Zmc2V0XCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7aWYodC5ieXRlTGVuZ3RoPGUrKHJ8fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCdcImxlbmd0aFwiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO3ZhciBpO3JldHVybiBpPWU9PT12b2lkIDAmJnI9PT12b2lkIDA/bmV3IFVpbnQ4QXJyYXkodCk6cj09PXZvaWQgMD9uZXcgVWludDhBcnJheSh0LGUpOm5ldyBVaW50OEFycmF5KHQsZSxyKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoaSxPLnByb3RvdHlwZSksaX1mdW5jdGlvbiBZcyh0KXtpZih0Pj0yMTQ3NDgzNjQ3KXRocm93IG5ldyBSYW5nZUVycm9yKFwiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweFwiKzIxNDc0ODM2NDcgLnRvU3RyaW5nKDE2KStcIiBieXRlc1wiKTtyZXR1cm4gMHx0fWZ1bmN0aW9uIFBjKHQsZSl7aWYoTy5pc0J1ZmZlcih0KSlyZXR1cm4gdC5sZW5ndGg7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KHQpfHxTdCh0LEFycmF5QnVmZmVyKSlyZXR1cm4gdC5ieXRlTGVuZ3RoO2lmKHR5cGVvZiB0IT1cInN0cmluZ1wiKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInN0cmluZ1wiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIG9yIEFycmF5QnVmZmVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIHQpO3ZhciByPXQubGVuZ3RoLGk9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl09PT0hMDtpZighaSYmcj09PTApcmV0dXJuIDA7Zm9yKHZhciBuPSExOzspc3dpdGNoKGUpe2Nhc2VcImFzY2lpXCI6Y2FzZVwibGF0aW4xXCI6Y2FzZVwiYmluYXJ5XCI6cmV0dXJuIHI7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuIEdzKHQpLmxlbmd0aDtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4gMipyO2Nhc2VcImhleFwiOnJldHVybiByPj4+MTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4gTWModCkubGVuZ3RoO2RlZmF1bHQ6aWYobilyZXR1cm4gaT8tMTpHcyh0KS5sZW5ndGg7ZT0oXCJcIitlKS50b0xvd2VyQ2FzZSgpLG49ITA7fX1mdW5jdGlvbiBidyh0LGUscil7dmFyIGk9ITE7aWYoKGU9PT12b2lkIDB8fGU8MCkmJihlPTApLGU+dGhpcy5sZW5ndGh8fCgocj09PXZvaWQgMHx8cj50aGlzLmxlbmd0aCkmJihyPXRoaXMubGVuZ3RoKSxyPD0wKXx8KHI+Pj49MCk8PShlPj4+PTApKXJldHVybiBcIlwiO2Zvcih0fHwodD1cInV0ZjhcIik7Oylzd2l0Y2godCl7Y2FzZVwiaGV4XCI6cmV0dXJuIFR3KHRoaXMsZSxyKTtjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpyZXR1cm4gT2ModGhpcyxlLHIpO2Nhc2VcImFzY2lpXCI6cmV0dXJuIEF3KHRoaXMsZSxyKTtjYXNlXCJsYXRpbjFcIjpjYXNlXCJiaW5hcnlcIjpyZXR1cm4gSXcodGhpcyxlLHIpO2Nhc2VcImJhc2U2NFwiOnJldHVybiBTdyh0aGlzLGUscik7Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuIFJ3KHRoaXMsZSxyKTtkZWZhdWx0OmlmKGkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK3QpO3Q9KHQrXCJcIikudG9Mb3dlckNhc2UoKSxpPSEwO319ZnVuY3Rpb24gYXIodCxlLHIpe3ZhciBpPXRbZV07dFtlXT10W3JdLHRbcl09aTt9ZnVuY3Rpb24gdmModCxlLHIsaSxuKXtpZih0Lmxlbmd0aD09PTApcmV0dXJuIC0xO2lmKHR5cGVvZiByPT1cInN0cmluZ1wiPyhpPXIscj0wKTpyPjIxNDc0ODM2NDc/cj0yMTQ3NDgzNjQ3OnI8LTIxNDc0ODM2NDgmJihyPS0yMTQ3NDgzNjQ4KSxKcyhyPStyKSYmKHI9bj8wOnQubGVuZ3RoLTEpLHI8MCYmKHI9dC5sZW5ndGgrcikscj49dC5sZW5ndGgpe2lmKG4pcmV0dXJuIC0xO3I9dC5sZW5ndGgtMTt9ZWxzZSBpZihyPDApe2lmKCFuKXJldHVybiAtMTtyPTA7fWlmKHR5cGVvZiBlPT1cInN0cmluZ1wiJiYoZT1PLmZyb20oZSxpKSksTy5pc0J1ZmZlcihlKSlyZXR1cm4gZS5sZW5ndGg9PT0wPy0xOkVjKHQsZSxyLGksbik7aWYodHlwZW9mIGU9PVwibnVtYmVyXCIpcmV0dXJuIGUmPTI1NSx0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj09XCJmdW5jdGlvblwiP24/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHQsZSxyKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKHQsZSxyKTpFYyh0LFtlXSxyLGksbik7dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlclwiKX1mdW5jdGlvbiBFYyh0LGUscixpLG4pe3ZhciBvLHM9MSxhPXQubGVuZ3RoLGw9ZS5sZW5ndGg7aWYoaSE9PXZvaWQgMCYmKChpPVN0cmluZyhpKS50b0xvd2VyQ2FzZSgpKT09PVwidWNzMlwifHxpPT09XCJ1Y3MtMlwifHxpPT09XCJ1dGYxNmxlXCJ8fGk9PT1cInV0Zi0xNmxlXCIpKXtpZih0Lmxlbmd0aDwyfHxlLmxlbmd0aDwyKXJldHVybiAtMTtzPTIsYS89MixsLz0yLHIvPTI7fWZ1bmN0aW9uIGMoeSx3KXtyZXR1cm4gcz09PTE/eVt3XTp5LnJlYWRVSW50MTZCRSh3KnMpfWlmKG4pe3ZhciBoPS0xO2ZvcihvPXI7bzxhO28rKylpZihjKHQsbyk9PT1jKGUsaD09PS0xPzA6by1oKSl7aWYoaD09PS0xJiYoaD1vKSxvLWgrMT09PWwpcmV0dXJuIGgqc31lbHNlIGghPT0tMSYmKG8tPW8taCksaD0tMTt9ZWxzZSBmb3IocitsPmEmJihyPWEtbCksbz1yO28+PTA7by0tKXtmb3IodmFyIGQ9ITAsZz0wO2c8bDtnKyspaWYoYyh0LG8rZykhPT1jKGUsZykpe2Q9ITE7YnJlYWt9aWYoZClyZXR1cm4gb31yZXR1cm4gLTF9ZnVuY3Rpb24gd3codCxlLHIsaSl7cj1OdW1iZXIocil8fDA7dmFyIG49dC5sZW5ndGgtcjtpPyhpPU51bWJlcihpKSk+biYmKGk9bik6aT1uO3ZhciBvPWUubGVuZ3RoO2k+by8yJiYoaT1vLzIpO2Zvcih2YXIgcz0wO3M8aTsrK3Mpe3ZhciBhPXBhcnNlSW50KGUuc3Vic3RyKDIqcywyKSwxNik7aWYoSnMoYSkpcmV0dXJuIHM7dFtyK3NdPWE7fXJldHVybiBzfWZ1bmN0aW9uIF93KHQsZSxyLGkpe3JldHVybiBjbihHcyhlLHQubGVuZ3RoLXIpLHQscixpKX1mdW5jdGlvbiBrYyh0LGUscixpKXtyZXR1cm4gY24oZnVuY3Rpb24obil7Zm9yKHZhciBvPVtdLHM9MDtzPG4ubGVuZ3RoOysrcylvLnB1c2goMjU1Jm4uY2hhckNvZGVBdChzKSk7cmV0dXJuIG99KGUpLHQscixpKX1mdW5jdGlvbiBtdyh0LGUscixpKXtyZXR1cm4ga2ModCxlLHIsaSl9ZnVuY3Rpb24gdncodCxlLHIsaSl7cmV0dXJuIGNuKE1jKGUpLHQscixpKX1mdW5jdGlvbiBFdyh0LGUscixpKXtyZXR1cm4gY24oZnVuY3Rpb24obixvKXtmb3IodmFyIHMsYSxsLGM9W10saD0wO2g8bi5sZW5ndGgmJiEoKG8tPTIpPDApOysraClzPW4uY2hhckNvZGVBdChoKSxhPXM+PjgsbD1zJTI1NixjLnB1c2gobCksYy5wdXNoKGEpO3JldHVybiBjfShlLHQubGVuZ3RoLXIpLHQscixpKX1mdW5jdGlvbiBTdyh0LGUscil7cmV0dXJuIGU9PT0wJiZyPT09dC5sZW5ndGg/enMuZnJvbUJ5dGVBcnJheSh0KTp6cy5mcm9tQnl0ZUFycmF5KHQuc2xpY2UoZSxyKSl9ZnVuY3Rpb24gT2ModCxlLHIpe3I9TWF0aC5taW4odC5sZW5ndGgscik7Zm9yKHZhciBpPVtdLG49ZTtuPHI7KXt2YXIgbyxzLGEsbCxjPXRbbl0saD1udWxsLGQ9Yz4yMzk/NDpjPjIyMz8zOmM+MTkxPzI6MTtpZihuK2Q8PXIpc3dpdGNoKGQpe2Nhc2UgMTpjPDEyOCYmKGg9Yyk7YnJlYWs7Y2FzZSAyOigxOTImKG89dFtuKzFdKSk9PTEyOCYmKGw9KDMxJmMpPDw2fDYzJm8pPjEyNyYmKGg9bCk7YnJlYWs7Y2FzZSAzOm89dFtuKzFdLHM9dFtuKzJdLCgxOTImbyk9PTEyOCYmKDE5MiZzKT09MTI4JiYobD0oMTUmYyk8PDEyfCg2MyZvKTw8Nnw2MyZzKT4yMDQ3JiYobDw1NTI5Nnx8bD41NzM0MykmJihoPWwpO2JyZWFrO2Nhc2UgNDpvPXRbbisxXSxzPXRbbisyXSxhPXRbbiszXSwoMTkyJm8pPT0xMjgmJigxOTImcyk9PTEyOCYmKDE5MiZhKT09MTI4JiYobD0oMTUmYyk8PDE4fCg2MyZvKTw8MTJ8KDYzJnMpPDw2fDYzJmEpPjY1NTM1JiZsPDExMTQxMTImJihoPWwpO31oPT09bnVsbD8oaD02NTUzMyxkPTEpOmg+NjU1MzUmJihoLT02NTUzNixpLnB1c2goaD4+PjEwJjEwMjN8NTUyOTYpLGg9NTYzMjB8MTAyMyZoKSxpLnB1c2goaCksbis9ZDt9cmV0dXJuIGZ1bmN0aW9uKGcpe3ZhciB5PWcubGVuZ3RoO2lmKHk8PTQwOTYpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGcpO2Zvcih2YXIgdz1cIlwiLFM9MDtTPHk7KXcrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGcuc2xpY2UoUyxTKz00MDk2KSk7cmV0dXJuIHd9KGkpfWZ1bmN0aW9uIEF3KHQsZSxyKXt2YXIgaT1cIlwiO3I9TWF0aC5taW4odC5sZW5ndGgscik7Zm9yKHZhciBuPWU7bjxyOysrbilpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZ0W25dKTtyZXR1cm4gaX1mdW5jdGlvbiBJdyh0LGUscil7dmFyIGk9XCJcIjtyPU1hdGgubWluKHQubGVuZ3RoLHIpO2Zvcih2YXIgbj1lO248cjsrK24paSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0W25dKTtyZXR1cm4gaX1mdW5jdGlvbiBUdyh0LGUscil7dmFyIGk9dC5sZW5ndGg7KCFlfHxlPDApJiYoZT0wKSwoIXJ8fHI8MHx8cj5pKSYmKHI9aSk7Zm9yKHZhciBuPVwiXCIsbz1lO288cjsrK28pbis9QndbdFtvXV07cmV0dXJuIG59ZnVuY3Rpb24gUncodCxlLHIpe2Zvcih2YXIgaT10LnNsaWNlKGUsciksbj1cIlwiLG89MDtvPGkubGVuZ3RoO28rPTIpbis9U3RyaW5nLmZyb21DaGFyQ29kZShpW29dKzI1NippW28rMV0pO3JldHVybiBufWZ1bmN0aW9uIHdlKHQsZSxyKXtpZih0JTEhPTB8fHQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIm9mZnNldCBpcyBub3QgdWludFwiKTtpZih0K2U+cil0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGhcIil9ZnVuY3Rpb24gUGUodCxlLHIsaSxuLG8pe2lmKCFPLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKGU+bnx8ZTxvKXRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKHIraT50Lmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkluZGV4IG91dCBvZiByYW5nZVwiKX1mdW5jdGlvbiB4Yyh0LGUscixpLG4sbyl7aWYocitpPnQubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW5kZXggb3V0IG9mIHJhbmdlXCIpO2lmKHI8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkluZGV4IG91dCBvZiByYW5nZVwiKX1mdW5jdGlvbiBTYyh0LGUscixpLG4pe3JldHVybiBlPStlLHI+Pj49MCxufHx4Yyh0LDAsciw0KSxEci53cml0ZSh0LGUscixpLDIzLDQpLHIrNH1mdW5jdGlvbiBBYyh0LGUscixpLG4pe3JldHVybiBlPStlLHI+Pj49MCxufHx4Yyh0LDAsciw4KSxEci53cml0ZSh0LGUscixpLDUyLDgpLHIrOH1mdW5jdGlvbiBHcyh0LGUpe3ZhciByO2U9ZXx8MS8wO2Zvcih2YXIgaT10Lmxlbmd0aCxuPW51bGwsbz1bXSxzPTA7czxpOysrcyl7aWYoKHI9dC5jaGFyQ29kZUF0KHMpKT41NTI5NSYmcjw1NzM0NCl7aWYoIW4pe2lmKHI+NTYzMTkpeyhlLT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihzKzE9PT1pKXsoZS09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9bj1yO2NvbnRpbnVlfWlmKHI8NTYzMjApeyhlLT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KSxuPXI7Y29udGludWV9cj02NTUzNisobi01NTI5Njw8MTB8ci01NjMyMCk7fWVsc2UgbiYmKGUtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2lmKG49bnVsbCxyPDEyOCl7aWYoKGUtPTEpPDApYnJlYWs7by5wdXNoKHIpO31lbHNlIGlmKHI8MjA0OCl7aWYoKGUtPTIpPDApYnJlYWs7by5wdXNoKHI+PjZ8MTkyLDYzJnJ8MTI4KTt9ZWxzZSBpZihyPDY1NTM2KXtpZigoZS09Myk8MClicmVhaztvLnB1c2gocj4+MTJ8MjI0LHI+PjYmNjN8MTI4LDYzJnJ8MTI4KTt9ZWxzZSB7aWYoIShyPDExMTQxMTIpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY29kZSBwb2ludFwiKTtpZigoZS09NCk8MClicmVhaztvLnB1c2gocj4+MTh8MjQwLHI+PjEyJjYzfDEyOCxyPj42JjYzfDEyOCw2MyZyfDEyOCk7fX1yZXR1cm4gb31mdW5jdGlvbiBNYyh0KXtyZXR1cm4genMudG9CeXRlQXJyYXkoZnVuY3Rpb24oZSl7aWYoKGU9KGU9ZS5zcGxpdChcIj1cIilbMF0pLnRyaW0oKS5yZXBsYWNlKEN3LFwiXCIpKS5sZW5ndGg8MilyZXR1cm4gXCJcIjtmb3IoO2UubGVuZ3RoJTQhPTA7KWUrPVwiPVwiO3JldHVybiBlfSh0KSl9ZnVuY3Rpb24gY24odCxlLHIsaSl7Zm9yKHZhciBuPTA7bjxpJiYhKG4rcj49ZS5sZW5ndGh8fG4+PXQubGVuZ3RoKTsrK24pZVtuK3JdPXRbbl07cmV0dXJuIG59ZnVuY3Rpb24gU3QodCxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIGV8fHQhPW51bGwmJnQuY29uc3RydWN0b3IhPW51bGwmJnQuY29uc3RydWN0b3IubmFtZSE9bnVsbCYmdC5jb25zdHJ1Y3Rvci5uYW1lPT09ZS5uYW1lfWZ1bmN0aW9uIEpzKHQpe3JldHVybiB0IT10fWZ1bmN0aW9uIEljKHQsZSl7Zm9yKHZhciByIGluIHQpZVtyXT10W3JdO31mdW5jdGlvbiBscih0LGUscil7cmV0dXJuIGl0KHQsZSxyKX1mdW5jdGlvbiBwaSh0KXt2YXIgZTtzd2l0Y2godGhpcy5lbmNvZGluZz1mdW5jdGlvbihyKXt2YXIgaT1mdW5jdGlvbihuKXtpZighbilyZXR1cm4gXCJ1dGY4XCI7Zm9yKHZhciBvOzspc3dpdGNoKG4pe2Nhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOnJldHVybiBcInV0ZjhcIjtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4gXCJ1dGYxNmxlXCI7Y2FzZVwibGF0aW4xXCI6Y2FzZVwiYmluYXJ5XCI6cmV0dXJuIFwibGF0aW4xXCI7Y2FzZVwiYmFzZTY0XCI6Y2FzZVwiYXNjaWlcIjpjYXNlXCJoZXhcIjpyZXR1cm4gbjtkZWZhdWx0OmlmKG8pcmV0dXJuO249KFwiXCIrbikudG9Mb3dlckNhc2UoKSxvPSEwO319KHIpO2lmKHR5cGVvZiBpIT1cInN0cmluZ1wiJiYoUXMuaXNFbmNvZGluZz09PVRjfHwhVGMocikpKXRocm93IG5ldyBFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK3IpO3JldHVybiBpfHxyfSh0KSx0aGlzLmVuY29kaW5nKXtjYXNlXCJ1dGYxNmxlXCI6dGhpcy50ZXh0PU93LHRoaXMuZW5kPXh3LGU9NDticmVhaztjYXNlXCJ1dGY4XCI6dGhpcy5maWxsTGFzdD1rdyxlPTQ7YnJlYWs7Y2FzZVwiYmFzZTY0XCI6dGhpcy50ZXh0PU13LHRoaXMuZW5kPUx3LGU9MzticmVhaztkZWZhdWx0OnJldHVybiB0aGlzLndyaXRlPVV3LHRoaXMuZW5kPU53LHZvaWQgMH10aGlzLmxhc3ROZWVkPTAsdGhpcy5sYXN0VG90YWw9MCx0aGlzLmxhc3RDaGFyPVFzLmFsbG9jVW5zYWZlKGUpO31mdW5jdGlvbiBWcyh0KXtyZXR1cm4gdDw9MTI3PzA6dD4+NT09Nj8yOnQ+PjQ9PTE0PzM6dD4+Mz09MzA/NDp0Pj42PT0yPy0xOi0yfWZ1bmN0aW9uIGt3KHQpe3ZhciBlPXRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQscj1mdW5jdGlvbihpLG4sbyl7aWYoKDE5MiZuWzBdKSE9MTI4KXJldHVybiBpLmxhc3ROZWVkPTAsXCJcXHVGRkZEXCI7aWYoaS5sYXN0TmVlZD4xJiZuLmxlbmd0aD4xKXtpZigoMTkyJm5bMV0pIT0xMjgpcmV0dXJuIGkubGFzdE5lZWQ9MSxcIlxcdUZGRkRcIjtpZihpLmxhc3ROZWVkPjImJm4ubGVuZ3RoPjImJigxOTImblsyXSkhPTEyOClyZXR1cm4gaS5sYXN0TmVlZD0yLFwiXFx1RkZGRFwifX0odGhpcyx0KTtyZXR1cm4gciE9PXZvaWQgMD9yOnRoaXMubGFzdE5lZWQ8PXQubGVuZ3RoPyh0LmNvcHkodGhpcy5sYXN0Q2hhcixlLDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpKToodC5jb3B5KHRoaXMubGFzdENoYXIsZSwwLHQubGVuZ3RoKSx0aGlzLmxhc3ROZWVkLT10Lmxlbmd0aCx2b2lkIDApfWZ1bmN0aW9uIE93KHQsZSl7aWYoKHQubGVuZ3RoLWUpJTI9PTApe3ZhciByPXQudG9TdHJpbmcoXCJ1dGYxNmxlXCIsZSk7aWYocil7dmFyIGk9ci5jaGFyQ29kZUF0KHIubGVuZ3RoLTEpO2lmKGk+PTU1Mjk2JiZpPD01NjMxOSlyZXR1cm4gdGhpcy5sYXN0TmVlZD0yLHRoaXMubGFzdFRvdGFsPTQsdGhpcy5sYXN0Q2hhclswXT10W3QubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09dFt0Lmxlbmd0aC0xXSxyLnNsaWNlKDAsLTEpfXJldHVybiByfXJldHVybiB0aGlzLmxhc3ROZWVkPTEsdGhpcy5sYXN0VG90YWw9Mix0aGlzLmxhc3RDaGFyWzBdPXRbdC5sZW5ndGgtMV0sdC50b1N0cmluZyhcInV0ZjE2bGVcIixlLHQubGVuZ3RoLTEpfWZ1bmN0aW9uIHh3KHQpe3ZhciBlPXQmJnQubGVuZ3RoP3RoaXMud3JpdGUodCk6XCJcIjtpZih0aGlzLmxhc3ROZWVkKXt2YXIgcj10aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkO3JldHVybiBlK3RoaXMubGFzdENoYXIudG9TdHJpbmcoXCJ1dGYxNmxlXCIsMCxyKX1yZXR1cm4gZX1mdW5jdGlvbiBNdyh0LGUpe3ZhciByPSh0Lmxlbmd0aC1lKSUzO3JldHVybiByPT09MD90LnRvU3RyaW5nKFwiYmFzZTY0XCIsZSk6KHRoaXMubGFzdE5lZWQ9My1yLHRoaXMubGFzdFRvdGFsPTMscj09PTE/dGhpcy5sYXN0Q2hhclswXT10W3QubGVuZ3RoLTFdOih0aGlzLmxhc3RDaGFyWzBdPXRbdC5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT10W3QubGVuZ3RoLTFdKSx0LnRvU3RyaW5nKFwiYmFzZTY0XCIsZSx0Lmxlbmd0aC1yKSl9ZnVuY3Rpb24gTHcodCl7dmFyIGU9dCYmdC5sZW5ndGg/dGhpcy53cml0ZSh0KTpcIlwiO3JldHVybiB0aGlzLmxhc3ROZWVkP2UrdGhpcy5sYXN0Q2hhci50b1N0cmluZyhcImJhc2U2NFwiLDAsMy10aGlzLmxhc3ROZWVkKTplfWZ1bmN0aW9uIFV3KHQpe3JldHVybiB0LnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcpfWZ1bmN0aW9uIE53KHQpe3JldHVybiB0JiZ0Lmxlbmd0aD90aGlzLndyaXRlKHQpOlwiXCJ9dmFyIFJjLCRlLE9lLHljLGxuLG9yLGJjLHl3LEF0LHpzLERyLF9jLEN3LEJ3LHVuLGZuLGl0LFB3LHVyLFFzLFRjLFhzPV9lKCgpPT57XygpO3YoKTttKCk7Zm9yKFJjPXtieXRlTGVuZ3RoOmZ1bmN0aW9uKHQpe3ZhciBlPXdjKHQpLHI9ZVswXSxpPWVbMV07cmV0dXJuIDMqKHIraSkvNC1pfSx0b0J5dGVBcnJheTpmdW5jdGlvbih0KXt2YXIgZSxyLGk9d2ModCksbj1pWzBdLG89aVsxXSxzPW5ldyB5YyhmdW5jdGlvbihjLGgsZCl7cmV0dXJuIDMqKGgrZCkvNC1kfSgwLG4sbykpLGE9MCxsPW8+MD9uLTQ6bjtmb3Iocj0wO3I8bDtyKz00KWU9T2VbdC5jaGFyQ29kZUF0KHIpXTw8MTh8T2VbdC5jaGFyQ29kZUF0KHIrMSldPDwxMnxPZVt0LmNoYXJDb2RlQXQocisyKV08PDZ8T2VbdC5jaGFyQ29kZUF0KHIrMyldLHNbYSsrXT1lPj4xNiYyNTUsc1thKytdPWU+PjgmMjU1LHNbYSsrXT0yNTUmZTtyZXR1cm4gbz09PTImJihlPU9lW3QuY2hhckNvZGVBdChyKV08PDJ8T2VbdC5jaGFyQ29kZUF0KHIrMSldPj40LHNbYSsrXT0yNTUmZSksbz09PTEmJihlPU9lW3QuY2hhckNvZGVBdChyKV08PDEwfE9lW3QuY2hhckNvZGVBdChyKzEpXTw8NHxPZVt0LmNoYXJDb2RlQXQocisyKV0+PjIsc1thKytdPWU+PjgmMjU1LHNbYSsrXT0yNTUmZSksc30sZnJvbUJ5dGVBcnJheTpmdW5jdGlvbih0KXtmb3IodmFyIGUscj10Lmxlbmd0aCxpPXIlMyxuPVtdLG89MCxzPXItaTtvPHM7bys9MTYzODMpbi5wdXNoKGd3KHQsbyxvKzE2MzgzPnM/czpvKzE2MzgzKSk7cmV0dXJuIGk9PT0xPyhlPXRbci0xXSxuLnB1c2goJGVbZT4+Ml0rJGVbZTw8NCY2M10rXCI9PVwiKSk6aT09PTImJihlPSh0W3ItMl08PDgpK3Rbci0xXSxuLnB1c2goJGVbZT4+MTBdKyRlW2U+PjQmNjNdKyRlW2U8PDImNjNdK1wiPVwiKSksbi5qb2luKFwiXCIpfX0sJGU9W10sT2U9W10seWM9dHlwZW9mIFVpbnQ4QXJyYXk8XCJ1XCI/VWludDhBcnJheTpBcnJheSxsbj1cIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky9cIixvcj0wLGJjPWxuLmxlbmd0aDtvcjxiYzsrK29yKSRlW29yXT1sbltvcl0sT2VbbG4uY2hhckNvZGVBdChvcildPW9yO09lW1wiLVwiLmNoYXJDb2RlQXQoMCldPTYyLE9lW1wiX1wiLmNoYXJDb2RlQXQoMCldPTYzO3l3PXtyZWFkOmZ1bmN0aW9uKHQsZSxyLGksbil7dmFyIG8scyxhPTgqbi1pLTEsbD0oMTw8YSktMSxjPWw+PjEsaD0tNyxkPXI/bi0xOjAsZz1yPy0xOjEseT10W2UrZF07Zm9yKGQrPWcsbz15JigxPDwtaCktMSx5Pj49LWgsaCs9YTtoPjA7bz0yNTYqbyt0W2UrZF0sZCs9ZyxoLT04KTtmb3Iocz1vJigxPDwtaCktMSxvPj49LWgsaCs9aTtoPjA7cz0yNTYqcyt0W2UrZF0sZCs9ZyxoLT04KTtpZihvPT09MClvPTEtYztlbHNlIHtpZihvPT09bClyZXR1cm4gcz9OYU46MS8wKih5Py0xOjEpO3MrPU1hdGgucG93KDIsaSksby09Yzt9cmV0dXJuICh5Py0xOjEpKnMqTWF0aC5wb3coMixvLWkpfSx3cml0ZTpmdW5jdGlvbih0LGUscixpLG4sbyl7dmFyIHMsYSxsLGM9OCpvLW4tMSxoPSgxPDxjKS0xLGQ9aD4+MSxnPW49PT0yMz9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAseT1pPzA6by0xLHc9aT8xOi0xLFM9ZTwwfHxlPT09MCYmMS9lPDA/MTowO2ZvcihlPU1hdGguYWJzKGUpLGlzTmFOKGUpfHxlPT09MS8wPyhhPWlzTmFOKGUpPzE6MCxzPWgpOihzPU1hdGguZmxvb3IoTWF0aC5sb2coZSkvTWF0aC5MTjIpLGUqKGw9TWF0aC5wb3coMiwtcykpPDEmJihzLS0sbCo9MiksKGUrPXMrZD49MT9nL2w6ZypNYXRoLnBvdygyLDEtZCkpKmw+PTImJihzKyssbC89MikscytkPj1oPyhhPTAscz1oKTpzK2Q+PTE/KGE9KGUqbC0xKSpNYXRoLnBvdygyLG4pLHMrPWQpOihhPWUqTWF0aC5wb3coMixkLTEpKk1hdGgucG93KDIsbikscz0wKSk7bj49ODt0W3IreV09MjU1JmEseSs9dyxhLz0yNTYsbi09OCk7Zm9yKHM9czw8bnxhLGMrPW47Yz4wO3Rbcit5XT0yNTUmcyx5Kz13LHMvPTI1NixjLT04KTt0W3IreS13XXw9MTI4KlM7fX0sQXQ9e30senM9UmMsRHI9eXcsX2M9dHlwZW9mIFN5bWJvbD09XCJmdW5jdGlvblwiJiZ0eXBlb2YgU3ltYm9sLmZvcj09XCJmdW5jdGlvblwiP1N5bWJvbC5mb3IoXCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbVwiKTpudWxsO0F0LkJ1ZmZlcj1PLEF0LlNsb3dCdWZmZXI9ZnVuY3Rpb24odCl7cmV0dXJuICt0IT10JiYodD0wKSxPLmFsbG9jKCt0KX0sQXQuSU5TUEVDVF9NQVhfQllURVM9NTA7QXQua01heExlbmd0aD0yMTQ3NDgzNjQ3LE8uVFlQRURfQVJSQVlfU1VQUE9SVD1mdW5jdGlvbigpe3RyeXt2YXIgdD1uZXcgVWludDhBcnJheSgxKSxlPXtmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKGUsVWludDhBcnJheS5wcm90b3R5cGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpLHQuZm9vKCk9PT00Mn1jYXRjaHtyZXR1cm4gITF9fSgpLE8uVFlQRURfQVJSQVlfU1VQUE9SVHx8dHlwZW9mIGNvbnNvbGU+XCJ1XCJ8fHR5cGVvZiBjb25zb2xlLmVycm9yIT1cImZ1bmN0aW9uXCJ8fGNvbnNvbGUuZXJyb3IoXCJUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC5cIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8ucHJvdG90eXBlLFwicGFyZW50XCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoTy5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5idWZmZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8ucHJvdG90eXBlLFwib2Zmc2V0XCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoTy5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5ieXRlT2Zmc2V0fX0pLE8ucG9vbFNpemU9ODE5MixPLmZyb209ZnVuY3Rpb24odCxlLHIpe3JldHVybiBDYyh0LGUscil9LE9iamVjdC5zZXRQcm90b3R5cGVPZihPLnByb3RvdHlwZSxVaW50OEFycmF5LnByb3RvdHlwZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKE8sVWludDhBcnJheSksTy5hbGxvYz1mdW5jdGlvbih0LGUscil7cmV0dXJuIGZ1bmN0aW9uKGksbixvKXtyZXR1cm4gQmMoaSksaTw9MD9FdChpKTpuIT09dm9pZCAwP3R5cGVvZiBvPT1cInN0cmluZ1wiP0V0KGkpLmZpbGwobixvKTpFdChpKS5maWxsKG4pOkV0KGkpfSh0LGUscil9LE8uYWxsb2NVbnNhZmU9ZnVuY3Rpb24odCl7cmV0dXJuIEtzKHQpfSxPLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbih0KXtyZXR1cm4gS3ModCl9LE8uaXNCdWZmZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQhPW51bGwmJnQuX2lzQnVmZmVyPT09ITAmJnQhPT1PLnByb3RvdHlwZX0sTy5jb21wYXJlPWZ1bmN0aW9uKHQsZSl7aWYoU3QodCxVaW50OEFycmF5KSYmKHQ9Ty5mcm9tKHQsdC5vZmZzZXQsdC5ieXRlTGVuZ3RoKSksU3QoZSxVaW50OEFycmF5KSYmKGU9Ty5mcm9tKGUsZS5vZmZzZXQsZS5ieXRlTGVuZ3RoKSksIU8uaXNCdWZmZXIodCl8fCFPLmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImJ1ZjFcIiwgXCJidWYyXCIgYXJndW1lbnRzIG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtpZih0PT09ZSlyZXR1cm4gMDtmb3IodmFyIHI9dC5sZW5ndGgsaT1lLmxlbmd0aCxuPTAsbz1NYXRoLm1pbihyLGkpO248bzsrK24paWYodFtuXSE9PWVbbl0pe3I9dFtuXSxpPWVbbl07YnJlYWt9cmV0dXJuIHI8aT8tMTppPHI/MTowfSxPLmlzRW5jb2Rpbmc9ZnVuY3Rpb24odCl7c3dpdGNoKFN0cmluZyh0KS50b0xvd2VyQ2FzZSgpKXtjYXNlXCJoZXhcIjpjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpjYXNlXCJhc2NpaVwiOmNhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOmNhc2VcImJhc2U2NFwiOmNhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiAhMDtkZWZhdWx0OnJldHVybiAhMX19LE8uY29uY2F0PWZ1bmN0aW9uKHQsZSl7aWYoIUFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYodC5sZW5ndGg9PT0wKXJldHVybiBPLmFsbG9jKDApO3ZhciByO2lmKGU9PT12b2lkIDApZm9yKGU9MCxyPTA7cjx0Lmxlbmd0aDsrK3IpZSs9dFtyXS5sZW5ndGg7dmFyIGk9Ty5hbGxvY1Vuc2FmZShlKSxuPTA7Zm9yKHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIG89dFtyXTtpZihTdChvLFVpbnQ4QXJyYXkpJiYobz1PLmZyb20obykpLCFPLmlzQnVmZmVyKG8pKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO28uY29weShpLG4pLG4rPW8ubGVuZ3RoO31yZXR1cm4gaX0sTy5ieXRlTGVuZ3RoPVBjLE8ucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCxPLnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxlbmd0aDtpZih0JTIhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0c1wiKTtmb3IodmFyIGU9MDtlPHQ7ZSs9Milhcih0aGlzLGUsZSsxKTtyZXR1cm4gdGhpc30sTy5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sZW5ndGg7aWYodCU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHNcIik7Zm9yKHZhciBlPTA7ZTx0O2UrPTQpYXIodGhpcyxlLGUrMyksYXIodGhpcyxlKzEsZSsyKTtyZXR1cm4gdGhpc30sTy5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sZW5ndGg7aWYodCU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHNcIik7Zm9yKHZhciBlPTA7ZTx0O2UrPTgpYXIodGhpcyxlLGUrNyksYXIodGhpcyxlKzEsZSs2KSxhcih0aGlzLGUrMixlKzUpLGFyKHRoaXMsZSszLGUrNCk7cmV0dXJuIHRoaXN9LE8ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sZW5ndGg7cmV0dXJuIHQ9PT0wP1wiXCI6YXJndW1lbnRzLmxlbmd0aD09PTA/T2ModGhpcywwLHQpOmJ3LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sTy5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmc9Ty5wcm90b3R5cGUudG9TdHJpbmcsTy5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe2lmKCFPLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyXCIpO3JldHVybiB0aGlzPT09dHx8Ty5jb21wYXJlKHRoaXMsdCk9PT0wfSxPLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIHQ9XCJcIixlPUF0LklOU1BFQ1RfTUFYX0JZVEVTO3JldHVybiB0PXRoaXMudG9TdHJpbmcoXCJoZXhcIiwwLGUpLnJlcGxhY2UoLyguezJ9KS9nLFwiJDEgXCIpLnRyaW0oKSx0aGlzLmxlbmd0aD5lJiYodCs9XCIgLi4uIFwiKSxcIjxCdWZmZXIgXCIrdCtcIj5cIn0sX2MmJihPLnByb3RvdHlwZVtfY109Ty5wcm90b3R5cGUuaW5zcGVjdCksTy5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbih0LGUscixpLG4pe2lmKFN0KHQsVWludDhBcnJheSkmJih0PU8uZnJvbSh0LHQub2Zmc2V0LHQuYnl0ZUxlbmd0aCkpLCFPLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInRhcmdldFwiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgdCk7aWYoZT09PXZvaWQgMCYmKGU9MCkscj09PXZvaWQgMCYmKHI9dD90Lmxlbmd0aDowKSxpPT09dm9pZCAwJiYoaT0wKSxuPT09dm9pZCAwJiYobj10aGlzLmxlbmd0aCksZTwwfHxyPnQubGVuZ3RofHxpPDB8fG4+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJvdXQgb2YgcmFuZ2UgaW5kZXhcIik7aWYoaT49biYmZT49cilyZXR1cm4gMDtpZihpPj1uKXJldHVybiAtMTtpZihlPj1yKXJldHVybiAxO2lmKHRoaXM9PT10KXJldHVybiAwO2Zvcih2YXIgbz0obj4+Pj0wKS0oaT4+Pj0wKSxzPShyPj4+PTApLShlPj4+PTApLGE9TWF0aC5taW4obyxzKSxsPXRoaXMuc2xpY2UoaSxuKSxjPXQuc2xpY2UoZSxyKSxoPTA7aDxhOysraClpZihsW2hdIT09Y1toXSl7bz1sW2hdLHM9Y1toXTticmVha31yZXR1cm4gbzxzPy0xOnM8bz8xOjB9LE8ucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5pbmRleE9mKHQsZSxyKSE9PS0xfSxPLnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdmModGhpcyx0LGUsciwhMCl9LE8ucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdmModGhpcyx0LGUsciwhMSl9LE8ucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHQsZSxyLGkpe2lmKGU9PT12b2lkIDApaT1cInV0ZjhcIixyPXRoaXMubGVuZ3RoLGU9MDtlbHNlIGlmKHI9PT12b2lkIDAmJnR5cGVvZiBlPT1cInN0cmluZ1wiKWk9ZSxyPXRoaXMubGVuZ3RoLGU9MDtlbHNlIHtpZighaXNGaW5pdGUoZSkpdGhyb3cgbmV3IEVycm9yKFwiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWRcIik7ZT4+Pj0wLGlzRmluaXRlKHIpPyhyPj4+PTAsaT09PXZvaWQgMCYmKGk9XCJ1dGY4XCIpKTooaT1yLHI9dm9pZCAwKTt9dmFyIG49dGhpcy5sZW5ndGgtZTtpZigocj09PXZvaWQgMHx8cj5uKSYmKHI9biksdC5sZW5ndGg+MCYmKHI8MHx8ZTwwKXx8ZT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzXCIpO2l8fChpPVwidXRmOFwiKTtmb3IodmFyIG89ITE7Oylzd2l0Y2goaSl7Y2FzZVwiaGV4XCI6cmV0dXJuIHd3KHRoaXMsdCxlLHIpO2Nhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOnJldHVybiBfdyh0aGlzLHQsZSxyKTtjYXNlXCJhc2NpaVwiOnJldHVybiBrYyh0aGlzLHQsZSxyKTtjYXNlXCJsYXRpbjFcIjpjYXNlXCJiaW5hcnlcIjpyZXR1cm4gbXcodGhpcyx0LGUscik7Y2FzZVwiYmFzZTY0XCI6cmV0dXJuIHZ3KHRoaXMsdCxlLHIpO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiBFdyh0aGlzLHQsZSxyKTtkZWZhdWx0OmlmKG8pdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK2kpO2k9KFwiXCIraSkudG9Mb3dlckNhc2UoKSxvPSEwO319LE8ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB7dHlwZTpcIkJ1ZmZlclwiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07Ty5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxlbmd0aDsodD1+fnQpPDA/KHQrPXIpPDAmJih0PTApOnQ+ciYmKHQ9ciksKGU9ZT09PXZvaWQgMD9yOn5+ZSk8MD8oZSs9cik8MCYmKGU9MCk6ZT5yJiYoZT1yKSxlPHQmJihlPXQpO3ZhciBpPXRoaXMuc3ViYXJyYXkodCxlKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKGksTy5wcm90b3R5cGUpLGl9LE8ucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24odCxlLHIpe3Q+Pj49MCxlPj4+PTAscnx8d2UodCxlLHRoaXMubGVuZ3RoKTtmb3IodmFyIGk9dGhpc1t0XSxuPTEsbz0wOysrbzxlJiYobio9MjU2KTspaSs9dGhpc1t0K29dKm47cmV0dXJuIGl9LE8ucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24odCxlLHIpe3Q+Pj49MCxlPj4+PTAscnx8d2UodCxlLHRoaXMubGVuZ3RoKTtmb3IodmFyIGk9dGhpc1t0Ky0tZV0sbj0xO2U+MCYmKG4qPTI1Nik7KWkrPXRoaXNbdCstLWVdKm47cmV0dXJuIGl9LE8ucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8d2UodCwxLHRoaXMubGVuZ3RoKSx0aGlzW3RdfSxPLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fHdlKHQsMix0aGlzLmxlbmd0aCksdGhpc1t0XXx0aGlzW3QrMV08PDh9LE8ucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8d2UodCwyLHRoaXMubGVuZ3RoKSx0aGlzW3RdPDw4fHRoaXNbdCsxXX0sTy5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHx3ZSh0LDQsdGhpcy5sZW5ndGgpLCh0aGlzW3RdfHRoaXNbdCsxXTw8OHx0aGlzW3QrMl08PDE2KSsxNjc3NzIxNip0aGlzW3QrM119LE8ucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8d2UodCw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW3RdKyh0aGlzW3QrMV08PDE2fHRoaXNbdCsyXTw8OHx0aGlzW3QrM10pfSxPLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24odCxlLHIpe3Q+Pj49MCxlPj4+PTAscnx8d2UodCxlLHRoaXMubGVuZ3RoKTtmb3IodmFyIGk9dGhpc1t0XSxuPTEsbz0wOysrbzxlJiYobio9MjU2KTspaSs9dGhpc1t0K29dKm47cmV0dXJuIGk+PShuKj0xMjgpJiYoaS09TWF0aC5wb3coMiw4KmUpKSxpfSxPLnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24odCxlLHIpe3Q+Pj49MCxlPj4+PTAscnx8d2UodCxlLHRoaXMubGVuZ3RoKTtmb3IodmFyIGk9ZSxuPTEsbz10aGlzW3QrLS1pXTtpPjAmJihuKj0yNTYpOylvKz10aGlzW3QrLS1pXSpuO3JldHVybiBvPj0obio9MTI4KSYmKG8tPU1hdGgucG93KDIsOCplKSksb30sTy5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fHdlKHQsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbdF0/LTEqKDI1NS10aGlzW3RdKzEpOnRoaXNbdF19LE8ucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKHQsZSl7dD4+Pj0wLGV8fHdlKHQsMix0aGlzLmxlbmd0aCk7dmFyIHI9dGhpc1t0XXx0aGlzW3QrMV08PDg7cmV0dXJuIDMyNzY4JnI/NDI5NDkwMTc2MHxyOnJ9LE8ucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uKHQsZSl7dD4+Pj0wLGV8fHdlKHQsMix0aGlzLmxlbmd0aCk7dmFyIHI9dGhpc1t0KzFdfHRoaXNbdF08PDg7cmV0dXJuIDMyNzY4JnI/NDI5NDkwMTc2MHxyOnJ9LE8ucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHx3ZSh0LDQsdGhpcy5sZW5ndGgpLHRoaXNbdF18dGhpc1t0KzFdPDw4fHRoaXNbdCsyXTw8MTZ8dGhpc1t0KzNdPDwyNH0sTy5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fHdlKHQsNCx0aGlzLmxlbmd0aCksdGhpc1t0XTw8MjR8dGhpc1t0KzFdPDwxNnx0aGlzW3QrMl08PDh8dGhpc1t0KzNdfSxPLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8d2UodCw0LHRoaXMubGVuZ3RoKSxEci5yZWFkKHRoaXMsdCwhMCwyMyw0KX0sTy5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fHdlKHQsNCx0aGlzLmxlbmd0aCksRHIucmVhZCh0aGlzLHQsITEsMjMsNCl9LE8ucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8d2UodCw4LHRoaXMubGVuZ3RoKSxEci5yZWFkKHRoaXMsdCwhMCw1Miw4KX0sTy5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHx3ZSh0LDgsdGhpcy5sZW5ndGgpLERyLnJlYWQodGhpcyx0LCExLDUyLDgpfSxPLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbih0LGUscixpKXt0PSt0LGU+Pj49MCxyPj4+PTAsaXx8UGUodGhpcyx0LGUscixNYXRoLnBvdygyLDgqciktMSwwKTt2YXIgbj0xLG89MDtmb3IodGhpc1tlXT0yNTUmdDsrK288ciYmKG4qPTI1Nik7KXRoaXNbZStvXT10L24mMjU1O3JldHVybiBlK3J9LE8ucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKHQsZSxyLGkpe3Q9K3QsZT4+Pj0wLHI+Pj49MCxpfHxQZSh0aGlzLHQsZSxyLE1hdGgucG93KDIsOCpyKS0xLDApO3ZhciBuPXItMSxvPTE7Zm9yKHRoaXNbZStuXT0yNTUmdDstLW4+PTAmJihvKj0yNTYpOyl0aGlzW2Urbl09dC9vJjI1NTtyZXR1cm4gZStyfSxPLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8UGUodGhpcyx0LGUsMSwyNTUsMCksdGhpc1tlXT0yNTUmdCxlKzF9LE8ucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxQZSh0aGlzLHQsZSwyLDY1NTM1LDApLHRoaXNbZV09MjU1JnQsdGhpc1tlKzFdPXQ+Pj44LGUrMn0sTy5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fFBlKHRoaXMsdCxlLDIsNjU1MzUsMCksdGhpc1tlXT10Pj4+OCx0aGlzW2UrMV09MjU1JnQsZSsyfSxPLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8UGUodGhpcyx0LGUsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbZSszXT10Pj4+MjQsdGhpc1tlKzJdPXQ+Pj4xNix0aGlzW2UrMV09dD4+PjgsdGhpc1tlXT0yNTUmdCxlKzR9LE8ucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxQZSh0aGlzLHQsZSw0LDQyOTQ5NjcyOTUsMCksdGhpc1tlXT10Pj4+MjQsdGhpc1tlKzFdPXQ+Pj4xNix0aGlzW2UrMl09dD4+PjgsdGhpc1tlKzNdPTI1NSZ0LGUrNH0sTy5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbih0LGUscixpKXtpZih0PSt0LGU+Pj49MCwhaSl7dmFyIG49TWF0aC5wb3coMiw4KnItMSk7UGUodGhpcyx0LGUscixuLTEsLW4pO312YXIgbz0wLHM9MSxhPTA7Zm9yKHRoaXNbZV09MjU1JnQ7KytvPHImJihzKj0yNTYpOyl0PDAmJmE9PT0wJiZ0aGlzW2Urby0xXSE9PTAmJihhPTEpLHRoaXNbZStvXT0odC9zPj4wKS1hJjI1NTtyZXR1cm4gZStyfSxPLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKHQsZSxyLGkpe2lmKHQ9K3QsZT4+Pj0wLCFpKXt2YXIgbj1NYXRoLnBvdygyLDgqci0xKTtQZSh0aGlzLHQsZSxyLG4tMSwtbik7fXZhciBvPXItMSxzPTEsYT0wO2Zvcih0aGlzW2Urb109MjU1JnQ7LS1vPj0wJiYocyo9MjU2KTspdDwwJiZhPT09MCYmdGhpc1tlK28rMV0hPT0wJiYoYT0xKSx0aGlzW2Urb109KHQvcz4+MCktYSYyNTU7cmV0dXJuIGUrcn0sTy5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8UGUodGhpcyx0LGUsMSwxMjcsLTEyOCksdDwwJiYodD0yNTUrdCsxKSx0aGlzW2VdPTI1NSZ0LGUrMX0sTy5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8UGUodGhpcyx0LGUsMiwzMjc2NywtMzI3NjgpLHRoaXNbZV09MjU1JnQsdGhpc1tlKzFdPXQ+Pj44LGUrMn0sTy5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8UGUodGhpcyx0LGUsMiwzMjc2NywtMzI3NjgpLHRoaXNbZV09dD4+PjgsdGhpc1tlKzFdPTI1NSZ0LGUrMn0sTy5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8UGUodGhpcyx0LGUsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0aGlzW2VdPTI1NSZ0LHRoaXNbZSsxXT10Pj4+OCx0aGlzW2UrMl09dD4+PjE2LHRoaXNbZSszXT10Pj4+MjQsZSs0fSxPLnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxQZSh0aGlzLHQsZSw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHQ8MCYmKHQ9NDI5NDk2NzI5NSt0KzEpLHRoaXNbZV09dD4+PjI0LHRoaXNbZSsxXT10Pj4+MTYsdGhpc1tlKzJdPXQ+Pj44LHRoaXNbZSszXT0yNTUmdCxlKzR9LE8ucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIFNjKHRoaXMsdCxlLCEwLHIpfSxPLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBTYyh0aGlzLHQsZSwhMSxyKX0sTy5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIEFjKHRoaXMsdCxlLCEwLHIpfSxPLnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gQWModGhpcyx0LGUsITEscil9LE8ucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCxlLHIsaSl7aWYoIU8uaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlclwiKTtpZihyfHwocj0wKSxpfHxpPT09MHx8KGk9dGhpcy5sZW5ndGgpLGU+PXQubGVuZ3RoJiYoZT10Lmxlbmd0aCksZXx8KGU9MCksaT4wJiZpPHImJihpPXIpLGk9PT1yfHx0Lmxlbmd0aD09PTB8fHRoaXMubGVuZ3RoPT09MClyZXR1cm4gMDtpZihlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzXCIpO2lmKHI8MHx8cj49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbmRleCBvdXQgb2YgcmFuZ2VcIik7aWYoaTwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwic291cmNlRW5kIG91dCBvZiBib3VuZHNcIik7aT50aGlzLmxlbmd0aCYmKGk9dGhpcy5sZW5ndGgpLHQubGVuZ3RoLWU8aS1yJiYoaT10Lmxlbmd0aC1lK3IpO3ZhciBuPWktcjtpZih0aGlzPT09dCYmdHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW49PVwiZnVuY3Rpb25cIil0aGlzLmNvcHlXaXRoaW4oZSxyLGkpO2Vsc2UgaWYodGhpcz09PXQmJnI8ZSYmZTxpKWZvcih2YXIgbz1uLTE7bz49MDstLW8pdFtvK2VdPXRoaXNbbytyXTtlbHNlIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKHQsdGhpcy5zdWJhcnJheShyLGkpLGUpO3JldHVybiBufSxPLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKHQsZSxyLGkpe2lmKHR5cGVvZiB0PT1cInN0cmluZ1wiKXtpZih0eXBlb2YgZT09XCJzdHJpbmdcIj8oaT1lLGU9MCxyPXRoaXMubGVuZ3RoKTp0eXBlb2Ygcj09XCJzdHJpbmdcIiYmKGk9cixyPXRoaXMubGVuZ3RoKSxpIT09dm9pZCAwJiZ0eXBlb2YgaSE9XCJzdHJpbmdcIil0aHJvdyBuZXcgVHlwZUVycm9yKFwiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZ1wiKTtpZih0eXBlb2YgaT09XCJzdHJpbmdcIiYmIU8uaXNFbmNvZGluZyhpKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIraSk7aWYodC5sZW5ndGg9PT0xKXt2YXIgbj10LmNoYXJDb2RlQXQoMCk7KGk9PT1cInV0ZjhcIiYmbjwxMjh8fGk9PT1cImxhdGluMVwiKSYmKHQ9bik7fX1lbHNlIHR5cGVvZiB0PT1cIm51bWJlclwiP3QmPTI1NTp0eXBlb2YgdD09XCJib29sZWFuXCImJih0PU51bWJlcih0KSk7aWYoZTwwfHx0aGlzLmxlbmd0aDxlfHx0aGlzLmxlbmd0aDxyKXRocm93IG5ldyBSYW5nZUVycm9yKFwiT3V0IG9mIHJhbmdlIGluZGV4XCIpO2lmKHI8PWUpcmV0dXJuIHRoaXM7dmFyIG87aWYoZT4+Pj0wLHI9cj09PXZvaWQgMD90aGlzLmxlbmd0aDpyPj4+MCx0fHwodD0wKSx0eXBlb2YgdD09XCJudW1iZXJcIilmb3Iobz1lO288cjsrK28pdGhpc1tvXT10O2Vsc2Uge3ZhciBzPU8uaXNCdWZmZXIodCk/dDpPLmZyb20odCxpKSxhPXMubGVuZ3RoO2lmKGE9PT0wKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSB2YWx1ZSBcIicrdCsnXCIgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgXCJ2YWx1ZVwiJyk7Zm9yKG89MDtvPHItZTsrK28pdGhpc1tvK2VdPXNbbyVhXTt9cmV0dXJuIHRoaXN9O0N3PS9bXisvMC05QS1aYS16LV9dL2c7Qnc9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9bmV3IEFycmF5KDI1NiksZT0wO2U8MTY7KytlKWZvcih2YXIgcj0xNiplLGk9MDtpPDE2OysraSl0W3IraV09XCIwMTIzNDU2Nzg5YWJjZGVmXCJbZV0rXCIwMTIzNDU2Nzg5YWJjZGVmXCJbaV07cmV0dXJuIHR9KCk7QXQuQnVmZmVyO0F0LklOU1BFQ1RfTUFYX0JZVEVTO0F0LmtNYXhMZW5ndGg7dW49e30sZm49QXQsaXQ9Zm4uQnVmZmVyO2l0LmZyb20mJml0LmFsbG9jJiZpdC5hbGxvY1Vuc2FmZSYmaXQuYWxsb2NVbnNhZmVTbG93P3VuPWZuOihJYyhmbix1biksdW4uQnVmZmVyPWxyKSxsci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShpdC5wcm90b3R5cGUpLEljKGl0LGxyKSxsci5mcm9tPWZ1bmN0aW9uKHQsZSxyKXtpZih0eXBlb2YgdD09XCJudW1iZXJcIil0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXJcIik7cmV0dXJuIGl0KHQsZSxyKX0sbHIuYWxsb2M9ZnVuY3Rpb24odCxlLHIpe2lmKHR5cGVvZiB0IT1cIm51bWJlclwiKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyXCIpO3ZhciBpPWl0KHQpO3JldHVybiBlIT09dm9pZCAwP3R5cGVvZiByPT1cInN0cmluZ1wiP2kuZmlsbChlLHIpOmkuZmlsbChlKTppLmZpbGwoMCksaX0sbHIuYWxsb2NVbnNhZmU9ZnVuY3Rpb24odCl7aWYodHlwZW9mIHQhPVwibnVtYmVyXCIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXJcIik7cmV0dXJuIGl0KHQpfSxsci5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24odCl7aWYodHlwZW9mIHQhPVwibnVtYmVyXCIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXJcIik7cmV0dXJuIGZuLlNsb3dCdWZmZXIodCl9O1B3PXVuLHVyPXt9LFFzPVB3LkJ1ZmZlcixUYz1Rcy5pc0VuY29kaW5nfHxmdW5jdGlvbih0KXtzd2l0Y2goKHQ9XCJcIit0KSYmdC50b0xvd2VyQ2FzZSgpKXtjYXNlXCJoZXhcIjpjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpjYXNlXCJhc2NpaVwiOmNhc2VcImJpbmFyeVwiOmNhc2VcImJhc2U2NFwiOmNhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOmNhc2VcInJhd1wiOnJldHVybiAhMDtkZWZhdWx0OnJldHVybiAhMX19O3VyLlN0cmluZ0RlY29kZXI9cGkscGkucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHQpe2lmKHQubGVuZ3RoPT09MClyZXR1cm4gXCJcIjt2YXIgZSxyO2lmKHRoaXMubGFzdE5lZWQpe2lmKChlPXRoaXMuZmlsbExhc3QodCkpPT09dm9pZCAwKXJldHVybiBcIlwiO3I9dGhpcy5sYXN0TmVlZCx0aGlzLmxhc3ROZWVkPTA7fWVsc2Ugcj0wO3JldHVybiByPHQubGVuZ3RoP2U/ZSt0aGlzLnRleHQodCxyKTp0aGlzLnRleHQodCxyKTplfHxcIlwifSxwaS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXQmJnQubGVuZ3RoP3RoaXMud3JpdGUodCk6XCJcIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9lK1wiXFx1RkZGRFwiOmV9LHBpLnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZnVuY3Rpb24obixvLHMpe3ZhciBhPW8ubGVuZ3RoLTE7aWYoYTxzKXJldHVybiAwO3ZhciBsPVZzKG9bYV0pO3JldHVybiBsPj0wPyhsPjAmJihuLmxhc3ROZWVkPWwtMSksbCk6LS1hPHN8fGw9PT0tMj8wOihsPVZzKG9bYV0pKT49MD8obD4wJiYobi5sYXN0TmVlZD1sLTIpLGwpOi0tYTxzfHxsPT09LTI/MDoobD1WcyhvW2FdKSk+PTA/KGw+MCYmKGw9PT0yP2w9MDpuLmxhc3ROZWVkPWwtMyksbCk6MH0odGhpcyx0LGUpO2lmKCF0aGlzLmxhc3ROZWVkKXJldHVybiB0LnRvU3RyaW5nKFwidXRmOFwiLGUpO3RoaXMubGFzdFRvdGFsPXI7dmFyIGk9dC5sZW5ndGgtKHItdGhpcy5sYXN0TmVlZCk7cmV0dXJuIHQuY29weSh0aGlzLmxhc3RDaGFyLDAsaSksdC50b1N0cmluZyhcInV0ZjhcIixlLGkpfSxwaS5wcm90b3R5cGUuZmlsbExhc3Q9ZnVuY3Rpb24odCl7aWYodGhpcy5sYXN0TmVlZDw9dC5sZW5ndGgpcmV0dXJuIHQuY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCk7dC5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLHQubGVuZ3RoKSx0aGlzLmxhc3ROZWVkLT10Lmxlbmd0aDt9O3VyLlN0cmluZ0RlY29kZXI7dXIuU3RyaW5nRGVjb2Rlcjt9KTt2YXIgTGM9e307SnQoTGMse1N0cmluZ0RlY29kZXI6KCk9PnF3LGRlZmF1bHQ6KCk9PnVyfSk7dmFyIHF3LFVjPV9lKCgpPT57XygpO3YoKTttKCk7WHMoKTtYcygpO3F3PXVyLlN0cmluZ0RlY29kZXI7fSk7dmFyIFpzPU0oKEgyLGpjKT0+e18oKTt2KCk7bSgpO3ZhciBOYz1OdCgpLHtQcm9taXNlUHJvdG90eXBlVGhlbjpEdyxTeW1ib2xBc3luY0l0ZXJhdG9yOnFjLFN5bWJvbEl0ZXJhdG9yOkRjfT1jZSgpLHtCdWZmZXI6and9PShiZSgpLFgobWUpKSx7RVJSX0lOVkFMSURfQVJHX1RZUEU6RncsRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUzpXd309QWUoKS5jb2RlcztmdW5jdGlvbiAkdyh0LGUscil7bGV0IGk7aWYodHlwZW9mIGU9PVwic3RyaW5nXCJ8fGUgaW5zdGFuY2VvZiBqdylyZXR1cm4gbmV3IHQoe29iamVjdE1vZGU6ITAsLi4ucixyZWFkKCl7dGhpcy5wdXNoKGUpLHRoaXMucHVzaChudWxsKTt9fSk7bGV0IG47aWYoZSYmZVtxY10pbj0hMCxpPWVbcWNdKCk7ZWxzZSBpZihlJiZlW0RjXSluPSExLGk9ZVtEY10oKTtlbHNlIHRocm93IG5ldyBGdyhcIml0ZXJhYmxlXCIsW1wiSXRlcmFibGVcIl0sZSk7bGV0IG89bmV3IHQoe29iamVjdE1vZGU6ITAsaGlnaFdhdGVyTWFyazoxLC4uLnJ9KSxzPSExO28uX3JlYWQ9ZnVuY3Rpb24oKXtzfHwocz0hMCxsKCkpO30sby5fZGVzdHJveT1mdW5jdGlvbihjLGgpe0R3KGEoYyksKCk9Pk5jLm5leHRUaWNrKGgsYyksZD0+TmMubmV4dFRpY2soaCxkfHxjKSk7fTthc3luYyBmdW5jdGlvbiBhKGMpe2xldCBoPWMhPW51bGwsZD10eXBlb2YgaS50aHJvdz09XCJmdW5jdGlvblwiO2lmKGgmJmQpe2xldHt2YWx1ZTpnLGRvbmU6eX09YXdhaXQgaS50aHJvdyhjKTtpZihhd2FpdCBnLHkpcmV0dXJufWlmKHR5cGVvZiBpLnJldHVybj09XCJmdW5jdGlvblwiKXtsZXR7dmFsdWU6Z309YXdhaXQgaS5yZXR1cm4oKTthd2FpdCBnO319YXN5bmMgZnVuY3Rpb24gbCgpe2Zvcig7Oyl7dHJ5e2xldHt2YWx1ZTpjLGRvbmU6aH09bj9hd2FpdCBpLm5leHQoKTppLm5leHQoKTtpZihoKW8ucHVzaChudWxsKTtlbHNlIHtsZXQgZD1jJiZ0eXBlb2YgYy50aGVuPT1cImZ1bmN0aW9uXCI/YXdhaXQgYzpjO2lmKGQ9PT1udWxsKXRocm93IHM9ITEsbmV3IFd3O2lmKG8ucHVzaChkKSljb250aW51ZTtzPSExO319Y2F0Y2goYyl7by5kZXN0cm95KGMpO31icmVha319cmV0dXJuIG99amMuZXhwb3J0cz0kdzt9KTt2YXIgZ2k9TSgoZVIsWmMpPT57XygpO3YoKTttKCk7dmFyIEhlPU50KCkse0FycmF5UHJvdG90eXBlSW5kZXhPZjpIdyxOdW1iZXJJc0ludGVnZXI6VncsTnVtYmVySXNOYU46encsTnVtYmVyUGFyc2VJbnQ6S3csT2JqZWN0RGVmaW5lUHJvcGVydGllczokYyxPYmplY3RLZXlzOkd3LE9iamVjdFNldFByb3RvdHlwZU9mOkhjLFByb21pc2U6UXcsU2FmZVNldDpZdyxTeW1ib2xBc3luY0l0ZXJhdG9yOkp3LFN5bWJvbDpYd309Y2UoKTtaYy5leHBvcnRzPUY7Ri5SZWFkYWJsZVN0YXRlPXNvO3ZhcntFdmVudEVtaXR0ZXI6Wnd9PShzcigpLFgobnIpKSx7U3RyZWFtOkR0LHByZXBlbmRMaXN0ZW5lcjplX309bm4oKSx7QnVmZmVyOmVvfT0oYmUoKSxYKG1lKSkse2FkZEFib3J0U2lnbmFsOnRffT1kaSgpLHJfPXZ0KCksSD1KZSgpLmRlYnVnbG9nKFwic3RyZWFtXCIsdD0+e0g9dDt9KSxpXz1kYygpLEZyPWlyKCkse2dldEhpZ2hXYXRlck1hcms6bl8sZ2V0RGVmYXVsdEhpZ2hXYXRlck1hcms6c199PWFuKCkse2FnZ3JlZ2F0ZVR3b0Vycm9yczpGYyxjb2Rlczp7RVJSX0lOVkFMSURfQVJHX1RZUEU6b18sRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQ6YV8sRVJSX09VVF9PRl9SQU5HRTpsXyxFUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GOnVfLEVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQ6Zl99fT1BZSgpLHt2YWxpZGF0ZU9iamVjdDpjX309aGkoKSxmcj1YdyhcImtQYXVzZWRcIikse1N0cmluZ0RlY29kZXI6VmN9PShVYygpLFgoTGMpKSxoXz1acygpO0hjKEYucHJvdG90eXBlLER0LnByb3RvdHlwZSk7SGMoRixEdCk7dmFyIHRvPSgpPT57fSx7ZXJyb3JPckRlc3Ryb3k6anJ9PUZyO2Z1bmN0aW9uIHNvKHQsZSxyKXt0eXBlb2YgciE9XCJib29sZWFuXCImJihyPWUgaW5zdGFuY2VvZiBudCgpKSx0aGlzLm9iamVjdE1vZGU9ISEodCYmdC5vYmplY3RNb2RlKSxyJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISEodCYmdC5yZWFkYWJsZU9iamVjdE1vZGUpKSx0aGlzLmhpZ2hXYXRlck1hcms9dD9uXyh0aGlzLHQsXCJyZWFkYWJsZUhpZ2hXYXRlck1hcmtcIixyKTpzXyghMSksdGhpcy5idWZmZXI9bmV3IGlfLHRoaXMubGVuZ3RoPTAsdGhpcy5waXBlcz1bXSx0aGlzLmZsb3dpbmc9bnVsbCx0aGlzLmVuZGVkPSExLHRoaXMuZW5kRW1pdHRlZD0hMSx0aGlzLnJlYWRpbmc9ITEsdGhpcy5jb25zdHJ1Y3RlZD0hMCx0aGlzLnN5bmM9ITAsdGhpcy5uZWVkUmVhZGFibGU9ITEsdGhpcy5lbWl0dGVkUmVhZGFibGU9ITEsdGhpcy5yZWFkYWJsZUxpc3RlbmluZz0hMSx0aGlzLnJlc3VtZVNjaGVkdWxlZD0hMSx0aGlzW2ZyXT1udWxsLHRoaXMuZXJyb3JFbWl0dGVkPSExLHRoaXMuZW1pdENsb3NlPSF0fHx0LmVtaXRDbG9zZSE9PSExLHRoaXMuYXV0b0Rlc3Ryb3k9IXR8fHQuYXV0b0Rlc3Ryb3khPT0hMSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmVycm9yZWQ9bnVsbCx0aGlzLmNsb3NlZD0hMSx0aGlzLmNsb3NlRW1pdHRlZD0hMSx0aGlzLmRlZmF1bHRFbmNvZGluZz10JiZ0LmRlZmF1bHRFbmNvZGluZ3x8XCJ1dGY4XCIsdGhpcy5hd2FpdERyYWluV3JpdGVycz1udWxsLHRoaXMubXVsdGlBd2FpdERyYWluPSExLHRoaXMucmVhZGluZ01vcmU9ITEsdGhpcy5kYXRhRW1pdHRlZD0hMSx0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmVuY29kaW5nPW51bGwsdCYmdC5lbmNvZGluZyYmKHRoaXMuZGVjb2Rlcj1uZXcgVmModC5lbmNvZGluZyksdGhpcy5lbmNvZGluZz10LmVuY29kaW5nKTt9ZnVuY3Rpb24gRih0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBGKSlyZXR1cm4gbmV3IEYodCk7bGV0IGU9dGhpcyBpbnN0YW5jZW9mIG50KCk7dGhpcy5fcmVhZGFibGVTdGF0ZT1uZXcgc28odCx0aGlzLGUpLHQmJih0eXBlb2YgdC5yZWFkPT1cImZ1bmN0aW9uXCImJih0aGlzLl9yZWFkPXQucmVhZCksdHlwZW9mIHQuZGVzdHJveT09XCJmdW5jdGlvblwiJiYodGhpcy5fZGVzdHJveT10LmRlc3Ryb3kpLHR5cGVvZiB0LmNvbnN0cnVjdD09XCJmdW5jdGlvblwiJiYodGhpcy5fY29uc3RydWN0PXQuY29uc3RydWN0KSx0LnNpZ25hbCYmIWUmJnRfKHQuc2lnbmFsLHRoaXMpKSxEdC5jYWxsKHRoaXMsdCksRnIuY29uc3RydWN0KHRoaXMsKCk9Pnt0aGlzLl9yZWFkYWJsZVN0YXRlLm5lZWRSZWFkYWJsZSYmaG4odGhpcyx0aGlzLl9yZWFkYWJsZVN0YXRlKTt9KTt9Ri5wcm90b3R5cGUuZGVzdHJveT1Gci5kZXN0cm95O0YucHJvdG90eXBlLl91bmRlc3Ryb3k9RnIudW5kZXN0cm95O0YucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKHQsZSl7ZSh0KTt9O0YucHJvdG90eXBlW1p3LmNhcHR1cmVSZWplY3Rpb25TeW1ib2xdPWZ1bmN0aW9uKHQpe3RoaXMuZGVzdHJveSh0KTt9O0YucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24odCxlKXtyZXR1cm4gemModGhpcyx0LGUsITEpfTtGLnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHpjKHRoaXMsdCxlLCEwKX07ZnVuY3Rpb24gemModCxlLHIsaSl7SChcInJlYWRhYmxlQWRkQ2h1bmtcIixlKTtsZXQgbj10Ll9yZWFkYWJsZVN0YXRlLG87aWYobi5vYmplY3RNb2RlfHwodHlwZW9mIGU9PVwic3RyaW5nXCI/KHI9cnx8bi5kZWZhdWx0RW5jb2Rpbmcsbi5lbmNvZGluZyE9PXImJihpJiZuLmVuY29kaW5nP2U9ZW8uZnJvbShlLHIpLnRvU3RyaW5nKG4uZW5jb2RpbmcpOihlPWVvLmZyb20oZSxyKSxyPVwiXCIpKSk6ZSBpbnN0YW5jZW9mIGVvP3I9XCJcIjpEdC5faXNVaW50OEFycmF5KGUpPyhlPUR0Ll91aW50OEFycmF5VG9CdWZmZXIoZSkscj1cIlwiKTplIT1udWxsJiYobz1uZXcgb18oXCJjaHVua1wiLFtcInN0cmluZ1wiLFwiQnVmZmVyXCIsXCJVaW50OEFycmF5XCJdLGUpKSksbylqcih0LG8pO2Vsc2UgaWYoZT09PW51bGwpbi5yZWFkaW5nPSExLGdfKHQsbik7ZWxzZSBpZihuLm9iamVjdE1vZGV8fGUmJmUubGVuZ3RoPjApaWYoaSlpZihuLmVuZEVtaXR0ZWQpanIodCxuZXcgZl8pO2Vsc2Uge2lmKG4uZGVzdHJveWVkfHxuLmVycm9yZWQpcmV0dXJuICExO3JvKHQsbixlLCEwKTt9ZWxzZSBpZihuLmVuZGVkKWpyKHQsbmV3IHVfKTtlbHNlIHtpZihuLmRlc3Ryb3llZHx8bi5lcnJvcmVkKXJldHVybiAhMTtuLnJlYWRpbmc9ITEsbi5kZWNvZGVyJiYhcj8oZT1uLmRlY29kZXIud3JpdGUoZSksbi5vYmplY3RNb2RlfHxlLmxlbmd0aCE9PTA/cm8odCxuLGUsITEpOmhuKHQsbikpOnJvKHQsbixlLCExKTt9ZWxzZSBpfHwobi5yZWFkaW5nPSExLGhuKHQsbikpO3JldHVybiAhbi5lbmRlZCYmKG4ubGVuZ3RoPG4uaGlnaFdhdGVyTWFya3x8bi5sZW5ndGg9PT0wKX1mdW5jdGlvbiBybyh0LGUscixpKXtlLmZsb3dpbmcmJmUubGVuZ3RoPT09MCYmIWUuc3luYyYmdC5saXN0ZW5lckNvdW50KFwiZGF0YVwiKT4wPyhlLm11bHRpQXdhaXREcmFpbj9lLmF3YWl0RHJhaW5Xcml0ZXJzLmNsZWFyKCk6ZS5hd2FpdERyYWluV3JpdGVycz1udWxsLGUuZGF0YUVtaXR0ZWQ9ITAsdC5lbWl0KFwiZGF0YVwiLHIpKTooZS5sZW5ndGgrPWUub2JqZWN0TW9kZT8xOnIubGVuZ3RoLGk/ZS5idWZmZXIudW5zaGlmdChyKTplLmJ1ZmZlci5wdXNoKHIpLGUubmVlZFJlYWRhYmxlJiZkbih0KSksaG4odCxlKTt9Ri5wcm90b3R5cGUuaXNQYXVzZWQ9ZnVuY3Rpb24oKXtsZXQgdD10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiB0W2ZyXT09PSEwfHx0LmZsb3dpbmc9PT0hMX07Ri5wcm90b3R5cGUuc2V0RW5jb2Rpbmc9ZnVuY3Rpb24odCl7bGV0IGU9bmV3IFZjKHQpO3RoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlcj1lLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2Rpbmc9dGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyLmVuY29kaW5nO2xldCByPXRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLGk9XCJcIjtmb3IobGV0IG4gb2YgcilpKz1lLndyaXRlKG4pO3JldHVybiByLmNsZWFyKCksaSE9PVwiXCImJnIucHVzaChpKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aD1pLmxlbmd0aCx0aGlzfTt2YXIgZF89MTA3Mzc0MTgyNDtmdW5jdGlvbiBwXyh0KXtpZih0PmRfKXRocm93IG5ldyBsXyhcInNpemVcIixcIjw9IDFHaUJcIix0KTtyZXR1cm4gdC0tLHR8PXQ+Pj4xLHR8PXQ+Pj4yLHR8PXQ+Pj40LHR8PXQ+Pj44LHR8PXQ+Pj4xNix0KyssdH1mdW5jdGlvbiBXYyh0LGUpe3JldHVybiB0PD0wfHxlLmxlbmd0aD09PTAmJmUuZW5kZWQ/MDplLm9iamVjdE1vZGU/MTp6dyh0KT9lLmZsb3dpbmcmJmUubGVuZ3RoP2UuYnVmZmVyLmZpcnN0KCkubGVuZ3RoOmUubGVuZ3RoOnQ8PWUubGVuZ3RoP3Q6ZS5lbmRlZD9lLmxlbmd0aDowfUYucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24odCl7SChcInJlYWRcIix0KSx0PT09dm9pZCAwP3Q9TmFOOlZ3KHQpfHwodD1Ldyh0LDEwKSk7bGV0IGU9dGhpcy5fcmVhZGFibGVTdGF0ZSxyPXQ7aWYodD5lLmhpZ2hXYXRlck1hcmsmJihlLmhpZ2hXYXRlck1hcms9cF8odCkpLHQhPT0wJiYoZS5lbWl0dGVkUmVhZGFibGU9ITEpLHQ9PT0wJiZlLm5lZWRSZWFkYWJsZSYmKChlLmhpZ2hXYXRlck1hcmshPT0wP2UubGVuZ3RoPj1lLmhpZ2hXYXRlck1hcms6ZS5sZW5ndGg+MCl8fGUuZW5kZWQpKXJldHVybiBIKFwicmVhZDogZW1pdFJlYWRhYmxlXCIsZS5sZW5ndGgsZS5lbmRlZCksZS5sZW5ndGg9PT0wJiZlLmVuZGVkP2lvKHRoaXMpOmRuKHRoaXMpLG51bGw7aWYodD1XYyh0LGUpLHQ9PT0wJiZlLmVuZGVkKXJldHVybiBlLmxlbmd0aD09PTAmJmlvKHRoaXMpLG51bGw7bGV0IGk9ZS5uZWVkUmVhZGFibGU7aWYoSChcIm5lZWQgcmVhZGFibGVcIixpKSwoZS5sZW5ndGg9PT0wfHxlLmxlbmd0aC10PGUuaGlnaFdhdGVyTWFyaykmJihpPSEwLEgoXCJsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFya1wiLGkpKSxlLmVuZGVkfHxlLnJlYWRpbmd8fGUuZGVzdHJveWVkfHxlLmVycm9yZWR8fCFlLmNvbnN0cnVjdGVkKWk9ITEsSChcInJlYWRpbmcsIGVuZGVkIG9yIGNvbnN0cnVjdGluZ1wiLGkpO2Vsc2UgaWYoaSl7SChcImRvIHJlYWRcIiksZS5yZWFkaW5nPSEwLGUuc3luYz0hMCxlLmxlbmd0aD09PTAmJihlLm5lZWRSZWFkYWJsZT0hMCk7dHJ5e3RoaXMuX3JlYWQoZS5oaWdoV2F0ZXJNYXJrKTt9Y2F0Y2gobyl7anIodGhpcyxvKTt9ZS5zeW5jPSExLGUucmVhZGluZ3x8KHQ9V2MocixlKSk7fWxldCBuO3JldHVybiB0PjA/bj1KYyh0LGUpOm49bnVsbCxuPT09bnVsbD8oZS5uZWVkUmVhZGFibGU9ZS5sZW5ndGg8PWUuaGlnaFdhdGVyTWFyayx0PTApOihlLmxlbmd0aC09dCxlLm11bHRpQXdhaXREcmFpbj9lLmF3YWl0RHJhaW5Xcml0ZXJzLmNsZWFyKCk6ZS5hd2FpdERyYWluV3JpdGVycz1udWxsKSxlLmxlbmd0aD09PTAmJihlLmVuZGVkfHwoZS5uZWVkUmVhZGFibGU9ITApLHIhPT10JiZlLmVuZGVkJiZpbyh0aGlzKSksbiE9PW51bGwmJiFlLmVycm9yRW1pdHRlZCYmIWUuY2xvc2VFbWl0dGVkJiYoZS5kYXRhRW1pdHRlZD0hMCx0aGlzLmVtaXQoXCJkYXRhXCIsbikpLG59O2Z1bmN0aW9uIGdfKHQsZSl7aWYoSChcIm9uRW9mQ2h1bmtcIiksIWUuZW5kZWQpe2lmKGUuZGVjb2Rlcil7bGV0IHI9ZS5kZWNvZGVyLmVuZCgpO3ImJnIubGVuZ3RoJiYoZS5idWZmZXIucHVzaChyKSxlLmxlbmd0aCs9ZS5vYmplY3RNb2RlPzE6ci5sZW5ndGgpO31lLmVuZGVkPSEwLGUuc3luYz9kbih0KTooZS5uZWVkUmVhZGFibGU9ITEsZS5lbWl0dGVkUmVhZGFibGU9ITAsS2ModCkpO319ZnVuY3Rpb24gZG4odCl7bGV0IGU9dC5fcmVhZGFibGVTdGF0ZTtIKFwiZW1pdFJlYWRhYmxlXCIsZS5uZWVkUmVhZGFibGUsZS5lbWl0dGVkUmVhZGFibGUpLGUubmVlZFJlYWRhYmxlPSExLGUuZW1pdHRlZFJlYWRhYmxlfHwoSChcImVtaXRSZWFkYWJsZVwiLGUuZmxvd2luZyksZS5lbWl0dGVkUmVhZGFibGU9ITAsSGUubmV4dFRpY2soS2MsdCkpO31mdW5jdGlvbiBLYyh0KXtsZXQgZT10Ll9yZWFkYWJsZVN0YXRlO0goXCJlbWl0UmVhZGFibGVfXCIsZS5kZXN0cm95ZWQsZS5sZW5ndGgsZS5lbmRlZCksIWUuZGVzdHJveWVkJiYhZS5lcnJvcmVkJiYoZS5sZW5ndGh8fGUuZW5kZWQpJiYodC5lbWl0KFwicmVhZGFibGVcIiksZS5lbWl0dGVkUmVhZGFibGU9ITEpLGUubmVlZFJlYWRhYmxlPSFlLmZsb3dpbmcmJiFlLmVuZGVkJiZlLmxlbmd0aDw9ZS5oaWdoV2F0ZXJNYXJrLFFjKHQpO31mdW5jdGlvbiBobih0LGUpeyFlLnJlYWRpbmdNb3JlJiZlLmNvbnN0cnVjdGVkJiYoZS5yZWFkaW5nTW9yZT0hMCxIZS5uZXh0VGljayh5Xyx0LGUpKTt9ZnVuY3Rpb24geV8odCxlKXtmb3IoOyFlLnJlYWRpbmcmJiFlLmVuZGVkJiYoZS5sZW5ndGg8ZS5oaWdoV2F0ZXJNYXJrfHxlLmZsb3dpbmcmJmUubGVuZ3RoPT09MCk7KXtsZXQgcj1lLmxlbmd0aDtpZihIKFwibWF5YmVSZWFkTW9yZSByZWFkIDBcIiksdC5yZWFkKDApLHI9PT1lLmxlbmd0aClicmVha31lLnJlYWRpbmdNb3JlPSExO31GLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbih0KXt0aHJvdyBuZXcgYV8oXCJfcmVhZCgpXCIpfTtGLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKHQsZSl7bGV0IHI9dGhpcyxpPXRoaXMuX3JlYWRhYmxlU3RhdGU7aS5waXBlcy5sZW5ndGg9PT0xJiYoaS5tdWx0aUF3YWl0RHJhaW58fChpLm11bHRpQXdhaXREcmFpbj0hMCxpLmF3YWl0RHJhaW5Xcml0ZXJzPW5ldyBZdyhpLmF3YWl0RHJhaW5Xcml0ZXJzP1tpLmF3YWl0RHJhaW5Xcml0ZXJzXTpbXSkpKSxpLnBpcGVzLnB1c2godCksSChcInBpcGUgY291bnQ9JWQgb3B0cz0lalwiLGkucGlwZXMubGVuZ3RoLGUpO2xldCBvPSghZXx8ZS5lbmQhPT0hMSkmJnQhPT1IZS5zdGRvdXQmJnQhPT1IZS5zdGRlcnI/YTpFO2kuZW5kRW1pdHRlZD9IZS5uZXh0VGljayhvKTpyLm9uY2UoXCJlbmRcIixvKSx0Lm9uKFwidW5waXBlXCIscyk7ZnVuY3Rpb24gcyhJLEMpe0goXCJvbnVucGlwZVwiKSxJPT09ciYmQyYmQy5oYXNVbnBpcGVkPT09ITEmJihDLmhhc1VucGlwZWQ9ITAsaCgpKTt9ZnVuY3Rpb24gYSgpe0goXCJvbmVuZFwiKSx0LmVuZCgpO31sZXQgbCxjPSExO2Z1bmN0aW9uIGgoKXtIKFwiY2xlYW51cFwiKSx0LnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIix3KSx0LnJlbW92ZUxpc3RlbmVyKFwiZmluaXNoXCIsUyksbCYmdC5yZW1vdmVMaXN0ZW5lcihcImRyYWluXCIsbCksdC5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIseSksdC5yZW1vdmVMaXN0ZW5lcihcInVucGlwZVwiLHMpLHIucmVtb3ZlTGlzdGVuZXIoXCJlbmRcIixhKSxyLnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIsRSksci5yZW1vdmVMaXN0ZW5lcihcImRhdGFcIixnKSxjPSEwLGwmJmkuYXdhaXREcmFpbldyaXRlcnMmJighdC5fd3JpdGFibGVTdGF0ZXx8dC5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW4pJiZsKCk7fWZ1bmN0aW9uIGQoKXtjfHwoaS5waXBlcy5sZW5ndGg9PT0xJiZpLnBpcGVzWzBdPT09dD8oSChcImZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZVwiLDApLGkuYXdhaXREcmFpbldyaXRlcnM9dCxpLm11bHRpQXdhaXREcmFpbj0hMSk6aS5waXBlcy5sZW5ndGg+MSYmaS5waXBlcy5pbmNsdWRlcyh0KSYmKEgoXCJmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2VcIixpLmF3YWl0RHJhaW5Xcml0ZXJzLnNpemUpLGkuYXdhaXREcmFpbldyaXRlcnMuYWRkKHQpKSxyLnBhdXNlKCkpLGx8fChsPWJfKHIsdCksdC5vbihcImRyYWluXCIsbCkpO31yLm9uKFwiZGF0YVwiLGcpO2Z1bmN0aW9uIGcoSSl7SChcIm9uZGF0YVwiKTtsZXQgQz10LndyaXRlKEkpO0goXCJkZXN0LndyaXRlXCIsQyksQz09PSExJiZkKCk7fWZ1bmN0aW9uIHkoSSl7aWYoSChcIm9uZXJyb3JcIixJKSxFKCksdC5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIseSksdC5saXN0ZW5lckNvdW50KFwiZXJyb3JcIik9PT0wKXtsZXQgQz10Ll93cml0YWJsZVN0YXRlfHx0Ll9yZWFkYWJsZVN0YXRlO0MmJiFDLmVycm9yRW1pdHRlZD9qcih0LEkpOnQuZW1pdChcImVycm9yXCIsSSk7fX1lXyh0LFwiZXJyb3JcIix5KTtmdW5jdGlvbiB3KCl7dC5yZW1vdmVMaXN0ZW5lcihcImZpbmlzaFwiLFMpLEUoKTt9dC5vbmNlKFwiY2xvc2VcIix3KTtmdW5jdGlvbiBTKCl7SChcIm9uZmluaXNoXCIpLHQucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLHcpLEUoKTt9dC5vbmNlKFwiZmluaXNoXCIsUyk7ZnVuY3Rpb24gRSgpe0goXCJ1bnBpcGVcIiksci51bnBpcGUodCk7fXJldHVybiB0LmVtaXQoXCJwaXBlXCIsciksdC53cml0YWJsZU5lZWREcmFpbj09PSEwP2kuZmxvd2luZyYmZCgpOmkuZmxvd2luZ3x8KEgoXCJwaXBlIHJlc3VtZVwiKSxyLnJlc3VtZSgpKSx0fTtmdW5jdGlvbiBiXyh0LGUpe3JldHVybiBmdW5jdGlvbigpe2xldCBpPXQuX3JlYWRhYmxlU3RhdGU7aS5hd2FpdERyYWluV3JpdGVycz09PWU/KEgoXCJwaXBlT25EcmFpblwiLDEpLGkuYXdhaXREcmFpbldyaXRlcnM9bnVsbCk6aS5tdWx0aUF3YWl0RHJhaW4mJihIKFwicGlwZU9uRHJhaW5cIixpLmF3YWl0RHJhaW5Xcml0ZXJzLnNpemUpLGkuYXdhaXREcmFpbldyaXRlcnMuZGVsZXRlKGUpKSwoIWkuYXdhaXREcmFpbldyaXRlcnN8fGkuYXdhaXREcmFpbldyaXRlcnMuc2l6ZT09PTApJiZ0Lmxpc3RlbmVyQ291bnQoXCJkYXRhXCIpJiZ0LnJlc3VtZSgpO319Ri5wcm90b3R5cGUudW5waXBlPWZ1bmN0aW9uKHQpe2xldCBlPXRoaXMuX3JlYWRhYmxlU3RhdGUscj17aGFzVW5waXBlZDohMX07aWYoZS5waXBlcy5sZW5ndGg9PT0wKXJldHVybiB0aGlzO2lmKCF0KXtsZXQgbj1lLnBpcGVzO2UucGlwZXM9W10sdGhpcy5wYXVzZSgpO2ZvcihsZXQgbz0wO288bi5sZW5ndGg7bysrKW5bb10uZW1pdChcInVucGlwZVwiLHRoaXMse2hhc1VucGlwZWQ6ITF9KTtyZXR1cm4gdGhpc31sZXQgaT1IdyhlLnBpcGVzLHQpO3JldHVybiBpPT09LTE/dGhpczooZS5waXBlcy5zcGxpY2UoaSwxKSxlLnBpcGVzLmxlbmd0aD09PTAmJnRoaXMucGF1c2UoKSx0LmVtaXQoXCJ1bnBpcGVcIix0aGlzLHIpLHRoaXMpfTtGLnByb3RvdHlwZS5vbj1mdW5jdGlvbih0LGUpe2xldCByPUR0LnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsdCxlKSxpPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIHQ9PT1cImRhdGFcIj8oaS5yZWFkYWJsZUxpc3RlbmluZz10aGlzLmxpc3RlbmVyQ291bnQoXCJyZWFkYWJsZVwiKT4wLGkuZmxvd2luZyE9PSExJiZ0aGlzLnJlc3VtZSgpKTp0PT09XCJyZWFkYWJsZVwiJiYhaS5lbmRFbWl0dGVkJiYhaS5yZWFkYWJsZUxpc3RlbmluZyYmKGkucmVhZGFibGVMaXN0ZW5pbmc9aS5uZWVkUmVhZGFibGU9ITAsaS5mbG93aW5nPSExLGkuZW1pdHRlZFJlYWRhYmxlPSExLEgoXCJvbiByZWFkYWJsZVwiLGkubGVuZ3RoLGkucmVhZGluZyksaS5sZW5ndGg/ZG4odGhpcyk6aS5yZWFkaW5nfHxIZS5uZXh0VGljayh3Xyx0aGlzKSkscn07Ri5wcm90b3R5cGUuYWRkTGlzdGVuZXI9Ri5wcm90b3R5cGUub247Ri5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24odCxlKXtsZXQgcj1EdC5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIuY2FsbCh0aGlzLHQsZSk7cmV0dXJuIHQ9PT1cInJlYWRhYmxlXCImJkhlLm5leHRUaWNrKEdjLHRoaXMpLHJ9O0YucHJvdG90eXBlLm9mZj1GLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtGLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24odCl7bGV0IGU9RHQucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuICh0PT09XCJyZWFkYWJsZVwifHx0PT09dm9pZCAwKSYmSGUubmV4dFRpY2soR2MsdGhpcyksZX07ZnVuY3Rpb24gR2ModCl7bGV0IGU9dC5fcmVhZGFibGVTdGF0ZTtlLnJlYWRhYmxlTGlzdGVuaW5nPXQubGlzdGVuZXJDb3VudChcInJlYWRhYmxlXCIpPjAsZS5yZXN1bWVTY2hlZHVsZWQmJmVbZnJdPT09ITE/ZS5mbG93aW5nPSEwOnQubGlzdGVuZXJDb3VudChcImRhdGFcIik+MD90LnJlc3VtZSgpOmUucmVhZGFibGVMaXN0ZW5pbmd8fChlLmZsb3dpbmc9bnVsbCk7fWZ1bmN0aW9uIHdfKHQpe0goXCJyZWFkYWJsZSBuZXh0dGljayByZWFkIDBcIiksdC5yZWFkKDApO31GLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXtsZXQgdD10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiB0LmZsb3dpbmd8fChIKFwicmVzdW1lXCIpLHQuZmxvd2luZz0hdC5yZWFkYWJsZUxpc3RlbmluZyxfXyh0aGlzLHQpKSx0W2ZyXT0hMSx0aGlzfTtmdW5jdGlvbiBfXyh0LGUpe2UucmVzdW1lU2NoZWR1bGVkfHwoZS5yZXN1bWVTY2hlZHVsZWQ9ITAsSGUubmV4dFRpY2sobV8sdCxlKSk7fWZ1bmN0aW9uIG1fKHQsZSl7SChcInJlc3VtZVwiLGUucmVhZGluZyksZS5yZWFkaW5nfHx0LnJlYWQoMCksZS5yZXN1bWVTY2hlZHVsZWQ9ITEsdC5lbWl0KFwicmVzdW1lXCIpLFFjKHQpLGUuZmxvd2luZyYmIWUucmVhZGluZyYmdC5yZWFkKDApO31GLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3JldHVybiBIKFwiY2FsbCBwYXVzZSBmbG93aW5nPSVqXCIsdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmchPT0hMSYmKEgoXCJwYXVzZVwiKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9ITEsdGhpcy5lbWl0KFwicGF1c2VcIikpLHRoaXMuX3JlYWRhYmxlU3RhdGVbZnJdPSEwLHRoaXN9O2Z1bmN0aW9uIFFjKHQpe2xldCBlPXQuX3JlYWRhYmxlU3RhdGU7Zm9yKEgoXCJmbG93XCIsZS5mbG93aW5nKTtlLmZsb3dpbmcmJnQucmVhZCgpIT09bnVsbDspO31GLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHQpe2xldCBlPSExO3Qub24oXCJkYXRhXCIsaT0+eyF0aGlzLnB1c2goaSkmJnQucGF1c2UmJihlPSEwLHQucGF1c2UoKSk7fSksdC5vbihcImVuZFwiLCgpPT57dGhpcy5wdXNoKG51bGwpO30pLHQub24oXCJlcnJvclwiLGk9Pntqcih0aGlzLGkpO30pLHQub24oXCJjbG9zZVwiLCgpPT57dGhpcy5kZXN0cm95KCk7fSksdC5vbihcImRlc3Ryb3lcIiwoKT0+e3RoaXMuZGVzdHJveSgpO30pLHRoaXMuX3JlYWQ9KCk9PntlJiZ0LnJlc3VtZSYmKGU9ITEsdC5yZXN1bWUoKSk7fTtsZXQgcj1Hdyh0KTtmb3IobGV0IGk9MTtpPHIubGVuZ3RoO2krKyl7bGV0IG49cltpXTt0aGlzW25dPT09dm9pZCAwJiZ0eXBlb2YgdFtuXT09XCJmdW5jdGlvblwiJiYodGhpc1tuXT10W25dLmJpbmQodCkpO31yZXR1cm4gdGhpc307Ri5wcm90b3R5cGVbSnddPWZ1bmN0aW9uKCl7cmV0dXJuIFljKHRoaXMpfTtGLnByb3RvdHlwZS5pdGVyYXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gdCE9PXZvaWQgMCYmY18odCxcIm9wdGlvbnNcIiksWWModGhpcyx0KX07ZnVuY3Rpb24gWWModCxlKXt0eXBlb2YgdC5yZWFkIT1cImZ1bmN0aW9uXCImJih0PUYud3JhcCh0LHtvYmplY3RNb2RlOiEwfSkpO2xldCByPXZfKHQsZSk7cmV0dXJuIHIuc3RyZWFtPXQscn1hc3luYyBmdW5jdGlvbip2Xyh0LGUpe2xldCByPXRvO2Z1bmN0aW9uIGkocyl7dGhpcz09PXQ/KHIoKSxyPXRvKTpyPXM7fXQub24oXCJyZWFkYWJsZVwiLGkpO2xldCBuLG89cl8odCx7d3JpdGFibGU6ITF9LHM9PntuPXM/RmMobixzKTpudWxsLHIoKSxyPXRvO30pO3RyeXtmb3IoOzspe2xldCBzPXQuZGVzdHJveWVkP251bGw6dC5yZWFkKCk7aWYocyE9PW51bGwpeWllbGQgcztlbHNlIHtpZihuKXRocm93IG47aWYobj09PW51bGwpcmV0dXJuO2F3YWl0IG5ldyBRdyhpKTt9fX1jYXRjaChzKXt0aHJvdyBuPUZjKG4scyksbn1maW5hbGx5eyhufHxlPy5kZXN0cm95T25SZXR1cm4hPT0hMSkmJihuPT09dm9pZCAwfHx0Ll9yZWFkYWJsZVN0YXRlLmF1dG9EZXN0cm95KT9Gci5kZXN0cm95ZXIodCxudWxsKToodC5vZmYoXCJyZWFkYWJsZVwiLGkpLG8oKSk7fX0kYyhGLnByb3RvdHlwZSx7cmVhZGFibGU6e19fcHJvdG9fXzpudWxsLGdldCgpe2xldCB0PXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuICEhdCYmdC5yZWFkYWJsZSE9PSExJiYhdC5kZXN0cm95ZWQmJiF0LmVycm9yRW1pdHRlZCYmIXQuZW5kRW1pdHRlZH0sc2V0KHQpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRhYmxlPSEhdCk7fX0scmVhZGFibGVEaWRSZWFkOntfX3Byb3RvX186bnVsbCxlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmRhdGFFbWl0dGVkfX0scmVhZGFibGVBYm9ydGVkOntfX3Byb3RvX186bnVsbCxlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiAhISh0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRhYmxlIT09ITEmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZHx8dGhpcy5fcmVhZGFibGVTdGF0ZS5lcnJvcmVkKSYmIXRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCl9fSxyZWFkYWJsZUhpZ2hXYXRlck1hcms6e19fcHJvdG9fXzpudWxsLGVudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319LHJlYWRhYmxlQnVmZmVyOntfX3Byb3RvX186bnVsbCxlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlcn19LHJlYWRhYmxlRmxvd2luZzp7X19wcm90b19fOm51bGwsZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz10KTt9fSxyZWFkYWJsZUxlbmd0aDp7X19wcm90b19fOm51bGwsZW51bWVyYWJsZTohMSxnZXQoKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGh9fSxyZWFkYWJsZU9iamVjdE1vZGU6e19fcHJvdG9fXzpudWxsLGVudW1lcmFibGU6ITEsZ2V0KCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGU/dGhpcy5fcmVhZGFibGVTdGF0ZS5vYmplY3RNb2RlOiExfX0scmVhZGFibGVFbmNvZGluZzp7X19wcm90b19fOm51bGwsZW51bWVyYWJsZTohMSxnZXQoKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZT90aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nOm51bGx9fSxlcnJvcmVkOntfX3Byb3RvX186bnVsbCxlbnVtZXJhYmxlOiExLGdldCgpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlP3RoaXMuX3JlYWRhYmxlU3RhdGUuZXJyb3JlZDpudWxsfX0sY2xvc2VkOntfX3Byb3RvX186bnVsbCxnZXQoKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZT90aGlzLl9yZWFkYWJsZVN0YXRlLmNsb3NlZDohMX19LGRlc3Ryb3llZDp7X19wcm90b19fOm51bGwsZW51bWVyYWJsZTohMSxnZXQoKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZT90aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZDohMX0sc2V0KHQpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD10KTt9fSxyZWFkYWJsZUVuZGVkOntfX3Byb3RvX186bnVsbCxlbnVtZXJhYmxlOiExLGdldCgpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlP3RoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZDohMX19fSk7JGMoc28ucHJvdG90eXBlLHtwaXBlc0NvdW50OntfX3Byb3RvX186bnVsbCxnZXQoKXtyZXR1cm4gdGhpcy5waXBlcy5sZW5ndGh9fSxwYXVzZWQ6e19fcHJvdG9fXzpudWxsLGdldCgpe3JldHVybiB0aGlzW2ZyXSE9PSExfSxzZXQodCl7dGhpc1tmcl09ISF0O319fSk7Ri5fZnJvbUxpc3Q9SmM7ZnVuY3Rpb24gSmModCxlKXtpZihlLmxlbmd0aD09PTApcmV0dXJuIG51bGw7bGV0IHI7cmV0dXJuIGUub2JqZWN0TW9kZT9yPWUuYnVmZmVyLnNoaWZ0KCk6IXR8fHQ+PWUubGVuZ3RoPyhlLmRlY29kZXI/cj1lLmJ1ZmZlci5qb2luKFwiXCIpOmUuYnVmZmVyLmxlbmd0aD09PTE/cj1lLmJ1ZmZlci5maXJzdCgpOnI9ZS5idWZmZXIuY29uY2F0KGUubGVuZ3RoKSxlLmJ1ZmZlci5jbGVhcigpKTpyPWUuYnVmZmVyLmNvbnN1bWUodCxlLmRlY29kZXIpLHJ9ZnVuY3Rpb24gaW8odCl7bGV0IGU9dC5fcmVhZGFibGVTdGF0ZTtIKFwiZW5kUmVhZGFibGVcIixlLmVuZEVtaXR0ZWQpLGUuZW5kRW1pdHRlZHx8KGUuZW5kZWQ9ITAsSGUubmV4dFRpY2soRV8sZSx0KSk7fWZ1bmN0aW9uIEVfKHQsZSl7aWYoSChcImVuZFJlYWRhYmxlTlRcIix0LmVuZEVtaXR0ZWQsdC5sZW5ndGgpLCF0LmVycm9yZWQmJiF0LmNsb3NlRW1pdHRlZCYmIXQuZW5kRW1pdHRlZCYmdC5sZW5ndGg9PT0wKXtpZih0LmVuZEVtaXR0ZWQ9ITAsZS5lbWl0KFwiZW5kXCIpLGUud3JpdGFibGUmJmUuYWxsb3dIYWxmT3Blbj09PSExKUhlLm5leHRUaWNrKFNfLGUpO2Vsc2UgaWYodC5hdXRvRGVzdHJveSl7bGV0IHI9ZS5fd3JpdGFibGVTdGF0ZTsoIXJ8fHIuYXV0b0Rlc3Ryb3kmJihyLmZpbmlzaGVkfHxyLndyaXRhYmxlPT09ITEpKSYmZS5kZXN0cm95KCk7fX19ZnVuY3Rpb24gU18odCl7dC53cml0YWJsZSYmIXQud3JpdGFibGVFbmRlZCYmIXQuZGVzdHJveWVkJiZ0LmVuZCgpO31GLmZyb209ZnVuY3Rpb24odCxlKXtyZXR1cm4gaF8oRix0LGUpfTt2YXIgbm87ZnVuY3Rpb24gWGMoKXtyZXR1cm4gbm89PT12b2lkIDAmJihubz17fSksbm99Ri5mcm9tV2ViPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFhjKCkubmV3U3RyZWFtUmVhZGFibGVGcm9tUmVhZGFibGVTdHJlYW0odCxlKX07Ri50b1dlYj1mdW5jdGlvbih0LGUpe3JldHVybiBYYygpLm5ld1JlYWRhYmxlU3RyZWFtRnJvbVN0cmVhbVJlYWRhYmxlKHQsZSl9O0Yud3JhcD1mdW5jdGlvbih0LGUpe3ZhciByLGk7cmV0dXJuIG5ldyBGKHtvYmplY3RNb2RlOihyPShpPXQucmVhZGFibGVPYmplY3RNb2RlKSE9PW51bGwmJmkhPT12b2lkIDA/aTp0Lm9iamVjdE1vZGUpIT09bnVsbCYmciE9PXZvaWQgMD9yOiEwLC4uLmUsZGVzdHJveShuLG8pe0ZyLmRlc3Ryb3llcih0LG4pLG8obik7fX0pLndyYXAodCl9O30pO3ZhciBobz1NKChmUixjaCk9PntfKCk7digpO20oKTt2YXIgY3I9TnQoKSx7QXJyYXlQcm90b3R5cGVTbGljZTpyaCxFcnJvcjpBXyxGdW5jdGlvblByb3RvdHlwZVN5bWJvbEhhc0luc3RhbmNlOmloLE9iamVjdERlZmluZVByb3BlcnR5Om5oLE9iamVjdERlZmluZVByb3BlcnRpZXM6SV8sT2JqZWN0U2V0UHJvdG90eXBlT2Y6c2gsU3RyaW5nUHJvdG90eXBlVG9Mb3dlckNhc2U6VF8sU3ltYm9sOlJfLFN5bWJvbEhhc0luc3RhbmNlOkNffT1jZSgpO2NoLmV4cG9ydHM9aWU7aWUuV3JpdGFibGVTdGF0ZT13aTt2YXJ7RXZlbnRFbWl0dGVyOkJffT0oc3IoKSxYKG5yKSkseWk9bm4oKS5TdHJlYW0se0J1ZmZlcjpwbn09KGJlKCksWChtZSkpLGJuPWlyKCkse2FkZEFib3J0U2lnbmFsOlBffT1kaSgpLHtnZXRIaWdoV2F0ZXJNYXJrOmtfLGdldERlZmF1bHRIaWdoV2F0ZXJNYXJrOk9ffT1hbigpLHtFUlJfSU5WQUxJRF9BUkdfVFlQRTp4XyxFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRDpNXyxFUlJfTVVMVElQTEVfQ0FMTEJBQ0s6b2gsRVJSX1NUUkVBTV9DQU5OT1RfUElQRTpMXyxFUlJfU1RSRUFNX0RFU1RST1lFRDpiaSxFUlJfU1RSRUFNX0FMUkVBRFlfRklOSVNIRUQ6VV8sRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUzpOXyxFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORDpxXyxFUlJfVU5LTk9XTl9FTkNPRElORzphaH09QWUoKS5jb2Rlcyx7ZXJyb3JPckRlc3Ryb3k6V3J9PWJuO3NoKGllLnByb3RvdHlwZSx5aS5wcm90b3R5cGUpO3NoKGllLHlpKTtmdW5jdGlvbiBsbygpe312YXIgJHI9Ul8oXCJrT25GaW5pc2hlZFwiKTtmdW5jdGlvbiB3aSh0LGUscil7dHlwZW9mIHIhPVwiYm9vbGVhblwiJiYocj1lIGluc3RhbmNlb2YgbnQoKSksdGhpcy5vYmplY3RNb2RlPSEhKHQmJnQub2JqZWN0TW9kZSksciYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhKHQmJnQud3JpdGFibGVPYmplY3RNb2RlKSksdGhpcy5oaWdoV2F0ZXJNYXJrPXQ/a18odGhpcyx0LFwid3JpdGFibGVIaWdoV2F0ZXJNYXJrXCIscik6T18oITEpLHRoaXMuZmluYWxDYWxsZWQ9ITEsdGhpcy5uZWVkRHJhaW49ITEsdGhpcy5lbmRpbmc9ITEsdGhpcy5lbmRlZD0hMSx0aGlzLmZpbmlzaGVkPSExLHRoaXMuZGVzdHJveWVkPSExO2xldCBpPSEhKHQmJnQuZGVjb2RlU3RyaW5ncz09PSExKTt0aGlzLmRlY29kZVN0cmluZ3M9IWksdGhpcy5kZWZhdWx0RW5jb2Rpbmc9dCYmdC5kZWZhdWx0RW5jb2Rpbmd8fFwidXRmOFwiLHRoaXMubGVuZ3RoPTAsdGhpcy53cml0aW5nPSExLHRoaXMuY29ya2VkPTAsdGhpcy5zeW5jPSEwLHRoaXMuYnVmZmVyUHJvY2Vzc2luZz0hMSx0aGlzLm9ud3JpdGU9al8uYmluZCh2b2lkIDAsZSksdGhpcy53cml0ZWNiPW51bGwsdGhpcy53cml0ZWxlbj0wLHRoaXMuYWZ0ZXJXcml0ZVRpY2tJbmZvPW51bGwseW4odGhpcyksdGhpcy5wZW5kaW5nY2I9MCx0aGlzLmNvbnN0cnVjdGVkPSEwLHRoaXMucHJlZmluaXNoZWQ9ITEsdGhpcy5lcnJvckVtaXR0ZWQ9ITEsdGhpcy5lbWl0Q2xvc2U9IXR8fHQuZW1pdENsb3NlIT09ITEsdGhpcy5hdXRvRGVzdHJveT0hdHx8dC5hdXRvRGVzdHJveSE9PSExLHRoaXMuZXJyb3JlZD1udWxsLHRoaXMuY2xvc2VkPSExLHRoaXMuY2xvc2VFbWl0dGVkPSExLHRoaXNbJHJdPVtdO31mdW5jdGlvbiB5bih0KXt0LmJ1ZmZlcmVkPVtdLHQuYnVmZmVyZWRJbmRleD0wLHQuYWxsQnVmZmVycz0hMCx0LmFsbE5vb3A9ITA7fXdpLnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oKXtyZXR1cm4gcmgodGhpcy5idWZmZXJlZCx0aGlzLmJ1ZmZlcmVkSW5kZXgpfTtuaCh3aS5wcm90b3R5cGUsXCJidWZmZXJlZFJlcXVlc3RDb3VudFwiLHtfX3Byb3RvX186bnVsbCxnZXQoKXtyZXR1cm4gdGhpcy5idWZmZXJlZC5sZW5ndGgtdGhpcy5idWZmZXJlZEluZGV4fX0pO2Z1bmN0aW9uIGllKHQpe2xldCBlPXRoaXMgaW5zdGFuY2VvZiBudCgpO2lmKCFlJiYhaWgoaWUsdGhpcykpcmV0dXJuIG5ldyBpZSh0KTt0aGlzLl93cml0YWJsZVN0YXRlPW5ldyB3aSh0LHRoaXMsZSksdCYmKHR5cGVvZiB0LndyaXRlPT1cImZ1bmN0aW9uXCImJih0aGlzLl93cml0ZT10LndyaXRlKSx0eXBlb2YgdC53cml0ZXY9PVwiZnVuY3Rpb25cIiYmKHRoaXMuX3dyaXRldj10LndyaXRldiksdHlwZW9mIHQuZGVzdHJveT09XCJmdW5jdGlvblwiJiYodGhpcy5fZGVzdHJveT10LmRlc3Ryb3kpLHR5cGVvZiB0LmZpbmFsPT1cImZ1bmN0aW9uXCImJih0aGlzLl9maW5hbD10LmZpbmFsKSx0eXBlb2YgdC5jb25zdHJ1Y3Q9PVwiZnVuY3Rpb25cIiYmKHRoaXMuX2NvbnN0cnVjdD10LmNvbnN0cnVjdCksdC5zaWduYWwmJlBfKHQuc2lnbmFsLHRoaXMpKSx5aS5jYWxsKHRoaXMsdCksYm4uY29uc3RydWN0KHRoaXMsKCk9PntsZXQgcj10aGlzLl93cml0YWJsZVN0YXRlO3Iud3JpdGluZ3x8Zm8odGhpcyxyKSxjbyh0aGlzLHIpO30pO31uaChpZSxDXyx7X19wcm90b19fOm51bGwsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGloKHRoaXMsdCk/ITA6dGhpcyE9PWllPyExOnQmJnQuX3dyaXRhYmxlU3RhdGUgaW5zdGFuY2VvZiB3aX19KTtpZS5wcm90b3R5cGUucGlwZT1mdW5jdGlvbigpe1dyKHRoaXMsbmV3IExfKTt9O2Z1bmN0aW9uIGxoKHQsZSxyLGkpe2xldCBuPXQuX3dyaXRhYmxlU3RhdGU7aWYodHlwZW9mIHI9PVwiZnVuY3Rpb25cIilpPXIscj1uLmRlZmF1bHRFbmNvZGluZztlbHNlIHtpZighcilyPW4uZGVmYXVsdEVuY29kaW5nO2Vsc2UgaWYociE9PVwiYnVmZmVyXCImJiFwbi5pc0VuY29kaW5nKHIpKXRocm93IG5ldyBhaChyKTt0eXBlb2YgaSE9XCJmdW5jdGlvblwiJiYoaT1sbyk7fWlmKGU9PT1udWxsKXRocm93IG5ldyBOXztpZighbi5vYmplY3RNb2RlKWlmKHR5cGVvZiBlPT1cInN0cmluZ1wiKW4uZGVjb2RlU3RyaW5ncyE9PSExJiYoZT1wbi5mcm9tKGUscikscj1cImJ1ZmZlclwiKTtlbHNlIGlmKGUgaW5zdGFuY2VvZiBwbilyPVwiYnVmZmVyXCI7ZWxzZSBpZih5aS5faXNVaW50OEFycmF5KGUpKWU9eWkuX3VpbnQ4QXJyYXlUb0J1ZmZlcihlKSxyPVwiYnVmZmVyXCI7ZWxzZSB0aHJvdyBuZXcgeF8oXCJjaHVua1wiLFtcInN0cmluZ1wiLFwiQnVmZmVyXCIsXCJVaW50OEFycmF5XCJdLGUpO2xldCBvO3JldHVybiBuLmVuZGluZz9vPW5ldyBxXzpuLmRlc3Ryb3llZCYmKG89bmV3IGJpKFwid3JpdGVcIikpLG8/KGNyLm5leHRUaWNrKGksbyksV3IodCxvLCEwKSxvKToobi5wZW5kaW5nY2IrKyxEXyh0LG4sZSxyLGkpKX1pZS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBsaCh0aGlzLHQsZSxyKT09PSEwfTtpZS5wcm90b3R5cGUuY29yaz1mdW5jdGlvbigpe3RoaXMuX3dyaXRhYmxlU3RhdGUuY29ya2VkKys7fTtpZS5wcm90b3R5cGUudW5jb3JrPWZ1bmN0aW9uKCl7bGV0IHQ9dGhpcy5fd3JpdGFibGVTdGF0ZTt0LmNvcmtlZCYmKHQuY29ya2VkLS0sdC53cml0aW5nfHxmbyh0aGlzLHQpKTt9O2llLnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2Rpbmc9ZnVuY3Rpb24oZSl7aWYodHlwZW9mIGU9PVwic3RyaW5nXCImJihlPVRfKGUpKSwhcG4uaXNFbmNvZGluZyhlKSl0aHJvdyBuZXcgYWgoZSk7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nPWUsdGhpc307ZnVuY3Rpb24gRF8odCxlLHIsaSxuKXtsZXQgbz1lLm9iamVjdE1vZGU/MTpyLmxlbmd0aDtlLmxlbmd0aCs9bztsZXQgcz1lLmxlbmd0aDxlLmhpZ2hXYXRlck1hcms7cmV0dXJuIHN8fChlLm5lZWREcmFpbj0hMCksZS53cml0aW5nfHxlLmNvcmtlZHx8ZS5lcnJvcmVkfHwhZS5jb25zdHJ1Y3RlZD8oZS5idWZmZXJlZC5wdXNoKHtjaHVuazpyLGVuY29kaW5nOmksY2FsbGJhY2s6bn0pLGUuYWxsQnVmZmVycyYmaSE9PVwiYnVmZmVyXCImJihlLmFsbEJ1ZmZlcnM9ITEpLGUuYWxsTm9vcCYmbiE9PWxvJiYoZS5hbGxOb29wPSExKSk6KGUud3JpdGVsZW49byxlLndyaXRlY2I9bixlLndyaXRpbmc9ITAsZS5zeW5jPSEwLHQuX3dyaXRlKHIsaSxlLm9ud3JpdGUpLGUuc3luYz0hMSkscyYmIWUuZXJyb3JlZCYmIWUuZGVzdHJveWVkfWZ1bmN0aW9uIGVoKHQsZSxyLGksbixvLHMpe2Uud3JpdGVsZW49aSxlLndyaXRlY2I9cyxlLndyaXRpbmc9ITAsZS5zeW5jPSEwLGUuZGVzdHJveWVkP2Uub253cml0ZShuZXcgYmkoXCJ3cml0ZVwiKSk6cj90Ll93cml0ZXYobixlLm9ud3JpdGUpOnQuX3dyaXRlKG4sbyxlLm9ud3JpdGUpLGUuc3luYz0hMTt9ZnVuY3Rpb24gdGgodCxlLHIsaSl7LS1lLnBlbmRpbmdjYixpKHIpLHVvKGUpLFdyKHQscik7fWZ1bmN0aW9uIGpfKHQsZSl7bGV0IHI9dC5fd3JpdGFibGVTdGF0ZSxpPXIuc3luYyxuPXIud3JpdGVjYjtpZih0eXBlb2YgbiE9XCJmdW5jdGlvblwiKXtXcih0LG5ldyBvaCk7cmV0dXJufXIud3JpdGluZz0hMSxyLndyaXRlY2I9bnVsbCxyLmxlbmd0aC09ci53cml0ZWxlbixyLndyaXRlbGVuPTAsZT8oZS5zdGFjayxyLmVycm9yZWR8fChyLmVycm9yZWQ9ZSksdC5fcmVhZGFibGVTdGF0ZSYmIXQuX3JlYWRhYmxlU3RhdGUuZXJyb3JlZCYmKHQuX3JlYWRhYmxlU3RhdGUuZXJyb3JlZD1lKSxpP2NyLm5leHRUaWNrKHRoLHQscixlLG4pOnRoKHQscixlLG4pKTooci5idWZmZXJlZC5sZW5ndGg+ci5idWZmZXJlZEluZGV4JiZmbyh0LHIpLGk/ci5hZnRlcldyaXRlVGlja0luZm8hPT1udWxsJiZyLmFmdGVyV3JpdGVUaWNrSW5mby5jYj09PW4/ci5hZnRlcldyaXRlVGlja0luZm8uY291bnQrKzooci5hZnRlcldyaXRlVGlja0luZm89e2NvdW50OjEsY2I6bixzdHJlYW06dCxzdGF0ZTpyfSxjci5uZXh0VGljayhGXyxyLmFmdGVyV3JpdGVUaWNrSW5mbykpOnVoKHQsciwxLG4pKTt9ZnVuY3Rpb24gRl8oe3N0cmVhbTp0LHN0YXRlOmUsY291bnQ6cixjYjppfSl7cmV0dXJuIGUuYWZ0ZXJXcml0ZVRpY2tJbmZvPW51bGwsdWgodCxlLHIsaSl9ZnVuY3Rpb24gdWgodCxlLHIsaSl7Zm9yKCFlLmVuZGluZyYmIXQuZGVzdHJveWVkJiZlLmxlbmd0aD09PTAmJmUubmVlZERyYWluJiYoZS5uZWVkRHJhaW49ITEsdC5lbWl0KFwiZHJhaW5cIikpO3ItLSA+MDspZS5wZW5kaW5nY2ItLSxpKCk7ZS5kZXN0cm95ZWQmJnVvKGUpLGNvKHQsZSk7fWZ1bmN0aW9uIHVvKHQpe2lmKHQud3JpdGluZylyZXR1cm47Zm9yKGxldCBuPXQuYnVmZmVyZWRJbmRleDtuPHQuYnVmZmVyZWQubGVuZ3RoOysrbil7dmFyIGU7bGV0e2NodW5rOm8sY2FsbGJhY2s6c309dC5idWZmZXJlZFtuXSxhPXQub2JqZWN0TW9kZT8xOm8ubGVuZ3RoO3QubGVuZ3RoLT1hLHMoKGU9dC5lcnJvcmVkKSE9PW51bGwmJmUhPT12b2lkIDA/ZTpuZXcgYmkoXCJ3cml0ZVwiKSk7fWxldCByPXRbJHJdLnNwbGljZSgwKTtmb3IobGV0IG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk7cltuXSgoaT10LmVycm9yZWQpIT09bnVsbCYmaSE9PXZvaWQgMD9pOm5ldyBiaShcImVuZFwiKSk7fXluKHQpO31mdW5jdGlvbiBmbyh0LGUpe2lmKGUuY29ya2VkfHxlLmJ1ZmZlclByb2Nlc3Npbmd8fGUuZGVzdHJveWVkfHwhZS5jb25zdHJ1Y3RlZClyZXR1cm47bGV0e2J1ZmZlcmVkOnIsYnVmZmVyZWRJbmRleDppLG9iamVjdE1vZGU6bn09ZSxvPXIubGVuZ3RoLWk7aWYoIW8pcmV0dXJuO2xldCBzPWk7aWYoZS5idWZmZXJQcm9jZXNzaW5nPSEwLG8+MSYmdC5fd3JpdGV2KXtlLnBlbmRpbmdjYi09by0xO2xldCBhPWUuYWxsTm9vcD9sbzpjPT57Zm9yKGxldCBoPXM7aDxyLmxlbmd0aDsrK2gpcltoXS5jYWxsYmFjayhjKTt9LGw9ZS5hbGxOb29wJiZzPT09MD9yOnJoKHIscyk7bC5hbGxCdWZmZXJzPWUuYWxsQnVmZmVycyxlaCh0LGUsITAsZS5sZW5ndGgsbCxcIlwiLGEpLHluKGUpO31lbHNlIHtkb3tsZXR7Y2h1bms6YSxlbmNvZGluZzpsLGNhbGxiYWNrOmN9PXJbc107cltzKytdPW51bGw7bGV0IGg9bj8xOmEubGVuZ3RoO2VoKHQsZSwhMSxoLGEsbCxjKTt9d2hpbGUoczxyLmxlbmd0aCYmIWUud3JpdGluZyk7cz09PXIubGVuZ3RoP3luKGUpOnM+MjU2PyhyLnNwbGljZSgwLHMpLGUuYnVmZmVyZWRJbmRleD0wKTplLmJ1ZmZlcmVkSW5kZXg9czt9ZS5idWZmZXJQcm9jZXNzaW5nPSExO31pZS5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLl93cml0ZXYpdGhpcy5fd3JpdGV2KFt7Y2h1bms6dCxlbmNvZGluZzplfV0scik7ZWxzZSB0aHJvdyBuZXcgTV8oXCJfd3JpdGUoKVwiKX07aWUucHJvdG90eXBlLl93cml0ZXY9bnVsbDtpZS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKHQsZSxyKXtsZXQgaT10aGlzLl93cml0YWJsZVN0YXRlO3R5cGVvZiB0PT1cImZ1bmN0aW9uXCI/KHI9dCx0PW51bGwsZT1udWxsKTp0eXBlb2YgZT09XCJmdW5jdGlvblwiJiYocj1lLGU9bnVsbCk7bGV0IG47aWYodCE9bnVsbCl7bGV0IG89bGgodGhpcyx0LGUpO28gaW5zdGFuY2VvZiBBXyYmKG49byk7fXJldHVybiBpLmNvcmtlZCYmKGkuY29ya2VkPTEsdGhpcy51bmNvcmsoKSksbnx8KCFpLmVycm9yZWQmJiFpLmVuZGluZz8oaS5lbmRpbmc9ITAsY28odGhpcyxpLCEwKSxpLmVuZGVkPSEwKTppLmZpbmlzaGVkP249bmV3IFVfKFwiZW5kXCIpOmkuZGVzdHJveWVkJiYobj1uZXcgYmkoXCJlbmRcIikpKSx0eXBlb2Ygcj09XCJmdW5jdGlvblwiJiYobnx8aS5maW5pc2hlZD9jci5uZXh0VGljayhyLG4pOmlbJHJdLnB1c2gocikpLHRoaXN9O2Z1bmN0aW9uIGduKHQpe3JldHVybiB0LmVuZGluZyYmIXQuZGVzdHJveWVkJiZ0LmNvbnN0cnVjdGVkJiZ0Lmxlbmd0aD09PTAmJiF0LmVycm9yZWQmJnQuYnVmZmVyZWQubGVuZ3RoPT09MCYmIXQuZmluaXNoZWQmJiF0LndyaXRpbmcmJiF0LmVycm9yRW1pdHRlZCYmIXQuY2xvc2VFbWl0dGVkfWZ1bmN0aW9uIFdfKHQsZSl7bGV0IHI9ITE7ZnVuY3Rpb24gaShuKXtpZihyKXtXcih0LG4/P29oKCkpO3JldHVybn1pZihyPSEwLGUucGVuZGluZ2NiLS0sbil7bGV0IG89ZVskcl0uc3BsaWNlKDApO2ZvcihsZXQgcz0wO3M8by5sZW5ndGg7cysrKW9bc10obik7V3IodCxuLGUuc3luYyk7fWVsc2UgZ24oZSkmJihlLnByZWZpbmlzaGVkPSEwLHQuZW1pdChcInByZWZpbmlzaFwiKSxlLnBlbmRpbmdjYisrLGNyLm5leHRUaWNrKGFvLHQsZSkpO31lLnN5bmM9ITAsZS5wZW5kaW5nY2IrKzt0cnl7dC5fZmluYWwoaSk7fWNhdGNoKG4pe2kobik7fWUuc3luYz0hMTt9ZnVuY3Rpb24gJF8odCxlKXshZS5wcmVmaW5pc2hlZCYmIWUuZmluYWxDYWxsZWQmJih0eXBlb2YgdC5fZmluYWw9PVwiZnVuY3Rpb25cIiYmIWUuZGVzdHJveWVkPyhlLmZpbmFsQ2FsbGVkPSEwLFdfKHQsZSkpOihlLnByZWZpbmlzaGVkPSEwLHQuZW1pdChcInByZWZpbmlzaFwiKSkpO31mdW5jdGlvbiBjbyh0LGUscil7Z24oZSkmJigkXyh0LGUpLGUucGVuZGluZ2NiPT09MCYmKHI/KGUucGVuZGluZ2NiKyssY3IubmV4dFRpY2soKGksbik9PntnbihuKT9hbyhpLG4pOm4ucGVuZGluZ2NiLS07fSx0LGUpKTpnbihlKSYmKGUucGVuZGluZ2NiKyssYW8odCxlKSkpKTt9ZnVuY3Rpb24gYW8odCxlKXtlLnBlbmRpbmdjYi0tLGUuZmluaXNoZWQ9ITA7bGV0IHI9ZVskcl0uc3BsaWNlKDApO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKXJbaV0oKTtpZih0LmVtaXQoXCJmaW5pc2hcIiksZS5hdXRvRGVzdHJveSl7bGV0IGk9dC5fcmVhZGFibGVTdGF0ZTsoIWl8fGkuYXV0b0Rlc3Ryb3kmJihpLmVuZEVtaXR0ZWR8fGkucmVhZGFibGU9PT0hMSkpJiZ0LmRlc3Ryb3koKTt9fUlfKGllLnByb3RvdHlwZSx7Y2xvc2VkOntfX3Byb3RvX186bnVsbCxnZXQoKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZT90aGlzLl93cml0YWJsZVN0YXRlLmNsb3NlZDohMX19LGRlc3Ryb3llZDp7X19wcm90b19fOm51bGwsZ2V0KCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGU/dGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ6ITF9LHNldCh0KXt0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9dCk7fX0sd3JpdGFibGU6e19fcHJvdG9fXzpudWxsLGdldCgpe2xldCB0PXRoaXMuX3dyaXRhYmxlU3RhdGU7cmV0dXJuICEhdCYmdC53cml0YWJsZSE9PSExJiYhdC5kZXN0cm95ZWQmJiF0LmVycm9yZWQmJiF0LmVuZGluZyYmIXQuZW5kZWR9LHNldCh0KXt0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS53cml0YWJsZT0hIXQpO319LHdyaXRhYmxlRmluaXNoZWQ6e19fcHJvdG9fXzpudWxsLGdldCgpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlP3RoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ6ITF9fSx3cml0YWJsZU9iamVjdE1vZGU6e19fcHJvdG9fXzpudWxsLGdldCgpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlP3RoaXMuX3dyaXRhYmxlU3RhdGUub2JqZWN0TW9kZTohMX19LHdyaXRhYmxlQnVmZmVyOntfX3Byb3RvX186bnVsbCxnZXQoKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKX19LHdyaXRhYmxlRW5kZWQ6e19fcHJvdG9fXzpudWxsLGdldCgpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlP3RoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nOiExfX0sd3JpdGFibGVOZWVkRHJhaW46e19fcHJvdG9fXzpudWxsLGdldCgpe2xldCB0PXRoaXMuX3dyaXRhYmxlU3RhdGU7cmV0dXJuIHQ/IXQuZGVzdHJveWVkJiYhdC5lbmRpbmcmJnQubmVlZERyYWluOiExfX0sd3JpdGFibGVIaWdoV2F0ZXJNYXJrOntfX3Byb3RvX186bnVsbCxnZXQoKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0sd3JpdGFibGVDb3JrZWQ6e19fcHJvdG9fXzpudWxsLGdldCgpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlP3RoaXMuX3dyaXRhYmxlU3RhdGUuY29ya2VkOjB9fSx3cml0YWJsZUxlbmd0aDp7X19wcm90b19fOm51bGwsZ2V0KCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUubGVuZ3RofX0sZXJyb3JlZDp7X19wcm90b19fOm51bGwsZW51bWVyYWJsZTohMSxnZXQoKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZT90aGlzLl93cml0YWJsZVN0YXRlLmVycm9yZWQ6bnVsbH19LHdyaXRhYmxlQWJvcnRlZDp7X19wcm90b19fOm51bGwsZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gISEodGhpcy5fd3JpdGFibGVTdGF0ZS53cml0YWJsZSE9PSExJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR8fHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JlZCkmJiF0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkKX19fSk7dmFyIEhfPWJuLmRlc3Ryb3k7aWUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24odCxlKXtsZXQgcj10aGlzLl93cml0YWJsZVN0YXRlO3JldHVybiAhci5kZXN0cm95ZWQmJihyLmJ1ZmZlcmVkSW5kZXg8ci5idWZmZXJlZC5sZW5ndGh8fHJbJHJdLmxlbmd0aCkmJmNyLm5leHRUaWNrKHVvLHIpLEhfLmNhbGwodGhpcyx0LGUpLHRoaXN9O2llLnByb3RvdHlwZS5fdW5kZXN0cm95PWJuLnVuZGVzdHJveTtpZS5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24odCxlKXtlKHQpO307aWUucHJvdG90eXBlW0JfLmNhcHR1cmVSZWplY3Rpb25TeW1ib2xdPWZ1bmN0aW9uKHQpe3RoaXMuZGVzdHJveSh0KTt9O3ZhciBvbztmdW5jdGlvbiBmaCgpe3JldHVybiBvbz09PXZvaWQgMCYmKG9vPXt9KSxvb31pZS5mcm9tV2ViPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZoKCkubmV3U3RyZWFtV3JpdGFibGVGcm9tV3JpdGFibGVTdHJlYW0odCxlKX07aWUudG9XZWI9ZnVuY3Rpb24odCl7cmV0dXJuIGZoKCkubmV3V3JpdGFibGVTdHJlYW1Gcm9tU3RyZWFtV3JpdGFibGUodCl9O30pO3ZhciBTaD1NKChtUixFaCk9PntfKCk7digpO20oKTt2YXIgcG89TnQoKSxWXz0oYmUoKSxYKG1lKSkse2lzUmVhZGFibGU6el8saXNXcml0YWJsZTpLXyxpc0l0ZXJhYmxlOmhoLGlzTm9kZVN0cmVhbTpHXyxpc1JlYWRhYmxlTm9kZVN0cmVhbTpkaCxpc1dyaXRhYmxlTm9kZVN0cmVhbTpwaCxpc0R1cGxleE5vZGVTdHJlYW06UV99PXR0KCksZ2g9dnQoKSx7QWJvcnRFcnJvcjp2aCxjb2Rlczp7RVJSX0lOVkFMSURfQVJHX1RZUEU6WV8sRVJSX0lOVkFMSURfUkVUVVJOX1ZBTFVFOnlofX09QWUoKSx7ZGVzdHJveWVyOkhyfT1pcigpLEpfPW50KCksWF89Z2koKSx7Y3JlYXRlRGVmZXJyZWRQcm9taXNlOmJofT1KZSgpLHdoPVpzKCksX2g9Z2xvYmFsVGhpcy5CbG9ifHxWXy5CbG9iLFpfPXR5cGVvZiBfaDxcInVcIj9mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIF9ofTpmdW5jdGlvbihlKXtyZXR1cm4gITF9LGUwPWdsb2JhbFRoaXMuQWJvcnRDb250cm9sbGVyfHx6aSgpLkFib3J0Q29udHJvbGxlcix7RnVuY3Rpb25Qcm90b3R5cGVDYWxsOm1ofT1jZSgpLGhyPWNsYXNzIGV4dGVuZHMgSl97Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksZT8ucmVhZGFibGU9PT0hMSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGFibGU9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZD0hMCx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQ9ITApLGU/LndyaXRhYmxlPT09ITEmJih0aGlzLl93cml0YWJsZVN0YXRlLndyaXRhYmxlPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nPSEwLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQ9ITAsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZD0hMCk7fX07RWguZXhwb3J0cz1mdW5jdGlvbiB0KGUscil7aWYoUV8oZSkpcmV0dXJuIGU7aWYoZGgoZSkpcmV0dXJuIHduKHtyZWFkYWJsZTplfSk7aWYocGgoZSkpcmV0dXJuIHduKHt3cml0YWJsZTplfSk7aWYoR18oZSkpcmV0dXJuIHduKHt3cml0YWJsZTohMSxyZWFkYWJsZTohMX0pO2lmKHR5cGVvZiBlPT1cImZ1bmN0aW9uXCIpe2xldHt2YWx1ZTpuLHdyaXRlOm8sZmluYWw6cyxkZXN0cm95OmF9PXQwKGUpO2lmKGhoKG4pKXJldHVybiB3aChocixuLHtvYmplY3RNb2RlOiEwLHdyaXRlOm8sZmluYWw6cyxkZXN0cm95OmF9KTtsZXQgbD1uPy50aGVuO2lmKHR5cGVvZiBsPT1cImZ1bmN0aW9uXCIpe2xldCBjLGg9bWgobCxuLGQ9PntpZihkIT1udWxsKXRocm93IG5ldyB5aChcIm51bGx5XCIsXCJib2R5XCIsZCl9LGQ9PntIcihjLGQpO30pO3JldHVybiBjPW5ldyBocih7b2JqZWN0TW9kZTohMCxyZWFkYWJsZTohMSx3cml0ZTpvLGZpbmFsKGQpe3MoYXN5bmMoKT0+e3RyeXthd2FpdCBoLHBvLm5leHRUaWNrKGQsbnVsbCk7fWNhdGNoKGcpe3BvLm5leHRUaWNrKGQsZyk7fX0pO30sZGVzdHJveTphfSl9dGhyb3cgbmV3IHloKFwiSXRlcmFibGUsIEFzeW5jSXRlcmFibGUgb3IgQXN5bmNGdW5jdGlvblwiLHIsbil9aWYoWl8oZSkpcmV0dXJuIHQoZS5hcnJheUJ1ZmZlcigpKTtpZihoaChlKSlyZXR1cm4gd2goaHIsZSx7b2JqZWN0TW9kZTohMCx3cml0YWJsZTohMX0pO2lmKHR5cGVvZiBlPy53cml0YWJsZT09XCJvYmplY3RcInx8dHlwZW9mIGU/LnJlYWRhYmxlPT1cIm9iamVjdFwiKXtsZXQgbj1lIT1udWxsJiZlLnJlYWRhYmxlP2RoKGU/LnJlYWRhYmxlKT9lPy5yZWFkYWJsZTp0KGUucmVhZGFibGUpOnZvaWQgMCxvPWUhPW51bGwmJmUud3JpdGFibGU/cGgoZT8ud3JpdGFibGUpP2U/LndyaXRhYmxlOnQoZS53cml0YWJsZSk6dm9pZCAwO3JldHVybiB3bih7cmVhZGFibGU6bix3cml0YWJsZTpvfSl9bGV0IGk9ZT8udGhlbjtpZih0eXBlb2YgaT09XCJmdW5jdGlvblwiKXtsZXQgbjtyZXR1cm4gbWgoaSxlLG89PntvIT1udWxsJiZuLnB1c2gobyksbi5wdXNoKG51bGwpO30sbz0+e0hyKG4sbyk7fSksbj1uZXcgaHIoe29iamVjdE1vZGU6ITAsd3JpdGFibGU6ITEscmVhZCgpe319KX10aHJvdyBuZXcgWV8ocixbXCJCbG9iXCIsXCJSZWFkYWJsZVN0cmVhbVwiLFwiV3JpdGFibGVTdHJlYW1cIixcIlN0cmVhbVwiLFwiSXRlcmFibGVcIixcIkFzeW5jSXRlcmFibGVcIixcIkZ1bmN0aW9uXCIsXCJ7IHJlYWRhYmxlLCB3cml0YWJsZSB9IHBhaXJcIixcIlByb21pc2VcIl0sZSl9O2Z1bmN0aW9uIHQwKHQpe2xldHtwcm9taXNlOmUscmVzb2x2ZTpyfT1iaCgpLGk9bmV3IGUwLG49aS5zaWduYWw7cmV0dXJuIHt2YWx1ZTp0KGFzeW5jIGZ1bmN0aW9uKigpe2Zvcig7Oyl7bGV0IHM9ZTtlPW51bGw7bGV0e2NodW5rOmEsZG9uZTpsLGNiOmN9PWF3YWl0IHM7aWYocG8ubmV4dFRpY2soYyksbClyZXR1cm47aWYobi5hYm9ydGVkKXRocm93IG5ldyB2aCh2b2lkIDAse2NhdXNlOm4ucmVhc29ufSk7KCgoe3Byb21pc2U6ZSxyZXNvbHZlOnJ9PWJoKCkpKSkseWllbGQgYTt9fSgpLHtzaWduYWw6bn0pLHdyaXRlKHMsYSxsKXtsZXQgYz1yO3I9bnVsbCxjKHtjaHVuazpzLGRvbmU6ITEsY2I6bH0pO30sZmluYWwocyl7bGV0IGE9cjtyPW51bGwsYSh7ZG9uZTohMCxjYjpzfSk7fSxkZXN0cm95KHMsYSl7aS5hYm9ydCgpLGEocyk7fX19ZnVuY3Rpb24gd24odCl7bGV0IGU9dC5yZWFkYWJsZSYmdHlwZW9mIHQucmVhZGFibGUucmVhZCE9XCJmdW5jdGlvblwiP1hfLndyYXAodC5yZWFkYWJsZSk6dC5yZWFkYWJsZSxyPXQud3JpdGFibGUsaT0hIXpfKGUpLG49ISFLXyhyKSxvLHMsYSxsLGM7ZnVuY3Rpb24gaChkKXtsZXQgZz1sO2w9bnVsbCxnP2coZCk6ZCYmYy5kZXN0cm95KGQpO31yZXR1cm4gYz1uZXcgaHIoe3JlYWRhYmxlT2JqZWN0TW9kZTohIShlIT1udWxsJiZlLnJlYWRhYmxlT2JqZWN0TW9kZSksd3JpdGFibGVPYmplY3RNb2RlOiEhKHIhPW51bGwmJnIud3JpdGFibGVPYmplY3RNb2RlKSxyZWFkYWJsZTppLHdyaXRhYmxlOm59KSxuJiYoZ2gocixkPT57bj0hMSxkJiZIcihlLGQpLGgoZCk7fSksYy5fd3JpdGU9ZnVuY3Rpb24oZCxnLHkpe3Iud3JpdGUoZCxnKT95KCk6bz15O30sYy5fZmluYWw9ZnVuY3Rpb24oZCl7ci5lbmQoKSxzPWQ7fSxyLm9uKFwiZHJhaW5cIixmdW5jdGlvbigpe2lmKG8pe2xldCBkPW87bz1udWxsLGQoKTt9fSksci5vbihcImZpbmlzaFwiLGZ1bmN0aW9uKCl7aWYocyl7bGV0IGQ9cztzPW51bGwsZCgpO319KSksaSYmKGdoKGUsZD0+e2k9ITEsZCYmSHIoZSxkKSxoKGQpO30pLGUub24oXCJyZWFkYWJsZVwiLGZ1bmN0aW9uKCl7aWYoYSl7bGV0IGQ9YTthPW51bGwsZCgpO319KSxlLm9uKFwiZW5kXCIsZnVuY3Rpb24oKXtjLnB1c2gobnVsbCk7fSksYy5fcmVhZD1mdW5jdGlvbigpe2Zvcig7Oyl7bGV0IGQ9ZS5yZWFkKCk7aWYoZD09PW51bGwpe2E9Yy5fcmVhZDtyZXR1cm59aWYoIWMucHVzaChkKSlyZXR1cm59fSksYy5fZGVzdHJveT1mdW5jdGlvbihkLGcpeyFkJiZsIT09bnVsbCYmKGQ9bmV3IHZoKSxhPW51bGwsbz1udWxsLHM9bnVsbCxsPT09bnVsbD9nKGQpOihsPWcsSHIocixkKSxIcihlLGQpKTt9LGN9fSk7dmFyIG50PU0oKFBSLFRoKT0+e18oKTt2KCk7bSgpO3ZhcntPYmplY3REZWZpbmVQcm9wZXJ0aWVzOnIwLE9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcjpJdCxPYmplY3RLZXlzOmkwLE9iamVjdFNldFByb3RvdHlwZU9mOkFofT1jZSgpO1RoLmV4cG9ydHM9VmU7dmFyIGJvPWdpKCksTmU9aG8oKTtBaChWZS5wcm90b3R5cGUsYm8ucHJvdG90eXBlKTtBaChWZSxibyk7e2xldCB0PWkwKE5lLnByb3RvdHlwZSk7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspe2xldCByPXRbZV07VmUucHJvdG90eXBlW3JdfHwoVmUucHJvdG90eXBlW3JdPU5lLnByb3RvdHlwZVtyXSk7fX1mdW5jdGlvbiBWZSh0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBWZSkpcmV0dXJuIG5ldyBWZSh0KTtiby5jYWxsKHRoaXMsdCksTmUuY2FsbCh0aGlzLHQpLHQ/KHRoaXMuYWxsb3dIYWxmT3Blbj10LmFsbG93SGFsZk9wZW4hPT0hMSx0LnJlYWRhYmxlPT09ITEmJih0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRhYmxlPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kZWQ9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkPSEwKSx0LndyaXRhYmxlPT09ITEmJih0aGlzLl93cml0YWJsZVN0YXRlLndyaXRhYmxlPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nPSEwLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQ9ITAsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZD0hMCkpOnRoaXMuYWxsb3dIYWxmT3Blbj0hMDt9cjAoVmUucHJvdG90eXBlLHt3cml0YWJsZTp7X19wcm90b19fOm51bGwsLi4uSXQoTmUucHJvdG90eXBlLFwid3JpdGFibGVcIil9LHdyaXRhYmxlSGlnaFdhdGVyTWFyazp7X19wcm90b19fOm51bGwsLi4uSXQoTmUucHJvdG90eXBlLFwid3JpdGFibGVIaWdoV2F0ZXJNYXJrXCIpfSx3cml0YWJsZU9iamVjdE1vZGU6e19fcHJvdG9fXzpudWxsLC4uLkl0KE5lLnByb3RvdHlwZSxcIndyaXRhYmxlT2JqZWN0TW9kZVwiKX0sd3JpdGFibGVCdWZmZXI6e19fcHJvdG9fXzpudWxsLC4uLkl0KE5lLnByb3RvdHlwZSxcIndyaXRhYmxlQnVmZmVyXCIpfSx3cml0YWJsZUxlbmd0aDp7X19wcm90b19fOm51bGwsLi4uSXQoTmUucHJvdG90eXBlLFwid3JpdGFibGVMZW5ndGhcIil9LHdyaXRhYmxlRmluaXNoZWQ6e19fcHJvdG9fXzpudWxsLC4uLkl0KE5lLnByb3RvdHlwZSxcIndyaXRhYmxlRmluaXNoZWRcIil9LHdyaXRhYmxlQ29ya2VkOntfX3Byb3RvX186bnVsbCwuLi5JdChOZS5wcm90b3R5cGUsXCJ3cml0YWJsZUNvcmtlZFwiKX0sd3JpdGFibGVFbmRlZDp7X19wcm90b19fOm51bGwsLi4uSXQoTmUucHJvdG90eXBlLFwid3JpdGFibGVFbmRlZFwiKX0sd3JpdGFibGVOZWVkRHJhaW46e19fcHJvdG9fXzpudWxsLC4uLkl0KE5lLnByb3RvdHlwZSxcIndyaXRhYmxlTmVlZERyYWluXCIpfSxkZXN0cm95ZWQ6e19fcHJvdG9fXzpudWxsLGdldCgpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlPT09dm9pZCAwfHx0aGlzLl93cml0YWJsZVN0YXRlPT09dm9pZCAwPyExOnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0KHQpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD10LHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPXQpO319fSk7dmFyIGdvO2Z1bmN0aW9uIEloKCl7cmV0dXJuIGdvPT09dm9pZCAwJiYoZ289e30pLGdvfVZlLmZyb21XZWI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gSWgoKS5uZXdTdHJlYW1EdXBsZXhGcm9tUmVhZGFibGVXcml0YWJsZVBhaXIodCxlKX07VmUudG9XZWI9ZnVuY3Rpb24odCl7cmV0dXJuIEloKCkubmV3UmVhZGFibGVXcml0YWJsZVBhaXJGcm9tRHVwbGV4KHQpfTt2YXIgeW87VmUuZnJvbT1mdW5jdGlvbih0KXtyZXR1cm4geW98fCh5bz1TaCgpKSx5byh0LFwiYm9keVwiKX07fSk7dmFyIG1vPU0oKGpSLENoKT0+e18oKTt2KCk7bSgpO3ZhcntPYmplY3RTZXRQcm90b3R5cGVPZjpSaCxTeW1ib2w6bjB9PWNlKCk7Q2guZXhwb3J0cz1UdDt2YXJ7RVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQ6czB9PUFlKCkuY29kZXMsX289bnQoKSx7Z2V0SGlnaFdhdGVyTWFyazpvMH09YW4oKTtSaChUdC5wcm90b3R5cGUsX28ucHJvdG90eXBlKTtSaChUdCxfbyk7dmFyIF9pPW4wKFwia0NhbGxiYWNrXCIpO2Z1bmN0aW9uIFR0KHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFR0KSlyZXR1cm4gbmV3IFR0KHQpO2xldCBlPXQ/bzAodGhpcyx0LFwicmVhZGFibGVIaWdoV2F0ZXJNYXJrXCIsITApOm51bGw7ZT09PTAmJih0PXsuLi50LGhpZ2hXYXRlck1hcms6bnVsbCxyZWFkYWJsZUhpZ2hXYXRlck1hcms6ZSx3cml0YWJsZUhpZ2hXYXRlck1hcms6dC53cml0YWJsZUhpZ2hXYXRlck1hcmt8fDB9KSxfby5jYWxsKHRoaXMsdCksdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLHRoaXNbX2ldPW51bGwsdCYmKHR5cGVvZiB0LnRyYW5zZm9ybT09XCJmdW5jdGlvblwiJiYodGhpcy5fdHJhbnNmb3JtPXQudHJhbnNmb3JtKSx0eXBlb2YgdC5mbHVzaD09XCJmdW5jdGlvblwiJiYodGhpcy5fZmx1c2g9dC5mbHVzaCkpLHRoaXMub24oXCJwcmVmaW5pc2hcIixhMCk7fWZ1bmN0aW9uIHdvKHQpe3R5cGVvZiB0aGlzLl9mbHVzaD09XCJmdW5jdGlvblwiJiYhdGhpcy5kZXN0cm95ZWQ/dGhpcy5fZmx1c2goKGUscik9PntpZihlKXt0P3QoZSk6dGhpcy5kZXN0cm95KGUpO3JldHVybn1yIT1udWxsJiZ0aGlzLnB1c2gociksdGhpcy5wdXNoKG51bGwpLHQmJnQoKTt9KToodGhpcy5wdXNoKG51bGwpLHQmJnQoKSk7fWZ1bmN0aW9uIGEwKCl7dGhpcy5fZmluYWwhPT13byYmd28uY2FsbCh0aGlzKTt9VHQucHJvdG90eXBlLl9maW5hbD13bztUdC5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7dGhyb3cgbmV3IHMwKFwiX3RyYW5zZm9ybSgpXCIpfTtUdC5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKHQsZSxyKXtsZXQgaT10aGlzLl9yZWFkYWJsZVN0YXRlLG49dGhpcy5fd3JpdGFibGVTdGF0ZSxvPWkubGVuZ3RoO3RoaXMuX3RyYW5zZm9ybSh0LGUsKHMsYSk9PntpZihzKXtyKHMpO3JldHVybn1hIT1udWxsJiZ0aGlzLnB1c2goYSksbi5lbmRlZHx8bz09PWkubGVuZ3RofHxpLmxlbmd0aDxpLmhpZ2hXYXRlck1hcms/cigpOnRoaXNbX2ldPXI7fSk7fTtUdC5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oKXtpZih0aGlzW19pXSl7bGV0IHQ9dGhpc1tfaV07dGhpc1tfaV09bnVsbCx0KCk7fX07fSk7dmFyIEVvPU0oKFlSLFBoKT0+e18oKTt2KCk7bSgpO3ZhcntPYmplY3RTZXRQcm90b3R5cGVPZjpCaH09Y2UoKTtQaC5leHBvcnRzPVZyO3ZhciB2bz1tbygpO0JoKFZyLnByb3RvdHlwZSx2by5wcm90b3R5cGUpO0JoKFZyLHZvKTtmdW5jdGlvbiBWcih0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBWcikpcmV0dXJuIG5ldyBWcih0KTt2by5jYWxsKHRoaXMsdCk7fVZyLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXtyKG51bGwsdCk7fTt9KTt2YXIgRW49TSgob0MsTGgpPT57XygpO3YoKTttKCk7dmFyIG1pPU50KCkse0FycmF5SXNBcnJheTpsMCxQcm9taXNlOnUwLFN5bWJvbEFzeW5jSXRlcmF0b3I6ZjB9PWNlKCksdm49dnQoKSx7b25jZTpjMH09SmUoKSxoMD1pcigpLGtoPW50KCkse2FnZ3JlZ2F0ZVR3b0Vycm9yczpkMCxjb2Rlczp7RVJSX0lOVkFMSURfQVJHX1RZUEU6UG8sRVJSX0lOVkFMSURfUkVUVVJOX1ZBTFVFOlNvLEVSUl9NSVNTSU5HX0FSR1M6cDAsRVJSX1NUUkVBTV9ERVNUUk9ZRUQ6ZzAsRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0U6eTB9LEFib3J0RXJyb3I6YjB9PUFlKCkse3ZhbGlkYXRlRnVuY3Rpb246dzAsdmFsaWRhdGVBYm9ydFNpZ25hbDpfMH09aGkoKSx7aXNJdGVyYWJsZTpkcixpc1JlYWRhYmxlOkFvLGlzUmVhZGFibGVOb2RlU3RyZWFtOm1uLGlzTm9kZVN0cmVhbTpPaCxpc1RyYW5zZm9ybVN0cmVhbTp6cixpc1dlYlN0cmVhbTptMCxpc1JlYWRhYmxlU3RyZWFtOklvLGlzUmVhZGFibGVFbmRlZDp2MH09dHQoKSxFMD1nbG9iYWxUaGlzLkFib3J0Q29udHJvbGxlcnx8emkoKS5BYm9ydENvbnRyb2xsZXIsVG8sUm87ZnVuY3Rpb24geGgodCxlLHIpe2xldCBpPSExO3Qub24oXCJjbG9zZVwiLCgpPT57aT0hMDt9KTtsZXQgbj12bih0LHtyZWFkYWJsZTplLHdyaXRhYmxlOnJ9LG89PntpPSFvO30pO3JldHVybiB7ZGVzdHJveTpvPT57aXx8KGk9ITAsaDAuZGVzdHJveWVyKHQsb3x8bmV3IGcwKFwicGlwZVwiKSkpO30sY2xlYW51cDpufX1mdW5jdGlvbiBTMCh0KXtyZXR1cm4gdzAodFt0Lmxlbmd0aC0xXSxcInN0cmVhbXNbc3RyZWFtLmxlbmd0aCAtIDFdXCIpLHQucG9wKCl9ZnVuY3Rpb24gQ28odCl7aWYoZHIodCkpcmV0dXJuIHQ7aWYobW4odCkpcmV0dXJuIEEwKHQpO3Rocm93IG5ldyBQbyhcInZhbFwiLFtcIlJlYWRhYmxlXCIsXCJJdGVyYWJsZVwiLFwiQXN5bmNJdGVyYWJsZVwiXSx0KX1hc3luYyBmdW5jdGlvbipBMCh0KXtSb3x8KFJvPWdpKCkpLHlpZWxkKlJvLnByb3RvdHlwZVtmMF0uY2FsbCh0KTt9YXN5bmMgZnVuY3Rpb24gX24odCxlLHIse2VuZDppfSl7bGV0IG4sbz1udWxsLHM9Yz0+e2lmKGMmJihuPWMpLG8pe2xldCBoPW87bz1udWxsLGgoKTt9fSxhPSgpPT5uZXcgdTAoKGMsaCk9PntuP2gobik6bz0oKT0+e24/aChuKTpjKCk7fTt9KTtlLm9uKFwiZHJhaW5cIixzKTtsZXQgbD12bihlLHtyZWFkYWJsZTohMX0scyk7dHJ5e2Uud3JpdGFibGVOZWVkRHJhaW4mJmF3YWl0IGEoKTtmb3IgYXdhaXQobGV0IGMgb2YgdCllLndyaXRlKGMpfHxhd2FpdCBhKCk7aSYmZS5lbmQoKSxhd2FpdCBhKCkscigpO31jYXRjaChjKXtyKG4hPT1jP2QwKG4sYyk6Yyk7fWZpbmFsbHl7bCgpLGUub2ZmKFwiZHJhaW5cIixzKTt9fWFzeW5jIGZ1bmN0aW9uIEJvKHQsZSxyLHtlbmQ6aX0pe3pyKGUpJiYoZT1lLndyaXRhYmxlKTtsZXQgbj1lLmdldFdyaXRlcigpO3RyeXtmb3IgYXdhaXQobGV0IG8gb2YgdClhd2FpdCBuLnJlYWR5LG4ud3JpdGUobykuY2F0Y2goKCk9Pnt9KTthd2FpdCBuLnJlYWR5LGkmJmF3YWl0IG4uY2xvc2UoKSxyKCk7fWNhdGNoKG8pe3RyeXthd2FpdCBuLmFib3J0KG8pLHIobyk7fWNhdGNoKHMpe3Iocyk7fX19ZnVuY3Rpb24gSTAoLi4udCl7cmV0dXJuIE1oKHQsYzAoUzAodCkpKX1mdW5jdGlvbiBNaCh0LGUscil7aWYodC5sZW5ndGg9PT0xJiZsMCh0WzBdKSYmKHQ9dFswXSksdC5sZW5ndGg8Mil0aHJvdyBuZXcgcDAoXCJzdHJlYW1zXCIpO2xldCBpPW5ldyBFMCxuPWkuc2lnbmFsLG89cj8uc2lnbmFsLHM9W107XzAobyxcIm9wdGlvbnMuc2lnbmFsXCIpO2Z1bmN0aW9uIGEoKXt5KG5ldyBiMCk7fW8/LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLGEpO2xldCBsLGMsaD1bXSxkPTA7ZnVuY3Rpb24gZyhDKXt5KEMsLS1kPT09MCk7fWZ1bmN0aW9uIHkoQyxSKXtpZihDJiYoIWx8fGwuY29kZT09PVwiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0VcIikmJihsPUMpLCEoIWwmJiFSKSl7Zm9yKDtoLmxlbmd0aDspaC5zaGlmdCgpKGwpO28/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLGEpLGkuYWJvcnQoKSxSJiYobHx8cy5mb3JFYWNoKFU9PlUoKSksbWkubmV4dFRpY2soZSxsLGMpKTt9fWxldCB3O2ZvcihsZXQgQz0wO0M8dC5sZW5ndGg7QysrKXtsZXQgUj10W0NdLFU9Qzx0Lmxlbmd0aC0xLE49Qz4wLFc9VXx8cj8uZW5kIT09ITEsSz1DPT09dC5sZW5ndGgtMTtpZihPaChSKSl7bGV0IHo9ZnVuY3Rpb24oUSl7USYmUS5uYW1lIT09XCJBYm9ydEVycm9yXCImJlEuY29kZSE9PVwiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0VcIiYmZyhRKTt9O2lmKFcpe2xldHtkZXN0cm95OlEsY2xlYW51cDpwZX09eGgoUixVLE4pO2gucHVzaChRKSxBbyhSKSYmSyYmcy5wdXNoKHBlKTt9Ui5vbihcImVycm9yXCIseiksQW8oUikmJksmJnMucHVzaCgoKT0+e1IucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLHopO30pO31pZihDPT09MClpZih0eXBlb2YgUj09XCJmdW5jdGlvblwiKXtpZih3PVIoe3NpZ25hbDpufSksIWRyKHcpKXRocm93IG5ldyBTbyhcIkl0ZXJhYmxlLCBBc3luY0l0ZXJhYmxlIG9yIFN0cmVhbVwiLFwic291cmNlXCIsdyl9ZWxzZSBkcihSKXx8bW4oUil8fHpyKFIpP3c9Ujp3PWtoLmZyb20oUik7ZWxzZSBpZih0eXBlb2YgUj09XCJmdW5jdGlvblwiKXtpZih6cih3KSl7dmFyIFM7dz1DbygoUz13KT09PW51bGx8fFM9PT12b2lkIDA/dm9pZCAwOlMucmVhZGFibGUpO31lbHNlIHc9Q28odyk7aWYodz1SKHcse3NpZ25hbDpufSksVSl7aWYoIWRyKHcsITApKXRocm93IG5ldyBTbyhcIkFzeW5jSXRlcmFibGVcIixgdHJhbnNmb3JtWyR7Qy0xfV1gLHcpfWVsc2Uge3ZhciBFO1RvfHwoVG89RW8oKSk7bGV0IHo9bmV3IFRvKHtvYmplY3RNb2RlOiEwfSksUT0oRT13KT09PW51bGx8fEU9PT12b2lkIDA/dm9pZCAwOkUudGhlbjtpZih0eXBlb2YgUT09XCJmdW5jdGlvblwiKWQrKyxRLmNhbGwodyxnZT0+e2M9Z2UsZ2UhPW51bGwmJnoud3JpdGUoZ2UpLFcmJnouZW5kKCksbWkubmV4dFRpY2soZyk7fSxnZT0+e3ouZGVzdHJveShnZSksbWkubmV4dFRpY2soZyxnZSk7fSk7ZWxzZSBpZihkcih3LCEwKSlkKyssX24odyx6LGcse2VuZDpXfSk7ZWxzZSBpZihJbyh3KXx8enIodykpe2xldCBnZT13LnJlYWRhYmxlfHx3O2QrKyxfbihnZSx6LGcse2VuZDpXfSk7fWVsc2UgdGhyb3cgbmV3IFNvKFwiQXN5bmNJdGVyYWJsZSBvciBQcm9taXNlXCIsXCJkZXN0aW5hdGlvblwiLHcpO3c9ejtsZXR7ZGVzdHJveTpwZSxjbGVhbnVwOll0fT14aCh3LCExLCEwKTtoLnB1c2gocGUpLEsmJnMucHVzaChZdCk7fX1lbHNlIGlmKE9oKFIpKXtpZihtbih3KSl7ZCs9MjtsZXQgej1UMCh3LFIsZyx7ZW5kOld9KTtBbyhSKSYmSyYmcy5wdXNoKHopO31lbHNlIGlmKHpyKHcpfHxJbyh3KSl7bGV0IHo9dy5yZWFkYWJsZXx8dztkKyssX24oeixSLGcse2VuZDpXfSk7fWVsc2UgaWYoZHIodykpZCsrLF9uKHcsUixnLHtlbmQ6V30pO2Vsc2UgdGhyb3cgbmV3IFBvKFwidmFsXCIsW1wiUmVhZGFibGVcIixcIkl0ZXJhYmxlXCIsXCJBc3luY0l0ZXJhYmxlXCIsXCJSZWFkYWJsZVN0cmVhbVwiLFwiVHJhbnNmb3JtU3RyZWFtXCJdLHcpO3c9Ujt9ZWxzZSBpZihtMChSKSl7aWYobW4odykpZCsrLEJvKENvKHcpLFIsZyx7ZW5kOld9KTtlbHNlIGlmKElvKHcpfHxkcih3KSlkKyssQm8odyxSLGcse2VuZDpXfSk7ZWxzZSBpZih6cih3KSlkKyssQm8ody5yZWFkYWJsZSxSLGcse2VuZDpXfSk7ZWxzZSB0aHJvdyBuZXcgUG8oXCJ2YWxcIixbXCJSZWFkYWJsZVwiLFwiSXRlcmFibGVcIixcIkFzeW5jSXRlcmFibGVcIixcIlJlYWRhYmxlU3RyZWFtXCIsXCJUcmFuc2Zvcm1TdHJlYW1cIl0sdyk7dz1SO31lbHNlIHc9a2guZnJvbShSKTt9cmV0dXJuIChuIT1udWxsJiZuLmFib3J0ZWR8fG8hPW51bGwmJm8uYWJvcnRlZCkmJm1pLm5leHRUaWNrKGEpLHd9ZnVuY3Rpb24gVDAodCxlLHIse2VuZDppfSl7bGV0IG49ITE7aWYoZS5vbihcImNsb3NlXCIsKCk9PntufHxyKG5ldyB5MCk7fSksdC5waXBlKGUse2VuZDohMX0pLGkpe2xldCBzPWZ1bmN0aW9uKCl7bj0hMCxlLmVuZCgpO307djAodCk/bWkubmV4dFRpY2socyk6dC5vbmNlKFwiZW5kXCIscyk7fWVsc2UgcigpO3JldHVybiB2bih0LHtyZWFkYWJsZTohMCx3cml0YWJsZTohMX0scz0+e2xldCBhPXQuX3JlYWRhYmxlU3RhdGU7cyYmcy5jb2RlPT09XCJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRVwiJiZhJiZhLmVuZGVkJiYhYS5lcnJvcmVkJiYhYS5lcnJvckVtaXR0ZWQ/dC5vbmNlKFwiZW5kXCIscikub25jZShcImVycm9yXCIscik6cihzKTt9KSx2bihlLHtyZWFkYWJsZTohMSx3cml0YWJsZTohMH0scil9TGguZXhwb3J0cz17cGlwZWxpbmVJbXBsOk1oLHBpcGVsaW5lOkkwfTt9KTt2YXIgT289TSgoeUMsRmgpPT57XygpO3YoKTttKCk7dmFye3BpcGVsaW5lOlIwfT1FbigpLFNuPW50KCkse2Rlc3Ryb3llcjpDMH09aXIoKSx7aXNOb2RlU3RyZWFtOkFuLGlzUmVhZGFibGU6VWgsaXNXcml0YWJsZTpOaCxpc1dlYlN0cmVhbTprbyxpc1RyYW5zZm9ybVN0cmVhbTpwcixpc1dyaXRhYmxlU3RyZWFtOnFoLGlzUmVhZGFibGVTdHJlYW06RGh9PXR0KCkse0Fib3J0RXJyb3I6QjAsY29kZXM6e0VSUl9JTlZBTElEX0FSR19WQUxVRTpqaCxFUlJfTUlTU0lOR19BUkdTOlAwfX09QWUoKSxrMD12dCgpO0ZoLmV4cG9ydHM9ZnVuY3Rpb24oLi4uZSl7aWYoZS5sZW5ndGg9PT0wKXRocm93IG5ldyBQMChcInN0cmVhbXNcIik7aWYoZS5sZW5ndGg9PT0xKXJldHVybiBTbi5mcm9tKGVbMF0pO2xldCByPVsuLi5lXTtpZih0eXBlb2YgZVswXT09XCJmdW5jdGlvblwiJiYoZVswXT1Tbi5mcm9tKGVbMF0pKSx0eXBlb2YgZVtlLmxlbmd0aC0xXT09XCJmdW5jdGlvblwiKXtsZXQgeT1lLmxlbmd0aC0xO2VbeV09U24uZnJvbShlW3ldKTt9Zm9yKGxldCB5PTA7eTxlLmxlbmd0aDsrK3kpaWYoISghQW4oZVt5XSkmJiFrbyhlW3ldKSkpe2lmKHk8ZS5sZW5ndGgtMSYmIShVaChlW3ldKXx8RGgoZVt5XSl8fHByKGVbeV0pKSl0aHJvdyBuZXcgamgoYHN0cmVhbXNbJHt5fV1gLHJbeV0sXCJtdXN0IGJlIHJlYWRhYmxlXCIpO2lmKHk+MCYmIShOaChlW3ldKXx8cWgoZVt5XSl8fHByKGVbeV0pKSl0aHJvdyBuZXcgamgoYHN0cmVhbXNbJHt5fV1gLHJbeV0sXCJtdXN0IGJlIHdyaXRhYmxlXCIpfWxldCBpLG4sbyxzLGE7ZnVuY3Rpb24gbCh5KXtsZXQgdz1zO3M9bnVsbCx3P3coeSk6eT9hLmRlc3Ryb3koeSk6IWcmJiFkJiZhLmRlc3Ryb3koKTt9bGV0IGM9ZVswXSxoPVIwKGUsbCksZD0hIShOaChjKXx8cWgoYyl8fHByKGMpKSxnPSEhKFVoKGgpfHxEaChoKXx8cHIoaCkpO2lmKGE9bmV3IFNuKHt3cml0YWJsZU9iamVjdE1vZGU6ISEoYyE9bnVsbCYmYy53cml0YWJsZU9iamVjdE1vZGUpLHJlYWRhYmxlT2JqZWN0TW9kZTohIShoIT1udWxsJiZoLndyaXRhYmxlT2JqZWN0TW9kZSksd3JpdGFibGU6ZCxyZWFkYWJsZTpnfSksZCl7aWYoQW4oYykpYS5fd3JpdGU9ZnVuY3Rpb24odyxTLEUpe2Mud3JpdGUodyxTKT9FKCk6aT1FO30sYS5fZmluYWw9ZnVuY3Rpb24odyl7Yy5lbmQoKSxuPXc7fSxjLm9uKFwiZHJhaW5cIixmdW5jdGlvbigpe2lmKGkpe2xldCB3PWk7aT1udWxsLHcoKTt9fSk7ZWxzZSBpZihrbyhjKSl7bGV0IFM9KHByKGMpP2Mud3JpdGFibGU6YykuZ2V0V3JpdGVyKCk7YS5fd3JpdGU9YXN5bmMgZnVuY3Rpb24oRSxJLEMpe3RyeXthd2FpdCBTLnJlYWR5LFMud3JpdGUoRSkuY2F0Y2goKCk9Pnt9KSxDKCk7fWNhdGNoKFIpe0MoUik7fX0sYS5fZmluYWw9YXN5bmMgZnVuY3Rpb24oRSl7dHJ5e2F3YWl0IFMucmVhZHksUy5jbG9zZSgpLmNhdGNoKCgpPT57fSksbj1FO31jYXRjaChJKXtFKEkpO319O31sZXQgeT1wcihoKT9oLnJlYWRhYmxlOmg7azAoeSwoKT0+e2lmKG4pe2xldCB3PW47bj1udWxsLHcoKTt9fSk7fWlmKGcpe2lmKEFuKGgpKWgub24oXCJyZWFkYWJsZVwiLGZ1bmN0aW9uKCl7aWYobyl7bGV0IHk9bztvPW51bGwseSgpO319KSxoLm9uKFwiZW5kXCIsZnVuY3Rpb24oKXthLnB1c2gobnVsbCk7fSksYS5fcmVhZD1mdW5jdGlvbigpe2Zvcig7Oyl7bGV0IHk9aC5yZWFkKCk7aWYoeT09PW51bGwpe289YS5fcmVhZDtyZXR1cm59aWYoIWEucHVzaCh5KSlyZXR1cm59fTtlbHNlIGlmKGtvKGgpKXtsZXQgdz0ocHIoaCk/aC5yZWFkYWJsZTpoKS5nZXRSZWFkZXIoKTthLl9yZWFkPWFzeW5jIGZ1bmN0aW9uKCl7Zm9yKDs7KXRyeXtsZXR7dmFsdWU6Uyxkb25lOkV9PWF3YWl0IHcucmVhZCgpO2lmKCFhLnB1c2goUykpcmV0dXJuO2lmKEUpe2EucHVzaChudWxsKTtyZXR1cm59fWNhdGNoe3JldHVybn19O319cmV0dXJuIGEuX2Rlc3Ryb3k9ZnVuY3Rpb24oeSx3KXsheSYmcyE9PW51bGwmJih5PW5ldyBCMCksbz1udWxsLGk9bnVsbCxuPW51bGwscz09PW51bGw/dyh5KToocz13LEFuKGgpJiZDMChoLHkpKTt9LGF9O30pO3ZhciBRaD1NKChUQyxMbyk9PntfKCk7digpO20oKTt2YXIgVmg9Z2xvYmFsVGhpcy5BYm9ydENvbnRyb2xsZXJ8fHppKCkuQWJvcnRDb250cm9sbGVyLHtjb2Rlczp7RVJSX0lOVkFMSURfQVJHX1ZBTFVFOk8wLEVSUl9JTlZBTElEX0FSR19UWVBFOnZpLEVSUl9NSVNTSU5HX0FSR1M6eDAsRVJSX09VVF9PRl9SQU5HRTpNMH0sQWJvcnRFcnJvcjpzdH09QWUoKSx7dmFsaWRhdGVBYm9ydFNpZ25hbDpncix2YWxpZGF0ZUludGVnZXI6TDAsdmFsaWRhdGVPYmplY3Q6eXJ9PWhpKCksVTA9Y2UoKS5TeW1ib2woXCJrV2Vha1wiKSx7ZmluaXNoZWQ6TjB9PXZ0KCkscTA9T28oKSx7YWRkQWJvcnRTaWduYWxOb1ZhbGlkYXRlOkQwfT1kaSgpLHtpc1dyaXRhYmxlOmowLGlzTm9kZVN0cmVhbTpGMH09dHQoKSx7QXJyYXlQcm90b3R5cGVQdXNoOlcwLE1hdGhGbG9vcjokMCxOdW1iZXI6SDAsTnVtYmVySXNOYU46VjAsUHJvbWlzZTpXaCxQcm9taXNlUmVqZWN0OiRoLFByb21pc2VQcm90b3R5cGVUaGVuOnowLFN5bWJvbDp6aH09Y2UoKSxJbj16aChcImtFbXB0eVwiKSxIaD16aChcImtFb2ZcIik7ZnVuY3Rpb24gSzAodCxlKXtpZihlIT1udWxsJiZ5cihlLFwib3B0aW9uc1wiKSxlPy5zaWduYWwhPW51bGwmJmdyKGUuc2lnbmFsLFwib3B0aW9ucy5zaWduYWxcIiksRjAodCkmJiFqMCh0KSl0aHJvdyBuZXcgTzAoXCJzdHJlYW1cIix0LFwibXVzdCBiZSB3cml0YWJsZVwiKTtsZXQgcj1xMCh0aGlzLHQpO3JldHVybiBlIT1udWxsJiZlLnNpZ25hbCYmRDAoZS5zaWduYWwscikscn1mdW5jdGlvbiBUbih0LGUpe2lmKHR5cGVvZiB0IT1cImZ1bmN0aW9uXCIpdGhyb3cgbmV3IHZpKFwiZm5cIixbXCJGdW5jdGlvblwiLFwiQXN5bmNGdW5jdGlvblwiXSx0KTtlIT1udWxsJiZ5cihlLFwib3B0aW9uc1wiKSxlPy5zaWduYWwhPW51bGwmJmdyKGUuc2lnbmFsLFwib3B0aW9ucy5zaWduYWxcIik7bGV0IHI9MTtyZXR1cm4gZT8uY29uY3VycmVuY3khPW51bGwmJihyPSQwKGUuY29uY3VycmVuY3kpKSxMMChyLFwiY29uY3VycmVuY3lcIiwxKSxhc3luYyBmdW5jdGlvbiooKXt2YXIgbixvO2xldCBzPW5ldyBWaCxhPXRoaXMsbD1bXSxjPXMuc2lnbmFsLGg9e3NpZ25hbDpjfSxkPSgpPT5zLmFib3J0KCk7ZSE9bnVsbCYmKG49ZS5zaWduYWwpIT09bnVsbCYmbiE9PXZvaWQgMCYmbi5hYm9ydGVkJiZkKCksZT09bnVsbHx8KG89ZS5zaWduYWwpPT09bnVsbHx8bz09PXZvaWQgMHx8by5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIixkKTtsZXQgZyx5LHc9ITE7ZnVuY3Rpb24gUygpe3c9ITA7fWFzeW5jIGZ1bmN0aW9uIEUoKXt0cnl7Zm9yIGF3YWl0KGxldCBSIG9mIGEpe3ZhciBJO2lmKHcpcmV0dXJuO2lmKGMuYWJvcnRlZCl0aHJvdyBuZXcgc3Q7dHJ5e1I9dChSLGgpO31jYXRjaChVKXtSPSRoKFUpO31SIT09SW4mJih0eXBlb2YoKEk9Uik9PT1udWxsfHxJPT09dm9pZCAwP3ZvaWQgMDpJLmNhdGNoKT09XCJmdW5jdGlvblwiJiZSLmNhdGNoKFMpLGwucHVzaChSKSxnJiYoZygpLGc9bnVsbCksIXcmJmwubGVuZ3RoJiZsLmxlbmd0aD49ciYmYXdhaXQgbmV3IFdoKFU9Pnt5PVU7fSkpO31sLnB1c2goSGgpO31jYXRjaChSKXtsZXQgVT0kaChSKTt6MChVLHZvaWQgMCxTKSxsLnB1c2goVSk7fWZpbmFsbHl7dmFyIEM7dz0hMCxnJiYoZygpLGc9bnVsbCksZT09bnVsbHx8KEM9ZS5zaWduYWwpPT09bnVsbHx8Qz09PXZvaWQgMHx8Qy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIixkKTt9fUUoKTt0cnl7Zm9yKDs7KXtmb3IoO2wubGVuZ3RoPjA7KXtsZXQgST1hd2FpdCBsWzBdO2lmKEk9PT1IaClyZXR1cm47aWYoYy5hYm9ydGVkKXRocm93IG5ldyBzdDtJIT09SW4mJih5aWVsZCBJKSxsLnNoaWZ0KCkseSYmKHkoKSx5PW51bGwpO31hd2FpdCBuZXcgV2goST0+e2c9STt9KTt9fWZpbmFsbHl7cy5hYm9ydCgpLHc9ITAseSYmKHkoKSx5PW51bGwpO319LmNhbGwodGhpcyl9ZnVuY3Rpb24gRzAodD12b2lkIDApe3JldHVybiB0IT1udWxsJiZ5cih0LFwib3B0aW9uc1wiKSx0Py5zaWduYWwhPW51bGwmJmdyKHQuc2lnbmFsLFwib3B0aW9ucy5zaWduYWxcIiksYXN5bmMgZnVuY3Rpb24qKCl7bGV0IHI9MDtmb3IgYXdhaXQobGV0IG4gb2YgdGhpcyl7dmFyIGk7aWYodCE9bnVsbCYmKGk9dC5zaWduYWwpIT09bnVsbCYmaSE9PXZvaWQgMCYmaS5hYm9ydGVkKXRocm93IG5ldyBzdCh7Y2F1c2U6dC5zaWduYWwucmVhc29ufSk7eWllbGQgW3IrKyxuXTt9fS5jYWxsKHRoaXMpfWFzeW5jIGZ1bmN0aW9uIEtoKHQsZT12b2lkIDApe2ZvciBhd2FpdChsZXQgciBvZiBNby5jYWxsKHRoaXMsdCxlKSlyZXR1cm4gITA7cmV0dXJuICExfWFzeW5jIGZ1bmN0aW9uIFEwKHQsZT12b2lkIDApe2lmKHR5cGVvZiB0IT1cImZ1bmN0aW9uXCIpdGhyb3cgbmV3IHZpKFwiZm5cIixbXCJGdW5jdGlvblwiLFwiQXN5bmNGdW5jdGlvblwiXSx0KTtyZXR1cm4gIWF3YWl0IEtoLmNhbGwodGhpcyxhc3luYyguLi5yKT0+IWF3YWl0IHQoLi4uciksZSl9YXN5bmMgZnVuY3Rpb24gWTAodCxlKXtmb3IgYXdhaXQobGV0IHIgb2YgTW8uY2FsbCh0aGlzLHQsZSkpcmV0dXJuIHJ9YXN5bmMgZnVuY3Rpb24gSjAodCxlKXtpZih0eXBlb2YgdCE9XCJmdW5jdGlvblwiKXRocm93IG5ldyB2aShcImZuXCIsW1wiRnVuY3Rpb25cIixcIkFzeW5jRnVuY3Rpb25cIl0sdCk7YXN5bmMgZnVuY3Rpb24gcihpLG4pe3JldHVybiBhd2FpdCB0KGksbiksSW59Zm9yIGF3YWl0KGxldCBpIG9mIFRuLmNhbGwodGhpcyxyLGUpKTt9ZnVuY3Rpb24gTW8odCxlKXtpZih0eXBlb2YgdCE9XCJmdW5jdGlvblwiKXRocm93IG5ldyB2aShcImZuXCIsW1wiRnVuY3Rpb25cIixcIkFzeW5jRnVuY3Rpb25cIl0sdCk7YXN5bmMgZnVuY3Rpb24gcihpLG4pe3JldHVybiBhd2FpdCB0KGksbik/aTpJbn1yZXR1cm4gVG4uY2FsbCh0aGlzLHIsZSl9dmFyIHhvPWNsYXNzIGV4dGVuZHMgeDB7Y29uc3RydWN0b3IoKXtzdXBlcihcInJlZHVjZVwiKSx0aGlzLm1lc3NhZ2U9XCJSZWR1Y2Ugb2YgYW4gZW1wdHkgc3RyZWFtIHJlcXVpcmVzIGFuIGluaXRpYWwgdmFsdWVcIjt9fTthc3luYyBmdW5jdGlvbiBYMCh0LGUscil7dmFyIGk7aWYodHlwZW9mIHQhPVwiZnVuY3Rpb25cIil0aHJvdyBuZXcgdmkoXCJyZWR1Y2VyXCIsW1wiRnVuY3Rpb25cIixcIkFzeW5jRnVuY3Rpb25cIl0sdCk7ciE9bnVsbCYmeXIocixcIm9wdGlvbnNcIikscj8uc2lnbmFsIT1udWxsJiZncihyLnNpZ25hbCxcIm9wdGlvbnMuc2lnbmFsXCIpO2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MTtpZihyIT1udWxsJiYoaT1yLnNpZ25hbCkhPT1udWxsJiZpIT09dm9pZCAwJiZpLmFib3J0ZWQpe2xldCBjPW5ldyBzdCh2b2lkIDAse2NhdXNlOnIuc2lnbmFsLnJlYXNvbn0pO3Rocm93IHRoaXMub25jZShcImVycm9yXCIsKCk9Pnt9KSxhd2FpdCBOMCh0aGlzLmRlc3Ryb3koYykpLGN9bGV0IG89bmV3IFZoLHM9by5zaWduYWw7aWYociE9bnVsbCYmci5zaWduYWwpe2xldCBjPXtvbmNlOiEwLFtVMF06dGhpc307ci5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsKCk9Pm8uYWJvcnQoKSxjKTt9bGV0IGE9ITE7dHJ5e2ZvciBhd2FpdChsZXQgYyBvZiB0aGlzKXt2YXIgbDtpZihhPSEwLHIhPW51bGwmJihsPXIuc2lnbmFsKSE9PW51bGwmJmwhPT12b2lkIDAmJmwuYWJvcnRlZCl0aHJvdyBuZXcgc3Q7bj9lPWF3YWl0IHQoZSxjLHtzaWduYWw6c30pOihlPWMsbj0hMCk7fWlmKCFhJiYhbil0aHJvdyBuZXcgeG99ZmluYWxseXtvLmFib3J0KCk7fXJldHVybiBlfWFzeW5jIGZ1bmN0aW9uIFowKHQpe3QhPW51bGwmJnlyKHQsXCJvcHRpb25zXCIpLHQ/LnNpZ25hbCE9bnVsbCYmZ3IodC5zaWduYWwsXCJvcHRpb25zLnNpZ25hbFwiKTtsZXQgZT1bXTtmb3IgYXdhaXQobGV0IGkgb2YgdGhpcyl7dmFyIHI7aWYodCE9bnVsbCYmKHI9dC5zaWduYWwpIT09bnVsbCYmciE9PXZvaWQgMCYmci5hYm9ydGVkKXRocm93IG5ldyBzdCh2b2lkIDAse2NhdXNlOnQuc2lnbmFsLnJlYXNvbn0pO1cwKGUsaSk7fXJldHVybiBlfWZ1bmN0aW9uIGVtKHQsZSl7bGV0IHI9VG4uY2FsbCh0aGlzLHQsZSk7cmV0dXJuIGFzeW5jIGZ1bmN0aW9uKigpe2ZvciBhd2FpdChsZXQgbiBvZiByKXlpZWxkKm47fS5jYWxsKHRoaXMpfWZ1bmN0aW9uIEdoKHQpe2lmKHQ9SDAodCksVjAodCkpcmV0dXJuIDA7aWYodDwwKXRocm93IG5ldyBNMChcIm51bWJlclwiLFwiPj0gMFwiLHQpO3JldHVybiB0fWZ1bmN0aW9uIHRtKHQsZT12b2lkIDApe3JldHVybiBlIT1udWxsJiZ5cihlLFwib3B0aW9uc1wiKSxlPy5zaWduYWwhPW51bGwmJmdyKGUuc2lnbmFsLFwib3B0aW9ucy5zaWduYWxcIiksdD1HaCh0KSxhc3luYyBmdW5jdGlvbiooKXt2YXIgaTtpZihlIT1udWxsJiYoaT1lLnNpZ25hbCkhPT1udWxsJiZpIT09dm9pZCAwJiZpLmFib3J0ZWQpdGhyb3cgbmV3IHN0O2ZvciBhd2FpdChsZXQgbyBvZiB0aGlzKXt2YXIgbjtpZihlIT1udWxsJiYobj1lLnNpZ25hbCkhPT1udWxsJiZuIT09dm9pZCAwJiZuLmFib3J0ZWQpdGhyb3cgbmV3IHN0O3QtLTw9MCYmKHlpZWxkIG8pO319LmNhbGwodGhpcyl9ZnVuY3Rpb24gcm0odCxlPXZvaWQgMCl7cmV0dXJuIGUhPW51bGwmJnlyKGUsXCJvcHRpb25zXCIpLGU/LnNpZ25hbCE9bnVsbCYmZ3IoZS5zaWduYWwsXCJvcHRpb25zLnNpZ25hbFwiKSx0PUdoKHQpLGFzeW5jIGZ1bmN0aW9uKigpe3ZhciBpO2lmKGUhPW51bGwmJihpPWUuc2lnbmFsKSE9PW51bGwmJmkhPT12b2lkIDAmJmkuYWJvcnRlZCl0aHJvdyBuZXcgc3Q7Zm9yIGF3YWl0KGxldCBvIG9mIHRoaXMpe3ZhciBuO2lmKGUhPW51bGwmJihuPWUuc2lnbmFsKSE9PW51bGwmJm4hPT12b2lkIDAmJm4uYWJvcnRlZCl0aHJvdyBuZXcgc3Q7aWYodC0tID4wKXlpZWxkIG87ZWxzZSByZXR1cm59fS5jYWxsKHRoaXMpfUxvLmV4cG9ydHMuc3RyZWFtUmV0dXJuaW5nT3BlcmF0b3JzPXthc0luZGV4ZWRQYWlyczpHMCxkcm9wOnRtLGZpbHRlcjpNbyxmbGF0TWFwOmVtLG1hcDpUbix0YWtlOnJtLGNvbXBvc2U6SzB9O0xvLmV4cG9ydHMucHJvbWlzZVJldHVybmluZ09wZXJhdG9ycz17ZXZlcnk6UTAsZm9yRWFjaDpKMCxyZWR1Y2U6WDAsdG9BcnJheTpaMCxzb21lOktoLGZpbmQ6WTB9O30pO3ZhciBVbz1NKChVQyxZaCk9PntfKCk7digpO20oKTt2YXJ7QXJyYXlQcm90b3R5cGVQb3A6aW0sUHJvbWlzZTpubX09Y2UoKSx7aXNJdGVyYWJsZTpzbSxpc05vZGVTdHJlYW06b20saXNXZWJTdHJlYW06YW19PXR0KCkse3BpcGVsaW5lSW1wbDpsbX09RW4oKSx7ZmluaXNoZWQ6dW19PXZ0KCk7Tm8oKTtmdW5jdGlvbiBmbSguLi50KXtyZXR1cm4gbmV3IG5tKChlLHIpPT57bGV0IGksbixvPXRbdC5sZW5ndGgtMV07aWYobyYmdHlwZW9mIG89PVwib2JqZWN0XCImJiFvbShvKSYmIXNtKG8pJiYhYW0obykpe2xldCBzPWltKHQpO2k9cy5zaWduYWwsbj1zLmVuZDt9bG0odCwocyxhKT0+e3M/cihzKTplKGEpO30se3NpZ25hbDppLGVuZDpufSk7fSl9WWguZXhwb3J0cz17ZmluaXNoZWQ6dW0scGlwZWxpbmU6Zm19O30pO3ZhciBObz1NKCh6QyxzZCk9PntfKCk7digpO20oKTt2YXJ7QnVmZmVyOmNtfT0oYmUoKSxYKG1lKSkse09iamVjdERlZmluZVByb3BlcnR5OlJ0LE9iamVjdEtleXM6WmgsUmVmbGVjdEFwcGx5OmVkfT1jZSgpLHtwcm9taXNpZnk6e2N1c3RvbTp0ZH19PUplKCkse3N0cmVhbVJldHVybmluZ09wZXJhdG9yczpKaCxwcm9taXNlUmV0dXJuaW5nT3BlcmF0b3JzOlhofT1RaCgpLHtjb2Rlczp7RVJSX0lMTEVHQUxfQ09OU1RSVUNUT1I6cmR9fT1BZSgpLGhtPU9vKCkse3BpcGVsaW5lOmlkfT1FbigpLHtkZXN0cm95ZXI6ZG19PWlyKCksbmQ9dnQoKSxxbz1VbygpLERvPXR0KCksbGU9c2QuZXhwb3J0cz1ubigpLlN0cmVhbTtsZS5pc0Rpc3R1cmJlZD1Eby5pc0Rpc3R1cmJlZDtsZS5pc0Vycm9yZWQ9RG8uaXNFcnJvcmVkO2xlLmlzUmVhZGFibGU9RG8uaXNSZWFkYWJsZTtsZS5SZWFkYWJsZT1naSgpO2ZvcihsZXQgdCBvZiBaaChKaCkpe2xldCByPWZ1bmN0aW9uKC4uLmkpe2lmKG5ldy50YXJnZXQpdGhyb3cgcmQoKTtyZXR1cm4gbGUuUmVhZGFibGUuZnJvbShlZChlLHRoaXMsaSkpfTtsZXQgZT1KaFt0XTtSdChyLFwibmFtZVwiLHtfX3Byb3RvX186bnVsbCx2YWx1ZTplLm5hbWV9KSxSdChyLFwibGVuZ3RoXCIse19fcHJvdG9fXzpudWxsLHZhbHVlOmUubGVuZ3RofSksUnQobGUuUmVhZGFibGUucHJvdG90eXBlLHQse19fcHJvdG9fXzpudWxsLHZhbHVlOnIsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTt9Zm9yKGxldCB0IG9mIFpoKFhoKSl7bGV0IHI9ZnVuY3Rpb24oLi4ubil7aWYobmV3LnRhcmdldCl0aHJvdyByZCgpO3JldHVybiBlZChlLHRoaXMsbil9O2xldCBlPVhoW3RdO1J0KHIsXCJuYW1lXCIse19fcHJvdG9fXzpudWxsLHZhbHVlOmUubmFtZX0pLFJ0KHIsXCJsZW5ndGhcIix7X19wcm90b19fOm51bGwsdmFsdWU6ZS5sZW5ndGh9KSxSdChsZS5SZWFkYWJsZS5wcm90b3R5cGUsdCx7X19wcm90b19fOm51bGwsdmFsdWU6cixlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pO31sZS5Xcml0YWJsZT1obygpO2xlLkR1cGxleD1udCgpO2xlLlRyYW5zZm9ybT1tbygpO2xlLlBhc3NUaHJvdWdoPUVvKCk7bGUucGlwZWxpbmU9aWQ7dmFye2FkZEFib3J0U2lnbmFsOnBtfT1kaSgpO2xlLmFkZEFib3J0U2lnbmFsPXBtO2xlLmZpbmlzaGVkPW5kO2xlLmRlc3Ryb3k9ZG07bGUuY29tcG9zZT1obTtSdChsZSxcInByb21pc2VzXCIse19fcHJvdG9fXzpudWxsLGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldCgpe3JldHVybiBxb319KTtSdChpZCx0ZCx7X19wcm90b19fOm51bGwsZW51bWVyYWJsZTohMCxnZXQoKXtyZXR1cm4gcW8ucGlwZWxpbmV9fSk7UnQobmQsdGQse19fcHJvdG9fXzpudWxsLGVudW1lcmFibGU6ITAsZ2V0KCl7cmV0dXJuIHFvLmZpbmlzaGVkfX0pO2xlLlN0cmVhbT1sZTtsZS5faXNVaW50OEFycmF5PWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgVWludDhBcnJheX07bGUuX3VpbnQ4QXJyYXlUb0J1ZmZlcj1mdW5jdGlvbihlKXtyZXR1cm4gY20uZnJvbShlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQsZS5ieXRlTGVuZ3RoKX07fSk7dmFyIGp0PU0oKHJCLHVlKT0+e18oKTt2KCk7bSgpO3ZhciBoZT1ObygpLGdtPVVvKCkseW09aGUuUmVhZGFibGUuZGVzdHJveTt1ZS5leHBvcnRzPWhlLlJlYWRhYmxlO3VlLmV4cG9ydHMuX3VpbnQ4QXJyYXlUb0J1ZmZlcj1oZS5fdWludDhBcnJheVRvQnVmZmVyO3VlLmV4cG9ydHMuX2lzVWludDhBcnJheT1oZS5faXNVaW50OEFycmF5O3VlLmV4cG9ydHMuaXNEaXN0dXJiZWQ9aGUuaXNEaXN0dXJiZWQ7dWUuZXhwb3J0cy5pc0Vycm9yZWQ9aGUuaXNFcnJvcmVkO3VlLmV4cG9ydHMuaXNSZWFkYWJsZT1oZS5pc1JlYWRhYmxlO3VlLmV4cG9ydHMuUmVhZGFibGU9aGUuUmVhZGFibGU7dWUuZXhwb3J0cy5Xcml0YWJsZT1oZS5Xcml0YWJsZTt1ZS5leHBvcnRzLkR1cGxleD1oZS5EdXBsZXg7dWUuZXhwb3J0cy5UcmFuc2Zvcm09aGUuVHJhbnNmb3JtO3VlLmV4cG9ydHMuUGFzc1Rocm91Z2g9aGUuUGFzc1Rocm91Z2g7dWUuZXhwb3J0cy5hZGRBYm9ydFNpZ25hbD1oZS5hZGRBYm9ydFNpZ25hbDt1ZS5leHBvcnRzLmZpbmlzaGVkPWhlLmZpbmlzaGVkO3VlLmV4cG9ydHMuZGVzdHJveT1oZS5kZXN0cm95O3VlLmV4cG9ydHMuZGVzdHJveT15bTt1ZS5leHBvcnRzLnBpcGVsaW5lPWhlLnBpcGVsaW5lO3VlLmV4cG9ydHMuY29tcG9zZT1oZS5jb21wb3NlO09iamVjdC5kZWZpbmVQcm9wZXJ0eShoZSxcInByb21pc2VzXCIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldCgpe3JldHVybiBnbX19KTt1ZS5leHBvcnRzLlN0cmVhbT1oZS5TdHJlYW07dWUuZXhwb3J0cy5kZWZhdWx0PXVlLmV4cG9ydHM7fSk7dmFyIG9kPU0oKGhCLEZvKT0+e18oKTt2KCk7bSgpO3R5cGVvZiBPYmplY3QuY3JlYXRlPT1cImZ1bmN0aW9uXCI/Rm8uZXhwb3J0cz1mdW5jdGlvbihlLHIpe3ImJihlLnN1cGVyXz1yLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoci5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pKTt9OkZvLmV4cG9ydHM9ZnVuY3Rpb24oZSxyKXtpZihyKXtlLnN1cGVyXz1yO3ZhciBpPWZ1bmN0aW9uKCl7fTtpLnByb3RvdHlwZT1yLnByb3RvdHlwZSxlLnByb3RvdHlwZT1uZXcgaSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lO319O30pO3ZhciB1ZD1NKChFQixsZCk9PntfKCk7digpO20oKTt2YXJ7QnVmZmVyOnplfT0oYmUoKSxYKG1lKSksYWQ9U3ltYm9sLmZvcihcIkJ1ZmZlckxpc3RcIik7ZnVuY3Rpb24gZWUodCl7aWYoISh0aGlzIGluc3RhbmNlb2YgZWUpKXJldHVybiBuZXcgZWUodCk7ZWUuX2luaXQuY2FsbCh0aGlzLHQpO31lZS5faW5pdD1mdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxhZCx7dmFsdWU6ITB9KSx0aGlzLl9idWZzPVtdLHRoaXMubGVuZ3RoPTAsZSYmdGhpcy5hcHBlbmQoZSk7fTtlZS5wcm90b3R5cGUuX25ldz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGVlKGUpfTtlZS5wcm90b3R5cGUuX29mZnNldD1mdW5jdGlvbihlKXtpZihlPT09MClyZXR1cm4gWzAsMF07bGV0IHI9MDtmb3IobGV0IGk9MDtpPHRoaXMuX2J1ZnMubGVuZ3RoO2krKyl7bGV0IG49cit0aGlzLl9idWZzW2ldLmxlbmd0aDtpZihlPG58fGk9PT10aGlzLl9idWZzLmxlbmd0aC0xKXJldHVybiBbaSxlLXJdO3I9bjt9fTtlZS5wcm90b3R5cGUuX3JldmVyc2VPZmZzZXQ9ZnVuY3Rpb24odCl7bGV0IGU9dFswXSxyPXRbMV07Zm9yKGxldCBpPTA7aTxlO2krKylyKz10aGlzLl9idWZzW2ldLmxlbmd0aDtyZXR1cm4gcn07ZWUucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXtpZihlPnRoaXMubGVuZ3RofHxlPDApcmV0dXJuO2xldCByPXRoaXMuX29mZnNldChlKTtyZXR1cm4gdGhpcy5fYnVmc1tyWzBdXVtyWzFdXX07ZWUucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGUscil7cmV0dXJuIHR5cGVvZiBlPT1cIm51bWJlclwiJiZlPDAmJihlKz10aGlzLmxlbmd0aCksdHlwZW9mIHI9PVwibnVtYmVyXCImJnI8MCYmKHIrPXRoaXMubGVuZ3RoKSx0aGlzLmNvcHkobnVsbCwwLGUscil9O2VlLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGUscixpLG4pe2lmKCh0eXBlb2YgaSE9XCJudW1iZXJcInx8aTwwKSYmKGk9MCksKHR5cGVvZiBuIT1cIm51bWJlclwifHxuPnRoaXMubGVuZ3RoKSYmKG49dGhpcy5sZW5ndGgpLGk+PXRoaXMubGVuZ3RofHxuPD0wKXJldHVybiBlfHx6ZS5hbGxvYygwKTtsZXQgbz0hIWUscz10aGlzLl9vZmZzZXQoaSksYT1uLWksbD1hLGM9byYmcnx8MCxoPXNbMV07aWYoaT09PTAmJm49PT10aGlzLmxlbmd0aCl7aWYoIW8pcmV0dXJuIHRoaXMuX2J1ZnMubGVuZ3RoPT09MT90aGlzLl9idWZzWzBdOnplLmNvbmNhdCh0aGlzLl9idWZzLHRoaXMubGVuZ3RoKTtmb3IobGV0IGQ9MDtkPHRoaXMuX2J1ZnMubGVuZ3RoO2QrKyl0aGlzLl9idWZzW2RdLmNvcHkoZSxjKSxjKz10aGlzLl9idWZzW2RdLmxlbmd0aDtyZXR1cm4gZX1pZihsPD10aGlzLl9idWZzW3NbMF1dLmxlbmd0aC1oKXJldHVybiBvP3RoaXMuX2J1ZnNbc1swXV0uY29weShlLHIsaCxoK2wpOnRoaXMuX2J1ZnNbc1swXV0uc2xpY2UoaCxoK2wpO298fChlPXplLmFsbG9jVW5zYWZlKGEpKTtmb3IobGV0IGQ9c1swXTtkPHRoaXMuX2J1ZnMubGVuZ3RoO2QrKyl7bGV0IGc9dGhpcy5fYnVmc1tkXS5sZW5ndGgtaDtpZihsPmcpdGhpcy5fYnVmc1tkXS5jb3B5KGUsYyxoKSxjKz1nO2Vsc2Uge3RoaXMuX2J1ZnNbZF0uY29weShlLGMsaCxoK2wpLGMrPWc7YnJlYWt9bC09ZyxoJiYoaD0wKTt9cmV0dXJuIGUubGVuZ3RoPmM/ZS5zbGljZSgwLGMpOmV9O2VlLnByb3RvdHlwZS5zaGFsbG93U2xpY2U9ZnVuY3Rpb24oZSxyKXtpZihlPWV8fDAscj10eXBlb2YgciE9XCJudW1iZXJcIj90aGlzLmxlbmd0aDpyLGU8MCYmKGUrPXRoaXMubGVuZ3RoKSxyPDAmJihyKz10aGlzLmxlbmd0aCksZT09PXIpcmV0dXJuIHRoaXMuX25ldygpO2xldCBpPXRoaXMuX29mZnNldChlKSxuPXRoaXMuX29mZnNldChyKSxvPXRoaXMuX2J1ZnMuc2xpY2UoaVswXSxuWzBdKzEpO3JldHVybiBuWzFdPT09MD9vLnBvcCgpOm9bby5sZW5ndGgtMV09b1tvLmxlbmd0aC0xXS5zbGljZSgwLG5bMV0pLGlbMV0hPT0wJiYob1swXT1vWzBdLnNsaWNlKGlbMV0pKSx0aGlzLl9uZXcobyl9O2VlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihlLHIsaSl7cmV0dXJuIHRoaXMuc2xpY2UocixpKS50b1N0cmluZyhlKX07ZWUucHJvdG90eXBlLmNvbnN1bWU9ZnVuY3Rpb24oZSl7aWYoZT1NYXRoLnRydW5jKGUpLE51bWJlci5pc05hTihlKXx8ZTw9MClyZXR1cm4gdGhpcztmb3IoO3RoaXMuX2J1ZnMubGVuZ3RoOylpZihlPj10aGlzLl9idWZzWzBdLmxlbmd0aCllLT10aGlzLl9idWZzWzBdLmxlbmd0aCx0aGlzLmxlbmd0aC09dGhpcy5fYnVmc1swXS5sZW5ndGgsdGhpcy5fYnVmcy5zaGlmdCgpO2Vsc2Uge3RoaXMuX2J1ZnNbMF09dGhpcy5fYnVmc1swXS5zbGljZShlKSx0aGlzLmxlbmd0aC09ZTticmVha31yZXR1cm4gdGhpc307ZWUucHJvdG90eXBlLmR1cGxpY2F0ZT1mdW5jdGlvbigpe2xldCBlPXRoaXMuX25ldygpO2ZvcihsZXQgcj0wO3I8dGhpcy5fYnVmcy5sZW5ndGg7cisrKWUuYXBwZW5kKHRoaXMuX2J1ZnNbcl0pO3JldHVybiBlfTtlZS5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKGUpe2lmKGU9PW51bGwpcmV0dXJuIHRoaXM7aWYoZS5idWZmZXIpdGhpcy5fYXBwZW5kQnVmZmVyKHplLmZyb20oZS5idWZmZXIsZS5ieXRlT2Zmc2V0LGUuYnl0ZUxlbmd0aCkpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShlKSlmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl0aGlzLmFwcGVuZChlW3JdKTtlbHNlIGlmKHRoaXMuX2lzQnVmZmVyTGlzdChlKSlmb3IobGV0IHI9MDtyPGUuX2J1ZnMubGVuZ3RoO3IrKyl0aGlzLmFwcGVuZChlLl9idWZzW3JdKTtlbHNlIHR5cGVvZiBlPT1cIm51bWJlclwiJiYoZT1lLnRvU3RyaW5nKCkpLHRoaXMuX2FwcGVuZEJ1ZmZlcih6ZS5mcm9tKGUpKTtyZXR1cm4gdGhpc307ZWUucHJvdG90eXBlLl9hcHBlbmRCdWZmZXI9ZnVuY3Rpb24oZSl7dGhpcy5fYnVmcy5wdXNoKGUpLHRoaXMubGVuZ3RoKz1lLmxlbmd0aDt9O2VlLnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKHQsZSxyKXtpZihyPT09dm9pZCAwJiZ0eXBlb2YgZT09XCJzdHJpbmdcIiYmKHI9ZSxlPXZvaWQgMCksdHlwZW9mIHQ9PVwiZnVuY3Rpb25cInx8QXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEJ1ZmZlckxpc3QsIG9yIFVpbnQ4QXJyYXkuJyk7aWYodHlwZW9mIHQ9PVwibnVtYmVyXCI/dD16ZS5mcm9tKFt0XSk6dHlwZW9mIHQ9PVwic3RyaW5nXCI/dD16ZS5mcm9tKHQscik6dGhpcy5faXNCdWZmZXJMaXN0KHQpP3Q9dC5zbGljZSgpOkFycmF5LmlzQXJyYXkodC5idWZmZXIpP3Q9emUuZnJvbSh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQsdC5ieXRlTGVuZ3RoKTp6ZS5pc0J1ZmZlcih0KXx8KHQ9emUuZnJvbSh0KSksZT1OdW1iZXIoZXx8MCksaXNOYU4oZSkmJihlPTApLGU8MCYmKGU9dGhpcy5sZW5ndGgrZSksZTwwJiYoZT0wKSx0Lmxlbmd0aD09PTApcmV0dXJuIGU+dGhpcy5sZW5ndGg/dGhpcy5sZW5ndGg6ZTtsZXQgaT10aGlzLl9vZmZzZXQoZSksbj1pWzBdLG89aVsxXTtmb3IoO248dGhpcy5fYnVmcy5sZW5ndGg7bisrKXtsZXQgcz10aGlzLl9idWZzW25dO2Zvcig7bzxzLmxlbmd0aDspaWYocy5sZW5ndGgtbz49dC5sZW5ndGgpe2xldCBsPXMuaW5kZXhPZih0LG8pO2lmKGwhPT0tMSlyZXR1cm4gdGhpcy5fcmV2ZXJzZU9mZnNldChbbixsXSk7bz1zLmxlbmd0aC10Lmxlbmd0aCsxO31lbHNlIHtsZXQgbD10aGlzLl9yZXZlcnNlT2Zmc2V0KFtuLG9dKTtpZih0aGlzLl9tYXRjaChsLHQpKXJldHVybiBsO28rKzt9bz0wO31yZXR1cm4gLTF9O2VlLnByb3RvdHlwZS5fbWF0Y2g9ZnVuY3Rpb24odCxlKXtpZih0aGlzLmxlbmd0aC10PGUubGVuZ3RoKXJldHVybiAhMTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKylpZih0aGlzLmdldCh0K3IpIT09ZVtyXSlyZXR1cm4gITE7cmV0dXJuICEwfTsoZnVuY3Rpb24oKXtsZXQgdD17cmVhZERvdWJsZUJFOjgscmVhZERvdWJsZUxFOjgscmVhZEZsb2F0QkU6NCxyZWFkRmxvYXRMRTo0LHJlYWRCaWdJbnQ2NEJFOjgscmVhZEJpZ0ludDY0TEU6OCxyZWFkQmlnVUludDY0QkU6OCxyZWFkQmlnVUludDY0TEU6OCxyZWFkSW50MzJCRTo0LHJlYWRJbnQzMkxFOjQscmVhZFVJbnQzMkJFOjQscmVhZFVJbnQzMkxFOjQscmVhZEludDE2QkU6MixyZWFkSW50MTZMRToyLHJlYWRVSW50MTZCRToyLHJlYWRVSW50MTZMRToyLHJlYWRJbnQ4OjEscmVhZFVJbnQ4OjEscmVhZEludEJFOm51bGwscmVhZEludExFOm51bGwscmVhZFVJbnRCRTpudWxsLHJlYWRVSW50TEU6bnVsbH07Zm9yKGxldCBlIGluIHQpKGZ1bmN0aW9uKHIpe3Rbcl09PT1udWxsP2VlLnByb3RvdHlwZVtyXT1mdW5jdGlvbihpLG4pe3JldHVybiB0aGlzLnNsaWNlKGksaStuKVtyXSgwLG4pfTplZS5wcm90b3R5cGVbcl09ZnVuY3Rpb24oaT0wKXtyZXR1cm4gdGhpcy5zbGljZShpLGkrdFtyXSlbcl0oMCl9O30pKGUpO30pKCk7ZWUucHJvdG90eXBlLl9pc0J1ZmZlckxpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBlZXx8ZWUuaXNCdWZmZXJMaXN0KGUpfTtlZS5pc0J1ZmZlckxpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGUhPW51bGwmJmVbYWRdfTtsZC5leHBvcnRzPWVlO30pO3ZhciBmZD1NKChPQixSbik9PntfKCk7digpO20oKTt2YXIgV289anQoKS5EdXBsZXgsYm09b2QoKSxFaT11ZCgpO2Z1bmN0aW9uIFNlKHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFNlKSlyZXR1cm4gbmV3IFNlKHQpO2lmKHR5cGVvZiB0PT1cImZ1bmN0aW9uXCIpe3RoaXMuX2NhbGxiYWNrPXQ7bGV0IGU9ZnVuY3Rpb24oaSl7dGhpcy5fY2FsbGJhY2smJih0aGlzLl9jYWxsYmFjayhpKSx0aGlzLl9jYWxsYmFjaz1udWxsKTt9LmJpbmQodGhpcyk7dGhpcy5vbihcInBpcGVcIixmdW5jdGlvbihpKXtpLm9uKFwiZXJyb3JcIixlKTt9KSx0aGlzLm9uKFwidW5waXBlXCIsZnVuY3Rpb24oaSl7aS5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsZSk7fSksdD1udWxsO31FaS5faW5pdC5jYWxsKHRoaXMsdCksV28uY2FsbCh0aGlzKTt9Ym0oU2UsV28pO09iamVjdC5hc3NpZ24oU2UucHJvdG90eXBlLEVpLnByb3RvdHlwZSk7U2UucHJvdG90eXBlLl9uZXc9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBTZShlKX07U2UucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihlLHIsaSl7dGhpcy5fYXBwZW5kQnVmZmVyKGUpLHR5cGVvZiBpPT1cImZ1bmN0aW9uXCImJmkoKTt9O1NlLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbihlKXtpZighdGhpcy5sZW5ndGgpcmV0dXJuIHRoaXMucHVzaChudWxsKTtlPU1hdGgubWluKGUsdGhpcy5sZW5ndGgpLHRoaXMucHVzaCh0aGlzLnNsaWNlKDAsZSkpLHRoaXMuY29uc3VtZShlKTt9O1NlLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oZSl7V28ucHJvdG90eXBlLmVuZC5jYWxsKHRoaXMsZSksdGhpcy5fY2FsbGJhY2smJih0aGlzLl9jYWxsYmFjayhudWxsLHRoaXMuc2xpY2UoKSksdGhpcy5fY2FsbGJhY2s9bnVsbCk7fTtTZS5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oZSxyKXt0aGlzLl9idWZzLmxlbmd0aD0wLHRoaXMubGVuZ3RoPTAscihlKTt9O1NlLnByb3RvdHlwZS5faXNCdWZmZXJMaXN0PWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgU2V8fGUgaW5zdGFuY2VvZiBFaXx8U2UuaXNCdWZmZXJMaXN0KGUpfTtTZS5pc0J1ZmZlckxpc3Q9RWkuaXNCdWZmZXJMaXN0O1JuLmV4cG9ydHM9U2U7Um4uZXhwb3J0cy5CdWZmZXJMaXN0U3RyZWFtPVNlO1JuLmV4cG9ydHMuQnVmZmVyTGlzdD1FaTt9KTt2YXIgaGQ9TSgoV0IsY2QpPT57XygpO3YoKTttKCk7dmFyICRvPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jbWQ9bnVsbCx0aGlzLnJldGFpbj0hMSx0aGlzLnFvcz0wLHRoaXMuZHVwPSExLHRoaXMubGVuZ3RoPS0xLHRoaXMudG9waWM9bnVsbCx0aGlzLnBheWxvYWQ9bnVsbDt9fTtjZC5leHBvcnRzPSRvO30pO3ZhciBIbz1NKChYQixkZCk9PntfKCk7digpO20oKTt2YXIgTD1kZC5leHBvcnRzLHtCdWZmZXI6a2V9PShiZSgpLFgobWUpKTtMLnR5cGVzPXswOlwicmVzZXJ2ZWRcIiwxOlwiY29ubmVjdFwiLDI6XCJjb25uYWNrXCIsMzpcInB1Ymxpc2hcIiw0OlwicHViYWNrXCIsNTpcInB1YnJlY1wiLDY6XCJwdWJyZWxcIiw3OlwicHViY29tcFwiLDg6XCJzdWJzY3JpYmVcIiw5Olwic3ViYWNrXCIsMTA6XCJ1bnN1YnNjcmliZVwiLDExOlwidW5zdWJhY2tcIiwxMjpcInBpbmdyZXFcIiwxMzpcInBpbmdyZXNwXCIsMTQ6XCJkaXNjb25uZWN0XCIsMTU6XCJhdXRoXCJ9O0wucmVxdWlyZWRIZWFkZXJGbGFncz17MTowLDI6MCw0OjAsNTowLDY6Miw3OjAsODoyLDk6MCwxMDoyLDExOjAsMTI6MCwxMzowLDE0OjAsMTU6MH07TC5yZXF1aXJlZEhlYWRlckZsYWdzRXJyb3JzPXt9O2ZvcihsZXQgdCBpbiBMLnJlcXVpcmVkSGVhZGVyRmxhZ3Mpe2xldCBlPUwucmVxdWlyZWRIZWFkZXJGbGFnc1t0XTtMLnJlcXVpcmVkSGVhZGVyRmxhZ3NFcnJvcnNbdF09XCJJbnZhbGlkIGhlYWRlciBmbGFnIGJpdHMsIG11c3QgYmUgMHhcIitlLnRvU3RyaW5nKDE2KStcIiBmb3IgXCIrTC50eXBlc1t0XStcIiBwYWNrZXRcIjt9TC5jb2Rlcz17fTtmb3IobGV0IHQgaW4gTC50eXBlcyl7bGV0IGU9TC50eXBlc1t0XTtMLmNvZGVzW2VdPXQ7fUwuQ01EX1NISUZUPTQ7TC5DTURfTUFTSz0yNDA7TC5EVVBfTUFTSz04O0wuUU9TX01BU0s9MztMLlFPU19TSElGVD0xO0wuUkVUQUlOX01BU0s9MTtMLlZBUkJZVEVJTlRfTUFTSz0xMjc7TC5WQVJCWVRFSU5UX0ZJTl9NQVNLPTEyODtMLlZBUkJZVEVJTlRfTUFYPTI2ODQzNTQ1NTtMLlNFU1NJT05QUkVTRU5UX01BU0s9MTtMLlNFU1NJT05QUkVTRU5UX0hFQURFUj1rZS5mcm9tKFtMLlNFU1NJT05QUkVTRU5UX01BU0tdKTtMLkNPTk5BQ0tfSEVBREVSPWtlLmZyb20oW0wuY29kZXMuY29ubmFjazw8TC5DTURfU0hJRlRdKTtMLlVTRVJOQU1FX01BU0s9MTI4O0wuUEFTU1dPUkRfTUFTSz02NDtMLldJTExfUkVUQUlOX01BU0s9MzI7TC5XSUxMX1FPU19NQVNLPTI0O0wuV0lMTF9RT1NfU0hJRlQ9MztMLldJTExfRkxBR19NQVNLPTQ7TC5DTEVBTl9TRVNTSU9OX01BU0s9MjtMLkNPTk5FQ1RfSEVBREVSPWtlLmZyb20oW0wuY29kZXMuY29ubmVjdDw8TC5DTURfU0hJRlRdKTtMLnByb3BlcnRpZXM9e3Nlc3Npb25FeHBpcnlJbnRlcnZhbDoxNyx3aWxsRGVsYXlJbnRlcnZhbDoyNCxyZWNlaXZlTWF4aW11bTozMyxtYXhpbXVtUGFja2V0U2l6ZTozOSx0b3BpY0FsaWFzTWF4aW11bTozNCxyZXF1ZXN0UmVzcG9uc2VJbmZvcm1hdGlvbjoyNSxyZXF1ZXN0UHJvYmxlbUluZm9ybWF0aW9uOjIzLHVzZXJQcm9wZXJ0aWVzOjM4LGF1dGhlbnRpY2F0aW9uTWV0aG9kOjIxLGF1dGhlbnRpY2F0aW9uRGF0YToyMixwYXlsb2FkRm9ybWF0SW5kaWNhdG9yOjEsbWVzc2FnZUV4cGlyeUludGVydmFsOjIsY29udGVudFR5cGU6MyxyZXNwb25zZVRvcGljOjgsY29ycmVsYXRpb25EYXRhOjksbWF4aW11bVFvUzozNixyZXRhaW5BdmFpbGFibGU6MzcsYXNzaWduZWRDbGllbnRJZGVudGlmaWVyOjE4LHJlYXNvblN0cmluZzozMSx3aWxkY2FyZFN1YnNjcmlwdGlvbkF2YWlsYWJsZTo0MCxzdWJzY3JpcHRpb25JZGVudGlmaWVyc0F2YWlsYWJsZTo0MSxzaGFyZWRTdWJzY3JpcHRpb25BdmFpbGFibGU6NDIsc2VydmVyS2VlcEFsaXZlOjE5LHJlc3BvbnNlSW5mb3JtYXRpb246MjYsc2VydmVyUmVmZXJlbmNlOjI4LHRvcGljQWxpYXM6MzUsc3Vic2NyaXB0aW9uSWRlbnRpZmllcjoxMX07TC5wcm9wZXJ0aWVzQ29kZXM9e307Zm9yKGxldCB0IGluIEwucHJvcGVydGllcyl7bGV0IGU9TC5wcm9wZXJ0aWVzW3RdO0wucHJvcGVydGllc0NvZGVzW2VdPXQ7fUwucHJvcGVydGllc1R5cGVzPXtzZXNzaW9uRXhwaXJ5SW50ZXJ2YWw6XCJpbnQzMlwiLHdpbGxEZWxheUludGVydmFsOlwiaW50MzJcIixyZWNlaXZlTWF4aW11bTpcImludDE2XCIsbWF4aW11bVBhY2tldFNpemU6XCJpbnQzMlwiLHRvcGljQWxpYXNNYXhpbXVtOlwiaW50MTZcIixyZXF1ZXN0UmVzcG9uc2VJbmZvcm1hdGlvbjpcImJ5dGVcIixyZXF1ZXN0UHJvYmxlbUluZm9ybWF0aW9uOlwiYnl0ZVwiLHVzZXJQcm9wZXJ0aWVzOlwicGFpclwiLGF1dGhlbnRpY2F0aW9uTWV0aG9kOlwic3RyaW5nXCIsYXV0aGVudGljYXRpb25EYXRhOlwiYmluYXJ5XCIscGF5bG9hZEZvcm1hdEluZGljYXRvcjpcImJ5dGVcIixtZXNzYWdlRXhwaXJ5SW50ZXJ2YWw6XCJpbnQzMlwiLGNvbnRlbnRUeXBlOlwic3RyaW5nXCIscmVzcG9uc2VUb3BpYzpcInN0cmluZ1wiLGNvcnJlbGF0aW9uRGF0YTpcImJpbmFyeVwiLG1heGltdW1Rb1M6XCJpbnQ4XCIscmV0YWluQXZhaWxhYmxlOlwiYnl0ZVwiLGFzc2lnbmVkQ2xpZW50SWRlbnRpZmllcjpcInN0cmluZ1wiLHJlYXNvblN0cmluZzpcInN0cmluZ1wiLHdpbGRjYXJkU3Vic2NyaXB0aW9uQXZhaWxhYmxlOlwiYnl0ZVwiLHN1YnNjcmlwdGlvbklkZW50aWZpZXJzQXZhaWxhYmxlOlwiYnl0ZVwiLHNoYXJlZFN1YnNjcmlwdGlvbkF2YWlsYWJsZTpcImJ5dGVcIixzZXJ2ZXJLZWVwQWxpdmU6XCJpbnQxNlwiLHJlc3BvbnNlSW5mb3JtYXRpb246XCJzdHJpbmdcIixzZXJ2ZXJSZWZlcmVuY2U6XCJzdHJpbmdcIix0b3BpY0FsaWFzOlwiaW50MTZcIixzdWJzY3JpcHRpb25JZGVudGlmaWVyOlwidmFyXCJ9O2Z1bmN0aW9uIEZ0KHQpe3JldHVybiBbMCwxLDJdLm1hcChlPT5bMCwxXS5tYXAocj0+WzAsMV0ubWFwKGk9PntsZXQgbj1rZS5hbGxvYygxKTtyZXR1cm4gbi53cml0ZVVJbnQ4KEwuY29kZXNbdF08PEwuQ01EX1NISUZUfChyP0wuRFVQX01BU0s6MCl8ZTw8TC5RT1NfU0hJRlR8aSwwLCEwKSxufSkpKX1MLlBVQkxJU0hfSEVBREVSPUZ0KFwicHVibGlzaFwiKTtMLlNVQlNDUklCRV9IRUFERVI9RnQoXCJzdWJzY3JpYmVcIik7TC5TVUJTQ1JJQkVfT1BUSU9OU19RT1NfTUFTSz0zO0wuU1VCU0NSSUJFX09QVElPTlNfTkxfTUFTSz0xO0wuU1VCU0NSSUJFX09QVElPTlNfTkxfU0hJRlQ9MjtMLlNVQlNDUklCRV9PUFRJT05TX1JBUF9NQVNLPTE7TC5TVUJTQ1JJQkVfT1BUSU9OU19SQVBfU0hJRlQ9MztMLlNVQlNDUklCRV9PUFRJT05TX1JIX01BU0s9MztMLlNVQlNDUklCRV9PUFRJT05TX1JIX1NISUZUPTQ7TC5TVUJTQ1JJQkVfT1BUSU9OU19SSD1bMCwxNiwzMl07TC5TVUJTQ1JJQkVfT1BUSU9OU19OTD00O0wuU1VCU0NSSUJFX09QVElPTlNfUkFQPTg7TC5TVUJTQ1JJQkVfT1BUSU9OU19RT1M9WzAsMSwyXTtMLlVOU1VCU0NSSUJFX0hFQURFUj1GdChcInVuc3Vic2NyaWJlXCIpO0wuQUNLUz17dW5zdWJhY2s6RnQoXCJ1bnN1YmFja1wiKSxwdWJhY2s6RnQoXCJwdWJhY2tcIikscHViY29tcDpGdChcInB1YmNvbXBcIikscHVicmVsOkZ0KFwicHVicmVsXCIpLHB1YnJlYzpGdChcInB1YnJlY1wiKX07TC5TVUJBQ0tfSEVBREVSPWtlLmZyb20oW0wuY29kZXMuc3ViYWNrPDxMLkNNRF9TSElGVF0pO0wuVkVSU0lPTjM9a2UuZnJvbShbM10pO0wuVkVSU0lPTjQ9a2UuZnJvbShbNF0pO0wuVkVSU0lPTjU9a2UuZnJvbShbNV0pO0wuVkVSU0lPTjEzMT1rZS5mcm9tKFsxMzFdKTtMLlZFUlNJT04xMzI9a2UuZnJvbShbMTMyXSk7TC5RT1M9WzAsMSwyXS5tYXAodD0+a2UuZnJvbShbdF0pKTtMLkVNUFRZPXtwaW5ncmVxOmtlLmZyb20oW0wuY29kZXMucGluZ3JlcTw8NCwwXSkscGluZ3Jlc3A6a2UuZnJvbShbTC5jb2Rlcy5waW5ncmVzcDw8NCwwXSksZGlzY29ubmVjdDprZS5mcm9tKFtMLmNvZGVzLmRpc2Nvbm5lY3Q8PDQsMF0pfTtMLk1RVFQ1X1BVQkFDS19QVUJSRUNfQ09ERVM9ezA6XCJTdWNjZXNzXCIsMTY6XCJObyBtYXRjaGluZyBzdWJzY3JpYmVyc1wiLDEyODpcIlVuc3BlY2lmaWVkIGVycm9yXCIsMTMxOlwiSW1wbGVtZW50YXRpb24gc3BlY2lmaWMgZXJyb3JcIiwxMzU6XCJOb3QgYXV0aG9yaXplZFwiLDE0NDpcIlRvcGljIE5hbWUgaW52YWxpZFwiLDE0NTpcIlBhY2tldCBpZGVudGlmaWVyIGluIHVzZVwiLDE1MTpcIlF1b3RhIGV4Y2VlZGVkXCIsMTUzOlwiUGF5bG9hZCBmb3JtYXQgaW52YWxpZFwifTtMLk1RVFQ1X1BVQlJFTF9QVUJDT01QX0NPREVTPXswOlwiU3VjY2Vzc1wiLDE0NjpcIlBhY2tldCBJZGVudGlmaWVyIG5vdCBmb3VuZFwifTtMLk1RVFQ1X1NVQkFDS19DT0RFUz17MDpcIkdyYW50ZWQgUW9TIDBcIiwxOlwiR3JhbnRlZCBRb1MgMVwiLDI6XCJHcmFudGVkIFFvUyAyXCIsMTI4OlwiVW5zcGVjaWZpZWQgZXJyb3JcIiwxMzE6XCJJbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBlcnJvclwiLDEzNTpcIk5vdCBhdXRob3JpemVkXCIsMTQzOlwiVG9waWMgRmlsdGVyIGludmFsaWRcIiwxNDU6XCJQYWNrZXQgSWRlbnRpZmllciBpbiB1c2VcIiwxNTE6XCJRdW90YSBleGNlZWRlZFwiLDE1ODpcIlNoYXJlZCBTdWJzY3JpcHRpb25zIG5vdCBzdXBwb3J0ZWRcIiwxNjE6XCJTdWJzY3JpcHRpb24gSWRlbnRpZmllcnMgbm90IHN1cHBvcnRlZFwiLDE2MjpcIldpbGRjYXJkIFN1YnNjcmlwdGlvbnMgbm90IHN1cHBvcnRlZFwifTtMLk1RVFQ1X1VOU1VCQUNLX0NPREVTPXswOlwiU3VjY2Vzc1wiLDE3OlwiTm8gc3Vic2NyaXB0aW9uIGV4aXN0ZWRcIiwxMjg6XCJVbnNwZWNpZmllZCBlcnJvclwiLDEzMTpcIkltcGxlbWVudGF0aW9uIHNwZWNpZmljIGVycm9yXCIsMTM1OlwiTm90IGF1dGhvcml6ZWRcIiwxNDM6XCJUb3BpYyBGaWx0ZXIgaW52YWxpZFwiLDE0NTpcIlBhY2tldCBJZGVudGlmaWVyIGluIHVzZVwifTtMLk1RVFQ1X0RJU0NPTk5FQ1RfQ09ERVM9ezA6XCJOb3JtYWwgZGlzY29ubmVjdGlvblwiLDQ6XCJEaXNjb25uZWN0IHdpdGggV2lsbCBNZXNzYWdlXCIsMTI4OlwiVW5zcGVjaWZpZWQgZXJyb3JcIiwxMjk6XCJNYWxmb3JtZWQgUGFja2V0XCIsMTMwOlwiUHJvdG9jb2wgRXJyb3JcIiwxMzE6XCJJbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBlcnJvclwiLDEzNTpcIk5vdCBhdXRob3JpemVkXCIsMTM3OlwiU2VydmVyIGJ1c3lcIiwxMzk6XCJTZXJ2ZXIgc2h1dHRpbmcgZG93blwiLDE0MTpcIktlZXAgQWxpdmUgdGltZW91dFwiLDE0MjpcIlNlc3Npb24gdGFrZW4gb3ZlclwiLDE0MzpcIlRvcGljIEZpbHRlciBpbnZhbGlkXCIsMTQ0OlwiVG9waWMgTmFtZSBpbnZhbGlkXCIsMTQ3OlwiUmVjZWl2ZSBNYXhpbXVtIGV4Y2VlZGVkXCIsMTQ4OlwiVG9waWMgQWxpYXMgaW52YWxpZFwiLDE0OTpcIlBhY2tldCB0b28gbGFyZ2VcIiwxNTA6XCJNZXNzYWdlIHJhdGUgdG9vIGhpZ2hcIiwxNTE6XCJRdW90YSBleGNlZWRlZFwiLDE1MjpcIkFkbWluaXN0cmF0aXZlIGFjdGlvblwiLDE1MzpcIlBheWxvYWQgZm9ybWF0IGludmFsaWRcIiwxNTQ6XCJSZXRhaW4gbm90IHN1cHBvcnRlZFwiLDE1NTpcIlFvUyBub3Qgc3VwcG9ydGVkXCIsMTU2OlwiVXNlIGFub3RoZXIgc2VydmVyXCIsMTU3OlwiU2VydmVyIG1vdmVkXCIsMTU4OlwiU2hhcmVkIFN1YnNjcmlwdGlvbnMgbm90IHN1cHBvcnRlZFwiLDE1OTpcIkNvbm5lY3Rpb24gcmF0ZSBleGNlZWRlZFwiLDE2MDpcIk1heGltdW0gY29ubmVjdCB0aW1lXCIsMTYxOlwiU3Vic2NyaXB0aW9uIElkZW50aWZpZXJzIG5vdCBzdXBwb3J0ZWRcIiwxNjI6XCJXaWxkY2FyZCBTdWJzY3JpcHRpb25zIG5vdCBzdXBwb3J0ZWRcIn07TC5NUVRUNV9BVVRIX0NPREVTPXswOlwiU3VjY2Vzc1wiLDI0OlwiQ29udGludWUgYXV0aGVudGljYXRpb25cIiwyNTpcIlJlLWF1dGhlbnRpY2F0ZVwifTt9KTt2YXIgZ2Q9TSgobFAscGQpPT57XygpO3YoKTttKCk7dmFyIEtyPTFlMyxHcj1Lcio2MCxRcj1Hcio2MCxicj1RcioyNCx3bT1icio3LF9tPWJyKjM2NS4yNTtwZC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZT1lfHx7fTt2YXIgcj10eXBlb2YgdDtpZihyPT09XCJzdHJpbmdcIiYmdC5sZW5ndGg+MClyZXR1cm4gbW0odCk7aWYocj09PVwibnVtYmVyXCImJmlzRmluaXRlKHQpKXJldHVybiBlLmxvbmc/RW0odCk6dm0odCk7dGhyb3cgbmV3IEVycm9yKFwidmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSB2YWxpZCBudW1iZXIuIHZhbD1cIitKU09OLnN0cmluZ2lmeSh0KSl9O2Z1bmN0aW9uIG1tKHQpe2lmKHQ9U3RyaW5nKHQpLCEodC5sZW5ndGg+MTAwKSl7dmFyIGU9L14oLT8oPzpcXGQrKT9cXC4/XFxkKykgKihtaWxsaXNlY29uZHM/fG1zZWNzP3xtc3xzZWNvbmRzP3xzZWNzP3xzfG1pbnV0ZXM/fG1pbnM/fG18aG91cnM/fGhycz98aHxkYXlzP3xkfHdlZWtzP3x3fHllYXJzP3x5cnM/fHkpPyQvaS5leGVjKHQpO2lmKGUpe3ZhciByPXBhcnNlRmxvYXQoZVsxXSksaT0oZVsyXXx8XCJtc1wiKS50b0xvd2VyQ2FzZSgpO3N3aXRjaChpKXtjYXNlXCJ5ZWFyc1wiOmNhc2VcInllYXJcIjpjYXNlXCJ5cnNcIjpjYXNlXCJ5clwiOmNhc2VcInlcIjpyZXR1cm4gcipfbTtjYXNlXCJ3ZWVrc1wiOmNhc2VcIndlZWtcIjpjYXNlXCJ3XCI6cmV0dXJuIHIqd207Y2FzZVwiZGF5c1wiOmNhc2VcImRheVwiOmNhc2VcImRcIjpyZXR1cm4gcipicjtjYXNlXCJob3Vyc1wiOmNhc2VcImhvdXJcIjpjYXNlXCJocnNcIjpjYXNlXCJoclwiOmNhc2VcImhcIjpyZXR1cm4gcipRcjtjYXNlXCJtaW51dGVzXCI6Y2FzZVwibWludXRlXCI6Y2FzZVwibWluc1wiOmNhc2VcIm1pblwiOmNhc2VcIm1cIjpyZXR1cm4gcipHcjtjYXNlXCJzZWNvbmRzXCI6Y2FzZVwic2Vjb25kXCI6Y2FzZVwic2Vjc1wiOmNhc2VcInNlY1wiOmNhc2VcInNcIjpyZXR1cm4gcipLcjtjYXNlXCJtaWxsaXNlY29uZHNcIjpjYXNlXCJtaWxsaXNlY29uZFwiOmNhc2VcIm1zZWNzXCI6Y2FzZVwibXNlY1wiOmNhc2VcIm1zXCI6cmV0dXJuIHI7ZGVmYXVsdDpyZXR1cm59fX19ZnVuY3Rpb24gdm0odCl7dmFyIGU9TWF0aC5hYnModCk7cmV0dXJuIGU+PWJyP01hdGgucm91bmQodC9icikrXCJkXCI6ZT49UXI/TWF0aC5yb3VuZCh0L1FyKStcImhcIjplPj1Hcj9NYXRoLnJvdW5kKHQvR3IpK1wibVwiOmU+PUtyP01hdGgucm91bmQodC9LcikrXCJzXCI6dCtcIm1zXCJ9ZnVuY3Rpb24gRW0odCl7dmFyIGU9TWF0aC5hYnModCk7cmV0dXJuIGU+PWJyP0NuKHQsZSxicixcImRheVwiKTplPj1Rcj9Dbih0LGUsUXIsXCJob3VyXCIpOmU+PUdyP0NuKHQsZSxHcixcIm1pbnV0ZVwiKTplPj1Lcj9Dbih0LGUsS3IsXCJzZWNvbmRcIik6dCtcIiBtc1wifWZ1bmN0aW9uIENuKHQsZSxyLGkpe3ZhciBuPWU+PXIqMS41O3JldHVybiBNYXRoLnJvdW5kKHQvcikrXCIgXCIraSsobj9cInNcIjpcIlwiKX19KTt2YXIgYmQ9TSgod1AseWQpPT57XygpO3YoKTttKCk7ZnVuY3Rpb24gU20odCl7ci5kZWJ1Zz1yLHIuZGVmYXVsdD1yLHIuY29lcmNlPWwsci5kaXNhYmxlPW8sci5lbmFibGU9bixyLmVuYWJsZWQ9cyxyLmh1bWFuaXplPWdkKCksci5kZXN0cm95PWMsT2JqZWN0LmtleXModCkuZm9yRWFjaChoPT57cltoXT10W2hdO30pLHIubmFtZXM9W10sci5za2lwcz1bXSxyLmZvcm1hdHRlcnM9e307ZnVuY3Rpb24gZShoKXtsZXQgZD0wO2ZvcihsZXQgZz0wO2c8aC5sZW5ndGg7ZysrKWQ9KGQ8PDUpLWQraC5jaGFyQ29kZUF0KGcpLGR8PTA7cmV0dXJuIHIuY29sb3JzW01hdGguYWJzKGQpJXIuY29sb3JzLmxlbmd0aF19ci5zZWxlY3RDb2xvcj1lO2Z1bmN0aW9uIHIoaCl7bGV0IGQsZz1udWxsLHksdztmdW5jdGlvbiBTKC4uLkUpe2lmKCFTLmVuYWJsZWQpcmV0dXJuO2xldCBJPVMsQz1OdW1iZXIobmV3IERhdGUpLFI9Qy0oZHx8Qyk7SS5kaWZmPVIsSS5wcmV2PWQsSS5jdXJyPUMsZD1DLEVbMF09ci5jb2VyY2UoRVswXSksdHlwZW9mIEVbMF0hPVwic3RyaW5nXCImJkUudW5zaGlmdChcIiVPXCIpO2xldCBVPTA7RVswXT1FWzBdLnJlcGxhY2UoLyUoW2EtekEtWiVdKS9nLChXLEspPT57aWYoVz09PVwiJSVcIilyZXR1cm4gXCIlXCI7VSsrO2xldCB6PXIuZm9ybWF0dGVyc1tLXTtpZih0eXBlb2Ygej09XCJmdW5jdGlvblwiKXtsZXQgUT1FW1VdO1c9ei5jYWxsKEksUSksRS5zcGxpY2UoVSwxKSxVLS07fXJldHVybiBXfSksci5mb3JtYXRBcmdzLmNhbGwoSSxFKSwoSS5sb2d8fHIubG9nKS5hcHBseShJLEUpO31yZXR1cm4gUy5uYW1lc3BhY2U9aCxTLnVzZUNvbG9ycz1yLnVzZUNvbG9ycygpLFMuY29sb3I9ci5zZWxlY3RDb2xvcihoKSxTLmV4dGVuZD1pLFMuZGVzdHJveT1yLmRlc3Ryb3ksT2JqZWN0LmRlZmluZVByb3BlcnR5KFMsXCJlbmFibGVkXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiExLGdldDooKT0+ZyE9PW51bGw/ZzooeSE9PXIubmFtZXNwYWNlcyYmKHk9ci5uYW1lc3BhY2VzLHc9ci5lbmFibGVkKGgpKSx3KSxzZXQ6RT0+e2c9RTt9fSksdHlwZW9mIHIuaW5pdD09XCJmdW5jdGlvblwiJiZyLmluaXQoUyksU31mdW5jdGlvbiBpKGgsZCl7bGV0IGc9cih0aGlzLm5hbWVzcGFjZSsodHlwZW9mIGQ+XCJ1XCI/XCI6XCI6ZCkraCk7cmV0dXJuIGcubG9nPXRoaXMubG9nLGd9ZnVuY3Rpb24gbihoKXtyLnNhdmUoaCksci5uYW1lc3BhY2VzPWgsci5uYW1lcz1bXSxyLnNraXBzPVtdO2xldCBkLGc9KHR5cGVvZiBoPT1cInN0cmluZ1wiP2g6XCJcIikuc3BsaXQoL1tcXHMsXSsvKSx5PWcubGVuZ3RoO2ZvcihkPTA7ZDx5O2QrKylnW2RdJiYoaD1nW2RdLnJlcGxhY2UoL1xcKi9nLFwiLio/XCIpLGhbMF09PT1cIi1cIj9yLnNraXBzLnB1c2gobmV3IFJlZ0V4cChcIl5cIitoLnNsaWNlKDEpK1wiJFwiKSk6ci5uYW1lcy5wdXNoKG5ldyBSZWdFeHAoXCJeXCIraCtcIiRcIikpKTt9ZnVuY3Rpb24gbygpe2xldCBoPVsuLi5yLm5hbWVzLm1hcChhKSwuLi5yLnNraXBzLm1hcChhKS5tYXAoZD0+XCItXCIrZCldLmpvaW4oXCIsXCIpO3JldHVybiByLmVuYWJsZShcIlwiKSxofWZ1bmN0aW9uIHMoaCl7aWYoaFtoLmxlbmd0aC0xXT09PVwiKlwiKXJldHVybiAhMDtsZXQgZCxnO2ZvcihkPTAsZz1yLnNraXBzLmxlbmd0aDtkPGc7ZCsrKWlmKHIuc2tpcHNbZF0udGVzdChoKSlyZXR1cm4gITE7Zm9yKGQ9MCxnPXIubmFtZXMubGVuZ3RoO2Q8ZztkKyspaWYoci5uYW1lc1tkXS50ZXN0KGgpKXJldHVybiAhMDtyZXR1cm4gITF9ZnVuY3Rpb24gYShoKXtyZXR1cm4gaC50b1N0cmluZygpLnN1YnN0cmluZygyLGgudG9TdHJpbmcoKS5sZW5ndGgtMikucmVwbGFjZSgvXFwuXFwqXFw/JC8sXCIqXCIpfWZ1bmN0aW9uIGwoaCl7cmV0dXJuIGggaW5zdGFuY2VvZiBFcnJvcj9oLnN0YWNrfHxoLm1lc3NhZ2U6aH1mdW5jdGlvbiBjKCl7Y29uc29sZS53YXJuKFwiSW5zdGFuY2UgbWV0aG9kIGBkZWJ1Zy5kZXN0cm95KClgIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBgZGVidWdgLlwiKTt9cmV0dXJuIHIuZW5hYmxlKHIubG9hZCgpKSxyfXlkLmV4cG9ydHM9U207fSk7dmFyIG90PU0oKHhlLEJuKT0+e18oKTt2KCk7bSgpO3hlLmZvcm1hdEFyZ3M9SW07eGUuc2F2ZT1UbTt4ZS5sb2FkPVJtO3hlLnVzZUNvbG9ycz1BbTt4ZS5zdG9yYWdlPUNtKCk7eGUuZGVzdHJveT0oKCk9PntsZXQgdD0hMTtyZXR1cm4gKCk9Pnt0fHwodD0hMCxjb25zb2xlLndhcm4oXCJJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuXCIpKTt9fSkoKTt4ZS5jb2xvcnM9W1wiIzAwMDBDQ1wiLFwiIzAwMDBGRlwiLFwiIzAwMzNDQ1wiLFwiIzAwMzNGRlwiLFwiIzAwNjZDQ1wiLFwiIzAwNjZGRlwiLFwiIzAwOTlDQ1wiLFwiIzAwOTlGRlwiLFwiIzAwQ0MwMFwiLFwiIzAwQ0MzM1wiLFwiIzAwQ0M2NlwiLFwiIzAwQ0M5OVwiLFwiIzAwQ0NDQ1wiLFwiIzAwQ0NGRlwiLFwiIzMzMDBDQ1wiLFwiIzMzMDBGRlwiLFwiIzMzMzNDQ1wiLFwiIzMzMzNGRlwiLFwiIzMzNjZDQ1wiLFwiIzMzNjZGRlwiLFwiIzMzOTlDQ1wiLFwiIzMzOTlGRlwiLFwiIzMzQ0MwMFwiLFwiIzMzQ0MzM1wiLFwiIzMzQ0M2NlwiLFwiIzMzQ0M5OVwiLFwiIzMzQ0NDQ1wiLFwiIzMzQ0NGRlwiLFwiIzY2MDBDQ1wiLFwiIzY2MDBGRlwiLFwiIzY2MzNDQ1wiLFwiIzY2MzNGRlwiLFwiIzY2Q0MwMFwiLFwiIzY2Q0MzM1wiLFwiIzk5MDBDQ1wiLFwiIzk5MDBGRlwiLFwiIzk5MzNDQ1wiLFwiIzk5MzNGRlwiLFwiIzk5Q0MwMFwiLFwiIzk5Q0MzM1wiLFwiI0NDMDAwMFwiLFwiI0NDMDAzM1wiLFwiI0NDMDA2NlwiLFwiI0NDMDA5OVwiLFwiI0NDMDBDQ1wiLFwiI0NDMDBGRlwiLFwiI0NDMzMwMFwiLFwiI0NDMzMzM1wiLFwiI0NDMzM2NlwiLFwiI0NDMzM5OVwiLFwiI0NDMzNDQ1wiLFwiI0NDMzNGRlwiLFwiI0NDNjYwMFwiLFwiI0NDNjYzM1wiLFwiI0NDOTkwMFwiLFwiI0NDOTkzM1wiLFwiI0NDQ0MwMFwiLFwiI0NDQ0MzM1wiLFwiI0ZGMDAwMFwiLFwiI0ZGMDAzM1wiLFwiI0ZGMDA2NlwiLFwiI0ZGMDA5OVwiLFwiI0ZGMDBDQ1wiLFwiI0ZGMDBGRlwiLFwiI0ZGMzMwMFwiLFwiI0ZGMzMzM1wiLFwiI0ZGMzM2NlwiLFwiI0ZGMzM5OVwiLFwiI0ZGMzNDQ1wiLFwiI0ZGMzNGRlwiLFwiI0ZGNjYwMFwiLFwiI0ZGNjYzM1wiLFwiI0ZGOTkwMFwiLFwiI0ZGOTkzM1wiLFwiI0ZGQ0MwMFwiLFwiI0ZGQ0MzM1wiXTtmdW5jdGlvbiBBbSgpe3JldHVybiB0eXBlb2Ygd2luZG93PFwidVwiJiZ3aW5kb3cucHJvY2VzcyYmKHdpbmRvdy5wcm9jZXNzLnR5cGU9PT1cInJlbmRlcmVyXCJ8fHdpbmRvdy5wcm9jZXNzLl9fbndqcyk/ITA6dHlwZW9mIG5hdmlnYXRvcjxcInVcIiYmbmF2aWdhdG9yLnVzZXJBZ2VudCYmbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC8oZWRnZXx0cmlkZW50KVxcLyhcXGQrKS8pPyExOnR5cGVvZiBkb2N1bWVudDxcInVcIiYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUmJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5XZWJraXRBcHBlYXJhbmNlfHx0eXBlb2Ygd2luZG93PFwidVwiJiZ3aW5kb3cuY29uc29sZSYmKHdpbmRvdy5jb25zb2xlLmZpcmVidWd8fHdpbmRvdy5jb25zb2xlLmV4Y2VwdGlvbiYmd2luZG93LmNvbnNvbGUudGFibGUpfHx0eXBlb2YgbmF2aWdhdG9yPFwidVwiJiZuYXZpZ2F0b3IudXNlckFnZW50JiZuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2ZpcmVmb3hcXC8oXFxkKykvKSYmcGFyc2VJbnQoUmVnRXhwLiQxLDEwKT49MzF8fHR5cGVvZiBuYXZpZ2F0b3I8XCJ1XCImJm5hdmlnYXRvci51c2VyQWdlbnQmJm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvYXBwbGV3ZWJraXRcXC8oXFxkKykvKX1mdW5jdGlvbiBJbSh0KXtpZih0WzBdPSh0aGlzLnVzZUNvbG9ycz9cIiVjXCI6XCJcIikrdGhpcy5uYW1lc3BhY2UrKHRoaXMudXNlQ29sb3JzP1wiICVjXCI6XCIgXCIpK3RbMF0rKHRoaXMudXNlQ29sb3JzP1wiJWMgXCI6XCIgXCIpK1wiK1wiK0JuLmV4cG9ydHMuaHVtYW5pemUodGhpcy5kaWZmKSwhdGhpcy51c2VDb2xvcnMpcmV0dXJuO2xldCBlPVwiY29sb3I6IFwiK3RoaXMuY29sb3I7dC5zcGxpY2UoMSwwLGUsXCJjb2xvcjogaW5oZXJpdFwiKTtsZXQgcj0wLGk9MDt0WzBdLnJlcGxhY2UoLyVbYS16QS1aJV0vZyxuPT57biE9PVwiJSVcIiYmKHIrKyxuPT09XCIlY1wiJiYoaT1yKSk7fSksdC5zcGxpY2UoaSwwLGUpO314ZS5sb2c9Y29uc29sZS5kZWJ1Z3x8Y29uc29sZS5sb2d8fCgoKT0+e30pO2Z1bmN0aW9uIFRtKHQpe3RyeXt0P3hlLnN0b3JhZ2Uuc2V0SXRlbShcImRlYnVnXCIsdCk6eGUuc3RvcmFnZS5yZW1vdmVJdGVtKFwiZGVidWdcIik7fWNhdGNoe319ZnVuY3Rpb24gUm0oKXtsZXQgdDt0cnl7dD14ZS5zdG9yYWdlLmdldEl0ZW0oXCJkZWJ1Z1wiKTt9Y2F0Y2h7fXJldHVybiAhdCYmdHlwZW9mIEI8XCJ1XCImJlwiZW52XCJpbiBCJiYodD1CLmVudi5ERUJVRyksdH1mdW5jdGlvbiBDbSgpe3RyeXtyZXR1cm4gbG9jYWxTdG9yYWdlfWNhdGNoe319Qm4uZXhwb3J0cz1iZCgpKHhlKTt2YXJ7Zm9ybWF0dGVyczpCbX09Qm4uZXhwb3J0cztCbS5qPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCl9Y2F0Y2goZSl7cmV0dXJuIFwiW1VuZXhwZWN0ZWRKU09OUGFyc2VFcnJvcl06IFwiK2UubWVzc2FnZX19O30pO3ZhciBtZD1NKChOUCxfZCk9PntfKCk7digpO20oKTt2YXIgUG09ZmQoKSx7RXZlbnRFbWl0dGVyOmttfT0oc3IoKSxYKG5yKSksd2Q9aGQoKSxWPUhvKCksRD1vdCgpKFwibXF0dC1wYWNrZXQ6cGFyc2VyXCIpLFZvPWNsYXNzIHQgZXh0ZW5kcyBrbXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5wYXJzZXI9dGhpcy5jb25zdHJ1Y3Rvci5wYXJzZXI7fXN0YXRpYyBwYXJzZXIoZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiB0Pyh0aGlzLnNldHRpbmdzPWV8fHt9LHRoaXMuX3N0YXRlcz1bXCJfcGFyc2VIZWFkZXJcIixcIl9wYXJzZUxlbmd0aFwiLFwiX3BhcnNlUGF5bG9hZFwiLFwiX25ld1BhY2tldFwiXSx0aGlzLl9yZXNldFN0YXRlKCksdGhpcyk6bmV3IHQoKS5wYXJzZXIoZSl9X3Jlc2V0U3RhdGUoKXtEKFwiX3Jlc2V0U3RhdGU6IHJlc2V0dGluZyBwYWNrZXQsIGVycm9yLCBfbGlzdCwgYW5kIF9zdGF0ZUNvdW50ZXJcIiksdGhpcy5wYWNrZXQ9bmV3IHdkLHRoaXMuZXJyb3I9bnVsbCx0aGlzLl9saXN0PVBtKCksdGhpcy5fc3RhdGVDb3VudGVyPTA7fXBhcnNlKGUpe2Zvcih0aGlzLmVycm9yJiZ0aGlzLl9yZXNldFN0YXRlKCksdGhpcy5fbGlzdC5hcHBlbmQoZSksRChcInBhcnNlOiBjdXJyZW50IHN0YXRlOiAlc1wiLHRoaXMuX3N0YXRlc1t0aGlzLl9zdGF0ZUNvdW50ZXJdKTsodGhpcy5wYWNrZXQubGVuZ3RoIT09LTF8fHRoaXMuX2xpc3QubGVuZ3RoPjApJiZ0aGlzW3RoaXMuX3N0YXRlc1t0aGlzLl9zdGF0ZUNvdW50ZXJdXSgpJiYhdGhpcy5lcnJvcjspdGhpcy5fc3RhdGVDb3VudGVyKyssRChcInBhcnNlOiBzdGF0ZSBjb21wbGV0ZS4gX3N0YXRlQ291bnRlciBpcyBub3c6ICVkXCIsdGhpcy5fc3RhdGVDb3VudGVyKSxEKFwicGFyc2U6IHBhY2tldC5sZW5ndGg6ICVkLCBidWZmZXIgbGlzdCBsZW5ndGg6ICVkXCIsdGhpcy5wYWNrZXQubGVuZ3RoLHRoaXMuX2xpc3QubGVuZ3RoKSx0aGlzLl9zdGF0ZUNvdW50ZXI+PXRoaXMuX3N0YXRlcy5sZW5ndGgmJih0aGlzLl9zdGF0ZUNvdW50ZXI9MCk7cmV0dXJuIEQoXCJwYXJzZTogZXhpdGVkIHdoaWxlIGxvb3AuIHBhY2tldDogJWQsIGJ1ZmZlciBsaXN0IGxlbmd0aDogJWRcIix0aGlzLnBhY2tldC5sZW5ndGgsdGhpcy5fbGlzdC5sZW5ndGgpLHRoaXMuX2xpc3QubGVuZ3RofV9wYXJzZUhlYWRlcigpe2xldCBlPXRoaXMuX2xpc3QucmVhZFVJbnQ4KDApLHI9ZT4+Vi5DTURfU0hJRlQ7dGhpcy5wYWNrZXQuY21kPVYudHlwZXNbcl07bGV0IGk9ZSYxNSxuPVYucmVxdWlyZWRIZWFkZXJGbGFnc1tyXTtyZXR1cm4gbiE9bnVsbCYmaSE9PW4/dGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihWLnJlcXVpcmVkSGVhZGVyRmxhZ3NFcnJvcnNbcl0pKToodGhpcy5wYWNrZXQucmV0YWluPShlJlYuUkVUQUlOX01BU0spIT09MCx0aGlzLnBhY2tldC5xb3M9ZT4+Vi5RT1NfU0hJRlQmVi5RT1NfTUFTSyx0aGlzLnBhY2tldC5xb3M+Mj90aGlzLl9lbWl0RXJyb3IobmV3IEVycm9yKFwiUGFja2V0IG11c3Qgbm90IGhhdmUgYm90aCBRb1MgYml0cyBzZXQgdG8gMVwiKSk6KHRoaXMucGFja2V0LmR1cD0oZSZWLkRVUF9NQVNLKSE9PTAsRChcIl9wYXJzZUhlYWRlcjogcGFja2V0OiAlb1wiLHRoaXMucGFja2V0KSx0aGlzLl9saXN0LmNvbnN1bWUoMSksITApKX1fcGFyc2VMZW5ndGgoKXtsZXQgZT10aGlzLl9wYXJzZVZhckJ5dGVOdW0oITApO3JldHVybiBlJiYodGhpcy5wYWNrZXQubGVuZ3RoPWUudmFsdWUsdGhpcy5fbGlzdC5jb25zdW1lKGUuYnl0ZXMpKSxEKFwiX3BhcnNlTGVuZ3RoICVkXCIsZS52YWx1ZSksISFlfV9wYXJzZVBheWxvYWQoKXtEKFwiX3BhcnNlUGF5bG9hZDogcGF5bG9hZCAlT1wiLHRoaXMuX2xpc3QpO2xldCBlPSExO2lmKHRoaXMucGFja2V0Lmxlbmd0aD09PTB8fHRoaXMuX2xpc3QubGVuZ3RoPj10aGlzLnBhY2tldC5sZW5ndGgpe3N3aXRjaCh0aGlzLl9wb3M9MCx0aGlzLnBhY2tldC5jbWQpe2Nhc2VcImNvbm5lY3RcIjp0aGlzLl9wYXJzZUNvbm5lY3QoKTticmVhaztjYXNlXCJjb25uYWNrXCI6dGhpcy5fcGFyc2VDb25uYWNrKCk7YnJlYWs7Y2FzZVwicHVibGlzaFwiOnRoaXMuX3BhcnNlUHVibGlzaCgpO2JyZWFrO2Nhc2VcInB1YmFja1wiOmNhc2VcInB1YnJlY1wiOmNhc2VcInB1YnJlbFwiOmNhc2VcInB1YmNvbXBcIjp0aGlzLl9wYXJzZUNvbmZpcm1hdGlvbigpO2JyZWFrO2Nhc2VcInN1YnNjcmliZVwiOnRoaXMuX3BhcnNlU3Vic2NyaWJlKCk7YnJlYWs7Y2FzZVwic3ViYWNrXCI6dGhpcy5fcGFyc2VTdWJhY2soKTticmVhaztjYXNlXCJ1bnN1YnNjcmliZVwiOnRoaXMuX3BhcnNlVW5zdWJzY3JpYmUoKTticmVhaztjYXNlXCJ1bnN1YmFja1wiOnRoaXMuX3BhcnNlVW5zdWJhY2soKTticmVhaztjYXNlXCJwaW5ncmVxXCI6Y2FzZVwicGluZ3Jlc3BcIjpicmVhaztjYXNlXCJkaXNjb25uZWN0XCI6dGhpcy5fcGFyc2VEaXNjb25uZWN0KCk7YnJlYWs7Y2FzZVwiYXV0aFwiOnRoaXMuX3BhcnNlQXV0aCgpO2JyZWFrO2RlZmF1bHQ6dGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihcIk5vdCBzdXBwb3J0ZWRcIikpO31lPSEwO31yZXR1cm4gRChcIl9wYXJzZVBheWxvYWQgY29tcGxldGUgcmVzdWx0OiAlc1wiLGUpLGV9X3BhcnNlQ29ubmVjdCgpe0QoXCJfcGFyc2VDb25uZWN0XCIpO2xldCBlLHIsaSxuLG89e30scz10aGlzLnBhY2tldCxhPXRoaXMuX3BhcnNlU3RyaW5nKCk7aWYoYT09PW51bGwpcmV0dXJuIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IoXCJDYW5ub3QgcGFyc2UgcHJvdG9jb2xJZFwiKSk7aWYoYSE9PVwiTVFUVFwiJiZhIT09XCJNUUlzZHBcIilyZXR1cm4gdGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihcIkludmFsaWQgcHJvdG9jb2xJZFwiKSk7aWYocy5wcm90b2NvbElkPWEsdGhpcy5fcG9zPj10aGlzLl9saXN0Lmxlbmd0aClyZXR1cm4gdGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihcIlBhY2tldCB0b28gc2hvcnRcIikpO2lmKHMucHJvdG9jb2xWZXJzaW9uPXRoaXMuX2xpc3QucmVhZFVJbnQ4KHRoaXMuX3Bvcykscy5wcm90b2NvbFZlcnNpb24+PTEyOCYmKHMuYnJpZGdlTW9kZT0hMCxzLnByb3RvY29sVmVyc2lvbj1zLnByb3RvY29sVmVyc2lvbi0xMjgpLHMucHJvdG9jb2xWZXJzaW9uIT09MyYmcy5wcm90b2NvbFZlcnNpb24hPT00JiZzLnByb3RvY29sVmVyc2lvbiE9PTUpcmV0dXJuIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IoXCJJbnZhbGlkIHByb3RvY29sIHZlcnNpb25cIikpO2lmKHRoaXMuX3BvcysrLHRoaXMuX3Bvcz49dGhpcy5fbGlzdC5sZW5ndGgpcmV0dXJuIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IoXCJQYWNrZXQgdG9vIHNob3J0XCIpKTtpZih0aGlzLl9saXN0LnJlYWRVSW50OCh0aGlzLl9wb3MpJjEpcmV0dXJuIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IoXCJDb25uZWN0IGZsYWcgYml0IDAgbXVzdCBiZSAwLCBidXQgZ290IDFcIikpO28udXNlcm5hbWU9dGhpcy5fbGlzdC5yZWFkVUludDgodGhpcy5fcG9zKSZWLlVTRVJOQU1FX01BU0ssby5wYXNzd29yZD10aGlzLl9saXN0LnJlYWRVSW50OCh0aGlzLl9wb3MpJlYuUEFTU1dPUkRfTUFTSyxvLndpbGw9dGhpcy5fbGlzdC5yZWFkVUludDgodGhpcy5fcG9zKSZWLldJTExfRkxBR19NQVNLO2xldCBsPSEhKHRoaXMuX2xpc3QucmVhZFVJbnQ4KHRoaXMuX3BvcykmVi5XSUxMX1JFVEFJTl9NQVNLKSxjPSh0aGlzLl9saXN0LnJlYWRVSW50OCh0aGlzLl9wb3MpJlYuV0lMTF9RT1NfTUFTSyk+PlYuV0lMTF9RT1NfU0hJRlQ7aWYoby53aWxsKXMud2lsbD17fSxzLndpbGwucmV0YWluPWwscy53aWxsLnFvcz1jO2Vsc2Uge2lmKGwpcmV0dXJuIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IoXCJXaWxsIFJldGFpbiBGbGFnIG11c3QgYmUgc2V0IHRvIHplcm8gd2hlbiBXaWxsIEZsYWcgaXMgc2V0IHRvIDBcIikpO2lmKGMpcmV0dXJuIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IoXCJXaWxsIFFvUyBtdXN0IGJlIHNldCB0byB6ZXJvIHdoZW4gV2lsbCBGbGFnIGlzIHNldCB0byAwXCIpKX1pZihzLmNsZWFuPSh0aGlzLl9saXN0LnJlYWRVSW50OCh0aGlzLl9wb3MpJlYuQ0xFQU5fU0VTU0lPTl9NQVNLKSE9PTAsdGhpcy5fcG9zKysscy5rZWVwYWxpdmU9dGhpcy5fcGFyc2VOdW0oKSxzLmtlZXBhbGl2ZT09PS0xKXJldHVybiB0aGlzLl9lbWl0RXJyb3IobmV3IEVycm9yKFwiUGFja2V0IHRvbyBzaG9ydFwiKSk7aWYocy5wcm90b2NvbFZlcnNpb249PT01KXtsZXQgZD10aGlzLl9wYXJzZVByb3BlcnRpZXMoKTtPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhkKS5sZW5ndGgmJihzLnByb3BlcnRpZXM9ZCk7fWxldCBoPXRoaXMuX3BhcnNlU3RyaW5nKCk7aWYoaD09PW51bGwpcmV0dXJuIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IoXCJQYWNrZXQgdG9vIHNob3J0XCIpKTtpZihzLmNsaWVudElkPWgsRChcIl9wYXJzZUNvbm5lY3Q6IHBhY2tldC5jbGllbnRJZDogJXNcIixzLmNsaWVudElkKSxvLndpbGwpe2lmKHMucHJvdG9jb2xWZXJzaW9uPT09NSl7bGV0IGQ9dGhpcy5fcGFyc2VQcm9wZXJ0aWVzKCk7T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZCkubGVuZ3RoJiYocy53aWxsLnByb3BlcnRpZXM9ZCk7fWlmKGU9dGhpcy5fcGFyc2VTdHJpbmcoKSxlPT09bnVsbClyZXR1cm4gdGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihcIkNhbm5vdCBwYXJzZSB3aWxsIHRvcGljXCIpKTtpZihzLndpbGwudG9waWM9ZSxEKFwiX3BhcnNlQ29ubmVjdDogcGFja2V0LndpbGwudG9waWM6ICVzXCIscy53aWxsLnRvcGljKSxyPXRoaXMuX3BhcnNlQnVmZmVyKCkscj09PW51bGwpcmV0dXJuIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IoXCJDYW5ub3QgcGFyc2Ugd2lsbCBwYXlsb2FkXCIpKTtzLndpbGwucGF5bG9hZD1yLEQoXCJfcGFyc2VDb25uZWN0OiBwYWNrZXQud2lsbC5wYXlsYW9kOiAlc1wiLHMud2lsbC5wYXlsb2FkKTt9aWYoby51c2VybmFtZSl7aWYobj10aGlzLl9wYXJzZVN0cmluZygpLG49PT1udWxsKXJldHVybiB0aGlzLl9lbWl0RXJyb3IobmV3IEVycm9yKFwiQ2Fubm90IHBhcnNlIHVzZXJuYW1lXCIpKTtzLnVzZXJuYW1lPW4sRChcIl9wYXJzZUNvbm5lY3Q6IHBhY2tldC51c2VybmFtZTogJXNcIixzLnVzZXJuYW1lKTt9aWYoby5wYXNzd29yZCl7aWYoaT10aGlzLl9wYXJzZUJ1ZmZlcigpLGk9PT1udWxsKXJldHVybiB0aGlzLl9lbWl0RXJyb3IobmV3IEVycm9yKFwiQ2Fubm90IHBhcnNlIHBhc3N3b3JkXCIpKTtzLnBhc3N3b3JkPWk7fXJldHVybiB0aGlzLnNldHRpbmdzPXMsRChcIl9wYXJzZUNvbm5lY3Q6IGNvbXBsZXRlXCIpLHN9X3BhcnNlQ29ubmFjaygpe0QoXCJfcGFyc2VDb25uYWNrXCIpO2xldCBlPXRoaXMucGFja2V0O2lmKHRoaXMuX2xpc3QubGVuZ3RoPDEpcmV0dXJuIG51bGw7bGV0IHI9dGhpcy5fbGlzdC5yZWFkVUludDgodGhpcy5fcG9zKyspO2lmKHI+MSlyZXR1cm4gdGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihcIkludmFsaWQgY29ubmFjayBmbGFncywgYml0cyA3LTEgbXVzdCBiZSBzZXQgdG8gMFwiKSk7aWYoZS5zZXNzaW9uUHJlc2VudD0hIShyJlYuU0VTU0lPTlBSRVNFTlRfTUFTSyksdGhpcy5zZXR0aW5ncy5wcm90b2NvbFZlcnNpb249PT01KXRoaXMuX2xpc3QubGVuZ3RoPj0yP2UucmVhc29uQ29kZT10aGlzLl9saXN0LnJlYWRVSW50OCh0aGlzLl9wb3MrKyk6ZS5yZWFzb25Db2RlPTA7ZWxzZSB7aWYodGhpcy5fbGlzdC5sZW5ndGg8MilyZXR1cm4gbnVsbDtlLnJldHVybkNvZGU9dGhpcy5fbGlzdC5yZWFkVUludDgodGhpcy5fcG9zKyspO31pZihlLnJldHVybkNvZGU9PT0tMXx8ZS5yZWFzb25Db2RlPT09LTEpcmV0dXJuIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IoXCJDYW5ub3QgcGFyc2UgcmV0dXJuIGNvZGVcIikpO2lmKHRoaXMuc2V0dGluZ3MucHJvdG9jb2xWZXJzaW9uPT09NSl7bGV0IGk9dGhpcy5fcGFyc2VQcm9wZXJ0aWVzKCk7T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaSkubGVuZ3RoJiYoZS5wcm9wZXJ0aWVzPWkpO31EKFwiX3BhcnNlQ29ubmFjazogY29tcGxldGVcIik7fV9wYXJzZVB1Ymxpc2goKXtEKFwiX3BhcnNlUHVibGlzaFwiKTtsZXQgZT10aGlzLnBhY2tldDtpZihlLnRvcGljPXRoaXMuX3BhcnNlU3RyaW5nKCksZS50b3BpYz09PW51bGwpcmV0dXJuIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IoXCJDYW5ub3QgcGFyc2UgdG9waWNcIikpO2lmKCEoZS5xb3M+MCYmIXRoaXMuX3BhcnNlTWVzc2FnZUlkKCkpKXtpZih0aGlzLnNldHRpbmdzLnByb3RvY29sVmVyc2lvbj09PTUpe2xldCByPXRoaXMuX3BhcnNlUHJvcGVydGllcygpO09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHIpLmxlbmd0aCYmKGUucHJvcGVydGllcz1yKTt9ZS5wYXlsb2FkPXRoaXMuX2xpc3Quc2xpY2UodGhpcy5fcG9zLGUubGVuZ3RoKSxEKFwiX3BhcnNlUHVibGlzaDogcGF5bG9hZCBmcm9tIGJ1ZmZlciBsaXN0OiAlb1wiLGUucGF5bG9hZCk7fX1fcGFyc2VTdWJzY3JpYmUoKXtEKFwiX3BhcnNlU3Vic2NyaWJlXCIpO2xldCBlPXRoaXMucGFja2V0LHIsaSxuLG8scyxhLGw7aWYoZS5zdWJzY3JpcHRpb25zPVtdLCEhdGhpcy5fcGFyc2VNZXNzYWdlSWQoKSl7aWYodGhpcy5zZXR0aW5ncy5wcm90b2NvbFZlcnNpb249PT01KXtsZXQgYz10aGlzLl9wYXJzZVByb3BlcnRpZXMoKTtPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjKS5sZW5ndGgmJihlLnByb3BlcnRpZXM9Yyk7fWlmKGUubGVuZ3RoPD0wKXJldHVybiB0aGlzLl9lbWl0RXJyb3IobmV3IEVycm9yKFwiTWFsZm9ybWVkIHN1YnNjcmliZSwgbm8gcGF5bG9hZCBzcGVjaWZpZWRcIikpO2Zvcig7dGhpcy5fcG9zPGUubGVuZ3RoOyl7aWYocj10aGlzLl9wYXJzZVN0cmluZygpLHI9PT1udWxsKXJldHVybiB0aGlzLl9lbWl0RXJyb3IobmV3IEVycm9yKFwiQ2Fubm90IHBhcnNlIHRvcGljXCIpKTtpZih0aGlzLl9wb3M+PWUubGVuZ3RoKXJldHVybiB0aGlzLl9lbWl0RXJyb3IobmV3IEVycm9yKFwiTWFsZm9ybWVkIFN1YnNjcmliZSBQYXlsb2FkXCIpKTtpZihpPXRoaXMuX3BhcnNlQnl0ZSgpLHRoaXMuc2V0dGluZ3MucHJvdG9jb2xWZXJzaW9uPT09NSl7aWYoaSYxOTIpcmV0dXJuIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IoXCJJbnZhbGlkIHN1YnNjcmliZSB0b3BpYyBmbGFnIGJpdHMsIGJpdHMgNy02IG11c3QgYmUgMFwiKSl9ZWxzZSBpZihpJjI1MilyZXR1cm4gdGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihcIkludmFsaWQgc3Vic2NyaWJlIHRvcGljIGZsYWcgYml0cywgYml0cyA3LTIgbXVzdCBiZSAwXCIpKTtpZihuPWkmVi5TVUJTQ1JJQkVfT1BUSU9OU19RT1NfTUFTSyxuPjIpcmV0dXJuIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IoXCJJbnZhbGlkIHN1YnNjcmliZSBRb1MsIG11c3QgYmUgPD0gMlwiKSk7aWYoYT0oaT4+Vi5TVUJTQ1JJQkVfT1BUSU9OU19OTF9TSElGVCZWLlNVQlNDUklCRV9PUFRJT05TX05MX01BU0spIT09MCxzPShpPj5WLlNVQlNDUklCRV9PUFRJT05TX1JBUF9TSElGVCZWLlNVQlNDUklCRV9PUFRJT05TX1JBUF9NQVNLKSE9PTAsbz1pPj5WLlNVQlNDUklCRV9PUFRJT05TX1JIX1NISUZUJlYuU1VCU0NSSUJFX09QVElPTlNfUkhfTUFTSyxvPjIpcmV0dXJuIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IoXCJJbnZhbGlkIHJldGFpbiBoYW5kbGluZywgbXVzdCBiZSA8PSAyXCIpKTtsPXt0b3BpYzpyLHFvczpufSx0aGlzLnNldHRpbmdzLnByb3RvY29sVmVyc2lvbj09PTU/KGwubmw9YSxsLnJhcD1zLGwucmg9byk6dGhpcy5zZXR0aW5ncy5icmlkZ2VNb2RlJiYobC5yaD0wLGwucmFwPSEwLGwubmw9ITApLEQoXCJfcGFyc2VTdWJzY3JpYmU6IHB1c2ggc3Vic2NyaXB0aW9uIGAlc2AgdG8gc3Vic2NyaXB0aW9uXCIsbCksZS5zdWJzY3JpcHRpb25zLnB1c2gobCk7fX19X3BhcnNlU3ViYWNrKCl7RChcIl9wYXJzZVN1YmFja1wiKTtsZXQgZT10aGlzLnBhY2tldDtpZih0aGlzLnBhY2tldC5ncmFudGVkPVtdLCEhdGhpcy5fcGFyc2VNZXNzYWdlSWQoKSl7aWYodGhpcy5zZXR0aW5ncy5wcm90b2NvbFZlcnNpb249PT01KXtsZXQgcj10aGlzLl9wYXJzZVByb3BlcnRpZXMoKTtPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhyKS5sZW5ndGgmJihlLnByb3BlcnRpZXM9cik7fWlmKGUubGVuZ3RoPD0wKXJldHVybiB0aGlzLl9lbWl0RXJyb3IobmV3IEVycm9yKFwiTWFsZm9ybWVkIHN1YmFjaywgbm8gcGF5bG9hZCBzcGVjaWZpZWRcIikpO2Zvcig7dGhpcy5fcG9zPHRoaXMucGFja2V0Lmxlbmd0aDspe2xldCByPXRoaXMuX2xpc3QucmVhZFVJbnQ4KHRoaXMuX3BvcysrKTtpZih0aGlzLnNldHRpbmdzLnByb3RvY29sVmVyc2lvbj09PTUpe2lmKCFWLk1RVFQ1X1NVQkFDS19DT0RFU1tyXSlyZXR1cm4gdGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihcIkludmFsaWQgc3ViYWNrIGNvZGVcIikpfWVsc2UgaWYocj4yJiZyIT09MTI4KXJldHVybiB0aGlzLl9lbWl0RXJyb3IobmV3IEVycm9yKFwiSW52YWxpZCBzdWJhY2sgUW9TLCBtdXN0IGJlIDAsIDEsIDIgb3IgMTI4XCIpKTt0aGlzLnBhY2tldC5ncmFudGVkLnB1c2gocik7fX19X3BhcnNlVW5zdWJzY3JpYmUoKXtEKFwiX3BhcnNlVW5zdWJzY3JpYmVcIik7bGV0IGU9dGhpcy5wYWNrZXQ7aWYoZS51bnN1YnNjcmlwdGlvbnM9W10sISF0aGlzLl9wYXJzZU1lc3NhZ2VJZCgpKXtpZih0aGlzLnNldHRpbmdzLnByb3RvY29sVmVyc2lvbj09PTUpe2xldCByPXRoaXMuX3BhcnNlUHJvcGVydGllcygpO09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHIpLmxlbmd0aCYmKGUucHJvcGVydGllcz1yKTt9aWYoZS5sZW5ndGg8PTApcmV0dXJuIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IoXCJNYWxmb3JtZWQgdW5zdWJzY3JpYmUsIG5vIHBheWxvYWQgc3BlY2lmaWVkXCIpKTtmb3IoO3RoaXMuX3BvczxlLmxlbmd0aDspe2xldCByPXRoaXMuX3BhcnNlU3RyaW5nKCk7aWYocj09PW51bGwpcmV0dXJuIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IoXCJDYW5ub3QgcGFyc2UgdG9waWNcIikpO0QoXCJfcGFyc2VVbnN1YnNjcmliZTogcHVzaCB0b3BpYyBgJXNgIHRvIHVuc3Vic2NyaXB0aW9uc1wiLHIpLGUudW5zdWJzY3JpcHRpb25zLnB1c2gocik7fX19X3BhcnNlVW5zdWJhY2soKXtEKFwiX3BhcnNlVW5zdWJhY2tcIik7bGV0IGU9dGhpcy5wYWNrZXQ7aWYoIXRoaXMuX3BhcnNlTWVzc2FnZUlkKCkpcmV0dXJuIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IoXCJDYW5ub3QgcGFyc2UgbWVzc2FnZUlkXCIpKTtpZigodGhpcy5zZXR0aW5ncy5wcm90b2NvbFZlcnNpb249PT0zfHx0aGlzLnNldHRpbmdzLnByb3RvY29sVmVyc2lvbj09PTQpJiZlLmxlbmd0aCE9PTIpcmV0dXJuIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IoXCJNYWxmb3JtZWQgdW5zdWJhY2ssIHBheWxvYWQgbGVuZ3RoIG11c3QgYmUgMlwiKSk7aWYoZS5sZW5ndGg8PTApcmV0dXJuIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IoXCJNYWxmb3JtZWQgdW5zdWJhY2ssIG5vIHBheWxvYWQgc3BlY2lmaWVkXCIpKTtpZih0aGlzLnNldHRpbmdzLnByb3RvY29sVmVyc2lvbj09PTUpe2xldCByPXRoaXMuX3BhcnNlUHJvcGVydGllcygpO2ZvcihPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhyKS5sZW5ndGgmJihlLnByb3BlcnRpZXM9ciksZS5ncmFudGVkPVtdO3RoaXMuX3Bvczx0aGlzLnBhY2tldC5sZW5ndGg7KXtsZXQgaT10aGlzLl9saXN0LnJlYWRVSW50OCh0aGlzLl9wb3MrKyk7aWYoIVYuTVFUVDVfVU5TVUJBQ0tfQ09ERVNbaV0pcmV0dXJuIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IoXCJJbnZhbGlkIHVuc3ViYWNrIGNvZGVcIikpO3RoaXMucGFja2V0LmdyYW50ZWQucHVzaChpKTt9fX1fcGFyc2VDb25maXJtYXRpb24oKXtEKFwiX3BhcnNlQ29uZmlybWF0aW9uOiBwYWNrZXQuY21kOiBgJXNgXCIsdGhpcy5wYWNrZXQuY21kKTtsZXQgZT10aGlzLnBhY2tldDtpZih0aGlzLl9wYXJzZU1lc3NhZ2VJZCgpLHRoaXMuc2V0dGluZ3MucHJvdG9jb2xWZXJzaW9uPT09NSl7aWYoZS5sZW5ndGg+Mil7c3dpdGNoKGUucmVhc29uQ29kZT10aGlzLl9wYXJzZUJ5dGUoKSx0aGlzLnBhY2tldC5jbWQpe2Nhc2VcInB1YmFja1wiOmNhc2VcInB1YnJlY1wiOmlmKCFWLk1RVFQ1X1BVQkFDS19QVUJSRUNfQ09ERVNbZS5yZWFzb25Db2RlXSlyZXR1cm4gdGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihcIkludmFsaWQgXCIrdGhpcy5wYWNrZXQuY21kK1wiIHJlYXNvbiBjb2RlXCIpKTticmVhaztjYXNlXCJwdWJyZWxcIjpjYXNlXCJwdWJjb21wXCI6aWYoIVYuTVFUVDVfUFVCUkVMX1BVQkNPTVBfQ09ERVNbZS5yZWFzb25Db2RlXSlyZXR1cm4gdGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihcIkludmFsaWQgXCIrdGhpcy5wYWNrZXQuY21kK1wiIHJlYXNvbiBjb2RlXCIpKTticmVha31EKFwiX3BhcnNlQ29uZmlybWF0aW9uOiBwYWNrZXQucmVhc29uQ29kZSBgJWRgXCIsZS5yZWFzb25Db2RlKTt9ZWxzZSBlLnJlYXNvbkNvZGU9MDtpZihlLmxlbmd0aD4zKXtsZXQgcj10aGlzLl9wYXJzZVByb3BlcnRpZXMoKTtPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhyKS5sZW5ndGgmJihlLnByb3BlcnRpZXM9cik7fX1yZXR1cm4gITB9X3BhcnNlRGlzY29ubmVjdCgpe2xldCBlPXRoaXMucGFja2V0O2lmKEQoXCJfcGFyc2VEaXNjb25uZWN0XCIpLHRoaXMuc2V0dGluZ3MucHJvdG9jb2xWZXJzaW9uPT09NSl7dGhpcy5fbGlzdC5sZW5ndGg+MD8oZS5yZWFzb25Db2RlPXRoaXMuX3BhcnNlQnl0ZSgpLFYuTVFUVDVfRElTQ09OTkVDVF9DT0RFU1tlLnJlYXNvbkNvZGVdfHx0aGlzLl9lbWl0RXJyb3IobmV3IEVycm9yKFwiSW52YWxpZCBkaXNjb25uZWN0IHJlYXNvbiBjb2RlXCIpKSk6ZS5yZWFzb25Db2RlPTA7bGV0IHI9dGhpcy5fcGFyc2VQcm9wZXJ0aWVzKCk7T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocikubGVuZ3RoJiYoZS5wcm9wZXJ0aWVzPXIpO31yZXR1cm4gRChcIl9wYXJzZURpc2Nvbm5lY3QgcmVzdWx0OiB0cnVlXCIpLCEwfV9wYXJzZUF1dGgoKXtEKFwiX3BhcnNlQXV0aFwiKTtsZXQgZT10aGlzLnBhY2tldDtpZih0aGlzLnNldHRpbmdzLnByb3RvY29sVmVyc2lvbiE9PTUpcmV0dXJuIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IoXCJOb3Qgc3VwcG9ydGVkIGF1dGggcGFja2V0IGZvciB0aGlzIHZlcnNpb24gTVFUVFwiKSk7aWYoZS5yZWFzb25Db2RlPXRoaXMuX3BhcnNlQnl0ZSgpLCFWLk1RVFQ1X0FVVEhfQ09ERVNbZS5yZWFzb25Db2RlXSlyZXR1cm4gdGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihcIkludmFsaWQgYXV0aCByZWFzb24gY29kZVwiKSk7bGV0IHI9dGhpcy5fcGFyc2VQcm9wZXJ0aWVzKCk7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHIpLmxlbmd0aCYmKGUucHJvcGVydGllcz1yKSxEKFwiX3BhcnNlQXV0aDogcmVzdWx0OiB0cnVlXCIpLCEwfV9wYXJzZU1lc3NhZ2VJZCgpe2xldCBlPXRoaXMucGFja2V0O3JldHVybiBlLm1lc3NhZ2VJZD10aGlzLl9wYXJzZU51bSgpLGUubWVzc2FnZUlkPT09bnVsbD8odGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihcIkNhbm5vdCBwYXJzZSBtZXNzYWdlSWRcIikpLCExKTooRChcIl9wYXJzZU1lc3NhZ2VJZDogcGFja2V0Lm1lc3NhZ2VJZCAlZFwiLGUubWVzc2FnZUlkKSwhMCl9X3BhcnNlU3RyaW5nKGUpe2xldCByPXRoaXMuX3BhcnNlTnVtKCksaT1yK3RoaXMuX3BvcztpZihyPT09LTF8fGk+dGhpcy5fbGlzdC5sZW5ndGh8fGk+dGhpcy5wYWNrZXQubGVuZ3RoKXJldHVybiBudWxsO2xldCBuPXRoaXMuX2xpc3QudG9TdHJpbmcoXCJ1dGY4XCIsdGhpcy5fcG9zLGkpO3JldHVybiB0aGlzLl9wb3MrPXIsRChcIl9wYXJzZVN0cmluZzogcmVzdWx0OiAlc1wiLG4pLG59X3BhcnNlU3RyaW5nUGFpcigpe3JldHVybiBEKFwiX3BhcnNlU3RyaW5nUGFpclwiKSx7bmFtZTp0aGlzLl9wYXJzZVN0cmluZygpLHZhbHVlOnRoaXMuX3BhcnNlU3RyaW5nKCl9fV9wYXJzZUJ1ZmZlcigpe2xldCBlPXRoaXMuX3BhcnNlTnVtKCkscj1lK3RoaXMuX3BvcztpZihlPT09LTF8fHI+dGhpcy5fbGlzdC5sZW5ndGh8fHI+dGhpcy5wYWNrZXQubGVuZ3RoKXJldHVybiBudWxsO2xldCBpPXRoaXMuX2xpc3Quc2xpY2UodGhpcy5fcG9zLHIpO3JldHVybiB0aGlzLl9wb3MrPWUsRChcIl9wYXJzZUJ1ZmZlcjogcmVzdWx0OiAlb1wiLGkpLGl9X3BhcnNlTnVtKCl7aWYodGhpcy5fbGlzdC5sZW5ndGgtdGhpcy5fcG9zPDIpcmV0dXJuIC0xO2xldCBlPXRoaXMuX2xpc3QucmVhZFVJbnQxNkJFKHRoaXMuX3Bvcyk7cmV0dXJuIHRoaXMuX3Bvcys9MixEKFwiX3BhcnNlTnVtOiByZXN1bHQ6ICVzXCIsZSksZX1fcGFyc2U0Qnl0ZU51bSgpe2lmKHRoaXMuX2xpc3QubGVuZ3RoLXRoaXMuX3Bvczw0KXJldHVybiAtMTtsZXQgZT10aGlzLl9saXN0LnJlYWRVSW50MzJCRSh0aGlzLl9wb3MpO3JldHVybiB0aGlzLl9wb3MrPTQsRChcIl9wYXJzZTRCeXRlTnVtOiByZXN1bHQ6ICVzXCIsZSksZX1fcGFyc2VWYXJCeXRlTnVtKGUpe0QoXCJfcGFyc2VWYXJCeXRlTnVtXCIpO2xldCByPTQsaT0wLG49MSxvPTAscz0hMSxhLGw9dGhpcy5fcG9zP3RoaXMuX3BvczowO2Zvcig7aTxyJiZsK2k8dGhpcy5fbGlzdC5sZW5ndGg7KXtpZihhPXRoaXMuX2xpc3QucmVhZFVJbnQ4KGwraSsrKSxvKz1uKihhJlYuVkFSQllURUlOVF9NQVNLKSxuKj0xMjgsIShhJlYuVkFSQllURUlOVF9GSU5fTUFTSykpe3M9ITA7YnJlYWt9aWYodGhpcy5fbGlzdC5sZW5ndGg8PWkpYnJlYWt9cmV0dXJuICFzJiZpPT09ciYmdGhpcy5fbGlzdC5sZW5ndGg+PWkmJnRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IoXCJJbnZhbGlkIHZhcmlhYmxlIGJ5dGUgaW50ZWdlclwiKSksbCYmKHRoaXMuX3Bvcys9aSkscz9lP3M9e2J5dGVzOmksdmFsdWU6b306cz1vOnM9ITEsRChcIl9wYXJzZVZhckJ5dGVOdW06IHJlc3VsdDogJW9cIixzKSxzfV9wYXJzZUJ5dGUoKXtsZXQgZTtyZXR1cm4gdGhpcy5fcG9zPHRoaXMuX2xpc3QubGVuZ3RoJiYoZT10aGlzLl9saXN0LnJlYWRVSW50OCh0aGlzLl9wb3MpLHRoaXMuX3BvcysrKSxEKFwiX3BhcnNlQnl0ZTogcmVzdWx0OiAlb1wiLGUpLGV9X3BhcnNlQnlUeXBlKGUpe3N3aXRjaChEKFwiX3BhcnNlQnlUeXBlOiB0eXBlOiAlc1wiLGUpLGUpe2Nhc2VcImJ5dGVcIjpyZXR1cm4gdGhpcy5fcGFyc2VCeXRlKCkhPT0wO2Nhc2VcImludDhcIjpyZXR1cm4gdGhpcy5fcGFyc2VCeXRlKCk7Y2FzZVwiaW50MTZcIjpyZXR1cm4gdGhpcy5fcGFyc2VOdW0oKTtjYXNlXCJpbnQzMlwiOnJldHVybiB0aGlzLl9wYXJzZTRCeXRlTnVtKCk7Y2FzZVwidmFyXCI6cmV0dXJuIHRoaXMuX3BhcnNlVmFyQnl0ZU51bSgpO2Nhc2VcInN0cmluZ1wiOnJldHVybiB0aGlzLl9wYXJzZVN0cmluZygpO2Nhc2VcInBhaXJcIjpyZXR1cm4gdGhpcy5fcGFyc2VTdHJpbmdQYWlyKCk7Y2FzZVwiYmluYXJ5XCI6cmV0dXJuIHRoaXMuX3BhcnNlQnVmZmVyKCl9fV9wYXJzZVByb3BlcnRpZXMoKXtEKFwiX3BhcnNlUHJvcGVydGllc1wiKTtsZXQgZT10aGlzLl9wYXJzZVZhckJ5dGVOdW0oKSxpPXRoaXMuX3BvcytlLG49e307Zm9yKDt0aGlzLl9wb3M8aTspe2xldCBvPXRoaXMuX3BhcnNlQnl0ZSgpO2lmKCFvKXJldHVybiB0aGlzLl9lbWl0RXJyb3IobmV3IEVycm9yKFwiQ2Fubm90IHBhcnNlIHByb3BlcnR5IGNvZGUgdHlwZVwiKSksITE7bGV0IHM9Vi5wcm9wZXJ0aWVzQ29kZXNbb107aWYoIXMpcmV0dXJuIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IoXCJVbmtub3duIHByb3BlcnR5XCIpKSwhMTtpZihzPT09XCJ1c2VyUHJvcGVydGllc1wiKXtuW3NdfHwobltzXT1PYmplY3QuY3JlYXRlKG51bGwpKTtsZXQgYT10aGlzLl9wYXJzZUJ5VHlwZShWLnByb3BlcnRpZXNUeXBlc1tzXSk7aWYobltzXVthLm5hbWVdKWlmKEFycmF5LmlzQXJyYXkobltzXVthLm5hbWVdKSluW3NdW2EubmFtZV0ucHVzaChhLnZhbHVlKTtlbHNlIHtsZXQgbD1uW3NdW2EubmFtZV07bltzXVthLm5hbWVdPVtsXSxuW3NdW2EubmFtZV0ucHVzaChhLnZhbHVlKTt9ZWxzZSBuW3NdW2EubmFtZV09YS52YWx1ZTtjb250aW51ZX1uW3NdP0FycmF5LmlzQXJyYXkobltzXSk/bltzXS5wdXNoKHRoaXMuX3BhcnNlQnlUeXBlKFYucHJvcGVydGllc1R5cGVzW3NdKSk6KG5bc109W25bc11dLG5bc10ucHVzaCh0aGlzLl9wYXJzZUJ5VHlwZShWLnByb3BlcnRpZXNUeXBlc1tzXSkpKTpuW3NdPXRoaXMuX3BhcnNlQnlUeXBlKFYucHJvcGVydGllc1R5cGVzW3NdKTt9cmV0dXJuIG59X25ld1BhY2tldCgpe3JldHVybiBEKFwiX25ld1BhY2tldFwiKSx0aGlzLnBhY2tldCYmKHRoaXMuX2xpc3QuY29uc3VtZSh0aGlzLnBhY2tldC5sZW5ndGgpLEQoXCJfbmV3UGFja2V0OiBwYXJzZXIgZW1pdCBwYWNrZXQ6IHBhY2tldC5jbWQ6ICVzLCBwYWNrZXQucGF5bG9hZDogJXMsIHBhY2tldC5sZW5ndGg6ICVkXCIsdGhpcy5wYWNrZXQuY21kLHRoaXMucGFja2V0LnBheWxvYWQsdGhpcy5wYWNrZXQubGVuZ3RoKSx0aGlzLmVtaXQoXCJwYWNrZXRcIix0aGlzLnBhY2tldCkpLEQoXCJfbmV3UGFja2V0OiBuZXcgcGFja2V0XCIpLHRoaXMucGFja2V0PW5ldyB3ZCx0aGlzLl9wb3M9MCwhMH1fZW1pdEVycm9yKGUpe0QoXCJfZW1pdEVycm9yXCIsZSksdGhpcy5lcnJvcj1lLHRoaXMuZW1pdChcImVycm9yXCIsZSk7fX07X2QuZXhwb3J0cz1Wbzt9KTt2YXIgQWQ9TSgoS1AsU2QpPT57XygpO3YoKTttKCk7dmFye0J1ZmZlcjpTaX09KGJlKCksWChtZSkpLE9tPTY1NTM2LHZkPXt9LHhtPVNpLmlzQnVmZmVyKFNpLmZyb20oWzEsMl0pLnN1YmFycmF5KDAsMSkpO2Z1bmN0aW9uIEVkKHQpe2xldCBlPVNpLmFsbG9jVW5zYWZlKDIpO3JldHVybiBlLndyaXRlVUludDgodD4+OCwwKSxlLndyaXRlVUludDgodCYyNTUsMCsxKSxlfWZ1bmN0aW9uIE1tKCl7Zm9yKGxldCB0PTA7dDxPbTt0KyspdmRbdF09RWQodCk7fWZ1bmN0aW9uIExtKHQpe2xldCByPTAsaT0wLG49U2kuYWxsb2NVbnNhZmUoNCk7ZG8gcj10JTEyOHwwLHQ9dC8xMjh8MCx0PjAmJihyPXJ8MTI4KSxuLndyaXRlVUludDgocixpKyspO3doaWxlKHQ+MCYmaTw0KTtyZXR1cm4gdD4wJiYoaT0wKSx4bT9uLnN1YmFycmF5KDAsaSk6bi5zbGljZSgwLGkpfWZ1bmN0aW9uIFVtKHQpe2xldCBlPVNpLmFsbG9jVW5zYWZlKDQpO3JldHVybiBlLndyaXRlVUludDMyQkUodCwwKSxlfVNkLmV4cG9ydHM9e2NhY2hlOnZkLGdlbmVyYXRlQ2FjaGU6TW0sZ2VuZXJhdGVOdW1iZXI6RWQsZ2VuQnVmVmFyaWFibGVCeXRlSW50OkxtLGdlbmVyYXRlNEJ5dGVCdWZmZXI6VW19O30pO3ZhciBJZD1NKChpayx6byk9PntfKCk7digpO20oKTt0eXBlb2YgQj5cInVcInx8IUIudmVyc2lvbnx8Qi52ZXJzaW9uLmluZGV4T2YoXCJ2MC5cIik9PT0wfHxCLnZlcnNpb24uaW5kZXhPZihcInYxLlwiKT09PTAmJkIudmVyc2lvbi5pbmRleE9mKFwidjEuOC5cIikhPT0wP3pvLmV4cG9ydHM9e25leHRUaWNrOk5tfTp6by5leHBvcnRzPUI7ZnVuY3Rpb24gTm0odCxlLHIsaSl7aWYodHlwZW9mIHQhPVwiZnVuY3Rpb25cIil0aHJvdyBuZXcgVHlwZUVycm9yKCdcImNhbGxiYWNrXCIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7dmFyIG49YXJndW1lbnRzLmxlbmd0aCxvLHM7c3dpdGNoKG4pe2Nhc2UgMDpjYXNlIDE6cmV0dXJuIEIubmV4dFRpY2sodCk7Y2FzZSAyOnJldHVybiBCLm5leHRUaWNrKGZ1bmN0aW9uKCl7dC5jYWxsKG51bGwsZSk7fSk7Y2FzZSAzOnJldHVybiBCLm5leHRUaWNrKGZ1bmN0aW9uKCl7dC5jYWxsKG51bGwsZSxyKTt9KTtjYXNlIDQ6cmV0dXJuIEIubmV4dFRpY2soZnVuY3Rpb24oKXt0LmNhbGwobnVsbCxlLHIsaSk7fSk7ZGVmYXVsdDpmb3Iobz1uZXcgQXJyYXkobi0xKSxzPTA7czxvLmxlbmd0aDspb1tzKytdPWFyZ3VtZW50c1tzXTtyZXR1cm4gQi5uZXh0VGljayhmdW5jdGlvbigpe3QuYXBwbHkobnVsbCxvKTt9KX19fSk7dmFyIFFvPU0oKGRrLHhkKT0+e18oKTt2KCk7bSgpO3ZhciBqPUhvKCkse0J1ZmZlcjpxfT0oYmUoKSxYKG1lKSkscW09cS5hbGxvY1Vuc2FmZSgwKSxEbT1xLmZyb20oWzBdKSxBaT1BZCgpLGptPUlkKCkubmV4dFRpY2sscWU9b3QoKShcIm1xdHQtcGFja2V0OndyaXRlVG9TdHJlYW1cIiksUG49QWkuY2FjaGUsRm09QWkuZ2VuZXJhdGVOdW1iZXIsV209QWkuZ2VuZXJhdGVDYWNoZSxLbz1BaS5nZW5CdWZWYXJpYWJsZUJ5dGVJbnQsJG09QWkuZ2VuZXJhdGU0Qnl0ZUJ1ZmZlcixUZT1Hbyxrbj0hMDtmdW5jdGlvbiBrZCh0LGUscil7c3dpdGNoKHFlKFwiZ2VuZXJhdGUgY2FsbGVkXCIpLGUuY29yayYmKGUuY29yaygpLGptKEhtLGUpKSxrbiYmKGtuPSExLFdtKCkpLHFlKFwiZ2VuZXJhdGU6IHBhY2tldC5jbWQ6ICVzXCIsdC5jbWQpLHQuY21kKXtjYXNlXCJjb25uZWN0XCI6cmV0dXJuIFZtKHQsZSk7Y2FzZVwiY29ubmFja1wiOnJldHVybiB6bSh0LGUscik7Y2FzZVwicHVibGlzaFwiOnJldHVybiBLbSh0LGUscik7Y2FzZVwicHViYWNrXCI6Y2FzZVwicHVicmVjXCI6Y2FzZVwicHVicmVsXCI6Y2FzZVwicHViY29tcFwiOnJldHVybiBHbSh0LGUscik7Y2FzZVwic3Vic2NyaWJlXCI6cmV0dXJuIFFtKHQsZSxyKTtjYXNlXCJzdWJhY2tcIjpyZXR1cm4gWW0odCxlLHIpO2Nhc2VcInVuc3Vic2NyaWJlXCI6cmV0dXJuIEptKHQsZSxyKTtjYXNlXCJ1bnN1YmFja1wiOnJldHVybiBYbSh0LGUscik7Y2FzZVwicGluZ3JlcVwiOmNhc2VcInBpbmdyZXNwXCI6cmV0dXJuIFptKHQsZSk7Y2FzZVwiZGlzY29ubmVjdFwiOnJldHVybiBlMSh0LGUscik7Y2FzZVwiYXV0aFwiOnJldHVybiB0MSh0LGUscik7ZGVmYXVsdDpyZXR1cm4gZS5kZXN0cm95KG5ldyBFcnJvcihcIlVua25vd24gY29tbWFuZFwiKSksITF9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShrZCxcImNhY2hlTnVtYmVyc1wiLHtnZXQoKXtyZXR1cm4gVGU9PT1Hb30sc2V0KHQpe3Q/KCghUG58fE9iamVjdC5rZXlzKFBuKS5sZW5ndGg9PT0wKSYmKGtuPSEwKSxUZT1Hbyk6KGtuPSExLFRlPXIxKTt9fSk7ZnVuY3Rpb24gSG0odCl7dC51bmNvcmsoKTt9ZnVuY3Rpb24gVm0odCxlLHIpe2xldCBpPXR8fHt9LG49aS5wcm90b2NvbElkfHxcIk1RVFRcIixvPWkucHJvdG9jb2xWZXJzaW9ufHw0LHM9aS53aWxsLGE9aS5jbGVhbixsPWkua2VlcGFsaXZlfHwwLGM9aS5jbGllbnRJZHx8XCJcIixoPWkudXNlcm5hbWUsZD1pLnBhc3N3b3JkLGc9aS5wcm9wZXJ0aWVzO2E9PT12b2lkIDAmJihhPSEwKTtsZXQgeT0wO2lmKCFufHx0eXBlb2YgbiE9XCJzdHJpbmdcIiYmIXEuaXNCdWZmZXIobikpcmV0dXJuIGUuZGVzdHJveShuZXcgRXJyb3IoXCJJbnZhbGlkIHByb3RvY29sSWRcIikpLCExO2lmKHkrPW4ubGVuZ3RoKzIsbyE9PTMmJm8hPT00JiZvIT09NSlyZXR1cm4gZS5kZXN0cm95KG5ldyBFcnJvcihcIkludmFsaWQgcHJvdG9jb2wgdmVyc2lvblwiKSksITE7aWYoeSs9MSwodHlwZW9mIGM9PVwic3RyaW5nXCJ8fHEuaXNCdWZmZXIoYykpJiYoY3x8bz49NCkmJihjfHxhKSl5Kz1xLmJ5dGVMZW5ndGgoYykrMjtlbHNlIHtpZihvPDQpcmV0dXJuIGUuZGVzdHJveShuZXcgRXJyb3IoXCJjbGllbnRJZCBtdXN0IGJlIHN1cHBsaWVkIGJlZm9yZSAzLjEuMVwiKSksITE7aWYoYSoxPT09MClyZXR1cm4gZS5kZXN0cm95KG5ldyBFcnJvcihcImNsaWVudElkIG11c3QgYmUgZ2l2ZW4gaWYgY2xlYW5TZXNzaW9uIHNldCB0byAwXCIpKSwhMX1pZih0eXBlb2YgbCE9XCJudW1iZXJcInx8bDwwfHxsPjY1NTM1fHxsJTEhPT0wKXJldHVybiBlLmRlc3Ryb3kobmV3IEVycm9yKFwiSW52YWxpZCBrZWVwYWxpdmVcIikpLCExO3krPTIseSs9MTtsZXQgdyxTO2lmKG89PT01KXtpZih3PVd0KGUsZyksIXcpcmV0dXJuICExO3krPXcubGVuZ3RoO31pZihzKXtpZih0eXBlb2YgcyE9XCJvYmplY3RcIilyZXR1cm4gZS5kZXN0cm95KG5ldyBFcnJvcihcIkludmFsaWQgd2lsbFwiKSksITE7aWYoIXMudG9waWN8fHR5cGVvZiBzLnRvcGljIT1cInN0cmluZ1wiKXJldHVybiBlLmRlc3Ryb3kobmV3IEVycm9yKFwiSW52YWxpZCB3aWxsIHRvcGljXCIpKSwhMTtpZih5Kz1xLmJ5dGVMZW5ndGgocy50b3BpYykrMix5Kz0yLHMucGF5bG9hZClpZihzLnBheWxvYWQubGVuZ3RoPj0wKXR5cGVvZiBzLnBheWxvYWQ9PVwic3RyaW5nXCI/eSs9cS5ieXRlTGVuZ3RoKHMucGF5bG9hZCk6eSs9cy5wYXlsb2FkLmxlbmd0aDtlbHNlIHJldHVybiBlLmRlc3Ryb3kobmV3IEVycm9yKFwiSW52YWxpZCB3aWxsIHBheWxvYWRcIikpLCExO2lmKFM9e30sbz09PTUpe2lmKFM9V3QoZSxzLnByb3BlcnRpZXMpLCFTKXJldHVybiAhMTt5Kz1TLmxlbmd0aDt9fWxldCBFPSExO2lmKGghPW51bGwpaWYoUGQoaCkpRT0hMCx5Kz1xLmJ5dGVMZW5ndGgoaCkrMjtlbHNlIHJldHVybiBlLmRlc3Ryb3kobmV3IEVycm9yKFwiSW52YWxpZCB1c2VybmFtZVwiKSksITE7aWYoZCE9bnVsbCl7aWYoIUUpcmV0dXJuIGUuZGVzdHJveShuZXcgRXJyb3IoXCJVc2VybmFtZSBpcyByZXF1aXJlZCB0byB1c2UgcGFzc3dvcmRcIikpLCExO2lmKFBkKGQpKXkrPU9kKGQpKzI7ZWxzZSByZXR1cm4gZS5kZXN0cm95KG5ldyBFcnJvcihcIkludmFsaWQgcGFzc3dvcmRcIikpLCExfWUud3JpdGUoai5DT05ORUNUX0hFQURFUiksRGUoZSx5KSxZcihlLG4pLGkuYnJpZGdlTW9kZSYmKG8rPTEyOCksZS53cml0ZShvPT09MTMxP2ouVkVSU0lPTjEzMTpvPT09MTMyP2ouVkVSU0lPTjEzMjpvPT09ND9qLlZFUlNJT040Om89PT01P2ouVkVSU0lPTjU6ai5WRVJTSU9OMyk7bGV0IEk9MDtyZXR1cm4gSXw9aCE9bnVsbD9qLlVTRVJOQU1FX01BU0s6MCxJfD1kIT1udWxsP2ouUEFTU1dPUkRfTUFTSzowLEl8PXMmJnMucmV0YWluP2ouV0lMTF9SRVRBSU5fTUFTSzowLEl8PXMmJnMucW9zP3MucW9zPDxqLldJTExfUU9TX1NISUZUOjAsSXw9cz9qLldJTExfRkxBR19NQVNLOjAsSXw9YT9qLkNMRUFOX1NFU1NJT05fTUFTSzowLGUud3JpdGUocS5mcm9tKFtJXSkpLFRlKGUsbCksbz09PTUmJncud3JpdGUoKSxZcihlLGMpLHMmJihvPT09NSYmUy53cml0ZSgpLHdyKGUscy50b3BpYyksWXIoZSxzLnBheWxvYWQpKSxoIT1udWxsJiZZcihlLGgpLGQhPW51bGwmJllyKGUsZCksITB9ZnVuY3Rpb24gem0odCxlLHIpe2xldCBpPXI/ci5wcm90b2NvbFZlcnNpb246NCxuPXR8fHt9LG89aT09PTU/bi5yZWFzb25Db2RlOm4ucmV0dXJuQ29kZSxzPW4ucHJvcGVydGllcyxhPTI7aWYodHlwZW9mIG8hPVwibnVtYmVyXCIpcmV0dXJuIGUuZGVzdHJveShuZXcgRXJyb3IoXCJJbnZhbGlkIHJldHVybiBjb2RlXCIpKSwhMTtsZXQgbD1udWxsO2lmKGk9PT01KXtpZihsPVd0KGUscyksIWwpcmV0dXJuICExO2ErPWwubGVuZ3RoO31yZXR1cm4gZS53cml0ZShqLkNPTk5BQ0tfSEVBREVSKSxEZShlLGEpLGUud3JpdGUobi5zZXNzaW9uUHJlc2VudD9qLlNFU1NJT05QUkVTRU5UX0hFQURFUjpEbSksZS53cml0ZShxLmZyb20oW29dKSksbD8ud3JpdGUoKSwhMH1mdW5jdGlvbiBLbSh0LGUscil7cWUoXCJwdWJsaXNoOiBwYWNrZXQ6ICVvXCIsdCk7bGV0IGk9cj9yLnByb3RvY29sVmVyc2lvbjo0LG49dHx8e30sbz1uLnFvc3x8MCxzPW4ucmV0YWluP2ouUkVUQUlOX01BU0s6MCxhPW4udG9waWMsbD1uLnBheWxvYWR8fHFtLGM9bi5tZXNzYWdlSWQsaD1uLnByb3BlcnRpZXMsZD0wO2lmKHR5cGVvZiBhPT1cInN0cmluZ1wiKWQrPXEuYnl0ZUxlbmd0aChhKSsyO2Vsc2UgaWYocS5pc0J1ZmZlcihhKSlkKz1hLmxlbmd0aCsyO2Vsc2UgcmV0dXJuIGUuZGVzdHJveShuZXcgRXJyb3IoXCJJbnZhbGlkIHRvcGljXCIpKSwhMTtpZihxLmlzQnVmZmVyKGwpP2QrPWwubGVuZ3RoOmQrPXEuYnl0ZUxlbmd0aChsKSxvJiZ0eXBlb2YgYyE9XCJudW1iZXJcIilyZXR1cm4gZS5kZXN0cm95KG5ldyBFcnJvcihcIkludmFsaWQgbWVzc2FnZUlkXCIpKSwhMTtvJiYoZCs9Mik7bGV0IGc9bnVsbDtpZihpPT09NSl7aWYoZz1XdChlLGgpLCFnKXJldHVybiAhMTtkKz1nLmxlbmd0aDt9cmV0dXJuIGUud3JpdGUoai5QVUJMSVNIX0hFQURFUltvXVtuLmR1cD8xOjBdW3M/MTowXSksRGUoZSxkKSxUZShlLE9kKGEpKSxlLndyaXRlKGEpLG8+MCYmVGUoZSxjKSxnPy53cml0ZSgpLHFlKFwicHVibGlzaDogcGF5bG9hZDogJW9cIixsKSxlLndyaXRlKGwpfWZ1bmN0aW9uIEdtKHQsZSxyKXtsZXQgaT1yP3IucHJvdG9jb2xWZXJzaW9uOjQsbj10fHx7fSxvPW4uY21kfHxcInB1YmFja1wiLHM9bi5tZXNzYWdlSWQsYT1uLmR1cCYmbz09PVwicHVicmVsXCI/ai5EVVBfTUFTSzowLGw9MCxjPW4ucmVhc29uQ29kZSxoPW4ucHJvcGVydGllcyxkPWk9PT01PzM6MjtpZihvPT09XCJwdWJyZWxcIiYmKGw9MSksdHlwZW9mIHMhPVwibnVtYmVyXCIpcmV0dXJuIGUuZGVzdHJveShuZXcgRXJyb3IoXCJJbnZhbGlkIG1lc3NhZ2VJZFwiKSksITE7bGV0IGc9bnVsbDtpZihpPT09NSYmdHlwZW9mIGg9PVwib2JqZWN0XCIpe2lmKGc9SWkoZSxoLHIsZCksIWcpcmV0dXJuICExO2QrPWcubGVuZ3RoO31yZXR1cm4gZS53cml0ZShqLkFDS1Nbb11bbF1bYV1bMF0pLGQ9PT0zJiYoZCs9YyE9PTA/MTotMSksRGUoZSxkKSxUZShlLHMpLGk9PT01JiZkIT09MiYmZS53cml0ZShxLmZyb20oW2NdKSksZyE9PW51bGw/Zy53cml0ZSgpOmQ9PT00JiZlLndyaXRlKHEuZnJvbShbMF0pKSwhMH1mdW5jdGlvbiBRbSh0LGUscil7cWUoXCJzdWJzY3JpYmU6IHBhY2tldDogXCIpO2xldCBpPXI/ci5wcm90b2NvbFZlcnNpb246NCxuPXR8fHt9LG89bi5kdXA/ai5EVVBfTUFTSzowLHM9bi5tZXNzYWdlSWQsYT1uLnN1YnNjcmlwdGlvbnMsbD1uLnByb3BlcnRpZXMsYz0wO2lmKHR5cGVvZiBzIT1cIm51bWJlclwiKXJldHVybiBlLmRlc3Ryb3kobmV3IEVycm9yKFwiSW52YWxpZCBtZXNzYWdlSWRcIikpLCExO2MrPTI7bGV0IGg9bnVsbDtpZihpPT09NSl7aWYoaD1XdChlLGwpLCFoKXJldHVybiAhMTtjKz1oLmxlbmd0aDt9aWYodHlwZW9mIGE9PVwib2JqZWN0XCImJmEubGVuZ3RoKWZvcihsZXQgZz0wO2c8YS5sZW5ndGg7Zys9MSl7bGV0IHk9YVtnXS50b3BpYyx3PWFbZ10ucW9zO2lmKHR5cGVvZiB5IT1cInN0cmluZ1wiKXJldHVybiBlLmRlc3Ryb3kobmV3IEVycm9yKFwiSW52YWxpZCBzdWJzY3JpcHRpb25zIC0gaW52YWxpZCB0b3BpY1wiKSksITE7aWYodHlwZW9mIHchPVwibnVtYmVyXCIpcmV0dXJuIGUuZGVzdHJveShuZXcgRXJyb3IoXCJJbnZhbGlkIHN1YnNjcmlwdGlvbnMgLSBpbnZhbGlkIHFvc1wiKSksITE7aWYoaT09PTUpe2lmKHR5cGVvZihhW2ddLm5sfHwhMSkhPVwiYm9vbGVhblwiKXJldHVybiBlLmRlc3Ryb3kobmV3IEVycm9yKFwiSW52YWxpZCBzdWJzY3JpcHRpb25zIC0gaW52YWxpZCBObyBMb2NhbFwiKSksITE7aWYodHlwZW9mKGFbZ10ucmFwfHwhMSkhPVwiYm9vbGVhblwiKXJldHVybiBlLmRlc3Ryb3kobmV3IEVycm9yKFwiSW52YWxpZCBzdWJzY3JpcHRpb25zIC0gaW52YWxpZCBSZXRhaW4gYXMgUHVibGlzaGVkXCIpKSwhMTtsZXQgST1hW2ddLnJofHwwO2lmKHR5cGVvZiBJIT1cIm51bWJlclwifHxJPjIpcmV0dXJuIGUuZGVzdHJveShuZXcgRXJyb3IoXCJJbnZhbGlkIHN1YnNjcmlwdGlvbnMgLSBpbnZhbGlkIFJldGFpbiBIYW5kbGluZ1wiKSksITF9Yys9cS5ieXRlTGVuZ3RoKHkpKzIrMTt9ZWxzZSByZXR1cm4gZS5kZXN0cm95KG5ldyBFcnJvcihcIkludmFsaWQgc3Vic2NyaXB0aW9uc1wiKSksITE7cWUoXCJzdWJzY3JpYmU6IHdyaXRpbmcgdG8gc3RyZWFtOiAlb1wiLGouU1VCU0NSSUJFX0hFQURFUiksZS53cml0ZShqLlNVQlNDUklCRV9IRUFERVJbMV1bbz8xOjBdWzBdKSxEZShlLGMpLFRlKGUscyksaCE9PW51bGwmJmgud3JpdGUoKTtsZXQgZD0hMDtmb3IobGV0IGcgb2YgYSl7bGV0IHk9Zy50b3BpYyx3PWcucW9zLFM9K2cubmwsRT0rZy5yYXAsST1nLnJoLEM7d3IoZSx5KSxDPWouU1VCU0NSSUJFX09QVElPTlNfUU9TW3ddLGk9PT01JiYoQ3w9Uz9qLlNVQlNDUklCRV9PUFRJT05TX05MOjAsQ3w9RT9qLlNVQlNDUklCRV9PUFRJT05TX1JBUDowLEN8PUk/ai5TVUJTQ1JJQkVfT1BUSU9OU19SSFtJXTowKSxkPWUud3JpdGUocS5mcm9tKFtDXSkpO31yZXR1cm4gZH1mdW5jdGlvbiBZbSh0LGUscil7bGV0IGk9cj9yLnByb3RvY29sVmVyc2lvbjo0LG49dHx8e30sbz1uLm1lc3NhZ2VJZCxzPW4uZ3JhbnRlZCxhPW4ucHJvcGVydGllcyxsPTA7aWYodHlwZW9mIG8hPVwibnVtYmVyXCIpcmV0dXJuIGUuZGVzdHJveShuZXcgRXJyb3IoXCJJbnZhbGlkIG1lc3NhZ2VJZFwiKSksITE7aWYobCs9Mix0eXBlb2Ygcz09XCJvYmplY3RcIiYmcy5sZW5ndGgpZm9yKGxldCBoPTA7aDxzLmxlbmd0aDtoKz0xKXtpZih0eXBlb2Ygc1toXSE9XCJudW1iZXJcIilyZXR1cm4gZS5kZXN0cm95KG5ldyBFcnJvcihcIkludmFsaWQgcW9zIHZlY3RvclwiKSksITE7bCs9MTt9ZWxzZSByZXR1cm4gZS5kZXN0cm95KG5ldyBFcnJvcihcIkludmFsaWQgcW9zIHZlY3RvclwiKSksITE7bGV0IGM9bnVsbDtpZihpPT09NSl7aWYoYz1JaShlLGEscixsKSwhYylyZXR1cm4gITE7bCs9Yy5sZW5ndGg7fXJldHVybiBlLndyaXRlKGouU1VCQUNLX0hFQURFUiksRGUoZSxsKSxUZShlLG8pLGMhPT1udWxsJiZjLndyaXRlKCksZS53cml0ZShxLmZyb20ocykpfWZ1bmN0aW9uIEptKHQsZSxyKXtsZXQgaT1yP3IucHJvdG9jb2xWZXJzaW9uOjQsbj10fHx7fSxvPW4ubWVzc2FnZUlkLHM9bi5kdXA/ai5EVVBfTUFTSzowLGE9bi51bnN1YnNjcmlwdGlvbnMsbD1uLnByb3BlcnRpZXMsYz0wO2lmKHR5cGVvZiBvIT1cIm51bWJlclwiKXJldHVybiBlLmRlc3Ryb3kobmV3IEVycm9yKFwiSW52YWxpZCBtZXNzYWdlSWRcIikpLCExO2lmKGMrPTIsdHlwZW9mIGE9PVwib2JqZWN0XCImJmEubGVuZ3RoKWZvcihsZXQgZz0wO2c8YS5sZW5ndGg7Zys9MSl7aWYodHlwZW9mIGFbZ10hPVwic3RyaW5nXCIpcmV0dXJuIGUuZGVzdHJveShuZXcgRXJyb3IoXCJJbnZhbGlkIHVuc3Vic2NyaXB0aW9uc1wiKSksITE7Yys9cS5ieXRlTGVuZ3RoKGFbZ10pKzI7fWVsc2UgcmV0dXJuIGUuZGVzdHJveShuZXcgRXJyb3IoXCJJbnZhbGlkIHVuc3Vic2NyaXB0aW9uc1wiKSksITE7bGV0IGg9bnVsbDtpZihpPT09NSl7aWYoaD1XdChlLGwpLCFoKXJldHVybiAhMTtjKz1oLmxlbmd0aDt9ZS53cml0ZShqLlVOU1VCU0NSSUJFX0hFQURFUlsxXVtzPzE6MF1bMF0pLERlKGUsYyksVGUoZSxvKSxoIT09bnVsbCYmaC53cml0ZSgpO2xldCBkPSEwO2ZvcihsZXQgZz0wO2c8YS5sZW5ndGg7ZysrKWQ9d3IoZSxhW2ddKTtyZXR1cm4gZH1mdW5jdGlvbiBYbSh0LGUscil7bGV0IGk9cj9yLnByb3RvY29sVmVyc2lvbjo0LG49dHx8e30sbz1uLm1lc3NhZ2VJZCxzPW4uZHVwP2ouRFVQX01BU0s6MCxhPW4uZ3JhbnRlZCxsPW4ucHJvcGVydGllcyxjPW4uY21kLGg9MCxkPTI7aWYodHlwZW9mIG8hPVwibnVtYmVyXCIpcmV0dXJuIGUuZGVzdHJveShuZXcgRXJyb3IoXCJJbnZhbGlkIG1lc3NhZ2VJZFwiKSksITE7aWYoaT09PTUpaWYodHlwZW9mIGE9PVwib2JqZWN0XCImJmEubGVuZ3RoKWZvcihsZXQgeT0wO3k8YS5sZW5ndGg7eSs9MSl7aWYodHlwZW9mIGFbeV0hPVwibnVtYmVyXCIpcmV0dXJuIGUuZGVzdHJveShuZXcgRXJyb3IoXCJJbnZhbGlkIHFvcyB2ZWN0b3JcIikpLCExO2QrPTE7fWVsc2UgcmV0dXJuIGUuZGVzdHJveShuZXcgRXJyb3IoXCJJbnZhbGlkIHFvcyB2ZWN0b3JcIikpLCExO2xldCBnPW51bGw7aWYoaT09PTUpe2lmKGc9SWkoZSxsLHIsZCksIWcpcmV0dXJuICExO2QrPWcubGVuZ3RoO31yZXR1cm4gZS53cml0ZShqLkFDS1NbY11baF1bc11bMF0pLERlKGUsZCksVGUoZSxvKSxnIT09bnVsbCYmZy53cml0ZSgpLGk9PT01JiZlLndyaXRlKHEuZnJvbShhKSksITB9ZnVuY3Rpb24gWm0odCxlLHIpe3JldHVybiBlLndyaXRlKGouRU1QVFlbdC5jbWRdKX1mdW5jdGlvbiBlMSh0LGUscil7bGV0IGk9cj9yLnByb3RvY29sVmVyc2lvbjo0LG49dHx8e30sbz1uLnJlYXNvbkNvZGUscz1uLnByb3BlcnRpZXMsYT1pPT09NT8xOjAsbD1udWxsO2lmKGk9PT01KXtpZihsPUlpKGUscyxyLGEpLCFsKXJldHVybiAhMTthKz1sLmxlbmd0aDt9cmV0dXJuIGUud3JpdGUocS5mcm9tKFtqLmNvZGVzLmRpc2Nvbm5lY3Q8PDRdKSksRGUoZSxhKSxpPT09NSYmZS53cml0ZShxLmZyb20oW29dKSksbCE9PW51bGwmJmwud3JpdGUoKSwhMH1mdW5jdGlvbiB0MSh0LGUscil7bGV0IGk9cj9yLnByb3RvY29sVmVyc2lvbjo0LG49dHx8e30sbz1uLnJlYXNvbkNvZGUscz1uLnByb3BlcnRpZXMsYT1pPT09NT8xOjA7aSE9PTUmJmUuZGVzdHJveShuZXcgRXJyb3IoXCJJbnZhbGlkIG1xdHQgdmVyc2lvbiBmb3IgYXV0aCBwYWNrZXRcIikpO2xldCBsPUlpKGUscyxyLGEpO3JldHVybiBsPyhhKz1sLmxlbmd0aCxlLndyaXRlKHEuZnJvbShbai5jb2Rlcy5hdXRoPDw0XSkpLERlKGUsYSksZS53cml0ZShxLmZyb20oW29dKSksbCE9PW51bGwmJmwud3JpdGUoKSwhMCk6ITF9dmFyIFRkPXt9O2Z1bmN0aW9uIERlKHQsZSl7aWYoZT5qLlZBUkJZVEVJTlRfTUFYKXJldHVybiB0LmRlc3Ryb3kobmV3IEVycm9yKGBJbnZhbGlkIHZhcmlhYmxlIGJ5dGUgaW50ZWdlcjogJHtlfWApKSwhMTtsZXQgcj1UZFtlXTtyZXR1cm4gcnx8KHI9S28oZSksZTwxNjM4NCYmKFRkW2VdPXIpKSxxZShcIndyaXRlVmFyQnl0ZUludDogd3JpdGluZyB0byBzdHJlYW06ICVvXCIsciksdC53cml0ZShyKX1mdW5jdGlvbiB3cih0LGUpe2xldCByPXEuYnl0ZUxlbmd0aChlKTtyZXR1cm4gVGUodCxyKSxxZShcIndyaXRlU3RyaW5nOiAlc1wiLGUpLHQud3JpdGUoZSxcInV0ZjhcIil9ZnVuY3Rpb24gUmQodCxlLHIpe3dyKHQsZSksd3IodCxyKTt9ZnVuY3Rpb24gR28odCxlKXtyZXR1cm4gcWUoXCJ3cml0ZU51bWJlckNhY2hlZDogbnVtYmVyOiAlZFwiLGUpLHFlKFwid3JpdGVOdW1iZXJDYWNoZWQ6ICVvXCIsUG5bZV0pLHQud3JpdGUoUG5bZV0pfWZ1bmN0aW9uIHIxKHQsZSl7bGV0IHI9Rm0oZSk7cmV0dXJuIHFlKFwid3JpdGVOdW1iZXJHZW5lcmF0ZWQ6ICVvXCIsciksdC53cml0ZShyKX1mdW5jdGlvbiBpMSh0LGUpe2xldCByPSRtKGUpO3JldHVybiBxZShcIndyaXRlNEJ5dGVOdW1iZXI6ICVvXCIsciksdC53cml0ZShyKX1mdW5jdGlvbiBZcih0LGUpe3R5cGVvZiBlPT1cInN0cmluZ1wiP3dyKHQsZSk6ZT8oVGUodCxlLmxlbmd0aCksdC53cml0ZShlKSk6VGUodCwwKTt9ZnVuY3Rpb24gV3QodCxlKXtpZih0eXBlb2YgZSE9XCJvYmplY3RcInx8ZS5sZW5ndGghPW51bGwpcmV0dXJuIHtsZW5ndGg6MSx3cml0ZSgpe0JkKHQse30sMCk7fX07bGV0IHI9MDtmdW5jdGlvbiBpKG8scyl7bGV0IGE9ai5wcm9wZXJ0aWVzVHlwZXNbb10sbD0wO3N3aXRjaChhKXtjYXNlXCJieXRlXCI6e2lmKHR5cGVvZiBzIT1cImJvb2xlYW5cIilyZXR1cm4gdC5kZXN0cm95KG5ldyBFcnJvcihgSW52YWxpZCAke299OiAke3N9YCkpLCExO2wrPTErMTticmVha31jYXNlXCJpbnQ4XCI6e2lmKHR5cGVvZiBzIT1cIm51bWJlclwifHxzPDB8fHM+MjU1KXJldHVybiB0LmRlc3Ryb3kobmV3IEVycm9yKGBJbnZhbGlkICR7b306ICR7c31gKSksITE7bCs9MSsxO2JyZWFrfWNhc2VcImJpbmFyeVwiOntpZihzJiZzPT09bnVsbClyZXR1cm4gdC5kZXN0cm95KG5ldyBFcnJvcihgSW52YWxpZCAke299OiAke3N9YCkpLCExO2wrPTErcS5ieXRlTGVuZ3RoKHMpKzI7YnJlYWt9Y2FzZVwiaW50MTZcIjp7aWYodHlwZW9mIHMhPVwibnVtYmVyXCJ8fHM8MHx8cz42NTUzNSlyZXR1cm4gdC5kZXN0cm95KG5ldyBFcnJvcihgSW52YWxpZCAke299OiAke3N9YCkpLCExO2wrPTErMjticmVha31jYXNlXCJpbnQzMlwiOntpZih0eXBlb2YgcyE9XCJudW1iZXJcInx8czwwfHxzPjQyOTQ5NjcyOTUpcmV0dXJuIHQuZGVzdHJveShuZXcgRXJyb3IoYEludmFsaWQgJHtvfTogJHtzfWApKSwhMTtsKz0xKzQ7YnJlYWt9Y2FzZVwidmFyXCI6e2lmKHR5cGVvZiBzIT1cIm51bWJlclwifHxzPDB8fHM+MjY4NDM1NDU1KXJldHVybiB0LmRlc3Ryb3kobmV3IEVycm9yKGBJbnZhbGlkICR7b306ICR7c31gKSksITE7bCs9MStxLmJ5dGVMZW5ndGgoS28ocykpO2JyZWFrfWNhc2VcInN0cmluZ1wiOntpZih0eXBlb2YgcyE9XCJzdHJpbmdcIilyZXR1cm4gdC5kZXN0cm95KG5ldyBFcnJvcihgSW52YWxpZCAke299OiAke3N9YCkpLCExO2wrPTErMitxLmJ5dGVMZW5ndGgocy50b1N0cmluZygpKTticmVha31jYXNlXCJwYWlyXCI6e2lmKHR5cGVvZiBzIT1cIm9iamVjdFwiKXJldHVybiB0LmRlc3Ryb3kobmV3IEVycm9yKGBJbnZhbGlkICR7b306ICR7c31gKSksITE7bCs9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocykucmVkdWNlKChjLGgpPT57bGV0IGQ9c1toXTtyZXR1cm4gQXJyYXkuaXNBcnJheShkKT9jKz1kLnJlZHVjZSgoZyx5KT0+KGcrPTErMitxLmJ5dGVMZW5ndGgoaC50b1N0cmluZygpKSsyK3EuYnl0ZUxlbmd0aCh5LnRvU3RyaW5nKCkpLGcpLDApOmMrPTErMitxLmJ5dGVMZW5ndGgoaC50b1N0cmluZygpKSsyK3EuYnl0ZUxlbmd0aChzW2hdLnRvU3RyaW5nKCkpLGN9LDApO2JyZWFrfWRlZmF1bHQ6cmV0dXJuIHQuZGVzdHJveShuZXcgRXJyb3IoYEludmFsaWQgcHJvcGVydHkgJHtvfTogJHtzfWApKSwhMX1yZXR1cm4gbH1pZihlKWZvcihsZXQgbyBpbiBlKXtsZXQgcz0wLGE9MCxsPWVbb107aWYoQXJyYXkuaXNBcnJheShsKSlmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKyl7aWYoYT1pKG8sbFtjXSksIWEpcmV0dXJuICExO3MrPWE7fWVsc2Uge2lmKGE9aShvLGwpLCFhKXJldHVybiAhMTtzPWE7fWlmKCFzKXJldHVybiAhMTtyKz1zO31yZXR1cm4ge2xlbmd0aDpxLmJ5dGVMZW5ndGgoS28ocikpK3Isd3JpdGUoKXtCZCh0LGUscik7fX19ZnVuY3Rpb24gSWkodCxlLHIsaSl7bGV0IG49W1wicmVhc29uU3RyaW5nXCIsXCJ1c2VyUHJvcGVydGllc1wiXSxvPXImJnIucHJvcGVydGllcyYmci5wcm9wZXJ0aWVzLm1heGltdW1QYWNrZXRTaXplP3IucHJvcGVydGllcy5tYXhpbXVtUGFja2V0U2l6ZTowLHM9V3QodCxlKTtpZihvKWZvcig7aStzLmxlbmd0aD5vOyl7bGV0IGE9bi5zaGlmdCgpO2lmKGEmJmVbYV0pZGVsZXRlIGVbYV0scz1XdCh0LGUpO2Vsc2UgcmV0dXJuICExfXJldHVybiBzfWZ1bmN0aW9uIENkKHQsZSxyKXtzd2l0Y2goai5wcm9wZXJ0aWVzVHlwZXNbZV0pe2Nhc2VcImJ5dGVcIjp7dC53cml0ZShxLmZyb20oW2oucHJvcGVydGllc1tlXV0pKSx0LndyaXRlKHEuZnJvbShbK3JdKSk7YnJlYWt9Y2FzZVwiaW50OFwiOnt0LndyaXRlKHEuZnJvbShbai5wcm9wZXJ0aWVzW2VdXSkpLHQud3JpdGUocS5mcm9tKFtyXSkpO2JyZWFrfWNhc2VcImJpbmFyeVwiOnt0LndyaXRlKHEuZnJvbShbai5wcm9wZXJ0aWVzW2VdXSkpLFlyKHQscik7YnJlYWt9Y2FzZVwiaW50MTZcIjp7dC53cml0ZShxLmZyb20oW2oucHJvcGVydGllc1tlXV0pKSxUZSh0LHIpO2JyZWFrfWNhc2VcImludDMyXCI6e3Qud3JpdGUocS5mcm9tKFtqLnByb3BlcnRpZXNbZV1dKSksaTEodCxyKTticmVha31jYXNlXCJ2YXJcIjp7dC53cml0ZShxLmZyb20oW2oucHJvcGVydGllc1tlXV0pKSxEZSh0LHIpO2JyZWFrfWNhc2VcInN0cmluZ1wiOnt0LndyaXRlKHEuZnJvbShbai5wcm9wZXJ0aWVzW2VdXSkpLHdyKHQscik7YnJlYWt9Y2FzZVwicGFpclwiOntPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhyKS5mb3JFYWNoKG49PntsZXQgbz1yW25dO0FycmF5LmlzQXJyYXkobyk/by5mb3JFYWNoKHM9Pnt0LndyaXRlKHEuZnJvbShbai5wcm9wZXJ0aWVzW2VdXSkpLFJkKHQsbi50b1N0cmluZygpLHMudG9TdHJpbmcoKSk7fSk6KHQud3JpdGUocS5mcm9tKFtqLnByb3BlcnRpZXNbZV1dKSksUmQodCxuLnRvU3RyaW5nKCksby50b1N0cmluZygpKSk7fSk7YnJlYWt9ZGVmYXVsdDpyZXR1cm4gdC5kZXN0cm95KG5ldyBFcnJvcihgSW52YWxpZCBwcm9wZXJ0eSAke2V9IHZhbHVlOiAke3J9YCkpLCExfX1mdW5jdGlvbiBCZCh0LGUscil7RGUodCxyKTtmb3IobGV0IGkgaW4gZSlpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxpKSYmZVtpXSE9PW51bGwpe2xldCBuPWVbaV07aWYoQXJyYXkuaXNBcnJheShuKSlmb3IobGV0IG89MDtvPG4ubGVuZ3RoO28rKylDZCh0LGksbltvXSk7ZWxzZSBDZCh0LGksbik7fX1mdW5jdGlvbiBPZCh0KXtyZXR1cm4gdD90IGluc3RhbmNlb2YgcT90Lmxlbmd0aDpxLmJ5dGVMZW5ndGgodCk6MH1mdW5jdGlvbiBQZCh0KXtyZXR1cm4gdHlwZW9mIHQ9PVwic3RyaW5nXCJ8fHQgaW5zdGFuY2VvZiBxfXhkLmV4cG9ydHM9a2Q7fSk7dmFyIFVkPU0oKFNrLExkKT0+e18oKTt2KCk7bSgpO3ZhciBuMT1RbygpLHtFdmVudEVtaXR0ZXI6czF9PShzcigpLFgobnIpKSx7QnVmZmVyOk1kfT0oYmUoKSxYKG1lKSk7ZnVuY3Rpb24gbzEodCxlKXtsZXQgcj1uZXcgWW87cmV0dXJuIG4xKHQscixlKSxyLmNvbmNhdCgpfXZhciBZbz1jbGFzcyBleHRlbmRzIHMxe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9hcnJheT1uZXcgQXJyYXkoMjApLHRoaXMuX2k9MDt9d3JpdGUoZSl7cmV0dXJuIHRoaXMuX2FycmF5W3RoaXMuX2krK109ZSwhMH1jb25jYXQoKXtsZXQgZT0wLHI9bmV3IEFycmF5KHRoaXMuX2FycmF5Lmxlbmd0aCksaT10aGlzLl9hcnJheSxuPTAsbztmb3Iobz0wO288aS5sZW5ndGgmJmlbb10hPT12b2lkIDA7bysrKXR5cGVvZiBpW29dIT1cInN0cmluZ1wiP3Jbb109aVtvXS5sZW5ndGg6cltvXT1NZC5ieXRlTGVuZ3RoKGlbb10pLGUrPXJbb107bGV0IHM9TWQuYWxsb2NVbnNhZmUoZSk7Zm9yKG89MDtvPGkubGVuZ3RoJiZpW29dIT09dm9pZCAwO28rKyl0eXBlb2YgaVtvXSE9XCJzdHJpbmdcIj8oaVtvXS5jb3B5KHMsbiksbis9cltvXSk6KHMud3JpdGUoaVtvXSxuKSxuKz1yW29dKTtyZXR1cm4gc31kZXN0cm95KGUpe2UmJnRoaXMuZW1pdChcImVycm9yXCIsZSk7fX07TGQuZXhwb3J0cz1vMTt9KTt2YXIgTmQ9TShPbj0+e18oKTt2KCk7bSgpO09uLnBhcnNlcj1tZCgpLnBhcnNlcjtPbi5nZW5lcmF0ZT1VZCgpO09uLndyaXRlVG9TdHJlYW09UW8oKTt9KTt2YXIgWm89TShYbz0+e18oKTt2KCk7bSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYbyxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgSm89Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLm5leHRJZD1NYXRoLm1heCgxLE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSo2NTUzNSkpO31hbGxvY2F0ZSgpe2xldCBlPXRoaXMubmV4dElkKys7cmV0dXJuIHRoaXMubmV4dElkPT09NjU1MzYmJih0aGlzLm5leHRJZD0xKSxlfWdldExhc3RBbGxvY2F0ZWQoKXtyZXR1cm4gdGhpcy5uZXh0SWQ9PT0xPzY1NTM1OnRoaXMubmV4dElkLTF9cmVnaXN0ZXIoZSl7cmV0dXJuICEwfWRlYWxsb2NhdGUoZSl7fWNsZWFyKCl7fX07WG8uZGVmYXVsdD1Kbzt9KTt2YXIgRGQ9TSgoWmsscWQpPT57XygpO3YoKTttKCk7cWQuZXhwb3J0cz1hMTtmdW5jdGlvbiBKcih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHg/eC5mcm9tKHQpOm5ldyB0LmNvbnN0cnVjdG9yKHQuYnVmZmVyLnNsaWNlKCksdC5ieXRlT2Zmc2V0LHQubGVuZ3RoKX1mdW5jdGlvbiBhMSh0KXtpZih0PXR8fHt9LHQuY2lyY2xlcylyZXR1cm4gbDEodCk7cmV0dXJuIHQucHJvdG8/aTpyO2Z1bmN0aW9uIGUobixvKXtmb3IodmFyIHM9T2JqZWN0LmtleXMobiksYT1uZXcgQXJyYXkocy5sZW5ndGgpLGw9MDtsPHMubGVuZ3RoO2wrKyl7dmFyIGM9c1tsXSxoPW5bY107dHlwZW9mIGghPVwib2JqZWN0XCJ8fGg9PT1udWxsP2FbY109aDpoIGluc3RhbmNlb2YgRGF0ZT9hW2NdPW5ldyBEYXRlKGgpOkFycmF5QnVmZmVyLmlzVmlldyhoKT9hW2NdPUpyKGgpOmFbY109byhoKTt9cmV0dXJuIGF9ZnVuY3Rpb24gcihuKXtpZih0eXBlb2YgbiE9XCJvYmplY3RcInx8bj09PW51bGwpcmV0dXJuIG47aWYobiBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIG5ldyBEYXRlKG4pO2lmKEFycmF5LmlzQXJyYXkobikpcmV0dXJuIGUobixyKTtpZihuIGluc3RhbmNlb2YgTWFwKXJldHVybiBuZXcgTWFwKGUoQXJyYXkuZnJvbShuKSxyKSk7aWYobiBpbnN0YW5jZW9mIFNldClyZXR1cm4gbmV3IFNldChlKEFycmF5LmZyb20obikscikpO3ZhciBvPXt9O2Zvcih2YXIgcyBpbiBuKWlmKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scykhPT0hMSl7dmFyIGE9bltzXTt0eXBlb2YgYSE9XCJvYmplY3RcInx8YT09PW51bGw/b1tzXT1hOmEgaW5zdGFuY2VvZiBEYXRlP29bc109bmV3IERhdGUoYSk6YSBpbnN0YW5jZW9mIE1hcD9vW3NdPW5ldyBNYXAoZShBcnJheS5mcm9tKGEpLHIpKTphIGluc3RhbmNlb2YgU2V0P29bc109bmV3IFNldChlKEFycmF5LmZyb20oYSkscikpOkFycmF5QnVmZmVyLmlzVmlldyhhKT9vW3NdPUpyKGEpOm9bc109cihhKTt9cmV0dXJuIG99ZnVuY3Rpb24gaShuKXtpZih0eXBlb2YgbiE9XCJvYmplY3RcInx8bj09PW51bGwpcmV0dXJuIG47aWYobiBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIG5ldyBEYXRlKG4pO2lmKEFycmF5LmlzQXJyYXkobikpcmV0dXJuIGUobixpKTtpZihuIGluc3RhbmNlb2YgTWFwKXJldHVybiBuZXcgTWFwKGUoQXJyYXkuZnJvbShuKSxpKSk7aWYobiBpbnN0YW5jZW9mIFNldClyZXR1cm4gbmV3IFNldChlKEFycmF5LmZyb20obiksaSkpO3ZhciBvPXt9O2Zvcih2YXIgcyBpbiBuKXt2YXIgYT1uW3NdO3R5cGVvZiBhIT1cIm9iamVjdFwifHxhPT09bnVsbD9vW3NdPWE6YSBpbnN0YW5jZW9mIERhdGU/b1tzXT1uZXcgRGF0ZShhKTphIGluc3RhbmNlb2YgTWFwP29bc109bmV3IE1hcChlKEFycmF5LmZyb20oYSksaSkpOmEgaW5zdGFuY2VvZiBTZXQ/b1tzXT1uZXcgU2V0KGUoQXJyYXkuZnJvbShhKSxpKSk6QXJyYXlCdWZmZXIuaXNWaWV3KGEpP29bc109SnIoYSk6b1tzXT1pKGEpO31yZXR1cm4gb319ZnVuY3Rpb24gbDEodCl7dmFyIGU9W10scj1bXTtyZXR1cm4gdC5wcm90bz9vOm47ZnVuY3Rpb24gaShzLGEpe2Zvcih2YXIgbD1PYmplY3Qua2V5cyhzKSxjPW5ldyBBcnJheShsLmxlbmd0aCksaD0wO2g8bC5sZW5ndGg7aCsrKXt2YXIgZD1sW2hdLGc9c1tkXTtpZih0eXBlb2YgZyE9XCJvYmplY3RcInx8Zz09PW51bGwpY1tkXT1nO2Vsc2UgaWYoZyBpbnN0YW5jZW9mIERhdGUpY1tkXT1uZXcgRGF0ZShnKTtlbHNlIGlmKEFycmF5QnVmZmVyLmlzVmlldyhnKSljW2RdPUpyKGcpO2Vsc2Uge3ZhciB5PWUuaW5kZXhPZihnKTt5IT09LTE/Y1tkXT1yW3ldOmNbZF09YShnKTt9fXJldHVybiBjfWZ1bmN0aW9uIG4ocyl7aWYodHlwZW9mIHMhPVwib2JqZWN0XCJ8fHM9PT1udWxsKXJldHVybiBzO2lmKHMgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBuZXcgRGF0ZShzKTtpZihBcnJheS5pc0FycmF5KHMpKXJldHVybiBpKHMsbik7aWYocyBpbnN0YW5jZW9mIE1hcClyZXR1cm4gbmV3IE1hcChpKEFycmF5LmZyb20ocyksbikpO2lmKHMgaW5zdGFuY2VvZiBTZXQpcmV0dXJuIG5ldyBTZXQoaShBcnJheS5mcm9tKHMpLG4pKTt2YXIgYT17fTtlLnB1c2gocyksci5wdXNoKGEpO2Zvcih2YXIgbCBpbiBzKWlmKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsbCkhPT0hMSl7dmFyIGM9c1tsXTtpZih0eXBlb2YgYyE9XCJvYmplY3RcInx8Yz09PW51bGwpYVtsXT1jO2Vsc2UgaWYoYyBpbnN0YW5jZW9mIERhdGUpYVtsXT1uZXcgRGF0ZShjKTtlbHNlIGlmKGMgaW5zdGFuY2VvZiBNYXApYVtsXT1uZXcgTWFwKGkoQXJyYXkuZnJvbShjKSxuKSk7ZWxzZSBpZihjIGluc3RhbmNlb2YgU2V0KWFbbF09bmV3IFNldChpKEFycmF5LmZyb20oYyksbikpO2Vsc2UgaWYoQXJyYXlCdWZmZXIuaXNWaWV3KGMpKWFbbF09SnIoYyk7ZWxzZSB7dmFyIGg9ZS5pbmRleE9mKGMpO2ghPT0tMT9hW2xdPXJbaF06YVtsXT1uKGMpO319cmV0dXJuIGUucG9wKCksci5wb3AoKSxhfWZ1bmN0aW9uIG8ocyl7aWYodHlwZW9mIHMhPVwib2JqZWN0XCJ8fHM9PT1udWxsKXJldHVybiBzO2lmKHMgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBuZXcgRGF0ZShzKTtpZihBcnJheS5pc0FycmF5KHMpKXJldHVybiBpKHMsbyk7aWYocyBpbnN0YW5jZW9mIE1hcClyZXR1cm4gbmV3IE1hcChpKEFycmF5LmZyb20ocyksbykpO2lmKHMgaW5zdGFuY2VvZiBTZXQpcmV0dXJuIG5ldyBTZXQoaShBcnJheS5mcm9tKHMpLG8pKTt2YXIgYT17fTtlLnB1c2gocyksci5wdXNoKGEpO2Zvcih2YXIgbCBpbiBzKXt2YXIgYz1zW2xdO2lmKHR5cGVvZiBjIT1cIm9iamVjdFwifHxjPT09bnVsbClhW2xdPWM7ZWxzZSBpZihjIGluc3RhbmNlb2YgRGF0ZSlhW2xdPW5ldyBEYXRlKGMpO2Vsc2UgaWYoYyBpbnN0YW5jZW9mIE1hcClhW2xdPW5ldyBNYXAoaShBcnJheS5mcm9tKGMpLG8pKTtlbHNlIGlmKGMgaW5zdGFuY2VvZiBTZXQpYVtsXT1uZXcgU2V0KGkoQXJyYXkuZnJvbShjKSxvKSk7ZWxzZSBpZihBcnJheUJ1ZmZlci5pc1ZpZXcoYykpYVtsXT1KcihjKTtlbHNlIHt2YXIgaD1lLmluZGV4T2YoYyk7aCE9PS0xP2FbbF09cltoXTphW2xdPW8oYyk7fX1yZXR1cm4gZS5wb3AoKSxyLnBvcCgpLGF9fX0pO3ZhciBGZD1NKCh1TyxqZCk9PntfKCk7digpO20oKTtqZC5leHBvcnRzPURkKCkoKTt9KTt2YXIgJGQ9TShYcj0+e18oKTt2KCk7bSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYcixcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTtYci52YWxpZGF0ZVRvcGljcz1Yci52YWxpZGF0ZVRvcGljPXZvaWQgMDtmdW5jdGlvbiBXZCh0KXtsZXQgZT10LnNwbGl0KFwiL1wiKTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKylpZihlW3JdIT09XCIrXCIpe2lmKGVbcl09PT1cIiNcIilyZXR1cm4gcj09PWUubGVuZ3RoLTE7aWYoZVtyXS5pbmRleE9mKFwiK1wiKSE9PS0xfHxlW3JdLmluZGV4T2YoXCIjXCIpIT09LTEpcmV0dXJuICExfXJldHVybiAhMH1Yci52YWxpZGF0ZVRvcGljPVdkO2Z1bmN0aW9uIHUxKHQpe2lmKHQubGVuZ3RoPT09MClyZXR1cm4gXCJlbXB0eV90b3BpY19saXN0XCI7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYoIVdkKHRbZV0pKXJldHVybiB0W2VdO3JldHVybiBudWxsfVhyLnZhbGlkYXRlVG9waWNzPXUxO30pO3ZhciByYT1NKHRhPT57XygpO3YoKTttKCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRhLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBmMT1qdCgpLGMxPXtvYmplY3RNb2RlOiEwfSxoMT17Y2xlYW46ITB9LGVhPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMub3B0aW9ucz1lfHx7fSx0aGlzLm9wdGlvbnM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGgxKSxlKSx0aGlzLl9pbmZsaWdodHM9bmV3IE1hcDt9cHV0KGUscil7cmV0dXJuIHRoaXMuX2luZmxpZ2h0cy5zZXQoZS5tZXNzYWdlSWQsZSksciYmcigpLHRoaXN9Y3JlYXRlU3RyZWFtKCl7bGV0IGU9bmV3IGYxLlJlYWRhYmxlKGMxKSxyPVtdLGk9ITEsbj0wO3JldHVybiB0aGlzLl9pbmZsaWdodHMuZm9yRWFjaCgobyxzKT0+e3IucHVzaChvKTt9KSxlLl9yZWFkPSgpPT57IWkmJm48ci5sZW5ndGg/ZS5wdXNoKHJbbisrXSk6ZS5wdXNoKG51bGwpO30sZS5kZXN0cm95PW89PntpZighaSlyZXR1cm4gaT0hMCxzZXRUaW1lb3V0KCgpPT57ZS5lbWl0KFwiY2xvc2VcIik7fSwwKSxlfSxlfWRlbChlLHIpe2xldCBpPXRoaXMuX2luZmxpZ2h0cy5nZXQoZS5tZXNzYWdlSWQpO3JldHVybiBpPyh0aGlzLl9pbmZsaWdodHMuZGVsZXRlKGUubWVzc2FnZUlkKSxyKG51bGwsaSkpOnImJnIobmV3IEVycm9yKFwibWlzc2luZyBwYWNrZXRcIikpLHRoaXN9Z2V0KGUscil7bGV0IGk9dGhpcy5faW5mbGlnaHRzLmdldChlLm1lc3NhZ2VJZCk7cmV0dXJuIGk/cihudWxsLGkpOnImJnIobmV3IEVycm9yKFwibWlzc2luZyBwYWNrZXRcIikpLHRoaXN9Y2xvc2UoZSl7dGhpcy5vcHRpb25zLmNsZWFuJiYodGhpcy5faW5mbGlnaHRzPW51bGwpLGUmJmUoKTt9fTt0YS5kZWZhdWx0PWVhO30pO3ZhciBWZD1NKGlhPT57XygpO3YoKTttKCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGlhLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBIZD1bMCwxNiwxMjgsMTMxLDEzNSwxNDQsMTQ1LDE1MSwxNTNdLGQxPSh0LGUscik9Pnt0LmxvZyhcImhhbmRsZVB1Ymxpc2g6IHBhY2tldCAlb1wiLGUpLHI9dHlwZW9mIHI8XCJ1XCI/cjp0Lm5vb3A7bGV0IGk9ZS50b3BpYy50b1N0cmluZygpLG49ZS5wYXlsb2FkLHtxb3M6b309ZSx7bWVzc2FnZUlkOnN9PWUse29wdGlvbnM6YX09dDtpZih0Lm9wdGlvbnMucHJvdG9jb2xWZXJzaW9uPT09NSl7bGV0IGw7aWYoZS5wcm9wZXJ0aWVzJiYobD1lLnByb3BlcnRpZXMudG9waWNBbGlhcyksdHlwZW9mIGw8XCJ1XCIpaWYoaS5sZW5ndGg9PT0wKWlmKGw+MCYmbDw9NjU1MzUpe2xldCBjPXQudG9waWNBbGlhc1JlY3YuZ2V0VG9waWNCeUFsaWFzKGwpO2lmKGMpaT1jLHQubG9nKFwiaGFuZGxlUHVibGlzaCA6OiB0b3BpYyBjb21wbGVtZW50ZWQgYnkgYWxpYXMuIHRvcGljOiAlcyAtIGFsaWFzOiAlZFwiLGksbCk7ZWxzZSB7dC5sb2coXCJoYW5kbGVQdWJsaXNoIDo6IHVucmVnaXN0ZXJlZCB0b3BpYyBhbGlhcy4gYWxpYXM6ICVkXCIsbCksdC5lbWl0KFwiZXJyb3JcIixuZXcgRXJyb3IoXCJSZWNlaXZlZCB1bnJlZ2lzdGVyZWQgVG9waWMgQWxpYXNcIikpO3JldHVybn19ZWxzZSB7dC5sb2coXCJoYW5kbGVQdWJsaXNoIDo6IHRvcGljIGFsaWFzIG91dCBvZiByYW5nZS4gYWxpYXM6ICVkXCIsbCksdC5lbWl0KFwiZXJyb3JcIixuZXcgRXJyb3IoXCJSZWNlaXZlZCBUb3BpYyBBbGlhcyBpcyBvdXQgb2YgcmFuZ2VcIikpO3JldHVybn1lbHNlIGlmKHQudG9waWNBbGlhc1JlY3YucHV0KGksbCkpdC5sb2coXCJoYW5kbGVQdWJsaXNoIDo6IHJlZ2lzdGVyZWQgdG9waWM6ICVzIC0gYWxpYXM6ICVkXCIsaSxsKTtlbHNlIHt0LmxvZyhcImhhbmRsZVB1Ymxpc2ggOjogdG9waWMgYWxpYXMgb3V0IG9mIHJhbmdlLiBhbGlhczogJWRcIixsKSx0LmVtaXQoXCJlcnJvclwiLG5ldyBFcnJvcihcIlJlY2VpdmVkIFRvcGljIEFsaWFzIGlzIG91dCBvZiByYW5nZVwiKSk7cmV0dXJufX1zd2l0Y2godC5sb2coXCJoYW5kbGVQdWJsaXNoOiBxb3MgJWRcIixvKSxvKXtjYXNlIDI6e2EuY3VzdG9tSGFuZGxlQWNrcyhpLG4sZSwobCxjKT0+e2lmKHR5cGVvZiBsPT1cIm51bWJlclwiJiYoYz1sLGw9bnVsbCksbClyZXR1cm4gdC5lbWl0KFwiZXJyb3JcIixsKTtpZihIZC5pbmRleE9mKGMpPT09LTEpcmV0dXJuIHQuZW1pdChcImVycm9yXCIsbmV3IEVycm9yKFwiV3JvbmcgcmVhc29uIGNvZGUgZm9yIHB1YnJlY1wiKSk7Yz90Ll9zZW5kUGFja2V0KHtjbWQ6XCJwdWJyZWNcIixtZXNzYWdlSWQ6cyxyZWFzb25Db2RlOmN9LHIpOnQuaW5jb21pbmdTdG9yZS5wdXQoZSwoKT0+e3QuX3NlbmRQYWNrZXQoe2NtZDpcInB1YnJlY1wiLG1lc3NhZ2VJZDpzfSxyKTt9KTt9KTticmVha31jYXNlIDE6e2EuY3VzdG9tSGFuZGxlQWNrcyhpLG4sZSwobCxjKT0+e2lmKHR5cGVvZiBsPT1cIm51bWJlclwiJiYoYz1sLGw9bnVsbCksbClyZXR1cm4gdC5lbWl0KFwiZXJyb3JcIixsKTtpZihIZC5pbmRleE9mKGMpPT09LTEpcmV0dXJuIHQuZW1pdChcImVycm9yXCIsbmV3IEVycm9yKFwiV3JvbmcgcmVhc29uIGNvZGUgZm9yIHB1YmFja1wiKSk7Y3x8dC5lbWl0KFwibWVzc2FnZVwiLGksbixlKSx0LmhhbmRsZU1lc3NhZ2UoZSxoPT57aWYoaClyZXR1cm4gciYmcihoKTt0Ll9zZW5kUGFja2V0KHtjbWQ6XCJwdWJhY2tcIixtZXNzYWdlSWQ6cyxyZWFzb25Db2RlOmN9LHIpO30pO30pO2JyZWFrfWNhc2UgMDp0LmVtaXQoXCJtZXNzYWdlXCIsaSxuLGUpLHQuaGFuZGxlTWVzc2FnZShlLHIpO2JyZWFrO2RlZmF1bHQ6dC5sb2coXCJoYW5kbGVQdWJsaXNoOiB1bmtub3duIFFvUy4gRG9pbmcgbm90aGluZy5cIik7YnJlYWt9fTtpYS5kZWZhdWx0PWQxO30pO3ZhciB6ZD1NKChRTyxwMSk9PntwMS5leHBvcnRzPXt2ZXJzaW9uOlwiNS4xMC4xXCJ9O30pO3ZhciBfcj1NKGF0PT57XygpO3YoKTttKCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGF0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO2F0Lk1RVFRKU19WRVJTSU9OPWF0Lm5leHRUaWNrPWF0LmFwcGx5TWl4aW49YXQuRXJyb3JXaXRoUmVhc29uQ29kZT12b2lkIDA7dmFyIG5hPWNsYXNzIHQgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlLHIpe3N1cGVyKGUpLHRoaXMuY29kZT1yLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLHQucHJvdG90eXBlKSxPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykubmFtZT1cIkVycm9yV2l0aFJlYXNvbkNvZGVcIjt9fTthdC5FcnJvcldpdGhSZWFzb25Db2RlPW5hO2Z1bmN0aW9uIGcxKHQsZSxyPSExKXt2YXIgaTtsZXQgbj1bZV07Zm9yKDs7KXtsZXQgbz1uWzBdLHM9T2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO2lmKHM/LnByb3RvdHlwZSluLnVuc2hpZnQocyk7ZWxzZSBicmVha31mb3IobGV0IG8gb2Ygbilmb3IobGV0IHMgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoby5wcm90b3R5cGUpKShyfHxzIT09XCJjb25zdHJ1Y3RvclwiKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLHMsKGk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvLnByb3RvdHlwZSxzKSkhPT1udWxsJiZpIT09dm9pZCAwP2k6T2JqZWN0LmNyZWF0ZShudWxsKSk7fWF0LmFwcGx5TWl4aW49ZzE7YXQubmV4dFRpY2s9dHlwZW9mKEI9PT1udWxsfHxCPT09dm9pZCAwP3ZvaWQgMDpCLm5leHRUaWNrKT09XCJmdW5jdGlvblwiP0IubmV4dFRpY2s6dD0+e3NldFRpbWVvdXQodCwwKTt9O2F0Lk1RVFRKU19WRVJTSU9OPXpkKCkudmVyc2lvbjt9KTt2YXIgVGk9TSgkdD0+e18oKTt2KCk7bSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkdCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTskdC5SZWFzb25Db2Rlcz12b2lkIDA7dmFyIEtkPV9yKCk7JHQuUmVhc29uQ29kZXM9ezA6XCJcIiwxOlwiVW5hY2NlcHRhYmxlIHByb3RvY29sIHZlcnNpb25cIiwyOlwiSWRlbnRpZmllciByZWplY3RlZFwiLDM6XCJTZXJ2ZXIgdW5hdmFpbGFibGVcIiw0OlwiQmFkIHVzZXJuYW1lIG9yIHBhc3N3b3JkXCIsNTpcIk5vdCBhdXRob3JpemVkXCIsMTY6XCJObyBtYXRjaGluZyBzdWJzY3JpYmVyc1wiLDE3OlwiTm8gc3Vic2NyaXB0aW9uIGV4aXN0ZWRcIiwxMjg6XCJVbnNwZWNpZmllZCBlcnJvclwiLDEyOTpcIk1hbGZvcm1lZCBQYWNrZXRcIiwxMzA6XCJQcm90b2NvbCBFcnJvclwiLDEzMTpcIkltcGxlbWVudGF0aW9uIHNwZWNpZmljIGVycm9yXCIsMTMyOlwiVW5zdXBwb3J0ZWQgUHJvdG9jb2wgVmVyc2lvblwiLDEzMzpcIkNsaWVudCBJZGVudGlmaWVyIG5vdCB2YWxpZFwiLDEzNDpcIkJhZCBVc2VyIE5hbWUgb3IgUGFzc3dvcmRcIiwxMzU6XCJOb3QgYXV0aG9yaXplZFwiLDEzNjpcIlNlcnZlciB1bmF2YWlsYWJsZVwiLDEzNzpcIlNlcnZlciBidXN5XCIsMTM4OlwiQmFubmVkXCIsMTM5OlwiU2VydmVyIHNodXR0aW5nIGRvd25cIiwxNDA6XCJCYWQgYXV0aGVudGljYXRpb24gbWV0aG9kXCIsMTQxOlwiS2VlcCBBbGl2ZSB0aW1lb3V0XCIsMTQyOlwiU2Vzc2lvbiB0YWtlbiBvdmVyXCIsMTQzOlwiVG9waWMgRmlsdGVyIGludmFsaWRcIiwxNDQ6XCJUb3BpYyBOYW1lIGludmFsaWRcIiwxNDU6XCJQYWNrZXQgaWRlbnRpZmllciBpbiB1c2VcIiwxNDY6XCJQYWNrZXQgSWRlbnRpZmllciBub3QgZm91bmRcIiwxNDc6XCJSZWNlaXZlIE1heGltdW0gZXhjZWVkZWRcIiwxNDg6XCJUb3BpYyBBbGlhcyBpbnZhbGlkXCIsMTQ5OlwiUGFja2V0IHRvbyBsYXJnZVwiLDE1MDpcIk1lc3NhZ2UgcmF0ZSB0b28gaGlnaFwiLDE1MTpcIlF1b3RhIGV4Y2VlZGVkXCIsMTUyOlwiQWRtaW5pc3RyYXRpdmUgYWN0aW9uXCIsMTUzOlwiUGF5bG9hZCBmb3JtYXQgaW52YWxpZFwiLDE1NDpcIlJldGFpbiBub3Qgc3VwcG9ydGVkXCIsMTU1OlwiUW9TIG5vdCBzdXBwb3J0ZWRcIiwxNTY6XCJVc2UgYW5vdGhlciBzZXJ2ZXJcIiwxNTc6XCJTZXJ2ZXIgbW92ZWRcIiwxNTg6XCJTaGFyZWQgU3Vic2NyaXB0aW9ucyBub3Qgc3VwcG9ydGVkXCIsMTU5OlwiQ29ubmVjdGlvbiByYXRlIGV4Y2VlZGVkXCIsMTYwOlwiTWF4aW11bSBjb25uZWN0IHRpbWVcIiwxNjE6XCJTdWJzY3JpcHRpb24gSWRlbnRpZmllcnMgbm90IHN1cHBvcnRlZFwiLDE2MjpcIldpbGRjYXJkIFN1YnNjcmlwdGlvbnMgbm90IHN1cHBvcnRlZFwifTt2YXIgeTE9KHQsZSk9PntsZXR7bWVzc2FnZUlkOnJ9PWUsaT1lLmNtZCxuPW51bGwsbz10Lm91dGdvaW5nW3JdP3Qub3V0Z29pbmdbcl0uY2I6bnVsbCxzPW51bGw7aWYoIW8pe3QubG9nKFwiX2hhbmRsZUFjayA6OiBTZXJ2ZXIgc2VudCBhbiBhY2sgaW4gZXJyb3IuIElnbm9yaW5nLlwiKTtyZXR1cm59c3dpdGNoKHQubG9nKFwiX2hhbmRsZUFjayA6OiBwYWNrZXQgdHlwZVwiLGkpLGkpe2Nhc2VcInB1YmNvbXBcIjpjYXNlXCJwdWJhY2tcIjp7bGV0IGE9ZS5yZWFzb25Db2RlO2EmJmE+MCYmYSE9PTE2PyhzPW5ldyBLZC5FcnJvcldpdGhSZWFzb25Db2RlKGBQdWJsaXNoIGVycm9yOiAkeyR0LlJlYXNvbkNvZGVzW2FdfWAsYSksdC5fcmVtb3ZlT3V0Z29pbmdBbmRTdG9yZU1lc3NhZ2UociwoKT0+e28ocyxlKTt9KSk6dC5fcmVtb3ZlT3V0Z29pbmdBbmRTdG9yZU1lc3NhZ2UocixvKTticmVha31jYXNlXCJwdWJyZWNcIjp7bj17Y21kOlwicHVicmVsXCIscW9zOjIsbWVzc2FnZUlkOnJ9O2xldCBhPWUucmVhc29uQ29kZTthJiZhPjAmJmEhPT0xNj8ocz1uZXcgS2QuRXJyb3JXaXRoUmVhc29uQ29kZShgUHVibGlzaCBlcnJvcjogJHskdC5SZWFzb25Db2Rlc1thXX1gLGEpLHQuX3JlbW92ZU91dGdvaW5nQW5kU3RvcmVNZXNzYWdlKHIsKCk9PntvKHMsZSk7fSkpOnQuX3NlbmRQYWNrZXQobik7YnJlYWt9Y2FzZVwic3ViYWNrXCI6e2RlbGV0ZSB0Lm91dGdvaW5nW3JdLHQubWVzc2FnZUlkUHJvdmlkZXIuZGVhbGxvY2F0ZShyKTtsZXQgYT1lLmdyYW50ZWQ7Zm9yKGxldCBsPTA7bDxhLmxlbmd0aDtsKyspe2xldCBjPWFbbF07aWYoYyYxMjgpe3M9bmV3IEVycm9yKGBTdWJzY3JpYmUgZXJyb3I6ICR7JHQuUmVhc29uQ29kZXNbY119YCkscy5jb2RlPWM7bGV0IGg9dC5tZXNzYWdlSWRUb1RvcGljW3JdO2gmJmguZm9yRWFjaChkPT57ZGVsZXRlIHQuX3Jlc3Vic2NyaWJlVG9waWNzW2RdO30pO319ZGVsZXRlIHQubWVzc2FnZUlkVG9Ub3BpY1tyXSx0Ll9pbnZva2VTdG9yZVByb2Nlc3NpbmdRdWV1ZSgpLG8ocyxlKTticmVha31jYXNlXCJ1bnN1YmFja1wiOntkZWxldGUgdC5vdXRnb2luZ1tyXSx0Lm1lc3NhZ2VJZFByb3ZpZGVyLmRlYWxsb2NhdGUociksdC5faW52b2tlU3RvcmVQcm9jZXNzaW5nUXVldWUoKSxvKG51bGwsZSk7YnJlYWt9ZGVmYXVsdDp0LmVtaXQoXCJlcnJvclwiLG5ldyBFcnJvcihcInVucmVjb2duaXplZCBwYWNrZXQgdHlwZVwiKSk7fXQuZGlzY29ubmVjdGluZyYmT2JqZWN0LmtleXModC5vdXRnb2luZykubGVuZ3RoPT09MCYmdC5lbWl0KFwib3V0Z29pbmdFbXB0eVwiKTt9OyR0LmRlZmF1bHQ9eTE7fSk7dmFyIFFkPU0oc2E9PntfKCk7digpO20oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoc2EsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIEdkPV9yKCksYjE9VGkoKSx3MT0odCxlKT0+e2xldHtvcHRpb25zOnJ9PXQsaT1yLnByb3RvY29sVmVyc2lvbixuPWk9PT01P2UucmVhc29uQ29kZTplLnJldHVybkNvZGU7aWYoaSE9PTUpe2xldCBvPW5ldyBHZC5FcnJvcldpdGhSZWFzb25Db2RlKGBQcm90b2NvbCBlcnJvcjogQXV0aCBwYWNrZXRzIGFyZSBvbmx5IHN1cHBvcnRlZCBpbiBNUVRUIDUuIFlvdXIgdmVyc2lvbjoke2l9YCxuKTt0LmVtaXQoXCJlcnJvclwiLG8pO3JldHVybn10LmhhbmRsZUF1dGgoZSwobyxzKT0+e2lmKG8pe3QuZW1pdChcImVycm9yXCIsbyk7cmV0dXJufWlmKG49PT0yNCl0LnJlY29ubmVjdGluZz0hMSx0Ll9zZW5kUGFja2V0KHMpO2Vsc2Uge2xldCBhPW5ldyBHZC5FcnJvcldpdGhSZWFzb25Db2RlKGBDb25uZWN0aW9uIHJlZnVzZWQ6ICR7YjEuUmVhc29uQ29kZXNbbl19YCxuKTt0LmVtaXQoXCJlcnJvclwiLGEpO319KTt9O3NhLmRlZmF1bHQ9dzE7fSk7dmFyIGVwPU0oTW49PntfKCk7digpO20oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTW4sXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7TW4uTFJVQ2FjaGU9dm9pZCAwO3ZhciBSaT10eXBlb2YgcGVyZm9ybWFuY2U9PVwib2JqZWN0XCImJnBlcmZvcm1hbmNlJiZ0eXBlb2YgcGVyZm9ybWFuY2Uubm93PT1cImZ1bmN0aW9uXCI/cGVyZm9ybWFuY2U6RGF0ZSxKZD1uZXcgU2V0LG9hPXR5cGVvZiBCPT1cIm9iamVjdFwiJiZCP0I6e30sWGQ9KHQsZSxyLGkpPT57dHlwZW9mIG9hLmVtaXRXYXJuaW5nPT1cImZ1bmN0aW9uXCI/b2EuZW1pdFdhcm5pbmcodCxlLHIsaSk6Y29uc29sZS5lcnJvcihgWyR7cn1dICR7ZX06ICR7dH1gKTt9LHhuPWdsb2JhbFRoaXMuQWJvcnRDb250cm9sbGVyLFlkPWdsb2JhbFRoaXMuQWJvcnRTaWduYWw7aWYodHlwZW9mIHhuPlwidVwiKXtZZD1jbGFzc3tvbmFib3J0O19vbmFib3J0PVtdO3JlYXNvbjthYm9ydGVkPSExO2FkZEV2ZW50TGlzdGVuZXIoaSxuKXt0aGlzLl9vbmFib3J0LnB1c2gobik7fX0seG49Y2xhc3N7Y29uc3RydWN0b3IoKXtlKCk7fXNpZ25hbD1uZXcgWWQ7YWJvcnQoaSl7aWYoIXRoaXMuc2lnbmFsLmFib3J0ZWQpe3RoaXMuc2lnbmFsLnJlYXNvbj1pLHRoaXMuc2lnbmFsLmFib3J0ZWQ9ITA7Zm9yKGxldCBuIG9mIHRoaXMuc2lnbmFsLl9vbmFib3J0KW4oaSk7dGhpcy5zaWduYWwub25hYm9ydD8uKGkpO319fTtsZXQgdD1vYS5lbnY/LkxSVV9DQUNIRV9JR05PUkVfQUNfV0FSTklORyE9PVwiMVwiLGU9KCk9Pnt0JiYodD0hMSxYZChcIkFib3J0Q29udHJvbGxlciBpcyBub3QgZGVmaW5lZC4gSWYgdXNpbmcgbHJ1LWNhY2hlIGluIG5vZGUgMTQsIGxvYWQgYW4gQWJvcnRDb250cm9sbGVyIHBvbHlmaWxsIGZyb20gdGhlIGBub2RlLWFib3J0LWNvbnRyb2xsZXJgIHBhY2thZ2UuIEEgbWluaW1hbCBwb2x5ZmlsbCBpcyBwcm92aWRlZCBmb3IgdXNlIGJ5IExSVUNhY2hlLmZldGNoKCksIGJ1dCBpdCBzaG91bGQgbm90IGJlIHJlbGllZCB1cG9uIGluIG90aGVyIGNvbnRleHRzIChlZywgcGFzc2luZyBpdCB0byBvdGhlciBBUElzIHRoYXQgdXNlIEFib3J0Q29udHJvbGxlci9BYm9ydFNpZ25hbCBtaWdodCBoYXZlIHVuZGVzaXJhYmxlIGVmZmVjdHMpLiBZb3UgbWF5IGRpc2FibGUgdGhpcyB3aXRoIExSVV9DQUNIRV9JR05PUkVfQUNfV0FSTklORz0xIGluIHRoZSBlbnYuXCIsXCJOT19BQk9SVF9DT05UUk9MTEVSXCIsXCJFTk9UU1VQXCIsZSkpO307fXZhciBfMT10PT4hSmQuaGFzKHQpLEh0PXQ9PnQmJnQ9PT1NYXRoLmZsb29yKHQpJiZ0PjAmJmlzRmluaXRlKHQpLFpkPXQ9Pkh0KHQpP3Q8PU1hdGgucG93KDIsOCk/VWludDhBcnJheTp0PD1NYXRoLnBvdygyLDE2KT9VaW50MTZBcnJheTp0PD1NYXRoLnBvdygyLDMyKT9VaW50MzJBcnJheTp0PD1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUj9acjpudWxsOm51bGwsWnI9Y2xhc3MgZXh0ZW5kcyBBcnJheXtjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLmZpbGwoMCk7fX0sYWE9Y2xhc3MgdHtoZWFwO2xlbmd0aDtzdGF0aWMjbD0hMTtzdGF0aWMgY3JlYXRlKGUpe2xldCByPVpkKGUpO2lmKCFyKXJldHVybiBbXTt0LiNsPSEwO2xldCBpPW5ldyB0KGUscik7cmV0dXJuIHQuI2w9ITEsaX1jb25zdHJ1Y3RvcihlLHIpe2lmKCF0LiNsKXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnN0YW50aWF0ZSBTdGFjayB1c2luZyBTdGFjay5jcmVhdGUobilcIik7dGhpcy5oZWFwPW5ldyByKGUpLHRoaXMubGVuZ3RoPTA7fXB1c2goZSl7dGhpcy5oZWFwW3RoaXMubGVuZ3RoKytdPWU7fXBvcCgpe3JldHVybiB0aGlzLmhlYXBbLS10aGlzLmxlbmd0aF19fSxsYT1jbGFzcyB0eyNsOyNjOyNwOyNnOyNCO3R0bDt0dGxSZXNvbHV0aW9uO3R0bEF1dG9wdXJnZTt1cGRhdGVBZ2VPbkdldDt1cGRhdGVBZ2VPbkhhczthbGxvd1N0YWxlO25vRGlzcG9zZU9uU2V0O25vVXBkYXRlVFRMO21heEVudHJ5U2l6ZTtzaXplQ2FsY3VsYXRpb247bm9EZWxldGVPbkZldGNoUmVqZWN0aW9uO25vRGVsZXRlT25TdGFsZUdldDthbGxvd1N0YWxlT25GZXRjaEFib3J0O2FsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uO2lnbm9yZUZldGNoQWJvcnQ7I2k7I3k7I247I3I7I2U7I3U7I2g7I2E7I3M7I2I7I287I0U7I1M7I3c7I187I0k7I2Y7c3RhdGljIHVuc2FmZUV4cG9zZUludGVybmFscyhlKXtyZXR1cm4ge3N0YXJ0czplLiNTLHR0bHM6ZS4jdyxzaXplczplLiNFLGtleU1hcDplLiNuLGtleUxpc3Q6ZS4jcix2YWxMaXN0OmUuI2UsbmV4dDplLiN1LHByZXY6ZS4jaCxnZXQgaGVhZCgpe3JldHVybiBlLiNhfSxnZXQgdGFpbCgpe3JldHVybiBlLiNzfSxmcmVlOmUuI2IsaXNCYWNrZ3JvdW5kRmV0Y2g6cj0+ZS4jdChyKSxiYWNrZ3JvdW5kRmV0Y2g6KHIsaSxuLG8pPT5lLiNPKHIsaSxuLG8pLG1vdmVUb1RhaWw6cj0+ZS4jQyhyKSxpbmRleGVzOnI9PmUuI20ocikscmluZGV4ZXM6cj0+ZS4jdihyKSxpc1N0YWxlOnI9PmUuI2Qocil9fWdldCBtYXgoKXtyZXR1cm4gdGhpcy4jbH1nZXQgbWF4U2l6ZSgpe3JldHVybiB0aGlzLiNjfWdldCBjYWxjdWxhdGVkU2l6ZSgpe3JldHVybiB0aGlzLiN5fWdldCBzaXplKCl7cmV0dXJuIHRoaXMuI2l9Z2V0IGZldGNoTWV0aG9kKCl7cmV0dXJuIHRoaXMuI0J9Z2V0IGRpc3Bvc2UoKXtyZXR1cm4gdGhpcy4jcH1nZXQgZGlzcG9zZUFmdGVyKCl7cmV0dXJuIHRoaXMuI2d9Y29uc3RydWN0b3IoZSl7bGV0e21heDpyPTAsdHRsOmksdHRsUmVzb2x1dGlvbjpuPTEsdHRsQXV0b3B1cmdlOm8sdXBkYXRlQWdlT25HZXQ6cyx1cGRhdGVBZ2VPbkhhczphLGFsbG93U3RhbGU6bCxkaXNwb3NlOmMsZGlzcG9zZUFmdGVyOmgsbm9EaXNwb3NlT25TZXQ6ZCxub1VwZGF0ZVRUTDpnLG1heFNpemU6eT0wLG1heEVudHJ5U2l6ZTp3PTAsc2l6ZUNhbGN1bGF0aW9uOlMsZmV0Y2hNZXRob2Q6RSxub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb246SSxub0RlbGV0ZU9uU3RhbGVHZXQ6QyxhbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbjpSLGFsbG93U3RhbGVPbkZldGNoQWJvcnQ6VSxpZ25vcmVGZXRjaEFib3J0Ok59PWU7aWYociE9PTAmJiFIdChyKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwibWF4IG9wdGlvbiBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlclwiKTtsZXQgVz1yP1pkKHIpOkFycmF5O2lmKCFXKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgbWF4IHZhbHVlOiBcIityKTtpZih0aGlzLiNsPXIsdGhpcy4jYz15LHRoaXMubWF4RW50cnlTaXplPXd8fHRoaXMuI2MsdGhpcy5zaXplQ2FsY3VsYXRpb249Uyx0aGlzLnNpemVDYWxjdWxhdGlvbil7aWYoIXRoaXMuI2MmJiF0aGlzLm1heEVudHJ5U2l6ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiY2Fubm90IHNldCBzaXplQ2FsY3VsYXRpb24gd2l0aG91dCBzZXR0aW5nIG1heFNpemUgb3IgbWF4RW50cnlTaXplXCIpO2lmKHR5cGVvZiB0aGlzLnNpemVDYWxjdWxhdGlvbiE9XCJmdW5jdGlvblwiKXRocm93IG5ldyBUeXBlRXJyb3IoXCJzaXplQ2FsY3VsYXRpb24gc2V0IHRvIG5vbi1mdW5jdGlvblwiKX1pZihFIT09dm9pZCAwJiZ0eXBlb2YgRSE9XCJmdW5jdGlvblwiKXRocm93IG5ldyBUeXBlRXJyb3IoXCJmZXRjaE1ldGhvZCBtdXN0IGJlIGEgZnVuY3Rpb24gaWYgc3BlY2lmaWVkXCIpO2lmKHRoaXMuI0I9RSx0aGlzLiNJPSEhRSx0aGlzLiNuPW5ldyBNYXAsdGhpcy4jcj1uZXcgQXJyYXkocikuZmlsbCh2b2lkIDApLHRoaXMuI2U9bmV3IEFycmF5KHIpLmZpbGwodm9pZCAwKSx0aGlzLiN1PW5ldyBXKHIpLHRoaXMuI2g9bmV3IFcociksdGhpcy4jYT0wLHRoaXMuI3M9MCx0aGlzLiNiPWFhLmNyZWF0ZShyKSx0aGlzLiNpPTAsdGhpcy4jeT0wLHR5cGVvZiBjPT1cImZ1bmN0aW9uXCImJih0aGlzLiNwPWMpLHR5cGVvZiBoPT1cImZ1bmN0aW9uXCI/KHRoaXMuI2c9aCx0aGlzLiNvPVtdKToodGhpcy4jZz12b2lkIDAsdGhpcy4jbz12b2lkIDApLHRoaXMuI189ISF0aGlzLiNwLHRoaXMuI2Y9ISF0aGlzLiNnLHRoaXMubm9EaXNwb3NlT25TZXQ9ISFkLHRoaXMubm9VcGRhdGVUVEw9ISFnLHRoaXMubm9EZWxldGVPbkZldGNoUmVqZWN0aW9uPSEhSSx0aGlzLmFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uPSEhUix0aGlzLmFsbG93U3RhbGVPbkZldGNoQWJvcnQ9ISFVLHRoaXMuaWdub3JlRmV0Y2hBYm9ydD0hIU4sdGhpcy5tYXhFbnRyeVNpemUhPT0wKXtpZih0aGlzLiNjIT09MCYmIUh0KHRoaXMuI2MpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJtYXhTaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIGlmIHNwZWNpZmllZFwiKTtpZighSHQodGhpcy5tYXhFbnRyeVNpemUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJtYXhFbnRyeVNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgaWYgc3BlY2lmaWVkXCIpO3RoaXMuI3EoKTt9aWYodGhpcy5hbGxvd1N0YWxlPSEhbCx0aGlzLm5vRGVsZXRlT25TdGFsZUdldD0hIUMsdGhpcy51cGRhdGVBZ2VPbkdldD0hIXMsdGhpcy51cGRhdGVBZ2VPbkhhcz0hIWEsdGhpcy50dGxSZXNvbHV0aW9uPUh0KG4pfHxuPT09MD9uOjEsdGhpcy50dGxBdXRvcHVyZ2U9ISFvLHRoaXMudHRsPWl8fDAsdGhpcy50dGwpe2lmKCFIdCh0aGlzLnR0bCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcInR0bCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBpZiBzcGVjaWZpZWRcIik7dGhpcy4jeCgpO31pZih0aGlzLiNsPT09MCYmdGhpcy50dGw9PT0wJiZ0aGlzLiNjPT09MCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXQgbGVhc3Qgb25lIG9mIG1heCwgbWF4U2l6ZSwgb3IgdHRsIGlzIHJlcXVpcmVkXCIpO2lmKCF0aGlzLnR0bEF1dG9wdXJnZSYmIXRoaXMuI2wmJiF0aGlzLiNjKXtsZXQgSz1cIkxSVV9DQUNIRV9VTkJPVU5ERURcIjtfMShLKSYmKEpkLmFkZChLKSxYZChcIlRUTCBjYWNoaW5nIHdpdGhvdXQgdHRsQXV0b3B1cmdlLCBtYXgsIG9yIG1heFNpemUgY2FuIHJlc3VsdCBpbiB1bmJvdW5kZWQgbWVtb3J5IGNvbnN1bXB0aW9uLlwiLFwiVW5ib3VuZGVkQ2FjaGVXYXJuaW5nXCIsSyx0KSk7fX1nZXRSZW1haW5pbmdUVEwoZSl7cmV0dXJuIHRoaXMuI24uaGFzKGUpPzEvMDowfSN4KCl7bGV0IGU9bmV3IFpyKHRoaXMuI2wpLHI9bmV3IFpyKHRoaXMuI2wpO3RoaXMuI3c9ZSx0aGlzLiNTPXIsdGhpcy4jTT0obyxzLGE9Umkubm93KCkpPT57aWYocltvXT1zIT09MD9hOjAsZVtvXT1zLHMhPT0wJiZ0aGlzLnR0bEF1dG9wdXJnZSl7bGV0IGw9c2V0VGltZW91dCgoKT0+e3RoaXMuI2QobykmJnRoaXMuZGVsZXRlKHRoaXMuI3Jbb10pO30scysxKTtsLnVucmVmJiZsLnVucmVmKCk7fX0sdGhpcy4jVD1vPT57cltvXT1lW29dIT09MD9SaS5ub3coKTowO30sdGhpcy4jQT0obyxzKT0+e2lmKGVbc10pe2xldCBhPWVbc10sbD1yW3NdO28udHRsPWEsby5zdGFydD1sLG8ubm93PWl8fG4oKTtsZXQgYz1vLm5vdy1sO28ucmVtYWluaW5nVFRMPWEtYzt9fTtsZXQgaT0wLG49KCk9PntsZXQgbz1SaS5ub3coKTtpZih0aGlzLnR0bFJlc29sdXRpb24+MCl7aT1vO2xldCBzPXNldFRpbWVvdXQoKCk9Pmk9MCx0aGlzLnR0bFJlc29sdXRpb24pO3MudW5yZWYmJnMudW5yZWYoKTt9cmV0dXJuIG99O3RoaXMuZ2V0UmVtYWluaW5nVFRMPW89PntsZXQgcz10aGlzLiNuLmdldChvKTtpZihzPT09dm9pZCAwKXJldHVybiAwO2xldCBhPWVbc10sbD1yW3NdO2lmKGE9PT0wfHxsPT09MClyZXR1cm4gMS8wO2xldCBjPShpfHxuKCkpLWw7cmV0dXJuIGEtY30sdGhpcy4jZD1vPT5lW29dIT09MCYmcltvXSE9PTAmJihpfHxuKCkpLXJbb10+ZVtvXTt9I1Q9KCk9Pnt9OyNBPSgpPT57fTsjTT0oKT0+e307I2Q9KCk9PiExOyNxKCl7bGV0IGU9bmV3IFpyKHRoaXMuI2wpO3RoaXMuI3k9MCx0aGlzLiNFPWUsdGhpcy4jUj1yPT57dGhpcy4jeS09ZVtyXSxlW3JdPTA7fSx0aGlzLiNMPShyLGksbixvKT0+e2lmKHRoaXMuI3QoaSkpcmV0dXJuIDA7aWYoIUh0KG4pKWlmKG8pe2lmKHR5cGVvZiBvIT1cImZ1bmN0aW9uXCIpdGhyb3cgbmV3IFR5cGVFcnJvcihcInNpemVDYWxjdWxhdGlvbiBtdXN0IGJlIGEgZnVuY3Rpb25cIik7aWYobj1vKGksciksIUh0KG4pKXRocm93IG5ldyBUeXBlRXJyb3IoXCJzaXplQ2FsY3VsYXRpb24gcmV0dXJuIGludmFsaWQgKGV4cGVjdCBwb3NpdGl2ZSBpbnRlZ2VyKVwiKX1lbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIHNpemUgdmFsdWUgKG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlcikuIFdoZW4gbWF4U2l6ZSBvciBtYXhFbnRyeVNpemUgaXMgdXNlZCwgc2l6ZUNhbGN1bGF0aW9uIG9yIHNpemUgbXVzdCBiZSBzZXQuXCIpO3JldHVybiBufSx0aGlzLiNQPShyLGksbik9PntpZihlW3JdPWksdGhpcy4jYyl7bGV0IG89dGhpcy4jYy1lW3JdO2Zvcig7dGhpcy4jeT5vOyl0aGlzLiNrKCEwKTt9dGhpcy4jeSs9ZVtyXSxuJiYobi5lbnRyeVNpemU9aSxuLnRvdGFsQ2FsY3VsYXRlZFNpemU9dGhpcy4jeSk7fTt9I1I9ZT0+e307I1A9KGUscixpKT0+e307I0w9KGUscixpLG4pPT57aWYoaXx8bil0aHJvdyBuZXcgVHlwZUVycm9yKFwiY2Fubm90IHNldCBzaXplIHdpdGhvdXQgc2V0dGluZyBtYXhTaXplIG9yIG1heEVudHJ5U2l6ZSBvbiBjYWNoZVwiKTtyZXR1cm4gMH07KiNtKHthbGxvd1N0YWxlOmU9dGhpcy5hbGxvd1N0YWxlfT17fSl7aWYodGhpcy4jaSlmb3IobGV0IHI9dGhpcy4jczshKCF0aGlzLiNVKHIpfHwoKGV8fCF0aGlzLiNkKHIpKSYmKHlpZWxkIHIpLHI9PT10aGlzLiNhKSk7KXI9dGhpcy4jaFtyXTt9KiN2KHthbGxvd1N0YWxlOmU9dGhpcy5hbGxvd1N0YWxlfT17fSl7aWYodGhpcy4jaSlmb3IobGV0IHI9dGhpcy4jYTshKCF0aGlzLiNVKHIpfHwoKGV8fCF0aGlzLiNkKHIpKSYmKHlpZWxkIHIpLHI9PT10aGlzLiNzKSk7KXI9dGhpcy4jdVtyXTt9I1UoZSl7cmV0dXJuIGUhPT12b2lkIDAmJnRoaXMuI24uZ2V0KHRoaXMuI3JbZV0pPT09ZX0qZW50cmllcygpe2ZvcihsZXQgZSBvZiB0aGlzLiNtKCkpdGhpcy4jZVtlXSE9PXZvaWQgMCYmdGhpcy4jcltlXSE9PXZvaWQgMCYmIXRoaXMuI3QodGhpcy4jZVtlXSkmJih5aWVsZCBbdGhpcy4jcltlXSx0aGlzLiNlW2VdXSk7fSpyZW50cmllcygpe2ZvcihsZXQgZSBvZiB0aGlzLiN2KCkpdGhpcy4jZVtlXSE9PXZvaWQgMCYmdGhpcy4jcltlXSE9PXZvaWQgMCYmIXRoaXMuI3QodGhpcy4jZVtlXSkmJih5aWVsZCBbdGhpcy4jcltlXSx0aGlzLiNlW2VdXSk7fSprZXlzKCl7Zm9yKGxldCBlIG9mIHRoaXMuI20oKSl7bGV0IHI9dGhpcy4jcltlXTtyIT09dm9pZCAwJiYhdGhpcy4jdCh0aGlzLiNlW2VdKSYmKHlpZWxkIHIpO319KnJrZXlzKCl7Zm9yKGxldCBlIG9mIHRoaXMuI3YoKSl7bGV0IHI9dGhpcy4jcltlXTtyIT09dm9pZCAwJiYhdGhpcy4jdCh0aGlzLiNlW2VdKSYmKHlpZWxkIHIpO319KnZhbHVlcygpe2ZvcihsZXQgZSBvZiB0aGlzLiNtKCkpdGhpcy4jZVtlXSE9PXZvaWQgMCYmIXRoaXMuI3QodGhpcy4jZVtlXSkmJih5aWVsZCB0aGlzLiNlW2VdKTt9KnJ2YWx1ZXMoKXtmb3IobGV0IGUgb2YgdGhpcy4jdigpKXRoaXMuI2VbZV0hPT12b2lkIDAmJiF0aGlzLiN0KHRoaXMuI2VbZV0pJiYoeWllbGQgdGhpcy4jZVtlXSk7fVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHRoaXMuZW50cmllcygpfWZpbmQoZSxyPXt9KXtmb3IobGV0IGkgb2YgdGhpcy4jbSgpKXtsZXQgbj10aGlzLiNlW2ldLG89dGhpcy4jdChuKT9uLl9fc3RhbGVXaGlsZUZldGNoaW5nOm47aWYobyE9PXZvaWQgMCYmZShvLHRoaXMuI3JbaV0sdGhpcykpcmV0dXJuIHRoaXMuZ2V0KHRoaXMuI3JbaV0scil9fWZvckVhY2goZSxyPXRoaXMpe2ZvcihsZXQgaSBvZiB0aGlzLiNtKCkpe2xldCBuPXRoaXMuI2VbaV0sbz10aGlzLiN0KG4pP24uX19zdGFsZVdoaWxlRmV0Y2hpbmc6bjtvIT09dm9pZCAwJiZlLmNhbGwocixvLHRoaXMuI3JbaV0sdGhpcyk7fX1yZm9yRWFjaChlLHI9dGhpcyl7Zm9yKGxldCBpIG9mIHRoaXMuI3YoKSl7bGV0IG49dGhpcy4jZVtpXSxvPXRoaXMuI3Qobik/bi5fX3N0YWxlV2hpbGVGZXRjaGluZzpuO28hPT12b2lkIDAmJmUuY2FsbChyLG8sdGhpcy4jcltpXSx0aGlzKTt9fXB1cmdlU3RhbGUoKXtsZXQgZT0hMTtmb3IobGV0IHIgb2YgdGhpcy4jdih7YWxsb3dTdGFsZTohMH0pKXRoaXMuI2QocikmJih0aGlzLmRlbGV0ZSh0aGlzLiNyW3JdKSxlPSEwKTtyZXR1cm4gZX1kdW1wKCl7bGV0IGU9W107Zm9yKGxldCByIG9mIHRoaXMuI20oe2FsbG93U3RhbGU6ITB9KSl7bGV0IGk9dGhpcy4jcltyXSxuPXRoaXMuI2Vbcl0sbz10aGlzLiN0KG4pP24uX19zdGFsZVdoaWxlRmV0Y2hpbmc6bjtpZihvPT09dm9pZCAwfHxpPT09dm9pZCAwKWNvbnRpbnVlO2xldCBzPXt2YWx1ZTpvfTtpZih0aGlzLiN3JiZ0aGlzLiNTKXtzLnR0bD10aGlzLiN3W3JdO2xldCBhPVJpLm5vdygpLXRoaXMuI1Nbcl07cy5zdGFydD1NYXRoLmZsb29yKERhdGUubm93KCktYSk7fXRoaXMuI0UmJihzLnNpemU9dGhpcy4jRVtyXSksZS51bnNoaWZ0KFtpLHNdKTt9cmV0dXJuIGV9bG9hZChlKXt0aGlzLmNsZWFyKCk7Zm9yKGxldFtyLGldb2YgZSl7aWYoaS5zdGFydCl7bGV0IG49RGF0ZS5ub3coKS1pLnN0YXJ0O2kuc3RhcnQ9Umkubm93KCktbjt9dGhpcy5zZXQocixpLnZhbHVlLGkpO319c2V0KGUscixpPXt9KXtpZihyPT09dm9pZCAwKXJldHVybiB0aGlzLmRlbGV0ZShlKSx0aGlzO2xldHt0dGw6bj10aGlzLnR0bCxzdGFydDpvLG5vRGlzcG9zZU9uU2V0OnM9dGhpcy5ub0Rpc3Bvc2VPblNldCxzaXplQ2FsY3VsYXRpb246YT10aGlzLnNpemVDYWxjdWxhdGlvbixzdGF0dXM6bH09aSx7bm9VcGRhdGVUVEw6Yz10aGlzLm5vVXBkYXRlVFRMfT1pLGg9dGhpcy4jTChlLHIsaS5zaXplfHwwLGEpO2lmKHRoaXMubWF4RW50cnlTaXplJiZoPnRoaXMubWF4RW50cnlTaXplKXJldHVybiBsJiYobC5zZXQ9XCJtaXNzXCIsbC5tYXhFbnRyeVNpemVFeGNlZWRlZD0hMCksdGhpcy5kZWxldGUoZSksdGhpcztsZXQgZD10aGlzLiNpPT09MD92b2lkIDA6dGhpcy4jbi5nZXQoZSk7aWYoZD09PXZvaWQgMClkPXRoaXMuI2k9PT0wP3RoaXMuI3M6dGhpcy4jYi5sZW5ndGghPT0wP3RoaXMuI2IucG9wKCk6dGhpcy4jaT09PXRoaXMuI2w/dGhpcy4jayghMSk6dGhpcy4jaSx0aGlzLiNyW2RdPWUsdGhpcy4jZVtkXT1yLHRoaXMuI24uc2V0KGUsZCksdGhpcy4jdVt0aGlzLiNzXT1kLHRoaXMuI2hbZF09dGhpcy4jcyx0aGlzLiNzPWQsdGhpcy4jaSsrLHRoaXMuI1AoZCxoLGwpLGwmJihsLnNldD1cImFkZFwiKSxjPSExO2Vsc2Uge3RoaXMuI0MoZCk7bGV0IGc9dGhpcy4jZVtkXTtpZihyIT09Zyl7aWYodGhpcy4jSSYmdGhpcy4jdChnKSl7Zy5fX2Fib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IoXCJyZXBsYWNlZFwiKSk7bGV0e19fc3RhbGVXaGlsZUZldGNoaW5nOnl9PWc7eSE9PXZvaWQgMCYmIXMmJih0aGlzLiNfJiZ0aGlzLiNwPy4oeSxlLFwic2V0XCIpLHRoaXMuI2YmJnRoaXMuI28/LnB1c2goW3ksZSxcInNldFwiXSkpO31lbHNlIHN8fCh0aGlzLiNfJiZ0aGlzLiNwPy4oZyxlLFwic2V0XCIpLHRoaXMuI2YmJnRoaXMuI28/LnB1c2goW2csZSxcInNldFwiXSkpO2lmKHRoaXMuI1IoZCksdGhpcy4jUChkLGgsbCksdGhpcy4jZVtkXT1yLGwpe2wuc2V0PVwicmVwbGFjZVwiO2xldCB5PWcmJnRoaXMuI3QoZyk/Zy5fX3N0YWxlV2hpbGVGZXRjaGluZzpnO3khPT12b2lkIDAmJihsLm9sZFZhbHVlPXkpO319ZWxzZSBsJiYobC5zZXQ9XCJ1cGRhdGVcIik7fWlmKG4hPT0wJiYhdGhpcy4jdyYmdGhpcy4jeCgpLHRoaXMuI3cmJihjfHx0aGlzLiNNKGQsbixvKSxsJiZ0aGlzLiNBKGwsZCkpLCFzJiZ0aGlzLiNmJiZ0aGlzLiNvKXtsZXQgZz10aGlzLiNvLHk7Zm9yKDt5PWc/LnNoaWZ0KCk7KXRoaXMuI2c/LiguLi55KTt9cmV0dXJuIHRoaXN9cG9wKCl7dHJ5e2Zvcig7dGhpcy4jaTspe2xldCBlPXRoaXMuI2VbdGhpcy4jYV07aWYodGhpcy4jayghMCksdGhpcy4jdChlKSl7aWYoZS5fX3N0YWxlV2hpbGVGZXRjaGluZylyZXR1cm4gZS5fX3N0YWxlV2hpbGVGZXRjaGluZ31lbHNlIGlmKGUhPT12b2lkIDApcmV0dXJuIGV9fWZpbmFsbHl7aWYodGhpcy4jZiYmdGhpcy4jbyl7bGV0IGU9dGhpcy4jbyxyO2Zvcig7cj1lPy5zaGlmdCgpOyl0aGlzLiNnPy4oLi4ucik7fX19I2soZSl7bGV0IHI9dGhpcy4jYSxpPXRoaXMuI3Jbcl0sbj10aGlzLiNlW3JdO3JldHVybiB0aGlzLiNJJiZ0aGlzLiN0KG4pP24uX19hYm9ydENvbnRyb2xsZXIuYWJvcnQobmV3IEVycm9yKFwiZXZpY3RlZFwiKSk6KHRoaXMuI198fHRoaXMuI2YpJiYodGhpcy4jXyYmdGhpcy4jcD8uKG4saSxcImV2aWN0XCIpLHRoaXMuI2YmJnRoaXMuI28/LnB1c2goW24saSxcImV2aWN0XCJdKSksdGhpcy4jUihyKSxlJiYodGhpcy4jcltyXT12b2lkIDAsdGhpcy4jZVtyXT12b2lkIDAsdGhpcy4jYi5wdXNoKHIpKSx0aGlzLiNpPT09MT8odGhpcy4jYT10aGlzLiNzPTAsdGhpcy4jYi5sZW5ndGg9MCk6dGhpcy4jYT10aGlzLiN1W3JdLHRoaXMuI24uZGVsZXRlKGkpLHRoaXMuI2ktLSxyfWhhcyhlLHI9e30pe2xldHt1cGRhdGVBZ2VPbkhhczppPXRoaXMudXBkYXRlQWdlT25IYXMsc3RhdHVzOm59PXIsbz10aGlzLiNuLmdldChlKTtpZihvIT09dm9pZCAwKXtsZXQgcz10aGlzLiNlW29dO2lmKHRoaXMuI3QocykmJnMuX19zdGFsZVdoaWxlRmV0Y2hpbmc9PT12b2lkIDApcmV0dXJuICExO2lmKHRoaXMuI2QobykpbiYmKG4uaGFzPVwic3RhbGVcIix0aGlzLiNBKG4sbykpO2Vsc2UgcmV0dXJuIGkmJnRoaXMuI1QobyksbiYmKG4uaGFzPVwiaGl0XCIsdGhpcy4jQShuLG8pKSwhMH1lbHNlIG4mJihuLmhhcz1cIm1pc3NcIik7cmV0dXJuICExfXBlZWsoZSxyPXt9KXtsZXR7YWxsb3dTdGFsZTppPXRoaXMuYWxsb3dTdGFsZX09cixuPXRoaXMuI24uZ2V0KGUpO2lmKG4hPT12b2lkIDAmJihpfHwhdGhpcy4jZChuKSkpe2xldCBvPXRoaXMuI2Vbbl07cmV0dXJuIHRoaXMuI3Qobyk/by5fX3N0YWxlV2hpbGVGZXRjaGluZzpvfX0jTyhlLHIsaSxuKXtsZXQgbz1yPT09dm9pZCAwP3ZvaWQgMDp0aGlzLiNlW3JdO2lmKHRoaXMuI3QobykpcmV0dXJuIG87bGV0IHM9bmV3IHhuLHtzaWduYWw6YX09aTthPy5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwoKT0+cy5hYm9ydChhLnJlYXNvbikse3NpZ25hbDpzLnNpZ25hbH0pO2xldCBsPXtzaWduYWw6cy5zaWduYWwsb3B0aW9uczppLGNvbnRleHQ6bn0sYz0oUyxFPSExKT0+e2xldHthYm9ydGVkOkl9PXMuc2lnbmFsLEM9aS5pZ25vcmVGZXRjaEFib3J0JiZTIT09dm9pZCAwO2lmKGkuc3RhdHVzJiYoSSYmIUU/KGkuc3RhdHVzLmZldGNoQWJvcnRlZD0hMCxpLnN0YXR1cy5mZXRjaEVycm9yPXMuc2lnbmFsLnJlYXNvbixDJiYoaS5zdGF0dXMuZmV0Y2hBYm9ydElnbm9yZWQ9ITApKTppLnN0YXR1cy5mZXRjaFJlc29sdmVkPSEwKSxJJiYhQyYmIUUpcmV0dXJuIGQocy5zaWduYWwucmVhc29uKTtsZXQgUj15O3JldHVybiB0aGlzLiNlW3JdPT09eSYmKFM9PT12b2lkIDA/Ui5fX3N0YWxlV2hpbGVGZXRjaGluZz90aGlzLiNlW3JdPVIuX19zdGFsZVdoaWxlRmV0Y2hpbmc6dGhpcy5kZWxldGUoZSk6KGkuc3RhdHVzJiYoaS5zdGF0dXMuZmV0Y2hVcGRhdGVkPSEwKSx0aGlzLnNldChlLFMsbC5vcHRpb25zKSkpLFN9LGg9Uz0+KGkuc3RhdHVzJiYoaS5zdGF0dXMuZmV0Y2hSZWplY3RlZD0hMCxpLnN0YXR1cy5mZXRjaEVycm9yPVMpLGQoUykpLGQ9Uz0+e2xldHthYm9ydGVkOkV9PXMuc2lnbmFsLEk9RSYmaS5hbGxvd1N0YWxlT25GZXRjaEFib3J0LEM9SXx8aS5hbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbixSPUN8fGkubm9EZWxldGVPbkZldGNoUmVqZWN0aW9uLFU9eTtpZih0aGlzLiNlW3JdPT09eSYmKCFSfHxVLl9fc3RhbGVXaGlsZUZldGNoaW5nPT09dm9pZCAwP3RoaXMuZGVsZXRlKGUpOkl8fCh0aGlzLiNlW3JdPVUuX19zdGFsZVdoaWxlRmV0Y2hpbmcpKSxDKXJldHVybiBpLnN0YXR1cyYmVS5fX3N0YWxlV2hpbGVGZXRjaGluZyE9PXZvaWQgMCYmKGkuc3RhdHVzLnJldHVybmVkU3RhbGU9ITApLFUuX19zdGFsZVdoaWxlRmV0Y2hpbmc7aWYoVS5fX3JldHVybmVkPT09VSl0aHJvdyBTfSxnPShTLEUpPT57bGV0IEk9dGhpcy4jQj8uKGUsbyxsKTtJJiZJIGluc3RhbmNlb2YgUHJvbWlzZSYmSS50aGVuKEM9PlMoQz09PXZvaWQgMD92b2lkIDA6QyksRSkscy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsKCk9PnsoIWkuaWdub3JlRmV0Y2hBYm9ydHx8aS5hbGxvd1N0YWxlT25GZXRjaEFib3J0KSYmKFModm9pZCAwKSxpLmFsbG93U3RhbGVPbkZldGNoQWJvcnQmJihTPUM9PmMoQywhMCkpKTt9KTt9O2kuc3RhdHVzJiYoaS5zdGF0dXMuZmV0Y2hEaXNwYXRjaGVkPSEwKTtsZXQgeT1uZXcgUHJvbWlzZShnKS50aGVuKGMsaCksdz1PYmplY3QuYXNzaWduKHkse19fYWJvcnRDb250cm9sbGVyOnMsX19zdGFsZVdoaWxlRmV0Y2hpbmc6byxfX3JldHVybmVkOnZvaWQgMH0pO3JldHVybiByPT09dm9pZCAwPyh0aGlzLnNldChlLHcsey4uLmwub3B0aW9ucyxzdGF0dXM6dm9pZCAwfSkscj10aGlzLiNuLmdldChlKSk6dGhpcy4jZVtyXT13LHd9I3QoZSl7aWYoIXRoaXMuI0kpcmV0dXJuICExO2xldCByPWU7cmV0dXJuICEhciYmciBpbnN0YW5jZW9mIFByb21pc2UmJnIuaGFzT3duUHJvcGVydHkoXCJfX3N0YWxlV2hpbGVGZXRjaGluZ1wiKSYmci5fX2Fib3J0Q29udHJvbGxlciBpbnN0YW5jZW9mIHhufWFzeW5jIGZldGNoKGUscj17fSl7bGV0e2FsbG93U3RhbGU6aT10aGlzLmFsbG93U3RhbGUsdXBkYXRlQWdlT25HZXQ6bj10aGlzLnVwZGF0ZUFnZU9uR2V0LG5vRGVsZXRlT25TdGFsZUdldDpvPXRoaXMubm9EZWxldGVPblN0YWxlR2V0LHR0bDpzPXRoaXMudHRsLG5vRGlzcG9zZU9uU2V0OmE9dGhpcy5ub0Rpc3Bvc2VPblNldCxzaXplOmw9MCxzaXplQ2FsY3VsYXRpb246Yz10aGlzLnNpemVDYWxjdWxhdGlvbixub1VwZGF0ZVRUTDpoPXRoaXMubm9VcGRhdGVUVEwsbm9EZWxldGVPbkZldGNoUmVqZWN0aW9uOmQ9dGhpcy5ub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb24sYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb246Zz10aGlzLmFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uLGlnbm9yZUZldGNoQWJvcnQ6eT10aGlzLmlnbm9yZUZldGNoQWJvcnQsYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydDp3PXRoaXMuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCxjb250ZXh0OlMsZm9yY2VSZWZyZXNoOkU9ITEsc3RhdHVzOkksc2lnbmFsOkN9PXI7aWYoIXRoaXMuI0kpcmV0dXJuIEkmJihJLmZldGNoPVwiZ2V0XCIpLHRoaXMuZ2V0KGUse2FsbG93U3RhbGU6aSx1cGRhdGVBZ2VPbkdldDpuLG5vRGVsZXRlT25TdGFsZUdldDpvLHN0YXR1czpJfSk7bGV0IFI9e2FsbG93U3RhbGU6aSx1cGRhdGVBZ2VPbkdldDpuLG5vRGVsZXRlT25TdGFsZUdldDpvLHR0bDpzLG5vRGlzcG9zZU9uU2V0OmEsc2l6ZTpsLHNpemVDYWxjdWxhdGlvbjpjLG5vVXBkYXRlVFRMOmgsbm9EZWxldGVPbkZldGNoUmVqZWN0aW9uOmQsYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb246ZyxhbGxvd1N0YWxlT25GZXRjaEFib3J0OncsaWdub3JlRmV0Y2hBYm9ydDp5LHN0YXR1czpJLHNpZ25hbDpDfSxVPXRoaXMuI24uZ2V0KGUpO2lmKFU9PT12b2lkIDApe0kmJihJLmZldGNoPVwibWlzc1wiKTtsZXQgTj10aGlzLiNPKGUsVSxSLFMpO3JldHVybiBOLl9fcmV0dXJuZWQ9Tn1lbHNlIHtsZXQgTj10aGlzLiNlW1VdO2lmKHRoaXMuI3QoTikpe2xldCBwZT1pJiZOLl9fc3RhbGVXaGlsZUZldGNoaW5nIT09dm9pZCAwO3JldHVybiBJJiYoSS5mZXRjaD1cImluZmxpZ2h0XCIscGUmJihJLnJldHVybmVkU3RhbGU9ITApKSxwZT9OLl9fc3RhbGVXaGlsZUZldGNoaW5nOk4uX19yZXR1cm5lZD1OfWxldCBXPXRoaXMuI2QoVSk7aWYoIUUmJiFXKXJldHVybiBJJiYoSS5mZXRjaD1cImhpdFwiKSx0aGlzLiNDKFUpLG4mJnRoaXMuI1QoVSksSSYmdGhpcy4jQShJLFUpLE47bGV0IEs9dGhpcy4jTyhlLFUsUixTKSxRPUsuX19zdGFsZVdoaWxlRmV0Y2hpbmchPT12b2lkIDAmJmk7cmV0dXJuIEkmJihJLmZldGNoPVc/XCJzdGFsZVwiOlwicmVmcmVzaFwiLFEmJlcmJihJLnJldHVybmVkU3RhbGU9ITApKSxRP0suX19zdGFsZVdoaWxlRmV0Y2hpbmc6Sy5fX3JldHVybmVkPUt9fWdldChlLHI9e30pe2xldHthbGxvd1N0YWxlOmk9dGhpcy5hbGxvd1N0YWxlLHVwZGF0ZUFnZU9uR2V0Om49dGhpcy51cGRhdGVBZ2VPbkdldCxub0RlbGV0ZU9uU3RhbGVHZXQ6bz10aGlzLm5vRGVsZXRlT25TdGFsZUdldCxzdGF0dXM6c309cixhPXRoaXMuI24uZ2V0KGUpO2lmKGEhPT12b2lkIDApe2xldCBsPXRoaXMuI2VbYV0sYz10aGlzLiN0KGwpO3JldHVybiBzJiZ0aGlzLiNBKHMsYSksdGhpcy4jZChhKT8ocyYmKHMuZ2V0PVwic3RhbGVcIiksYz8ocyYmaSYmbC5fX3N0YWxlV2hpbGVGZXRjaGluZyE9PXZvaWQgMCYmKHMucmV0dXJuZWRTdGFsZT0hMCksaT9sLl9fc3RhbGVXaGlsZUZldGNoaW5nOnZvaWQgMCk6KG98fHRoaXMuZGVsZXRlKGUpLHMmJmkmJihzLnJldHVybmVkU3RhbGU9ITApLGk/bDp2b2lkIDApKToocyYmKHMuZ2V0PVwiaGl0XCIpLGM/bC5fX3N0YWxlV2hpbGVGZXRjaGluZzoodGhpcy4jQyhhKSxuJiZ0aGlzLiNUKGEpLGwpKX1lbHNlIHMmJihzLmdldD1cIm1pc3NcIik7fSNOKGUscil7dGhpcy4jaFtyXT1lLHRoaXMuI3VbZV09cjt9I0MoZSl7ZSE9PXRoaXMuI3MmJihlPT09dGhpcy4jYT90aGlzLiNhPXRoaXMuI3VbZV06dGhpcy4jTih0aGlzLiNoW2VdLHRoaXMuI3VbZV0pLHRoaXMuI04odGhpcy4jcyxlKSx0aGlzLiNzPWUpO31kZWxldGUoZSl7bGV0IHI9ITE7aWYodGhpcy4jaSE9PTApe2xldCBpPXRoaXMuI24uZ2V0KGUpO2lmKGkhPT12b2lkIDApaWYocj0hMCx0aGlzLiNpPT09MSl0aGlzLmNsZWFyKCk7ZWxzZSB7dGhpcy4jUihpKTtsZXQgbj10aGlzLiNlW2ldO3RoaXMuI3Qobik/bi5fX2Fib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IoXCJkZWxldGVkXCIpKToodGhpcy4jX3x8dGhpcy4jZikmJih0aGlzLiNfJiZ0aGlzLiNwPy4obixlLFwiZGVsZXRlXCIpLHRoaXMuI2YmJnRoaXMuI28/LnB1c2goW24sZSxcImRlbGV0ZVwiXSkpLHRoaXMuI24uZGVsZXRlKGUpLHRoaXMuI3JbaV09dm9pZCAwLHRoaXMuI2VbaV09dm9pZCAwLGk9PT10aGlzLiNzP3RoaXMuI3M9dGhpcy4jaFtpXTppPT09dGhpcy4jYT90aGlzLiNhPXRoaXMuI3VbaV06KHRoaXMuI3VbdGhpcy4jaFtpXV09dGhpcy4jdVtpXSx0aGlzLiNoW3RoaXMuI3VbaV1dPXRoaXMuI2hbaV0pLHRoaXMuI2ktLSx0aGlzLiNiLnB1c2goaSk7fX1pZih0aGlzLiNmJiZ0aGlzLiNvPy5sZW5ndGgpe2xldCBpPXRoaXMuI28sbjtmb3IoO249aT8uc2hpZnQoKTspdGhpcy4jZz8uKC4uLm4pO31yZXR1cm4gcn1jbGVhcigpe2ZvcihsZXQgZSBvZiB0aGlzLiN2KHthbGxvd1N0YWxlOiEwfSkpe2xldCByPXRoaXMuI2VbZV07aWYodGhpcy4jdChyKSlyLl9fYWJvcnRDb250cm9sbGVyLmFib3J0KG5ldyBFcnJvcihcImRlbGV0ZWRcIikpO2Vsc2Uge2xldCBpPXRoaXMuI3JbZV07dGhpcy4jXyYmdGhpcy4jcD8uKHIsaSxcImRlbGV0ZVwiKSx0aGlzLiNmJiZ0aGlzLiNvPy5wdXNoKFtyLGksXCJkZWxldGVcIl0pO319aWYodGhpcy4jbi5jbGVhcigpLHRoaXMuI2UuZmlsbCh2b2lkIDApLHRoaXMuI3IuZmlsbCh2b2lkIDApLHRoaXMuI3cmJnRoaXMuI1MmJih0aGlzLiN3LmZpbGwoMCksdGhpcy4jUy5maWxsKDApKSx0aGlzLiNFJiZ0aGlzLiNFLmZpbGwoMCksdGhpcy4jYT0wLHRoaXMuI3M9MCx0aGlzLiNiLmxlbmd0aD0wLHRoaXMuI3k9MCx0aGlzLiNpPTAsdGhpcy4jZiYmdGhpcy4jbyl7bGV0IGU9dGhpcy4jbyxyO2Zvcig7cj1lPy5zaGlmdCgpOyl0aGlzLiNnPy4oLi4ucik7fX19O01uLkxSVUNhY2hlPWxhO30pO3ZhciBsdD1NKFZ0PT57XygpO3YoKTttKCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFZ0LFwidFwiLHt2YWx1ZTohMH0pO1Z0LkNvbnRhaW5lckl0ZXJhdG9yPVZ0LkNvbnRhaW5lcj1WdC5CYXNlPXZvaWQgMDt2YXIgdWE9Y2xhc3N7Y29uc3RydWN0b3IoZT0wKXt0aGlzLml0ZXJhdG9yVHlwZT1lO31lcXVhbHMoZSl7cmV0dXJuIHRoaXMubz09PWUub319O1Z0LkNvbnRhaW5lckl0ZXJhdG9yPXVhO3ZhciBMbj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaT0wO31nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuaX1zaXplKCl7cmV0dXJuIHRoaXMuaX1lbXB0eSgpe3JldHVybiB0aGlzLmk9PT0wfX07VnQuQmFzZT1Mbjt2YXIgZmE9Y2xhc3MgZXh0ZW5kcyBMbnt9O1Z0LkNvbnRhaW5lcj1mYTt9KTt2YXIgdHA9TShVbj0+e18oKTt2KCk7bSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShVbixcInRcIix7dmFsdWU6ITB9KTtVbi5kZWZhdWx0PXZvaWQgMDt2YXIgbTE9bHQoKSxjYT1jbGFzcyBleHRlbmRzIG0xLkJhc2V7Y29uc3RydWN0b3IoZT1bXSl7c3VwZXIoKSx0aGlzLlM9W107bGV0IHI9dGhpcztlLmZvckVhY2goZnVuY3Rpb24oaSl7ci5wdXNoKGkpO30pO31jbGVhcigpe3RoaXMuaT0wLHRoaXMuUz1bXTt9cHVzaChlKXtyZXR1cm4gdGhpcy5TLnB1c2goZSksdGhpcy5pKz0xLHRoaXMuaX1wb3AoKXtpZih0aGlzLmkhPT0wKXJldHVybiB0aGlzLmktPTEsdGhpcy5TLnBvcCgpfXRvcCgpe3JldHVybiB0aGlzLlNbdGhpcy5pLTFdfX0sdjE9Y2E7VW4uZGVmYXVsdD12MTt9KTt2YXIgcnA9TShObj0+e18oKTt2KCk7bSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShObixcInRcIix7dmFsdWU6ITB9KTtObi5kZWZhdWx0PXZvaWQgMDt2YXIgRTE9bHQoKSxoYT1jbGFzcyBleHRlbmRzIEUxLkJhc2V7Y29uc3RydWN0b3IoZT1bXSl7c3VwZXIoKSx0aGlzLmo9MCx0aGlzLnE9W107bGV0IHI9dGhpcztlLmZvckVhY2goZnVuY3Rpb24oaSl7ci5wdXNoKGkpO30pO31jbGVhcigpe3RoaXMucT1bXSx0aGlzLmk9dGhpcy5qPTA7fXB1c2goZSl7bGV0IHI9dGhpcy5xLmxlbmd0aDtpZih0aGlzLmovcj4uNSYmdGhpcy5qK3RoaXMuaT49ciYmcj40MDk2KXtsZXQgaT10aGlzLmk7Zm9yKGxldCBuPTA7bjxpOysrbil0aGlzLnFbbl09dGhpcy5xW3RoaXMuaituXTt0aGlzLmo9MCx0aGlzLnFbdGhpcy5pXT1lO31lbHNlIHRoaXMucVt0aGlzLmordGhpcy5pXT1lO3JldHVybiArK3RoaXMuaX1wb3AoKXtpZih0aGlzLmk9PT0wKXJldHVybjtsZXQgZT10aGlzLnFbdGhpcy5qKytdO3JldHVybiB0aGlzLmktPTEsZX1mcm9udCgpe2lmKHRoaXMuaSE9PTApcmV0dXJuIHRoaXMucVt0aGlzLmpdfX0sUzE9aGE7Tm4uZGVmYXVsdD1TMTt9KTt2YXIgaXA9TShxbj0+e18oKTt2KCk7bSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxbixcInRcIix7dmFsdWU6ITB9KTtxbi5kZWZhdWx0PXZvaWQgMDt2YXIgQTE9bHQoKSxkYT1jbGFzcyBleHRlbmRzIEExLkJhc2V7Y29uc3RydWN0b3IoZT1bXSxyPWZ1bmN0aW9uKG4sbyl7cmV0dXJuIG4+bz8tMTpuPG8/MTowfSxpPSEwKXtpZihzdXBlcigpLHRoaXMudj1yLEFycmF5LmlzQXJyYXkoZSkpdGhpcy5DPWk/Wy4uLmVdOmU7ZWxzZSB7dGhpcy5DPVtdO2xldCBvPXRoaXM7ZS5mb3JFYWNoKGZ1bmN0aW9uKHMpe28uQy5wdXNoKHMpO30pO310aGlzLmk9dGhpcy5DLmxlbmd0aDtsZXQgbj10aGlzLmk+PjE7Zm9yKGxldCBvPXRoaXMuaS0xPj4xO28+PTA7LS1vKXRoaXMuayhvLG4pO31tKGUpe2xldCByPXRoaXMuQ1tlXTtmb3IoO2U+MDspe2xldCBpPWUtMT4+MSxuPXRoaXMuQ1tpXTtpZih0aGlzLnYobixyKTw9MClicmVhazt0aGlzLkNbZV09bixlPWk7fXRoaXMuQ1tlXT1yO31rKGUscil7bGV0IGk9dGhpcy5DW2VdO2Zvcig7ZTxyOyl7bGV0IG49ZTw8MXwxLG89bisxLHM9dGhpcy5DW25dO2lmKG88dGhpcy5pJiZ0aGlzLnYocyx0aGlzLkNbb10pPjAmJihuPW8scz10aGlzLkNbb10pLHRoaXMudihzLGkpPj0wKWJyZWFrO3RoaXMuQ1tlXT1zLGU9bjt9dGhpcy5DW2VdPWk7fWNsZWFyKCl7dGhpcy5pPTAsdGhpcy5DLmxlbmd0aD0wO31wdXNoKGUpe3RoaXMuQy5wdXNoKGUpLHRoaXMubSh0aGlzLmkpLHRoaXMuaSs9MTt9cG9wKCl7aWYodGhpcy5pPT09MClyZXR1cm47bGV0IGU9dGhpcy5DWzBdLHI9dGhpcy5DLnBvcCgpO3JldHVybiB0aGlzLmktPTEsdGhpcy5pJiYodGhpcy5DWzBdPXIsdGhpcy5rKDAsdGhpcy5pPj4xKSksZX10b3AoKXtyZXR1cm4gdGhpcy5DWzBdfWZpbmQoZSl7cmV0dXJuIHRoaXMuQy5pbmRleE9mKGUpPj0wfXJlbW92ZShlKXtsZXQgcj10aGlzLkMuaW5kZXhPZihlKTtyZXR1cm4gcjwwPyExOihyPT09MD90aGlzLnBvcCgpOnI9PT10aGlzLmktMT8odGhpcy5DLnBvcCgpLHRoaXMuaS09MSk6KHRoaXMuQy5zcGxpY2UociwxLHRoaXMuQy5wb3AoKSksdGhpcy5pLT0xLHRoaXMubShyKSx0aGlzLmsocix0aGlzLmk+PjEpKSwhMCl9dXBkYXRlSXRlbShlKXtsZXQgcj10aGlzLkMuaW5kZXhPZihlKTtyZXR1cm4gcjwwPyExOih0aGlzLm0ociksdGhpcy5rKHIsdGhpcy5pPj4xKSwhMCl9dG9BcnJheSgpe3JldHVybiBbLi4udGhpcy5DXX19LEkxPWRhO3FuLmRlZmF1bHQ9STE7fSk7dmFyIGpuPU0oRG49PntfKCk7digpO20oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRG4sXCJ0XCIse3ZhbHVlOiEwfSk7RG4uZGVmYXVsdD12b2lkIDA7dmFyIFQxPWx0KCkscGE9Y2xhc3MgZXh0ZW5kcyBUMS5Db250YWluZXJ7fSxSMT1wYTtEbi5kZWZhdWx0PVIxO30pO3ZhciB1dD1NKGdhPT57XygpO3YoKTttKCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGdhLFwidFwiLHt2YWx1ZTohMH0pO2dhLnRocm93SXRlcmF0b3JBY2Nlc3NFcnJvcj1DMTtmdW5jdGlvbiBDMSgpe3Rocm93IG5ldyBSYW5nZUVycm9yKFwiSXRlcmF0b3IgYWNjZXNzIGRlbmllZCFcIil9fSk7dmFyIGJhPU0oV249PntfKCk7digpO20oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoV24sXCJ0XCIse3ZhbHVlOiEwfSk7V24uUmFuZG9tSXRlcmF0b3I9dm9pZCAwO3ZhciBCMT1sdCgpLEZuPXV0KCkseWE9Y2xhc3MgZXh0ZW5kcyBCMS5Db250YWluZXJJdGVyYXRvcntjb25zdHJ1Y3RvcihlLHIpe3N1cGVyKHIpLHRoaXMubz1lLHRoaXMuaXRlcmF0b3JUeXBlPT09MD8odGhpcy5wcmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vPT09MCYmKDAsIEZuLnRocm93SXRlcmF0b3JBY2Nlc3NFcnJvcikoKSx0aGlzLm8tPTEsdGhpc30sdGhpcy5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubz09PXRoaXMuY29udGFpbmVyLnNpemUoKSYmKDAsIEZuLnRocm93SXRlcmF0b3JBY2Nlc3NFcnJvcikoKSx0aGlzLm8rPTEsdGhpc30pOih0aGlzLnByZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm89PT10aGlzLmNvbnRhaW5lci5zaXplKCktMSYmKDAsIEZuLnRocm93SXRlcmF0b3JBY2Nlc3NFcnJvcikoKSx0aGlzLm8rPTEsdGhpc30sdGhpcy5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubz09PS0xJiYoMCwgRm4udGhyb3dJdGVyYXRvckFjY2Vzc0Vycm9yKSgpLHRoaXMuby09MSx0aGlzfSk7fWdldCBwb2ludGVyKCl7cmV0dXJuIHRoaXMuY29udGFpbmVyLmdldEVsZW1lbnRCeVBvcyh0aGlzLm8pfXNldCBwb2ludGVyKGUpe3RoaXMuY29udGFpbmVyLnNldEVsZW1lbnRCeVBvcyh0aGlzLm8sZSk7fX07V24uUmFuZG9tSXRlcmF0b3I9eWE7fSk7dmFyIG5wPU0oJG49PntfKCk7digpO20oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJG4sXCJ0XCIse3ZhbHVlOiEwfSk7JG4uZGVmYXVsdD12b2lkIDA7dmFyIFAxPU8xKGpuKCkpLGsxPWJhKCk7ZnVuY3Rpb24gTzEodCl7cmV0dXJuIHQmJnQudD90OntkZWZhdWx0OnR9fXZhciBtcj1jbGFzcyB0IGV4dGVuZHMgazEuUmFuZG9tSXRlcmF0b3J7Y29uc3RydWN0b3IoZSxyLGkpe3N1cGVyKGUsaSksdGhpcy5jb250YWluZXI9cjt9Y29weSgpe3JldHVybiBuZXcgdCh0aGlzLm8sdGhpcy5jb250YWluZXIsdGhpcy5pdGVyYXRvclR5cGUpfX0sd2E9Y2xhc3MgZXh0ZW5kcyBQMS5kZWZhdWx0e2NvbnN0cnVjdG9yKGU9W10scj0hMCl7aWYoc3VwZXIoKSxBcnJheS5pc0FycmF5KGUpKXRoaXMuSj1yP1suLi5lXTplLHRoaXMuaT1lLmxlbmd0aDtlbHNlIHt0aGlzLko9W107bGV0IGk9dGhpcztlLmZvckVhY2goZnVuY3Rpb24obil7aS5wdXNoQmFjayhuKTt9KTt9fWNsZWFyKCl7dGhpcy5pPTAsdGhpcy5KLmxlbmd0aD0wO31iZWdpbigpe3JldHVybiBuZXcgbXIoMCx0aGlzKX1lbmQoKXtyZXR1cm4gbmV3IG1yKHRoaXMuaSx0aGlzKX1yQmVnaW4oKXtyZXR1cm4gbmV3IG1yKHRoaXMuaS0xLHRoaXMsMSl9ckVuZCgpe3JldHVybiBuZXcgbXIoLTEsdGhpcywxKX1mcm9udCgpe3JldHVybiB0aGlzLkpbMF19YmFjaygpe3JldHVybiB0aGlzLkpbdGhpcy5pLTFdfWdldEVsZW1lbnRCeVBvcyhlKXtpZihlPDB8fGU+dGhpcy5pLTEpdGhyb3cgbmV3IFJhbmdlRXJyb3I7cmV0dXJuIHRoaXMuSltlXX1lcmFzZUVsZW1lbnRCeVBvcyhlKXtpZihlPDB8fGU+dGhpcy5pLTEpdGhyb3cgbmV3IFJhbmdlRXJyb3I7cmV0dXJuIHRoaXMuSi5zcGxpY2UoZSwxKSx0aGlzLmktPTEsdGhpcy5pfWVyYXNlRWxlbWVudEJ5VmFsdWUoZSl7bGV0IHI9MDtmb3IobGV0IGk9MDtpPHRoaXMuaTsrK2kpdGhpcy5KW2ldIT09ZSYmKHRoaXMuSltyKytdPXRoaXMuSltpXSk7cmV0dXJuIHRoaXMuaT10aGlzLkoubGVuZ3RoPXIsdGhpcy5pfWVyYXNlRWxlbWVudEJ5SXRlcmF0b3IoZSl7bGV0IHI9ZS5vO3JldHVybiBlPWUubmV4dCgpLHRoaXMuZXJhc2VFbGVtZW50QnlQb3MociksZX1wdXNoQmFjayhlKXtyZXR1cm4gdGhpcy5KLnB1c2goZSksdGhpcy5pKz0xLHRoaXMuaX1wb3BCYWNrKCl7aWYodGhpcy5pIT09MClyZXR1cm4gdGhpcy5pLT0xLHRoaXMuSi5wb3AoKX1zZXRFbGVtZW50QnlQb3MoZSxyKXtpZihlPDB8fGU+dGhpcy5pLTEpdGhyb3cgbmV3IFJhbmdlRXJyb3I7dGhpcy5KW2VdPXI7fWluc2VydChlLHIsaT0xKXtpZihlPDB8fGU+dGhpcy5pKXRocm93IG5ldyBSYW5nZUVycm9yO3JldHVybiB0aGlzLkouc3BsaWNlKGUsMCwuLi5uZXcgQXJyYXkoaSkuZmlsbChyKSksdGhpcy5pKz1pLHRoaXMuaX1maW5kKGUpe2ZvcihsZXQgcj0wO3I8dGhpcy5pOysrcilpZih0aGlzLkpbcl09PT1lKXJldHVybiBuZXcgbXIocix0aGlzKTtyZXR1cm4gdGhpcy5lbmQoKX1yZXZlcnNlKCl7dGhpcy5KLnJldmVyc2UoKTt9dW5pcXVlKCl7bGV0IGU9MTtmb3IobGV0IHI9MTtyPHRoaXMuaTsrK3IpdGhpcy5KW3JdIT09dGhpcy5KW3ItMV0mJih0aGlzLkpbZSsrXT10aGlzLkpbcl0pO3JldHVybiB0aGlzLmk9dGhpcy5KLmxlbmd0aD1lLHRoaXMuaX1zb3J0KGUpe3RoaXMuSi5zb3J0KGUpO31mb3JFYWNoKGUpe2ZvcihsZXQgcj0wO3I8dGhpcy5pOysrcillKHRoaXMuSltyXSxyLHRoaXMpO31bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBmdW5jdGlvbiooKXt5aWVsZCp0aGlzLko7fS5iaW5kKHRoaXMpKCl9fSx4MT13YTskbi5kZWZhdWx0PXgxO30pO3ZhciBzcD1NKEhuPT57XygpO3YoKTttKCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KEhuLFwidFwiLHt2YWx1ZTohMH0pO0huLmRlZmF1bHQ9dm9pZCAwO3ZhciBNMT1VMShqbigpKSxMMT1sdCgpLHZyPXV0KCk7ZnVuY3Rpb24gVTEodCl7cmV0dXJuIHQmJnQudD90OntkZWZhdWx0OnR9fXZhciBFcj1jbGFzcyB0IGV4dGVuZHMgTDEuQ29udGFpbmVySXRlcmF0b3J7Y29uc3RydWN0b3IoZSxyLGksbil7c3VwZXIobiksdGhpcy5vPWUsdGhpcy5oPXIsdGhpcy5jb250YWluZXI9aSx0aGlzLml0ZXJhdG9yVHlwZT09PTA/KHRoaXMucHJlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuby5MPT09dGhpcy5oJiYoMCwgdnIudGhyb3dJdGVyYXRvckFjY2Vzc0Vycm9yKSgpLHRoaXMubz10aGlzLm8uTCx0aGlzfSx0aGlzLm5leHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vPT09dGhpcy5oJiYoMCwgdnIudGhyb3dJdGVyYXRvckFjY2Vzc0Vycm9yKSgpLHRoaXMubz10aGlzLm8uQix0aGlzfSk6KHRoaXMucHJlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuby5CPT09dGhpcy5oJiYoMCwgdnIudGhyb3dJdGVyYXRvckFjY2Vzc0Vycm9yKSgpLHRoaXMubz10aGlzLm8uQix0aGlzfSx0aGlzLm5leHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vPT09dGhpcy5oJiYoMCwgdnIudGhyb3dJdGVyYXRvckFjY2Vzc0Vycm9yKSgpLHRoaXMubz10aGlzLm8uTCx0aGlzfSk7fWdldCBwb2ludGVyKCl7cmV0dXJuIHRoaXMubz09PXRoaXMuaCYmKDAsIHZyLnRocm93SXRlcmF0b3JBY2Nlc3NFcnJvcikoKSx0aGlzLm8ubH1zZXQgcG9pbnRlcihlKXt0aGlzLm89PT10aGlzLmgmJigwLCB2ci50aHJvd0l0ZXJhdG9yQWNjZXNzRXJyb3IpKCksdGhpcy5vLmw9ZTt9Y29weSgpe3JldHVybiBuZXcgdCh0aGlzLm8sdGhpcy5oLHRoaXMuY29udGFpbmVyLHRoaXMuaXRlcmF0b3JUeXBlKX19LF9hPWNsYXNzIGV4dGVuZHMgTTEuZGVmYXVsdHtjb25zdHJ1Y3RvcihlPVtdKXtzdXBlcigpLHRoaXMuaD17fSx0aGlzLnA9dGhpcy5fPXRoaXMuaC5MPXRoaXMuaC5CPXRoaXMuaDtsZXQgcj10aGlzO2UuZm9yRWFjaChmdW5jdGlvbihpKXtyLnB1c2hCYWNrKGkpO30pO31WKGUpe2xldHtMOnIsQjppfT1lO3IuQj1pLGkuTD1yLGU9PT10aGlzLnAmJih0aGlzLnA9aSksZT09PXRoaXMuXyYmKHRoaXMuXz1yKSx0aGlzLmktPTE7fUcoZSxyKXtsZXQgaT1yLkIsbj17bDplLEw6cixCOml9O3IuQj1uLGkuTD1uLHI9PT10aGlzLmgmJih0aGlzLnA9biksaT09PXRoaXMuaCYmKHRoaXMuXz1uKSx0aGlzLmkrPTE7fWNsZWFyKCl7dGhpcy5pPTAsdGhpcy5wPXRoaXMuXz10aGlzLmguTD10aGlzLmguQj10aGlzLmg7fWJlZ2luKCl7cmV0dXJuIG5ldyBFcih0aGlzLnAsdGhpcy5oLHRoaXMpfWVuZCgpe3JldHVybiBuZXcgRXIodGhpcy5oLHRoaXMuaCx0aGlzKX1yQmVnaW4oKXtyZXR1cm4gbmV3IEVyKHRoaXMuXyx0aGlzLmgsdGhpcywxKX1yRW5kKCl7cmV0dXJuIG5ldyBFcih0aGlzLmgsdGhpcy5oLHRoaXMsMSl9ZnJvbnQoKXtyZXR1cm4gdGhpcy5wLmx9YmFjaygpe3JldHVybiB0aGlzLl8ubH1nZXRFbGVtZW50QnlQb3MoZSl7aWYoZTwwfHxlPnRoaXMuaS0xKXRocm93IG5ldyBSYW5nZUVycm9yO2xldCByPXRoaXMucDtmb3IoO2UtLTspcj1yLkI7cmV0dXJuIHIubH1lcmFzZUVsZW1lbnRCeVBvcyhlKXtpZihlPDB8fGU+dGhpcy5pLTEpdGhyb3cgbmV3IFJhbmdlRXJyb3I7bGV0IHI9dGhpcy5wO2Zvcig7ZS0tOylyPXIuQjtyZXR1cm4gdGhpcy5WKHIpLHRoaXMuaX1lcmFzZUVsZW1lbnRCeVZhbHVlKGUpe2xldCByPXRoaXMucDtmb3IoO3IhPT10aGlzLmg7KXIubD09PWUmJnRoaXMuVihyKSxyPXIuQjtyZXR1cm4gdGhpcy5pfWVyYXNlRWxlbWVudEJ5SXRlcmF0b3IoZSl7bGV0IHI9ZS5vO3JldHVybiByPT09dGhpcy5oJiYoMCwgdnIudGhyb3dJdGVyYXRvckFjY2Vzc0Vycm9yKSgpLGU9ZS5uZXh0KCksdGhpcy5WKHIpLGV9cHVzaEJhY2soZSl7cmV0dXJuIHRoaXMuRyhlLHRoaXMuXyksdGhpcy5pfXBvcEJhY2soKXtpZih0aGlzLmk9PT0wKXJldHVybjtsZXQgZT10aGlzLl8ubDtyZXR1cm4gdGhpcy5WKHRoaXMuXyksZX1wdXNoRnJvbnQoZSl7cmV0dXJuIHRoaXMuRyhlLHRoaXMuaCksdGhpcy5pfXBvcEZyb250KCl7aWYodGhpcy5pPT09MClyZXR1cm47bGV0IGU9dGhpcy5wLmw7cmV0dXJuIHRoaXMuVih0aGlzLnApLGV9c2V0RWxlbWVudEJ5UG9zKGUscil7aWYoZTwwfHxlPnRoaXMuaS0xKXRocm93IG5ldyBSYW5nZUVycm9yO2xldCBpPXRoaXMucDtmb3IoO2UtLTspaT1pLkI7aS5sPXI7fWluc2VydChlLHIsaT0xKXtpZihlPDB8fGU+dGhpcy5pKXRocm93IG5ldyBSYW5nZUVycm9yO2lmKGk8PTApcmV0dXJuIHRoaXMuaTtpZihlPT09MClmb3IoO2ktLTspdGhpcy5wdXNoRnJvbnQocik7ZWxzZSBpZihlPT09dGhpcy5pKWZvcig7aS0tOyl0aGlzLnB1c2hCYWNrKHIpO2Vsc2Uge2xldCBuPXRoaXMucDtmb3IobGV0IHM9MTtzPGU7KytzKW49bi5CO2xldCBvPW4uQjtmb3IodGhpcy5pKz1pO2ktLTspbi5CPXtsOnIsTDpufSxuLkIuTD1uLG49bi5CO24uQj1vLG8uTD1uO31yZXR1cm4gdGhpcy5pfWZpbmQoZSl7bGV0IHI9dGhpcy5wO2Zvcig7ciE9PXRoaXMuaDspe2lmKHIubD09PWUpcmV0dXJuIG5ldyBFcihyLHRoaXMuaCx0aGlzKTtyPXIuQjt9cmV0dXJuIHRoaXMuZW5kKCl9cmV2ZXJzZSgpe2lmKHRoaXMuaTw9MSlyZXR1cm47bGV0IGU9dGhpcy5wLHI9dGhpcy5fLGk9MDtmb3IoO2k8PDE8dGhpcy5pOyl7bGV0IG49ZS5sO2UubD1yLmwsci5sPW4sZT1lLkIscj1yLkwsaSs9MTt9fXVuaXF1ZSgpe2lmKHRoaXMuaTw9MSlyZXR1cm4gdGhpcy5pO2xldCBlPXRoaXMucDtmb3IoO2UhPT10aGlzLmg7KXtsZXQgcj1lO2Zvcig7ci5CIT09dGhpcy5oJiZyLmw9PT1yLkIubDspcj1yLkIsdGhpcy5pLT0xO2UuQj1yLkIsZS5CLkw9ZSxlPWUuQjt9cmV0dXJuIHRoaXMuaX1zb3J0KGUpe2lmKHRoaXMuaTw9MSlyZXR1cm47bGV0IHI9W107dGhpcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3IucHVzaChuKTt9KSxyLnNvcnQoZSk7bGV0IGk9dGhpcy5wO3IuZm9yRWFjaChmdW5jdGlvbihuKXtpLmw9bixpPWkuQjt9KTt9bWVyZ2UoZSl7bGV0IHI9dGhpcztpZih0aGlzLmk9PT0wKWUuZm9yRWFjaChmdW5jdGlvbihpKXtyLnB1c2hCYWNrKGkpO30pO2Vsc2Uge2xldCBpPXRoaXMucDtlLmZvckVhY2goZnVuY3Rpb24obil7Zm9yKDtpIT09ci5oJiZpLmw8PW47KWk9aS5CO3IuRyhuLGkuTCk7fSk7fXJldHVybiB0aGlzLml9Zm9yRWFjaChlKXtsZXQgcj10aGlzLnAsaT0wO2Zvcig7ciE9PXRoaXMuaDspZShyLmwsaSsrLHRoaXMpLHI9ci5CO31bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBmdW5jdGlvbiooKXtpZih0aGlzLmk9PT0wKXJldHVybjtsZXQgZT10aGlzLnA7Zm9yKDtlIT09dGhpcy5oOyl5aWVsZCBlLmwsZT1lLkI7fS5iaW5kKHRoaXMpKCl9fSxOMT1fYTtIbi5kZWZhdWx0PU4xO30pO3ZhciBvcD1NKFZuPT57XygpO3YoKTttKCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFZuLFwidFwiLHt2YWx1ZTohMH0pO1ZuLmRlZmF1bHQ9dm9pZCAwO3ZhciBxMT1qMShqbigpKSxEMT1iYSgpO2Z1bmN0aW9uIGoxKHQpe3JldHVybiB0JiZ0LnQ/dDp7ZGVmYXVsdDp0fX12YXIgU3I9Y2xhc3MgdCBleHRlbmRzIEQxLlJhbmRvbUl0ZXJhdG9ye2NvbnN0cnVjdG9yKGUscixpKXtzdXBlcihlLGkpLHRoaXMuY29udGFpbmVyPXI7fWNvcHkoKXtyZXR1cm4gbmV3IHQodGhpcy5vLHRoaXMuY29udGFpbmVyLHRoaXMuaXRlcmF0b3JUeXBlKX19LG1hPWNsYXNzIGV4dGVuZHMgcTEuZGVmYXVsdHtjb25zdHJ1Y3RvcihlPVtdLHI9NDA5Nil7c3VwZXIoKSx0aGlzLmo9MCx0aGlzLkQ9MCx0aGlzLlI9MCx0aGlzLk49MCx0aGlzLlA9MCx0aGlzLkE9W107bGV0IGk9KCgpPT57aWYodHlwZW9mIGUubGVuZ3RoPT1cIm51bWJlclwiKXJldHVybiBlLmxlbmd0aDtpZih0eXBlb2YgZS5zaXplPT1cIm51bWJlclwiKXJldHVybiBlLnNpemU7aWYodHlwZW9mIGUuc2l6ZT09XCJmdW5jdGlvblwiKXJldHVybiBlLnNpemUoKTt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGdldCB0aGUgbGVuZ3RoIG9yIHNpemUgb2YgdGhlIGNvbnRhaW5lclwiKX0pKCk7dGhpcy5GPXIsdGhpcy5QPU1hdGgubWF4KE1hdGguY2VpbChpL3RoaXMuRiksMSk7Zm9yKGxldCBzPTA7czx0aGlzLlA7KytzKXRoaXMuQS5wdXNoKG5ldyBBcnJheSh0aGlzLkYpKTtsZXQgbj1NYXRoLmNlaWwoaS90aGlzLkYpO3RoaXMuaj10aGlzLlI9KHRoaXMuUD4+MSktKG4+PjEpLHRoaXMuRD10aGlzLk49dGhpcy5GLWkldGhpcy5GPj4xO2xldCBvPXRoaXM7ZS5mb3JFYWNoKGZ1bmN0aW9uKHMpe28ucHVzaEJhY2socyk7fSk7fVQoKXtsZXQgZT1bXSxyPU1hdGgubWF4KHRoaXMuUD4+MSwxKTtmb3IobGV0IGk9MDtpPHI7KytpKWVbaV09bmV3IEFycmF5KHRoaXMuRik7Zm9yKGxldCBpPXRoaXMuajtpPHRoaXMuUDsrK2kpZVtlLmxlbmd0aF09dGhpcy5BW2ldO2ZvcihsZXQgaT0wO2k8dGhpcy5SOysraSllW2UubGVuZ3RoXT10aGlzLkFbaV07ZVtlLmxlbmd0aF09Wy4uLnRoaXMuQVt0aGlzLlJdXSx0aGlzLmo9cix0aGlzLlI9ZS5sZW5ndGgtMTtmb3IobGV0IGk9MDtpPHI7KytpKWVbZS5sZW5ndGhdPW5ldyBBcnJheSh0aGlzLkYpO3RoaXMuQT1lLHRoaXMuUD1lLmxlbmd0aDt9TyhlKXtsZXQgcj10aGlzLkQrZSsxLGk9ciV0aGlzLkYsbj1pLTEsbz10aGlzLmorKHItaSkvdGhpcy5GO3JldHVybiBpPT09MCYmKG8tPTEpLG8lPXRoaXMuUCxuPDAmJihuKz10aGlzLkYpLHtjdXJOb2RlQnVja2V0SW5kZXg6byxjdXJOb2RlUG9pbnRlckluZGV4Om59fWNsZWFyKCl7dGhpcy5BPVtuZXcgQXJyYXkodGhpcy5GKV0sdGhpcy5QPTEsdGhpcy5qPXRoaXMuUj10aGlzLmk9MCx0aGlzLkQ9dGhpcy5OPXRoaXMuRj4+MTt9YmVnaW4oKXtyZXR1cm4gbmV3IFNyKDAsdGhpcyl9ZW5kKCl7cmV0dXJuIG5ldyBTcih0aGlzLmksdGhpcyl9ckJlZ2luKCl7cmV0dXJuIG5ldyBTcih0aGlzLmktMSx0aGlzLDEpfXJFbmQoKXtyZXR1cm4gbmV3IFNyKC0xLHRoaXMsMSl9ZnJvbnQoKXtpZih0aGlzLmkhPT0wKXJldHVybiB0aGlzLkFbdGhpcy5qXVt0aGlzLkRdfWJhY2soKXtpZih0aGlzLmkhPT0wKXJldHVybiB0aGlzLkFbdGhpcy5SXVt0aGlzLk5dfXB1c2hCYWNrKGUpe3JldHVybiB0aGlzLmkmJih0aGlzLk48dGhpcy5GLTE/dGhpcy5OKz0xOnRoaXMuUjx0aGlzLlAtMT8odGhpcy5SKz0xLHRoaXMuTj0wKToodGhpcy5SPTAsdGhpcy5OPTApLHRoaXMuUj09PXRoaXMuaiYmdGhpcy5OPT09dGhpcy5EJiZ0aGlzLlQoKSksdGhpcy5pKz0xLHRoaXMuQVt0aGlzLlJdW3RoaXMuTl09ZSx0aGlzLml9cG9wQmFjaygpe2lmKHRoaXMuaT09PTApcmV0dXJuO2xldCBlPXRoaXMuQVt0aGlzLlJdW3RoaXMuTl07cmV0dXJuIHRoaXMuaSE9PTEmJih0aGlzLk4+MD90aGlzLk4tPTE6dGhpcy5SPjA/KHRoaXMuUi09MSx0aGlzLk49dGhpcy5GLTEpOih0aGlzLlI9dGhpcy5QLTEsdGhpcy5OPXRoaXMuRi0xKSksdGhpcy5pLT0xLGV9cHVzaEZyb250KGUpe3JldHVybiB0aGlzLmkmJih0aGlzLkQ+MD90aGlzLkQtPTE6dGhpcy5qPjA/KHRoaXMuai09MSx0aGlzLkQ9dGhpcy5GLTEpOih0aGlzLmo9dGhpcy5QLTEsdGhpcy5EPXRoaXMuRi0xKSx0aGlzLmo9PT10aGlzLlImJnRoaXMuRD09PXRoaXMuTiYmdGhpcy5UKCkpLHRoaXMuaSs9MSx0aGlzLkFbdGhpcy5qXVt0aGlzLkRdPWUsdGhpcy5pfXBvcEZyb250KCl7aWYodGhpcy5pPT09MClyZXR1cm47bGV0IGU9dGhpcy5BW3RoaXMual1bdGhpcy5EXTtyZXR1cm4gdGhpcy5pIT09MSYmKHRoaXMuRDx0aGlzLkYtMT90aGlzLkQrPTE6dGhpcy5qPHRoaXMuUC0xPyh0aGlzLmorPTEsdGhpcy5EPTApOih0aGlzLmo9MCx0aGlzLkQ9MCkpLHRoaXMuaS09MSxlfWdldEVsZW1lbnRCeVBvcyhlKXtpZihlPDB8fGU+dGhpcy5pLTEpdGhyb3cgbmV3IFJhbmdlRXJyb3I7bGV0e2N1ck5vZGVCdWNrZXRJbmRleDpyLGN1ck5vZGVQb2ludGVySW5kZXg6aX09dGhpcy5PKGUpO3JldHVybiB0aGlzLkFbcl1baV19c2V0RWxlbWVudEJ5UG9zKGUscil7aWYoZTwwfHxlPnRoaXMuaS0xKXRocm93IG5ldyBSYW5nZUVycm9yO2xldHtjdXJOb2RlQnVja2V0SW5kZXg6aSxjdXJOb2RlUG9pbnRlckluZGV4Om59PXRoaXMuTyhlKTt0aGlzLkFbaV1bbl09cjt9aW5zZXJ0KGUscixpPTEpe2lmKGU8MHx8ZT50aGlzLmkpdGhyb3cgbmV3IFJhbmdlRXJyb3I7aWYoZT09PTApZm9yKDtpLS07KXRoaXMucHVzaEZyb250KHIpO2Vsc2UgaWYoZT09PXRoaXMuaSlmb3IoO2ktLTspdGhpcy5wdXNoQmFjayhyKTtlbHNlIHtsZXQgbj1bXTtmb3IobGV0IG89ZTtvPHRoaXMuaTsrK28pbi5wdXNoKHRoaXMuZ2V0RWxlbWVudEJ5UG9zKG8pKTt0aGlzLmN1dChlLTEpO2ZvcihsZXQgbz0wO288aTsrK28pdGhpcy5wdXNoQmFjayhyKTtmb3IobGV0IG89MDtvPG4ubGVuZ3RoOysrbyl0aGlzLnB1c2hCYWNrKG5bb10pO31yZXR1cm4gdGhpcy5pfWN1dChlKXtpZihlPDApcmV0dXJuIHRoaXMuY2xlYXIoKSwwO2xldHtjdXJOb2RlQnVja2V0SW5kZXg6cixjdXJOb2RlUG9pbnRlckluZGV4Oml9PXRoaXMuTyhlKTtyZXR1cm4gdGhpcy5SPXIsdGhpcy5OPWksdGhpcy5pPWUrMSx0aGlzLml9ZXJhc2VFbGVtZW50QnlQb3MoZSl7aWYoZTwwfHxlPnRoaXMuaS0xKXRocm93IG5ldyBSYW5nZUVycm9yO2lmKGU9PT0wKXRoaXMucG9wRnJvbnQoKTtlbHNlIGlmKGU9PT10aGlzLmktMSl0aGlzLnBvcEJhY2soKTtlbHNlIHtsZXQgcj1bXTtmb3IobGV0IG49ZSsxO248dGhpcy5pOysrbilyLnB1c2godGhpcy5nZXRFbGVtZW50QnlQb3MobikpO3RoaXMuY3V0KGUpLHRoaXMucG9wQmFjaygpO2xldCBpPXRoaXM7ci5mb3JFYWNoKGZ1bmN0aW9uKG4pe2kucHVzaEJhY2sobik7fSk7fXJldHVybiB0aGlzLml9ZXJhc2VFbGVtZW50QnlWYWx1ZShlKXtpZih0aGlzLmk9PT0wKXJldHVybiAwO2xldCByPVtdO2ZvcihsZXQgbj0wO248dGhpcy5pOysrbil7bGV0IG89dGhpcy5nZXRFbGVtZW50QnlQb3Mobik7byE9PWUmJnIucHVzaChvKTt9bGV0IGk9ci5sZW5ndGg7Zm9yKGxldCBuPTA7bjxpOysrbil0aGlzLnNldEVsZW1lbnRCeVBvcyhuLHJbbl0pO3JldHVybiB0aGlzLmN1dChpLTEpfWVyYXNlRWxlbWVudEJ5SXRlcmF0b3IoZSl7bGV0IHI9ZS5vO3JldHVybiB0aGlzLmVyYXNlRWxlbWVudEJ5UG9zKHIpLGU9ZS5uZXh0KCksZX1maW5kKGUpe2ZvcihsZXQgcj0wO3I8dGhpcy5pOysrcilpZih0aGlzLmdldEVsZW1lbnRCeVBvcyhyKT09PWUpcmV0dXJuIG5ldyBTcihyLHRoaXMpO3JldHVybiB0aGlzLmVuZCgpfXJldmVyc2UoKXtsZXQgZT0wLHI9dGhpcy5pLTE7Zm9yKDtlPHI7KXtsZXQgaT10aGlzLmdldEVsZW1lbnRCeVBvcyhlKTt0aGlzLnNldEVsZW1lbnRCeVBvcyhlLHRoaXMuZ2V0RWxlbWVudEJ5UG9zKHIpKSx0aGlzLnNldEVsZW1lbnRCeVBvcyhyLGkpLGUrPTEsci09MTt9fXVuaXF1ZSgpe2lmKHRoaXMuaTw9MSlyZXR1cm4gdGhpcy5pO2xldCBlPTEscj10aGlzLmdldEVsZW1lbnRCeVBvcygwKTtmb3IobGV0IGk9MTtpPHRoaXMuaTsrK2kpe2xldCBuPXRoaXMuZ2V0RWxlbWVudEJ5UG9zKGkpO24hPT1yJiYocj1uLHRoaXMuc2V0RWxlbWVudEJ5UG9zKGUrKyxuKSk7fWZvcig7dGhpcy5pPmU7KXRoaXMucG9wQmFjaygpO3JldHVybiB0aGlzLml9c29ydChlKXtsZXQgcj1bXTtmb3IobGV0IGk9MDtpPHRoaXMuaTsrK2kpci5wdXNoKHRoaXMuZ2V0RWxlbWVudEJ5UG9zKGkpKTtyLnNvcnQoZSk7Zm9yKGxldCBpPTA7aTx0aGlzLmk7KytpKXRoaXMuc2V0RWxlbWVudEJ5UG9zKGkscltpXSk7fXNocmlua1RvRml0KCl7aWYodGhpcy5pPT09MClyZXR1cm47bGV0IGU9W107dGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHIpe2UucHVzaChyKTt9KSx0aGlzLlA9TWF0aC5tYXgoTWF0aC5jZWlsKHRoaXMuaS90aGlzLkYpLDEpLHRoaXMuaT10aGlzLmo9dGhpcy5SPXRoaXMuRD10aGlzLk49MCx0aGlzLkE9W107Zm9yKGxldCByPTA7cjx0aGlzLlA7KytyKXRoaXMuQS5wdXNoKG5ldyBBcnJheSh0aGlzLkYpKTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoOysrcil0aGlzLnB1c2hCYWNrKGVbcl0pO31mb3JFYWNoKGUpe2ZvcihsZXQgcj0wO3I8dGhpcy5pOysrcillKHRoaXMuZ2V0RWxlbWVudEJ5UG9zKHIpLHIsdGhpcyk7fVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIGZ1bmN0aW9uKigpe2ZvcihsZXQgZT0wO2U8dGhpcy5pOysrZSl5aWVsZCB0aGlzLmdldEVsZW1lbnRCeVBvcyhlKTt9LmJpbmQodGhpcykoKX19LEYxPW1hO1ZuLmRlZmF1bHQ9RjE7fSk7dmFyIGFwPU0oZWk9PntfKCk7digpO20oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZWksXCJ0XCIse3ZhbHVlOiEwfSk7ZWkuVHJlZU5vZGVFbmFibGVJbmRleD1laS5UcmVlTm9kZT12b2lkIDA7dmFyIHpuPWNsYXNze2NvbnN0cnVjdG9yKGUscil7dGhpcy5lZT0xLHRoaXMudT12b2lkIDAsdGhpcy5sPXZvaWQgMCx0aGlzLlU9dm9pZCAwLHRoaXMuVz12b2lkIDAsdGhpcy50dD12b2lkIDAsdGhpcy51PWUsdGhpcy5sPXI7fUwoKXtsZXQgZT10aGlzO2lmKGUuZWU9PT0xJiZlLnR0LnR0PT09ZSllPWUuVztlbHNlIGlmKGUuVSlmb3IoZT1lLlU7ZS5XOyllPWUuVztlbHNlIHtsZXQgcj1lLnR0O2Zvcig7ci5VPT09ZTspZT1yLHI9ZS50dDtlPXI7fXJldHVybiBlfUIoKXtsZXQgZT10aGlzO2lmKGUuVyl7Zm9yKGU9ZS5XO2UuVTspZT1lLlU7cmV0dXJuIGV9ZWxzZSB7bGV0IHI9ZS50dDtmb3IoO3IuVz09PWU7KWU9cixyPWUudHQ7cmV0dXJuIGUuVyE9PXI/cjplfX10ZSgpe2xldCBlPXRoaXMudHQscj10aGlzLlcsaT1yLlU7cmV0dXJuIGUudHQ9PT10aGlzP2UudHQ9cjplLlU9PT10aGlzP2UuVT1yOmUuVz1yLHIudHQ9ZSxyLlU9dGhpcyx0aGlzLnR0PXIsdGhpcy5XPWksaSYmKGkudHQ9dGhpcykscn1zZSgpe2xldCBlPXRoaXMudHQscj10aGlzLlUsaT1yLlc7cmV0dXJuIGUudHQ9PT10aGlzP2UudHQ9cjplLlU9PT10aGlzP2UuVT1yOmUuVz1yLHIudHQ9ZSxyLlc9dGhpcyx0aGlzLnR0PXIsdGhpcy5VPWksaSYmKGkudHQ9dGhpcykscn19O2VpLlRyZWVOb2RlPXpuO3ZhciB2YT1jbGFzcyBleHRlbmRzIHpue2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnJ0PTE7fXRlKCl7bGV0IGU9c3VwZXIudGUoKTtyZXR1cm4gdGhpcy5pZSgpLGUuaWUoKSxlfXNlKCl7bGV0IGU9c3VwZXIuc2UoKTtyZXR1cm4gdGhpcy5pZSgpLGUuaWUoKSxlfWllKCl7dGhpcy5ydD0xLHRoaXMuVSYmKHRoaXMucnQrPXRoaXMuVS5ydCksdGhpcy5XJiYodGhpcy5ydCs9dGhpcy5XLnJ0KTt9fTtlaS5UcmVlTm9kZUVuYWJsZUluZGV4PXZhO30pO3ZhciBTYT1NKEtuPT57XygpO3YoKTttKCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KEtuLFwidFwiLHt2YWx1ZTohMH0pO0tuLmRlZmF1bHQ9dm9pZCAwO3ZhciBscD1hcCgpLFcxPWx0KCksdXA9dXQoKSxFYT1jbGFzcyBleHRlbmRzIFcxLkNvbnRhaW5lcntjb25zdHJ1Y3RvcihlPWZ1bmN0aW9uKGksbil7cmV0dXJuIGk8bj8tMTppPm4/MTowfSxyPSExKXtzdXBlcigpLHRoaXMuWT12b2lkIDAsdGhpcy52PWUscj8odGhpcy5yZT1scC5UcmVlTm9kZUVuYWJsZUluZGV4LHRoaXMuTT1mdW5jdGlvbihpLG4sbyl7bGV0IHM9dGhpcy5uZShpLG4sbyk7aWYocyl7bGV0IGE9cy50dDtmb3IoO2EhPT10aGlzLmg7KWEucnQrPTEsYT1hLnR0O2xldCBsPXRoaXMuaGUocyk7aWYobCl7bGV0e3BhcmVudE5vZGU6YyxncmFuZFBhcmVudDpoLGN1ck5vZGU6ZH09bDtjLmllKCksaC5pZSgpLGQuaWUoKTt9fXJldHVybiB0aGlzLml9LHRoaXMuVj1mdW5jdGlvbihpKXtsZXQgbj10aGlzLmZlKGkpO2Zvcig7biE9PXRoaXMuaDspbi5ydC09MSxuPW4udHQ7fSk6KHRoaXMucmU9bHAuVHJlZU5vZGUsdGhpcy5NPWZ1bmN0aW9uKGksbixvKXtsZXQgcz10aGlzLm5lKGksbixvKTtyZXR1cm4gcyYmdGhpcy5oZShzKSx0aGlzLml9LHRoaXMuVj10aGlzLmZlKSx0aGlzLmg9bmV3IHRoaXMucmU7fVgoZSxyKXtsZXQgaT10aGlzLmg7Zm9yKDtlOyl7bGV0IG49dGhpcy52KGUudSxyKTtpZihuPDApZT1lLlc7ZWxzZSBpZihuPjApaT1lLGU9ZS5VO2Vsc2UgcmV0dXJuIGV9cmV0dXJuIGl9WihlLHIpe2xldCBpPXRoaXMuaDtmb3IoO2U7KXRoaXMudihlLnUscik8PTA/ZT1lLlc6KGk9ZSxlPWUuVSk7cmV0dXJuIGl9JChlLHIpe2xldCBpPXRoaXMuaDtmb3IoO2U7KXtsZXQgbj10aGlzLnYoZS51LHIpO2lmKG48MClpPWUsZT1lLlc7ZWxzZSBpZihuPjApZT1lLlU7ZWxzZSByZXR1cm4gZX1yZXR1cm4gaX1ycihlLHIpe2xldCBpPXRoaXMuaDtmb3IoO2U7KXRoaXMudihlLnUscik8MD8oaT1lLGU9ZS5XKTplPWUuVTtyZXR1cm4gaX11ZShlKXtmb3IoOzspe2xldCByPWUudHQ7aWYocj09PXRoaXMuaClyZXR1cm47aWYoZS5lZT09PTEpe2UuZWU9MDtyZXR1cm59aWYoZT09PXIuVSl7bGV0IGk9ci5XO2lmKGkuZWU9PT0xKWkuZWU9MCxyLmVlPTEscj09PXRoaXMuWT90aGlzLlk9ci50ZSgpOnIudGUoKTtlbHNlIGlmKGkuVyYmaS5XLmVlPT09MSl7aS5lZT1yLmVlLHIuZWU9MCxpLlcuZWU9MCxyPT09dGhpcy5ZP3RoaXMuWT1yLnRlKCk6ci50ZSgpO3JldHVybn1lbHNlIGkuVSYmaS5VLmVlPT09MT8oaS5lZT0xLGkuVS5lZT0wLGkuc2UoKSk6KGkuZWU9MSxlPXIpO31lbHNlIHtsZXQgaT1yLlU7aWYoaS5lZT09PTEpaS5lZT0wLHIuZWU9MSxyPT09dGhpcy5ZP3RoaXMuWT1yLnNlKCk6ci5zZSgpO2Vsc2UgaWYoaS5VJiZpLlUuZWU9PT0xKXtpLmVlPXIuZWUsci5lZT0wLGkuVS5lZT0wLHI9PT10aGlzLlk/dGhpcy5ZPXIuc2UoKTpyLnNlKCk7cmV0dXJufWVsc2UgaS5XJiZpLlcuZWU9PT0xPyhpLmVlPTEsaS5XLmVlPTAsaS50ZSgpKTooaS5lZT0xLGU9cik7fX19ZmUoZSl7aWYodGhpcy5pPT09MSlyZXR1cm4gdGhpcy5jbGVhcigpLHRoaXMuaDtsZXQgcj1lO2Zvcig7ci5VfHxyLlc7KXtpZihyLlcpZm9yKHI9ci5XO3IuVTspcj1yLlU7ZWxzZSByPXIuVTtbZS51LHIudV09W3IudSxlLnVdLFtlLmwsci5sXT1bci5sLGUubF0sZT1yO310aGlzLmguVT09PXI/dGhpcy5oLlU9ci50dDp0aGlzLmguVz09PXImJih0aGlzLmguVz1yLnR0KSx0aGlzLnVlKHIpO2xldCBpPXIudHQ7cmV0dXJuIHI9PT1pLlU/aS5VPXZvaWQgMDppLlc9dm9pZCAwLHRoaXMuaS09MSx0aGlzLlkuZWU9MCxpfW9lKGUscil7cmV0dXJuIGU9PT12b2lkIDA/ITE6dGhpcy5vZShlLlUscil8fHIoZSk/ITA6dGhpcy5vZShlLlcscil9aGUoZSl7Zm9yKDs7KXtsZXQgcj1lLnR0O2lmKHIuZWU9PT0wKXJldHVybjtsZXQgaT1yLnR0O2lmKHI9PT1pLlUpe2xldCBuPWkuVztpZihuJiZuLmVlPT09MSl7aWYobi5lZT1yLmVlPTAsaT09PXRoaXMuWSlyZXR1cm47aS5lZT0xLGU9aTtjb250aW51ZX1lbHNlIGlmKGU9PT1yLlcpe2lmKGUuZWU9MCxlLlUmJihlLlUudHQ9ciksZS5XJiYoZS5XLnR0PWkpLHIuVz1lLlUsaS5VPWUuVyxlLlU9cixlLlc9aSxpPT09dGhpcy5ZKXRoaXMuWT1lLHRoaXMuaC50dD1lO2Vsc2Uge2xldCBvPWkudHQ7by5VPT09aT9vLlU9ZTpvLlc9ZTt9cmV0dXJuIGUudHQ9aS50dCxyLnR0PWUsaS50dD1lLGkuZWU9MSx7cGFyZW50Tm9kZTpyLGdyYW5kUGFyZW50OmksY3VyTm9kZTplfX1lbHNlIHIuZWU9MCxpPT09dGhpcy5ZP3RoaXMuWT1pLnNlKCk6aS5zZSgpLGkuZWU9MTt9ZWxzZSB7bGV0IG49aS5VO2lmKG4mJm4uZWU9PT0xKXtpZihuLmVlPXIuZWU9MCxpPT09dGhpcy5ZKXJldHVybjtpLmVlPTEsZT1pO2NvbnRpbnVlfWVsc2UgaWYoZT09PXIuVSl7aWYoZS5lZT0wLGUuVSYmKGUuVS50dD1pKSxlLlcmJihlLlcudHQ9ciksaS5XPWUuVSxyLlU9ZS5XLGUuVT1pLGUuVz1yLGk9PT10aGlzLlkpdGhpcy5ZPWUsdGhpcy5oLnR0PWU7ZWxzZSB7bGV0IG89aS50dDtvLlU9PT1pP28uVT1lOm8uVz1lO31yZXR1cm4gZS50dD1pLnR0LHIudHQ9ZSxpLnR0PWUsaS5lZT0xLHtwYXJlbnROb2RlOnIsZ3JhbmRQYXJlbnQ6aSxjdXJOb2RlOmV9fWVsc2Ugci5lZT0wLGk9PT10aGlzLlk/dGhpcy5ZPWkudGUoKTppLnRlKCksaS5lZT0xO31yZXR1cm59fW5lKGUscixpKXtpZih0aGlzLlk9PT12b2lkIDApe3RoaXMuaSs9MSx0aGlzLlk9bmV3IHRoaXMucmUoZSxyKSx0aGlzLlkuZWU9MCx0aGlzLlkudHQ9dGhpcy5oLHRoaXMuaC50dD10aGlzLlksdGhpcy5oLlU9dGhpcy5ZLHRoaXMuaC5XPXRoaXMuWTtyZXR1cm59bGV0IG4sbz10aGlzLmguVSxzPXRoaXMudihvLnUsZSk7aWYocz09PTApe28ubD1yO3JldHVybn1lbHNlIGlmKHM+MClvLlU9bmV3IHRoaXMucmUoZSxyKSxvLlUudHQ9byxuPW8uVSx0aGlzLmguVT1uO2Vsc2Uge2xldCBhPXRoaXMuaC5XLGw9dGhpcy52KGEudSxlKTtpZihsPT09MCl7YS5sPXI7cmV0dXJufWVsc2UgaWYobDwwKWEuVz1uZXcgdGhpcy5yZShlLHIpLGEuVy50dD1hLG49YS5XLHRoaXMuaC5XPW47ZWxzZSB7aWYoaSE9PXZvaWQgMCl7bGV0IGM9aS5vO2lmKGMhPT10aGlzLmgpe2xldCBoPXRoaXMudihjLnUsZSk7aWYoaD09PTApe2MubD1yO3JldHVybn1lbHNlIGlmKGg+MCl7bGV0IGQ9Yy5MKCksZz10aGlzLnYoZC51LGUpO2lmKGc9PT0wKXtkLmw9cjtyZXR1cm59ZWxzZSBnPDAmJihuPW5ldyB0aGlzLnJlKGUsciksZC5XPT09dm9pZCAwPyhkLlc9bixuLnR0PWQpOihjLlU9bixuLnR0PWMpKTt9fX1pZihuPT09dm9pZCAwKWZvcihuPXRoaXMuWTs7KXtsZXQgYz10aGlzLnYobi51LGUpO2lmKGM+MCl7aWYobi5VPT09dm9pZCAwKXtuLlU9bmV3IHRoaXMucmUoZSxyKSxuLlUudHQ9bixuPW4uVTticmVha31uPW4uVTt9ZWxzZSBpZihjPDApe2lmKG4uVz09PXZvaWQgMCl7bi5XPW5ldyB0aGlzLnJlKGUsciksbi5XLnR0PW4sbj1uLlc7YnJlYWt9bj1uLlc7fWVsc2Uge24ubD1yO3JldHVybn19fX1yZXR1cm4gdGhpcy5pKz0xLG59SShlLHIpe2Zvcig7ZTspe2xldCBpPXRoaXMudihlLnUscik7aWYoaTwwKWU9ZS5XO2Vsc2UgaWYoaT4wKWU9ZS5VO2Vsc2UgcmV0dXJuIGV9cmV0dXJuIGV8fHRoaXMuaH1jbGVhcigpe3RoaXMuaT0wLHRoaXMuWT12b2lkIDAsdGhpcy5oLnR0PXZvaWQgMCx0aGlzLmguVT10aGlzLmguVz12b2lkIDA7fXVwZGF0ZUtleUJ5SXRlcmF0b3IoZSxyKXtsZXQgaT1lLm87aWYoaT09PXRoaXMuaCYmKDAsIHVwLnRocm93SXRlcmF0b3JBY2Nlc3NFcnJvcikoKSx0aGlzLmk9PT0xKXJldHVybiBpLnU9ciwhMDtpZihpPT09dGhpcy5oLlUpcmV0dXJuIHRoaXMudihpLkIoKS51LHIpPjA/KGkudT1yLCEwKTohMTtpZihpPT09dGhpcy5oLlcpcmV0dXJuIHRoaXMudihpLkwoKS51LHIpPDA/KGkudT1yLCEwKTohMTtsZXQgbj1pLkwoKS51O2lmKHRoaXMudihuLHIpPj0wKXJldHVybiAhMTtsZXQgbz1pLkIoKS51O3JldHVybiB0aGlzLnYobyxyKTw9MD8hMTooaS51PXIsITApfWVyYXNlRWxlbWVudEJ5UG9zKGUpe2lmKGU8MHx8ZT50aGlzLmktMSl0aHJvdyBuZXcgUmFuZ2VFcnJvcjtsZXQgcj0wLGk9dGhpcztyZXR1cm4gdGhpcy5vZSh0aGlzLlksZnVuY3Rpb24obil7cmV0dXJuIGU9PT1yPyhpLlYobiksITApOihyKz0xLCExKX0pLHRoaXMuaX1lcmFzZUVsZW1lbnRCeUtleShlKXtpZih0aGlzLmk9PT0wKXJldHVybiAhMTtsZXQgcj10aGlzLkkodGhpcy5ZLGUpO3JldHVybiByPT09dGhpcy5oPyExOih0aGlzLlYociksITApfWVyYXNlRWxlbWVudEJ5SXRlcmF0b3IoZSl7bGV0IHI9ZS5vO3I9PT10aGlzLmgmJigwLCB1cC50aHJvd0l0ZXJhdG9yQWNjZXNzRXJyb3IpKCk7bGV0IGk9ci5XPT09dm9pZCAwO3JldHVybiBlLml0ZXJhdG9yVHlwZT09PTA/aSYmZS5uZXh0KCk6KCFpfHxyLlU9PT12b2lkIDApJiZlLm5leHQoKSx0aGlzLlYociksZX1mb3JFYWNoKGUpe2xldCByPTA7Zm9yKGxldCBpIG9mIHRoaXMpZShpLHIrKyx0aGlzKTt9Z2V0RWxlbWVudEJ5UG9zKGUpe2lmKGU8MHx8ZT50aGlzLmktMSl0aHJvdyBuZXcgUmFuZ2VFcnJvcjtsZXQgcixpPTA7Zm9yKGxldCBuIG9mIHRoaXMpe2lmKGk9PT1lKXtyPW47YnJlYWt9aSs9MTt9cmV0dXJuIHJ9Z2V0SGVpZ2h0KCl7aWYodGhpcy5pPT09MClyZXR1cm4gMDtsZXQgZT1mdW5jdGlvbihyKXtyZXR1cm4gcj9NYXRoLm1heChlKHIuVSksZShyLlcpKSsxOjB9O3JldHVybiBlKHRoaXMuWSl9fSwkMT1FYTtLbi5kZWZhdWx0PSQxO30pO3ZhciBJYT1NKFFuPT57XygpO3YoKTttKCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFFuLFwidFwiLHt2YWx1ZTohMH0pO1FuLmRlZmF1bHQ9dm9pZCAwO3ZhciBIMT1sdCgpLEduPXV0KCksQWE9Y2xhc3MgZXh0ZW5kcyBIMS5Db250YWluZXJJdGVyYXRvcntjb25zdHJ1Y3RvcihlLHIsaSl7c3VwZXIoaSksdGhpcy5vPWUsdGhpcy5oPXIsdGhpcy5pdGVyYXRvclR5cGU9PT0wPyh0aGlzLnByZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm89PT10aGlzLmguVSYmKDAsIEduLnRocm93SXRlcmF0b3JBY2Nlc3NFcnJvcikoKSx0aGlzLm89dGhpcy5vLkwoKSx0aGlzfSx0aGlzLm5leHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vPT09dGhpcy5oJiYoMCwgR24udGhyb3dJdGVyYXRvckFjY2Vzc0Vycm9yKSgpLHRoaXMubz10aGlzLm8uQigpLHRoaXN9KToodGhpcy5wcmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vPT09dGhpcy5oLlcmJigwLCBHbi50aHJvd0l0ZXJhdG9yQWNjZXNzRXJyb3IpKCksdGhpcy5vPXRoaXMuby5CKCksdGhpc30sdGhpcy5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubz09PXRoaXMuaCYmKDAsIEduLnRocm93SXRlcmF0b3JBY2Nlc3NFcnJvcikoKSx0aGlzLm89dGhpcy5vLkwoKSx0aGlzfSk7fWdldCBpbmRleCgpe2xldCBlPXRoaXMubyxyPXRoaXMuaC50dDtpZihlPT09dGhpcy5oKXJldHVybiByP3IucnQtMTowO2xldCBpPTA7Zm9yKGUuVSYmKGkrPWUuVS5ydCk7ZSE9PXI7KXtsZXQgbj1lLnR0O2U9PT1uLlcmJihpKz0xLG4uVSYmKGkrPW4uVS5ydCkpLGU9bjt9cmV0dXJuIGl9fSxWMT1BYTtRbi5kZWZhdWx0PVYxO30pO3ZhciBjcD1NKFluPT57XygpO3YoKTttKCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFluLFwidFwiLHt2YWx1ZTohMH0pO1luLmRlZmF1bHQ9dm9pZCAwO3ZhciB6MT1mcChTYSgpKSxLMT1mcChJYSgpKSxHMT11dCgpO2Z1bmN0aW9uIGZwKHQpe3JldHVybiB0JiZ0LnQ/dDp7ZGVmYXVsdDp0fX12YXIgS2U9Y2xhc3MgdCBleHRlbmRzIEsxLmRlZmF1bHR7Y29uc3RydWN0b3IoZSxyLGksbil7c3VwZXIoZSxyLG4pLHRoaXMuY29udGFpbmVyPWk7fWdldCBwb2ludGVyKCl7cmV0dXJuIHRoaXMubz09PXRoaXMuaCYmKDAsIEcxLnRocm93SXRlcmF0b3JBY2Nlc3NFcnJvcikoKSx0aGlzLm8udX1jb3B5KCl7cmV0dXJuIG5ldyB0KHRoaXMubyx0aGlzLmgsdGhpcy5jb250YWluZXIsdGhpcy5pdGVyYXRvclR5cGUpfX0sVGE9Y2xhc3MgZXh0ZW5kcyB6MS5kZWZhdWx0e2NvbnN0cnVjdG9yKGU9W10scixpKXtzdXBlcihyLGkpO2xldCBuPXRoaXM7ZS5mb3JFYWNoKGZ1bmN0aW9uKG8pe24uaW5zZXJ0KG8pO30pO30qSyhlKXtlIT09dm9pZCAwJiYoeWllbGQqdGhpcy5LKGUuVSkseWllbGQgZS51LHlpZWxkKnRoaXMuSyhlLlcpKTt9YmVnaW4oKXtyZXR1cm4gbmV3IEtlKHRoaXMuaC5VfHx0aGlzLmgsdGhpcy5oLHRoaXMpfWVuZCgpe3JldHVybiBuZXcgS2UodGhpcy5oLHRoaXMuaCx0aGlzKX1yQmVnaW4oKXtyZXR1cm4gbmV3IEtlKHRoaXMuaC5XfHx0aGlzLmgsdGhpcy5oLHRoaXMsMSl9ckVuZCgpe3JldHVybiBuZXcgS2UodGhpcy5oLHRoaXMuaCx0aGlzLDEpfWZyb250KCl7cmV0dXJuIHRoaXMuaC5VP3RoaXMuaC5VLnU6dm9pZCAwfWJhY2soKXtyZXR1cm4gdGhpcy5oLlc/dGhpcy5oLlcudTp2b2lkIDB9aW5zZXJ0KGUscil7cmV0dXJuIHRoaXMuTShlLHZvaWQgMCxyKX1maW5kKGUpe2xldCByPXRoaXMuSSh0aGlzLlksZSk7cmV0dXJuIG5ldyBLZShyLHRoaXMuaCx0aGlzKX1sb3dlckJvdW5kKGUpe2xldCByPXRoaXMuWCh0aGlzLlksZSk7cmV0dXJuIG5ldyBLZShyLHRoaXMuaCx0aGlzKX11cHBlckJvdW5kKGUpe2xldCByPXRoaXMuWih0aGlzLlksZSk7cmV0dXJuIG5ldyBLZShyLHRoaXMuaCx0aGlzKX1yZXZlcnNlTG93ZXJCb3VuZChlKXtsZXQgcj10aGlzLiQodGhpcy5ZLGUpO3JldHVybiBuZXcgS2Uocix0aGlzLmgsdGhpcyl9cmV2ZXJzZVVwcGVyQm91bmQoZSl7bGV0IHI9dGhpcy5ycih0aGlzLlksZSk7cmV0dXJuIG5ldyBLZShyLHRoaXMuaCx0aGlzKX11bmlvbihlKXtsZXQgcj10aGlzO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oaSl7ci5pbnNlcnQoaSk7fSksdGhpcy5pfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHRoaXMuSyh0aGlzLlkpfX0sUTE9VGE7WW4uZGVmYXVsdD1RMTt9KTt2YXIgZHA9TShKbj0+e18oKTt2KCk7bSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKbixcInRcIix7dmFsdWU6ITB9KTtKbi5kZWZhdWx0PXZvaWQgMDt2YXIgWTE9aHAoU2EoKSksSjE9aHAoSWEoKSksWDE9dXQoKTtmdW5jdGlvbiBocCh0KXtyZXR1cm4gdCYmdC50P3Q6e2RlZmF1bHQ6dH19dmFyIEdlPWNsYXNzIHQgZXh0ZW5kcyBKMS5kZWZhdWx0e2NvbnN0cnVjdG9yKGUscixpLG4pe3N1cGVyKGUscixuKSx0aGlzLmNvbnRhaW5lcj1pO31nZXQgcG9pbnRlcigpe3RoaXMubz09PXRoaXMuaCYmKDAsIFgxLnRocm93SXRlcmF0b3JBY2Nlc3NFcnJvcikoKTtsZXQgZT10aGlzO3JldHVybiBuZXcgUHJveHkoW10se2dldChyLGkpe2lmKGk9PT1cIjBcIilyZXR1cm4gZS5vLnU7aWYoaT09PVwiMVwiKXJldHVybiBlLm8ubH0sc2V0KHIsaSxuKXtpZihpIT09XCIxXCIpdGhyb3cgbmV3IFR5cGVFcnJvcihcInByb3BzIG11c3QgYmUgMVwiKTtyZXR1cm4gZS5vLmw9biwhMH19KX1jb3B5KCl7cmV0dXJuIG5ldyB0KHRoaXMubyx0aGlzLmgsdGhpcy5jb250YWluZXIsdGhpcy5pdGVyYXRvclR5cGUpfX0sUmE9Y2xhc3MgZXh0ZW5kcyBZMS5kZWZhdWx0e2NvbnN0cnVjdG9yKGU9W10scixpKXtzdXBlcihyLGkpO2xldCBuPXRoaXM7ZS5mb3JFYWNoKGZ1bmN0aW9uKG8pe24uc2V0RWxlbWVudChvWzBdLG9bMV0pO30pO30qSyhlKXtlIT09dm9pZCAwJiYoeWllbGQqdGhpcy5LKGUuVSkseWllbGQgW2UudSxlLmxdLHlpZWxkKnRoaXMuSyhlLlcpKTt9YmVnaW4oKXtyZXR1cm4gbmV3IEdlKHRoaXMuaC5VfHx0aGlzLmgsdGhpcy5oLHRoaXMpfWVuZCgpe3JldHVybiBuZXcgR2UodGhpcy5oLHRoaXMuaCx0aGlzKX1yQmVnaW4oKXtyZXR1cm4gbmV3IEdlKHRoaXMuaC5XfHx0aGlzLmgsdGhpcy5oLHRoaXMsMSl9ckVuZCgpe3JldHVybiBuZXcgR2UodGhpcy5oLHRoaXMuaCx0aGlzLDEpfWZyb250KCl7aWYodGhpcy5pPT09MClyZXR1cm47bGV0IGU9dGhpcy5oLlU7cmV0dXJuIFtlLnUsZS5sXX1iYWNrKCl7aWYodGhpcy5pPT09MClyZXR1cm47bGV0IGU9dGhpcy5oLlc7cmV0dXJuIFtlLnUsZS5sXX1sb3dlckJvdW5kKGUpe2xldCByPXRoaXMuWCh0aGlzLlksZSk7cmV0dXJuIG5ldyBHZShyLHRoaXMuaCx0aGlzKX11cHBlckJvdW5kKGUpe2xldCByPXRoaXMuWih0aGlzLlksZSk7cmV0dXJuIG5ldyBHZShyLHRoaXMuaCx0aGlzKX1yZXZlcnNlTG93ZXJCb3VuZChlKXtsZXQgcj10aGlzLiQodGhpcy5ZLGUpO3JldHVybiBuZXcgR2Uocix0aGlzLmgsdGhpcyl9cmV2ZXJzZVVwcGVyQm91bmQoZSl7bGV0IHI9dGhpcy5ycih0aGlzLlksZSk7cmV0dXJuIG5ldyBHZShyLHRoaXMuaCx0aGlzKX1zZXRFbGVtZW50KGUscixpKXtyZXR1cm4gdGhpcy5NKGUscixpKX1maW5kKGUpe2xldCByPXRoaXMuSSh0aGlzLlksZSk7cmV0dXJuIG5ldyBHZShyLHRoaXMuaCx0aGlzKX1nZXRFbGVtZW50QnlLZXkoZSl7cmV0dXJuIHRoaXMuSSh0aGlzLlksZSkubH11bmlvbihlKXtsZXQgcj10aGlzO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oaSl7ci5zZXRFbGVtZW50KGlbMF0saVsxXSk7fSksdGhpcy5pfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHRoaXMuSyh0aGlzLlkpfX0sWjE9UmE7Sm4uZGVmYXVsdD1aMTt9KTt2YXIgQmE9TShDYT0+e18oKTt2KCk7bSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShDYSxcInRcIix7dmFsdWU6ITB9KTtDYS5kZWZhdWx0PWV2O2Z1bmN0aW9uIGV2KHQpe2xldCBlPXR5cGVvZiB0O3JldHVybiBlPT09XCJvYmplY3RcIiYmdCE9PW51bGx8fGU9PT1cImZ1bmN0aW9uXCJ9fSk7dmFyIHhhPU0odGk9PntfKCk7digpO20oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGksXCJ0XCIse3ZhbHVlOiEwfSk7dGkuSGFzaENvbnRhaW5lckl0ZXJhdG9yPXRpLkhhc2hDb250YWluZXI9dm9pZCAwO3ZhciBwcD1sdCgpLFBhPXR2KEJhKCkpLENpPXV0KCk7ZnVuY3Rpb24gdHYodCl7cmV0dXJuIHQmJnQudD90OntkZWZhdWx0OnR9fXZhciBrYT1jbGFzcyBleHRlbmRzIHBwLkNvbnRhaW5lckl0ZXJhdG9ye2NvbnN0cnVjdG9yKGUscixpKXtzdXBlcihpKSx0aGlzLm89ZSx0aGlzLmg9cix0aGlzLml0ZXJhdG9yVHlwZT09PTA/KHRoaXMucHJlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuby5MPT09dGhpcy5oJiYoMCwgQ2kudGhyb3dJdGVyYXRvckFjY2Vzc0Vycm9yKSgpLHRoaXMubz10aGlzLm8uTCx0aGlzfSx0aGlzLm5leHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vPT09dGhpcy5oJiYoMCwgQ2kudGhyb3dJdGVyYXRvckFjY2Vzc0Vycm9yKSgpLHRoaXMubz10aGlzLm8uQix0aGlzfSk6KHRoaXMucHJlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuby5CPT09dGhpcy5oJiYoMCwgQ2kudGhyb3dJdGVyYXRvckFjY2Vzc0Vycm9yKSgpLHRoaXMubz10aGlzLm8uQix0aGlzfSx0aGlzLm5leHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vPT09dGhpcy5oJiYoMCwgQ2kudGhyb3dJdGVyYXRvckFjY2Vzc0Vycm9yKSgpLHRoaXMubz10aGlzLm8uTCx0aGlzfSk7fX07dGkuSGFzaENvbnRhaW5lckl0ZXJhdG9yPWthO3ZhciBPYT1jbGFzcyBleHRlbmRzIHBwLkNvbnRhaW5lcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5IPVtdLHRoaXMuZz17fSx0aGlzLkhBU0hfVEFHPVN5bWJvbChcIkBASEFTSF9UQUdcIiksT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMuZyxudWxsKSx0aGlzLmg9e30sdGhpcy5oLkw9dGhpcy5oLkI9dGhpcy5wPXRoaXMuXz10aGlzLmg7fVYoZSl7bGV0e0w6cixCOml9PWU7ci5CPWksaS5MPXIsZT09PXRoaXMucCYmKHRoaXMucD1pKSxlPT09dGhpcy5fJiYodGhpcy5fPXIpLHRoaXMuaS09MTt9TShlLHIsaSl7aT09PXZvaWQgMCYmKGk9KDAsIFBhLmRlZmF1bHQpKGUpKTtsZXQgbjtpZihpKXtsZXQgbz1lW3RoaXMuSEFTSF9UQUddO2lmKG8hPT12b2lkIDApcmV0dXJuIHRoaXMuSFtvXS5sPXIsdGhpcy5pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHRoaXMuSEFTSF9UQUcse3ZhbHVlOnRoaXMuSC5sZW5ndGgsY29uZmlndXJhYmxlOiEwfSksbj17dTplLGw6cixMOnRoaXMuXyxCOnRoaXMuaH0sdGhpcy5ILnB1c2gobik7fWVsc2Uge2xldCBvPXRoaXMuZ1tlXTtpZihvKXJldHVybiBvLmw9cix0aGlzLmk7bj17dTplLGw6cixMOnRoaXMuXyxCOnRoaXMuaH0sdGhpcy5nW2VdPW47fXJldHVybiB0aGlzLmk9PT0wPyh0aGlzLnA9bix0aGlzLmguQj1uKTp0aGlzLl8uQj1uLHRoaXMuXz1uLHRoaXMuaC5MPW4sKyt0aGlzLml9SShlLHIpe2lmKHI9PT12b2lkIDAmJihyPSgwLCBQYS5kZWZhdWx0KShlKSkscil7bGV0IGk9ZVt0aGlzLkhBU0hfVEFHXTtyZXR1cm4gaT09PXZvaWQgMD90aGlzLmg6dGhpcy5IW2ldfWVsc2UgcmV0dXJuIHRoaXMuZ1tlXXx8dGhpcy5ofWNsZWFyKCl7bGV0IGU9dGhpcy5IQVNIX1RBRzt0aGlzLkguZm9yRWFjaChmdW5jdGlvbihyKXtkZWxldGUgci51W2VdO30pLHRoaXMuSD1bXSx0aGlzLmc9e30sT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMuZyxudWxsKSx0aGlzLmk9MCx0aGlzLnA9dGhpcy5fPXRoaXMuaC5MPXRoaXMuaC5CPXRoaXMuaDt9ZXJhc2VFbGVtZW50QnlLZXkoZSxyKXtsZXQgaTtpZihyPT09dm9pZCAwJiYocj0oMCwgUGEuZGVmYXVsdCkoZSkpLHIpe2xldCBuPWVbdGhpcy5IQVNIX1RBR107aWYobj09PXZvaWQgMClyZXR1cm4gITE7ZGVsZXRlIGVbdGhpcy5IQVNIX1RBR10saT10aGlzLkhbbl0sZGVsZXRlIHRoaXMuSFtuXTt9ZWxzZSB7aWYoaT10aGlzLmdbZV0saT09PXZvaWQgMClyZXR1cm4gITE7ZGVsZXRlIHRoaXMuZ1tlXTt9cmV0dXJuIHRoaXMuVihpKSwhMH1lcmFzZUVsZW1lbnRCeUl0ZXJhdG9yKGUpe2xldCByPWUubztyZXR1cm4gcj09PXRoaXMuaCYmKDAsIENpLnRocm93SXRlcmF0b3JBY2Nlc3NFcnJvcikoKSx0aGlzLlYociksZS5uZXh0KCl9ZXJhc2VFbGVtZW50QnlQb3MoZSl7aWYoZTwwfHxlPnRoaXMuaS0xKXRocm93IG5ldyBSYW5nZUVycm9yO2xldCByPXRoaXMucDtmb3IoO2UtLTspcj1yLkI7cmV0dXJuIHRoaXMuVihyKSx0aGlzLml9fTt0aS5IYXNoQ29udGFpbmVyPU9hO30pO3ZhciB5cD1NKFhuPT57XygpO3YoKTttKCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFhuLFwidFwiLHt2YWx1ZTohMH0pO1huLmRlZmF1bHQ9dm9pZCAwO3ZhciBncD14YSgpLHJ2PXV0KCksQXI9Y2xhc3MgdCBleHRlbmRzIGdwLkhhc2hDb250YWluZXJJdGVyYXRvcntjb25zdHJ1Y3RvcihlLHIsaSxuKXtzdXBlcihlLHIsbiksdGhpcy5jb250YWluZXI9aTt9Z2V0IHBvaW50ZXIoKXtyZXR1cm4gdGhpcy5vPT09dGhpcy5oJiYoMCwgcnYudGhyb3dJdGVyYXRvckFjY2Vzc0Vycm9yKSgpLHRoaXMuby51fWNvcHkoKXtyZXR1cm4gbmV3IHQodGhpcy5vLHRoaXMuaCx0aGlzLmNvbnRhaW5lcix0aGlzLml0ZXJhdG9yVHlwZSl9fSxNYT1jbGFzcyBleHRlbmRzIGdwLkhhc2hDb250YWluZXJ7Y29uc3RydWN0b3IoZT1bXSl7c3VwZXIoKTtsZXQgcj10aGlzO2UuZm9yRWFjaChmdW5jdGlvbihpKXtyLmluc2VydChpKTt9KTt9YmVnaW4oKXtyZXR1cm4gbmV3IEFyKHRoaXMucCx0aGlzLmgsdGhpcyl9ZW5kKCl7cmV0dXJuIG5ldyBBcih0aGlzLmgsdGhpcy5oLHRoaXMpfXJCZWdpbigpe3JldHVybiBuZXcgQXIodGhpcy5fLHRoaXMuaCx0aGlzLDEpfXJFbmQoKXtyZXR1cm4gbmV3IEFyKHRoaXMuaCx0aGlzLmgsdGhpcywxKX1mcm9udCgpe3JldHVybiB0aGlzLnAudX1iYWNrKCl7cmV0dXJuIHRoaXMuXy51fWluc2VydChlLHIpe3JldHVybiB0aGlzLk0oZSx2b2lkIDAscil9Z2V0RWxlbWVudEJ5UG9zKGUpe2lmKGU8MHx8ZT50aGlzLmktMSl0aHJvdyBuZXcgUmFuZ2VFcnJvcjtsZXQgcj10aGlzLnA7Zm9yKDtlLS07KXI9ci5CO3JldHVybiByLnV9ZmluZChlLHIpe2xldCBpPXRoaXMuSShlLHIpO3JldHVybiBuZXcgQXIoaSx0aGlzLmgsdGhpcyl9Zm9yRWFjaChlKXtsZXQgcj0wLGk9dGhpcy5wO2Zvcig7aSE9PXRoaXMuaDspZShpLnUscisrLHRoaXMpLGk9aS5CO31bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBmdW5jdGlvbiooKXtsZXQgZT10aGlzLnA7Zm9yKDtlIT09dGhpcy5oOyl5aWVsZCBlLnUsZT1lLkI7fS5iaW5kKHRoaXMpKCl9fSxpdj1NYTtYbi5kZWZhdWx0PWl2O30pO3ZhciB3cD1NKFpuPT57XygpO3YoKTttKCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFpuLFwidFwiLHt2YWx1ZTohMH0pO1puLmRlZmF1bHQ9dm9pZCAwO3ZhciBicD14YSgpLG52PW92KEJhKCkpLHN2PXV0KCk7ZnVuY3Rpb24gb3YodCl7cmV0dXJuIHQmJnQudD90OntkZWZhdWx0OnR9fXZhciBJcj1jbGFzcyB0IGV4dGVuZHMgYnAuSGFzaENvbnRhaW5lckl0ZXJhdG9ye2NvbnN0cnVjdG9yKGUscixpLG4pe3N1cGVyKGUscixuKSx0aGlzLmNvbnRhaW5lcj1pO31nZXQgcG9pbnRlcigpe3RoaXMubz09PXRoaXMuaCYmKDAsIHN2LnRocm93SXRlcmF0b3JBY2Nlc3NFcnJvcikoKTtsZXQgZT10aGlzO3JldHVybiBuZXcgUHJveHkoW10se2dldChyLGkpe2lmKGk9PT1cIjBcIilyZXR1cm4gZS5vLnU7aWYoaT09PVwiMVwiKXJldHVybiBlLm8ubH0sc2V0KHIsaSxuKXtpZihpIT09XCIxXCIpdGhyb3cgbmV3IFR5cGVFcnJvcihcInByb3BzIG11c3QgYmUgMVwiKTtyZXR1cm4gZS5vLmw9biwhMH19KX1jb3B5KCl7cmV0dXJuIG5ldyB0KHRoaXMubyx0aGlzLmgsdGhpcy5jb250YWluZXIsdGhpcy5pdGVyYXRvclR5cGUpfX0sTGE9Y2xhc3MgZXh0ZW5kcyBicC5IYXNoQ29udGFpbmVye2NvbnN0cnVjdG9yKGU9W10pe3N1cGVyKCk7bGV0IHI9dGhpcztlLmZvckVhY2goZnVuY3Rpb24oaSl7ci5zZXRFbGVtZW50KGlbMF0saVsxXSk7fSk7fWJlZ2luKCl7cmV0dXJuIG5ldyBJcih0aGlzLnAsdGhpcy5oLHRoaXMpfWVuZCgpe3JldHVybiBuZXcgSXIodGhpcy5oLHRoaXMuaCx0aGlzKX1yQmVnaW4oKXtyZXR1cm4gbmV3IElyKHRoaXMuXyx0aGlzLmgsdGhpcywxKX1yRW5kKCl7cmV0dXJuIG5ldyBJcih0aGlzLmgsdGhpcy5oLHRoaXMsMSl9ZnJvbnQoKXtpZih0aGlzLmkhPT0wKXJldHVybiBbdGhpcy5wLnUsdGhpcy5wLmxdfWJhY2soKXtpZih0aGlzLmkhPT0wKXJldHVybiBbdGhpcy5fLnUsdGhpcy5fLmxdfXNldEVsZW1lbnQoZSxyLGkpe3JldHVybiB0aGlzLk0oZSxyLGkpfWdldEVsZW1lbnRCeUtleShlLHIpe2lmKHI9PT12b2lkIDAmJihyPSgwLCBudi5kZWZhdWx0KShlKSkscil7bGV0IG49ZVt0aGlzLkhBU0hfVEFHXTtyZXR1cm4gbiE9PXZvaWQgMD90aGlzLkhbbl0ubDp2b2lkIDB9bGV0IGk9dGhpcy5nW2VdO3JldHVybiBpP2kubDp2b2lkIDB9Z2V0RWxlbWVudEJ5UG9zKGUpe2lmKGU8MHx8ZT50aGlzLmktMSl0aHJvdyBuZXcgUmFuZ2VFcnJvcjtsZXQgcj10aGlzLnA7Zm9yKDtlLS07KXI9ci5CO3JldHVybiBbci51LHIubF19ZmluZChlLHIpe2xldCBpPXRoaXMuSShlLHIpO3JldHVybiBuZXcgSXIoaSx0aGlzLmgsdGhpcyl9Zm9yRWFjaChlKXtsZXQgcj0wLGk9dGhpcy5wO2Zvcig7aSE9PXRoaXMuaDspZShbaS51LGkubF0scisrLHRoaXMpLGk9aS5CO31bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBmdW5jdGlvbiooKXtsZXQgZT10aGlzLnA7Zm9yKDtlIT09dGhpcy5oOyl5aWVsZCBbZS51LGUubF0sZT1lLkI7fS5iaW5kKHRoaXMpKCl9fSxhdj1MYTtabi5kZWZhdWx0PWF2O30pO3ZhciBfcD1NKGplPT57XygpO3YoKTttKCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGplLFwidFwiLHt2YWx1ZTohMH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqZSxcIkRlcXVlXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGR2LmRlZmF1bHR9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGplLFwiSGFzaE1hcFwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBidi5kZWZhdWx0fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqZSxcIkhhc2hTZXRcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4geXYuZGVmYXVsdH19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoamUsXCJMaW5rTGlzdFwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBodi5kZWZhdWx0fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqZSxcIk9yZGVyZWRNYXBcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZ3YuZGVmYXVsdH19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoamUsXCJPcmRlcmVkU2V0XCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHB2LmRlZmF1bHR9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGplLFwiUHJpb3JpdHlRdWV1ZVwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBmdi5kZWZhdWx0fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqZSxcIlF1ZXVlXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHV2LmRlZmF1bHR9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGplLFwiU3RhY2tcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbHYuZGVmYXVsdH19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoamUsXCJWZWN0b3JcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY3YuZGVmYXVsdH19KTt2YXIgbHY9ZnQodHAoKSksdXY9ZnQocnAoKSksZnY9ZnQoaXAoKSksY3Y9ZnQobnAoKSksaHY9ZnQoc3AoKSksZHY9ZnQob3AoKSkscHY9ZnQoY3AoKSksZ3Y9ZnQoZHAoKSkseXY9ZnQoeXAoKSksYnY9ZnQod3AoKSk7ZnVuY3Rpb24gZnQodCl7cmV0dXJuIHQmJnQudD90OntkZWZhdWx0OnR9fX0pO3ZhciB2cD1NKChBTixtcCk9PntfKCk7digpO20oKTt2YXIgd3Y9X3AoKS5PcmRlcmVkU2V0LGN0PW90KCkoXCJudW1iZXItYWxsb2NhdG9yOnRyYWNlXCIpLF92PW90KCkoXCJudW1iZXItYWxsb2NhdG9yOmVycm9yXCIpO2Z1bmN0aW9uIFJlKHQsZSl7dGhpcy5sb3c9dCx0aGlzLmhpZ2g9ZTt9UmUucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sb3c9PT10LmxvdyYmdGhpcy5oaWdoPT09dC5oaWdofTtSZS5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sb3c8dC5sb3cmJnRoaXMuaGlnaDx0Lmxvdz8tMTp0Lmxvdzx0aGlzLmxvdyYmdC5oaWdoPHRoaXMubG93PzE6MH07ZnVuY3Rpb24gaHQodCxlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBodCkpcmV0dXJuIG5ldyBodCh0LGUpO3RoaXMubWluPXQsdGhpcy5tYXg9ZSx0aGlzLnNzPW5ldyB3dihbXSwocixpKT0+ci5jb21wYXJlKGkpKSxjdChcIkNyZWF0ZVwiKSx0aGlzLmNsZWFyKCk7fWh0LnByb3RvdHlwZS5maXJzdFZhY2FudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNzLnNpemUoKT09PTA/bnVsbDp0aGlzLnNzLmZyb250KCkubG93fTtodC5wcm90b3R5cGUuYWxsb2M9ZnVuY3Rpb24oKXtpZih0aGlzLnNzLnNpemUoKT09PTApcmV0dXJuIGN0KFwiYWxsb2MoKTplbXB0eVwiKSxudWxsO2xldCB0PXRoaXMuc3MuYmVnaW4oKSxlPXQucG9pbnRlci5sb3cscj10LnBvaW50ZXIuaGlnaCxpPWU7cmV0dXJuIGkrMTw9cj90aGlzLnNzLnVwZGF0ZUtleUJ5SXRlcmF0b3IodCxuZXcgUmUoZSsxLHIpKTp0aGlzLnNzLmVyYXNlRWxlbWVudEJ5UG9zKDApLGN0KFwiYWxsb2MoKTpcIitpKSxpfTtodC5wcm90b3R5cGUudXNlPWZ1bmN0aW9uKHQpe2xldCBlPW5ldyBSZSh0LHQpLHI9dGhpcy5zcy5sb3dlckJvdW5kKGUpO2lmKCFyLmVxdWFscyh0aGlzLnNzLmVuZCgpKSl7bGV0IGk9ci5wb2ludGVyLmxvdyxuPXIucG9pbnRlci5oaWdoO3JldHVybiByLnBvaW50ZXIuZXF1YWxzKGUpPyh0aGlzLnNzLmVyYXNlRWxlbWVudEJ5SXRlcmF0b3IociksY3QoXCJ1c2UoKTpcIit0KSwhMCk6aT50PyExOmk9PT10Pyh0aGlzLnNzLnVwZGF0ZUtleUJ5SXRlcmF0b3IocixuZXcgUmUoaSsxLG4pKSxjdChcInVzZSgpOlwiK3QpLCEwKTpuPT09dD8odGhpcy5zcy51cGRhdGVLZXlCeUl0ZXJhdG9yKHIsbmV3IFJlKGksbi0xKSksY3QoXCJ1c2UoKTpcIit0KSwhMCk6KHRoaXMuc3MudXBkYXRlS2V5QnlJdGVyYXRvcihyLG5ldyBSZSh0KzEsbikpLHRoaXMuc3MuaW5zZXJ0KG5ldyBSZShpLHQtMSkpLGN0KFwidXNlKCk6XCIrdCksITApfXJldHVybiBjdChcInVzZSgpOmZhaWxlZFwiKSwhMX07aHQucHJvdG90eXBlLmZyZWU9ZnVuY3Rpb24odCl7aWYodDx0aGlzLm1pbnx8dD50aGlzLm1heCl7X3YoXCJmcmVlKCk6XCIrdCtcIiBpcyBvdXQgb2YgcmFuZ2VcIik7cmV0dXJufWxldCBlPW5ldyBSZSh0LHQpLHI9dGhpcy5zcy51cHBlckJvdW5kKGUpO2lmKHIuZXF1YWxzKHRoaXMuc3MuZW5kKCkpKXtpZihyLmVxdWFscyh0aGlzLnNzLmJlZ2luKCkpKXt0aGlzLnNzLmluc2VydChlKTtyZXR1cm59ci5wcmUoKTtsZXQgaT1yLnBvaW50ZXIuaGlnaDtyLnBvaW50ZXIuaGlnaCsxPT09dD90aGlzLnNzLnVwZGF0ZUtleUJ5SXRlcmF0b3IocixuZXcgUmUoaSx0KSk6dGhpcy5zcy5pbnNlcnQoZSk7fWVsc2UgaWYoci5lcXVhbHModGhpcy5zcy5iZWdpbigpKSlpZih0KzE9PT1yLnBvaW50ZXIubG93KXtsZXQgaT1yLnBvaW50ZXIuaGlnaDt0aGlzLnNzLnVwZGF0ZUtleUJ5SXRlcmF0b3IocixuZXcgUmUodCxpKSk7fWVsc2UgdGhpcy5zcy5pbnNlcnQoZSk7ZWxzZSB7bGV0IGk9ci5wb2ludGVyLmxvdyxuPXIucG9pbnRlci5oaWdoO3IucHJlKCk7bGV0IG89ci5wb2ludGVyLmxvdztyLnBvaW50ZXIuaGlnaCsxPT09dD90KzE9PT1pPyh0aGlzLnNzLmVyYXNlRWxlbWVudEJ5SXRlcmF0b3IociksdGhpcy5zcy51cGRhdGVLZXlCeUl0ZXJhdG9yKHIsbmV3IFJlKG8sbikpKTp0aGlzLnNzLnVwZGF0ZUtleUJ5SXRlcmF0b3IocixuZXcgUmUobyx0KSk6dCsxPT09aT8odGhpcy5zcy5lcmFzZUVsZW1lbnRCeUl0ZXJhdG9yKHIubmV4dCgpKSx0aGlzLnNzLmluc2VydChuZXcgUmUodCxuKSkpOnRoaXMuc3MuaW5zZXJ0KGUpO31jdChcImZyZWUoKTpcIit0KTt9O2h0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe2N0KFwiY2xlYXIoKVwiKSx0aGlzLnNzLmNsZWFyKCksdGhpcy5zcy5pbnNlcnQobmV3IFJlKHRoaXMubWluLHRoaXMubWF4KSk7fTtodC5wcm90b3R5cGUuaW50ZXJ2YWxDb3VudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNzLnNpemUoKX07aHQucHJvdG90eXBlLmR1bXA9ZnVuY3Rpb24oKXtjb25zb2xlLmxvZyhcImxlbmd0aDpcIit0aGlzLnNzLnNpemUoKSk7Zm9yKGxldCB0IG9mIHRoaXMuc3MpY29uc29sZS5sb2codCk7fTttcC5leHBvcnRzPWh0O30pO3ZhciBVYT1NKChNTixFcCk9PntfKCk7digpO20oKTt2YXIgbXY9dnAoKTtFcC5leHBvcnRzLk51bWJlckFsbG9jYXRvcj1tdjt9KTt2YXIgU3A9TShxYT0+e18oKTt2KCk7bSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxYSxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgdnY9ZXAoKSxFdj1VYSgpLE5hPWNsYXNze2NvbnN0cnVjdG9yKGUpe2U+MCYmKHRoaXMuYWxpYXNUb1RvcGljPW5ldyB2di5MUlVDYWNoZSh7bWF4OmV9KSx0aGlzLnRvcGljVG9BbGlhcz17fSx0aGlzLm51bWJlckFsbG9jYXRvcj1uZXcgRXYuTnVtYmVyQWxsb2NhdG9yKDEsZSksdGhpcy5tYXg9ZSx0aGlzLmxlbmd0aD0wKTt9cHV0KGUscil7aWYocj09PTB8fHI+dGhpcy5tYXgpcmV0dXJuICExO2xldCBpPXRoaXMuYWxpYXNUb1RvcGljLmdldChyKTtyZXR1cm4gaSYmZGVsZXRlIHRoaXMudG9waWNUb0FsaWFzW2ldLHRoaXMuYWxpYXNUb1RvcGljLnNldChyLGUpLHRoaXMudG9waWNUb0FsaWFzW2VdPXIsdGhpcy5udW1iZXJBbGxvY2F0b3IudXNlKHIpLHRoaXMubGVuZ3RoPXRoaXMuYWxpYXNUb1RvcGljLnNpemUsITB9Z2V0VG9waWNCeUFsaWFzKGUpe3JldHVybiB0aGlzLmFsaWFzVG9Ub3BpYy5nZXQoZSl9Z2V0QWxpYXNCeVRvcGljKGUpe2xldCByPXRoaXMudG9waWNUb0FsaWFzW2VdO3JldHVybiB0eXBlb2YgcjxcInVcIiYmdGhpcy5hbGlhc1RvVG9waWMuZ2V0KHIpLHJ9Y2xlYXIoKXt0aGlzLmFsaWFzVG9Ub3BpYy5jbGVhcigpLHRoaXMudG9waWNUb0FsaWFzPXt9LHRoaXMubnVtYmVyQWxsb2NhdG9yLmNsZWFyKCksdGhpcy5sZW5ndGg9MDt9Z2V0THJ1QWxpYXMoKXtsZXQgZT10aGlzLm51bWJlckFsbG9jYXRvci5maXJzdFZhY2FudCgpO3JldHVybiBlfHxbLi4udGhpcy5hbGlhc1RvVG9waWMua2V5cygpXVt0aGlzLmFsaWFzVG9Ub3BpYy5zaXplLTFdfX07cWEuZGVmYXVsdD1OYTt9KTt2YXIgQXA9TShCaT0+e18oKTt2KCk7bSgpO3ZhciBTdj1CaSYmQmkuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlP3Q6e2RlZmF1bHQ6dH19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShCaSxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgQXY9VGkoKSxJdj1TdihTcCgpKSxUdj1fcigpLFJ2PSh0LGUpPT57dC5sb2coXCJfaGFuZGxlQ29ubmFja1wiKTtsZXR7b3B0aW9uczpyfT10LG49ci5wcm90b2NvbFZlcnNpb249PT01P2UucmVhc29uQ29kZTplLnJldHVybkNvZGU7aWYoY2xlYXJUaW1lb3V0KHQuY29ubmFja1RpbWVyKSxkZWxldGUgdC50b3BpY0FsaWFzU2VuZCxlLnByb3BlcnRpZXMpe2lmKGUucHJvcGVydGllcy50b3BpY0FsaWFzTWF4aW11bSl7aWYoZS5wcm9wZXJ0aWVzLnRvcGljQWxpYXNNYXhpbXVtPjY1NTM1KXt0LmVtaXQoXCJlcnJvclwiLG5ldyBFcnJvcihcInRvcGljQWxpYXNNYXhpbXVtIGZyb20gYnJva2VyIGlzIG91dCBvZiByYW5nZVwiKSk7cmV0dXJufWUucHJvcGVydGllcy50b3BpY0FsaWFzTWF4aW11bT4wJiYodC50b3BpY0FsaWFzU2VuZD1uZXcgSXYuZGVmYXVsdChlLnByb3BlcnRpZXMudG9waWNBbGlhc01heGltdW0pKTt9ZS5wcm9wZXJ0aWVzLnNlcnZlcktlZXBBbGl2ZSYmci5rZWVwYWxpdmUmJihyLmtlZXBhbGl2ZT1lLnByb3BlcnRpZXMuc2VydmVyS2VlcEFsaXZlKSxlLnByb3BlcnRpZXMubWF4aW11bVBhY2tldFNpemUmJihyLnByb3BlcnRpZXN8fChyLnByb3BlcnRpZXM9e30pLHIucHJvcGVydGllcy5tYXhpbXVtUGFja2V0U2l6ZT1lLnByb3BlcnRpZXMubWF4aW11bVBhY2tldFNpemUpO31pZihuPT09MCl0LnJlY29ubmVjdGluZz0hMSx0Ll9vbkNvbm5lY3QoZSk7ZWxzZSBpZihuPjApe2xldCBvPW5ldyBUdi5FcnJvcldpdGhSZWFzb25Db2RlKGBDb25uZWN0aW9uIHJlZnVzZWQ6ICR7QXYuUmVhc29uQ29kZXNbbl19YCxuKTt0LmVtaXQoXCJlcnJvclwiLG8pO319O0JpLmRlZmF1bHQ9UnY7fSk7dmFyIElwPU0oRGE9PntfKCk7digpO20oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGEsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIEN2PSh0LGUscik9Pnt0LmxvZyhcImhhbmRsaW5nIHB1YnJlbCBwYWNrZXRcIik7bGV0IGk9dHlwZW9mIHI8XCJ1XCI/cjp0Lm5vb3Ase21lc3NhZ2VJZDpufT1lLG89e2NtZDpcInB1YmNvbXBcIixtZXNzYWdlSWQ6bn07dC5pbmNvbWluZ1N0b3JlLmdldChlLChzLGEpPT57cz90Ll9zZW5kUGFja2V0KG8saSk6KHQuZW1pdChcIm1lc3NhZ2VcIixhLnRvcGljLGEucGF5bG9hZCxhKSx0LmhhbmRsZU1lc3NhZ2UoYSxsPT57aWYobClyZXR1cm4gaShsKTt0LmluY29taW5nU3RvcmUuZGVsKGEsdC5ub29wKSx0Ll9zZW5kUGFja2V0KG8saSk7fSkpO30pO307RGEuZGVmYXVsdD1Ddjt9KTt2YXIgVHA9TShQaT0+e18oKTt2KCk7bSgpO3ZhciBraT1QaSYmUGkuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlP3Q6e2RlZmF1bHQ6dH19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShQaSxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgQnY9a2koVmQoKSksUHY9a2koUWQoKSksa3Y9a2koQXAoKSksT3Y9a2koVGkoKSkseHY9a2koSXAoKSksTXY9KHQsZSxyKT0+e2xldHtvcHRpb25zOml9PXQ7aWYoaS5wcm90b2NvbFZlcnNpb249PT01JiZpLnByb3BlcnRpZXMmJmkucHJvcGVydGllcy5tYXhpbXVtUGFja2V0U2l6ZSYmaS5wcm9wZXJ0aWVzLm1heGltdW1QYWNrZXRTaXplPGUubGVuZ3RoKXJldHVybiB0LmVtaXQoXCJlcnJvclwiLG5ldyBFcnJvcihgZXhjZWVkaW5nIHBhY2tldHMgc2l6ZSAke2UuY21kfWApKSx0LmVuZCh7cmVhc29uQ29kZToxNDkscHJvcGVydGllczp7cmVhc29uU3RyaW5nOlwiTWF4aW11bSBwYWNrZXQgc2l6ZSB3YXMgZXhjZWVkZWRcIn19KSx0O3N3aXRjaCh0LmxvZyhcIl9oYW5kbGVQYWNrZXQgOjogZW1pdHRpbmcgcGFja2V0cmVjZWl2ZVwiKSx0LmVtaXQoXCJwYWNrZXRyZWNlaXZlXCIsZSksZS5jbWQpe2Nhc2VcInB1Ymxpc2hcIjooMCwgQnYuZGVmYXVsdCkodCxlLHIpO2JyZWFrO2Nhc2VcInB1YmFja1wiOmNhc2VcInB1YnJlY1wiOmNhc2VcInB1YmNvbXBcIjpjYXNlXCJzdWJhY2tcIjpjYXNlXCJ1bnN1YmFja1wiOnQucmVzY2hlZHVsZVBpbmcoKSwoMCwgT3YuZGVmYXVsdCkodCxlKSxyKCk7YnJlYWs7Y2FzZVwicHVicmVsXCI6dC5yZXNjaGVkdWxlUGluZygpLCgwLCB4di5kZWZhdWx0KSh0LGUscik7YnJlYWs7Y2FzZVwiY29ubmFja1wiOigwLCBrdi5kZWZhdWx0KSh0LGUpLHIoKTticmVhaztjYXNlXCJhdXRoXCI6dC5yZXNjaGVkdWxlUGluZygpLCgwLCBQdi5kZWZhdWx0KSh0LGUpLHIoKTticmVhaztjYXNlXCJwaW5ncmVzcFwiOnQubG9nKFwiX2hhbmRsZVBhY2tldCA6OiByZWNlaXZlZCBwaW5ncmVzcFwiKSx0LnJlc2NoZWR1bGVQaW5nKCEwKSxyKCk7YnJlYWs7Y2FzZVwiZGlzY29ubmVjdFwiOnQuZW1pdChcImRpc2Nvbm5lY3RcIixlKSxyKCk7YnJlYWs7ZGVmYXVsdDp0LmxvZyhcIl9oYW5kbGVQYWNrZXQgOjogdW5rbm93biBjb21tYW5kXCIpLHIoKTticmVha319O1BpLmRlZmF1bHQ9TXY7fSk7dmFyIFJwPU0ocmk9PntfKCk7digpO20oKTt2YXIgTHY9cmkmJnJpLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuX19lc01vZHVsZT90OntkZWZhdWx0OnR9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkocmksXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7cmkuVHlwZWRFdmVudEVtaXR0ZXI9dm9pZCAwO3ZhciBVdj1Mdigoc3IoKSxYKG5yKSkpLE52PV9yKCksZXM9Y2xhc3N7fTtyaS5UeXBlZEV2ZW50RW1pdHRlcj1lczsoMCwgTnYuYXBwbHlNaXhpbikoZXMsVXYuZGVmYXVsdCk7fSk7dmFyIE9pPU0oVHI9PntfKCk7digpO20oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVHIsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7VHIuaXNSZWFjdE5hdGl2ZUJyb3dzZXI9VHIuaXNXZWJXb3JrZXI9dm9pZCAwO3ZhciBxdj0oKT0+e3ZhciB0O3JldHVybiB0eXBlb2Ygd2luZG93PFwidVwiP3R5cGVvZiBuYXZpZ2F0b3I8XCJ1XCImJigodD1uYXZpZ2F0b3IudXNlckFnZW50KT09PW51bGx8fHQ9PT12b2lkIDA/dm9pZCAwOnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKFwiIGVsZWN0cm9uL1wiKSk+LTEmJighKEI9PT1udWxsfHxCPT09dm9pZCAwKSYmQi52ZXJzaW9ucyk/IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChCLnZlcnNpb25zLFwiZWxlY3Ryb25cIik6dHlwZW9mIHdpbmRvdy5kb2N1bWVudDxcInVcIjohMX0sQ3A9KCk9Pnt2YXIgdCxlO3JldHVybiAhISh0eXBlb2Ygc2VsZj09XCJvYmplY3RcIiYmKCEoKGU9KHQ9c2VsZj8uY29uc3RydWN0b3IpPT09bnVsbHx8dD09PXZvaWQgMD92b2lkIDA6dC5uYW1lKT09PW51bGx8fGU9PT12b2lkIDApJiZlLmluY2x1ZGVzKFwiV29ya2VyR2xvYmFsU2NvcGVcIikpKX0sQnA9KCk9PnR5cGVvZiBuYXZpZ2F0b3I8XCJ1XCImJm5hdmlnYXRvci5wcm9kdWN0PT09XCJSZWFjdE5hdGl2ZVwiLER2PXF2KCl8fENwKCl8fEJwKCk7VHIuaXNXZWJXb3JrZXI9Q3AoKTtUci5pc1JlYWN0TmF0aXZlQnJvd3Nlcj1CcCgpO1RyLmRlZmF1bHQ9RHY7fSk7dmFyIGtwPU0oKHRzLFBwKT0+e18oKTt2KCk7bSgpOyhmdW5jdGlvbih0LGUpe3R5cGVvZiB0cz09XCJvYmplY3RcIiYmdHlwZW9mIFBwPFwidVwiP2UodHMpOnR5cGVvZiBkZWZpbmU9PVwiZnVuY3Rpb25cIiYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZXhwb3J0c1wiXSxlKToodD10eXBlb2YgZ2xvYmFsVGhpczxcInVcIj9nbG9iYWxUaGlzOnR8fHNlbGYsZSh0LmZhc3RVbmlxdWVOdW1iZXJzPXt9KSk7fSkodHMsZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24oZyl7cmV0dXJuIGZ1bmN0aW9uKHkpe3ZhciB3PWcoeSk7cmV0dXJuIHkuYWRkKHcpLHd9fSxyPWZ1bmN0aW9uKGcpe3JldHVybiBmdW5jdGlvbih5LHcpe3JldHVybiBnLnNldCh5LHcpLHd9fSxpPU51bWJlci5NQVhfU0FGRV9JTlRFR0VSPT09dm9pZCAwPzkwMDcxOTkyNTQ3NDA5OTE6TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsbj01MzY4NzA5MTIsbz1uKjIscz1mdW5jdGlvbihnLHkpe3JldHVybiBmdW5jdGlvbih3KXt2YXIgUz15LmdldCh3KSxFPVM9PT12b2lkIDA/dy5zaXplOlM8bz9TKzE6MDtpZighdy5oYXMoRSkpcmV0dXJuIGcodyxFKTtpZih3LnNpemU8bil7Zm9yKDt3LmhhcyhFKTspRT1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbyk7cmV0dXJuIGcodyxFKX1pZih3LnNpemU+aSl0aHJvdyBuZXcgRXJyb3IoXCJDb25ncmF0dWxhdGlvbnMsIHlvdSBjcmVhdGVkIGEgY29sbGVjdGlvbiBvZiB1bmlxdWUgbnVtYmVycyB3aGljaCB1c2VzIGFsbCBhdmFpbGFibGUgaW50ZWdlcnMhXCIpO2Zvcig7dy5oYXMoRSk7KUU9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmkpO3JldHVybiBnKHcsRSl9fSxhPW5ldyBXZWFrTWFwLGw9cihhKSxjPXMobCxhKSxoPWUoYyk7dC5hZGRVbmlxdWVOdW1iZXI9aCx0LmdlbmVyYXRlVW5pcXVlTnVtYmVyPWM7fSk7fSk7dmFyIHhwPU0oKHJzLE9wKT0+e18oKTt2KCk7bSgpOyhmdW5jdGlvbih0LGUpe3R5cGVvZiBycz09XCJvYmplY3RcIiYmdHlwZW9mIE9wPFwidVwiP2UocnMsa3AoKSk6dHlwZW9mIGRlZmluZT09XCJmdW5jdGlvblwiJiZkZWZpbmUuYW1kP2RlZmluZShbXCJleHBvcnRzXCIsXCJmYXN0LXVuaXF1ZS1udW1iZXJzXCJdLGUpOih0PXR5cGVvZiBnbG9iYWxUaGlzPFwidVwiP2dsb2JhbFRoaXM6dHx8c2VsZixlKHQud29ya2VyVGltZXJzQnJva2VyPXt9LHQuZmFzdFVuaXF1ZU51bWJlcnMpKTt9KShycyxmdW5jdGlvbih0LGUpe3ZhciByPWZ1bmN0aW9uKHMpe3JldHVybiBzLm1ldGhvZCE9PXZvaWQgMCYmcy5tZXRob2Q9PT1cImNhbGxcIn0saT1mdW5jdGlvbihzKXtyZXR1cm4gcy5lcnJvcj09PW51bGwmJnR5cGVvZiBzLmlkPT1cIm51bWJlclwifSxuPWZ1bmN0aW9uKHMpe3ZhciBhPW5ldyBNYXAoW1swLGZ1bmN0aW9uKCl7fV1dKSxsPW5ldyBNYXAoW1swLGZ1bmN0aW9uKCl7fV1dKSxjPW5ldyBNYXAsaD1uZXcgV29ya2VyKHMpO2guYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIixmdW5jdGlvbihTKXt2YXIgRT1TLmRhdGE7aWYocihFKSl7dmFyIEk9RS5wYXJhbXMsQz1JLnRpbWVySWQsUj1JLnRpbWVyVHlwZTtpZihSPT09XCJpbnRlcnZhbFwiKXt2YXIgVT1hLmdldChDKTtpZih0eXBlb2YgVT09XCJudW1iZXJcIil7dmFyIE49Yy5nZXQoVSk7aWYoTj09PXZvaWQgMHx8Ti50aW1lcklkIT09Q3x8Ti50aW1lclR5cGUhPT1SKXRocm93IG5ldyBFcnJvcihcIlRoZSB0aW1lciBpcyBpbiBhbiB1bmRlZmluZWQgc3RhdGUuXCIpfWVsc2UgaWYodHlwZW9mIFU8XCJ1XCIpVSgpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHRpbWVyIGlzIGluIGFuIHVuZGVmaW5lZCBzdGF0ZS5cIil9ZWxzZSBpZihSPT09XCJ0aW1lb3V0XCIpe3ZhciBXPWwuZ2V0KEMpO2lmKHR5cGVvZiBXPT1cIm51bWJlclwiKXt2YXIgSz1jLmdldChXKTtpZihLPT09dm9pZCAwfHxLLnRpbWVySWQhPT1DfHxLLnRpbWVyVHlwZSE9PVIpdGhyb3cgbmV3IEVycm9yKFwiVGhlIHRpbWVyIGlzIGluIGFuIHVuZGVmaW5lZCBzdGF0ZS5cIil9ZWxzZSBpZih0eXBlb2YgVzxcInVcIilXKCksbC5kZWxldGUoQyk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgdGltZXIgaXMgaW4gYW4gdW5kZWZpbmVkIHN0YXRlLlwiKX19ZWxzZSBpZihpKEUpKXt2YXIgej1FLmlkLFE9Yy5nZXQoeik7aWYoUT09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoXCJUaGUgdGltZXIgaXMgaW4gYW4gdW5kZWZpbmVkIHN0YXRlLlwiKTt2YXIgcGU9US50aW1lcklkLFl0PVEudGltZXJUeXBlO2MuZGVsZXRlKHopLFl0PT09XCJpbnRlcnZhbFwiP2EuZGVsZXRlKHBlKTpsLmRlbGV0ZShwZSk7fWVsc2Uge3ZhciBnZT1FLmVycm9yLm1lc3NhZ2U7dGhyb3cgbmV3IEVycm9yKGdlKX19KTt2YXIgZD1mdW5jdGlvbihFKXt2YXIgST1lLmdlbmVyYXRlVW5pcXVlTnVtYmVyKGMpO2Muc2V0KEkse3RpbWVySWQ6RSx0aW1lclR5cGU6XCJpbnRlcnZhbFwifSksYS5zZXQoRSxJKSxoLnBvc3RNZXNzYWdlKHtpZDpJLG1ldGhvZDpcImNsZWFyXCIscGFyYW1zOnt0aW1lcklkOkUsdGltZXJUeXBlOlwiaW50ZXJ2YWxcIn19KTt9LGc9ZnVuY3Rpb24oRSl7dmFyIEk9ZS5nZW5lcmF0ZVVuaXF1ZU51bWJlcihjKTtjLnNldChJLHt0aW1lcklkOkUsdGltZXJUeXBlOlwidGltZW91dFwifSksbC5zZXQoRSxJKSxoLnBvc3RNZXNzYWdlKHtpZDpJLG1ldGhvZDpcImNsZWFyXCIscGFyYW1zOnt0aW1lcklkOkUsdGltZXJUeXBlOlwidGltZW91dFwifX0pO30seT1mdW5jdGlvbihFKXt2YXIgST1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06MCxDPWUuZ2VuZXJhdGVVbmlxdWVOdW1iZXIoYSk7cmV0dXJuIGEuc2V0KEMsZnVuY3Rpb24oKXtFKCksdHlwZW9mIGEuZ2V0KEMpPT1cImZ1bmN0aW9uXCImJmgucG9zdE1lc3NhZ2Uoe2lkOm51bGwsbWV0aG9kOlwic2V0XCIscGFyYW1zOntkZWxheTpJLG5vdzpwZXJmb3JtYW5jZS5ub3coKSx0aW1lcklkOkMsdGltZXJUeXBlOlwiaW50ZXJ2YWxcIn19KTt9KSxoLnBvc3RNZXNzYWdlKHtpZDpudWxsLG1ldGhvZDpcInNldFwiLHBhcmFtczp7ZGVsYXk6SSxub3c6cGVyZm9ybWFuY2Uubm93KCksdGltZXJJZDpDLHRpbWVyVHlwZTpcImludGVydmFsXCJ9fSksQ30sdz1mdW5jdGlvbihFKXt2YXIgST1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06MCxDPWUuZ2VuZXJhdGVVbmlxdWVOdW1iZXIobCk7cmV0dXJuIGwuc2V0KEMsRSksaC5wb3N0TWVzc2FnZSh7aWQ6bnVsbCxtZXRob2Q6XCJzZXRcIixwYXJhbXM6e2RlbGF5Okksbm93OnBlcmZvcm1hbmNlLm5vdygpLHRpbWVySWQ6Qyx0aW1lclR5cGU6XCJ0aW1lb3V0XCJ9fSksQ307cmV0dXJuIHtjbGVhckludGVydmFsOmQsY2xlYXJUaW1lb3V0Omcsc2V0SW50ZXJ2YWw6eSxzZXRUaW1lb3V0Ond9fTt0LmxvYWQ9bjt9KTt9KTt2YXIgTHA9TSgoaXMsTXApPT57XygpO3YoKTttKCk7KGZ1bmN0aW9uKHQsZSl7dHlwZW9mIGlzPT1cIm9iamVjdFwiJiZ0eXBlb2YgTXA8XCJ1XCI/ZShpcyx4cCgpKTp0eXBlb2YgZGVmaW5lPT1cImZ1bmN0aW9uXCImJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImV4cG9ydHNcIixcIndvcmtlci10aW1lcnMtYnJva2VyXCJdLGUpOih0PXR5cGVvZiBnbG9iYWxUaGlzPFwidVwiP2dsb2JhbFRoaXM6dHx8c2VsZixlKHQud29ya2VyVGltZXJzPXt9LHQud29ya2VyVGltZXJzQnJva2VyKSk7fSkoaXMsZnVuY3Rpb24odCxlKXt2YXIgcj1mdW5jdGlvbihoLGQpe3ZhciBnPW51bGw7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoZyE9PW51bGwpcmV0dXJuIGc7dmFyIHk9bmV3IEJsb2IoW2RdLHt0eXBlOlwiYXBwbGljYXRpb24vamF2YXNjcmlwdDsgY2hhcnNldD11dGYtOFwifSksdz1VUkwuY3JlYXRlT2JqZWN0VVJMKHkpO3JldHVybiBnPWgodyksc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBVUkwucmV2b2tlT2JqZWN0VVJMKHcpfSksZ319LGk9YCgoKT0+e3ZhciBlPXs0NzI6KGUsdCxyKT0+e3ZhciBvLGk7dm9pZCAwPT09KGk9XCJmdW5jdGlvblwiPT10eXBlb2Yobz1mdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBlPW5ldyBNYXAsdD1uZXcgTWFwLHI9ZnVuY3Rpb24odCl7dmFyIHI9ZS5nZXQodCk7aWYodm9pZCAwPT09cil0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIG5vIGludGVydmFsIHNjaGVkdWxlZCB3aXRoIHRoZSBnaXZlbiBpZCBcIicuY29uY2F0KHQsJ1wiLicpKTtjbGVhclRpbWVvdXQociksZS5kZWxldGUodCl9LG89ZnVuY3Rpb24oZSl7dmFyIHI9dC5nZXQoZSk7aWYodm9pZCAwPT09cil0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIG5vIHRpbWVvdXQgc2NoZWR1bGVkIHdpdGggdGhlIGdpdmVuIGlkIFwiJy5jb25jYXQoZSwnXCIuJykpO2NsZWFyVGltZW91dChyKSx0LmRlbGV0ZShlKX0saT1mdW5jdGlvbihlLHQpe3ZhciByLG89cGVyZm9ybWFuY2Uubm93KCk7cmV0dXJue2V4cGVjdGVkOm8rKHI9ZS1NYXRoLm1heCgwLG8tdCkpLHJlbWFpbmluZ0RlbGF5OnJ9fSxuPWZ1bmN0aW9uIGUodCxyLG8saSl7dmFyIG49cGVyZm9ybWFuY2Uubm93KCk7bj5vP3Bvc3RNZXNzYWdlKHtpZDpudWxsLG1ldGhvZDpcImNhbGxcIixwYXJhbXM6e3RpbWVySWQ6cix0aW1lclR5cGU6aX19KTp0LnNldChyLHNldFRpbWVvdXQoZSxvLW4sdCxyLG8saSkpfSxhPWZ1bmN0aW9uKHQscixvKXt2YXIgYT1pKHQsbykscz1hLmV4cGVjdGVkLGQ9YS5yZW1haW5pbmdEZWxheTtlLnNldChyLHNldFRpbWVvdXQobixkLGUscixzLFwiaW50ZXJ2YWxcIikpfSxzPWZ1bmN0aW9uKGUscixvKXt2YXIgYT1pKGUsbykscz1hLmV4cGVjdGVkLGQ9YS5yZW1haW5pbmdEZWxheTt0LnNldChyLHNldFRpbWVvdXQobixkLHQscixzLFwidGltZW91dFwiKSl9O2FkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsKGZ1bmN0aW9uKGUpe3ZhciB0PWUuZGF0YTt0cnl7aWYoXCJjbGVhclwiPT09dC5tZXRob2Qpe3ZhciBpPXQuaWQsbj10LnBhcmFtcyxkPW4udGltZXJJZCxjPW4udGltZXJUeXBlO2lmKFwiaW50ZXJ2YWxcIj09PWMpcihkKSxwb3N0TWVzc2FnZSh7ZXJyb3I6bnVsbCxpZDppfSk7ZWxzZXtpZihcInRpbWVvdXRcIiE9PWMpdGhyb3cgbmV3IEVycm9yKCdUaGUgZ2l2ZW4gdHlwZSBcIicuY29uY2F0KGMsJ1wiIGlzIG5vdCBzdXBwb3J0ZWQnKSk7byhkKSxwb3N0TWVzc2FnZSh7ZXJyb3I6bnVsbCxpZDppfSl9fWVsc2V7aWYoXCJzZXRcIiE9PXQubWV0aG9kKXRocm93IG5ldyBFcnJvcignVGhlIGdpdmVuIG1ldGhvZCBcIicuY29uY2F0KHQubWV0aG9kLCdcIiBpcyBub3Qgc3VwcG9ydGVkJykpO3ZhciB1PXQucGFyYW1zLGw9dS5kZWxheSxwPXUubm93LG09dS50aW1lcklkLHY9dS50aW1lclR5cGU7aWYoXCJpbnRlcnZhbFwiPT09dilhKGwsbSxwKTtlbHNle2lmKFwidGltZW91dFwiIT09dil0aHJvdyBuZXcgRXJyb3IoJ1RoZSBnaXZlbiB0eXBlIFwiJy5jb25jYXQodiwnXCIgaXMgbm90IHN1cHBvcnRlZCcpKTtzKGwsbSxwKX19fWNhdGNoKGUpe3Bvc3RNZXNzYWdlKHtlcnJvcjp7bWVzc2FnZTplLm1lc3NhZ2V9LGlkOnQuaWQscmVzdWx0Om51bGx9KX19KSl9KT9vLmNhbGwodCxyLHQsZSk6byl8fChlLmV4cG9ydHM9aSl9fSx0PXt9O2Z1bmN0aW9uIHIobyl7dmFyIGk9dFtvXTtpZih2b2lkIDAhPT1pKXJldHVybiBpLmV4cG9ydHM7dmFyIG49dFtvXT17ZXhwb3J0czp7fX07cmV0dXJuIGVbb10obixuLmV4cG9ydHMsciksbi5leHBvcnRzfXIubj1lPT57dmFyIHQ9ZSYmZS5fX2VzTW9kdWxlPygpPT5lLmRlZmF1bHQ6KCk9PmU7cmV0dXJuIHIuZCh0LHthOnR9KSx0fSxyLmQ9KGUsdCk9Pntmb3IodmFyIG8gaW4gdClyLm8odCxvKSYmIXIubyhlLG8pJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxvLHtlbnVtZXJhYmxlOiEwLGdldDp0W29dfSl9LHIubz0oZSx0KT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCksKCgpPT57XCJ1c2Ugc3RyaWN0XCI7cig0NzIpfSkoKX0pKCk7YCxuPXIoZS5sb2FkLGkpLG89ZnVuY3Rpb24oaCl7cmV0dXJuIG4oKS5jbGVhckludGVydmFsKGgpfSxzPWZ1bmN0aW9uKGgpe3JldHVybiBuKCkuY2xlYXJUaW1lb3V0KGgpfSxhPWZ1bmN0aW9uKCl7dmFyIGg7cmV0dXJuIChoPW4oKSkuc2V0SW50ZXJ2YWwuYXBwbHkoaCxhcmd1bWVudHMpfSxsPWZ1bmN0aW9uKCl7dmFyIGg7cmV0dXJuIChoPW4oKSkuc2V0VGltZW91dC5hcHBseShoLGFyZ3VtZW50cyl9O3QuY2xlYXJJbnRlcnZhbD1vLHQuY2xlYXJUaW1lb3V0PXMsdC5zZXRJbnRlcnZhbD1hLHQuc2V0VGltZW91dD1sO30pO30pO3ZhciBEcD1NKEN0PT57XygpO3YoKTttKCk7dmFyIGp2PUN0JiZDdC5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHQsZSxyLGkpe2k9PT12b2lkIDAmJihpPXIpO3ZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxyKTsoIW58fChcImdldFwiaW4gbj8hZS5fX2VzTW9kdWxlOm4ud3JpdGFibGV8fG4uY29uZmlndXJhYmxlKSkmJihuPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlW3JdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGksbik7fTpmdW5jdGlvbih0LGUscixpKXtpPT09dm9pZCAwJiYoaT1yKSx0W2ldPWVbcl07fSksRnY9Q3QmJkN0Ll9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24odCxlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcImRlZmF1bHRcIix7ZW51bWVyYWJsZTohMCx2YWx1ZTplfSk7fTpmdW5jdGlvbih0LGUpe3QuZGVmYXVsdD1lO30pLFd2PUN0JiZDdC5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKHQpe2lmKHQmJnQuX19lc01vZHVsZSlyZXR1cm4gdDt2YXIgZT17fTtpZih0IT1udWxsKWZvcih2YXIgciBpbiB0KXIhPT1cImRlZmF1bHRcIiYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscikmJmp2KGUsdCxyKTtyZXR1cm4gRnYoZSx0KSxlfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQ3QsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIGphPVd2KE9pKCkpLFVwPUxwKCksTnA9e3NldDpVcC5zZXRJbnRlcnZhbCxjbGVhcjpVcC5jbGVhckludGVydmFsfSxxcD17c2V0Oih0LGUpPT5zZXRJbnRlcnZhbCh0LGUpLGNsZWFyOnQ9PmNsZWFySW50ZXJ2YWwodCl9LCR2PXQ9Pntzd2l0Y2godCl7Y2FzZVwibmF0aXZlXCI6cmV0dXJuIHFwO2Nhc2VcIndvcmtlclwiOnJldHVybiBOcDtjYXNlXCJhdXRvXCI6ZGVmYXVsdDpyZXR1cm4gamEuZGVmYXVsdCYmIWphLmlzV2ViV29ya2VyJiYhamEuaXNSZWFjdE5hdGl2ZUJyb3dzZXI/TnA6cXB9fTtDdC5kZWZhdWx0PSR2O30pO3ZhciBXYT1NKHhpPT57XygpO3YoKTttKCk7dmFyIEh2PXhpJiZ4aS5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7ZGVmYXVsdDp0fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHhpLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBWdj1IdihEcCgpKSxGYT1jbGFzc3tnZXQga2VlcGFsaXZlVGltZW91dFRpbWVzdGFtcCgpe3JldHVybiB0aGlzLl9rZWVwYWxpdmVUaW1lb3V0VGltZXN0YW1wfWdldCBpbnRlcnZhbEV2ZXJ5KCl7cmV0dXJuIHRoaXMuX2ludGVydmFsRXZlcnl9Z2V0IGtlZXBhbGl2ZSgpe3JldHVybiB0aGlzLl9rZWVwYWxpdmV9Y29uc3RydWN0b3IoZSxyKXt0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmNsaWVudD1lLHRoaXMudGltZXI9dHlwZW9mIHI9PVwib2JqZWN0XCImJlwic2V0XCJpbiByJiZcImNsZWFyXCJpbiByP3I6KDAsIFZ2LmRlZmF1bHQpKHIpLHRoaXMuc2V0S2VlcGFsaXZlKGUub3B0aW9ucy5rZWVwYWxpdmUpO31jbGVhcigpe3RoaXMudGltZXJJZCYmKHRoaXMudGltZXIuY2xlYXIodGhpcy50aW1lcklkKSx0aGlzLnRpbWVySWQ9bnVsbCk7fXNldEtlZXBhbGl2ZShlKXtpZihlKj0xZTMsaXNOYU4oZSl8fGU8PTB8fGU+MjE0NzQ4MzY0Nyl0aHJvdyBuZXcgRXJyb3IoYEtlZXBhbGl2ZSB2YWx1ZSBtdXN0IGJlIGFuIGludGVnZXIgYmV0d2VlbiAwIGFuZCAyMTQ3NDgzNjQ3LiBQcm92aWRlZCB2YWx1ZSBpcyAke2V9YCk7dGhpcy5fa2VlcGFsaXZlPWUsdGhpcy5yZXNjaGVkdWxlKCksdGhpcy5jbGllbnQubG9nKGBLZWVwYWxpdmVNYW5hZ2VyOiBzZXQga2VlcGFsaXZlIHRvICR7ZX1tc2ApO31kZXN0cm95KCl7dGhpcy5jbGVhcigpLHRoaXMuZGVzdHJveWVkPSEwO31yZXNjaGVkdWxlKCl7aWYodGhpcy5kZXN0cm95ZWQpcmV0dXJuO3RoaXMuY2xlYXIoKSx0aGlzLmNvdW50ZXI9MDtsZXQgZT1NYXRoLmNlaWwodGhpcy5fa2VlcGFsaXZlKjEuNSk7dGhpcy5fa2VlcGFsaXZlVGltZW91dFRpbWVzdGFtcD1EYXRlLm5vdygpK2UsdGhpcy5faW50ZXJ2YWxFdmVyeT1NYXRoLmNlaWwodGhpcy5fa2VlcGFsaXZlLzIpLHRoaXMudGltZXJJZD10aGlzLnRpbWVyLnNldCgoKT0+e3RoaXMuZGVzdHJveWVkfHwodGhpcy5jb3VudGVyKz0xLHRoaXMuY291bnRlcj09PTI/dGhpcy5jbGllbnQuc2VuZFBpbmcoKTp0aGlzLmNvdW50ZXI+MiYmdGhpcy5jbGllbnQub25LZWVwYWxpdmVUaW1lb3V0KCkpO30sdGhpcy5faW50ZXJ2YWxFdmVyeSk7fX07eGkuZGVmYXVsdD1GYTt9KTt2YXIgb3M9TShRZT0+e18oKTt2KCk7bSgpO3ZhciB6dj1RZSYmUWUuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbih0LGUscixpKXtpPT09dm9pZCAwJiYoaT1yKTt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUscik7KCFufHwoXCJnZXRcImluIG4/IWUuX19lc01vZHVsZTpuLndyaXRhYmxlfHxuLmNvbmZpZ3VyYWJsZSkpJiYobj17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZVtyXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxpLG4pO306ZnVuY3Rpb24odCxlLHIsaSl7aT09PXZvaWQgMCYmKGk9ciksdFtpXT1lW3JdO30pLEt2PVFlJiZRZS5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6ZX0pO306ZnVuY3Rpb24odCxlKXt0LmRlZmF1bHQ9ZTt9KSxIcD1RZSYmUWUuX19pbXBvcnRTdGFyfHxmdW5jdGlvbih0KXtpZih0JiZ0Ll9fZXNNb2R1bGUpcmV0dXJuIHQ7dmFyIGU9e307aWYodCE9bnVsbClmb3IodmFyIHIgaW4gdClyIT09XCJkZWZhdWx0XCImJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LHIpJiZ6dihlLHQscik7cmV0dXJuIEt2KGUsdCksZX0senQ9UWUmJlFlLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuX19lc01vZHVsZT90OntkZWZhdWx0OnR9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoUWUsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIEd2PXp0KEd1KCkpLCRhPXp0KE5kKCkpLFF2PXp0KFpvKCkpLFl2PWp0KCksanA9enQoRmQoKSksRnA9SHAoJGQoKSksSnY9enQob3QoKSksaWk9enQocmEoKSksWHY9enQoVHAoKSksbnM9X3IoKSxadj1ScCgpLGVFPXp0KFdhKCkpLFdwPUhwKE9pKCkpLEhhPWdsb2JhbFRoaXMuc2V0SW1tZWRpYXRlfHwoKC4uLnQpPT57bGV0IGU9dC5zaGlmdCgpOygwLCBucy5uZXh0VGljaykoKCk9PntlKC4uLnQpO30pO30pLCRwPXtrZWVwYWxpdmU6NjAscmVzY2hlZHVsZVBpbmdzOiEwLHByb3RvY29sSWQ6XCJNUVRUXCIscHJvdG9jb2xWZXJzaW9uOjQscmVjb25uZWN0UGVyaW9kOjFlMyxjb25uZWN0VGltZW91dDozMCoxZTMsY2xlYW46ITAscmVzdWJzY3JpYmU6ITAsd3JpdGVDYWNoZTohMCx0aW1lclZhcmlhbnQ6XCJhdXRvXCJ9LHNzPWNsYXNzIHQgZXh0ZW5kcyBadi5UeXBlZEV2ZW50RW1pdHRlcntzdGF0aWMgZGVmYXVsdElkKCl7cmV0dXJuIGBtcXR0anNfJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDE2KS5zdWJzdHIoMiw4KX1gfWNvbnN0cnVjdG9yKGUscil7c3VwZXIoKSx0aGlzLm9wdGlvbnM9cnx8e307Zm9yKGxldCBpIGluICRwKXR5cGVvZiB0aGlzLm9wdGlvbnNbaV0+XCJ1XCI/dGhpcy5vcHRpb25zW2ldPSRwW2ldOnRoaXMub3B0aW9uc1tpXT1yW2ldO3RoaXMubG9nPXRoaXMub3B0aW9ucy5sb2d8fCgwLCBKdi5kZWZhdWx0KShcIm1xdHRqczpjbGllbnRcIiksdGhpcy5ub29wPXRoaXMuX25vb3AuYmluZCh0aGlzKSx0aGlzLmxvZyhcIk1xdHRDbGllbnQgOjogdmVyc2lvbjpcIix0LlZFUlNJT04pLFdwLmlzV2ViV29ya2VyP3RoaXMubG9nKFwiTXF0dENsaWVudCA6OiBlbnZpcm9ubWVudFwiLFwid2Vid29ya2VyXCIpOnRoaXMubG9nKFwiTXF0dENsaWVudCA6OiBlbnZpcm9ubWVudFwiLFdwLmRlZmF1bHQ/XCJicm93c2VyXCI6XCJub2RlXCIpLHRoaXMubG9nKFwiTXF0dENsaWVudCA6OiBvcHRpb25zLnByb3RvY29sXCIsci5wcm90b2NvbCksdGhpcy5sb2coXCJNcXR0Q2xpZW50IDo6IG9wdGlvbnMucHJvdG9jb2xWZXJzaW9uXCIsci5wcm90b2NvbFZlcnNpb24pLHRoaXMubG9nKFwiTXF0dENsaWVudCA6OiBvcHRpb25zLnVzZXJuYW1lXCIsci51c2VybmFtZSksdGhpcy5sb2coXCJNcXR0Q2xpZW50IDo6IG9wdGlvbnMua2VlcGFsaXZlXCIsci5rZWVwYWxpdmUpLHRoaXMubG9nKFwiTXF0dENsaWVudCA6OiBvcHRpb25zLnJlY29ubmVjdFBlcmlvZFwiLHIucmVjb25uZWN0UGVyaW9kKSx0aGlzLmxvZyhcIk1xdHRDbGllbnQgOjogb3B0aW9ucy5yZWplY3RVbmF1dGhvcml6ZWRcIixyLnJlamVjdFVuYXV0aG9yaXplZCksdGhpcy5sb2coXCJNcXR0Q2xpZW50IDo6IG9wdGlvbnMucHJvcGVydGllcy50b3BpY0FsaWFzTWF4aW11bVwiLHIucHJvcGVydGllcz9yLnByb3BlcnRpZXMudG9waWNBbGlhc01heGltdW06dm9pZCAwKSx0aGlzLm9wdGlvbnMuY2xpZW50SWQ9dHlwZW9mIHIuY2xpZW50SWQ9PVwic3RyaW5nXCI/ci5jbGllbnRJZDp0LmRlZmF1bHRJZCgpLHRoaXMubG9nKFwiTXF0dENsaWVudCA6OiBjbGllbnRJZFwiLHRoaXMub3B0aW9ucy5jbGllbnRJZCksdGhpcy5vcHRpb25zLmN1c3RvbUhhbmRsZUFja3M9ci5wcm90b2NvbFZlcnNpb249PT01JiZyLmN1c3RvbUhhbmRsZUFja3M/ci5jdXN0b21IYW5kbGVBY2tzOiguLi5pKT0+e2lbM10obnVsbCwwKTt9LHRoaXMub3B0aW9ucy53cml0ZUNhY2hlfHwoJGEuZGVmYXVsdC53cml0ZVRvU3RyZWFtLmNhY2hlTnVtYmVycz0hMSksdGhpcy5zdHJlYW1CdWlsZGVyPWUsdGhpcy5tZXNzYWdlSWRQcm92aWRlcj10eXBlb2YgdGhpcy5vcHRpb25zLm1lc3NhZ2VJZFByb3ZpZGVyPlwidVwiP25ldyBRdi5kZWZhdWx0OnRoaXMub3B0aW9ucy5tZXNzYWdlSWRQcm92aWRlcix0aGlzLm91dGdvaW5nU3RvcmU9ci5vdXRnb2luZ1N0b3JlfHxuZXcgaWkuZGVmYXVsdCx0aGlzLmluY29taW5nU3RvcmU9ci5pbmNvbWluZ1N0b3JlfHxuZXcgaWkuZGVmYXVsdCx0aGlzLnF1ZXVlUW9TWmVybz1yLnF1ZXVlUW9TWmVybz09PXZvaWQgMD8hMDpyLnF1ZXVlUW9TWmVybyx0aGlzLl9yZXN1YnNjcmliZVRvcGljcz17fSx0aGlzLm1lc3NhZ2VJZFRvVG9waWM9e30sdGhpcy5rZWVwYWxpdmVNYW5hZ2VyPW51bGwsdGhpcy5jb25uZWN0ZWQ9ITEsdGhpcy5kaXNjb25uZWN0aW5nPSExLHRoaXMucmVjb25uZWN0aW5nPSExLHRoaXMucXVldWU9W10sdGhpcy5jb25uYWNrVGltZXI9bnVsbCx0aGlzLnJlY29ubmVjdFRpbWVyPW51bGwsdGhpcy5fc3RvcmVQcm9jZXNzaW5nPSExLHRoaXMuX3BhY2tldElkc0R1cmluZ1N0b3JlUHJvY2Vzc2luZz17fSx0aGlzLl9zdG9yZVByb2Nlc3NpbmdRdWV1ZT1bXSx0aGlzLm91dGdvaW5nPXt9LHRoaXMuX2ZpcnN0Q29ubmVjdGlvbj0hMCxyLnByb3BlcnRpZXMmJnIucHJvcGVydGllcy50b3BpY0FsaWFzTWF4aW11bT4wJiYoci5wcm9wZXJ0aWVzLnRvcGljQWxpYXNNYXhpbXVtPjY1NTM1P3RoaXMubG9nKFwiTXF0dENsaWVudCA6OiBvcHRpb25zLnByb3BlcnRpZXMudG9waWNBbGlhc01heGltdW0gaXMgb3V0IG9mIHJhbmdlXCIpOnRoaXMudG9waWNBbGlhc1JlY3Y9bmV3IEd2LmRlZmF1bHQoci5wcm9wZXJ0aWVzLnRvcGljQWxpYXNNYXhpbXVtKSksdGhpcy5vbihcImNvbm5lY3RcIiwoKT0+e2xldHtxdWV1ZTppfT10aGlzLG49KCk9PntsZXQgbz1pLnNoaWZ0KCk7dGhpcy5sb2coXCJkZWxpdmVyIDo6IGVudHJ5ICVvXCIsbyk7bGV0IHM9bnVsbDtpZighbyl7dGhpcy5fcmVzdWJzY3JpYmUoKTtyZXR1cm59cz1vLnBhY2tldCx0aGlzLmxvZyhcImRlbGl2ZXIgOjogY2FsbCBfc2VuZFBhY2tldCBmb3IgJW9cIixzKTtsZXQgYT0hMDtzLm1lc3NhZ2VJZCYmcy5tZXNzYWdlSWQhPT0wJiYodGhpcy5tZXNzYWdlSWRQcm92aWRlci5yZWdpc3RlcihzLm1lc3NhZ2VJZCl8fChhPSExKSksYT90aGlzLl9zZW5kUGFja2V0KHMsbD0+e28uY2ImJm8uY2IobCksbigpO30pOih0aGlzLmxvZyhcIm1lc3NhZ2VJZDogJWQgaGFzIGFscmVhZHkgdXNlZC4gVGhlIG1lc3NhZ2UgaXMgc2tpcHBlZCBhbmQgcmVtb3ZlZC5cIixzLm1lc3NhZ2VJZCksbigpKTt9O3RoaXMubG9nKFwiY29ubmVjdCA6OiBzZW5kaW5nIHF1ZXVlZCBwYWNrZXRzXCIpLG4oKTt9KSx0aGlzLm9uKFwiY2xvc2VcIiwoKT0+e3RoaXMubG9nKFwiY2xvc2UgOjogY29ubmVjdGVkIHNldCB0byBgZmFsc2VgXCIpLHRoaXMuY29ubmVjdGVkPSExLHRoaXMubG9nKFwiY2xvc2UgOjogY2xlYXJpbmcgY29ubmFja1RpbWVyXCIpLGNsZWFyVGltZW91dCh0aGlzLmNvbm5hY2tUaW1lciksdGhpcy5fZGVzdHJveUtlZXBhbGl2ZU1hbmFnZXIoKSx0aGlzLnRvcGljQWxpYXNSZWN2JiZ0aGlzLnRvcGljQWxpYXNSZWN2LmNsZWFyKCksdGhpcy5sb2coXCJjbG9zZSA6OiBjYWxsaW5nIF9zZXR1cFJlY29ubmVjdFwiKSx0aGlzLl9zZXR1cFJlY29ubmVjdCgpO30pLHRoaXMub3B0aW9ucy5tYW51YWxDb25uZWN0fHwodGhpcy5sb2coXCJNcXR0Q2xpZW50IDo6IHNldHRpbmcgdXAgc3RyZWFtXCIpLHRoaXMuY29ubmVjdCgpKTt9aGFuZGxlQXV0aChlLHIpe3IoKTt9aGFuZGxlTWVzc2FnZShlLHIpe3IoKTt9X25leHRJZCgpe3JldHVybiB0aGlzLm1lc3NhZ2VJZFByb3ZpZGVyLmFsbG9jYXRlKCl9Z2V0TGFzdE1lc3NhZ2VJZCgpe3JldHVybiB0aGlzLm1lc3NhZ2VJZFByb3ZpZGVyLmdldExhc3RBbGxvY2F0ZWQoKX1jb25uZWN0KCl7dmFyIGU7bGV0IHI9bmV3IFl2LldyaXRhYmxlLGk9JGEuZGVmYXVsdC5wYXJzZXIodGhpcy5vcHRpb25zKSxuPW51bGwsbz1bXTt0aGlzLmxvZyhcImNvbm5lY3QgOjogY2FsbGluZyBtZXRob2QgdG8gY2xlYXIgcmVjb25uZWN0XCIpLHRoaXMuX2NsZWFyUmVjb25uZWN0KCksdGhpcy5kaXNjb25uZWN0ZWQmJiF0aGlzLnJlY29ubmVjdGluZyYmKHRoaXMuaW5jb21pbmdTdG9yZT10aGlzLm9wdGlvbnMuaW5jb21pbmdTdG9yZXx8bmV3IGlpLmRlZmF1bHQsdGhpcy5vdXRnb2luZ1N0b3JlPXRoaXMub3B0aW9ucy5vdXRnb2luZ1N0b3JlfHxuZXcgaWkuZGVmYXVsdCx0aGlzLmRpc2Nvbm5lY3Rpbmc9ITEsdGhpcy5kaXNjb25uZWN0ZWQ9ITEpLHRoaXMubG9nKFwiY29ubmVjdCA6OiB1c2luZyBzdHJlYW1CdWlsZGVyIHByb3ZpZGVkIHRvIGNsaWVudCB0byBjcmVhdGUgc3RyZWFtXCIpLHRoaXMuc3RyZWFtPXRoaXMuc3RyZWFtQnVpbGRlcih0aGlzKSxpLm9uKFwicGFja2V0XCIsaD0+e3RoaXMubG9nKFwicGFyc2VyIDo6IG9uIHBhY2tldCBwdXNoIHRvIHBhY2tldHMgYXJyYXkuXCIpLG8ucHVzaChoKTt9KTtsZXQgcz0oKT0+e3RoaXMubG9nKFwid29yayA6OiBnZXR0aW5nIG5leHQgcGFja2V0IGluIHF1ZXVlXCIpO2xldCBoPW8uc2hpZnQoKTtpZihoKXRoaXMubG9nKFwid29yayA6OiBwYWNrZXQgcHVsbGVkIGZyb20gcXVldWVcIiksKDAsIFh2LmRlZmF1bHQpKHRoaXMsaCxhKTtlbHNlIHt0aGlzLmxvZyhcIndvcmsgOjogbm8gcGFja2V0cyBpbiBxdWV1ZVwiKTtsZXQgZD1uO249bnVsbCx0aGlzLmxvZyhcIndvcmsgOjogZG9uZSBmbGFnIGlzICVzXCIsISFkKSxkJiZkKCk7fX0sYT0oKT0+e2lmKG8ubGVuZ3RoKSgwLCBucy5uZXh0VGljaykocyk7ZWxzZSB7bGV0IGg9bjtuPW51bGwsaCgpO319O3IuX3dyaXRlPShoLGQsZyk9PntuPWcsdGhpcy5sb2coXCJ3cml0YWJsZSBzdHJlYW0gOjogcGFyc2luZyBidWZmZXJcIiksaS5wYXJzZShoKSxzKCk7fTtsZXQgbD1oPT57dGhpcy5sb2coXCJzdHJlYW1FcnJvckhhbmRsZXIgOjogZXJyb3JcIixoLm1lc3NhZ2UpLGguY29kZT8odGhpcy5sb2coXCJzdHJlYW1FcnJvckhhbmRsZXIgOjogZW1pdHRpbmcgZXJyb3JcIiksdGhpcy5lbWl0KFwiZXJyb3JcIixoKSk6dGhpcy5ub29wKGgpO307dGhpcy5sb2coXCJjb25uZWN0IDo6IHBpcGUgc3RyZWFtIHRvIHdyaXRhYmxlIHN0cmVhbVwiKSx0aGlzLnN0cmVhbS5waXBlKHIpLHRoaXMuc3RyZWFtLm9uKFwiZXJyb3JcIixsKSx0aGlzLnN0cmVhbS5vbihcImNsb3NlXCIsKCk9Pnt0aGlzLmxvZyhcIiglcylzdHJlYW0gOjogb24gY2xvc2VcIix0aGlzLm9wdGlvbnMuY2xpZW50SWQpLHRoaXMuX2ZsdXNoVm9sYXRpbGUoKSx0aGlzLmxvZyhcInN0cmVhbTogZW1pdCBjbG9zZSB0byBNcXR0Q2xpZW50XCIpLHRoaXMuZW1pdChcImNsb3NlXCIpO30pLHRoaXMubG9nKFwiY29ubmVjdDogc2VuZGluZyBwYWNrZXQgYGNvbm5lY3RgXCIpO2xldCBjPXtjbWQ6XCJjb25uZWN0XCIscHJvdG9jb2xJZDp0aGlzLm9wdGlvbnMucHJvdG9jb2xJZCxwcm90b2NvbFZlcnNpb246dGhpcy5vcHRpb25zLnByb3RvY29sVmVyc2lvbixjbGVhbjp0aGlzLm9wdGlvbnMuY2xlYW4sY2xpZW50SWQ6dGhpcy5vcHRpb25zLmNsaWVudElkLGtlZXBhbGl2ZTp0aGlzLm9wdGlvbnMua2VlcGFsaXZlLHVzZXJuYW1lOnRoaXMub3B0aW9ucy51c2VybmFtZSxwYXNzd29yZDp0aGlzLm9wdGlvbnMucGFzc3dvcmQscHJvcGVydGllczp0aGlzLm9wdGlvbnMucHJvcGVydGllc307aWYodGhpcy5vcHRpb25zLndpbGwmJihjLndpbGw9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMub3B0aW9ucy53aWxsKSx7cGF5bG9hZDooZT10aGlzLm9wdGlvbnMud2lsbCk9PT1udWxsfHxlPT09dm9pZCAwP3ZvaWQgMDplLnBheWxvYWR9KSksdGhpcy50b3BpY0FsaWFzUmVjdiYmKGMucHJvcGVydGllc3x8KGMucHJvcGVydGllcz17fSksdGhpcy50b3BpY0FsaWFzUmVjdiYmKGMucHJvcGVydGllcy50b3BpY0FsaWFzTWF4aW11bT10aGlzLnRvcGljQWxpYXNSZWN2Lm1heCkpLHRoaXMuX3dyaXRlUGFja2V0KGMpLGkub24oXCJlcnJvclwiLHRoaXMuZW1pdC5iaW5kKHRoaXMsXCJlcnJvclwiKSksdGhpcy5vcHRpb25zLnByb3BlcnRpZXMpe2lmKCF0aGlzLm9wdGlvbnMucHJvcGVydGllcy5hdXRoZW50aWNhdGlvbk1ldGhvZCYmdGhpcy5vcHRpb25zLnByb3BlcnRpZXMuYXV0aGVudGljYXRpb25EYXRhKXJldHVybiB0aGlzLmVuZCgoKT0+dGhpcy5lbWl0KFwiZXJyb3JcIixuZXcgRXJyb3IoXCJQYWNrZXQgaGFzIG5vIEF1dGhlbnRpY2F0aW9uIE1ldGhvZFwiKSkpLHRoaXM7aWYodGhpcy5vcHRpb25zLnByb3BlcnRpZXMuYXV0aGVudGljYXRpb25NZXRob2QmJnRoaXMub3B0aW9ucy5hdXRoUGFja2V0JiZ0eXBlb2YgdGhpcy5vcHRpb25zLmF1dGhQYWNrZXQ9PVwib2JqZWN0XCIpe2xldCBoPU9iamVjdC5hc3NpZ24oe2NtZDpcImF1dGhcIixyZWFzb25Db2RlOjB9LHRoaXMub3B0aW9ucy5hdXRoUGFja2V0KTt0aGlzLl93cml0ZVBhY2tldChoKTt9fXJldHVybiB0aGlzLnN0cmVhbS5zZXRNYXhMaXN0ZW5lcnMoMWUzKSxjbGVhclRpbWVvdXQodGhpcy5jb25uYWNrVGltZXIpLHRoaXMuY29ubmFja1RpbWVyPXNldFRpbWVvdXQoKCk9Pnt0aGlzLmxvZyhcIiEhY29ubmVjdFRpbWVvdXQgaGl0ISEgQ2FsbGluZyBfY2xlYW5VcCB3aXRoIGZvcmNlIGB0cnVlYFwiKSx0aGlzLmVtaXQoXCJlcnJvclwiLG5ldyBFcnJvcihcImNvbm5hY2sgdGltZW91dFwiKSksdGhpcy5fY2xlYW5VcCghMCk7fSx0aGlzLm9wdGlvbnMuY29ubmVjdFRpbWVvdXQpLHRoaXN9cHVibGlzaChlLHIsaSxuKXt0aGlzLmxvZyhcInB1Ymxpc2ggOjogbWVzc2FnZSBgJXNgIHRvIHRvcGljIGAlc2BcIixyLGUpO2xldHtvcHRpb25zOm99PXRoaXM7dHlwZW9mIGk9PVwiZnVuY3Rpb25cIiYmKG49aSxpPW51bGwpLGk9aXx8e30saT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30se3FvczowLHJldGFpbjohMSxkdXA6ITF9KSxpKTtsZXR7cW9zOmEscmV0YWluOmwsZHVwOmMscHJvcGVydGllczpoLGNiU3RvcmVQdXQ6ZH09aTtpZih0aGlzLl9jaGVja0Rpc2Nvbm5lY3RpbmcobikpcmV0dXJuIHRoaXM7bGV0IGc9KCk9PntsZXQgeT0wO2lmKChhPT09MXx8YT09PTIpJiYoeT10aGlzLl9uZXh0SWQoKSx5PT09bnVsbCkpcmV0dXJuIHRoaXMubG9nKFwiTm8gbWVzc2FnZUlkIGxlZnRcIiksITE7bGV0IHc9e2NtZDpcInB1Ymxpc2hcIix0b3BpYzplLHBheWxvYWQ6cixxb3M6YSxyZXRhaW46bCxtZXNzYWdlSWQ6eSxkdXA6Y307c3dpdGNoKG8ucHJvdG9jb2xWZXJzaW9uPT09NSYmKHcucHJvcGVydGllcz1oKSx0aGlzLmxvZyhcInB1Ymxpc2ggOjogcW9zXCIsYSksYSl7Y2FzZSAxOmNhc2UgMjp0aGlzLm91dGdvaW5nW3cubWVzc2FnZUlkXT17dm9sYXRpbGU6ITEsY2I6bnx8dGhpcy5ub29wfSx0aGlzLmxvZyhcIk1xdHRDbGllbnQ6cHVibGlzaDogcGFja2V0IGNtZDogJXNcIix3LmNtZCksdGhpcy5fc2VuZFBhY2tldCh3LHZvaWQgMCxkKTticmVhaztkZWZhdWx0OnRoaXMubG9nKFwiTXF0dENsaWVudDpwdWJsaXNoOiBwYWNrZXQgY21kOiAlc1wiLHcuY21kKSx0aGlzLl9zZW5kUGFja2V0KHcsbixkKTticmVha31yZXR1cm4gITB9O3JldHVybiAodGhpcy5fc3RvcmVQcm9jZXNzaW5nfHx0aGlzLl9zdG9yZVByb2Nlc3NpbmdRdWV1ZS5sZW5ndGg+MHx8IWcoKSkmJnRoaXMuX3N0b3JlUHJvY2Vzc2luZ1F1ZXVlLnB1c2goe2ludm9rZTpnLGNiU3RvcmVQdXQ6aS5jYlN0b3JlUHV0LGNhbGxiYWNrOm59KSx0aGlzfXB1Ymxpc2hBc3luYyhlLHIsaSl7cmV0dXJuIG5ldyBQcm9taXNlKChuLG8pPT57dGhpcy5wdWJsaXNoKGUscixpLChzLGEpPT57cz9vKHMpOm4oYSk7fSk7fSl9c3Vic2NyaWJlKGUscixpKXtsZXQgbj10aGlzLm9wdGlvbnMucHJvdG9jb2xWZXJzaW9uO3R5cGVvZiByPT1cImZ1bmN0aW9uXCImJihpPXIpLGk9aXx8dGhpcy5ub29wO2xldCBvPSExLHM9W107dHlwZW9mIGU9PVwic3RyaW5nXCI/KGU9W2VdLHM9ZSk6QXJyYXkuaXNBcnJheShlKT9zPWU6dHlwZW9mIGU9PVwib2JqZWN0XCImJihvPWUucmVzdWJzY3JpYmUsZGVsZXRlIGUucmVzdWJzY3JpYmUscz1PYmplY3Qua2V5cyhlKSk7bGV0IGE9RnAudmFsaWRhdGVUb3BpY3Mocyk7aWYoYSE9PW51bGwpcmV0dXJuIEhhKGksbmV3IEVycm9yKGBJbnZhbGlkIHRvcGljICR7YX1gKSksdGhpcztpZih0aGlzLl9jaGVja0Rpc2Nvbm5lY3RpbmcoaSkpcmV0dXJuIHRoaXMubG9nKFwic3Vic2NyaWJlOiBkaXNjY29uZWN0aW5nIHRydWVcIiksdGhpcztsZXQgbD17cW9zOjB9O249PT01JiYobC5ubD0hMSxsLnJhcD0hMSxsLnJoPTApLHI9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGwpLHIpO2xldCBjPXIucHJvcGVydGllcyxoPVtdLGQ9KHksdyk9PntpZih3PXd8fHIsIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLl9yZXN1YnNjcmliZVRvcGljcyx5KXx8dGhpcy5fcmVzdWJzY3JpYmVUb3BpY3NbeV0ucW9zPHcucW9zfHxvKXtsZXQgUz17dG9waWM6eSxxb3M6dy5xb3N9O249PT01JiYoUy5ubD13Lm5sLFMucmFwPXcucmFwLFMucmg9dy5yaCxTLnByb3BlcnRpZXM9YyksdGhpcy5sb2coXCJzdWJzY3JpYmU6IHB1c2hpbmcgdG9waWMgYCVzYCBhbmQgcW9zIGAlc2AgdG8gc3VicyBsaXN0XCIsUy50b3BpYyxTLnFvcyksaC5wdXNoKFMpO319O2lmKEFycmF5LmlzQXJyYXkoZSk/ZS5mb3JFYWNoKHk9Pnt0aGlzLmxvZyhcInN1YnNjcmliZTogYXJyYXkgdG9waWMgJXNcIix5KSxkKHkpO30pOk9iamVjdC5rZXlzKGUpLmZvckVhY2goeT0+e3RoaXMubG9nKFwic3Vic2NyaWJlOiBvYmplY3QgdG9waWMgJXMsICVvXCIseSxlW3ldKSxkKHksZVt5XSk7fSksIWgubGVuZ3RoKXJldHVybiBpKG51bGwsW10pLHRoaXM7bGV0IGc9KCk9PntsZXQgeT10aGlzLl9uZXh0SWQoKTtpZih5PT09bnVsbClyZXR1cm4gdGhpcy5sb2coXCJObyBtZXNzYWdlSWQgbGVmdFwiKSwhMTtsZXQgdz17Y21kOlwic3Vic2NyaWJlXCIsc3Vic2NyaXB0aW9uczpoLG1lc3NhZ2VJZDp5fTtpZihjJiYody5wcm9wZXJ0aWVzPWMpLHRoaXMub3B0aW9ucy5yZXN1YnNjcmliZSl7dGhpcy5sb2coXCJzdWJzY3JpYmUgOjogcmVzdWJzY3JpYmUgdHJ1ZVwiKTtsZXQgUz1bXTtoLmZvckVhY2goRT0+e2lmKHRoaXMub3B0aW9ucy5yZWNvbm5lY3RQZXJpb2Q+MCl7bGV0IEk9e3FvczpFLnFvc307bj09PTUmJihJLm5sPUUubmx8fCExLEkucmFwPUUucmFwfHwhMSxJLnJoPUUucmh8fDAsSS5wcm9wZXJ0aWVzPUUucHJvcGVydGllcyksdGhpcy5fcmVzdWJzY3JpYmVUb3BpY3NbRS50b3BpY109SSxTLnB1c2goRS50b3BpYyk7fX0pLHRoaXMubWVzc2FnZUlkVG9Ub3BpY1t3Lm1lc3NhZ2VJZF09Uzt9cmV0dXJuIHRoaXMub3V0Z29pbmdbdy5tZXNzYWdlSWRdPXt2b2xhdGlsZTohMCxjYihTLEUpe2lmKCFTKXtsZXR7Z3JhbnRlZDpJfT1FO2ZvcihsZXQgQz0wO0M8SS5sZW5ndGg7Qys9MSloW0NdLnFvcz1JW0NdO31pKFMsaCxFKTt9fSx0aGlzLmxvZyhcInN1YnNjcmliZSA6OiBjYWxsIF9zZW5kUGFja2V0XCIpLHRoaXMuX3NlbmRQYWNrZXQodyksITB9O3JldHVybiAodGhpcy5fc3RvcmVQcm9jZXNzaW5nfHx0aGlzLl9zdG9yZVByb2Nlc3NpbmdRdWV1ZS5sZW5ndGg+MHx8IWcoKSkmJnRoaXMuX3N0b3JlUHJvY2Vzc2luZ1F1ZXVlLnB1c2goe2ludm9rZTpnLGNhbGxiYWNrOml9KSx0aGlzfXN1YnNjcmliZUFzeW5jKGUscil7cmV0dXJuIG5ldyBQcm9taXNlKChpLG4pPT57dGhpcy5zdWJzY3JpYmUoZSxyLChvLHMpPT57bz9uKG8pOmkocyk7fSk7fSl9dW5zdWJzY3JpYmUoZSxyLGkpe3R5cGVvZiBlPT1cInN0cmluZ1wiJiYoZT1bZV0pLHR5cGVvZiByPT1cImZ1bmN0aW9uXCImJihpPXIpLGk9aXx8dGhpcy5ub29wO2xldCBuPUZwLnZhbGlkYXRlVG9waWNzKGUpO2lmKG4hPT1udWxsKXJldHVybiBIYShpLG5ldyBFcnJvcihgSW52YWxpZCB0b3BpYyAke259YCkpLHRoaXM7aWYodGhpcy5fY2hlY2tEaXNjb25uZWN0aW5nKGkpKXJldHVybiB0aGlzO2xldCBvPSgpPT57bGV0IHM9dGhpcy5fbmV4dElkKCk7aWYocz09PW51bGwpcmV0dXJuIHRoaXMubG9nKFwiTm8gbWVzc2FnZUlkIGxlZnRcIiksITE7bGV0IGE9e2NtZDpcInVuc3Vic2NyaWJlXCIsbWVzc2FnZUlkOnMsdW5zdWJzY3JpcHRpb25zOltdfTtyZXR1cm4gdHlwZW9mIGU9PVwic3RyaW5nXCI/YS51bnN1YnNjcmlwdGlvbnM9W2VdOkFycmF5LmlzQXJyYXkoZSkmJihhLnVuc3Vic2NyaXB0aW9ucz1lKSx0aGlzLm9wdGlvbnMucmVzdWJzY3JpYmUmJmEudW5zdWJzY3JpcHRpb25zLmZvckVhY2gobD0+e2RlbGV0ZSB0aGlzLl9yZXN1YnNjcmliZVRvcGljc1tsXTt9KSx0eXBlb2Ygcj09XCJvYmplY3RcIiYmci5wcm9wZXJ0aWVzJiYoYS5wcm9wZXJ0aWVzPXIucHJvcGVydGllcyksdGhpcy5vdXRnb2luZ1thLm1lc3NhZ2VJZF09e3ZvbGF0aWxlOiEwLGNiOml9LHRoaXMubG9nKFwidW5zdWJzY3JpYmU6IGNhbGwgX3NlbmRQYWNrZXRcIiksdGhpcy5fc2VuZFBhY2tldChhKSwhMH07cmV0dXJuICh0aGlzLl9zdG9yZVByb2Nlc3Npbmd8fHRoaXMuX3N0b3JlUHJvY2Vzc2luZ1F1ZXVlLmxlbmd0aD4wfHwhbygpKSYmdGhpcy5fc3RvcmVQcm9jZXNzaW5nUXVldWUucHVzaCh7aW52b2tlOm8sY2FsbGJhY2s6aX0pLHRoaXN9dW5zdWJzY3JpYmVBc3luYyhlLHIpe3JldHVybiBuZXcgUHJvbWlzZSgoaSxuKT0+e3RoaXMudW5zdWJzY3JpYmUoZSxyLChvLHMpPT57bz9uKG8pOmkocyk7fSk7fSl9ZW5kKGUscixpKXt0aGlzLmxvZyhcImVuZCA6OiAoJXMpXCIsdGhpcy5vcHRpb25zLmNsaWVudElkKSwoZT09bnVsbHx8dHlwZW9mIGUhPVwiYm9vbGVhblwiKSYmKGk9aXx8cixyPWUsZT0hMSksdHlwZW9mIHIhPVwib2JqZWN0XCImJihpPWl8fHIscj1udWxsKSx0aGlzLmxvZyhcImVuZCA6OiBjYj8gJXNcIiwhIWkpLCghaXx8dHlwZW9mIGkhPVwiZnVuY3Rpb25cIikmJihpPXRoaXMubm9vcCk7bGV0IG49KCk9Pnt0aGlzLmxvZyhcImVuZCA6OiBjbG9zZVN0b3JlczogY2xvc2luZyBpbmNvbWluZyBhbmQgb3V0Z29pbmcgc3RvcmVzXCIpLHRoaXMuZGlzY29ubmVjdGVkPSEwLHRoaXMuaW5jb21pbmdTdG9yZS5jbG9zZShzPT57dGhpcy5vdXRnb2luZ1N0b3JlLmNsb3NlKGE9PntpZih0aGlzLmxvZyhcImVuZCA6OiBjbG9zZVN0b3JlczogZW1pdHRpbmcgZW5kXCIpLHRoaXMuZW1pdChcImVuZFwiKSxpKXtsZXQgbD1zfHxhO3RoaXMubG9nKFwiZW5kIDo6IGNsb3NlU3RvcmVzOiBpbnZva2luZyBjYWxsYmFjayB3aXRoIGFyZ3NcIiksaShsKTt9fSk7fSksdGhpcy5fZGVmZXJyZWRSZWNvbm5lY3Q/dGhpcy5fZGVmZXJyZWRSZWNvbm5lY3QoKToodGhpcy5vcHRpb25zLnJlY29ubmVjdFBlcmlvZD09PTB8fHRoaXMub3B0aW9ucy5tYW51YWxDb25uZWN0KSYmKHRoaXMuZGlzY29ubmVjdGluZz0hMSk7fSxvPSgpPT57dGhpcy5sb2coXCJlbmQgOjogKCVzKSA6OiBmaW5pc2ggOjogY2FsbGluZyBfY2xlYW5VcCB3aXRoIGZvcmNlICVzXCIsdGhpcy5vcHRpb25zLmNsaWVudElkLGUpLHRoaXMuX2NsZWFuVXAoZSwoKT0+e3RoaXMubG9nKFwiZW5kIDo6IGZpbmlzaCA6OiBjYWxsaW5nIHByb2Nlc3MubmV4dFRpY2sgb24gY2xvc2VTdG9yZXNcIiksKDAsIG5zLm5leHRUaWNrKShuKTt9LHIpO307cmV0dXJuIHRoaXMuZGlzY29ubmVjdGluZz8oaSgpLHRoaXMpOih0aGlzLl9jbGVhclJlY29ubmVjdCgpLHRoaXMuZGlzY29ubmVjdGluZz0hMCwhZSYmT2JqZWN0LmtleXModGhpcy5vdXRnb2luZykubGVuZ3RoPjA/KHRoaXMubG9nKFwiZW5kIDo6ICglcykgOjogY2FsbGluZyBmaW5pc2ggaW4gMTBtcyBvbmNlIG91dGdvaW5nIGlzIGVtcHR5XCIsdGhpcy5vcHRpb25zLmNsaWVudElkKSx0aGlzLm9uY2UoXCJvdXRnb2luZ0VtcHR5XCIsc2V0VGltZW91dC5iaW5kKG51bGwsbywxMCkpKToodGhpcy5sb2coXCJlbmQgOjogKCVzKSA6OiBpbW1lZGlhdGVseSBjYWxsaW5nIGZpbmlzaFwiLHRoaXMub3B0aW9ucy5jbGllbnRJZCksbygpKSx0aGlzKX1lbmRBc3luYyhlLHIpe3JldHVybiBuZXcgUHJvbWlzZSgoaSxuKT0+e3RoaXMuZW5kKGUscixvPT57bz9uKG8pOmkoKTt9KTt9KX1yZW1vdmVPdXRnb2luZ01lc3NhZ2UoZSl7aWYodGhpcy5vdXRnb2luZ1tlXSl7bGV0e2NiOnJ9PXRoaXMub3V0Z29pbmdbZV07dGhpcy5fcmVtb3ZlT3V0Z29pbmdBbmRTdG9yZU1lc3NhZ2UoZSwoKT0+e3IobmV3IEVycm9yKFwiTWVzc2FnZSByZW1vdmVkXCIpKTt9KTt9cmV0dXJuIHRoaXN9cmVjb25uZWN0KGUpe3RoaXMubG9nKFwiY2xpZW50IHJlY29ubmVjdFwiKTtsZXQgcj0oKT0+e2U/KHRoaXMub3B0aW9ucy5pbmNvbWluZ1N0b3JlPWUuaW5jb21pbmdTdG9yZSx0aGlzLm9wdGlvbnMub3V0Z29pbmdTdG9yZT1lLm91dGdvaW5nU3RvcmUpOih0aGlzLm9wdGlvbnMuaW5jb21pbmdTdG9yZT1udWxsLHRoaXMub3B0aW9ucy5vdXRnb2luZ1N0b3JlPW51bGwpLHRoaXMuaW5jb21pbmdTdG9yZT10aGlzLm9wdGlvbnMuaW5jb21pbmdTdG9yZXx8bmV3IGlpLmRlZmF1bHQsdGhpcy5vdXRnb2luZ1N0b3JlPXRoaXMub3B0aW9ucy5vdXRnb2luZ1N0b3JlfHxuZXcgaWkuZGVmYXVsdCx0aGlzLmRpc2Nvbm5lY3Rpbmc9ITEsdGhpcy5kaXNjb25uZWN0ZWQ9ITEsdGhpcy5fZGVmZXJyZWRSZWNvbm5lY3Q9bnVsbCx0aGlzLl9yZWNvbm5lY3QoKTt9O3JldHVybiB0aGlzLmRpc2Nvbm5lY3RpbmcmJiF0aGlzLmRpc2Nvbm5lY3RlZD90aGlzLl9kZWZlcnJlZFJlY29ubmVjdD1yOnIoKSx0aGlzfV9mbHVzaFZvbGF0aWxlKCl7dGhpcy5vdXRnb2luZyYmKHRoaXMubG9nKFwiX2ZsdXNoVm9sYXRpbGUgOjogZGVsZXRpbmcgdm9sYXRpbGUgbWVzc2FnZXMgZnJvbSB0aGUgcXVldWUgYW5kIHNldHRpbmcgdGhlaXIgY2FsbGJhY2tzIGFzIGVycm9yIGZ1bmN0aW9uXCIpLE9iamVjdC5rZXlzKHRoaXMub3V0Z29pbmcpLmZvckVhY2goZT0+e3RoaXMub3V0Z29pbmdbZV0udm9sYXRpbGUmJnR5cGVvZiB0aGlzLm91dGdvaW5nW2VdLmNiPT1cImZ1bmN0aW9uXCImJih0aGlzLm91dGdvaW5nW2VdLmNiKG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gY2xvc2VkXCIpKSxkZWxldGUgdGhpcy5vdXRnb2luZ1tlXSk7fSkpO31fZmx1c2goKXt0aGlzLm91dGdvaW5nJiYodGhpcy5sb2coXCJfZmx1c2g6IHF1ZXVlIGV4aXN0cz8gJWJcIiwhIXRoaXMub3V0Z29pbmcpLE9iamVjdC5rZXlzKHRoaXMub3V0Z29pbmcpLmZvckVhY2goZT0+e3R5cGVvZiB0aGlzLm91dGdvaW5nW2VdLmNiPT1cImZ1bmN0aW9uXCImJih0aGlzLm91dGdvaW5nW2VdLmNiKG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gY2xvc2VkXCIpKSxkZWxldGUgdGhpcy5vdXRnb2luZ1tlXSk7fSkpO31fcmVtb3ZlVG9waWNBbGlhc0FuZFJlY292ZXJUb3BpY05hbWUoZSl7bGV0IHI7ZS5wcm9wZXJ0aWVzJiYocj1lLnByb3BlcnRpZXMudG9waWNBbGlhcyk7bGV0IGk9ZS50b3BpYy50b1N0cmluZygpO2lmKHRoaXMubG9nKFwiX3JlbW92ZVRvcGljQWxpYXNBbmRSZWNvdmVyVG9waWNOYW1lIDo6IGFsaWFzICVkLCB0b3BpYyAlb1wiLHIsaSksaS5sZW5ndGg9PT0wKXtpZih0eXBlb2Ygcj5cInVcIilyZXR1cm4gbmV3IEVycm9yKFwiVW5yZWdpc3RlcmVkIFRvcGljIEFsaWFzXCIpO2lmKGk9dGhpcy50b3BpY0FsaWFzU2VuZC5nZXRUb3BpY0J5QWxpYXMociksdHlwZW9mIGk+XCJ1XCIpcmV0dXJuIG5ldyBFcnJvcihcIlVucmVnaXN0ZXJlZCBUb3BpYyBBbGlhc1wiKTtlLnRvcGljPWk7fXImJmRlbGV0ZSBlLnByb3BlcnRpZXMudG9waWNBbGlhczt9X2NoZWNrRGlzY29ubmVjdGluZyhlKXtyZXR1cm4gdGhpcy5kaXNjb25uZWN0aW5nJiYoZSYmZSE9PXRoaXMubm9vcD9lKG5ldyBFcnJvcihcImNsaWVudCBkaXNjb25uZWN0aW5nXCIpKTp0aGlzLmVtaXQoXCJlcnJvclwiLG5ldyBFcnJvcihcImNsaWVudCBkaXNjb25uZWN0aW5nXCIpKSksdGhpcy5kaXNjb25uZWN0aW5nfV9yZWNvbm5lY3QoKXt0aGlzLmxvZyhcIl9yZWNvbm5lY3Q6IGVtaXR0aW5nIHJlY29ubmVjdCB0byBjbGllbnRcIiksdGhpcy5lbWl0KFwicmVjb25uZWN0XCIpLHRoaXMuY29ubmVjdGVkPyh0aGlzLmVuZCgoKT0+e3RoaXMuY29ubmVjdCgpO30pLHRoaXMubG9nKFwiY2xpZW50IGFscmVhZHkgY29ubmVjdGVkLiBkaXNjb25uZWN0aW5nIGZpcnN0LlwiKSk6KHRoaXMubG9nKFwiX3JlY29ubmVjdDogY2FsbGluZyBjb25uZWN0XCIpLHRoaXMuY29ubmVjdCgpKTt9X3NldHVwUmVjb25uZWN0KCl7IXRoaXMuZGlzY29ubmVjdGluZyYmIXRoaXMucmVjb25uZWN0VGltZXImJnRoaXMub3B0aW9ucy5yZWNvbm5lY3RQZXJpb2Q+MD8odGhpcy5yZWNvbm5lY3Rpbmd8fCh0aGlzLmxvZyhcIl9zZXR1cFJlY29ubmVjdCA6OiBlbWl0IGBvZmZsaW5lYCBzdGF0ZVwiKSx0aGlzLmVtaXQoXCJvZmZsaW5lXCIpLHRoaXMubG9nKFwiX3NldHVwUmVjb25uZWN0IDo6IHNldCBgcmVjb25uZWN0aW5nYCB0byBgdHJ1ZWBcIiksdGhpcy5yZWNvbm5lY3Rpbmc9ITApLHRoaXMubG9nKFwiX3NldHVwUmVjb25uZWN0IDo6IHNldHRpbmcgcmVjb25uZWN0VGltZXIgZm9yICVkIG1zXCIsdGhpcy5vcHRpb25zLnJlY29ubmVjdFBlcmlvZCksdGhpcy5yZWNvbm5lY3RUaW1lcj1zZXRJbnRlcnZhbCgoKT0+e3RoaXMubG9nKFwicmVjb25uZWN0VGltZXIgOjogcmVjb25uZWN0IHRyaWdnZXJlZCFcIiksdGhpcy5fcmVjb25uZWN0KCk7fSx0aGlzLm9wdGlvbnMucmVjb25uZWN0UGVyaW9kKSk6dGhpcy5sb2coXCJfc2V0dXBSZWNvbm5lY3QgOjogZG9pbmcgbm90aGluZy4uLlwiKTt9X2NsZWFyUmVjb25uZWN0KCl7dGhpcy5sb2coXCJfY2xlYXJSZWNvbm5lY3QgOiBjbGVhcmluZyByZWNvbm5lY3QgdGltZXJcIiksdGhpcy5yZWNvbm5lY3RUaW1lciYmKGNsZWFySW50ZXJ2YWwodGhpcy5yZWNvbm5lY3RUaW1lciksdGhpcy5yZWNvbm5lY3RUaW1lcj1udWxsKTt9X2NsZWFuVXAoZSxyLGk9e30pe2lmKHImJih0aGlzLmxvZyhcIl9jbGVhblVwIDo6IGRvbmUgY2FsbGJhY2sgcHJvdmlkZWQgZm9yIG9uIHN0cmVhbSBjbG9zZVwiKSx0aGlzLnN0cmVhbS5vbihcImNsb3NlXCIscikpLHRoaXMubG9nKFwiX2NsZWFuVXAgOjogZm9yY2VkPyAlc1wiLGUpLGUpdGhpcy5vcHRpb25zLnJlY29ubmVjdFBlcmlvZD09PTAmJnRoaXMub3B0aW9ucy5jbGVhbiYmdGhpcy5fZmx1c2goKSx0aGlzLmxvZyhcIl9jbGVhblVwIDo6ICglcykgOjogZGVzdHJveWluZyBzdHJlYW1cIix0aGlzLm9wdGlvbnMuY2xpZW50SWQpLHRoaXMuc3RyZWFtLmRlc3Ryb3koKTtlbHNlIHtsZXQgbj1PYmplY3QuYXNzaWduKHtjbWQ6XCJkaXNjb25uZWN0XCJ9LGkpO3RoaXMubG9nKFwiX2NsZWFuVXAgOjogKCVzKSA6OiBjYWxsIF9zZW5kUGFja2V0IHdpdGggZGlzY29ubmVjdCBwYWNrZXRcIix0aGlzLm9wdGlvbnMuY2xpZW50SWQpLHRoaXMuX3NlbmRQYWNrZXQobiwoKT0+e3RoaXMubG9nKFwiX2NsZWFuVXAgOjogKCVzKSA6OiBkZXN0cm95aW5nIHN0cmVhbVwiLHRoaXMub3B0aW9ucy5jbGllbnRJZCksSGEoKCk9Pnt0aGlzLnN0cmVhbS5lbmQoKCk9Pnt0aGlzLmxvZyhcIl9jbGVhblVwIDo6ICglcykgOjogc3RyZWFtIGRlc3Ryb3llZFwiLHRoaXMub3B0aW9ucy5jbGllbnRJZCk7fSk7fSk7fSk7fSF0aGlzLmRpc2Nvbm5lY3RpbmcmJiF0aGlzLnJlY29ubmVjdGluZyYmKHRoaXMubG9nKFwiX2NsZWFuVXAgOjogY2xpZW50IG5vdCBkaXNjb25uZWN0aW5nL3JlY29ubmVjdGluZy4gQ2xlYXJpbmcgYW5kIHJlc2V0dGluZyByZWNvbm5lY3QuXCIpLHRoaXMuX2NsZWFyUmVjb25uZWN0KCksdGhpcy5fc2V0dXBSZWNvbm5lY3QoKSksdGhpcy5fZGVzdHJveUtlZXBhbGl2ZU1hbmFnZXIoKSxyJiYhdGhpcy5jb25uZWN0ZWQmJih0aGlzLmxvZyhcIl9jbGVhblVwIDo6ICglcykgOjogcmVtb3Zpbmcgc3RyZWFtIGBkb25lYCBjYWxsYmFjayBgY2xvc2VgIGxpc3RlbmVyXCIsdGhpcy5vcHRpb25zLmNsaWVudElkKSx0aGlzLnN0cmVhbS5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIscikscigpKTt9X3N0b3JlQW5kU2VuZChlLHIsaSl7dGhpcy5sb2coXCJzdG9yZUFuZFNlbmQgOjogc3RvcmUgcGFja2V0IHdpdGggY21kICVzIHRvIG91dGdvaW5nU3RvcmVcIixlLmNtZCk7bGV0IG49ZSxvO2lmKG4uY21kPT09XCJwdWJsaXNoXCImJihuPSgwLCBqcC5kZWZhdWx0KShlKSxvPXRoaXMuX3JlbW92ZVRvcGljQWxpYXNBbmRSZWNvdmVyVG9waWNOYW1lKG4pLG8pKXJldHVybiByJiZyKG8pO3RoaXMub3V0Z29pbmdTdG9yZS5wdXQobixzPT57aWYocylyZXR1cm4gciYmcihzKTtpKCksdGhpcy5fd3JpdGVQYWNrZXQoZSxyKTt9KTt9X2FwcGx5VG9waWNBbGlhcyhlKXtpZih0aGlzLm9wdGlvbnMucHJvdG9jb2xWZXJzaW9uPT09NSYmZS5jbWQ9PT1cInB1Ymxpc2hcIil7bGV0IHI7ZS5wcm9wZXJ0aWVzJiYocj1lLnByb3BlcnRpZXMudG9waWNBbGlhcyk7bGV0IGk9ZS50b3BpYy50b1N0cmluZygpO2lmKHRoaXMudG9waWNBbGlhc1NlbmQpaWYocil7aWYoaS5sZW5ndGghPT0wJiYodGhpcy5sb2coXCJhcHBseVRvcGljQWxpYXMgOjogcmVnaXN0ZXIgdG9waWM6ICVzIC0gYWxpYXM6ICVkXCIsaSxyKSwhdGhpcy50b3BpY0FsaWFzU2VuZC5wdXQoaSxyKSkpcmV0dXJuIHRoaXMubG9nKFwiYXBwbHlUb3BpY0FsaWFzIDo6IGVycm9yIG91dCBvZiByYW5nZS4gdG9waWM6ICVzIC0gYWxpYXM6ICVkXCIsaSxyKSxuZXcgRXJyb3IoXCJTZW5kaW5nIFRvcGljIEFsaWFzIG91dCBvZiByYW5nZVwiKX1lbHNlIGkubGVuZ3RoIT09MCYmKHRoaXMub3B0aW9ucy5hdXRvQXNzaWduVG9waWNBbGlhcz8ocj10aGlzLnRvcGljQWxpYXNTZW5kLmdldEFsaWFzQnlUb3BpYyhpKSxyPyhlLnRvcGljPVwiXCIsZS5wcm9wZXJ0aWVzPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlLnByb3BlcnRpZXMpLHt0b3BpY0FsaWFzOnJ9KSx0aGlzLmxvZyhcImFwcGx5VG9waWNBbGlhcyA6OiBhdXRvIGFzc2lnbih1c2UpIHRvcGljOiAlcyAtIGFsaWFzOiAlZFwiLGkscikpOihyPXRoaXMudG9waWNBbGlhc1NlbmQuZ2V0THJ1QWxpYXMoKSx0aGlzLnRvcGljQWxpYXNTZW5kLnB1dChpLHIpLGUucHJvcGVydGllcz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZS5wcm9wZXJ0aWVzKSx7dG9waWNBbGlhczpyfSksdGhpcy5sb2coXCJhcHBseVRvcGljQWxpYXMgOjogYXV0byBhc3NpZ24gdG9waWM6ICVzIC0gYWxpYXM6ICVkXCIsaSxyKSkpOnRoaXMub3B0aW9ucy5hdXRvVXNlVG9waWNBbGlhcyYmKHI9dGhpcy50b3BpY0FsaWFzU2VuZC5nZXRBbGlhc0J5VG9waWMoaSksciYmKGUudG9waWM9XCJcIixlLnByb3BlcnRpZXM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUucHJvcGVydGllcykse3RvcGljQWxpYXM6cn0pLHRoaXMubG9nKFwiYXBwbHlUb3BpY0FsaWFzIDo6IGF1dG8gdXNlIHRvcGljOiAlcyAtIGFsaWFzOiAlZFwiLGkscikpKSk7ZWxzZSBpZihyKXJldHVybiB0aGlzLmxvZyhcImFwcGx5VG9waWNBbGlhcyA6OiBlcnJvciBvdXQgb2YgcmFuZ2UuIHRvcGljOiAlcyAtIGFsaWFzOiAlZFwiLGksciksbmV3IEVycm9yKFwiU2VuZGluZyBUb3BpYyBBbGlhcyBvdXQgb2YgcmFuZ2VcIil9fV9ub29wKGUpe3RoaXMubG9nKFwibm9vcCA6OlwiLGUpO31fd3JpdGVQYWNrZXQoZSxyKXt0aGlzLmxvZyhcIl93cml0ZVBhY2tldCA6OiBwYWNrZXQ6ICVPXCIsZSksdGhpcy5sb2coXCJfd3JpdGVQYWNrZXQgOjogZW1pdHRpbmcgYHBhY2tldHNlbmRgXCIpLHRoaXMuZW1pdChcInBhY2tldHNlbmRcIixlKSx0aGlzLmxvZyhcIl93cml0ZVBhY2tldCA6OiB3cml0aW5nIHRvIHN0cmVhbVwiKTtsZXQgaT0kYS5kZWZhdWx0LndyaXRlVG9TdHJlYW0oZSx0aGlzLnN0cmVhbSx0aGlzLm9wdGlvbnMpO3RoaXMubG9nKFwiX3dyaXRlUGFja2V0IDo6IHdyaXRlVG9TdHJlYW0gcmVzdWx0ICVzXCIsaSksIWkmJnImJnIhPT10aGlzLm5vb3A/KHRoaXMubG9nKFwiX3dyaXRlUGFja2V0IDo6IGhhbmRsZSBldmVudHMgb24gYGRyYWluYCBvbmNlIHRocm91Z2ggY2FsbGJhY2suXCIpLHRoaXMuc3RyZWFtLm9uY2UoXCJkcmFpblwiLHIpKTpyJiYodGhpcy5sb2coXCJfd3JpdGVQYWNrZXQgOjogaW52b2tpbmcgY2JcIikscigpKTt9X3NlbmRQYWNrZXQoZSxyLGksbil7dGhpcy5sb2coXCJfc2VuZFBhY2tldCA6OiAoJXMpIDo6ICBzdGFydFwiLHRoaXMub3B0aW9ucy5jbGllbnRJZCksaT1pfHx0aGlzLm5vb3Ascj1yfHx0aGlzLm5vb3A7bGV0IG89dGhpcy5fYXBwbHlUb3BpY0FsaWFzKGUpO2lmKG8pe3Iobyk7cmV0dXJufWlmKCF0aGlzLmNvbm5lY3RlZCl7aWYoZS5jbWQ9PT1cImF1dGhcIil7dGhpcy5fd3JpdGVQYWNrZXQoZSxyKTtyZXR1cm59dGhpcy5sb2coXCJfc2VuZFBhY2tldCA6OiBjbGllbnQgbm90IGNvbm5lY3RlZC4gU3RvcmluZyBwYWNrZXQgb2ZmbGluZS5cIiksdGhpcy5fc3RvcmVQYWNrZXQoZSxyLGkpO3JldHVybn1pZihuKXt0aGlzLl93cml0ZVBhY2tldChlLHIpO3JldHVybn1zd2l0Y2goZS5jbWQpe2Nhc2VcInB1Ymxpc2hcIjpicmVhaztjYXNlXCJwdWJyZWxcIjp0aGlzLl9zdG9yZUFuZFNlbmQoZSxyLGkpO3JldHVybjtkZWZhdWx0OnRoaXMuX3dyaXRlUGFja2V0KGUscik7cmV0dXJufXN3aXRjaChlLnFvcyl7Y2FzZSAyOmNhc2UgMTp0aGlzLl9zdG9yZUFuZFNlbmQoZSxyLGkpO2JyZWFrO2Nhc2UgMDpkZWZhdWx0OnRoaXMuX3dyaXRlUGFja2V0KGUscik7YnJlYWt9dGhpcy5sb2coXCJfc2VuZFBhY2tldCA6OiAoJXMpIDo6ICBlbmRcIix0aGlzLm9wdGlvbnMuY2xpZW50SWQpO31fc3RvcmVQYWNrZXQoZSxyLGkpe3RoaXMubG9nKFwiX3N0b3JlUGFja2V0IDo6IHBhY2tldDogJW9cIixlKSx0aGlzLmxvZyhcIl9zdG9yZVBhY2tldCA6OiBjYj8gJXNcIiwhIXIpLGk9aXx8dGhpcy5ub29wO2xldCBuPWU7aWYobi5jbWQ9PT1cInB1Ymxpc2hcIil7bj0oMCwganAuZGVmYXVsdCkoZSk7bGV0IHM9dGhpcy5fcmVtb3ZlVG9waWNBbGlhc0FuZFJlY292ZXJUb3BpY05hbWUobik7aWYocylyZXR1cm4gciYmcihzKX1sZXQgbz1uLnFvc3x8MDtvPT09MCYmdGhpcy5xdWV1ZVFvU1plcm98fG4uY21kIT09XCJwdWJsaXNoXCI/dGhpcy5xdWV1ZS5wdXNoKHtwYWNrZXQ6bixjYjpyfSk6bz4wPyhyPXRoaXMub3V0Z29pbmdbbi5tZXNzYWdlSWRdP3RoaXMub3V0Z29pbmdbbi5tZXNzYWdlSWRdLmNiOm51bGwsdGhpcy5vdXRnb2luZ1N0b3JlLnB1dChuLHM9PntpZihzKXJldHVybiByJiZyKHMpO2koKTt9KSk6ciYmcihuZXcgRXJyb3IoXCJObyBjb25uZWN0aW9uIHRvIGJyb2tlclwiKSk7fV9zZXR1cEtlZXBhbGl2ZU1hbmFnZXIoKXt0aGlzLmxvZyhcIl9zZXR1cEtlZXBhbGl2ZU1hbmFnZXIgOjoga2VlcGFsaXZlICVkIChzZWNvbmRzKVwiLHRoaXMub3B0aW9ucy5rZWVwYWxpdmUpLCF0aGlzLmtlZXBhbGl2ZU1hbmFnZXImJnRoaXMub3B0aW9ucy5rZWVwYWxpdmUmJih0aGlzLmtlZXBhbGl2ZU1hbmFnZXI9bmV3IGVFLmRlZmF1bHQodGhpcyx0aGlzLm9wdGlvbnMudGltZXJWYXJpYW50KSk7fV9kZXN0cm95S2VlcGFsaXZlTWFuYWdlcigpe3RoaXMua2VlcGFsaXZlTWFuYWdlciYmKHRoaXMubG9nKFwiX2Rlc3Ryb3lLZWVwYWxpdmVNYW5hZ2VyIDo6IGRlc3Ryb3lpbmcga2VlcGFsaXZlIG1hbmFnZXJcIiksdGhpcy5rZWVwYWxpdmVNYW5hZ2VyLmRlc3Ryb3koKSx0aGlzLmtlZXBhbGl2ZU1hbmFnZXI9bnVsbCk7fXJlc2NoZWR1bGVQaW5nKGU9ITEpe3RoaXMua2VlcGFsaXZlTWFuYWdlciYmdGhpcy5vcHRpb25zLmtlZXBhbGl2ZSYmKGV8fHRoaXMub3B0aW9ucy5yZXNjaGVkdWxlUGluZ3MpJiZ0aGlzLl9yZXNjaGVkdWxlUGluZygpO31fcmVzY2hlZHVsZVBpbmcoKXt0aGlzLmxvZyhcIl9yZXNjaGVkdWxlUGluZyA6OiByZXNjaGVkdWxpbmcgcGluZ1wiKSx0aGlzLmtlZXBhbGl2ZU1hbmFnZXIucmVzY2hlZHVsZSgpO31zZW5kUGluZygpe3RoaXMubG9nKFwiX3NlbmRQaW5nIDo6IHNlbmRpbmcgcGluZ3JlcVwiKSx0aGlzLl9zZW5kUGFja2V0KHtjbWQ6XCJwaW5ncmVxXCJ9KTt9b25LZWVwYWxpdmVUaW1lb3V0KCl7dGhpcy5lbWl0KFwiZXJyb3JcIixuZXcgRXJyb3IoXCJLZWVwYWxpdmUgdGltZW91dFwiKSksdGhpcy5sb2coXCJvbktlZXBhbGl2ZVRpbWVvdXQgOjogY2FsbGluZyBfY2xlYW5VcCB3aXRoIGZvcmNlIHRydWVcIiksdGhpcy5fY2xlYW5VcCghMCk7fV9yZXN1YnNjcmliZSgpe3RoaXMubG9nKFwiX3Jlc3Vic2NyaWJlXCIpO2xldCBlPU9iamVjdC5rZXlzKHRoaXMuX3Jlc3Vic2NyaWJlVG9waWNzKTtpZighdGhpcy5fZmlyc3RDb25uZWN0aW9uJiYodGhpcy5vcHRpb25zLmNsZWFufHx0aGlzLm9wdGlvbnMucHJvdG9jb2xWZXJzaW9uPj00JiYhdGhpcy5jb25uYWNrUGFja2V0LnNlc3Npb25QcmVzZW50KSYmZS5sZW5ndGg+MClpZih0aGlzLm9wdGlvbnMucmVzdWJzY3JpYmUpaWYodGhpcy5vcHRpb25zLnByb3RvY29sVmVyc2lvbj09PTUpe3RoaXMubG9nKFwiX3Jlc3Vic2NyaWJlOiBwcm90b2NvbFZlcnNpb24gNVwiKTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IGk9e307aVtlW3JdXT10aGlzLl9yZXN1YnNjcmliZVRvcGljc1tlW3JdXSxpLnJlc3Vic2NyaWJlPSEwLHRoaXMuc3Vic2NyaWJlKGkse3Byb3BlcnRpZXM6aVtlW3JdXS5wcm9wZXJ0aWVzfSk7fX1lbHNlIHRoaXMuX3Jlc3Vic2NyaWJlVG9waWNzLnJlc3Vic2NyaWJlPSEwLHRoaXMuc3Vic2NyaWJlKHRoaXMuX3Jlc3Vic2NyaWJlVG9waWNzKTtlbHNlIHRoaXMuX3Jlc3Vic2NyaWJlVG9waWNzPXt9O3RoaXMuX2ZpcnN0Q29ubmVjdGlvbj0hMTt9X29uQ29ubmVjdChlKXtpZih0aGlzLmRpc2Nvbm5lY3RlZCl7dGhpcy5lbWl0KFwiY29ubmVjdFwiLGUpO3JldHVybn10aGlzLmNvbm5hY2tQYWNrZXQ9ZSx0aGlzLm1lc3NhZ2VJZFByb3ZpZGVyLmNsZWFyKCksdGhpcy5fc2V0dXBLZWVwYWxpdmVNYW5hZ2VyKCksdGhpcy5jb25uZWN0ZWQ9ITA7bGV0IHI9KCk9PntsZXQgaT10aGlzLm91dGdvaW5nU3RvcmUuY3JlYXRlU3RyZWFtKCksbj0oKT0+e2kuZGVzdHJveSgpLGk9bnVsbCx0aGlzLl9mbHVzaFN0b3JlUHJvY2Vzc2luZ1F1ZXVlKCksbygpO30sbz0oKT0+e3RoaXMuX3N0b3JlUHJvY2Vzc2luZz0hMSx0aGlzLl9wYWNrZXRJZHNEdXJpbmdTdG9yZVByb2Nlc3Npbmc9e307fTt0aGlzLm9uY2UoXCJjbG9zZVwiLG4pLGkub24oXCJlcnJvclwiLGE9PntvKCksdGhpcy5fZmx1c2hTdG9yZVByb2Nlc3NpbmdRdWV1ZSgpLHRoaXMucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLG4pLHRoaXMuZW1pdChcImVycm9yXCIsYSk7fSk7bGV0IHM9KCk9PntpZighaSlyZXR1cm47bGV0IGE9aS5yZWFkKDEpLGw7aWYoIWEpe2kub25jZShcInJlYWRhYmxlXCIscyk7cmV0dXJufWlmKHRoaXMuX3N0b3JlUHJvY2Vzc2luZz0hMCx0aGlzLl9wYWNrZXRJZHNEdXJpbmdTdG9yZVByb2Nlc3NpbmdbYS5tZXNzYWdlSWRdKXtzKCk7cmV0dXJufSF0aGlzLmRpc2Nvbm5lY3RpbmcmJiF0aGlzLnJlY29ubmVjdFRpbWVyPyhsPXRoaXMub3V0Z29pbmdbYS5tZXNzYWdlSWRdP3RoaXMub3V0Z29pbmdbYS5tZXNzYWdlSWRdLmNiOm51bGwsdGhpcy5vdXRnb2luZ1thLm1lc3NhZ2VJZF09e3ZvbGF0aWxlOiExLGNiKGMsaCl7bCYmbChjLGgpLHMoKTt9fSx0aGlzLl9wYWNrZXRJZHNEdXJpbmdTdG9yZVByb2Nlc3NpbmdbYS5tZXNzYWdlSWRdPSEwLHRoaXMubWVzc2FnZUlkUHJvdmlkZXIucmVnaXN0ZXIoYS5tZXNzYWdlSWQpP3RoaXMuX3NlbmRQYWNrZXQoYSx2b2lkIDAsdm9pZCAwLCEwKTp0aGlzLmxvZyhcIm1lc3NhZ2VJZDogJWQgaGFzIGFscmVhZHkgdXNlZC5cIixhLm1lc3NhZ2VJZCkpOmkuZGVzdHJveSYmaS5kZXN0cm95KCk7fTtpLm9uKFwiZW5kXCIsKCk9PntsZXQgYT0hMDtmb3IobGV0IGwgaW4gdGhpcy5fcGFja2V0SWRzRHVyaW5nU3RvcmVQcm9jZXNzaW5nKWlmKCF0aGlzLl9wYWNrZXRJZHNEdXJpbmdTdG9yZVByb2Nlc3NpbmdbbF0pe2E9ITE7YnJlYWt9dGhpcy5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsbiksYT8obygpLHRoaXMuX2ludm9rZUFsbFN0b3JlUHJvY2Vzc2luZ1F1ZXVlKCksdGhpcy5lbWl0KFwiY29ubmVjdFwiLGUpKTpyKCk7fSkscygpO307cigpO31faW52b2tlU3RvcmVQcm9jZXNzaW5nUXVldWUoKXtpZighdGhpcy5fc3RvcmVQcm9jZXNzaW5nJiZ0aGlzLl9zdG9yZVByb2Nlc3NpbmdRdWV1ZS5sZW5ndGg+MCl7bGV0IGU9dGhpcy5fc3RvcmVQcm9jZXNzaW5nUXVldWVbMF07aWYoZSYmZS5pbnZva2UoKSlyZXR1cm4gdGhpcy5fc3RvcmVQcm9jZXNzaW5nUXVldWUuc2hpZnQoKSwhMH1yZXR1cm4gITF9X2ludm9rZUFsbFN0b3JlUHJvY2Vzc2luZ1F1ZXVlKCl7Zm9yKDt0aGlzLl9pbnZva2VTdG9yZVByb2Nlc3NpbmdRdWV1ZSgpOyk7fV9mbHVzaFN0b3JlUHJvY2Vzc2luZ1F1ZXVlKCl7Zm9yKGxldCBlIG9mIHRoaXMuX3N0b3JlUHJvY2Vzc2luZ1F1ZXVlKWUuY2JTdG9yZVB1dCYmZS5jYlN0b3JlUHV0KG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gY2xvc2VkXCIpKSxlLmNhbGxiYWNrJiZlLmNhbGxiYWNrKG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gY2xvc2VkXCIpKTt0aGlzLl9zdG9yZVByb2Nlc3NpbmdRdWV1ZS5zcGxpY2UoMCk7fV9yZW1vdmVPdXRnb2luZ0FuZFN0b3JlTWVzc2FnZShlLHIpe2RlbGV0ZSB0aGlzLm91dGdvaW5nW2VdLHRoaXMub3V0Z29pbmdTdG9yZS5kZWwoe21lc3NhZ2VJZDplfSwoaSxuKT0+e3IoaSxuKSx0aGlzLm1lc3NhZ2VJZFByb3ZpZGVyLmRlYWxsb2NhdGUoZSksdGhpcy5faW52b2tlU3RvcmVQcm9jZXNzaW5nUXVldWUoKTt9KTt9fTtzcy5WRVJTSU9OPW5zLk1RVFRKU19WRVJTSU9OO1FlLmRlZmF1bHQ9c3M7fSk7dmFyIFZwPU0oemE9PntfKCk7digpO20oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoemEsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIHRFPVVhKCksVmE9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLm51bWJlckFsbG9jYXRvcj1uZXcgdEUuTnVtYmVyQWxsb2NhdG9yKDEsNjU1MzUpO31hbGxvY2F0ZSgpe3JldHVybiB0aGlzLmxhc3RJZD10aGlzLm51bWJlckFsbG9jYXRvci5hbGxvYygpLHRoaXMubGFzdElkfWdldExhc3RBbGxvY2F0ZWQoKXtyZXR1cm4gdGhpcy5sYXN0SWR9cmVnaXN0ZXIoZSl7cmV0dXJuIHRoaXMubnVtYmVyQWxsb2NhdG9yLnVzZShlKX1kZWFsbG9jYXRlKGUpe3RoaXMubnVtYmVyQWxsb2NhdG9yLmZyZWUoZSk7fWNsZWFyKCl7dGhpcy5udW1iZXJBbGxvY2F0b3IuY2xlYXIoKTt9fTt6YS5kZWZhdWx0PVZhO30pO2Z1bmN0aW9uIFJyKHQpe3Rocm93IG5ldyBSYW5nZUVycm9yKHNFW3RdKX1mdW5jdGlvbiB6cCh0LGUpe2xldCByPXQuc3BsaXQoXCJAXCIpLGk9XCJcIjtyLmxlbmd0aD4xJiYoaT1yWzBdK1wiQFwiLHQ9clsxXSk7bGV0IG49ZnVuY3Rpb24obyxzKXtsZXQgYT1bXSxsPW8ubGVuZ3RoO2Zvcig7bC0tOylhW2xdPXMob1tsXSk7cmV0dXJuIGF9KCh0PXQucmVwbGFjZShuRSxcIi5cIikpLnNwbGl0KFwiLlwiKSxlKS5qb2luKFwiLlwiKTtyZXR1cm4gaStufWZ1bmN0aW9uIFlwKHQpe2xldCBlPVtdLHI9MCxpPXQubGVuZ3RoO2Zvcig7cjxpOyl7bGV0IG49dC5jaGFyQ29kZUF0KHIrKyk7aWYobj49NTUyOTYmJm48PTU2MzE5JiZyPGkpe2xldCBvPXQuY2hhckNvZGVBdChyKyspOyg2NDUxMiZvKT09NTYzMjA/ZS5wdXNoKCgoMTAyMyZuKTw8MTApKygxMDIzJm8pKzY1NTM2KTooZS5wdXNoKG4pLHItLSk7fWVsc2UgZS5wdXNoKG4pO31yZXR1cm4gZX12YXIgckUsaUUsbkUsc0UsZHQsS2EsS3AsSnAsR3AsUXAsS3QsWHA9X2UoKCk9PntfKCk7digpO20oKTtyRT0vXnhuLS0vLGlFPS9bXlxcMC1cXHg3RV0vLG5FPS9bXFx4MkVcXHUzMDAyXFx1RkYwRVxcdUZGNjFdL2csc0U9e292ZXJmbG93OlwiT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3NcIixcIm5vdC1iYXNpY1wiOlwiSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KVwiLFwiaW52YWxpZC1pbnB1dFwiOlwiSW52YWxpZCBpbnB1dFwifSxkdD1NYXRoLmZsb29yLEthPVN0cmluZy5mcm9tQ2hhckNvZGU7S3A9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCsyMis3NSoodDwyNiktKChlIT0wKTw8NSl9LEpwPWZ1bmN0aW9uKHQsZSxyKXtsZXQgaT0wO2Zvcih0PXI/ZHQodC83MDApOnQ+PjEsdCs9ZHQodC9lKTt0PjQ1NTtpKz0zNil0PWR0KHQvMzUpO3JldHVybiBkdChpKzM2KnQvKHQrMzgpKX0sR3A9ZnVuY3Rpb24odCl7bGV0IGU9W10scj10Lmxlbmd0aCxpPTAsbj0xMjgsbz03MixzPXQubGFzdEluZGV4T2YoXCItXCIpO3M8MCYmKHM9MCk7Zm9yKGxldCBsPTA7bDxzOysrbCl0LmNoYXJDb2RlQXQobCk+PTEyOCYmUnIoXCJub3QtYmFzaWNcIiksZS5wdXNoKHQuY2hhckNvZGVBdChsKSk7Zm9yKGxldCBsPXM+MD9zKzE6MDtsPHI7KXtsZXQgYz1pO2ZvcihsZXQgZD0xLGc9MzY7O2crPTM2KXtsPj1yJiZScihcImludmFsaWQtaW5wdXRcIik7bGV0IHk9KGE9dC5jaGFyQ29kZUF0KGwrKykpLTQ4PDEwP2EtMjI6YS02NTwyNj9hLTY1OmEtOTc8MjY/YS05NzozNjsoeT49MzZ8fHk+ZHQoKDIxNDc0ODM2NDctaSkvZCkpJiZScihcIm92ZXJmbG93XCIpLGkrPXkqZDtsZXQgdz1nPD1vPzE6Zz49bysyNj8yNjpnLW87aWYoeTx3KWJyZWFrO2xldCBTPTM2LXc7ZD5kdCgyMTQ3NDgzNjQ3L1MpJiZScihcIm92ZXJmbG93XCIpLGQqPVM7fWxldCBoPWUubGVuZ3RoKzE7bz1KcChpLWMsaCxjPT0wKSxkdChpL2gpPjIxNDc0ODM2NDctbiYmUnIoXCJvdmVyZmxvd1wiKSxuKz1kdChpL2gpLGklPWgsZS5zcGxpY2UoaSsrLDAsbik7fXZhciBhO3JldHVybiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5lKX0sUXA9ZnVuY3Rpb24odCl7bGV0IGU9W10scj0odD1ZcCh0KSkubGVuZ3RoLGk9MTI4LG49MCxvPTcyO2ZvcihsZXQgbCBvZiB0KWw8MTI4JiZlLnB1c2goS2EobCkpO2xldCBzPWUubGVuZ3RoLGE9cztmb3IocyYmZS5wdXNoKFwiLVwiKTthPHI7KXtsZXQgbD0yMTQ3NDgzNjQ3O2ZvcihsZXQgaCBvZiB0KWg+PWkmJmg8bCYmKGw9aCk7bGV0IGM9YSsxO2wtaT5kdCgoMjE0NzQ4MzY0Ny1uKS9jKSYmUnIoXCJvdmVyZmxvd1wiKSxuKz0obC1pKSpjLGk9bDtmb3IobGV0IGggb2YgdClpZihoPGkmJisrbj4yMTQ3NDgzNjQ3JiZScihcIm92ZXJmbG93XCIpLGg9PWkpe2xldCBkPW47Zm9yKGxldCBnPTM2OztnKz0zNil7bGV0IHk9Zzw9bz8xOmc+PW8rMjY/MjY6Zy1vO2lmKGQ8eSlicmVhaztsZXQgdz1kLXksUz0zNi15O2UucHVzaChLYShLcCh5K3clUywwKSkpLGQ9ZHQody9TKTt9ZS5wdXNoKEthKEtwKGQsMCkpKSxvPUpwKG4sYyxhPT1zKSxuPTAsKythO30rK24sKytpO31yZXR1cm4gZS5qb2luKFwiXCIpfSxLdD17dmVyc2lvbjpcIjIuMS4wXCIsdWNzMjp7ZGVjb2RlOllwLGVuY29kZTp0PT5TdHJpbmcuZnJvbUNvZGVQb2ludCguLi50KX0sZGVjb2RlOkdwLGVuY29kZTpRcCx0b0FTQ0lJOmZ1bmN0aW9uKHQpe3JldHVybiB6cCh0LGZ1bmN0aW9uKGUpe3JldHVybiBpRS50ZXN0KGUpP1wieG4tLVwiK1FwKGUpOmV9KX0sdG9Vbmljb2RlOmZ1bmN0aW9uKHQpe3JldHVybiB6cCh0LGZ1bmN0aW9uKGUpe3JldHVybiByRS50ZXN0KGUpP0dwKGUuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSk6ZX0pfX07S3QuZGVjb2RlO0t0LmVuY29kZTtLdC50b0FTQ0lJO0t0LnRvVW5pY29kZTtLdC51Y3MyO0t0LnZlcnNpb247fSk7ZnVuY3Rpb24gb0UodCxlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSl9dmFyIGFFLE1pLGxFLHB0LFpwPV9lKCgpPT57XygpO3YoKTttKCk7YUU9ZnVuY3Rpb24odCxlLHIsaSl7ZT1lfHxcIiZcIixyPXJ8fFwiPVwiO3ZhciBuPXt9O2lmKHR5cGVvZiB0IT1cInN0cmluZ1wifHx0Lmxlbmd0aD09PTApcmV0dXJuIG47dmFyIG89L1xcKy9nO3Q9dC5zcGxpdChlKTt2YXIgcz0xZTM7aSYmdHlwZW9mIGkubWF4S2V5cz09XCJudW1iZXJcIiYmKHM9aS5tYXhLZXlzKTt2YXIgYT10Lmxlbmd0aDtzPjAmJmE+cyYmKGE9cyk7Zm9yKHZhciBsPTA7bDxhOysrbCl7dmFyIGMsaCxkLGcseT10W2xdLnJlcGxhY2UobyxcIiUyMFwiKSx3PXkuaW5kZXhPZihyKTt3Pj0wPyhjPXkuc3Vic3RyKDAsdyksaD15LnN1YnN0cih3KzEpKTooYz15LGg9XCJcIiksZD1kZWNvZGVVUklDb21wb25lbnQoYyksZz1kZWNvZGVVUklDb21wb25lbnQoaCksb0UobixkKT9BcnJheS5pc0FycmF5KG5bZF0pP25bZF0ucHVzaChnKTpuW2RdPVtuW2RdLGddOm5bZF09Zzt9cmV0dXJuIG59LE1pPWZ1bmN0aW9uKHQpe3N3aXRjaCh0eXBlb2YgdCl7Y2FzZVwic3RyaW5nXCI6cmV0dXJuIHQ7Y2FzZVwiYm9vbGVhblwiOnJldHVybiB0P1widHJ1ZVwiOlwiZmFsc2VcIjtjYXNlXCJudW1iZXJcIjpyZXR1cm4gaXNGaW5pdGUodCk/dDpcIlwiO2RlZmF1bHQ6cmV0dXJuIFwiXCJ9fSxsRT1mdW5jdGlvbih0LGUscixpKXtyZXR1cm4gZT1lfHxcIiZcIixyPXJ8fFwiPVwiLHQ9PT1udWxsJiYodD12b2lkIDApLHR5cGVvZiB0PT1cIm9iamVjdFwiP09iamVjdC5rZXlzKHQpLm1hcChmdW5jdGlvbihuKXt2YXIgbz1lbmNvZGVVUklDb21wb25lbnQoTWkobikpK3I7cmV0dXJuIEFycmF5LmlzQXJyYXkodFtuXSk/dFtuXS5tYXAoZnVuY3Rpb24ocyl7cmV0dXJuIG8rZW5jb2RlVVJJQ29tcG9uZW50KE1pKHMpKX0pLmpvaW4oZSk6bytlbmNvZGVVUklDb21wb25lbnQoTWkodFtuXSkpfSkuam9pbihlKTppP2VuY29kZVVSSUNvbXBvbmVudChNaShpKSkrcitlbmNvZGVVUklDb21wb25lbnQoTWkodCkpOlwiXCJ9LHB0PXt9O3B0LmRlY29kZT1wdC5wYXJzZT1hRSxwdC5lbmNvZGU9cHQuc3RyaW5naWZ5PWxFO3B0LmRlY29kZTtwdC5lbmNvZGU7cHQucGFyc2U7cHQuc3RyaW5naWZ5O30pO2Z1bmN0aW9uIEdhKCl7dGhyb3cgbmV3IEVycm9yKFwic2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZFwiKX1mdW5jdGlvbiBRYSgpe3Rocm93IG5ldyBFcnJvcihcImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZFwiKX1mdW5jdGlvbiByZyh0KXtpZihQdD09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRpbWVvdXQodCwwKTtpZigoUHQ9PT1HYXx8IVB0KSYmc2V0VGltZW91dClyZXR1cm4gUHQ9c2V0VGltZW91dCxzZXRUaW1lb3V0KHQsMCk7dHJ5e3JldHVybiBQdCh0LDApfWNhdGNoe3RyeXtyZXR1cm4gUHQuY2FsbChudWxsLHQsMCl9Y2F0Y2h7cmV0dXJuIFB0LmNhbGwodGhpc3x8c2ksdCwwKX19fWZ1bmN0aW9uIHVFKCl7bmkmJkNyJiYobmk9ITEsQ3IubGVuZ3RoP090PUNyLmNvbmNhdChPdCk6YXM9LTEsT3QubGVuZ3RoJiZpZygpKTt9ZnVuY3Rpb24gaWcoKXtpZighbmkpe3ZhciB0PXJnKHVFKTtuaT0hMDtmb3IodmFyIGU9T3QubGVuZ3RoO2U7KXtmb3IoQ3I9T3QsT3Q9W107KythczxlOylDciYmQ3JbYXNdLnJ1bigpO2FzPS0xLGU9T3QubGVuZ3RoO31Dcj1udWxsLG5pPSExLGZ1bmN0aW9uKHIpe2lmKGt0PT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQocik7aWYoKGt0PT09UWF8fCFrdCkmJmNsZWFyVGltZW91dClyZXR1cm4ga3Q9Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dChyKTt0cnl7a3Qocik7fWNhdGNoe3RyeXtyZXR1cm4ga3QuY2FsbChudWxsLHIpfWNhdGNoe3JldHVybiBrdC5jYWxsKHRoaXN8fHNpLHIpfX19KHQpO319ZnVuY3Rpb24gZWcodCxlKXsodGhpc3x8c2kpLmZ1bj10LCh0aGlzfHxzaSkuYXJyYXk9ZTt9ZnVuY3Rpb24gQnQoKXt9dmFyIHRnLFB0LGt0LHNpLGZlLENyLE90LG5pLGFzLG5lLG5nPV9lKCgpPT57XygpO3YoKTttKCk7c2k9dHlwZW9mIGdsb2JhbFRoaXM8XCJ1XCI/Z2xvYmFsVGhpczp0eXBlb2Ygc2VsZjxcInVcIj9zZWxmOmdsb2JhbCxmZT10Zz17fTsoZnVuY3Rpb24oKXt0cnl7UHQ9dHlwZW9mIHNldFRpbWVvdXQ9PVwiZnVuY3Rpb25cIj9zZXRUaW1lb3V0OkdhO31jYXRjaHtQdD1HYTt9dHJ5e2t0PXR5cGVvZiBjbGVhclRpbWVvdXQ9PVwiZnVuY3Rpb25cIj9jbGVhclRpbWVvdXQ6UWE7fWNhdGNoe2t0PVFhO319KSgpO090PVtdLG5pPSExLGFzPS0xO2ZlLm5leHRUaWNrPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKWVbci0xXT1hcmd1bWVudHNbcl07T3QucHVzaChuZXcgZWcodCxlKSksT3QubGVuZ3RoIT09MXx8bml8fHJnKGlnKTt9LGVnLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXsodGhpc3x8c2kpLmZ1bi5hcHBseShudWxsLCh0aGlzfHxzaSkuYXJyYXkpO30sZmUudGl0bGU9XCJicm93c2VyXCIsZmUuYnJvd3Nlcj0hMCxmZS5lbnY9e30sZmUuYXJndj1bXSxmZS52ZXJzaW9uPVwiXCIsZmUudmVyc2lvbnM9e30sZmUub249QnQsZmUuYWRkTGlzdGVuZXI9QnQsZmUub25jZT1CdCxmZS5vZmY9QnQsZmUucmVtb3ZlTGlzdGVuZXI9QnQsZmUucmVtb3ZlQWxsTGlzdGVuZXJzPUJ0LGZlLmVtaXQ9QnQsZmUucHJlcGVuZExpc3RlbmVyPUJ0LGZlLnByZXBlbmRPbmNlTGlzdGVuZXI9QnQsZmUubGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3JldHVybiBbXX0sZmUuYmluZGluZz1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoXCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZFwiKX0sZmUuY3dkPWZ1bmN0aW9uKCl7cmV0dXJuIFwiL1wifSxmZS5jaGRpcj1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoXCJwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWRcIil9LGZlLnVtYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9O25lPXRnO25lLmFkZExpc3RlbmVyO25lLmFyZ3Y7bmUuYmluZGluZztuZS5icm93c2VyO25lLmNoZGlyO25lLmN3ZDtuZS5lbWl0O25lLmVudjtuZS5saXN0ZW5lcnM7bmUubmV4dFRpY2s7bmUub2ZmO25lLm9uO25lLm9uY2U7bmUucHJlcGVuZExpc3RlbmVyO25lLnByZXBlbmRPbmNlTGlzdGVuZXI7bmUucmVtb3ZlQWxsTGlzdGVuZXJzO25lLnJlbW92ZUxpc3RlbmVyO25lLnRpdGxlO25lLnVtYXNrO25lLnZlcnNpb247bmUudmVyc2lvbnM7fSk7ZnVuY3Rpb24gZkUoKXtpZihzZylyZXR1cm4gWWE7c2c9ITA7dmFyIHQ9WWE9e30sZSxyO2Z1bmN0aW9uIGkoKXt0aHJvdyBuZXcgRXJyb3IoXCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkXCIpfWZ1bmN0aW9uIG4oKXt0aHJvdyBuZXcgRXJyb3IoXCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWRcIil9KGZ1bmN0aW9uKCl7dHJ5e3R5cGVvZiBzZXRUaW1lb3V0PT1cImZ1bmN0aW9uXCI/ZT1zZXRUaW1lb3V0OmU9aTt9Y2F0Y2h7ZT1pO310cnl7dHlwZW9mIGNsZWFyVGltZW91dD09XCJmdW5jdGlvblwiP3I9Y2xlYXJUaW1lb3V0OnI9bjt9Y2F0Y2h7cj1uO319KSgpO2Z1bmN0aW9uIG8oUyl7aWYoZT09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRpbWVvdXQoUywwKTtpZigoZT09PWl8fCFlKSYmc2V0VGltZW91dClyZXR1cm4gZT1zZXRUaW1lb3V0LHNldFRpbWVvdXQoUywwKTt0cnl7cmV0dXJuIGUoUywwKX1jYXRjaHt0cnl7cmV0dXJuIGUuY2FsbChudWxsLFMsMCl9Y2F0Y2h7cmV0dXJuIGUuY2FsbCh0aGlzfHxvaSxTLDApfX19ZnVuY3Rpb24gcyhTKXtpZihyPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQoUyk7aWYoKHI9PT1ufHwhcikmJmNsZWFyVGltZW91dClyZXR1cm4gcj1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KFMpO3RyeXtyZXR1cm4gcihTKX1jYXRjaHt0cnl7cmV0dXJuIHIuY2FsbChudWxsLFMpfWNhdGNoe3JldHVybiByLmNhbGwodGhpc3x8b2ksUyl9fX12YXIgYT1bXSxsPSExLGMsaD0tMTtmdW5jdGlvbiBkKCl7IWx8fCFjfHwobD0hMSxjLmxlbmd0aD9hPWMuY29uY2F0KGEpOmg9LTEsYS5sZW5ndGgmJmcoKSk7fWZ1bmN0aW9uIGcoKXtpZighbCl7dmFyIFM9byhkKTtsPSEwO2Zvcih2YXIgRT1hLmxlbmd0aDtFOyl7Zm9yKGM9YSxhPVtdOysraDxFOyljJiZjW2hdLnJ1bigpO2g9LTEsRT1hLmxlbmd0aDt9Yz1udWxsLGw9ITEscyhTKTt9fXQubmV4dFRpY2s9ZnVuY3Rpb24oUyl7dmFyIEU9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZvcih2YXIgST0xO0k8YXJndW1lbnRzLmxlbmd0aDtJKyspRVtJLTFdPWFyZ3VtZW50c1tJXTthLnB1c2gobmV3IHkoUyxFKSksYS5sZW5ndGg9PT0xJiYhbCYmbyhnKTt9O2Z1bmN0aW9uIHkoUyxFKXsodGhpc3x8b2kpLmZ1bj1TLCh0aGlzfHxvaSkuYXJyYXk9RTt9eS5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7KHRoaXN8fG9pKS5mdW4uYXBwbHkobnVsbCwodGhpc3x8b2kpLmFycmF5KTt9LHQudGl0bGU9XCJicm93c2VyXCIsdC5icm93c2VyPSEwLHQuZW52PXt9LHQuYXJndj1bXSx0LnZlcnNpb249XCJcIix0LnZlcnNpb25zPXt9O2Z1bmN0aW9uIHcoKXt9cmV0dXJuIHQub249dyx0LmFkZExpc3RlbmVyPXcsdC5vbmNlPXcsdC5vZmY9dyx0LnJlbW92ZUxpc3RlbmVyPXcsdC5yZW1vdmVBbGxMaXN0ZW5lcnM9dyx0LmVtaXQ9dyx0LnByZXBlbmRMaXN0ZW5lcj13LHQucHJlcGVuZE9uY2VMaXN0ZW5lcj13LHQubGlzdGVuZXJzPWZ1bmN0aW9uKFMpe3JldHVybiBbXX0sdC5iaW5kaW5nPWZ1bmN0aW9uKFMpe3Rocm93IG5ldyBFcnJvcihcInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkXCIpfSx0LmN3ZD1mdW5jdGlvbigpe3JldHVybiBcIi9cIn0sdC5jaGRpcj1mdW5jdGlvbihTKXt0aHJvdyBuZXcgRXJyb3IoXCJwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWRcIil9LHQudW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sWWF9dmFyIFlhLHNnLG9pLHJlLEphPV9lKCgpPT57XygpO3YoKTttKCk7WWE9e30sc2c9ITEsb2k9dHlwZW9mIGdsb2JhbFRoaXM8XCJ1XCI/Z2xvYmFsVGhpczp0eXBlb2Ygc2VsZjxcInVcIj9zZWxmOmdsb2JhbDtyZT1mRSgpO3JlLnBsYXRmb3JtPVwiYnJvd3NlclwiO3JlLmFkZExpc3RlbmVyO3JlLmFyZ3Y7cmUuYmluZGluZztyZS5icm93c2VyO3JlLmNoZGlyO3JlLmN3ZDtyZS5lbWl0O3JlLmVudjtyZS5saXN0ZW5lcnM7cmUubmV4dFRpY2s7cmUub2ZmO3JlLm9uO3JlLm9uY2U7cmUucHJlcGVuZExpc3RlbmVyO3JlLnByZXBlbmRPbmNlTGlzdGVuZXI7cmUucmVtb3ZlQWxsTGlzdGVuZXJzO3JlLnJlbW92ZUxpc3RlbmVyO3JlLnRpdGxlO3JlLnVtYXNrO3JlLnZlcnNpb247cmUudmVyc2lvbnM7fSk7ZnVuY3Rpb24gY0UoKXtpZihvZylyZXR1cm4gWGE7b2c9ITA7dmFyIHQ9cmU7ZnVuY3Rpb24gZShvKXtpZih0eXBlb2YgbyE9XCJzdHJpbmdcIil0aHJvdyBuZXcgVHlwZUVycm9yKFwiUGF0aCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCBcIitKU09OLnN0cmluZ2lmeShvKSl9ZnVuY3Rpb24gcihvLHMpe2Zvcih2YXIgYT1cIlwiLGw9MCxjPS0xLGg9MCxkLGc9MDtnPD1vLmxlbmd0aDsrK2cpe2lmKGc8by5sZW5ndGgpZD1vLmNoYXJDb2RlQXQoZyk7ZWxzZSB7aWYoZD09PTQ3KWJyZWFrO2Q9NDc7fWlmKGQ9PT00Nyl7aWYoIShjPT09Zy0xfHxoPT09MSkpaWYoYyE9PWctMSYmaD09PTIpe2lmKGEubGVuZ3RoPDJ8fGwhPT0yfHxhLmNoYXJDb2RlQXQoYS5sZW5ndGgtMSkhPT00Nnx8YS5jaGFyQ29kZUF0KGEubGVuZ3RoLTIpIT09NDYpe2lmKGEubGVuZ3RoPjIpe3ZhciB5PWEubGFzdEluZGV4T2YoXCIvXCIpO2lmKHkhPT1hLmxlbmd0aC0xKXt5PT09LTE/KGE9XCJcIixsPTApOihhPWEuc2xpY2UoMCx5KSxsPWEubGVuZ3RoLTEtYS5sYXN0SW5kZXhPZihcIi9cIikpLGM9ZyxoPTA7Y29udGludWV9fWVsc2UgaWYoYS5sZW5ndGg9PT0yfHxhLmxlbmd0aD09PTEpe2E9XCJcIixsPTAsYz1nLGg9MDtjb250aW51ZX19cyYmKGEubGVuZ3RoPjA/YSs9XCIvLi5cIjphPVwiLi5cIixsPTIpO31lbHNlIGEubGVuZ3RoPjA/YSs9XCIvXCIrby5zbGljZShjKzEsZyk6YT1vLnNsaWNlKGMrMSxnKSxsPWctYy0xO2M9ZyxoPTA7fWVsc2UgZD09PTQ2JiZoIT09LTE/KytoOmg9LTE7fXJldHVybiBhfWZ1bmN0aW9uIGkobyxzKXt2YXIgYT1zLmRpcnx8cy5yb290LGw9cy5iYXNlfHwocy5uYW1lfHxcIlwiKSsocy5leHR8fFwiXCIpO3JldHVybiBhP2E9PT1zLnJvb3Q/YStsOmErbytsOmx9dmFyIG49e3Jlc29sdmU6ZnVuY3Rpb24oKXtmb3IodmFyIHM9XCJcIixhPSExLGwsYz1hcmd1bWVudHMubGVuZ3RoLTE7Yz49LTEmJiFhO2MtLSl7dmFyIGg7Yz49MD9oPWFyZ3VtZW50c1tjXToobD09PXZvaWQgMCYmKGw9dC5jd2QoKSksaD1sKSxlKGgpLGgubGVuZ3RoIT09MCYmKHM9aCtcIi9cIitzLGE9aC5jaGFyQ29kZUF0KDApPT09NDcpO31yZXR1cm4gcz1yKHMsIWEpLGE/cy5sZW5ndGg+MD9cIi9cIitzOlwiL1wiOnMubGVuZ3RoPjA/czpcIi5cIn0sbm9ybWFsaXplOmZ1bmN0aW9uKHMpe2lmKGUocykscy5sZW5ndGg9PT0wKXJldHVybiBcIi5cIjt2YXIgYT1zLmNoYXJDb2RlQXQoMCk9PT00NyxsPXMuY2hhckNvZGVBdChzLmxlbmd0aC0xKT09PTQ3O3JldHVybiBzPXIocywhYSkscy5sZW5ndGg9PT0wJiYhYSYmKHM9XCIuXCIpLHMubGVuZ3RoPjAmJmwmJihzKz1cIi9cIiksYT9cIi9cIitzOnN9LGlzQWJzb2x1dGU6ZnVuY3Rpb24ocyl7cmV0dXJuIGUocykscy5sZW5ndGg+MCYmcy5jaGFyQ29kZUF0KDApPT09NDd9LGpvaW46ZnVuY3Rpb24oKXtpZihhcmd1bWVudHMubGVuZ3RoPT09MClyZXR1cm4gXCIuXCI7Zm9yKHZhciBzLGE9MDthPGFyZ3VtZW50cy5sZW5ndGg7KythKXt2YXIgbD1hcmd1bWVudHNbYV07ZShsKSxsLmxlbmd0aD4wJiYocz09PXZvaWQgMD9zPWw6cys9XCIvXCIrbCk7fXJldHVybiBzPT09dm9pZCAwP1wiLlwiOm4ubm9ybWFsaXplKHMpfSxyZWxhdGl2ZTpmdW5jdGlvbihzLGEpe2lmKGUocyksZShhKSxzPT09YXx8KHM9bi5yZXNvbHZlKHMpLGE9bi5yZXNvbHZlKGEpLHM9PT1hKSlyZXR1cm4gXCJcIjtmb3IodmFyIGw9MTtsPHMubGVuZ3RoJiZzLmNoYXJDb2RlQXQobCk9PT00NzsrK2wpO2Zvcih2YXIgYz1zLmxlbmd0aCxoPWMtbCxkPTE7ZDxhLmxlbmd0aCYmYS5jaGFyQ29kZUF0KGQpPT09NDc7KytkKTtmb3IodmFyIGc9YS5sZW5ndGgseT1nLWQsdz1oPHk/aDp5LFM9LTEsRT0wO0U8PXc7KytFKXtpZihFPT09dyl7aWYoeT53KXtpZihhLmNoYXJDb2RlQXQoZCtFKT09PTQ3KXJldHVybiBhLnNsaWNlKGQrRSsxKTtpZihFPT09MClyZXR1cm4gYS5zbGljZShkK0UpfWVsc2UgaD53JiYocy5jaGFyQ29kZUF0KGwrRSk9PT00Nz9TPUU6RT09PTAmJihTPTApKTticmVha312YXIgST1zLmNoYXJDb2RlQXQobCtFKSxDPWEuY2hhckNvZGVBdChkK0UpO2lmKEkhPT1DKWJyZWFrO0k9PT00NyYmKFM9RSk7fXZhciBSPVwiXCI7Zm9yKEU9bCtTKzE7RTw9YzsrK0UpKEU9PT1jfHxzLmNoYXJDb2RlQXQoRSk9PT00NykmJihSLmxlbmd0aD09PTA/Uis9XCIuLlwiOlIrPVwiLy4uXCIpO3JldHVybiBSLmxlbmd0aD4wP1IrYS5zbGljZShkK1MpOihkKz1TLGEuY2hhckNvZGVBdChkKT09PTQ3JiYrK2QsYS5zbGljZShkKSl9LF9tYWtlTG9uZzpmdW5jdGlvbihzKXtyZXR1cm4gc30sZGlybmFtZTpmdW5jdGlvbihzKXtpZihlKHMpLHMubGVuZ3RoPT09MClyZXR1cm4gXCIuXCI7Zm9yKHZhciBhPXMuY2hhckNvZGVBdCgwKSxsPWE9PT00NyxjPS0xLGg9ITAsZD1zLmxlbmd0aC0xO2Q+PTE7LS1kKWlmKGE9cy5jaGFyQ29kZUF0KGQpLGE9PT00Nyl7aWYoIWgpe2M9ZDticmVha319ZWxzZSBoPSExO3JldHVybiBjPT09LTE/bD9cIi9cIjpcIi5cIjpsJiZjPT09MT9cIi8vXCI6cy5zbGljZSgwLGMpfSxiYXNlbmFtZTpmdW5jdGlvbihzLGEpe2lmKGEhPT12b2lkIDAmJnR5cGVvZiBhIT1cInN0cmluZ1wiKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wiZXh0XCIgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZycpO2Uocyk7dmFyIGw9MCxjPS0xLGg9ITAsZDtpZihhIT09dm9pZCAwJiZhLmxlbmd0aD4wJiZhLmxlbmd0aDw9cy5sZW5ndGgpe2lmKGEubGVuZ3RoPT09cy5sZW5ndGgmJmE9PT1zKXJldHVybiBcIlwiO3ZhciBnPWEubGVuZ3RoLTEseT0tMTtmb3IoZD1zLmxlbmd0aC0xO2Q+PTA7LS1kKXt2YXIgdz1zLmNoYXJDb2RlQXQoZCk7aWYodz09PTQ3KXtpZighaCl7bD1kKzE7YnJlYWt9fWVsc2UgeT09PS0xJiYoaD0hMSx5PWQrMSksZz49MCYmKHc9PT1hLmNoYXJDb2RlQXQoZyk/LS1nPT09LTEmJihjPWQpOihnPS0xLGM9eSkpO31yZXR1cm4gbD09PWM/Yz15OmM9PT0tMSYmKGM9cy5sZW5ndGgpLHMuc2xpY2UobCxjKX1lbHNlIHtmb3IoZD1zLmxlbmd0aC0xO2Q+PTA7LS1kKWlmKHMuY2hhckNvZGVBdChkKT09PTQ3KXtpZighaCl7bD1kKzE7YnJlYWt9fWVsc2UgYz09PS0xJiYoaD0hMSxjPWQrMSk7cmV0dXJuIGM9PT0tMT9cIlwiOnMuc2xpY2UobCxjKX19LGV4dG5hbWU6ZnVuY3Rpb24ocyl7ZShzKTtmb3IodmFyIGE9LTEsbD0wLGM9LTEsaD0hMCxkPTAsZz1zLmxlbmd0aC0xO2c+PTA7LS1nKXt2YXIgeT1zLmNoYXJDb2RlQXQoZyk7aWYoeT09PTQ3KXtpZighaCl7bD1nKzE7YnJlYWt9Y29udGludWV9Yz09PS0xJiYoaD0hMSxjPWcrMSkseT09PTQ2P2E9PT0tMT9hPWc6ZCE9PTEmJihkPTEpOmEhPT0tMSYmKGQ9LTEpO31yZXR1cm4gYT09PS0xfHxjPT09LTF8fGQ9PT0wfHxkPT09MSYmYT09PWMtMSYmYT09PWwrMT9cIlwiOnMuc2xpY2UoYSxjKX0sZm9ybWF0OmZ1bmN0aW9uKHMpe2lmKHM9PT1udWxsfHx0eXBlb2YgcyE9XCJvYmplY3RcIil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJwYXRoT2JqZWN0XCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBzKTtyZXR1cm4gaShcIi9cIixzKX0scGFyc2U6ZnVuY3Rpb24ocyl7ZShzKTt2YXIgYT17cm9vdDpcIlwiLGRpcjpcIlwiLGJhc2U6XCJcIixleHQ6XCJcIixuYW1lOlwiXCJ9O2lmKHMubGVuZ3RoPT09MClyZXR1cm4gYTt2YXIgbD1zLmNoYXJDb2RlQXQoMCksYz1sPT09NDcsaDtjPyhhLnJvb3Q9XCIvXCIsaD0xKTpoPTA7Zm9yKHZhciBkPS0xLGc9MCx5PS0xLHc9ITAsUz1zLmxlbmd0aC0xLEU9MDtTPj1oOy0tUyl7aWYobD1zLmNoYXJDb2RlQXQoUyksbD09PTQ3KXtpZighdyl7Zz1TKzE7YnJlYWt9Y29udGludWV9eT09PS0xJiYodz0hMSx5PVMrMSksbD09PTQ2P2Q9PT0tMT9kPVM6RSE9PTEmJihFPTEpOmQhPT0tMSYmKEU9LTEpO31yZXR1cm4gZD09PS0xfHx5PT09LTF8fEU9PT0wfHxFPT09MSYmZD09PXktMSYmZD09PWcrMT95IT09LTEmJihnPT09MCYmYz9hLmJhc2U9YS5uYW1lPXMuc2xpY2UoMSx5KTphLmJhc2U9YS5uYW1lPXMuc2xpY2UoZyx5KSk6KGc9PT0wJiZjPyhhLm5hbWU9cy5zbGljZSgxLGQpLGEuYmFzZT1zLnNsaWNlKDEseSkpOihhLm5hbWU9cy5zbGljZShnLGQpLGEuYmFzZT1zLnNsaWNlKGcseSkpLGEuZXh0PXMuc2xpY2UoZCx5KSksZz4wP2EuZGlyPXMuc2xpY2UoMCxnLTEpOmMmJihhLmRpcj1cIi9cIiksYX0sc2VwOlwiL1wiLGRlbGltaXRlcjpcIjpcIix3aW4zMjpudWxsLHBvc2l4Om51bGx9O3JldHVybiBuLnBvc2l4PW4sWGE9bixYYX12YXIgWGEsb2csWmEsYWc9X2UoKCk9PntfKCk7digpO20oKTtKYSgpO1hhPXt9LG9nPSExO1phPWNFKCk7fSk7dmFyIGdnPXt9O0p0KGdnLHtVUkw6KCk9PkZFLFVybDooKT0+VUUsZGVmYXVsdDooKT0+WixmaWxlVVJMVG9QYXRoOigpPT5kZyxmb3JtYXQ6KCk9Pk5FLHBhcnNlOigpPT5qRSxwYXRoVG9GaWxlVVJMOigpPT5wZyxyZXNvbHZlOigpPT5xRSxyZXNvbHZlT2JqZWN0OigpPT5ERX0pO2Z1bmN0aW9uIEZlKCl7dGhpcy5wcm90b2NvbD1udWxsLHRoaXMuc2xhc2hlcz1udWxsLHRoaXMuYXV0aD1udWxsLHRoaXMuaG9zdD1udWxsLHRoaXMucG9ydD1udWxsLHRoaXMuaG9zdG5hbWU9bnVsbCx0aGlzLmhhc2g9bnVsbCx0aGlzLnNlYXJjaD1udWxsLHRoaXMucXVlcnk9bnVsbCx0aGlzLnBhdGhuYW1lPW51bGwsdGhpcy5wYXRoPW51bGwsdGhpcy5ocmVmPW51bGw7fWZ1bmN0aW9uIExpKHQsZSxyKXtpZih0JiZndC5pc09iamVjdCh0KSYmdCBpbnN0YW5jZW9mIEZlKXJldHVybiB0O3ZhciBpPW5ldyBGZTtyZXR1cm4gaS5wYXJzZSh0LGUsciksaX1mdW5jdGlvbiBfRSgpe2lmKGNnKXJldHVybiBybDtjZz0hMDt2YXIgdD1uZTtmdW5jdGlvbiBlKG8pe2lmKHR5cGVvZiBvIT1cInN0cmluZ1wiKXRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXRoIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkIFwiK0pTT04uc3RyaW5naWZ5KG8pKX1mdW5jdGlvbiByKG8scyl7Zm9yKHZhciBhPVwiXCIsbD0wLGM9LTEsaD0wLGQsZz0wO2c8PW8ubGVuZ3RoOysrZyl7aWYoZzxvLmxlbmd0aClkPW8uY2hhckNvZGVBdChnKTtlbHNlIHtpZihkPT09NDcpYnJlYWs7ZD00Nzt9aWYoZD09PTQ3KXtpZighKGM9PT1nLTF8fGg9PT0xKSlpZihjIT09Zy0xJiZoPT09Mil7aWYoYS5sZW5ndGg8Mnx8bCE9PTJ8fGEuY2hhckNvZGVBdChhLmxlbmd0aC0xKSE9PTQ2fHxhLmNoYXJDb2RlQXQoYS5sZW5ndGgtMikhPT00Nil7aWYoYS5sZW5ndGg+Mil7dmFyIHk9YS5sYXN0SW5kZXhPZihcIi9cIik7aWYoeSE9PWEubGVuZ3RoLTEpe3k9PT0tMT8oYT1cIlwiLGw9MCk6KGE9YS5zbGljZSgwLHkpLGw9YS5sZW5ndGgtMS1hLmxhc3RJbmRleE9mKFwiL1wiKSksYz1nLGg9MDtjb250aW51ZX19ZWxzZSBpZihhLmxlbmd0aD09PTJ8fGEubGVuZ3RoPT09MSl7YT1cIlwiLGw9MCxjPWcsaD0wO2NvbnRpbnVlfX1zJiYoYS5sZW5ndGg+MD9hKz1cIi8uLlwiOmE9XCIuLlwiLGw9Mik7fWVsc2UgYS5sZW5ndGg+MD9hKz1cIi9cIitvLnNsaWNlKGMrMSxnKTphPW8uc2xpY2UoYysxLGcpLGw9Zy1jLTE7Yz1nLGg9MDt9ZWxzZSBkPT09NDYmJmghPT0tMT8rK2g6aD0tMTt9cmV0dXJuIGF9ZnVuY3Rpb24gaShvLHMpe3ZhciBhPXMuZGlyfHxzLnJvb3QsbD1zLmJhc2V8fChzLm5hbWV8fFwiXCIpKyhzLmV4dHx8XCJcIik7cmV0dXJuIGE/YT09PXMucm9vdD9hK2w6YStvK2w6bH12YXIgbj17cmVzb2x2ZTpmdW5jdGlvbigpe2Zvcih2YXIgcz1cIlwiLGE9ITEsbCxjPWFyZ3VtZW50cy5sZW5ndGgtMTtjPj0tMSYmIWE7Yy0tKXt2YXIgaDtjPj0wP2g9YXJndW1lbnRzW2NdOihsPT09dm9pZCAwJiYobD10LmN3ZCgpKSxoPWwpLGUoaCksaC5sZW5ndGghPT0wJiYocz1oK1wiL1wiK3MsYT1oLmNoYXJDb2RlQXQoMCk9PT00Nyk7fXJldHVybiBzPXIocywhYSksYT9zLmxlbmd0aD4wP1wiL1wiK3M6XCIvXCI6cy5sZW5ndGg+MD9zOlwiLlwifSxub3JtYWxpemU6ZnVuY3Rpb24ocyl7aWYoZShzKSxzLmxlbmd0aD09PTApcmV0dXJuIFwiLlwiO3ZhciBhPXMuY2hhckNvZGVBdCgwKT09PTQ3LGw9cy5jaGFyQ29kZUF0KHMubGVuZ3RoLTEpPT09NDc7cmV0dXJuIHM9cihzLCFhKSxzLmxlbmd0aD09PTAmJiFhJiYocz1cIi5cIikscy5sZW5ndGg+MCYmbCYmKHMrPVwiL1wiKSxhP1wiL1wiK3M6c30saXNBYnNvbHV0ZTpmdW5jdGlvbihzKXtyZXR1cm4gZShzKSxzLmxlbmd0aD4wJiZzLmNoYXJDb2RlQXQoMCk9PT00N30sam9pbjpmdW5jdGlvbigpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0wKXJldHVybiBcIi5cIjtmb3IodmFyIHMsYT0wO2E8YXJndW1lbnRzLmxlbmd0aDsrK2Epe3ZhciBsPWFyZ3VtZW50c1thXTtlKGwpLGwubGVuZ3RoPjAmJihzPT09dm9pZCAwP3M9bDpzKz1cIi9cIitsKTt9cmV0dXJuIHM9PT12b2lkIDA/XCIuXCI6bi5ub3JtYWxpemUocyl9LHJlbGF0aXZlOmZ1bmN0aW9uKHMsYSl7aWYoZShzKSxlKGEpLHM9PT1hfHwocz1uLnJlc29sdmUocyksYT1uLnJlc29sdmUoYSkscz09PWEpKXJldHVybiBcIlwiO2Zvcih2YXIgbD0xO2w8cy5sZW5ndGgmJnMuY2hhckNvZGVBdChsKT09PTQ3OysrbCk7Zm9yKHZhciBjPXMubGVuZ3RoLGg9Yy1sLGQ9MTtkPGEubGVuZ3RoJiZhLmNoYXJDb2RlQXQoZCk9PT00NzsrK2QpO2Zvcih2YXIgZz1hLmxlbmd0aCx5PWctZCx3PWg8eT9oOnksUz0tMSxFPTA7RTw9dzsrK0Upe2lmKEU9PT13KXtpZih5Pncpe2lmKGEuY2hhckNvZGVBdChkK0UpPT09NDcpcmV0dXJuIGEuc2xpY2UoZCtFKzEpO2lmKEU9PT0wKXJldHVybiBhLnNsaWNlKGQrRSl9ZWxzZSBoPncmJihzLmNoYXJDb2RlQXQobCtFKT09PTQ3P1M9RTpFPT09MCYmKFM9MCkpO2JyZWFrfXZhciBJPXMuY2hhckNvZGVBdChsK0UpLEM9YS5jaGFyQ29kZUF0KGQrRSk7aWYoSSE9PUMpYnJlYWs7ST09PTQ3JiYoUz1FKTt9dmFyIFI9XCJcIjtmb3IoRT1sK1MrMTtFPD1jOysrRSkoRT09PWN8fHMuY2hhckNvZGVBdChFKT09PTQ3KSYmKFIubGVuZ3RoPT09MD9SKz1cIi4uXCI6Uis9XCIvLi5cIik7cmV0dXJuIFIubGVuZ3RoPjA/UithLnNsaWNlKGQrUyk6KGQrPVMsYS5jaGFyQ29kZUF0KGQpPT09NDcmJisrZCxhLnNsaWNlKGQpKX0sX21ha2VMb25nOmZ1bmN0aW9uKHMpe3JldHVybiBzfSxkaXJuYW1lOmZ1bmN0aW9uKHMpe2lmKGUocykscy5sZW5ndGg9PT0wKXJldHVybiBcIi5cIjtmb3IodmFyIGE9cy5jaGFyQ29kZUF0KDApLGw9YT09PTQ3LGM9LTEsaD0hMCxkPXMubGVuZ3RoLTE7ZD49MTstLWQpaWYoYT1zLmNoYXJDb2RlQXQoZCksYT09PTQ3KXtpZighaCl7Yz1kO2JyZWFrfX1lbHNlIGg9ITE7cmV0dXJuIGM9PT0tMT9sP1wiL1wiOlwiLlwiOmwmJmM9PT0xP1wiLy9cIjpzLnNsaWNlKDAsYyl9LGJhc2VuYW1lOmZ1bmN0aW9uKHMsYSl7aWYoYSE9PXZvaWQgMCYmdHlwZW9mIGEhPVwic3RyaW5nXCIpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJleHRcIiBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJyk7ZShzKTt2YXIgbD0wLGM9LTEsaD0hMCxkO2lmKGEhPT12b2lkIDAmJmEubGVuZ3RoPjAmJmEubGVuZ3RoPD1zLmxlbmd0aCl7aWYoYS5sZW5ndGg9PT1zLmxlbmd0aCYmYT09PXMpcmV0dXJuIFwiXCI7dmFyIGc9YS5sZW5ndGgtMSx5PS0xO2ZvcihkPXMubGVuZ3RoLTE7ZD49MDstLWQpe3ZhciB3PXMuY2hhckNvZGVBdChkKTtpZih3PT09NDcpe2lmKCFoKXtsPWQrMTticmVha319ZWxzZSB5PT09LTEmJihoPSExLHk9ZCsxKSxnPj0wJiYodz09PWEuY2hhckNvZGVBdChnKT8tLWc9PT0tMSYmKGM9ZCk6KGc9LTEsYz15KSk7fXJldHVybiBsPT09Yz9jPXk6Yz09PS0xJiYoYz1zLmxlbmd0aCkscy5zbGljZShsLGMpfWVsc2Uge2ZvcihkPXMubGVuZ3RoLTE7ZD49MDstLWQpaWYocy5jaGFyQ29kZUF0KGQpPT09NDcpe2lmKCFoKXtsPWQrMTticmVha319ZWxzZSBjPT09LTEmJihoPSExLGM9ZCsxKTtyZXR1cm4gYz09PS0xP1wiXCI6cy5zbGljZShsLGMpfX0sZXh0bmFtZTpmdW5jdGlvbihzKXtlKHMpO2Zvcih2YXIgYT0tMSxsPTAsYz0tMSxoPSEwLGQ9MCxnPXMubGVuZ3RoLTE7Zz49MDstLWcpe3ZhciB5PXMuY2hhckNvZGVBdChnKTtpZih5PT09NDcpe2lmKCFoKXtsPWcrMTticmVha31jb250aW51ZX1jPT09LTEmJihoPSExLGM9ZysxKSx5PT09NDY/YT09PS0xP2E9ZzpkIT09MSYmKGQ9MSk6YSE9PS0xJiYoZD0tMSk7fXJldHVybiBhPT09LTF8fGM9PT0tMXx8ZD09PTB8fGQ9PT0xJiZhPT09Yy0xJiZhPT09bCsxP1wiXCI6cy5zbGljZShhLGMpfSxmb3JtYXQ6ZnVuY3Rpb24ocyl7aWYocz09PW51bGx8fHR5cGVvZiBzIT1cIm9iamVjdFwiKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInBhdGhPYmplY3RcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIHMpO3JldHVybiBpKFwiL1wiLHMpfSxwYXJzZTpmdW5jdGlvbihzKXtlKHMpO3ZhciBhPXtyb290OlwiXCIsZGlyOlwiXCIsYmFzZTpcIlwiLGV4dDpcIlwiLG5hbWU6XCJcIn07aWYocy5sZW5ndGg9PT0wKXJldHVybiBhO3ZhciBsPXMuY2hhckNvZGVBdCgwKSxjPWw9PT00NyxoO2M/KGEucm9vdD1cIi9cIixoPTEpOmg9MDtmb3IodmFyIGQ9LTEsZz0wLHk9LTEsdz0hMCxTPXMubGVuZ3RoLTEsRT0wO1M+PWg7LS1TKXtpZihsPXMuY2hhckNvZGVBdChTKSxsPT09NDcpe2lmKCF3KXtnPVMrMTticmVha31jb250aW51ZX15PT09LTEmJih3PSExLHk9UysxKSxsPT09NDY/ZD09PS0xP2Q9UzpFIT09MSYmKEU9MSk6ZCE9PS0xJiYoRT0tMSk7fXJldHVybiBkPT09LTF8fHk9PT0tMXx8RT09PTB8fEU9PT0xJiZkPT09eS0xJiZkPT09ZysxP3khPT0tMSYmKGc9PT0wJiZjP2EuYmFzZT1hLm5hbWU9cy5zbGljZSgxLHkpOmEuYmFzZT1hLm5hbWU9cy5zbGljZShnLHkpKTooZz09PTAmJmM/KGEubmFtZT1zLnNsaWNlKDEsZCksYS5iYXNlPXMuc2xpY2UoMSx5KSk6KGEubmFtZT1zLnNsaWNlKGcsZCksYS5iYXNlPXMuc2xpY2UoZyx5KSksYS5leHQ9cy5zbGljZShkLHkpKSxnPjA/YS5kaXI9cy5zbGljZSgwLGctMSk6YyYmKGEuZGlyPVwiL1wiKSxhfSxzZXA6XCIvXCIsZGVsaW1pdGVyOlwiOlwiLHdpbjMyOm51bGwscG9zaXg6bnVsbH07cmV0dXJuIG4ucG9zaXg9bixybD1uLHJsfWZ1bmN0aW9uIGtFKHQpe2lmKHR5cGVvZiB0PT1cInN0cmluZ1wiKXQ9bmV3IFVSTCh0KTtlbHNlIGlmKCEodCBpbnN0YW5jZW9mIFVSTCkpdGhyb3cgbmV3IERlbm8uZXJyb3JzLkludmFsaWREYXRhKFwiaW52YWxpZCBhcmd1bWVudCBwYXRoICwgbXVzdCBiZSBhIHN0cmluZyBvciBVUkxcIik7aWYodC5wcm90b2NvbCE9PVwiZmlsZTpcIil0aHJvdyBuZXcgRGVuby5lcnJvcnMuSW52YWxpZERhdGEoXCJpbnZhbGlkIHVybCBzY2hlbWVcIik7cmV0dXJuIG5sP09FKHQpOnhFKHQpfWZ1bmN0aW9uIE9FKHQpe2xldCBlPXQuaG9zdG5hbWUscj10LnBhdGhuYW1lO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKWlmKHJbaV09PT1cIiVcIil7bGV0IG49ci5jb2RlUG9pbnRBdChpKzIpfHwzMjtpZihyW2krMV09PT1cIjJcIiYmbj09PTEwMnx8cltpKzFdPT09XCI1XCImJm49PT05OSl0aHJvdyBuZXcgRGVuby5lcnJvcnMuSW52YWxpZERhdGEoXCJtdXN0IG5vdCBpbmNsdWRlIGVuY29kZWQgXFxcXCBvciAvIGNoYXJhY3RlcnNcIil9aWYocj1yLnJlcGxhY2UoSUUsXCJcXFxcXCIpLHI9ZGVjb2RlVVJJQ29tcG9uZW50KHIpLGUhPT1cIlwiKXJldHVybiBgXFxcXFxcXFwke2V9JHtyfWA7e2xldCBpPXIuY29kZVBvaW50QXQoMSl8MzIsbj1yWzJdO2lmKGk8U0V8fGk+QUV8fG4hPT1cIjpcIil0aHJvdyBuZXcgRGVuby5lcnJvcnMuSW52YWxpZERhdGEoXCJmaWxlIHVybCBwYXRoIG11c3QgYmUgYWJzb2x1dGVcIik7cmV0dXJuIHIuc2xpY2UoMSl9fWZ1bmN0aW9uIHhFKHQpe2lmKHQuaG9zdG5hbWUhPT1cIlwiKXRocm93IG5ldyBEZW5vLmVycm9ycy5JbnZhbGlkRGF0YShcImludmFsaWQgZmlsZSB1cmwgaG9zdG5hbWVcIik7bGV0IGU9dC5wYXRobmFtZTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKylpZihlW3JdPT09XCIlXCIpe2xldCBpPWUuY29kZVBvaW50QXQocisyKXx8MzI7aWYoZVtyKzFdPT09XCIyXCImJmk9PT0xMDIpdGhyb3cgbmV3IERlbm8uZXJyb3JzLkludmFsaWREYXRhKFwibXVzdCBub3QgaW5jbHVkZSBlbmNvZGVkIC8gY2hhcmFjdGVyc1wiKX1yZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGUpfWZ1bmN0aW9uIE1FKHQpe2xldCBlPWhnLnJlc29sdmUodCkscj10LmNoYXJDb2RlQXQodC5sZW5ndGgtMSk7KHI9PT1FRXx8bmwmJnI9PT12RSkmJmVbZS5sZW5ndGgtMV0hPT1oZy5zZXAmJihlKz1cIi9cIik7bGV0IGk9bmV3IFVSTChcImZpbGU6Ly9cIik7cmV0dXJuIGUuaW5jbHVkZXMoXCIlXCIpJiYoZT1lLnJlcGxhY2UoVEUsXCIlMjVcIikpLCFubCYmZS5pbmNsdWRlcyhcIlxcXFxcIikmJihlPWUucmVwbGFjZShSRSxcIiU1Q1wiKSksZS5pbmNsdWRlcyhgXG5gKSYmKGU9ZS5yZXBsYWNlKENFLFwiJTBBXCIpKSxlLmluY2x1ZGVzKFwiXFxyXCIpJiYoZT1lLnJlcGxhY2UoQkUsXCIlMERcIikpLGUuaW5jbHVkZXMoXCJcdFwiKSYmKGU9ZS5yZXBsYWNlKFBFLFwiJTA5XCIpKSxpLnBhdGhuYW1lPWUsaX1mdW5jdGlvbiBkZyh0KXtpZih0eXBlb2YgdD09XCJzdHJpbmdcIil0PW5ldyBVUkwodCk7ZWxzZSBpZighKHQgaW5zdGFuY2VvZiBVUkwpKXRocm93IG5ldyBEZW5vLmVycm9ycy5JbnZhbGlkRGF0YShcImludmFsaWQgYXJndW1lbnQgcGF0aCAsIG11c3QgYmUgYSBzdHJpbmcgb3IgVVJMXCIpO2lmKHQucHJvdG9jb2whPT1cImZpbGU6XCIpdGhyb3cgbmV3IERlbm8uZXJyb3JzLkludmFsaWREYXRhKFwiaW52YWxpZCB1cmwgc2NoZW1lXCIpO3JldHVybiBzbD9YRSh0KTpaRSh0KX1mdW5jdGlvbiBYRSh0KXtsZXQgZT10Lmhvc3RuYW1lLHI9dC5wYXRobmFtZTtmb3IobGV0IGk9MDtpPHIubGVuZ3RoO2krKylpZihyW2ldPT09XCIlXCIpe2xldCBuPXIuY29kZVBvaW50QXQoaSsyKXx8MzI7aWYocltpKzFdPT09XCIyXCImJm49PT0xMDJ8fHJbaSsxXT09PVwiNVwiJiZuPT09OTkpdGhyb3cgbmV3IERlbm8uZXJyb3JzLkludmFsaWREYXRhKFwibXVzdCBub3QgaW5jbHVkZSBlbmNvZGVkIFxcXFwgb3IgLyBjaGFyYWN0ZXJzXCIpfWlmKHI9ci5yZXBsYWNlKHpFLFwiXFxcXFwiKSxyPWRlY29kZVVSSUNvbXBvbmVudChyKSxlIT09XCJcIilyZXR1cm4gYFxcXFxcXFxcJHtlfSR7cn1gO3tsZXQgaT1yLmNvZGVQb2ludEF0KDEpfDMyLG49clsyXTtpZihpPEhFfHxpPlZFfHxuIT09XCI6XCIpdGhyb3cgbmV3IERlbm8uZXJyb3JzLkludmFsaWREYXRhKFwiZmlsZSB1cmwgcGF0aCBtdXN0IGJlIGFic29sdXRlXCIpO3JldHVybiByLnNsaWNlKDEpfX1mdW5jdGlvbiBaRSh0KXtpZih0Lmhvc3RuYW1lIT09XCJcIil0aHJvdyBuZXcgRGVuby5lcnJvcnMuSW52YWxpZERhdGEoXCJpbnZhbGlkIGZpbGUgdXJsIGhvc3RuYW1lXCIpO2xldCBlPXQucGF0aG5hbWU7Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspaWYoZVtyXT09PVwiJVwiKXtsZXQgaT1lLmNvZGVQb2ludEF0KHIrMil8fDMyO2lmKGVbcisxXT09PVwiMlwiJiZpPT09MTAyKXRocm93IG5ldyBEZW5vLmVycm9ycy5JbnZhbGlkRGF0YShcIm11c3Qgbm90IGluY2x1ZGUgZW5jb2RlZCAvIGNoYXJhY3RlcnNcIil9cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlKX1mdW5jdGlvbiBwZyh0KXtsZXQgZT1aYS5yZXNvbHZlKHQpLHI9dC5jaGFyQ29kZUF0KHQubGVuZ3RoLTEpOyhyPT09JEV8fHNsJiZyPT09V0UpJiZlW2UubGVuZ3RoLTFdIT09WmEuc2VwJiYoZSs9XCIvXCIpO2xldCBpPW5ldyBVUkwoXCJmaWxlOi8vXCIpO3JldHVybiBlLmluY2x1ZGVzKFwiJVwiKSYmKGU9ZS5yZXBsYWNlKEtFLFwiJTI1XCIpKSwhc2wmJmUuaW5jbHVkZXMoXCJcXFxcXCIpJiYoZT1lLnJlcGxhY2UoR0UsXCIlNUNcIikpLGUuaW5jbHVkZXMoYFxuYCkmJihlPWUucmVwbGFjZShRRSxcIiUwQVwiKSksZS5pbmNsdWRlcyhcIlxcclwiKSYmKGU9ZS5yZXBsYWNlKFlFLFwiJTBEXCIpKSxlLmluY2x1ZGVzKFwiXHRcIikmJihlPWUucmVwbGFjZShKRSxcIiUwOVwiKSksaS5wYXRobmFtZT1lLGl9dmFyIFosaEUsZ3QsZEUscEUsZ0UseUUsaWwsbGcsdWcsZmcsYkUsd0UsZWwsYWksdGwscmwsY2csaGcsbUUsdkUsRUUsU0UsQUUsbmwsSUUsVEUsUkUsQ0UsQkUsUEUsTEUsVUUsTkUscUUsREUsakUsRkUsV0UsJEUsSEUsVkUsc2wsekUsS0UsR0UsUUUsWUUsSkUseWc9X2UoKCk9PntfKCk7digpO20oKTtYcCgpO1pwKCk7bmcoKTthZygpO0phKCk7Wj17fSxoRT1LdCxndD17aXNTdHJpbmc6ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0PT1cInN0cmluZ1wifSxpc09iamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHQ9PVwib2JqZWN0XCImJnQhPT1udWxsfSxpc051bGw6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1udWxsfSxpc051bGxPclVuZGVmaW5lZDpmdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbH19O1oucGFyc2U9TGksWi5yZXNvbHZlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIExpKHQsITEsITApLnJlc29sdmUoZSl9LFoucmVzb2x2ZU9iamVjdD1mdW5jdGlvbih0LGUpe3JldHVybiB0P0xpKHQsITEsITApLnJlc29sdmVPYmplY3QoZSk6ZX0sWi5mb3JtYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGd0LmlzU3RyaW5nKHQpJiYodD1MaSh0KSksdCBpbnN0YW5jZW9mIEZlP3QuZm9ybWF0KCk6RmUucHJvdG90eXBlLmZvcm1hdC5jYWxsKHQpfSxaLlVybD1GZTtkRT0vXihbYS16MC05ListXSs6KS9pLHBFPS86WzAtOV0qJC8sZ0U9L14oXFwvXFwvPyg/IVxcLylbXlxcP1xcc10qKShcXD9bXlxcc10qKT8kLyx5RT1bXCJ7XCIsXCJ9XCIsXCJ8XCIsXCJcXFxcXCIsXCJeXCIsXCJgXCJdLmNvbmNhdChbXCI8XCIsXCI+XCIsJ1wiJyxcImBcIixcIiBcIixcIlxcclwiLGBcbmAsXCJcdFwiXSksaWw9W1wiJ1wiXS5jb25jYXQoeUUpLGxnPVtcIiVcIixcIi9cIixcIj9cIixcIjtcIixcIiNcIl0uY29uY2F0KGlsKSx1Zz1bXCIvXCIsXCI/XCIsXCIjXCJdLGZnPS9eWythLXowLTlBLVpfLV17MCw2M30kLyxiRT0vXihbK2EtejAtOUEtWl8tXXswLDYzfSkoLiopJC8sd0U9e2phdmFzY3JpcHQ6ITAsXCJqYXZhc2NyaXB0OlwiOiEwfSxlbD17amF2YXNjcmlwdDohMCxcImphdmFzY3JpcHQ6XCI6ITB9LGFpPXtodHRwOiEwLGh0dHBzOiEwLGZ0cDohMCxnb3BoZXI6ITAsZmlsZTohMCxcImh0dHA6XCI6ITAsXCJodHRwczpcIjohMCxcImZ0cDpcIjohMCxcImdvcGhlcjpcIjohMCxcImZpbGU6XCI6ITB9LHRsPXB0O0ZlLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbih0LGUscil7aWYoIWd0LmlzU3RyaW5nKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgJ3VybCcgbXVzdCBiZSBhIHN0cmluZywgbm90IFwiK3R5cGVvZiB0KTt2YXIgaT10LmluZGV4T2YoXCI/XCIpLG49aSE9PS0xJiZpPHQuaW5kZXhPZihcIiNcIik/XCI/XCI6XCIjXCIsbz10LnNwbGl0KG4pO29bMF09b1swXS5yZXBsYWNlKC9cXFxcL2csXCIvXCIpO3ZhciBzPXQ9by5qb2luKG4pO2lmKHM9cy50cmltKCksIXImJnQuc3BsaXQoXCIjXCIpLmxlbmd0aD09PTEpe3ZhciBhPWdFLmV4ZWMocyk7aWYoYSlyZXR1cm4gdGhpcy5wYXRoPXMsdGhpcy5ocmVmPXMsdGhpcy5wYXRobmFtZT1hWzFdLGFbMl0/KHRoaXMuc2VhcmNoPWFbMl0sdGhpcy5xdWVyeT1lP3RsLnBhcnNlKHRoaXMuc2VhcmNoLnN1YnN0cigxKSk6dGhpcy5zZWFyY2guc3Vic3RyKDEpKTplJiYodGhpcy5zZWFyY2g9XCJcIix0aGlzLnF1ZXJ5PXt9KSx0aGlzfXZhciBsPWRFLmV4ZWMocyk7aWYobCl7dmFyIGM9KGw9bFswXSkudG9Mb3dlckNhc2UoKTt0aGlzLnByb3RvY29sPWMscz1zLnN1YnN0cihsLmxlbmd0aCk7fWlmKHJ8fGx8fHMubWF0Y2goL15cXC9cXC9bXkBcXC9dK0BbXkBcXC9dKy8pKXt2YXIgaD1zLnN1YnN0cigwLDIpPT09XCIvL1wiOyFofHxsJiZlbFtsXXx8KHM9cy5zdWJzdHIoMiksdGhpcy5zbGFzaGVzPSEwKTt9aWYoIWVsW2xdJiYoaHx8bCYmIWFpW2xdKSl7Zm9yKHZhciBkLGcseT0tMSx3PTA7dzx1Zy5sZW5ndGg7dysrKShTPXMuaW5kZXhPZih1Z1t3XSkpIT09LTEmJih5PT09LTF8fFM8eSkmJih5PVMpO2ZvcigoZz15PT09LTE/cy5sYXN0SW5kZXhPZihcIkBcIik6cy5sYXN0SW5kZXhPZihcIkBcIix5KSkhPT0tMSYmKGQ9cy5zbGljZSgwLGcpLHM9cy5zbGljZShnKzEpLHRoaXMuYXV0aD1kZWNvZGVVUklDb21wb25lbnQoZCkpLHk9LTEsdz0wO3c8bGcubGVuZ3RoO3crKyl7dmFyIFM7KFM9cy5pbmRleE9mKGxnW3ddKSkhPT0tMSYmKHk9PT0tMXx8Uzx5KSYmKHk9Uyk7fXk9PT0tMSYmKHk9cy5sZW5ndGgpLHRoaXMuaG9zdD1zLnNsaWNlKDAseSkscz1zLnNsaWNlKHkpLHRoaXMucGFyc2VIb3N0KCksdGhpcy5ob3N0bmFtZT10aGlzLmhvc3RuYW1lfHxcIlwiO3ZhciBFPXRoaXMuaG9zdG5hbWVbMF09PT1cIltcIiYmdGhpcy5ob3N0bmFtZVt0aGlzLmhvc3RuYW1lLmxlbmd0aC0xXT09PVwiXVwiO2lmKCFFKWZvcih2YXIgST10aGlzLmhvc3RuYW1lLnNwbGl0KC9cXC4vKSxDPSh3PTAsSS5sZW5ndGgpO3c8Qzt3Kyspe3ZhciBSPUlbd107aWYoUiYmIVIubWF0Y2goZmcpKXtmb3IodmFyIFU9XCJcIixOPTAsVz1SLmxlbmd0aDtOPFc7TisrKVIuY2hhckNvZGVBdChOKT4xMjc/VSs9XCJ4XCI6VSs9UltOXTtpZighVS5tYXRjaChmZykpe3ZhciBLPUkuc2xpY2UoMCx3KSx6PUkuc2xpY2UodysxKSxRPVIubWF0Y2goYkUpO1EmJihLLnB1c2goUVsxXSksei51bnNoaWZ0KFFbMl0pKSx6Lmxlbmd0aCYmKHM9XCIvXCIrei5qb2luKFwiLlwiKStzKSx0aGlzLmhvc3RuYW1lPUsuam9pbihcIi5cIik7YnJlYWt9fX10aGlzLmhvc3RuYW1lLmxlbmd0aD4yNTU/dGhpcy5ob3N0bmFtZT1cIlwiOnRoaXMuaG9zdG5hbWU9dGhpcy5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpLEV8fCh0aGlzLmhvc3RuYW1lPWhFLnRvQVNDSUkodGhpcy5ob3N0bmFtZSkpO3ZhciBwZT10aGlzLnBvcnQ/XCI6XCIrdGhpcy5wb3J0OlwiXCIsWXQ9dGhpcy5ob3N0bmFtZXx8XCJcIjt0aGlzLmhvc3Q9WXQrcGUsdGhpcy5ocmVmKz10aGlzLmhvc3QsRSYmKHRoaXMuaG9zdG5hbWU9dGhpcy5ob3N0bmFtZS5zdWJzdHIoMSx0aGlzLmhvc3RuYW1lLmxlbmd0aC0yKSxzWzBdIT09XCIvXCImJihzPVwiL1wiK3MpKTt9aWYoIXdFW2NdKWZvcih3PTAsQz1pbC5sZW5ndGg7dzxDO3crKyl7dmFyIGdlPWlsW3ddO2lmKHMuaW5kZXhPZihnZSkhPT0tMSl7dmFyIFByPWVuY29kZVVSSUNvbXBvbmVudChnZSk7UHI9PT1nZSYmKFByPWVzY2FwZShnZSkpLHM9cy5zcGxpdChnZSkuam9pbihQcik7fX12YXIga3I9cy5pbmRleE9mKFwiI1wiKTtrciE9PS0xJiYodGhpcy5oYXNoPXMuc3Vic3RyKGtyKSxzPXMuc2xpY2UoMCxrcikpO3ZhciBPcj1zLmluZGV4T2YoXCI/XCIpO2lmKE9yIT09LTE/KHRoaXMuc2VhcmNoPXMuc3Vic3RyKE9yKSx0aGlzLnF1ZXJ5PXMuc3Vic3RyKE9yKzEpLGUmJih0aGlzLnF1ZXJ5PXRsLnBhcnNlKHRoaXMucXVlcnkpKSxzPXMuc2xpY2UoMCxPcikpOmUmJih0aGlzLnNlYXJjaD1cIlwiLHRoaXMucXVlcnk9e30pLHMmJih0aGlzLnBhdGhuYW1lPXMpLGFpW2NdJiZ0aGlzLmhvc3RuYW1lJiYhdGhpcy5wYXRobmFtZSYmKHRoaXMucGF0aG5hbWU9XCIvXCIpLHRoaXMucGF0aG5hbWV8fHRoaXMuc2VhcmNoKXtwZT10aGlzLnBhdGhuYW1lfHxcIlwiO3ZhciBocz10aGlzLnNlYXJjaHx8XCJcIjt0aGlzLnBhdGg9cGUraHM7fXJldHVybiB0aGlzLmhyZWY9dGhpcy5mb3JtYXQoKSx0aGlzfSxGZS5wcm90b3R5cGUuZm9ybWF0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5hdXRofHxcIlwiO3QmJih0PSh0PWVuY29kZVVSSUNvbXBvbmVudCh0KSkucmVwbGFjZSgvJTNBL2ksXCI6XCIpLHQrPVwiQFwiKTt2YXIgZT10aGlzLnByb3RvY29sfHxcIlwiLHI9dGhpcy5wYXRobmFtZXx8XCJcIixpPXRoaXMuaGFzaHx8XCJcIixuPSExLG89XCJcIjt0aGlzLmhvc3Q/bj10K3RoaXMuaG9zdDp0aGlzLmhvc3RuYW1lJiYobj10Kyh0aGlzLmhvc3RuYW1lLmluZGV4T2YoXCI6XCIpPT09LTE/dGhpcy5ob3N0bmFtZTpcIltcIit0aGlzLmhvc3RuYW1lK1wiXVwiKSx0aGlzLnBvcnQmJihuKz1cIjpcIit0aGlzLnBvcnQpKSx0aGlzLnF1ZXJ5JiZndC5pc09iamVjdCh0aGlzLnF1ZXJ5KSYmT2JqZWN0LmtleXModGhpcy5xdWVyeSkubGVuZ3RoJiYobz10bC5zdHJpbmdpZnkodGhpcy5xdWVyeSkpO3ZhciBzPXRoaXMuc2VhcmNofHxvJiZcIj9cIitvfHxcIlwiO3JldHVybiBlJiZlLnN1YnN0cigtMSkhPT1cIjpcIiYmKGUrPVwiOlwiKSx0aGlzLnNsYXNoZXN8fCghZXx8YWlbZV0pJiZuIT09ITE/KG49XCIvL1wiKyhufHxcIlwiKSxyJiZyLmNoYXJBdCgwKSE9PVwiL1wiJiYocj1cIi9cIityKSk6bnx8KG49XCJcIiksaSYmaS5jaGFyQXQoMCkhPT1cIiNcIiYmKGk9XCIjXCIraSkscyYmcy5jaGFyQXQoMCkhPT1cIj9cIiYmKHM9XCI/XCIrcyksZStuKyhyPXIucmVwbGFjZSgvWz8jXS9nLGZ1bmN0aW9uKGEpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoYSl9KSkrKHM9cy5yZXBsYWNlKFwiI1wiLFwiJTIzXCIpKStpfSxGZS5wcm90b3R5cGUucmVzb2x2ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZXNvbHZlT2JqZWN0KExpKHQsITEsITApKS5mb3JtYXQoKX0sRmUucHJvdG90eXBlLnJlc29sdmVPYmplY3Q9ZnVuY3Rpb24odCl7aWYoZ3QuaXNTdHJpbmcodCkpe3ZhciBlPW5ldyBGZTtlLnBhcnNlKHQsITEsITApLHQ9ZTt9Zm9yKHZhciByPW5ldyBGZSxpPU9iamVjdC5rZXlzKHRoaXMpLG49MDtuPGkubGVuZ3RoO24rKyl7dmFyIG89aVtuXTtyW29dPXRoaXNbb107fWlmKHIuaGFzaD10Lmhhc2gsdC5ocmVmPT09XCJcIilyZXR1cm4gci5ocmVmPXIuZm9ybWF0KCkscjtpZih0LnNsYXNoZXMmJiF0LnByb3RvY29sKXtmb3IodmFyIHM9T2JqZWN0LmtleXModCksYT0wO2E8cy5sZW5ndGg7YSsrKXt2YXIgbD1zW2FdO2whPT1cInByb3RvY29sXCImJihyW2xdPXRbbF0pO31yZXR1cm4gYWlbci5wcm90b2NvbF0mJnIuaG9zdG5hbWUmJiFyLnBhdGhuYW1lJiYoci5wYXRoPXIucGF0aG5hbWU9XCIvXCIpLHIuaHJlZj1yLmZvcm1hdCgpLHJ9aWYodC5wcm90b2NvbCYmdC5wcm90b2NvbCE9PXIucHJvdG9jb2wpe2lmKCFhaVt0LnByb3RvY29sXSl7Zm9yKHZhciBjPU9iamVjdC5rZXlzKHQpLGg9MDtoPGMubGVuZ3RoO2grKyl7dmFyIGQ9Y1toXTtyW2RdPXRbZF07fXJldHVybiByLmhyZWY9ci5mb3JtYXQoKSxyfWlmKHIucHJvdG9jb2w9dC5wcm90b2NvbCx0Lmhvc3R8fGVsW3QucHJvdG9jb2xdKXIucGF0aG5hbWU9dC5wYXRobmFtZTtlbHNlIHtmb3IodmFyIGc9KHQucGF0aG5hbWV8fFwiXCIpLnNwbGl0KFwiL1wiKTtnLmxlbmd0aCYmISh0Lmhvc3Q9Zy5zaGlmdCgpKTspO3QuaG9zdHx8KHQuaG9zdD1cIlwiKSx0Lmhvc3RuYW1lfHwodC5ob3N0bmFtZT1cIlwiKSxnWzBdIT09XCJcIiYmZy51bnNoaWZ0KFwiXCIpLGcubGVuZ3RoPDImJmcudW5zaGlmdChcIlwiKSxyLnBhdGhuYW1lPWcuam9pbihcIi9cIik7fWlmKHIuc2VhcmNoPXQuc2VhcmNoLHIucXVlcnk9dC5xdWVyeSxyLmhvc3Q9dC5ob3N0fHxcIlwiLHIuYXV0aD10LmF1dGgsci5ob3N0bmFtZT10Lmhvc3RuYW1lfHx0Lmhvc3Qsci5wb3J0PXQucG9ydCxyLnBhdGhuYW1lfHxyLnNlYXJjaCl7dmFyIHk9ci5wYXRobmFtZXx8XCJcIix3PXIuc2VhcmNofHxcIlwiO3IucGF0aD15K3c7fXJldHVybiByLnNsYXNoZXM9ci5zbGFzaGVzfHx0LnNsYXNoZXMsci5ocmVmPXIuZm9ybWF0KCkscn12YXIgUz1yLnBhdGhuYW1lJiZyLnBhdGhuYW1lLmNoYXJBdCgwKT09PVwiL1wiLEU9dC5ob3N0fHx0LnBhdGhuYW1lJiZ0LnBhdGhuYW1lLmNoYXJBdCgwKT09PVwiL1wiLEk9RXx8U3x8ci5ob3N0JiZ0LnBhdGhuYW1lLEM9SSxSPXIucGF0aG5hbWUmJnIucGF0aG5hbWUuc3BsaXQoXCIvXCIpfHxbXSxVPShnPXQucGF0aG5hbWUmJnQucGF0aG5hbWUuc3BsaXQoXCIvXCIpfHxbXSxyLnByb3RvY29sJiYhYWlbci5wcm90b2NvbF0pO2lmKFUmJihyLmhvc3RuYW1lPVwiXCIsci5wb3J0PW51bGwsci5ob3N0JiYoUlswXT09PVwiXCI/UlswXT1yLmhvc3Q6Ui51bnNoaWZ0KHIuaG9zdCkpLHIuaG9zdD1cIlwiLHQucHJvdG9jb2wmJih0Lmhvc3RuYW1lPW51bGwsdC5wb3J0PW51bGwsdC5ob3N0JiYoZ1swXT09PVwiXCI/Z1swXT10Lmhvc3Q6Zy51bnNoaWZ0KHQuaG9zdCkpLHQuaG9zdD1udWxsKSxJPUkmJihnWzBdPT09XCJcInx8UlswXT09PVwiXCIpKSxFKXIuaG9zdD10Lmhvc3R8fHQuaG9zdD09PVwiXCI/dC5ob3N0OnIuaG9zdCxyLmhvc3RuYW1lPXQuaG9zdG5hbWV8fHQuaG9zdG5hbWU9PT1cIlwiP3QuaG9zdG5hbWU6ci5ob3N0bmFtZSxyLnNlYXJjaD10LnNlYXJjaCxyLnF1ZXJ5PXQucXVlcnksUj1nO2Vsc2UgaWYoZy5sZW5ndGgpUnx8KFI9W10pLFIucG9wKCksUj1SLmNvbmNhdChnKSxyLnNlYXJjaD10LnNlYXJjaCxyLnF1ZXJ5PXQucXVlcnk7ZWxzZSBpZighZ3QuaXNOdWxsT3JVbmRlZmluZWQodC5zZWFyY2gpKXJldHVybiBVJiYoci5ob3N0bmFtZT1yLmhvc3Q9Ui5zaGlmdCgpLChRPSEhKHIuaG9zdCYmci5ob3N0LmluZGV4T2YoXCJAXCIpPjApJiZyLmhvc3Quc3BsaXQoXCJAXCIpKSYmKHIuYXV0aD1RLnNoaWZ0KCksci5ob3N0PXIuaG9zdG5hbWU9US5zaGlmdCgpKSksci5zZWFyY2g9dC5zZWFyY2gsci5xdWVyeT10LnF1ZXJ5LGd0LmlzTnVsbChyLnBhdGhuYW1lKSYmZ3QuaXNOdWxsKHIuc2VhcmNoKXx8KHIucGF0aD0oci5wYXRobmFtZT9yLnBhdGhuYW1lOlwiXCIpKyhyLnNlYXJjaD9yLnNlYXJjaDpcIlwiKSksci5ocmVmPXIuZm9ybWF0KCkscjtpZighUi5sZW5ndGgpcmV0dXJuIHIucGF0aG5hbWU9bnVsbCxyLnNlYXJjaD9yLnBhdGg9XCIvXCIrci5zZWFyY2g6ci5wYXRoPW51bGwsci5ocmVmPXIuZm9ybWF0KCkscjtmb3IodmFyIE49Ui5zbGljZSgtMSlbMF0sVz0oci5ob3N0fHx0Lmhvc3R8fFIubGVuZ3RoPjEpJiYoTj09PVwiLlwifHxOPT09XCIuLlwiKXx8Tj09PVwiXCIsSz0wLHo9Ui5sZW5ndGg7ej49MDt6LS0pKE49Ult6XSk9PT1cIi5cIj9SLnNwbGljZSh6LDEpOk49PT1cIi4uXCI/KFIuc3BsaWNlKHosMSksSysrKTpLJiYoUi5zcGxpY2UoeiwxKSxLLS0pO2lmKCFJJiYhQylmb3IoO0stLTtLKVIudW5zaGlmdChcIi4uXCIpOyFJfHxSWzBdPT09XCJcInx8UlswXSYmUlswXS5jaGFyQXQoMCk9PT1cIi9cInx8Ui51bnNoaWZ0KFwiXCIpLFcmJlIuam9pbihcIi9cIikuc3Vic3RyKC0xKSE9PVwiL1wiJiZSLnB1c2goXCJcIik7dmFyIFEscGU9UlswXT09PVwiXCJ8fFJbMF0mJlJbMF0uY2hhckF0KDApPT09XCIvXCI7cmV0dXJuIFUmJihyLmhvc3RuYW1lPXIuaG9zdD1wZT9cIlwiOlIubGVuZ3RoP1Iuc2hpZnQoKTpcIlwiLChRPSEhKHIuaG9zdCYmci5ob3N0LmluZGV4T2YoXCJAXCIpPjApJiZyLmhvc3Quc3BsaXQoXCJAXCIpKSYmKHIuYXV0aD1RLnNoaWZ0KCksci5ob3N0PXIuaG9zdG5hbWU9US5zaGlmdCgpKSksKEk9SXx8ci5ob3N0JiZSLmxlbmd0aCkmJiFwZSYmUi51bnNoaWZ0KFwiXCIpLFIubGVuZ3RoP3IucGF0aG5hbWU9Ui5qb2luKFwiL1wiKTooci5wYXRobmFtZT1udWxsLHIucGF0aD1udWxsKSxndC5pc051bGwoci5wYXRobmFtZSkmJmd0LmlzTnVsbChyLnNlYXJjaCl8fChyLnBhdGg9KHIucGF0aG5hbWU/ci5wYXRobmFtZTpcIlwiKSsoci5zZWFyY2g/ci5zZWFyY2g6XCJcIikpLHIuYXV0aD10LmF1dGh8fHIuYXV0aCxyLnNsYXNoZXM9ci5zbGFzaGVzfHx0LnNsYXNoZXMsci5ocmVmPXIuZm9ybWF0KCkscn0sRmUucHJvdG90eXBlLnBhcnNlSG9zdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuaG9zdCxlPXBFLmV4ZWModCk7ZSYmKChlPWVbMF0pIT09XCI6XCImJih0aGlzLnBvcnQ9ZS5zdWJzdHIoMSkpLHQ9dC5zdWJzdHIoMCx0Lmxlbmd0aC1lLmxlbmd0aCkpLHQmJih0aGlzLmhvc3RuYW1lPXQpO307Wi5Vcmw7Wi5mb3JtYXQ7Wi5yZXNvbHZlO1oucmVzb2x2ZU9iamVjdDtybD17fSxjZz0hMTtoZz1fRSgpLG1FPXR5cGVvZiBEZW5vPFwidVwiP0Rlbm8uYnVpbGQub3M9PT1cIndpbmRvd3NcIj9cIndpbjMyXCI6RGVuby5idWlsZC5vczp2b2lkIDA7Wi5VUkw9dHlwZW9mIFVSTDxcInVcIj9VUkw6bnVsbDtaLnBhdGhUb0ZpbGVVUkw9TUU7Wi5maWxlVVJMVG9QYXRoPWtFO1ouVXJsO1ouZm9ybWF0O1oucmVzb2x2ZTtaLnJlc29sdmVPYmplY3Q7Wi5VUkw7dkU9OTIsRUU9NDcsU0U9OTcsQUU9MTIyLG5sPW1FPT09XCJ3aW4zMlwiLElFPS9cXC8vZyxURT0vJS9nLFJFPS9cXFxcL2csQ0U9L1xcbi9nLEJFPS9cXHIvZyxQRT0vXFx0L2c7TEU9dHlwZW9mIERlbm88XCJ1XCI/RGVuby5idWlsZC5vcz09PVwid2luZG93c1wiP1wid2luMzJcIjpEZW5vLmJ1aWxkLm9zOnZvaWQgMDtaLlVSTD10eXBlb2YgVVJMPFwidVwiP1VSTDpudWxsO1oucGF0aFRvRmlsZVVSTD1wZztaLmZpbGVVUkxUb1BhdGg9ZGc7VUU9Wi5VcmwsTkU9Wi5mb3JtYXQscUU9Wi5yZXNvbHZlLERFPVoucmVzb2x2ZU9iamVjdCxqRT1aLnBhcnNlLEZFPVouVVJMLFdFPTkyLCRFPTQ3LEhFPTk3LFZFPTEyMixzbD1MRT09PVwid2luMzJcIix6RT0vXFwvL2csS0U9LyUvZyxHRT0vXFxcXC9nLFFFPS9cXG4vZyxZRT0vXFxyL2csSkU9L1xcdC9nO30pO3ZhciB3Zz1NKChtOCxiZyk9PntfKCk7digpO20oKTtiZy5leHBvcnRzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwid3MgZG9lcyBub3Qgd29yayBpbiB0aGUgYnJvd3Nlci4gQnJvd3NlciBjbGllbnRzIG11c3QgdXNlIHRoZSBuYXRpdmUgV2ViU29ja2V0IG9iamVjdFwiKX07fSk7dmFyIGxzPU0obGk9PntfKCk7digpO20oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkobGksXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7bGkuQnVmZmVyZWREdXBsZXg9bGkud3JpdGV2PXZvaWQgMDt2YXIgZVM9anQoKSxfZz0oYmUoKSxYKG1lKSk7ZnVuY3Rpb24gbWcodCxlKXtsZXQgcj1uZXcgQXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgaT0wO2k8dC5sZW5ndGg7aSsrKXR5cGVvZiB0W2ldLmNodW5rPT1cInN0cmluZ1wiP3JbaV09X2cuQnVmZmVyLmZyb20odFtpXS5jaHVuayxcInV0ZjhcIik6cltpXT10W2ldLmNodW5rO3RoaXMuX3dyaXRlKF9nLkJ1ZmZlci5jb25jYXQociksXCJiaW5hcnlcIixlKTt9bGkud3JpdGV2PW1nO3ZhciBvbD1jbGFzcyBleHRlbmRzIGVTLkR1cGxleHtjb25zdHJ1Y3RvcihlLHIsaSl7c3VwZXIoe29iamVjdE1vZGU6ITB9KSx0aGlzLnByb3h5PXIsdGhpcy5zb2NrZXQ9aSx0aGlzLndyaXRlUXVldWU9W10sZS5vYmplY3RNb2RlfHwodGhpcy5fd3JpdGV2PW1nLmJpbmQodGhpcykpLHRoaXMuaXNTb2NrZXRPcGVuPSExLHRoaXMucHJveHkub24oXCJkYXRhXCIsbj0+e3RoaXMuZGVzdHJveWVkfHx0aGlzLnB1c2gobik7fSk7fV9yZWFkKGUpe3RoaXMucHJveHkucmVhZChlKTt9X3dyaXRlKGUscixpKXt0aGlzLmlzU29ja2V0T3Blbj90aGlzLndyaXRlVG9Qcm94eShlLHIsaSk6dGhpcy53cml0ZVF1ZXVlLnB1c2goe2NodW5rOmUsZW5jb2Rpbmc6cixjYjppfSk7fV9maW5hbChlKXt0aGlzLndyaXRlUXVldWU9W10sdGhpcy5wcm94eS5lbmQoZSk7fV9kZXN0cm95KGUscil7dGhpcy53cml0ZVF1ZXVlPVtdLHRoaXMucHJveHkuZGVzdHJveSgpLHIoZSk7fXNvY2tldFJlYWR5KCl7dGhpcy5lbWl0KFwiY29ubmVjdFwiKSx0aGlzLmlzU29ja2V0T3Blbj0hMCx0aGlzLnByb2Nlc3NXcml0ZVF1ZXVlKCk7fXdyaXRlVG9Qcm94eShlLHIsaSl7dGhpcy5wcm94eS53cml0ZShlLHIpPT09ITE/dGhpcy5wcm94eS5vbmNlKFwiZHJhaW5cIixpKTppKCk7fXByb2Nlc3NXcml0ZVF1ZXVlKCl7Zm9yKDt0aGlzLndyaXRlUXVldWUubGVuZ3RoPjA7KXtsZXR7Y2h1bms6ZSxlbmNvZGluZzpyLGNiOml9PXRoaXMud3JpdGVRdWV1ZS5zaGlmdCgpO3RoaXMud3JpdGVUb1Byb3h5KGUscixpKTt9fX07bGkuQnVmZmVyZWREdXBsZXg9b2w7fSk7dmFyIFVpPU0oUXQ9PntfKCk7digpO20oKTt2YXIgbGw9UXQmJlF0Ll9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuX19lc01vZHVsZT90OntkZWZhdWx0OnR9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoUXQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7UXQuc3RyZWFtQnVpbGRlcj1RdC5icm93c2VyU3RyZWFtQnVpbGRlcj12b2lkIDA7dmFyIHVzPShiZSgpLFgobWUpKSx2Zz1sbCh3ZygpKSx0Uz1sbChvdCgpKSxyUz1qdCgpLGlTPWxsKE9pKCkpLGFsPWxzKCksR3Q9KDAsIHRTLmRlZmF1bHQpKFwibXF0dGpzOndzXCIpLG5TPVtcInJlamVjdFVuYXV0aG9yaXplZFwiLFwiY2FcIixcImNlcnRcIixcImtleVwiLFwicGZ4XCIsXCJwYXNzcGhyYXNlXCJdO2Z1bmN0aW9uIEVnKHQsZSl7bGV0IHI9YCR7dC5wcm90b2NvbH06Ly8ke3QuaG9zdG5hbWV9OiR7dC5wb3J0fSR7dC5wYXRofWA7cmV0dXJuIHR5cGVvZiB0LnRyYW5zZm9ybVdzVXJsPT1cImZ1bmN0aW9uXCImJihyPXQudHJhbnNmb3JtV3NVcmwocix0LGUpKSxyfWZ1bmN0aW9uIFNnKHQpe2xldCBlPXQ7cmV0dXJuIHQucG9ydHx8KHQucHJvdG9jb2w9PT1cIndzc1wiP2UucG9ydD00NDM6ZS5wb3J0PTgwKSx0LnBhdGh8fChlLnBhdGg9XCIvXCIpLHQud3NPcHRpb25zfHwoZS53c09wdGlvbnM9e30pLCFpUy5kZWZhdWx0JiYhdC5mb3JjZU5hdGl2ZVdlYlNvY2tldCYmdC5wcm90b2NvbD09PVwid3NzXCImJm5TLmZvckVhY2gocj0+e09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LHIpJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQud3NPcHRpb25zLHIpJiYoZS53c09wdGlvbnNbcl09dFtyXSk7fSksZX1mdW5jdGlvbiBzUyh0KXtsZXQgZT1TZyh0KTtpZihlLmhvc3RuYW1lfHwoZS5ob3N0bmFtZT1lLmhvc3QpLCFlLmhvc3RuYW1lKXtpZih0eXBlb2YgZG9jdW1lbnQ+XCJ1XCIpdGhyb3cgbmV3IEVycm9yKFwiQ291bGQgbm90IGRldGVybWluZSBob3N0LiBTcGVjaWZ5IGhvc3QgbWFudWFsbHkuXCIpO2xldCByPW5ldyBVUkwoZG9jdW1lbnQuVVJMKTtlLmhvc3RuYW1lPXIuaG9zdG5hbWUsZS5wb3J0fHwoZS5wb3J0PU51bWJlcihyLnBvcnQpKTt9cmV0dXJuIGUub2JqZWN0TW9kZT09PXZvaWQgMCYmKGUub2JqZWN0TW9kZT0hKGUuYmluYXJ5PT09ITB8fGUuYmluYXJ5PT09dm9pZCAwKSksZX1mdW5jdGlvbiBvUyh0LGUscil7R3QoXCJjcmVhdGVXZWJTb2NrZXRcIiksR3QoYHByb3RvY29sOiAke3IucHJvdG9jb2xJZH0gJHtyLnByb3RvY29sVmVyc2lvbn1gKTtsZXQgaT1yLnByb3RvY29sSWQ9PT1cIk1RSXNkcFwiJiZyLnByb3RvY29sVmVyc2lvbj09PTM/XCJtcXR0djMuMVwiOlwibXF0dFwiO0d0KGBjcmVhdGluZyBuZXcgV2Vic29ja2V0IGZvciB1cmw6ICR7ZX0gYW5kIHByb3RvY29sOiAke2l9YCk7bGV0IG47cmV0dXJuIHIuY3JlYXRlV2Vic29ja2V0P249ci5jcmVhdGVXZWJzb2NrZXQoZSxbaV0scik6bj1uZXcgdmcuZGVmYXVsdChlLFtpXSxyLndzT3B0aW9ucyksbn1mdW5jdGlvbiBhUyh0LGUpe2xldCByPWUucHJvdG9jb2xJZD09PVwiTVFJc2RwXCImJmUucHJvdG9jb2xWZXJzaW9uPT09Mz9cIm1xdHR2My4xXCI6XCJtcXR0XCIsaT1FZyhlLHQpLG47cmV0dXJuIGUuY3JlYXRlV2Vic29ja2V0P249ZS5jcmVhdGVXZWJzb2NrZXQoaSxbcl0sZSk6bj1uZXcgV2ViU29ja2V0KGksW3JdKSxuLmJpbmFyeVR5cGU9XCJhcnJheWJ1ZmZlclwiLG59dmFyIGxTPSh0LGUpPT57R3QoXCJzdHJlYW1CdWlsZGVyXCIpO2xldCByPVNnKGUpO3IuaG9zdG5hbWU9ci5ob3N0bmFtZXx8ci5ob3N0fHxcImxvY2FsaG9zdFwiO2xldCBpPUVnKHIsdCksbj1vUyh0LGksciksbz12Zy5kZWZhdWx0LmNyZWF0ZVdlYlNvY2tldFN0cmVhbShuLHIud3NPcHRpb25zKTtyZXR1cm4gby51cmw9aSxuLm9uKFwiY2xvc2VcIiwoKT0+e28uZGVzdHJveSgpO30pLG99O1F0LnN0cmVhbUJ1aWxkZXI9bFM7dmFyIHVTPSh0LGUpPT57R3QoXCJicm93c2VyU3RyZWFtQnVpbGRlclwiKTtsZXQgcixuPXNTKGUpLmJyb3dzZXJCdWZmZXJTaXplfHwxMDI0KjUxMixvPWUuYnJvd3NlckJ1ZmZlclRpbWVvdXR8fDFlMyxzPSFlLm9iamVjdE1vZGUsYT1hUyh0LGUpLGw9aChlLFMsRSk7ZS5vYmplY3RNb2RlfHwobC5fd3JpdGV2PWFsLndyaXRldi5iaW5kKGwpKSxsLm9uKFwiY2xvc2VcIiwoKT0+e2EuY2xvc2UoKTt9KTtsZXQgYz10eXBlb2YgYS5hZGRFdmVudExpc3RlbmVyPFwidVwiO2EucmVhZHlTdGF0ZT09PWEuT1BFTj8ocj1sLHIuc29ja2V0PWEpOihyPW5ldyBhbC5CdWZmZXJlZER1cGxleChlLGwsYSksYz9hLmFkZEV2ZW50TGlzdGVuZXIoXCJvcGVuXCIsZCk6YS5vbm9wZW49ZCksYz8oYS5hZGRFdmVudExpc3RlbmVyKFwiY2xvc2VcIixnKSxhLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLHkpLGEuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIix3KSk6KGEub25jbG9zZT1nLGEub25lcnJvcj15LGEub25tZXNzYWdlPXcpO2Z1bmN0aW9uIGgoSSxDLFIpe2xldCBVPW5ldyByUy5UcmFuc2Zvcm0oe29iamVjdE1vZGU6SS5vYmplY3RNb2RlfSk7cmV0dXJuIFUuX3dyaXRlPUMsVS5fZmx1c2g9UixVfWZ1bmN0aW9uIGQoKXtHdChcIldlYlNvY2tldCBvbk9wZW5cIiksciBpbnN0YW5jZW9mIGFsLkJ1ZmZlcmVkRHVwbGV4JiZyLnNvY2tldFJlYWR5KCk7fWZ1bmN0aW9uIGcoSSl7R3QoXCJXZWJTb2NrZXQgb25DbG9zZVwiLEkpLHIuZW5kKCksci5kZXN0cm95KCk7fWZ1bmN0aW9uIHkoSSl7R3QoXCJXZWJTb2NrZXQgb25FcnJvclwiLEkpO2xldCBDPW5ldyBFcnJvcihcIldlYlNvY2tldCBlcnJvclwiKTtDLmV2ZW50PUksci5kZXN0cm95KEMpO31hc3luYyBmdW5jdGlvbiB3KEkpe2xldHtkYXRhOkN9PUk7QyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP0M9dXMuQnVmZmVyLmZyb20oQyk6QyBpbnN0YW5jZW9mIEJsb2I/Qz11cy5CdWZmZXIuZnJvbShhd2FpdCBuZXcgUmVzcG9uc2UoQykuYXJyYXlCdWZmZXIoKSk6Qz11cy5CdWZmZXIuZnJvbShDLFwidXRmOFwiKSxsJiYhbC5kZXN0cm95ZWQmJmwucHVzaChDKTt9ZnVuY3Rpb24gUyhJLEMsUil7aWYoYS5idWZmZXJlZEFtb3VudD5uKXtzZXRUaW1lb3V0KFMsbyxJLEMsUik7cmV0dXJufXMmJnR5cGVvZiBJPT1cInN0cmluZ1wiJiYoST11cy5CdWZmZXIuZnJvbShJLFwidXRmOFwiKSk7dHJ5e2Euc2VuZChJKTt9Y2F0Y2goVSl7cmV0dXJuIFIoVSl9UigpO31mdW5jdGlvbiBFKEkpe2EuY2xvc2UoKSxJKCk7fXJldHVybiByfTtRdC5icm93c2VyU3RyZWFtQnVpbGRlcj11Uzt9KTt2YXIgdWw9e307SnQodWwse1NlcnZlcjooKT0+TWUsU29ja2V0OigpPT5NZSxTdHJlYW06KCk9Pk1lLF9jcmVhdGVTZXJ2ZXJIYW5kbGU6KCk9Pk1lLF9ub3JtYWxpemVBcmdzOigpPT5NZSxfc2V0U2ltdWx0YW5lb3VzQWNjZXB0czooKT0+TWUsY29ubmVjdDooKT0+TWUsY3JlYXRlQ29ubmVjdGlvbjooKT0+TWUsY3JlYXRlU2VydmVyOigpPT5NZSxkZWZhdWx0OigpPT5mUyxpc0lQOigpPT5NZSxpc0lQdjQ6KCk9Pk1lLGlzSVB2NjooKT0+TWV9KTtmdW5jdGlvbiBNZSgpe3Rocm93IG5ldyBFcnJvcihcIk5vZGUuanMgbmV0IG1vZHVsZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IEpTUE0gY29yZSBvdXRzaWRlIG9mIE5vZGUuanNcIil9dmFyIGZTLGZsPV9lKCgpPT57XygpO3YoKTttKCk7ZlM9e19jcmVhdGVTZXJ2ZXJIYW5kbGU6TWUsX25vcm1hbGl6ZUFyZ3M6TWUsX3NldFNpbXVsdGFuZW91c0FjY2VwdHM6TWUsY29ubmVjdDpNZSxjcmVhdGVDb25uZWN0aW9uOk1lLGNyZWF0ZVNlcnZlcjpNZSxpc0lQOk1lLGlzSVB2NDpNZSxpc0lQdjY6TWUsU2VydmVyOk1lLFNvY2tldDpNZSxTdHJlYW06TWV9O30pO3ZhciBjbD1NKE5pPT57XygpO3YoKTttKCk7dmFyIEFnPU5pJiZOaS5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7ZGVmYXVsdDp0fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE5pLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBjUz1BZygoZmwoKSxYKHVsKSkpLGhTPUFnKG90KCkpLGRTPSgwLCBoUy5kZWZhdWx0KShcIm1xdHRqczp0Y3BcIikscFM9KHQsZSk9PntlLnBvcnQ9ZS5wb3J0fHwxODgzLGUuaG9zdG5hbWU9ZS5ob3N0bmFtZXx8ZS5ob3N0fHxcImxvY2FsaG9zdFwiO2xldHtwb3J0OnIscGF0aDppfT1lLG49ZS5ob3N0bmFtZTtyZXR1cm4gZFMoXCJwb3J0ICVkIGFuZCBob3N0ICVzXCIscixuKSxjUy5kZWZhdWx0LmNyZWF0ZUNvbm5lY3Rpb24oe3BvcnQ6cixob3N0Om4scGF0aDppfSl9O05pLmRlZmF1bHQ9cFM7fSk7dmFyIElnPXt9O0p0KElnLHtkZWZhdWx0OigpPT5nU30pO3ZhciBnUyxUZz1fZSgoKT0+e18oKTt2KCk7bSgpO2dTPXt9O30pO3ZhciBkbD1NKHFpPT57XygpO3YoKTttKCk7dmFyIGhsPXFpJiZxaS5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7ZGVmYXVsdDp0fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHFpLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciB5Uz1obCgoVGcoKSxYKElnKSkpLGJTPWhsKChmbCgpLFgodWwpKSksd1M9aGwob3QoKSksX1M9KDAsIHdTLmRlZmF1bHQpKFwibXF0dGpzOnRsc1wiKSxtUz0odCxlKT0+e2UucG9ydD1lLnBvcnR8fDg4ODMsZS5ob3N0PWUuaG9zdG5hbWV8fGUuaG9zdHx8XCJsb2NhbGhvc3RcIixiUy5kZWZhdWx0LmlzSVAoZS5ob3N0KT09PTAmJihlLnNlcnZlcm5hbWU9ZS5ob3N0KSxlLnJlamVjdFVuYXV0aG9yaXplZD1lLnJlamVjdFVuYXV0aG9yaXplZCE9PSExLGRlbGV0ZSBlLnBhdGgsX1MoXCJwb3J0ICVkIGhvc3QgJXMgcmVqZWN0VW5hdXRob3JpemVkICViXCIsZS5wb3J0LGUuaG9zdCxlLnJlamVjdFVuYXV0aG9yaXplZCk7bGV0IHI9eVMuZGVmYXVsdC5jb25uZWN0KGUpO3Iub24oXCJzZWN1cmVDb25uZWN0XCIsKCk9PntlLnJlamVjdFVuYXV0aG9yaXplZCYmIXIuYXV0aG9yaXplZD9yLmVtaXQoXCJlcnJvclwiLG5ldyBFcnJvcihcIlRMUyBub3QgYXV0aG9yaXplZFwiKSk6ci5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsaSk7fSk7ZnVuY3Rpb24gaShuKXtlLnJlamVjdFVuYXV0aG9yaXplZCYmdC5lbWl0KFwiZXJyb3JcIixuKSxyLmVuZCgpO31yZXR1cm4gci5vbihcImVycm9yXCIsaSkscn07cWkuZGVmYXVsdD1tUzt9KTt2YXIgeWw9TShnbD0+e18oKTt2KCk7bSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShnbCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgUmc9KGJlKCksWChtZSkpLHZTPWp0KCksRVM9bHMoKSx5dCxwbCxMZTtmdW5jdGlvbiBTUygpe2xldCB0PW5ldyB2Uy5UcmFuc2Zvcm07cmV0dXJuIHQuX3dyaXRlPShlLHIsaSk9Pnt5dC5zZW5kKHtkYXRhOmUuYnVmZmVyLHN1Y2Nlc3MoKXtpKCk7fSxmYWlsKG4pe2kobmV3IEVycm9yKG4pKTt9fSk7fSx0Ll9mbHVzaD1lPT57eXQuY2xvc2Uoe3N1Y2Nlc3MoKXtlKCk7fX0pO30sdH1mdW5jdGlvbiBBUyh0KXt0Lmhvc3RuYW1lfHwodC5ob3N0bmFtZT1cImxvY2FsaG9zdFwiKSx0LnBhdGh8fCh0LnBhdGg9XCIvXCIpLHQud3NPcHRpb25zfHwodC53c09wdGlvbnM9e30pO31mdW5jdGlvbiBJUyh0LGUpe2xldCByPXQucHJvdG9jb2w9PT1cInd4c1wiP1wid3NzXCI6XCJ3c1wiLGk9YCR7cn06Ly8ke3QuaG9zdG5hbWV9JHt0LnBhdGh9YDtyZXR1cm4gdC5wb3J0JiZ0LnBvcnQhPT04MCYmdC5wb3J0IT09NDQzJiYoaT1gJHtyfTovLyR7dC5ob3N0bmFtZX06JHt0LnBvcnR9JHt0LnBhdGh9YCksdHlwZW9mIHQudHJhbnNmb3JtV3NVcmw9PVwiZnVuY3Rpb25cIiYmKGk9dC50cmFuc2Zvcm1Xc1VybChpLHQsZSkpLGl9ZnVuY3Rpb24gVFMoKXt5dC5vbk9wZW4oKCk9PntMZS5zb2NrZXRSZWFkeSgpO30pLHl0Lm9uTWVzc2FnZSh0PT57bGV0e2RhdGE6ZX09dDtlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/ZT1SZy5CdWZmZXIuZnJvbShlKTplPVJnLkJ1ZmZlci5mcm9tKGUsXCJ1dGY4XCIpLHBsLnB1c2goZSk7fSkseXQub25DbG9zZSgoKT0+e0xlLmVtaXQoXCJjbG9zZVwiKSxMZS5lbmQoKSxMZS5kZXN0cm95KCk7fSkseXQub25FcnJvcih0PT57bGV0IGU9bmV3IEVycm9yKHQuZXJyTXNnKTtMZS5kZXN0cm95KGUpO30pO312YXIgUlM9KHQsZSk9PntpZihlLmhvc3RuYW1lPWUuaG9zdG5hbWV8fGUuaG9zdCwhZS5ob3N0bmFtZSl0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZGV0ZXJtaW5lIGhvc3QuIFNwZWNpZnkgaG9zdCBtYW51YWxseS5cIik7bGV0IHI9ZS5wcm90b2NvbElkPT09XCJNUUlzZHBcIiYmZS5wcm90b2NvbFZlcnNpb249PT0zP1wibXF0dHYzLjFcIjpcIm1xdHRcIjtBUyhlKTtsZXQgaT1JUyhlLHQpO3l0PXd4LmNvbm5lY3RTb2NrZXQoe3VybDppLHByb3RvY29sczpbcl19KSxwbD1TUygpLExlPW5ldyBFUy5CdWZmZXJlZER1cGxleChlLHBsLHl0KSxMZS5fZGVzdHJveT0obyxzKT0+e3l0LmNsb3NlKHtzdWNjZXNzKCl7cyYmcyhvKTt9fSk7fTtsZXQgbj1MZS5kZXN0cm95O3JldHVybiBMZS5kZXN0cm95PShvLHMpPT4oTGUuZGVzdHJveT1uLHNldFRpbWVvdXQoKCk9Pnt5dC5jbG9zZSh7ZmFpbCgpe0xlLl9kZXN0cm95KG8scyk7fX0pO30sMCksTGUpLFRTKCksTGV9O2dsLmRlZmF1bHQ9UlM7fSk7dmFyIF9sPU0od2w9PntfKCk7digpO20oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkod2wsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIGJsPShiZSgpLFgobWUpKSxDUz1qdCgpLEJTPWxzKCkseHQsZnMsdWksQ2c9ITE7ZnVuY3Rpb24gUFMoKXtsZXQgdD1uZXcgQ1MuVHJhbnNmb3JtO3JldHVybiB0Ll93cml0ZT0oZSxyLGkpPT57eHQuc2VuZFNvY2tldE1lc3NhZ2Uoe2RhdGE6ZS5idWZmZXIsc3VjY2Vzcygpe2koKTt9LGZhaWwoKXtpKG5ldyBFcnJvcik7fX0pO30sdC5fZmx1c2g9ZT0+e3h0LmNsb3NlU29ja2V0KHtzdWNjZXNzKCl7ZSgpO319KTt9LHR9ZnVuY3Rpb24ga1ModCl7dC5ob3N0bmFtZXx8KHQuaG9zdG5hbWU9XCJsb2NhbGhvc3RcIiksdC5wYXRofHwodC5wYXRoPVwiL1wiKSx0LndzT3B0aW9uc3x8KHQud3NPcHRpb25zPXt9KTt9ZnVuY3Rpb24gT1ModCxlKXtsZXQgcj10LnByb3RvY29sPT09XCJhbGlzXCI/XCJ3c3NcIjpcIndzXCIsaT1gJHtyfTovLyR7dC5ob3N0bmFtZX0ke3QucGF0aH1gO3JldHVybiB0LnBvcnQmJnQucG9ydCE9PTgwJiZ0LnBvcnQhPT00NDMmJihpPWAke3J9Oi8vJHt0Lmhvc3RuYW1lfToke3QucG9ydH0ke3QucGF0aH1gKSx0eXBlb2YgdC50cmFuc2Zvcm1Xc1VybD09XCJmdW5jdGlvblwiJiYoaT10LnRyYW5zZm9ybVdzVXJsKGksdCxlKSksaX1mdW5jdGlvbiB4Uygpe0NnfHwoQ2c9ITAseHQub25Tb2NrZXRPcGVuKCgpPT57dWkuc29ja2V0UmVhZHkoKTt9KSx4dC5vblNvY2tldE1lc3NhZ2UodD0+e2lmKHR5cGVvZiB0LmRhdGE9PVwic3RyaW5nXCIpe2xldCBlPWJsLkJ1ZmZlci5mcm9tKHQuZGF0YSxcImJhc2U2NFwiKTtmcy5wdXNoKGUpO31lbHNlIHtsZXQgZT1uZXcgRmlsZVJlYWRlcjtlLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsKCk9PntsZXQgcj1lLnJlc3VsdDtyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/cj1ibC5CdWZmZXIuZnJvbShyKTpyPWJsLkJ1ZmZlci5mcm9tKHIsXCJ1dGY4XCIpLGZzLnB1c2gocik7fSksZS5yZWFkQXNBcnJheUJ1ZmZlcih0LmRhdGEpO319KSx4dC5vblNvY2tldENsb3NlKCgpPT57dWkuZW5kKCksdWkuZGVzdHJveSgpO30pLHh0Lm9uU29ja2V0RXJyb3IodD0+e3VpLmRlc3Ryb3kodCk7fSkpO312YXIgTVM9KHQsZSk9PntpZihlLmhvc3RuYW1lPWUuaG9zdG5hbWV8fGUuaG9zdCwhZS5ob3N0bmFtZSl0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZGV0ZXJtaW5lIGhvc3QuIFNwZWNpZnkgaG9zdCBtYW51YWxseS5cIik7bGV0IHI9ZS5wcm90b2NvbElkPT09XCJNUUlzZHBcIiYmZS5wcm90b2NvbFZlcnNpb249PT0zP1wibXF0dHYzLjFcIjpcIm1xdHRcIjtrUyhlKTtsZXQgaT1PUyhlLHQpO3JldHVybiB4dD1lLm15LHh0LmNvbm5lY3RTb2NrZXQoe3VybDppLHByb3RvY29sczpyfSksZnM9UFMoKSx1aT1uZXcgQlMuQnVmZmVyZWREdXBsZXgoZSxmcyx4dCkseFMoKSx1aX07d2wuZGVmYXVsdD1NUzt9KTt2YXIga2c9TShCcj0+e18oKTt2KCk7bSgpO3ZhciBjcz1CciYmQnIuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlP3Q6e2RlZmF1bHQ6dH19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShCcixcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTtCci5jb25uZWN0QXN5bmM9dm9pZCAwO3ZhciBMUz1jcyhvdCgpKSxVUz1jcygoeWcoKSxYKGdnKSkpLE5TPWNzKG9zKCkpLHFTPWNzKE9pKCkpO3R5cGVvZihCPT09bnVsbHx8Qj09PXZvaWQgMD92b2lkIDA6Qi5uZXh0VGljaykhPVwiZnVuY3Rpb25cIiYmKEIubmV4dFRpY2s9c2V0SW1tZWRpYXRlKTt2YXIgQmc9KDAsIExTLmRlZmF1bHQpKFwibXF0dGpzXCIpLGRlPW51bGw7ZnVuY3Rpb24gRFModCl7bGV0IGU7dC5hdXRoJiYoZT10LmF1dGgubWF0Y2goL14oLispOiguKykkLyksZT8odC51c2VybmFtZT1lWzFdLHQucGFzc3dvcmQ9ZVsyXSk6dC51c2VybmFtZT10LmF1dGgpO31mdW5jdGlvbiBQZyh0LGUpe3ZhciByLGksbixvO2lmKEJnKFwiY29ubmVjdGluZyB0byBhbiBNUVRUIGJyb2tlci4uLlwiKSx0eXBlb2YgdD09XCJvYmplY3RcIiYmIWUmJihlPXQsdD1cIlwiKSxlPWV8fHt9LHQmJnR5cGVvZiB0PT1cInN0cmluZ1wiKXtsZXQgbD1VUy5kZWZhdWx0LnBhcnNlKHQsITApLGM9e307aWYobC5wb3J0IT1udWxsJiYoYy5wb3J0PU51bWJlcihsLnBvcnQpKSxjLmhvc3Q9bC5ob3N0bmFtZSxjLnF1ZXJ5PWwucXVlcnksYy5hdXRoPWwuYXV0aCxjLnByb3RvY29sPWwucHJvdG9jb2wsYy5wYXRoPWwucGF0aCxjLnByb3RvY29sPShyPWMucHJvdG9jb2wpPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci5yZXBsYWNlKC86JC8sXCJcIiksZT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYyksZSksIWUucHJvdG9jb2wpdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBwcm90b2NvbFwiKX1pZihlLnVuaXhTb2NrZXQ9ZS51bml4U29ja2V0fHwoKGk9ZS5wcm90b2NvbCk9PT1udWxsfHxpPT09dm9pZCAwP3ZvaWQgMDppLmluY2x1ZGVzKFwiK3VuaXhcIikpLGUudW5peFNvY2tldD9lLnByb3RvY29sPWUucHJvdG9jb2wucmVwbGFjZShcIit1bml4XCIsXCJcIik6ISghKChuPWUucHJvdG9jb2wpPT09bnVsbHx8bj09PXZvaWQgMCkmJm4uc3RhcnRzV2l0aChcIndzXCIpKSYmISghKChvPWUucHJvdG9jb2wpPT09bnVsbHx8bz09PXZvaWQgMCkmJm8uc3RhcnRzV2l0aChcInd4XCIpKSYmZGVsZXRlIGUucGF0aCxEUyhlKSxlLnF1ZXJ5JiZ0eXBlb2YgZS5xdWVyeS5jbGllbnRJZD09XCJzdHJpbmdcIiYmKGUuY2xpZW50SWQ9ZS5xdWVyeS5jbGllbnRJZCksZS5jZXJ0JiZlLmtleSlpZihlLnByb3RvY29sKXtpZihbXCJtcXR0c1wiLFwid3NzXCIsXCJ3eHNcIixcImFsaXNcIl0uaW5kZXhPZihlLnByb3RvY29sKT09PS0xKXN3aXRjaChlLnByb3RvY29sKXtjYXNlXCJtcXR0XCI6ZS5wcm90b2NvbD1cIm1xdHRzXCI7YnJlYWs7Y2FzZVwid3NcIjplLnByb3RvY29sPVwid3NzXCI7YnJlYWs7Y2FzZVwid3hcIjplLnByb3RvY29sPVwid3hzXCI7YnJlYWs7Y2FzZVwiYWxpXCI6ZS5wcm90b2NvbD1cImFsaXNcIjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biBwcm90b2NvbCBmb3Igc2VjdXJlIGNvbm5lY3Rpb246IFwiJHtlLnByb3RvY29sfVwiIWApfX1lbHNlIHRocm93IG5ldyBFcnJvcihcIk1pc3Npbmcgc2VjdXJlIHByb3RvY29sIGtleVwiKTtpZihkZXx8KGRlPXt9LCFxUy5kZWZhdWx0JiYhZS5mb3JjZU5hdGl2ZVdlYlNvY2tldD8oZGUud3M9VWkoKS5zdHJlYW1CdWlsZGVyLGRlLndzcz1VaSgpLnN0cmVhbUJ1aWxkZXIsZGUubXF0dD1jbCgpLmRlZmF1bHQsZGUudGNwPWNsKCkuZGVmYXVsdCxkZS5zc2w9ZGwoKS5kZWZhdWx0LGRlLnRscz1kZS5zc2wsZGUubXF0dHM9ZGwoKS5kZWZhdWx0KTooZGUud3M9VWkoKS5icm93c2VyU3RyZWFtQnVpbGRlcixkZS53c3M9VWkoKS5icm93c2VyU3RyZWFtQnVpbGRlcixkZS53eD15bCgpLmRlZmF1bHQsZGUud3hzPXlsKCkuZGVmYXVsdCxkZS5hbGk9X2woKS5kZWZhdWx0LGRlLmFsaXM9X2woKS5kZWZhdWx0KSksIWRlW2UucHJvdG9jb2xdKXtsZXQgbD1bXCJtcXR0c1wiLFwid3NzXCJdLmluZGV4T2YoZS5wcm90b2NvbCkhPT0tMTtlLnByb3RvY29sPVtcIm1xdHRcIixcIm1xdHRzXCIsXCJ3c1wiLFwid3NzXCIsXCJ3eFwiLFwid3hzXCIsXCJhbGlcIixcImFsaXNcIl0uZmlsdGVyKChjLGgpPT5sJiZoJTI9PT0wPyExOnR5cGVvZiBkZVtjXT09XCJmdW5jdGlvblwiKVswXTt9aWYoZS5jbGVhbj09PSExJiYhZS5jbGllbnRJZCl0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGNsaWVudElkIGZvciB1bmNsZWFuIGNsaWVudHNcIik7ZS5wcm90b2NvbCYmKGUuZGVmYXVsdFByb3RvY29sPWUucHJvdG9jb2wpO2Z1bmN0aW9uIHMobCl7cmV0dXJuIGUuc2VydmVycyYmKCghbC5fcmVjb25uZWN0Q291bnR8fGwuX3JlY29ubmVjdENvdW50PT09ZS5zZXJ2ZXJzLmxlbmd0aCkmJihsLl9yZWNvbm5lY3RDb3VudD0wKSxlLmhvc3Q9ZS5zZXJ2ZXJzW2wuX3JlY29ubmVjdENvdW50XS5ob3N0LGUucG9ydD1lLnNlcnZlcnNbbC5fcmVjb25uZWN0Q291bnRdLnBvcnQsZS5wcm90b2NvbD1lLnNlcnZlcnNbbC5fcmVjb25uZWN0Q291bnRdLnByb3RvY29sP2Uuc2VydmVyc1tsLl9yZWNvbm5lY3RDb3VudF0ucHJvdG9jb2w6ZS5kZWZhdWx0UHJvdG9jb2wsZS5ob3N0bmFtZT1lLmhvc3QsbC5fcmVjb25uZWN0Q291bnQrKyksQmcoXCJjYWxsaW5nIHN0cmVhbWJ1aWxkZXIgZm9yXCIsZS5wcm90b2NvbCksZGVbZS5wcm90b2NvbF0obCxlKX1sZXQgYT1uZXcgTlMuZGVmYXVsdChzLGUpO3JldHVybiBhLm9uKFwiZXJyb3JcIiwoKT0+e30pLGF9ZnVuY3Rpb24galModCxlLHI9ITApe3JldHVybiBuZXcgUHJvbWlzZSgoaSxuKT0+e2xldCBvPVBnKHQsZSkscz17Y29ubmVjdDpsPT57YSgpLGkobyk7fSxlbmQ6KCk9PnthKCksaShvKTt9LGVycm9yOmw9PnthKCksby5lbmQoKSxuKGwpO319O3I9PT0hMSYmKHMuY2xvc2U9KCk9PntzLmVycm9yKG5ldyBFcnJvcihcIkNvdWxkbid0IGNvbm5lY3QgdG8gc2VydmVyXCIpKTt9KTtmdW5jdGlvbiBhKCl7T2JqZWN0LmtleXMocykuZm9yRWFjaChsPT57by5vZmYobCxzW2xdKTt9KTt9T2JqZWN0LmtleXMocykuZm9yRWFjaChsPT57by5vbihsLHNbbF0pO30pO30pfUJyLmNvbm5lY3RBc3luYz1qUztCci5kZWZhdWx0PVBnO30pO3ZhciBtbD1NKEc9PntfKCk7digpO20oKTt2YXIgT2c9RyYmRy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHQsZSxyLGkpe2k9PT12b2lkIDAmJihpPXIpO3ZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxyKTsoIW58fChcImdldFwiaW4gbj8hZS5fX2VzTW9kdWxlOm4ud3JpdGFibGV8fG4uY29uZmlndXJhYmxlKSkmJihuPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlW3JdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGksbik7fTpmdW5jdGlvbih0LGUscixpKXtpPT09dm9pZCAwJiYoaT1yKSx0W2ldPWVbcl07fSksRlM9RyYmRy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6ZX0pO306ZnVuY3Rpb24odCxlKXt0LmRlZmF1bHQ9ZTt9KSxXUz1HJiZHLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24odCl7aWYodCYmdC5fX2VzTW9kdWxlKXJldHVybiB0O3ZhciBlPXt9O2lmKHQhPW51bGwpZm9yKHZhciByIGluIHQpciE9PVwiZGVmYXVsdFwiJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxyKSYmT2coZSx0LHIpO3JldHVybiBGUyhlLHQpLGV9LHhnPUcmJkcuX19leHBvcnRTdGFyfHxmdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiB0KXIhPT1cImRlZmF1bHRcIiYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZPZyhlLHQscik7fSxEaT1HJiZHLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuX19lc01vZHVsZT90OntkZWZhdWx0OnR9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRyxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTtHLlJlYXNvbkNvZGVzPUcuS2VlcGFsaXZlTWFuYWdlcj1HLlVuaXF1ZU1lc3NhZ2VJZFByb3ZpZGVyPUcuRGVmYXVsdE1lc3NhZ2VJZFByb3ZpZGVyPUcuU3RvcmU9Ry5NcXR0Q2xpZW50PUcuY29ubmVjdEFzeW5jPUcuY29ubmVjdD1HLkNsaWVudD12b2lkIDA7dmFyIE1nPURpKG9zKCkpO0cuTXF0dENsaWVudD1NZy5kZWZhdWx0O3ZhciAkUz1EaShabygpKTtHLkRlZmF1bHRNZXNzYWdlSWRQcm92aWRlcj0kUy5kZWZhdWx0O3ZhciBIUz1EaShWcCgpKTtHLlVuaXF1ZU1lc3NhZ2VJZFByb3ZpZGVyPUhTLmRlZmF1bHQ7dmFyIFZTPURpKHJhKCkpO0cuU3RvcmU9VlMuZGVmYXVsdDt2YXIgTGc9V1Moa2coKSk7Ry5jb25uZWN0PUxnLmRlZmF1bHQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KEcsXCJjb25uZWN0QXN5bmNcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTGcuY29ubmVjdEFzeW5jfX0pO3ZhciB6Uz1EaShXYSgpKTtHLktlZXBhbGl2ZU1hbmFnZXI9elMuZGVmYXVsdDtHLkNsaWVudD1NZy5kZWZhdWx0O3hnKG9zKCksRyk7eGcoX3IoKSxHKTt2YXIgS1M9VGkoKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRyxcIlJlYXNvbkNvZGVzXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEtTLlJlYXNvbkNvZGVzfX0pO30pO3ZhciBYUz1NKFdlPT57XygpO3YoKTttKCk7dmFyIFVnPVdlJiZXZS5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHQsZSxyLGkpe2k9PT12b2lkIDAmJihpPXIpO3ZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxyKTsoIW58fChcImdldFwiaW4gbj8hZS5fX2VzTW9kdWxlOm4ud3JpdGFibGV8fG4uY29uZmlndXJhYmxlKSkmJihuPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlW3JdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGksbik7fTpmdW5jdGlvbih0LGUscixpKXtpPT09dm9pZCAwJiYoaT1yKSx0W2ldPWVbcl07fSksR1M9V2UmJldlLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24odCxlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcImRlZmF1bHRcIix7ZW51bWVyYWJsZTohMCx2YWx1ZTplfSk7fTpmdW5jdGlvbih0LGUpe3QuZGVmYXVsdD1lO30pLFFTPVdlJiZXZS5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKHQpe2lmKHQmJnQuX19lc01vZHVsZSlyZXR1cm4gdDt2YXIgZT17fTtpZih0IT1udWxsKWZvcih2YXIgciBpbiB0KXIhPT1cImRlZmF1bHRcIiYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscikmJlVnKGUsdCxyKTtyZXR1cm4gR1MoZSx0KSxlfSxZUz1XZSYmV2UuX19leHBvcnRTdGFyfHxmdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiB0KXIhPT1cImRlZmF1bHRcIiYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZVZyhlLHQscik7fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoV2UsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIEpTPVFTKG1sKCkpO1dlLmRlZmF1bHQ9SlM7WVMobWwoKSxXZSk7fSk7dmFyIG1xdHQgPSBYUygpO1xuLyohIEJ1bmRsZWQgbGljZW5zZSBpbmZvcm1hdGlvbjpcblxuQGpzcG0vY29yZS9ub2RlbGlicy9icm93c2VyL2J1ZmZlci5qczpcbiAgKCohIGllZWU3NTQuIEJTRC0zLUNsYXVzZSBMaWNlbnNlLiBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmcvb3BlbnNvdXJjZT4gKilcbiovXG5cbmNsYXNzIENsb3VkSW50ZXJvcEFQSUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvZGU7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSA9ICdBbiB1bmV4cGVjdGVkIGVycm9yIGhhcyBvY2N1cnJlZCcsIGNvZGUgPSAnVU5FWFBFQ1RFRF9FUlJPUicsIGNhdXNlKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UsIHsgY2F1c2U6IGNhdXNlIH0pO1xuICAgICAgICB0aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gICAgfVxufVxuY2xhc3MgQXV0aG9yaXphdGlvbkVycm9yIGV4dGVuZHMgQ2xvdWRJbnRlcm9wQVBJRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UgPSAnTm90IGF1dGhvcml6ZWQnLCBjb2RlID0gJ0VSUl9VTkFVVEhPUklaRUQnKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UsIGNvZGUsIHVuZGVmaW5lZCk7XG4gICAgfVxufVxuXG4vLyBFcnJvciBjb2RlcyBhcyBkZWZpbmVkIGluIGh0dHBzOi8vZG9jcy5lbXF4LmNvbS9lbi9jbG91ZC9sYXRlc3QvY29ubmVjdF90b19kZXBsb3ltZW50cy9tcXR0X2NsaWVudF9lcnJvcl9jb2Rlcy5odG1sXG5jb25zdCBCYWRVc2VyTmFtZVBhc3N3b3JkRXJyb3IgPSAxMzQ7XG4vKipcbiAqIFJlcHJlc2VudHMgYSBzaW5nbGUgY29ubmVjdGlvbiB0byBhIENsb3VkIEludGVyb3Agc2VydmljZVxuICpcbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBDbG91ZEludGVyb3BBUElcbiAqIEBpbXBsZW1lbnRzIHtDbGllbnR9XG4gKi9cbmNsYXNzIENsb3VkSW50ZXJvcEFQSSB7XG4gICAgI2Nsb3VkSW50ZXJvcFNldHRpbmdzO1xuICAgICNzZXNzaW9uRGV0YWlscztcbiAgICAjbXF0dENsaWVudDtcbiAgICAjcmVjb25uZWN0UmV0cnlMaW1pdCA9IDMwO1xuICAgICNrZWVwQWxpdmVJbnRlcnZhbFNlY29uZHMgPSAzMDtcbiAgICAjbG9nZ2VyID0gKGxldmVsLCBtZXNzYWdlKSA9PiB7XG4gICAgICAgIGNvbnNvbGVbbGV2ZWxdKG1lc3NhZ2UpO1xuICAgIH07XG4gICAgI3JlY29ubmVjdFJldHJpZXMgPSAwO1xuICAgICNjb25uZWN0aW9uUGFyYW1zO1xuICAgICNldmVudExpc3RlbmVycyA9IG5ldyBNYXAoKTtcbiAgICAjYXR0ZW1wdGluZ1RvUmVjb25uZWN0ID0gZmFsc2U7XG4gICAgY29uc3RydWN0b3IoY2xvdWRJbnRlcm9wU2V0dGluZ3MpIHtcbiAgICAgICAgdGhpcy4jY2xvdWRJbnRlcm9wU2V0dGluZ3MgPSBjbG91ZEludGVyb3BTZXR0aW5ncztcbiAgICB9XG4gICAgZ2V0IHNlc3Npb25EZXRhaWxzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jc2Vzc2lvbkRldGFpbHM7XG4gICAgfVxuICAgIGdldCBtcXR0Q2xpZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jbXF0dENsaWVudDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29ubmVjdHMgYW5kIGNyZWF0ZXMgYSBzZXNzaW9uIG9uIHRoZSBDbG91ZCBJbnRlcm9wIHNlcnZpY2VcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Q29ubmVjdFBhcmFtZXRlcnN9IHBhcmFtZXRlcnMgLSBUaGUgcGFyYW1ldGVycyB0byB1c2UgdG8gY29ubmVjdFxuICAgICAqIEByZXR1cm4geyp9ICB7UHJvbWlzZTx2b2lkPn1cbiAgICAgKiBAbWVtYmVyb2YgQ2xvdWRJbnRlcm9wQVBJXG4gICAgICogQHRocm93cyB7Q2xvdWRJbnRlcm9wQVBJRXJyb3J9IC0gSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyBjb25uZWN0aW9uXG4gICAgICogQHRocm93cyB7QXV0aG9yaXphdGlvbkVycm9yfSAtIElmIHRoZSBjb25uZWN0aW9uIGlzIHVuYXV0aG9yaXplZFxuICAgICAqL1xuICAgIGFzeW5jIGNvbm5lY3QocGFyYW1ldGVycykge1xuICAgICAgICB0aGlzLiN2YWxpZGF0ZUNvbm5lY3RQYXJhbXMocGFyYW1ldGVycyk7XG4gICAgICAgIHRoaXMuI2Nvbm5lY3Rpb25QYXJhbXMgPSBwYXJhbWV0ZXJzO1xuICAgICAgICB0aGlzLiNyZWNvbm5lY3RSZXRyeUxpbWl0ID0gcGFyYW1ldGVycy5yZWNvbm5lY3RSZXRyeUxpbWl0IHx8IHRoaXMuI3JlY29ubmVjdFJldHJ5TGltaXQ7XG4gICAgICAgIHRoaXMuI2tlZXBBbGl2ZUludGVydmFsU2Vjb25kcyA9IHBhcmFtZXRlcnMua2VlcEFsaXZlSW50ZXJ2YWxTZWNvbmRzIHx8IHRoaXMuI2tlZXBBbGl2ZUludGVydmFsU2Vjb25kcztcbiAgICAgICAgdGhpcy4jbG9nZ2VyID0gcGFyYW1ldGVycy5sb2dnZXIgfHwgdGhpcy4jbG9nZ2VyO1xuICAgICAgICBjb25zdCB7IHNvdXJjZUlkLCBwbGF0Zm9ybUlkIH0gPSB0aGlzLiNjb25uZWN0aW9uUGFyYW1zO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgY3JlYXRlU2Vzc2lvblJlc3BvbnNlID0gYXdhaXQgYXhpb3MucG9zdChgJHt0aGlzLiNjbG91ZEludGVyb3BTZXR0aW5ncy51cmx9L2FwaS9zZXNzaW9uc2AsIHtcbiAgICAgICAgICAgICAgICBzb3VyY2VJZCxcbiAgICAgICAgICAgICAgICBwbGF0Zm9ybUlkLFxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuI2dldFJlcXVlc3RIZWFkZXJzKCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChjcmVhdGVTZXNzaW9uUmVzcG9uc2Uuc3RhdHVzICE9PSAyMDEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ2xvdWRJbnRlcm9wQVBJRXJyb3IoYEZhaWxlZCB0byBjb25uZWN0IHRvIHRoZSBDbG91ZCBJbnRlcm9wIHNlcnZpY2U6ICR7dGhpcy4jY2xvdWRJbnRlcm9wU2V0dGluZ3MudXJsfWAsICdFUlJfQ09OTkVDVCcsIGNyZWF0ZVNlc3Npb25SZXNwb25zZS5zdGF0dXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy4jc2Vzc2lvbkRldGFpbHMgPSBjcmVhdGVTZXNzaW9uUmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb25Sb290VG9waWMgPSB0aGlzLiNzZXNzaW9uRGV0YWlscy5zZXNzaW9uUm9vdFRvcGljO1xuICAgICAgICAgICAgY29uc3QgY2xpZW50T3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBrZWVwYWxpdmU6IHRoaXMuI2tlZXBBbGl2ZUludGVydmFsU2Vjb25kcyxcbiAgICAgICAgICAgICAgICBjbGllbnRJZDogdGhpcy4jc2Vzc2lvbkRldGFpbHMuc2Vzc2lvbklkLFxuICAgICAgICAgICAgICAgIGNsZWFuOiB0cnVlLFxuICAgICAgICAgICAgICAgIHByb3RvY29sVmVyc2lvbjogNSxcbiAgICAgICAgICAgICAgICAvLyBUaGUgXCJ3aWxsXCIgbWVzc2FnZSB3aWxsIGJlIHB1Ymxpc2hlZCBvbiBhbiB1bmV4cGVjdGVkIGRpc2Nvbm5lY3Rpb25cbiAgICAgICAgICAgICAgICAvLyBUaGUgc2VydmVyIGNhbiB0aGVuIHRpZHkgdXAuICBTbyBpdCBuZWVkcyBldmVyeSBmb3IgdGhpcyBjbGllbnQgdG8gZG8gdGhhdCwgdGhlIHNlc3Npb24gZGV0YWlscyBpcyBwZXJmZWN0XG4gICAgICAgICAgICAgICAgd2lsbDoge1xuICAgICAgICAgICAgICAgICAgICB0b3BpYzogJ2ludGVyb3AvbGFzdHdpbGwnLFxuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeSh0aGlzLiNzZXNzaW9uRGV0YWlscykpLFxuICAgICAgICAgICAgICAgICAgICBxb3M6IDAsXG4gICAgICAgICAgICAgICAgICAgIHJldGFpbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbGxEZWxheUludGVydmFsOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHVzZXJuYW1lOiB0aGlzLiNzZXNzaW9uRGV0YWlscy50b2tlbixcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLiNtcXR0Q2xpZW50ID0gYXdhaXQgbXF0dC5jb25uZWN0QXN5bmModGhpcy4jc2Vzc2lvbkRldGFpbHMudXJsLCBjbGllbnRPcHRpb25zKTtcbiAgICAgICAgICAgIHRoaXMuI2xvZ2dlcignbG9nJywgYENsb3VkIEludGVyb3Agc3VjY2Vzc2Z1bGx5IGNvbm5lY3RlZCB0byAke3RoaXMuI2Nsb3VkSW50ZXJvcFNldHRpbmdzLnVybH1gKTtcbiAgICAgICAgICAgIHRoaXMuI21xdHRDbGllbnQub24oJ2Vycm9yJywgYXN5bmMgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gV2Ugd2lsbCByZWNlaXZlIGVycm9ycyBmb3IgZWFjaCBmYWlsZWQgcmVjb25uZWN0aW9uIGF0dGVtcHRcbiAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCB3b24ndCB0byBkaXNjb25uZWN0IG9uIHRoZXNlIGVsc2Ugd2Ugd2lsbCBuZXZlciByZWNvbm5lY3RcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuI2F0dGVtcHRpbmdUb1JlY29ubmVjdCkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLiNkaXNjb25uZWN0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgbXF0dC5FcnJvcldpdGhSZWFzb25Db2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZXJyb3IuY29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBCYWRVc2VyTmFtZVBhc3N3b3JkRXJyb3I6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLiNkaXNjb25uZWN0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNsb2dnZXIoJ3dhcm4nLCBgU2Vzc2lvbiBleHBpcmVkYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jZW1pdEV2ZW50KCdzZXNzaW9uLWV4cGlyZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jbG9nZ2VyKCdlcnJvcicsIGBVbmtub3duIEluZnJhc3RydWN0dXJlIEVycm9yIENvZGUgJHtlcnJvci5jb2RlfSA6ICR7ZXJyb3IubWVzc2FnZX0ke3RoaXMuI2F0dGVtcHRpbmdUb1JlY29ubmVjdCA/ICcgZHVyaW5nIHJlY29ubmVjdGlvbiBhdHRlbXB0JyA6ICcnfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFzIHdlIGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgcmVjb25uZWN0LCBsZXRzIG5vdCBlbWl0IGFuIGVycm9yIHRvIGN1dCBkb3duIG9uIHRoZSBldmVudCBub2lzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy4jYXR0ZW1wdGluZ1RvUmVjb25uZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI2VtaXRFdmVudCgnZXJyb3InLCBuZXcgQ2xvdWRJbnRlcm9wQVBJRXJyb3IoYFVua25vd24gSW5mcmFzdHJ1Y3R1cmUgRXJyb3IgQ29kZSAke2Vycm9yLmNvZGV9IDogJHtlcnJvci5tZXNzYWdlfWAsICdFUlJfSU5GUkFTVFJVQ1RVUkUnLCBlcnJvcikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2xvZ2dlcignZXJyb3InLCBgVW5rbm93biBFcnJvciR7dGhpcy4jYXR0ZW1wdGluZ1RvUmVjb25uZWN0ID8gJyBkdXJpbmcgcmVjb25uZWN0aW9uIGF0dGVtcHQnIDogJyd9OiAke2Vycm9yfWApO1xuICAgICAgICAgICAgICAgICAgICAvLyBBcyB3ZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIHJlY29ubmVjdCwgbGV0cyBub3QgZW1pdCBhbiBlcnJvciB0byBjdXQgZG93biBvbiB0aGUgZXZlbnQgbm9pc2VcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLiNhdHRlbXB0aW5nVG9SZWNvbm5lY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI2VtaXRFdmVudCgnZXJyb3InLCBuZXcgQ2xvdWRJbnRlcm9wQVBJRXJyb3IoYFVua25vd24gRXJyb3JgLCAnRVJSX1VOS05PV04nLCBlcnJvcikpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLiNtcXR0Q2xpZW50Lm9uKCdyZWNvbm5lY3QnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy4jYXR0ZW1wdGluZ1RvUmVjb25uZWN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLiNyZWNvbm5lY3RSZXRyaWVzICs9IDE7XG4gICAgICAgICAgICAgICAgdGhpcy4jbG9nZ2VyKCdkZWJ1ZycsIGBDbG91ZCBJbnRlcm9wIGF0dGVtcHRpbmcgcmVjb25uZWN0aW9uIC0gJHt0aGlzLiNyZWNvbm5lY3RSZXRyaWVzfS4uLmApO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLiNyZWNvbm5lY3RSZXRyaWVzID09PSB0aGlzLiNyZWNvbm5lY3RSZXRyeUxpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2xvZ2dlcignd2FybicsIGBDbG91ZCBJbnRlcm9wIHJlYWNoZWQgbWF4IHJlY29ubmVjdGlvbiBhdHRlbXB0cyAtICR7dGhpcy4jcmVjb25uZWN0UmV0cnlMaW1pdH0uLi5gKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGlzY29ubmVjdCh0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy4jZW1pdEV2ZW50KCdyZWNvbm5lY3RpbmcnLCB0aGlzLiNyZWNvbm5lY3RSZXRyaWVzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gRG9lcyBub3QgZmlyZSBvbiBpbml0aWFsIGNvbm5lY3Rpb24sIG9ubHkgc3VjY2Vzc2Z1bCByZWNvbm5lY3Rpb24gYXR0ZW1wdHNcbiAgICAgICAgICAgIHRoaXMuI21xdHRDbGllbnQub24oJ2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy4jbG9nZ2VyKCdkZWJ1ZycsIGBDbG91ZCBJbnRlcm9wIHN1Y2Nlc3NmdWxseSByZWNvbm5lY3RlZCBhZnRlciAke3RoaXMuI3JlY29ubmVjdFJldHJpZXN9IGF0dGVtcHRzYCk7XG4gICAgICAgICAgICAgICAgdGhpcy4jcmVjb25uZWN0UmV0cmllcyA9IDA7XG4gICAgICAgICAgICAgICAgdGhpcy4jYXR0ZW1wdGluZ1RvUmVjb25uZWN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy4jZW1pdEV2ZW50KCdyZWNvbm5lY3RlZCcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLiNtcXR0Q2xpZW50Lm9uKCdtZXNzYWdlJywgKHRvcGljLCBtZXNzYWdlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLiNzZXNzaW9uRGV0YWlscykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNsb2dnZXIoJ3dhcm4nLCAnUmVjZWl2ZWQgbWVzc2FnZSB3aGVuIHNlc3Npb24gbm90IGNvbm5lY3RlZCcpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuI2hhbmRsZUNvbW1hbmQodG9waWMsIG1lc3NhZ2UsIHRoaXMuI3Nlc3Npb25EZXRhaWxzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gU3Vic2NyaWJlIHRvIGFsbCBjb250ZXh0IGdyb3Vwc1xuICAgICAgICAgICAgdGhpcy4jbXF0dENsaWVudC5zdWJzY3JpYmUoYCR7c2Vzc2lvblJvb3RUb3BpY30vY29udGV4dC1ncm91cHMvI2ApO1xuICAgICAgICAgICAgLy8gTGlzdGVuIG91dCBmb3IgZ2xvYmFsIGNvbW1hbmRzXG4gICAgICAgICAgICB0aGlzLiNtcXR0Q2xpZW50LnN1YnNjcmliZShgJHtzZXNzaW9uUm9vdFRvcGljfS9jb21tYW5kc2ApO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKGF4aW9zLmlzQXhpb3NFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IucmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAxIHx8IGVycm9yLnJlc3BvbnNlPy5zdGF0dXMgPT09IDQwMykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXV0aG9yaXphdGlvbkVycm9yKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBDbG91ZEludGVyb3BBUElFcnJvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRGlzY29ubmVjdHMgZnJvbSB0aGUgQ2xvdWQgSW50ZXJvcCBzZXJ2aWNlXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHsqfSAge1Byb21pc2U8dm9pZD59XG4gICAgICogQG1lbWJlcm9mIENsb3VkSW50ZXJvcEFQSVxuICAgICAqIEB0aHJvd3Mge0Nsb3VkSW50ZXJvcEFQSUVycm9yfSAtIElmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgZGlzY29ubmVjdGlvblxuICAgICAqL1xuICAgIGFzeW5jIGRpc2Nvbm5lY3QoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuI2Rpc2Nvbm5lY3QodHJ1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFB1Ymxpc2hlcyBhIG5ldyBjb250ZXh0IGZvciB0aGUgZ2l2ZW4gY29udGV4dCBncm91cCB0byB0aGUgb3RoZXIgY29ubmVjdGVkIHNlc3Npb25zXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGV4dEdyb3VwIC0gVGhlIGNvbnRleHQgZ3JvdXAgdG8gcHVibGlzaCB0b1xuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBjb250ZXh0IC0gVGhlIGNvbnRleHQgdG8gcHVibGlzaFxuICAgICAqIEByZXR1cm4geyp9ICB7UHJvbWlzZTx2b2lkPn1cbiAgICAgKiBAbWVtYmVyb2YgQ2xvdWRJbnRlcm9wQVBJXG4gICAgICovXG4gICAgYXN5bmMgc2V0Q29udGV4dChjb250ZXh0R3JvdXAsIGNvbnRleHQpIHtcbiAgICAgICAgaWYgKCF0aGlzLiNzZXNzaW9uRGV0YWlscyB8fCAhdGhpcy4jY29ubmVjdGlvblBhcmFtcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXNzaW9uIG5vdCBjb25uZWN0ZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgYXhpb3MucG9zdChgJHt0aGlzLiNjbG91ZEludGVyb3BTZXR0aW5ncy51cmx9L2FwaS9jb250ZXh0LWdyb3Vwcy8ke3RoaXMuI3Nlc3Npb25EZXRhaWxzLnNlc3Npb25JZH0vJHtjb250ZXh0R3JvdXB9YCwgcGF5bG9hZCwge1xuICAgICAgICAgICAgaGVhZGVyczogdGhpcy4jZ2V0UmVxdWVzdEhlYWRlcnMoKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFkZEV2ZW50TGlzdGVuZXIodHlwZSwgY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gdGhpcy4jZXZlbnRMaXN0ZW5lcnMuZ2V0KHR5cGUpIHx8IFtdO1xuICAgICAgICBsaXN0ZW5lcnMucHVzaChjYWxsYmFjayk7XG4gICAgICAgIHRoaXMuI2V2ZW50TGlzdGVuZXJzLnNldCh0eXBlLCBsaXN0ZW5lcnMpO1xuICAgIH1cbiAgICByZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuI2V2ZW50TGlzdGVuZXJzLmdldCh0eXBlKSB8fCBbXTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBsaXN0ZW5lcnMuaW5kZXhPZihjYWxsYmFjayk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2V2ZW50TGlzdGVuZXJzLnNldCh0eXBlLCBsaXN0ZW5lcnMpO1xuICAgIH1cbiAgICBhc3luYyAjZGlzY29ubmVjdChmaXJlRGlzY29ubmVjdGVkRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLiNzZXNzaW9uRGV0YWlscykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBkaXNjb25uZWN0UmVzcG9uc2UgPSBhd2FpdCBheGlvcy5kZWxldGUoYCR7dGhpcy4jY2xvdWRJbnRlcm9wU2V0dGluZ3MudXJsfS9hcGkvc2Vzc2lvbnMvJHt0aGlzLiNzZXNzaW9uRGV0YWlscy5zZXNzaW9uSWR9YCwge1xuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuI2dldFJlcXVlc3RIZWFkZXJzKCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChkaXNjb25uZWN0UmVzcG9uc2Uuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ2xvdWRJbnRlcm9wQVBJRXJyb3IoJ0Vycm9yIGR1cmluZyBzZXNzaW9uIHRlYXIgZG93biAtIHVuZXhwZWN0ZWQgc3RhdHVzJywgJ0VSUl9ESVNDT05ORUNUJywgZGlzY29ubmVjdFJlc3BvbnNlLnN0YXR1cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgdGhyb3cgbmV3IENsb3VkSW50ZXJvcEFQSUVycm9yKCdFcnJvciBkdXJpbmcgZGlzY29ubmVjdGlvbicsICdFUlJfRElTQ09OTkVDVCcpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy4jbXF0dENsaWVudD8ucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLiNtcXR0Q2xpZW50Py5lbmRBc3luYyh0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuI3Nlc3Npb25EZXRhaWxzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy4jbXF0dENsaWVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuI3JlY29ubmVjdFJldHJpZXMgPSAwO1xuICAgICAgICAgICAgdGhpcy4jYXR0ZW1wdGluZ1RvUmVjb25uZWN0ID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoZmlyZURpc2Nvbm5lY3RlZEV2ZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jZW1pdEV2ZW50KCdkaXNjb25uZWN0ZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAjaGFuZGxlQ29tbWFuZCh0b3BpYywgbWVzc2FnZSwgc2Vzc2lvbkRldGFpbHMpIHtcbiAgICAgICAgaWYgKG1lc3NhZ2UubGVuZ3RoID09PSAwIHx8ICFzZXNzaW9uRGV0YWlscykge1xuICAgICAgICAgICAgLy8gSWdub3JlIGNsZWFuIHVwIG1lc3NhZ2VzXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVzc2FnZUVudmVsb3BlID0gSlNPTi5wYXJzZShtZXNzYWdlLnRvU3RyaW5nKCkpO1xuICAgICAgICBpZiAodG9waWMuc3RhcnRzV2l0aChgJHtzZXNzaW9uRGV0YWlscy5zZXNzaW9uUm9vdFRvcGljfS9jb250ZXh0LWdyb3Vwcy9gKSkge1xuICAgICAgICAgICAgaWYgKG1lc3NhZ2VFbnZlbG9wZS5zb3VyY2Uuc2Vzc2lvbklkID09PSBzZXNzaW9uRGV0YWlscy5zZXNzaW9uSWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB7IGNoYW5uZWxOYW1lOiBjb250ZXh0R3JvdXAsIHBheWxvYWQ6IGNvbnRleHQsIHNvdXJjZSwgaGlzdG9yeSB9ID0gbWVzc2FnZUVudmVsb3BlO1xuICAgICAgICAgICAgdGhpcy4jZW1pdEV2ZW50KCdjb250ZXh0JywgeyBjb250ZXh0R3JvdXAsIGNvbnRleHQsIHNvdXJjZSwgaGlzdG9yeTogeyAuLi5oaXN0b3J5LCBjbGllbnRSZWNlaXZlZDogRGF0ZS5ub3coKSB9IH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgICNlbWl0RXZlbnQodHlwZSwgLi4uYXJncykge1xuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLiNldmVudExpc3RlbmVycy5nZXQodHlwZSkgfHwgW107XG4gICAgICAgIGxpc3RlbmVycy5mb3JFYWNoKChsaXN0ZW5lcikgPT4gbGlzdGVuZXIoLi4uYXJncykpO1xuICAgIH1cbiAgICAjdmFsaWRhdGVDb25uZWN0UGFyYW1zID0gKHBhcmFtZXRlcnMpID0+IHtcbiAgICAgICAgaWYgKCFwYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nvbm5lY3QgcGFyYW1ldGVycyBtdXN0IGJlIHByb3ZpZGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcmFtZXRlcnMuYXV0aGVudGljYXRpb25UeXBlID09PSAnand0JyAmJlxuICAgICAgICAgICAgKCFwYXJhbWV0ZXJzLmp3dEF1dGhlbnRpY2F0aW9uUGFyYW1ldGVycz8uand0UmVxdWVzdENhbGxiYWNrIHx8ICFwYXJhbWV0ZXJzLmp3dEF1dGhlbnRpY2F0aW9uUGFyYW1ldGVycz8uYXV0aGVudGljYXRpb25JZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignand0QXV0aGVudGljYXRpb25QYXJhbWV0ZXJzIG11c3QgYmUgcHJvdmlkZWQgd2hlbiB1c2luZyBqd3QgYXV0aGVudGljYXRpb24nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyYW1ldGVycy5hdXRoZW50aWNhdGlvblR5cGUgPT09ICdiYXNpYycgJiZcbiAgICAgICAgICAgICghcGFyYW1ldGVycy5iYXNpY0F1dGhlbnRpY2F0aW9uUGFyYW1ldGVycz8udXNlcm5hbWUgfHwgIXBhcmFtZXRlcnMuYmFzaWNBdXRoZW50aWNhdGlvblBhcmFtZXRlcnM/LnBhc3N3b3JkKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdiYXNpY0F1dGhlbnRpY2F0aW9uUGFyYW1ldGVycyBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gdXNpbmcgYmFzaWMgYXV0aGVudGljYXRpb24nKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgI2dldFJlcXVlc3RIZWFkZXJzID0gKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuI2Nvbm5lY3Rpb25QYXJhbXMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ29ubmVjdCBwYXJhbWV0ZXJzIG11c3QgYmUgcHJvdmlkZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEF4aW9zSGVhZGVycygpO1xuICAgICAgICBoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qc29uJztcbiAgICAgICAgaWYgKHRoaXMuI2Nvbm5lY3Rpb25QYXJhbXMuYXV0aGVudGljYXRpb25UeXBlID09PSAnand0JyAmJiB0aGlzLiNjb25uZWN0aW9uUGFyYW1zLmp3dEF1dGhlbnRpY2F0aW9uUGFyYW1ldGVycykge1xuICAgICAgICAgICAgY29uc3QgdG9rZW5SZXN1bHQgPSB0aGlzLiNjb25uZWN0aW9uUGFyYW1zLmp3dEF1dGhlbnRpY2F0aW9uUGFyYW1ldGVycy5qd3RSZXF1ZXN0Q2FsbGJhY2soKTtcbiAgICAgICAgICAgIGlmICghdG9rZW5SZXN1bHQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2p3dFJlcXVlc3RDYWxsYmFjayBtdXN0IHJldHVybiBhIHRva2VuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoZWFkZXJzWyd4LW9mLWF1dGgtaWQnXSA9IHRoaXMuI2Nvbm5lY3Rpb25QYXJhbXMuand0QXV0aGVudGljYXRpb25QYXJhbWV0ZXJzLmF1dGhlbnRpY2F0aW9uSWQ7XG4gICAgICAgICAgICBoZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPVxuICAgICAgICAgICAgICAgIHR5cGVvZiB0b2tlblJlc3VsdCA9PT0gJ3N0cmluZycgPyBgQmVhcmVyICR7dG9rZW5SZXN1bHR9YCA6IGBCZWFyZXIgJHtCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeSh0b2tlblJlc3VsdCkpLnRvU3RyaW5nKCdiYXNlNjQnKX1gO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLiNjb25uZWN0aW9uUGFyYW1zLmF1dGhlbnRpY2F0aW9uVHlwZSA9PT0gJ2Jhc2ljJyAmJiB0aGlzLiNjb25uZWN0aW9uUGFyYW1zLmJhc2ljQXV0aGVudGljYXRpb25QYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICBjb25zdCB7IHVzZXJuYW1lLCBwYXNzd29yZCB9ID0gdGhpcy4jY29ubmVjdGlvblBhcmFtcy5iYXNpY0F1dGhlbnRpY2F0aW9uUGFyYW1ldGVycztcbiAgICAgICAgICAgIGhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9IGBCYXNpYyAke0J1ZmZlci5mcm9tKGAke3VzZXJuYW1lfToke3Bhc3N3b3JkfWApLnRvU3RyaW5nKCdiYXNlNjQnKX1gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoZWFkZXJzO1xuICAgIH07XG59XG5cbi8qKlxuICogRW5oYW5jZXMgSW50ZXJvcEJyb2tlciB3aXRoIENsb3VkIEludGVyb3AgZnVuY3Rpb25hbGl0eVxuICogQHBhcmFtIHtDbG91ZEludGVyb3BPdmVycmlkZVBhcmFtc30gY29uZmlnIENvbmZpZ3VyYXRpb24gdG8gY29ubmVjdCB0byB0aGUgQ2xvdWQgSW50ZXJvcCBzZXJ2aWNlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNsb3VkSW50ZXJvcE92ZXJyaWRlKGNvbmZpZykge1xuICAgIGNvbnN0IHsgdXJsLCAuLi5zZXR0aW5ncyB9ID0gY29uZmlnO1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBDbG91ZEludGVyb3BBUEkoeyB1cmwgfSk7XG4gICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgY2xpZW50LmNvbm5lY3Qoc2V0dGluZ3MpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybihgW0Nsb3VkSW50ZXJvcE92ZXJyaWRlXSBGYWlsZWQgdG8gY29ubmVjdCB0byBDbG91ZCBJbnRlcm9wIFNlcnZpY2UuIENhbGwgaW50ZXJvcEJyb2tlci5jbG91ZFJlY29ubmVjdCgpIHRvIGF0dGVtcHQgcmVjb25uZWN0aW9uYCwgZXJyKTtcbiAgICB9XG4gICAgcmV0dXJuIChCYXNlKSA9PiB7XG4gICAgICAgIHJldHVybiBjbGFzcyBDbG91ZEludGVyb3BPdmVycmlkZSBleHRlbmRzIEJhc2Uge1xuICAgICAgICAgICAgY29udGV4dExpc3RlbmVyO1xuICAgICAgICAgICAgc2V0Q29udGV4dEZpbHRlciA9IChjb250ZXh0KSA9PiB0cnVlO1xuICAgICAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHRMaXN0ZW5lciA9IChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGNvbnRleHRHcm91cCwgY29udGV4dCwgc291cmNlIH0gPSBldmVudDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ2V0Q29udGV4dEdyb3VwcygpXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKCh7IGlkIH0pID0+IGlkKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmluY2x1ZGVzKGNvbnRleHRHcm91cCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudC5zZXNzaW9uRGV0YWlscz8uc2Vzc2lvbklkICE9PSBzb3VyY2Uuc2Vzc2lvbklkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdXBlci5zZXRDb250ZXh0Rm9yR3JvdXAoeyBjb250ZXh0OiBjb250ZXh0IH0sIGNvbnRleHRHcm91cCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNsaWVudC5hZGRFdmVudExpc3RlbmVyKCdjb250ZXh0JywgdGhpcy5jb250ZXh0TGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXN5bmMgc2V0Q29udGV4dEZvckdyb3VwKHsgY29udGV4dCB9LCBjb250ZXh0R3JvdXBJZCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNsb3VkQ29ubmVjdGlvblN0YXRlID09PSAnY29ubmVjdGVkJyAmJiB0aGlzLnNldENvbnRleHRGaWx0ZXIoY29udGV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xpZW50LnNldENvbnRleHQoY29udGV4dEdyb3VwSWQsIGNvbnRleHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdXBlci5zZXRDb250ZXh0Rm9yR3JvdXAoeyBjb250ZXh0IH0sIGNvbnRleHRHcm91cElkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQXR0ZW1wdHMgcmVjb25uZWN0aW9uIHRvIHRoZSBDbG91ZCBJbnRlcm9wIHNlcnZpY2VcbiAgICAgICAgICAgICAqIEBwYXJhbSB7Q29ubmVjdFBhcmFtZXRlcnN9IHNldHRpbmdzIFBhcmFtZXRlcnMgZm9yIGNvbm5lY3RpbmcgdG8gdGhlIEludGVyb3AgU2VydmljZVxuICAgICAgICAgICAgICogQHJldHVybiB7Kn0ge1Byb21pc2U8dm9pZD59XG4gICAgICAgICAgICAgKiBAdGhyb3dzIHtDbG91ZEludGVyb3BBUElFcnJvcn1cbiAgICAgICAgICAgICAqIEB0aHJvd3Mge0F1dGhvcml6YXRpb25FcnJvcn1cbiAgICAgICAgICAgICAqIEBtZW1iZXJvZiBDbG91ZEludGVyb3BPdmVycmlkZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBhc3luYyBjbG91ZFJlY29ubmVjdChzZXR0aW5ncykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNsb3VkQ29ubmVjdGlvblN0YXRlID09PSAnY29ubmVjdGVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgY2xpZW50LmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBjbGllbnQuY29ubmVjdChzZXR0aW5ncyB8fCBjb25maWcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgW0Nsb3VkSW50ZXJvcE92ZXJyaWRlXSBGYWlsZWQgcmVjb25uZWN0aW9uIHRvIENsb3VkIEludGVyb3AgU2VydmljZS5gLCBlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogU2V0cyB0aGUgbGlzdGVuZXIgZm9yIGNvbnRleHQgZXZlbnRzIGNvbWluZyBmcm9tIHRoZSBDbG91ZCBJbnRlcm9wIHNlcnZpY2VcbiAgICAgICAgICAgICAqIEBwYXJhbSBsaXN0ZW5lciBDb250ZXh0IGV2ZW50IGxpc3RlbmVyXG4gICAgICAgICAgICAgKiBAcmV0dXJuIHsqfSB7dm9pZH1cbiAgICAgICAgICAgICAqIEBtZW1iZXJvZiBDbG91ZEludGVyb3BPdmVycmlkZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBzZXRDbG91ZENvbnRleHRMaXN0ZW5lcihsaXN0ZW5lcikge1xuICAgICAgICAgICAgICAgIGNsaWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjb250ZXh0JywgdGhpcy5jb250ZXh0TGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dExpc3RlbmVyID0gbGlzdGVuZXI7XG4gICAgICAgICAgICAgICAgY2xpZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NvbnRleHQnLCB0aGlzLmNvbnRleHRMaXN0ZW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFNldHMgYSBmaWx0ZXIgdGhhdCBpcyBhcHBsaWVkIHRvIGxvY2FsIGNvbnRleHQgYmVmb3JlIGl0IGlzIGZvcndhcmRlZCB0byB0aGUgQ2xvdWQgSW50ZXJvcCBzZXJ2aWNlXG4gICAgICAgICAgICAgKiBAcGFyYW0gZmlsdGVyXG4gICAgICAgICAgICAgKiBAcmV0dXJuIHsqfSB7dm9pZH1cbiAgICAgICAgICAgICAqIEBtZW1iZXJvZiBDbG91ZEludGVyb3BPdmVycmlkZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBzZXRDbG91ZFNldENvbnRleHRGaWx0ZXIoZmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRDb250ZXh0RmlsdGVyID0gZmlsdGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ2V0IGNsb3VkQ29ubmVjdGlvblN0YXRlKCkge1xuICAgICAgICAgICAgICAgIGlmIChjbGllbnQubXF0dENsaWVudD8uY29ubmVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnY29ubmVjdGVkJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNsaWVudC5tcXR0Q2xpZW50Py5yZWNvbm5lY3RpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdyZWNvbm5lY3RpbmcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gJ2Rpc2Nvbm5lY3RlZCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfTtcbn1cblxuZXhwb3J0IHsgY2xvdWRJbnRlcm9wT3ZlcnJpZGUgfTtcbiIsIi8qISBGb3IgbGljZW5zZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlIGluZGV4LmpzLkxJQ0VOU0UudHh0ICovXG4oKCk9Pnt2YXIgZT17MzA0OihlLHQsbik9Pnt2YXIgcj17ODU5NDooZSx0LG4pPT57bi5kKHQse1o6KCk9Pm99KTt2YXIgcj0vXigoY2hpbGRyZW58ZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUx8a2V5fHJlZnxhdXRvRm9jdXN8ZGVmYXVsdFZhbHVlfGRlZmF1bHRDaGVja2VkfGlubmVySFRNTHxzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmd8c3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nfHZhbHVlTGlua3xhY2NlcHR8YWNjZXB0Q2hhcnNldHxhY2Nlc3NLZXl8YWN0aW9ufGFsbG93fGFsbG93VXNlck1lZGlhfGFsbG93UGF5bWVudFJlcXVlc3R8YWxsb3dGdWxsU2NyZWVufGFsbG93VHJhbnNwYXJlbmN5fGFsdHxhc3luY3xhdXRvQ29tcGxldGV8YXV0b1BsYXl8Y2FwdHVyZXxjZWxsUGFkZGluZ3xjZWxsU3BhY2luZ3xjaGFsbGVuZ2V8Y2hhclNldHxjaGVja2VkfGNpdGV8Y2xhc3NJRHxjbGFzc05hbWV8Y29sc3xjb2xTcGFufGNvbnRlbnR8Y29udGVudEVkaXRhYmxlfGNvbnRleHRNZW51fGNvbnRyb2xzfGNvbnRyb2xzTGlzdHxjb29yZHN8Y3Jvc3NPcmlnaW58ZGF0YXxkYXRlVGltZXxkZWNvZGluZ3xkZWZhdWx0fGRlZmVyfGRpcnxkaXNhYmxlZHxkaXNhYmxlUGljdHVyZUluUGljdHVyZXxkb3dubG9hZHxkcmFnZ2FibGV8ZW5jVHlwZXxmb3JtfGZvcm1BY3Rpb258Zm9ybUVuY1R5cGV8Zm9ybU1ldGhvZHxmb3JtTm9WYWxpZGF0ZXxmb3JtVGFyZ2V0fGZyYW1lQm9yZGVyfGhlYWRlcnN8aGVpZ2h0fGhpZGRlbnxoaWdofGhyZWZ8aHJlZkxhbmd8aHRtbEZvcnxodHRwRXF1aXZ8aWR8aW5wdXRNb2RlfGludGVncml0eXxpc3xrZXlQYXJhbXN8a2V5VHlwZXxraW5kfGxhYmVsfGxhbmd8bGlzdHxsb2FkaW5nfGxvb3B8bG93fG1hcmdpbkhlaWdodHxtYXJnaW5XaWR0aHxtYXh8bWF4TGVuZ3RofG1lZGlhfG1lZGlhR3JvdXB8bWV0aG9kfG1pbnxtaW5MZW5ndGh8bXVsdGlwbGV8bXV0ZWR8bmFtZXxub25jZXxub1ZhbGlkYXRlfG9wZW58b3B0aW11bXxwYXR0ZXJufHBsYWNlaG9sZGVyfHBsYXlzSW5saW5lfHBvc3RlcnxwcmVsb2FkfHByb2ZpbGV8cmFkaW9Hcm91cHxyZWFkT25seXxyZWZlcnJlclBvbGljeXxyZWx8cmVxdWlyZWR8cmV2ZXJzZWR8cm9sZXxyb3dzfHJvd1NwYW58c2FuZGJveHxzY29wZXxzY29wZWR8c2Nyb2xsaW5nfHNlYW1sZXNzfHNlbGVjdGVkfHNoYXBlfHNpemV8c2l6ZXN8c2xvdHxzcGFufHNwZWxsQ2hlY2t8c3JjfHNyY0RvY3xzcmNMYW5nfHNyY1NldHxzdGFydHxzdGVwfHN0eWxlfHN1bW1hcnl8dGFiSW5kZXh8dGFyZ2V0fHRpdGxlfHR5cGV8dXNlTWFwfHZhbHVlfHdpZHRofHdtb2RlfHdyYXB8YWJvdXR8ZGF0YXR5cGV8aW5saXN0fHByZWZpeHxwcm9wZXJ0eXxyZXNvdXJjZXx0eXBlb2Z8dm9jYWJ8YXV0b0NhcGl0YWxpemV8YXV0b0NvcnJlY3R8YXV0b1NhdmV8Y29sb3J8aW5lcnR8aXRlbVByb3B8aXRlbVNjb3BlfGl0ZW1UeXBlfGl0ZW1JRHxpdGVtUmVmfG9ufHJlc3VsdHN8c2VjdXJpdHl8dW5zZWxlY3RhYmxlfGFjY2VudEhlaWdodHxhY2N1bXVsYXRlfGFkZGl0aXZlfGFsaWdubWVudEJhc2VsaW5lfGFsbG93UmVvcmRlcnxhbHBoYWJldGljfGFtcGxpdHVkZXxhcmFiaWNGb3JtfGFzY2VudHxhdHRyaWJ1dGVOYW1lfGF0dHJpYnV0ZVR5cGV8YXV0b1JldmVyc2V8YXppbXV0aHxiYXNlRnJlcXVlbmN5fGJhc2VsaW5lU2hpZnR8YmFzZVByb2ZpbGV8YmJveHxiZWdpbnxiaWFzfGJ5fGNhbGNNb2RlfGNhcEhlaWdodHxjbGlwfGNsaXBQYXRoVW5pdHN8Y2xpcFBhdGh8Y2xpcFJ1bGV8Y29sb3JJbnRlcnBvbGF0aW9ufGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnN8Y29sb3JQcm9maWxlfGNvbG9yUmVuZGVyaW5nfGNvbnRlbnRTY3JpcHRUeXBlfGNvbnRlbnRTdHlsZVR5cGV8Y3Vyc29yfGN4fGN5fGR8ZGVjZWxlcmF0ZXxkZXNjZW50fGRpZmZ1c2VDb25zdGFudHxkaXJlY3Rpb258ZGlzcGxheXxkaXZpc29yfGRvbWluYW50QmFzZWxpbmV8ZHVyfGR4fGR5fGVkZ2VNb2RlfGVsZXZhdGlvbnxlbmFibGVCYWNrZ3JvdW5kfGVuZHxleHBvbmVudHxleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkfGZpbGx8ZmlsbE9wYWNpdHl8ZmlsbFJ1bGV8ZmlsdGVyfGZpbHRlclJlc3xmaWx0ZXJVbml0c3xmbG9vZENvbG9yfGZsb29kT3BhY2l0eXxmb2N1c2FibGV8Zm9udEZhbWlseXxmb250U2l6ZXxmb250U2l6ZUFkanVzdHxmb250U3RyZXRjaHxmb250U3R5bGV8Zm9udFZhcmlhbnR8Zm9udFdlaWdodHxmb3JtYXR8ZnJvbXxmcnxmeHxmeXxnMXxnMnxnbHlwaE5hbWV8Z2x5cGhPcmllbnRhdGlvbkhvcml6b250YWx8Z2x5cGhPcmllbnRhdGlvblZlcnRpY2FsfGdseXBoUmVmfGdyYWRpZW50VHJhbnNmb3JtfGdyYWRpZW50VW5pdHN8aGFuZ2luZ3xob3JpekFkdlh8aG9yaXpPcmlnaW5YfGlkZW9ncmFwaGljfGltYWdlUmVuZGVyaW5nfGlufGluMnxpbnRlcmNlcHR8a3xrMXxrMnxrM3xrNHxrZXJuZWxNYXRyaXh8a2VybmVsVW5pdExlbmd0aHxrZXJuaW5nfGtleVBvaW50c3xrZXlTcGxpbmVzfGtleVRpbWVzfGxlbmd0aEFkanVzdHxsZXR0ZXJTcGFjaW5nfGxpZ2h0aW5nQ29sb3J8bGltaXRpbmdDb25lQW5nbGV8bG9jYWx8bWFya2VyRW5kfG1hcmtlck1pZHxtYXJrZXJTdGFydHxtYXJrZXJIZWlnaHR8bWFya2VyVW5pdHN8bWFya2VyV2lkdGh8bWFza3xtYXNrQ29udGVudFVuaXRzfG1hc2tVbml0c3xtYXRoZW1hdGljYWx8bW9kZXxudW1PY3RhdmVzfG9mZnNldHxvcGFjaXR5fG9wZXJhdG9yfG9yZGVyfG9yaWVudHxvcmllbnRhdGlvbnxvcmlnaW58b3ZlcmZsb3d8b3ZlcmxpbmVQb3NpdGlvbnxvdmVybGluZVRoaWNrbmVzc3xwYW5vc2UxfHBhaW50T3JkZXJ8cGF0aExlbmd0aHxwYXR0ZXJuQ29udGVudFVuaXRzfHBhdHRlcm5UcmFuc2Zvcm18cGF0dGVyblVuaXRzfHBvaW50ZXJFdmVudHN8cG9pbnRzfHBvaW50c0F0WHxwb2ludHNBdFl8cG9pbnRzQXRafHByZXNlcnZlQWxwaGF8cHJlc2VydmVBc3BlY3RSYXRpb3xwcmltaXRpdmVVbml0c3xyfHJhZGl1c3xyZWZYfHJlZll8cmVuZGVyaW5nSW50ZW50fHJlcGVhdENvdW50fHJlcGVhdER1cnxyZXF1aXJlZEV4dGVuc2lvbnN8cmVxdWlyZWRGZWF0dXJlc3xyZXN0YXJ0fHJlc3VsdHxyb3RhdGV8cnh8cnl8c2NhbGV8c2VlZHxzaGFwZVJlbmRlcmluZ3xzbG9wZXxzcGFjaW5nfHNwZWN1bGFyQ29uc3RhbnR8c3BlY3VsYXJFeHBvbmVudHxzcGVlZHxzcHJlYWRNZXRob2R8c3RhcnRPZmZzZXR8c3RkRGV2aWF0aW9ufHN0ZW1ofHN0ZW12fHN0aXRjaFRpbGVzfHN0b3BDb2xvcnxzdG9wT3BhY2l0eXxzdHJpa2V0aHJvdWdoUG9zaXRpb258c3RyaWtldGhyb3VnaFRoaWNrbmVzc3xzdHJpbmd8c3Ryb2tlfHN0cm9rZURhc2hhcnJheXxzdHJva2VEYXNob2Zmc2V0fHN0cm9rZUxpbmVjYXB8c3Ryb2tlTGluZWpvaW58c3Ryb2tlTWl0ZXJsaW1pdHxzdHJva2VPcGFjaXR5fHN0cm9rZVdpZHRofHN1cmZhY2VTY2FsZXxzeXN0ZW1MYW5ndWFnZXx0YWJsZVZhbHVlc3x0YXJnZXRYfHRhcmdldFl8dGV4dEFuY2hvcnx0ZXh0RGVjb3JhdGlvbnx0ZXh0UmVuZGVyaW5nfHRleHRMZW5ndGh8dG98dHJhbnNmb3JtfHUxfHUyfHVuZGVybGluZVBvc2l0aW9ufHVuZGVybGluZVRoaWNrbmVzc3x1bmljb2RlfHVuaWNvZGVCaWRpfHVuaWNvZGVSYW5nZXx1bml0c1BlckVtfHZBbHBoYWJldGljfHZIYW5naW5nfHZJZGVvZ3JhcGhpY3x2TWF0aGVtYXRpY2FsfHZhbHVlc3x2ZWN0b3JFZmZlY3R8dmVyc2lvbnx2ZXJ0QWR2WXx2ZXJ0T3JpZ2luWHx2ZXJ0T3JpZ2luWXx2aWV3Qm94fHZpZXdUYXJnZXR8dmlzaWJpbGl0eXx3aWR0aHN8d29yZFNwYWNpbmd8d3JpdGluZ01vZGV8eHx4SGVpZ2h0fHgxfHgyfHhDaGFubmVsU2VsZWN0b3J8eGxpbmtBY3R1YXRlfHhsaW5rQXJjcm9sZXx4bGlua0hyZWZ8eGxpbmtSb2xlfHhsaW5rU2hvd3x4bGlua1RpdGxlfHhsaW5rVHlwZXx4bWxCYXNlfHhtbG5zfHhtbG5zWGxpbmt8eG1sTGFuZ3x4bWxTcGFjZXx5fHkxfHkyfHlDaGFubmVsU2VsZWN0b3J8enx6b29tQW5kUGFufGZvcnxjbGFzc3xhdXRvZm9jdXMpfCgoW0RkXVtBYV1bVHRdW0FhXXxbQWFdW1JyXVtJaV1bQWFdfHgpLS4qKSkkLztjb25zdCBvPShhPXt9LGZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1hW2VdJiYoYVtlXT0odD1lLHIudGVzdCh0KXx8MTExPT09dC5jaGFyQ29kZUF0KDApJiYxMTA9PT10LmNoYXJDb2RlQXQoMSkmJnQuY2hhckNvZGVBdCgyKTw5MSkpLGFbZV07dmFyIHR9KTt2YXIgYX0sMTUyMTooZSx0LG4pPT57bi5yKHQpLG4uZCh0LHtBY3Rpdml0eUxvZ0ljb246KCk9PmEsQWxpZ25CYXNlbGluZUljb246KCk9PmksQWxpZ25Cb3R0b21JY29uOigpPT5sLEFsaWduQ2VudGVySG9yaXpvbnRhbGx5SWNvbjooKT0+cyxBbGlnbkNlbnRlclZlcnRpY2FsbHlJY29uOigpPT5jLEFsaWduTGVmdEljb246KCk9PnUsQWxpZ25SaWdodEljb246KCk9PmQsQWxpZ25Ub3BJY29uOigpPT5wLEFsbFNpZGVzSWNvbjooKT0+ZixBbmdsZUljb246KCk9PmgsQXJjaGl2ZUljb246KCk9PmcsQXJyb3dCb3R0b21MZWZ0SWNvbjooKT0+dixBcnJvd0JvdHRvbVJpZ2h0SWNvbjooKT0+QyxBcnJvd0Rvd25JY29uOigpPT5tLEFycm93TGVmdEljb246KCk9PncsQXJyb3dSaWdodEljb246KCk9PmIsQXJyb3dUb3BMZWZ0SWNvbjooKT0+eSxBcnJvd1RvcFJpZ2h0SWNvbjooKT0+eCxBcnJvd1VwSWNvbjooKT0+ayxBc3BlY3RSYXRpb0ljb246KCk9PlMsQXZhdGFySWNvbjooKT0+TyxCYWNrcGFja0ljb246KCk9Pk0sQmFkZ2VJY29uOigpPT5MLEJhckNoYXJ0SWNvbjooKT0+XyxCZWxsSWNvbjooKT0+UCxCbGVuZGluZ01vZGVJY29uOigpPT5FLEJvb2ttYXJrSWNvbjooKT0+aixCb3JkZXJBbGxJY29uOigpPT5SLEJvcmRlckJvdHRvbUljb246KCk9PkksQm9yZGVyRGFzaGVkSWNvbjooKT0+VixCb3JkZXJEb3R0ZWRJY29uOigpPT5ILEJvcmRlckxlZnRJY29uOigpPT5BLEJvcmRlck5vbmVJY29uOigpPT5ULEJvcmRlclJpZ2h0SWNvbjooKT0+RCxCb3JkZXJTb2xpZEljb246KCk9PkIsQm9yZGVyU3BsaXRJY29uOigpPT5aLEJvcmRlclN0eWxlSWNvbjooKT0+JCxCb3JkZXJUb3BJY29uOigpPT5OLEJveEljb246KCk9PkYsQm94TW9kZWxJY29uOigpPT5XLEJ1dHRvbkljb246KCk9PlUsQ2FsZW5kYXJJY29uOigpPT56LENhbWVyYUljb246KCk9PkcsQ2FyZFN0YWNrSWNvbjooKT0+SyxDYXJkU3RhY2tNaW51c0ljb246KCk9PnEsQ2FyZFN0YWNrUGx1c0ljb246KCk9PlksQ2FyZXREb3duSWNvbjooKT0+SixDYXJldExlZnRJY29uOigpPT5YLENhcmV0UmlnaHRJY29uOigpPT5RLENhcmV0U29ydEljb246KCk9PmVlLENhcmV0VXBJY29uOigpPT50ZSxDaGF0QnViYmxlSWNvbjooKT0+bmUsQ2hlY2tDaXJjbGVkSWNvbjooKT0+b2UsQ2hlY2tJY29uOigpPT5yZSxDaGVja2JveEljb246KCk9PmFlLENoZXZyb25Eb3duSWNvbjooKT0+aWUsQ2hldnJvbkxlZnRJY29uOigpPT5sZSxDaGV2cm9uUmlnaHRJY29uOigpPT5zZSxDaGV2cm9uVXBJY29uOigpPT5jZSxDaXJjbGVCYWNrc2xhc2hJY29uOigpPT5kZSxDaXJjbGVJY29uOigpPT51ZSxDbGlwYm9hcmRDb3B5SWNvbjooKT0+ZmUsQ2xpcGJvYXJkSWNvbjooKT0+cGUsQ2xvY2tJY29uOigpPT5oZSxDb2RlSWNvbjooKT0+Z2UsQ29kZVNhbmRib3hMb2dvSWNvbjooKT0+dmUsQ29sdW1uU3BhY2luZ0ljb246KCk9PkNlLENvbHVtbnNJY29uOigpPT5tZSxDb21taXRJY29uOigpPT53ZSxDb21wb25lbnQxSWNvbjooKT0+YmUsQ29tcG9uZW50Mkljb246KCk9PnllLENvbXBvbmVudEJvb2xlYW5JY29uOigpPT54ZSxDb21wb25lbnRJbnN0YW5jZUljb246KCk9PmtlLENvbXBvbmVudE5vbmVJY29uOigpPT5TZSxDb21wb25lbnRQbGFjZWhvbGRlckljb246KCk9Pk9lLENvbnRhaW5lckljb246KCk9Pk1lLENvb2tpZUljb246KCk9PkxlLENvcHlJY29uOigpPT5fZSxDb3JuZXJCb3R0b21MZWZ0SWNvbjooKT0+UGUsQ29ybmVyQm90dG9tUmlnaHRJY29uOigpPT5FZSxDb3JuZXJUb3BMZWZ0SWNvbjooKT0+amUsQ29ybmVyVG9wUmlnaHRJY29uOigpPT5SZSxDb3JuZXJzSWNvbjooKT0+SWUsQ291bnRkb3duVGltZXJJY29uOigpPT5WZSxDb3VudGVyQ2xvY2t3aXNlQ2xvY2tJY29uOigpPT5IZSxDcm9wSWNvbjooKT0+QWUsQ3Jvc3MxSWNvbjooKT0+VGUsQ3Jvc3MySWNvbjooKT0+RGUsQ3Jvc3NDaXJjbGVkSWNvbjooKT0+QmUsQ3Jvc3NoYWlyMUljb246KCk9PlplLENyb3NzaGFpcjJJY29uOigpPT4kZSxDcnVtcGxlZFBhcGVySWNvbjooKT0+TmUsQ3ViZUljb246KCk9PkZlLEN1cnNvckFycm93SWNvbjooKT0+V2UsQ3Vyc29yVGV4dEljb246KCk9PlVlLERhc2hJY29uOigpPT56ZSxEYXNoYm9hcmRJY29uOigpPT5HZSxEaW1lbnNpb25zSWNvbjooKT0+S2UsRGlzY0ljb246KCk9PnFlLERpdmlkZXJIb3Jpem9udGFsSWNvbjooKT0+WWUsRGl2aWRlclZlcnRpY2FsSWNvbjooKT0+SmUsRG90RmlsbGVkSWNvbjooKT0+UWUsRG90SWNvbjooKT0+WGUsRG90c0hvcml6b250YWxJY29uOigpPT5ldCxEb3RzVmVydGljYWxJY29uOigpPT50dCxEb3VibGVBcnJvd0Rvd25JY29uOigpPT5udCxEb3VibGVBcnJvd0xlZnRJY29uOigpPT5ydCxEb3VibGVBcnJvd1JpZ2h0SWNvbjooKT0+b3QsRG91YmxlQXJyb3dVcEljb246KCk9PmF0LERvd25sb2FkSWNvbjooKT0+aXQsRHJhZ0hhbmRsZURvdHMxSWNvbjooKT0+bHQsRHJhZ0hhbmRsZURvdHMySWNvbjooKT0+c3QsRHJhZ0hhbmRsZUhvcml6b250YWxJY29uOigpPT5jdCxEcmFnSGFuZGxlVmVydGljYWxJY29uOigpPT51dCxEcmF3aW5nUGluRmlsbGVkSWNvbjooKT0+cHQsRHJhd2luZ1Bpbkljb246KCk9PmR0LERyb3Bkb3duTWVudUljb246KCk9PmZ0LEVudGVyRnVsbFNjcmVlbkljb246KCk9Pmd0LEVudGVySWNvbjooKT0+aHQsRW52ZWxvcGVDbG9zZWRJY29uOigpPT52dCxFbnZlbG9wZU9wZW5JY29uOigpPT5DdCxFeGNsYW1hdGlvblRyaWFuZ2xlSWNvbjooKT0+bXQsRXhpdEZ1bGxTY3JlZW5JY29uOigpPT5idCxFeGl0SWNvbjooKT0+d3QsRXh0ZXJuYWxMaW5rSWNvbjooKT0+eXQsRXllQ2xvc2VkSWNvbjooKT0+eHQsRXllTm9uZUljb246KCk9Pmt0LEV5ZU9wZW5JY29uOigpPT5TdCxGYWNlSWNvbjooKT0+T3QsRmlnbWFMb2dvSWNvbjooKT0+TXQsRmlsZUljb246KCk9Pkx0LEZpbGVNaW51c0ljb246KCk9Pl90LEZpbGVQbHVzSWNvbjooKT0+UHQsRmlsZVRleHRJY29uOigpPT5FdCxGb250Qm9sZEljb246KCk9Pmp0LEZvbnRGYW1pbHlJY29uOigpPT5SdCxGb250SXRhbGljSWNvbjooKT0+SXQsRm9udFJvbWFuSWNvbjooKT0+VnQsRm9udFNpemVJY29uOigpPT5IdCxGb250U3R5bGVJY29uOigpPT5BdCxGcmFtZUljb246KCk9PlR0LEZyYW1lckxvZ29JY29uOigpPT5EdCxHZWFySWNvbjooKT0+QnQsR2l0SHViTG9nb0ljb246KCk9Plp0LEdsb2JlSWNvbjooKT0+JHQsR3JpZEljb246KCk9Pk50LEdyb3VwSWNvbjooKT0+RnQsSGFsZjFJY29uOigpPT5XdCxIYWxmMkljb246KCk9PlV0LEhhbWJ1cmdlck1lbnVJY29uOigpPT56dCxIYW5kSWNvbjooKT0+R3QsSGVhZGluZ0ljb246KCk9Pkt0LEhlaWdodEljb246KCk9PnF0LEhvbWVJY29uOigpPT5ZdCxJY29uSmFyTG9nb0ljb246KCk9Pkp0LElkQ2FyZEljb246KCk9Plh0LEltYWdlSWNvbjooKT0+UXQsSW5mb0NpcmNsZWRJY29uOigpPT5lbixJbnB1dEljb246KCk9PnRuLExhcFRpbWVySWNvbjooKT0+bm4sTGF5ZXJzSWNvbjooKT0+cm4sTGF5b3V0SWNvbjooKT0+b24sTGV0dGVyQ2FzZUNhcGl0YWxpemVJY29uOigpPT5hbixMZXR0ZXJDYXNlTG93ZXJjYXNlSWNvbjooKT0+bG4sTGV0dGVyQ2FzZVRvZ2dsZUljb246KCk9PnNuLExldHRlckNhc2VVcHBlcmNhc2VJY29uOigpPT5jbixMZXR0ZXJTcGFjaW5nSWNvbjooKT0+dW4sTGlnaHRuaW5nQm9sdEljb246KCk9PmRuLExpbmVIZWlnaHRJY29uOigpPT5wbixMaW5rMUljb246KCk9PmZuLExpbmsySWNvbjooKT0+aG4sTGlua0JyZWFrMUljb246KCk9PmduLExpbmtCcmVhazJJY29uOigpPT52bixMaW5rTm9uZTFJY29uOigpPT5DbixMaW5rTm9uZTJJY29uOigpPT5tbixMaXN0QnVsbGV0SWNvbjooKT0+d24sTG9ja0Nsb3NlZEljb246KCk9PmJuLExvY2tPcGVuMUljb246KCk9PnluLExvY2tPcGVuMkljb246KCk9PnhuLExvb3BJY29uOigpPT5rbixNYWdpY1dhbmRJY29uOigpPT5TbixNYWduaWZ5aW5nR2xhc3NJY29uOigpPT5PbixNYXJnaW5JY29uOigpPT5NbixNYXNrT2ZmSWNvbjooKT0+TG4sTWFza09uSWNvbjooKT0+X24sTWludXNDaXJjbGVkSWNvbjooKT0+RW4sTWludXNJY29uOigpPT5QbixNaXhJY29uOigpPT5qbixNaXhlckhvcml6b250YWxJY29uOigpPT5SbixNaXhlclZlcnRpY2FsSWNvbjooKT0+SW4sTW9kdWx6TG9nb0ljb246KCk9PlZuLE1vb25JY29uOigpPT5IbixNb3ZlSWNvbjooKT0+QW4sTm90aW9uTG9nb0ljb246KCk9PlRuLE9wYWNpdHlJY29uOigpPT5EbixPdmVybGluZUljb246KCk9PkJuLFBhZGRpbmdJY29uOigpPT5abixQYXBlclBsYW5lSWNvbjooKT0+JG4sUGF1c2VJY29uOigpPT5ObixQZW5jaWwxSWNvbjooKT0+Rm4sUGVuY2lsMkljb246KCk9PlduLFBlcnNvbkljb246KCk9PlVuLFBpZUNoYXJ0SWNvbjooKT0+em4sUGlsY3Jvd0ljb246KCk9PkduLFBpbkJvdHRvbUljb246KCk9PktuLFBpbkxlZnRJY29uOigpPT5xbixQaW5SaWdodEljb246KCk9PlluLFBpblRvcEljb246KCk9PkpuLFBsYXlJY29uOigpPT5YbixQbHVzQ2lyY2xlZEljb246KCk9PmVyLFBsdXNJY29uOigpPT5RbixRdWVzdGlvbk1hcmtDaXJjbGVkSWNvbjooKT0+bnIsUXVlc3Rpb25NYXJrSWNvbjooKT0+dHIsUXVvdGVJY29uOigpPT5ycixSYWRpb2J1dHRvbkljb246KCk9Pm9yLFJlYWRlckljb246KCk9PmFyLFJlbG9hZEljb246KCk9PmlyLFJlc2V0SWNvbjooKT0+bHIsUmVzdW1lSWNvbjooKT0+c3IsUm9ja2V0SWNvbjooKT0+Y3IsUm90YXRlQ291bnRlckNsb2Nrd2lzZUljb246KCk9PnVyLFJvd1NwYWNpbmdJY29uOigpPT5kcixSb3dzSWNvbjooKT0+cHIsUnVsZXJIb3Jpem9udGFsSWNvbjooKT0+ZnIsUnVsZXJTcXVhcmVJY29uOigpPT5ocixTZWN0aW9uSWNvbjooKT0+Z3IsU2V3aW5nUGluRmlsbGVkSWNvbjooKT0+Q3IsU2V3aW5nUGluSWNvbjooKT0+dnIsU2hhZG93SWNvbjooKT0+bXIsU2hhZG93SW5uZXJJY29uOigpPT53cixTaGFkb3dOb25lSWNvbjooKT0+YnIsU2hhZG93T3V0ZXJJY29uOigpPT55cixTaGFyZTFJY29uOigpPT54cixTaGFyZTJJY29uOigpPT5rcixTaHVmZmxlSWNvbjooKT0+U3IsU2l6ZUljb246KCk9Pk9yLFNrZXRjaExvZ29JY29uOigpPT5NcixTbGFzaEljb246KCk9PkxyLFNsaWRlckljb246KCk9Pl9yLFNwYWNlQmV0d2Vlbkhvcml6b250YWxseUljb246KCk9PlByLFNwYWNlQmV0d2VlblZlcnRpY2FsbHlJY29uOigpPT5FcixTcGFjZUV2ZW5seUhvcml6b250YWxseUljb246KCk9PmpyLFNwYWNlRXZlbmx5VmVydGljYWxseUljb246KCk9PlJyLFNwZWFrZXJMb3VkSWNvbjooKT0+SXIsU3BlYWtlck1vZGVyYXRlSWNvbjooKT0+VnIsU3BlYWtlck9mZkljb246KCk9PkhyLFNwZWFrZXJRdWlldEljb246KCk9PkFyLFNxdWFyZUljb246KCk9PlRyLFN0YWNrSWNvbjooKT0+RHIsU3RhckZpbGxlZEljb246KCk9PlpyLFN0YXJJY29uOigpPT5CcixTdGl0Y2hlc0xvZ29JY29uOigpPT4kcixTdG9wSWNvbjooKT0+TnIsU3RvcHdhdGNoSWNvbjooKT0+RnIsU3RyZXRjaEhvcml6b250YWxseUljb246KCk9PldyLFN0cmV0Y2hWZXJ0aWNhbGx5SWNvbjooKT0+VXIsU3RyaWtldGhyb3VnaEljb246KCk9PnpyLFN1bkljb246KCk9PkdyLFN3aXRjaEljb246KCk9PktyLFN5bWJvbEljb246KCk9PnFyLFRhYmxlSWNvbjooKT0+WXIsVGFyZ2V0SWNvbjooKT0+SnIsVGV4dEFsaWduQ2VudGVySWNvbjooKT0+UXIsVGV4dEFsaWduSnVzdGlmeUljb246KCk9PmVvLFRleHRBbGlnbkxlZnRJY29uOigpPT50byxUZXh0QWxpZ25SaWdodEljb246KCk9Pm5vLFRleHRJY29uOigpPT5YcixUZXh0Tm9uZUljb246KCk9PnJvLFRoaWNrQXJyb3dEb3duSWNvbjooKT0+b28sVGhpY2tBcnJvd0xlZnRJY29uOigpPT5hbyxUaGlja0Fycm93UmlnaHRJY29uOigpPT5pbyxUaGlja0Fycm93VXBJY29uOigpPT5sbyxUaW1lckljb246KCk9PnNvLFRva2Vuc0ljb246KCk9PmNvLFRyYWNrTmV4dEljb246KCk9PnVvLFRyYWNrUHJldmlvdXNJY29uOigpPT5wbyxUcmFuc3BhcmVuY3lHcmlkSWNvbjooKT0+Zm8sVHJhc2hJY29uOigpPT5obyxUcmlhbmdsZURvd25JY29uOigpPT5nbyxUcmlhbmdsZUxlZnRJY29uOigpPT52byxUcmlhbmdsZVJpZ2h0SWNvbjooKT0+Q28sVHJpYW5nbGVVcEljb246KCk9Pm1vLFR3aXR0ZXJMb2dvSWNvbjooKT0+d28sVW5kZXJsaW5lSWNvbjooKT0+Ym8sVXBkYXRlSWNvbjooKT0+eW8sVXBsb2FkSWNvbjooKT0+eG8sVmFsdWVJY29uOigpPT5rbyxWYWx1ZU5vbmVJY29uOigpPT5TbyxWZXJjZWxMb2dvSWNvbjooKT0+T28sVmlkZW9JY29uOigpPT5NbyxWaWV3R3JpZEljb246KCk9PkxvLFZpZXdIb3Jpem9udGFsSWNvbjooKT0+X28sVmlld05vbmVJY29uOigpPT5QbyxWaWV3VmVydGljYWxJY29uOigpPT5FbyxXaWR0aEljb246KCk9PmpvLFpvb21Jbkljb246KCk9PlJvLFpvb21PdXRJY29uOigpPT5Jb30pO3ZhciByPW4oNjY4OSk7ZnVuY3Rpb24gbyhlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LGE9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb312YXIgYT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMCAxLjVDMCAxLjIyMzg2IDAuMjIzODU4IDEgMC41IDFIMi41QzIuNzc2MTQgMSAzIDEuMjIzODYgMyAxLjVDMyAxLjc3NjE0IDIuNzc2MTQgMiAyLjUgMkgwLjVDMC4yMjM4NTggMiAwIDEuNzc2MTQgMCAxLjVaTTQgMS41QzQgMS4yMjM4NiA0LjIyMzg2IDEgNC41IDFIMTQuNUMxNC43NzYxIDEgMTUgMS4yMjM4NiAxNSAxLjVDMTUgMS43NzYxNCAxNC43NzYxIDIgMTQuNSAySDQuNUM0LjIyMzg2IDIgNCAxLjc3NjE0IDQgMS41Wk00IDQuNUM0IDQuMjIzODYgNC4yMjM4NiA0IDQuNSA0SDExLjVDMTEuNzc2MSA0IDEyIDQuMjIzODYgMTIgNC41QzEyIDQuNzc2MTQgMTEuNzc2MSA1IDExLjUgNUg0LjVDNC4yMjM4NiA1IDQgNC43NzYxNCA0IDQuNVpNMCA3LjVDMCA3LjIyMzg2IDAuMjIzODU4IDcgMC41IDdIMi41QzIuNzc2MTQgNyAzIDcuMjIzODYgMyA3LjVDMyA3Ljc3NjE0IDIuNzc2MTQgOCAyLjUgOEgwLjVDMC4yMjM4NTggOCAwIDcuNzc2MTQgMCA3LjVaTTQgNy41QzQgNy4yMjM4NiA0LjIyMzg2IDcgNC41IDdIMTQuNUMxNC43NzYxIDcgMTUgNy4yMjM4NiAxNSA3LjVDMTUgNy43NzYxNCAxNC43NzYxIDggMTQuNSA4SDQuNUM0LjIyMzg2IDggNCA3Ljc3NjE0IDQgNy41Wk00IDEwLjVDNCAxMC4yMjM5IDQuMjIzODYgMTAgNC41IDEwSDExLjVDMTEuNzc2MSAxMCAxMiAxMC4yMjM5IDEyIDEwLjVDMTIgMTAuNzc2MSAxMS43NzYxIDExIDExLjUgMTFINC41QzQuMjIzODYgMTEgNCAxMC43NzYxIDQgMTAuNVpNMCAxMy41QzAgMTMuMjIzOSAwLjIyMzg1OCAxMyAwLjUgMTNIMi41QzIuNzc2MTQgMTMgMyAxMy4yMjM5IDMgMTMuNUMzIDEzLjc3NjEgMi43NzYxNCAxNCAyLjUgMTRIMC41QzAuMjIzODU4IDE0IDAgMTMuNzc2MSAwIDEzLjVaTTQgMTMuNUM0IDEzLjIyMzkgNC4yMjM4NiAxMyA0LjUgMTNIMTQuNUMxNC43NzYxIDEzIDE1IDEzLjIyMzkgMTUgMTMuNUMxNSAxMy43NzYxIDE0Ljc3NjEgMTQgMTQuNSAxNEg0LjVDNC4yMjM4NiAxNCA0IDEzLjc3NjEgNCAxMy41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0saT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTAuNSAxLjc1MDAzQzEwLjcxMDcgMS43NTAwMyAxMC44OTg4IDEuODgyMTcgMTAuOTcwMyAyLjA4MDQyTDEzLjk3MDMgMTAuNEMxNC4wNjQgMTAuNjU5OCAxMy45MjkzIDEwLjk0NjMgMTMuNjY5NiAxMS4wNEMxMy40MDk4IDExLjEzMzYgMTMuMTIzMyAxMC45OTkgMTMuMDI5NiAxMC43MzkyTDEyLjA0NzcgOC4wMTYwNkg4Ljk1MjI3TDcuOTcwMzEgMTAuNzM5MkM3Ljg3NjY0IDEwLjk5OSA3LjU5MDEyIDExLjEzMzYgNy4zMzAzNSAxMS4wNEM3LjA3MDU4IDEwLjk0NjMgNi45MzU5MyAxMC42NTk4IDcuMDI5NiAxMC40TDEwLjAyOTYgMi4wODA0MkMxMC4xMDExIDEuODgyMTcgMTAuMjg5MiAxLjc1MDAzIDEwLjUgMS43NTAwM1pNMTAuNSAzLjcyNDAyTDExLjc0MTEgNy4xNjYwNkg5LjI1ODc3TDEwLjUgMy43MjQwMlpNMi40OTk0OSAyLjA5OTk3QzIuNzIwNCAyLjA5OTk3IDIuODk5NDkgMi4yNzkwNiAyLjg5OTQ5IDIuNDk5OTdMMi44OTk0OSA5LjUzNDI4TDQuMjE2NjQgOC4yMTcxM0M0LjM3Mjg1IDguMDYwOTIgNC42MjYxMiA4LjA2MDkyIDQuNzgyMzMgOC4yMTcxM0M0LjkzODU0IDguMzczMzQgNC45Mzg1NCA4LjYyNjYgNC43ODIzMyA4Ljc4MjgxTDIuNzgyMzMgMTAuNzgyOEMyLjcwNzMyIDEwLjg1NzggMi42MDU1NyAxMC45IDIuNDk5NDkgMTAuOUMyLjM5MzQgMTAuOSAyLjI5MTY2IDEwLjg1NzggMi4yMTY2NCAxMC43ODI4TDAuMjE2NjQ1IDguNzgyODFDMC4wNjA0MzQ5IDguNjI2NiAwLjA2MDQzNDkgOC4zNzMzNCAwLjIxNjY0NSA4LjIxNzEzQzAuMzcyODU0IDguMDYwOTIgMC42MjYxMiA4LjA2MDkyIDAuNzgyMzMgOC4yMTcxM0wyLjA5OTQ5IDkuNTM0MjhMMi4wOTk0OSAyLjQ5OTk3QzIuMDk5NDkgMi4yNzkwNiAyLjI3ODU3IDIuMDk5OTcgMi40OTk0OSAyLjA5OTk3Wk0wLjA5OTk2OTUgMTMuNTAwMUMwLjA5OTk2OTUgMTMuMjc5MSAwLjI3OTA1NiAxMy4xMDAxIDAuNDk5OTY5IDEzLjEwMDFIMTQuNUMxNC43MjA5IDEzLjEwMDEgMTQuOSAxMy4yNzkxIDE0LjkgMTMuNTAwMUMxNC45IDEzLjcyMSAxNC43MjA5IDEzLjkwMDEgMTQuNSAxMy45MDAxSDAuNDk5OTY5QzAuMjc5MDU2IDEzLjkwMDEgMC4wOTk5Njk1IDEzLjcyMSAwLjA5OTk2OTUgMTMuNTAwMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTkgM0M5IDIuNDQ3NzIgOC41NTIyOSAyIDggMkg3QzYuNDQ3NzIgMiA2IDIuNDQ3NzIgNiAzTDYgMTRIMS41QzEuMjIzODYgMTQgMSAxNC4yMjM5IDEgMTQuNUMxIDE0Ljc3NjEgMS4yMjM4NiAxNSAxLjUgMTVMNiAxNUg5SDEzLjVDMTMuNzc2MSAxNSAxNCAxNC43NzYxIDE0IDE0LjVDMTQgMTQuMjIzOSAxMy43NzYxIDE0IDEzLjUgMTRIOVYzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNi45OTk4OCAxQzYuNDQ3NTkgMSA1Ljk5OTg4IDEuNDQ3NzIgNS45OTk4OCAyVjdIMS40OTk4OEMxLjIyMzc0IDcgMC45OTk4NzggNy4yMjM4NiAwLjk5OTg3OCA3LjVDMC45OTk4NzggNy43NzYxNCAxLjIyMzc0IDggMS40OTk4OCA4SDUuOTk5ODhWMTNDNS45OTk4OCAxMy41NTIzIDYuNDQ3NTkgMTQgNi45OTk4OCAxNEg3Ljk5OTg4QzguNTUyMTYgMTQgOC45OTk4OCAxMy41NTIzIDguOTk5ODggMTNWOEgxMy40OTk5QzEzLjc3NiA4IDEzLjk5OTkgNy43NzYxNCAxMy45OTk5IDcuNUMxMy45OTk5IDcuMjIzODYgMTMuNzc2IDcgMTMuNDk5OSA3SDguOTk5ODhWMkM4Ljk5OTg4IDEuNDQ3NzIgOC41NTIxNiAxIDcuOTk5ODggMUw2Ljk5OTg4IDFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxjPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjk5OTg4IDZDMS40NDc1OSA2IDAuOTk5ODc3IDYuNDQ3NzIgMC45OTk4NzcgN0wwLjk5OTg3NyA4QzAuOTk5ODc3IDguNTUyMjggMS40NDc1OSA5IDEuOTk5ODggOUw2Ljk5OTg4IDlMNi45OTk4OCAxMy41QzYuOTk5ODggMTMuNzc2MSA3LjIyMzc0IDE0IDcuNDk5ODggMTRDNy43NzYwMiAxNCA3Ljk5OTg4IDEzLjc3NjEgNy45OTk4OCAxMy41TDcuOTk5ODggOUwxMi45OTk5IDlDMTMuNTUyMiA5IDEzLjk5OTkgOC41NTIyOCAxMy45OTk5IDhMMTMuOTk5OSA3QzEzLjk5OTkgNi40NDc3MiAxMy41NTIyIDYgMTIuOTk5OSA2TDcuOTk5ODggNkw3Ljk5OTg4IDEuNUM3Ljk5OTg4IDEuMjIzODYgNy43NzYwMiAxIDcuNDk5ODggMUM3LjIyMzczIDEgNi45OTk4OCAxLjIyMzg2IDYuOTk5ODggMS41TDYuOTk5ODggNkwxLjk5OTg4IDZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx1PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wLjQ5OTk5NSAwLjk5OTk5NUMwLjIyMzg1NSAwLjk5OTk5NSAtNS41ODQ1OGUtMDcgMS4yMjM4NSAtNS40NjM4OGUtMDcgMS40OTk5OUwtMi4xODU1NGUtMDggMTMuNDk5OUMtOS43ODQ5MmUtMDkgMTMuNzc2IDAuMjIzODU1IDEzLjk5OTkgMC40OTk5OTUgMTMuOTk5OUMwLjc3NjEzNiAxMy45OTk5IDAuOTk5OTkxIDEzLjc3NiAwLjk5OTk5MSAxMy40OTk5TDAuOTk5OTkxIDguOTk5OTNMMTIgOC45OTk5M0MxMi41NTIzIDguOTk5OTMgMTMgOC41NTIyMiAxMyA3Ljk5OTkzTDEzIDYuOTk5OTRDMTMgNi40NDc2NiAxMi41NTIzIDUuOTk5OTUgMTIgNS45OTk5NUwwLjk5OTk5MSA1Ljk5OTk1TDAuOTk5OTkxIDEuNDk5OTlDMC45OTk5OTEgMS4yMjM4NSAwLjc3NjEzNSAwLjk5OTk5NSAwLjQ5OTk5NSAwLjk5OTk5NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTE0LjQ5OTkgMUMxNC4yMjM3IDEgMTMuOTk5OSAxLjIyMzg2IDEzLjk5OTkgMS41TDEzLjk5OTkgNkwyLjk5OTg4IDZDMi40NDc1OSA2IDEuOTk5ODggNi40NDc3MiAxLjk5OTg4IDdMMS45OTk4OCA4QzEuOTk5ODggOC41NTIyOCAyLjQ0NzU5IDkgMi45OTk4OCA5TDEzLjk5OTkgOUwxMy45OTk5IDEzLjVDMTMuOTk5OSAxMy43NzYxIDE0LjIyMzcgMTQgMTQuNDk5OSAxNEMxNC43NzYgMTQgMTQuOTk5OSAxMy43NzYxIDE0Ljk5OTkgMTMuNUwxNC45OTk5IDlMMTQuOTk5OSA2TDE0Ljk5OTkgMS41QzE0Ljk5OTkgMS4yMjM4NiAxNC43NzYgMSAxNC40OTk5IDFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxwPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjUgMEMxLjIyMzg2IDAgMSAwLjIyMzg1OCAxIDAuNUMxIDAuNzc2MTQyIDEuMjIzODYgMSAxLjUgMUg2VjEyQzYgMTIuNTUyMyA2LjQ0NzcyIDEzIDcgMTNIOEM4LjU1MjI4IDEzIDkgMTIuNTUyMyA5IDEyVjFIMTMuNUMxMy43NzYxIDEgMTQgMC43NzYxNDIgMTQgMC41QzE0IDAuMjIzODU4IDEzLjc3NjEgMCAxMy41IDBIOUg2SDEuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGY9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNSAwLjc1TDkuNzUgM0g1LjI1TDcuNSAwLjc1Wk03LjUgMTQuMjVMOS43NSAxMkg1LjI1TDcuNSAxNC4yNVpNMyA1LjI1TDAuNzUgNy41TDMgOS43NVY1LjI1Wk0xNC4yNSA3LjVMMTIgNS4yNVY5Ljc1TDE0LjI1IDcuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGg9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTguODkxNCAyLjE5MzdDOS4xMTU4IDIuMzU0NjQgOS4xNjcyNSAyLjY2NzAxIDkuMDA2MzEgMi44OTE0MUwyLjQ3Mzg4IDEySDEzLjVDMTMuNzc2MSAxMiAxNCAxMi4yMjM5IDE0IDEyLjVDMTQgMTIuNzc2MiAxMy43NzYxIDEzIDEzLjUgMTNIMS41QzEuMzEyNTQgMTMgMS4xNDA4MiAxMi44OTUyIDEuMDU1MiAxMi43Mjg0QzAuOTY5NTc4IDEyLjU2MTYgMC45ODQ0MzggMTIuMzYxIDEuMDkzNjkgMTIuMjA4Nkw4LjE5MzY5IDIuMzA4NjJDOC4zNTQ2MiAyLjA4NDIyIDguNjY3IDIuMDMyNzcgOC44OTE0IDIuMTkzN1pNMTEuMSA2LjUwMDAxQzExLjEgNi4yMjM4NyAxMS4zMjM4IDYuMDAwMDEgMTEuNiA2LjAwMDAxQzExLjg3NjEgNi4wMDAwMSAxMi4xIDYuMjIzODcgMTIuMSA2LjUwMDAxQzEyLjEgNi43NzYxNSAxMS44NzYxIDcuMDAwMDEgMTEuNiA3LjAwMDAxQzExLjMyMzggNy4wMDAwMSAxMS4xIDYuNzc2MTUgMTEuMSA2LjUwMDAxWk0xMC40IDQuMDAwMDFDMTAuMTIzOSA0LjAwMDAxIDkuOTAwMDMgNC4yMjM4NyA5LjkwMDAzIDQuNTAwMDFDOS45MDAwMyA0Ljc3NjE1IDEwLjEyMzkgNS4wMDAwMSAxMC40IDUuMDAwMDFDMTAuNjc2MiA1LjAwMDAxIDEwLjkgNC43NzYxNSAxMC45IDQuNTAwMDFDMTAuOSA0LjIyMzg3IDEwLjY3NjIgNC4wMDAwMSAxMC40IDQuMDAwMDFaTTEyLjEgOC41MDAwMUMxMi4xIDguMjIzODcgMTIuMzIzOCA4LjAwMDAxIDEyLjYgOC4wMDAwMUMxMi44NzYxIDguMDAwMDEgMTMuMSA4LjIyMzg3IDEzLjEgOC41MDAwMUMxMy4xIDguNzc2MTUgMTIuODc2MSA5LjAwMDAxIDEyLjYgOS4wMDAwMUMxMi4zMjM4IDkuMDAwMDEgMTIuMSA4Ljc3NjE1IDEyLjEgOC41MDAwMVpNMTMuNCAxMEMxMy4xMjM5IDEwIDEyLjkgMTAuMjIzOSAxMi45IDEwLjVDMTIuOSAxMC43NzYxIDEzLjEyMzkgMTEgMTMuNCAxMUMxMy42NzYyIDExIDEzLjkgMTAuNzc2MSAxMy45IDEwLjVDMTMuOSAxMC4yMjM5IDEzLjY3NjIgMTAgMTMuNCAxMFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGc9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuMzA5MDIgMUMyLjkzMDI1IDEgMi41ODM5OCAxLjIxNCAyLjQxNDU5IDEuNTUyNzlMMS4wNTI3OSA0LjI3NjM5QzEuMDE4MDcgNC4zNDU4MiAxIDQuNDIyMzggMSA0LjVWMTNDMSAxMy41NTIzIDEuNDQ3NzIgMTQgMiAxNEgxM0MxMy41NTIzIDE0IDE0IDEzLjU1MjMgMTQgMTNWNC41QzE0IDQuNDIyMzggMTMuOTgxOSA0LjM0NTgyIDEzLjk0NzIgNC4yNzYzOUwxMi41ODU0IDEuNTUyODFDMTIuNDE2IDEuMjE0MDMgMTIuMDY5OCAxLjAwMDAzIDExLjY5MSAxLjAwMDAzTDcuNSAxLjAwMDAxTDMuMzA5MDIgMVpNMy4zMDkwMiAyTDcgMi4wMDAwMVY0SDIuMzA5MDJMMy4zMDkwMiAyWk04IDRWMi4wMDAwMkwxMS42OTEgMi4wMDAwM0wxMi42OTEgNEg4Wk03LjUgNUgxM1YxM0gyVjVINy41Wk01LjUgN0M1LjIyMzg2IDcgNSA3LjIyMzg2IDUgNy41QzUgNy43NzYxNCA1LjIyMzg2IDggNS41IDhIOS41QzkuNzc2MTQgOCAxMCA3Ljc3NjE0IDEwIDcuNUMxMCA3LjIyMzg2IDkuNzc2MTQgNyA5LjUgN0g1LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx2PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMS4zNTM2IDMuNjQ2NDRDMTEuNTQ4OCAzLjg0MTcgMTEuNTQ4OCA0LjE1ODI4IDExLjM1MzYgNC4zNTM1NEw0LjcwNzExIDExTDkgMTFDOS4yNzYxNCAxMSA5LjUgMTEuMjIzOSA5LjUgMTEuNUM5LjUgMTEuNzc2MSA5LjI3NjE0IDEyIDkgMTJMMy41IDEyQzMuMzY3MzkgMTIgMy4yNDAyMSAxMS45NDczIDMuMTQ2NDUgMTEuODUzNkMzLjA1MjY4IDExLjc1OTggMyAxMS42MzI2IDMgMTEuNUwzIDUuOTk5OTlDMyA1LjcyMzg1IDMuMjIzODYgNS40OTk5OSAzLjUgNS40OTk5OUMzLjc3NjE0IDUuNDk5OTkgNCA1LjcyMzg1IDQgNS45OTk5OVYxMC4yOTI5TDEwLjY0NjQgMy42NDY0M0MxMC44NDE3IDMuNDUxMTcgMTEuMTU4MyAzLjQ1MTE3IDExLjM1MzYgMy42NDY0NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNjQ2NDUgMy42NDY0NEMzLjQ1MTE4IDMuODQxNyAzLjQ1MTE4IDQuMTU4MjggMy42NDY0NSA0LjM1MzU0TDEwLjI5MjkgMTFMNiAxMUM1LjcyMzg2IDExIDUuNSAxMS4yMjM5IDUuNSAxMS41QzUuNSAxMS43NzYxIDUuNzIzODYgMTIgNiAxMkwxMS41IDEyQzExLjYzMjYgMTIgMTEuNzU5OCAxMS45NDczIDExLjg1MzYgMTEuODUzNkMxMS45NDczIDExLjc1OTggMTIgMTEuNjMyNiAxMiAxMS41TDEyIDUuOTk5OTlDMTIgNS43MjM4NSAxMS43NzYxIDUuNDk5OTkgMTEuNSA1LjQ5OTk5QzExLjIyMzkgNS40OTk5OSAxMSA1LjcyMzg1IDExIDUuOTk5OTlWMTAuMjkyOUw0LjM1MzU1IDMuNjQ2NDNDNC4xNTgyOSAzLjQ1MTE3IDMuODQxNzEgMy40NTExNyAzLjY0NjQ1IDMuNjQ2NDRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxtPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUgMkM3Ljc3NjE0IDIgOCAyLjIyMzg2IDggMi41TDggMTEuMjkyOUwxMS4xNDY0IDguMTQ2NDVDMTEuMzQxNyA3Ljk1MTE4IDExLjY1ODMgNy45NTExOCAxMS44NTM2IDguMTQ2NDVDMTIuMDQ4OCA4LjM0MTcxIDEyLjA0ODggOC42NTgyOSAxMS44NTM2IDguODUzNTVMNy44NTM1NSAxMi44NTM2QzcuNzU5NzkgMTIuOTQ3MyA3LjYzMjYxIDEzIDcuNSAxM0M3LjM2NzM5IDEzIDcuMjQwMjEgMTIuOTQ3MyA3LjE0NjQ1IDEyLjg1MzZMMy4xNDY0NSA4Ljg1MzU1QzIuOTUxMTggOC42NTgyOSAyLjk1MTE4IDguMzQxNzEgMy4xNDY0NSA4LjE0NjQ1QzMuMzQxNzEgNy45NTExOCAzLjY1ODI5IDcuOTUxMTggMy44NTM1NSA4LjE0NjQ1TDcgMTEuMjkyOUw3IDIuNUM3IDIuMjIzODYgNy4yMjM4NiAyIDcuNSAyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNi44NTM1NSAzLjE0NjQ1QzcuMDQ4ODIgMy4zNDE3MSA3LjA0ODgyIDMuNjU4MjkgNi44NTM1NSAzLjg1MzU1TDMuNzA3MTEgN0gxMi41QzEyLjc3NjEgNyAxMyA3LjIyMzg2IDEzIDcuNUMxMyA3Ljc3NjE0IDEyLjc3NjEgOCAxMi41IDhIMy43MDcxMUw2Ljg1MzU1IDExLjE0NjRDNy4wNDg4MiAxMS4zNDE3IDcuMDQ4ODIgMTEuNjU4MyA2Ljg1MzU1IDExLjg1MzZDNi42NTgyOSAxMi4wNDg4IDYuMzQxNzEgMTIuMDQ4OCA2LjE0NjQ1IDExLjg1MzZMMi4xNDY0NSA3Ljg1MzU1QzEuOTUxMTggNy42NTgyOSAxLjk1MTE4IDcuMzQxNzEgMi4xNDY0NSA3LjE0NjQ1TDYuMTQ2NDUgMy4xNDY0NUM2LjM0MTcxIDIuOTUxMTggNi42NTgyOSAyLjk1MTE4IDYuODUzNTUgMy4xNDY0NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTguMTQ2NDUgMy4xNDY0NUM4LjM0MTcxIDIuOTUxMTggOC42NTgyOSAyLjk1MTE4IDguODUzNTUgMy4xNDY0NUwxMi44NTM2IDcuMTQ2NDVDMTMuMDQ4OCA3LjM0MTcxIDEzLjA0ODggNy42NTgyOSAxMi44NTM2IDcuODUzNTVMOC44NTM1NSAxMS44NTM2QzguNjU4MjkgMTIuMDQ4OCA4LjM0MTcxIDEyLjA0ODggOC4xNDY0NSAxMS44NTM2QzcuOTUxMTggMTEuNjU4MyA3Ljk1MTE4IDExLjM0MTcgOC4xNDY0NSAxMS4xNDY0TDExLjI5MjkgOEgyLjVDMi4yMjM4NiA4IDIgNy43NzYxNCAyIDcuNUMyIDcuMjIzODYgMi4yMjM4NiA3IDIuNSA3SDExLjI5MjlMOC4xNDY0NSAzLjg1MzU1QzcuOTUxMTggMy42NTgyOSA3Ljk1MTE4IDMuMzQxNzEgOC4xNDY0NSAzLjE0NjQ1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0seT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTEuMzUzNiAxMS4zNTM2QzExLjU0ODggMTEuMTU4MyAxMS41NDg4IDEwLjg0MTcgMTEuMzUzNiAxMC42NDY1TDQuNzA3MTEgNEw5IDRDOS4yNzYxNCA0IDkuNSAzLjc3NjE0IDkuNSAzLjVDOS41IDMuMjIzODYgOS4yNzYxNCAzIDkgM0wzLjUgM0MzLjM2NzM5IDMgMy4yNDAyMSAzLjA1MjY4IDMuMTQ2NDUgMy4xNDY0NUMzLjA1MjY4IDMuMjQwMjIgMyAzLjM2NzM5IDMgMy41TDMgOS4wMDAwMUMzIDkuMjc2MTUgMy4yMjM4NiA5LjUwMDAxIDMuNSA5LjUwMDAxQzMuNzc2MTQgOS41MDAwMSA0IDkuMjc2MTUgNCA5LjAwMDAxVjQuNzA3MTFMMTAuNjQ2NCAxMS4zNTM2QzEwLjg0MTcgMTEuNTQ4OCAxMS4xNTgzIDExLjU0ODggMTEuMzUzNiAxMS4zNTM2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0seD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy42NDY0NSAxMS4zNTM2QzMuNDUxMTggMTEuMTU4MyAzLjQ1MTE4IDEwLjg0MTcgMy42NDY0NSAxMC42NDY1TDEwLjI5MjkgNEw2IDRDNS43MjM4NiA0IDUuNSAzLjc3NjE0IDUuNSAzLjVDNS41IDMuMjIzODYgNS43MjM4NiAzIDYgM0wxMS41IDNDMTEuNjMyNiAzIDExLjc1OTggMy4wNTI2OCAxMS44NTM2IDMuMTQ2NDVDMTEuOTQ3MyAzLjI0MDIyIDEyIDMuMzY3MzkgMTIgMy41TDEyIDkuMDAwMDFDMTIgOS4yNzYxNSAxMS43NzYxIDkuNTAwMDEgMTEuNSA5LjUwMDAxQzExLjIyMzkgOS41MDAwMSAxMSA5LjI3NjE1IDExIDkuMDAwMDFWNC43MDcxMUw0LjM1MzU1IDExLjM1MzZDNC4xNTgyOSAxMS41NDg4IDMuODQxNzEgMTEuNTQ4OCAzLjY0NjQ1IDExLjM1MzZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxrPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjE0NjQ1IDIuMTQ2NDVDNy4zNDE3MSAxLjk1MTE4IDcuNjU4MjkgMS45NTExOCA3Ljg1MzU1IDIuMTQ2NDVMMTEuODUzNiA2LjE0NjQ1QzEyLjA0ODggNi4zNDE3MSAxMi4wNDg4IDYuNjU4MjkgMTEuODUzNiA2Ljg1MzU1QzExLjY1ODMgNy4wNDg4MiAxMS4zNDE3IDcuMDQ4ODIgMTEuMTQ2NCA2Ljg1MzU1TDggMy43MDcxMUw4IDEyLjVDOCAxMi43NzYxIDcuNzc2MTQgMTMgNy41IDEzQzcuMjIzODYgMTMgNyAxMi43NzYxIDcgMTIuNUw3IDMuNzA3MTFMMy44NTM1NSA2Ljg1MzU1QzMuNjU4MjkgNy4wNDg4MiAzLjM0MTcxIDcuMDQ4ODIgMy4xNDY0NSA2Ljg1MzU1QzIuOTUxMTggNi42NTgyOSAyLjk1MTE4IDYuMzQxNzEgMy4xNDY0NSA2LjE0NjQ1TDcuMTQ2NDUgMi4xNDY0NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuNSAySDEyLjVDMTIuNzc2MSAyIDEzIDIuMjIzODYgMTMgMi41VjEyLjVDMTMgMTIuNzc2MSAxMi43NzYxIDEzIDEyLjUgMTNIMi41QzIuMjIzODYgMTMgMiAxMi43NzYxIDIgMTIuNVYyLjVDMiAyLjIyMzg2IDIuMjIzODYgMiAyLjUgMlpNMSAyLjVDMSAxLjY3MTU3IDEuNjcxNTcgMSAyLjUgMUgxMi41QzEzLjMyODQgMSAxNCAxLjY3MTU3IDE0IDIuNVYxMi41QzE0IDEzLjMyODQgMTMuMzI4NCAxNCAxMi41IDE0SDIuNUMxLjY3MTU3IDE0IDEgMTMuMzI4NCAxIDEyLjVWMi41Wk03LjUgNEM3Ljc3NjE0IDQgOCAzLjc3NjE0IDggMy41QzggMy4yMjM4NiA3Ljc3NjE0IDMgNy41IDNDNy4yMjM4NiAzIDcgMy4yMjM4NiA3IDMuNUM3IDMuNzc2MTQgNy4yMjM4NiA0IDcuNSA0Wk04IDUuNUM4IDUuNzc2MTQgNy43NzYxNCA2IDcuNSA2QzcuMjIzODYgNiA3IDUuNzc2MTQgNyA1LjVDNyA1LjIyMzg2IDcuMjIzODYgNSA3LjUgNUM3Ljc3NjE0IDUgOCA1LjIyMzg2IDggNS41Wk03LjUgOEM3Ljc3NjE0IDggOCA3Ljc3NjE0IDggNy41QzggNy4yMjM4NiA3Ljc3NjE0IDcgNy41IDdDNy4yMjM4NiA3IDcgNy4yMjM4NiA3IDcuNUM3IDcuNzc2MTQgNy4yMjM4NiA4IDcuNSA4Wk0xMCA3LjVDMTAgNy43NzYxNCA5Ljc3NjE0IDggOS41IDhDOS4yMjM4NiA4IDkgNy43NzYxNCA5IDcuNUM5IDcuMjIzODYgOS4yMjM4NiA3IDkuNSA3QzkuNzc2MTQgNyAxMCA3LjIyMzg2IDEwIDcuNVpNMTEuNSA4QzExLjc3NjEgOCAxMiA3Ljc3NjE0IDEyIDcuNUMxMiA3LjIyMzg2IDExLjc3NjEgNyAxMS41IDdDMTEuMjIzOSA3IDExIDcuMjIzODYgMTEgNy41QzExIDcuNzc2MTQgMTEuMjIzOSA4IDExLjUgOFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuODc3MDE0IDcuNDk5ODhDMC44NzcwMTQgMy44NDIxOSAzLjg0MjE2IDAuODc3MDQ1IDcuNDk5ODUgMC44NzcwNDVDMTEuMTU3NSAwLjg3NzA0NSAxNC4xMjI3IDMuODQyMTkgMTQuMTIyNyA3LjQ5OTg4QzE0LjEyMjcgMTEuMTU3NSAxMS4xNTc1IDE0LjEyMjcgNy40OTk4NSAxNC4xMjI3QzMuODQyMTYgMTQuMTIyNyAwLjg3NzAxNCAxMS4xNTc1IDAuODc3MDE0IDcuNDk5ODhaTTcuNDk5ODUgMS44MjcwNEM0LjM2NjgzIDEuODI3MDQgMS44MjcwMSA0LjM2Njg2IDEuODI3MDEgNy40OTk4OEMxLjgyNzAxIDguOTcxOTYgMi4zODc3NCAxMC4zMTMxIDMuMzA3MjcgMTEuMzIxM0M0LjE5MDc0IDkuOTQxMTkgNS43MzgxOCA5LjAyNDk5IDcuNTAwMjMgOS4wMjQ5OUM5LjI2MjA2IDkuMDI0OTkgMTAuODA5MyA5Ljk0MDk3IDExLjY5MjkgMTEuMzIwOEMxMi42MTIxIDEwLjMxMjcgMTMuMTcyNyA4Ljk3MTcyIDEzLjE3MjcgNy40OTk4OEMxMy4xNzI3IDQuMzY2ODYgMTAuNjMyOCAxLjgyNzA0IDcuNDk5ODUgMS44MjcwNFpNMTAuOTgxOCAxMS45Nzg3QzEwLjI4MzkgMTAuNzc5NSA4Ljk4NTcgOS45NzQ5OSA3LjUwMDIzIDkuOTc0OTlDNi4wMTQ1OCA5Ljk3NDk5IDQuNzE2MjQgMTAuNzc5NyA0LjAxODQ1IDExLjk3OTFDNC45Nzk1MiAxMi43MjcyIDYuMTg3NjUgMTMuMTcyNyA3LjQ5OTg1IDEzLjE3MjdDOC44MTIyNyAxMy4xNzI3IDEwLjAyMDYgMTIuNzI3IDEwLjk4MTggMTEuOTc4N1pNNS4xNDk5OSA2LjUwNDg3QzUuMTQ5OTkgNS4yMDcgNi4yMDIxMiA0LjE1NDg3IDcuNDk5OTkgNC4xNTQ4N0M4Ljc5Nzg2IDQuMTU0ODcgOS44NDk5OSA1LjIwNyA5Ljg0OTk5IDYuNTA0ODdDOS44NDk5OSA3LjgwMjc0IDguNzk3ODYgOC44NTQ4NyA3LjQ5OTk5IDguODU0ODdDNi4yMDIxMiA4Ljg1NDg3IDUuMTQ5OTkgNy44MDI3NCA1LjE0OTk5IDYuNTA0ODdaTTcuNDk5OTkgNS4xMDQ4N0M2LjcyNjc5IDUuMTA0ODcgNi4wOTk5OSA1LjczMTY3IDYuMDk5OTkgNi41MDQ4N0M2LjA5OTk5IDcuMjc4MDcgNi43MjY3OSA3LjkwNDg3IDcuNDk5OTkgNy45MDQ4N0M4LjI3MzE5IDcuOTA0ODcgOC44OTk5OSA3LjI3ODA3IDguODk5OTkgNi41MDQ4N0M4Ljg5OTk5IDUuNzMxNjcgOC4yNzMxOSA1LjEwNDg3IDcuNDk5OTkgNS4xMDQ4N1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE09ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUgMUM1IDAuNDQ3NzE1IDUuNDQ3NzIgMCA2IDBIOUM5LjU1MjI4IDAgMTAgMC40NDc3MTUgMTAgMVYySDE0QzE0LjU1MjMgMiAxNSAyLjQ0NzcyIDE1IDNWNkMxNSA2Ljg4ODggMTQuNjEzMSA3LjY4NzM0IDE0IDguMjM2MDhWMTEuNUMxNCAxMi4zMjg0IDEzLjMyODQgMTMgMTIuNSAxM0gyLjVDMS42NzE1NyAxMyAxIDEyLjMyODQgMSAxMS41VjguMjM1OUMwLjM4Njk3IDcuNjg3MjEgMCA2Ljg4ODgzIDAgNlYzQzAgMi40NDc3MiAwLjQ0NzcxNiAyIDEgMkg1VjFaTTkgMVYySDZWMUg5Wk0xIDNINUg1LjVIOS41SDEwSDE0VjZDMTQgNi42NTQgMTMuNjg2NiA3LjIzNDY3IDEzLjE5OTcgNy42MDA0QzEyLjg2NTUgNy44NTE0NCAxMi40NTA4IDggMTIgOEg4VjcuNUM4IDcuMjIzODYgNy43NzYxNCA3IDcuNSA3QzcuMjIzODYgNyA3IDcuMjIzODYgNyA3LjVWOEgzQzIuNTQ5MyA4IDIuMTM0NiA3Ljg1MTMzIDEuODAwMjkgNy42MDAyMkMxLjMxMzM1IDcuMjM0NDYgMSA2LjY1Mzk2IDEgNlYzWk03IDlIM0MyLjY0OTYxIDkgMi4zMTI5MiA4LjkzOTcyIDIgOC44MjkwNVYxMS41QzIgMTEuNzc2MSAyLjIyMzg2IDEyIDIuNSAxMkgxMi41QzEyLjc3NjEgMTIgMTMgMTEuNzc2MSAxMyAxMS41VjguODI5MTVDMTIuNjg3MSA4LjkzOTc4IDEyLjM1MDQgOSAxMiA5SDhWOS41QzggOS43NzYxNCA3Ljc3NjE0IDEwIDcuNSAxMEM3LjIyMzg2IDEwIDcgOS43NzYxNCA3IDkuNVY5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy41IDZIMTEuNUMxMi4zMjg0IDYgMTMgNi42NzE1NyAxMyA3LjVDMTMgOC4zMjg0MyAxMi4zMjg0IDkgMTEuNSA5SDMuNUMyLjY3MTU3IDkgMiA4LjMyODQzIDIgNy41QzIgNi42NzE1NyAyLjY3MTU3IDYgMy41IDZaTTEgNy41QzEgNi4xMTkyOSAyLjExOTI5IDUgMy41IDVIMTEuNUMxMi44ODA3IDUgMTQgNi4xMTkyOSAxNCA3LjVDMTQgOC44ODA3MSAxMi44ODA3IDEwIDExLjUgMTBIMy41QzIuMTE5MjkgMTAgMSA4Ljg4MDcxIDEgNy41Wk00LjUgN0M0LjIyMzg2IDcgNCA3LjIyMzg2IDQgNy41QzQgNy43NzYxNCA0LjIyMzg2IDggNC41IDhIMTAuNUMxMC43NzYxIDggMTEgNy43NzYxNCAxMSA3LjVDMTEgNy4yMjM4NiAxMC43NzYxIDcgMTAuNSA3SDQuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LF89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTExLjUgMUMxMS43NzYxIDEgMTIgMS4yMjM4NiAxMiAxLjVWMTMuNUMxMiAxMy43NzYxIDExLjc3NjEgMTQgMTEuNSAxNEMxMS4yMjM5IDE0IDExIDEzLjc3NjEgMTEgMTMuNVYxLjVDMTEgMS4yMjM4NiAxMS4yMjM5IDEgMTEuNSAxWk05LjUgM0M5Ljc3NjE0IDMgMTAgMy4yMjM4NiAxMCAzLjVWMTMuNUMxMCAxMy43NzYxIDkuNzc2MTQgMTQgOS41IDE0QzkuMjIzODYgMTQgOSAxMy43NzYxIDkgMTMuNVYzLjVDOSAzLjIyMzg2IDkuMjIzODYgMyA5LjUgM1pNMTMuNSAzQzEzLjc3NjEgMyAxNCAzLjIyMzg2IDE0IDMuNVYxMy41QzE0IDEzLjc3NjEgMTMuNzc2MSAxNCAxMy41IDE0QzEzLjIyMzkgMTQgMTMgMTMuNzc2MSAxMyAxMy41VjMuNUMxMyAzLjIyMzg2IDEzLjIyMzkgMyAxMy41IDNaTTUuNSA0QzUuNzc2MTQgNCA2IDQuMjIzODYgNiA0LjVWMTMuNUM2IDEzLjc3NjEgNS43NzYxNCAxNCA1LjUgMTRDNS4yMjM4NiAxNCA1IDEzLjc3NjEgNSAxMy41VjQuNUM1IDQuMjIzODYgNS4yMjM4NiA0IDUuNSA0Wk0xLjUgNUMxLjc3NjE0IDUgMiA1LjIyMzg2IDIgNS41VjEzLjVDMiAxMy43NzYxIDEuNzc2MTQgMTQgMS41IDE0QzEuMjIzODYgMTQgMSAxMy43NzYxIDEgMTMuNVY1LjVDMSA1LjIyMzg2IDEuMjIzODYgNSAxLjUgNVpNNy41IDVDNy43NzYxNCA1IDggNS4yMjM4NiA4IDUuNVYxMy41QzggMTMuNzc2MSA3Ljc3NjE0IDE0IDcuNSAxNEM3LjIyMzg2IDE0IDcgMTMuNzc2MSA3IDEzLjVWNS41QzcgNS4yMjM4NiA3LjIyMzg2IDUgNy41IDVaTTMuNSA3QzMuNzc2MTQgNyA0IDcuMjIzODYgNCA3LjVWMTMuNUM0IDEzLjc3NjEgMy43NzYxNCAxNCAzLjUgMTRDMy4yMjM4NiAxNCAzIDEzLjc3NjEgMyAxMy41VjcuNUMzIDcuMjIzODYgMy4yMjM4NiA3IDMuNSA3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC42MDEyNCAxLjI1MDg2QzguNjAxMjQgMS43NTQ1OSA4LjI2Mjc4IDIuMTc5MjcgNy44MDA4NyAyLjMwOTg5QzEwLjE0NTkgMi40NjQ3IDEyIDQuNDE1ODIgMTIgNi43OTk5OVYxMC4yNUMxMiAxMS4wNTYzIDEyLjAzMjkgMTEuNzA3NCAxMi43MjM2IDEyLjA1MjhDMTIuOTMxIDEyLjE1NjUgMTMuMDM5OSAxMi4zODkyIDEyLjk4NjYgMTIuNjE0OUMxMi45MzMzIDEyLjg0MDYgMTIuNzMxOSAxMyAxMi41IDEzSDguMTYxNDRDOC4zNjkwNCAxMy4xODMyIDguNDk5OTcgMTMuNDUxMyA4LjQ5OTk3IDEzLjc1QzguNDk5OTcgMTQuMzAyMyA4LjA1MjI2IDE0Ljc1IDcuNDk5OTcgMTQuNzVDNi45NDc2OSAxNC43NSA2LjQ5OTk3IDE0LjMwMjMgNi40OTk5NyAxMy43NUM2LjQ5OTk3IDEzLjQ1MTMgNi42MzA5MSAxMy4xODMyIDYuODM4NTEgMTNIMi40OTk5OUMyLjI2ODEgMTMgMi4wNjY2NCAxMi44NDA2IDIuMDEzMzYgMTIuNjE0OUMxLjk2MDA5IDEyLjM4OTIgMi4wNjg5NyAxMi4xNTY1IDIuMjc2MzggMTIuMDUyOEMyLjk2NzA4IDExLjcwNzQgMi45OTk5OSAxMS4wNTYzIDIuOTk5OTkgMTAuMjVWNi43OTk5OUMyLjk5OTk5IDQuNDE1MzcgNC44NTQ4MSAyLjQ2Mzk2IDcuMjAwNDIgMi4zMDk4QzYuNzM4NjcgMi4xNzkwOCA2LjQwMDM2IDEuNzU0NDggNi40MDAzNiAxLjI1MDg2QzYuNDAwMzYgMC42NDMxMDQgNi44OTMwNCAwLjE1MDQyMSA3LjUwMDggMC4xNTA0MjFDOC4xMDg1NSAwLjE1MDQyMSA4LjYwMTI0IDAuNjQzMTA0IDguNjAxMjQgMS4yNTA4NlpNNy40OTk5OSAzLjI5OTk5QzUuNTY2OTkgMy4yOTk5OSAzLjk5OTk5IDQuODY2OTkgMy45OTk5OSA2Ljc5OTk5VjEwLjI1TDQuMDAwMDIgMTAuMzAwOUM0LjAwMDUgMTAuNzQ2MyA0LjAwMTIxIDExLjQwODQgMy42OTkyOSAxMkgxMS4zMDA3QzEwLjk5ODggMTEuNDA4NCAxMC45OTk1IDEwLjc0NjMgMTEgMTAuMzAwOUwxMSAxMC4yNVY2Ljc5OTk5QzExIDQuODY2OTkgOS40MzI5OSAzLjI5OTk5IDcuNDk5OTkgMy4yOTk5OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMgOUMzIDYuNSA0LjUgNC4yNSA3LjUgMS41QzEwLjUgNC4yNSAxMiA2LjUgMTIgOUMxMiAxMS40ODUzIDkuOTg1MjggMTMuNSA3LjUgMTMuNUM1LjAxNDcyIDEzLjUgMyAxMS40ODUzIDMgOVpNMTAuOTUyNCA4LjMwMzA3QzkuNjczNDcgNy44MjEyMSA4LjI4NzkgOC40NjIwOCA2Ljk4OTU2IDkuMDYyNTlDNS45MzI3IDkuNTUxNDIgNC45MzM2NSAxMC4wMTM1IDQuMDk2OTUgOS44MjE1M0M0LjAzMzU3IDkuNTU4MDQgNCA5LjI4Mjk0IDQgOUM0IDcuMTEyMDMgNS4wMjY4NiA1LjI3MTk1IDcuNSAyLjg3MzU3QzkuNjY4MzcgNC45NzYzOSAxMC43MjUgNi42NTAwNCAxMC45NTI0IDguMzAzMDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxqPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zIDIuNUMzIDIuMjIzODYgMy4yMjM4NiAyIDMuNSAySDExLjVDMTEuNzc2MSAyIDEyIDIuMjIzODYgMTIgMi41VjEzLjVDMTIgMTMuNjgxOCAxMS45MDE0IDEzLjg0OTIgMTEuNzQyNCAxMy45MzczQzExLjU4MzQgMTQuMDI1NCAxMS4zODkxIDE0LjAyMDMgMTEuMjM1IDEzLjkyNEw3LjUgMTEuNTg5NkwzLjc2NSAxMy45MjRDMy42MTA4NyAxNC4wMjAzIDMuNDE2NTkgMTQuMDI1NCAzLjI1NzYyIDEzLjkzNzNDMy4wOTg2NCAxMy44NDkyIDMgMTMuNjgxOCAzIDEzLjVWMi41Wk00IDNWMTIuNTk3OUw2Ljk3IDEwLjc0MTZDNy4yOTQyNyAxMC41MzkgNy43MDU3MyAxMC41MzkgOC4wMyAxMC43NDE2TDExIDEyLjU5NzlWM0g0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC4yNSAxQzAuMjUgMC41ODU3ODYgMC41ODU3ODYgMC4yNSAxIDAuMjVIMTRDMTQuNDE0MiAwLjI1IDE0Ljc1IDAuNTg1Nzg2IDE0Ljc1IDFWMTRDMTQuNzUgMTQuNDE0MiAxNC40MTQyIDE0Ljc1IDE0IDE0Ljc1SDFDMC41ODU3ODYgMTQuNzUgMC4yNSAxNC40MTQyIDAuMjUgMTRWMVpNMS43NSAxLjc1VjEzLjI1SDEzLjI1VjEuNzVIMS43NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNVwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiM1wiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOVwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTFcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiOVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiMTFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pKX0sST1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMSAxMy4yNUwxNCAxMy4yNVYxNC43NUwxIDE0Ljc1VjEzLjI1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxM1wiLHk6XCI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTNcIix5OlwiM1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiMVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxM1wiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNVwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNVwiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiM1wiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiM1wiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOVwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOVwiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTFcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjExXCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjlcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxM1wiLHk6XCI5XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIxMVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjExXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCIzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCI5XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCIxMVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSkpfSxWPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wIDcuNUMwIDcuMjIzODYgMC4yMjM4NTggNyAwLjUgN0gzQzMuMjc2MTQgNyAzLjUgNy4yMjM4NiAzLjUgNy41QzMuNSA3Ljc3NjE0IDMuMjc2MTQgOCAzIDhIMC41QzAuMjIzODU4IDggMCA3Ljc3NjE0IDAgNy41Wk01Ljc1IDcuNUM1Ljc1IDcuMjIzODYgNS45NzM4NiA3IDYuMjUgN0g4Ljc1QzkuMDI2MTQgNyA5LjI1IDcuMjIzODYgOS4yNSA3LjVDOS4yNSA3Ljc3NjE0IDkuMDI2MTQgOCA4Ljc1IDhINi4yNUM1Ljk3Mzg2IDggNS43NSA3Ljc3NjE0IDUuNzUgNy41Wk0xMiA3QzExLjcyMzkgNyAxMS41IDcuMjIzODYgMTEuNSA3LjVDMTEuNSA3Ljc3NjE0IDExLjcyMzkgOCAxMiA4SDE0LjVDMTQuNzc2MSA4IDE1IDcuNzc2MTQgMTUgNy41QzE1IDcuMjIzODYgMTQuNzc2MSA3IDE0LjUgN0gxMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEg9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuNSA2LjYyNUMxLjAxNjc1IDYuNjI1IDAuNjI1IDcuMDE2NzUgMC42MjUgNy41QzAuNjI1IDcuOTgzMjUgMS4wMTY3NSA4LjM3NSAxLjUgOC4zNzVDMS45ODMyNSA4LjM3NSAyLjM3NSA3Ljk4MzI1IDIuMzc1IDcuNUMyLjM3NSA3LjAxNjc1IDEuOTgzMjUgNi42MjUgMS41IDYuNjI1Wk01LjUgNi42MjVDNS4wMTY3NSA2LjYyNSA0LjYyNSA3LjAxNjc1IDQuNjI1IDcuNUM0LjYyNSA3Ljk4MzI1IDUuMDE2NzUgOC4zNzUgNS41IDguMzc1QzUuOTgzMjUgOC4zNzUgNi4zNzUgNy45ODMyNSA2LjM3NSA3LjVDNi4zNzUgNy4wMTY3NSA1Ljk4MzI1IDYuNjI1IDUuNSA2LjYyNVpNOS41IDYuNjI1QzkuMDE2NzUgNi42MjUgOC42MjUgNy4wMTY3NSA4LjYyNSA3LjVDOC42MjUgNy45ODMyNSA5LjAxNjc1IDguMzc1IDkuNSA4LjM3NUM5Ljk4MzI1IDguMzc1IDEwLjM3NSA3Ljk4MzI1IDEwLjM3NSA3LjVDMTAuMzc1IDcuMDE2NzUgOS45ODMyNSA2LjYyNSA5LjUgNi42MjVaTTEyLjYyNSA3LjVDMTIuNjI1IDcuMDE2NzUgMTMuMDE2OCA2LjYyNSAxMy41IDYuNjI1QzEzLjk4MzIgNi42MjUgMTQuMzc1IDcuMDE2NzUgMTQuMzc1IDcuNUMxNC4zNzUgNy45ODMyNSAxMy45ODMyIDguMzc1IDEzLjUgOC4zNzVDMTMuMDE2OCA4LjM3NSAxMi42MjUgNy45ODMyNSAxMi42MjUgNy41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS43NSAxTDEuNzUgMTRMMC4yNDk5OTkgMTRMMC4yNSAxTDEuNzUgMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTBcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDEwIDcpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEwXCIseTpcIjEzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgMTAgMTMpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEyXCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxMiA3KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMlwiLHk6XCIxM1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDEyIDEzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCA4IDcpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxNCA3KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjEzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgOCAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTRcIix5OlwiMTNcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxNCAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOFwiLHk6XCI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgOCA1KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxNFwiLHk6XCI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgMTQgNSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOFwiLHk6XCIzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgOCAzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxNFwiLHk6XCIzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgMTQgMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOFwiLHk6XCI5XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgOCA5KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxNFwiLHk6XCI5XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgMTQgOSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOFwiLHk6XCIxMVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDggMTEpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjExXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgMTQgMTEpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjZcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDYgNylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNlwiLHk6XCIxM1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDYgMTMpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjRcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDQgNylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNFwiLHk6XCIxM1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDQgMTMpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEwXCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxMCAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMlwiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgMTIgMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOFwiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgOCAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxNFwiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgMTQgMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNlwiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgNiAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI0XCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCA0IDEpXCIsZmlsbDpufSkpfSxUPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiNS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxM1wiLHk6XCI1LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiMy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxM1wiLHk6XCIzLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjEzLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiMS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxM1wiLHk6XCI3LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjEzLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjEuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNVwiLHk6XCI3LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjVcIix5OlwiMTMuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNVwiLHk6XCIxLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjNcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIzXCIseTpcIjEzLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjNcIix5OlwiMS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI5XCIseTpcIjcuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOVwiLHk6XCIxMy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI5XCIseTpcIjEuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTFcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMVwiLHk6XCIxMy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMVwiLHk6XCIxLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiOS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxM1wiLHk6XCI5LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiMTEuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTNcIix5OlwiMTEuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCI1LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjFcIix5OlwiMy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjcuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCIxMy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjEuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCI5LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjFcIix5OlwiMTEuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSl9LEQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEzLjI1IDFMMTMuMjUgMTRMMTQuNzUgMTRMMTQuNzUgMUwxMy4yNSAxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgNSA3KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgNSAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDMgNylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDMgMTMpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCA3IDcpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCAxIDcpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCA3IDEzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMSAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDcgNSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDEgNSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDcgMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDEgMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDcgOSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDEgOSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDcgMTEpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCAxIDExKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgOSA3KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgOSAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDExIDcpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCAxMSAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDUgMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDMgMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDcgMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDEgMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDkgMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDExIDEpXCIsZmlsbDpufSkpfSxCPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjI1IDcuNUMxLjI1IDcuMjIzODYgMS40NzM4NiA3IDEuNzUgN0gxMy4yNUMxMy41MjYxIDcgMTMuNzUgNy4yMjM4NiAxMy43NSA3LjVDMTMuNzUgNy43NzYxNCAxMy41MjYxIDggMTMuMjUgOEgxLjc1QzEuNDczODYgOCAxLjI1IDcuNzc2MTQgMS4yNSA3LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxaPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiNS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjMuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCI3LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiMTMuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIxLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjcuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNVwiLHk6XCI3LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjNcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI5XCIseTpcIjcuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTFcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjkuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIxMS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjcuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEgMS40OTk5NEMxIDEuMjIzOCAxLjIyMzg2IDAuOTk5OTM5IDEuNSAwLjk5OTkzOUg2VjEuOTk5OTRIMlY1Ljk5OTk0SDFWMS40OTk5NFpNMTMgMS45OTk5NEg5VjAuOTk5OTM5SDEzLjVDMTMuNzc2MSAwLjk5OTkzOSAxNCAxLjIyMzggMTQgMS40OTk5NFY1Ljk5OTk0SDEzVjEuOTk5OTRaTTEgMTMuNDk5OVY4Ljk5OTk0SDJWMTIuOTk5OUg2VjEzLjk5OTlIMS41QzEuMjIzODYgMTMuOTk5OSAxIDEzLjc3NjEgMSAxMy40OTk5Wk0xMyAxMi45OTk5VjguOTk5OTRIMTRWMTMuNDk5OUMxNCAxMy43NzYxIDEzLjc3NjEgMTMuOTk5OSAxMy41IDEzLjk5OTlIOS41VjEyLjk5OTlIMTNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSwkPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjUgM0MxLjIyMzg2IDMgMSAzLjIyMzg2IDEgMy41QzEgMy43NzYxNCAxLjIyMzg2IDQgMS41IDRIMTMuNUMxMy43NzYxIDQgMTQgMy43NzYxNCAxNCAzLjVDMTQgMy4yMjM4NiAxMy43NzYxIDMgMTMuNSAzSDEuNVpNMSA3LjVDMSA3LjIyMzg2IDEuMjIzODYgNyAxLjUgN0gzLjVDMy43NzYxNCA3IDQgNy4yMjM4NiA0IDcuNUM0IDcuNzc2MTQgMy43NzYxNCA4IDMuNSA4SDEuNUMxLjIyMzg2IDggMSA3Ljc3NjE0IDEgNy41Wk0xIDExLjVDMSAxMS4yMjM5IDEuMjIzODYgMTEgMS41IDExQzEuNzc2MTQgMTEgMiAxMS4yMjM5IDIgMTEuNUMyIDExLjc3NjEgMS43NzYxNCAxMiAxLjUgMTJDMS4yMjM4NiAxMiAxIDExLjc3NjEgMSAxMS41Wk0zIDExLjVDMyAxMS4yMjM5IDMuMjIzODYgMTEgMy41IDExQzMuNzc2MTQgMTEgNCAxMS4yMjM5IDQgMTEuNUM0IDExLjc3NjEgMy43NzYxNCAxMiAzLjUgMTJDMy4yMjM4NiAxMiAzIDExLjc3NjEgMyAxMS41Wk01LjUgMTFDNS4yMjM4NiAxMSA1IDExLjIyMzkgNSAxMS41QzUgMTEuNzc2MSA1LjIyMzg2IDEyIDUuNSAxMkM1Ljc3NjE0IDEyIDYgMTEuNzc2MSA2IDExLjVDNiAxMS4yMjM5IDUuNzc2MTQgMTEgNS41IDExWk03IDExLjVDNyAxMS4yMjM5IDcuMjIzODYgMTEgNy41IDExQzcuNzc2MTQgMTEgOCAxMS4yMjM5IDggMTEuNUM4IDExLjc3NjEgNy43NzYxNCAxMiA3LjUgMTJDNy4yMjM4NiAxMiA3IDExLjc3NjEgNyAxMS41Wk05LjUgMTFDOS4yMjM4NiAxMSA5IDExLjIyMzkgOSAxMS41QzkgMTEuNzc2MSA5LjIyMzg2IDEyIDkuNSAxMkM5Ljc3NjE0IDEyIDEwIDExLjc3NjEgMTAgMTEuNUMxMCAxMS4yMjM5IDkuNzc2MTQgMTEgOS41IDExWk0xMSAxMS41QzExIDExLjIyMzkgMTEuMjIzOSAxMSAxMS41IDExQzExLjc3NjEgMTEgMTIgMTEuMjIzOSAxMiAxMS41QzEyIDExLjc3NjEgMTEuNzc2MSAxMiAxMS41IDEyQzExLjIyMzkgMTIgMTEgMTEuNzc2MSAxMSAxMS41Wk0xMy41IDExQzEzLjIyMzkgMTEgMTMgMTEuMjIzOSAxMyAxMS41QzEzIDExLjc3NjEgMTMuMjIzOSAxMiAxMy41IDEyQzEzLjc3NjEgMTIgMTQgMTEuNzc2MSAxNCAxMS41QzE0IDExLjIyMzkgMTMuNzc2MSAxMSAxMy41IDExWk02LjUgN0M2LjIyMzg2IDcgNiA3LjIyMzg2IDYgNy41QzYgNy43NzYxNCA2LjIyMzg2IDggNi41IDhIOC41QzguNzc2MTQgOCA5IDcuNzc2MTQgOSA3LjVDOSA3LjIyMzg2IDguNzc2MTQgNyA4LjUgN0g2LjVaTTExIDcuNUMxMSA3LjIyMzg2IDExLjIyMzkgNyAxMS41IDdIMTMuNUMxMy43NzYxIDcgMTQgNy4yMjM4NiAxNCA3LjVDMTQgNy43NzYxNCAxMy43NzYxIDggMTMuNSA4SDExLjVDMTEuMjIzOSA4IDExIDcuNzc2MTQgMTEgNy41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTQgMS43NUwxIDEuNzVMMSAwLjI0OTk5OUwxNCAwLjI1TDE0IDEuNzVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjhcIix5OlwiMTBcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDggMTApXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjJcIix5OlwiMTBcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDIgMTApXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjhcIix5OlwiMTJcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDggMTIpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjJcIix5OlwiMTJcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDIgMTIpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjhcIix5OlwiOFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgOCA4KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjE0XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCA4IDE0KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIyXCIseTpcIjhcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDIgOClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMlwiLHk6XCIxNFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMiAxNClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTBcIix5OlwiOFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMTAgOClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTBcIix5OlwiMTRcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDEwIDE0KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMlwiLHk6XCI4XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCAxMiA4KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMlwiLHk6XCIxNFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMTIgMTQpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjZcIix5OlwiOFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgNiA4KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI2XCIseTpcIjE0XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCA2IDE0KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI0XCIseTpcIjhcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDQgOClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNFwiLHk6XCIxNFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgNCAxNClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOFwiLHk6XCI2XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCA4IDYpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjJcIix5OlwiNlwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMiA2KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjRcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDggNClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMlwiLHk6XCI0XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCAyIDQpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjEwXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCAxNCAxMClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTRcIix5OlwiMTJcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDE0IDEyKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxNFwiLHk6XCI4XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCAxNCA4KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxNFwiLHk6XCIxNFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMTQgMTQpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjZcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDE0IDYpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjRcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDE0IDQpXCIsZmlsbDpufSkpfSxGPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMi41IDJIMi41QzIuMjIzODYgMiAyIDIuMjIzODYgMiAyLjVWMTIuNUMyIDEyLjc3NjEgMi4yMjM4NiAxMyAyLjUgMTNIMTIuNUMxMi43NzYxIDEzIDEzIDEyLjc3NjEgMTMgMTIuNVYyLjVDMTMgMi4yMjM4NiAxMi43NzYxIDIgMTIuNSAyWk0yLjUgMUMxLjY3MTU3IDEgMSAxLjY3MTU3IDEgMi41VjEyLjVDMSAxMy4zMjg0IDEuNjcxNTcgMTQgMi41IDE0SDEyLjVDMTMuMzI4NCAxNCAxNCAxMy4zMjg0IDE0IDEyLjVWMi41QzE0IDEuNjcxNTcgMTMuMzI4NCAxIDEyLjUgMUgyLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxXPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjk5OTk4IDAuOTk5OTc2QzEuNDQ3NjkgMC45OTk5NzYgMC45OTk5NzYgMS40NDc2OSAwLjk5OTk3NiAxLjk5OTk4VjEzQzAuOTk5OTc2IDEzLjU1MjMgMS40NDc2OSAxNCAxLjk5OTk4IDE0SDEzQzEzLjU1MjMgMTQgMTQgMTMuNTUyMyAxNCAxM1YxLjk5OTk4QzE0IDEuNDQ3NjkgMTMuNTUyMyAwLjk5OTk3NiAxMyAwLjk5OTk3NkgxLjk5OTk4Wk0xLjk5OTk4IDEuOTk5OThMMTMgMS45OTk5OFYxM0gxLjk5OTk4VjEuOTk5OThaTTQuNDk5OTYgMy45OTk5NkM0LjIyMzgyIDMuOTk5OTYgMy45OTk5NiA0LjIyMzgyIDMuOTk5OTYgNC40OTk5NlYxMC41QzMuOTk5OTYgMTAuNzc2MSA0LjIyMzgyIDExIDQuNDk5OTYgMTFIMTAuNUMxMC43NzYxIDExIDExIDEwLjc3NjEgMTEgMTAuNVY0LjQ5OTk2QzExIDQuMjIzODIgMTAuNzc2MSAzLjk5OTk2IDEwLjUgMy45OTk5Nkg0LjQ5OTk2Wk00Ljk5OTk2IDkuOTk5OTZWNC45OTk5Nkg5Ljk5OTk2VjkuOTk5OTZINC45OTk5NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIgNUgxM0MxMy41NTIzIDUgMTQgNS40NDc3MiAxNCA2VjlDMTQgOS41NTIyOCAxMy41NTIzIDEwIDEzIDEwSDJDMS40NDc3MiAxMCAxIDkuNTUyMjggMSA5VjZDMSA1LjQ0NzcyIDEuNDQ3NzIgNSAyIDVaTTAgNkMwIDQuODk1NDMgMC44OTU0MzEgNCAyIDRIMTNDMTQuMTA0NiA0IDE1IDQuODk1NDMgMTUgNlY5QzE1IDEwLjEwNDYgMTQuMTA0NiAxMSAxMyAxMUgyQzAuODk1NDMgMTEgMCAxMC4xMDQ2IDAgOVY2Wk00LjUgNi43NUM0LjA4NTc5IDYuNzUgMy43NSA3LjA4NTc5IDMuNzUgNy41QzMuNzUgNy45MTQyMSA0LjA4NTc5IDguMjUgNC41IDguMjVDNC45MTQyMSA4LjI1IDUuMjUgNy45MTQyMSA1LjI1IDcuNUM1LjI1IDcuMDg1NzkgNC45MTQyMSA2Ljc1IDQuNSA2Ljc1Wk02Ljc1IDcuNUM2Ljc1IDcuMDg1NzkgNy4wODU3OSA2Ljc1IDcuNSA2Ljc1QzcuOTE0MjEgNi43NSA4LjI1IDcuMDg1NzkgOC4yNSA3LjVDOC4yNSA3LjkxNDIxIDcuOTE0MjEgOC4yNSA3LjUgOC4yNUM3LjA4NTc5IDguMjUgNi43NSA3LjkxNDIxIDYuNzUgNy41Wk0xMC41IDYuNzVDMTAuMDg1OCA2Ljc1IDkuNzUgNy4wODU3OSA5Ljc1IDcuNUM5Ljc1IDcuOTE0MjEgMTAuMDg1OCA4LjI1IDEwLjUgOC4yNUMxMC45MTQyIDguMjUgMTEuMjUgNy45MTQyMSAxMS4yNSA3LjVDMTEuMjUgNy4wODU3OSAxMC45MTQyIDYuNzUgMTAuNSA2Ljc1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sej1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC41IDFDNC43NzYxNCAxIDUgMS4yMjM4NiA1IDEuNVYySDEwVjEuNUMxMCAxLjIyMzg2IDEwLjIyMzkgMSAxMC41IDFDMTAuNzc2MSAxIDExIDEuMjIzODYgMTEgMS41VjJIMTIuNUMxMy4zMjg0IDIgMTQgMi42NzE1NyAxNCAzLjVWMTIuNUMxNCAxMy4zMjg0IDEzLjMyODQgMTQgMTIuNSAxNEgyLjVDMS42NzE1NyAxNCAxIDEzLjMyODQgMSAxMi41VjMuNUMxIDIuNjcxNTcgMS42NzE1NyAyIDIuNSAySDRWMS41QzQgMS4yMjM4NiA0LjIyMzg2IDEgNC41IDFaTTEwIDNWMy41QzEwIDMuNzc2MTQgMTAuMjIzOSA0IDEwLjUgNEMxMC43NzYxIDQgMTEgMy43NzYxNCAxMSAzLjVWM0gxMi41QzEyLjc3NjEgMyAxMyAzLjIyMzg2IDEzIDMuNVY1SDJWMy41QzIgMy4yMjM4NiAyLjIyMzg2IDMgMi41IDNINFYzLjVDNCAzLjc3NjE0IDQuMjIzODYgNCA0LjUgNEM0Ljc3NjE0IDQgNSAzLjc3NjE0IDUgMy41VjNIMTBaTTIgNlYxMi41QzIgMTIuNzc2MSAyLjIyMzg2IDEzIDIuNSAxM0gxMi41QzEyLjc3NjEgMTMgMTMgMTIuNzc2MSAxMyAxMi41VjZIMlpNNyA3LjVDNyA3LjIyMzg2IDcuMjIzODYgNyA3LjUgN0M3Ljc3NjE0IDcgOCA3LjIyMzg2IDggNy41QzggNy43NzYxNCA3Ljc3NjE0IDggNy41IDhDNy4yMjM4NiA4IDcgNy43NzYxNCA3IDcuNVpNOS41IDdDOS4yMjM4NiA3IDkgNy4yMjM4NiA5IDcuNUM5IDcuNzc2MTQgOS4yMjM4NiA4IDkuNSA4QzkuNzc2MTQgOCAxMCA3Ljc3NjE0IDEwIDcuNUMxMCA3LjIyMzg2IDkuNzc2MTQgNyA5LjUgN1pNMTEgNy41QzExIDcuMjIzODYgMTEuMjIzOSA3IDExLjUgN0MxMS43NzYxIDcgMTIgNy4yMjM4NiAxMiA3LjVDMTIgNy43NzYxNCAxMS43NzYxIDggMTEuNSA4QzExLjIyMzkgOCAxMSA3Ljc3NjE0IDExIDcuNVpNMTEuNSA5QzExLjIyMzkgOSAxMSA5LjIyMzg2IDExIDkuNUMxMSA5Ljc3NjE0IDExLjIyMzkgMTAgMTEuNSAxMEMxMS43NzYxIDEwIDEyIDkuNzc2MTQgMTIgOS41QzEyIDkuMjIzODYgMTEuNzc2MSA5IDExLjUgOVpNOSA5LjVDOSA5LjIyMzg2IDkuMjIzODYgOSA5LjUgOUM5Ljc3NjE0IDkgMTAgOS4yMjM4NiAxMCA5LjVDMTAgOS43NzYxNCA5Ljc3NjE0IDEwIDkuNSAxMEM5LjIyMzg2IDEwIDkgOS43NzYxNCA5IDkuNVpNNy41IDlDNy4yMjM4NiA5IDcgOS4yMjM4NiA3IDkuNUM3IDkuNzc2MTQgNy4yMjM4NiAxMCA3LjUgMTBDNy43NzYxNCAxMCA4IDkuNzc2MTQgOCA5LjVDOCA5LjIyMzg2IDcuNzc2MTQgOSA3LjUgOVpNNSA5LjVDNSA5LjIyMzg2IDUuMjIzODYgOSA1LjUgOUM1Ljc3NjE0IDkgNiA5LjIyMzg2IDYgOS41QzYgOS43NzYxNCA1Ljc3NjE0IDEwIDUuNSAxMEM1LjIyMzg2IDEwIDUgOS43NzYxNCA1IDkuNVpNMy41IDlDMy4yMjM4NiA5IDMgOS4yMjM4NiAzIDkuNUMzIDkuNzc2MTQgMy4yMjM4NiAxMCAzLjUgMTBDMy43NzYxNCAxMCA0IDkuNzc2MTQgNCA5LjVDNCA5LjIyMzg2IDMuNzc2MTQgOSAzLjUgOVpNMyAxMS41QzMgMTEuMjIzOSAzLjIyMzg2IDExIDMuNSAxMUMzLjc3NjE0IDExIDQgMTEuMjIzOSA0IDExLjVDNCAxMS43NzYxIDMuNzc2MTQgMTIgMy41IDEyQzMuMjIzODYgMTIgMyAxMS43NzYxIDMgMTEuNVpNNS41IDExQzUuMjIzODYgMTEgNSAxMS4yMjM5IDUgMTEuNUM1IDExLjc3NjEgNS4yMjM4NiAxMiA1LjUgMTJDNS43NzYxNCAxMiA2IDExLjc3NjEgNiAxMS41QzYgMTEuMjIzOSA1Ljc3NjE0IDExIDUuNSAxMVpNNyAxMS41QzcgMTEuMjIzOSA3LjIyMzg2IDExIDcuNSAxMUM3Ljc3NjE0IDExIDggMTEuMjIzOSA4IDExLjVDOCAxMS43NzYxIDcuNzc2MTQgMTIgNy41IDEyQzcuMjIzODYgMTIgNyAxMS43NzYxIDcgMTEuNVpNOS41IDExQzkuMjIzODYgMTEgOSAxMS4yMjM5IDkgMTEuNUM5IDExLjc3NjEgOS4yMjM4NiAxMiA5LjUgMTJDOS43NzYxNCAxMiAxMCAxMS43NzYxIDEwIDExLjVDMTAgMTEuMjIzOSA5Ljc3NjE0IDExIDkuNSAxMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEc9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIgM0MxLjQ0NzcyIDMgMSAzLjQ0NzcyIDEgNFYxMUMxIDExLjU1MjMgMS40NDc3MiAxMiAyIDEySDEzQzEzLjU1MjMgMTIgMTQgMTEuNTUyMyAxNCAxMVY0QzE0IDMuNDQ3NzIgMTMuNTUyMyAzIDEzIDNIMlpNMCA0QzAgMi44OTU0MyAwLjg5NTQzMSAyIDIgMkgxM0MxNC4xMDQ2IDIgMTUgMi44OTU0MyAxNSA0VjExQzE1IDEyLjEwNDYgMTQuMTA0NiAxMyAxMyAxM0gyQzAuODk1NDMxIDEzIDAgMTIuMTA0NiAwIDExVjRaTTIgNC4yNUMyIDQuMTExOTMgMi4xMTE5MyA0IDIuMjUgNEg0Ljc1QzQuODg4MDcgNCA1IDQuMTExOTMgNSA0LjI1VjUuNzU0NTRDNSA1Ljg5MjYxIDQuODg4MDcgNi4wMDQ1NCA0Ljc1IDYuMDA0NTRIMi4yNUMyLjExMTkzIDYuMDA0NTQgMiA1Ljg5MjYxIDIgNS43NTQ1NFY0LjI1Wk0xMi4xMDEgNy41ODQyMUMxMi4xMDEgOS4wMjA3MyAxMC45MzY1IDEwLjE4NTMgOS40OTk5OCAxMC4xODUzQzguMDYzNDYgMTAuMTg1MyA2Ljg5ODkzIDkuMDIwNzMgNi44OTg5MyA3LjU4NDIxQzYuODk4OTMgNi4xNDc2OSA4LjA2MzQ2IDQuOTgzMTUgOS40OTk5OCA0Ljk4MzE1QzEwLjkzNjUgNC45ODMxNSAxMi4xMDEgNi4xNDc2OSAxMi4xMDEgNy41ODQyMVpNMTMuMTAxIDcuNTg0MjFDMTMuMTAxIDkuNTczMDIgMTEuNDg4OCAxMS4xODUzIDkuNDk5OTggMTEuMTg1M0M3LjUxMTE3IDExLjE4NTMgNS44OTg5MyA5LjU3MzAyIDUuODk4OTMgNy41ODQyMUM1Ljg5ODkzIDUuNTk1NCA3LjUxMTE3IDMuOTgzMTUgOS40OTk5OCAzLjk4MzE1QzExLjQ4ODggMy45ODMxNSAxMy4xMDEgNS41OTU0IDEzLjEwMSA3LjU4NDIxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sSz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiAzLjVDMiAzLjIyMzg2IDIuMjIzODYgMyAyLjUgM0gxMi41QzEyLjc3NjEgMyAxMyAzLjIyMzg2IDEzIDMuNVY5LjVDMTMgOS43NzYxNCAxMi43NzYxIDEwIDEyLjUgMTBIMi41QzIuMjIzODYgMTAgMiA5Ljc3NjE0IDIgOS41VjMuNVpNMiAxMC45MTQ2QzEuNDE3NCAxMC43MDg3IDEgMTAuMTUzMSAxIDkuNVYzLjVDMSAyLjY3MTU3IDEuNjcxNTcgMiAyLjUgMkgxMi41QzEzLjMyODQgMiAxNCAyLjY3MTU3IDE0IDMuNVY5LjVDMTQgMTAuMTUzMSAxMy41ODI2IDEwLjcwODcgMTMgMTAuOTE0NlYxMS41QzEzIDEyLjMyODQgMTIuMzI4NCAxMyAxMS41IDEzSDMuNUMyLjY3MTU3IDEzIDIgMTIuMzI4NCAyIDExLjVWMTAuOTE0NlpNMTIgMTFWMTEuNUMxMiAxMS43NzYxIDExLjc3NjEgMTIgMTEuNSAxMkgzLjVDMy4yMjM4NiAxMiAzIDExLjc3NjEgMyAxMS41VjExSDEyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi41IDNDMi4yMjM4NiAzIDIgMy4yMjM4NiAyIDMuNVY5LjVDMiA5Ljc3NjE0IDIuMjIzODYgMTAgMi41IDEwSDEyLjVDMTIuNzc2MSAxMCAxMyA5Ljc3NjE0IDEzIDkuNVYzLjVDMTMgMy4yMjM4NiAxMi43NzYxIDMgMTIuNSAzSDIuNVpNMSA5LjVDMSAxMC4xNTMxIDEuNDE3NCAxMC43MDg3IDIgMTAuOTE0NlYxMS41QzIgMTIuMzI4NCAyLjY3MTU3IDEzIDMuNSAxM0gxMS41QzEyLjMyODQgMTMgMTMgMTIuMzI4NCAxMyAxMS41VjEwLjkxNDZDMTMuNTgyNiAxMC43MDg3IDE0IDEwLjE1MzEgMTQgOS41VjMuNUMxNCAyLjY3MTU3IDEzLjMyODQgMiAxMi41IDJIMi41QzEuNjcxNTcgMiAxIDIuNjcxNTcgMSAzLjVWOS41Wk0xMiAxMS41VjExSDNWMTEuNUMzIDExLjc3NjEgMy4yMjM4NiAxMiAzLjUgMTJIMTEuNUMxMS43NzYxIDEyIDEyIDExLjc3NjEgMTIgMTEuNVpNNS41IDZDNS4yMjM4NiA2IDUgNi4yMjM4NiA1IDYuNUM1IDYuNzc2MTQgNS4yMjM4NiA3IDUuNSA3SDkuNUM5Ljc3NjE0IDcgMTAgNi43NzYxNCAxMCA2LjVDMTAgNi4yMjM4NiA5Ljc3NjE0IDYgOS41IDZINS41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sWT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiAzLjVDMiAzLjIyMzg2IDIuMjIzODYgMyAyLjUgM0gxMi41QzEyLjc3NjEgMyAxMyAzLjIyMzg2IDEzIDMuNVY5LjVDMTMgOS43NzYxNCAxMi43NzYxIDEwIDEyLjUgMTBIMi41QzIuMjIzODYgMTAgMiA5Ljc3NjE0IDIgOS41VjMuNVpNMiAxMC45MTQ2QzEuNDE3NCAxMC43MDg3IDEgMTAuMTUzMSAxIDkuNVYzLjVDMSAyLjY3MTU3IDEuNjcxNTcgMiAyLjUgMkgxMi41QzEzLjMyODQgMiAxNCAyLjY3MTU3IDE0IDMuNVY5LjVDMTQgMTAuMTUzMSAxMy41ODI2IDEwLjcwODcgMTMgMTAuOTE0NlYxMS41QzEzIDEyLjMyODQgMTIuMzI4NCAxMyAxMS41IDEzSDMuNUMyLjY3MTU3IDEzIDIgMTIuMzI4NCAyIDExLjVWMTAuOTE0NlpNMTIgMTFWMTEuNUMxMiAxMS43NzYxIDExLjc3NjEgMTIgMTEuNSAxMkgzLjVDMy4yMjM4NiAxMiAzIDExLjc3NjEgMyAxMS41VjExSDEyWk01IDYuNUM1IDYuMjIzODYgNS4yMjM4NiA2IDUuNSA2SDdWNC41QzcgNC4yMjM4NiA3LjIyMzg2IDQgNy41IDRDNy43NzYxNCA0IDggNC4yMjM4NiA4IDQuNVY2SDkuNUM5Ljc3NjE0IDYgMTAgNi4yMjM4NiAxMCA2LjVDMTAgNi43NzYxNCA5Ljc3NjE0IDcgOS41IDdIOFY4LjVDOCA4Ljc3NjE0IDcuNzc2MTQgOSA3LjUgOUM3LjIyMzg2IDkgNyA4Ljc3NjE0IDcgOC41VjdINS41QzUuMjIzODYgNyA1IDYuNzc2MTQgNSA2LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxKPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjE4MTc5IDYuMTgxODFDNC4zNTc1MyA2LjAwNjA4IDQuNjQyNDUgNi4wMDYwOCA0LjgxODE5IDYuMTgxODFMNy40OTk5OSA4Ljg2MzYyTDEwLjE4MTggNi4xODE4MUMxMC4zNTc1IDYuMDA2MDggMTAuNjQyNCA2LjAwNjA4IDEwLjgxODIgNi4xODE4MUMxMC45OTM5IDYuMzU3NTUgMTAuOTkzOSA2LjY0MjQ3IDEwLjgxODIgNi44MTgyMUw3LjgxODE5IDkuODE4MjFDNy43MzM3OSA5LjkwMjYgNy42MTkzNCA5Ljk1MDAxIDcuNDk5OTkgOS45NTAwMUM3LjM4MDY0IDkuOTUwMDEgNy4yNjYxOCA5LjkwMjYgNy4xODE3OSA5LjgxODIxTDQuMTgxNzkgNi44MTgyMUM0LjAwNjA1IDYuNjQyNDcgNC4wMDYwNSA2LjM1NzU1IDQuMTgxNzkgNi4xODE4MVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFg9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTguODE4MDkgNC4xODE3OUM4Ljk5MzgzIDQuMzU3NTMgOC45OTM4MyA0LjY0MjQ1IDguODE4MDkgNC44MTgxOUw2LjEzNjI5IDcuNDk5OTlMOC44MTgwOSAxMC4xODE4QzguOTkzODMgMTAuMzU3NSA4Ljk5MzgzIDEwLjY0MjQgOC44MTgwOSAxMC44MTgyQzguNjQyMzYgMTAuOTkzOSA4LjM1NzQzIDEwLjk5MzkgOC4xODE3IDEwLjgxODJMNS4xODE3IDcuODE4MTlDNS4wOTczMSA3LjczMzc5IDUuMDQ5OSA3LjYxOTMzIDUuMDQ5OSA3LjQ5OTk5QzUuMDQ5OSA3LjM4MDY0IDUuMDk3MzEgNy4yNjYxOCA1LjE4MTcgNy4xODE3OUw4LjE4MTcgNC4xODE3OUM4LjM1NzQzIDQuMDA2MDUgOC42NDIzNiA0LjAwNjA1IDguODE4MDkgNC4xODE3OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFE9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTYuMTgxOTQgNC4xODE4NUM2LjM1NzY3IDQuMDA2MTEgNi42NDI2IDQuMDA2MTEgNi44MTgzMyA0LjE4MTg1TDkuODE4MzMgNy4xODE4NUM5LjkwMjcyIDcuMjY2MjQgOS45NTAxMyA3LjM4MDcgOS45NTAxMyA3LjUwMDA1QzkuOTUwMTMgNy42MTk0IDkuOTAyNzIgNy43MzM4NiA5LjgxODMzIDcuODE4MjVMNi44MTgzMyAxMC44MTgyQzYuNjQyNiAxMC45OTQgNi4zNTc2NyAxMC45OTQgNi4xODE5NCAxMC44MTgyQzYuMDA2MiAxMC42NDI1IDYuMDA2MiAxMC4zNTc2IDYuMTgxOTQgMTAuMTgxOUw4Ljg2Mzc0IDcuNTAwMDVMNi4xODE5NCA0LjgxODI1QzYuMDA2MiA0LjY0MjUxIDYuMDA2MiA0LjM1NzU5IDYuMTgxOTQgNC4xODE4NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGVlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjkzMTc5IDUuNDMxNzlDNC43NTYwNSA1LjYwNzUzIDQuNzU2MDUgNS44OTI0NSA0LjkzMTc5IDYuMDY4MTlDNS4xMDc1MyA2LjI0MzkyIDUuMzkyNDUgNi4yNDM5MiA1LjU2ODE5IDYuMDY4MTlMNy40OTk5OSA0LjEzNjM4TDkuNDMxNzkgNi4wNjgxOUM5LjYwNzUzIDYuMjQzOTIgOS44OTI0NSA2LjI0MzkyIDEwLjA2ODIgNi4wNjgxOUMxMC4yNDM5IDUuODkyNDUgMTAuMjQzOSA1LjYwNzUzIDEwLjA2ODIgNS40MzE3OUw3LjgxODE5IDMuMTgxNzlDNy43MzM3OSAzLjA5NzQgNy42MTkzMyAzLjA0OTk5IDcuNDk5OTkgMy4wNDk5OUM3LjM4MDY0IDMuMDQ5OTkgNy4yNjYxOCAzLjA5NzQgNy4xODE3OSAzLjE4MTc5TDQuOTMxNzkgNS40MzE3OVpNMTAuMDY4MiA5LjU2ODE5QzEwLjI0MzkgOS4zOTI0NSAxMC4yNDM5IDkuMTA3NTMgMTAuMDY4MiA4LjkzMTc5QzkuODkyNDUgOC43NTYwNiA5LjYwNzUzIDguNzU2MDYgOS40MzE3OSA4LjkzMTc5TDcuNDk5OTkgMTAuODYzNkw1LjU2ODE5IDguOTMxNzlDNS4zOTI0NSA4Ljc1NjA2IDUuMTA3NTMgOC43NTYwNiA0LjkzMTc5IDguOTMxNzlDNC43NTYwNSA5LjEwNzUzIDQuNzU2MDUgOS4zOTI0NSA0LjkzMTc5IDkuNTY4MTlMNy4xODE3OSAxMS44MTgyQzcuMzU3NTMgMTEuOTkzOSA3LjY0MjQ1IDExLjk5MzkgNy44MTgxOSAxMS44MTgyTDEwLjA2ODIgOS41NjgxOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHRlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjE4MTc5IDguODE4MTlDNC4wMDYwNSA4LjY0MjQ1IDQuMDA2MDUgOC4zNTc1MyA0LjE4MTc5IDguMTgxNzlMNy4xODE3OSA1LjE4MTc5QzcuMjY2MTggNS4wOTc0IDcuMzgwNjQgNS4wNDk5OSA3LjQ5OTk5IDUuMDQ5OTlDNy42MTkzMyA1LjA0OTk5IDcuNzMzNzkgNS4wOTc0IDcuODE4MTkgNS4xODE3OUwxMC44MTgyIDguMTgxNzlDMTAuOTkzOSA4LjM1NzUzIDEwLjk5MzkgOC42NDI0NSAxMC44MTgyIDguODE4MTlDMTAuNjQyNCA4Ljk5MzkyIDEwLjM1NzUgOC45OTM5MiAxMC4xODE4IDguODE4MTlMNy40OTk5OSA2LjEzNjM4TDQuODE4MTkgOC44MTgxOUM0LjY0MjQ1IDguOTkzOTIgNC4zNTc1MyA4Ljk5MzkyIDQuMTgxNzkgOC44MTgxOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG5lPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMi41IDNMMi40OTk5OSAzLjAwMDAyQzEuNjcxNTcgMy4wMDAwMiAwLjk5OTk5OSAzLjY3MTU5IDAuOTk5OTk5IDQuNTAwMDJWOS41MDAwMkMwLjk5OTk5OSAxMC4zMjg0IDEuNjcxNTcgMTEgMi41IDExSDcuNTAwMDJDNy42MzI2MyAxMSA3Ljc1OTgxIDExLjA1MjcgNy44NTM1OCAxMS4xNDY1TDkuOTk5OTkgMTMuMjkyOVYxMS41QzkuOTk5OTkgMTEuMjIzOSAxMC4yMjM5IDExIDEwLjUgMTFIMTIuNUMxMy4zMjg0IDExIDE0IDEwLjMyODQgMTQgOS41MDAwMlY0LjVDMTQgMy42NzE1NyAxMy4zMjg0IDMgMTIuNSAzWk0yLjQ5OTk5IDIuMDAwMDJMMTIuNSAyQzEzLjg4MDcgMiAxNSAzLjExOTI4IDE1IDQuNVY5LjUwMDAyQzE1IDEwLjg4MDcgMTMuODgwNyAxMiAxMi41IDEySDExVjE0LjVDMTEgMTQuNzAyMiAxMC44NzgyIDE0Ljg4NDUgMTAuNjkxMyAxNC45NjE5QzEwLjUwNDUgMTUuMDM5MyAxMC4yODk0IDE0Ljk5NjUgMTAuMTQ2NCAxNC44NTM1TDcuMjkyOTIgMTJIMi41QzEuMTE5MjkgMTIgMCAxMC44ODA3IDAgOS41MDAwMlY0LjUwMDAyQzAgMy4xMTkzMSAxLjExOTI4IDIuMDAwMDIgMi40OTk5OSAyLjAwMDAyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTExLjQ2NjkgMy43MjY4NEMxMS43NTU4IDMuOTE1NzQgMTEuODM2OSA0LjMwMzA4IDExLjY0OCA0LjU5MTk4TDcuMzk3OTkgMTEuMDkyQzcuMjk3ODMgMTEuMjQ1MiA3LjEzNTU2IDExLjM0NjcgNi45NTQwMiAxMS4zNjk5QzYuNzcyNDcgMTEuMzkzMSA2LjU4OTg5IDExLjMzNTUgNi40NTQ0NiAxMS4yMTI0TDMuNzA0NDYgOC43MTI0MUMzLjQ0OTA1IDguNDgwMjIgMy40MzAyMyA4LjA4NDk0IDMuNjYyNDIgNy44Mjk1M0MzLjg5NDYxIDcuNTc0MTIgNC4yODk4OSA3LjU1NTI5IDQuNTQ1MyA3Ljc4NzQ5TDYuNzUyOTIgOS43OTQ0MUwxMC42MDE4IDMuOTA3OTJDMTAuNzkwNyAzLjYxOTAyIDExLjE3OCAzLjUzNzk1IDExLjQ2NjkgMy43MjY4NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG9lPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTkxIDAuODc3MDQ1QzMuODQyMjIgMC44NzcwNDUgMC44NzcwNzUgMy44NDIxOSAwLjg3NzA3NSA3LjQ5OTg4QzAuODc3MDc1IDExLjE1NzUgMy44NDIyMiAxNC4xMjI3IDcuNDk5OTEgMTQuMTIyN0MxMS4xNTc2IDE0LjEyMjcgMTQuMTIyNyAxMS4xNTc1IDE0LjEyMjcgNy40OTk4OEMxNC4xMjI3IDMuODQyMTkgMTEuMTU3NiAwLjg3NzA0NSA3LjQ5OTkxIDAuODc3MDQ1Wk0xLjgyNzA4IDcuNDk5ODhDMS44MjcwOCA0LjM2Njg2IDQuMzY2ODkgMS44MjcwNCA3LjQ5OTkxIDEuODI3MDRDMTAuNjMyOSAxLjgyNzA0IDEzLjE3MjcgNC4zNjY4NiAxMy4xNzI3IDcuNDk5ODhDMTMuMTcyNyAxMC42MzI5IDEwLjYzMjkgMTMuMTcyNyA3LjQ5OTkxIDEzLjE3MjdDNC4zNjY4OSAxMy4xNzI3IDEuODI3MDggMTAuNjMyOSAxLjgyNzA4IDcuNDk5ODhaTTEwLjE1ODkgNS41Mzc3NEMxMC4zMTc4IDUuMzExOTEgMTAuMjYzNiA1LjAwMDAxIDEwLjAzNzggNC44NDEwOUM5LjgxMTk0IDQuNjgyMTcgOS41MDAwNCA0LjczNjQyIDkuMzQxMTIgNC45NjIyNUw2LjUxOTc3IDguOTcxNTRMNS4zNTY4MSA3Ljc4NzA2QzUuMTYzMzQgNy41OTAwMiA0Ljg0Njc3IDcuNTg3MTEgNC42NDk3MyA3Ljc4MDU4QzQuNDUyNjggNy45NzQwNCA0LjQ0OTc4IDguMjkwNjEgNC42NDMyNSA4LjQ4NzY1TDYuMjI2NTggMTAuMTAwM0M2LjMzMDU0IDEwLjIwNjIgNi40NzYxNyAxMC4yNjA0IDYuNjI0MDcgMTAuMjQ4M0M2Ljc3MTk3IDEwLjIzNjMgNi45MDY4NiAxMC4xNTkxIDYuOTkyMjYgMTAuMDM3N0wxMC4xNTg5IDUuNTM3NzRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxhZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMyAzSDEyVjEySDNMMyAzWk0yIDNDMiAyLjQ0NzcxIDIuNDQ3NzIgMiAzIDJIMTJDMTIuNTUyMyAyIDEzIDIuNDQ3NzIgMTMgM1YxMkMxMyAxMi41NTIzIDEyLjU1MjMgMTMgMTIgMTNIM0MyLjQ0NzcxIDEzIDIgMTIuNTUyMyAyIDEyVjNaTTEwLjM0OTggNS41MTEwNUMxMC41MDYgNS4yODMzNyAxMC40NDgxIDQuOTcyMTIgMTAuMjIwNCA0LjgxNTg3QzkuOTkyNzUgNC42NTk2MSA5LjY4MTUgNC43MTc1MSA5LjUyNTI1IDQuOTQ1MTlMNi42NDA0OCA5LjE0ODU3TDUuMTk3MzMgNy40MDg4OUM1LjAyMTAyIDcuMTk2MzUgNC43MDU4IDcuMTY2OTkgNC40OTMyNyA3LjM0MzI5QzQuMjgwNzMgNy41MTk2IDQuMjUxMzcgNy44MzQ4MiA0LjQyNzY3IDguMDQ3MzVMNi4yOTM0IDEwLjI5NjRDNi4zOTM0OCAxMC40MTcxIDYuNTQ0MzcgMTAuNDgzOCA2LjcwMDk3IDEwLjQ3NjdDNi44NTc1NyAxMC40Njk1IDcuMDAxNzcgMTAuMzg5NCA3LjA5MDQ3IDEwLjI2MDFMMTAuMzQ5OCA1LjUxMTA1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0saWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuMTM1MjMgNi4xNTgwM0MzLjMyNDEgNS45NTY1NyAzLjY0MDUyIDUuOTQ2MzcgMy44NDE5NyA2LjEzNTIzTDcuNSA5LjU2NDY0TDExLjE1OCA2LjEzNTIzQzExLjM1OTUgNS45NDYzNyAxMS42NzU5IDUuOTU2NTcgMTEuODY0OCA2LjE1ODAzQzEyLjA1MzYgNi4zNTk0OSAxMi4wNDM0IDYuNjc1OTEgMTEuODQyIDYuODY0NzdMNy44NDE5NyAxMC42MTQ4QzcuNjQ5NjQgMTAuNzk1MSA3LjM1MDM2IDEwLjc5NTEgNy4xNTgwMyAxMC42MTQ4TDMuMTU4MDMgNi44NjQ3N0MyLjk1NjU3IDYuNjc1OTEgMi45NDYzNyA2LjM1OTQ5IDMuMTM1MjMgNi4xNTgwM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGxlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk04Ljg0MTgyIDMuMTM1MTRDOS4wNDMyNyAzLjMyNDAxIDkuMDUzNDggMy42NDA0MiA4Ljg2NDYyIDMuODQxODhMNS40MzUyMSA3LjQ5OTkxTDguODY0NjIgMTEuMTU3OUM5LjA1MzQ4IDExLjM1OTQgOS4wNDMyNyAxMS42NzU4IDguODQxODIgMTEuODY0N0M4LjY0MDM2IDEyLjA1MzUgOC4zMjM5NCAxMi4wNDMzIDguMTM1MDggMTEuODQxOUw0LjM4NTA4IDcuODQxODhDNC4yMDQ3NyA3LjY0OTU1IDQuMjA0NzcgNy4zNTAyNyA0LjM4NTA4IDcuMTU3OTRMOC4xMzUwOCAzLjE1Nzk0QzguMzIzOTQgMi45NTY0OCA4LjY0MDM2IDIuOTQ2MjggOC44NDE4MiAzLjEzNTE0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sc2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTYuMTU4NCAzLjEzNTA4QzYuMzU5ODUgMi45NDYyMSA2LjY3NjI3IDIuOTU2NDIgNi44NjUxNCAzLjE1Nzg4TDEwLjYxNTEgNy4xNTc4OEMxMC43OTU0IDcuMzUwMiAxMC43OTU0IDcuNjQ5NDkgMTAuNjE1MSA3Ljg0MTgyTDYuODY1MTQgMTEuODQxOEM2LjY3NjI3IDEyLjA0MzMgNi4zNTk4NSAxMi4wNTM1IDYuMTU4NCAxMS44NjQ2QzUuOTU2OTQgMTEuNjc1NyA1Ljk0NjczIDExLjM1OTMgNi4xMzU2IDExLjE1NzlMOS41NjUgNy40OTk4NUw2LjEzNTYgMy44NDE4MkM1Ljk0NjczIDMuNjQwMzYgNS45NTY5NCAzLjMyMzk0IDYuMTU4NCAzLjEzNTA4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sY2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuMTM1MjMgOC44NDE5N0MzLjMyNDEgOS4wNDM0MyAzLjY0MDUyIDkuMDUzNjMgMy44NDE5NyA4Ljg2NDc3TDcuNSA1LjQzNTM2TDExLjE1OCA4Ljg2NDc3QzExLjM1OTUgOS4wNTM2MyAxMS42NzU5IDkuMDQzNDMgMTEuODY0OCA4Ljg0MTk3QzEyLjA1MzYgOC42NDA1MSAxMi4wNDM0IDguMzI0MDkgMTEuODQyIDguMTM1MjNMNy44NDE5NyA0LjM4NTIzQzcuNjQ5NjQgNC4yMDQ5MiA3LjM1MDM2IDQuMjA0OTIgNy4xNTgwMyA0LjM4NTIzTDMuMTU4MDMgOC4xMzUyM0MyLjk1NjU3IDguMzI0MDkgMi45NDYzNyA4LjY0MDUxIDMuMTM1MjMgOC44NDE5N1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHVlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wLjg3NzA3NSA3LjQ5OTkxQzAuODc3MDc1IDMuODQyMjIgMy44NDIyMiAwLjg3NzA3NSA3LjQ5OTkxIDAuODc3MDc1QzExLjE1NzYgMC44NzcwNzUgMTQuMTIyNyAzLjg0MjIyIDE0LjEyMjcgNy40OTk5MUMxNC4xMjI3IDExLjE1NzYgMTEuMTU3NiAxNC4xMjI3IDcuNDk5OTEgMTQuMTIyN0MzLjg0MjIyIDE0LjEyMjcgMC44NzcwNzUgMTEuMTU3NiAwLjg3NzA3NSA3LjQ5OTkxWk03LjQ5OTkxIDEuODI3MDhDNC4zNjY4OSAxLjgyNzA4IDEuODI3MDggNC4zNjY4OSAxLjgyNzA4IDcuNDk5OTFDMS44MjcwOCAxMC42MzI5IDQuMzY2ODkgMTMuMTcyNyA3LjQ5OTkxIDEzLjE3MjdDMTAuNjMyOSAxMy4xNzI3IDEzLjE3MjcgMTAuNjMyOSAxMy4xNzI3IDcuNDk5OTFDMTMuMTcyNyA0LjM2Njg5IDEwLjYzMjkgMS44MjcwOCA3LjQ5OTkxIDEuODI3MDhaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxkZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTk5MSAwLjg3NzA3NUMzLjg0MjIyIDAuODc3MDc1IDAuODc3MDc1IDMuODQyMjIgMC44NzcwNzUgNy40OTk5MUMwLjg3NzA3NSAxMS4xNTc2IDMuODQyMjIgMTQuMTIyNyA3LjQ5OTkxIDE0LjEyMjdDMTEuMTU3NiAxNC4xMjI3IDE0LjEyMjcgMTEuMTU3NiAxNC4xMjI3IDcuNDk5OTFDMTQuMTIyNyAzLjg0MjIyIDExLjE1NzYgMC44NzcwNzUgNy40OTk5MSAwLjg3NzA3NVpNMy44NTc2OCAzLjE1MDU3QzQuODQzMTEgMi4zMjQ0OCA2LjExMzQyIDEuODI3MDggNy40OTk5MSAxLjgyNzA4QzEwLjYzMjkgMS44MjcwOCAxMy4xNzI3IDQuMzY2ODkgMTMuMTcyNyA3LjQ5OTkxQzEzLjE3MjcgOC44ODYzOCAxMi42NzUzIDEwLjE1NjcgMTEuODQ5MiAxMS4xNDIxTDMuODU3NjggMy4xNTA1N1pNMy4xNTA1NyAzLjg1NzY4QzIuMzI0NDggNC44NDMxMSAxLjgyNzA4IDYuMTEzNDIgMS44MjcwOCA3LjQ5OTkxQzEuODI3MDggMTAuNjMyOSA0LjM2Njg5IDEzLjE3MjcgNy40OTk5MSAxMy4xNzI3QzguODg2MzggMTMuMTcyNyAxMC4xNTY3IDEyLjY3NTMgMTEuMTQyMSAxMS44NDkyTDMuMTUwNTcgMy44NTc2OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHBlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01IDJWMUgxMFYySDVaTTQuNzUgMEM0LjMzNTc5IDAgNCAwLjMzNTc4NiA0IDAuNzVWMUgzLjVDMi42NzE1NyAxIDIgMS42NzE1NyAyIDIuNVYxMi41QzIgMTMuMzI4NCAyLjY3MTU3IDE0IDMuNSAxNEgxMS41QzEyLjMyODQgMTQgMTMgMTMuMzI4NCAxMyAxMi41VjIuNUMxMyAxLjY3MTU3IDEyLjMyODQgMSAxMS41IDFIMTFWMC43NUMxMSAwLjMzNTc4NiAxMC42NjQyIDAgMTAuMjUgMEg0Ljc1Wk0xMSAyVjIuMjVDMTEgMi42NjQyMSAxMC42NjQyIDMgMTAuMjUgM0g0Ljc1QzQuMzM1NzkgMyA0IDIuNjY0MjEgNCAyLjI1VjJIMy41QzMuMjIzODYgMiAzIDIuMjIzODYgMyAyLjVWMTIuNUMzIDEyLjc3NjEgMy4yMjM4NiAxMyAzLjUgMTNIMTEuNUMxMS43NzYxIDEzIDEyIDEyLjc3NjEgMTIgMTIuNVYyLjVDMTIgMi4yMjM4NiAxMS43NzYxIDIgMTEuNSAySDExWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUgMlYxSDEwVjJINVpNNC43NSAwQzQuMzM1NzkgMCA0IDAuMzM1Nzg2IDQgMC43NVYxSDMuNUMyLjY3MTU3IDEgMiAxLjY3MTU3IDIgMi41VjEyLjVDMiAxMy4zMjg0IDIuNjcxNTcgMTQgMy41IDE0SDdWMTNIMy41QzMuMjIzODYgMTMgMyAxMi43NzYxIDMgMTIuNVYyLjVDMyAyLjIyMzg2IDMuMjIzODYgMiAzLjUgMkg0VjIuMjVDNCAyLjY2NDIxIDQuMzM1NzkgMyA0Ljc1IDNIMTAuMjVDMTAuNjY0MiAzIDExIDIuNjY0MjEgMTEgMi4yNVYySDExLjVDMTEuNzc2MSAyIDEyIDIuMjIzODYgMTIgMi41VjdIMTNWMi41QzEzIDEuNjcxNTcgMTIuMzI4NCAxIDExLjUgMUgxMVYwLjc1QzExIDAuMzM1Nzg2IDEwLjY2NDIgMCAxMC4yNSAwSDQuNzVaTTkgOC41QzkgOC43NzYxNCA4Ljc3NjE0IDkgOC41IDlDOC4yMjM4NiA5IDggOC43NzYxNCA4IDguNUM4IDguMjIzODYgOC4yMjM4NiA4IDguNSA4QzguNzc2MTQgOCA5IDguMjIzODYgOSA4LjVaTTEwLjUgOUMxMC43NzYxIDkgMTEgOC43NzYxNCAxMSA4LjVDMTEgOC4yMjM4NiAxMC43NzYxIDggMTAuNSA4QzEwLjIyMzkgOCAxMCA4LjIyMzg2IDEwIDguNUMxMCA4Ljc3NjE0IDEwLjIyMzkgOSAxMC41IDlaTTEzIDguNUMxMyA4Ljc3NjE0IDEyLjc3NjEgOSAxMi41IDlDMTIuMjIzOSA5IDEyIDguNzc2MTQgMTIgOC41QzEyIDguMjIzODYgMTIuMjIzOSA4IDEyLjUgOEMxMi43NzYxIDggMTMgOC4yMjM4NiAxMyA4LjVaTTE0LjUgOUMxNC43NzYxIDkgMTUgOC43NzYxNCAxNSA4LjVDMTUgOC4yMjM4NiAxNC43NzYxIDggMTQuNSA4QzE0LjIyMzkgOCAxNCA4LjIyMzg2IDE0IDguNUMxNCA4Ljc3NjE0IDE0LjIyMzkgOSAxNC41IDlaTTE1IDEwLjVDMTUgMTAuNzc2MSAxNC43NzYxIDExIDE0LjUgMTFDMTQuMjIzOSAxMSAxNCAxMC43NzYxIDE0IDEwLjVDMTQgMTAuMjIzOSAxNC4yMjM5IDEwIDE0LjUgMTBDMTQuNzc2MSAxMCAxNSAxMC4yMjM5IDE1IDEwLjVaTTE0LjUgMTNDMTQuNzc2MSAxMyAxNSAxMi43NzYxIDE1IDEyLjVDMTUgMTIuMjIzOSAxNC43NzYxIDEyIDE0LjUgMTJDMTQuMjIzOSAxMiAxNCAxMi4yMjM5IDE0IDEyLjVDMTQgMTIuNzc2MSAxNC4yMjM5IDEzIDE0LjUgMTNaTTE0LjUgMTVDMTQuNzc2MSAxNSAxNSAxNC43NzYxIDE1IDE0LjVDMTUgMTQuMjIzOSAxNC43NzYxIDE0IDE0LjUgMTRDMTQuMjIzOSAxNCAxNCAxNC4yMjM5IDE0IDE0LjVDMTQgMTQuNzc2MSAxNC4yMjM5IDE1IDE0LjUgMTVaTTguNSAxMUM4Ljc3NjE0IDExIDkgMTAuNzc2MSA5IDEwLjVDOSAxMC4yMjM5IDguNzc2MTQgMTAgOC41IDEwQzguMjIzODYgMTAgOCAxMC4yMjM5IDggMTAuNUM4IDEwLjc3NjEgOC4yMjM4NiAxMSA4LjUgMTFaTTkgMTIuNUM5IDEyLjc3NjEgOC43NzYxNCAxMyA4LjUgMTNDOC4yMjM4NiAxMyA4IDEyLjc3NjEgOCAxMi41QzggMTIuMjIzOSA4LjIyMzg2IDEyIDguNSAxMkM4Ljc3NjE0IDEyIDkgMTIuMjIzOSA5IDEyLjVaTTguNSAxNUM4Ljc3NjE0IDE1IDkgMTQuNzc2MSA5IDE0LjVDOSAxNC4yMjM5IDguNzc2MTQgMTQgOC41IDE0QzguMjIzODYgMTQgOCAxNC4yMjM5IDggMTQuNUM4IDE0Ljc3NjEgOC4yMjM4NiAxNSA4LjUgMTVaTTExIDE0LjVDMTEgMTQuNzc2MSAxMC43NzYxIDE1IDEwLjUgMTVDMTAuMjIzOSAxNSAxMCAxNC43NzYxIDEwIDE0LjVDMTAgMTQuMjIzOSAxMC4yMjM5IDE0IDEwLjUgMTRDMTAuNzc2MSAxNCAxMSAxNC4yMjM5IDExIDE0LjVaTTEyLjUgMTVDMTIuNzc2MSAxNSAxMyAxNC43NzYxIDEzIDE0LjVDMTMgMTQuMjIzOSAxMi43NzYxIDE0IDEyLjUgMTRDMTIuMjIzOSAxNCAxMiAxNC4yMjM5IDEyIDE0LjVDMTIgMTQuNzc2MSAxMi4yMjM5IDE1IDEyLjUgMTVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxoZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41MDAwOSAwLjg3NzAxNEMzLjg0MjQxIDAuODc3MDE0IDAuODc3MjU4IDMuODQyMTYgMC44NzcyNTggNy40OTk4NEMwLjg3NzI1OCAxMS4xNTc1IDMuODQyNCAxNC4xMjI3IDcuNTAwMDkgMTQuMTIyN0MxMS4xNTc4IDE0LjEyMjcgMTQuMTIyOSAxMS4xNTc1IDE0LjEyMjkgNy40OTk4NEMxNC4xMjI5IDMuODQyMTYgMTEuMTU3NyAwLjg3NzAxNCA3LjUwMDA5IDAuODc3MDE0Wk0xLjgyNzI2IDcuNDk5ODRDMS44MjcyNiA0LjM2NjgzIDQuMzY3MDggMS44MjcwMSA3LjUwMDA5IDEuODI3MDFDMTAuNjMzMSAxLjgyNzAxIDEzLjE3MjkgNC4zNjY4MyAxMy4xNzI5IDcuNDk5ODRDMTMuMTcyOSAxMC42MzI4IDEwLjYzMzEgMTMuMTcyNyA3LjUwMDA5IDEzLjE3MjdDNC4zNjcwOCAxMy4xNzI3IDEuODI3MjYgMTAuNjMyOCAxLjgyNzI2IDcuNDk5ODRaTTggNC41MDAwMUM4IDQuMjIzODcgNy43NzYxNCA0LjAwMDAxIDcuNSA0LjAwMDAxQzcuMjIzODYgNC4wMDAwMSA3IDQuMjIzODcgNyA0LjUwMDAxVjcuNTAwMDFDNyA3LjYzMjYyIDcuMDUyNjggNy43NTk4IDcuMTQ2NDUgNy44NTM1N0w5LjE0NjQ1IDkuODUzNTdDOS4zNDE3MSAxMC4wNDg4IDkuNjU4MjkgMTAuMDQ4OCA5Ljg1MzU1IDkuODUzNTdDMTAuMDQ4OCA5LjY1ODMxIDEwLjA0ODggOS4zNDE3MiA5Ljg1MzU1IDkuMTQ2NDZMOCA3LjI5MjkxVjQuNTAwMDFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxnZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOS45NjQyNCAyLjY4NTcxQzEwLjA2NjggMi40MjkzMSA5Ljk0MjA5IDIuMTM4MzMgOS42ODU3IDIuMDM1NzdDOS40MjkzIDEuOTMzMjIgOS4xMzgzMiAyLjA1NzkyIDkuMDM1NzYgMi4zMTQzMkw1LjAzNTc2IDEyLjMxNDNDNC45MzMyIDEyLjU3MDcgNS4wNTc5MSAxMi44NjE3IDUuMzE0MyAxMi45NjQyQzUuNTcwNyAxMy4wNjY4IDUuODYxNjggMTIuOTQyMSA1Ljk2NDI0IDEyLjY4NTdMOS45NjQyNCAyLjY4NTcxWk0zLjg1MzU1IDUuMTQ2NDZDNC4wNDg4MiA1LjM0MTcyIDQuMDQ4ODIgNS42NTgzIDMuODUzNTUgNS44NTM1NkwyLjIwNzExIDcuNTAwMDFMMy44NTM1NSA5LjE0NjQ2QzQuMDQ4ODIgOS4zNDE3MiA0LjA0ODgyIDkuNjU4MyAzLjg1MzU1IDkuODUzNTZDMy42NTgyOSAxMC4wNDg4IDMuMzQxNzEgMTAuMDQ4OCAzLjE0NjQ1IDkuODUzNTZMMS4xNDY0NSA3Ljg1MzU2QzAuOTUxMTg0IDcuNjU4MyAwLjk1MTE4NCA3LjM0MTcyIDEuMTQ2NDUgNy4xNDY0NkwzLjE0NjQ1IDUuMTQ2NDZDMy4zNDE3MSA0Ljk1MTIgMy42NTgyOSA0Ljk1MTIgMy44NTM1NSA1LjE0NjQ2Wk0xMS4xNDY0IDUuMTQ2NDZDMTEuMzQxNyA0Ljk1MTIgMTEuNjU4MyA0Ljk1MTIgMTEuODUzNiA1LjE0NjQ2TDEzLjg1MzYgNy4xNDY0NkMxNC4wNDg4IDcuMzQxNzIgMTQuMDQ4OCA3LjY1ODMgMTMuODUzNiA3Ljg1MzU2TDExLjg1MzYgOS44NTM1NkMxMS42NTgzIDEwLjA0ODggMTEuMzQxNyAxMC4wNDg4IDExLjE0NjQgOS44NTM1NkMxMC45NTEyIDkuNjU4MyAxMC45NTEyIDkuMzQxNzIgMTEuMTQ2NCA5LjE0NjQ2TDEyLjc5MjkgNy41MDAwMUwxMS4xNDY0IDUuODUzNTZDMTAuOTUxMiA1LjY1ODMgMTAuOTUxMiA1LjM0MTcyIDExLjE0NjQgNS4xNDY0NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHZlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjcxMTQ0IDAuNzk2OTAyQzcuNTc3NDEgMC43MzQzNTcgNy40MjI1NyAwLjczNDM1NyA3LjI4ODU1IDAuNzk2OTAyTDEuMjg4NTUgMy41OTY5QzEuMTEyNTEgMy42NzkwNSAwLjk5OTk5MyAzLjg1NTczIDAuOTk5OTkzIDQuMDQ5OTlWMTAuOTVDMC45OTk5OTMgMTEuMTQ0MyAxLjExMjUxIDExLjMyMDkgMS4yODg1NSAxMS40MDMxTDcuMjg4NTUgMTQuMjAzMUM3LjQyMjU3IDE0LjI2NTYgNy41Nzc0MSAxNC4yNjU2IDcuNzExNDQgMTQuMjAzMUwxMy43MTE0IDExLjQwMzFDMTMuODg3NSAxMS4zMjA5IDE0IDExLjE0NDMgMTQgMTAuOTVWNC4wNDk5OUMxNCAzLjg1NTczIDEzLjg4NzUgMy42NzkwNSAxMy43MTE0IDMuNTk2OUw3LjcxMTQ0IDAuNzk2OTAyWk03LjQ5OTk5IDMuMTU2NzRMNS45ODAzOSAyLjUxMDkxTDcuNDk5OTkgMS44MDE3Nkw5LjAxOTU5IDIuNTEwOTFMNy40OTk5OSAzLjE1Njc0Wk03LjY5NTU2IDQuMTYwMThMMTAuMjM4MiAzLjA3OTU4TDEyLjI3MTkgNC4wMjg2NUw3LjQ5OTk5IDYuMDU2NzFMMi43MjgwOCA0LjAyODY1TDQuNzYxODEgMy4wNzk1OEw3LjMwNDQyIDQuMTYwMThDNy40MjkzOSA0LjIxMzMgNy41NzA1OSA0LjIxMzMgNy42OTU1NiA0LjE2MDE4Wk03Ljk5OTk5IDYuOTMwNzhMMTMgNC44MDU3OFY3LjkyOTY2TDExLjA4MjEgOC44MTE5QzEwLjcyNzMgOC45NzUwOSAxMC41IDkuMzI5ODggMTAuNSA5LjcyMDM5VjExLjc5ODJMNy45OTk5OSAxMi45NjQ5VjYuOTMwNzhaTTExLjUgMTEuMzMxNkwxMyAxMC42MzE2VjkuMDMwMzlMMTEuNSA5LjcyMDM5VjExLjMzMTZaTTYuOTk5OTkgNi45MzA3OFYxMi45NjQ5TDQuNTAyMzEgMTEuNzk5M1Y5LjcyMDM2QzQuNTAyMzEgOS4zMjk4NSA0LjI3NDk5IDguOTc1MDYgMy45MjAyMiA4LjgxMTg3TDEuOTk5OTkgNy45Mjg1NlY0LjgwNTc4TDYuOTk5OTkgNi45MzA3OFpNMS45OTk5OSAxMC42MzE2TDMuNTAyMzEgMTEuMzMyNkwzLjUwMjMxIDkuNzIwMzZMMS45OTk5OSA5LjAyOTI5VjEwLjYzMTZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxDZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC4wMDAxMiAxLjVDOC4wMDAxMiAxLjIyMzg2IDcuNzc2MjYgMSA3LjUwMDEyIDFDNy4yMjM5OCAxIDcuMDAwMTIgMS4yMjM4NiA3LjAwMDEyIDEuNVYxMy41QzcuMDAwMTIgMTMuNzc2MSA3LjIyMzk4IDE0IDcuNTAwMTIgMTRDNy43NzYyNiAxNCA4LjAwMDEyIDEzLjc3NjEgOC4wMDAxMiAxMy41VjEuNVpNMy4zMTgxMiA1LjgxOEMzLjQ5Mzg2IDUuNjQyMjcgMy40OTM4NiA1LjM1NzM0IDMuMzE4MTIgNS4xODE2MUMzLjE0MjM5IDUuMDA1ODcgMi44NTc0NiA1LjAwNTg3IDIuNjgxNzMgNS4xODE2MUwwLjY4MTcyOSA3LjE4MTYxQzAuNTA1OTkzIDcuMzU3MzQgMC41MDU5OTMgNy42NDIyNyAwLjY4MTcyOSA3LjgxOEwyLjY4MTczIDkuODE4QzIuODU3NDYgOS45OTM3NCAzLjE0MjM5IDkuOTkzNzQgMy4zMTgxMiA5LjgxOEMzLjQ5Mzg2IDkuNjQyMjcgMy40OTM4NiA5LjM1NzM0IDMuMzE4MTIgOS4xODE2MUwyLjA4NjMyIDcuOTQ5OEg1LjUwMDE3QzUuNzQ4NyA3Ljk0OTggNS45NTAxNyA3Ljc0ODMzIDUuOTUwMTcgNy40OTk4QzUuOTUwMTcgNy4yNTEyOCA1Ljc0ODcgNy4wNDk4IDUuNTAwMTcgNy4wNDk4SDIuMDg2MzJMMy4zMTgxMiA1LjgxOFpNMTIuMzE4MSA1LjE4MTYxQzEyLjE0MjQgNS4wMDU4NyAxMS44NTc1IDUuMDA1ODcgMTEuNjgxNyA1LjE4MTYxQzExLjUwNiA1LjM1NzM0IDExLjUwNiA1LjY0MjI3IDExLjY4MTcgNS44MThMMTIuOTEzNSA3LjA0OThIOS41MDAxN0M5LjI1MTY0IDcuMDQ5OCA5LjA1MDE3IDcuMjUxMjggOS4wNTAxNyA3LjQ5OThDOS4wNTAxNyA3Ljc0ODMzIDkuMjUxNjQgNy45NDk4IDkuNTAwMTcgNy45NDk4SDEyLjkxMzVMMTEuNjgxNyA5LjE4MTYxQzExLjUwNiA5LjM1NzM0IDExLjUwNiA5LjY0MjI3IDExLjY4MTcgOS44MThDMTEuODU3NSA5Ljk5Mzc0IDEyLjE0MjQgOS45OTM3NCAxMi4zMTgxIDkuODE4TDE0LjMxODEgNy44MThDMTQuNDkzOSA3LjY0MjI3IDE0LjQ5MzkgNy4zNTczNCAxNC4zMTgxIDcuMTgxNjFMMTIuMzE4MSA1LjE4MTYxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuMTQ5OTggMTRWMUgwLjg0OTk3NlYxNEgyLjE0OTk4Wk02LjE0OTk4IDE0VjFINC44NDk5OFYxNEg2LjE0OTk4Wk0xMC4xNSAxVjE0SDguODQ5OThWMUgxMC4xNVpNMTQuMTUgMTRWMUgxMi44NVYxNEgxNC4xNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHdlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk05Ljk0OTY5IDcuNDk5ODlDOS45NDk2OSA4Ljg1Mjg4IDguODUyODggOS45NDk2OSA3LjQ5OTg5IDkuOTQ5NjlDNi4xNDY5MSA5Ljk0OTY5IDUuMDUwMSA4Ljg1Mjg4IDUuMDUwMSA3LjQ5OTg5QzUuMDUwMSA2LjE0NjkxIDYuMTQ2OTEgNS4wNTAxIDcuNDk5ODkgNS4wNTAxQzguODUyODggNS4wNTAxIDkuOTQ5NjkgNi4xNDY5MSA5Ljk0OTY5IDcuNDk5ODlaTTEwLjg2MzIgOEMxMC42MjEzIDkuNjQwNTUgOS4yMDc2NCAxMC44OTk3IDcuNDk5ODkgMTAuODk5N0M1Ljc5MjE0IDEwLjg5OTcgNC4zNzg0NyA5LjY0MDU1IDQuMTM2NjIgOEgwLjVDMC4yMjM4NTggOCAwIDcuNzc2MTQgMCA3LjVDMCA3LjIyMzg2IDAuMjIzODU4IDcgMC41IDdINC4xMzY1OUM0LjM3ODM1IDUuMzU5MzUgNS43OTIwNiA0LjEwMDEgNy40OTk4OSA0LjEwMDFDOS4yMDc3MiA0LjEwMDEgMTAuNjIxNCA1LjM1OTM1IDEwLjg2MzIgN0gxNC41QzE0Ljc3NjEgNyAxNSA3LjIyMzg2IDE1IDcuNUMxNSA3Ljc3NjE0IDE0Ljc3NjEgOCAxNC41IDhIMTAuODYzMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGJlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjY3MTI5IDMuMTQ2MzRDNC40NzYwMyAzLjM0MTYxIDQuNDc2MDMgMy42NTgxOSA0LjY3MTI5IDMuODUzNDVMNy4xNDYxNiA2LjMyODMzQzcuMzQxNDIgNi41MjM1OSA3LjY1ODAxIDYuNTIzNTkgNy44NTMyNyA2LjMyODMzTDEwLjMyODEgMy44NTM0NUMxMC41MjM0IDMuNjU4MTkgMTAuNTIzNCAzLjM0MTYxIDEwLjMyODEgMy4xNDYzNEw3Ljg1MzI3IDAuNjcxNDcxQzcuNjU4MDEgMC40NzYyMDkgNy4zNDE0MiAwLjQ3NjIwOSA3LjE0NjE2IDAuNjcxNDcxTDQuNjcxMjkgMy4xNDYzNFpNNy40OTk3MSA1LjI2NzY2TDUuNzMxOTUgMy40OTk5TDcuNDk5NzEgMS43MzIxM0w5LjI2NzQ4IDMuNDk5OUw3LjQ5OTcxIDUuMjY3NjZaTTguNjcxMjkgNy4xNDYzNEM4LjQ3NjAzIDcuMzQxNjEgOC40NzYwMyA3LjY1ODE5IDguNjcxMjkgNy44NTM0NUwxMS4xNDYyIDEwLjMyODNDMTEuMzQxNCAxMC41MjM2IDExLjY1OCAxMC41MjM2IDExLjg1MzMgMTAuMzI4M0wxNC4zMjgxIDcuODUzNDVDMTQuNTIzNCA3LjY1ODE5IDE0LjUyMzQgNy4zNDE2MSAxNC4zMjgxIDcuMTQ2MzRMMTEuODUzMyA0LjY3MTQ3QzExLjY1OCA0LjQ3NjIxIDExLjM0MTQgNC40NzYyMSAxMS4xNDYyIDQuNjcxNDdMOC42NzEyOSA3LjE0NjM0Wk0xMS40OTk3IDkuMjY3NjZMOS43MzE5NSA3LjQ5OTlMMTEuNDk5NyA1LjczMjEzTDEzLjI2NzUgNy40OTk5TDExLjQ5OTcgOS4yNjc2NlpNNC42NzEyOSAxMS44NTM1QzQuNDc2MDMgMTEuNjU4MiA0LjQ3NjAzIDExLjM0MTYgNC42NzEyOSAxMS4xNDYzTDcuMTQ2MTYgOC42NzE0N0M3LjM0MTQyIDguNDc2MjEgNy42NTgwMSA4LjQ3NjIxIDcuODUzMjcgOC42NzE0N0wxMC4zMjgxIDExLjE0NjNDMTAuNTIzNCAxMS4zNDE2IDEwLjUyMzQgMTEuNjU4MiAxMC4zMjgxIDExLjg1MzVMNy44NTMyNyAxNC4zMjgzQzcuNjU4MDEgMTQuNTIzNiA3LjM0MTQyIDE0LjUyMzYgNy4xNDYxNiAxNC4zMjgzTDQuNjcxMjkgMTEuODUzNVpNNS43MzE5NSAxMS40OTk5TDcuNDk5NzEgMTMuMjY3N0w5LjI2NzQ4IDExLjQ5OTlMNy40OTk3MSA5LjczMjEzTDUuNzMxOTUgMTEuNDk5OVpNMC42NzEyODggNy4xNDY0OUMwLjQ3NjAyNiA3LjM0MTc1IDAuNDc2MDI2IDcuNjU4MzQgMC42NzEyODggNy44NTM2TDMuMTQ2MTYgMTAuMzI4NUMzLjM0MTQyIDEwLjUyMzcgMy42NTgwMSAxMC41MjM3IDMuODUzMjcgMTAuMzI4NUw2LjMyODE0IDcuODUzNkM2LjUyMzQgNy42NTgzNCA2LjUyMzQgNy4zNDE3NSA2LjMyODE0IDcuMTQ2NDlMMy44NTMyNyA0LjY3MTYyQzMuNjU4MDEgNC40NzYzNiAzLjM0MTQyIDQuNDc2MzYgMy4xNDYxNiA0LjY3MTYyTDAuNjcxMjg4IDcuMTQ2NDlaTTMuNDk5NzIgOS4yNjc4MUwxLjczMTk1IDcuNTAwMDVMMy40OTk3MiA1LjczMjI4TDUuMjY3NDggNy41MDAwNUwzLjQ5OTcyIDkuMjY3ODFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx5ZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy44NzkzNSAxSDMuOUgxMS4xSDExLjEyMDdDMTEuNTIzMSAwLjk5OTk5NCAxMS44NTUzIDAuOTk5OTg5IDEyLjEyNTkgMS4wMjIxQzEyLjQwNyAxLjA0NTA2IDEyLjY2NTMgMS4wOTQzNCAxMi45MDggMS4yMTc5OUMxMy4yODQzIDEuNDA5NzMgMTMuNTkwMyAxLjcxNTcgMTMuNzgyIDIuMDkyMDJDMTMuOTA1NyAyLjMzNDY5IDEzLjk1NDkgMi41OTMwNCAxMy45Nzc5IDIuODc0MDlDMTQgMy4xNDQ2OCAxNCAzLjQ3Njg2IDE0IDMuODc5MzRWMy45VjExLjFWMTEuMTIwN0MxNCAxMS41MjMxIDE0IDExLjg1NTMgMTMuOTc3OSAxMi4xMjU5QzEzLjk1NDkgMTIuNDA3IDEzLjkwNTcgMTIuNjY1MyAxMy43ODIgMTIuOTA4QzEzLjU5MDMgMTMuMjg0MyAxMy4yODQzIDEzLjU5MDMgMTIuOTA4IDEzLjc4MkMxMi42NjUzIDEzLjkwNTcgMTIuNDA3IDEzLjk1NDkgMTIuMTI1OSAxMy45Nzc5QzExLjg1NTMgMTQgMTEuNTIzMSAxNCAxMS4xMjA3IDE0SDExLjFIMy45SDMuODc5MzRDMy40NzY4NiAxNCAzLjE0NDY4IDE0IDIuODc0MDkgMTMuOTc3OUMyLjU5MzA0IDEzLjk1NDkgMi4zMzQ2OSAxMy45MDU3IDIuMDkyMDIgMTMuNzgyQzEuNzE1NyAxMy41OTAzIDEuNDA5NzMgMTMuMjg0MyAxLjIxNzk5IDEyLjkwOEMxLjA5NDM0IDEyLjY2NTMgMS4wNDUwNiAxMi40MDcgMS4wMjIxIDEyLjEyNTlDMC45OTk5ODkgMTEuODU1MyAwLjk5OTk5NCAxMS41MjMxIDEgMTEuMTIwN1YxMS4xMjA3VjExLjFWMy45VjMuODc5MzVWMy44NzkzNEMwLjk5OTk5NCAzLjQ3Njg2IDAuOTk5OTg5IDMuMTQ0NjggMS4wMjIxIDIuODc0MDlDMS4wNDUwNiAyLjU5MzA0IDEuMDk0MzQgMi4zMzQ2OSAxLjIxNzk5IDIuMDkyMDJDMS40MDk3MyAxLjcxNTcgMS43MTU3IDEuNDA5NzMgMi4wOTIwMiAxLjIxNzk5QzIuMzM0NjkgMS4wOTQzNCAyLjU5MzA0IDEuMDQ1MDYgMi44NzQwOSAxLjAyMjFDMy4xNDQ2OSAwLjk5OTk4OSAzLjQ3Njg3IDAuOTk5OTk0IDMuODc5MzUgMVpNMi45NTU1MiAyLjAxODc4QzIuNzM2MzEgMi4wMzY2OSAyLjYyNDIxIDIuMDY5MTUgMi41NDYwMSAyLjEwODk5QzIuMzU3ODUgMi4yMDQ4NyAyLjIwNDg3IDIuMzU3ODUgMi4xMDg5OSAyLjU0NjAxQzIuMDY5MTUgMi42MjQyMSAyLjAzNjY5IDIuNzM2MzEgMi4wMTg3OCAyLjk1NTUyQzIuMDAwMzkgMy4xODA1NiAyIDMuNDcxNzEgMiAzLjlWN0g3VjJIMy45QzMuNDcxNzEgMiAzLjE4MDU2IDIuMDAwMzkgMi45NTU1MiAyLjAxODc4Wk03IDhIMlYxMS4xQzIgMTEuNTI4MyAyLjAwMDM5IDExLjgxOTQgMi4wMTg3OCAxMi4wNDQ1QzIuMDM2NjkgMTIuMjYzNyAyLjA2OTE1IDEyLjM3NTggMi4xMDg5OSAxMi40NTRDMi4yMDQ4NyAxMi42NDIyIDIuMzU3ODUgMTIuNzk1MSAyLjU0NjAxIDEyLjg5MUMyLjYyNDIxIDEyLjkzMDkgMi43MzYzMSAxMi45NjMzIDIuOTU1NTIgMTIuOTgxMkMzLjE4MDU2IDEyLjk5OTYgMy40NzE3MSAxMyAzLjkgMTNIN1Y4Wk04IDhIMTNWMTEuMUMxMyAxMS41MjgzIDEyLjk5OTYgMTEuODE5NCAxMi45ODEyIDEyLjA0NDVDMTIuOTYzMyAxMi4yNjM3IDEyLjkzMDkgMTIuMzc1OCAxMi44OTEgMTIuNDU0QzEyLjc5NTEgMTIuNjQyMiAxMi42NDIyIDEyLjc5NTEgMTIuNDU0IDEyLjg5MUMxMi4zNzU4IDEyLjkzMDkgMTIuMjYzNyAxMi45NjMzIDEyLjA0NDUgMTIuOTgxMkMxMS44MTk0IDEyLjk5OTYgMTEuNTI4MyAxMyAxMS4xIDEzSDhWOFpNMTMgN0g4VjJIMTEuMUMxMS41MjgzIDIgMTEuODE5NCAyLjAwMDM5IDEyLjA0NDUgMi4wMTg3OEMxMi4yNjM3IDIuMDM2NjkgMTIuMzc1OCAyLjA2OTE1IDEyLjQ1NCAyLjEwODk5QzEyLjY0MjIgMi4yMDQ4NyAxMi43OTUxIDIuMzU3ODUgMTIuODkxIDIuNTQ2MDFDMTIuOTMwOSAyLjYyNDIxIDEyLjk2MzMgMi43MzYzMSAxMi45ODEyIDIuOTU1NTJDMTIuOTk5NiAzLjE4MDU2IDEzIDMuNDcxNzEgMTMgMy45VjdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx4ZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy44NTM2NyAxLjQ4OTU2QzcuNjU4NDEgMS4yOTQyOSA3LjM0MTgyIDEuMjk0MjkgNy4xNDY1NiAxLjQ4OTU2TDEuNDg5NzEgNy4xNDY0MUMxLjI5NDQ1IDcuMzQxNjcgMS4yOTQ0NSA3LjY1ODI1IDEuNDg5NzEgNy44NTM1Mkw3LjE0NjU2IDEzLjUxMDRDNy4zNDE4MiAxMy43MDU2IDcuNjU4NDEgMTMuNzA1NiA3Ljg1MzY3IDEzLjUxMDRMMTMuNTEwNSA3Ljg1MzUyQzEzLjcwNTggNy42NTgyNSAxMy43MDU4IDcuMzQxNjcgMTMuNTEwNSA3LjE0NjQxTDcuODUzNjcgMS40ODk1NlpNNy41IDIuNTUwMzNMMi41NTAzNyA3LjQ5OTk2TDcuNSAxMi40NDk2VjIuNTUwMzNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxrZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy4xNDY1IDEuNDg5NTlDNy4zNDE3NiAxLjI5NDMyIDcuNjU4MzUgMS4yOTQzMiA3Ljg1MzYxIDEuNDg5NTlMMTMuNTEwNSA3LjE0NjQ0QzEzLjcwNTcgNy4zNDE3IDEzLjcwNTcgNy42NTgyOSAxMy41MTA1IDcuODUzNTVMNy44NTM2MSAxMy41MTA0QzcuNjU4MzUgMTMuNzA1NyA3LjM0MTc2IDEzLjcwNTcgNy4xNDY1IDEzLjUxMDRMMS40ODk2NSA3Ljg1MzU1QzEuMjk0MzkgNy42NTgyOSAxLjI5NDM5IDcuMzQxNyAxLjQ4OTY1IDcuMTQ2NDRMNy4xNDY1IDEuNDg5NTlaTTcuNTAwMDUgMi41NTAyNUwyLjU1MDMxIDcuNDk5OTlMNy41MDAwNSAxMi40NDk3TDEyLjQ0OTggNy40OTk5OUw3LjUwMDA1IDIuNTUwMjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxTZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy44NTM2MSAxLjQ4OTU5QzcuNjU4MzUgMS4yOTQzMiA3LjM0MTc2IDEuMjk0MzIgNy4xNDY1IDEuNDg5NTlMMS40ODk2NSA3LjE0NjQ0QzEuMjk0MzkgNy4zNDE3IDEuMjk0MzkgNy42NTgyOSAxLjQ4OTY1IDcuODUzNTVMMy45NjQ1IDEwLjMyODRMMS42NDY0NCAxMi42NDY0QzEuNDUxMTggMTIuODQxNyAxLjQ1MTE4IDEzLjE1ODMgMS42NDY0NCAxMy4zNTM2QzEuODQxNzEgMTMuNTQ4OCAyLjE1ODI5IDEzLjU0ODggMi4zNTM1NSAxMy4zNTM2TDQuNjcxNiAxMS4wMzU1TDcuMTQ2NSAxMy41MTA0QzcuMzQxNzYgMTMuNzA1NyA3LjY1ODM1IDEzLjcwNTcgNy44NTM2MSAxMy41MTA0TDEzLjUxMDUgNy44NTM1NUMxMy43MDU3IDcuNjU4MjkgMTMuNzA1NyA3LjM0MTcgMTMuNTEwNSA3LjE0NjQ0TDExLjAzNTYgNC42NzE1NEwxMy4zNTM1IDIuMzUzNTVDMTMuNTQ4OCAyLjE1ODI5IDEzLjU0ODggMS44NDE3MSAxMy4zNTM1IDEuNjQ2NDVDMTMuMTU4MyAxLjQ1MTE4IDEyLjg0MTcgMS40NTExOCAxMi42NDY0IDEuNjQ2NDVMMTAuMzI4NSAzLjk2NDQzTDcuODUzNjEgMS40ODk1OVpNOS42MjEzNSA0LjY3MTU0TDcuNTAwMDUgMi41NTAyNUwyLjU1MDMxIDcuNDk5OTlMNC42NzE2IDkuNjIxMjlMOS42MjEzNSA0LjY3MTU0Wk01LjM3ODcxIDEwLjMyODRMNy41MDAwNSAxMi40NDk3TDEyLjQ0OTggNy40OTk5OUwxMC4zMjg1IDUuMzc4NjVMNS4zNzg3MSAxMC4zMjg0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sT2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEyLjgwMzQgNy4xNDY0NEMxMi45OTg2IDYuOTUxMTggMTMuMzE1MiA2Ljk1MTE4IDEzLjUxMDUgNy4xNDY0NEMxMy43MDU3IDcuMzQxNyAxMy43MDU3IDcuNjU4MjkgMTMuNTEwNSA3Ljg1MzU1QzEzLjMxNTIgOC4wNDg4MSAxMi45OTg2IDguMDQ4ODEgMTIuODAzNCA3Ljg1MzU1QzEyLjYwODEgNy42NTgyOCAxMi42MDgxIDcuMzQxNyAxMi44MDM0IDcuMTQ2NDRaTTEyLjA5NjIgOC41NjA2NUMxMi4yOTE1IDguNzU1OTIgMTIuMjkxNSA5LjA3MjUgMTIuMDk2MiA5LjI2Nzc2QzExLjkwMSA5LjQ2MzAyIDExLjU4NDQgOS40NjMwMiAxMS4zODkxIDkuMjY3NzZDMTEuMTkzOSA5LjA3MjUgMTEuMTkzOSA4Ljc1NTkyIDExLjM4OTEgOC41NjA2NUMxMS41ODQ0IDguMzY1MzkgMTEuOTAxIDguMzY1MzkgMTIuMDk2MiA4LjU2MDY1Wk0xMC42ODIgOS45NzQ4N0MxMC44NzczIDEwLjE3MDEgMTAuODc3MyAxMC40ODY3IDEwLjY4MiAxMC42ODJDMTAuNDg2OCAxMC44NzcyIDEwLjE3MDIgMTAuODc3MiA5Ljk3NDkzIDEwLjY4MkM5Ljc3OTY3IDEwLjQ4NjcgOS43Nzk2NyAxMC4xNzAxIDkuOTc0OTMgOS45NzQ4N0MxMC4xNzAyIDkuNzc5NiAxMC40ODY4IDkuNzc5NiAxMC42ODIgOS45NzQ4N1pNOS4yNjc4MiAxMS4zODkxQzkuNDYzMDggMTEuNTg0MyA5LjQ2MzA4IDExLjkwMDkgOS4yNjc4MiAxMi4wOTYyQzkuMDcyNTYgMTIuMjkxNSA4Ljc1NTk4IDEyLjI5MTUgOC41NjA3MSAxMi4wOTYyQzguMzY1NDUgMTEuOTAwOSA4LjM2NTQ1IDExLjU4NDMgOC41NjA3MiAxMS4zODkxQzguNzU1OTggMTEuMTkzOCA5LjA3MjU2IDExLjE5MzggOS4yNjc4MiAxMS4zODkxWk03LjE0NjUgMTMuNTEwNEM2Ljk1MTI0IDEzLjMxNTEgNi45NTEyNCAxMi45OTg2IDcuMTQ2NSAxMi44MDMzQzcuMTcwOTEgMTIuNzc4OSA3LjE5NzIxIDEyLjc1NzUgNy4yMjQ5NCAxMi43MzkyQzcuNDE5MDEgMTIuNjExMSA3LjY4Mjc1IDEyLjYzMjQgNy44NTM2MSAxMi44MDMzQzguMDQ4ODcgMTIuOTk4NiA4LjA0ODg3IDEzLjMxNTEgNy44NTM2MSAxMy41MTA0QzcuNjU4MzUgMTMuNzA1NyA3LjM0MTc2IDEzLjcwNTcgNy4xNDY1IDEzLjUxMDRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjkwMzg2IDguNTYwNjVDMi43MDg2IDguNzU1OTIgMi43MDg2IDkuMDcyNSAyLjkwMzg2IDkuMjY3NzYgMy4wOTkxMiA5LjQ2MzAyIDMuNDE1NzEgOS40NjMwMiAzLjYxMDk3IDkuMjY3NzYgMy44MDYyMyA5LjA3MjUgMy44MDYyMyA4Ljc1NTkyIDMuNjEwOTcgOC41NjA2NSAzLjQxNTcxIDguMzY1MzkgMy4wOTkxMiA4LjM2NTM5IDIuOTAzODYgOC41NjA2NXpNNC4zMTgwNyA5Ljk3NDg3QzQuMTIyODEgMTAuMTcwMSA0LjEyMjgxIDEwLjQ4NjcgNC4zMTgwNyAxMC42ODIgNC41MTMzNCAxMC44NzcyIDQuODI5OTIgMTAuODc3MiA1LjAyNTE4IDEwLjY4MiA1LjIyMDQ0IDEwLjQ4NjcgNS4yMjA0NCAxMC4xNzAxIDUuMDI1MTggOS45NzQ4NyA0LjgyOTkyIDkuNzc5NiA0LjUxMzM0IDkuNzc5NiA0LjMxODA3IDkuOTc0ODd6TTUuNzMyMjkgMTEuMzg5MUM1LjUzNzAzIDExLjU4NDMgNS41MzcwMyAxMS45MDA5IDUuNzMyMjkgMTIuMDk2MiA1LjkyNzU1IDEyLjI5MTQgNi4yNDQxMyAxMi4yOTE1IDYuNDM5MzkgMTIuMDk2MiA2LjYzNDY2IDExLjkwMDkgNi42MzQ2NiAxMS41ODQzIDYuNDM5MzkgMTEuMzg5MSA2LjI0NDEzIDExLjE5MzggNS45Mjc1NSAxMS4xOTM4IDUuNzMyMjkgMTEuMzg5MXpNMi4xOTY3NSA3Ljg1MzU1QzIuMzY3NjEgNy42ODI2OSAyLjM4ODk3IDcuNDE4OTUgMi4yNjA4MiA3LjIyNDg4IDIuMDkwNDYgNi45NjY4NCAxLjcxMDYzIDYuOTI1NDYgMS40ODk2NSA3LjE0NjQ0IDEuMjk0MzkgNy4zNDE3IDEuMjk0MzkgNy42NTgyOSAxLjQ4OTY1IDcuODUzNTUgMS42ODQ5MSA4LjA0ODgxIDIuMDAxNDkgOC4wNDg4MSAyLjE5Njc1IDcuODUzNTV6TTMuNjEwOTcgNS43MzIyM0MzLjQxNTcxIDUuNTM2OTYgMy4wOTkxMiA1LjUzNjk2IDIuOTAzODYgNS43MzIyMyAyLjcwODYgNS45Mjc0OSAyLjcwODYgNi4yNDQwNyAyLjkwMzg2IDYuNDM5MzMgMy4wOTkxMiA2LjYzNDYgMy40MTU3MSA2LjYzNDYgMy42MTA5NyA2LjQzOTMzIDMuODA2MjMgNi4yNDQwNyAzLjgwNjIzIDUuOTI3NDkgMy42MTA5NyA1LjczMjIzek01LjAyNTE4IDQuMzE4MDFDNC44Mjk5MiA0LjEyMjc1IDQuNTEzMzQgNC4xMjI3NSA0LjMxODA3IDQuMzE4MDEgNC4xMjI4MSA0LjUxMzI4IDQuMTIyODEgNC44Mjk4NiA0LjMxODA3IDUuMDI1MTIgNC41MTMzNCA1LjIyMDM4IDQuODI5OTIgNS4yMjAzOCA1LjAyNTE4IDUuMDI1MTIgNS4yMjA0NCA0LjgyOTg2IDUuMjIwNDQgNC41MTMyOCA1LjAyNTE4IDQuMzE4MDF6TTYuNDM5MzkgMi45MDM4QzYuMjQ0MTMgMi43MDg1NCA1LjkyNzU1IDIuNzA4NTQgNS43MzIyOSAyLjkwMzggNS41MzcwMyAzLjA5OTA2IDUuNTM3MDMgMy40MTU2NCA1LjczMjI5IDMuNjEwOTEgNS45Mjc1NSAzLjgwNjE3IDYuMjQ0MTMgMy44MDYxNyA2LjQzOTM5IDMuNjEwOTEgNi42MzQ2NiAzLjQxNTY0IDYuNjM0NjYgMy4wOTkwNiA2LjQzOTM5IDIuOTAzOHpNNy44NTM2MSAxLjQ4OTU5QzcuNjU4MzUgMS4yOTQzMiA3LjM0MTc2IDEuMjk0MzIgNy4xNDY1IDEuNDg5NTkgNi45NTEyNCAxLjY4NDg1IDYuOTUxMjQgMi4wMDE0MyA3LjE0NjUgMi4xOTY2OSA3LjM0MTc2IDIuMzkxOTYgNy42NTgzNSAyLjM5MTk2IDcuODUzNjEgMi4xOTY2OSA4LjA0ODg3IDIuMDAxNDMgOC4wNDg4NyAxLjY4NDg1IDcuODUzNjEgMS40ODk1OXpNOS4yNjc4MiAyLjkwMzhDOS4wNzI1NiAyLjcwODU0IDguNzU1OTggMi43MDg1NCA4LjU2MDcxIDIuOTAzOCA4LjM2NTQ1IDMuMDk5MDYgOC4zNjU0NSAzLjQxNTY0IDguNTYwNzEgMy42MTA5MSA4Ljc1NTk4IDMuODA2MTcgOS4wNzI1NiAzLjgwNjE3IDkuMjY3ODIgMy42MTA5MSA5LjQ2MzA4IDMuNDE1NjQgOS40NjMwOCAzLjA5OTA2IDkuMjY3ODIgMi45MDM4ek0xMC42ODIgNC4zMTgwMUMxMC40ODY4IDQuMTIyNzUgMTAuMTcwMiA0LjEyMjc1IDkuOTc0OTMgNC4zMTgwMSA5Ljc3OTY3IDQuNTEzMjggOS43Nzk2NyA0LjgyOTg2IDkuOTc0OTMgNS4wMjUxMiAxMC4xNzAyIDUuMjIwMzggMTAuNDg2OCA1LjIyMDM4IDEwLjY4MiA1LjAyNTEyIDEwLjg3NzMgNC44Mjk4NiAxMC44NzczIDQuNTEzMjggMTAuNjgyIDQuMzE4MDF6TTEyLjA5NjIgNS43MzIyM0MxMS45MDEgNS41MzY5NiAxMS41ODQ0IDUuNTM2OTYgMTEuMzg5MSA1LjczMjIzIDExLjE5MzkgNS45Mjc0OSAxMS4xOTM5IDYuMjQ0MDcgMTEuMzg5MSA2LjQzOTMzIDExLjU4NDQgNi42MzQ2IDExLjkwMSA2LjYzNDYgMTIuMDk2MiA2LjQzOTMzIDEyLjI5MTUgNi4yNDQwNyAxMi4yOTE1IDUuOTI3NDkgMTIuMDk2MiA1LjczMjIzelwiLGZpbGw6bn0pKX0sTWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIgMS41QzIgMS43NzYxNCAxLjc3NjE0IDIgMS41IDJDMS4yMjM4NiAyIDEgMS43NzYxNCAxIDEuNUMxIDEuMjIzODYgMS4yMjM4NiAxIDEuNSAxQzEuNzc2MTQgMSAyIDEuMjIzODYgMiAxLjVaTTUgMTNIMTBWMkw1IDJMNSAxM1pNNCAxM0M0IDEzLjU1MjMgNC40NDc3MiAxNCA1IDE0SDEwQzEwLjU1MjMgMTQgMTEgMTMuNTUyMyAxMSAxM1YyQzExIDEuNDQ3NzIgMTAuNTUyMyAxIDEwIDFINUM0LjQ0NzcyIDEgNCAxLjQ0NzcxIDQgMlYxM1pNMTMuNSAyQzEzLjc3NjEgMiAxNCAxLjc3NjE0IDE0IDEuNUMxNCAxLjIyMzg2IDEzLjc3NjEgMSAxMy41IDFDMTMuMjIzOSAxIDEzIDEuMjIzODYgMTMgMS41QzEzIDEuNzc2MTQgMTMuMjIzOSAyIDEzLjUgMlpNMiAzLjVDMiAzLjc3NjE0IDEuNzc2MTQgNCAxLjUgNEMxLjIyMzg2IDQgMSAzLjc3NjE0IDEgMy41QzEgMy4yMjM4NiAxLjIyMzg2IDMgMS41IDNDMS43NzYxNCAzIDIgMy4yMjM4NiAyIDMuNVpNMTMuNSA0QzEzLjc3NjEgNCAxNCAzLjc3NjE0IDE0IDMuNUMxNCAzLjIyMzg2IDEzLjc3NjEgMyAxMy41IDNDMTMuMjIzOSAzIDEzIDMuMjIzODYgMTMgMy41QzEzIDMuNzc2MTQgMTMuMjIzOSA0IDEzLjUgNFpNMiA1LjVDMiA1Ljc3NjE0IDEuNzc2MTQgNiAxLjUgNkMxLjIyMzg2IDYgMSA1Ljc3NjE0IDEgNS41QzEgNS4yMjM4NiAxLjIyMzg2IDUgMS41IDVDMS43NzYxNCA1IDIgNS4yMjM4NiAyIDUuNVpNMTMuNSA2QzEzLjc3NjEgNiAxNCA1Ljc3NjE0IDE0IDUuNUMxNCA1LjIyMzg2IDEzLjc3NjEgNSAxMy41IDVDMTMuMjIzOSA1IDEzIDUuMjIzODYgMTMgNS41QzEzIDUuNzc2MTQgMTMuMjIzOSA2IDEzLjUgNlpNMiA3LjVDMiA3Ljc3NjE0IDEuNzc2MTQgOCAxLjUgOEMxLjIyMzg2IDggMSA3Ljc3NjE0IDEgNy41QzEgNy4yMjM4NiAxLjIyMzg2IDcgMS41IDdDMS43NzYxNCA3IDIgNy4yMjM4NiAyIDcuNVpNMTMuNSA4QzEzLjc3NjEgOCAxNCA3Ljc3NjE0IDE0IDcuNUMxNCA3LjIyMzg2IDEzLjc3NjEgNyAxMy41IDdDMTMuMjIzOSA3IDEzIDcuMjIzODYgMTMgNy41QzEzIDcuNzc2MTQgMTMuMjIzOSA4IDEzLjUgOFpNMiA5LjVDMiA5Ljc3NjE0IDEuNzc2MTQgMTAgMS41IDEwQzEuMjIzODYgMTAgMSA5Ljc3NjE0IDEgOS41QzEgOS4yMjM4NiAxLjIyMzg2IDkgMS41IDlDMS43NzYxNCA5IDIgOS4yMjM4NiAyIDkuNVpNMTMuNSAxMEMxMy43NzYxIDEwIDE0IDkuNzc2MTQgMTQgOS41QzE0IDkuMjIzODYgMTMuNzc2MSA5IDEzLjUgOUMxMy4yMjM5IDkgMTMgOS4yMjM4NiAxMyA5LjVDMTMgOS43NzYxNCAxMy4yMjM5IDEwIDEzLjUgMTBaTTIgMTEuNUMyIDExLjc3NjEgMS43NzYxNCAxMiAxLjUgMTJDMS4yMjM4NiAxMiAxIDExLjc3NjEgMSAxMS41QzEgMTEuMjIzOSAxLjIyMzg2IDExIDEuNSAxMUMxLjc3NjE0IDExIDIgMTEuMjIzOSAyIDExLjVaTTEzLjUgMTJDMTMuNzc2MSAxMiAxNCAxMS43NzYxIDE0IDExLjVDMTQgMTEuMjIzOSAxMy43NzYxIDExIDEzLjUgMTFDMTMuMjIzOSAxMSAxMyAxMS4yMjM5IDEzIDExLjVDMTMgMTEuNzc2MSAxMy4yMjM5IDEyIDEzLjUgMTJaTTIgMTMuNUMyIDEzLjc3NjEgMS43NzYxNCAxNCAxLjUgMTRDMS4yMjM4NiAxNCAxIDEzLjc3NjEgMSAxMy41QzEgMTMuMjIzOSAxLjIyMzg2IDEzIDEuNSAxM0MxLjc3NjE0IDEzIDIgMTMuMjIzOSAyIDEzLjVaTTEzLjUgMTRDMTMuNzc2MSAxNCAxNCAxMy43NzYxIDE0IDEzLjVDMTQgMTMuMjIzOSAxMy43NzYxIDEzIDEzLjUgMTNDMTMuMjIzOSAxMyAxMyAxMy4yMjM5IDEzIDEzLjVDMTMgMTMuNzc2MSAxMy4yMjM5IDE0IDEzLjUgMTRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxMZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTIuMDY5NyAxLjc2NzQ2QzEyLjQ4MDcgMS4yMTk0NyAxMS40NjA1IDAuNDU0MzExIDExLjA0OTUgMS4wMDIzQzEwLjYzODUgMS41NTAyOCAxMS42NTg4IDIuMzE1NDQgMTIuMDY5NyAxLjc2NzQ2Wk04LjM5MjYzIDEuMDc4MTFDNy4xNTU4NSAwLjk1MDYwMiA1Ljc4MjMgMS4xNjM0OCA0LjU4NDMzIDEuNzA5MzdDMy4zODU1MiAyLjI1NTYzIDIuMzI3MzUgMy4xNTMwOSAxLjc4ODQ0IDQuNDE4MzJDMS4zNzU3NCA1LjM4NzI0IDEuMDE3MTUgNi4yODExMyAxLjAwMDg4IDcuNDQzNTRDMC45ODQ3MjQgOC41OTg0NCAxLjMwNTIyIDkuOTY4OTggMi4xMzE3NCAxMS45MjhDMi42MTE0MiAxMy4wNjQ5IDQuMDM5NjMgMTMuNTQ0NiA1LjEzODk1IDEzLjgwNzlDNi40MDgzNiAxNC4xMTE5IDcuODA4NTcgMTQuMTkxNCA4LjY2NDQgMTQuMDc0MkM5LjM2NTE1IDEzLjk3ODIgMTAuMTQ0OCAxMy44Mjg0IDEwLjc5ODcgMTMuMjk3QzExLjg5NzcgMTIuNDAzOSAxMi45MDA5IDExLjM5NTUgMTMuNDk5NCAxMC4zMzkzQzE0LjEwNCA5LjI3MjIxIDE0LjMyNTYgOC4wOTIwNyAxMy43MjE2IDYuOTUzMjRDMTMuNTYyOCA2LjY1MzczIDEzLjMxNiA2LjU3NzM0IDEzLjA0MTIgNi40OTIzQzEyLjkzNzQgNi40NjAxNiAxMi44Mjk1IDYuNDI2NzggMTIuNzIwOSA2LjM3OTY2QzExLjYyMTEgNS45MDIzNCAxMC45NjQ2IDUuMzQ5NjMgMTAuOTEzNSA1LjAyODc2QzEwLjg2NTYgNC43MjgwOCAxMC45MjIxIDQuNTE0NjMgMTAuOTgxMSA0LjI5MTgxQzExLjAxMjkgNC4xNzE5OSAxMS4wNDUzIDQuMDQ5NDcgMTEuMDYyNiAzLjkwOTIyQzExLjA4MzggMy43MzczNyAxMS4wODE0IDMuMzMzMTkgMTAuNjk5NiAzLjEyNzYxQzEwLjQwNDggMi45Njg4OCAxMC4yMTY0IDIuNjU4NDMgMTAuMDQwNyAyLjM2OTA0QzkuOTk3NDIgMi4yOTc3NSA5Ljk1NDkyIDIuMjI3NzMgOS45MTE4IDIuMTYxNThDOS42MjYzNCAxLjcyMzY3IDkuMjA3NjkgMS4xNjIxMyA4LjM5MjYzIDEuMDc4MTFaTTQuOTk4OTkgMi42MTkzNUMzLjk2NDgzIDMuMDkwNTggMy4xMjU1NCAzLjgzMDk3IDIuNzA4NDYgNC44MTAxOEMyLjI5ODA4IDUuNzczNjggMi4wMTQwNiA2LjUwODczIDIuMDAwNzkgNy40NTc1M0MxLjk4NzQxIDguNDEzODUgMi4yNTA0MyA5LjYzNjggMy4wNTMxIDExLjUzOTNDMy4zOTE4MSAxMi4zNDIxIDQuNjIxNjcgMTIuNjU1NyA1LjM3MTg2IDEyLjgzNTRDNi41NDkzIDEzLjExNzQgNy44MjIgMTMuMTgwMiA4LjUyODY4IDEzLjA4MzRDOS4yMTI3MSAxMi45ODk3IDkuNzQ1NjggMTIuODY0MiAxMC4xNjgxIDEyLjUyMDlDMTEuMjI5IDExLjY1ODcgMTIuMTIxIDEwLjc0MzUgMTIuNjI5MyA5Ljg0NjM1QzEyLjkzNDkgOS4zMDcwOSAxMy41MTQxIDcuNzAyOCAxMi42MjkyIDcuMzg3M0MxMC43NTM5IDYuNzE4NzUgMTAuMjYyIDYuMDY2NjkgOS45OTAxMSA1LjQxMjY4QzkuODA5MTUgNC45Nzc0NCA5LjgyODY4IDQuNTIyODIgOS45NTc0MSA0LjA3ODg1TDkuOTU3NDEgNC4wNzg4NEM5Ljk3NjYyIDQuMDEyNiA5Ljk5NTM4IDMuOTQ3OTEgMTAuMDMzNCAzLjg4ODgyQzkuODE4NTcgMy43MzY3NiA5LjY1MTUgMy41NTE5NSA5LjUxNDY0IDMuMzcxNUM5LjQyODc2IDMuMjU4MjggOS4zNDY5IDMuMTIwOTkgOS4yNjE5NyAyLjk3ODU2QzkuMDE4NjYgMi41NzA1MiA4Ljc1MDE4IDIuMTIwMjcgOC4yOTAwOCAyLjA3MjgzQzcuMjI4ODkgMS45NjM0MyA2LjAzMzk4IDIuMTQ3NzIgNC45OTg5OSAyLjYxOTM1Wk0xMy4yMDgxIDMuNzc0NzFDMTMuNDQxIDMuMjI2NzEgMTIuNDU0NyAyLjYzNjA2IDEyLjA4MjIgMy4xMDE2M0MxMS41ODE3IDMuNzI3MzIgMTIuOTAyOSA0LjQ5MjgxIDEzLjIwODEgMy43NzQ3MVpNMTQuMzY3MiAyLjI2MDMxQzE0Ljk2NjggMi4yNzQ5MyAxNS4xNTUxIDEuMTE2MDMgMTQuNTcxOCAwLjk0OTM3MUMxMy44MDc2IDAuNzMxMDI2IDEzLjU5MTggMi4yNDEzOSAxNC4zNjcyIDIuMjYwMzFaTTE0LjI4NTcgNS4wOTA5OEMxNC44NjQ0IDUuMTAwMDQgMTUuMDQ2MiA0LjM4MjIyIDE0LjQ4MzIgNC4yNzg5OUMxMy43NDU1IDQuMTQzNzUgMTMuNTM3MyA1LjA3OTI3IDE0LjI4NTcgNS4wOTA5OFpNNi45MDc1IDQuMjg2NzJDNi40Njg5OCA0LjY2NzU0IDYuMDUyMiA0LjE1MTg1IDUuOTc5ODMgMy43MzY1QzUuODY4NDggMy4wOTc0NCA2LjMzNjk2IDIuNTY4NTYgNi45NDgyMyAyLjkxMTU2QzcuNDMzNDQgMy4xODM4MiA3LjI2Njc4IDMuOTc0NzEgNi45MDc1IDQuMjg2NzJaTTQuOTQ0NTUgNS44ODE4NEM1LjQwODg1IDUuNDE3NTQgNC41OTU2NyA0LjU3MDEzIDQuMTE0MjUgNS4wNTE1NEMzLjgzMzM4IDUuMzMyNDIgNC4wMDkzNiA1LjY1Mzc2IDQuMjM3NDQgNS44ODE4NEM0LjQzMjcxIDYuMDc3MSA0Ljc0OTI5IDYuMDc3MSA0Ljk0NDU1IDUuODgxODRaTTYuOTc3MTYgNi43MTk4NEM3LjMxMTgxIDcuMzg5MTQgOC40ODgwNCA2Ljc5MTU5IDcuOTk0MTMgNi4xNDc4OEM3Ljg2NTE5IDUuOTc5ODMgNy42ODY1NyA1Ljk0OTQgNy42MjE0NSA1Ljk0MjA3QzcuMjEyMTcgNS44OTYwMSA2Ljc2MzQ5IDYuMjkyNSA2Ljk3NzE2IDYuNzE5ODRaTTYuOTg3OTggOC43MjQ2MUM3LjE0MDY2IDkuMTE4OCA3LjUxMTIyIDkuMzE4NyA3LjkxOTE1IDkuMTYzM0M4LjI3NDM0IDkuMDI3OTkgOC4zMzE4NiA4LjM5Njg5IDguMTcxNzUgOC4wNzQyN0M4LjAyMzMxIDcuNzc1MTQgNy42Mzk1NiA3LjY3NzkzIDcuMzM3NDcgNy43OTQxN0M2Ljk4NTEyIDcuOTI5NzYgNi44NTY3MiA4LjM4NzA4IDYuOTg1NzYgOC43MTg4OUw2Ljk4Nzk4IDguNzI0NjFaTTEwLjM4ODUgOC44NDA4MUMxMC43NTc1IDguNjU2NiAxMS40NjE3IDguODI3NzEgMTEuNDYxNyA5LjMxMTk5QzExLjQ2MTcgOS43MTI4NiAxMC45NTg3IDEwLjIxNjUgMTAuNTYzNCAxMC4yODI2QzEwLjE4MTMgMTAuMzQ2NSA5LjcwNTE1IDkuOTc1ODEgOS43NjY0OCA5LjU3NzE4QzkuODE0NDUgOS4yNjUzOSAxMC4xMjE3IDguOTc0MDEgMTAuMzg4NSA4Ljg0MDgxWk03LjU2NzA0IDEwLjg0MzJDNy4zMzQ2MSAxMC43NTAyIDcuMTQzNTMgMTAuODYwMSA3LjExNDM3IDEwLjg3NjlMNy4xMTI3OSAxMC44Nzc4QzYuOTA3ODIgMTAuOTk0OSA2LjcxMzgzIDExLjI0MzkgNi42NzQ3IDExLjQ4NDJDNi41OTAxOCAxMi4wMDM0IDcuMTMxOTkgMTIuMTIzOSA3LjUyNjYxIDEyLjA5ODdDOC4yMDc0IDEyLjA1NTMgOC4wNjU0NyAxMS4wNDI2IDcuNTY3MDQgMTAuODQzMlpNNC44ODA1IDEwLjg5MzJDNS4wNjc0IDEwLjc3MjMgNS4xNTY1OCAxMC41MzYzIDUuMDgyOTMgMTAuMzE1M0M0LjkzMDQ2IDkuNzk2ODcgNC4zMjQ2IDkuNzEyNTIgMy45NjU2MSAxMC4xMjk3QzMuNzkzMzYgMTAuMzI5OSAzLjgwNzQ5IDEwLjYyNzQgMy45OTIxNCAxMC44MTA1TDMuOTk0OTUgMTAuODE0TDMuOTk3OSAxMC44MTc2QzQuMjIwMjUgMTEuMDk0MiA0LjYzNjI0IDExLjE4NTcgNC44ODA1IDEwLjg5MzJaTTMuMDQ2OTUgNy44MTMxOEMzLjMzMTQ3IDguMDk3NyAzLjYwMDc3IDguMTUwNjcgMy45ODQ0MyA4LjA1ODU5QzQuNjA4MjYgNy45MDg4NyA0LjEzODE0IDYuMjQyOTkgMy4wNDcgNi44NzI5NkMyLjcwOTM5IDcuMDY3ODggMi44NjcxNiA3LjYzMzM5IDMuMDQ2OTUgNy44MTMxOFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LF9lPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xIDkuNTAwMDZDMSAxMC4zMjg1IDEuNjcxNTcgMTEuMDAwMSAyLjUgMTEuMDAwMUg0TDQgMTAuMDAwMUgyLjVDMi4yMjM4NiAxMC4wMDAxIDIgOS43NzYyIDIgOS41MDAwNkwyIDIuNTAwMDZDMiAyLjIyMzkyIDIuMjIzODYgMi4wMDAwNiAyLjUgMi4wMDAwNkw5LjUgMi4wMDAwNkM5Ljc3NjE0IDIuMDAwMDYgMTAgMi4yMjM5MiAxMCAyLjUwMDA2VjQuMDAwMDJINS41QzQuNjcxNTggNC4wMDAwMiA0IDQuNjcxNTkgNCA1LjUwMDAyVjEyLjVDNCAxMy4zMjg0IDQuNjcxNTggMTQgNS41IDE0SDEyLjVDMTMuMzI4NCAxNCAxNCAxMy4zMjg0IDE0IDEyLjVWNS41MDAwMkMxNCA0LjY3MTU5IDEzLjMyODQgNC4wMDAwMiAxMi41IDQuMDAwMDJIMTFWMi41MDAwNkMxMSAxLjY3MTYzIDEwLjMyODQgMS4wMDAwNiA5LjUgMS4wMDAwNkgyLjVDMS42NzE1NyAxLjAwMDA2IDEgMS42NzE2MyAxIDIuNTAwMDZWOS41MDAwNlpNNSA1LjUwMDAyQzUgNS4yMjM4OCA1LjIyMzg2IDUuMDAwMDIgNS41IDUuMDAwMDJIMTIuNUMxMi43NzYxIDUuMDAwMDIgMTMgNS4yMjM4OCAxMyA1LjUwMDAyVjEyLjVDMTMgMTIuNzc2MiAxMi43NzYxIDEzIDEyLjUgMTNINS41QzUuMjIzODYgMTMgNSAxMi43NzYyIDUgMTIuNVY1LjUwMDAyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTkuODc3MzcgMTJIOS45SDExLjVDMTEuNzc2MSAxMiAxMiAxMS43NzYxIDEyIDExLjVDMTIgMTEuMjIzOSAxMS43NzYxIDExIDExLjUgMTFIOS45QzguNzcxNjQgMTEgNy45NTU0NSAxMC45OTk2IDcuMzEzNTIgMTAuOTQ3MkM2LjY3NzQ0IDEwLjg5NTIgNi4yNTY2MiAxMC43OTQ2IDUuOTExMDMgMTAuNjE4NUM1LjI1MjQ3IDEwLjI4MyA0LjcxNzAzIDkuNzQ3NTMgNC4zODE0OCA5LjA4ODk3QzQuMjA1MzkgOC43NDMzOCA0LjEwNDgxIDguMzIyNTYgNC4wNTI4NCA3LjY4NjQ4QzQuMDAwMzkgNy4wNDQ1NSA0IDYuMjI4MzYgNCA1LjFWMy41QzQgMy4yMjM4NiAzLjc3NjE0IDMgMy41IDNDMy4yMjM4NiAzIDMgMy4yMjM4NiAzIDMuNVY1LjFWNS4xMjI2M0MzIDYuMjIzNTkgMyA3LjA4MDUyIDMuMDU2MTYgNy43Njc5MUMzLjExMzE4IDguNDY1ODQgMy4yMzA1OCA5LjAzMjkgMy40OTA0NyA5LjU0Mjk2QzMuOTIxOSAxMC4zODk3IDQuNjEwMzEgMTEuMDc4MSA1LjQ1NzA0IDExLjUwOTVDNS45NjcxIDExLjc2OTQgNi41MzQxNiAxMS44ODY4IDcuMjMyMDkgMTEuOTQzOEM3LjkxOTQ4IDEyIDguNzc2NDEgMTIgOS44NzczNyAxMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEVlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjEyMjYzIDEySDUuMUgzLjVDMy4yMjM4NiAxMiAzIDExLjc3NjEgMyAxMS41QzMgMTEuMjIzOSAzLjIyMzg2IDExIDMuNSAxMUg1LjFDNi4yMjgzNiAxMSA3LjA0NDU1IDEwLjk5OTYgNy42ODY0OCAxMC45NDcyQzguMzIyNTYgMTAuODk1MiA4Ljc0MzM4IDEwLjc5NDYgOS4wODg5NyAxMC42MTg1QzkuNzQ3NTMgMTAuMjgzIDEwLjI4MyA5Ljc0NzUzIDEwLjYxODUgOS4wODg5N0MxMC43OTQ2IDguNzQzMzggMTAuODk1MiA4LjMyMjU2IDEwLjk0NzIgNy42ODY0OEMxMC45OTk2IDcuMDQ0NTUgMTEgNi4yMjgzNiAxMSA1LjFWMy41QzExIDMuMjIzODYgMTEuMjIzOSAzIDExLjUgM0MxMS43NzYxIDMgMTIgMy4yMjM4NiAxMiAzLjVWNS4xVjUuMTIyNjNDMTIgNi4yMjM1OSAxMiA3LjA4MDUyIDExLjk0MzggNy43Njc5MUMxMS44ODY4IDguNDY1ODQgMTEuNzY5NCA5LjAzMjkgMTEuNTA5NSA5LjU0Mjk2QzExLjA3ODEgMTAuMzg5NyAxMC4zODk3IDExLjA3ODEgOS41NDI5NiAxMS41MDk1QzkuMDMyOSAxMS43Njk0IDguNDY1ODQgMTEuODg2OCA3Ljc2NzkxIDExLjk0MzhDNy4wODA1MiAxMiA2LjIyMzU5IDEyIDUuMTIyNjMgMTJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxqZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOS44NzczNyAzSDkuOUgxMS41QzExLjc3NjEgMyAxMiAzLjIyMzg2IDEyIDMuNUMxMiAzLjc3NjE0IDExLjc3NjEgNCAxMS41IDRIOS45QzguNzcxNjQgNCA3Ljk1NTQ1IDQuMDAwMzkgNy4zMTM1MiA0LjA1Mjg0QzYuNjc3NDQgNC4xMDQ4MSA2LjI1NjYyIDQuMjA1MzkgNS45MTEwMyA0LjM4MTQ4QzUuMjUyNDcgNC43MTcwMyA0LjcxNzAzIDUuMjUyNDcgNC4zODE0OCA1LjkxMTAzQzQuMjA1MzkgNi4yNTY2MiA0LjEwNDgxIDYuNjc3NDQgNC4wNTI4NCA3LjMxMzUyQzQuMDAwMzkgNy45NTU0NSA0IDguNzcxNjQgNCA5LjlWMTEuNUM0IDExLjc3NjEgMy43NzYxNCAxMiAzLjUgMTJDMy4yMjM4NiAxMiAzIDExLjc3NjEgMyAxMS41VjkuOVY5Ljg3NzM3QzMgOC43NzY0MSAzIDcuOTE5NDggMy4wNTYxNiA3LjIzMjA5QzMuMTEzMTggNi41MzQxNiAzLjIzMDU4IDUuOTY3MSAzLjQ5MDQ3IDUuNDU3MDRDMy45MjE5IDQuNjEwMzEgNC42MTAzMSAzLjkyMTkgNS40NTcwNCAzLjQ5MDQ3QzUuOTY3MSAzLjIzMDU4IDYuNTM0MTYgMy4xMTMxOCA3LjIzMjA5IDMuMDU2MTZDNy45MTk0OCAzIDguNzc2NDEgMyA5Ljg3NzM3IDNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxSZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNS4xMjI2MyAzSDUuMUgzLjVDMy4yMjM4NiAzIDMgMy4yMjM4NiAzIDMuNUMzIDMuNzc2MTQgMy4yMjM4NiA0IDMuNSA0SDUuMUM2LjIyODM2IDQgNy4wNDQ1NSA0LjAwMDM5IDcuNjg2NDggNC4wNTI4NEM4LjMyMjU2IDQuMTA0ODEgOC43NDMzOCA0LjIwNTM5IDkuMDg4OTcgNC4zODE0OEM5Ljc0NzUzIDQuNzE3MDMgMTAuMjgzIDUuMjUyNDcgMTAuNjE4NSA1LjkxMTAzQzEwLjc5NDYgNi4yNTY2MiAxMC44OTUyIDYuNjc3NDQgMTAuOTQ3MiA3LjMxMzUyQzEwLjk5OTYgNy45NTU0NSAxMSA4Ljc3MTY0IDExIDkuOVYxMS41QzExIDExLjc3NjEgMTEuMjIzOSAxMiAxMS41IDEyQzExLjc3NjEgMTIgMTIgMTEuNzc2MSAxMiAxMS41VjkuOVY5Ljg3NzM3QzEyIDguNzc2NDEgMTIgNy45MTk0OCAxMS45NDM4IDcuMjMyMDlDMTEuODg2OCA2LjUzNDE2IDExLjc2OTQgNS45NjcxIDExLjUwOTUgNS40NTcwNEMxMS4wNzgxIDQuNjEwMzEgMTAuMzg5NyAzLjkyMTkgOS41NDI5NiAzLjQ5MDQ3QzkuMDMyOSAzLjIzMDU4IDguNDY1ODQgMy4xMTMxOCA3Ljc2NzkxIDMuMDU2MTZDNy4wODA1MiAzIDYuMjIzNTkgMyA1LjEyMjYzIDNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxJZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTAuMSAzQzEwLjUyODMgMyAxMC44MTk0IDMuMDAwMzkgMTEuMDQ0NSAzLjAxODc4QzExLjI2MzcgMy4wMzY2OSAxMS4zNzU4IDMuMDY5MTUgMTEuNDU0IDMuMTA4OTlDMTEuNjQyMiAzLjIwNDg3IDExLjc5NTEgMy4zNTc4NSAxMS44OTEgMy41NDYwMUMxMS45MzA5IDMuNjI0MjEgMTEuOTYzMyAzLjczNjMxIDExLjk4MTIgMy45NTU1MkMxMS45OTk2IDQuMTgwNTYgMTIgNC40NzE3MSAxMiA0LjlWNS41QzEyIDUuNzc2MTQgMTIuMjIzOSA2IDEyLjUgNkMxMi43NzYxIDYgMTMgNS43NzYxNCAxMyA1LjVWNC44NzkzNUMxMyA0LjQ3Njg3IDEzIDQuMTQ0NjkgMTIuOTc3OSAzLjg3NDA5QzEyLjk1NDkgMy41OTMwNCAxMi45MDU3IDMuMzM0NjkgMTIuNzgyIDMuMDkyMDJDMTIuNTkwMyAyLjcxNTcgMTIuMjg0MyAyLjQwOTczIDExLjkwOCAyLjIxNzk5QzExLjY2NTMgMi4wOTQzNCAxMS40MDcgMi4wNDUwNiAxMS4xMjU5IDIuMDIyMUMxMC44NTUzIDEuOTk5OTkgMTAuNTIzMSAxLjk5OTk5IDEwLjEyMDcgMkgxMC4xMjA2SDEwLjFIOS41QzkuMjIzODYgMiA5IDIuMjIzODYgOSAyLjVDOSAyLjc3NjE0IDkuMjIzODYgMyA5LjUgM0gxMC4xWk01LjUgMkg0Ljg3OTM1SDQuODc5MzRDNC40NzY4NiAxLjk5OTk5IDQuMTQ0NjggMS45OTk5OSAzLjg3NDA5IDIuMDIyMUMzLjU5MzA0IDIuMDQ1MDYgMy4zMzQ2OSAyLjA5NDM0IDMuMDkyMDIgMi4yMTc5OUMyLjcxNTcgMi40MDk3MyAyLjQwOTczIDIuNzE1NyAyLjIxNzk5IDMuMDkyMDJDMi4wOTQzNCAzLjMzNDY5IDIuMDQ1MDYgMy41OTMwNCAyLjAyMjEgMy44NzQwOUMxLjk5OTk5IDQuMTQ0NjggMS45OTk5OSA0LjQ3Njg2IDIgNC44NzkzNFY0Ljg3OTM1VjUuNUMyIDUuNzc2MTQgMi4yMjM4NiA2IDIuNSA2QzIuNzc2MTQgNiAzIDUuNzc2MTQgMyA1LjVWNC45QzMgNC40NzE3MSAzLjAwMDM5IDQuMTgwNTYgMy4wMTg3OCAzLjk1NTUyQzMuMDM2NjkgMy43MzYzMSAzLjA2OTE1IDMuNjI0MjEgMy4xMDg5OSAzLjU0NjAxQzMuMjA0ODcgMy4zNTc4NSAzLjM1Nzg1IDMuMjA0ODcgMy41NDYwMSAzLjEwODk5QzMuNjI0MjEgMy4wNjkxNSAzLjczNjMxIDMuMDM2NjkgMy45NTU1MiAzLjAxODc4QzQuMTgwNTYgMy4wMDAzOSA0LjQ3MTcxIDMgNC45IDNINS41QzUuNzc2MTQgMyA2IDIuNzc2MTQgNiAyLjVDNiAyLjIyMzg2IDUuNzc2MTQgMiA1LjUgMlpNMTMgOS41QzEzIDkuMjIzODYgMTIuNzc2MSA5IDEyLjUgOUMxMi4yMjM5IDkgMTIgOS4yMjM4NiAxMiA5LjVWMTAuMUMxMiAxMC41MjgzIDExLjk5OTYgMTAuODE5NCAxMS45ODEyIDExLjA0NDVDMTEuOTYzMyAxMS4yNjM3IDExLjkzMDkgMTEuMzc1OCAxMS44OTEgMTEuNDU0QzExLjc5NTEgMTEuNjQyMiAxMS42NDIyIDExLjc5NTEgMTEuNDU0IDExLjg5MUMxMS4zNzU4IDExLjkzMDkgMTEuMjYzNyAxMS45NjMzIDExLjA0NDUgMTEuOTgxMkMxMC44MTk0IDExLjk5OTYgMTAuNTI4MyAxMiAxMC4xIDEySDkuNUM5LjIyMzg2IDEyIDkgMTIuMjIzOSA5IDEyLjVDOSAxMi43NzYxIDkuMjIzODYgMTMgOS41IDEzSDEwLjEyMDZDMTAuNTIzMSAxMyAxMC44NTUzIDEzIDExLjEyNTkgMTIuOTc3OUMxMS40MDcgMTIuOTU0OSAxMS42NjUzIDEyLjkwNTcgMTEuOTA4IDEyLjc4MkMxMi4yODQzIDEyLjU5MDMgMTIuNTkwMyAxMi4yODQzIDEyLjc4MiAxMS45MDhDMTIuOTA1NyAxMS42NjUzIDEyLjk1NDkgMTEuNDA3IDEyLjk3NzkgMTEuMTI1OUMxMyAxMC44NTUzIDEzIDEwLjUyMzEgMTMgMTAuMTIwNlY5LjVaTTIuNSA5QzIuNzc2MTQgOSAzIDkuMjIzODYgMyA5LjVWMTAuMUMzIDEwLjUyODMgMy4wMDAzOSAxMC44MTk0IDMuMDE4NzggMTEuMDQ0NUMzLjAzNjY5IDExLjI2MzcgMy4wNjkxNSAxMS4zNzU4IDMuMTA4OTkgMTEuNDU0QzMuMjA0ODcgMTEuNjQyMiAzLjM1Nzg1IDExLjc5NTEgMy41NDYwMSAxMS44OTFDMy42MjQyMSAxMS45MzA5IDMuNzM2MzEgMTEuOTYzMyAzLjk1NTUyIDExLjk4MTJDNC4xODA1NiAxMS45OTk2IDQuNDcxNzEgMTIgNC45IDEySDUuNUM1Ljc3NjE0IDEyIDYgMTIuMjIzOSA2IDEyLjVDNiAxMi43NzYxIDUuNzc2MTQgMTMgNS41IDEzSDQuODc5MzVDNC40NzY4NyAxMyA0LjE0NDY5IDEzIDMuODc0MDkgMTIuOTc3OUMzLjU5MzA0IDEyLjk1NDkgMy4zMzQ2OSAxMi45MDU3IDMuMDkyMDIgMTIuNzgyQzIuNzE1NyAxMi41OTAzIDIuNDA5NzMgMTIuMjg0MyAyLjIxNzk5IDExLjkwOEMyLjA5NDM0IDExLjY2NTMgMi4wNDUwNiAxMS40MDcgMi4wMjIxIDExLjEyNTlDMS45OTk5OSAxMC44NTUzIDEuOTk5OTkgMTAuNTIzMSAyIDEwLjEyMDdWMTAuMTIwNlYxMC4xVjkuNUMyIDkuMjIzODYgMi4yMjM4NiA5IDIuNSA5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEzLjE1IDcuNDk5OThDMTMuMTUgNC42NjQ1OCAxMC45NDAyIDEuODQ5OTggNy41MDAwMiAxLjg0OTk4QzQuNzIxNyAxLjg0OTk4IDMuMzQ4NTEgMy45MDYzNiAyLjc2MzM2IDQuOTk5OTdINC41QzQuNzc2MTQgNC45OTk5NyA1IDUuMjIzODMgNSA1LjQ5OTk3QzUgNS43NzYxMSA0Ljc3NjE0IDUuOTk5OTcgNC41IDUuOTk5OTdIMS41QzEuMjIzODYgNS45OTk5NyAxIDUuNzc2MTEgMSA1LjQ5OTk3VjIuNDk5OTdDMSAyLjIyMzgzIDEuMjIzODYgMS45OTk5NyAxLjUgMS45OTk5N0MxLjc3NjE0IDEuOTk5OTcgMiAyLjIyMzgzIDIgMi40OTk5N1Y0LjMxMzE4QzIuNzA0NTMgMy4wNzEyNiA0LjMzNDA2IDAuODQ5OTc2IDcuNTAwMDIgMC44NDk5NzZDMTEuNTYyOCAwLjg0OTk3NiAxNC4xNSA0LjE4NTM3IDE0LjE1IDcuNDk5OThDMTQuMTUgMTAuODE0NiAxMS41NjI4IDE0LjE1IDcuNTAwMDIgMTQuMTVDNS41NTYxOCAxNC4xNSAzLjkzNzc4IDEzLjM4MDggMi43ODU0OCAxMi4yMDg0QzIuMTY4NTIgMTEuNTgwNiAxLjY4NjY4IDEwLjgzOSAxLjM1ODE2IDEwLjA0MDdDMS4yNTMwNiA5Ljc4NTM2IDEuMzc0ODggOS40OTMxNSAxLjYzMDI0IDkuMzg4MDZDMS44ODU2IDkuMjgyOTYgMi4xNzc4MSA5LjQwNDc4IDIuMjgyOSA5LjY2MDE0QzIuNTYzNzQgMTAuMzQyNSAyLjk3NDk1IDEwLjk3NDUgMy40OTg3IDExLjUwNzRDNC40NzA1MiAxMi40OTYzIDUuODM0OTYgMTMuMTUgNy41MDAwMiAxMy4xNUMxMC45NDAyIDEzLjE1IDEzLjE1IDEwLjMzNTQgMTMuMTUgNy40OTk5OFpNNyAxMFY1LjAwMDAxSDhWMTBIN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEhlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMy4xNSA3LjQ5OTk4QzEzLjE1IDQuNjY0NTggMTAuOTQwMiAxLjg0OTk4IDcuNTAwMDIgMS44NDk5OEM0LjcyMTY3IDEuODQ5OTggMy4zNDg0OSAzLjkwNjQgMi43NjMzNSA1SDQuNUM0Ljc3NjE0IDUgNSA1LjIyMzg2IDUgNS41QzUgNS43NzYxNCA0Ljc3NjE0IDYgNC41IDZIMS41QzEuMjIzODYgNiAxIDUuNzc2MTQgMSA1LjVWMi41QzEgMi4yMjM4NiAxLjIyMzg2IDIgMS41IDJDMS43NzYxNCAyIDIgMi4yMjM4NiAyIDIuNVY0LjMxMzE4QzIuNzA0NTMgMy4wNzEyNiA0LjMzNDA2IDAuODQ5OTc2IDcuNTAwMDIgMC44NDk5NzZDMTEuNTYyOCAwLjg0OTk3NiAxNC4xNSA0LjE4NTM3IDE0LjE1IDcuNDk5OThDMTQuMTUgMTAuODE0NiAxMS41NjI4IDE0LjE1IDcuNTAwMDIgMTQuMTVDNS41NTYxOCAxNC4xNSAzLjkzNzc4IDEzLjM4MDggMi43ODU0OCAxMi4yMDg0QzIuMTY4NTIgMTEuNTgwNiAxLjY4NjY4IDEwLjgzOSAxLjM1ODE2IDEwLjA0MDdDMS4yNTMwNiA5Ljc4NTM2IDEuMzc0ODggOS40OTMxNSAxLjYzMDI0IDkuMzg4MDZDMS44ODU2IDkuMjgyOTYgMi4xNzc4MSA5LjQwNDc4IDIuMjgyOSA5LjY2MDE0QzIuNTYzNzQgMTAuMzQyNSAyLjk3NDk1IDEwLjk3NDUgMy40OTg3IDExLjUwNzRDNC40NzA1MiAxMi40OTYzIDUuODM0OTYgMTMuMTUgNy41MDAwMiAxMy4xNUMxMC45NDAyIDEzLjE1IDEzLjE1IDEwLjMzNTQgMTMuMTUgNy40OTk5OFpNNy41IDQuMDAwMDFDNy43NzYxNCA0LjAwMDAxIDggNC4yMjM4NyA4IDQuNTAwMDFWNy4yOTI5MUw5Ljg1MzU1IDkuMTQ2NDZDMTAuMDQ4OCA5LjM0MTcyIDEwLjA0ODggOS42NTgzMSA5Ljg1MzU1IDkuODUzNTdDOS42NTgyOSAxMC4wNDg4IDkuMzQxNzEgMTAuMDQ4OCA5LjE0NjQ1IDkuODUzNTdMNy4xNDY0NSA3Ljg1MzU3QzcuMDUyNjggNy43NTk4IDcgNy42MzI2MiA3IDcuNTAwMDFWNC41MDAwMUM3IDQuMjIzODcgNy4yMjM4NiA0LjAwMDAxIDcuNSA0LjAwMDAxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNSA4LjAwNjg0ZS0wN0MzLjc3NjE0IDcuODg2MTRlLTA3IDQgMC4yMjM4NTkgNCAwLjUwMDAwMUw0IDMuMDAwMDZMMTEuNSAzLjAwMDA2QzExLjc3NjEgMy4wMDAwNiAxMiAzLjIyMzkyIDEyIDMuNTAwMDZMMTIgMTEuMDAwMUwxNC41IDExQzE0Ljc3NjEgMTEgMTUgMTEuMjIzOCAxNSAxMS41QzE1IDExLjc3NjEgMTQuNzc2MiAxMiAxNC41IDEyTDEyIDEyLjAwMDFMMTIgMTQuNUMxMiAxNC43NzYxIDExLjc3NjEgMTUgMTEuNSAxNUMxMS4yMjM5IDE1IDExIDE0Ljc3NjEgMTEgMTQuNUwxMSAxMi4wMDAxTDMuNSAxMi4wMDAxQzMuMjIzODYgMTIuMDAwMSAzIDExLjc3NjIgMyAxMS41MDAxTDMgNC4wMDAwNUwwLjQ5OTk4OSA0QzAuMjIzODQ3IDQgLTYuMTA1NDFlLTA2IDMuNzc2MTMgLTUuMDI1NzZlLTA3IDMuNDk5OTlDNS4xMzAwNmUtMDYgMy4yMjM4NSAwLjIyMzg2NyAzIDAuNTAwMDEgM0wzIDMuMDAwMDVMMyAwLjUwMDAwMUMzIDAuMjIzODU5IDMuMjIzODYgOC4xMjc1NWUtMDcgMy41IDguMDA2ODRlLTA3Wk00IDQuMDAwMDZMNCAxMS4wMDAxTDExIDExLjAwMDFMMTEgNC4wMDAwNkw0IDQuMDAwMDZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxUZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTIuODUzNiAyLjg1MzU1QzEzLjA0ODggMi42NTgyOSAxMy4wNDg4IDIuMzQxNzEgMTIuODUzNiAyLjE0NjQ1QzEyLjY1ODMgMS45NTExOCAxMi4zNDE3IDEuOTUxMTggMTIuMTQ2NCAyLjE0NjQ1TDcuNSA2Ljc5Mjg5TDIuODUzNTUgMi4xNDY0NUMyLjY1ODI5IDEuOTUxMTggMi4zNDE3MSAxLjk1MTE4IDIuMTQ2NDUgMi4xNDY0NUMxLjk1MTE4IDIuMzQxNzEgMS45NTExOCAyLjY1ODI5IDIuMTQ2NDUgMi44NTM1NUw2Ljc5Mjg5IDcuNUwyLjE0NjQ1IDEyLjE0NjRDMS45NTExOCAxMi4zNDE3IDEuOTUxMTggMTIuNjU4MyAyLjE0NjQ1IDEyLjg1MzZDMi4zNDE3MSAxMy4wNDg4IDIuNjU4MjkgMTMuMDQ4OCAyLjg1MzU1IDEyLjg1MzZMNy41IDguMjA3MTFMMTIuMTQ2NCAxMi44NTM2QzEyLjM0MTcgMTMuMDQ4OCAxMi42NTgzIDEzLjA0ODggMTIuODUzNiAxMi44NTM2QzEzLjA0ODggMTIuNjU4MyAxMy4wNDg4IDEyLjM0MTcgMTIuODUzNiAxMi4xNDY0TDguMjA3MTEgNy41TDEyLjg1MzYgMi44NTM1NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LERlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMS43ODE2IDQuMDMxNTdDMTIuMDA2MiAzLjgwNzAyIDEyLjAwNjIgMy40NDI5NSAxMS43ODE2IDMuMjE4NEMxMS41NTcxIDIuOTkzODUgMTEuMTkzIDIuOTkzODUgMTAuOTY4NSAzLjIxODRMNy41MDAwNSA2LjY4NjgyTDQuMDMxNjQgMy4yMTg0QzMuODA3MDggMi45OTM4NSAzLjQ0MzAxIDIuOTkzODUgMy4yMTg0NiAzLjIxODRDMi45OTM5MSAzLjQ0Mjk1IDIuOTkzOTEgMy44MDcwMiAzLjIxODQ2IDQuMDMxNTdMNi42ODY4OCA3LjQ5OTk5TDMuMjE4NDYgMTAuOTY4NEMyLjk5MzkxIDExLjE5MyAyLjk5MzkxIDExLjU1NyAzLjIxODQ2IDExLjc4MTZDMy40NDMwMSAxMi4wMDYxIDMuODA3MDggMTIuMDA2MSA0LjAzMTY0IDExLjc4MTZMNy41MDAwNSA4LjMxMzE2TDEwLjk2ODUgMTEuNzgxNkMxMS4xOTMgMTIuMDA2MSAxMS41NTcxIDEyLjAwNjEgMTEuNzgxNiAxMS43ODE2QzEyLjAwNjIgMTEuNTU3IDEyLjAwNjIgMTEuMTkzIDExLjc4MTYgMTAuOTY4NEw4LjMxMzIyIDcuNDk5OTlMMTEuNzgxNiA0LjAzMTU3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuODc3MDc1IDcuNDk5ODhDMC44NzcwNzUgMy44NDIxOSAzLjg0MjIyIDAuODc3MDQ1IDcuNDk5OTEgMC44NzcwNDVDMTEuMTU3NiAwLjg3NzA0NSAxNC4xMjI3IDMuODQyMTkgMTQuMTIyNyA3LjQ5OTg4QzE0LjEyMjcgMTEuMTU3NSAxMS4xNTc2IDE0LjEyMjcgNy40OTk5MSAxNC4xMjI3QzMuODQyMjIgMTQuMTIyNyAwLjg3NzA3NSAxMS4xNTc1IDAuODc3MDc1IDcuNDk5ODhaTTcuNDk5OTEgMS44MjcwNEM0LjM2Njg5IDEuODI3MDQgMS44MjcwOCA0LjM2Njg2IDEuODI3MDggNy40OTk4OEMxLjgyNzA4IDEwLjYzMjkgNC4zNjY4OSAxMy4xNzI3IDcuNDk5OTEgMTMuMTcyN0MxMC42MzI5IDEzLjE3MjcgMTMuMTcyNyAxMC42MzI5IDEzLjE3MjcgNy40OTk4OEMxMy4xNzI3IDQuMzY2ODYgMTAuNjMyOSAxLjgyNzA0IDcuNDk5OTEgMS44MjcwNFpNOS44NTM1OCA1LjE0NjQ0QzEwLjA0ODggNS4zNDE3IDEwLjA0ODggNS42NTgyOSA5Ljg1MzU4IDUuODUzNTVMOC4yMDcxMyA3LjQ5OTk5TDkuODUzNTggOS4xNDY0NEMxMC4wNDg4IDkuMzQxNyAxMC4wNDg4IDkuNjU4MjkgOS44NTM1OCA5Ljg1MzU1QzkuNjU4MzIgMTAuMDQ4OCA5LjM0MTczIDEwLjA0ODggOS4xNDY0NyA5Ljg1MzU1TDcuNTAwMDIgOC4yMDcxTDUuODUzNTggOS44NTM1NUM1LjY1ODMyIDEwLjA0ODggNS4zNDE3MyAxMC4wNDg4IDUuMTQ2NDcgOS44NTM1NUM0Ljk1MTIxIDkuNjU4MjkgNC45NTEyMSA5LjM0MTcgNS4xNDY0NyA5LjE0NjQ0TDYuNzkyOTIgNy40OTk5OUw1LjE0NjQ3IDUuODUzNTVDNC45NTEyMSA1LjY1ODI5IDQuOTUxMjEgNS4zNDE3IDUuMTQ2NDcgNS4xNDY0NEM1LjM0MTczIDQuOTUxMTggNS42NTgzMiA0Ljk1MTE4IDUuODUzNTggNS4xNDY0NEw3LjUwMDAyIDYuNzkyODlMOS4xNDY0NyA1LjE0NjQ0QzkuMzQxNzMgNC45NTExOCA5LjY1ODMyIDQuOTUxMTggOS44NTM1OCA1LjE0NjQ0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sWmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuODc3MDc1IDcuNTAyMDdDMC44NzcwNzUgMy44NDMxOSAzLjg0MzE5IDAuODc3MDc1IDcuNTAyMDggMC44NzcwNzVDMTEuMTYwOSAwLjg3NzA3NSAxNC4xMjcxIDMuODQzMTkgMTQuMTI3MSA3LjUwMjA3QzE0LjEyNzEgMTEuMTYwOSAxMS4xNjA5IDE0LjEyNzEgNy41MDIwOCAxNC4xMjcxQzMuODQzMTkgMTQuMTI3MSAwLjg3NzA3NSAxMS4xNjA5IDAuODc3MDc1IDcuNTAyMDdaTTEuODQ4OTggNy4wMDAwM0MyLjA4ODYgNC4yNjYzOSA0LjI2NjM5IDIuMDg4NiA3LjAwMDAzIDEuODQ4OThWNC41MDAwM0M3LjAwMDAzIDQuNzc2MTcgNy4yMjM4OCA1LjAwMDAzIDcuNTAwMDMgNS4wMDAwM0M3Ljc3NjE3IDUuMDAwMDMgOC4wMDAwMyA0Ljc3NjE3IDguMDAwMDMgNC41MDAwM1YxLjg0ODYyQzEwLjczNTYgMi4wODY0MyAxMi45MTU0IDQuMjY1MDIgMTMuMTU1MiA3LjAwMDAzSDEwLjVDMTAuMjIzOSA3LjAwMDAzIDEwIDcuMjIzODggMTAgNy41MDAwM0MxMCA3Ljc3NjE3IDEwLjIyMzkgOC4wMDAwMyAxMC41IDguMDAwMDNIMTMuMTU1NUMxMi45MTc2IDEwLjczNjkgMTAuNzM2OSAxMi45MTc2IDguMDAwMDMgMTMuMTU1NVYxMC41QzguMDAwMDMgMTAuMjIzOSA3Ljc3NjE3IDEwIDcuNTAwMDMgMTBDNy4yMjM4OCAxMCA3LjAwMDAzIDEwLjIyMzkgNy4wMDAwMyAxMC41VjEzLjE1NTJDNC4yNjUwMiAxMi45MTU0IDIuMDg2NDMgMTAuNzM1NiAxLjg0ODYyIDguMDAwMDNINC41MDAwM0M0Ljc3NjE3IDguMDAwMDMgNS4wMDAwMyA3Ljc3NjE3IDUuMDAwMDMgNy41MDAwM0M1LjAwMDAzIDcuMjIzODggNC43NzYxNyA3LjAwMDAzIDQuNTAwMDMgNy4wMDAwM0gxLjg0ODk4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sJGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNSAwQzcuNzc2MTQgMCA4IDAuMjIzODU4IDggMC41VjEuODA2ODdDMTAuNjkyMiAyLjA5MzUgMTIuODE2NyA0LjI4MDEyIDEzLjAwNjggN0gxNC41QzE0Ljc3NjEgNyAxNSA3LjIyMzg2IDE1IDcuNUMxNSA3Ljc3NjE0IDE0Ljc3NjEgOCAxNC41IDhIMTIuOTg4OEMxMi43MDk0IDEwLjYyNDQgMTAuNjI0NCAxMi43MDk0IDggMTIuOTg4OFYxNC41QzggMTQuNzc2MSA3Ljc3NjE0IDE1IDcuNSAxNUM3LjIyMzg2IDE1IDcgMTQuNzc2MSA3IDE0LjVWMTMuMDA2OEM0LjI4MDEyIDEyLjgxNjcgMi4wOTM1IDEwLjY5MjIgMS44MDY4NyA4SDAuNUMwLjIyMzg1OCA4IDAgNy43NzYxNCAwIDcuNUMwIDcuMjIzODYgMC4yMjM4NTggNyAwLjUgN0gxLjc4ODg2QzEuOTgzNzYgNC4yMTE2NiA0LjIxMTY2IDEuOTgzNzYgNyAxLjc4ODg2VjAuNUM3IDAuMjIzODU4IDcuMjIzODYgMCA3LjUgMFpNOCAxMi4wMzIyVjkuNUM4IDkuMjIzODYgNy43NzYxNCA5IDcuNSA5QzcuMjIzODYgOSA3IDkuMjIzODYgNyA5LjVWMTIuMDU0QzQuODA1MTcgMTEuODY4OSAzLjA0MjIyIDEwLjE2NjggMi43NjM0NCA4SDUuNUM1Ljc3NjE0IDggNiA3Ljc3NjE0IDYgNy41QzYgNy4yMjM4NiA1Ljc3NjE0IDcgNS41IDdIMi43NDE3QzIuOTMyNTIgNC43MzY2MiA0LjczNjYyIDIuOTMyNTIgNyAyLjc0MTdWNS41QzcgNS43NzYxNCA3LjIyMzg2IDYgNy41IDZDNy43NzYxNCA2IDggNS43NzYxNCA4IDUuNVYyLjc2MzQ0QzEwLjE2NjggMy4wNDIyMiAxMS44Njg5IDQuODA1MTcgMTIuMDU0IDdIOS41QzkuMjIzODYgNyA5IDcuMjIzODYgOSA3LjVDOSA3Ljc3NjE0IDkuMjIzODYgOCA5LjUgOEgxMi4wMzIyQzExLjc2MjEgMTAuMDk5MSAxMC4wOTkxIDExLjc2MjEgOCAxMi4wMzIyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuNjA5MTMgMC4wNjM0Mjg3QzQuMzkwODIgMC4wMDg4NTA1IDQuMTY1NzUgMC4xMjM5MyA0LjA4MjE4IDAuMzMyODY3TDMuMTUzOCAyLjY1MzhMMC44MzI4NjYgMy41ODIxOEMwLjcwMjg4NCAzLjYzNDE3IDAuNjA0NTA0IDMuNzQzNyAwLjU2NjcwNSAzLjg3ODQ5QzAuNTI4OTA2IDQuMDEzMjkgMC41NTU5OTQgNC4xNTggMC42Mzk5OTIgNC4yNjk5OUwyLjAxMTQ4IDYuMDk4NjRMMS4wNjM0MyA5Ljg5MDg1QzEuMDA5NDQgMTAuMTA2OCAxLjEyMTQ1IDEwLjMyOTggMS4zMjY5MSAxMC40MTU0TDQuMjAxMTUgMTEuNjEzTDUuNjI1NTcgMTMuNzQ5NkM1LjczNDEyIDEzLjkxMjQgNS45MzU0NSAxMy45ODY0IDYuMTIzNjIgMTMuOTMyN0w5LjYyMzYyIDEyLjkzMjdDOS42Mjk4OCAxMi45MzA5IDkuNjM2MTEgMTIuOTI5IDkuNjQyMjkgMTIuOTI2OUwxMi42NDIzIDExLjkyNjlDMTIuNzkyMyAxMS44NzY5IDEyLjkwNSAxMS43NTE5IDEyLjkzOTMgMTEuNTk3NkwxMy45MzkzIDcuMDk3NjFDMTMuOTc3NiA2LjkyNTA2IDEzLjkxMTQgNi43NDYwNSAxMy43NyA2LjYzOTk5TDExLjk1IDUuMjc0OTlWMi45OTk5OUMxMS45NSAyLjgyOTU1IDExLjg1MzcgMi42NzM3MyAxMS43MDEyIDIuNTk3NUw4LjcwMTI0IDEuMDk3NUM4LjY3MTg3IDEuMDgyODIgOC42NDA5OCAxLjA3MTM5IDguNjA5MTMgMS4wNjM0M0w0LjYwOTEzIDAuMDYzNDI4N1pNMTEuNDMyMyA2LjAxMTczTDEyLjc3NDggNy4wMTg1OEwxMC4yMTE5IDkuMTU0MjlDMTAuMTQ3NiA5LjIwNzg2IDEwLjA5OTUgOS4yNzgzIDEwLjA3MzEgOS4zNTc2OUw5LjI1MzgyIDExLjgxNTVMNy43Mzg0OSAxMC44Njg0QzcuNTI3NzQgMTAuNzM2NyA3LjI1MDExIDEwLjgwMDcgNy4xMTgzOSAxMS4wMTE1QzYuOTg2NjcgMTEuMjIyMiA3LjA1MDc0IDExLjQ5OTkgNy4yNjE0OSAxMS42MzE2TDguNDAzNDEgMTIuMzQ1M0w2LjE5MjIxIDEyLjk3NzFMNC44NzQ0MSAxMS4wMDA0QzQuODI1MTMgMTAuOTI2NSA0Ljc1NTA4IDEwLjg2ODggNC42NzMwNyAxMC44MzQ2TDIuMDMwNDYgOS43MzM1MkwyLjg1MTM0IDYuNDQ5OTlINC45OTk5OUM1LjI0ODUyIDYuNDQ5OTkgNS40NDk5OSA2LjI0ODUyIDUuNDQ5OTkgNS45OTk5OUM1LjQ0OTk5IDUuNzUxNDYgNS4yNDg1MiA1LjU0OTk5IDQuOTk5OTkgNS41NDk5OUgyLjcyNDk5TDEuNzEyMyA0LjE5OTc0TDMuNTE0MDcgMy40NzkwM0w2LjM1NzY5IDQuNDI2OUM2LjUzNjU1IDQuNDg2NTIgNi43MzM2MSA0LjQyODMyIDYuODUxMzggNC4yODExMUw4LjYyNDEzIDIuMDY1MThMMTEuMDUgMy4yNzgxMVY1LjE5NTMzTDguODMyODcgNi4wODIxOEM4LjcwOTk2IDYuMTMxMzQgOC42MTQ5NCA2LjIzMjEyIDguNTczMDggNi4zNTc2OUw4LjA3MzA4IDcuODU3NjlDNy45OTQ0OSA4LjA5MzQ2IDguMTIxOTEgOC4zNDgzMSA4LjM1NzY5IDguNDI2OUM4LjU5MzQ2IDguNTA1NDkgOC44NDgzMSA4LjM3ODA3IDguOTI2OSA4LjE0MjI5TDkuMzYwOSA2Ljg0MDI5TDExLjQzMjMgNi4wMTE3M1pNNy43MTA1MiAxLjc2NjQ4TDYuMzQ0NjIgMy40NzM4Nkw0LjA5NTA1IDIuNzI0TDQuNzcxOTIgMS4wMzE4M0w3LjcxMDUyIDEuNzY2NDhaTTEwLjIxMTUgMTEuNzg4NUwxMi4xMTYgMTEuMTUzN0wxMi43NzQ1IDguMTkwMzRMMTAuODg2NCA5Ljc2Mzc0TDEwLjIxMTUgMTEuNzg4NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEZlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjI4ODU2IDAuNzk2OTA4QzcuNDIyNTggMC43MzQzNjQgNy41Nzc0MiAwLjczNDM2NCA3LjcxMTQ0IDAuNzk2OTA4TDEzLjcxMTQgMy41OTY5MUMxMy44ODc1IDMuNjc5MDYgMTQgMy44NTU3NCAxNCA0LjA1VjEwLjk1QzE0IDExLjE0NDMgMTMuODg3NSAxMS4zMjA5IDEzLjcxMTQgMTEuNDAzMUw3LjcxMTQ0IDE0LjIwMzFDNy41Nzc0MiAxNC4yNjU2IDcuNDIyNTggMTQuMjY1NiA3LjI4ODU2IDE0LjIwMzFMMS4yODg1NiAxMS40MDMxQzEuMTEyNTIgMTEuMzIwOSAxIDExLjE0NDMgMSAxMC45NVY0LjA1QzEgMy44NTU3NCAxLjExMjUyIDMuNjc5MDYgMS4yODg1NiAzLjU5NjkxTDcuMjg4NTYgMC43OTY5MDhaTTIgNC44MDU3OEw3IDYuOTMwNzhWMTIuOTY0OUwyIDEwLjYzMTZWNC44MDU3OFpNOCAxMi45NjQ5TDEzIDEwLjYzMTZWNC44MDU3OEw4IDYuOTMwNzhWMTIuOTY0OVpNNy41IDYuMDU2NzJMMTIuMjcxOSA0LjAyODY2TDcuNSAxLjgwMTc2TDIuNzI4MDkgNC4wMjg2Nkw3LjUgNi4wNTY3MlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFdlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjI5MjI3IDAuMDQ4OTg0QzMuNDcwMzMgLTAuMDMyMzM4IDMuNjc5NDYgLTAuMDAyMjgyMTQgMy44Mjc0IDAuMTI1ODkxTDEyLjg1ODcgNy45NTAyNkMxMy4wMTM0IDguMDg0MzIgMTMuMDcwOCA4LjI5OTE2IDEzLjAwMzUgOC40OTI1MUMxMi45MzYyIDguNjg1ODYgMTIuNzU3OCA4LjgxODY2IDEyLjU1MzMgOC44Mjc2OEw5LjIxODg3IDguOTc0NzRMMTEuMTUwNCAxMy4yMTg3QzExLjI2NDggMTMuNDcgMTEuMTUzOCAxMy43NjY0IDEwLjkwMjYgMTMuODgwOEw4Ljc1MDI0IDE0Ljg2MTNDOC40OTkgMTQuOTc1OCA4LjIwMjU1IDE0Ljg2NDkgOC4wODgwMiAxNC42MTM3TDYuMTUzMzkgMTAuMzcwM0wzLjg2Mjc5IDEyLjc4NTVDMy43MjE5NiAxMi45MzQgMy41MDQ4NyAxMi45ODE3IDMuMzE0NzkgMTIuOTA1OUMzLjEyNDcgMTIuODMwMSAzIDEyLjY0NjEgMyAxMi40NDE0VjAuNTAzNzkyQzMgMC4zMDgwNDggMy4xMTQyMiAwLjEzMDMwNiAzLjI5MjI3IDAuMDQ4OTg0Wk00IDEuNTk4NTJWMTEuMTg3N0w1LjkzNzk5IDkuMTQ0MjVDNi4wNTIzOCA5LjAyMzYzIDYuMjE5MjQgOC45Njc3NiA2LjM4MzE5IDguOTk1MTZDNi41NDcxNSA5LjAyMjU2IDYuNjg2NzcgOS4xMjk2NSA2Ljc1NTczIDkuMjgwOUw4Ljc5MDU2IDEzLjc0NDFMMTAuMDMzMiAxMy4xNzhMOC4wMDE5NSA4LjcxNDk3QzcuOTMzMTMgOC41NjM3NiA3Ljk0MzkxIDguMzg4MjQgOC4wMzA3MiA4LjI0NjU5QzguMTE3NTMgOC4xMDQ5NCA4LjI2OTAzIDguMDE1NjYgOC40MzUgOC4wMDgzNEwxMS4yNTQ5IDcuODgzOTdMNCAxLjU5ODUyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuNSAxQzQuMjIzODYgMSA0IDEuMjIzODYgNCAxLjVDNCAxLjc3NjE0IDQuMjIzODYgMiA0LjUgMkM1LjQyMjE1IDIgNi4wMzk5IDIuMjMwNTQgNi40MjA3NSAyLjU2Mzc5QzYuNzkyODYgMi44ODkzOSA3IDMuMzY2MjYgNyA0VjdINS43NUM1LjQ3Mzg2IDcgNS4yNSA3LjIyMzg2IDUuMjUgNy41QzUuMjUgNy43NzYxNCA1LjQ3Mzg2IDggNS43NSA4SDdWMTFDNyAxMS42MzM3IDYuNzkyODYgMTIuMTEwNiA2LjQyMDc1IDEyLjQzNjJDNi4wMzk5IDEyLjc2OTUgNS40MjIxNSAxMyA0LjUgMTNDNC4yMjM4NiAxMyA0IDEzLjIyMzkgNCAxMy41QzQgMTMuNzc2MSA0LjIyMzg2IDE0IDQuNSAxNEM1LjU3Nzg1IDE0IDYuNDYwMSAxMy43MzA1IDcuMDc5MjUgMTMuMTg4OEM3LjI0MTY4IDEzLjA0NjcgNy4zODE2OSAxMi44ODk2IDcuNSAxMi43MTk4QzcuNjE4MzIgMTIuODg5NiA3Ljc1ODMyIDEzLjA0NjcgNy45MjA3NSAxMy4xODg4QzguNTM5OSAxMy43MzA1IDkuNDIyMTUgMTQgMTAuNSAxNEMxMC43NzYxIDE0IDExIDEzLjc3NjEgMTEgMTMuNUMxMSAxMy4yMjM5IDEwLjc3NjEgMTMgMTAuNSAxM0M5LjU3Nzg1IDEzIDguOTYwMSAxMi43Njk1IDguNTc5MjUgMTIuNDM2MkM4LjIwNzE0IDEyLjExMDYgOCAxMS42MzM3IDggMTFWOEg5LjI1QzkuNTI2MTQgOCA5Ljc1IDcuNzc2MTQgOS43NSA3LjVDOS43NSA3LjIyMzg2IDkuNTI2MTQgNyA5LjI1IDdIOFY0QzggMy4zNjYyNiA4LjIwNzE0IDIuODg5MzkgOC41NzkyNSAyLjU2Mzc5QzguOTYwMSAyLjIzMDU0IDkuNTc3ODUgMiAxMC41IDJDMTAuNzc2MSAyIDExIDEuNzc2MTQgMTEgMS41QzExIDEuMjIzODYgMTAuNzc2MSAxIDEwLjUgMUM5LjQyMjE1IDEgOC41Mzk5IDEuMjY5NDYgNy45MjA3NSAxLjgxMTIxQzcuNzU4MzIgMS45NTMzMyA3LjYxODMyIDIuMTEwNDMgNy41IDIuMjgwMjNDNy4zODE2OCAyLjExMDQzIDcuMjQxNjggMS45NTMzMyA3LjA3OTI1IDEuODExMjFDNi40NjAxIDEuMjY5NDYgNS41Nzc4NSAxIDQuNSAxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0semU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUgNy41QzUgNy4yMjM4NiA1LjIyMzg2IDcgNS41IDdIOS41QzkuNzc2MTQgNyAxMCA3LjIyMzg2IDEwIDcuNUMxMCA3Ljc3NjE0IDkuNzc2MTQgOCA5LjUgOEg1LjVDNS4yMjM4NiA4IDUgNy43NzYxNCA1IDcuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEdlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjggMUwyLjc0OTY3IDAuOTk5OTdDMi41MjEyMiAwLjk5OTc1MiAyLjMyNDI5IDAuOTk5NTY0IDIuMTQ5ODMgMS4wNDE0NUMxLjYwMTM2IDEuMTczMTIgMS4xNzMxMiAxLjYwMTM2IDEuMDQxNDUgMi4xNDk4M0MwLjk5OTU2NCAyLjMyNDI5IDAuOTk5NzUyIDIuNTIxMjIgMC45OTk5NyAyLjc0OTY3TDEgMi44VjUuMkwwLjk5OTk3IDUuMjUwMzNDMC45OTk3NTIgNS40Nzg3OCAwLjk5OTU2NCA1LjY3NTcyIDEuMDQxNDUgNS44NTAxN0MxLjE3MzEyIDYuMzk4NjQgMS42MDEzNiA2LjgyNjg4IDIuMTQ5ODMgNi45NTg1NkMyLjMyNDI5IDcuMDAwNDQgMi41MjEyMiA3LjAwMDI1IDIuNzQ5NjcgNy4wMDAwM0wyLjggN0g1LjJMNS4yNTAzMyA3LjAwMDAzQzUuNDc4NzggNy4wMDAyNSA1LjY3NTcyIDcuMDAwNDQgNS44NTAxNyA2Ljk1ODU2QzYuMzk4NjQgNi44MjY4OCA2LjgyNjg4IDYuMzk4NjQgNi45NTg1NiA1Ljg1MDE3QzcuMDAwNDQgNS42NzU3MiA3LjAwMDI1IDUuNDc4NzggNy4wMDAwMyA1LjI1MDMzTDcgNS4yVjIuOEw3LjAwMDAzIDIuNzQ5NjdDNy4wMDAyNSAyLjUyMTIyIDcuMDAwNDQgMi4zMjQyOSA2Ljk1ODU2IDIuMTQ5ODNDNi44MjY4OCAxLjYwMTM2IDYuMzk4NjQgMS4xNzMxMiA1Ljg1MDE3IDEuMDQxNDVDNS42NzU3MiAwLjk5OTU2NCA1LjQ3ODc4IDAuOTk5NzUyIDUuMjUwMzMgMC45OTk5N0w1LjIgMUgyLjhaTTIuMzgzMjggMi4wMTM4MkMyLjQyNjMyIDIuMDAzNDggMi40OTIyMiAyIDIuOCAySDUuMkM1LjUwNzc5IDIgNS41NzM2OSAyLjAwMzQ4IDUuNjE2NzIgMi4wMTM4MkM1Ljc5OTU1IDIuMDU3NzEgNS45NDIyOSAyLjIwMDQ1IDUuOTg2MTkgMi4zODMyOEM1Ljk5NjUyIDIuNDI2MzIgNiAyLjQ5MjIyIDYgMi44VjUuMkM2IDUuNTA3NzkgNS45OTY1MiA1LjU3MzY5IDUuOTg2MTkgNS42MTY3MkM1Ljk0MjI5IDUuNzk5NTUgNS43OTk1NSA1Ljk0MjI5IDUuNjE2NzIgNS45ODYxOUM1LjU3MzY5IDUuOTk2NTIgNS41MDc3OSA2IDUuMiA2SDIuOEMyLjQ5MjIyIDYgMi40MjYzMiA1Ljk5NjUyIDIuMzgzMjggNS45ODYxOUMyLjIwMDQ1IDUuOTQyMjkgMi4wNTc3MSA1Ljc5OTU1IDIuMDEzODIgNS42MTY3MkMyLjAwMzQ4IDUuNTczNjkgMiA1LjUwNzc5IDIgNS4yVjIuOEMyIDIuNDkyMjIgMi4wMDM0OCAyLjQyNjMyIDIuMDEzODIgMi4zODMyOEMyLjA1NzcxIDIuMjAwNDUgMi4yMDA0NSAyLjA1NzcxIDIuMzgzMjggMi4wMTM4MlpNOS44IDFMOS43NDk2NyAwLjk5OTk3QzkuNTIxMjIgMC45OTk3NTIgOS4zMjQyOSAwLjk5OTU2NCA5LjE0OTgzIDEuMDQxNDVDOC42MDEzNiAxLjE3MzEyIDguMTczMTIgMS42MDEzNiA4LjA0MTQ1IDIuMTQ5ODNDNy45OTk1NiAyLjMyNDI5IDcuOTk5NzUgMi41MjEyMiA3Ljk5OTk3IDIuNzQ5NjdMOCAyLjhWNS4yTDcuOTk5OTcgNS4yNTAzM0M3Ljk5OTc1IDUuNDc4NzggNy45OTk1NiA1LjY3NTcyIDguMDQxNDUgNS44NTAxN0M4LjE3MzEyIDYuMzk4NjQgOC42MDEzNiA2LjgyNjg4IDkuMTQ5ODMgNi45NTg1NkM5LjMyNDI5IDcuMDAwNDQgOS41MjEyMiA3LjAwMDI1IDkuNzQ5NjcgNy4wMDAwM0w5LjggN0gxMi4yTDEyLjI1MDMgNy4wMDAwM0MxMi40Nzg4IDcuMDAwMjUgMTIuNjc1NyA3LjAwMDQ0IDEyLjg1MDIgNi45NTg1NkMxMy4zOTg2IDYuODI2ODggMTMuODI2OSA2LjM5ODY0IDEzLjk1ODYgNS44NTAxN0MxNC4wMDA0IDUuNjc1NzIgMTQuMDAwMyA1LjQ3ODc4IDE0IDUuMjUwMzNMMTQgNS4yVjIuOEwxNCAyLjc0OTY3QzE0LjAwMDMgMi41MjEyMiAxNC4wMDA0IDIuMzI0MjkgMTMuOTU4NiAyLjE0OTgzQzEzLjgyNjkgMS42MDEzNiAxMy4zOTg2IDEuMTczMTIgMTIuODUwMiAxLjA0MTQ1QzEyLjY3NTcgMC45OTk1NjQgMTIuNDc4OCAwLjk5OTc1MiAxMi4yNTAzIDAuOTk5OTdMMTIuMiAxSDkuOFpNOS4zODMyOCAyLjAxMzgyQzkuNDI2MzIgMi4wMDM0OCA5LjQ5MjIyIDIgOS44IDJIMTIuMkMxMi41MDc4IDIgMTIuNTczNyAyLjAwMzQ4IDEyLjYxNjcgMi4wMTM4MkMxMi43OTk1IDIuMDU3NzEgMTIuOTQyMyAyLjIwMDQ1IDEyLjk4NjIgMi4zODMyOEMxMi45OTY1IDIuNDI2MzIgMTMgMi40OTIyMiAxMyAyLjhWNS4yQzEzIDUuNTA3NzkgMTIuOTk2NSA1LjU3MzY5IDEyLjk4NjIgNS42MTY3MkMxMi45NDIzIDUuNzk5NTUgMTIuNzk5NSA1Ljk0MjI5IDEyLjYxNjcgNS45ODYxOUMxMi41NzM3IDUuOTk2NTIgMTIuNTA3OCA2IDEyLjIgNkg5LjhDOS40OTIyMiA2IDkuNDI2MzIgNS45OTY1MiA5LjM4MzI4IDUuOTg2MTlDOS4yMDA0NSA1Ljk0MjI5IDkuMDU3NzEgNS43OTk1NSA5LjAxMzgyIDUuNjE2NzJDOS4wMDM0OCA1LjU3MzY5IDkgNS41MDc3OSA5IDUuMlYyLjhDOSAyLjQ5MjIyIDkuMDAzNDggMi40MjYzMiA5LjAxMzgyIDIuMzgzMjhDOS4wNTc3MSAyLjIwMDQ1IDkuMjAwNDUgMi4wNTc3MSA5LjM4MzI4IDIuMDEzODJaTTIuNzQ5NjcgNy45OTk5N0wyLjggOEg1LjJMNS4yNTAzMyA3Ljk5OTk3QzUuNDc4NzggNy45OTk3NSA1LjY3NTcyIDcuOTk5NTYgNS44NTAxNyA4LjA0MTQ1QzYuMzk4NjQgOC4xNzMxMiA2LjgyNjg4IDguNjAxMzYgNi45NTg1NiA5LjE0OTgzQzcuMDAwNDQgOS4zMjQyOSA3LjAwMDI1IDkuNTIxMjIgNy4wMDAwMyA5Ljc0OTY3TDcgOS44VjEyLjJMNy4wMDAwMyAxMi4yNTAzQzcuMDAwMjUgMTIuNDc4OCA3LjAwMDQ0IDEyLjY3NTcgNi45NTg1NiAxMi44NTAyQzYuODI2ODggMTMuMzk4NiA2LjM5ODY0IDEzLjgyNjkgNS44NTAxNyAxMy45NTg2QzUuNjc1NzIgMTQuMDAwNCA1LjQ3ODc4IDE0LjAwMDMgNS4yNTAzMyAxNEw1LjIgMTRIMi44TDIuNzQ5NjcgMTRDMi41MjEyMiAxNC4wMDAzIDIuMzI0MjkgMTQuMDAwNCAyLjE0OTgzIDEzLjk1ODZDMS42MDEzNiAxMy44MjY5IDEuMTczMTIgMTMuMzk4NiAxLjA0MTQ1IDEyLjg1MDJDMC45OTk1NjQgMTIuNjc1NyAwLjk5OTc1MiAxMi40Nzg4IDAuOTk5OTcgMTIuMjUwM0wxIDEyLjJWOS44TDAuOTk5OTcgOS43NDk2N0MwLjk5OTc1MiA5LjUyMTIyIDAuOTk5NTY0IDkuMzI0MjkgMS4wNDE0NSA5LjE0OTgzQzEuMTczMTIgOC42MDEzNiAxLjYwMTM2IDguMTczMTIgMi4xNDk4MyA4LjA0MTQ1QzIuMzI0MjkgNy45OTk1NiAyLjUyMTIyIDcuOTk5NzUgMi43NDk2NyA3Ljk5OTk3Wk0yLjggOUMyLjQ5MjIyIDkgMi40MjYzMiA5LjAwMzQ4IDIuMzgzMjggOS4wMTM4MkMyLjIwMDQ1IDkuMDU3NzEgMi4wNTc3MSA5LjIwMDQ1IDIuMDEzODIgOS4zODMyOEMyLjAwMzQ4IDkuNDI2MzIgMiA5LjQ5MjIyIDIgOS44VjEyLjJDMiAxMi41MDc4IDIuMDAzNDggMTIuNTczNyAyLjAxMzgyIDEyLjYxNjdDMi4wNTc3MSAxMi43OTk1IDIuMjAwNDUgMTIuOTQyMyAyLjM4MzI4IDEyLjk4NjJDMi40MjYzMiAxMi45OTY1IDIuNDkyMjIgMTMgMi44IDEzSDUuMkM1LjUwNzc5IDEzIDUuNTczNjkgMTIuOTk2NSA1LjYxNjcyIDEyLjk4NjJDNS43OTk1NSAxMi45NDIzIDUuOTQyMjkgMTIuNzk5NSA1Ljk4NjE5IDEyLjYxNjdDNS45OTY1MiAxMi41NzM3IDYgMTIuNTA3OCA2IDEyLjJWOS44QzYgOS40OTIyMiA1Ljk5NjUyIDkuNDI2MzIgNS45ODYxOSA5LjM4MzI4QzUuOTQyMjkgOS4yMDA0NSA1Ljc5OTU1IDkuMDU3NzEgNS42MTY3MiA5LjAxMzgyQzUuNTczNjkgOS4wMDM0OCA1LjUwNzc5IDkgNS4yIDlIMi44Wk05LjggOEw5Ljc0OTY3IDcuOTk5OTdDOS41MjEyMiA3Ljk5OTc1IDkuMzI0MjkgNy45OTk1NiA5LjE0OTgzIDguMDQxNDVDOC42MDEzNiA4LjE3MzEyIDguMTczMTIgOC42MDEzNiA4LjA0MTQ1IDkuMTQ5ODNDNy45OTk1NiA5LjMyNDI5IDcuOTk5NzUgOS41MjEyMiA3Ljk5OTk3IDkuNzQ5NjdMOCA5LjhWMTIuMkw3Ljk5OTk3IDEyLjI1MDNDNy45OTk3NSAxMi40Nzg4IDcuOTk5NTYgMTIuNjc1NyA4LjA0MTQ1IDEyLjg1MDJDOC4xNzMxMiAxMy4zOTg2IDguNjAxMzYgMTMuODI2OSA5LjE0OTgzIDEzLjk1ODZDOS4zMjQyOSAxNC4wMDA0IDkuNTIxMjIgMTQuMDAwMyA5Ljc0OTY3IDE0TDkuOCAxNEgxMi4yTDEyLjI1MDMgMTRDMTIuNDc4OCAxNC4wMDAzIDEyLjY3NTcgMTQuMDAwNCAxMi44NTAyIDEzLjk1ODZDMTMuMzk4NiAxMy44MjY5IDEzLjgyNjkgMTMuMzk4NiAxMy45NTg2IDEyLjg1MDJDMTQuMDAwNCAxMi42NzU3IDE0LjAwMDMgMTIuNDc4OCAxNCAxMi4yNTAzTDE0IDEyLjJWOS44TDE0IDkuNzQ5NjdDMTQuMDAwMyA5LjUyMTIyIDE0LjAwMDQgOS4zMjQyOSAxMy45NTg2IDkuMTQ5ODNDMTMuODI2OSA4LjYwMTM2IDEzLjM5ODYgOC4xNzMxMiAxMi44NTAyIDguMDQxNDVDMTIuNjc1NyA3Ljk5OTU2IDEyLjQ3ODggNy45OTk3NSAxMi4yNTAzIDcuOTk5OTdMMTIuMiA4SDkuOFpNOS4zODMyOCA5LjAxMzgyQzkuNDI2MzIgOS4wMDM0OCA5LjQ5MjIyIDkgOS44IDlIMTIuMkMxMi41MDc4IDkgMTIuNTczNyA5LjAwMzQ4IDEyLjYxNjcgOS4wMTM4MkMxMi43OTk1IDkuMDU3NzEgMTIuOTQyMyA5LjIwMDQ1IDEyLjk4NjIgOS4zODMyOEMxMi45OTY1IDkuNDI2MzIgMTMgOS40OTIyMiAxMyA5LjhWMTIuMkMxMyAxMi41MDc4IDEyLjk5NjUgMTIuNTczNyAxMi45ODYyIDEyLjYxNjdDMTIuOTQyMyAxMi43OTk1IDEyLjc5OTUgMTIuOTQyMyAxMi42MTY3IDEyLjk4NjJDMTIuNTczNyAxMi45OTY1IDEyLjUwNzggMTMgMTIuMiAxM0g5LjhDOS40OTIyMiAxMyA5LjQyNjMyIDEyLjk5NjUgOS4zODMyOCAxMi45ODYyQzkuMjAwNDUgMTIuOTQyMyA5LjA1NzcxIDEyLjc5OTUgOS4wMTM4MiAxMi42MTY3QzkuMDAzNDggMTIuNTczNyA5IDEyLjUwNzggOSAxMi4yVjkuOEM5IDkuNDkyMjIgOS4wMDM0OCA5LjQyNjMyIDkuMDEzODIgOS4zODMyOEM5LjA1NzcxIDkuMjAwNDUgOS4yMDA0NSA5LjA1NzcxIDkuMzgzMjggOS4wMTM4MlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEtlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjAwMDE0IDIuNzM4OTVDMy4wMDAxNCAyLjk0Njk4IDIuNzYwODcgMy4wNjQwMSAyLjU5NjY2IDIuOTM2MjhMMS4wMDM4NiAxLjY5NzQ0QzAuODc1MTc3IDEuNTk3MzUgMC44NzUxNzcgMS40MDI4NiAxLjAwMzg2IDEuMzAyNzdMMi41OTY2NiAwLjA2MzkyOEMyLjc2MDg3IC0wLjA2Mzc5NDQgMy4wMDAxNCAwLjA1MzIyOTMgMy4wMDAxNCAwLjI2MTI2NlYxLjAwMDEySDkuMDAwMDlWMC4yNjEyOTZDOS4wMDAwOSAwLjA1MzI1OTEgOS4yMzkzNiAtMC4wNjM3NjQ2IDkuNDAzNTggMC4wNjM5NTc4TDEwLjk5NjQgMS4zMDI4QzExLjEyNTEgMS40MDI4OSAxMS4xMjUxIDEuNTk3MzggMTAuOTk2NCAxLjY5NzQ3TDkuNDAzNTggMi45MzYzMUM5LjIzOTM2IDMuMDY0MDQgOS4wMDAwOSAyLjk0NzAxIDkuMDAwMDkgMi43Mzg5OFYyLjAwMDEySDMuMDAwMTRWMi43Mzg5NVpNOS41MDAwMiA0Ljk5OTk4SDIuNTAwMDJDMi4yMjM4OCA0Ljk5OTk4IDIuMDAwMDIgNS4yMjM4NCAyLjAwMDAyIDUuNDk5OThWMTIuNUMyLjAwMDAyIDEyLjc3NjEgMi4yMjM4OCAxMyAyLjUwMDAyIDEzSDkuNTAwMDJDOS43NzYxNiAxMyAxMCAxMi43NzYxIDEwIDEyLjVWNS40OTk5OEMxMCA1LjIyMzg0IDkuNzc2MTYgNC45OTk5OCA5LjUwMDAyIDQuOTk5OThaTTIuNTAwMDIgMy45OTk5OEMxLjY3MTU5IDMuOTk5OTggMS4wMDAwMiA0LjY3MTU2IDEuMDAwMDIgNS40OTk5OFYxMi41QzEuMDAwMDIgMTMuMzI4NCAxLjY3MTU5IDE0IDIuNTAwMDIgMTRIOS41MDAwMkMxMC4zMjg0IDE0IDExIDEzLjMyODQgMTEgMTIuNVY1LjQ5OTk4QzExIDQuNjcxNTYgMTAuMzI4NCAzLjk5OTk4IDkuNTAwMDIgMy45OTk5OEgyLjUwMDAyWk0xNC43Mzg5IDYuMDAwMDFIMTRWMTJIMTQuNzM4OUMxNC45NDY5IDEyIDE1LjA2NCAxMi4yMzkzIDE0LjkzNjIgMTIuNDAzNUwxMy42OTc0IDEzLjk5NjNDMTMuNTk3MyAxNC4xMjUgMTMuNDAyOCAxNC4xMjUgMTMuMzAyNyAxMy45OTYzTDEyLjA2MzkgMTIuNDAzNUMxMS45MzYyIDEyLjIzOTMgMTIuMDUzMiAxMiAxMi4yNjEyIDEySDEzVjYuMDAwMDFIMTIuMjYxMkMxMi4wNTMyIDYuMDAwMDEgMTEuOTM2MSA1Ljc2MDc0IDEyLjA2MzkgNS41OTY1M0wxMy4zMDI3IDQuMDAzNzNDMTMuNDAyOCAzLjg3NTA1IDEzLjU5NzMgMy44NzUwNSAxMy42OTc0IDQuMDAzNzRMMTQuOTM2MiA1LjU5NjUzQzE1LjA2MzkgNS43NjA3NCAxNC45NDY5IDYuMDAwMDEgMTQuNzM4OSA2LjAwMDAxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5OTEgMC44NzcwNzVDMy44NDIyMiAwLjg3NzA3NSAwLjg3NzA3NSAzLjg0MjIyIDAuODc3MDc1IDcuNDk5OTFDMC44NzcwNzUgMTEuMTU3NiAzLjg0MjIyIDE0LjEyMjcgNy40OTk5MSAxNC4xMjI3QzExLjE1NzYgMTQuMTIyNyAxNC4xMjI3IDExLjE1NzYgMTQuMTIyNyA3LjQ5OTkxQzE0LjEyMjcgMy44NDIyMiAxMS4xNTc2IDAuODc3MDc1IDcuNDk5OTEgMC44NzcwNzVaTTEuODI3MDggNy40OTk5MUMxLjgyNzA4IDQuMzY2ODkgNC4zNjY4OSAxLjgyNzA3IDcuNDk5OTEgMS44MjcwN0MxMC42MzI5IDEuODI3MDcgMTMuMTcyNyA0LjM2Njg5IDEzLjE3MjcgNy40OTk5MUMxMy4xNzI3IDEwLjYzMjkgMTAuNjMyOSAxMy4xNzI3IDcuNDk5OTEgMTMuMTcyN0M0LjM2Njg5IDEzLjE3MjcgMS44MjcwOCAxMC42MzI5IDEuODI3MDggNy40OTk5MVpNOC4zNzI4NyA3LjUwMDA2QzguMzcyODcgNy45ODE5NiA3Ljk4MjIxIDguMzcyNjMgNy41MDAzIDguMzcyNjNDNy4wMTgzOSA4LjM3MjYzIDYuNjI3NzMgNy45ODE5NiA2LjYyNzczIDcuNTAwMDZDNi42Mjc3MyA3LjAxODE1IDcuMDE4MzkgNi42Mjc0OCA3LjUwMDMgNi42Mjc0OEM3Ljk4MjIxIDYuNjI3NDggOC4zNzI4NyA3LjAxODE1IDguMzcyODcgNy41MDAwNlpNOS4zMjI4NyA3LjUwMDA2QzkuMzIyODcgOC41MDY2NCA4LjUwNjg4IDkuMzIyNjMgNy41MDAzIDkuMzIyNjNDNi40OTM3MiA5LjMyMjYzIDUuNjc3NzMgOC41MDY2NCA1LjY3NzczIDcuNTAwMDZDNS42Nzc3MyA2LjQ5MzQ4IDYuNDkzNzIgNS42Nzc0OCA3LjUwMDMgNS42Nzc0OEM4LjUwNjg4IDUuNjc3NDggOS4zMjI4NyA2LjQ5MzQ4IDkuMzIyODcgNy41MDAwNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFllPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yIDcuNUMyIDcuMjIzODYgMi4yMjM4NiA3IDIuNSA3SDEyLjVDMTIuNzc2MSA3IDEzIDcuMjIzODYgMTMgNy41QzEzIDcuNzc2MTQgMTIuNzc2MSA4IDEyLjUgOEgyLjVDMi4yMjM4NiA4IDIgNy43NzYxNCAyIDcuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEplPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUgMkM3Ljc3NjE0IDIgOCAyLjIyMzg2IDggMi41TDggMTIuNUM4IDEyLjc3NjEgNy43NzYxNCAxMyA3LjUgMTNDNy4yMjM4NiAxMyA3IDEyLjc3NjEgNyAxMi41TDcgMi41QzcgMi4yMjM4NiA3LjIyMzg2IDIgNy41IDJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxYZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41IDkuMTI1QzguMzk3NDYgOS4xMjUgOS4xMjUgOC4zOTc0NiA5LjEyNSA3LjVDOS4xMjUgNi42MDI1NCA4LjM5NzQ2IDUuODc1IDcuNSA1Ljg3NUM2LjYwMjU0IDUuODc1IDUuODc1IDYuNjAyNTQgNS44NzUgNy41QzUuODc1IDguMzk3NDYgNi42MDI1NCA5LjEyNSA3LjUgOS4xMjVaTTcuNSAxMC4xMjVDOC45NDk3NSAxMC4xMjUgMTAuMTI1IDguOTQ5NzUgMTAuMTI1IDcuNUMxMC4xMjUgNi4wNTAyNSA4Ljk0OTc1IDQuODc1IDcuNSA0Ljg3NUM2LjA1MDI1IDQuODc1IDQuODc1IDYuMDUwMjUgNC44NzUgNy41QzQuODc1IDguOTQ5NzUgNi4wNTAyNSAxMC4xMjUgNy41IDEwLjEyNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFFlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk05Ljg3NSA3LjVDOS44NzUgOC44MTE2OCA4LjgxMTY4IDkuODc1IDcuNSA5Ljg3NUM2LjE4ODMyIDkuODc1IDUuMTI1IDguODExNjggNS4xMjUgNy41QzUuMTI1IDYuMTg4MzIgNi4xODgzMiA1LjEyNSA3LjUgNS4xMjVDOC44MTE2OCA1LjEyNSA5Ljg3NSA2LjE4ODMyIDkuODc1IDcuNVpcIixmaWxsOm59KSl9LGV0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjYyNSA3LjVDMy42MjUgOC4xMjEzMiAzLjEyMTMyIDguNjI1IDIuNSA4LjYyNUMxLjg3ODY4IDguNjI1IDEuMzc1IDguMTIxMzIgMS4zNzUgNy41QzEuMzc1IDYuODc4NjggMS44Nzg2OCA2LjM3NSAyLjUgNi4zNzVDMy4xMjEzMiA2LjM3NSAzLjYyNSA2Ljg3ODY4IDMuNjI1IDcuNVpNOC42MjUgNy41QzguNjI1IDguMTIxMzIgOC4xMjEzMiA4LjYyNSA3LjUgOC42MjVDNi44Nzg2OCA4LjYyNSA2LjM3NSA4LjEyMTMyIDYuMzc1IDcuNUM2LjM3NSA2Ljg3ODY4IDYuODc4NjggNi4zNzUgNy41IDYuMzc1QzguMTIxMzIgNi4zNzUgOC42MjUgNi44Nzg2OCA4LjYyNSA3LjVaTTEyLjUgOC42MjVDMTMuMTIxMyA4LjYyNSAxMy42MjUgOC4xMjEzMiAxMy42MjUgNy41QzEzLjYyNSA2Ljg3ODY4IDEzLjEyMTMgNi4zNzUgMTIuNSA2LjM3NUMxMS44Nzg3IDYuMzc1IDExLjM3NSA2Ljg3ODY4IDExLjM3NSA3LjVDMTEuMzc1IDguMTIxMzIgMTEuODc4NyA4LjYyNSAxMi41IDguNjI1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTguNjI1IDIuNUM4LjYyNSAzLjEyMTMyIDguMTIxMzIgMy42MjUgNy41IDMuNjI1QzYuODc4NjggMy42MjUgNi4zNzUgMy4xMjEzMiA2LjM3NSAyLjVDNi4zNzUgMS44Nzg2OCA2Ljg3ODY4IDEuMzc1IDcuNSAxLjM3NUM4LjEyMTMyIDEuMzc1IDguNjI1IDEuODc4NjggOC42MjUgMi41Wk04LjYyNSA3LjVDOC42MjUgOC4xMjEzMiA4LjEyMTMyIDguNjI1IDcuNSA4LjYyNUM2Ljg3ODY4IDguNjI1IDYuMzc1IDguMTIxMzIgNi4zNzUgNy41QzYuMzc1IDYuODc4NjggNi44Nzg2OCA2LjM3NSA3LjUgNi4zNzVDOC4xMjEzMiA2LjM3NSA4LjYyNSA2Ljg3ODY4IDguNjI1IDcuNVpNNy41IDEzLjYyNUM4LjEyMTMyIDEzLjYyNSA4LjYyNSAxMy4xMjEzIDguNjI1IDEyLjVDOC42MjUgMTEuODc4NyA4LjEyMTMyIDExLjM3NSA3LjUgMTEuMzc1QzYuODc4NjggMTEuMzc1IDYuMzc1IDExLjg3ODcgNi4zNzUgMTIuNUM2LjM3NSAxMy4xMjEzIDYuODc4NjggMTMuNjI1IDcuNSAxMy42MjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxudD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy44NTM1NSAyLjE0NjQ1QzMuNjU4MjkgMS45NTExOCAzLjM0MTcxIDEuOTUxMTggMy4xNDY0NSAyLjE0NjQ1QzIuOTUxMTggMi4zNDE3MSAyLjk1MTE4IDIuNjU4MjkgMy4xNDY0NSAyLjg1MzU1TDcuMTQ2NDUgNi44NTM1NUM3LjM0MTcxIDcuMDQ4ODIgNy42NTgyOSA3LjA0ODgyIDcuODUzNTUgNi44NTM1NUwxMS44NTM2IDIuODUzNTVDMTIuMDQ4OCAyLjY1ODI5IDEyLjA0ODggMi4zNDE3MSAxMS44NTM2IDIuMTQ2NDVDMTEuNjU4MyAxLjk1MTE4IDExLjM0MTcgMS45NTExOCAxMS4xNDY0IDIuMTQ2NDVMNy41IDUuNzkyODlMMy44NTM1NSAyLjE0NjQ1Wk0zLjg1MzU1IDguMTQ2NDVDMy42NTgyOSA3Ljk1MTE4IDMuMzQxNzEgNy45NTExOCAzLjE0NjQ1IDguMTQ2NDVDMi45NTExOCA4LjM0MTcxIDIuOTUxMTggOC42NTgyOSAzLjE0NjQ1IDguODUzNTVMNy4xNDY0NSAxMi44NTM2QzcuMzQxNzEgMTMuMDQ4OCA3LjY1ODI5IDEzLjA0ODggNy44NTM1NSAxMi44NTM2TDExLjg1MzYgOC44NTM1NUMxMi4wNDg4IDguNjU4MjkgMTIuMDQ4OCA4LjM0MTcxIDExLjg1MzYgOC4xNDY0NUMxMS42NTgzIDcuOTUxMTggMTEuMzQxNyA3Ljk1MTE4IDExLjE0NjQgOC4xNDY0NUw3LjUgMTEuNzkyOUwzLjg1MzU1IDguMTQ2NDVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxydD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNi44NTM1NSAzLjg1MzU1QzcuMDQ4ODIgMy42NTgyOSA3LjA0ODgyIDMuMzQxNzEgNi44NTM1NSAzLjE0NjQ1QzYuNjU4MjkgMi45NTExOCA2LjM0MTcxIDIuOTUxMTggNi4xNDY0NSAzLjE0NjQ1TDIuMTQ2NDUgNy4xNDY0NUMxLjk1MTE4IDcuMzQxNzEgMS45NTExOCA3LjY1ODI5IDIuMTQ2NDUgNy44NTM1NUw2LjE0NjQ1IDExLjg1MzZDNi4zNDE3MSAxMi4wNDg4IDYuNjU4MjkgMTIuMDQ4OCA2Ljg1MzU1IDExLjg1MzZDNy4wNDg4MiAxMS42NTgzIDcuMDQ4ODIgMTEuMzQxNyA2Ljg1MzU1IDExLjE0NjRMMy4yMDcxMSA3LjVMNi44NTM1NSAzLjg1MzU1Wk0xMi44NTM2IDMuODUzNTVDMTMuMDQ4OCAzLjY1ODI5IDEzLjA0ODggMy4zNDE3MSAxMi44NTM2IDMuMTQ2NDVDMTIuNjU4MyAyLjk1MTE4IDEyLjM0MTcgMi45NTExOCAxMi4xNDY0IDMuMTQ2NDVMOC4xNDY0NSA3LjE0NjQ1QzcuOTUxMTggNy4zNDE3MSA3Ljk1MTE4IDcuNjU4MjkgOC4xNDY0NSA3Ljg1MzU1TDEyLjE0NjQgMTEuODUzNkMxMi4zNDE3IDEyLjA0ODggMTIuNjU4MyAxMi4wNDg4IDEyLjg1MzYgMTEuODUzNkMxMy4wNDg4IDExLjY1ODMgMTMuMDQ4OCAxMS4zNDE3IDEyLjg1MzYgMTEuMTQ2NEw5LjIwNzExIDcuNUwxMi44NTM2IDMuODUzNTVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxvdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi4xNDY0NSAxMS4xNDY0QzEuOTUxMTggMTEuMzQxNyAxLjk1MTE4IDExLjY1ODMgMi4xNDY0NSAxMS44NTM2QzIuMzQxNzEgMTIuMDQ4OCAyLjY1ODI5IDEyLjA0ODggMi44NTM1NSAxMS44NTM2TDYuODUzNTUgNy44NTM1NUM3LjA0ODgyIDcuNjU4MjkgNy4wNDg4MiA3LjM0MTcxIDYuODUzNTUgNy4xNDY0NUwyLjg1MzU1IDMuMTQ2NDVDMi42NTgyOSAyLjk1MTE4IDIuMzQxNzEgMi45NTExOCAyLjE0NjQ1IDMuMTQ2NDVDMS45NTExOCAzLjM0MTcxIDEuOTUxMTggMy42NTgyOSAyLjE0NjQ1IDMuODUzNTVMNS43OTI4OSA3LjVMMi4xNDY0NSAxMS4xNDY0Wk04LjE0NjQ1IDExLjE0NjRDNy45NTExOCAxMS4zNDE3IDcuOTUxMTggMTEuNjU4MyA4LjE0NjQ1IDExLjg1MzZDOC4zNDE3MSAxMi4wNDg4IDguNjU4MjkgMTIuMDQ4OCA4Ljg1MzU1IDExLjg1MzZMMTIuODUzNiA3Ljg1MzU1QzEzLjA0ODggNy42NTgyOSAxMy4wNDg4IDcuMzQxNzEgMTIuODUzNiA3LjE0NjQ1TDguODUzNTUgMy4xNDY0NUM4LjY1ODI5IDIuOTUxMTggOC4zNDE3MSAyLjk1MTE4IDguMTQ2NDUgMy4xNDY0NUM3Ljk1MTE4IDMuMzQxNzEgNy45NTExOCAzLjY1ODI5IDguMTQ2NDUgMy44NTM1NUwxMS43OTI5IDcuNUw4LjE0NjQ1IDExLjE0NjRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxhdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTEuMTQ2NCA2Ljg1MzU1QzExLjM0MTcgNy4wNDg4MiAxMS42NTgzIDcuMDQ4ODIgMTEuODUzNiA2Ljg1MzU1QzEyLjA0ODggNi42NTgyOSAxMi4wNDg4IDYuMzQxNzEgMTEuODUzNiA2LjE0NjQ1TDcuODUzNTUgMi4xNDY0NUM3LjY1ODI5IDEuOTUxMTggNy4zNDE3MSAxLjk1MTE4IDcuMTQ2NDUgMi4xNDY0NUwzLjE0NjQ1IDYuMTQ2NDVDMi45NTExOCA2LjM0MTcxIDIuOTUxMTggNi42NTgyOSAzLjE0NjQ1IDYuODUzNTVDMy4zNDE3MSA3LjA0ODgyIDMuNjU4MjkgNy4wNDg4MiAzLjg1MzU1IDYuODUzNTVMNy41IDMuMjA3MTFMMTEuMTQ2NCA2Ljg1MzU1Wk0xMS4xNDY0IDEyLjg1MzZDMTEuMzQxNyAxMy4wNDg4IDExLjY1ODMgMTMuMDQ4OCAxMS44NTM2IDEyLjg1MzZDMTIuMDQ4OCAxMi42NTgzIDEyLjA0ODggMTIuMzQxNyAxMS44NTM2IDEyLjE0NjRMNy44NTM1NSA4LjE0NjQ1QzcuNjU4MjkgNy45NTExOCA3LjM0MTcxIDcuOTUxMTggNy4xNDY0NSA4LjE0NjQ1TDMuMTQ2NDUgMTIuMTQ2NEMyLjk1MTE4IDEyLjM0MTcgMi45NTExOCAxMi42NTgzIDMuMTQ2NDUgMTIuODUzNkMzLjM0MTcxIDEzLjA0ODggMy42NTgyOSAxMy4wNDg4IDMuODUzNTUgMTIuODUzNkw3LjUgOS4yMDcxMUwxMS4xNDY0IDEyLjg1MzZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxpdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41MDAwNSAxLjA0OTk5QzcuNzQ4NTggMS4wNDk5OSA3Ljk1MDA1IDEuMjUxNDYgNy45NTAwNSAxLjQ5OTk5VjguNDEzNTlMMTAuMTgxOSA2LjE4MTc5QzEwLjM1NzYgNi4wMDYwNSAxMC42NDI1IDYuMDA2MDUgMTAuODE4MiA2LjE4MTc5QzEwLjk5NCA2LjM1NzUzIDEwLjk5NCA2LjY0MjQ1IDEwLjgxODIgNi44MTgxOUw3LjgxODI1IDkuODE4MTlDNy42NDI1MSA5Ljk5MzkyIDcuMzU3NTkgOS45OTM5MiA3LjE4MTg1IDkuODE4MTlMNC4xODE4NSA2LjgxODE5QzQuMDA2MTEgNi42NDI0NSA0LjAwNjExIDYuMzU3NTMgNC4xODE4NSA2LjE4MTc5QzQuMzU3NTkgNi4wMDYwNSA0LjY0MjUxIDYuMDA2MDUgNC44MTgyNSA2LjE4MTc5TDcuMDUwMDUgOC40MTM1OVYxLjQ5OTk5QzcuMDUwMDUgMS4yNTE0NiA3LjI1MTUyIDEuMDQ5OTkgNy41MDAwNSAxLjA0OTk5Wk0yLjUgMTBDMi43NzYxNCAxMCAzIDEwLjIyMzkgMyAxMC41VjEyQzMgMTIuNTUzOSAzLjQ0NTY1IDEzIDMuOTk2MzUgMTNIMTEuMDAxMkMxMS41NTI5IDEzIDEyIDEyLjU1MjggMTIgMTJWMTAuNUMxMiAxMC4yMjM5IDEyLjIyMzkgMTAgMTIuNSAxMEMxMi43NzYxIDEwIDEzIDEwLjIyMzkgMTMgMTAuNVYxMkMxMyAxMy4xMDQxIDEyLjEwNjIgMTQgMTEuMDAxMiAxNEgzLjk5NjM1QzIuODkwMTkgMTQgMiAxMy4xMDMgMiAxMlYxMC41QzIgMTAuMjIzOSAyLjIyMzg2IDEwIDIuNSAxMFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGx0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjQuNVwiLGN5OlwiMi41XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjQuNVwiLGN5OlwiNC41XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjQuNVwiLGN5OlwiNi40OTlcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiNC41XCIsY3k6XCI4LjQ5OVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI0LjVcIixjeTpcIjEwLjQ5OFwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI0LjVcIixjeTpcIjEyLjQ5OFwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI2LjVcIixjeTpcIjIuNVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI2LjVcIixjeTpcIjQuNVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI2LjVcIixjeTpcIjYuNDk5XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjYuNVwiLGN5OlwiOC40OTlcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiNi41XCIsY3k6XCIxMC40OThcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiNi41XCIsY3k6XCIxMi40OThcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiOC40OTlcIixjeTpcIjIuNVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI4LjQ5OVwiLGN5OlwiNC41XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjguNDk5XCIsY3k6XCI2LjQ5OVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI4LjQ5OVwiLGN5OlwiOC40OTlcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiOC40OTlcIixjeTpcIjEwLjQ5OFwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI4LjQ5OVwiLGN5OlwiMTIuNDk4XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjEwLjQ5OVwiLGN5OlwiMi41XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjEwLjQ5OVwiLGN5OlwiNC41XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjEwLjQ5OVwiLGN5OlwiNi40OTlcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiMTAuNDk5XCIsY3k6XCI4LjQ5OVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCIxMC40OTlcIixjeTpcIjEwLjQ5OFwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCIxMC40OTlcIixjeTpcIjEyLjQ5OFwiLHI6XCIuNlwiLGZpbGw6bn0pKX0sc3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUuNSA0LjYyNUM2LjEyMTMyIDQuNjI1IDYuNjI1IDQuMTIxMzIgNi42MjUgMy41QzYuNjI1IDIuODc4NjggNi4xMjEzMiAyLjM3NSA1LjUgMi4zNzVDNC44Nzg2OCAyLjM3NSA0LjM3NSAyLjg3ODY4IDQuMzc1IDMuNUM0LjM3NSA0LjEyMTMyIDQuODc4NjggNC42MjUgNS41IDQuNjI1Wk05LjUgNC42MjVDMTAuMTIxMyA0LjYyNSAxMC42MjUgNC4xMjEzMiAxMC42MjUgMy41QzEwLjYyNSAyLjg3ODY4IDEwLjEyMTMgMi4zNzUgOS41IDIuMzc1QzguODc4NjggMi4zNzUgOC4zNzUgMi44Nzg2OCA4LjM3NSAzLjVDOC4zNzUgNC4xMjEzMiA4Ljg3ODY4IDQuNjI1IDkuNSA0LjYyNVpNMTAuNjI1IDcuNUMxMC42MjUgOC4xMjEzMiAxMC4xMjEzIDguNjI1IDkuNSA4LjYyNUM4Ljg3ODY4IDguNjI1IDguMzc1IDguMTIxMzIgOC4zNzUgNy41QzguMzc1IDYuODc4NjggOC44Nzg2OCA2LjM3NSA5LjUgNi4zNzVDMTAuMTIxMyA2LjM3NSAxMC42MjUgNi44Nzg2OCAxMC42MjUgNy41Wk01LjUgOC42MjVDNi4xMjEzMiA4LjYyNSA2LjYyNSA4LjEyMTMyIDYuNjI1IDcuNUM2LjYyNSA2Ljg3ODY4IDYuMTIxMzIgNi4zNzUgNS41IDYuMzc1QzQuODc4NjggNi4zNzUgNC4zNzUgNi44Nzg2OCA0LjM3NSA3LjVDNC4zNzUgOC4xMjEzMiA0Ljg3ODY4IDguNjI1IDUuNSA4LjYyNVpNMTAuNjI1IDExLjVDMTAuNjI1IDEyLjEyMTMgMTAuMTIxMyAxMi42MjUgOS41IDEyLjYyNUM4Ljg3ODY4IDEyLjYyNSA4LjM3NSAxMi4xMjEzIDguMzc1IDExLjVDOC4zNzUgMTAuODc4NyA4Ljg3ODY4IDEwLjM3NSA5LjUgMTAuMzc1QzEwLjEyMTMgMTAuMzc1IDEwLjYyNSAxMC44Nzg3IDEwLjYyNSAxMS41Wk01LjUgMTIuNjI1QzYuMTIxMzIgMTIuNjI1IDYuNjI1IDEyLjEyMTMgNi42MjUgMTEuNUM2LjYyNSAxMC44Nzg3IDYuMTIxMzIgMTAuMzc1IDUuNSAxMC4zNzVDNC44Nzg2OCAxMC4zNzUgNC4zNzUgMTAuODc4NyA0LjM3NSAxMS41QzQuMzc1IDEyLjEyMTMgNC44Nzg2OCAxMi42MjUgNS41IDEyLjYyNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGN0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjQ5OTk4IDQuMDk5OThDMi4yNzkwNiA0LjA5OTk4IDIuMDk5OTggNC4yNzkwNiAyLjA5OTk4IDQuNDk5OThDMi4wOTk5OCA0LjcyMDg5IDIuMjc5MDYgNC44OTk5OCAyLjQ5OTk4IDQuODk5OThIMTIuNUMxMi43MjA5IDQuODk5OTggMTIuOSA0LjcyMDg5IDEyLjkgNC40OTk5OEMxMi45IDQuMjc5MDYgMTIuNzIwOSA0LjA5OTk4IDEyLjUgNC4wOTk5OEgyLjQ5OTk4Wk0yLjQ5OTk4IDYuMDk5OThDMi4yNzkwNiA2LjA5OTk4IDIuMDk5OTggNi4yNzkwNiAyLjA5OTk4IDYuNDk5OThDMi4wOTk5OCA2LjcyMDg5IDIuMjc5MDYgNi44OTk5OCAyLjQ5OTk4IDYuODk5OThIMTIuNUMxMi43MjA5IDYuODk5OTggMTIuOSA2LjcyMDg5IDEyLjkgNi40OTk5OEMxMi45IDYuMjc5MDYgMTIuNzIwOSA2LjA5OTk4IDEyLjUgNi4wOTk5OEgyLjQ5OTk4Wk0yLjA5OTk4IDguNDk5OThDMi4wOTk5OCA4LjI3OTA2IDIuMjc5MDYgOC4wOTk5OCAyLjQ5OTk4IDguMDk5OThIMTIuNUMxMi43MjA5IDguMDk5OTggMTIuOSA4LjI3OTA2IDEyLjkgOC40OTk5OEMxMi45IDguNzIwODkgMTIuNzIwOSA4Ljg5OTk4IDEyLjUgOC44OTk5OEgyLjQ5OTk4QzIuMjc5MDYgOC44OTk5OCAyLjA5OTk4IDguNzIwODkgMi4wOTk5OCA4LjQ5OTk4Wk0yLjQ5OTk4IDEwLjFDMi4yNzkwNiAxMC4xIDIuMDk5OTggMTAuMjc5MSAyLjA5OTk4IDEwLjVDMi4wOTk5OCAxMC43MjA5IDIuMjc5MDYgMTAuOSAyLjQ5OTk4IDEwLjlIMTIuNUMxMi43MjA5IDEwLjkgMTIuOSAxMC43MjA5IDEyLjkgMTAuNUMxMi45IDEwLjI3OTEgMTIuNzIwOSAxMC4xIDEyLjUgMTAuMUgyLjQ5OTk4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuMDk5OTggMTIuNUM0LjA5OTk4IDEyLjcyMDkgNC4yNzkwNiAxMi45IDQuNDk5OTggMTIuOUM0LjcyMDg5IDEyLjkgNC44OTk5OCAxMi43MjA5IDQuODk5OTggMTIuNUw0Ljg5OTk4IDIuNTAwMDJDNC44OTk5OCAyLjI3OTExIDQuNzIwODkgMi4xMDAwMyA0LjQ5OTk4IDIuMTAwMDNDNC4yNzkwNiAyLjEwMDAzIDQuMDk5OTggMi4yNzkxMSA0LjA5OTk4IDIuNTAwMDJMNC4wOTk5OCAxMi41Wk02LjA5OTk4IDEyLjVDNi4wOTk5OCAxMi43MjA5IDYuMjc5MDYgMTIuOSA2LjQ5OTk4IDEyLjlDNi43MjA4OSAxMi45IDYuODk5OTggMTIuNzIwOSA2Ljg5OTk4IDEyLjVMNi44OTk5OCAyLjUwMDAyQzYuODk5OTggMi4yNzkxMSA2LjcyMDg5IDIuMTAwMDMgNi40OTk5OCAyLjEwMDAzQzYuMjc5MDYgMi4xMDAwMyA2LjA5OTk4IDIuMjc5MTEgNi4wOTk5OCAyLjUwMDAyTDYuMDk5OTggMTIuNVpNOC40OTk5OCAxMi45QzguMjc5MDYgMTIuOSA4LjA5OTk4IDEyLjcyMDkgOC4wOTk5OCAxMi41TDguMDk5OTggMi41MDAwMkM4LjA5OTk4IDIuMjc5MTEgOC4yNzkwNiAyLjEwMDAyIDguNDk5OTggMi4xMDAwMkM4LjcyMDg5IDIuMTAwMDIgOC44OTk5OCAyLjI3OTExIDguODk5OTggMi41MDAwMkw4Ljg5OTk4IDEyLjVDOC44OTk5OCAxMi43MjA5IDguNzIwODkgMTIuOSA4LjQ5OTk4IDEyLjlaTTEwLjEgMTIuNUMxMC4xIDEyLjcyMDkgMTAuMjc5MSAxMi45IDEwLjUgMTIuOUMxMC43MjA5IDEyLjkgMTAuOSAxMi43MjA5IDEwLjkgMTIuNUwxMC45IDIuNTAwMDJDMTAuOSAyLjI3OTExIDEwLjcyMDkgMi4xMDAwMiAxMC41IDIuMTAwMDJDMTAuMjc5MSAyLjEwMDAyIDEwLjEgMi4yNzkxMSAxMC4xIDIuNTAwMDJMMTAuMSAxMi41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEwLjMyODUgMS4xMzYwN0MxMC4xMzMyIDAuOTQwODA5IDkuODE2NjIgMC45NDA4MDggOS42MjEzNiAxLjEzNjA3QzkuNDI2MDkgMS4zMzEzMyA5LjQyNjA5IDEuNjQ3OTIgOS42MjEzNiAxLjg0MzE4TDEwLjI3NDQgMi40OTYxOUw1LjQyNTYzIDYuMTMyNzRMNC4zMTgwNSA1LjAyNTE2QzQuMTIyNzkgNC44Mjk5IDMuODA2MjEgNC44Mjk5IDMuNjEwOTUgNS4wMjUxNkMzLjQxNTY5IDUuMjIwNDIgMy40MTU2OSA1LjUzNyAzLjYxMDk1IDUuNzMyMjZMNS4wMjUxNiA3LjE0NjQ4TDYuMDg1ODIgOC4yMDcxNEwyLjgxNTQ1IDExLjQ3NzVDMi42MjAxOSAxMS42NzI4IDIuNjIwMTkgMTEuOTg5NCAyLjgxNTQ1IDEyLjE4NDZDMy4wMTA3MiAxMi4zNzk5IDMuMzI3MyAxMi4zNzk5IDMuNTIyNTYgMTIuMTg0Nkw2Ljc5MjkzIDguOTE0MjVMNy44NTM1OSA5Ljk3NDkxTDkuMjY3OCAxMS4zODkxQzkuNDYzMDYgMTEuNTg0NCA5Ljc3OTY1IDExLjU4NDQgOS45NzQ5MSAxMS4zODkxQzEwLjE3MDIgMTEuMTkzOSAxMC4xNzAyIDEwLjg3NzMgOS45NzQ5MSAxMC42ODJMOC44NjczMyA5LjU3NDQzTDEyLjUwMzkgNC43MjU3TDEzLjE1NjkgNS4zNzg3MUMxMy4zNTIyIDUuNTczOTcgMTMuNjY4NyA1LjU3Mzk3IDEzLjg2NCA1LjM3ODcxQzE0LjA1OTMgNS4xODM0NSAxNC4wNTkzIDQuODY2ODcgMTMuODY0IDQuNjcxNkwxMi44MDMzIDMuNjEwOTRMMTEuMzg5MSAyLjE5NjczTDEwLjMyODUgMS4xMzYwN1pNNi4xMzk5MiA2Ljg0NzAyTDEwLjk4ODcgMy4yMTA0N0wxMS43ODk2IDQuMDExNDJMOC4xNTMwNSA4Ljg2MDE1TDYuMTM5OTIgNi44NDcwMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHB0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk05LjYyMTI5IDEuMTM2MDdDOS44MTY1NiAwLjk0MDgwOCAxMC4xMzMxIDAuOTQwODA5IDEwLjMyODQgMS4xMzYwN0wxMS4zODkxIDIuMTk2NzNMMTIuODAzMyAzLjYxMDk0TDEzLjg2MzkgNC42NzE2QzE0LjA1OTIgNC44NjY4NyAxNC4wNTkyIDUuMTgzNDUgMTMuODYzOSA1LjM3ODcxQzEzLjY2ODcgNS41NzM5NyAxMy4zNTIxIDUuNTczOTcgMTMuMTU2OCA1LjM3ODcxTDEyLjUwMzggNC43MjU3TDguODY3MjcgOS41NzQ0M0w5Ljk3NDg1IDEwLjY4MkMxMC4xNzAxIDEwLjg3NzMgMTAuMTcwMSAxMS4xOTM5IDkuOTc0ODUgMTEuMzg5MUM5Ljc3OTU5IDExLjU4NDQgOS40NjMgMTEuNTg0NCA5LjI2Nzc0IDExLjM4OTFMNy44NTM1MyA5Ljk3NDkxTDYuNzkyODcgOC45MTQyNUwzLjUyMjUgMTIuMTg0NkMzLjMyNzI0IDEyLjM3OTkgMy4wMTA2NSAxMi4zNzk5IDIuODE1MzkgMTIuMTg0NkMyLjYyMDEzIDExLjk4OTQgMi42MjAxMyAxMS42NzI4IDIuODE1MzkgMTEuNDc3NUw2LjA4NTc2IDguMjA3MTRMNS4wMjUxIDcuMTQ2NDhMMy42MTA4OSA1LjczMjI2QzMuNDE1NjMgNS41MzcgMy40MTU2MiA1LjIyMDQyIDMuNjEwODkgNS4wMjUxNkMzLjgwNjE1IDQuODI5OSA0LjEyMjczIDQuODI5OSA0LjMxNzk5IDUuMDI1MTZMNS40MjU1NyA2LjEzMjc0TDEwLjI3NDMgMi40OTYxOUw5LjYyMTI5IDEuODQzMThDOS40MjYwMyAxLjY0NzkyIDkuNDI2MDMgMS4zMzEzMyA5LjYyMTI5IDEuMTM2MDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk05LjYyMTI5IDEuMTM2MDdDOS44MTY1NiAwLjk0MDgwOCAxMC4xMzMxIDAuOTQwODA5IDEwLjMyODQgMS4xMzYwN0wxMS4zODkxIDIuMTk2NzNMMTIuODAzMyAzLjYxMDk0TDEzLjg2MzkgNC42NzE2QzE0LjA1OTIgNC44NjY4NyAxNC4wNTkyIDUuMTgzNDUgMTMuODYzOSA1LjM3ODcxQzEzLjY2ODcgNS41NzM5NyAxMy4zNTIxIDUuNTczOTcgMTMuMTU2OCA1LjM3ODcxTDEyLjUwMzggNC43MjU3TDguODY3MjcgOS41NzQ0M0w5Ljk3NDg1IDEwLjY4MkMxMC4xNzAxIDEwLjg3NzMgMTAuMTcwMSAxMS4xOTM5IDkuOTc0ODUgMTEuMzg5MUM5Ljc3OTU5IDExLjU4NDQgOS40NjMgMTEuNTg0NCA5LjI2Nzc0IDExLjM4OTFMNy44NTM1MyA5Ljk3NDkxTDYuNzkyODcgOC45MTQyNUwzLjUyMjUgMTIuMTg0NkMzLjMyNzI0IDEyLjM3OTkgMy4wMTA2NSAxMi4zNzk5IDIuODE1MzkgMTIuMTg0NkMyLjYyMDEzIDExLjk4OTQgMi42MjAxMyAxMS42NzI4IDIuODE1MzkgMTEuNDc3NUw2LjA4NTc2IDguMjA3MTRMNS4wMjUxIDcuMTQ2NDhMMy42MTA4OSA1LjczMjI2QzMuNDE1NjMgNS41MzcgMy40MTU2MiA1LjIyMDQyIDMuNjEwODkgNS4wMjUxNkMzLjgwNjE1IDQuODI5OSA0LjEyMjczIDQuODI5OSA0LjMxNzk5IDUuMDI1MTZMNS40MjU1NyA2LjEzMjc0TDEwLjI3NDMgMi40OTYxOUw5LjYyMTI5IDEuODQzMThDOS40MjYwMyAxLjY0NzkyIDkuNDI2MDMgMS4zMzEzMyA5LjYyMTI5IDEuMTM2MDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxmdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTk5OSAzLjA5OTk4QzcuMjc5MDcgMy4wOTk5OCA3LjA5OTk5IDMuMjc5MDYgNy4wOTk5OSAzLjQ5OTk4QzcuMDk5OTkgMy43MjA4OSA3LjI3OTA3IDMuODk5OTggNy40OTk5OSAzLjg5OTk4SDE0LjVDMTQuNzIwOSAzLjg5OTk4IDE0LjkgMy43MjA4OSAxNC45IDMuNDk5OThDMTQuOSAzLjI3OTA2IDE0LjcyMDkgMy4wOTk5OCAxNC41IDMuMDk5OThINy40OTk5OVpNNy40OTk5OCA1LjFDNy4yNzkwNyA1LjEgNy4wOTk5OCA1LjI3OTA4IDcuMDk5OTggNS41QzcuMDk5OTggNS43MjA5MSA3LjI3OTA3IDUuOSA3LjQ5OTk4IDUuOUgxNC41QzE0LjcyMDkgNS45IDE0LjkgNS43MjA5MSAxNC45IDUuNUMxNC45IDUuMjc5MDggMTQuNzIwOSA1LjEgMTQuNSA1LjFINy40OTk5OFpNNy4xIDcuNUM3LjEgNy4yNzkwOCA3LjI3OTA5IDcuMSA3LjUgNy4xSDE0LjVDMTQuNzIwOSA3LjEgMTQuOSA3LjI3OTA4IDE0LjkgNy41QzE0LjkgNy43MjA5MSAxNC43MjA5IDcuOSAxNC41IDcuOUg3LjVDNy4yNzkwOSA3LjkgNy4xIDcuNzIwOTEgNy4xIDcuNVpNNy40OTk5OCA5LjFDNy4yNzkwNyA5LjEgNy4wOTk5OCA5LjI3OTA4IDcuMDk5OTggOS41QzcuMDk5OTggOS43MjA5MSA3LjI3OTA3IDkuOSA3LjQ5OTk4IDkuOUgxNC41QzE0LjcyMDkgOS45IDE0LjkgOS43MjA5MSAxNC45IDkuNUMxNC45IDkuMjc5MDggMTQuNzIwOSA5LjEgMTQuNSA5LjFINy40OTk5OFpNNy4wOTk5OCAxMS41QzcuMDk5OTggMTEuMjc5MSA3LjI3OTA3IDExLjEgNy40OTk5OCAxMS4xSDE0LjVDMTQuNzIwOSAxMS4xIDE0LjkgMTEuMjc5MSAxNC45IDExLjVDMTQuOSAxMS43MjA5IDE0LjcyMDkgMTEuOSAxNC41IDExLjlINy40OTk5OEM3LjI3OTA3IDExLjkgNy4wOTk5OCAxMS43MjA5IDcuMDk5OTggMTEuNVpNMi41IDkuMjUwMDNMNSA2LjAwMDAzSDBMMi41IDkuMjUwMDNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxodD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC41IDFDNC4yMjM4NiAxIDQgMS4yMjM4NiA0IDEuNUM0IDEuNzc2MTQgNC4yMjM4NiAyIDQuNSAySDEyVjEzSDQuNUM0LjIyMzg2IDEzIDQgMTMuMjIzOSA0IDEzLjVDNCAxMy43NzYxIDQuMjIzODYgMTQgNC41IDE0SDEyQzEyLjU1MjMgMTQgMTMgMTMuNTUyMyAxMyAxM1YyQzEzIDEuNDQ3NzIgMTIuNTUyMyAxIDEyIDFINC41Wk02LjYwMzU1IDQuODk2NDVDNi40MDgyOSA0LjcwMTE4IDYuMDkxNzEgNC43MDExOCA1Ljg5NjQ1IDQuODk2NDVDNS43MDExOCA1LjA5MTcxIDUuNzAxMTggNS40MDgyOSA1Ljg5NjQ1IDUuNjAzNTVMNy4yOTI4OSA3SDAuNUMwLjIyMzg1OCA3IDAgNy4yMjM4NiAwIDcuNUMwIDcuNzc2MTQgMC4yMjM4NTggOCAwLjUgOEg3LjI5Mjg5TDUuODk2NDUgOS4zOTY0NUM1LjcwMTE4IDkuNTkxNzEgNS43MDExOCA5LjkwODI5IDUuODk2NDUgMTAuMTAzNkM2LjA5MTcxIDEwLjI5ODggNi40MDgyOSAxMC4yOTg4IDYuNjAzNTUgMTAuMTAzNkw4Ljg1MzU1IDcuODUzNTVDOS4wNDg4MiA3LjY1ODI5IDkuMDQ4ODIgNy4zNDE3MSA4Ljg1MzU1IDcuMTQ2NDVMNi42MDM1NSA0Ljg5NjQ1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZ3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIgMi41QzIgMi4yMjM4NiAyLjIyMzg2IDIgMi41IDJINS41QzUuNzc2MTQgMiA2IDIuMjIzODYgNiAyLjVDNiAyLjc3NjE0IDUuNzc2MTQgMyA1LjUgM0gzVjUuNUMzIDUuNzc2MTQgMi43NzYxNCA2IDIuNSA2QzIuMjIzODYgNiAyIDUuNzc2MTQgMiA1LjVWMi41Wk05IDIuNUM5IDIuMjIzODYgOS4yMjM4NiAyIDkuNSAySDEyLjVDMTIuNzc2MSAyIDEzIDIuMjIzODYgMTMgMi41VjUuNUMxMyA1Ljc3NjE0IDEyLjc3NjEgNiAxMi41IDZDMTIuMjIzOSA2IDEyIDUuNzc2MTQgMTIgNS41VjNIOS41QzkuMjIzODYgMyA5IDIuNzc2MTQgOSAyLjVaTTIuNSA5QzIuNzc2MTQgOSAzIDkuMjIzODYgMyA5LjVWMTJINS41QzUuNzc2MTQgMTIgNiAxMi4yMjM5IDYgMTIuNUM2IDEyLjc3NjEgNS43NzYxNCAxMyA1LjUgMTNIMi41QzIuMjIzODYgMTMgMiAxMi43NzYxIDIgMTIuNVY5LjVDMiA5LjIyMzg2IDIuMjIzODYgOSAyLjUgOVpNMTIuNSA5QzEyLjc3NjEgOSAxMyA5LjIyMzg2IDEzIDkuNVYxMi41QzEzIDEyLjc3NjEgMTIuNzc2MSAxMyAxMi41IDEzSDkuNUM5LjIyMzg2IDEzIDkgMTIuNzc2MSA5IDEyLjVDOSAxMi4yMjM5IDkuMjIzODYgMTIgOS41IDEySDEyVjkuNUMxMiA5LjIyMzg2IDEyLjIyMzkgOSAxMi41IDlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx2dD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMSAyQzAuNDQ3NzE1IDIgMCAyLjQ0NzcyIDAgM1YxMkMwIDEyLjU1MjMgMC40NDc3MTUgMTMgMSAxM0gxNEMxNC41NTIzIDEzIDE1IDEyLjU1MjMgMTUgMTJWM0MxNSAyLjQ0NzcyIDE0LjU1MjMgMiAxNCAySDFaTTEgM0wxNCAzVjMuOTI0OTRDMTMuOTE3NCAzLjkyNDg2IDEzLjgzMzggMy45NDc1MSAxMy43NTg5IDMuOTk1MDVMNy41IDcuOTY3MDNMMS4yNDExMiAzLjk5NTA1QzEuMTY2MjEgMy45NDc1MSAxLjA4MjYgMy45MjQ4NiAxIDMuOTI0OTRWM1pNMSA0LjkwNzk3VjEySDE0VjQuOTA3OTdMNy43NDExMiA4Ljg3OTk1QzcuNTkzOTQgOC45NzMzNSA3LjQwNjA2IDguOTczMzUgNy4yNTg4OCA4Ljg3OTk1TDEgNC45MDc5N1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEN0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03Ljk0NzIxIDAuMTY0NTk0QzcuNjY1NjkgMC4wMjM4Mjk5IDcuMzM0MzEgMC4wMjM4MzAyIDcuMDUyNzkgMC4xNjQ1OTRMMC41NTI3ODYgMy40MTQ1OUMwLjIxNDAwMiAzLjU4Mzk5IDAgMy45MzAyNSAwIDQuMzA5MDJWMTJDMCAxMi41NTIzIDAuNDQ3NzE1IDEzIDEgMTNIMTRDMTQuNTUyMyAxMyAxNSAxMi41NTIzIDE1IDEyVjQuMzA5MDJDMTUgMy45MzAyNSAxNC43ODYgMy41ODM5OSAxNC40NDcyIDMuNDE0NTlMNy45NDcyMSAwLjE2NDU5NFpNMTMuNTY4OSA0LjA5MzQ5TDcuNSAxLjA1OTAyTDEuNDMxMDUgNC4wOTM0OUw3LjUgNy4yOTEzNkwxMy41Njg5IDQuMDkzNDlaTTEgNC44ODM2NlYxMkgxNFY0Ljg4MzY2TDcuNzA5NzcgOC4xOTgxM0M3LjU3ODQ4IDguMjY3MzEgNy40MjE1MiA4LjI2NzMxIDcuMjkwMjMgOC4xOTgxM0wxIDQuODgzNjZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxtdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC40NDQ5IDAuNjA4NzY1QzguMDE4MyAtMC4xMDcwMTUgNi45ODE3IC0wLjEwNzAxNSA2LjU1NTA5IDAuNjA4NzY2TDAuMTYxMTc4IDExLjMzNjhDLTAuMjc1ODI0IDEyLjA3IDAuMjUyNTAzIDEzIDEuMTA2MDggMTNIMTMuODkzOUMxNC43NDc1IDEzIDE1LjI3NTggMTIuMDcgMTQuODM4OCAxMS4zMzY4TDguNDQ0OSAwLjYwODc2NVpNNy40MTQxIDEuMTIwNzNDNy40NTI4OCAxLjA1NTY2IDcuNTQ3MTIgMS4wNTU2NiA3LjU4NTkgMS4xMjA3M0wxMy45Nzk4IDExLjg0ODhDMTQuMDE5NiAxMS45MTU0IDEzLjk3MTUgMTIgMTMuODkzOSAxMkgxLjEwNjA4QzEuMDI4NDkgMTIgMC45ODA0NTQgMTEuOTE1NCAxLjAyMDE4IDExLjg0ODhMNy40MTQxIDEuMTIwNzNaTTYuODI2OSA0LjQ4NjExQzYuODEyMjEgNC4xMDQyMyA3LjExNzgzIDMuNzg2NjMgNy41IDMuNzg2NjNDNy44ODIxNyAzLjc4NjYzIDguMTg3NzggNC4xMDQyMyA4LjE3MzEgNC40ODYxMkw4LjAxOTIxIDguNDg3MDFDOC4wMDg0OCA4Ljc2NiA3Ljc3OTIgOC45ODY2NCA3LjUgOC45ODY2NEM3LjIyMDggOC45ODY2NCA2Ljk5MTUxIDguNzY2IDYuOTgwNzggOC40ODcwMUw2LjgyNjkgNC40ODYxMVpNOC4yNDk4OSAxMC40NzZDOC4yNDk4OSAxMC44OTAyIDcuOTE0MSAxMS4yMjYgNy40OTk4OSAxMS4yMjZDNy4wODU2NyAxMS4yMjYgNi43NDk4OSAxMC44OTAyIDYuNzQ5ODkgMTAuNDc2QzYuNzQ5ODkgMTAuMDYxOCA3LjA4NTY3IDkuNzI1OTkgNy40OTk4OSA5LjcyNTk5QzcuOTE0MSA5LjcyNTk5IDguMjQ5ODkgMTAuMDYxOCA4LjI0OTg5IDEwLjQ3NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHd0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zIDFDMi40NDc3MSAxIDIgMS40NDc3MiAyIDJWMTNDMiAxMy41NTIzIDIuNDQ3NzIgMTQgMyAxNEgxMC41QzEwLjc3NjEgMTQgMTEgMTMuNzc2MSAxMSAxMy41QzExIDEzLjIyMzkgMTAuNzc2MSAxMyAxMC41IDEzSDNWMkwxMC41IDJDMTAuNzc2MSAyIDExIDEuNzc2MTQgMTEgMS41QzExIDEuMjIzODYgMTAuNzc2MSAxIDEwLjUgMUgzWk0xMi42MDM2IDQuODk2NDVDMTIuNDA4MyA0LjcwMTE4IDEyLjA5MTcgNC43MDExOCAxMS44OTY0IDQuODk2NDVDMTEuNzAxMiA1LjA5MTcxIDExLjcwMTIgNS40MDgyOSAxMS44OTY0IDUuNjAzNTVMMTMuMjkyOSA3SDYuNUM2LjIyMzg2IDcgNiA3LjIyMzg2IDYgNy41QzYgNy43NzYxNCA2LjIyMzg2IDggNi41IDhIMTMuMjkyOUwxMS44OTY0IDkuMzk2NDVDMTEuNzAxMiA5LjU5MTcxIDExLjcwMTIgOS45MDgyOSAxMS44OTY0IDEwLjEwMzZDMTIuMDkxNyAxMC4yOTg4IDEyLjQwODMgMTAuMjk4OCAxMi42MDM2IDEwLjEwMzZMMTQuODUzNiA3Ljg1MzU1QzE1LjA0ODggNy42NTgyOSAxNS4wNDg4IDcuMzQxNzEgMTQuODUzNiA3LjE0NjQ1TDEyLjYwMzYgNC44OTY0NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGJ0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjUgMkM1Ljc3NjE0IDIgNiAyLjIyMzg2IDYgMi41VjUuNUM2IDUuNzc2MTQgNS43NzYxNCA2IDUuNSA2SDIuNUMyLjIyMzg2IDYgMiA1Ljc3NjE0IDIgNS41QzIgNS4yMjM4NiAyLjIyMzg2IDUgMi41IDVINVYyLjVDNSAyLjIyMzg2IDUuMjIzODYgMiA1LjUgMlpNOS41IDJDOS43NzYxNCAyIDEwIDIuMjIzODYgMTAgMi41VjVIMTIuNUMxMi43NzYxIDUgMTMgNS4yMjM4NiAxMyA1LjVDMTMgNS43NzYxNCAxMi43NzYxIDYgMTIuNSA2SDkuNUM5LjIyMzg2IDYgOSA1Ljc3NjE0IDkgNS41VjIuNUM5IDIuMjIzODYgOS4yMjM4NiAyIDkuNSAyWk0yIDkuNUMyIDkuMjIzODYgMi4yMjM4NiA5IDIuNSA5SDUuNUM1Ljc3NjE0IDkgNiA5LjIyMzg2IDYgOS41VjEyLjVDNiAxMi43NzYxIDUuNzc2MTQgMTMgNS41IDEzQzUuMjIzODYgMTMgNSAxMi43NzYxIDUgMTIuNVYxMEgyLjVDMi4yMjM4NiAxMCAyIDkuNzc2MTQgMiA5LjVaTTkgOS41QzkgOS4yMjM4NiA5LjIyMzg2IDkgOS41IDlIMTIuNUMxMi43NzYxIDkgMTMgOS4yMjM4NiAxMyA5LjVDMTMgOS43NzYxNCAxMi43NzYxIDEwIDEyLjUgMTBIMTBWMTIuNUMxMCAxMi43NzYxIDkuNzc2MTQgMTMgOS41IDEzQzkuMjIzODYgMTMgOSAxMi43NzYxIDkgMTIuNVY5LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx5dD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMyAyQzIuNDQ3NzIgMiAyIDIuNDQ3NzIgMiAzVjEyQzIgMTIuNTUyMyAyLjQ0NzcyIDEzIDMgMTNIMTJDMTIuNTUyMyAxMyAxMyAxMi41NTIzIDEzIDEyVjguNUMxMyA4LjIyMzg2IDEyLjc3NjEgOCAxMi41IDhDMTIuMjIzOSA4IDEyIDguMjIzODYgMTIgOC41VjEySDNWM0w2LjUgM0M2Ljc3NjE0IDMgNyAyLjc3NjE0IDcgMi41QzcgMi4yMjM4NiA2Ljc3NjE0IDIgNi41IDJIM1pNMTIuODUzNiAyLjE0NjQ1QzEyLjkwMTUgMi4xOTQzOSAxMi45Mzc3IDIuMjQ5NjQgMTIuOTYyMSAyLjMwODYxQzEyLjk4NjEgMi4zNjY2OSAxMi45OTk2IDIuNDMwMyAxMyAyLjQ5N0wxMyAyLjVWMi41MDA0OVY1LjVDMTMgNS43NzYxNCAxMi43NzYxIDYgMTIuNSA2QzEyLjIyMzkgNiAxMiA1Ljc3NjE0IDEyIDUuNVYzLjcwNzExTDYuODUzNTUgOC44NTM1NUM2LjY1ODI5IDkuMDQ4ODIgNi4zNDE3MSA5LjA0ODgyIDYuMTQ2NDUgOC44NTM1NUM1Ljk1MTE4IDguNjU4MjkgNS45NTExOCA4LjM0MTcxIDYuMTQ2NDUgOC4xNDY0NUwxMS4yOTI5IDNIOS41QzkuMjIzODYgMyA5IDIuNzc2MTQgOSAyLjVDOSAyLjIyMzg2IDkuMjIzODYgMiA5LjUgMkgxMi40OTk5SDEyLjVDMTIuNTY3OCAyIDEyLjYzMjQgMi4wMTM0OSAxMi42OTE0IDIuMDM3OTRDMTIuNzUwNCAyLjA2MjM0IDEyLjgwNTYgMi4wOTg1MSAxMi44NTM2IDIuMTQ2NDVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx4dD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTQuNzY0OSA2LjA3NTk1QzE0Ljk5OTEgNi4yMjIzMSAxNS4wNzAzIDYuNTMwNzggMTQuOTIzOSA2Ljc2NDk1QzE0LjQ4NDkgNy40Njc0MiAxMy45NjMyIDguMTA2NDQgMTMuMzcwMiA4LjY2MzA0TDE0LjU3MTIgOS44NjQwNUMxNC43NjY0IDEwLjA1OTMgMTQuNzY2NCAxMC4zNzU5IDE0LjU3MTIgMTAuNTcxMkMxNC4zNzU5IDEwLjc2NjQgMTQuMDU5MyAxMC43NjY0IDEzLjg2NDEgMTAuNTcxMkwxMi42MDExIDkuMzA4MTZDMTEuODA0OSA5LjkwMjgyIDEwLjkwODkgMTAuMzYyMSA5LjkzMzc0IDEwLjY1MUwxMC4zODMgMTIuMzI3NkMxMC40NTQ0IDEyLjU5NDQgMTAuMjk2MSAxMi44Njg1IDEwLjAyOTQgMTIuOTRDOS43NjI2NiAxMy4wMTE1IDkuNDg4NSAxMi44NTMyIDkuNDE3MDMgMTIuNTg2NEw4Ljk1OTE2IDEwLjg3NzVDOC40ODc0MiAxMC45NTggOC4wMDAzNSAxMC45OTk5IDcuNSAxMC45OTk5QzYuOTk5NjQgMTAuOTk5OSA2LjUxMjU3IDEwLjk1OCA2LjA0MDgyIDEwLjg3NzVMNS41ODI5OSAxMi41ODY0QzUuNTExNTMgMTIuODUzMiA1LjIzNzM3IDEzLjAxMTUgNC45NzA2MyAxMi45NEM0LjcwMzkgMTIuODY4NSA0LjU0NTYgMTIuNTk0NCA0LjYxNzA2IDEyLjMyNzdMNS4wNjYyNCAxMC42NTFDNC4wOTExMSAxMC4zNjIxIDMuMTk1MDMgOS45MDI4MSAyLjM5ODkgOS4zMDgxNEwxLjEzNTkgMTAuNTcxMUMwLjk0MDYzOCAxMC43NjY0IDAuNjI0MDU4IDEwLjc2NjQgMC40Mjg3OTcgMTAuNTcxMUMwLjIzMzUzNyAxMC4zNzU5IDAuMjMzNTM3IDEwLjA1OTMgMC40Mjg3OTcgOS44NjQwNEwxLjYyOTgyIDguNjYzMDJDMS4wMzY4MiA4LjEwNjQzIDAuNTE1MTEzIDcuNDY3NDIgMC4wNzYwNjc3IDYuNzY0OTVDLTAuMDcwMjg2NyA2LjUzMDc4IDAuMDAwODk4NTQ0IDYuMjIyMzEgMC4yMzUwNjQgNi4wNzU5NUMwLjQ2OTIzIDUuOTI5NiAwLjc3NzcwMyA2LjAwMDc4IDAuOTI0MDU3IDYuMjM0OTVDMS40MDM1NCA3LjAwMjEyIDEuOTg5IDcuNjgwNTYgMi42NjIzMyA4LjI0MjdDMi42NzMxNSA4LjI1MDk2IDIuNjgzNyA4LjI1OTcxIDIuNjkzOTcgOC4yNjg5N0M0LjAwODk3IDkuMzU1MjcgNS42NTUzNiA5Ljk5OTkgNy41IDkuOTk5OUMxMC4zMDc4IDkuOTk5OSAxMi42NTYzIDguNTA2MjkgMTQuMDc1OSA2LjIzNDk1QzE0LjIyMjMgNi4wMDA3OCAxNC41MzA4IDUuOTI5NiAxNC43NjQ5IDYuMDc1OTVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxrdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTMuMzUzNiAyLjM1MzU1QzEzLjU0ODggMi4xNTgyOSAxMy41NDg4IDEuODQxNzEgMTMuMzUzNiAxLjY0NjQ1QzEzLjE1ODMgMS40NTExOCAxMi44NDE3IDEuNDUxMTggMTIuNjQ2NCAxLjY0NjQ1TDEwLjY4MjggMy42MTAxMkM5LjcwNjUyIDMuMjE2NzEgOC42Mzc1OSAzIDcuNSAzQzQuMzA3ODYgMyAxLjY1NjM5IDQuNzA2MzggMC4wNzYwMDAyIDcuMjM1MDFDLTAuMDI1MzMzOCA3LjM5NzE1IC0wLjAyNTMzMzQgNy42MDI4OCAwLjA3NjAwMTQgNy43NjUwMUMwLjkwMjk0NSA5LjA4ODEyIDIuMDIzMTQgMTAuMTg2MSAzLjM2MDYxIDEwLjkzMjNMMS42NDY0NSAxMi42NDY0QzEuNDUxMTggMTIuODQxNyAxLjQ1MTE4IDEzLjE1ODMgMS42NDY0NSAxMy4zNTM2QzEuODQxNzEgMTMuNTQ4OCAyLjE1ODI5IDEzLjU0ODggMi4zNTM1NSAxMy4zNTM2TDQuMzE3MjMgMTEuMzg5OUM1LjI5MzQ4IDExLjc4MzMgNi4zNjI0MSAxMiA3LjUgMTJDMTAuNjkyMSAxMiAxMy4zNDM2IDEwLjI5MzYgMTQuOTI0IDcuNzY1MDFDMTUuMDI1MyA3LjYwMjg4IDE1LjAyNTMgNy4zOTcxNSAxNC45MjQgNy4yMzUwMUMxNC4wOTcxIDUuOTExOSAxMi45NzY5IDQuODEzOTEgMTEuNjM5NCA0LjA2NzcxTDEzLjM1MzYgMi4zNTM1NVpNOS45MDQyOCA0LjM4ODYxQzkuMTUzMzIgNC4xMzYxIDguMzQ3NTkgNCA3LjUgNEM0LjgwMjg1IDQgMi41Mjk1MiA1LjM3ODE2IDEuMDk2MjIgNy41MDAwMUMxLjg3Mjg0IDguNjQ5NyAyLjg5NjA5IDkuNTgxMDYgNC4wOTk3NCAxMC4xOTMxTDkuOTA0MjggNC4zODg2MVpNNS4wOTU3MiAxMC42MTE0TDEwLjkwMDMgNC44MDY4NUMxMi4xMDM5IDUuNDE4OTQgMTMuMTI3MiA2LjM1MDMxIDEzLjkwMzggNy41MDAwMUMxMi40NzA1IDkuNjIxODMgMTAuMTk3MSAxMSA3LjUgMTFDNi42NTI0MSAxMSA1Ljg0NjY4IDEwLjg2MzkgNS4wOTU3MiAxMC42MTE0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sU3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNSAxMUM0LjgwMjg1IDExIDIuNTI5NTIgOS42MjE4NCAxLjA5NjIyIDcuNTAwMDFDMi41Mjk1MiA1LjM3ODE2IDQuODAyODUgNCA3LjUgNEMxMC4xOTcxIDQgMTIuNDcwNSA1LjM3ODE2IDEzLjkwMzggNy41MDAwMUMxMi40NzA1IDkuNjIxODMgMTAuMTk3MSAxMSA3LjUgMTFaTTcuNSAzQzQuMzA3ODYgMyAxLjY1NjM5IDQuNzA2MzggMC4wNzYwMDAyIDcuMjM1MDFDLTAuMDI1MzMzOCA3LjM5NzE1IC0wLjAyNTMzMzQgNy42MDI4OCAwLjA3NjAwMTQgNy43NjUwMUMxLjY1NjM5IDEwLjI5MzYgNC4zMDc4NiAxMiA3LjUgMTJDMTAuNjkyMSAxMiAxMy4zNDM2IDEwLjI5MzYgMTQuOTI0IDcuNzY1MDFDMTUuMDI1MyA3LjYwMjg4IDE1LjAyNTMgNy4zOTcxNSAxNC45MjQgNy4yMzUwMUMxMy4zNDM2IDQuNzA2MzggMTAuNjkyMSAzIDcuNSAzWk03LjUgOS41QzguNjA0NTcgOS41IDkuNSA4LjYwNDU3IDkuNSA3LjVDOS41IDYuMzk1NDMgOC42MDQ1NyA1LjUgNy41IDUuNUM2LjM5NTQzIDUuNSA1LjUgNi4zOTU0MyA1LjUgNy41QzUuNSA4LjYwNDU3IDYuMzk1NDMgOS41IDcuNSA5LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxPdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTk5MSAwLjg3Njg5MkMzLjg0MjIyIDAuODc2ODkyIDAuODc3MDc1IDMuODQyMDQgMC44NzcwNzUgNy40OTk3MkMwLjg3NzA3NSAxMS4xNTc0IDMuODQyMjIgMTQuMTIyNiA3LjQ5OTkxIDE0LjEyMjZDMTEuMTU3NiAxNC4xMjI2IDE0LjEyMjcgMTEuMTU3NCAxNC4xMjI3IDcuNDk5NzJDMTQuMTIyNyAzLjg0MjA0IDExLjE1NzYgMC44NzY4OTIgNy40OTk5MSAwLjg3Njg5MlpNMS44MjcwOCA3LjQ5OTcyQzEuODI3MDggNC4zNjY3MSA0LjM2Njg5IDEuODI2ODkgNy40OTk5MSAxLjgyNjg5QzEwLjYzMjkgMS44MjY4OSAxMy4xNzI3IDQuMzY2NzEgMTMuMTcyNyA3LjQ5OTcyQzEzLjE3MjcgMTAuNjMyNyAxMC42MzI5IDEzLjE3MjYgNy40OTk5MSAxMy4xNzI2QzQuMzY2ODkgMTMuMTcyNiAxLjgyNzA4IDEwLjYzMjcgMS44MjcwOCA3LjQ5OTcyWk01LjAzNzQ3IDkuMjEzOTVDNC44Nzk0OSA4Ljk4NzQ2IDQuNTY3ODIgOC45MzE5MyA0LjM0MTMzIDkuMDg5OTFDNC4xMTQ4NCA5LjI0Nzg5IDQuMDU5MzEgOS41NTk1NiA0LjIxNzI5IDkuNzg2MDVDNC45MzkyNiAxMC44MjExIDYuMTQwMzMgMTEuNSA3LjUwMDA0IDExLjVDOC44NTk3NCAxMS41IDEwLjA2MDggMTAuODIxMSAxMC43ODI4IDkuNzg2MDVDMTAuOTQwOCA5LjU1OTU2IDEwLjg4NTIgOS4yNDc4OSAxMC42NTg3IDkuMDg5OTFDMTAuNDMyMyA4LjkzMTkzIDEwLjEyMDYgOC45ODc0NiA5Ljk2MjYgOS4yMTM5NUM5LjQxOTYzIDkuOTkyMzggOC41MTkwNyAxMC41IDcuNTAwMDQgMTAuNUM2LjQ4MSAxMC41IDUuNTgwNDQgOS45OTIzOCA1LjAzNzQ3IDkuMjEzOTVaTTUuMzc1MDMgNi44NDk5OEM1Ljg1ODI4IDYuODQ5OTggNi4yNTAwMyA2LjQ1ODE1IDYuMjUwMDMgNS45NzQ5OEM2LjI1MDAzIDUuNDkxOCA1Ljg1ODI4IDUuMDk5OTggNS4zNzUwMyA1LjA5OTk4QzQuODkxNzkgNS4wOTk5OCA0LjUwMDAzIDUuNDkxOCA0LjUwMDAzIDUuOTc0OThDNC41MDAwMyA2LjQ1ODE1IDQuODkxNzkgNi44NDk5OCA1LjM3NTAzIDYuODQ5OThaTTEwLjUgNS45NzQ5OEMxMC41IDYuNDU4MTUgMTAuMTA4MyA2Ljg0OTk4IDkuNjI1MDMgNi44NDk5OEM5LjE0MTc5IDYuODQ5OTggOC43NTAwMyA2LjQ1ODE1IDguNzUwMDMgNS45NzQ5OEM4Ljc1MDAzIDUuNDkxOCA5LjE0MTc5IDUuMDk5OTggOS42MjUwMyA1LjA5OTk4QzEwLjEwODMgNS4wOTk5OCAxMC41IDUuNDkxOCAxMC41IDUuOTc0OThaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxNdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy4wMDAwNSAyLjA0OTk5SDUuNTI1MDVDNC43MTA0MyAyLjA0OTk5IDQuMDUwMDUgMi43MTAzNyA0LjA1MDA1IDMuNTI0OTlDNC4wNTAwNSA0LjMzOTYxIDQuNzEwNDMgNC45OTk5OSA1LjUyNTA1IDQuOTk5OTlINy4wMDAwNVYyLjA0OTk5Wk03LjAwMDA1IDEuMDQ5OTlIOC4wMDAwNUg5LjQ3NTA1QzEwLjg0MiAxLjA0OTk5IDExLjk1IDIuMTU4MDggMTEuOTUgMy41MjQ5OUMxMS45NSA0LjMzMTYzIDExLjU2NDIgNS4wNDgxNSAxMC45NjY5IDUuNDk5OTlDMTEuNTY0MiA1Ljk1MTg0IDExLjk1IDYuNjY4MzYgMTEuOTUgNy40NzVDMTEuOTUgOC44NDE5IDEwLjg0MiA5Ljk1IDkuNDc1MDUgOS45NUM4LjkyMjM2IDkuOTUgOC40MTE5OCA5Ljc2ODg0IDguMDAwMDUgOS40NjI2NlY5Ljk1TDguMDAwMDUgMTEuNDI1QzguMDAwMDUgMTIuNzkxOSA2Ljg5MTk1IDEzLjkgNS41MjUwNSAxMy45QzQuMTU4MTQgMTMuOSAzLjA1MDA1IDEyLjc5MTkgMy4wNTAwNSAxMS40MjVDMy4wNTAwNSAxMC42MTgzIDMuNDM1OTMgOS45MDE4NCA0LjAzMzE3IDkuNDQ5OTlDMy40MzU5MyA4Ljk5ODE0IDMuMDUwMDUgOC4yODE2MyAzLjA1MDA1IDcuNDc1QzMuMDUwMDUgNi42NjgzNiAzLjQzNTk0IDUuOTUxODQgNC4wMzMxOSA1LjVDMy40MzU5NCA1LjA0ODE1IDMuMDUwMDUgNC4zMzE2MyAzLjA1MDA1IDMuNTI0OTlDMy4wNTAwNSAyLjE1ODA4IDQuMTU4MTQgMS4wNDk5OSA1LjUyNTA1IDEuMDQ5OTlINy4wMDAwNVpNOC4wMDAwNSAyLjA0OTk5VjQuOTk5OTlIOS40NzUwNUMxMC4yODk3IDQuOTk5OTkgMTAuOTUgNC4zMzk2MSAxMC45NSAzLjUyNDk5QzEwLjk1IDIuNzEwMzcgMTAuMjg5NyAyLjA0OTk5IDkuNDc1MDUgMi4wNDk5OUg4LjAwMDA1Wk01LjUyNTA1IDguOTQ5OThINy4wMDAwNUw3LjAwMDA1IDcuNDc4OEw3LjAwMDA1IDcuNDc1TDcuMDAwMDUgNy40NzEyVjZINS41MjUwNUM0LjcxMDQzIDYgNC4wNTAwNSA2LjY2MDM4IDQuMDUwMDUgNy40NzVDNC4wNTAwNSA4LjI4NzY3IDQuNzA3MjcgOC45NDY4NCA1LjUxOTIgOC45NDk5OUw1LjUyNTA1IDguOTQ5OThaTTQuMDUwMDUgMTEuNDI1QzQuMDUwMDUgMTAuNjEyMyA0LjcwNzI3IDkuOTUzMTUgNS41MTkyIDkuOTQ5OTlMNS41MjUwNSA5Ljk1SDcuMDAwMDVMNy4wMDAwNSAxMS40MjVDNy4wMDAwNSAxMi4yMzk2IDYuMzM5NjcgMTIuOSA1LjUyNTA1IDEyLjlDNC43MTA0MyAxMi45IDQuMDUwMDUgMTIuMjM5NiA0LjA1MDA1IDExLjQyNVpNOC4wMDAwNSA3LjQ3MjA2QzguMDAxNjQgNi42NTg3OSA4LjY2MTQxIDYgOS40NzUwNSA2QzEwLjI4OTcgNiAxMC45NSA2LjY2MDM4IDEwLjk1IDcuNDc1QzEwLjk1IDguMjg5NjIgMTAuMjg5NyA4Ljk1IDkuNDc1MDUgOC45NUM4LjY2MTQxIDguOTUgOC4wMDE2NCA4LjI5MTIxIDguMDAwMDUgNy40Nzc5NFY3LjQ3MjA2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNSAyQzMuMjIzODYgMiAzIDIuMjIzODYgMyAyLjVWMTIuNUMzIDEyLjc3NjEgMy4yMjM4NiAxMyAzLjUgMTNIMTEuNUMxMS43NzYxIDEzIDEyIDEyLjc3NjEgMTIgMTIuNVY2SDguNUM4LjIyMzg2IDYgOCA1Ljc3NjE0IDggNS41VjJIMy41Wk05IDIuNzA3MTFMMTEuMjkyOSA1SDlWMi43MDcxMVpNMiAyLjVDMiAxLjY3MTU3IDIuNjcxNTcgMSAzLjUgMUg4LjVDOC42MzI2MSAxIDguNzU5NzkgMS4wNTI2OCA4Ljg1MzU1IDEuMTQ2NDVMMTIuODUzNiA1LjE0NjQ1QzEyLjk0NzMgNS4yNDAyMSAxMyA1LjM2NzM5IDEzIDUuNVYxMi41QzEzIDEzLjMyODQgMTIuMzI4NCAxNCAxMS41IDE0SDMuNUMyLjY3MTU3IDE0IDIgMTMuMzI4NCAyIDEyLjVWMi41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sX3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMgMi41QzMgMi4yMjM4NiAzLjIyMzg2IDIgMy41IDJIOS4yOTI4OUwxMiA0LjcwNzExVjEyLjVDMTIgMTIuNzc2MSAxMS43NzYxIDEzIDExLjUgMTNIMy41QzMuMjIzODYgMTMgMyAxMi43NzYxIDMgMTIuNVYyLjVaTTMuNSAxQzIuNjcxNTcgMSAyIDEuNjcxNTcgMiAyLjVWMTIuNUMyIDEzLjMyODQgMi42NzE1NyAxNCAzLjUgMTRIMTEuNUMxMi4zMjg0IDE0IDEzIDEzLjMyODQgMTMgMTIuNVY0LjYwMzU1QzEzIDQuNDA0NjQgMTIuOTIxIDQuMjEzODggMTIuNzgwMyA0LjA3MzIyTDkuODUzNTUgMS4xNDY0NUM5Ljc1OTc5IDEuMDUyNjggOS42MzI2MSAxIDkuNSAxSDMuNVpNNS4yNSA3QzQuOTczODYgNyA0Ljc1IDcuMjIzODYgNC43NSA3LjVDNC43NSA3Ljc3NjE0IDQuOTczODYgOCA1LjI1IDhIOS43NUMxMC4wMjYxIDggMTAuMjUgNy43NzYxNCAxMC4yNSA3LjVDMTAuMjUgNy4yMjM4NiAxMC4wMjYxIDcgOS43NSA3SDUuMjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxQdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy41IDJDMy4yMjM4NiAyIDMgMi4yMjM4NiAzIDIuNVYxMi41QzMgMTIuNzc2MSAzLjIyMzg2IDEzIDMuNSAxM0gxMS41QzExLjc3NjEgMTMgMTIgMTIuNzc2MSAxMiAxMi41VjQuNzA3MTFMOS4yOTI4OSAySDMuNVpNMiAyLjVDMiAxLjY3MTU3IDIuNjcxNTcgMSAzLjUgMUg5LjVDOS42MzI2MSAxIDkuNzU5NzkgMS4wNTI2OCA5Ljg1MzU1IDEuMTQ2NDVMMTIuNzgwMyA0LjA3MzIyQzEyLjkyMSA0LjIxMzg4IDEzIDQuNDA0NjQgMTMgNC42MDM1NVYxMi41QzEzIDEzLjMyODQgMTIuMzI4NCAxNCAxMS41IDE0SDMuNUMyLjY3MTU3IDE0IDIgMTMuMzI4NCAyIDEyLjVWMi41Wk00Ljc1IDcuNUM0Ljc1IDcuMjIzODYgNC45NzM4NiA3IDUuMjUgN0g3VjUuMjVDNyA0Ljk3Mzg2IDcuMjIzODYgNC43NSA3LjUgNC43NUM3Ljc3NjE0IDQuNzUgOCA0Ljk3Mzg2IDggNS4yNVY3SDkuNzVDMTAuMDI2MSA3IDEwLjI1IDcuMjIzODYgMTAuMjUgNy41QzEwLjI1IDcuNzc2MTQgMTAuMDI2MSA4IDkuNzUgOEg4VjkuNzVDOCAxMC4wMjYxIDcuNzc2MTQgMTAuMjUgNy41IDEwLjI1QzcuMjIzODYgMTAuMjUgNyAxMC4wMjYxIDcgOS43NVY4SDUuMjVDNC45NzM4NiA4IDQuNzUgNy43NzYxNCA0Ljc1IDcuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEV0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zIDIuNUMzIDIuMjIzODYgMy4yMjM4NiAyIDMuNSAySDkuMDg1NzlDOS4yMTgzOSAyIDkuMzQ1NTcgMi4wNTI2OCA5LjQzOTM0IDIuMTQ2NDVMMTEuODUzNiA0LjU2MDY2QzExLjk0NzMgNC42NTQ0MyAxMiA0Ljc4MTYxIDEyIDQuOTE0MjFWMTIuNUMxMiAxMi43NzYxIDExLjc3NjEgMTMgMTEuNSAxM0gzLjVDMy4yMjM4NiAxMyAzIDEyLjc3NjEgMyAxMi41VjIuNVpNMy41IDFDMi42NzE1NyAxIDIgMS42NzE1NyAyIDIuNVYxMi41QzIgMTMuMzI4NCAyLjY3MTU3IDE0IDMuNSAxNEgxMS41QzEyLjMyODQgMTQgMTMgMTMuMzI4NCAxMyAxMi41VjQuOTE0MjFDMTMgNC41MTYzOSAxMi44NDIgNC4xMzQ4NiAxMi41NjA3IDMuODUzNTVMMTAuMTQ2NCAxLjQzOTM0QzkuODY1MTQgMS4xNTgwNCA5LjQ4MzYxIDEgOS4wODU3OSAxSDMuNVpNNC41IDRDNC4yMjM4NiA0IDQgNC4yMjM4NiA0IDQuNUM0IDQuNzc2MTQgNC4yMjM4NiA1IDQuNSA1SDcuNUM3Ljc3NjE0IDUgOCA0Ljc3NjE0IDggNC41QzggNC4yMjM4NiA3Ljc3NjE0IDQgNy41IDRINC41Wk00LjUgN0M0LjIyMzg2IDcgNCA3LjIyMzg2IDQgNy41QzQgNy43NzYxNCA0LjIyMzg2IDggNC41IDhIMTAuNUMxMC43NzYxIDggMTEgNy43NzYxNCAxMSA3LjVDMTEgNy4yMjM4NiAxMC43NzYxIDcgMTAuNSA3SDQuNVpNNC41IDEwQzQuMjIzODYgMTAgNCAxMC4yMjM5IDQgMTAuNUM0IDEwLjc3NjEgNC4yMjM4NiAxMSA0LjUgMTFIMTAuNUMxMC43NzYxIDExIDExIDEwLjc3NjEgMTEgMTAuNUMxMSAxMC4yMjM5IDEwLjc3NjEgMTAgMTAuNSAxMEg0LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxqdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNS4xMDUwNSAxMkM0LjcwODA1IDEyIDQuNDIzNiAxMS45MTIgNC4yNTE3MSAxMS43MzZDNC4wODM5IDExLjU1NTkgNCAxMS4yNzE1IDQgMTAuODgyN1Y0LjExNzMzQzQgMy43MjAzMyA0LjA4NTk1IDMuNDM1ODggNC4yNTc4NCAzLjI2Mzk4QzQuNDMzODMgMy4wODc5OSA0LjcxNjIzIDMgNS4xMDUwNSAzQzYuNDI3NDEgMyA4LjI1NTkxIDMgOS4wMjg1MiAzQzEwLjEzNzMgMyAxMS4wNTM5IDMuOTgxNTMgMTEuMDUzOSA1LjE4NDZDMTEuMDUzOSA2LjA4NTAxIDEwLjYwMzcgNi44MTg1NSA5LjcwMzI3IDcuMjM2MDJDMTAuODY1NyA3LjQ0ODUxIDExLjUxNzYgOC42Mjc4NyAxMS41MTc2IDkuNDgxMjhDMTEuNTE3NiAxMC41MTI1IDEwLjk5MDIgMTIgOS4yNzczNCAxMkM4Ljc3NzQyIDEyIDYuNDI2MjYgMTIgNS4xMDUwNSAxMlpNOC4zNzg5MSA4LjAwMzQxSDUuOFYxMC42MzFIOC4zNzg5MUM4LjkgMTAuNjMxIDkuNjI5NiAxMC4xMjExIDkuNjI5NiA5LjI5ODc3QzkuNjI5NiA4LjQ3NjQzIDguOSA4LjAwMzQxIDguMzc4OTEgOC4wMDM0MVpNNS44IDQuMzY5MDNWNi42OTU3N0g4LjE3OTY5QzguNTM5MDYgNi42OTU3NyA5LjI3NzM0IDYuMzU5MzkgOS4yNzczNCA1LjUwMDAyQzkuMjc3MzQgNC42NDA2NCA4LjQ4MDQ3IDQuMzY5MDMgOC4xNzk2OSA0LjM2OTAzSDUuOFpcIixmaWxsOm59KSl9LFJ0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjUgNC41QzIuNSAzLjA5ODg2IDMuNTk4ODYgMiA1IDJIMTIuNDk5QzEyLjc3NTIgMiAxMyAyLjIyMzg2IDEzIDIuNUMxMyAyLjc3NjE0IDEyLjc3NjEgMyAxMi41IDNIOC42OTI0NEw4LjQwNTA5IDMuODU0NThDOC4xODg2OSA0LjQ5NzUyIDcuODk0MDEgNS4zNzE5NyA3LjU4MDkxIDYuMjk3OTRDNy41MDI1OSA2LjUyOTU2IDcuNDIzMDggNi43NjQ1MyA3LjM0MzMyIDdIOC41QzguNzc2MTQgNyA5IDcuMjIzODYgOSA3LjVDOSA3Ljc3NjE0IDguNzc2MTQgOCA4LjUgOEg3LjAwNDA3QzYuNTY3MjQgOS4yODU0MyA2LjE2NDM1IDEwLjQ2MTMgNS45NTc5OSAxMS4wMzg2QzUuNjM2MjcgMTEuOTM4NiA1LjIwNzEyIDEyLjQ4NTcgNC42Njc0MSAxMi43Nzc4QzQuMTYzMzUgMTMuMDUwNyAzLjY0MTU0IDEzLjA1MDMgMy4yODM3OCAxMy4wNUwzLjI1IDEzLjA1QzIuOTQ2MjQgMTMuMDUgMi43IDEyLjgwMzcgMi43IDEyLjVDMi43IDEyLjE5NjIgMi45NDYyNCAxMS45NSAzLjI1IDExLjk1QzMuNjQxODIgMTEuOTUgMy45MDM1IDExLjk0MDUgNC4xNDM3NCAxMS44MTA1QzQuMzY0NDMgMTEuNjkxIDQuNjU1MzIgMTEuNDE0OCA0LjkyMjE3IDEwLjY2ODNDNS4xMDY5NSAxMC4xNTE0IDUuNDUzNzUgOS4xNDEzNCA1Ljg0MjIgOEg0LjVDNC4yMjM4NiA4IDQgNy43NzYxNCA0IDcuNUM0IDcuMjIzODYgNC4yMjM4NiA3IDQuNSA3SDYuMTgxODdDNi4zMDEyNyA2LjY0Nzg1IDYuNDIxMzIgNi4yOTMyMyA2LjUzODg3IDUuOTQ1NTlDNi44NTE3NSA1LjAyMDI1IDcuMTQ2MjcgNC4xNDYzMSA3LjM2MjU2IDMuNTAzNjhMNy41MzE5MiAzSDVDNC4xNTExNCAzIDMuNSAzLjY1MTE0IDMuNSA0LjVDMy41IDQuNzc2MTQgMy4yNzYxNCA1IDMgNUMyLjcyMzg2IDUgMi41IDQuNzc2MTQgMi41IDQuNVpcIixmaWxsOm59KSl9LEl0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjY3NDk0IDMuNTAwMTdDNS42NzQ5NCAzLjI1MTY0IDUuODc2NDEgMy4wNTAxNyA2LjEyNDk0IDMuMDUwMTdIMTAuNjI0OUMxMC44NzM1IDMuMDUwMTcgMTEuMDc0OSAzLjI1MTY0IDExLjA3NDkgMy41MDAxN0MxMS4wNzQ5IDMuNzQ4NyAxMC44NzM1IDMuOTUwMTcgMTAuNjI0OSAzLjk1MDE3SDkuMDA1ODdMNy4yMzA5IDExLjA1SDguODc0OTNDOS4xMjM0NSAxMS4wNSA5LjMyNDkzIDExLjI1MTUgOS4zMjQ5MyAxMS41QzkuMzI0OTMgMTEuNzQ4NiA5LjEyMzQ1IDExLjk1IDguODc0OTMgMTEuOTVINC4zNzQ5M0M0LjEyNjQgMTEuOTUgMy45MjQ5MyAxMS43NDg2IDMuOTI0OTMgMTEuNUMzLjkyNDkzIDExLjI1MTUgNC4xMjY0IDExLjA1IDQuMzc0OTMgMTEuMDVINS45OTM5N0w3Ljc2ODk0IDMuOTUwMTdINi4xMjQ5NEM1Ljg3NjQxIDMuOTUwMTcgNS42NzQ5NCAzLjc0ODcgNS42NzQ5NCAzLjUwMDE3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuNzk5OTMgMy41MDAxN0M0Ljc5OTkzIDMuMjUxNjQgNS4wMDE0IDMuMDUwMTcgNS4yNDk5MyAzLjA1MDE3SDkuNzQ5OTNDOS45OTg0NSAzLjA1MDE3IDEwLjE5OTkgMy4yNTE2NCAxMC4xOTk5IDMuNTAwMTdDMTAuMTk5OSAzLjc0ODcgOS45OTg0NSAzLjk1MDE3IDkuNzQ5OTMgMy45NTAxN0g4LjA5OTkzVjExLjA1SDkuNzQ5OTRDOS45OTg0NyAxMS4wNSAxMC4xOTk5IDExLjI1MTUgMTAuMTk5OSAxMS41QzEwLjE5OTkgMTEuNzQ4NiA5Ljk5ODQ3IDExLjk1IDkuNzQ5OTQgMTEuOTVINS4yNDk5NEM1LjAwMTQxIDExLjk1IDQuNzk5OTQgMTEuNzQ4NiA0Ljc5OTk0IDExLjVDNC43OTk5NCAxMS4yNTE1IDUuMDAxNDEgMTEuMDUgNS4yNDk5NCAxMS4wNUg2Ljg5OTkzVjMuOTUwMTdINS4yNDk5M0M1LjAwMTQgMy45NTAxNyA0Ljc5OTkzIDMuNzQ4NyA0Ljc5OTkzIDMuNTAwMTdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxIdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi43ODIzMyAyLjIxNzA3QzIuNzA3MzIgMi4xNDIwNiAyLjYwNTU3IDIuMDk5OTEgMi40OTk0OSAyLjA5OTkxQzIuMzkzNCAyLjA5OTkxIDIuMjkxNjYgMi4xNDIwNiAyLjIxNjY0IDIuMjE3MDdMMC4yMTY2NDUgNC4yMTcwN0MwLjA2MDQzNTEgNC4zNzMyOCAwLjA2MDQzNTEgNC42MjY1NSAwLjIxNjY0NSA0Ljc4Mjc2QzAuMzcyODU1IDQuOTM4OTcgMC42MjYxMjEgNC45Mzg5NyAwLjc4MjMzIDQuNzgyNzZMMi4wOTk0OSAzLjQ2NTZMMi4wOTk0OSAxMS41MzQyTDAuNzgyMzMgMTAuMjE3MUMwLjYyNjEyIDEwLjA2MDkgMC4zNzI4NTQgMTAuMDYwOSAwLjIxNjY0NSAxMC4yMTcxQzAuMDYwNDM0OSAxMC4zNzMzIDAuMDYwNDM0OSAxMC42MjY1IDAuMjE2NjQ1IDEwLjc4MjhMMi4yMTY2NCAxMi43ODI4QzIuMjkxNjYgMTIuODU3OCAyLjM5MzQgMTIuODk5OSAyLjQ5OTQ5IDEyLjg5OTlDMi42MDU1NyAxMi44OTk5IDIuNzA3MzEgMTIuODU3OCAyLjc4MjMzIDEyLjc4MjhMNC43ODIzMyAxMC43ODI4QzQuOTM4NTQgMTAuNjI2NSA0LjkzODU0IDEwLjM3MzMgNC43ODIzMyAxMC4yMTcxQzQuNjI2MTIgMTAuMDYwOSA0LjM3Mjg1IDEwLjA2MDkgNC4yMTY2NCAxMC4yMTcxTDIuODk5NDkgMTEuNTM0MkwyLjg5OTQ5IDMuNDY1Nkw0LjIxNjY0IDQuNzgyNzZDNC4zNzI4NSA0LjkzODk3IDQuNjI2MTIgNC45Mzg5NyA0Ljc4MjMzIDQuNzgyNzZDNC45Mzg1NCA0LjYyNjU1IDQuOTM4NTQgNC4zNzMyOCA0Ljc4MjMzIDQuMjE3MDdMMi43ODIzMyAyLjIxNzA3Wk0xMC41IDIuNzQ5OTdDMTAuNzEwNyAyLjc0OTk3IDEwLjg5ODggMi44ODIxMSAxMC45NzAzIDMuMDgwMzZMMTMuOTcwMyAxMS4zOTk5QzE0LjA2NCAxMS42NTk3IDEzLjkyOTMgMTEuOTQ2MiAxMy42Njk2IDEyLjAzOTlDMTMuNDA5OCAxMi4xMzM2IDEzLjEyMzMgMTEuOTk4OSAxMy4wMjk2IDExLjczOTJMMTIuMDQ3NyA5LjAxNkg4Ljk1MjI4TDcuOTcwMzMgMTEuNzM5MkM3Ljg3NjY2IDExLjk5ODkgNy41OTAxMyAxMi4xMzM2IDcuMzMwMzYgMTIuMDM5OUM3LjA3MDU5IDExLjk0NjIgNi45MzU5NSAxMS42NTk3IDcuMDI5NjIgMTEuMzk5OUwxMC4wMjk2IDMuMDgwMzZDMTAuMTAxMSAyLjg4MjExIDEwLjI4OTIgMi43NDk5NyAxMC41IDIuNzQ5OTdaTTEwLjUgNC43MjM5NkwxMS43NDEyIDguMTY2SDkuMjU4NzlMMTAuNSA0LjcyMzk2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuMDM3OTEgOS45ODA3NUMwLjkzNDc3NyA5LjY1ODMgMS4xMTYwMyA5LjM3NzE5IDEuNDAwMDUgOS4yNDg3MUMxLjY4NDA4IDkuMTIwMjIgMi4wOTQ2MyA5LjEzNDEyIDIuMjcwNzEgOS40NTQyNkMyLjg1MzkzIDEwLjUxNDcgMy42NDU5OSAxMC43MjgyIDQuNDg2NjUgMTAuNzI4MkM1LjUyNzIxIDEwLjcyODIgNi4yOTY1OSAxMC4yNjE1IDYuMjk2NTkgOS40NTQyNkM2LjI5NjU5IDguODA0NyA1LjkxMTkgOC40NjQxNiA0Ljg3MTM0IDguMTQyNTNMNC4xNTg3MiA3LjkyMTgxQzIuNjQ1MTggNy40NDg4MyAxLjg4ODQyIDYuNjkyMDYgMS44ODg0MiA1LjQ1NjAxQzEuODg4NDIgMy43OTc0MyAzLjI3NTgzIDIuNjg3NSA1LjI0MzQyIDIuNjg3NUM2LjkxNzMzIDIuNjg3NSA3Ljk3NDA5IDMuMzM1MzYgOC40MzgzMyA0LjMxMDY1QzguNTcwODcgNC41ODkwOSA4LjU3NjE0IDQuOTEyOTQgOC4yMjc5NCA1LjE5MTE0QzcuODc5NzQgNS40NjkzNCA3LjUyMzUxIDUuMzQ3OTkgNy4yMzMyNyA1LjAzODM5QzYuNDcyMTUgNC4yMjY1MyA1Ljk5NTQ1IDQuMDQ5NjggNS4yNTYwNCA0LjA0OTY4QzQuMTM5OCA0LjA0OTY4IDMuNTQ3IDQuNjM2MTggMy41NDcgNS4yNzk0M0MzLjU0NyA1Ljg2NTkyIDMuOTYzMjIgNi4yMzE2OSA0Ljk0NzAyIDYuNTM0NEw1LjY3ODU2IDYuNzYxNDNDNy4yMjk5NCA3LjIzNDQxIDcuOTc0MDkgNy45NTk2NCA3Ljk3NDA5IDkuMTcwNDdDNy45NzQwOSAxMC43NzIzIDYuNjkzODkgMTIuMDkwMyA0LjQ2MTQzIDEyLjA5MDNDMi44NjYxMiAxMi4wOTAzIDEuNDAwMDUgMTEuMTEzMSAxLjAzNzkxIDkuOTgwNzVaTTExLjg0OTEgOC43Nzk4NUMxMC42NjEgOC4zOTU0MyAxMC4xNjQ5IDcuODYxMTQgMTAuMTY0OSA2Ljk4ODA1QzEwLjE2NDkgNS44NjczNiAxMS4xNjM2IDUuMDQ2MzkgMTIuNjEyOCA1LjA0NjM5QzEzLjg1NDYgNS4wNDYzOSAxNC42NjI5IDUuNjMzNDUgMTQuOTc3OCA2LjYzNDZDMTUuMDQ0MyA2Ljg0NTk5IDE0Ljk1OTMgNi45ODAwNiAxNC43NDc1IDcuMDQ5MUMxNC41Mzk0IDcuMTE2OTcgMTQuMzE3NiA3LjA5OTc0IDE0LjIzOCA2Ljg5NjExQzEzLjkzNTYgNi4xMjI3MyAxMy4zNTIgNS43NjMxMSAxMi41OTk4IDUuNzYzMTFDMTEuNjQ2NyA1Ljc2MzExIDExLjAxMzUgNi4yNTE3OCAxMS4wMTM1IDYuOTE2MzhDMTEuMDEzNSA3LjQ1MDY2IDExLjM0NjQgNy43NTAzOCAxMi4yNDczIDguMDQzNThMMTIuODM0OCA4LjIzMjU0QzE0LjA2MiA4LjYyOTk5IDE0LjU1MTYgOS4xMzgyMSAxNC41NTE2IDEwLjAxNzhDMTQuNTUxNiAxMS4xOTcyIDEzLjQ4MSAxMi4wNDQyIDExLjk5MjcgMTIuMDQ0MkMxMC42NDM5IDEyLjA0NDIgOS42NTY0NCAxMS4yODA5IDkuNDE5NzkgMTAuMzM2MUM5LjM2NTM1IDEwLjExODggOS40MTE5MiAxMC4wMjg3IDkuNzAwMzkgOS45NjE4NEM5Ljk4ODg2IDkuODk0OTkgMTAuMDcxNCA5Ljg5OTE4IDEwLjE3MTUgMTAuMTM2OUMxMC40NTU1IDEwLjgxMTQgMTEuMTUzMSAxMS4zMjc1IDEyLjAzMTggMTEuMzI3NUMxMi45OTE0IDExLjMyNzUgMTMuNjgzNCAxMC43ODAyIDEzLjY4MzQgMTAuMDYzNEMxMy42ODM0IDkuNTM1NjcgMTMuMzk2MSA5LjI4ODA3IDEyLjQzNjYgOC45NzUzMkwxMS44NDkxIDguNzc5ODVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxUdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTEgMS41QzExIDEuMjIzODYgMTAuNzc2MSAxIDEwLjUgMUMxMC4yMjM5IDEgMTAgMS4yMjM4NiAxMCAxLjVWNEg1VjEuNUM1IDEuMjIzODYgNC43NzYxNCAxIDQuNSAxQzQuMjIzODYgMSA0IDEuMjIzODYgNCAxLjVWNEgxLjVDMS4yMjM4NiA0IDEgNC4yMjM4NiAxIDQuNUMxIDQuNzc2MTQgMS4yMjM4NiA1IDEuNSA1SDRWMTBIMS41QzEuMjIzODYgMTAgMSAxMC4yMjM5IDEgMTAuNUMxIDEwLjc3NjEgMS4yMjM4NiAxMSAxLjUgMTFINFYxMy41QzQgMTMuNzc2MSA0LjIyMzg2IDE0IDQuNSAxNEM0Ljc3NjE0IDE0IDUgMTMuNzc2MSA1IDEzLjVWMTFIMTBWMTMuNUMxMCAxMy43NzYxIDEwLjIyMzkgMTQgMTAuNSAxNEMxMC43NzYxIDE0IDExIDEzLjc3NjEgMTEgMTMuNVYxMUgxMy41QzEzLjc3NjEgMTEgMTQgMTAuNzc2MSAxNCAxMC41QzE0IDEwLjIyMzkgMTMuNzc2MSAxMCAxMy41IDEwSDExVjVIMTMuNUMxMy43NzYxIDUgMTQgNC43NzYxNCAxNCA0LjVDMTQgNC4yMjM4NiAxMy43NzYxIDQgMTMuNSA0SDExVjEuNVpNMTAgMTBWNUg1VjEwSDEwWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sRHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuMzgyNSAxLjI5NTY3QzMuNDYyNDEgMS4xMTQzMiAzLjY0MTg4IDAuOTk3Mjg0IDMuODQwMDUgMC45OTcyODRIMTEuNUMxMS43NzYxIDAuOTk3Mjg0IDEyIDEuMjIxMTQgMTIgMS40OTcyOFY1LjVDMTIgNS43NzYxNCAxMS43NzYxIDYgMTEuNSA2SDguNjM1MjFMMTEuNTI4OCA5LjE2MjQ3QzExLjY2MjYgOS4zMDg3IDExLjY5NzQgOS41MjAxNSAxMS42MTc1IDkuNzAxNTRDMTEuNTM3NiA5Ljg4MjkzIDExLjM1ODIgMTAgMTEuMTYgMTBIOFYxMy41QzggMTMuNzAyMiA3Ljg3ODE4IDEzLjg4NDUgNy42OTEzNCAxMy45NjE5QzcuNTA0NSAxNC4wMzkzIDcuMjg5NDUgMTMuOTk2NiA3LjE0NjQ1IDEzLjg1MzZMMy4xNDY0NSA5Ljg1MzU1QzMuMDUyNjggOS43NTk3OSAzIDkuNjMyNjEgMyA5LjVWNS41QzMgNS4yMjM4NiAzLjIyMzg2IDUgMy41IDVINi4zNjUzMUwzLjQ3MTA1IDEuODM0NjhDMy4zMzczMiAxLjY4ODQ0IDMuMzAyNTkgMS40NzcwMSAzLjM4MjUgMS4yOTU2N1pNNy43MjAzMiA1TDQuOTc0NzQgMS45OTcyOEgxMVY1SDcuNzIwMzJaTTcuMjc5NzggNkg0VjlINy41SDEwLjAyNDdMNy4yNzk3OCA2Wk00LjcwNzExIDEwTDcgMTIuMjkyOVYxMEg0LjcwNzExWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuMDcwOTUgMC42NTAyMzhDNi42NzM5MSAwLjY1MDIzOCA2LjMyOTc3IDAuOTI1MDk2IDYuMjQxOTggMS4zMTIzMUw2LjAwMzkgMi4zNjI0N0M1LjYyNDkgMi40NzI2OSA1LjI2MzM1IDIuNjIzNjMgNC45MjQzNiAyLjgxMDEzTDQuMDEzMzUgMi4yMzU4NUMzLjY3NzQ4IDIuMDI0MTMgMy4yMzk3OCAyLjA3MzEyIDIuOTU5MDMgMi4zNTM4NkwyLjM1Mjk0IDIuOTU5OTZDMi4wNzIyIDMuMjQwNyAyLjAyMzIgMy42Nzg0IDIuMjM0OTMgNC4wMTQyN0wyLjgwOTQyIDQuOTI1NjFDMi42MjMwNyA1LjI2NDUgMi40NzIyNyA1LjYyNTk0IDIuMzYyMTYgNi4wMDQ4MUwxLjMxMjA5IDYuMjQyODdDMC45MjQ4ODMgNi4zMzA2NSAwLjY1MDAyNCA2LjY3NDggMC42NTAwMjQgNy4wNzE4M1Y3LjkyODk3QzAuNjUwMDI0IDguMzI2MDEgMC45MjQ4ODMgOC42NzAxNSAxLjMxMjA5IDguNzU3OTRMMi4zNjIyOCA4Ljk5NjAzQzIuNDcyNDYgOS4zNzUgMi42MjMzNSA5LjczNjUyIDIuODA5NzkgMTAuMDc1NUwyLjIzNTQgMTAuOTg2N0MyLjAyMzY3IDExLjMyMjUgMi4wNzI2NyAxMS43NjAyIDIuMzUzNDEgMTIuMDQxTDIuOTU5NTEgMTIuNjQ3MUMzLjI0MDI1IDEyLjkyNzggMy42Nzc5NSAxMi45NzY4IDQuMDEzODIgMTIuNzY1MUw0LjkyNTA2IDEyLjE5MDdDNS4yNjM4NCAxMi4zNzcgNS42MjUxNiAxMi41Mjc4IDYuMDAzOSAxMi42Mzc5TDYuMjQxOTggMTMuNjg4MUM2LjMyOTc3IDE0LjA3NTMgNi42NzM5MSAxNC4zNTAyIDcuMDcwOTUgMTQuMzUwMkg3LjkyODA5QzguMzI1MTIgMTQuMzUwMiA4LjY2OTI3IDE0LjA3NTMgOC43NTcwNSAxMy42ODgxTDguOTk1MDUgMTIuNjM4M0M5LjM3NDExIDEyLjUyODIgOS43MzU3MyAxMi4zNzczIDEwLjA3NDggMTIuMTkwOUwxMC45ODYgMTIuNzY1M0MxMS4zMjE4IDEyLjk3NyAxMS43NTk1IDEyLjkyOCAxMi4wNDAzIDEyLjY0NzNMMTIuNjQ2NCAxMi4wNDEyQzEyLjkyNzEgMTEuNzYwNCAxMi45NzYxIDExLjMyMjcgMTIuNzY0NCAxMC45ODY5TDEyLjE5MDIgMTAuMDc2QzEyLjM3NjggOS43MzY4OCAxMi41Mjc4IDkuMzc1MTUgMTIuNjM4IDguOTk1OTZMMTMuNjg3OSA4Ljc1Nzk0QzE0LjA3NTEgOC42NzAxNSAxNC4zNSA4LjMyNjAxIDE0LjM1IDcuOTI4OTdWNy4wNzE4M0MxNC4zNSA2LjY3NDggMTQuMDc1MSA2LjMzMDY1IDEzLjY4NzkgNi4yNDI4N0wxMi42MzgxIDYuMDA0ODhDMTIuNTI4IDUuNjI1NzggMTIuMzc3MSA1LjI2NDE0IDEyLjE5MDYgNC45MjUwN0wxMi43NjQ4IDQuMDE0MDdDMTIuOTc2NiAzLjY3ODIgMTIuOTI3NiAzLjI0MDUgMTIuNjQ2OCAyLjk1OTc1TDEyLjA0MDcgMi4zNTM2NkMxMS43NiAyLjA3MjkyIDExLjMyMjMgMi4wMjM5MiAxMC45ODY0IDIuMjM1NjVMMTAuMDc1NSAyLjgwOTg5QzkuNzM2MjIgMi42MjMyOCA5LjM3NDM3IDIuNDcyMjkgOC45OTUwNSAyLjM2MjA5TDguNzU3MDUgMS4zMTIzMUM4LjY2OTI3IDAuOTI1MDk2IDguMzI1MTIgMC42NTAyMzggNy45MjgwOSAwLjY1MDIzOEg3LjA3MDk1Wk00LjkyMDUzIDMuODEyNTFDNS40NDcyNCAzLjQ0MzM5IDYuMDU2NjUgMy4xODQyNCA2LjcxNTQzIDMuMDY4MzlMNy4wNzA5NSAxLjUwMDI0SDcuOTI4MDlMOC4yODM1NSAzLjA2ODE2QzguOTQyNjcgMy4xODM4NyA5LjU1MjQgMy40NDMwMiAxMC4wNzk0IDMuODEyMjRMMTEuNDM5NyAyLjk1NDdMMTIuMDQ1OCAzLjU2MDc5TDExLjE4ODIgNC45MjExN0MxMS41NTczIDUuNDQ3OTggMTEuODE2NCA2LjA1NzUgMTEuOTMyMSA2LjcxNjM4TDEzLjUgNy4wNzE4M1Y3LjkyODk3TDExLjkzMiA4LjI4NDQ0QzExLjgxNjIgOC45NDM0MiAxMS41NTcgOS41NTMwMSAxMS4xODc4IDEwLjA3OThMMTIuMDQ1MyAxMS40NDAyTDExLjQzOTIgMTIuMDQ2MkwxMC4wNzg3IDExLjE4ODZDOS41NTE5MiAxMS41NTc2IDguOTQyNDEgMTEuODE2NiA4LjI4MzU1IDExLjkzMjNMNy45MjgwOSAxMy41MDAySDcuMDcwOTVMNi43MTU0MyAxMS45MzJDNi4wNTY5IDExLjgxNjIgNS40NDc3MiAxMS41NTcyIDQuOTIxMTYgMTEuMTg4M0wzLjU2MDU1IDEyLjA0NkwyLjk1NDQ1IDExLjQzOTlMMy44MTIxMyAxMC4wNzk0QzMuNDQzMSA5LjU1MjY2IDMuMTg0MDMgOC45NDMyNiAzLjA2ODI1IDguMjg0NUwxLjUwMDAyIDcuOTI4OTdWNy4wNzE4M0wzLjA2ODE4IDYuNzE2MzJDMy4xODM4OCA2LjA1NzY1IDMuNDQyODMgNS40NDgzMyAzLjgxMTcxIDQuOTIxNjVMMi45NTM5OCAzLjU2MUwzLjU2MDA4IDIuOTU0OTFMNC45MjA1MyAzLjgxMjUxWk05LjAyNDk2IDcuNTAwMDhDOS4wMjQ5NiA4LjM0MjI2IDguMzQyMjMgOS4wMjQ5OSA3LjUwMDA1IDkuMDI0OTlDNi42NTc4NiA5LjAyNDk5IDUuOTc1MTMgOC4zNDIyNiA1Ljk3NTEzIDcuNTAwMDhDNS45NzUxMyA2LjY1Nzg5IDYuNjU3ODYgNS45NzUxNiA3LjUwMDA1IDUuOTc1MTZDOC4zNDIyMyA1Ljk3NTE2IDkuMDI0OTYgNi42NTc4OSA5LjAyNDk2IDcuNTAwMDhaTTkuOTI0OTYgNy41MDAwOEM5LjkyNDk2IDguODM5MzIgOC44MzkyOSA5LjkyNDk5IDcuNTAwMDUgOS45MjQ5OUM2LjE2MDggOS45MjQ5OSA1LjA3NTEzIDguODM5MzIgNS4wNzUxMyA3LjUwMDA4QzUuMDc1MTMgNi4xNjA4NCA2LjE2MDggNS4wNzUxNiA3LjUwMDA1IDUuMDc1MTZDOC44MzkyOSA1LjA3NTE2IDkuOTI0OTYgNi4xNjA4NCA5LjkyNDk2IDcuNTAwMDhaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxadD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTkzNiAwLjg1MDAwNkMzLjgyNzY3IDAuODUwMDA2IDAuODQ5OTc2IDMuODI3MyAwLjg0OTk3NiA3LjUwMDIzQzAuODQ5OTc2IDEwLjQzNzkgMi43NTUyMyAxMi45MzA2IDUuMzk3NzUgMTMuODEwNEM1LjczMDQ3IDEzLjg3MTIgNS44NTE3MSAxMy42NjU4IDUuODUxNzEgMTMuNDg5NUM1Ljg1MTcxIDEzLjMzMTUgNS44NDYgMTIuOTEzNSA1Ljg0MjczIDEyLjM1ODdDMy45OTMwMSAxMi43NjA0IDMuNjAyNzMgMTEuNDY3MSAzLjYwMjczIDExLjQ2NzFDMy4zMDAyMiAxMC42OTg4IDIuODY0MjMgMTAuNDk0MiAyLjg2NDIzIDEwLjQ5NDJDMi4yNjA0NCAxMC4wODE5IDIuOTA5OTUgMTAuMDkwMSAyLjkwOTk1IDEwLjA5MDFDMy41Nzc0MiAxMC4xMzcgMy45Mjg1IDEwLjc3NTUgMy45Mjg1IDEwLjc3NTVDNC41MjE2NyAxMS43OTE2IDUuNDg1MTIgMTEuNDk4MSA1Ljg2Mzk2IDExLjMyNzlDNS45MjQzOCAxMC44OTg0IDYuMDk2MjUgMTAuNjA1MyA2LjI4NjA4IDEwLjQzOTFDNC44MDk0OCAxMC4yNzA5IDMuMjU2OTUgOS43MDA2MyAzLjI1Njk1IDcuMTUyNDFDMy4yNTY5NSA2LjQyNjE1IDMuNTE2MTggNS44MzI5OCAzLjk0MTU3IDUuMzY4QzMuODcyOTkgNS4xOTk4IDMuNjQ0NzggNC41MjM3NSA0LjAwNjg5IDMuNjA4MDdDNC4wMDY4OSAzLjYwODA3IDQuNTY0OTQgMy40MjkyNiA1LjgzNTM4IDQuMjg5NDFDNi4zNjU2OCA0LjE0MjA0IDYuOTM0NzcgNC4wNjg1NiA3LjUwMDE4IDQuMDY1N0M4LjA2NTE4IDQuMDY4NTYgOC42MzM4NiA0LjE0MjA0IDkuMTY0OTggNC4yODk0MUMxMC40MzQ2IDMuNDI5MjYgMTAuOTkxOCAzLjYwODA3IDEwLjk5MTggMy42MDgwN0MxMS4zNTQ4IDQuNTIzNzUgMTEuMTI2NiA1LjE5OTggMTEuMDU4NCA1LjM2OEMxMS40ODQ2IDUuODMyOTggMTEuNzQxOCA2LjQyNjE1IDExLjc0MTggNy4xNTI0MUMxMS43NDE4IDkuNzA3MTYgMTAuMTg2OCAxMC4yNjkzIDguNzA1NzEgMTAuNDMzOEM4Ljk0NDEyIDEwLjYzOTIgOS4xNTY4MSAxMS4wNDUgOS4xNTY4MSAxMS42NjU1QzkuMTU2ODEgMTIuNTU0MiA5LjE0ODY1IDEzLjI3MTUgOS4xNDg2NSAxMy40ODk1QzkuMTQ4NjUgMTMuNjY3NSA5LjI2ODY3IDEzLjg3NDUgOS42MDU4OCAxMy44MDk1QzEyLjI0NjQgMTIuOTI4MiAxNC4xNSAxMC40Mzc1IDE0LjE1IDcuNTAwMjNDMTQuMTUgMy44MjczIDExLjE3MjMgMC44NTAwMDYgNy40OTkzNiAwLjg1MDAwNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LCR0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTk2IDEuODAwMDJDNC4zNTE5NCAxLjgwMDAyIDEuNzk5OTYgNC4zNTIgMS43OTk5NiA3LjUwMDAyQzEuNzk5OTYgMTAuNjQ4IDQuMzUxOTQgMTMuMiA3LjQ5OTk2IDEzLjJDMTAuNjQ4IDEzLjIgMTMuMiAxMC42NDggMTMuMiA3LjUwMDAyQzEzLjIgNC4zNTIgMTAuNjQ4IDEuODAwMDIgNy40OTk5NiAxLjgwMDAyWk0wLjg5OTk2MyA3LjUwMDAyQzAuODk5OTYzIDMuODU0OTQgMy44NTQ4OCAwLjkwMDAyNCA3LjQ5OTk2IDAuOTAwMDI0QzExLjE0NSAwLjkwMDAyNCAxNC4xIDMuODU0OTQgMTQuMSA3LjUwMDAyQzE0LjEgMTEuMTQ1MSAxMS4xNDUgMTQuMSA3LjQ5OTk2IDE0LjFDMy44NTQ4OCAxNC4xIDAuODk5OTYzIDExLjE0NTEgMC44OTk5NjMgNy41MDAwMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEzLjQ5OTkgNy44OTk5OEgxLjQ5OTk0VjcuMDk5OThIMTMuNDk5OVY3Ljg5OTk4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy4wOTk5MSAxMy41VjEuNUg3Ljg5OTkxVjEzLjVINy4wOTk5MXpNMTAuMzc1IDcuNDk5OThDMTAuMzc1IDUuMzI3MjQgOS41OTM2NCAzLjE3Nzc4IDguMDYxODMgMS43NTY1Nkw4LjUzNzkzIDEuMjQzNDFDMTAuMjM5NiAyLjgyMjE4IDExLjA3NSA1LjE3MjczIDExLjA3NSA3LjQ5OTk4IDExLjA3NSA5LjgyNzI0IDEwLjIzOTYgMTIuMTc3OCA4LjUzNzkzIDEzLjc1NjZMOC4wNjE4MyAxMy4yNDM0QzkuNTkzNjQgMTEuODIyMiAxMC4zNzUgOS42NzI3MyAxMC4zNzUgNy40OTk5OHpNMy45OTk2OSA3LjVDMy45OTk2OSA1LjE3NjExIDQuODA3ODYgMi44MjY3OCA2LjQ1NzY4IDEuMjQ3MTlMNi45NDE3NyAxLjc1MjgxQzUuNDU4MiAzLjE3MzIzIDQuNjk5NjkgNS4zMjM4OSA0LjY5OTY5IDcuNSA0LjY5OTcgOS42NzYxMSA1LjQ1ODIyIDExLjgyNjggNi45NDE3OSAxMy4yNDcyTDYuNDU3NjkgMTMuNzUyOEM0LjgwNzg4IDEyLjE3MzIgMy45OTk3IDkuODIzOSAzLjk5OTY5IDcuNXpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5OTYgMy45NTgwMUM5LjY2OTI4IDMuOTU4MDEgMTEuODc1MyA0LjM1OTE1IDEzLjM3MDYgNS4xOTQ0OCAxMy41Mzk0IDUuMjg4NzUgMTMuNTk5OCA1LjUwMTk3IDEzLjUwNTUgNS42NzA3MyAxMy40MTEzIDUuODM5NDggMTMuMTk4IDUuODk5ODcgMTMuMDI5MyA1LjgwNTYgMTEuNjc5NCA1LjA1MTU1IDkuNjA3OTkgNC42NTgwMSA3LjQ5OTk2IDQuNjU4MDEgNS4zOTE5MiA0LjY1ODAxIDMuMzIwNTIgNS4wNTE1NSAxLjk3MDY0IDUuODA1NiAxLjgwMTg4IDUuODk5ODcgMS41ODg2NiA1LjgzOTQ4IDEuNDk0MzkgNS42NzA3MyAxLjQwMDEzIDUuNTAxOTcgMS40NjA1MSA1LjI4ODc1IDEuNjI5MjcgNS4xOTQ0OCAzLjEyNDY2IDQuMzU5MTUgNS4zMzA2MyAzLjk1ODAxIDcuNDk5OTYgMy45NTgwMXpNNy40OTk5NiAxMC44NUM5LjY2OTI4IDEwLjg1IDExLjg3NTMgMTAuNDQ4OCAxMy4zNzA2IDkuNjEzNSAxMy41Mzk0IDkuNTE5MjQgMTMuNTk5OCA5LjMwNjAxIDEzLjUwNTUgOS4xMzcyNiAxMy40MTEzIDguOTY4NSAxMy4xOTggOC45MDgxMiAxMy4wMjkzIDkuMDAyMzggMTEuNjc5NCA5Ljc1NjQzIDkuNjA3OTkgMTAuMTUgNy40OTk5NiAxMC4xNSA1LjM5MTkyIDEwLjE1IDMuMzIwNTIgOS43NTY0MyAxLjk3MDY0IDkuMDAyMzkgMS44MDE4OCA4LjkwODEyIDEuNTg4NjYgOC45Njg1IDEuNDk0MzkgOS4xMzcyNiAxLjQwMDEzIDkuMzA2MDEgMS40NjA1MSA5LjUxOTI0IDEuNjI5MjcgOS42MTM1IDMuMTI0NjYgMTAuNDQ4OCA1LjMzMDYzIDEwLjg1IDcuNDk5OTYgMTAuODV6XCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxOdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTIuNSAySDhWN0gxM1YyLjVDMTMgMi4yMjM4NiAxMi43NzYxIDIgMTIuNSAyWk0xMyA4SDhWMTNIMTIuNUMxMi43NzYxIDEzIDEzIDEyLjc3NjEgMTMgMTIuNVY4Wk03IDdWMkgyLjVDMi4yMjM4NiAyIDIgMi4yMjM4NiAyIDIuNVY3SDdaTTIgOFYxMi41QzIgMTIuNzc2MSAyLjIyMzg2IDEzIDIuNSAxM0g3VjhIMlpNMi41IDFDMS42NzE1NyAxIDEgMS42NzE1NyAxIDIuNVYxMi41QzEgMTMuMzI4NCAxLjY3MTU3IDE0IDIuNSAxNEgxMi41QzEzLjMyODQgMTQgMTQgMTMuMzI4NCAxNCAxMi41VjIuNUMxNCAxLjY3MTU3IDEzLjMyODQgMSAxMi41IDFIMi41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sRnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuNDQ5OTUgMC45NDk5NTFDMS4zMTczNCAwLjk0OTk1MSAxLjE5MDE2IDEuMDAyNjMgMS4wOTY0IDEuMDk2NEMxLjAwMjYzIDEuMTkwMTcgMC45NDk5NTEgMS4zMTczNSAwLjk0OTk1MSAxLjQ0OTk1TDAuOTQ5OTY2IDMuNDQ5OTVDMC45NDk5NjkgMy43MjYxIDEuMTczODMgMy45NDk5NSAxLjQ0OTk3IDMuOTQ5OTVDMS43MjYxMSAzLjk0OTk1IDEuOTQ5OTcgMy43MjYwOSAxLjk0OTk3IDMuNDQ5OTVMMS45NDk5NSAxLjk0OTk1SDMuNDQ5OTdDMy43MjYxMSAxLjk0OTk1IDMuOTQ5OTcgMS43MjYwOSAzLjk0OTk3IDEuNDQ5OTVDMy45NDk5NyAxLjE3MzgxIDMuNzI2MTEgMC45NDk5NTEgMy40NDk5NyAwLjk0OTk1MUgxLjQ0OTk1Wk01Ljk0OTk1IDAuOTQ5OTUxQzUuNjczODEgMC45NDk5NTEgNS40NDk5NSAxLjE3MzgxIDUuNDQ5OTUgMS40NDk5NUM1LjQ0OTk1IDEuNzI2MDkgNS42NzM4MSAxLjk0OTk1IDUuOTQ5OTUgMS45NDk5NUg4Ljk0OTk1QzkuMjI2MDkgMS45NDk5NSA5LjQ0OTk1IDEuNzI2MDkgOS40NDk5NSAxLjQ0OTk1QzkuNDQ5OTUgMS4xNzM4MSA5LjIyNjA5IDAuOTQ5OTUxIDguOTQ5OTUgMC45NDk5NTFINS45NDk5NVpNNS40NDk5NSAxMy40NUM1LjQ0OTk1IDEzLjE3MzggNS42NzM4MSAxMi45NSA1Ljk0OTk1IDEyLjk1SDguOTQ5OTVDOS4yMjYwOSAxMi45NSA5LjQ0OTk1IDEzLjE3MzggOS40NDk5NSAxMy40NUM5LjQ0OTk1IDEzLjcyNjEgOS4yMjYwOSAxMy45NSA4Ljk0OTk1IDEzLjk1SDUuOTQ5OTVDNS42NzM4MSAxMy45NSA1LjQ0OTk1IDEzLjcyNjEgNS40NDk5NSAxMy40NVpNMS45NDk5NSA1Ljk0OTk1QzEuOTQ5OTUgNS42NzM4MSAxLjcyNjA5IDUuNDQ5OTUgMS40NDk5NSA1LjQ0OTk1QzEuMTczODEgNS40NDk5NSAwLjk0OTk1MSA1LjY3MzgxIDAuOTQ5OTUxIDUuOTQ5OTVWOC45NDk5NUMwLjk0OTk1MSA5LjIyNjA5IDEuMTczODEgOS40NDk5NSAxLjQ0OTk1IDkuNDQ5OTVDMS43MjYwOSA5LjQ0OTk1IDEuOTQ5OTUgOS4yMjYwOSAxLjk0OTk1IDguOTQ5OTVWNS45NDk5NVpNMTMuNDUgNS40NDk5NUMxMy43MjYxIDUuNDQ5OTUgMTMuOTUgNS42NzM4MSAxMy45NSA1Ljk0OTk1VjguOTQ5OTVDMTMuOTUgOS4yMjYwOSAxMy43MjYxIDkuNDQ5OTUgMTMuNDUgOS40NDk5NUMxMy4xNzM4IDkuNDQ5OTUgMTIuOTUgOS4yMjYwOSAxMi45NSA4Ljk0OTk1VjUuOTQ5OTVDMTIuOTUgNS42NzM4MSAxMy4xNzM4IDUuNDQ5OTUgMTMuNDUgNS40NDk5NVpNMTEuNDUgMC45NDk5NTFDMTEuMTczOCAwLjk0OTk1MSAxMC45NSAxLjE3MzgxIDEwLjk1IDEuNDQ5OTVDMTAuOTUgMS43MjYwOSAxMS4xNzM4IDEuOTQ5OTUgMTEuNDUgMS45NDk5NUgxMi45NDk5VjMuNDQ5OTVDMTIuOTQ5OSAzLjcyNjA5IDEzLjE3MzggMy45NDk5NSAxMy40NDk5IDMuOTQ5OTVDMTMuNzI2MSAzLjk0OTk1IDEzLjk0OTkgMy43MjYwOSAxMy45NDk5IDMuNDQ5OTVWMS40NDk5NUMxMy45NDk5IDEuMTczODEgMTMuNzI1MiAwLjk0OTk1MSAxMy40NDkgMC45NDk5NTFIMTEuNDVaTTEuNDQ5OTUgMTAuOTVDMS43MjYwOSAxMC45NSAxLjk0OTk1IDExLjE3MzggMS45NDk5NSAxMS40NVYxMi45NUgzLjQ0OTk3QzMuNzI2MTEgMTIuOTUgMy45NDk5NyAxMy4xNzM4IDMuOTQ5OTcgMTMuNDVDMy45NDk5NyAxMy43MjYxIDMuNzI2MTEgMTMuOTUgMy40NDk5NyAxMy45NUgxLjQ0OTk1QzEuMTczODEgMTMuOTUgMC45NDk5NTEgMTMuNzI2MSAwLjk0OTk1MSAxMy40NVYxMS40NUMwLjk0OTk1MSAxMS4xNzM4IDEuMTczODEgMTAuOTUgMS40NDk5NSAxMC45NVpNMTMuOTUgMTEuNDVDMTMuOTUgMTEuMTczOCAxMy43MjYxIDEwLjk1IDEzLjQ1IDEwLjk1QzEzLjE3MzggMTAuOTQ5OSAxMi45NSAxMS4xNzM4IDEyLjk1IDExLjQ0OTlMMTIuOTQ5MSAxMi45NUgxMS40NUMxMS4xNzM4IDEyLjk1IDEwLjk1IDEzLjE3MzggMTAuOTUgMTMuNDVDMTAuOTUgMTMuNzI2MSAxMS4xNzM4IDEzLjk1IDExLjQ1IDEzLjk1SDEzLjQ0OTlDMTMuNzI2MSAxMy45NSAxMy45NDk5IDEzLjcyNjEgMTMuOTQ5OSAxMy40NUwxMy45NSAxMS40NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFd0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTkxIDAuODc2ODkyQzMuODQyMjIgMC44NzY4OTIgMC44NzcwNzUgMy44NDIwNCAwLjg3NzA3NSA3LjQ5OTcyQzAuODc3MDc1IDExLjE1NzQgMy44NDIyMiAxNC4xMjI2IDcuNDk5OTEgMTQuMTIyNkMxMS4xNTc2IDE0LjEyMjYgMTQuMTIyNyAxMS4xNTc0IDE0LjEyMjcgNy40OTk3MkMxNC4xMjI3IDMuODQyMDQgMTEuMTU3NiAwLjg3Njg5MiA3LjQ5OTkxIDAuODc2ODkyWk03LjAwMDAzIDEuODQ4NjFDNC4xMDExNCAyLjEwMTcgMS44MjcwNyA0LjUzNTE1IDEuODI3MDcgNy40OTk3MkMxLjgyNzA3IDEwLjQ2NDMgNC4xMDExNCAxMi44OTc3IDcuMDAwMDMgMTMuMTUwOFYxLjg0ODYxWk04LjAwMDAzIDEzLjE1MDhDMTAuODk4OCAxMi44OTc2IDEzLjE3MjcgMTAuNDY0MiAxMy4xNzI3IDcuNDk5NzJDMTMuMTcyNyA0LjUzNTI0IDEwLjg5ODggMi4xMDE4NSA4LjAwMDAzIDEuODQ4NjRWMTMuMTUwOFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFV0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTkxIDAuODc2ODkyQzMuODQyMjIgMC44NzY4OTIgMC44NzcwNzUgMy44NDIwNCAwLjg3NzA3NSA3LjQ5OTcyQzAuODc3MDc1IDExLjE1NzQgMy44NDIyMiAxNC4xMjI2IDcuNDk5OTEgMTQuMTIyNkMxMS4xNTc2IDE0LjEyMjYgMTQuMTIyNyAxMS4xNTc0IDE0LjEyMjcgNy40OTk3MkMxNC4xMjI3IDMuODQyMDQgMTEuMTU3NiAwLjg3Njg5MiA3LjQ5OTkxIDAuODc2ODkyWk03LjQ5OTg4IDEuODI2ODlDNC4zNjY4OCAxLjgyNjkgMS44MjcwNyA0LjM2NjcyIDEuODI3MDcgNy40OTk3MkMxLjgyNzA3IDEwLjYzMjcgNC4zNjY4OCAxMy4xNzI1IDcuNDk5ODggMTMuMTcyNlYxLjgyNjg5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0senQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuNSAzQzEuMjIzODYgMyAxIDMuMjIzODYgMSAzLjVDMSAzLjc3NjE0IDEuMjIzODYgNCAxLjUgNEgxMy41QzEzLjc3NjEgNCAxNCAzLjc3NjE0IDE0IDMuNUMxNCAzLjIyMzg2IDEzLjc3NjEgMyAxMy41IDNIMS41Wk0xIDcuNUMxIDcuMjIzODYgMS4yMjM4NiA3IDEuNSA3SDEzLjVDMTMuNzc2MSA3IDE0IDcuMjIzODYgMTQgNy41QzE0IDcuNzc2MTQgMTMuNzc2MSA4IDEzLjUgOEgxLjVDMS4yMjM4NiA4IDEgNy43NzYxNCAxIDcuNVpNMSAxMS41QzEgMTEuMjIzOSAxLjIyMzg2IDExIDEuNSAxMUgxMy41QzEzLjc3NjEgMTEgMTQgMTEuMjIzOSAxNCAxMS41QzE0IDExLjc3NjEgMTMuNzc2MSAxMiAxMy41IDEySDEuNUMxLjIyMzg2IDEyIDEgMTEuNzc2MSAxIDExLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxHdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNi44MTEzIDEuNjQ3MDZDNi42MjE4OCAyLjg3OTE4IDYuNjgyNjggMy44ODUyMyA2Ljc2ODQ4IDUuMzA0OTlDNi43ODQxNSA1LjU2NDI2IDYuODAwNjUgNS44MzczMiA2LjgxNjYxIDYuMTI4MDhDNi44MzExMSA2LjM5MjA4IDYuNjM3NTggNi42MjE3MiA2LjM3NDk1IDYuNjUyMTdDNi4xMTIzMiA2LjY4MjYyIDUuODcxMzggNi41MDMzNCA1LjgyNTA5IDYuMjQzMDRMNS43NDc1NCA1LjgwNjk4QzUuNjQ0MDIgNS4xNjUyOSA1LjQ4MzU1IDQuMjU0ODEgNS4xNzgwNyAzLjQ0NzQxQzQuODYyNDEgMi42MTMxMiA0LjQ0ODYgMi4wNDEyMSAzLjkzNDM2IDEuODYwNDRDMy42NDk5NCAxLjc2MTA0IDMuNDE5MDEgMS44NDI3OSAzLjI1ODY4IDIuMDEwNTJDMy4wODc0NiAyLjE4OTYyIDIuOTk3NiAyLjQ3MDY1IDMuMDYyNyAyLjc1Mzk5QzMuMjE0NiAzLjM0NDI0IDMuNDQ2MjcgMy45MTY3IDMuNjk4MzYgNC41MTgwMkMzLjcyMDgyIDQuNTcxNTggMy43NDM0NiA0LjYyNTQzIDMuNzY2MjEgNC42Nzk1NEMzLjk5NTQgNS4yMjQ1NyA0LjIzNjE5IDUuNzk3MiA0LjQxNjQ0IDYuMzkwODFMNC40MTY5MSA2LjM5MjM4QzQuNTYyIDYuODc1ODYgNC42NTY0NiA3LjI1OTUgNC43MzA4NiA3LjU2MTY1QzQuNzYwMzQgNy42ODEzOCA0Ljc4NjY3IDcuNzg4MzEgNC44MTE3NSA3Ljg4MzU5QzQuODY3NjggOC4wOTYwNiA0Ljc3ODM2IDguMzIwMTQgNC41OTE2MSA4LjQzNTg4QzQuNDA0ODYgOC41NTE2MSA0LjE2NDQ1IDguNTMxODggMy45OTkwNyA4LjM4NzI1QzMuNzM3NDkgOC4xNTg0OCAzLjUxNSA3LjkyNzg0IDMuMzE4MTcgNy43MTgwMkMzLjI3NjI3IDcuNjczMzUgMy4yMzYwMiA3LjYzMDE4IDMuMTk3MDUgNy41ODgzOEMzLjA0Nzc3IDcuNDI4MjYgMi45MTcxMiA3LjI4ODEyIDIuNzgzMzQgNy4xNjAyOUMyLjQ1OTg5IDYuODUxMjIgMi4xODM5OCA2LjY4MDA0IDEuODA1ODUgNi42NDM2OUwxLjgwMzI0IDYuNjQzNDNDMS41NjExNyA2LjYxODg4IDEuNDE0MDIgNi42NjQ0MSAxLjMxNzU2IDYuNzI2MjdDMS4yMTg5OSA2Ljc4OTQ3IDEuMTE5ODggNi45MDQxNCAxLjAzNzg0IDcuMTEyM0MwLjk3NjU3NiA3LjI4NDkyIDEuMDE1MTUgNy42Mjk4NyAxLjE5MjkgNy45NjkxMUwxLjE5NzI4IDcuOTc3NDdDMS40MDA4NiA4LjM4NDUyIDEuNzQ0NzUgOC44MTU4NyAyLjE4MTQxIDkuMjkyOTlDMi4zOTczOSA5LjUyODk4IDIuNjI4NzIgOS43Njg0OSAyLjg2OTM0IDEwLjAxNzRMMi44Nzk2NiAxMC4wMjgxQzMuMTE1NDYgMTAuMjcyMSAzLjM1OTYyIDEwLjUyNDcgMy41OTcxMyAxMC43ODI3QzQuNDI4OCAxMS42ODYzIDUuMjc3MDYgMTIuNzUzOCA1LjQ2MjcgMTRIMTEuNTA4N0MxMS41NjM2IDEyLjQzNTMgMTEuODc1NiAxMS4yNjggMTIuMjg3NSAxMC4xMzQ2QzEyLjQ0NTQgOS43MDA0MSAxMi42MTIxIDkuMjg0MTIgMTIuNzgyNiA4Ljg1ODI5QzEzLjEwOTcgOC4wNDEzOSAxMy40NTA5IDcuMTg5MzcgMTMuNzcwNSA2LjEwODI0QzE0LjA5ODkgNC45OTczNyAxNC4wMDk3IDQuMzcwMzMgMTMuODYxMyA0LjAzOTg0QzEzLjcxNyAzLjcxODU4IDEzLjQ5MTQgMy42MTc4NiAxMy4zODE2IDMuNTk2MDZDMTMuMTM4MSAzLjU0Nzc0IDEzLjAzODQgMy42MDk0NyAxMi45Njk4IDMuNjc5MDFDMTIuODY3IDMuNzgzMTYgMTIuNzY5OCAzLjk4MjczIDEyLjY5MjEgNC4zMDI2OUMxMi42MTY2IDQuNjEzNDUgMTIuNTc1MiA0Ljk2NTE3IDEyLjUzMyA1LjMyNTAxTDEyLjUyOTggNS4zNTI4NUMxMi40OTI0IDUuNjcyNDIgMTIuNDUwNSA2LjAzMDE2IDEyLjM2NjUgNi4zMDA5OEMxMi4zMzgzIDYuNDA2OTkgMTIuMjgxOSA2LjUwNDA3IDEyLjE5NzkgNi41NzUzOUMxMi4xMzgyIDYuNjI2MSAxMi4wMTA0IDYuNzA4MTggMTEuODMwOSA2LjY5MzEyQzExLjU0MjQgNi42Njg5MSAxMS4zNzEyIDYuNDIxNDMgMTEuMzY1IDYuMTQ3ODNDMTEuMzU2IDUuNzU0NTQgMTEuMzg4MyA1LjM1ODY0IDExLjQwNzQgNC45NjYwOEMxMS40NDI4IDQuMjM2NDYgMTEuNDc3IDMuNTMzNyAxMS40MjQ1IDIuODM0MkwxMS40MjQyIDIuODI5MzRDMTEuMzkxNiAyLjMyOTk3IDExLjA0OTMgMi4wMDIyOCAxMC43MDA3IDEuOTIyOEMxMC41MzA1IDEuODg0MDEgMTAuMzY5IDEuOTA2MDEgMTAuMjM0NyAxLjk4MzVDMTAuMTAzIDIuMDU5NDYgOS45NTUzNSAyLjIxMzE4IDkuODU3NCAyLjUxMzk0TDkuODU2MzEgMi41MTcyNkM5LjgxNTI1IDIuNjQwNCA5Ljc3Mjk4IDIuODc3NTMgOS43MzYwNiAzLjIxMjRDOS43MDA0NCAzLjUzNTQyIDkuNjczMzcgMy45MTI3OSA5LjY1MTU2IDQuMjk0MThDOS42MzI5IDQuNjIwMzMgOS42MTc4NSA0Ljk1ODQgOS42MDQzNCA1LjI2MTk0QzkuNTg3MjggNS42NDUyOSA5LjU3MjY3IDUuOTczNTcgOS41NTYzMyA2LjE1MzJDOS41NDk4MyA2LjIyNDU5IDkuNTI5MzkgNi4yOTQ5MyA5LjQ5NTAxIDYuMzU3ODVDOS40NzM1NiA2LjM5NzExIDkuMzYxMTUgNi42MDk0NyA5LjA3MTA2IDYuNjE4NDNDOC43NzkxNyA2LjYyNzQ0IDguNjM5NzUgNi40MDA1NyA4LjYxNjk4IDYuMzU5MTlDOC41NTYzNCA2LjI0ODk5IDguNTUwNjYgNi4xMTgwNyA4LjU0NzU0IDUuOTkyODNDOC41NDQ3NCA1Ljg4MDY0IDguNTQyOTQgNS43MTc5OCA4LjU0MTc0IDUuNTQ3NjdDOC41MzkzNSA1LjIwNTgyIDguNTM5MzUgNC44MTkxOSA4LjUzOTM1IDQuNzA5NTJDOC41MzkzNSAzLjY2NTcgOC41MzgzOCAyLjY1MzcyIDguNDQ3MTQgMS42NDM3MkM4LjM5MTgzIDEuMjQxMjcgOC4wNjI3OCAxLjAwNDU1IDcuNjQzNiAxLjAwMDA1QzcuMjIzOTkgMC45OTU1NTIgNi44NzkxOCAxLjIyNzA0IDYuODExMyAxLjY0NzA2Wk05LjQxMjE5IDEuMzYxN0M5LjIxNDY5IDAuNDQ4NDg0IDguMzk5MTMgMC4wMDgxMDMyNCA3LjY1NDMzIDAuMDAwMTExNTRDNi44NjQ1MiAtMC4wMDgzNjMwOCA1Ljk4NzYxIDAuNDY1ODgxIDUuODIzNjUgMS40OTAzN0w1LjgyMzE4IDEuNDkzMzRDNS43ODIzOSAxLjc1ODQgNS43NTIyOSAyLjAxNDgxIDUuNzMwOSAyLjI2NjUyQzUuMzk0MjMgMS42NzM2NCA0LjkyNjIyIDEuMTQ4OTQgNC4yNjU1IDAuOTE2ODU5QzMuNTg2NjEgMC42NzkzMTIgMi45NDkyIDAuODg3MDg3IDIuNTM1ODIgMS4zMTk1MkMyLjEzNDE1IDEuNzM5NzEgMS45NDQzOCAyLjM2NzQyIDIuMDkwMzEgMi45ODc0NkwyLjA5MjY5IDIuOTk3MTNDMi4yNjQ3OCAzLjY2ODA4IDIuNTIzOTYgNC4zMDMxNiAyLjc3NjEzIDQuOTA0NjVDMi43OTgxNCA0Ljk1NzE3IDIuODIwMSA1LjAwOTQxIDIuODQxOTQgNS4wNjEzOUMzLjAyMTM5IDUuNDg4NDIgMy4xOTM3OCA1Ljg5ODY2IDMuMzM4NzEgNi4zMTI1NkMyLjk2NDA0IDUuOTgxNDIgMi41MTkyNSA1LjcwNzk2IDEuOTAyNzYgNS42NDg0QzEuNDg4NjUgNS42MDY2MyAxLjEwMzkxIDUuNjc1MzYgMC43Nzc4MDUgNS44ODQ0NEMwLjQ1NDIzOSA2LjA5MTkgMC4yNDA2NzEgNi40MDQwNSAwLjEwNDE4NyA2Ljc1NDA2TDAuMTAwODY4IDYuNzYyODFDLTAuMTAxODQgNy4zMTI4NiAwLjA2NjMzMTIgNy45NzE1NyAwLjMwNDg5NSA4LjQyODk3QzAuNTczNzA0IDguOTY0NzQgMC45OTYxMDQgOS40NzkwNCAxLjQ0MzcyIDkuOTY4MTNDMS42NzA0NiAxMC4yMTU5IDEuOTExMzYgMTAuNDY1MiAyLjE1MDMzIDEwLjcxMjRMMi4xNTY4MiAxMC43MTkxQzIuMzk1MjQgMTAuOTY1OCAyLjYzMjE3IDExLjIxMDkgMi44NjEzNCAxMS40NTk5QzMuODA5MzcgMTIuNDkgNC41MDAwMiAxMy40NjMyIDQuNTAwMDIgMTQuNUM0LjUwMDAyIDE0Ljc3NjEgNC43MjM4OCAxNSA1LjAwMDAyIDE1SDEyQzEyLjI3NjIgMTUgMTIuNSAxNC43NzYxIDEyLjUgMTQuNUMxMi41IDEyLjgyMTIgMTIuODAyMSAxMS42NDYyIDEzLjIyNzQgMTAuNDc2MkMxMy4zNjUzIDEwLjA5NjggMTMuNTIxNiA5LjcwNTc5IDEzLjY4NjggOS4yOTI0N0MxNC4wMjM4IDguNDQ5MjIgMTQuMzk4IDcuNTEyOTggMTQuNzI5NSA2LjM5MTc1QzE1LjA5NTYgNS4xNTMyNCAxNS4wNTU5IDQuMjU5MDQgMTQuNzczNSAzLjYzMDE3QzE0LjQ4NyAyLjk5MjA4IDEzLjk3OTggMi42OTUzIDEzLjU3NjMgMi42MTUyQzEzLjEyNzYgMi41MjYxNCAxMi43MzY3IDIuNjA0NzUgMTIuNDI2OCAyLjgzMDgxQzEyLjQyNTMgMi44MDc3MyAxMi40MjM2IDIuNzg0NjggMTIuNDIxOSAyLjc2MTY3QzEyLjM1ODcgMS44MTA1IDExLjY5MDcgMS4xMjI4NSAxMC45MjMgMC45NDc4MjFDMTAuNTM0NiAwLjg1OTI4NyAxMC4xMTExIDAuOTAwMzkzIDkuNzM1MDkgMS4xMTcyNEM5LjYxODUyIDEuMTg0NDYgOS41MTA1NSAxLjI2NjIzIDkuNDEyMTkgMS4zNjE3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sS3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTguNzU0MzIgMi4wNTAyQzguNTA1NzkgMi4wNTAyIDguMzA0MzIgMi4yNTE2NyA4LjMwNDMyIDIuNTAwMkM4LjMwNDMyIDIuNzQ4NzMgOC41MDU3OSAyLjk1MDIgOC43NTQzMiAyLjk1MDJIOS45NDk5N1Y3LjA1MDA0SDUuMDQ5OTdWMi45NTAySDYuMjU0MzJDNi41MDI4NSAyLjk1MDIgNi43MDQzMiAyLjc0ODczIDYuNzA0MzIgMi41MDAyQzYuNzA0MzIgMi4yNTE2NyA2LjUwMjg1IDIuMDUwMiA2LjI1NDMyIDIuMDUwMkgyLjc1NDMyQzIuNTA1NzkgMi4wNTAyIDIuMzA0MzIgMi4yNTE2NyAyLjMwNDMyIDIuNTAwMkMyLjMwNDMyIDIuNzQ4NzMgMi41MDU3OSAyLjk1MDIgMi43NTQzMiAyLjk1MDJIMy45NDk5N1YxMi4wNTAySDIuNzU0MzJDMi41MDU3OSAxMi4wNTAyIDIuMzA0MzIgMTIuMjUxNyAyLjMwNDMyIDEyLjUwMDJDMi4zMDQzMiAxMi43NDg3IDIuNTA1NzkgMTIuOTUwMiAyLjc1NDMyIDEyLjk1MDJINi4yNTQzMkM2LjUwMjg1IDEyLjk1MDIgNi43MDQzMiAxMi43NDg3IDYuNzA0MzIgMTIuNTAwMkM2LjcwNDMyIDEyLjI1MTcgNi41MDI4NSAxMi4wNTAyIDYuMjU0MzIgMTIuMDUwMkg1LjA0OTk3VjcuOTUwMDRIOS45NDk5N1YxMi4wNTAySDguNzU0MzJDOC41MDU3OSAxMi4wNTAyIDguMzA0MzIgMTIuMjUxNyA4LjMwNDMyIDEyLjUwMDJDOC4zMDQzMiAxMi43NDg3IDguNTA1NzkgMTIuOTUwMiA4Ljc1NDMyIDEyLjk1MDJIMTIuMjU0M0MxMi41MDI4IDEyLjk1MDIgMTIuNzA0MyAxMi43NDg3IDEyLjcwNDMgMTIuNTAwMkMxMi43MDQzIDEyLjI1MTcgMTIuNTAyOCAxMi4wNTAyIDEyLjI1NDMgMTIuMDUwMkgxMS4wNVYyLjk1MDJIMTIuMjU0M0MxMi41MDI4IDIuOTUwMiAxMi43MDQzIDIuNzQ4NzMgMTIuNzA0MyAyLjUwMDJDMTIuNzA0MyAyLjI1MTY3IDEyLjUwMjggMi4wNTAyIDEyLjI1NDMgMi4wNTAySDguNzU0MzJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxxdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy4xODEzIDEuNjgxNzlDNy4zNTcwNCAxLjUwNjA1IDcuNjQxOTYgMS41MDYwNSA3LjgxNzcgMS42ODE3OUwxMC4zMTc3IDQuMTgxNzlDMTAuNDkzNCA0LjM1NzUzIDEwLjQ5MzQgNC42NDI0NSAxMC4zMTc3IDQuODE4MTlDMTAuMTQyIDQuOTkzOTIgOS44NTcwNCA0Ljk5MzkyIDkuNjgxMyA0LjgxODE5TDcuOTQ5NSAzLjA4NjM4TDcuOTQ5NSAxMS45MTM2TDkuNjgxMyAxMC4xODE4QzkuODU3MDQgMTAuMDA2MSAxMC4xNDIgMTAuMDA2MSAxMC4zMTc3IDEwLjE4MThDMTAuNDkzNCAxMC4zNTc1IDEwLjQ5MzQgMTAuNjQyNCAxMC4zMTc3IDEwLjgxODJMNy44MTc3IDEzLjMxODJDNy43MzMzMSAxMy40MDI2IDcuNjE4ODUgMTMuNDUgNy40OTk1IDEzLjQ1QzcuMzgwMTUgMTMuNDUgNy4yNjU2OSAxMy40MDI2IDcuMTgxMyAxMy4zMTgyTDQuNjgxMyAxMC44MTgyQzQuNTA1NTcgMTAuNjQyNCA0LjUwNTU3IDEwLjM1NzUgNC42ODEzIDEwLjE4MThDNC44NTcwNCAxMC4wMDYxIDUuMTQxOTYgMTAuMDA2MSA1LjMxNzcgMTAuMTgxOEw3LjA0OTUgMTEuOTEzNkw3LjA0OTUgMy4wODYzOEw1LjMxNzcgNC44MTgxOUM1LjE0MTk2IDQuOTkzOTIgNC44NTcwNCA0Ljk5MzkyIDQuNjgxMyA0LjgxODE5QzQuNTA1NTcgNC42NDI0NSA0LjUwNTU3IDQuMzU3NTMgNC42ODEzIDQuMTgxNzlMNy4xODEzIDEuNjgxNzlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxZdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy4wNzkyNiAwLjIyMjI1M0M3LjMxMjc1IC0wLjAwNzQzNCA3LjY4NzMgLTAuMDA3NDM0IDcuOTIwNzkgMC4yMjIyNTNMMTQuNjcwOCA2Ljg2MjI3QzE0LjkwNyA3LjA5NDY1IDE0LjkxMDEgNy40NzQ1MyAxNC42Nzc4IDcuNzEwNzZDMTQuNDQ1NCA3Ljk0NyAxNC4wNjU1IDcuOTUwMTIgMTMuODI5MyA3LjcxNzczTDEzIDYuOTAyMDFWMTIuNUMxMyAxMi43NzYxIDEyLjc3NjIgMTMgMTIuNSAxM0gyLjUwMDAyQzIuMjIzODggMTMgMi4wMDAwMiAxMi43NzYxIDIuMDAwMDIgMTIuNVY2LjkwMjAxTDEuMTcwNzkgNy43MTc3M0MwLjkzNDU1OCA3Ljk1MDEyIDAuNTU0NjcyIDcuOTQ3IDAuMzIyMjkgNy43MTA3NkMwLjA4OTkwNzkgNy40NzQ1MyAwLjA5MzAyODMgNy4wOTQ2NSAwLjMyOTI2IDYuODYyMjdMNy4wNzkyNiAwLjIyMjI1M1pNNy41MDAwMiAxLjQ5MTYzTDEyIDUuOTE4MzFWMTJIMTBWOC40OTk5OUMxMCA4LjIyMzg1IDkuNzc2MTcgNy45OTk5OSA5LjUwMDAyIDcuOTk5OTlINi41MDAwMkM2LjIyMzg4IDcuOTk5OTkgNi4wMDAwMiA4LjIyMzg1IDYuMDAwMDIgOC40OTk5OVYxMkgzLjAwMDAyVjUuOTE4MzFMNy41MDAwMiAxLjQ5MTYzWk03LjAwMDAyIDEySDkuMDAwMDJWOC45OTk5OUg3LjAwMDAyVjEyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sSnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNSAwLjAwMzI5NTlDNi44MDQ3MyAwLjAwMzI5NTkgNi4yNDk1MyAwLjI4MTEwNiA2LjI1IDAuNzQ5OTk1QzYuMjUgMC45OTcyNTggNi40MjQ0NiAxLjEyMDE0IDYuNTc2ODcgMS4yMjc0OUM2LjY5NTA3IDEuMzEwNzQgNi44IDEuMzg0NjUgNi44IDEuNUM2LjggMS43MDcxIDYuMDYyMjQgMS43NDI2NCA1LjE5Nzg5IDEuNzg0MjdDMy45NzU1MyAxLjg0MzE0IDIuNSAxLjkxNDIxIDIuNSAyLjVDMi41IDIuNzc2MTQgMi43MjM4NiAzIDMgM0gxMkMxMi4yNzYxIDMgMTIuNSAyLjc3NjE0IDEyLjUgMi41QzEyLjUgMS45MTQyMSAxMS4wMjQ1IDEuODQzMTQgOS44MDIxMSAxLjc4NDI3QzguOTM3NzYgMS43NDI2NCA4LjIgMS43MDcxIDguMiAxLjVDOC4yIDEuMzg0NjUgOC4zMDQ5MyAxLjMxMDc0IDguNDIzMTMgMS4yMjc0OUM4LjU3NTU0IDEuMTIwMTQgOC43NSAwLjk5NzI1OCA4Ljc1IDAuNzQ5OTk1QzguNzUwNDcgMC4yODExMDYgOC4xOTUyNyAwLjAwMzI5NTkgNy41IDAuMDAzMjk1OVpNMi44OTQ1MSA2LjEyMjY2QzIuMjU4MDYgNi41MjQ3MSAxLjkwNDE3IDcuMzExMTggMi4wMjQ3MyA4LjA1NTZMMi44MzU4OCAxMi40NzcyQzMuMDA5OTMgMTMuMzU2MiAzLjc2MjkgMTQgNC42NjA2MSAxNEgxMC4zMzczQzExLjIzNTQgMTQgMTEuOTg4NCAxMy4zNTYyIDEyLjE2MjUgMTIuNDc3MkwxMi45NzM2IDguMDU2MDdDMTMuMDg5IDcuMzIzNTggMTIuODI4NCA2LjUzMjc2IDEyLjEzMzEgNi4wOTM3M0MxMS43MjgzIDUuODMwMTMgMTEuNjQxMiA1LjMzMjMxIDEyLjEzMzEgNS4xMjc5NkMxMi44Mjg0IDQuODY0MzUgMTIuNjk0OCA0IDEyIDRIMTAuMzAwMUg2LjgwMDA1SDIuOTk5OTZDMi4zMDQ2OSA0IDIuMTk4NzggNC44OTMyOCAyLjg5NDUxIDUuMTU2ODlDMy4zODY0MiA1LjMzMjMxIDMuMjk5MzkgNS44MzAxMyAyLjg5NDUxIDYuMTIyNjZaTTguMjAwMDYgNi4yNUM4LjIwMDA2IDUuODE3NjkgOC4wODU3MiA1LjM3NjE1IDcuOTA2MzUgNUw0LjExMDkzIDVDNC4yMDYyNiA1LjIxMzEyIDQuMjQxOSA1LjQzODg5IDQuMjI5MDQgNS42NTUyMUM0LjE5NTIyIDYuMjI0MTIgMy44NDU4NyA2LjY2ODk5IDMuNDgwMTYgNi45MzMyMkwzLjQ1NDkyIDYuOTUxNDZMMy40Mjg1OCA2Ljk2ODFDMy4xMzQwNyA3LjE1NDE0IDIuOTU4MDEgNy41Mzk4OSAzLjAxMDU4IDcuODg3NDlMMy44MTc5NyAxMi4yODg2QzMuOTA1MTMgMTIuNzE1NCA0LjI2MTQ4IDEzIDQuNjYwNjEgMTNIMTAuMzM3M0MxMC43MzcgMTMgMTEuMDkzMiAxMi43MTUzIDExLjE4MDQgMTIuMjg4NkwxMS45ODc0IDcuODg5OEMxMi4wNDggNy40ODI0NyAxMS44OTU0IDcuMTI2MzEgMTEuNTk5MiA2LjkzOTI3TDExLjU4NzUgNi45MzE4NEwxMS41ODc1IDYuOTMxNzZDMTEuMTk0NyA2LjY3NjAyIDEwLjgzMzEgNi4yMjc4NSAxMC43OTg2IDUuNjQ3OThDMTAuNzg0NiA1LjQxMiAxMC44MjY0IDUuMTkzOTcgMTAuOTExMiA1SDkuMDU1MTdDOS4wMTk4NyA1LjE0NjExIDkuMDAwMDYgNS4zMTIwMSA5LjAwMDA2IDUuNUM5LjAwMDA2IDUuOTc0NSA5LjIxNjc5IDYuMzcxMjcgOS40NDM2NyA2Ljc4NjYyQzkuNjkyODQgNy4yNDI3OCA5Ljk1NDI1IDcuNzIxMzYgOS45NTQyNSA4LjM0OTkzQzkuOTU0MjUgOS4yNjk4IDkuNDk4NjggOS44NDIwNSA4LjYyMTg5IDkuODQyMDVDOC4xMzIwNiA5Ljg0MjA1IDcuNTc4MTggOS40NjA5NyA3LjU3ODE4IDguNzU3ODFDNy41NzgxOCA4LjM1Mjc5IDcuNzE1NTggOC4wMTY0NiA3Ljg2MTIxIDcuNjU5OThDOC4wMjU0IDcuMjU4MDYgOC4yMDAwNiA2LjgzMDUxIDguMjAwMDYgNi4yNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFh0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xNCAxMS4wMDAxVjQuMDAwMDZMMSA0LjAwMDA2TDEgMTEuMDAwMUgxNFpNMTUgNC4wMDAwNlYxMS4wMDAxQzE1IDExLjU1MjMgMTQuNTUyMyAxMi4wMDAxIDE0IDEyLjAwMDFIMUMwLjQ0NzcxNSAxMi4wMDAxIDAgMTEuNTUyMyAwIDExLjAwMDFWNC4wMDAwNkMwIDMuNDQ3NzggMC40NDc3MTUgMy4wMDAwNiAxIDMuMDAwMDZIMTRDMTQuNTUyMyAzLjAwMDA2IDE1IDMuNDQ3NzggMTUgNC4wMDAwNlpNMiA1LjI1QzIgNS4xMTE5MyAyLjExMTkzIDUgMi4yNSA1SDUuNzVDNS44ODgwNyA1IDYgNS4xMTE5MyA2IDUuMjVWOS43NUM2IDkuODg4MDcgNS44ODgwNyAxMCA1Ljc1IDEwSDIuMjVDMi4xMTE5MyAxMCAyIDkuODg4MDcgMiA5Ljc1VjUuMjVaTTcuNSA3QzcuMjIzODYgNyA3IDcuMjIzODYgNyA3LjVDNyA3Ljc3NjE0IDcuMjIzODYgOCA3LjUgOEgxMC41QzEwLjc3NjEgOCAxMSA3Ljc3NjE0IDExIDcuNUMxMSA3LjIyMzg2IDEwLjc3NjEgNyAxMC41IDdINy41Wk03IDkuNUM3IDkuMjIzODYgNy4yMjM4NiA5IDcuNSA5SDEyLjVDMTIuNzc2MSA5IDEzIDkuMjIzODYgMTMgOS41QzEzIDkuNzc2MTQgMTIuNzc2MSAxMCAxMi41IDEwSDcuNUM3LjIyMzg2IDEwIDcgOS43NzYxNCA3IDkuNVpNNy41IDVDNy4yMjM4NiA1IDcgNS4yMjM4NiA3IDUuNUM3IDUuNzc2MTQgNy4yMjM4NiA2IDcuNSA2SDExLjVDMTEuNzc2MSA2IDEyIDUuNzc2MTQgMTIgNS41QzEyIDUuMjIzODYgMTEuNzc2MSA1IDExLjUgNUg3LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxRdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi41IDFIMTIuNUMxMy4zMjg0IDEgMTQgMS42NzE1NyAxNCAyLjVWMTIuNUMxNCAxMy4zMjg0IDEzLjMyODQgMTQgMTIuNSAxNEgyLjVDMS42NzE1NyAxNCAxIDEzLjMyODQgMSAxMi41VjIuNUMxIDEuNjcxNTcgMS42NzE1NyAxIDIuNSAxWk0yLjUgMkMyLjIyMzg2IDIgMiAyLjIyMzg2IDIgMi41VjguMzYzNkwzLjY4MTggNi42ODE4QzMuNzY4MDkgNi41OTU1MSAzLjg4NTcyIDYuNTQ3OTcgNC4wMDc3NCA2LjU1MDA3QzQuMTI5NzUgNi41NTIxNiA0LjI0NTY4IDYuNjAzNzIgNC4zMjg5NSA2LjY5MjkzTDcuODczNTUgMTAuNDkwMUwxMC42ODE4IDcuNjgxOEMxMC44NTc1IDcuNTA2MDcgMTEuMTQyNSA3LjUwNjA3IDExLjMxODIgNy42ODE4TDEzIDkuMzYzNlYyLjVDMTMgMi4yMjM4NiAxMi43NzYxIDIgMTIuNSAySDIuNVpNMiAxMi41VjkuNjM2NEwzLjk4ODg3IDcuNjQ3NTNMNy41MzExIDExLjQ0MjFMOC45NDExMyAxM0gyLjVDMi4yMjM4NiAxMyAyIDEyLjc3NjEgMiAxMi41Wk0xMi41IDEzSDEwLjE1NUw4LjQ4MzM2IDExLjE1M0wxMSA4LjYzNjRMMTMgMTAuNjM2NFYxMi41QzEzIDEyLjc3NjEgMTIuNzc2MSAxMyAxMi41IDEzWk02LjY0OTIyIDUuNUM2LjY0OTIyIDUuMDMwMTMgNy4wMzAxMyA0LjY0OTIyIDcuNSA0LjY0OTIyQzcuOTY5ODcgNC42NDkyMiA4LjM1MDc4IDUuMDMwMTMgOC4zNTA3OCA1LjVDOC4zNTA3OCA1Ljk2OTg3IDcuOTY5ODcgNi4zNTA3OCA3LjUgNi4zNTA3OEM3LjAzMDEzIDYuMzUwNzggNi42NDkyMiA1Ljk2OTg3IDYuNjQ5MjIgNS41Wk03LjUgMy43NDkyMkM2LjUzMzA3IDMuNzQ5MjIgNS43NDkyMiA0LjUzMzA3IDUuNzQ5MjIgNS41QzUuNzQ5MjIgNi40NjY5MyA2LjUzMzA3IDcuMjUwNzggNy41IDcuMjUwNzhDOC40NjY5MyA3LjI1MDc4IDkuMjUwNzggNi40NjY5MyA5LjI1MDc4IDUuNUM5LjI1MDc4IDQuNTMzMDcgOC40NjY5MyAzLjc0OTIyIDcuNSAzLjc0OTIyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5OTEgMC44NzY4OTJDMy44NDIyMiAwLjg3Njg5MiAwLjg3NzA3NSAzLjg0MjA0IDAuODc3MDc1IDcuNDk5NzJDMC44NzcwNzUgMTEuMTU3NCAzLjg0MjIyIDE0LjEyMjYgNy40OTk5MSAxNC4xMjI2QzExLjE1NzYgMTQuMTIyNiAxNC4xMjI3IDExLjE1NzQgMTQuMTIyNyA3LjQ5OTcyQzE0LjEyMjcgMy44NDIwNCAxMS4xNTc2IDAuODc2ODkyIDcuNDk5OTEgMC44NzY4OTJaTTEuODI3MDcgNy40OTk3MkMxLjgyNzA3IDQuMzY2NzEgNC4zNjY4OSAxLjgyNjg5IDcuNDk5OTEgMS44MjY4OUMxMC42MzI5IDEuODI2ODkgMTMuMTcyNyA0LjM2NjcxIDEzLjE3MjcgNy40OTk3MkMxMy4xNzI3IDEwLjYzMjcgMTAuNjMyOSAxMy4xNzI2IDcuNDk5OTEgMTMuMTcyNkM0LjM2Njg5IDEzLjE3MjYgMS44MjcwNyAxMC42MzI3IDEuODI3MDcgNy40OTk3MlpNOC4yNDk5MiA0LjQ5OTk5QzguMjQ5OTIgNC45MTQyIDcuOTE0MTMgNS4yNDk5OSA3LjQ5OTkyIDUuMjQ5OTlDNy4wODU3MSA1LjI0OTk5IDYuNzQ5OTIgNC45MTQyIDYuNzQ5OTIgNC40OTk5OUM2Ljc0OTkyIDQuMDg1NzcgNy4wODU3MSAzLjc0OTk5IDcuNDk5OTIgMy43NDk5OUM3LjkxNDEzIDMuNzQ5OTkgOC4yNDk5MiA0LjA4NTc3IDguMjQ5OTIgNC40OTk5OVpNNi4wMDAwMyA1Ljk5OTk5SDYuNTAwMDNINy41MDAwM0M3Ljc3NjE4IDUuOTk5OTkgOC4wMDAwMyA2LjIyMzg0IDguMDAwMDMgNi40OTk5OVY5Ljk5OTk5SDguNTAwMDNIOS4wMDAwM1YxMUg4LjUwMDAzSDcuNTAwMDNINi41MDAwM0g2LjAwMDAzVjkuOTk5OTlINi41MDAwM0g3LjAwMDAzVjYuOTk5OTlINi41MDAwM0g2LjAwMDAzVjUuOTk5OTlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx0bj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNi41IDFDNi4yMjM4NiAxIDYgMS4yMjM4NiA2IDEuNUM2IDEuNzc2MTQgNi4yMjM4NiAyIDYuNSAyQzcuMTI2NzEgMiA3LjQ1NzE4IDIuMjAwMjggNy42NTU2MyAyLjQ3ODEyQzcuODc4MSAyLjc4OTU3IDggMy4yODgzNyA4IDRWMTFDOCAxMS43MTE2IDcuODc4MSAxMi4yMTA0IDcuNjU1NjMgMTIuNTIxOUM3LjQ1NzE4IDEyLjc5OTcgNy4xMjY3MSAxMyA2LjUgMTNDNi4yMjM4NiAxMyA2IDEzLjIyMzkgNiAxMy41QzYgMTMuNzc2MSA2LjIyMzg2IDE0IDYuNSAxNEM3LjM3MzI5IDE0IDguMDQyODIgMTMuNzAwMyA4LjQ2OTM3IDEzLjEwMzFDOC40Nzk3NiAxMy4wODg2IDguNDg5OTcgMTMuMDczOSA4LjUgMTMuMDU5MUM4LjUxMDAzIDEzLjA3MzkgOC41MjAyNCAxMy4wODg2IDguNTMwNjMgMTMuMTAzMUM4Ljk1NzE4IDEzLjcwMDMgOS42MjY3MSAxNCAxMC41IDE0QzEwLjc3NjEgMTQgMTEgMTMuNzc2MSAxMSAxMy41QzExIDEzLjIyMzkgMTAuNzc2MSAxMyAxMC41IDEzQzkuODczMjkgMTMgOS41NDI4MiAxMi43OTk3IDkuMzQ0MzcgMTIuNTIxOUM5LjEyMTkgMTIuMjEwNCA5IDExLjcxMTYgOSAxMVY0QzkgMy4yODgzNyA5LjEyMTkgMi43ODk1NyA5LjM0NDM3IDIuNDc4MTJDOS41NDI4MiAyLjIwMDI4IDkuODczMjkgMiAxMC41IDJDMTAuNzc2MSAyIDExIDEuNzc2MTQgMTEgMS41QzExIDEuMjIzODYgMTAuNzc2MSAxIDEwLjUgMUM5LjYyNjcxIDEgOC45NTcxOCAxLjI5OTcyIDguNTMwNjMgMS44OTY4OEM4LjUyMDI0IDEuOTExNDMgOC41MTAwMyAxLjkyNjExIDguNSAxLjk0MDlDOC40ODk5NyAxLjkyNjExIDguNDc5NzYgMS45MTE0MyA4LjQ2OTM3IDEuODk2ODhDOC4wNDI4MiAxLjI5OTcyIDcuMzczMjkgMSA2LjUgMVpNMTQgNUgxMVY0SDE0QzE0LjU1MjMgNCAxNSA0LjQ0NzcyIDE1IDVWMTBDMTUgMTAuNTUyMyAxNC41NTIzIDExIDE0IDExSDExVjEwSDE0VjVaTTYgNFY1SDFMMSAxMEg2VjExSDFDMC40NDc3MTUgMTEgMCAxMC41NTIzIDAgMTBWNUMwIDQuNDQ3NzIgMC40NDc3MTUgNCAxIDRINlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG5uPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjQ5OTk4IDAuNUM1LjQ5OTk4IDAuMjIzODU4IDUuNzIzODMgMCA1Ljk5OTk4IDBINy40OTk5OEg4Ljk5OTk4QzkuMjc2MTIgMCA5LjQ5OTk4IDAuMjIzODU4IDkuNDk5OTggMC41QzkuNDk5OTggMC43NzYxNDIgOS4yNzYxMiAxIDguOTk5OTggMUg3Ljk5OTk4VjIuMTE5MjJDOS4wOTgzMiAyLjIwNDA5IDEwLjExOSAyLjU2NjIyIDEwLjk5MiAzLjEzNTcyQzExLjAxMTYgMy4xMDg1MSAxMS4wMzM2IDMuMDgyNTIgMTEuMDU4IDMuMDU4MDZMMTIuMDU4IDIuMDU4MDZDMTIuMzAyMSAxLjgxMzk4IDEyLjY5NzggMS44MTM5OCAxMi45NDE5IDIuMDU4MDZDMTMuMTg2IDIuMzAyMTQgMTMuMTg2IDIuNjk3ODYgMTIuOTQxOSAyLjk0MTk0TDExLjk2NyAzLjkxNjgyQzEzLjE1OTUgNS4wNzkyNSAxMy45IDYuNzAzMTQgMTMuOSA4LjQ5OTk4QzEzLjkgMTIuMDM0NiAxMS4wMzQ2IDE0LjkgNy40OTk5OCAxNC45QzMuOTY1MzUgMTQuOSAxLjA5OTk4IDEyLjAzNDYgMS4wOTk5OCA4LjQ5OTk4QzEuMDk5OTggNS4xMzM2MSAzLjY5OTA0IDIuMzc0MyA2Ljk5OTk4IDIuMTE5MjJWMUg1Ljk5OTk4QzUuNzIzODMgMSA1LjQ5OTk4IDAuNzc2MTQyIDUuNDk5OTggMC41Wk0yLjA5OTk4IDguNDk5OThDMi4wOTk5OCA1LjUxNzY0IDQuNTE3NjQgMy4wOTk5OCA3LjQ5OTk4IDMuMDk5OThDMTAuNDgyMyAzLjA5OTk4IDEyLjkgNS41MTc2NCAxMi45IDguNDk5OThDMTIuOSAxMS40ODIzIDEwLjQ4MjMgMTMuOSA3LjQ5OTk4IDEzLjlDNC41MTc2NCAxMy45IDIuMDk5OTggMTEuNDgyMyAyLjA5OTk4IDguNDk5OThaTTcuNDk5OTggOC40OTk5OFY0LjA5OTk4QzUuMDY5OTIgNC4wOTk5OCAzLjA5OTk4IDYuMDY5OTIgMy4wOTk5OCA4LjQ5OTk4QzMuMDk5OTggMTAuOTMgNS4wNjk5MiAxMi45IDcuNDk5OTggMTIuOUM4LjcxNSAxMi45IDkuODE1IDEyLjQwNzUgMTAuNjExMiAxMS42MTEyTDcuNDk5OTggOC40OTk5OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHJuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03Ljc1NDMyIDAuODE5NTM3QzcuNTk3NDIgMC43MjY4MjEgNy40MDI1IDAuNzI2ODIxIDcuMjQ1NTkgMC44MTk1MzdMMS43NDU1OSA0LjA2OTU0QzEuNTkzMzYgNC4xNTk0OSAxLjQ5OTk2IDQuMzIzMTcgMS40OTk5NiA0LjVDMS40OTk5NiA0LjY3NjgzIDEuNTkzMzYgNC44NDA1MSAxLjc0NTU5IDQuOTMwNDZMNy4yNDU1OSA4LjE4MDQ2QzcuNDAyNSA4LjI3MzE4IDcuNTk3NDIgOC4yNzMxOCA3Ljc1NDMyIDguMTgwNDZMMTMuMjU0MyA0LjkzMDQ2QzEzLjQwNjYgNC44NDA1MSAxMy41IDQuNjc2ODMgMTMuNSA0LjVDMTMuNSA0LjMyMzE3IDEzLjQwNjYgNC4xNTk0OSAxMy4yNTQzIDQuMDY5NTRMNy43NTQzMiAwLjgxOTUzN1pNNy40OTk5NiA3LjE2OTIzTDIuOTgyOCA0LjVMNy40OTk5NiAxLjgzMDc3TDEyLjAxNzEgNC41TDcuNDk5OTYgNy4xNjkyM1pNMS41Njk1IDcuNDk1NjRDMS43MDk5OCA3LjI1NzkgMi4wMTY1OSA3LjE3OTA2IDIuMjU0MzIgNy4zMTk1NEw3LjQ5OTk2IDEwLjQxOTJMMTIuNzQ1NiA3LjMxOTU0QzEyLjk4MzMgNy4xNzkwNiAxMy4yODk5IDcuMjU3OSAxMy40MzA0IDcuNDk1NjRDMTMuNTcwOSA3LjczMzM3IDEzLjQ5MjEgOC4wMzk5OCAxMy4yNTQzIDguMTgwNDZMNy43NTQzMiAxMS40MzA1QzcuNTk3NDIgMTEuNTIzMiA3LjQwMjUgMTEuNTIzMiA3LjI0NTU5IDExLjQzMDVMMS43NDU1OSA4LjE4MDQ2QzEuNTA3ODYgOC4wMzk5OCAxLjQyOTAxIDcuNzMzMzcgMS41Njk1IDcuNDk1NjRaTTEuNTY5NDkgMTAuNDk1NkMxLjcwOTk4IDEwLjI1NzkgMi4wMTY1OCAxMC4xNzkxIDIuMjU0MzIgMTAuMzE5NUw3LjQ5OTk2IDEzLjQxOTJMMTIuNzQ1NiAxMC4zMTk1QzEyLjk4MzMgMTAuMTc5MSAxMy4yODk5IDEwLjI1NzkgMTMuNDMwNCAxMC40OTU2QzEzLjU3MDkgMTAuNzMzNCAxMy40OTIxIDExLjA0IDEzLjI1NDMgMTEuMTgwNUw3Ljc1NDMyIDE0LjQzMDVDNy41OTc0MiAxNC41MjMyIDcuNDAyNSAxNC41MjMyIDcuMjQ1NTkgMTQuNDMwNUwxLjc0NTU5IDExLjE4MDVDMS41MDc4NSAxMS4wNCAxLjQyOTAxIDEwLjczMzQgMS41Njk0OSAxMC40OTU2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sb249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTkgMkg2VjEzSDlWMlpNMTAgMlYxM0gxMi41QzEyLjc3NjEgMTMgMTMgMTIuNzc2MSAxMyAxMi41VjIuNUMxMyAyLjIyMzg2IDEyLjc3NjEgMiAxMi41IDJIMTBaTTIuNSAySDVWMTNIMi41QzIuMjIzODYgMTMgMiAxMi43NzYxIDIgMTIuNVYyLjVDMiAyLjIyMzg2IDIuMjIzODYgMiAyLjUgMlpNMi41IDFDMS42NzE1NyAxIDEgMS42NzE1NyAxIDIuNVYxMi41QzEgMTMuMzI4NCAxLjY3MTU3IDE0IDIuNSAxNEgxMi41QzEzLjMyODQgMTQgMTQgMTMuMzI4NCAxNCAxMi41VjIuNUMxNCAxLjY3MTU3IDEzLjMyODQgMSAxMi41IDFIMi41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sYW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNjg5NzkgMi43NUMzLjg5NjY3IDIuNzQ5NzkgNC4wODIzMiAyLjg3NzAxIDQuMTU2NzkgMy4wNzAwM0w3LjM2NjYyIDExLjM5QzcuNDY2MDIgMTEuNjQ3NyA3LjMzNzc0IDExLjkzNzEgNy4wODAxIDEyLjAzNjVDNi44MjI0NyAxMi4xMzU5IDYuNTMzMDQgMTIuMDA3NiA2LjQzMzY1IDExLjc1TDUuMzgyNSA5LjAyNTM3SDIuMDExMzNMMC45NjY5OTIgMTEuNzQ5QzAuODY4MTI4IDEyLjAwNjggMC41Nzg5NjQgMTIuMTM1NyAwLjMyMTEyNiAxMi4wMzY5QzAuMDYzMjg3OCAxMS45MzggLTAuMDY1NTg2NCAxMS42NDg4IDAuMDMzMjc3NCAxMS4zOTFMMy4yMjM0NCAzLjA3MDk5QzMuMjk3NTEgMi44Nzc4MiAzLjQ4MjkgMi43NTAyMSAzLjY4OTc5IDIuNzVaTTMuNjkxNzQgNC42NDI4NEw1LjA1NDU4IDguMTc1MzdIMi4zMzcyNEwzLjY5MTc0IDQuNjQyODRaTTEwLjg5ODkgNS4yMDcwM0M5LjI1ODE4IDUuMjA3MDMgOC4wMDkxNSA2LjY4NTY5IDguMDA5MTUgOC42MDk3MkM4LjAwOTE1IDEwLjYzMzcgOS4zNTgxOCAxMi4wMTI0IDEwLjg5ODkgMTIuMDEyNEMxMS43MjE0IDEyLjAxMjQgMTIuNTc0NCAxMS42NjkyIDEzLjE1NDMgMTEuMDIxOVYxMS41M0MxMy4xNTQzIDExLjc3ODUgMTMuMzU1NyAxMS45OCAxMy42MDQzIDExLjk4QzEzLjg1MjggMTEuOTggMTQuMDU0MyAxMS43Nzg1IDE0LjA1NDMgMTEuNTNWNS43MkMxNC4wNTQzIDUuNDcxNDcgMTMuODUyOCA1LjI3IDEzLjYwNDMgNS4yN0MxMy4zNTU3IDUuMjcgMTMuMTU0MyA1LjQ3MTQ3IDEzLjE1NDMgNS43MlY2LjIyMzE3QzEyLjYwNTQgNS42MDA5NSAxMS43OTI0IDUuMjA3MDMgMTAuODk4OSA1LjIwNzAzWk0xMy4xNTQzIDkuNzk4MjNWNy4zMDE5NUMxMi43NjM5IDYuNTgxMDEgMTEuOTQxNCA2LjA1NzU3IDExLjA4NjggNi4wNTc1N0MxMC4xMDg4IDYuMDU3NTcgOS4wMzUwMyA2Ljk2NTgxIDkuMDM1MDMgOC42MDk1NUM5LjAzNTAzIDEwLjE1MzMgMTAuMDA4OCAxMS4xNjE1IDExLjA4NjggMTEuMTYxNUMxMS45NzAxIDExLjE2MTUgMTIuNzcxOSAxMC40OTUyIDEzLjE1NDMgOS43OTgyM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGxuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjY5ODk5IDUuMjA3MDNDMi4wNTgyMyA1LjIwNzAzIDAuODA5MjA0IDYuNjg1NjkgMC44MDkyMDQgOC42MDk3MkMwLjgwOTIwNCAxMC42MzM3IDIuMTU4MjMgMTIuMDEyNCAzLjY5ODk5IDEyLjAxMjRDNC41MjEyNiAxMi4wMTI0IDUuMzc0MDIgMTEuNjY5MyA1Ljk1MzkgMTEuMDIyM1YxMS41M0M1Ljk1MzkgMTEuNzc4NSA2LjE1NTM3IDExLjk4IDYuNDAzOSAxMS45OEM2LjY1MjQzIDExLjk4IDYuODUzOSAxMS43Nzg1IDYuODUzOSAxMS41M1Y1LjcyMDAxQzYuODUzOSA1LjQ3MTQ5IDYuNjUyNDMgNS4yNzAwMSA2LjQwMzkgNS4yNzAwMUM2LjE1NTM3IDUuMjcwMDEgNS45NTM5IDUuNDcxNDkgNS45NTM5IDUuNzIwMDFWNi4yMjI2OUM1LjQwNTA2IDUuNjAwNzUgNC41OTIxOCA1LjIwNzAzIDMuNjk4OTkgNS4yMDcwM1pNNS45NTM5IDkuNzk5VjcuMzAxMTdDNS41NjMzOSA2LjU4MDY0IDQuNzQxMTggNi4wNTc1NyAzLjg4NjggNi4wNTc1N0MyLjkwODkgNi4wNTc1NyAxLjgzNTA4IDYuOTY1ODEgMS44MzUwOCA4LjYwOTU1QzEuODM1MDggMTAuMTUzMyAyLjgwODg5IDExLjE2MTUgMy44ODY4IDExLjE2MTVDNC43Njk4NCAxMS4xNjE1IDUuNTcxNDEgMTAuNDk1NyA1Ljk1MzkgOS43OTlaTTEwLjc5OSA1LjIwNzAzQzkuMTU4MjMgNS4yMDcwMyA3LjkwOTIgNi42ODU2OSA3LjkwOTIgOC42MDk3MkM3LjkwOTIgMTAuNjMzNyA5LjI1ODIzIDEyLjAxMjQgMTAuNzk5IDEyLjAxMjRDMTEuNjIxNSAxMi4wMTI0IDEyLjQ3NDQgMTEuNjY5MiAxMy4wNTQzIDExLjAyMThWMTEuNTNDMTMuMDU0MyAxMS43Nzg1IDEzLjI1NTggMTEuOTggMTMuNTA0MyAxMS45OEMxMy43NTI5IDExLjk4IDEzLjk1NDMgMTEuNzc4NSAxMy45NTQzIDExLjUzVjUuNzJDMTMuOTU0MyA1LjQ3MTQ3IDEzLjc1MjkgNS4yNyAxMy41MDQzIDUuMjdDMTMuMjU1OCA1LjI3IDEzLjA1NDMgNS40NzE0NyAxMy4wNTQzIDUuNzJWNi4yMjMxOEMxMi41MDU1IDUuNjAwOTUgMTEuNjkyNCA1LjIwNzAzIDEwLjc5OSA1LjIwNzAzWk0xMy4wNTQzIDkuNzk4MjJWNy4zMDE5NkMxMi42NjQgNi41ODEwMiAxMS44NDE1IDYuMDU3NTcgMTAuOTg2OCA2LjA1NzU3QzEwLjAwODkgNi4wNTc1NyA4LjkzNTA4IDYuOTY1ODEgOC45MzUwOCA4LjYwOTU1QzguOTM1MDggMTAuMTUzMyA5LjkwODg5IDExLjE2MTUgMTAuOTg2OCAxMS4xNjE1QzExLjg3MDIgMTEuMTYxNSAxMi42NzIgMTAuNDk1MiAxMy4wNTQzIDkuNzk4MjJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxzbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTEuMjg5NSAyLjc1QzExLjQ5NjQgMi43NDk3OSAxMS42ODIxIDIuODc3MDEgMTEuNzU2NSAzLjA3MDAzTDE0Ljk2NjQgMTEuMzlDMTUuMDY1NyAxMS42NDc3IDE0LjkzNzUgMTEuOTM3MSAxNC42Nzk4IDEyLjAzNjVDMTQuNDIyMiAxMi4xMzU5IDE0LjEzMjggMTIuMDA3NiAxNC4wMzM0IDExLjc1TDEyLjk4MjIgOS4wMjUzN0g5LjYxMTA2TDguNTY2NzIgMTEuNzQ5QzguNDY3ODYgMTIuMDA2OCA4LjE3ODcgMTIuMTM1NyA3LjkyMDg2IDEyLjAzNjlDNy42NjMwMiAxMS45MzggNy41MzQxNCAxMS42NDg4IDcuNjMzMDEgMTEuMzkxTDEwLjgyMzIgMy4wNzA5OUMxMC44OTcyIDIuODc3ODIgMTEuMDgyNiAyLjc1MDIxIDExLjI4OTUgMi43NVpNMTEuMjkxNSA0LjY0Mjg0TDEyLjY1NDMgOC4xNzUzN0g5LjkzNjk4TDExLjI5MTUgNC42NDI4NFpNMi44OTg5NSA1LjIwNzAzQzEuMjU4MTggNS4yMDcwMyAwLjAwOTE1NTI3IDYuNjg1NjkgMC4wMDkxNTUyNyA4LjYwOTcyQzAuMDA5MTU1MjcgMTAuNjMzNyAxLjM1ODE4IDEyLjAxMjQgMi44OTg5NSAxMi4wMTI0QzMuNzIxNDEgMTIuMDEyNCA0LjU3NDM4IDExLjY2OTIgNS4xNTQyNyAxMS4wMjE5VjExLjUzQzUuMTU0MjcgMTEuNzc4NSA1LjM1NTc0IDExLjk4IDUuNjA0MjcgMTEuOThDNS44NTI4IDExLjk4IDYuMDU0MjcgMTEuNzc4NSA2LjA1NDI3IDExLjUzVjUuNzJDNi4wNTQyNyA1LjQ3MTQ3IDUuODUyOCA1LjI3IDUuNjA0MjcgNS4yN0M1LjM1NTc0IDUuMjcgNS4xNTQyNyA1LjQ3MTQ3IDUuMTU0MjcgNS43MlY2LjIyMzE3QzQuNjA1NDMgNS42MDA5NSAzLjc5MjM2IDUuMjA3MDMgMi44OTg5NSA1LjIwNzAzWk01LjE1NDI3IDkuNzk4MjNWNy4zMDE5NUM0Ljc2MzkzIDYuNTgxMDEgMy45NDE0NCA2LjA1NzU3IDMuMDg2NzUgNi4wNTc1N0MyLjEwODg1IDYuMDU3NTcgMS4wMzUwMyA2Ljk2NTgxIDEuMDM1MDMgOC42MDk1NUMxLjAzNTAzIDEwLjE1MzMgMi4wMDg4NSAxMS4xNjE1IDMuMDg2NzUgMTEuMTYxNUMzLjk3MDExIDExLjE2MTUgNC43NzE5NSAxMC40OTUyIDUuMTU0MjcgOS43OTgyM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGNuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjYyNTUgMi43NUMzLjgzNDc4IDIuNzUgNC4wMjE5MiAyLjg4MDM0IDQuMDk0NDggMy4wNzY2NEw3LjE2OTg1IDExLjM5NjJDNy4yNjU2IDExLjY1NTIgNy4xMzMyNCAxMS45NDI4IDYuODc0MjMgMTIuMDM4NkM2LjYxNTIyIDEyLjEzNDMgNi4zMjc2MyAxMi4wMDIgNi4yMzE4OCAxMS43NDI5TDUuMjIzODcgOS4wMTYwM0gyLjAyNzEyTDEuMDE5MTEgMTEuNzQyOUMwLjkyMzM2MiAxMi4wMDIgMC42MzU3NzQgMTIuMTM0MyAwLjM3Njc2MiAxMi4wMzg2QzAuMTE3NzQ5IDExLjk0MjggLTAuMDE0NjA1MiAxMS42NTUyIDAuMDgxMTQwMSAxMS4zOTYyTDMuMTU2NTEgMy4wNzY2NEMzLjIyOTA4IDIuODgwMzQgMy40MTYyMSAyLjc1IDMuNjI1NSAyLjc1Wk0zLjYyNTUgNC42OTIwN0w0LjkwOTY2IDguMTY2MDNIMi4zNDEzM0wzLjYyNTUgNC42OTIwN1pNMTEuMzcxOSAyLjc1QzExLjU4MTEgMi43NSAxMS43NjgzIDIuODgwMzQgMTEuODQwOCAzLjA3NjY0TDE0LjkxNjIgMTEuMzk2MkMxNS4wMTIgMTEuNjU1MiAxNC44Nzk2IDExLjk0MjggMTQuNjIwNiAxMi4wMzg2QzE0LjM2MTYgMTIuMTM0MyAxNC4wNzQgMTIuMDAyIDEzLjk3ODIgMTEuNzQyOUwxMi45NzAyIDkuMDE2MDNIOS43NzM0OEw4Ljc2NTQ3IDExLjc0MjlDOC42Njk3MiAxMi4wMDIgOC4zODIxMyAxMi4xMzQzIDguMTIzMTIgMTIuMDM4NkM3Ljg2NDExIDExLjk0MjggNy43MzE3NSAxMS42NTUyIDcuODI3NSAxMS4zOTYyTDEwLjkwMjkgMy4wNzY2NEMxMC45NzU0IDIuODgwMzQgMTEuMTYyNiAyLjc1IDExLjM3MTkgMi43NVpNMTEuMzcxOSA0LjY5MjA3TDEyLjY1NiA4LjE2NjAzSDEwLjA4NzdMMTEuMzcxOSA0LjY5MjA3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuNTUyOTMgMC45OTk5NjlDNC43NTI5NSAwLjk5OTk2OSA0LjkzMzcyIDEuMTE5MTcgNS4wMTI1IDEuMzAzMDFMOC4wMTEwNiA4LjI5OTgyQzguMTE5ODQgOC41NTM2MyA4LjAwMjI2IDguODQ3NTcgNy43NDg0NCA4Ljk1NjM1QzcuNDk0NjMgOS4wNjUxMiA3LjIwMDY5IDguOTQ3NTQgNy4wOTE5MSA4LjY5MzczTDYuMTE2MTMgNi40MTY4NUgyLjk4OTczTDIuMDEzOTUgOC42OTM3M0MxLjkwNTE3IDguOTQ3NTQgMS42MTEyMyA5LjA2NTEyIDEuMzU3NDIgOC45NTYzNUMxLjEwMzYgOC44NDc1NyAwLjk4NjAyMyA4LjU1MzYzIDEuMDk0OCA4LjI5OTgyTDQuMDkzMzYgMS4zMDMwMUM0LjE3MjE0IDEuMTE5MTcgNC4zNTI5MSAwLjk5OTk2OSA0LjU1MjkzIDAuOTk5OTY5Wk00LjU1MjkzIDIuNzY5MjlMNS43NTE4NiA1LjU2Njg1SDMuMzU0TDQuNTUyOTMgMi43NjkyOVpNMTEuMDU2MiA5LjAwMjE0QzExLjI2MTcgOS4wMDIxNCAxMS40NDYzIDguODc2MzMgMTEuNTIxNSA4LjY4NTAyTDE0LjI3MzMgMS42ODI5OUMxNC4zNzQzIDEuNDI1OTggMTQuMjQ3OCAxLjEzNTc1IDEzLjk5MDggMS4wMzQ3NUMxMy43MzM4IDAuOTMzNzQ3IDEzLjQ0MzYgMS4wNjAyMSAxMy4zNDI2IDEuMzE3MjJMMTEuMDU2MiA3LjEzNTE0TDguNzY5NzMgMS4zMTcyMkM4LjY2ODczIDEuMDYwMjEgOC4zNzg1IDAuOTMzNzQ3IDguMTIxNSAxLjAzNDc1QzcuODY0NDkgMS4xMzU3NSA3LjczODAyIDEuNDI1OTggNy44MzkwMiAxLjY4Mjk5TDEwLjU5MDggOC42ODUwMkMxMC42NjYgOC44NzYzMyAxMC44NTA2IDkuMDAyMTQgMTEuMDU2MiA5LjAwMjE0Wk0xNC45NTM3IDEyLjQ5OTlDMTQuOTUzNyAxMi42MDYgMTQuOTExNSAxMi43MDc3IDE0LjgzNjUgMTIuNzgyOEwxMi44MzY1IDE0Ljc4MjhDMTIuNjgwMyAxNC45MzkgMTIuNDI3MSAxNC45MzkgMTIuMjcwOCAxNC43ODI4QzEyLjExNDYgMTQuNjI2NSAxMi4xMTQ2IDE0LjM3MzMgMTIuMjcwOCAxNC4yMTcxTDEzLjU4OCAxMi44OTk5SDEuNTE5MzdMMi44MzY1MyAxNC4yMTcxQzIuOTkyNzQgMTQuMzczMyAyLjk5Mjc0IDE0LjYyNjUgMi44MzY1MyAxNC43ODI4QzIuNjgwMzIgMTQuOTM5IDIuNDI3MDUgMTQuOTM5IDIuMjcwODQgMTQuNzgyOEwwLjI3MDg0MyAxMi43ODI4QzAuMTk1ODI4IDEyLjcwNzcgMC4xNTM2ODcgMTIuNjA2IDAuMTUzNjg3IDEyLjQ5OTlDMC4xNTM2ODcgMTIuMzkzOCAwLjE5NTgyOCAxMi4yOTIxIDAuMjcwODQzIDEyLjIxNzFMMi4yNzA4NCAxMC4yMTcxQzIuNDI3MDUgMTAuMDYwOSAyLjY4MDMyIDEwLjA2MDkgMi44MzY1MyAxMC4yMTcxQzIuOTkyNzQgMTAuMzczMyAyLjk5Mjc0IDEwLjYyNjUgMi44MzY1MyAxMC43ODI4TDEuNTE5MzcgMTIuMDk5OUwxMy41ODggMTIuMDk5OUwxMi4yNzA4IDEwLjc4MjhDMTIuMTE0NiAxMC42MjY1IDEyLjExNDYgMTAuMzczMyAxMi4yNzA4IDEwLjIxNzFDMTIuNDI3MSAxMC4wNjA5IDEyLjY4MDMgMTAuMDYwOSAxMi44MzY1IDEwLjIxNzFMMTQuODM2NSAxMi4yMTcxQzE0LjkxMTUgMTIuMjkyMSAxNC45NTM3IDEyLjM5MzggMTQuOTUzNyAxMi40OTk5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTguNjk2NjYgMC4wNDAzNTRDOC45MDg1OSAwLjEzMTAzOCA5LjAzMTA1IDAuMzU0ODU2IDguOTkzMTUgMC41ODIyMzVMOC4wOTAxOSA2LjAwMDAxSDEyLjQ5OTlDMTIuNjg5MyA2LjAwMDAxIDEyLjg2MjUgNi4xMDcwMSAxMi45NDcyIDYuMjc2NEMxMy4wMzE4IDYuNDQ1NzkgMTMuMDEzNiA2LjY0ODUgMTIuODk5OSA2LjhMNi44OTk5NyAxNC44QzYuNzYxNjYgMTQuOTg0NCA2LjUxNTIgMTUuMDUwMyA2LjMwMzI3IDE0Ljk1OTZDNi4wOTEzNCAxNC44NjkgNS45Njg4OCAxNC42NDUxIDYuMDA2NzggMTQuNDE3OEw2LjkwOTc0IDguOTk5OTlIMi40OTk5OUMyLjMxMDYxIDguOTk5OTkgMi4xMzc0NyA4Ljg5Mjk5IDIuMDUyNzggOC43MjM2QzEuOTY4MDggOC41NTQyMSAxLjk4NjM2IDguMzUxNSAyLjA5OTk5IDguMkw4LjA5OTk2IDAuMjAwMDM3QzguMjM4MjcgMC4wMTU2MjU1IDguNDg0NzMgLTAuMDUwMzMwMSA4LjY5NjY2IDAuMDQwMzU0Wk0zLjQ5OTk5IDhINy40OTk5NkM3LjY0Njk0IDggNy43ODY0NyA4LjA2NDY2IDcuODgxNDcgOC4xNzY4MUM3Ljk3NjQ3IDguMjg4OTUgOC4wMTczMiA4LjQzNzIyIDcuOTkzMTYgOC41ODIxOUw3LjMzMDI2IDEyLjU1OTZMMTEuNDk5OSA3SDcuNDk5OTZDNy4zNTI5OSA3IDcuMjEzNDYgNi45MzUzNCA3LjExODQ2IDYuODIzMTlDNy4wMjM0NiA2LjcxMTA1IDYuOTgyNjEgNi41NjI3OCA3LjAwNjc3IDYuNDE3ODFMNy42Njk2NyAyLjQ0MDQyTDMuNDk5OTkgOFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHBuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjc4MjMzIDIuMjE3MTNDMy43MDczMiAyLjE0MjEyIDMuNjA1NTcgMi4wOTk5OCAzLjQ5OTQ5IDIuMDk5OThDMy4zOTM0IDIuMDk5OTggMy4yOTE2NiAyLjE0MjEyIDMuMjE2NjQgMi4yMTcxM0wxLjIxNjY0IDQuMjE3MTNDMS4wNjA0NCA0LjM3MzM0IDEuMDYwNDQgNC42MjY2MSAxLjIxNjY0IDQuNzgyODJDMS4zNzI4NSA0LjkzOTAzIDEuNjI2MTIgNC45MzkwMyAxLjc4MjMzIDQuNzgyODJMMy4wOTk0OSAzLjQ2NTY2TDMuMDk5NDkgMTEuNTM0M0wxLjc4MjMzIDEwLjIxNzFDMS42MjYxMiAxMC4wNjA5IDEuMzcyODUgMTAuMDYwOSAxLjIxNjY0IDEwLjIxNzFDMS4wNjA0MyAxMC4zNzMzIDEuMDYwNDMgMTAuNjI2NiAxLjIxNjY0IDEwLjc4MjhMMy4yMTY2NCAxMi43ODI4QzMuMjkxNjYgMTIuODU3OCAzLjM5MzQgMTIuOSAzLjQ5OTQ5IDEyLjlDMy42MDU1NyAxMi45IDMuNzA3MzEgMTIuODU3OCAzLjc4MjMzIDEyLjc4MjhMNS43ODIzMyAxMC43ODI4QzUuOTM4NTQgMTAuNjI2NiA1LjkzODU0IDEwLjM3MzMgNS43ODIzMyAxMC4yMTcxQzUuNjI2MTIgMTAuMDYwOSA1LjM3Mjg1IDEwLjA2MDkgNS4yMTY2NCAxMC4yMTcxTDMuODk5NDkgMTEuNTM0M0wzLjg5OTQ5IDMuNDY1NjZMNS4yMTY2NCA0Ljc4MjgyQzUuMzcyODUgNC45MzkwMyA1LjYyNjEyIDQuOTM5MDMgNS43ODIzMyA0Ljc4MjgyQzUuOTM4NTQgNC42MjY2MSA1LjkzODU0IDQuMzczMzQgNS43ODIzMyA0LjIxNzEzTDMuNzgyMzMgMi4yMTcxM1pNOC40OTk5OCAzLjk5OTk3QzguMjIzODMgMy45OTk5NyA3Ljk5OTk4IDQuMjIzODIgNy45OTk5OCA0LjQ5OTk3QzcuOTk5OTggNC43NzYxMSA4LjIyMzgzIDQuOTk5OTcgOC40OTk5OCA0Ljk5OTk3SDE0LjVDMTQuNzc2MSA0Ljk5OTk3IDE1IDQuNzc2MTEgMTUgNC40OTk5N0MxNSA0LjIyMzgyIDE0Ljc3NjEgMy45OTk5NyAxNC41IDMuOTk5OTdIOC40OTk5OFpNNy45OTk5OCA3LjQ5OTk3QzcuOTk5OTggNy4yMjM4MiA4LjIyMzgzIDYuOTk5OTcgOC40OTk5OCA2Ljk5OTk3SDE0LjVDMTQuNzc2MSA2Ljk5OTk3IDE1IDcuMjIzODIgMTUgNy40OTk5N0MxNSA3Ljc3NjExIDE0Ljc3NjEgNy45OTk5NyAxNC41IDcuOTk5OTdIOC40OTk5OEM4LjIyMzgzIDcuOTk5OTcgNy45OTk5OCA3Ljc3NjExIDcuOTk5OTggNy40OTk5N1pNOC40OTk5OCA5Ljk5OTk3QzguMjIzODMgOS45OTk5NyA3Ljk5OTk4IDEwLjIyMzggNy45OTk5OCAxMC41QzcuOTk5OTggMTAuNzc2MSA4LjIyMzgzIDExIDguNDk5OTggMTFIMTQuNUMxNC43NzYxIDExIDE1IDEwLjc3NjEgMTUgMTAuNUMxNSAxMC4yMjM4IDE0Ljc3NjEgOS45OTk5NyAxNC41IDkuOTk5OTdIOC40OTk5OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGZuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjYyNDcxIDQuMDAwMDFMNC41NjQwMiA0LjAwMDAxQzQuMDQxMzQgMy45OTk5MyAzLjcwNjg3IDMuOTk5ODggMy40MTgyIDQuMDU1QzIuMjM3OSA0LjI4MDM5IDEuMjk4NDYgNS4xNzA1MyAxLjA1ODE1IDYuMzMwMzVDMC45OTk1MzggNi42MTMyMSAwLjk5OTYwNCA2LjkzOTk4IDAuOTk5NzAzIDcuNDM2ODlMMC45OTk3MTEgNy41MDAwMUwwLjk5OTcwMyA3LjU2MzEzQzAuOTk5NjA0IDguMDYwMDQgMC45OTk1MzggOC4zODY4MSAxLjA1ODE1IDguNjY5NjdDMS4yOTg0NiA5LjgyOTUgMi4yMzc5IDEwLjcxOTYgMy40MTgyIDEwLjk0NUMzLjcwNjg4IDExLjAwMDEgNC4wNDEzNSAxMS4wMDAxIDQuNTY0MDMgMTFMNC42MjQ3MSAxMUg1LjQ5OTcxQzUuNzc1ODUgMTEgNS45OTk3MSAxMC43NzYyIDUuOTk5NzEgMTAuNUM1Ljk5OTcxIDEwLjIyMzkgNS43NzU4NSAxMCA1LjQ5OTcxIDEwSDQuNjI0NzFDNC4wMjA4NCAxMCAzLjc4OTA3IDkuOTk3NzcgMy42MDU3NyA5Ljk2Mjc3QzIuODAyNjIgOS44MDk0IDIuMTkxNTcgOS4yMTEwOCAyLjAzNzM1IDguNDY2NzhDMi4wMDIzMyA4LjI5Nzc4IDEuOTk5NzEgOC4wODI1MSAxLjk5OTcxIDcuNTAwMDFDMS45OTk3MSA2LjkxNzUyIDIuMDAyMzMgNi43MDIyNSAyLjAzNzM1IDYuNTMzMjRDMi4xOTE1NyA1Ljc4ODk1IDIuODAyNjIgNS4xOTA2MiAzLjYwNTc3IDUuMDM3MjVDMy43ODkwNyA1LjAwMjI1IDQuMDIwODQgNS4wMDAwMSA0LjYyNDcxIDUuMDAwMDFINS40OTk3MUM1Ljc3NTg1IDUuMDAwMDEgNS45OTk3MSA0Ljc3NjE1IDUuOTk5NzEgNC41MDAwMUM1Ljk5OTcxIDQuMjIzODcgNS43NzU4NSA0LjAwMDAxIDUuNDk5NzEgNC4wMDAwMUg0LjYyNDcxWk0xMC4zNzQ3IDUuMDAwMDFDMTAuOTc4NiA1LjAwMDAxIDExLjIxMDQgNS4wMDIyNSAxMS4zOTM3IDUuMDM3MjVDMTIuMTk2OCA1LjE5MDYyIDEyLjgwNzkgNS43ODg5NSAxMi45NjIxIDYuNTMzMjRDMTIuOTk3MSA2LjcwMjI1IDEyLjk5OTcgNi45MTc1MiAxMi45OTk3IDcuNTAwMDFDMTIuOTk5NyA4LjA4MjUxIDEyLjk5NzEgOC4yOTc3OCAxMi45NjIxIDguNDY2NzhDMTIuODA3OSA5LjIxMTA4IDEyLjE5NjggOS44MDk0IDExLjM5MzcgOS45NjI3N0MxMS4yMTA0IDkuOTk3NzcgMTAuOTc4NiAxMCAxMC4zNzQ3IDEwSDkuNDk5NzFDOS4yMjM1NyAxMCA4Ljk5OTcxIDEwLjIyMzkgOC45OTk3MSAxMC41QzguOTk5NzEgMTAuNzc2MiA5LjIyMzU3IDExIDkuNDk5NzEgMTFIMTAuMzc0N0wxMC40MzU0IDExQzEwLjk1ODEgMTEuMDAwMSAxMS4yOTI1IDExLjAwMDEgMTEuNTgxMiAxMC45NDVDMTIuNzYxNSAxMC43MTk2IDEzLjcwMSA5LjgyOTUgMTMuOTQxMyA4LjY2OTY3QzEzLjk5OTkgOC4zODY4MSAxMy45OTk4IDguMDYwMDUgMTMuOTk5NyA3LjU2MzE0TDEzLjk5OTcgNy41MDAwMUwxMy45OTk3IDcuNDM2ODhDMTMuOTk5OCA2LjkzOTk4IDEzLjk5OTkgNi42MTMyMSAxMy45NDEzIDYuMzMwMzVDMTMuNzAxIDUuMTcwNTMgMTIuNzYxNSA0LjI4MDM5IDExLjU4MTIgNC4wNTVDMTEuMjkyNSAzLjk5OTg4IDEwLjk1ODEgMy45OTk5MyAxMC40MzU0IDQuMDAwMDFMMTAuMzc0NyA0LjAwMDAxSDkuNDk5NzFDOS4yMjM1NyA0LjAwMDAxIDguOTk5NzEgNC4yMjM4NyA4Ljk5OTcxIDQuNTAwMDFDOC45OTk3MSA0Ljc3NjE1IDkuMjIzNTcgNS4wMDAwMSA5LjQ5OTcxIDUuMDAwMDFIMTAuMzc0N1pNNS4wMDAzOCA3QzQuNzI0MjQgNyA0LjUwMDM4IDcuMjIzODYgNC41MDAzOCA3LjVDNC41MDAzOCA3Ljc3NjE0IDQuNzI0MjQgOCA1LjAwMDM4IDhIMTAuMDAwNEMxMC4yNzY1IDggMTAuNTAwNCA3Ljc3NjE0IDEwLjUwMDQgNy41QzEwLjUwMDQgNy4yMjM4NiAxMC4yNzY1IDcgMTAuMDAwNCA3SDUuMDAwMzhaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxobj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC41MTE5NCAzLjAwNTQxQzkuMTg4MjkgMi41NDU5NCAxMC4wNDM1IDIuNTM2OTQgMTAuNjc4OCAyLjk1NDE5QzEwLjgyMzEgMy4wNDg5MyAxMC45NzcxIDMuMTk5MyAxMS4zODkgMy42MTExOUMxMS44MDA5IDQuMDIzMDcgMTEuOTUxMyA0LjE3NzE0IDEyLjA0NiA0LjMyMTQxQzEyLjQ2MzMgNC45NTY3NSAxMi40NTQzIDUuODExOTIgMTEuOTk0OCA2LjQ4ODI3QzExLjg4OTkgNi42NDI2NCAxMS43Mjc2IDYuODA4MTEgMTEuMzAwNiA3LjIzNTExTDEwLjY4MTkgNy44NTM4M0MxMC40ODY3IDguMDQ5MDkgMTAuNDg2NyA4LjM2NTY3IDEwLjY4MTkgOC41NjA5M0MxMC44NzcyIDguNzU2MiAxMS4xOTM4IDguNzU2MiAxMS4zODkgOC41NjA5M0wxMi4wMDc3IDcuOTQyMjFMMTIuMDUwNyA3Ljg5OTI5QzEyLjQyMDMgNy41Mjk3NiAxMi42NTY4IDcuMjkzMyAxMi44MjIgNy4wNTAyQzEzLjQ5NzIgNi4wNTYyMyAxMy41MzIxIDQuNzYyNTIgMTIuODgxOSAzLjc3MjQ4QzEyLjcyMzMgMy41MzEwMiAxMi40OTIyIDMuMzAwMDEgMTIuMTQwOCAyLjk0ODcxTDEyLjA5NjEgMi45MDQwOEwxMi4wNTE1IDIuODU5NDJDMTEuNzAwMiAyLjUwOCAxMS40NjkyIDIuMjc2ODkgMTEuMjI3NyAyLjExODMyQzEwLjIzNzcgMS40NjgxMyA4Ljk0Mzk4IDEuNTAyOTkgNy45NTAwMSAyLjE3ODIyQzcuNzA2OTEgMi4zNDMzNiA3LjQ3MDQ0IDIuNTc5OTEgNy4xMDA5IDIuOTQ5NTVMNy4wNTggMi45OTI0N0w2LjQzOTI4IDMuNjExMTlDNi4yNDQwMSAzLjgwNjQ1IDYuMjQ0MDEgNC4xMjMwMyA2LjQzOTI4IDQuMzE4MjlDNi42MzQ1NCA0LjUxMzU1IDYuOTUxMTIgNC41MTM1NSA3LjE0NjM4IDQuMzE4MjlMNy43NjUxIDMuNjk5NTdDOC4xOTIxIDMuMjcyNTcgOC4zNTc1NyAzLjExMDI3IDguNTExOTQgMy4wMDU0MVpNNC4zMTc5NiA3LjE0NjcyQzQuNTEzMjIgNi45NTE0NiA0LjUxMzIyIDYuNjM0ODcgNC4zMTc5NiA2LjQzOTYxQzQuMTIyNjkgNi4yNDQzNSAzLjgwNjExIDYuMjQ0MzUgMy42MTA4NSA2LjQzOTYxTDIuOTkyMTMgNy4wNTgzM0wyLjk0OTIyIDcuMTAxMjRDMi41Nzk1NyA3LjQ3MDc3IDIuMzQzMDMgNy43MDcyNCAyLjE3Nzg4IDcuOTUwMzVDMS41MDI2NSA4Ljk0NDMyIDEuNDY3OCAxMC4yMzggMi4xMTc5OSAxMS4yMjgxQzIuMjc2NTYgMTEuNDY5NSAyLjUwNzY2IDExLjcwMDUgMi44NTkxIDEyLjA1MThMMi45MDM3NCAxMi4wOTY1TDIuOTQ4MzcgMTIuMTQxMUMzLjI5OTY3IDEyLjQ5MjUgMy41MzA2OCAxMi43MjM3IDMuNzcyMTQgMTIuODgyMkM0Ljc2MjE5IDEzLjUzMjQgNi4wNTU4OSAxMy40OTc2IDcuMDQ5ODYgMTIuODIyM0M3LjI5Mjk2IDEyLjY1NzIgNy41Mjk0MyAxMi40MjA2IDcuODk4OTYgMTIuMDUxTDcuODk4OTcgMTIuMDUxTDcuOTQxODggMTIuMDA4MUw4LjU2MDYgMTEuMzg5NEM4Ljc1NTg2IDExLjE5NDEgOC43NTU4NiAxMC44Nzc1IDguNTYwNiAxMC42ODIzQzguMzY1MzMgMTAuNDg3IDguMDQ4NzUgMTAuNDg3IDcuODUzNDkgMTAuNjgyM0w3LjIzNDc3IDExLjMwMUM2LjgwNzc3IDExLjcyOCA2LjY0MjMgMTEuODkwMyA2LjQ4Nzk0IDExLjk5NTFDNS44MTE1OCAxMi40NTQ2IDQuOTU2NDIgMTIuNDYzNiA0LjMyMTA3IDEyLjA0NjRDNC4xNzY4MSAxMS45NTE2IDQuMDIyNzQgMTEuODAxMiAzLjYxMDg1IDExLjM4OTRDMy4xOTg5NiAxMC45Nzc1IDMuMDQ4NiAxMC44MjM0IDIuOTUzODUgMTAuNjc5MUMyLjUzNjYxIDEwLjA0MzggMi41NDU2MSA5LjE4ODYzIDMuMDA1MDcgOC41MTIyN0MzLjEwOTkzIDguMzU3OTEgMy4yNzIyNCA4LjE5MjQ0IDMuNjk5MjQgNy43NjU0NEw0LjMxNzk2IDcuMTQ2NzJaTTkuNjIxNzIgNi4wODU1OEM5LjgxNjk4IDUuODkwMzIgOS44MTY5OCA1LjU3MzczIDkuNjIxNzIgNS4zNzg0N0M5LjQyNjQ2IDUuMTgzMjEgOS4xMDk4OCA1LjE4MzIxIDguOTE0NjEgNS4zNzg0N0w1LjM3OTA4IDguOTE0MDFDNS4xODM4MiA5LjEwOTI3IDUuMTgzODIgOS40MjU4NSA1LjM3OTA4IDkuNjIxMTFDNS41NzQzNCA5LjgxNjM3IDUuODkwOTIgOS44MTYzNyA2LjA4NjE5IDkuNjIxMTFMOS42MjE3MiA2LjA4NTU4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZ249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEzLjM1MzYgMi4zNTM1NUMxMy41NDg4IDIuMTU4MjkgMTMuNTQ4OCAxLjg0MTcxIDEzLjM1MzYgMS42NDY0NUMxMy4xNTgzIDEuNDUxMTggMTIuODQxNyAxLjQ1MTE4IDEyLjY0NjQgMS42NDY0NUwxLjY0NjQ1IDEyLjY0NjRDMS40NTExOCAxMi44NDE3IDEuNDUxMTggMTMuMTU4MyAxLjY0NjQ1IDEzLjM1MzZDMS44NDE3MSAxMy41NDg4IDIuMTU4MjkgMTMuNTQ4OCAyLjM1MzU1IDEzLjM1MzZMMTMuMzUzNiAyLjM1MzU1Wk0yLjAzNzM1IDguNDY2NzhDMi4xNzM5OCA5LjEyNjE5IDIuNjY5MTggOS42NzEwMyAzLjMzODg2IDkuODkzMzhMMi41NzgzMyAxMC42NTM5QzEuODA4NDMgMTAuMjUzNCAxLjIzNzg0IDkuNTM2OTMgMS4wNTgxNSA4LjY2OTY3QzAuOTk5NTM4IDguMzg2ODEgMC45OTk2MDQgOC4wNjAwNCAwLjk5OTcwMyA3LjU2MzEzTDAuOTk5NzExIDcuNTAwMDFMMC45OTk3MDMgNy40MzY4OUMwLjk5OTYwNCA2LjkzOTk4IDAuOTk5NTM4IDYuNjEzMjEgMS4wNTgxNSA2LjMzMDM1QzEuMjk4NDYgNS4xNzA1MyAyLjIzNzkgNC4yODAzOSAzLjQxODIgNC4wNTVDMy43MDY4NyAzLjk5OTg4IDQuMDQxMzQgMy45OTk5MyA0LjU2NDAyIDQuMDAwMDFMNC42MjQ3MSA0LjAwMDAxSDUuNDk5NzFDNS43NzU4NSA0LjAwMDAxIDUuOTk5NzEgNC4yMjM4NyA1Ljk5OTcxIDQuNTAwMDFDNS45OTk3MSA0Ljc3NjE1IDUuNzc1ODUgNS4wMDAwMSA1LjQ5OTcxIDUuMDAwMDFINC42MjQ3MUM0LjAyMDg0IDUuMDAwMDEgMy43ODkwNyA1LjAwMjI1IDMuNjA1NzcgNS4wMzcyNUMyLjgwMjYyIDUuMTkwNjIgMi4xOTE1NyA1Ljc4ODk1IDIuMDM3MzUgNi41MzMyNEMyLjAwMjMzIDYuNzAyMjUgMS45OTk3MSA2LjkxNzUyIDEuOTk5NzEgNy41MDAwMUMxLjk5OTcxIDguMDgyNTEgMi4wMDIzMyA4LjI5Nzc4IDIuMDM3MzUgOC40NjY3OFpNMTIuOTYyMSA2LjUzMzI0QzEyLjgyNTUgNS44NzM5NyAxMi4zMzA0IDUuMzI5MjIgMTEuNjYxIDUuMTA2NzlMMTIuNDIxNSA0LjM0NjMxQzEzLjE5MTIgNC43NDY4NiAxMy43NjE2IDUuNDYzMjMgMTMuOTQxMyA2LjMzMDM1QzEzLjk5OTkgNi42MTMyMSAxMy45OTk4IDYuOTM5OTggMTMuOTk5NyA3LjQzNjg4TDEzLjk5OTcgNy41MDAwMUwxMy45OTk3IDcuNTYzMTRDMTMuOTk5OCA4LjA2MDA1IDEzLjk5OTkgOC4zODY4MSAxMy45NDEzIDguNjY5NjdDMTMuNzAxIDkuODI5NSAxMi43NjE1IDEwLjcxOTYgMTEuNTgxMiAxMC45NDVDMTEuMjkyNSAxMS4wMDAxIDEwLjk1ODEgMTEuMDAwMSAxMC40MzU0IDExTDEwLjM3NDcgMTFIOS40OTk3MUM5LjIyMzU3IDExIDguOTk5NzEgMTAuNzc2MiA4Ljk5OTcxIDEwLjVDOC45OTk3MSAxMC4yMjM5IDkuMjIzNTcgMTAgOS40OTk3MSAxMEgxMC4zNzQ3QzEwLjk3ODYgMTAgMTEuMjEwNCA5Ljk5Nzc3IDExLjM5MzcgOS45NjI3N0MxMi4xOTY4IDkuODA5NCAxMi44MDc5IDkuMjExMDggMTIuOTYyMSA4LjQ2Njc4QzEyLjk5NzEgOC4yOTc3OCAxMi45OTk3IDguMDgyNTEgMTIuOTk5NyA3LjUwMDAxQzEyLjk5OTcgNi45MTc1MiAxMi45OTcxIDYuNzAyMjUgMTIuOTYyMSA2LjUzMzI0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuNTAwMjEgMEM0Ljc3NjM1IDAgNS4wMDAyIDAuMjIzODUzIDUuMDAwMiAwLjQ5OTk5VjIuNDk5OTVDNS4wMDAyIDIuNzc2MDkgNC43NzYzNSAyLjk5OTk0IDQuNTAwMjEgMi45OTk5NEM0LjIyNDA4IDIuOTk5OTQgNC4wMDAyMiAyLjc3NjA5IDQuMDAwMjIgMi40OTk5NVYwLjQ5OTk5QzQuMDAwMjIgMC4yMjM4NTMgNC4yMjQwOCAwIDQuNTAwMjEgMFpNMC42NDY0NTEgMC42NDY0N0MwLjg0MTcxIDAuNDUxMjEyIDEuMTU4MjkgMC40NTEyMTIgMS4zNTM1NCAwLjY0NjQ3TDIuODUzNTEgMi4xNDY0NEMzLjA0ODc3IDIuMzQxNyAzLjA0ODc3IDIuNjU4MjcgMi44NTM1MSAyLjg1MzUzQzIuNjU4MjYgMy4wNDg3OSAyLjM0MTY4IDMuMDQ4NzkgMi4xNDY0MiAyLjg1MzUzTDAuNjQ2NDUyIDEuMzUzNTZDMC40NTExOTMgMS4xNTgzIDAuNDUxMTkzIDAuODQxNzI4IDAuNjQ2NDUxIDAuNjQ2NDdaTTAuMDAwMzA1MTcgNC40OTk5MUMwLjAwMDMwNTE3IDQuMjIzNzcgMC4yMjQxNTggMy45OTk5MiAwLjUwMDI5NSAzLjk5OTkySDIuNTAwMjVDMi43NzYzOSAzLjk5OTkyIDMuMDAwMjQgNC4yMjM3NyAzLjAwMDI0IDQuNDk5OTFDMy4wMDAyNCA0Ljc3NjA1IDIuNzc2MzkgNC45OTk5IDIuNTAwMjUgNC45OTk5SDAuNTAwMjk1QzAuMjI0MTU4IDQuOTk5OSAwLjAwMDMwNTE3IDQuNzc2MDUgMC4wMDAzMDUxNyA0LjQ5OTkxWk0xMi4wMDAxIDEwLjQ5OThDMTIuMDAwMSAxMC4yMjM2IDEyLjIyMzkgOS45OTk4IDEyLjUwMDEgOS45OTk4SDE0LjVDMTQuNzc2MSA5Ljk5OTggMTUgMTAuMjIzNiAxNSAxMC40OTk4QzE1IDEwLjc3NTkgMTQuNzc2MSAxMC45OTk4IDE0LjUgMTAuOTk5OEgxMi41MDAxQzEyLjIyMzkgMTAuOTk5OCAxMi4wMDAxIDEwLjc3NTkgMTIuMDAwMSAxMC40OTk4Wk0xMC41MDAxIDExLjk5OThDMTAuNzc2MiAxMS45OTk4IDExLjAwMDEgMTIuMjIzNiAxMS4wMDAxIDEyLjQ5OTdWMTQuNDk5N0MxMS4wMDAxIDE0Ljc3NTggMTAuNzc2MiAxNC45OTk3IDEwLjUwMDEgMTQuOTk5N0MxMC4yMjQgMTQuOTk5NyAxMC4wMDAxIDE0Ljc3NTggMTAuMDAwMSAxNC40OTk3VjEyLjQ5OTdDMTAuMDAwMSAxMi4yMjM2IDEwLjIyNCAxMS45OTk4IDEwLjUwMDEgMTEuOTk5OFpNMTIuMTQ2MiAxMi4xNDYyQzEyLjM0MTUgMTEuOTUxIDEyLjY1OCAxMS45NTEgMTIuODUzMyAxMi4xNDYyTDE0LjM1MzMgMTMuNjQ2MkMxNC41NDg1IDEzLjg0MTUgMTQuNTQ4NSAxNC4xNTggMTQuMzUzMyAxNC4zNTMzQzE0LjE1OCAxNC41NDg1IDEzLjg0MTQgMTQuNTQ4NSAxMy42NDYyIDE0LjM1MzNMMTIuMTQ2MiAxMi44NTMzQzExLjk1MSAxMi42NTgxIDExLjk1MSAxMi4zNDE1IDEyLjE0NjIgMTIuMTQ2MlpNNy43NjQ3OCAzLjY5OTM4QzguMTkxNzcgMy4yNzIzOCA4LjM1NzI0IDMuMTEwMDggOC41MTE2IDMuMDA1MjJDOS4xODc5NCAyLjU0NTc3IDEwLjA0MzEgMi41MzY3NyAxMC42Nzg0IDIuOTU0MDFDMTAuODIyNyAzLjA0ODc1IDEwLjk3NjcgMy4xOTkxMSAxMS4zODg2IDMuNjEwOTlDMTEuODAwNSA0LjAyMjg3IDExLjk1MDkgNC4xNzY5NCAxMi4wNDU2IDQuMzIxMkMxMi40NjI4IDQuOTU2NTMgMTIuNDUzOSA1LjgxMTY4IDExLjk5NDQgNi40ODgwMkMxMS44ODk1IDYuNjQyMzggMTEuNzI3MiA2LjgwNzg1IDExLjMwMDIgNy4yMzQ4NEwxMC42ODE1IDcuODUzNTRDMTAuNDg2MyA4LjA0ODggMTAuNDg2MyA4LjM2NTM4IDEwLjY4MTUgOC41NjA2NEMxMC44NzY4IDguNzU1ODkgMTEuMTkzNCA4Ljc1NTg5IDExLjM4ODYgOC41NjA2NEwxMi4wMDczIDcuOTQxOTNMMTIuMDUwMiA3Ljg5OTAzQzEyLjQxOTkgNy41Mjk1IDEyLjY1NjQgNy4yOTMwMyAxMi44MjE2IDcuMDQ5OTNDMTMuNDk2OCA2LjA1NTk4IDEzLjUzMTYgNC43NjIzIDEyLjg4MTUgMy43NzIyOEMxMi43MjI5IDMuNTMwODMgMTIuNDkxOCAzLjI5OTgyIDEyLjE0MDQgMi45NDg1M0wxMi4wOTU3IDIuOTAzOUwxMi4wNTExIDIuODU5MjVDMTEuNjk5OCAyLjUwNzgyIDExLjQ2ODggMi4yNzY3MiAxMS4yMjczIDIuMTE4MTZDMTAuMjM3MyAxLjQ2Nzk4IDguOTQzNjQgMS41MDI4NCA3Ljk0OTY4IDIuMTc4MDVDNy43MDY1OSAyLjM0MzE5IDcuNDcwMTIgMi41Nzk3MyA3LjEwMDYgMi45NDkzNkw3LjEwMDYgMi45NDkzN0w3LjA1NzY5IDIuOTkyMjhMNi40Mzg5OCAzLjYxMDk5QzYuMjQzNzIgMy44MDYyNSA2LjI0MzcyIDQuMTIyODIgNi40Mzg5OCA0LjMxODA4QzYuNjM0MjQgNC41MTMzNCA2Ljk1MDgxIDQuNTEzMzQgNy4xNDYwNyA0LjMxODA4TDcuNzY0NzggMy42OTkzOFpNMi45OTE5MSA3LjA1ODA3TDIuOTQ4OTkgNy4xMDA5N0MyLjU3OTM1IDcuNDcwNSAyLjM0MjgyIDcuNzA2OTcgMi4xNzc2NyA3Ljk1MDA2QzEuNTAyNDYgOC45NDQwMSAxLjQ2NzYgMTAuMjM3NyAyLjExNzc4IDExLjIyNzdDMi4yNzYzNCAxMS40NjkyIDIuNTA3NDQgMTEuNzAwMiAyLjg1ODg2IDEyLjA1MTVMMi44NTg4OCAxMi4wNTE1TDIuOTAzNTIgMTIuMDk2MUwyLjk0ODE1IDEyLjE0MDdMMi45NDgxNSAxMi4xNDA3TDIuOTQ4MTcgMTIuMTQwOEMzLjI5OTQ1IDEyLjQ5MjIgMy41MzA0NSAxMi43MjMzIDMuNzcxOSAxMi44ODE4QzQuNzYxOTMgMTMuNTMyIDYuMDU1NiAxMy40OTcyIDcuMDQ5NTYgMTIuODIxOUM3LjI5MjY1IDEyLjY1NjggNy41MjkxMiAxMi40MjAzIDcuODk4NjUgMTIuMDUwNkw3Ljk0MTU1IDEyLjAwNzdMOC41NjAyNiAxMS4zODlDOC43NTU1MiAxMS4xOTM3IDguNzU1NTIgMTAuODc3MiA4LjU2MDI2IDEwLjY4MTlDOC4zNjUgMTAuNDg2NyA4LjA0ODQyIDEwLjQ4NjcgNy44NTMxNyAxMC42ODE5TDcuMjM0NDYgMTEuMzAwNkM2LjgwNzQ3IDExLjcyNzYgNi42NDIgMTEuODg5OSA2LjQ4NzY0IDExLjk5NDhDNS44MTEzIDEyLjQ1NDIgNC45NTYxNSAxMi40NjMyIDQuMzIwODIgMTIuMDQ2QzQuMTc2NTYgMTEuOTUxMiA0LjAyMjQ5IDExLjgwMDkgMy42MTA2MSAxMS4zODlDMy4xOTg3MyAxMC45NzcxIDMuMDQ4MzcgMTAuODIzMSAyLjk1MzYzIDEwLjY3ODhDMi41MzYzOSAxMC4wNDM1IDIuNTQ1MzkgOS4xODgzMiAzLjAwNDg0IDguNTExOThDMy4xMDk3MSA4LjM1NzYxIDMuMjcyMDEgOC4xOTIxNSAzLjY5OSA3Ljc2NTE2TDQuMzE3NyA3LjE0NjQ1QzQuNTEyOTYgNi45NTExOSA0LjUxMjk2IDYuNjM0NjIgNC4zMTc3IDYuNDM5MzZDNC4xMjI0NSA2LjI0NDEgMy44MDU4NyA2LjI0NDEgMy42MTA2MSA2LjQzOTM2TDIuOTkxOTEgNy4wNTgwN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LENuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjU2NDI3IDMuOTk5ODhDNC41ODQyMiAzLjk5OTg5IDQuNjA0NDUgMy45OTk4OSA0LjYyNDk2IDMuOTk5ODlINS40OTk5NkM1Ljc3NjEgMy45OTk4OSA1Ljk5OTk2IDQuMjIzNzUgNS45OTk5NiA0LjQ5OTg5QzUuOTk5OTYgNC43NzYwMyA1Ljc3NjEgNC45OTk4OSA1LjQ5OTk2IDQuOTk5ODlINC42MjQ5NkM0LjAyMTA4IDQuOTk5ODkgMy43ODkzMiA1LjAwMjEzIDMuNjA2MDEgNS4wMzcxM0MyLjgwMjg3IDUuMTkwNSAyLjE5MTgxIDUuNzg4ODMgMi4wMzc1OSA2LjUzMzEyQzIuMDAyNTcgNi43MDIxMiAxLjk5OTk2IDYuOTE3MzkgMS45OTk5NiA3LjQ5OTg5QzEuOTk5OTYgOC4wODIzOSAyLjAwMjU3IDguMjk3NjYgMi4wMzc1OSA4LjQ2NjY2QzIuMTkxODEgOS4yMTA5NSAyLjgwMjg3IDkuODA5MjggMy42MDYwMSA5Ljk2MjY1QzMuNzg5MzIgOS45OTc2NSA0LjAyMTA4IDkuOTk5ODkgNC42MjQ5NiA5Ljk5OTg5SDUuNDk5OTZDNS43NzYxIDkuOTk5ODkgNS45OTk5NiAxMC4yMjM3IDUuOTk5OTYgMTAuNDk5OUM1Ljk5OTk2IDEwLjc3NiA1Ljc3NjEgMTAuOTk5OSA1LjQ5OTk2IDEwLjk5OTlINC42MjQ5NkM0LjYwNDQ1IDEwLjk5OTkgNC41ODQyMiAxMC45OTk5IDQuNTY0MjcgMTAuOTk5OUM0LjA0MTU5IDExIDMuNzA3MTIgMTEgMy40MTg0NSAxMC45NDQ5QzIuMjM4MTQgMTAuNzE5NSAxLjI5ODcxIDkuODI5MzcgMS4wNTgzOSA4LjY2OTU1QzAuOTk5NzgyIDguMzg2NjkgMC45OTk4NDggOC4wNTk5MiAwLjk5OTk0NyA3LjU2MzAxQzAuOTk5OTUxIDcuNTQyMjcgMC45OTk5NTUgNy41MjEyMyAwLjk5OTk1NSA3LjQ5OTg5QzAuOTk5OTU1IDcuNDc4NTUgMC45OTk5NTEgNy40NTc1MSAwLjk5OTk0NyA3LjQzNjc3QzAuOTk5ODQ4IDYuOTM5ODYgMC45OTk3ODIgNi42MTMwOSAxLjA1ODM5IDYuMzMwMjNDMS4yOTg3MSA1LjE3MDQxIDIuMjM4MTQgNC4yODAyNyAzLjQxODQ1IDQuMDU0ODhDMy43MDcxMiAzLjk5OTc2IDQuMDQxNTkgMy45OTk4MSA0LjU2NDI3IDMuOTk5ODhaTTExLjM5MzkgNS4wMzcxM0MxMS4yMTA2IDUuMDAyMTMgMTAuOTc4OCA0Ljk5OTg5IDEwLjM3NSA0Ljk5OTg5SDkuNDk5OTZDOS4yMjM4MSA0Ljk5OTg5IDguOTk5OTYgNC43NzYwMyA4Ljk5OTk2IDQuNDk5ODlDOC45OTk5NiA0LjIyMzc1IDkuMjIzODEgMy45OTk4OSA5LjQ5OTk2IDMuOTk5ODlIMTAuMzc1QzEwLjM5NTUgMy45OTk4OSAxMC40MTU3IDMuOTk5ODkgMTAuNDM1NiAzLjk5OTg4QzEwLjk1ODMgMy45OTk4MSAxMS4yOTI4IDMuOTk5NzYgMTEuNTgxNSA0LjA1NDg4QzEyLjc2MTggNC4yODAyNyAxMy43MDEyIDUuMTcwNDEgMTMuOTQxNSA2LjMzMDIzQzE0LjAwMDEgNi42MTMwOSAxNC4wMDAxIDYuOTM5ODUgMTQgNy40MzY3NkMxNCA3LjQ1NzUgMTQgNy40Nzg1NCAxNCA3LjQ5OTg5QzE0IDcuNTIxMjQgMTQgNy41NDIyOCAxNCA3LjU2MzAyQzE0LjAwMDEgOC4wNTk5MiAxNC4wMDAxIDguMzg2NjkgMTMuOTQxNSA4LjY2OTU1QzEzLjcwMTIgOS44MjkzNyAxMi43NjE4IDEwLjcxOTUgMTEuNTgxNSAxMC45NDQ5QzExLjI5MjggMTEgMTAuOTU4MyAxMSAxMC40MzU2IDEwLjk5OTlDMTAuNDE1NyAxMC45OTk5IDEwLjM5NTUgMTAuOTk5OSAxMC4zNzUgMTAuOTk5OUg5LjQ5OTk2QzkuMjIzODEgMTAuOTk5OSA4Ljk5OTk2IDEwLjc3NiA4Ljk5OTk2IDEwLjQ5OTlDOC45OTk5NiAxMC4yMjM3IDkuMjIzODEgOS45OTk4OSA5LjQ5OTk2IDkuOTk5ODlIMTAuMzc1QzEwLjk3ODggOS45OTk4OSAxMS4yMTA2IDkuOTk3NjUgMTEuMzkzOSA5Ljk2MjY1QzEyLjE5NyA5LjgwOTI4IDEyLjgwODEgOS4yMTA5NSAxMi45NjIzIDguNDY2NjZDMTIuOTk3MyA4LjI5NzY2IDEzIDguMDgyMzkgMTMgNy40OTk4OUMxMyA2LjkxNzM5IDEyLjk5NzMgNi43MDIxMiAxMi45NjIzIDYuNTMzMTJDMTIuODA4MSA1Ljc4ODgzIDEyLjE5NyA1LjE5MDUgMTEuMzkzOSA1LjAzNzEzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sbW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEwLjY3ODggMi45NTQxOUMxMC4wNDM1IDIuNTM2OTQgOS4xODgyOSAyLjU0NTk0IDguNTExOTQgMy4wMDU0MUM4LjM1NzU3IDMuMTEwMjcgOC4xOTIxIDMuMjcyNTcgNy43NjUxIDMuNjk5NTdMNy4xNDYzOCA0LjMxODI5QzYuOTUxMTIgNC41MTM1NSA2LjYzNDU0IDQuNTEzNTUgNi40MzkyOCA0LjMxODI5QzYuMjQ0MDEgNC4xMjMwMyA2LjI0NDAxIDMuODA2NDUgNi40MzkyOCAzLjYxMTE5TDcuMDU4IDIuOTkyNDdDNy4wNzI1IDIuOTc3OTcgNy4wODY3OSAyLjk2MzY2IDcuMTAwOSAyLjk0OTU1QzcuNDcwNDQgMi41Nzk5MSA3LjcwNjkxIDIuMzQzMzYgNy45NTAwMSAyLjE3ODIyQzguOTQzOTggMS41MDI5OSAxMC4yMzc3IDEuNDY4MTMgMTEuMjI3NyAyLjExODMyQzExLjQ2OTIgMi4yNzY4OSAxMS43MDAyIDIuNTA4IDEyLjA1MTUgMi44NTk0MkMxMi4wNjYyIDIuODc0MSAxMi4wODEgMi44ODg5OCAxMi4wOTYxIDIuOTA0MDhDMTIuMTExMiAyLjkxOTE3IDEyLjEyNjEgMi45MzQwNSAxMi4xNDA4IDIuOTQ4NzFDMTIuNDkyMiAzLjMwMDAxIDEyLjcyMzMgMy41MzEwMiAxMi44ODE5IDMuNzcyNDhDMTMuNTMyMSA0Ljc2MjUyIDEzLjQ5NzIgNi4wNTYyMyAxMi44MjIgNy4wNTAyQzEyLjY1NjggNy4yOTMzIDEyLjQyMDMgNy41Mjk3NiAxMi4wNTA3IDcuODk5MjlDMTIuMDM2NiA3LjkxMzQgMTIuMDIyMiA3LjkyNzcxIDEyLjAwNzcgNy45NDIyMUwxMS4zODkgOC41NjA5M0MxMS4xOTM4IDguNzU2MiAxMC44NzcyIDguNzU2MiAxMC42ODE5IDguNTYwOTNDMTAuNDg2NyA4LjM2NTY3IDEwLjQ4NjcgOC4wNDkwOSAxMC42ODE5IDcuODUzODNMMTEuMzAwNiA3LjIzNTExQzExLjcyNzYgNi44MDgxMSAxMS44ODk5IDYuNjQyNjQgMTEuOTk0OCA2LjQ4ODI3QzEyLjQ1NDMgNS44MTE5MiAxMi40NjMzIDQuOTU2NzUgMTIuMDQ2IDQuMzIxNDFDMTEuOTUxMyA0LjE3NzE0IDExLjgwMDkgNC4wMjMwNyAxMS4zODkgMy42MTExOUMxMC45NzcxIDMuMTk5MyAxMC44MjMxIDMuMDQ4OTMgMTAuNjc4OCAyLjk1NDE5Wk00LjMxNzk2IDYuNDM5NjFDNC41MTMyMiA2LjYzNDg3IDQuNTEzMjIgNi45NTE0NiA0LjMxNzk2IDcuMTQ2NzJMMy42OTkyNCA3Ljc2NTQ0QzMuMjcyMjQgOC4xOTI0NCAzLjEwOTkzIDguMzU3OTEgMy4wMDUwNyA4LjUxMjI3QzIuNTQ1NjEgOS4xODg2MyAyLjUzNjYxIDEwLjA0MzggMi45NTM4NSAxMC42NzkxQzMuMDQ4NiAxMC44MjM0IDMuMTk4OTYgMTAuOTc3NSAzLjYxMDg1IDExLjM4OTRDNC4wMjI3NCAxMS44MDEyIDQuMTc2ODEgMTEuOTUxNiA0LjMyMTA3IDEyLjA0NjRDNC45NTY0MiAxMi40NjM2IDUuODExNTggMTIuNDU0NiA2LjQ4Nzk0IDExLjk5NTFDNi42NDIzIDExLjg5MDMgNi44MDc3NyAxMS43MjggNy4yMzQ3NyAxMS4zMDFMNy44NTM0OSAxMC42ODIzQzguMDQ4NzUgMTAuNDg3IDguMzY1MzMgMTAuNDg3IDguNTYwNiAxMC42ODIzQzguNzU1ODYgMTAuODc3NSA4Ljc1NTg2IDExLjE5NDEgOC41NjA2IDExLjM4OTRMNy45NDE4OCAxMi4wMDgxQzcuOTI3MzggMTIuMDIyNiA3LjkxMzA3IDEyLjAzNjkgNy44OTg5NyAxMi4wNTFDNy41Mjk0MyAxMi40MjA2IDcuMjkyOTYgMTIuNjU3MiA3LjA0OTg2IDEyLjgyMjNDNi4wNTU4OSAxMy40OTc2IDQuNzYyMTkgMTMuNTMyNCAzLjc3MjE0IDEyLjg4MjJDMy41MzA2OCAxMi43MjM3IDMuMjk5NjcgMTIuNDkyNSAyLjk0ODM3IDEyLjE0MTFDMi45MzM3MSAxMi4xMjY0IDIuOTE4ODMgMTIuMTExNiAyLjkwMzc0IDEyLjA5NjVDMi44ODg2NSAxMi4wODE0IDIuODczNzcgMTIuMDY2NSAyLjg1OTEgMTIuMDUxOEMyLjUwNzY2IDExLjcwMDUgMi4yNzY1NiAxMS40Njk1IDIuMTE3OTkgMTEuMjI4MUMxLjQ2NzggMTAuMjM4IDEuNTAyNjUgOC45NDQzMiAyLjE3Nzg4IDcuOTUwMzVDMi4zNDMwMyA3LjcwNzI0IDIuNTc5NTcgNy40NzA3NyAyLjk0OTIyIDcuMTAxMjRDMi45NjMzMyA3LjA4NzEzIDIuOTc3NjMgNy4wNzI4MyAyLjk5MjEzIDcuMDU4MzNMMy42MTA4NSA2LjQzOTYxQzMuODA2MTEgNi4yNDQzNSA0LjEyMjY5IDYuMjQ0MzUgNC4zMTc5NiA2LjQzOTYxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sd249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuNSA1LjI1QzEuOTE0MjEgNS4yNSAyLjI1IDQuOTE0MjEgMi4yNSA0LjVDMi4yNSA0LjA4NTc5IDEuOTE0MjEgMy43NSAxLjUgMy43NUMxLjA4NTc5IDMuNzUgMC43NSA0LjA4NTc5IDAuNzUgNC41QzAuNzUgNC45MTQyMSAxLjA4NTc5IDUuMjUgMS41IDUuMjVaTTQgNC41QzQgNC4yMjM4NiA0LjIyMzg2IDQgNC41IDRIMTMuNUMxMy43NzYxIDQgMTQgNC4yMjM4NiAxNCA0LjVDMTQgNC43NzYxNCAxMy43NzYxIDUgMTMuNSA1SDQuNUM0LjIyMzg2IDUgNCA0Ljc3NjE0IDQgNC41Wk00LjUgN0M0LjIyMzg2IDcgNCA3LjIyMzg2IDQgNy41QzQgNy43NzYxNCA0LjIyMzg2IDggNC41IDhIMTMuNUMxMy43NzYxIDggMTQgNy43NzYxNCAxNCA3LjVDMTQgNy4yMjM4NiAxMy43NzYxIDcgMTMuNSA3SDQuNVpNNC41IDEwQzQuMjIzODYgMTAgNCAxMC4yMjM5IDQgMTAuNUM0IDEwLjc3NjEgNC4yMjM4NiAxMSA0LjUgMTFIMTMuNUMxMy43NzYxIDExIDE0IDEwLjc3NjEgMTQgMTAuNUMxNCAxMC4yMjM5IDEzLjc3NjEgMTAgMTMuNSAxMEg0LjVaTTIuMjUgNy41QzIuMjUgNy45MTQyMSAxLjkxNDIxIDguMjUgMS41IDguMjVDMS4wODU3OSA4LjI1IDAuNzUgNy45MTQyMSAwLjc1IDcuNUMwLjc1IDcuMDg1NzkgMS4wODU3OSA2Ljc1IDEuNSA2Ljc1QzEuOTE0MjEgNi43NSAyLjI1IDcuMDg1NzkgMi4yNSA3LjVaTTEuNSAxMS4yNUMxLjkxNDIxIDExLjI1IDIuMjUgMTAuOTE0MiAyLjI1IDEwLjVDMi4yNSAxMC4wODU4IDEuOTE0MjEgOS43NSAxLjUgOS43NUMxLjA4NTc5IDkuNzUgMC43NSAxMC4wODU4IDAuNzUgMTAuNUMwLjc1IDEwLjkxNDIgMS4wODU3OSAxMS4yNSAxLjUgMTEuMjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxibj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNSA0LjYzNjAxQzUgMy43NjAzMSA1LjI0MjE5IDMuMTA1NCA1LjY0MzIzIDIuNjczNTdDNi4wMzkzNCAyLjI0NzA1IDYuNjQ1ODIgMS45NzgzIDcuNTAxNCAxLjk3ODNDOC4zNTc0NSAxLjk3ODMgOC45NjMwNiAyLjI0NjUyIDkuMzU4MjMgMi42NzIwOEM5Ljc1ODM4IDMuMTAyOTkgMTAgMy43NTcwOCAxMCA0LjYzMzI1VjUuOTk5OTlINVY0LjYzNjAxWk00IDUuOTk5OTlWNC42MzYwMUM0IDMuNTgxNDggNC4yOTMzOSAyLjY1NzU0IDQuOTEwNDkgMS45OTMwN0M1LjUzMjUyIDEuMzIzMjkgNi40MjY3NSAwLjk3ODMwMiA3LjUwMTQgMC45NzgzMDJDOC41NzU4MyAwLjk3ODMwMiA5LjQ2OTUyIDEuMzIyMzMgMTAuMDkxIDEuOTkxNjJDMTAuNzA3NiAyLjY1NTU3IDExIDMuNTc4OTYgMTEgNC42MzMyNVY1Ljk5OTk5SDEyQzEyLjU1MjMgNS45OTk5OSAxMyA2LjQ0NzcxIDEzIDYuOTk5OTlWMTNDMTMgMTMuNTUyMyAxMi41NTIzIDE0IDEyIDE0SDNDMi40NDc3MiAxNCAyIDEzLjU1MjMgMiAxM1Y2Ljk5OTk5QzIgNi40NDc3MSAyLjQ0NzcyIDUuOTk5OTkgMyA1Ljk5OTk5SDRaTTMgNi45OTk5OUgxMlYxM0gzVjYuOTk5OTlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx5bj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTg2IDBDNi4zMjU3IDAgNS4zNjEwNyAwLjM4OTQzIDQuNzM3NTMgMS4xOTM2MUM0LjIzNzQ1IDEuODM4NTYgNCAyLjY4MjQyIDQgMy42MzMyNUg1QzUgMi44NDMxMyA1LjE5NjkxIDIuMjMzMTIgNS41Mjc4IDEuODA2MzZDNS45MTYxNSAxLjMwNTUyIDYuNTUxNTIgMSA3LjQ5ODYgMUM4LjM1NjgzIDEgOC45NjMzNiAxLjI2NTAyIDkuMzU4NDYgMS42ODYyM0M5Ljc1NzkzIDIuMTEyMTEgMTAgMi43NjA0NCAxMCAzLjYzNjAxVjZIM0MyLjQ0NzcyIDYgMiA2LjQ0NzcyIDIgN1YxM0MyIDEzLjU1MjMgMi40NDc3MiAxNCAzIDE0SDEyQzEyLjU1MjMgMTQgMTMgMTMuNTUyMyAxMyAxM1Y3QzEzIDYuNDQ3NzEgMTIuNTUyMyA2IDEyIDZIMTFWMy42MzYwMUMxMSAyLjU4MTM1IDEwLjcwNjUgMS42NjE2NyAxMC4wODc4IDEuMDAyMUM5LjQ2NDc3IDAuMzM3ODcxIDguNTcwNjEgMCA3LjQ5ODYgMFpNMyA3SDEyVjEzSDNWN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHhuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk05IDMuNjM2MDFDOSAyLjc2MDQ0IDkuMjQyMDcgMi4xMTIxMSA5LjY0MTU0IDEuNjg2MjNDMTAuMDM2NiAxLjI2NTAyIDEwLjY0MzIgMSAxMS41MDE0IDFDMTIuNDQ4NSAxIDEzLjA4MzkgMS4zMDU1MiAxMy40NzIyIDEuODA2MzZDMTMuODAzMSAyLjIzMzEyIDE0IDIuODQzMTMgMTQgMy42MzMyNUgxNUMxNSAyLjY4MjQyIDE0Ljc2MjYgMS44Mzg1NiAxNC4yNjI1IDEuMTkzNjFDMTMuNjM4OSAwLjM4OTQzIDEyLjY3NDMgMCAxMS41MDE0IDBDMTAuNDI5NCAwIDkuNTM1MjMgMC4zMzc4NzEgOC45MTIxOCAxLjAwMjFDOC4yOTM1MSAxLjY2MTY3IDggMi41ODEzNSA4IDMuNjM2MDFWNkgxQzAuNDQ3NzE1IDYgMCA2LjQ0NzcyIDAgN1YxM0MwIDEzLjU1MjMgMC40NDc3MTUgMTQgMSAxNEgxMEMxMC41NTIzIDE0IDExIDEzLjU1MjMgMTEgMTNWN0MxMSA2LjQ0NzcyIDEwLjU1MjMgNiAxMCA2SDlWMy42MzYwMVpNMSA3SDEwVjEzSDFWN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGtuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjM1MzU1IDEuODUzNTVDMy41NDg4MiAxLjY1ODI5IDMuNTQ4ODIgMS4zNDE3MSAzLjM1MzU1IDEuMTQ2NDVDMy4xNTgyOSAwLjk1MTE4NCAyLjg0MTcxIDAuOTUxMTg0IDIuNjQ2NDUgMS4xNDY0NUwwLjY0NjQ0NyAzLjE0NjQ1QzAuNDUxMTg0IDMuMzQxNzEgMC40NTExODQgMy42NTgyOSAwLjY0NjQ0NyAzLjg1MzU1TDIuNjQ2NDUgNS44NTM1NUMyLjg0MTcxIDYuMDQ4ODIgMy4xNTgyOSA2LjA0ODgyIDMuMzUzNTUgNS44NTM1NUMzLjU0ODgyIDUuNjU4MjkgMy41NDg4MiA1LjM0MTcxIDMuMzUzNTUgNS4xNDY0NUwyLjIwNzExIDRIOS41QzExLjQzMyA0IDEzIDUuNTY3IDEzIDcuNUMxMyA3Ljc3NjE0IDEzLjIyMzkgOCAxMy41IDhDMTMuNzc2MSA4IDE0IDcuNzc2MTQgMTQgNy41QzE0IDUuMDE0NzIgMTEuOTg1MyAzIDkuNSAzSDIuMjA3MTFMMy4zNTM1NSAxLjg1MzU1Wk0yIDcuNUMyIDcuMjIzODYgMS43NzYxNCA3IDEuNSA3QzEuMjIzODYgNyAxIDcuMjIzODYgMSA3LjVDMSA5Ljk4NTI4IDMuMDE0NzIgMTIgNS41IDEySDEyLjc5MjlMMTEuNjQ2NCAxMy4xNDY0QzExLjQ1MTIgMTMuMzQxNyAxMS40NTEyIDEzLjY1ODMgMTEuNjQ2NCAxMy44NTM2QzExLjg0MTcgMTQuMDQ4OCAxMi4xNTgzIDE0LjA0ODggMTIuMzUzNiAxMy44NTM2TDE0LjM1MzYgMTEuODUzNkMxNC41NDg4IDExLjY1ODMgMTQuNTQ4OCAxMS4zNDE3IDE0LjM1MzYgMTEuMTQ2NEwxMi4zNTM2IDkuMTQ2NDVDMTIuMTU4MyA4Ljk1MTE4IDExLjg0MTcgOC45NTExOCAxMS42NDY0IDkuMTQ2NDVDMTEuNDUxMiA5LjM0MTcxIDExLjQ1MTIgOS42NTgyOSAxMS42NDY0IDkuODUzNTVMMTIuNzkyOSAxMUg1LjVDMy41NjcgMTEgMiA5LjQzMyAyIDcuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFNuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMy45IDAuNDk5OTc2QzEzLjkgMC4yNzkwNjIgMTMuNzIwOSAwLjA5OTk3NTYgMTMuNSAwLjA5OTk3NTZDMTMuMjc5MSAwLjA5OTk3NTYgMTMuMSAwLjI3OTA2MiAxMy4xIDAuNDk5OTc2VjEuMDk5OThIMTIuNUMxMi4yNzkxIDEuMDk5OTggMTIuMSAxLjI3OTA2IDEyLjEgMS40OTk5OEMxMi4xIDEuNzIwODkgMTIuMjc5MSAxLjg5OTk4IDEyLjUgMS44OTk5OEgxMy4xVjIuNDk5OThDMTMuMSAyLjcyMDg5IDEzLjI3OTEgMi44OTk5OCAxMy41IDIuODk5OThDMTMuNzIwOSAyLjg5OTk4IDEzLjkgMi43MjA4OSAxMy45IDIuNDk5OThWMS44OTk5OEgxNC41QzE0LjcyMDkgMS44OTk5OCAxNC45IDEuNzIwODkgMTQuOSAxLjQ5OTk4QzE0LjkgMS4yNzkwNiAxNC43MjA5IDEuMDk5OTggMTQuNSAxLjA5OTk4SDEzLjlWMC40OTk5NzZaTTExLjg1MzYgMy4xNDY0MkMxMi4wNDg4IDMuMzQxNjggMTIuMDQ4OCAzLjY1ODI2IDExLjg1MzYgMy44NTM1M0wxMC44NTM2IDQuODUzNTNDMTAuNjU4MyA1LjA0ODc5IDEwLjM0MTcgNS4wNDg3OSAxMC4xNDY1IDQuODUzNTNDOS45NTEyIDQuNjU4MjcgOS45NTEyIDQuMzQxNjkgMTAuMTQ2NSA0LjE0NjQyTDExLjE0NjQgMy4xNDY0M0MxMS4zNDE3IDIuOTUxMTYgMTEuNjU4MyAyLjk1MTE2IDExLjg1MzYgMy4xNDY0MlpNOS44NTM1NyA1LjE0NjQyQzEwLjA0ODggNS4zNDE2OCAxMC4wNDg4IDUuNjU4MjcgOS44NTM1NyA1Ljg1MzUzTDIuODUzNTUgMTIuODUzNUMyLjY1ODI5IDEzLjA0ODggMi4zNDE3MSAxMy4wNDg4IDIuMTQ2NDUgMTIuODUzNUMxLjk1MTE4IDEyLjY1ODMgMS45NTExOCAxMi4zNDE3IDIuMTQ2NDUgMTIuMTQ2NEw5LjE0NjQ2IDUuMTQ2NDJDOS4zNDE3MiA0Ljk1MTE2IDkuNjU4MzEgNC45NTExNiA5Ljg1MzU3IDUuMTQ2NDJaTTEzLjUgNS4wOTk5OEMxMy43MjA5IDUuMDk5OTggMTMuOSA1LjI3OTA2IDEzLjkgNS40OTk5OFY2LjA5OTk4SDE0LjVDMTQuNzIwOSA2LjA5OTk4IDE0LjkgNi4yNzkwNiAxNC45IDYuNDk5OThDMTQuOSA2LjcyMDg5IDE0LjcyMDkgNi44OTk5OCAxNC41IDYuODk5OThIMTMuOVY3LjQ5OTk4QzEzLjkgNy43MjA4OSAxMy43MjA5IDcuODk5OTggMTMuNSA3Ljg5OTk4QzEzLjI3OTEgNy44OTk5OCAxMy4xIDcuNzIwODkgMTMuMSA3LjQ5OTk4VjYuODk5OThIMTIuNUMxMi4yNzkxIDYuODk5OTggMTIuMSA2LjcyMDg5IDEyLjEgNi40OTk5OEMxMi4xIDYuMjc5MDYgMTIuMjc5MSA2LjA5OTk4IDEyLjUgNi4wOTk5OEgxMy4xVjUuNDk5OThDMTMuMSA1LjI3OTA2IDEzLjI3OTEgNS4wOTk5OCAxMy41IDUuMDk5OThaTTguOTAwMDIgMC40OTk5NzZDOC45MDAwMiAwLjI3OTA2MiA4LjcyMDkzIDAuMDk5OTc1NiA4LjUwMDAyIDAuMDk5OTc1NkM4LjI3OTEgMC4wOTk5NzU2IDguMTAwMDIgMC4yNzkwNjIgOC4xMDAwMiAwLjQ5OTk3NlYxLjA5OTk4SDcuNTAwMDJDNy4yNzkxIDEuMDk5OTggNy4xMDAwMiAxLjI3OTA2IDcuMTAwMDIgMS40OTk5OEM3LjEwMDAyIDEuNzIwODkgNy4yNzkxIDEuODk5OTggNy41MDAwMiAxLjg5OTk4SDguMTAwMDJWMi40OTk5OEM4LjEwMDAyIDIuNzIwODkgOC4yNzkxIDIuODk5OTggOC41MDAwMiAyLjg5OTk4QzguNzIwOTMgMi44OTk5OCA4LjkwMDAyIDIuNzIwODkgOC45MDAwMiAyLjQ5OTk4VjEuODk5OThIOS41MDAwMkM5LjcyMDkzIDEuODk5OTggOS45MDAwMiAxLjcyMDg5IDkuOTAwMDIgMS40OTk5OEM5LjkwMDAyIDEuMjc5MDYgOS43MjA5MyAxLjA5OTk4IDkuNTAwMDIgMS4wOTk5OEg4LjkwMDAyVjAuNDk5OTc2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sT249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEwIDYuNUMxMCA4LjQzMyA4LjQzMyAxMCA2LjUgMTBDNC41NjcgMTAgMyA4LjQzMyAzIDYuNUMzIDQuNTY3IDQuNTY3IDMgNi41IDNDOC40MzMgMyAxMCA0LjU2NyAxMCA2LjVaTTkuMzA4ODQgMTAuMDE1OUM4LjUzOTAxIDEwLjYzMTggNy41NjI1MSAxMSA2LjUgMTFDNC4wMTQ3MiAxMSAyIDguOTg1MjggMiA2LjVDMiA0LjAxNDcyIDQuMDE0NzIgMiA2LjUgMkM4Ljk4NTI4IDIgMTEgNC4wMTQ3MiAxMSA2LjVDMTEgNy41NjI1MSAxMC42MzE4IDguNTM5MDEgMTAuMDE1OSA5LjMwODg0TDEyLjg1MzYgMTIuMTQ2NEMxMy4wNDg4IDEyLjM0MTcgMTMuMDQ4OCAxMi42NTgzIDEyLjg1MzYgMTIuODUzNkMxMi42NTgzIDEzLjA0ODggMTIuMzQxNyAxMy4wNDg4IDEyLjE0NjQgMTIuODUzNkw5LjMwODg0IDEwLjAxNTlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxNbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS40OTk4OCAyLjAwMDEyQzEuNzc2MDIgMi4wMDAxMiAxLjk5OTg4IDEuNzc2MjYgMS45OTk4OCAxLjUwMDEyQzEuOTk5ODggMS4yMjM5OCAxLjc3NjAyIDEuMDAwMTIgMS40OTk4OCAxLjAwMDEyQzEuMjIzNzQgMS4wMDAxMiAwLjk5OTg3OCAxLjIyMzk4IDAuOTk5ODc4IDEuNTAwMTJDMC45OTk4NzggMS43NzYyNiAxLjIyMzc0IDIuMDAwMTIgMS40OTk4OCAyLjAwMDEyWk00LjQ5OTg4IDIuMDAwMTJDNC43NzYwMiAyLjAwMDEyIDQuOTk5ODggMS43NzYyNiA0Ljk5OTg4IDEuNTAwMTJDNC45OTk4OCAxLjIyMzk4IDQuNzc2MDIgMS4wMDAxMiA0LjQ5OTg4IDEuMDAwMTJDNC4yMjM3NCAxLjAwMDEyIDMuOTk5ODggMS4yMjM5OCAzLjk5OTg4IDEuNTAwMTJDMy45OTk4OCAxLjc3NjI2IDQuMjIzNzQgMi4wMDAxMiA0LjQ5OTg4IDIuMDAwMTJaTTcuOTk5ODggMS41MDAxMkM3Ljk5OTg4IDEuNzc2MjYgNy43NzYwMiAyLjAwMDEyIDcuNDk5ODggMi4wMDAxMkM3LjIyMzc0IDIuMDAwMTIgNi45OTk4OCAxLjc3NjI2IDYuOTk5ODggMS41MDAxMkM2Ljk5OTg4IDEuMjIzOTggNy4yMjM3NCAxLjAwMDEyIDcuNDk5ODggMS4wMDAxMkM3Ljc3NjAyIDEuMDAwMTIgNy45OTk4OCAxLjIyMzk4IDcuOTk5ODggMS41MDAxMlpNMTAuNDk5OSAyLjAwMDEyQzEwLjc3NiAyLjAwMDEyIDEwLjk5OTkgMS43NzYyNiAxMC45OTk5IDEuNTAwMTJDMTAuOTk5OSAxLjIyMzk4IDEwLjc3NiAxLjAwMDEyIDEwLjQ5OTkgMS4wMDAxMkMxMC4yMjM3IDEuMDAwMTIgOS45OTk4OCAxLjIyMzk4IDkuOTk5ODggMS41MDAxMkM5Ljk5OTg4IDEuNzc2MjYgMTAuMjIzNyAyLjAwMDEyIDEwLjQ5OTkgMi4wMDAxMlpNMTMuOTk5OSAxLjUwMDEyQzEzLjk5OTkgMS43NzYyNiAxMy43NzYgMi4wMDAxMiAxMy40OTk5IDIuMDAwMTJDMTMuMjIzNyAyLjAwMDEyIDEyLjk5OTkgMS43NzYyNiAxMi45OTk5IDEuNTAwMTJDMTIuOTk5OSAxLjIyMzk4IDEzLjIyMzcgMS4wMDAxMiAxMy40OTk5IDEuMDAwMTJDMTMuNzc2IDEuMDAwMTIgMTMuOTk5OSAxLjIyMzk4IDEzLjk5OTkgMS41MDAxMlpNMS40OTk4OCAxNC4wMDAxQzEuNzc2MDIgMTQuMDAwMSAxLjk5OTg4IDEzLjc3NjMgMS45OTk4OCAxMy41MDAxQzEuOTk5ODggMTMuMjI0IDEuNzc2MDIgMTMuMDAwMSAxLjQ5OTg4IDEzLjAwMDFDMS4yMjM3NCAxMy4wMDAxIDAuOTk5ODc4IDEzLjIyNCAwLjk5OTg3OCAxMy41MDAxQzAuOTk5ODc4IDEzLjc3NjMgMS4yMjM3NCAxNC4wMDAxIDEuNDk5ODggMTQuMDAwMVpNMS45OTk4OCAxMC41MDAxQzEuOTk5ODggMTAuNzc2MyAxLjc3NjAyIDExLjAwMDEgMS40OTk4OCAxMS4wMDAxQzEuMjIzNzQgMTEuMDAwMSAwLjk5OTg3OCAxMC43NzYzIDAuOTk5ODc4IDEwLjUwMDFDMC45OTk4NzggMTAuMjI0IDEuMjIzNzQgMTAuMDAwMSAxLjQ5OTg4IDEwLjAwMDFDMS43NzYwMiAxMC4wMDAxIDEuOTk5ODggMTAuMjI0IDEuOTk5ODggMTAuNTAwMVpNMS40OTk4OCA4LjAwMDEyQzEuNzc2MDIgOC4wMDAxMiAxLjk5OTg4IDcuNzc2MjYgMS45OTk4OCA3LjUwMDEyQzEuOTk5ODggNy4yMjM5OCAxLjc3NjAyIDcuMDAwMTIgMS40OTk4OCA3LjAwMDEyQzEuMjIzNzQgNy4wMDAxMiAwLjk5OTg3OCA3LjIyMzk4IDAuOTk5ODc4IDcuNTAwMTJDMC45OTk4NzggNy43NzYyNiAxLjIyMzc0IDguMDAwMTIgMS40OTk4OCA4LjAwMDEyWk0xLjk5OTg4IDQuNTAwMTJDMS45OTk4OCA0Ljc3NjI2IDEuNzc2MDIgNS4wMDAxMiAxLjQ5OTg4IDUuMDAwMTJDMS4yMjM3NCA1LjAwMDEyIDAuOTk5ODc4IDQuNzc2MjYgMC45OTk4NzggNC41MDAxMkMwLjk5OTg3OCA0LjIyMzk4IDEuMjIzNzQgNC4wMDAxMiAxLjQ5OTg4IDQuMDAwMTJDMS43NzYwMiA0LjAwMDEyIDEuOTk5ODggNC4yMjM5OCAxLjk5OTg4IDQuNTAwMTJaTTEzLjQ5OTkgMTEuMDAwMUMxMy43NzYgMTEuMDAwMSAxMy45OTk5IDEwLjc3NjMgMTMuOTk5OSAxMC41MDAxQzEzLjk5OTkgMTAuMjI0IDEzLjc3NiAxMC4wMDAxIDEzLjQ5OTkgMTAuMDAwMUMxMy4yMjM3IDEwLjAwMDEgMTIuOTk5OSAxMC4yMjQgMTIuOTk5OSAxMC41MDAxQzEyLjk5OTkgMTAuNzc2MyAxMy4yMjM3IDExLjAwMDEgMTMuNDk5OSAxMS4wMDAxWk0xMy45OTk5IDcuNTAwMTJDMTMuOTk5OSA3Ljc3NjI2IDEzLjc3NiA4LjAwMDEyIDEzLjQ5OTkgOC4wMDAxMkMxMy4yMjM3IDguMDAwMTIgMTIuOTk5OSA3Ljc3NjI2IDEyLjk5OTkgNy41MDAxMkMxMi45OTk5IDcuMjIzOTggMTMuMjIzNyA3LjAwMDEyIDEzLjQ5OTkgNy4wMDAxMkMxMy43NzYgNy4wMDAxMiAxMy45OTk5IDcuMjIzOTggMTMuOTk5OSA3LjUwMDEyWk0xMy40OTk5IDUuMDAwMTJDMTMuNzc2IDUuMDAwMTIgMTMuOTk5OSA0Ljc3NjI2IDEzLjk5OTkgNC41MDAxMkMxMy45OTk5IDQuMjIzOTggMTMuNzc2IDQuMDAwMTIgMTMuNDk5OSA0LjAwMDEyQzEzLjIyMzcgNC4wMDAxMiAxMi45OTk5IDQuMjIzOTggMTIuOTk5OSA0LjUwMDEyQzEyLjk5OTkgNC43NzYyNiAxMy4yMjM3IDUuMDAwMTIgMTMuNDk5OSA1LjAwMDEyWk00Ljk5OTg4IDEzLjUwMDFDNC45OTk4OCAxMy43NzYzIDQuNzc2MDIgMTQuMDAwMSA0LjQ5OTg4IDE0LjAwMDFDNC4yMjM3NCAxNC4wMDAxIDMuOTk5ODggMTMuNzc2MyAzLjk5OTg4IDEzLjUwMDFDMy45OTk4OCAxMy4yMjQgNC4yMjM3NCAxMy4wMDAxIDQuNDk5ODggMTMuMDAwMUM0Ljc3NjAyIDEzLjAwMDEgNC45OTk4OCAxMy4yMjQgNC45OTk4OCAxMy41MDAxWk03LjQ5OTg4IDE0LjAwMDFDNy43NzYwMiAxNC4wMDAxIDcuOTk5ODggMTMuNzc2MyA3Ljk5OTg4IDEzLjUwMDFDNy45OTk4OCAxMy4yMjQgNy43NzYwMiAxMy4wMDAxIDcuNDk5ODggMTMuMDAwMUM3LjIyMzc0IDEzLjAwMDEgNi45OTk4OCAxMy4yMjQgNi45OTk4OCAxMy41MDAxQzYuOTk5ODggMTMuNzc2MyA3LjIyMzc0IDE0LjAwMDEgNy40OTk4OCAxNC4wMDAxWk0xMC45OTk5IDEzLjUwMDFDMTAuOTk5OSAxMy43NzYzIDEwLjc3NiAxNC4wMDAxIDEwLjQ5OTkgMTQuMDAwMUMxMC4yMjM3IDE0LjAwMDEgOS45OTk4OCAxMy43NzYzIDkuOTk5ODggMTMuNTAwMUM5Ljk5OTg4IDEzLjIyNCAxMC4yMjM3IDEzLjAwMDEgMTAuNDk5OSAxMy4wMDAxQzEwLjc3NiAxMy4wMDAxIDEwLjk5OTkgMTMuMjI0IDEwLjk5OTkgMTMuNTAwMVpNMTMuNDk5OSAxNC4wMDAxQzEzLjc3NiAxNC4wMDAxIDEzLjk5OTkgMTMuNzc2MyAxMy45OTk5IDEzLjUwMDFDMTMuOTk5OSAxMy4yMjQgMTMuNzc2IDEzLjAwMDEgMTMuNDk5OSAxMy4wMDAxQzEzLjIyMzcgMTMuMDAwMSAxMi45OTk5IDEzLjIyNCAxMi45OTk5IDEzLjUwMDFDMTIuOTk5OSAxMy43NzYzIDEzLjIyMzcgMTQuMDAwMSAxMy40OTk5IDE0LjAwMDFaTTMuOTk5ODggNS4wMDAxMkMzLjk5OTg4IDQuNDQ3ODQgNC40NDc1OSA0LjAwMDEyIDQuOTk5ODggNC4wMDAxMkg5Ljk5OTg4QzEwLjU1MjIgNC4wMDAxMiAxMC45OTk5IDQuNDQ3ODQgMTAuOTk5OSA1LjAwMDEyVjEwLjAwMDFDMTAuOTk5OSAxMC41NTI0IDEwLjU1MjIgMTEuMDAwMSA5Ljk5OTg4IDExLjAwMDFINC45OTk4OEM0LjQ0NzU5IDExLjAwMDEgMy45OTk4OCAxMC41NTI0IDMuOTk5ODggMTAuMDAwMVY1LjAwMDEyWk00Ljk5OTg4IDUuMDAwMTJIOS45OTk4OFYxMC4wMDAxSDQuOTk5ODhWNS4wMDAxMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LExuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xIDJIMTRWMTNIMUwxIDJaTTAgMkMwIDEuNDQ3NzIgMC40NDc3MTUgMSAxIDFIMTRDMTQuNTUyMyAxIDE1IDEuNDQ3NzIgMTUgMlYxM0MxNSAxMy41NTIzIDE0LjU1MjMgMTQgMTQgMTRIMUMwLjQ0NzcxNSAxNCAwIDEzLjU1MjMgMCAxM1YyWk00Ljg3NSA3LjVDNC44NzUgNi4wNTAyNSA2LjA1MDI1IDQuODc1IDcuNSA0Ljg3NUM4Ljk0OTc1IDQuODc1IDEwLjEyNSA2LjA1MDI1IDEwLjEyNSA3LjVDMTAuMTI1IDguOTQ5NzUgOC45NDk3NSAxMC4xMjUgNy41IDEwLjEyNUM2LjA1MDI1IDEwLjEyNSA0Ljg3NSA4Ljk0OTc1IDQuODc1IDcuNVpNNy41IDMuODc1QzUuNDk3OTcgMy44NzUgMy44NzUgNS40OTc5NyAzLjg3NSA3LjVDMy44NzUgOS41MDIwMyA1LjQ5Nzk3IDExLjEyNSA3LjUgMTEuMTI1QzkuNTAyMDMgMTEuMTI1IDExLjEyNSA5LjUwMjAzIDExLjEyNSA3LjVDMTEuMTI1IDUuNDk3OTcgOS41MDIwMyAzLjg3NSA3LjUgMy44NzVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxfbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMSAxQzAuNDQ3NzE1IDEgMCAxLjQ0NzcyIDAgMlYxM0MwIDEzLjU1MjMgMC40NDc3MTUgMTQgMSAxNEgxNEMxNC41NTIzIDE0IDE1IDEzLjU1MjMgMTUgMTNWMkMxNSAxLjQ0NzcyIDE0LjU1MjMgMSAxNCAxSDFaTTcuNSAxMC42MjVDOS4yMjU4OSAxMC42MjUgMTAuNjI1IDkuMjI1ODkgMTAuNjI1IDcuNUMxMC42MjUgNS43NzQxMSA5LjIyNTg5IDQuMzc1IDcuNSA0LjM3NUM1Ljc3NDExIDQuMzc1IDQuMzc1IDUuNzc0MTEgNC4zNzUgNy41QzQuMzc1IDkuMjI1ODkgNS43NzQxMSAxMC42MjUgNy41IDEwLjYyNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFBuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjI1IDcuNUMyLjI1IDcuMjIzODYgMi40NzM4NiA3IDIuNzUgN0gxMi4yNUMxMi41MjYxIDcgMTIuNzUgNy4yMjM4NiAxMi43NSA3LjVDMTIuNzUgNy43NzYxNCAxMi41MjYxIDggMTIuMjUgOEgyLjc1QzIuNDczODYgOCAyLjI1IDcuNzc2MTQgMi4yNSA3LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxFbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTk5MSAwLjg3Njg5MkMzLjg0MjIyIDAuODc2ODkyIDAuODc3MDc1IDMuODQyMDQgMC44NzcwNzUgNy40OTk3MkMwLjg3NzA3NSAxMS4xNTc0IDMuODQyMjIgMTQuMTIyNiA3LjQ5OTkxIDE0LjEyMjZDMTEuMTU3NiAxNC4xMjI2IDE0LjEyMjcgMTEuMTU3NCAxNC4xMjI3IDcuNDk5NzJDMTQuMTIyNyAzLjg0MjA0IDExLjE1NzYgMC44NzY4OTIgNy40OTk5MSAwLjg3Njg5MlpNMS44MjcwNyA3LjQ5OTcyQzEuODI3MDcgNC4zNjY3MSA0LjM2Njg5IDEuODI2ODkgNy40OTk5MSAxLjgyNjg5QzEwLjYzMjkgMS44MjY4OSAxMy4xNzI3IDQuMzY2NzEgMTMuMTcyNyA3LjQ5OTcyQzEzLjE3MjcgMTAuNjMyNyAxMC42MzI5IDEzLjE3MjYgNy40OTk5MSAxMy4xNzI2QzQuMzY2ODkgMTMuMTcyNiAxLjgyNzA3IDEwLjYzMjcgMS44MjcwNyA3LjQ5OTcyWk00LjUwMDAzIDdDNC4yMjM4OSA3IDQuMDAwMDMgNy4yMjM4NiA0LjAwMDAzIDcuNUM0LjAwMDAzIDcuNzc2MTQgNC4yMjM4OSA4IDQuNTAwMDMgOEgxMC41QzEwLjc3NjIgOCAxMSA3Ljc3NjE0IDExIDcuNUMxMSA3LjIyMzg2IDEwLjc3NjIgNyAxMC41IDdINC41MDAwM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGpuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjE0OTIxIDMuOTk5OTZDMi4xNDkyMSAyLjk3Nzc4IDIuOTc3ODQgMi4xNDkxNSA0LjAwMDAyIDIuMTQ5MTVDNS4wMjIxOSAyLjE0OTE1IDUuODUwODMgMi45Nzc3OCA1Ljg1MDgzIDMuOTk5OTZDNS44NTA4MyA1LjAyMjEzIDUuMDIyMTkgNS44NTA3NyA0LjAwMDAyIDUuODUwNzdDMi45Nzc4NCA1Ljg1MDc3IDIuMTQ5MjEgNS4wMjIxMyAyLjE0OTIxIDMuOTk5OTZaTTQuMDAwMDIgMS4yNDkxNUMyLjQ4MDc5IDEuMjQ5MTUgMS4yNDkyMSAyLjQ4MDczIDEuMjQ5MjEgMy45OTk5NkMxLjI0OTIxIDUuNTE5MTkgMi40ODA3OSA2Ljc1MDc3IDQuMDAwMDIgNi43NTA3N0M1LjUxOTI1IDYuNzUwNzcgNi43NTA4MyA1LjUxOTE5IDYuNzUwODMgMy45OTk5NkM2Ljc1MDgzIDIuNDgwNzMgNS41MTkyNSAxLjI0OTE1IDQuMDAwMDIgMS4yNDkxNVpNNS44MjAzNCAxMS4wMDAxTDIuNDk5OTggMTIuODM2OVY5LjE2MzMxTDUuODIwMzQgMTEuMDAwMVpNMi42Mzg4MyA4LjIxMTU5QzIuMTcyMjggNy45NTM1IDEuNTk5OTggOC4yOTA5MyAxLjU5OTk4IDguODI0MTFWMTMuMTc2MUMxLjU5OTk4IDEzLjcwOTMgMi4xNzIyOCAxNC4wNDY3IDIuNjM4ODMgMTMuNzg4Nkw2LjU3MjM1IDExLjYxMjZDNy4wNTM4OSAxMS4zNDYyIDcuMDUzODkgMTAuNjU0IDYuNTcyMzUgMTAuMzg3NkwyLjYzODgzIDguMjExNTlaTTguMzAwMDEgOS4wMDAwM0M4LjMwMDAxIDguNjEzNDMgOC42MTM0MSA4LjMwMDAzIDkuMDAwMDEgOC4zMDAwM0gxM0MxMy4zODY2IDguMzAwMDMgMTMuNyA4LjYxMzQzIDEzLjcgOS4wMDAwM1YxM0MxMy43IDEzLjM4NjYgMTMuMzg2NiAxMy43IDEzIDEzLjdIOS4wMDAwMUM4LjYxMzQxIDEzLjcgOC4zMDAwMSAxMy4zODY2IDguMzAwMDEgMTNWOS4wMDAwM1pNOS4yMDAwMSA5LjIwMDAzVjEyLjhIMTIuOFY5LjIwMDAzSDkuMjAwMDFaTTEzLjQ0MzIgMi4xOTMxMUMxMy42MTg5IDIuMDE3MzcgMTMuNjE4OSAxLjczMjQ1IDEzLjQ0MzIgMS41NTY3MUMxMy4yNjc1IDEuMzgwOTggMTIuOTgyNiAxLjM4MDk4IDEyLjgwNjggMS41NTY3MUwxMSAzLjM2MzUzTDkuMTkzMjEgMS41NTY3NEM5LjAxNzQ4IDEuMzgxIDguNzMyNTUgMS4zODEgOC41NTY4MiAxLjU1Njc0QzguMzgxMDggMS43MzI0NyA4LjM4MTA4IDIuMDE3NCA4LjU1NjgyIDIuMTkzMTNMMTAuMzYzNiAzLjk5OTkyTDguNTU2ODIgNS44MDY3MUM4LjM4MTA4IDUuOTgyNDUgOC4zODEwOCA2LjI2NzM3IDguNTU2ODIgNi40NDMxMUM4LjczMjU1IDYuNjE4ODUgOS4wMTc0OCA2LjYxODg1IDkuMTkzMjEgNi40NDMxMUwxMSA0LjYzNjMyTDEyLjgwNjggNi40NDMxNEMxMi45ODI2IDYuNjE4ODcgMTMuMjY3NSA2LjYxODg3IDEzLjQ0MzIgNi40NDMxNEMxMy42MTg5IDYuMjY3NCAxMy42MTg5IDUuOTgyNDcgMTMuNDQzMiA1LjgwNjc0TDExLjYzNjQgMy45OTk5MkwxMy40NDMyIDIuMTkzMTFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxSbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNS41IDNDNC42NzE1NyAzIDQgMy42NzE1NyA0IDQuNUM0IDUuMzI4NDMgNC42NzE1NyA2IDUuNSA2QzYuMzI4NDMgNiA3IDUuMzI4NDMgNyA0LjVDNyAzLjY3MTU3IDYuMzI4NDMgMyA1LjUgM1pNMyA1QzMuMDE2NzEgNSAzLjAzMzIzIDQuOTk5MTggMy4wNDk1MiA0Ljk5NzU4QzMuMjgwMjIgNi4xMzk5IDQuMjg5NjcgNyA1LjUgN0M2LjcxMDMzIDcgNy43MTk3OCA2LjEzOTkgNy45NTA0OCA0Ljk5NzU4QzcuOTY2NzcgNC45OTkxOCA3Ljk4MzI5IDUgOCA1SDEzLjVDMTMuNzc2MSA1IDE0IDQuNzc2MTQgMTQgNC41QzE0IDQuMjIzODYgMTMuNzc2MSA0IDEzLjUgNEg4QzcuOTgzMjkgNCA3Ljk2Njc3IDQuMDAwODIgNy45NTA0OCA0LjAwMjQyQzcuNzE5NzggMi44NjAwOSA2LjcxMDMzIDIgNS41IDJDNC4yODk2NyAyIDMuMjgwMjIgMi44NjAwOSAzLjA0OTUyIDQuMDAyNDJDMy4wMzMyMyA0LjAwMDgyIDMuMDE2NzEgNCAzIDRIMS41QzEuMjIzODYgNCAxIDQuMjIzODYgMSA0LjVDMSA0Ljc3NjE0IDEuMjIzODYgNSAxLjUgNUgzWk0xMS45NTA1IDEwLjk5NzZDMTEuNzE5OCAxMi4xMzk5IDEwLjcxMDMgMTMgOS41IDEzQzguMjg5NjcgMTMgNy4yODAyMiAxMi4xMzk5IDcuMDQ5NTIgMTAuOTk3NkM3LjAzMzIzIDEwLjk5OTIgNy4wMTY3MSAxMSA3IDExSDEuNUMxLjIyMzg2IDExIDEgMTAuNzc2MSAxIDEwLjVDMSAxMC4yMjM5IDEuMjIzODYgMTAgMS41IDEwSDdDNy4wMTY3MSAxMCA3LjAzMzIzIDEwLjAwMDggNy4wNDk1MiAxMC4wMDI0QzcuMjgwMjIgOC44NjAxIDguMjg5NjcgOCA5LjUgOEMxMC43MTAzIDggMTEuNzE5OCA4Ljg2MDEgMTEuOTUwNSAxMC4wMDI0QzExLjk2NjggMTAuMDAwOCAxMS45ODMzIDEwIDEyIDEwSDEzLjVDMTMuNzc2MSAxMCAxNCAxMC4yMjM5IDE0IDEwLjVDMTQgMTAuNzc2MSAxMy43NzYxIDExIDEzLjUgMTFIMTJDMTEuOTgzMyAxMSAxMS45NjY4IDEwLjk5OTIgMTEuOTUwNSAxMC45OTc2Wk04IDEwLjVDOCA5LjY3MTU3IDguNjcxNTcgOSA5LjUgOUMxMC4zMjg0IDkgMTEgOS42NzE1NyAxMSAxMC41QzExIDExLjMyODQgMTAuMzI4NCAxMiA5LjUgMTJDOC42NzE1NyAxMiA4IDExLjMyODQgOCAxMC41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sSW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUgMS41QzUgMS4yMjM4NiA0Ljc3NjE0IDEgNC41IDFDNC4yMjM4NiAxIDQgMS4yMjM4NiA0IDEuNUw0IDdDNCA3LjAxNjcxIDQuMDAwODIgNy4wMzMyMyA0LjAwMjQyIDcuMDQ5NTJDMi44NjAwOSA3LjI4MDIyIDIgOC4yODk2NyAyIDkuNUMyIDEwLjcxMDMgMi44NjAwOSAxMS43MTk4IDQuMDAyNDIgMTEuOTUwNUM0LjAwMDgyIDExLjk2NjggNCAxMS45ODMzIDQgMTJWMTMuNUM0IDEzLjc3NjEgNC4yMjM4NiAxNCA0LjUgMTRDNC43NzYxNCAxNCA1IDEzLjc3NjEgNSAxMy41VjEyQzUgMTEuOTgzMyA0Ljk5OTE4IDExLjk2NjggNC45OTc1OCAxMS45NTA1QzYuMTM5OSAxMS43MTk4IDcgMTAuNzEwMyA3IDkuNUM3IDguMjg5NjcgNi4xMzk5IDcuMjgwMjIgNC45OTc1OCA3LjA0OTUyQzQuOTk5MTggNy4wMzMyMyA1IDcuMDE2NzEgNSA3TDUgMS41Wk0xMSAxLjVDMTEgMS4yMjM4NiAxMC43NzYxIDEgMTAuNSAxQzEwLjIyMzkgMSAxMCAxLjIyMzg2IDEwIDEuNVYzQzEwIDMuMDE2NzEgMTAuMDAwOCAzLjAzMzIzIDEwLjAwMjQgMy4wNDk1MkM4Ljg2MDEgMy4yODAyMiA4IDQuMjg5NjcgOCA1LjVDOCA2LjcxMDMzIDguODYwMSA3LjcxOTc4IDEwLjAwMjQgNy45NTA0OEMxMC4wMDA4IDcuOTY2NzcgMTAgNy45ODMyOSAxMCA4VjEzLjVDMTAgMTMuNzc2MSAxMC4yMjM5IDE0IDEwLjUgMTRDMTAuNzc2MSAxNCAxMSAxMy43NzYxIDExIDEzLjVWOEMxMSA3Ljk4MzI5IDEwLjk5OTIgNy45NjY3NyAxMC45OTc2IDcuOTUwNDhDMTIuMTM5OSA3LjcxOTc4IDEzIDYuNzEwMzMgMTMgNS41QzEzIDQuMjg5NjcgMTIuMTM5OSAzLjI4MDIyIDEwLjk5NzYgMy4wNDk1MkMxMC45OTkyIDMuMDMzMjMgMTEgMy4wMTY3MSAxMSAzVjEuNVpNNC41IDhDMy42NzE1NyA4IDMgOC42NzE1NyAzIDkuNUMzIDEwLjMyODQgMy42NzE1NyAxMSA0LjUgMTFDNS4zMjg0MyAxMSA2IDEwLjMyODQgNiA5LjVDNiA4LjY3MTU3IDUuMzI4NDMgOCA0LjUgOFpNOSA1LjVDOSA0LjY3MTU3IDkuNjcxNTcgNCAxMC41IDRDMTEuMzI4NCA0IDEyIDQuNjcxNTcgMTIgNS41QzEyIDYuMzI4NDMgMTEuMzI4NCA3IDEwLjUgN0M5LjY3MTU3IDcgOSA2LjMyODQzIDkgNS41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuMjU5MjUgMy4xNjY2N0w0LjM3MDM2IDUuMzMzMzNWMUw3LjI1OTI1IDMuMTY2NjdaTTEgOC4yMjIyMkwzLjg4ODg5IDYuMDU1NTVMMSAzLjg4ODg5VjguMjIyMjJaTTEgMTRMMy44ODg4OSAxMS44MzMzTDEgOS42NjY2NlYxNFpNNy43NDA3MiA4LjIyMjIyTDEwLjYyOTYgNi4wNTU1NUw3Ljc0MDcyIDMuODg4ODlWOC4yMjIyMlpNMTQgMy4xNjY2N0wxMS4xMTExIDUuMzMzMzNWMUwxNCAzLjE2NjY3Wk0xMS4xMTExIDExLjExMTFMMTQgOC45NDQ0NEwxMS4xMTExIDYuNzc3NzdWMTEuMTExMVpNMy44ODg4OSAxMS4xMTExTDEgOC45NDQ0NEwzLjg4ODg5IDYuNzc3NzdWMTEuMTExMVpNNC4zNzAzNiA2LjA1NTU1TDcuMjU5MjUgOC4yMjIyMlYzLjg4ODg5TDQuMzcwMzYgNi4wNTU1NVpNMy44ODg4OSA1LjMzMzMzTDEgMy4xNjY2N0wzLjg4ODg5IDFWNS4zMzMzM1pNNy43NDA3MiAzLjE2NjY3TDEwLjYyOTYgNS4zMzMzM1YxTDcuNzQwNzIgMy4xNjY2N1pNMTQgOC4yMjIyMkwxMS4xMTExIDYuMDU1NTVMMTQgMy44ODg4OVY4LjIyMjIyWk0xMS4xMTExIDExLjgzMzNMMTQgMTRWOS42NjY2NkwxMS4xMTExIDExLjgzMzNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxIbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi44OTk5OCAwLjQ5OTk3NkMyLjg5OTk4IDAuMjc5MDYyIDIuNzIwODkgMC4wOTk5NzU2IDIuNDk5OTggMC4wOTk5NzU2QzIuMjc5MDYgMC4wOTk5NzU2IDIuMDk5OTggMC4yNzkwNjIgMi4wOTk5OCAwLjQ5OTk3NlYxLjA5OTk4SDEuNDk5OThDMS4yNzkwNiAxLjA5OTk4IDEuMDk5OTggMS4yNzkwNiAxLjA5OTk4IDEuNDk5OThDMS4wOTk5OCAxLjcyMDg5IDEuMjc5MDYgMS44OTk5OCAxLjQ5OTk4IDEuODk5OThIMi4wOTk5OFYyLjQ5OTk4QzIuMDk5OTggMi43MjA4OSAyLjI3OTA2IDIuODk5OTggMi40OTk5OCAyLjg5OTk4QzIuNzIwODkgMi44OTk5OCAyLjg5OTk4IDIuNzIwODkgMi44OTk5OCAyLjQ5OTk4VjEuODk5OThIMy40OTk5OEMzLjcyMDg5IDEuODk5OTggMy44OTk5OCAxLjcyMDg5IDMuODk5OTggMS40OTk5OEMzLjg5OTk4IDEuMjc5MDYgMy43MjA4OSAxLjA5OTk4IDMuNDk5OTggMS4wOTk5OEgyLjg5OTk4VjAuNDk5OTc2Wk01Ljg5OTk4IDMuNDk5OThDNS44OTk5OCAzLjI3OTA2IDUuNzIwODkgMy4wOTk5OCA1LjQ5OTk4IDMuMDk5OThDNS4yNzkwNiAzLjA5OTk4IDUuMDk5OTggMy4yNzkwNiA1LjA5OTk4IDMuNDk5OThWNC4wOTk5OEg0LjQ5OTk4QzQuMjc5MDYgNC4wOTk5OCA0LjA5OTk4IDQuMjc5MDYgNC4wOTk5OCA0LjQ5OTk4QzQuMDk5OTggNC43MjA4OSA0LjI3OTA2IDQuODk5OTggNC40OTk5OCA0Ljg5OTk4SDUuMDk5OThWNS40OTk5OEM1LjA5OTk4IDUuNzIwODkgNS4yNzkwNiA1Ljg5OTk4IDUuNDk5OTggNS44OTk5OEM1LjcyMDg5IDUuODk5OTggNS44OTk5OCA1LjcyMDg5IDUuODk5OTggNS40OTk5OFY0Ljg5OTk4SDYuNDk5OThDNi43MjA4OSA0Ljg5OTk4IDYuODk5OTggNC43MjA4OSA2Ljg5OTk4IDQuNDk5OThDNi44OTk5OCA0LjI3OTA2IDYuNzIwODkgNC4wOTk5OCA2LjQ5OTk4IDQuMDk5OThINS44OTk5OFYzLjQ5OTk4Wk0xLjg5OTk4IDYuNDk5OThDMS44OTk5OCA2LjI3OTA2IDEuNzIwODkgNi4wOTk5OCAxLjQ5OTk4IDYuMDk5OThDMS4yNzkwNiA2LjA5OTk4IDEuMDk5OTggNi4yNzkwNiAxLjA5OTk4IDYuNDk5OThWNy4wOTk5OEgwLjQ5OTk3NkMwLjI3OTA2MiA3LjA5OTk4IDAuMDk5OTc1NiA3LjI3OTA2IDAuMDk5OTc1NiA3LjQ5OTk4QzAuMDk5OTc1NiA3LjcyMDg5IDAuMjc5MDYyIDcuODk5OTggMC40OTk5NzYgNy44OTk5OEgxLjA5OTk4VjguNDk5OThDMS4wOTk5OCA4LjcyMDg5IDEuMjc5MDYgOC44OTk5NyAxLjQ5OTk4IDguODk5OTdDMS43MjA4OSA4Ljg5OTk3IDEuODk5OTggOC43MjA4OSAxLjg5OTk4IDguNDk5OThWNy44OTk5OEgyLjQ5OTk4QzIuNzIwODkgNy44OTk5OCAyLjg5OTk4IDcuNzIwODkgMi44OTk5OCA3LjQ5OTk4QzIuODk5OTggNy4yNzkwNiAyLjcyMDg5IDcuMDk5OTggMi40OTk5OCA3LjA5OTk4SDEuODk5OThWNi40OTk5OFpNOC41NDQwNiAwLjk4MTg0TDguMjQ2MTggMC45NDE1ODZDOC4wMzI3NSAwLjkxNzY3NiA3LjkwNjkyIDEuMTY1NSA4LjAyOTM2IDEuMzQxOTRDOC4xNzAxMyAxLjU0NDc5IDguMjk5ODEgMS43NTU5MiA4LjQxNzU0IDEuOTc0NDVDOC45MTg3OCAyLjkwNDg1IDkuMjAzMjIgMy45NjkzMiA5LjIwMzIyIDUuMTAwMjJDOS4yMDMyMiA4LjM3MjAxIDYuODIyNDcgMTEuMDg3OCAzLjY5ODg3IDExLjYwOTdDMy40NTczNiAxMS42NSAzLjIwOTg4IDExLjY3NzIgMi45NjAwOCAxMS42OTA2QzIuNzQ1NjMgMTEuNzAyIDIuNjI3MjkgMTEuOTUzNSAyLjc3NzIxIDEyLjEwNzJDMi44NDU1MSAxMi4xNzczIDIuOTE1MzUgMTIuMjQ1OCAyLjk4NjY3IDEyLjMxMjhMMy4wNTg4MyAxMi4zNzk1TDMuMzE4ODMgMTIuNjA0NUwzLjUwNjg0IDEyLjc1MzJMMy42Mjc5NiAxMi44NDMzTDMuODE0OTEgMTIuOTc0MkwzLjk5MDc5IDEzLjA4OUM0LjExMTc1IDEzLjE2NTEgNC4yMzUzNiAxMy4yMzc1IDQuMzYxNTcgMTMuMzA1OUw0LjYyNDk2IDEzLjQ0MTJMNC44ODU1MyAxMy41NjA3TDUuMTg4MzcgMTMuNjgyOEw1LjQzMTY5IDEzLjc2ODZDNS41NjU2NCAxMy44MTI4IDUuNzAxNDkgMTMuODUyOSA1LjgzODU3IDEzLjg4ODVDNS45NDI2MiAxMy45MTU1IDYuMDQ3NjcgMTMuOTQwMSA2LjE1NDA1IDEzLjk2MjJDNi4yNzk5MyAxMy45ODgzIDYuNDA3MTMgMTQuMDEwOSA2LjUzNTQ0IDE0LjAyOThMNi44NTI0MSAxNC4wNjg1TDcuMTE5MzQgMTQuMDg5MkM3LjI0NjM3IDE0LjA5NjUgNy4zNzQzNiAxNC4xMDAyIDcuNTAzMjIgMTQuMTAwMkMxMS4xNDgzIDE0LjEwMDIgMTQuMTAzMiAxMS4xNDUzIDE0LjEwMzIgNy41MDAyM0MxNC4xMDMyIDcuMjUwNDQgMTQuMDg5MyA3LjAwMzg5IDE0LjA2MjMgNi43NjEzMUwxNC4wMjU1IDYuNDg0MDdDMTMuOTkxIDYuMjYwODMgMTMuOTQ1MyA2LjA0MTI5IDEzLjg4OTEgNS44MjY0MkMxMy44MjEzIDUuNTY3MDkgMTMuNzM4MiA1LjMxMzk4IDEzLjY0MDkgNS4wNjg4MUwxMy41Mjc5IDQuODAxMzJMMTMuNDUwNyA0LjYzNTQyTDEzLjM3NjYgNC40ODY2NkMxMy4yMTc4IDQuMTc3NzMgMTMuMDM1MyAzLjg4Mjk1IDEyLjgzMTIgMy42MDQyM0wxMi42NzgyIDMuNDAzNTJMMTIuNDc5MyAzLjE2NDMyTDEyLjMxNTcgMi45ODM2MUwxMi4xOTYxIDIuODU5NTFMMTIuMDM1NSAyLjcwMjQ2TDExLjgxMzQgMi41MDE4NEwxMS40OTI1IDIuMjQxOTFMMTEuMjQ4MyAyLjA2NDk4TDEwLjk1NjIgMS44NzQ0NkwxMC42MzQ2IDEuNjg4OTRMMTAuMzA3MyAxLjUyMzc4TDEwLjE5MzggMS40NzE3Nkw5Ljk1NDg4IDEuMzcwNkw5LjY3NzkxIDEuMjY2OUw5LjQyNTY2IDEuMTg0Nkw5LjEwMDc1IDEuMDk0ODlMOC44MzU5OSAxLjAzNDg2TDguNTQ0MDYgMC45ODE4NFpNMTAuNDAzMiA1LjMwMDIzQzEwLjQwMzIgNC4yNzU4OCAxMC4yMDAyIDMuMjk4MjkgOS44MzI0NCAyLjQwNjA0QzExLjc2MjMgMy4yODk5NSAxMy4xMDMyIDUuMjM4NjIgMTMuMTAzMiA3LjUwMDIzQzEzLjEwMzIgMTAuNTkzIDEwLjU5NiAxMy4xMDAyIDcuNTAzMjIgMTMuMTAwMkM2LjYzNjQ2IDEzLjEwMDIgNS44MTU5NyAxMi45MDM2IDUuMDgzNTUgMTIuNTUyMkM2LjU0MTkgMTIuMDk0MSA3LjgxMDgxIDExLjIwODIgOC43NDMyMiAxMC4wNDE2QzguODc5NjMgMTAuMjI4NCA5LjEwMDI4IDEwLjM0OTcgOS4zNDkyOCAxMC4zNDk3QzkuNzYzNDkgMTAuMzQ5NyAxMC4wOTkzIDEwLjAxMzkgMTAuMDk5MyA5LjU5OTcxQzEwLjA5OTMgOS4yNDI1NiA5Ljg0OTY1IDguOTQzNzMgOS41MTUzNSA4Ljg2ODE2QzkuNTc3NDEgOC43NTE2NSA5LjYzNjUzIDguNjMzMzQgOS42OTI2IDguNTEzMzJDOS44ODM1OCA4LjYzMTYzIDEwLjEwODggOC42OTk5MyAxMC4zNSA4LjY5OTkzQzExLjA0MDMgOC42OTk5MyAxMS42IDguMTQwMjggMTEuNiA3LjQ0OTkzQzExLjYgNi43NTk3NiAxMS4wNDA2IDYuMjAwMjQgMTAuMzUwNSA2LjE5OTkzQzEwLjM4NTMgNS45MDQ4NyAxMC40MDMyIDUuNjA0NjQgMTAuNDAzMiA1LjMwMDIzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuODE4MTkgMC45MzE3OUM3LjY0MjQ1IDAuNzU2MDU0IDcuMzU3NTMgMC43NTYwNTQgNy4xODE3OSAwLjkzMTc5TDUuNDMxNzkgMi42ODE3OUM1LjI1NjA1IDIuODU3NTMgNS4yNTYwNSAzLjE0MjQ1IDUuNDMxNzkgMy4zMTgxOUM1LjYwNzUzIDMuNDkzOTIgNS44OTI0NSAzLjQ5MzkyIDYuMDY4MTkgMy4zMTgxOUw2Ljk5OTk5IDIuMzg2MzhWNS40OTk5OUM2Ljk5OTk5IDUuNzc2MTMgNy4yMjM4NSA1Ljk5OTk5IDcuNDk5OTkgNS45OTk5OUM3Ljc3NjEzIDUuOTk5OTkgNy45OTk5OSA1Ljc3NjEzIDcuOTk5OTkgNS40OTk5OVYyLjM4NjM4TDguOTMxNzkgMy4zMTgxOUM5LjEwNzUzIDMuNDkzOTIgOS4zOTI0NSAzLjQ5MzkyIDkuNTY4MTkgMy4zMTgxOUM5Ljc0MzkyIDMuMTQyNDUgOS43NDM5MiAyLjg1NzUzIDkuNTY4MTkgMi42ODE3OUw3LjgxODE5IDAuOTMxNzlaTTcuOTk5OTkgOS40OTk5OUM3Ljk5OTk5IDkuMjIzODUgNy43NzYxMyA4Ljk5OTk5IDcuNDk5OTkgOC45OTk5OUM3LjIyMzg1IDguOTk5OTkgNi45OTk5OSA5LjIyMzg1IDYuOTk5OTkgOS40OTk5OVYxMi42MTM2TDYuMDY4MTkgMTEuNjgxOEM1Ljg5MjQ1IDExLjUwNjEgNS42MDc1MyAxMS41MDYxIDUuNDMxNzkgMTEuNjgxOEM1LjI1NjA1IDExLjg1NzUgNS4yNTYwNSAxMi4xNDI0IDUuNDMxNzkgMTIuMzE4Mkw3LjE4MTc5IDE0LjA2ODJDNy4zNTc1MyAxNC4yNDM5IDcuNjQyNDUgMTQuMjQzOSA3LjgxODE5IDE0LjA2ODJMOS41NjgxOSAxMi4zMTgyQzkuNzQzOTIgMTIuMTQyNCA5Ljc0MzkyIDExLjg1NzUgOS41NjgxOSAxMS42ODE4QzkuMzkyNDUgMTEuNTA2MSA5LjEwNzUzIDExLjUwNjEgOC45MzE3OSAxMS42ODE4TDcuOTk5OTkgMTIuNjEzNlY5LjQ5OTk5Wk04Ljk5OTk5IDcuNDk5OTlDOC45OTk5OSA3LjIyMzg1IDkuMjIzODUgNi45OTk5OSA5LjQ5OTk5IDYuOTk5OTlIMTIuNjEzNkwxMS42ODE4IDYuMDY4MTlDMTEuNTA2MSA1Ljg5MjQ1IDExLjUwNjEgNS42MDc1MyAxMS42ODE4IDUuNDMxNzlDMTEuODU3NSA1LjI1NjA1IDEyLjE0MjQgNS4yNTYwNSAxMi4zMTgyIDUuNDMxNzlMMTQuMDY4MiA3LjE4MTc5QzE0LjI0MzkgNy4zNTc1MyAxNC4yNDM5IDcuNjQyNDUgMTQuMDY4MiA3LjgxODE5TDEyLjMxODIgOS41NjgxOUMxMi4xNDI0IDkuNzQzOTIgMTEuODU3NSA5Ljc0MzkyIDExLjY4MTggOS41NjgxOUMxMS41MDYxIDkuMzkyNDUgMTEuNTA2MSA5LjEwNzUzIDExLjY4MTggOC45MzE3OUwxMi42MTM2IDcuOTk5OTlIOS40OTk5OUM5LjIyMzg1IDcuOTk5OTkgOC45OTk5OSA3Ljc3NjEzIDguOTk5OTkgNy40OTk5OVpNMy4zMTgxOSA2LjA2ODE5TDIuMzg2MzggNi45OTk5OUg1LjQ5OTk5QzUuNzc2MTMgNi45OTk5OSA1Ljk5OTk5IDcuMjIzODUgNS45OTk5OSA3LjQ5OTk5QzUuOTk5OTkgNy43NzYxMyA1Ljc3NjEzIDcuOTk5OTkgNS40OTk5OSA3Ljk5OTk5SDIuMzg2MzhMMy4zMTgxOSA4LjkzMTc5QzMuNDkzOTIgOS4xMDc1MyAzLjQ5MzkyIDkuMzkyNDUgMy4zMTgxOSA5LjU2ODE5QzMuMTQyNDUgOS43NDM5MiAyLjg1NzUzIDkuNzQzOTIgMi42ODE3OSA5LjU2ODE5TDAuOTMxNzkgNy44MTgxOUMwLjc1NjA1NCA3LjY0MjQ1IDAuNzU2MDU0IDcuMzU3NTMgMC45MzE3OSA3LjE4MTc5TDIuNjgxNzkgNS40MzE3OUMyLjg1NzUzIDUuMjU2MDUgMy4xNDI0NSA1LjI1NjA1IDMuMzE4MTkgNS40MzE3OUMzLjQ5MzkyIDUuNjA3NTMgMy40OTM5MiA1Ljg5MjQ1IDMuMzE4MTkgNi4wNjgxOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFRuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjI1NzgxIDMuMTE2ODRDMy42Nzc3MSAzLjQ1Nzk2IDMuODM1MjMgMy40MzE5MyA0LjYyMzY5IDMuMzc5MzNMMTIuMDU3MSAyLjkzMjk5QzEyLjIxNDcgMi45MzI5OSAxMi4wODM2IDIuNzc1NzEgMTIuMDMxMSAyLjc0OTU3TDEwLjc5NjUgMS44NTcxMUMxMC41NiAxLjY3MzQ3IDEwLjI0NDggMS40NjMxNSA5LjY0MDgzIDEuNTE1NzZMMi40NDMwOCAyLjA0MDc0QzIuMTgwNTkgMi4wNjY3NyAyLjEyODE1IDIuMTk4MDEgMi4yMzI3IDIuMzAzMjJMMy4yNTc4MSAzLjExNjg0Wk0zLjcwNDEgNC44NDkxN1YxMi42NzA0QzMuNzA0MSAxMy4wOTA3IDMuOTE0MTUgMTMuMjQ4IDQuMzg2OTMgMTMuMjIyTDEyLjU1NjIgMTIuNzQ5M0MxMy4wMjkyIDEyLjcyMzMgMTMuMDgxOSAxMi40MzQxIDEzLjA4MTkgMTIuMDkyN1Y0LjMyMzk3QzEzLjA4MTkgMy45ODMwNiAxMi45NTA4IDMuNzk5MjEgMTIuNjYxMiAzLjgyNTQ1TDQuMTI0MjIgNC4zMjM5N0MzLjgwOTE4IDQuMzUwNDQgMy43MDQxIDQuNTA4MDMgMy43MDQxIDQuODQ5MTdaTTExLjc2ODggNS4yNjg3MkMxMS44MjEyIDUuNTA1MTggMTEuNzY4OCA1Ljc0MTQyIDExLjUzMTkgNS43Njc5OUwxMS4xMzgzIDUuODQ2NDFWMTEuNjIwNUMxMC43OTY1IDExLjgwNDIgMTAuNDgxNCAxMS45MDkyIDEwLjIxODggMTEuOTA5MkM5Ljc5ODM1IDExLjkwOTIgOS42OTMwNSAxMS43Nzc5IDkuMzc4MTIgMTEuMzg0NEw2LjgwMzQ1IDcuMzQyNDlWMTEuMjUzMkw3LjYxODE2IDExLjQzN0M3LjYxODE2IDExLjQzNyA3LjYxODE2IDExLjkwOTIgNi45NjA4NiAxMS45MDkyTDUuMTQ4NzkgMTIuMDE0M0M1LjA5NjE1IDExLjkwOTIgNS4xNDg3OSAxMS42NDcgNS4zMzI1OSAxMS41OTQ0TDUuODA1NDYgMTEuNDYzNFY2LjI5Mjc2TDUuMTQ4OSA2LjI0MDE1QzUuMDk2MjUgNi4wMDM2OSA1LjIyNzM5IDUuNjYyNzggNS41OTU0IDUuNjM2MzFMNy41MzkzNSA1LjUwNTI4TDEwLjIxODggOS41OTk4VjUuOTc3NjVMOS41MzU2NCA1Ljg5OTI0QzkuNDgzMiA1LjYxMDE4IDkuNjkzMDUgNS40MDAyOCA5Ljk1NTc2IDUuMzc0MjVMMTEuNzY4OCA1LjI2ODcyWk0xLjgzODc0IDEuMzMyMTJMOS4zMjU1NyAwLjc4MDc4N0MxMC4yNDUgMC43MDE5MzIgMTAuNDgxNSAwLjc1NDc1MyAxMS4wNTk0IDEuMTc0NTJMMTMuNDQ5MiAyLjg1NDI0QzEzLjg0MzYgMy4xNDMwOSAxMy45NzUgMy4yMjE3MyAxMy45NzUgMy41MzY2MVYxMi43NDkzQzEzLjk3NSAxMy4zMjY2IDEzLjc2NDcgMTMuNjY4MSAxMy4wMjkzIDEzLjcyMDNMNC4zMzQ5MiAxNC4yNDU0QzMuNzgyOTEgMTQuMjcxNyAzLjUyMDE5IDE0LjE5MyAzLjIzMTExIDEzLjgyNTNMMS40NzExNiAxMS41NDE5QzEuMTU1OCAxMS4xMjE2IDEuMDI0NjYgMTAuODA3MSAxLjAyNDY2IDEwLjQzOTJWMi4yNTA0MUMxLjAyNDY2IDEuNzc4MjUgMS4yMzUwNCAxLjM4NDQxIDEuODM4NzQgMS4zMzIxMlpcIixmaWxsOm59KSl9LERuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUgMS41QzQuNSA0LjI1IDMgNi41IDMgOUMzIDExLjQ4NTMgNS4wMTQ3MiAxMy41IDcuNSAxMy41QzkuOTg1MjggMTMuNSAxMiAxMS40ODUzIDEyIDlDMTIgNi41IDEwLjUgNC4yNSA3LjUgMS41Wk0xMSA5QzExIDcuMTEyMDMgOS45NzMxNSA1LjI3MTk1IDcuNSAyLjg3MzU3QzUuMDI2ODYgNS4yNzE5NSA0IDcuMTEyMDMgNCA5QzQgMTAuOTMzIDUuNTY3IDEyLjUgNy41IDEyLjVDOS40MzMgMTIuNSAxMSAxMC45MzMgMTEgOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEJuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjQ5OTg1IDEuMTAwMDFDMy4yNzg5NCAxLjEwMDAxIDMuMDk5ODUgMS4yNzkwOSAzLjA5OTg1IDEuNTAwMDFDMy4wOTk4NSAxLjcyMDkyIDMuMjc4OTQgMS45MDAwMSAzLjQ5OTg1IDEuOTAwMDFIMTEuNDk5OUMxMS43MjA4IDEuOTAwMDEgMTEuODk5OSAxLjcyMDkyIDExLjg5OTkgMS41MDAwMUMxMS44OTk5IDEuMjc5MDkgMTEuNzIwOCAxLjEwMDAxIDExLjQ5OTkgMS4xMDAwMUgzLjQ5OTg1Wk00Ljk5OTk1IDQuMjUwMDFDNC45OTk5NSAzLjk3Mzg3IDQuNzc2MDkgMy43NTAwMSA0LjQ5OTk1IDMuNzUwMDFDNC4yMjM4MSAzLjc1MDAxIDMuOTk5OTUgMy45NzM4NyAzLjk5OTk1IDQuMjUwMDFWOS41NTAwMUMzLjk5OTk1IDExLjQ4MyA1LjU2Njk1IDEzLjA1IDcuNDk5OTUgMTMuMDVDOS40MzI5NSAxMy4wNSAxMSAxMS40ODMgMTEgOS41NTAwMVY0LjI1MDAxQzExIDMuOTczODcgMTAuNzc2MSAzLjc1MDAxIDEwLjUgMy43NTAwMUMxMC4yMjM4IDMuNzUwMDEgOS45OTk5NSAzLjk3Mzg3IDkuOTk5OTUgNC4yNTAwMVY5LjU1MDAxQzkuOTk5OTUgMTAuOTMwNyA4Ljg4MDY2IDEyLjA1IDcuNDk5OTUgMTIuMDVDNi4xMTkyNCAxMi4wNSA0Ljk5OTk1IDEwLjkzMDcgNC45OTk5NSA5LjU1MDAxVjQuMjUwMDFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxabj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi44NTcxNCAySDEyLjE0MjlDMTIuNjE2MiAyIDEzIDIuMzgzNzYgMTMgMi44NTcxNFYxMi4xNDI5QzEzIDEyLjYxNjIgMTIuNjE2MiAxMyAxMi4xNDI5IDEzSDIuODU3MTRDMi4zODM3NiAxMyAyIDEyLjYxNjIgMiAxMi4xNDI5VjIuODU3MTRDMiAyLjM4Mzc2IDIuMzgzNzYgMiAyLjg1NzE0IDJaTTEgMi44NTcxNEMxIDEuODMxNDcgMS44MzE0NyAxIDIuODU3MTQgMUgxMi4xNDI5QzEzLjE2ODUgMSAxNCAxLjgzMTQ3IDE0IDIuODU3MTRWMTIuMTQyOUMxNCAxMy4xNjg1IDEzLjE2ODUgMTQgMTIuMTQyOSAxNEgyLjg1NzE0QzEuODMxNDcgMTQgMSAxMy4xNjg1IDEgMTIuMTQyOVYyLjg1NzE0Wk03LjQ5OTg4IDUuMDAwMTJDNy43NzYwMiA1LjAwMDEyIDcuOTk5ODggNC43NzYyNiA3Ljk5OTg4IDQuNTAwMTJDNy45OTk4OCA0LjIyMzk4IDcuNzc2MDIgNC4wMDAxMiA3LjQ5OTg4IDQuMDAwMTJDNy4yMjM3NCA0LjAwMDEyIDYuOTk5ODggNC4yMjM5OCA2Ljk5OTg4IDQuNTAwMTJDNi45OTk4OCA0Ljc3NjI2IDcuMjIzNzQgNS4wMDAxMiA3LjQ5OTg4IDUuMDAwMTJaTTQuNDk5ODggMTEuMDAwMUM0Ljc3NjAyIDExLjAwMDEgNC45OTk4OCAxMC43NzYzIDQuOTk5ODggMTAuNTAwMUM0Ljk5OTg4IDEwLjIyNCA0Ljc3NjAyIDEwLjAwMDEgNC40OTk4OCAxMC4wMDAxQzQuMjIzNzQgMTAuMDAwMSAzLjk5OTg4IDEwLjIyNCAzLjk5OTg4IDEwLjUwMDFDMy45OTk4OCAxMC43NzYzIDQuMjIzNzQgMTEuMDAwMSA0LjQ5OTg4IDExLjAwMDFaTTQuOTk5ODggNy41MDAxMkM0Ljk5OTg4IDcuNzc2MjYgNC43NzYwMiA4LjAwMDEyIDQuNDk5ODggOC4wMDAxMkM0LjIyMzc0IDguMDAwMTIgMy45OTk4OCA3Ljc3NjI2IDMuOTk5ODggNy41MDAxMkMzLjk5OTg4IDcuMjIzOTggNC4yMjM3NCA3LjAwMDEyIDQuNDk5ODggNy4wMDAxMkM0Ljc3NjAyIDcuMDAwMTIgNC45OTk4OCA3LjIyMzk4IDQuOTk5ODggNy41MDAxMlpNNC40OTk4OCA1LjAwMDEyQzQuNzc2MDIgNS4wMDAxMiA0Ljk5OTg4IDQuNzc2MjYgNC45OTk4OCA0LjUwMDEyQzQuOTk5ODggNC4yMjM5OCA0Ljc3NjAyIDQuMDAwMTIgNC40OTk4OCA0LjAwMDEyQzQuMjIzNzQgNC4wMDAxMiAzLjk5OTg4IDQuMjIzOTggMy45OTk4OCA0LjUwMDEyQzMuOTk5ODggNC43NzYyNiA0LjIyMzc0IDUuMDAwMTIgNC40OTk4OCA1LjAwMDEyWk0xMC45OTk5IDEwLjUwMDFDMTAuOTk5OSAxMC43NzYzIDEwLjc3NiAxMS4wMDAxIDEwLjQ5OTkgMTEuMDAwMUMxMC4yMjM3IDExLjAwMDEgOS45OTk4OCAxMC43NzYzIDkuOTk5ODggMTAuNTAwMUM5Ljk5OTg4IDEwLjIyNCAxMC4yMjM3IDEwLjAwMDEgMTAuNDk5OSAxMC4wMDAxQzEwLjc3NiAxMC4wMDAxIDEwLjk5OTkgMTAuMjI0IDEwLjk5OTkgMTAuNTAwMVpNMTAuNDk5OSA4LjAwMDEyQzEwLjc3NiA4LjAwMDEyIDEwLjk5OTkgNy43NzYyNiAxMC45OTk5IDcuNTAwMTJDMTAuOTk5OSA3LjIyMzk4IDEwLjc3NiA3LjAwMDEyIDEwLjQ5OTkgNy4wMDAxMkMxMC4yMjM3IDcuMDAwMTIgOS45OTk4OCA3LjIyMzk4IDkuOTk5ODggNy41MDAxMkM5Ljk5OTg4IDcuNzc2MjYgMTAuMjIzNyA4LjAwMDEyIDEwLjQ5OTkgOC4wMDAxMlpNMTAuOTk5OSA0LjUwMDEyQzEwLjk5OTkgNC43NzYyNiAxMC43NzYgNS4wMDAxMiAxMC40OTk5IDUuMDAwMTJDMTAuMjIzNyA1LjAwMDEyIDkuOTk5ODggNC43NzYyNiA5Ljk5OTg4IDQuNTAwMTJDOS45OTk4OCA0LjIyMzk4IDEwLjIyMzcgNC4wMDAxMiAxMC40OTk5IDQuMDAwMTJDMTAuNzc2IDQuMDAwMTIgMTAuOTk5OSA0LjIyMzk4IDEwLjk5OTkgNC41MDAxMlpNNy40OTk4OCAxMS4wMDAxQzcuNzc2MDIgMTEuMDAwMSA3Ljk5OTg4IDEwLjc3NjMgNy45OTk4OCAxMC41MDAxQzcuOTk5ODggMTAuMjI0IDcuNzc2MDIgMTAuMDAwMSA3LjQ5OTg4IDEwLjAwMDFDNy4yMjM3NCAxMC4wMDAxIDYuOTk5ODggMTAuMjI0IDYuOTk5ODggMTAuNTAwMUM2Ljk5OTg4IDEwLjc3NjMgNy4yMjM3NCAxMS4wMDAxIDcuNDk5ODggMTEuMDAwMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LCRuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjIwMzA3IDEuMDQzMTJDMS4wMDQ4MSAwLjk1NDk5OCAwLjc3MjM0IDEuMDA0OCAwLjYyNzU3NyAxLjE2NjQxQzAuNDgyODEzIDEuMzI4MDIgMC40NTg3OTQgMS41NjQ1NSAwLjU2ODExNiAxLjc1MTk2TDMuOTIxMTUgNy41MDAwMkwwLjU2ODExNiAxMy4yNDgxQzAuNDU4Nzk0IDEzLjQzNTUgMC40ODI4MTMgMTMuNjcyIDAuNjI3NTc3IDEzLjgzMzZDMC43NzIzNCAxMy45OTUyIDEuMDA0ODEgMTQuMDQ1IDEuMjAzMDcgMTMuOTU2OUwxNC43MDMxIDcuOTU2OTJDMTQuODgzNiA3Ljg3NjY3IDE1IDcuNjk3NjEgMTUgNy41MDAwMkMxNSA3LjMwMjQyIDE0Ljg4MzYgNy4xMjMzNiAxNC43MDMxIDcuMDQzMTFMMS4yMDMwNyAxLjA0MzEyWk00Ljg0NTUyIDcuMTAwMDJMMi4yMTIzNCAyLjU4NkwxMy4yNjg5IDcuNTAwMDJMMi4yMTIzNCAxMi40MTRMNC44NDU1MiA3LjkwMDAySDlDOS4yMjA5MSA3LjkwMDAyIDkuNCA3LjcyMDk0IDkuNCA3LjUwMDAyQzkuNCA3LjI3OTExIDkuMjIwOTEgNy4xMDAwMiA5IDcuMTAwMDJINC44NDU1MlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE5uPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02LjA0OTk1IDIuNzQ5OThDNi4wNDk5NSAyLjQ0NjIzIDUuODAzNzEgMi4xOTk5OCA1LjQ5OTk1IDIuMTk5OThDNS4xOTYxOSAyLjE5OTk4IDQuOTQ5OTUgMi40NDYyMyA0Ljk0OTk1IDIuNzQ5OThWMTIuMjVDNC45NDk5NSAxMi41NTM3IDUuMTk2MTkgMTIuOCA1LjQ5OTk1IDEyLjhDNS44MDM3MSAxMi44IDYuMDQ5OTUgMTIuNTUzNyA2LjA0OTk1IDEyLjI1VjIuNzQ5OThaTTEwLjA1IDIuNzQ5OThDMTAuMDUgMi40NDYyMyA5LjgwMzcxIDIuMTk5OTggOS40OTk5NSAyLjE5OTk4QzkuMTk2MTkgMi4xOTk5OCA4Ljk0OTk1IDIuNDQ2MjMgOC45NDk5NSAyLjc0OTk4VjEyLjI1QzguOTQ5OTUgMTIuNTUzNyA5LjE5NjE5IDEyLjggOS40OTk5NSAxMi44QzkuODAzNzEgMTIuOCAxMC4wNSAxMi41NTM3IDEwLjA1IDEyLjI1VjIuNzQ5OThaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxGbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTEuODUzNiAxLjE0NjQ1QzExLjY1ODMgMC45NTExODQgMTEuMzQxNyAwLjk1MTE4NCAxMS4xNDY1IDEuMTQ2NDVMMy43MTQ1NSA4LjU3ODM2QzMuNjI0NTkgOC42NjgzMiAzLjU1MjYzIDguNzc0NjEgMy41MDI1MSA4Ljg5MTU1TDIuMDQwNDQgMTIuMzAzQzEuOTU5OSAxMi40OTEgMi4wMDE4OSAxMi43MDkgMi4xNDY0NiAxMi44NTM2QzIuMjkxMDMgMTIuOTk4MSAyLjUwOTA1IDEzLjA0MDEgMi42OTY5NyAxMi45NTk2TDYuMTA4NDcgMTEuNDk3NUM2LjIyNTQgMTEuNDQ3NCA2LjMzMTcgMTEuMzc1NCA2LjQyMTY2IDExLjI4NTVMMTMuODUzNiAzLjg1MzU1QzE0LjA0ODggMy42NTgyOSAxNC4wNDg4IDMuMzQxNzEgMTMuODUzNiAzLjE0NjQ1TDExLjg1MzYgMS4xNDY0NVpNNC40MjE2NiA5LjI4NTQ3TDExLjUgMi4yMDcxMUwxMi43OTI5IDMuNUw1LjcxNDU1IDEwLjU3ODRMNC4yMTkyNCAxMS4yMTkyTDMuNzgwODEgMTAuNzgwOEw0LjQyMTY2IDkuMjg1NDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxXbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTIuMTQ2NCAxLjE0NjQ1QzEyLjM0MTcgMC45NTExODQgMTIuNjU4MyAwLjk1MTE4NCAxMi44NTM1IDEuMTQ2NDVMMTQuODUzNSAzLjE0NjQ1QzE1LjA0ODggMy4zNDE3MSAxNS4wNDg4IDMuNjU4MjkgMTQuODUzNSAzLjg1MzU1TDEwLjkxMDkgNy43OTYxOEMxMC44MzQ5IDcuODcyMTggMTAuNzQ3MSA3LjkzNTQzIDEwLjY1MSA3Ljk4MzVMNi43MjM1OSA5Ljk0NzIxQzYuNTMxMDkgMTAuMDQzNSA2LjI5ODYxIDEwLjAwNTcgNi4xNDY0MyA5Ljg1MzU1QzUuOTk0MjUgOS43MDEzNyA1Ljk1NjUyIDkuNDY4ODkgNi4wNTI3NyA5LjI3NjM5TDguMDE2NDggNS4zNDg5N0M4LjA2NDU1IDUuMjUyODMgOC4xMjc4IDUuMTY1MDcgOC4yMDM4IDUuMDg5MDdMMTIuMTQ2NCAxLjE0NjQ1Wk0xMi41IDIuMjA3MTFMOC45MTA5MSA1Ljc5NjE4TDcuODcyNjYgNy44NzI2N0w4LjEyNzMxIDguMTI3MzJMMTAuMjAzOCA3LjA4OTA3TDEzLjc5MjkgMy41TDEyLjUgMi4yMDcxMVpNOS45OTk5OCAyTDguOTk5OTggM0g0LjlDNC40NzE3MSAzIDQuMTgwNTYgMy4wMDAzOSAzLjk1NTUyIDMuMDE4NzdDMy43MzYzMSAzLjAzNjY4IDMuNjI0MjEgMy4wNjkxNSAzLjU0NjAxIDMuMTA4OTlDMy4zNTc4NSAzLjIwNDg3IDMuMjA0ODcgMy4zNTc4NSAzLjEwODk5IDMuNTQ2MDFDMy4wNjkxNSAzLjYyNDIxIDMuMDM2NjkgMy43MzYzMSAzLjAxODc4IDMuOTU1NTJDMy4wMDAzOSA0LjE4MDU2IDMgNC40NzE3MSAzIDQuOVYxMS4xQzMgMTEuNTI4MyAzLjAwMDM5IDExLjgxOTQgMy4wMTg3OCAxMi4wNDQ1QzMuMDM2NjkgMTIuMjYzNyAzLjA2OTE1IDEyLjM3NTggMy4xMDg5OSAxMi40NTRDMy4yMDQ4NyAxMi42NDIyIDMuMzU3ODUgMTIuNzk1MSAzLjU0NjAxIDEyLjg5MUMzLjYyNDIxIDEyLjkzMDkgMy43MzYzMSAxMi45NjMzIDMuOTU1NTIgMTIuOTgxMkM0LjE4MDU2IDEyLjk5OTYgNC40NzE3MSAxMyA0LjkgMTNIMTEuMUMxMS41MjgzIDEzIDExLjgxOTQgMTIuOTk5NiAxMi4wNDQ1IDEyLjk4MTJDMTIuMjYzNyAxMi45NjMzIDEyLjM3NTggMTIuOTMwOSAxMi40NTQgMTIuODkxQzEyLjY0MjIgMTIuNzk1MSAxMi43OTUxIDEyLjY0MjIgMTIuODkxIDEyLjQ1NEMxMi45MzA5IDEyLjM3NTggMTIuOTYzMyAxMi4yNjM3IDEyLjk4MTIgMTIuMDQ0NUMxMi45OTk2IDExLjgxOTQgMTMgMTEuNTI4MyAxMyAxMS4xVjYuOTk5OThMMTQgNS45OTk5OFYxMS4xVjExLjEyMDdDMTQgMTEuNTIzMSAxNCAxMS44NTUzIDEzLjk3NzkgMTIuMTI1OUMxMy45NTQ5IDEyLjQwNyAxMy45MDU3IDEyLjY2NTMgMTMuNzgyIDEyLjkwOEMxMy41OTAzIDEzLjI4NDMgMTMuMjg0MyAxMy41OTAzIDEyLjkwOCAxMy43ODJDMTIuNjY1MyAxMy45MDU3IDEyLjQwNyAxMy45NTQ5IDEyLjEyNTkgMTMuOTc3OUMxMS44NTUzIDE0IDExLjUyMzEgMTQgMTEuMTIwNyAxNEgxMS4xSDQuOUg0Ljg3OTM0QzQuNDc2ODYgMTQgNC4xNDQ2OCAxNCAzLjg3NDA5IDEzLjk3NzlDMy41OTMwNCAxMy45NTQ5IDMuMzM0NjkgMTMuOTA1NyAzLjA5MjAyIDEzLjc4MkMyLjcxNTcgMTMuNTkwMyAyLjQwOTczIDEzLjI4NDMgMi4yMTc5OSAxMi45MDhDMi4wOTQzNCAxMi42NjUzIDIuMDQ1MDYgMTIuNDA3IDIuMDIyMSAxMi4xMjU5QzEuOTk5OTkgMTEuODU1MyAxLjk5OTk5IDExLjUyMzEgMiAxMS4xMjA3VjExLjEyMDZWMTEuMVY0LjlWNC44NzkzNVY0Ljg3OTMyVjQuODc5MzFDMS45OTk5OSA0LjQ3Njg1IDEuOTk5OTkgNC4xNDQ2OCAyLjAyMjEgMy44NzQwOUMyLjA0NTA2IDMuNTkzMDQgMi4wOTQzNCAzLjMzNDY5IDIuMjE3OTkgMy4wOTIwMkMyLjQwOTczIDIuNzE1NjkgMi43MTU3IDIuNDA5NzMgMy4wOTIwMiAyLjIxNzk5QzMuMzM0NjkgMi4wOTQzNCAzLjU5MzA0IDIuMDQ1MDYgMy44NzQwOSAyLjAyMjFDNC4xNDQ2OCAxLjk5OTk5IDQuNDc2ODUgMS45OTk5OSA0Ljg3OTMyIDJINC44NzkzNUg0LjlIOS45OTk5OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFVuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUgMC44NzVDNS40OTc5NyAwLjg3NSAzLjg3NSAyLjQ5Nzk3IDMuODc1IDQuNUMzLjg3NSA2LjE1Mjg4IDQuOTgxMjQgNy41NDczOCA2LjQ5MzczIDcuOTgzNTFDNS4yOTk3IDguMTI5MDEgNC4yNzU1NyA4LjU1MTM0IDMuNTA0MDcgOS4zMTE2N0MyLjUyMjE2IDEwLjI3OTQgMi4wMjUwMiAxMS43MiAyLjAyNTAyIDEzLjU5OTlDMi4wMjUwMiAxMy44NjIzIDIuMjM3NjkgMTQuMDc0OSAyLjUwMDAyIDE0LjA3NDlDMi43NjIzNiAxNC4wNzQ5IDIuOTc1MDIgMTMuODYyMyAyLjk3NTAyIDEzLjU5OTlDMi45NzUwMiAxMS44Nzk5IDMuNDI3ODYgMTAuNzIwNiA0LjE3MDkxIDkuOTg4M0M0LjkxNTM2IDkuMjU0NjMgNi4wMjY3NCA4Ljg3NDk5IDcuNDk5OTUgOC44NzQ5OUM4Ljk3MzE3IDguODc0OTkgMTAuMDg0NiA5LjI1NDYzIDEwLjgyOTEgOS45ODgzMUMxMS41NzIxIDEwLjcyMDYgMTIuMDI1IDExLjg3OTkgMTIuMDI1IDEzLjU5OTlDMTIuMDI1IDEzLjg2MjMgMTIuMjM3NiAxNC4wNzQ5IDEyLjUgMTQuMDc0OUMxMi43NjIzIDE0LjA3NSAxMi45NzUgMTMuODYyMyAxMi45NzUgMTMuNkMxMi45NzUgMTEuNzIgMTIuNDc3OCAxMC4yNzk0IDExLjQ5NTkgOS4zMTE2NkMxMC43MjQ0IDguNTUxMzUgOS43MDAyNSA4LjEyOTAzIDguNTA2MjUgNy45ODM1MkMxMC4wMTg3IDcuNTQ3NCAxMS4xMjUgNi4xNTI4OSAxMS4xMjUgNC41QzExLjEyNSAyLjQ5Nzk3IDkuNTAyMDMgMC44NzUgNy41IDAuODc1Wk00LjgyNSA0LjVDNC44MjUgMy4wMjI2NCA2LjAyMjY0IDEuODI1IDcuNSAxLjgyNUM4Ljk3NzM2IDEuODI1IDEwLjE3NSAzLjAyMjY0IDEwLjE3NSA0LjVDMTAuMTc1IDUuOTc3MzYgOC45NzczNiA3LjE3NSA3LjUgNy4xNzVDNi4wMjI2NCA3LjE3NSA0LjgyNSA1Ljk3NzM2IDQuODI1IDQuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHpuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjg1MDAxIDcuNTAwNDNDMS44NTAwMSA0LjM3OTc1IDQuMzc5NjMgMS44NTAwMSA3LjUwMDAxIDEuODUwMDFDMTAuNjIwNCAxLjg1MDAxIDEzLjE1IDQuMzc5NzUgMTMuMTUgNy41MDA0M0MxMy4xNSAxMC42MjExIDEwLjYyMDQgMTMuMTUwOSA3LjUwMDAxIDEzLjE1MDlDNC4zNzk2MyAxMy4xNTA5IDEuODUwMDEgMTAuNjIxMSAxLjg1MDAxIDcuNTAwNDNaTTcuNTAwMDEgMC44NTAwMDZDMy44MjcyOCAwLjg1MDAwNiAwLjg1MDAwNiAzLjgyNzUzIDAuODUwMDA2IDcuNTAwNDNDMC44NTAwMDYgMTEuMTczMyAzLjgyNzI4IDE0LjE1MDkgNy41MDAwMSAxNC4xNTA5QzExLjE3MjcgMTQuMTUwOSAxNC4xNSAxMS4xNzMzIDE0LjE1IDcuNTAwNDNDMTQuMTUgMy44Mjc1MyAxMS4xNzI3IDAuODUwMDA2IDcuNTAwMDEgMC44NTAwMDZaTTcuMDAwMDEgOC4wMDAwMVYzLjEyODExQzcuMTY0MTEgMy4xMDk1NCA3LjMzMDk0IDMuMTAwMDEgNy41MDAwMSAzLjEwMDAxQzkuOTMwMDYgMy4xMDAwMSAxMS45IDUuMDcwMTQgMTEuOSA3LjUwMDQzQzExLjkgNy42NjkzNSAxMS44OTA1IDcuODM2MDQgMTEuODcyIDguMDAwMDFINy4wMDAwMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEduPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zIDUuNUMzIDcuOTgzIDQuOTkxNjkgOSA3IDlWMTIuNUM3IDEyLjc3NjEgNy4yMjM4NiAxMyA3LjUgMTNDNy43NzYxNCAxMyA4IDEyLjc3NjEgOCAxMi41VjlWMy4xSDlWMTIuNUM5IDEyLjc3NjEgOS4yMjM4NiAxMyA5LjUgMTNDOS43NzYxNCAxMyAxMCAxMi43NzYxIDEwIDEyLjVWMy4xSDExLjVDMTEuODAzOCAzLjEgMTIuMDUgMi44NTM3NiAxMi4wNSAyLjU1QzEyLjA1IDIuMjQ2MjQgMTEuODAzOCAyIDExLjUgMkg5LjVIOEg3LjVIN0M0Ljk5MTY5IDIgMyAzLjAxNyAzIDUuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEtuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMy41IDEzLjk1QzEzLjc0ODUgMTMuOTUgMTMuOTUgMTMuNzQ4NSAxMy45NSAxMy41QzEzLjk1IDEzLjI1MTQgMTMuNzQ4NSAxMy4wNSAxMy41IDEzLjA1TDEuNDk5OTUgMTMuMDVDMS4yNTE0MiAxMy4wNSAxLjA0OTk1IDEzLjI1MTQgMS4wNDk5NSAxMy41QzEuMDQ5OTUgMTMuNzQ4NSAxLjI1MTQyIDEzLjk1IDEuNDk5OTUgMTMuOTVMMTMuNSAxMy45NVpNMTEuMDY4MSA3LjU2ODNDMTEuMjQzOSA3LjM5MjU3IDExLjI0MzkgNy4xMDc2NCAxMS4wNjgxIDYuOTMxOTFDMTAuODkyNCA2Ljc1NjE3IDEwLjYwNzUgNi43NTYxNyAxMC40MzE3IDYuOTMxOTFMNy45NDk5MyA5LjQxMzcxTDcuOTQ5OTMgMS40OTk5OEM3Ljk0OTkzIDEuMjUxNDYgNy43NDg0NiAxLjA0OTk4IDcuNDk5OTMgMS4wNDk5OEM3LjI1MTQgMS4wNDk5OCA3LjA0OTkzIDEuMjUxNDYgNy4wNDk5MyAxLjQ5OTk4TDcuMDQ5OTMgOS40MTM3MUw0LjU2ODEzIDYuOTMxOTFDNC4zOTIzOSA2Ljc1NjE3IDQuMTA3NDYgNi43NTYxNyAzLjkzMTczIDYuOTMxOTFDMy43NTU5OSA3LjEwNzY0IDMuNzU1OTkgNy4zOTI1NyAzLjkzMTczIDcuNTY4M0w3LjE4MTczIDEwLjgxODNDNy4zNTc0NiAxMC45OTQgNy42NDIzOSAxMC45OTQgNy44MTgxMiAxMC44MTgzTDExLjA2ODEgNy41NjgzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuMDUwMDUgMTMuNUMyLjA1MDA1IDEzLjc0ODUgMi4yNTE1MiAxMy45NSAyLjUwMDA1IDEzLjk1QzIuNzQ4NTggMTMuOTUgMi45NTAwNSAxMy43NDg1IDIuOTUwMDUgMTMuNUwyLjk1MDA1IDEuNDk5OTVDMi45NTAwNSAxLjI1MTQyIDIuNzQ4NTggMS4wNDk5NSAyLjUwMDA1IDEuMDQ5OTVDMi4yNTE1MiAxLjA0OTk1IDIuMDUwMDUgMS4yNTE0MiAyLjA1MDA1IDEuNDk5OTVMMi4wNTAwNSAxMy41Wk04LjQzMTcgMTEuMDY4MUM4LjYwNzQzIDExLjI0MzkgOC44OTIzNiAxMS4yNDM5IDkuMDY4MDkgMTEuMDY4MUM5LjI0MzgzIDEwLjg5MjQgOS4yNDM4MyAxMC42MDc1IDkuMDY4MDkgMTAuNDMxN0w2LjU4NjI5IDcuOTQ5OTNMMTQuNSA3Ljk0OTkzQzE0Ljc0ODUgNy45NDk5MyAxNC45NSA3Ljc0ODQ2IDE0Ljk1IDcuNDk5OTNDMTQuOTUgNy4yNTE0IDE0Ljc0ODUgNy4wNDk5MyAxNC41IDcuMDQ5OTNMNi41ODYyOSA3LjA0OTkzTDkuMDY4MDkgNC41NjgxM0M5LjI0MzgzIDQuMzkyMzkgOS4yNDM4MyA0LjEwNzQ2IDkuMDY4MDkgMy45MzE3M0M4Ljg5MjM2IDMuNzU1OTkgOC42MDc0MyAzLjc1NTk5IDguNDMxNyAzLjkzMTczTDUuMTgxNyA3LjE4MTczQzUuMDA1OTYgNy4zNTc0NiA1LjAwNTk2IDcuNjQyMzkgNS4xODE3IDcuODE4MTJMOC40MzE3IDExLjA2ODFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxZbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTIuOTUgMS41MDAwNUMxMi45NSAxLjI1MTUyIDEyLjc0ODUgMS4wNTAwNSAxMi41IDEuMDUwMDVDMTIuMjUxNCAxLjA1MDA1IDEyLjA1IDEuMjUxNTIgMTIuMDUgMS41MDAwNUwxMi4wNSAxMy41QzEyLjA1IDEzLjc0ODYgMTIuMjUxNCAxMy45NSAxMi41IDEzLjk1QzEyLjc0ODUgMTMuOTUgMTIuOTUgMTMuNzQ4NiAxMi45NSAxMy41TDEyLjk1IDEuNTAwMDVaTTYuNTY4MyAzLjkzMTg4QzYuMzkyNTcgMy43NTYxNCA2LjEwNzY0IDMuNzU2MTQgNS45MzE5MSAzLjkzMTg4QzUuNzU2MTcgNC4xMDc2MSA1Ljc1NjE3IDQuMzkyNTQgNS45MzE5MSA0LjU2ODI3TDguNDEzNzEgNy4wNTAwN0wwLjQ5OTk4NCA3LjA1MDA3QzAuMjUxNDU2IDcuMDUwMDcgMC4wNDk5ODQ3IDcuMjUxNTUgMC4wNDk5ODQ3IDcuNTAwMDdDMC4wNDk5ODQ2IDcuNzQ4NiAwLjI1MTQ1NyA3Ljk1MDA3IDAuNDk5OTg0IDcuOTUwMDdMOC40MTM3MSA3Ljk1MDA3TDUuOTMxOTEgMTAuNDMxOUM1Ljc1NjE3IDEwLjYwNzYgNS43NTYxNyAxMC44OTI1IDUuOTMxOTEgMTEuMDY4M0M2LjEwNzY0IDExLjI0NCA2LjM5MjU3IDExLjI0NCA2LjU2ODMxIDExLjA2ODNMOS44MTgzIDcuODE4MjdDOS45OTQwNCA3LjY0MjU0IDkuOTk0MDQgNy4zNTc2MSA5LjgxODMgNy4xODE4OEw2LjU2ODMgMy45MzE4OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEpuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjUwMDA1IDEuMDUwMDVDMS4yNTE1MiAxLjA1MDA1IDEuMDUwMDUgMS4yNTE1MiAxLjA1MDA1IDEuNTAwMDVDMS4wNTAwNSAxLjc0ODU4IDEuMjUxNTIgMS45NTAwNSAxLjUwMDA1IDEuOTUwMDVMMTMuNSAxLjk1MDA1QzEzLjc0ODYgMS45NTAwNSAxMy45NSAxLjc0ODU4IDEzLjk1IDEuNTAwMDVDMTMuOTUgMS4yNTE1MiAxMy43NDg2IDEuMDUwMDUgMTMuNSAxLjA1MDA1SDEuNTAwMDVaTTMuOTMxODggNy40MzE2OUMzLjc1NjE0IDcuNjA3NDMgMy43NTYxNCA3Ljg5MjM2IDMuOTMxODggOC4wNjgwOUM0LjEwNzYxIDguMjQzODMgNC4zOTI1NCA4LjI0MzgzIDQuNTY4MjcgOC4wNjgwOUw3LjA1MDA3IDUuNTg2MjlWMTMuNUM3LjA1MDA3IDEzLjc0ODUgNy4yNTE1NSAxMy45NSA3LjUwMDA3IDEzLjk1QzcuNzQ4NiAxMy45NSA3Ljk1MDA3IDEzLjc0ODUgNy45NTAwNyAxMy41TDcuOTUwMDcgNS41ODYyOUwxMC40MzE5IDguMDY4MDlDMTAuNjA3NiA4LjI0MzgzIDEwLjg5MjUgOC4yNDM4MyAxMS4wNjgzIDguMDY4MDlDMTEuMjQ0IDcuODkyMzUgMTEuMjQ0IDcuNjA3NDMgMTEuMDY4MyA3LjQzMTY5TDcuODE4MjcgNC4xODE2OUM3LjY0MjU0IDQuMDA1OTYgNy4zNTc2MSA0LjAwNTk2IDcuMTgxODggNC4xODE2OUwzLjkzMTg4IDcuNDMxNjlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxYbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy4yNDE4MiAyLjMyMTgxQzMuMzkxOSAyLjIzMTMyIDMuNTc4NCAyLjIyNjAxIDMuNzMzMzggMi4zMDc4MUwxMi43MzM0IDcuMDU3ODFDMTIuODk3NCA3LjE0NDM2IDEzIDcuMzE0NTcgMTMgNy41QzEzIDcuNjg1NDMgMTIuODk3NCA3Ljg1NTY0IDEyLjczMzQgNy45NDIxOUwzLjczMzM4IDEyLjY5MjJDMy41Nzg0IDEyLjc3NCAzLjM5MTkgMTIuNzY4NyAzLjI0MTgyIDEyLjY3ODJDMy4wOTE3NSAxMi41ODc3IDMgMTIuNDI1MiAzIDEyLjI1VjIuNzVDMyAyLjU3NDc2IDMuMDkxNzUgMi40MTIzIDMuMjQxODIgMi4zMjE4MVpNNCAzLjU3OTI1VjExLjQyMDdMMTEuNDI4OCA3LjVMNCAzLjU3OTI1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTggMi43NUM4IDIuNDczODYgNy43NzYxNCAyLjI1IDcuNSAyLjI1QzcuMjIzODYgMi4yNSA3IDIuNDczODYgNyAyLjc1VjdIMi43NUMyLjQ3Mzg2IDcgMi4yNSA3LjIyMzg2IDIuMjUgNy41QzIuMjUgNy43NzYxNCAyLjQ3Mzg2IDggMi43NSA4SDdWMTIuMjVDNyAxMi41MjYxIDcuMjIzODYgMTIuNzUgNy41IDEyLjc1QzcuNzc2MTQgMTIuNzUgOCAxMi41MjYxIDggMTIuMjVWOEgxMi4yNUMxMi41MjYxIDggMTIuNzUgNy43NzYxNCAxMi43NSA3LjVDMTIuNzUgNy4yMjM4NiAxMi41MjYxIDcgMTIuMjUgN0g4VjIuNzVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxlcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTk5MSAwLjg3Njg5MkMzLjg0MjIyIDAuODc2ODkyIDAuODc3MDc1IDMuODQyMDQgMC44NzcwNzUgNy40OTk3MkMwLjg3NzA3NSAxMS4xNTc0IDMuODQyMjIgMTQuMTIyNiA3LjQ5OTkxIDE0LjEyMjZDMTEuMTU3NiAxNC4xMjI2IDE0LjEyMjcgMTEuMTU3NCAxNC4xMjI3IDcuNDk5NzJDMTQuMTIyNyAzLjg0MjA0IDExLjE1NzYgMC44NzY4OTIgNy40OTk5MSAwLjg3Njg5MlpNMS44MjcwNyA3LjQ5OTcyQzEuODI3MDcgNC4zNjY3MSA0LjM2Njg5IDEuODI2ODkgNy40OTk5MSAxLjgyNjg5QzEwLjYzMjkgMS44MjY4OSAxMy4xNzI3IDQuMzY2NzEgMTMuMTcyNyA3LjQ5OTcyQzEzLjE3MjcgMTAuNjMyNyAxMC42MzI5IDEzLjE3MjYgNy40OTk5MSAxMy4xNzI2QzQuMzY2ODkgMTMuMTcyNiAxLjgyNzA3IDEwLjYzMjcgMS44MjcwNyA3LjQ5OTcyWk03LjUwMDAzIDRDNy43NzYxNyA0IDguMDAwMDMgNC4yMjM4NiA4LjAwMDAzIDQuNVY3SDEwLjVDMTAuNzc2MiA3IDExIDcuMjIzODYgMTEgNy41QzExIDcuNzc2MTQgMTAuNzc2MiA4IDEwLjUgOEg4LjAwMDAzVjEwLjVDOC4wMDAwMyAxMC43NzYxIDcuNzc2MTcgMTEgNy41MDAwMyAxMUM3LjIyMzg5IDExIDcuMDAwMDMgMTAuNzc2MSA3LjAwMDAzIDEwLjVWOEg0LjUwMDAzQzQuMjIzODkgOCA0LjAwMDAzIDcuNzc2MTQgNC4wMDAwMyA3LjVDNC4wMDAwMyA3LjIyMzg2IDQuMjIzODkgNyA0LjUwMDAzIDdINy4wMDAwM1Y0LjVDNy4wMDAwMyA0LjIyMzg2IDcuMjIzODkgNCA3LjUwMDAzIDRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx0cj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNS4wNzUwNSA0LjEwMDAxQzUuMDc1MDUgMi45MTEwMyA2LjI1NzI3IDEuOTI1MDIgNy41MDAwNSAxLjkyNTAyQzguNzQyODMgMS45MjUwMiA5LjkyNTA1IDIuOTExMDMgOS45MjUwNSA0LjEwMDAxQzkuOTI1MDUgNS4xOTg2MSA5LjM2NzgyIDUuNzE0MzYgOC42MTg1NCA2LjM3ODg0TDguNTg3NTcgNi40MDYzQzcuODQ0ODEgNy4wNjQ2NyA2LjkyNTA1IDcuODc5OTUgNi45MjUwNSA5LjVDNi45MjUwNSA5LjgxNzU3IDcuMTgyNDggMTAuMDc1IDcuNTAwMDUgMTAuMDc1QzcuODE3NjEgMTAuMDc1IDguMDc1MDUgOS44MTc1NyA4LjA3NTA1IDkuNUM4LjA3NTA1IDguNDE1MTcgOC42Mjk0NSA3LjkwNjIzIDkuMzgxNTYgNy4yMzkyNUw5LjQwMjM4IDcuMjIwNzlDMTAuMTQ5NiA2LjU1ODI5IDExLjA3NSA1LjczNzc1IDExLjA3NSA0LjEwMDAxQzExLjA3NSAyLjEyNzU3IDkuMjE4NjkgMC43NzUwMjQgNy41MDAwNSAwLjc3NTAyNEM1Ljc4MTQgMC43NzUwMjQgMy45MjUwNSAyLjEyNzU3IDMuOTI1MDUgNC4xMDAwMUMzLjkyNTA1IDQuNDE3NTggNC4xODI0OSA0LjY3NTAxIDQuNTAwMDUgNC42NzUwMUM0LjgxNzYxIDQuNjc1MDEgNS4wNzUwNSA0LjQxNzU4IDUuMDc1MDUgNC4xMDAwMVpNNy41MDAwNSAxMy4zNTc1QzcuOTgzMyAxMy4zNTc1IDguMzc1MDUgMTIuOTY1NyA4LjM3NTA1IDEyLjQ4MjVDOC4zNzUwNSAxMS45OTkyIDcuOTgzMyAxMS42MDc1IDcuNTAwMDUgMTEuNjA3NUM3LjAxNjggMTEuNjA3NSA2LjYyNTA1IDExLjk5OTIgNi42MjUwNSAxMi40ODI1QzYuNjI1MDUgMTIuOTY1NyA3LjAxNjggMTMuMzU3NSA3LjUwMDA1IDEzLjM1NzVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxucj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC44NzcwNzUgNy40OTk3MkMwLjg3NzA3NSAzLjg0MjA0IDMuODQyMjIgMC44NzY4OTIgNy40OTk5MSAwLjg3Njg5MkMxMS4xNTc2IDAuODc2ODkyIDE0LjEyMjcgMy44NDIwNCAxNC4xMjI3IDcuNDk5NzJDMTQuMTIyNyAxMS4xNTc0IDExLjE1NzYgMTQuMTIyNiA3LjQ5OTkxIDE0LjEyMjZDMy44NDIyMiAxNC4xMjI2IDAuODc3MDc1IDExLjE1NzQgMC44NzcwNzUgNy40OTk3MlpNNy40OTk5MSAxLjgyNjg5QzQuMzY2ODkgMS44MjY4OSAxLjgyNzA4IDQuMzY2NzEgMS44MjcwOCA3LjQ5OTcyQzEuODI3MDggMTAuNjMyNyA0LjM2Njg5IDEzLjE3MjYgNy40OTk5MSAxMy4xNzI2QzEwLjYzMjkgMTMuMTcyNiAxMy4xNzI3IDEwLjYzMjcgMTMuMTcyNyA3LjQ5OTcyQzEzLjE3MjcgNC4zNjY3MSAxMC42MzI5IDEuODI2ODkgNy40OTk5MSAxLjgyNjg5Wk04LjI0OTkzIDEwLjVDOC4yNDk5MyAxMC45MTQyIDcuOTE0MTQgMTEuMjUgNy40OTk5MyAxMS4yNUM3LjA4NTcxIDExLjI1IDYuNzQ5OTMgMTAuOTE0MiA2Ljc0OTkzIDEwLjVDNi43NDk5MyAxMC4wODU4IDcuMDg1NzEgOS43NSA3LjQ5OTkzIDkuNzVDNy45MTQxNCA5Ljc1IDguMjQ5OTMgMTAuMDg1OCA4LjI0OTkzIDEwLjVaTTYuMDUwMDMgNi4yNUM2LjA1MDAzIDUuNTcyMTEgNi42MzUxMSA0LjkyNSA3LjUwMDAzIDQuOTI1QzguMzY0OTYgNC45MjUgOC45NTAwMyA1LjU3MjExIDguOTUwMDMgNi4yNUM4Ljk1MDAzIDYuNzQxMTggOC42ODAwMiA2Ljk5MjEyIDguMjE0NDcgNy4yNzQ5NEM4LjE2MjUxIDcuMzA2NTEgOC4xMDI1OCA3LjM0MTMxIDguMDM4NDcgNy4zNzg1NEw4LjAzODQxIDcuMzc4NThDNy44NTUyMSA3LjQ4NDk3IDcuNjM3ODggNy42MTExOSA3LjQ3NDQ5IDcuNzM4NDlDNy4yMzIxNCA3LjkyNzMyIDYuOTUwMDMgOC4yMzE5OCA2Ljk1MDAzIDguN0M2Ljk1MDA0IDkuMDAzNzYgNy4xOTYyOCA5LjI1IDcuNTAwMDQgOS4yNUM3LjgwMjQgOS4yNSA4LjA0Nzc4IDkuMDA2MDEgOC4wNTAwMiA4LjcwNDE3TDguMDUwNTYgOC43MDMzQzguMDU5MjQgOC42ODk2IDguMDg0OTMgOC42NTczNSA4LjE1MDU4IDguNjA2MkM4LjI1MjA3IDguNTI3MTIgOC4zNjUwOCA4LjQ2MTYzIDguNTE1NjcgOC4zNzQzNkw4LjUxNTcxIDguMzc0MzNDOC41OTQyMiA4LjMyODgzIDguNjgyOTYgOC4yNzc0MSA4Ljc4NTU5IDguMjE1MDZDOS4zMjAwNCA3Ljg5MDM4IDEwLjA1IDcuMzUzODIgMTAuMDUgNi4yNUMxMC4wNSA0LjkyNzg5IDguOTM1MTEgMy44MjUgNy41MDAwMyAzLjgyNUM2LjA2NDk2IDMuODI1IDQuOTUwMDMgNC45Mjc4OSA0Ljk1MDAzIDYuMjVDNC45NTAwMyA2LjU1Mzc2IDUuMTk2MjggNi44IDUuNTAwMDMgNi44QzUuODAzNzkgNi44IDYuMDUwMDMgNi41NTM3NiA2LjA1MDAzIDYuMjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxycj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOS40MjUwMyAzLjQ0MTM2QzEwLjA1NjEgMy4yMzY1NCAxMC43ODM3IDMuMjQwMiAxMS4zNzkyIDMuNTQ2MjNDMTIuNzUzMiA0LjI1MjI0IDEzLjM0NzcgNi4wNzE5MSAxMi43OTQ2IDhDMTIuNTQ2NSA4Ljg2NDkgMTIuMTEwMiA5LjcwNDcyIDExLjE4NjEgMTAuNTUyNEMxMC4yNjIgMTEuNCA4Ljk4MDM0IDExLjkgOC4zODU3MSAxMS45QzguMTcyNjkgMTEuOSA4IDExLjczMjEgOCAxMS41MjVDOCAxMS4zMTc5IDguMTc2NDQgMTEuMTUgOC4zODU3MSAxMS4xNUM5LjA2NDk3IDExLjE1IDkuNjcxODkgMTAuNzgwNCAxMC4zOTA2IDEwLjIzNkMxMC45NDA2IDkuODE5MyAxMS4zNzAxIDkuMjg2MzMgMTEuNjA4IDguODIxOTFDMTIuMDYyOCA3LjkzMzY3IDEyLjA3ODIgNi42ODE3NCAxMS4zNDMzIDYuMzQ5MDFDMTAuOTkwNCA2LjczNDU1IDEwLjUyOTUgNi45NTk0NiA5Ljk3NzI1IDYuOTU5NDZDOC43NzczIDYuOTU5NDYgOC4wNzAxIDUuOTk0MTIgOC4xMDA1MSA1LjEyMDA5QzguMTI5NTcgNC4yODQ3NCA4LjY2MDMyIDMuNjg5NTQgOS40MjUwMyAzLjQ0MTM2Wk0zLjQyNTAzIDMuNDQxMzZDNC4wNTYxNCAzLjIzNjU0IDQuNzgzNjYgMy4yNDAyIDUuMzc5MjMgMy41NDYyM0M2Ljc1MzIgNC4yNTIyNCA3LjM0NzY2IDYuMDcxOTEgNi43OTQ2MiA4QzYuNTQ2NTQgOC44NjQ5IDYuMTEwMTkgOS43MDQ3MiA1LjE4NjEgMTAuNTUyNEM0LjI2MjAxIDExLjQgMi45ODAzNCAxMS45IDIuMzg1NzEgMTEuOUMyLjE3MjY5IDExLjkgMiAxMS43MzIxIDIgMTEuNTI1QzIgMTEuMzE3OSAyLjE3NjQ0IDExLjE1IDIuMzg1NzEgMTEuMTVDMy4wNjQ5NyAxMS4xNSAzLjY3MTg5IDEwLjc4MDQgNC4zOTA1OCAxMC4yMzZDNC45NDA2NSA5LjgxOTMgNS4zNzAxNCA5LjI4NjMzIDUuNjA3OTcgOC44MjE5MUM2LjA2MjgyIDcuOTMzNjcgNi4wNzgyMSA2LjY4MTc0IDUuMzQzMyA2LjM0OTAxQzQuOTkwMzcgNi43MzQ1NSA0LjUyOTQ4IDYuOTU5NDYgMy45NzcyNSA2Ljk1OTQ2QzIuNzc3MyA2Ljk1OTQ2IDIuMDcwMSA1Ljk5NDEyIDIuMTAwNTEgNS4xMjAwOUMyLjEyOTU3IDQuMjg0NzQgMi42NjAzMiAzLjY4OTU0IDMuNDI1MDMgMy40NDEzNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG9yPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTg1IDAuODc3MDQ1QzMuODQyMTYgMC44NzcwNDUgMC44NzcwMTQgMy44NDIxOSAwLjg3NzAxNCA3LjQ5OTg4QzAuODc3MDE0IDExLjE1NzUgMy44NDIxNiAxNC4xMjI3IDcuNDk5ODUgMTQuMTIyN0MxMS4xNTc1IDE0LjEyMjcgMTQuMTIyNyAxMS4xNTc1IDE0LjEyMjcgNy40OTk4OEMxNC4xMjI3IDMuODQyMTkgMTEuMTU3NSAwLjg3NzA0NSA3LjQ5OTg1IDAuODc3MDQ1Wk0xLjgyNzAxIDcuNDk5ODhDMS44MjcwMSA0LjM2Njg2IDQuMzY2ODMgMS44MjcwNCA3LjQ5OTg1IDEuODI3MDRDMTAuNjMyOCAxLjgyNzA0IDEzLjE3MjcgNC4zNjY4NiAxMy4xNzI3IDcuNDk5ODhDMTMuMTcyNyAxMC42MzI5IDEwLjYzMjggMTMuMTcyNyA3LjQ5OTg1IDEzLjE3MjdDNC4zNjY4MyAxMy4xNzI3IDEuODI3MDEgMTAuNjMyOSAxLjgyNzAxIDcuNDk5ODhaTTcuNDk5OTkgOS40OTk5OUM4LjYwNDU2IDkuNDk5OTkgOS40OTk5OSA4LjYwNDU2IDkuNDk5OTkgNy40OTk5OUM5LjQ5OTk5IDYuMzk1NDIgOC42MDQ1NiA1LjQ5OTk5IDcuNDk5OTkgNS40OTk5OUM2LjM5NTQyIDUuNDk5OTkgNS40OTk5OSA2LjM5NTQyIDUuNDk5OTkgNy40OTk5OUM1LjQ5OTk5IDguNjA0NTYgNi4zOTU0MiA5LjQ5OTk5IDcuNDk5OTkgOS40OTk5OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGFyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjIgMUg0LjE3NzQxSDQuMTc3NEMzLjg2OTM2IDAuOTk5OTg4IDMuNjAzNjggMC45OTk5NzggMy4zODYwOSAxLjAyMDY3QzMuMTU1NzYgMS4wNDI1NyAyLjkyODI1IDEuMDkxMTMgMi43MTYyNSAxLjIyMTA0QzIuNTE0NDIgMS4zNDQ3MiAyLjM0NDczIDEuNTE0NDIgMi4yMjEwNCAxLjcxNjI1QzIuMDkxMTMgMS45MjgyNSAyLjA0MjU3IDIuMTU1NzYgMi4wMjA2NyAyLjM4NjA5QzEuOTk5OTggMi42MDM2NyAxLjk5OTk5IDIuODY5MzUgMiAzLjE3NzM4VjMuMTc3NFYzLjJWMTEuOFYxMS44MjI2VjExLjgyMjZDMS45OTk5OSAxMi4xMzA3IDEuOTk5OTggMTIuMzk2MyAyLjAyMDY3IDEyLjYxMzlDMi4wNDI1NyAxMi44NDQyIDIuMDkxMTMgMTMuMDcxNyAyLjIyMTA0IDEzLjI4MzdDMi4zNDQ3MyAxMy40ODU2IDIuNTE0NDIgMTMuNjU1MyAyLjcxNjI1IDEzLjc3OUMyLjkyODI1IDEzLjkwODkgMy4xNTU3NiAxMy45NTc0IDMuMzg2MDkgMTMuOTc5M0MzLjYwMzY4IDE0IDMuODY5MzcgMTQgNC4xNzc0MSAxNEg0LjJIMTAuOEgxMC44MjI2QzExLjEzMDYgMTQgMTEuMzk2MyAxNCAxMS42MTM5IDEzLjk3OTNDMTEuODQ0MiAxMy45NTc0IDEyLjA3MTcgMTMuOTA4OSAxMi4yODM3IDEzLjc3OUMxMi40ODU2IDEzLjY1NTMgMTIuNjU1MyAxMy40ODU2IDEyLjc3OSAxMy4yODM3QzEyLjkwODkgMTMuMDcxNyAxMi45NTc0IDEyLjg0NDIgMTIuOTc5MyAxMi42MTM5QzEzIDEyLjM5NjMgMTMgMTIuMTMwNiAxMyAxMS44MjI2VjExLjhWMy4yVjMuMTc3NDFDMTMgMi44NjkzNiAxMyAyLjYwMzY4IDEyLjk3OTMgMi4zODYwOUMxMi45NTc0IDIuMTU1NzYgMTIuOTA4OSAxLjkyODI1IDEyLjc3OSAxLjcxNjI1QzEyLjY1NTMgMS41MTQ0MiAxMi40ODU2IDEuMzQ0NzIgMTIuMjgzNyAxLjIyMTA0QzEyLjA3MTcgMS4wOTExMyAxMS44NDQyIDEuMDQyNTcgMTEuNjEzOSAxLjAyMDY3QzExLjM5NjMgMC45OTk5NzggMTEuMTMwNiAwLjk5OTk4OCAxMC44MjI2IDFIMTAuOEg0LjJaTTMuMjM4NzUgMi4wNzM2OEMzLjI2NzIyIDIuMDU2MjMgMy4zMjM2MiAyLjAzMTEyIDMuNDgwNzUgMi4wMTYxOEMzLjY0NTMyIDIuMDAwNTMgMy44NjI5OCAyIDQuMiAySDEwLjhDMTEuMTM3IDIgMTEuMzU0NyAyLjAwMDUzIDExLjUxOTMgMi4wMTYxOEMxMS42NzY0IDIuMDMxMTIgMTEuNzMyOCAyLjA1NjIzIDExLjc2MTMgMi4wNzM2OEMxMS44Mjg1IDIuMTE0OTEgMTEuODg1MSAyLjE3MTQ3IDExLjkyNjMgMi4yMzg3NUMxMS45NDM4IDIuMjY3MjIgMTEuOTY4OSAyLjMyMzYyIDExLjk4MzggMi40ODA3NUMxMS45OTk1IDIuNjQ1MzIgMTIgMi44NjI5OCAxMiAzLjJWMTEuOEMxMiAxMi4xMzcgMTEuOTk5NSAxMi4zNTQ3IDExLjk4MzggMTIuNTE5M0MxMS45Njg5IDEyLjY3NjQgMTEuOTQzOCAxMi43MzI4IDExLjkyNjMgMTIuNzYxM0MxMS44ODUxIDEyLjgyODUgMTEuODI4NSAxMi44ODUxIDExLjc2MTMgMTIuOTI2M0MxMS43MzI4IDEyLjk0MzggMTEuNjc2NCAxMi45Njg5IDExLjUxOTMgMTIuOTgzOEMxMS4zNTQ3IDEyLjk5OTUgMTEuMTM3IDEzIDEwLjggMTNINC4yQzMuODYyOTggMTMgMy42NDUzMiAxMi45OTk1IDMuNDgwNzUgMTIuOTgzOEMzLjMyMzYyIDEyLjk2ODkgMy4yNjcyMiAxMi45NDM4IDMuMjM4NzUgMTIuOTI2M0MzLjE3MTQ3IDEyLjg4NTEgMy4xMTQ5MSAxMi44Mjg1IDMuMDczNjggMTIuNzYxM0MzLjA1NjI0IDEyLjczMjggMy4wMzExMiAxMi42NzY0IDMuMDE2MTggMTIuNTE5M0MzLjAwMDUzIDEyLjM1NDcgMyAxMi4xMzcgMyAxMS44VjMuMkMzIDIuODYyOTggMy4wMDA1MyAyLjY0NTMyIDMuMDE2MTggMi40ODA3NUMzLjAzMTEyIDIuMzIzNjIgMy4wNTYyNCAyLjI2NzIyIDMuMDczNjggMi4yMzg3NUMzLjExNDkxIDIuMTcxNDcgMy4xNzE0NyAyLjExNDkxIDMuMjM4NzUgMi4wNzM2OFpNNSAxMEM0LjcyMzg2IDEwIDQuNSAxMC4yMjM5IDQuNSAxMC41QzQuNSAxMC43NzYxIDQuNzIzODYgMTEgNSAxMUg4QzguMjc2MTQgMTEgOC41IDEwLjc3NjEgOC41IDEwLjVDOC41IDEwLjIyMzkgOC4yNzYxNCAxMCA4IDEwSDVaTTQuNSA3LjVDNC41IDcuMjIzODYgNC43MjM4NiA3IDUgN0gxMEMxMC4yNzYxIDcgMTAuNSA3LjIyMzg2IDEwLjUgNy41QzEwLjUgNy43NzYxNCAxMC4yNzYxIDggMTAgOEg1QzQuNzIzODYgOCA0LjUgNy43NzYxNCA0LjUgNy41Wk01IDRDNC43MjM4NiA0IDQuNSA0LjIyMzg2IDQuNSA0LjVDNC41IDQuNzc2MTQgNC43MjM4NiA1IDUgNUgxMEMxMC4yNzYxIDUgMTAuNSA0Ljc3NjE0IDEwLjUgNC41QzEwLjUgNC4yMjM4NiAxMC4yNzYxIDQgMTAgNEg1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0saXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuODQ5OTggNy40OTk5OEMxLjg0OTk4IDQuNjY0NTggNC4wNTk3OSAxLjg0OTk4IDcuNDk5OTggMS44NDk5OEMxMC4yNzgzIDEuODQ5OTggMTEuNjUxNSAzLjkwNjQgMTIuMjM2NyA1SDEwLjVDMTAuMjIzOSA1IDEwIDUuMjIzODYgMTAgNS41QzEwIDUuNzc2MTQgMTAuMjIzOSA2IDEwLjUgNkgxMy41QzEzLjc3NjEgNiAxNCA1Ljc3NjE0IDE0IDUuNVYyLjVDMTQgMi4yMjM4NiAxMy43NzYxIDIgMTMuNSAyQzEzLjIyMzkgMiAxMyAyLjIyMzg2IDEzIDIuNVY0LjMxMzE4QzEyLjI5NTUgMy4wNzEyNiAxMC42NjU5IDAuODQ5OTc2IDcuNDk5OTggMC44NDk5NzZDMy40MzcxNiAwLjg0OTk3NiAwLjg0OTk3NiA0LjE4NTM3IDAuODQ5OTc2IDcuNDk5OThDMC44NDk5NzYgMTAuODE0NiAzLjQzNzE2IDE0LjE1IDcuNDk5OTggMTQuMTVDOS40NDM4MiAxNC4xNSAxMS4wNjIyIDEzLjM4MDggMTIuMjE0NSAxMi4yMDg0QzEyLjgzMTUgMTEuNTgwNiAxMy4zMTMzIDEwLjgzOSAxMy42NDE4IDEwLjA0MDdDMTMuNzQ2OSA5Ljc4NTM2IDEzLjYyNTEgOS40OTMxNSAxMy4zNjk4IDkuMzg4MDZDMTMuMTE0NCA5LjI4Mjk2IDEyLjgyMjIgOS40MDQ3OCAxMi43MTcxIDkuNjYwMTRDMTIuNDM2MyAxMC4zNDI1IDEyLjAyNTEgMTAuOTc0NSAxMS41MDEzIDExLjUwNzRDMTAuNTI5NSAxMi40OTYzIDkuMTY1MDQgMTMuMTUgNy40OTk5OCAxMy4xNUM0LjA1OTc5IDEzLjE1IDEuODQ5OTggMTAuMzM1NCAxLjg0OTk4IDcuNDk5OThaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxscj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC44NTM1NSAyLjE0NjQ1QzUuMDQ4ODIgMi4zNDE3MSA1LjA0ODgyIDIuNjU4MjkgNC44NTM1NSAyLjg1MzU1TDMuNzA3MTEgNEg5QzExLjQ4NTMgNCAxMy41IDYuMDE0NzIgMTMuNSA4LjVDMTMuNSAxMC45ODUzIDExLjQ4NTMgMTMgOSAxM0g1QzQuNzIzODYgMTMgNC41IDEyLjc3NjEgNC41IDEyLjVDNC41IDEyLjIyMzkgNC43MjM4NiAxMiA1IDEySDlDMTAuOTMzIDEyIDEyLjUgMTAuNDMzIDEyLjUgOC41QzEyLjUgNi41NjcgMTAuOTMzIDUgOSA1SDMuNzA3MTFMNC44NTM1NSA2LjE0NjQ1QzUuMDQ4ODIgNi4zNDE3MSA1LjA0ODgyIDYuNjU4MjkgNC44NTM1NSA2Ljg1MzU1QzQuNjU4MjkgNy4wNDg4MiA0LjM0MTcxIDcuMDQ4ODIgNC4xNDY0NSA2Ljg1MzU1TDIuMTQ2NDUgNC44NTM1NUMxLjk1MTE4IDQuNjU4MjkgMS45NTExOCA0LjM0MTcxIDIuMTQ2NDUgNC4xNDY0NUw0LjE0NjQ1IDIuMTQ2NDVDNC4zNDE3MSAxLjk1MTE4IDQuNjU4MjkgMS45NTExOCA0Ljg1MzU1IDIuMTQ2NDVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxzcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy4wNDk5NSAyLjc0OTk1QzMuMDQ5OTUgMi40NDYxOSAyLjgwMzcxIDIuMTk5OTUgMi40OTk5NSAyLjE5OTk1QzIuMTk2MTkgMi4xOTk5NSAxLjk0OTk1IDIuNDQ2MTkgMS45NDk5NSAyLjc0OTk1VjEyLjI1QzEuOTQ5OTUgMTIuNTUzNyAyLjE5NjE5IDEyLjggMi40OTk5NSAxMi44QzIuODAzNzEgMTIuOCAzLjA0OTk1IDEyLjU1MzcgMy4wNDk5NSAxMi4yNVYyLjc0OTk1Wk01LjczMzMzIDIuMzA3NzZDNS41NzgzNSAyLjIyNTk2IDUuMzkxODUgMi4yMzEyNyA1LjI0MTc3IDIuMzIxNzZDNS4wOTE3IDIuNDEyMjUgNC45OTk5NSAyLjU3NDcxIDQuOTk5OTUgMi43NDk5NVYxMi4yNUM0Ljk5OTk1IDEyLjQyNTIgNS4wOTE3IDEyLjU4NzcgNS4yNDE3NyAxMi42NzgxQzUuMzkxODUgMTIuNzY4NiA1LjU3ODM1IDEyLjc3MzkgNS43MzMzMyAxMi42OTIxTDE0LjczMzMgNy45NDIxNEMxNC44OTczIDcuODU1NTkgMTUgNy42ODUzOSAxNSA3LjQ5OTk1QzE1IDcuMzE0NTIgMTQuODk3MyA3LjE0NDMxIDE0LjczMzMgNy4wNTc3Nkw1LjczMzMzIDIuMzA3NzZaTTUuOTk5OTUgMTEuNDIwN1YzLjU3OTJMMTMuNDI4NyA3LjQ5OTk1TDUuOTk5OTUgMTEuNDIwN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGNyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02Ljg1MzU3IDMuODUzNTVMNy42NTM1NSAzLjA1MzUzQzguMjk4MSAyLjQwOTAxIDkuNDI4NTggMS45NjE3MiAxMC41NTIgMS44MDEyNUMxMS4xMDU2IDEuNzIyMTcgMTEuNjI5MSAxLjcxNzI1IDEyLjA1NjQgMS43ODEyNEMxMi40OTg3IDEuODQ3NDggMTIuNzY5OCAxLjk3Njk2IDEyLjg5NjUgMi4xMDM1N0MxMy4wMjMxIDIuMjMwMTggMTMuMTUyNiAyLjUwMTI1IDEzLjIxODggMi45NDM1N0MxMy4yODI4IDMuMzcwODYgMTMuMjc3OSAzLjg5NDM5IDEzLjE5ODggNC40NDgwMUMxMy4wMzgzIDUuNTcxMzkgMTIuNTkxIDYuNzAxODggMTEuOTQ2NCA3LjM0NjQ1TDcuNDk5OTkgMTEuNzkyOUw2LjM1MzU0IDEwLjY0NjVDNi4xNTgyNyAxMC40NTEyIDUuODQxNjkgMTAuNDUxMiA1LjY0NjQzIDEwLjY0NjVDNS40NTExNyAxMC44NDE3IDUuNDUxMTcgMTEuMTU4MyA1LjY0NjQzIDExLjM1MzZMNy4xNDY0NCAxMi44NTM2QzcuMzQxNzEgMTMuMDQ4OCA3LjY1ODI5IDEzLjA0ODggNy44NTM1NSAxMi44NTM2TDguNDAwNzMgMTIuMzA2NEw5LjU3MTI0IDE0LjI1NzJDOS42NTA0NiAxNC4zODkzIDkuNzg2MDggMTQuNDc3NCA5LjkzODkgMTQuNDk2M0MxMC4wOTE3IDE0LjUxNTEgMTAuMjQ0NyAxNC40NjI0IDEwLjM1MzUgMTQuMzUzNkwxMi4zNTM1IDEyLjM1MzZDMTIuNDY0OCAxMi4yNDIzIDEyLjUxNzIgMTIuMDg1MSAxMi40OTUgMTEuOTI5M0wxMi4wMzAzIDguNjc2NzlMMTIuNjUzNiA4LjA1MzU1QzEzLjUwOSA3LjE5ODA4IDE0LjAxMTcgNS44Mjg1NSAxNC4xODg3IDQuNTg5NDNDMTQuMjc4NCAzLjk2MTggMTQuMjg5MSAzLjMzODQ3IDE0LjIwNzggMi43OTU0NkMxNC4xMjg3IDIuMjY3NDggMTMuOTUxOSAxLjc0NDgyIDEzLjYwMzUgMS4zOTY0NUMxMy4yNTUyIDEuMDQ4MDkgMTIuNzMyNSAwLjg3MTMzMiAxMi4yMDQ1IDAuNzkyMjY0QzExLjY2MTUgMC43MTA5NDUgMTEuMDM4MiAwLjcyMTY0NCAxMC40MTA1IDAuODExM0M5LjE3MTQzIDAuOTg4MzA2IDcuODAxODkgMS40OTEgNi45NDY0NCAyLjM0NjQyTDYuMzIzMjIgMi45Njk2OEwzLjA3MDcxIDIuNTA1MDRDMi45MTQ5MiAyLjQ4Mjc4IDIuNzU3NzMgMi41MzUxNyAyLjY0NjQ1IDIuNjQ2NDZMMC42NDY0NTEgNC42NDY0NUMwLjUzNzU3OSA0Ljc1NTMzIDAuNDg0OTM4IDQuOTA4MjkgMC41MDM3NSA1LjA2MTFDMC41MjI1NjMgNS4yMTM5MSAwLjYxMDczIDUuMzQ5NTQgMC43NDI3NTcgNS40Mjg3NkwyLjY5MzY0IDYuNTk5MjhMMi4xNDY0NiA3LjE0NjQ1QzIuMDUyNyA3LjI0MDIyIDIuMDAwMDIgNy4zNjc0IDIuMDAwMDIgNy41MDAwMUMyLjAwMDAyIDcuNjMyNjEgMi4wNTI3IDcuNzU5NzkgMi4xNDY0NiA3Ljg1MzU2TDMuNjQ2NDcgOS4zNTM1NkMzLjg0MTczIDkuNTQ4ODMgNC4xNTgzMSA5LjU0ODgzIDQuMzUzNTcgOS4zNTM1NkM0LjU0ODg0IDkuMTU4MyA0LjU0ODg0IDguODQxNzIgNC4zNTM1NyA4LjY0NjQ2TDMuMjA3MTIgNy41MDAwMUwzLjg1MzU3IDYuODUzNTZMNi44NTM1NyAzLjg1MzU1Wk0xMC4wOTkzIDEzLjE5MzZMOS4xMjk1OSAxMS41Nzc1TDExLjE0NjQgOS41NjA2N0wxMS40Njk3IDExLjgyMzJMMTAuMDk5MyAxMy4xOTM2Wk0zLjQyMjUxIDUuODcwNDFMNS40MzkzNSAzLjg1MzU2TDMuMTc2NzggMy41MzAzNEwxLjgwNjM4IDQuOTAwNzRMMy40MjI1MSA1Ljg3MDQxWk0yLjM1MzU2IDEwLjM1MzVDMi41NDg4MiAxMC4xNTgzIDIuNTQ4ODIgOS44NDE3IDIuMzUzNTYgOS42NDY0NEMyLjE1ODMgOS40NTExOCAxLjg0MTcxIDkuNDUxMTggMS42NDY0NSA5LjY0NjQ0TDAuNjQ2NDUxIDEwLjY0NjRDMC40NTExODggMTAuODQxNyAwLjQ1MTE4OCAxMS4xNTgzIDAuNjQ2NDUxIDExLjM1MzVDMC44NDE3MTMgMTEuNTQ4OCAxLjE1ODMgMTEuNTQ4OCAxLjM1MzU2IDExLjM1MzVMMi4zNTM1NiAxMC4zNTM1Wk0zLjg1MzU4IDExLjg1MzZDNC4wNDg4NCAxMS42NTgzIDQuMDQ4ODUgMTEuMzQxNyAzLjg1MzU5IDExLjE0NjVDMy42NTgzMyAxMC45NTEyIDMuMzQxNzUgMTAuOTUxMiAzLjE0NjQ4IDExLjE0NjVMMS4xNDY0NSAxMy4xNDY0QzAuOTUxMTkgMTMuMzQxNyAwLjk1MTE4NyAxMy42NTgzIDEuMTQ2NDUgMTMuODUzNUMxLjM0MTcxIDE0LjA0ODggMS42NTgyOSAxNC4wNDg4IDEuODUzNTUgMTMuODUzNkwzLjg1MzU4IDExLjg1MzZaTTUuMzUzNTYgMTMuMzUzNUM1LjU0ODgyIDEzLjE1ODMgNS41NDg4MiAxMi44NDE3IDUuMzUzNTYgMTIuNjQ2NEM1LjE1ODMgMTIuNDUxMiA0Ljg0MTcxIDEyLjQ1MTIgNC42NDY0NSAxMi42NDY0TDMuNjQ2NDUgMTMuNjQ2NEMzLjQ1MTE5IDEzLjg0MTcgMy40NTExOSAxNC4xNTgzIDMuNjQ2NDUgMTQuMzUzNUMzLjg0MTcxIDE0LjU0ODggNC4xNTgzIDE0LjU0ODggNC4zNTM1NiAxNC4zNTM1TDUuMzUzNTYgMTMuMzUzNVpNOS40OTk5NyA2Ljc0ODgxQzEwLjE4OTcgNi43NDg4MSAxMC43NDg4IDYuMTg5NyAxMC43NDg4IDUuNUMxMC43NDg4IDQuODEwMyAxMC4xODk3IDQuMjUxMTggOS40OTk5NyA0LjI1MTE4QzguODEwMjYgNC4yNTExOCA4LjI1MTE1IDQuODEwMyA4LjI1MTE1IDUuNUM4LjI1MTE1IDYuMTg5NyA4LjgxMDI2IDYuNzQ4ODEgOS40OTk5NyA2Ljc0ODgxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNTk2NjQgMi45MzYyOEM3Ljc2MDg1IDMuMDY0MDEgOC4wMDAxMiAyLjk0Njk4IDguMDAwMTIgMi43Mzg5NVYxLjk5OTk4QzkuOTgxNDMgMiAxMS4xODQ4IDIuMzYzNyAxMS45MTA1IDMuMDg5NDVDMTIuNjM2MyAzLjgxNTIyIDEzIDUuMDE4NiAxMyA2Ljk5OTk4QzEzIDcuMjc2MTMgMTMuMjIzOSA3LjQ5OTk4IDEzLjUgNy40OTk5OEMxMy43NzYxIDcuNDk5OTggMTQgNy4yNzYxMyAxNCA2Ljk5OTk4QzE0IDQuOTQzOCAxMy42MzI1IDMuMzk3MTkgMTIuNjE3NiAyLjM4MjM0QzExLjYwMjggMS4zNjc1MiAxMC4wNTYyIDAuOTk5OTk5IDguMDAwMTIgMC45OTk5ODRWMC4yNjEyNjZDOC4wMDAxMiAwLjA1MzIyOTMgNy43NjA4NSAtMC4wNjM3OTQ0IDcuNTk2NjQgMC4wNjM5MjhMNi4wMDM4NCAxLjMwMjc3QzUuODc1MTYgMS40MDI4NiA1Ljg3NTE2IDEuNTk3MzUgNi4wMDM4NCAxLjY5NzQ0TDcuNTk2NjQgMi45MzYyOFpNOS41IDVIMi41QzIuMjIzODYgNSAyIDUuMjIzODYgMiA1LjVWMTIuNUMyIDEyLjc3NjEgMi4yMjM4NiAxMyAyLjUgMTNIOS41QzkuNzc2MTQgMTMgMTAgMTIuNzc2MSAxMCAxMi41VjUuNUMxMCA1LjIyMzg2IDkuNzc2MTQgNSA5LjUgNVpNMi41IDRDMS42NzE1NyA0IDEgNC42NzE1NyAxIDUuNVYxMi41QzEgMTMuMzI4NCAxLjY3MTU3IDE0IDIuNSAxNEg5LjVDMTAuMzI4NCAxNCAxMSAxMy4zMjg0IDExIDEyLjVWNS41QzExIDQuNjcxNTcgMTAuMzI4NCA0IDkuNSA0SDIuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGRyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjgxODMyIDAuNjgxNzlDNy42NDI1OCAwLjUwNjA1NCA3LjM1NzY2IDAuNTA2MDU0IDcuMTgxOTIgMC42ODE3OUw1LjE4MTkyIDIuNjgxNzlDNS4wMDYxOSAyLjg1NzUzIDUuMDA2MTkgMy4xNDI0NSA1LjE4MTkyIDMuMzE4MTlDNS4zNTc2NiAzLjQ5MzkyIDUuNjQyNTggMy40OTM5MiA1LjgxODMyIDMuMzE4MTlMNy4wNTAxMiAyLjA4NjM4TDcuMDUwMTIgNS41MDAyM0M3LjA1MDEyIDUuNzQ4NzYgNy4yNTE1OSA1Ljk1MDIzIDcuNTAwMTIgNS45NTAyM0M3Ljc0ODY1IDUuOTUwMjMgNy45NTAxMiA1Ljc0ODc2IDcuOTUwMTIgNS41MDAyM0w3Ljk1MDEyIDIuMDg2MzhMOS4xODE5MiAzLjMxODE5QzkuMzU3NjYgMy40OTM5MiA5LjY0MjU4IDMuNDkzOTIgOS44MTgzMiAzLjMxODE5QzkuOTk0MDYgMy4xNDI0NSA5Ljk5NDA2IDIuODU3NTMgOS44MTgzMiAyLjY4MTc5TDcuODE4MzIgMC42ODE3OVpNNy45NTAxMiAxMi45MTM2VjkuNTAwMjNDNy45NTAxMiA5LjI1MTcgNy43NDg2NSA5LjA1MDIzIDcuNTAwMTIgOS4wNTAyM0M3LjI1MTU5IDkuMDUwMjMgNy4wNTAxMiA5LjI1MTcgNy4wNTAxMiA5LjUwMDIzVjEyLjkxMzZMNS44MTgzMiAxMS42ODE4QzUuNjQyNTggMTEuNTA2MSA1LjM1NzY2IDExLjUwNjEgNS4xODE5MiAxMS42ODE4QzUuMDA2MTkgMTEuODU3NSA1LjAwNjE5IDEyLjE0MjQgNS4xODE5MiAxMi4zMTgyTDcuMTgxOTIgMTQuMzE4MkM3LjI2NjMyIDE0LjQwMjYgNy4zODA3NyAxNC40NSA3LjUwMDEyIDE0LjQ1QzcuNjE5NDcgMTQuNDUgNy43MzM5MyAxNC40MDI2IDcuODE4MzIgMTQuMzE4Mkw5LjgxODMyIDEyLjMxODJDOS45OTQwNiAxMi4xNDI0IDkuOTk0MDYgMTEuODU3NSA5LjgxODMyIDExLjY4MThDOS42NDI1OCAxMS41MDYxIDkuMzU3NjYgMTEuNTA2MSA5LjE4MTkyIDExLjY4MThMNy45NTAxMiAxMi45MTM2Wk0xLjQ5OTk0IDcuMDAwMTdDMS4yMjM4IDcuMDAwMTcgMC45OTk5MzkgNy4yMjQwMyAwLjk5OTkzOSA3LjUwMDE3QzAuOTk5OTM5IDcuNzc2MzEgMS4yMjM4IDguMDAwMTcgMS40OTk5NCA4LjAwMDE3TDEzLjQ5OTkgOC4wMDAxN0MxMy43NzYxIDguMDAwMTcgMTMuOTk5OSA3Ljc3NjMxIDEzLjk5OTkgNy41MDAxN0MxMy45OTk5IDcuMjI0MDMgMTMuNzc2MSA3LjAwMDE3IDEzLjQ5OTkgNy4wMDAxN0wxLjQ5OTk0IDcuMDAwMTdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxwcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTQgMTIuODVMMSAxMi44NUwxIDE0LjE1TDE0IDE0LjE1TDE0IDEyLjg1Wk0xNCA4Ljg1MDAyTDEgOC44NTAwMkwxIDEwLjE1TDE0IDEwLjE1TDE0IDguODUwMDJaTTEgNC44NTAwM0wxNCA0Ljg1MDAzTDE0IDYuMTUwMDNMMSA2LjE1MDAyTDEgNC44NTAwM1pNMTQgMC44NTAwMjVMMSAwLjg1MDAyNUwxIDIuMTUwMDJMMTQgMi4xNTAwMkwxNCAwLjg1MDAyNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGZyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wLjUgNEMwLjIyMzg1OCA0IDAgNC4yMjM4NiAwIDQuNVYxMC41QzAgMTAuNzc2MSAwLjIyMzg1OCAxMSAwLjUgMTFIMTQuNUMxNC43NzYxIDExIDE1IDEwLjc3NjEgMTUgMTAuNVY0LjVDMTUgNC4yMjM4NiAxNC43NzYxIDQgMTQuNSA0SDAuNVpNMSAxMFY1SDIuMDc1VjcuNUMyLjA3NSA3LjczNDcyIDIuMjY1MjggNy45MjUgMi41IDcuOTI1QzIuNzM0NzIgNy45MjUgMi45MjUgNy43MzQ3MiAyLjkyNSA3LjVWNUg0LjA3NVY2LjVDNC4wNzUgNi43MzQ3MiA0LjI2NTI4IDYuOTI1IDQuNSA2LjkyNUM0LjczNDcyIDYuOTI1IDQuOTI1IDYuNzM0NzIgNC45MjUgNi41VjVINi4wNzVWNi41QzYuMDc1IDYuNzM0NzIgNi4yNjUyOCA2LjkyNSA2LjUgNi45MjVDNi43MzQ3MiA2LjkyNSA2LjkyNSA2LjczNDcyIDYuOTI1IDYuNVY1SDguMDc1VjcuNUM4LjA3NSA3LjczNDcyIDguMjY1MjggNy45MjUgOC41IDcuOTI1QzguNzM0NzIgNy45MjUgOC45MjUgNy43MzQ3MiA4LjkyNSA3LjVWNUgxMC4wNzVWNi41QzEwLjA3NSA2LjczNDcyIDEwLjI2NTMgNi45MjUgMTAuNSA2LjkyNUMxMC43MzQ3IDYuOTI1IDEwLjkyNSA2LjczNDcyIDEwLjkyNSA2LjVWNUgxMi4wNzVWNi41QzEyLjA3NSA2LjczNDcyIDEyLjI2NTMgNi45MjUgMTIuNSA2LjkyNUMxMi43MzQ3IDYuOTI1IDEyLjkyNSA2LjczNDcyIDEyLjkyNSA2LjVWNUgxNFYxMEgxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0saHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuNSAwQzAuMjIzODU4IDAgMCAwLjIyMzg1OCAwIDAuNVYxNC41QzAgMTQuNzc2MSAwLjIyMzg1OCAxNSAwLjUgMTVINC41QzQuNzc2MTQgMTUgNSAxNC43NzYxIDUgMTQuNVY1SDE0LjVDMTQuNzc2MSA1IDE1IDQuNzc2MTQgMTUgNC41VjAuNUMxNSAwLjIyMzg1OCAxNC43NzYxIDAgMTQuNSAwSDAuNVpNMSA0LjA3NTA1TDEgMUg0LjA3NTAyQzQuMDc1MDIgMSA0LjA3NTAyIDEgNC4wNzUwMiAxTDQuMDc1MDUgNC4wNzUwN0wxIDQuMDc1MDVaTTAuOTk5OTk3IDQuOTI1MDVMMSAxNEg0VjEyLjkyNUgyLjc1MDAyQzIuNTE1MyAxMi45MjUgMi4zMjUwMiAxMi43MzQ4IDIuMzI1MDIgMTIuNUMyLjMyNTAyIDEyLjI2NTMgMi41MTUzIDEyLjA3NSAyLjc1MDAyIDEyLjA3NUg0VjEwLjkyNUgyLjI1MDAyQzIuMDE1MyAxMC45MjUgMS44MjUwMiAxMC43MzQ3IDEuODI1MDIgMTAuNUMxLjgyNTAyIDEwLjI2NTMgMi4wMTUzIDEwLjA3NSAyLjI1MDAyIDEwLjA3NUg0VjguOTI1MDRMMi43NTAwMiA4LjkyNTAyQzIuNTE1MyA4LjkyNTAyIDIuMzI1MDIgOC43MzQ3NCAyLjMyNTAyIDguNTAwMDJDMi4zMjUwMyA4LjI2NTI5IDIuNTE1MzEgOC4wNzUwMiAyLjc1MDAzIDguMDc1MDJMNCA4LjA3NTA0VjYuOTI1MDJMMi43NDk5OSA2LjkyNUMyLjUxNTI3IDYuOTI1IDIuMzI1IDYuNzM0NzIgMi4zMjUgNi41QzIuMzI1IDYuMjY1MjggMi41MTUyOSA2LjA3NSAyLjc1MDAxIDYuMDc1TDQgNi4wNzUwMlY0LjkyNTA3TDAuOTk5OTk3IDQuOTI1MDVaTTQuOTI1MDUgNEg2LjA3NVYyLjc1MDA2QzYuMDc1IDIuNTE1MzQgNi4yNjUyOCAyLjMyNTA2IDYuNSAyLjMyNTA2QzYuNzM0NzIgMi4zMjUwNiA2LjkyNSAyLjUxNTM0IDYuOTI1IDIuNzUwMDZWNEg4LjA3NTAyVjIuNzUwMDVDOC4wNzUwMiAyLjUxNTMzIDguMjY1MyAyLjMyNTA1IDguNTAwMDIgMi4zMjUwNUM4LjczNDc0IDIuMzI1MDUgOC45MjUwMiAyLjUxNTMzIDguOTI1MDIgMi43NTAwNVY0SDEwLjA3NTFWMi4yNTAwNUMxMC4wNzUxIDIuMDE1MzMgMTAuMjY1MyAxLjgyNTA1IDEwLjUwMDEgMS44MjUwNUMxMC43MzQ4IDEuODI1MDUgMTAuOTI1MSAyLjAxNTMzIDEwLjkyNTEgMi4yNTAwNVY0SDEyLjA3NTFWMi43NTAwNUMxMi4wNzUxIDIuNTE1MzMgMTIuMjY1NCAyLjMyNTA1IDEyLjUwMDEgMi4zMjUwNUMxMi43MzQ4IDIuMzI1MDUgMTIuOTI1MSAyLjUxNTMzIDEyLjkyNTEgMi43NTAwNVY0SDE0VjFINC45MjUwMkw0LjkyNTA1IDRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxncj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiAxLjVDMiAxLjc3NjE0IDEuNzc2MTQgMiAxLjUgMkMxLjIyMzg2IDIgMSAxLjc3NjE0IDEgMS41QzEgMS4yMjM4NiAxLjIyMzg2IDEgMS41IDFDMS43NzYxNCAxIDIgMS4yMjM4NiAyIDEuNVpNMiA1TDIgMTBIMTNWNUgyWk0yIDRDMS40NDc3MiA0IDEgNC40NDc3MiAxIDVWMTBDMSAxMC41NTIzIDEuNDQ3NzIgMTEgMiAxMUgxM0MxMy41NTIzIDExIDE0IDEwLjU1MjMgMTQgMTBWNUMxNCA0LjQ0NzcyIDEzLjU1MjMgNCAxMyA0SDJaTTEuNSAxNEMxLjc3NjE0IDE0IDIgMTMuNzc2MSAyIDEzLjVDMiAxMy4yMjM5IDEuNzc2MTQgMTMgMS41IDEzQzEuMjIzODYgMTMgMSAxMy4yMjM5IDEgMTMuNUMxIDEzLjc3NjEgMS4yMjM4NiAxNCAxLjUgMTRaTTQgMS41QzQgMS43NzYxNCAzLjc3NjE0IDIgMy41IDJDMy4yMjM4NiAyIDMgMS43NzYxNCAzIDEuNUMzIDEuMjIzODYgMy4yMjM4NiAxIDMuNSAxQzMuNzc2MTQgMSA0IDEuMjIzODYgNCAxLjVaTTMuNSAxNEMzLjc3NjE0IDE0IDQgMTMuNzc2MSA0IDEzLjVDNCAxMy4yMjM5IDMuNzc2MTQgMTMgMy41IDEzQzMuMjIzODYgMTMgMyAxMy4yMjM5IDMgMTMuNUMzIDEzLjc3NjEgMy4yMjM4NiAxNCAzLjUgMTRaTTYgMS41QzYgMS43NzYxNCA1Ljc3NjE0IDIgNS41IDJDNS4yMjM4NiAyIDUgMS43NzYxNCA1IDEuNUM1IDEuMjIzODYgNS4yMjM4NiAxIDUuNSAxQzUuNzc2MTQgMSA2IDEuMjIzODYgNiAxLjVaTTUuNSAxNEM1Ljc3NjE0IDE0IDYgMTMuNzc2MSA2IDEzLjVDNiAxMy4yMjM5IDUuNzc2MTQgMTMgNS41IDEzQzUuMjIzODYgMTMgNSAxMy4yMjM5IDUgMTMuNUM1IDEzLjc3NjEgNS4yMjM4NiAxNCA1LjUgMTRaTTggMS41QzggMS43NzYxNCA3Ljc3NjE0IDIgNy41IDJDNy4yMjM4NiAyIDcgMS43NzYxNCA3IDEuNUM3IDEuMjIzODYgNy4yMjM4NiAxIDcuNSAxQzcuNzc2MTQgMSA4IDEuMjIzODYgOCAxLjVaTTcuNSAxNEM3Ljc3NjE0IDE0IDggMTMuNzc2MSA4IDEzLjVDOCAxMy4yMjM5IDcuNzc2MTQgMTMgNy41IDEzQzcuMjIzODYgMTMgNyAxMy4yMjM5IDcgMTMuNUM3IDEzLjc3NjEgNy4yMjM4NiAxNCA3LjUgMTRaTTEwIDEuNUMxMCAxLjc3NjE0IDkuNzc2MTQgMiA5LjUgMkM5LjIyMzg2IDIgOSAxLjc3NjE0IDkgMS41QzkgMS4yMjM4NiA5LjIyMzg2IDEgOS41IDFDOS43NzYxNCAxIDEwIDEuMjIzODYgMTAgMS41Wk05LjUgMTRDOS43NzYxNCAxNCAxMCAxMy43NzYxIDEwIDEzLjVDMTAgMTMuMjIzOSA5Ljc3NjE0IDEzIDkuNSAxM0M5LjIyMzg2IDEzIDkgMTMuMjIzOSA5IDEzLjVDOSAxMy43NzYxIDkuMjIzODYgMTQgOS41IDE0Wk0xMiAxLjVDMTIgMS43NzYxNCAxMS43NzYxIDIgMTEuNSAyQzExLjIyMzkgMiAxMSAxLjc3NjE0IDExIDEuNUMxMSAxLjIyMzg2IDExLjIyMzkgMSAxMS41IDFDMTEuNzc2MSAxIDEyIDEuMjIzODYgMTIgMS41Wk0xMS41IDE0QzExLjc3NjEgMTQgMTIgMTMuNzc2MSAxMiAxMy41QzEyIDEzLjIyMzkgMTEuNzc2MSAxMyAxMS41IDEzQzExLjIyMzkgMTMgMTEgMTMuMjIzOSAxMSAxMy41QzExIDEzLjc3NjEgMTEuMjIzOSAxNCAxMS41IDE0Wk0xNCAxLjVDMTQgMS43NzYxNCAxMy43NzYxIDIgMTMuNSAyQzEzLjIyMzkgMiAxMyAxLjc3NjE0IDEzIDEuNUMxMyAxLjIyMzg2IDEzLjIyMzkgMSAxMy41IDFDMTMuNzc2MSAxIDE0IDEuMjIzODYgMTQgMS41Wk0xMy41IDE0QzEzLjc3NjEgMTQgMTQgMTMuNzc2MSAxNCAxMy41QzE0IDEzLjIyMzkgMTMuNzc2MSAxMyAxMy41IDEzQzEzLjIyMzkgMTMgMTMgMTMuMjIzOSAxMyAxMy41QzEzIDEzLjc3NjEgMTMuMjIzOSAxNCAxMy41IDE0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdnI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTYgMy41QzYgMi42NzE1NyA2LjY3MTU3IDIgNy41IDJDOC4zMjg0MyAyIDkgMi42NzE1NyA5IDMuNUM5IDQuMzI4NDMgOC4zMjg0MyA1IDcuNSA1QzYuNjcxNTcgNSA2IDQuMzI4NDMgNiAzLjVaTTggNS45NDk5OUM5LjE0MTEyIDUuNzE4MzYgMTAgNC43MDk0OCAxMCAzLjVDMTAgMi4xMTkyOSA4Ljg4MDcxIDEgNy41IDFDNi4xMTkyOSAxIDUgMi4xMTkyOSA1IDMuNUM1IDQuNzA5NDggNS44NTg4OCA1LjcxODM2IDcgNS45NDk5OVYxMy41QzcgMTMuNzc2MSA3LjIyMzg2IDE0IDcuNSAxNEM3Ljc3NjE0IDE0IDggMTMuNzc2MSA4IDEzLjVWNS45NDk5OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LENyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMCAzLjVDMTAgNC43MDk0OCA5LjE0MTEyIDUuNzE4MzYgOCA1Ljk0OTk5VjEzLjVDOCAxMy43NzYxIDcuNzc2MTQgMTQgNy41IDE0QzcuMjIzODYgMTQgNyAxMy43NzYxIDcgMTMuNVY1Ljk0OTk5QzUuODU4ODggNS43MTgzNiA1IDQuNzA5NDggNSAzLjVDNSAyLjExOTI5IDYuMTE5MjkgMSA3LjUgMUM4Ljg4MDcxIDEgMTAgMi4xMTkyOSAxMCAzLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxtcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC44NzcwNzUgNy40OTk4OEMwLjg3NzA3NSAzLjg0MjE5IDMuODQyMjIgMC44NzcwNDUgNy40OTk5MSAwLjg3NzA0NUMxMS4xNTc2IDAuODc3MDQ1IDE0LjEyMjcgMy44NDIxOSAxNC4xMjI3IDcuNDk5ODhDMTQuMTIyNyAxMS4xNTc1IDExLjE1NzYgMTQuMTIyNyA3LjQ5OTkxIDE0LjEyMjdDMy44NDIyMiAxNC4xMjI3IDAuODc3MDc1IDExLjE1NzUgMC44NzcwNzUgNy40OTk4OFpNNy40OTk5MSAxLjgyNzA0QzQuMzY2ODkgMS44MjcwNCAxLjgyNzA4IDQuMzY2ODYgMS44MjcwOCA3LjQ5OTg4QzEuODI3MDggMTAuNjMyOSA0LjM2Njg5IDEzLjE3MjcgNy40OTk5MSAxMy4xNzI3QzEwLjYzMjkgMTMuMTcyNyAxMy4xNzI3IDEwLjYzMjkgMTMuMTcyNyA3LjQ5OTg4QzEzLjE3MjcgNC4zNjY4NiAxMC42MzI5IDEuODI3MDQgNy40OTk5MSAxLjgyNzA0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMDVcIixkOlwiTTYuNzgyOTYgMTMuMzc2QzguNzM5MDQgOS45NTI4NCA4LjczOTA0IDUuMDQ3MTkgNi43ODI5NiAxLjYyNDA1TDcuMjE3MDggMS4zNzU5OEM5LjI2MSA0Ljk1MjgzIDkuMjYxIDEwLjA0NzIgNy4yMTcwOCAxMy42MjRMNi43ODI5NiAxMy4zNzZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4xXCIsZDpcIk03LjI4MjA0IDEzLjQ3NzVDOS4yMzkyOSA5Ljk5NTIzIDkuMjM5MjkgNS4wMDQ3NSA3LjI4MjA0IDEuNTIyNDhMNy43MTc5MSAxLjI3NzVDOS43NjA2NyA0LjkxMTkgOS43NjA2NyAxMC4wODgxIDcuNzE3OTEgMTMuNzIyNUw3LjI4MjA0IDEzLjQ3NzVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4xNVwiLGQ6XCJNNy44MjA5OCAxMy41MDY0QzkuNzI1MDIgOS45OTUyMyA5LjcyNjM2IDUuMDE0MTEgNy44MjQ5MiAxLjUwMDg0TDguMjY0NjUgMS4yNjI4NUMxMC4yNDY1IDQuOTI0NjYgMTAuMjQ1MSAxMC4wODUgOC4yNjA1MiAxMy43NDQ4TDcuODIwOTggMTMuNTA2NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjJcIixkOlwiTTguNDEyODQgMTMuNDI5QzEwLjE5NTIgOS45Mjg0MiAxMC4xOTU3IDUuMDc1MzcgOC40MTQzNSAxLjU3NDAyTDguODU5OTkgMS4zNDcyOUMxMC43MTM5IDQuOTkxMTMgMTAuNzEzMyAxMC4wMTI4IDguODU4NDEgMTMuNjU1OUw4LjQxMjg0IDEzLjQyOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjI1XCIsZDpcIk05LjAyNDQxIDEzLjI5NTZDMTAuNjU2NyA5LjgzNzkgMTAuNjU4NiA1LjE3NzE1IDkuMDMwMDUgMS43MTY1Nkw5LjQ4MjQ1IDEuNTAzNjZDMTEuMTc0NSA1LjA5OTE5IDExLjE3MjYgOS45MTYyOSA5LjQ3NjU3IDEzLjUwOTFMOS4wMjQ0MSAxMy4yOTU2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuM1wiLGQ6XCJNOS42NjgwOSAxMy4wNjU1QzExLjEwOTcgOS42OTU3MiAxMS4xMTA3IDUuMzEyMSA5LjY3MDg4IDEuOTQwOTVMMTAuMTMwNyAxLjc0NDU3QzExLjYyNDEgNS4yNDEyMSAxMS42MjMxIDkuNzY2ODMgMTAuMTI3OCAxMy4yNjIyTDkuNjY4MDkgMTMuMDY1NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjM1XCIsZDpcIk0xMC4zMzEgMTIuNzQ1NkMxMS41NTUxIDkuNTIwNzMgMTEuNTU2NCA1LjQ5MTAzIDEwLjMzNDcgMi4yNjQ0NEwxMC44MDI0IDIuMDg3NEMxMi4wNjcyIDUuNDI4MTUgMTIuMDY1OSA5LjU4Mzk0IDEwLjc5ODUgMTIuOTIzMUwxMC4zMzEgMTIuNzQ1NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjRcIixkOlwiTTExLjAxNTUgMTIuMjk4NkMxMS45OTM4IDkuMjk3NDQgMTEuOTk0OCA1LjcxMjk2IDExLjAxODQgMi43MTA2N0wxMS40OTM5IDIuNTU2MDNDMTIuNTAzIDUuNjU4OSAxMi41MDIgOS4zNTE3OCAxMS40OTA5IDEyLjQ1MzVMMTEuMDE1NSAxMi4yOTg2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuNDVcIixkOlwiTTExLjcyMTQgMTEuNjY4QzEyLjQyNTQgOS4wMTMwMyAxMi40MjYyIDUuOTk2OTEgMTEuNzIzNyAzLjM0MTE2TDEyLjIwNzEgMy4yMTMyOUMxMi45MzE4IDUuOTUyOTIgMTIuOTMxIDkuMDU3MjggMTIuMjA0NyAxMS43OTYxTDExLjcyMTQgMTEuNjY4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuNVwiLGQ6XCJNMTIuNDQzMiAxMC43NTJDMTIuODUyNCA4LjYzNzYyIDEyLjg1MjMgNi4zNjA4OSAxMi40NDI5IDQuMjQ2NkwxMi45MzM4IDQuMTUxNTVDMTMuMzU1MyA2LjMyODYxIDEzLjM1NTQgOC42Njk4NSAxMi45MzQxIDEwLjg0N0wxMi40NDMyIDEwLjc1MlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHdyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wLjg3NzA3NSA3LjQ5OTg4QzAuODc3MDc1IDMuODQyMTkgMy44NDIyMiAwLjg3NzA0NSA3LjQ5OTkxIDAuODc3MDQ1QzExLjE1NzYgMC44NzcwNDUgMTQuMTIyNyAzLjg0MjE5IDE0LjEyMjcgNy40OTk4OEMxNC4xMjI3IDExLjE1NzUgMTEuMTU3NiAxNC4xMjI3IDcuNDk5OTEgMTQuMTIyN0MzLjg0MjIyIDE0LjEyMjcgMC44NzcwNzUgMTEuMTU3NSAwLjg3NzA3NSA3LjQ5OTg4Wk03LjQ5OTkxIDEuODI3MDRDNC4zNjY4OSAxLjgyNzA0IDEuODI3MDggNC4zNjY4NiAxLjgyNzA4IDcuNDk5ODhDMS44MjcwOCAxMC42MzI5IDQuMzY2ODkgMTMuMTcyNyA3LjQ5OTkxIDEzLjE3MjdDMTAuNjMyOSAxMy4xNzI3IDEzLjE3MjcgMTAuNjMyOSAxMy4xNzI3IDcuNDk5ODhDMTMuMTcyNyA0LjM2Njg2IDEwLjYzMjkgMS44MjcwNCA3LjQ5OTkxIDEuODI3MDRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4wNVwiLGQ6XCJNMTIuMTYxOSAzLjg1MTgyQzguMzU4MTcgNC44ODkxOCA0Ljg4OTM2IDguMzU4IDMuODUxOTkgMTIuMTYxN0wzLjM2OTYgMTIuMDMwMUM0LjQ1MzU2IDguMDU1NjQgOC4wNTU4MSA0LjQ1MzM5IDEyLjAzMDMgMy4zNjk0M0wxMi4xNjE5IDMuODUxODJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4xXCIsZDpcIk0xMS44ODA3IDMuNDI3MDdDOC4wMzQ0MSA0LjUwNTQyIDQuNTA1NjEgOC4wMzQyMiAzLjQyNzI2IDExLjg4MDVMMi45NDU4MiAxMS43NDU2QzQuMDcxMjkgNy43MzEyMSA3LjczMTQgNC4wNzExIDExLjc0NTggMi45NDU2M0wxMS44ODA3IDMuNDI3MDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4xNVwiLGQ6XCJNMTEuNTIwMSAzLjAyNTU2QzcuNjkwOTIgNC4xNjE5OSA0LjE2Nzc5IDcuNjgzMjMgMy4wMjgwNSAxMS41MTJMMi41NDg4MyAxMS4zNjk0QzMuNzM2NzYgNy4zNzg2OSA3LjM4NjU5IDMuNzMwNzYgMTEuMzc3OCAyLjU0NjIzTDExLjUyMDEgMy4wMjU1NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjJcIixkOlwiTTExLjA0NjggMi42NjE2OUM3LjMxMTE3IDMuODc2NjQgMy44NzkxOCA3LjMwNzkgMi42NjI5OCAxMS4wNDM0TDIuMTg3NTQgMTAuODg4NkMzLjQ1MzI0IDcuMDAxMDkgNy4wMDQ0NSAzLjQ1MDYyIDEwLjg5MjEgMi4xODYyMUwxMS4wNDY4IDIuNjYxNjlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4yNVwiLGQ6XCJNMTAuNTIwMSAyLjMyMzY1QzYuOTIwOTEgMy42MTQ0NyAzLjYyMzkxIDYuOTA4NzYgMi4zMjg0NSAxMC41MDczTDEuODU4IDEwLjMzOEMzLjIwMzk4IDYuNTk5MDkgNi42MTE1NSAzLjE5NDI0IDEwLjM1MTMgMS44NTMwMUwxMC41MjAxIDIuMzIzNjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4zXCIsZDpcIk05LjkwMjIyIDIuMDMxMjJDNi41MDAwMyAzLjM5NDY1IDMuMzk5NjggNi40OTM2NyAyLjAzMzk5IDkuODk1NTFMMS41Njk5OCA5LjcwOTI0QzIuOTg2NTEgNi4xODA3NiA2LjE4NzI4IDIuOTgxMzMgOS43MTYyMiAxLjU2NzFMOS45MDIyMiAyLjAzMTIyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMzVcIixkOlwiTTkuMjA3MjcgMS43ODg3M0M2LjA2MTM2IDMuMjAzNDkgMy4yMTEwMyA2LjA1MjAzIDEuNzkzMzEgOS4xOTczOEwxLjMzNzQ3IDguOTkxOTJDMi44MDUzNiA1LjczNTI4IDUuNzQ0ODUgMi43OTc2IDkuMDAyMiAxLjMzMjcyTDkuMjA3MjcgMS43ODg3M1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjRcIixkOlwiTTguNDA3MTMgMS42MjA4NUM1LjU5MzIzIDMuMDUxMTcgMy4wNTc5NCA1LjU4NTA5IDEuNjI1NDQgOC4zOTg0N0wxLjE3OTg3IDguMTcxNkMyLjY2MDM2IDUuMjYzOTcgNS4yNzIzMiAyLjY1MzQgOC4xODA1NyAxLjE3NTEzTDguNDA3MTMgMS42MjA4NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjQ1XCIsZDpcIk03LjQ2MjA3IDEuNTY3NDdDNS4wODY4OSAyLjk0Njk1IDIuOTUzNjIgNS4wNzkxMiAxLjU3MjQ5IDcuNDUzNzlMMS4xNDAyOCA3LjIwMjQxQzIuNTY1MDMgNC43NTI3MyA0Ljc2MDcgMi41NTgxOCA3LjIxMDk2IDEuMTM1MUw3LjQ2MjA3IDEuNTY3NDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi41XCIsZDpcIk02LjMwNDA3IDEuNzA0ODdDNC41MTk2NCAyLjkxMDYzIDIuOTA5ODMgNC41MjA2MSAxLjcwNDMgNi4zMDUxM0wxLjI4OTk4IDYuMDI1MjRDMi41MzEzIDQuMTg3NzMgNC4xODY3MyAyLjUzMjE0IDYuMDI0MTMgMS4yOTA1OUw2LjMwNDA3IDEuNzA0ODdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxicj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTk5MSAwLjg3NzA0NUMzLjg0MjIyIDAuODc3MDQ1IDAuODc3MDc1IDMuODQyMTkgMC44NzcwNzUgNy40OTk4OEMwLjg3NzA3NSA5LjE0ODggMS40Nzk2OSAxMC42NTcgMi40NzY3IDExLjgxNjJMMS42NDY0NyAxMi42NDY0QzEuNDUxMjEgMTIuODQxNyAxLjQ1MTIxIDEzLjE1ODMgMS42NDY0NyAxMy4zNTM1QzEuODQxNzMgMTMuNTQ4OCAyLjE1ODMyIDEzLjU0ODggMi4zNTM1OCAxMy4zNTM1TDMuMTgzODMgMTIuNTIzM0M0LjM0MzAyIDEzLjUyMDIgNS44NTExIDE0LjEyMjcgNy40OTk5MSAxNC4xMjI3QzExLjE1NzYgMTQuMTIyNyAxNC4xMjI3IDExLjE1NzUgMTQuMTIyNyA3LjQ5OTg4QzE0LjEyMjcgNS44NTEwNyAxMy41MjAyIDQuMzQyOTggMTIuNTIzMyAzLjE4MzhMMTMuMzUzNiAyLjM1MzU1QzEzLjU0ODggMi4xNTgyOSAxMy41NDg4IDEuODQxNyAxMy4zNTM2IDEuNjQ2NDRDMTMuMTU4MyAxLjQ1MTE4IDEyLjg0MTcgMS40NTExOCAxMi42NDY1IDEuNjQ2NDRMMTEuODE2MiAyLjQ3NjY3QzEwLjY1NyAxLjQ3OTY2IDkuMTQ4ODMgMC44NzcwNDUgNy40OTk5MSAwLjg3NzA0NVpNMTEuMTQyMyAzLjE1MDY1QzEwLjE1NjggMi4zMjQ0OSA4Ljg4NjQ0IDEuODI3MDQgNy40OTk5MSAxLjgyNzA0QzQuMzY2ODkgMS44MjcwNCAxLjgyNzA4IDQuMzY2ODYgMS44MjcwOCA3LjQ5OTg4QzEuODI3MDggOC44ODY0MSAyLjMyNDUyIDEwLjE1NjggMy4xNTA2OSAxMS4xNDIyTDExLjE0MjMgMy4xNTA2NVpNMy44NTc4MSAxMS44NDkzQzQuODQzMjIgMTIuNjc1MyA2LjExMzQ4IDEzLjE3MjcgNy40OTk5MSAxMy4xNzI3QzEwLjYzMjkgMTMuMTcyNyAxMy4xNzI3IDEwLjYzMjkgMTMuMTcyNyA3LjQ5OTg4QzEzLjE3MjcgNi4xMTM0NSAxMi42NzU0IDQuODQzMTkgMTEuODQ5MyAzLjg1Nzc4TDMuODU3ODEgMTEuODQ5M1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjA1XCIsZDpcIk02Ljc4Mjk2IDEzLjM3NkM4LjczOTA0IDkuOTUyODQgOC43MzkwNCA1LjA0NzE5IDYuNzgyOTYgMS42MjQwNUw3LjIxNzA4IDEuMzc1OThDOS4yNjEgNC45NTI4MyA5LjI2MSAxMC4wNDcyIDcuMjE3MDggMTMuNjI0TDYuNzgyOTYgMTMuMzc2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMVwiLGQ6XCJNNy4yODIwNCAxMy40Nzc1QzkuMjM5MjkgOS45OTUyMyA5LjIzOTI5IDUuMDA0NzUgNy4yODIwNCAxLjUyMjQ4TDcuNzE3OTEgMS4yNzc1QzkuNzYwNjcgNC45MTE5IDkuNzYwNjcgMTAuMDg4MSA3LjcxNzkxIDEzLjcyMjVMNy4yODIwNCAxMy40Nzc1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMTVcIixkOlwiTTcuODIwOTggMTMuNTA2NEM5LjcyNTAyIDkuOTk1MjMgOS43MjYzNiA1LjAxNDExIDcuODI0OTIgMS41MDA4NEw4LjI2NDY1IDEuMjYyODVDMTAuMjQ2NSA0LjkyNDY2IDEwLjI0NTEgMTAuMDg1IDguMjYwNTIgMTMuNzQ0OEw3LjgyMDk4IDEzLjUwNjRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4yXCIsZDpcIk04LjQxMjg0IDEzLjQyOUMxMC4xOTUyIDkuOTI4NDIgMTAuMTk1NyA1LjA3NTM3IDguNDE0MzUgMS41NzQwMkw4Ljg1OTk5IDEuMzQ3MjlDMTAuNzEzOSA0Ljk5MTEzIDEwLjcxMzMgMTAuMDEyOCA4Ljg1ODQxIDEzLjY1NTlMOC40MTI4NCAxMy40MjlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4yNVwiLGQ6XCJNOS4wMjQ0MSAxMy4yOTU2QzEwLjY1NjcgOS44Mzc5IDEwLjY1ODYgNS4xNzcxNSA5LjAzMDA1IDEuNzE2NTZMOS40ODI0NSAxLjUwMzY2QzExLjE3NDUgNS4wOTkxOSAxMS4xNzI2IDkuOTE2MjkgOS40NzY1NyAxMy41MDkxTDkuMDI0NDEgMTMuMjk1NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjNcIixkOlwiTTkuNjY4MDkgMTMuMDY1NUMxMS4xMDk3IDkuNjk1NzIgMTEuMTEwNyA1LjMxMjEgOS42NzA4OCAxLjk0MDk1TDEwLjEzMDcgMS43NDQ1N0MxMS42MjQxIDUuMjQxMjEgMTEuNjIzMSA5Ljc2NjgzIDEwLjEyNzggMTMuMjYyMkw5LjY2ODA5IDEzLjA2NTVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4zNVwiLGQ6XCJNMTAuMzMxIDEyLjc0NTZDMTEuNTU1MSA5LjUyMDczIDExLjU1NjQgNS40OTEwMyAxMC4zMzQ3IDIuMjY0NDRMMTAuODAyNCAyLjA4NzRDMTIuMDY3MiA1LjQyODE1IDEyLjA2NTkgOS41ODM5NCAxMC43OTg1IDEyLjkyMzFMMTAuMzMxIDEyLjc0NTZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi40XCIsZDpcIk0xMS4wMTU1IDEyLjI5ODZDMTEuOTkzOCA5LjI5NzQ0IDExLjk5NDggNS43MTI5NiAxMS4wMTg0IDIuNzEwNjdMMTEuNDkzOSAyLjU1NjAzQzEyLjUwMyA1LjY1ODkgMTIuNTAyIDkuMzUxNzggMTEuNDkwOSAxMi40NTM1TDExLjAxNTUgMTIuMjk4NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjQ1XCIsZDpcIk0xMS43MjE0IDExLjY2OEMxMi40MjU0IDkuMDEzMDMgMTIuNDI2MiA1Ljk5NjkxIDExLjcyMzcgMy4zNDExNkwxMi4yMDcxIDMuMjEzMjlDMTIuOTMxOCA1Ljk1MjkyIDEyLjkzMSA5LjA1NzI4IDEyLjIwNDcgMTEuNzk2MUwxMS43MjE0IDExLjY2OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjVcIixkOlwiTTEyLjQ0MzIgMTAuNzUyQzEyLjg1MjQgOC42Mzc2MiAxMi44NTIzIDYuMzYwODkgMTIuNDQyOSA0LjI0NjZMMTIuOTMzOCA0LjE1MTU1QzEzLjM1NTMgNi4zMjg2MSAxMy4zNTU0IDguNjY5ODUgMTIuOTM0MSAxMC44NDdMMTIuNDQzMiAxMC43NTJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx5cj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMDVcIixkOlwiTTEyLjEzOTggMy44ODYxNkMxMy44NTUzIDQuOTQxNTkgMTUgNi44MzcgMTUgOC45OTk5OUMxNSAxMi4zMTM3IDEyLjMxMzcgMTUgOS4wMDAwMSAxNUM2Ljg0MzUgMTUgNC45NTI5NSAxMy44NjIxIDMuODk1NjkgMTIuMTU1Mkw0LjMyMDc1IDExLjg5MTlDNS4yOTA2OSAxMy40NTc4IDcuMDIzNzUgMTQuNSA5LjAwMDAxIDE0LjVDMTIuMDM3NSAxNC41IDE0LjUgMTIuMDM3NSAxNC41IDguOTk5OTlDMTQuNSA3LjAxNzggMTMuNDUxNiA1LjI4MDI2IDExLjg3NzggNC4zMTIwMkwxMi4xMzk4IDMuODg2MTZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4yXCIsZDpcIk0xMi44NTEgNS4wNzMyQzEzLjg2ODQgNi4wNzEwNSAxNC41IDcuNDYxOTggMTQuNSA4Ljk5OTk5QzE0LjUgMTIuMDM3NSAxMi4wMzc2IDE0LjUgOS4wMDAwMiAxNC41QzcuNDYyMTQgMTQuNSA2LjA3MTMxIDEzLjg2ODUgNS4wNzM0OCAxMi44NTEyTDUuNDMwNDIgMTIuNTAxMUM2LjMzODA5IDEzLjQyNjQgNy42MDE4NSAxNCA5LjAwMDAyIDE0QzExLjc2MTQgMTQgMTQgMTEuNzYxNCAxNCA4Ljk5OTk5QzE0IDcuNjAxNyAxMy40MjY0IDYuMzM3ODUgMTIuNTAwOSA1LjQzMDE3TDEyLjg1MSA1LjA3MzJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4zNVwiLGQ6XCJNMTMuMzAyMSA2LjQ1MDcxQzEzLjc0NTUgNy4xOTczNyAxNCA4LjA2OTM0IDE0IDlDMTQgMTEuNzYxNCAxMS43NjE0IDE0IDkuMDAwMDEgMTRDOC4wNDg2NyAxNCA3LjE1ODY3IDEzLjczNDEgNi40MDExOCAxMy4yNzIzTDYuNjYxNDEgMTIuODQ1NEM3LjM0Mjc0IDEzLjI2MDcgOC4xNDMwNSAxMy41IDkuMDAwMDEgMTMuNUMxMS40ODUzIDEzLjUgMTMuNSAxMS40ODUzIDEzLjUgOUMxMy41IDguMTYxNjQgMTMuMjcxIDcuMzc3NTMgMTIuODcyMiA2LjcwNTk4TDEzLjMwMjEgNi40NTA3MVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjVcIixkOlwiTTEzLjM3NDQgNy45NDAyMUMxMy40NTY2IDguMjgwMyAxMy41IDguNjM1MjQgMTMuNSA5QzEzLjUgMTEuNDg1MyAxMS40ODUzIDEzLjUgOS4wMDAwMiAxMy41QzguNjExMDMgMTMuNSA4LjIzMzIxIDEzLjQ1MDYgNy44NzI2NyAxMy4zNTc2TDcuOTk3NTggMTIuODczNEM4LjMxNzY3IDEyLjk1NiA4LjY1MzUyIDEzIDkuMDAwMDIgMTNDMTEuMjA5MSAxMyAxMyAxMS4yMDkxIDEzIDlDMTMgOC42NzUwNyAxMi45NjEzIDguMzU5NTIgMTIuODg4NCA4LjA1NzU2TDEzLjM3NDQgNy45NDAyMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjY1XCIsZDpcIk0xMi45MTU1IDkuODIxMzJDMTIuNTg5OCAxMS4zODEzIDExLjM1NjIgMTIuNjA3MiA5Ljc5MjAzIDEyLjkyMTVMOS42OTM1MyAxMi40MzEzQzExLjA2MTMgMTIuMTU2NSAxMi4xNDEzIDExLjA4MzMgMTIuNDI2MSA5LjcxOTEzTDEyLjkxNTUgOS44MjEzMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuMjc3MSA3LjUwMjUyQzEuMjc3MSA0LjA2NDU1IDQuMDY0MTMgMS4yNzc1MyA3LjUwMjA5IDEuMjc3NTNDMTAuOTQgMS4yNzc1MyAxMy43MjcxIDQuMDY0NTUgMTMuNzI3MSA3LjUwMjUyQzEzLjcyNzEgMTAuOTQwNSAxMC45NCAxMy43Mjc1IDcuNTAyMDkgMTMuNzI3NUM0LjA2NDEyIDEzLjcyNzUgMS4yNzcxIDEwLjk0MDUgMS4yNzcxIDcuNTAyNTJaTTcuNTAyMDkgMi4yMjc1MkM0LjU4ODggMi4yMjc1MiAyLjIyNzEgNC41ODkyMiAyLjIyNzEgNy41MDI1MkMyLjIyNzEgMTAuNDE1OCA0LjU4ODggMTIuNzc3NSA3LjUwMjA5IDEyLjc3NzVDMTAuNDE1NCAxMi43Nzc1IDEyLjc3NzEgMTAuNDE1OCAxMi43NzcxIDcuNTAyNTJDMTIuNzc3MSA0LjU4OTIyIDEwLjQxNTQgMi4yMjc1MiA3LjUwMjA5IDIuMjI3NTJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx4cj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNSA3LjUwMDAzQzUgOC4zMjg0NSA0LjMyODQzIDkuMDAwMDMgMy41IDkuMDAwMDNDMi42NzE1NyA5LjAwMDAzIDIgOC4zMjg0NSAyIDcuNTAwMDNDMiA2LjY3MTYgMi42NzE1NyA2LjAwMDAzIDMuNSA2LjAwMDAzQzQuMzI4NDMgNi4wMDAwMyA1IDYuNjcxNiA1IDcuNTAwMDNaTTUuNzEzMTMgOC42NjM4OEM1LjI5NDQ1IDkuNDU4MzggNC40NjA0OCAxMCAzLjUgMTBDMi4xMTkyOSAxMCAxIDguODgwNzQgMSA3LjUwMDAzQzEgNi4xMTkzMSAyLjExOTI5IDUuMDAwMDMgMy41IDUuMDAwMDNDNC40NjA0OCA1LjAwMDAzIDUuMjk0NDUgNS41NDE2NyA1LjcxMzEzIDYuMzM2MTZMOS4xMDQyNCA0LjIxNjcxQzkuMDM2NDMgMy45ODk2OCA5IDMuNzQ5MTEgOSAzLjUwMDAzQzkgMi4xMTkzMiAxMC4xMTkzIDEuMDAwMDMgMTEuNSAxLjAwMDAzQzEyLjg4MDcgMS4wMDAwMyAxNCAyLjExOTMyIDE0IDMuNTAwMDNDMTQgNC44ODA3NCAxMi44ODA3IDYuMDAwMDMgMTEuNSA2LjAwMDAzQzEwLjY5MTUgNi4wMDAwMyA5Ljk3MjY0IDUuNjE2MjQgOS41MTU2NiA1LjAyMDlMNS45ODUzIDcuMjI3MzhDNS45OTUwMiA3LjMxNjkyIDYgNy40MDc4OSA2IDcuNTAwMDNDNiA3LjU5MjE2IDUuOTk1MDIgNy42ODMxMiA1Ljk4NTMgNy43NzI2N0w5LjUxNTY3IDkuOTc5MTVDOS45NzI2NSA5LjM4MzgyIDEwLjY5MTUgOS4wMDAwMyAxMS41IDkuMDAwMDNDMTIuODgwNyA5LjAwMDAzIDE0IDEwLjExOTMgMTQgMTEuNUMxNCAxMi44ODA3IDEyLjg4MDcgMTQgMTEuNSAxNEMxMC4xMTkzIDE0IDkgMTIuODgwNyA5IDExLjVDOSAxMS4yNTA5IDkuMDM2NDMgMTEuMDEwNCA5LjEwNDI1IDEwLjc4MzNMNS43MTMxMyA4LjY2Mzg4Wk0xMS41IDUuMDAwMDNDMTIuMzI4NCA1LjAwMDAzIDEzIDQuMzI4NDYgMTMgMy41MDAwM0MxMyAyLjY3MTYgMTIuMzI4NCAyLjAwMDAzIDExLjUgMi4wMDAwM0MxMC42NzE2IDIuMDAwMDMgMTAgMi42NzE2IDEwIDMuNTAwMDNDMTAgNC4zMjg0NiAxMC42NzE2IDUuMDAwMDMgMTEuNSA1LjAwMDAzWk0xMyAxMS41QzEzIDEyLjMyODUgMTIuMzI4NCAxMyAxMS41IDEzQzEwLjY3MTYgMTMgMTAgMTIuMzI4NSAxMCAxMS41QzEwIDEwLjY3MTYgMTAuNjcxNiAxMCAxMS41IDEwQzEyLjMyODQgMTAgMTMgMTAuNjcxNiAxMyAxMS41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sa3I9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNSA1LjAwMDA2QzMuMjIzODYgNS4wMDAwNiAzIDUuMjIzOTIgMyA1LjUwMDA2TDMgMTEuNTAwMUMzIDExLjc3NjIgMy4yMjM4NiAxMi4wMDAxIDMuNSAxMi4wMDAxTDExLjUgMTIuMDAwMUMxMS43NzYxIDEyLjAwMDEgMTIgMTEuNzc2MiAxMiAxMS41MDAxTDEyIDUuNTAwMDZDMTIgNS4yMjM5MiAxMS43NzYxIDUuMDAwMDYgMTEuNSA1LjAwMDA2TDEwLjI1IDUuMDAwMDZDOS45NzM4NiA1LjAwMDA2IDkuNzUgNC43NzYyIDkuNzUgNC41MDAwNkM5Ljc1IDQuMjIzOTIgOS45NzM4NiA0LjAwMDA2IDEwLjI1IDQuMDAwMDZMMTEuNSA0LjAwMDA2QzEyLjMyODQgNC4wMDAwNiAxMyA0LjY3MTYzIDEzIDUuNTAwMDZMMTMgMTEuNTAwMUMxMyAxMi4zMjg1IDEyLjMyODQgMTMuMDAwMSAxMS41IDEzLjAwMDFMMy41IDEzLjAwMDFDMi42NzE1NyAxMy4wMDAxIDIgMTIuMzI4NSAyIDExLjUwMDFMMiA1LjUwMDA2QzIgNC42NzE2MyAyLjY3MTU3IDQuMDAwMDYgMy41IDQuMDAwMDZMNC43NSA0LjAwMDA2QzUuMDI2MTQgNC4wMDAwNiA1LjI1IDQuMjIzOTIgNS4yNSA0LjUwMDA2QzUuMjUgNC43NzYyIDUuMDI2MTQgNS4wMDAwNiA0Ljc1IDUuMDAwMDZMMy41IDUuMDAwMDZaTTcgMS42MzY0TDUuNTY4MiAzLjA2ODJDNS4zOTI0NiAzLjI0MzkzIDUuMTA3NTQgMy4yNDM5MyA0LjkzMTggMy4wNjgyQzQuNzU2MDcgMi44OTI0NiA0Ljc1NjA3IDIuNjA3NTQgNC45MzE4IDIuNDMxOEw3LjE4MTggMC4xODE4MDJDNy4yNjYxOSAwLjA5NzQxIDcuMzgwNjUgMC4wNDk5OTkgNy41IDAuMDQ5OTk5QzcuNjE5MzUgMC4wNDk5OTkgNy43MzM4MSAwLjA5NzQxIDcuODE4MiAwLjE4MTgwMkwxMC4wNjgyIDIuNDMxOEMxMC4yNDM5IDIuNjA3NTQgMTAuMjQzOSAyLjg5MjQ2IDEwLjA2ODIgMy4wNjgyQzkuODkyNDYgMy4yNDM5MyA5LjYwNzU0IDMuMjQzOTMgOS40MzE4IDMuMDY4Mkw4IDEuNjM2NEw4IDguNUM4IDguNzc2MTQgNy43NzYxNCA5IDcuNSA5QzcuMjIzODYgOSA3IDguNzc2MTQgNyA4LjVMNyAxLjYzNjRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxTcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTIuMzUzNiAxLjE0NjQ1QzEyLjE1ODMgMC45NTExODQgMTEuODQxNyAwLjk1MTE4NCAxMS42NDY0IDEuMTQ2NDVDMTEuNDUxMiAxLjM0MTcxIDExLjQ1MTIgMS42NTgyOSAxMS42NDY0IDEuODUzNTVMMTIuNzkyOSAzSDEyQzEwLjcwMzcgMyA5LjcxMTExIDMuNTg0MjMgOC44NzI0OCA0LjM4OTMxQzguMjAwNjUgNS4wMzQyNyA3LjU5MzQ5IDUuODU2ODQgNi45OTQ2MSA2LjY2ODJDNi44NjI4NyA2Ljg0NjY4IDYuNzMxNTQgNy4wMjQ2MiA2LjYgNy4yQzUuMTA4NzQgOS4xODgzNSAzLjQ5MDM3IDExIDAuNSAxMUMwLjIyMzg1OCAxMSAwIDExLjIyMzkgMCAxMS41QzAgMTEuNzc2MSAwLjIyMzg1OCAxMiAwLjUgMTJDNC4wMDk2MyAxMiA1Ljg5MTI2IDkuODExNjUgNy40IDcuOEM3LjU0MzY3IDcuNjA4NDUgNy42ODMyIDcuNDE5NjIgNy44MTk5NiA3LjIzNDU0TDcuODIwMDUgNy4yMzQ0M0w3LjgyMDA2IDcuMjM0NDFDOC40MTY3NCA2LjQyNjk1IDguOTYwNjkgNS42OTA4NSA5LjU2NTAyIDUuMTEwNjlDMTAuMjg4OSA0LjQxNTc3IDExLjA0NjMgNCAxMiA0SDEyLjc5MjlMMTEuNjQ2NCA1LjE0NjQ1QzExLjQ1MTIgNS4zNDE3MSAxMS40NTEyIDUuNjU4MjkgMTEuNjQ2NCA1Ljg1MzU1QzExLjg0MTcgNi4wNDg4MiAxMi4xNTgzIDYuMDQ4ODIgMTIuMzUzNiA1Ljg1MzU1TDE0LjM1MzYgMy44NTM1NUMxNC41NDg4IDMuNjU4MjkgMTQuNTQ4OCAzLjM0MTcxIDE0LjM1MzYgMy4xNDY0NUwxMi4zNTM2IDEuMTQ2NDVaTTAuNSAzQzMuMzUyNzggMyA1LjEyOTkyIDQuNDQ1ODggNi41MDU0OCA2LjA2NzQ2TDYuMzc2MiA2LjI0MjY2QzYuMjQ4MyA2LjQxNjEgNi4xMjI5MyA2LjU4NjA5IDYgNi43NUM1Ljk2Mzk3IDYuNzk4MDQgNS45Mjc5OCA2Ljg0NTgxIDUuODkyIDYuODkzMzFDNC41NzM0OCA1LjI5MzA2IDMuMDI2MzcgNCAwLjUgNEMwLjIyMzg1OCA0IDAgMy43NzYxNCAwIDMuNUMwIDMuMjIzODYgMC4yMjM4NTggMyAwLjUgM1pNOC44NzI0OCAxMC42MTA3QzguMzcyODQgMTAuMTMxIDcuOTA4OTcgOS41NTMxNCA3LjQ1NzY3IDguOTU0NjhDNy42NDY4OCA4LjcxNjkzIDcuODI3MDQgOC40ODA2MSA4IDguMjVMOC4wODk4NyA4LjEyOTg3QzguNTg0MTIgOC43OTQwMiA5LjA1Mjg4IDkuMzk3NjYgOS41NjUwMiA5Ljg4OTMxQzEwLjI4ODkgMTAuNTg0MiAxMS4wNDYzIDExIDEyIDExSDEyLjc5MjlMMTEuNjQ2NCA5Ljg1MzU1QzExLjQ1MTIgOS42NTgyOSAxMS40NTEyIDkuMzQxNzEgMTEuNjQ2NCA5LjE0NjQ1QzExLjg0MTcgOC45NTExOCAxMi4xNTgzIDguOTUxMTggMTIuMzUzNiA5LjE0NjQ1TDE0LjM1MzYgMTEuMTQ2NEMxNC41NDg4IDExLjM0MTcgMTQuNTQ4OCAxMS42NTgzIDE0LjM1MzYgMTEuODUzNkwxMi4zNTM2IDEzLjg1MzZDMTIuMTU4MyAxNC4wNDg4IDExLjg0MTcgMTQuMDQ4OCAxMS42NDY0IDEzLjg1MzZDMTEuNDUxMiAxMy42NTgzIDExLjQ1MTIgMTMuMzQxNyAxMS42NDY0IDEzLjE0NjRMMTIuNzkyOSAxMkgxMkMxMC43MDM3IDEyIDkuNzExMTEgMTEuNDE1OCA4Ljg3MjQ4IDEwLjYxMDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxPcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTEuNSAzLjA0OTk5QzExLjc0ODUgMy4wNDk5OSAxMS45NSAzLjI1MTQ2IDExLjk1IDMuNDk5OTlWNy40OTk5OUMxMS45NSA3Ljc0ODUyIDExLjc0ODUgNy45NDk5OSAxMS41IDcuOTQ5OTlDMTEuMjUxNSA3Ljk0OTk5IDExLjA1IDcuNzQ4NTIgMTEuMDUgNy40OTk5OVY0LjU4NjM5TDQuNTg2MzggMTEuMDVINy40OTk5OUM3Ljc0ODUyIDExLjA1IDcuOTQ5OTkgMTEuMjUxNSA3Ljk0OTk5IDExLjVDNy45NDk5OSAxMS43NDg1IDcuNzQ4NTIgMTEuOTUgNy40OTk5OSAxMS45NUwzLjQ5OTk5IDExLjk1QzMuMzgwNjQgMTEuOTUgMy4yNjYxOCAxMS45MDI2IDMuMTgxNzkgMTEuODE4MkMzLjA5NzQgMTEuNzMzOCAzLjA0OTk5IDExLjYxOTMgMy4wNDk5OSAxMS41TDMuMDQ5OTkgNy40OTk5OUMzLjA0OTk5IDcuMjUxNDYgMy4yNTE0NiA3LjA0OTk5IDMuNDk5OTkgNy4wNDk5OUMzLjc0ODUyIDcuMDQ5OTkgMy45NDk5OSA3LjI1MTQ2IDMuOTQ5OTkgNy40OTk5OUwzLjk0OTk5IDEwLjQxMzZMMTAuNDEzNiAzLjk0OTk5TDcuNDk5OTkgMy45NDk5OUM3LjI1MTQ2IDMuOTQ5OTkgNy4wNDk5OSAzLjc0ODUyIDcuMDQ5OTkgMy40OTk5OUM3LjA0OTk5IDMuMjUxNDYgNy4yNTE0NiAzLjA0OTk5IDcuNDk5OTkgMy4wNDk5OUwxMS41IDMuMDQ5OTlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxNcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41MzczMSAwLjgyNjg3M0M3LjUxMjUgMC44MjQzOTIgNy40ODc1IDAuODI0MzkyIDcuNDYyNjkgMC44MjY4NzNMMy45NjI2OSAxLjE3Njg3QzMuODU2NzIgMS4xODc0NyAzLjc2MDI1IDEuMjQyNjIgMy42OTczNiAxLjMyODU3TDAuNjk5NzcxIDUuNDI1MjhDMC42NTQwNDYgNS40ODYyNyAwLjYyNjQ3IDUuNTYxNjUgMC42MjUwNTcgNS42NDM0QzAuNjI1MDE5IDUuNjQ1NiAwLjYyNSA1LjY0NzgxIDAuNjI1IDUuNjUwMDFDMC42MjUgNS42NTA1MiAwLjYyNTAwMSA1LjY1MTAzIDAuNjI1MDAzIDUuNjUxNTNDMC42MjUzNjMgNS43NDIzNyAwLjY1ODAyMSA1LjgyNTU5IDAuNzEyMDg3IDUuODkwM0w3LjIxMDQyIDEzLjc4ODNDNy4yODE2NSAxMy44NzQ5IDcuMzg3ODkgMTMuOTI1IDcuNSAxMy45MjVDNy42MTIxMSAxMy45MjUgNy43MTgzNSAxMy44NzQ5IDcuNzg5NTggMTMuNzg4M0wxNC4yODc5IDUuODkwMzFDMTQuMzQyIDUuODI1NiAxNC4zNzQ2IDUuNzQyMzcgMTQuMzc1IDUuNjUxNTNDMTQuMzc1IDUuNjUxMDMgMTQuMzc1IDUuNjUwNTIgMTQuMzc1IDUuNjUwMDFDMTQuMzc1IDUuNjQ4NDkgMTQuMzc1IDUuNjQ2OTcgMTQuMzc1IDUuNjQ1NDVDMTQuMzc0OSA1LjYzOTYzIDE0LjM3NDcgNS42MzM4MiAxNC4zNzQ0IDUuNjI4MDFDMTQuMzcgNS41NTIxOSAxNC4zNDMxIDUuNDgyNDIgMTQuMzAwMiA1LjQyNTI3TDExLjMwMjYgMS4zMjg1N0MxMS4yMzk3IDEuMjQyNjIgMTEuMTQzMyAxLjE4NzQ3IDExLjAzNzMgMS4xNzY4N0w3LjUzNzMxIDAuODI2ODczWk0xMC45MjUgNS4yNzUwMVY1LjI1MjM2TDEwLjkyMjMgNS4yNzUwMUgxMC45MjVaTTEwLjkzNDIgNS4xNzQ5OEgxMy4xODc3TDExLjI0OTUgMi41MjYxTDEwLjkzNDIgNS4xNzQ5OFpNMTAuNTcwNyAxLjg4Mzk1TDguMDQ0MzIgMS42MzEzMUwxMC4xNzQ3IDUuMjEwMzRMMTAuNTcwNyAxLjg4Mzk1Wk02Ljk1NTY4IDEuNjMxMzFMNC40MjkzMSAxLjg4Mzk1TDQuODI1MzEgNS4yMTAzNEw2Ljk1NTY4IDEuNjMxMzFaTTMuNzUwNDYgMi41MjYxTDEuODEyMjYgNS4xNzQ5OEg0LjA2NThMMy43NTA0NiAyLjUyNjFaTTEuNzk0MTYgNi4wMjUwMUw2Ljc1ODYxIDEyLjA1ODdMNC4yMjM3MSA2LjA2NjlDNC4yMTc4NyA2LjA1MzEgNC4yMTMxNCA2LjAzOTEgNC4yMDk0OSA2LjAyNTAxSDEuNzk0MTZaTTUuMTUwNTUgNi4wMjUwMUw3LjQ5OTk5IDEyLjEwODVMOS44NDk0MyA2LjAyNTAxSDkuNzg2ODFINS4yMTMxOUg1LjE1MDU1Wk0xMC43OTA1IDYuMDI1MDFDMTAuNzg2OSA2LjAzOTEgMTAuNzgyMSA2LjA1MzEgMTAuNzc2MyA2LjA2NjlMOC4yNDEzOSAxMi4wNTg3TDEzLjIwNTggNi4wMjUwMUgxMC43OTA1Wk03LjUgMi4xODMxN0w5LjM0MDM4IDUuMjc1MDFINS42NTk2Mkw3LjUgMi4xODMxN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LExyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjEwODc2IDE0TDkuNDY1ODIgMUgxMC44MTc4TDUuNDYwNzQgMTRINC4xMDg3NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LF9yPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMC4zMDA0IDcuNDk5OTFDMTAuMzAwNCA4LjQ5NDMgOS40OTQyNiA5LjMwMDQxIDguNDk5ODggOS4zMDA0MUM3LjUwNTQ5IDkuMzAwNDEgNi42OTkzOCA4LjQ5NDMgNi42OTkzOCA3LjQ5OTkxQzYuNjk5MzggNi41MDU1MyA3LjUwNTQ5IDUuNjk5NDIgOC40OTk4OCA1LjY5OTQyQzkuNDk0MjYgNS42OTk0MiAxMC4zMDA0IDYuNTA1NTMgMTAuMzAwNCA3LjQ5OTkxWk0xMS4yMDUgOEMxMC45Njk5IDkuMjgwMjkgOS44NDgxNiAxMC4yNTA0IDguNDk5ODggMTAuMjUwNEM3LjE1MTYgMTAuMjUwNCA2LjAyOTkgOS4yODAyOSA1Ljc5NDczIDhIMC41QzAuMjIzODU4IDggMCA3Ljc3NjE0IDAgNy41QzAgNy4yMjM4NiAwLjIyMzg1OCA3IDAuNSA3SDUuNzk0N0M2LjAyOTggNS43MTk2MiA3LjE1MTU0IDQuNzQ5NDIgOC40OTk4OCA0Ljc0OTQyQzkuODQ4MjIgNC43NDk0MiAxMC45Njk5IDUuNzE5NjIgMTEuMjA1MSA3SDE0LjVDMTQuNzc2MSA3IDE1IDcuMjIzODYgMTUgNy41QzE1IDcuNzc2MTQgMTQuNzc2MSA4IDE0LjUgOEgxMS4yMDVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxQcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTQuNDk5OSAwLjk5OTk5NEMxNC4yMjM3IDAuOTk5OTk0IDEzLjk5OTkgMS4yMjM4NSAxMy45OTk5IDEuNDk5OTlMMTMuOTk5OSA1Ljk5OTk1TDkuOTk5OTIgNS45OTk5NUM5LjQ0NzY0IDUuOTk5OTUgOC45OTk5MyA2LjQ0NzY2IDguOTk5OTMgNi45OTk5NEw4Ljk5OTkzIDcuOTk5OTRDOC45OTk5MyA4LjU1MjIyIDkuNDQ3NjQgOC45OTk5MyA5Ljk5OTkyIDguOTk5OTNMMTMuOTk5OSA4Ljk5OTkzTDEzLjk5OTkgMTMuNDk5OUMxMy45OTk5IDEzLjc3NiAxNC4yMjM3IDEzLjk5OTkgMTQuNDk5OSAxMy45OTk5QzE0Ljc3NiAxMy45OTk5IDE0Ljk5OTkgMTMuNzc2IDE0Ljk5OTkgMTMuNDk5OUwxNC45OTk5IDEuNDk5OTlDMTQuOTk5OSAxLjIyMzg1IDE0Ljc3NiAwLjk5OTk5NCAxNC40OTk5IDAuOTk5OTk0Wk00Ljk5OTk2IDUuOTk5OTVMMC45OTk5OTIgNS45OTk5NUwwLjk5OTk5MiAxLjQ5OTk5QzAuOTk5OTkyIDEuMjIzODUgMC43NzYxMzYgMC45OTk5OTQgMC40OTk5OTYgMC45OTk5OTRDMC4yMjM4NTYgMC45OTk5OTQgLTkuNzg1MmUtMDkgMS4yMjM4NSAtMi4xODU1N2UtMDggMS40OTk5OUw0LjA3Mjc5ZS0wNyAxMy40OTk5QzMuOTUyMDhlLTA3IDEzLjc3NiAwLjIyMzg1NSAxMy45OTk5IDAuNDk5OTk2IDEzLjk5OTlDMC43NzYxMzYgMTMuOTk5OSAwLjk5OTk5MiAxMy43NzYgMC45OTk5OTIgMTMuNDk5OUwwLjk5OTk5MiA4Ljk5OTkzTDQuOTk5OTYgOC45OTk5M0M1LjU1MjI0IDguOTk5OTMgNS45OTk5NSA4LjU1MjIyIDUuOTk5OTUgNy45OTk5M0w1Ljk5OTk1IDYuOTk5OTRDNS45OTk5NSA2LjQ0NzY2IDUuNTUyMjQgNS45OTk5NSA0Ljk5OTk2IDUuOTk5OTVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxFcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC45OTk4NzggMC41QzAuOTk5ODc4IDAuMjIzODU4IDEuMjIzNzQgMCAxLjQ5OTg4IDBIMTMuNDk5OUMxMy43NzYgMCAxMy45OTk5IDAuMjIzODU4IDEzLjk5OTkgMC41QzEzLjk5OTkgMC43NzYxNDIgMTMuNzc2IDEgMTMuNDk5OSAxTDkgMVY1QzkgNS41NTIyOCA4LjU1MjI4IDYgOCA2SDdDNi40NDc3MiA2IDYgNS41NTIyOCA2IDVWMUgxLjQ5OTg4QzEuMjIzNzQgMSAwLjk5OTg3OCAwLjc3NjE0MiAwLjk5OTg3OCAwLjVaTTcgOUM2LjQ0NzcyIDkgNiA5LjQ0NzcxIDYgMTBWMTRIMS40OTk4OEMxLjIyMzc0IDE0IDAuOTk5ODc4IDE0LjIyMzkgMC45OTk4NzggMTQuNUMwLjk5OTg3OCAxNC43NzYxIDEuMjIzNzQgMTUgMS40OTk4OCAxNUgxMy40OTk5QzEzLjc3NiAxNSAxMy45OTk5IDE0Ljc3NjEgMTMuOTk5OSAxNC41QzEzLjk5OTkgMTQuMjIzOSAxMy43NzYgMTQgMTMuNDk5OSAxNEg5VjEwQzkgOS40NDc3MiA4LjU1MjI4IDkgOCA5SDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxqcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTQuNDk5OSAwLjk5OTk5MkMxNC4yMjM3IDAuOTk5OTkyIDEzLjk5OTkgMS4yMjM4NSAxMy45OTk5IDEuNDk5OTlMMTMuOTk5OSAxMy40OTk5QzEzLjk5OTkgMTMuNzc2IDE0LjIyMzcgMTMuOTk5OSAxNC40OTk5IDEzLjk5OTlDMTQuNzc2IDEzLjk5OTkgMTQuOTk5OSAxMy43NzYgMTQuOTk5OSAxMy40OTk5TDE0Ljk5OTkgMS40OTk5OUMxNC45OTk5IDEuMjIzODUgMTQuNzc2IDAuOTk5OTkyIDE0LjQ5OTkgMC45OTk5OTJaTTAuNDk5OTk2IDAuOTk5OTkyQzAuMjIzODU2IDAuOTk5OTkyIC05Ljc4NTA5ZS0wOSAxLjIyMzg1IC0yLjE4NTU2ZS0wOCAxLjQ5OTk5TDQuMDcyNzllLTA3IDEzLjQ5OTlDMy45NTIwOGUtMDcgMTMuNzc2IDAuMjIzODU1IDEzLjk5OTkgMC40OTk5OTYgMTMuOTk5OUMwLjc3NjEzNiAxMy45OTk5IDAuOTk5OTkyIDEzLjc3NiAwLjk5OTk5MiAxMy40OTk5TDAuOTk5OTkyIDEuNDk5OTlDMC45OTk5OTIgMS4yMjM4NSAwLjc3NjEzNiAwLjk5OTk5MiAwLjQ5OTk5NiAwLjk5OTk5MlpNMS45OTk5OCA2Ljk5OTk0QzEuOTk5OTggNi40NDc2NiAyLjQ0NzY5IDUuOTk5OTUgMi45OTk5OCA1Ljk5OTk1TDUuOTk5OTUgNS45OTk5NUM2LjU1MjIzIDUuOTk5OTUgNi45OTk5NCA2LjQ0NzY2IDYuOTk5OTQgNi45OTk5NEw2Ljk5OTk0IDcuOTk5OTNDNi45OTk5NCA4LjU1MjIxIDYuNTUyMjMgOC45OTk5MiA1Ljk5OTk1IDguOTk5OTJMMi45OTk5OCA4Ljk5OTkyQzIuNDQ3NyA4Ljk5OTkyIDEuOTk5OTggOC41NTIyMSAxLjk5OTk4IDcuOTk5OTNMMS45OTk5OCA2Ljk5OTk0Wk04Ljk5OTkzIDUuOTk5OTVDOC40NDc2NSA1Ljk5OTk1IDcuOTk5OTMgNi40NDc2NiA3Ljk5OTkzIDYuOTk5OTRMNy45OTk5MyA3Ljk5OTkzQzcuOTk5OTMgOC41NTIyMSA4LjQ0NzY1IDguOTk5OTIgOC45OTk5MyA4Ljk5OTkyTDExLjk5OTkgOC45OTk5MkMxMi41NTIyIDguOTk5OTIgMTIuOTk5OSA4LjU1MjIxIDEyLjk5OTkgNy45OTk5M0wxMi45OTk5IDYuOTk5OTRDMTIuOTk5OSA2LjQ0NzY2IDEyLjU1MjIgNS45OTk5NSAxMS45OTk5IDUuOTk5OTVMOC45OTk5MyA1Ljk5OTk1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUnI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuOTk5ODc4IDAuNUMwLjk5OTg3OCAwLjIyMzg1OCAxLjIyMzc0IDAgMS40OTk4OCAwSDEzLjQ5OTlDMTMuNzc2IDAgMTMuOTk5OSAwLjIyMzg1OCAxMy45OTk5IDAuNUMxMy45OTk5IDAuNzc2MTQyIDEzLjc3NiAxIDEzLjQ5OTkgMUgxLjQ5OTg4QzEuMjIzNzQgMSAwLjk5OTg3OCAwLjc3NjE0MiAwLjk5OTg3OCAwLjVaTTcgMkM2LjQ0NzcyIDIgNiAyLjQ0NzcyIDYgM1Y2QzYgNi41NTIyOCA2LjQ0NzcyIDcgNyA3SDhDOC41NTIyOCA3IDkgNi41NTIyOCA5IDZWM0M5IDIuNDQ3NzIgOC41NTIyOCAyIDggMkg3Wk03IDhDNi40NDc3MiA4IDYgOC40NDc3MSA2IDlWMTJDNiAxMi41NTIzIDYuNDQ3NzIgMTMgNyAxM0g4QzguNTUyMjggMTMgOSAxMi41NTIzIDkgMTJWOUM5IDguNDQ3NzIgOC41NTIyOCA4IDggOEg3Wk0xLjQ5OTg4IDE0QzEuMjIzNzQgMTQgMC45OTk4NzggMTQuMjIzOSAwLjk5OTg3OCAxNC41QzAuOTk5ODc4IDE0Ljc3NjEgMS4yMjM3NCAxNSAxLjQ5OTg4IDE1SDEzLjQ5OTlDMTMuNzc2IDE1IDEzLjk5OTkgMTQuNzc2MSAxMy45OTk5IDE0LjVDMTMuOTk5OSAxNC4yMjM5IDEzLjc3NiAxNCAxMy40OTk5IDE0SDEuNDk5ODhaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxJcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40Njk2OCAxLjA1MDg1QzcuNjQxMjIgMS4xMzQ3NSA3Ljc1IDEuMzA5MDQgNy43NSAxLjVWMTMuNUM3Ljc1IDEzLjY5MSA3LjY0MTIyIDEzLjg2NTMgNy40Njk2OCAxMy45NDkyQzcuMjk4MTMgMTQuMDMzMSA3LjA5Mzc3IDE0LjAxMTkgNi45NDMwMyAxMy44OTQ3TDMuMjIxMyAxMUgxLjVDMC42NzE1NzEgMTEgMCAxMC4zMjg0IDAgOS41VjUuNUMwIDQuNjcxNTggMC42NzE1NzMgNCAxLjUgNEgzLjIyMTNMNi45NDMwMyAxLjEwNTMzQzcuMDkzNzcgMC45ODgwODUgNy4yOTgxMyAwLjk2Njk0NSA3LjQ2OTY4IDEuMDUwODVaTTYuNzUgMi41MjIzMkwzLjY5OTgzIDQuODk0NjhDMy42MTIwNiA0Ljk2Mjk0IDMuNTA0MDUgNSAzLjM5Mjg2IDVIMS41QzEuMjIzODYgNSAxIDUuMjIzODYgMSA1LjVWOS41QzEgOS43NzYxNSAxLjIyMzg2IDEwIDEuNSAxMEgzLjM5Mjg2QzMuNTA0MDUgMTAgMy42MTIwNiAxMC4wMzcxIDMuNjk5ODMgMTAuMTA1M0w2Ljc1IDEyLjQ3NzdWMi41MjIzMlpNMTAuMjc4NCAzLjg0ODA0QzEwLjQ2MjMgMy43MjU2NyAxMC43MTA2IDMuNzc1NTcgMTAuODMzIDMuOTU5NDlDMTIuMjU1OCA2LjA5Nzk4IDEyLjI1NTggOC45MDE5OSAxMC44MzMgMTEuMDQwNUMxMC43MTA2IDExLjIyNDQgMTAuNDYyMyAxMS4yNzQzIDEwLjI3ODQgMTEuMTUxOUMxMC4wOTQ0IDExLjAyOTYgMTAuMDQ0NSAxMC43ODEzIDEwLjE2NjkgMTAuNTk3M0MxMS40MTExIDguNzI3MjggMTEuNDExMSA2LjI3MjY5IDEwLjE2NjkgNC40MDI2NEMxMC4wNDQ1IDQuMjE4NzEgMTAuMDk0NCAzLjk3MDQxIDEwLjI3ODQgMy44NDgwNFpNMTIuNjc4NSAxLjQzMDQ0QzEyLjUzNTYgMS4yNjE5IDEyLjI4MzIgMS4yNDEwNCAxMi4xMTQ3IDEuMzgzODZDMTEuOTQ2MiAxLjUyNjY3IDExLjkyNTMgMS43NzkwOCAxMi4wNjgxIDEuOTQ3NjJDMTQuNzc3MyA1LjE0NDg4IDE0Ljc3NzMgOS44NTUxMyAxMi4wNjgxIDEzLjA1MjRDMTEuOTI1MyAxMy4yMjA5IDExLjk0NjIgMTMuNDczMyAxMi4xMTQ3IDEzLjYxNjFDMTIuMjgzMiAxMy43NTkgMTIuNTM1NiAxMy43MzgxIDEyLjY3ODUgMTMuNTY5NkMxNS42NDA2IDEwLjA3MzkgMTUuNjQwNiA0LjkyNjEyIDEyLjY3ODUgMS40MzA0NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFZyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk04IDEuNUM4IDEuMzEwNjIgNy44OTMgMS4xMzc0OSA3LjcyMzYxIDEuMDUyNzlDNy41NTQyMSAwLjk2ODA5MyA3LjM1MTUxIDAuOTg2MzcxIDcuMiAxLjFMMy4zMzMzMyA0SDEuNUMwLjY3MTU3MyA0IDAgNC42NzE1OCAwIDUuNVY5LjVDMCAxMC4zMjg0IDAuNjcxNTczIDExIDEuNSAxMUgzLjMzMzMzTDcuMiAxMy45QzcuMzUxNTEgMTQuMDEzNiA3LjU1NDIxIDE0LjAzMTkgNy43MjM2MSAxMy45NDcyQzcuODkzIDEzLjg2MjUgOCAxMy42ODk0IDggMTMuNVYxLjVaTTMuOCA0LjlMNyAyLjVWMTIuNUwzLjggMTAuMUMzLjcxMzQ1IDEwLjAzNTEgMy42MDgxOSAxMCAzLjUgMTBIMS41QzEuMjIzODYgMTAgMSA5Ljc3NjE0IDEgOS41VjUuNUMxIDUuMjIzODYgMS4yMjM4NiA1IDEuNSA1SDMuNUMzLjYwODE5IDUgMy43MTM0NSA0Ljk2NDkxIDMuOCA0LjlaTTEwLjgzMyAzLjk1OTQ5QzEwLjcxMDYgMy43NzU1NyAxMC40NjIzIDMuNzI1NjcgMTAuMjc4NCAzLjg0ODA0QzEwLjA5NDQgMy45NzA0MSAxMC4wNDQ1IDQuMjE4NzEgMTAuMTY2OSA0LjQwMjY0QzExLjQxMTEgNi4yNzI2OCAxMS40MTExIDguNzI3MjggMTAuMTY2OSAxMC41OTczQzEwLjA0NDUgMTAuNzgxMyAxMC4wOTQ0IDExLjAyOTYgMTAuMjc4NCAxMS4xNTE5QzEwLjQ2MjMgMTEuMjc0MyAxMC43MTA2IDExLjIyNDQgMTAuODMzIDExLjA0MDVDMTIuMjU1OCA4LjkwMTk5IDEyLjI1NTggNi4wOTc5OCAxMC44MzMgMy45NTk0OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEhyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjcyMzYxIDEuMDUyNzlDNy44OTMgMS4xMzc0OSA4IDEuMzEwNjIgOCAxLjVWMTMuNUM4IDEzLjY4OTQgNy44OTMgMTMuODYyNSA3LjcyMzYxIDEzLjk0NzJDNy41NTQyMSAxNC4wMzE5IDcuMzUxNTEgMTQuMDEzNiA3LjIgMTMuOUwzLjMzMzMzIDExSDEuNUMwLjY3MTU3MyAxMSAwIDEwLjMyODQgMCA5LjVWNS41QzAgNC42NzE1OCAwLjY3MTU3MyA0IDEuNSA0SDMuMzMzMzNMNy4yIDEuMUM3LjM1MTUxIDAuOTg2MzcxIDcuNTU0MjEgMC45NjgwOTMgNy43MjM2MSAxLjA1Mjc5Wk03IDIuNUwzLjggNC45QzMuNzEzNDUgNC45NjQ5MSAzLjYwODE5IDUgMy41IDVIMS41QzEuMjIzODYgNSAxIDUuMjIzODYgMSA1LjVWOS41QzEgOS43NzYxNCAxLjIyMzg2IDEwIDEuNSAxMEgzLjVDMy42MDgxOSAxMCAzLjcxMzQ1IDEwLjAzNTEgMy44IDEwLjFMNyAxMi41VjIuNVpNMTQuODUzNiA1LjE0NjQ1QzE1LjA0ODggNS4zNDE3MSAxNS4wNDg4IDUuNjU4MjkgMTQuODUzNiA1Ljg1MzU1TDEzLjIwNzEgNy41TDE0Ljg1MzYgOS4xNDY0NUMxNS4wNDg4IDkuMzQxNzEgMTUuMDQ4OCA5LjY1ODI5IDE0Ljg1MzYgOS44NTM1NUMxNC42NTgzIDEwLjA0ODggMTQuMzQxNyAxMC4wNDg4IDE0LjE0NjQgOS44NTM1NUwxMi41IDguMjA3MTFMMTAuODUzNiA5Ljg1MzU1QzEwLjY1ODMgMTAuMDQ4OCAxMC4zNDE3IDEwLjA0ODggMTAuMTQ2NCA5Ljg1MzU1QzkuOTUxMTggOS42NTgyOSA5Ljk1MTE4IDkuMzQxNzEgMTAuMTQ2NCA5LjE0NjQ1TDExLjc5MjkgNy41TDEwLjE0NjQgNS44NTM1NUM5Ljk1MTE4IDUuNjU4MjkgOS45NTExOCA1LjM0MTcxIDEwLjE0NjQgNS4xNDY0NUMxMC4zNDE3IDQuOTUxMTggMTAuNjU4MyA0Ljk1MTE4IDEwLjg1MzYgNS4xNDY0NUwxMi41IDYuNzkyODlMMTQuMTQ2NCA1LjE0NjQ1QzE0LjM0MTcgNC45NTExOCAxNC42NTgzIDQuOTUxMTggMTQuODUzNiA1LjE0NjQ1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTggMS41QzggMS4zMTA2MiA3Ljg5MyAxLjEzNzQ5IDcuNzIzNjEgMS4wNTI3OUM3LjU1NDIxIDAuOTY4MDkzIDcuMzUxNTEgMC45ODYzNzEgNy4yIDEuMUwzLjMzMzMzIDRIMS41QzAuNjcxNTczIDQgMCA0LjY3MTU4IDAgNS41VjkuNUMwIDEwLjMyODQgMC42NzE1NzMgMTEgMS41IDExSDMuMzMzMzNMNy4yIDEzLjlDNy4zNTE1MSAxNC4wMTM2IDcuNTU0MjEgMTQuMDMxOSA3LjcyMzYxIDEzLjk0NzJDNy44OTMgMTMuODYyNSA4IDEzLjY4OTQgOCAxMy41VjEuNVpNMy44IDQuOUw3IDIuNVYxMi41TDMuOCAxMC4xQzMuNzEzNDUgMTAuMDM1MSAzLjYwODE5IDEwIDMuNSAxMEgxLjVDMS4yMjM4NiAxMCAxIDkuNzc2MTQgMSA5LjVWNS41QzEgNS4yMjM4NiAxLjIyMzg2IDUgMS41IDVIMy41QzMuNjA4MTkgNSAzLjcxMzQ1IDQuOTY0OTEgMy44IDQuOVpNMTAuMDgzIDUuMDU1NzdDOS45NjA2NiA0Ljg3MTg1IDkuNzEyMzUgNC44MjE5NSA5LjUyODQzIDQuOTQ0MzJDOS4zNDQ1IDUuMDY2NjkgOS4yOTQ2IDUuMzE0OTkgOS40MTY5NyA1LjQ5ODkyQzEwLjIyMDcgNi43MDY5MyAxMC4yMjA3IDguMjkzMDMgOS40MTY5NyA5LjUwMTA0QzkuMjk0NiA5LjY4NDk2IDkuMzQ0NSA5LjkzMzI2IDkuNTI4NDMgMTAuMDU1NkM5LjcxMjM1IDEwLjE3OCA5Ljk2MDY2IDEwLjEyODEgMTAuMDgzIDkuOTQ0MThDMTEuMDY1MyA4LjQ2NzczIDExLjA2NTMgNi41MzIyMiAxMC4wODMgNS4wNTU3N1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFRyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xIDFIMS41SDEzLjVIMTRWMS41VjEzLjVWMTRIMTMuNUgxLjVIMVYxMy41VjEuNVYxWk0yIDJWMTNIMTNWMkgyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sRHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNzU0MzIgMS44MTk1NEM3LjU5NzQyIDEuNzI2ODIgNy40MDI1IDEuNzI2ODIgNy4yNDU1OSAxLjgxOTU0TDEuNzQ1NTkgNS4wNjk1NEMxLjU5MzM2IDUuMTU5NDkgMS40OTk5NiA1LjMyMzE3IDEuNDk5OTYgNS41QzEuNDk5OTYgNS42NzY4MyAxLjU5MzM2IDUuODQwNTEgMS43NDU1OSA1LjkzMDQ2TDcuMjQ1NTkgOS4xODA0NkM3LjQwMjUgOS4yNzMxOCA3LjU5NzQyIDkuMjczMTggNy43NTQzMiA5LjE4MDQ2TDEzLjI1NDMgNS45MzA0NkMxMy40MDY2IDUuODQwNTEgMTMuNSA1LjY3NjgzIDEzLjUgNS41QzEzLjUgNS4zMjMxNyAxMy40MDY2IDUuMTU5NDkgMTMuMjU0MyA1LjA2OTU0TDcuNzU0MzIgMS44MTk1NFpNNy40OTk5NiA4LjE2OTIzTDIuOTgyOCA1LjVMNy40OTk5NiAyLjgzMDc3TDEyLjAxNzEgNS41TDcuNDk5OTYgOC4xNjkyM1pNMi4yNTQzMiA4LjMxOTU0QzIuMDE2NTggOC4xNzkwNiAxLjcwOTk4IDguMjU3OSAxLjU2OTQ5IDguNDk1NjRDMS40MjkwMSA4LjczMzM3IDEuNTA3ODUgOS4wMzk5OCAxLjc0NTU5IDkuMTgwNDZMNy4yNDU1OSAxMi40MzA1QzcuNDAyNSAxMi41MjMyIDcuNTk3NDIgMTIuNTIzMiA3Ljc1NDMyIDEyLjQzMDVMMTMuMjU0MyA5LjE4MDQ2QzEzLjQ5MjEgOS4wMzk5OCAxMy41NzA5IDguNzMzMzcgMTMuNDMwNCA4LjQ5NTY0QzEzLjI4OTkgOC4yNTc5IDEyLjk4MzMgOC4xNzkwNiAxMi43NDU2IDguMzE5NTRMNy40OTk5NiAxMS40MTkyTDIuMjU0MzIgOC4zMTk1NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEJyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02Ljk3OTQyIDEuMjUxNzFMNi45NTg1IDEuMzAxOTlMNS41ODY2MiA0LjYwMDM5QzUuNTQzNDIgNC43MDQyNiA1LjQ0NTczIDQuNzc1MjMgNS4zMzM2IDQuNzg0MjJMMS43NzI3IDUuMDY5N0wxLjcxODQxIDUuMDc0MDVMMS4zODY4NyA1LjEwMDYzTDEuMDg2MDggNS4xMjQ3NUMwLjgyMDA4NSA1LjE0NjA3IDAuNzEyMjI4IDUuNDc4MDIgMC45MTQ4ODkgNS42NTE2MkwxLjE0NDA2IDUuODQ3OTNMMS4zOTY2NiA2LjA2NDMxTDEuNDM4MDIgNi4wOTk3NEw0LjE1MTA1IDguNDIzNzRDNC4yMzY0OCA4LjQ5NjkyIDQuMjczOCA4LjYxMTc2IDQuMjQ3NjkgOC43MjExOEwzLjQxODgyIDEyLjE5NkwzLjQwNjE4IDEyLjI0OUwzLjMyOTAxIDEyLjU3MjVMMy4yNTg5OSAxMi44NjZDMy4xOTcwOCAxMy4xMjU2IDMuNDc5NDUgMTMuMzMwOCAzLjcwNzE4IDEzLjE5MTdMMy45NjQ3IDEzLjAzNDRMNC4yNDg1NCAxMi44NjFMNC4yOTUwMiAxMi44MzI2TDcuMzQzNjUgMTAuOTcwNUM3LjQzOTY1IDEwLjkxMTkgNy41NjA0IDEwLjkxMTkgNy42NTY0IDEwLjk3MDVMMTAuNzA1IDEyLjgzMjZMMTAuNzUxNSAxMi44NjFMMTEuMDM1NCAxMy4wMzQ0TDExLjI5MjkgMTMuMTkxN0MxMS41MjA2IDEzLjMzMDggMTEuODAzIDEzLjEyNTYgMTEuNzQxMSAxMi44NjZMMTEuNjcxIDEyLjU3MjVMMTEuNTkzOSAxMi4yNDlMMTEuNTgxMiAxMi4xOTZMMTAuNzUyNCA4LjcyMTE4QzEwLjcyNjMgOC42MTE3NiAxMC43NjM2IDguNDk2OTIgMTAuODQ5IDguNDIzNzRMMTMuNTYyIDYuMDk5NzRMMTMuNjAzNCA2LjA2NDMxTDEzLjg1NiA1Ljg0NzkzTDE0LjA4NTIgNS42NTE2MkMxNC4yODc4IDUuNDc4MDIgMTQuMTggNS4xNDYwNyAxMy45MTQgNS4xMjQ3NUwxMy42MTMyIDUuMTAwNjNMMTMuMjgxNiA1LjA3NDA1TDEzLjIyNzQgNS4wNjk3TDkuNjY2NDUgNC43ODQyMkM5LjU1NDMyIDQuNzc1MjMgOS40NTY2MyA0LjcwNDI2IDkuNDEzNDMgNC42MDAzOUw4LjA0MTU1IDEuMzAxOTlMOC4wMjA2NCAxLjI1MTcxTDcuODkyOTEgMC45NDQ2MDlMNy43NzcwMiAwLjY2NTk5MkM3LjY3NDU0IDAuNDE5NjA0IDcuMzI1NTEgMC40MTk2MDQgNy4yMjMwMyAwLjY2NTk5Mkw3LjEwNzE1IDAuOTQ0NjA5TDYuOTc5NDIgMS4yNTE3MVpNNy41MDAwMyAyLjYwMzk3TDYuNTA5OTQgNC45ODQ0MkM2LjMyMjczIDUuNDM0NTMgNS44OTk0NCA1Ljc0MjA3IDUuNDEzNTEgNS43ODEwM0wyLjg0MzYxIDUuOTg3MDVMNC44MDE2IDcuNjY0MjhDNS4xNzE4MyA3Ljk4MTQyIDUuMzMzNTEgOC40NzkwMyA1LjIyMDQgOC45NTMyMUw0LjYyMjIxIDExLjQ2MUw2LjgyMjQgMTAuMTE3MUM3LjIzODQyIDkuODYzMDIgNy43NjE2NCA5Ljg2MzAyIDguMTc3NjYgMTAuMTE3MUwxMC4zNzc4IDExLjQ2MUw5Ljc3OTY1IDguOTUzMjFDOS42NjY1NCA4LjQ3OTAzIDkuODI4MjIgNy45ODE0MiAxMC4xOTg0IDcuNjY0MjhMMTIuMTU2NCA1Ljk4NzA1TDkuNTg2NTQgNS43ODEwM0M5LjEwMDYxIDUuNzQyMDcgOC42NzczMiA1LjQzNDUzIDguNDkwMTEgNC45ODQ0Mkw3LjUwMDAzIDIuNjAzOTdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxacj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy4yMjMwMyAwLjY2NTk5MkM3LjMyNTUxIDAuNDE5NjA0IDcuNjc0NTQgMC40MTk2MDQgNy43NzcwMiAwLjY2NTk5Mkw5LjQxMzQzIDQuNjAwMzlDOS40NTY2MyA0LjcwNDI2IDkuNTU0MzIgNC43NzUyMyA5LjY2NjQ1IDQuNzg0MjJMMTMuOTE0IDUuMTI0NzVDMTQuMTggNS4xNDYwNyAxNC4yODc4IDUuNDc4MDIgMTQuMDg1MiA1LjY1MTYyTDEwLjg0OSA4LjQyMzc0QzEwLjc2MzYgOC40OTY5MiAxMC43MjYzIDguNjExNzYgMTAuNzUyNCA4LjcyMTE4TDExLjc0MTEgMTIuODY2QzExLjgwMyAxMy4xMjU2IDExLjUyMDYgMTMuMzMwOCAxMS4yOTI5IDEzLjE5MTdMNy42NTY0IDEwLjk3MDVDNy41NjA0IDEwLjkxMTkgNy40Mzk2NSAxMC45MTE5IDcuMzQzNjUgMTAuOTcwNUwzLjcwNzE4IDEzLjE5MTdDMy40Nzk0NSAxMy4zMzA4IDMuMTk3MDggMTMuMTI1NiAzLjI1ODk5IDEyLjg2Nkw0LjI0NzY5IDguNzIxMThDNC4yNzM4IDguNjExNzYgNC4yMzY0OCA4LjQ5NjkyIDQuMTUxMDUgOC40MjM3NEwwLjkxNDg4OSA1LjY1MTYyQzAuNzEyMjI4IDUuNDc4MDIgMC44MjAwODYgNS4xNDYwNyAxLjA4NjA4IDUuMTI0NzVMNS4zMzM2IDQuNzg0MjJDNS40NDU3MyA0Ljc3NTIzIDUuNTQzNDIgNC43MDQyNiA1LjU4NjYyIDQuNjAwMzlMNy4yMjMwMyAwLjY2NTk5MlpcIixmaWxsOm59KSl9LCRyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjg0OTk4IDcuNDk5OThDMS44NDk5OCA3LjIxMzIxIDEuODcxMzQgNi45MzE0MyAxLjkxMjU2IDYuNjU2MTVMOS41NjM3NCAyLjIzODc1QzkuODYzMTEgMi4zNTYyNyAxMC4xNSAyLjQ5ODYxIDEwLjQyMTkgMi42NjMyMkwzLjc3MDY1IDYuNTAzMzJDMy43MzY2OSA2LjUyMTgzIDMuNzA0ODIgNi41NDQ5IDMuNjc2MDIgNi41NzIzOEMzLjU5MTEgNi42NTMwOCAzLjU0MjQ1IDYuNzYyODYgMy41MzY4MiA2Ljg3NjU4QzMuNTMzNTkgNi45NDE4IDMuNTQ0NTEgNy4wMDgzMSAzLjU3MDg2IDcuMDcxMzdDMy41ODkyNyA3LjExNTcgMy42MTQ5IDcuMTU3NDIgMy42NDc0NCA3LjE5NDU4QzMuNjczMDYgNy4yMjM5NiAzLjcwMiA3LjI0OTQxIDMuNzMzMzcgNy4yNzA2OUw3LjMyNTMzIDkuODM4MTNMMy44NzIzMiAxMS44MzE3QzIuNjM2MDQgMTAuNzk1MyAxLjg0OTk4IDkuMjM5NDQgMS44NDk5OCA3LjQ5OTk4Wk04LjM2ODQzIDEwLjI3NTFDOC4zNzY4MiAxMC4yNzA2IDguMzg1MDkgMTAuMjY1OSA4LjM5MzIyIDEwLjI2MDhMOS44NDA5MSA5LjQyNDk5QzkuODQ3MDYgOS40MjE2MyA5Ljg1MzE0IDkuNDE4MTIgOS44NTkxNSA5LjQxNDQ2TDExLjMxMDEgOC41NzY3N0MxMS4zNjU1IDguNTQ2NDkgMTEuNDE1NCA4LjUwNCAxMS40NTU0IDguNDQ5OTVDMTEuNjAzNCA4LjI1MDMxIDExLjU2MTYgNy45Njg0OCAxMS4zNjIgNy44MjA0Nkw3LjgyNzc5IDUuMjAwMTdMMTEuMjE2MSAzLjI0MzkzQzEyLjQwMTMgNC4yNzk2MyAxMy4xNSA1LjgwMjM3IDEzLjE1IDcuNDk5OThDMTMuMTUgNy44MzU0NiAxMy4xMjA3IDguMTY0MTEgMTMuMDY0NyA4LjQ4MzUzTDUuNTY4NzUgMTIuODExM0M1LjI2MTM4IDEyLjY5OTUgNC45NjY0NiAxMi41NjE4IDQuNjg2NjIgMTIuNDAwOEw4LjM2ODQzIDEwLjI3NTFaTTguMTgxNDkgOS4zNDM4M0w0LjgxNjU5IDYuOTM4NjhMNS41MDkxOCA2LjUzODgxTDguODA2MDQgOC45ODMyNEw4LjE4MTQ5IDkuMzQzODNaTTYuMzU4NzUgNi4wNDgzMkw2Ljk3ODIyIDUuNjkwNjdMMTAuMjc1MSA4LjEzNTA2TDkuNjU1NiA4LjQ5Mjc1TDYuMzU4NzUgNi4wNDgzMlpNOC4zMzE4IDEuOTEwNzhMMi4yNDI2MyA1LjQyNjM2QzMuMDY5NDEgMy4zMzE4OCA1LjExMTY0IDEuODQ5OTggNy40OTk5OCAxLjg0OTk4QzcuNzgyNTggMS44NDk5OCA4LjA2MDMzIDEuODcwNzIgOC4zMzE4IDEuOTEwNzhaTTYuODQ2ODQgMTMuMTEyNkM3LjA2MTE0IDEzLjEzNzMgNy4yNzkwOCAxMy4xNSA3LjQ5OTk4IDEzLjE1QzkuODI0NiAxMy4xNSAxMS44MjEzIDExLjc0NjEgMTIuNjg4NiA5LjczOTlMNi44NDY4NCAxMy4xMTI2Wk03LjQ5OTk4IDAuODQ5OTc2QzMuODI3MjggMC44NDk5NzYgMC44NDk5NzYgMy44MjcyOCAwLjg0OTk3NiA3LjQ5OTk4QzAuODQ5OTc2IDExLjE3MjcgMy44MjcyOCAxNC4xNSA3LjQ5OTk4IDE0LjE1QzExLjE3MjcgMTQuMTUgMTQuMTUgMTEuMTcyNyAxNC4xNSA3LjQ5OTk4QzE0LjE1IDMuODI3MjggMTEuMTcyNyAwLjg0OTk3NiA3LjQ5OTk4IDAuODQ5OTc2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTnI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIgM0MyIDIuNDQ3NzIgMi40NDc3MiAyIDMgMkgxMkMxMi41NTIzIDIgMTMgMi40NDc3MiAxMyAzVjEyQzEzIDEyLjU1MjMgMTIuNTUyMyAxMyAxMiAxM0gzQzIuNDQ3NzIgMTMgMiAxMi41NTIzIDIgMTJWM1pNMTIgM0gzVjEySDEyVjNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxGcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNS40OTk5OCAwLjVDNS40OTk5OCAwLjIyMzg1OCA1LjcyMzgzIDAgNS45OTk5OCAwSDcuNDk5OThIOC45OTk5OEM5LjI3NjEyIDAgOS40OTk5OCAwLjIyMzg1OCA5LjQ5OTk4IDAuNUM5LjQ5OTk4IDAuNzc2MTQyIDkuMjc2MTIgMSA4Ljk5OTk4IDFINy45OTk5OFYyLjExOTIyQzkuMDk4MzIgMi4yMDQwOSAxMC4xMTkgMi41NjYyMiAxMC45OTIgMy4xMzU3MkMxMS4wMTE2IDMuMTA4NTEgMTEuMDMzNiAzLjA4MjUyIDExLjA1OCAzLjA1ODA2TDExLjg1OCAyLjI1ODA2QzEyLjEwMjEgMi4wMTM5OCAxMi40OTc4IDIuMDEzOTggMTIuNzQxOSAyLjI1ODA2QzEyLjk4NiAyLjUwMjE0IDEyLjk4NiAyLjg5Nzg2IDEyLjc0MTkgMy4xNDE5NEwxMS45NjcgMy45MTY4MkMxMy4xNTk1IDUuMDc5MjUgMTMuOSA2LjcwMzE0IDEzLjkgOC40OTk5OEMxMy45IDEyLjAzNDYgMTEuMDM0NiAxNC45IDcuNDk5OTggMTQuOUMzLjk2NTM1IDE0LjkgMS4wOTk5OCAxMi4wMzQ2IDEuMDk5OTggOC40OTk5OEMxLjA5OTk4IDUuMTMzNjIgMy42OTkwNCAyLjM3NDMgNi45OTk5OCAyLjExOTIyVjFINS45OTk5OEM1LjcyMzgzIDEgNS40OTk5OCAwLjc3NjE0MiA1LjQ5OTk4IDAuNVpNMi4wOTk5OCA4LjQ5OTk4QzIuMDk5OTggNS41MTc2NCA0LjUxNzY0IDMuMDk5OTggNy40OTk5OCAzLjA5OTk4QzEwLjQ4MjMgMy4wOTk5OCAxMi45IDUuNTE3NjQgMTIuOSA4LjQ5OTk4QzEyLjkgMTEuNDgyMyAxMC40ODIzIDEzLjkgNy40OTk5OCAxMy45QzQuNTE3NjQgMTMuOSAyLjA5OTk4IDExLjQ4MjMgMi4wOTk5OCA4LjQ5OTk4Wk03Ljk5OTk4IDQuNUM3Ljk5OTk4IDQuMjIzODYgNy43NzYxMiA0IDcuNDk5OTggNEM3LjIyMzgzIDQgNi45OTk5OCA0LjIyMzg2IDYuOTk5OTggNC41VjkuNUM2Ljk5OTk4IDkuNzc2MTQgNy4yMjM4MyAxMCA3LjQ5OTk4IDEwQzcuNzc2MTIgMTAgNy45OTk5OCA5Ljc3NjE0IDcuOTk5OTggOS41VjQuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFdyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xNC40OTk5IDAuOTk5OTkyQzE0LjIyMzcgMC45OTk5OTIgMTMuOTk5OSAxLjIyMzg1IDEzLjk5OTkgMS40OTk5OUwxMy45OTk5IDUuOTk5OTVMMC45OTk5OTIgNS45OTk5NUwwLjk5OTk5MiAxLjQ5OTk5QzAuOTk5OTkyIDEuMjIzODUgMC43NzYxMzYgMC45OTk5OTIgMC40OTk5OTYgMC45OTk5OTJDMC4yMjM4NTYgMC45OTk5OTIgLTkuNzg1MDllLTA5IDEuMjIzODUgLTIuMTg1NTZlLTA4IDEuNDk5OTlMNC4wNzI3OWUtMDcgMTMuNDk5OUMzLjk1MjA4ZS0wNyAxMy43NzYgMC4yMjM4NTUgMTMuOTk5OSAwLjQ5OTk5NiAxMy45OTk5QzAuNzc2MTM2IDEzLjk5OTkgMC45OTk5OTIgMTMuNzc2IDAuOTk5OTkyIDEzLjQ5OTlMMC45OTk5OTIgOC45OTk5MkwxMy45OTk5IDguOTk5OTJMMTMuOTk5OSAxMy40OTk5QzEzLjk5OTkgMTMuNzc2IDE0LjIyMzcgMTMuOTk5OSAxNC40OTk5IDEzLjk5OTlDMTQuNzc2IDEzLjk5OTkgMTQuOTk5OSAxMy43NzYgMTQuOTk5OSAxMy40OTk5TDE0Ljk5OTkgMS40OTk5OUMxNC45OTk5IDEuMjIzODUgMTQuNzc2IDAuOTk5OTkyIDE0LjQ5OTkgMC45OTk5OTJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxVcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC45OTk4NzggMC41QzAuOTk5ODc4IDAuMjIzODU4IDEuMjIzNzQgMCAxLjQ5OTg4IDBIMTMuNDk5OUMxMy43NzYgMCAxMy45OTk5IDAuMjIzODU4IDEzLjk5OTkgMC41QzEzLjk5OTkgMC43NzYxNDIgMTMuNzc2IDEgMTMuNDk5OSAxSDZIMS40OTk4OEMxLjIyMzc0IDEgMC45OTk4NzggMC43NzYxNDIgMC45OTk4NzggMC41Wk05IDE0VjFMNiAxVjE0SDEuNDk5ODhDMS4yMjM3NCAxNCAwLjk5OTg3OCAxNC4yMjM5IDAuOTk5ODc4IDE0LjVDMC45OTk4NzggMTQuNzc2MSAxLjIyMzc0IDE1IDEuNDk5ODggMTVIMTMuNDk5OUMxMy43NzYgMTUgMTMuOTk5OSAxNC43NzYxIDEzLjk5OTkgMTQuNUMxMy45OTk5IDE0LjIyMzkgMTMuNzc2IDE0IDEzLjQ5OTkgMTRIOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHpyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjAwMDAzIDMuMjVDNS4wMDAwMyAyLjk3Mzg2IDQuNzc2MTcgMi43NSA0LjUwMDAzIDIuNzVDNC4yMjM4OSAyLjc1IDQuMDAwMDMgMi45NzM4NiA0LjAwMDAzIDMuMjVWNy4xMDAwM0gyLjQ5OTk4QzIuMjc5MDYgNy4xMDAwMyAyLjA5OTk4IDcuMjc5MTIgMi4wOTk5OCA3LjUwMDAzQzIuMDk5OTggNy43MjA5NCAyLjI3OTA2IDcuOTAwMDMgMi40OTk5OCA3LjkwMDAzSDQuMDAwMDNWOC41NUM0LjAwMDAzIDEwLjQ4MyA1LjU2NzAzIDEyLjA1IDcuNTAwMDMgMTIuMDVDOS40MzMwMyAxMi4wNSAxMSAxMC40ODMgMTEgOC41NVY3LjkwMDAzSDEyLjVDMTIuNzIwOSA3LjkwMDAzIDEyLjkgNy43MjA5NCAxMi45IDcuNTAwMDNDMTIuOSA3LjI3OTEyIDEyLjcyMDkgNy4xMDAwMyAxMi41IDcuMTAwMDNIMTFWMy4yNUMxMSAyLjk3Mzg2IDEwLjc3NjIgMi43NSAxMC41IDIuNzVDMTAuMjIzOSAyLjc1IDEwIDIuOTczODYgMTAgMy4yNVY3LjEwMDAzSDUuMDAwMDNWMy4yNVpNNS4wMDAwMyA3LjkwMDAzVjguNTVDNS4wMDAwMyA5LjkzMDcxIDYuMTE5MzIgMTEuMDUgNy41MDAwMyAxMS4wNUM4Ljg4MDc0IDExLjA1IDEwIDkuOTMwNzEgMTAgOC41NVY3LjkwMDAzSDUuMDAwMDNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxHcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41IDBDNy43NzYxNCAwIDggMC4yMjM4NTggOCAwLjVWMi41QzggMi43NzYxNCA3Ljc3NjE0IDMgNy41IDNDNy4yMjM4NiAzIDcgMi43NzYxNCA3IDIuNVYwLjVDNyAwLjIyMzg1OCA3LjIyMzg2IDAgNy41IDBaTTIuMTk2NyAyLjE5NjdDMi4zOTE5NiAyLjAwMTQ0IDIuNzA4NTQgMi4wMDE0NCAyLjkwMzgxIDIuMTk2N0w0LjMxODAyIDMuNjEwOTFDNC41MTMyOCAzLjgwNjE3IDQuNTEzMjggNC4xMjI3NiA0LjMxODAyIDQuMzE4MDJDNC4xMjI3NiA0LjUxMzI4IDMuODA2MTcgNC41MTMyOCAzLjYxMDkxIDQuMzE4MDJMMi4xOTY3IDIuOTAzODFDMi4wMDE0NCAyLjcwODU0IDIuMDAxNDQgMi4zOTE5NiAyLjE5NjcgMi4xOTY3Wk0wLjUgN0MwLjIyMzg1OCA3IDAgNy4yMjM4NiAwIDcuNUMwIDcuNzc2MTQgMC4yMjM4NTggOCAwLjUgOEgyLjVDMi43NzYxNCA4IDMgNy43NzYxNCAzIDcuNUMzIDcuMjIzODYgMi43NzYxNCA3IDIuNSA3SDAuNVpNMi4xOTY3IDEyLjgwMzNDMi4wMDE0NCAxMi42MDggMi4wMDE0NCAxMi4yOTE1IDIuMTk2NyAxMi4wOTYyTDMuNjEwOTEgMTAuNjgyQzMuODA2MTcgMTAuNDg2NyA0LjEyMjc2IDEwLjQ4NjcgNC4zMTgwMiAxMC42ODJDNC41MTMyOCAxMC44NzcyIDQuNTEzMjggMTEuMTkzOCA0LjMxODAyIDExLjM4OTFMMi45MDM4MSAxMi44MDMzQzIuNzA4NTQgMTIuOTk4NiAyLjM5MTk2IDEyLjk5ODYgMi4xOTY3IDEyLjgwMzNaTTEyLjUgN0MxMi4yMjM5IDcgMTIgNy4yMjM4NiAxMiA3LjVDMTIgNy43NzYxNCAxMi4yMjM5IDggMTIuNSA4SDE0LjVDMTQuNzc2MSA4IDE1IDcuNzc2MTQgMTUgNy41QzE1IDcuMjIzODYgMTQuNzc2MSA3IDE0LjUgN0gxMi41Wk0xMC42ODIgNC4zMTgwMkMxMC40ODY3IDQuMTIyNzYgMTAuNDg2NyAzLjgwNjE3IDEwLjY4MiAzLjYxMDkxTDEyLjA5NjIgMi4xOTY3QzEyLjI5MTUgMi4wMDE0NCAxMi42MDggMi4wMDE0NCAxMi44MDMzIDIuMTk2N0MxMi45OTg2IDIuMzkxOTYgMTIuOTk4NiAyLjcwODU0IDEyLjgwMzMgMi45MDM4MUwxMS4zODkxIDQuMzE4MDJDMTEuMTkzOCA0LjUxMzI4IDEwLjg3NzIgNC41MTMyOCAxMC42ODIgNC4zMTgwMlpNOCAxMi41QzggMTIuMjIzOSA3Ljc3NjE0IDEyIDcuNSAxMkM3LjIyMzg2IDEyIDcgMTIuMjIzOSA3IDEyLjVWMTQuNUM3IDE0Ljc3NjEgNy4yMjM4NiAxNSA3LjUgMTVDNy43NzYxNCAxNSA4IDE0Ljc3NjEgOCAxNC41VjEyLjVaTTEwLjY4MiAxMC42ODJDMTAuODc3MiAxMC40ODY3IDExLjE5MzggMTAuNDg2NyAxMS4zODkxIDEwLjY4MkwxMi44MDMzIDEyLjA5NjJDMTIuOTk4NiAxMi4yOTE1IDEyLjk5ODYgMTIuNjA4IDEyLjgwMzMgMTIuODAzM0MxMi42MDggMTIuOTk4NiAxMi4yOTE1IDEyLjk5ODYgMTIuMDk2MiAxMi44MDMzTDEwLjY4MiAxMS4zODkxQzEwLjQ4NjcgMTEuMTkzOCAxMC40ODY3IDEwLjg3NzIgMTAuNjgyIDEwLjY4MlpNNS41IDcuNUM1LjUgNi4zOTU0MyA2LjM5NTQzIDUuNSA3LjUgNS41QzguNjA0NTcgNS41IDkuNSA2LjM5NTQzIDkuNSA3LjVDOS41IDguNjA0NTcgOC42MDQ1NyA5LjUgNy41IDkuNUM2LjM5NTQzIDkuNSA1LjUgOC42MDQ1NyA1LjUgNy41Wk03LjUgNC41QzUuODQzMTUgNC41IDQuNSA1Ljg0MzE1IDQuNSA3LjVDNC41IDkuMTU2ODUgNS44NDMxNSAxMC41IDcuNSAxMC41QzkuMTU2ODUgMTAuNSAxMC41IDkuMTU2ODUgMTAuNSA3LjVDMTAuNSA1Ljg0MzE1IDkuMTU2ODUgNC41IDcuNSA0LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxLcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTAuNSA0QzguNTY3IDQgNyA1LjU2NyA3IDcuNUM3IDkuNDMzIDguNTY3IDExIDEwLjUgMTFDMTIuNDMzIDExIDE0IDkuNDMzIDE0IDcuNUMxNCA1LjU2NyAxMi40MzMgNCAxMC41IDRaTTcuNjcxMzMgMTFDNi42NTE4MyAxMC4xNzUgNiA4LjkxMzYzIDYgNy41QzYgNi4wODYzNyA2LjY1MTgzIDQuODI0OTggNy42NzEzMyA0SDQuNUMyLjU2NyA0IDEgNS41NjcgMSA3LjVDMSA5LjQzMyAyLjU2NyAxMSA0LjUgMTFINy42NzEzM1pNMCA3LjVDMCA1LjAxNDcyIDIuMDE0NzIgMyA0LjUgM0gxMC41QzEyLjk4NTMgMyAxNSA1LjAxNDcyIDE1IDcuNUMxNSA5Ljk4NTI4IDEyLjk4NTMgMTIgMTAuNSAxMkg0LjVDMi4wMTQ3MiAxMiAwIDkuOTg1MjggMCA3LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxxcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS45MDMyMSA3LjI5Njc3QzEuOTAzMjEgMTAuMzQxIDQuMTEwNDEgMTIuNDE0NyA2LjU4ODkzIDEyLjg0MzlDNi44NzI1NSAxMi44OTMgNy4wNjI2NiAxMy4xNjI3IDcuMDEzNTUgMTMuNDQ2NEM2Ljk2NDQ0IDEzLjczIDYuNjk0NzEgMTMuOTIwMSA2LjQxMTA5IDEzLjg3MUMzLjQ5OTQyIDEzLjM2NjggMC44NjA4NCAxMC45MTI3IDAuODYwODQgNy4yOTY3N0MwLjg2MDgzOSA1Ljc2MDA5IDEuNTU5OTYgNC41NTI0NSAyLjM3NjM5IDMuNjMzNzdDMi45NjEyNCAyLjk3NTY4IDMuNjMwMzQgMi40NDEzNSA0LjE2ODQ2IDIuMDMyMDJMMi41MzIwNSAyLjAzMjAyQzIuMjU1OTEgMi4wMzIwMiAyLjAzMjA1IDEuODA4MTYgMi4wMzIwNSAxLjUzMjAyQzIuMDMyMDUgMS4yNTU4OCAyLjI1NTkxIDEuMDMyMDIgMi41MzIwNSAxLjAzMjAyTDUuNTMyMDUgMS4wMzIwMkM1LjgwODE5IDEuMDMyMDIgNi4wMzIwNSAxLjI1NTg4IDYuMDMyMDUgMS41MzIwMkw2LjAzMjA1IDQuNTMyMDJDNi4wMzIwNSA0LjgwODE2IDUuODA4MTkgNS4wMzIwMiA1LjUzMjA1IDUuMDMyMDJDNS4yNTU5MSA1LjAzMjAyIDUuMDMyMDUgNC44MDgxNiA1LjAzMjA1IDQuNTMyMDJMNS4wMzIwNSAyLjY4NjQ1TDUuMDMwNTQgMi42ODc1OUw1LjAzMDQ1IDIuNjg3NjZMNS4wMzA0NCAyLjY4NzY3TDUuMDMwNDMgMi42ODc2N0M0LjQ1ODk2IDMuMTE4NjggMy43NjA1OSAzLjY0NTM4IDMuMTU1NTQgNC4zMjYyQzIuNDQxMDIgNS4xMzAyMSAxLjkwMzIxIDYuMTAxNTQgMS45MDMyMSA3LjI5Njc3Wk0xMy4wMTA5IDcuNzAzMjFDMTMuMDEwOSA0LjY5MTE1IDEwLjg1MDUgMi42Mjk2IDguNDAzODQgMi4xNzAyOUM4LjEyMDkzIDIuMTE3MTggNy45MzQ2NSAxLjg0NDc5IDcuOTg3NzYgMS41NjE4OEM4LjA0MDg3IDEuMjc4OTggOC4zMTMyNiAxLjA5MjcgOC41OTYxNiAxLjE0NTgxQzExLjQ3MDQgMS42ODU0MSAxNC4wNTMyIDQuMTI2MDUgMTQuMDUzMiA3LjcwMzIxQzE0LjA1MzIgOS4yMzk4OCAxMy4zNTQxIDEwLjQ0NzUgMTIuNTM3NyAxMS4zNjYyQzExLjk1MjggMTIuMDI0MyAxMS4yODM3IDEyLjU1ODYgMTAuNzQ1NiAxMi45NjhMMTIuMzgyMSAxMi45NjhDMTIuNjU4MiAxMi45NjggMTIuODgyMSAxMy4xOTE4IDEyLjg4MjEgMTMuNDY4QzEyLjg4MjEgMTMuNzQ0MSAxMi42NTgyIDEzLjk2OCAxMi4zODIxIDEzLjk2OEw5LjM4MjA1IDEzLjk2OEM5LjEwNTkxIDEzLjk2OCA4Ljg4MjA1IDEzLjc0NDEgOC44ODIwNSAxMy40NjhMOC44ODIwNSAxMC40NjhDOC44ODIwNSAxMC4xOTE4IDkuMTA1OTEgOS45Njc5NiA5LjM4MjA1IDkuOTY3OTZDOS42NTgxOSA5Ljk2Nzk2IDkuODgyMDUgMTAuMTkxOCA5Ljg4MjA1IDEwLjQ2OEw5Ljg4MjA1IDEyLjMxMzVMOS44ODM2MiAxMi4zMTIzQzEwLjQ1NTEgMTEuODgxMyAxMS4xNTM1IDExLjM1NDYgMTEuNzU4NSAxMC42NzM4QzEyLjQ3MzEgOS44Njk3NiAxMy4wMTA5IDguODk4NDQgMTMuMDEwOSA3LjcwMzIxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sWXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTggMkgxMi41QzEyLjc3NjEgMiAxMyAyLjIyMzg2IDEzIDIuNVY1SDhWMlpNNyA1VjJIMi41QzIuMjIzODYgMiAyIDIuMjIzODYgMiAyLjVWNUg3Wk0yIDZWOUg3VjZIMlpNOCA2SDEzVjlIOFY2Wk04IDEwSDEzVjEyLjVDMTMgMTIuNzc2MSAxMi43NzYxIDEzIDEyLjUgMTNIOFYxMFpNMiAxMi41VjEwSDdWMTNIMi41QzIuMjIzODYgMTMgMiAxMi43NzYxIDIgMTIuNVpNMSAyLjVDMSAxLjY3MTU3IDEuNjcxNTcgMSAyLjUgMUgxMi41QzEzLjMyODQgMSAxNCAxLjY3MTU3IDE0IDIuNVYxMi41QzE0IDEzLjMyODQgMTMuMzI4NCAxNCAxMi41IDE0SDIuNUMxLjY3MTU3IDE0IDEgMTMuMzI4NCAxIDEyLjVWMi41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sSnI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuOTAwMDI0IDcuNTAwMDJDMC45MDAwMjQgMy44NTQ5NSAzLjg1NDk1IDAuOTAwMDI0IDcuNTAwMDIgMC45MDAwMjRDMTEuMTQ1MSAwLjkwMDAyNCAxNC4xIDMuODU0OTUgMTQuMSA3LjUwMDAyQzE0LjEgMTEuMTQ1MSAxMS4xNDUxIDE0LjEgNy41MDAwMiAxNC4xQzMuODU0OTUgMTQuMSAwLjkwMDAyNCAxMS4xNDUxIDAuOTAwMDI0IDcuNTAwMDJaTTcuNTAwMDIgMS44MDAwMkM0LjM1MjAxIDEuODAwMDIgMS44MDAwMiA0LjM1MjAxIDEuODAwMDIgNy41MDAwMkMxLjgwMDAyIDEwLjY0OCA0LjM1MjAxIDEzLjIgNy41MDAwMiAxMy4yQzEwLjY0OCAxMy4yIDEzLjIgMTAuNjQ4IDEzLjIgNy41MDAwMkMxMy4yIDQuMzUyMDEgMTAuNjQ4IDEuODAwMDIgNy41MDAwMiAxLjgwMDAyWk0zLjA3NTA0IDcuNTAwMDJDMy4wNzUwNCA1LjA1NjE3IDUuMDU2MTggMy4wNzUwMiA3LjUwMDA0IDMuMDc1MDJDOS45NDM4OCAzLjA3NTAyIDExLjkyNSA1LjA1NjE3IDExLjkyNSA3LjUwMDAyQzExLjkyNSA5Ljk0Mzg2IDkuOTQzODggMTEuOTI1IDcuNTAwMDQgMTEuOTI1QzUuMDU2MTggMTEuOTI1IDMuMDc1MDQgOS45NDM4NiAzLjA3NTA0IDcuNTAwMDJaTTcuNTAwMDQgMy45MjUwMkM1LjUyNTYyIDMuOTI1MDIgMy45MjUwNCA1LjUyNTYxIDMuOTI1MDQgNy41MDAwMkMzLjkyNTA0IDkuNDc0NDIgNS41MjU2MyAxMS4wNzUgNy41MDAwNCAxMS4wNzVDOS40NzQ0NCAxMS4wNzUgMTEuMDc1IDkuNDc0NDIgMTEuMDc1IDcuNTAwMDJDMTEuMDc1IDUuNTI1NjEgOS40NzQ0NCAzLjkyNTAyIDcuNTAwMDQgMy45MjUwMlpNNy41MDAwNCA1LjI1MDAyQzYuMjU3NCA1LjI1MDAyIDUuMjUwMDQgNi4yNTczOSA1LjI1MDA0IDcuNTAwMDJDNS4yNTAwNCA4Ljc0MjY2IDYuMjU3NCA5Ljc1MDAyIDcuNTAwMDQgOS43NTAwMkM4Ljc0MjY3IDkuNzUwMDIgOS43NTAwNCA4Ljc0MjY2IDkuNzUwMDQgNy41MDAwMkM5Ljc1MDA0IDYuMjU3MzggOC43NDI2NyA1LjI1MDAyIDcuNTAwMDQgNS4yNTAwMlpNNi4wNTAwNCA3LjUwMDAyQzYuMDUwMDQgNi42OTkyMSA2LjY5OTIzIDYuMDUwMDIgNy41MDAwNCA2LjA1MDAyQzguMzAwODQgNi4wNTAwMiA4Ljk1MDA0IDYuNjk5MjEgOC45NTAwNCA3LjUwMDAyQzguOTUwMDQgOC4zMDA4MyA4LjMwMDg0IDguOTUwMDIgNy41MDAwNCA4Ljk1MDAyQzYuNjk5MjMgOC45NTAwMiA2LjA1MDA0IDguMzAwODMgNi4wNTAwNCA3LjUwMDAyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sWHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuOTQ5OTMgMi45NTAwMkwzLjk0OTkzIDQuNDk5OThDMy45NDk5MyA0Ljc0ODUxIDMuNzQ4NDUgNC45NDk5OCAzLjQ5OTkzIDQuOTQ5OThDMy4yNTE0IDQuOTQ5OTggMy4wNDk5MyA0Ljc0ODUxIDMuMDQ5OTMgNC40OTk5OFYyLjUwMDA0QzMuMDQ5OTMgMi40NTI0NiAzLjA1NzMxIDIuNDA2NjEgMy4wNzA5OSAyLjM2MzU3QzMuMTI4NzggMi4xODE3NSAzLjI5ODk3IDIuMDUwMDIgMy40OTk5MyAyLjA1MDAySDExLjQ5OTlDMTEuNjU1MyAyLjA1MDAyIDExLjc5MjIgMi4xMjg3MiAxMS44NzMxIDIuMjQ4NDJDMTEuOTIxNiAyLjMyMDI0IDExLjk0OTkgMi40MDY4MiAxMS45NDk5IDIuNTAwMDJMMTEuOTQ5OSAyLjUwMDA0VjQuNDk5OThDMTEuOTQ5OSA0Ljc0ODUxIDExLjc0ODUgNC45NDk5OCAxMS40OTk5IDQuOTQ5OThDMTEuMjUxNCA0Ljk0OTk4IDExLjA0OTkgNC43NDg1MSAxMS4wNDk5IDQuNDk5OThWMi45NTAwMkg4LjA0OTkzVjEyLjA1SDkuMjU0MjhDOS41MDI4MSAxMi4wNSA5LjcwNDI4IDEyLjI1MTUgOS43MDQyOCAxMi41QzkuNzA0MjggMTIuNzQ4NiA5LjUwMjgxIDEyLjk1IDkuMjU0MjggMTIuOTVINS43NTQyOEM1LjUwNTc1IDEyLjk1IDUuMzA0MjggMTIuNzQ4NiA1LjMwNDI4IDEyLjVDNS4zMDQyOCAxMi4yNTE1IDUuNTA1NzUgMTIuMDUgNS43NTQyOCAxMi4wNUg2Ljk0OTkzVjIuOTUwMDJIMy45NDk5M1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFFyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yIDQuNUMyIDQuMjIzODYgMi4yMjM4NiA0IDIuNSA0SDEyLjVDMTIuNzc2MSA0IDEzIDQuMjIzODYgMTMgNC41QzEzIDQuNzc2MTQgMTIuNzc2MSA1IDEyLjUgNUgyLjVDMi4yMjM4NiA1IDIgNC43NzYxNCAyIDQuNVpNNCA3LjVDNCA3LjIyMzg2IDQuMjIzODYgNyA0LjUgN0gxMC41QzEwLjc3NjEgNyAxMSA3LjIyMzg2IDExIDcuNUMxMSA3Ljc3NjE0IDEwLjc3NjEgOCAxMC41IDhINC41QzQuMjIzODYgOCA0IDcuNzc2MTQgNCA3LjVaTTMgMTAuNUMzIDEwLjIyMzkgMy4yMjM4NiAxMCAzLjUgMTBIMTEuNUMxMS43NzYxIDEwIDEyIDEwLjIyMzkgMTIgMTAuNUMxMiAxMC43NzYxIDExLjc3NjEgMTEgMTEuNSAxMUgzLjVDMy4yMjM4NiAxMSAzIDEwLjc3NjEgMyAxMC41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZW89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuNSA0QzIuMjIzODYgNCAyIDQuMjIzODYgMiA0LjVDMiA0Ljc3NjE0IDIuMjIzODYgNSAyLjUgNUgxMi41QzEyLjc3NjEgNSAxMyA0Ljc3NjE0IDEzIDQuNUMxMyA0LjIyMzg2IDEyLjc3NjEgNCAxMi41IDRIMi41Wk0yIDcuNUMyIDcuMjIzODYgMi4yMjM4NiA3IDIuNSA3SDEyLjVDMTIuNzc2MSA3IDEzIDcuMjIzODYgMTMgNy41QzEzIDcuNzc2MTQgMTIuNzc2MSA4IDEyLjUgOEgyLjVDMi4yMjM4NiA4IDIgNy43NzYxNCAyIDcuNVpNMiAxMC41QzIgMTAuMjIzOSAyLjIyMzg2IDEwIDIuNSAxMEgxMi41QzEyLjc3NjEgMTAgMTMgMTAuMjIzOSAxMyAxMC41QzEzIDEwLjc3NjEgMTIuNzc2MSAxMSAxMi41IDExSDIuNUMyLjIyMzg2IDExIDIgMTAuNzc2MSAyIDEwLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx0bz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiA0LjVDMiA0LjIyMzg2IDIuMjIzODYgNCAyLjUgNEgxMi41QzEyLjc3NjEgNCAxMyA0LjIyMzg2IDEzIDQuNUMxMyA0Ljc3NjE0IDEyLjc3NjEgNSAxMi41IDVIMi41QzIuMjIzODYgNSAyIDQuNzc2MTQgMiA0LjVaTTIgNy41QzIgNy4yMjM4NiAyLjIyMzg2IDcgMi41IDdINy41QzcuNzc2MTQgNyA4IDcuMjIzODYgOCA3LjVDOCA3Ljc3NjE0IDcuNzc2MTQgOCA3LjUgOEgyLjVDMi4yMjM4NiA4IDIgNy43NzYxNCAyIDcuNVpNMiAxMC41QzIgMTAuMjIzOSAyLjIyMzg2IDEwIDIuNSAxMEgxMC41QzEwLjc3NjEgMTAgMTEgMTAuMjIzOSAxMSAxMC41QzExIDEwLjc3NjEgMTAuNzc2MSAxMSAxMC41IDExSDIuNUMyLjIyMzg2IDExIDIgMTAuNzc2MSAyIDEwLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxubz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiA0LjVDMiA0LjIyMzg2IDIuMjIzODYgNCAyLjUgNEgxMi41QzEyLjc3NjEgNCAxMyA0LjIyMzg2IDEzIDQuNUMxMyA0Ljc3NjE0IDEyLjc3NjEgNSAxMi41IDVIMi41QzIuMjIzODYgNSAyIDQuNzc2MTQgMiA0LjVaTTcgNy41QzcgNy4yMjM4NiA3LjIyMzg2IDcgNy41IDdIMTIuNUMxMi43NzYxIDcgMTMgNy4yMjM4NiAxMyA3LjVDMTMgNy43NzYxNCAxMi43NzYxIDggMTIuNSA4SDcuNUM3LjIyMzg2IDggNyA3Ljc3NjE0IDcgNy41Wk00IDEwLjVDNCAxMC4yMjM5IDQuMjIzODYgMTAgNC41IDEwSDEyLjVDMTIuNzc2MSAxMCAxMyAxMC4yMjM5IDEzIDEwLjVDMTMgMTAuNzc2MSAxMi43NzYxIDExIDEyLjUgMTFINC41QzQuMjIzODYgMTEgNCAxMC43NzYxIDQgMTAuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHJvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMy4zNTM2IDIuMzUzNTVDMTMuNTQ4OCAyLjE1ODI5IDEzLjU0ODggMS44NDE3MSAxMy4zNTM2IDEuNjQ2NDVDMTMuMTU4MyAxLjQ1MTE4IDEyLjg0MTcgMS40NTExOCAxMi42NDY0IDEuNjQ2NDVMMTEuOTI5MSAyLjM2MzgzQzExLjkxNTkgMi4zMjI0NiAxMS44OTcgMi4yODM2OCAxMS44NzMyIDIuMjQ4NDVDMTEuNzkyMyAyLjEyODc1IDExLjY1NTQgMi4wNTAwNSAxMS41MDAxIDIuMDUwMDVIMy41MDAwNUMzLjI5OTA5IDIuMDUwMDUgMy4xMjg5IDIuMTgxNzggMy4wNzExMSAyLjM2MzZDMy4wNTc0MyAyLjQwNjY1IDMuMDUwMDUgMi40NTI0OSAzLjA1MDA1IDIuNTAwMDdWNC41MDAwMUMzLjA1MDA1IDQuNzQ4NTQgMy4yNTE1MiA0Ljk1MDAxIDMuNTAwMDUgNC45NTAwMUMzLjc0ODU4IDQuOTUwMDEgMy45NTAwNSA0Ljc0ODU0IDMuOTUwMDUgNC41MDAwMVYyLjk1MDA1SDYuOTUwMDZWNy4zNDI4NEwxLjY0NjQ1IDEyLjY0NjRDMS40NTExOCAxMi44NDE3IDEuNDUxMTggMTMuMTU4MyAxLjY0NjQ1IDEzLjM1MzZDMS44NDE3MSAxMy41NDg4IDIuMTU4MjkgMTMuNTQ4OCAyLjM1MzU1IDEzLjM1MzZMNi45NTAwNiA4Ljc1NzA1VjEyLjA1MDFINS43NTQ0QzUuNTA1ODcgMTIuMDUwMSA1LjMwNDQgMTIuMjUxNSA1LjMwNDQgMTIuNTAwMUM1LjMwNDQgMTIuNzQ4NiA1LjUwNTg3IDEyLjk1MDEgNS43NTQ0IDEyLjk1MDFIOS4yNTQ0QzkuNTAyOTMgMTIuOTUwMSA5LjcwNDQgMTIuNzQ4NiA5LjcwNDQgMTIuNTAwMUM5LjcwNDQgMTIuMjUxNSA5LjUwMjkzIDEyLjA1MDEgOS4yNTQ0IDEyLjA1MDFIOC4wNTAwNlY3LjY1NzA1TDEzLjM1MzYgMi4zNTM1NVpNOC4wNTAwNiA2LjI0Mjg0TDExLjA1MDEgMy4yNDI4M1YyLjk1MDA1SDguMDUwMDZWNi4yNDI4NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG9vPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01IDMuNUM1IDMuMjIzODYgNS4yMjM4NiAzIDUuNSAzSDkuNUM5Ljc3NjE0IDMgMTAgMy4yMjM4NiAxMCAzLjVWNkgxMi41QzEyLjY4NzMgNiAxMi44NTg5IDYuMTA0NjcgMTIuOTQ0NiA2LjI3MTIxQzEzLjAzMDMgNi40Mzc3NCAxMy4wMTU3IDYuNjM4MjEgMTIuOTA2OSA2Ljc5MDYyTDcuOTA2ODcgMTMuNzkwNkM3LjgxMzAxIDEzLjkyMiA3LjY2MTQ4IDE0IDcuNSAxNEM3LjMzODUzIDE0IDcuMTg2OTkgMTMuOTIyIDcuMDkzMTQgMTMuNzkwNkwyLjA5MzE0IDYuNzkwNjJDMS45ODQyNyA2LjYzODIxIDEuOTY5NzIgNi40Mzc3NCAyLjA1NTQyIDYuMjcxMjFDMi4xNDExMiA2LjEwNDY3IDIuMzEyNzEgNiAyLjUgNkg1VjMuNVpNNiA0VjYuNUM2IDYuNzc2MTQgNS43NzYxNCA3IDUuNSA3SDMuNDcxNkw3LjUgMTIuNjM5OEwxMS41Mjg0IDdIOS41QzkuMjIzODYgNyA5IDYuNzc2MTQgOSA2LjVWNEg2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sYW89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEgNy41QzEgNy42NjE0OCAxLjA3Nzk4IDcuODEzMDEgMS4yMDkzOCA3LjkwNjg3TDguMjA5MzggMTIuOTA2OUM4LjM2MTc5IDEzLjAxNTcgOC41NjIyNiAxMy4wMzAzIDguNzI4NzkgMTIuOTQ0NkM4Ljg5NTMzIDEyLjg1ODkgOSAxMi42ODczIDkgMTIuNUw5IDEwTDExLjUgMTBDMTEuNzc2MSAxMCAxMiA5Ljc3NjE0IDEyIDkuNUwxMiA1LjVDMTIgNS4yMjM4NiAxMS43NzYxIDUgMTEuNSA1TDkgNUw5IDIuNUM5IDIuMzEyNzEgOC44OTUzMyAyLjE0MTEyIDguNzI4NzkgMi4wNTU0MkM4LjU2MjI2IDEuOTY5NzIgOC4zNjE3OSAxLjk4NDI3IDguMjA5MzggMi4wOTMxM0wxLjIwOTM4IDcuMDkzMTRDMS4wNzc5OCA3LjE4Njk5IDEgNy4zMzg1MyAxIDcuNVpNOCAzLjQ3MTZMOCA1LjVDOCA1Ljc3NjE0IDguMjIzODYgNiA4LjUgNkwxMSA2TDExIDlMOC41IDlDOC4yMjM4NiA5IDggOS4yMjM4NiA4IDkuNUw4IDExLjUyODRMMi4zNjAyMyA3LjVMOCAzLjQ3MTZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxpbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTQgNy41QzE0IDcuNjYxNDggMTMuOTIyIDcuODEzMDEgMTMuNzkwNiA3LjkwNjg3TDYuNzkwNjIgMTIuOTA2OUM2LjYzODIxIDEzLjAxNTcgNi40Mzc3NCAxMy4wMzAzIDYuMjcxMjEgMTIuOTQ0NkM2LjEwNDY3IDEyLjg1ODkgNiAxMi42ODczIDYgMTIuNUw2IDEwTDMuNSAxMEMzLjIyMzg2IDEwIDMgOS43NzYxNCAzIDkuNUwzIDUuNUMzIDUuMjIzODYgMy4yMjM4NiA1IDMuNSA1TDYgNUw2IDIuNUM2IDIuMzEyNzEgNi4xMDQ2NyAyLjE0MTEyIDYuMjcxMjEgMi4wNTU0MkM2LjQzNzc0IDEuOTY5NzIgNi42MzgyMSAxLjk4NDI3IDYuNzkwNjIgMi4wOTMxM0wxMy43OTA2IDcuMDkzMTRDMTMuOTIyIDcuMTg2OTkgMTQgNy4zMzg1MyAxNCA3LjVaTTcgMy40NzE2TDcgNS41QzcgNS43NzYxNCA2Ljc3NjE0IDYgNi41IDZMNCA2TDQgOUw2LjUgOUM2Ljc3NjE0IDkgNyA5LjIyMzg2IDcgOS41TDcgMTEuNTI4NEwxMi42Mzk4IDcuNUw3IDMuNDcxNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGxvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUgMUM3LjY2MTQ4IDEgNy44MTMwMSAxLjA3Nzk4IDcuOTA2ODcgMS4yMDkzOEwxMi45MDY5IDguMjA5MzhDMTMuMDE1NyA4LjM2MTc5IDEzLjAzMDMgOC41NjIyNiAxMi45NDQ2IDguNzI4NzlDMTIuODU4OSA4Ljg5NTMzIDEyLjY4NzMgOSAxMi41IDlIMTBWMTEuNUMxMCAxMS43NzYxIDkuNzc2MTQgMTIgOS41IDEySDUuNUM1LjIyMzg2IDEyIDUgMTEuNzc2MSA1IDExLjVWOUgyLjVDMi4zMTI3MSA5IDIuMTQxMTIgOC44OTUzMyAyLjA1NTQyIDguNzI4NzlDMS45Njk3MiA4LjU2MjI2IDEuOTg0MjcgOC4zNjE3OSAyLjA5MzE0IDguMjA5MzhMNy4wOTMxNCAxLjIwOTM4QzcuMTg2OTkgMS4wNzc5OCA3LjMzODUzIDEgNy41IDFaTTMuNDcxNiA4SDUuNUM1Ljc3NjE0IDggNiA4LjIyMzg2IDYgOC41VjExSDlWOC41QzkgOC4yMjM4NiA5LjIyMzg2IDggOS41IDhIMTEuNTI4NEw3LjUgMi4zNjAyM0wzLjQ3MTYgOFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHNvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTk4IDAuODQ5OTc2QzcuMjIzODMgMC44NDk5NzYgNi45OTk5OCAxLjA3MzgzIDYuOTk5OTggMS4zNDk5OFYzLjUyMjM0QzYuOTk5OTggMy43OTg0OCA3LjIyMzgzIDQuMDIyMzQgNy40OTk5OCA0LjAyMjM0QzcuNzc2MTIgNC4wMjIzNCA3Ljk5OTk4IDMuNzk4NDggNy45OTk5OCAzLjUyMjM0VjEuODcxOEMxMC44ODYyIDIuMTI0ODggMTMuMTUgNC41NDgwNiAxMy4xNSA3LjQ5OTk4QzEzLjE1IDEwLjYyMDQgMTAuNjIwNCAxMy4xNSA3LjQ5OTk4IDEzLjE1QzQuMzc5NTcgMTMuMTUgMS44NDk5OCAxMC42MjA0IDEuODQ5OTggNy40OTk5OEMxLjg0OTk4IDYuMTA2MTIgMi4zNTQwNyA0LjgzMTI4IDMuMTkwNDkgMy44NDU5QzMuMzY5MTkgMy42MzUzOCAzLjM0MzM5IDMuMzE5ODUgMy4xMzI4NiAzLjE0MTE1QzIuOTIyMzQgMi45NjI0NSAyLjYwNjgxIDIuOTg4MjUgMi40MjgxMSAzLjE5ODc3QzEuNDQ0MDUgNC4zNTgwOCAwLjg0OTk3NiA1Ljg2MDI5IDAuODQ5OTc2IDcuNDk5OThDMC44NDk5NzYgMTEuMTcyNyAzLjgyNzI4IDE0LjE1IDcuNDk5OTggMTQuMTVDMTEuMTcyNyAxNC4xNSAxNC4xNSAxMS4xNzI3IDE0LjE1IDcuNDk5OThDMTQuMTUgMy44MjcyOCAxMS4xNzI3IDAuODQ5OTc2IDcuNDk5OTggMC44NDk5NzZaTTYuNzQwNDkgOC4wODA3Mkw0LjIyMzYzIDQuNTcyMzdDNC4xNTIzMSA0LjQ3Mjk1IDQuMTYzNDYgNC4zMzY1MiA0LjI0OTk4IDQuMjVDNC4zMzY0OSA0LjE2MzQ4IDQuNDcyOTMgNC4xNTIzMyA0LjU3MjM0IDQuMjIzNjVMOC4wODA2OSA2Ljc0MDUxQzguNTYyMjcgNy4wODU5OSA4LjYxOTA2IDcuNzgwOTEgOC4xOTk5OCA4LjJDNy43ODA4OSA4LjYxOTA5IDcuMDg1OTcgOC41NjIyOSA2Ljc0MDQ5IDguMDgwNzJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxjbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC41IDJDMy4xMTkyOSAyIDIgMy4xMTkyOSAyIDQuNUMyIDUuODgwNzIgMy4xMTkyOSA3IDQuNSA3QzUuODgwNzIgNyA3IDUuODgwNzIgNyA0LjVDNyAzLjExOTI5IDUuODgwNzIgMiA0LjUgMlpNMyA0LjVDMyAzLjY3MTU3IDMuNjcxNTcgMyA0LjUgM0M1LjMyODQzIDMgNiAzLjY3MTU3IDYgNC41QzYgNS4zMjg0MyA1LjMyODQzIDYgNC41IDZDMy42NzE1NyA2IDMgNS4zMjg0MyAzIDQuNVpNMTAuNSAyQzkuMTE5MjkgMiA4IDMuMTE5MjkgOCA0LjVDOCA1Ljg4MDcyIDkuMTE5MjkgNyAxMC41IDdDMTEuODgwNyA3IDEzIDUuODgwNzIgMTMgNC41QzEzIDMuMTE5MjkgMTEuODgwNyAyIDEwLjUgMlpNOSA0LjVDOSAzLjY3MTU3IDkuNjcxNTcgMyAxMC41IDNDMTEuMzI4NCAzIDEyIDMuNjcxNTcgMTIgNC41QzEyIDUuMzI4NDMgMTEuMzI4NCA2IDEwLjUgNkM5LjY3MTU3IDYgOSA1LjMyODQzIDkgNC41Wk0yIDEwLjVDMiA5LjExOTI5IDMuMTE5MjkgOCA0LjUgOEM1Ljg4MDcyIDggNyA5LjExOTI5IDcgMTAuNUM3IDExLjg4MDcgNS44ODA3MiAxMyA0LjUgMTNDMy4xMTkyOSAxMyAyIDExLjg4MDcgMiAxMC41Wk00LjUgOUMzLjY3MTU3IDkgMyA5LjY3MTU3IDMgMTAuNUMzIDExLjMyODQgMy42NzE1NyAxMiA0LjUgMTJDNS4zMjg0MyAxMiA2IDExLjMyODQgNiAxMC41QzYgOS42NzE1NyA1LjMyODQzIDkgNC41IDlaTTEwLjUgOEM5LjExOTI5IDggOCA5LjExOTI5IDggMTAuNUM4IDExLjg4MDcgOS4xMTkyOSAxMyAxMC41IDEzQzExLjg4MDcgMTMgMTMgMTEuODgwNyAxMyAxMC41QzEzIDkuMTE5MjkgMTEuODgwNyA4IDEwLjUgOFpNOSAxMC41QzkgOS42NzE1NyA5LjY3MTU3IDkgMTAuNSA5QzExLjMyODQgOSAxMiA5LjY3MTU3IDEyIDEwLjVDMTIgMTEuMzI4NCAxMS4zMjg0IDEyIDEwLjUgMTJDOS42NzE1NyAxMiA5IDExLjMyODQgOSAxMC41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdW89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEzLjA1MDIgMi43NDk4OUMxMy4wNTAyIDIuNDQ2MTMgMTIuODA0IDIuMTk5ODkgMTIuNTAwMiAyLjE5OTg5QzEyLjE5NjUgMi4xOTk4OSAxMS45NTAyIDIuNDQ2MTMgMTEuOTUwMiAyLjc0OTg5VjcuMjgyNUMxMS45MDQ2IDcuMTg4MDIgMTEuODI5NSA3LjEwODUxIDExLjczMzQgNy4wNTc3NkwyLjczMzM4IDIuMzA3NzZDMi41Nzg0IDIuMjI1OTYgMi4zOTE5IDIuMjMxMjcgMi4yNDE4MiAyLjMyMTc2QzIuMDkxNzUgMi40MTIyNSAyIDIuNTc0NzEgMiAyLjc0OTk1VjEyLjI1QzIgMTIuNDI1MiAyLjA5MTc1IDEyLjU4NzcgMi4yNDE4MiAxMi42NzgxQzIuMzkxOSAxMi43Njg2IDIuNTc4NCAxMi43NzM5IDIuNzMzMzggMTIuNjkyMUwxMS43MzM0IDcuOTQyMTRDMTEuODI5NSA3Ljg5MTM5IDExLjkwNDYgNy44MTE4OCAxMS45NTAyIDcuNzE3NFYxMi4yNDk5QzExLjk1MDIgMTIuNTUzNiAxMi4xOTY1IDEyLjc5OTkgMTIuNTAwMiAxMi43OTk5QzEyLjgwNCAxMi43OTk5IDEzLjA1MDIgMTIuNTUzNiAxMy4wNTAyIDEyLjI0OTlWMi43NDk4OVpNMyAxMS40MjA3VjMuNTc5MkwxMC40Mjg4IDcuNDk5OTVMMyAxMS40MjA3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scG89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuOTQ5NzYgMi43NDk4OUMxLjk0OTc2IDIuNDQ2MTMgMi4xOTYgMi4xOTk4OSAyLjQ5OTc2IDIuMTk5ODlDMi44MDM1MSAyLjE5OTg5IDMuMDQ5NzYgMi40NDYxMyAzLjA0OTc2IDIuNzQ5ODlWNy4yODI1QzMuMDk1NCA3LjE4ODAyIDMuMTcwNDYgNy4xMDg1MSAzLjI2NjYyIDcuMDU3NzZMMTIuMjY2NiAyLjMwNzc2QzEyLjQyMTYgMi4yMjU5NiAxMi42MDgxIDIuMjMxMjcgMTIuNzU4MiAyLjMyMTc2QzEyLjkwODMgMi40MTIyNSAxMyAyLjU3NDcxIDEzIDIuNzQ5OTVWMTIuMjVDMTMgMTIuNDI1MiAxMi45MDgzIDEyLjU4NzcgMTIuNzU4MiAxMi42NzgxQzEyLjYwODEgMTIuNzY4NiAxMi40MjE2IDEyLjc3MzkgMTIuMjY2NiAxMi42OTIxTDMuMjY2NjIgNy45NDIxNEMzLjE3MDQ2IDcuODkxMzkgMy4wOTU0IDcuODExODggMy4wNDk3NiA3LjcxNzRWMTIuMjQ5OUMzLjA0OTc2IDEyLjU1MzYgMi44MDM1MSAxMi43OTk5IDIuNDk5NzYgMTIuNzk5OUMyLjE5NiAxMi43OTk5IDEuOTQ5NzYgMTIuNTUzNiAxLjk0OTc2IDEyLjI0OTlWMi43NDk4OVpNNC41NzEyMiA3LjQ5OTk1TDEyIDExLjQyMDdWMy41NzkyTDQuNTcxMjIgNy40OTk5NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGZvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4yNVwiLGQ6XCJNMCAwSDNWM0gwVjBaTTYgM0gzVjZIMFY5SDNWMTJIMFYxNUgzVjEySDZWMTVIOVYxMkgxMlYxNUgxNVYxMkgxMlY5SDE1VjZIMTJWM0gxNVYwSDEyVjNIOVYwSDZWM1pNNiA2VjNIOVY2SDZaTTYgOUgzVjZINlY5Wk05IDlWNkgxMlY5SDlaTTkgOUg2VjEySDlWOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGhvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjUgMUM1LjIyMzg2IDEgNSAxLjIyMzg2IDUgMS41QzUgMS43NzYxNCA1LjIyMzg2IDIgNS41IDJIOS41QzkuNzc2MTQgMiAxMCAxLjc3NjE0IDEwIDEuNUMxMCAxLjIyMzg2IDkuNzc2MTQgMSA5LjUgMUg1LjVaTTMgMy41QzMgMy4yMjM4NiAzLjIyMzg2IDMgMy41IDNINUgxMEgxMS41QzExLjc3NjEgMyAxMiAzLjIyMzg2IDEyIDMuNUMxMiAzLjc3NjE0IDExLjc3NjEgNCAxMS41IDRIMTFWMTJDMTEgMTIuNTUyMyAxMC41NTIzIDEzIDEwIDEzSDVDNC40NDc3MiAxMyA0IDEyLjU1MjMgNCAxMlY0TDMuNSA0QzMuMjIzODYgNCAzIDMuNzc2MTQgMyAzLjVaTTUgNEgxMFYxMkg1VjRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxnbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNCA2SDExTDcuNSAxMC41TDQgNlpcIixmaWxsOm59KSl9LHZvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk05IDRMOSAxMUw0LjUgNy41TDkgNFpcIixmaWxsOm59KSl9LENvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02IDExTDYgNEwxMC41IDcuNUw2IDExWlwiLGZpbGw6bn0pKX0sbW89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQgOUgxMUw3LjUgNC41TDQgOVpcIixmaWxsOm59KSl9LHdvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjIzMzM2IDQuNjk2MjlDNy4yMzMzNiAyLjk2ODg0IDguNjMzMzUgMS41Njg1NyAxMC4zNiAxLjU2ODU3QzExLjM3MzYgMS41Njg1NyAxMi4xODMgMi4wNDgwNCAxMi43MjU0IDIuNzQzODVDMTMuMzA3OSAyLjYyNDY3IDEzLjg1NTcgMi40MDkxMyAxNC4zNTEzIDIuMTE1MDhDMTQuMTU1OSAyLjcyNTk4IDEzLjc0MjQgMy4yMzk2IDEzLjIwMzMgMy41NjQ2M0MxMy4yMDM4IDMuNTY1NjggMTMuMjA0MiAzLjU2Njc0IDEzLjIwNDcgMy41Njc3OUMxMy43MzM0IDMuNTAzNjEgMTQuMjM2NCAzLjM2MzAyIDE0LjcwNDggMy4xNTU0NkwxNC43MDM3IDMuMTU3MTVDMTQuMzY2NyAzLjY2MTgzIDEzLjk0MzEgNC4xMDczNiAxMy40NTYxIDQuNDcwMzRDMTMuNDgyMyA0LjY0NjcyIDEzLjQ5NTYgNC44MjQyNyAxMy40OTU2IDUuMDAwNzlDMTMuNDk1NiA4LjY4NzEgMTAuNjg3MyAxMi45NzQ2IDUuNTIxMjIgMTIuOTc0NkMzLjkzOTA2IDEyLjk3NDYgMi40NjU0NCAxMi41MTEgMS4yMjUwNSAxMS43MTUyQzAuOTkyNjMyIDExLjU2NjEgMC45MjUxMDggMTEuMjU2OCAxLjA3NDIzIDExLjAyNDRDMS4wODc0IDExLjAwMzggMS4xMDE4MyAxMC45ODQ2IDEuMTE3MzQgMTAuOTY2NkMxLjIwNTgyIDEwLjgyMDIgMS4zNzQzOCAxMC43MzA5IDEuNTU1NCAxMC43NTIyQzIuNDcwNjYgMTAuODYwMSAzLjM4NTY4IDEwLjc0ODUgNC4xOTIxOSAxMC4zOTYyQzMuMzkyMjYgMTAuMDQzNCAyLjc3MTI5IDkuMzU5NzUgMi41MDIwNCA4LjUxOTc0QzIuNDUzNTkgOC4zNjg2IDIuNDg4MzUgOC4yMDMxMSAyLjU5MzUxIDguMDg0MjJDMi41OTcxNiA4LjA4MDEgMi42MDA4NyA4LjA3NjA2IDIuNjA0NjQgOC4wNzIxQzEuOTYzOTEgNy41MDgxOSAxLjU1OTczIDYuNjgyMDggMS41NTk3MyA1Ljc2MTQzVjUuNzI3NTlDMS41NTk3MyA1LjU2ODE0IDEuNjQ0MTEgNS40MjA1OSAxLjc4MTU1IDUuMzM5NzRDMS44MjY3MSA1LjMxMzE3IDEuODc1MzcgNS4yOTUxMSAxLjkyNTMyIDUuMjg1NThDMS43MDU0OSA0Ljg2MTU0IDEuNTgxMTYgNC4zNzk4NCAxLjU4MTE2IDMuODY5NThDMS41ODExNiAzLjQwMTY1IDEuNTgzODQgMi44MTE5MiAxLjkxMzMyIDIuMjgwODFDMS45ODcxOCAyLjE2MTc1IDIuMTA3NTggMi4wODkxNSAyLjIzNjQgMi4wNzE5NUMyLjQyNTg4IDIuMDEyMzcgMi42NDA4NyAyLjA2OTY5IDIuNzc0MDYgMi4yMzMwMkMzLjg2NTM2IDMuNTcxMjYgNS40NDA2NiA0LjQ5NTgzIDcuMjMzNjYgNC43Mzk2MUw3LjIzMzM2IDQuNjk2MjlaTTUuNTIxMjIgMTEuOTc0NkM0LjczMzg3IDExLjk3NDYgMy45Nzc4MSAxMS44NDM1IDMuMjcyNDggMTEuNjAyM0M0LjEzMDEyIDExLjQ1MzggNC45NTMwNyAxMS4xMTU5IDUuNjYyMTggMTAuNTYwMkM1LjgxMjExIDEwLjQ0MjcgNS44NzE4MiAxMC4yNDM1IDUuODExMjYgMTAuMDYyOUM1Ljc1MDcgOS44ODIzNCA1LjU4MyA5Ljc1OTQzIDUuMzkyNTUgOS43NTYwN0M0LjY4OTY4IDkuNzQzNjYgNC4wNjcxMiA5LjM5NzE2IDMuNjc3OTMgOC44Njg0NUMzLjg2ODI4IDguODUzMDYgNC4wNTQyOCA4LjgyMDM5IDQuMjM0NDUgOC43NzE2N0M0LjQzNjAzIDguNzE3MTYgNC41NzM2MyA4LjUzMTE0IDQuNTY2NzQgOC4zMjI0M0M0LjU1OTg1IDguMTEzNzIgNC40MTAyOSA3LjkzNzE4IDQuMjA1NTUgNy44OTYwN0MzLjQyNjk0IDcuNzM5NzcgMi43OTg4MyA3LjE2NzY0IDIuNTYxNjkgNi40MjE3NEMyLjc2MjU1IDYuNDcwMjUgMi45NzEwMiA2LjQ5OTEgMy4xODQ4MiA2LjUwNjFDMy4zODU2MyA2LjUxMjY3IDMuNTY2NDYgNi4zODUzMyAzLjYyNzk1IDYuMTk0MDVDMy42ODk0MyA2LjAwMjc3IDMuNjE2NjYgNS43OTM5MSAzLjQ0OTYzIDUuNjgyMjRDMi44NjUyMyA1LjI5MTU1IDIuNDgxMTYgNC42MjQ2NCAyLjQ4MTE2IDMuODY5NThDMi40ODExNiAzLjcwMjEzIDIuNDgzNTIgMy41NTI2OCAyLjQ5MzU1IDMuNDE3MTlDMy44NTExNSA0Ljc5OTEzIDUuNzA4NzMgNS42ODkzMSA3Ljc3NTg4IDUuNzkzMzhDNy45MzIyNSA1LjgwMTI2IDguMDgzMjggNS43MzU0MyA4LjE4Mzk1IDUuNjE1NTNDOC4yODQ2MyA1LjQ5NTYyIDguMzIzMzIgNS4zMzU0OCA4LjI4ODUxIDUuMTgyODRDOC4yNTI1NSA1LjAyNTE3IDguMjMzMzYgNC44NjI4NCA4LjIzMzM2IDQuNjk2MjlDOC4yMzMzNiAzLjUyMDg1IDkuMTg1OTEgMi41Njg1NyAxMC4zNiAyLjU2ODU3QzExLjU5NDMgMi41Njg1NyAxMi40OTU2IDMuNzEyMDggMTIuNDk1NiA1LjAwMDc5QzEyLjQ5NTYgOC4yNTcwOSAxMC4wMjAyIDExLjk3NDYgNS41MjEyMiAxMS45NzQ2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sYm89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUuMDAwMDEgMi43NUM1LjAwMDAxIDIuNDczODYgNC43NzYxNSAyLjI1IDQuNTAwMDEgMi4yNUM0LjIyMzg3IDIuMjUgNC4wMDAwMSAyLjQ3Mzg2IDQuMDAwMDEgMi43NVY4LjA1QzQuMDAwMDEgOS45ODMgNS41NjcwMiAxMS41NSA3LjUwMDAxIDExLjU1QzkuNDMzMDEgMTEuNTUgMTEgOS45ODMgMTEgOC4wNVYyLjc1QzExIDIuNDczODYgMTAuNzc2MiAyLjI1IDEwLjUgMi4yNUMxMC4yMjM5IDIuMjUgMTAgMi40NzM4NiAxMCAyLjc1VjguMDVDMTAgOS40MzA3MSA4Ljg4MDcyIDEwLjU1IDcuNTAwMDEgMTAuNTVDNi4xMTkzIDEwLjU1IDUuMDAwMDEgOS40MzA3MSA1LjAwMDAxIDguMDVWMi43NVpNMy40OTk5OCAxMy4xMDAxQzMuMjc5MDYgMTMuMTAwMSAzLjA5OTk4IDEzLjI3OTEgMy4wOTk5OCAxMy41MDAxQzMuMDk5OTggMTMuNzIxIDMuMjc5MDYgMTMuOTAwMSAzLjQ5OTk4IDEzLjkwMDFIMTEuNUMxMS43MjA5IDEzLjkwMDEgMTEuOSAxMy43MjEgMTEuOSAxMy41MDAxQzExLjkgMTMuMjc5MSAxMS43MjA5IDEzLjEwMDEgMTEuNSAxMy4xMDAxSDMuNDk5OThaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx5bz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS45MDMyMSA3LjI5Njc3QzEuOTAzMjEgMTAuMzQxIDQuMTEwNDEgMTIuNDE0NyA2LjU4ODkzIDEyLjg0MzlDNi44NzI1NSAxMi44OTMgNy4wNjI2NiAxMy4xNjI3IDcuMDEzNTUgMTMuNDQ2NEM2Ljk2NDQ0IDEzLjczIDYuNjk0NzEgMTMuOTIwMSA2LjQxMTA5IDEzLjg3MUMzLjQ5OTQyIDEzLjM2NjggMC44NjA4NCAxMC45MTI3IDAuODYwODQgNy4yOTY3N0MwLjg2MDgzOSA1Ljc2MDA5IDEuNTU5OTYgNC41NTI0NSAyLjM3NjM5IDMuNjMzNzdDMi45NjEyNCAyLjk3NTY4IDMuNjMwMzQgMi40NDEzNSA0LjE2ODQ2IDIuMDMyMDJMMi41MzIwNSAyLjAzMjAyQzIuMjU1OTEgMi4wMzIwMiAyLjAzMjA1IDEuODA4MTYgMi4wMzIwNSAxLjUzMjAyQzIuMDMyMDUgMS4yNTU4OCAyLjI1NTkxIDEuMDMyMDIgMi41MzIwNSAxLjAzMjAyTDUuNTMyMDUgMS4wMzIwMkM1LjgwODE5IDEuMDMyMDIgNi4wMzIwNSAxLjI1NTg4IDYuMDMyMDUgMS41MzIwMkw2LjAzMjA1IDQuNTMyMDJDNi4wMzIwNSA0LjgwODE2IDUuODA4MTkgNS4wMzIwMiA1LjUzMjA1IDUuMDMyMDJDNS4yNTU5MSA1LjAzMjAyIDUuMDMyMDUgNC44MDgxNiA1LjAzMjA1IDQuNTMyMDJMNS4wMzIwNSAyLjY4NjQ1TDUuMDMwNTQgMi42ODc1OUw1LjAzMDQ1IDIuNjg3NjZMNS4wMzA0NCAyLjY4NzY3TDUuMDMwNDMgMi42ODc2N0M0LjQ1ODk2IDMuMTE4NjggMy43NjA1OSAzLjY0NTM4IDMuMTU1NTQgNC4zMjYyQzIuNDQxMDIgNS4xMzAyMSAxLjkwMzIxIDYuMTAxNTQgMS45MDMyMSA3LjI5Njc3Wk0xMy4wMTA5IDcuNzAzMjFDMTMuMDEwOSA0LjY5MTE1IDEwLjg1MDUgMi42Mjk2IDguNDAzODQgMi4xNzAyOUM4LjEyMDkzIDIuMTE3MTggNy45MzQ2NSAxLjg0NDc5IDcuOTg3NzYgMS41NjE4OEM4LjA0MDg3IDEuMjc4OTggOC4zMTMyNiAxLjA5MjcgOC41OTYxNiAxLjE0NTgxQzExLjQ3MDQgMS42ODU0MSAxNC4wNTMyIDQuMTI2MDUgMTQuMDUzMiA3LjcwMzIxQzE0LjA1MzIgOS4yMzk4OCAxMy4zNTQxIDEwLjQ0NzUgMTIuNTM3NyAxMS4zNjYyQzExLjk1MjggMTIuMDI0MyAxMS4yODM3IDEyLjU1ODYgMTAuNzQ1NiAxMi45NjhMMTIuMzgyMSAxMi45NjhDMTIuNjU4MiAxMi45NjggMTIuODgyMSAxMy4xOTE4IDEyLjg4MjEgMTMuNDY4QzEyLjg4MjEgMTMuNzQ0MSAxMi42NTgyIDEzLjk2OCAxMi4zODIxIDEzLjk2OEw5LjM4MjA1IDEzLjk2OEM5LjEwNTkxIDEzLjk2OCA4Ljg4MjA1IDEzLjc0NDEgOC44ODIwNSAxMy40NjhMOC44ODIwNSAxMC40NjhDOC44ODIwNSAxMC4xOTE4IDkuMTA1OTEgOS45Njc5NiA5LjM4MjA1IDkuOTY3OTZDOS42NTgxOSA5Ljk2Nzk2IDkuODgyMDUgMTAuMTkxOCA5Ljg4MjA1IDEwLjQ2OEw5Ljg4MjA1IDEyLjMxMzVMOS44ODM2MiAxMi4zMTIzQzEwLjQ1NTEgMTEuODgxMyAxMS4xNTM1IDExLjM1NDYgMTEuNzU4NSAxMC42NzM4QzEyLjQ3MzEgOS44Njk3NiAxMy4wMTA5IDguODk4NDQgMTMuMDEwOSA3LjcwMzIxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0seG89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuODE4MjUgMS4xODE4OEM3LjY0MjUxIDEuMDA2MTUgNy4zNTc1OSAxLjAwNjE1IDcuMTgxODUgMS4xODE4OEw0LjE4MTg1IDQuMTgxODhDNC4wMDYxMSA0LjM1NzYyIDQuMDA2MTEgNC42NDI1NCA0LjE4MTg1IDQuODE4MjhDNC4zNTc1OSA0Ljk5NDAxIDQuNjQyNTEgNC45OTQwMSA0LjgxODI1IDQuODE4MjhMNy4wNTAwNSAyLjU4NjQ4VjkuNDk5OTZDNy4wNTAwNSA5Ljc0ODQ5IDcuMjUxNTIgOS45NDk5NiA3LjUwMDA1IDkuOTQ5OTZDNy43NDg1OCA5Ljk0OTk2IDcuOTUwMDUgOS43NDg0OSA3Ljk1MDA1IDkuNDk5OTZWMi41ODY0OEwxMC4xODE5IDQuODE4MjhDMTAuMzU3NiA0Ljk5NDAxIDEwLjY0MjUgNC45OTQwMSAxMC44MTgyIDQuODE4MjhDMTAuOTk0IDQuNjQyNTQgMTAuOTk0IDQuMzU3NjIgMTAuODE4MiA0LjE4MTg4TDcuODE4MjUgMS4xODE4OFpNMi41IDkuOTk5OTdDMi43NzYxNCA5Ljk5OTk3IDMgMTAuMjIzOCAzIDEwLjVWMTJDMyAxMi41NTM4IDMuNDQ1NjUgMTMgMy45OTYzNSAxM0gxMS4wMDEyQzExLjU1MjkgMTMgMTIgMTIuNTUyOCAxMiAxMlYxMC41QzEyIDEwLjIyMzggMTIuMjIzOSA5Ljk5OTk3IDEyLjUgOS45OTk5N0MxMi43NzYxIDkuOTk5OTcgMTMgMTAuMjIzOCAxMyAxMC41VjEyQzEzIDEzLjEwNCAxMi4xMDYyIDE0IDExLjAwMTIgMTRIMy45OTYzNUMyLjg5MDE5IDE0IDIgMTMuMTAzIDIgMTJWMTAuNUMyIDEwLjIyMzggMi4yMjM4NiA5Ljk5OTk3IDIuNSA5Ljk5OTk3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sa289ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGE9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxhKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuODc3MDc1IDcuNDk5ODhDMC44NzcwNzUgMy44NDIxOSAzLjg0MjIyIDAuODc3MDQ1IDcuNDk5OTEgMC44NzcwNDVDMTEuMTU3NiAwLjg3NzA0NSAxNC4xMjI3IDMuODQyMTkgMTQuMTIyNyA3LjQ5OTg4QzE0LjEyMjcgMTEuMTU3NSAxMS4xNTc2IDE0LjEyMjcgNy40OTk5MSAxNC4xMjI3QzMuODQyMjIgMTQuMTIyNyAwLjg3NzA3NSAxMS4xNTc1IDAuODc3MDc1IDcuNDk5ODhaTTcuNDk5OTEgMS44MjcwNEM0LjM2Njg5IDEuODI3MDQgMS44MjcwOCA0LjM2Njg2IDEuODI3MDggNy40OTk4OEMxLjgyNzA4IDEwLjYzMjkgNC4zNjY4OSAxMy4xNzI3IDcuNDk5OTEgMTMuMTcyN0MxMC42MzI5IDEzLjE3MjcgMTMuMTcyNyAxMC42MzI5IDEzLjE3MjcgNy40OTk4OEMxMy4xNzI3IDQuMzY2ODYgMTAuNjMyOSAxLjgyNzA0IDcuNDk5OTEgMS44MjcwNFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFNvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTg1IDAuODc3MDQ1QzMuODQyMTYgMC44NzcwNDUgMC44NzcwMTQgMy44NDIxOSAwLjg3NzAxNCA3LjQ5OTg4QzAuODc3MDE0IDkuMTQ4OCAxLjQ3OTYzIDEwLjY1NyAyLjQ3NjY1IDExLjgxNjJMMS42NDY0MyAxMi42NDY0QzEuNDUxMTcgMTIuODQxNyAxLjQ1MTE3IDEzLjE1ODMgMS42NDY0MyAxMy4zNTM1QzEuODQxNyAxMy41NDg4IDIuMTU4MjggMTMuNTQ4OCAyLjM1MzU0IDEzLjM1MzVMMy4xODM3NyAxMi41MjMzQzQuMzQyOTYgMTMuNTIwMiA1Ljg1MTA0IDE0LjEyMjcgNy40OTk4NSAxNC4xMjI3QzExLjE1NzUgMTQuMTIyNyAxNC4xMjI3IDExLjE1NzUgMTQuMTIyNyA3LjQ5OTg4QzE0LjEyMjcgNS44NTEwNyAxMy41MjAyIDQuMzQyOTkgMTIuNTIzMyAzLjE4MzhMMTMuMzUzNSAyLjM1MzU0QzEzLjU0ODggMi4xNTgyNyAxMy41NDg4IDEuODQxNjkgMTMuMzUzNSAxLjY0NjQzQzEzLjE1ODMgMS40NTExNyAxMi44NDE3IDEuNDUxMTcgMTIuNjQ2NCAxLjY0NjQzTDExLjgxNjIgMi40NzY2OEMxMC42NTcgMS40Nzk2NiA5LjE0ODc3IDAuODc3MDQ1IDcuNDk5ODUgMC44NzcwNDVaTTExLjE0MjIgMy4xNTA2NkMxMC4xNTY3IDIuMzI0NDkgOC44ODYzOSAxLjgyNzA0IDcuNDk5ODUgMS44MjcwNEM0LjM2NjgzIDEuODI3MDQgMS44MjcwMSA0LjM2Njg2IDEuODI3MDEgNy40OTk4OEMxLjgyNzAxIDguODg2NDIgMi4zMjQ0NiAxMC4xNTY4IDMuMTUwNjMgMTEuMTQyMkwxMS4xNDIyIDMuMTUwNjZaTTMuODU3NzYgMTEuODQ5M0M0Ljg0MzE3IDEyLjY3NTMgNi4xMTM0MyAxMy4xNzI3IDcuNDk5ODUgMTMuMTcyN0MxMC42MzI4IDEzLjE3MjcgMTMuMTcyNyAxMC42MzI5IDEzLjE3MjcgNy40OTk4OEMxMy4xNzI3IDYuMTEzNDYgMTIuNjc1MyA0Ljg0MzIgMTEuODQ5MyAzLjg1Nzc5TDMuODU3NzYgMTEuODQ5M1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE9vPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTk4IDFMNi45MjMyMSAyLjAwMzA3TDEuMTc0OTggMTJMMC41OTk5NzYgMTNIMS43NTM1SDEzLjI0NjRIMTQuNEwxMy44MjUgMTJMOC4wNzY3NCAyLjAwMzA3TDcuNDk5OTggMVpNNy40OTk5OCAzLjAwNjEzTDIuMzI4NSAxMkgxMi42NzE0TDcuNDk5OTggMy4wMDYxM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE1vPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00Ljc2NDQ3IDMuMTIxOTlDNS42MzE1MSAzLjA0ODU5IDYuNTYwODIgMyA3LjUgM0M4LjQzOTE4IDMgOS4zNjg0OSAzLjA0ODU5IDEwLjIzNTUgMy4xMjE5OUMxMS4yNzk2IDMuMjEwMzcgMTEuOTU1MyAzLjI3MDA4IDEyLjQ3MiAzLjM5MjAzQzEyLjk0MjUgMy41MDMwNCAxMy4yMDQ4IDMuNjQ5NzYgMTMuNDMwNiAzLjg4MDg2QzEzLjQ1NTMgMy45MDYxOCAxMy40OTAyIDMuOTQ0MTQgMTMuNTEzMyAzLjk3MDkyQzEzLjcxMjYgNC4yMDE0OSAxMy44NDM1IDQuNDg4NyAxMy45MTggNS4wMzI4M0MxMy45OTc4IDUuNjE1NiAxNCA2LjM3NjQ0IDE0IDcuNTI0OTNDMTQgOC42NjAyNiAxMy45OTc4IDkuNDEwMTkgMTMuOTE4MSA5Ljk4NTM4QzEzLjg0MzkgMTAuNTIwNiAxMy43MTM3IDEwLjgwNjEgMTMuNTEyNSAxMS4wMzg3QzEzLjQ4OTYgMTEuMDY1MSAxMy40NTQxIDExLjEwMzggMTMuNDI5NiAxMS4xMjg3QzEzLjIwMDkgMTEuMzYyNSAxMi45NDA2IDExLjUwNzYgMTIuNDgxOCAxMS42MTY0QzExLjk3NTIgMTEuNzM2NSAxMS4zMTQzIDExLjc5NDIgMTAuMjg3OCAxMS44Nzk3QzkuNDE5NDggMTEuOTUyMSA4LjQ3NTY2IDEyIDcuNSAxMkM2LjUyNDM0IDEyIDUuNTgwNTIgMTEuOTUyMSA0LjcxMjIgMTEuODc5N0MzLjY4NTcyIDExLjc5NDIgMy4wMjQ3NyAxMS43MzY1IDIuNTE4MTYgMTEuNjE2NEMyLjA1OTM2IDExLjUwNzYgMS43OTkxIDExLjM2MjUgMS41NzAzNyAxMS4xMjg3QzEuNTQ1OTMgMTEuMTAzOCAxLjUxMDM1IDExLjA2NTEgMS40ODc0OCAxMS4wMzg3QzEuMjg2MjggMTAuODA2MSAxLjE1NjEyIDEwLjUyMDYgMS4wODE5MyA5Ljk4NTM4QzEuMDAyMjEgOS40MTAxOSAxIDguNjYwMjYgMSA3LjUyNDkzQzEgNi4zNzY0NCAxLjAwMjE2IDUuNjE1NiAxLjA4MiA1LjAzMjgzQzEuMTU2NTQgNC40ODg3IDEuMjg3NDQgNC4yMDE0OSAxLjQ4NjY2IDMuOTcwOTJDMS41MDk4IDMuOTQ0MTQgMS41NDQ2OCAzLjkwNjE4IDEuNTY5NDIgMy44ODA4NkMxLjc5NTIgMy42NDk3NiAyLjA1NzUyIDMuNTAzMDQgMi41Mjc5NiAzLjM5MjAzQzMuMDQ0NzMgMy4yNzAwOCAzLjcyMDQgMy4yMTAzNyA0Ljc2NDQ3IDMuMTIxOTlaTTAgNy41MjQ5M0MwIDUuMjgyOTYgMCA0LjE2MTk4IDAuNzI5OTg1IDMuMzE3MTNDMC43NjY0NTcgMy4yNzQ5MSAwLjgxNTEzOSAzLjIyMTk0IDAuODU0MTIzIDMuMTgyMDRDMS42MzQzOSAyLjM4MzM5IDIuNjQ5NjMgMi4yOTc0NCA0LjY4MDEyIDIuMTI1NTVDNS41NjkyMyAyLjA1MDI4IDYuNTI3MjQgMiA3LjUgMkM4LjQ3Mjc2IDIgOS40MzA3NyAyLjA1MDI4IDEwLjMxOTkgMi4xMjU1NUMxMi4zNTA0IDIuMjk3NDQgMTMuMzY1NiAyLjM4MzM5IDE0LjE0NTkgMy4xODIwNEMxNC4xODQ5IDMuMjIxOTQgMTQuMjMzNSAzLjI3NDkxIDE0LjI3IDMuMzE3MTNDMTUgNC4xNjE5OCAxNSA1LjI4Mjk2IDE1IDcuNTI0OTNDMTUgOS43NDAxMiAxNSAxMC44NDc3IDE0LjI2ODggMTEuNjkyOUMxNC4yMzI2IDExLjczNDggMTQuMTgzMiAxMS43ODg1IDE0LjE0NDQgMTEuODI4MUMxMy4zNjI5IDEyLjYyNjkgMTIuMzY1NSAxMi43MSAxMC4zNzA5IDEyLjg3NjNDOS40Nzk3MSAxMi45NTA1IDguNTA3ODIgMTMgNy41IDEzQzYuNDkyMTggMTMgNS41MjAyOCAxMi45NTA1IDQuNjI5MTUgMTIuODc2M0MyLjYzNDQ2IDEyLjcxIDEuNjM3MTIgMTIuNjI2OSAwLjg1NTU1OCAxMS44MjgxQzAuODE2ODQ0IDExLjc4ODUgMC43Njc0NDIgMTEuNzM0OCAwLjczMTIyMSAxMS42OTI5QzAgMTAuODQ3NyAwIDkuNzQwMTIgMCA3LjUyNDkzWk01LjI1IDUuMzgyNjRDNS4yNSA1LjIwMjI1IDUuNDM1MjIgNS4wODEyNCA1LjYwMDQxIDUuMTUzNjlMMTAuNDI4IDcuMjcxMDVDMTAuNjI3NCA3LjM1ODUzIDEwLjYyNzQgNy42NDE0NyAxMC40MjggNy43Mjg5NUw1LjYwMDQxIDkuODQ2MzFDNS40MzUyMiA5LjkxODc2IDUuMjUgOS43OTc3NSA1LjI1IDkuNjE3MzZWNS4zODI2NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LExvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03IDJIMS41QzEuMjIzODYgMiAxIDIuMjIzODYgMSAyLjVWN0g3VjJaTTggMlY3SDE0VjIuNUMxNCAyLjIyMzg2IDEzLjc3NjEgMiAxMy41IDJIOFpNNyA4SDFWMTIuNUMxIDEyLjc3NjEgMS4yMjM4NiAxMyAxLjUgMTNIN1Y4Wk04IDEzVjhIMTRWMTIuNUMxNCAxMi43NzYxIDEzLjc3NjEgMTMgMTMuNSAxM0g4Wk0xLjUgMUMwLjY3MTU3MyAxIDAgMS42NzE1NyAwIDIuNVYxMi41QzAgMTMuMzI4NCAwLjY3MTU3MyAxNCAxLjUgMTRIMTMuNUMxNC4zMjg0IDE0IDE1IDEzLjMyODQgMTUgMTIuNVYyLjVDMTUgMS42NzE1NyAxNC4zMjg0IDEgMTMuNSAxSDEuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LF9vPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjUgMkgxMy41QzEzLjc3NjEgMiAxNCAyLjIyMzg2IDE0IDIuNVY3SDFWMi41QzEgMi4yMjM4NiAxLjIyMzg2IDIgMS41IDJaTTEgOFYxMi41QzEgMTIuNzc2MSAxLjIyMzg2IDEzIDEuNSAxM0gxMy41QzEzLjc3NjEgMTMgMTQgMTIuNzc2MSAxNCAxMi41VjhIMVpNMCAyLjVDMCAxLjY3MTU3IDAuNjcxNTczIDEgMS41IDFIMTMuNUMxNC4zMjg0IDEgMTUgMS42NzE1NyAxNSAyLjVWMTIuNUMxNSAxMy4zMjg0IDE0LjMyODQgMTQgMTMuNSAxNEgxLjVDMC42NzE1NzMgMTQgMCAxMy4zMjg0IDAgMTIuNVYyLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxQbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTQgMi41ODcxMUwxLjg1MTYzIDEzSDEzLjVDMTMuNzc2MSAxMyAxNCAxMi43NzYxIDE0IDEyLjVWMi41ODcxMVpNMC43NjI4NzkgMTMuODA2N0wwLjgyNTM5NiAxMy44Nzk2TDAuODU0NzE3IDEzLjg1NDVDMS4wNTAxNyAxMy45NDc4IDEuMjY4OTkgMTQgMS41IDE0SDEzLjVDMTQuMzI4NCAxNCAxNSAxMy4zMjg0IDE1IDEyLjVWMi41QzE1IDEuOTM5NDkgMTQuNjkyNiAxLjQ1MDc4IDE0LjIzNzEgMS4xOTMzMUwxNC4xNzQ2IDEuMTIwMzdMMTQuMTQ1MyAxLjE0NTVDMTMuOTQ5OCAxLjA1MjIyIDEzLjczMSAxIDEzLjUgMUgxLjVDMC42NzE1NzMgMSAwIDEuNjcxNTcgMCAyLjVWMTIuNUMwIDEzLjA2MDUgMC4zMDc0MzUgMTMuNTQ5MiAwLjc2Mjg3OSAxMy44MDY3Wk0xIDEyLjQxMjlMMTMuMTQ4NCAySDEuNUMxLjIyMzg2IDIgMSAyLjIyMzg2IDEgMi41VjEyLjQxMjlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxFbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOCAySDEzLjVDMTMuNzc2MSAyIDE0IDIuMjIzODYgMTQgMi41VjEyLjVDMTQgMTIuNzc2MSAxMy43NzYxIDEzIDEzLjUgMTNIOFYyWk03IDJIMS41QzEuMjIzODYgMiAxIDIuMjIzODYgMSAyLjVWMTIuNUMxIDEyLjc3NjEgMS4yMjM4NiAxMyAxLjUgMTNIN1YyWk0wIDIuNUMwIDEuNjcxNTcgMC42NzE1NzMgMSAxLjUgMUgxMy41QzE0LjMyODQgMSAxNSAxLjY3MTU3IDE1IDIuNVYxMi41QzE1IDEzLjMyODQgMTQuMzI4NCAxNCAxMy41IDE0SDEuNUMwLjY3MTU3MyAxNCAwIDEzLjMyODQgMCAxMi41VjIuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGpvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxhPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sYSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjgxODEyIDQuNjgxNjFDNC45OTM4NiA0Ljg1NzM0IDQuOTkzODYgNS4xNDIyNyA0LjgxODEyIDUuMzE4TDMuMDg2MzIgNy4wNDk4SDExLjkxMzVMMTAuMTgxNyA1LjMxOEMxMC4wMDYgNS4xNDIyNyAxMC4wMDYgNC44NTczNCAxMC4xODE3IDQuNjgxNjFDMTAuMzU3NSA0LjUwNTg3IDEwLjY0MjQgNC41MDU4NyAxMC44MTgxIDQuNjgxNjFMMTMuMzE4MSA3LjE4MTYxQzEzLjQ5MzkgNy4zNTczNCAxMy40OTM5IDcuNjQyMjcgMTMuMzE4MSA3LjgxOEwxMC44MTgxIDEwLjMxOEMxMC42NDI0IDEwLjQ5MzcgMTAuMzU3NSAxMC40OTM3IDEwLjE4MTcgMTAuMzE4QzEwLjAwNiAxMC4xNDIzIDEwLjAwNiA5Ljg1NzM0IDEwLjE4MTcgOS42ODE2MUwxMS45MTM1IDcuOTQ5OEgzLjA4NjMyTDQuODE4MTIgOS42ODE2MUM0Ljk5Mzg2IDkuODU3MzQgNC45OTM4NiAxMC4xNDIzIDQuODE4MTIgMTAuMzE4QzQuNjQyMzkgMTAuNDkzNyA0LjM1NzQ2IDEwLjQ5MzcgNC4xODE3MyAxMC4zMThMMS42ODE3MyA3LjgxOEMxLjUwNTk5IDcuNjQyMjcgMS41MDU5OSA3LjM1NzM0IDEuNjgxNzMgNy4xODE2MUw0LjE4MTczIDQuNjgxNjFDNC4zNTc0NiA0LjUwNTg3IDQuNjQyMzkgNC41MDU4NyA0LjgxODEyIDQuNjgxNjFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxSbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTAgNi41QzEwIDguNDMzIDguNDMzIDEwIDYuNSAxMEM0LjU2NyAxMCAzIDguNDMzIDMgNi41QzMgNC41NjcgNC41NjcgMyA2LjUgM0M4LjQzMyAzIDEwIDQuNTY3IDEwIDYuNVpNOS4zMDg4NCAxMC4wMTU5QzguNTM5MDEgMTAuNjMxOCA3LjU2MjUxIDExIDYuNSAxMUM0LjAxNDcyIDExIDIgOC45ODUyOCAyIDYuNUMyIDQuMDE0NzIgNC4wMTQ3MiAyIDYuNSAyQzguOTg1MjggMiAxMSA0LjAxNDcyIDExIDYuNUMxMSA3LjU2MjUxIDEwLjYzMTggOC41MzkwMSAxMC4wMTU5IDkuMzA4ODRMMTIuODUzNiAxMi4xNDY0QzEzLjA0ODggMTIuMzQxNyAxMy4wNDg4IDEyLjY1ODMgMTIuODUzNiAxMi44NTM2QzEyLjY1ODMgMTMuMDQ4OCAxMi4zNDE3IDEzLjA0ODggMTIuMTQ2NCAxMi44NTM2TDkuMzA4ODQgMTAuMDE1OVpNNC4yNSA2LjVDNC4yNSA2LjIyMzg2IDQuNDczODYgNiA0Ljc1IDZINlY0Ljc1QzYgNC40NzM4NiA2LjIyMzg2IDQuMjUgNi41IDQuMjVDNi43NzYxNCA0LjI1IDcgNC40NzM4NiA3IDQuNzVWNkg4LjI1QzguNTI2MTQgNiA4Ljc1IDYuMjIzODYgOC43NSA2LjVDOC43NSA2Ljc3NjE0IDguNTI2MTQgNyA4LjI1IDdIN1Y4LjI1QzcgOC41MjYxNCA2Ljc3NjE0IDguNzUgNi41IDguNzVDNi4yMjM4NiA4Ljc1IDYgOC41MjYxNCA2IDguMjVWN0g0Ljc1QzQuNDczODYgNyA0LjI1IDYuNzc2MTQgNC4yNSA2LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxJbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsYT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGEpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNi41IDEwQzguNDMzIDEwIDEwIDguNDMzIDEwIDYuNUMxMCA0LjU2NyA4LjQzMyAzIDYuNSAzQzQuNTY3IDMgMyA0LjU2NyAzIDYuNUMzIDguNDMzIDQuNTY3IDEwIDYuNSAxMFpNNi41IDExQzcuNTYyNTEgMTEgOC41MzkwMSAxMC42MzE4IDkuMzA4ODQgMTAuMDE1OUwxMi4xNDY0IDEyLjg1MzZDMTIuMzQxNyAxMy4wNDg4IDEyLjY1ODMgMTMuMDQ4OCAxMi44NTM2IDEyLjg1MzZDMTMuMDQ4OCAxMi42NTgzIDEzLjA0ODggMTIuMzQxNyAxMi44NTM2IDEyLjE0NjRMMTAuMDE1OSA5LjMwODg0QzEwLjYzMTggOC41MzkwMSAxMSA3LjU2MjUxIDExIDYuNUMxMSA0LjAxNDcyIDguOTg1MjggMiA2LjUgMkM0LjAxNDcyIDIgMiA0LjAxNDcyIDIgNi41QzIgOC45ODUyOCA0LjAxNDcyIDExIDYuNSAxMVpNNC43NSA2QzQuNDczODYgNiA0LjI1IDYuMjIzODYgNC4yNSA2LjVDNC4yNSA2Ljc3NjE0IDQuNDczODYgNyA0Ljc1IDdIOC4yNUM4LjUyNjE0IDcgOC43NSA2Ljc3NjE0IDguNzUgNi41QzguNzUgNi4yMjM4NiA4LjUyNjE0IDYgOC4yNSA2SDQuNzVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfX0sNTI5OTooZSx0LG4pPT57bi5yKHQpLG4uZCh0LHtkZWZhdWx0OigpPT5sfSk7dmFyIHI9big4MDgxKSxvPW4ubihyKSxhPW4oMzY0NSksaT1uLm4oYSkoKShvKCkpO2kucHVzaChbZS5pZCxcIi5yZWFjdC1jYWxlbmRhciB7XFxuICB3aWR0aDogMzUwcHg7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNhMGEwOTY7XFxuICBmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcXG4gIGxpbmUtaGVpZ2h0OiAxLjEyNWVtO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXItLWRvdWJsZVZpZXcge1xcbiAgd2lkdGg6IDcwMHB4O1xcbn1cXG4ucmVhY3QtY2FsZW5kYXItLWRvdWJsZVZpZXcgLnJlYWN0LWNhbGVuZGFyX192aWV3Q29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBtYXJnaW46IC0wLjVlbTtcXG59XFxuLnJlYWN0LWNhbGVuZGFyLS1kb3VibGVWaWV3IC5yZWFjdC1jYWxlbmRhcl9fdmlld0NvbnRhaW5lciA+ICoge1xcbiAgd2lkdGg6IDUwJTtcXG4gIG1hcmdpbjogMC41ZW07XFxufVxcbi5yZWFjdC1jYWxlbmRhcixcXG4ucmVhY3QtY2FsZW5kYXIgKixcXG4ucmVhY3QtY2FsZW5kYXIgKjpiZWZvcmUsXFxuLnJlYWN0LWNhbGVuZGFyICo6YWZ0ZXIge1xcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuLnJlYWN0LWNhbGVuZGFyIGJ1dHRvbiB7XFxuICBtYXJnaW46IDA7XFxuICBib3JkZXI6IDA7XFxuICBvdXRsaW5lOiBub25lO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXIgYnV0dG9uOmVuYWJsZWQ6aG92ZXIge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX25hdmlnYXRpb24ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGhlaWdodDogNDRweDtcXG4gIG1hcmdpbi1ib3R0b206IDFlbTtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX19uYXZpZ2F0aW9uIGJ1dHRvbiB7XFxuICBtaW4td2lkdGg6IDQ0cHg7XFxuICBiYWNrZ3JvdW5kOiBub25lO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX25hdmlnYXRpb24gYnV0dG9uOmRpc2FibGVkIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjA7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fbmF2aWdhdGlvbiBidXR0b246ZW5hYmxlZDpob3ZlcixcXG4ucmVhY3QtY2FsZW5kYXJfX25hdmlnYXRpb24gYnV0dG9uOmVuYWJsZWQ6Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZTZlNjtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX19tb250aC12aWV3X193ZWVrZGF5cyB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxuICBmb250LXNpemU6IDAuNzVlbTtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX19tb250aC12aWV3X193ZWVrZGF5c19fd2Vla2RheSB7XFxuICBwYWRkaW5nOiAwLjVlbTtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX19tb250aC12aWV3X193ZWVrTnVtYmVycyAucmVhY3QtY2FsZW5kYXJfX3RpbGUge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIGZvbnQtc2l6ZTogMC43NWVtO1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fbW9udGgtdmlld19fZGF5c19fZGF5LS13ZWVrZW5kIHtcXG4gIGNvbG9yOiAjZDEwMDAwO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdfX2RheXNfX2RheS0tbmVpZ2hib3JpbmdNb250aCB7XFxuICBjb2xvcjogIzc1NzU3NTtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX195ZWFyLXZpZXcgLnJlYWN0LWNhbGVuZGFyX190aWxlLFxcbi5yZWFjdC1jYWxlbmRhcl9fZGVjYWRlLXZpZXcgLnJlYWN0LWNhbGVuZGFyX190aWxlLFxcbi5yZWFjdC1jYWxlbmRhcl9fY2VudHVyeS12aWV3IC5yZWFjdC1jYWxlbmRhcl9fdGlsZSB7XFxuICBwYWRkaW5nOiAyZW0gMC41ZW07XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fdGlsZSB7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBwYWRkaW5nOiAxMHB4IDYuNjY2N3B4O1xcbiAgYmFja2dyb3VuZDogbm9uZTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIGxpbmUtaGVpZ2h0OiAxNnB4O1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX3RpbGU6ZGlzYWJsZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX190aWxlOmVuYWJsZWQ6aG92ZXIsXFxuLnJlYWN0LWNhbGVuZGFyX190aWxlOmVuYWJsZWQ6Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZTZlNjtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX190aWxlLS1ub3cge1xcbiAgYmFja2dyb3VuZDogI2ZmZmY3NjtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX190aWxlLS1ub3c6ZW5hYmxlZDpob3ZlcixcXG4ucmVhY3QtY2FsZW5kYXJfX3RpbGUtLW5vdzplbmFibGVkOmZvY3VzIHtcXG4gIGJhY2tncm91bmQ6ICNmZmZmYTk7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fdGlsZS0taGFzQWN0aXZlIHtcXG4gIGJhY2tncm91bmQ6ICM3NmJhZmY7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fdGlsZS0taGFzQWN0aXZlOmVuYWJsZWQ6aG92ZXIsXFxuLnJlYWN0LWNhbGVuZGFyX190aWxlLS1oYXNBY3RpdmU6ZW5hYmxlZDpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kOiAjYTlkNGZmO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX3RpbGUtLWFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kOiAjMDA2ZWRjO1xcbiAgY29sb3I6IHdoaXRlO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX3RpbGUtLWFjdGl2ZTplbmFibGVkOmhvdmVyLFxcbi5yZWFjdC1jYWxlbmRhcl9fdGlsZS0tYWN0aXZlOmVuYWJsZWQ6Zm9jdXMge1xcbiAgYmFja2dyb3VuZDogIzEwODdmZjtcXG59XFxuLnJlYWN0LWNhbGVuZGFyLS1zZWxlY3RSYW5nZSAucmVhY3QtY2FsZW5kYXJfX3RpbGUtLWhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlNmU2ZTY7XFxufVxcblwiLFwiXCJdKTtjb25zdCBsPWl9LDM2NDU6ZT0+e2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcCgoZnVuY3Rpb24odCl7dmFyIG49XCJcIixyPXZvaWQgMCE9PXRbNV07cmV0dXJuIHRbNF0mJihuKz1cIkBzdXBwb3J0cyAoXCIuY29uY2F0KHRbNF0sXCIpIHtcIikpLHRbMl0mJihuKz1cIkBtZWRpYSBcIi5jb25jYXQodFsyXSxcIiB7XCIpKSxyJiYobis9XCJAbGF5ZXJcIi5jb25jYXQodFs1XS5sZW5ndGg+MD9cIiBcIi5jb25jYXQodFs1XSk6XCJcIixcIiB7XCIpKSxuKz1lKHQpLHImJihuKz1cIn1cIiksdFsyXSYmKG4rPVwifVwiKSx0WzRdJiYobis9XCJ9XCIpLG59KSkuam9pbihcIlwiKX0sdC5pPWZ1bmN0aW9uKGUsbixyLG8sYSl7XCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPVtbbnVsbCxlLHZvaWQgMF1dKTt2YXIgaT17fTtpZihyKWZvcih2YXIgbD0wO2w8dGhpcy5sZW5ndGg7bCsrKXt2YXIgcz10aGlzW2xdWzBdO251bGwhPXMmJihpW3NdPSEwKX1mb3IodmFyIGM9MDtjPGUubGVuZ3RoO2MrKyl7dmFyIHU9W10uY29uY2F0KGVbY10pO3ImJmlbdVswXV18fCh2b2lkIDAhPT1hJiYodm9pZCAwPT09dVs1XXx8KHVbMV09XCJAbGF5ZXJcIi5jb25jYXQodVs1XS5sZW5ndGg+MD9cIiBcIi5jb25jYXQodVs1XSk6XCJcIixcIiB7XCIpLmNvbmNhdCh1WzFdLFwifVwiKSksdVs1XT1hKSxuJiYodVsyXT8odVsxXT1cIkBtZWRpYSBcIi5jb25jYXQodVsyXSxcIiB7XCIpLmNvbmNhdCh1WzFdLFwifVwiKSx1WzJdPW4pOnVbMl09biksbyYmKHVbNF0/KHVbMV09XCJAc3VwcG9ydHMgKFwiLmNvbmNhdCh1WzRdLFwiKSB7XCIpLmNvbmNhdCh1WzFdLFwifVwiKSx1WzRdPW8pOnVbNF09XCJcIi5jb25jYXQobykpLHQucHVzaCh1KSl9fSx0fX0sODA4MTplPT57ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBlWzFdfX0sNDQ4MzooZSx0LG4pPT57ZnVuY3Rpb24gcihlKXtyZXR1cm4gcj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT9cInN5bWJvbFwiOnR5cGVvZiBlfSxyKGUpfWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gbz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LG8oZSx0KX1mdW5jdGlvbiBhKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiBlfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIGk9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGkoZSl9ZnVuY3Rpb24gbChlKXt2YXIgdD1mdW5jdGlvbihlLHQpe2lmKFwib2JqZWN0XCIhPT1yKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgbj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09bil7dmFyIG89bi5jYWxsKGUsXCJzdHJpbmdcIik7aWYoXCJvYmplY3RcIiE9PXIobykpcmV0dXJuIG87dGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpfXJldHVybiBTdHJpbmcoZSl9KGUpO3JldHVyblwic3ltYm9sXCI9PT1yKHQpP3Q6U3RyaW5nKHQpfXZhciBzPW4oNjY4OSksYz1uKDU2OTcpLHU9big1MzAzKS5jcmVhdGVGb2N1c1RyYXAsZD1uKDgzODgpLmlzRm9jdXNhYmxlLHA9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcInByb3RvdHlwZVwiLHt3cml0YWJsZTohMX0pLHQmJm8oZSx0KX0oZixlKTt2YXIgdCxuLGMsdSxwPShjPWYsdT1mdW5jdGlvbigpe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsdD1pKGMpO2lmKHUpe3ZhciBuPWkodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxuKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKFwib2JqZWN0XCI9PT1yKHQpfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTtyZXR1cm4gYShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGYoZSl7dmFyIHQsbixyLG87IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX0odGhpcyxmKSxuPWEodD1wLmNhbGwodGhpcyxlKSksbz1mdW5jdGlvbihlKXt2YXIgdCxuPW51bGwhPT0odD10aGlzLmludGVybmFsT3B0aW9uc1tlXSkmJnZvaWQgMCE9PXQ/dDp0aGlzLm9yaWdpbmFsT3B0aW9uc1tlXTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxvPW5ldyBBcnJheShyPjE/ci0xOjApLGE9MTthPHI7YSsrKW9bYS0xXT1hcmd1bWVudHNbYV07bj1uLmFwcGx5KHZvaWQgMCxvKX1pZighMD09PW4mJihuPXZvaWQgMCksIW4pe2lmKHZvaWQgMD09PW58fCExPT09bilyZXR1cm4gbjt0aHJvdyBuZXcgRXJyb3IoXCJgXCIuY29uY2F0KGUsXCJgIHdhcyBzcGVjaWZpZWQgYnV0IHdhcyBub3QgYSBub2RlLCBvciBkaWQgbm90IHJldHVybiBhIG5vZGVcIikpfXZhciBpLGw9bjtpZihcInN0cmluZ1wiPT10eXBlb2YgbiYmIShsPW51bGw9PT0oaT10aGlzLmdldERvY3VtZW50KCkpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLnF1ZXJ5U2VsZWN0b3IobikpKXRocm93IG5ldyBFcnJvcihcImBcIi5jb25jYXQoZSxcImAgYXMgc2VsZWN0b3IgcmVmZXJzIHRvIG5vIGtub3duIG5vZGVcIikpO3JldHVybiBsfSwocj1sKHI9XCJnZXROb2RlRm9yT3B0aW9uXCIpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4scix7dmFsdWU6byxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bcl09byx0LmhhbmRsZURlYWN0aXZhdGU9dC5oYW5kbGVEZWFjdGl2YXRlLmJpbmQoYSh0KSksdC5oYW5kbGVQb3N0RGVhY3RpdmF0ZT10LmhhbmRsZVBvc3REZWFjdGl2YXRlLmJpbmQoYSh0KSksdC5oYW5kbGVDbGlja091dHNpZGVEZWFjdGl2YXRlcz10LmhhbmRsZUNsaWNrT3V0c2lkZURlYWN0aXZhdGVzLmJpbmQoYSh0KSksdC5pbnRlcm5hbE9wdGlvbnM9e3JldHVybkZvY3VzT25EZWFjdGl2YXRlOiExLGNoZWNrQ2FuUmV0dXJuRm9jdXM6bnVsbCxvbkRlYWN0aXZhdGU6dC5oYW5kbGVEZWFjdGl2YXRlLG9uUG9zdERlYWN0aXZhdGU6dC5oYW5kbGVQb3N0RGVhY3RpdmF0ZSxjbGlja091dHNpZGVEZWFjdGl2YXRlczp0LmhhbmRsZUNsaWNrT3V0c2lkZURlYWN0aXZhdGVzfSx0Lm9yaWdpbmFsT3B0aW9ucz17cmV0dXJuRm9jdXNPbkRlYWN0aXZhdGU6ITAsb25EZWFjdGl2YXRlOm51bGwsb25Qb3N0RGVhY3RpdmF0ZTpudWxsLGNoZWNrQ2FuUmV0dXJuRm9jdXM6bnVsbCxjbGlja091dHNpZGVEZWFjdGl2YXRlczohMX07dmFyIGk9ZS5mb2N1c1RyYXBPcHRpb25zO2Zvcih2YXIgcyBpbiBpKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLHMpJiYoXCJyZXR1cm5Gb2N1c09uRGVhY3RpdmF0ZVwiIT09cyYmXCJvbkRlYWN0aXZhdGVcIiE9PXMmJlwib25Qb3N0RGVhY3RpdmF0ZVwiIT09cyYmXCJjaGVja0NhblJldHVybkZvY3VzXCIhPT1zJiZcImNsaWNrT3V0c2lkZURlYWN0aXZhdGVzXCIhPT1zP3QuaW50ZXJuYWxPcHRpb25zW3NdPWlbc106dC5vcmlnaW5hbE9wdGlvbnNbc109aVtzXSk7cmV0dXJuIHQub3V0c2lkZUNsaWNrPW51bGwsdC5mb2N1c1RyYXBFbGVtZW50cz1lLmNvbnRhaW5lckVsZW1lbnRzfHxbXSx0LnVwZGF0ZVByZXZpb3VzRWxlbWVudCgpLHR9cmV0dXJuIHQ9Ziwobj1be2tleTpcImdldERvY3VtZW50XCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9wcy5mb2N1c1RyYXBPcHRpb25zLmRvY3VtZW50fHwoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGRvY3VtZW50P2RvY3VtZW50OnZvaWQgMCl9fSx7a2V5OlwiZ2V0UmV0dXJuRm9jdXNOb2RlXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldE5vZGVGb3JPcHRpb24oXCJzZXRSZXR1cm5Gb2N1c1wiLHRoaXMucHJldmlvdXNseUZvY3VzZWRFbGVtZW50KTtyZXR1cm4gZXx8ITEhPT1lJiZ0aGlzLnByZXZpb3VzbHlGb2N1c2VkRWxlbWVudH19LHtrZXk6XCJ1cGRhdGVQcmV2aW91c0VsZW1lbnRcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0RG9jdW1lbnQoKTtlJiYodGhpcy5wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQ9ZS5hY3RpdmVFbGVtZW50KX19LHtrZXk6XCJkZWFjdGl2YXRlVHJhcFwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5mb2N1c1RyYXAmJnRoaXMuZm9jdXNUcmFwLmFjdGl2ZSYmdGhpcy5mb2N1c1RyYXAuZGVhY3RpdmF0ZSh7cmV0dXJuRm9jdXM6ITEsY2hlY2tDYW5SZXR1cm5Gb2N1czpudWxsLG9uRGVhY3RpdmF0ZTp0aGlzLm9yaWdpbmFsT3B0aW9ucy5vbkRlYWN0aXZhdGV9KX19LHtrZXk6XCJoYW5kbGVDbGlja091dHNpZGVEZWFjdGl2YXRlc1wiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PVwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMub3JpZ2luYWxPcHRpb25zLmNsaWNrT3V0c2lkZURlYWN0aXZhdGVzP3RoaXMub3JpZ2luYWxPcHRpb25zLmNsaWNrT3V0c2lkZURlYWN0aXZhdGVzLmNhbGwobnVsbCxlKTp0aGlzLm9yaWdpbmFsT3B0aW9ucy5jbGlja091dHNpZGVEZWFjdGl2YXRlcztyZXR1cm4gdCYmKHRoaXMub3V0c2lkZUNsaWNrPXt0YXJnZXQ6ZS50YXJnZXQsYWxsb3dEZWFjdGl2YXRpb246dH0pLHR9fSx7a2V5OlwiaGFuZGxlRGVhY3RpdmF0ZVwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5vcmlnaW5hbE9wdGlvbnMub25EZWFjdGl2YXRlJiZ0aGlzLm9yaWdpbmFsT3B0aW9ucy5vbkRlYWN0aXZhdGUuY2FsbChudWxsKSx0aGlzLmRlYWN0aXZhdGVUcmFwKCl9fSx7a2V5OlwiaGFuZGxlUG9zdERlYWN0aXZhdGVcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1mdW5jdGlvbigpe3ZhciB0PWUuZ2V0UmV0dXJuRm9jdXNOb2RlKCksbj0hKCFlLm9yaWdpbmFsT3B0aW9ucy5yZXR1cm5Gb2N1c09uRGVhY3RpdmF0ZXx8bnVsbD09dHx8IXQuZm9jdXN8fGUub3V0c2lkZUNsaWNrJiYoIWUub3V0c2lkZUNsaWNrLmFsbG93RGVhY3RpdmF0aW9ufHxkKGUub3V0c2lkZUNsaWNrLnRhcmdldCxlLmludGVybmFsT3B0aW9ucy50YWJiYWJsZU9wdGlvbnMpKSkscj1lLmludGVybmFsT3B0aW9ucy5wcmV2ZW50U2Nyb2xsLG89dm9pZCAwIT09ciYmcjtuJiZ0LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOm99KSxlLm9yaWdpbmFsT3B0aW9ucy5vblBvc3REZWFjdGl2YXRlJiZlLm9yaWdpbmFsT3B0aW9ucy5vblBvc3REZWFjdGl2YXRlLmNhbGwobnVsbCksZS5vdXRzaWRlQ2xpY2s9bnVsbH07dGhpcy5vcmlnaW5hbE9wdGlvbnMuY2hlY2tDYW5SZXR1cm5Gb2N1cz90aGlzLm9yaWdpbmFsT3B0aW9ucy5jaGVja0NhblJldHVybkZvY3VzLmNhbGwobnVsbCx0aGlzLmdldFJldHVybkZvY3VzTm9kZSgpKS50aGVuKHQsdCk6dCgpfX0se2tleTpcInNldHVwRm9jdXNUcmFwXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmZvY3VzVHJhcD90aGlzLnByb3BzLmFjdGl2ZSYmIXRoaXMuZm9jdXNUcmFwLmFjdGl2ZSYmKHRoaXMuZm9jdXNUcmFwLmFjdGl2YXRlKCksdGhpcy5wcm9wcy5wYXVzZWQmJnRoaXMuZm9jdXNUcmFwLnBhdXNlKCkpOnRoaXMuZm9jdXNUcmFwRWxlbWVudHMuc29tZShCb29sZWFuKSYmKHRoaXMuZm9jdXNUcmFwPXRoaXMucHJvcHMuX2NyZWF0ZUZvY3VzVHJhcCh0aGlzLmZvY3VzVHJhcEVsZW1lbnRzLHRoaXMuaW50ZXJuYWxPcHRpb25zKSx0aGlzLnByb3BzLmFjdGl2ZSYmdGhpcy5mb2N1c1RyYXAuYWN0aXZhdGUoKSx0aGlzLnByb3BzLnBhdXNlZCYmdGhpcy5mb2N1c1RyYXAucGF1c2UoKSl9fSx7a2V5OlwiY29tcG9uZW50RGlkTW91bnRcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucHJvcHMuYWN0aXZlJiZ0aGlzLnNldHVwRm9jdXNUcmFwKCl9fSx7a2V5OlwiY29tcG9uZW50RGlkVXBkYXRlXCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5mb2N1c1RyYXApe2UuY29udGFpbmVyRWxlbWVudHMhPT10aGlzLnByb3BzLmNvbnRhaW5lckVsZW1lbnRzJiZ0aGlzLmZvY3VzVHJhcC51cGRhdGVDb250YWluZXJFbGVtZW50cyh0aGlzLnByb3BzLmNvbnRhaW5lckVsZW1lbnRzKTt2YXIgdD0hZS5hY3RpdmUmJnRoaXMucHJvcHMuYWN0aXZlLG49ZS5hY3RpdmUmJiF0aGlzLnByb3BzLmFjdGl2ZSxyPSFlLnBhdXNlZCYmdGhpcy5wcm9wcy5wYXVzZWQsbz1lLnBhdXNlZCYmIXRoaXMucHJvcHMucGF1c2VkO2lmKHQmJih0aGlzLnVwZGF0ZVByZXZpb3VzRWxlbWVudCgpLHRoaXMuZm9jdXNUcmFwLmFjdGl2YXRlKCkpLG4pcmV0dXJuIHZvaWQgdGhpcy5kZWFjdGl2YXRlVHJhcCgpO3ImJnRoaXMuZm9jdXNUcmFwLnBhdXNlKCksbyYmdGhpcy5mb2N1c1RyYXAudW5wYXVzZSgpfWVsc2UgZS5jb250YWluZXJFbGVtZW50cyE9PXRoaXMucHJvcHMuY29udGFpbmVyRWxlbWVudHMmJih0aGlzLmZvY3VzVHJhcEVsZW1lbnRzPXRoaXMucHJvcHMuY29udGFpbmVyRWxlbWVudHMpLHRoaXMucHJvcHMuYWN0aXZlJiYodGhpcy51cGRhdGVQcmV2aW91c0VsZW1lbnQoKSx0aGlzLnNldHVwRm9jdXNUcmFwKCkpfX0se2tleTpcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRlYWN0aXZhdGVUcmFwKCl9fSx7a2V5OlwicmVuZGVyXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcy5jaGlsZHJlbj9zLkNoaWxkcmVuLm9ubHkodGhpcy5wcm9wcy5jaGlsZHJlbik6dm9pZCAwO2lmKHQpe2lmKHQudHlwZSYmdC50eXBlPT09cy5GcmFnbWVudCl0aHJvdyBuZXcgRXJyb3IoXCJBIGZvY3VzLXRyYXAgY2Fubm90IHVzZSBhIEZyYWdtZW50IGFzIGl0cyBjaGlsZCBjb250YWluZXIuIFRyeSByZXBsYWNpbmcgaXQgd2l0aCBhIDxkaXY+IGVsZW1lbnQuXCIpO3JldHVybiBzLmNsb25lRWxlbWVudCh0LHtyZWY6ZnVuY3Rpb24obil7dmFyIHI9ZS5wcm9wcy5jb250YWluZXJFbGVtZW50czt0JiYoXCJmdW5jdGlvblwiPT10eXBlb2YgdC5yZWY/dC5yZWYobik6dC5yZWYmJih0LnJlZi5jdXJyZW50PW4pKSxlLmZvY3VzVHJhcEVsZW1lbnRzPXJ8fFtuXX19KX1yZXR1cm4gbnVsbH19XSkmJmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLGwoci5rZXkpLHIpfX0odC5wcm90b3R5cGUsbiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJwcm90b3R5cGVcIix7d3JpdGFibGU6ITF9KSxmfShzLkNvbXBvbmVudCksZj1cInVuZGVmaW5lZFwiPT10eXBlb2YgRWxlbWVudD9GdW5jdGlvbjpFbGVtZW50O3AucHJvcFR5cGVzPXthY3RpdmU6Yy5ib29sLHBhdXNlZDpjLmJvb2wsZm9jdXNUcmFwT3B0aW9uczpjLnNoYXBlKHtkb2N1bWVudDpjLm9iamVjdCxvbkFjdGl2YXRlOmMuZnVuYyxvblBvc3RBY3RpdmF0ZTpjLmZ1bmMsY2hlY2tDYW5Gb2N1c1RyYXA6Yy5mdW5jLG9uRGVhY3RpdmF0ZTpjLmZ1bmMsb25Qb3N0RGVhY3RpdmF0ZTpjLmZ1bmMsY2hlY2tDYW5SZXR1cm5Gb2N1czpjLmZ1bmMsaW5pdGlhbEZvY3VzOmMub25lT2ZUeXBlKFtjLmluc3RhbmNlT2YoZiksYy5zdHJpbmcsYy5ib29sLGMuZnVuY10pLGZhbGxiYWNrRm9jdXM6Yy5vbmVPZlR5cGUoW2MuaW5zdGFuY2VPZihmKSxjLnN0cmluZyxjLmZ1bmNdKSxlc2NhcGVEZWFjdGl2YXRlczpjLm9uZU9mVHlwZShbYy5ib29sLGMuZnVuY10pLGNsaWNrT3V0c2lkZURlYWN0aXZhdGVzOmMub25lT2ZUeXBlKFtjLmJvb2wsYy5mdW5jXSkscmV0dXJuRm9jdXNPbkRlYWN0aXZhdGU6Yy5ib29sLHNldFJldHVybkZvY3VzOmMub25lT2ZUeXBlKFtjLmluc3RhbmNlT2YoZiksYy5zdHJpbmcsYy5ib29sLGMuZnVuY10pLGFsbG93T3V0c2lkZUNsaWNrOmMub25lT2ZUeXBlKFtjLmJvb2wsYy5mdW5jXSkscHJldmVudFNjcm9sbDpjLmJvb2wsdGFiYmFibGVPcHRpb25zOmMuc2hhcGUoe2Rpc3BsYXlDaGVjazpjLm9uZU9mKFtcImZ1bGxcIixcImxlZ2FjeS1mdWxsXCIsXCJub24temVyby1hcmVhXCIsXCJub25lXCJdKSxnZXRTaGFkb3dSb290OmMub25lT2ZUeXBlKFtjLmJvb2wsYy5mdW5jXSl9KSx0cmFwU3RhY2s6Yy5hcnJheSxpc0tleUZvcndhcmQ6Yy5mdW5jLGlzS2V5QmFja3dhcmQ6Yy5mdW5jfSksY29udGFpbmVyRWxlbWVudHM6Yy5hcnJheU9mKGMuaW5zdGFuY2VPZihmKSksY2hpbGRyZW46Yy5vbmVPZlR5cGUoW2MuZWxlbWVudCxjLmluc3RhbmNlT2YoZildKX0scC5kZWZhdWx0UHJvcHM9e2FjdGl2ZTohMCxwYXVzZWQ6ITEsZm9jdXNUcmFwT3B0aW9uczp7fSxfY3JlYXRlRm9jdXNUcmFwOnV9LGUuZXhwb3J0cz1wfSw1MzAzOihlLHQsbik9PntuLnIodCksbi5kKHQse2NyZWF0ZUZvY3VzVHJhcDooKT0+Z30pO3ZhciByPW4oODM4OCk7ZnVuY3Rpb24gbyhlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gYShlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9vKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7aShlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6byhPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX1mdW5jdGlvbiBpKGUsdCxuKXtyZXR1cm4odD1mdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbihlLHQpe2lmKFwib2JqZWN0XCIhPXR5cGVvZiBlfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgbj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09bil7dmFyIHI9bi5jYWxsKGUsXCJzdHJpbmdcIik7aWYoXCJvYmplY3RcIiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpfXJldHVybiBTdHJpbmcoZSl9KGUpO3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiB0P3Q6U3RyaW5nKHQpfSh0KSlpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX12YXIgbD1mdW5jdGlvbihlKXtyZXR1cm5cIlRhYlwiPT09ZS5rZXl8fDk9PT1lLmtleUNvZGV9LHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGwoZSkmJiFlLnNoaWZ0S2V5fSxjPWZ1bmN0aW9uKGUpe3JldHVybiBsKGUpJiZlLnNoaWZ0S2V5fSx1PWZ1bmN0aW9uKGUpe3JldHVybiBzZXRUaW1lb3V0KGUsMCl9LGQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj0tMTtyZXR1cm4gZS5ldmVyeSgoZnVuY3Rpb24oZSxyKXtyZXR1cm4hdChlKXx8KG49ciwhMSl9KSksbn0scD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPW5ldyBBcnJheSh0PjE/dC0xOjApLHI9MTtyPHQ7cisrKW5bci0xXT1hcmd1bWVudHNbcl07cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZT9lLmFwcGx5KHZvaWQgMCxuKTplfSxmPWZ1bmN0aW9uKGUpe3JldHVybiBlLnRhcmdldC5zaGFkb3dSb290JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmNvbXBvc2VkUGF0aD9lLmNvbXBvc2VkUGF0aCgpWzBdOmUudGFyZ2V0fSxoPVtdLGc9ZnVuY3Rpb24oZSx0KXt2YXIgbixvPShudWxsPT10P3ZvaWQgMDp0LmRvY3VtZW50KXx8ZG9jdW1lbnQsaT0obnVsbD09dD92b2lkIDA6dC50cmFwU3RhY2spfHxoLGc9YSh7cmV0dXJuRm9jdXNPbkRlYWN0aXZhdGU6ITAsZXNjYXBlRGVhY3RpdmF0ZXM6ITAsZGVsYXlJbml0aWFsRm9jdXM6ITAsaXNLZXlGb3J3YXJkOnMsaXNLZXlCYWNrd2FyZDpjfSx0KSx2PXtjb250YWluZXJzOltdLGNvbnRhaW5lckdyb3VwczpbXSx0YWJiYWJsZUdyb3VwczpbXSxub2RlRm9jdXNlZEJlZm9yZUFjdGl2YXRpb246bnVsbCxtb3N0UmVjZW50bHlGb2N1c2VkTm9kZTpudWxsLGFjdGl2ZTohMSxwYXVzZWQ6ITEsZGVsYXlJbml0aWFsRm9jdXNUaW1lcjp2b2lkIDB9LEM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlJiZ2b2lkIDAhPT1lW3RdP2VbdF06Z1tufHx0XX0sbT1mdW5jdGlvbihlKXtyZXR1cm4gdi5jb250YWluZXJHcm91cHMuZmluZEluZGV4KChmdW5jdGlvbih0KXt2YXIgbj10LmNvbnRhaW5lcixyPXQudGFiYmFibGVOb2RlcztyZXR1cm4gbi5jb250YWlucyhlKXx8ci5maW5kKChmdW5jdGlvbih0KXtyZXR1cm4gdD09PWV9KSl9KSl9LHc9ZnVuY3Rpb24oZSl7dmFyIHQ9Z1tlXTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0KXtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShuPjE/bi0xOjApLGE9MTthPG47YSsrKXJbYS0xXT1hcmd1bWVudHNbYV07dD10LmFwcGx5KHZvaWQgMCxyKX1pZighMD09PXQmJih0PXZvaWQgMCksIXQpe2lmKHZvaWQgMD09PXR8fCExPT09dClyZXR1cm4gdDt0aHJvdyBuZXcgRXJyb3IoXCJgXCIuY29uY2F0KGUsXCJgIHdhcyBzcGVjaWZpZWQgYnV0IHdhcyBub3QgYSBub2RlLCBvciBkaWQgbm90IHJldHVybiBhIG5vZGVcIikpfXZhciBpPXQ7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQmJiEoaT1vLnF1ZXJ5U2VsZWN0b3IodCkpKXRocm93IG5ldyBFcnJvcihcImBcIi5jb25jYXQoZSxcImAgYXMgc2VsZWN0b3IgcmVmZXJzIHRvIG5vIGtub3duIG5vZGVcIikpO3JldHVybiBpfSxiPWZ1bmN0aW9uKCl7dmFyIGU9dyhcImluaXRpYWxGb2N1c1wiKTtpZighMT09PWUpcmV0dXJuITE7aWYodm9pZCAwPT09ZSlpZihtKG8uYWN0aXZlRWxlbWVudCk+PTApZT1vLmFjdGl2ZUVsZW1lbnQ7ZWxzZXt2YXIgdD12LnRhYmJhYmxlR3JvdXBzWzBdO2U9dCYmdC5maXJzdFRhYmJhYmxlTm9kZXx8dyhcImZhbGxiYWNrRm9jdXNcIil9aWYoIWUpdGhyb3cgbmV3IEVycm9yKFwiWW91ciBmb2N1cy10cmFwIG5lZWRzIHRvIGhhdmUgYXQgbGVhc3Qgb25lIGZvY3VzYWJsZSBlbGVtZW50XCIpO3JldHVybiBlfSx5PWZ1bmN0aW9uKCl7aWYodi5jb250YWluZXJHcm91cHM9di5jb250YWluZXJzLm1hcCgoZnVuY3Rpb24oZSl7dmFyIHQ9KDAsci50YWJiYWJsZSkoZSxnLnRhYmJhYmxlT3B0aW9ucyksbj0oMCxyLmZvY3VzYWJsZSkoZSxnLnRhYmJhYmxlT3B0aW9ucyk7cmV0dXJue2NvbnRhaW5lcjplLHRhYmJhYmxlTm9kZXM6dCxmb2N1c2FibGVOb2RlczpuLGZpcnN0VGFiYmFibGVOb2RlOnQubGVuZ3RoPjA/dFswXTpudWxsLGxhc3RUYWJiYWJsZU5vZGU6dC5sZW5ndGg+MD90W3QubGVuZ3RoLTFdOm51bGwsbmV4dFRhYmJhYmxlTm9kZTpmdW5jdGlvbihlKXt2YXIgdD0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLG89bi5maW5kSW5kZXgoKGZ1bmN0aW9uKHQpe3JldHVybiB0PT09ZX0pKTtpZighKG88MCkpcmV0dXJuIHQ/bi5zbGljZShvKzEpLmZpbmQoKGZ1bmN0aW9uKGUpe3JldHVybigwLHIuaXNUYWJiYWJsZSkoZSxnLnRhYmJhYmxlT3B0aW9ucyl9KSk6bi5zbGljZSgwLG8pLnJldmVyc2UoKS5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4oMCxyLmlzVGFiYmFibGUpKGUsZy50YWJiYWJsZU9wdGlvbnMpfSkpfX19KSksdi50YWJiYWJsZUdyb3Vwcz12LmNvbnRhaW5lckdyb3Vwcy5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRhYmJhYmxlTm9kZXMubGVuZ3RoPjB9KSksdi50YWJiYWJsZUdyb3Vwcy5sZW5ndGg8PTAmJiF3KFwiZmFsbGJhY2tGb2N1c1wiKSl0aHJvdyBuZXcgRXJyb3IoXCJZb3VyIGZvY3VzLXRyYXAgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBjb250YWluZXIgd2l0aCBhdCBsZWFzdCBvbmUgdGFiYmFibGUgbm9kZSBpbiBpdCBhdCBhbGwgdGltZXNcIil9LHg9ZnVuY3Rpb24gZSh0KXshMSE9PXQmJnQhPT1vLmFjdGl2ZUVsZW1lbnQmJih0JiZ0LmZvY3VzPyh0LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEhZy5wcmV2ZW50U2Nyb2xsfSksdi5tb3N0UmVjZW50bHlGb2N1c2VkTm9kZT10LGZ1bmN0aW9uKGUpe3JldHVybiBlLnRhZ05hbWUmJlwiaW5wdXRcIj09PWUudGFnTmFtZS50b0xvd2VyQ2FzZSgpJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnNlbGVjdH0odCkmJnQuc2VsZWN0KCkpOmUoYigpKSl9LGs9ZnVuY3Rpb24oZSl7dmFyIHQ9dyhcInNldFJldHVybkZvY3VzXCIsZSk7cmV0dXJuIHR8fCExIT09dCYmZX0sUz1mdW5jdGlvbihlKXt2YXIgdD1mKGUpO20odCk+PTB8fChwKGcuY2xpY2tPdXRzaWRlRGVhY3RpdmF0ZXMsZSk/bi5kZWFjdGl2YXRlKHtyZXR1cm5Gb2N1czpnLnJldHVybkZvY3VzT25EZWFjdGl2YXRlfSk6cChnLmFsbG93T3V0c2lkZUNsaWNrLGUpfHxlLnByZXZlbnREZWZhdWx0KCkpfSxPPWZ1bmN0aW9uKGUpe3ZhciB0PWYoZSksbj1tKHQpPj0wO258fHQgaW5zdGFuY2VvZiBEb2N1bWVudD9uJiYodi5tb3N0UmVjZW50bHlGb2N1c2VkTm9kZT10KTooZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx4KHYubW9zdFJlY2VudGx5Rm9jdXNlZE5vZGV8fGIoKSkpfSxNPWZ1bmN0aW9uKGUpe2lmKChcIkVzY2FwZVwiPT09KHQ9ZSkua2V5fHxcIkVzY1wiPT09dC5rZXl8fDI3PT09dC5rZXlDb2RlKSYmITEhPT1wKGcuZXNjYXBlRGVhY3RpdmF0ZXMsZSkpcmV0dXJuIGUucHJldmVudERlZmF1bHQoKSx2b2lkIG4uZGVhY3RpdmF0ZSgpO3ZhciB0OyhnLmlzS2V5Rm9yd2FyZChlKXx8Zy5pc0tleUJhY2t3YXJkKGUpKSYmZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxuPWYoZSk7eSgpO3ZhciBvPW51bGw7aWYodi50YWJiYWJsZUdyb3Vwcy5sZW5ndGg+MCl7dmFyIGE9bShuKSxpPWE+PTA/di5jb250YWluZXJHcm91cHNbYV06dm9pZCAwO2lmKGE8MClvPXQ/di50YWJiYWJsZUdyb3Vwc1t2LnRhYmJhYmxlR3JvdXBzLmxlbmd0aC0xXS5sYXN0VGFiYmFibGVOb2RlOnYudGFiYmFibGVHcm91cHNbMF0uZmlyc3RUYWJiYWJsZU5vZGU7ZWxzZSBpZih0KXt2YXIgcz1kKHYudGFiYmFibGVHcm91cHMsKGZ1bmN0aW9uKGUpe3ZhciB0PWUuZmlyc3RUYWJiYWJsZU5vZGU7cmV0dXJuIG49PT10fSkpO2lmKHM8MCYmKGkuY29udGFpbmVyPT09bnx8KDAsci5pc0ZvY3VzYWJsZSkobixnLnRhYmJhYmxlT3B0aW9ucykmJiEoMCxyLmlzVGFiYmFibGUpKG4sZy50YWJiYWJsZU9wdGlvbnMpJiYhaS5uZXh0VGFiYmFibGVOb2RlKG4sITEpKSYmKHM9YSkscz49MCl7dmFyIGM9MD09PXM/di50YWJiYWJsZUdyb3Vwcy5sZW5ndGgtMTpzLTE7bz12LnRhYmJhYmxlR3JvdXBzW2NdLmxhc3RUYWJiYWJsZU5vZGV9ZWxzZSBsKGUpfHwobz1pLm5leHRUYWJiYWJsZU5vZGUobiwhMSkpfWVsc2V7dmFyIHU9ZCh2LnRhYmJhYmxlR3JvdXBzLChmdW5jdGlvbihlKXt2YXIgdD1lLmxhc3RUYWJiYWJsZU5vZGU7cmV0dXJuIG49PT10fSkpO2lmKHU8MCYmKGkuY29udGFpbmVyPT09bnx8KDAsci5pc0ZvY3VzYWJsZSkobixnLnRhYmJhYmxlT3B0aW9ucykmJiEoMCxyLmlzVGFiYmFibGUpKG4sZy50YWJiYWJsZU9wdGlvbnMpJiYhaS5uZXh0VGFiYmFibGVOb2RlKG4pKSYmKHU9YSksdT49MCl7dmFyIHA9dT09PXYudGFiYmFibGVHcm91cHMubGVuZ3RoLTE/MDp1KzE7bz12LnRhYmJhYmxlR3JvdXBzW3BdLmZpcnN0VGFiYmFibGVOb2RlfWVsc2UgbChlKXx8KG89aS5uZXh0VGFiYmFibGVOb2RlKG4pKX19ZWxzZSBvPXcoXCJmYWxsYmFja0ZvY3VzXCIpO28mJihsKGUpJiZlLnByZXZlbnREZWZhdWx0KCkseChvKSl9KGUsZy5pc0tleUJhY2t3YXJkKGUpKX0sTD1mdW5jdGlvbihlKXt2YXIgdD1mKGUpO20odCk+PTB8fHAoZy5jbGlja091dHNpZGVEZWFjdGl2YXRlcyxlKXx8cChnLmFsbG93T3V0c2lkZUNsaWNrLGUpfHwoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkpfSxfPWZ1bmN0aW9uKCl7aWYodi5hY3RpdmUpcmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoZS5sZW5ndGg+MCl7dmFyIG49ZVtlLmxlbmd0aC0xXTtuIT09dCYmbi5wYXVzZSgpfXZhciByPWUuaW5kZXhPZih0KTstMT09PXJ8fGUuc3BsaWNlKHIsMSksZS5wdXNoKHQpfShpLG4pLHYuZGVsYXlJbml0aWFsRm9jdXNUaW1lcj1nLmRlbGF5SW5pdGlhbEZvY3VzP3UoKGZ1bmN0aW9uKCl7eChiKCkpfSkpOngoYigpKSxvLmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c2luXCIsTywhMCksby5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsUyx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSksby5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLFMse2NhcHR1cmU6ITAscGFzc2l2ZTohMX0pLG8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsTCx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSksby5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLE0se2NhcHR1cmU6ITAscGFzc2l2ZTohMX0pLG59LFA9ZnVuY3Rpb24oKXtpZih2LmFjdGl2ZSlyZXR1cm4gby5yZW1vdmVFdmVudExpc3RlbmVyKFwiZm9jdXNpblwiLE8sITApLG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLFMsITApLG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNoc3RhcnRcIixTLCEwKSxvLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLEwsITApLG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixNLCEwKSxufTtyZXR1cm4obj17Z2V0IGFjdGl2ZSgpe3JldHVybiB2LmFjdGl2ZX0sZ2V0IHBhdXNlZCgpe3JldHVybiB2LnBhdXNlZH0sYWN0aXZhdGU6ZnVuY3Rpb24oZSl7aWYodi5hY3RpdmUpcmV0dXJuIHRoaXM7dmFyIHQ9QyhlLFwib25BY3RpdmF0ZVwiKSxuPUMoZSxcIm9uUG9zdEFjdGl2YXRlXCIpLHI9QyhlLFwiY2hlY2tDYW5Gb2N1c1RyYXBcIik7cnx8eSgpLHYuYWN0aXZlPSEwLHYucGF1c2VkPSExLHYubm9kZUZvY3VzZWRCZWZvcmVBY3RpdmF0aW9uPW8uYWN0aXZlRWxlbWVudCx0JiZ0KCk7dmFyIGE9ZnVuY3Rpb24oKXtyJiZ5KCksXygpLG4mJm4oKX07cmV0dXJuIHI/KHIodi5jb250YWluZXJzLmNvbmNhdCgpKS50aGVuKGEsYSksdGhpcyk6KGEoKSx0aGlzKX0sZGVhY3RpdmF0ZTpmdW5jdGlvbihlKXtpZighdi5hY3RpdmUpcmV0dXJuIHRoaXM7dmFyIHQ9YSh7b25EZWFjdGl2YXRlOmcub25EZWFjdGl2YXRlLG9uUG9zdERlYWN0aXZhdGU6Zy5vblBvc3REZWFjdGl2YXRlLGNoZWNrQ2FuUmV0dXJuRm9jdXM6Zy5jaGVja0NhblJldHVybkZvY3VzfSxlKTtjbGVhclRpbWVvdXQodi5kZWxheUluaXRpYWxGb2N1c1RpbWVyKSx2LmRlbGF5SW5pdGlhbEZvY3VzVGltZXI9dm9pZCAwLFAoKSx2LmFjdGl2ZT0hMSx2LnBhdXNlZD0hMSxmdW5jdGlvbihlLHQpe3ZhciBuPWUuaW5kZXhPZih0KTstMSE9PW4mJmUuc3BsaWNlKG4sMSksZS5sZW5ndGg+MCYmZVtlLmxlbmd0aC0xXS51bnBhdXNlKCl9KGksbik7dmFyIHI9Qyh0LFwib25EZWFjdGl2YXRlXCIpLG89Qyh0LFwib25Qb3N0RGVhY3RpdmF0ZVwiKSxsPUModCxcImNoZWNrQ2FuUmV0dXJuRm9jdXNcIikscz1DKHQsXCJyZXR1cm5Gb2N1c1wiLFwicmV0dXJuRm9jdXNPbkRlYWN0aXZhdGVcIik7ciYmcigpO3ZhciBjPWZ1bmN0aW9uKCl7dSgoZnVuY3Rpb24oKXtzJiZ4KGsodi5ub2RlRm9jdXNlZEJlZm9yZUFjdGl2YXRpb24pKSxvJiZvKCl9KSl9O3JldHVybiBzJiZsPyhsKGsodi5ub2RlRm9jdXNlZEJlZm9yZUFjdGl2YXRpb24pKS50aGVuKGMsYyksdGhpcyk6KGMoKSx0aGlzKX0scGF1c2U6ZnVuY3Rpb24oKXtyZXR1cm4gdi5wYXVzZWR8fCF2LmFjdGl2ZXx8KHYucGF1c2VkPSEwLFAoKSksdGhpc30sdW5wYXVzZTpmdW5jdGlvbigpe3JldHVybiB2LnBhdXNlZCYmdi5hY3RpdmU/KHYucGF1c2VkPSExLHkoKSxfKCksdGhpcyk6dGhpc30sdXBkYXRlQ29udGFpbmVyRWxlbWVudHM6ZnVuY3Rpb24oZSl7dmFyIHQ9W10uY29uY2F0KGUpLmZpbHRlcihCb29sZWFuKTtyZXR1cm4gdi5jb250YWluZXJzPXQubWFwKChmdW5jdGlvbihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZT9vLnF1ZXJ5U2VsZWN0b3IoZSk6ZX0pKSx2LmFjdGl2ZSYmeSgpLHRoaXN9fSkudXBkYXRlQ29udGFpbmVyRWxlbWVudHMoZSksbn19LDkxNDE6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciByPW4oNjU1KSxvPW4oNjY4OSksYT1uKDQzOTQpLGk9bigzNTczKSxsPW4oOTI5NCkscz1uKDQ4MzkpO2Z1bmN0aW9uIGMoZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgdT1mdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gZSYmT2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24obil7aWYoXCJkZWZhdWx0XCIhPT1uKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsbik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbixyLmdldD9yOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlW25dfX0pfX0pKSx0LmRlZmF1bHQ9ZSxPYmplY3QuZnJlZXplKHQpfShvKSxkPWMobykscD1jKHMpLGY9ZnVuY3Rpb24oZSl7cmV0dXJue2lzRW5hYmxlZDpmdW5jdGlvbih0KXtyZXR1cm4gZS5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4hIXRbZV19KSl9fX0saD17bWVhc3VyZUxheW91dDpmKFtcImxheW91dFwiLFwibGF5b3V0SWRcIixcImRyYWdcIixcIl9sYXlvdXRSZXNldFRyYW5zZm9ybVwiXSksYW5pbWF0aW9uOmYoW1wiYW5pbWF0ZVwiLFwiZXhpdFwiLFwidmFyaWFudHNcIixcIndoaWxlSG92ZXJcIixcIndoaWxlVGFwXCIsXCJ3aGlsZUZvY3VzXCIsXCJ3aGlsZURyYWdcIl0pLGV4aXQ6ZihbXCJleGl0XCJdKSxkcmFnOmYoW1wiZHJhZ1wiLFwiZHJhZ0NvbnRyb2xzXCJdKSxmb2N1czpmKFtcIndoaWxlRm9jdXNcIl0pLGhvdmVyOmYoW1wid2hpbGVIb3ZlclwiLFwib25Ib3ZlclN0YXJ0XCIsXCJvbkhvdmVyRW5kXCJdKSx0YXA6ZihbXCJ3aGlsZVRhcFwiLFwib25UYXBcIixcIm9uVGFwU3RhcnRcIixcIm9uVGFwQ2FuY2VsXCJdKSxwYW46ZihbXCJvblBhblwiLFwib25QYW5TdGFydFwiLFwib25QYW5TZXNzaW9uU3RhcnRcIixcIm9uUGFuRW5kXCJdKSxsYXlvdXRBbmltYXRpb246ZihbXCJsYXlvdXRcIixcImxheW91dElkXCJdKX07ZnVuY3Rpb24gZyhlKXtmb3IodmFyIHQgaW4gZSl7dmFyIG49ZVt0XTtudWxsIT09biYmKGhbdF0uQ29tcG9uZW50PW4pfX12YXIgdj1vLmNyZWF0ZUNvbnRleHQoe3N0cmljdDohMX0pLEM9T2JqZWN0LmtleXMoaCksbT1DLmxlbmd0aCx3PW8uY3JlYXRlQ29udGV4dCh7dHJhbnNmb3JtUGFnZVBvaW50OmZ1bmN0aW9uKGUpe3JldHVybiBlfSxpc1N0YXRpYzohMX0pLGI9by5jcmVhdGVDb250ZXh0KHt9KTtmdW5jdGlvbiB5KCl7cmV0dXJuIG8udXNlQ29udGV4dChiKS52aXN1YWxFbGVtZW50fXZhciB4PW8uY3JlYXRlQ29udGV4dChudWxsKTtmdW5jdGlvbiBrKGUpe3ZhciB0PW8udXNlUmVmKG51bGwpO3JldHVybiBudWxsPT09dC5jdXJyZW50JiYodC5jdXJyZW50PWUoKSksdC5jdXJyZW50fWZ1bmN0aW9uIFMoKXt2YXIgZT1vLnVzZUNvbnRleHQoeCk7aWYobnVsbD09PWUpcmV0dXJuWyEwLG51bGxdO3ZhciB0PWUuaXNQcmVzZW50LG49ZS5vbkV4aXRDb21wbGV0ZSxyPWUucmVnaXN0ZXIsYT1fKCk7cmV0dXJuIG8udXNlRWZmZWN0KChmdW5jdGlvbigpe3JldHVybiByKGEpfSksW10pLCF0JiZuP1shMSxmdW5jdGlvbigpe3JldHVybiBudWxsPT1uP3ZvaWQgMDpuKGEpfV06WyEwXX1mdW5jdGlvbiBPKGUpe3JldHVybiBudWxsPT09ZXx8ZS5pc1ByZXNlbnR9dmFyIE09MCxMPWZ1bmN0aW9uKCl7cmV0dXJuIE0rK30sXz1mdW5jdGlvbigpe3JldHVybiBrKEwpfSxQPW8uY3JlYXRlQ29udGV4dChudWxsKSxFPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3csaj1FP28udXNlTGF5b3V0RWZmZWN0Om8udXNlRWZmZWN0O2Z1bmN0aW9uIFIoZSl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLFwiY3VycmVudFwiKX1mdW5jdGlvbiBJKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpfWZ1bmN0aW9uIFYoZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGV8fEkoZSl9ZnVuY3Rpb24gSChlLHQsbixyLG8pe3ZhciBhO3JldHVybiB2b2lkIDA9PT1yJiYocj17fSksdm9pZCAwPT09byYmKG89e30pLFwic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1udWxsPT09KGE9ZS52YXJpYW50cyl8fHZvaWQgMD09PWE/dm9pZCAwOmFbdF0pLFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dChudWxsIT1uP246ZS5jdXN0b20scixvKTp0fWZ1bmN0aW9uIEEoZSx0LG4pe3ZhciByPWUuZ2V0UHJvcHMoKTtyZXR1cm4gSChyLHQsbnVsbCE9bj9uOnIuY3VzdG9tLGZ1bmN0aW9uKGUpe3ZhciB0PXt9O3JldHVybiBlLmZvckVhY2hWYWx1ZSgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gdFtuXT1lLmdldCgpfSkpLHR9KGUpLGZ1bmN0aW9uKGUpe3ZhciB0PXt9O3JldHVybiBlLmZvckVhY2hWYWx1ZSgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gdFtuXT1lLmdldFZlbG9jaXR5KCl9KSksdH0oZSkpfWZ1bmN0aW9uIFQoZSl7dmFyIHQ7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YobnVsbD09PSh0PWUuYW5pbWF0ZSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuc3RhcnQpfHxWKGUuaW5pdGlhbCl8fFYoZS5hbmltYXRlKXx8VihlLndoaWxlSG92ZXIpfHxWKGUud2hpbGVEcmFnKXx8VihlLndoaWxlVGFwKXx8VihlLndoaWxlRm9jdXMpfHxWKGUuZXhpdCl9ZnVuY3Rpb24gRChlKXtyZXR1cm4gQm9vbGVhbihUKGUpfHxlLnZhcmlhbnRzKX1mdW5jdGlvbiBCKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2Uuam9pbihcIiBcIik6ZX1mdW5jdGlvbiBaKGUpe3ZhciB0PWUucHJlbG9hZGVkRmVhdHVyZXMsbj1lLmNyZWF0ZVZpc3VhbEVsZW1lbnQsYT1lLnVzZVJlbmRlcixpPWUudXNlVmlzdWFsU3RhdGUsbD1lLkNvbXBvbmVudDtyZXR1cm4gdCYmZyh0KSxvLmZvcndhcmRSZWYoKGZ1bmN0aW9uKGUsdCl7dmFyIHM9by51c2VDb250ZXh0KHcpLmlzU3RhdGljLGM9bnVsbCxkPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZnVuY3Rpb24oZSx0KXtpZihUKGUpKXt2YXIgbj1lLmluaXRpYWwscj1lLmFuaW1hdGU7cmV0dXJue2luaXRpYWw6ITE9PT1ufHxWKG4pP246dm9pZCAwLGFuaW1hdGU6VihyKT9yOnZvaWQgMH19cmV0dXJuITEhPT1lLmluaGVyaXQ/dDp7fX0oZSxvLnVzZUNvbnRleHQoYikpLHI9bi5pbml0aWFsLGE9bi5hbmltYXRlO3JldHVybiBvLnVzZU1lbW8oKGZ1bmN0aW9uKCl7cmV0dXJue2luaXRpYWw6cixhbmltYXRlOmF9fSksdD9bQihyKSxCKGEpXTpbXSl9KGUscykscD1pKGUscyk7cmV0dXJuIXMmJkUmJihkLnZpc3VhbEVsZW1lbnQ9ZnVuY3Rpb24oZSx0LG4sYSl7dmFyIGk9by51c2VDb250ZXh0KHcpLGw9by51c2VDb250ZXh0KHYpLHM9eSgpLGM9by51c2VDb250ZXh0KHgpLHU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sYXlvdXRJZCxuPW8udXNlQ29udGV4dChQKTtyZXR1cm4gbiYmdm9pZCAwIT09dD9uK1wiLVwiK3Q6dH0obiksZD1vLnVzZVJlZih2b2lkIDApO2F8fChhPWwucmVuZGVyZXIpLCFkLmN1cnJlbnQmJmEmJihkLmN1cnJlbnQ9YShlLHt2aXN1YWxTdGF0ZTp0LHBhcmVudDpzLHByb3BzOnIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxuKSx7bGF5b3V0SWQ6dX0pLHByZXNlbmNlSWQ6bnVsbD09Yz92b2lkIDA6Yy5pZCxibG9ja0luaXRpYWxBbmltYXRpb246ITE9PT0obnVsbD09Yz92b2lkIDA6Yy5pbml0aWFsKX0pKTt2YXIgcD1kLmN1cnJlbnQ7cmV0dXJuIGooKGZ1bmN0aW9uKCl7cCYmKHAuc2V0UHJvcHMoci5fX2Fzc2lnbihyLl9fYXNzaWduKHIuX19hc3NpZ24oe30saSksbikse2xheW91dElkOnV9KSkscC5pc1ByZXNlbnQ9TyhjKSxwLmlzUHJlc2VuY2VSb290PSFzfHxzLnByZXNlbmNlSWQhPT0obnVsbD09Yz92b2lkIDA6Yy5pZCkscC5zeW5jUmVuZGVyKCkpfSkpLG8udXNlRWZmZWN0KChmdW5jdGlvbigpe3ZhciBlO3AmJihudWxsPT09KGU9cC5hbmltYXRpb25TdGF0ZSl8fHZvaWQgMD09PWV8fGUuYW5pbWF0ZUNoYW5nZXMoKSl9KSksaigoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09cD92b2lkIDA6cC5ub3RpZnlVbm1vdW50KCl9fSksW10pLHB9KGwscCxlLG4pLGM9ZnVuY3Rpb24oZSx0LG4pe3ZhciBhPVtdO2lmKG8udXNlQ29udGV4dCh2KSwhdClyZXR1cm4gbnVsbDtmb3IodmFyIGk9MDtpPG07aSsrKXt2YXIgbD1DW2ldLHM9aFtsXSxjPXMuaXNFbmFibGVkLGQ9cy5Db21wb25lbnQ7YyhlKSYmZCYmYS5wdXNoKHUuY3JlYXRlRWxlbWVudChkLHIuX19hc3NpZ24oe2tleTpsfSxlLHt2aXN1YWxFbGVtZW50OnR9KSkpfXJldHVybiBhfShlLGQudmlzdWFsRWxlbWVudCkpLHUuY3JlYXRlRWxlbWVudCh1LkZyYWdtZW50LG51bGwsdS5jcmVhdGVFbGVtZW50KGIuUHJvdmlkZXIse3ZhbHVlOmR9LGEobCxlLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gby51c2VDYWxsYmFjaygoZnVuY3Rpb24ocil7dmFyIG87ciYmKG51bGw9PT0obz1lLm1vdW50KXx8dm9pZCAwPT09b3x8by5jYWxsKGUscikpLHQmJihyP3QubW91bnQocik6dC51bm1vdW50KCkpLG4mJihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuP24ocik6UihuKSYmKG4uY3VycmVudD1yKSl9KSxbdF0pfShwLGQudmlzdWFsRWxlbWVudCx0KSxwLHMpKSxjKX0pKX1mdW5jdGlvbiAkKGUpe2Z1bmN0aW9uIHQodCxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49e30pLFooZSh0LG4pKX12YXIgbj1uZXcgTWFwO3JldHVybiBuZXcgUHJveHkodCx7Z2V0OmZ1bmN0aW9uKGUscil7cmV0dXJuIG4uaGFzKHIpfHxuLnNldChyLHQocikpLG4uZ2V0KHIpfX0pfXZhciBOPVtcImFuaW1hdGVcIixcImNpcmNsZVwiLFwiZGVmc1wiLFwiZGVzY1wiLFwiZWxsaXBzZVwiLFwiZ1wiLFwiaW1hZ2VcIixcImxpbmVcIixcImZpbHRlclwiLFwibWFya2VyXCIsXCJtYXNrXCIsXCJtZXRhZGF0YVwiLFwicGF0aFwiLFwicGF0dGVyblwiLFwicG9seWdvblwiLFwicG9seWxpbmVcIixcInJlY3RcIixcInN0b3BcIixcInN2Z1wiLFwic3dpdGNoXCIsXCJzeW1ib2xcIixcInRleHRcIixcInRzcGFuXCIsXCJ1c2VcIixcInZpZXdcIl07ZnVuY3Rpb24gRihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZSYmIWUuaW5jbHVkZXMoXCItXCIpJiYhIShOLmluZGV4T2YoZSk+LTF8fC9bQS1aXS8udGVzdChlKSl9dmFyIFc9e307ZnVuY3Rpb24gVShlKXtmb3IodmFyIHQgaW4gZSlXW3RdPWVbdF19dmFyIHo9W1wiXCIsXCJYXCIsXCJZXCIsXCJaXCJdLEc9W1widHJhbnNmb3JtUGVyc3BlY3RpdmVcIixcInhcIixcInlcIixcInpcIl07ZnVuY3Rpb24gSyhlLHQpe3JldHVybiBHLmluZGV4T2YoZSktRy5pbmRleE9mKHQpfVtcInRyYW5zbGF0ZVwiLFwic2NhbGVcIixcInJvdGF0ZVwiLFwic2tld1wiXS5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gei5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gRy5wdXNoKGUrdCl9KSl9KSk7dmFyIHE9bmV3IFNldChHKTtmdW5jdGlvbiBZKGUpe3JldHVybiBxLmhhcyhlKX12YXIgSj1uZXcgU2V0KFtcIm9yaWdpblhcIixcIm9yaWdpbllcIixcIm9yaWdpblpcIl0pO2Z1bmN0aW9uIFgoZSl7cmV0dXJuIEouaGFzKGUpfWZ1bmN0aW9uIFEoZSx0KXt2YXIgbj10LmxheW91dCxyPXQubGF5b3V0SWQ7cmV0dXJuIFkoZSl8fFgoZSl8fChufHx2b2lkIDAhPT1yKSYmKCEhV1tlXXx8XCJvcGFjaXR5XCI9PT1lKX12YXIgZWU9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPT1lJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmZS5nZXRWZWxvY2l0eX0sdGU9e3g6XCJ0cmFuc2xhdGVYXCIseTpcInRyYW5zbGF0ZVlcIix6OlwidHJhbnNsYXRlWlwiLHRyYW5zZm9ybVBlcnNwZWN0aXZlOlwicGVyc3BlY3RpdmVcIn07ZnVuY3Rpb24gbmUoZSl7cmV0dXJuIGUuc3RhcnRzV2l0aChcIi0tXCIpfXZhciByZT1mdW5jdGlvbihlLHQpe3JldHVybiB0JiZcIm51bWJlclwiPT10eXBlb2YgZT90LnRyYW5zZm9ybShlKTplfSxvZT1yLl9fYXNzaWduKHIuX19hc3NpZ24oe30saS5udW1iZXIpLHt0cmFuc2Zvcm06TWF0aC5yb3VuZH0pLGFlPXtib3JkZXJXaWR0aDppLnB4LGJvcmRlclRvcFdpZHRoOmkucHgsYm9yZGVyUmlnaHRXaWR0aDppLnB4LGJvcmRlckJvdHRvbVdpZHRoOmkucHgsYm9yZGVyTGVmdFdpZHRoOmkucHgsYm9yZGVyUmFkaXVzOmkucHgscmFkaXVzOmkucHgsYm9yZGVyVG9wTGVmdFJhZGl1czppLnB4LGJvcmRlclRvcFJpZ2h0UmFkaXVzOmkucHgsYm9yZGVyQm90dG9tUmlnaHRSYWRpdXM6aS5weCxib3JkZXJCb3R0b21MZWZ0UmFkaXVzOmkucHgsd2lkdGg6aS5weCxtYXhXaWR0aDppLnB4LGhlaWdodDppLnB4LG1heEhlaWdodDppLnB4LHNpemU6aS5weCx0b3A6aS5weCxyaWdodDppLnB4LGJvdHRvbTppLnB4LGxlZnQ6aS5weCxwYWRkaW5nOmkucHgscGFkZGluZ1RvcDppLnB4LHBhZGRpbmdSaWdodDppLnB4LHBhZGRpbmdCb3R0b206aS5weCxwYWRkaW5nTGVmdDppLnB4LG1hcmdpbjppLnB4LG1hcmdpblRvcDppLnB4LG1hcmdpblJpZ2h0OmkucHgsbWFyZ2luQm90dG9tOmkucHgsbWFyZ2luTGVmdDppLnB4LHJvdGF0ZTppLmRlZ3JlZXMscm90YXRlWDppLmRlZ3JlZXMscm90YXRlWTppLmRlZ3JlZXMscm90YXRlWjppLmRlZ3JlZXMsc2NhbGU6aS5zY2FsZSxzY2FsZVg6aS5zY2FsZSxzY2FsZVk6aS5zY2FsZSxzY2FsZVo6aS5zY2FsZSxza2V3OmkuZGVncmVlcyxza2V3WDppLmRlZ3JlZXMsc2tld1k6aS5kZWdyZWVzLGRpc3RhbmNlOmkucHgsdHJhbnNsYXRlWDppLnB4LHRyYW5zbGF0ZVk6aS5weCx0cmFuc2xhdGVaOmkucHgseDppLnB4LHk6aS5weCx6OmkucHgscGVyc3BlY3RpdmU6aS5weCx0cmFuc2Zvcm1QZXJzcGVjdGl2ZTppLnB4LG9wYWNpdHk6aS5hbHBoYSxvcmlnaW5YOmkucHJvZ3Jlc3NQZXJjZW50YWdlLG9yaWdpblk6aS5wcm9ncmVzc1BlcmNlbnRhZ2Usb3JpZ2luWjppLnB4LHpJbmRleDpvZSxmaWxsT3BhY2l0eTppLmFscGhhLHN0cm9rZU9wYWNpdHk6aS5hbHBoYSxudW1PY3RhdmVzOm9lfTtmdW5jdGlvbiBpZShlLHQsbixyLG8sYSxpLGwpe3ZhciBzLGM9ZS5zdHlsZSx1PWUudmFycyxkPWUudHJhbnNmb3JtLHA9ZS50cmFuc2Zvcm1LZXlzLGY9ZS50cmFuc2Zvcm1PcmlnaW47cC5sZW5ndGg9MDt2YXIgaD0hMSxnPSExLHY9ITA7Zm9yKHZhciBDIGluIHQpe3ZhciBtPXRbQ107aWYobmUoQykpdVtDXT1tO2Vsc2V7dmFyIHc9YWVbQ10sYj1yZShtLHcpO2lmKFkoQykpe2lmKGg9ITAsZFtDXT1iLHAucHVzaChDKSwhdiljb250aW51ZTttIT09KG51bGwhPT0ocz13LmRlZmF1bHQpJiZ2b2lkIDAhPT1zP3M6MCkmJih2PSExKX1lbHNlIGlmKFgoQykpZltDXT1iLGc9ITA7ZWxzZSBpZigobnVsbD09bj92b2lkIDA6bi5pc0h5ZHJhdGVkKSYmKG51bGw9PXI/dm9pZCAwOnIuaXNIeWRyYXRlZCkmJldbQ10pe3ZhciB5PVdbQ10ucHJvY2VzcyhtLHIsbikseD1XW0NdLmFwcGx5VG87aWYoeClmb3IodmFyIGs9eC5sZW5ndGgsUz0wO1M8aztTKyspY1t4W1NdXT15O2Vsc2UgY1tDXT15fWVsc2UgY1tDXT1ifX1yJiZuJiZpJiZsPyhjLnRyYW5zZm9ybT1pKHIuZGVsdGFGaW5hbCxyLnRyZWVTY2FsZSxoP2Q6dm9pZCAwKSxhJiYoYy50cmFuc2Zvcm09YShkLGMudHJhbnNmb3JtKSksYy50cmFuc2Zvcm1PcmlnaW49bChyKSk6KGgmJihjLnRyYW5zZm9ybT1mdW5jdGlvbihlLHQsbixyKXt2YXIgbz1lLnRyYW5zZm9ybSxhPWUudHJhbnNmb3JtS2V5cyxpPXQuZW5hYmxlSGFyZHdhcmVBY2NlbGVyYXRpb24sbD12b2lkIDA9PT1pfHxpLHM9dC5hbGxvd1RyYW5zZm9ybU5vbmUsYz12b2lkIDA9PT1zfHxzLHU9XCJcIjthLnNvcnQoSyk7Zm9yKHZhciBkPSExLHA9YS5sZW5ndGgsZj0wO2Y8cDtmKyspe3ZhciBoPWFbZl07dSs9KHRlW2hdfHxoKStcIihcIitvW2hdK1wiKSBcIixcInpcIj09PWgmJihkPSEwKX1yZXR1cm4hZCYmbD91Kz1cInRyYW5zbGF0ZVooMClcIjp1PXUudHJpbSgpLHI/dT1yKG8sbj9cIlwiOnUpOmMmJm4mJih1PVwibm9uZVwiKSx1fShlLG8sdixhKSksZyYmKGMudHJhbnNmb3JtT3JpZ2luPWZ1bmN0aW9uKGUpe3ZhciB0PWUub3JpZ2luWCxuPXZvaWQgMD09PXQ/XCI1MCVcIjp0LHI9ZS5vcmlnaW5ZLG89dm9pZCAwPT09cj9cIjUwJVwiOnIsYT1lLm9yaWdpblo7cmV0dXJuIG4rXCIgXCIrbytcIiBcIisodm9pZCAwPT09YT8wOmEpfShmKSkpfXZhciBsZT1mdW5jdGlvbigpe3JldHVybntzdHlsZTp7fSx0cmFuc2Zvcm06e30sdHJhbnNmb3JtS2V5czpbXSx0cmFuc2Zvcm1PcmlnaW46e30sdmFyczp7fX19O2Z1bmN0aW9uIHNlKGUsdCxuKXtmb3IodmFyIHIgaW4gdCllZSh0W3JdKXx8UShyLG4pfHwoZVtyXT10W3JdKX1mdW5jdGlvbiBjZShlLHQsbil7dmFyIGE9e30saT1mdW5jdGlvbihlLHQsbil7dmFyIGE9e307cmV0dXJuIHNlKGEsZS5zdHlsZXx8e30sZSksT2JqZWN0LmFzc2lnbihhLGZ1bmN0aW9uKGUsdCxuKXt2YXIgYT1lLnRyYW5zZm9ybVRlbXBsYXRlO3JldHVybiBvLnVzZU1lbW8oKGZ1bmN0aW9uKCl7dmFyIGU9bGUoKTtpZShlLHQsdm9pZCAwLHZvaWQgMCx7ZW5hYmxlSGFyZHdhcmVBY2NlbGVyYXRpb246IW59LGEpO3ZhciBvPWUudmFycyxpPWUuc3R5bGU7cmV0dXJuIHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxvKSxpKX0pLFt0XSl9KGUsdCxuKSksZS50cmFuc2Zvcm1WYWx1ZXMmJihhPWUudHJhbnNmb3JtVmFsdWVzKGEpKSxhfShlLHQsbik7cmV0dXJuIEJvb2xlYW4oZS5kcmFnKSYmKGEuZHJhZ2dhYmxlPSExLGkudXNlclNlbGVjdD1pLldlYmtpdFVzZXJTZWxlY3Q9aS5XZWJraXRUb3VjaENhbGxvdXQ9XCJub25lXCIsaS50b3VjaEFjdGlvbj0hMD09PWUuZHJhZz9cIm5vbmVcIjpcInBhbi1cIisoXCJ4XCI9PT1lLmRyYWc/XCJ5XCI6XCJ4XCIpKSxhLnN0eWxlPWksYX12YXIgdWU9bmV3IFNldChbXCJpbml0aWFsXCIsXCJhbmltYXRlXCIsXCJleGl0XCIsXCJzdHlsZVwiLFwidmFyaWFudHNcIixcInRyYW5zaXRpb25cIixcInRyYW5zZm9ybVRlbXBsYXRlXCIsXCJ0cmFuc2Zvcm1WYWx1ZXNcIixcImN1c3RvbVwiLFwiaW5oZXJpdFwiLFwibGF5b3V0XCIsXCJsYXlvdXRJZFwiLFwiX2xheW91dFJlc2V0VHJhbnNmb3JtXCIsXCJvbkxheW91dEFuaW1hdGlvbkNvbXBsZXRlXCIsXCJvblZpZXdwb3J0Qm94VXBkYXRlXCIsXCJvbkxheW91dE1lYXN1cmVcIixcIm9uQmVmb3JlTGF5b3V0TWVhc3VyZVwiLFwib25BbmltYXRpb25TdGFydFwiLFwib25BbmltYXRpb25Db21wbGV0ZVwiLFwib25VcGRhdGVcIixcIm9uRHJhZ1N0YXJ0XCIsXCJvbkRyYWdcIixcIm9uRHJhZ0VuZFwiLFwib25NZWFzdXJlRHJhZ0NvbnN0cmFpbnRzXCIsXCJvbkRpcmVjdGlvbkxvY2tcIixcIm9uRHJhZ1RyYW5zaXRpb25FbmRcIixcImRyYWdcIixcImRyYWdDb250cm9sc1wiLFwiZHJhZ0xpc3RlbmVyXCIsXCJkcmFnQ29uc3RyYWludHNcIixcImRyYWdEaXJlY3Rpb25Mb2NrXCIsXCJfZHJhZ1hcIixcIl9kcmFnWVwiLFwiZHJhZ0VsYXN0aWNcIixcImRyYWdNb21lbnR1bVwiLFwiZHJhZ1Byb3BhZ2F0aW9uXCIsXCJkcmFnVHJhbnNpdGlvblwiLFwid2hpbGVEcmFnXCIsXCJvblBhblwiLFwib25QYW5TdGFydFwiLFwib25QYW5FbmRcIixcIm9uUGFuU2Vzc2lvblN0YXJ0XCIsXCJvblRhcFwiLFwib25UYXBTdGFydFwiLFwib25UYXBDYW5jZWxcIixcIm9uSG92ZXJTdGFydFwiLFwib25Ib3ZlckVuZFwiLFwid2hpbGVGb2N1c1wiLFwid2hpbGVUYXBcIixcIndoaWxlSG92ZXJcIl0pO2Z1bmN0aW9uIGRlKGUpe3JldHVybiB1ZS5oYXMoZSl9dmFyIHBlPWZ1bmN0aW9uKGUpe3JldHVybiFkZShlKX07dHJ5e3ZhciBmZT1uKDg1OTQpLlo7cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3RhcnRzV2l0aChcIm9uXCIpPyFkZShlKTpmZShlKX19Y2F0Y2goZSl7fWZ1bmN0aW9uIGhlKGUsdCxuKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZT9lOmkucHgudHJhbnNmb3JtKHQrbiplKX12YXIgZ2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaS5weC50cmFuc2Zvcm0oZSp0KX0sdmU9e29mZnNldDpcInN0cm9rZS1kYXNob2Zmc2V0XCIsYXJyYXk6XCJzdHJva2UtZGFzaGFycmF5XCJ9LENlPXtvZmZzZXQ6XCJzdHJva2VEYXNob2Zmc2V0XCIsYXJyYXk6XCJzdHJva2VEYXNoYXJyYXlcIn07ZnVuY3Rpb24gbWUoZSx0LG4sbyxhLGksbCxzKXt2YXIgYz10LmF0dHJYLHU9dC5hdHRyWSxkPXQub3JpZ2luWCxwPXQub3JpZ2luWSxmPXQucGF0aExlbmd0aCxoPXQucGF0aFNwYWNpbmcsZz12b2lkIDA9PT1oPzE6aCx2PXQucGF0aE9mZnNldCxDPXZvaWQgMD09PXY/MDp2O2llKGUsci5fX3Jlc3QodCxbXCJhdHRyWFwiLFwiYXR0cllcIixcIm9yaWdpblhcIixcIm9yaWdpbllcIixcInBhdGhMZW5ndGhcIixcInBhdGhTcGFjaW5nXCIsXCJwYXRoT2Zmc2V0XCJdKSxuLG8sYSxpLGwscyksZS5hdHRycz1lLnN0eWxlLGUuc3R5bGU9e307dmFyIG09ZS5hdHRycyx3PWUuc3R5bGUsYj1lLmRpbWVuc2lvbnMseT1lLnRvdGFsUGF0aExlbmd0aDttLnRyYW5zZm9ybSYmKGImJih3LnRyYW5zZm9ybT1tLnRyYW5zZm9ybSksZGVsZXRlIG0udHJhbnNmb3JtKSxiJiYodm9pZCAwIT09ZHx8dm9pZCAwIT09cHx8dy50cmFuc2Zvcm0pJiYody50cmFuc2Zvcm1PcmlnaW49ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBoZSh0LGUueCxlLndpZHRoKStcIiBcIitoZShuLGUueSxlLmhlaWdodCl9KGIsdm9pZCAwIT09ZD9kOi41LHZvaWQgMCE9PXA/cDouNSkpLHZvaWQgMCE9PWMmJihtLng9Yyksdm9pZCAwIT09dSYmKG0ueT11KSx2b2lkIDAhPT15JiZ2b2lkIDAhPT1mJiZmdW5jdGlvbihlLHQsbixyLG8sYSl7dm9pZCAwPT09ciYmKHI9MSksdm9pZCAwPT09byYmKG89MCksdm9pZCAwPT09YSYmKGE9ITApO3ZhciBpPWE/dmU6Q2U7ZVtpLm9mZnNldF09Z2UoLW8sdCk7dmFyIGw9Z2Uobix0KSxzPWdlKHIsdCk7ZVtpLmFycmF5XT1sK1wiIFwiK3N9KG0seSxmLGcsQywhMSl9dmFyIHdlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxsZSgpKSx7YXR0cnM6e319KX07ZnVuY3Rpb24gYmUoZSx0KXt2YXIgbj1vLnVzZU1lbW8oKGZ1bmN0aW9uKCl7dmFyIG49d2UoKTtyZXR1cm4gbWUobix0LHZvaWQgMCx2b2lkIDAse2VuYWJsZUhhcmR3YXJlQWNjZWxlcmF0aW9uOiExfSxlLnRyYW5zZm9ybVRlbXBsYXRlKSxyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sbi5hdHRycykse3N0eWxlOnIuX19hc3NpZ24oe30sbi5zdHlsZSl9KX0pLFt0XSk7aWYoZS5zdHlsZSl7dmFyIGE9e307c2UoYSxlLnN0eWxlLGUpLG4uc3R5bGU9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGEpLG4uc3R5bGUpfXJldHVybiBufWZ1bmN0aW9uIHllKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0hMSksZnVuY3Rpb24odCxuLGEsaSxsKXt2YXIgcz1pLmxhdGVzdFZhbHVlcyxjPShGKHQpP2JlOmNlKShuLHMsbCksdT1mdW5jdGlvbihlLHQsbil7dmFyIHI9e307Zm9yKHZhciBvIGluIGUpKHBlKG8pfHwhMD09PW4mJmRlKG8pfHwhdCYmIWRlKG8pKSYmKHJbb109ZVtvXSk7cmV0dXJuIHJ9KG4sXCJzdHJpbmdcIj09dHlwZW9mIHQsZSksZD1yLl9fYXNzaWduKHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSx1KSxjKSx7cmVmOmF9KTtyZXR1cm4gby5jcmVhdGVFbGVtZW50KHQsZCl9fXZhciB4ZT0vKFthLXpdKShbQS1aXSkvZyxrZT1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKHhlLFwiJDEtJDJcIikudG9Mb3dlckNhc2UoKX07ZnVuY3Rpb24gU2UoZSx0KXt2YXIgbj10LnN0eWxlLHI9dC52YXJzO2Zvcih2YXIgbyBpbiBPYmplY3QuYXNzaWduKGUuc3R5bGUsbikscillLnN0eWxlLnNldFByb3BlcnR5KG8scltvXSl9dmFyIE9lPW5ldyBTZXQoW1wiYmFzZUZyZXF1ZW5jeVwiLFwiZGlmZnVzZUNvbnN0YW50XCIsXCJrZXJuZWxNYXRyaXhcIixcImtlcm5lbFVuaXRMZW5ndGhcIixcImtleVNwbGluZXNcIixcImtleVRpbWVzXCIsXCJsaW1pdGluZ0NvbmVBbmdsZVwiLFwibWFya2VySGVpZ2h0XCIsXCJtYXJrZXJXaWR0aFwiLFwibnVtT2N0YXZlc1wiLFwidGFyZ2V0WFwiLFwidGFyZ2V0WVwiLFwic3VyZmFjZVNjYWxlXCIsXCJzcGVjdWxhckNvbnN0YW50XCIsXCJzcGVjdWxhckV4cG9uZW50XCIsXCJzdGREZXZpYXRpb25cIixcInRhYmxlVmFsdWVzXCIsXCJ2aWV3Qm94XCIsXCJncmFkaWVudFRyYW5zZm9ybVwiXSk7ZnVuY3Rpb24gTWUoZSx0KXtmb3IodmFyIG4gaW4gU2UoZSx0KSx0LmF0dHJzKWUuc2V0QXR0cmlidXRlKE9lLmhhcyhuKT9uOmtlKG4pLHQuYXR0cnNbbl0pfWZ1bmN0aW9uIExlKGUpe3ZhciB0PWUuc3R5bGUsbj17fTtmb3IodmFyIHIgaW4gdCkoZWUodFtyXSl8fFEocixlKSkmJihuW3JdPXRbcl0pO3JldHVybiBufWZ1bmN0aW9uIF9lKGUpe3ZhciB0PUxlKGUpO2Zvcih2YXIgbiBpbiBlKWVlKGVbbl0pJiYodFtcInhcIj09PW58fFwieVwiPT09bj9cImF0dHJcIituLnRvVXBwZXJDYXNlKCk6bl09ZVtuXSk7cmV0dXJuIHR9ZnVuY3Rpb24gUGUoZSl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuc3RhcnR9dmFyIEVlPWZ1bmN0aW9uKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpfSxqZT1mdW5jdGlvbihlKXtyZXR1cm4gQm9vbGVhbihlJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmZS5taXgmJmUudG9WYWx1ZSl9LFJlPWZ1bmN0aW9uKGUpe3JldHVybiBFZShlKT9lW2UubGVuZ3RoLTFdfHwwOmV9O2Z1bmN0aW9uIEllKGUpe3ZhciB0PWVlKGUpP2UuZ2V0KCk6ZTtyZXR1cm4gamUodCk/dC50b1ZhbHVlKCk6dH1mdW5jdGlvbiBWZShlLHQsbixyKXt2YXIgbz1lLnNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyxhPWUuY3JlYXRlUmVuZGVyU3RhdGUsaT1lLm9uTW91bnQsbD17bGF0ZXN0VmFsdWVzOkFlKHQsbixyLG8pLHJlbmRlclN0YXRlOmEoKX07cmV0dXJuIGkmJihsLm1vdW50PWZ1bmN0aW9uKGUpe3JldHVybiBpKHQsZSxsKX0pLGx9dmFyIEhlPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3ZhciByPW8udXNlQ29udGV4dChiKSxhPW8udXNlQ29udGV4dCh4KTtyZXR1cm4gbj9WZShlLHQscixhKTprKChmdW5jdGlvbigpe3JldHVybiBWZShlLHQscixhKX0pKX19O2Z1bmN0aW9uIEFlKGUsdCxuLG8pe3ZhciBhPXt9LGk9ITE9PT0obnVsbD09bj92b2lkIDA6bi5pbml0aWFsKSxsPW8oZSk7Zm9yKHZhciBzIGluIGwpYVtzXT1JZShsW3NdKTt2YXIgYz1lLmluaXRpYWwsdT1lLmFuaW1hdGUsZD1UKGUpLHA9RChlKTt0JiZwJiYhZCYmITEhPT1lLmluaGVyaXQmJihudWxsIT1jfHwoYz10LmluaXRpYWwpLG51bGwhPXV8fCh1PXQuYW5pbWF0ZSkpO3ZhciBmPWl8fCExPT09Yz91OmM7cmV0dXJuIGYmJlwiYm9vbGVhblwiIT10eXBlb2YgZiYmIVBlKGYpJiYoQXJyYXkuaXNBcnJheShmKT9mOltmXSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49SChlLHQpO2lmKG4pe3ZhciBvPW4udHJhbnNpdGlvbkVuZDtuLnRyYW5zaXRpb247dmFyIGk9ci5fX3Jlc3QobixbXCJ0cmFuc2l0aW9uRW5kXCIsXCJ0cmFuc2l0aW9uXCJdKTtmb3IodmFyIGwgaW4gaSlhW2xdPWlbbF07Zm9yKHZhciBsIGluIG8pYVtsXT1vW2xdfX0pKSxhfXZhciBUZSxEZT17dXNlVmlzdWFsU3RhdGU6SGUoe3NjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wczpfZSxjcmVhdGVSZW5kZXJTdGF0ZTp3ZSxvbk1vdW50OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uLnJlbmRlclN0YXRlLG89bi5sYXRlc3RWYWx1ZXM7dHJ5e3IuZGltZW5zaW9ucz1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmdldEJCb3g/dC5nZXRCQm94KCk6dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1jYXRjaChlKXtyLmRpbWVuc2lvbnM9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH19XCJwYXRoXCI9PT10LnRhZ05hbWUmJihyLnRvdGFsUGF0aExlbmd0aD10LmdldFRvdGFsTGVuZ3RoKCkpLG1lKHIsbyx2b2lkIDAsdm9pZCAwLHtlbmFibGVIYXJkd2FyZUFjY2VsZXJhdGlvbjohMX0sZS50cmFuc2Zvcm1UZW1wbGF0ZSksTWUodCxyKX19KX0sQmU9e3VzZVZpc3VhbFN0YXRlOkhlKHtzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHM6TGUsY3JlYXRlUmVuZGVyU3RhdGU6bGV9KX07ZnVuY3Rpb24gWmUoZSx0LG4sbyl7dmFyIGE9dC5mb3J3YXJkTW90aW9uUHJvcHMsaT12b2lkIDAhPT1hJiZhLGw9RihlKT9EZTpCZTtyZXR1cm4gci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGwpLHtwcmVsb2FkZWRGZWF0dXJlczpuLHVzZVJlbmRlcjp5ZShpKSxjcmVhdGVWaXN1YWxFbGVtZW50Om8sQ29tcG9uZW50OmV9KX1mdW5jdGlvbiAkZShlLHQsbixyKXtyZXR1cm4gZS5hZGRFdmVudExpc3RlbmVyKHQsbixyKSxmdW5jdGlvbigpe3JldHVybiBlLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxuLHIpfX1mdW5jdGlvbiBOZShlLHQsbixyKXtvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXt2YXIgbz1lLmN1cnJlbnQ7aWYobiYmbylyZXR1cm4gJGUobyx0LG4scil9KSxbZSx0LG4scl0pfWZ1bmN0aW9uIEZlKGUpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBQb2ludGVyRXZlbnQmJmUgaW5zdGFuY2VvZiBQb2ludGVyRXZlbnQ/IShcIm1vdXNlXCIhPT1lLnBvaW50ZXJUeXBlKTplIGluc3RhbmNlb2YgTW91c2VFdmVudH1mdW5jdGlvbiBXZShlKXtyZXR1cm4hIWUudG91Y2hlc30hZnVuY3Rpb24oZSl7ZS5BbmltYXRlPVwiYW5pbWF0ZVwiLGUuSG92ZXI9XCJ3aGlsZUhvdmVyXCIsZS5UYXA9XCJ3aGlsZVRhcFwiLGUuRHJhZz1cIndoaWxlRHJhZ1wiLGUuRm9jdXM9XCJ3aGlsZUZvY3VzXCIsZS5FeGl0PVwiZXhpdFwifShUZXx8KFRlPXt9KSk7dmFyIFVlPXtwYWdlWDowLHBhZ2VZOjB9O2Z1bmN0aW9uIHplKGUsdCl7dm9pZCAwPT09dCYmKHQ9XCJwYWdlXCIpO3ZhciBuPWUudG91Y2hlc1swXXx8ZS5jaGFuZ2VkVG91Y2hlc1swXXx8VWU7cmV0dXJue3g6blt0K1wiWFwiXSx5Om5bdCtcIllcIl19fWZ1bmN0aW9uIEdlKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PVwicGFnZVwiKSx7eDplW3QrXCJYXCJdLHk6ZVt0K1wiWVwiXX19ZnVuY3Rpb24gS2UoZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9XCJwYWdlXCIpLHtwb2ludDpXZShlKT96ZShlLHQpOkdlKGUsdCl9fXZhciBxZT1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PSExKTt2YXIgbixyPWZ1bmN0aW9uKHQpe3JldHVybiBlKHQsS2UodCkpfTtyZXR1cm4gdD8obj1yLGZ1bmN0aW9uKGUpe3ZhciB0PWUgaW5zdGFuY2VvZiBNb3VzZUV2ZW50OyghdHx8dCYmMD09PWUuYnV0dG9uKSYmbihlKX0pOnJ9LFllPWZ1bmN0aW9uKCl7cmV0dXJuIEUmJm51bGw9PT13aW5kb3cub25wb2ludGVyZG93bn0sSmU9ZnVuY3Rpb24oKXtyZXR1cm4gRSYmbnVsbD09PXdpbmRvdy5vbnRvdWNoc3RhcnR9LFhlPWZ1bmN0aW9uKCl7cmV0dXJuIEUmJm51bGw9PT13aW5kb3cub25tb3VzZWRvd259LFFlPXtwb2ludGVyZG93bjpcIm1vdXNlZG93blwiLHBvaW50ZXJtb3ZlOlwibW91c2Vtb3ZlXCIscG9pbnRlcnVwOlwibW91c2V1cFwiLHBvaW50ZXJjYW5jZWw6XCJtb3VzZWNhbmNlbFwiLHBvaW50ZXJvdmVyOlwibW91c2VvdmVyXCIscG9pbnRlcm91dDpcIm1vdXNlb3V0XCIscG9pbnRlcmVudGVyOlwibW91c2VlbnRlclwiLHBvaW50ZXJsZWF2ZTpcIm1vdXNlbGVhdmVcIn0sZXQ9e3BvaW50ZXJkb3duOlwidG91Y2hzdGFydFwiLHBvaW50ZXJtb3ZlOlwidG91Y2htb3ZlXCIscG9pbnRlcnVwOlwidG91Y2hlbmRcIixwb2ludGVyY2FuY2VsOlwidG91Y2hjYW5jZWxcIn07ZnVuY3Rpb24gdHQoZSl7cmV0dXJuIFllKCk/ZTpKZSgpP2V0W2VdOlhlKCk/UWVbZV06ZX1mdW5jdGlvbiBudChlLHQsbixyKXtyZXR1cm4gJGUoZSx0dCh0KSxxZShuLFwicG9pbnRlcmRvd25cIj09PXQpLHIpfWZ1bmN0aW9uIHJ0KGUsdCxuLHIpe3JldHVybiBOZShlLHR0KHQpLG4mJnFlKG4sXCJwb2ludGVyZG93blwiPT09dCkscil9ZnVuY3Rpb24gb3QoZSl7dmFyIHQ9bnVsbDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXQmJih0PWUsZnVuY3Rpb24oKXt0PW51bGx9KX19dmFyIGF0PW90KFwiZHJhZ0hvcml6b250YWxcIiksaXQ9b3QoXCJkcmFnVmVydGljYWxcIik7ZnVuY3Rpb24gbHQoZSl7dmFyIHQ9ITE7aWYoXCJ5XCI9PT1lKXQ9aXQoKTtlbHNlIGlmKFwieFwiPT09ZSl0PWF0KCk7ZWxzZXt2YXIgbj1hdCgpLHI9aXQoKTtuJiZyP3Q9ZnVuY3Rpb24oKXtuKCkscigpfToobiYmbigpLHImJnIoKSl9cmV0dXJuIHR9ZnVuY3Rpb24gc3QoKXt2YXIgZT1sdCghMCk7cmV0dXJuIWV8fChlKCksITEpfWZ1bmN0aW9uIGN0KGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24ocixvKXt2YXIgYTtGZShyKSYmIXN0KCkmJihudWxsPT1ufHxuKHIsbyksbnVsbD09PShhPWUuYW5pbWF0aW9uU3RhdGUpfHx2b2lkIDA9PT1hfHxhLnNldEFjdGl2ZShUZS5Ib3Zlcix0KSl9fXZhciB1dD1mdW5jdGlvbihlLHQpe3JldHVybiEhdCYmKGU9PT10fHx1dChlLHQucGFyZW50RWxlbWVudCkpfTtmdW5jdGlvbiBkdChlKXtyZXR1cm4gby51c2VFZmZlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUoKX19KSxbXSl9dmFyIHB0PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSh0KSxudWxsfX0sZnQ9e3RhcDpwdCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vblRhcCxuPWUub25UYXBTdGFydCxyPWUub25UYXBDYW5jZWwsYT1lLndoaWxlVGFwLGk9ZS52aXN1YWxFbGVtZW50LHM9dHx8bnx8cnx8YSxjPW8udXNlUmVmKCExKSx1PW8udXNlUmVmKG51bGwpO2Z1bmN0aW9uIGQoKXt2YXIgZTtudWxsPT09KGU9dS5jdXJyZW50KXx8dm9pZCAwPT09ZXx8ZS5jYWxsKHUpLHUuY3VycmVudD1udWxsfWZ1bmN0aW9uIHAoKXt2YXIgZTtyZXR1cm4gZCgpLGMuY3VycmVudD0hMSxudWxsPT09KGU9aS5hbmltYXRpb25TdGF0ZSl8fHZvaWQgMD09PWV8fGUuc2V0QWN0aXZlKFRlLlRhcCwhMSksIXN0KCl9ZnVuY3Rpb24gZihlLG4pe3AoKSYmKHV0KGkuZ2V0SW5zdGFuY2UoKSxlLnRhcmdldCk/bnVsbD09dHx8dChlLG4pOm51bGw9PXJ8fHIoZSxuKSl9ZnVuY3Rpb24gaChlLHQpe3AoKSYmKG51bGw9PXJ8fHIoZSx0KSl9cnQoaSxcInBvaW50ZXJkb3duXCIscz9mdW5jdGlvbihlLHQpe3ZhciByO2QoKSxjLmN1cnJlbnR8fChjLmN1cnJlbnQ9ITAsdS5jdXJyZW50PWwucGlwZShudCh3aW5kb3csXCJwb2ludGVydXBcIixmKSxudCh3aW5kb3csXCJwb2ludGVyY2FuY2VsXCIsaCkpLG51bGw9PW58fG4oZSx0KSxudWxsPT09KHI9aS5hbmltYXRpb25TdGF0ZSl8fHZvaWQgMD09PXJ8fHIuc2V0QWN0aXZlKFRlLlRhcCwhMCkpfTp2b2lkIDApLGR0KGQpfSkpLGZvY3VzOnB0KChmdW5jdGlvbihlKXt2YXIgdD1lLndoaWxlRm9jdXMsbj1lLnZpc3VhbEVsZW1lbnQ7TmUobixcImZvY3VzXCIsdD9mdW5jdGlvbigpe3ZhciBlO251bGw9PT0oZT1uLmFuaW1hdGlvblN0YXRlKXx8dm9pZCAwPT09ZXx8ZS5zZXRBY3RpdmUoVGUuRm9jdXMsITApfTp2b2lkIDApLE5lKG4sXCJibHVyXCIsdD9mdW5jdGlvbigpe3ZhciBlO251bGw9PT0oZT1uLmFuaW1hdGlvblN0YXRlKXx8dm9pZCAwPT09ZXx8ZS5zZXRBY3RpdmUoVGUuRm9jdXMsITEpfTp2b2lkIDApfSkpLGhvdmVyOnB0KChmdW5jdGlvbihlKXt2YXIgdD1lLm9uSG92ZXJTdGFydCxuPWUub25Ib3ZlckVuZCxyPWUud2hpbGVIb3ZlcixvPWUudmlzdWFsRWxlbWVudDtydChvLFwicG9pbnRlcmVudGVyXCIsdHx8cj9jdChvLCEwLHQpOnZvaWQgMCkscnQobyxcInBvaW50ZXJsZWF2ZVwiLG58fHI/Y3QobywhMSxuKTp2b2lkIDApfSkpfTtmdW5jdGlvbiBodChlLHQpe2lmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiExO3ZhciBuPXQubGVuZ3RoO2lmKG4hPT1lLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIHI9MDtyPG47cisrKWlmKHRbcl0hPT1lW3JdKXJldHVybiExO3JldHVybiEwfXZhciBndD1mdW5jdGlvbihlKXtyZXR1cm4gMWUzKmV9LHZ0PXtsaW5lYXI6bC5saW5lYXIsZWFzZUluOmwuZWFzZUluLGVhc2VJbk91dDpsLmVhc2VJbk91dCxlYXNlT3V0OmwuZWFzZU91dCxjaXJjSW46bC5jaXJjSW4sY2lyY0luT3V0OmwuY2lyY0luT3V0LGNpcmNPdXQ6bC5jaXJjT3V0LGJhY2tJbjpsLmJhY2tJbixiYWNrSW5PdXQ6bC5iYWNrSW5PdXQsYmFja091dDpsLmJhY2tPdXQsYW50aWNpcGF0ZTpsLmFudGljaXBhdGUsYm91bmNlSW46bC5ib3VuY2VJbixib3VuY2VJbk91dDpsLmJvdW5jZUluT3V0LGJvdW5jZU91dDpsLmJvdW5jZU91dH0sQ3Q9ZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSl7YS5pbnZhcmlhbnQoND09PWUubGVuZ3RoLFwiQ3ViaWMgYmV6aWVyIGFycmF5cyBtdXN0IGNvbnRhaW4gZm91ciBudW1lcmljYWwgdmFsdWVzLlwiKTt2YXIgdD1yLl9fcmVhZChlLDQpLG49dFswXSxvPXRbMV0saT10WzJdLHM9dFszXTtyZXR1cm4gbC5jdWJpY0JlemllcihuLG8saSxzKX1yZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZT8oYS5pbnZhcmlhbnQodm9pZCAwIT09dnRbZV0sXCJJbnZhbGlkIGVhc2luZyB0eXBlICdcIitlK1wiJ1wiKSx2dFtlXSk6ZX0sbXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSkmJlwibnVtYmVyXCIhPXR5cGVvZiBlWzBdfSx3dD1mdW5jdGlvbihlLHQpe3JldHVybiEoXCJ6SW5kZXhcIj09PWV8fFwibnVtYmVyXCIhPXR5cGVvZiB0JiYhQXJyYXkuaXNBcnJheSh0KSYmKFwic3RyaW5nXCIhPXR5cGVvZiB0fHwhaS5jb21wbGV4LnRlc3QodCl8fHQuc3RhcnRzV2l0aChcInVybChcIikpKX0sYnQ9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTpcInNwcmluZ1wiLHN0aWZmbmVzczo1MDAsZGFtcGluZzoyNSxyZXN0RGVsdGE6LjUscmVzdFNwZWVkOjEwfX0seXQ9ZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6XCJzcHJpbmdcIixzdGlmZm5lc3M6NTUwLGRhbXBpbmc6MD09PWU/MipNYXRoLnNxcnQoNTUwKTozMCxyZXN0RGVsdGE6LjAxLHJlc3RTcGVlZDoxMH19LHh0PWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6XCJrZXlmcmFtZXNcIixlYXNlOlwibGluZWFyXCIsZHVyYXRpb246LjN9fSxrdD1mdW5jdGlvbihlKXtyZXR1cm57dHlwZTpcImtleWZyYW1lc1wiLGR1cmF0aW9uOi44LHZhbHVlczplfX0sU3Q9e3g6YnQseTpidCx6OmJ0LHJvdGF0ZTpidCxyb3RhdGVYOmJ0LHJvdGF0ZVk6YnQscm90YXRlWjpidCxzY2FsZVg6eXQsc2NhbGVZOnl0LHNjYWxlOnl0LG9wYWNpdHk6eHQsYmFja2dyb3VuZENvbG9yOnh0LGNvbG9yOnh0LGRlZmF1bHQ6eXR9LE90PWZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuIG49RWUodCk/a3Q6U3RbZV18fFN0LmRlZmF1bHQsci5fX2Fzc2lnbih7dG86dH0sbih0KSl9LE10PXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxhZSkse2NvbG9yOmkuY29sb3IsYmFja2dyb3VuZENvbG9yOmkuY29sb3Isb3V0bGluZUNvbG9yOmkuY29sb3IsZmlsbDppLmNvbG9yLHN0cm9rZTppLmNvbG9yLGJvcmRlckNvbG9yOmkuY29sb3IsYm9yZGVyVG9wQ29sb3I6aS5jb2xvcixib3JkZXJSaWdodENvbG9yOmkuY29sb3IsYm9yZGVyQm90dG9tQ29sb3I6aS5jb2xvcixib3JkZXJMZWZ0Q29sb3I6aS5jb2xvcixmaWx0ZXI6aS5maWx0ZXIsV2Via2l0RmlsdGVyOmkuZmlsdGVyfSksTHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIE10W2VdfTtmdW5jdGlvbiBfdChlLHQpe3ZhciBuLHI9THQoZSk7cmV0dXJuIHIhPT1pLmZpbHRlciYmKHI9aS5jb21wbGV4KSxudWxsPT09KG49ci5nZXRBbmltYXRhYmxlTm9uZSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uY2FsbChyLHQpfXZhciBQdD0hMTtmdW5jdGlvbiBFdChlKXtyZXR1cm4gMD09PWV8fFwic3RyaW5nXCI9PXR5cGVvZiBlJiYwPT09cGFyc2VGbG9hdChlKSYmLTE9PT1lLmluZGV4T2YoXCIgXCIpfWZ1bmN0aW9uIGp0KGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlPzA6X3QoXCJcIixlKX1mdW5jdGlvbiBSdChlLHQpe3JldHVybiBlW3RdfHxlLmRlZmF1bHR8fGV9ZnVuY3Rpb24gSXQoZSx0LG4sbyl7cmV0dXJuIHZvaWQgMD09PW8mJihvPXt9KSx0LnN0YXJ0KChmdW5jdGlvbihpKXt2YXIgcyxjLHU9ZnVuY3Rpb24oZSx0LG4sbyxpKXt2YXIgcyxjPVJ0KG8sZSksdT1udWxsIT09KHM9Yy5mcm9tKSYmdm9pZCAwIT09cz9zOnQuZ2V0KCksZD13dChlLG4pO1wibm9uZVwiPT09dSYmZCYmXCJzdHJpbmdcIj09dHlwZW9mIG4/dT1fdChlLG4pOkV0KHUpJiZcInN0cmluZ1wiPT10eXBlb2Ygbj91PWp0KG4pOiFBcnJheS5pc0FycmF5KG4pJiZFdChuKSYmXCJzdHJpbmdcIj09dHlwZW9mIHUmJihuPWp0KHUpKTt2YXIgcD13dChlLHUpO3JldHVybiBhLndhcm5pbmcocD09PWQsXCJZb3UgYXJlIHRyeWluZyB0byBhbmltYXRlIFwiK2UrJyBmcm9tIFwiJyt1KydcIiB0byBcIicrbisnXCIuICcrdStcIiBpcyBub3QgYW4gYW5pbWF0YWJsZSB2YWx1ZSAtIHRvIGVuYWJsZSB0aGlzIGFuaW1hdGlvbiBzZXQgXCIrdStcIiB0byBhIHZhbHVlIGFuaW1hdGFibGUgdG8gXCIrbitcIiB2aWEgdGhlIGBzdHlsZWAgcHJvcGVydHkuXCIpLHAmJmQmJiExIT09Yy50eXBlP2Z1bmN0aW9uKCl7dmFyIG89e2Zyb206dSx0bzpuLHZlbG9jaXR5OnQuZ2V0VmVsb2NpdHkoKSxvbkNvbXBsZXRlOmksb25VcGRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHQuc2V0KGUpfX07cmV0dXJuXCJpbmVydGlhXCI9PT1jLnR5cGV8fFwiZGVjYXlcIj09PWMudHlwZT9sLmluZXJ0aWEoci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LG8pLGMpKTpsLmFuaW1hdGUoci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgbztyZXR1cm4gQXJyYXkuaXNBcnJheSh0LnRvKSYmKG51bGwhPT0obz1lLmR1cmF0aW9uKSYmdm9pZCAwIT09b3x8KGUuZHVyYXRpb249LjgpKSxmdW5jdGlvbihlKXtBcnJheS5pc0FycmF5KGUudG8pJiZudWxsPT09ZS50b1swXSYmKGUudG89ci5fX3NwcmVhZEFycmF5KFtdLHIuX19yZWFkKGUudG8pKSxlLnRvWzBdPWUuZnJvbSl9KHQpLGZ1bmN0aW9uKGUpe2Uud2hlbixlLmRlbGF5LGUuZGVsYXlDaGlsZHJlbixlLnN0YWdnZXJDaGlsZHJlbixlLnN0YWdnZXJEaXJlY3Rpb24sZS5yZXBlYXQsZS5yZXBlYXRUeXBlLGUucmVwZWF0RGVsYXksZS5mcm9tO3ZhciB0PXIuX19yZXN0KGUsW1wid2hlblwiLFwiZGVsYXlcIixcImRlbGF5Q2hpbGRyZW5cIixcInN0YWdnZXJDaGlsZHJlblwiLFwic3RhZ2dlckRpcmVjdGlvblwiLFwicmVwZWF0XCIsXCJyZXBlYXRUeXBlXCIsXCJyZXBlYXREZWxheVwiLFwiZnJvbVwiXSk7cmV0dXJuISFPYmplY3Qua2V5cyh0KS5sZW5ndGh9KGUpfHwoZT1yLl9fYXNzaWduKHIuX19hc3NpZ24oe30sZSksT3Qobix0LnRvKSkpLHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSx0KSxmdW5jdGlvbihlKXt2YXIgdD1lLmVhc2Usbj1lLnRpbWVzLG89ZS55b3lvLGk9ZS5mbGlwLGw9ZS5sb29wLHM9ci5fX3Jlc3QoZSxbXCJlYXNlXCIsXCJ0aW1lc1wiLFwieW95b1wiLFwiZmxpcFwiLFwibG9vcFwiXSksYz1yLl9fYXNzaWduKHt9LHMpO3JldHVybiBuJiYoYy5vZmZzZXQ9bikscy5kdXJhdGlvbiYmKGMuZHVyYXRpb249Z3Qocy5kdXJhdGlvbikpLHMucmVwZWF0RGVsYXkmJihjLnJlcGVhdERlbGF5PWd0KHMucmVwZWF0RGVsYXkpKSx0JiYoYy5lYXNlPW10KHQpP3QubWFwKEN0KTpDdCh0KSksXCJ0d2VlblwiPT09cy50eXBlJiYoYy50eXBlPVwia2V5ZnJhbWVzXCIpLChvfHxsfHxpKSYmKGEud2FybmluZyghUHQsXCJ5b3lvLCBsb29wIGFuZCBmbGlwIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIEFQSS4gUmVwbGFjZSB3aXRoIHJlcGVhdCBhbmQgcmVwZWF0VHlwZSBvcHRpb25zLlwiKSxQdD0hMCxvP2MucmVwZWF0VHlwZT1cInJldmVyc2VcIjpsP2MucmVwZWF0VHlwZT1cImxvb3BcIjppJiYoYy5yZXBlYXRUeXBlPVwibWlycm9yXCIpLGMucmVwZWF0PWx8fG98fGl8fHMucmVwZWF0KSxcInNwcmluZ1wiIT09cy50eXBlJiYoYy50eXBlPVwia2V5ZnJhbWVzXCIpLGN9KGUpKX0oYyxvLGUpKSx7b25VcGRhdGU6ZnVuY3Rpb24oZSl7dmFyIHQ7by5vblVwZGF0ZShlKSxudWxsPT09KHQ9Yy5vblVwZGF0ZSl8fHZvaWQgMD09PXR8fHQuY2FsbChjLGUpfSxvbkNvbXBsZXRlOmZ1bmN0aW9uKCl7dmFyIGU7by5vbkNvbXBsZXRlKCksbnVsbD09PShlPWMub25Db21wbGV0ZSl8fHZvaWQgMD09PWV8fGUuY2FsbChjKX19KSl9OmZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHQuc2V0KG4pLGkoKSxudWxsPT09KGU9bnVsbD09Yz92b2lkIDA6Yy5vbkNvbXBsZXRlKXx8dm9pZCAwPT09ZXx8ZS5jYWxsKGMpLHtzdG9wOmZ1bmN0aW9uKCl7fX19fShlLHQsbixvLGkpLGQ9ZnVuY3Rpb24oZSx0KXt2YXIgbjtyZXR1cm4gbnVsbCE9PShuPShSdChlLHQpfHx7fSkuZGVsYXkpJiZ2b2lkIDAhPT1uP246MH0obyxlKSxwPWZ1bmN0aW9uKCl7cmV0dXJuIGM9dSgpfTtyZXR1cm4gZD9zPXNldFRpbWVvdXQocCxndChkKSk6cCgpLGZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHMpLG51bGw9PWN8fGMuc3RvcCgpfX0pKX1mdW5jdGlvbiBWdChlLHQpey0xPT09ZS5pbmRleE9mKHQpJiZlLnB1c2godCl9ZnVuY3Rpb24gSHQoZSx0KXt2YXIgbj1lLmluZGV4T2YodCk7bj4tMSYmZS5zcGxpY2UobiwxKX12YXIgQXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5zdWJzY3JpcHRpb25zPVtdfXJldHVybiBlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztyZXR1cm4gVnQodGhpcy5zdWJzY3JpcHRpb25zLGUpLGZ1bmN0aW9uKCl7cmV0dXJuIEh0KHQuc3Vic2NyaXB0aW9ucyxlKX19LGUucHJvdG90eXBlLm5vdGlmeT1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5zdWJzY3JpcHRpb25zLmxlbmd0aDtpZihyKWlmKDE9PT1yKXRoaXMuc3Vic2NyaXB0aW9uc1swXShlLHQsbik7ZWxzZSBmb3IodmFyIG89MDtvPHI7bysrKXt2YXIgYT10aGlzLnN1YnNjcmlwdGlvbnNbb107YSYmYShlLHQsbil9fSxlLnByb3RvdHlwZS5nZXRTaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3Vic2NyaXB0aW9ucy5sZW5ndGh9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zdWJzY3JpcHRpb25zLmxlbmd0aD0wfSxlfSgpLFR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgdCxuPXRoaXM7dGhpcy50aW1lRGVsdGE9MCx0aGlzLmxhc3RVcGRhdGVkPTAsdGhpcy51cGRhdGVTdWJzY3JpYmVycz1uZXcgQXQsdGhpcy52ZWxvY2l0eVVwZGF0ZVN1YnNjcmliZXJzPW5ldyBBdCx0aGlzLnJlbmRlclN1YnNjcmliZXJzPW5ldyBBdCx0aGlzLmNhblRyYWNrVmVsb2NpdHk9ITEsdGhpcy51cGRhdGVBbmROb3RpZnk9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD0hMCksbi5wcmV2PW4uY3VycmVudCxuLmN1cnJlbnQ9ZTt2YXIgcj1zLmdldEZyYW1lRGF0YSgpLG89ci5kZWx0YSxhPXIudGltZXN0YW1wO24ubGFzdFVwZGF0ZWQhPT1hJiYobi50aW1lRGVsdGE9byxuLmxhc3RVcGRhdGVkPWEscC5kZWZhdWx0LnBvc3RSZW5kZXIobi5zY2hlZHVsZVZlbG9jaXR5Q2hlY2spKSxuLnByZXYhPT1uLmN1cnJlbnQmJm4udXBkYXRlU3Vic2NyaWJlcnMubm90aWZ5KG4uY3VycmVudCksbi52ZWxvY2l0eVVwZGF0ZVN1YnNjcmliZXJzLmdldFNpemUoKSYmbi52ZWxvY2l0eVVwZGF0ZVN1YnNjcmliZXJzLm5vdGlmeShuLmdldFZlbG9jaXR5KCkpLHQmJm4ucmVuZGVyU3Vic2NyaWJlcnMubm90aWZ5KG4uY3VycmVudCl9LHRoaXMuc2NoZWR1bGVWZWxvY2l0eUNoZWNrPWZ1bmN0aW9uKCl7cmV0dXJuIHAuZGVmYXVsdC5wb3N0UmVuZGVyKG4udmVsb2NpdHlDaGVjayl9LHRoaXMudmVsb2NpdHlDaGVjaz1mdW5jdGlvbihlKXtlLnRpbWVzdGFtcCE9PW4ubGFzdFVwZGF0ZWQmJihuLnByZXY9bi5jdXJyZW50LG4udmVsb2NpdHlVcGRhdGVTdWJzY3JpYmVycy5ub3RpZnkobi5nZXRWZWxvY2l0eSgpKSl9LHRoaXMuaGFzQW5pbWF0ZWQ9ITEsdGhpcy5wcmV2PXRoaXMuY3VycmVudD1lLHRoaXMuY2FuVHJhY2tWZWxvY2l0eT0odD10aGlzLmN1cnJlbnQsIWlzTmFOKHBhcnNlRmxvYXQodCkpKX1yZXR1cm4gZS5wcm90b3R5cGUub25DaGFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudXBkYXRlU3Vic2NyaWJlcnMuYWRkKGUpfSxlLnByb3RvdHlwZS5jbGVhckxpc3RlbmVycz1mdW5jdGlvbigpe3RoaXMudXBkYXRlU3Vic2NyaWJlcnMuY2xlYXIoKX0sZS5wcm90b3R5cGUub25SZW5kZXJSZXF1ZXN0PWZ1bmN0aW9uKGUpe3JldHVybiBlKHRoaXMuZ2V0KCkpLHRoaXMucmVuZGVyU3Vic2NyaWJlcnMuYWRkKGUpfSxlLnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24oZSl7dGhpcy5wYXNzaXZlRWZmZWN0PWV9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PSEwKSx0JiZ0aGlzLnBhc3NpdmVFZmZlY3Q/dGhpcy5wYXNzaXZlRWZmZWN0KGUsdGhpcy51cGRhdGVBbmROb3RpZnkpOnRoaXMudXBkYXRlQW5kTm90aWZ5KGUsdCl9LGUucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LGUucHJvdG90eXBlLmdldFByZXZpb3VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldn0sZS5wcm90b3R5cGUuZ2V0VmVsb2NpdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW5UcmFja1ZlbG9jaXR5P2wudmVsb2NpdHlQZXJTZWNvbmQocGFyc2VGbG9hdCh0aGlzLmN1cnJlbnQpLXBhcnNlRmxvYXQodGhpcy5wcmV2KSx0aGlzLnRpbWVEZWx0YSk6MH0sZS5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5zdG9wKCksbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4pe3QuaGFzQW5pbWF0ZWQ9ITAsdC5zdG9wQW5pbWF0aW9uPWUobil9KSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gdC5jbGVhckFuaW1hdGlvbigpfSkpfSxlLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7dGhpcy5zdG9wQW5pbWF0aW9uJiZ0aGlzLnN0b3BBbmltYXRpb24oKSx0aGlzLmNsZWFyQW5pbWF0aW9uKCl9LGUucHJvdG90eXBlLmlzQW5pbWF0aW5nPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLnN0b3BBbmltYXRpb259LGUucHJvdG90eXBlLmNsZWFyQW5pbWF0aW9uPWZ1bmN0aW9uKCl7dGhpcy5zdG9wQW5pbWF0aW9uPW51bGx9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnVwZGF0ZVN1YnNjcmliZXJzLmNsZWFyKCksdGhpcy5yZW5kZXJTdWJzY3JpYmVycy5jbGVhcigpLHRoaXMuc3RvcCgpfSxlfSgpO2Z1bmN0aW9uIER0KGUpe3JldHVybiBuZXcgVHQoZSl9dmFyIEJ0PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdC50ZXN0KGUpfX0sWnQ9W2kubnVtYmVyLGkucHgsaS5wZXJjZW50LGkuZGVncmVlcyxpLnZ3LGkudmgse3Rlc3Q6ZnVuY3Rpb24oZSl7cmV0dXJuXCJhdXRvXCI9PT1lfSxwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gZX19XSwkdD1mdW5jdGlvbihlKXtyZXR1cm4gWnQuZmluZChCdChlKSl9LE50PXIuX19zcHJlYWRBcnJheShyLl9fc3ByZWFkQXJyYXkoW10sci5fX3JlYWQoWnQpKSxbaS5jb2xvcixpLmNvbXBsZXhdKTtmdW5jdGlvbiBGdChlLHQsbil7ZS5oYXNWYWx1ZSh0KT9lLmdldFZhbHVlKHQpLnNldChuKTplLmFkZFZhbHVlKHQsRHQobikpfWZ1bmN0aW9uIFd0KGUsdCl7dmFyIG49QShlLHQpLG89bj9lLm1ha2VUYXJnZXRBbmltYXRhYmxlKG4sITEpOnt9LGE9by50cmFuc2l0aW9uRW5kLGk9dm9pZCAwPT09YT97fTphO28udHJhbnNpdGlvbjt2YXIgbD1yLl9fcmVzdChvLFtcInRyYW5zaXRpb25FbmRcIixcInRyYW5zaXRpb25cIl0pO2Zvcih2YXIgcyBpbiBsPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxsKSxpKSlGdChlLHMsUmUobFtzXSkpfWZ1bmN0aW9uIFV0KGUsdCl7ci5fX3NwcmVhZEFycmF5KFtdLHIuX19yZWFkKHQpKS5yZXZlcnNlKCkuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIHIsbz1lLmdldFZhcmlhbnQobik7byYmV3QoZSxvKSxudWxsPT09KHI9ZS52YXJpYW50Q2hpbGRyZW4pfHx2b2lkIDA9PT1yfHxyLmZvckVhY2goKGZ1bmN0aW9uKGUpe1V0KGUsdCl9KSl9KSl9ZnVuY3Rpb24genQoZSx0LG4pe3ZhciByLG8sYSxsLHMsYz1PYmplY3Qua2V5cyh0KS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiFlLmhhc1ZhbHVlKHQpfSkpLHU9Yy5sZW5ndGg7aWYodSlmb3IodmFyIGQ9MDtkPHU7ZCsrKXt2YXIgcD1jW2RdLGY9dFtwXSxoPW51bGw7QXJyYXkuaXNBcnJheShmKSYmKGg9ZlswXSksbnVsbD09PWgmJihoPW51bGwhPT0obz1udWxsIT09KHI9bltwXSkmJnZvaWQgMCE9PXI/cjplLnJlYWRWYWx1ZShwKSkmJnZvaWQgMCE9PW8/bzp0W3BdKSxudWxsIT1oJiYoXCJzdHJpbmdcIj09dHlwZW9mIGgmJi9eXFwtP1xcZCpcXC4/XFxkKyQvLnRlc3QoaCk/aD1wYXJzZUZsb2F0KGgpOihzPWgsIU50LmZpbmQoQnQocykpJiZpLmNvbXBsZXgudGVzdChmKSYmKGg9X3QocCxmKSkpLGUuYWRkVmFsdWUocCxEdChoKSksbnVsbCE9PShhPShsPW4pW3BdKSYmdm9pZCAwIT09YXx8KGxbcF09aCksZS5zZXRCYXNlVGFyZ2V0KHAsaCkpfX1mdW5jdGlvbiBHdChlLHQpe2lmKHQpcmV0dXJuKHRbZV18fHQuZGVmYXVsdHx8dCkuZnJvbX1mdW5jdGlvbiBLdChlLHQsbil7dmFyIHIsbyxhPXt9O2Zvcih2YXIgaSBpbiBlKWFbaV09bnVsbCE9PShyPUd0KGksdCkpJiZ2b2lkIDAhPT1yP3I6bnVsbD09PShvPW4uZ2V0VmFsdWUoaSkpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLmdldCgpO3JldHVybiBhfWZ1bmN0aW9uIHF0KGUsdCxuKXt2YXIgcjtpZih2b2lkIDA9PT1uJiYobj17fSksZS5ub3RpZnlBbmltYXRpb25TdGFydCgpLEFycmF5LmlzQXJyYXkodCkpe3ZhciBvPXQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gWXQoZSx0LG4pfSkpO3I9UHJvbWlzZS5hbGwobyl9ZWxzZSBpZihcInN0cmluZ1wiPT10eXBlb2YgdClyPVl0KGUsdCxuKTtlbHNle3ZhciBhPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/QShlLHQsbi5jdXN0b20pOnQ7cj1KdChlLGEsbil9cmV0dXJuIHIudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gZS5ub3RpZnlBbmltYXRpb25Db21wbGV0ZSh0KX0pKX1mdW5jdGlvbiBZdChlLHQsbil7dmFyIG87dm9pZCAwPT09biYmKG49e30pO3ZhciBhPUEoZSx0LG4uY3VzdG9tKSxpPShhfHx7fSkudHJhbnNpdGlvbixsPXZvaWQgMD09PWk/ZS5nZXREZWZhdWx0VHJhbnNpdGlvbigpfHx7fTppO24udHJhbnNpdGlvbk92ZXJyaWRlJiYobD1uLnRyYW5zaXRpb25PdmVycmlkZSk7dmFyIHM9YT9mdW5jdGlvbigpe3JldHVybiBKdChlLGEsbil9OmZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfSxjPShudWxsPT09KG89ZS52YXJpYW50Q2hpbGRyZW4pfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLnNpemUpP2Z1bmN0aW9uKG8pe3ZvaWQgMD09PW8mJihvPTApO3ZhciBhPWwuZGVsYXlDaGlsZHJlbixpPXZvaWQgMD09PWE/MDphLHM9bC5zdGFnZ2VyQ2hpbGRyZW4sYz1sLnN0YWdnZXJEaXJlY3Rpb247cmV0dXJuIGZ1bmN0aW9uKGUsdCxuLG8sYSxpKXt2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1vJiYobz0wKSx2b2lkIDA9PT1hJiYoYT0xKTt2YXIgbD1bXSxzPShlLnZhcmlhbnRDaGlsZHJlbi5zaXplLTEpKm8sYz0xPT09YT9mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9MCksZSpvfTpmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9MCkscy1lKm99O3JldHVybiBBcnJheS5mcm9tKGUudmFyaWFudENoaWxkcmVuKS5zb3J0KFh0KS5mb3JFYWNoKChmdW5jdGlvbihlLG8pe2wucHVzaChZdChlLHQsci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGkpLHtkZWxheTpuK2Mobyl9KSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gZS5ub3RpZnlBbmltYXRpb25Db21wbGV0ZSh0KX0pKSl9KSksUHJvbWlzZS5hbGwobCl9KGUsdCxpK28scyxjLG4pfTpmdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUoKX0sdT1sLndoZW47aWYodSl7dmFyIGQ9ci5fX3JlYWQoXCJiZWZvcmVDaGlsZHJlblwiPT09dT9bcyxjXTpbYyxzXSwyKSxwPWRbMF0sZj1kWzFdO3JldHVybiBwKCkudGhlbihmKX1yZXR1cm4gUHJvbWlzZS5hbGwoW3MoKSxjKG4uZGVsYXkpXSl9ZnVuY3Rpb24gSnQoZSx0LG4pe3ZhciBvLGE9dm9pZCAwPT09bj97fTpuLGk9YS5kZWxheSxsPXZvaWQgMD09PWk/MDppLHM9YS50cmFuc2l0aW9uT3ZlcnJpZGUsYz1hLnR5cGUsdT1lLm1ha2VUYXJnZXRBbmltYXRhYmxlKHQpLGQ9dS50cmFuc2l0aW9uLHA9dm9pZCAwPT09ZD9lLmdldERlZmF1bHRUcmFuc2l0aW9uKCk6ZCxmPXUudHJhbnNpdGlvbkVuZCxoPXIuX19yZXN0KHUsW1widHJhbnNpdGlvblwiLFwidHJhbnNpdGlvbkVuZFwiXSk7cyYmKHA9cyk7dmFyIGc9W10sdj1jJiYobnVsbD09PShvPWUuYW5pbWF0aW9uU3RhdGUpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLmdldFN0YXRlKClbY10pO2Zvcih2YXIgQyBpbiBoKXt2YXIgbT1lLmdldFZhbHVlKEMpLHc9aFtDXTtpZighKCFtfHx2b2lkIDA9PT13fHx2JiZRdCh2LEMpKSl7dmFyIGI9SXQoQyxtLHcsci5fX2Fzc2lnbih7ZGVsYXk6bH0scCkpO2cucHVzaChiKX19cmV0dXJuIFByb21pc2UuYWxsKGcpLnRoZW4oKGZ1bmN0aW9uKCl7ZiYmV3QoZSxmKX0pKX1mdW5jdGlvbiBYdChlLHQpe3JldHVybiBlLnNvcnROb2RlUG9zaXRpb24odCl9ZnVuY3Rpb24gUXQoZSx0KXt2YXIgbj1lLnByb3RlY3RlZEtleXMscj1lLm5lZWRzQW5pbWF0aW5nLG89bi5oYXNPd25Qcm9wZXJ0eSh0KSYmITAhPT1yW3RdO3JldHVybiByW3RdPSExLG99dmFyIGVuPVtUZS5BbmltYXRlLFRlLkhvdmVyLFRlLlRhcCxUZS5EcmFnLFRlLkZvY3VzLFRlLkV4aXRdLHRuPXIuX19zcHJlYWRBcnJheShbXSxyLl9fcmVhZChlbikpLnJldmVyc2UoKSxubj1lbi5sZW5ndGg7ZnVuY3Rpb24gcm4oZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSExKSx7aXNBY3RpdmU6ZSxwcm90ZWN0ZWRLZXlzOnt9LG5lZWRzQW5pbWF0aW5nOnt9LHByZXZSZXNvbHZlZFZhbHVlczp7fX19dmFyIG9uPXthbmltYXRpb246cHQoKGZ1bmN0aW9uKGUpe3ZhciB0PWUudmlzdWFsRWxlbWVudCxuPWUuYW5pbWF0ZTt0LmFuaW1hdGlvblN0YXRlfHwodC5hbmltYXRpb25TdGF0ZT1mdW5jdGlvbihlKXt2YXIgdCxuPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gUHJvbWlzZS5hbGwodC5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBuPXQuYW5pbWF0aW9uLHI9dC5vcHRpb25zO3JldHVybiBxdChlLG4scil9KSkpfX0oZSksbz0oKHQ9e30pW1RlLkFuaW1hdGVdPXJuKCEwKSx0W1RlLkhvdmVyXT1ybigpLHRbVGUuVGFwXT1ybigpLHRbVGUuRHJhZ109cm4oKSx0W1RlLkZvY3VzXT1ybigpLHRbVGUuRXhpdF09cm4oKSx0KSxhPXt9LGk9ITAsbD1mdW5jdGlvbih0LG4pe3ZhciBvPUEoZSxuKTtpZihvKXtvLnRyYW5zaXRpb247dmFyIGE9by50cmFuc2l0aW9uRW5kLGk9ci5fX3Jlc3QobyxbXCJ0cmFuc2l0aW9uXCIsXCJ0cmFuc2l0aW9uRW5kXCJdKTt0PXIuX19hc3NpZ24oci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LHQpLGkpLGEpfXJldHVybiB0fTtmdW5jdGlvbiBzKHQscyl7Zm9yKHZhciBjLHU9ZS5nZXRQcm9wcygpLGQ9ZS5nZXRWYXJpYW50Q29udGV4dCghMCl8fHt9LHA9W10sZj1uZXcgU2V0LGg9e30sZz0xLzAsdj1mdW5jdGlvbihuKXt2YXIgYT10bltuXSx2PW9bYV0sQz1udWxsIT09KGM9dVthXSkmJnZvaWQgMCE9PWM/YzpkW2FdLG09VihDKSx3PWE9PT1zP3YuaXNBY3RpdmU6bnVsbDshMT09PXcmJihnPW4pO3ZhciBiPUM9PT1kW2FdJiZDIT09dVthXSYmbTtpZihiJiZpJiZlLm1hbnVhbGx5QW5pbWF0ZU9uTW91bnQmJihiPSExKSx2LnByb3RlY3RlZEtleXM9ci5fX2Fzc2lnbih7fSxoKSwhdi5pc0FjdGl2ZSYmbnVsbD09PXd8fCFDJiYhdi5wcmV2UHJvcHx8UGUoQyl8fFwiYm9vbGVhblwiPT10eXBlb2YgQylyZXR1cm5cImNvbnRpbnVlXCI7dmFyIHk9ZnVuY3Rpb24oZSx0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdD90IT09ZTohIUkodCkmJiFodCh0LGUpfSh2LnByZXZQcm9wLEMpfHxhPT09cyYmdi5pc0FjdGl2ZSYmIWImJm18fG4+ZyYmbSx4PUFycmF5LmlzQXJyYXkoQyk/QzpbQ10saz14LnJlZHVjZShsLHt9KTshMT09PXcmJihrPXt9KTt2YXIgUz12LnByZXZSZXNvbHZlZFZhbHVlcyxPPXZvaWQgMD09PVM/e306UyxNPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxPKSxrKSxMPWZ1bmN0aW9uKGUpe3k9ITAsZi5kZWxldGUoZSksdi5uZWVkc0FuaW1hdGluZ1tlXT0hMH07Zm9yKHZhciBfIGluIE0pe3ZhciBQPWtbX10sRT1PW19dO2guaGFzT3duUHJvcGVydHkoXyl8fChQIT09RT9FZShQKSYmRWUoRSk/aHQoUCxFKT92LnByb3RlY3RlZEtleXNbX109ITA6TChfKTp2b2lkIDAhPT1QP0woXyk6Zi5hZGQoXyk6dm9pZCAwIT09UCYmZi5oYXMoXyk/TChfKTp2LnByb3RlY3RlZEtleXNbX109ITApfXYucHJldlByb3A9Qyx2LnByZXZSZXNvbHZlZFZhbHVlcz1rLHYuaXNBY3RpdmUmJihoPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxoKSxrKSksaSYmZS5ibG9ja0luaXRpYWxBbmltYXRpb24mJih5PSExKSx5JiYhYiYmcC5wdXNoLmFwcGx5KHAsci5fX3NwcmVhZEFycmF5KFtdLHIuX19yZWFkKHgubWFwKChmdW5jdGlvbihlKXtyZXR1cm57YW5pbWF0aW9uOmUsb3B0aW9uczpyLl9fYXNzaWduKHt0eXBlOmF9LHQpfX0pKSkpKX0sQz0wO0M8bm47QysrKXYoQyk7aWYoYT1yLl9fYXNzaWduKHt9LGgpLGYuc2l6ZSl7dmFyIG09e307Zi5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1lLmdldEJhc2VUYXJnZXQodCk7dm9pZCAwIT09biYmKG1bdF09bil9KSkscC5wdXNoKHthbmltYXRpb246bX0pfXZhciB3PUJvb2xlYW4ocC5sZW5ndGgpO3JldHVybiBpJiYhMT09PXUuaW5pdGlhbCYmIWUubWFudWFsbHlBbmltYXRlT25Nb3VudCYmKHc9ITEpLGk9ITEsdz9uKHApOlByb21pc2UucmVzb2x2ZSgpfXJldHVybntpc0FuaW1hdGVkOmZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT1hW2VdfSxhbmltYXRlQ2hhbmdlczpzLHNldEFjdGl2ZTpmdW5jdGlvbih0LG4scil7dmFyIGE7cmV0dXJuIG9bdF0uaXNBY3RpdmU9PT1uP1Byb21pc2UucmVzb2x2ZSgpOihudWxsPT09KGE9ZS52YXJpYW50Q2hpbGRyZW4pfHx2b2lkIDA9PT1hfHxhLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciByO3JldHVybiBudWxsPT09KHI9ZS5hbmltYXRpb25TdGF0ZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc2V0QWN0aXZlKHQsbil9KSksb1t0XS5pc0FjdGl2ZT1uLHMocix0KSl9LHNldEFuaW1hdGVGdW5jdGlvbjpmdW5jdGlvbih0KXtuPXQoZSl9LGdldFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIG99fX0odCkpLFBlKG4pJiZvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gbi5zdWJzY3JpYmUodCl9KSxbbl0pfSkpLGV4aXQ6cHQoKGZ1bmN0aW9uKGUpe3ZhciB0PWUuY3VzdG9tLG49ZS52aXN1YWxFbGVtZW50LGE9ci5fX3JlYWQoUygpLDIpLGk9YVswXSxsPWFbMV0scz1vLnVzZUNvbnRleHQoeCk7by51c2VFZmZlY3QoKGZ1bmN0aW9uKCl7dmFyIGUscixvPW51bGw9PT0oZT1uLmFuaW1hdGlvblN0YXRlKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5zZXRBY3RpdmUoVGUuRXhpdCwhaSx7Y3VzdG9tOm51bGwhPT0ocj1udWxsPT1zP3ZvaWQgMDpzLmN1c3RvbSkmJnZvaWQgMCE9PXI/cjp0fSk7IWkmJihudWxsPT1vfHxvLnRoZW4obCkpfSksW2ldKX0pKX0sYW49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt2YXIgbz10aGlzLGE9KHZvaWQgMD09PW4/e306bikudHJhbnNmb3JtUGFnZVBvaW50O2lmKHRoaXMuc3RhcnRFdmVudD1udWxsLHRoaXMubGFzdE1vdmVFdmVudD1udWxsLHRoaXMubGFzdE1vdmVFdmVudEluZm89bnVsbCx0aGlzLmhhbmRsZXJzPXt9LHRoaXMudXBkYXRlUG9pbnQ9ZnVuY3Rpb24oKXtpZihvLmxhc3RNb3ZlRXZlbnQmJm8ubGFzdE1vdmVFdmVudEluZm8pe3ZhciBlPWNuKG8ubGFzdE1vdmVFdmVudEluZm8sby5oaXN0b3J5KSx0PW51bGwhPT1vLnN0YXJ0RXZlbnQsbj1sLmRpc3RhbmNlKGUub2Zmc2V0LHt4OjAseTowfSk+PTM7aWYodHx8bil7dmFyIGE9ZS5wb2ludCxpPXMuZ2V0RnJhbWVEYXRhKCkudGltZXN0YW1wO28uaGlzdG9yeS5wdXNoKHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxhKSx7dGltZXN0YW1wOml9KSk7dmFyIGM9by5oYW5kbGVycyx1PWMub25TdGFydCxkPWMub25Nb3ZlO3R8fCh1JiZ1KG8ubGFzdE1vdmVFdmVudCxlKSxvLnN0YXJ0RXZlbnQ9by5sYXN0TW92ZUV2ZW50KSxkJiZkKG8ubGFzdE1vdmVFdmVudCxlKX19fSx0aGlzLmhhbmRsZVBvaW50ZXJNb3ZlPWZ1bmN0aW9uKGUsdCl7by5sYXN0TW92ZUV2ZW50PWUsby5sYXN0TW92ZUV2ZW50SW5mbz1sbih0LG8udHJhbnNmb3JtUGFnZVBvaW50KSxGZShlKSYmMD09PWUuYnV0dG9ucz9vLmhhbmRsZVBvaW50ZXJVcChlLHQpOnAuZGVmYXVsdC51cGRhdGUoby51cGRhdGVQb2ludCwhMCl9LHRoaXMuaGFuZGxlUG9pbnRlclVwPWZ1bmN0aW9uKGUsdCl7by5lbmQoKTt2YXIgbj1vLmhhbmRsZXJzLHI9bi5vbkVuZCxhPW4ub25TZXNzaW9uRW5kLGk9Y24obG4odCxvLnRyYW5zZm9ybVBhZ2VQb2ludCksby5oaXN0b3J5KTtvLnN0YXJ0RXZlbnQmJnImJnIoZSxpKSxhJiZhKGUsaSl9LCEoV2UoZSkmJmUudG91Y2hlcy5sZW5ndGg+MSkpe3RoaXMuaGFuZGxlcnM9dCx0aGlzLnRyYW5zZm9ybVBhZ2VQb2ludD1hO3ZhciBpPWxuKEtlKGUpLHRoaXMudHJhbnNmb3JtUGFnZVBvaW50KSxjPWkucG9pbnQsdT1zLmdldEZyYW1lRGF0YSgpLnRpbWVzdGFtcDt0aGlzLmhpc3Rvcnk9W3IuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxjKSx7dGltZXN0YW1wOnV9KV07dmFyIGQ9dC5vblNlc3Npb25TdGFydDtkJiZkKGUsY24oaSx0aGlzLmhpc3RvcnkpKSx0aGlzLnJlbW92ZUxpc3RlbmVycz1sLnBpcGUobnQod2luZG93LFwicG9pbnRlcm1vdmVcIix0aGlzLmhhbmRsZVBvaW50ZXJNb3ZlKSxudCh3aW5kb3csXCJwb2ludGVydXBcIix0aGlzLmhhbmRsZVBvaW50ZXJVcCksbnQod2luZG93LFwicG9pbnRlcmNhbmNlbFwiLHRoaXMuaGFuZGxlUG9pbnRlclVwKSl9fXJldHVybiBlLnByb3RvdHlwZS51cGRhdGVIYW5kbGVycz1mdW5jdGlvbihlKXt0aGlzLmhhbmRsZXJzPWV9LGUucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3RoaXMucmVtb3ZlTGlzdGVuZXJzJiZ0aGlzLnJlbW92ZUxpc3RlbmVycygpLHMuY2FuY2VsU3luYy51cGRhdGUodGhpcy51cGRhdGVQb2ludCl9LGV9KCk7ZnVuY3Rpb24gbG4oZSx0KXtyZXR1cm4gdD97cG9pbnQ6dChlLnBvaW50KX06ZX1mdW5jdGlvbiBzbihlLHQpe3JldHVybnt4OmUueC10LngseTplLnktdC55fX1mdW5jdGlvbiBjbihlLHQpe3ZhciBuPWUucG9pbnQ7cmV0dXJue3BvaW50Om4sZGVsdGE6c24obixkbih0KSksb2Zmc2V0OnNuKG4sdW4odCkpLHZlbG9jaXR5OnBuKHQsLjEpfX1mdW5jdGlvbiB1bihlKXtyZXR1cm4gZVswXX1mdW5jdGlvbiBkbihlKXtyZXR1cm4gZVtlLmxlbmd0aC0xXX1mdW5jdGlvbiBwbihlLHQpe2lmKGUubGVuZ3RoPDIpcmV0dXJue3g6MCx5OjB9O2Zvcih2YXIgbj1lLmxlbmd0aC0xLHI9bnVsbCxvPWRuKGUpO24+PTAmJihyPWVbbl0sIShvLnRpbWVzdGFtcC1yLnRpbWVzdGFtcD5ndCh0KSkpOyluLS07aWYoIXIpcmV0dXJue3g6MCx5OjB9O3ZhciBhPShvLnRpbWVzdGFtcC1yLnRpbWVzdGFtcCkvMWUzO2lmKDA9PT1hKXJldHVybnt4OjAseTowfTt2YXIgaT17eDooby54LXIueCkvYSx5OihvLnktci55KS9hfTtyZXR1cm4gaS54PT09MS8wJiYoaS54PTApLGkueT09PTEvMCYmKGkueT0wKSxpfWZ1bmN0aW9uIGZuKGUpe3JldHVybiBlfWZ1bmN0aW9uIGhuKGUpe3ZhciB0PWUudG9wO3JldHVybnt4OnttaW46ZS5sZWZ0LG1heDplLnJpZ2h0fSx5OnttaW46dCxtYXg6ZS5ib3R0b219fX12YXIgZ249e3RyYW5zbGF0ZTowLHNjYWxlOjEsb3JpZ2luOjAsb3JpZ2luUG9pbnQ6MH07ZnVuY3Rpb24gdm4oKXtyZXR1cm57eDpyLl9fYXNzaWduKHt9LGduKSx5OnIuX19hc3NpZ24oe30sZ24pfX1mdW5jdGlvbiBDbihlKXtyZXR1cm5bZShcInhcIiksZShcInlcIildfWZ1bmN0aW9uIG1uKGUsdCxuKXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09biYmKG49LjAxKSxsLmRpc3RhbmNlKGUsdCk8bn1mdW5jdGlvbiB3bihlKXtyZXR1cm4gZS5tYXgtZS5taW59ZnVuY3Rpb24gYm4oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9LjUpLGUub3JpZ2luPXIsZS5vcmlnaW5Qb2ludD1sLm1peCh0Lm1pbix0Lm1heCxlLm9yaWdpbiksZS5zY2FsZT13bihuKS93bih0KSxtbihlLnNjYWxlLDEsMWUtNCkmJihlLnNjYWxlPTEpLGUudHJhbnNsYXRlPWwubWl4KG4ubWluLG4ubWF4LGUub3JpZ2luKS1lLm9yaWdpblBvaW50LG1uKGUudHJhbnNsYXRlKSYmKGUudHJhbnNsYXRlPTApfWZ1bmN0aW9uIHluKGUsdCxuLHIpe2JuKGUueCx0Lngsbi54LHhuKHIub3JpZ2luWCkpLGJuKGUueSx0Lnksbi55LHhuKHIub3JpZ2luWSkpfWZ1bmN0aW9uIHhuKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlP2U6LjV9ZnVuY3Rpb24ga24oZSx0LG4pe2UubWluPW4ubWluK3QubWluLGUubWF4PWUubWluK3duKHQpfWZ1bmN0aW9uIFNuKGUsdCxuKXt2YXIgcj10Lm1pbixvPXQubWF4O3JldHVybiB2b2lkIDAhPT1yJiZlPHI/ZT1uP2wubWl4KHIsZSxuLm1pbik6TWF0aC5tYXgoZSxyKTp2b2lkIDAhPT1vJiZlPm8mJihlPW4/bC5taXgobyxlLG4ubWF4KTpNYXRoLm1pbihlLG8pKSxlfWZ1bmN0aW9uIE9uKGUsdCxuKXtyZXR1cm57bWluOnZvaWQgMCE9PXQ/ZS5taW4rdDp2b2lkIDAsbWF4OnZvaWQgMCE9PW4/ZS5tYXgrbi0oZS5tYXgtZS5taW4pOnZvaWQgMH19ZnVuY3Rpb24gTW4oZSx0KXt2YXIgbixvPXQubWluLWUubWluLGE9dC5tYXgtZS5tYXg7cmV0dXJuIHQubWF4LXQubWluPGUubWF4LWUubWluJiYobz0obj1yLl9fcmVhZChbYSxvXSwyKSlbMF0sYT1uWzFdKSx7bWluOmUubWluK28sbWF4OmUubWluK2F9fWZ1bmN0aW9uIExuKGUsdCxuKXtyZXR1cm57bWluOl9uKGUsdCksbWF4Ol9uKGUsbil9fWZ1bmN0aW9uIF9uKGUsdCl7dmFyIG47cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGU/ZTpudWxsIT09KG49ZVt0XSkmJnZvaWQgMCE9PW4/bjowfWZ1bmN0aW9uIFBuKGUsdCl7cmV0dXJuIGhuKGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS50b3Ascj1lLmxlZnQsbz1lLmJvdHRvbSxhPWUucmlnaHQ7dm9pZCAwPT09dCYmKHQ9Zm4pO3ZhciBpPXQoe3g6cix5Om59KSxsPXQoe3g6YSx5Om99KTtyZXR1cm57dG9wOmkueSxsZWZ0OmkueCxib3R0b206bC55LHJpZ2h0OmwueH19KGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdCkpfXZhciBFbj1mdW5jdGlvbihlLHQpe3JldHVybiBlLmRlcHRoLXQuZGVwdGh9O2Z1bmN0aW9uIGpuKGUpe3JldHVybiBlLnByb2plY3Rpb24uaXNFbmFibGVkfHxlLnNob3VsZFJlc2V0VHJhbnNmb3JtKCl9ZnVuY3Rpb24gUm4oZSx0KXt2b2lkIDA9PT10JiYodD1bXSk7dmFyIG49ZS5wYXJlbnQ7cmV0dXJuIG4mJlJuKG4sdCksam4oZSkmJnQucHVzaChlKSx0fWZ1bmN0aW9uIEluKGUpe2lmKCFlLnNob3VsZFJlc2V0VHJhbnNmb3JtKCkpe3ZhciB0LG49ZS5nZXRMYXlvdXRTdGF0ZSgpO2Uubm90aWZ5QmVmb3JlTGF5b3V0TWVhc3VyZShuLmxheW91dCksbi5pc0h5ZHJhdGVkPSEwLG4ubGF5b3V0PWUubWVhc3VyZVZpZXdwb3J0Qm94KCksbi5sYXlvdXRDb3JyZWN0ZWQ9KHQ9bi5sYXlvdXQse3g6ci5fX2Fzc2lnbih7fSx0LngpLHk6ci5fX2Fzc2lnbih7fSx0LnkpfSksZS5ub3RpZnlMYXlvdXRNZWFzdXJlKG4ubGF5b3V0LGUucHJldlZpZXdwb3J0Qm94fHxuLmxheW91dCkscC5kZWZhdWx0LnVwZGF0ZSgoZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWJhc2VQcm9qZWN0aW9uVGFyZ2V0KCl9KSl9fWZ1bmN0aW9uIFZuKGUpe2Uuc2hvdWxkUmVzZXRUcmFuc2Zvcm0oKXx8KGUucHJldlZpZXdwb3J0Qm94PWUubWVhc3VyZVZpZXdwb3J0Qm94KCExKSxlLnJlYmFzZVByb2plY3Rpb25UYXJnZXQoITEsZS5wcmV2Vmlld3BvcnRCb3gpKX1mdW5jdGlvbiBIbihlLHQpe3JldHVybnttaW46dC5taW4tZS5taW4sbWF4OnQubWF4LWUubWlufX1mdW5jdGlvbiBBbihlLHQpe3JldHVybnt4OkhuKGUueCx0LngpLHk6SG4oZS55LHQueSl9fWZ1bmN0aW9uIFRuKGUpe3ZhciB0PWUuZ2V0UHJvcHMoKSxuPXQuZHJhZyxyPXQuX2RyYWdYO3JldHVybiBuJiYhcn1mdW5jdGlvbiBEbihlLHQpe2UubWluPXQubWluLGUubWF4PXQubWF4fWZ1bmN0aW9uIEJuKGUsdCxuKXtyZXR1cm4gbit0KihlLW4pfWZ1bmN0aW9uIFpuKGUsdCxuLHIsbyl7cmV0dXJuIHZvaWQgMCE9PW8mJihlPUJuKGUsbyxyKSksQm4oZSxuLHIpK3R9ZnVuY3Rpb24gJG4oZSx0LG4scixvKXt2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1uJiYobj0xKSxlLm1pbj1abihlLm1pbix0LG4scixvKSxlLm1heD1abihlLm1heCx0LG4scixvKX1mdW5jdGlvbiBObihlLHQpe3ZhciBuPXQueCxyPXQueTskbihlLngsbi50cmFuc2xhdGUsbi5zY2FsZSxuLm9yaWdpblBvaW50KSwkbihlLnksci50cmFuc2xhdGUsci5zY2FsZSxyLm9yaWdpblBvaW50KX1mdW5jdGlvbiBGbihlLHQsbixvKXt2YXIgYT1yLl9fcmVhZChvLDMpLGk9YVswXSxzPWFbMV0sYz1hWzJdO2UubWluPXQubWluLGUubWF4PXQubWF4O3ZhciB1PXZvaWQgMCE9PW5bY10/bltjXTouNSxkPWwubWl4KHQubWluLHQubWF4LHUpOyRuKGUsbltpXSxuW3NdLGQsbi5zY2FsZSl9dmFyIFduPVtcInhcIixcInNjYWxlWFwiLFwib3JpZ2luWFwiXSxVbj1bXCJ5XCIsXCJzY2FsZVlcIixcIm9yaWdpbllcIl07ZnVuY3Rpb24gem4oZSx0LG4pe0ZuKGUueCx0LngsbixXbiksRm4oZS55LHQueSxuLFVuKX1mdW5jdGlvbiBHbihlLHQsbixyLG8pe3JldHVybiBlPUJuKGUtPXQsMS9uLHIpLHZvaWQgMCE9PW8mJihlPUJuKGUsMS9vLHIpKSxlfWZ1bmN0aW9uIEtuKGUsdCxuKXt2YXIgbz1yLl9fcmVhZChuLDMpLGE9b1swXSxpPW9bMV0scz1vWzJdOyFmdW5jdGlvbihlLHQsbixyLG8pe3ZvaWQgMD09PXQmJih0PTApLHZvaWQgMD09PW4mJihuPTEpLHZvaWQgMD09PXImJihyPS41KTt2YXIgYT1sLm1peChlLm1pbixlLm1heCxyKS10O2UubWluPUduKGUubWluLHQsbixhLG8pLGUubWF4PUduKGUubWF4LHQsbixhLG8pfShlLHRbYV0sdFtpXSx0W3NdLHQuc2NhbGUpfWZ1bmN0aW9uIHFuKGUsdCl7S24oZS54LHQsV24pLEtuKGUueSx0LFVuKX12YXIgWW49bmV3IFNldDtmdW5jdGlvbiBKbihlLHQsbil7ZVtuXXx8KGVbbl09W10pLGVbbl0ucHVzaCh0KX1mdW5jdGlvbiBYbihlKXtyZXR1cm4gWW4uYWRkKGUpLGZ1bmN0aW9uKCl7cmV0dXJuIFluLmRlbGV0ZShlKX19ZnVuY3Rpb24gUW4oKXtpZihZbi5zaXplKXt2YXIgZT0wLHQ9W1tdXSxuPVtdLHI9ZnVuY3Rpb24obil7cmV0dXJuIEpuKHQsbixlKX0sbz1mdW5jdGlvbih0KXtKbihuLHQsZSksZSsrfTtZbi5mb3JFYWNoKChmdW5jdGlvbih0KXt0KHIsbyksZT0wfSkpLFluLmNsZWFyKCk7Zm9yKHZhciBhPW4ubGVuZ3RoLGk9MDtpPD1hO2krKyl0W2ldJiZ0W2ldLmZvckVhY2godHIpLG5baV0mJm5baV0uZm9yRWFjaCh0cil9fXZhciBlcix0cj1mdW5jdGlvbihlKXtyZXR1cm4gZSgpfSxucj1uZXcgV2Vha01hcCxycj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dmFyIHQ9ZS52aXN1YWxFbGVtZW50O3RoaXMuaXNEcmFnZ2luZz0hMSx0aGlzLmN1cnJlbnREaXJlY3Rpb249bnVsbCx0aGlzLmNvbnN0cmFpbnRzPSExLHRoaXMuZWxhc3RpYz17eDp7bWluOjAsbWF4OjF9LHk6e21pbjowLG1heDoxfX0sdGhpcy5wcm9wcz17fSx0aGlzLmhhc011dGF0ZWRDb25zdHJhaW50cz0hMSx0aGlzLmN1cnNvclByb2dyZXNzPXt4Oi41LHk6LjV9LHRoaXMub3JpZ2luUG9pbnQ9e30sdGhpcy5vcGVuR2xvYmFsTG9jaz1udWxsLHRoaXMucGFuU2Vzc2lvbj1udWxsLHRoaXMudmlzdWFsRWxlbWVudD10LHRoaXMudmlzdWFsRWxlbWVudC5lbmFibGVMYXlvdXRQcm9qZWN0aW9uKCksbnIuc2V0KHQsdGhpcyl9cmV0dXJuIGUucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxvPXZvaWQgMD09PXQ/e306dCxhPW8uc25hcFRvQ3Vyc29yLGk9dm9pZCAwIT09YSYmYSxjPW8uY3Vyc29yUHJvZ3Jlc3MsdT10aGlzLnByb3BzLnRyYW5zZm9ybVBhZ2VQb2ludDt0aGlzLnBhblNlc3Npb249bmV3IGFuKGUse29uU2Vzc2lvblN0YXJ0OmZ1bmN0aW9uKGUpe3ZhciB0O24uc3RvcE1vdGlvbigpO3ZhciBvPWZ1bmN0aW9uKGUpe3JldHVybiBLZShlLFwiY2xpZW50XCIpfShlKS5wb2ludDtudWxsPT09KHQ9bi5jYW5jZWxMYXlvdXQpfHx2b2lkIDA9PT10fHx0LmNhbGwobiksbi5jYW5jZWxMYXlvdXQ9WG4oKGZ1bmN0aW9uKGUsdCl7dmFyIGE9Um4obi52aXN1YWxFbGVtZW50KSx1PWZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49ZnVuY3Rpb24oZSl7am4oZSkmJnQucHVzaChlKSxlLmNoaWxkcmVuLmZvckVhY2gobil9O3JldHVybiBlLmNoaWxkcmVuLmZvckVhY2gobiksdC5zb3J0KEVuKX0obi52aXN1YWxFbGVtZW50KSxkPXIuX19zcHJlYWRBcnJheShyLl9fc3ByZWFkQXJyYXkoW10sci5fX3JlYWQoYSkpLHIuX19yZWFkKHUpKSxwPSExO24uaXNMYXlvdXREcmFnKCkmJm4udmlzdWFsRWxlbWVudC5sb2NrUHJvamVjdGlvblRhcmdldCgpLHQoKGZ1bmN0aW9uKCl7ZC5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXNldFRyYW5zZm9ybSgpfSkpfSkpLGUoKGZ1bmN0aW9uKCl7SW4obi52aXN1YWxFbGVtZW50KSx1LmZvckVhY2goSW4pfSkpLHQoKGZ1bmN0aW9uKCl7ZC5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXN0b3JlVHJhbnNmb3JtKCl9KSksaSYmKHA9bi5zbmFwVG9DdXJzb3IobykpfSkpLGUoKGZ1bmN0aW9uKCl7Qm9vbGVhbihuLmdldEF4aXNNb3Rpb25WYWx1ZShcInhcIikmJiFuLmlzRXh0ZXJuYWxEcmFnKCkpfHxuLnZpc3VhbEVsZW1lbnQucmViYXNlUHJvamVjdGlvblRhcmdldCghMCxuLnZpc3VhbEVsZW1lbnQubWVhc3VyZVZpZXdwb3J0Qm94KCExKSksbi52aXN1YWxFbGVtZW50LnNjaGVkdWxlVXBkYXRlTGF5b3V0UHJvamVjdGlvbigpO3ZhciBlPW4udmlzdWFsRWxlbWVudC5wcm9qZWN0aW9uO0NuKChmdW5jdGlvbih0KXtpZighcCl7dmFyIHI9ZS50YXJnZXRbdF0sYT1yLm1pbixpPXIubWF4O24uY3Vyc29yUHJvZ3Jlc3NbdF09Yz9jW3RdOmwucHJvZ3Jlc3MoYSxpLG9bdF0pfXZhciBzPW4uZ2V0QXhpc01vdGlvblZhbHVlKHQpO3MmJihuLm9yaWdpblBvaW50W3RdPXMuZ2V0KCkpfSkpfSkpLHQoKGZ1bmN0aW9uKCl7cy5mbHVzaFN5bmMudXBkYXRlKCkscy5mbHVzaFN5bmMucHJlUmVuZGVyKCkscy5mbHVzaFN5bmMucmVuZGVyKCkscy5mbHVzaFN5bmMucG9zdFJlbmRlcigpfSkpLGUoKGZ1bmN0aW9uKCl7cmV0dXJuIG4ucmVzb2x2ZURyYWdDb25zdHJhaW50cygpfSkpfSkpfSxvblN0YXJ0OmZ1bmN0aW9uKGUsdCl7dmFyIHIsbyxhLGk9bi5wcm9wcyxsPWkuZHJhZyxzPWkuZHJhZ1Byb3BhZ2F0aW9uOyghbHx8c3x8KG4ub3Blbkdsb2JhbExvY2smJm4ub3Blbkdsb2JhbExvY2soKSxuLm9wZW5HbG9iYWxMb2NrPWx0KGwpLG4ub3Blbkdsb2JhbExvY2spKSYmKFFuKCksbi5pc0RyYWdnaW5nPSEwLG4uY3VycmVudERpcmVjdGlvbj1udWxsLG51bGw9PT0obz0ocj1uLnByb3BzKS5vbkRyYWdTdGFydCl8fHZvaWQgMD09PW98fG8uY2FsbChyLGUsdCksbnVsbD09PShhPW4udmlzdWFsRWxlbWVudC5hbmltYXRpb25TdGF0ZSl8fHZvaWQgMD09PWF8fGEuc2V0QWN0aXZlKFRlLkRyYWcsITApKX0sb25Nb3ZlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbyxhLGksbD1uLnByb3BzLHM9bC5kcmFnUHJvcGFnYXRpb24sYz1sLmRyYWdEaXJlY3Rpb25Mb2NrO2lmKHN8fG4ub3Blbkdsb2JhbExvY2spe3ZhciB1PXQub2Zmc2V0O2lmKGMmJm51bGw9PT1uLmN1cnJlbnREaXJlY3Rpb24pcmV0dXJuIG4uY3VycmVudERpcmVjdGlvbj1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PTEwKTt2YXIgbj1udWxsO3JldHVybiBNYXRoLmFicyhlLnkpPnQ/bj1cInlcIjpNYXRoLmFicyhlLngpPnQmJihuPVwieFwiKSxufSh1KSx2b2lkKG51bGwhPT1uLmN1cnJlbnREaXJlY3Rpb24mJihudWxsPT09KG89KHI9bi5wcm9wcykub25EaXJlY3Rpb25Mb2NrKXx8dm9pZCAwPT09b3x8by5jYWxsKHIsbi5jdXJyZW50RGlyZWN0aW9uKSkpO24udXBkYXRlQXhpcyhcInhcIix0LnBvaW50LHUpLG4udXBkYXRlQXhpcyhcInlcIix0LnBvaW50LHUpLG51bGw9PT0oaT0oYT1uLnByb3BzKS5vbkRyYWcpfHx2b2lkIDA9PT1pfHxpLmNhbGwoYSxlLHQpLGVyPWV9fSxvblNlc3Npb25FbmQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5zdG9wKGUsdCl9fSx7dHJhbnNmb3JtUGFnZVBvaW50OnV9KX0sZS5wcm90b3R5cGUucmVzb2x2ZURyYWdDb25zdHJhaW50cz1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnByb3BzLG49dC5kcmFnQ29uc3RyYWludHMscj10LmRyYWdFbGFzdGljLG89dGhpcy52aXN1YWxFbGVtZW50LmdldExheW91dFN0YXRlKCkubGF5b3V0Q29ycmVjdGVkO3RoaXMuY29uc3RyYWludHM9ISFuJiYoUihuKT90aGlzLnJlc29sdmVSZWZDb25zdHJhaW50cyhvLG4pOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC50b3Ascj10LmxlZnQsbz10LmJvdHRvbSxhPXQucmlnaHQ7cmV0dXJue3g6T24oZS54LHIsYSkseTpPbihlLnksbixvKX19KG8sbikpLHRoaXMuZWxhc3RpYz1mdW5jdGlvbihlKXtyZXR1cm4hMT09PWU/ZT0wOiEwPT09ZSYmKGU9LjM1KSx7eDpMbihlLFwibGVmdFwiLFwicmlnaHRcIikseTpMbihlLFwidG9wXCIsXCJib3R0b21cIil9fShyKSx0aGlzLmNvbnN0cmFpbnRzJiYhdGhpcy5oYXNNdXRhdGVkQ29uc3RyYWludHMmJkNuKChmdW5jdGlvbih0KXtlLmdldEF4aXNNb3Rpb25WYWx1ZSh0KSYmKGUuY29uc3RyYWludHNbdF09ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtyZXR1cm4gdm9pZCAwIT09dC5taW4mJihuLm1pbj10Lm1pbi1lLm1pbiksdm9pZCAwIT09dC5tYXgmJihuLm1heD10Lm1heC1lLm1pbiksbn0ob1t0XSxlLmNvbnN0cmFpbnRzW3RdKSl9KSl9LGUucHJvdG90eXBlLnJlc29sdmVSZWZDb25zdHJhaW50cz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMucHJvcHMscj1uLm9uTWVhc3VyZURyYWdDb25zdHJhaW50cyxvPW4udHJhbnNmb3JtUGFnZVBvaW50LGk9dC5jdXJyZW50O2EuaW52YXJpYW50KG51bGwhPT1pLFwiSWYgYGRyYWdDb25zdHJhaW50c2AgaXMgc2V0IGFzIGEgUmVhY3QgcmVmLCB0aGF0IHJlZiBtdXN0IGJlIHBhc3NlZCB0byBhbm90aGVyIGNvbXBvbmVudCdzIGByZWZgIHByb3AuXCIpLHRoaXMuY29uc3RyYWludHNCb3g9UG4oaSxvKTt2YXIgbD1mdW5jdGlvbihlLHQpe3JldHVybnt4Ok1uKGUueCx0LngpLHk6TW4oZS55LHQueSl9fShlLHRoaXMuY29uc3RyYWludHNCb3gpO2lmKHIpe3ZhciBzPXIoZnVuY3Rpb24oZSl7dmFyIHQ9ZS54LG49ZS55O3JldHVybnt0b3A6bi5taW4sYm90dG9tOm4ubWF4LGxlZnQ6dC5taW4scmlnaHQ6dC5tYXh9fShsKSk7dGhpcy5oYXNNdXRhdGVkQ29uc3RyYWludHM9ISFzLHMmJihsPWhuKHMpKX1yZXR1cm4gbH0sZS5wcm90b3R5cGUuY2FuY2VsRHJhZz1mdW5jdGlvbigpe3ZhciBlLHQ7dGhpcy52aXN1YWxFbGVtZW50LnVubG9ja1Byb2plY3Rpb25UYXJnZXQoKSxudWxsPT09KGU9dGhpcy5jYW5jZWxMYXlvdXQpfHx2b2lkIDA9PT1lfHxlLmNhbGwodGhpcyksdGhpcy5pc0RyYWdnaW5nPSExLHRoaXMucGFuU2Vzc2lvbiYmdGhpcy5wYW5TZXNzaW9uLmVuZCgpLHRoaXMucGFuU2Vzc2lvbj1udWxsLCF0aGlzLnByb3BzLmRyYWdQcm9wYWdhdGlvbiYmdGhpcy5vcGVuR2xvYmFsTG9jayYmKHRoaXMub3Blbkdsb2JhbExvY2soKSx0aGlzLm9wZW5HbG9iYWxMb2NrPW51bGwpLG51bGw9PT0odD10aGlzLnZpc3VhbEVsZW1lbnQuYW5pbWF0aW9uU3RhdGUpfHx2b2lkIDA9PT10fHx0LnNldEFjdGl2ZShUZS5EcmFnLCExKX0sZS5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbihlLHQpe3ZhciBuLHIsbztudWxsPT09KG49dGhpcy5wYW5TZXNzaW9uKXx8dm9pZCAwPT09bnx8bi5lbmQoKSx0aGlzLnBhblNlc3Npb249bnVsbDt2YXIgYT10aGlzLmlzRHJhZ2dpbmc7aWYodGhpcy5jYW5jZWxEcmFnKCksYSl7dmFyIGk9dC52ZWxvY2l0eTt0aGlzLmFuaW1hdGVEcmFnRW5kKGkpLG51bGw9PT0obz0ocj10aGlzLnByb3BzKS5vbkRyYWdFbmQpfHx2b2lkIDA9PT1vfHxvLmNhbGwocixlLHQpfX0sZS5wcm90b3R5cGUuc25hcFRvQ3Vyc29yPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIENuKChmdW5jdGlvbihuKXtpZihvcihuLHQucHJvcHMuZHJhZyx0LmN1cnJlbnREaXJlY3Rpb24pKXt2YXIgcj10LmdldEF4aXNNb3Rpb25WYWx1ZShuKTtpZighcilyZXR1cm4gdC5jdXJzb3JQcm9ncmVzc1tuXT0uNSwhMDt2YXIgbz10LnZpc3VhbEVsZW1lbnQuZ2V0TGF5b3V0U3RhdGUoKS5sYXlvdXQsYT1vW25dLm1heC1vW25dLm1pbixpPW9bbl0ubWluK2EvMixsPWVbbl0taTt0Lm9yaWdpblBvaW50W25dPWVbbl0sci5zZXQobCl9fSkpLmluY2x1ZGVzKCEwKX0sZS5wcm90b3R5cGUudXBkYXRlQXhpcz1mdW5jdGlvbihlLHQsbil7aWYob3IoZSx0aGlzLnByb3BzLmRyYWcsdGhpcy5jdXJyZW50RGlyZWN0aW9uKSlyZXR1cm4gdGhpcy5nZXRBeGlzTW90aW9uVmFsdWUoZSk/dGhpcy51cGRhdGVBeGlzTW90aW9uVmFsdWUoZSxuKTp0aGlzLnVwZGF0ZVZpc3VhbEVsZW1lbnRBeGlzKGUsdCl9LGUucHJvdG90eXBlLnVwZGF0ZUF4aXNNb3Rpb25WYWx1ZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZ2V0QXhpc01vdGlvblZhbHVlKGUpO2lmKHQmJm4pe3ZhciByPXRoaXMub3JpZ2luUG9pbnRbZV0rdFtlXSxvPXRoaXMuY29uc3RyYWludHM/U24ocix0aGlzLmNvbnN0cmFpbnRzW2VdLHRoaXMuZWxhc3RpY1tlXSk6cjtuLnNldChvKX19LGUucHJvdG90eXBlLnVwZGF0ZVZpc3VhbEVsZW1lbnRBeGlzPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj10aGlzLnZpc3VhbEVsZW1lbnQuZ2V0TGF5b3V0U3RhdGUoKS5sYXlvdXRbZV0sbz1yLm1heC1yLm1pbixhPXRoaXMuY3Vyc29yUHJvZ3Jlc3NbZV0saT1mdW5jdGlvbihlLHQsbixyLG8pe3ZhciBhPWUtdCpuO3JldHVybiByP1NuKGEscixvKTphfSh0W2VdLG8sYSxudWxsPT09KG49dGhpcy5jb25zdHJhaW50cyl8fHZvaWQgMD09PW4/dm9pZCAwOm5bZV0sdGhpcy5lbGFzdGljW2VdKTt0aGlzLnZpc3VhbEVsZW1lbnQuc2V0UHJvamVjdGlvblRhcmdldEF4aXMoZSxpLGkrbyl9LGUucHJvdG90eXBlLnNldFByb3BzPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZHJhZyxuPXZvaWQgMCE9PXQmJnQsbz1lLmRyYWdEaXJlY3Rpb25Mb2NrLGE9dm9pZCAwIT09byYmbyxpPWUuZHJhZ1Byb3BhZ2F0aW9uLGw9dm9pZCAwIT09aSYmaSxzPWUuZHJhZ0NvbnN0cmFpbnRzLGM9dm9pZCAwIT09cyYmcyx1PWUuZHJhZ0VsYXN0aWMsZD12b2lkIDA9PT11Py4zNTp1LHA9ZS5kcmFnTW9tZW50dW0sZj12b2lkIDA9PT1wfHxwLGg9ci5fX3Jlc3QoZSxbXCJkcmFnXCIsXCJkcmFnRGlyZWN0aW9uTG9ja1wiLFwiZHJhZ1Byb3BhZ2F0aW9uXCIsXCJkcmFnQ29uc3RyYWludHNcIixcImRyYWdFbGFzdGljXCIsXCJkcmFnTW9tZW50dW1cIl0pO3RoaXMucHJvcHM9ci5fX2Fzc2lnbih7ZHJhZzpuLGRyYWdEaXJlY3Rpb25Mb2NrOmEsZHJhZ1Byb3BhZ2F0aW9uOmwsZHJhZ0NvbnN0cmFpbnRzOmMsZHJhZ0VsYXN0aWM6ZCxkcmFnTW9tZW50dW06Zn0saCl9LGUucHJvdG90eXBlLmdldEF4aXNNb3Rpb25WYWx1ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnByb3BzLG49dC5sYXlvdXQscj10LmxheW91dElkLG89XCJfZHJhZ1wiK2UudG9VcHBlckNhc2UoKTtyZXR1cm4gdGhpcy5wcm9wc1tvXT90aGlzLnByb3BzW29dOm58fHZvaWQgMCE9PXI/dm9pZCAwOnRoaXMudmlzdWFsRWxlbWVudC5nZXRWYWx1ZShlLDApfSxlLnByb3RvdHlwZS5pc0xheW91dERyYWc9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5nZXRBeGlzTW90aW9uVmFsdWUoXCJ4XCIpfSxlLnByb3RvdHlwZS5pc0V4dGVybmFsRHJhZz1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLl9kcmFnWCxuPWUuX2RyYWdZO3JldHVybiB0fHxufSxlLnByb3RvdHlwZS5hbmltYXRlRHJhZ0VuZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dGhpcy5wcm9wcyxvPW4uZHJhZyxhPW4uZHJhZ01vbWVudHVtLGk9bi5kcmFnRWxhc3RpYyxsPW4uZHJhZ1RyYW5zaXRpb24scz1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PSEwKTt2YXIgbixyPWUuZ2V0UHJvamVjdGlvblBhcmVudCgpO3JldHVybiEhciYmKHQ/cW4obj1BbihyLnByb2plY3Rpb24udGFyZ2V0LGUucHJvamVjdGlvbi50YXJnZXQpLHIuZ2V0TGF0ZXN0VmFsdWVzKCkpOm49QW4oci5nZXRMYXlvdXRTdGF0ZSgpLmxheW91dCxlLmdldExheW91dFN0YXRlKCkubGF5b3V0KSxDbigoZnVuY3Rpb24odCl7cmV0dXJuIGUuc2V0UHJvamVjdGlvblRhcmdldEF4aXModCxuW3RdLm1pbixuW3RdLm1heCwhMCl9KSksITApfSh0aGlzLnZpc3VhbEVsZW1lbnQsdGhpcy5pc0xheW91dERyYWcoKSYmIXRoaXMuaXNFeHRlcm5hbERyYWcoKSksYz10aGlzLmNvbnN0cmFpbnRzfHx7fTtpZihzJiZPYmplY3Qua2V5cyhjKS5sZW5ndGgmJnRoaXMuaXNMYXlvdXREcmFnKCkpe3ZhciB1PXRoaXMudmlzdWFsRWxlbWVudC5nZXRQcm9qZWN0aW9uUGFyZW50KCk7aWYodSl7dmFyIGQ9QW4odS5wcm9qZWN0aW9uLnRhcmdldEZpbmFsLGMpO0NuKChmdW5jdGlvbihlKXt2YXIgdD1kW2VdLG49dC5taW4scj10Lm1heDtjW2VdPXttaW46aXNOYU4obik/dm9pZCAwOm4sbWF4OmlzTmFOKHIpP3ZvaWQgMDpyfX0pKX19dmFyIHA9Q24oKGZ1bmN0aW9uKG4pe3ZhciB1O2lmKG9yKG4sbyx0LmN1cnJlbnREaXJlY3Rpb24pKXt2YXIgZD1udWxsIT09KHU9bnVsbD09Yz92b2lkIDA6Y1tuXSkmJnZvaWQgMCE9PXU/dTp7fSxwPWk/MjAwOjFlNixmPWk/NDA6MWU3LGg9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt0eXBlOlwiaW5lcnRpYVwiLHZlbG9jaXR5OmE/ZVtuXTowLGJvdW5jZVN0aWZmbmVzczpwLGJvdW5jZURhbXBpbmc6Zix0aW1lQ29uc3RhbnQ6NzUwLHJlc3REZWx0YToxLHJlc3RTcGVlZDoxMH0sbCksZCk7cmV0dXJuIHQuZ2V0QXhpc01vdGlvblZhbHVlKG4pP3Quc3RhcnRBeGlzVmFsdWVBbmltYXRpb24obixoKTp0LnZpc3VhbEVsZW1lbnQuc3RhcnRMYXlvdXRBbmltYXRpb24obixoLHMpfX0pKTtyZXR1cm4gUHJvbWlzZS5hbGwocCkudGhlbigoZnVuY3Rpb24oKXt2YXIgZSxuO251bGw9PT0obj0oZT10LnByb3BzKS5vbkRyYWdUcmFuc2l0aW9uRW5kKXx8dm9pZCAwPT09bnx8bi5jYWxsKGUpfSkpfSxlLnByb3RvdHlwZS5zdG9wTW90aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztDbigoZnVuY3Rpb24odCl7dmFyIG49ZS5nZXRBeGlzTW90aW9uVmFsdWUodCk7bj9uLnN0b3AoKTplLnZpc3VhbEVsZW1lbnQuc3RvcExheW91dEFuaW1hdGlvbigpfSkpfSxlLnByb3RvdHlwZS5zdGFydEF4aXNWYWx1ZUFuaW1hdGlvbj1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZ2V0QXhpc01vdGlvblZhbHVlKGUpO2lmKG4pe3ZhciByPW4uZ2V0KCk7cmV0dXJuIG4uc2V0KHIpLG4uc2V0KHIpLEl0KGUsbiwwLHQpfX0sZS5wcm90b3R5cGUuc2NhbGVQb2ludD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnByb3BzLG49dC5kcmFnO2lmKFIodC5kcmFnQ29uc3RyYWludHMpJiZ0aGlzLmNvbnN0cmFpbnRzQm94KXt0aGlzLnN0b3BNb3Rpb24oKTt2YXIgcj17eDowLHk6MH07Q24oKGZ1bmN0aW9uKHQpe3ZhciBuLG8sYSxpLHMsYztyW3RdPShuPWUudmlzdWFsRWxlbWVudC5wcm9qZWN0aW9uLnRhcmdldFt0XSxvPWUuY29uc3RyYWludHNCb3hbdF0saT0uNSxzPXduKG4pLChjPXduKG8pKT5zP2k9bC5wcm9ncmVzcyhvLm1pbixvLm1heC1zLG4ubWluKTpzPmMmJihpPWwucHJvZ3Jlc3Mobi5taW4sbi5tYXgtYyxvLm1pbikpLGE9aSxsLmNsYW1wKDAsMSxhKSl9KSksdGhpcy51cGRhdGVDb25zdHJhaW50cygoZnVuY3Rpb24oKXtDbigoZnVuY3Rpb24odCl7aWYob3IodCxuLG51bGwpKXt2YXIgbz1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5tYXgtZS5taW4sbz1sLm1peCh0Lm1pbix0Lm1heC1yLG4pO3JldHVybnttaW46byxtYXg6bytyfX0oZS52aXN1YWxFbGVtZW50LnByb2plY3Rpb24udGFyZ2V0W3RdLGUuY29uc3RyYWludHNCb3hbdF0sclt0XSksYT1vLm1pbixpPW8ubWF4O2UudmlzdWFsRWxlbWVudC5zZXRQcm9qZWN0aW9uVGFyZ2V0QXhpcyh0LGEsaSl9fSkpfSkpLHNldFRpbWVvdXQoUW4sMSl9fSxlLnByb3RvdHlwZS51cGRhdGVDb25zdHJhaW50cz1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMuY2FuY2VsTGF5b3V0PVhuKChmdW5jdGlvbihuLHIpe3ZhciBvPVJuKHQudmlzdWFsRWxlbWVudCk7cigoZnVuY3Rpb24oKXtyZXR1cm4gby5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXNldFRyYW5zZm9ybSgpfSkpfSkpLG4oKGZ1bmN0aW9uKCl7cmV0dXJuIEluKHQudmlzdWFsRWxlbWVudCl9KSkscigoZnVuY3Rpb24oKXtyZXR1cm4gby5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXN0b3JlVHJhbnNmb3JtKCl9KSl9KSksbigoZnVuY3Rpb24oKXt0LnJlc29sdmVEcmFnQ29uc3RyYWludHMoKX0pKSxlJiZyKGUpfSkpfSxlLnByb3RvdHlwZS5tb3VudD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49bnQoZS5nZXRJbnN0YW5jZSgpLFwicG9pbnRlcmRvd25cIiwoZnVuY3Rpb24oZSl7dmFyIG49dC5wcm9wcyxyPW4uZHJhZyxvPW4uZHJhZ0xpc3RlbmVyO3ImJih2b2lkIDA9PT1vfHxvKSYmdC5zdGFydChlKX0pKSxyPSRlKHdpbmRvdyxcInJlc2l6ZVwiLChmdW5jdGlvbigpe3Quc2NhbGVQb2ludCgpfSkpLG89ZS5vbkxheW91dFVwZGF0ZSgoZnVuY3Rpb24oKXt0LmlzRHJhZ2dpbmcmJnQucmVzb2x2ZURyYWdDb25zdHJhaW50cygpfSkpLGE9ZS5wcmV2RHJhZ0N1cnNvcjtyZXR1cm4gYSYmdGhpcy5zdGFydChlcix7Y3Vyc29yUHJvZ3Jlc3M6YX0pLGZ1bmN0aW9uKCl7bnVsbD09bnx8bigpLG51bGw9PXJ8fHIoKSxudWxsPT1vfHxvKCksdC5jYW5jZWxEcmFnKCl9fSxlfSgpO2Z1bmN0aW9uIG9yKGUsdCxuKXtyZXR1cm4hKCEwIT09dCYmdCE9PWV8fG51bGwhPT1uJiZuIT09ZSl9dmFyIGFyLGlyLGxyPXtwYW46cHQoKGZ1bmN0aW9uKGUpe3ZhciB0PWUub25QYW4sbj1lLm9uUGFuU3RhcnQscj1lLm9uUGFuRW5kLGE9ZS5vblBhblNlc3Npb25TdGFydCxpPWUudmlzdWFsRWxlbWVudCxsPXR8fG58fHJ8fGEscz1vLnVzZVJlZihudWxsKSxjPW8udXNlQ29udGV4dCh3KS50cmFuc2Zvcm1QYWdlUG9pbnQsdT17b25TZXNzaW9uU3RhcnQ6YSxvblN0YXJ0Om4sb25Nb3ZlOnQsb25FbmQ6ZnVuY3Rpb24oZSx0KXtzLmN1cnJlbnQ9bnVsbCxyJiZyKGUsdCl9fTtvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXtudWxsIT09cy5jdXJyZW50JiZzLmN1cnJlbnQudXBkYXRlSGFuZGxlcnModSl9KSkscnQoaSxcInBvaW50ZXJkb3duXCIsbCYmZnVuY3Rpb24oZSl7cy5jdXJyZW50PW5ldyBhbihlLHUse3RyYW5zZm9ybVBhZ2VQb2ludDpjfSl9KSxkdCgoZnVuY3Rpb24oKXtyZXR1cm4gcy5jdXJyZW50JiZzLmN1cnJlbnQuZW5kKCl9KSl9KSksZHJhZzpwdCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kcmFnQ29udHJvbHMsbj1lLnZpc3VhbEVsZW1lbnQsYT1vLnVzZUNvbnRleHQodykudHJhbnNmb3JtUGFnZVBvaW50LGk9aygoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHJyKHt2aXN1YWxFbGVtZW50Om59KX0pKTtpLnNldFByb3BzKHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxlKSx7dHJhbnNmb3JtUGFnZVBvaW50OmF9KSksby51c2VFZmZlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHQmJnQuc3Vic2NyaWJlKGkpfSksW2ldKSxvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gaS5tb3VudChuKX0pLFtdKX0pKX07ZnVuY3Rpb24gc3IoZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUmJmUuc3RhcnRzV2l0aChcInZhcigtLVwiKX0hZnVuY3Rpb24oZSl7ZVtlLkVudGVyaW5nPTBdPVwiRW50ZXJpbmdcIixlW2UuUHJlc2VudD0xXT1cIlByZXNlbnRcIixlW2UuRXhpdGluZz0yXT1cIkV4aXRpbmdcIn0oYXJ8fChhcj17fSkpLHQuVmlzaWJpbGl0eUFjdGlvbj12b2lkIDAsKGlyPXQuVmlzaWJpbGl0eUFjdGlvbnx8KHQuVmlzaWJpbGl0eUFjdGlvbj17fSkpW2lyLkhpZGU9MF09XCJIaWRlXCIsaXJbaXIuU2hvdz0xXT1cIlNob3dcIjt2YXIgY3I9L3ZhclxcKCgtLVthLXpBLVowLTktX10rKSw/ID8oW2EtekEtWjAtOSAoKSUjLiwtXSspP1xcKS87ZnVuY3Rpb24gdXIoZSx0LG4pe3ZvaWQgMD09PW4mJihuPTEpLGEuaW52YXJpYW50KG48PTQsJ01heCBDU1MgdmFyaWFibGUgZmFsbGJhY2sgZGVwdGggZGV0ZWN0ZWQgaW4gcHJvcGVydHkgXCInK2UrJ1wiLiBUaGlzIG1heSBpbmRpY2F0ZSBhIGNpcmN1bGFyIGZhbGxiYWNrIGRlcGVuZGVuY3kuJyk7dmFyIG89ci5fX3JlYWQoZnVuY3Rpb24oZSl7dmFyIHQ9Y3IuZXhlYyhlKTtpZighdClyZXR1cm5bLF07dmFyIG49ci5fX3JlYWQodCwzKTtyZXR1cm5bblsxXSxuWzJdXX0oZSksMiksaT1vWzBdLGw9b1sxXTtpZihpKXt2YXIgcz13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KS5nZXRQcm9wZXJ0eVZhbHVlKGkpO3JldHVybiBzP3MudHJpbSgpOnNyKGwpP3VyKGwsdCxuKzEpOmx9fWZ1bmN0aW9uIGRyKGUsdCl7cmV0dXJuIGUvKHQubWF4LXQubWluKSoxMDB9dmFyIHByPVwiXyRjc3NcIixmcj17cHJvY2VzczpmdW5jdGlvbihlLHQsbil7dmFyIHI9bi50YXJnZXQ7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpe2lmKCFpLnB4LnRlc3QoZSkpcmV0dXJuIGU7ZT1wYXJzZUZsb2F0KGUpfXJldHVybiBkcihlLHIueCkrXCIlIFwiK2RyKGUsci55KStcIiVcIn19LGhyPXtib3JkZXJSYWRpdXM6ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGZyKSx7YXBwbHlUbzpbXCJib3JkZXJUb3BMZWZ0UmFkaXVzXCIsXCJib3JkZXJUb3BSaWdodFJhZGl1c1wiLFwiYm9yZGVyQm90dG9tTGVmdFJhZGl1c1wiLFwiYm9yZGVyQm90dG9tUmlnaHRSYWRpdXNcIl19KSxib3JkZXJUb3BMZWZ0UmFkaXVzOmZyLGJvcmRlclRvcFJpZ2h0UmFkaXVzOmZyLGJvcmRlckJvdHRvbUxlZnRSYWRpdXM6ZnIsYm9yZGVyQm90dG9tUmlnaHRSYWRpdXM6ZnIsYm94U2hhZG93Ontwcm9jZXNzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5kZWx0YSxyPXQudHJlZVNjYWxlLG89ZSxhPWUuaW5jbHVkZXMoXCJ2YXIoXCIpLHM9W107YSYmKGU9ZS5yZXBsYWNlKGNyLChmdW5jdGlvbihlKXtyZXR1cm4gcy5wdXNoKGUpLHByfSkpKTt2YXIgYz1pLmNvbXBsZXgucGFyc2UoZSk7aWYoYy5sZW5ndGg+NSlyZXR1cm4gbzt2YXIgdT1pLmNvbXBsZXguY3JlYXRlVHJhbnNmb3JtZXIoZSksZD1cIm51bWJlclwiIT10eXBlb2YgY1swXT8xOjAscD1uLnguc2NhbGUqci54LGY9bi55LnNjYWxlKnIueTtjWzArZF0vPXAsY1sxK2RdLz1mO3ZhciBoPWwubWl4KHAsZiwuNSk7XCJudW1iZXJcIj09dHlwZW9mIGNbMitkXSYmKGNbMitkXS89aCksXCJudW1iZXJcIj09dHlwZW9mIGNbMytkXSYmKGNbMytkXS89aCk7dmFyIGc9dShjKTtpZihhKXt2YXIgdj0wO2c9Zy5yZXBsYWNlKHByLChmdW5jdGlvbigpe3ZhciBlPXNbdl07cmV0dXJuIHYrKyxlfSkpfXJldHVybiBnfX19LGdyPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXt2YXIgbj1udWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIG4uZnJhbWVUYXJnZXQ9e3g6e21pbjowLG1heDoxfSx5OnttaW46MCxtYXg6MX19LG4uY3VycmVudEFuaW1hdGlvblRhcmdldD17eDp7bWluOjAsbWF4OjF9LHk6e21pbjowLG1heDoxfX0sbi5pc0FuaW1hdGluZz17eDohMSx5OiExfSxuLnN0b3BBeGlzQW5pbWF0aW9uPXt4OnZvaWQgMCx5OnZvaWQgMH0sbi5pc0FuaW1hdGluZ1RyZWU9ITEsbi5hbmltYXRlPWZ1bmN0aW9uKGUsbyxhKXt2b2lkIDA9PT1hJiYoYT17fSk7dmFyIGk9YS5vcmlnaW5Cb3gsbD1hLnRhcmdldEJveCxzPWEudmlzaWJpbGl0eUFjdGlvbixjPWEuc2hvdWxkU3RhY2tBbmltYXRlLHU9YS5vbkNvbXBsZXRlLGQ9YS5wcmV2UGFyZW50LHA9ci5fX3Jlc3QoYSxbXCJvcmlnaW5Cb3hcIixcInRhcmdldEJveFwiLFwidmlzaWJpbGl0eUFjdGlvblwiLFwic2hvdWxkU3RhY2tBbmltYXRlXCIsXCJvbkNvbXBsZXRlXCIsXCJwcmV2UGFyZW50XCJdKSxmPW4ucHJvcHMsaD1mLnZpc3VhbEVsZW1lbnQsZz1mLmxheW91dDtpZighMT09PWMpcmV0dXJuIG4uaXNBbmltYXRpbmdUcmVlPSExLG4uc2FmZVRvUmVtb3ZlKCk7aWYoIW4uaXNBbmltYXRpbmdUcmVlfHwhMD09PWMpe2MmJihuLmlzQW5pbWF0aW5nVHJlZT0hMCksbz1pfHxvLGU9bHx8ZTt2YXIgdixDLG0sdz0hMSxiPWguZ2V0UHJvamVjdGlvblBhcmVudCgpO2lmKGIpe3ZhciB5PWIucHJldlZpZXdwb3J0Qm94LHg9Yi5nZXRMYXlvdXRTdGF0ZSgpLmxheW91dDtkJiYobCYmKHg9ZC5nZXRMYXlvdXRTdGF0ZSgpLmxheW91dCksaSYmKEM9Yiwodj1kKS5nZXRMYXlvdXRJZCgpPT09KG09Qy5nZXRMYXlvdXRJZCgpKSYmKHZvaWQgMCE9PW18fHY9PT1DKSkmJmQucHJldlZpZXdwb3J0Qm94JiYoeT1kLnByZXZWaWV3cG9ydEJveCkpLHkmJmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZXx8IWUmJiEodHx8bil9KGQsaSxsKSYmKHc9ITAsbz1Bbih5LG8pLGU9QW4oeCxlKSl9dmFyIGssUyxPPShTPWUsIShDcihrPW8pfHxDcihTKXx8bXIoay54LFMueCkmJm1yKGsueSxTLnkpKSksTT1DbigoZnVuY3Rpb24oYSl7dmFyIGksbDtpZihcInBvc2l0aW9uXCI9PT1nKXt2YXIgYz1lW2FdLm1heC1lW2FdLm1pbjtvW2FdLm1heD1vW2FdLm1pbitjfWlmKCFoLnByb2plY3Rpb24uaXNUYXJnZXRMb2NrZWQpcmV0dXJuIHZvaWQgMD09PXM/Tz9uLmFuaW1hdGVBeGlzKGEsZVthXSxvW2FdLHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxwKSx7aXNSZWxhdGl2ZTp3fSkpOihudWxsPT09KGw9KGk9bi5zdG9wQXhpc0FuaW1hdGlvbilbYV0pfHx2b2lkIDA9PT1sfHxsLmNhbGwoaSksaC5zZXRQcm9qZWN0aW9uVGFyZ2V0QXhpcyhhLGVbYV0ubWluLGVbYV0ubWF4LHcpKTp2b2lkIGguc2V0VmlzaWJpbGl0eShzPT09dC5WaXNpYmlsaXR5QWN0aW9uLlNob3cpfSkpO3JldHVybiBoLnN5bmNSZW5kZXIoKSxQcm9taXNlLmFsbChNKS50aGVuKChmdW5jdGlvbigpe24uaXNBbmltYXRpbmdUcmVlPSExLHUmJnUoKSxoLm5vdGlmeUxheW91dEFuaW1hdGlvbkNvbXBsZXRlKCl9KSl9fSxufXJldHVybiByLl9fZXh0ZW5kcyhuLGUpLG4ucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMudmlzdWFsRWxlbWVudDt0LmFuaW1hdGVNb3Rpb25WYWx1ZT1JdCx0LmVuYWJsZUxheW91dFByb2plY3Rpb24oKSx0aGlzLnVuc3ViTGF5b3V0UmVhZHk9dC5vbkxheW91dFVwZGF0ZSh0aGlzLmFuaW1hdGUpLHQubGF5b3V0U2FmZVRvUmVtb3ZlPWZ1bmN0aW9uKCl7cmV0dXJuIGUuc2FmZVRvUmVtb3ZlKCl9LFUoaHIpfSxuLnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy51bnN1YkxheW91dFJlYWR5KCksQ24oKGZ1bmN0aW9uKHQpe3ZhciBuLHI7cmV0dXJuIG51bGw9PT0ocj0obj1lLnN0b3BBeGlzQW5pbWF0aW9uKVt0XSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuY2FsbChuKX0pKX0sbi5wcm90b3R5cGUuYW5pbWF0ZUF4aXM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIG8sYSxpPXRoaXMscz12b2lkIDA9PT1yP3t9OnIsYz1zLnRyYW5zaXRpb24sdT1zLmlzUmVsYXRpdmU7aWYoIXRoaXMuaXNBbmltYXRpbmdbZV18fCFtcih0LHRoaXMuY3VycmVudEFuaW1hdGlvblRhcmdldFtlXSkpe251bGw9PT0oYT0obz10aGlzLnN0b3BBeGlzQW5pbWF0aW9uKVtlXSl8fHZvaWQgMD09PWF8fGEuY2FsbChvKSx0aGlzLmlzQW5pbWF0aW5nW2VdPSEwO3ZhciBkPXRoaXMucHJvcHMudmlzdWFsRWxlbWVudCxwPXRoaXMuZnJhbWVUYXJnZXRbZV0sZj1kLmdldFByb2plY3Rpb25BbmltYXRpb25Qcm9ncmVzcygpW2VdO2YuY2xlYXJMaXN0ZW5lcnMoKSxmLnNldCgwKSxmLnNldCgwKTt2YXIgaD1mdW5jdGlvbigpe3ZhciByPWYuZ2V0KCkvMWUzOyFmdW5jdGlvbihlLHQsbixyKXtlLm1pbj1sLm1peCh0Lm1pbixuLm1pbixyKSxlLm1heD1sLm1peCh0Lm1heCxuLm1heCxyKX0ocCxuLHQsciksZC5zZXRQcm9qZWN0aW9uVGFyZ2V0QXhpcyhlLHAubWluLHAubWF4LHUpfTtoKCk7dmFyIGc9Zi5vbkNoYW5nZShoKTt0aGlzLnN0b3BBeGlzQW5pbWF0aW9uW2VdPWZ1bmN0aW9uKCl7aS5pc0FuaW1hdGluZ1tlXT0hMSxmLnN0b3AoKSxnKCl9LHRoaXMuY3VycmVudEFuaW1hdGlvblRhcmdldFtlXT10O3ZhciB2PWN8fGQuZ2V0RGVmYXVsdFRyYW5zaXRpb24oKXx8d3I7cmV0dXJuIEl0KFwieFwiPT09ZT9cImxheW91dFhcIjpcImxheW91dFlcIixmLDFlMyx2JiZSdCh2LFwibGF5b3V0XCIpKS50aGVuKHRoaXMuc3RvcEF4aXNBbmltYXRpb25bZV0pfX0sbi5wcm90b3R5cGUuc2FmZVRvUmVtb3ZlPWZ1bmN0aW9uKCl7dmFyIGUsdDtudWxsPT09KHQ9KGU9dGhpcy5wcm9wcykuc2FmZVRvUmVtb3ZlKXx8dm9pZCAwPT09dHx8dC5jYWxsKGUpfSxuLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbn0odS5Db21wb25lbnQpLHZyPXttaW46MCxtYXg6MH07ZnVuY3Rpb24gQ3IoZSl7cmV0dXJuIG1yKGUueCx2cikmJm1yKGUueSx2cil9ZnVuY3Rpb24gbXIoZSx0KXtyZXR1cm4gZS5taW49PT10Lm1pbiYmZS5tYXg9PT10Lm1heH12YXIgd3I9e2R1cmF0aW9uOi40NSxlYXNlOlsuNCwwLC4xLDFdfSxicj17bGF5b3V0UmVhZHk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUubm90aWZ5TGF5b3V0UmVhZHkoKX19O2Z1bmN0aW9uIHlyKCl7dmFyIGU9bmV3IFNldDtyZXR1cm57YWRkOmZ1bmN0aW9uKHQpe3JldHVybiBlLmFkZCh0KX0sZmx1c2g6ZnVuY3Rpb24odCl7dmFyIG49dm9pZCAwPT09dD9icjp0LG89bi5sYXlvdXRSZWFkeSxhPW4ucGFyZW50O1huKChmdW5jdGlvbih0LG4pe3ZhciBpPUFycmF5LmZyb20oZSkuc29ydChFbiksbD1hP1JuKGEpOltdO24oKGZ1bmN0aW9uKCl7ci5fX3NwcmVhZEFycmF5KHIuX19zcHJlYWRBcnJheShbXSxyLl9fcmVhZChsKSksci5fX3JlYWQoaSkpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlc2V0VHJhbnNmb3JtKCl9KSl9KSksdCgoZnVuY3Rpb24oKXtpLmZvckVhY2goSW4pfSkpLG4oKGZ1bmN0aW9uKCl7bC5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXN0b3JlVHJhbnNmb3JtKCl9KSksaS5mb3JFYWNoKG8pfSkpLHQoKGZ1bmN0aW9uKCl7aS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmlzUHJlc2VudCYmKGUucHJlc2VuY2U9YXIuUHJlc2VudCl9KSl9KSksbigoZnVuY3Rpb24oKXtzLmZsdXNoU3luYy5wcmVSZW5kZXIoKSxzLmZsdXNoU3luYy5yZW5kZXIoKX0pKSx0KChmdW5jdGlvbigpe3AuZGVmYXVsdC5wb3N0UmVuZGVyKChmdW5jdGlvbigpe3JldHVybiBpLmZvckVhY2goeHIpfSkpLGUuY2xlYXIoKX0pKX0pKSxRbigpfX19ZnVuY3Rpb24geHIoZSl7ZS5wcmV2Vmlld3BvcnRCb3g9ZS5wcm9qZWN0aW9uLnRhcmdldH12YXIga3I9by5jcmVhdGVDb250ZXh0KHlyKCkpLFNyPW8uY3JlYXRlQ29udGV4dCh5cigpKTtmdW5jdGlvbiBPcihlKXtyZXR1cm4hIWUuZm9yY2VVcGRhdGV9dmFyIE1yPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiByLl9fZXh0ZW5kcyh0LGUpLHQucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuc3luY0xheW91dCxuPWUuZnJhbWVyU3luY0xheW91dCxyPWUudmlzdWFsRWxlbWVudDtPcih0KSYmdC5yZWdpc3RlcihyKSxPcihuKSYmbi5yZWdpc3RlcihyKSxyLm9uVW5tb3VudCgoZnVuY3Rpb24oKXtPcih0KSYmdC5yZW1vdmUociksT3IobikmJm4ucmVtb3ZlKHIpfSkpfSx0LnByb3RvdHlwZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnN5bmNMYXlvdXQsbj1lLnZpc3VhbEVsZW1lbnQ7cmV0dXJuIE9yKHQpP3Quc3luY1VwZGF0ZSgpOihWbihuKSx0LmFkZChuKSksbnVsbH0sdC5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5zeW5jTGF5b3V0O09yKGUpfHxlLmZsdXNoKCl9LHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiBudWxsfSx0fShkLmRlZmF1bHQuQ29tcG9uZW50KSxMcj17bWVhc3VyZUxheW91dDpmdW5jdGlvbihlKXt2YXIgdD1vLnVzZUNvbnRleHQoa3IpLG49by51c2VDb250ZXh0KFNyKTtyZXR1cm4gZC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoTXIsci5fX2Fzc2lnbih7fSxlLHtzeW5jTGF5b3V0OnQsZnJhbWVyU3luY0xheW91dDpufSkpfSxsYXlvdXRBbmltYXRpb246ZnVuY3Rpb24oZSl7dmFyIHQ9ci5fX3JlYWQoUygpLDIpWzFdO3JldHVybiB1LmNyZWF0ZUVsZW1lbnQoZ3Isci5fX2Fzc2lnbih7fSxlLHtzYWZlVG9SZW1vdmU6dH0pKX19O2Z1bmN0aW9uIF9yKCl7cmV0dXJue2lzSHlkcmF0ZWQ6ITEsbGF5b3V0Ont4OnttaW46MCxtYXg6MX0seTp7bWluOjAsbWF4OjF9fSxsYXlvdXRDb3JyZWN0ZWQ6e3g6e21pbjowLG1heDoxfSx5OnttaW46MCxtYXg6MX19LHRyZWVTY2FsZTp7eDoxLHk6MX0sZGVsdGE6dm4oKSxkZWx0YUZpbmFsOnZuKCksZGVsdGFUcmFuc2Zvcm06XCJcIn19dmFyIFByPV9yKCk7ZnVuY3Rpb24gRXIoZSx0LG4pe3ZhciByPWUueCxvPWUueSxhPVwidHJhbnNsYXRlM2QoXCIrci50cmFuc2xhdGUvdC54K1wicHgsIFwiK28udHJhbnNsYXRlL3QueStcInB4LCAwKSBcIjtpZihuKXt2YXIgaT1uLnJvdGF0ZSxsPW4ucm90YXRlWCxzPW4ucm90YXRlWTtpJiYoYSs9XCJyb3RhdGUoXCIraStcIikgXCIpLGwmJihhKz1cInJvdGF0ZVgoXCIrbCtcIikgXCIpLHMmJihhKz1cInJvdGF0ZVkoXCIrcytcIikgXCIpfXJldHVybiBhKz1cInNjYWxlKFwiK3Iuc2NhbGUrXCIsIFwiK28uc2NhbGUrXCIpXCIsbnx8YSE9PVJyP2E6XCJcIn1mdW5jdGlvbiBqcihlKXt2YXIgdD1lLmRlbHRhRmluYWw7cmV0dXJuIDEwMCp0Lngub3JpZ2luK1wiJSBcIisxMDAqdC55Lm9yaWdpbitcIiUgMFwifXZhciBScj1FcihQci5kZWx0YSxQci50cmVlU2NhbGUse3g6MSx5OjF9KSxJcj1bXCJMYXlvdXRNZWFzdXJlXCIsXCJCZWZvcmVMYXlvdXRNZWFzdXJlXCIsXCJMYXlvdXRVcGRhdGVcIixcIlZpZXdwb3J0Qm94VXBkYXRlXCIsXCJVcGRhdGVcIixcIlJlbmRlclwiLFwiQW5pbWF0aW9uQ29tcGxldGVcIixcIkxheW91dEFuaW1hdGlvbkNvbXBsZXRlXCIsXCJBbmltYXRpb25TdGFydFwiLFwiU2V0QXhpc1RhcmdldFwiLFwiVW5tb3VudFwiXSxWcj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmNoaWxkcmVuPVtdLHRoaXMuaXNEaXJ0eT0hMX1yZXR1cm4gZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe1Z0KHRoaXMuY2hpbGRyZW4sZSksdGhpcy5pc0RpcnR5PSEwfSxlLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oZSl7SHQodGhpcy5jaGlsZHJlbixlKSx0aGlzLmlzRGlydHk9ITB9LGUucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSl7dGhpcy5pc0RpcnR5JiZ0aGlzLmNoaWxkcmVuLnNvcnQoRW4pLHRoaXMuaXNEaXJ0eT0hMSx0aGlzLmNoaWxkcmVuLmZvckVhY2goZSl9LGV9KCksSHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50cmVlVHlwZSxuPXZvaWQgMD09PXQ/XCJcIjp0LG89ZS5idWlsZCxhPWUuZ2V0QmFzZVRhcmdldCxpPWUubWFrZVRhcmdldEFuaW1hdGFibGUsYz1lLm1lYXN1cmVWaWV3cG9ydEJveCx1PWUucmVuZGVyLGQ9ZS5yZWFkVmFsdWVGcm9tSW5zdGFuY2UsZj1lLnJlc2V0VHJhbnNmb3JtLGg9ZS5yZXN0b3JlVHJhbnNmb3JtLGc9ZS5yZW1vdmVWYWx1ZUZyb21SZW5kZXJTdGF0ZSx2PWUuc29ydE5vZGVQb3NpdGlvbixDPWUuc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzO3JldHVybiBmdW5jdGlvbihlLHQpe3ZhciBtPWUucGFyZW50LHc9ZS5wcm9wcyxiPWUucHJlc2VuY2VJZCx5PWUuYmxvY2tJbml0aWFsQW5pbWF0aW9uLHg9ZS52aXN1YWxTdGF0ZTt2b2lkIDA9PT10JiYodD17fSk7dmFyIGssUyxPLE0sTCxfLFA9eC5sYXRlc3RWYWx1ZXMsRT14LnJlbmRlclN0YXRlLGo9ZnVuY3Rpb24oKXt2YXIgZT1Jci5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBBdH0pKSx0PXt9LG49e2NsZWFyQWxsTGlzdGVuZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2xlYXIoKX0pKX0sdXBkYXRlUHJvcExpc3RlbmVyczpmdW5jdGlvbihlKXtyZXR1cm4gSXIuZm9yRWFjaCgoZnVuY3Rpb24ocil7dmFyIG87bnVsbD09PShvPXRbcl0pfHx2b2lkIDA9PT1vfHxvLmNhbGwodCk7dmFyIGE9XCJvblwiK3IsaT1lW2FdO2kmJih0W3JdPW5bYV0oaSkpfSkpfX07cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtuW1wib25cIitJclt0XV09ZnVuY3Rpb24odCl7cmV0dXJuIGUuYWRkKHQpfSxuW1wibm90aWZ5XCIrSXJbdF1dPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXRbbl09YXJndW1lbnRzW25dO3JldHVybiBlLm5vdGlmeS5hcHBseShlLHIuX19zcHJlYWRBcnJheShbXSxyLl9fcmVhZCh0KSkpfX0pKSxufSgpLFI9e2lzRW5hYmxlZDohMSxpc0h5ZHJhdGVkOiExLGlzVGFyZ2V0TG9ja2VkOiExLHRhcmdldDp7eDp7bWluOjAsbWF4OjF9LHk6e21pbjowLG1heDoxfX0sdGFyZ2V0RmluYWw6e3g6e21pbjowLG1heDoxfSx5OnttaW46MCxtYXg6MX19fSxJPVIsSD1QLEE9X3IoKSxCPSExLFo9bmV3IE1hcCwkPW5ldyBNYXAsTj17fSxGPXIuX19hc3NpZ24oe30sUCk7ZnVuY3Rpb24gVygpe2smJihRLmlzUHJvamVjdGlvblJlYWR5KCkmJih6bihJLnRhcmdldEZpbmFsLEkudGFyZ2V0LEgpLHluKEEuZGVsdGFGaW5hbCxBLmxheW91dENvcnJlY3RlZCxJLnRhcmdldEZpbmFsLFApKSxVKCksdShrLEUpKX1mdW5jdGlvbiBVKCl7dmFyIGU9UDtpZihNJiZNLmlzQWN0aXZlKCkpe3ZhciBuPU0uZ2V0Q3Jvc3NmYWRlU3RhdGUoUSk7biYmKGU9bil9byhRLEUsZSxJLEEsdCx3KX1mdW5jdGlvbiB6KCl7ai5ub3RpZnlVcGRhdGUoUCl9ZnVuY3Rpb24gRygpe1EubGF5b3V0VHJlZS5mb3JFYWNoKFRyKX12YXIgSz1DKHcpO2Zvcih2YXIgcSBpbiBLKXt2YXIgWT1LW3FdO3ZvaWQgMCE9PVBbcV0mJmVlKFkpJiZZLnNldChQW3FdLCExKX12YXIgSj1UKHcpLFg9RCh3KSxRPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7dHJlZVR5cGU6bixjdXJyZW50Om51bGwsZGVwdGg6bT9tLmRlcHRoKzE6MCxwYXJlbnQ6bSxjaGlsZHJlbjpuZXcgU2V0LHBhdGg6bT9yLl9fc3ByZWFkQXJyYXkoci5fX3NwcmVhZEFycmF5KFtdLHIuX19yZWFkKG0ucGF0aCkpLFttXSk6W10sbGF5b3V0VHJlZTptP20ubGF5b3V0VHJlZTpuZXcgVnIscHJlc2VuY2VJZDpiLHByb2plY3Rpb246Uix2YXJpYW50Q2hpbGRyZW46WD9uZXcgU2V0OnZvaWQgMCxpc1Zpc2libGU6dm9pZCAwLG1hbnVhbGx5QW5pbWF0ZU9uTW91bnQ6Qm9vbGVhbihudWxsPT1tP3ZvaWQgMDptLmlzTW91bnRlZCgpKSxibG9ja0luaXRpYWxBbmltYXRpb246eSxpc01vdW50ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gQm9vbGVhbihrKX0sbW91bnQ6ZnVuY3Rpb24oZSl7az1RLmN1cnJlbnQ9ZSxRLnBvaW50VG8oUSksWCYmbSYmIUomJihfPW51bGw9PW0/dm9pZCAwOm0uYWRkVmFyaWFudENoaWxkKFEpKSxudWxsPT1tfHxtLmNoaWxkcmVuLmFkZChRKX0sdW5tb3VudDpmdW5jdGlvbigpe3MuY2FuY2VsU3luYy51cGRhdGUoeikscy5jYW5jZWxTeW5jLnJlbmRlcihXKSxzLmNhbmNlbFN5bmMucHJlUmVuZGVyKFEudXBkYXRlTGF5b3V0UHJvamVjdGlvbiksJC5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZSgpfSkpLFEuc3RvcExheW91dEFuaW1hdGlvbigpLFEubGF5b3V0VHJlZS5yZW1vdmUoUSksbnVsbD09X3x8XygpLG51bGw9PW18fG0uY2hpbGRyZW4uZGVsZXRlKFEpLG51bGw9PU98fE8oKSxqLmNsZWFyQWxsTGlzdGVuZXJzKCl9LGFkZFZhcmlhbnRDaGlsZDpmdW5jdGlvbihlKXt2YXIgdCxuPVEuZ2V0Q2xvc2VzdFZhcmlhbnROb2RlKCk7aWYobilyZXR1cm4gbnVsbD09PSh0PW4udmFyaWFudENoaWxkcmVuKXx8dm9pZCAwPT09dHx8dC5hZGQoZSksZnVuY3Rpb24oKXtyZXR1cm4gbi52YXJpYW50Q2hpbGRyZW4uZGVsZXRlKGUpfX0sc29ydE5vZGVQb3NpdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gdiYmbj09PWUudHJlZVR5cGU/dihRLmdldEluc3RhbmNlKCksZS5nZXRJbnN0YW5jZSgpKTowfSxnZXRDbG9zZXN0VmFyaWFudE5vZGU6ZnVuY3Rpb24oKXtyZXR1cm4gWD9ROm51bGw9PW0/dm9pZCAwOm0uZ2V0Q2xvc2VzdFZhcmlhbnROb2RlKCl9LHNjaGVkdWxlVXBkYXRlTGF5b3V0UHJvamVjdGlvbjptP20uc2NoZWR1bGVVcGRhdGVMYXlvdXRQcm9qZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHAuZGVmYXVsdC5wcmVSZW5kZXIoUS51cGRhdGVUcmVlTGF5b3V0UHJvamVjdGlvbiwhMSwhMCl9LGdldExheW91dElkOmZ1bmN0aW9uKCl7cmV0dXJuIHcubGF5b3V0SWR9LGdldEluc3RhbmNlOmZ1bmN0aW9uKCl7cmV0dXJuIGt9LGdldFN0YXRpY1ZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBQW2VdfSxzZXRTdGF0aWNWYWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBQW2VdPXR9LGdldExhdGVzdFZhbHVlczpmdW5jdGlvbigpe3JldHVybiBQfSxzZXRWaXNpYmlsaXR5OmZ1bmN0aW9uKGUpe1EuaXNWaXNpYmxlIT09ZSYmKFEuaXNWaXNpYmxlPWUsUS5zY2hlZHVsZVJlbmRlcigpKX0sbWFrZVRhcmdldEFuaW1hdGFibGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9ITApLGkoUSxlLHcsdCl9LGFkZFZhbHVlOmZ1bmN0aW9uKGUsdCl7US5oYXNWYWx1ZShlKSYmUS5yZW1vdmVWYWx1ZShlKSxaLnNldChlLHQpLFBbZV09dC5nZXQoKSxmdW5jdGlvbihlLHQpe3ZhciBuPXQub25DaGFuZ2UoKGZ1bmN0aW9uKHQpe1BbZV09dCx3Lm9uVXBkYXRlJiZwLmRlZmF1bHQudXBkYXRlKHosITEsITApfSkpLHI9dC5vblJlbmRlclJlcXVlc3QoUS5zY2hlZHVsZVJlbmRlcik7JC5zZXQoZSwoZnVuY3Rpb24oKXtuKCkscigpfSkpfShlLHQpfSxyZW1vdmVWYWx1ZTpmdW5jdGlvbihlKXt2YXIgdDtaLmRlbGV0ZShlKSxudWxsPT09KHQ9JC5nZXQoZSkpfHx2b2lkIDA9PT10fHx0KCksJC5kZWxldGUoZSksZGVsZXRlIFBbZV0sZyhlLEUpfSxoYXNWYWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gWi5oYXMoZSl9LGdldFZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49Wi5nZXQoZSk7cmV0dXJuIHZvaWQgMD09PW4mJnZvaWQgMCE9PXQmJihuPUR0KHQpLFEuYWRkVmFsdWUoZSxuKSksbn0sZm9yRWFjaFZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBaLmZvckVhY2goZSl9LHJlYWRWYWx1ZTpmdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbnVsbCE9PShuPVBbZV0pJiZ2b2lkIDAhPT1uP246ZChrLGUsdCl9LHNldEJhc2VUYXJnZXQ6ZnVuY3Rpb24oZSx0KXtGW2VdPXR9LGdldEJhc2VUYXJnZXQ6ZnVuY3Rpb24oZSl7aWYoYSl7dmFyIHQ9YSh3LGUpO2lmKHZvaWQgMCE9PXQmJiFlZSh0KSlyZXR1cm4gdH1yZXR1cm4gRltlXX19LGopLHtidWlsZDpmdW5jdGlvbigpe3JldHVybiBVKCksRX0sc2NoZWR1bGVSZW5kZXI6ZnVuY3Rpb24oKXtwLmRlZmF1bHQucmVuZGVyKFcsITEsITApfSxzeW5jUmVuZGVyOlcsc2V0UHJvcHM6ZnVuY3Rpb24oZSl7dz1lLGoudXBkYXRlUHJvcExpc3RlbmVycyhlKSxOPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtmb3IodmFyIG8gaW4gdCl7dmFyIGE9dFtvXSxpPW5bb107aWYoZWUoYSkpZS5hZGRWYWx1ZShvLGEpO2Vsc2UgaWYoZWUoaSkpZS5hZGRWYWx1ZShvLER0KGEpKTtlbHNlIGlmKGkhPT1hKWlmKGUuaGFzVmFsdWUobykpe3ZhciBsPWUuZ2V0VmFsdWUobyk7IWwuaGFzQW5pbWF0ZWQmJmwuc2V0KGEpfWVsc2UgZS5hZGRWYWx1ZShvLER0KG51bGwhPT0ocj1lLmdldFN0YXRpY1ZhbHVlKG8pKSYmdm9pZCAwIT09cj9yOmEpKX1mb3IodmFyIG8gaW4gbil2b2lkIDA9PT10W29dJiZlLnJlbW92ZVZhbHVlKG8pO3JldHVybiB0fShRLEModyksTil9LGdldFByb3BzOmZ1bmN0aW9uKCl7cmV0dXJuIHd9LGdldFZhcmlhbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIG51bGw9PT0odD13LnZhcmlhbnRzKXx8dm9pZCAwPT09dD92b2lkIDA6dFtlXX0sZ2V0RGVmYXVsdFRyYW5zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdy50cmFuc2l0aW9ufSxnZXRWYXJpYW50Q29udGV4dDpmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lJiYoZT0hMSksZSlyZXR1cm4gbnVsbD09bT92b2lkIDA6bS5nZXRWYXJpYW50Q29udGV4dCgpO2lmKCFKKXt2YXIgdD0obnVsbD09bT92b2lkIDA6bS5nZXRWYXJpYW50Q29udGV4dCgpKXx8e307cmV0dXJuIHZvaWQgMCE9PXcuaW5pdGlhbCYmKHQuaW5pdGlhbD13LmluaXRpYWwpLHR9Zm9yKHZhciBuPXt9LHI9MDtyPFpyO3IrKyl7dmFyIG89QnJbcl0sYT13W29dOyhWKGEpfHwhMT09PWEpJiYobltvXT1hKX1yZXR1cm4gbn0sZW5hYmxlTGF5b3V0UHJvamVjdGlvbjpmdW5jdGlvbigpe1IuaXNFbmFibGVkPSEwLFEubGF5b3V0VHJlZS5hZGQoUSl9LGxvY2tQcm9qZWN0aW9uVGFyZ2V0OmZ1bmN0aW9uKCl7Ui5pc1RhcmdldExvY2tlZD0hMH0sdW5sb2NrUHJvamVjdGlvblRhcmdldDpmdW5jdGlvbigpe1Euc3RvcExheW91dEFuaW1hdGlvbigpLFIuaXNUYXJnZXRMb2NrZWQ9ITF9LGdldExheW91dFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIEF9LHNldENyb3NzZmFkZXI6ZnVuY3Rpb24oZSl7TT1lfSxpc1Byb2plY3Rpb25SZWFkeTpmdW5jdGlvbigpe3JldHVybiBSLmlzRW5hYmxlZCYmUi5pc0h5ZHJhdGVkJiZBLmlzSHlkcmF0ZWR9LHN0YXJ0TGF5b3V0QW5pbWF0aW9uOmZ1bmN0aW9uKGUsdCxuKXt2b2lkIDA9PT1uJiYobj0hMSk7dmFyIHI9US5nZXRQcm9qZWN0aW9uQW5pbWF0aW9uUHJvZ3Jlc3MoKVtlXSxvPW4/Ui5yZWxhdGl2ZVRhcmdldFtlXTpSLnRhcmdldFtlXSxhPW8ubWluLGk9by5tYXgtYTtyZXR1cm4gci5jbGVhckxpc3RlbmVycygpLHIuc2V0KGEpLHIuc2V0KGEpLHIub25DaGFuZ2UoKGZ1bmN0aW9uKHQpe1Euc2V0UHJvamVjdGlvblRhcmdldEF4aXMoZSx0LHQraSxuKX0pKSxRLmFuaW1hdGVNb3Rpb25WYWx1ZShlLHIsMCx0KX0sc3RvcExheW91dEFuaW1hdGlvbjpmdW5jdGlvbigpe0NuKChmdW5jdGlvbihlKXtyZXR1cm4gUS5nZXRQcm9qZWN0aW9uQW5pbWF0aW9uUHJvZ3Jlc3MoKVtlXS5zdG9wKCl9KSl9LG1lYXN1cmVWaWV3cG9ydEJveDpmdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT0hMCk7dmFyIG49YyhrLHQpO3JldHVybiBlfHxxbihuLFApLG59LGdldFByb2plY3Rpb25BbmltYXRpb25Qcm9ncmVzczpmdW5jdGlvbigpe3JldHVybiBMfHwoTD17eDpEdCgwKSx5OkR0KDApfSksTH0sc2V0UHJvamVjdGlvblRhcmdldEF4aXM6ZnVuY3Rpb24oZSx0LG4scil7dmFyIG87dm9pZCAwPT09ciYmKHI9ITEpLHI/KFIucmVsYXRpdmVUYXJnZXR8fChSLnJlbGF0aXZlVGFyZ2V0PXt4OnttaW46MCxtYXg6MX0seTp7bWluOjAsbWF4OjF9fSksbz1SLnJlbGF0aXZlVGFyZ2V0W2VdKTooUi5yZWxhdGl2ZVRhcmdldD12b2lkIDAsbz1SLnRhcmdldFtlXSksUi5pc0h5ZHJhdGVkPSEwLG8ubWluPXQsby5tYXg9bixCPSEwLGoubm90aWZ5U2V0QXhpc1RhcmdldCgpfSxyZWJhc2VQcm9qZWN0aW9uVGFyZ2V0OmZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9QS5sYXlvdXQpO3ZhciBuPVEuZ2V0UHJvamVjdGlvbkFuaW1hdGlvblByb2dyZXNzKCkscj1uLngsbz1uLnksYT0hKFIucmVsYXRpdmVUYXJnZXR8fFIuaXNUYXJnZXRMb2NrZWR8fHIuaXNBbmltYXRpbmcoKXx8by5pc0FuaW1hdGluZygpKTsoZXx8YSkmJkNuKChmdW5jdGlvbihlKXt2YXIgbj10W2VdLHI9bi5taW4sbz1uLm1heDtRLnNldFByb2plY3Rpb25UYXJnZXRBeGlzKGUscixvKX0pKX0sbm90aWZ5TGF5b3V0UmVhZHk6ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0UHJvamVjdGlvblBhcmVudCgpO2lmKHQpe3ZhciBuPUFuKHQuZ2V0TGF5b3V0U3RhdGUoKS5sYXlvdXQsZS5nZXRMYXlvdXRTdGF0ZSgpLmxheW91dCk7Q24oKGZ1bmN0aW9uKHQpe2Uuc2V0UHJvamVjdGlvblRhcmdldEF4aXModCxuW3RdLm1pbixuW3RdLm1heCwhMCl9KSl9ZWxzZSBlLnJlYmFzZVByb2plY3Rpb25UYXJnZXQoKX0oUSksUS5ub3RpZnlMYXlvdXRVcGRhdGUoQS5sYXlvdXQsUS5wcmV2Vmlld3BvcnRCb3h8fEEubGF5b3V0LGUpfSxyZXNldFRyYW5zZm9ybTpmdW5jdGlvbigpe3JldHVybiBmKFEsayx3KX0scmVzdG9yZVRyYW5zZm9ybTpmdW5jdGlvbigpe3JldHVybiBoKGssRSl9LHVwZGF0ZUxheW91dFByb2plY3Rpb246ZnVuY3Rpb24oKXtpZihRLmlzUHJvamVjdGlvblJlYWR5KCkpe3ZhciBlPUEuZGVsdGEsdD1BLnRyZWVTY2FsZSxuPXQueCxyPXQueSxvPUEuZGVsdGFUcmFuc2Zvcm07KGZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvLGEsaT1lLmRlbHRhLGw9ZS5sYXlvdXQscz1lLmxheW91dENvcnJlY3RlZCxjPWUudHJlZVNjYWxlLHU9dC50YXJnZXQ7YT1sLERuKChvPXMpLngsYS54KSxEbihvLnksYS55KSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bi5sZW5ndGg7aWYocil7dmFyIG8sYTt0Lng9dC55PTE7Zm9yKHZhciBpPTA7aTxyO2krKylhPShvPW5baV0pLmdldExheW91dFN0YXRlKCkuZGVsdGEsdC54Kj1hLnguc2NhbGUsdC55Kj1hLnkuc2NhbGUsTm4oZSxhKSxUbihvKSYmem4oZSxlLG8uZ2V0TGF0ZXN0VmFsdWVzKCkpfX0ocyxjLG4pLHluKGkscyx1LHIpfSkoQSxJLFEucGF0aCxQKSxCJiZRLm5vdGlmeVZpZXdwb3J0Qm94VXBkYXRlKEkudGFyZ2V0LGUpLEI9ITE7dmFyIGE9RXIoZSx0KTthPT09byYmbj09PXQueCYmcj09PXQueXx8US5zY2hlZHVsZVJlbmRlcigpLEEuZGVsdGFUcmFuc2Zvcm09YX19LHVwZGF0ZVRyZWVMYXlvdXRQcm9qZWN0aW9uOmZ1bmN0aW9uKCl7US5sYXlvdXRUcmVlLmZvckVhY2goQXIpLHAuZGVmYXVsdC5wcmVSZW5kZXIoRywhMSwhMCl9LGdldFByb2plY3Rpb25QYXJlbnQ6ZnVuY3Rpb24oKXtpZih2b2lkIDA9PT1TKXtmb3IodmFyIGU9ITEsdD1RLnBhdGgubGVuZ3RoLTE7dD49MDt0LS0pe3ZhciBuPVEucGF0aFt0XTtpZihuLnByb2plY3Rpb24uaXNFbmFibGVkKXtlPW47YnJlYWt9fVM9ZX1yZXR1cm4gU30scmVzb2x2ZVJlbGF0aXZlVGFyZ2V0Qm94OmZ1bmN0aW9uKCl7dmFyIGU9US5nZXRQcm9qZWN0aW9uUGFyZW50KCk7aWYoUi5yZWxhdGl2ZVRhcmdldCYmZSYmKGZ1bmN0aW9uKGUsdCl7a24oZS50YXJnZXQueCxlLnJlbGF0aXZlVGFyZ2V0LngsdC50YXJnZXQueCksa24oZS50YXJnZXQueSxlLnJlbGF0aXZlVGFyZ2V0LnksdC50YXJnZXQueSl9KFIsZS5wcm9qZWN0aW9uKSxUbihlKSkpe3ZhciB0PVIudGFyZ2V0O3puKHQsdCxlLmdldExhdGVzdFZhbHVlcygpKX19LHNob3VsZFJlc2V0VHJhbnNmb3JtOmZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4ody5fbGF5b3V0UmVzZXRUcmFuc2Zvcm0pfSxwb2ludFRvOmZ1bmN0aW9uKGUpe0k9ZS5wcm9qZWN0aW9uLEg9ZS5nZXRMYXRlc3RWYWx1ZXMoKSxudWxsPT1PfHxPKCksTz1sLnBpcGUoZS5vblNldEF4aXNUYXJnZXQoUS5zY2hlZHVsZVVwZGF0ZUxheW91dFByb2plY3Rpb24pLGUub25MYXlvdXRBbmltYXRpb25Db21wbGV0ZSgoZnVuY3Rpb24oKXt2YXIgZTtRLmlzUHJlc2VudD9RLnByZXNlbmNlPWFyLlByZXNlbnQ6bnVsbD09PShlPVEubGF5b3V0U2FmZVRvUmVtb3ZlKXx8dm9pZCAwPT09ZXx8ZS5jYWxsKFEpfSkpKX0saXNQcmVzZW50OiEwLHByZXNlbmNlOmFyLkVudGVyaW5nfSk7cmV0dXJuIFF9fTtmdW5jdGlvbiBBcihlKXtlLnJlc29sdmVSZWxhdGl2ZVRhcmdldEJveCgpfWZ1bmN0aW9uIFRyKGUpe2UudXBkYXRlTGF5b3V0UHJvamVjdGlvbigpfXZhciBEcixCcj1yLl9fc3ByZWFkQXJyYXkoW1wiaW5pdGlhbFwiXSxyLl9fcmVhZChlbikpLFpyPUJyLmxlbmd0aCwkcj1uZXcgU2V0KFtcIndpZHRoXCIsXCJoZWlnaHRcIixcInRvcFwiLFwibGVmdFwiLFwicmlnaHRcIixcImJvdHRvbVwiLFwieFwiLFwieVwiXSksTnI9ZnVuY3Rpb24oZSl7cmV0dXJuICRyLmhhcyhlKX0sRnI9ZnVuY3Rpb24oZSx0KXtlLnNldCh0LCExKSxlLnNldCh0KX0sV3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1pLm51bWJlcnx8ZT09PWkucHh9OyFmdW5jdGlvbihlKXtlLndpZHRoPVwid2lkdGhcIixlLmhlaWdodD1cImhlaWdodFwiLGUubGVmdD1cImxlZnRcIixlLnJpZ2h0PVwicmlnaHRcIixlLnRvcD1cInRvcFwiLGUuYm90dG9tPVwiYm90dG9tXCJ9KERyfHwoRHI9e30pKTt2YXIgVXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcGFyc2VGbG9hdChlLnNwbGl0KFwiLCBcIilbdF0pfSx6cj1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuLHIpe3ZhciBvPXIudHJhbnNmb3JtO2lmKFwibm9uZVwiPT09b3x8IW8pcmV0dXJuIDA7dmFyIGE9by5tYXRjaCgvXm1hdHJpeDNkXFwoKC4rKVxcKSQvKTtpZihhKXJldHVybiBVcihhWzFdLHQpO3ZhciBpPW8ubWF0Y2goL15tYXRyaXhcXCgoLispXFwpJC8pO3JldHVybiBpP1VyKGlbMV0sZSk6MH19LEdyPW5ldyBTZXQoW1wieFwiLFwieVwiLFwielwiXSksS3I9Ry5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiFHci5oYXMoZSl9KSkscXI9e3dpZHRoOmZ1bmN0aW9uKGUpe3ZhciB0PWUueDtyZXR1cm4gdC5tYXgtdC5taW59LGhlaWdodDpmdW5jdGlvbihlKXt2YXIgdD1lLnk7cmV0dXJuIHQubWF4LXQubWlufSx0b3A6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnRvcDtyZXR1cm4gcGFyc2VGbG9hdChuKX0sbGVmdDpmdW5jdGlvbihlLHQpe3ZhciBuPXQubGVmdDtyZXR1cm4gcGFyc2VGbG9hdChuKX0sYm90dG9tOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS55LHI9dC50b3A7cmV0dXJuIHBhcnNlRmxvYXQocikrKG4ubWF4LW4ubWluKX0scmlnaHQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLngscj10LmxlZnQ7cmV0dXJuIHBhcnNlRmxvYXQocikrKG4ubWF4LW4ubWluKX0seDp6cig0LDEzKSx5OnpyKDUsMTQpfTtmdW5jdGlvbiBZcihlLHQsbixvKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLnNvbWUoTnIpfSh0KT9mdW5jdGlvbihlLHQsbixvKXt2b2lkIDA9PT1uJiYobj17fSksdm9pZCAwPT09byYmKG89e30pLHQ9ci5fX2Fzc2lnbih7fSx0KSxvPXIuX19hc3NpZ24oe30sbyk7dmFyIGw9T2JqZWN0LmtleXModCkuZmlsdGVyKE5yKSxzPVtdLGM9ITEsdT1bXTtpZihsLmZvckVhY2goKGZ1bmN0aW9uKHIpe3ZhciBsPWUuZ2V0VmFsdWUocik7aWYoZS5oYXNWYWx1ZShyKSl7dmFyIGQscD1uW3JdLGY9dFtyXSxoPSR0KHApO2lmKEVlKGYpKWZvcih2YXIgZz1mLmxlbmd0aCx2PW51bGw9PT1mWzBdPzE6MDt2PGc7disrKWQ/YS5pbnZhcmlhbnQoJHQoZlt2XSk9PT1kLFwiQWxsIGtleWZyYW1lcyBtdXN0IGJlIG9mIHRoZSBzYW1lIHR5cGVcIik6KGQ9JHQoZlt2XSksYS5pbnZhcmlhbnQoZD09PWh8fFdyKGgpJiZXcihkKSxcIktleWZyYW1lcyBtdXN0IGJlIG9mIHRoZSBzYW1lIGRpbWVuc2lvbiBhcyB0aGUgY3VycmVudCB2YWx1ZVwiKSk7ZWxzZSBkPSR0KGYpO2lmKGghPT1kKWlmKFdyKGgpJiZXcihkKSl7dmFyIEM9bC5nZXQoKTtcInN0cmluZ1wiPT10eXBlb2YgQyYmbC5zZXQocGFyc2VGbG9hdChDKSksXCJzdHJpbmdcIj09dHlwZW9mIGY/dFtyXT1wYXJzZUZsb2F0KGYpOkFycmF5LmlzQXJyYXkoZikmJmQ9PT1pLnB4JiYodFtyXT1mLm1hcChwYXJzZUZsb2F0KSl9ZWxzZShudWxsPT1oP3ZvaWQgMDpoLnRyYW5zZm9ybSkmJihudWxsPT1kP3ZvaWQgMDpkLnRyYW5zZm9ybSkmJigwPT09cHx8MD09PWYpPzA9PT1wP2wuc2V0KGQudHJhbnNmb3JtKHApKTp0W3JdPWgudHJhbnNmb3JtKGYpOihjfHwocz1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gS3IuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIHI9ZS5nZXRWYWx1ZShuKTt2b2lkIDAhPT1yJiYodC5wdXNoKFtuLHIuZ2V0KCldKSxyLnNldChuLnN0YXJ0c1dpdGgoXCJzY2FsZVwiKT8xOjApKX0pKSx0Lmxlbmd0aCYmZS5zeW5jUmVuZGVyKCksdH0oZSksYz0hMCksdS5wdXNoKHIpLG9bcl09dm9pZCAwIT09b1tyXT9vW3JdOnRbcl0sRnIobCxmKSl9fSkpLHUubGVuZ3RoKXt2YXIgZD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dC5tZWFzdXJlVmlld3BvcnRCb3goKSxvPXQuZ2V0SW5zdGFuY2UoKSxhPWdldENvbXB1dGVkU3R5bGUobyksaT1hLmRpc3BsYXksbD17dG9wOmEudG9wLGxlZnQ6YS5sZWZ0LGJvdHRvbTphLmJvdHRvbSxyaWdodDphLnJpZ2h0LHRyYW5zZm9ybTphLnRyYW5zZm9ybX07XCJub25lXCI9PT1pJiZ0LnNldFN0YXRpY1ZhbHVlKFwiZGlzcGxheVwiLGUuZGlzcGxheXx8XCJibG9ja1wiKSx0LnN5bmNSZW5kZXIoKTt2YXIgcz10Lm1lYXN1cmVWaWV3cG9ydEJveCgpO3JldHVybiBuLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBvPXQuZ2V0VmFsdWUobik7RnIobyxxcltuXShyLGwpKSxlW25dPXFyW25dKHMsYSl9KSksZX0odCxlLHUpO3JldHVybiBzLmxlbmd0aCYmcy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1yLl9fcmVhZCh0LDIpLG89blswXSxhPW5bMV07ZS5nZXRWYWx1ZShvKS5zZXQoYSl9KSksZS5zeW5jUmVuZGVyKCkse3RhcmdldDpkLHRyYW5zaXRpb25FbmQ6b319cmV0dXJue3RhcmdldDp0LHRyYW5zaXRpb25FbmQ6b319KGUsdCxuLG8pOnt0YXJnZXQ6dCx0cmFuc2l0aW9uRW5kOm99fXZhciBKcj17dHJlZVR5cGU6XCJkb21cIixyZWFkVmFsdWVGcm9tSW5zdGFuY2U6ZnVuY3Rpb24oZSx0KXtpZihZKHQpKXt2YXIgbj1MdCh0KTtyZXR1cm4gbiYmbi5kZWZhdWx0fHwwfXZhciByLG89KHI9ZSx3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShyKSk7cmV0dXJuKG5lKHQpP28uZ2V0UHJvcGVydHlWYWx1ZSh0KTpvW3RdKXx8MH0sc29ydE5vZGVQb3NpdGlvbjpmdW5jdGlvbihlLHQpe3JldHVybiAyJmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCk/MTotMX0sZ2V0QmFzZVRhcmdldDpmdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBudWxsPT09KG49ZS5zdHlsZSl8fHZvaWQgMD09PW4/dm9pZCAwOm5bdF19LG1lYXN1cmVWaWV3cG9ydEJveDpmdW5jdGlvbihlLHQpe3JldHVybiBQbihlLHQudHJhbnNmb3JtUGFnZVBvaW50KX0scmVzZXRUcmFuc2Zvcm06ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4udHJhbnNmb3JtVGVtcGxhdGU7dC5zdHlsZS50cmFuc2Zvcm09cj9yKHt9LFwiXCIpOlwibm9uZVwiLGUuc2NoZWR1bGVSZW5kZXIoKX0scmVzdG9yZVRyYW5zZm9ybTpmdW5jdGlvbihlLHQpe2Uuc3R5bGUudHJhbnNmb3JtPXQuc3R5bGUudHJhbnNmb3JtfSxyZW1vdmVWYWx1ZUZyb21SZW5kZXJTdGF0ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXQudmFycyxyPXQuc3R5bGU7ZGVsZXRlIG5bZV0sZGVsZXRlIHJbZV19LG1ha2VUYXJnZXRBbmltYXRhYmxlOmZ1bmN0aW9uKGUsdCxuLG8pe3ZhciBhPW4udHJhbnNmb3JtVmFsdWVzO3ZvaWQgMD09PW8mJihvPSEwKTt2YXIgaT10LnRyYW5zaXRpb24sbD10LnRyYW5zaXRpb25FbmQscz1yLl9fcmVzdCh0LFtcInRyYW5zaXRpb25cIixcInRyYW5zaXRpb25FbmRcIl0pLGM9S3QocyxpfHx7fSxlKTtpZihhJiYobCYmKGw9YShsKSkscyYmKHM9YShzKSksYyYmKGM9YShjKSkpLG8pe3p0KGUscyxjKTt2YXIgdT1mdW5jdGlvbihlLHQsbixvKXt2YXIgYT1mdW5jdGlvbihlLHQsbil7dmFyIG8sYT1yLl9fcmVzdCh0LFtdKSxpPWUuZ2V0SW5zdGFuY2UoKTtpZighKGkgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpcmV0dXJue3RhcmdldDphLHRyYW5zaXRpb25FbmQ6bn07Zm9yKHZhciBsIGluIG4mJihuPXIuX19hc3NpZ24oe30sbikpLGUuZm9yRWFjaFZhbHVlKChmdW5jdGlvbihlKXt2YXIgdD1lLmdldCgpO2lmKHNyKHQpKXt2YXIgbj11cih0LGkpO24mJmUuc2V0KG4pfX0pKSxhKXt2YXIgcz1hW2xdO2lmKHNyKHMpKXt2YXIgYz11cihzLGkpO2MmJihhW2xdPWMsbiYmKG51bGwhPT0obz1uW2xdKSYmdm9pZCAwIT09b3x8KG5bbF09cykpKX19cmV0dXJue3RhcmdldDphLHRyYW5zaXRpb25FbmQ6bn19KGUsdCxvKTtyZXR1cm4gWXIoZSx0PWEudGFyZ2V0LG4sbz1hLnRyYW5zaXRpb25FbmQpfShlLHMsYyxsKTtsPXUudHJhbnNpdGlvbkVuZCxzPXUudGFyZ2V0fXJldHVybiByLl9fYXNzaWduKHt0cmFuc2l0aW9uOmksdHJhbnNpdGlvbkVuZDpsfSxzKX0sc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzOkxlLGJ1aWxkOmZ1bmN0aW9uKGUsdCxuLHIsbyxhLGkpe3ZvaWQgMCE9PWUuaXNWaXNpYmxlJiYodC5zdHlsZS52aXNpYmlsaXR5PWUuaXNWaXNpYmxlP1widmlzaWJsZVwiOlwiaGlkZGVuXCIpO3ZhciBsPXIuaXNFbmFibGVkJiZvLmlzSHlkcmF0ZWQ7aWUodCxuLHIsbyxhLGkudHJhbnNmb3JtVGVtcGxhdGUsbD9Fcjp2b2lkIDAsbD9qcjp2b2lkIDApfSxyZW5kZXI6U2V9LFhyPUhyKEpyKSxRcj1IcihyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sSnIpLHtnZXRCYXNlVGFyZ2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF19LHJlYWRWYWx1ZUZyb21JbnN0YW5jZTpmdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBZKHQpPyhudWxsPT09KG49THQodCkpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmRlZmF1bHQpfHwwOih0PU9lLmhhcyh0KT90OmtlKHQpLGUuZ2V0QXR0cmlidXRlKHQpKX0sc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzOl9lLGJ1aWxkOmZ1bmN0aW9uKGUsdCxuLHIsbyxhLGkpe3ZhciBsPXIuaXNFbmFibGVkJiZvLmlzSHlkcmF0ZWQ7bWUodCxuLHIsbyxhLGkudHJhbnNmb3JtVGVtcGxhdGUsbD9Fcjp2b2lkIDAsbD9qcjp2b2lkIDApfSxyZW5kZXI6TWV9KSksZW89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gRihlKT9Rcih0LHtlbmFibGVIYXJkd2FyZUFjY2VsZXJhdGlvbjohMX0pOlhyKHQse2VuYWJsZUhhcmR3YXJlQWNjZWxlcmF0aW9uOiEwfSl9LHRvPXIuX19hc3NpZ24oci5fX2Fzc2lnbihyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sb24pLGZ0KSxsciksTHIpLG5vPSQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIFplKGUsdCx0byxlbyl9KSkscm89JChaZSksb289MDtmdW5jdGlvbiBhbygpe3ZhciBlPW9vO3JldHVybiBvbysrLGV9dmFyIGlvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2hpbGRyZW4sbj1lLmluaXRpYWwscj1lLmlzUHJlc2VudCxhPWUub25FeGl0Q29tcGxldGUsaT1lLmN1c3RvbSxsPWUucHJlc2VuY2VBZmZlY3RzTGF5b3V0LHM9ayhsbyksYz1rKGFvKSxkPW8udXNlTWVtbygoZnVuY3Rpb24oKXtyZXR1cm57aWQ6Yyxpbml0aWFsOm4saXNQcmVzZW50OnIsY3VzdG9tOmksb25FeGl0Q29tcGxldGU6ZnVuY3Rpb24oZSl7cy5zZXQoZSwhMCk7dmFyIHQ9ITA7cy5mb3JFYWNoKChmdW5jdGlvbihlKXtlfHwodD0hMSl9KSksdCYmKG51bGw9PWF8fGEoKSl9LHJlZ2lzdGVyOmZ1bmN0aW9uKGUpe3JldHVybiBzLnNldChlLCExKSxmdW5jdGlvbigpe3JldHVybiBzLmRlbGV0ZShlKX19fX0pLGw/dm9pZCAwOltyXSk7cmV0dXJuIG8udXNlTWVtbygoZnVuY3Rpb24oKXtzLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHMuc2V0KHQsITEpfSkpfSksW3JdKSx1LnVzZUVmZmVjdCgoZnVuY3Rpb24oKXshciYmIXMuc2l6ZSYmKG51bGw9PWF8fGEoKSl9KSxbcl0pLHUuY3JlYXRlRWxlbWVudCh4LlByb3ZpZGVyLHt2YWx1ZTpkfSx0KX07ZnVuY3Rpb24gbG8oKXtyZXR1cm4gbmV3IE1hcH1mdW5jdGlvbiBzbyhlKXtyZXR1cm4gZS5rZXl8fFwiXCJ9ZnVuY3Rpb24gY28oZSx0LG4pe3ZvaWQgMD09PW4mJihuPXt9KTt2YXIgcj1lZShlKT9lOkR0KGUpO3JldHVybiBJdChcIlwiLHIsdCxuKSx7c3RvcDpmdW5jdGlvbigpe3JldHVybiByLnN0b3AoKX19fWZ1bmN0aW9uIHVvKCl7dmFyIGU9RHQoMSksdD17bGVhZDp2b2lkIDAsZm9sbG93OnZvaWQgMCxjcm9zc2ZhZGVPcGFjaXR5OiExLHByZXNlcnZlRm9sbG93T3BhY2l0eTohMX0sbj1yLl9fYXNzaWduKHt9LHQpLG89e30sYT17fSxpPSExLGM9bnVsbCx1PTA7ZnVuY3Rpb24gZChuLG8pe3ZhciBhPXQubGVhZCxsPXQuZm9sbG93O2k9ITAsYz1udWxsO3ZhciB1PSExLGQ9ZnVuY3Rpb24oKXt1PSEwLGEmJmEuc2NoZWR1bGVSZW5kZXIoKSxsJiZsLnNjaGVkdWxlUmVuZGVyKCl9LGY9ZnVuY3Rpb24oKXtpPSExLGM9cy5nZXRGcmFtZURhdGEoKS50aW1lc3RhbXB9O3JldHVybiBvPW8mJlJ0KG8sXCJjcm9zc2ZhZGVcIiksY28oZSxuLHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxvKSx7b25VcGRhdGU6ZCxvbkNvbXBsZXRlOmZ1bmN0aW9uKCl7dT9mKCk6KGUuc2V0KG4pLHAuZGVmYXVsdC5yZWFkKGYpKSxkKCl9fSkpfXJldHVybntpc0FjdGl2ZTpmdW5jdGlvbigpe3JldHVybiBvJiYoaXx8cy5nZXRGcmFtZURhdGEoKS50aW1lc3RhbXA9PT1jKX0sZnJvbUxlYWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGQoMCxlKX0sdG9MZWFkOmZ1bmN0aW9uKHIpe3ZhciBvPTA7cmV0dXJuIHQucHJldlZhbHVlc3x8dC5mb2xsb3c/bi5sZWFkPT09dC5mb2xsb3cmJm4uZm9sbG93PT09dC5sZWFkJiYobz0xLWUuZ2V0KCkpOm89MSxlLnNldChvKSxkKDEscil9LHJlc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUuc2V0KDEpfSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGUuc3RvcCgpfSxnZXRDcm9zc2ZhZGVTdGF0ZTpmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbixyLGk9cy5nZXRGcmFtZURhdGEoKS50aW1lc3RhbXAsYz10LmxlYWQsZD10LmZvbGxvdztpZihpIT09dSYmYyl7dT1pO3ZhciBwPWMuZ2V0TGF0ZXN0VmFsdWVzKCk7T2JqZWN0LmFzc2lnbihvLHApO3ZhciBmPWQ/ZC5nZXRMYXRlc3RWYWx1ZXMoKTp0LnByZXZWYWx1ZXM7T2JqZWN0LmFzc2lnbihhLGYpO3ZhciBoPWUuZ2V0KCksZz1udWxsIT09KG49cC5vcGFjaXR5KSYmdm9pZCAwIT09bj9uOjEsdj1udWxsIT09KHI9bnVsbD09Zj92b2lkIDA6Zi5vcGFjaXR5KSYmdm9pZCAwIT09cj9yOjE7dC5jcm9zc2ZhZGVPcGFjaXR5JiZkPyhvLm9wYWNpdHk9bC5taXgoITEhPT1kLmlzVmlzaWJsZT8wOnYsZyxwbyhoKSksYS5vcGFjaXR5PXQucHJlc2VydmVGb2xsb3dPcGFjaXR5P3Y6bC5taXgodiwwLGZvKGgpKSk6ZHx8KG8ub3BhY2l0eT1sLm1peCh2LGcsaCkpLGZ1bmN0aW9uKGUsdCxuLHIsbyxhKXtmb3IodmFyIGk9MDtpPHZvO2krKyl7dmFyIHM9XCJib3JkZXJcIitnb1tpXStcIlJhZGl1c1wiLGM9Q28ocixzKSx1PUNvKG4scyk7aWYoKHZvaWQgMCE9PWN8fHZvaWQgMCE9PXUpJiYoY3x8KGM9MCksdXx8KHU9MCksXCJudW1iZXJcIj09dHlwZW9mIGMmJlwibnVtYmVyXCI9PXR5cGVvZiB1KSl7dmFyIGQ9TWF0aC5tYXgobC5taXgoYyx1LGEpLDApO2Vbc109dFtzXT1kfX1pZihyLnJvdGF0ZXx8bi5yb3RhdGUpe3ZhciBwPWwubWl4KHIucm90YXRlfHwwLG4ucm90YXRlfHwwLGEpO2Uucm90YXRlPXQucm90YXRlPXB9IW8mJm4uYmFja2dyb3VuZENvbG9yJiZyLmJhY2tncm91bmRDb2xvciYmKGUuYmFja2dyb3VuZENvbG9yPXQuYmFja2dyb3VuZENvbG9yPWwubWl4Q29sb3Ioci5iYWNrZ3JvdW5kQ29sb3Isbi5iYWNrZ3JvdW5kQ29sb3IpKGEpKX0obyxhLHAsZnx8e30sQm9vbGVhbihkKSxoKX19KCksbj09PXQubGVhZD9vOm49PT10LmZvbGxvdz9hOnZvaWQgMH0sc2V0T3B0aW9uczpmdW5jdGlvbihlKXtuPXQsdD1lLG89e30sYT17fX0sZ2V0TGF0ZXN0VmFsdWVzOmZ1bmN0aW9uKCl7cmV0dXJuIG99fX12YXIgcG89aG8oMCwuNSxsLmNpcmNPdXQpLGZvPWhvKC41LC45NSxsLmxpbmVhcik7ZnVuY3Rpb24gaG8oZSx0LG4pe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gcjxlPzA6cj50PzE6bihsLnByb2dyZXNzKGUsdCxyKSl9fXZhciBnbz1bXCJUb3BMZWZ0XCIsXCJUb3BSaWdodFwiLFwiQm90dG9tTGVmdFwiLFwiQm90dG9tUmlnaHRcIl0sdm89Z28ubGVuZ3RoO2Z1bmN0aW9uIENvKGUsdCl7dmFyIG47cmV0dXJuIG51bGwhPT0obj1lW3RdKSYmdm9pZCAwIT09bj9uOmUuYm9yZGVyUmFkaXVzfXZhciBtbz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIHQ9bnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiB0LmNoaWxkcmVuPW5ldyBTZXQsdC5zdGFja3M9bmV3IE1hcCx0Lmhhc01vdW50ZWQ9ITEsdC51cGRhdGVTY2hlZHVsZWQ9ITEsdC5yZW5kZXJTY2hlZHVsZWQ9ITEsdC5zeW5jQ29udGV4dD1yLl9fYXNzaWduKHIuX19hc3NpZ24oe30seXIoKSkse3N5bmNVcGRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHQuc2NoZWR1bGVVcGRhdGUoZSl9LGZvcmNlVXBkYXRlOmZ1bmN0aW9uKCl7dC5zeW5jQ29udGV4dD1yLl9fYXNzaWduKHt9LHQuc3luY0NvbnRleHQpLHQuc2NoZWR1bGVVcGRhdGUoITApfSxyZWdpc3RlcjpmdW5jdGlvbihlKXtyZXR1cm4gdC5hZGRDaGlsZChlKX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3JldHVybiB0LnJlbW92ZUNoaWxkKGUpfX0pLHR9cmV0dXJuIHIuX19leHRlbmRzKHQsZSksdC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt0aGlzLmhhc01vdW50ZWQ9ITB9LHQucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT1mdW5jdGlvbigpe3RoaXMuc3RhcnRMYXlvdXRBbmltYXRpb24oKX0sdC5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVuZGVyU2NoZWR1bGVkPSEwLCEwfSx0LnByb3RvdHlwZS5zdGFydExheW91dEFuaW1hdGlvbj1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5yZW5kZXJTY2hlZHVsZWQ9dGhpcy51cGRhdGVTY2hlZHVsZWQ9ITE7dmFyIHQ9dGhpcy5wcm9wcy50eXBlO3RoaXMuY2hpbGRyZW4uZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5pc1ByZXNlbnQ/ZS5wcmVzZW5jZSE9PWFyLkVudGVyaW5nJiYoZS5wcmVzZW5jZT1lLnByZXNlbmNlPT09YXIuRXhpdGluZz9hci5FbnRlcmluZzphci5QcmVzZW50KTplLnByZXNlbmNlPWFyLkV4aXRpbmd9KSksdGhpcy51cGRhdGVTdGFja3MoKTt2YXIgbj17bGF5b3V0UmVhZHk6ZnVuY3Rpb24obil7dm9pZCAwIT09bi5nZXRMYXlvdXRJZCgpP2UuZ2V0U3RhY2sobikuYW5pbWF0ZShuLFwiY3Jvc3NmYWRlXCI9PT10KTpuLm5vdGlmeUxheW91dFJlYWR5KCl9LHBhcmVudDp0aGlzLmNvbnRleHQudmlzdWFsRWxlbWVudH07dGhpcy5jaGlsZHJlbi5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gZS5zeW5jQ29udGV4dC5hZGQodCl9KSksdGhpcy5zeW5jQ29udGV4dC5mbHVzaChuKSx0aGlzLnN0YWNrcy5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGVhclNuYXBzaG90KCl9KSl9LHQucHJvdG90eXBlLnVwZGF0ZVN0YWNrcz1mdW5jdGlvbigpe3RoaXMuc3RhY2tzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLnVwZGF0ZUxlYWRBbmRGb2xsb3coKX0pKX0sdC5wcm90b3R5cGUuc2NoZWR1bGVVcGRhdGU9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9ITEpLCFlJiZ0aGlzLnVwZGF0ZVNjaGVkdWxlZHx8KHRoaXMudXBkYXRlU2NoZWR1bGVkPSEwLHRoaXMuY2hpbGRyZW4uZm9yRWFjaCgoZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0hMSxuPXt9LHI9MDtyPHoubGVuZ3RoO3IrKyl7dmFyIG89XCJyb3RhdGVcIit6W3JdO2UuaGFzVmFsdWUobykmJjAhPT1lLmdldFN0YXRpY1ZhbHVlKG8pJiYodD0hMCxuW29dPWUuZ2V0U3RhdGljVmFsdWUobyksZS5zZXRTdGF0aWNWYWx1ZShvLDApKX1pZih0KXtmb3IodmFyIG8gaW4gZS5zeW5jUmVuZGVyKCksbillLnNldFN0YXRpY1ZhbHVlKG8sbltvXSk7ZS5zY2hlZHVsZVJlbmRlcigpfX0oZSksZS5zaG91bGRSZXNldFRyYW5zZm9ybSgpJiZlLnJlc2V0VHJhbnNmb3JtKCl9KSksdGhpcy5jaGlsZHJlbi5mb3JFYWNoKFZuKSx0aGlzLnN0YWNrcy5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS51cGRhdGVTbmFwc2hvdCgpfSkpLCFlJiZ0aGlzLnJlbmRlclNjaGVkdWxlZHx8KHRoaXMucmVuZGVyU2NoZWR1bGVkPSEwLHRoaXMuZm9yY2VVcGRhdGUoKSkpfSx0LnByb3RvdHlwZS5hZGRDaGlsZD1mdW5jdGlvbihlKXt0aGlzLmNoaWxkcmVuLmFkZChlKSx0aGlzLmFkZFRvU3RhY2soZSksZS5wcmVzZW5jZT10aGlzLmhhc01vdW50ZWQ/YXIuRW50ZXJpbmc6YXIuUHJlc2VudH0sdC5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ9ZnVuY3Rpb24oZSl7dGhpcy5zY2hlZHVsZVVwZGF0ZSgpLHRoaXMuY2hpbGRyZW4uZGVsZXRlKGUpLHRoaXMucmVtb3ZlRnJvbVN0YWNrKGUpfSx0LnByb3RvdHlwZS5hZGRUb1N0YWNrPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0U3RhY2soZSk7bnVsbD09dHx8dC5hZGQoZSl9LHQucHJvdG90eXBlLnJlbW92ZUZyb21TdGFjaz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldFN0YWNrKGUpO251bGw9PXR8fHQucmVtb3ZlKGUpfSx0LnByb3RvdHlwZS5nZXRTdGFjaz1mdW5jdGlvbihlKXt2YXIgdCxuLG8sYSxpLGwscyxjLHU9ZS5nZXRMYXlvdXRJZCgpO2lmKHZvaWQgMCE9PXUpcmV0dXJuIXRoaXMuc3RhY2tzLmhhcyh1KSYmdGhpcy5zdGFja3Muc2V0KHUsKGE9bmV3IFNldCxpPXtsZWFkSXNFeGl0aW5nOiExfSxsPXIuX19hc3NpZ24oe30saSkscz11bygpLGM9ITEse2FkZDpmdW5jdGlvbihlKXtlLnNldENyb3NzZmFkZXIocyksYS5hZGQoZSksbyYmKGUucHJldkRyYWdDdXJzb3I9byksaS5sZWFkfHwoaS5sZWFkPWUpfSxyZW1vdmU6ZnVuY3Rpb24oZSl7YS5kZWxldGUoZSl9LGdldExlYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5sZWFkfSx1cGRhdGVTbmFwc2hvdDpmdW5jdGlvbigpe2lmKGkubGVhZCl7dD1zLmlzQWN0aXZlKCk/cy5nZXRMYXRlc3RWYWx1ZXMoKTppLmxlYWQuZ2V0TGF0ZXN0VmFsdWVzKCksbj1pLmxlYWQucHJldlZpZXdwb3J0Qm94O3ZhciBlPW5yLmdldChpLmxlYWQpO2UmJmUuaXNEcmFnZ2luZyYmKG89ZS5jdXJzb3JQcm9ncmVzcyl9fSxjbGVhclNuYXBzaG90OmZ1bmN0aW9uKCl7bz1uPXZvaWQgMH0sdXBkYXRlTGVhZEFuZEZvbGxvdzpmdW5jdGlvbigpe3ZhciBlLG4sbztsPXIuX19hc3NpZ24oe30saSk7Zm9yKHZhciB1PUFycmF5LmZyb20oYSksZD11Lmxlbmd0aDtkLS07ZD49MCl7dmFyIHA9dVtkXTtpZihuJiYobnVsbCE9b3x8KG89cCkpLG51bGwhPW58fChuPXApLG4mJm8pYnJlYWt9aS5sZWFkPW4saS5mb2xsb3c9byxpLmxlYWRJc0V4aXRpbmc9KG51bGw9PT0oZT1pLmxlYWQpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnByZXNlbmNlKT09PWFyLkV4aXRpbmcscy5zZXRPcHRpb25zKHtsZWFkOm4sZm9sbG93Om8scHJldlZhbHVlczp0LGNyb3NzZmFkZU9wYWNpdHk6KG51bGw9PW8/dm9pZCAwOm8uaXNQcmVzZW5jZVJvb3QpfHwobnVsbD09bj92b2lkIDA6bi5pc1ByZXNlbmNlUm9vdCl9KSxpLmxlYWQ9PT1sLmZvbGxvd3x8bC5sZWFkPT09aS5sZWFkJiZsLmxlYWRJc0V4aXRpbmc9PT1pLmxlYWRJc0V4aXRpbmd8fChjPSEwKX0sYW5pbWF0ZTpmdW5jdGlvbihlLHQpe3ZhciByO2lmKHZvaWQgMD09PXQmJih0PSExKSxlPT09aS5sZWFkKXt0P2UucG9pbnRUbyhpLmxlYWQpOmUuc2V0VmlzaWJpbGl0eSghMCk7dmFyIG89e30sYT1udWxsPT09KHI9aS5mb2xsb3cpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmdldFByb2plY3Rpb25QYXJlbnQoKTtpZihhJiYoby5wcmV2UGFyZW50PWEpLGUucHJlc2VuY2U9PT1hci5FbnRlcmluZz9vLm9yaWdpbkJveD1pLmZvbGxvdz9pLmZvbGxvdy5wcmV2Vmlld3BvcnRCb3g6bjplLnByZXNlbmNlPT09YXIuRXhpdGluZyYmKG8udGFyZ2V0Qm94PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIG51bGw9PT0oZT1pLmZvbGxvdyl8fHZvaWQgMD09PWU/dm9pZCAwOmUuZ2V0TGF5b3V0U3RhdGUoKS5sYXlvdXR9KCkpLGMpe2M9ITE7dmFyIGw9ZS5nZXREZWZhdWx0VHJhbnNpdGlvbigpO2UucHJlc2VuY2U9PT1hci5FbnRlcmluZz9zLnRvTGVhZChsKTpzLmZyb21MZWFkKGwpfWUubm90aWZ5TGF5b3V0UmVhZHkobyl9ZWxzZSB0P2kubGVhZCYmZS5wb2ludFRvKGkubGVhZCk6ZS5zZXRWaXNpYmlsaXR5KCExKX19KSksdGhpcy5zdGFja3MuZ2V0KHUpfSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdS5jcmVhdGVFbGVtZW50KGtyLlByb3ZpZGVyLHt2YWx1ZTp0aGlzLnN5bmNDb250ZXh0fSx0aGlzLnByb3BzLmNoaWxkcmVuKX0sdC5jb250ZXh0VHlwZT1iLHR9KHUuQ29tcG9uZW50KTtmdW5jdGlvbiB3byhlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlfXZhciBibz1yLl9fYXNzaWduKHIuX19hc3NpZ24oe3JlbmRlcmVyOmVvfSxvbiksZnQpLHlvPXIuX19hc3NpZ24oci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGJvKSxsciksTHIpO2Z1bmN0aW9uIHhvKGUpe3ZhciB0PWsoKGZ1bmN0aW9uKCl7cmV0dXJuIER0KGUpfSkpO2lmKG8udXNlQ29udGV4dCh3KS5pc1N0YXRpYyl7dmFyIG49ci5fX3JlYWQoby51c2VTdGF0ZShlKSwyKVsxXTtvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdC5vbkNoYW5nZShuKX0pLFtdKX1yZXR1cm4gdH1mdW5jdGlvbiBrbyhlLHQpe28udXNlRWZmZWN0KChmdW5jdGlvbigpe2lmKGVlKGUpKXJldHVybiBlLm9uQ2hhbmdlKHQpfSksW3RdKX1mdW5jdGlvbiBTbyhlLHQpe3ZhciBuPXhvKHQoKSkscj1mdW5jdGlvbigpe3JldHVybiBuLnNldCh0KCkpfTtyZXR1cm4gcigpLGZ1bmN0aW9uKGUsdCl7by51c2VFZmZlY3QoKGZ1bmN0aW9uKCl7dmFyIG49ZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLm9uQ2hhbmdlKHQpfSkpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlKCl9KSl9fSkpfShlLChmdW5jdGlvbigpe3JldHVybiBwLmRlZmF1bHQudXBkYXRlKHIsITEsITApfSkpLG59dmFyIE9vLE1vPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgZSYmZS5taXh9KGUpP2UubWl4OnZvaWQgMH07ZnVuY3Rpb24gTG8oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07dmFyIG49IUFycmF5LmlzQXJyYXkoZVswXSksbz1uPzA6LTEsYT1lWzArb10saT1lWzErb10scz1lWzIrb10sYz1lWzMrb10sdT1sLmludGVycG9sYXRlKGkscyxyLl9fYXNzaWduKHttaXhlcjpNbyhzWzBdKX0sYykpO3JldHVybiBuP3UoYSk6dX1mdW5jdGlvbiBfbyhlLHQsbixvKXt2YXIgYT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6TG8odCxuLG8pO3JldHVybiBBcnJheS5pc0FycmF5KGUpP1BvKGUsYSk6UG8oW2VdLChmdW5jdGlvbihlKXt2YXIgdD1yLl9fcmVhZChlLDEpWzBdO3JldHVybiBhKHQpfSkpfWZ1bmN0aW9uIFBvKGUsdCl7dmFyIG49aygoZnVuY3Rpb24oKXtyZXR1cm5bXX0pKTtyZXR1cm4gU28oZSwoZnVuY3Rpb24oKXtuLmxlbmd0aD0wO2Zvcih2YXIgcj1lLmxlbmd0aCxvPTA7bzxyO28rKyluW29dPWVbb10uZ2V0KCk7cmV0dXJuIHQobil9KSl9ZnVuY3Rpb24gRW8oKXtyZXR1cm57c2Nyb2xsWDpEdCgwKSxzY3JvbGxZOkR0KDApLHNjcm9sbFhQcm9ncmVzczpEdCgwKSxzY3JvbGxZUHJvZ3Jlc3M6RHQoMCl9fWZ1bmN0aW9uIGpvKGUsdCxuKXtuLnNldChlJiZ0P2UvdDowKX1mdW5jdGlvbiBSbyhlLHQpe3ZhciBuPWZ1bmN0aW9uKCl7dmFyIG49dCgpLHI9bi54T2Zmc2V0LG89bi55T2Zmc2V0LGE9bi54TWF4T2Zmc2V0LGk9bi55TWF4T2Zmc2V0O2Uuc2Nyb2xsWC5zZXQociksZS5zY3JvbGxZLnNldChvKSxqbyhyLGEsZS5zY3JvbGxYUHJvZ3Jlc3MpLGpvKG8saSxlLnNjcm9sbFlQcm9ncmVzcyl9O3JldHVybiBuKCksbn1mdW5jdGlvbiBJbygpe3JldHVybnt4T2Zmc2V0OndpbmRvdy5wYWdlWE9mZnNldCx5T2Zmc2V0OndpbmRvdy5wYWdlWU9mZnNldCx4TWF4T2Zmc2V0OmRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGgtd2luZG93LmlubmVyV2lkdGgseU1heE9mZnNldDpkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodC13aW5kb3cuaW5uZXJIZWlnaHR9fXZhciBWbyxIbz0hMTtmdW5jdGlvbiBBbygpe3ZhciBlPSExLHQ9W10sbj1uZXcgU2V0LG89e3N1YnNjcmliZTpmdW5jdGlvbihlKXtyZXR1cm4gbi5hZGQoZSksZnVuY3Rpb24oKXtuLmRlbGV0ZShlKX19LHN0YXJ0OmZ1bmN0aW9uKHIsbyl7aWYoZSl7dmFyIGE9W107cmV0dXJuIG4uZm9yRWFjaCgoZnVuY3Rpb24oZSl7YS5wdXNoKHF0KGUscix7dHJhbnNpdGlvbk92ZXJyaWRlOm99KSl9KSksUHJvbWlzZS5hbGwoYSl9cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihlKXt0LnB1c2goe2FuaW1hdGlvbjpbcixvXSxyZXNvbHZlOmV9KX0pKX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBhLmludmFyaWFudChlLFwiY29udHJvbHMuc2V0KCkgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGFmdGVyIGEgY29tcG9uZW50IGhhcyBtb3VudGVkLiBDb25zaWRlciBjYWxsaW5nIHdpdGhpbiBhIHVzZUVmZmVjdCBob29rLlwiKSxuLmZvckVhY2goKGZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe0FycmF5LmlzQXJyYXkodCk/VXQoZSx0KTpcInN0cmluZ1wiPT10eXBlb2YgdD9VdChlLFt0XSk6V3QoZSx0KX0oZSx0KX0pKX0sc3RvcDpmdW5jdGlvbigpe24uZm9yRWFjaCgoZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUpe2UuZm9yRWFjaFZhbHVlKChmdW5jdGlvbihlKXtyZXR1cm4gZS5zdG9wKCl9KSl9KGUpfSkpfSxtb3VudDpmdW5jdGlvbigpe3JldHVybiBlPSEwLHQuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5hbmltYXRpb24sbj1lLnJlc29sdmU7by5zdGFydC5hcHBseShvLHIuX19zcHJlYWRBcnJheShbXSxyLl9fcmVhZCh0KSkpLnRoZW4obil9KSksZnVuY3Rpb24oKXtlPSExLG8uc3RvcCgpfX19O3JldHVybiBvfXZhciBUbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmNvbXBvbmVudENvbnRyb2xzPW5ldyBTZXR9cmV0dXJuIGUucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLmNvbXBvbmVudENvbnRyb2xzLmFkZChlKSxmdW5jdGlvbigpe3JldHVybiB0LmNvbXBvbmVudENvbnRyb2xzLmRlbGV0ZShlKX19LGUucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGUsdCl7dGhpcy5jb21wb25lbnRDb250cm9scy5mb3JFYWNoKChmdW5jdGlvbihuKXtuLnN0YXJ0KGUubmF0aXZlRXZlbnR8fGUsdCl9KSl9LGUucHJvdG90eXBlLnVwZGF0ZUNvbnN0cmFpbnRzPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPSEwKSx0aGlzLmNvbXBvbmVudENvbnRyb2xzLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UudXBkYXRlQ29uc3RyYWludHMoKX0pKSxlJiZRbigpfSxlfSgpLERvPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBUb30sQm89ZnVuY3Rpb24oKXtyZXR1cm57fX0sWm89SHIoe2J1aWxkOmZ1bmN0aW9uKCl7fSxtZWFzdXJlVmlld3BvcnRCb3g6ZnVuY3Rpb24oKXtyZXR1cm57eDp7bWluOjAsbWF4OjF9LHk6e21pbjowLG1heDoxfX19LHJlc2V0VHJhbnNmb3JtOmZ1bmN0aW9uKCl7fSxyZXN0b3JlVHJhbnNmb3JtOmZ1bmN0aW9uKCl7fSxyZW1vdmVWYWx1ZUZyb21SZW5kZXJTdGF0ZTpmdW5jdGlvbigpe30scmVuZGVyOmZ1bmN0aW9uKCl7fSxzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHM6Qm8scmVhZFZhbHVlRnJvbUluc3RhbmNlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbi5pbml0aWFsU3RhdGVbdF18fDB9LG1ha2VUYXJnZXRBbmltYXRhYmxlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC50cmFuc2l0aW9uLG89dC50cmFuc2l0aW9uRW5kLGE9ci5fX3Jlc3QodCxbXCJ0cmFuc2l0aW9uXCIsXCJ0cmFuc2l0aW9uRW5kXCJdKTtyZXR1cm4genQoZSxhLEt0KGEsbnx8e30sZSkpLHIuX19hc3NpZ24oe3RyYW5zaXRpb246bix0cmFuc2l0aW9uRW5kOm99LGEpfX0pLCRvPUhlKHtzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHM6Qm8sY3JlYXRlUmVuZGVyU3RhdGU6Qm99KSxObz1mdW5jdGlvbihlKXtyZXR1cm4gZT4uMDAxPzEvZToxZTV9LEZvPSExO3QuQW5pbWF0ZVByZXNlbmNlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2hpbGRyZW4sbj1lLmN1c3RvbSxhPWUuaW5pdGlhbCxpPXZvaWQgMD09PWF8fGEsbD1lLm9uRXhpdENvbXBsZXRlLHM9ZS5leGl0QmVmb3JlRW50ZXIsYz1lLnByZXNlbmNlQWZmZWN0c0xheW91dCxkPXZvaWQgMD09PWN8fGMscD1mdW5jdGlvbigpe3ZhciBlPW8udXNlUmVmKCExKSx0PXIuX19yZWFkKG8udXNlU3RhdGUoMCksMiksbj10WzBdLGE9dFsxXTtyZXR1cm4gZHQoKGZ1bmN0aW9uKCl7cmV0dXJuIGUuY3VycmVudD0hMH0pKSxvLnVzZUNhbGxiYWNrKChmdW5jdGlvbigpeyFlLmN1cnJlbnQmJmEobisxKX0pLFtuXSl9KCksZj1vLnVzZUNvbnRleHQoa3IpO09yKGYpJiYocD1mLmZvcmNlVXBkYXRlKTt2YXIgaD1vLnVzZVJlZighMCksZz1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gby5DaGlsZHJlbi5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe28uaXNWYWxpZEVsZW1lbnQoZSkmJnQucHVzaChlKX0pKSx0fSh0KSx2PW8udXNlUmVmKGcpLEM9by51c2VSZWYobmV3IE1hcCkuY3VycmVudCxtPW8udXNlUmVmKG5ldyBTZXQpLmN1cnJlbnQ7aWYoZnVuY3Rpb24oZSx0KXtlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPXNvKGUpO3Quc2V0KG4sZSl9KSl9KGcsQyksaC5jdXJyZW50KXJldHVybiBoLmN1cnJlbnQ9ITEsdS5jcmVhdGVFbGVtZW50KHUuRnJhZ21lbnQsbnVsbCxnLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHUuY3JlYXRlRWxlbWVudChpbyx7a2V5OnNvKGUpLGlzUHJlc2VudDohMCxpbml0aWFsOiEhaSYmdm9pZCAwLHByZXNlbmNlQWZmZWN0c0xheW91dDpkfSxlKX0pKSk7Zm9yKHZhciB3PXIuX19zcHJlYWRBcnJheShbXSxyLl9fcmVhZChnKSksYj12LmN1cnJlbnQubWFwKHNvKSx5PWcubWFwKHNvKSx4PWIubGVuZ3RoLGs9MDtrPHg7aysrKXt2YXIgUz1iW2tdOy0xPT09eS5pbmRleE9mKFMpP20uYWRkKFMpOm0uZGVsZXRlKFMpfXJldHVybiBzJiZtLnNpemUmJih3PVtdKSxtLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKC0xPT09eS5pbmRleE9mKGUpKXt2YXIgdD1DLmdldChlKTtpZih0KXt2YXIgcj1iLmluZGV4T2YoZSk7dy5zcGxpY2UociwwLHUuY3JlYXRlRWxlbWVudChpbyx7a2V5OnNvKHQpLGlzUHJlc2VudDohMSxvbkV4aXRDb21wbGV0ZTpmdW5jdGlvbigpe0MuZGVsZXRlKGUpLG0uZGVsZXRlKGUpO3ZhciB0PXYuY3VycmVudC5maW5kSW5kZXgoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleT09PWV9KSk7di5jdXJyZW50LnNwbGljZSh0LDEpLG0uc2l6ZXx8KHYuY3VycmVudD1nLHAoKSxsJiZsKCkpfSxjdXN0b206bixwcmVzZW5jZUFmZmVjdHNMYXlvdXQ6ZH0sdCkpfX19KSksdz13Lm1hcCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5rZXk7cmV0dXJuIG0uaGFzKHQpP2U6dS5jcmVhdGVFbGVtZW50KGlvLHtrZXk6c28oZSksaXNQcmVzZW50OiEwLHByZXNlbmNlQWZmZWN0c0xheW91dDpkfSxlKX0pKSx2LmN1cnJlbnQ9dyx1LmNyZWF0ZUVsZW1lbnQodS5GcmFnbWVudCxudWxsLG0uc2l6ZT93OncubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gby5jbG9uZUVsZW1lbnQoZSl9KSkpfSx0LkFuaW1hdGVTaGFyZWRMYXlvdXQ9bW8sdC5EcmFnQ29udHJvbHM9VG8sdC5GbGF0VHJlZT1Wcix0LkZyYW1lclRyZWVMYXlvdXRDb250ZXh0PVNyLHQuTGF5b3V0R3JvdXBDb250ZXh0PVAsdC5MYXp5TW90aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2hpbGRyZW4sbj1lLmZlYXR1cmVzLGE9ZS5zdHJpY3QsaT12b2lkIDAhPT1hJiZhLGw9ci5fX3JlYWQoby51c2VTdGF0ZSghd28obikpLDIpWzFdLHM9by51c2VSZWYodm9pZCAwKTtpZighd28obikpe3ZhciBjPW4ucmVuZGVyZXIsZD1yLl9fcmVzdChuLFtcInJlbmRlcmVyXCJdKTtzLmN1cnJlbnQ9YyxnKGQpfXJldHVybiBvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXt3byhuKSYmbigpLnRoZW4oKGZ1bmN0aW9uKGUpe3ZhciB0PWUucmVuZGVyZXI7ZyhyLl9fcmVzdChlLFtcInJlbmRlcmVyXCJdKSkscy5jdXJyZW50PXQsbCghMCl9KSl9KSxbXSksdS5jcmVhdGVFbGVtZW50KHYuUHJvdmlkZXIse3ZhbHVlOntyZW5kZXJlcjpzLmN1cnJlbnQsc3RyaWN0Oml9fSx0KX0sdC5Nb3Rpb25Db25maWc9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jaGlsZHJlbixuPXIuX19yZXN0KGUsW1wiY2hpbGRyZW5cIl0pOyhuPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxvLnVzZUNvbnRleHQodykpLG4pKS5pc1N0YXRpYz1rKChmdW5jdGlvbigpe3JldHVybiBuLmlzU3RhdGljfSkpO3ZhciBhPVwib2JqZWN0XCI9PXR5cGVvZiBuLnRyYW5zaXRpb24/bi50cmFuc2l0aW9uLnRvU3RyaW5nKCk6XCJcIixpPW8udXNlTWVtbygoZnVuY3Rpb24oKXtyZXR1cm4gbn0pLFthLG4udHJhbnNmb3JtUGFnZVBvaW50XSk7cmV0dXJuIHUuY3JlYXRlRWxlbWVudCh3LlByb3ZpZGVyLHt2YWx1ZTppfSx0KX0sdC5Nb3Rpb25Db25maWdDb250ZXh0PXcsdC5Nb3Rpb25WYWx1ZT1UdCx0LlByZXNlbmNlQ29udGV4dD14LHQuU2hhcmVkTGF5b3V0Q29udGV4dD1rcix0LmFkZFNjYWxlQ29ycmVjdGlvbj1VLHQuYW5pbWF0ZT1jbyx0LmFuaW1hdGVWaXN1YWxFbGVtZW50PXF0LHQuYW5pbWF0aW9uQ29udHJvbHM9QW8sdC5iYXRjaExheW91dD1Ybix0LmNyZWF0ZUJhdGNoZXI9eXIsdC5jcmVhdGVDcm9zc2ZhZGVyPXVvLHQuY3JlYXRlRG9tTW90aW9uQ29tcG9uZW50PWZ1bmN0aW9uKGUpe3JldHVybiBaKFplKGUse2ZvcndhcmRNb3Rpb25Qcm9wczohMX0sdG8sZW8pKX0sdC5jcmVhdGVNb3Rpb25Db21wb25lbnQ9Wix0LmRvbUFuaW1hdGlvbj1ibyx0LmRvbU1heD15byx0LmZsdXNoTGF5b3V0PVFuLHQuaXNWYWxpZE1vdGlvblByb3A9ZGUsdC5tPXJvLHQubW90aW9uPW5vLHQubW90aW9uVmFsdWU9RHQsdC5yZXNvbHZlTW90aW9uVmFsdWU9SWUsdC5zbmFwc2hvdFZpZXdwb3J0Qm94PVZuLHQudHJhbnNmb3JtPUxvLHQudXNlQW5pbWF0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9ayhBbyk7cmV0dXJuIG8udXNlRWZmZWN0KGUubW91bnQsW10pLGV9LHQudXNlQ3ljbGU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07dmFyIG49by51c2VSZWYoMCksYT1yLl9fcmVhZChvLnVzZVN0YXRlKGVbbi5jdXJyZW50XSksMiksaT1hWzBdLHM9YVsxXTtyZXR1cm5baSxmdW5jdGlvbih0KXtuLmN1cnJlbnQ9XCJudW1iZXJcIiE9dHlwZW9mIHQ/bC53cmFwKDAsZS5sZW5ndGgsbi5jdXJyZW50KzEpOnQscyhlW24uY3VycmVudF0pfV19LHQudXNlRGVwcmVjYXRlZEFuaW1hdGVkU3RhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ci5fX3JlYWQoby51c2VTdGF0ZShlKSwyKSxuPXRbMF0sYT10WzFdLGk9JG8oe30sITEpLGw9aygoZnVuY3Rpb24oKXtyZXR1cm4gWm8oe3Byb3BzOnt9LHZpc3VhbFN0YXRlOml9LHtpbml0aWFsU3RhdGU6ZX0pfSkpO3JldHVybiBvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gbC5tb3VudCh7fSksbC51bm1vdW50KCl9KSxbXSksby51c2VFZmZlY3QoKGZ1bmN0aW9uKCl7bC5zZXRQcm9wcyh7b25VcGRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGEoci5fX2Fzc2lnbih7fSxlKSl9fSl9KSksW24saygoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHF0KGwsZSl9fSkpXX0sdC51c2VEZXByZWNhdGVkSW52ZXJ0ZWRTY2FsZT1mdW5jdGlvbihlKXt2YXIgdD14bygxKSxuPXhvKDEpLHI9eSgpO3JldHVybiBhLmludmFyaWFudCghKCFlJiYhciksXCJJZiBubyBzY2FsZSB2YWx1ZXMgYXJlIHByb3ZpZGVkLCB1c2VJbnZlcnRlZFNjYWxlIG11c3QgYmUgdXNlZCB3aXRoaW4gYSBjaGlsZCBvZiBhbm90aGVyIG1vdGlvbiBjb21wb25lbnQuXCIpLGEud2FybmluZyhGbyxcInVzZUludmVydGVkU2NhbGUgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDMuMC4gVXNlIHRoZSBsYXlvdXQgcHJvcCBpbnN0ZWFkLlwiKSxGbz0hMCxlPyh0PWUuc2NhbGVYfHx0LG49ZS5zY2FsZVl8fG4pOnImJih0PXIuZ2V0VmFsdWUoXCJzY2FsZVhcIiwxKSxuPXIuZ2V0VmFsdWUoXCJzY2FsZVlcIiwxKSkse3NjYWxlWDpfbyh0LE5vKSxzY2FsZVk6X28obixObyl9fSx0LnVzZURvbUV2ZW50PU5lLHQudXNlRHJhZ0NvbnRyb2xzPWZ1bmN0aW9uKCl7cmV0dXJuIGsoRG8pfSx0LnVzZUVsZW1lbnRTY3JvbGw9ZnVuY3Rpb24oZSl7dmFyIHQ9ayhFbyk7cmV0dXJuIGooKGZ1bmN0aW9uKCl7dmFyIG49ZS5jdXJyZW50O2lmKGEuaW52YXJpYW50KCEhbixcInJlZiBwcm92aWRlZCB0byB1c2VTY3JvbGwgbXVzdCBiZSBwYXNzZWQgaW50byBhIEhUTUwgZWxlbWVudC5cIiksbil7dmFyIHI9Um8odCxmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm57eE9mZnNldDplLnNjcm9sbExlZnQseU9mZnNldDplLnNjcm9sbFRvcCx4TWF4T2Zmc2V0OmUuc2Nyb2xsV2lkdGgtZS5vZmZzZXRXaWR0aCx5TWF4T2Zmc2V0OmUuc2Nyb2xsSGVpZ2h0LWUub2Zmc2V0SGVpZ2h0fX19KG4pKSxvPSRlKG4sXCJzY3JvbGxcIixyLHtwYXNzaXZlOiEwfSksaT0kZShuLFwicmVzaXplXCIscik7cmV0dXJuIGZ1bmN0aW9uKCl7byYmbygpLGkmJmkoKX19fSksW10pLHR9LHQudXNlSXNQcmVzZW50PWZ1bmN0aW9uKCl7cmV0dXJuIE8oby51c2VDb250ZXh0KHgpKX0sdC51c2VNb3Rpb25UZW1wbGF0ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuLTFdPWFyZ3VtZW50c1tuXTt2YXIgcj1lLmxlbmd0aDtyZXR1cm4gU28odCwoZnVuY3Rpb24oKXtmb3IodmFyIG49XCJcIixvPTA7bzxyO28rKyluKz1lW29dLHRbb10mJihuKz10W29dLmdldCgpKTtyZXR1cm4gbn0pKX0sdC51c2VNb3Rpb25WYWx1ZT14byx0LnVzZVByZXNlbmNlPVMsdC51c2VSZWR1Y2VkTW90aW9uPWZ1bmN0aW9uKCl7IVZvJiZmdW5jdGlvbigpe2lmKFZvPUR0KG51bGwpLFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cpaWYod2luZG93Lm1hdGNoTWVkaWEpe3ZhciBlPXdpbmRvdy5tYXRjaE1lZGlhKFwiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb24pXCIpLHQ9ZnVuY3Rpb24oKXtyZXR1cm4gVm8uc2V0KGUubWF0Y2hlcyl9O2UuYWRkTGlzdGVuZXIodCksdCgpfWVsc2UgVm8uc2V0KCExKX0oKTt2YXIgZT1yLl9fcmVhZChvLnVzZVN0YXRlKFZvLmdldCgpKSwyKSx0PWVbMF0sbj1lWzFdO3JldHVybiBrbyhWbyxuKSx0fSx0LnVzZVNwcmluZz1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PXt9KTt2YXIgbj1vLnVzZUNvbnRleHQodykuaXNTdGF0aWMsYT1vLnVzZVJlZihudWxsKSxpPXhvKGVlKGUpP2UuZ2V0KCk6ZSk7cmV0dXJuIG8udXNlTWVtbygoZnVuY3Rpb24oKXtyZXR1cm4gaS5hdHRhY2goKGZ1bmN0aW9uKGUsbyl7cmV0dXJuIG4/byhlKTooYS5jdXJyZW50JiZhLmN1cnJlbnQuc3RvcCgpLGEuY3VycmVudD1sLmFuaW1hdGUoci5fX2Fzc2lnbihyLl9fYXNzaWduKHtmcm9tOmkuZ2V0KCksdG86ZSx2ZWxvY2l0eTppLmdldFZlbG9jaXR5KCl9LHQpLHtvblVwZGF0ZTpvfSkpLGkuZ2V0KCkpfSkpfSksT2JqZWN0LnZhbHVlcyh0KSksa28oZSwoZnVuY3Rpb24oZSl7cmV0dXJuIGkuc2V0KHBhcnNlRmxvYXQoZSkpfSkpLGl9LHQudXNlVHJhbnNmb3JtPV9vLHQudXNlVmVsb2NpdHk9ZnVuY3Rpb24oZSl7dmFyIHQ9eG8oZS5nZXRWZWxvY2l0eSgpKTtyZXR1cm4gby51c2VFZmZlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIGUudmVsb2NpdHlVcGRhdGVTdWJzY3JpYmVycy5hZGQoKGZ1bmN0aW9uKGUpe3Quc2V0KGUpfSkpfSksW2VdKSx0fSx0LnVzZVZpZXdwb3J0U2Nyb2xsPWZ1bmN0aW9uKCl7cmV0dXJuIE9vfHwoT289RW8oKSksaigoZnVuY3Rpb24oKXshSG8mJmZ1bmN0aW9uKCl7aWYoSG89ITAsXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyl7dmFyIGU9Um8oT28sSW8pOyRlKHdpbmRvdyxcInNjcm9sbFwiLGUse3Bhc3NpdmU6ITB9KSwkZSh3aW5kb3csXCJyZXNpemVcIixlKX19KCl9KSxbXSksT299LHQudmlzdWFsRWxlbWVudD1Icn0sNDgzOTooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBuPTEvNjAqMWUzLHI9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHBlcmZvcm1hbmNlP2Z1bmN0aW9uKCl7cmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpfTpmdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdygpfSxvPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/ZnVuY3Rpb24oZSl7cmV0dXJuIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSl9OmZ1bmN0aW9uKGUpe3JldHVybiBzZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiBlKHIoKSl9KSxuKX0sYT0hMCxpPSExLGw9ITEscz17ZGVsdGE6MCx0aW1lc3RhbXA6MH0sYz1bXCJyZWFkXCIsXCJ1cGRhdGVcIixcInByZVJlbmRlclwiLFwicmVuZGVyXCIsXCJwb3N0UmVuZGVyXCJdLHU9Yy5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF09ZnVuY3Rpb24oZSl7dmFyIHQ9W10sbj1bXSxyPTAsbz0hMSxhPW5ldyBXZWFrU2V0LGk9e3NjaGVkdWxlOmZ1bmN0aW9uKGUsaSxsKXt2b2lkIDA9PT1pJiYoaT0hMSksdm9pZCAwPT09bCYmKGw9ITEpO3ZhciBzPWwmJm8sYz1zP3Q6bjtyZXR1cm4gaSYmYS5hZGQoZSksLTE9PT1jLmluZGV4T2YoZSkmJihjLnB1c2goZSkscyYmbyYmKHI9dC5sZW5ndGgpKSxlfSxjYW5jZWw6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5pbmRleE9mKGUpOy0xIT09dCYmbi5zcGxpY2UodCwxKSxhLmRlbGV0ZShlKX0scHJvY2VzczpmdW5jdGlvbihsKXt2YXIgcztpZihvPSEwLHQ9KHM9W24sdF0pWzBdLChuPXNbMV0pLmxlbmd0aD0wLHI9dC5sZW5ndGgpZm9yKHZhciBjPTA7YzxyO2MrKyl7dmFyIHU9dFtjXTt1KGwpLGEuaGFzKHUpJiYoaS5zY2hlZHVsZSh1KSxlKCkpfW89ITF9fTtyZXR1cm4gaX0oKGZ1bmN0aW9uKCl7cmV0dXJuIGk9ITB9KSksZX0pLHt9KSxkPWMucmVkdWNlKChmdW5jdGlvbihlLHQpe3ZhciBuPXVbdF07cmV0dXJuIGVbdF09ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB2b2lkIDA9PT10JiYodD0hMSksdm9pZCAwPT09ciYmKHI9ITEpLGl8fHYoKSxuLnNjaGVkdWxlKGUsdCxyKX0sZX0pLHt9KSxwPWMucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlW3RdPXVbdF0uY2FuY2VsLGV9KSx7fSksZj1jLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XT1mdW5jdGlvbigpe3JldHVybiB1W3RdLnByb2Nlc3Mocyl9LGV9KSx7fSksaD1mdW5jdGlvbihlKXtyZXR1cm4gdVtlXS5wcm9jZXNzKHMpfSxnPWZ1bmN0aW9uKGUpe2k9ITEscy5kZWx0YT1hP246TWF0aC5tYXgoTWF0aC5taW4oZS1zLnRpbWVzdGFtcCw0MCksMSkscy50aW1lc3RhbXA9ZSxsPSEwLGMuZm9yRWFjaChoKSxsPSExLGkmJihhPSExLG8oZykpfSx2PWZ1bmN0aW9uKCl7aT0hMCxhPSEwLGx8fG8oZyl9O3QuY2FuY2VsU3luYz1wLHQuZGVmYXVsdD1kLHQuZmx1c2hTeW5jPWYsdC5nZXRGcmFtZURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gc319LDQzOTQ6KGUsdCxuKT0+e24ucih0KSxuLmQodCx7aW52YXJpYW50OigpPT5vLHdhcm5pbmc6KCk9PnJ9KTt2YXIgcj1mdW5jdGlvbigpe30sbz1mdW5jdGlvbigpe319LDc3MzooZSx0LG4pPT57dmFyIHIsbz1cIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX19cIixhPS9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC8saT1cIm9iamVjdFwiPT10eXBlb2Ygbi5nJiZuLmcmJm4uZy5PYmplY3Q9PT1PYmplY3QmJm4uZyxsPVwib2JqZWN0XCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixzPWl8fGx8fEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSxjPUFycmF5LnByb3RvdHlwZSx1PUZ1bmN0aW9uLnByb3RvdHlwZSxkPU9iamVjdC5wcm90b3R5cGUscD1zW1wiX19jb3JlLWpzX3NoYXJlZF9fXCJdLGY9KHI9L1teLl0rJC8uZXhlYyhwJiZwLmtleXMmJnAua2V5cy5JRV9QUk9UT3x8XCJcIikpP1wiU3ltYm9sKHNyYylfMS5cIityOlwiXCIsaD11LnRvU3RyaW5nLGc9ZC5oYXNPd25Qcm9wZXJ0eSx2PWQudG9TdHJpbmcsQz1SZWdFeHAoXCJeXCIraC5jYWxsKGcpLnJlcGxhY2UoL1tcXFxcXiQuKis/KClbXFxde318XS9nLFwiXFxcXCQmXCIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csXCIkMS4qP1wiKStcIiRcIiksbT1jLnNwbGljZSx3PU0ocyxcIk1hcFwiKSxiPU0oT2JqZWN0LFwiY3JlYXRlXCIpO2Z1bmN0aW9uIHkoZSl7dmFyIHQ9LTEsbj1lP2UubGVuZ3RoOjA7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24geChlKXt2YXIgdD0tMSxuPWU/ZS5sZW5ndGg6MDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiBrKGUpe3ZhciB0PS0xLG49ZT9lLmxlbmd0aDowO2Zvcih0aGlzLmNsZWFyKCk7Kyt0PG47KXt2YXIgcj1lW3RdO3RoaXMuc2V0KHJbMF0sclsxXSl9fWZ1bmN0aW9uIFMoZSx0KXtmb3IodmFyIG4scixvPWUubGVuZ3RoO28tLTspaWYoKG49ZVtvXVswXSk9PT0ocj10KXx8biE9biYmciE9cilyZXR1cm4gbztyZXR1cm4tMX1mdW5jdGlvbiBPKGUsdCl7dmFyIG4scixvPWUuX19kYXRhX187cmV0dXJuKFwic3RyaW5nXCI9PShyPXR5cGVvZihuPXQpKXx8XCJudW1iZXJcIj09cnx8XCJzeW1ib2xcIj09cnx8XCJib29sZWFuXCI9PXI/XCJfX3Byb3RvX19cIiE9PW46bnVsbD09PW4pP29bXCJzdHJpbmdcIj09dHlwZW9mIHQ/XCJzdHJpbmdcIjpcImhhc2hcIl06by5tYXB9ZnVuY3Rpb24gTShlLHQpe3ZhciBuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWU/dm9pZCAwOmVbdF19KGUsdCk7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKCFfKGUpfHxmJiZmIGluIGUpcmV0dXJuITE7dmFyIHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9XyhlKT92LmNhbGwoZSk6XCJcIjtyZXR1cm5cIltvYmplY3QgRnVuY3Rpb25dXCI9PXR8fFwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl1cIj09dH0oZSl8fGZ1bmN0aW9uKGUpe3ZhciB0PSExO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGUudG9TdHJpbmcpdHJ5e3Q9ISEoZStcIlwiKX1jYXRjaChlKXt9cmV0dXJuIHR9KGUpP0M6YTtyZXR1cm4gdC50ZXN0KGZ1bmN0aW9uKGUpe2lmKG51bGwhPWUpe3RyeXtyZXR1cm4gaC5jYWxsKGUpfWNhdGNoKGUpe310cnl7cmV0dXJuIGUrXCJcIn1jYXRjaChlKXt9fXJldHVyblwiXCJ9KGUpKX0obik/bjp2b2lkIDB9ZnVuY3Rpb24gTChlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGV8fHQmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGEgZnVuY3Rpb25cIik7dmFyIG49ZnVuY3Rpb24oKXt2YXIgcj1hcmd1bWVudHMsbz10P3QuYXBwbHkodGhpcyxyKTpyWzBdLGE9bi5jYWNoZTtpZihhLmhhcyhvKSlyZXR1cm4gYS5nZXQobyk7dmFyIGk9ZS5hcHBseSh0aGlzLHIpO3JldHVybiBuLmNhY2hlPWEuc2V0KG8saSksaX07cmV0dXJuIG4uY2FjaGU9bmV3KEwuQ2FjaGV8fGspLG59ZnVuY3Rpb24gXyhlKXt2YXIgdD10eXBlb2YgZTtyZXR1cm4hIWUmJihcIm9iamVjdFwiPT10fHxcImZ1bmN0aW9uXCI9PXQpfXkucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1iP2IobnVsbCk6e319LHkucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5oYXMoZSkmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW2VdfSx5LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXztpZihiKXt2YXIgbj10W2VdO3JldHVybiBuPT09bz92b2lkIDA6bn1yZXR1cm4gZy5jYWxsKHQsZSk/dFtlXTp2b2lkIDB9LHkucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fO3JldHVybiBiP3ZvaWQgMCE9PXRbZV06Zy5jYWxsKHQsZSl9LHkucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9fZGF0YV9fW2VdPWImJnZvaWQgMD09PXQ/bzp0LHRoaXN9LHgucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1bXX0seC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX18sbj1TKHQsZSk7cmV0dXJuIShuPDB8fChuPT10Lmxlbmd0aC0xP3QucG9wKCk6bS5jYWxsKHQsbiwxKSwwKSl9LHgucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fLG49Uyh0LGUpO3JldHVybiBuPDA/dm9pZCAwOnRbbl1bMV19LHgucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gUyh0aGlzLl9fZGF0YV9fLGUpPi0xfSx4LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fLHI9UyhuLGUpO3JldHVybiByPDA/bi5wdXNoKFtlLHRdKTpuW3JdWzFdPXQsdGhpc30say5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyB5LG1hcDpuZXcod3x8eCksc3RyaW5nOm5ldyB5fX0say5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3JldHVybiBPKHRoaXMsZSkuZGVsZXRlKGUpfSxrLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIE8odGhpcyxlKS5nZXQoZSl9LGsucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gTyh0aGlzLGUpLmhhcyhlKX0say5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE8odGhpcyxlKS5zZXQoZSx0KSx0aGlzfSxMLkNhY2hlPWssZS5leHBvcnRzPUx9LDY0ODY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByO2U9bi5ubWQoZSksZnVuY3Rpb24oKXt2YXIgbyxhPVwiRXhwZWN0ZWQgYSBmdW5jdGlvblwiLGk9XCJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fXCIsbD1cIl9fbG9kYXNoX3BsYWNlaG9sZGVyX19cIixzPTMyLGM9MTI4LHU9MS8wLGQ9OTAwNzE5OTI1NDc0MDk5MSxwPU5hTixmPTQyOTQ5NjcyOTUsaD1bW1wiYXJ5XCIsY10sW1wiYmluZFwiLDFdLFtcImJpbmRLZXlcIiwyXSxbXCJjdXJyeVwiLDhdLFtcImN1cnJ5UmlnaHRcIiwxNl0sW1wiZmxpcFwiLDUxMl0sW1wicGFydGlhbFwiLHNdLFtcInBhcnRpYWxSaWdodFwiLDY0XSxbXCJyZWFyZ1wiLDI1Nl1dLGc9XCJbb2JqZWN0IEFyZ3VtZW50c11cIix2PVwiW29iamVjdCBBcnJheV1cIixDPVwiW29iamVjdCBCb29sZWFuXVwiLG09XCJbb2JqZWN0IERhdGVdXCIsdz1cIltvYmplY3QgRXJyb3JdXCIsYj1cIltvYmplY3QgRnVuY3Rpb25dXCIseT1cIltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dXCIseD1cIltvYmplY3QgTWFwXVwiLGs9XCJbb2JqZWN0IE51bWJlcl1cIixTPVwiW29iamVjdCBPYmplY3RdXCIsTz1cIltvYmplY3QgUHJvbWlzZV1cIixNPVwiW29iamVjdCBSZWdFeHBdXCIsTD1cIltvYmplY3QgU2V0XVwiLF89XCJbb2JqZWN0IFN0cmluZ11cIixQPVwiW29iamVjdCBTeW1ib2xdXCIsRT1cIltvYmplY3QgV2Vha01hcF1cIixqPVwiW29iamVjdCBBcnJheUJ1ZmZlcl1cIixSPVwiW29iamVjdCBEYXRhVmlld11cIixJPVwiW29iamVjdCBGbG9hdDMyQXJyYXldXCIsVj1cIltvYmplY3QgRmxvYXQ2NEFycmF5XVwiLEg9XCJbb2JqZWN0IEludDhBcnJheV1cIixBPVwiW29iamVjdCBJbnQxNkFycmF5XVwiLFQ9XCJbb2JqZWN0IEludDMyQXJyYXldXCIsRD1cIltvYmplY3QgVWludDhBcnJheV1cIixCPVwiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV1cIixaPVwiW29iamVjdCBVaW50MTZBcnJheV1cIiwkPVwiW29iamVjdCBVaW50MzJBcnJheV1cIixOPS9cXGJfX3AgXFwrPSAnJzsvZyxGPS9cXGIoX19wIFxcKz0pICcnIFxcKy9nLFc9LyhfX2VcXCguKj9cXCl8XFxiX190XFwpKSBcXCtcXG4nJzsvZyxVPS8mKD86YW1wfGx0fGd0fHF1b3R8IzM5KTsvZyx6PS9bJjw+XCInXS9nLEc9UmVnRXhwKFUuc291cmNlKSxLPVJlZ0V4cCh6LnNvdXJjZSkscT0vPCUtKFtcXHNcXFNdKz8pJT4vZyxZPS88JShbXFxzXFxTXSs/KSU+L2csSj0vPCU9KFtcXHNcXFNdKz8pJT4vZyxYPS9cXC58XFxbKD86W15bXFxdXSp8KFtcIiddKSg/Oig/IVxcMSlbXlxcXFxdfFxcXFwuKSo/XFwxKVxcXS8sUT0vXlxcdyokLyxlZT0vW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2csdGU9L1tcXFxcXiQuKis/KClbXFxde318XS9nLG5lPVJlZ0V4cCh0ZS5zb3VyY2UpLHJlPS9eXFxzKy8sb2U9L1xccy8sYWU9L1xceyg/OlxcblxcL1xcKiBcXFt3cmFwcGVkIHdpdGggLitcXF0gXFwqXFwvKT9cXG4/LyxpZT0vXFx7XFxuXFwvXFwqIFxcW3dyYXBwZWQgd2l0aCAoLispXFxdIFxcKi8sbGU9Lyw/ICYgLyxzZT0vW15cXHgwMC1cXHgyZlxceDNhLVxceDQwXFx4NWItXFx4NjBcXHg3Yi1cXHg3Zl0rL2csY2U9L1soKT0se31cXFtcXF1cXC9cXHNdLyx1ZT0vXFxcXChcXFxcKT8vZyxkZT0vXFwkXFx7KFteXFxcXH1dKig/OlxcXFwuW15cXFxcfV0qKSopXFx9L2cscGU9L1xcdyokLyxmZT0vXlstK10weFswLTlhLWZdKyQvaSxoZT0vXjBiWzAxXSskL2ksZ2U9L15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLyx2ZT0vXjBvWzAtN10rJC9pLENlPS9eKD86MHxbMS05XVxcZCopJC8sbWU9L1tcXHhjMC1cXHhkNlxceGQ4LVxceGY2XFx4ZjgtXFx4ZmZcXHUwMTAwLVxcdTAxN2ZdL2csd2U9LygkXikvLGJlPS9bJ1xcblxcclxcdTIwMjhcXHUyMDI5XFxcXF0vZyx5ZT1cIlxcXFx1ZDgwMC1cXFxcdWRmZmZcIix4ZT1cIlxcXFx1MDMwMC1cXFxcdTAzNmZcXFxcdWZlMjAtXFxcXHVmZTJmXFxcXHUyMGQwLVxcXFx1MjBmZlwiLGtlPVwiXFxcXHUyNzAwLVxcXFx1MjdiZlwiLFNlPVwiYS16XFxcXHhkZi1cXFxceGY2XFxcXHhmOC1cXFxceGZmXCIsT2U9XCJBLVpcXFxceGMwLVxcXFx4ZDZcXFxceGQ4LVxcXFx4ZGVcIixNZT1cIlxcXFx1ZmUwZVxcXFx1ZmUwZlwiLExlPVwiXFxcXHhhY1xcXFx4YjFcXFxceGQ3XFxcXHhmN1xcXFx4MDAtXFxcXHgyZlxcXFx4M2EtXFxcXHg0MFxcXFx4NWItXFxcXHg2MFxcXFx4N2ItXFxcXHhiZlxcXFx1MjAwMC1cXFxcdTIwNmYgXFxcXHRcXFxceDBiXFxcXGZcXFxceGEwXFxcXHVmZWZmXFxcXG5cXFxcclxcXFx1MjAyOFxcXFx1MjAyOVxcXFx1MTY4MFxcXFx1MTgwZVxcXFx1MjAwMFxcXFx1MjAwMVxcXFx1MjAwMlxcXFx1MjAwM1xcXFx1MjAwNFxcXFx1MjAwNVxcXFx1MjAwNlxcXFx1MjAwN1xcXFx1MjAwOFxcXFx1MjAwOVxcXFx1MjAwYVxcXFx1MjAyZlxcXFx1MjA1ZlxcXFx1MzAwMFwiLF9lPVwiW1wiK3llK1wiXVwiLFBlPVwiW1wiK0xlK1wiXVwiLEVlPVwiW1wiK3hlK1wiXVwiLGplPVwiXFxcXGQrXCIsUmU9XCJbXCIra2UrXCJdXCIsSWU9XCJbXCIrU2UrXCJdXCIsVmU9XCJbXlwiK3llK0xlK2plK2tlK1NlK09lK1wiXVwiLEhlPVwiXFxcXHVkODNjW1xcXFx1ZGZmYi1cXFxcdWRmZmZdXCIsQWU9XCJbXlwiK3llK1wiXVwiLFRlPVwiKD86XFxcXHVkODNjW1xcXFx1ZGRlNi1cXFxcdWRkZmZdKXsyfVwiLERlPVwiW1xcXFx1ZDgwMC1cXFxcdWRiZmZdW1xcXFx1ZGMwMC1cXFxcdWRmZmZdXCIsQmU9XCJbXCIrT2UrXCJdXCIsWmU9XCJcXFxcdTIwMGRcIiwkZT1cIig/OlwiK0llK1wifFwiK1ZlK1wiKVwiLE5lPVwiKD86XCIrQmUrXCJ8XCIrVmUrXCIpXCIsRmU9XCIoPzpbJ+KAmV0oPzpkfGxsfG18cmV8c3x0fHZlKSk/XCIsV2U9XCIoPzpbJ+KAmV0oPzpEfExMfE18UkV8U3xUfFZFKSk/XCIsVWU9XCIoPzpcIitFZStcInxcIitIZStcIik/XCIsemU9XCJbXCIrTWUrXCJdP1wiLEdlPXplK1VlK1wiKD86XCIrWmUrXCIoPzpcIitbQWUsVGUsRGVdLmpvaW4oXCJ8XCIpK1wiKVwiK3plK1VlK1wiKSpcIixLZT1cIig/OlwiK1tSZSxUZSxEZV0uam9pbihcInxcIikrXCIpXCIrR2UscWU9XCIoPzpcIitbQWUrRWUrXCI/XCIsRWUsVGUsRGUsX2VdLmpvaW4oXCJ8XCIpK1wiKVwiLFllPVJlZ0V4cChcIlsn4oCZXVwiLFwiZ1wiKSxKZT1SZWdFeHAoRWUsXCJnXCIpLFhlPVJlZ0V4cChIZStcIig/PVwiK0hlK1wiKXxcIitxZStHZSxcImdcIiksUWU9UmVnRXhwKFtCZStcIj9cIitJZStcIitcIitGZStcIig/PVwiK1tQZSxCZSxcIiRcIl0uam9pbihcInxcIikrXCIpXCIsTmUrXCIrXCIrV2UrXCIoPz1cIitbUGUsQmUrJGUsXCIkXCJdLmpvaW4oXCJ8XCIpK1wiKVwiLEJlK1wiP1wiKyRlK1wiK1wiK0ZlLEJlK1wiK1wiK1dlLFwiXFxcXGQqKD86MVNUfDJORHwzUkR8KD8hWzEyM10pXFxcXGRUSCkoPz1cXFxcYnxbYS16X10pXCIsXCJcXFxcZCooPzoxc3R8Mm5kfDNyZHwoPyFbMTIzXSlcXFxcZHRoKSg/PVxcXFxifFtBLVpfXSlcIixqZSxLZV0uam9pbihcInxcIiksXCJnXCIpLGV0PVJlZ0V4cChcIltcIitaZSt5ZSt4ZStNZStcIl1cIiksdHQ9L1thLXpdW0EtWl18W0EtWl17Mn1bYS16XXxbMC05XVthLXpBLVpdfFthLXpBLVpdWzAtOV18W15hLXpBLVowLTkgXS8sbnQ9W1wiQXJyYXlcIixcIkJ1ZmZlclwiLFwiRGF0YVZpZXdcIixcIkRhdGVcIixcIkVycm9yXCIsXCJGbG9hdDMyQXJyYXlcIixcIkZsb2F0NjRBcnJheVwiLFwiRnVuY3Rpb25cIixcIkludDhBcnJheVwiLFwiSW50MTZBcnJheVwiLFwiSW50MzJBcnJheVwiLFwiTWFwXCIsXCJNYXRoXCIsXCJPYmplY3RcIixcIlByb21pc2VcIixcIlJlZ0V4cFwiLFwiU2V0XCIsXCJTdHJpbmdcIixcIlN5bWJvbFwiLFwiVHlwZUVycm9yXCIsXCJVaW50OEFycmF5XCIsXCJVaW50OENsYW1wZWRBcnJheVwiLFwiVWludDE2QXJyYXlcIixcIlVpbnQzMkFycmF5XCIsXCJXZWFrTWFwXCIsXCJfXCIsXCJjbGVhclRpbWVvdXRcIixcImlzRmluaXRlXCIsXCJwYXJzZUludFwiLFwic2V0VGltZW91dFwiXSxydD0tMSxvdD17fTtvdFtJXT1vdFtWXT1vdFtIXT1vdFtBXT1vdFtUXT1vdFtEXT1vdFtCXT1vdFtaXT1vdFskXT0hMCxvdFtnXT1vdFt2XT1vdFtqXT1vdFtDXT1vdFtSXT1vdFttXT1vdFt3XT1vdFtiXT1vdFt4XT1vdFtrXT1vdFtTXT1vdFtNXT1vdFtMXT1vdFtfXT1vdFtFXT0hMTt2YXIgYXQ9e307YXRbZ109YXRbdl09YXRbal09YXRbUl09YXRbQ109YXRbbV09YXRbSV09YXRbVl09YXRbSF09YXRbQV09YXRbVF09YXRbeF09YXRba109YXRbU109YXRbTV09YXRbTF09YXRbX109YXRbUF09YXRbRF09YXRbQl09YXRbWl09YXRbJF09ITAsYXRbd109YXRbYl09YXRbRV09ITE7dmFyIGl0PXtcIlxcXFxcIjpcIlxcXFxcIixcIidcIjpcIidcIixcIlxcblwiOlwiblwiLFwiXFxyXCI6XCJyXCIsXCJcXHUyMDI4XCI6XCJ1MjAyOFwiLFwiXFx1MjAyOVwiOlwidTIwMjlcIn0sbHQ9cGFyc2VGbG9hdCxzdD1wYXJzZUludCxjdD1cIm9iamVjdFwiPT10eXBlb2Ygbi5nJiZuLmcmJm4uZy5PYmplY3Q9PT1PYmplY3QmJm4uZyx1dD1cIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsZHQ9Y3R8fHV0fHxGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCkscHQ9dCYmIXQubm9kZVR5cGUmJnQsZnQ9cHQmJmUmJiFlLm5vZGVUeXBlJiZlLGh0PWZ0JiZmdC5leHBvcnRzPT09cHQsZ3Q9aHQmJmN0LnByb2Nlc3MsdnQ9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIGZ0JiZmdC5yZXF1aXJlJiZmdC5yZXF1aXJlKFwidXRpbFwiKS50eXBlc3x8Z3QmJmd0LmJpbmRpbmcmJmd0LmJpbmRpbmcoXCJ1dGlsXCIpfWNhdGNoKGUpe319KCksQ3Q9dnQmJnZ0LmlzQXJyYXlCdWZmZXIsbXQ9dnQmJnZ0LmlzRGF0ZSx3dD12dCYmdnQuaXNNYXAsYnQ9dnQmJnZ0LmlzUmVnRXhwLHl0PXZ0JiZ2dC5pc1NldCx4dD12dCYmdnQuaXNUeXBlZEFycmF5O2Z1bmN0aW9uIGt0KGUsdCxuKXtzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gZS5jYWxsKHQpO2Nhc2UgMTpyZXR1cm4gZS5jYWxsKHQsblswXSk7Y2FzZSAyOnJldHVybiBlLmNhbGwodCxuWzBdLG5bMV0pO2Nhc2UgMzpyZXR1cm4gZS5jYWxsKHQsblswXSxuWzFdLG5bMl0pfXJldHVybiBlLmFwcGx5KHQsbil9ZnVuY3Rpb24gU3QoZSx0LG4scil7Zm9yKHZhciBvPS0xLGE9bnVsbD09ZT8wOmUubGVuZ3RoOysrbzxhOyl7dmFyIGk9ZVtvXTt0KHIsaSxuKGkpLGUpfXJldHVybiByfWZ1bmN0aW9uIE90KGUsdCl7Zm9yKHZhciBuPS0xLHI9bnVsbD09ZT8wOmUubGVuZ3RoOysrbjxyJiYhMSE9PXQoZVtuXSxuLGUpOyk7cmV0dXJuIGV9ZnVuY3Rpb24gTXQoZSx0KXtmb3IodmFyIG49bnVsbD09ZT8wOmUubGVuZ3RoO24tLSYmITEhPT10KGVbbl0sbixlKTspO3JldHVybiBlfWZ1bmN0aW9uIEx0KGUsdCl7Zm9yKHZhciBuPS0xLHI9bnVsbD09ZT8wOmUubGVuZ3RoOysrbjxyOylpZighdChlW25dLG4sZSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gX3QoZSx0KXtmb3IodmFyIG49LTEscj1udWxsPT1lPzA6ZS5sZW5ndGgsbz0wLGE9W107KytuPHI7KXt2YXIgaT1lW25dO3QoaSxuLGUpJiYoYVtvKytdPWkpfXJldHVybiBhfWZ1bmN0aW9uIFB0KGUsdCl7cmV0dXJuIShudWxsPT1lfHwhZS5sZW5ndGgpJiZCdChlLHQsMCk+LTF9ZnVuY3Rpb24gRXQoZSx0LG4pe2Zvcih2YXIgcj0tMSxvPW51bGw9PWU/MDplLmxlbmd0aDsrK3I8bzspaWYobih0LGVbcl0pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGp0KGUsdCl7Zm9yKHZhciBuPS0xLHI9bnVsbD09ZT8wOmUubGVuZ3RoLG89QXJyYXkocik7KytuPHI7KW9bbl09dChlW25dLG4sZSk7cmV0dXJuIG99ZnVuY3Rpb24gUnQoZSx0KXtmb3IodmFyIG49LTEscj10Lmxlbmd0aCxvPWUubGVuZ3RoOysrbjxyOyllW28rbl09dFtuXTtyZXR1cm4gZX1mdW5jdGlvbiBJdChlLHQsbixyKXt2YXIgbz0tMSxhPW51bGw9PWU/MDplLmxlbmd0aDtmb3IociYmYSYmKG49ZVsrK29dKTsrK288YTspbj10KG4sZVtvXSxvLGUpO3JldHVybiBufWZ1bmN0aW9uIFZ0KGUsdCxuLHIpe3ZhciBvPW51bGw9PWU/MDplLmxlbmd0aDtmb3IociYmbyYmKG49ZVstLW9dKTtvLS07KW49dChuLGVbb10sbyxlKTtyZXR1cm4gbn1mdW5jdGlvbiBIdChlLHQpe2Zvcih2YXIgbj0tMSxyPW51bGw9PWU/MDplLmxlbmd0aDsrK248cjspaWYodChlW25dLG4sZSkpcmV0dXJuITA7cmV0dXJuITF9dmFyIEF0PUZ0KFwibGVuZ3RoXCIpO2Z1bmN0aW9uIFR0KGUsdCxuKXt2YXIgcjtyZXR1cm4gbihlLChmdW5jdGlvbihlLG4sbyl7aWYodChlLG4sbykpcmV0dXJuIHI9biwhMX0pKSxyfWZ1bmN0aW9uIER0KGUsdCxuLHIpe2Zvcih2YXIgbz1lLmxlbmd0aCxhPW4rKHI/MTotMSk7cj9hLS06KythPG87KWlmKHQoZVthXSxhLGUpKXJldHVybiBhO3JldHVybi0xfWZ1bmN0aW9uIEJ0KGUsdCxuKXtyZXR1cm4gdD09dD9mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPW4tMSxvPWUubGVuZ3RoOysrcjxvOylpZihlW3JdPT09dClyZXR1cm4gcjtyZXR1cm4tMX0oZSx0LG4pOkR0KGUsJHQsbil9ZnVuY3Rpb24gWnQoZSx0LG4scil7Zm9yKHZhciBvPW4tMSxhPWUubGVuZ3RoOysrbzxhOylpZihyKGVbb10sdCkpcmV0dXJuIG87cmV0dXJuLTF9ZnVuY3Rpb24gJHQoZSl7cmV0dXJuIGUhPWV9ZnVuY3Rpb24gTnQoZSx0KXt2YXIgbj1udWxsPT1lPzA6ZS5sZW5ndGg7cmV0dXJuIG4/enQoZSx0KS9uOnB9ZnVuY3Rpb24gRnQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P286dFtlXX19ZnVuY3Rpb24gV3QoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT1lP286ZVt0XX19ZnVuY3Rpb24gVXQoZSx0LG4scixvKXtyZXR1cm4gbyhlLChmdW5jdGlvbihlLG8sYSl7bj1yPyhyPSExLGUpOnQobixlLG8sYSl9KSksbn1mdW5jdGlvbiB6dChlLHQpe2Zvcih2YXIgbixyPS0xLGE9ZS5sZW5ndGg7KytyPGE7KXt2YXIgaT10KGVbcl0pO2khPT1vJiYobj1uPT09bz9pOm4raSl9cmV0dXJuIG59ZnVuY3Rpb24gR3QoZSx0KXtmb3IodmFyIG49LTEscj1BcnJheShlKTsrK248ZTspcltuXT10KG4pO3JldHVybiByfWZ1bmN0aW9uIEt0KGUpe3JldHVybiBlP2Uuc2xpY2UoMCxkbihlKSsxKS5yZXBsYWNlKHJlLFwiXCIpOmV9ZnVuY3Rpb24gcXQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpfX1mdW5jdGlvbiBZdChlLHQpe3JldHVybiBqdCh0LChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pKX1mdW5jdGlvbiBKdChlLHQpe3JldHVybiBlLmhhcyh0KX1mdW5jdGlvbiBYdChlLHQpe2Zvcih2YXIgbj0tMSxyPWUubGVuZ3RoOysrbjxyJiZCdCh0LGVbbl0sMCk+LTE7KTtyZXR1cm4gbn1mdW5jdGlvbiBRdChlLHQpe2Zvcih2YXIgbj1lLmxlbmd0aDtuLS0mJkJ0KHQsZVtuXSwwKT4tMTspO3JldHVybiBufXZhciBlbj1XdCh7w4A6XCJBXCIsw4E6XCJBXCIsw4I6XCJBXCIsw4M6XCJBXCIsw4Q6XCJBXCIsw4U6XCJBXCIsw6A6XCJhXCIsw6E6XCJhXCIsw6I6XCJhXCIsw6M6XCJhXCIsw6Q6XCJhXCIsw6U6XCJhXCIsw4c6XCJDXCIsw6c6XCJjXCIsw5A6XCJEXCIsw7A6XCJkXCIsw4g6XCJFXCIsw4k6XCJFXCIsw4o6XCJFXCIsw4s6XCJFXCIsw6g6XCJlXCIsw6k6XCJlXCIsw6o6XCJlXCIsw6s6XCJlXCIsw4w6XCJJXCIsw406XCJJXCIsw446XCJJXCIsw486XCJJXCIsw6w6XCJpXCIsw606XCJpXCIsw646XCJpXCIsw686XCJpXCIsw5E6XCJOXCIsw7E6XCJuXCIsw5I6XCJPXCIsw5M6XCJPXCIsw5Q6XCJPXCIsw5U6XCJPXCIsw5Y6XCJPXCIsw5g6XCJPXCIsw7I6XCJvXCIsw7M6XCJvXCIsw7Q6XCJvXCIsw7U6XCJvXCIsw7Y6XCJvXCIsw7g6XCJvXCIsw5k6XCJVXCIsw5o6XCJVXCIsw5s6XCJVXCIsw5w6XCJVXCIsw7k6XCJ1XCIsw7o6XCJ1XCIsw7s6XCJ1XCIsw7w6XCJ1XCIsw506XCJZXCIsw706XCJ5XCIsw786XCJ5XCIsw4Y6XCJBZVwiLMOmOlwiYWVcIizDnjpcIlRoXCIsw746XCJ0aFwiLMOfOlwic3NcIizEgDpcIkFcIizEgjpcIkFcIizEhDpcIkFcIizEgTpcImFcIizEgzpcImFcIizEhTpcImFcIizEhjpcIkNcIizEiDpcIkNcIizEijpcIkNcIizEjDpcIkNcIizEhzpcImNcIizEiTpcImNcIizEizpcImNcIizEjTpcImNcIizEjjpcIkRcIizEkDpcIkRcIizEjzpcImRcIizEkTpcImRcIizEkjpcIkVcIizElDpcIkVcIizEljpcIkVcIizEmDpcIkVcIizEmjpcIkVcIizEkzpcImVcIizElTpcImVcIizElzpcImVcIizEmTpcImVcIizEmzpcImVcIizEnDpcIkdcIizEnjpcIkdcIizEoDpcIkdcIizEojpcIkdcIizEnTpcImdcIizEnzpcImdcIizEoTpcImdcIizEozpcImdcIizEpDpcIkhcIizEpjpcIkhcIizEpTpcImhcIizEpzpcImhcIizEqDpcIklcIizEqjpcIklcIizErDpcIklcIizErjpcIklcIizEsDpcIklcIizEqTpcImlcIizEqzpcImlcIizErTpcImlcIizErzpcImlcIizEsTpcImlcIizEtDpcIkpcIizEtTpcImpcIizEtjpcIktcIizEtzpcImtcIizEuDpcImtcIizEuTpcIkxcIizEuzpcIkxcIizEvTpcIkxcIizEvzpcIkxcIizFgTpcIkxcIizEujpcImxcIizEvDpcImxcIizEvjpcImxcIizFgDpcImxcIizFgjpcImxcIizFgzpcIk5cIizFhTpcIk5cIizFhzpcIk5cIizFijpcIk5cIizFhDpcIm5cIizFhjpcIm5cIizFiDpcIm5cIizFizpcIm5cIizFjDpcIk9cIizFjjpcIk9cIizFkDpcIk9cIizFjTpcIm9cIizFjzpcIm9cIizFkTpcIm9cIizFlDpcIlJcIizFljpcIlJcIizFmDpcIlJcIizFlTpcInJcIizFlzpcInJcIizFmTpcInJcIizFmjpcIlNcIizFnDpcIlNcIizFnjpcIlNcIizFoDpcIlNcIizFmzpcInNcIizFnTpcInNcIizFnzpcInNcIizFoTpcInNcIizFojpcIlRcIizFpDpcIlRcIizFpjpcIlRcIizFozpcInRcIizFpTpcInRcIizFpzpcInRcIizFqDpcIlVcIizFqjpcIlVcIizFrDpcIlVcIizFrjpcIlVcIizFsDpcIlVcIizFsjpcIlVcIizFqTpcInVcIizFqzpcInVcIizFrTpcInVcIizFrzpcInVcIizFsTpcInVcIizFszpcInVcIizFtDpcIldcIizFtTpcIndcIizFtjpcIllcIizFtzpcInlcIizFuDpcIllcIizFuTpcIlpcIizFuzpcIlpcIizFvTpcIlpcIizFujpcInpcIizFvDpcInpcIizFvjpcInpcIizEsjpcIklKXCIsxLM6XCJpalwiLMWSOlwiT2VcIizFkzpcIm9lXCIsxYk6XCInblwiLMW/Olwic1wifSksdG49V3Qoe1wiJlwiOlwiJmFtcDtcIixcIjxcIjpcIiZsdDtcIixcIj5cIjpcIiZndDtcIiwnXCInOlwiJnF1b3Q7XCIsXCInXCI6XCImIzM5O1wifSk7ZnVuY3Rpb24gbm4oZSl7cmV0dXJuXCJcXFxcXCIraXRbZV19ZnVuY3Rpb24gcm4oZSl7cmV0dXJuIGV0LnRlc3QoZSl9ZnVuY3Rpb24gb24oZSl7dmFyIHQ9LTEsbj1BcnJheShlLnNpemUpO3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKGUscil7blsrK3RdPVtyLGVdfSkpLG59ZnVuY3Rpb24gYW4oZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGUodChuKSl9fWZ1bmN0aW9uIGxuKGUsdCl7Zm9yKHZhciBuPS0xLHI9ZS5sZW5ndGgsbz0wLGE9W107KytuPHI7KXt2YXIgaT1lW25dO2khPT10JiZpIT09bHx8KGVbbl09bCxhW28rK109bil9cmV0dXJuIGF9ZnVuY3Rpb24gc24oZSl7dmFyIHQ9LTEsbj1BcnJheShlLnNpemUpO3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKGUpe25bKyt0XT1lfSkpLG59ZnVuY3Rpb24gY24oZSl7cmV0dXJuIHJuKGUpP2Z1bmN0aW9uKGUpe2Zvcih2YXIgdD1YZS5sYXN0SW5kZXg9MDtYZS50ZXN0KGUpOykrK3Q7cmV0dXJuIHR9KGUpOkF0KGUpfWZ1bmN0aW9uIHVuKGUpe3JldHVybiBybihlKT9mdW5jdGlvbihlKXtyZXR1cm4gZS5tYXRjaChYZSl8fFtdfShlKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdChcIlwiKX0oZSl9ZnVuY3Rpb24gZG4oZSl7Zm9yKHZhciB0PWUubGVuZ3RoO3QtLSYmb2UudGVzdChlLmNoYXJBdCh0KSk7KTtyZXR1cm4gdH12YXIgcG49V3Qoe1wiJmFtcDtcIjpcIiZcIixcIiZsdDtcIjpcIjxcIixcIiZndDtcIjpcIj5cIixcIiZxdW90O1wiOidcIicsXCImIzM5O1wiOlwiJ1wifSksZm49ZnVuY3Rpb24gZSh0KXt2YXIgbixyPSh0PW51bGw9PXQ/ZHQ6Zm4uZGVmYXVsdHMoZHQuT2JqZWN0KCksdCxmbi5waWNrKGR0LG50KSkpLkFycmF5LG9lPXQuRGF0ZSx5ZT10LkVycm9yLHhlPXQuRnVuY3Rpb24sa2U9dC5NYXRoLFNlPXQuT2JqZWN0LE9lPXQuUmVnRXhwLE1lPXQuU3RyaW5nLExlPXQuVHlwZUVycm9yLF9lPXIucHJvdG90eXBlLFBlPXhlLnByb3RvdHlwZSxFZT1TZS5wcm90b3R5cGUsamU9dFtcIl9fY29yZS1qc19zaGFyZWRfX1wiXSxSZT1QZS50b1N0cmluZyxJZT1FZS5oYXNPd25Qcm9wZXJ0eSxWZT0wLEhlPShuPS9bXi5dKyQvLmV4ZWMoamUmJmplLmtleXMmJmplLmtleXMuSUVfUFJPVE98fFwiXCIpKT9cIlN5bWJvbChzcmMpXzEuXCIrbjpcIlwiLEFlPUVlLnRvU3RyaW5nLFRlPVJlLmNhbGwoU2UpLERlPWR0Ll8sQmU9T2UoXCJeXCIrUmUuY2FsbChJZSkucmVwbGFjZSh0ZSxcIlxcXFwkJlwiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLFwiJDEuKj9cIikrXCIkXCIpLFplPWh0P3QuQnVmZmVyOm8sJGU9dC5TeW1ib2wsTmU9dC5VaW50OEFycmF5LEZlPVplP1plLmFsbG9jVW5zYWZlOm8sV2U9YW4oU2UuZ2V0UHJvdG90eXBlT2YsU2UpLFVlPVNlLmNyZWF0ZSx6ZT1FZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxHZT1fZS5zcGxpY2UsS2U9JGU/JGUuaXNDb25jYXRTcHJlYWRhYmxlOm8scWU9JGU/JGUuaXRlcmF0b3I6byxYZT0kZT8kZS50b1N0cmluZ1RhZzpvLGV0PWZ1bmN0aW9uKCl7dHJ5e3ZhciBlPXNhKFNlLFwiZGVmaW5lUHJvcGVydHlcIik7cmV0dXJuIGUoe30sXCJcIix7fSksZX1jYXRjaChlKXt9fSgpLGl0PXQuY2xlYXJUaW1lb3V0IT09ZHQuY2xlYXJUaW1lb3V0JiZ0LmNsZWFyVGltZW91dCxjdD1vZSYmb2Uubm93IT09ZHQuRGF0ZS5ub3cmJm9lLm5vdyx1dD10LnNldFRpbWVvdXQhPT1kdC5zZXRUaW1lb3V0JiZ0LnNldFRpbWVvdXQscHQ9a2UuY2VpbCxmdD1rZS5mbG9vcixndD1TZS5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsdnQ9WmU/WmUuaXNCdWZmZXI6byxBdD10LmlzRmluaXRlLFd0PV9lLmpvaW4saG49YW4oU2Uua2V5cyxTZSksZ249a2UubWF4LHZuPWtlLm1pbixDbj1vZS5ub3csbW49dC5wYXJzZUludCx3bj1rZS5yYW5kb20sYm49X2UucmV2ZXJzZSx5bj1zYSh0LFwiRGF0YVZpZXdcIikseG49c2EodCxcIk1hcFwiKSxrbj1zYSh0LFwiUHJvbWlzZVwiKSxTbj1zYSh0LFwiU2V0XCIpLE9uPXNhKHQsXCJXZWFrTWFwXCIpLE1uPXNhKFNlLFwiY3JlYXRlXCIpLExuPU9uJiZuZXcgT24sX249e30sUG49QWEoeW4pLEVuPUFhKHhuKSxqbj1BYShrbiksUm49QWEoU24pLEluPUFhKE9uKSxWbj0kZT8kZS5wcm90b3R5cGU6byxIbj1Wbj9Wbi52YWx1ZU9mOm8sQW49Vm4/Vm4udG9TdHJpbmc6bztmdW5jdGlvbiBUbihlKXtpZihRaShlKSYmIU5pKGUpJiYhKGUgaW5zdGFuY2VvZiAkbikpe2lmKGUgaW5zdGFuY2VvZiBabilyZXR1cm4gZTtpZihJZS5jYWxsKGUsXCJfX3dyYXBwZWRfX1wiKSlyZXR1cm4gVGEoZSl9cmV0dXJuIG5ldyBabihlKX12YXIgRG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBmdW5jdGlvbih0KXtpZighWGkodCkpcmV0dXJue307aWYoVWUpcmV0dXJuIFVlKHQpO2UucHJvdG90eXBlPXQ7dmFyIG49bmV3IGU7cmV0dXJuIGUucHJvdG90eXBlPW8sbn19KCk7ZnVuY3Rpb24gQm4oKXt9ZnVuY3Rpb24gWm4oZSx0KXt0aGlzLl9fd3JhcHBlZF9fPWUsdGhpcy5fX2FjdGlvbnNfXz1bXSx0aGlzLl9fY2hhaW5fXz0hIXQsdGhpcy5fX2luZGV4X189MCx0aGlzLl9fdmFsdWVzX189b31mdW5jdGlvbiAkbihlKXt0aGlzLl9fd3JhcHBlZF9fPWUsdGhpcy5fX2FjdGlvbnNfXz1bXSx0aGlzLl9fZGlyX189MSx0aGlzLl9fZmlsdGVyZWRfXz0hMSx0aGlzLl9faXRlcmF0ZWVzX189W10sdGhpcy5fX3Rha2VDb3VudF9fPWYsdGhpcy5fX3ZpZXdzX189W119ZnVuY3Rpb24gTm4oZSl7dmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24gRm4oZSl7dmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24gV24oZSl7dmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24gVW4oZSl7dmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuX19kYXRhX189bmV3IFduOysrdDxuOyl0aGlzLmFkZChlW3RdKX1mdW5jdGlvbiB6bihlKXt2YXIgdD10aGlzLl9fZGF0YV9fPW5ldyBGbihlKTt0aGlzLnNpemU9dC5zaXplfWZ1bmN0aW9uIEduKGUsdCl7dmFyIG49TmkoZSkscj0hbiYmJGkoZSksbz0hbiYmIXImJnppKGUpLGE9IW4mJiFyJiYhbyYmbGwoZSksaT1ufHxyfHxvfHxhLGw9aT9HdChlLmxlbmd0aCxNZSk6W10scz1sLmxlbmd0aDtmb3IodmFyIGMgaW4gZSkhdCYmIUllLmNhbGwoZSxjKXx8aSYmKFwibGVuZ3RoXCI9PWN8fG8mJihcIm9mZnNldFwiPT1jfHxcInBhcmVudFwiPT1jKXx8YSYmKFwiYnVmZmVyXCI9PWN8fFwiYnl0ZUxlbmd0aFwiPT1jfHxcImJ5dGVPZmZzZXRcIj09Yyl8fGdhKGMscykpfHxsLnB1c2goYyk7cmV0dXJuIGx9ZnVuY3Rpb24gS24oZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIHQ/ZVtXcigwLHQtMSldOm99ZnVuY3Rpb24gcW4oZSx0KXtyZXR1cm4gamEoTW8oZSksb3IodCwwLGUubGVuZ3RoKSl9ZnVuY3Rpb24gWW4oZSl7cmV0dXJuIGphKE1vKGUpKX1mdW5jdGlvbiBKbihlLHQsbil7KG4hPT1vJiYhRGkoZVt0XSxuKXx8bj09PW8mJiEodCBpbiBlKSkmJm5yKGUsdCxuKX1mdW5jdGlvbiBYbihlLHQsbil7dmFyIHI9ZVt0XTtJZS5jYWxsKGUsdCkmJkRpKHIsbikmJihuIT09b3x8dCBpbiBlKXx8bnIoZSx0LG4pfWZ1bmN0aW9uIFFuKGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoO24tLTspaWYoRGkoZVtuXVswXSx0KSlyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiBlcihlLHQsbixyKXtyZXR1cm4gY3IoZSwoZnVuY3Rpb24oZSxvLGEpe3QocixlLG4oZSksYSl9KSkscn1mdW5jdGlvbiB0cihlLHQpe3JldHVybiBlJiZMbyh0LFBsKHQpLGUpfWZ1bmN0aW9uIG5yKGUsdCxuKXtcIl9fcHJvdG9fX1wiPT10JiZldD9ldChlLHQse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOm4sd3JpdGFibGU6ITB9KTplW3RdPW59ZnVuY3Rpb24gcnIoZSx0KXtmb3IodmFyIG49LTEsYT10Lmxlbmd0aCxpPXIoYSksbD1udWxsPT1lOysrbjxhOylpW25dPWw/bzpTbChlLHRbbl0pO3JldHVybiBpfWZ1bmN0aW9uIG9yKGUsdCxuKXtyZXR1cm4gZT09ZSYmKG4hPT1vJiYoZT1lPD1uP2U6biksdCE9PW8mJihlPWU+PXQ/ZTp0KSksZX1mdW5jdGlvbiBhcihlLHQsbixyLGEsaSl7dmFyIGwscz0xJnQsYz0yJnQsdT00JnQ7aWYobiYmKGw9YT9uKGUscixhLGkpOm4oZSkpLGwhPT1vKXJldHVybiBsO2lmKCFYaShlKSlyZXR1cm4gZTt2YXIgZD1OaShlKTtpZihkKXtpZihsPWZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoLG49bmV3IGUuY29uc3RydWN0b3IodCk7cmV0dXJuIHQmJlwic3RyaW5nXCI9PXR5cGVvZiBlWzBdJiZJZS5jYWxsKGUsXCJpbmRleFwiKSYmKG4uaW5kZXg9ZS5pbmRleCxuLmlucHV0PWUuaW5wdXQpLG59KGUpLCFzKXJldHVybiBNbyhlLGwpfWVsc2V7dmFyIHA9ZGEoZSksZj1wPT1ifHxwPT15O2lmKHppKGUpKXJldHVybiBibyhlLHMpO2lmKHA9PVN8fHA9PWd8fGYmJiFhKXtpZihsPWN8fGY/e306ZmEoZSksIXMpcmV0dXJuIGM/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTG8oZSx1YShlKSx0KX0oZSxmdW5jdGlvbihlLHQpe3JldHVybiBlJiZMbyh0LEVsKHQpLGUpfShsLGUpKTpmdW5jdGlvbihlLHQpe3JldHVybiBMbyhlLGNhKGUpLHQpfShlLHRyKGwsZSkpfWVsc2V7aWYoIWF0W3BdKXJldHVybiBhP2U6e307bD1mdW5jdGlvbihlLHQsbil7dmFyIHIsbz1lLmNvbnN0cnVjdG9yO3N3aXRjaCh0KXtjYXNlIGo6cmV0dXJuIHlvKGUpO2Nhc2UgQzpjYXNlIG06cmV0dXJuIG5ldyBvKCtlKTtjYXNlIFI6cmV0dXJuIGZ1bmN0aW9uKGUsdCl7dmFyIG49dD95byhlLmJ1ZmZlcik6ZS5idWZmZXI7cmV0dXJuIG5ldyBlLmNvbnN0cnVjdG9yKG4sZS5ieXRlT2Zmc2V0LGUuYnl0ZUxlbmd0aCl9KGUsbik7Y2FzZSBJOmNhc2UgVjpjYXNlIEg6Y2FzZSBBOmNhc2UgVDpjYXNlIEQ6Y2FzZSBCOmNhc2UgWjpjYXNlICQ6cmV0dXJuIHhvKGUsbik7Y2FzZSB4OnJldHVybiBuZXcgbztjYXNlIGs6Y2FzZSBfOnJldHVybiBuZXcgbyhlKTtjYXNlIE06cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBlLmNvbnN0cnVjdG9yKGUuc291cmNlLHBlLmV4ZWMoZSkpO3JldHVybiB0Lmxhc3RJbmRleD1lLmxhc3RJbmRleCx0fShlKTtjYXNlIEw6cmV0dXJuIG5ldyBvO2Nhc2UgUDpyZXR1cm4gcj1lLEhuP1NlKEhuLmNhbGwocikpOnt9fX0oZSxwLHMpfX1pfHwoaT1uZXcgem4pO3ZhciBoPWkuZ2V0KGUpO2lmKGgpcmV0dXJuIGg7aS5zZXQoZSxsKSxvbChlKT9lLmZvckVhY2goKGZ1bmN0aW9uKHIpe2wuYWRkKGFyKHIsdCxuLHIsZSxpKSl9KSk6ZWwoZSkmJmUuZm9yRWFjaCgoZnVuY3Rpb24ocixvKXtsLnNldChvLGFyKHIsdCxuLG8sZSxpKSl9KSk7dmFyIHY9ZD9vOih1P2M/dGE6ZWE6Yz9FbDpQbCkoZSk7cmV0dXJuIE90KHZ8fGUsKGZ1bmN0aW9uKHIsbyl7diYmKHI9ZVtvPXJdKSxYbihsLG8sYXIocix0LG4sbyxlLGkpKX0pKSxsfWZ1bmN0aW9uIGlyKGUsdCxuKXt2YXIgcj1uLmxlbmd0aDtpZihudWxsPT1lKXJldHVybiFyO2ZvcihlPVNlKGUpO3ItLTspe3ZhciBhPW5bcl0saT10W2FdLGw9ZVthXTtpZihsPT09byYmIShhIGluIGUpfHwhaShsKSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBscihlLHQsbil7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgTGUoYSk7cmV0dXJuIExhKChmdW5jdGlvbigpe2UuYXBwbHkobyxuKX0pLHQpfWZ1bmN0aW9uIHNyKGUsdCxuLHIpe3ZhciBvPS0xLGE9UHQsaT0hMCxsPWUubGVuZ3RoLHM9W10sYz10Lmxlbmd0aDtpZighbClyZXR1cm4gcztuJiYodD1qdCh0LHF0KG4pKSkscj8oYT1FdCxpPSExKTp0Lmxlbmd0aD49MjAwJiYoYT1KdCxpPSExLHQ9bmV3IFVuKHQpKTtlOmZvcig7KytvPGw7KXt2YXIgdT1lW29dLGQ9bnVsbD09bj91Om4odSk7aWYodT1yfHwwIT09dT91OjAsaSYmZD09ZCl7Zm9yKHZhciBwPWM7cC0tOylpZih0W3BdPT09ZCljb250aW51ZSBlO3MucHVzaCh1KX1lbHNlIGEodCxkLHIpfHxzLnB1c2godSl9cmV0dXJuIHN9VG4udGVtcGxhdGVTZXR0aW5ncz17ZXNjYXBlOnEsZXZhbHVhdGU6WSxpbnRlcnBvbGF0ZTpKLHZhcmlhYmxlOlwiXCIsaW1wb3J0czp7XzpUbn19LFRuLnByb3RvdHlwZT1Cbi5wcm90b3R5cGUsVG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yPVRuLFpuLnByb3RvdHlwZT1EbihCbi5wcm90b3R5cGUpLFpuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1abiwkbi5wcm90b3R5cGU9RG4oQm4ucHJvdG90eXBlKSwkbi5wcm90b3R5cGUuY29uc3RydWN0b3I9JG4sTm4ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1Nbj9NbihudWxsKTp7fSx0aGlzLnNpemU9MH0sTm4ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmhhcyhlKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bZV07cmV0dXJuIHRoaXMuc2l6ZS09dD8xOjAsdH0sTm4ucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fO2lmKE1uKXt2YXIgbj10W2VdO3JldHVybiBuPT09aT9vOm59cmV0dXJuIEllLmNhbGwodCxlKT90W2VdOm99LE5uLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXztyZXR1cm4gTW4/dFtlXSE9PW86SWUuY2FsbCh0LGUpfSxObi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyhlKT8wOjEsbltlXT1NbiYmdD09PW8/aTp0LHRoaXN9LEZuLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9LEZuLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxuPVFuKHQsZSk7cmV0dXJuIShuPDB8fChuPT10Lmxlbmd0aC0xP3QucG9wKCk6R2UuY2FsbCh0LG4sMSksLS10aGlzLnNpemUsMCkpfSxGbi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX18sbj1Rbih0LGUpO3JldHVybiBuPDA/bzp0W25dWzFdfSxGbi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiBRbih0aGlzLl9fZGF0YV9fLGUpPi0xfSxGbi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fX2RhdGFfXyxyPVFuKG4sZSk7cmV0dXJuIHI8MD8oKyt0aGlzLnNpemUsbi5wdXNoKFtlLHRdKSk6bltyXVsxXT10LHRoaXN9LFduLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuc2l6ZT0wLHRoaXMuX19kYXRhX189e2hhc2g6bmV3IE5uLG1hcDpuZXcoeG58fEZuKSxzdHJpbmc6bmV3IE5ufX0sV24ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXt2YXIgdD1pYSh0aGlzLGUpLmRlbGV0ZShlKTtyZXR1cm4gdGhpcy5zaXplLT10PzE6MCx0fSxXbi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBpYSh0aGlzLGUpLmdldChlKX0sV24ucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gaWEodGhpcyxlKS5oYXMoZSl9LFduLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1pYSh0aGlzLGUpLHI9bi5zaXplO3JldHVybiBuLnNldChlLHQpLHRoaXMuc2l6ZSs9bi5zaXplPT1yPzA6MSx0aGlzfSxVbi5wcm90b3R5cGUuYWRkPVVuLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLnNldChlLGkpLHRoaXN9LFVuLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGUpfSx6bi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPW5ldyBGbix0aGlzLnNpemU9MH0sem4ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fLG49dC5kZWxldGUoZSk7cmV0dXJuIHRoaXMuc2l6ZT10LnNpemUsbn0sem4ucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoZSl9LHpuLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGUpfSx6bi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fX2RhdGFfXztpZihuIGluc3RhbmNlb2YgRm4pe3ZhciByPW4uX19kYXRhX187aWYoIXhufHxyLmxlbmd0aDwxOTkpcmV0dXJuIHIucHVzaChbZSx0XSksdGhpcy5zaXplPSsrbi5zaXplLHRoaXM7bj10aGlzLl9fZGF0YV9fPW5ldyBXbihyKX1yZXR1cm4gbi5zZXQoZSx0KSx0aGlzLnNpemU9bi5zaXplLHRoaXN9O3ZhciBjcj1FbyhDciksdXI9RW8obXIsITApO2Z1bmN0aW9uIGRyKGUsdCl7dmFyIG49ITA7cmV0dXJuIGNyKGUsKGZ1bmN0aW9uKGUscixvKXtyZXR1cm4gbj0hIXQoZSxyLG8pfSkpLG59ZnVuY3Rpb24gcHIoZSx0LG4pe2Zvcih2YXIgcj0tMSxhPWUubGVuZ3RoOysrcjxhOyl7dmFyIGk9ZVtyXSxsPXQoaSk7aWYobnVsbCE9bCYmKHM9PT1vP2w9PWwmJiFpbChsKTpuKGwscykpKXZhciBzPWwsYz1pfXJldHVybiBjfWZ1bmN0aW9uIGZyKGUsdCl7dmFyIG49W107cmV0dXJuIGNyKGUsKGZ1bmN0aW9uKGUscixvKXt0KGUscixvKSYmbi5wdXNoKGUpfSkpLG59ZnVuY3Rpb24gaHIoZSx0LG4scixvKXt2YXIgYT0tMSxpPWUubGVuZ3RoO2ZvcihufHwobj1oYSksb3x8KG89W10pOysrYTxpOyl7dmFyIGw9ZVthXTt0PjAmJm4obCk/dD4xP2hyKGwsdC0xLG4scixvKTpSdChvLGwpOnJ8fChvW28ubGVuZ3RoXT1sKX1yZXR1cm4gb312YXIgZ3I9am8oKSx2cj1qbyghMCk7ZnVuY3Rpb24gQ3IoZSx0KXtyZXR1cm4gZSYmZ3IoZSx0LFBsKX1mdW5jdGlvbiBtcihlLHQpe3JldHVybiBlJiZ2cihlLHQsUGwpfWZ1bmN0aW9uIHdyKGUsdCl7cmV0dXJuIF90KHQsKGZ1bmN0aW9uKHQpe3JldHVybiBxaShlW3RdKX0pKX1mdW5jdGlvbiBicihlLHQpe2Zvcih2YXIgbj0wLHI9KHQ9dm8odCxlKSkubGVuZ3RoO251bGwhPWUmJm48cjspZT1lW0hhKHRbbisrXSldO3JldHVybiBuJiZuPT1yP2U6b31mdW5jdGlvbiB5cihlLHQsbil7dmFyIHI9dChlKTtyZXR1cm4gTmkoZSk/cjpSdChyLG4oZSkpfWZ1bmN0aW9uIHhyKGUpe3JldHVybiBudWxsPT1lP2U9PT1vP1wiW29iamVjdCBVbmRlZmluZWRdXCI6XCJbb2JqZWN0IE51bGxdXCI6WGUmJlhlIGluIFNlKGUpP2Z1bmN0aW9uKGUpe3ZhciB0PUllLmNhbGwoZSxYZSksbj1lW1hlXTt0cnl7ZVtYZV09bzt2YXIgcj0hMH1jYXRjaChlKXt9dmFyIGE9QWUuY2FsbChlKTtyZXR1cm4gciYmKHQ/ZVtYZV09bjpkZWxldGUgZVtYZV0pLGF9KGUpOmZ1bmN0aW9uKGUpe3JldHVybiBBZS5jYWxsKGUpfShlKX1mdW5jdGlvbiBrcihlLHQpe3JldHVybiBlPnR9ZnVuY3Rpb24gU3IoZSx0KXtyZXR1cm4gbnVsbCE9ZSYmSWUuY2FsbChlLHQpfWZ1bmN0aW9uIE9yKGUsdCl7cmV0dXJuIG51bGwhPWUmJnQgaW4gU2UoZSl9ZnVuY3Rpb24gTXIoZSx0LG4pe2Zvcih2YXIgYT1uP0V0OlB0LGk9ZVswXS5sZW5ndGgsbD1lLmxlbmd0aCxzPWwsYz1yKGwpLHU9MS8wLGQ9W107cy0tOyl7dmFyIHA9ZVtzXTtzJiZ0JiYocD1qdChwLHF0KHQpKSksdT12bihwLmxlbmd0aCx1KSxjW3NdPSFuJiYodHx8aT49MTIwJiZwLmxlbmd0aD49MTIwKT9uZXcgVW4ocyYmcCk6b31wPWVbMF07dmFyIGY9LTEsaD1jWzBdO2U6Zm9yKDsrK2Y8aSYmZC5sZW5ndGg8dTspe3ZhciBnPXBbZl0sdj10P3QoZyk6ZztpZihnPW58fDAhPT1nP2c6MCwhKGg/SnQoaCx2KTphKGQsdixuKSkpe2ZvcihzPWw7LS1zOyl7dmFyIEM9Y1tzXTtpZighKEM/SnQoQyx2KTphKGVbc10sdixuKSkpY29udGludWUgZX1oJiZoLnB1c2godiksZC5wdXNoKGcpfX1yZXR1cm4gZH1mdW5jdGlvbiBMcihlLHQsbil7dmFyIHI9bnVsbD09KGU9U2EoZSx0PXZvKHQsZSkpKT9lOmVbSGEoS2EodCkpXTtyZXR1cm4gbnVsbD09cj9vOmt0KHIsZSxuKX1mdW5jdGlvbiBfcihlKXtyZXR1cm4gUWkoZSkmJnhyKGUpPT1nfWZ1bmN0aW9uIFByKGUsdCxuLHIsYSl7cmV0dXJuIGU9PT10fHwobnVsbD09ZXx8bnVsbD09dHx8IVFpKGUpJiYhUWkodCk/ZSE9ZSYmdCE9dDpmdW5jdGlvbihlLHQsbixyLGEsaSl7dmFyIGw9TmkoZSkscz1OaSh0KSxjPWw/djpkYShlKSx1PXM/djpkYSh0KSxkPShjPWM9PWc/UzpjKT09UyxwPSh1PXU9PWc/Uzp1KT09UyxmPWM9PXU7aWYoZiYmemkoZSkpe2lmKCF6aSh0KSlyZXR1cm4hMTtsPSEwLGQ9ITF9aWYoZiYmIWQpcmV0dXJuIGl8fChpPW5ldyB6biksbHx8bGwoZSk/WG8oZSx0LG4scixhLGkpOmZ1bmN0aW9uKGUsdCxuLHIsbyxhLGkpe3N3aXRjaChuKXtjYXNlIFI6aWYoZS5ieXRlTGVuZ3RoIT10LmJ5dGVMZW5ndGh8fGUuYnl0ZU9mZnNldCE9dC5ieXRlT2Zmc2V0KXJldHVybiExO2U9ZS5idWZmZXIsdD10LmJ1ZmZlcjtjYXNlIGo6cmV0dXJuIShlLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8IWEobmV3IE5lKGUpLG5ldyBOZSh0KSkpO2Nhc2UgQzpjYXNlIG06Y2FzZSBrOnJldHVybiBEaSgrZSwrdCk7Y2FzZSB3OnJldHVybiBlLm5hbWU9PXQubmFtZSYmZS5tZXNzYWdlPT10Lm1lc3NhZ2U7Y2FzZSBNOmNhc2UgXzpyZXR1cm4gZT09dCtcIlwiO2Nhc2UgeDp2YXIgbD1vbjtjYXNlIEw6dmFyIHM9MSZyO2lmKGx8fChsPXNuKSxlLnNpemUhPXQuc2l6ZSYmIXMpcmV0dXJuITE7dmFyIGM9aS5nZXQoZSk7aWYoYylyZXR1cm4gYz09dDtyfD0yLGkuc2V0KGUsdCk7dmFyIHU9WG8obChlKSxsKHQpLHIsbyxhLGkpO3JldHVybiBpLmRlbGV0ZShlKSx1O2Nhc2UgUDppZihIbilyZXR1cm4gSG4uY2FsbChlKT09SG4uY2FsbCh0KX1yZXR1cm4hMX0oZSx0LGMsbixyLGEsaSk7aWYoISgxJm4pKXt2YXIgaD1kJiZJZS5jYWxsKGUsXCJfX3dyYXBwZWRfX1wiKSxiPXAmJkllLmNhbGwodCxcIl9fd3JhcHBlZF9fXCIpO2lmKGh8fGIpe3ZhciB5PWg/ZS52YWx1ZSgpOmUsTz1iP3QudmFsdWUoKTp0O3JldHVybiBpfHwoaT1uZXcgem4pLGEoeSxPLG4scixpKX19cmV0dXJuISFmJiYoaXx8KGk9bmV3IHpuKSxmdW5jdGlvbihlLHQsbixyLGEsaSl7dmFyIGw9MSZuLHM9ZWEoZSksYz1zLmxlbmd0aDtpZihjIT1lYSh0KS5sZW5ndGgmJiFsKXJldHVybiExO2Zvcih2YXIgdT1jO3UtLTspe3ZhciBkPXNbdV07aWYoIShsP2QgaW4gdDpJZS5jYWxsKHQsZCkpKXJldHVybiExfXZhciBwPWkuZ2V0KGUpLGY9aS5nZXQodCk7aWYocCYmZilyZXR1cm4gcD09dCYmZj09ZTt2YXIgaD0hMDtpLnNldChlLHQpLGkuc2V0KHQsZSk7Zm9yKHZhciBnPWw7Kyt1PGM7KXt2YXIgdj1lW2Q9c1t1XV0sQz10W2RdO2lmKHIpdmFyIG09bD9yKEMsdixkLHQsZSxpKTpyKHYsQyxkLGUsdCxpKTtpZighKG09PT1vP3Y9PT1DfHxhKHYsQyxuLHIsaSk6bSkpe2g9ITE7YnJlYWt9Z3x8KGc9XCJjb25zdHJ1Y3RvclwiPT1kKX1pZihoJiYhZyl7dmFyIHc9ZS5jb25zdHJ1Y3RvcixiPXQuY29uc3RydWN0b3I7dz09Ynx8IShcImNvbnN0cnVjdG9yXCJpbiBlKXx8IShcImNvbnN0cnVjdG9yXCJpbiB0KXx8XCJmdW5jdGlvblwiPT10eXBlb2YgdyYmdyBpbnN0YW5jZW9mIHcmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGImJmIgaW5zdGFuY2VvZiBifHwoaD0hMSl9cmV0dXJuIGkuZGVsZXRlKGUpLGkuZGVsZXRlKHQpLGh9KGUsdCxuLHIsYSxpKSl9KGUsdCxuLHIsUHIsYSkpfWZ1bmN0aW9uIEVyKGUsdCxuLHIpe3ZhciBhPW4ubGVuZ3RoLGk9YSxsPSFyO2lmKG51bGw9PWUpcmV0dXJuIWk7Zm9yKGU9U2UoZSk7YS0tOyl7dmFyIHM9blthXTtpZihsJiZzWzJdP3NbMV0hPT1lW3NbMF1dOiEoc1swXWluIGUpKXJldHVybiExfWZvcig7KythPGk7KXt2YXIgYz0ocz1uW2FdKVswXSx1PWVbY10sZD1zWzFdO2lmKGwmJnNbMl0pe2lmKHU9PT1vJiYhKGMgaW4gZSkpcmV0dXJuITF9ZWxzZXt2YXIgcD1uZXcgem47aWYocil2YXIgZj1yKHUsZCxjLGUsdCxwKTtpZighKGY9PT1vP1ByKGQsdSwzLHIscCk6ZikpcmV0dXJuITF9fXJldHVybiEwfWZ1bmN0aW9uIGpyKGUpe3JldHVybiEoIVhpKGUpfHwodD1lLEhlJiZIZSBpbiB0KSkmJihxaShlKT9CZTpnZSkudGVzdChBYShlKSk7dmFyIHR9ZnVuY3Rpb24gUnIoZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZT9lOm51bGw9PWU/dHM6XCJvYmplY3RcIj09dHlwZW9mIGU/TmkoZSk/VHIoZVswXSxlWzFdKTpBcihlKTp1cyhlKX1mdW5jdGlvbiBJcihlKXtpZighYmEoZSkpcmV0dXJuIGhuKGUpO3ZhciB0PVtdO2Zvcih2YXIgbiBpbiBTZShlKSlJZS5jYWxsKGUsbikmJlwiY29uc3RydWN0b3JcIiE9biYmdC5wdXNoKG4pO3JldHVybiB0fWZ1bmN0aW9uIFZyKGUsdCl7cmV0dXJuIGU8dH1mdW5jdGlvbiBIcihlLHQpe3ZhciBuPS0xLG89V2koZSk/cihlLmxlbmd0aCk6W107cmV0dXJuIGNyKGUsKGZ1bmN0aW9uKGUscixhKXtvWysrbl09dChlLHIsYSl9KSksb31mdW5jdGlvbiBBcihlKXt2YXIgdD1sYShlKTtyZXR1cm4gMT09dC5sZW5ndGgmJnRbMF1bMl0/eGEodFswXVswXSx0WzBdWzFdKTpmdW5jdGlvbihuKXtyZXR1cm4gbj09PWV8fEVyKG4sZSx0KX19ZnVuY3Rpb24gVHIoZSx0KXtyZXR1cm4gQ2EoZSkmJnlhKHQpP3hhKEhhKGUpLHQpOmZ1bmN0aW9uKG4pe3ZhciByPVNsKG4sZSk7cmV0dXJuIHI9PT1vJiZyPT09dD9PbChuLGUpOlByKHQsciwzKX19ZnVuY3Rpb24gRHIoZSx0LG4scixhKXtlIT09dCYmZ3IodCwoZnVuY3Rpb24oaSxsKXtpZihhfHwoYT1uZXcgem4pLFhpKGkpKSFmdW5jdGlvbihlLHQsbixyLGEsaSxsKXt2YXIgcz1PYShlLG4pLGM9T2EodCxuKSx1PWwuZ2V0KGMpO2lmKHUpSm4oZSxuLHUpO2Vsc2V7dmFyIGQ9aT9pKHMsYyxuK1wiXCIsZSx0LGwpOm8scD1kPT09bztpZihwKXt2YXIgZj1OaShjKSxoPSFmJiZ6aShjKSxnPSFmJiYhaCYmbGwoYyk7ZD1jLGZ8fGh8fGc/Tmkocyk/ZD1zOlVpKHMpP2Q9TW8ocyk6aD8ocD0hMSxkPWJvKGMsITApKTpnPyhwPSExLGQ9eG8oYywhMCkpOmQ9W106bmwoYyl8fCRpKGMpPyhkPXMsJGkocyk/ZD1nbChzKTpYaShzKSYmIXFpKHMpfHwoZD1mYShjKSkpOnA9ITF9cCYmKGwuc2V0KGMsZCksYShkLGMscixpLGwpLGwuZGVsZXRlKGMpKSxKbihlLG4sZCl9fShlLHQsbCxuLERyLHIsYSk7ZWxzZXt2YXIgcz1yP3IoT2EoZSxsKSxpLGwrXCJcIixlLHQsYSk6bztzPT09byYmKHM9aSksSm4oZSxsLHMpfX0pLEVsKX1mdW5jdGlvbiBCcihlLHQpe3ZhciBuPWUubGVuZ3RoO2lmKG4pcmV0dXJuIGdhKHQrPXQ8MD9uOjAsbik/ZVt0XTpvfWZ1bmN0aW9uIFpyKGUsdCxuKXt0PXQubGVuZ3RoP2p0KHQsKGZ1bmN0aW9uKGUpe3JldHVybiBOaShlKT9mdW5jdGlvbih0KXtyZXR1cm4gYnIodCwxPT09ZS5sZW5ndGg/ZVswXTplKX06ZX0pKTpbdHNdO3ZhciByPS0xO3Q9anQodCxxdChhYSgpKSk7dmFyIG89SHIoZSwoZnVuY3Rpb24oZSxuLG8pe3ZhciBhPWp0KHQsKGZ1bmN0aW9uKHQpe3JldHVybiB0KGUpfSkpO3JldHVybntjcml0ZXJpYTphLGluZGV4Oisrcix2YWx1ZTplfX0pKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmxlbmd0aDtmb3IoZS5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPS0xLG89ZS5jcml0ZXJpYSxhPXQuY3JpdGVyaWEsaT1vLmxlbmd0aCxsPW4ubGVuZ3RoOysrcjxpOyl7dmFyIHM9a28ob1tyXSxhW3JdKTtpZihzKXJldHVybiByPj1sP3M6cyooXCJkZXNjXCI9PW5bcl0/LTE6MSl9cmV0dXJuIGUuaW5kZXgtdC5pbmRleH0oZSx0LG4pfSkpO3ItLTspZVtyXT1lW3JdLnZhbHVlO3JldHVybiBlfShvKX1mdW5jdGlvbiAkcihlLHQsbil7Zm9yKHZhciByPS0xLG89dC5sZW5ndGgsYT17fTsrK3I8bzspe3ZhciBpPXRbcl0sbD1icihlLGkpO24obCxpKSYmcXIoYSx2byhpLGUpLGwpfXJldHVybiBhfWZ1bmN0aW9uIE5yKGUsdCxuLHIpe3ZhciBvPXI/WnQ6QnQsYT0tMSxpPXQubGVuZ3RoLGw9ZTtmb3IoZT09PXQmJih0PU1vKHQpKSxuJiYobD1qdChlLHF0KG4pKSk7KythPGk7KWZvcih2YXIgcz0wLGM9dFthXSx1PW4/bihjKTpjOyhzPW8obCx1LHMscikpPi0xOylsIT09ZSYmR2UuY2FsbChsLHMsMSksR2UuY2FsbChlLHMsMSk7cmV0dXJuIGV9ZnVuY3Rpb24gRnIoZSx0KXtmb3IodmFyIG49ZT90Lmxlbmd0aDowLHI9bi0xO24tLTspe3ZhciBvPXRbbl07aWYobj09cnx8byE9PWEpe3ZhciBhPW87Z2Eobyk/R2UuY2FsbChlLG8sMSk6bG8oZSxvKX19cmV0dXJuIGV9ZnVuY3Rpb24gV3IoZSx0KXtyZXR1cm4gZStmdCh3bigpKih0LWUrMSkpfWZ1bmN0aW9uIFVyKGUsdCl7dmFyIG49XCJcIjtpZighZXx8dDwxfHx0PmQpcmV0dXJuIG47ZG97dCUyJiYobis9ZSksKHQ9ZnQodC8yKSkmJihlKz1lKX13aGlsZSh0KTtyZXR1cm4gbn1mdW5jdGlvbiB6cihlLHQpe3JldHVybiBfYShrYShlLHQsdHMpLGUrXCJcIil9ZnVuY3Rpb24gR3IoZSl7cmV0dXJuIEtuKERsKGUpKX1mdW5jdGlvbiBLcihlLHQpe3ZhciBuPURsKGUpO3JldHVybiBqYShuLG9yKHQsMCxuLmxlbmd0aCkpfWZ1bmN0aW9uIHFyKGUsdCxuLHIpe2lmKCFYaShlKSlyZXR1cm4gZTtmb3IodmFyIGE9LTEsaT0odD12byh0LGUpKS5sZW5ndGgsbD1pLTEscz1lO251bGwhPXMmJisrYTxpOyl7dmFyIGM9SGEodFthXSksdT1uO2lmKFwiX19wcm90b19fXCI9PT1jfHxcImNvbnN0cnVjdG9yXCI9PT1jfHxcInByb3RvdHlwZVwiPT09YylyZXR1cm4gZTtpZihhIT1sKXt2YXIgZD1zW2NdOyh1PXI/cihkLGMscyk6byk9PT1vJiYodT1YaShkKT9kOmdhKHRbYSsxXSk/W106e30pfVhuKHMsYyx1KSxzPXNbY119cmV0dXJuIGV9dmFyIFlyPUxuP2Z1bmN0aW9uKGUsdCl7cmV0dXJuIExuLnNldChlLHQpLGV9OnRzLEpyPWV0P2Z1bmN0aW9uKGUsdCl7cmV0dXJuIGV0KGUsXCJ0b1N0cmluZ1wiLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTpYbCh0KSx3cml0YWJsZTohMH0pfTp0cztmdW5jdGlvbiBYcihlKXtyZXR1cm4gamEoRGwoZSkpfWZ1bmN0aW9uIFFyKGUsdCxuKXt2YXIgbz0tMSxhPWUubGVuZ3RoO3Q8MCYmKHQ9LXQ+YT8wOmErdCksKG49bj5hP2E6bik8MCYmKG4rPWEpLGE9dD5uPzA6bi10Pj4+MCx0Pj4+PTA7Zm9yKHZhciBpPXIoYSk7KytvPGE7KWlbb109ZVtvK3RdO3JldHVybiBpfWZ1bmN0aW9uIGVvKGUsdCl7dmFyIG47cmV0dXJuIGNyKGUsKGZ1bmN0aW9uKGUscixvKXtyZXR1cm4hKG49dChlLHIsbykpfSkpLCEhbn1mdW5jdGlvbiB0byhlLHQsbil7dmFyIHI9MCxvPW51bGw9PWU/cjplLmxlbmd0aDtpZihcIm51bWJlclwiPT10eXBlb2YgdCYmdD09dCYmbzw9MjE0NzQ4MzY0Nyl7Zm9yKDtyPG87KXt2YXIgYT1yK28+Pj4xLGk9ZVthXTtudWxsIT09aSYmIWlsKGkpJiYobj9pPD10Omk8dCk/cj1hKzE6bz1hfXJldHVybiBvfXJldHVybiBubyhlLHQsdHMsbil9ZnVuY3Rpb24gbm8oZSx0LG4scil7dmFyIGE9MCxpPW51bGw9PWU/MDplLmxlbmd0aDtpZigwPT09aSlyZXR1cm4gMDtmb3IodmFyIGw9KHQ9bih0KSkhPXQscz1udWxsPT09dCxjPWlsKHQpLHU9dD09PW87YTxpOyl7dmFyIGQ9ZnQoKGEraSkvMikscD1uKGVbZF0pLGY9cCE9PW8saD1udWxsPT09cCxnPXA9PXAsdj1pbChwKTtpZihsKXZhciBDPXJ8fGc7ZWxzZSBDPXU/ZyYmKHJ8fGYpOnM/ZyYmZiYmKHJ8fCFoKTpjP2cmJmYmJiFoJiYocnx8IXYpOiFoJiYhdiYmKHI/cDw9dDpwPHQpO0M/YT1kKzE6aT1kfXJldHVybiB2bihpLDQyOTQ5NjcyOTQpfWZ1bmN0aW9uIHJvKGUsdCl7Zm9yKHZhciBuPS0xLHI9ZS5sZW5ndGgsbz0wLGE9W107KytuPHI7KXt2YXIgaT1lW25dLGw9dD90KGkpOmk7aWYoIW58fCFEaShsLHMpKXt2YXIgcz1sO2FbbysrXT0wPT09aT8wOml9fXJldHVybiBhfWZ1bmN0aW9uIG9vKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlP2U6aWwoZSk/cDorZX1mdW5jdGlvbiBhbyhlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gZTtpZihOaShlKSlyZXR1cm4ganQoZSxhbykrXCJcIjtpZihpbChlKSlyZXR1cm4gQW4/QW4uY2FsbChlKTpcIlwiO3ZhciB0PWUrXCJcIjtyZXR1cm5cIjBcIj09dCYmMS9lPT0tMS8wP1wiLTBcIjp0fWZ1bmN0aW9uIGlvKGUsdCxuKXt2YXIgcj0tMSxvPVB0LGE9ZS5sZW5ndGgsaT0hMCxsPVtdLHM9bDtpZihuKWk9ITEsbz1FdDtlbHNlIGlmKGE+PTIwMCl7dmFyIGM9dD9udWxsOnpvKGUpO2lmKGMpcmV0dXJuIHNuKGMpO2k9ITEsbz1KdCxzPW5ldyBVbn1lbHNlIHM9dD9bXTpsO2U6Zm9yKDsrK3I8YTspe3ZhciB1PWVbcl0sZD10P3QodSk6dTtpZih1PW58fDAhPT11P3U6MCxpJiZkPT1kKXtmb3IodmFyIHA9cy5sZW5ndGg7cC0tOylpZihzW3BdPT09ZCljb250aW51ZSBlO3QmJnMucHVzaChkKSxsLnB1c2godSl9ZWxzZSBvKHMsZCxuKXx8KHMhPT1sJiZzLnB1c2goZCksbC5wdXNoKHUpKX1yZXR1cm4gbH1mdW5jdGlvbiBsbyhlLHQpe3JldHVybiBudWxsPT0oZT1TYShlLHQ9dm8odCxlKSkpfHxkZWxldGUgZVtIYShLYSh0KSldfWZ1bmN0aW9uIHNvKGUsdCxuLHIpe3JldHVybiBxcihlLHQsbihicihlLHQpKSxyKX1mdW5jdGlvbiBjbyhlLHQsbixyKXtmb3IodmFyIG89ZS5sZW5ndGgsYT1yP286LTE7KHI/YS0tOisrYTxvKSYmdChlW2FdLGEsZSk7KTtyZXR1cm4gbj9RcihlLHI/MDphLHI/YSsxOm8pOlFyKGUscj9hKzE6MCxyP286YSl9ZnVuY3Rpb24gdW8oZSx0KXt2YXIgbj1lO3JldHVybiBuIGluc3RhbmNlb2YgJG4mJihuPW4udmFsdWUoKSksSXQodCwoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5mdW5jLmFwcGx5KHQudGhpc0FyZyxSdChbZV0sdC5hcmdzKSl9KSxuKX1mdW5jdGlvbiBwbyhlLHQsbil7dmFyIG89ZS5sZW5ndGg7aWYobzwyKXJldHVybiBvP2lvKGVbMF0pOltdO2Zvcih2YXIgYT0tMSxpPXIobyk7KythPG87KWZvcih2YXIgbD1lW2FdLHM9LTE7KytzPG87KXMhPWEmJihpW2FdPXNyKGlbYV18fGwsZVtzXSx0LG4pKTtyZXR1cm4gaW8oaHIoaSwxKSx0LG4pfWZ1bmN0aW9uIGZvKGUsdCxuKXtmb3IodmFyIHI9LTEsYT1lLmxlbmd0aCxpPXQubGVuZ3RoLGw9e307KytyPGE7KXt2YXIgcz1yPGk/dFtyXTpvO24obCxlW3JdLHMpfXJldHVybiBsfWZ1bmN0aW9uIGhvKGUpe3JldHVybiBVaShlKT9lOltdfWZ1bmN0aW9uIGdvKGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTp0c31mdW5jdGlvbiB2byhlLHQpe3JldHVybiBOaShlKT9lOkNhKGUsdCk/W2VdOlZhKHZsKGUpKX12YXIgQ289enI7ZnVuY3Rpb24gbW8oZSx0LG4pe3ZhciByPWUubGVuZ3RoO3JldHVybiBuPW49PT1vP3I6biwhdCYmbj49cj9lOlFyKGUsdCxuKX12YXIgd289aXR8fGZ1bmN0aW9uKGUpe3JldHVybiBkdC5jbGVhclRpbWVvdXQoZSl9O2Z1bmN0aW9uIGJvKGUsdCl7aWYodClyZXR1cm4gZS5zbGljZSgpO3ZhciBuPWUubGVuZ3RoLHI9RmU/RmUobik6bmV3IGUuY29uc3RydWN0b3Iobik7cmV0dXJuIGUuY29weShyKSxyfWZ1bmN0aW9uIHlvKGUpe3ZhciB0PW5ldyBlLmNvbnN0cnVjdG9yKGUuYnl0ZUxlbmd0aCk7cmV0dXJuIG5ldyBOZSh0KS5zZXQobmV3IE5lKGUpKSx0fWZ1bmN0aW9uIHhvKGUsdCl7dmFyIG49dD95byhlLmJ1ZmZlcik6ZS5idWZmZXI7cmV0dXJuIG5ldyBlLmNvbnN0cnVjdG9yKG4sZS5ieXRlT2Zmc2V0LGUubGVuZ3RoKX1mdW5jdGlvbiBrbyhlLHQpe2lmKGUhPT10KXt2YXIgbj1lIT09byxyPW51bGw9PT1lLGE9ZT09ZSxpPWlsKGUpLGw9dCE9PW8scz1udWxsPT09dCxjPXQ9PXQsdT1pbCh0KTtpZighcyYmIXUmJiFpJiZlPnR8fGkmJmwmJmMmJiFzJiYhdXx8ciYmbCYmY3x8IW4mJmN8fCFhKXJldHVybiAxO2lmKCFyJiYhaSYmIXUmJmU8dHx8dSYmbiYmYSYmIXImJiFpfHxzJiZuJiZhfHwhbCYmYXx8IWMpcmV0dXJuLTF9cmV0dXJuIDB9ZnVuY3Rpb24gU28oZSx0LG4sbyl7Zm9yKHZhciBhPS0xLGk9ZS5sZW5ndGgsbD1uLmxlbmd0aCxzPS0xLGM9dC5sZW5ndGgsdT1nbihpLWwsMCksZD1yKGMrdSkscD0hbzsrK3M8YzspZFtzXT10W3NdO2Zvcig7KythPGw7KShwfHxhPGkpJiYoZFtuW2FdXT1lW2FdKTtmb3IoO3UtLTspZFtzKytdPWVbYSsrXTtyZXR1cm4gZH1mdW5jdGlvbiBPbyhlLHQsbixvKXtmb3IodmFyIGE9LTEsaT1lLmxlbmd0aCxsPS0xLHM9bi5sZW5ndGgsYz0tMSx1PXQubGVuZ3RoLGQ9Z24oaS1zLDApLHA9cihkK3UpLGY9IW87KythPGQ7KXBbYV09ZVthXTtmb3IodmFyIGg9YTsrK2M8dTspcFtoK2NdPXRbY107Zm9yKDsrK2w8czspKGZ8fGE8aSkmJihwW2grbltsXV09ZVthKytdKTtyZXR1cm4gcH1mdW5jdGlvbiBNbyhlLHQpe3ZhciBuPS0xLG89ZS5sZW5ndGg7Zm9yKHR8fCh0PXIobykpOysrbjxvOyl0W25dPWVbbl07cmV0dXJuIHR9ZnVuY3Rpb24gTG8oZSx0LG4scil7dmFyIGE9IW47bnx8KG49e30pO2Zvcih2YXIgaT0tMSxsPXQubGVuZ3RoOysraTxsOyl7dmFyIHM9dFtpXSxjPXI/cihuW3NdLGVbc10scyxuLGUpOm87Yz09PW8mJihjPWVbc10pLGE/bnIobixzLGMpOlhuKG4scyxjKX1yZXR1cm4gbn1mdW5jdGlvbiBfbyhlLHQpe3JldHVybiBmdW5jdGlvbihuLHIpe3ZhciBvPU5pKG4pP1N0OmVyLGE9dD90KCk6e307cmV0dXJuIG8obixlLGFhKHIsMiksYSl9fWZ1bmN0aW9uIFBvKGUpe3JldHVybiB6cigoZnVuY3Rpb24odCxuKXt2YXIgcj0tMSxhPW4ubGVuZ3RoLGk9YT4xP25bYS0xXTpvLGw9YT4yP25bMl06bztmb3IoaT1lLmxlbmd0aD4zJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBpPyhhLS0saSk6byxsJiZ2YShuWzBdLG5bMV0sbCkmJihpPWE8Mz9vOmksYT0xKSx0PVNlKHQpOysrcjxhOyl7dmFyIHM9bltyXTtzJiZlKHQscyxyLGkpfXJldHVybiB0fSkpfWZ1bmN0aW9uIEVvKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7aWYobnVsbD09bilyZXR1cm4gbjtpZighV2kobikpcmV0dXJuIGUobixyKTtmb3IodmFyIG89bi5sZW5ndGgsYT10P286LTEsaT1TZShuKTsodD9hLS06KythPG8pJiYhMSE9PXIoaVthXSxhLGkpOyk7cmV0dXJuIG59fWZ1bmN0aW9uIGpvKGUpe3JldHVybiBmdW5jdGlvbih0LG4scil7Zm9yKHZhciBvPS0xLGE9U2UodCksaT1yKHQpLGw9aS5sZW5ndGg7bC0tOyl7dmFyIHM9aVtlP2w6KytvXTtpZighMT09PW4oYVtzXSxzLGEpKWJyZWFrfXJldHVybiB0fX1mdW5jdGlvbiBSbyhlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49cm4odD12bCh0KSk/dW4odCk6byxyPW4/blswXTp0LmNoYXJBdCgwKSxhPW4/bW8obiwxKS5qb2luKFwiXCIpOnQuc2xpY2UoMSk7cmV0dXJuIHJbZV0oKSthfX1mdW5jdGlvbiBJbyhlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEl0KHFsKCRsKHQpLnJlcGxhY2UoWWUsXCJcIikpLGUsXCJcIil9fWZ1bmN0aW9uIFZvKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cztzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IGU7Y2FzZSAxOnJldHVybiBuZXcgZSh0WzBdKTtjYXNlIDI6cmV0dXJuIG5ldyBlKHRbMF0sdFsxXSk7Y2FzZSAzOnJldHVybiBuZXcgZSh0WzBdLHRbMV0sdFsyXSk7Y2FzZSA0OnJldHVybiBuZXcgZSh0WzBdLHRbMV0sdFsyXSx0WzNdKTtjYXNlIDU6cmV0dXJuIG5ldyBlKHRbMF0sdFsxXSx0WzJdLHRbM10sdFs0XSk7Y2FzZSA2OnJldHVybiBuZXcgZSh0WzBdLHRbMV0sdFsyXSx0WzNdLHRbNF0sdFs1XSk7Y2FzZSA3OnJldHVybiBuZXcgZSh0WzBdLHRbMV0sdFsyXSx0WzNdLHRbNF0sdFs1XSx0WzZdKX12YXIgbj1EbihlLnByb3RvdHlwZSkscj1lLmFwcGx5KG4sdCk7cmV0dXJuIFhpKHIpP3I6bn19ZnVuY3Rpb24gSG8oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXt2YXIgYT1TZSh0KTtpZighV2kodCkpe3ZhciBpPWFhKG4sMyk7dD1QbCh0KSxuPWZ1bmN0aW9uKGUpe3JldHVybiBpKGFbZV0sZSxhKX19dmFyIGw9ZSh0LG4scik7cmV0dXJuIGw+LTE/YVtpP3RbbF06bF06b319ZnVuY3Rpb24gQW8oZSl7cmV0dXJuIFFvKChmdW5jdGlvbih0KXt2YXIgbj10Lmxlbmd0aCxyPW4saT1abi5wcm90b3R5cGUudGhydTtmb3IoZSYmdC5yZXZlcnNlKCk7ci0tOyl7dmFyIGw9dFtyXTtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBsKXRocm93IG5ldyBMZShhKTtpZihpJiYhcyYmXCJ3cmFwcGVyXCI9PXJhKGwpKXZhciBzPW5ldyBabihbXSwhMCl9Zm9yKHI9cz9yOm47KytyPG47KXt2YXIgYz1yYShsPXRbcl0pLHU9XCJ3cmFwcGVyXCI9PWM/bmEobCk6bztzPXUmJm1hKHVbMF0pJiY0MjQ9PXVbMV0mJiF1WzRdLmxlbmd0aCYmMT09dVs5XT9zW3JhKHVbMF0pXS5hcHBseShzLHVbM10pOjE9PWwubGVuZ3RoJiZtYShsKT9zW2NdKCk6cy50aHJ1KGwpfXJldHVybiBmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cyxyPWVbMF07aWYocyYmMT09ZS5sZW5ndGgmJk5pKHIpKXJldHVybiBzLnBsYW50KHIpLnZhbHVlKCk7Zm9yKHZhciBvPTAsYT1uP3Rbb10uYXBwbHkodGhpcyxlKTpyOysrbzxuOylhPXRbb10uY2FsbCh0aGlzLGEpO3JldHVybiBhfX0pKX1mdW5jdGlvbiBUbyhlLHQsbixhLGksbCxzLHUsZCxwKXt2YXIgZj10JmMsaD0xJnQsZz0yJnQsdj0yNCZ0LEM9NTEyJnQsbT1nP286Vm8oZSk7cmV0dXJuIGZ1bmN0aW9uIGMoKXtmb3IodmFyIHc9YXJndW1lbnRzLmxlbmd0aCxiPXIodykseT13O3ktLTspYlt5XT1hcmd1bWVudHNbeV07aWYodil2YXIgeD1vYShjKSxrPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoLHI9MDtuLS07KWVbbl09PT10JiYrK3I7cmV0dXJuIHJ9KGIseCk7aWYoYSYmKGI9U28oYixhLGksdikpLGwmJihiPU9vKGIsbCxzLHYpKSx3LT1rLHYmJnc8cCl7dmFyIFM9bG4oYix4KTtyZXR1cm4gV28oZSx0LFRvLGMucGxhY2Vob2xkZXIsbixiLFMsdSxkLHAtdyl9dmFyIE89aD9uOnRoaXMsTT1nP09bZV06ZTtyZXR1cm4gdz1iLmxlbmd0aCx1P2I9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49ZS5sZW5ndGgscj12bih0Lmxlbmd0aCxuKSxhPU1vKGUpO3ItLTspe3ZhciBpPXRbcl07ZVtyXT1nYShpLG4pP2FbaV06b31yZXR1cm4gZX0oYix1KTpDJiZ3PjEmJmIucmV2ZXJzZSgpLGYmJmQ8dyYmKGIubGVuZ3RoPWQpLHRoaXMmJnRoaXMhPT1kdCYmdGhpcyBpbnN0YW5jZW9mIGMmJihNPW18fFZvKE0pKSxNLmFwcGx5KE8sYil9fWZ1bmN0aW9uIERvKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBDcihlLChmdW5jdGlvbihlLG8sYSl7dChyLG4oZSksbyxhKX0pKSxyfShuLGUsdChyKSx7fSl9fWZ1bmN0aW9uIEJvKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7dmFyIGE7aWYobj09PW8mJnI9PT1vKXJldHVybiB0O2lmKG4hPT1vJiYoYT1uKSxyIT09byl7aWYoYT09PW8pcmV0dXJuIHI7XCJzdHJpbmdcIj09dHlwZW9mIG58fFwic3RyaW5nXCI9PXR5cGVvZiByPyhuPWFvKG4pLHI9YW8ocikpOihuPW9vKG4pLHI9b28ocikpLGE9ZShuLHIpfXJldHVybiBhfX1mdW5jdGlvbiBabyhlKXtyZXR1cm4gUW8oKGZ1bmN0aW9uKHQpe3JldHVybiB0PWp0KHQscXQoYWEoKSkpLHpyKChmdW5jdGlvbihuKXt2YXIgcj10aGlzO3JldHVybiBlKHQsKGZ1bmN0aW9uKGUpe3JldHVybiBrdChlLHIsbil9KSl9KSl9KSl9ZnVuY3Rpb24gJG8oZSx0KXt2YXIgbj0odD10PT09bz9cIiBcIjphbyh0KSkubGVuZ3RoO2lmKG48MilyZXR1cm4gbj9Vcih0LGUpOnQ7dmFyIHI9VXIodCxwdChlL2NuKHQpKSk7cmV0dXJuIHJuKHQpP21vKHVuKHIpLDAsZSkuam9pbihcIlwiKTpyLnNsaWNlKDAsZSl9ZnVuY3Rpb24gTm8oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbixhKXtyZXR1cm4gYSYmXCJudW1iZXJcIiE9dHlwZW9mIGEmJnZhKHQsbixhKSYmKG49YT1vKSx0PWRsKHQpLG49PT1vPyhuPXQsdD0wKTpuPWRsKG4pLGZ1bmN0aW9uKGUsdCxuLG8pe2Zvcih2YXIgYT0tMSxpPWduKHB0KCh0LWUpLyhufHwxKSksMCksbD1yKGkpO2ktLTspbFtvP2k6KythXT1lLGUrPW47cmV0dXJuIGx9KHQsbixhPWE9PT1vP3Q8bj8xOi0xOmRsKGEpLGUpfX1mdW5jdGlvbiBGbyhlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdCYmXCJzdHJpbmdcIj09dHlwZW9mIG58fCh0PWhsKHQpLG49aGwobikpLGUodCxuKX19ZnVuY3Rpb24gV28oZSx0LG4scixhLGksbCxjLHUsZCl7dmFyIHA9OCZ0O3R8PXA/czo2NCw0Jih0Jj1+KHA/NjQ6cykpfHwodCY9LTQpO3ZhciBmPVtlLHQsYSxwP2k6byxwP2w6byxwP286aSxwP286bCxjLHUsZF0saD1uLmFwcGx5KG8sZik7cmV0dXJuIG1hKGUpJiZNYShoLGYpLGgucGxhY2Vob2xkZXI9cixQYShoLGUsdCl9ZnVuY3Rpb24gVW8oZSl7dmFyIHQ9a2VbZV07cmV0dXJuIGZ1bmN0aW9uKGUsbil7aWYoZT1obChlKSwobj1udWxsPT1uPzA6dm4ocGwobiksMjkyKSkmJkF0KGUpKXt2YXIgcj0odmwoZSkrXCJlXCIpLnNwbGl0KFwiZVwiKTtyZXR1cm4rKChyPSh2bCh0KHJbMF0rXCJlXCIrKCtyWzFdK24pKSkrXCJlXCIpLnNwbGl0KFwiZVwiKSlbMF0rXCJlXCIrKCtyWzFdLW4pKX1yZXR1cm4gdChlKX19dmFyIHpvPVNuJiYxL3NuKG5ldyBTbihbLC0wXSkpWzFdPT11P2Z1bmN0aW9uKGUpe3JldHVybiBuZXcgU24oZSl9OmlzO2Z1bmN0aW9uIEdvKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj1kYSh0KTtyZXR1cm4gbj09eD9vbih0KTpuPT1MP2Z1bmN0aW9uKGUpe3ZhciB0PS0xLG49QXJyYXkoZS5zaXplKTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlKXtuWysrdF09W2UsZV19KSksbn0odCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4ganQodCwoZnVuY3Rpb24odCl7cmV0dXJuW3QsZVt0XV19KSl9KHQsZSh0KSl9fWZ1bmN0aW9uIEtvKGUsdCxuLGksdSxkLHAsZil7dmFyIGg9MiZ0O2lmKCFoJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBMZShhKTt2YXIgZz1pP2kubGVuZ3RoOjA7aWYoZ3x8KHQmPS05NyxpPXU9bykscD1wPT09bz9wOmduKHBsKHApLDApLGY9Zj09PW8/ZjpwbChmKSxnLT11P3UubGVuZ3RoOjAsNjQmdCl7dmFyIHY9aSxDPXU7aT11PW99dmFyIG09aD9vOm5hKGUpLHc9W2UsdCxuLGksdSx2LEMsZCxwLGZdO2lmKG0mJmZ1bmN0aW9uKGUsdCl7dmFyIG49ZVsxXSxyPXRbMV0sbz1ufHIsYT1vPDEzMSxpPXI9PWMmJjg9PW58fHI9PWMmJjI1Nj09biYmZVs3XS5sZW5ndGg8PXRbOF18fDM4ND09ciYmdFs3XS5sZW5ndGg8PXRbOF0mJjg9PW47aWYoIWEmJiFpKXJldHVybiBlOzEmciYmKGVbMl09dFsyXSxvfD0xJm4/MDo0KTt2YXIgcz10WzNdO2lmKHMpe3ZhciB1PWVbM107ZVszXT11P1NvKHUscyx0WzRdKTpzLGVbNF09dT9sbihlWzNdLGwpOnRbNF19KHM9dFs1XSkmJih1PWVbNV0sZVs1XT11P09vKHUscyx0WzZdKTpzLGVbNl09dT9sbihlWzVdLGwpOnRbNl0pLChzPXRbN10pJiYoZVs3XT1zKSxyJmMmJihlWzhdPW51bGw9PWVbOF0/dFs4XTp2bihlWzhdLHRbOF0pKSxudWxsPT1lWzldJiYoZVs5XT10WzldKSxlWzBdPXRbMF0sZVsxXT1vfSh3LG0pLGU9d1swXSx0PXdbMV0sbj13WzJdLGk9d1szXSx1PXdbNF0sIShmPXdbOV09d1s5XT09PW8/aD8wOmUubGVuZ3RoOmduKHdbOV0tZywwKSkmJjI0JnQmJih0Jj0tMjUpLHQmJjEhPXQpYj04PT10fHwxNj09dD9mdW5jdGlvbihlLHQsbil7dmFyIGE9Vm8oZSk7cmV0dXJuIGZ1bmN0aW9uIGkoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxzPXIobCksYz1sLHU9b2EoaSk7Yy0tOylzW2NdPWFyZ3VtZW50c1tjXTt2YXIgZD1sPDMmJnNbMF0hPT11JiZzW2wtMV0hPT11P1tdOmxuKHMsdSk7cmV0dXJuKGwtPWQubGVuZ3RoKTxuP1dvKGUsdCxUbyxpLnBsYWNlaG9sZGVyLG8scyxkLG8sbyxuLWwpOmt0KHRoaXMmJnRoaXMhPT1kdCYmdGhpcyBpbnN0YW5jZW9mIGk/YTplLHRoaXMscyl9fShlLHQsZik6dCE9cyYmMzMhPXR8fHUubGVuZ3RoP1RvLmFwcGx5KG8sdyk6ZnVuY3Rpb24oZSx0LG4sbyl7dmFyIGE9MSZ0LGk9Vm8oZSk7cmV0dXJuIGZ1bmN0aW9uIHQoKXtmb3IodmFyIGw9LTEscz1hcmd1bWVudHMubGVuZ3RoLGM9LTEsdT1vLmxlbmd0aCxkPXIodStzKSxwPXRoaXMmJnRoaXMhPT1kdCYmdGhpcyBpbnN0YW5jZW9mIHQ/aTplOysrYzx1OylkW2NdPW9bY107Zm9yKDtzLS07KWRbYysrXT1hcmd1bWVudHNbKytsXTtyZXR1cm4ga3QocCxhP246dGhpcyxkKX19KGUsdCxuLGkpO2Vsc2UgdmFyIGI9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPTEmdCxvPVZvKGUpO3JldHVybiBmdW5jdGlvbiB0KCl7cmV0dXJuKHRoaXMmJnRoaXMhPT1kdCYmdGhpcyBpbnN0YW5jZW9mIHQ/bzplKS5hcHBseShyP246dGhpcyxhcmd1bWVudHMpfX0oZSx0LG4pO3JldHVybiBQYSgobT9ZcjpNYSkoYix3KSxlLHQpfWZ1bmN0aW9uIHFvKGUsdCxuLHIpe3JldHVybiBlPT09b3x8RGkoZSxFZVtuXSkmJiFJZS5jYWxsKHIsbik/dDplfWZ1bmN0aW9uIFlvKGUsdCxuLHIsYSxpKXtyZXR1cm4gWGkoZSkmJlhpKHQpJiYoaS5zZXQodCxlKSxEcihlLHQsbyxZbyxpKSxpLmRlbGV0ZSh0KSksZX1mdW5jdGlvbiBKbyhlKXtyZXR1cm4gbmwoZSk/bzplfWZ1bmN0aW9uIFhvKGUsdCxuLHIsYSxpKXt2YXIgbD0xJm4scz1lLmxlbmd0aCxjPXQubGVuZ3RoO2lmKHMhPWMmJiEobCYmYz5zKSlyZXR1cm4hMTt2YXIgdT1pLmdldChlKSxkPWkuZ2V0KHQpO2lmKHUmJmQpcmV0dXJuIHU9PXQmJmQ9PWU7dmFyIHA9LTEsZj0hMCxoPTImbj9uZXcgVW46bztmb3IoaS5zZXQoZSx0KSxpLnNldCh0LGUpOysrcDxzOyl7dmFyIGc9ZVtwXSx2PXRbcF07aWYocil2YXIgQz1sP3IodixnLHAsdCxlLGkpOnIoZyx2LHAsZSx0LGkpO2lmKEMhPT1vKXtpZihDKWNvbnRpbnVlO2Y9ITE7YnJlYWt9aWYoaCl7aWYoIUh0KHQsKGZ1bmN0aW9uKGUsdCl7aWYoIUp0KGgsdCkmJihnPT09ZXx8YShnLGUsbixyLGkpKSlyZXR1cm4gaC5wdXNoKHQpfSkpKXtmPSExO2JyZWFrfX1lbHNlIGlmKGchPT12JiYhYShnLHYsbixyLGkpKXtmPSExO2JyZWFrfX1yZXR1cm4gaS5kZWxldGUoZSksaS5kZWxldGUodCksZn1mdW5jdGlvbiBRbyhlKXtyZXR1cm4gX2Eoa2EoZSxvLEZhKSxlK1wiXCIpfWZ1bmN0aW9uIGVhKGUpe3JldHVybiB5cihlLFBsLGNhKX1mdW5jdGlvbiB0YShlKXtyZXR1cm4geXIoZSxFbCx1YSl9dmFyIG5hPUxuP2Z1bmN0aW9uKGUpe3JldHVybiBMbi5nZXQoZSl9OmlzO2Z1bmN0aW9uIHJhKGUpe2Zvcih2YXIgdD1lLm5hbWUrXCJcIixuPV9uW3RdLHI9SWUuY2FsbChfbix0KT9uLmxlbmd0aDowO3ItLTspe3ZhciBvPW5bcl0sYT1vLmZ1bmM7aWYobnVsbD09YXx8YT09ZSlyZXR1cm4gby5uYW1lfXJldHVybiB0fWZ1bmN0aW9uIG9hKGUpe3JldHVybihJZS5jYWxsKFRuLFwicGxhY2Vob2xkZXJcIik/VG46ZSkucGxhY2Vob2xkZXJ9ZnVuY3Rpb24gYWEoKXt2YXIgZT1Ubi5pdGVyYXRlZXx8bnM7cmV0dXJuIGU9ZT09PW5zP1JyOmUsYXJndW1lbnRzLmxlbmd0aD9lKGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0pOmV9ZnVuY3Rpb24gaWEoZSx0KXt2YXIgbixyLG89ZS5fX2RhdGFfXztyZXR1cm4oXCJzdHJpbmdcIj09KHI9dHlwZW9mKG49dCkpfHxcIm51bWJlclwiPT1yfHxcInN5bWJvbFwiPT1yfHxcImJvb2xlYW5cIj09cj9cIl9fcHJvdG9fX1wiIT09bjpudWxsPT09bik/b1tcInN0cmluZ1wiPT10eXBlb2YgdD9cInN0cmluZ1wiOlwiaGFzaFwiXTpvLm1hcH1mdW5jdGlvbiBsYShlKXtmb3IodmFyIHQ9UGwoZSksbj10Lmxlbmd0aDtuLS07KXt2YXIgcj10W25dLG89ZVtyXTt0W25dPVtyLG8seWEobyldfXJldHVybiB0fWZ1bmN0aW9uIHNhKGUsdCl7dmFyIG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZT9vOmVbdF19KGUsdCk7cmV0dXJuIGpyKG4pP246b312YXIgY2E9Z3Q/ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/W106KGU9U2UoZSksX3QoZ3QoZSksKGZ1bmN0aW9uKHQpe3JldHVybiB6ZS5jYWxsKGUsdCl9KSkpfTpmcyx1YT1ndD9mdW5jdGlvbihlKXtmb3IodmFyIHQ9W107ZTspUnQodCxjYShlKSksZT1XZShlKTtyZXR1cm4gdH06ZnMsZGE9eHI7ZnVuY3Rpb24gcGEoZSx0LG4pe2Zvcih2YXIgcj0tMSxvPSh0PXZvKHQsZSkpLmxlbmd0aCxhPSExOysrcjxvOyl7dmFyIGk9SGEodFtyXSk7aWYoIShhPW51bGwhPWUmJm4oZSxpKSkpYnJlYWs7ZT1lW2ldfXJldHVybiBhfHwrK3IhPW8/YTohIShvPW51bGw9PWU/MDplLmxlbmd0aCkmJkppKG8pJiZnYShpLG8pJiYoTmkoZSl8fCRpKGUpKX1mdW5jdGlvbiBmYShlKXtyZXR1cm5cImZ1bmN0aW9uXCIhPXR5cGVvZiBlLmNvbnN0cnVjdG9yfHxiYShlKT97fTpEbihXZShlKSl9ZnVuY3Rpb24gaGEoZSl7cmV0dXJuIE5pKGUpfHwkaShlKXx8ISEoS2UmJmUmJmVbS2VdKX1mdW5jdGlvbiBnYShlLHQpe3ZhciBuPXR5cGVvZiBlO3JldHVybiEhKHQ9bnVsbD09dD9kOnQpJiYoXCJudW1iZXJcIj09bnx8XCJzeW1ib2xcIiE9biYmQ2UudGVzdChlKSkmJmU+LTEmJmUlMT09MCYmZTx0fWZ1bmN0aW9uIHZhKGUsdCxuKXtpZighWGkobikpcmV0dXJuITE7dmFyIHI9dHlwZW9mIHQ7cmV0dXJuISEoXCJudW1iZXJcIj09cj9XaShuKSYmZ2EodCxuLmxlbmd0aCk6XCJzdHJpbmdcIj09ciYmdCBpbiBuKSYmRGkoblt0XSxlKX1mdW5jdGlvbiBDYShlLHQpe2lmKE5pKGUpKXJldHVybiExO3ZhciBuPXR5cGVvZiBlO3JldHVybiEoXCJudW1iZXJcIiE9biYmXCJzeW1ib2xcIiE9biYmXCJib29sZWFuXCIhPW4mJm51bGwhPWUmJiFpbChlKSl8fFEudGVzdChlKXx8IVgudGVzdChlKXx8bnVsbCE9dCYmZSBpbiBTZSh0KX1mdW5jdGlvbiBtYShlKXt2YXIgdD1yYShlKSxuPVRuW3RdO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIG58fCEodCBpbiAkbi5wcm90b3R5cGUpKXJldHVybiExO2lmKGU9PT1uKXJldHVybiEwO3ZhciByPW5hKG4pO3JldHVybiEhciYmZT09PXJbMF19KHluJiZkYShuZXcgeW4obmV3IEFycmF5QnVmZmVyKDEpKSkhPVJ8fHhuJiZkYShuZXcgeG4pIT14fHxrbiYmZGEoa24ucmVzb2x2ZSgpKSE9T3x8U24mJmRhKG5ldyBTbikhPUx8fE9uJiZkYShuZXcgT24pIT1FKSYmKGRhPWZ1bmN0aW9uKGUpe3ZhciB0PXhyKGUpLG49dD09Uz9lLmNvbnN0cnVjdG9yOm8scj1uP0FhKG4pOlwiXCI7aWYocilzd2l0Y2gocil7Y2FzZSBQbjpyZXR1cm4gUjtjYXNlIEVuOnJldHVybiB4O2Nhc2Ugam46cmV0dXJuIE87Y2FzZSBSbjpyZXR1cm4gTDtjYXNlIEluOnJldHVybiBFfXJldHVybiB0fSk7dmFyIHdhPWplP3FpOmhzO2Z1bmN0aW9uIGJhKGUpe3ZhciB0PWUmJmUuY29uc3RydWN0b3I7cmV0dXJuIGU9PT0oXCJmdW5jdGlvblwiPT10eXBlb2YgdCYmdC5wcm90b3R5cGV8fEVlKX1mdW5jdGlvbiB5YShlKXtyZXR1cm4gZT09ZSYmIVhpKGUpfWZ1bmN0aW9uIHhhKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBudWxsIT1uJiZuW2VdPT09dCYmKHQhPT1vfHxlIGluIFNlKG4pKX19ZnVuY3Rpb24ga2EoZSx0LG4pe3JldHVybiB0PWduKHQ9PT1vP2UubGVuZ3RoLTE6dCwwKSxmdW5jdGlvbigpe2Zvcih2YXIgbz1hcmd1bWVudHMsYT0tMSxpPWduKG8ubGVuZ3RoLXQsMCksbD1yKGkpOysrYTxpOylsW2FdPW9bdCthXTthPS0xO2Zvcih2YXIgcz1yKHQrMSk7KythPHQ7KXNbYV09b1thXTtyZXR1cm4gc1t0XT1uKGwpLGt0KGUsdGhpcyxzKX19ZnVuY3Rpb24gU2EoZSx0KXtyZXR1cm4gdC5sZW5ndGg8Mj9lOmJyKGUsUXIodCwwLC0xKSl9ZnVuY3Rpb24gT2EoZSx0KXtpZigoXCJjb25zdHJ1Y3RvclwiIT09dHx8XCJmdW5jdGlvblwiIT10eXBlb2YgZVt0XSkmJlwiX19wcm90b19fXCIhPXQpcmV0dXJuIGVbdF19dmFyIE1hPUVhKFlyKSxMYT11dHx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZHQuc2V0VGltZW91dChlLHQpfSxfYT1FYShKcik7ZnVuY3Rpb24gUGEoZSx0LG4pe3ZhciByPXQrXCJcIjtyZXR1cm4gX2EoZSxmdW5jdGlvbihlLHQpe3ZhciBuPXQubGVuZ3RoO2lmKCFuKXJldHVybiBlO3ZhciByPW4tMTtyZXR1cm4gdFtyXT0obj4xP1wiJiBcIjpcIlwiKSt0W3JdLHQ9dC5qb2luKG4+Mj9cIiwgXCI6XCIgXCIpLGUucmVwbGFjZShhZSxcIntcXG4vKiBbd3JhcHBlZCB3aXRoIFwiK3QrXCJdICovXFxuXCIpfShyLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIE90KGgsKGZ1bmN0aW9uKG4pe3ZhciByPVwiXy5cIituWzBdO3QmblsxXSYmIVB0KGUscikmJmUucHVzaChyKX0pKSxlLnNvcnQoKX0oZnVuY3Rpb24oZSl7dmFyIHQ9ZS5tYXRjaChpZSk7cmV0dXJuIHQ/dFsxXS5zcGxpdChsZSk6W119KHIpLG4pKSl9ZnVuY3Rpb24gRWEoZSl7dmFyIHQ9MCxuPTA7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9Q24oKSxhPTE2LShyLW4pO2lmKG49cixhPjApe2lmKCsrdD49ODAwKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSB0PTA7cmV0dXJuIGUuYXBwbHkobyxhcmd1bWVudHMpfX1mdW5jdGlvbiBqYShlLHQpe3ZhciBuPS0xLHI9ZS5sZW5ndGgsYT1yLTE7Zm9yKHQ9dD09PW8/cjp0Oysrbjx0Oyl7dmFyIGk9V3IobixhKSxsPWVbaV07ZVtpXT1lW25dLGVbbl09bH1yZXR1cm4gZS5sZW5ndGg9dCxlfXZhciBSYSxJYSxWYT0oUmE9UmkoKGZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiA0Nj09PWUuY2hhckNvZGVBdCgwKSYmdC5wdXNoKFwiXCIpLGUucmVwbGFjZShlZSwoZnVuY3Rpb24oZSxuLHIsbyl7dC5wdXNoKHI/by5yZXBsYWNlKHVlLFwiJDFcIik6bnx8ZSl9KSksdH0pLChmdW5jdGlvbihlKXtyZXR1cm4gNTAwPT09SWEuc2l6ZSYmSWEuY2xlYXIoKSxlfSkpLElhPVJhLmNhY2hlLFJhKTtmdW5jdGlvbiBIYShlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZXx8aWwoZSkpcmV0dXJuIGU7dmFyIHQ9ZStcIlwiO3JldHVyblwiMFwiPT10JiYxL2U9PS0xLzA/XCItMFwiOnR9ZnVuY3Rpb24gQWEoZSl7aWYobnVsbCE9ZSl7dHJ5e3JldHVybiBSZS5jYWxsKGUpfWNhdGNoKGUpe310cnl7cmV0dXJuIGUrXCJcIn1jYXRjaChlKXt9fXJldHVyblwiXCJ9ZnVuY3Rpb24gVGEoZSl7aWYoZSBpbnN0YW5jZW9mICRuKXJldHVybiBlLmNsb25lKCk7dmFyIHQ9bmV3IFpuKGUuX193cmFwcGVkX18sZS5fX2NoYWluX18pO3JldHVybiB0Ll9fYWN0aW9uc19fPU1vKGUuX19hY3Rpb25zX18pLHQuX19pbmRleF9fPWUuX19pbmRleF9fLHQuX192YWx1ZXNfXz1lLl9fdmFsdWVzX18sdH12YXIgRGE9enIoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIFVpKGUpP3NyKGUsaHIodCwxLFVpLCEwKSk6W119KSksQmE9enIoKGZ1bmN0aW9uKGUsdCl7dmFyIG49S2EodCk7cmV0dXJuIFVpKG4pJiYobj1vKSxVaShlKT9zcihlLGhyKHQsMSxVaSwhMCksYWEobiwyKSk6W119KSksWmE9enIoKGZ1bmN0aW9uKGUsdCl7dmFyIG49S2EodCk7cmV0dXJuIFVpKG4pJiYobj1vKSxVaShlKT9zcihlLGhyKHQsMSxVaSwhMCksbyxuKTpbXX0pKTtmdW5jdGlvbiAkYShlLHQsbil7dmFyIHI9bnVsbD09ZT8wOmUubGVuZ3RoO2lmKCFyKXJldHVybi0xO3ZhciBvPW51bGw9PW4/MDpwbChuKTtyZXR1cm4gbzwwJiYobz1nbihyK28sMCkpLER0KGUsYWEodCwzKSxvKX1mdW5jdGlvbiBOYShlLHQsbil7dmFyIHI9bnVsbD09ZT8wOmUubGVuZ3RoO2lmKCFyKXJldHVybi0xO3ZhciBhPXItMTtyZXR1cm4gbiE9PW8mJihhPXBsKG4pLGE9bjwwP2duKHIrYSwwKTp2bihhLHItMSkpLER0KGUsYWEodCwzKSxhLCEwKX1mdW5jdGlvbiBGYShlKXtyZXR1cm4gbnVsbCE9ZSYmZS5sZW5ndGg/aHIoZSwxKTpbXX1mdW5jdGlvbiBXYShlKXtyZXR1cm4gZSYmZS5sZW5ndGg/ZVswXTpvfXZhciBVYT16cigoZnVuY3Rpb24oZSl7dmFyIHQ9anQoZSxobyk7cmV0dXJuIHQubGVuZ3RoJiZ0WzBdPT09ZVswXT9Ncih0KTpbXX0pKSx6YT16cigoZnVuY3Rpb24oZSl7dmFyIHQ9S2EoZSksbj1qdChlLGhvKTtyZXR1cm4gdD09PUthKG4pP3Q9bzpuLnBvcCgpLG4ubGVuZ3RoJiZuWzBdPT09ZVswXT9NcihuLGFhKHQsMikpOltdfSkpLEdhPXpyKChmdW5jdGlvbihlKXt2YXIgdD1LYShlKSxuPWp0KGUsaG8pO3JldHVybih0PVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpvKSYmbi5wb3AoKSxuLmxlbmd0aCYmblswXT09PWVbMF0/TXIobixvLHQpOltdfSkpO2Z1bmN0aW9uIEthKGUpe3ZhciB0PW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gdD9lW3QtMV06b312YXIgcWE9enIoWWEpO2Z1bmN0aW9uIFlhKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoJiZ0JiZ0Lmxlbmd0aD9OcihlLHQpOmV9dmFyIEphPVFvKChmdW5jdGlvbihlLHQpe3ZhciBuPW51bGw9PWU/MDplLmxlbmd0aCxyPXJyKGUsdCk7cmV0dXJuIEZyKGUsanQodCwoZnVuY3Rpb24oZSl7cmV0dXJuIGdhKGUsbik/K2U6ZX0pKS5zb3J0KGtvKSkscn0pKTtmdW5jdGlvbiBYYShlKXtyZXR1cm4gbnVsbD09ZT9lOmJuLmNhbGwoZSl9dmFyIFFhPXpyKChmdW5jdGlvbihlKXtyZXR1cm4gaW8oaHIoZSwxLFVpLCEwKSl9KSksZWk9enIoKGZ1bmN0aW9uKGUpe3ZhciB0PUthKGUpO3JldHVybiBVaSh0KSYmKHQ9byksaW8oaHIoZSwxLFVpLCEwKSxhYSh0LDIpKX0pKSx0aT16cigoZnVuY3Rpb24oZSl7dmFyIHQ9S2EoZSk7cmV0dXJuIHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Om8saW8oaHIoZSwxLFVpLCEwKSxvLHQpfSkpO2Z1bmN0aW9uIG5pKGUpe2lmKCFlfHwhZS5sZW5ndGgpcmV0dXJuW107dmFyIHQ9MDtyZXR1cm4gZT1fdChlLChmdW5jdGlvbihlKXtpZihVaShlKSlyZXR1cm4gdD1nbihlLmxlbmd0aCx0KSwhMH0pKSxHdCh0LChmdW5jdGlvbih0KXtyZXR1cm4ganQoZSxGdCh0KSl9KSl9ZnVuY3Rpb24gcmkoZSx0KXtpZighZXx8IWUubGVuZ3RoKXJldHVybltdO3ZhciBuPW5pKGUpO3JldHVybiBudWxsPT10P246anQobiwoZnVuY3Rpb24oZSl7cmV0dXJuIGt0KHQsbyxlKX0pKX12YXIgb2k9enIoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIFVpKGUpP3NyKGUsdCk6W119KSksYWk9enIoKGZ1bmN0aW9uKGUpe3JldHVybiBwbyhfdChlLFVpKSl9KSksaWk9enIoKGZ1bmN0aW9uKGUpe3ZhciB0PUthKGUpO3JldHVybiBVaSh0KSYmKHQ9bykscG8oX3QoZSxVaSksYWEodCwyKSl9KSksbGk9enIoKGZ1bmN0aW9uKGUpe3ZhciB0PUthKGUpO3JldHVybiB0PVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpvLHBvKF90KGUsVWkpLG8sdCl9KSksc2k9enIobmkpLGNpPXpyKChmdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aCxuPXQ+MT9lW3QtMV06bztyZXR1cm4gbj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBuPyhlLnBvcCgpLG4pOm8scmkoZSxuKX0pKTtmdW5jdGlvbiB1aShlKXt2YXIgdD1UbihlKTtyZXR1cm4gdC5fX2NoYWluX189ITAsdH1mdW5jdGlvbiBkaShlLHQpe3JldHVybiB0KGUpfXZhciBwaT1RbygoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgsbj10P2VbMF06MCxyPXRoaXMuX193cmFwcGVkX18sYT1mdW5jdGlvbih0KXtyZXR1cm4gcnIodCxlKX07cmV0dXJuISh0PjF8fHRoaXMuX19hY3Rpb25zX18ubGVuZ3RoKSYmciBpbnN0YW5jZW9mICRuJiZnYShuKT8oKHI9ci5zbGljZShuLCtuKyh0PzE6MCkpKS5fX2FjdGlvbnNfXy5wdXNoKHtmdW5jOmRpLGFyZ3M6W2FdLHRoaXNBcmc6b30pLG5ldyBabihyLHRoaXMuX19jaGFpbl9fKS50aHJ1KChmdW5jdGlvbihlKXtyZXR1cm4gdCYmIWUubGVuZ3RoJiZlLnB1c2gobyksZX0pKSk6dGhpcy50aHJ1KGEpfSkpLGZpPV9vKChmdW5jdGlvbihlLHQsbil7SWUuY2FsbChlLG4pPysrZVtuXTpucihlLG4sMSl9KSksaGk9SG8oJGEpLGdpPUhvKE5hKTtmdW5jdGlvbiB2aShlLHQpe3JldHVybihOaShlKT9PdDpjcikoZSxhYSh0LDMpKX1mdW5jdGlvbiBDaShlLHQpe3JldHVybihOaShlKT9NdDp1cikoZSxhYSh0LDMpKX12YXIgbWk9X28oKGZ1bmN0aW9uKGUsdCxuKXtJZS5jYWxsKGUsbik/ZVtuXS5wdXNoKHQpOm5yKGUsbixbdF0pfSkpLHdpPXpyKChmdW5jdGlvbihlLHQsbil7dmFyIG89LTEsYT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0LGk9V2koZSk/cihlLmxlbmd0aCk6W107cmV0dXJuIGNyKGUsKGZ1bmN0aW9uKGUpe2lbKytvXT1hP2t0KHQsZSxuKTpMcihlLHQsbil9KSksaX0pKSxiaT1fbygoZnVuY3Rpb24oZSx0LG4pe25yKGUsbix0KX0pKTtmdW5jdGlvbiB5aShlLHQpe3JldHVybihOaShlKT9qdDpIcikoZSxhYSh0LDMpKX12YXIgeGk9X28oKGZ1bmN0aW9uKGUsdCxuKXtlW24/MDoxXS5wdXNoKHQpfSksKGZ1bmN0aW9uKCl7cmV0dXJuW1tdLFtdXX0pKSxraT16cigoZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybltdO3ZhciBuPXQubGVuZ3RoO3JldHVybiBuPjEmJnZhKGUsdFswXSx0WzFdKT90PVtdOm4+MiYmdmEodFswXSx0WzFdLHRbMl0pJiYodD1bdFswXV0pLFpyKGUsaHIodCwxKSxbXSl9KSksU2k9Y3R8fGZ1bmN0aW9uKCl7cmV0dXJuIGR0LkRhdGUubm93KCl9O2Z1bmN0aW9uIE9pKGUsdCxuKXtyZXR1cm4gdD1uP286dCx0PWUmJm51bGw9PXQ/ZS5sZW5ndGg6dCxLbyhlLGMsbyxvLG8sbyx0KX1mdW5jdGlvbiBNaShlLHQpe3ZhciBuO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgbmV3IExlKGEpO3JldHVybiBlPXBsKGUpLGZ1bmN0aW9uKCl7cmV0dXJuLS1lPjAmJihuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxlPD0xJiYodD1vKSxufX12YXIgTGk9enIoKGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0xO2lmKG4ubGVuZ3RoKXt2YXIgbz1sbihuLG9hKExpKSk7cnw9c31yZXR1cm4gS28oZSxyLHQsbixvKX0pKSxfaT16cigoZnVuY3Rpb24oZSx0LG4pe3ZhciByPTM7aWYobi5sZW5ndGgpe3ZhciBvPWxuKG4sb2EoX2kpKTtyfD1zfXJldHVybiBLbyh0LHIsZSxuLG8pfSkpO2Z1bmN0aW9uIFBpKGUsdCxuKXt2YXIgcixpLGwscyxjLHUsZD0wLHA9ITEsZj0hMSxoPSEwO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IExlKGEpO2Z1bmN0aW9uIGcodCl7dmFyIG49cixhPWk7cmV0dXJuIHI9aT1vLGQ9dCxzPWUuYXBwbHkoYSxuKX1mdW5jdGlvbiB2KGUpe3ZhciBuPWUtdTtyZXR1cm4gdT09PW98fG4+PXR8fG48MHx8ZiYmZS1kPj1sfWZ1bmN0aW9uIEMoKXt2YXIgZT1TaSgpO2lmKHYoZSkpcmV0dXJuIG0oZSk7Yz1MYShDLGZ1bmN0aW9uKGUpe3ZhciBuPXQtKGUtdSk7cmV0dXJuIGY/dm4obixsLShlLWQpKTpufShlKSl9ZnVuY3Rpb24gbShlKXtyZXR1cm4gYz1vLGgmJnI/ZyhlKToocj1pPW8scyl9ZnVuY3Rpb24gdygpe3ZhciBlPVNpKCksbj12KGUpO2lmKHI9YXJndW1lbnRzLGk9dGhpcyx1PWUsbil7aWYoYz09PW8pcmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBkPWUsYz1MYShDLHQpLHA/ZyhlKTpzfSh1KTtpZihmKXJldHVybiB3byhjKSxjPUxhKEMsdCksZyh1KX1yZXR1cm4gYz09PW8mJihjPUxhKEMsdCkpLHN9cmV0dXJuIHQ9aGwodCl8fDAsWGkobikmJihwPSEhbi5sZWFkaW5nLGw9KGY9XCJtYXhXYWl0XCJpbiBuKT9nbihobChuLm1heFdhaXQpfHwwLHQpOmwsaD1cInRyYWlsaW5nXCJpbiBuPyEhbi50cmFpbGluZzpoKSx3LmNhbmNlbD1mdW5jdGlvbigpe2MhPT1vJiZ3byhjKSxkPTAscj11PWk9Yz1vfSx3LmZsdXNoPWZ1bmN0aW9uKCl7cmV0dXJuIGM9PT1vP3M6bShTaSgpKX0sd312YXIgRWk9enIoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGxyKGUsMSx0KX0pKSxqaT16cigoZnVuY3Rpb24oZSx0LG4pe3JldHVybiBscihlLGhsKHQpfHwwLG4pfSkpO2Z1bmN0aW9uIFJpKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZXx8bnVsbCE9dCYmXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBuZXcgTGUoYSk7dmFyIG49ZnVuY3Rpb24oKXt2YXIgcj1hcmd1bWVudHMsbz10P3QuYXBwbHkodGhpcyxyKTpyWzBdLGE9bi5jYWNoZTtpZihhLmhhcyhvKSlyZXR1cm4gYS5nZXQobyk7dmFyIGk9ZS5hcHBseSh0aGlzLHIpO3JldHVybiBuLmNhY2hlPWEuc2V0KG8saSl8fGEsaX07cmV0dXJuIG4uY2FjaGU9bmV3KFJpLkNhY2hlfHxXbiksbn1mdW5jdGlvbiBJaShlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBMZShhKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHM7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIWUuY2FsbCh0aGlzKTtjYXNlIDE6cmV0dXJuIWUuY2FsbCh0aGlzLHRbMF0pO2Nhc2UgMjpyZXR1cm4hZS5jYWxsKHRoaXMsdFswXSx0WzFdKTtjYXNlIDM6cmV0dXJuIWUuY2FsbCh0aGlzLHRbMF0sdFsxXSx0WzJdKX1yZXR1cm4hZS5hcHBseSh0aGlzLHQpfX1SaS5DYWNoZT1Xbjt2YXIgVmk9Q28oKGZ1bmN0aW9uKGUsdCl7dmFyIG49KHQ9MT09dC5sZW5ndGgmJk5pKHRbMF0pP2p0KHRbMF0scXQoYWEoKSkpOmp0KGhyKHQsMSkscXQoYWEoKSkpKS5sZW5ndGg7cmV0dXJuIHpyKChmdW5jdGlvbihyKXtmb3IodmFyIG89LTEsYT12bihyLmxlbmd0aCxuKTsrK288YTspcltvXT10W29dLmNhbGwodGhpcyxyW29dKTtyZXR1cm4ga3QoZSx0aGlzLHIpfSkpfSkpLEhpPXpyKChmdW5jdGlvbihlLHQpe3ZhciBuPWxuKHQsb2EoSGkpKTtyZXR1cm4gS28oZSxzLG8sdCxuKX0pKSxBaT16cigoZnVuY3Rpb24oZSx0KXt2YXIgbj1sbih0LG9hKEFpKSk7cmV0dXJuIEtvKGUsNjQsbyx0LG4pfSkpLFRpPVFvKChmdW5jdGlvbihlLHQpe3JldHVybiBLbyhlLDI1NixvLG8sbyx0KX0pKTtmdW5jdGlvbiBEaShlLHQpe3JldHVybiBlPT09dHx8ZSE9ZSYmdCE9dH12YXIgQmk9Rm8oa3IpLFppPUZvKChmdW5jdGlvbihlLHQpe3JldHVybiBlPj10fSkpLCRpPV9yKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk/X3I6ZnVuY3Rpb24oZSl7cmV0dXJuIFFpKGUpJiZJZS5jYWxsKGUsXCJjYWxsZWVcIikmJiF6ZS5jYWxsKGUsXCJjYWxsZWVcIil9LE5pPXIuaXNBcnJheSxGaT1DdD9xdChDdCk6ZnVuY3Rpb24oZSl7cmV0dXJuIFFpKGUpJiZ4cihlKT09an07ZnVuY3Rpb24gV2koZSl7cmV0dXJuIG51bGwhPWUmJkppKGUubGVuZ3RoKSYmIXFpKGUpfWZ1bmN0aW9uIFVpKGUpe3JldHVybiBRaShlKSYmV2koZSl9dmFyIHppPXZ0fHxocyxHaT1tdD9xdChtdCk6ZnVuY3Rpb24oZSl7cmV0dXJuIFFpKGUpJiZ4cihlKT09bX07ZnVuY3Rpb24gS2koZSl7aWYoIVFpKGUpKXJldHVybiExO3ZhciB0PXhyKGUpO3JldHVybiB0PT13fHxcIltvYmplY3QgRE9NRXhjZXB0aW9uXVwiPT10fHxcInN0cmluZ1wiPT10eXBlb2YgZS5tZXNzYWdlJiZcInN0cmluZ1wiPT10eXBlb2YgZS5uYW1lJiYhbmwoZSl9ZnVuY3Rpb24gcWkoZSl7aWYoIVhpKGUpKXJldHVybiExO3ZhciB0PXhyKGUpO3JldHVybiB0PT1ifHx0PT15fHxcIltvYmplY3QgQXN5bmNGdW5jdGlvbl1cIj09dHx8XCJbb2JqZWN0IFByb3h5XVwiPT10fWZ1bmN0aW9uIFlpKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlJiZlPT1wbChlKX1mdW5jdGlvbiBKaShlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZSYmZT4tMSYmZSUxPT0wJiZlPD1kfWZ1bmN0aW9uIFhpKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiBudWxsIT1lJiYoXCJvYmplY3RcIj09dHx8XCJmdW5jdGlvblwiPT10KX1mdW5jdGlvbiBRaShlKXtyZXR1cm4gbnVsbCE9ZSYmXCJvYmplY3RcIj09dHlwZW9mIGV9dmFyIGVsPXd0P3F0KHd0KTpmdW5jdGlvbihlKXtyZXR1cm4gUWkoZSkmJmRhKGUpPT14fTtmdW5jdGlvbiB0bChlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZXx8UWkoZSkmJnhyKGUpPT1rfWZ1bmN0aW9uIG5sKGUpe2lmKCFRaShlKXx8eHIoZSkhPVMpcmV0dXJuITE7dmFyIHQ9V2UoZSk7aWYobnVsbD09PXQpcmV0dXJuITA7dmFyIG49SWUuY2FsbCh0LFwiY29uc3RydWN0b3JcIikmJnQuY29uc3RydWN0b3I7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgbiYmbiBpbnN0YW5jZW9mIG4mJlJlLmNhbGwobik9PVRlfXZhciBybD1idD9xdChidCk6ZnVuY3Rpb24oZSl7cmV0dXJuIFFpKGUpJiZ4cihlKT09TX0sb2w9eXQ/cXQoeXQpOmZ1bmN0aW9uKGUpe3JldHVybiBRaShlKSYmZGEoZSk9PUx9O2Z1bmN0aW9uIGFsKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlfHwhTmkoZSkmJlFpKGUpJiZ4cihlKT09X31mdW5jdGlvbiBpbChlKXtyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgZXx8UWkoZSkmJnhyKGUpPT1QfXZhciBsbD14dD9xdCh4dCk6ZnVuY3Rpb24oZSl7cmV0dXJuIFFpKGUpJiZKaShlLmxlbmd0aCkmJiEhb3RbeHIoZSldfSxzbD1GbyhWciksY2w9Rm8oKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU8PXR9KSk7ZnVuY3Rpb24gdWwoZSl7aWYoIWUpcmV0dXJuW107aWYoV2koZSkpcmV0dXJuIGFsKGUpP3VuKGUpOk1vKGUpO2lmKHFlJiZlW3FlXSlyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49W107ISh0PWUubmV4dCgpKS5kb25lOyluLnB1c2godC52YWx1ZSk7cmV0dXJuIG59KGVbcWVdKCkpO3ZhciB0PWRhKGUpO3JldHVybih0PT14P29uOnQ9PUw/c246RGwpKGUpfWZ1bmN0aW9uIGRsKGUpe3JldHVybiBlPyhlPWhsKGUpKT09PXV8fGU9PT0tMS8wPzE3OTc2OTMxMzQ4NjIzMTU3ZTI5MiooZTwwPy0xOjEpOmU9PWU/ZTowOjA9PT1lP2U6MH1mdW5jdGlvbiBwbChlKXt2YXIgdD1kbChlKSxuPXQlMTtyZXR1cm4gdD09dD9uP3Qtbjp0OjB9ZnVuY3Rpb24gZmwoZSl7cmV0dXJuIGU/b3IocGwoZSksMCxmKTowfWZ1bmN0aW9uIGhsKGUpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXJldHVybiBlO2lmKGlsKGUpKXJldHVybiBwO2lmKFhpKGUpKXt2YXIgdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnZhbHVlT2Y/ZS52YWx1ZU9mKCk6ZTtlPVhpKHQpP3QrXCJcIjp0fWlmKFwic3RyaW5nXCIhPXR5cGVvZiBlKXJldHVybiAwPT09ZT9lOitlO2U9S3QoZSk7dmFyIG49aGUudGVzdChlKTtyZXR1cm4gbnx8dmUudGVzdChlKT9zdChlLnNsaWNlKDIpLG4/Mjo4KTpmZS50ZXN0KGUpP3A6K2V9ZnVuY3Rpb24gZ2woZSl7cmV0dXJuIExvKGUsRWwoZSkpfWZ1bmN0aW9uIHZsKGUpe3JldHVybiBudWxsPT1lP1wiXCI6YW8oZSl9dmFyIENsPVBvKChmdW5jdGlvbihlLHQpe2lmKGJhKHQpfHxXaSh0KSlMbyh0LFBsKHQpLGUpO2Vsc2UgZm9yKHZhciBuIGluIHQpSWUuY2FsbCh0LG4pJiZYbihlLG4sdFtuXSl9KSksbWw9UG8oKGZ1bmN0aW9uKGUsdCl7TG8odCxFbCh0KSxlKX0pKSx3bD1QbygoZnVuY3Rpb24oZSx0LG4scil7TG8odCxFbCh0KSxlLHIpfSkpLGJsPVBvKChmdW5jdGlvbihlLHQsbixyKXtMbyh0LFBsKHQpLGUscil9KSkseWw9UW8ocnIpLHhsPXpyKChmdW5jdGlvbihlLHQpe2U9U2UoZSk7dmFyIG49LTEscj10Lmxlbmd0aCxhPXI+Mj90WzJdOm87Zm9yKGEmJnZhKHRbMF0sdFsxXSxhKSYmKHI9MSk7KytuPHI7KWZvcih2YXIgaT10W25dLGw9RWwoaSkscz0tMSxjPWwubGVuZ3RoOysrczxjOyl7dmFyIHU9bFtzXSxkPWVbdV07KGQ9PT1vfHxEaShkLEVlW3VdKSYmIUllLmNhbGwoZSx1KSkmJihlW3VdPWlbdV0pfXJldHVybiBlfSkpLGtsPXpyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5wdXNoKG8sWW8pLGt0KFJsLG8sZSl9KSk7ZnVuY3Rpb24gU2woZSx0LG4pe3ZhciByPW51bGw9PWU/bzpicihlLHQpO3JldHVybiByPT09bz9uOnJ9ZnVuY3Rpb24gT2woZSx0KXtyZXR1cm4gbnVsbCE9ZSYmcGEoZSx0LE9yKX12YXIgTWw9RG8oKGZ1bmN0aW9uKGUsdCxuKXtudWxsIT10JiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB0LnRvU3RyaW5nJiYodD1BZS5jYWxsKHQpKSxlW3RdPW59KSxYbCh0cykpLExsPURvKChmdW5jdGlvbihlLHQsbil7bnVsbCE9dCYmXCJmdW5jdGlvblwiIT10eXBlb2YgdC50b1N0cmluZyYmKHQ9QWUuY2FsbCh0KSksSWUuY2FsbChlLHQpP2VbdF0ucHVzaChuKTplW3RdPVtuXX0pLGFhKSxfbD16cihMcik7ZnVuY3Rpb24gUGwoZSl7cmV0dXJuIFdpKGUpP0duKGUpOklyKGUpfWZ1bmN0aW9uIEVsKGUpe3JldHVybiBXaShlKT9HbihlLCEwKTpmdW5jdGlvbihlKXtpZighWGkoZSkpcmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PVtdO2lmKG51bGwhPWUpZm9yKHZhciBuIGluIFNlKGUpKXQucHVzaChuKTtyZXR1cm4gdH0oZSk7dmFyIHQ9YmEoZSksbj1bXTtmb3IodmFyIHIgaW4gZSkoXCJjb25zdHJ1Y3RvclwiIT1yfHwhdCYmSWUuY2FsbChlLHIpKSYmbi5wdXNoKHIpO3JldHVybiBufShlKX12YXIgamw9UG8oKGZ1bmN0aW9uKGUsdCxuKXtEcihlLHQsbil9KSksUmw9UG8oKGZ1bmN0aW9uKGUsdCxuLHIpe0RyKGUsdCxuLHIpfSkpLElsPVFvKChmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2lmKG51bGw9PWUpcmV0dXJuIG47dmFyIHI9ITE7dD1qdCh0LChmdW5jdGlvbih0KXtyZXR1cm4gdD12byh0LGUpLHJ8fChyPXQubGVuZ3RoPjEpLHR9KSksTG8oZSx0YShlKSxuKSxyJiYobj1hcihuLDcsSm8pKTtmb3IodmFyIG89dC5sZW5ndGg7by0tOylsbyhuLHRbb10pO3JldHVybiBufSkpLFZsPVFvKChmdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lP3t9OmZ1bmN0aW9uKGUsdCl7cmV0dXJuICRyKGUsdCwoZnVuY3Rpb24odCxuKXtyZXR1cm4gT2woZSxuKX0pKX0oZSx0KX0pKTtmdW5jdGlvbiBIbChlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG49anQodGEoZSksKGZ1bmN0aW9uKGUpe3JldHVybltlXX0pKTtyZXR1cm4gdD1hYSh0KSwkcihlLG4sKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQoZSxuWzBdKX0pKX12YXIgQWw9R28oUGwpLFRsPUdvKEVsKTtmdW5jdGlvbiBEbChlKXtyZXR1cm4gbnVsbD09ZT9bXTpZdChlLFBsKGUpKX12YXIgQmw9SW8oKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD10LnRvTG93ZXJDYXNlKCksZSsobj9abCh0KTp0KX0pKTtmdW5jdGlvbiBabChlKXtyZXR1cm4gS2wodmwoZSkudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gJGwoZSl7cmV0dXJuKGU9dmwoZSkpJiZlLnJlcGxhY2UobWUsZW4pLnJlcGxhY2UoSmUsXCJcIil9dmFyIE5sPUlvKChmdW5jdGlvbihlLHQsbil7cmV0dXJuIGUrKG4/XCItXCI6XCJcIikrdC50b0xvd2VyQ2FzZSgpfSkpLEZsPUlvKChmdW5jdGlvbihlLHQsbil7cmV0dXJuIGUrKG4/XCIgXCI6XCJcIikrdC50b0xvd2VyQ2FzZSgpfSkpLFdsPVJvKFwidG9Mb3dlckNhc2VcIiksVWw9SW8oKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSsobj9cIl9cIjpcIlwiKSt0LnRvTG93ZXJDYXNlKCl9KSksemw9SW8oKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSsobj9cIiBcIjpcIlwiKStLbCh0KX0pKSxHbD1JbygoZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlKyhuP1wiIFwiOlwiXCIpK3QudG9VcHBlckNhc2UoKX0pKSxLbD1SbyhcInRvVXBwZXJDYXNlXCIpO2Z1bmN0aW9uIHFsKGUsdCxuKXtyZXR1cm4gZT12bChlKSwodD1uP286dCk9PT1vP2Z1bmN0aW9uKGUpe3JldHVybiB0dC50ZXN0KGUpfShlKT9mdW5jdGlvbihlKXtyZXR1cm4gZS5tYXRjaChRZSl8fFtdfShlKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXRjaChzZSl8fFtdfShlKTplLm1hdGNoKHQpfHxbXX12YXIgWWw9enIoKGZ1bmN0aW9uKGUsdCl7dHJ5e3JldHVybiBrdChlLG8sdCl9Y2F0Y2goZSl7cmV0dXJuIEtpKGUpP2U6bmV3IHllKGUpfX0pKSxKbD1RbygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gT3QodCwoZnVuY3Rpb24odCl7dD1IYSh0KSxucihlLHQsTGkoZVt0XSxlKSl9KSksZX0pKTtmdW5jdGlvbiBYbChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIFFsPUFvKCksZXM9QW8oITApO2Z1bmN0aW9uIHRzKGUpe3JldHVybiBlfWZ1bmN0aW9uIG5zKGUpe3JldHVybiBScihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6YXIoZSwxKSl9dmFyIHJzPXpyKChmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gTHIobixlLHQpfX0pKSxvcz16cigoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIExyKGUsbix0KX19KSk7ZnVuY3Rpb24gYXMoZSx0LG4pe3ZhciByPVBsKHQpLG89d3IodCxyKTtudWxsIT1ufHxYaSh0KSYmKG8ubGVuZ3RofHwhci5sZW5ndGgpfHwobj10LHQ9ZSxlPXRoaXMsbz13cih0LFBsKHQpKSk7dmFyIGE9IShYaShuKSYmXCJjaGFpblwiaW4gbiYmIW4uY2hhaW4pLGk9cWkoZSk7cmV0dXJuIE90KG8sKGZ1bmN0aW9uKG4pe3ZhciByPXRbbl07ZVtuXT1yLGkmJihlLnByb3RvdHlwZVtuXT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX19jaGFpbl9fO2lmKGF8fHQpe3ZhciBuPWUodGhpcy5fX3dyYXBwZWRfXyk7cmV0dXJuKG4uX19hY3Rpb25zX189TW8odGhpcy5fX2FjdGlvbnNfXykpLnB1c2goe2Z1bmM6cixhcmdzOmFyZ3VtZW50cyx0aGlzQXJnOmV9KSxuLl9fY2hhaW5fXz10LG59cmV0dXJuIHIuYXBwbHkoZSxSdChbdGhpcy52YWx1ZSgpXSxhcmd1bWVudHMpKX0pfSkpLGV9ZnVuY3Rpb24gaXMoKXt9dmFyIGxzPVpvKGp0KSxzcz1abyhMdCksY3M9Wm8oSHQpO2Z1bmN0aW9uIHVzKGUpe3JldHVybiBDYShlKT9GdChIYShlKSk6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBicih0LGUpfX0oZSl9dmFyIGRzPU5vKCkscHM9Tm8oITApO2Z1bmN0aW9uIGZzKCl7cmV0dXJuW119ZnVuY3Rpb24gaHMoKXtyZXR1cm4hMX12YXIgZ3MsdnM9Qm8oKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdH0pLDApLENzPVVvKFwiY2VpbFwiKSxtcz1CbygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS90fSksMSksd3M9VW8oXCJmbG9vclwiKSxicz1CbygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSp0fSksMSkseXM9VW8oXCJyb3VuZFwiKSx4cz1CbygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS10fSksMCk7cmV0dXJuIFRuLmFmdGVyPWZ1bmN0aW9uKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBuZXcgTGUoYSk7cmV0dXJuIGU9cGwoZSksZnVuY3Rpb24oKXtpZigtLWU8MSlyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSxUbi5hcnk9T2ksVG4uYXNzaWduPUNsLFRuLmFzc2lnbkluPW1sLFRuLmFzc2lnbkluV2l0aD13bCxUbi5hc3NpZ25XaXRoPWJsLFRuLmF0PXlsLFRuLmJlZm9yZT1NaSxUbi5iaW5kPUxpLFRuLmJpbmRBbGw9SmwsVG4uYmluZEtleT1faSxUbi5jYXN0QXJyYXk9ZnVuY3Rpb24oKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm5bXTt2YXIgZT1hcmd1bWVudHNbMF07cmV0dXJuIE5pKGUpP2U6W2VdfSxUbi5jaGFpbj11aSxUbi5jaHVuaz1mdW5jdGlvbihlLHQsbil7dD0obj92YShlLHQsbik6dD09PW8pPzE6Z24ocGwodCksMCk7dmFyIGE9bnVsbD09ZT8wOmUubGVuZ3RoO2lmKCFhfHx0PDEpcmV0dXJuW107Zm9yKHZhciBpPTAsbD0wLHM9cihwdChhL3QpKTtpPGE7KXNbbCsrXT1RcihlLGksaSs9dCk7cmV0dXJuIHN9LFRuLmNvbXBhY3Q9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PS0xLG49bnVsbD09ZT8wOmUubGVuZ3RoLHI9MCxvPVtdOysrdDxuOyl7dmFyIGE9ZVt0XTthJiYob1tyKytdPWEpfXJldHVybiBvfSxUbi5jb25jYXQ9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoO2lmKCFlKXJldHVybltdO2Zvcih2YXIgdD1yKGUtMSksbj1hcmd1bWVudHNbMF0sbz1lO28tLTspdFtvLTFdPWFyZ3VtZW50c1tvXTtyZXR1cm4gUnQoTmkobik/TW8obik6W25dLGhyKHQsMSkpfSxUbi5jb25kPWZ1bmN0aW9uKGUpe3ZhciB0PW51bGw9PWU/MDplLmxlbmd0aCxuPWFhKCk7cmV0dXJuIGU9dD9qdChlLChmdW5jdGlvbihlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlWzFdKXRocm93IG5ldyBMZShhKTtyZXR1cm5bbihlWzBdKSxlWzFdXX0pKTpbXSx6cigoZnVuY3Rpb24obil7Zm9yKHZhciByPS0xOysrcjx0Oyl7dmFyIG89ZVtyXTtpZihrdChvWzBdLHRoaXMsbikpcmV0dXJuIGt0KG9bMV0sdGhpcyxuKX19KSl9LFRuLmNvbmZvcm1zPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1QbChlKTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGlyKG4sZSx0KX19KGFyKGUsMSkpfSxUbi5jb25zdGFudD1YbCxUbi5jb3VudEJ5PWZpLFRuLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3ZhciBuPURuKGUpO3JldHVybiBudWxsPT10P246dHIobix0KX0sVG4uY3Vycnk9ZnVuY3Rpb24gZSh0LG4scil7dmFyIGE9S28odCw4LG8sbyxvLG8sbyxuPXI/bzpuKTtyZXR1cm4gYS5wbGFjZWhvbGRlcj1lLnBsYWNlaG9sZGVyLGF9LFRuLmN1cnJ5UmlnaHQ9ZnVuY3Rpb24gZSh0LG4scil7dmFyIGE9S28odCwxNixvLG8sbyxvLG8sbj1yP286bik7cmV0dXJuIGEucGxhY2Vob2xkZXI9ZS5wbGFjZWhvbGRlcixhfSxUbi5kZWJvdW5jZT1QaSxUbi5kZWZhdWx0cz14bCxUbi5kZWZhdWx0c0RlZXA9a2wsVG4uZGVmZXI9RWksVG4uZGVsYXk9amksVG4uZGlmZmVyZW5jZT1EYSxUbi5kaWZmZXJlbmNlQnk9QmEsVG4uZGlmZmVyZW5jZVdpdGg9WmEsVG4uZHJvcD1mdW5jdGlvbihlLHQsbil7dmFyIHI9bnVsbD09ZT8wOmUubGVuZ3RoO3JldHVybiByP1FyKGUsKHQ9bnx8dD09PW8/MTpwbCh0KSk8MD8wOnQscik6W119LFRuLmRyb3BSaWdodD1mdW5jdGlvbihlLHQsbil7dmFyIHI9bnVsbD09ZT8wOmUubGVuZ3RoO3JldHVybiByP1FyKGUsMCwodD1yLSh0PW58fHQ9PT1vPzE6cGwodCkpKTwwPzA6dCk6W119LFRuLmRyb3BSaWdodFdoaWxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP2NvKGUsYWEodCwzKSwhMCwhMCk6W119LFRuLmRyb3BXaGlsZT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD9jbyhlLGFhKHQsMyksITApOltdfSxUbi5maWxsPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBhPW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gYT8obiYmXCJudW1iZXJcIiE9dHlwZW9mIG4mJnZhKGUsdCxuKSYmKG49MCxyPWEpLGZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBhPWUubGVuZ3RoO2Zvcigobj1wbChuKSk8MCYmKG49LW4+YT8wOmErbiksKHI9cj09PW98fHI+YT9hOnBsKHIpKTwwJiYocis9YSkscj1uPnI/MDpmbChyKTtuPHI7KWVbbisrXT10O3JldHVybiBlfShlLHQsbixyKSk6W119LFRuLmZpbHRlcj1mdW5jdGlvbihlLHQpe3JldHVybihOaShlKT9fdDpmcikoZSxhYSh0LDMpKX0sVG4uZmxhdE1hcD1mdW5jdGlvbihlLHQpe3JldHVybiBocih5aShlLHQpLDEpfSxUbi5mbGF0TWFwRGVlcD1mdW5jdGlvbihlLHQpe3JldHVybiBocih5aShlLHQpLHUpfSxUbi5mbGF0TWFwRGVwdGg9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuPW49PT1vPzE6cGwobiksaHIoeWkoZSx0KSxuKX0sVG4uZmxhdHRlbj1GYSxUbi5mbGF0dGVuRGVlcD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmZS5sZW5ndGg/aHIoZSx1KTpbXX0sVG4uZmxhdHRlbkRlcHRoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGwhPWUmJmUubGVuZ3RoP2hyKGUsdD10PT09bz8xOnBsKHQpKTpbXX0sVG4uZmxpcD1mdW5jdGlvbihlKXtyZXR1cm4gS28oZSw1MTIpfSxUbi5mbG93PVFsLFRuLmZsb3dSaWdodD1lcyxUbi5mcm9tUGFpcnM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PS0xLG49bnVsbD09ZT8wOmUubGVuZ3RoLHI9e307Kyt0PG47KXt2YXIgbz1lW3RdO3Jbb1swXV09b1sxXX1yZXR1cm4gcn0sVG4uZnVuY3Rpb25zPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP1tdOndyKGUsUGwoZSkpfSxUbi5mdW5jdGlvbnNJbj1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT9bXTp3cihlLEVsKGUpKX0sVG4uZ3JvdXBCeT1taSxUbi5pbml0aWFsPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lJiZlLmxlbmd0aD9RcihlLDAsLTEpOltdfSxUbi5pbnRlcnNlY3Rpb249VWEsVG4uaW50ZXJzZWN0aW9uQnk9emEsVG4uaW50ZXJzZWN0aW9uV2l0aD1HYSxUbi5pbnZlcnQ9TWwsVG4uaW52ZXJ0Qnk9TGwsVG4uaW52b2tlTWFwPXdpLFRuLml0ZXJhdGVlPW5zLFRuLmtleUJ5PWJpLFRuLmtleXM9UGwsVG4ua2V5c0luPUVsLFRuLm1hcD15aSxUbi5tYXBLZXlzPWZ1bmN0aW9uKGUsdCl7dmFyIG49e307cmV0dXJuIHQ9YWEodCwzKSxDcihlLChmdW5jdGlvbihlLHIsbyl7bnIobix0KGUscixvKSxlKX0pKSxufSxUbi5tYXBWYWx1ZXM9ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtyZXR1cm4gdD1hYSh0LDMpLENyKGUsKGZ1bmN0aW9uKGUscixvKXtucihuLHIsdChlLHIsbykpfSkpLG59LFRuLm1hdGNoZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIEFyKGFyKGUsMSkpfSxUbi5tYXRjaGVzUHJvcGVydHk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gVHIoZSxhcih0LDEpKX0sVG4ubWVtb2l6ZT1SaSxUbi5tZXJnZT1qbCxUbi5tZXJnZVdpdGg9UmwsVG4ubWV0aG9kPXJzLFRuLm1ldGhvZE9mPW9zLFRuLm1peGluPWFzLFRuLm5lZ2F0ZT1JaSxUbi5udGhBcmc9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9cGwoZSksenIoKGZ1bmN0aW9uKHQpe3JldHVybiBCcih0LGUpfSkpfSxUbi5vbWl0PUlsLFRuLm9taXRCeT1mdW5jdGlvbihlLHQpe3JldHVybiBIbChlLElpKGFhKHQpKSl9LFRuLm9uY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIE1pKDIsZSl9LFRuLm9yZGVyQnk9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG51bGw9PWU/W106KE5pKHQpfHwodD1udWxsPT10P1tdOlt0XSksTmkobj1yP286bil8fChuPW51bGw9PW4/W106W25dKSxacihlLHQsbikpfSxUbi5vdmVyPWxzLFRuLm92ZXJBcmdzPVZpLFRuLm92ZXJFdmVyeT1zcyxUbi5vdmVyU29tZT1jcyxUbi5wYXJ0aWFsPUhpLFRuLnBhcnRpYWxSaWdodD1BaSxUbi5wYXJ0aXRpb249eGksVG4ucGljaz1WbCxUbi5waWNrQnk9SGwsVG4ucHJvcGVydHk9dXMsVG4ucHJvcGVydHlPZj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PWU/bzpicihlLHQpfX0sVG4ucHVsbD1xYSxUbi5wdWxsQWxsPVlhLFRuLnB1bGxBbGxCeT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUmJmUubGVuZ3RoJiZ0JiZ0Lmxlbmd0aD9OcihlLHQsYWEobiwyKSk6ZX0sVG4ucHVsbEFsbFdpdGg9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlJiZlLmxlbmd0aCYmdCYmdC5sZW5ndGg/TnIoZSx0LG8sbik6ZX0sVG4ucHVsbEF0PUphLFRuLnJhbmdlPWRzLFRuLnJhbmdlUmlnaHQ9cHMsVG4ucmVhcmc9VGksVG4ucmVqZWN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuKE5pKGUpP190OmZyKShlLElpKGFhKHQsMykpKX0sVG4ucmVtb3ZlPWZ1bmN0aW9uKGUsdCl7dmFyIG49W107aWYoIWV8fCFlLmxlbmd0aClyZXR1cm4gbjt2YXIgcj0tMSxvPVtdLGE9ZS5sZW5ndGg7Zm9yKHQ9YWEodCwzKTsrK3I8YTspe3ZhciBpPWVbcl07dChpLHIsZSkmJihuLnB1c2goaSksby5wdXNoKHIpKX1yZXR1cm4gRnIoZSxvKSxufSxUbi5yZXN0PWZ1bmN0aW9uKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgTGUoYSk7cmV0dXJuIHpyKGUsdD10PT09bz90OnBsKHQpKX0sVG4ucmV2ZXJzZT1YYSxUbi5zYW1wbGVTaXplPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD0obj92YShlLHQsbik6dD09PW8pPzE6cGwodCksKE5pKGUpP3FuOktyKShlLHQpfSxUbi5zZXQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBudWxsPT1lP2U6cXIoZSx0LG4pfSxUbi5zZXRXaXRoPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiByPVwiZnVuY3Rpb25cIj09dHlwZW9mIHI/cjpvLG51bGw9PWU/ZTpxcihlLHQsbixyKX0sVG4uc2h1ZmZsZT1mdW5jdGlvbihlKXtyZXR1cm4oTmkoZSk/WW46WHIpKGUpfSxUbi5zbGljZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9bnVsbD09ZT8wOmUubGVuZ3RoO3JldHVybiByPyhuJiZcIm51bWJlclwiIT10eXBlb2YgbiYmdmEoZSx0LG4pPyh0PTAsbj1yKToodD1udWxsPT10PzA6cGwodCksbj1uPT09bz9yOnBsKG4pKSxRcihlLHQsbikpOltdfSxUbi5zb3J0Qnk9a2ksVG4uc29ydGVkVW5pcT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5sZW5ndGg/cm8oZSk6W119LFRuLnNvcnRlZFVuaXFCeT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD9ybyhlLGFhKHQsMikpOltdfSxUbi5zcGxpdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG4mJlwibnVtYmVyXCIhPXR5cGVvZiBuJiZ2YShlLHQsbikmJih0PW49byksKG49bj09PW8/ZjpuPj4+MCk/KGU9dmwoZSkpJiYoXCJzdHJpbmdcIj09dHlwZW9mIHR8fG51bGwhPXQmJiFybCh0KSkmJiEodD1hbyh0KSkmJnJuKGUpP21vKHVuKGUpLDAsbik6ZS5zcGxpdCh0LG4pOltdfSxUbi5zcHJlYWQ9ZnVuY3Rpb24oZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBMZShhKTtyZXR1cm4gdD1udWxsPT10PzA6Z24ocGwodCksMCksenIoKGZ1bmN0aW9uKG4pe3ZhciByPW5bdF0sbz1tbyhuLDAsdCk7cmV0dXJuIHImJlJ0KG8sciksa3QoZSx0aGlzLG8pfSkpfSxUbi50YWlsPWZ1bmN0aW9uKGUpe3ZhciB0PW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gdD9RcihlLDEsdCk6W119LFRuLnRha2U9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlJiZlLmxlbmd0aD9RcihlLDAsKHQ9bnx8dD09PW8/MTpwbCh0KSk8MD8wOnQpOltdfSxUbi50YWtlUmlnaHQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gcj9RcihlLCh0PXItKHQ9bnx8dD09PW8/MTpwbCh0KSkpPDA/MDp0LHIpOltdfSxUbi50YWtlUmlnaHRXaGlsZT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD9jbyhlLGFhKHQsMyksITEsITApOltdfSxUbi50YWtlV2hpbGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/Y28oZSxhYSh0LDMpKTpbXX0sVG4udGFwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQoZSksZX0sVG4udGhyb3R0bGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSEwLG89ITA7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgTGUoYSk7cmV0dXJuIFhpKG4pJiYocj1cImxlYWRpbmdcImluIG4/ISFuLmxlYWRpbmc6cixvPVwidHJhaWxpbmdcImluIG4/ISFuLnRyYWlsaW5nOm8pLFBpKGUsdCx7bGVhZGluZzpyLG1heFdhaXQ6dCx0cmFpbGluZzpvfSl9LFRuLnRocnU9ZGksVG4udG9BcnJheT11bCxUbi50b1BhaXJzPUFsLFRuLnRvUGFpcnNJbj1UbCxUbi50b1BhdGg9ZnVuY3Rpb24oZSl7cmV0dXJuIE5pKGUpP2p0KGUsSGEpOmlsKGUpP1tlXTpNbyhWYSh2bChlKSkpfSxUbi50b1BsYWluT2JqZWN0PWdsLFRuLnRyYW5zZm9ybT1mdW5jdGlvbihlLHQsbil7dmFyIHI9TmkoZSksbz1yfHx6aShlKXx8bGwoZSk7aWYodD1hYSh0LDQpLG51bGw9PW4pe3ZhciBhPWUmJmUuY29uc3RydWN0b3I7bj1vP3I/bmV3IGE6W106WGkoZSkmJnFpKGEpP0RuKFdlKGUpKTp7fX1yZXR1cm4obz9PdDpDcikoZSwoZnVuY3Rpb24oZSxyLG8pe3JldHVybiB0KG4sZSxyLG8pfSkpLG59LFRuLnVuYXJ5PWZ1bmN0aW9uKGUpe3JldHVybiBPaShlLDEpfSxUbi51bmlvbj1RYSxUbi51bmlvbkJ5PWVpLFRuLnVuaW9uV2l0aD10aSxUbi51bmlxPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmxlbmd0aD9pbyhlKTpbXX0sVG4udW5pcUJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP2lvKGUsYWEodCwyKSk6W119LFRuLnVuaXFXaXRoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Om8sZSYmZS5sZW5ndGg/aW8oZSxvLHQpOltdfSxUbi51bnNldD1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lfHxsbyhlLHQpfSxUbi51bnppcD1uaSxUbi51bnppcFdpdGg9cmksVG4udXBkYXRlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnVsbD09ZT9lOnNvKGUsdCxnbyhuKSl9LFRuLnVwZGF0ZVdpdGg9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHI9XCJmdW5jdGlvblwiPT10eXBlb2Ygcj9yOm8sbnVsbD09ZT9lOnNvKGUsdCxnbyhuKSxyKX0sVG4udmFsdWVzPURsLFRuLnZhbHVlc0luPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP1tdOll0KGUsRWwoZSkpfSxUbi53aXRob3V0PW9pLFRuLndvcmRzPXFsLFRuLndyYXA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gSGkoZ28odCksZSl9LFRuLnhvcj1haSxUbi54b3JCeT1paSxUbi54b3JXaXRoPWxpLFRuLnppcD1zaSxUbi56aXBPYmplY3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZm8oZXx8W10sdHx8W10sWG4pfSxUbi56aXBPYmplY3REZWVwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZvKGV8fFtdLHR8fFtdLHFyKX0sVG4uemlwV2l0aD1jaSxUbi5lbnRyaWVzPUFsLFRuLmVudHJpZXNJbj1UbCxUbi5leHRlbmQ9bWwsVG4uZXh0ZW5kV2l0aD13bCxhcyhUbixUbiksVG4uYWRkPXZzLFRuLmF0dGVtcHQ9WWwsVG4uY2FtZWxDYXNlPUJsLFRuLmNhcGl0YWxpemU9WmwsVG4uY2VpbD1DcyxUbi5jbGFtcD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG49PT1vJiYobj10LHQ9byksbiE9PW8mJihuPShuPWhsKG4pKT09bj9uOjApLHQhPT1vJiYodD0odD1obCh0KSk9PXQ/dDowKSxvcihobChlKSx0LG4pfSxUbi5jbG9uZT1mdW5jdGlvbihlKXtyZXR1cm4gYXIoZSw0KX0sVG4uY2xvbmVEZWVwPWZ1bmN0aW9uKGUpe3JldHVybiBhcihlLDUpfSxUbi5jbG9uZURlZXBXaXRoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGFyKGUsNSx0PVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpvKX0sVG4uY2xvbmVXaXRoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGFyKGUsNCx0PVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpvKX0sVG4uY29uZm9ybXNUbz1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT10fHxpcihlLHQsUGwodCkpfSxUbi5kZWJ1cnI9JGwsVG4uZGVmYXVsdFRvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWV8fGUhPWU/dDplfSxUbi5kaXZpZGU9bXMsVG4uZW5kc1dpdGg9ZnVuY3Rpb24oZSx0LG4pe2U9dmwoZSksdD1hbyh0KTt2YXIgcj1lLmxlbmd0aCxhPW49bj09PW8/cjpvcihwbChuKSwwLHIpO3JldHVybihuLT10Lmxlbmd0aCk+PTAmJmUuc2xpY2UobixhKT09dH0sVG4uZXE9RGksVG4uZXNjYXBlPWZ1bmN0aW9uKGUpe3JldHVybihlPXZsKGUpKSYmSy50ZXN0KGUpP2UucmVwbGFjZSh6LHRuKTplfSxUbi5lc2NhcGVSZWdFeHA9ZnVuY3Rpb24oZSl7cmV0dXJuKGU9dmwoZSkpJiZuZS50ZXN0KGUpP2UucmVwbGFjZSh0ZSxcIlxcXFwkJlwiKTplfSxUbi5ldmVyeT1mdW5jdGlvbihlLHQsbil7dmFyIHI9TmkoZSk/THQ6ZHI7cmV0dXJuIG4mJnZhKGUsdCxuKSYmKHQ9bykscihlLGFhKHQsMykpfSxUbi5maW5kPWhpLFRuLmZpbmRJbmRleD0kYSxUbi5maW5kS2V5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIFR0KGUsYWEodCwzKSxDcil9LFRuLmZpbmRMYXN0PWdpLFRuLmZpbmRMYXN0SW5kZXg9TmEsVG4uZmluZExhc3RLZXk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gVHQoZSxhYSh0LDMpLG1yKX0sVG4uZmxvb3I9d3MsVG4uZm9yRWFjaD12aSxUbi5mb3JFYWNoUmlnaHQ9Q2ksVG4uZm9ySW49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZT9lOmdyKGUsYWEodCwzKSxFbCl9LFRuLmZvckluUmlnaHQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZT9lOnZyKGUsYWEodCwzKSxFbCl9LFRuLmZvck93bj1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZDcihlLGFhKHQsMykpfSxUbi5mb3JPd25SaWdodD1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZtcihlLGFhKHQsMykpfSxUbi5nZXQ9U2wsVG4uZ3Q9QmksVG4uZ3RlPVppLFRuLmhhcz1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsIT1lJiZwYShlLHQsU3IpfSxUbi5oYXNJbj1PbCxUbi5oZWFkPVdhLFRuLmlkZW50aXR5PXRzLFRuLmluY2x1ZGVzPWZ1bmN0aW9uKGUsdCxuLHIpe2U9V2koZSk/ZTpEbChlKSxuPW4mJiFyP3BsKG4pOjA7dmFyIG89ZS5sZW5ndGg7cmV0dXJuIG48MCYmKG49Z24obytuLDApKSxhbChlKT9uPD1vJiZlLmluZGV4T2YodCxuKT4tMTohIW8mJkJ0KGUsdCxuKT4tMX0sVG4uaW5kZXhPZj1mdW5jdGlvbihlLHQsbil7dmFyIHI9bnVsbD09ZT8wOmUubGVuZ3RoO2lmKCFyKXJldHVybi0xO3ZhciBvPW51bGw9PW4/MDpwbChuKTtyZXR1cm4gbzwwJiYobz1nbihyK28sMCkpLEJ0KGUsdCxvKX0sVG4uaW5SYW5nZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ9ZGwodCksbj09PW8/KG49dCx0PTApOm49ZGwobiksZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPj12bih0LG4pJiZlPGduKHQsbil9KGU9aGwoZSksdCxuKX0sVG4uaW52b2tlPV9sLFRuLmlzQXJndW1lbnRzPSRpLFRuLmlzQXJyYXk9TmksVG4uaXNBcnJheUJ1ZmZlcj1GaSxUbi5pc0FycmF5TGlrZT1XaSxUbi5pc0FycmF5TGlrZU9iamVjdD1VaSxUbi5pc0Jvb2xlYW49ZnVuY3Rpb24oZSl7cmV0dXJuITA9PT1lfHwhMT09PWV8fFFpKGUpJiZ4cihlKT09Q30sVG4uaXNCdWZmZXI9emksVG4uaXNEYXRlPUdpLFRuLmlzRWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gUWkoZSkmJjE9PT1lLm5vZGVUeXBlJiYhbmwoZSl9LFRuLmlzRW1wdHk9ZnVuY3Rpb24oZSl7aWYobnVsbD09ZSlyZXR1cm4hMDtpZihXaShlKSYmKE5pKGUpfHxcInN0cmluZ1wiPT10eXBlb2YgZXx8XCJmdW5jdGlvblwiPT10eXBlb2YgZS5zcGxpY2V8fHppKGUpfHxsbChlKXx8JGkoZSkpKXJldHVybiFlLmxlbmd0aDt2YXIgdD1kYShlKTtpZih0PT14fHx0PT1MKXJldHVybiFlLnNpemU7aWYoYmEoZSkpcmV0dXJuIUlyKGUpLmxlbmd0aDtmb3IodmFyIG4gaW4gZSlpZihJZS5jYWxsKGUsbikpcmV0dXJuITE7cmV0dXJuITB9LFRuLmlzRXF1YWw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUHIoZSx0KX0sVG4uaXNFcXVhbFdpdGg9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPShuPVwiZnVuY3Rpb25cIj09dHlwZW9mIG4/bjpvKT9uKGUsdCk6bztyZXR1cm4gcj09PW8/UHIoZSx0LG8sbik6ISFyfSxUbi5pc0Vycm9yPUtpLFRuLmlzRmluaXRlPWZ1bmN0aW9uKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlJiZBdChlKX0sVG4uaXNGdW5jdGlvbj1xaSxUbi5pc0ludGVnZXI9WWksVG4uaXNMZW5ndGg9SmksVG4uaXNNYXA9ZWwsVG4uaXNNYXRjaD1mdW5jdGlvbihlLHQpe3JldHVybiBlPT09dHx8RXIoZSx0LGxhKHQpKX0sVG4uaXNNYXRjaFdpdGg9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuPVwiZnVuY3Rpb25cIj09dHlwZW9mIG4/bjpvLEVyKGUsdCxsYSh0KSxuKX0sVG4uaXNOYU49ZnVuY3Rpb24oZSl7cmV0dXJuIHRsKGUpJiZlIT0rZX0sVG4uaXNOYXRpdmU9ZnVuY3Rpb24oZSl7aWYod2EoZSkpdGhyb3cgbmV3IHllKFwiVW5zdXBwb3J0ZWQgY29yZS1qcyB1c2UuIFRyeSBodHRwczovL25wbXMuaW8vc2VhcmNoP3E9cG9ueWZpbGwuXCIpO3JldHVybiBqcihlKX0sVG4uaXNOaWw9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWV9LFRuLmlzTnVsbD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09PWV9LFRuLmlzTnVtYmVyPXRsLFRuLmlzT2JqZWN0PVhpLFRuLmlzT2JqZWN0TGlrZT1RaSxUbi5pc1BsYWluT2JqZWN0PW5sLFRuLmlzUmVnRXhwPXJsLFRuLmlzU2FmZUludGVnZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIFlpKGUpJiZlPj0tOTAwNzE5OTI1NDc0MDk5MSYmZTw9ZH0sVG4uaXNTZXQ9b2wsVG4uaXNTdHJpbmc9YWwsVG4uaXNTeW1ib2w9aWwsVG4uaXNUeXBlZEFycmF5PWxsLFRuLmlzVW5kZWZpbmVkPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09b30sVG4uaXNXZWFrTWFwPWZ1bmN0aW9uKGUpe3JldHVybiBRaShlKSYmZGEoZSk9PUV9LFRuLmlzV2Vha1NldD1mdW5jdGlvbihlKXtyZXR1cm4gUWkoZSkmJlwiW29iamVjdCBXZWFrU2V0XVwiPT14cihlKX0sVG4uam9pbj1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lP1wiXCI6V3QuY2FsbChlLHQpfSxUbi5rZWJhYkNhc2U9TmwsVG4ubGFzdD1LYSxUbi5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQsbil7dmFyIHI9bnVsbD09ZT8wOmUubGVuZ3RoO2lmKCFyKXJldHVybi0xO3ZhciBhPXI7cmV0dXJuIG4hPT1vJiYoYT0oYT1wbChuKSk8MD9nbihyK2EsMCk6dm4oYSxyLTEpKSx0PT10P2Z1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bisxO3ItLTspaWYoZVtyXT09PXQpcmV0dXJuIHI7cmV0dXJuIHJ9KGUsdCxhKTpEdChlLCR0LGEsITApfSxUbi5sb3dlckNhc2U9RmwsVG4ubG93ZXJGaXJzdD1XbCxUbi5sdD1zbCxUbi5sdGU9Y2wsVG4ubWF4PWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmxlbmd0aD9wcihlLHRzLGtyKTpvfSxUbi5tYXhCeT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD9wcihlLGFhKHQsMiksa3IpOm99LFRuLm1lYW49ZnVuY3Rpb24oZSl7cmV0dXJuIE50KGUsdHMpfSxUbi5tZWFuQnk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTnQoZSxhYSh0LDIpKX0sVG4ubWluPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmxlbmd0aD9wcihlLHRzLFZyKTpvfSxUbi5taW5CeT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD9wcihlLGFhKHQsMiksVnIpOm99LFRuLnN0dWJBcnJheT1mcyxUbi5zdHViRmFsc2U9aHMsVG4uc3R1Yk9iamVjdD1mdW5jdGlvbigpe3JldHVybnt9fSxUbi5zdHViU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJcIn0sVG4uc3R1YlRydWU9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sVG4ubXVsdGlwbHk9YnMsVG4ubnRoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP0JyKGUscGwodCkpOm99LFRuLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZHQuXz09PXRoaXMmJihkdC5fPURlKSx0aGlzfSxUbi5ub29wPWlzLFRuLm5vdz1TaSxUbi5wYWQ9ZnVuY3Rpb24oZSx0LG4pe2U9dmwoZSk7dmFyIHI9KHQ9cGwodCkpP2NuKGUpOjA7aWYoIXR8fHI+PXQpcmV0dXJuIGU7dmFyIG89KHQtcikvMjtyZXR1cm4gJG8oZnQobyksbikrZSskbyhwdChvKSxuKX0sVG4ucGFkRW5kPWZ1bmN0aW9uKGUsdCxuKXtlPXZsKGUpO3ZhciByPSh0PXBsKHQpKT9jbihlKTowO3JldHVybiB0JiZyPHQ/ZSskbyh0LXIsbik6ZX0sVG4ucGFkU3RhcnQ9ZnVuY3Rpb24oZSx0LG4pe2U9dmwoZSk7dmFyIHI9KHQ9cGwodCkpP2NuKGUpOjA7cmV0dXJuIHQmJnI8dD8kbyh0LXIsbikrZTplfSxUbi5wYXJzZUludD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG58fG51bGw9PXQ/dD0wOnQmJih0PSt0KSxtbih2bChlKS5yZXBsYWNlKHJlLFwiXCIpLHR8fDApfSxUbi5yYW5kb209ZnVuY3Rpb24oZSx0LG4pe2lmKG4mJlwiYm9vbGVhblwiIT10eXBlb2YgbiYmdmEoZSx0LG4pJiYodD1uPW8pLG49PT1vJiYoXCJib29sZWFuXCI9PXR5cGVvZiB0PyhuPXQsdD1vKTpcImJvb2xlYW5cIj09dHlwZW9mIGUmJihuPWUsZT1vKSksZT09PW8mJnQ9PT1vPyhlPTAsdD0xKTooZT1kbChlKSx0PT09bz8odD1lLGU9MCk6dD1kbCh0KSksZT50KXt2YXIgcj1lO2U9dCx0PXJ9aWYobnx8ZSUxfHx0JTEpe3ZhciBhPXduKCk7cmV0dXJuIHZuKGUrYSoodC1lK2x0KFwiMWUtXCIrKChhK1wiXCIpLmxlbmd0aC0xKSkpLHQpfXJldHVybiBXcihlLHQpfSxUbi5yZWR1Y2U9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPU5pKGUpP0l0OlV0LG89YXJndW1lbnRzLmxlbmd0aDwzO3JldHVybiByKGUsYWEodCw0KSxuLG8sY3IpfSxUbi5yZWR1Y2VSaWdodD1mdW5jdGlvbihlLHQsbil7dmFyIHI9TmkoZSk/VnQ6VXQsbz1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIHIoZSxhYSh0LDQpLG4sbyx1cil9LFRuLnJlcGVhdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ9KG4/dmEoZSx0LG4pOnQ9PT1vKT8xOnBsKHQpLFVyKHZsKGUpLHQpfSxUbi5yZXBsYWNlPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLHQ9dmwoZVswXSk7cmV0dXJuIGUubGVuZ3RoPDM/dDp0LnJlcGxhY2UoZVsxXSxlWzJdKX0sVG4ucmVzdWx0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0tMSxhPSh0PXZvKHQsZSkpLmxlbmd0aDtmb3IoYXx8KGE9MSxlPW8pOysrcjxhOyl7dmFyIGk9bnVsbD09ZT9vOmVbSGEodFtyXSldO2k9PT1vJiYocj1hLGk9biksZT1xaShpKT9pLmNhbGwoZSk6aX1yZXR1cm4gZX0sVG4ucm91bmQ9eXMsVG4ucnVuSW5Db250ZXh0PWUsVG4uc2FtcGxlPWZ1bmN0aW9uKGUpe3JldHVybihOaShlKT9LbjpHcikoZSl9LFRuLnNpemU9ZnVuY3Rpb24oZSl7aWYobnVsbD09ZSlyZXR1cm4gMDtpZihXaShlKSlyZXR1cm4gYWwoZSk/Y24oZSk6ZS5sZW5ndGg7dmFyIHQ9ZGEoZSk7cmV0dXJuIHQ9PXh8fHQ9PUw/ZS5zaXplOklyKGUpLmxlbmd0aH0sVG4uc25ha2VDYXNlPVVsLFRuLnNvbWU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPU5pKGUpP0h0OmVvO3JldHVybiBuJiZ2YShlLHQsbikmJih0PW8pLHIoZSxhYSh0LDMpKX0sVG4uc29ydGVkSW5kZXg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdG8oZSx0KX0sVG4uc29ydGVkSW5kZXhCeT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG5vKGUsdCxhYShuLDIpKX0sVG4uc29ydGVkSW5kZXhPZj1mdW5jdGlvbihlLHQpe3ZhciBuPW51bGw9PWU/MDplLmxlbmd0aDtpZihuKXt2YXIgcj10byhlLHQpO2lmKHI8biYmRGkoZVtyXSx0KSlyZXR1cm4gcn1yZXR1cm4tMX0sVG4uc29ydGVkTGFzdEluZGV4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRvKGUsdCwhMCl9LFRuLnNvcnRlZExhc3RJbmRleEJ5PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbm8oZSx0LGFhKG4sMiksITApfSxUbi5zb3J0ZWRMYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQpe2lmKG51bGwhPWUmJmUubGVuZ3RoKXt2YXIgbj10byhlLHQsITApLTE7aWYoRGkoZVtuXSx0KSlyZXR1cm4gbn1yZXR1cm4tMX0sVG4uc3RhcnRDYXNlPXpsLFRuLnN0YXJ0c1dpdGg9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPXZsKGUpLG49bnVsbD09bj8wOm9yKHBsKG4pLDAsZS5sZW5ndGgpLHQ9YW8odCksZS5zbGljZShuLG4rdC5sZW5ndGgpPT10fSxUbi5zdWJ0cmFjdD14cyxUbi5zdW09ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUubGVuZ3RoP3p0KGUsdHMpOjB9LFRuLnN1bUJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP3p0KGUsYWEodCwyKSk6MH0sVG4udGVtcGxhdGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVRuLnRlbXBsYXRlU2V0dGluZ3M7biYmdmEoZSx0LG4pJiYodD1vKSxlPXZsKGUpLHQ9d2woe30sdCxyLHFvKTt2YXIgYSxpLGw9d2woe30sdC5pbXBvcnRzLHIuaW1wb3J0cyxxbykscz1QbChsKSxjPVl0KGwscyksdT0wLGQ9dC5pbnRlcnBvbGF0ZXx8d2UscD1cIl9fcCArPSAnXCIsZj1PZSgodC5lc2NhcGV8fHdlKS5zb3VyY2UrXCJ8XCIrZC5zb3VyY2UrXCJ8XCIrKGQ9PT1KP2RlOndlKS5zb3VyY2UrXCJ8XCIrKHQuZXZhbHVhdGV8fHdlKS5zb3VyY2UrXCJ8JFwiLFwiZ1wiKSxoPVwiLy8jIHNvdXJjZVVSTD1cIisoSWUuY2FsbCh0LFwic291cmNlVVJMXCIpPyh0LnNvdXJjZVVSTCtcIlwiKS5yZXBsYWNlKC9cXHMvZyxcIiBcIik6XCJsb2Rhc2gudGVtcGxhdGVTb3VyY2VzW1wiKyArK3J0K1wiXVwiKStcIlxcblwiO2UucmVwbGFjZShmLChmdW5jdGlvbih0LG4scixvLGwscyl7cmV0dXJuIHJ8fChyPW8pLHArPWUuc2xpY2UodSxzKS5yZXBsYWNlKGJlLG5uKSxuJiYoYT0hMCxwKz1cIicgK1xcbl9fZShcIituK1wiKSArXFxuJ1wiKSxsJiYoaT0hMCxwKz1cIic7XFxuXCIrbCtcIjtcXG5fX3AgKz0gJ1wiKSxyJiYocCs9XCInICtcXG4oKF9fdCA9IChcIityK1wiKSkgPT0gbnVsbCA/ICcnIDogX190KSArXFxuJ1wiKSx1PXMrdC5sZW5ndGgsdH0pKSxwKz1cIic7XFxuXCI7dmFyIGc9SWUuY2FsbCh0LFwidmFyaWFibGVcIikmJnQudmFyaWFibGU7aWYoZyl7aWYoY2UudGVzdChnKSl0aHJvdyBuZXcgeWUoXCJJbnZhbGlkIGB2YXJpYWJsZWAgb3B0aW9uIHBhc3NlZCBpbnRvIGBfLnRlbXBsYXRlYFwiKX1lbHNlIHA9XCJ3aXRoIChvYmopIHtcXG5cIitwK1wiXFxufVxcblwiO3A9KGk/cC5yZXBsYWNlKE4sXCJcIik6cCkucmVwbGFjZShGLFwiJDFcIikucmVwbGFjZShXLFwiJDE7XCIpLHA9XCJmdW5jdGlvbihcIisoZ3x8XCJvYmpcIikrXCIpIHtcXG5cIisoZz9cIlwiOlwib2JqIHx8IChvYmogPSB7fSk7XFxuXCIpK1widmFyIF9fdCwgX19wID0gJydcIisoYT9cIiwgX19lID0gXy5lc2NhcGVcIjpcIlwiKSsoaT9cIiwgX19qID0gQXJyYXkucHJvdG90eXBlLmpvaW47XFxuZnVuY3Rpb24gcHJpbnQoKSB7IF9fcCArPSBfX2ouY2FsbChhcmd1bWVudHMsICcnKSB9XFxuXCI6XCI7XFxuXCIpK3ArXCJyZXR1cm4gX19wXFxufVwiO3ZhciB2PVlsKChmdW5jdGlvbigpe3JldHVybiB4ZShzLGgrXCJyZXR1cm4gXCIrcCkuYXBwbHkobyxjKX0pKTtpZih2LnNvdXJjZT1wLEtpKHYpKXRocm93IHY7cmV0dXJuIHZ9LFRuLnRpbWVzPWZ1bmN0aW9uKGUsdCl7aWYoKGU9cGwoZSkpPDF8fGU+ZClyZXR1cm5bXTt2YXIgbj1mLHI9dm4oZSxmKTt0PWFhKHQpLGUtPWY7Zm9yKHZhciBvPUd0KHIsdCk7KytuPGU7KXQobik7cmV0dXJuIG99LFRuLnRvRmluaXRlPWRsLFRuLnRvSW50ZWdlcj1wbCxUbi50b0xlbmd0aD1mbCxUbi50b0xvd2VyPWZ1bmN0aW9uKGUpe3JldHVybiB2bChlKS50b0xvd2VyQ2FzZSgpfSxUbi50b051bWJlcj1obCxUbi50b1NhZmVJbnRlZ2VyPWZ1bmN0aW9uKGUpe3JldHVybiBlP29yKHBsKGUpLC05MDA3MTk5MjU0NzQwOTkxLGQpOjA9PT1lP2U6MH0sVG4udG9TdHJpbmc9dmwsVG4udG9VcHBlcj1mdW5jdGlvbihlKXtyZXR1cm4gdmwoZSkudG9VcHBlckNhc2UoKX0sVG4udHJpbT1mdW5jdGlvbihlLHQsbil7aWYoKGU9dmwoZSkpJiYobnx8dD09PW8pKXJldHVybiBLdChlKTtpZighZXx8ISh0PWFvKHQpKSlyZXR1cm4gZTt2YXIgcj11bihlKSxhPXVuKHQpO3JldHVybiBtbyhyLFh0KHIsYSksUXQocixhKSsxKS5qb2luKFwiXCIpfSxUbi50cmltRW5kPWZ1bmN0aW9uKGUsdCxuKXtpZigoZT12bChlKSkmJihufHx0PT09bykpcmV0dXJuIGUuc2xpY2UoMCxkbihlKSsxKTtpZighZXx8ISh0PWFvKHQpKSlyZXR1cm4gZTt2YXIgcj11bihlKTtyZXR1cm4gbW8ociwwLFF0KHIsdW4odCkpKzEpLmpvaW4oXCJcIil9LFRuLnRyaW1TdGFydD1mdW5jdGlvbihlLHQsbil7aWYoKGU9dmwoZSkpJiYobnx8dD09PW8pKXJldHVybiBlLnJlcGxhY2UocmUsXCJcIik7aWYoIWV8fCEodD1hbyh0KSkpcmV0dXJuIGU7dmFyIHI9dW4oZSk7cmV0dXJuIG1vKHIsWHQocix1bih0KSkpLmpvaW4oXCJcIil9LFRuLnRydW5jYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49MzAscj1cIi4uLlwiO2lmKFhpKHQpKXt2YXIgYT1cInNlcGFyYXRvclwiaW4gdD90LnNlcGFyYXRvcjphO249XCJsZW5ndGhcImluIHQ/cGwodC5sZW5ndGgpOm4scj1cIm9taXNzaW9uXCJpbiB0P2FvKHQub21pc3Npb24pOnJ9dmFyIGk9KGU9dmwoZSkpLmxlbmd0aDtpZihybihlKSl7dmFyIGw9dW4oZSk7aT1sLmxlbmd0aH1pZihuPj1pKXJldHVybiBlO3ZhciBzPW4tY24ocik7aWYoczwxKXJldHVybiByO3ZhciBjPWw/bW8obCwwLHMpLmpvaW4oXCJcIik6ZS5zbGljZSgwLHMpO2lmKGE9PT1vKXJldHVybiBjK3I7aWYobCYmKHMrPWMubGVuZ3RoLXMpLHJsKGEpKXtpZihlLnNsaWNlKHMpLnNlYXJjaChhKSl7dmFyIHUsZD1jO2ZvcihhLmdsb2JhbHx8KGE9T2UoYS5zb3VyY2UsdmwocGUuZXhlYyhhKSkrXCJnXCIpKSxhLmxhc3RJbmRleD0wO3U9YS5leGVjKGQpOyl2YXIgcD11LmluZGV4O2M9Yy5zbGljZSgwLHA9PT1vP3M6cCl9fWVsc2UgaWYoZS5pbmRleE9mKGFvKGEpLHMpIT1zKXt2YXIgZj1jLmxhc3RJbmRleE9mKGEpO2Y+LTEmJihjPWMuc2xpY2UoMCxmKSl9cmV0dXJuIGMrcn0sVG4udW5lc2NhcGU9ZnVuY3Rpb24oZSl7cmV0dXJuKGU9dmwoZSkpJiZHLnRlc3QoZSk/ZS5yZXBsYWNlKFUscG4pOmV9LFRuLnVuaXF1ZUlkPWZ1bmN0aW9uKGUpe3ZhciB0PSsrVmU7cmV0dXJuIHZsKGUpK3R9LFRuLnVwcGVyQ2FzZT1HbCxUbi51cHBlckZpcnN0PUtsLFRuLmVhY2g9dmksVG4uZWFjaFJpZ2h0PUNpLFRuLmZpcnN0PVdhLGFzKFRuLChncz17fSxDcihUbiwoZnVuY3Rpb24oZSx0KXtJZS5jYWxsKFRuLnByb3RvdHlwZSx0KXx8KGdzW3RdPWUpfSkpLGdzKSx7Y2hhaW46ITF9KSxUbi5WRVJTSU9OPVwiNC4xNy4yMVwiLE90KFtcImJpbmRcIixcImJpbmRLZXlcIixcImN1cnJ5XCIsXCJjdXJyeVJpZ2h0XCIsXCJwYXJ0aWFsXCIsXCJwYXJ0aWFsUmlnaHRcIl0sKGZ1bmN0aW9uKGUpe1RuW2VdLnBsYWNlaG9sZGVyPVRufSkpLE90KFtcImRyb3BcIixcInRha2VcIl0sKGZ1bmN0aW9uKGUsdCl7JG4ucHJvdG90eXBlW2VdPWZ1bmN0aW9uKG4pe249bj09PW8/MTpnbihwbChuKSwwKTt2YXIgcj10aGlzLl9fZmlsdGVyZWRfXyYmIXQ/bmV3ICRuKHRoaXMpOnRoaXMuY2xvbmUoKTtyZXR1cm4gci5fX2ZpbHRlcmVkX18/ci5fX3Rha2VDb3VudF9fPXZuKG4sci5fX3Rha2VDb3VudF9fKTpyLl9fdmlld3NfXy5wdXNoKHtzaXplOnZuKG4sZiksdHlwZTplKyhyLl9fZGlyX188MD9cIlJpZ2h0XCI6XCJcIil9KSxyfSwkbi5wcm90b3R5cGVbZStcIlJpZ2h0XCJdPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJldmVyc2UoKVtlXSh0KS5yZXZlcnNlKCl9fSkpLE90KFtcImZpbHRlclwiLFwibWFwXCIsXCJ0YWtlV2hpbGVcIl0sKGZ1bmN0aW9uKGUsdCl7dmFyIG49dCsxLHI9MT09bnx8Mz09bjskbi5wcm90b3R5cGVbZV09ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jbG9uZSgpO3JldHVybiB0Ll9faXRlcmF0ZWVzX18ucHVzaCh7aXRlcmF0ZWU6YWEoZSwzKSx0eXBlOm59KSx0Ll9fZmlsdGVyZWRfXz10Ll9fZmlsdGVyZWRfX3x8cix0fX0pKSxPdChbXCJoZWFkXCIsXCJsYXN0XCJdLChmdW5jdGlvbihlLHQpe3ZhciBuPVwidGFrZVwiKyh0P1wiUmlnaHRcIjpcIlwiKTskbi5wcm90b3R5cGVbZV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tuXSgxKS52YWx1ZSgpWzBdfX0pKSxPdChbXCJpbml0aWFsXCIsXCJ0YWlsXCJdLChmdW5jdGlvbihlLHQpe3ZhciBuPVwiZHJvcFwiKyh0P1wiXCI6XCJSaWdodFwiKTskbi5wcm90b3R5cGVbZV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2ZpbHRlcmVkX18/bmV3ICRuKHRoaXMpOnRoaXNbbl0oMSl9fSkpLCRuLnByb3RvdHlwZS5jb21wYWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsdGVyKHRzKX0sJG4ucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZmlsdGVyKGUpLmhlYWQoKX0sJG4ucHJvdG90eXBlLmZpbmRMYXN0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJldmVyc2UoKS5maW5kKGUpfSwkbi5wcm90b3R5cGUuaW52b2tlTWFwPXpyKChmdW5jdGlvbihlLHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGU/bmV3ICRuKHRoaXMpOnRoaXMubWFwKChmdW5jdGlvbihuKXtyZXR1cm4gTHIobixlLHQpfSkpfSkpLCRuLnByb3RvdHlwZS5yZWplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZmlsdGVyKElpKGFhKGUpKSl9LCRuLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihlLHQpe2U9cGwoZSk7dmFyIG49dGhpcztyZXR1cm4gbi5fX2ZpbHRlcmVkX18mJihlPjB8fHQ8MCk/bmV3ICRuKG4pOihlPDA/bj1uLnRha2VSaWdodCgtZSk6ZSYmKG49bi5kcm9wKGUpKSx0IT09byYmKG49KHQ9cGwodCkpPDA/bi5kcm9wUmlnaHQoLXQpOm4udGFrZSh0LWUpKSxuKX0sJG4ucHJvdG90eXBlLnRha2VSaWdodFdoaWxlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJldmVyc2UoKS50YWtlV2hpbGUoZSkucmV2ZXJzZSgpfSwkbi5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRha2UoZil9LENyKCRuLnByb3RvdHlwZSwoZnVuY3Rpb24oZSx0KXt2YXIgbj0vXig/OmZpbHRlcnxmaW5kfG1hcHxyZWplY3QpfFdoaWxlJC8udGVzdCh0KSxyPS9eKD86aGVhZHxsYXN0KSQvLnRlc3QodCksYT1UbltyP1widGFrZVwiKyhcImxhc3RcIj09dD9cIlJpZ2h0XCI6XCJcIik6dF0saT1yfHwvXmZpbmQvLnRlc3QodCk7YSYmKFRuLnByb3RvdHlwZVt0XT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX193cmFwcGVkX18sbD1yP1sxXTphcmd1bWVudHMscz10IGluc3RhbmNlb2YgJG4sYz1sWzBdLHU9c3x8TmkodCksZD1mdW5jdGlvbihlKXt2YXIgdD1hLmFwcGx5KFRuLFJ0KFtlXSxsKSk7cmV0dXJuIHImJnA/dFswXTp0fTt1JiZuJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBjJiYxIT1jLmxlbmd0aCYmKHM9dT0hMSk7dmFyIHA9dGhpcy5fX2NoYWluX18sZj0hIXRoaXMuX19hY3Rpb25zX18ubGVuZ3RoLGg9aSYmIXAsZz1zJiYhZjtpZighaSYmdSl7dD1nP3Q6bmV3ICRuKHRoaXMpO3ZhciB2PWUuYXBwbHkodCxsKTtyZXR1cm4gdi5fX2FjdGlvbnNfXy5wdXNoKHtmdW5jOmRpLGFyZ3M6W2RdLHRoaXNBcmc6b30pLG5ldyBabih2LHApfXJldHVybiBoJiZnP2UuYXBwbHkodGhpcyxsKToodj10aGlzLnRocnUoZCksaD9yP3YudmFsdWUoKVswXTp2LnZhbHVlKCk6dil9KX0pKSxPdChbXCJwb3BcIixcInB1c2hcIixcInNoaWZ0XCIsXCJzb3J0XCIsXCJzcGxpY2VcIixcInVuc2hpZnRcIl0sKGZ1bmN0aW9uKGUpe3ZhciB0PV9lW2VdLG49L14oPzpwdXNofHNvcnR8dW5zaGlmdCkkLy50ZXN0KGUpP1widGFwXCI6XCJ0aHJ1XCIscj0vXig/OnBvcHxzaGlmdCkkLy50ZXN0KGUpO1RuLnByb3RvdHlwZVtlXT1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cztpZihyJiYhdGhpcy5fX2NoYWluX18pe3ZhciBvPXRoaXMudmFsdWUoKTtyZXR1cm4gdC5hcHBseShOaShvKT9vOltdLGUpfXJldHVybiB0aGlzW25dKChmdW5jdGlvbihuKXtyZXR1cm4gdC5hcHBseShOaShuKT9uOltdLGUpfSkpfX0pKSxDcigkbi5wcm90b3R5cGUsKGZ1bmN0aW9uKGUsdCl7dmFyIG49VG5bdF07aWYobil7dmFyIHI9bi5uYW1lK1wiXCI7SWUuY2FsbChfbixyKXx8KF9uW3JdPVtdKSxfbltyXS5wdXNoKHtuYW1lOnQsZnVuYzpufSl9fSkpLF9uW1RvKG8sMikubmFtZV09W3tuYW1lOlwid3JhcHBlclwiLGZ1bmM6b31dLCRuLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBlPW5ldyAkbih0aGlzLl9fd3JhcHBlZF9fKTtyZXR1cm4gZS5fX2FjdGlvbnNfXz1Nbyh0aGlzLl9fYWN0aW9uc19fKSxlLl9fZGlyX189dGhpcy5fX2Rpcl9fLGUuX19maWx0ZXJlZF9fPXRoaXMuX19maWx0ZXJlZF9fLGUuX19pdGVyYXRlZXNfXz1Nbyh0aGlzLl9faXRlcmF0ZWVzX18pLGUuX190YWtlQ291bnRfXz10aGlzLl9fdGFrZUNvdW50X18sZS5fX3ZpZXdzX189TW8odGhpcy5fX3ZpZXdzX18pLGV9LCRuLnByb3RvdHlwZS5yZXZlcnNlPWZ1bmN0aW9uKCl7aWYodGhpcy5fX2ZpbHRlcmVkX18pe3ZhciBlPW5ldyAkbih0aGlzKTtlLl9fZGlyX189LTEsZS5fX2ZpbHRlcmVkX189ITB9ZWxzZShlPXRoaXMuY2xvbmUoKSkuX19kaXJfXyo9LTE7cmV0dXJuIGV9LCRuLnByb3RvdHlwZS52YWx1ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX193cmFwcGVkX18udmFsdWUoKSx0PXRoaXMuX19kaXJfXyxuPU5pKGUpLHI9dDwwLG89bj9lLmxlbmd0aDowLGE9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj0tMSxvPW4ubGVuZ3RoOysrcjxvOyl7dmFyIGE9bltyXSxpPWEuc2l6ZTtzd2l0Y2goYS50eXBlKXtjYXNlXCJkcm9wXCI6ZSs9aTticmVhaztjYXNlXCJkcm9wUmlnaHRcIjp0LT1pO2JyZWFrO2Nhc2VcInRha2VcIjp0PXZuKHQsZStpKTticmVhaztjYXNlXCJ0YWtlUmlnaHRcIjplPWduKGUsdC1pKX19cmV0dXJue3N0YXJ0OmUsZW5kOnR9fSgwLG8sdGhpcy5fX3ZpZXdzX18pLGk9YS5zdGFydCxsPWEuZW5kLHM9bC1pLGM9cj9sOmktMSx1PXRoaXMuX19pdGVyYXRlZXNfXyxkPXUubGVuZ3RoLHA9MCxmPXZuKHMsdGhpcy5fX3Rha2VDb3VudF9fKTtpZighbnx8IXImJm89PXMmJmY9PXMpcmV0dXJuIHVvKGUsdGhpcy5fX2FjdGlvbnNfXyk7dmFyIGg9W107ZTpmb3IoO3MtLSYmcDxmOyl7Zm9yKHZhciBnPS0xLHY9ZVtjKz10XTsrK2c8ZDspe3ZhciBDPXVbZ10sbT1DLml0ZXJhdGVlLHc9Qy50eXBlLGI9bSh2KTtpZigyPT13KXY9YjtlbHNlIGlmKCFiKXtpZigxPT13KWNvbnRpbnVlIGU7YnJlYWsgZX19aFtwKytdPXZ9cmV0dXJuIGh9LFRuLnByb3RvdHlwZS5hdD1waSxUbi5wcm90b3R5cGUuY2hhaW49ZnVuY3Rpb24oKXtyZXR1cm4gdWkodGhpcyl9LFRuLnByb3RvdHlwZS5jb21taXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFpuKHRoaXMudmFsdWUoKSx0aGlzLl9fY2hhaW5fXyl9LFRuLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7dGhpcy5fX3ZhbHVlc19fPT09byYmKHRoaXMuX192YWx1ZXNfXz11bCh0aGlzLnZhbHVlKCkpKTt2YXIgZT10aGlzLl9faW5kZXhfXz49dGhpcy5fX3ZhbHVlc19fLmxlbmd0aDtyZXR1cm57ZG9uZTplLHZhbHVlOmU/bzp0aGlzLl9fdmFsdWVzX19bdGhpcy5fX2luZGV4X18rK119fSxUbi5wcm90b3R5cGUucGxhbnQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49dGhpcztuIGluc3RhbmNlb2YgQm47KXt2YXIgcj1UYShuKTtyLl9faW5kZXhfXz0wLHIuX192YWx1ZXNfXz1vLHQ/YS5fX3dyYXBwZWRfXz1yOnQ9cjt2YXIgYT1yO249bi5fX3dyYXBwZWRfX31yZXR1cm4gYS5fX3dyYXBwZWRfXz1lLHR9LFRuLnByb3RvdHlwZS5yZXZlcnNlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fX3dyYXBwZWRfXztpZihlIGluc3RhbmNlb2YgJG4pe3ZhciB0PWU7cmV0dXJuIHRoaXMuX19hY3Rpb25zX18ubGVuZ3RoJiYodD1uZXcgJG4odGhpcykpLCh0PXQucmV2ZXJzZSgpKS5fX2FjdGlvbnNfXy5wdXNoKHtmdW5jOmRpLGFyZ3M6W1hhXSx0aGlzQXJnOm99KSxuZXcgWm4odCx0aGlzLl9fY2hhaW5fXyl9cmV0dXJuIHRoaXMudGhydShYYSl9LFRuLnByb3RvdHlwZS50b0pTT049VG4ucHJvdG90eXBlLnZhbHVlT2Y9VG4ucHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHVvKHRoaXMuX193cmFwcGVkX18sdGhpcy5fX2FjdGlvbnNfXyl9LFRuLnByb3RvdHlwZS5maXJzdD1Ubi5wcm90b3R5cGUuaGVhZCxxZSYmKFRuLnByb3RvdHlwZVtxZV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLFRufSgpO2R0Ll89Zm4sKHI9ZnVuY3Rpb24oKXtyZXR1cm4gZm59LmNhbGwodCxuLHQsZSkpPT09b3x8KGUuZXhwb3J0cz1yKX0uY2FsbCh0aGlzKX0sNzQxODplPT57dmFyIHQ9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxuPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkscj1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO2UuZXhwb3J0cz1mdW5jdGlvbigpe3RyeXtpZighT2JqZWN0LmFzc2lnbilyZXR1cm4hMTt2YXIgZT1uZXcgU3RyaW5nKFwiYWJjXCIpO2lmKGVbNV09XCJkZVwiLFwiNVwiPT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSlbMF0pcmV0dXJuITE7Zm9yKHZhciB0PXt9LG49MDtuPDEwO24rKyl0W1wiX1wiK1N0cmluZy5mcm9tQ2hhckNvZGUobildPW47aWYoXCIwMTIzNDU2Nzg5XCIhPT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSkpLmpvaW4oXCJcIikpcmV0dXJuITE7dmFyIHI9e307cmV0dXJuXCJhYmNkZWZnaGlqa2xtbm9wcXJzdFwiLnNwbGl0KFwiXCIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JbZV09ZX0pKSxcImFiY2RlZmdoaWprbG1ub3BxcnN0XCI9PT1PYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LHIpKS5qb2luKFwiXCIpfWNhdGNoKGUpe3JldHVybiExfX0oKT9PYmplY3QuYXNzaWduOmZ1bmN0aW9uKGUsbyl7Zm9yKHZhciBhLGksbD1mdW5jdGlvbihlKXtpZihudWxsPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZFwiKTtyZXR1cm4gT2JqZWN0KGUpfShlKSxzPTE7czxhcmd1bWVudHMubGVuZ3RoO3MrKyl7Zm9yKHZhciBjIGluIGE9T2JqZWN0KGFyZ3VtZW50c1tzXSkpbi5jYWxsKGEsYykmJihsW2NdPWFbY10pO2lmKHQpe2k9dChhKTtmb3IodmFyIHU9MDt1PGkubGVuZ3RoO3UrKylyLmNhbGwoYSxpW3VdKSYmKGxbaVt1XV09YVtpW3VdXSl9fXJldHVybiBsfX0sOTI5NDooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIHI9big2NTUpLG89big0Mzk0KSxhPW4oMzU3MyksaT1uKDQ4MzkpO3ZhciBsPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmXCJkZWZhdWx0XCJpbiBlP2U6e2RlZmF1bHQ6ZX19KGkpLHM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBNYXRoLm1pbihNYXRoLm1heChuLGUpLHQpfSxjPS4wMDEsdT0uMDEsZD0xMCxwPS4wNSxmPTEsaD0xMjtmdW5jdGlvbiBnKGUsdCl7cmV0dXJuIGUqTWF0aC5zcXJ0KDEtdCp0KX12YXIgdj1bXCJkdXJhdGlvblwiLFwiYm91bmNlXCJdLEM9W1wic3RpZmZuZXNzXCIsXCJkYW1waW5nXCIsXCJtYXNzXCJdO2Z1bmN0aW9uIG0oZSx0KXtyZXR1cm4gdC5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09ZVt0XX0pKX1mdW5jdGlvbiB3KGUpe3ZhciB0PWUuZnJvbSxuPXZvaWQgMD09PXQ/MDp0LGE9ZS50byxpPXZvaWQgMD09PWE/MTphLGw9ZS5yZXN0U3BlZWQsdz12b2lkIDA9PT1sPzI6bCx5PWUucmVzdERlbHRhLHg9ci5fX3Jlc3QoZSxbXCJmcm9tXCIsXCJ0b1wiLFwicmVzdFNwZWVkXCIsXCJyZXN0RGVsdGFcIl0pLGs9e2RvbmU6ITEsdmFsdWU6bn0sUz1mdW5jdGlvbihlKXt2YXIgdD1yLl9fYXNzaWduKHt2ZWxvY2l0eTowLHN0aWZmbmVzczoxMDAsZGFtcGluZzoxMCxtYXNzOjEsaXNSZXNvbHZlZEZyb21EdXJhdGlvbjohMX0sZSk7aWYoIW0oZSxDKSYmbShlLHYpKXt2YXIgbj1mdW5jdGlvbihlKXt2YXIgdCxuLHI9ZS5kdXJhdGlvbixhPXZvaWQgMD09PXI/ODAwOnIsaT1lLmJvdW5jZSxsPXZvaWQgMD09PWk/LjI1Omksdj1lLnZlbG9jaXR5LEM9dm9pZCAwPT09dj8wOnYsbT1lLm1hc3Msdz12b2lkIDA9PT1tPzE6bTtvLndhcm5pbmcoYTw9MWUzKmQsXCJTcHJpbmcgZHVyYXRpb24gbXVzdCBiZSAxMCBzZWNvbmRzIG9yIGxlc3NcIik7dmFyIGI9MS1sO2I9cyhwLGYsYiksYT1zKHUsZCxhLzFlMyksYjwxPyh0PWZ1bmN0aW9uKGUpe3ZhciB0PWUqYixuPXQqYSxyPXQtQyxvPWcoZSxiKSxpPU1hdGguZXhwKC1uKTtyZXR1cm4gYy1yL28qaX0sbj1mdW5jdGlvbihlKXt2YXIgbj1lKmIqYSxyPW4qQytDLG89TWF0aC5wb3coYiwyKSpNYXRoLnBvdyhlLDIpKmEsaT1NYXRoLmV4cCgtbiksbD1nKE1hdGgucG93KGUsMiksYik7cmV0dXJuKC10KGUpK2M+MD8tMToxKSooKHItbykqaSkvbH0pOih0PWZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmV4cCgtZSphKSooKGUtQykqYSsxKS1jfSxuPWZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmV4cCgtZSphKSooYSphKihDLWUpKX0pO3ZhciB5PWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bixvPTE7bzxoO28rKylyLT1lKHIpL3Qocik7cmV0dXJuIHJ9KHQsbiw1L2EpO2lmKGEqPTFlMyxpc05hTih5KSlyZXR1cm57c3RpZmZuZXNzOjEwMCxkYW1waW5nOjEwLGR1cmF0aW9uOmF9O3ZhciB4PU1hdGgucG93KHksMikqdztyZXR1cm57c3RpZmZuZXNzOngsZGFtcGluZzoyKmIqTWF0aC5zcXJ0KHcqeCksZHVyYXRpb246YX19KGUpOyh0PXIuX19hc3NpZ24oci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LHQpLG4pLHt2ZWxvY2l0eTowLG1hc3M6MX0pKS5pc1Jlc29sdmVkRnJvbUR1cmF0aW9uPSEwfXJldHVybiB0fSh4KSxPPVMuc3RpZmZuZXNzLE09Uy5kYW1waW5nLEw9Uy5tYXNzLF89Uy52ZWxvY2l0eSxQPVMuZHVyYXRpb24sRT1TLmlzUmVzb2x2ZWRGcm9tRHVyYXRpb24saj1iLFI9YjtmdW5jdGlvbiBJKCl7dmFyIGU9Xz8tXy8xZTM6MCx0PWktbixyPU0vKDIqTWF0aC5zcXJ0KE8qTCkpLG89TWF0aC5zcXJ0KE8vTCkvMWUzO2lmKG51bGwhPXl8fCh5PU1hdGguYWJzKGktbik8PTE/LjAxOi40KSxyPDEpe3ZhciBhPWcobyxyKTtqPWZ1bmN0aW9uKG4pe3ZhciBsPU1hdGguZXhwKC1yKm8qbik7cmV0dXJuIGktbCooKGUrcipvKnQpL2EqTWF0aC5zaW4oYSpuKSt0Kk1hdGguY29zKGEqbikpfSxSPWZ1bmN0aW9uKG4pe3ZhciBpPU1hdGguZXhwKC1yKm8qbik7cmV0dXJuIHIqbyppKihNYXRoLnNpbihhKm4pKihlK3Iqbyp0KS9hK3QqTWF0aC5jb3MoYSpuKSktaSooTWF0aC5jb3MoYSpuKSooZStyKm8qdCktYSp0Kk1hdGguc2luKGEqbikpfX1lbHNlIGlmKDE9PT1yKWo9ZnVuY3Rpb24obil7cmV0dXJuIGktTWF0aC5leHAoLW8qbikqKHQrKGUrbyp0KSpuKX07ZWxzZXt2YXIgbD1vKk1hdGguc3FydChyKnItMSk7aj1mdW5jdGlvbihuKXt2YXIgYT1NYXRoLmV4cCgtcipvKm4pLHM9TWF0aC5taW4obCpuLDMwMCk7cmV0dXJuIGktYSooKGUrcipvKnQpKk1hdGguc2luaChzKStsKnQqTWF0aC5jb3NoKHMpKS9sfX19cmV0dXJuIEkoKSx7bmV4dDpmdW5jdGlvbihlKXt2YXIgdD1qKGUpO2lmKEUpay5kb25lPWU+PVA7ZWxzZXt2YXIgbj0xZTMqUihlKSxyPU1hdGguYWJzKG4pPD13LG89TWF0aC5hYnMoaS10KTw9eTtrLmRvbmU9ciYmb31yZXR1cm4gay52YWx1ZT1rLmRvbmU/aTp0LGt9LGZsaXBUYXJnZXQ6ZnVuY3Rpb24oKXt2YXIgZTtfPS1fLG49KGU9W2ksbl0pWzBdLGk9ZVsxXSxJKCl9fX13Lm5lZWRzSW50ZXJwb2xhdGlvbj1mdW5jdGlvbihlLHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlfHxcInN0cmluZ1wiPT10eXBlb2YgdH07dmFyIGI9ZnVuY3Rpb24oZSl7cmV0dXJuIDB9LHk9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQtZTtyZXR1cm4gMD09PXI/MToobi1lKS9yfSx4PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4tbiplK24qdCtlfSxrPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lKmUsbz10KnQ7cmV0dXJuIE1hdGguc3FydChNYXRoLm1heCgwLG4qKG8tcikrcikpfSxTPVthLmhleCxhLnJnYmEsYS5oc2xhXSxPPWZ1bmN0aW9uKGUpe3JldHVybiBTLmZpbmQoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRlc3QoZSl9KSl9LE09ZnVuY3Rpb24oZSl7cmV0dXJuXCInXCIrZStcIicgaXMgbm90IGFuIGFuaW1hdGFibGUgY29sb3IuIFVzZSB0aGUgZXF1aXZhbGVudCBjb2xvciBjb2RlIGluc3RlYWQuXCJ9LEw9ZnVuY3Rpb24oZSx0KXt2YXIgbj1PKGUpLGk9Tyh0KTtvLmludmFyaWFudCghIW4sTShlKSksby5pbnZhcmlhbnQoISFpLE0odCkpLG8uaW52YXJpYW50KG4udHJhbnNmb3JtPT09aS50cmFuc2Zvcm0sXCJCb3RoIGNvbG9ycyBtdXN0IGJlIGhleC9SR0JBLCBPUiBib3RoIG11c3QgYmUgSFNMQS5cIik7dmFyIGw9bi5wYXJzZShlKSxzPWkucGFyc2UodCksYz1yLl9fYXNzaWduKHt9LGwpLHU9bj09PWEuaHNsYT94Oms7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBjKVwiYWxwaGFcIiE9PXQmJihjW3RdPXUobFt0XSxzW3RdLGUpKTtyZXR1cm4gYy5hbHBoYT14KGwuYWxwaGEscy5hbHBoYSxlKSxuLnRyYW5zZm9ybShjKX19LF89e3g6MCx5OjAsejowfSxQPWZ1bmN0aW9uKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlfSxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0KGUobikpfX0saj1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTtyZXR1cm4gZS5yZWR1Y2UoRSl9O2Z1bmN0aW9uIFIoZSx0KXtyZXR1cm4gUChlKT9mdW5jdGlvbihuKXtyZXR1cm4geChlLHQsbil9OmEuY29sb3IudGVzdChlKT9MKGUsdCk6QShlLHQpfXZhciBJPWZ1bmN0aW9uKGUsdCl7dmFyIG49ci5fX3NwcmVhZEFycmF5KFtdLGUpLG89bi5sZW5ndGgsYT1lLm1hcCgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gUihlLHRbbl0pfSkpO3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PG87dCsrKW5bdF09YVt0XShlKTtyZXR1cm4gbn19LFY9ZnVuY3Rpb24oZSx0KXt2YXIgbj1yLl9fYXNzaWduKHIuX19hc3NpZ24oe30sZSksdCksbz17fTtmb3IodmFyIGEgaW4gbil2b2lkIDAhPT1lW2FdJiZ2b2lkIDAhPT10W2FdJiYob1thXT1SKGVbYV0sdFthXSkpO3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gbyluW3RdPW9bdF0oZSk7cmV0dXJuIG59fTtmdW5jdGlvbiBIKGUpe2Zvcih2YXIgdD1hLmNvbXBsZXgucGFyc2UoZSksbj10Lmxlbmd0aCxyPTAsbz0wLGk9MCxsPTA7bDxuO2wrKylyfHxcIm51bWJlclwiPT10eXBlb2YgdFtsXT9yKys6dm9pZCAwIT09dFtsXS5odWU/aSsrOm8rKztyZXR1cm57cGFyc2VkOnQsbnVtTnVtYmVyczpyLG51bVJHQjpvLG51bUhTTDppfX12YXIgQT1mdW5jdGlvbihlLHQpe3ZhciBuPWEuY29tcGxleC5jcmVhdGVUcmFuc2Zvcm1lcih0KSxyPUgoZSksaT1IKHQpO3JldHVybiBvLmludmFyaWFudChyLm51bUhTTD09PWkubnVtSFNMJiZyLm51bVJHQj09PWkubnVtUkdCJiZyLm51bU51bWJlcnM+PWkubnVtTnVtYmVycyxcIkNvbXBsZXggdmFsdWVzICdcIitlK1wiJyBhbmQgJ1wiK3QrXCInIHRvbyBkaWZmZXJlbnQgdG8gbWl4LiBFbnN1cmUgYWxsIGNvbG9ycyBhcmUgb2YgdGhlIHNhbWUgdHlwZS5cIiksaihJKHIucGFyc2VkLGkucGFyc2VkKSxuKX0sVD1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4geChlLHQsbil9fTtmdW5jdGlvbiBEKGUsdCxuKXt2YXIgcj12b2lkIDA9PT1uP3t9Om4saT1yLmNsYW1wLGw9dm9pZCAwPT09aXx8aSxjPXIuZWFzZSx1PXIubWl4ZXIsZD1lLmxlbmd0aDtvLmludmFyaWFudChkPT09dC5sZW5ndGgsXCJCb3RoIGlucHV0IGFuZCBvdXRwdXQgcmFuZ2VzIG11c3QgYmUgdGhlIHNhbWUgbGVuZ3RoXCIpLG8uaW52YXJpYW50KCFjfHwhQXJyYXkuaXNBcnJheShjKXx8Yy5sZW5ndGg9PT1kLTEsXCJBcnJheSBvZiBlYXNpbmcgZnVuY3Rpb25zIG11c3QgYmUgb2YgbGVuZ3RoIGBpbnB1dC5sZW5ndGggLSAxYCwgYXMgaXQgYXBwbGllcyB0byB0aGUgdHJhbnNpdGlvbnMgKipiZXR3ZWVuKiogdGhlIGRlZmluZWQgdmFsdWVzLlwiKSxlWzBdPmVbZC0xXSYmKGU9W10uY29uY2F0KGUpLHQ9W10uY29uY2F0KHQpLGUucmV2ZXJzZSgpLHQucmV2ZXJzZSgpKTt2YXIgcD1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByLG89W10saT1ufHwoXCJudW1iZXJcIj09dHlwZW9mKHI9ZVswXSk/VDpcInN0cmluZ1wiPT10eXBlb2Ygcj9hLmNvbG9yLnRlc3Qocik/TDpBOkFycmF5LmlzQXJyYXkocik/STpcIm9iamVjdFwiPT10eXBlb2Ygcj9WOnZvaWQgMCksbD1lLmxlbmd0aC0xLHM9MDtzPGw7cysrKXt2YXIgYz1pKGVbc10sZVtzKzFdKTtpZih0KXt2YXIgdT1BcnJheS5pc0FycmF5KHQpP3Rbc106dDtjPWoodSxjKX1vLnB1c2goYyl9cmV0dXJuIG99KHQsYyx1KSxmPTI9PT1kP2Z1bmN0aW9uKGUsdCl7dmFyIG49ZVswXSxyPWVbMV0sbz10WzBdO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gbyh5KG4scixlKSl9fShlLHApOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5sZW5ndGgscj1uLTE7cmV0dXJuIGZ1bmN0aW9uKG8pe3ZhciBhPTAsaT0hMTtpZihvPD1lWzBdP2k9ITA6bz49ZVtyXSYmKGE9ci0xLGk9ITApLCFpKXtmb3IodmFyIGw9MTtsPG4mJiEoZVtsXT5vfHxsPT09cik7bCsrKTthPWwtMX12YXIgcz15KGVbYV0sZVthKzFdLG8pO3JldHVybiB0W2FdKHMpfX0oZSxwKTtyZXR1cm4gbD9mdW5jdGlvbih0KXtyZXR1cm4gZihzKGVbMF0sZVtkLTFdLHQpKX06Zn12YXIgQj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIDEtZSgxLXQpfX0sWj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQ8PS41P2UoMip0KS8yOigyLWUoMiooMS10KSkpLzJ9fSwkPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5wb3codCxlKX19LE49ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0KnQqKChlKzEpKnQtZSl9fSxGPWZ1bmN0aW9uKGUpe3ZhciB0PU4oZSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybihlKj0yKTwxPy41KnQoZSk6LjUqKDItTWF0aC5wb3coMiwtMTAqKGUtMSkpKX19LFc9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LFU9JCgyKSx6PUIoVSksRz1aKFUpLEs9ZnVuY3Rpb24oZSl7cmV0dXJuIDEtTWF0aC5zaW4oTWF0aC5hY29zKGUpKX0scT1CKEspLFk9WihxKSxKPU4oMS41MjUpLFg9QihKKSxRPVooSiksZWU9RigxLjUyNSksdGU9ZnVuY3Rpb24oZSl7aWYoMT09PWV8fDA9PT1lKXJldHVybiBlO3ZhciB0PWUqZTtyZXR1cm4gZTwuMzYzNjM2MzYzNjM2MzYzNjU/Ny41NjI1KnQ6ZTwuNzI3MjcyNzI3MjcyNzI3Mz85LjA3NSp0LTkuOSplKzMuNDplPC45PzEyLjA2NjQ4MTk5NDQ1OTgzMyp0LTE5LjYzNTQ1NzA2MzcxMTkxKmUrOC44OTgwNjA5NDE4MjgyNTU6MTAuOCplKmUtMjAuNTIqZSsxMC43Mn0sbmU9Qih0ZSk7ZnVuY3Rpb24gcmUoZSx0KXtyZXR1cm4gZS5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuIHR8fEd9KSkuc3BsaWNlKDAsZS5sZW5ndGgtMSl9ZnVuY3Rpb24gb2UoZSl7dmFyIHQ9ZS5mcm9tLG49dm9pZCAwPT09dD8wOnQscj1lLnRvLG89dm9pZCAwPT09cj8xOnIsYT1lLmVhc2UsaT1lLm9mZnNldCxsPWUuZHVyYXRpb24scz12b2lkIDA9PT1sPzMwMDpsLGM9e2RvbmU6ITEsdmFsdWU6bn0sdT1BcnJheS5pc0FycmF5KG8pP286W24sb10sZD1mdW5jdGlvbihlLHQpe3JldHVybiBlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUqdH0pKX0oaSYmaS5sZW5ndGg9PT11Lmxlbmd0aD9pOmZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybiBlLm1hcCgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gMCE9PW4/bi8odC0xKTowfSkpfSh1KSxzKTtmdW5jdGlvbiBwKCl7cmV0dXJuIEQoZCx1LHtlYXNlOkFycmF5LmlzQXJyYXkoYSk/YTpyZSh1LGEpfSl9dmFyIGY9cCgpO3JldHVybntuZXh0OmZ1bmN0aW9uKGUpe3JldHVybiBjLnZhbHVlPWYoZSksYy5kb25lPWU+PXMsY30sZmxpcFRhcmdldDpmdW5jdGlvbigpe3UucmV2ZXJzZSgpLGY9cCgpfX19ZnVuY3Rpb24gYWUoZSl7dmFyIHQ9ZS52ZWxvY2l0eSxuPXZvaWQgMD09PXQ/MDp0LHI9ZS5mcm9tLG89dm9pZCAwPT09cj8wOnIsYT1lLnBvd2VyLGk9dm9pZCAwPT09YT8uODphLGw9ZS50aW1lQ29uc3RhbnQscz12b2lkIDA9PT1sPzM1MDpsLGM9ZS5yZXN0RGVsdGEsdT12b2lkIDA9PT1jPy41OmMsZD1lLm1vZGlmeVRhcmdldCxwPXtkb25lOiExLHZhbHVlOm99LGY9aSpuLGg9bytmLGc9dm9pZCAwPT09ZD9oOmQoaCk7cmV0dXJuIGchPT1oJiYoZj1nLW8pLHtuZXh0OmZ1bmN0aW9uKGUpe3ZhciB0PS1mKk1hdGguZXhwKC1lL3MpO3JldHVybiBwLmRvbmU9ISh0PnV8fHQ8LXUpLHAudmFsdWU9cC5kb25lP2c6Zyt0LHB9LGZsaXBUYXJnZXQ6ZnVuY3Rpb24oKXt9fX12YXIgaWU9e2tleWZyYW1lczpvZSxzcHJpbmc6dyxkZWNheTphZX07ZnVuY3Rpb24gbGUoZSx0LG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj0wKSxlLXQtbn12YXIgc2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24odCl7dmFyIG49dC5kZWx0YTtyZXR1cm4gZShuKX07cmV0dXJue3N0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIGwuZGVmYXVsdC51cGRhdGUodCwhMCl9LHN0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gaS5jYW5jZWxTeW5jLnVwZGF0ZSh0KX19fTtmdW5jdGlvbiBjZShlKXt2YXIgdCxuLG8sYSxpLGw9ZS5mcm9tLHM9ZS5hdXRvcGxheSxjPXZvaWQgMD09PXN8fHMsdT1lLmRyaXZlcixkPXZvaWQgMD09PXU/c2U6dSxwPWUuZWxhcHNlZCxmPXZvaWQgMD09PXA/MDpwLGg9ZS5yZXBlYXQsZz12b2lkIDA9PT1oPzA6aCx2PWUucmVwZWF0VHlwZSxDPXZvaWQgMD09PXY/XCJsb29wXCI6dixtPWUucmVwZWF0RGVsYXksYj12b2lkIDA9PT1tPzA6bSx5PWUub25QbGF5LHg9ZS5vblN0b3Asaz1lLm9uQ29tcGxldGUsUz1lLm9uUmVwZWF0LE89ZS5vblVwZGF0ZSxNPXIuX19yZXN0KGUsW1wiZnJvbVwiLFwiYXV0b3BsYXlcIixcImRyaXZlclwiLFwiZWxhcHNlZFwiLFwicmVwZWF0XCIsXCJyZXBlYXRUeXBlXCIsXCJyZXBlYXREZWxheVwiLFwib25QbGF5XCIsXCJvblN0b3BcIixcIm9uQ29tcGxldGVcIixcIm9uUmVwZWF0XCIsXCJvblVwZGF0ZVwiXSksTD1NLnRvLF89MCxQPU0uZHVyYXRpb24sRT0hMSxqPSEwLFI9ZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlLnRvKSlyZXR1cm4gb2U7aWYoaWVbZS50eXBlXSlyZXR1cm4gaWVbZS50eXBlXTt2YXIgdD1uZXcgU2V0KE9iamVjdC5rZXlzKGUpKTtyZXR1cm4gdC5oYXMoXCJlYXNlXCIpfHx0LmhhcyhcImR1cmF0aW9uXCIpJiYhdC5oYXMoXCJkYW1waW5nUmF0aW9cIik/b2U6dC5oYXMoXCJkYW1waW5nUmF0aW9cIil8fHQuaGFzKFwic3RpZmZuZXNzXCIpfHx0LmhhcyhcIm1hc3NcIil8fHQuaGFzKFwiZGFtcGluZ1wiKXx8dC5oYXMoXCJyZXN0U3BlZWRcIil8fHQuaGFzKFwicmVzdERlbHRhXCIpP3c6b2V9KE0pOyhudWxsPT09KG49KHQ9UikubmVlZHNJbnRlcnBvbGF0aW9uKXx8dm9pZCAwPT09bj92b2lkIDA6bi5jYWxsKHQsbCxMKSkmJihpPUQoWzAsMTAwXSxbbCxMXSx7Y2xhbXA6ITF9KSxsPTAsTD0xMDApO3ZhciBJPVIoci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LE0pLHtmcm9tOmwsdG86TH0pKTtyZXR1cm4gYyYmKG51bGw9PXl8fHkoKSwobz1kKChmdW5jdGlvbihlKXtpZihqfHwoZT0tZSksZis9ZSwhRSl7dmFyIHQ9SS5uZXh0KE1hdGgubWF4KDAsZikpO2E9dC52YWx1ZSxpJiYoYT1pKGEpKSxFPWo/dC5kb25lOmY8PTB9bnVsbD09T3x8TyhhKSxFJiYoMD09PV8mJihudWxsIT1QfHwoUD1mKSksXzxnP2Z1bmN0aW9uKGUsdCxuLHIpe3JldHVybiByP2U+PXQrbjplPD0tbn0oZixQLGIsaikmJihfKyssXCJyZXZlcnNlXCI9PT1DP2Y9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHZvaWQgMD09PW4mJihuPTApLHZvaWQgMD09PXImJihyPSEwKSxyP2xlKHQrLWUsdCxuKTp0LShlLXQpK259KGYsUCxiLGo9XyUyPT0wKTooZj1sZShmLFAsYiksXCJtaXJyb3JcIj09PUMmJkkuZmxpcFRhcmdldCgpKSxFPSExLFMmJlMoKSk6KG8uc3RvcCgpLGsmJmsoKSkpfSkpKS5zdGFydCgpKSx7c3RvcDpmdW5jdGlvbigpe251bGw9PXh8fHgoKSxvLnN0b3AoKX19fWZ1bmN0aW9uIHVlKGUsdCl7cmV0dXJuIHQ/ZSooMWUzL3QpOjB9dmFyIGRlPWZ1bmN0aW9uKGUpe3JldHVybiAxODAqZS9NYXRoLlBJfSxwZT1mdW5jdGlvbihlKXtyZXR1cm4gZX0sZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXBlKSxmdW5jdGlvbih0LG4scil7dmFyIG89bi1yLGE9LSgwLXQrMSkqKDAtZShNYXRoLmFicyhvKSkpO3JldHVybiBvPD0wP24rYTpuLWF9fSxoZT1mZSgpLGdlPWZlKE1hdGguc3FydCksdmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUqTWF0aC5QSS8xODB9LENlPWZ1bmN0aW9uKGUpe3JldHVybiBlLmhhc093blByb3BlcnR5KFwieFwiKSYmZS5oYXNPd25Qcm9wZXJ0eShcInlcIil9LG1lPWZ1bmN0aW9uKGUpe3JldHVybiBDZShlKSYmZS5oYXNPd25Qcm9wZXJ0eShcInpcIil9LHdlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1hdGguYWJzKGUtdCl9LGJlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PTIpLHQ9TWF0aC5wb3coMTAsdCksTWF0aC5yb3VuZChlKnQpL3R9LHllPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB2b2lkIDA9PT1yJiYocj0wKSxiZShlK24qKHQtZSkvTWF0aC5tYXgocixuKSl9LHhlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIDEtMyp0KzMqZX0sa2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMyp0LTYqZX0sU2U9ZnVuY3Rpb24oZSl7cmV0dXJuIDMqZX0sT2U9ZnVuY3Rpb24oZSx0LG4pe3JldHVybigoeGUodCxuKSplK2tlKHQsbikpKmUrU2UodCkpKmV9LE1lPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gMyp4ZSh0LG4pKmUqZSsyKmtlKHQsbikqZStTZSh0KX0sTGU9LjE7dC5hbmdsZT1mdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD1fKSxkZShNYXRoLmF0YW4yKHQueS1lLnksdC54LWUueCkpfSx0LmFuaW1hdGU9Y2UsdC5hbnRpY2lwYXRlPWVlLHQuYXBwbHlPZmZzZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj0hMDtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9ZSxuPSExKSxmdW5jdGlvbihyKXtyZXR1cm4gbj9yLWUrdDooZT1yLG49ITAsdCl9fSx0LmF0dHJhY3Q9aGUsdC5hdHRyYWN0RXhwbz1nZSx0LmJhY2tJbj1KLHQuYmFja0luT3V0PVEsdC5iYWNrT3V0PVgsdC5ib3VuY2VJbj1uZSx0LmJvdW5jZUluT3V0PWZ1bmN0aW9uKGUpe3JldHVybiBlPC41Py41KigxLXRlKDEtMiplKSk6LjUqdGUoMiplLTEpKy41fSx0LmJvdW5jZU91dD10ZSx0LmNpcmNJbj1LLHQuY2lyY0luT3V0PVksdC5jaXJjT3V0PXEsdC5jbGFtcD1zLHQuY3JlYXRlQW50aWNpcGF0ZT1GLHQuY3JlYXRlQXR0cmFjdG9yPWZlLHQuY3JlYXRlQmFja0luPU4sdC5jcmVhdGVFeHBvSW49JCx0LmN1YmljQmV6aWVyPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKGU9PT10JiZuPT09cilyZXR1cm4gVztmb3IodmFyIG89bmV3IEZsb2F0MzJBcnJheSgxMSksYT0wO2E8MTE7KythKW9bYV09T2UoYSpMZSxlLG4pO3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gMD09PWF8fDE9PT1hP2E6T2UoZnVuY3Rpb24odCl7Zm9yKHZhciByPTAsYT0xOzEwIT09YSYmb1thXTw9dDsrK2Epcis9TGU7LS1hO3ZhciBpPXIrKHQtb1thXSkvKG9bYSsxXS1vW2FdKSpMZSxsPU1lKGksZSxuKTtyZXR1cm4gbD49LjAwMT9mdW5jdGlvbihlLHQsbixyKXtmb3IodmFyIG89MDtvPDg7KytvKXt2YXIgYT1NZSh0LG4scik7aWYoMD09PWEpcmV0dXJuIHQ7dC09KE9lKHQsbixyKS1lKS9hfXJldHVybiB0fSh0LGksZSxuKTowPT09bD9pOmZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIGEsaSxsPTA7ZG97KGE9T2UoaT10KyhuLXQpLzIscixvKS1lKT4wP249aTp0PWl9d2hpbGUoTWF0aC5hYnMoYSk+MWUtNyYmKytsPDEwKTtyZXR1cm4gaX0odCxyLHIrTGUsZSxuKX0oYSksdCxyKX19LHQuZGVjYXk9YWUsdC5kZWdyZWVzVG9SYWRpYW5zPXZlLHQuZGlzdGFuY2U9ZnVuY3Rpb24oZSx0KXtpZihQKGUpJiZQKHQpKXJldHVybiB3ZShlLHQpO2lmKENlKGUpJiZDZSh0KSl7dmFyIG49d2UoZS54LHQueCkscj13ZShlLnksdC55KSxvPW1lKGUpJiZtZSh0KT93ZShlLnosdC56KTowO3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3cobiwyKStNYXRoLnBvdyhyLDIpK01hdGgucG93KG8sMikpfX0sdC5lYXNlSW49VSx0LmVhc2VJbk91dD1HLHQuZWFzZU91dD16LHQuaW5lcnRpYT1mdW5jdGlvbihlKXt2YXIgdCxuPWUuZnJvbSxvPXZvaWQgMD09PW4/MDpuLGE9ZS52ZWxvY2l0eSxsPXZvaWQgMD09PWE/MDphLHM9ZS5taW4sYz1lLm1heCx1PWUucG93ZXIsZD12b2lkIDA9PT11Py44OnUscD1lLnRpbWVDb25zdGFudCxmPXZvaWQgMD09PXA/NzUwOnAsaD1lLmJvdW5jZVN0aWZmbmVzcyxnPXZvaWQgMD09PWg/NTAwOmgsdj1lLmJvdW5jZURhbXBpbmcsQz12b2lkIDA9PT12PzEwOnYsbT1lLnJlc3REZWx0YSx3PXZvaWQgMD09PW0/MTptLGI9ZS5tb2RpZnlUYXJnZXQseT1lLmRyaXZlcix4PWUub25VcGRhdGUsaz1lLm9uQ29tcGxldGU7ZnVuY3Rpb24gUyhlKXtyZXR1cm4gdm9pZCAwIT09cyYmZTxzfHx2b2lkIDAhPT1jJiZlPmN9ZnVuY3Rpb24gTyhlKXtyZXR1cm4gdm9pZCAwPT09cz9jOnZvaWQgMD09PWN8fE1hdGguYWJzKHMtZSk8TWF0aC5hYnMoYy1lKT9zOmN9ZnVuY3Rpb24gTShlKXtudWxsPT10fHx0LnN0b3AoKSx0PWNlKHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxlKSx7ZHJpdmVyOnksb25VcGRhdGU6ZnVuY3Rpb24odCl7dmFyIG47bnVsbD09eHx8eCh0KSxudWxsPT09KG49ZS5vblVwZGF0ZSl8fHZvaWQgMD09PW58fG4uY2FsbChlLHQpfSxvbkNvbXBsZXRlOmt9KSl9ZnVuY3Rpb24gTChlKXtNKHIuX19hc3NpZ24oe3R5cGU6XCJzcHJpbmdcIixzdGlmZm5lc3M6ZyxkYW1waW5nOkMscmVzdERlbHRhOnd9LGUpKX1pZihTKG8pKUwoe2Zyb206byx2ZWxvY2l0eTpsLHRvOk8obyl9KTtlbHNle3ZhciBfPWQqbCtvO3ZvaWQgMCE9PWImJihfPWIoXykpO3ZhciBQLEUsaj1PKF8pLFI9aj09PXM/LTE6MTtNKHt0eXBlOlwiZGVjYXlcIixmcm9tOm8sdmVsb2NpdHk6bCx0aW1lQ29uc3RhbnQ6Zixwb3dlcjpkLHJlc3REZWx0YTp3LG1vZGlmeVRhcmdldDpiLG9uVXBkYXRlOlMoXyk/ZnVuY3Rpb24oZSl7UD1FLEU9ZSxsPXVlKGUtUCxpLmdldEZyYW1lRGF0YSgpLmRlbHRhKSwoMT09PVImJmU+anx8LTE9PT1SJiZlPGopJiZMKHtmcm9tOmUsdG86aix2ZWxvY2l0eTpsfSl9OnZvaWQgMH0pfXJldHVybntzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PXQ/dm9pZCAwOnQuc3RvcCgpfX19LHQuaW50ZXJwb2xhdGU9RCx0LmlzUG9pbnQ9Q2UsdC5pc1BvaW50M0Q9bWUsdC5rZXlmcmFtZXM9b2UsdC5saW5lYXI9Vyx0Lm1pcnJvckVhc2luZz1aLHQubWl4PXgsdC5taXhDb2xvcj1MLHQubWl4Q29tcGxleD1BLHQucGlwZT1qLHQucG9pbnRGcm9tVmVjdG9yPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD12ZSh0KSx7eDpuKk1hdGguY29zKHQpK2UueCx5Om4qTWF0aC5zaW4odCkrZS55fX0sdC5wcm9ncmVzcz15LHQucmFkaWFuc1RvRGVncmVlcz1kZSx0LnJldmVyc2VFYXNpbmc9Qix0LnNtb290aD1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT01MCk7dmFyIHQ9MCxuPTA7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBvPWkuZ2V0RnJhbWVEYXRhKCkudGltZXN0YW1wLGE9byE9PW4/by1uOjAsbD1hP3llKHQscixhLGUpOnQ7cmV0dXJuIG49byx0PWwsbH19LHQuc21vb3RoRnJhbWU9eWUsdC5zbmFwPWZ1bmN0aW9uKGUpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0L2UpKmV9O3ZhciB0PTAsbj1lLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG89TWF0aC5hYnMoZVswXS1yKTtmb3IodD0xO3Q8bjt0Kyspe3ZhciBhPWVbdF0saT1NYXRoLmFicyhhLXIpO2lmKDA9PT1pKXJldHVybiBhO2lmKGk+bylyZXR1cm4gZVt0LTFdO2lmKHQ9PT1uLTEpcmV0dXJuIGE7bz1pfX19LHQuc3ByaW5nPXcsdC5zdGVwcz1mdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD1cImVuZFwiKSxmdW5jdGlvbihuKXt2YXIgcj0obj1cImVuZFwiPT09dD9NYXRoLm1pbihuLC45OTkpOk1hdGgubWF4KG4sLjAwMSkpKmUsbz1cImVuZFwiPT09dD9NYXRoLmZsb29yKHIpOk1hdGguY2VpbChyKTtyZXR1cm4gcygwLDEsby9lKX19LHQudG9EZWNpbWFsPWJlLHQudmVsb2NpdHlQZXJGcmFtZT1mdW5jdGlvbihlLHQpe3JldHVybiBlLygxZTMvdCl9LHQudmVsb2NpdHlQZXJTZWNvbmQ9dWUsdC53cmFwPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10LWU7cmV0dXJuKChuLWUpJXIrciklcitlfX0sMjcwMzooZSx0LG4pPT57dmFyIHI9big0MTQpO2Z1bmN0aW9uIG8oKXt9ZnVuY3Rpb24gYSgpe31hLnJlc2V0V2FybmluZ0NhY2hlPW8sZS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbixvLGEsaSl7aWYoaSE9PXIpe3ZhciBsPW5ldyBFcnJvcihcIkNhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuIFVzZSBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKSB0byBjYWxsIHRoZW0uIFJlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXNcIik7dGhyb3cgbC5uYW1lPVwiSW52YXJpYW50IFZpb2xhdGlvblwiLGx9fWZ1bmN0aW9uIHQoKXtyZXR1cm4gZX1lLmlzUmVxdWlyZWQ9ZTt2YXIgbj17YXJyYXk6ZSxiaWdpbnQ6ZSxib29sOmUsZnVuYzplLG51bWJlcjplLG9iamVjdDplLHN0cmluZzplLHN5bWJvbDplLGFueTplLGFycmF5T2Y6dCxlbGVtZW50OmUsZWxlbWVudFR5cGU6ZSxpbnN0YW5jZU9mOnQsbm9kZTplLG9iamVjdE9mOnQsb25lT2Y6dCxvbmVPZlR5cGU6dCxzaGFwZTp0LGV4YWN0OnQsY2hlY2tQcm9wVHlwZXM6YSxyZXNldFdhcm5pbmdDYWNoZTpvfTtyZXR1cm4gbi5Qcm9wVHlwZXM9bixufX0sNTY5NzooZSx0LG4pPT57ZS5leHBvcnRzPW4oMjcwMykoKX0sNDE0OmU9PntlLmV4cG9ydHM9XCJTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRFwifSw3MjkyOihlLHQsbik9PntuLnIodCksbi5kKHQse0NhbGVuZGFyOigpPT5YbixDZW50dXJ5VmlldzooKT0+RXQsRGVjYWRlVmlldzooKT0+TnQsTW9udGhWaWV3OigpPT5MbixOYXZpZ2F0aW9uOigpPT5OZSxZZWFyVmlldzooKT0+dG4sZGVmYXVsdDooKT0+dHJ9KTt2YXIgcj1uKDY2ODkpLG89bi5uKHIpLGE9big1Njk3KSxpPW4ubihhKTtmdW5jdGlvbiBsKGUpe3ZhciB0LG4scj1cIlwiO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlfHxcIm51bWJlclwiPT10eXBlb2YgZSlyKz1lO2Vsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIGUpaWYoQXJyYXkuaXNBcnJheShlKSlmb3IodD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF0mJihuPWwoZVt0XSkpJiYociYmKHIrPVwiIFwiKSxyKz1uKTtlbHNlIGZvcih0IGluIGUpZVt0XSYmKHImJihyKz1cIiBcIikscis9dCk7cmV0dXJuIHJ9Y29uc3Qgcz1mdW5jdGlvbigpe2Zvcih2YXIgZSx0LG49MCxyPVwiXCI7bjxhcmd1bWVudHMubGVuZ3RoOykoZT1hcmd1bWVudHNbbisrXSkmJih0PWwoZSkpJiYociYmKHIrPVwiIFwiKSxyKz10KTtyZXR1cm4gcn07dmFyIGM9big3NzMpLHU9bi5uKGMpO2Z1bmN0aW9uIGQoZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfXZhciBwPXUoKSgoZnVuY3Rpb24oZSl7dmFyIHQsbj12b2lkIDA9PT1lP3t9OmUscj1uLnVzZUZhbGxiYWNrTG9jYWxlLG89dm9pZCAwPT09cnx8cixhPW4uZmFsbGJhY2tMb2NhbGUsaT12b2lkIDA9PT1hP1wiZW4tVVNcIjphLGw9W107aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyl7dmFyIHM9d2luZG93Lm5hdmlnYXRvcjtsPWwuY29uY2F0KHMubGFuZ3VhZ2VzLHMubGFuZ3VhZ2Uscy51c2VyTGFuZ3VhZ2Uscy5icm93c2VyTGFuZ3VhZ2Uscy5zeXN0ZW1MYW5ndWFnZSl9cmV0dXJuIG8mJmwucHVzaChpKSxmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXAoKGZ1bmN0aW9uKGUpe2lmKCFlfHwtMT09PWUuaW5kZXhPZihcIi1cIil8fGUudG9Mb3dlckNhc2UoKSE9PWUpcmV0dXJuIGU7dmFyIHQ9ZS5zcGxpdChcIi1cIik7cmV0dXJuIHRbMF0rXCItXCIrdFsxXS50b1VwcGVyQ2FzZSgpfSkpfSgodD1sKS5maWx0ZXIoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIGUmJnQuaW5kZXhPZihlKT09PW59KSkpfSksZCksZj11KCkoKGZ1bmN0aW9uKGUpe3JldHVybiBwKGUpWzBdfHxudWxsfSksZCk7Y29uc3QgaD1mO2Z1bmN0aW9uIGcoZSx0LG4pe3JldHVybiBmdW5jdGlvbihyLG8pe3ZvaWQgMD09PW8mJihvPW4pO3ZhciBhPWUocikrbztyZXR1cm4gdChhKX19ZnVuY3Rpb24gdihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBEYXRlKGUodCkuZ2V0VGltZSgpLTEpfX1mdW5jdGlvbiBDKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybltlKG4pLHQobildfX1mdW5jdGlvbiBtKGUpe2lmKGUgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBlLmdldEZ1bGxZZWFyKCk7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpcmV0dXJuIGU7dmFyIHQ9cGFyc2VJbnQoZSwxMCk7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUmJiFpc05hTih0KSlyZXR1cm4gdDt0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZ2V0IHllYXIgZnJvbSBkYXRlOiBcIi5jb25jYXQoZSxcIi5cIikpfWZ1bmN0aW9uIHcoZSl7aWYoZSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIGUuZ2V0TW9udGgoKTt0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZ2V0IG1vbnRoIGZyb20gZGF0ZTogXCIuY29uY2F0KGUsXCIuXCIpKX1mdW5jdGlvbiBiKGUpe2lmKGUgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBlLmdldERhdGUoKTt0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZ2V0IHllYXIgZnJvbSBkYXRlOiBcIi5jb25jYXQoZSxcIi5cIikpfWZ1bmN0aW9uIHkoZSl7dmFyIHQ9bShlKSxuPXQrKDEtdCklMTAwLHI9bmV3IERhdGU7cmV0dXJuIHIuc2V0RnVsbFllYXIobiwwLDEpLHIuc2V0SG91cnMoMCwwLDAsMCkscn12YXIgeD1nKG0seSwtMTAwKSxrPWcobSx5LDEwMCksUz12KGspLE89ZyhtLFMsLTEwMCksTT0oZyhtLFMsMTAwKSxDKHksUykpO2Z1bmN0aW9uIEwoZSl7dmFyIHQ9bShlKSxuPXQrKDEtdCklMTAscj1uZXcgRGF0ZTtyZXR1cm4gci5zZXRGdWxsWWVhcihuLDAsMSksci5zZXRIb3VycygwLDAsMCwwKSxyfXZhciBfPWcobSxMLC0xMCksUD1nKG0sTCwxMCksRT12KFApLGo9ZyhtLEUsLTEwKSxSPShnKG0sRSwxMCksQyhMLEUpKTtmdW5jdGlvbiBJKGUpe3ZhciB0PW0oZSksbj1uZXcgRGF0ZTtyZXR1cm4gbi5zZXRGdWxsWWVhcih0LDAsMSksbi5zZXRIb3VycygwLDAsMCwwKSxufXZhciBWPWcobSxJLC0xKSxIPWcobSxJLDEpLEE9dihIKSxUPWcobSxBLC0xKSxEPShnKG0sQSwxKSxDKEksQSkpO2Z1bmN0aW9uIEIoZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXt2b2lkIDA9PT1yJiYocj10KTt2YXIgbz1tKG4pLGE9dyhuKStyLGk9bmV3IERhdGU7cmV0dXJuIGkuc2V0RnVsbFllYXIobyxhLDEpLGkuc2V0SG91cnMoMCwwLDAsMCksZShpKX19ZnVuY3Rpb24gWihlKXt2YXIgdD1tKGUpLG49dyhlKSxyPW5ldyBEYXRlO3JldHVybiByLnNldEZ1bGxZZWFyKHQsbiwxKSxyLnNldEhvdXJzKDAsMCwwLDApLHJ9dmFyICQ9QihaLC0xKSxOPUIoWiwxKSxGPXYoTiksVz1CKEYsLTEpLFU9KEIoRiwxKSxDKFosRikpO2Z1bmN0aW9uIHooZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXt2b2lkIDA9PT1yJiYocj10KTt2YXIgbz1tKG4pLGE9dyhuKSxpPWIobikrcixsPW5ldyBEYXRlO3JldHVybiBsLnNldEZ1bGxZZWFyKG8sYSxpKSxsLnNldEhvdXJzKDAsMCwwLDApLGUobCl9fWZ1bmN0aW9uIEcoZSl7dmFyIHQ9bShlKSxuPXcoZSkscj1iKGUpLG89bmV3IERhdGU7cmV0dXJuIG8uc2V0RnVsbFllYXIodCxuLHIpLG8uc2V0SG91cnMoMCwwLDAsMCksb316KEcsLTEpO3ZhciBLLHE9dih6KEcsMSkpLFk9KHoocSwtMSkseihxLDEpLEMoRyxxKSk7ZnVuY3Rpb24gSihlKXtyZXR1cm4gYihGKGUpKX1mdW5jdGlvbiBYKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciBuPTAscj1uZXcgQXJyYXkodCk7bjx0O24rKylyW25dPWVbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gUShlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9dmFyIGVlLHRlPXtBUkFCSUM6XCJBcmFiaWNcIixIRUJSRVc6XCJIZWJyZXdcIixJU09fODYwMTpcIklTTyA4NjAxXCIsVVM6XCJVU1wifSxuZT0oUShLPXt9LHRlLlVTLFtcImVuLUNBXCIsXCJlbi1VU1wiLFwiZXMtQVJcIixcImVzLUJPXCIsXCJlcy1DTFwiLFwiZXMtQ09cIixcImVzLUNSXCIsXCJlcy1ET1wiLFwiZXMtRUNcIixcImVzLUdUXCIsXCJlcy1ITlwiLFwiZXMtTVhcIixcImVzLU5JXCIsXCJlcy1QQVwiLFwiZXMtUEVcIixcImVzLVBSXCIsXCJlcy1TVlwiLFwiZXMtVkVcIixcInB0LUJSXCJdKSxRKEssdGUuQVJBQklDLFtcImFyXCIsXCJhci1BRVwiLFwiYXItQkhcIixcImFyLURaXCIsXCJhci1FR1wiLFwiYXItSVFcIixcImFyLUpPXCIsXCJhci1LV1wiLFwiYXItTFlcIixcImFyLU9NXCIsXCJhci1RQVwiLFwiYXItU0FcIixcImFyLVNEXCIsXCJhci1TWVwiLFwiYXItWUVcIixcImR2XCIsXCJkdi1NVlwiLFwicHNcIixcInBzLUFSXCJdKSxRKEssdGUuSEVCUkVXLFtcImhlXCIsXCJoZS1JTFwiXSksSykscmU9KGVlPUFycmF5KDcpLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIFgoZSl9KGVlKXx8ZnVuY3Rpb24oZSl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lW1wiQEBpdGVyYXRvclwiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oZWUpfHxmdW5jdGlvbihlLHQpe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBYKGUsdCk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVyblwiT2JqZWN0XCI9PT1uJiZlLmNvbnN0cnVjdG9yJiYobj1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT1ufHxcIlNldFwiPT09bj9BcnJheS5mcm9tKGUpOlwiQXJndW1lbnRzXCI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT9YKGUsdCk6dm9pZCAwfX0oZWUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpKS5tYXAoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR9KSksb2U9bmV3IE1hcDtmdW5jdGlvbiBhZShlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dmFyIHI9dHx8aCgpO29lLmhhcyhyKXx8b2Uuc2V0KHIsbmV3IE1hcCk7dmFyIG89b2UuZ2V0KHIpO3JldHVybiBvLmhhcyhlKXx8by5zZXQoZSxuZXcgSW50bC5EYXRlVGltZUZvcm1hdChyLGUpLmZvcm1hdCksby5nZXQoZSkobil9fShlKSh0LGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBEYXRlKGUpO3JldHVybiBuZXcgRGF0ZSh0LnNldEhvdXJzKDEyKSl9KG4pKX19YWUoe2RheTpcIm51bWVyaWNcIixtb250aDpcIm51bWVyaWNcIix5ZWFyOlwibnVtZXJpY1wifSk7dmFyIGllPWFlKHtkYXk6XCJudW1lcmljXCJ9KSxsZT1hZSh7ZGF5OlwibnVtZXJpY1wiLG1vbnRoOlwibG9uZ1wiLHllYXI6XCJudW1lcmljXCJ9KSxzZT1hZSh7bW9udGg6XCJsb25nXCJ9KSxjZT1hZSh7bW9udGg6XCJsb25nXCIseWVhcjpcIm51bWVyaWNcIn0pLHVlPWFlKHt3ZWVrZGF5Olwic2hvcnRcIn0pLGRlPWFlKHt3ZWVrZGF5OlwibG9uZ1wifSkscGU9YWUoe3llYXI6XCJudW1lcmljXCJ9KSxmZT1yZVswXSxoZT1yZVs1XSxnZT1yZVs2XTtmdW5jdGlvbiB2ZShlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGUuSVNPXzg2MDEsbj1lLmdldERheSgpO3N3aXRjaCh0KXtjYXNlIHRlLklTT184NjAxOnJldHVybihuKzYpJTc7Y2FzZSB0ZS5BUkFCSUM6cmV0dXJuKG4rMSklNztjYXNlIHRlLkhFQlJFVzpjYXNlIHRlLlVTOnJldHVybiBuO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgY2FsZW5kYXIgdHlwZS5cIil9fWZ1bmN0aW9uIENlKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0ZS5JU09fODYwMSxuPW0oZSkscj13KGUpLG89ZS5nZXREYXRlKCktdmUoZSx0KTtyZXR1cm4gbmV3IERhdGUobixyLG8pfWZ1bmN0aW9uIG1lKGUsdCl7c3dpdGNoKGUpe2Nhc2VcImNlbnR1cnlcIjpyZXR1cm4geSh0KTtjYXNlXCJkZWNhZGVcIjpyZXR1cm4gTCh0KTtjYXNlXCJ5ZWFyXCI6cmV0dXJuIEkodCk7Y2FzZVwibW9udGhcIjpyZXR1cm4gWih0KTtjYXNlXCJkYXlcIjpyZXR1cm4gRyh0KTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmFuZ2VUeXBlOiBcIi5jb25jYXQoZSkpfX1mdW5jdGlvbiB3ZShlLHQpe3N3aXRjaChlKXtjYXNlXCJjZW50dXJ5XCI6cmV0dXJuIGsodCk7Y2FzZVwiZGVjYWRlXCI6cmV0dXJuIFAodCk7Y2FzZVwieWVhclwiOnJldHVybiBIKHQpO2Nhc2VcIm1vbnRoXCI6cmV0dXJuIE4odCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHJhbmdlVHlwZTogXCIuY29uY2F0KGUpKX19dmFyIGJlPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2VcImRlY2FkZVwiOnJldHVybiBfKHQsLTEwMCk7Y2FzZVwieWVhclwiOnJldHVybiBWKHQsLTEwKTtjYXNlXCJtb250aFwiOnJldHVybiAkKHQsLTEyKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmFuZ2VUeXBlOiBcIi5jb25jYXQoZSkpfX0seWU9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZVwiZGVjYWRlXCI6cmV0dXJuIFAodCwxMDApO2Nhc2VcInllYXJcIjpyZXR1cm4gSCh0LDEwKTtjYXNlXCJtb250aFwiOnJldHVybiBOKHQsMTIpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByYW5nZVR5cGU6IFwiLmNvbmNhdChlKSl9fTtmdW5jdGlvbiB4ZShlLHQpe3N3aXRjaChlKXtjYXNlXCJjZW50dXJ5XCI6cmV0dXJuIFModCk7Y2FzZVwiZGVjYWRlXCI6cmV0dXJuIEUodCk7Y2FzZVwieWVhclwiOnJldHVybiBBKHQpO2Nhc2VcIm1vbnRoXCI6cmV0dXJuIEYodCk7Y2FzZVwiZGF5XCI6cmV0dXJuIHEodCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHJhbmdlVHlwZTogXCIuY29uY2F0KGUpKX19dmFyIGtlPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2VcImRlY2FkZVwiOnJldHVybiBqKHQsLTEwMCk7Y2FzZVwieWVhclwiOnJldHVybiBUKHQsLTEwKTtjYXNlXCJtb250aFwiOnJldHVybiBXKHQsLTEyKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmFuZ2VUeXBlOiBcIi5jb25jYXQoZSkpfX07ZnVuY3Rpb24gU2UoZSx0KXtzd2l0Y2goZSl7Y2FzZVwiY2VudHVyeVwiOnJldHVybiBNKHQpO2Nhc2VcImRlY2FkZVwiOnJldHVybiBSKHQpO2Nhc2VcInllYXJcIjpyZXR1cm4gRCh0KTtjYXNlXCJtb250aFwiOnJldHVybiBVKHQpO2Nhc2VcImRheVwiOnJldHVybiBZKHQpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByYW5nZVR5cGU6IFwiLmNvbmNhdChlKSl9fWZ1bmN0aW9uIE9lKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpwZTtyZXR1cm4oYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApLm1hcCgoZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKX0pKS5qb2luKFwiIOKAkyBcIil9ZnVuY3Rpb24gTWUoZSx0LG4pe3JldHVybiBPZShlLHQsUihuKSl9ZnVuY3Rpb24gTGUoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRlLklTT184NjAxLG49ZS5nZXREYXkoKTtzd2l0Y2godCl7Y2FzZSB0ZS5BUkFCSUM6Y2FzZSB0ZS5IRUJSRVc6cmV0dXJuIG49PT1oZXx8bj09PWdlO2Nhc2UgdGUuSVNPXzg2MDE6Y2FzZSB0ZS5VUzpyZXR1cm4gbj09PWdlfHxuPT09ZmU7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBjYWxlbmRhciB0eXBlLlwiKX19ZnVuY3Rpb24gX2UoZSl7cmV0dXJuIF9lPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlP1wic3ltYm9sXCI6dHlwZW9mIGV9LF9lKGUpfXZhciBQZT1PYmplY3QudmFsdWVzKHRlKSxFZT1bXCJjZW50dXJ5XCIsXCJkZWNhZGVcIixcInllYXJcIixcIm1vbnRoXCJdLGplPWkoKS5vbmVPZihQZSksUmU9aSgpLm9uZU9mVHlwZShbaSgpLnN0cmluZyxpKCkuYXJyYXlPZihpKCkuc3RyaW5nKV0pLEllPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lW3RdO2lmKCFyKXJldHVybiBudWxsO2lmKCEociBpbnN0YW5jZW9mIERhdGUpKXJldHVybiBuZXcgRXJyb3IoXCJJbnZhbGlkIHByb3AgYFwiLmNvbmNhdCh0LFwiYCBvZiB0eXBlIGBcIikuY29uY2F0KF9lKHIpLFwiYCBzdXBwbGllZCB0byBgXCIpLmNvbmNhdChuLFwiYCwgZXhwZWN0ZWQgaW5zdGFuY2Ugb2YgYERhdGVgLlwiKSk7dmFyIG89ZS5tYXhEYXRlO3JldHVybiBvJiZyPm8/bmV3IEVycm9yKFwiSW52YWxpZCBwcm9wIGBcIi5jb25jYXQodCxcImAgb2YgdHlwZSBgXCIpLmNvbmNhdChfZShyKSxcImAgc3VwcGxpZWQgdG8gYFwiKS5jb25jYXQobixcImAsIG1pbkRhdGUgY2Fubm90IGJlIGxhcmdlciB0aGFuIG1heERhdGUuXCIpKTpudWxsfSxWZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZVt0XTtpZighcilyZXR1cm4gbnVsbDtpZighKHIgaW5zdGFuY2VvZiBEYXRlKSlyZXR1cm4gbmV3IEVycm9yKFwiSW52YWxpZCBwcm9wIGBcIi5jb25jYXQodCxcImAgb2YgdHlwZSBgXCIpLmNvbmNhdChfZShyKSxcImAgc3VwcGxpZWQgdG8gYFwiKS5jb25jYXQobixcImAsIGV4cGVjdGVkIGluc3RhbmNlIG9mIGBEYXRlYC5cIikpO3ZhciBvPWUubWluRGF0ZTtyZXR1cm4gbyYmcjxvP25ldyBFcnJvcihcIkludmFsaWQgcHJvcCBgXCIuY29uY2F0KHQsXCJgIG9mIHR5cGUgYFwiKS5jb25jYXQoX2UociksXCJgIHN1cHBsaWVkIHRvIGBcIikuY29uY2F0KG4sXCJgLCBtYXhEYXRlIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gbWluRGF0ZS5cIikpOm51bGx9LEhlPWkoKS5vbmVPZlR5cGUoW2koKS5mdW5jLGkoKS5zaGFwZSh7Y3VycmVudDppKCkuYW55fSldKSxBZT1pKCkub25lT2ZUeXBlKFtpKCkuaW5zdGFuY2VPZihEYXRlKSxpKCkuYXJyYXlPZihpKCkuaW5zdGFuY2VPZihEYXRlKSldKSxUZT1pKCkuYXJyYXlPZihpKCkub25lT2YoRWUpKSxEZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZVt0XSxvPWUudmlld3N8fEVlO3JldHVybiB2b2lkIDAhPT1yJiYtMT09PW8uaW5kZXhPZihyKT9uZXcgRXJyb3IoXCJJbnZhbGlkIHByb3AgYFwiLmNvbmNhdCh0LFwiYCBvZiB2YWx1ZSBgXCIpLmNvbmNhdChyLFwiYCBzdXBwbGllZCB0byBgXCIpLmNvbmNhdChuLFwiYCwgZXhwZWN0ZWQgb25lIG9mIFtcIikuY29uY2F0KG8ubWFwKChmdW5jdGlvbihlKXtyZXR1cm4nXCInLmNvbmNhdChlLCdcIicpfSkpLmpvaW4oXCIsIFwiKSxcIl0uXCIpKTpudWxsfTtEZS5pc1JlcXVpcmVkPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lW3RdO3JldHVybiByP0RlKGUsdCxuKTpuZXcgRXJyb3IoXCJUaGUgcHJvcCBgXCIuY29uY2F0KHQsXCJgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCBpbiBgXCIpLmNvbmNhdChuLFwiYCwgYnV0IGl0cyB2YWx1ZSBpcyBgXCIpLmNvbmNhdChyLFwiYC5cIikpfTt2YXIgQmU9e2FjdGl2ZVN0YXJ0RGF0ZTppKCkuaW5zdGFuY2VPZihEYXRlKS5pc1JlcXVpcmVkLGhvdmVyOmkoKS5pbnN0YW5jZU9mKERhdGUpLGxvY2FsZTppKCkuc3RyaW5nLG1heERhdGU6VmUsbWluRGF0ZTpJZSxvbkNsaWNrOmkoKS5mdW5jLG9uTW91c2VPdmVyOmkoKS5mdW5jLHRpbGVDbGFzc05hbWU6aSgpLm9uZU9mVHlwZShbaSgpLmZ1bmMsUmVdKSx0aWxlQ29udGVudDppKCkub25lT2ZUeXBlKFtpKCkuZnVuYyxpKCkubm9kZV0pLHZhbHVlOkFlLHZhbHVlVHlwZTppKCkuc3RyaW5nfSxaZT17YWN0aXZlU3RhcnREYXRlOmkoKS5pbnN0YW5jZU9mKERhdGUpLmlzUmVxdWlyZWQsY2xhc3NlczppKCkuYXJyYXlPZihpKCkuc3RyaW5nKS5pc1JlcXVpcmVkLGRhdGU6aSgpLmluc3RhbmNlT2YoRGF0ZSkuaXNSZXF1aXJlZCxsb2NhbGU6aSgpLnN0cmluZyxtYXhEYXRlOlZlLG1pbkRhdGU6SWUsb25DbGljazppKCkuZnVuYyxvbk1vdXNlT3ZlcjppKCkuZnVuYyxzdHlsZTppKCkub2JqZWN0T2YoaSgpLm9uZU9mVHlwZShbaSgpLnN0cmluZyxpKCkubnVtYmVyXSkpLHRpbGVDbGFzc05hbWU6aSgpLm9uZU9mVHlwZShbaSgpLmZ1bmMsUmVdKSx0aWxlQ29udGVudDppKCkub25lT2ZUeXBlKFtpKCkuZnVuYyxpKCkubm9kZV0pLHRpbGVEaXNhYmxlZDppKCkuZnVuY30sJGU9XCJyZWFjdC1jYWxlbmRhcl9fbmF2aWdhdGlvblwiO2Z1bmN0aW9uIE5lKGUpe3ZhciB0LG49ZS5hY3RpdmVTdGFydERhdGUscj1lLmRyaWxsVXAsYT1lLmZvcm1hdE1vbnRoWWVhcixpPXZvaWQgMD09PWE/Y2U6YSxsPWUuZm9ybWF0WWVhcixzPXZvaWQgMD09PWw/cGU6bCxjPWUubG9jYWxlLHU9ZS5tYXhEYXRlLGQ9ZS5taW5EYXRlLHA9ZS5uYXZpZ2F0aW9uQXJpYUxhYmVsLGg9dm9pZCAwPT09cD9cIlwiOnAsZz1lLm5hdmlnYXRpb25BcmlhTGl2ZSx2PWUubmF2aWdhdGlvbkxhYmVsLEM9ZS5uZXh0MkFyaWFMYWJlbCxtPXZvaWQgMD09PUM/XCJcIjpDLHc9ZS5uZXh0MkxhYmVsLGI9dm9pZCAwPT09dz9cIsK7XCI6dyx5PWUubmV4dEFyaWFMYWJlbCxrPXZvaWQgMD09PXk/XCJcIjp5LFM9ZS5uZXh0TGFiZWwsTD12b2lkIDA9PT1TP1wi4oC6XCI6UyxQPWUucHJldjJBcmlhTGFiZWwsRT12b2lkIDA9PT1QP1wiXCI6UCxSPWUucHJldjJMYWJlbCxJPXZvaWQgMD09PVI/XCLCq1wiOlIsSD1lLnByZXZBcmlhTGFiZWwsQT12b2lkIDA9PT1IP1wiXCI6SCxEPWUucHJldkxhYmVsLEI9dm9pZCAwPT09RD9cIuKAuVwiOkQsWj1lLnNldEFjdGl2ZVN0YXJ0RGF0ZSxOPWUuc2hvd0RvdWJsZVZpZXcsRj1lLnZpZXcsVT1lLnZpZXdzLmluZGV4T2YoRik+MCx6PVwiY2VudHVyeVwiIT09RixHPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2VcImNlbnR1cnlcIjpyZXR1cm4geCh0KTtjYXNlXCJkZWNhZGVcIjpyZXR1cm4gXyh0KTtjYXNlXCJ5ZWFyXCI6cmV0dXJuIFYodCk7Y2FzZVwibW9udGhcIjpyZXR1cm4gJCh0KTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmFuZ2VUeXBlOiBcIi5jb25jYXQoZSkpfX0oRixuKSxLPXomJmJlKEYsbikscT13ZShGLG4pLFk9eiYmeWUoRixuKSxKPWZ1bmN0aW9uKCl7aWYoRy5nZXRGdWxsWWVhcigpPDApcmV0dXJuITA7dmFyIGU9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZVwiY2VudHVyeVwiOnJldHVybiBPKHQpO2Nhc2VcImRlY2FkZVwiOnJldHVybiBqKHQpO2Nhc2VcInllYXJcIjpyZXR1cm4gVCh0KTtjYXNlXCJtb250aFwiOnJldHVybiBXKHQpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByYW5nZVR5cGU6IFwiLmNvbmNhdChlKSl9fShGLG4pO3JldHVybiBkJiZkPj1lfSgpLFg9eiYmZnVuY3Rpb24oKXtpZihLLmdldEZ1bGxZZWFyKCk8MClyZXR1cm4hMDt2YXIgZT1rZShGLG4pO3JldHVybiBkJiZkPj1lfSgpLFE9dSYmdTxxLGVlPXomJnUmJnU8WTtmdW5jdGlvbiB0ZShlKXt2YXIgdD1mdW5jdGlvbigpe3N3aXRjaChGKXtjYXNlXCJjZW50dXJ5XCI6cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gT2UoZSx0LE0obikpfShjLHMsZSk7Y2FzZVwiZGVjYWRlXCI6cmV0dXJuIE1lKGMscyxlKTtjYXNlXCJ5ZWFyXCI6cmV0dXJuIHMoYyxlKTtjYXNlXCJtb250aFwiOnJldHVybiBpKGMsZSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHZpZXc6IFwiLmNvbmNhdChGLFwiLlwiKSl9fSgpO3JldHVybiB2P3Yoe2RhdGU6ZSxsYWJlbDp0LGxvY2FsZTpjfHxmKCksdmlldzpGfSk6dH1yZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOiRlfSxudWxsIT09SSYmeiYmbygpLmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIix7XCJhcmlhLWxhYmVsXCI6RSxjbGFzc05hbWU6XCJcIi5jb25jYXQoJGUsXCJfX2Fycm93IFwiKS5jb25jYXQoJGUsXCJfX3ByZXYyLWJ1dHRvblwiKSxkaXNhYmxlZDpYLG9uQ2xpY2s6ZnVuY3Rpb24oKXtaKEssXCJwcmV2MlwiKX0sdHlwZTpcImJ1dHRvblwifSxJKSxudWxsIT09QiYmbygpLmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIix7XCJhcmlhLWxhYmVsXCI6QSxjbGFzc05hbWU6XCJcIi5jb25jYXQoJGUsXCJfX2Fycm93IFwiKS5jb25jYXQoJGUsXCJfX3ByZXYtYnV0dG9uXCIpLGRpc2FibGVkOkosb25DbGljazpmdW5jdGlvbigpe1ooRyxcInByZXZcIil9LHR5cGU6XCJidXR0b25cIn0sQiksKHQ9XCJcIi5jb25jYXQoJGUsXCJfX2xhYmVsXCIpLG8oKS5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIse1wiYXJpYS1sYWJlbFwiOmgsXCJhcmlhLWxpdmVcIjpnLGNsYXNzTmFtZTp0LGRpc2FibGVkOiFVLG9uQ2xpY2s6cixzdHlsZTp7ZmxleEdyb3c6MX0sdHlwZTpcImJ1dHRvblwifSxvKCkuY3JlYXRlRWxlbWVudChcInNwYW5cIix7Y2xhc3NOYW1lOlwiXCIuY29uY2F0KHQsXCJfX2xhYmVsVGV4dCBcIikuY29uY2F0KHQsXCJfX2xhYmVsVGV4dC0tZnJvbVwiKX0sdGUobikpLE4mJm8oKS5jcmVhdGVFbGVtZW50KG8oKS5GcmFnbWVudCxudWxsLG8oKS5jcmVhdGVFbGVtZW50KFwic3BhblwiLHtjbGFzc05hbWU6XCJcIi5jb25jYXQodCxcIl9fZGl2aWRlclwiKX0sXCIg4oCTIFwiKSxvKCkuY3JlYXRlRWxlbWVudChcInNwYW5cIix7Y2xhc3NOYW1lOlwiXCIuY29uY2F0KHQsXCJfX2xhYmVsVGV4dCBcIikuY29uY2F0KHQsXCJfX2xhYmVsVGV4dC0tdG9cIil9LHRlKHEpKSkpKSxudWxsIT09TCYmbygpLmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIix7XCJhcmlhLWxhYmVsXCI6ayxjbGFzc05hbWU6XCJcIi5jb25jYXQoJGUsXCJfX2Fycm93IFwiKS5jb25jYXQoJGUsXCJfX25leHQtYnV0dG9uXCIpLGRpc2FibGVkOlEsb25DbGljazpmdW5jdGlvbigpe1oocSxcIm5leHRcIil9LHR5cGU6XCJidXR0b25cIn0sTCksbnVsbCE9PWImJnomJm8oKS5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIse1wiYXJpYS1sYWJlbFwiOm0sY2xhc3NOYW1lOlwiXCIuY29uY2F0KCRlLFwiX19hcnJvdyBcIikuY29uY2F0KCRlLFwiX19uZXh0Mi1idXR0b25cIiksZGlzYWJsZWQ6ZWUsb25DbGljazpmdW5jdGlvbigpe1ooWSxcIm5leHQyXCIpfSx0eXBlOlwiYnV0dG9uXCJ9LGIpKX1OZS5wcm9wVHlwZXM9e2FjdGl2ZVN0YXJ0RGF0ZTppKCkuaW5zdGFuY2VPZihEYXRlKS5pc1JlcXVpcmVkLGRyaWxsVXA6aSgpLmZ1bmMuaXNSZXF1aXJlZCxmb3JtYXRNb250aFllYXI6aSgpLmZ1bmMsZm9ybWF0WWVhcjppKCkuZnVuYyxsb2NhbGU6aSgpLnN0cmluZyxtYXhEYXRlOmkoKS5pbnN0YW5jZU9mKERhdGUpLG1pbkRhdGU6aSgpLmluc3RhbmNlT2YoRGF0ZSksbmF2aWdhdGlvbkFyaWFMYWJlbDppKCkuc3RyaW5nLG5hdmlnYXRpb25BcmlhTGl2ZTppKCkuc3RyaW5nLG5hdmlnYXRpb25MYWJlbDppKCkuZnVuYyxuZXh0MkFyaWFMYWJlbDppKCkuc3RyaW5nLG5leHQyTGFiZWw6aSgpLm5vZGUsbmV4dEFyaWFMYWJlbDppKCkuc3RyaW5nLG5leHRMYWJlbDppKCkubm9kZSxwcmV2MkFyaWFMYWJlbDppKCkuc3RyaW5nLHByZXYyTGFiZWw6aSgpLm5vZGUscHJldkFyaWFMYWJlbDppKCkuc3RyaW5nLHByZXZMYWJlbDppKCkubm9kZSxzZXRBY3RpdmVTdGFydERhdGU6aSgpLmZ1bmMuaXNSZXF1aXJlZCxzaG93RG91YmxlVmlldzppKCkuYm9vbCx2aWV3OkRlLmlzUmVxdWlyZWQsdmlld3M6VGUuaXNSZXF1aXJlZH07dmFyIEZlPVtcImNoaWxkcmVuXCIsXCJjbGFzc05hbWVcIixcImRpcmVjdGlvblwiLFwiY291bnRcIixcIm9mZnNldFwiLFwic3R5bGVcIixcIndyYXBcIl07ZnVuY3Rpb24gV2UoKXtyZXR1cm4gV2U9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxXZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gVWUoZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIHplKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP1VlKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7R2UoZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOlVlKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfWZ1bmN0aW9uIEdlKGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBLZShlKXtyZXR1cm5cIlwiLmNvbmNhdChlLFwiJVwiKX1mdW5jdGlvbiBxZShlKXt2YXIgdD1lLmNoaWxkcmVuLG49ZS5jbGFzc05hbWUscj1lLmRpcmVjdGlvbixhPWUuY291bnQsaT1lLm9mZnNldCxsPWUuc3R5bGUscz1lLndyYXAsYz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik+PTB8fChvW25dPWVbbl0pO3JldHVybiBvfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sdC5pbmRleE9mKG4pPj0wfHxPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxuKSYmKG9bbl09ZVtuXSl9cmV0dXJuIG99KGUsRmUpO3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChcImRpdlwiLFdlKHtjbGFzc05hbWU6bixzdHlsZTp6ZSh7ZGlzcGxheTpcImZsZXhcIixmbGV4RGlyZWN0aW9uOnIsZmxleFdyYXA6cz9cIndyYXBcIjpcIm5vLXdyYXBcIn0sbCl9LGMpLG8oKS5DaGlsZHJlbi5tYXAodCwoZnVuY3Rpb24oZSx0KXtyZXR1cm4gbygpLmNsb25lRWxlbWVudChlLHplKHplKHt9LGUucHJvcHMpLHt9LHtzdHlsZTp7ZmxleEJhc2lzOktlKDEwMC9hKSxmbGV4U2hyaW5rOjAsZmxleEdyb3c6MCxvdmVyZmxvdzpcImhpZGRlblwiLG1hcmdpbkxlZnQ6aSYmMD09PXQ/S2UoMTAwKmkvYSk6bnVsbH19KSl9KSkpfWZ1bmN0aW9uIFllKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBKZShlKX0oZSl8fGZ1bmN0aW9uKGUpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVtcIkBAaXRlcmF0b3JcIl0pcmV0dXJuIEFycmF5LmZyb20oZSl9KGUpfHxmdW5jdGlvbihlLHQpe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBKZShlLHQpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm5cIk9iamVjdFwiPT09biYmZS5jb25zdHJ1Y3RvciYmKG49ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09bnx8XCJTZXRcIj09PW4/QXJyYXkuZnJvbShlKTpcIkFyZ3VtZW50c1wiPT09bnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qobik/SmUoZSx0KTp2b2lkIDB9fShlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX1mdW5jdGlvbiBKZShlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9bmV3IEFycmF5KHQpO248dDtuKyspcltuXT1lW25dO3JldHVybiByfWZ1bmN0aW9uIFhlKGUsdCl7cmV0dXJuIHRbMF08PWUmJnRbMV0+PWV9ZnVuY3Rpb24gUWUoZSx0KXtyZXR1cm4gWGUoZVswXSx0KXx8WGUoZVsxXSx0KX1mdW5jdGlvbiBldChlLHQsbil7dmFyIHI9W107aWYoUWUodCxlKSl7ci5wdXNoKG4pO3ZhciBvPVhlKGVbMF0sdCksYT1YZShlWzFdLHQpO28mJnIucHVzaChcIlwiLmNvbmNhdChuLFwiU3RhcnRcIikpLGEmJnIucHVzaChcIlwiLmNvbmNhdChuLFwiRW5kXCIpKSxvJiZhJiZyLnB1c2goXCJcIi5jb25jYXQobixcIkJvdGhFbmRzXCIpKX1yZXR1cm4gcn1mdW5jdGlvbiB0dCgpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSx0PWUudmFsdWUsbj1lLnZhbHVlVHlwZSxyPWUuZGF0ZSxvPWUuZGF0ZVR5cGUsYT1lLmhvdmVyLGk9XCJyZWFjdC1jYWxlbmRhcl9fdGlsZVwiLGw9W2ldO2lmKCFyKXJldHVybiBsO2lmKCFBcnJheS5pc0FycmF5KHIpJiYhbyl0aHJvdyBuZXcgRXJyb3IoXCJnZXRUaWxlQ2xhc3NlcygpOiBVbmFibGUgdG8gZ2V0IHRpbGUgYWN0aXZpdHkgY2xhc3NlcyBiZWNhdXNlIG9uZSBvciBtb3JlIHJlcXVpcmVkIGFyZ3VtZW50cyB3ZXJlIG5vdCBwYXNzZWQuXCIpO3ZhciBzPW5ldyBEYXRlLGM9QXJyYXkuaXNBcnJheShyKT9yOlNlKG8scik7aWYoWGUocyxjKSYmbC5wdXNoKFwiXCIuY29uY2F0KGksXCItLW5vd1wiKSksIXQpcmV0dXJuIGw7aWYoIUFycmF5LmlzQXJyYXkodCkmJiFuKXRocm93IG5ldyBFcnJvcihcImdldFRpbGVDbGFzc2VzKCk6IFVuYWJsZSB0byBnZXQgdGlsZSBhY3Rpdml0eSBjbGFzc2VzIGJlY2F1c2Ugb25lIG9yIG1vcmUgcmVxdWlyZWQgYXJndW1lbnRzIHdlcmUgbm90IHBhc3NlZC5cIik7dmFyIHUsZCxwPUFycmF5LmlzQXJyYXkodCk/dDpTZShuLHQpO2Q9YywodT1wKVswXTw9ZFswXSYmdVsxXT49ZFsxXT9sLnB1c2goXCJcIi5jb25jYXQoaSxcIi0tYWN0aXZlXCIpKTpRZShwLGMpJiZsLnB1c2goXCJcIi5jb25jYXQoaSxcIi0taGFzQWN0aXZlXCIpKTt2YXIgZj1ldChwLGMsXCJcIi5jb25jYXQoaSxcIi0tcmFuZ2VcIikpO2wucHVzaC5hcHBseShsLFllKGYpKTt2YXIgaD1bXS5jb25jYXQodCk7aWYoYSYmMT09PWgubGVuZ3RoKXt2YXIgZz1ldChhPnBbMF0/W3BbMF0sYV06W2EscFswXV0sYyxcIlwiLmNvbmNhdChpLFwiLS1ob3ZlclwiKSk7bC5wdXNoLmFwcGx5KGwsWWUoZykpfXJldHVybiBsfXFlLnByb3BUeXBlcz17Y2hpbGRyZW46aSgpLm5vZGUsY2xhc3NOYW1lOmkoKS5zdHJpbmcsY291bnQ6aSgpLm51bWJlci5pc1JlcXVpcmVkLGRpcmVjdGlvbjppKCkuc3RyaW5nLG9mZnNldDppKCkubnVtYmVyLHN0eWxlOmkoKS5vYmplY3RPZihpKCkub25lT2ZUeXBlKFtpKCkuc3RyaW5nLGkoKS5udW1iZXJdKSksd3JhcDppKCkuYm9vbH07dmFyIG50PVtcImNsYXNzTmFtZVwiLFwiY291bnRcIixcImRhdGVUcmFuc2Zvcm1cIixcImRhdGVUeXBlXCIsXCJlbmRcIixcImhvdmVyXCIsXCJvZmZzZXRcIixcInN0YXJ0XCIsXCJzdGVwXCIsXCJ0aWxlXCIsXCJ2YWx1ZVwiLFwidmFsdWVUeXBlXCJdO2Z1bmN0aW9uIHJ0KGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBvdChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9ydChPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe2F0KGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpydChPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX1mdW5jdGlvbiBhdChlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gaXQoKXtyZXR1cm4gaXQ9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxpdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gbHQoZSl7Zm9yKHZhciB0PWUuY2xhc3NOYW1lLG49ZS5jb3VudCxyPXZvaWQgMD09PW4/MzpuLGE9ZS5kYXRlVHJhbnNmb3JtLGk9ZS5kYXRlVHlwZSxsPWUuZW5kLHM9ZS5ob3ZlcixjPWUub2Zmc2V0LHU9ZS5zdGFydCxkPWUuc3RlcCxwPXZvaWQgMD09PWQ/MTpkLGY9ZS50aWxlLGg9ZS52YWx1ZSxnPWUudmFsdWVUeXBlLHY9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LGE9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb30oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLHQuaW5kZXhPZihuKT49MHx8T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsbikmJihvW25dPWVbbl0pfXJldHVybiBvfShlLG50KSxDPVtdLG09dTttPD1sO20rPXApe3ZhciB3PWEobSk7Qy5wdXNoKG8oKS5jcmVhdGVFbGVtZW50KGYsaXQoe2tleTp3LmdldFRpbWUoKSxjbGFzc2VzOnR0KHt2YWx1ZTpoLHZhbHVlVHlwZTpnLGRhdGU6dyxkYXRlVHlwZTppLGhvdmVyOnN9KSxkYXRlOncscG9pbnQ6bX0sdikpKX1yZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQocWUse2NsYXNzTmFtZTp0LGNvdW50OnIsb2Zmc2V0OmMsd3JhcDohMH0sQyl9ZnVuY3Rpb24gc3QoZSl7cmV0dXJuIHN0PVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlP1wic3ltYm9sXCI6dHlwZW9mIGV9LHN0KGUpfWZ1bmN0aW9uIGN0KGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiB1dChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9jdChPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe2d0KGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpjdChPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX1mdW5jdGlvbiBkdChlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19ZnVuY3Rpb24gcHQoZSx0KXtyZXR1cm4gcHQ9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxwdChlLHQpfWZ1bmN0aW9uIGZ0KGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiBlfWZ1bmN0aW9uIGh0KGUpe3JldHVybiBodD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0saHQoZSl9ZnVuY3Rpb24gZ3QoZSx0LG4pe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIHZ0KGUsdCl7cmV0dXJuIGUmJiF0fHwhZSYmdHx8ZSYmdCYmZS5nZXRUaW1lKCkhPT10LmdldFRpbWUoKX1mdW5jdGlvbiBDdChlLHQpe3ZhciBuPWUuYWN0aXZlU3RhcnREYXRlLHI9ZS5kYXRlLG89ZS52aWV3O3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dCh7YWN0aXZlU3RhcnREYXRlOm4sZGF0ZTpyLHZpZXc6b30pOnR9bHQucHJvcFR5cGVzPW90KG90KHt9LEJlKSx7fSx7YWN0aXZlU3RhcnREYXRlOmkoKS5pbnN0YW5jZU9mKERhdGUpLGNvdW50OmkoKS5udW1iZXIsZGF0ZVRyYW5zZm9ybTppKCkuZnVuYy5pc1JlcXVpcmVkLGRhdGVUeXBlOmkoKS5zdHJpbmcsb2Zmc2V0OmkoKS5udW1iZXIsc3RlcDppKCkubnVtYmVyLHRpbGU6aSgpLmZ1bmMuaXNSZXF1aXJlZH0pO3ZhciBtdD1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwicHJvdG90eXBlXCIse3dyaXRhYmxlOiExfSksdCYmcHQoZSx0KX0oYyxlKTt2YXIgdCxuLHIsYSxpLGw9KGE9YyxpPWZ1bmN0aW9uKCl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCksZnVuY3Rpb24oKXt2YXIgZSx0PWh0KGEpO2lmKGkpe3ZhciBuPWh0KHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QodCxhcmd1bWVudHMsbil9ZWxzZSBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJihcIm9iamVjdFwiPT09c3QodCl8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO3JldHVybiBmdChlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGMoKXt2YXIgZTshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfSh0aGlzLGMpO2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKW5bcl09YXJndW1lbnRzW3JdO3JldHVybiBndChmdChlPWwuY2FsbC5hcHBseShsLFt0aGlzXS5jb25jYXQobikpKSxcInN0YXRlXCIse30pLGV9cmV0dXJuIHQ9YyxyPVt7a2V5OlwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzXCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmFjdGl2ZVN0YXJ0RGF0ZSxyPWUudGlsZUNsYXNzTmFtZSxvPWUudGlsZUNvbnRlbnQsYT17fTtyZXR1cm4ociE9PXQudGlsZUNsYXNzTmFtZVByb3BzfHx2dChuLHQuYWN0aXZlU3RhcnREYXRlUHJvcHMpKSYmKGEudGlsZUNsYXNzTmFtZT1DdChlLHIpLGEudGlsZUNsYXNzTmFtZVByb3BzPXIpLChvIT09dC50aWxlQ29udGVudFByb3BzfHx2dChuLHQuYWN0aXZlU3RhcnREYXRlUHJvcHMpKSYmKGEudGlsZUNvbnRlbnQ9Q3QoZSxvKSxhLnRpbGVDb250ZW50UHJvcHM9byksYS5hY3RpdmVTdGFydERhdGVQcm9wcz1uLGF9fV0sKG49W3trZXk6XCJyZW5kZXJcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmFjdGl2ZVN0YXJ0RGF0ZSxuPWUuY2hpbGRyZW4scj1lLmNsYXNzZXMsYT1lLmRhdGUsaT1lLmZvcm1hdEFiYnIsbD1lLmxvY2FsZSxjPWUubWF4RGF0ZSx1PWUubWF4RGF0ZVRyYW5zZm9ybSxkPWUubWluRGF0ZSxwPWUubWluRGF0ZVRyYW5zZm9ybSxmPWUub25DbGljayxoPWUub25Nb3VzZU92ZXIsZz1lLnN0eWxlLHY9ZS50aWxlRGlzYWJsZWQsQz1lLnZpZXcsbT10aGlzLnN0YXRlLHc9bS50aWxlQ2xhc3NOYW1lLGI9bS50aWxlQ29udGVudDtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIix7Y2xhc3NOYW1lOnMocix3KSxkaXNhYmxlZDpkJiZwKGQpPmF8fGMmJnUoYyk8YXx8diYmdih7YWN0aXZlU3RhcnREYXRlOnQsZGF0ZTphLHZpZXc6Q30pLG9uQ2xpY2s6ZiYmZnVuY3Rpb24oZSl7cmV0dXJuIGYoYSxlKX0sb25Gb2N1czpoJiZmdW5jdGlvbigpe3JldHVybiBoKGEpfSxvbk1vdXNlT3ZlcjpoJiZmdW5jdGlvbigpe3JldHVybiBoKGEpfSxzdHlsZTpnLHR5cGU6XCJidXR0b25cIn0saT9vKCkuY3JlYXRlRWxlbWVudChcImFiYnJcIix7XCJhcmlhLWxhYmVsXCI6aShsLGEpfSxuKTpuLGIpfX1dKSYmZHQodC5wcm90b3R5cGUsbiksciYmZHQodCxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcInByb3RvdHlwZVwiLHt3cml0YWJsZTohMX0pLGN9KHIuQ29tcG9uZW50KTttdC5wcm9wVHlwZXM9dXQodXQoe30sWmUpLHt9LHtjaGlsZHJlbjppKCkubm9kZS5pc1JlcXVpcmVkLGZvcm1hdEFiYnI6aSgpLmZ1bmMsbWF4RGF0ZVRyYW5zZm9ybTppKCkuZnVuYy5pc1JlcXVpcmVkLG1pbkRhdGVUcmFuc2Zvcm06aSgpLmZ1bmMuaXNSZXF1aXJlZH0pO3ZhciB3dD1bXCJjbGFzc2VzXCIsXCJmb3JtYXRZZWFyXCJdO2Z1bmN0aW9uIGJ0KGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiB5dChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9idChPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe3h0KGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpidChPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX1mdW5jdGlvbiB4dChlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24ga3QoKXtyZXR1cm4ga3Q9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxrdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIFN0PVwicmVhY3QtY2FsZW5kYXJfX2NlbnR1cnktdmlld19fZGVjYWRlc19fZGVjYWRlXCI7ZnVuY3Rpb24gT3QoZSl7dmFyIHQ9ZS5jbGFzc2VzLG49ZS5mb3JtYXRZZWFyLHI9dm9pZCAwPT09bj9wZTpuLGE9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LGE9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb30oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLHQuaW5kZXhPZihuKT49MHx8T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsbikmJihvW25dPWVbbl0pfXJldHVybiBvfShlLHd0KSxpPWEuZGF0ZSxsPWEubG9jYWxlO3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChtdCxrdCh7fSxhLHtjbGFzc2VzOltdLmNvbmNhdCh0LFN0KSxtYXhEYXRlVHJhbnNmb3JtOkUsbWluRGF0ZVRyYW5zZm9ybTpMLHZpZXc6XCJjZW50dXJ5XCJ9KSxNZShsLHIsaSkpfWZ1bmN0aW9uIE10KGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBMdChlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gX3QoKXtyZXR1cm4gX3Q9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxfdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gUHQoZSl7dmFyIHQ9bSh5KGUuYWN0aXZlU3RhcnREYXRlKSksbj10Kzk5O3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChsdCxfdCh7fSxlLHtjbGFzc05hbWU6XCJyZWFjdC1jYWxlbmRhcl9fY2VudHVyeS12aWV3X19kZWNhZGVzXCIsZGF0ZVRyYW5zZm9ybTpMLGRhdGVUeXBlOlwiZGVjYWRlXCIsZW5kOm4sc3RhcnQ6dCxzdGVwOjEwLHRpbGU6T3R9KSl9ZnVuY3Rpb24gRXQoZSl7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcInJlYWN0LWNhbGVuZGFyX19jZW50dXJ5LXZpZXdcIn0sbygpLmNyZWF0ZUVsZW1lbnQoUHQsZSkpfU90LnByb3BUeXBlcz15dCh5dCh7fSxaZSkse30se2Zvcm1hdFllYXI6aSgpLmZ1bmN9KSxQdC5wcm9wVHlwZXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fTt0JTI/TXQoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXtMdChlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6TXQoT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSl9cmV0dXJuIGV9KHt9LEJlKTt2YXIganQ9W1wiY2xhc3Nlc1wiLFwiZm9ybWF0WWVhclwiXTtmdW5jdGlvbiBSdChlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gSXQoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fTt0JTI/UnQoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXtWdChlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6UnQoT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSl9cmV0dXJuIGV9ZnVuY3Rpb24gVnQoZSx0LG4pe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIEh0KCl7cmV0dXJuIEh0PU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sSHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBBdD1cInJlYWN0LWNhbGVuZGFyX19kZWNhZGUtdmlld19feWVhcnNfX3llYXJcIjtmdW5jdGlvbiBUdChlKXt2YXIgdD1lLmNsYXNzZXMsbj1lLmZvcm1hdFllYXIscj12b2lkIDA9PT1uP3BlOm4sYT1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik+PTB8fChvW25dPWVbbl0pO3JldHVybiBvfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sdC5pbmRleE9mKG4pPj0wfHxPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxuKSYmKG9bbl09ZVtuXSl9cmV0dXJuIG99KGUsanQpLGk9YS5kYXRlLGw9YS5sb2NhbGU7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KG10LEh0KHt9LGEse2NsYXNzZXM6W10uY29uY2F0KHQsQXQpLG1heERhdGVUcmFuc2Zvcm06QSxtaW5EYXRlVHJhbnNmb3JtOkksdmlldzpcImRlY2FkZVwifSkscihsLGkpKX1mdW5jdGlvbiBEdChlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gQnQoZSx0LG4pe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIFp0KCl7cmV0dXJuIFp0PU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sWnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uICR0KGUpe3ZhciB0PW0oTChlLmFjdGl2ZVN0YXJ0RGF0ZSkpLG49dCs5O3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChsdCxadCh7fSxlLHtjbGFzc05hbWU6XCJyZWFjdC1jYWxlbmRhcl9fZGVjYWRlLXZpZXdfX3llYXJzXCIsZGF0ZVRyYW5zZm9ybTpmdW5jdGlvbihlKXt2YXIgdD1uZXcgRGF0ZTtyZXR1cm4gdC5zZXRGdWxsWWVhcihlLDAsMSksdC5zZXRIb3VycygwLDAsMCwwKSx0fSxkYXRlVHlwZTpcInllYXJcIixlbmQ6bixzdGFydDp0LHRpbGU6VHR9KSl9ZnVuY3Rpb24gTnQoZSl7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcInJlYWN0LWNhbGVuZGFyX19kZWNhZGUtdmlld1wifSxvKCkuY3JlYXRlRWxlbWVudCgkdCxlKSl9VHQucHJvcFR5cGVzPUl0KEl0KHt9LFplKSx7fSx7Zm9ybWF0WWVhcjppKCkuZnVuY30pLCR0LnByb3BUeXBlcz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9EdChPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe0J0KGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpEdChPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX0oe30sQmUpO3ZhciBGdD1bXCJjbGFzc2VzXCIsXCJmb3JtYXRNb250aFwiLFwiZm9ybWF0TW9udGhZZWFyXCJdO2Z1bmN0aW9uIFd0KGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBVdChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9XdChPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe3p0KGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpXdChPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX1mdW5jdGlvbiB6dChlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gR3QoKXtyZXR1cm4gR3Q9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxHdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIEt0PVwicmVhY3QtY2FsZW5kYXJfX3llYXItdmlld19fbW9udGhzX19tb250aFwiO2Z1bmN0aW9uIHF0KGUpe3ZhciB0PWUuY2xhc3NlcyxuPWUuZm9ybWF0TW9udGgscj12b2lkIDA9PT1uP3NlOm4sYT1lLmZvcm1hdE1vbnRoWWVhcixpPXZvaWQgMD09PWE/Y2U6YSxsPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLHQuaW5kZXhPZihuKT49MHx8KG9bbl09ZVtuXSk7cmV0dXJuIG99KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYob1tuXT1lW25dKX1yZXR1cm4gb30oZSxGdCkscz1sLmRhdGUsYz1sLmxvY2FsZTtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQobXQsR3Qoe30sbCx7Y2xhc3NlczpbXS5jb25jYXQodCxLdCksZm9ybWF0QWJicjppLG1heERhdGVUcmFuc2Zvcm06RixtaW5EYXRlVHJhbnNmb3JtOlosdmlldzpcInllYXJcIn0pLHIoYyxzKSl9ZnVuY3Rpb24gWXQoZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIEp0KGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP1l0KE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7WHQoZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOll0KE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfWZ1bmN0aW9uIFh0KGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBRdCgpe3JldHVybiBRdD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LFF0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBlbihlKXt2YXIgdD1tKGUuYWN0aXZlU3RhcnREYXRlKTtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQobHQsUXQoe30sZSx7Y2xhc3NOYW1lOlwicmVhY3QtY2FsZW5kYXJfX3llYXItdmlld19fbW9udGhzXCIsZGF0ZVRyYW5zZm9ybTpmdW5jdGlvbihlKXt2YXIgbj1uZXcgRGF0ZTtyZXR1cm4gbi5zZXRGdWxsWWVhcih0LGUsMSksbi5zZXRIb3VycygwLDAsMCwwKSxufSxkYXRlVHlwZTpcIm1vbnRoXCIsZW5kOjExLHN0YXJ0OjAsdGlsZTpxdH0pKX1mdW5jdGlvbiB0bihlKXtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVhY3QtY2FsZW5kYXJfX3llYXItdmlld1wifSxvKCkuY3JlYXRlRWxlbWVudChlbixlKSl9cXQucHJvcFR5cGVzPVV0KFV0KHt9LFplKSx7fSx7Zm9ybWF0TW9udGg6aSgpLmZ1bmMsZm9ybWF0TW9udGhZZWFyOmkoKS5mdW5jfSksZW4ucHJvcFR5cGVzPUp0KEp0KHt9LEJlKSx7fSx7bG9jYWxlOmkoKS5zdHJpbmd9KTt2YXIgbm49W1wiZm9ybWF0RGF5XCIsXCJmb3JtYXRMb25nRGF0ZVwiLFwiY2FsZW5kYXJUeXBlXCIsXCJjbGFzc2VzXCIsXCJjdXJyZW50TW9udGhJbmRleFwiXTtmdW5jdGlvbiBybihlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fTt0JTI/cm4oT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXthbihlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6cm4oT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSl9cmV0dXJuIGV9ZnVuY3Rpb24gYW4oZSx0LG4pe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIGxuKCl7cmV0dXJuIGxuPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sbG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBzbj1cInJlYWN0LWNhbGVuZGFyX19tb250aC12aWV3X19kYXlzX19kYXlcIjtmdW5jdGlvbiBjbihlKXt2YXIgdD1lLmZvcm1hdERheSxuPXZvaWQgMD09PXQ/aWU6dCxyPWUuZm9ybWF0TG9uZ0RhdGUsYT12b2lkIDA9PT1yP2xlOnIsaT1lLmNhbGVuZGFyVHlwZSxsPWUuY2xhc3NlcyxzPWUuY3VycmVudE1vbnRoSW5kZXgsYz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik+PTB8fChvW25dPWVbbl0pO3JldHVybiBvfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sdC5pbmRleE9mKG4pPj0wfHxPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxuKSYmKG9bbl09ZVtuXSl9cmV0dXJuIG99KGUsbm4pLHU9Yy5kYXRlLGQ9Yy5sb2NhbGU7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KG10LGxuKHt9LGMse2NsYXNzZXM6W10uY29uY2F0KGwsc24sTGUodSxpKT9cIlwiLmNvbmNhdChzbixcIi0td2Vla2VuZFwiKTpudWxsLHUuZ2V0TW9udGgoKSE9PXM/XCJcIi5jb25jYXQoc24sXCItLW5laWdoYm9yaW5nTW9udGhcIik6bnVsbCksZm9ybWF0QWJicjphLG1heERhdGVUcmFuc2Zvcm06cSxtaW5EYXRlVHJhbnNmb3JtOkcsdmlldzpcIm1vbnRoXCJ9KSxuKGQsdSkpfWNuLnByb3BUeXBlcz1vbihvbih7fSxaZSkse30se2N1cnJlbnRNb250aEluZGV4OmkoKS5udW1iZXIuaXNSZXF1aXJlZCxmb3JtYXREYXk6aSgpLmZ1bmMsZm9ybWF0TG9uZ0RhdGU6aSgpLmZ1bmN9KTt2YXIgdW49W1wic2hvd0ZpeGVkTnVtYmVyT2ZXZWVrc1wiLFwic2hvd05laWdoYm9yaW5nTW9udGhcIl07ZnVuY3Rpb24gZG4oZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIHBuKGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBmbigpe3JldHVybiBmbj1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LGZuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBobihlKXt2YXIgdD1lLmFjdGl2ZVN0YXJ0RGF0ZSxuPWUuY2FsZW5kYXJUeXBlLHI9ZS5zaG93Rml4ZWROdW1iZXJPZldlZWtzLGE9ZS5zaG93TmVpZ2hib3JpbmdNb250aCxpPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLHQuaW5kZXhPZihuKT49MHx8KG9bbl09ZVtuXSk7cmV0dXJuIG99KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYob1tuXT1lW25dKX1yZXR1cm4gb30oZSx1biksbD1tKHQpLHM9dyh0KSxjPXJ8fGEsdT12ZSh0LG4pLGQ9Yz8wOnUscD0xKyhjPy11OjApLGY9ZnVuY3Rpb24oKXtpZihyKXJldHVybiBwKzQyLTE7dmFyIGU9Sih0KTtpZihhKXt2YXIgbz1uZXcgRGF0ZTtyZXR1cm4gby5zZXRGdWxsWWVhcihsLHMsZSksby5zZXRIb3VycygwLDAsMCwwKSxlKyg3LXZlKG8sbiktMSl9cmV0dXJuIGV9KCk7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KGx0LGZuKHt9LGkse2NsYXNzTmFtZTpcInJlYWN0LWNhbGVuZGFyX19tb250aC12aWV3X19kYXlzXCIsY291bnQ6NyxjdXJyZW50TW9udGhJbmRleDpzLGRhdGVUcmFuc2Zvcm06ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IERhdGU7cmV0dXJuIHQuc2V0RnVsbFllYXIobCxzLGUpLHQuc2V0SG91cnMoMCwwLDAsMCksdH0sZGF0ZVR5cGU6XCJkYXlcIixlbmQ6ZixvZmZzZXQ6ZCxzdGFydDpwLHRpbGU6Y259KSl9aG4ucHJvcFR5cGVzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP2RuKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7cG4oZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOmRuKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfSh7Y2FsZW5kYXJUeXBlOmplLmlzUmVxdWlyZWQsc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrczppKCkuYm9vbCxzaG93TmVpZ2hib3JpbmdNb250aDppKCkuYm9vbH0sQmUpO3ZhciBnbj1cInJlYWN0LWNhbGVuZGFyX19tb250aC12aWV3X193ZWVrZGF5c1wiLHZuPVwiXCIuY29uY2F0KGduLFwiX193ZWVrZGF5XCIpO2Z1bmN0aW9uIENuKGUpe2Zvcih2YXIgdD1lLmNhbGVuZGFyVHlwZSxuPWUuZm9ybWF0U2hvcnRXZWVrZGF5LHI9dm9pZCAwPT09bj91ZTpuLGE9ZS5mb3JtYXRXZWVrZGF5LGk9dm9pZCAwPT09YT9kZTphLGw9ZS5sb2NhbGUsYz1lLm9uTW91c2VMZWF2ZSx1PVoobmV3IERhdGUpLGQ9bSh1KSxwPXcodSksZj1bXSxoPTE7aDw9NztoKz0xKXt2YXIgZz1uZXcgRGF0ZShkLHAsaC12ZSh1LHQpKSx2PWkobCxnKTtmLnB1c2gobygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7a2V5OmgsY2xhc3NOYW1lOnModm4sTGUoZyx0KSYmXCJcIi5jb25jYXQodm4sXCItLXdlZWtlbmRcIikpfSxvKCkuY3JlYXRlRWxlbWVudChcImFiYnJcIix7XCJhcmlhLWxhYmVsXCI6dix0aXRsZTp2fSxyKGwsZykucmVwbGFjZShcIi5cIixcIlwiKSkpKX1yZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQocWUse2NsYXNzTmFtZTpnbixjb3VudDo3LG9uRm9jdXM6Yyxvbk1vdXNlT3ZlcjpjfSxmKX1Dbi5wcm9wVHlwZXM9e2NhbGVuZGFyVHlwZTpqZS5pc1JlcXVpcmVkLGZvcm1hdFNob3J0V2Vla2RheTppKCkuZnVuYyxmb3JtYXRXZWVrZGF5OmkoKS5mdW5jLGxvY2FsZTppKCkuc3RyaW5nLG9uTW91c2VMZWF2ZTppKCkuZnVuY307dmFyIG1uPVtcImRhdGVcIixcIm9uQ2xpY2tXZWVrTnVtYmVyXCIsXCJ3ZWVrTnVtYmVyXCJdO2Z1bmN0aW9uIHduKCl7cmV0dXJuIHduPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sd24uYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGJuKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiB5bihlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9dmFyIHhuPVwicmVhY3QtY2FsZW5kYXJfX3RpbGVcIjtmdW5jdGlvbiBrbihlKXt2YXIgdD1lLmRhdGUsbj1lLm9uQ2xpY2tXZWVrTnVtYmVyLHI9ZS53ZWVrTnVtYmVyLGE9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LGE9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb30oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLHQuaW5kZXhPZihuKT49MHx8T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsbikmJihvW25dPWVbbl0pfXJldHVybiBvfShlLG1uKSxpPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP2JuKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7eW4oZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOmJuKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfSh7Y2xhc3NOYW1lOnhufSxhKSxsPW8oKS5jcmVhdGVFbGVtZW50KFwic3BhblwiLG51bGwscik7cmV0dXJuIG4/bygpLmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIix3bih7fSxpLHtvbkNsaWNrOmZ1bmN0aW9uKGUpe3JldHVybiBuKHIsdCxlKX0sdHlwZTpcImJ1dHRvblwifSksbCk6bygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIixpLGwpfWZ1bmN0aW9uIFNuKGUpe3ZhciB0PWUuYWN0aXZlU3RhcnREYXRlLG49ZS5jYWxlbmRhclR5cGUscj1lLm9uQ2xpY2tXZWVrTnVtYmVyLGE9ZS5vbk1vdXNlTGVhdmUsaT1lLnNob3dGaXhlZE51bWJlck9mV2Vla3MsbD1mdW5jdGlvbigpe2lmKGkpcmV0dXJuIDY7dmFyIGU9Sih0KS0oNy12ZSh0LG4pKTtyZXR1cm4gMStNYXRoLmNlaWwoZS83KX0oKSxzPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPW0odCkscj13KHQpLG89Yih0KSxhPVtdLGk9MDtpPGw7aSs9MSlhLnB1c2goQ2UobmV3IERhdGUoZSxyLG8rNyppKSxuKSk7cmV0dXJuIGF9KCksYz1zLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0LG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRlLklTT184NjAxLHI9bj09PXRlLlVTP3RlLlVTOnRlLklTT184NjAxLG89Q2UoZSxuKSxhPW0oZSkrMTtkb3t0PUNlKG5ldyBEYXRlKGEsMCxyPT09dGUuSVNPXzg2MDE/NDoxKSxuKSxhLT0xfXdoaWxlKGU8dCk7cmV0dXJuIE1hdGgucm91bmQoKG8tdCkvNjA0OGU1KSsxfShlLG4pfSkpO3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChxZSx7Y2xhc3NOYW1lOlwicmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdfX3dlZWtOdW1iZXJzXCIsY291bnQ6bCxkaXJlY3Rpb246XCJjb2x1bW5cIixvbkZvY3VzOmEsb25Nb3VzZU92ZXI6YSxzdHlsZTp7ZmxleEJhc2lzOlwiY2FsYygxMDAlICogKDEgLyA4KVwiLGZsZXhTaHJpbms6MH19LGMubWFwKChmdW5jdGlvbihlLHQpe3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChrbix7a2V5OmUsZGF0ZTpzW3RdLG9uQ2xpY2tXZWVrTnVtYmVyOnIsd2Vla051bWJlcjplfSl9KSkpfWtuLnByb3BUeXBlcz17ZGF0ZTppKCkuaW5zdGFuY2VPZihEYXRlKS5pc1JlcXVpcmVkLG9uQ2xpY2tXZWVrTnVtYmVyOmkoKS5mdW5jLHdlZWtOdW1iZXI6aSgpLm5vZGUuaXNSZXF1aXJlZH0sU24ucHJvcFR5cGVzPXthY3RpdmVTdGFydERhdGU6aSgpLmluc3RhbmNlT2YoRGF0ZSkuaXNSZXF1aXJlZCxjYWxlbmRhclR5cGU6amUuaXNSZXF1aXJlZCxvbkNsaWNrV2Vla051bWJlcjppKCkuZnVuYyxvbk1vdXNlTGVhdmU6aSgpLmZ1bmMsc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrczppKCkuYm9vbH07dmFyIE9uPVtcImNhbGVuZGFyVHlwZVwiLFwiZm9ybWF0U2hvcnRXZWVrZGF5XCIsXCJmb3JtYXRXZWVrZGF5XCIsXCJvbkNsaWNrV2Vla051bWJlclwiLFwic2hvd1dlZWtOdW1iZXJzXCJdO2Z1bmN0aW9uIE1uKCl7cmV0dXJuIE1uPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sTW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIExuKGUpe3ZhciB0PWUuYWN0aXZlU3RhcnREYXRlLG49ZS5sb2NhbGUscj1lLm9uTW91c2VMZWF2ZSxhPWUuc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrcyxpPWUuY2FsZW5kYXJUeXBlLGw9dm9pZCAwPT09aT9mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmtleXMobmUpLmZpbmQoKGZ1bmN0aW9uKHQpe3JldHVybiBuZVt0XS5pbmNsdWRlcyhlKX0pKXx8dGUuSVNPXzg2MDF9KG4pOmksYz1lLmZvcm1hdFNob3J0V2Vla2RheSx1PWUuZm9ybWF0V2Vla2RheSxkPWUub25DbGlja1dlZWtOdW1iZXIscD1lLnNob3dXZWVrTnVtYmVycyxmPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLHQuaW5kZXhPZihuKT49MHx8KG9bbl09ZVtuXSk7cmV0dXJuIG99KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYob1tuXT1lW25dKX1yZXR1cm4gb30oZSxPbiksaD1cInJlYWN0LWNhbGVuZGFyX19tb250aC12aWV3XCI7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpzKGgscD9cIlwiLmNvbmNhdChoLFwiLS13ZWVrTnVtYmVyc1wiKTpcIlwiKX0sbygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7c3R5bGU6e2Rpc3BsYXk6XCJmbGV4XCIsYWxpZ25JdGVtczpcImZsZXgtZW5kXCJ9fSxwP28oKS5jcmVhdGVFbGVtZW50KFNuLHthY3RpdmVTdGFydERhdGU6dCxjYWxlbmRhclR5cGU6bCxvbkNsaWNrV2Vla051bWJlcjpkLG9uTW91c2VMZWF2ZTpyLHNob3dGaXhlZE51bWJlck9mV2Vla3M6YX0pOm51bGwsbygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7c3R5bGU6e2ZsZXhHcm93OjEsd2lkdGg6XCIxMDAlXCJ9fSxvKCkuY3JlYXRlRWxlbWVudChDbix7Y2FsZW5kYXJUeXBlOmwsZm9ybWF0U2hvcnRXZWVrZGF5OmMsZm9ybWF0V2Vla2RheTp1LGxvY2FsZTpuLG9uTW91c2VMZWF2ZTpyfSksbygpLmNyZWF0ZUVsZW1lbnQoaG4sTW4oe2NhbGVuZGFyVHlwZTpsfSxmKSkpKSl9TG4ucHJvcFR5cGVzPXthY3RpdmVTdGFydERhdGU6aSgpLmluc3RhbmNlT2YoRGF0ZSkuaXNSZXF1aXJlZCxjYWxlbmRhclR5cGU6amUsZm9ybWF0U2hvcnRXZWVrZGF5OmkoKS5mdW5jLGZvcm1hdFdlZWtkYXk6aSgpLmZ1bmMsbG9jYWxlOmkoKS5zdHJpbmcsb25DbGlja1dlZWtOdW1iZXI6aSgpLmZ1bmMsb25Nb3VzZUxlYXZlOmkoKS5mdW5jLHNob3dGaXhlZE51bWJlck9mV2Vla3M6aSgpLmJvb2wsc2hvd1dlZWtOdW1iZXJzOmkoKS5ib29sfTt2YXIgX249W1wiYWN0aXZlU3RhcnREYXRlXCIsXCJkZWZhdWx0QWN0aXZlU3RhcnREYXRlXCIsXCJkZWZhdWx0VmFsdWVcIixcImRlZmF1bHRWaWV3XCIsXCJtYXhEZXRhaWxcIixcIm1pbkRldGFpbFwiLFwidmFsdWVcIixcInZpZXdcIl07ZnVuY3Rpb24gUG4oKXtyZXR1cm4gUG49T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxQbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gRW4oZSl7cmV0dXJuIEVuPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlP1wic3ltYm9sXCI6dHlwZW9mIGV9LEVuKGUpfWZ1bmN0aW9uIGpuKGUsdCl7cmV0dXJuIGpuPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sam4oZSx0KX1mdW5jdGlvbiBSbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4gZX1mdW5jdGlvbiBJbihlKXtyZXR1cm4gSW49T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LEluKGUpfWZ1bmN0aW9uIFZuKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBIbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9WbihPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe0FuKGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpWbihPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX1mdW5jdGlvbiBBbihlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gVG4oZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIG49MCxyPW5ldyBBcnJheSh0KTtuPHQ7bisrKXJbbl09ZVtuXTtyZXR1cm4gcn12YXIgRG49bmV3IERhdGU7RG4uc2V0RnVsbFllYXIoMSwwLDEpLERuLnNldEhvdXJzKDAsMCwwLDApO3ZhciBCbj1uZXcgRGF0ZSg4NjRlMTMpLFpuPVwicmVhY3QtY2FsZW5kYXJcIiwkbj1bXCJjZW50dXJ5XCIsXCJkZWNhZGVcIixcInllYXJcIixcIm1vbnRoXCJdLE5uPVtdLmNvbmNhdChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gVG4oZSl9KGUpfHxmdW5jdGlvbihlKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbXCJAQGl0ZXJhdG9yXCJdKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8ZnVuY3Rpb24oZSx0KXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gVG4oZSx0KTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuXCJPYmplY3RcIj09PW4mJmUuY29uc3RydWN0b3ImJihuPWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PW58fFwiU2V0XCI9PT1uP0FycmF5LmZyb20oZSk6XCJBcmd1bWVudHNcIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pP1RuKGUsdCk6dm9pZCAwfX0oZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9KCRuLnNsaWNlKDEpKSxbXCJkYXlcIl0pO2Z1bmN0aW9uIEZuKGUsdCl7cmV0dXJuICRuLnNsaWNlKCRuLmluZGV4T2YoZSksJG4uaW5kZXhPZih0KSsxKX1mdW5jdGlvbiBXbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4tMSE9PUZuKHQsbikuaW5kZXhPZihlKX0oZSx0LG4pP2U6bn1mdW5jdGlvbiBVbihlKXtyZXR1cm4gTm5bJG4uaW5kZXhPZihlKV19ZnVuY3Rpb24gem4oZSx0KXt2YXIgbj1lLnZhbHVlLHI9ZS5taW5EYXRlLG89ZS5tYXhEYXRlLGE9ZS5tYXhEZXRhaWwsaT1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiBudWxsO3ZhciBuPUFycmF5LmlzQXJyYXkoZSkmJjI9PT1lLmxlbmd0aD9lW3RdOmU7aWYoIW4pcmV0dXJuIG51bGw7dmFyIHI9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBEYXRlP2U6bmV3IERhdGUoZSl9KG4pO2lmKGlzTmFOKHIuZ2V0VGltZSgpKSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGRhdGU6IFwiLmNvbmNhdChlKSk7cmV0dXJuIHJ9KG4sdCk7aWYoIWkpcmV0dXJuIG51bGw7dmFyIGw9VW4oYSk7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdCYmdD5lP3Q6biYmbjxlP246ZX0oW21lLHhlXVt0XShsLGkpLHIsbyl9dmFyIEduPWZ1bmN0aW9uKGUpe3JldHVybiB6bihlLDApfSxLbj1mdW5jdGlvbihlKXtyZXR1cm4gem4oZSwxKX0scW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS52YWx1ZTtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90OltHbixLbl0ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdChlKX0pKX07ZnVuY3Rpb24gWW4oZSl7dmFyIHQ9ZS5tYXhEYXRlLG49ZS5tYXhEZXRhaWwscj1lLm1pbkRhdGUsbz1lLm1pbkRldGFpbCxhPWUudmFsdWU7cmV0dXJuIG1lKFduKGUudmlldyxvLG4pLEduKHt2YWx1ZTphLG1pbkRhdGU6cixtYXhEYXRlOnQsbWF4RGV0YWlsOm59KXx8bmV3IERhdGUpfXZhciBKbj1mdW5jdGlvbihlKXtyZXR1cm4gZSYmMT09PVtdLmNvbmNhdChlKS5sZW5ndGh9LFhuPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJwcm90b3R5cGVcIix7d3JpdGFibGU6ITF9KSx0JiZqbihlLHQpfShsLGUpO3ZhciB0LG4scixhLGk9KHI9bCxhPWZ1bmN0aW9uKCl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCksZnVuY3Rpb24oKXt2YXIgZSx0PUluKHIpO2lmKGEpe3ZhciBuPUluKHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QodCxhcmd1bWVudHMsbil9ZWxzZSBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJihcIm9iamVjdFwiPT09RW4odCl8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO3JldHVybiBSbihlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGwoKXt2YXIgZTshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfSh0aGlzLGwpO2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKW5bcl09YXJndW1lbnRzW3JdO3JldHVybiBBbihSbihlPWkuY2FsbC5hcHBseShpLFt0aGlzXS5jb25jYXQobikpKSxcInN0YXRlXCIse2FjdGl2ZVN0YXJ0RGF0ZTplLnByb3BzLmRlZmF1bHRBY3RpdmVTdGFydERhdGUsdmFsdWU6ZS5wcm9wcy5kZWZhdWx0VmFsdWUsdmlldzplLnByb3BzLmRlZmF1bHRWaWV3fSksQW4oUm4oZSksXCJzZXRTdGF0ZUFuZENhbGxDYWxsYmFja3NcIiwoZnVuY3Rpb24odCxuLHIpe3ZhciBvPVJuKGUpLGE9by5hY3RpdmVTdGFydERhdGUsaT1vLnZpZXcsbD1lLnByb3BzLHM9bC5hbGxvd1BhcnRpYWxSYW5nZSxjPWwub25BY3RpdmVTdGFydERhdGVDaGFuZ2UsdT1sLm9uQ2hhbmdlLGQ9bC5vblZpZXdDaGFuZ2UscD1sLnNlbGVjdFJhbmdlLGY9e2FjdGl2ZVN0YXJ0RGF0ZTphLHZpZXc6aX07ZS5zZXRTdGF0ZSh0LChmdW5jdGlvbigpe3ZhciBvPXthY3Rpb246dC5hY3Rpb24sYWN0aXZlU3RhcnREYXRlOnQuYWN0aXZlU3RhcnREYXRlfHxlLmFjdGl2ZVN0YXJ0RGF0ZSx2YWx1ZTp0LnZhbHVlfHxlLnZhbHVlLHZpZXc6dC52aWV3fHxlLnZpZXd9O2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGUgaW4gdCYmKEVuKHRbZV0pIT09RW4oZltlXSl8fCh0W2VdaW5zdGFuY2VvZiBEYXRlP3RbZV0uZ2V0VGltZSgpIT09ZltlXS5nZXRUaW1lKCk6dFtlXSE9PWZbZV0pKX1hKFwiYWN0aXZlU3RhcnREYXRlXCIpJiZjJiZjKG8pLGEoXCJ2aWV3XCIpJiZkJiZkKG8pLGEoXCJ2YWx1ZVwiKSYmdSYmKHAmJkpuKHQudmFsdWUpP3MmJnUoW3QudmFsdWVdLG4pOnUodC52YWx1ZSxuKSksciYmcihvKX0pKX0pKSxBbihSbihlKSxcInNldEFjdGl2ZVN0YXJ0RGF0ZVwiLChmdW5jdGlvbih0LG4pe2Uuc2V0U3RhdGVBbmRDYWxsQ2FsbGJhY2tzKHthY3Rpb246bixhY3RpdmVTdGFydERhdGU6dH0pfSkpLEFuKFJuKGUpLFwiZHJpbGxEb3duXCIsKGZ1bmN0aW9uKHQsbil7aWYoZS5kcmlsbERvd25BdmFpbGFibGUpe2Uub25DbGlja1RpbGUodCxuKTt2YXIgcj1SbihlKSxvPXIudmlldyxhPXIudmlld3MsaT1lLnByb3BzLm9uRHJpbGxEb3duLGw9YVthLmluZGV4T2YobykrMV07ZS5zZXRTdGF0ZUFuZENhbGxDYWxsYmFja3Moe2FjdGlvbjpcImRyaWxsRG93blwiLGFjdGl2ZVN0YXJ0RGF0ZTp0LHZpZXc6bH0sdm9pZCAwLGkpfX0pKSxBbihSbihlKSxcImRyaWxsVXBcIiwoZnVuY3Rpb24oKXtpZihlLmRyaWxsVXBBdmFpbGFibGUpe3ZhciB0PVJuKGUpLG49dC5hY3RpdmVTdGFydERhdGUscj10LnZpZXcsbz10LnZpZXdzLGE9ZS5wcm9wcy5vbkRyaWxsVXAsaT1vW28uaW5kZXhPZihyKS0xXSxsPW1lKGksbik7ZS5zZXRTdGF0ZUFuZENhbGxDYWxsYmFja3Moe2FjdGlvbjpcImRyaWxsVXBcIixhY3RpdmVTdGFydERhdGU6bCx2aWV3Oml9LHZvaWQgMCxhKX19KSksQW4oUm4oZSksXCJvbkNoYW5nZVwiLChmdW5jdGlvbih0LG4pe3ZhciByPVJuKGUpLnZhbHVlLG89ZS5wcm9wcyxhPW8uZ29Ub1JhbmdlU3RhcnRPblNlbGVjdCxpPW8uc2VsZWN0UmFuZ2U7ZS5vbkNsaWNrVGlsZSh0LG4pO3ZhciBsLHMsYyx1PWkmJiFKbihyKTtpZihpKXt2YXIgZD1SbihlKS52YWx1ZVR5cGU7bD11P21lKGQsdCk6W21lKHM9ZCwoYz1bcix0XS5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBlLXR9KSkpWzBdKSx4ZShzLGNbMV0pXX1lbHNlIGw9ZS5nZXRQcm9jZXNzZWRWYWx1ZSh0KTt2YXIgcD0haXx8dXx8YT9ZbihIbihIbih7fSxlLnByb3BzKSx7fSx7dmFsdWU6bH0pKTpudWxsO24ucGVyc2lzdCgpLGUuc2V0U3RhdGVBbmRDYWxsQ2FsbGJhY2tzKHthY3Rpb246XCJvbkNoYW5nZVwiLGFjdGl2ZVN0YXJ0RGF0ZTpwLHZhbHVlOmx9LG4pfSkpLEFuKFJuKGUpLFwib25DbGlja1RpbGVcIiwoZnVuY3Rpb24odCxuKXt2YXIgcj1SbihlKS52aWV3LG89ZS5wcm9wcyxhPW8ub25DbGlja0RheSxpPW8ub25DbGlja0RlY2FkZSxsPW8ub25DbGlja01vbnRoLHM9by5vbkNsaWNrWWVhcixjPWZ1bmN0aW9uKCl7c3dpdGNoKHIpe2Nhc2VcImNlbnR1cnlcIjpyZXR1cm4gaTtjYXNlXCJkZWNhZGVcIjpyZXR1cm4gcztjYXNlXCJ5ZWFyXCI6cmV0dXJuIGw7Y2FzZVwibW9udGhcIjpyZXR1cm4gYTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgdmlldzogXCIuY29uY2F0KHIsXCIuXCIpKX19KCk7YyYmYyh0LG4pfSkpLEFuKFJuKGUpLFwib25Nb3VzZU92ZXJcIiwoZnVuY3Rpb24odCl7ZS5zZXRTdGF0ZSgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaG92ZXImJmUuaG92ZXIuZ2V0VGltZSgpPT09dC5nZXRUaW1lKCk/bnVsbDp7aG92ZXI6dH19KSl9KSksQW4oUm4oZSksXCJvbk1vdXNlTGVhdmVcIiwoZnVuY3Rpb24oKXtlLnNldFN0YXRlKHtob3ZlcjpudWxsfSl9KSksZX1yZXR1cm4gdD1sLG49W3trZXk6XCJhY3RpdmVTdGFydERhdGVcIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZSx0LG4scixvLGEsaSxsLHMsYyx1LGQscD10aGlzLnByb3BzLmFjdGl2ZVN0YXJ0RGF0ZSxmPXRoaXMuc3RhdGUuYWN0aXZlU3RhcnREYXRlO3JldHVybiBwfHxmfHwodD0oZT10aGlzLnByb3BzKS5hY3RpdmVTdGFydERhdGUsbj1lLmRlZmF1bHRBY3RpdmVTdGFydERhdGUscj1lLmRlZmF1bHRWYWx1ZSxvPWUuZGVmYXVsdFZpZXcsYT1lLm1heERldGFpbCxpPWUubWluRGV0YWlsLGw9ZS52YWx1ZSxzPWUudmlldyxjPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspbj1hW3JdLHQuaW5kZXhPZihuKT49MHx8KG9bbl09ZVtuXSk7cmV0dXJuIG99KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYob1tuXT1lW25dKX1yZXR1cm4gb30oZSxfbiksdT1XbihzLGksYSksKGQ9dHx8bik/bWUodSxkKTpZbihIbih7bWF4RGV0YWlsOmEsbWluRGV0YWlsOmksdmFsdWU6bHx8cix2aWV3OnN8fG99LGMpKSl9fSx7a2V5OlwidmFsdWVcIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5zZWxlY3RSYW5nZSxuPWUudmFsdWUscj10aGlzLnN0YXRlLnZhbHVlO3JldHVybiB0JiZKbihyKT9yOnZvaWQgMCE9PW4/bjpyfX0se2tleTpcInZhbHVlVHlwZVwiLGdldDpmdW5jdGlvbigpe3JldHVybiBVbih0aGlzLnByb3BzLm1heERldGFpbCl9fSx7a2V5Olwidmlld1wiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLm1pbkRldGFpbCxuPWUubWF4RGV0YWlsLHI9ZS52aWV3LG89dGhpcy5zdGF0ZS52aWV3O3JldHVybiBXbihyfHxvLHQsbil9fSx7a2V5Olwidmlld3NcIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzO3JldHVybiBGbihlLm1pbkRldGFpbCxlLm1heERldGFpbCl9fSx7a2V5OlwiaG92ZXJcIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLnNlbGVjdFJhbmdlLHQ9dGhpcy5zdGF0ZS5ob3ZlcjtyZXR1cm4gZT90Om51bGx9fSx7a2V5OlwiZHJpbGxEb3duQXZhaWxhYmxlXCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy52aWV3LHQ9dGhpcy52aWV3cztyZXR1cm4gdC5pbmRleE9mKGUpPHQubGVuZ3RoLTF9fSx7a2V5OlwiZHJpbGxVcEF2YWlsYWJsZVwiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMudmlldztyZXR1cm4gdGhpcy52aWV3cy5pbmRleE9mKGUpPjB9fSx7a2V5OlwiZ2V0UHJvY2Vzc2VkVmFsdWVcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnByb3BzLG49dC5taW5EYXRlLHI9dC5tYXhEYXRlLG89dC5tYXhEZXRhaWwsYT10LnJldHVyblZhbHVlO3JldHVybiBmdW5jdGlvbigpe3N3aXRjaChhKXtjYXNlXCJzdGFydFwiOnJldHVybiBHbjtjYXNlXCJlbmRcIjpyZXR1cm4gS247Y2FzZVwicmFuZ2VcIjpyZXR1cm4gcW47ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHJldHVyblZhbHVlLlwiKX19KCkoe3ZhbHVlOmUsbWluRGF0ZTpuLG1heERhdGU6cixtYXhEZXRhaWw6b30pfX0se2tleTpcInJlbmRlckNvbnRlbnRcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmFjdGl2ZVN0YXJ0RGF0ZSxuPXRoaXMub25Nb3VzZU92ZXIscj10aGlzLnZhbHVlVHlwZSxhPXRoaXMudmFsdWUsaT10aGlzLnZpZXcsbD10aGlzLnByb3BzLHM9bC5jYWxlbmRhclR5cGUsYz1sLmxvY2FsZSx1PWwubWF4RGF0ZSxkPWwubWluRGF0ZSxwPWwuc2VsZWN0UmFuZ2UsZj1sLnRpbGVDbGFzc05hbWUsaD1sLnRpbGVDb250ZW50LGc9bC50aWxlRGlzYWJsZWQsdj10aGlzLmhvdmVyLEM9e2FjdGl2ZVN0YXJ0RGF0ZTplP3dlKGksdCk6bWUoaSx0KSxob3Zlcjp2LGxvY2FsZTpjLG1heERhdGU6dSxtaW5EYXRlOmQsb25DbGljazp0aGlzLmRyaWxsRG93bkF2YWlsYWJsZT90aGlzLmRyaWxsRG93bjp0aGlzLm9uQ2hhbmdlLG9uTW91c2VPdmVyOnA/bjpudWxsLHRpbGVDbGFzc05hbWU6Zix0aWxlQ29udGVudDpoLHRpbGVEaXNhYmxlZDpnLHZhbHVlOmEsdmFsdWVUeXBlOnJ9O3N3aXRjaChpKXtjYXNlXCJjZW50dXJ5XCI6dmFyIG09dGhpcy5wcm9wcy5mb3JtYXRZZWFyO3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChFdCxQbih7Zm9ybWF0WWVhcjptfSxDKSk7Y2FzZVwiZGVjYWRlXCI6dmFyIHc9dGhpcy5wcm9wcy5mb3JtYXRZZWFyO3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChOdCxQbih7Zm9ybWF0WWVhcjp3fSxDKSk7Y2FzZVwieWVhclwiOnZhciBiPXRoaXMucHJvcHMseT1iLmZvcm1hdE1vbnRoLHg9Yi5mb3JtYXRNb250aFllYXI7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KHRuLFBuKHtmb3JtYXRNb250aDp5LGZvcm1hdE1vbnRoWWVhcjp4fSxDKSk7Y2FzZVwibW9udGhcIjp2YXIgaz10aGlzLnByb3BzLFM9ay5mb3JtYXREYXksTz1rLmZvcm1hdExvbmdEYXRlLE09ay5mb3JtYXRTaG9ydFdlZWtkYXksTD1rLmZvcm1hdFdlZWtkYXksXz1rLm9uQ2xpY2tXZWVrTnVtYmVyLFA9ay5zaG93RG91YmxlVmlldyxFPWsuc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrcyxqPWsuc2hvd05laWdoYm9yaW5nTW9udGgsUj1rLnNob3dXZWVrTnVtYmVycyxJPXRoaXMub25Nb3VzZUxlYXZlO3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChMbixQbih7Y2FsZW5kYXJUeXBlOnMsZm9ybWF0RGF5OlMsZm9ybWF0TG9uZ0RhdGU6Tyxmb3JtYXRTaG9ydFdlZWtkYXk6TSxmb3JtYXRXZWVrZGF5Okwsb25DbGlja1dlZWtOdW1iZXI6Xyxvbk1vdXNlTGVhdmU6cD9JOm51bGwsc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrczp2b2lkIDAhPT1FP0U6UCxzaG93TmVpZ2hib3JpbmdNb250aDpqLHNob3dXZWVrTnVtYmVyczpSfSxDKSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHZpZXc6IFwiLmNvbmNhdChpLFwiLlwiKSl9fX0se2tleTpcInJlbmRlck5hdmlnYXRpb25cIix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLnByb3BzLnNob3dOYXZpZ2F0aW9uKXJldHVybiBudWxsO3ZhciBlPXRoaXMuYWN0aXZlU3RhcnREYXRlLHQ9dGhpcy52aWV3LG49dGhpcy52aWV3cyxyPXRoaXMucHJvcHMsYT1yLmZvcm1hdE1vbnRoWWVhcixpPXIuZm9ybWF0WWVhcixsPXIubG9jYWxlLHM9ci5tYXhEYXRlLGM9ci5taW5EYXRlLHU9ci5uYXZpZ2F0aW9uQXJpYUxhYmVsLGQ9ci5uYXZpZ2F0aW9uQXJpYUxpdmUscD1yLm5hdmlnYXRpb25MYWJlbCxmPXIubmV4dDJBcmlhTGFiZWwsaD1yLm5leHQyTGFiZWwsZz1yLm5leHRBcmlhTGFiZWwsdj1yLm5leHRMYWJlbCxDPXIucHJldjJBcmlhTGFiZWwsbT1yLnByZXYyTGFiZWwsdz1yLnByZXZBcmlhTGFiZWwsYj1yLnByZXZMYWJlbCx5PXIuc2hvd0RvdWJsZVZpZXc7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KE5lLHthY3RpdmVTdGFydERhdGU6ZSxkcmlsbFVwOnRoaXMuZHJpbGxVcCxmb3JtYXRNb250aFllYXI6YSxmb3JtYXRZZWFyOmksbG9jYWxlOmwsbWF4RGF0ZTpzLG1pbkRhdGU6YyxuYXZpZ2F0aW9uQXJpYUxhYmVsOnUsbmF2aWdhdGlvbkFyaWFMaXZlOmQsbmF2aWdhdGlvbkxhYmVsOnAsbmV4dDJBcmlhTGFiZWw6ZixuZXh0MkxhYmVsOmgsbmV4dEFyaWFMYWJlbDpnLG5leHRMYWJlbDp2LHByZXYyQXJpYUxhYmVsOkMscHJldjJMYWJlbDptLHByZXZBcmlhTGFiZWw6dyxwcmV2TGFiZWw6YixzZXRBY3RpdmVTdGFydERhdGU6dGhpcy5zZXRBY3RpdmVTdGFydERhdGUsc2hvd0RvdWJsZVZpZXc6eSx2aWV3OnQsdmlld3M6bn0pfX0se2tleTpcInJlbmRlclwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuY2xhc3NOYW1lLG49ZS5pbnB1dFJlZixyPWUuc2VsZWN0UmFuZ2UsYT1lLnNob3dEb3VibGVWaWV3LGk9dGhpcy5vbk1vdXNlTGVhdmUsbD10aGlzLnZhbHVlLGM9W10uY29uY2F0KGwpO3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6cyhabixyJiYxPT09Yy5sZW5ndGgmJlwiXCIuY29uY2F0KFpuLFwiLS1zZWxlY3RSYW5nZVwiKSxhJiZcIlwiLmNvbmNhdChabixcIi0tZG91YmxlVmlld1wiKSx0KSxyZWY6bn0sdGhpcy5yZW5kZXJOYXZpZ2F0aW9uKCksbygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwiXCIuY29uY2F0KFpuLFwiX192aWV3Q29udGFpbmVyXCIpLG9uQmx1cjpyP2k6bnVsbCxvbk1vdXNlTGVhdmU6cj9pOm51bGx9LHRoaXMucmVuZGVyQ29udGVudCgpLGEmJnRoaXMucmVuZGVyQ29udGVudCghMCkpKX19XSxuJiZmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19KHQucHJvdG90eXBlLG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwicHJvdG90eXBlXCIse3dyaXRhYmxlOiExfSksbH0oci5Db21wb25lbnQpO1huLmRlZmF1bHRQcm9wcz17Z29Ub1JhbmdlU3RhcnRPblNlbGVjdDohMCxtYXhEYXRlOkJuLG1heERldGFpbDpcIm1vbnRoXCIsbWluRGF0ZTpEbixtaW5EZXRhaWw6XCJjZW50dXJ5XCIscmV0dXJuVmFsdWU6XCJzdGFydFwiLHNob3dOYXZpZ2F0aW9uOiEwLHNob3dOZWlnaGJvcmluZ01vbnRoOiEwfTt2YXIgUW49aSgpLmluc3RhbmNlT2YoRGF0ZSksZXI9aSgpLm9uZU9mVHlwZShbaSgpLnN0cmluZyxBZV0pO1huLnByb3BUeXBlcz17YWN0aXZlU3RhcnREYXRlOlFuLGFsbG93UGFydGlhbFJhbmdlOmkoKS5ib29sLGNhbGVuZGFyVHlwZTpqZSxjbGFzc05hbWU6UmUsZGVmYXVsdEFjdGl2ZVN0YXJ0RGF0ZTpRbixkZWZhdWx0VmFsdWU6ZXIsZGVmYXVsdFZpZXc6RGUsZm9ybWF0RGF5OmkoKS5mdW5jLGZvcm1hdExvbmdEYXRlOmkoKS5mdW5jLGZvcm1hdE1vbnRoOmkoKS5mdW5jLGZvcm1hdE1vbnRoWWVhcjppKCkuZnVuYyxmb3JtYXRTaG9ydFdlZWtkYXk6aSgpLmZ1bmMsZm9ybWF0V2Vla2RheTppKCkuZnVuYyxmb3JtYXRZZWFyOmkoKS5mdW5jLGdvVG9SYW5nZVN0YXJ0T25TZWxlY3Q6aSgpLmJvb2wsaW5wdXRSZWY6SGUsbG9jYWxlOmkoKS5zdHJpbmcsbWF4RGF0ZTpWZSxtYXhEZXRhaWw6aSgpLm9uZU9mKCRuKSxtaW5EYXRlOkllLG1pbkRldGFpbDppKCkub25lT2YoJG4pLG5hdmlnYXRpb25BcmlhTGFiZWw6aSgpLnN0cmluZyxuYXZpZ2F0aW9uQXJpYUxpdmU6aSgpLm9uZU9mKFtcIm9mZlwiLFwicG9saXRlXCIsXCJhc3NlcnRpdmVcIl0pLG5hdmlnYXRpb25MYWJlbDppKCkuZnVuYyxuZXh0MkFyaWFMYWJlbDppKCkuc3RyaW5nLG5leHQyTGFiZWw6aSgpLm5vZGUsbmV4dEFyaWFMYWJlbDppKCkuc3RyaW5nLG5leHRMYWJlbDppKCkubm9kZSxvbkFjdGl2ZVN0YXJ0RGF0ZUNoYW5nZTppKCkuZnVuYyxvbkNoYW5nZTppKCkuZnVuYyxvbkNsaWNrRGF5OmkoKS5mdW5jLG9uQ2xpY2tEZWNhZGU6aSgpLmZ1bmMsb25DbGlja01vbnRoOmkoKS5mdW5jLG9uQ2xpY2tXZWVrTnVtYmVyOmkoKS5mdW5jLG9uQ2xpY2tZZWFyOmkoKS5mdW5jLG9uRHJpbGxEb3duOmkoKS5mdW5jLG9uRHJpbGxVcDppKCkuZnVuYyxvblZpZXdDaGFuZ2U6aSgpLmZ1bmMscHJldjJBcmlhTGFiZWw6aSgpLnN0cmluZyxwcmV2MkxhYmVsOmkoKS5ub2RlLHByZXZBcmlhTGFiZWw6aSgpLnN0cmluZyxwcmV2TGFiZWw6aSgpLm5vZGUscmV0dXJuVmFsdWU6aSgpLm9uZU9mKFtcInN0YXJ0XCIsXCJlbmRcIixcInJhbmdlXCJdKSxzZWxlY3RSYW5nZTppKCkuYm9vbCxzaG93RG91YmxlVmlldzppKCkuYm9vbCxzaG93Rml4ZWROdW1iZXJPZldlZWtzOmkoKS5ib29sLHNob3dOYXZpZ2F0aW9uOmkoKS5ib29sLHNob3dOZWlnaGJvcmluZ01vbnRoOmkoKS5ib29sLHNob3dXZWVrTnVtYmVyczppKCkuYm9vbCx0aWxlQ2xhc3NOYW1lOmkoKS5vbmVPZlR5cGUoW2koKS5mdW5jLFJlXSksdGlsZUNvbnRlbnQ6aSgpLm9uZU9mVHlwZShbaSgpLmZ1bmMsaSgpLm5vZGVdKSx0aWxlRGlzYWJsZWQ6aSgpLmZ1bmMsdmFsdWU6ZXIsdmlldzpEZX07Y29uc3QgdHI9WG59LDUyNTE6KGUsdCxuKT0+e24oNzQxOCk7dmFyIHI9big2Njg5KSxvPTYwMTAzO2lmKHQuRnJhZ21lbnQ9NjAxMDcsXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yKXt2YXIgYT1TeW1ib2wuZm9yO289YShcInJlYWN0LmVsZW1lbnRcIiksdC5GcmFnbWVudD1hKFwicmVhY3QuZnJhZ21lbnRcIil9dmFyIGk9ci5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRC5SZWFjdEN1cnJlbnRPd25lcixsPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkscz17a2V5OiEwLHJlZjohMCxfX3NlbGY6ITAsX19zb3VyY2U6ITB9O2Z1bmN0aW9uIGMoZSx0LG4pe3ZhciByLGE9e30sYz1udWxsLHU9bnVsbDtmb3IociBpbiB2b2lkIDAhPT1uJiYoYz1cIlwiK24pLHZvaWQgMCE9PXQua2V5JiYoYz1cIlwiK3Qua2V5KSx2b2lkIDAhPT10LnJlZiYmKHU9dC5yZWYpLHQpbC5jYWxsKHQscikmJiFzLmhhc093blByb3BlcnR5KHIpJiYoYVtyXT10W3JdKTtpZihlJiZlLmRlZmF1bHRQcm9wcylmb3IociBpbiB0PWUuZGVmYXVsdFByb3BzKXZvaWQgMD09PWFbcl0mJihhW3JdPXRbcl0pO3JldHVybnskJHR5cGVvZjpvLHR5cGU6ZSxrZXk6YyxyZWY6dSxwcm9wczphLF9vd25lcjppLmN1cnJlbnR9fXQuanN4PWMsdC5qc3hzPWN9LDU4OTM6KGUsdCxuKT0+e2UuZXhwb3J0cz1uKDUyNTEpfSwzNTczOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgcj1uKDY1NSksbz1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4obix0KSxlKX19LGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGUlMT9OdW1iZXIoZS50b0ZpeGVkKDUpKTplfSxpPS8oLSk/KFtcXGRdKlxcLj9bXFxkXSkrL2csbD0vKCNbMC05YS1mXXs2fXwjWzAtOWEtZl17M318Iyg/OlswLTlhLWZdezJ9KXsyLDR9fChyZ2J8aHNsKWE/XFwoKC0/W1xcZFxcLl0rJT9bLFxcc10rKXsyLDN9XFxzKlxcLypcXHMqW1xcZFxcLl0rJT9cXCkpL2dpLHM9L14oI1swLTlhLWZdezN9fCMoPzpbMC05YS1mXXsyfSl7Miw0fXwocmdifGhzbClhP1xcKCgtP1tcXGRcXC5dKyU/WyxcXHNdKyl7MiwzfVxccypcXC8qXFxzKltcXGRcXC5dKyU/XFwpKSQvaTtmdW5jdGlvbiBjKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlfXZhciB1PXt0ZXN0OmZ1bmN0aW9uKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlfSxwYXJzZTpwYXJzZUZsb2F0LHRyYW5zZm9ybTpmdW5jdGlvbihlKXtyZXR1cm4gZX19LGQ9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LHUpLHt0cmFuc2Zvcm06bygwLDEpfSkscD1yLl9fYXNzaWduKHIuX19hc3NpZ24oe30sdSkse2RlZmF1bHQ6MX0pLGY9ZnVuY3Rpb24oZSl7cmV0dXJue3Rlc3Q6ZnVuY3Rpb24odCl7cmV0dXJuIGModCkmJnQuZW5kc1dpdGgoZSkmJjE9PT10LnNwbGl0KFwiIFwiKS5sZW5ndGh9LHBhcnNlOnBhcnNlRmxvYXQsdHJhbnNmb3JtOmZ1bmN0aW9uKHQpe3JldHVyblwiXCIrdCtlfX19LGg9ZihcImRlZ1wiKSxnPWYoXCIlXCIpLHY9ZihcInB4XCIpLEM9ZihcInZoXCIpLG09ZihcInZ3XCIpLHc9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGcpLHtwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gZy5wYXJzZShlKS8xMDB9LHRyYW5zZm9ybTpmdW5jdGlvbihlKXtyZXR1cm4gZy50cmFuc2Zvcm0oMTAwKmUpfX0pLGI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIEJvb2xlYW4oYyhuKSYmcy50ZXN0KG4pJiZuLnN0YXJ0c1dpdGgoZSl8fHQmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHQpKX19LHk9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBmdW5jdGlvbihyKXt2YXIgbztpZighYyhyKSlyZXR1cm4gcjt2YXIgYT1yLm1hdGNoKGkpLGw9YVswXSxzPWFbMV0sdT1hWzJdLGQ9YVszXTtyZXR1cm4obz17fSlbZV09cGFyc2VGbG9hdChsKSxvW3RdPXBhcnNlRmxvYXQocyksb1tuXT1wYXJzZUZsb2F0KHUpLG8uYWxwaGE9dm9pZCAwIT09ZD9wYXJzZUZsb2F0KGQpOjEsb319LHg9e3Rlc3Q6YihcImhzbFwiLFwiaHVlXCIpLHBhcnNlOnkoXCJodWVcIixcInNhdHVyYXRpb25cIixcImxpZ2h0bmVzc1wiKSx0cmFuc2Zvcm06ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5odWUsbj1lLnNhdHVyYXRpb24scj1lLmxpZ2h0bmVzcyxvPWUuYWxwaGEsaT12b2lkIDA9PT1vPzE6bztyZXR1cm5cImhzbGEoXCIrTWF0aC5yb3VuZCh0KStcIiwgXCIrZy50cmFuc2Zvcm0oYShuKSkrXCIsIFwiK2cudHJhbnNmb3JtKGEocikpK1wiLCBcIithKGQudHJhbnNmb3JtKGkpKStcIilcIn19LGs9bygwLDI1NSksUz1yLl9fYXNzaWduKHIuX19hc3NpZ24oe30sdSkse3RyYW5zZm9ybTpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChrKGUpKX19KSxPPXt0ZXN0OmIoXCJyZ2JcIixcInJlZFwiKSxwYXJzZTp5KFwicmVkXCIsXCJncmVlblwiLFwiYmx1ZVwiKSx0cmFuc2Zvcm06ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZWQsbj1lLmdyZWVuLHI9ZS5ibHVlLG89ZS5hbHBoYSxpPXZvaWQgMD09PW8/MTpvO3JldHVyblwicmdiYShcIitTLnRyYW5zZm9ybSh0KStcIiwgXCIrUy50cmFuc2Zvcm0obikrXCIsIFwiK1MudHJhbnNmb3JtKHIpK1wiLCBcIithKGQudHJhbnNmb3JtKGkpKStcIilcIn19LE09e3Rlc3Q6YihcIiNcIikscGFyc2U6ZnVuY3Rpb24oZSl7dmFyIHQ9XCJcIixuPVwiXCIscj1cIlwiLG89XCJcIjtyZXR1cm4gZS5sZW5ndGg+NT8odD1lLnN1YnN0cigxLDIpLG49ZS5zdWJzdHIoMywyKSxyPWUuc3Vic3RyKDUsMiksbz1lLnN1YnN0cig3LDIpKToodD1lLnN1YnN0cigxLDEpLG49ZS5zdWJzdHIoMiwxKSxyPWUuc3Vic3RyKDMsMSksbz1lLnN1YnN0cig0LDEpLHQrPXQsbis9bixyKz1yLG8rPW8pLHtyZWQ6cGFyc2VJbnQodCwxNiksZ3JlZW46cGFyc2VJbnQobiwxNiksYmx1ZTpwYXJzZUludChyLDE2KSxhbHBoYTpvP3BhcnNlSW50KG8sMTYpLzI1NToxfX0sdHJhbnNmb3JtOk8udHJhbnNmb3JtfSxMPXt0ZXN0OmZ1bmN0aW9uKGUpe3JldHVybiBPLnRlc3QoZSl8fE0udGVzdChlKXx8eC50ZXN0KGUpfSxwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gTy50ZXN0KGUpP08ucGFyc2UoZSk6eC50ZXN0KGUpP3gucGFyc2UoZSk6TS5wYXJzZShlKX0sdHJhbnNmb3JtOmZ1bmN0aW9uKGUpe3JldHVybiBjKGUpP2U6ZS5oYXNPd25Qcm9wZXJ0eShcInJlZFwiKT9PLnRyYW5zZm9ybShlKTp4LnRyYW5zZm9ybShlKX19LF89XCIke2N9XCIsUD1cIiR7bn1cIjtmdW5jdGlvbiBFKGUpe3ZhciB0PVtdLG49MCxyPWUubWF0Y2gobCk7ciYmKG49ci5sZW5ndGgsZT1lLnJlcGxhY2UobCxfKSx0LnB1c2guYXBwbHkodCxyLm1hcChMLnBhcnNlKSkpO3ZhciBvPWUubWF0Y2goaSk7cmV0dXJuIG8mJihlPWUucmVwbGFjZShpLFApLHQucHVzaC5hcHBseSh0LG8ubWFwKHUucGFyc2UpKSkse3ZhbHVlczp0LG51bUNvbG9yczpuLHRva2VuaXNlZDplfX1mdW5jdGlvbiBqKGUpe3JldHVybiBFKGUpLnZhbHVlc31mdW5jdGlvbiBSKGUpe3ZhciB0PUUoZSksbj10LnZhbHVlcyxyPXQubnVtQ29sb3JzLG89dC50b2tlbmlzZWQsaT1uLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW8sbj0wO248aTtuKyspdD10LnJlcGxhY2UobjxyP186UCxuPHI/TC50cmFuc2Zvcm0oZVtuXSk6YShlW25dKSk7cmV0dXJuIHR9fXZhciBJPWZ1bmN0aW9uKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlPzA6ZX0sVj17dGVzdDpmdW5jdGlvbihlKXt2YXIgdCxuLHIsbztyZXR1cm4gaXNOYU4oZSkmJmMoZSkmJihudWxsIT09KG49bnVsbD09PSh0PWUubWF0Y2goaSkpfHx2b2lkIDA9PT10P3ZvaWQgMDp0Lmxlbmd0aCkmJnZvaWQgMCE9PW4/bjowKSsobnVsbCE9PShvPW51bGw9PT0ocj1lLm1hdGNoKGwpKXx8dm9pZCAwPT09cj92b2lkIDA6ci5sZW5ndGgpJiZ2b2lkIDAhPT1vP286MCk+MH0scGFyc2U6aixjcmVhdGVUcmFuc2Zvcm1lcjpSLGdldEFuaW1hdGFibGVOb25lOmZ1bmN0aW9uKGUpe3ZhciB0PWooZSk7cmV0dXJuIFIoZSkodC5tYXAoSSkpfX0sSD1uZXcgU2V0KFtcImJyaWdodG5lc3NcIixcImNvbnRyYXN0XCIsXCJzYXR1cmF0ZVwiLFwib3BhY2l0eVwiXSk7ZnVuY3Rpb24gQShlKXt2YXIgdD1lLnNsaWNlKDAsLTEpLnNwbGl0KFwiKFwiKSxuPXRbMF0scj10WzFdO2lmKFwiZHJvcC1zaGFkb3dcIj09PW4pcmV0dXJuIGU7dmFyIG89KHIubWF0Y2goaSl8fFtdKVswXTtpZighbylyZXR1cm4gZTt2YXIgYT1yLnJlcGxhY2UobyxcIlwiKSxsPUguaGFzKG4pPzE6MDtyZXR1cm4gbyE9PXImJihsKj0xMDApLG4rXCIoXCIrbCthK1wiKVwifXZhciBUPS8oW2Etei1dKilcXCguKj9cXCkvZyxEPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxWKSx7Z2V0QW5pbWF0YWJsZU5vbmU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5tYXRjaChUKTtyZXR1cm4gdD90Lm1hcChBKS5qb2luKFwiIFwiKTplfX0pO3QuYWxwaGE9ZCx0LmNvbG9yPUwsdC5jb21wbGV4PVYsdC5kZWdyZWVzPWgsdC5maWx0ZXI9RCx0LmhleD1NLHQuaHNsYT14LHQubnVtYmVyPXUsdC5wZXJjZW50PWcsdC5wcm9ncmVzc1BlcmNlbnRhZ2U9dyx0LnB4PXYsdC5yZ2JVbml0PVMsdC5yZ2JhPU8sdC5zY2FsZT1wLHQudmg9Qyx0LnZ3PW19LDgzODg6KGUsdCxuKT0+e24ucih0KSxuLmQodCx7Zm9jdXNhYmxlOigpPT5iLGlzRm9jdXNhYmxlOigpPT5rLGlzVGFiYmFibGU6KCk9PnksdGFiYmFibGU6KCk9Pnd9KTt2YXIgcj1bXCJpbnB1dDpub3QoW2luZXJ0XSlcIixcInNlbGVjdDpub3QoW2luZXJ0XSlcIixcInRleHRhcmVhOm5vdChbaW5lcnRdKVwiLFwiYVtocmVmXTpub3QoW2luZXJ0XSlcIixcImJ1dHRvbjpub3QoW2luZXJ0XSlcIixcIlt0YWJpbmRleF06bm90KHNsb3QpOm5vdChbaW5lcnRdKVwiLFwiYXVkaW9bY29udHJvbHNdOm5vdChbaW5lcnRdKVwiLFwidmlkZW9bY29udHJvbHNdOm5vdChbaW5lcnRdKVwiLCdbY29udGVudGVkaXRhYmxlXTpub3QoW2NvbnRlbnRlZGl0YWJsZT1cImZhbHNlXCJdKTpub3QoW2luZXJ0XSknLFwiZGV0YWlscz5zdW1tYXJ5OmZpcnN0LW9mLXR5cGU6bm90KFtpbmVydF0pXCIsXCJkZXRhaWxzOm5vdChbaW5lcnRdKVwiXSxvPXIuam9pbihcIixcIiksYT1cInVuZGVmaW5lZFwiPT10eXBlb2YgRWxlbWVudCxpPWE/ZnVuY3Rpb24oKXt9OkVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXN8fEVsZW1lbnQucHJvdG90eXBlLm1zTWF0Y2hlc1NlbGVjdG9yfHxFbGVtZW50LnByb3RvdHlwZS53ZWJraXRNYXRjaGVzU2VsZWN0b3IsbD0hYSYmRWxlbWVudC5wcm90b3R5cGUuZ2V0Um9vdE5vZGU/ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIG51bGw9PWV8fG51bGw9PT0odD1lLmdldFJvb3ROb2RlKXx8dm9pZCAwPT09dD92b2lkIDA6dC5jYWxsKGUpfTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT92b2lkIDA6ZS5vd25lckRvY3VtZW50fSxzPWZ1bmN0aW9uIGUodCxuKXt2YXIgcjt2b2lkIDA9PT1uJiYobj0hMCk7dmFyIG89bnVsbD09dHx8bnVsbD09PShyPXQuZ2V0QXR0cmlidXRlKXx8dm9pZCAwPT09cj92b2lkIDA6ci5jYWxsKHQsXCJpbmVydFwiKTtyZXR1cm5cIlwiPT09b3x8XCJ0cnVlXCI9PT1vfHxuJiZ0JiZlKHQucGFyZW50Tm9kZSl9LGM9ZnVuY3Rpb24oZSx0LG4pe2lmKHMoZSkpcmV0dXJuW107dmFyIHI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGUucXVlcnlTZWxlY3RvckFsbChvKSk7cmV0dXJuIHQmJmkuY2FsbChlLG8pJiZyLnVuc2hpZnQoZSksci5maWx0ZXIobil9LHU9ZnVuY3Rpb24gZSh0LG4scil7Zm9yKHZhciBhPVtdLGw9QXJyYXkuZnJvbSh0KTtsLmxlbmd0aDspe3ZhciBjPWwuc2hpZnQoKTtpZighcyhjLCExKSlpZihcIlNMT1RcIj09PWMudGFnTmFtZSl7dmFyIHU9Yy5hc3NpZ25lZEVsZW1lbnRzKCksZD1lKHUubGVuZ3RoP3U6Yy5jaGlsZHJlbiwhMCxyKTtyLmZsYXR0ZW4/YS5wdXNoLmFwcGx5KGEsZCk6YS5wdXNoKHtzY29wZVBhcmVudDpjLGNhbmRpZGF0ZXM6ZH0pfWVsc2V7aS5jYWxsKGMsbykmJnIuZmlsdGVyKGMpJiYobnx8IXQuaW5jbHVkZXMoYykpJiZhLnB1c2goYyk7dmFyIHA9Yy5zaGFkb3dSb290fHxcImZ1bmN0aW9uXCI9PXR5cGVvZiByLmdldFNoYWRvd1Jvb3QmJnIuZ2V0U2hhZG93Um9vdChjKSxmPSFzKHAsITEpJiYoIXIuc2hhZG93Um9vdEZpbHRlcnx8ci5zaGFkb3dSb290RmlsdGVyKGMpKTtpZihwJiZmKXt2YXIgaD1lKCEwPT09cD9jLmNoaWxkcmVuOnAuY2hpbGRyZW4sITAscik7ci5mbGF0dGVuP2EucHVzaC5hcHBseShhLGgpOmEucHVzaCh7c2NvcGVQYXJlbnQ6YyxjYW5kaWRhdGVzOmh9KX1lbHNlIGwudW5zaGlmdC5hcHBseShsLGMuY2hpbGRyZW4pfX1yZXR1cm4gYX0sZD1mdW5jdGlvbihlLHQpe3JldHVybiBlLnRhYkluZGV4PDAmJih0fHwvXihBVURJT3xWSURFT3xERVRBSUxTKSQvLnRlc3QoZS50YWdOYW1lKXx8ZnVuY3Rpb24oZSl7dmFyIHQsbj1udWxsPT1lfHxudWxsPT09KHQ9ZS5nZXRBdHRyaWJ1dGUpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmNhbGwoZSxcImNvbnRlbnRlZGl0YWJsZVwiKTtyZXR1cm5cIlwiPT09bnx8XCJ0cnVlXCI9PT1ufShlKSkmJmlzTmFOKHBhcnNlSW50KGUuZ2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIiksMTApKT8wOmUudGFiSW5kZXh9LHA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50YWJJbmRleD09PXQudGFiSW5kZXg/ZS5kb2N1bWVudE9yZGVyLXQuZG9jdW1lbnRPcmRlcjplLnRhYkluZGV4LXQudGFiSW5kZXh9LGY9ZnVuY3Rpb24oZSl7cmV0dXJuXCJJTlBVVFwiPT09ZS50YWdOYW1lfSxoPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj10LndpZHRoLHI9dC5oZWlnaHQ7cmV0dXJuIDA9PT1uJiYwPT09cn0sZz1mdW5jdGlvbihlLHQpe3JldHVybiEodC5kaXNhYmxlZHx8cyh0KXx8ZnVuY3Rpb24oZSl7cmV0dXJuIGYoZSkmJlwiaGlkZGVuXCI9PT1lLnR5cGV9KHQpfHxmdW5jdGlvbihlLHQpe3ZhciBuPXQuZGlzcGxheUNoZWNrLHI9dC5nZXRTaGFkb3dSb290O2lmKFwiaGlkZGVuXCI9PT1nZXRDb21wdXRlZFN0eWxlKGUpLnZpc2liaWxpdHkpcmV0dXJuITA7dmFyIG89aS5jYWxsKGUsXCJkZXRhaWxzPnN1bW1hcnk6Zmlyc3Qtb2YtdHlwZVwiKT9lLnBhcmVudEVsZW1lbnQ6ZTtpZihpLmNhbGwobyxcImRldGFpbHM6bm90KFtvcGVuXSkgKlwiKSlyZXR1cm4hMDtpZihuJiZcImZ1bGxcIiE9PW4mJlwibGVnYWN5LWZ1bGxcIiE9PW4pe2lmKFwibm9uLXplcm8tYXJlYVwiPT09bilyZXR1cm4gaChlKX1lbHNle2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHIpe2Zvcih2YXIgYT1lO2U7KXt2YXIgcz1lLnBhcmVudEVsZW1lbnQsYz1sKGUpO2lmKHMmJiFzLnNoYWRvd1Jvb3QmJiEwPT09cihzKSlyZXR1cm4gaChlKTtlPWUuYXNzaWduZWRTbG90P2UuYXNzaWduZWRTbG90OnN8fGM9PT1lLm93bmVyRG9jdW1lbnQ/czpjLmhvc3R9ZT1hfWlmKGZ1bmN0aW9uKGUpe3ZhciB0LG4scixvLGE9ZSYmbChlKSxpPW51bGw9PT0odD1hKXx8dm9pZCAwPT09dD92b2lkIDA6dC5ob3N0LHM9ITE7aWYoYSYmYSE9PWUpZm9yKHM9ISEobnVsbCE9PShuPWkpJiZ2b2lkIDAhPT1uJiZudWxsIT09KHI9bi5vd25lckRvY3VtZW50KSYmdm9pZCAwIT09ciYmci5jb250YWlucyhpKXx8bnVsbCE9ZSYmbnVsbCE9PShvPWUub3duZXJEb2N1bWVudCkmJnZvaWQgMCE9PW8mJm8uY29udGFpbnMoZSkpOyFzJiZpOyl7dmFyIGMsdSxkO3M9IShudWxsPT09KHU9aT1udWxsPT09KGM9YT1sKGkpKXx8dm9pZCAwPT09Yz92b2lkIDA6Yy5ob3N0KXx8dm9pZCAwPT09dXx8bnVsbD09PShkPXUub3duZXJEb2N1bWVudCl8fHZvaWQgMD09PWR8fCFkLmNvbnRhaW5zKGkpKX1yZXR1cm4gc30oZSkpcmV0dXJuIWUuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGg7aWYoXCJsZWdhY3ktZnVsbFwiIT09bilyZXR1cm4hMH1yZXR1cm4hMX0odCxlKXx8ZnVuY3Rpb24oZSl7cmV0dXJuXCJERVRBSUxTXCI9PT1lLnRhZ05hbWUmJkFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShlLmNoaWxkcmVuKS5zb21lKChmdW5jdGlvbihlKXtyZXR1cm5cIlNVTU1BUllcIj09PWUudGFnTmFtZX0pKX0odCl8fGZ1bmN0aW9uKGUpe2lmKC9eKElOUFVUfEJVVFRPTnxTRUxFQ1R8VEVYVEFSRUEpJC8udGVzdChlLnRhZ05hbWUpKWZvcih2YXIgdD1lLnBhcmVudEVsZW1lbnQ7dDspe2lmKFwiRklFTERTRVRcIj09PXQudGFnTmFtZSYmdC5kaXNhYmxlZCl7Zm9yKHZhciBuPTA7bjx0LmNoaWxkcmVuLmxlbmd0aDtuKyspe3ZhciByPXQuY2hpbGRyZW4uaXRlbShuKTtpZihcIkxFR0VORFwiPT09ci50YWdOYW1lKXJldHVybiEhaS5jYWxsKHQsXCJmaWVsZHNldFtkaXNhYmxlZF0gKlwiKXx8IXIuY29udGFpbnMoZSl9cmV0dXJuITB9dD10LnBhcmVudEVsZW1lbnR9cmV0dXJuITF9KHQpKX0sdj1mdW5jdGlvbihlLHQpe3JldHVybiEoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBmKGUpJiZcInJhZGlvXCI9PT1lLnR5cGV9KGUpJiYhZnVuY3Rpb24oZSl7aWYoIWUubmFtZSlyZXR1cm4hMDt2YXIgdCxuPWUuZm9ybXx8bChlKSxyPWZ1bmN0aW9uKGUpe3JldHVybiBuLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9XCJyYWRpb1wiXVtuYW1lPVwiJytlKydcIl0nKX07aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmdm9pZCAwIT09d2luZG93LkNTUyYmXCJmdW5jdGlvblwiPT10eXBlb2Ygd2luZG93LkNTUy5lc2NhcGUpdD1yKHdpbmRvdy5DU1MuZXNjYXBlKGUubmFtZSkpO2Vsc2UgdHJ5e3Q9cihlLm5hbWUpfWNhdGNoKGUpe3JldHVybiBjb25zb2xlLmVycm9yKFwiTG9va3MgbGlrZSB5b3UgaGF2ZSBhIHJhZGlvIGJ1dHRvbiB3aXRoIGEgbmFtZSBhdHRyaWJ1dGUgY29udGFpbmluZyBpbnZhbGlkIENTUyBzZWxlY3RvciBjaGFyYWN0ZXJzIGFuZCBuZWVkIHRoZSBDU1MuZXNjYXBlIHBvbHlmaWxsOiAlc1wiLGUubWVzc2FnZSksITF9dmFyIG89ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZihlW25dLmNoZWNrZWQmJmVbbl0uZm9ybT09PXQpcmV0dXJuIGVbbl19KHQsZS5mb3JtKTtyZXR1cm4hb3x8bz09PWV9KGUpfSh0KXx8ZCh0KTwwfHwhZyhlLHQpKX0sQz1mdW5jdGlvbihlKXt2YXIgdD1wYXJzZUludChlLmdldEF0dHJpYnV0ZShcInRhYmluZGV4XCIpLDEwKTtyZXR1cm4hIShpc05hTih0KXx8dD49MCl9LG09ZnVuY3Rpb24gZSh0KXt2YXIgbj1bXSxyPVtdO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQsbyl7dmFyIGE9ISF0LnNjb3BlUGFyZW50LGk9YT90LnNjb3BlUGFyZW50OnQsbD1kKGksYSkscz1hP2UodC5jYW5kaWRhdGVzKTppOzA9PT1sP2E/bi5wdXNoLmFwcGx5KG4scyk6bi5wdXNoKGkpOnIucHVzaCh7ZG9jdW1lbnRPcmRlcjpvLHRhYkluZGV4OmwsaXRlbTp0LGlzU2NvcGU6YSxjb250ZW50OnN9KX0pKSxyLnNvcnQocCkucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiB0LmlzU2NvcGU/ZS5wdXNoLmFwcGx5KGUsdC5jb250ZW50KTplLnB1c2godC5jb250ZW50KSxlfSksW10pLmNvbmNhdChuKX0sdz1mdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBuPSh0PXR8fHt9KS5nZXRTaGFkb3dSb290P3UoW2VdLHQuaW5jbHVkZUNvbnRhaW5lcix7ZmlsdGVyOnYuYmluZChudWxsLHQpLGZsYXR0ZW46ITEsZ2V0U2hhZG93Um9vdDp0LmdldFNoYWRvd1Jvb3Qsc2hhZG93Um9vdEZpbHRlcjpDfSk6YyhlLHQuaW5jbHVkZUNvbnRhaW5lcix2LmJpbmQobnVsbCx0KSksbShuKX0sYj1mdW5jdGlvbihlLHQpe3JldHVybih0PXR8fHt9KS5nZXRTaGFkb3dSb290P3UoW2VdLHQuaW5jbHVkZUNvbnRhaW5lcix7ZmlsdGVyOmcuYmluZChudWxsLHQpLGZsYXR0ZW46ITAsZ2V0U2hhZG93Um9vdDp0LmdldFNoYWRvd1Jvb3R9KTpjKGUsdC5pbmNsdWRlQ29udGFpbmVyLGcuYmluZChudWxsLHQpKX0seT1mdW5jdGlvbihlLHQpe2lmKHQ9dHx8e30sIWUpdGhyb3cgbmV3IEVycm9yKFwiTm8gbm9kZSBwcm92aWRlZFwiKTtyZXR1cm4hMSE9PWkuY2FsbChlLG8pJiZ2KHQsZSl9LHg9ci5jb25jYXQoXCJpZnJhbWVcIikuam9pbihcIixcIiksaz1mdW5jdGlvbihlLHQpe2lmKHQ9dHx8e30sIWUpdGhyb3cgbmV3IEVycm9yKFwiTm8gbm9kZSBwcm92aWRlZFwiKTtyZXR1cm4hMSE9PWkuY2FsbChlLHgpJiZnKHQsZSl9fSw5ODI4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkZvbnRzPXZvaWQgMDtjb25zdCBvPXIobig0NjY4KSksYT1yKG4oNjAzNikpLGk9cihuKDU5NDEpKSxsPXIobigyODEzKSk7dC5Gb250cz17cmVndWxhcjpvLmRlZmF1bHQsaXRhbGljOmEuZGVmYXVsdCxzZW1pQm9sZDppLmRlZmF1bHQsc2VtaUJvbGRJdGFsaWM6bC5kZWZhdWx0fX0sNjIxODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oOTgyOCksdCl9LDQyNDk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5CdXR0b25UZXh0T25seT10LkJ1dHRvblNlY29uZGFyeT10LkJ1dHRvblByaW1hcnk9dC5CdXR0b249dm9pZCAwO2NvbnN0IGE9big1ODkzKSxpPW8obig3NTE4KSksbD1uKDEzMzUpLHM9big5NTA3KSxjPW4oNjEyNik7dC5CdXR0b249ZT0+e3ZhcntsYWJlbDp0LGNoaWxkcmVuOm4sc2l6ZTpvPVwiYmFzZVwiLHNoYXBlOmk9XCJzcXVhcmVcIixraW5kOmw9XCJwcmltYXJ5XCIsbGF5b3V0OnM9XCJmaXRcIixocmVmOmN9PWUscD1yKGUsW1wibGFiZWxcIixcImNoaWxkcmVuXCIsXCJzaXplXCIsXCJzaGFwZVwiLFwia2luZFwiLFwibGF5b3V0XCIsXCJocmVmXCJdKTtyZXR1cm4oMCxhLmpzeCkodSxPYmplY3QuYXNzaWduKHthczpjP1wiYVwiOlwiYnV0dG9uXCIsc2l6ZTpvLHNoYXBlOmksa2luZDpsLGxheW91dDpzfSxwLHtjaGlsZHJlbjp0PygwLGEuanN4KShkLE9iamVjdC5hc3NpZ24oe2FsaWduSXRlbXM6XCJjZW50ZXJcIixqdXN0aWZ5Q29udGVudDpcImNlbnRlclwifSx7Y2hpbGRyZW46dH0pKTpufSkpfTtjb25zdCB1PWkuZGVmYXVsdC5idXR0b25gXG4gIC8qIERlZmF1bHQgdmFsdWVzIHRoYXQgZ2V0IG92ZXJyaWRkZW4gYnkgdmFyaWFudHMgKi9cbiAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0QmFja2dyb3VuZH07XG4gIGJvcmRlcjogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dEJhY2tncm91bmR9O1xuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kUHJpbWFyeVRleHR9O1xuXG4gIC8qIEluamVjdCB2YXJpYW50cyAqL1xuICAkeygwLHMuZ2V0VmFyaWFudENTUykoYy52YXJpYW50cyxjLlZhcmlhbnQuc2l6ZSl9XG4gICR7KDAscy5nZXRWYXJpYW50Q1NTKShjLnZhcmlhbnRzLGMuVmFyaWFudC5zaGFwZSl9XG4gICR7KDAscy5nZXRWYXJpYW50Q1NTKShjLnZhcmlhbnRzLGMuVmFyaWFudC5raW5kKX1cbiAgJHsoMCxzLmdldFZhcmlhbnRDU1MpKGMudmFyaWFudHMsYy5WYXJpYW50LmxheW91dCl9XG5cbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG4gIG91dGxpbmU6IG5vbmU7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgbGluZS1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUubGluZUhlaWdodC51aX07XG4gIGZvbnQtd2VpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRXZWlnaHQuYm9sZH07XG4gIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciB2YXIoLS1vcGVuZmluLXVpLWdsb2JhbFRyYW5zaXRpb24pO1xuXG4gICY6bm90KDpkaXNhYmxlZCkge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxuXG4gICY6ZGlzYWJsZWQsXG4gICY6YWN0aXZlOmRpc2FibGVkIHtcbiAgICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXREaXNhYmxlZH07XG4gICAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXREaXNhYmxlZH07XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dFBsYWNlaG9sZGVyfTtcbiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICB9XG5gLGQ9KDAsaS5kZWZhdWx0KShsLkJveClgXG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAwICR7ZS5weC54c21hbGx9YH07XG5gO3QuQnV0dG9uUHJpbWFyeT1lPT4oMCxhLmpzeCkodC5CdXR0b24sT2JqZWN0LmFzc2lnbih7fSxlLHtraW5kOlwicHJpbWFyeVwifSkpLHQuQnV0dG9uU2Vjb25kYXJ5PWU9PigwLGEuanN4KSh0LkJ1dHRvbixPYmplY3QuYXNzaWduKHt9LGUse2tpbmQ6XCJzZWNvbmRhcnlcIn0pKSx0LkJ1dHRvblRleHRPbmx5PWU9PigwLGEuanN4KSh0LkJ1dHRvbixPYmplY3QuYXNzaWduKHt9LGUse2tpbmQ6XCJ0ZXh0T25seVwifSkpfSw2MTI2OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnZhcmlhbnRzPXQuQnV0dG9uU2hhcGU9dC5CdXR0b25MYXlvdXQ9dC5CdXR0b25TaXplPXQuQnV0dG9uS2luZD10LlZhcmlhbnQ9dm9pZCAwO2NvbnN0IHI9big3NTE4KTt0LlZhcmlhbnQ9e3NoYXBlOlwic2hhcGVcIixzaXplOlwic2l6ZVwiLGtpbmQ6XCJraW5kXCIsbGF5b3V0OlwibGF5b3V0XCJ9LHQuQnV0dG9uS2luZD17cHJpbWFyeTpcInByaW1hcnlcIixzZWNvbmRhcnk6XCJzZWNvbmRhcnlcIix0ZXh0T25seTpcInRleHRPbmx5XCJ9LHQuQnV0dG9uU2l6ZT17c21hbGw6XCJzbWFsbFwiLGJhc2U6XCJiYXNlXCIsbGFyZ2U6XCJsYXJnZVwifSx0LkJ1dHRvbkxheW91dD17Zml0OlwiZml0XCIsZnVsbDpcImZ1bGxcIn0sdC5CdXR0b25TaGFwZT17c3F1YXJlOlwic3F1YXJlXCIscGlsbDpcInBpbGxcIn0sdC52YXJpYW50cz17W3QuVmFyaWFudC5zaXplXTp7W3QuQnV0dG9uU2l6ZS5iYXNlXTpyLmNzc2BcbiAgICAgIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAke2UucHguc21hbGx9ICR7ZS5weC5sYXJnZX1gfTtcbiAgICAgIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5iYXNlfTtcbiAgICBgLFt0LkJ1dHRvblNpemUuc21hbGxdOnIuY3NzYFxuICAgICAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YCR7ZS5weC54c21hbGx9ICR7ZS5weC5iYXNlfWB9O1xuICAgICAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLnNtYWxsfTtcbiAgICBgLFt0LkJ1dHRvblNpemUubGFyZ2VdOnIuY3NzYFxuICAgICAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YCR7ZS5weC5iYXNlfSAke2UucHgueGxhcmdlfWB9O1xuICAgICAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmxhcmdlfTtcbiAgICBgfSxbdC5WYXJpYW50LnNoYXBlXTp7W3QuQnV0dG9uU2hhcGUuc3F1YXJlXTpyLmNzc2BcbiAgICAgIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbiAgICBgLFt0LkJ1dHRvblNoYXBlLnBpbGxdOnIuY3NzYFxuICAgICAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMucGlsbH07XG4gICAgYH0sW3QuVmFyaWFudC5sYXlvdXRdOntbdC5CdXR0b25MYXlvdXQuZml0XTpyLmNzc2BcbiAgICAgIHdpZHRoOiBmaXQtY29udGVudDtcbiAgICBgLFt0LkJ1dHRvbkxheW91dC5mdWxsXTpyLmNzc2BcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIGB9LFt0LlZhcmlhbnQua2luZF06e1t0LkJ1dHRvbktpbmQucHJpbWFyeV06ci5jc3NgXG4gICAgICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5fTtcbiAgICAgIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kUHJpbWFyeX07XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5SG92ZXJ9O1xuICAgICAgfVxuXG4gICAgICAmOmFjdGl2ZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFByaW1hcnlBY3RpdmV9O1xuICAgICAgfVxuXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5Rm9jdXNlZH07XG4gICAgICB9XG4gICAgYCxbdC5CdXR0b25LaW5kLnNlY29uZGFyeV06ci5jc3NgXG4gICAgICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRTZWNvbmRhcnl9O1xuICAgICAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRTZWNvbmRhcnl9O1xuICAgICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFNlY29uZGFyeVRleHR9O1xuXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kU2Vjb25kYXJ5SG92ZXJ9O1xuICAgICAgfVxuXG4gICAgICAmOmFjdGl2ZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFNlY29uZGFyeUFjdGl2ZX07XG4gICAgICB9XG5cbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFNlY29uZGFyeUZvY3VzZWR9O1xuICAgICAgfVxuICAgIGAsW3QuQnV0dG9uS2luZC50ZXh0T25seV06ci5jc3NgXG4gICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcblxuICAgICAgJjphY3RpdmUge1xuICAgICAgICBvcGFjaXR5OiAwLjg7XG4gICAgICB9XG5cbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dEZvY3VzZWR9O1xuICAgICAgfVxuICAgIGB9fX0sNDEzMDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oNDI0OSksdCksbyhuKDYxMjYpLHQpfSwzOTExOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNhcmRDb250YWluZXI9dm9pZCAwO2NvbnN0IG89big1ODkzKSxhPXIobig3NTE4KSksaT1uKDk1MDcpLGw9bigxMzM1KTt0LkNhcmRDb250YWluZXI9ZT0+KDAsby5qc3gpKHMsT2JqZWN0LmFzc2lnbih7c3R5bGU6e21heEhlaWdodDplLm1heEhlaWdodCxvdmVyZmxvd1k6XCJhdXRvXCJ9LGlkOlwiY2FyZC1jb250YWluZXJcIixcImRhdGEtdGVzdGlkXCI6XCJjYXJkLWNvbnRhaW5lclwifSx7Y2hpbGRyZW46KDAsby5qc3gpKGMse2NoaWxkcmVuOmUuY2hpbGRyZW59KX0pKTtjb25zdCBzPSgwLGEuZGVmYXVsdCkobC5Cb3gpYFxuICBkaXNwbGF5OiBibG9jaztcbiAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQzfTtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNX07XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmUucHgueHNtYWxsfSAkeyh7dGhlbWU6ZX0pPT5lLnB4LnhzbWFsbH1cbiAgICAkeyh7dGhlbWU6ZX0pPT5lLnB4LmxhcmdlfSAwcHg7XG4gIHdpZHRoOiAxMDAlO1xuICAke2kuTWl4aW5zLnNjcm9sbGJhci5iYXNlfTtcbiAgZ2FwOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuYCxjPWEuZGVmYXVsdC5kaXZgXG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9IDBweFxuICAgICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG4gIHdpZHRoOiAxMDAlO1xuYH0sMTI0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNvbGxhcHNpYmxlQ2FyZFN0YXRlbGVzcz10LkNvbGxhcHNpYmxlQ2FyZD12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGE9big2Njg5KSxpPXIobig3NTE4KSksbD1uKDMxMzYpLHM9big5NjM0KSxjPW4oMTMzNSksdT1uKDM5MTEpLGQ9big3NzY5KSxwPW4oOTUwNyk7dC5Db2xsYXBzaWJsZUNhcmQ9KDAsYS5mb3J3YXJkUmVmKSgoKGUsbik9Pntjb25zdFtyLGldPSgwLGEudXNlU3RhdGUpKGUuZXhwYW5kZWR8fCExKTtyZXR1cm4oMCxvLmpzeCkodC5Db2xsYXBzaWJsZUNhcmRTdGF0ZWxlc3MsT2JqZWN0LmFzc2lnbih7fSxlLHtyZWY6bixleHBhbmRlZDpyLG9uRXhwYW5kOmU9PmkoIWUpfSkpfSkpLHQuQ29sbGFwc2libGVDYXJkLmRpc3BsYXlOYW1lPVwiQ29sbGFwc2libGVDYXJkXCIsdC5Db2xsYXBzaWJsZUNhcmRTdGF0ZWxlc3M9KDAsYS5mb3J3YXJkUmVmKSgoKGUsdCk9Pnt2YXIgbixyO3JldHVybigwLG8uanN4cykoZixPYmplY3QuYXNzaWduKHtcImRhdGEtdGVzdGlkXCI6XCJjb2xsYXBzaWJsZS1jYXJkXCJ9LHtjaGlsZHJlbjpbKDAsby5qc3hzKShnLE9iamVjdC5hc3NpZ24oe1wiYXJpYS1leHBhbmRlZFwiOmUuZXhwYW5kZWQsXCJkYXRhLXRlc3RpZFwiOlwiaGVhZGluZy1jb250YWluZXJcIixyZWY6dCx6SW5kZXg6bnVsbD09PShuPWUuaGVhZGVyU2V0dGluZ3MpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLnpJbmRleCxmaXhlZEhlYWRlcjpudWxsPT09KHI9ZS5oZWFkZXJTZXR0aW5ncyl8fHZvaWQgMD09PXI/dm9pZCAwOnIuZml4ZWRIZWFkZXIsb25DbGljazooKT0+ZS5vbkV4cGFuZChlLmV4cGFuZGVkKSx0YWJJbmRleDowLG9uS2V5RG93bjp0PT57c3dpdGNoKHQuY29kZSl7Y2FzZVwiRW50ZXJcIjpjYXNlXCJTcGFjZVwiOnQucHJldmVudERlZmF1bHQoKSxlLm9uRXhwYW5kKGUuZXhwYW5kZWQpfX19LHtjaGlsZHJlbjpbKDAsby5qc3gpKGgse2NoaWxkcmVuOmUudGl0bGV9KSwoMCxvLmpzeHMpKFwiZGl2XCIsT2JqZWN0LmFzc2lnbih7aWQ6XCJpY29uLWNvbnRhaW5lclwifSx7Y2hpbGRyZW46W3ZvaWQgMCE9PWUuYmFkZ2VUZXh0JiYoMCxvLmpzeCkobC5CYWRnZSx7Y291bnQ6ZS5iYWRnZVRleHQsaWQ6XCJjb2xsYXBzaWJsZS1jYXJkLWhlYWRpbmctYmFkZ2VcIixcImRhdGEtdGVzdGlkXCI6XCJjb2xsYXBzaWJsZS1jYXJkLWhlYWRpbmctYmFkZ2VcIn0pLCgwLG8uanN4KShzLkljb24se2ljb246ZS5leHBhbmRlZD9cIkNoZXZyb25VcEljb25cIjpcIkNoZXZyb25Eb3duSWNvblwifSldfSkpXX0pKSxlLmV4cGFuZGVkJiYoMCxvLmpzeCkodS5DYXJkQ29udGFpbmVyLE9iamVjdC5hc3NpZ24oe21heEhlaWdodDplLm1heEhlaWdodHx8XCJub25lXCJ9LHtjaGlsZHJlbjooMCxvLmpzeCkoXCJkaXZcIix7Y2hpbGRyZW46ZS5jaGlsZHJlbn0pfSkpXX0pKX0pKSx0LkNvbGxhcHNpYmxlQ2FyZFN0YXRlbGVzcy5kaXNwbGF5TmFtZT1cIkNvbGxhcHNpYmxlQ2FyZFN0YXRlbGVzc1wiO2NvbnN0IGY9aS5kZWZhdWx0LmRpdmBcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAxMDAlO1xuYCxoPSgwLGkuZGVmYXVsdCkoZC5UZXh0KWBcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gICR7cC5NaXhpbnMudGV4dE92ZXJmbG93fTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBkaXNwbGF5OiBibG9jaztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbmAsZz0oMCxpLmRlZmF1bHQpKGMuQm94KWBcbiAgcG9zaXRpb246ICR7KHtmaXhlZEhlYWRlcjplfSk9PmU/XCJzdGlja3lcIjpcInJlbGF0aXZlXCJ9O1xuICB0b3A6ICR7KHtmaXhlZEhlYWRlcjplfSk9PmU/MDp2b2lkIDB9O1xuICB6LWluZGV4OiAkeyh7ekluZGV4OmV9KT0+ZX07XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kM307XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDV9O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ1fTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgZ2FwOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBsaW5lLWhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5saW5lSGVpZ2h0LmhlYWRpbmd9O1xuICBvdXRsaW5lOiBub25lO1xuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgdmFyKC0tb3BlbmZpbi11aS1nbG9iYWxUcmFuc2l0aW9uKTtcbiAgd2lkdGg6IDEwMCU7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgI2ljb24tY29udGFpbmVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgbWFyZ2luLWxlZnQ6IDEwcHg7XG4gIH1cblxuICAjY29sbGFwc2libGUtY2FyZC1oZWFkaW5nLWJhZGdlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5fTtcbiAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7XG4gIH1cblxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDJ9O1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDV9O1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDV9O1xuICB9XG5cbiAgJjpmb2N1cyB7XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5ib3JkZXJOZXV0cmFsfTtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJvcmRlck5ldXRyYWx9O1xuICB9XG5gfSw3NDAxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obigxMjQpLHQpfSw5NjQ0OihlLHQpPT57dmFyIG47T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5FeHBhbmREaXJlY3Rpb249dm9pZCAwLChuPXQuRXhwYW5kRGlyZWN0aW9ufHwodC5FeHBhbmREaXJlY3Rpb249e30pKVtuLlVwPTBdPVwiVXBcIixuW24uRG93bj0xXT1cIkRvd25cIn0sNDAyMTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5FeHBhbmRhYmxlQnV0dG9uPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksYT1uKDY2ODkpLGk9big0MTMwKSxsPXIobig3NTE4KSkscz1uKDk2MzQpLGM9big5MTQxKSx1PW4oMzAzMCksZD1uKDEzMzUpLHA9big5NjQ0KTt0LkV4cGFuZGFibGVCdXR0b249ZT0+e3ZhciB0LG4scixsLHMsZjtjb25zdFtiLHldPSgwLGEudXNlU3RhdGUpKHtzaG93OiExLHJlcXVlc3RlZEJ5Q29sbGFwc2U6ITF9KSx4PXtzaXplOmUuc2l6ZSxraW5kOmUua2luZCxkaXNhYmxlZDplLmRpc2FibGVkLHRhYkluZGV4OmUudGFiSW5kZXh9LGs9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtzaGFwZTppLkJ1dHRvblNoYXBlLnNxdWFyZSxcImFyaWEtbGFiZWxcIjpudWxsIT09KHQ9ZVtcImFyaWEtbGFiZWxcIl0pJiZ2b2lkIDAhPT10P3Q6YFByaW1hcnkgQnV0dG9uICR7ZS50aXRsZX1gfSksUz1udWxsIT09KG49ZS5leHBhbmREaXJlY3Rpb24pJiZ2b2lkIDAhPT1uP246cC5FeHBhbmREaXJlY3Rpb24uRG93bjtyZXR1cm4oMCxhLnVzZUVmZmVjdCkoKCgpPT57aWYoIWIucmVxdWVzdGVkQnlDb2xsYXBzZSlyZXR1cm47Y29uc3QgZT1zZXRUaW1lb3V0KCgoKT0+eSh7cmVxdWVzdGVkQnlDb2xsYXBzZTohMSxzaG93OiExfSkpLDIwMCk7cmV0dXJuKCk9PmNsZWFyVGltZW91dChlKX0pLFtiLnJlcXVlc3RlZEJ5Q29sbGFwc2VdKSwoMCxvLmpzeHMpKHcse2NoaWxkcmVuOlsoMCxvLmpzeHMpKG0se2NoaWxkcmVuOlsoMCxvLmpzeCkoZyxPYmplY3QuYXNzaWduKHt9LGsse2NoaWxkcmVuOigwLG8uanN4KSh2LHtjaGlsZHJlbjpudWxsIT09KHI9ZS5jaGlsZHJlbikmJnZvaWQgMCE9PXI/cjprLnRpdGxlfSl9KSksZS5zZWNvbmRhcnlCdXR0b25zJiZlLnNlY29uZGFyeUJ1dHRvbnMubGVuZ3RoPjAmJigwLG8uanN4KShkLkJveCxPYmplY3QuYXNzaWduKHtpZDpcImRyb3Bkb3duLWNvbnRhaW5lclwifSx7Y2hpbGRyZW46KDAsby5qc3hzKShDLE9iamVjdC5hc3NpZ24oe30seCx7cm9sZTpcImNvbWJvYm94XCIsb25DbGljazooKT0+e2IucmVxdWVzdGVkQnlDb2xsYXBzZXx8eSh7cmVxdWVzdGVkQnlDb2xsYXBzZTohMSxzaG93OiFiLnNob3d9KX0sXCJhcmlhLWxhYmVsXCI6XCJFeHBhbmQgU2Vjb25kYXJ5IEJ1dHRvbnMgUGFuZWxcIixcImFyaWEtZXhwYW5kZWRcIjpiLnNob3d9LHtjaGlsZHJlbjpbUz09PXAuRXhwYW5kRGlyZWN0aW9uLkRvd24mJigwLG8uanN4KShoLHtraW5kOm51bGwhPT0obD1lLmtpbmQpJiZ2b2lkIDAhPT1sP2w6aS5CdXR0b25LaW5kLnByaW1hcnksaWNvbjpcIkNhcmV0RG93bkljb25cIn0pLFM9PT1wLkV4cGFuZERpcmVjdGlvbi5VcCYmKDAsby5qc3gpKGgse2tpbmQ6bnVsbCE9PShzPWUua2luZCkmJnZvaWQgMCE9PXM/czppLkJ1dHRvbktpbmQucHJpbWFyeSxpY29uOlwiQ2FyZXRVcEljb25cIn0pXX0pKX0pKV19KSxlLnNlY29uZGFyeUJ1dHRvbnMmJmUuc2Vjb25kYXJ5QnV0dG9ucy5sZW5ndGg+MCYmKDAsby5qc3gpKGMuQW5pbWF0ZVByZXNlbmNlLHtjaGlsZHJlbjpiLnNob3cmJigwLG8uanN4KSh1LkV4cGFuZGFibGVQYW5lbCx7ZXhwYW5kRGlyZWN0aW9uOlMsc2Vjb25kYXJ5QnV0dG9uczpudWxsIT09KGY9ZS5zZWNvbmRhcnlCdXR0b25zKSYmdm9pZCAwIT09Zj9mOltdLHN0cmV0Y2g6ZS5zdHJldGNoRXhwYW5kYWJsZVBhbmVsLGNsb3NlUGFuZWxPblNlY29uZGFyeUJ1dHRvbkNsaWNrOmUuY2xvc2VQYW5lbE9uU2Vjb25kYXJ5QnV0dG9uQ2xpY2ssb25Db2xsYXBzZVJlcXVlc3Q6KCk9Pnkoe3Nob3c6ITEscmVxdWVzdGVkQnlDb2xsYXBzZTohMH0pLGJ1dHRvblNpemU6ZS5zaXplLGRvY3VtZW50OmUuZG9jdW1lbnR9KX0pXX0pfTtjb25zdCBmPXtbaS5CdXR0b25LaW5kLnByaW1hcnldOmU9PmUucGFsZXR0ZS5icmFuZFByaW1hcnlUZXh0LFtpLkJ1dHRvbktpbmQuc2Vjb25kYXJ5XTplPT5lLnBhbGV0dGUuYnJhbmRTZWNvbmRhcnlUZXh0LFtpLkJ1dHRvbktpbmQudGV4dE9ubHldOmU9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH0saD0oMCxsLmRlZmF1bHQpKHMuSWNvbilgXG4gIHN2ZyBwYXRoIHtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmUsa2luZDp0fSk9PmZbdF0oZSl9O1xuICB9XG4gIGxpbmUtaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmxpbmVIZWlnaHQudWl9O1xuICBmb250LXdlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5mb250V2VpZ2h0LmJvbGR9O1xuYCxnPSgwLGwuZGVmYXVsdCkoaS5CdXR0b24pYFxuICBtYXJnaW4tcmlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHgueHNtYWxsfTtcbmAsdj0oMCxsLmRlZmF1bHQpKGQuQm94KWBcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuYCxDPSgwLGwuZGVmYXVsdCkoaS5CdXR0b24pYFxuICB3aWR0aDogJHtlPT5lLnRoZW1lLnB4Lnh4bGFyZ2V9O1xuICBwYWRkaW5nOiAwO1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbmAsbT1sLmRlZmF1bHQuZGl2YFxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuYCx3PWwuZGVmYXVsdC5kaXZgXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuYH0sMjEyODooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5zZXR1cEV4cGFuZGFibGVQYW5lbD12b2lkIDA7Y29uc3Qgcj1uKDk2NDQpO3Quc2V0dXBFeHBhbmRhYmxlUGFuZWw9KGUsdCxuPSExKT0+e2lmKCFlfHwwPT09ZS5jaGlsZE5vZGVzLmxlbmd0aClyZXR1cm47Y29uc3Qgbz1lLnBhcmVudEVsZW1lbnQsYT1udWxsPT1vP3ZvaWQgMDpvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZighYSlyZXR1cm47Y29uc3QgbD1pLmhlaWdodCxzPWkud2lkdGg8PWEud2lkdGh8fG4/aS53aWR0aDphLndpZHRoLGM9YS54K3M+ZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aHx8czxhLndpZHRoO2Uuc3R5bGUud2lkdGg9YCR7c31weGAsZS5zdHlsZS5vcGFjaXR5PVwiMVwiLGM/ZS5zdHlsZS5yaWdodD1cIjBweFwiOmUuc3R5bGUubGVmdD1cIjBweFwiLHQ9PT1yLkV4cGFuZERpcmVjdGlvbi5Eb3duJiYoZS5zdHlsZS50b3A9YCR7YS5oZWlnaHR9cHhgKSx0PT09ci5FeHBhbmREaXJlY3Rpb24uVXAmJihlLnN0eWxlLnRvcD0tMSpsK1wicHhcIil9fSwzMDMwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkV4cGFuZGFibGVQYW5lbD12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGE9cihuKDc1MTgpKSxpPW4oOTE0MSksbD1uKDQxMzApLHM9bigxMzM1KSxjPW4oMjEyOCksdT1yKG4oNDQ4MykpLGQ9e3R5cGU6XCJzcHJpbmdcIixkdXJhdGlvbjouMixib3VuY2U6LjI1fTt0LkV4cGFuZGFibGVQYW5lbD1lPT57dmFyIHQ7Y29uc3Qgbj1gJHtlLnBhbmVsSWR9LWV4cGFuZGFibGUtcGFuZWxgO3JldHVybigwLG8uanN4KSh1LmRlZmF1bHQsT2JqZWN0LmFzc2lnbih7Zm9jdXNUcmFwT3B0aW9uczp7ZmFsbGJhY2tGb2N1czpgIyR7bn1gLGNsaWNrT3V0c2lkZURlYWN0aXZhdGVzOiEwLG9uRGVhY3RpdmF0ZTplLm9uQ29sbGFwc2VSZXF1ZXN0LGluaXRpYWxGb2N1czohMSxkb2N1bWVudDplLmRvY3VtZW50LHJldHVybkZvY3VzT25EZWFjdGl2YXRlOiExfX0se2NoaWxkcmVuOigwLG8uanN4KShoLE9iamVjdC5hc3NpZ24oe3JlZjp0PT4oMCxjLnNldHVwRXhwYW5kYWJsZVBhbmVsKSh0LGUuZXhwYW5kRGlyZWN0aW9uLGUuc3RyZXRjaCksdGFiSW5kZXg6MCxpZDpuLGluaXRpYWw6XCJpbml0aWFsXCIsZXhpdDpcImhpZGRlblwiLGJ1dHRvblNpemU6bnVsbCE9PSh0PWUuYnV0dG9uU2l6ZSkmJnZvaWQgMCE9PXQ/dDpsLkJ1dHRvblNpemUuYmFzZSxhbmltYXRlOlwidmlzaWJsZVwiLHJvbGU6XCJtZW51XCIsdHJhbnNpdGlvbjpkLG9uTW91c2VPdmVyOigpPT57dmFyIGU7cmV0dXJuIG51bGw9PT0oZT1kb2N1bWVudC5hY3RpdmVFbGVtZW50KXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5ibHVyKCl9fSx7Y2hpbGRyZW46ZS5zZWNvbmRhcnlCdXR0b25zLm1hcCgoKHQsbik9PigwLG8uanN4KShsLkJ1dHRvbixPYmplY3QuYXNzaWduKHtjbGFzc05hbWU6XCJtZW51LWl0ZW1cIix0YWJJbmRleDpuKzEsdGl0bGU6dC50aXRsZSxyb2xlOlwibWVudWl0ZW1cIixzaXplOmUuYnV0dG9uU2l6ZSxkaXNhYmxlZDp0LmRpc2FibGVkLGtpbmQ6XCJ0ZXh0T25seVwiLG9uQ2xpY2s6bj0+KCh0LG4pPT57ZS5jbG9zZVBhbmVsT25TZWNvbmRhcnlCdXR0b25DbGljaz8obi5vbkNsaWNrKHQpLGUub25Db2xsYXBzZVJlcXVlc3QoKSk6bi5vbkNsaWNrKHQsKCgpPT5lLm9uQ29sbGFwc2VSZXF1ZXN0KCkpKX0pKG4sdCksXCJhcmlhLWxhYmVsXCI6dC50aXRsZX0se2NoaWxkcmVuOigwLG8uanN4KShwLE9iamVjdC5hc3NpZ24oe1wiYXJpYS1sYWJlbFwiOnQudGl0bGV9LHtjaGlsZHJlbjp0LnRpdGxlfSkpfSksbikpKX0pLFwiZXhwYW5kYWJsZVBhbmVsXCIpfSkpfTtjb25zdCBwPSgwLGEuZGVmYXVsdCkocy5Cb3gpYFxuICBwYWRkaW5nLWJvdHRvbTogMXB4O1xuICBwYWRkaW5nLXRvcDogMXB4O1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgZGlzcGxheTogYmxvY2s7XG4gIG92ZXJmbG93OiBoaWRkZW47XG5gLGY9e1tsLkJ1dHRvblNpemUuc21hbGxdOmU9PmUucHguc21hbGwsW2wuQnV0dG9uU2l6ZS5iYXNlXTplPT5lLnB4LmJhc2UsW2wuQnV0dG9uU2l6ZS5sYXJnZV06ZT0+ZS5weC5sYXJnZX0saD0oMCxhLmRlZmF1bHQpKGkubW90aW9uLmRpdilgXG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbiAgb3BhY2l0eTogMDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206ICR7ZT0+ZS50aGVtZS5weC54eHhsYXJnZX07XG4gIG1heC13aWR0aDogbWF4LWNvbnRlbnQ7XG4gIG1pbi13aWR0aDogODBweDtcbiAgYmFja2dyb3VuZDogJHtlPT5lLnRoZW1lLnBhbGV0dGUuYmFja2dyb3VuZDR9O1xuICBib3gtc2hhZG93OiAke2U9PmUudGhlbWUuc2hhZG93LmJhc2V9O1xuICBoZWlnaHQ6IG1heC1jb250ZW50O1xuICB6LWluZGV4OiAxMDA7XG5cbiAgLm1lbnUtaXRlbSB7XG4gICAgYm9yZGVyLXJhZGl1czogdW5zZXQ7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICBib3JkZXI6IHRyYW5zcGFyZW50O1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG92ZXJmbG93OiBjbGlwO1xuICAgICYgPiAqIHtcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgfVxuICAgIGZvbnQtd2VpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRXZWlnaHQubm9ybWFsfTtcbiAgICBwYWRkaW5nLXRvcDogJHsoe3RoZW1lOmUsYnV0dG9uU2l6ZTp0fSk9PmZbdF0oZSl9O1xuICAgIHBhZGRpbmctYm90dG9tOiAkeyh7dGhlbWU6ZSxidXR0b25TaXplOnR9KT0+Zlt0XShlKX07XG4gICAgcGFkZGluZy1sZWZ0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcblxuICAgIDpmaXJzdC1jaGlsZCB7XG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMuc21hbGx9O1xuICAgIH1cblxuICAgIDpsYXN0LWNoaWxkIHtcbiAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG4gICAgfVxuXG4gICAgJjpmb2N1cyxcbiAgICAmOmhvdmVyIHtcbiAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgYmFja2dyb3VuZDogJHtlPT5lLnRoZW1lLnBhbGV0dGUuYmFja2dyb3VuZDJ9O1xuICAgIH1cblxuICAgICY6ZGlzYWJsZWQsXG4gICAgJjphY3RpdmU6ZGlzYWJsZWQge1xuICAgICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0SW5hY3RpdmV9O1xuICAgICAgYmFja2dyb3VuZDogJHtlPT5lLnRoZW1lLnBhbGV0dGUuYmFja2dyb3VuZDR9O1xuICAgICAgb3BhY2l0eTogdW5zZXQ7XG4gICAgfVxuICB9XG5gfSw0OTI1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig0MDIxKSx0KSxvKG4oOTY0NCksdCl9LDk2NTQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ29udGVudE1lbnU9dC5maW5kUGF0aFRvSXRlbVdpdGhJZD12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGE9big2Njg5KSxpPW4oMzEzNyksbD1yKG4oNzUxOCkpLHM9bigxMzM1KTt0LmZpbmRQYXRoVG9JdGVtV2l0aElkPShlLG4scik9PntpZihlLmlkPT09cilyZXR1cm4gbjtpZihlLmNoaWxkcmVuKWZvcihsZXQgbz0wO288ZS5jaGlsZHJlbi5sZW5ndGg7KytvKXtjb25zdCBhPWUuY2hpbGRyZW5bb107bi5wdXNoKGEuaWQpO2NvbnN0IGk9KDAsdC5maW5kUGF0aFRvSXRlbVdpdGhJZCkoYSxuLHIpO2lmKGkpcmV0dXJuIGk7bi5wb3AoKX19LHQuQ29udGVudE1lbnU9KHtzdHJ1Y3R1cmU6ZSxoYW5kbGVDbGlja0l0ZW06bixoYW5kbGVCb29rbWFya0l0ZW06cix0YXJnZXRJZDpsfSk9Pntjb25zdFtzLHVdPSgwLGEudXNlU3RhdGUpKFtdKSxbZCxwXT0oMCxhLnVzZVN0YXRlKSgpLGY9KDAsYS51c2VSZWYpKG51bGwpLGg9KDAsYS51c2VDYWxsYmFjaykoKCgpPT57Zi5jdXJyZW50JiZmLmN1cnJlbnQuc2Nyb2xsVG8oe2xlZnQ6Zi5jdXJyZW50LnNjcm9sbFdpZHRoLGJlaGF2aW9yOlwic21vb3RoXCJ9KX0pLFtdKTtyZXR1cm4oMCxhLnVzZUVmZmVjdCkoKCgpPT57aWYobCl7Y29uc3Qgbj0oMCx0LmZpbmRQYXRoVG9JdGVtV2l0aElkKSh7aWQ6XCJcIixjaGlsZHJlbjplfSxbXSxsKTtpZihuKXJldHVybiB1KG4pLHZvaWQgcChgY29udGVudC1tZW51LWl0ZW0tJHtsfWApfXAodm9pZCAwKX0pLFtsXSksKDAsYS51c2VFZmZlY3QpKCgoKT0+e2goKX0pLFtzXSksKDAsby5qc3gpKGMsT2JqZWN0LmFzc2lnbih7cmVmOmZ9LHtjaGlsZHJlbjooMCxvLmpzeCkoaS5Db250ZW50TWVudUNvbHVtbix7ZW50cmllczplLGRlcHRoOjAscGF0aDpzLHRhcmdldEl0ZW1JZDpkLHNldEN1cnJlbnRseVNlbGVjdGVkUGF0aDp1LGhhbmRsZUNsaWNrSXRlbTpuLGhhbmRsZUJvb2ttYXJrSXRlbTpyfSl9KSl9O2NvbnN0IGM9KDAsbC5kZWZhdWx0KShzLkJveClgXG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDEwMCU7XG5cbiAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQxfTtcbiAgZGlzcGxheTogZmxleDtcblxuICBvdmVyZmxvdy14OiBhdXRvO1xuICBvdmVyZmxvdy15OiBoaWRkZW47XG5gfSwzMTM3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNvbnRlbnRNZW51Q29sdW1uPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksYT1yKG4oNzUxOCkpLGk9big2NzU4KSxsPW4oNjY4OSkscz1uKDI2NTkpO3QuQ29udGVudE1lbnVDb2x1bW49KHtlbnRyaWVzOmUsZGVwdGg6bixwYXRoOnIsdGFyZ2V0SXRlbUlkOmEsc2V0Q3VycmVudGx5U2VsZWN0ZWRQYXRoOmksaGFuZGxlQ2xpY2tJdGVtOmQsaGFuZGxlQm9va21hcmtJdGVtOnB9KT0+e2NvbnN0IGY9KDAsbC51c2VSZWYpKG51bGwpLGg9cltuXSxnPWg/ZS5maW5kKChlPT5lLmlkPT09aCkpOnZvaWQgMDsoMCxsLnVzZUVmZmVjdCkoKCgpPT57aWYoYSYmZyl7Y29uc3QgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChgY29udGVudC1tZW51LWl0ZW0tJHtnLmlkfWApO2lmKGUmJmYuY3VycmVudCl7Y29uc3QgdD1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcC1mLmN1cnJlbnQuY2hpbGRyZW5bMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO2YuY3VycmVudC5zY3JvbGxUbyh7dG9wOnQsYmVoYXZpb3I6XCJzbW9vdGhcIn0pfX19KSxbYV0pO2NvbnN0IHY9KDAsbC51c2VDYWxsYmFjaykoKGU9PntpKCh0PT5lPyh0W25dPWUsdC5zbGljZSgwLG4rMSkpOnQuc2xpY2UoMCxuKSkpfSksW10pO3JldHVybigwLG8uanN4cykoby5GcmFnbWVudCx7Y2hpbGRyZW46WygwLG8uanN4KShjLE9iamVjdC5hc3NpZ24oe3JlZjpmfSx7Y2hpbGRyZW46ZS5sZW5ndGg+MD8oMCxvLmpzeCkoXCJkaXZcIix7Y2hpbGRyZW46ZS5tYXAoKGU9PigwLG8uanN4KShzLkNvbnRlbnRNZW51SXRlbSx7ZW50cnk6ZSxhY3RpdmU6XCJmb2xkZXJcIj09PWUudHlwZSYmZS5pZD09PWgsaGFuZGxlQ2xpY2s6ZT0+e1wiZm9sZGVyXCI9PT1lLnR5cGU/dihlLmlkKTpkKGUpfSxoYW5kbGVCb29rbWFyazpwfSxlLmlkKSkpfSk6KDAsby5qc3gpKHUse2NoaWxkcmVuOlwiTm8gY29udGVudCBhdmFpbGFibGUuXCJ9KX0pKSxnJiZcImZvbGRlclwiPT09Zy50eXBlJiYoMCxvLmpzeCkodC5Db250ZW50TWVudUNvbHVtbix7ZW50cmllczpnLmNoaWxkcmVuLGRlcHRoOm4rMSxwYXRoOnIsdGFyZ2V0SXRlbUlkOmEsc2V0Q3VycmVudGx5U2VsZWN0ZWRQYXRoOmksaGFuZGxlQ2xpY2tJdGVtOmQsaGFuZGxlQm9va21hcmtJdGVtOnB9KV19KX07Y29uc3QgYz0oMCxhLmRlZmF1bHQpKGkuTWVudUZyYW1lKWBcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMjQxcHg7XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmUucHgueHNtYWxsfTtcbiAgb3ZlcmZsb3cteTogYXV0bztcblxuICBwb3NpdGlvbjogdW5zZXQ7XG4gIGZsZXgtc2hyaW5rOiAwO1xuXG4gIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNX07XG5gLHU9YS5kZWZhdWx0LmRpdmBcbiAgaGVpZ2h0OiAxMDAlO1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuXG4gIHVzZXItc2VsZWN0OiBub25lO1xuYH0sMjY1OTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnR9KX06ZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dH0pLGE9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiIT09biYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnIodCxlLG4pO3JldHVybiBvKHQsZSksdH07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Db250ZW50TWVudUl0ZW09dm9pZCAwO2NvbnN0IGk9big1ODkzKSxsPWEobig3NTE4KSkscz1uKDY3NTgpLGM9big5NjM0KSx1PW4oMTAwOSk7dC5Db250ZW50TWVudUl0ZW09KHtlbnRyeTplLGFjdGl2ZTp0LGhhbmRsZUNsaWNrOm4saGFuZGxlQm9va21hcms6cn0pPT57Y29uc3R7bGFiZWw6byx0eXBlOmF9PWU7cmV0dXJuKDAsaS5qc3hzKShmLE9iamVjdC5hc3NpZ24oe2lkOmBjb250ZW50LW1lbnUtaXRlbS0ke2UuaWR9YCxvbkNsaWNrOigpPT5uKGUpLGFjdGl2ZTp0fSx7Y2hpbGRyZW46W1wiaXRlbVwiPT09YSYmKDAsaS5qc3gpKHUuSWNvbldpdGhGYWxsYmFjayx7aWNvblVybDplLmljb259KSwoMCxpLmpzeCkoZCxPYmplY3QuYXNzaWduKHtzaXplOlwiYmFzZVwiLHdlaWdodDpcIm5vcm1hbFwifSx7Y2hpbGRyZW46b30pKSwoMCxpLmpzeCkocCxPYmplY3QuYXNzaWduKHtzaWRlOlwicmlnaHRcIixib29rbWFya2VkOmUuYm9va21hcmtlZCxvbkNsaWNrOnQ9PntudWxsPT10fHx0LnN0b3BQcm9wYWdhdGlvbigpLHImJnIoZSl9LFwiZGF0YS10ZXN0aWRcIjpgY29udGVudC1tZW51LWl0ZW0tJHtlLmlkfS1ib29rbWFyay1pY29uYH0se2NoaWxkcmVuOmUuYm9va21hcmtlZD8oMCxpLmpzeCkoYy5JY29uLHtpY29uOlwiU3RhckZpbGxlZEljb25cIn0pOigwLGkuanN4KShjLkljb24se2ljb246XCJTdGFySWNvblwifSl9KSksXCJmb2xkZXJcIj09PWEmJigwLGkuanN4KShzLk1lbnVJdGVtSWNvbkNvbnRhaW5lcixPYmplY3QuYXNzaWduKHtzaWRlOlwicmlnaHRcIixcImRhdGEtdGVzdGlkXCI6YGNvbnRlbnQtbWVudS1pdGVtLSR7ZS5pZH0tY2hldnJvbi1pY29uYH0se2NoaWxkcmVuOigwLGkuanN4KShzLk1lbnVJdGVtUmlnaHRJY29uLHtpY29uOlwiQ2hldnJvblJpZ2h0SWNvblwifSl9KSldfSkpfTtjb25zdCBkPSgwLGwuZGVmYXVsdCkocy5NZW51SXRlbVRleHQpYFxuICBwYWRkaW5nLXJpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmxhcmdlfTtcbmAscD0oMCxsLmRlZmF1bHQpKHMuTWVudUl0ZW1JY29uQ29udGFpbmVyKWBcbiAgJHsoe2Jvb2ttYXJrZWQ6ZX0pPT5lP2wuY3NzYFxuICAgICAgICAgICYgKyAke3MuTWVudUl0ZW1JY29uQ29udGFpbmVyfSB7XG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogdW5zZXQ7XG4gICAgICAgICAgfVxuICAgICAgICBgOmwuY3NzYFxuICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIGB9O1xuXG4gIHN2ZyB7XG4gICAgaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmxhcmdlfTtcbiAgICB3aWR0aDogJHsoe3RoZW1lOmV9KT0+ZS5weC5sYXJnZX07XG4gIH1cbmAsZj0oMCxsLmRlZmF1bHQpKHMuTWVudUl0ZW1Jbm5lckNvbnRhaW5lcilgXG4gICR7KHt0aGVtZTplLGFjdGl2ZTp0fSk9PnQmJmwuY3NzYFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLnBhbGV0dGUuYmFja2dyb3VuZDN9O1xuICAgIGB9XG5cbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQyfTtcblxuICAgICR7cH0ge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuXG4gICAgJHtwfSArICR7cy5NZW51SXRlbUljb25Db250YWluZXJ9IHtcbiAgICAgIG1hcmdpbi1sZWZ0OiB1bnNldDtcbiAgICB9XG4gIH1cbmB9LDEwMDk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuSWNvbldpdGhGYWxsYmFjaz12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGE9cihuKDc1MTgpKSxpPW4oOTEwNiksbD1uKDk2MzQpO3QuSWNvbldpdGhGYWxsYmFjaz0oe2ljb25Vcmw6ZSxhbHQ6dH0pPT57Y29uc3Qgbj0oMCxpLnVzZUltYWdlTG9hZGVyKShlKTtyZXR1cm5cImVycm9yXCI9PT1uPygwLG8uanN4KShzLHtjaGlsZHJlbjooMCxvLmpzeCkobC5JY29uLHtpY29uOlwiRmFsbGJhY2tHbG9iZUljb25cIn0pfSk6XCJsb2FkaW5nXCI9PT1uPygwLG8uanN4KShjLHt9KTooMCxvLmpzeCkodSx7c3JjOmUsYWx0OnR9KX07Y29uc3Qgcz1hLmRlZmF1bHQuZGl2YFxuICBoZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHgubGFyZ2V9O1xuICB3aWR0aDogJHsoe3RoZW1lOmV9KT0+ZS5weC5sYXJnZX07XG4gIG1hcmdpbi1sZWZ0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcblxuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG5gLGM9YS5kZWZhdWx0LmRpdmBcbiAgaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmxhcmdlfTtcbiAgd2lkdGg6ICR7KHt0aGVtZTplfSk9PmUucHgubGFyZ2V9O1xuICBtYXJnaW4tbGVmdDogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG5gLHU9YS5kZWZhdWx0LmltZ2BcbiAgaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmxhcmdlfTtcbiAgd2lkdGg6ICR7KHt0aGVtZTplfSk9PmUucHgubGFyZ2V9O1xuICBtYXJnaW4tbGVmdDogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG5cbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMuc21hbGx9O1xuXG4gIHVzZXItc2VsZWN0OiBub25lO1xuYH0sOTEwNjooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VJbWFnZUxvYWRlcj12b2lkIDA7Y29uc3Qgcj1uKDY2ODkpO3QudXNlSW1hZ2VMb2FkZXI9ZT0+e2NvbnN0W3Qsbl09KDAsci51c2VTdGF0ZSkoXCJsb2FkaW5nXCIpO3JldHVybigwLHIudXNlRWZmZWN0KSgoKCk9PntpZighZSlyZXR1cm4gdm9pZCBuKFwiZXJyb3JcIik7bihcImxvYWRpbmdcIik7Y29uc3QgdD1uZXcgSW1hZ2Uscj0oKT0+e24oXCJzdWNjZXNzXCIpfSxvPSgpPT57bihcImVycm9yXCIpfTtyZXR1cm4gdC5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLHIpLHQuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsbyksdC5zcmM9ZSwoKT0+e3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImxvYWRcIixyKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLG8pfX0pLFtlXSksdH19LDdlMzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oOTY1NCksdCl9LDQ0NzE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ3VzdG9tQ29udGV4dE1lbnU9dC5DT05URVhUX01FTlVfQU5JTUFUSU9OX0RVUkFUSU9OPXQuUFJJT1JfQ09OVEVYVF9NRU5VX0NMQVNTPXQuQkFTRV9DT05URVhUX01FTlU9dC5BQ1RJVkVfQ09OVEVYVF9NRU5VX0NMQVNTPXQuQ09OVEVYVF9NRU5VX0ZSQU1FX0lEPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksYT1uKDY2ODkpLGk9cihuKDc1MTgpKSxsPW4oMjg1MCkscz1uKDg4OTkpLGM9big5NDc4KSx1PW4oMjQyMSksZD1uKDQ1NzEpLHA9bigyODM4KSxmPW4oNjc1OCk7dC5DT05URVhUX01FTlVfRlJBTUVfSUQ9XCJjb250ZXh0X21lbnVfZnJhbWVcIix0LkFDVElWRV9DT05URVhUX01FTlVfQ0xBU1M9XCJhY3RpdmVfY29udGV4dF9tZW51XCIsdC5CQVNFX0NPTlRFWFRfTUVOVT1cImJhc2VfY29udGV4dF9tZW51XCIsdC5QUklPUl9DT05URVhUX01FTlVfQ0xBU1M9XCJwcmV2aW91c19jb250ZXh0X21lbnVcIix0LkNPTlRFWFRfTUVOVV9BTklNQVRJT05fRFVSQVRJT049MjAwLHQuQ3VzdG9tQ29udGV4dE1lbnU9KHttZW51VGVtcGxhdGU6ZSxvbkNsaWNrOm4saWNvbjpyLG9uTWVudVJlc2l6ZTppLG9uQ29udGV4dE1lbnVSZWFkeTpmLGlzV2luZG93czp2PSEwfSk9Pnt2YXIgQztjb25zdCBtPSgwLGEudXNlUmVmKShudWxsKSxbdyxiXT0oMCxhLnVzZVN0YXRlKSghMSksW3kseF09KDAsYS51c2VTdGF0ZSkoe3dpZHRoOjE2MCxoZWlnaHQ6MTYwfSksW2ssU109KDAsYS51c2VTdGF0ZSkoMCksW08sTV09KDAsYS51c2VTdGF0ZSkoW10pLFtMLF9dPSgwLGEudXNlU3RhdGUpKCksW1AsRV09KDAsYS51c2VTdGF0ZSkoW10pLFtqLFJdPSgwLGEudXNlU3RhdGUpKGUubWFwKChlPT5lLmxhYmVsfHxcIlwiKSkpLFtJLFZdPSgwLGEudXNlU3RhdGUpKC0xKTsoMCxhLnVzZUVmZmVjdCkoKCgpPT57UihlLm1hcCgoZT0+ZS5sYWJlbHx8XCJcIikpKSxWKGouZmluZEluZGV4KChlPT5lPT09TCkpKX0pLFtlXSk7Y29uc3R7d2lkdGg6SCxoZWlnaHQ6QX09KDAscy51c2VSZXNpemVDb250ZXh0TWVudSkoTCkse2hhbmRsZU5hdmlnYXRlVG9TdWJtZW51OlQsaGFuZGxlTmF2aWdhdGVCYWNrVG9QYXJlbnQ6RCxoYW5kbGVOYXZpZ2F0ZVRvQmFzZTpCfT0oMCx1LnVzZUNvbnRleHRNZW51TmF2aWdhdGlvbikoayxTLFAsRSxMLF8seCxWLE8saSk7cmV0dXJuKDAsYS51c2VFZmZlY3QpKCgoKT0+e00oKDAsYy5nZXRNZW51TmF2aWdhdGlvbk9yZGVyKShlKSksXyh0LkJBU0VfQ09OVEVYVF9NRU5VKSxFKFtdKSx4KHt3aWR0aDpILGhlaWdodDpBfSl9KSxbZV0pLCgwLGQudXNlQ29udGV4dE1lbnVLZXlib2FyZE5hdmlnYXRpb24pKG51bGw9PT0oQz1PLmZpbmQoKGU9PmUucGFyZW50TGFiZWw9PT1MKSkpfHx2b2lkIDA9PT1DP3ZvaWQgMDpDLm1lbnVUZW1wbGF0ZSxQLEwsSSxWLG4sVCxELEIpLCgwLGEudXNlRWZmZWN0KSgoKCk9PnttLmN1cnJlbnQmJih3fHwoZiYmZigpLGIoITApKSl9KSxbbS5jdXJyZW50XSksKDAsby5qc3gpKGgsT2JqZWN0LmFzc2lnbih7aWQ6dC5DT05URVhUX01FTlVfRlJBTUVfSUQsdHJhbnNpdGlvblNwZWVkOmssaXNXaW5kb3dzOnZ9LHtjaGlsZHJlbjpPLm1hcCgoKHtwYXJlbnRMYWJlbDplLG1lbnVUZW1wbGF0ZTphfSk9PigwLG8uanN4KShcImRpdlwiLE9iamVjdC5hc3NpZ24oe3JlZjplPT09TD9tOnZvaWQgMH0se2NoaWxkcmVuOigwLG8uanN4cykoZyxPYmplY3QuYXNzaWduKHtjbGFzc05hbWU6KDAsYy5nZXRDbGFzc05hbWUpKGUsTCxQKSxhY3RpdmVNZW51V2lkdGg6eS53aWR0aCx0cmFuc2l0aW9uU3BlZWQ6ayxpZDplfSx7Y2hpbGRyZW46W2UhPT10LkJBU0VfQ09OVEVYVF9NRU5VPygwLG8uanN4KShsLkN1c3RvbUNvbnRleHRNZW51SXRlbSx7dHlwZTpcInN1Ym1lbnVIZWFkZXJcIixsYWJlbDplLG9uQmFjazooKT0+RChlLFwiY2xpY2tcIiksb25DbG9zZTpCLHNob3dTaG91bGRIb21lQnV0dG9uOlAuc2xpY2UoMikuaW5jbHVkZXMoZSl8fFAubGVuZ3RoPj0yJiZMPT09ZSxzZWxlY3RlZDotMT09PUl9LGAke2V9LXN1Ym1lbnUtaGVhZGVyYCk6ciYmKDAsby5qc3gpKHAuUm9vdE1lbnVIZWFkZXIse2ljb246cn0pLGEubWFwKCgodCxyKT0+KDAsby5qc3gpKGwuQ3VzdG9tQ29udGV4dE1lbnVJdGVtLE9iamVjdC5hc3NpZ24oe29uQ2xpY2s6KCk9Pnt0Lmhhc1N1Yk1lbnU/VCh0LmxhYmVsfHxcIlwiKTpuKHQuZGF0YSksVigtMil9fSx0LHtzdWJtZW51OnQuaGFzU3ViTWVudSxzZWxlY3RlZDpJPT09cn0pLGAke2V9LSR7dC5sYWJlbH0tJHtyfWApKSldfSkpfSksZSkpKX0pKX07Y29uc3QgaD1pLmRlZmF1bHQuZGl2YFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1pbi13aWR0aDogZml0LWNvbnRlbnQ7XG4gIG1pbi1oZWlnaHQ6IGZpdC1jb250ZW50O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kMX07XG4gIHRyYW5zaXRpb246ICR7KHt0cmFuc2l0aW9uU3BlZWQ6ZX0pPT5gYWxsICR7ZX1tcyBsaW5lYXJgfTtcbiAgYm9yZGVyOiAkeyh7dGhlbWU6ZSxpc1dpbmRvd3M6dH0pPT50JiZgMXB4IHNvbGlkICR7ZS5wYWxldHRlLmJhY2tncm91bmQzfWB9O1xuICBib3JkZXItcmFkaXVzOiAkeyh7aXNXaW5kb3dzOmV9KT0+IWUmJlwiMTBweFwifTtcbmAsZz0oMCxpLmRlZmF1bHQpKGYuTWVudUZyYW1lKWBcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKCR7KHthY3RpdmVNZW51V2lkdGg6ZX0pPT5gJHtlfXB4YH0pO1xuICB0cmFuc2l0aW9uOiAkeyh7dHJhbnNpdGlvblNwZWVkOmV9KT0+YGFsbCAke2V9bXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuNTgsIDEpYH07XG4gIG9wYWNpdHk6IDAlO1xuXG4gICYuYWN0aXZlX2NvbnRleHRfbWVudSB7XG4gICAgdHJhbnNmb3JtOiB1bnNldDtcbiAgICBvcGFjaXR5OiAxMDAlO1xuICB9XG5cbiAgJi5wcmV2aW91c19jb250ZXh0X21lbnUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTAwJSk7XG4gICAgb3BhY2l0eTogMCU7XG4gIH1cbmB9LDI4NTA6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ3VzdG9tQ29udGV4dE1lbnVJdGVtPXZvaWQgMDtjb25zdCByPW4oNjY4OSksbz1uKDk1MzcpLGE9bigxNTc3KSxpPW4oNzUwMCksbD17bm9ybWFsOmEuTm9ybWFsQ3VzdG9tQ29udGV4dE1lbnVJdGVtLGNoZWNrYm94OmEuTm9ybWFsQ3VzdG9tQ29udGV4dE1lbnVJdGVtLHN1Ym1lbnU6YS5Ob3JtYWxDdXN0b21Db250ZXh0TWVudUl0ZW0sc2VwYXJhdG9yOm8uU2VwYXJhdG9yQ3VzdG9tQ29udGV4dE1lbnVJdGVtLHN1Ym1lbnVIZWFkZXI6aS5TdWJtZW51SGVhZGVyQ3VzdG9tQ29udGV4dE1lbnVJdGVtfTt0LkN1c3RvbUNvbnRleHRNZW51SXRlbT0oe3R5cGU6ZT1cIm5vcm1hbFwiLGljb246dCxsYWJlbDpuLGVuYWJsZWQ6bz0hMCxjaGVja2VkOmEsc3VibWVudTppLHNob3dTaG91bGRIb21lQnV0dG9uOnMsb25DbGljazpjLG9uQ2xvc2U6dSxvbkJhY2s6ZCxzZWxlY3RlZDpwfSk9Pntjb25zdCBmPWxbZV07bGV0IGg7c3dpdGNoKGUpe2Nhc2VcIm5vcm1hbFwiOmNhc2VcImNoZWNrYm94XCI6aD17dHlwZTplLGxhYmVsOm4saWNvbjp0LGVuYWJsZWQ6byxjaGVja2VkOmEsc2VsZWN0ZWQ6cH07YnJlYWs7Y2FzZVwic3VibWVudVwiOmg9e2xhYmVsOm4sZW5hYmxlZDpvLGNoZWNrZWQ6YSxzdWJtZW51Omksc2VsZWN0ZWQ6cH07YnJlYWs7Y2FzZVwic3VibWVudUhlYWRlclwiOmg9e2xhYmVsOm4sc2hvd1Nob3VsZEhvbWVCdXR0b246cyxvbkNsb3NlOnUsb25CYWNrOmQsc2VsZWN0ZWQ6cH07YnJlYWs7Y2FzZVwic2VwYXJhdG9yXCI6aD17fX1yZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKGYsT2JqZWN0LmFzc2lnbih7fSxoLHtrZXk6bixvbkNsaWNrOmN9KSl9fSwxNTc3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lk5vcm1hbEN1c3RvbUNvbnRleHRNZW51SXRlbT12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGE9cihuKDc1MTgpKSxpPW4oOTYzNCksbD1uKDY3NTgpO3QuTm9ybWFsQ3VzdG9tQ29udGV4dE1lbnVJdGVtPSh7dHlwZTplLGxhYmVsOnQsZW5hYmxlZDpuPSEwLGNoZWNrZWQ6cixzdWJtZW51OmEsb25DbGljazppLHNlbGVjdGVkOmN9KT0+KDAsby5qc3gpKGwuTWVudUl0ZW1Db250YWluZXIse2NoaWxkcmVuOigwLG8uanN4cykobC5NZW51SXRlbUlubmVyQ29udGFpbmVyLE9iamVjdC5hc3NpZ24oe29uQ2xpY2s6bj9pOnZvaWQgMCxlbmFibGVkOm4udG9TdHJpbmcoKSxzZWxlY3RlZDpjfSx7Y2hpbGRyZW46W1wiY2hlY2tib3hcIj09PWUmJigwLG8uanN4KShsLk1lbnVJdGVtSWNvbkNvbnRhaW5lcixPYmplY3QuYXNzaWduKHtzaWRlOlwibGVmdFwifSx7Y2hpbGRyZW46KDAsby5qc3gpKHMse2ljb246XCJDaGVja0ljb25cIixlbmFibGVkOm4udG9TdHJpbmcoKSxjaGVja2VkOnJ9KX0pKSwoMCxvLmpzeCkobC5NZW51SXRlbVRleHQsT2JqZWN0LmFzc2lnbih7c2l6ZTpcImJhc2VcIix3ZWlnaHQ6XCJub3JtYWxcIixlbmFibGVkOm59LHtjaGlsZHJlbjp0fSkpLGEmJigwLG8uanN4KShsLk1lbnVJdGVtSWNvbkNvbnRhaW5lcixPYmplY3QuYXNzaWduKHtzaWRlOlwicmlnaHRcIn0se2NoaWxkcmVuOigwLG8uanN4KShsLk1lbnVJdGVtUmlnaHRJY29uLHtpY29uOlwiQ2hldnJvblJpZ2h0SWNvblwiLGVuYWJsZWQ6bn0pfSkpXX0pKX0pO2NvbnN0IHM9KDAsYS5kZWZhdWx0KShpLkljb24pYFxuICBzdmcgcGF0aCB7XG4gICAgZmlsbDogJHsoe3RoZW1lOmUsZW5hYmxlZDp0LGNoZWNrZWQ6bn0pPT5cInRydWVcIj09PXQ/bj9lLnBhbGV0dGUudGV4dERlZmF1bHQ6XCJ0cmFuc3BhcmVudFwiOmUucGFsZXR0ZS50ZXh0SW5hY3RpdmV9O1xuICAgIHN0cm9rZS13aWR0aDogMS4yNTtcbiAgfVxuYH0sMjgzODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Sb290TWVudUhlYWRlcj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGE9cihuKDc1MTgpKSxpPW4oMTMzNSksbD1uKDk1MzcpO3QuUm9vdE1lbnVIZWFkZXI9KHtpY29uOmV9KT0+KDAsby5qc3hzKShvLkZyYWdtZW50LHtjaGlsZHJlbjpbKDAsby5qc3gpKHMse2NoaWxkcmVuOmV9KSwoMCxvLmpzeCkobC5TZXBhcmF0b3JDdXN0b21Db250ZXh0TWVudUl0ZW0se30pXX0pO2NvbnN0IHM9KDAsYS5kZWZhdWx0KShpLkJveClgXG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDI4cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMuc21hbGx9O1xuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5gMCAwIDAgJHtlLnB4LmxhcmdlfWB9O1xuYH0sOTUzNzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5TZXBhcmF0b3JDdXN0b21Db250ZXh0TWVudUl0ZW09dm9pZCAwO2NvbnN0IG89big1ODkzKSxhPW4oMTMzNSksaT1yKG4oNzUxOCkpO3QuU2VwYXJhdG9yQ3VzdG9tQ29udGV4dE1lbnVJdGVtPSgpPT4oMCxvLmpzeCkobCxPYmplY3QuYXNzaWduKHtcImRhdGEtdGVzdGlkXCI6XCJjdXN0b20tY29udGV4dC1tZW51LXNlcGFyYXRvclwifSx7Y2hpbGRyZW46KDAsby5qc3gpKHMse30pfSkpO2NvbnN0IGw9KDAsaS5kZWZhdWx0KShhLkJveClgXG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfSAwO1xuYCxzPWkuZGVmYXVsdC5ocmBcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMXB4O1xuICBib3JkZXI6IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kM307XG5gfSw3NTAwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlN1Ym1lbnVIZWFkZXJDdXN0b21Db250ZXh0TWVudUl0ZW09dm9pZCAwO2NvbnN0IG89big1ODkzKSxhPW4oNjY4OSksaT1yKG4oNzUxOCkpLGw9big5NjM0KSxzPW4oNzc2OSksYz1uKDEzMzUpLHU9big5NTM3KTt0LlN1Ym1lbnVIZWFkZXJDdXN0b21Db250ZXh0TWVudUl0ZW09KHtsYWJlbDplLHNob3dTaG91bGRIb21lQnV0dG9uOnQsb25DbG9zZTpuLG9uQmFjazpyLHNlbGVjdGVkOml9KT0+e2NvbnN0IGw9KDAsYS51c2VDYWxsYmFjaykoKGU9PntlLnN0b3BQcm9wYWdhdGlvbigpLG51bGw9PXJ8fHIoKX0pLFtyXSkscz0oMCxhLnVzZUNhbGxiYWNrKSgoZT0+e2Uuc3RvcFByb3BhZ2F0aW9uKCksbnVsbD09bnx8bigpfSksW25dKTtyZXR1cm4oMCxvLmpzeHMpKG8uRnJhZ21lbnQse2NoaWxkcmVuOlsoMCxvLmpzeHMpKGQse2NoaWxkcmVuOlsoMCxvLmpzeCkocCxPYmplY3QuYXNzaWduKHtzaWRlOlwibGVmdFwiLHNlbGVjdGVkOml9LHtjaGlsZHJlbjooMCxvLmpzeCkoZix7aWNvbjpcIkFycm93TGVmdEljb25cIixvbkNsaWNrOmwsaWQ6XCJiYWNrLWljb25cIixzZWxlY3RlZDppfSl9KSksKDAsby5qc3gpKGgsT2JqZWN0LmFzc2lnbih7c2l6ZTpcImJhc2VcIix3ZWlnaHQ6XCJub3JtYWxcIn0se2NoaWxkcmVuOmV9KSksdCYmKDAsby5qc3gpKHAsT2JqZWN0LmFzc2lnbih7c2lkZTpcInJpZ2h0XCJ9LHtjaGlsZHJlbjooMCxvLmpzeCkoZyx7aWNvbjpcIkNyb3NzMkljb25cIixvbkNsaWNrOnMsaWQ6XCJjbG9zZS1pY29uXCJ9KX0pKV19KSwoMCxvLmpzeCkodS5TZXBhcmF0b3JDdXN0b21Db250ZXh0TWVudUl0ZW0se30pXX0pfTtjb25zdCBkPSgwLGkuZGVmYXVsdCkoYy5Cb3gpYFxuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAyOHB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YDAgJHtlLnB4LnNtYWxsfSAwICR7ZS5weC5zbWFsbH1gfTtcbmAscD0oMCxpLmRlZmF1bHQpKGMuQm94KWBcbiAgcGFkZGluZzogJHsoe3RoZW1lOmUsc2lkZTp0fSk9PlwicmlnaHRcIj09PXQ/YDAgJHtlLnB4LnNtYWxsfSAwIDBgOmAwIDAgMCAke2UucHguc21hbGx9YH07XG4gIG1hcmdpbi1sZWZ0OiAkeyh7c2lkZTplfSk9PlwicmlnaHRcIj09PWU/XCJhdXRvXCI6MH07XG5gLGY9KDAsaS5kZWZhdWx0KShsLkljb24pYFxuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG4gIGJhY2tncm91bmQtY29sb3I6ICR7KHtzZWxlY3RlZDplLHRoZW1lOnR9KT0+ZT90LnBhbGV0dGUuYmFja2dyb3VuZDM6XCJ0cmFuc3BhcmVudFwifTtcbiAgY29sb3I6ICR7KHt0aGVtZTplLHNlbGVjdGVkOnR9KT0+dD9lLnBhbGV0dGUudGV4dERlZmF1bHQ6ZS5wYWxldHRlLnRleHRIZWxwfTtcbiAgc3Ryb2tlOiAkeyh7dGhlbWU6ZSxzZWxlY3RlZDp0fSk9PnQ/ZS5wYWxldHRlLnRleHREZWZhdWx0OmUucGFsZXR0ZS50ZXh0SGVscH07XG4gIHN0cm9rZS13aWR0aDogMC4yNTtcblxuICAmOmhvdmVyIHtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgICBzdHJva2U6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gIH1cbmAsaD0oMCxpLmRlZmF1bHQpKHMuVGV4dClgXG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dEhlbHB9O1xuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5gMCAke2UucHgueHh4bGFyZ2V9IDAgJHtlLnB4LnNtYWxsfWB9O1xuICBjdXJzb3I6IGRlZmF1bHQ7XG5gLGc9KDAsaS5kZWZhdWx0KShsLkljb24pYFxuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHRIZWxwfTtcbiAgc3Ryb2tlOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dEhlbHB9O1xuICBzdHJva2Utd2lkdGg6IDAuMjU7XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuXG4gICY6aG92ZXIge1xuICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICAgIHN0cm9rZTogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgfVxuYH0sMjQ1MjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oNDQ3MSksdCl9LDQ1NzE6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlQ29udGV4dE1lbnVLZXlib2FyZE5hdmlnYXRpb249dm9pZCAwO2NvbnN0IHI9big2Njg5KSxvPW4oNDQ3MSk7dC51c2VDb250ZXh0TWVudUtleWJvYXJkTmF2aWdhdGlvbj0oZSx0LG4sYSxpLGwscyxjLHUpPT57Y29uc3QgZD10PT57dmFyIG4scixvO3JldHVyblwic2VwYXJhdG9yXCI9PT0obnVsbD09PShuPWVbdF0pfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLnR5cGUpfHwhMT09PShudWxsPT09KHI9ZVt0XSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuZW5hYmxlZCl8fCExPT09KG51bGw9PT0obz1lW3RdKXx8dm9pZCAwPT09bz92b2lkIDA6by52aXNpYmxlKX0scD0oMCxyLnVzZUNhbGxiYWNrKSgoKCk9PntpKCh0PT57bGV0IG49dDtkb3tpZihuPT09KG51bGw9PWU/dm9pZCAwOmUubGVuZ3RoKS0xKWJyZWFrO24rPTF9d2hpbGUoZChuKSk7cmV0dXJuIGQobik/dDpufSkpfSksW2ksZV0pLGY9KDAsci51c2VDYWxsYmFjaykoKCgpPT57aSgoZT0+e2xldCB0PWU7ZG97aWYobj09PW8uQkFTRV9DT05URVhUX01FTlUmJjA9PT10fHwtMT09PXQpYnJlYWs7dC09MX13aGlsZShkKHQpKTtyZXR1cm4gdH0pKX0pLFtpLGVdKSxoPSgwLHIudXNlQ2FsbGJhY2spKCgoKT0+e2kobj09PW8uQkFTRV9DT05URVhUX01FTlU/MDotMSl9KSxbaSxuXSksZz0oMCxyLnVzZUNhbGxiYWNrKSgoKCk9PntpKCh0PT57Zm9yKGxldCBuPWUubGVuZ3RoLTE7bj49dDtuLS0paWYoIWQobikpcmV0dXJuIG47cmV0dXJuIHR9KSl9KSxbbnVsbD09ZT92b2lkIDA6ZS5sZW5ndGgsaV0pLHY9KDAsci51c2VDYWxsYmFjaykoKCgpPT57dmFyIHQscjtpZihudWxsPT09KHQ9ZVthXSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuaGFzU3ViTWVudSlzKChudWxsPT09KHI9ZVthXSl8fHZvaWQgMD09PXI/dm9pZCAwOnIubGFiZWwpfHxcIlwiKTtlbHNle2lmKC0xPT09YSlyZXR1cm4gdm9pZCBjKG4sXCJrZXlib2FyZFwiKTtsKGVbYV0uZGF0YSl9aSgtMSl9KSxbaSxsLHMsZSxhLGMsbl0pLEM9KDAsci51c2VDYWxsYmFjaykoKCgpPT57dmFyIHQsbjsobnVsbD09PSh0PWVbYV0pfHx2b2lkIDA9PT10P3ZvaWQgMDp0Lmhhc1N1Yk1lbnUpJiYocygobnVsbD09PShuPWVbYV0pfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmxhYmVsKXx8XCJcIiksaSgtMSkpfSksW2kscyxlLGFdKSxtPSgwLHIudXNlQ2FsbGJhY2spKCgoKT0+eyh0LnNsaWNlKDEpLmluY2x1ZGVzKG4pfHwobnVsbD09dD92b2lkIDA6dC5sZW5ndGgpPj0xKSYmYyhuLFwia2V5Ym9hcmRcIil9KSxbYyx0LG5dKSx3PSgwLHIudXNlQ2FsbGJhY2spKCgoKT0+e3Quc2xpY2UoMikuaW5jbHVkZXMobil8fChudWxsPT10P3ZvaWQgMDp0Lmxlbmd0aCk+PTI/dSgpOmwoe3R5cGU6XCJjbG9zZVwifSl9KSxbdSx0LG5dKTsoMCxyLnVzZUVmZmVjdCkoKCgpPT57Y29uc3QgZT1lPT57c3dpdGNoKGUua2V5KXtjYXNlXCJBcnJvd0Rvd25cIjpwKCk7YnJlYWs7Y2FzZVwiQXJyb3dVcFwiOmYoKTticmVhaztjYXNlXCJIb21lXCI6Y2FzZVwiUGFnZVVwXCI6aCgpO2JyZWFrO2Nhc2VcIkVuZFwiOmNhc2VcIlBhZ2VEb3duXCI6ZygpO2JyZWFrO2Nhc2VcIkVudGVyXCI6digpO2JyZWFrO2Nhc2VcIkFycm93UmlnaHRcIjpDKCk7YnJlYWs7Y2FzZVwiQXJyb3dMZWZ0XCI6bSgpO2JyZWFrO2Nhc2VcIkVzY2FwZVwiOncoKX19O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGUpLCgpPT57ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixlKX19KSxbcCxmLGgsZyx2LEMsbSx3XSl9fSwyNDIxOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUNvbnRleHRNZW51TmF2aWdhdGlvbj12b2lkIDA7Y29uc3Qgcj1uKDY2ODkpLG89big0NDcxKTt0LnVzZUNvbnRleHRNZW51TmF2aWdhdGlvbj0oZSx0LG4sYSxpLGwscyxjLHUsZCk9Pntjb25zdCBwPSgwLHIudXNlQ2FsbGJhY2spKChlPT57Y29uc3QgdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKSxuPW51bGw9PXQ/dm9pZCAwOnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue2hlaWdodDoobnVsbD09bj92b2lkIDA6bi5oZWlnaHQpfHwwLHdpZHRoOihudWxsPT1uP3ZvaWQgMDpuLndpZHRoKXx8MH19KSxbXSk7cmV0dXJue2hhbmRsZU5hdmlnYXRlVG9TdWJtZW51OigwLHIudXNlQ2FsbGJhY2spKChyPT57Y29uc3R7aGVpZ2h0OmMsd2lkdGg6dX09cChyKTtkJiZkKGMsdSksZXx8dChvLkNPTlRFWFRfTUVOVV9BTklNQVRJT05fRFVSQVRJT04pLHMoe3dpZHRoOnUsaGVpZ2h0OmN9KSxsKHIpLGEoWy4uLm4saV0pfSksW2ksbixhLGQsdCxwXSksaGFuZGxlTmF2aWdhdGVCYWNrVG9QYXJlbnQ6KDAsci51c2VDYWxsYmFjaykoKChlLHQ9XCJjbGlja1wiKT0+e2lmKGQpe2NvbnN0IGU9MT09PW4ubGVuZ3RoP28uQkFTRV9DT05URVhUX01FTlU6bltuLmxlbmd0aC0xXSx7aGVpZ2h0OnQsd2lkdGg6cn09cChlKTtkKHQscil9Y29uc3Qgcj1uLGk9ci5wb3AoKSxzPXUuZmluZCgoZT0+ZS5wYXJlbnRMYWJlbD09PWkpKTtsKGkpLGEociksYyhcImtleWJvYXJkXCI9PT10PyhudWxsPT1zP3ZvaWQgMDpzLm1lbnVUZW1wbGF0ZS5maW5kSW5kZXgoKHQ9PnQubGFiZWw9PT1lKSkpfHwwOi0xKX0pLFtuLGEsYyxwLGQsdV0pLGhhbmRsZU5hdmlnYXRlVG9CYXNlOigwLHIudXNlQ2FsbGJhY2spKCgoKT0+e2lmKGQpe2NvbnN0e2hlaWdodDplLHdpZHRoOnR9PXAoby5CQVNFX0NPTlRFWFRfTUVOVSk7ZChlLHQpfWwoby5CQVNFX0NPTlRFWFRfTUVOVSksYShbXSksYygtMSl9KSxbbCxhLGMscCxkXSl9fX0sODg5OTooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VSZXNpemVDb250ZXh0TWVudT12b2lkIDA7Y29uc3Qgcj1uKDY2ODkpLG89big0NDcxKTt0LnVzZVJlc2l6ZUNvbnRleHRNZW51PWU9Pntjb25zdFt0LG5dPSgwLHIudXNlU3RhdGUpKHtoZWlnaHQ6MTYwLHdpZHRoOjE2MH0pO3JldHVybigwLHIudXNlRWZmZWN0KSgoKCk9Pntjb25zdCB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpLHI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoby5DT05URVhUX01FTlVfRlJBTUVfSUQpO2lmKCF0KXJldHVybjtjb25zdCBhPW5ldyBSZXNpemVPYnNlcnZlcigoZT0+e2Zvcihjb25zdCB0IG9mIGUpe2NvbnN0e3dpZHRoOmUsaGVpZ2h0Om99PXQudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3ImJihyLnN0eWxlLmhlaWdodD1gJHtvfXB4YCxyLnN0eWxlLndpZHRoPWAke2V9cHhgLG4oe3dpZHRoOmUsaGVpZ2h0Om99KSl9fSkpO3JldHVybiBhLm9ic2VydmUodCksKCk9PnthLnVub2JzZXJ2ZSh0KX19KSxbZV0pLHR9fSw5NDc4OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmdldE1lbnVOYXZpZ2F0aW9uT3JkZXI9dC5nZXRDbGFzc05hbWU9dm9pZCAwO2NvbnN0IHI9big0NDcxKTt0LmdldENsYXNzTmFtZT0oZSx0LG4pPT50PT09ZT9yLkFDVElWRV9DT05URVhUX01FTlVfQ0xBU1M6bi5pbmNsdWRlcyhlKT9yLlBSSU9SX0NPTlRFWFRfTUVOVV9DTEFTUzpcIlwiLHQuZ2V0TWVudU5hdmlnYXRpb25PcmRlcj1lPT57aWYoIWUpcmV0dXJuW107Y29uc3QgdD1be3BhcmVudExhYmVsOnIuQkFTRV9DT05URVhUX01FTlUsdGVtcGxhdGU6ZX1dLG49W107Zm9yKDt0Lmxlbmd0aDspe2NvbnN0e3RlbXBsYXRlOmUscGFyZW50TGFiZWw6cn09dC5wb3AoKTtlLmZvckVhY2goKCh7c3VibWVudTpuLGxhYmVsOnJ9LG8pPT57biYmKHQucHVzaCh7cGFyZW50TGFiZWw6cnx8XCJcIix0ZW1wbGF0ZTpufSksZGVsZXRlIGVbb10uc3VibWVudSxlW29dLmhhc1N1Yk1lbnU9ITApfSkpLG4ucHVzaCh7cGFyZW50TGFiZWw6cixtZW51VGVtcGxhdGU6ZX0pfXJldHVybiBufX0sNjc1ODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5NZW51SXRlbVRleHQ9dC5NZW51SXRlbVJpZ2h0SWNvbj10Lk1lbnVJdGVtSWNvbkNvbnRhaW5lcj10Lk1lbnVJdGVtSW5uZXJDb250YWluZXI9dC5NZW51SXRlbUNvbnRhaW5lcj10Lk1lbnVGcmFtZT12b2lkIDA7Y29uc3Qgbz1yKG4oNzUxOCkpLGE9bigxMzM1KSxpPW4oOTYzNCksbD1uKDc3NjkpO3QuTWVudUZyYW1lPSgwLG8uZGVmYXVsdCkoYS5Cb3gpYFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiBtYXgtY29udGVudDtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQxfTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YCR7ZS5weC5zbWFsbH0gMCAke2UucHguc21hbGx9IDBgfTtcbmAsdC5NZW51SXRlbUNvbnRhaW5lcj0oMCxvLmRlZmF1bHQpKGEuQm94KWBcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAwICR7ZS5weC5zbWFsbH0gMCAke2UucHguc21hbGx9YH07XG5gLHQuTWVudUl0ZW1Jbm5lckNvbnRhaW5lcj0oMCxvLmRlZmF1bHQpKGEuQm94KWBcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMjhweDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG4gIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplLHNlbGVjdGVkOnQsZW5hYmxlZDpufSk9PlwiZmFsc2VcIiE9PW4mJnQ/ZS5wYWxldHRlLmJhY2tncm91bmQzOlwidHJhbnNwYXJlbnRcIn07XG5cbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmUsZW5hYmxlZDp0fSk9PlwiZmFsc2VcIiE9PXQ/ZS5wYWxldHRlLmJhY2tncm91bmQzOlwidHJhbnNwYXJlbnRcIn07XG4gIH1cbmAsdC5NZW51SXRlbUljb25Db250YWluZXI9KDAsby5kZWZhdWx0KShhLkJveClgXG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplLHNpZGU6dH0pPT5cInJpZ2h0XCI9PT10P2AwICR7ZS5weC5zbWFsbH0gMCAwYDpgMCAwIDAgJHtlLnB4LnNtYWxsfWB9O1xuICBtYXJnaW4tbGVmdDogJHsoe3NpZGU6ZX0pPT5cInJpZ2h0XCI9PT1lP1wiYXV0b1wiOjB9O1xuYCx0Lk1lbnVJdGVtUmlnaHRJY29uPSgwLG8uZGVmYXVsdCkoaS5JY29uKWBcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG5cbiAgc3ZnIHBhdGgge1xuICAgIGZpbGw6ICR7KHt0aGVtZTplLGVuYWJsZWQ6dH0pPT5udWxsPT10fHx0P2UucGFsZXR0ZS50ZXh0RGVmYXVsdDplLnBhbGV0dGUudGV4dEluYWN0aXZlfTtcbiAgICBzdHJva2U6ICR7KHt0aGVtZTplLGVuYWJsZWQ6dH0pPT5udWxsPT10fHx0P2UucGFsZXR0ZS50ZXh0RGVmYXVsdDplLnBhbGV0dGUudGV4dEluYWN0aXZlfTtcbiAgICBzdHJva2Utd2lkdGg6IDAuNTtcbiAgfVxuYCx0Lk1lbnVJdGVtVGV4dD0oMCxvLmRlZmF1bHQpKGwuVGV4dClgXG4gIGNvbG9yOiAkeyh7dGhlbWU6ZSxlbmFibGVkOnR9KT0+bnVsbD09dHx8dD9lLnBhbGV0dGUudGV4dERlZmF1bHQ6ZS5wYWxldHRlLnRleHRJbmFjdGl2ZX07XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAwICR7ZS5weC54eHhsYXJnZX0gMCAke2UucHguc21hbGx9YH07XG4gIGN1cnNvcjogZGVmYXVsdDtcblxuICBvdmVyZmxvdzogaGlkZGVuO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuICB1c2VyLXNlbGVjdDogbm9uZTtcbmB9LDI2MDk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDU5NzEpLHQpfSw1OTcxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuVG9nZ2xlPXZvaWQgMDtjb25zdCBhPW4oNTg5MyksaT1uKDY2ODkpLGw9byhuKDc1MTgpKSxzPW4oODUxMCksYz1uKDEzMzUpLHU9bigxOTQ0KTt0LlRvZ2dsZT1lPT57dmFye2lkOnQsbGFiZWw6bixvbkNoYW5nZTpvLGxhYmVsU2lkZTpsPVwicmlnaHRcIix0eXBlOnM9XCJjaGVja2JveFwiLGhlbHBlclRleHQ6Y309ZSxnPXIoZSxbXCJpZFwiLFwibGFiZWxcIixcIm9uQ2hhbmdlXCIsXCJsYWJlbFNpZGVcIixcInR5cGVcIixcImhlbHBlclRleHRcIl0pO2NvbnN0W3YsQ109KDAsaS51c2VTdGF0ZSkoZy5jaGVja2VkKTtyZXR1cm4oMCxpLnVzZUVmZmVjdCkoKCgpPT57QyhnLmNoZWNrZWQpfSksW2cuY2hlY2tlZF0pLCgwLGEuanN4cykoZCxPYmplY3QuYXNzaWduKHtsYWJlbFNpZGU6bH0se2NoaWxkcmVuOlsobnx8YykmJigwLGEuanN4KSh1LkxhYmVsLHtodG1sRm9yOnQsdGV4dDpuLGhlbHBlclRleHQ6Y30pLCgwLGEuanN4cykocCxPYmplY3QuYXNzaWduKHtpc0NoZWNrZWQ6dn0se2NoaWxkcmVuOlsoMCxhLmpzeCkoaCxPYmplY3QuYXNzaWduKHt9LGcse2lkOnQsdHlwZTpzLG9uQ2hhbmdlOmU9PntDKGUudGFyZ2V0LmNoZWNrZWQpLG51bGw9PW98fG8oZSl9fSkpLCgwLGEuanN4KShmLHt0YWJJbmRleDotMSxcImFyaWEtaGlkZGVuXCI6XCJ0cnVlXCIsaXNDaGVja2VkOnZ9KV19KSldfSkpfTtjb25zdCBkPWwuZGVmYXVsdC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGdhcDogJHsoe3RoZW1lOmV9KT0+ZS5weC54bGFyZ2V9O1xuICBmbGV4LWRpcmVjdGlvbjogJHsoe2xhYmVsU2lkZTplfSk9PlwibGVmdFwiPT09ZT9cInJvd1wiOlwicm93LXJldmVyc2VcIn07XG4gIGxpbmUtaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnhsYXJnZX07XG5gLHA9KDAsbC5kZWZhdWx0KShjLkJveClgXG4gIC0tcHgtdG9nZ2xlOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnhsYXJnZX07XG4gIC0tcHgta25vYjogJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcblxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGhlaWdodDogdmFyKC0tcHgtdG9nZ2xlKTtcbiAgd2lkdGg6IGNhbGMoMiAqIHZhcigtLXB4LXRvZ2dsZSkpO1xuICBib3JkZXI6IDFweCBzb2xpZFxuICAgICR7KHtpc0NoZWNrZWQ6ZSx0aGVtZTp0fSk9PmU/dC5wYWxldHRlLmJyYW5kUHJpbWFyeTp0LnBhbGV0dGUuYmFja2dyb3VuZDZ9O1xuICBib3JkZXItcmFkaXVzOiBjYWxjKDAuNSAqIHZhcigtLXB4LXRvZ2dsZSkpO1xuXG4gIGJhY2tncm91bmQ6ICR7KHtpc0NoZWNrZWQ6ZSx0aGVtZTp0fSk9PmU/dC5wYWxldHRlLmJyYW5kUHJpbWFyeTp0LnBhbGV0dGUuYmFja2dyb3VuZDZ9O1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIHZhcigtLW9wZW5maW4tdWktZ2xvYmFsVHJhbnNpdGlvbiksXG4gICAgYm9yZGVyLWNvbG9yIHZhcigtLS1vcGVuZmluLXVpLWdsb2JhbFRyYW5zaXRpb24pO1xuXG4gICY6Zm9jdXMtd2l0aGluIHtcbiAgICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dEZvY3VzZWR9O1xuICB9XG5gLGY9bC5kZWZhdWx0LmJ1dHRvbmBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogdmFyKC0tcHgta25vYik7XG4gIGhlaWdodDogdmFyKC0tcHgta25vYik7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnhzbWFsbH07XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBiYWNrZ3JvdW5kOiAkeyh7aXNDaGVja2VkOmUsdGhlbWU6dH0pPT5lP3QucGFsZXR0ZS5icmFuZFByaW1hcnlUZXh0OnQucGFsZXR0ZS5pbnB1dENvbG9yfTtcbiAgYm9yZGVyOiBub25lO1xuICBvdXRsaW5lOiBub25lO1xuICB0cmFuc2l0aW9uOiBsZWZ0IHZhcigtLW9wZW5maW4tdWktZ2xvYmFsVHJhbnNpdGlvbiksIGJhY2tncm91bmQgdmFyKC0tb3BlbmZpbi11aS1nbG9iYWxUcmFuc2l0aW9uKTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7IC8qIEFsbG93IHBhc3MtdGhydSBmb3IgbmF0aXZlIGlucHV0ICovXG5gLGg9KDAsbC5kZWZhdWx0KShzLlJhd0lucHV0KWBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIG9wYWNpdHk6IDA7XG4gIGJvcmRlcjogbm9uZTtcbiAgb3V0bGluZTogbm9uZTtcbiAgYXBwZWFyYW5jZTogbm9uZTtcbiAgZGlzcGxheTogYmxvY2s7XG5cbiAgJjpjaGVja2VkICsgJHtmfSB7XG4gICAgbGVmdDogY2FsYygxMDAlIC0gJHsoe3RoZW1lOmV9KT0+ZS5weC5sYXJnZX0pO1xuICB9XG4gICY6ZGlzYWJsZWQgKyAke2Z9IHtcbiAgICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXREaXNhYmxlZH07XG4gIH1cbiAgJjpub3QoOmRpc2FibGVkKSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5gfSw1MzAwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQmFkZ2U9dm9pZCAwO2NvbnN0IGE9big1ODkzKSxpPW8obig3NTE4KSksbD1uKDEzMzUpLHM9bigzODc3KTt0LkJhZGdlPWU9Pnt2YXJ7Y291bnQ6dD0wLG1heDpufT1lLG89cihlLFtcImNvdW50XCIsXCJtYXhcIl0pO2xldCBpPXQudG9TdHJpbmcoKTtyZXR1cm4gbiYmdD5uJiYoaT1gJHtufStgKSwoMCxhLmpzeCkoYyxPYmplY3QuYXNzaWduKHt9LG8se2NoaWxkcmVuOml9KSl9O2NvbnN0IGM9KDAsaS5kZWZhdWx0KShsLkJveClgXG4gIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5zdGF0dXNDcml0aWNhbH07XG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnBpbGx9O1xuICBjb2xvcjogJHtzLkNvbG9yLndoaXRlfTtcbiAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLnNtYWxsfTtcbiAgbWluLXdpZHRoOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnhsYXJnZX07XG4gIHBhZGRpbmc6IDJweCA2cHg7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYm94LXNoYWRvdzogJHsoe3RoZW1lOmV9KT0+ZS5zaGFkb3cuYmFzZX07XG5gfSwzMTM2OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig1MzAwKSx0KX0sNjg5NTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnR9KX06ZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dH0pLGE9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiIT09biYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnIodCxlLG4pO3JldHVybiBvKHQsZSksdH0saT10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxsPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2FsZW5kYXI9dm9pZCAwO2NvbnN0IHM9big1ODkzKSxjPW4oNjY4OSksdT1sKG4oNzUxOCkpLGQ9big3MjkyKSxwPW4oNDEzMCksZj1uKDEzMzUpLGg9YShuKDUyOTkpKTt0LkNhbGVuZGFyPWU9Pnt2YXJ7dmFsdWU6dCxvbkNoYW5nZTpuLG9uRGlzbWlzczpyfT1lLG89aShlLFtcInZhbHVlXCIsXCJvbkNoYW5nZVwiLFwib25EaXNtaXNzXCJdKTtjb25zdFthXT0oMCxjLnVzZVN0YXRlKSh0KSxbbCx1XT0oMCxjLnVzZVN0YXRlKSh0KSxwPSgwLGMudXNlQ2FsbGJhY2spKChlPT57dShlKSxudWxsPT1ufHxuKGUpfSksW10pLGY9KDAsYy51c2VDYWxsYmFjaykoKCgpPT57cChhKSxudWxsPT1yfHxyKCl9KSxbXSk7cmV0dXJuKDAscy5qc3hzKShDLE9iamVjdC5hc3NpZ24oe1wiZGF0YS10ZXN0aWRcIjpcInJlYWN0LWNhbGVuZGFyXCJ9LHtjaGlsZHJlbjpbKDAscy5qc3gpKGQuQ2FsZW5kYXIsT2JqZWN0LmFzc2lnbih7dmFsdWU6bCxvbkNoYW5nZTpwLGNhbGVuZGFyVHlwZTpcIlVTXCIsZGVmYXVsdFZpZXc6XCJtb250aFwiLG1pbkRldGFpbDpcInllYXJcIixuZXh0MkxhYmVsOm51bGwscHJldjJMYWJlbDpudWxsLHNob3dGaXhlZE51bWJlck9mV2Vla3M6ITB9LG8pKSwoMCxzLmpzeHMpKGcse2NoaWxkcmVuOlsoMCxzLmpzeCkodix7XCJkYXRhLXRlc3RpZFwiOlwiY2FsZW5kYXItY2FuY2VsLWJ1dHRvblwiLFwiYXJpYS1sYWJlbFwiOlwiY2FuY2VsLWJ1dHRvblwiLGxhYmVsOlwiQ2FuY2VsXCIsc2l6ZTpcImJhc2VcIixraW5kOlwidGV4dE9ubHlcIixvbkNsaWNrOmZ9KSwoMCxzLmpzeCkodix7XCJkYXRhLXRlc3RpZFwiOlwiY2FsZW5kYXItYXBwbHktYnV0dG9uXCIsXCJhcmlhLWxhYmVsXCI6XCJhcHBseS1idXR0b25cIixsYWJlbDpcIkFwcGx5XCIsc2l6ZTpcImJhc2VcIixraW5kOlwicHJpbWFyeVwiLG9uQ2xpY2s6cn0pXX0pXX0pKX07Y29uc3QgZz0oMCx1LmRlZmF1bHQpKGYuQm94KWBcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAke2UucHguc21hbGx9IDBweGB9O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICBtYXJnaW4tcmlnaHQ6ICR7KHt0aGVtZTplfSk9PmAke2UucHguc21hbGx9YH07XG4gIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNH07XG4gIGJvcmRlcjogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNn07XG4gIGJvcmRlci10b3A6IG5vbmU7XG5gLHY9KDAsdS5kZWZhdWx0KShwLkJ1dHRvbilgXG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAke2UucHguc21hbGx9ICR7ZS5weC5zbWFsbH1gfTtcbiAgbWFyZ2luLXJpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5gJHtlLnB4LnNtYWxsfWB9O1xuYCxDPSgwLHUuZGVmYXVsdCkoZi5Cb3gpYFxuICAke2h9O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG5cbiAgLnJlYWN0LWNhbGVuZGFyIHtcbiAgICBtaW4td2lkdGg6IDIzMHB4O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNH07XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gICAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmJhc2V9O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNn07XG4gIH1cblxuICAucmVhY3QtY2FsZW5kYXJfX25hdmlnYXRpb24ge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNH0gIWltcG9ydGFudDtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gICAgbWFyZ2luOiAwO1xuICB9XG5cbiAgLnJlYWN0LWNhbGVuZGFyX19uYXZpZ2F0aW9uX19hcnJvdyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ0fSAhaW1wb3J0YW50O1xuICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICAgIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5sYXJnZX07XG5cbiAgICA6ZGlzYWJsZWQge1xuICAgICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dERpc2FibGVkfTtcbiAgICB9XG4gIH1cblxuICAucmVhY3QtY2FsZW5kYXJfX25hdmlnYXRpb25fX2xhYmVsIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDR9ICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gICAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmJhc2V9O1xuICB9XG5cbiAgLnJlYWN0LWNhbGVuZGFyX192aWV3Q29udGFpbmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDR9ICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dENvbG9yfTtcbiAgICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gIH1cblxuICAucmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdfX3dlZWtkYXlzIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG5cbiAgICBhYmJyIHtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICB9XG4gIH1cblxuICAucmVhY3QtY2FsZW5kYXJfX3RpbGUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDR9ICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gICAgYm9yZGVyLXJhZGl1czogMTAwcHg7XG4gICAgYXNwZWN0LXJhdGlvOiAxLzE7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgOmRpc2FibGVkIHtcbiAgICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dEluYWN0aXZlfTtcbiAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cbiAgICAgIDpob3ZlciB7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICA6aG92ZXIge1xuICAgICAgYm9yZGVyOiAycHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kUHJpbWFyeX07XG4gICAgICBib3JkZXItcmFkaXVzOiAxMDBweDtcbiAgICB9XG5cbiAgICA6Zm9jdXMge1xuICAgICAgYm9yZGVyOiAycHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kUHJpbWFyeX07XG4gICAgICBib3JkZXItcmFkaXVzOiAxMDBweDtcbiAgICB9XG4gIH1cblxuICAucmVhY3QtY2FsZW5kYXJfX3RpbGUtLW5vdyB7XG4gICAgYm9yZGVyOiAycHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kUHJpbWFyeX0gIWltcG9ydGFudDtcbiAgICBib3JkZXItcmFkaXVzOiAxMDBweDtcbiAgfVxuXG4gIC5yZWFjdC1jYWxlbmRhcl9fdGlsZS0tYWN0aXZlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5fSAhaW1wb3J0YW50O1xuICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5VGV4dH07XG4gICAgYm9yZGVyLXJhZGl1czogMTAwcHg7XG5cbiAgICA6Zm9jdXMge1xuICAgICAgYm9yZGVyOiAycHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kUHJpbWFyeX07XG4gICAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDEwMHB4O1xuICAgIH1cbiAgfVxuYH0sOTczNDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oNjg5NSksdCl9LDE2MjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Ecm9wZG93bkJ1dHRvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGE9bigyNzkpLGk9big3MjYxKSxsPW4oOTYzNCkscz1uKDY2ODkpLGM9cihuKDc1MTgpKSx1PW4oMTMzNSksZD1uKDk1MDcpLHA9bigxOTQ0KTt0LkRyb3Bkb3duQnV0dG9uPSgwLHMuZm9yd2FyZFJlZikoKChlLHQpPT57dmFyIG4scixsLHMsYztyZXR1cm4oMCxvLmpzeCkoaCx7Y2hpbGRyZW46KDAsby5qc3hzKShmLHtjaGlsZHJlbjpbKGUubGFiZWx8fGUuaGVscGVyVGV4dCkmJigwLG8uanN4KShwLkxhYmVsLHt0ZXh0OmUubGFiZWwsaGVscGVyVGV4dDplLmhlbHBlclRleHQsaHRtbEZvcjplLm5hbWV9KSwoMCxvLmpzeHMpKHYsT2JqZWN0LmFzc2lnbih7cm9sZTpcImNvbWJveGJveFwiLHJlZjp0LG5hbWU6ZS5uYW1lLHRhYkluZGV4OmUudGFiSW5kZXgsXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIjplLmFjdGl2ZURlc2NlbmRhbnQsc3RhdHVzOmUuc3RhdHVzLFwiYXJpYS1leHBhbmRlZFwiOmUuZXhwYW5kZWQsXCJhcmlhLWhhc3BvcHVwXCI6XCJsaXN0Ym94XCIsXCJhcmlhLWNvbnRyb2xzXCI6XCJkcm9wZG93bi1saXN0Ym94XCIsb25DbGljazooKT0+ZS5oYW5kbGVDbGljaygpLGFzOlwiYnV0dG9uXCIsXCJkYXRhLXRlc3RpZFwiOlwiZHJvcGRvd24tYnV0dG9uXCIsdGl0bGU6bnVsbCE9PShyPW51bGw9PT0obj1lLnNlbGVjdGVkKXx8dm9pZCAwPT09bj92b2lkIDA6bi50aXRsZSkmJnZvaWQgMCE9PXI/cjplLnBsYWNlaG9sZGVyfSx7Y2hpbGRyZW46WyhudWxsPT09KGw9ZS5zZWxlY3RlZCl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaWNvblVybCkmJigwLG8uanN4KShhLkJ1dHRvbkltYWdlLHtzcmM6ZS5zZWxlY3RlZC5pY29uVXJsfSksKDAsby5qc3gpKGkuT3B0aW9uVGl0bGUsT2JqZWN0LmFzc2lnbih7XCJhcmlhLWxpdmVcIjpcInBvbGl0ZVwiLFwiZGF0YS10ZXN0aWRcIjpcInNlbGVjdGVkLW9wdGlvblwifSx7Y2hpbGRyZW46bnVsbCE9PShjPW51bGw9PT0ocz1lLnNlbGVjdGVkKXx8dm9pZCAwPT09cz92b2lkIDA6cy50aXRsZSkmJnZvaWQgMCE9PWM/YzplLnBsYWNlaG9sZGVyfSkpLCgwLG8uanN4KShnLHtzdGF0dXM6ZS5zdGF0dXMsaWNvbjplLmV4cGFuZGVkP1wiQ2hldnJvblVwSWNvblwiOlwiQ2hldnJvbkRvd25JY29uXCJ9KV19KSldfSl9KX0pKSx0LkRyb3Bkb3duQnV0dG9uLmRpc3BsYXlOYW1lPVwiRHJvcGRvd25CdXR0b25cIjtjb25zdCBmPSgwLGMuZGVmYXVsdCkodS5Cb3gpYFxuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICB3aWR0aDogMTAwJTtcbmAsaD0oMCxjLmRlZmF1bHQpKHUuQm94KWBcbiAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmJhc2V9O1xuICB3aWR0aDogMTAwJTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG5gLGc9KDAsYy5kZWZhdWx0KShsLkljb24pYFxuICBjb2xvcjogJHsoe3RoZW1lOmUsc3RhdHVzOnR9KT0+KDAsZC5nZXRTdGF0dXNDb2xvcikoZSx0LFwidGV4dERlZmF1bHRcIil9O1xuYCx2PSgwLGMuZGVmYXVsdCkodS5Cb3gpYFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDR9O1xuICBib3JkZXI6IDFweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXRCYWNrZ3JvdW5kfTtcbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMuc21hbGx9O1xuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplLHN0YXR1czp0fSk9PigwLGQuZ2V0U3RhdHVzQ29sb3IpKGUsdCxcImlucHV0Qm9yZGVyXCIpfTtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGZvbnQtd2VpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRXZWlnaHQuYm9sZH07XG4gIGdhcDogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgbGluZS1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUubGluZUhlaWdodC51aX07XG4gIG91dGxpbmU6IG5vbmU7XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAke2UucHguc21hbGx9ICR7ZS5weC5zbWFsbH1gfTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciB2YXIoLS1vcGVuZmluLXVpLWdsb2JhbFRyYW5zaXRpb24pO1xuICB3aWR0aDogMTAwJTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuICAke2wuSWNvbn0ge1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICB9XG5cbiAgJjpmb2N1cy13aXRoaW4ge1xuICAgIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0Rm9jdXNlZH07XG4gIH1cblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiAwO1xuICAgIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmUsc3RhdHVzOnR9KT0+KDAsZC5nZXRTdGF0dXNDb2xvcikoZSx0LFwiaW5wdXRGb2N1c2VkXCIpfTtcbiAgfVxuYH0sNjA2MjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Ecm9wZG93bk1lbnU9dm9pZCAwO2NvbnN0IG89big1ODkzKSxhPW4oNjY4OSksaT1uKDEzMzUpLGw9cihuKDc1MTgpKSxzPW4oNzI2MSksYz1uKDI3OSksdT1uKDM0NyksZD1uKDE2Mik7dC5Ecm9wZG93bk1lbnU9KDAsYS5mb3J3YXJkUmVmKSgoKHtsYWJlbDplLG9wdGlvbnM6dD1bW11dLHBsYWNlaG9sZGVyOm49XCJTZWxlY3QgYW4gb3B0aW9uXCIsc2VsZWN0ZWQ6cixvbk9wdGlvbkhvdmVyOmwsb25DaGFuZ2U6aCxyZW5kZXJMYWJlbDpnLGZpdENvbnRlbnQ6dn0sQyk9PntpZihyJiYhKChlLHQpPT5lLnNvbWUoKGU9PmUuc29tZSgoZT0+ZS52YWx1ZT09PXQudmFsdWUpKSkpKSh0LHIpKXRocm93IG5ldyBFcnJvcihgVGhlIHNlbGVjdGVkIG9wdGlvbiAke3IudmFsdWV9IGlzIG5vdCBwcmVzZW50IGluIHRoZSBvcHRpb25zIGFycmF5YCk7Y29uc3RbbSx3XT0oMCxhLnVzZVN0YXRlKSghMSk7KDAsYS51c2VFZmZlY3QpKCgoKT0+ezE9PT10WzBdLmxlbmd0aCYmYighMSl9KSxbdF0pO2NvbnN0IGI9ZT0+e3cobnVsbCE9ZT9lOiFtKX0se2ZvY3VzZWRPcHRpb246eSxoYW5kbGVLZXlEb3duOnh9PSgwLHUudXNlRHJvcGRvd25LZXlib2FyZE5hdmlnYXRpb24pKHQscixtLGIsaCk7cmV0dXJuKDAsby5qc3gpKHAsT2JqZWN0LmFzc2lnbih7cmVmOkMsZmxleERpcmVjdGlvbjpcImNvbHVtblwiLG9uQmx1cjplPT57ZS5jdXJyZW50VGFyZ2V0LmNvbnRhaW5zKGUucmVsYXRlZFRhcmdldCl8fHcoITEpfSxvbktleURvd246eH0se2NoaWxkcmVuOigwLG8uanN4cykoaS5Cb3gsT2JqZWN0LmFzc2lnbih7Z2FwOlwic21hbGxcIixmbGV4RGlyZWN0aW9uOlwiY29sdW1uXCIsc3R5bGU6e3dpZHRoOlwiMTAwJVwifX0se2NoaWxkcmVuOltlJiYoMCxvLmpzeCkoXCJsYWJlbFwiLE9iamVjdC5hc3NpZ24oe2h0bWxGb3I6XCJkcm9wZG93bi1idXR0b25cIn0se2NoaWxkcmVuOigwLG8uanN4KShzLk9wdGlvblRpdGxlLHtjaGlsZHJlbjplfSl9KSksKDAsby5qc3hzKShmLHtjaGlsZHJlbjpbZz8oMCxvLmpzeCkoYS5GcmFnbWVudCx7Y2hpbGRyZW46ZyhyfHx7dGl0bGU6bix2YWx1ZTpudWxsfSxtLGIseSl9LGByZW5kZXItbGFiZWwtJHtyfWApOigwLG8uanN4KShkLkRyb3Bkb3duQnV0dG9uLHt0YWJJbmRleDowLGFjdGl2ZURlc2NlbmRhbnQ6YG1lbnUtb3B0aW9uLSR7bnVsbD09eT92b2lkIDA6eS52YWx1ZX1gLGV4cGFuZGVkOm0mJnRbMF0ubGVuZ3RoPjEsaGFuZGxlQ2xpY2s6KCk9PmIoKSxzZWxlY3RlZDpyLHBsYWNlaG9sZGVyOm59KSx0Lmxlbmd0aCYmdFswXS5sZW5ndGg+MSYmbSYmKDAsby5qc3gpKGMuTWVudSx7bWVudUlkOlwiZHJvcGRvd24tbGlzdGJveFwiLG9wdGlvbnM6dCxzZWxlY3RlZDpyLGhhbmRsZUV4cGFuZE1lbnU6Yixvbk9wdGlvbkhvdmVyOmwsb25DaGFuZ2U6aCxmaXRDb250ZW50OnYsZm9jdXNlZE9wdGlvbjp5LGFic29sdXRlUG9zaXRpb246ITB9KV19KV19KSl9KSl9KSksdC5Ecm9wZG93bk1lbnUuZGlzcGxheU5hbWU9XCJEcm9wZG93bk1lbnVcIjtjb25zdCBwPSgwLGwuZGVmYXVsdCkoaS5Cb3gpYFxuICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuYCxmPSgwLGwuZGVmYXVsdCkoaS5Cb3gpYGB9LDYwMjY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDYwNjIpLHQpLG8obigyNzkpLHQpLG8obigxNjIpLHQpfSwyNzk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQnV0dG9uSW1hZ2U9dC5NZW51PXZvaWQgMDtjb25zdCBvPW4oNTg5MyksYT1yKG4oNjY4OSkpLGk9cihuKDc1MTgpKSxsPW4oOTYzNCkscz1uKDEzMzUpLGM9big3MjYxKTt0Lk1lbnU9KHtvcHRpb25zOmUsc2VsZWN0ZWQ6bixtZW51SWQ6cixoYW5kbGVFeHBhbmRNZW51Omksb25PcHRpb25Ib3ZlcjpsLG9uQ2hhbmdlOnMsd2lkdGg6ZyxoZWlnaHQ6dixoZWFkZXI6Qyxmb2N1c2VkT3B0aW9uOm0sYWJzb2x1dGVQb3NpdGlvbjp3LGZpdENvbnRlbnQ6Yn0pPT57Y29uc3QgeT1lPT57bnVsbD09bHx8bChlKX07cmV0dXJuKDAsby5qc3hzKSh1LE9iamVjdC5hc3NpZ24oe3JvbGU6XCJsaXN0Ym94XCIsZmxleERpcmVjdGlvbjpcImNvbHVtblwiLG9uTW91c2VMZWF2ZTooKT0+e3kobnVsbCl9LFwiZGF0YS10ZXN0aWRcIjpcIm1lbnVcIixpZDpyLHdpZHRoOmcsaGVpZ2h0OnYsYWJzb2x1dGVQb3NpdGlvbjp3LGZpdENvbnRlbnQ6Yn0se2NoaWxkcmVuOltDJiYoMCxvLmpzeHMpKGEuZGVmYXVsdC5GcmFnbWVudCx7Y2hpbGRyZW46WygwLG8uanN4KShwLHtjaGlsZHJlbjooMCxvLmpzeCkoYy5PcHRpb25UaXRsZSx7Y2hpbGRyZW46Q30pfSksKDAsby5qc3gpKGgse30pXX0pLGUubWFwKCgoZSxyKT0+KDAsby5qc3hzKShhLmRlZmF1bHQuRnJhZ21lbnQse2NoaWxkcmVuOlswIT09ciYmKDAsby5qc3gpKGgse30pLGUubWFwKCgoZSxyKT0+KDAsby5qc3hzKShkLE9iamVjdC5hc3NpZ24oe3JvbGU6XCJvcHRpb25cIixpc0ZvY3VzZWQ6KG51bGw9PW0/dm9pZCAwOm0udmFsdWUpPT09ZS52YWx1ZSxcImFyaWEtc2VsZWN0ZWRcIjoobnVsbD09bj92b2lkIDA6bi52YWx1ZSk9PT1lLnZhbHVlLGFsaWduSXRlbXM6XCJjZW50ZXJcIixhczpcImJ1dHRvblwiLFwiZGF0YS10ZXN0aWRcIjpgbWVudS1vcHRpb24tJHtyfWAsaWQ6YG1lbnUtb3B0aW9uLSR7ZS52YWx1ZX1gLHRpdGxlOmUudGl0bGUsb25DbGljazooKT0+e2Uub3ZlcnJpZGVPbkNsaWNrP2Uub3ZlcnJpZGVPbkNsaWNrKGUpOnMoZSksbnVsbD09aXx8aSgpfSxvbk1vdXNlT3ZlcjooKT0+eShlLnZhbHVlKX0se2NoaWxkcmVuOlsobnVsbD09ZT92b2lkIDA6ZS5pY29uVXJsKSYmKDAsby5qc3gpKHQuQnV0dG9uSW1hZ2Use3NyYzplLmljb25Vcmwsc3R5bGU6e21hcmdpblJpZ2h0OlwiOHB4XCJ9fSksKDAsby5qc3gpKGMuT3B0aW9uVGl0bGUse2NoaWxkcmVuOmUudGl0bGV9KSwobnVsbD09bj92b2lkIDA6bi52YWx1ZSk9PT1lLnZhbHVlPygwLG8uanN4KShmLHtpY29uOlwiQ2hlY2tJY29uXCJ9KTooMCxvLmpzeCkoZix7Y2hpbGRyZW46KDAsby5qc3gpKG8uRnJhZ21lbnQse30pfSldfSkscikpKV19LHIpKSldfSkpfTtjb25zdCB1PSgwLGkuZGVmYXVsdCkocy5Cb3gpYFxuICB3aWR0aDogJHsoe3dpZHRoOmUsZml0Q29udGVudDp0fSk9PmV8fCh0P1wiZml0LWNvbnRlbnRcIjpcIjEwMCVcIil9O1xuICBtYXgtaGVpZ2h0OiAkeyh7aGVpZ2h0OmV9KT0+bnVsbCE9ZT9lOlwiZml0LWNvbnRlbnRcIn07XG4gIHRvcDogJHsoe3RoZW1lOmV9KT0+YGNhbGMoMTAwJSArICR7ZS5weC54c21hbGx9KWB9O1xuICBib3gtc2hhZG93OiAwcHggNHB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDR9O1xuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgei1pbmRleDogMTA7XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIGJvcmRlcjogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dEJhY2tncm91bmR9O1xuICBwb3NpdGlvbjogJHsoe2Fic29sdXRlUG9zaXRpb246ZX0pPT5lP1wiYWJzb2x1dGVcIjpcImluaXRpYWxcIn07XG5gLGQ9KDAsaS5kZWZhdWx0KShzLkJveClgXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIGJvcmRlcjogJHsoe2lzRm9jdXNlZDplLHRoZW1lOnR9KT0+ZT9gMXB4IHNvbGlkICR7dC5wYWxldHRlLmJvcmRlck5ldXRyYWx9YDpcIjFweCBzb2xpZCB0cmFuc3BhcmVudFwifTtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIG91dGxpbmU6IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5gJHtlLnB4LnNtYWxsfSAke2UucHguc21hbGx9YH07XG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kMn07XG4gIH1cbmAscD0oMCxpLmRlZmF1bHQpKHMuQm94KWBcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogdHJhbnNwYXJlbnQ7XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dEhlbHB9O1xuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5gJHtlLnB4LnNtYWxsfSAke2UucHguc21hbGx9YH07XG5gLGY9KDAsaS5kZWZhdWx0KShsLkljb24pYFxuICBtYXJnaW4tbGVmdDogYXV0bztcbmAsaD0oMCxpLmRlZmF1bHQpKHMuQm94KWBcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dEJhY2tncm91bmR9O1xuYDt0LkJ1dHRvbkltYWdlPWkuZGVmYXVsdC5pbWdgXG4gIGhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS54bGFyZ2V9O1xuICB3aWR0aDogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS54bGFyZ2V9O1xuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG5gfSw3MjYxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlVG9vbHRpcD10LmlzRWxlbWVudE92ZXJmbG93bj10Lk9wdGlvblRpdGxlPXZvaWQgMDtjb25zdCBhPW4oNTg5MyksaT1uKDY2ODkpLGw9big3NzY5KSxzPW4oOTUwNyksYz1vKG4oNzUxOCkpO3QuT3B0aW9uVGl0bGU9ZT0+e3ZhcntjaGlsZHJlbjpufT1lLG89cihlLFtcImNoaWxkcmVuXCJdKTtyZXR1cm4oMCxhLmpzeCkodSxPYmplY3QuYXNzaWduKHtyZWY6KDAsdC51c2VUb29sdGlwKShuKX0sbyx7Y2hpbGRyZW46KDAsYS5qc3gpKFwiZGl2XCIse2NoaWxkcmVuOm59KX0pKX07Y29uc3QgdT0oMCxjLmRlZmF1bHQpKGwuVGV4dClgXG4gICR7cy5NaXhpbnMudGV4dE92ZXJmbG93fTtcbiAgbWFyZ2luLWxlZnQ6ICR7KHt0aGVtZTplfSk9PmUucHgueHNtYWxsfTtcbmA7ZnVuY3Rpb24gZChlKXtyZXR1cm4gZS5zY3JvbGxIZWlnaHQ+ZS5jbGllbnRIZWlnaHR8fGUuc2Nyb2xsV2lkdGg+ZS5jbGllbnRXaWR0aH10LmlzRWxlbWVudE92ZXJmbG93bj1kLHQudXNlVG9vbHRpcD1lPT4oMCxpLnVzZUNhbGxiYWNrKSgodD0+e3QmJmUmJmQodCkmJih0LnRpdGxlPWUpfSksW10pfSw3MDA2OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuSWNvbj12b2lkIDA7Y29uc3QgYT1uKDU4OTMpLGk9big2Njg5KSxsPW8obig3NTE4KSkscz1uKDEzMzUpLGM9big5NTA3KSx1PW4oMzQ3MSksZD1uKDk2NjkpLHA9KDAsaS5mb3J3YXJkUmVmKSgoKGUsdCk9Pnt2YXJ7dGFiSW5kZXg6bixpY29uOm8sY2hpbGRyZW46aSxzaXplOmw9XCJiYXNlXCIsY29udGFpbmVyU2l6ZTpzLFwiZGF0YS10ZXN0aWRcIjpjfT1lLHU9cihlLFtcInRhYkluZGV4XCIsXCJpY29uXCIsXCJjaGlsZHJlblwiLFwic2l6ZVwiLFwiY29udGFpbmVyU2l6ZVwiLFwiZGF0YS10ZXN0aWRcIl0pO3JldHVybigwLGEuanN4KShoLE9iamVjdC5hc3NpZ24oe30sdSx7aWNvblNpemU6bCxjb250YWluZXJTaXplOnN8fGwsanVzdGlmeUNvbnRlbnQ6XCJjZW50ZXJcIixhbGlnbkl0ZW1zOlwiY2VudGVyXCIsXCJkYXRhLXRlc3RpZFwiOmMsdGFiSW5kZXg6bixyZWY6dH0se2NoaWxkcmVuOm8/KDAsYS5qc3gpKGYsT2JqZWN0LmFzc2lnbih7YXJpYUxhYmVsOnVbXCJhcmlhLWxhYmVsXCJdLGljb246b30sdSkpOml9KSl9KSk7cC5kaXNwbGF5TmFtZT1cIkljb25cIix0Lkljb249KDAsbC5kZWZhdWx0KShwKWBgO2NvbnN0IGY9KDAsbC5kZWZhdWx0KSgoZT0+e3ZhcntpY29uOnQsYXJpYUxhYmVsOm59PWUsbz1yKGUsW1wiaWNvblwiLFwiYXJpYUxhYmVsXCJdKTtjb25zdCBpPXUuSWNvblNldFt0XTtyZXR1cm4oMCxhLmpzeCkoaSxPYmplY3QuYXNzaWduKHtyb2xlOlwiaW1nXCIsXCJhcmlhLWxhYmVsXCI6bn0sbykpfSkpYGAsaD0oMCxsLmRlZmF1bHQpKHMuQm94KWBcbiAgLyoqXG4gICAqIDEuIEluaXRpYWxpemUgbG9jYWwgdmFyaWFibGVzIHdpdGggcmVhc29uYWJsZSBkZWZhdWx0c1xuICAgKi9cbiAgLS1weC1kZWZhdWx0OiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLmJhc2V9O1xuXG4gIC8qKlxuICAgKiAyLiBJbmplY3QgdmFyaWFudHMgLS0gPyBXaGF0IGFyZSBWYXJpYW50c1xuICAgKi9cbiAgJHsoMCxjLmdldFZhcmlhbnRDU1MpKGQudmFyaWFudHMsZC5WYXJpYW50LmNvbnRhaW5lclNpemUpfVxuICAkeygwLGMuZ2V0VmFyaWFudENTUykoZC52YXJpYW50cyxkLlZhcmlhbnQuaWNvblNpemUpfVxuXG4gIHdpZHRoOiB2YXIoLS1weC1jb250YWluZXIsIHZhcigtLXB4LWRlZmF1bHQpKTtcbiAgaGVpZ2h0OiB2YXIoLS1weC1jb250YWluZXIsIHZhcigtLXB4LWRlZmF1bHQpKTtcblxuICAvKiBTVkcgQXNzZXQgKi9cblxuICAmID4gKixcbiAgJHtmfSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IHZhcigtLXB4LWljb24sIHZhcigtLXB4LWRlZmF1bHQpKTtcbiAgICBoZWlnaHQ6IHZhcigtLXB4LWljb24sIHZhcigtLXB4LWRlZmF1bHQpKTtcbiAgICBib3JkZXItcmFkaXVzOiBpbmhlcml0O1xuICB9XG5gfSw5NjY5OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnZhcmlhbnRzPXQuVmFyaWFudD12b2lkIDA7Y29uc3Qgcj1uKDc1MTgpO3QuVmFyaWFudD17aWNvblNpemU6XCJpY29uU2l6ZVwiLGNvbnRhaW5lclNpemU6XCJjb250YWluZXJTaXplXCJ9LHQudmFyaWFudHM9e1t0LlZhcmlhbnQuaWNvblNpemVdOnt4c21hbGw6ci5jc3NgXG4gICAgICAtLXB4LWljb246ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUueHNtYWxsfTtcbiAgICBgLHNtYWxsOnIuY3NzYFxuICAgICAgLS1weC1pY29uOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLnNtYWxsfTtcbiAgICBgLGJhc2U6ci5jc3NgXG4gICAgICAtLXB4LWljb246ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUuYmFzZX07XG4gICAgYCxsYXJnZTpyLmNzc2BcbiAgICAgIC0tcHgtaWNvbjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS5sYXJnZX07XG4gICAgYCx4bGFyZ2U6ci5jc3NgXG4gICAgICAtLXB4LWljb246ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUueGxhcmdlfTtcbiAgICBgLHh4bGFyZ2U6ci5jc3NgXG4gICAgICAtLXB4LWljb246ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUueHhsYXJnZX07XG4gICAgYCx4eHhsYXJnZTpyLmNzc2BcbiAgICAgIC0tcHgtaWNvbjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS54eHhsYXJnZX07XG4gICAgYH0sW3QuVmFyaWFudC5jb250YWluZXJTaXplXTp7eHNtYWxsOnIuY3NzYFxuICAgICAgLS1weC1jb250YWluZXI6ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUueHNtYWxsfTtcbiAgICBgLHNtYWxsOnIuY3NzYFxuICAgICAgLS1weC1jb250YWluZXI6ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUuc21hbGx9O1xuICAgIGAsYmFzZTpyLmNzc2BcbiAgICAgIC0tcHgtY29udGFpbmVyOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLmJhc2V9O1xuICAgIGAsbGFyZ2U6ci5jc3NgXG4gICAgICAtLXB4LWNvbnRhaW5lcjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS5sYXJnZX07XG4gICAgYCx4bGFyZ2U6ci5jc3NgXG4gICAgICAtLXB4LWNvbnRhaW5lcjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS54bGFyZ2V9O1xuICAgIGAseHhsYXJnZTpyLmNzc2BcbiAgICAgIC0tcHgtY29udGFpbmVyOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLnh4bGFyZ2V9O1xuICAgIGAseHh4bGFyZ2U6ci5jc3NgXG4gICAgICAtLXB4LWNvbnRhaW5lcjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS54eHhsYXJnZX07XG4gICAgYH19fSw5NjM0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig3MDA2KSx0KX0sOTI4NTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5CZWxsRmlsbGVkSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuQmVsbEZpbGxlZEljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4cykoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjIwXCIsaGVpZ2h0OlwiMjBcIix2aWV3Qm94OlwiMCAwIDI0IDI0XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LG4se2NoaWxkcmVuOlsoMCxvLmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMTIgMkMxMS4yMjk2IDIgMTAuNTg0NSAyLjU4Mzc5IDEwLjUwNzggMy4zNTA0MUMxMC40OTUyIDMuNDc2NzcgMTAuNDA1NyAzLjU4MTU3IDEwLjI4NDYgMy42MTk3MUM4LjA2NTU0IDQuMzE4NTEgNi40MjIzOCA2LjMzNzk2IDYuMzAwMzMgOC43Nzg5M0w2LjEyMzgyIDEyLjMwOTFDNi4wOTkzNiAxMi43OTgyIDUuODEzMzEgMTMuMjM2MiA1LjM3NTMgMTMuNDU1Mkw0LjYwNzM5IDEzLjgzOTJDNC4xNDc2MSAxNC4wNjkxIDMuODU3MTggMTQuNTM5IDMuODU3MTggMTUuMDUzMVYxNi4yNUMzLjg1NzE4IDE2LjYyNDggNC4xNjA5OCAxNi45Mjg2IDQuNTM1NzUgMTYuOTI4NkgxOS40NjQzQzE5LjgzOTEgMTYuOTI4NiAyMC4xNDI5IDE2LjYyNDggMjAuMTQyOSAxNi4yNVYxNS4wNTMxQzIwLjE0MjkgMTQuNTM5IDE5Ljg1MjUgMTQuMDY5MSAxOS4zOTI3IDEzLjgzOTJMMTguNjI0NyAxMy40NTUyQzE4LjE4NjcgMTMuMjM2MiAxNy45MDA2IDEyLjc5ODIgMTcuODc2MiAxMi4zMDkxTDE3LjY5OTcgOC43Nzg5M0MxNy41Nzc2IDYuMzM3OTYgMTUuOTM0NCA0LjMxODUxIDEzLjcxNTQgMy42MTk3MkMxMy41OTQyIDMuNTgxNTcgMTMuNTA0OCAzLjQ3Njc4IDEzLjQ5MjIgMy4zNTA0MUMxMy40MTU1IDIuNTgzOCAxMi43NzA0IDIgMTIgMlpcIixmaWxsOnR9KSwoMCxvLmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNOS4yODU3MSAxOC4yODU3QzkuMjg1NzEgMTkuNzg0OCAxMC41MDA5IDIxIDEyIDIxQzEzLjQ5OTEgMjEgMTQuNzE0MyAxOS43ODQ4IDE0LjcxNDMgMTguMjg1N0w5LjI4NTcxIDE4LjI4NTdaXCIsZmlsbDp0fSldfSkpfX0sNDcxODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5CZWxsSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuQmVsbEljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTcuNDczMDYgMS4yMjk0M0M2LjUxOTMgMS4yMjk0MyA1Ljg3MjkxIDEuOTgzOTkgNS42NTM3MSAyLjcyNjk3QzUuNjUyMDcgMi43MjkzMiA1LjY0OTIxIDIuNzMzMDMgNS42NDQ4NSAyLjczNzU2QzUuNjM5MiAyLjc0MzQyIDUuNjMyNjQgMi43NDg5NiA1LjYyNTk5IDIuNzUzNTVDNS42MTkyNiAyLjc1ODE5IDUuNjE0NTIgMi43NjA0IDUuNjEzIDIuNzYxMDJMNS42MTI2NSAyLjc2MTE3QzUuMDUwODggMi45OTI1MSA0LjM5MTkzIDMuMzYwMjIgMy44NzY5NyA0LjAzMzU3QzMuMzU4MTUgNC43MTE5NiAzLjAxOTQ5IDUuNjU1NzEgMy4wMTk0NSA2Ljk3NzQ5TDUuNjUzNzEgMi43MjY5N0wzLjAxOTQ1IDYuOTc3NzZDMy4wMTg2NiA4LjMwMTY1IDIuODc4NzEgOS4wMzEzIDIuNjcwOTEgOS41MzQzOUMyLjQ4ODc5IDkuOTc1MzEgMi4yNDg4OSAxMC4yNjU4IDEuOTEyIDEwLjY3MzhMMS45MTE4NSAxMC42NzRDMS44NjI2MyAxMC43MzM2IDEuODExMzUgMTAuNzk1NyAxLjc1Nzg3IDEwLjg2MTJDMS4xNDkyMyAxMS42MDYgMS43MjcyOSAxMi42NDE5IDIuNjU5ODYgMTIuNjQxOUg1LjA5MDE5QzUuMjExOTEgMTIuOTggNS40MDcyNiAxMy4yOTA2IDUuNjY2MTggMTMuNTQ5NUM2LjEyODI3IDE0LjAxMTYgNi43NTQ5OSAxNC4yNzEyIDcuNDA4NDggMTQuMjcxMkM4LjA2MTk3IDE0LjI3MTIgOC42ODg3IDE0LjAxMTYgOS4xNTA3OCAxMy41NDk1QzkuNDA5NzEgMTMuMjkwNiA5LjYwNTA1IDEyLjk4IDkuNzI2NzggMTIuNjQxOUgxMi4yODk0QzEzLjIyMzQgMTIuNjQxOSAxMy43OTIgMTEuNjAwOCAxMy4xODg0IDEwLjg2MTNMMTMuMTg4MyAxMC44NjEyQzEzLjEzNDggMTAuNzk1NyAxMy4wODM1IDEwLjczMzYgMTMuMDM0MiAxMC42NzRDMTIuNjk3MyAxMC4yNjU5IDEyLjQ1NzQgOS45NzU0IDEyLjI3NTUgOS41MzQ1MUMxMi4wNjc4IDkuMDMxNDcgMTEuOTI4MiA4LjMwMTgyIDExLjkyODIgNi45Nzc3NkMxMS45MjgyIDUuNjU2ODggMTEuNTg5MSA0LjcxMjk5IDExLjA3MDMgNC4wMzQzM0MxMC41NTUzIDMuMzYwNzUgOS44OTY1MiAyLjk5MjM0IDkuMzM0OTkgMi43NjExNUw5LjMzNDY3IDIuNzYxMDJDOS4zMzQwOSAyLjc2MDc5IDkuMzI5ODIgMi43NTg4OCA5LjMyMzEzIDIuNzU0MjRDOS4zMTY1NSAyLjc0OTY3IDkuMzA5ODEgMi43NDM5NCA5LjMwMzgyIDIuNzM3N0M5LjI5ODc1IDIuNzMyNDEgOS4yOTU0NSAyLjcyODAzIDkuMjkzNjMgMi43MjUzMUM5LjA3MjY0IDEuOTgzNzggOC40MjY5MSAxLjIyOTQzIDcuNDczMDYgMS4yMjk0M1pNOC42ODY1NCAxMi42NDE5SDYuMTMwNDJDNi4xODc2IDEyLjcyOTUgNi4yNTQwMyAxMi44MTE1IDYuMzI5MSAxMi44ODY2QzYuNjE1MzcgMTMuMTcyOSA3LjAwMzYzIDEzLjMzMzcgNy40MDg0OCAxMy4zMzM3QzcuODEzMzMgMTMuMzMzNyA4LjIwMTYgMTMuMTcyOSA4LjQ4Nzg3IDEyLjg4NjZDOC41NjI5MyAxMi44MTE1IDguNjI5MzcgMTIuNzI5NSA4LjY4NjU0IDEyLjY0MTlaTTYuNTUxNDUgMi45OTcxNkM2LjY5NTcxIDIuNTAwODUgNy4wNzEyMSAyLjE2NjkzIDcuNDczMDYgMi4xNjY5M0M3Ljg3NDkyIDIuMTY2OTMgOC4yNTA1IDIuNTAwNjEgOC4zOTY2IDIuOTk3ODVMOC4zOTY5NSAyLjk5OTA0QzguNDg0OTkgMy4yOTU3NSA4LjcyODQzIDMuNTI1MzggOC45NzgwOSAzLjYyODA2QzkuNDU2MjUgMy44MjQ5MiA5Ljk0ODk0IDQuMTExMTkgMTAuMzI1NSA0LjYwMzczQzEwLjY5ODIgNS4wOTExOSAxMC45OTA3IDUuODI0ODYgMTAuOTkwNyA2Ljk3Nzc2QzEwLjk5MDcgOC4zNTUwNiAxMS4xMzM3IDkuMjI1NSAxMS40MDg5IDkuODkyMTdDMTEuNjQ4MyAxMC40NzIzIDExLjk4MjMgMTAuODc0OSAxMi4zMTY3IDExLjI3OEMxMi4zNjUzIDExLjMzNjYgMTIuNDEzOSAxMS4zOTUxIDEyLjQ2MjIgMTEuNDU0MkMxMi41MDE2IDExLjUwMjUgMTIuNTA0NiAxMS41NTUyIDEyLjQ3OTMgMTEuNjA1QzEyLjQ1NTMgMTEuNjUyNCAxMi4zOTk2IDExLjcwNDQgMTIuMjg5NCAxMS43MDQ0SDIuNjU5ODZDMi41NDYwNCAxMS43MDQ0IDIuNDg5NTUgMTEuNjUwOSAyLjQ2NTg4IDExLjYwNDVDMi40NDExOSAxMS41NTYyIDIuNDQzMjUgMTEuNTA0IDIuNDgzOCAxMS40NTQ0TDIuNDgzODMgMTEuNDU0NEMyLjUzMjE1IDExLjM5NTIgMi41ODA3NSAxMS4zMzY2IDIuNjI5MzQgMTEuMjc4MUwyLjYyOTQ2IDExLjI3NzlDMi45NjM4OSAxMC44NzQ4IDMuMjk3ODUgMTAuNDcyMyAzLjUzNzQgOS44OTIyOUMzLjgxMjczIDkuMjI1NzEgMy45NTYxNSA4LjM1NTMzIDMuOTU2OTUgNi45NzgwM1Y2Ljk3Nzc2QzMuOTU2OTUgNS44MjM0MSA0LjI0OTI4IDUuMDg5OTkgNC42MjE2NSA0LjYwMzA5QzQuOTk3OTIgNC4xMTExIDUuNDkwNDQgMy44MjUzNyA1Ljk2OTYzIDMuNjI4MDVDNi4yMTY2MSAzLjUyNjQ1IDYuNDYyNTcgMy4zMDAwMiA2LjU1MTExIDIuOTk4MzNMNi41NTE0NSAyLjk5NzE2WlwiLGZpbGw6dCxyb2xlOlwiaW1nXCJ9KX0pKX19LDEzMjQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQm9va21hcmtGaWxsZWQ9dm9pZCAwO2NvbnN0IG89big1ODkzKTt0LkJvb2ttYXJrRmlsbGVkPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjEyXCIsaGVpZ2h0OlwiMTJcIix2aWV3Qm94OlwiMCAwIDEyIDEyXCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LG4se2NoaWxkcmVuOigwLG8uanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk0yLjgwMDA1IDEuMTc1NzhDMi41MjM5MSAxLjE3NTc4IDIuMzAwMDUgMS4zOTk2NCAyLjMwMDA1IDEuNjc1NzhWMTAuNDc1OEMyLjMwMDA1IDEwLjY2NjkgMi40MDkwNCAxMC44NDE0IDIuNTgwODYgMTAuOTI1MkMyLjc1MjY3IDExLjAwOSAyLjk1NzIzIDEwLjk4NzUgMy4xMDc4NyAxMC44Njk4TDUuODQ2MTQgOC43MzA1MkM1LjkzNjU4IDguNjU5ODYgNi4wNjM1MiA4LjY1OTg2IDYuMTUzOTYgOC43MzA1Mkw4Ljg5MjIzIDEwLjg2OThDOS4wNDI4NyAxMC45ODc1IDkuMjQ3NDIgMTEuMDA5IDkuNDE5MjQgMTAuOTI1MkM5LjU5MTA1IDEwLjg0MTQgOS43MDAwNSAxMC42NjY5IDkuNzAwMDUgMTAuNDc1OFYxLjY3NTc4QzkuNzAwMDUgMS4zOTk2NCA5LjQ3NjE5IDEuMTc1NzggOS4yMDAwNSAxLjE3NTc4SDIuODAwMDVaXCIsZmlsbDp0fSl9KSl9fSwxMTAzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkJvb2ttYXJrT3V0bGluZWQ9dm9pZCAwO2NvbnN0IG89big1ODkzKTt0LkJvb2ttYXJrT3V0bGluZWQ9ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTJcIixoZWlnaHQ6XCIxMlwiLHZpZXdCb3g6XCIwIDAgMTIgMTJcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTIuMjk5OTkgMS42NzU3OEMyLjI5OTk5IDEuMzk5NjQgMi41MjM4NSAxLjE3NTc4IDIuNzk5OTkgMS4xNzU3OEg5LjE5OTk5QzkuNDc2MTMgMS4xNzU3OCA5LjY5OTk5IDEuMzk5NjQgOS42OTk5OSAxLjY3NTc4VjEwLjQ3NThDOS42OTk5OSAxMC42NjY5IDkuNTkwOTkgMTAuODQxNCA5LjQxOTE4IDEwLjkyNTJDOS4yNDczNiAxMS4wMDkgOS4wNDI4MSAxMC45ODc1IDguODkyMTcgMTAuODY5OEw2LjE1MzkgOC43MzA1MkM2LjA2MzQ2IDguNjU5ODYgNS45MzY1MiA4LjY1OTg2IDUuODQ2MDggOC43MzA1MkwzLjEwNzgxIDEwLjg2OThDMi45NTcxNyAxMC45ODc1IDIuNzUyNjEgMTEuMDA5IDIuNTgwOCAxMC45MjUyQzIuNDA4OTggMTAuODQxNCAyLjI5OTk5IDEwLjY2NjkgMi4yOTk5OSAxMC40NzU4VjEuNjc1NzhaTTMuMjk5OTkgMi4xNzU3OFY5LjQ1MDY2TDUuMjMwNDMgNy45NDI1QzUuNjgyNjUgNy41ODkyMSA2LjMxNzMzIDcuNTg5MiA2Ljc2OTU0IDcuOTQyNUw4LjY5OTk5IDkuNDUwNjZWMi4xNzU3OEgzLjI5OTk5WlwiLGZpbGw6dH0pfSkpfX0sODI2NTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Ccm9rZW5MaW5rSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuQnJva2VuTGlua0ljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4cykoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjMyXCIsaGVpZ2h0OlwiMzJcIix2aWV3Qm94OlwiMCAwIDMyIDMyXCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LG4se2NoaWxkcmVuOlsoMCxvLmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNNi4zMzM1IDMuNzAwMkM2LjA1NzM1IDMuNzAwMiA1LjgzMzUgMy45MjQwNSA1LjgzMzUgNC4yMDAyVjI3LjgwMDJDNS44MzM1IDI4LjA3NjMgNi4wNTczNSAyOC4zMDAyIDYuMzMzNSAyOC4zMDAySDI1LjY2NjhDMjUuOTQzIDI4LjMwMDIgMjYuMTY2OCAyOC4wNzYzIDI2LjE2NjggMjcuODAwMlYxMi4yMzM1SDE4LjEzMzVDMTcuODU3NCAxMi4yMzM1IDE3LjYzMzUgMTIuMDA5NyAxNy42MzM1IDExLjczMzVWMy43MDAySDYuMzMzNVpNMTguNjMzNSA0LjQwNzNMMjUuNDU5NyAxMS4yMzM1SDE4LjYzMzVWNC40MDczWk00LjgzMzUgNC4yMDAyQzQuODMzNSAzLjM3MTc3IDUuNTA1MDcgMi43MDAyIDYuMzMzNSAyLjcwMDJIMTguMTMzNUMxOC4yNjYxIDIuNzAwMiAxOC4zOTMzIDIuNzUyODcgMTguNDg3IDIuODQ2NjRMMjcuMDIwNCAxMS4zOEMyNy4xMTQxIDExLjQ3MzcgMjcuMTY2OCAxMS42MDA5IDI3LjE2NjggMTEuNzMzNVYyNy44MDAyQzI3LjE2NjggMjguNjI4NiAyNi40OTUzIDI5LjMwMDIgMjUuNjY2OCAyOS4zMDAySDYuMzMzNUM1LjUwNTA3IDI5LjMwMDIgNC44MzM1IDI4LjYyODYgNC44MzM1IDI3LjgwMDJWNC4yMDAyWlwiLGZpbGw6dH0pLCgwLG8uanN4KShcInBhdGhcIix7ZDpcIk0xNC4yNDggMjEuOTA4NFYyMS44NDA5QzE0LjI1MjggMjEuNDAwNiAxNC4yOTY2IDIxLjA1MDIgMTQuMzc5NCAyMC43ODk4QzE0LjQ2NDcgMjAuNTI5NCAxNC41ODU0IDIwLjMxODcgMTQuNzQxNyAyMC4xNTc3QzE0Ljg5NzkgMTkuOTk2NyAxNS4wODYxIDE5Ljg0OTkgMTUuMzA2MyAxOS43MTczQzE1LjQ0ODMgMTkuNjI3NCAxNS41NzYyIDE5LjUyNjggMTUuNjg5OCAxOS40MTU1QzE1LjgwMzQgMTkuMzA0MiAxNS44OTM0IDE5LjE3NjQgMTUuOTU5NyAxOS4wMzJDMTYuMDI2IDE4Ljg4NzUgMTYuMDU5MSAxOC43Mjc3IDE2LjA1OTEgMTguNTUyNkMxNi4wNTkxIDE4LjM0MTkgMTYuMDA5NCAxOC4xNTk2IDE1LjkxIDE4LjAwNTdDMTUuODEwNSAxNy44NTE4IDE1LjY3OCAxNy43MzM0IDE1LjUxMjMgMTcuNjUwNkMxNS4zNDg5IDE3LjU2NTMgMTUuMTY2NiAxNy41MjI3IDE0Ljk2NTQgMTcuNTIyN0MxNC43ODMxIDE3LjUyMjcgMTQuNjA5MSAxNy41NjA2IDE0LjQ0MzQgMTcuNjM2NEMxNC4yNzc2IDE3LjcxMjEgMTQuMTQwMyAxNy44MzA1IDE0LjAzMTQgMTcuOTkxNUMxMy45MjI1IDE4LjE1MDEgMTMuODU5OCAxOC4zNTQ5IDEzLjg0MzIgMTguNjA1OEgxMi43NjM3QzEyLjc4MDIgMTguMTc5NyAxMi44ODggMTcuODE5OCAxMy4wODY4IDE3LjUyNjNDMTMuMjg1NyAxNy4yMzA0IDEzLjU0ODUgMTcuMDA2NiAxMy44NzUyIDE2Ljg1NTFDMTQuMjA0MiAxNi43MDM2IDE0LjU2NzYgMTYuNjI3OCAxNC45NjU0IDE2LjYyNzhDMTUuNDAxIDE2LjYyNzggMTUuNzgyMSAxNi43MDk1IDE2LjEwODggMTYuODcyOUMxNi40MzU1IDE3LjAzMzkgMTYuNjg4OSAxNy4yNTk5IDE2Ljg2ODggMTcuNTUxMUMxNy4wNTExIDE3Ljg0IDE3LjE0MjIgMTguMTc3MyAxNy4xNDIyIDE4LjU2MzJDMTcuMTQyMiAxOC44Mjg0IDE3LjEwMDggMTkuMDY3NSAxNy4wMTc5IDE5LjI4MDVDMTYuOTM1MSAxOS40OTEyIDE2LjgxNjcgMTkuNjc5NSAxNi42NjI4IDE5Ljg0NTJDMTYuNTExMyAyMC4wMTA5IDE2LjMyOSAyMC4xNTc3IDE2LjExNTkgMjAuMjg1NUMxNS45MTQ3IDIwLjQxMSAxNS43NTE0IDIwLjU0MTIgMTUuNjI1OSAyMC42NzYxQzE1LjUwMjggMjAuODExMSAxNS40MTI4IDIwLjk3MDkgMTUuMzU2IDIxLjE1NTVDMTUuMjk5MiAyMS4zNDAyIDE1LjI2ODQgMjEuNTY4NyAxNS4yNjM3IDIxLjg0MDlWMjEuOTA4NEgxNC4yNDhaTTE0Ljc4NDMgMjQuMDY3NUMxNC41OTAxIDI0LjA2NzUgMTQuNDIzMiAyMy45OTg4IDE0LjI4MzYgMjMuODYxNUMxNC4xNDM5IDIzLjcyMTggMTQuMDc0IDIzLjU1MzcgMTQuMDc0IDIzLjM1NzJDMTQuMDc0IDIzLjE2MzEgMTQuMTQzOSAyMi45OTc0IDE0LjI4MzYgMjIuODYwMUMxNC40MjMyIDIyLjcyMDQgMTQuNTkwMSAyMi42NTA2IDE0Ljc4NDMgMjIuNjUwNkMxNC45NzYgMjIuNjUwNiAxNS4xNDE3IDIyLjcyMDQgMTUuMjgxNCAyMi44NjAxQzE1LjQyMzUgMjIuOTk3NCAxNS40OTQ1IDIzLjE2MzEgMTUuNDk0NSAyMy4zNTcyQzE1LjQ5NDUgMjMuNDg3NSAxNS40NjE0IDIzLjYwNyAxNS4zOTUxIDIzLjcxNTlDMTUuMzMxMSAyMy44MjI0IDE1LjI0NTkgMjMuOTA3NyAxNS4xMzk0IDIzLjk3MTZDMTUuMDMyOCAyNC4wMzU1IDE0LjkxNDUgMjQuMDY3NSAxNC43ODQzIDI0LjA2NzVaXCIsZmlsbDp0fSldfSkpfX0sNjQ0NzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DaGV2cm9uRG93bkljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0LkNoZXZyb25Eb3duSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7eG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHdpZHRoOlwiMjRcIixoZWlnaHQ6XCIyNFwiLHZpZXdCb3g6XCIwIDAgMjQgMjRcIixmaWxsOlwibm9uZVwifSx7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLE9iamVjdC5hc3NpZ24oe2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNNS4wNTI4MiA5Ljg4NzA3QzUuMzM2MTIgOS41ODQ4OSA1LjgxMDc1IDkuNTY5NTggNi4xMTI5MyA5Ljg1Mjg3TDEyIDE1LjM3MkwxNy44ODcgOS44NTI4N0MxOC4xODkyIDkuNTY5NTggMTguNjYzOCA5LjU4NDg5IDE4Ljk0NzEgOS44ODcwN0MxOS4yMzA0IDEwLjE4OTMgMTkuMjE1MSAxMC42NjM5IDE4LjkxMjkgMTAuOTQ3MkwxMi41MTI5IDE2Ljk0NzJDMTIuMjI0NCAxNy4yMTc2IDExLjc3NTUgMTcuMjE3NiAxMS40ODcgMTYuOTQ3Mkw1LjA4NzAyIDEwLjk0NzJDNC43ODQ4NCAxMC42NjM5IDQuNzY5NTIgMTAuMTg5MyA1LjA1MjgyIDkuODg3MDdaXCIsZmlsbDp0fSxuKSl9KSl9fSwyMTQ3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNoZXZyb25MZWZ0SWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuQ2hldnJvbkxlZnRJY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsd2lkdGg6XCIyNFwiLGhlaWdodDpcIjI0XCIsdmlld0JveDpcIjAgMCAyNCAyNFwiLGZpbGw6XCJub25lXCJ9LHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIsT2JqZWN0LmFzc2lnbih7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk0xNC4xMTI3IDUuMDUyNzJDMTQuNDE0OSA1LjMzNjAxIDE0LjQzMDIgNS44MTA2NCAxNC4xNDY5IDYuMTEyODJMOC42Mjc4NCAxMS45OTk5TDE0LjE0NjkgMTcuODg2OUMxNC40MzAyIDE4LjE4OTEgMTQuNDE0OSAxOC42NjM3IDE0LjExMjcgMTguOTQ3QzEzLjgxMDYgMTkuMjMwMyAxMy4zMzU5IDE5LjIxNSAxMy4wNTI2IDE4LjkxMjhMNy4wNTI2NCAxMi41MTI4QzYuNzgyMTggMTIuMjI0MyA2Ljc4MjE4IDExLjc3NTQgNy4wNTI2NCAxMS40ODY5TDEzLjA1MjYgNS4wODY5MUMxMy4zMzU5IDQuNzg0NzMgMTMuODEwNiA0Ljc2OTQyIDE0LjExMjcgNS4wNTI3MlpcIixmaWxsOnR9LG4pKX0pKX19LDI0MDI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2hldnJvblJpZ2h0SWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuQ2hldnJvblJpZ2h0SWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7eG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHdpZHRoOlwiMjRcIixoZWlnaHQ6XCIyNFwiLHZpZXdCb3g6XCIwIDAgMjQgMjRcIixmaWxsOlwibm9uZVwifSx7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLE9iamVjdC5hc3NpZ24oe2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNOS44ODc2MiA1LjA1MjU2QzEwLjE4OTggNC43NjkyNiAxMC42NjQ0IDQuNzg0NTcgMTAuOTQ3NyA1LjA4Njc2TDE2Ljk0NzcgMTEuNDg2OEMxNy4yMTgyIDExLjc3NTMgMTcuMjE4MiAxMi4yMjQyIDE2Ljk0NzcgMTIuNTEyN0wxMC45NDc3IDE4LjkxMjdDMTAuNjY0NCAxOS4yMTQ5IDEwLjE4OTggMTkuMjMwMiA5Ljg4NzYyIDE4Ljk0NjlDOS41ODU0MyAxOC42NjM2IDkuNTcwMTIgMTguMTg4OSA5Ljg1MzQyIDE3Ljg4NjhMMTUuMzcyNSAxMS45OTk3TDkuODUzNDIgNi4xMTI2N0M5LjU3MDEyIDUuODEwNDkgOS41ODU0NCA1LjMzNTg2IDkuODg3NjIgNS4wNTI1NlpcIixmaWxsOnR9LG4pKX0pKX19LDQ4MjU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2hldnJvblVwSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuQ2hldnJvblVwSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7eG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHdpZHRoOlwiMjRcIixoZWlnaHQ6XCIyNFwiLHZpZXdCb3g6XCIwIDAgMjQgMjRcIixmaWxsOlwibm9uZVwifSx7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLE9iamVjdC5hc3NpZ24oe2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNNS4wNTI4NSAxNC4xMTI5QzUuMzM2MTUgMTQuNDE1MSA1LjgxMDc4IDE0LjQzMDQgNi4xMTI5NiAxNC4xNDcxTDEyIDguNjI4MDJMMTcuODg3IDE0LjE0NzFDMTguMTg5MiAxNC40MzA0IDE4LjY2MzkgMTQuNDE1MSAxOC45NDcyIDE0LjExMjlDMTkuMjMwNSAxMy44MTA3IDE5LjIxNTEgMTMuMzM2MSAxOC45MTMgMTMuMDUyOEwxMi41MTMgNy4wNTI4MkMxMi4yMjQ1IDYuNzgyMzYgMTEuNzc1NSA2Ljc4MjM2IDExLjQ4NzEgNy4wNTI4Mkw1LjA4NzA1IDEzLjA1MjhDNC43ODQ4NyAxMy4zMzYxIDQuNzY5NTYgMTMuODEwNyA1LjA1Mjg1IDE0LjExMjlaXCIsZmlsbDp0fSxuKSl9KSl9fSwxMjgxOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkV4Y2xhbWF0aW9uQ2lyY2xlZEZpbGxlZEljb249dm9pZCAwO2NvbnN0IHI9big1ODkzKTt0LkV4Y2xhbWF0aW9uQ2lyY2xlZEZpbGxlZEljb249ZT0+KDAsci5qc3hzKShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTZcIixoZWlnaHQ6XCIxN1wiLHZpZXdCb3g6XCIwIDAgMTYgMTdcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSx7Y2hpbGRyZW46WygwLHIuanN4KShcInBhdGhcIix7ZDpcIk03Ljk5OTg4IDE1LjMzMTdDMTEuNzcyOSAxNS4zMzE3IDE0LjgzMTYgMTIuMjczMSAxNC44MzE2IDguNTAwMDdDMTQuODMxNiA0LjcyNzA0IDExLjc3MjkgMS42Njg0IDcuOTk5ODggMS42Njg0QzQuMjI2ODYgMS42Njg0IDEuMTY4MjEgNC43MjcwNCAxLjE2ODIxIDguNTAwMDdDMS4xNjgyMSAxMi4yNzMxIDQuMjI2ODYgMTUuMzMxNyA3Ljk5OTg4IDE1LjMzMTdaXCIsZmlsbDpcInJlZFwifSksKDAsci5qc3gpKFwibWFza1wiLE9iamVjdC5hc3NpZ24oe2lkOlwicGF0aC0yLWluc2lkZS0xXzZfMjYyMDMzXCIsZmlsbDpcIndoaXRlXCJ9LHtjaGlsZHJlbjooMCxyLmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNNy45OTk5MyA0LjM3Mzg0QzcuNTc1MjUgNC4zNzM4NCA3LjIzNTY0IDQuNzI2NzYgNy4yNTE5NiA1LjE1MTEzTDcuNDIyOTYgOS41OTcwNkM3LjQzNDg5IDkuOTA3MDggNy42ODk2OCAxMC4xNTIzIDcuOTk5OTMgMTAuMTUyM0M4LjMxMDE5IDEwLjE1MjMgOC41NjQ5OCA5LjkwNzA4IDguNTc2OSA5LjU5NzA2TDguNzQ3OSA1LjE1MTEzQzguNzY0MjIgNC43MjY3NiA4LjQyNDYxIDQuMzczODQgNy45OTk5MyA0LjM3Mzg0Wk03Ljk5OTkzIDEyLjY0MDZDOC40NjAyMiAxMi42NDA2IDguODMzMzUgMTIuMjY3NSA4LjgzMzM1IDExLjgwNzJDOC44MzMzNSAxMS4zNDY5IDguNDYwMjIgMTAuOTczOCA3Ljk5OTkzIDEwLjk3MzhDNy41Mzk2NCAxMC45NzM4IDcuMTY2NSAxMS4zNDY5IDcuMTY2NSAxMS44MDcyQzcuMTY2NSAxMi4yNjc1IDcuNTM5NjQgMTIuNjQwNiA3Ljk5OTkzIDEyLjY0MDZaXCJ9KX0pKSwoMCxyLmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNNy45OTk5MyA0LjM3Mzg0QzcuNTc1MjUgNC4zNzM4NCA3LjIzNTY0IDQuNzI2NzYgNy4yNTE5NiA1LjE1MTEzTDcuNDIyOTYgOS41OTcwNkM3LjQzNDg5IDkuOTA3MDggNy42ODk2OCAxMC4xNTIzIDcuOTk5OTMgMTAuMTUyM0M4LjMxMDE5IDEwLjE1MjMgOC41NjQ5OCA5LjkwNzA4IDguNTc2OSA5LjU5NzA2TDguNzQ3OSA1LjE1MTEzQzguNzY0MjIgNC43MjY3NiA4LjQyNDYxIDQuMzczODQgNy45OTk5MyA0LjM3Mzg0Wk03Ljk5OTkzIDEyLjY0MDZDOC40NjAyMiAxMi42NDA2IDguODMzMzUgMTIuMjY3NSA4LjgzMzM1IDExLjgwNzJDOC44MzMzNSAxMS4zNDY5IDguNDYwMjIgMTAuOTczOCA3Ljk5OTkzIDEwLjk3MzhDNy41Mzk2NCAxMC45NzM4IDcuMTY2NSAxMS4zNDY5IDcuMTY2NSAxMS44MDcyQzcuMTY2NSAxMi4yNjc1IDcuNTM5NjQgMTIuNjQwNiA3Ljk5OTkzIDEyLjY0MDZaXCIsZmlsbDpcIndoaXRlXCJ9KSwoMCxyLmpzeCkoXCJwYXRoXCIse2Q6XCJNNy4yNTE5NiA1LjE1MTEzTDUuNjQ4NzQgNS4yMTI3OUw1LjY0ODc0IDUuMjEyNzlMNy4yNTE5NiA1LjE1MTEzWk03LjQyMjk2IDkuNTk3MDZMOS4wMjYxOCA5LjUzNTRMOS4wMjYxOCA5LjUzNTRMNy40MjI5NiA5LjU5NzA2Wk04LjU3NjkgOS41OTcwNkwxMC4xODAxIDkuNjU4NzJMOC41NzY5IDkuNTk3MDZaTTguNzQ3OSA1LjE1MTEzTDEwLjM1MTEgNS4yMTI3OUwxMC4zNTExIDUuMjEyNzlMOC43NDc5IDUuMTUxMTNaTTguODU1MTkgNS4wODk0N0M4Ljg3Mzg1IDUuNTc0NyA4LjQ4NTUzIDUuOTc4MjUgNy45OTk5MyA1Ljk3ODI1VjIuNzY5NDNDNi42NjQ5OCAyLjc2OTQzIDUuNTk3NDQgMy44Nzg4MiA1LjY0ODc0IDUuMjEyNzlMOC44NTUxOSA1LjA4OTQ3Wk05LjAyNjE4IDkuNTM1NEw4Ljg1NTE5IDUuMDg5NDdMNS42NDg3NCA1LjIxMjc5TDUuODE5NzQgOS42NTg3Mkw5LjAyNjE4IDkuNTM1NFpNNy45OTk5MyA4LjU0Nzg2QzguNTUxNzcgOC41NDc4NiA5LjAwNDk4IDguOTgzOTYgOS4wMjYxOCA5LjUzNTRMNS44MTk3NCA5LjY1ODcyQzUuODY0OCAxMC44MzAyIDYuODI3NTggMTEuNzU2NyA3Ljk5OTkzIDExLjc1NjdWOC41NDc4NlpNNi45NzM2OCA5LjUzNTRDNi45OTQ4OSA4Ljk4Mzk2IDcuNDQ4MDkgOC41NDc4NiA3Ljk5OTkzIDguNTQ3ODZWMTEuNzU2N0M5LjE3MjI4IDExLjc1NjcgMTAuMTM1MSAxMC44MzAyIDEwLjE4MDEgOS42NTg3Mkw2Ljk3MzY4IDkuNTM1NFpNNy4xNDQ2OCA1LjA4OTQ3TDYuOTczNjggOS41MzU0TDEwLjE4MDEgOS42NTg3MkwxMC4zNTExIDUuMjEyNzlMNy4xNDQ2OCA1LjA4OTQ3Wk03Ljk5OTkzIDUuOTc4MjVDNy41MTQzNCA1Ljk3ODI1IDcuMTI2MDIgNS41NzQ3IDcuMTQ0NjggNS4wODk0N0wxMC4zNTExIDUuMjEyNzlDMTAuNDAyNCAzLjg3ODgyIDkuMzM0ODkgMi43Njk0MyA3Ljk5OTkzIDIuNzY5NDNWNS45NzgyNVpNNy4yMjg5NSAxMS44MDcyQzcuMjI4OTUgMTEuMzgxNCA3LjU3NDEzIDExLjAzNjIgNy45OTk5MyAxMS4wMzYyVjE0LjI0NUM5LjM0NjMxIDE0LjI0NSAxMC40Mzc4IDEzLjE1MzYgMTAuNDM3OCAxMS44MDcySDcuMjI4OTVaTTcuOTk5OTMgMTIuNTc4MkM3LjU3NDEzIDEyLjU3ODIgNy4yMjg5NSAxMi4yMzMgNy4yMjg5NSAxMS44MDcySDEwLjQzNzhDMTAuNDM3OCAxMC40NjA4IDkuMzQ2MzEgOS4zNjkzNyA3Ljk5OTkzIDkuMzY5MzdWMTIuNTc4MlpNOC43NzA5MSAxMS44MDcyQzguNzcwOTEgMTIuMjMzIDguNDI1NzMgMTIuNTc4MiA3Ljk5OTkzIDEyLjU3ODJWOS4zNjkzN0M2LjY1MzU1IDkuMzY5MzcgNS41NjIxIDEwLjQ2MDggNS41NjIxIDExLjgwNzJIOC43NzA5MVpNNy45OTk5MyAxMS4wMzYyQzguNDI1NzMgMTEuMDM2MiA4Ljc3MDkxIDExLjM4MTQgOC43NzA5MSAxMS44MDcySDUuNTYyMUM1LjU2MjEgMTMuMTUzNiA2LjY1MzU1IDE0LjI0NSA3Ljk5OTkzIDE0LjI0NVYxMS4wMzYyWlwiLGZpbGw6XCJ3aGl0ZVwiLG1hc2s6XCJ1cmwoI3BhdGgtMi1pbnNpZGUtMV82XzI2MjAzMylcIn0pXX0pKX0sMTQwOTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5GYWxsYmFja0dsb2JlSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuRmFsbGJhY2tHbG9iZUljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTZcIixoZWlnaHQ6XCIxNlwiLHZpZXdCb3g6XCIwIDAgMTYgMTZcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTE0LjQxNDEgNS4xOTk5OEMxMy41OTM3IDMuMzMwNjIgMTEuOTc4OCAxLjg4NTgyIDkuOTk4ODYgMS4yOTQzMkMxMC42MTc3IDIuMjYyMDcgMTEuMDUxNyAzLjY2MzQ3IDExLjI4ODYgNS4xOTk5OEgxNC40MTQxWk0xNC43NzcxIDkuNzQ5OThDMTQuOTIyIDkuMTkwMzMgMTUgOC42MDQ0MyAxNSA3Ljk5OTk4QzE1IDcuMzk1NTMgMTQuOTIyIDYuODA5NjMgMTQuNzc3MSA2LjI0OTk4SDExLjQxNzFDMTEuNDcxMyA2LjgyOTIzIDExLjUgNy40MTY4OCAxMS41IDcuOTk5OThDMTEuNSA4LjU4MzA4IDExLjQ3MTMgOS4xNzA3MyAxMS40MTcxIDkuNzQ5OThIMTQuNzc3MVpNNC41MDAwMSA3Ljk5OTk4QzQuNTAwMDEgNy40MTY4OCA0LjUyODcxIDYuODI5MjMgNC41ODI5NiA2LjI0OTk4SDEuMjIyOTVDMS4wNzgwNSA2LjgwOTYzIDEgNy4zOTU1MyAxIDcuOTk5OThDMSA4LjYwNDQzIDEuMDc4MDUgOS4xOTAzMyAxLjIyMjk1IDkuNzQ5OThINC41ODI5NkM0LjUyODcxIDkuMTcwNzMgNC41MDAwMSA4LjU4MzA4IDQuNTAwMDEgNy45OTk5OFpNMTAuNDUgNy45OTk5OEMxMC40NSA3LjM4OTU4IDEwLjQxNjggNi44MDY0OCAxMC4zNjE4IDYuMjQ5OThINS42MzgyMUM1LjU4MzI2IDYuODA2NDggNS41NTAwMSA3LjM4OTU4IDUuNTUwMDEgNy45OTk5OEM1LjU1MDAxIDguNjEwMzggNS41ODMyNiA5LjE5MzQ4IDUuNjM4MjEgOS43NDk5OEgxMC4zNjE4QzEwLjQxNjggOS4xOTM0OCAxMC40NSA4LjYxMDM4IDEwLjQ1IDcuOTk5OThaTTEwLjIyNjcgNS4xOTk5OEM5LjgwNzQxIDIuNjc3MTcgOC44NjU1NiAwLjk5OTk2OSA4LjAwMDAxIDAuOTk5OTY5QzcuMTM0NDYgMC45OTk5NjkgNi4xOTI2MSAyLjY3NzE3IDUuNzczMzEgNS4xOTk5OEgxMC4yMjY3Wk01Ljc3MzMxIDEwLjhDNi4xOTI2MSAxMy4zMjI4IDcuMTM0ODEgMTUgOC4wMDAwMSAxNUM4Ljg2NTIxIDE1IDkuODA3NDEgMTMuMzIyOCAxMC4yMjY3IDEwLjhINS43NzMzMVpNNC43MTE0MSA1LjE5OTk4QzQuOTQ4MzYgMy42NjM0NyA1LjM4MjM2IDIuMjYyMDcgNi4wMDExNiAxLjI5NDMyQzQuMDIxMiAxLjg4NTgyIDIuNDA2MyAzLjMzMDYyIDEuNTg1OSA1LjE5OTk4SDQuNzExNDFaTTExLjI4ODYgMTAuOEMxMS4wNTE3IDEyLjMzNjUgMTAuNjE3NyAxMy43Mzc5IDkuOTk4ODYgMTQuNzA1NkMxMS45Nzg4IDE0LjExNDEgMTMuNTkzNyAxMi42Njk3IDE0LjQxNDEgMTAuOEgxMS4yODg2Wk0xLjU4NTkgMTAuOEMyLjQwNjMgMTIuNjY5MyA0LjAyMTIgMTQuMTE0MSA2LjAwMTE2IDE0LjcwNTZDNS4zODIzNiAxMy43Mzc5IDQuOTQ4MzYgMTIuMzM2NSA0LjcxMTQxIDEwLjhIMS41ODU5WlwiLGZpbGw6dCxmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pfSkpfX0sNzQyOTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5GaWxsZWRDaXJjbGVJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5GaWxsZWRDaXJjbGVJY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTZcIix2aWV3Qm94OlwiMCAwIDE2IDE2XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LG4se2NoaWxkcmVuOigwLG8uanN4KShcImdcIixPYmplY3QuYXNzaWduKHtpZDpcIi5TbG90XCJ9LHtjaGlsZHJlbjooMCxvLmpzeCkoXCJjaXJjbGVcIix7aWQ6XCJFbGxpcHNlIDFcIixjeDpcIjhcIixjeTpcIjhcIixyOlwiOFwiLGZpbGw6dH0pfSkpfSkpfX0sNjc5NTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5GaWx0ZXJJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5GaWx0ZXJJY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjEyXCIsaGVpZ2h0OlwiN1wiLHZpZXdCb3g6XCIwIDAgMTIgN1wiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNNCA2LjVDNCA2LjM2NzM5IDQuMDUyNjggNi4yNDAyMSA0LjE0NjQ1IDYuMTQ2NDVDNC4yNDAyMSA2LjA1MjY4IDQuMzY3MzkgNiA0LjUgNkg3LjVDNy42MzI2MSA2IDcuNzU5NzkgNi4wNTI2OCA3Ljg1MzU1IDYuMTQ2NDVDNy45NDczMiA2LjI0MDIxIDggNi4zNjczOSA4IDYuNUM4IDYuNjMyNjEgNy45NDczMiA2Ljc1OTc5IDcuODUzNTUgNi44NTM1NUM3Ljc1OTc5IDYuOTQ3MzIgNy42MzI2MSA3IDcuNSA3SDQuNUM0LjM2NzM5IDcgNC4yNDAyMSA2Ljk0NzMyIDQuMTQ2NDUgNi44NTM1NUM0LjA1MjY4IDYuNzU5NzkgNCA2LjYzMjYxIDQgNi41Wk0yIDMuNUMyIDMuMzY3MzkgMi4wNTI2OCAzLjI0MDIxIDIuMTQ2NDUgMy4xNDY0NUMyLjI0MDIxIDMuMDUyNjggMi4zNjczOSAzIDIuNSAzSDkuNUM5LjYzMjYxIDMgOS43NTk3OSAzLjA1MjY4IDkuODUzNTUgMy4xNDY0NUM5Ljk0NzMyIDMuMjQwMjEgMTAgMy4zNjczOSAxMCAzLjVDMTAgMy42MzI2MSA5Ljk0NzMyIDMuNzU5NzkgOS44NTM1NSAzLjg1MzU1QzkuNzU5NzkgMy45NDczMiA5LjYzMjYxIDQgOS41IDRIMi41QzIuMzY3MzkgNCAyLjI0MDIxIDMuOTQ3MzIgMi4xNDY0NSAzLjg1MzU1QzIuMDUyNjggMy43NTk3OSAyIDMuNjMyNjEgMiAzLjVaTTAgMC41QzAgMC4zNjczOTIgMC4wNTI2Nzg1IDAuMjQwMjE1IDAuMTQ2NDQ3IDAuMTQ2NDQ3QzAuMjQwMjE1IDAuMDUyNjc4NSAwLjM2NzM5MiAwIDAuNSAwSDExLjVDMTEuNjMyNiAwIDExLjc1OTggMC4wNTI2Nzg1IDExLjg1MzYgMC4xNDY0NDdDMTEuOTQ3MyAwLjI0MDIxNSAxMiAwLjM2NzM5MiAxMiAwLjVDMTIgMC42MzI2MDggMTEuOTQ3MyAwLjc1OTc4NSAxMS44NTM2IDAuODUzNTUzQzExLjc1OTggMC45NDczMjEgMTEuNjMyNiAxIDExLjUgMUgwLjVDMC4zNjczOTIgMSAwLjI0MDIxNSAwLjk0NzMyMSAwLjE0NjQ0NyAwLjg1MzU1M0MwLjA1MjY3ODUgMC43NTk3ODUgMCAwLjYzMjYwOCAwIDAuNVpcIixmaWxsOnR9KX0pKX19LDExNzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5GbG9wcHlEaXNrSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuRmxvcHB5RGlza0ljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTJcIixoZWlnaHQ6XCIxMlwiLHZpZXdCb3g6XCIwIDAgMTIgMTJcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTEuODc1IDIuMTg3NUMxLjg3NSAyLjE1Mjk4IDEuOTAyOTggMi4xMjUgMS45Mzc1IDIuMTI1SDguMjMwMzlDOC4yNDY5NyAyLjEyNSA4LjI2Mjg3IDIuMTMxNTggOC4yNzQ1OSAyLjE0MzMxTDkuOTgxNjkgMy44NTA0MUM5Ljk5MzQxIDMuODYyMTMgMTAgMy44NzgwMyAxMCAzLjg5NDYxVjEwLjE4NzVDMTAgMTAuMjIyIDkuOTcyMDIgMTAuMjUgOS45Mzc1IDEwLjI1SDEuOTM3NUMxLjkwMjk4IDEwLjI1IDEuODc1IDEwLjIyMiAxLjg3NSAxMC4xODc1VjIuMTg3NVpNMS45Mzc1IDEuMjVDMS40MTk3MyAxLjI1IDEgMS42Njk3MyAxIDIuMTg3NVYxMC4xODc1QzEgMTAuNzA1MyAxLjQxOTczIDExLjEyNSAxLjkzNzUgMTEuMTI1SDkuOTM3NUMxMC40NTUzIDExLjEyNSAxMC44NzUgMTAuNzA1MyAxMC44NzUgMTAuMTg3NVYzLjg5NDYxQzEwLjg3NSAzLjY0NTk3IDEwLjc3NjIgMy40MDc1MSAxMC42MDA0IDMuMjMxNjlMOC44OTMzMSAxLjUyNDU5QzguNzE3NDkgMS4zNDg3NyA4LjQ3OTAzIDEuMjUgOC4yMzAzOSAxLjI1SDEuOTM3NVpNMi44NDkyNCAzLjQwODFDMi44NDkyNCAzLjIzNzU0IDIuOTg3NTEgMy4wOTkyNyAzLjE1ODA3IDMuMDk5MjdINy40ODE2QzcuNjUyMTUgMy4wOTkyNyA3Ljc5MDQyIDMuMjM3NTQgNy43OTA0MiAzLjQwODFWNC42NDMzOUM3Ljc5MDQyIDQuODEzOTUgNy42NTIxNSA0Ljk1MjIxIDcuNDgxNiA0Ljk1MjIxSDMuMTU4MDdDMi45ODc1MSA0Ljk1MjIxIDIuODQ5MjQgNC44MTM5NSAyLjg0OTI0IDQuNjQzMzlWMy40MDgxWk00LjUzNjggNi42Mzk3N0M0LjgyNjM4IDYuMzUwMTkgNS4yMTkxMyA2LjE4NzUxIDUuNjI4NjUgNi4xODc1MUM2LjAzODE4IDYuMTg3NTEgNi40MzA5MyA2LjM1MDE5IDYuNzIwNTEgNi42Mzk3N0M3LjAxMDA5IDYuOTI5MzUgNy4xNzI3NyA3LjMyMjEgNy4xNzI3NyA3LjczMTYzQzcuMTcyNzcgOC4xNDExNSA3LjAxMDA5IDguNTMzOSA2LjcyMDUxIDguODIzNDhDNi40MzA5MyA5LjExMzA2IDYuMDM4MTggOS4yNzU3NCA1LjYyODY1IDkuMjc1NzRDNS4yMTkxMyA5LjI3NTc0IDQuODI2MzggOS4xMTMwNiA0LjUzNjggOC44MjM0OEM0LjI0NzIyIDguNTMzOSA0LjA4NDU0IDguMTQxMTUgNC4wODQ1NCA3LjczMTYzQzQuMDg0NTQgNy4zMjIxIDQuMjQ3MjIgNi45MjkzNSA0LjUzNjggNi42Mzk3N1pcIixmaWxsOnQscm9sZTpcImltZ1wifSl9KSl9fSw1Mjk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuRnJhZ21lbnRzSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuRnJhZ21lbnRzSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIyMFwiLGhlaWdodDpcIjIwXCIsdmlld0JveDpcIjAgMCAyNCAyNFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNOC44MDAwMSA0LjgwMDAySDQuODAwMDFDMy45MTc2MSA0LjgwMDAyIDMuMjAwMDEgNS41MTc2MiAzLjIwMDAxIDYuNDAwMDJWMTAuNEMzLjIwMDAxIDExLjI4MjQgMy45MTc2MSAxMiA0LjgwMDAxIDEySDguODAwMDFDOS42ODI0MSAxMiAxMC40IDExLjI4MjQgMTAuNCAxMC40VjYuNDAwMDJDMTAuNCA1LjUxNzYyIDkuNjgyNDEgNC44MDAwMiA4LjgwMDAxIDQuODAwMDJaTTIwLjM1OTIgNi40Njg4MkwxNy41MzEyIDMuNjQwMDJDMTYuOTA4IDMuMDE2MDIgMTUuODkyIDMuMDE2MDIgMTUuMjY4OCAzLjY0MDAyTDEyLjQ0MDggNi40Njg4MkMxMS44MTY4IDcuMDkyODIgMTEuODE2OCA4LjEwNzIyIDEyLjQ0MDggOC43MzEyMkwxNS4yNjg4IDExLjU2QzE1LjU4MDggMTEuODcyIDE1Ljk5MDQgMTIuMDI4IDE2LjQgMTIuMDI4QzE2LjgwOTYgMTIuMDI4IDE3LjIxOTIgMTEuODcyIDE3LjUzMTIgMTEuNTZMMjAuMzU5MiA4LjczMTIyQzIwLjk4MzIgOC4xMDcyMiAyMC45ODMyIDcuMDkyODIgMjAuMzU5MiA2LjQ2ODgyWk04LjgwMDAxIDEzLjZINC44MDAwMUMzLjkxNzYxIDEzLjYgMy4yMDAwMSAxNC4zMTc2IDMuMjAwMDEgMTUuMlYxOS4yQzMuMjAwMDEgMjAuMDgyNCAzLjkxNzYxIDIwLjggNC44MDAwMSAyMC44SDguODAwMDFDOS42ODI0MSAyMC44IDEwLjQgMjAuMDgyNCAxMC40IDE5LjJWMTUuMkMxMC40IDE0LjMxNzYgOS42ODI0MSAxMy42IDguODAwMDEgMTMuNlpNMTcuNiAxMy42SDEzLjZDMTIuNzE3NiAxMy42IDEyIDE0LjMxNzYgMTIgMTUuMlYxOS4yQzEyIDIwLjA4MjQgMTIuNzE3NiAyMC44IDEzLjYgMjAuOEgxNy42QzE4LjQ4MjQgMjAuOCAxOS4yIDIwLjA4MjQgMTkuMiAxOS4yVjE1LjJDMTkuMiAxNC4zMTc2IDE4LjQ4MjQgMTMuNiAxNy42IDEzLjZaXCIsZmlsbDp0fSl9KSl9fSw3Nzg4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkxpZ2h0QnVsYkZpbGxlZEljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0LkxpZ2h0QnVsYkZpbGxlZEljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4cykoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjEwXCIsaGVpZ2h0OlwiMTJcIix2aWV3Qm94OlwiMCAwIDEwIDEyXCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LG4se2NoaWxkcmVuOlsoMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNMS44MyAxLjMxMDA4QzIuMjQ0MDkgMC44OTE2NjcgMi43Mzc2OCAwLjU2MDMwNyAzLjI4MTc0IDAuMzM1NTA0QzMuODI1ODEgMC4xMTA3MDEgNC40MDkzNCAtMC4wMDMwMDMzMyA0Ljk5OCAwLjAwMTA4MjkxQzYuMTg2MjggLTAuMDAzMTA3ODUgNy4zMjkwNSAwLjQ1NzczMyA4LjE4MiAxLjI4NTA4QzguNTk4ODEgMS42ODcxOSA4LjkzMDQ2IDIuMTY5MDMgOS4xNTcyMyAyLjcwMTk0QzkuMzg0IDMuMjM0ODUgOS41MDEyNSAzLjgwNzkzIDkuNTAyIDQuMzg3MDhDOS41MDIgNS42ODAwOCA4LjkxNyA2LjgzMDA4IDcuODgzIDcuODI1MDhMNy41NzcgOS4wMDAwOEgyLjQ2NkwyLjIzNiA4LjAzNzA4QzEuMTU0IDYuOTA3MDggMC41NTYgNS44MTkwOCAwLjUgNC41ODIwOFY0LjU0NDA4QzAuNTQgMy4yNDgwOCAxLjAzMyAyLjEyMTA4IDEuODMxIDEuMzExMDhMMS44MyAxLjMxMDA4WlwiLGZpbGw6dH0pLCgwLG8uanN4KShcInBhdGhcIix7ZDpcIk0yLjcwNDEgMTBMMi45MzcxIDEwLjk3OEwyLjk0NTEgMTFDMy4wNDUxIDExLjI5NyAzLjIzNzEgMTEuNTQ0IDMuNDc5MSAxMS43MTdDMy43MzAxIDExLjg5NyA0LjAzNzEgMTEuOTk5IDQuMzYxMSAxMS45OTlINC4zNjMxTDUuNzQ2MSAxMS45OTVMNS43NjcxIDExLjk5M0M2LjA3NTg3IDExLjk2NjkgNi4zNjkxMyAxMS44NDY1IDYuNjA3MSAxMS42NDhDNi44MzgxIDExLjQ1NCA3LjAxMzEgMTEuMTg4IDcuMDg3MSAxMC44NzRMNy4zMTYxIDEwSDIuNzA0MVYxMFpcIixmaWxsOnR9KV19KSl9fSwzNzAzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkxpZ2h0QnVsYk91dGxpbmVkSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuTGlnaHRCdWxiT3V0bGluZWRJY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjEwXCIsaGVpZ2h0OlwiMTJcIix2aWV3Qm94OlwiMCAwIDEwIDEyXCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LG4se2NoaWxkcmVuOigwLG8uanN4KShcInBhdGhcIix7ZDpcIk00Ljk5NzY2IDAuMDAxMDAxNDlDMy43Njg2NiAwLjAwMTAwMTQ5IDIuNjQ3NjYgMC40ODIwMDIgMS44Mjk2NiAxLjMxMUMxLjAzMTY2IDIuMTIxIDAuNTM5NjU3IDMuMjQ4IDAuNDk5NjU3IDQuNTQ0TDAuNDk4NjU3IDQuNTYzVjQuNTgzQzAuNTU1NjU3IDUuODE5IDEuMTUzNjYgNi45MDcgMi4yMzU2NiA4LjAzN0wyLjkzNzY2IDEwLjk3OEwyLjk0NDY2IDExQzMuMDQ0NjYgMTEuMjk3IDMuMjM2NjYgMTEuNTQ0IDMuNDc4NjYgMTEuNzE3QzMuNzI5NjYgMTEuODk3IDQuMDM2NjYgMTEuOTk5IDQuMzYxNjYgMTEuOTk5TDUuNzQ1NjYgMTEuOTk1TDUuNzY2NjYgMTEuOTkzQzYuMDc1NDIgMTEuOTY2OSA2LjM2ODY5IDExLjg0NjUgNi42MDY2NiAxMS42NDhDNi44Mzc2NiAxMS40NTQgNy4wMTI2NiAxMS4xODggNy4wODY2NiAxMC44NzRMNy44ODI2NiA3LjgyNEM4LjkxNjY2IDYuODMgOS41MDA2NiA1LjY4IDkuNTAwNjYgNC4zODdDOS40OTk5MSAzLjgwNzg1IDkuMzgyNjYgMy4yMzQ3NyA5LjE1NTg5IDIuNzAxODZDOC45MjkxMiAyLjE2ODk1IDguNTk3NDYgMS42ODcxMSA4LjE4MDY2IDEuMjg1QzcuMzI3OTYgMC40NTc4OTQgNi4xODU1OSAtMC4wMDI5Mjc4OCA0Ljk5NzY2IDAuMDAxMDAxNDlaTTIuNTQyNjYgMi4wMTNDMi44NjM0NCAxLjY4ODcxIDMuMjQ1OTYgMS40MzE5OCAzLjY2NzYyIDEuMjU4QzQuMDg5MjggMS4wODQwMSA0LjU0MTUzIDAuOTk2MjgzIDQuOTk3NjYgMUM1LjkyNTE0IDAuOTk1Nzg0IDYuODE3NDQgMS4zNTQ3MSA3LjQ4MzY2IDJDNy44MDQ3MSAyLjMwOTA0IDguMDYwMjMgMi42Nzk1NyA4LjIzNDk2IDMuMDg5NTFDOC40MDk2OSAzLjQ5OTQ1IDguNTAwMDUgMy45NDAzOCA4LjUwMDY2IDQuMzg2QzguNTAwNjYgNS4zNzcgOC4wNDc2NiA2LjMxMiA3LjA5NjY2IDcuMTkxTDYuOTg4NjYgNy4yOTFMNi41NDI2NiA5SDMuNDkzNjZMMy4xNDQ2NiA3LjUzNkwzLjA0NzY2IDcuNDM2QzEuOTk5NjYgNi4zNzIgMS41NDc2NiA1LjQ4IDEuNDk4NjYgNC41NTdDMS41MzY2NiAzLjUwOSAxLjkzMjY2IDIuNjMyIDIuNTQyNjYgMi4wMTRWMi4wMTNaTTMuNzMyNjYgMTBINi4yODI2Nkw2LjExNzY2IDEwLjYyN0w2LjExNDY2IDEwLjY0QzYuMDkyMTEgMTAuNzM0MiA2LjAzOTQ0IDEwLjgxODUgNS45NjQ2NiAxMC44OEM1Ljg4ODczIDEwLjk0MzUgNS43OTU5NSAxMC45ODM0IDUuNjk3NjYgMTAuOTk1TDQuMzYwNjYgMTFDNC4yNTMyMSAxMS4wMDAzIDQuMTQ4MzMgMTAuOTY3MSA0LjA2MDY2IDEwLjkwNUMzLjk4NzcgMTAuODUzNiAzLjkzMTM5IDEwLjc4MiAzLjg5ODY2IDEwLjY5OUwzLjczMTY2IDEwSDMuNzMyNjZaXCIsZmlsbDp0fSl9KSl9fSw4MzExOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkxvY2tlZENsb3NlZEZpbGxlZEljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0LkxvY2tlZENsb3NlZEZpbGxlZEljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTUuMDAwMDMgNC42MzYyM0M1LjAwMDAzIDMuNzYwNTIgNS4yNDIyMiAzLjEwNTYxIDUuNjQzMjcgMi42NzM3OEM2LjAzOTM4IDIuMjQ3MjcgNi42NDU4NSAxLjk3ODUyIDcuNTAxNDMgMS45Nzg1MkM4LjM1NzQ4IDEuOTc4NTIgOC45NjMwOSAyLjI0NjczIDkuMzU4MjcgMi42NzIzQzkuNzU4NDEgMy4xMDMyMSAxMCAzLjc1NzI5IDEwIDQuNjMzNDZWNi41MDAyMUgxMVY0LjYzMzQ2QzExIDMuNTc5MTcgMTAuNzA3NiAyLjY1NTc4IDEwLjA5MTEgMS45OTE4M0M5LjQ2OTU1IDEuMzIyNTQgOC41NzU4NiAwLjk3ODUxNiA3LjUwMTQzIDAuOTc4NTE2QzYuNDI2NzggMC45Nzg1MTYgNS41MzI1NSAxLjMyMzUgNC45MTA1MiAxLjk5MzI4QzQuMjkzNDIgMi42NTc3NSA0LjAwMDAzIDMuNTgxNjkgNC4wMDAwMyA0LjYzNjIzVjYuNTAwMjFINS4wMDAwM1Y0LjYzNjIzWk0zIDYuNTAwMjFDMi43MjM4NiA2LjUwMDIxIDIuNSA2LjcyNDA3IDIuNSA3LjAwMDIxVjEzLjAwMDJDMi41IDEzLjI3NjQgMi43MjM4NiAxMy41MDAyIDMgMTMuNTAwMkgxMkMxMi4yNzYxIDEzLjUwMDIgMTIuNSAxMy4yNzY0IDEyLjUgMTMuMDAwMlY3LjAwMDIxQzEyLjUgNi43MjQwNyAxMi4yNzYxIDYuNTAwMjEgMTIgNi41MDAyMUgzWlwiLGZpbGw6dCxyb2xlOlwiaW1nXCJ9KX0pKX19LDU3Mjk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTWluaW1pemVJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5NaW5pbWl6ZUljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTIuMTY2MDIgMTJDMi4xNjYwMiAxMS43MjM5IDIuMzg5ODcgMTEuNSAyLjY2NjAyIDExLjVIMTMuMzMyN0MxMy42MDg4IDExLjUgMTMuODMyNyAxMS43MjM5IDEzLjgzMjcgMTJDMTMuODMyNyAxMi4yNzYxIDEzLjYwODggMTIuNSAxMy4zMzI3IDEyLjVIMi42NjYwMkMyLjM4OTg3IDEyLjUgMi4xNjYwMiAxMi4yNzYxIDIuMTY2MDIgMTJaXCIsZmlsbDp0LHJvbGU6XCJpbWdcIn0pfSkpfX0sMzc5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lk9wZW5GaW5JY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5PcGVuRmluSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNMTQuMjY4NSA1LjczOTE2QzE0LjE3ODUgNS42NDkwNiAxNC4wODE3IDUuNTY1OTIgMTMuOTc5IDUuNDkwNDdMMTMuOTQxMiA1LjQ2NDI5QzEzLjkxOTYgNS40NDkxOSAxMy44OTg0IDUuNDMzNTggMTMuODc2MyA1LjQxODk4QzEzLjg1NDEgNS40MDQzOCAxMy44Mjg0IDUuMzg4NzggMTMuODA0OCA1LjM3NDE4TDEzLjc3MTUgNS4zNTM1NEMxMy43NDE4IDUuMzM1OTIgMTMuNzExNiA1LjMxOTMgMTMuNjgxNCA1LjMwMzE5TDEzLjY2MzggNS4yOTM2M0MxMy4zMDY1IDUuMTA2MTggMTIuOTA5MSA1LjAwODA3IDEyLjUwNTcgNS4wMDc2OEMxMS44NDE3IDUuMDA3MTUgMTEuMjA1MiA0Ljc0MjkxIDEwLjczNjIgNC4yNzMxQzEwLjI2NzEgMy44MDMzIDEwLjAwNCAzLjE2NjQyIDEwLjAwNDYgMi41MDI2MkMxMC4wMDY1IDEuNDkyMjIgOS4zOTkzMyAwLjU4MDIxOSA4LjQ2NjM0IDAuMTkxOTExQzcuNTMzMzUgLTAuMTk2Mzk3IDYuNDU4MjYgMC4wMTU0NjYgNS43NDI0NCAwLjcyODcwMUM1LjAyNjYxIDEuNDQxOTQgNC44MTEwMyAyLjUxNjA3IDUuMTk2MjEgMy40NTAyQzUuNTgxNCA0LjM4NDMzIDYuNDkxNSA0Ljk5NDQ3IDcuNTAyMSA0Ljk5NjFDOC4xNjYwMyA0Ljk5NjY0IDguODAyNTYgNS4yNjA4OCA5LjI3MTYxIDUuNzMwNjhDOS43NDA2NiA2LjIwMDQ5IDEwLjAwMzggNi44MzczNiAxMC4wMDMxIDcuNTAxMTdDMTAuMDAyNiA4LjE2NDk3IDkuNzM4MyA4LjgwMTM3IDkuMjY4NCA5LjI3MDMyQzguNzk4NSA5LjczOTI4IDguMTYxNSAxMC4wMDI0IDcuNDk3NTYgMTAuMDAxN0M2LjgzNDEzIDEwLjAwMjIgNi4xOTc3MiA5LjczODk0IDUuNzI4NjUgOS4yNjk4N0M1LjI1OTU4IDguODAwOCA0Ljk5NjM2IDguMTY0NDcgNC45OTcwMyA3LjUwMTE3QzQuOTk3MDMgNi4xMjE1NSAzLjg3ODQxIDUuMDAzMTUgMi40OTg1MiA1LjAwMzE1QzEuMTE4NjIgNS4wMDMxNSAwIDYuMTIxNTUgMCA3LjUwMTE3QzAgOC44ODA3OCAxLjExODYyIDkuOTk5MTggMi40OTg1MiA5Ljk5OTE4QzMuODc4NDEgOS45OTkxOCA0Ljk5NzAzIDExLjExNzYgNC45OTcwMyAxMi40OTcyQzQuOTk3MDMgMTMuODc5NSA2LjExNzggMTUgNy41MDAzMyAxNUM4Ljg4Mjg3IDE1IDEwLjAwMzYgMTMuODc5NSAxMC4wMDM2IDEyLjQ5NzJDMTAuMDAzNiAxMS4xMTc2IDExLjEyMjMgOS45OTkxOCAxMi41MDIxIDkuOTk5MThDMTIuOTQ4MiA5Ljk5OTQ4IDEzLjM4NjIgOS44ODAyMiAxMy43NzA1IDkuNjUzODNDMTMuODAzOCA5LjYzNDIgMTMuODM2NSA5LjYxMzU2IDEzLjg3MTIgOS41OTI0MUwxMy44NzgzIDkuNTg3ODhDMTMuOTA4NSA5LjU2Nzc1IDEzLjkzODcgOS41NDY2IDEzLjk2NzkgOS41MjU0NkwxMy45ODEgOS41MTY0QzE0LjAwNzIgOS40OTcyNyAxNC4wMzE0IDkuNDc2NjIgMTQuMDU5MSA5LjQ1NTk4TDE0LjA4MTIgOS40Mzg4N0MxNC4xMDU0IDkuNDE5MjMgMTQuMTI4NiA5LjM5ODU5IDE0LjE1MjIgOS4zNzc5NUwxNC4xNzc5IDkuMzU1OEMxNC4yMDgxIDkuMzI4NjIgMTQuMjM3OCA5LjMwMDQyIDE0LjI2NyA5LjI3MTIzTDE0LjI3MTYgOS4yNjcyQzE0LjM3OTQgOS4xNTg4NyAxNC40NzcyIDkuMDQwOTEgMTQuNTYzNiA4LjkxNDhDMTQuNTgyNCA4Ljg4NzYxIDE0LjYwMDUgOC44NjAwOSAxNC42MTggOC44MzIyM0MxNS4yMzcgNy44NDU4NCAxNS4wOTIgNi41NjI2NyAxNC4yNjg1IDUuNzM5MTZaXCIsZmlsbDp0LHJvbGU6XCJpbWdcIn0pfSkpfX0sOTk0MDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5QYWdlSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuUGFnZUljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTRcIixoZWlnaHQ6XCIxOFwiLHZpZXdCb3g6XCIwIDAgMTQgMThcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTExLjk5OTcgMC42NjY5OTJIMS45OTk2N0MxLjA4MDUxIDAuNjY2OTkyIDAuMzMzMDA4IDEuNDE0NDkgMC4zMzMwMDggMi4zMzM2NlYxNS42NjdDMC4zMzMwMDggMTYuNTg2MiAxLjA4MDUxIDE3LjMzMzcgMS45OTk2NyAxNy4zMzM3SDExLjk5OTdDMTIuOTE4OCAxNy4zMzM3IDEzLjY2NjMgMTYuNTg2MiAxMy42NjYzIDE1LjY2N1YyLjMzMzY2QzEzLjY2NjMgMS40MTQ0OSAxMi45MTg4IDAuNjY2OTkyIDExLjk5OTcgMC42NjY5OTJaTTcuNDE2MzQgOC4xNjY5OUgzLjI0OTY3QzMuMDE5NjcgOC4xNjY5OSAyLjgzMzAxIDcuOTgwMzMgMi44MzMwMSA3Ljc1MDMzVjYuOTE2OTlDMi44MzMwMSA2LjY4Njk5IDMuMDE5NjcgNi41MDAzMyAzLjI0OTY3IDYuNTAwMzNINy40MTYzNEM3LjY0NjM0IDYuNTAwMzMgNy44MzMwMSA2LjY4Njk5IDcuODMzMDEgNi45MTY5OVY3Ljc1MDMzQzcuODMzMDEgNy45ODAzMyA3LjY0NjM0IDguMTY2OTkgNy40MTYzNCA4LjE2Njk5Wk0xMC43NDk3IDQuODMzNjZIMy4yNDk2N0MzLjAxOTY3IDQuODMzNjYgMi44MzMwMSA0LjY0Njk5IDIuODMzMDEgNC40MTY5OVYzLjU4MzY2QzIuODMzMDEgMy4zNTM2NiAzLjAxOTY3IDMuMTY2OTkgMy4yNDk2NyAzLjE2Njk5SDEwLjc0OTdDMTAuOTc5NyAzLjE2Njk5IDExLjE2NjMgMy4zNTM2NiAxMS4xNjYzIDMuNTgzNjZWNC40MTY5OUMxMS4xNjYzIDQuNjQ2OTkgMTAuOTc5NyA0LjgzMzY2IDEwLjc0OTcgNC44MzM2NlpcIixmaWxsOnR9KX0pKX19LDEwMDI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuUmVkRG90SWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuUmVkRG90SWNvbj1lPT57dmFyIHQ9cihlLFtdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjhcIixoZWlnaHQ6XCI4XCIsdmlld0JveDpcIjAgMCA4IDhcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sdCx7Y2hpbGRyZW46KDAsby5qc3gpKFwicmVjdFwiLHt4OlwiMC41XCIseTpcIjAuNVwiLHdpZHRoOlwiN1wiLGhlaWdodDpcIjdcIixyeDpcIjMuNVwiLGZpbGw6XCIjQzIxMzEzXCJ9KX0pKX19LDE1Mzk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuU3RhY2tJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5TdGFja0ljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMjBcIixoZWlnaHQ6XCIyMFwiLHZpZXdCb3g6XCIwIDAgMjQgMjRcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTE0LjIxNzggMy4wMDA5MkMxNC4xNTA0IDMuMDA1MTQgMTQuMDgzOSAzLjAxODQ0IDE0LjAyIDMuMDQwNDdMMy41MTk4NiA2LjQyODdDMy4zNjg2NCA2LjQ3NzQzIDMuMjM2ODEgNi41NzI5MSAzLjE0MzM1IDYuNzAxMzhDMy4wNDk4OSA2LjgyOTg2IDIuOTk5NjQgNi45ODQ2OSAyLjk5OTgzIDcuMTQzNTZWMTUuNzU0QzIuOTk4NDMgMTUuODUzNCAzLjAxNjc5IDE1Ljk1MjEgMy4wNTM4NSAxNi4wNDQzQzMuMDkwOTEgMTYuMTM2NiAzLjE0NTkzIDE2LjIyMDUgMy4yMTU3MSAxNi4yOTEzQzMuMjg1NSAxNi4zNjIxIDMuMzY4NjUgMTYuNDE4MyAzLjQ2MDM1IDE2LjQ1NjZDMy41NTIwNCAxNi40OTUgMy42NTA0NSAxNi41MTQ3IDMuNzQ5ODQgMTYuNTE0N0MzLjg0OTI0IDE2LjUxNDcgMy45NDc2NCAxNi40OTUgNC4wMzkzNCAxNi40NTY2QzQuMTMxMDMgMTYuNDE4MyA0LjIxNDE5IDE2LjM2MjEgNC4yODM5NyAxNi4yOTEzQzQuMzUzNzUgMTYuMjIwNSA0LjQwODc4IDE2LjEzNjYgNC40NDU4NCAxNi4wNDQzQzQuNDgyOSAxNS45NTIxIDQuNTAxMjYgMTUuODUzNCA0LjQ5OTg1IDE1Ljc1NFY3LjY4ODQ5TDE0LjQ4IDQuNDY3MjVDMTQuNjQ5IDQuNDE1MjkgMTQuNzk0MiA0LjMwNTMyIDE0Ljg5IDQuMTU2NzRDMTQuOTg1OCA0LjAwODE1IDE1LjAyNiAzLjgzMDUgMTUuMDAzNiAzLjY1NTE0QzE0Ljk4MTIgMy40Nzk3NyAxNC44OTc1IDMuMzE3OTcgMTQuNzY3NCAzLjE5ODI3QzE0LjYzNzMgMy4wNzg1NyAxNC40NjkxIDMuMDA4NjggMTQuMjkyNSAzLjAwMDkyQzE0LjI2NzYgMi45OTk2NyAxNC4yNDI3IDIuOTk5NjcgMTQuMjE3OCAzLjAwMDkyWk0xNy4yMTc4IDUuMjUwOTVDMTcuMTUwNCA1LjI1NTE3IDE3LjA4MzkgNS4yNjg0OCAxNy4wMjAxIDUuMjkwNUw2LjUxOTkgOC42Nzg3NEM2LjM2ODY5IDguNzI3NDYgNi4yMzY4NSA4LjgyMjk0IDYuMTQzMzkgOC45NTE0MkM2LjA0OTkzIDkuMDc5ODkgNS45OTk2OCA5LjIzNDcyIDUuOTk5ODggOS4zOTM1OVYxOC4wMDQxQzUuOTk4NDcgMTguMTAzNSA2LjAxNjgzIDE4LjIwMjEgNi4wNTM4OSAxOC4yOTQ0QzYuMDkwOTUgMTguMzg2NiA2LjE0NTk3IDE4LjQ3MDUgNi4yMTU3NiAxOC41NDEzQzYuMjg1NTQgMTguNjEyMSA2LjM2ODcgMTguNjY4MyA2LjQ2MDM5IDE4LjcwNjZDNi41NTIwOSAxOC43NDUgNi42NTA0OSAxOC43NjQ4IDYuNzQ5ODkgMTguNzY0OEM2Ljg0OTI4IDE4Ljc2NDggNi45NDc2OSAxOC43NDUgNy4wMzkzOCAxOC43MDY2QzcuMTMxMDggMTguNjY4MyA3LjIxNDIzIDE4LjYxMjEgNy4yODQwMiAxOC41NDEzQzcuMzUzOCAxOC40NzA1IDcuNDA4ODIgMTguMzg2NiA3LjQ0NTg4IDE4LjI5NDRDNy40ODI5NCAxOC4yMDIxIDcuNTAxMyAxOC4xMDM1IDcuNDk5OSAxOC4wMDQxVjkuOTM4NTJMMTcuNDggNi43MTcyOEMxNy42NDkgNi42NjUzMyAxNy43OTQyIDYuNTU1MzUgMTcuODkgNi40MDY3N0MxNy45ODU4IDYuMjU4MTggMTguMDI2MSA2LjA4MDU0IDE4LjAwMzYgNS45MDUxN0MxNy45ODEyIDUuNzI5ODEgMTcuODk3NiA1LjU2OCAxNy43Njc1IDUuNDQ4M0MxNy42Mzc0IDUuMzI4NjEgMTcuNDY5MSA1LjI1ODcxIDE3LjI5MjUgNS4yNTA5NUMxNy4yNjc2IDUuMjQ5NzEgMTcuMjQyNyA1LjI0OTcxIDE3LjIxNzggNS4yNTA5NVpNMjAuMTkzIDcuNTA1MzhDMjAuMTM0NCA3LjUwOTgyIDIwLjA3NTggNy41MjE5NyAyMC4wMTg2IDcuNTQwNTNMOS41MTg0OCAxMC45Mjg4QzkuMjA5NDggMTEuMDI5MyA4Ljk5OTkyIDExLjMxODEgOC45OTk5MiAxMS42NDM2VjIwLjI1NDFDOC45OTk5MiAyMC40OTc5IDkuMTE4MjkgMjAuNzI2MiA5LjMxNzggMjAuODY2NEM5LjQ0NjA1IDIwLjk1NzIgOS41OTY5MyAyMS4wMDQxIDkuNzQ5OTMgMjEuMDA0MUM5LjgzNDY4IDIxLjAwNDEgOS45MjAxNCAyMC45ODk0IDEwLjAwMTkgMjAuOTYwMkwyMC41MDIgMTcuMjEwMUMyMC44MDA2IDE3LjEwNDQgMjEuMDAwMSAxNi44MjEzIDIxLjAwMDEgMTYuNTA0VjguMjUzOTJDMjEuMDAwMSA4LjAxNDY3IDIwLjg4NTMgNy43ODkyMiAyMC42OTEgNy42NDc0N0MyMC41NDU5IDcuNTQxNzIgMjAuMzY4OCA3LjQ5MjA1IDIwLjE5MyA3LjUwNTM4WlwiLGZpbGw6dH0pfSkpfX0sNDAyMDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5TdG9yZWZyb250SWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuU3RvcmVmcm9udEljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMjBcIixoZWlnaHQ6XCIyMFwiLHZpZXdCb3g6XCIwIDAgMjQgMjRcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTUgM0M0LjQ0OCAzIDQgMy40NDggNCA0QzQgNC41NTIgNC40NDggNSA1IDVIMTlDMTkuNTUyIDUgMjAgNC41NTIgMjAgNEMyMCAzLjQ0OCAxOS41NTIgMyAxOSAzSDVaTTQuNjE3MTkgN0M0LjIzODE5IDcgMy44OTM2MSA3LjIxMzczIDMuNzI0NjEgNy41NTI3M0wyLjEwNTQ3IDEwLjc4OTFDMi4wMzU0NyAxMC45MjgxIDIgMTEuMDgxMyAyIDExLjIzNjNWMTJDMiAxMi41NTIgMi40NDggMTMgMyAxM1YxOUMzIDIwLjEwNSAzLjg5NSAyMSA1IDIxSDE5QzIwLjEwNSAyMSAyMSAyMC4xMDUgMjEgMTlWMTNDMjEuNTUyIDEzIDIyIDEyLjU1MiAyMiAxMlYxMS4yMzYzQzIyIDExLjA4MTMgMjEuOTY0NSAxMC45MjgxIDIxLjg5NDUgMTAuNzg5MUwyMC4yNzU0IDcuNTUyNzNDMjAuMTA2NCA3LjIxMzczIDE5Ljc2MTggNyAxOS4zODI4IDdINC42MTcxOVpNNiAxM0gxOEMxOC41NTIgMTMgMTkgMTMuNDQ4IDE5IDE0VjE4QzE5IDE4LjU1MiAxOC41NTIgMTkgMTggMTlINkM1LjQ0OCAxOSA1IDE4LjU1MiA1IDE4VjE0QzUgMTMuNDQ4IDUuNDQ4IDEzIDYgMTNaXCIsZmlsbDp0fSl9KSl9fSw3OTM3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LldvcmtzcGFjZUljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0LldvcmtzcGFjZUljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4cykoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIscm9sZTpcImltZ1wifSxuLHtjaGlsZHJlbjpbKDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTYuNzM4MTEgMi44MTI1SDMuNTMxMzdDMy4xMzQ0MiAyLjgxMjUgMi44MTI2MiAzLjEzNDMgMi44MTI2MiAzLjUzMTI1VjcuNTEyMDRDMi44MTI2MiA3LjkwOSAzLjEzNDQyIDguMjMwNzkgMy41MzEzNyA4LjIzMDc5SDYuNzM4MTFDNy4xMzUwNiA4LjIzMDc5IDcuNDU2ODYgNy45MDkgNy40NTY4NiA3LjUxMjA0VjMuNTMxMjVDNy40NTY4NiAzLjEzNDMgNy4xMzUwNiAyLjgxMjUgNi43MzgxMSAyLjgxMjVaXCIsZmlsbDp0fSksKDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTEyLjE1NjUgNi4yNjc1OEg4Ljk0OTcxQzguNzUxMjMgNi4yNjc1OCA4LjU5MDMzIDYuNDI4NDggOC41OTAzMyA2LjYyNjk2VjExLjM4MThDOC41OTAzMyAxMS41ODAzIDguNzUxMjMgMTEuNzQxMiA4Ljk0OTcxIDExLjc0MTJIMTIuMTU2NUMxMi4zNTQ5IDExLjc0MTIgMTIuNTE1OCAxMS41ODAzIDEyLjUxNTggMTEuMzgxOFY2LjYyNjk2QzEyLjUxNTggNi40Mjg0OCAxMi4zNTQ5IDYuMjY3NTggMTIuMTU2NSA2LjI2NzU4WlwiLHN0cm9rZTp0LHN0cm9rZVdpZHRoOlwiMC43MTg3NTNcIn0pLCgwLG8uanN4KShcInBhdGhcIix7ZDpcIk0xMi4xNTY0IDIuODEyNUg4Ljk0OTcxQzguNTUyNzUgMi44MTI1IDguMjMwOTYgMy4xMzQzIDguMjMwOTYgMy41MzEyNVY0LjQxNTg3QzguMjMwOTYgNC44MTI4MyA4LjU1Mjc1IDUuMTM0NjMgOC45NDk3MSA1LjEzNDYzSDEyLjE1NjRDMTIuNTUzNCA1LjEzNDYzIDEyLjg3NTIgNC44MTI4MyAxMi44NzUyIDQuNDE1ODdWMy41MzEyNUMxMi44NzUyIDMuMTM0MyAxMi41NTM0IDIuODEyNSAxMi4xNTY0IDIuODEyNVpcIixmaWxsOnR9KSwoMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNNi43Mzc5OCA5LjAwNDg4SDMuNTMxMjVDMy4xMzQzIDkuMDA0ODggMi44MTI1IDkuMzI2NjggMi44MTI1IDkuNzIzNjRWMTEuMzgyM0MyLjgxMjUgMTEuNzc5MyAzLjEzNDMgMTIuMTAxMSAzLjUzMTI1IDEyLjEwMTFINi43Mzc5OEM3LjEzNDk0IDEyLjEwMTEgNy40NTY3NCAxMS43NzkzIDcuNDU2NzQgMTEuMzgyM1Y5LjcyMzY0QzcuNDU2NzQgOS4zMjY2OCA3LjEzNDk0IDkuMDA0ODggNi43Mzc5OCA5LjAwNDg4WlwiLGZpbGw6dH0pXX0pKX19LDI3NzI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDM3OSksdCksbyhuKDQ3MTgpLHQpLG8obig3OTM3KSx0KSxvKG4oODMxMSksdCksbyhuKDU3MjkpLHQpLG8obig3Nzg4KSx0KSxvKG4oMzcwMyksdCksbyhuKDY3OTUpLHQpLG8obig4MjY1KSx0KSxvKG4oMTE3KSx0KSxvKG4oMTUzOSksdCksbyhuKDkyODUpLHQpLG8obig0MDIwKSx0KSxvKG4oNTI5KSx0KSxvKG4oMjQwMiksdCksbyhuKDIxNDcpLHQpLG8obig0ODI1KSx0KSxvKG4oNjQ0NyksdCksbyhuKDEyODEpLHQpLG8obig3NDI5KSx0KSxvKG4oOTk0MCksdCksbyhuKDEwMDIpLHQpLG8obigxMzI0KSx0KSxvKG4oMTEwMyksdCksbyhuKDE0MDkpLHQpfSwzMTE3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuSWNvbldpdGhCYWRnZT12b2lkIDA7Y29uc3QgYT1uKDU4OTMpLGk9byhuKDc1MTgpKSxsPW4oNzAwNikscz1uKDMxMzYpLGM9bigxMzM1KTt0Lkljb25XaXRoQmFkZ2U9ZT0+e3Zhcntjb3VudDp0PTAsbWF4Om59PWUsbz1yKGUsW1wiY291bnRcIixcIm1heFwiXSk7cmV0dXJuKDAsYS5qc3hzKSh1LHtjaGlsZHJlbjpbKDAsYS5qc3gpKGwuSWNvbixPYmplY3QuYXNzaWduKHt9LG8pKSx0PjAmJigwLGEuanN4KShkLHtjb3VudDp0LG1heDpufSldfSl9O2NvbnN0IHU9KDAsaS5kZWZhdWx0KShjLkJveClgXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbmAsZD0oMCxpLmRlZmF1bHQpKHMuQmFkZ2UpYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRyYW5zZm9ybTogc2NhbGUoNzAlKTtcbiAgcmlnaHQ6IC0keyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuICB0b3A6IC0keyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbmB9LDE0NDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oMzExNyksdCl9LDE5NDQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTGFiZWw9dm9pZCAwO2NvbnN0IG89big1ODkzKSxhPXIobig3NTE4KSksaT1uKDEzMzUpLGw9big3NzY5KSxzPW4oOTYzNCk7dC5MYWJlbD0oe2ljb246ZSx0ZXh0OnQsaGVscGVyVGV4dDpuLGh0bWxGb3I6cixpbmxpbmU6YX0pPT4oMCxvLmpzeHMpKHAsT2JqZWN0LmFzc2lnbih7aW5saW5lOmF9LHtjaGlsZHJlbjpbKDAsby5qc3hzKShcImRpdlwiLE9iamVjdC5hc3NpZ24oe3N0eWxlOntkaXNwbGF5OlwiZmxleFwifX0se2NoaWxkcmVuOltcImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2UoKTplPygwLG8uanN4KShkLHtpY29uOmV9KTpudWxsLCgwLG8uanN4KSh1LE9iamVjdC5hc3NpZ24oe2FzOlwibGFiZWxcIixodG1sRm9yOnIsd2VpZ2h0OlwiYm9sZFwifSx7Y2hpbGRyZW46dH0pKV19KSksbiYmKDAsby5qc3gpKGMse2NoaWxkcmVuOm59KV19KSk7Y29uc3QgYz0oMCxhLmRlZmF1bHQpKGwuVGV4dClgXG4gIHNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dEhlbHB9O1xuYCx1PSgwLGEuZGVmYXVsdCkobC5UZXh0KWBcbiAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuYCxkPSgwLGEuZGVmYXVsdCkocy5JY29uKWBcbiAgbWFyZ2luLXJpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnhzbWFsbH07XG4gIG1pbi13aWR0aDogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS5zbWFsbH07XG4gIG1pbi1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUuc21hbGx9O1xuICBhbGlnbi1zZWxmOiBjZW50ZXI7XG5gLHA9KDAsYS5kZWZhdWx0KShpLkJveClgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIG1hcmdpbi1ib3R0b206ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuXG4gICR7KHtpbmxpbmU6ZSx0aGVtZTp0fSk9PmUmJmBjdXJzb3I6IHBvaW50ZXI7XFxuICAgICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgICAgbWFyZ2luLWxlZnQ6ICR7dC5weC5zbWFsbH07XFxuICAgICBmb250LXdlaWdodDogJHt0LmZvbnRXZWlnaHQubm9ybWFsfTtcXG4gIGB9XG5gfSw5MjM5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig4Mjc1KSx0KSxvKG4oNjkzKSx0KX0sODI3NTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn0sbz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkxvYWRlcj12b2lkIDA7Y29uc3QgYT1uKDU4OTMpLGk9byhuKDc1MTgpKSxsPW4oOTYzNCk7dC5Mb2FkZXI9KDAsaS5kZWZhdWx0KSgoZT0+e3ZhciB0PXIoZSxbXSk7cmV0dXJuKDAsYS5qc3gpKGwuSWNvbixPYmplY3QuYXNzaWduKHt9LHQse2NoaWxkcmVuOigwLGEuanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTAwJVwiLGhlaWdodDpcIjEwMCVcIix2aWV3Qm94OlwiMCAwIDM4IDM4XCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHN0cm9rZTpcImN1cnJlbnRDb2xvclwifSx7Y2hpbGRyZW46KDAsYS5qc3gpKFwiZ1wiLE9iamVjdC5hc3NpZ24oe2ZpbGw6XCJub25lXCIsZmlsbFJ1bGU6XCJldmVub2RkXCJ9LHtjaGlsZHJlbjooMCxhLmpzeHMpKFwiZ1wiLE9iamVjdC5hc3NpZ24oe3RyYW5zZm9ybTpcInRyYW5zbGF0ZSgxIDEpXCIsc3Ryb2tlV2lkdGg6XCIyXCJ9LHtjaGlsZHJlbjpbKDAsYS5qc3gpKFwiY2lyY2xlXCIse3N0cm9rZU9wYWNpdHk6XCIuNVwiLGN4OlwiMThcIixjeTpcIjE4XCIscjpcIjE4XCJ9KSwoMCxhLmpzeCkoXCJwYXRoXCIsT2JqZWN0LmFzc2lnbih7ZDpcIk0zNiAxOGMwLTkuOTQtOC4wNi0xOC0xOC0xOFwifSx7Y2hpbGRyZW46KDAsYS5qc3gpKFwiYW5pbWF0ZVRyYW5zZm9ybVwiLHthdHRyaWJ1dGVOYW1lOlwidHJhbnNmb3JtXCIsdHlwZTpcInJvdGF0ZVwiLGZyb206XCIwIDE4IDE4XCIsdG86XCIzNjAgMTggMThcIixkdXI6XCIxc1wiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifSl9KSldfSkpfSkpfSkpfSkpfSkpYGB9LDY5MzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnR9KX06ZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dH0pLGE9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiIT09biYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnIodCxlLG4pO3JldHVybiBvKHQsZSksdH0saT10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lk9wZW5maW5Mb2FkZXI9dm9pZCAwO2NvbnN0IGw9big1ODkzKSxzPWEobig3NTE4KSksYz1uKDk2MzQpO3QuT3BlbmZpbkxvYWRlcj0oMCxzLmRlZmF1bHQpKChlPT57dmFyIHQ9aShlLFtdKTtyZXR1cm4oMCxsLmpzeCkoYy5JY29uLE9iamVjdC5hc3NpZ24oe30sdCx7Y2hpbGRyZW46KDAsbC5qc3hzKShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTAwJVwiLGhlaWdodDpcIjEwMCVcIix2aWV3Qm94OlwiMCAwIDE4IDE4XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LHtjaGlsZHJlbjpbKDAsbC5qc3gpKHUse2Q6XCJcXG4gICAgICAgICAgICBNIDE3LjEyMjIgNi44ODdcXG4gICAgICAgICAgICBDIDE3LjAxNDEgNi43Nzg4NyAxNi44OTggNi42NzkxMSAxNi43NzQ4IDYuNTg4NTZcXG4gICAgICAgICAgICBMIDE2LjcyOTUgNi41NTcxNVxcbiAgICAgICAgICAgIEMgMTYuNzAzNSA2LjUzOTAzIDE2LjY3ODEgNi41MjAzIDE2LjY1MTUgNi41MDI3OFxcbiAgICAgICAgICAgIEMgMTYuNjI1IDYuNDg1MjYgMTYuNTk0MSA2LjQ2NjUzIDE2LjU2NTcgNi40NDkwMVxcbiAgICAgICAgICAgIEwgMTYuNTI1OSA2LjQyNDI0XFxuICAgICAgICAgICAgQyAxNi40OTAyIDYuNDAzMSAxNi40NTQgNi4zODMxNiAxNi40MTc3IDYuMzYzODNcXG4gICAgICAgICAgICBMIDE2LjM5NjYgNi4zNTIzNlxcbiAgICAgICAgICAgIEMgMTUuOTY3OCA2LjEyNzQyIDE1LjQ5MSA2LjAwOTY4IDE1LjAwNjggNi4wMDkyMlxcbiAgICAgICAgICAgIEMgMTQuMjEwMSA2LjAwODU4IDEzLjQ0NjMgNS42OTE0OSAxMi44ODM0IDUuMTI3NzJcXG4gICAgICAgICAgICBDIDEyLjMyMDUgNC41NjM5NSAxMi4wMDQ4IDMuNzk5NzEgMTIuMDA1NiAzLjAwMzE0XFxuICAgICAgICAgICAgQyAxMi4wMDc4IDEuNzkwNjYgMTEuMjc5MiAwLjY5NjI2MyAxMC4xNTk2IDAuMjMwMjkzXFxuICAgICAgICAgICAgQyA5LjA0MDAyIC0wLjIzNTY3NiA3Ljc0OTkyIDAuMDE4NTU5MiA2Ljg5MDkzIDAuODc0NDQxXFxuICAgICAgICAgICAgQyA2LjAzMTk0IDEuNzMwMzIgNS43NzMyMyAzLjAxOTI4IDYuMjM1NDYgNC4xNDAyNFxcbiAgICAgICAgICAgIEMgNi42OTc2OCA1LjI2MTE5IDcuNzg5OCA1Ljk5MzM3IDkuMDAyNTEgNS45OTUzMlxcbiAgICAgICAgICAgIEMgOS43OTkyNCA1Ljk5NTk2IDEwLjU2MzEgNi4zMTMwNSAxMS4xMjU5IDYuODc2ODJcXG4gICAgICAgICAgICBDIDExLjY4ODggNy40NDA1OSAxMi4wMDQ2IDguMjA0ODQgMTIuMDAzOCA5LjAwMTRcXG4gICAgICAgICAgICBDIDEyLjAwMzEgOS43OTc5NyAxMS42ODYgMTAuNTYxNiAxMS4xMjIxIDExLjEyNDRcXG4gICAgICAgICAgICBDIDEwLjU1ODIgMTEuNjg3MSA5Ljc5MzggMTIuMDAyOCA4Ljk5NzA4IDEyLjAwMlxcbiAgICAgICAgICAgIEMgOC4yMDA5NiAxMi4wMDI3IDcuNDM3MjcgMTEuNjg2NyA2Ljg3NDM4IDExLjEyMzhcXG4gICAgICAgICAgICBDIDYuMzExNSAxMC41NjEgNS45OTU2NCA5Ljc5NzM2IDUuOTk2NDQgOS4wMDE0XFxuICAgICAgICAgICAgQyA1Ljk5NjQ0IDcuMzQ1ODYgNC42NTQwOSA2LjAwMzc4IDIuOTk4MjIgNi4wMDM3OFxcbiAgICAgICAgICAgIEMgMS4zNDIzNSA2LjAwMzc4IDAgNy4zNDU4NiAwIDkuMDAxNFxcbiAgICAgICAgICAgIEMgMCAxMC42NTY5IDEuMzQyMzUgMTEuOTk5IDIuOTk4MjIgMTEuOTk5XFxuICAgICAgICAgICAgQyA0LjY1NDA5IDExLjk5OSA1Ljk5NjQ0IDEzLjM0MTEgNS45OTY0NCAxNC45OTY2XFxuICAgICAgICAgICAgQyA1Ljk5NjQ0IDE2LjY1NTMgNy4zNDEzNiAxOCA5LjAwMDQgMThcXG4gICAgICAgICAgICBDIDEwLjY1OTQgMTggMTIuMDA0NCAxNi42NTUzIDEyLjAwNDQgMTQuOTk2NlxcbiAgICAgICAgICAgIEMgMTIuMDA0NCAxMy4zNDExIDEzLjM0NjcgMTEuOTk5IDE1LjAwMjYgMTEuOTk5XFxuICAgICAgICAgICAgQyAxNS41Mzc5IDExLjk5OTQgMTYuMDYzNSAxMS44NTYzIDE2LjUyNDcgMTEuNTg0NlxcbiAgICAgICAgICAgIEMgMTYuNTY0NSAxMS41NjEgMTYuNjAzOCAxMS41MzYzIDE2LjY0NTUgMTEuNTEwOVxcbiAgICAgICAgICAgIEwgMTYuNjU0IDExLjUwNTVcXG4gICAgICAgICAgICBDIDE2LjY5MDIgMTEuNDgxMyAxNi43MjY1IDExLjQ1NTkgMTYuNzYxNSAxMS40MzA1XFxuICAgICAgICAgICAgTCAxNi43NzcyIDExLjQxOTdcXG4gICAgICAgICAgICBDIDE2LjgwODYgMTEuMzk2NyAxNi44Mzc2IDExLjM3MiAxNi44NzA5IDExLjM0NzJcXG4gICAgICAgICAgICBMIDE2Ljg5NzUgMTEuMzI2NlxcbiAgICAgICAgICAgIEMgMTYuOTI2NSAxMS4zMDMxIDE2Ljk1NDMgMTEuMjc4MyAxNi45ODI3IDExLjI1MzVcXG4gICAgICAgICAgICBMIDE3LjAxMzUgMTEuMjI3XFxuICAgICAgICAgICAgQyAxNy4wNDk3IDExLjE5NDMgMTcuMDg1NCAxMS4xNjA1IDE3LjEyMDQgMTEuMTI1NVxcbiAgICAgICAgICAgIEwgMTcuMTI1OSAxMS4xMjA2XFxuICAgICAgICAgICAgQyAxNy4yNTUzIDEwLjk5MDYgMTcuMzcyNiAxMC44NDkxIDE3LjQ3NjMgMTAuNjk3OFxcbiAgICAgICAgICAgIEMgMTcuNDk4OSAxMC42NjUxIDE3LjUyMDYgMTAuNjMyMSAxNy41NDE2IDEwLjU5ODdcXG4gICAgICAgICAgICBDIDE4LjI4NDMgOS40MTUgMTguMTEwNCA3Ljg3NTIgMTcuMTIyMiA2Ljg4N1pcXG4gICAgICAgICAgICBcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KSwoMCxsLmpzeCkoZCx7Y3g6XCI5XCIsY3k6XCIzXCIscjpcIjIuOVwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIixhbmdsZTowfSksKDAsbC5qc3gpKGQse2N4OlwiMTVcIixjeTpcIjlcIixyOlwiMi43NVwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIixhbmdsZTotOTB9KSwoMCxsLmpzeCkoZCx7Y3g6XCI5XCIsY3k6XCIxNVwiLHI6XCIyLjVcIixmaWxsOlwiY3VycmVudENvbG9yXCIsYW5nbGU6LTE4MH0pLCgwLGwuanN4KShkLHtjeDpcIjNcIixjeTpcIjlcIixyOlwiMi4yNVwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIixhbmdsZTotMjcwfSldfSkpfSkpfSkpYGA7Y29uc3QgdT1zLmRlZmF1bHQucGF0aGBcbiAgQGtleWZyYW1lcyBsb2dvQW5pbWF0aW9uIHtcbiAgICAwJSB7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgICAyNSUge1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgMzUlIHtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgfVxuICAgIDYwJSB7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgIH1cbiAgICA3NSUge1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgMTAwJSB7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgfVxuXG4gIGFuaW1hdGlvbjogbG9nb0FuaW1hdGlvbiAycyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmAsZD1zLmRlZmF1bHQuY2lyY2xlYFxuICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXI7XG4gIGFuaW1hdGlvbjogJHsoe2FuZ2xlOmV9KT0+KGU9PnMua2V5ZnJhbWVzYFxuICAgIDAlIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG4gICAgMjUlIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgMzAlIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgNTAlIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKCR7ZX1kZWcpO1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgNzAlIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0zNjBkZWcpO1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgNzUlIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0zNjBkZWcpO1xuICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG4gICAgMTAwJSB7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMzYwZGVnKTtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgfVxuYCkoZSl9IDJzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuYH0sNzAzMDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5WYWxpZGF0aW9uRXJyb3I9dm9pZCAwO2NvbnN0IG89big1ODkzKSxhPXIobig3NTE4KSksaT1uKDc3NjkpLGw9big5NjM0KTt0LlZhbGlkYXRpb25FcnJvcj0oe2NoaWxkcmVuOmV9KT0+KDAsby5qc3hzKShzLHtjaGlsZHJlbjpbKDAsby5qc3gpKGwuSWNvbix7aWNvbjpcIkV4Y2xhbWF0aW9uQ2lyY2xlZEZpbGxlZEljb25cIn0pLCgwLG8uanN4KShjLHtjaGlsZHJlbjplfSldfSk7Y29uc3Qgcz1hLmRlZmF1bHQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6ICR7KHt0aGVtZTplfSk9PmUucHgueHNtYWxsfTtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBtYXJnaW4tdG9wOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbmAsYz0oMCxhLmRlZmF1bHQpKGkuVGV4dClgXG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dEhlbHB9O1xuYH0sMzU4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuU3R5bGVkSW5wdXRGaWVsZD10LkJhc2VJbnB1dD12b2lkIDA7Y29uc3QgYT1uKDU4OTMpLGk9big2Njg5KSxsPW8obig3NTE4KSkscz1uKDEzMzUpLGM9big5NTA3KSx1PW4oNzc2OSksZD1uKDcwMzApLHA9bigxOTQ0KTt0LkJhc2VJbnB1dD0oMCxpLmZvcndhcmRSZWYpKCgoZSxuKT0+e3ZhcntjbGFzc05hbWU6byxyZW5kZXJJbnB1dDppLG1lc3NhZ2U6bCxsYWJlbDpzLHN0YXR1czpjLG5hbWU6dSxpY29uOnYsdHlwZTpDPVwidGV4dFwiLGhlbHBlclRleHQ6bSxwbGFjZWhvbGRlcjp3fT1lLGI9cihlLFtcImNsYXNzTmFtZVwiLFwicmVuZGVySW5wdXRcIixcIm1lc3NhZ2VcIixcImxhYmVsXCIsXCJzdGF0dXNcIixcIm5hbWVcIixcImljb25cIixcInR5cGVcIixcImhlbHBlclRleHRcIixcInBsYWNlaG9sZGVyXCJdKTtjb25zdCB5PVwiY2hlY2tib3hcIj09PUN8fFwicmFkaW9cIj09PUM7cmV0dXJuKDAsYS5qc3hzKShnLE9iamVjdC5hc3NpZ24oe2ZsZXhEaXJlY3Rpb246XCJjb2x1bW5cIixhbGlnbkl0ZW1zOlwiZmxleC1zdGFydFwifSx7Y2hpbGRyZW46WygwLGEuanN4cykoZixPYmplY3QuYXNzaWduKHtpbmxpbmU6eX0se2NoaWxkcmVuOlshIXMmJigwLGEuanN4KShwLkxhYmVsLHtpbmxpbmU6eSxpY29uOnYsdGV4dDpzLGhlbHBlclRleHQ6bSxodG1sRm9yOnV9KSwhIWkmJmkoT2JqZWN0LmFzc2lnbih7bmFtZTp1LHN0YXR1czpjLHR5cGU6Q30sYikpLCFpJiYoMCxhLmpzeCkodC5TdHlsZWRJbnB1dEZpZWxkLE9iamVjdC5hc3NpZ24oe2NsYXNzTmFtZTpvLG5hbWU6dSxwbGFjZWhvbGRlcjp3LHN0YXR1czpjLHR5cGU6Q30sYix7cmVmOm59KSldfSkpLGwmJihcImNyaXRpY2FsXCI9PT1jPygwLGEuanN4KShkLlZhbGlkYXRpb25FcnJvcix7Y2hpbGRyZW46bH0pOigwLGEuanN4KShoLE9iamVjdC5hc3NpZ24oe3N0YXR1czpjfSx7Y2hpbGRyZW46bH0pKSldfSkpfSkpLHQuQmFzZUlucHV0LmRpc3BsYXlOYW1lPVwiQmFzZUlucHV0XCI7Y29uc3QgZj0oMCxsLmRlZmF1bHQpKHMuQm94KWBcbiAgYWxpZ24taXRlbXM6ICR7KHtpbmxpbmU6ZX0pPT5lP1wiY2VudGVyXCI6XCJmbGV4LXN0YXJ0XCJ9O1xuICBmbGV4LWRpcmVjdGlvbjogJHsoe2lubGluZTplfSk9PmU/XCJyb3ctcmV2ZXJzZVwiOlwiY29sdW1uXCJ9O1xuICBqdXN0aWZ5LWNvbnRlbnQ6ICR7KHtpbmxpbmU6ZX0pPT5lP1wiZmxleC1lbmRcIjpcImZsZXgtc3RhcnRcIn07XG4gIHdpZHRoOiAxMDAlO1xuYCxoPSgwLGwuZGVmYXVsdCkodS5UZXh0KWBcbiAgY29sb3I6ICR7KHt0aGVtZTplLHN0YXR1czp0fSk9PigwLGMuZ2V0U3RhdHVzQ29sb3IpKGUsdCxcInRleHRIZWxwXCIpfTtcbmAsZz0oMCxsLmRlZmF1bHQpKHMuQm94KWBcbiAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmJhc2V9O1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbmA7dC5TdHlsZWRJbnB1dEZpZWxkPWwuZGVmYXVsdC5pbnB1dGBcbiAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ0fTtcbiAgYm9yZGVyOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ2fTtcbiAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZSxzdGF0dXM6dH0pPT4oMCxjLmdldFN0YXR1c0NvbG9yKShlLHQsYy5QYWxldHRlLmlucHV0Qm9yZGVyKX07XG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbiAgYm94LXNoYWRvdzogJHsoe3RoZW1lOmV9KT0+ZS5zaGFkb3cuYmFzZX07XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXRDb2xvcn07XG4gIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5iYXNlfTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YCR7ZS5weC5zbWFsbH0gJHtlLnB4LmJhc2V9YH07XG4gIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciB2YXIoLS1vcGVuZmluLXVpLWdsb2JhbFRyYW5zaXRpb24pO1xuICB3aWR0aDogMTAwJTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiAwO1xuICAgIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmUsc3RhdHVzOnR9KT0+KDAsYy5nZXRTdGF0dXNDb2xvcikoZSx0LGMuUGFsZXR0ZS5pbnB1dEZvY3VzZWQpfTtcbiAgfVxuXG4gICY6ZGlzYWJsZWQge1xuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gIH1cblxuICAmOmRpc2FibGVkOjpwbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dERpc2FibGVkfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGEgaGFjayB0byBpbnZlcnQgdGhlIGNhbGVuZGFyIGljb24uIFRoaXMgb25seSB3b3JrcyBpbiBkYXJrIG1vZGUuXG4gICAqIFVudGlsIGVpdGhlciBsaWdodCBtb2RlIGlzIGEgdGhpbmcgb3Igd2UgZ2V0IGEgZGF0ZXRpbWUgcGlja2VyIGRlc2lnbiwgdGhpcyB3aWxsIGRvLlxuICAgKi9cblxuICA6Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvciB7XG4gICAgZmlsdGVyOiBpbnZlcnQoMSk7XG4gIH1cbmB9LDg4Nzg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDM1OCksdCl9LDE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImRlZmF1bHRcIix7ZW51bWVyYWJsZTohMCx2YWx1ZTp0fSl9OmZ1bmN0aW9uKGUsdCl7ZS5kZWZhdWx0PXR9KSxhPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIiE9PW4mJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZyKHQsZSxuKTtyZXR1cm4gbyh0LGUpLHR9LGk9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn0sbD10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNoZWNrYm94PXZvaWQgMDtjb25zdCBzPW4oNTg5MyksYz1hKG4oNjY4OSkpLHU9bChuKDc1MTgpKSxkPW4oODg3OCkscD1uKDk2MzQpLGY9big5NTA3KTt0LkNoZWNrYm94PWMuZm9yd2FyZFJlZigoKGUsdCk9Pnt2YXJ7c3RhdHVzOm59PWUscj1pKGUsW1wic3RhdHVzXCJdKTtyZXR1cm4oMCxzLmpzeCkoZC5CYXNlSW5wdXQsT2JqZWN0LmFzc2lnbih7fSxyLHt0eXBlOlwiY2hlY2tib3hcIixzdGF0dXM6bixyZW5kZXJJbnB1dDplPT57dmFyIHI9aShlLFtdKTtyZXR1cm4oMCxzLmpzeHMpKGgse2NoaWxkcmVuOlsoMCxzLmpzeCkoQyxPYmplY3QuYXNzaWduKHtyZWY6dCxpZDpyLm5hbWUsdHlwZTpcImNoZWNrYm94XCJ9LHIpKSwoMCxzLmpzeCkoZyxPYmplY3QuYXNzaWduKHtzdGF0dXM6bn0se2NoaWxkcmVuOigwLHMuanN4KSh2LHt9KX0pKV19KX19KSl9KSksdC5DaGVja2JveC5kaXNwbGF5TmFtZT1cIkNoZWNrYm94XCI7Y29uc3QgaD11LmRlZmF1bHQuZGl2YFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbmAsZz11LmRlZmF1bHQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuICB3aWR0aDogJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcbiAgYm9yZGVyOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZSxzdGF0dXM6dH0pPT4oMCxmLmdldFN0YXR1c0NvbG9yKShlLHQsXCJ0ZXh0RGVmYXVsdFwiKX07XG4gIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG5gLHY9KDAsdS5kZWZhdWx0KShwLkljb24pLmF0dHJzKHtpY29uOlwiQ2hlY2tJY29uXCIsc2l6ZTpcInNtYWxsXCJ9KWBcbiAgb3BhY2l0eTogMDtcbmAsQz11LmRlZmF1bHQuaW5wdXRgXG4gIG9wYWNpdHk6IDA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICY6Y2hlY2tlZCArICR7ZytcIiBcIit2fSB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuXG4gICY6aG92ZXIgKyAke2d9IHtcbiAgICBib3gtc2hhZG93OiAwIDAgMXB4IDFweCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXRGb2N1c2VkfTtcbiAgfVxuXG4gICY6Zm9jdXMgKyAke2d9IHtcbiAgICBib3gtc2hhZG93OiAwIDAgMXB4IDFweCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXRGb2N1c2VkfTtcbiAgfVxuXG4gICY6ZGlzYWJsZWQge1xuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gIH1cblxuICAmOmRpc2FibGVkICsgJHtnfSB7XG4gICAgb3BhY2l0eTogMC41O1xuICB9XG5gfSw4MDUxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obigxKSx0KX0sOTAyMjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnR9KX06ZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dH0pLGE9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiIT09biYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnIodCxlLG4pO3JldHVybiBvKHQsZSksdH07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DaGVja2JveEdyb3VwPXZvaWQgMDtjb25zdCBpPW4oNTg5MyksbD1hKG4oNjY4OSkpLHM9YShuKDc1MTgpKSxjPW4oMTMzNSksdT1uKDc3NjkpLGQ9big4MDUxKSxwPW4oNzAzMCk7dC5DaGVja2JveEdyb3VwPSh7ZGlzYWJsZWQ6ZSxnYXA6dD1cInNtYWxsXCIsaGVscGVyVGV4dDpuLGxhYmVsOnIsbWVzc2FnZTpvLGNoaWxkcmVuOmEsdmFsaWRhdGlvbkVycm9yTWVzc2FnZTpzLHZhbHVlczpjLG9uQ2hhbmdlOnV9KT0+e2NvbnN0W3csYl09bC51c2VTdGF0ZShudWxsIT1jP2M6W10pLHk9ZT0+e2NvbnN0IHQ9ZS50YXJnZXQudmFsdWUsbj13LmluY2x1ZGVzKHQpP3cuZmlsdGVyKChlPT5lIT09dCkpOlsuLi53LHRdO2IobiksdSYmdShuKX07cmV0dXJuKDAsaS5qc3hzKSh2LHtjaGlsZHJlbjpbciYmKDAsaS5qc3hzKShmLHtjaGlsZHJlbjpbKDAsaS5qc3gpKGgsT2JqZWN0LmFzc2lnbih7d2VpZ2h0OlwiYm9sZFwifSx7Y2hpbGRyZW46cn0pKSxuJiYoMCxpLmpzeCkoZyx7Y2hpbGRyZW46bn0pXX0pLCgwLGkuanN4KShDLE9iamVjdC5hc3NpZ24oe2dhcDp0fSx7Y2hpbGRyZW46bC5DaGlsZHJlbi5tYXAoYSwodD0+e2NvbnN0IG49dDtyZXR1cm4gbi50eXBlPT09ZC5DaGVja2JveD9sLmNsb25lRWxlbWVudChuLHtkaXNhYmxlZDplLG9uQ2hhbmdlOnksY2hlY2tlZDp3LmluY2x1ZGVzKG4ucHJvcHMudmFsdWUpfSk6bn0pKX0pKSwhdy5sZW5ndGgmJnMmJigwLGkuanN4KShwLlZhbGlkYXRpb25FcnJvcix7Y2hpbGRyZW46c30pLG8/KDAsaS5qc3gpKG0sT2JqZWN0LmFzc2lnbih7ZGlzYWJsZWQ6ZX0se2NoaWxkcmVuOm99KSk6bnVsbF19KX07Y29uc3QgZj0oMCxzLmRlZmF1bHQpKGMuQm94KWBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgbWFyZ2luLWJvdHRvbTogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG5gLGg9KDAscy5kZWZhdWx0KSh1LlRleHQpYFxuICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcbmAsZz0oMCxzLmRlZmF1bHQpKHUuVGV4dClgXG4gIHNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dEhlbHB9O1xuYCx2PSgwLHMuZGVmYXVsdCkoYy5Cb3gpYFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB3aWR0aDogbWF4LWNvbnRlbnQ7XG5gLEM9KDAscy5kZWZhdWx0KShjLkJveClgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGFsaWduLWl0ZW1zOiBzdGFydDtcbiAgd2lkdGg6IGZpdC1jb250ZW50O1xuYCxtPSgwLHMuZGVmYXVsdCkodS5UZXh0KWBcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dFBsYWNlaG9sZGVyfTtcbiAgbWFyZ2luLXRvcDogJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcblxuICAkeyh7ZGlzYWJsZWQ6ZX0pPT5lJiZzLmNzc2BcbiAgICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXREaXNhYmxlZH07XG4gICAgYH1cbmB9LDQxNjk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDkwMjIpLHQpfSw5MzY4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuRGF0ZUlucHV0PXZvaWQgMDtjb25zdCBhPW4oNTg5MyksaT1uKDY2ODkpLGw9byhuKDc1MTgpKSxzPW4oOTYzNCksYz1uKDEzMzUpLHU9big4ODc4KTt0LkRhdGVJbnB1dD0oMCxpLmZvcndhcmRSZWYpKCgoZSx0KT0+e3Zhcnt2YWx1ZTpuPVwiXCIsdHlwZTpvPVwiZGF0ZVwiLGV4cGFuZGVkOmw9ITEsb25DaGFuZ2U6c309ZSxjPXIoZSxbXCJ2YWx1ZVwiLFwidHlwZVwiLFwiZXhwYW5kZWRcIixcIm9uQ2hhbmdlXCJdKTtjb25zdFtwLGZdPSgwLGkudXNlU3RhdGUpKG4pO3JldHVybigwLGkudXNlRWZmZWN0KSgoKCk9PmYobikpLFtdKSwoMCxhLmpzeCkodS5CYXNlSW5wdXQsT2JqZWN0LmFzc2lnbih7dHlwZTpvfSxjLHtyZW5kZXJJbnB1dDplPT57dmFyIG49cihlLFtdKTtyZXR1cm4oMCxhLmpzeCkoZCxPYmplY3QuYXNzaWduKHtyZWY6dCx0eXBlOm8sb25DaGFuZ2U6ZT0+e2NvbnN0e3ZhbHVlOnR9PWUudGFyZ2V0O3QmJmYodCksbnVsbD09c3x8cyhlKX0sdmFsdWU6cCxleHBhbmRlZDpsfSxuKSl9fSkpfSkpLHQuRGF0ZUlucHV0LmRpc3BsYXlOYW1lPVwiRGF0ZUlucHV0XCI7Y29uc3QgZD0oMCxpLmZvcndhcmRSZWYpKCgoZSx0KT0+e3Zhcnt0eXBlOm4sZXhwYW5kZWQ6byxvbkV4cGFuZDppfT1lLGw9cihlLFtcInR5cGVcIixcImV4cGFuZGVkXCIsXCJvbkV4cGFuZFwiXSk7cmV0dXJuKDAsYS5qc3hzKShwLHtjaGlsZHJlbjpbKDAsYS5qc3gpKGgse2NoaWxkcmVuOigwLGEuanN4KShzLkljb24se2ljb246XCJ0aW1lXCI9PT1uP1wiQ2xvY2tJY29uXCI6XCJDYWxlbmRhckljb25cIn0pfSksKDAsYS5qc3gpKHYsT2JqZWN0LmFzc2lnbih7cmVmOnQsdHlwZTpuLG9uS2V5RG93bjplPT57XCIgXCI9PT1lLmtleSYmZS5wcmV2ZW50RGVmYXVsdCgpfX0sbCkpLCgwLGEuanN4KShnLE9iamVjdC5hc3NpZ24oe2ZsZXhEaXJlY3Rpb246XCJjb2x1bW5cIixkaXNhYmxlZDpsLmRpc2FibGVkLG9uQ2xpY2s6aX0se2NoaWxkcmVuOigwLGEuanN4KShzLkljb24se2ljb246bz9cIkNoZXZyb25VcEljb25cIjpcIkNoZXZyb25Eb3duSWNvblwifSl9KSldfSl9KSk7ZC5kaXNwbGF5TmFtZT1cIlN0eWxlZERhdGVJbnB1dFwiO2NvbnN0IHA9bC5kZWZhdWx0LmRpdmBcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG4gIHdpZHRoOiAxMDAlO1xuYCxmPSgwLGwuZGVmYXVsdCkoYy5Cb3gpYFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDFweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAycHgpO1xuYCxoPSgwLGwuZGVmYXVsdCkoZilgXG4gIGxlZnQ6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbmAsZz0oMCxsLmRlZmF1bHQpKGYpYFxuICByaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG4gIHBvaW50ZXItZXZlbnRzOiAkeyh7ZGlzYWJsZWQ6ZX0pPT5lP1wibm9uZVwiOnZvaWQgMH07XG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ2fTtcbiAgcGFkZGluZy1sZWZ0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbmAsdj0oMCxsLmRlZmF1bHQpKHUuU3R5bGVkSW5wdXRGaWVsZClgXG4gIGFwcGVhcmFuY2U6IHRleHRmaWVsZDtcbiAgcGFkZGluZy1yaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5weC54eHhsYXJnZX07XG4gIHBhZGRpbmctbGVmdDogJHsoe3RoZW1lOmV9KT0+ZS5weC54eHhsYXJnZX07XG4gIDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbiAgOjotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3Ige1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgfVxuYH0sMTQ2NzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oOTM2OCksdCl9LDE5Nzg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDY4ODQpLHQpfSw2ODg0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTnVtYmVySW5wdXQ9dC5EaXJlY3Rpb249dm9pZCAwO2NvbnN0IGE9big1ODkzKSxpPW4oNjY4OSksbD1vKG4oNzUxOCkpLHM9big5NjM0KSxjPW4oMTMzNSksdT1uKDg4NzgpO3ZhciBkOyFmdW5jdGlvbihlKXtlW2UuVXA9MV09XCJVcFwiLGVbZS5Eb3duPS0xXT1cIkRvd25cIn0oZD10LkRpcmVjdGlvbnx8KHQuRGlyZWN0aW9uPXt9KSksdC5OdW1iZXJJbnB1dD0oMCxpLmZvcndhcmRSZWYpKCgoZSx0KT0+e3ZhcnttaW46bixtYXg6byxzdGVwOmk9MSxvblRha2VTdGVwOmwsdmFsdWU6c309ZSxjPXIoZSxbXCJtaW5cIixcIm1heFwiLFwic3RlcFwiLFwib25UYWtlU3RlcFwiLFwidmFsdWVcIl0pO3JldHVybigwLGEuanN4KSh1LkJhc2VJbnB1dCxPYmplY3QuYXNzaWduKHt0eXBlOlwibnVtYmVyXCJ9LGMse3JlbmRlcklucHV0OmU9Pnt2YXIgdT1yKGUsW10pO3JldHVybigwLGEuanN4KShwLE9iamVjdC5hc3NpZ24oe3ByZXBlbmRJY29uOmMucHJlcGVuZEljb24scHJlcGVuZFN0cmluZzpjLnByZXBlbmRTdHJpbmcscmVmOnQsb25JbmNyZW1lbnQ6KCk9PmwmJmwoZC5VcCxpKSxvbkRlY3JlbWVudDooKT0+bCYmbChkLkRvd24saSksbWluOm4sbWF4Om8sc3RlcDppfSx1LHtwbGFjZWhvbGRlcjpjLnBsYWNlaG9sZGVyLHZhbHVlOnMsXCJhcmlhLXZhbHVlbm93XCI6cyxcImFyaWEtdmFsdWVtaW5cIjpuLFwiYXJpYS12YWx1ZW1heFwiOm99KSl9fSkpfSkpLHQuTnVtYmVySW5wdXQuZGlzcGxheU5hbWU9XCJOdW1iZXJJbnB1dFwiO2NvbnN0IHA9KDAsaS5mb3J3YXJkUmVmKSgoKGUsdCk9Pnt2YXJ7b25JbmNyZW1lbnQ6bixvbkRlY3JlbWVudDpvLHByZXBlbmRJY29uOmwscHJlcGVuZFN0cmluZzpjfT1lLHU9cihlLFtcIm9uSW5jcmVtZW50XCIsXCJvbkRlY3JlbWVudFwiLFwicHJlcGVuZEljb25cIixcInByZXBlbmRTdHJpbmdcIl0pO2NvbnN0IGQ9KGUsdCk9PntcIkVudGVyXCIhPT1lLmtleSYmXCIgXCIhPT1lLmtleXx8KGUucHJldmVudERlZmF1bHQoKSx0P24oKTpvKCkpfSxwPSgwLGkudXNlUmVmKShudWxsKSxbbSx3XT0oMCxpLnVzZVN0YXRlKSgwKTtyZXR1cm4oMCxpLnVzZUVmZmVjdCkoKCgpPT57cC5jdXJyZW50P3cocC5jdXJyZW50Lm9mZnNldFdpZHRoKTp3KDApfSksW3AuY3VycmVudCxsLGNdKSwoMCxhLmpzeHMpKGYse2NoaWxkcmVuOlsoISFsfHwhIWMpJiYoMCxhLmpzeHMpKGgsT2JqZWN0LmFzc2lnbih7aGFzSWNvbjohIWwscmVmOnAsYWxpZ25JdGVtczpcImNlbnRlclwiLGp1c3RpZnlDb250ZW50OlwiY2VudGVyXCJ9LHtjaGlsZHJlbjpbbCYmKDAsYS5qc3gpKHMuSWNvbix7aWNvbjpsLHNpemU6XCJiYXNlXCJ9KSxjJiYhbCYmY119KSksKDAsYS5qc3gpKEMsT2JqZWN0LmFzc2lnbih7cHJlcGVuZENvbnRhaW5lcldpZHRoOm0scmVmOnR9LHUpKSwoMCxhLmpzeHMpKGcsT2JqZWN0LmFzc2lnbih7ZmxleERpcmVjdGlvbjpcImNvbHVtblwiLGRpc2FibGVkOnUuZGlzYWJsZWR9LHtjaGlsZHJlbjpbKDAsYS5qc3gpKHYsT2JqZWN0LmFzc2lnbih7b25DbGljazpuLG9uS2V5RG93bjplPT5kKGUsITApLGRpc2FibGVkOnUuZGlzYWJsZWQsXCJhcmlhLWxhYmVsXCI6XCJJbmNyZW1lbnQgdmFsdWVcIix0YWJJbmRleDowfSx7Y2hpbGRyZW46KDAsYS5qc3gpKHMuSWNvbix7aWNvbjpcIlRyaWFuZ2xlVXBJY29uXCJ9KX0pKSwoMCxhLmpzeCkodixPYmplY3QuYXNzaWduKHtvbktleURvd246ZT0+ZChlKSxvbkNsaWNrOm8sXCJhcmlhLWxhYmVsXCI6XCJEZWNyZW1lbnQgdmFsdWVcIixkaXNhYmxlZDp1LmRpc2FibGVkLHRhYkluZGV4OjB9LHtjaGlsZHJlbjooMCxhLmpzeCkocy5JY29uLHtpY29uOlwiVHJpYW5nbGVEb3duSWNvblwifSl9KSldfSkpXX0pfSkpO3AuZGlzcGxheU5hbWU9XCJTdHlsZWROdW1iZXJJbnB1dFwiO2NvbnN0IGY9bC5kZWZhdWx0LmRpdmBcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG4gIHdpZHRoOiAxMDAlO1xuYCxoPSgwLGwuZGVmYXVsdCkoYy5Cb3gpYFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDZ9O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDFweDtcbiAgdG9wOiAxcHg7XG4gIHdpZHRoOiAkeyh7dGhlbWU6ZSxoYXNJY29uOnR9KT0+dD9lLnB4Lnh4bGFyZ2U6XCJmaXQtY29udGVudFwifTtcbiAgcGFkZGluZzogMCAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAycHgpO1xuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5gJHtlLnJhZGl1cy5zbWFsbH0gMCAwICR7ZS5yYWRpdXMuc21hbGx9YH07XG5gLGc9KDAsbC5kZWZhdWx0KShjLkJveClgXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDFweDtcbiAgdG9wOiAxcHg7XG4gIGdhcDogMXB4O1xuICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDJweCk7XG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmAwICR7ZS5yYWRpdXMuc21hbGx9ICR7ZS5yYWRpdXMuc21hbGx9IDBgfTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICBwb2ludGVyLWV2ZW50czogJHsoe2Rpc2FibGVkOmV9KT0+ZT9cIm5vbmVcIjp2b2lkIDB9O1xuYCx2PSgwLGwuZGVmYXVsdCkoYy5Cb3gpYFxuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNn07XG4gIHBhZGRpbmc6IDAgJHsoe3RoZW1lOmV9KT0+ZS5weC54c21hbGx9O1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgaGVpZ2h0OiA1MCU7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXG4gIGNvbG9yOiAkeyh7ZGlzYWJsZWQ6ZSx0aGVtZTp0fSk9PmU/dC5wYWxldHRlLnRleHRIZWxwOnQucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG5cbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0Rm9jdXNlZH07XG4gIH1cblxuICAmOmFjdGl2ZSB7XG4gICAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0Q29sb3J9O1xuICB9XG5gLEM9KDAsbC5kZWZhdWx0KSh1LlN0eWxlZElucHV0RmllbGQpYFxuICBhcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XG4gIHBhZGRpbmctbGVmdDogJHsoe3ByZXBlbmRDb250YWluZXJXaWR0aDplfSk9PmAke2UrMTB9cHhgfTtcblxuICA6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG4gIDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XG4gICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgICBtYXJnaW46IDA7XG4gIH1cbmB9LDUyMTU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDIyNTUpLHQpfSwyMjU1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pfTpmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10fSksYT10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCIhPT1uJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmcih0LGUsbik7cmV0dXJuIG8odCxlKSx0fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlJhZGlvR3JvdXA9dm9pZCAwO2NvbnN0IGk9big1ODkzKSxsPWEobig2Njg5KSkscz1hKG4oNzUxOCkpLGM9bigxMzM1KSx1PW4oNzc2OSksZD1uKDI1NjUpLHA9big3MDMwKTt0LlJhZGlvR3JvdXA9KHtkaXJlY3Rpb246ZT1cImNvbHVtblwiLGxhYmVsOnQsZGlzYWJsZWQ6bixsYWJlbFNpZGU6cj1cInJpZ2h0XCIsZ2FwOm89XCJzbWFsbFwiLG1lc3NhZ2U6YSxoZWxwZXJUZXh0OnMsbmFtZTpjLGNoaWxkcmVuOnUsdmFsaWRhdGlvbkVycm9yTWVzc2FnZTp3LG9uQ2hhbmdlOmIsdmFsdWU6eX0pPT57Y29uc3RbeCxrXT1sLnVzZVN0YXRlKHkpLFM9ZT0+e2soZS50YXJnZXQudmFsdWUpLGImJmIoZSl9O3JldHVybiBsLnVzZUVmZmVjdCgoKCk9PntrKHkpfSksW3ldKSwoMCxpLmpzeHMpKGgse2NoaWxkcmVuOlsoMCxpLmpzeHMpKGYse2NoaWxkcmVuOlsoMCxpLmpzeCkobSxPYmplY3QuYXNzaWduKHt3ZWlnaHQ6XCJib2xkXCJ9LHtjaGlsZHJlbjp0fSkpLHMmJigwLGkuanN4KShnLHtjaGlsZHJlbjpzfSldfSksKDAsaS5qc3gpKHYsT2JqZWN0LmFzc2lnbih7ZGlyZWN0aW9uOmUsbGFiZWxTaWRlOnIsZ2FwOm99LHtjaGlsZHJlbjpsLkNoaWxkcmVuLm1hcCh1LChlPT57Y29uc3QgdD1lO3JldHVybiB0LnR5cGU9PT1kLlJhZGlvSW5wdXQ/bC5jbG9uZUVsZW1lbnQodCx7bmFtZTpjLGxhYmVsU2lkZTpyLGRpc2FibGVkOm4sb25DaGFuZ2U6UyxjaGVja2VkOnQucHJvcHMudmFsdWU9PT14fSk6dH0pKX0pKSwheCYmdyYmKDAsaS5qc3gpKHAuVmFsaWRhdGlvbkVycm9yLHtjaGlsZHJlbjp3fSksYT8oMCxpLmpzeCkoQyxPYmplY3QuYXNzaWduKHtkaXNhYmxlZDpufSx7Y2hpbGRyZW46YX0pKTpudWxsXX0pfTtjb25zdCBmPSgwLHMuZGVmYXVsdCkoYy5Cb3gpYFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBtYXJnaW4tYm90dG9tOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbmAsaD0oMCxzLmRlZmF1bHQpKGMuQm94KWBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6IG1heC1jb250ZW50O1xuYCxnPSgwLHMuZGVmYXVsdCkodS5UZXh0KWBcbiAgc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5iYXNlfTtcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0SGVscH07XG5gLHY9KDAscy5kZWZhdWx0KShjLkJveClgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiAke2U9PmUuZGlyZWN0aW9ufTtcbiAgYWxpZ24taXRlbXM6ICR7ZT0+e3N3aXRjaChlLmxhYmVsU2lkZSl7Y2FzZVwibGVmdFwiOnJldHVyblwiZW5kXCI7Y2FzZVwicmlnaHRcIjpyZXR1cm5cInN0YXJ0XCI7ZGVmYXVsdDpyZXR1cm5cImNlbnRlclwifX19O1xuICB3aWR0aDogZml0LWNvbnRlbnQ7XG5gLEM9KDAscy5kZWZhdWx0KSh1LlRleHQpYFxuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0UGxhY2Vob2xkZXJ9O1xuICBtYXJnaW4tdG9wOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuXG4gICR7KHtkaXNhYmxlZDplfSk9PmUmJnMuY3NzYFxuICAgICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dERpc2FibGVkfTtcbiAgICBgfVxuYCxtPSgwLHMuZGVmYXVsdCkodS5UZXh0KWBcbiAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XG5gfSwzNjQxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obigyNTY1KSx0KX0sMjU2NTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnR9KX06ZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dH0pLGE9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiIT09biYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnIodCxlLG4pO3JldHVybiBvKHQsZSksdH0saT10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlJhZGlvSW5wdXQ9dm9pZCAwO2NvbnN0IGw9big1ODkzKSxzPW4oNzc2OSksYz1hKG4oNjY4OSkpLHU9YShuKDc1MTgpKSxkPW4oMTMzNSkscD1uKDk2MzQpO3QuUmFkaW9JbnB1dD1jLmZvcndhcmRSZWYoKChlLHQpPT57dmFye2Rpc2FibGVkOm4saWQ6cixsYWJlbDpvLGxhYmVsU2lkZTphLGljb246c309ZSxjPWkoZSxbXCJkaXNhYmxlZFwiLFwiaWRcIixcImxhYmVsXCIsXCJsYWJlbFNpZGVcIixcImljb25cIl0pO3JldHVybigwLGwuanN4KShmLHtjaGlsZHJlbjooMCxsLmpzeHMpKHYsT2JqZWN0LmFzc2lnbih7YXM6XCJsYWJlbFwiLGh0bWxGb3I6cixsYWJlbFNpZGU6YSxkaXNhYmxlZDpufSx7Y2hpbGRyZW46WygwLGwuanN4KShnLE9iamVjdC5hc3NpZ24oe3JlZjp0LHR5cGU6XCJyYWRpb1wiLGRpc2FibGVkOm59LGMpKSwoMCxsLmpzeCkoaCx7fSksISFzJiYoMCxsLmpzeCkocC5JY29uLHtpY29uOnN9KSxvfHxcIlwiXX0pKX0pfSkpLHQuUmFkaW9JbnB1dC5kaXNwbGF5TmFtZT1cIlJhZGlvSW5wdXRcIjtjb25zdCBmPSgwLHUuZGVmYXVsdCkoZC5Cb3gpYFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuYCxoPXUuZGVmYXVsdC5kaXZgXG4gIHdpZHRoOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuICBoZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XG5cbiAgaW5wdXQ6Y2hlY2tlZCB+ICY6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbjogMnB4IDFweCAwcHggMnB4O1xuICAgIHdpZHRoOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbiAgICBoZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICB9XG5cbiAgaW5wdXQ6ZGlzYWJsZWQgfiAmIHtcbiAgICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dERpc2FibGVkfTtcbiAgfVxuXG4gIGlucHV0OmRpc2FibGVkIH4gJjphZnRlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0RGlzYWJsZWR9O1xuICB9XG5gLGc9dS5kZWZhdWx0LmlucHV0YFxuICBvcGFjaXR5OiAwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGN1cnNvcjogcG9pbnRlcjtcblxuICAmOmRpc2FibGVkIHtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gIH1cbmAsdj0oMCx1LmRlZmF1bHQpKHMuVGV4dClgXG4gIHdpZHRoOiBmaXQtY29udGVudDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZmxleC1kaXJlY3Rpb246ICR7KHtsYWJlbFNpZGU6ZX0pPT57c3dpdGNoKGV8fFwicmlnaHRcIil7Y2FzZVwibGVmdFwiOnJldHVyblwicm93LXJldmVyc2VcIjtjYXNlXCJyaWdodFwiOnJldHVyblwicm93XCI7Y2FzZVwidG9wXCI6cmV0dXJuXCJjb2x1bW4tcmV2ZXJzZVwiO2Nhc2VcImJvdHRvbVwiOnJldHVyblwiY29sdW1uXCJ9fX07XG4gIGdhcDogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG4gIGN1cnNvcjogcG9pbnRlcjtcblxuICAkeyh7ZGlzYWJsZWQ6ZX0pPT5lP3UuY3NzYFxuICAgICAgICAgICYge1xuICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXREaXNhYmxlZH07XG4gICAgICAgIGA6bnVsbH1cbmB9LDg1MTA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDcwNjgpLHQpfSw3MDY4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlJhd0lucHV0PXZvaWQgMDtjb25zdCBvPXIobig3NTE4KSk7dC5SYXdJbnB1dD1vLmRlZmF1bHQuaW5wdXRgYCx0LlJhd0lucHV0LmRpc3BsYXlOYW1lPVwiUmF3SW5wdXRcIn0sMzExOTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oNzk5KSx0KX0sNzk5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlRleHRBcmVhPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksYT1uKDY2ODkpLGk9cihuKDc1MTgpKSxsPW4oOTUwNykscz1uKDk1MDcpLGM9bigxMzM1KSx1PW4oMTk0NCk7dC5UZXh0QXJlYT0oMCxhLmZvcndhcmRSZWYpKCgoZSx0KT0+KDAsby5qc3gpKHAsT2JqZWN0LmFzc2lnbih7ZmxleERpcmVjdGlvbjpcImNvbHVtblwiLGFsaWduSXRlbXM6XCJmbGV4LXN0YXJ0XCJ9LHtjaGlsZHJlbjooMCxvLmpzeHMpKGQse2NoaWxkcmVuOlshIWUubGFiZWwmJigwLG8uanN4KSh1LkxhYmVsLHt0ZXh0OmUubGFiZWwsaHRtbEZvcjplLm5hbWUsaGVscGVyVGV4dDplLmhlbHBlclRleHR9KSwoMCxvLmpzeCkoZixPYmplY3QuYXNzaWduKHtyZWY6dH0sZSx7b25DaGFuZ2U6ZS5vbkNoYW5nZX0pKV19KX0pKSkpLHQuVGV4dEFyZWEuZGlzcGxheU5hbWU9XCJUZXh0QXJlYVwiO2NvbnN0IGQ9KDAsaS5kZWZhdWx0KShjLkJveClgXG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIHdpZHRoOiAxMDAlO1xuYCxwPSgwLGkuZGVmYXVsdCkoYy5Cb3gpYFxuICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gIHVzZXItc2VsZWN0OiBub25lO1xuYCxmPWkuZGVmYXVsdC50ZXh0YXJlYWBcbiAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ0fTtcbiAgYm9yZGVyOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0Qm9yZGVyfTtcbiAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZSxzdGF0dXM6dH0pPT4oMCxzLmdldFN0YXR1c0NvbG9yKShlLHQsXCJpbnB1dEJvcmRlclwiKX07XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgd2lkdGg6IDEwMCU7XG4gIHJlc2l6ZTogbm9uZTtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgJHtsLk1peGlucy5zY3JvbGxiYXIuc21hbGx9O1xuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0Q29sb3J9O1xuICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gIGxpbmUtaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmxpbmVIZWlnaHQudGV4dH07XG4gIGZvbnQtd2VpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRXZWlnaHQubm9ybWFsfTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH0gJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH0gMHB4ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuXG4gICY6Zm9jdXMge1xuICAgIG91dGxpbmU6IDA7XG4gICAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZSxzdGF0dXM6dH0pPT4oMCxzLmdldFN0YXR1c0NvbG9yKShlLHQsXCJpbnB1dEZvY3VzZWRcIil9O1xuICB9XG5cbiAgJjpkaXNhYmxlZDo6cGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXREaXNhYmxlZH07XG4gIH1cbmB9LDg5NTE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDIzNTIpLHQpfSwyMzUyOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlRleHRJbnB1dD12b2lkIDA7Y29uc3Qgcj1uKDU4OTMpLG89big2Njg5KSxhPW4oODg3OCk7dC5UZXh0SW5wdXQ9KDAsby5mb3J3YXJkUmVmKSgoKGUsdCk9PigwLHIuanN4KShhLkJhc2VJbnB1dCxPYmplY3QuYXNzaWduKHtyZWY6dCx0eXBlOlwidGV4dFwifSxlKSkpKSx0LlRleHRJbnB1dC5kaXNwbGF5TmFtZT1cIlRleHRJbnB1dFwifSwzMzM5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkJveD12b2lkIDA7Y29uc3Qgbz1yKG4oNzUxOCkpLGE9big4NzMyKSxpPW4oNTQ1OSksbD17MTppLlBhbGV0dGUuYmFja2dyb3VuZDEsMjppLlBhbGV0dGUuYmFja2dyb3VuZDIsMzppLlBhbGV0dGUuYmFja2dyb3VuZDMsNDppLlBhbGV0dGUuYmFja2dyb3VuZDQsNTppLlBhbGV0dGUuYmFja2dyb3VuZDUsNjppLlBhbGV0dGUuYmFja2dyb3VuZDZ9O3QuQm94PW8uZGVmYXVsdC5kaXZgXG4gIC8qKlxuICAgKiBTdHlsZSBTY3JvbGxiYXIgZm9yIEJveGVzIHdpdGggb3ZlcmZsb3dcbiAgICovXG4gICR7YS5NaXhpbnMuc2Nyb2xsYmFyLmJhc2V9XG5cbiAgZGlzcGxheTogJHsoe2Rpc3BsYXk6ZT1cImZsZXhcIn0pPT5lfTtcbiAgZmxleC1kaXJlY3Rpb246ICR7KHtmbGV4RGlyZWN0aW9uOmU9XCJyb3dcIn0pPT5lfTtcbiAgZmxleC13cmFwOiAkeyh7ZmxleFdyYXA6ZT1cIm5vd3JhcFwifSk9PmV9O1xuICBhbGlnbi1pdGVtczogJHsoe2FsaWduSXRlbXM6ZX0pPT5lfTtcbiAganVzdGlmeS1jb250ZW50OiAkeyh7anVzdGlmeUNvbnRlbnQ6ZX0pPT5lfTtcbiAgZ2FwOiAkeyh7dGhlbWU6ZSxnYXA6dH0pPT50JiZlLnB4W3RdfTtcbiAgYWxpZ24tc2VsZjogJHsoe2FsaWduU2VsZjplfSk9PmV9O1xuICBmbGV4LWJhc2lzOiAkeyh7ZmxleEJhc2lzOmV9KT0+ZX07XG4gIGZsZXgtZ3JvdzogJHsoe2ZsZXhHcm93OmV9KT0+ZX07XG4gIGZsZXgtc2hyaW5rOiAkeyh7ZmxleFNocmluazplfSk9PmV9O1xuICBvcmRlcjogJHsoe29yZGVyOmV9KT0+ZX07XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplLHBhZGRpbmc6dH0pPT50JiZlLnB4W3RdfTtcbiAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmUsYmFja2dyb3VuZDp0fSk9PnQmJmUucGFsZXR0ZVtsW3RdXX07XG5gLHQuQm94LmRpc3BsYXlOYW1lPVwiQm94XCJ9LDEzMzU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDMzMzkpLHQpfSw2NzEwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuRGVmaW5pdGlvbkxpc3Q9dm9pZCAwO2NvbnN0IGE9big1ODkzKSxpPW8obig3NTE4KSk7dC5EZWZpbml0aW9uTGlzdD1lPT57dmFye2RlZmluaXRpb25zOnR9PWUsbj1yKGUsW1wiZGVmaW5pdGlvbnNcIl0pO3JldHVybigwLGEuanN4KShzLE9iamVjdC5hc3NpZ24oe30sbix7cm9sZTpcImxpc3RcIn0se2NoaWxkcmVuOihBcnJheS5pc0FycmF5KHQpP3Q6QXJyYXkuZnJvbSh0KSkubWFwKCgoW2UsdF0sbik9PigwLGEuanN4cykobCxPYmplY3QuYXNzaWduKHtyb2xlOlwibGlzdGl0ZW1cIn0se2NoaWxkcmVuOlsoMCxhLmpzeCkoYyxPYmplY3QuYXNzaWduKHtpZDpgdGVybSR7bn1gfSx7Y2hpbGRyZW46ZX0pKSwoMCxhLmpzeCkodSxPYmplY3QuYXNzaWduKHtcImFyaWEtbGFiZWxsZWRieVwiOmB0ZXJtJHtufWB9LHtjaGlsZHJlbjp0fSkpXX0pLGAke2V9LSR7bn1gKSkpfSkpfTtjb25zdCBsPWkuZGVmYXVsdC5kaXZgXG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDNmcjtcbmAscz1pLmRlZmF1bHQuZGxgXG4gIGdhcDogJHsoe3RoZW1lOmV9KT0+YDAgJHtlLnB4LmxhcmdlfWB9O1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5gJHtlLnB4LnNtYWxsfSAke2UucHguYmFzZX1gfTtcbiAgd29yZC1icmVhazogYnJlYWstd29yZDtcbmAsYz1pLmRlZmF1bHQuZHRgXG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dEhlbHB9O1xuICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuc21hbGx9O1xuICBmb250LXdlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5mb250V2VpZ2h0Lm5vcm1hbH07XG4gIGxpbmUtaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuICBwYWRkaW5nLWJvdHRvbTogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5gLHU9aS5kZWZhdWx0LmRkYFxuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLnNtYWxsfTtcbiAgbGluZS1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG4gIHBhZGRpbmctYm90dG9tOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbmB9LDUzNzc6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDY3MTApLHQpfSw5NDMxOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lkdsb2JhbFN0eWxlcz12b2lkIDA7Y29uc3Qgcj1uKDc1MTgpLG89big1NzUpLGE9big5MjcyKTt0Lkdsb2JhbFN0eWxlcz1yLmNyZWF0ZUdsb2JhbFN0eWxlYFxuICAvKiogLT4gRGVmaW5lIEdsb2JhbCBDU1MgVmFycyAqL1xuICA6cm9vdCB7XG4gICAgLS1vcGVuZmluLXVpLWdsb2JhbFRyYW5zaXRpb246ICR7KHt0aGVtZTplfSk9PmUudHJhbnNpdGlvbi5iYXNlfTtcblxuICAgIGZvbnQtZmFtaWx5OiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRGYW1pbHl9O1xuICAgIC8qIE1hcCBvdmVyIHRoZSBwYWxldHRlIGtleXMgYW5kIGNyZWF0ZSB2YXJpYWJsZXMgb3V0IG9mIHRoZW0gKi9cbiAgICAke28uZ2V0Um9vdENzc1ZhcnN9XG4gIH1cblxuICAvKiogLT4gQGZvbnQtZmFjZSBEZWNsYXJhdGlvbiAqL1xuICAkeyh7Zm9udHM6ZX0pPT4oMCxhLmNyZWF0ZUZvbnRGYWNlQ3NzKShlKX1cblxuICAvKiogLT4gTWljcm8gUmVzZXQgKi9cbiAgKiB7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICAvKipcbiAgICAgKiBQcmV2ZW50IGJyb3dzZXIgYXV0by13ZWlnaHRpbmdcbiAgICAgKiBAbGluayBodHRwczovL2Nzcy10cmlja3MuY29tL2FsbWFuYWMvcHJvcGVydGllcy9mL2ZvbnQtc3ludGhlc2lzL1xuICAgICAqL1xuICAgIGZvbnQtc3ludGhlc2lzOiBub25lO1xuICB9XG5cbiAgLyoqIC0+IEFwcGx5IEdsb2JhbCBTdHlsZXMgKi9cblxuICBib2R5LFxuICA6cm9vdCB7XG4gICAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQxfTtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgICBmb250LWZhbWlseTogJHsoe3RoZW1lOmV9KT0+ZS5mb250RmFtaWx5fTtcbiAgICBmb250LXdlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5mb250V2VpZ2h0Lm5vcm1hbH07XG4gICAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmJhc2V9O1xuICAgIGxpbmUtaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmxpbmVIZWlnaHQudGV4dH07XG4gIH1cblxuICA6OnBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0UGxhY2Vob2xkZXJ9O1xuICB9XG5cbiAgLyoqIC0+IFJlZHVjZWQgTW90aW9uIChBY2Nlc3NpYmlsaXR5KSAqL1xuICBAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb24pIHtcbiAgICA6cm9vdCB7XG4gICAgICAtLW9wZW5maW4tdWktZ2xvYmFsVHJhbnNpdGlvbjogJHsoe3RoZW1lOmV9KT0+ZS50cmFuc2l0aW9uLm5vbmV9O1xuICAgIH1cbiAgfVxuYH0sMTA2OTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oOTQzMSksdCl9LDEzMTA6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0sOTUwNzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oOTYzOCksdCksbyhuKDQyMCksdCl9LDk5ODQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZ2V0TW9zdFJlYWRhYmxlPXQuZGFya2VuQ29sb3I9dC5saWdodGVuQ29sb3I9dm9pZCAwO2NvbnN0IG89cihuKDgyMDcpKTt0LmxpZ2h0ZW5Db2xvcj0oZSx0KT0+YShlLFwibGlnaHRlblwiLHQpLHQuZGFya2VuQ29sb3I9KGUsdCk9PmEoZSxcImRhcmtlblwiLHQpO2NvbnN0IGE9KGUsdCxuKT0+e2lmKG4mJihuPDB8fG4+MTAwKSl0aHJvdyBuZXcgRXJyb3IoYCR7bn0gbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEwMGApO3JldHVybigwLG8uZGVmYXVsdCkoZSlbdF0obikudG9TdHJpbmcoKX07dC5nZXRNb3N0UmVhZGFibGU9KGUsdCk9Pm8uZGVmYXVsdC5tb3N0UmVhZGFibGUoZSx0KS50b0hleFN0cmluZygpfSwzNDcxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pfTpmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10fSksYT10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCIhPT1uJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmcih0LGUsbik7cmV0dXJuIG8odCxlKSx0fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lkljb25TaXplPXQuSWNvblNldD10LlRyYW5zaXRpb249dC5MaW5lSGVpZ2h0PXQuRm9udFdlaWdodD10LkZvbnRTaXplPXQuRm9udEZhbWlseT10LlNoYWRvdz10LlJhZGl1cz10LlVuaXRQeD10LlVuaXQ9dC5TaXplTmFtZT10LlNpemU9dC5Db2xvcj12b2lkIDA7Y29uc3QgaT1hKG4oMTUyMSkpLGw9YShuKDI3NzIpKTt0LkNvbG9yPXt3aGl0ZTpcIiNGRkZGRkZcIixsaWdodEdyYXkxOlwiI0ZBRkJGRVwiLGxpZ2h0R3JheTI6XCIjRjNGNUY4XCIsbGlnaHRHcmF5MzpcIiNFQ0VFRjFcIixsaWdodEdyYXk0OlwiI0REREZFNFwiLGxpZ2h0R3JheTU6XCIjQzlDQkQyXCIsbmV1dHJhbEdyYXk6XCIjN0Q4MDhBXCIsbmV1dHJhbEdyYXk4MDpcInJnYmEoMTI1LDEyOCwxMzgsMC44KVwiLHNpbHZlckdyYXk6XCIjQzBDMUMyXCIsZGFya0dyYXkxOlwiIzUzNTY1RlwiLGRhcmtHcmF5MjpcIiMzODNBNDBcIixkYXJrR3JheTM6XCIjMkYzMTM2XCIsZGFya0dyYXk0OlwiIzI0MjYyQlwiLGRhcmtHcmF5NTpcIiMxRTFGMjNcIixkYXJrR3JheTY6XCIjMTExMjE0XCIsb3BlbkZpbkRhcmtlc3Q6XCIjM0QzOUNEXCIsb3BlbkZpbkRhcmtlcjpcIiM0NjQyRTBcIixvcGVuRmluOlwiIzUwNENGRlwiLG9wZW5GaW5MaWdodDpcIiM1MjU0RkJcIixvcGVuRmluTGlnaHRlcjpcIiM1QzVFRkVcIixvcGVuRmluTGlnaHRlc3Q6XCIjNjg2NEZGXCIsZnVuY3Rpb25hbDE6XCIjMjA3NzM1XCIsZnVuY3Rpb25hbDI6XCIjNDZDOEYxXCIsZnVuY3Rpb25hbDM6XCIjMEE3NkQzXCIsZnVuY3Rpb25hbDQ6XCIjNkNBREU1XCIsZnVuY3Rpb25hbDU6XCIjMEE3NkQzXCIsZnVuY3Rpb25hbDY6XCIjODgyQkZFXCIsZnVuY3Rpb25hbDc6XCIjRjMxODE4XCIsZnVuY3Rpb25hbDg6XCIjQzkzNDAwXCIsZnVuY3Rpb25hbDk6XCIjRkY1RTYwXCIsZnVuY3Rpb25hbDEwOlwiI0Y0OEYwMFwiLHB1cnBsZTpcIiM4QzYxRkZcIixsaWdodGJsdWU6XCIjMzZDM0ZFXCIsYXF1YTpcIiMwMENDODhcIix5ZWxsb3c6XCIjRkZFQjAwXCIsc2FsbW9uOlwiI0ZGOEM0Q1wiLHBpbms6XCIjRkY1RTYwXCIsbGlnaHRwaW5rOlwiI0ZGOEZCOFwiLHdoaXRlMDA6XCJyZ2JhKDI1NSwyNTUsMjU1LDAuMClcIix3aGl0ZTEwOlwicmdiYSgyNTUsMjU1LDI1NSwwLjEpXCIsd2hpdGUyMDpcInJnYmEoMjU1LDI1NSwyNTUsMC4yKVwiLHdoaXRlMzA6XCJyZ2JhKDI1NSwyNTUsMjU1LDAuMylcIix3aGl0ZTQwOlwicmdiYSgyNTUsMjU1LDI1NSwwLjQpXCIsd2hpdGU1MDpcInJnYmEoMjU1LDI1NSwyNTUsMC41KVwiLHdoaXRlNjA6XCJyZ2JhKDI1NSwyNTUsMjU1LDAuNilcIix3aGl0ZTcwOlwicmdiYSgyNTUsMjU1LDI1NSwwLjcpXCIsd2hpdGU4MDpcInJnYmEoMjU1LDI1NSwyNTUsMC44KVwiLHdoaXRlOTA6XCJyZ2JhKDI1NSwyNTUsMjU1LDAuOSlcIixibGFjazAwOlwicmdiYSgwLDAsMCwwLjApXCIsYmxhY2sxMDpcInJnYmEoMCwwLDAsMC4xKVwiLGJsYWNrMjA6XCJyZ2JhKDAsMCwwLDAuMilcIixibGFjazMwOlwicmdiYSgwLDAsMCwwLjMpXCIsYmxhY2s0MDpcInJnYmEoMCwwLDAsMC40KVwiLGJsYWNrNTA6XCJyZ2JhKDAsMCwwLDAuNSlcIixibGFjazYwOlwicmdiYSgwLDAsMCwwLjYpXCIsYmxhY2s3MDpcInJnYmEoMCwwLDAsMC43KVwiLGJsYWNrODA6XCJyZ2JhKDAsMCwwLDAuOClcIixibGFjazkwOlwicmdiYSgwLDAsMCwwLjkpXCIsdHJhbnNwYXJlbnQ6XCJ0cmFuc3BhcmVudFwifSx0LlNpemU9e3hzbWFsbDpcInhzbWFsbFwiLHNtYWxsOlwic21hbGxcIixiYXNlOlwiYmFzZVwiLGxhcmdlOlwibGFyZ2VcIix4bGFyZ2U6XCJ4bGFyZ2VcIix4eGxhcmdlOlwieHhsYXJnZVwiLHh4eGxhcmdlOlwieHh4bGFyZ2VcIix4eHh4bGFyZ2U6XCJ4eHh4bGFyZ2VcIn0sdC5TaXplTmFtZT17W3QuU2l6ZS54c21hbGxdOlwiRXh0cmEgU21hbGxcIixbdC5TaXplLnNtYWxsXTpcIlNtYWxsXCIsW3QuU2l6ZS5iYXNlXTpcIkJhc2VcIixbdC5TaXplLmxhcmdlXTpcIkxhcmdlXCIsW3QuU2l6ZS54bGFyZ2VdOlwiRXh0cmEgTGFyZ2VcIixbdC5TaXplLnh4bGFyZ2VdOlwiMlggTGFyZ2VcIixbdC5TaXplLnh4eGxhcmdlXTpcIjNYIExhcmdlXCIsW3QuU2l6ZS54eHh4bGFyZ2VdOlwiNFggTGFyZ2VcIn0sdC5Vbml0PXtbdC5TaXplLnhzbWFsbF06NCxbdC5TaXplLnNtYWxsXTo4LFt0LlNpemUuYmFzZV06MTIsW3QuU2l6ZS5sYXJnZV06MTYsW3QuU2l6ZS54bGFyZ2VdOjIwLFt0LlNpemUueHhsYXJnZV06MjQsW3QuU2l6ZS54eHhsYXJnZV06MzIsW3QuU2l6ZS54eHh4bGFyZ2VdOjQ4fSx0LlVuaXRQeD17W3QuU2l6ZS54c21hbGxdOlwiNHB4XCIsW3QuU2l6ZS5zbWFsbF06XCI4cHhcIixbdC5TaXplLmJhc2VdOlwiMTJweFwiLFt0LlNpemUubGFyZ2VdOlwiMTZweFwiLFt0LlNpemUueGxhcmdlXTpcIjIwcHhcIixbdC5TaXplLnh4bGFyZ2VdOlwiMjRweFwiLFt0LlNpemUueHh4bGFyZ2VdOlwiMzJweFwiLFt0LlNpemUueHh4eGxhcmdlXTpcIjQ4cHhcIn0sdC5SYWRpdXM9e1t0LlNpemUueHNtYWxsXTpcIjJweFwiLFt0LlNpemUuc21hbGxdOlwiNHB4XCIsW3QuU2l6ZS5iYXNlXTpcIjhweFwiLFt0LlNpemUubGFyZ2VdOlwiMjRweFwiLHBpbGw6XCIxMDB2aFwiLHJvdW5kOlwiNTAlXCIsbm9uZTpcIjBcIn0sdC5TaGFkb3c9e1t0LlNpemUuYmFzZV06XCIwIDRweCA0cHggcmdiYSgwLCAwLCAwLCAwLjI1KVwifSx0LkZvbnRGYW1pbHk9W1wiSW50ZXJcIixcInN5c3RlbS11aVwiLFwiQmxpbmtNYWNTeXN0ZW1Gb250XCIsXCJTZWdvZSBVSVwiLFwiUm9ib3RvXCIsXCJPeHlnZW4tU2Fuc1wiLFwiVWJ1bnR1XCIsXCJDYW50YXJlbGxcIixcIkhlbHZldGljYSBOZXVlXCIsXCJzYW5zLXNlcmlmXCJdLmpvaW4oXCIsXCIpLHQuRm9udFNpemU9e1t0LlNpemUueHNtYWxsXTpcIjhweFwiLFt0LlNpemUuc21hbGxdOlwiMTBweFwiLFt0LlNpemUuYmFzZV06XCIxMnB4XCIsW3QuU2l6ZS5sYXJnZV06XCIxNHB4XCIsW3QuU2l6ZS54bGFyZ2VdOlwiMTZweFwiLFt0LlNpemUueHhsYXJnZV06XCIxOHB4XCIsW3QuU2l6ZS54eHhsYXJnZV06XCIyMHB4XCIsW3QuU2l6ZS54eHh4bGFyZ2VdOlwiNDBweFwifSx0LkZvbnRXZWlnaHQ9e25vcm1hbDo0MDAsYm9sZDo2MDB9LHQuTGluZUhlaWdodD17dWk6MSxoZWFkaW5nOjEuMix0ZXh0OjEuNX0sdC5UcmFuc2l0aW9uPXtiYXNlOlwiMjAwbXMgY3ViaWMtYmV6aWVyKDAuMTYsIDEsIDAuMywgMSlcIixub25lOlwiMG1zXCJ9LHQuSWNvblNldD1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saSksbCksdC5JY29uU2l6ZT17W3QuU2l6ZS54c21hbGxdOnQuVW5pdFB4LnNtYWxsLFt0LlNpemUuc21hbGxdOnQuVW5pdFB4LmJhc2UsW3QuU2l6ZS5iYXNlXTpcIjE1cHhcIixbdC5TaXplLmxhcmdlXTp0LlVuaXRQeC54bGFyZ2UsW3QuU2l6ZS54bGFyZ2VdOnQuVW5pdFB4Lnh4bGFyZ2UsW3QuU2l6ZS54eGxhcmdlXTp0LlVuaXRQeC54eHhsYXJnZSxbdC5TaXplLnh4eGxhcmdlXTp0LlVuaXRQeC54eHh4bGFyZ2V9fSw5MjcyOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmNyZWF0ZUZvbnRGYWNlQ3NzPXZvaWQgMDtjb25zdCByPW4oNzUxOCksbz1uKDM0NzEpO3QuY3JlYXRlRm9udEZhY2VDc3M9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuY3NzYFxuICAgICR7ZS5yZWd1bGFyJiZyLmNzc2BcbiAgICAgIEBmb250LWZhY2Uge1xuICAgICAgICBmb250LWZhbWlseTogJ0ludGVyJztcbiAgICAgICAgc3JjOiB1cmwoJHtlLnJlZ3VsYXJ9KSBmb3JtYXQoJ3dvZmYyJyk7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiAke28uRm9udFdlaWdodC5ub3JtYWx9O1xuICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgICAgIGZvbnQtZGlzcGxheTogZmFsbGJhY2s7XG4gICAgICB9XG4gICAgYH1cbiAgICAke2UuaXRhbGljJiZyLmNzc2BcbiAgICAgIEBmb250LWZhY2Uge1xuICAgICAgICBmb250LWZhbWlseTogJ0ludGVyJztcbiAgICAgICAgc3JjOiB1cmwoJHtlLml0YWxpY30pIGZvcm1hdCgnd29mZjInKTtcbiAgICAgICAgZm9udC13ZWlnaHQ6ICR7by5Gb250V2VpZ2h0Lm5vcm1hbH07XG4gICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICAgICAgZm9udC1kaXNwbGF5OiBmYWxsYmFjaztcbiAgICAgIH1cbiAgICBgfVxuICAgICR7ZS5zZW1pQm9sZCYmci5jc3NgXG4gICAgICBAZm9udC1mYWNlIHtcbiAgICAgICAgZm9udC1mYW1pbHk6ICdJbnRlcic7XG4gICAgICAgIHNyYzogdXJsKCR7ZS5zZW1pQm9sZH0pIGZvcm1hdCgnd29mZjInKTtcbiAgICAgICAgZm9udC13ZWlnaHQ6ICR7by5Gb250V2VpZ2h0LmJvbGR9O1xuICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgICAgIGZvbnQtZGlzcGxheTogZmFsbGJhY2s7XG4gICAgICB9XG4gICAgYH1cbiAgICAke2Uuc2VtaUJvbGRJdGFsaWMmJnIuY3NzYFxuICAgICAgQGZvbnQtZmFjZSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnSW50ZXInO1xuICAgICAgICBzcmM6IHVybCgke2Uuc2VtaUJvbGRJdGFsaWN9KSBmb3JtYXQoJ3dvZmYyJyk7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiAke28uRm9udFdlaWdodC5ib2xkfTtcbiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgICAgICBmb250LWRpc3BsYXk6IGZhbGxiYWNrO1xuICAgICAgfVxuICAgIGB9XG4gIGB9fSw2NzE0OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmNyZWF0ZVRoZW1lPXZvaWQgMDtjb25zdCByPW4oMzQ3MSksbz1uKDk5ODQpLGE9big1NDU5KSxpPXtmb250RmFtaWx5OnIuRm9udEZhbWlseSxmb250U2l6ZTpyLkZvbnRTaXplLGZvbnRXZWlnaHQ6ci5Gb250V2VpZ2h0LGxpbmVIZWlnaHQ6ci5MaW5lSGVpZ2h0LGljb25TaXplOnIuSWNvblNpemUscmFkaXVzOnIuUmFkaXVzLHNoYWRvdzpyLlNoYWRvdyx0cmFuc2l0aW9uOnIuVHJhbnNpdGlvbix1bml0OnIuVW5pdCxweDpyLlVuaXRQeH0sbD0oZSx0KT0+KHtbYCR7ZX1BY3RpdmVgXTooMCxvLmRhcmtlbkNvbG9yKSh0LDIpLFtgJHtlfUhvdmVyYF06KDAsby5saWdodGVuQ29sb3IpKHQsNSksW2Ake2V9Rm9jdXNlZGBdOigwLG8uZ2V0TW9zdFJlYWRhYmxlKSh0LFtyLkNvbG9yLndoaXRlLHIuQ29sb3IuZGFya0dyYXk1XSksW2Ake2V9VGV4dGBdOigwLG8uZ2V0TW9zdFJlYWRhYmxlKSh0LFtyLkNvbG9yLndoaXRlLHIuQ29sb3IuZGFya0dyYXk1XSl9KTt0LmNyZWF0ZVRoZW1lPWU9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxpKSx7cGFsZXR0ZTpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSxsKGEuUGFsZXR0ZS5icmFuZFByaW1hcnksZS5icmFuZFByaW1hcnkpKSxsKGEuUGFsZXR0ZS5icmFuZFNlY29uZGFyeSxlLmJyYW5kU2Vjb25kYXJ5KSl9KX0sNTc1OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlNVUFBPUlRFRF9MQU5HVUFHRVM9dC5nZXRTdGF0dXNDb2xvcj10LmdldFJvb3RDc3NWYXJzPXQuZ2V0VmFyaWFudENTUz12b2lkIDA7Y29uc3Qgcj1uKDU0NTkpO3QuZ2V0VmFyaWFudENTUz0oZSx0KT0+bj0+ZVt0XVtuW3RdXSx0LmdldFJvb3RDc3NWYXJzPSh7dGhlbWU6ZX0pPT5PYmplY3Qua2V5cyhyLlBhbGV0dGUpLm1hcCgodD0+YC0tb3BlbmZpbi11aS0ke3R9OiAke2UucGFsZXR0ZVt0XX07YCkpLmpvaW4oXCJcXG5cIiksdC5nZXRTdGF0dXNDb2xvcj0oZSx0LG4pPT57c3dpdGNoKHQpe2Nhc2VcImFjdGl2ZVwiOnJldHVybiBlLnBhbGV0dGUuc3RhdHVzQWN0aXZlO2Nhc2VcImNyaXRpY2FsXCI6cmV0dXJuIGUucGFsZXR0ZS5zdGF0dXNDcml0aWNhbDtjYXNlXCJ3YXJuaW5nXCI6cmV0dXJuIGUucGFsZXR0ZS5zdGF0dXNXYXJuaW5nO2Nhc2VcInN1Y2Nlc3NcIjpyZXR1cm4gZS5wYWxldHRlLnN0YXR1c1N1Y2Nlc3M7ZGVmYXVsdDpyZXR1cm4gbj9lLnBhbGV0dGVbbl06XCJpbmhlcml0XCJ9fSx0LlNVUFBPUlRFRF9MQU5HVUFHRVM9W1wiZW4tVVNcIixcImphLUpQXCIsXCJ6aC1DTlwiLFwia28tS1JcIixcInJ1LVJVXCIsXCJkZS1ERVwiLFwiemgtSGFudFwiXX0sOTYzODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oOTk4NCksdCksbyhuKDM0NzEpLHQpLG8obig5MjcyKSx0KSxvKG4oNjcxNCksdCksbyhuKDU3NSksdCksbyhuKDE0NDEpLHQpLG8obig4NzMyKSx0KSxvKG4oNTQ1OSksdCksbyhuKDUzMTcpLHQpfSwxNDQxOihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LDg3MzI6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTWl4aW5zPXZvaWQgMDtjb25zdCByPW4oMzQ3MSksbz1uKDc1MTgpLGE9by5jc3NgXG4gIHVzZXItc2VsZWN0OiBub25lO1xuYCxpPW8uY3NzYFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbmAsbD1vLmNzc2BcbiAgJjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICAgIHdpZHRoOiB2YXIoLS1zY3JvbGxiYXJTaXplLCAke3IuVW5pdFB4LnhzbWFsbH0pO1xuICAgIGhlaWdodDogdmFyKC0tc2Nyb2xsYmFyU2l6ZSwgJHtyLlVuaXRQeC54c21hbGx9KTtcbiAgfVxuXG4gICY6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcbiAgICBiYWNrZ3JvdW5kOiAke3IuQ29sb3IubmV1dHJhbEdyYXk4MH07XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tc2Nyb2xsYmFyU2l6ZSwgJHtyLlVuaXRQeC54c21hbGx9KTtcbiAgICBvcGFjaXR5OiAwLjg7XG4gIH1cblxuICAmOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gICAgYmFja2dyb3VuZDogJHtyLkNvbG9yLndoaXRlODB9O1xuICAgIHdpZHRoOiB2YXIoLS1zY3JvbGxiYXJTaXplLCAke3IuVW5pdFB4LnhzbWFsbH0pO1xuICAgIGhlaWdodDogdmFyKC0tc2Nyb2xsYmFyU2l6ZSwgJHtyLlVuaXRQeC54c21hbGx9KTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1zY3JvbGxiYXJTaXplLCAke3IuVW5pdFB4LnhzbWFsbH0pO1xuICAgIG9wYWNpdHk6IDAuODtcbiAgfVxuYCxzPW8uY3NzYFxuICAtLXNjcm9sbGJhclNpemU6IDJweDtcbiAgJHtsfTtcbmAsYz1vLmNzc2BcbiAgLXdlYmtpdC1hcHAtcmVnaW9uOiBkcmFnO1xuYCx1PW8uY3NzYFxuICAtd2Via2l0LWFwcC1yZWdpb246IG5vLWRyYWc7XG5gO3QuTWl4aW5zPXtub1NlbGVjdDphLHRleHRPdmVyZmxvdzppLHNjcm9sbGJhcjp7W3IuU2l6ZS5iYXNlXTpsLFtyLlNpemUuc21hbGxdOnN9LGFwcFJlZ2lvbjp7ZHJhZzpjLG5vRHJhZzp1fX19LDU0NTk6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlBhbGV0dGU9dm9pZCAwLHQuUGFsZXR0ZT17YmFja2dyb3VuZDE6XCJiYWNrZ3JvdW5kMVwiLGJhY2tncm91bmQyOlwiYmFja2dyb3VuZDJcIixiYWNrZ3JvdW5kMzpcImJhY2tncm91bmQzXCIsYmFja2dyb3VuZDQ6XCJiYWNrZ3JvdW5kNFwiLGJhY2tncm91bmQ1OlwiYmFja2dyb3VuZDVcIixiYWNrZ3JvdW5kNjpcImJhY2tncm91bmQ2XCIsYnJhbmRQcmltYXJ5OlwiYnJhbmRQcmltYXJ5XCIsYnJhbmRTZWNvbmRhcnk6XCJicmFuZFNlY29uZGFyeVwiLGJyYW5kUHJpbWFyeUFjdGl2ZTpcImJyYW5kUHJpbWFyeUFjdGl2ZVwiLGJyYW5kUHJpbWFyeUhvdmVyOlwiYnJhbmRQcmltYXJ5SG92ZXJcIixicmFuZFByaW1hcnlGb2N1c2VkOlwiYnJhbmRQcmltYXJ5Rm9jdXNlZFwiLGJyYW5kUHJpbWFyeVRleHQ6XCJicmFuZFByaW1hcnlUZXh0XCIsYnJhbmRTZWNvbmRhcnlBY3RpdmU6XCJicmFuZFNlY29uZGFyeUFjdGl2ZVwiLGJyYW5kU2Vjb25kYXJ5SG92ZXI6XCJicmFuZFNlY29uZGFyeUhvdmVyXCIsYnJhbmRTZWNvbmRhcnlGb2N1c2VkOlwiYnJhbmRTZWNvbmRhcnlGb2N1c2VkXCIsYnJhbmRTZWNvbmRhcnlUZXh0OlwiYnJhbmRTZWNvbmRhcnlUZXh0XCIsaW5wdXRCYWNrZ3JvdW5kOlwiaW5wdXRCYWNrZ3JvdW5kXCIsaW5wdXRDb2xvcjpcImlucHV0Q29sb3JcIixpbnB1dFBsYWNlaG9sZGVyOlwiaW5wdXRQbGFjZWhvbGRlclwiLGlucHV0RGlzYWJsZWQ6XCJpbnB1dERpc2FibGVkXCIsaW5wdXRGb2N1c2VkOlwiaW5wdXRGb2N1c2VkXCIsaW5wdXRCb3JkZXI6XCJpbnB1dEJvcmRlclwiLHN0YXR1c1N1Y2Nlc3M6XCJzdGF0dXNTdWNjZXNzXCIsc3RhdHVzV2FybmluZzpcInN0YXR1c1dhcm5pbmdcIixzdGF0dXNDcml0aWNhbDpcInN0YXR1c0NyaXRpY2FsXCIsc3RhdHVzQWN0aXZlOlwic3RhdHVzQWN0aXZlXCIsdGV4dERlZmF1bHQ6XCJ0ZXh0RGVmYXVsdFwiLHRleHRIZWxwOlwidGV4dEhlbHBcIix0ZXh0SW5hY3RpdmU6XCJ0ZXh0SW5hY3RpdmVcIixib3JkZXJOZXV0cmFsOlwiYm9yZGVyTmV1dHJhbFwiLGNvbnRlbnRCYWNrZ3JvdW5kMTpcImNvbnRlbnRCYWNrZ3JvdW5kMVwiLGNvbnRlbnRCYWNrZ3JvdW5kMjpcImNvbnRlbnRCYWNrZ3JvdW5kMlwiLGNvbnRlbnRCYWNrZ3JvdW5kMzpcImNvbnRlbnRCYWNrZ3JvdW5kM1wiLGNvbnRlbnRCYWNrZ3JvdW5kNDpcImNvbnRlbnRCYWNrZ3JvdW5kNFwiLGNvbnRlbnRCYWNrZ3JvdW5kNTpcImNvbnRlbnRCYWNrZ3JvdW5kNVwiLGxpbmtEZWZhdWx0OlwibGlua0RlZmF1bHRcIixsaW5rSG92ZXI6XCJsaW5rSG92ZXJcIn19LDUzMTc6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0sNDI2NjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oOTQ4MyksdCl9LDk0ODM6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuT3BlbkZpbkRhcmtUaGVtZT10Lk9wZW5GaW5MaWdodFRoZW1lPXZvaWQgMDtjb25zdCByPW4oNTQ1OSksbz1uKDM0NzEpLGE9big2NzE0KSxpPXtbci5QYWxldHRlLmJyYW5kUHJpbWFyeV06by5Db2xvci5vcGVuRmluLFtyLlBhbGV0dGUuc3RhdHVzU3VjY2Vzc106by5Db2xvci5mdW5jdGlvbmFsMSxbci5QYWxldHRlLnN0YXR1c1dhcm5pbmddOm8uQ29sb3IuZnVuY3Rpb25hbDEwLFtyLlBhbGV0dGUuc3RhdHVzQ3JpdGljYWxdOm8uQ29sb3IuZnVuY3Rpb25hbDcsW3IuUGFsZXR0ZS5zdGF0dXNBY3RpdmVdOm8uQ29sb3IuZnVuY3Rpb25hbDMsW3IuUGFsZXR0ZS5ib3JkZXJOZXV0cmFsXTpvLkNvbG9yLnNpbHZlckdyYXksW3IuUGFsZXR0ZS5jb250ZW50QmFja2dyb3VuZDFdOm8uQ29sb3Iub3BlbkZpbixbci5QYWxldHRlLmNvbnRlbnRCYWNrZ3JvdW5kMl06XCIjMDAwMDAwXCIsW3IuUGFsZXR0ZS5jb250ZW50QmFja2dyb3VuZDNdOlwiIzAwMDAwMFwiLFtyLlBhbGV0dGUuY29udGVudEJhY2tncm91bmQ0XTpcIiMwMDAwMDBcIixbci5QYWxldHRlLmNvbnRlbnRCYWNrZ3JvdW5kNV06XCIjMDAwMDAwXCIsW3IuUGFsZXR0ZS5saW5rRGVmYXVsdF06by5Db2xvci5mdW5jdGlvbmFsNCxbci5QYWxldHRlLmxpbmtIb3Zlcl06by5Db2xvci5mdW5jdGlvbmFsNX07dC5PcGVuRmluTGlnaHRUaGVtZT0oMCxhLmNyZWF0ZVRoZW1lKShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saSkse1tyLlBhbGV0dGUuYmFja2dyb3VuZDFdOm8uQ29sb3Iud2hpdGUsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kMl06by5Db2xvci5saWdodEdyYXkxLFtyLlBhbGV0dGUuYmFja2dyb3VuZDNdOm8uQ29sb3IubGlnaHRHcmF5Mixbci5QYWxldHRlLmJhY2tncm91bmQ0XTpvLkNvbG9yLmxpZ2h0R3JheTMsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kNV06by5Db2xvci5saWdodEdyYXkzLFtyLlBhbGV0dGUuYmFja2dyb3VuZDZdOm8uQ29sb3IubGlnaHRHcmF5NSxbci5QYWxldHRlLmJyYW5kU2Vjb25kYXJ5XTpvLkNvbG9yLmxpZ2h0R3JheTQsW3IuUGFsZXR0ZS5pbnB1dEJhY2tncm91bmRdOm8uQ29sb3IubGlnaHRHcmF5Myxbci5QYWxldHRlLmlucHV0Q29sb3JdOm8uQ29sb3IuZGFya0dyYXk1LFtyLlBhbGV0dGUuaW5wdXRQbGFjZWhvbGRlcl06by5Db2xvci5kYXJrR3JheTIsW3IuUGFsZXR0ZS5pbnB1dERpc2FibGVkXTpvLkNvbG9yLm5ldXRyYWxHcmF5LFtyLlBhbGV0dGUuaW5wdXRGb2N1c2VkXTpvLkNvbG9yLmxpZ2h0R3JheTUsW3IuUGFsZXR0ZS5pbnB1dEJvcmRlcl06by5Db2xvci5uZXV0cmFsR3JheSxbci5QYWxldHRlLnRleHREZWZhdWx0XTpvLkNvbG9yLmRhcmtHcmF5NSxbci5QYWxldHRlLnRleHRIZWxwXTpvLkNvbG9yLm5ldXRyYWxHcmF5LFtyLlBhbGV0dGUudGV4dEluYWN0aXZlXTpvLkNvbG9yLm5ldXRyYWxHcmF5fSkpLHQuT3BlbkZpbkRhcmtUaGVtZT0oMCxhLmNyZWF0ZVRoZW1lKShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saSkse1tyLlBhbGV0dGUuYmFja2dyb3VuZDFdOm8uQ29sb3IuZGFya0dyYXk2LFtyLlBhbGV0dGUuYmFja2dyb3VuZDJdOm8uQ29sb3IuZGFya0dyYXk1LFtyLlBhbGV0dGUuYmFja2dyb3VuZDNdOm8uQ29sb3IuZGFya0dyYXk0LFtyLlBhbGV0dGUuYmFja2dyb3VuZDRdOm8uQ29sb3IuZGFya0dyYXkzLFtyLlBhbGV0dGUuYmFja2dyb3VuZDVdOm8uQ29sb3IuZGFya0dyYXkyLFtyLlBhbGV0dGUuYmFja2dyb3VuZDZdOm8uQ29sb3IuZGFya0dyYXkxLFtyLlBhbGV0dGUuYnJhbmRTZWNvbmRhcnldOm8uQ29sb3IuZGFya0dyYXkyLFtyLlBhbGV0dGUuaW5wdXRCYWNrZ3JvdW5kXTpvLkNvbG9yLmRhcmtHcmF5MSxbci5QYWxldHRlLmlucHV0Q29sb3JdOm8uQ29sb3Iud2hpdGUsW3IuUGFsZXR0ZS5pbnB1dFBsYWNlaG9sZGVyXTpvLkNvbG9yLmxpZ2h0R3JheTUsW3IuUGFsZXR0ZS5pbnB1dERpc2FibGVkXTpvLkNvbG9yLm5ldXRyYWxHcmF5LFtyLlBhbGV0dGUuaW5wdXRGb2N1c2VkXTpvLkNvbG9yLmxpZ2h0R3JheTUsW3IuUGFsZXR0ZS5pbnB1dEJvcmRlcl06by5Db2xvci5uZXV0cmFsR3JheSxbci5QYWxldHRlLnRleHREZWZhdWx0XTpvLkNvbG9yLndoaXRlLFtyLlBhbGV0dGUudGV4dEhlbHBdOm8uQ29sb3IubGlnaHRHcmF5NSxbci5QYWxldHRlLnRleHRJbmFjdGl2ZV06by5Db2xvci5uZXV0cmFsR3JheX0pKX0sNDIwOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlRoZW1lUHJvdmlkZXI9dm9pZCAwO2NvbnN0IHI9big1ODkzKSxvPW4oNzUxOCksYT1uKDMxOTApLGk9big3MDg4KSxsPW4oMTA2OSkscz1uKDYyMTgpO3QuVGhlbWVQcm92aWRlcj0oe2NoaWxkcmVuOmUsdGhlbWVzOnQsc2NoZW1lOm49YS5Db2xvclNjaGVtZS5zeXN0ZW0sZm9udHM6Yz1zLkZvbnRzfSk9Pntjb25zdCB1PSgwLGkudXNlVGhlbWUpKHt0aGVtZXM6dCxzY2hlbWU6bn0pO3JldHVybigwLHIuanN4KShvLlRoZW1lUHJvdmlkZXIsT2JqZWN0LmFzc2lnbih7dGhlbWU6dX0se2NoaWxkcmVuOigwLHIuanN4cykoci5GcmFnbWVudCx7Y2hpbGRyZW46WygwLHIuanN4KShsLkdsb2JhbFN0eWxlcyx7Zm9udHM6Y30pLGVdfSl9KSl9fSwzODc3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obigxMDY5KSx0KSxvKG4oMTMxMCksdCksbyhuKDk1MDcpLHQpfSw5NzU4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNvbnRhY3RTdGF0dXNJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksYT1yKG4oNzUxOCkpLGk9bigxMzMzKSxsPXthdmFpbGFibGU6KDAsby5qc3gpKGkuQ2hlY2tTVkcse30pLGF3YXk6KDAsby5qc3gpKGkuQnVzeVNWRyx7fSksXCJkby1ub3QtZGlzdHVyYlwiOigwLG8uanN4KShpLkRvTm90RGlzdHVyYlNWRyx7fSksb2ZmbGluZTooMCxvLmpzeCkoaS5PZmZsaW5lU1ZHLHt9KSxidXN5Om51bGx9O3QuQ29udGFjdFN0YXR1c0ljb249KHtvbmxpbmVTdGF0dXM6ZX0pPT5lPygwLG8uanN4KShzLE9iamVjdC5hc3NpZ24oe29ubGluZVN0YXR1czplfSx7Y2hpbGRyZW46bFtlXXx8bnVsbH0pKTpudWxsO2NvbnN0IHM9YS5kZWZhdWx0LmRpdmBcbiAgYm9yZGVyOiAxLjZweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDF9O1xuXG4gIGJhY2tncm91bmQ6ICR7KHtvbmxpbmVTdGF0dXM6ZX0pPT5cImJ1c3lcIj09PWU/XCIjQzIxMzEzXCI6XCJ3aGl0ZVwifTtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuXG4gIGhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5weC5sYXJnZX07XG4gIHdpZHRoOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmxhcmdlfTtcblxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDc4Ljk1JTtcbiAgcmlnaHQ6IC03LjAyJTtcbiAgdG9wOiA3Ny4xMiU7XG4gIGJvdHRvbTogLTQuMjQlO1xuYH0sMTMzMzooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5PZmZsaW5lU1ZHPXQuRG9Ob3REaXN0dXJiU1ZHPXQuQnVzeVNWRz10LkNoZWNrU1ZHPXZvaWQgMDtjb25zdCByPW4oNTg5Myk7dC5DaGVja1NWRz0oKT0+KDAsci5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNlwiLGhlaWdodDpcIjE2XCIsdmlld0JveDpcIjAgMCAxNiAxNlwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSx7Y2hpbGRyZW46KDAsci5qc3gpKFwicGF0aFwiLHtkOlwiTTggMEM4LjczNDM4IDAgOS40NDAxIDAuMDk2MzU0MiAxMC4xMTcyIDAuMjg5MDYzQzEwLjc5NDMgMC40ODE3NzEgMTEuNDI5NyAwLjc1MjYwNCAxMi4wMjM0IDEuMTAxNTZDMTIuNjE3MiAxLjQ1MDUyIDEzLjE1NjMgMS44Njk3OSAxMy42NDA2IDIuMzU5MzhDMTQuMTMwMiAyLjg0Mzc1IDE0LjU0OTUgMy4zODI4MSAxNC44OTg0IDMuOTc2NTZDMTUuMjQ3NCA0LjU3MDMxIDE1LjUxODIgNS4yMDU3MyAxNS43MTA5IDUuODgyODFDMTUuOTAzNiA2LjU1OTkgMTYgNy4yNjU2MyAxNiA4QzE2IDguNzI5MTcgMTUuOTAzNiA5LjQzNDkgMTUuNzEwOSAxMC4xMTcyQzE1LjUxODIgMTAuNzk0MyAxNS4yNDc0IDExLjQyOTcgMTQuODk4NCAxMi4wMjM0QzE0LjU0OTUgMTIuNjE3MiAxNC4xMzAyIDEzLjE1ODkgMTMuNjQwNiAxMy42NDg0QzEzLjE1NjMgMTQuMTMyOCAxMi42MTcyIDE0LjU0OTUgMTIuMDIzNCAxNC44OTg0QzExLjQyOTcgMTUuMjQ3NCAxMC43OTE3IDE1LjUxODIgMTAuMTA5NCAxNS43MTA5QzkuNDMyMjkgMTUuOTAzNiA4LjcyOTE3IDE2IDggMTZDNy4yNzA4MyAxNiA2LjU2NTEgMTUuOTAzNiA1Ljg4MjgxIDE1LjcxMDlDNS4yMDU3MyAxNS41MTgyIDQuNTcwMzEgMTUuMjQ3NCAzLjk3NjU2IDE0Ljg5ODRDMy4zODI4MSAxNC41NDk1IDIuODQxMTUgMTQuMTMyOCAyLjM1MTU2IDEzLjY0ODRDMS44NjcxOSAxMy4xNTg5IDEuNDUwNTIgMTIuNjE3MiAxLjEwMTU2IDEyLjAyMzRDMC43NTI2MDQgMTEuNDI5NyAwLjQ4MTc3MSAxMC43OTQzIDAuMjg5MDYzIDEwLjExNzJDMC4wOTYzNTQyIDkuNDM0OSAwIDguNzI5MTcgMCA4QzAgNy4yNzA4MyAwLjA5NjM1NDIgNi41Njc3MSAwLjI4OTA2MyA1Ljg5MDYzQzAuNDgxNzcxIDUuMjA4MzMgMC43NTI2MDQgNC41NzAzMSAxLjEwMTU2IDMuOTc2NTZDMS40NTA1MiAzLjM4MjgxIDEuODY3MTkgMi44NDM3NSAyLjM1MTU2IDIuMzU5MzhDMi44NDExNSAxLjg2OTc5IDMuMzgyODEgMS40NTA1MiAzLjk3NjU2IDEuMTAxNTZDNC41NzAzMSAwLjc1MjYwNCA1LjIwNTczIDAuNDgxNzcxIDUuODgyODEgMC4yODkwNjNDNi41NjUxIDAuMDk2MzU0MiA3LjI3MDgzIDAgOCAwWk0xMC42MzI4IDUuNjg3NUMxMC40MjQ1IDUuNjg3NSAxMC4yNDc0IDUuNzYwNDIgMTAuMTAxNiA1LjkwNjI1TDcuMjczNDQgOC43NUw2LjI2NTYzIDcuNzVDNi4xMTk3OSA3LjYwNDE3IDUuOTQ1MzEgNy41MzEyNSA1Ljc0MjE5IDcuNTMxMjVDNS42NDMyMyA3LjUzMTI1IDUuNTQ5NDggNy41NTIwOCA1LjQ2MDk0IDcuNTkzNzVDNS4zNzI0IDcuNjM1NDIgNS4yOTE2NyA3LjY5MjcxIDUuMjE4NzUgNy43NjU2M0M1LjE1MTA0IDcuODMzMzMgNS4wOTYzNSA3LjkxMTQ2IDUuMDU0NjkgOEM1LjAxMzAyIDguMDg4NTQgNC45OTIxOSA4LjE4MjI5IDQuOTkyMTkgOC4yODEyNUM0Ljk5MjE5IDguNDg5NTggNS4wNjUxIDguNjY2NjcgNS4yMTA5NCA4LjgxMjVMNi43NDIxOSAxMC4zNDM4QzYuODg4MDIgMTAuNDg5NiA3LjA2NTEgMTAuNTYyNSA3LjI3MzQ0IDEwLjU2MjVDNy40ODE3NyAxMC41NjI1IDcuNjU4ODUgMTAuNDg5NiA3LjgwNDY5IDEwLjM0MzhMMTEuMTY0MSA2Ljk2ODc1QzExLjMwOTkgNi44MjI5MiAxMS4zODI4IDYuNjQ1ODMgMTEuMzgyOCA2LjQzNzVDMTEuMzgyOCA2LjMzODU0IDExLjM2MiA2LjI0NDc5IDExLjMyMDMgNi4xNTYyNUMxMS4yNzg2IDYuMDY3NzEgMTEuMjIxNCA1Ljk4OTU4IDExLjE0ODQgNS45MjE4OEMxMS4wODA3IDUuODQ4OTYgMTEuMDAyNiA1Ljc5MTY3IDEwLjkxNDEgNS43NUMxMC44MjU1IDUuNzA4MzMgMTAuNzMxOCA1LjY4NzUgMTAuNjMyOCA1LjY4NzVaXCIsZmlsbDpcIiMyMDc3MzVcIn0pfSkpLHQuQnVzeVNWRz0oKT0+KDAsci5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNlwiLGhlaWdodDpcIjE3XCIsdmlld0JveDpcIjAgMCAxNiAxN1wiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSx7Y2hpbGRyZW46KDAsci5qc3gpKFwicGF0aFwiLHtkOlwiTTggMC43OTAyMzdDOC43MzQzOCAwLjc5MDIzNyA5LjQ0MDEgMC44ODY1OTIgMTAuMTE3MiAxLjA3OTNDMTAuNzk0MyAxLjI3MjAxIDExLjQyOTcgMS41NDI4NCAxMi4wMjM0IDEuODkxOEMxMi42MTcyIDIuMjQwNzYgMTMuMTU2MyAyLjY2MDAzIDEzLjY0MDYgMy4xNDk2MUMxNC4xMzAyIDMuNjMzOTkgMTQuNTQ5NSA0LjE3MzA1IDE0Ljg5ODQgNC43NjY4QzE1LjI0NzQgNS4zNjA1NSAxNS41MTgyIDUuOTk1OTcgMTUuNzEwOSA2LjY3MzA1QzE1LjkwMzYgNy4zNTAxMyAxNiA4LjA1NTg2IDE2IDguNzkwMjRDMTYgOS41MTk0IDE1LjkwMzYgMTAuMjI1MSAxNS43MTA5IDEwLjkwNzRDMTUuNTE4MiAxMS41ODQ1IDE1LjI0NzQgMTIuMjE5OSAxNC44OTg0IDEyLjgxMzdDMTQuNTQ5NSAxMy40MDc0IDE0LjEzMDIgMTMuOTQ5MSAxMy42NDA2IDE0LjQzODdDMTMuMTU2MyAxNC45MjMxIDEyLjYxNzIgMTUuMzM5NyAxMi4wMjM0IDE1LjY4ODdDMTEuNDI5NyAxNi4wMzc2IDEwLjc5MTcgMTYuMzA4NSAxMC4xMDk0IDE2LjUwMTJDOS40MzIyOSAxNi42OTM5IDguNzI5MTcgMTYuNzkwMiA4IDE2Ljc5MDJDNy4yNzA4MyAxNi43OTAyIDYuNTY1MSAxNi42OTM5IDUuODgyODEgMTYuNTAxMkM1LjIwNTczIDE2LjMwODUgNC41NzAzMSAxNi4wMzc2IDMuOTc2NTYgMTUuNjg4N0MzLjM4MjgxIDE1LjMzOTcgMi44NDExNSAxNC45MjMxIDIuMzUxNTYgMTQuNDM4N0MxLjg2NzE5IDEzLjk0OTEgMS40NTA1MiAxMy40MDc0IDEuMTAxNTYgMTIuODEzN0MwLjc1MjYwNCAxMi4yMTk5IDAuNDgxNzcxIDExLjU4NDUgMC4yODkwNjMgMTAuOTA3NEMwLjA5NjM1NDIgMTAuMjI1MSAwIDkuNTE5NCAwIDguNzkwMjRDMCA4LjA2MTA3IDAuMDk2MzU0MiA3LjM1Nzk1IDAuMjg5MDYzIDYuNjgwODZDMC40ODE3NzEgNS45OTg1NyAwLjc1MjYwNCA1LjM2MDU1IDEuMTAxNTYgNC43NjY4QzEuNDUwNTIgNC4xNzMwNSAxLjg2NzE5IDMuNjMzOTkgMi4zNTE1NiAzLjE0OTYxQzIuODQxMTUgMi42NjAwMyAzLjM4MjgxIDIuMjQwNzYgMy45NzY1NiAxLjg5MThDNC41NzAzMSAxLjU0Mjg0IDUuMjA1NzMgMS4yNzIwMSA1Ljg4MjgxIDEuMDc5M0M2LjU2NTEgMC44ODY1OTIgNy4yNzA4MyAwLjc5MDIzNyA4IDAuNzkwMjM3Wk03LjMyMDMxIDQuMDQ4MDVDNy4yMTA5NCA0LjA0ODA1IDcuMTA2NzcgNC4wNzE0OSA3LjAwNzgxIDQuMTE4MzZDNi45MTQwNiA0LjE2MDAzIDYuODI4MTMgNC4yMTk5MiA2Ljc1IDQuMjk4MDVDNi42NzcwOCA0LjM3MDk3IDYuNjE3MTkgNC40NTY5IDYuNTcwMzEgNC41NTU4NkM2LjUyODY1IDQuNjQ5NjEgNi41MDc4MSA0Ljc1MTE3IDYuNTA3ODEgNC44NjA1NVY5LjE5NjQ5QzYuNTA3ODEgOS4zMDU4NiA2LjUyODY1IDkuNDEyNjMgNi41NzAzMSA5LjUxNjhDNi42MTE5OCA5LjYyMDk3IDYuNjcxODggOS43MTIxMSA2Ljc1IDkuNzkwMjRMOS4xODc1IDEyLjIxMjFDOS4zNDg5NiAxMi4zNzM2IDkuNTQxNjcgMTIuNDU0MyA5Ljc2NTYzIDEyLjQ1NDNDOS44NzUgMTIuNDU0MyA5Ljk3OTE3IDEyLjQzMzUgMTAuMDc4MSAxMi4zOTE4QzEwLjE3NzEgMTIuMzQ0OSAxMC4yNjMgMTIuMjg1IDEwLjMzNTkgMTIuMjEyMUMxMC40MDg5IDEyLjEzNCAxMC40NjYxIDEyLjA0NTQgMTAuNTA3OCAxMS45NDY1QzEwLjU1NDcgMTEuODQ3NSAxMC41NzgxIDExLjc0MzQgMTAuNTc4MSAxMS42MzRDMTAuNTc4MSAxMS41Mjk4IDEwLjU1NDcgMTEuNDI4MyAxMC41MDc4IDExLjMyOTNDMTAuNDY2MSAxMS4yMjUxIDEwLjQwODkgMTEuMTM2NiAxMC4zMzU5IDExLjA2MzdMOC4xMzI4MSA4Ljg3NjE4VjQuODYwNTVDOC4xMzI4MSA0Ljc1MTE3IDguMTA5MzggNC42NDcwMSA4LjA2MjUgNC41NDgwNUM4LjAyMDgzIDQuNDQ5MDkgNy45NjM1NCA0LjM2MzE1IDcuODkwNjMgNC4yOTAyNEM3LjgxNzcxIDQuMjE3MzIgNy43MzE3NyA0LjE2MDAzIDcuNjMyODEgNC4xMTgzNkM3LjUzMzg1IDQuMDcxNDkgNy40Mjk2OSA0LjA0ODA1IDcuMzIwMzEgNC4wNDgwNVpcIixmaWxsOlwiI0ZFOUY0RFwifSl9KSksdC5Eb05vdERpc3R1cmJTVkc9KCk9PigwLHIuanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTZcIixoZWlnaHQ6XCIxN1wiLHZpZXdCb3g6XCIwIDAgMTYgMTdcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0se2NoaWxkcmVuOigwLHIuanN4KShcInBhdGhcIix7ZDpcIk04IDAuNTkwMjU2QzguNzM0MzggMC41OTAyNTYgOS40NDAxIDAuNjg2NjEgMTAuMTE3MiAwLjg3OTMxOEMxMC43OTQzIDEuMDcyMDMgMTEuNDI5NyAxLjM0Mjg2IDEyLjAyMzQgMS42OTE4MkMxMi42MTcyIDIuMDQwNzggMTMuMTU2MiAyLjQ2MDA1IDEzLjY0MDYgMi45NDk2M0MxNC4xMzAyIDMuNDM0MDEgMTQuNTQ5NSAzLjk3MzA3IDE0Ljg5ODQgNC41NjY4MkMxNS4yNDc0IDUuMTYwNTcgMTUuNTE4MiA1Ljc5NTk4IDE1LjcxMDkgNi40NzMwN0MxNS45MDM2IDcuMTUwMTUgMTYgNy44NTU4OCAxNiA4LjU5MDI2QzE2IDkuMzE5NDIgMTUuOTAzNiAxMC4wMjUyIDE1LjcxMDkgMTAuNzA3NEMxNS41MTgyIDExLjM4NDUgMTUuMjQ3NCAxMi4wMTk5IDE0Ljg5ODQgMTIuNjEzN0MxNC41NDk1IDEzLjIwNzQgMTQuMTMwMiAxMy43NDkxIDEzLjY0MDYgMTQuMjM4N0MxMy4xNTYyIDE0LjcyMzEgMTIuNjE3MiAxNS4xMzk3IDEyLjAyMzQgMTUuNDg4N0MxMS40Mjk3IDE1LjgzNzcgMTAuNzkxNyAxNi4xMDg1IDEwLjEwOTQgMTYuMzAxMkM5LjQzMjI5IDE2LjQ5MzkgOC43MjkxNyAxNi41OTAzIDggMTYuNTkwM0M3LjI3MDgzIDE2LjU5MDMgNi41NjUxIDE2LjQ5MzkgNS44ODI4MSAxNi4zMDEyQzUuMjA1NzMgMTYuMTA4NSA0LjU3MDMxIDE1LjgzNzcgMy45NzY1NiAxNS40ODg3QzMuMzgyODEgMTUuMTM5NyAyLjg0MTE1IDE0LjcyMzEgMi4zNTE1NiAxNC4yMzg3QzEuODY3MTkgMTMuNzQ5MSAxLjQ1MDUyIDEzLjIwNzQgMS4xMDE1NiAxMi42MTM3QzAuNzUyNjA0IDEyLjAxOTkgMC40ODE3NzEgMTEuMzg0NSAwLjI4OTA2MiAxMC43MDc0QzAuMDk2MzU0MiAxMC4wMjUyIDAgOS4zMTk0MiAwIDguNTkwMjZDMCA3Ljg2MTA5IDAuMDk2MzU0MiA3LjE1Nzk2IDAuMjg5MDYyIDYuNDgwODhDMC40ODE3NzEgNS43OTg1OSAwLjc1MjYwNCA1LjE2MDU3IDEuMTAxNTYgNC41NjY4MkMxLjQ1MDUyIDMuOTczMDcgMS44NjcxOSAzLjQzNDAxIDIuMzUxNTYgMi45NDk2M0MyLjg0MTE1IDIuNDYwMDUgMy4zODI4MSAyLjA0MDc4IDMuOTc2NTYgMS42OTE4MkM0LjU3MDMxIDEuMzQyODYgNS4yMDU3MyAxLjA3MjAzIDUuODgyODEgMC44NzkzMThDNi41NjUxIDAuNjg2NjEgNy4yNzA4MyAwLjU5MDI1NiA4IDAuNTkwMjU2Wk01LjQ3NjU2IDcuNzQ2NTFDNS4zNjcxOSA3Ljc0NjUxIDUuMjYwNDIgNy43Njk5NCA1LjE1NjI1IDcuODE2ODJDNS4wNTcyOSA3Ljg2MzY5IDQuOTY4NzUgNy45MjYxOSA0Ljg5MDYyIDguMDA0MzJDNC44MTI1IDguMDgyNDQgNC43NSA4LjE3MzU5IDQuNzAzMTIgOC4yNzc3NkM0LjY1NjI1IDguMzc2NzEgNC42MzI4MSA4LjQ4MDg4IDQuNjMyODEgOC41OTAyNkM0LjYzMjgxIDguNjk5NjMgNC42NTYyNSA4LjgwNjQgNC43MDMxMiA4LjkxMDU3QzQuNzUgOS4wMDk1MyA0LjgxMjUgOS4wOTgwNyA0Ljg5MDYyIDkuMTc2MTlDNC45Njg3NSA5LjI1NDMyIDUuMDU3MjkgOS4zMTY4MiA1LjE1NjI1IDkuMzYzNjlDNS4yNjA0MiA5LjQxMDU3IDUuMzY3MTkgOS40MzQwMSA1LjQ3NjU2IDkuNDM0MDFIMTAuNTIzNEMxMC42MzI4IDkuNDM0MDEgMTAuNzM3IDkuNDEwNTcgMTAuODM1OSA5LjM2MzY5QzEwLjk0MDEgOS4zMTY4MiAxMS4wMzEyIDkuMjU0MzIgMTEuMTA5NCA5LjE3NjE5QzExLjE4NzUgOS4wOTgwNyAxMS4yNSA5LjAwOTUzIDExLjI5NjkgOC45MTA1N0MxMS4zNDM4IDguODA2NCAxMS4zNjcyIDguNjk5NjMgMTEuMzY3MiA4LjU5MDI2QzExLjM2NzIgOC40ODA4OCAxMS4zNDM4IDguMzc2NzEgMTEuMjk2OSA4LjI3Nzc2QzExLjI1IDguMTczNTkgMTEuMTg3NSA4LjA4MjQ0IDExLjEwOTQgOC4wMDQzMkMxMS4wMzEyIDcuOTI2MTkgMTAuOTQwMSA3Ljg2MzY5IDEwLjgzNTkgNy44MTY4MkMxMC43MzcgNy43Njk5NCAxMC42MzI4IDcuNzQ2NTEgMTAuNTIzNCA3Ljc0NjUxSDUuNDc2NTZaXCIsZmlsbDpcIiNDMjEzMTNcIn0pfSkpLHQuT2ZmbGluZVNWRz0oKT0+KDAsci5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNlwiLGhlaWdodDpcIjE3XCIsdmlld0JveDpcIjAgMCAxNiAxN1wiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSx7Y2hpbGRyZW46KDAsci5qc3gpKFwicGF0aFwiLHtkOlwiTTggMC45OTAyNTJDOC43MzQzOCAwLjk5MDI1MiA5LjQ0MDEgMS4wODY2MSAxMC4xMTcyIDEuMjc5MzFDMTAuNzk0MyAxLjQ3MjAyIDExLjQyOTcgMS43NDI4NiAxMi4wMjM0IDIuMDkxODFDMTIuNjE3MiAyLjQ0MDc3IDEzLjE1NjIgMi44NjAwNCAxMy42NDA2IDMuMzQ5NjNDMTQuMTMwMiAzLjgzNCAxNC41NDk1IDQuMzczMDYgMTQuODk4NCA0Ljk2NjgxQzE1LjI0NzQgNS41NjA1NiAxNS41MTgyIDYuMTk1OTggMTUuNzEwOSA2Ljg3MzA2QzE1LjkwMzYgNy41NTAxNSAxNiA4LjI1NTg4IDE2IDguOTkwMjVDMTYgOS43MTk0MiAxNS45MDM2IDEwLjQyNTEgMTUuNzEwOSAxMS4xMDc0QzE1LjUxODIgMTEuNzg0NSAxNS4yNDc0IDEyLjQxOTkgMTQuODk4NCAxMy4wMTM3QzE0LjU0OTUgMTMuNjA3NCAxNC4xMzAyIDE0LjE0OTEgMTMuNjQwNiAxNC42Mzg3QzEzLjE1NjIgMTUuMTIzMSAxMi42MTcyIDE1LjUzOTcgMTIuMDIzNCAxNS44ODg3QzExLjQyOTcgMTYuMjM3NiAxMC43OTE3IDE2LjUwODUgMTAuMTA5NCAxNi43MDEyQzkuNDMyMjkgMTYuODkzOSA4LjcyOTE3IDE2Ljk5MDMgOCAxNi45OTAzQzcuMjcwODMgMTYuOTkwMyA2LjU2NTEgMTYuODkzOSA1Ljg4MjgxIDE2LjcwMTJDNS4yMDU3MyAxNi41MDg1IDQuNTcwMzEgMTYuMjM3NiAzLjk3NjU2IDE1Ljg4ODdDMy4zODI4MSAxNS41Mzk3IDIuODQxMTUgMTUuMTIzMSAyLjM1MTU2IDE0LjYzODdDMS44NjcxOSAxNC4xNDkxIDEuNDUwNTIgMTMuNjA3NCAxLjEwMTU2IDEzLjAxMzdDMC43NTI2MDQgMTIuNDE5OSAwLjQ4MTc3MSAxMS43ODQ1IDAuMjg5MDYyIDExLjEwNzRDMC4wOTYzNTQyIDEwLjQyNTEgMCA5LjcxOTQyIDAgOC45OTAyNUMwIDguMjYxMDkgMC4wOTYzNTQyIDcuNTU3OTYgMC4yODkwNjIgNi44ODA4OEMwLjQ4MTc3MSA2LjE5ODU5IDAuNzUyNjA0IDUuNTYwNTYgMS4xMDE1NiA0Ljk2NjgxQzEuNDUwNTIgNC4zNzMwNiAxLjg2NzE5IDMuODM0IDIuMzUxNTYgMy4zNDk2M0MyLjg0MTE1IDIuODYwMDQgMy4zODI4MSAyLjQ0MDc3IDMuOTc2NTYgMi4wOTE4MUM0LjU3MDMxIDEuNzQyODYgNS4yMDU3MyAxLjQ3MjAyIDUuODgyODEgMS4yNzkzMUM2LjU2NTEgMS4wODY2MSA3LjI3MDgzIDAuOTkwMjUyIDggMC45OTAyNTJaTTggMi42Nzc3NUM3LjQyMTg4IDIuNjc3NzUgNi44NjQ1OCAyLjc1MzI3IDYuMzI4MTIgMi45MDQzMUM1Ljc5MTY3IDMuMDU1MzYgNS4yODkwNiAzLjI2ODkgNC44MjAzMSAzLjU0NDk0QzQuMzUxNTYgMy44MjA5OCAzLjkyNDQ4IDQuMTUxNzEgMy41MzkwNiA0LjUzNzEzQzMuMTU4ODUgNC45MTczNCAyLjgzMDczIDUuMzQxODEgMi41NTQ2OSA1LjgxMDU2QzIuMjc4NjUgNi4yNzkzMSAyLjA2NTEgNi43ODE5MiAxLjkxNDA2IDcuMzE4MzhDMS43NjMwMiA3Ljg1NDg0IDEuNjg3NSA4LjQxMjEzIDEuNjg3NSA4Ljk5MDI1QzEuNjg3NSA5LjU2ODM4IDEuNzYzMDIgMTAuMTI1NyAxLjkxNDA2IDEwLjY2MjFDMi4wNjUxIDExLjE5ODYgMi4yNzg2NSAxMS43MDEyIDIuNTU0NjkgMTIuMTY5OUMyLjgzMDczIDEyLjYzODcgMy4xNTg4NSAxMy4wNjU4IDMuNTM5MDYgMTMuNDUxMkMzLjkyNDQ4IDEzLjgzMTQgNC4zNTE1NiAxNC4xNTk1IDQuODIwMzEgMTQuNDM1NkM1LjI4OTA2IDE0LjcxMTYgNS43OTE2NyAxNC45MjUxIDYuMzI4MTIgMTUuMDc2MkM2Ljg2NDU4IDE1LjIyNzIgNy40MjE4OCAxNS4zMDI4IDggMTUuMzAyOEM4LjU3ODEyIDE1LjMwMjggOS4xMzU0MiAxNS4yMjcyIDkuNjcxODggMTUuMDc2MkMxMC4yMDgzIDE0LjkyNTEgMTAuNzEwOSAxNC43MTE2IDExLjE3OTcgMTQuNDM1NkMxMS42NDg0IDE0LjE1OTUgMTIuMDcyOSAxMy44MzE0IDEyLjQ1MzEgMTMuNDUxMkMxMi44Mzg1IDEzLjA2NTggMTMuMTY5MyAxMi42Mzg3IDEzLjQ0NTMgMTIuMTY5OUMxMy43MjE0IDExLjcwMTIgMTMuOTM0OSAxMS4xOTg2IDE0LjA4NTkgMTAuNjYyMUMxNC4yMzcgMTAuMTI1NyAxNC4zMTI1IDkuNTY4MzggMTQuMzEyNSA4Ljk5MDI1QzE0LjMxMjUgOC40MTIxMyAxNC4yMzcgNy44NTQ4NCAxNC4wODU5IDcuMzE4MzhDMTMuOTM0OSA2Ljc4MTkyIDEzLjcyMTQgNi4yNzkzMSAxMy40NDUzIDUuODEwNTZDMTMuMTY5MyA1LjM0MTgxIDEyLjgzODUgNC45MTczNCAxMi40NTMxIDQuNTM3MTNDMTIuMDcyOSA0LjE1MTcxIDExLjY0ODQgMy44MjA5OCAxMS4xNzk3IDMuNTQ0OTRDMTAuNzEwOSAzLjI2ODkgMTAuMjA4MyAzLjA1NTM2IDkuNjcxODggMi45MDQzMUM5LjEzNTQyIDIuNzUzMjcgOC41NzgxMiAyLjY3Nzc1IDggMi42Nzc3NVpcIixmaWxsOlwiIzk3OTc5N1wifSl9KSl9LDM0Mjk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImRlZmF1bHRcIix7ZW51bWVyYWJsZTohMCx2YWx1ZTp0fSl9OmZ1bmN0aW9uKGUsdCl7ZS5kZWZhdWx0PXR9KSxhPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIiE9PW4mJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZyKHQsZSxuKTtyZXR1cm4gbyh0LGUpLHR9LGk9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn0sbD10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNvbnRhY3RDYXJkPXZvaWQgMDtjb25zdCBzPW4oNTg5MyksYz1hKG4oNjY4OSkpLHU9bChuKDc1MTgpKSxkPW4oNTM3NykscD1uKDc0NDQpLGY9big5NzU4KSxoPW4oODgzMik7dC5Db250YWN0Q2FyZD1lPT57dmFye25hbWU6dCx0aXRsZTpuLHBob3RvVXJsOnIsdXNlSW5pdGlhbHM6bz0hMSxkZXRhaWxzOmEsb25saW5lU3RhdHVzOmx9PWUsdT1pKGUsW1wibmFtZVwiLFwidGl0bGVcIixcInBob3RvVXJsXCIsXCJ1c2VJbml0aWFsc1wiLFwiZGV0YWlsc1wiLFwib25saW5lU3RhdHVzXCJdKTtjb25zdCBkPXJ8fG8sTT0oMCxjLnVzZU1lbW8pKCgoKT0+KDAscC5nZXRJbml0aWFscykodCkpLFt0XSksTD0oMCxjLnVzZU1lbW8pKCgoKT0+KDAsaC5nZW5lcmF0ZUNvbG9yRnJvbVN0cmluZykodCkpLFt0XSksXz0oMCxjLmNyZWF0ZVJlZikoKTtyZXR1cm4oMCxjLnVzZUVmZmVjdCkoKCgpPT57dmFyIGU7bnVsbD09PShlPV8uY3VycmVudCl8fHZvaWQgMD09PWV8fGUuc2Nyb2xsVG8oMCwwKX0pKSwoMCxzLmpzeHMpKGcsT2JqZWN0LmFzc2lnbih7fSx1LHtjaGlsZHJlbjpbKDAscy5qc3hzKSh2LHtjaGlsZHJlbjpbZCYmKDAscy5qc3hzKShDLE9iamVjdC5hc3NpZ24oe2ljb25Db2xvcjpMfSx7Y2hpbGRyZW46W3I/KDAscy5qc3gpKHcse2FsdDpuLHNyYzpyfSk6KDAscy5qc3gpKG0se2NoaWxkcmVuOk19KSwoMCxzLmpzeCkoZi5Db250YWN0U3RhdHVzSWNvbix7b25saW5lU3RhdHVzOmx9KV19KSksKDAscy5qc3hzKShiLHtjaGlsZHJlbjpbKDAscy5qc3hzKSh5LHtjaGlsZHJlbjpbXCIgXCIsdCxcIiBcIl19KSxuJiYoMCxzLmpzeHMpKHgse2NoaWxkcmVuOltcIiBcIixuLFwiIFwiXX0pXX0pXX0pLCgwLHMuanN4KShTLHt9KSwoMCxzLmpzeCkoayxPYmplY3QuYXNzaWduKHtyZWY6X30se2NoaWxkcmVuOihudWxsPT1hP3ZvaWQgMDphLmxlbmd0aCk+MD9hLm1hcCgoKGUsbik9PigwLHMuanN4cykoYy5kZWZhdWx0LkZyYWdtZW50LHtjaGlsZHJlbjpbKDAscy5qc3gpKE8se2RlZmluaXRpb25zOmV9KSxuPGEubGVuZ3RoLTEmJigwLHMuanN4KShTLHtwYWRkaW5nOiEwfSldfSxgJHt0fS1kZXRhaWxzLSR7bn1gKSkpOigwLHMuanN4KShcInBcIix7Y2hpbGRyZW46XCJObyBpbmZvcm1hdGlvbiBhdmFpbGFibGUuXCJ9KX0pKV19KSl9O2NvbnN0IGc9dS5kZWZhdWx0LmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgaGVpZ2h0OiAxMDAlO1xuYCx2PXUuZGVmYXVsdC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBhZGRpbmctYm90dG9tOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmxhcmdlfTtcbmAsQz11LmRlZmF1bHQuZGl2YFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke2U9PmUuaWNvbkNvbG9yfTtcbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5weC54c21hbGx9O1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblxuICBoZWlnaHQ6IDYwcHg7XG4gIHdpZHRoOiA2MHB4O1xuXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbmAsbT11LmRlZmF1bHQuc3BhbmBcbiAgZm9udC1zaXplOiAyNHB4O1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuYCx3PXUuZGVmYXVsdC5pbWdgXG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucHgueHNtYWxsfTtcbiAgb2JqZWN0LWZpdDogY292ZXI7XG4gIHVzZXItc2VsZWN0OiBub25lO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHdpZHRoOiAxMDAlO1xuYCxiPXUuZGVmYXVsdC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgbWluLXdpZHRoOiAwO1xuICBtYXJnaW4tbGVmdDogJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcbmAseT11LmRlZmF1bHQuc3BhbmBcbiAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmxhcmdlfTtcbiAgbGluZS1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHgubGFyZ2V9O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBwYWRkaW5nLWJvdHRvbTogJHsoe3RoZW1lOmV9KT0+ZS5weC54c21hbGx9O1xuICBmb250LXdlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5mb250V2VpZ2h0LmJvbGR9O1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbmAseD11LmRlZmF1bHQuc3BhbmBcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0SGVscH07XG4gIGxpbmUtaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBwYWRkaW5nLWJvdHRvbTogMnB4O1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbmAsaz11LmRlZmF1bHQuZGl2YFxuICBib3JkZXItcmFkaXVzOiAycHg7XG4gIGZsZXg6IDE7XG4gIG1hcmdpbi10b3A6ICR7KHt0aGVtZTplfSk9PmUucHgubGFyZ2V9O1xuICBtYXJnaW4tYm90dG9tOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuICBwYWRkaW5nLXJpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuICBvdmVyZmxvdy15OiBhdXRvO1xuYCxTPXUuZGVmYXVsdC5kaXZgXG4gIGJvcmRlci1ib3R0b206IHNvbGlkIDFweCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDZ9O1xuICBtYXJnaW4tYm90dG9tOiAkeyh7dGhlbWU6ZSxwYWRkaW5nOnR9KT0+dCYmZS5weC5iYXNlfTtcbmAsTz0oMCx1LmRlZmF1bHQpKGQuRGVmaW5pdGlvbkxpc3QpYFxuICBkdCB7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcbiAgfVxuXG4gIGRkIHtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cbmB9LDMxODg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDM0MjkpLHQpfSw3NDQ0OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5nZXRJbml0aWFscz12b2lkIDAsdC5nZXRJbml0aWFscz1lPT57Y29uc3QgdD1lLnRyaW0oKSxuPXQubGFzdEluZGV4T2YoXCIgXCIpO3JldHVybiBuPi0xP1t0LmNoYXJBdCgwKSx0LmNoYXJBdChuKzEpXS5qb2luKFwiXCIpOnQuc2xpY2UoMCwyKX19LDE5OTY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5INj10Lkg1PXQuSDQ9dC5IMz10LkgyPXQuSDE9dC5IZWFkaW5nPXQuZGVmYXVsdFNpemU9dm9pZCAwO2NvbnN0IGE9big1ODkzKSxpPW8obig3NTE4KSksbD1uKDM0NzEpLHM9big3NzY5KTt0LmRlZmF1bHRTaXplPXtoMTpsLlNpemUueHh4bGFyZ2UsaDI6bC5TaXplLnh4bGFyZ2UsaDM6bC5TaXplLnhsYXJnZSxoNDpsLlNpemUubGFyZ2UsaDU6bC5TaXplLmJhc2UsaDY6bC5TaXplLnNtYWxsfSx0LkhlYWRpbmc9ZT0+e3ZhcntsZXZlbDpuPTEsY2xhc3NOYW1lOm99PWUsaT1yKGUsW1wibGV2ZWxcIixcImNsYXNzTmFtZVwiXSk7Y29uc3QgbD1gaCR7bn1gO3JldHVybigwLGEuanN4KShjLE9iamVjdC5hc3NpZ24oe2NsYXNzTmFtZTpvLGFzOmwsc2l6ZTp0LmRlZmF1bHRTaXplW2xdLHdlaWdodDpcImJvbGRcIn0saSkpfTtjb25zdCBjPSgwLGkuZGVmYXVsdCkocy5UZXh0KWBcbiAgbGluZS1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUubGluZUhlaWdodC5oZWFkaW5nfTtcbmA7dC5IMT0oMCxpLmRlZmF1bHQpKHQuSGVhZGluZykuYXR0cnMoKGU9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7bGV2ZWw6MX0pKSlgYCx0LkgyPSgwLGkuZGVmYXVsdCkodC5IZWFkaW5nKS5hdHRycygoZT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtsZXZlbDoyfSkpKWBgLHQuSDM9KDAsaS5kZWZhdWx0KSh0LkhlYWRpbmcpLmF0dHJzKChlPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse2xldmVsOjN9KSkpYGAsdC5IND0oMCxpLmRlZmF1bHQpKHQuSGVhZGluZykuYXR0cnMoKGU9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7bGV2ZWw6NH0pKSlgYCx0Lkg1PSgwLGkuZGVmYXVsdCkodC5IZWFkaW5nKS5hdHRycygoZT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtsZXZlbDo1fSkpKWBgLHQuSDY9KDAsaS5kZWZhdWx0KSh0LkhlYWRpbmcpLmF0dHJzKChlPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse2xldmVsOjZ9KSkpYGB9LDcwNjM6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDE5OTYpLHQpfSw3NzY5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig1NDMxKSx0KX0sNTQzMTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5UZXh0PXZvaWQgMDtjb25zdCBvPXIobig3NTE4KSk7dC5UZXh0PW8uZGVmYXVsdC5zcGFuYFxuICBjb2xvcjogJHsoe3RoZW1lOmUsY29sb3I6dD1cInRleHREZWZhdWx0XCJ9KT0+ZS5wYWxldHRlW3RdfTtcbiAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZSxzaXplOnQ9XCJiYXNlXCJ9KT0+ZS5mb250U2l6ZVt0XX07XG4gIGZvbnQtd2VpZ2h0OiAkeyh7dGhlbWU6ZSx3ZWlnaHQ6dD1cIm5vcm1hbFwifSk9PmUuZm9udFdlaWdodFt0XX07XG4gIGxpbmUtaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmxpbmVIZWlnaHQudGV4dH07XG5gLHQuVGV4dC5kaXNwbGF5TmFtZT1cIlRleHRcIn0sMzE5MDooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VDb2xvclNjaGVtZT10LkNvbG9yU2NoZW1lPXZvaWQgMDtjb25zdCByPW4oNjY4OSk7dC5Db2xvclNjaGVtZT17ZGFyazpcImRhcmtcIixsaWdodDpcImxpZ2h0XCIsc3lzdGVtOlwic3lzdGVtXCJ9LHQudXNlQ29sb3JTY2hlbWU9KHtjb2xvclNjaGVtZTplLGZhbGxiYWNrU2NoZW1lOm49dC5Db2xvclNjaGVtZS5saWdodH0pPT57Y29uc3RbYSxpXT0oMCxyLnVzZVN0YXRlKShlJiZlIT09dC5Db2xvclNjaGVtZS5zeXN0ZW0/ZTpuKSxsPXQ9PntpKG8odCxlfHxuKSl9O3JldHVybigwLHIudXNlRWZmZWN0KSgoKCk9Pntjb25zdCB0PXdpbmRvdy5tYXRjaE1lZGlhKFwiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKVwiKTtyZXR1cm4gaShvKHQsZXx8bikpLHQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLGwpLCgpPT50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIixsKX0pLFtlLGFdKSxhfTtjb25zdCBvPShlLG4pPT5uPT09dC5Db2xvclNjaGVtZS5zeXN0ZW0/ZS5tYXRjaGVzP3QuQ29sb3JTY2hlbWUuZGFyazp0LkNvbG9yU2NoZW1lLmxpZ2h0Om59LDM0NzooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VEcm9wZG93bktleWJvYXJkTmF2aWdhdGlvbj12b2lkIDA7Y29uc3Qgcj1uKDY2ODkpO3QudXNlRHJvcGRvd25LZXlib2FyZE5hdmlnYXRpb249KGUsdCxuLG8sYSk9Pntjb25zdFtpLGxdPSgwLHIudXNlU3RhdGUpKDApLFtzLGNdPSgwLHIudXNlU3RhdGUpKFwiXCIpO2xldCB1O2lmKCgwLHIudXNlRWZmZWN0KSgoKCk9PntpZih0JiYhbil7Y29uc3Qgbj1lLmZsYXQoKS5maW5kSW5kZXgoKGU9PmUudmFsdWU9PT10LnZhbHVlKSk7bj49MCYmbChuKX19KSxbZSx0LG5dKSwoMCxyLnVzZUVmZmVjdCkoKCgpPT57bnx8YyhcIlwiKX0pLFtuXSksKDAsci51c2VFZmZlY3QpKCgoKT0+e2lmKHMpe2NvbnN0IHQ9ZS5mbGF0KCkuZmluZEluZGV4KChlPT5lLnRpdGxlLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChzLnRvTG93ZXJDYXNlKCkpKSk7dD49MCYmbCh0KX19KSxbZSxzXSksZVswXS5sZW5ndGg+MCYmZS5mbGF0KCkubGVuZ3RoPmkpe2NvbnN0W3Qsbl09W01hdGguZmxvb3IoaS9lWzBdLmxlbmd0aCksaSVlWzBdLmxlbmd0aF07dT1lW3RdW25dfXJldHVybigwLHIudXNlRWZmZWN0KSgoKCk9Pntjb25zdCBlPXNldFRpbWVvdXQoKCgpPT57YyhcIlwiKX0pLDUwMCk7cmV0dXJuKCk9PmNsZWFyVGltZW91dChlKX0pLFtzXSkse2ZvY3VzZWRPcHRpb246dSxoYW5kbGVLZXlEb3duOnQ9Pntzd2l0Y2godC5jb2RlKXtjYXNlXCJBcnJvd1VwXCI6dC5wcmV2ZW50RGVmYXVsdCgpLGk+MCYmbChpLTEpO2JyZWFrO2Nhc2VcIkFycm93RG93blwiOnQucHJldmVudERlZmF1bHQoKSxpPGUuZmxhdCgpLmxlbmd0aC0xJiZsKGkrMSk7YnJlYWs7Y2FzZVwiRW50ZXJcIjpjYXNlXCJTcGFjZVwiOnQucHJldmVudERlZmF1bHQoKSxuPygobnVsbD09dT92b2lkIDA6dS5vdmVycmlkZU9uQ2xpY2spP3Uub3ZlcnJpZGVPbkNsaWNrKCk6YShudWxsIT11P3U6ZVswXVswXSksbygpKTpvKCk7YnJlYWs7Y2FzZVwiRXNjYXBlXCI6dC5wcmV2ZW50RGVmYXVsdCgpLG8oITEpO2JyZWFrO2RlZmF1bHQ6L15bYS16MC05XSQvaS50ZXN0KHQua2V5KSYmYygoZT0+ZSt0LmtleSkpfX19fX0sNDQ4MTooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VMYXlvdXRNZWRpYVF1ZXJ5PXQudXNlTWVkaWFRdWVyeT12b2lkIDA7Y29uc3Qgcj1uKDY2ODkpLG89ZT0+dD0+e2NvbnN0W24sb109KDAsci51c2VTdGF0ZSkoITEpO3JldHVybiBlKCgoKT0+e2NvbnN0IGU9d2luZG93Lm1hdGNoTWVkaWEodCk7aWYoZSl7ZS5tYXRjaGVzIT09biYmbyhlLm1hdGNoZXMpO2NvbnN0IHQ9KCk9Pm8oZS5tYXRjaGVzKSxyPSgpPT5lLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIix0KTtyZXR1cm4gZS5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsdCkscn19KSxbbix0XSksbn07dC51c2VNZWRpYVF1ZXJ5PW8oci51c2VFZmZlY3QpLHQudXNlTGF5b3V0TWVkaWFRdWVyeT1vKHIudXNlTGF5b3V0RWZmZWN0KX0sMjc3NjooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VQcmV2aW91cz12b2lkIDA7Y29uc3Qgcj1uKDY2ODkpO3QudXNlUHJldmlvdXM9ZT0+e2NvbnN0IHQ9KDAsci51c2VSZWYpKCk7cmV0dXJuKDAsci51c2VFZmZlY3QpKCgoKT0+e3QuY3VycmVudD1lfSksW2VdKSx0LmN1cnJlbnR9fSw3MDg4OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZVRoZW1lPXZvaWQgMDtjb25zdCByPW4oNjY4OSksbz1uKDQyNjYpLGE9bigzMTkwKSxpPW4oOTUwNyksbD1uKDY0ODYpLHM9e1thLkNvbG9yU2NoZW1lLmRhcmtdOm8uT3BlbkZpbkRhcmtUaGVtZSxbYS5Db2xvclNjaGVtZS5saWdodF06by5PcGVuRmluTGlnaHRUaGVtZX07dC51c2VUaGVtZT0oe3RoZW1lczplLHNjaGVtZTp0fSk9PntsZXQgbj17fTtjb25zdCBvPSgwLGEudXNlQ29sb3JTY2hlbWUpKHtjb2xvclNjaGVtZTp0fSk7dHJ5e249KDAsci51c2VNZW1vKSgoKCk9PigoZSx0KT0+e2NvbnN0IG49bnVsbD09dD92b2lkIDA6dFtlXTtsZXQgcj1PYmplY3QuYXNzaWduKHt9LHNbZV0pO3JldHVybiBuJiZuLnBhbGV0dGUmJihyPSgwLGwubWVyZ2UpKHIsbiwoMCxpLmNyZWF0ZVRoZW1lKShuLnBhbGV0dGUpKSkscn0pKG8sZSkpLFtlLG9dKX1jYXRjaChlKXtjb25zb2xlLmVycm9yKGUpfXJldHVybiBufX0sMzQxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig0MTMwKSx0KSxvKG4oNzQwMSksdCksbyhuKDI0NTIpLHQpLG8obig3ZTMpLHQpLG8obig0OTI1KSx0KSxvKG4oMjYwOSksdCksbyhuKDMxMzYpLHQpLG8obig5NzM0KSx0KSxvKG4oNjAyNiksdCksbyhuKDk2MzQpLHQpLG8obigxNDQpLHQpLG8obig5MjM5KSx0KSxvKG4oODg3OCksdCksbyhuKDg1MTApLHQpLG8obig4OTUxKSx0KSxvKG4oMTk3OCksdCksbyhuKDgwNTEpLHQpLG8obig0MTY5KSx0KSxvKG4oMzY0MSksdCksbyhuKDUyMTUpLHQpLG8obigxNDY3KSx0KSxvKG4oMzExOSksdCksbyhuKDEzMzUpLHQpLG8obig1Mzc3KSx0KSxvKG4oMzg3NyksdCksbyhuKDMxODgpLHQpLG8obig3MDYzKSx0KSxvKG4oNzc2OSksdCksbyhuKDMxOTApLHQpLG8obig0NDgxKSx0KSxvKG4oMjc3NiksdCksbyhuKDM0NyksdCksbyhuKDQ5OTEpLHQpLG8obig4ODMyKSx0KSxvKG4oNzAzMCksdCksbyhuKDYyMTgpLHQpfSw4ODMyOihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5nZW5lcmF0ZUNvbG9yRnJvbVN0cmluZz12b2lkIDAsdC5nZW5lcmF0ZUNvbG9yRnJvbVN0cmluZz1mdW5jdGlvbihlPVwiXCIsdD03MCxuPTUwKXtsZXQgcj0wO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXI9ZS5jaGFyQ29kZUF0KHQpKygocjw8NSktciksciY9cjtyZXR1cm5gaHNsKCR7ciUzNjB9LCAke3R9JSwgJHtufSUpYH19LDQ5OTE6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LndoZW5GaW49dm9pZCAwLHQud2hlbkZpbj1mdW5jdGlvbihlLHQpe2NvbnN0IG49XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGZpbj9lOnQ7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uKCk6bn19LDY1NTooZSx0LG4pPT57bi5yKHQpLG4uZCh0LHtfX2Fzc2lnbjooKT0+YSxfX2FzeW5jRGVsZWdhdG9yOigpPT5PLF9fYXN5bmNHZW5lcmF0b3I6KCk9PlMsX19hc3luY1ZhbHVlczooKT0+TSxfX2F3YWl0OigpPT5rLF9fYXdhaXRlcjooKT0+aCxfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0OigpPT5qLF9fY2xhc3NQcml2YXRlRmllbGRJbjooKT0+SSxfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0OigpPT5SLF9fY3JlYXRlQmluZGluZzooKT0+dixfX2RlY29yYXRlOigpPT5sLF9fZXNEZWNvcmF0ZTooKT0+YyxfX2V4cG9ydFN0YXI6KCk9PkMsX19leHRlbmRzOigpPT5vLF9fZ2VuZXJhdG9yOigpPT5nLF9faW1wb3J0RGVmYXVsdDooKT0+RSxfX2ltcG9ydFN0YXI6KCk9PlAsX19tYWtlVGVtcGxhdGVPYmplY3Q6KCk9PkwsX19tZXRhZGF0YTooKT0+ZixfX3BhcmFtOigpPT5zLF9fcHJvcEtleTooKT0+ZCxfX3JlYWQ6KCk9PncsX19yZXN0OigpPT5pLF9fcnVuSW5pdGlhbGl6ZXJzOigpPT51LF9fc2V0RnVuY3Rpb25OYW1lOigpPT5wLF9fc3ByZWFkOigpPT5iLF9fc3ByZWFkQXJyYXk6KCk9PngsX19zcHJlYWRBcnJheXM6KCk9PnksX192YWx1ZXM6KCk9Pm19KTt2YXIgcj1mdW5jdGlvbihlLHQpe3JldHVybiByPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pJiYoZVtuXT10W25dKX0scihlLHQpfTtmdW5jdGlvbiBvKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIrU3RyaW5nKHQpK1wiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9ZX1yKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KToobi5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IG4pfXZhciBhPWZ1bmN0aW9uKCl7cmV0dXJuIGE9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49MSxyPWFyZ3VtZW50cy5sZW5ndGg7bjxyO24rKylmb3IodmFyIG8gaW4gdD1hcmd1bWVudHNbbl0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbykmJihlW29dPXRbb10pO3JldHVybiBlfSxhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07ZnVuY3Rpb24gaShlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59ZnVuY3Rpb24gbChlLHQsbixyKXt2YXIgbyxhPWFyZ3VtZW50cy5sZW5ndGgsaT1hPDM/dDpudWxsPT09cj9yPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTpyO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBSZWZsZWN0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKWk9UmVmbGVjdC5kZWNvcmF0ZShlLHQsbixyKTtlbHNlIGZvcih2YXIgbD1lLmxlbmd0aC0xO2w+PTA7bC0tKShvPWVbbF0pJiYoaT0oYTwzP28oaSk6YT4zP28odCxuLGkpOm8odCxuKSl8fGkpO3JldHVybiBhPjMmJmkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4saSksaX1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7dChuLHIsZSl9fWZ1bmN0aW9uIGMoZSx0LG4scixvLGEpe2Z1bmN0aW9uIGkoZSl7aWYodm9pZCAwIT09ZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVuY3Rpb24gZXhwZWN0ZWRcIik7cmV0dXJuIGV9Zm9yKHZhciBsLHM9ci5raW5kLGM9XCJnZXR0ZXJcIj09PXM/XCJnZXRcIjpcInNldHRlclwiPT09cz9cInNldFwiOlwidmFsdWVcIix1PSF0JiZlP3Iuc3RhdGljP2U6ZS5wcm90b3R5cGU6bnVsbCxkPXR8fCh1P09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodSxyLm5hbWUpOnt9KSxwPSExLGY9bi5sZW5ndGgtMTtmPj0wO2YtLSl7dmFyIGg9e307Zm9yKHZhciBnIGluIHIpaFtnXT1cImFjY2Vzc1wiPT09Zz97fTpyW2ddO2Zvcih2YXIgZyBpbiByLmFjY2VzcyloLmFjY2Vzc1tnXT1yLmFjY2Vzc1tnXTtoLmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKGUpe2lmKHApdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZFwiKTthLnB1c2goaShlfHxudWxsKSl9O3ZhciB2PSgwLG5bZl0pKFwiYWNjZXNzb3JcIj09PXM/e2dldDpkLmdldCxzZXQ6ZC5zZXR9OmRbY10saCk7aWYoXCJhY2Nlc3NvclwiPT09cyl7aWYodm9pZCAwPT09diljb250aW51ZTtpZihudWxsPT09dnx8XCJvYmplY3RcIiE9dHlwZW9mIHYpdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZFwiKTsobD1pKHYuZ2V0KSkmJihkLmdldD1sKSwobD1pKHYuc2V0KSkmJihkLnNldD1sKSwobD1pKHYuaW5pdCkpJiZvLnB1c2gobCl9ZWxzZShsPWkodikpJiYoXCJmaWVsZFwiPT09cz9vLnB1c2gobCk6ZFtjXT1sKX11JiZPYmplY3QuZGVmaW5lUHJvcGVydHkodSxyLm5hbWUsZCkscD0hMH1mdW5jdGlvbiB1KGUsdCxuKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yLG89MDtvPHQubGVuZ3RoO28rKyluPXI/dFtvXS5jYWxsKGUsbik6dFtvXS5jYWxsKGUpO3JldHVybiByP246dm9pZCAwfWZ1bmN0aW9uIGQoZSl7cmV0dXJuXCJzeW1ib2xcIj09dHlwZW9mIGU/ZTpcIlwiLmNvbmNhdChlKX1mdW5jdGlvbiBwKGUsdCxuKXtyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgdCYmKHQ9dC5kZXNjcmlwdGlvbj9cIltcIi5jb25jYXQodC5kZXNjcmlwdGlvbixcIl1cIik6XCJcIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJuYW1lXCIse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTpuP1wiXCIuY29uY2F0KG4sXCIgXCIsdCk6dH0pfWZ1bmN0aW9uIGYoZSx0KXtpZihcIm9iamVjdFwiPT10eXBlb2YgUmVmbGVjdCYmXCJmdW5jdGlvblwiPT10eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSlyZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShlLHQpfWZ1bmN0aW9uIGgoZSx0LG4scil7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKG8sYSl7ZnVuY3Rpb24gaShlKXt0cnl7cyhyLm5leHQoZSkpfWNhdGNoKGUpe2EoZSl9fWZ1bmN0aW9uIGwoZSl7dHJ5e3Moci50aHJvdyhlKSl9Y2F0Y2goZSl7YShlKX19ZnVuY3Rpb24gcyhlKXt2YXIgdDtlLmRvbmU/byhlLnZhbHVlKToodD1lLnZhbHVlLHQgaW5zdGFuY2VvZiBuP3Q6bmV3IG4oKGZ1bmN0aW9uKGUpe2UodCl9KSkpLnRoZW4oaSxsKX1zKChyPXIuYXBwbHkoZSx0fHxbXSkpLm5leHQoKSl9KSl9ZnVuY3Rpb24gZyhlLHQpe3ZhciBuLHIsbyxhLGk9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmb1swXSl0aHJvdyBvWzFdO3JldHVybiBvWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIGE9e25leHQ6bCgwKSx0aHJvdzpsKDEpLHJldHVybjpsKDIpfSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJihhW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGE7ZnVuY3Rpb24gbChsKXtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIGZ1bmN0aW9uKGwpe2lmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7Zm9yKDthJiYoYT0wLGxbMF0mJihpPTApKSxpOyl0cnl7aWYobj0xLHImJihvPTImbFswXT9yLnJldHVybjpsWzBdP3IudGhyb3d8fCgobz1yLnJldHVybikmJm8uY2FsbChyKSwwKTpyLm5leHQpJiYhKG89by5jYWxsKHIsbFsxXSkpLmRvbmUpcmV0dXJuIG87c3dpdGNoKHI9MCxvJiYobD1bMiZsWzBdLG8udmFsdWVdKSxsWzBdKXtjYXNlIDA6Y2FzZSAxOm89bDticmVhaztjYXNlIDQ6cmV0dXJuIGkubGFiZWwrKyx7dmFsdWU6bFsxXSxkb25lOiExfTtjYXNlIDU6aS5sYWJlbCsrLHI9bFsxXSxsPVswXTtjb250aW51ZTtjYXNlIDc6bD1pLm9wcy5wb3AoKSxpLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChvPShvPWkudHJ5cykubGVuZ3RoPjAmJm9bby5sZW5ndGgtMV0pfHw2IT09bFswXSYmMiE9PWxbMF0pKXtpPTA7Y29udGludWV9aWYoMz09PWxbMF0mJighb3x8bFsxXT5vWzBdJiZsWzFdPG9bM10pKXtpLmxhYmVsPWxbMV07YnJlYWt9aWYoNj09PWxbMF0mJmkubGFiZWw8b1sxXSl7aS5sYWJlbD1vWzFdLG89bDticmVha31pZihvJiZpLmxhYmVsPG9bMl0pe2kubGFiZWw9b1syXSxpLm9wcy5wdXNoKGwpO2JyZWFrfW9bMl0mJmkub3BzLnBvcCgpLGkudHJ5cy5wb3AoKTtjb250aW51ZX1sPXQuY2FsbChlLGkpfWNhdGNoKGUpe2w9WzYsZV0scj0wfWZpbmFsbHl7bj1vPTB9aWYoNSZsWzBdKXRocm93IGxbMV07cmV0dXJue3ZhbHVlOmxbMF0/bFsxXTp2b2lkIDAsZG9uZTohMH19KFtsLHNdKX19fXZhciB2PU9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX07ZnVuY3Rpb24gQyhlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHYodCxlLG4pfWZ1bmN0aW9uIG0oZSl7dmFyIHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3Isbj10JiZlW3RdLHI9MDtpZihuKXJldHVybiBuLmNhbGwoZSk7aWYoZSYmXCJudW1iZXJcIj09dHlwZW9mIGUubGVuZ3RoKXJldHVybntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIGUmJnI+PWUubGVuZ3RoJiYoZT12b2lkIDApLHt2YWx1ZTplJiZlW3IrK10sZG9uZTohZX19fTt0aHJvdyBuZXcgVHlwZUVycm9yKHQ/XCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiOlwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKX1mdW5jdGlvbiB3KGUsdCl7dmFyIG49XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl07aWYoIW4pcmV0dXJuIGU7dmFyIHIsbyxhPW4uY2FsbChlKSxpPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT10fHx0LS0gPjApJiYhKHI9YS5uZXh0KCkpLmRvbmU7KWkucHVzaChyLnZhbHVlKX1jYXRjaChlKXtvPXtlcnJvcjplfX1maW5hbGx5e3RyeXtyJiYhci5kb25lJiYobj1hLnJldHVybikmJm4uY2FsbChhKX1maW5hbGx5e2lmKG8pdGhyb3cgby5lcnJvcn19cmV0dXJuIGl9ZnVuY3Rpb24gYigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllPWUuY29uY2F0KHcoYXJndW1lbnRzW3RdKSk7cmV0dXJuIGV9ZnVuY3Rpb24geSgpe2Zvcih2YXIgZT0wLHQ9MCxuPWFyZ3VtZW50cy5sZW5ndGg7dDxuO3QrKyllKz1hcmd1bWVudHNbdF0ubGVuZ3RoO3ZhciByPUFycmF5KGUpLG89MDtmb3IodD0wO3Q8bjt0KyspZm9yKHZhciBhPWFyZ3VtZW50c1t0XSxpPTAsbD1hLmxlbmd0aDtpPGw7aSsrLG8rKylyW29dPWFbaV07cmV0dXJuIHJ9ZnVuY3Rpb24geChlLHQsbil7aWYobnx8Mj09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKHZhciByLG89MCxhPXQubGVuZ3RoO288YTtvKyspIXImJm8gaW4gdHx8KHJ8fChyPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsMCxvKSkscltvXT10W29dKTtyZXR1cm4gZS5jb25jYXQocnx8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpfWZ1bmN0aW9uIGsoZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBrPyh0aGlzLnY9ZSx0aGlzKTpuZXcgayhlKX1mdW5jdGlvbiBTKGUsdCxuKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTt2YXIgcixvPW4uYXBwbHkoZSx0fHxbXSksYT1bXTtyZXR1cm4gcj17fSxpKFwibmV4dFwiKSxpKFwidGhyb3dcIiksaShcInJldHVyblwiKSxyW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxyO2Z1bmN0aW9uIGkoZSl7b1tlXSYmKHJbZV09ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLHIpe2EucHVzaChbZSx0LG4scl0pPjF8fGwoZSx0KX0pKX0pfWZ1bmN0aW9uIGwoZSx0KXt0cnl7KG49b1tlXSh0KSkudmFsdWUgaW5zdGFuY2VvZiBrP1Byb21pc2UucmVzb2x2ZShuLnZhbHVlLnYpLnRoZW4ocyxjKTp1KGFbMF1bMl0sbil9Y2F0Y2goZSl7dShhWzBdWzNdLGUpfXZhciBufWZ1bmN0aW9uIHMoZSl7bChcIm5leHRcIixlKX1mdW5jdGlvbiBjKGUpe2woXCJ0aHJvd1wiLGUpfWZ1bmN0aW9uIHUoZSx0KXtlKHQpLGEuc2hpZnQoKSxhLmxlbmd0aCYmbChhWzBdWzBdLGFbMF1bMV0pfX1mdW5jdGlvbiBPKGUpe3ZhciB0LG47cmV0dXJuIHQ9e30scihcIm5leHRcIikscihcInRocm93XCIsKGZ1bmN0aW9uKGUpe3Rocm93IGV9KSkscihcInJldHVyblwiKSx0W1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sdDtmdW5jdGlvbiByKHIsbyl7dFtyXT1lW3JdP2Z1bmN0aW9uKHQpe3JldHVybihuPSFuKT97dmFsdWU6ayhlW3JdKHQpKSxkb25lOiExfTpvP28odCk6dH06b319ZnVuY3Rpb24gTShlKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTt2YXIgdCxuPWVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdO3JldHVybiBuP24uY2FsbChlKTooZT1tKGUpLHQ9e30scihcIm5leHRcIikscihcInRocm93XCIpLHIoXCJyZXR1cm5cIiksdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sdCk7ZnVuY3Rpb24gcihuKXt0W25dPWVbbl0mJmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24ocixvKXshZnVuY3Rpb24oZSx0LG4scil7UHJvbWlzZS5yZXNvbHZlKHIpLnRoZW4oKGZ1bmN0aW9uKHQpe2Uoe3ZhbHVlOnQsZG9uZTpufSl9KSx0KX0ocixvLCh0PWVbbl0odCkpLmRvbmUsdC52YWx1ZSl9KSl9fX1mdW5jdGlvbiBMKGUsdCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcInJhd1wiLHt2YWx1ZTp0fSk6ZS5yYXc9dCxlfXZhciBfPU9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImRlZmF1bHRcIix7ZW51bWVyYWJsZTohMCx2YWx1ZTp0fSl9OmZ1bmN0aW9uKGUsdCl7ZS5kZWZhdWx0PXR9O2Z1bmN0aW9uIFAoZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCIhPT1uJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmdih0LGUsbik7cmV0dXJuIF8odCxlKSx0fWZ1bmN0aW9uIEUoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIGooZSx0LG4scil7aWYoXCJhXCI9PT1uJiYhcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/ZSE9PXR8fCFyOiF0LmhhcyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO3JldHVyblwibVwiPT09bj9yOlwiYVwiPT09bj9yLmNhbGwoZSk6cj9yLnZhbHVlOnQuZ2V0KGUpfWZ1bmN0aW9uIFIoZSx0LG4scixvKXtpZihcIm1cIj09PXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtpZihcImFcIj09PXImJiFvKXRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdD9lIT09dHx8IW86IXQuaGFzKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtyZXR1cm5cImFcIj09PXI/by5jYWxsKGUsbik6bz9vLnZhbHVlPW46dC5zZXQoZSxuKSxufWZ1bmN0aW9uIEkoZSx0KXtpZihudWxsPT09dHx8XCJvYmplY3RcIiE9dHlwZW9mIHQmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGU/dD09PWU6ZS5oYXModCl9fSw2MDM2OmU9PntlLmV4cG9ydHM9XCJodHRwczovL2Nkbi5vcGVuZmluLmNvL3VpLWxpYnJhcnkvZm9udHMvSW50ZXItSXRhbGljLndvZmYyXCJ9LDQ2Njg6ZT0+e2UuZXhwb3J0cz1cImh0dHBzOi8vY2RuLm9wZW5maW4uY28vdWktbGlicmFyeS9mb250cy9JbnRlci1SZWd1bGFyLndvZmYyXCJ9LDU5NDE6ZT0+e2UuZXhwb3J0cz1cImh0dHBzOi8vY2RuLm9wZW5maW4uY28vdWktbGlicmFyeS9mb250cy9JbnRlci1TZW1pQm9sZC53b2ZmMlwifSwyODEzOmU9PntlLmV4cG9ydHM9XCJodHRwczovL2Nkbi5vcGVuZmluLmNvL3VpLWxpYnJhcnkvZm9udHMvSW50ZXItU2VtaUJvbGRJdGFsaWMud29mZjJcIn0sNjY4OTplPT57ZS5leHBvcnRzPW4oMzc4KX0sNzUxODplPT57ZS5leHBvcnRzPW4oOTIxKX0sODIwNzpmdW5jdGlvbihlKXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3JldHVybihlPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlP1wic3ltYm9sXCI6dHlwZW9mIGV9KSh0KX12YXIgdD0vXlxccysvLG49L1xccyskLztmdW5jdGlvbiByKG8sYSl7aWYoYT1hfHx7fSwobz1vfHxcIlwiKWluc3RhbmNlb2YgcilyZXR1cm4gbztpZighKHRoaXMgaW5zdGFuY2VvZiByKSlyZXR1cm4gbmV3IHIobyxhKTt2YXIgaT1mdW5jdGlvbihyKXt2YXIgbyxhLGksbD17cjowLGc6MCxiOjB9LHM9MSxjPW51bGwsdT1udWxsLGQ9bnVsbCxwPSExLGY9ITE7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHImJihyPWZ1bmN0aW9uKGUpe2U9ZS5yZXBsYWNlKHQsXCJcIikucmVwbGFjZShuLFwiXCIpLnRvTG93ZXJDYXNlKCk7dmFyIHIsbz0hMTtpZihiW2VdKWU9YltlXSxvPSEwO2Vsc2UgaWYoXCJ0cmFuc3BhcmVudFwiPT1lKXJldHVybntyOjAsZzowLGI6MCxhOjAsZm9ybWF0OlwibmFtZVwifTtyZXR1cm4ocj1JLnJnYi5leGVjKGUpKT97cjpyWzFdLGc6clsyXSxiOnJbM119OihyPUkucmdiYS5leGVjKGUpKT97cjpyWzFdLGc6clsyXSxiOnJbM10sYTpyWzRdfToocj1JLmhzbC5leGVjKGUpKT97aDpyWzFdLHM6clsyXSxsOnJbM119OihyPUkuaHNsYS5leGVjKGUpKT97aDpyWzFdLHM6clsyXSxsOnJbM10sYTpyWzRdfToocj1JLmhzdi5leGVjKGUpKT97aDpyWzFdLHM6clsyXSx2OnJbM119OihyPUkuaHN2YS5leGVjKGUpKT97aDpyWzFdLHM6clsyXSx2OnJbM10sYTpyWzRdfToocj1JLmhleDguZXhlYyhlKSk/e3I6TyhyWzFdKSxnOk8oclsyXSksYjpPKHJbM10pLGE6UChyWzRdKSxmb3JtYXQ6bz9cIm5hbWVcIjpcImhleDhcIn06KHI9SS5oZXg2LmV4ZWMoZSkpP3tyOk8oclsxXSksZzpPKHJbMl0pLGI6TyhyWzNdKSxmb3JtYXQ6bz9cIm5hbWVcIjpcImhleFwifToocj1JLmhleDQuZXhlYyhlKSk/e3I6TyhyWzFdK1wiXCIrclsxXSksZzpPKHJbMl0rXCJcIityWzJdKSxiOk8oclszXStcIlwiK3JbM10pLGE6UChyWzRdK1wiXCIrcls0XSksZm9ybWF0Om8/XCJuYW1lXCI6XCJoZXg4XCJ9OiEhKHI9SS5oZXgzLmV4ZWMoZSkpJiZ7cjpPKHJbMV0rXCJcIityWzFdKSxnOk8oclsyXStcIlwiK3JbMl0pLGI6TyhyWzNdK1wiXCIrclszXSksZm9ybWF0Om8/XCJuYW1lXCI6XCJoZXhcIn19KHIpKSxcIm9iamVjdFwiPT1lKHIpJiYoVihyLnIpJiZWKHIuZykmJlYoci5iKT8obz1yLnIsYT1yLmcsaT1yLmIsbD17cjoyNTUqayhvLDI1NSksZzoyNTUqayhhLDI1NSksYjoyNTUqayhpLDI1NSl9LHA9ITAsZj1cIiVcIj09PVN0cmluZyhyLnIpLnN1YnN0cigtMSk/XCJwcmdiXCI6XCJyZ2JcIik6VihyLmgpJiZWKHIucykmJlYoci52KT8oYz1MKHIucyksdT1MKHIudiksbD1mdW5jdGlvbihlLHQsbil7ZT02KmsoZSwzNjApLHQ9ayh0LDEwMCksbj1rKG4sMTAwKTt2YXIgcj1NYXRoLmZsb29yKGUpLG89ZS1yLGE9biooMS10KSxpPW4qKDEtbyp0KSxsPW4qKDEtKDEtbykqdCkscz1yJTY7cmV0dXJue3I6MjU1KltuLGksYSxhLGwsbl1bc10sZzoyNTUqW2wsbixuLGksYSxhXVtzXSxiOjI1NSpbYSxhLGwsbixuLGldW3NdfX0oci5oLGMsdSkscD0hMCxmPVwiaHN2XCIpOlYoci5oKSYmVihyLnMpJiZWKHIubCkmJihjPUwoci5zKSxkPUwoci5sKSxsPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvLGE7ZnVuY3Rpb24gaShlLHQsbil7cmV0dXJuIG48MCYmKG4rPTEpLG4+MSYmKG4tPTEpLG48MS82P2UrNioodC1lKSpuOm48LjU/dDpuPDIvMz9lKyh0LWUpKigyLzMtbikqNjplfWlmKGU9ayhlLDM2MCksdD1rKHQsMTAwKSxuPWsobiwxMDApLDA9PT10KXI9bz1hPW47ZWxzZXt2YXIgbD1uPC41P24qKDErdCk6bit0LW4qdCxzPTIqbi1sO3I9aShzLGwsZSsxLzMpLG89aShzLGwsZSksYT1pKHMsbCxlLTEvMyl9cmV0dXJue3I6MjU1KnIsZzoyNTUqbyxiOjI1NSphfX0oci5oLGMsZCkscD0hMCxmPVwiaHNsXCIpLHIuaGFzT3duUHJvcGVydHkoXCJhXCIpJiYocz1yLmEpKSxzPXgocykse29rOnAsZm9ybWF0OnIuZm9ybWF0fHxmLHI6TWF0aC5taW4oMjU1LE1hdGgubWF4KGwuciwwKSksZzpNYXRoLm1pbigyNTUsTWF0aC5tYXgobC5nLDApKSxiOk1hdGgubWluKDI1NSxNYXRoLm1heChsLmIsMCkpLGE6c319KG8pO3RoaXMuX29yaWdpbmFsSW5wdXQ9byx0aGlzLl9yPWkucix0aGlzLl9nPWkuZyx0aGlzLl9iPWkuYix0aGlzLl9hPWkuYSx0aGlzLl9yb3VuZEE9TWF0aC5yb3VuZCgxMDAqdGhpcy5fYSkvMTAwLHRoaXMuX2Zvcm1hdD1hLmZvcm1hdHx8aS5mb3JtYXQsdGhpcy5fZ3JhZGllbnRUeXBlPWEuZ3JhZGllbnRUeXBlLHRoaXMuX3I8MSYmKHRoaXMuX3I9TWF0aC5yb3VuZCh0aGlzLl9yKSksdGhpcy5fZzwxJiYodGhpcy5fZz1NYXRoLnJvdW5kKHRoaXMuX2cpKSx0aGlzLl9iPDEmJih0aGlzLl9iPU1hdGgucm91bmQodGhpcy5fYikpLHRoaXMuX29rPWkub2t9ZnVuY3Rpb24gbyhlLHQsbil7ZT1rKGUsMjU1KSx0PWsodCwyNTUpLG49ayhuLDI1NSk7dmFyIHIsbyxhPU1hdGgubWF4KGUsdCxuKSxpPU1hdGgubWluKGUsdCxuKSxsPShhK2kpLzI7aWYoYT09aSlyPW89MDtlbHNle3ZhciBzPWEtaTtzd2l0Y2gobz1sPi41P3MvKDItYS1pKTpzLyhhK2kpLGEpe2Nhc2UgZTpyPSh0LW4pL3MrKHQ8bj82OjApO2JyZWFrO2Nhc2UgdDpyPShuLWUpL3MrMjticmVhaztjYXNlIG46cj0oZS10KS9zKzR9ci89Nn1yZXR1cm57aDpyLHM6byxsfX1mdW5jdGlvbiBhKGUsdCxuKXtlPWsoZSwyNTUpLHQ9ayh0LDI1NSksbj1rKG4sMjU1KTt2YXIgcixvLGE9TWF0aC5tYXgoZSx0LG4pLGk9TWF0aC5taW4oZSx0LG4pLGw9YSxzPWEtaTtpZihvPTA9PT1hPzA6cy9hLGE9PWkpcj0wO2Vsc2V7c3dpdGNoKGEpe2Nhc2UgZTpyPSh0LW4pL3MrKHQ8bj82OjApO2JyZWFrO2Nhc2UgdDpyPShuLWUpL3MrMjticmVhaztjYXNlIG46cj0oZS10KS9zKzR9ci89Nn1yZXR1cm57aDpyLHM6byx2Omx9fWZ1bmN0aW9uIGkoZSx0LG4scil7dmFyIG89W00oTWF0aC5yb3VuZChlKS50b1N0cmluZygxNikpLE0oTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNikpLE0oTWF0aC5yb3VuZChuKS50b1N0cmluZygxNikpXTtyZXR1cm4gciYmb1swXS5jaGFyQXQoMCk9PW9bMF0uY2hhckF0KDEpJiZvWzFdLmNoYXJBdCgwKT09b1sxXS5jaGFyQXQoMSkmJm9bMl0uY2hhckF0KDApPT1vWzJdLmNoYXJBdCgxKT9vWzBdLmNoYXJBdCgwKStvWzFdLmNoYXJBdCgwKStvWzJdLmNoYXJBdCgwKTpvLmpvaW4oXCJcIil9ZnVuY3Rpb24gbChlLHQsbixyKXtyZXR1cm5bTShfKHIpKSxNKE1hdGgucm91bmQoZSkudG9TdHJpbmcoMTYpKSxNKE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpKSxNKE1hdGgucm91bmQobikudG9TdHJpbmcoMTYpKV0uam9pbihcIlwiKX1mdW5jdGlvbiBzKGUsdCl7dD0wPT09dD8wOnR8fDEwO3ZhciBuPXIoZSkudG9Ic2woKTtyZXR1cm4gbi5zLT10LzEwMCxuLnM9UyhuLnMpLHIobil9ZnVuY3Rpb24gYyhlLHQpe3Q9MD09PXQ/MDp0fHwxMDt2YXIgbj1yKGUpLnRvSHNsKCk7cmV0dXJuIG4ucys9dC8xMDAsbi5zPVMobi5zKSxyKG4pfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIHIoZSkuZGVzYXR1cmF0ZSgxMDApfWZ1bmN0aW9uIGQoZSx0KXt0PTA9PT10PzA6dHx8MTA7dmFyIG49cihlKS50b0hzbCgpO3JldHVybiBuLmwrPXQvMTAwLG4ubD1TKG4ubCkscihuKX1mdW5jdGlvbiBwKGUsdCl7dD0wPT09dD8wOnR8fDEwO3ZhciBuPXIoZSkudG9SZ2IoKTtyZXR1cm4gbi5yPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LG4uci1NYXRoLnJvdW5kKC10LzEwMCoyNTUpKSksbi5nPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LG4uZy1NYXRoLnJvdW5kKC10LzEwMCoyNTUpKSksbi5iPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LG4uYi1NYXRoLnJvdW5kKC10LzEwMCoyNTUpKSkscihuKX1mdW5jdGlvbiBmKGUsdCl7dD0wPT09dD8wOnR8fDEwO3ZhciBuPXIoZSkudG9Ic2woKTtyZXR1cm4gbi5sLT10LzEwMCxuLmw9UyhuLmwpLHIobil9ZnVuY3Rpb24gaChlLHQpe3ZhciBuPXIoZSkudG9Ic2woKSxvPShuLmgrdCklMzYwO3JldHVybiBuLmg9bzwwPzM2MCtvOm8scihuKX1mdW5jdGlvbiBnKGUpe3ZhciB0PXIoZSkudG9Ic2woKTtyZXR1cm4gdC5oPSh0LmgrMTgwKSUzNjAscih0KX1mdW5jdGlvbiB2KGUsdCl7aWYoaXNOYU4odCl8fHQ8PTApdGhyb3cgbmV3IEVycm9yKFwiQXJndW1lbnQgdG8gcG9seWFkIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXJcIik7Zm9yKHZhciBuPXIoZSkudG9Ic2woKSxvPVtyKGUpXSxhPTM2MC90LGk9MTtpPHQ7aSsrKW8ucHVzaChyKHtoOihuLmgraSphKSUzNjAsczpuLnMsbDpuLmx9KSk7cmV0dXJuIG99ZnVuY3Rpb24gQyhlKXt2YXIgdD1yKGUpLnRvSHNsKCksbj10Lmg7cmV0dXJuW3IoZSkscih7aDoobis3MiklMzYwLHM6dC5zLGw6dC5sfSkscih7aDoobisyMTYpJTM2MCxzOnQucyxsOnQubH0pXX1mdW5jdGlvbiBtKGUsdCxuKXt0PXR8fDYsbj1ufHwzMDt2YXIgbz1yKGUpLnRvSHNsKCksYT0zNjAvbixpPVtyKGUpXTtmb3Ioby5oPShvLmgtKGEqdD4+MSkrNzIwKSUzNjA7LS10OylvLmg9KG8uaCthKSUzNjAsaS5wdXNoKHIobykpO3JldHVybiBpfWZ1bmN0aW9uIHcoZSx0KXt0PXR8fDY7Zm9yKHZhciBuPXIoZSkudG9Ic3YoKSxvPW4uaCxhPW4ucyxpPW4udixsPVtdLHM9MS90O3QtLTspbC5wdXNoKHIoe2g6byxzOmEsdjppfSkpLGk9KGkrcyklMTtyZXR1cm4gbH1yLnByb3RvdHlwZT17aXNEYXJrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnJpZ2h0bmVzcygpPDEyOH0saXNMaWdodDpmdW5jdGlvbigpe3JldHVybiF0aGlzLmlzRGFyaygpfSxpc1ZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29rfSxnZXRPcmlnaW5hbElucHV0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29yaWdpbmFsSW5wdXR9LGdldEZvcm1hdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9mb3JtYXR9LGdldEFscGhhOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2F9LGdldEJyaWdodG5lc3M6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnRvUmdiKCk7cmV0dXJuKDI5OSplLnIrNTg3KmUuZysxMTQqZS5iKS8xZTN9LGdldEx1bWluYW5jZTpmdW5jdGlvbigpe3ZhciBlLHQsbixyPXRoaXMudG9SZ2IoKTtyZXR1cm4gZT1yLnIvMjU1LHQ9ci5nLzI1NSxuPXIuYi8yNTUsLjIxMjYqKGU8PS4wMzkyOD9lLzEyLjkyOk1hdGgucG93KChlKy4wNTUpLzEuMDU1LDIuNCkpKy43MTUyKih0PD0uMDM5Mjg/dC8xMi45MjpNYXRoLnBvdygodCsuMDU1KS8xLjA1NSwyLjQpKSsuMDcyMioobjw9LjAzOTI4P24vMTIuOTI6TWF0aC5wb3coKG4rLjA1NSkvMS4wNTUsMi40KSl9LHNldEFscGhhOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9hPXgoZSksdGhpcy5fcm91bmRBPU1hdGgucm91bmQoMTAwKnRoaXMuX2EpLzEwMCx0aGlzfSx0b0hzdjpmdW5jdGlvbigpe3ZhciBlPWEodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpO3JldHVybntoOjM2MCplLmgsczplLnMsdjplLnYsYTp0aGlzLl9hfX0sdG9Ic3ZTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgZT1hKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iKSx0PU1hdGgucm91bmQoMzYwKmUuaCksbj1NYXRoLnJvdW5kKDEwMCplLnMpLHI9TWF0aC5yb3VuZCgxMDAqZS52KTtyZXR1cm4gMT09dGhpcy5fYT9cImhzdihcIit0K1wiLCBcIituK1wiJSwgXCIrcitcIiUpXCI6XCJoc3ZhKFwiK3QrXCIsIFwiK24rXCIlLCBcIityK1wiJSwgXCIrdGhpcy5fcm91bmRBK1wiKVwifSx0b0hzbDpmdW5jdGlvbigpe3ZhciBlPW8odGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpO3JldHVybntoOjM2MCplLmgsczplLnMsbDplLmwsYTp0aGlzLl9hfX0sdG9Ic2xTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgZT1vKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iKSx0PU1hdGgucm91bmQoMzYwKmUuaCksbj1NYXRoLnJvdW5kKDEwMCplLnMpLHI9TWF0aC5yb3VuZCgxMDAqZS5sKTtyZXR1cm4gMT09dGhpcy5fYT9cImhzbChcIit0K1wiLCBcIituK1wiJSwgXCIrcitcIiUpXCI6XCJoc2xhKFwiK3QrXCIsIFwiK24rXCIlLCBcIityK1wiJSwgXCIrdGhpcy5fcm91bmRBK1wiKVwifSx0b0hleDpmdW5jdGlvbihlKXtyZXR1cm4gaSh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYixlKX0sdG9IZXhTdHJpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuXCIjXCIrdGhpcy50b0hleChlKX0sdG9IZXg4OmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihlLHQsbixyLG8pe3ZhciBhPVtNKE1hdGgucm91bmQoZSkudG9TdHJpbmcoMTYpKSxNKE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpKSxNKE1hdGgucm91bmQobikudG9TdHJpbmcoMTYpKSxNKF8ocikpXTtyZXR1cm4gbyYmYVswXS5jaGFyQXQoMCk9PWFbMF0uY2hhckF0KDEpJiZhWzFdLmNoYXJBdCgwKT09YVsxXS5jaGFyQXQoMSkmJmFbMl0uY2hhckF0KDApPT1hWzJdLmNoYXJBdCgxKSYmYVszXS5jaGFyQXQoMCk9PWFbM10uY2hhckF0KDEpP2FbMF0uY2hhckF0KDApK2FbMV0uY2hhckF0KDApK2FbMl0uY2hhckF0KDApK2FbM10uY2hhckF0KDApOmEuam9pbihcIlwiKX0odGhpcy5fcix0aGlzLl9nLHRoaXMuX2IsdGhpcy5fYSxlKX0sdG9IZXg4U3RyaW5nOmZ1bmN0aW9uKGUpe3JldHVyblwiI1wiK3RoaXMudG9IZXg4KGUpfSx0b1JnYjpmdW5jdGlvbigpe3JldHVybntyOk1hdGgucm91bmQodGhpcy5fciksZzpNYXRoLnJvdW5kKHRoaXMuX2cpLGI6TWF0aC5yb3VuZCh0aGlzLl9iKSxhOnRoaXMuX2F9fSx0b1JnYlN0cmluZzpmdW5jdGlvbigpe3JldHVybiAxPT10aGlzLl9hP1wicmdiKFwiK01hdGgucm91bmQodGhpcy5fcikrXCIsIFwiK01hdGgucm91bmQodGhpcy5fZykrXCIsIFwiK01hdGgucm91bmQodGhpcy5fYikrXCIpXCI6XCJyZ2JhKFwiK01hdGgucm91bmQodGhpcy5fcikrXCIsIFwiK01hdGgucm91bmQodGhpcy5fZykrXCIsIFwiK01hdGgucm91bmQodGhpcy5fYikrXCIsIFwiK3RoaXMuX3JvdW5kQStcIilcIn0sdG9QZXJjZW50YWdlUmdiOmZ1bmN0aW9uKCl7cmV0dXJue3I6TWF0aC5yb3VuZCgxMDAqayh0aGlzLl9yLDI1NSkpK1wiJVwiLGc6TWF0aC5yb3VuZCgxMDAqayh0aGlzLl9nLDI1NSkpK1wiJVwiLGI6TWF0aC5yb3VuZCgxMDAqayh0aGlzLl9iLDI1NSkpK1wiJVwiLGE6dGhpcy5fYX19LHRvUGVyY2VudGFnZVJnYlN0cmluZzpmdW5jdGlvbigpe3JldHVybiAxPT10aGlzLl9hP1wicmdiKFwiK01hdGgucm91bmQoMTAwKmsodGhpcy5fciwyNTUpKStcIiUsIFwiK01hdGgucm91bmQoMTAwKmsodGhpcy5fZywyNTUpKStcIiUsIFwiK01hdGgucm91bmQoMTAwKmsodGhpcy5fYiwyNTUpKStcIiUpXCI6XCJyZ2JhKFwiK01hdGgucm91bmQoMTAwKmsodGhpcy5fciwyNTUpKStcIiUsIFwiK01hdGgucm91bmQoMTAwKmsodGhpcy5fZywyNTUpKStcIiUsIFwiK01hdGgucm91bmQoMTAwKmsodGhpcy5fYiwyNTUpKStcIiUsIFwiK3RoaXMuX3JvdW5kQStcIilcIn0sdG9OYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLl9hP1widHJhbnNwYXJlbnRcIjohKHRoaXMuX2E8MSkmJih5W2kodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IsITApXXx8ITEpfSx0b0ZpbHRlcjpmdW5jdGlvbihlKXt2YXIgdD1cIiNcIitsKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLHRoaXMuX2EpLG49dCxvPXRoaXMuX2dyYWRpZW50VHlwZT9cIkdyYWRpZW50VHlwZSA9IDEsIFwiOlwiXCI7aWYoZSl7dmFyIGE9cihlKTtuPVwiI1wiK2woYS5fcixhLl9nLGEuX2IsYS5fYSl9cmV0dXJuXCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoXCIrbytcInN0YXJ0Q29sb3JzdHI9XCIrdCtcIixlbmRDb2xvcnN0cj1cIituK1wiKVwifSx0b1N0cmluZzpmdW5jdGlvbihlKXt2YXIgdD0hIWU7ZT1lfHx0aGlzLl9mb3JtYXQ7dmFyIG49ITEscj10aGlzLl9hPDEmJnRoaXMuX2E+PTA7cmV0dXJuIHR8fCFyfHxcImhleFwiIT09ZSYmXCJoZXg2XCIhPT1lJiZcImhleDNcIiE9PWUmJlwiaGV4NFwiIT09ZSYmXCJoZXg4XCIhPT1lJiZcIm5hbWVcIiE9PWU/KFwicmdiXCI9PT1lJiYobj10aGlzLnRvUmdiU3RyaW5nKCkpLFwicHJnYlwiPT09ZSYmKG49dGhpcy50b1BlcmNlbnRhZ2VSZ2JTdHJpbmcoKSksXCJoZXhcIiE9PWUmJlwiaGV4NlwiIT09ZXx8KG49dGhpcy50b0hleFN0cmluZygpKSxcImhleDNcIj09PWUmJihuPXRoaXMudG9IZXhTdHJpbmcoITApKSxcImhleDRcIj09PWUmJihuPXRoaXMudG9IZXg4U3RyaW5nKCEwKSksXCJoZXg4XCI9PT1lJiYobj10aGlzLnRvSGV4OFN0cmluZygpKSxcIm5hbWVcIj09PWUmJihuPXRoaXMudG9OYW1lKCkpLFwiaHNsXCI9PT1lJiYobj10aGlzLnRvSHNsU3RyaW5nKCkpLFwiaHN2XCI9PT1lJiYobj10aGlzLnRvSHN2U3RyaW5nKCkpLG58fHRoaXMudG9IZXhTdHJpbmcoKSk6XCJuYW1lXCI9PT1lJiYwPT09dGhpcy5fYT90aGlzLnRvTmFtZSgpOnRoaXMudG9SZ2JTdHJpbmcoKX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gcih0aGlzLnRvU3RyaW5nKCkpfSxfYXBwbHlNb2RpZmljYXRpb246ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmFwcGx5KG51bGwsW3RoaXNdLmNvbmNhdChbXS5zbGljZS5jYWxsKHQpKSk7cmV0dXJuIHRoaXMuX3I9bi5fcix0aGlzLl9nPW4uX2csdGhpcy5fYj1uLl9iLHRoaXMuc2V0QWxwaGEobi5fYSksdGhpc30sbGlnaHRlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihkLGFyZ3VtZW50cyl9LGJyaWdodGVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKHAsYXJndW1lbnRzKX0sZGFya2VuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGYsYXJndW1lbnRzKX0sZGVzYXR1cmF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihzLGFyZ3VtZW50cyl9LHNhdHVyYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGMsYXJndW1lbnRzKX0sZ3JleXNjYWxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKHUsYXJndW1lbnRzKX0sc3BpbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihoLGFyZ3VtZW50cyl9LF9hcHBseUNvbWJpbmF0aW9uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuYXBwbHkobnVsbCxbdGhpc10uY29uY2F0KFtdLnNsaWNlLmNhbGwodCkpKX0sYW5hbG9nb3VzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24obSxhcmd1bWVudHMpfSxjb21wbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oZyxhcmd1bWVudHMpfSxtb25vY2hyb21hdGljOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24odyxhcmd1bWVudHMpfSxzcGxpdGNvbXBsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihDLGFyZ3VtZW50cyl9LHRyaWFkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24odixbM10pfSx0ZXRyYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbih2LFs0XSl9fSxyLmZyb21SYXRpbz1mdW5jdGlvbih0LG4pe2lmKFwib2JqZWN0XCI9PWUodCkpe3ZhciBvPXt9O2Zvcih2YXIgYSBpbiB0KXQuaGFzT3duUHJvcGVydHkoYSkmJihvW2FdPVwiYVwiPT09YT90W2FdOkwodFthXSkpO3Q9b31yZXR1cm4gcih0LG4pfSxyLmVxdWFscz1mdW5jdGlvbihlLHQpe3JldHVybiEoIWV8fCF0KSYmcihlKS50b1JnYlN0cmluZygpPT1yKHQpLnRvUmdiU3RyaW5nKCl9LHIucmFuZG9tPWZ1bmN0aW9uKCl7cmV0dXJuIHIuZnJvbVJhdGlvKHtyOk1hdGgucmFuZG9tKCksZzpNYXRoLnJhbmRvbSgpLGI6TWF0aC5yYW5kb20oKX0pfSxyLm1peD1mdW5jdGlvbihlLHQsbil7bj0wPT09bj8wOm58fDUwO3ZhciBvPXIoZSkudG9SZ2IoKSxhPXIodCkudG9SZ2IoKSxpPW4vMTAwO3JldHVybiByKHtyOihhLnItby5yKSppK28ucixnOihhLmctby5nKSppK28uZyxiOihhLmItby5iKSppK28uYixhOihhLmEtby5hKSppK28uYX0pfSxyLnJlYWRhYmlsaXR5PWZ1bmN0aW9uKGUsdCl7dmFyIG49cihlKSxvPXIodCk7cmV0dXJuKE1hdGgubWF4KG4uZ2V0THVtaW5hbmNlKCksby5nZXRMdW1pbmFuY2UoKSkrLjA1KS8oTWF0aC5taW4obi5nZXRMdW1pbmFuY2UoKSxvLmdldEx1bWluYW5jZSgpKSsuMDUpfSxyLmlzUmVhZGFibGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciBvLGEsaSxsLHMsYz1yLnJlYWRhYmlsaXR5KGUsdCk7c3dpdGNoKGE9ITEsKGk9bixcIkFBXCIhPT0obD0oKGk9aXx8e2xldmVsOlwiQUFcIixzaXplOlwic21hbGxcIn0pLmxldmVsfHxcIkFBXCIpLnRvVXBwZXJDYXNlKCkpJiZcIkFBQVwiIT09bCYmKGw9XCJBQVwiKSxcInNtYWxsXCIhPT0ocz0oaS5zaXplfHxcInNtYWxsXCIpLnRvTG93ZXJDYXNlKCkpJiZcImxhcmdlXCIhPT1zJiYocz1cInNtYWxsXCIpLG89e2xldmVsOmwsc2l6ZTpzfSkubGV2ZWwrby5zaXplKXtjYXNlXCJBQXNtYWxsXCI6Y2FzZVwiQUFBbGFyZ2VcIjphPWM+PTQuNTticmVhaztjYXNlXCJBQWxhcmdlXCI6YT1jPj0zO2JyZWFrO2Nhc2VcIkFBQXNtYWxsXCI6YT1jPj03fXJldHVybiBhfSxyLm1vc3RSZWFkYWJsZT1mdW5jdGlvbihlLHQsbil7dmFyIG8sYSxpLGwscz1udWxsLGM9MDthPShuPW58fHt9KS5pbmNsdWRlRmFsbGJhY2tDb2xvcnMsaT1uLmxldmVsLGw9bi5zaXplO2Zvcih2YXIgdT0wO3U8dC5sZW5ndGg7dSsrKShvPXIucmVhZGFiaWxpdHkoZSx0W3VdKSk+YyYmKGM9byxzPXIodFt1XSkpO3JldHVybiByLmlzUmVhZGFibGUoZSxzLHtsZXZlbDppLHNpemU6bH0pfHwhYT9zOihuLmluY2x1ZGVGYWxsYmFja0NvbG9ycz0hMSxyLm1vc3RSZWFkYWJsZShlLFtcIiNmZmZcIixcIiMwMDBcIl0sbikpfTt2YXIgYj1yLm5hbWVzPXthbGljZWJsdWU6XCJmMGY4ZmZcIixhbnRpcXVld2hpdGU6XCJmYWViZDdcIixhcXVhOlwiMGZmXCIsYXF1YW1hcmluZTpcIjdmZmZkNFwiLGF6dXJlOlwiZjBmZmZmXCIsYmVpZ2U6XCJmNWY1ZGNcIixiaXNxdWU6XCJmZmU0YzRcIixibGFjazpcIjAwMFwiLGJsYW5jaGVkYWxtb25kOlwiZmZlYmNkXCIsYmx1ZTpcIjAwZlwiLGJsdWV2aW9sZXQ6XCI4YTJiZTJcIixicm93bjpcImE1MmEyYVwiLGJ1cmx5d29vZDpcImRlYjg4N1wiLGJ1cm50c2llbm5hOlwiZWE3ZTVkXCIsY2FkZXRibHVlOlwiNWY5ZWEwXCIsY2hhcnRyZXVzZTpcIjdmZmYwMFwiLGNob2NvbGF0ZTpcImQyNjkxZVwiLGNvcmFsOlwiZmY3ZjUwXCIsY29ybmZsb3dlcmJsdWU6XCI2NDk1ZWRcIixjb3Juc2lsazpcImZmZjhkY1wiLGNyaW1zb246XCJkYzE0M2NcIixjeWFuOlwiMGZmXCIsZGFya2JsdWU6XCIwMDAwOGJcIixkYXJrY3lhbjpcIjAwOGI4YlwiLGRhcmtnb2xkZW5yb2Q6XCJiODg2MGJcIixkYXJrZ3JheTpcImE5YTlhOVwiLGRhcmtncmVlbjpcIjAwNjQwMFwiLGRhcmtncmV5OlwiYTlhOWE5XCIsZGFya2toYWtpOlwiYmRiNzZiXCIsZGFya21hZ2VudGE6XCI4YjAwOGJcIixkYXJrb2xpdmVncmVlbjpcIjU1NmIyZlwiLGRhcmtvcmFuZ2U6XCJmZjhjMDBcIixkYXJrb3JjaGlkOlwiOTkzMmNjXCIsZGFya3JlZDpcIjhiMDAwMFwiLGRhcmtzYWxtb246XCJlOTk2N2FcIixkYXJrc2VhZ3JlZW46XCI4ZmJjOGZcIixkYXJrc2xhdGVibHVlOlwiNDgzZDhiXCIsZGFya3NsYXRlZ3JheTpcIjJmNGY0ZlwiLGRhcmtzbGF0ZWdyZXk6XCIyZjRmNGZcIixkYXJrdHVycXVvaXNlOlwiMDBjZWQxXCIsZGFya3Zpb2xldDpcIjk0MDBkM1wiLGRlZXBwaW5rOlwiZmYxNDkzXCIsZGVlcHNreWJsdWU6XCIwMGJmZmZcIixkaW1ncmF5OlwiNjk2OTY5XCIsZGltZ3JleTpcIjY5Njk2OVwiLGRvZGdlcmJsdWU6XCIxZTkwZmZcIixmaXJlYnJpY2s6XCJiMjIyMjJcIixmbG9yYWx3aGl0ZTpcImZmZmFmMFwiLGZvcmVzdGdyZWVuOlwiMjI4YjIyXCIsZnVjaHNpYTpcImYwZlwiLGdhaW5zYm9ybzpcImRjZGNkY1wiLGdob3N0d2hpdGU6XCJmOGY4ZmZcIixnb2xkOlwiZmZkNzAwXCIsZ29sZGVucm9kOlwiZGFhNTIwXCIsZ3JheTpcIjgwODA4MFwiLGdyZWVuOlwiMDA4MDAwXCIsZ3JlZW55ZWxsb3c6XCJhZGZmMmZcIixncmV5OlwiODA4MDgwXCIsaG9uZXlkZXc6XCJmMGZmZjBcIixob3RwaW5rOlwiZmY2OWI0XCIsaW5kaWFucmVkOlwiY2Q1YzVjXCIsaW5kaWdvOlwiNGIwMDgyXCIsaXZvcnk6XCJmZmZmZjBcIixraGFraTpcImYwZTY4Y1wiLGxhdmVuZGVyOlwiZTZlNmZhXCIsbGF2ZW5kZXJibHVzaDpcImZmZjBmNVwiLGxhd25ncmVlbjpcIjdjZmMwMFwiLGxlbW9uY2hpZmZvbjpcImZmZmFjZFwiLGxpZ2h0Ymx1ZTpcImFkZDhlNlwiLGxpZ2h0Y29yYWw6XCJmMDgwODBcIixsaWdodGN5YW46XCJlMGZmZmZcIixsaWdodGdvbGRlbnJvZHllbGxvdzpcImZhZmFkMlwiLGxpZ2h0Z3JheTpcImQzZDNkM1wiLGxpZ2h0Z3JlZW46XCI5MGVlOTBcIixsaWdodGdyZXk6XCJkM2QzZDNcIixsaWdodHBpbms6XCJmZmI2YzFcIixsaWdodHNhbG1vbjpcImZmYTA3YVwiLGxpZ2h0c2VhZ3JlZW46XCIyMGIyYWFcIixsaWdodHNreWJsdWU6XCI4N2NlZmFcIixsaWdodHNsYXRlZ3JheTpcIjc4OVwiLGxpZ2h0c2xhdGVncmV5OlwiNzg5XCIsbGlnaHRzdGVlbGJsdWU6XCJiMGM0ZGVcIixsaWdodHllbGxvdzpcImZmZmZlMFwiLGxpbWU6XCIwZjBcIixsaW1lZ3JlZW46XCIzMmNkMzJcIixsaW5lbjpcImZhZjBlNlwiLG1hZ2VudGE6XCJmMGZcIixtYXJvb246XCI4MDAwMDBcIixtZWRpdW1hcXVhbWFyaW5lOlwiNjZjZGFhXCIsbWVkaXVtYmx1ZTpcIjAwMDBjZFwiLG1lZGl1bW9yY2hpZDpcImJhNTVkM1wiLG1lZGl1bXB1cnBsZTpcIjkzNzBkYlwiLG1lZGl1bXNlYWdyZWVuOlwiM2NiMzcxXCIsbWVkaXVtc2xhdGVibHVlOlwiN2I2OGVlXCIsbWVkaXVtc3ByaW5nZ3JlZW46XCIwMGZhOWFcIixtZWRpdW10dXJxdW9pc2U6XCI0OGQxY2NcIixtZWRpdW12aW9sZXRyZWQ6XCJjNzE1ODVcIixtaWRuaWdodGJsdWU6XCIxOTE5NzBcIixtaW50Y3JlYW06XCJmNWZmZmFcIixtaXN0eXJvc2U6XCJmZmU0ZTFcIixtb2NjYXNpbjpcImZmZTRiNVwiLG5hdmFqb3doaXRlOlwiZmZkZWFkXCIsbmF2eTpcIjAwMDA4MFwiLG9sZGxhY2U6XCJmZGY1ZTZcIixvbGl2ZTpcIjgwODAwMFwiLG9saXZlZHJhYjpcIjZiOGUyM1wiLG9yYW5nZTpcImZmYTUwMFwiLG9yYW5nZXJlZDpcImZmNDUwMFwiLG9yY2hpZDpcImRhNzBkNlwiLHBhbGVnb2xkZW5yb2Q6XCJlZWU4YWFcIixwYWxlZ3JlZW46XCI5OGZiOThcIixwYWxldHVycXVvaXNlOlwiYWZlZWVlXCIscGFsZXZpb2xldHJlZDpcImRiNzA5M1wiLHBhcGF5YXdoaXA6XCJmZmVmZDVcIixwZWFjaHB1ZmY6XCJmZmRhYjlcIixwZXJ1OlwiY2Q4NTNmXCIscGluazpcImZmYzBjYlwiLHBsdW06XCJkZGEwZGRcIixwb3dkZXJibHVlOlwiYjBlMGU2XCIscHVycGxlOlwiODAwMDgwXCIscmViZWNjYXB1cnBsZTpcIjY2MzM5OVwiLHJlZDpcImYwMFwiLHJvc3licm93bjpcImJjOGY4ZlwiLHJveWFsYmx1ZTpcIjQxNjllMVwiLHNhZGRsZWJyb3duOlwiOGI0NTEzXCIsc2FsbW9uOlwiZmE4MDcyXCIsc2FuZHlicm93bjpcImY0YTQ2MFwiLHNlYWdyZWVuOlwiMmU4YjU3XCIsc2Vhc2hlbGw6XCJmZmY1ZWVcIixzaWVubmE6XCJhMDUyMmRcIixzaWx2ZXI6XCJjMGMwYzBcIixza3libHVlOlwiODdjZWViXCIsc2xhdGVibHVlOlwiNmE1YWNkXCIsc2xhdGVncmF5OlwiNzA4MDkwXCIsc2xhdGVncmV5OlwiNzA4MDkwXCIsc25vdzpcImZmZmFmYVwiLHNwcmluZ2dyZWVuOlwiMDBmZjdmXCIsc3RlZWxibHVlOlwiNDY4MmI0XCIsdGFuOlwiZDJiNDhjXCIsdGVhbDpcIjAwODA4MFwiLHRoaXN0bGU6XCJkOGJmZDhcIix0b21hdG86XCJmZjYzNDdcIix0dXJxdW9pc2U6XCI0MGUwZDBcIix2aW9sZXQ6XCJlZTgyZWVcIix3aGVhdDpcImY1ZGViM1wiLHdoaXRlOlwiZmZmXCIsd2hpdGVzbW9rZTpcImY1ZjVmNVwiLHllbGxvdzpcImZmMFwiLHllbGxvd2dyZWVuOlwiOWFjZDMyXCJ9LHk9ci5oZXhOYW1lcz1mdW5jdGlvbihlKXt2YXIgdD17fTtmb3IodmFyIG4gaW4gZSllLmhhc093blByb3BlcnR5KG4pJiYodFtlW25dXT1uKTtyZXR1cm4gdH0oYik7ZnVuY3Rpb24geChlKXtyZXR1cm4gZT1wYXJzZUZsb2F0KGUpLChpc05hTihlKXx8ZTwwfHxlPjEpJiYoZT0xKSxlfWZ1bmN0aW9uIGsoZSx0KXsoZnVuY3Rpb24oZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUmJi0xIT1lLmluZGV4T2YoXCIuXCIpJiYxPT09cGFyc2VGbG9hdChlKX0pKGUpJiYoZT1cIjEwMCVcIik7dmFyIG49ZnVuY3Rpb24oZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUmJi0xIT1lLmluZGV4T2YoXCIlXCIpfShlKTtyZXR1cm4gZT1NYXRoLm1pbih0LE1hdGgubWF4KDAscGFyc2VGbG9hdChlKSkpLG4mJihlPXBhcnNlSW50KGUqdCwxMCkvMTAwKSxNYXRoLmFicyhlLXQpPDFlLTY/MTplJXQvcGFyc2VGbG9hdCh0KX1mdW5jdGlvbiBTKGUpe3JldHVybiBNYXRoLm1pbigxLE1hdGgubWF4KDAsZSkpfWZ1bmN0aW9uIE8oZSl7cmV0dXJuIHBhcnNlSW50KGUsMTYpfWZ1bmN0aW9uIE0oZSl7cmV0dXJuIDE9PWUubGVuZ3RoP1wiMFwiK2U6XCJcIitlfWZ1bmN0aW9uIEwoZSl7cmV0dXJuIGU8PTEmJihlPTEwMCplK1wiJVwiKSxlfWZ1bmN0aW9uIF8oZSl7cmV0dXJuIE1hdGgucm91bmQoMjU1KnBhcnNlRmxvYXQoZSkpLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBQKGUpe3JldHVybiBPKGUpLzI1NX12YXIgRSxqLFIsST0oaj1cIltcXFxcc3xcXFxcKF0rKFwiKyhFPVwiKD86Wy1cXFxcK10/XFxcXGQqXFxcXC5cXFxcZCslPyl8KD86Wy1cXFxcK10/XFxcXGQrJT8pXCIpK1wiKVssfFxcXFxzXSsoXCIrRStcIilbLHxcXFxcc10rKFwiK0UrXCIpXFxcXHMqXFxcXCk/XCIsUj1cIltcXFxcc3xcXFxcKF0rKFwiK0UrXCIpWyx8XFxcXHNdKyhcIitFK1wiKVssfFxcXFxzXSsoXCIrRStcIilbLHxcXFxcc10rKFwiK0UrXCIpXFxcXHMqXFxcXCk/XCIse0NTU19VTklUOm5ldyBSZWdFeHAoRSkscmdiOm5ldyBSZWdFeHAoXCJyZ2JcIitqKSxyZ2JhOm5ldyBSZWdFeHAoXCJyZ2JhXCIrUiksaHNsOm5ldyBSZWdFeHAoXCJoc2xcIitqKSxoc2xhOm5ldyBSZWdFeHAoXCJoc2xhXCIrUiksaHN2Om5ldyBSZWdFeHAoXCJoc3ZcIitqKSxoc3ZhOm5ldyBSZWdFeHAoXCJoc3ZhXCIrUiksaGV4MzovXiM/KFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pJC8saGV4NjovXiM/KFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pJC8saGV4NDovXiM/KFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KSQvLGhleDg6L14jPyhbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkkL30pO2Z1bmN0aW9uIFYoZSl7cmV0dXJuISFJLkNTU19VTklULmV4ZWMoZSl9cmV0dXJuIHJ9KCl9fSxvPXt9O2Z1bmN0aW9uIGEoZSl7dmFyIHQ9b1tlXTtpZih2b2lkIDAhPT10KXJldHVybiB0LmV4cG9ydHM7dmFyIG49b1tlXT17aWQ6ZSxsb2FkZWQ6ITEsZXhwb3J0czp7fX07cmV0dXJuIHJbZV0uY2FsbChuLmV4cG9ydHMsbixuLmV4cG9ydHMsYSksbi5sb2FkZWQ9ITAsbi5leHBvcnRzfWEubj1lPT57dmFyIHQ9ZSYmZS5fX2VzTW9kdWxlPygpPT5lLmRlZmF1bHQ6KCk9PmU7cmV0dXJuIGEuZCh0LHthOnR9KSx0fSxhLmQ9KGUsdCk9Pntmb3IodmFyIG4gaW4gdClhLm8odCxuKSYmIWEubyhlLG4pJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHtlbnVtZXJhYmxlOiEwLGdldDp0W25dfSl9LGEuZz1mdW5jdGlvbigpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBnbG9iYWxUaGlzKXJldHVybiBnbG9iYWxUaGlzO3RyeXtyZXR1cm4gdGhpc3x8bmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKX1jYXRjaChlKXtpZihcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93KXJldHVybiB3aW5kb3d9fSgpLGEubz0oZSx0KT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCksYS5yPWU9PntcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6XCJNb2R1bGVcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSxhLm5tZD1lPT4oZS5wYXRocz1bXSxlLmNoaWxkcmVufHwoZS5jaGlsZHJlbj1bXSksZSk7dmFyIGk9YSgzNDEpLGw9dDtmb3IodmFyIHMgaW4gaSlsW3NdPWlbc107aS5fX2VzTW9kdWxlJiZPYmplY3QuZGVmaW5lUHJvcGVydHkobCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0sMTk4OihlLHQsbik9Pnt2YXIgcj1OYU4sbz1cIltvYmplY3QgU3ltYm9sXVwiLGE9L15cXHMrfFxccyskL2csaT0vXlstK10weFswLTlhLWZdKyQvaSxsPS9eMGJbMDFdKyQvaSxzPS9eMG9bMC03XSskL2ksYz1wYXJzZUludCx1PVwib2JqZWN0XCI9PXR5cGVvZiBuLmcmJm4uZyYmbi5nLk9iamVjdD09PU9iamVjdCYmbi5nLGQ9XCJvYmplY3RcIj09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLHA9dXx8ZHx8RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpLGY9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxoPU1hdGgubWF4LGc9TWF0aC5taW4sdj1mdW5jdGlvbigpe3JldHVybiBwLkRhdGUubm93KCl9O2Z1bmN0aW9uIEMoZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuISFlJiYoXCJvYmplY3RcIj09dHx8XCJmdW5jdGlvblwiPT10KX1mdW5jdGlvbiBtKGUpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXJldHVybiBlO2lmKGZ1bmN0aW9uKGUpe3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiBlfHxmdW5jdGlvbihlKXtyZXR1cm4hIWUmJlwib2JqZWN0XCI9PXR5cGVvZiBlfShlKSYmZi5jYWxsKGUpPT1vfShlKSlyZXR1cm4gcjtpZihDKGUpKXt2YXIgdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnZhbHVlT2Y/ZS52YWx1ZU9mKCk6ZTtlPUModCk/dCtcIlwiOnR9aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpcmV0dXJuIDA9PT1lP2U6K2U7ZT1lLnJlcGxhY2UoYSxcIlwiKTt2YXIgbj1sLnRlc3QoZSk7cmV0dXJuIG58fHMudGVzdChlKT9jKGUuc2xpY2UoMiksbj8yOjgpOmkudGVzdChlKT9yOitlfWUuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7dmFyIHIsbyxhLGksbCxzLGM9MCx1PSExLGQ9ITEscD0hMDtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBhIGZ1bmN0aW9uXCIpO2Z1bmN0aW9uIGYodCl7dmFyIG49cixhPW87cmV0dXJuIHI9bz12b2lkIDAsYz10LGk9ZS5hcHBseShhLG4pfWZ1bmN0aW9uIHcoZSl7dmFyIG49ZS1zO3JldHVybiB2b2lkIDA9PT1zfHxuPj10fHxuPDB8fGQmJmUtYz49YX1mdW5jdGlvbiBiKCl7dmFyIGU9digpO2lmKHcoZSkpcmV0dXJuIHkoZSk7bD1zZXRUaW1lb3V0KGIsZnVuY3Rpb24oZSl7dmFyIG49dC0oZS1zKTtyZXR1cm4gZD9nKG4sYS0oZS1jKSk6bn0oZSkpfWZ1bmN0aW9uIHkoZSl7cmV0dXJuIGw9dm9pZCAwLHAmJnI/ZihlKToocj1vPXZvaWQgMCxpKX1mdW5jdGlvbiB4KCl7dmFyIGU9digpLG49dyhlKTtpZihyPWFyZ3VtZW50cyxvPXRoaXMscz1lLG4pe2lmKHZvaWQgMD09PWwpcmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBjPWUsbD1zZXRUaW1lb3V0KGIsdCksdT9mKGUpOml9KHMpO2lmKGQpcmV0dXJuIGw9c2V0VGltZW91dChiLHQpLGYocyl9cmV0dXJuIHZvaWQgMD09PWwmJihsPXNldFRpbWVvdXQoYix0KSksaX1yZXR1cm4gdD1tKHQpfHwwLEMobikmJih1PSEhbi5sZWFkaW5nLGE9KGQ9XCJtYXhXYWl0XCJpbiBuKT9oKG0obi5tYXhXYWl0KXx8MCx0KTphLHA9XCJ0cmFpbGluZ1wiaW4gbj8hIW4udHJhaWxpbmc6cCkseC5jYW5jZWw9ZnVuY3Rpb24oKXt2b2lkIDAhPT1sJiZjbGVhclRpbWVvdXQobCksYz0wLHI9cz1vPWw9dm9pZCAwfSx4LmZsdXNoPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PWw/aTp5KHYoKSl9LHh9fSw1MjU6ZT0+e1widXNlIHN0cmljdFwiO3ZhciB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsbj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHI9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt0cnl7aWYoIU9iamVjdC5hc3NpZ24pcmV0dXJuITE7dmFyIGU9bmV3IFN0cmluZyhcImFiY1wiKTtpZihlWzVdPVwiZGVcIixcIjVcIj09PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpWzBdKXJldHVybiExO2Zvcih2YXIgdD17fSxuPTA7bjwxMDtuKyspdFtcIl9cIitTdHJpbmcuZnJvbUNoYXJDb2RlKG4pXT1uO2lmKFwiMDEyMzQ1Njc4OVwiIT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModCkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pKS5qb2luKFwiXCIpKXJldHVybiExO3ZhciByPXt9O3JldHVyblwiYWJjZGVmZ2hpamtsbW5vcHFyc3RcIi5zcGxpdChcIlwiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtyW2VdPWV9KSksXCJhYmNkZWZnaGlqa2xtbm9wcXJzdFwiPT09T2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxyKSkuam9pbihcIlwiKX1jYXRjaChlKXtyZXR1cm4hMX19KCk/T2JqZWN0LmFzc2lnbjpmdW5jdGlvbihlLG8pe2Zvcih2YXIgYSxpLGw9ZnVuY3Rpb24oZSl7aWYobnVsbD09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWRcIik7cmV0dXJuIE9iamVjdChlKX0oZSkscz0xO3M8YXJndW1lbnRzLmxlbmd0aDtzKyspe2Zvcih2YXIgYyBpbiBhPU9iamVjdChhcmd1bWVudHNbc10pKW4uY2FsbChhLGMpJiYobFtjXT1hW2NdKTtpZih0KXtpPXQoYSk7Zm9yKHZhciB1PTA7dTxpLmxlbmd0aDt1Kyspci5jYWxsKGEsaVt1XSkmJihsW2lbdV1dPWFbaVt1XV0pfX1yZXR1cm4gbH19LDcwMjooZSx0KT0+e1widXNlIHN0cmljdFwiO3ZhciBuPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvcixyPW4/U3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIik6NjAxMDMsbz1uP1N5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIik6NjAxMDYsYT1uP1N5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKTo2MDEwNyxpPW4/U3ltYm9sLmZvcihcInJlYWN0LnN0cmljdF9tb2RlXCIpOjYwMTA4LGw9bj9TeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIik6NjAxMTQscz1uP1N5bWJvbC5mb3IoXCJyZWFjdC5wcm92aWRlclwiKTo2MDEwOSxjPW4/U3ltYm9sLmZvcihcInJlYWN0LmNvbnRleHRcIik6NjAxMTAsdT1uP1N5bWJvbC5mb3IoXCJyZWFjdC5hc3luY19tb2RlXCIpOjYwMTExLGQ9bj9TeW1ib2wuZm9yKFwicmVhY3QuY29uY3VycmVudF9tb2RlXCIpOjYwMTExLHA9bj9TeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIik6NjAxMTIsZj1uP1N5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZVwiKTo2MDExMyxoPW4/U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlX2xpc3RcIik6NjAxMjAsZz1uP1N5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpOjYwMTE1LHY9bj9TeW1ib2wuZm9yKFwicmVhY3QubGF6eVwiKTo2MDExNixDPW4/U3ltYm9sLmZvcihcInJlYWN0LmJsb2NrXCIpOjYwMTIxLG09bj9TeW1ib2wuZm9yKFwicmVhY3QuZnVuZGFtZW50YWxcIik6NjAxMTcsdz1uP1N5bWJvbC5mb3IoXCJyZWFjdC5yZXNwb25kZXJcIik6NjAxMTgsYj1uP1N5bWJvbC5mb3IoXCJyZWFjdC5zY29wZVwiKTo2MDExOTtmdW5jdGlvbiB5KGUpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBlJiZudWxsIT09ZSl7dmFyIHQ9ZS4kJHR5cGVvZjtzd2l0Y2godCl7Y2FzZSByOnN3aXRjaChlPWUudHlwZSl7Y2FzZSB1OmNhc2UgZDpjYXNlIGE6Y2FzZSBsOmNhc2UgaTpjYXNlIGY6cmV0dXJuIGU7ZGVmYXVsdDpzd2l0Y2goZT1lJiZlLiQkdHlwZW9mKXtjYXNlIGM6Y2FzZSBwOmNhc2UgdjpjYXNlIGc6Y2FzZSBzOnJldHVybiBlO2RlZmF1bHQ6cmV0dXJuIHR9fWNhc2UgbzpyZXR1cm4gdH19fWZ1bmN0aW9uIHgoZSl7cmV0dXJuIHkoZSk9PT1kfXQuRm9yd2FyZFJlZj1wLHQuaXNWYWxpZEVsZW1lbnRUeXBlPWZ1bmN0aW9uKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlfHxlPT09YXx8ZT09PWR8fGU9PT1sfHxlPT09aXx8ZT09PWZ8fGU9PT1ofHxcIm9iamVjdFwiPT10eXBlb2YgZSYmbnVsbCE9PWUmJihlLiQkdHlwZW9mPT09dnx8ZS4kJHR5cGVvZj09PWd8fGUuJCR0eXBlb2Y9PT1zfHxlLiQkdHlwZW9mPT09Y3x8ZS4kJHR5cGVvZj09PXB8fGUuJCR0eXBlb2Y9PT1tfHxlLiQkdHlwZW9mPT09d3x8ZS4kJHR5cGVvZj09PWJ8fGUuJCR0eXBlb2Y9PT1DKX19LDE4NTooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPW4oNzAyKX0sNTM1OihlLHQsbik9PntcInVzZSBzdHJpY3RcIjt2YXIgcj1uKDUyNSksbz02MDEwMyxhPTYwMTA2O3QuRnJhZ21lbnQ9NjAxMDcsdC5TdHJpY3RNb2RlPTYwMTA4LHQuUHJvZmlsZXI9NjAxMTQ7dmFyIGk9NjAxMDksbD02MDExMCxzPTYwMTEyO3QuU3VzcGVuc2U9NjAxMTM7dmFyIGM9NjAxMTUsdT02MDExNjtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3Ipe3ZhciBkPVN5bWJvbC5mb3I7bz1kKFwicmVhY3QuZWxlbWVudFwiKSxhPWQoXCJyZWFjdC5wb3J0YWxcIiksdC5GcmFnbWVudD1kKFwicmVhY3QuZnJhZ21lbnRcIiksdC5TdHJpY3RNb2RlPWQoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKSx0LlByb2ZpbGVyPWQoXCJyZWFjdC5wcm9maWxlclwiKSxpPWQoXCJyZWFjdC5wcm92aWRlclwiKSxsPWQoXCJyZWFjdC5jb250ZXh0XCIpLHM9ZChcInJlYWN0LmZvcndhcmRfcmVmXCIpLHQuU3VzcGVuc2U9ZChcInJlYWN0LnN1c3BlbnNlXCIpLGM9ZChcInJlYWN0Lm1lbW9cIiksdT1kKFwicmVhY3QubGF6eVwiKX12YXIgcD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcjtmdW5jdGlvbiBmKGUpe2Zvcih2YXIgdD1cImh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9lcnJvci1kZWNvZGVyLmh0bWw/aW52YXJpYW50PVwiK2Usbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdCs9XCImYXJnc1tdPVwiK2VuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbbl0pO3JldHVyblwiTWluaWZpZWQgUmVhY3QgZXJyb3IgI1wiK2UrXCI7IHZpc2l0IFwiK3QrXCIgZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLlwifXZhciBoPXtpc01vdW50ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZW5xdWV1ZUZvcmNlVXBkYXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlUmVwbGFjZVN0YXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlU2V0U3RhdGU6ZnVuY3Rpb24oKXt9fSxnPXt9O2Z1bmN0aW9uIHYoZSx0LG4pe3RoaXMucHJvcHM9ZSx0aGlzLmNvbnRleHQ9dCx0aGlzLnJlZnM9Zyx0aGlzLnVwZGF0ZXI9bnx8aH1mdW5jdGlvbiBDKCl7fWZ1bmN0aW9uIG0oZSx0LG4pe3RoaXMucHJvcHM9ZSx0aGlzLmNvbnRleHQ9dCx0aGlzLnJlZnM9Zyx0aGlzLnVwZGF0ZXI9bnx8aH12LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXt9LHYucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKGUsdCl7aWYoXCJvYmplY3RcIiE9dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJm51bGwhPWUpdGhyb3cgRXJyb3IoZig4NSkpO3RoaXMudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUodGhpcyxlLHQsXCJzZXRTdGF0ZVwiKX0sdi5wcm90b3R5cGUuZm9yY2VVcGRhdGU9ZnVuY3Rpb24oZSl7dGhpcy51cGRhdGVyLmVucXVldWVGb3JjZVVwZGF0ZSh0aGlzLGUsXCJmb3JjZVVwZGF0ZVwiKX0sQy5wcm90b3R5cGU9di5wcm90b3R5cGU7dmFyIHc9bS5wcm90b3R5cGU9bmV3IEM7dy5jb25zdHJ1Y3Rvcj1tLHIodyx2LnByb3RvdHlwZSksdy5pc1B1cmVSZWFjdENvbXBvbmVudD0hMDt2YXIgYj17Y3VycmVudDpudWxsfSx5PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkseD17a2V5OiEwLHJlZjohMCxfX3NlbGY6ITAsX19zb3VyY2U6ITB9O2Z1bmN0aW9uIGsoZSx0LG4pe3ZhciByLGE9e30saT1udWxsLGw9bnVsbDtpZihudWxsIT10KWZvcihyIGluIHZvaWQgMCE9PXQucmVmJiYobD10LnJlZiksdm9pZCAwIT09dC5rZXkmJihpPVwiXCIrdC5rZXkpLHQpeS5jYWxsKHQscikmJiF4Lmhhc093blByb3BlcnR5KHIpJiYoYVtyXT10W3JdKTt2YXIgcz1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PXMpYS5jaGlsZHJlbj1uO2Vsc2UgaWYoMTxzKXtmb3IodmFyIGM9QXJyYXkocyksdT0wO3U8czt1KyspY1t1XT1hcmd1bWVudHNbdSsyXTthLmNoaWxkcmVuPWN9aWYoZSYmZS5kZWZhdWx0UHJvcHMpZm9yKHIgaW4gcz1lLmRlZmF1bHRQcm9wcyl2b2lkIDA9PT1hW3JdJiYoYVtyXT1zW3JdKTtyZXR1cm57JCR0eXBlb2Y6byx0eXBlOmUsa2V5OmkscmVmOmwscHJvcHM6YSxfb3duZXI6Yi5jdXJyZW50fX1mdW5jdGlvbiBTKGUpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmZS4kJHR5cGVvZj09PW99dmFyIE89L1xcLysvZztmdW5jdGlvbiBNKGUsdCl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lJiZudWxsIT1lLmtleT9mdW5jdGlvbihlKXt2YXIgdD17XCI9XCI6XCI9MFwiLFwiOlwiOlwiPTJcIn07cmV0dXJuXCIkXCIrZS5yZXBsYWNlKC9bPTpdL2csKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSkpfShcIlwiK2Uua2V5KTp0LnRvU3RyaW5nKDM2KX1mdW5jdGlvbiBMKGUsdCxuLHIsaSl7dmFyIGw9dHlwZW9mIGU7XCJ1bmRlZmluZWRcIiE9PWwmJlwiYm9vbGVhblwiIT09bHx8KGU9bnVsbCk7dmFyIHM9ITE7aWYobnVsbD09PWUpcz0hMDtlbHNlIHN3aXRjaChsKXtjYXNlXCJzdHJpbmdcIjpjYXNlXCJudW1iZXJcIjpzPSEwO2JyZWFrO2Nhc2VcIm9iamVjdFwiOnN3aXRjaChlLiQkdHlwZW9mKXtjYXNlIG86Y2FzZSBhOnM9ITB9fWlmKHMpcmV0dXJuIGk9aShzPWUpLGU9XCJcIj09PXI/XCIuXCIrTShzLDApOnIsQXJyYXkuaXNBcnJheShpKT8obj1cIlwiLG51bGwhPWUmJihuPWUucmVwbGFjZShPLFwiJCYvXCIpK1wiL1wiKSxMKGksdCxuLFwiXCIsKGZ1bmN0aW9uKGUpe3JldHVybiBlfSkpKTpudWxsIT1pJiYoUyhpKSYmKGk9ZnVuY3Rpb24oZSx0KXtyZXR1cm57JCR0eXBlb2Y6byx0eXBlOmUudHlwZSxrZXk6dCxyZWY6ZS5yZWYscHJvcHM6ZS5wcm9wcyxfb3duZXI6ZS5fb3duZXJ9fShpLG4rKCFpLmtleXx8cyYmcy5rZXk9PT1pLmtleT9cIlwiOihcIlwiK2kua2V5KS5yZXBsYWNlKE8sXCIkJi9cIikrXCIvXCIpK2UpKSx0LnB1c2goaSkpLDE7aWYocz0wLHI9XCJcIj09PXI/XCIuXCI6citcIjpcIixBcnJheS5pc0FycmF5KGUpKWZvcih2YXIgYz0wO2M8ZS5sZW5ndGg7YysrKXt2YXIgdT1yK00obD1lW2NdLGMpO3MrPUwobCx0LG4sdSxpKX1lbHNlIGlmKHU9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PT1lfHxcIm9iamVjdFwiIT10eXBlb2YgZT9udWxsOlwiZnVuY3Rpb25cIj09dHlwZW9mKGU9cCYmZVtwXXx8ZVtcIkBAaXRlcmF0b3JcIl0pP2U6bnVsbH0oZSksXCJmdW5jdGlvblwiPT10eXBlb2YgdSlmb3IoZT11LmNhbGwoZSksYz0wOyEobD1lLm5leHQoKSkuZG9uZTspcys9TChsPWwudmFsdWUsdCxuLHU9citNKGwsYysrKSxpKTtlbHNlIGlmKFwib2JqZWN0XCI9PT1sKXRocm93IHQ9XCJcIitlLEVycm9yKGYoMzEsXCJbb2JqZWN0IE9iamVjdF1cIj09PXQ/XCJvYmplY3Qgd2l0aCBrZXlzIHtcIitPYmplY3Qua2V5cyhlKS5qb2luKFwiLCBcIikrXCJ9XCI6dCkpO3JldHVybiBzfWZ1bmN0aW9uIF8oZSx0LG4pe2lmKG51bGw9PWUpcmV0dXJuIGU7dmFyIHI9W10sbz0wO3JldHVybiBMKGUscixcIlwiLFwiXCIsKGZ1bmN0aW9uKGUpe3JldHVybiB0LmNhbGwobixlLG8rKyl9KSkscn1mdW5jdGlvbiBQKGUpe2lmKC0xPT09ZS5fc3RhdHVzKXt2YXIgdD1lLl9yZXN1bHQ7dD10KCksZS5fc3RhdHVzPTAsZS5fcmVzdWx0PXQsdC50aGVuKChmdW5jdGlvbih0KXswPT09ZS5fc3RhdHVzJiYodD10LmRlZmF1bHQsZS5fc3RhdHVzPTEsZS5fcmVzdWx0PXQpfSksKGZ1bmN0aW9uKHQpezA9PT1lLl9zdGF0dXMmJihlLl9zdGF0dXM9MixlLl9yZXN1bHQ9dCl9KSl9aWYoMT09PWUuX3N0YXR1cylyZXR1cm4gZS5fcmVzdWx0O3Rocm93IGUuX3Jlc3VsdH12YXIgRT17Y3VycmVudDpudWxsfTtmdW5jdGlvbiBqKCl7dmFyIGU9RS5jdXJyZW50O2lmKG51bGw9PT1lKXRocm93IEVycm9yKGYoMzIxKSk7cmV0dXJuIGV9dmFyIFI9e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6RSxSZWFjdEN1cnJlbnRCYXRjaENvbmZpZzp7dHJhbnNpdGlvbjowfSxSZWFjdEN1cnJlbnRPd25lcjpiLElzU29tZVJlbmRlcmVyQWN0aW5nOntjdXJyZW50OiExfSxhc3NpZ246cn07dC5DaGlsZHJlbj17bWFwOl8sZm9yRWFjaDpmdW5jdGlvbihlLHQsbil7XyhlLChmdW5jdGlvbigpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksbil9LGNvdW50OmZ1bmN0aW9uKGUpe3ZhciB0PTA7cmV0dXJuIF8oZSwoZnVuY3Rpb24oKXt0Kyt9KSksdH0sdG9BcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gXyhlLChmdW5jdGlvbihlKXtyZXR1cm4gZX0pKXx8W119LG9ubHk6ZnVuY3Rpb24oZSl7aWYoIVMoZSkpdGhyb3cgRXJyb3IoZigxNDMpKTtyZXR1cm4gZX19LHQuQ29tcG9uZW50PXYsdC5QdXJlQ29tcG9uZW50PW0sdC5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRD1SLHQuY2xvbmVFbGVtZW50PWZ1bmN0aW9uKGUsdCxuKXtpZihudWxsPT1lKXRocm93IEVycm9yKGYoMjY3LGUpKTt2YXIgYT1yKHt9LGUucHJvcHMpLGk9ZS5rZXksbD1lLnJlZixzPWUuX293bmVyO2lmKG51bGwhPXQpe2lmKHZvaWQgMCE9PXQucmVmJiYobD10LnJlZixzPWIuY3VycmVudCksdm9pZCAwIT09dC5rZXkmJihpPVwiXCIrdC5rZXkpLGUudHlwZSYmZS50eXBlLmRlZmF1bHRQcm9wcyl2YXIgYz1lLnR5cGUuZGVmYXVsdFByb3BzO2Zvcih1IGluIHQpeS5jYWxsKHQsdSkmJiF4Lmhhc093blByb3BlcnR5KHUpJiYoYVt1XT12b2lkIDA9PT10W3VdJiZ2b2lkIDAhPT1jP2NbdV06dFt1XSl9dmFyIHU9YXJndW1lbnRzLmxlbmd0aC0yO2lmKDE9PT11KWEuY2hpbGRyZW49bjtlbHNlIGlmKDE8dSl7Yz1BcnJheSh1KTtmb3IodmFyIGQ9MDtkPHU7ZCsrKWNbZF09YXJndW1lbnRzW2QrMl07YS5jaGlsZHJlbj1jfXJldHVybnskJHR5cGVvZjpvLHR5cGU6ZS50eXBlLGtleTppLHJlZjpsLHByb3BzOmEsX293bmVyOnN9fSx0LmNyZWF0ZUNvbnRleHQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9bnVsbCksKGU9eyQkdHlwZW9mOmwsX2NhbGN1bGF0ZUNoYW5nZWRCaXRzOnQsX2N1cnJlbnRWYWx1ZTplLF9jdXJyZW50VmFsdWUyOmUsX3RocmVhZENvdW50OjAsUHJvdmlkZXI6bnVsbCxDb25zdW1lcjpudWxsfSkuUHJvdmlkZXI9eyQkdHlwZW9mOmksX2NvbnRleHQ6ZX0sZS5Db25zdW1lcj1lfSx0LmNyZWF0ZUVsZW1lbnQ9ayx0LmNyZWF0ZUZhY3Rvcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9ay5iaW5kKG51bGwsZSk7cmV0dXJuIHQudHlwZT1lLHR9LHQuY3JlYXRlUmVmPWZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bnVsbH19LHQuZm9yd2FyZFJlZj1mdW5jdGlvbihlKXtyZXR1cm57JCR0eXBlb2Y6cyxyZW5kZXI6ZX19LHQuaXNWYWxpZEVsZW1lbnQ9Uyx0Lmxhenk9ZnVuY3Rpb24oZSl7cmV0dXJueyQkdHlwZW9mOnUsX3BheWxvYWQ6e19zdGF0dXM6LTEsX3Jlc3VsdDplfSxfaW5pdDpQfX0sdC5tZW1vPWZ1bmN0aW9uKGUsdCl7cmV0dXJueyQkdHlwZW9mOmMsdHlwZTplLGNvbXBhcmU6dm9pZCAwPT09dD9udWxsOnR9fSx0LnVzZUNhbGxiYWNrPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGooKS51c2VDYWxsYmFjayhlLHQpfSx0LnVzZUNvbnRleHQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaigpLnVzZUNvbnRleHQoZSx0KX0sdC51c2VEZWJ1Z1ZhbHVlPWZ1bmN0aW9uKCl7fSx0LnVzZUVmZmVjdD1mdW5jdGlvbihlLHQpe3JldHVybiBqKCkudXNlRWZmZWN0KGUsdCl9LHQudXNlSW1wZXJhdGl2ZUhhbmRsZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGooKS51c2VJbXBlcmF0aXZlSGFuZGxlKGUsdCxuKX0sdC51c2VMYXlvdXRFZmZlY3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaigpLnVzZUxheW91dEVmZmVjdChlLHQpfSx0LnVzZU1lbW89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaigpLnVzZU1lbW8oZSx0KX0sdC51c2VSZWR1Y2VyPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gaigpLnVzZVJlZHVjZXIoZSx0LG4pfSx0LnVzZVJlZj1mdW5jdGlvbihlKXtyZXR1cm4gaigpLnVzZVJlZihlKX0sdC51c2VTdGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gaigpLnVzZVN0YXRlKGUpfSx0LnZlcnNpb249XCIxNy4wLjJcIn0sMzc4OihlLHQsbik9PntcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9big1MzUpfSw5MjE6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24ucih0KSxuLmQodCx7U2VydmVyU3R5bGVTaGVldDooKT0+ZnQsU3R5bGVTaGVldENvbnN1bWVyOigpPT5ndCxTdHlsZVNoZWV0Q29udGV4dDooKT0+aHQsU3R5bGVTaGVldE1hbmFnZXI6KCk9PnZ0LFRoZW1lQ29uc3VtZXI6KCk9PmR0LFRoZW1lQ29udGV4dDooKT0+dXQsVGhlbWVQcm92aWRlcjooKT0+cHQsX19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0hBVU5URURfQllfU1BPT0tZX0dIT1NUUzooKT0+TXQsY3JlYXRlR2xvYmFsU3R5bGU6KCk9Pnh0LGNzczooKT0+VGUsZGVmYXVsdDooKT0+THQsaXNTdHlsZWRDb21wb25lbnQ6KCk9Pk4sa2V5ZnJhbWVzOigpPT5TdCx3aXRoVGhlbWU6KCk9Pk90fSk7dmFyIHI9big5NDYpLG89bi5uKHIpLGE9bigyNDYpLGk9bi5uKGEpLGw9bigzNzgpO2NvbnN0IHM9e2FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OjEsYm9yZGVySW1hZ2VPdXRzZXQ6MSxib3JkZXJJbWFnZVNsaWNlOjEsYm9yZGVySW1hZ2VXaWR0aDoxLGJveEZsZXg6MSxib3hGbGV4R3JvdXA6MSxib3hPcmRpbmFsR3JvdXA6MSxjb2x1bW5Db3VudDoxLGNvbHVtbnM6MSxmbGV4OjEsZmxleEdyb3c6MSxmbGV4UG9zaXRpdmU6MSxmbGV4U2hyaW5rOjEsZmxleE5lZ2F0aXZlOjEsZmxleE9yZGVyOjEsZ3JpZFJvdzoxLGdyaWRSb3dFbmQ6MSxncmlkUm93U3BhbjoxLGdyaWRSb3dTdGFydDoxLGdyaWRDb2x1bW46MSxncmlkQ29sdW1uRW5kOjEsZ3JpZENvbHVtblNwYW46MSxncmlkQ29sdW1uU3RhcnQ6MSxtc0dyaWRSb3c6MSxtc0dyaWRSb3dTcGFuOjEsbXNHcmlkQ29sdW1uOjEsbXNHcmlkQ29sdW1uU3BhbjoxLGZvbnRXZWlnaHQ6MSxsaW5lSGVpZ2h0OjEsb3BhY2l0eToxLG9yZGVyOjEsb3JwaGFuczoxLHRhYlNpemU6MSx3aWRvd3M6MSx6SW5kZXg6MSx6b29tOjEsV2Via2l0TGluZUNsYW1wOjEsZmlsbE9wYWNpdHk6MSxmbG9vZE9wYWNpdHk6MSxzdG9wT3BhY2l0eToxLHN0cm9rZURhc2hhcnJheToxLHN0cm9rZURhc2hvZmZzZXQ6MSxzdHJva2VNaXRlcmxpbWl0OjEsc3Ryb2tlT3BhY2l0eToxLHN0cm9rZVdpZHRoOjF9O3ZhciBjPW4oMTg1KSx1PU51bWJlci5pc05hTnx8ZnVuY3Rpb24oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGUmJmUhPWV9O2Z1bmN0aW9uIGQoZSx0KXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKHI9ZVtuXSxvPXRbbl0sIShyPT09b3x8dShyKSYmdShvKSkpcmV0dXJuITE7dmFyIHIsbztyZXR1cm4hMH1jb25zdCBwPWZ1bmN0aW9uKGUsdCl7dmFyIG47dm9pZCAwPT09dCYmKHQ9ZCk7dmFyIHIsbz1bXSxhPSExO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgaT1bXSxsPTA7bDxhcmd1bWVudHMubGVuZ3RoO2wrKylpW2xdPWFyZ3VtZW50c1tsXTtyZXR1cm4gYSYmbj09PXRoaXMmJnQoaSxvKXx8KHI9ZS5hcHBseSh0aGlzLGkpLGE9ITAsbj10aGlzLG89aSkscn19O3ZhciBmPS9eKChjaGlsZHJlbnxkYW5nZXJvdXNseVNldElubmVySFRNTHxrZXl8cmVmfGF1dG9Gb2N1c3xkZWZhdWx0VmFsdWV8ZGVmYXVsdENoZWNrZWR8aW5uZXJIVE1MfHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ3xzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmd8dmFsdWVMaW5rfGFjY2VwdHxhY2NlcHRDaGFyc2V0fGFjY2Vzc0tleXxhY3Rpb258YWxsb3d8YWxsb3dVc2VyTWVkaWF8YWxsb3dQYXltZW50UmVxdWVzdHxhbGxvd0Z1bGxTY3JlZW58YWxsb3dUcmFuc3BhcmVuY3l8YWx0fGFzeW5jfGF1dG9Db21wbGV0ZXxhdXRvUGxheXxjYXB0dXJlfGNlbGxQYWRkaW5nfGNlbGxTcGFjaW5nfGNoYWxsZW5nZXxjaGFyU2V0fGNoZWNrZWR8Y2l0ZXxjbGFzc0lEfGNsYXNzTmFtZXxjb2xzfGNvbFNwYW58Y29udGVudHxjb250ZW50RWRpdGFibGV8Y29udGV4dE1lbnV8Y29udHJvbHN8Y29udHJvbHNMaXN0fGNvb3Jkc3xjcm9zc09yaWdpbnxkYXRhfGRhdGVUaW1lfGRlY29kaW5nfGRlZmF1bHR8ZGVmZXJ8ZGlyfGRpc2FibGVkfGRpc2FibGVQaWN0dXJlSW5QaWN0dXJlfGRvd25sb2FkfGRyYWdnYWJsZXxlbmNUeXBlfGZvcm18Zm9ybUFjdGlvbnxmb3JtRW5jVHlwZXxmb3JtTWV0aG9kfGZvcm1Ob1ZhbGlkYXRlfGZvcm1UYXJnZXR8ZnJhbWVCb3JkZXJ8aGVhZGVyc3xoZWlnaHR8aGlkZGVufGhpZ2h8aHJlZnxocmVmTGFuZ3xodG1sRm9yfGh0dHBFcXVpdnxpZHxpbnB1dE1vZGV8aW50ZWdyaXR5fGlzfGtleVBhcmFtc3xrZXlUeXBlfGtpbmR8bGFiZWx8bGFuZ3xsaXN0fGxvYWRpbmd8bG9vcHxsb3d8bWFyZ2luSGVpZ2h0fG1hcmdpbldpZHRofG1heHxtYXhMZW5ndGh8bWVkaWF8bWVkaWFHcm91cHxtZXRob2R8bWlufG1pbkxlbmd0aHxtdWx0aXBsZXxtdXRlZHxuYW1lfG5vbmNlfG5vVmFsaWRhdGV8b3BlbnxvcHRpbXVtfHBhdHRlcm58cGxhY2Vob2xkZXJ8cGxheXNJbmxpbmV8cG9zdGVyfHByZWxvYWR8cHJvZmlsZXxyYWRpb0dyb3VwfHJlYWRPbmx5fHJlZmVycmVyUG9saWN5fHJlbHxyZXF1aXJlZHxyZXZlcnNlZHxyb2xlfHJvd3N8cm93U3BhbnxzYW5kYm94fHNjb3BlfHNjb3BlZHxzY3JvbGxpbmd8c2VhbWxlc3N8c2VsZWN0ZWR8c2hhcGV8c2l6ZXxzaXplc3xzbG90fHNwYW58c3BlbGxDaGVja3xzcmN8c3JjRG9jfHNyY0xhbmd8c3JjU2V0fHN0YXJ0fHN0ZXB8c3R5bGV8c3VtbWFyeXx0YWJJbmRleHx0YXJnZXR8dGl0bGV8dHlwZXx1c2VNYXB8dmFsdWV8d2lkdGh8d21vZGV8d3JhcHxhYm91dHxkYXRhdHlwZXxpbmxpc3R8cHJlZml4fHByb3BlcnR5fHJlc291cmNlfHR5cGVvZnx2b2NhYnxhdXRvQ2FwaXRhbGl6ZXxhdXRvQ29ycmVjdHxhdXRvU2F2ZXxjb2xvcnxpbmVydHxpdGVtUHJvcHxpdGVtU2NvcGV8aXRlbVR5cGV8aXRlbUlEfGl0ZW1SZWZ8b258cmVzdWx0c3xzZWN1cml0eXx1bnNlbGVjdGFibGV8YWNjZW50SGVpZ2h0fGFjY3VtdWxhdGV8YWRkaXRpdmV8YWxpZ25tZW50QmFzZWxpbmV8YWxsb3dSZW9yZGVyfGFscGhhYmV0aWN8YW1wbGl0dWRlfGFyYWJpY0Zvcm18YXNjZW50fGF0dHJpYnV0ZU5hbWV8YXR0cmlidXRlVHlwZXxhdXRvUmV2ZXJzZXxhemltdXRofGJhc2VGcmVxdWVuY3l8YmFzZWxpbmVTaGlmdHxiYXNlUHJvZmlsZXxiYm94fGJlZ2lufGJpYXN8Ynl8Y2FsY01vZGV8Y2FwSGVpZ2h0fGNsaXB8Y2xpcFBhdGhVbml0c3xjbGlwUGF0aHxjbGlwUnVsZXxjb2xvckludGVycG9sYXRpb258Y29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyc3xjb2xvclByb2ZpbGV8Y29sb3JSZW5kZXJpbmd8Y29udGVudFNjcmlwdFR5cGV8Y29udGVudFN0eWxlVHlwZXxjdXJzb3J8Y3h8Y3l8ZHxkZWNlbGVyYXRlfGRlc2NlbnR8ZGlmZnVzZUNvbnN0YW50fGRpcmVjdGlvbnxkaXNwbGF5fGRpdmlzb3J8ZG9taW5hbnRCYXNlbGluZXxkdXJ8ZHh8ZHl8ZWRnZU1vZGV8ZWxldmF0aW9ufGVuYWJsZUJhY2tncm91bmR8ZW5kfGV4cG9uZW50fGV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWR8ZmlsbHxmaWxsT3BhY2l0eXxmaWxsUnVsZXxmaWx0ZXJ8ZmlsdGVyUmVzfGZpbHRlclVuaXRzfGZsb29kQ29sb3J8Zmxvb2RPcGFjaXR5fGZvY3VzYWJsZXxmb250RmFtaWx5fGZvbnRTaXplfGZvbnRTaXplQWRqdXN0fGZvbnRTdHJldGNofGZvbnRTdHlsZXxmb250VmFyaWFudHxmb250V2VpZ2h0fGZvcm1hdHxmcm9tfGZyfGZ4fGZ5fGcxfGcyfGdseXBoTmFtZXxnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbHxnbHlwaE9yaWVudGF0aW9uVmVydGljYWx8Z2x5cGhSZWZ8Z3JhZGllbnRUcmFuc2Zvcm18Z3JhZGllbnRVbml0c3xoYW5naW5nfGhvcml6QWR2WHxob3Jpek9yaWdpblh8aWRlb2dyYXBoaWN8aW1hZ2VSZW5kZXJpbmd8aW58aW4yfGludGVyY2VwdHxrfGsxfGsyfGszfGs0fGtlcm5lbE1hdHJpeHxrZXJuZWxVbml0TGVuZ3RofGtlcm5pbmd8a2V5UG9pbnRzfGtleVNwbGluZXN8a2V5VGltZXN8bGVuZ3RoQWRqdXN0fGxldHRlclNwYWNpbmd8bGlnaHRpbmdDb2xvcnxsaW1pdGluZ0NvbmVBbmdsZXxsb2NhbHxtYXJrZXJFbmR8bWFya2VyTWlkfG1hcmtlclN0YXJ0fG1hcmtlckhlaWdodHxtYXJrZXJVbml0c3xtYXJrZXJXaWR0aHxtYXNrfG1hc2tDb250ZW50VW5pdHN8bWFza1VuaXRzfG1hdGhlbWF0aWNhbHxtb2RlfG51bU9jdGF2ZXN8b2Zmc2V0fG9wYWNpdHl8b3BlcmF0b3J8b3JkZXJ8b3JpZW50fG9yaWVudGF0aW9ufG9yaWdpbnxvdmVyZmxvd3xvdmVybGluZVBvc2l0aW9ufG92ZXJsaW5lVGhpY2tuZXNzfHBhbm9zZTF8cGFpbnRPcmRlcnxwYXRoTGVuZ3RofHBhdHRlcm5Db250ZW50VW5pdHN8cGF0dGVyblRyYW5zZm9ybXxwYXR0ZXJuVW5pdHN8cG9pbnRlckV2ZW50c3xwb2ludHN8cG9pbnRzQXRYfHBvaW50c0F0WXxwb2ludHNBdFp8cHJlc2VydmVBbHBoYXxwcmVzZXJ2ZUFzcGVjdFJhdGlvfHByaW1pdGl2ZVVuaXRzfHJ8cmFkaXVzfHJlZlh8cmVmWXxyZW5kZXJpbmdJbnRlbnR8cmVwZWF0Q291bnR8cmVwZWF0RHVyfHJlcXVpcmVkRXh0ZW5zaW9uc3xyZXF1aXJlZEZlYXR1cmVzfHJlc3RhcnR8cmVzdWx0fHJvdGF0ZXxyeHxyeXxzY2FsZXxzZWVkfHNoYXBlUmVuZGVyaW5nfHNsb3BlfHNwYWNpbmd8c3BlY3VsYXJDb25zdGFudHxzcGVjdWxhckV4cG9uZW50fHNwZWVkfHNwcmVhZE1ldGhvZHxzdGFydE9mZnNldHxzdGREZXZpYXRpb258c3RlbWh8c3RlbXZ8c3RpdGNoVGlsZXN8c3RvcENvbG9yfHN0b3BPcGFjaXR5fHN0cmlrZXRocm91Z2hQb3NpdGlvbnxzdHJpa2V0aHJvdWdoVGhpY2tuZXNzfHN0cmluZ3xzdHJva2V8c3Ryb2tlRGFzaGFycmF5fHN0cm9rZURhc2hvZmZzZXR8c3Ryb2tlTGluZWNhcHxzdHJva2VMaW5lam9pbnxzdHJva2VNaXRlcmxpbWl0fHN0cm9rZU9wYWNpdHl8c3Ryb2tlV2lkdGh8c3VyZmFjZVNjYWxlfHN5c3RlbUxhbmd1YWdlfHRhYmxlVmFsdWVzfHRhcmdldFh8dGFyZ2V0WXx0ZXh0QW5jaG9yfHRleHREZWNvcmF0aW9ufHRleHRSZW5kZXJpbmd8dGV4dExlbmd0aHx0b3x0cmFuc2Zvcm18dTF8dTJ8dW5kZXJsaW5lUG9zaXRpb258dW5kZXJsaW5lVGhpY2tuZXNzfHVuaWNvZGV8dW5pY29kZUJpZGl8dW5pY29kZVJhbmdlfHVuaXRzUGVyRW18dkFscGhhYmV0aWN8dkhhbmdpbmd8dklkZW9ncmFwaGljfHZNYXRoZW1hdGljYWx8dmFsdWVzfHZlY3RvckVmZmVjdHx2ZXJzaW9ufHZlcnRBZHZZfHZlcnRPcmlnaW5YfHZlcnRPcmlnaW5ZfHZpZXdCb3h8dmlld1RhcmdldHx2aXNpYmlsaXR5fHdpZHRoc3x3b3JkU3BhY2luZ3x3cml0aW5nTW9kZXx4fHhIZWlnaHR8eDF8eDJ8eENoYW5uZWxTZWxlY3Rvcnx4bGlua0FjdHVhdGV8eGxpbmtBcmNyb2xlfHhsaW5rSHJlZnx4bGlua1JvbGV8eGxpbmtTaG93fHhsaW5rVGl0bGV8eGxpbmtUeXBlfHhtbEJhc2V8eG1sbnN8eG1sbnNYbGlua3x4bWxMYW5nfHhtbFNwYWNlfHl8eTF8eTJ8eUNoYW5uZWxTZWxlY3Rvcnx6fHpvb21BbmRQYW58Zm9yfGNsYXNzfGF1dG9mb2N1cyl8KChbRGRdW0FhXVtUdF1bQWFdfFtBYV1bUnJdW0lpXVtBYV18eCktLiopKSQvO2NvbnN0IGg9ZnVuY3Rpb24oZSl7dmFyIHQ9e307cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB2b2lkIDA9PT10W25dJiYodFtuXT1lKG4pKSx0W25dfX0oKGZ1bmN0aW9uKGUpe3JldHVybiBmLnRlc3QoZSl8fDExMT09PWUuY2hhckNvZGVBdCgwKSYmMTEwPT09ZS5jaGFyQ29kZUF0KDEpJiZlLmNoYXJDb2RlQXQoMik8OTF9KSk7ZnVuY3Rpb24gZyhlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpfWZ1bmN0aW9uIHYoZSl7cmV0dXJuXCJVbmRlZmluZWRcIj09PWcoZSl9ZnVuY3Rpb24gQyhlKXtyZXR1cm5cIk51bGxcIj09PWcoZSl9ZnVuY3Rpb24gbShlKXtyZXR1cm5cIk9iamVjdFwiPT09ZyhlKSYmKGUuY29uc3RydWN0b3I9PT1PYmplY3QmJk9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PU9iamVjdC5wcm90b3R5cGUpfWZ1bmN0aW9uIHcoZSl7cmV0dXJuXCJBcnJheVwiPT09ZyhlKX1mdW5jdGlvbiBiKGUpe3JldHVyblwiU3ltYm9sXCI9PT1nKGUpfXZhciB5LHgsayxTLE87eT1DLHg9djtmdW5jdGlvbiBNKCl7Zm9yKHZhciBlPTAsdD0wLG49YXJndW1lbnRzLmxlbmd0aDt0PG47dCsrKWUrPWFyZ3VtZW50c1t0XS5sZW5ndGg7dmFyIHI9QXJyYXkoZSksbz0wO2Zvcih0PTA7dDxuO3QrKylmb3IodmFyIGE9YXJndW1lbnRzW3RdLGk9MCxsPWEubGVuZ3RoO2k8bDtpKyssbysrKXJbb109YVtpXTtyZXR1cm4gcn1mdW5jdGlvbiBMKGUsdCxuLHIpe3ZhciBvPXIucHJvcGVydHlJc0VudW1lcmFibGUodCk/XCJlbnVtZXJhYmxlXCI6XCJub25lbnVtZXJhYmxlXCI7XCJlbnVtZXJhYmxlXCI9PT1vJiYoZVt0XT1uKSxcIm5vbmVudW1lcmFibGVcIj09PW8mJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBfKGUsdCxuKXtpZighbSh0KSlyZXR1cm4gbiYmdyhuKSYmbi5mb3JFYWNoKChmdW5jdGlvbihuKXt0PW4oZSx0KX0pKSx0O3ZhciByPXt9O20oZSkmJihyPU0oT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSksT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKSkucmVkdWNlKChmdW5jdGlvbihuLHIpe3ZhciBvPWVbcl07cmV0dXJuKCFiKHIpJiYhT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModCkuaW5jbHVkZXMocil8fGIocikmJiFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmluY2x1ZGVzKHIpKSYmTChuLHIsbyxlKSxufSkse30pKTtyZXR1cm4gTShPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KSxPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpKS5yZWR1Y2UoKGZ1bmN0aW9uKHIsbyl7dmFyIGE9dFtvXSxpPW0oZSk/ZVtvXTp2b2lkIDA7cmV0dXJuIG4mJncobikmJm4uZm9yRWFjaCgoZnVuY3Rpb24oZSl7YT1lKGksYSl9KSksdm9pZCAwIT09aSYmbShhKSYmKGE9XyhpLGEsbikpLEwocixvLGEsdCkscn0pLHIpfWNvbnN0IFA9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXRbbi0xXT1hcmd1bWVudHNbbl07dmFyIHI9bnVsbCxvPWU7cmV0dXJuIG0oZSkmJmUuZXh0ZW5zaW9ucyYmMT09PU9iamVjdC5rZXlzKGUpLmxlbmd0aCYmKG89e30scj1lLmV4dGVuc2lvbnMpLHQucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBfKGUsdCxyKX0pLG8pfTt2YXIgRT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1bZVswXV0scj0wLG89dC5sZW5ndGg7cjxvO3IrPTEpbi5wdXNoKHRbcl0sZVtyKzFdKTtyZXR1cm4gbn0saj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT9cInN5bWJvbFwiOnR5cGVvZiBlfSxSPWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX0sST1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbih0LG4scil7cmV0dXJuIG4mJmUodC5wcm90b3R5cGUsbiksciYmZSh0LHIpLHR9fSgpLFY9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sSD1mdW5jdGlvbihlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiK3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfSxBPWZ1bmN0aW9uKGUsdCl7aWYoIWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiF0fHxcIm9iamVjdFwiIT10eXBlb2YgdCYmXCJmdW5jdGlvblwiIT10eXBlb2YgdD9lOnR9LFQ9ZnVuY3Rpb24oZSl7cmV0dXJuXCJvYmplY3RcIj09PSh2b2lkIDA9PT1lP1widW5kZWZpbmVkXCI6aihlKSkmJmUuY29uc3RydWN0b3I9PT1PYmplY3R9LEQ9T2JqZWN0LmZyZWV6ZShbXSksQj1PYmplY3QuZnJlZXplKHt9KTtmdW5jdGlvbiBaKGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGV9ZnVuY3Rpb24gJChlKXtyZXR1cm4gZS5kaXNwbGF5TmFtZXx8ZS5uYW1lfHxcIkNvbXBvbmVudFwifWZ1bmN0aW9uIE4oZSl7cmV0dXJuIGUmJlwic3RyaW5nXCI9PXR5cGVvZiBlLnN0eWxlZENvbXBvbmVudElkfXZhciBGPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBwcm9jZXNzJiYocHJvY2Vzcy5lbnYuUkVBQ1RfQVBQX1NDX0FUVFJ8fHByb2Nlc3MuZW52LlNDX0FUVFIpfHxcImRhdGEtc3R5bGVkXCIsVz1cImRhdGEtc3R5bGVkLXZlcnNpb25cIixVPVwiZGF0YS1zdHlsZWQtc3RyZWFtZWRcIix6PVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJlwiSFRNTEVsZW1lbnRcImluIHdpbmRvdyxHPVwiYm9vbGVhblwiPT10eXBlb2YgU0NfRElTQUJMRV9TUEVFRFkmJlNDX0RJU0FCTEVfU1BFRURZfHxcInVuZGVmaW5lZFwiIT10eXBlb2YgcHJvY2VzcyYmKHByb2Nlc3MuZW52LlJFQUNUX0FQUF9TQ19ESVNBQkxFX1NQRUVEWXx8cHJvY2Vzcy5lbnYuU0NfRElTQUJMRV9TUEVFRFkpfHwhMSxLPXt9O3ZhciBxPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7Uih0aGlzLHQpO2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoLG89QXJyYXkocj4xP3ItMTowKSxhPTE7YTxyO2ErKylvW2EtMV09YXJndW1lbnRzW2FdO3ZhciBpPUEodGhpcyxlLmNhbGwodGhpcyxcIkFuIGVycm9yIG9jY3VycmVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3N0eWxlZC1jb21wb25lbnRzL3N0eWxlZC1jb21wb25lbnRzL2Jsb2IvbWFzdGVyL3BhY2thZ2VzL3N0eWxlZC1jb21wb25lbnRzL3NyYy91dGlscy9lcnJvcnMubWQjXCIrbitcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cIisoby5sZW5ndGg+MD9cIiBBZGRpdGlvbmFsIGFyZ3VtZW50czogXCIrby5qb2luKFwiLCBcIik6XCJcIikpKTtyZXR1cm4gQShpKX1yZXR1cm4gSCh0LGUpLHR9KEVycm9yKSxZPS9eW15cXFNcXG5dKj9cXC9cXCogc2MtY29tcG9uZW50LWlkOlxccyooXFxTKylcXHMrXFwqXFwvL2dtLEo9ZnVuY3Rpb24oZSl7dmFyIHQ9XCJcIisoZXx8XCJcIiksbj1bXTtyZXR1cm4gdC5yZXBsYWNlKFksKGZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gbi5wdXNoKHtjb21wb25lbnRJZDp0LG1hdGNoSW5kZXg6cn0pLGV9KSksbi5tYXAoKGZ1bmN0aW9uKGUscil7dmFyIG89ZS5jb21wb25lbnRJZCxhPWUubWF0Y2hJbmRleCxpPW5bcisxXTtyZXR1cm57Y29tcG9uZW50SWQ6byxjc3NGcm9tRE9NOmk/dC5zbGljZShhLGkubWF0Y2hJbmRleCk6dC5zbGljZShhKX19KSl9LFg9L15cXHMqXFwvXFwvLiokL2dtLFE9bmV3KG8oKSkoe2dsb2JhbDohMSxjYXNjYWRlOiEwLGtleWZyYW1lOiExLHByZWZpeDohMSxjb21wcmVzczohMSxzZW1pY29sb246ITB9KSxlZT1uZXcobygpKSh7Z2xvYmFsOiExLGNhc2NhZGU6ITAsa2V5ZnJhbWU6ITEscHJlZml4OiEwLGNvbXByZXNzOiExLHNlbWljb2xvbjohMX0pLHRlPVtdLG5lPWZ1bmN0aW9uKGUpe2lmKC0yPT09ZSl7dmFyIHQ9dGU7cmV0dXJuIHRlPVtdLHR9fSxyZT1pKCkoKGZ1bmN0aW9uKGUpe3RlLnB1c2goZSl9KSksb2U9dm9pZCAwLGFlPXZvaWQgMCxpZT12b2lkIDAsbGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PjAmJi0xIT09bi5zbGljZSgwLHQpLmluZGV4T2YoYWUpJiZuLnNsaWNlKHQtYWUubGVuZ3RoLHQpIT09YWU/XCIuXCIrb2U6ZX07ZWUudXNlKFtmdW5jdGlvbihlLHQsbil7Mj09PWUmJm4ubGVuZ3RoJiZuWzBdLmxhc3RJbmRleE9mKGFlKT4wJiYoblswXT1uWzBdLnJlcGxhY2UoaWUsbGUpKX0scmUsbmVdKSxRLnVzZShbcmUsbmVdKTt2YXIgc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIFEoXCJcIixlKX07ZnVuY3Rpb24gY2UoZSx0LG4pe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTpcIiZcIixvPWUuam9pbihcIlwiKS5yZXBsYWNlKFgsXCJcIiksYT10JiZuP24rXCIgXCIrdCtcIiB7IFwiK28rXCIgfVwiOm87cmV0dXJuIG9lPXIsYWU9dCxpZT1uZXcgUmVnRXhwKFwiXFxcXFwiK2FlK1wiXFxcXGJcIixcImdcIiksZWUobnx8IXQ/XCJcIjp0LGEpfXZhciB1ZT1mdW5jdGlvbigpe3JldHVybiBuLm5jfSxkZT1mdW5jdGlvbihlLHQsbil7biYmKChlW3RdfHwoZVt0XT1PYmplY3QuY3JlYXRlKG51bGwpKSlbbl09ITApfSxwZT1mdW5jdGlvbihlLHQpe2VbdF09T2JqZWN0LmNyZWF0ZShudWxsKX0sZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7cmV0dXJuIHZvaWQgMCE9PWVbdF0mJmVbdF1bbl19fSxoZT1mdW5jdGlvbihlKXt2YXIgdD1cIlwiO2Zvcih2YXIgbiBpbiBlKXQrPU9iamVjdC5rZXlzKGVbbl0pLmpvaW4oXCIgXCIpK1wiIFwiO3JldHVybiB0LnRyaW0oKX0sZ2U9ZnVuY3Rpb24oZSl7aWYoZS5zaGVldClyZXR1cm4gZS5zaGVldDtmb3IodmFyIHQ9ZS5vd25lckRvY3VtZW50LnN0eWxlU2hlZXRzLmxlbmd0aCxuPTA7bjx0O24rPTEpe3ZhciByPWUub3duZXJEb2N1bWVudC5zdHlsZVNoZWV0c1tuXTtpZihyLm93bmVyTm9kZT09PWUpcmV0dXJuIHJ9dGhyb3cgbmV3IHEoMTApfSx2ZT1mdW5jdGlvbihlLHQsbil7aWYoIXQpcmV0dXJuITE7dmFyIHI9ZS5jc3NSdWxlcy5sZW5ndGg7dHJ5e2UuaW5zZXJ0UnVsZSh0LG48PXI/bjpyKX1jYXRjaChlKXtyZXR1cm4hMX1yZXR1cm4hMH0sQ2U9ZnVuY3Rpb24oZSl7cmV0dXJuXCJcXG4vKiBzYy1jb21wb25lbnQtaWQ6IFwiK2UrXCIgKi9cXG5cIn0sbWU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MCxyPTA7cjw9dDtyKz0xKW4rPWVbcl07cmV0dXJuIG59LHdlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByPXVlKCk7cmV0dXJuXCI8c3R5bGUgXCIrW3ImJidub25jZT1cIicrcisnXCInLEYrJz1cIicraGUodCkrJ1wiJyxXKyc9XCI0LjQuMVwiJyxuXS5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIikrXCI+XCIrZSgpK1wiPC9zdHlsZT5cIn19LGJlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG4scj0oKG49e30pW0ZdPWhlKHQpLG5bV109XCI0LjQuMVwiLG4pLG89dWUoKTtyZXR1cm4gbyYmKHIubm9uY2U9byksbC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIixWKHt9LHIse2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MOntfX2h0bWw6ZSgpfX0pKX19LHllPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyhlKX19LHhlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY3JlYXRlVGV4dE5vZGUoQ2UodCkpfSxrZT1mdW5jdGlvbiBlKHQsbil7dmFyIHI9dm9pZCAwPT09dD9PYmplY3QuY3JlYXRlKG51bGwpOnQsbz12b2lkIDA9PT1uP09iamVjdC5jcmVhdGUobnVsbCk6bixhPWZ1bmN0aW9uKGUpe3ZhciB0PW9bZV07cmV0dXJuIHZvaWQgMCE9PXQ/dDpvW2VdPVtcIlwiXX0saT1mdW5jdGlvbigpe3ZhciBlPVwiXCI7Zm9yKHZhciB0IGluIG8pe3ZhciBuPW9bdF1bMF07biYmKGUrPUNlKHQpK24pfXJldHVybiBlfSxsPXtjbG9uZTpmdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKHZhciBuIGluIGUpdFtuXT1WKHt9LGVbbl0pO3JldHVybiB0fShyKSxuPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKHZhciBhIGluIG8pblthXT1bb1thXVswXV07cmV0dXJuIGUodCxuKX0sY3NzOmksZ2V0SWRzOnllKG8pLGhhc05hbWVGb3JJZDpmZShyKSxpbnNlcnRNYXJrZXI6YSxpbnNlcnRSdWxlczpmdW5jdGlvbihlLHQsbil7YShlKVswXSs9dC5qb2luKFwiIFwiKSxkZShyLGUsbil9LHJlbW92ZVJ1bGVzOmZ1bmN0aW9uKGUpe3ZhciB0PW9bZV07dm9pZCAwIT09dCYmKHRbMF09XCJcIixwZShyLGUpKX0sc2VhbGVkOiExLHN0eWxlVGFnOm51bGwsdG9FbGVtZW50OmJlKGksciksdG9IVE1MOndlKGkscil9O3JldHVybiBsfSxTZT1mdW5jdGlvbihlLHQsbixyLG8pe2lmKHomJiFuKXt2YXIgYT1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZG9jdW1lbnQ7ZT9yPWUub3duZXJEb2N1bWVudDp0JiYocj10Lm93bmVyRG9jdW1lbnQpO3ZhciBvPXIuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO28uc2V0QXR0cmlidXRlKEYsXCJcIiksby5zZXRBdHRyaWJ1dGUoVyxcIjQuNC4xXCIpO3ZhciBhPXVlKCk7aWYoYSYmby5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLGEpLG8uYXBwZW5kQ2hpbGQoci5jcmVhdGVUZXh0Tm9kZShcIlwiKSksZSYmIXQpZS5hcHBlbmRDaGlsZChvKTtlbHNle2lmKCF0fHwhZXx8IXQucGFyZW50Tm9kZSl0aHJvdyBuZXcgcSg2KTt0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG8sbj90OnQubmV4dFNpYmxpbmcpfXJldHVybiBvfShlLHQscik7cmV0dXJuIEc/ZnVuY3Rpb24oZSx0KXt2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpLHI9T2JqZWN0LmNyZWF0ZShudWxsKSxvPXZvaWQgMCE9PXQsYT0hMSxpPWZ1bmN0aW9uKHQpe3ZhciBvPXJbdF07cmV0dXJuIHZvaWQgMCE9PW8/bzooclt0XT14ZShlLm93bmVyRG9jdW1lbnQsdCksZS5hcHBlbmRDaGlsZChyW3RdKSxuW3RdPU9iamVjdC5jcmVhdGUobnVsbCksclt0XSl9LGw9ZnVuY3Rpb24oKXt2YXIgZT1cIlwiO2Zvcih2YXIgdCBpbiByKWUrPXJbdF0uZGF0YTtyZXR1cm4gZX07cmV0dXJue2Nsb25lOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IHEoNSl9LGNzczpsLGdldElkczp5ZShyKSxoYXNOYW1lRm9ySWQ6ZmUobiksaW5zZXJ0TWFya2VyOmksaW5zZXJ0UnVsZXM6ZnVuY3Rpb24oZSxyLGwpe2Zvcih2YXIgcz1pKGUpLGM9W10sdT1yLmxlbmd0aCxkPTA7ZDx1O2QrPTEpe3ZhciBwPXJbZF0sZj1vO2lmKGYmJi0xIT09cC5pbmRleE9mKFwiQGltcG9ydFwiKSljLnB1c2gocCk7ZWxzZXtmPSExO3ZhciBoPWQ9PT11LTE/XCJcIjpcIiBcIjtzLmFwcGVuZERhdGEoXCJcIitwK2gpfX1kZShuLGUsbCksbyYmYy5sZW5ndGg+MCYmKGE9ITAsdCgpLmluc2VydFJ1bGVzKGUrXCItaW1wb3J0XCIsYykpfSxyZW1vdmVSdWxlczpmdW5jdGlvbihpKXt2YXIgbD1yW2ldO2lmKHZvaWQgMCE9PWwpe3ZhciBzPXhlKGUub3duZXJEb2N1bWVudCxpKTtlLnJlcGxhY2VDaGlsZChzLGwpLHJbaV09cyxwZShuLGkpLG8mJmEmJnQoKS5yZW1vdmVSdWxlcyhpK1wiLWltcG9ydFwiKX19LHNlYWxlZDohMSxzdHlsZVRhZzplLHRvRWxlbWVudDpiZShsLG4pLHRvSFRNTDp3ZShsLG4pfX0oYSxvKTpmdW5jdGlvbihlLHQpe3ZhciBuPU9iamVjdC5jcmVhdGUobnVsbCkscj1PYmplY3QuY3JlYXRlKG51bGwpLG89W10sYT12b2lkIDAhPT10LGk9ITEsbD1mdW5jdGlvbihlKXt2YXIgdD1yW2VdO3JldHVybiB2b2lkIDAhPT10P3Q6KHJbZV09by5sZW5ndGgsby5wdXNoKDApLHBlKG4sZSkscltlXSl9LHM9ZnVuY3Rpb24oKXt2YXIgdD1nZShlKS5jc3NSdWxlcyxuPVwiXCI7Zm9yKHZhciBhIGluIHIpe24rPUNlKGEpO2Zvcih2YXIgaT1yW2FdLGw9bWUobyxpKSxzPWwtb1tpXTtzPGw7cys9MSl7dmFyIGM9dFtzXTt2b2lkIDAhPT1jJiYobis9Yy5jc3NUZXh0KX19cmV0dXJuIG59O3JldHVybntjbG9uZTpmdW5jdGlvbigpe3Rocm93IG5ldyBxKDUpfSxjc3M6cyxnZXRJZHM6eWUociksaGFzTmFtZUZvcklkOmZlKG4pLGluc2VydE1hcmtlcjpsLGluc2VydFJ1bGVzOmZ1bmN0aW9uKHIscyxjKXtmb3IodmFyIHU9bChyKSxkPWdlKGUpLHA9bWUobyx1KSxmPTAsaD1bXSxnPXMubGVuZ3RoLHY9MDt2PGc7dis9MSl7dmFyIEM9c1t2XSxtPWE7bSYmLTEhPT1DLmluZGV4T2YoXCJAaW1wb3J0XCIpP2gucHVzaChDKTp2ZShkLEMscCtmKSYmKG09ITEsZis9MSl9YSYmaC5sZW5ndGg+MCYmKGk9ITAsdCgpLmluc2VydFJ1bGVzKHIrXCItaW1wb3J0XCIsaCkpLG9bdV0rPWYsZGUobixyLGMpfSxyZW1vdmVSdWxlczpmdW5jdGlvbihsKXt2YXIgcz1yW2xdO2lmKHZvaWQgMCE9PXMmJiExIT09ZS5pc0Nvbm5lY3RlZCl7dmFyIGM9b1tzXTshZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj10LW4sbz10O28+cjtvLT0xKWUuZGVsZXRlUnVsZShvKX0oZ2UoZSksbWUobyxzKS0xLGMpLG9bc109MCxwZShuLGwpLGEmJmkmJnQoKS5yZW1vdmVSdWxlcyhsK1wiLWltcG9ydFwiKX19LHNlYWxlZDohMSxzdHlsZVRhZzplLHRvRWxlbWVudDpiZShzLG4pLHRvSFRNTDp3ZShzLG4pfX0oYSxvKX1yZXR1cm4ga2UoKX0sT2U9L1xccysvLE1lPXZvaWQgMDtNZT16P0c/NDA6MWUzOi0xO3ZhciBMZT0wLF9lPXZvaWQgMCxQZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2YXIgdD10aGlzLG49YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOno/ZG9jdW1lbnQuaGVhZDpudWxsLHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtSKHRoaXMsZSksdGhpcy5nZXRJbXBvcnRSdWxlVGFnPWZ1bmN0aW9uKCl7dmFyIGU9dC5pbXBvcnRSdWxlVGFnO2lmKHZvaWQgMCE9PWUpcmV0dXJuIGU7dmFyIG49dC50YWdzWzBdO3JldHVybiB0LmltcG9ydFJ1bGVUYWc9U2UodC50YXJnZXQsbj9uLnN0eWxlVGFnOm51bGwsdC5mb3JjZVNlcnZlciwhMCl9LExlKz0xLHRoaXMuaWQ9TGUsdGhpcy5mb3JjZVNlcnZlcj1yLHRoaXMudGFyZ2V0PXI/bnVsbDpuLHRoaXMudGFnTWFwPXt9LHRoaXMuZGVmZXJyZWQ9e30sdGhpcy5yZWh5ZHJhdGVkTmFtZXM9e30sdGhpcy5pZ25vcmVSZWh5ZHJhdGVkTmFtZXM9e30sdGhpcy50YWdzPVtdLHRoaXMuY2FwYWNpdHk9MSx0aGlzLmNsb25lcz1bXX1yZXR1cm4gZS5wcm90b3R5cGUucmVoeWRyYXRlPWZ1bmN0aW9uKCl7aWYoIXp8fHRoaXMuZm9yY2VTZXJ2ZXIpcmV0dXJuIHRoaXM7dmFyIGU9W10sdD1bXSxuPSExLHI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInN0eWxlW1wiK0YrXCJdW1wiK1crJz1cIjQuNC4xXCJdJyksbz1yLmxlbmd0aDtpZighbylyZXR1cm4gdGhpcztmb3IodmFyIGE9MDthPG87YSs9MSl7dmFyIGk9clthXTtufHwobj0hIWkuZ2V0QXR0cmlidXRlKFUpKTtmb3IodmFyIGwscz0oaS5nZXRBdHRyaWJ1dGUoRil8fFwiXCIpLnRyaW0oKS5zcGxpdChPZSksYz1zLmxlbmd0aCx1PTA7dTxjO3UrPTEpbD1zW3VdLHRoaXMucmVoeWRyYXRlZE5hbWVzW2xdPSEwO3QucHVzaC5hcHBseSh0LEooaS50ZXh0Q29udGVudCkpLGUucHVzaChpKX12YXIgZD10Lmxlbmd0aDtpZighZClyZXR1cm4gdGhpczt2YXIgcD10aGlzLm1ha2VUYWcobnVsbCk7IWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9MCxvPW4ubGVuZ3RoO3I8bztyKz0xKXt2YXIgYT1uW3JdLGk9YS5jb21wb25lbnRJZCxsPWEuY3NzRnJvbURPTSxzPXNlKGwpO2UuaW5zZXJ0UnVsZXMoaSxzKX1mb3IodmFyIGM9MCx1PXQubGVuZ3RoO2M8dTtjKz0xKXt2YXIgZD10W2NdO2QucGFyZW50Tm9kZSYmZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGQpfX0ocCxlLHQpLHRoaXMuY2FwYWNpdHk9TWF0aC5tYXgoMSxNZS1kKSx0aGlzLnRhZ3MucHVzaChwKTtmb3IodmFyIGY9MDtmPGQ7Zis9MSl0aGlzLnRhZ01hcFt0W2ZdLmNvbXBvbmVudElkXT1wO3JldHVybiB0aGlzfSxlLnJlc2V0PWZ1bmN0aW9uKCl7X2U9bmV3IGUodm9pZCAwLGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0pLnJlaHlkcmF0ZSgpfSxlLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBlKHRoaXMudGFyZ2V0LHRoaXMuZm9yY2VTZXJ2ZXIpO3JldHVybiB0aGlzLmNsb25lcy5wdXNoKHQpLHQudGFncz10aGlzLnRhZ3MubWFwKChmdW5jdGlvbihlKXtmb3IodmFyIG49ZS5nZXRJZHMoKSxyPWUuY2xvbmUoKSxvPTA7bzxuLmxlbmd0aDtvKz0xKXQudGFnTWFwW25bb11dPXI7cmV0dXJuIHJ9KSksdC5yZWh5ZHJhdGVkTmFtZXM9Vih7fSx0aGlzLnJlaHlkcmF0ZWROYW1lcyksdC5kZWZlcnJlZD1WKHt9LHRoaXMuZGVmZXJyZWQpLHR9LGUucHJvdG90eXBlLnNlYWxBbGxUYWdzPWZ1bmN0aW9uKCl7dGhpcy5jYXBhY2l0eT0xLHRoaXMudGFncy5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnNlYWxlZD0hMH0pKX0sZS5wcm90b3R5cGUubWFrZVRhZz1mdW5jdGlvbihlKXt2YXIgdD1lP2Uuc3R5bGVUYWc6bnVsbDtyZXR1cm4gU2UodGhpcy50YXJnZXQsdCx0aGlzLmZvcmNlU2VydmVyLCExLHRoaXMuZ2V0SW1wb3J0UnVsZVRhZyl9LGUucHJvdG90eXBlLmdldFRhZ0ZvcklkPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMudGFnTWFwW2VdO2lmKHZvaWQgMCE9PXQmJiF0LnNlYWxlZClyZXR1cm4gdDt2YXIgbj10aGlzLnRhZ3NbdGhpcy50YWdzLmxlbmd0aC0xXTtyZXR1cm4gdGhpcy5jYXBhY2l0eS09MSwwPT09dGhpcy5jYXBhY2l0eSYmKHRoaXMuY2FwYWNpdHk9TWUsbj10aGlzLm1ha2VUYWcobiksdGhpcy50YWdzLnB1c2gobikpLHRoaXMudGFnTWFwW2VdPW59LGUucHJvdG90eXBlLmhhc0lkPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT10aGlzLnRhZ01hcFtlXX0sZS5wcm90b3R5cGUuaGFzTmFtZUZvcklkPWZ1bmN0aW9uKGUsdCl7aWYodm9pZCAwPT09dGhpcy5pZ25vcmVSZWh5ZHJhdGVkTmFtZXNbZV0mJnRoaXMucmVoeWRyYXRlZE5hbWVzW3RdKXJldHVybiEwO3ZhciBuPXRoaXMudGFnTWFwW2VdO3JldHVybiB2b2lkIDAhPT1uJiZuLmhhc05hbWVGb3JJZChlLHQpfSxlLnByb3RvdHlwZS5kZWZlcnJlZEluamVjdD1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PXRoaXMudGFnTWFwW2VdKXtmb3IodmFyIG49dGhpcy5jbG9uZXMscj0wO3I8bi5sZW5ndGg7cis9MSluW3JdLmRlZmVycmVkSW5qZWN0KGUsdCk7dGhpcy5nZXRUYWdGb3JJZChlKS5pbnNlcnRNYXJrZXIoZSksdGhpcy5kZWZlcnJlZFtlXT10fX0sZS5wcm90b3R5cGUuaW5qZWN0PWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9dGhpcy5jbG9uZXMsbz0wO288ci5sZW5ndGg7bys9MSlyW29dLmluamVjdChlLHQsbik7dmFyIGE9dGhpcy5nZXRUYWdGb3JJZChlKTtpZih2b2lkIDAhPT10aGlzLmRlZmVycmVkW2VdKXt2YXIgaT10aGlzLmRlZmVycmVkW2VdLmNvbmNhdCh0KTthLmluc2VydFJ1bGVzKGUsaSxuKSx0aGlzLmRlZmVycmVkW2VdPXZvaWQgMH1lbHNlIGEuaW5zZXJ0UnVsZXMoZSx0LG4pfSxlLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy50YWdNYXBbZV07aWYodm9pZCAwIT09dCl7Zm9yKHZhciBuPXRoaXMuY2xvbmVzLHI9MDtyPG4ubGVuZ3RoO3IrPTEpbltyXS5yZW1vdmUoZSk7dC5yZW1vdmVSdWxlcyhlKSx0aGlzLmlnbm9yZVJlaHlkcmF0ZWROYW1lc1tlXT0hMCx0aGlzLmRlZmVycmVkW2VdPXZvaWQgMH19LGUucHJvdG90eXBlLnRvSFRNTD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRhZ3MubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS50b0hUTUwoKX0pKS5qb2luKFwiXCIpfSxlLnByb3RvdHlwZS50b1JlYWN0RWxlbWVudHM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmlkO3JldHVybiB0aGlzLnRhZ3MubWFwKChmdW5jdGlvbih0LG4pe3ZhciByPVwic2MtXCIrZStcIi1cIituO3JldHVybigwLGwuY2xvbmVFbGVtZW50KSh0LnRvRWxlbWVudCgpLHtrZXk6cn0pfSkpfSxJKGUsbnVsbCxbe2tleTpcIm1hc3RlclwiLGdldDpmdW5jdGlvbigpe3JldHVybiBfZXx8KF9lPShuZXcgZSkucmVoeWRyYXRlKCkpfX0se2tleTpcImluc3RhbmNlXCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUubWFzdGVyfX1dKSxlfSgpLEVlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4pe3ZhciByPXRoaXM7Uih0aGlzLGUpLHRoaXMuaW5qZWN0PWZ1bmN0aW9uKGUpe2UuaGFzTmFtZUZvcklkKHIuaWQsci5uYW1lKXx8ZS5pbmplY3Qoci5pZCxyLnJ1bGVzLHIubmFtZSl9LHRoaXMudG9TdHJpbmc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgcSgxMixTdHJpbmcoci5uYW1lKSl9LHRoaXMubmFtZT10LHRoaXMucnVsZXM9bix0aGlzLmlkPVwic2Mta2V5ZnJhbWVzLVwiK3R9cmV0dXJuIGUucHJvdG90eXBlLmdldE5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uYW1lfSxlfSgpLGplPS8oW0EtWl0pL2csUmU9L15tcy0vO2Z1bmN0aW9uIEllKGUpe3JldHVybiBlLnJlcGxhY2UoamUsXCItJDFcIikudG9Mb3dlckNhc2UoKS5yZXBsYWNlKFJlLFwiLW1zLVwiKX12YXIgVmU9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWV8fCExPT09ZXx8XCJcIj09PWV9LEhlPWZ1bmN0aW9uIGUodCxuKXt2YXIgcj1bXTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24obil7aWYoIVZlKHRbbl0pKXtpZihUKHRbbl0pKXJldHVybiByLnB1c2guYXBwbHkocixlKHRbbl0sbikpLHI7aWYoWih0W25dKSlyZXR1cm4gci5wdXNoKEllKG4pK1wiOlwiLHRbbl0sXCI7XCIpLHI7ci5wdXNoKEllKG4pK1wiOiBcIisobz1uLChudWxsPT0oYT10W25dKXx8XCJib29sZWFuXCI9PXR5cGVvZiBhfHxcIlwiPT09YT9cIlwiOlwibnVtYmVyXCIhPXR5cGVvZiBhfHwwPT09YXx8byBpbiBzP1N0cmluZyhhKS50cmltKCk6YStcInB4XCIpK1wiO1wiKSl9dmFyIG8sYTtyZXR1cm4gcn0pKSxuP1tuK1wiIHtcIl0uY29uY2F0KHIsW1wifVwiXSk6cn07ZnVuY3Rpb24gQWUoZSx0LG4pe2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgcixvPVtdLGE9MCxpPWUubGVuZ3RoO2E8aTthKz0xKW51bGwhPT0ocj1BZShlW2FdLHQsbikpJiYoQXJyYXkuaXNBcnJheShyKT9vLnB1c2guYXBwbHkobyxyKTpvLnB1c2gocikpO3JldHVybiBvfXJldHVybiBWZShlKT9udWxsOk4oZSk/XCIuXCIrZS5zdHlsZWRDb21wb25lbnRJZDpaKGUpP1wiZnVuY3Rpb25cIiE9dHlwZW9mKGw9ZSl8fGwucHJvdG90eXBlJiZsLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50fHwhdD9lOkFlKGUodCksdCxuKTplIGluc3RhbmNlb2YgRWU/bj8oZS5pbmplY3QobiksZS5nZXROYW1lKCkpOmU6VChlKT9IZShlKTplLnRvU3RyaW5nKCk7dmFyIGx9ZnVuY3Rpb24gVGUoZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1BcnJheSh0PjE/dC0xOjApLHI9MTtyPHQ7cisrKW5bci0xXT1hcmd1bWVudHNbcl07cmV0dXJuIFooZSl8fFQoZSk/QWUoRShELFtlXS5jb25jYXQobikpKTpBZShFKGUsbikpfWZ1bmN0aW9uIERlKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOkI7aWYoISgwLGMuaXNWYWxpZEVsZW1lbnRUeXBlKSh0KSl0aHJvdyBuZXcgcSgxLFN0cmluZyh0KSk7dmFyIHI9ZnVuY3Rpb24oKXtyZXR1cm4gZSh0LG4sVGUuYXBwbHkodm9pZCAwLGFyZ3VtZW50cykpfTtyZXR1cm4gci53aXRoQ29uZmlnPWZ1bmN0aW9uKHIpe3JldHVybiBEZShlLHQsVih7fSxuLHIpKX0sci5hdHRycz1mdW5jdGlvbihyKXtyZXR1cm4gRGUoZSx0LFYoe30sbix7YXR0cnM6QXJyYXkucHJvdG90eXBlLmNvbmNhdChuLmF0dHJzLHIpLmZpbHRlcihCb29sZWFuKX0pKX0scn1mdW5jdGlvbiBCZShlKXtmb3IodmFyIHQsbj0wfGUubGVuZ3RoLHI9MHxuLG89MDtuPj00Oyl0PTE1NDA0ODM0NzcqKDY1NTM1Jih0PTI1NSZlLmNoYXJDb2RlQXQobyl8KDI1NSZlLmNoYXJDb2RlQXQoKytvKSk8PDh8KDI1NSZlLmNoYXJDb2RlQXQoKytvKSk8PDE2fCgyNTUmZS5jaGFyQ29kZUF0KCsrbykpPDwyNCkpKygoMTU0MDQ4MzQ3NyoodD4+PjE2KSY2NTUzNSk8PDE2KSxyPTE1NDA0ODM0NzcqKDY1NTM1JnIpKygoMTU0MDQ4MzQ3Nyoocj4+PjE2KSY2NTUzNSk8PDE2KV4odD0xNTQwNDgzNDc3Kig2NTUzNSYodF49dD4+PjI0KSkrKCgxNTQwNDgzNDc3Kih0Pj4+MTYpJjY1NTM1KTw8MTYpKSxuLT00LCsrbztzd2l0Y2gobil7Y2FzZSAzOnJePSgyNTUmZS5jaGFyQ29kZUF0KG8rMikpPDwxNjtjYXNlIDI6cl49KDI1NSZlLmNoYXJDb2RlQXQobysxKSk8PDg7Y2FzZSAxOnI9MTU0MDQ4MzQ3NyooNjU1MzUmKHJePTI1NSZlLmNoYXJDb2RlQXQobykpKSsoKDE1NDA0ODM0NzcqKHI+Pj4xNikmNjU1MzUpPDwxNil9cmV0dXJuKChyPTE1NDA0ODM0NzcqKDY1NTM1JihyXj1yPj4+MTMpKSsoKDE1NDA0ODM0NzcqKHI+Pj4xNikmNjU1MzUpPDwxNikpXnI+Pj4xNSk+Pj4wfXZhciBaZT01MiwkZT1mdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShlKyhlPjI1PzM5Ojk3KSl9O2Z1bmN0aW9uIE5lKGUpe3ZhciB0PVwiXCIsbj12b2lkIDA7Zm9yKG49ZTtuPlplO249TWF0aC5mbG9vcihuL1plKSl0PSRlKG4lWmUpK3Q7cmV0dXJuICRlKG4lWmUpK3R9ZnVuY3Rpb24gRmUoZSx0KXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rPTEpe3ZhciByPWVbbl07aWYoQXJyYXkuaXNBcnJheShyKSYmIUZlKHIsdCkpcmV0dXJuITE7aWYoWihyKSYmIU4ocikpcmV0dXJuITF9cmV0dXJuIXQuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuIFooZSl8fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBlKWlmKFooZVt0XSkpcmV0dXJuITA7cmV0dXJuITF9KGUpfSkpfXZhciBXZSxVZT1mdW5jdGlvbihlKXtyZXR1cm4gTmUoQmUoZSkpfSx6ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxuLHIpe1IodGhpcyxlKSx0aGlzLnJ1bGVzPXQsdGhpcy5pc1N0YXRpYz1GZSh0LG4pLHRoaXMuY29tcG9uZW50SWQ9cixQZS5tYXN0ZXIuaGFzSWQocil8fFBlLm1hc3Rlci5kZWZlcnJlZEluamVjdChyLFtdKX1yZXR1cm4gZS5wcm90b3R5cGUuZ2VuZXJhdGVBbmRJbmplY3RTdHlsZXM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmlzU3RhdGljLHI9dGhpcy5jb21wb25lbnRJZCxvPXRoaXMubGFzdENsYXNzTmFtZTtpZih6JiZuJiZcInN0cmluZ1wiPT10eXBlb2YgbyYmdC5oYXNOYW1lRm9ySWQocixvKSlyZXR1cm4gbzt2YXIgYT1BZSh0aGlzLnJ1bGVzLGUsdCksaT1VZSh0aGlzLmNvbXBvbmVudElkK2Euam9pbihcIlwiKSk7cmV0dXJuIHQuaGFzTmFtZUZvcklkKHIsaSl8fHQuaW5qZWN0KHRoaXMuY29tcG9uZW50SWQsY2UoYSxcIi5cIitpLHZvaWQgMCxyKSxpKSx0aGlzLmxhc3RDbGFzc05hbWU9aSxpfSxlLmdlbmVyYXRlTmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gVWUoZSl9LGV9KCksR2U9ZnVuY3Rpb24oZSx0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06QixyPSEhbiYmZS50aGVtZT09PW4udGhlbWU7cmV0dXJuIGUudGhlbWUmJiFyP2UudGhlbWU6dHx8bi50aGVtZX0sS2U9L1tbXFxdLiMqJD48K349fF46KCksXCInYC1dKy9nLHFlPS8oXi18LSQpL2c7ZnVuY3Rpb24gWWUoZSl7cmV0dXJuIGUucmVwbGFjZShLZSxcIi1cIikucmVwbGFjZShxZSxcIlwiKX1mdW5jdGlvbiBKZShlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZSYmITB9dmFyIFhlPXtjaGlsZENvbnRleHRUeXBlczohMCxjb250ZXh0VHlwZXM6ITAsZGVmYXVsdFByb3BzOiEwLGRpc3BsYXlOYW1lOiEwLGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczohMCxwcm9wVHlwZXM6ITAsdHlwZTohMH0sUWU9e25hbWU6ITAsbGVuZ3RoOiEwLHByb3RvdHlwZTohMCxjYWxsZXI6ITAsY2FsbGVlOiEwLGFyZ3VtZW50czohMCxhcml0eTohMH0sZXQ9KChXZT17fSlbYy5Gb3J3YXJkUmVmXT17JCR0eXBlb2Y6ITAscmVuZGVyOiEwfSxXZSksdHQ9T2JqZWN0LmRlZmluZVByb3BlcnR5LG50PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzLHJ0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsb3Q9dm9pZCAwPT09cnQ/ZnVuY3Rpb24oKXtyZXR1cm5bXX06cnQsYXQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixpdD1PYmplY3QuZ2V0UHJvdG90eXBlT2YsbHQ9T2JqZWN0LnByb3RvdHlwZSxzdD1BcnJheS5wcm90b3R5cGU7ZnVuY3Rpb24gY3QoZSx0LG4pe2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0KXt2YXIgcj1pdCh0KTtyJiZyIT09bHQmJmN0KGUscixuKTtmb3IodmFyIG89c3QuY29uY2F0KG50KHQpLG90KHQpKSxhPWV0W2UuJCR0eXBlb2ZdfHxYZSxpPWV0W3QuJCR0eXBlb2ZdfHxYZSxsPW8ubGVuZ3RoLHM9dm9pZCAwLGM9dm9pZCAwO2wtLTspaWYoYz1vW2xdLCEoUWVbY118fG4mJm5bY118fGkmJmlbY118fGEmJmFbY10pJiYocz1hdCh0LGMpKSl0cnl7dHQoZSxjLHMpfWNhdGNoKGUpe31yZXR1cm4gZX1yZXR1cm4gZX12YXIgdXQ9KDAsbC5jcmVhdGVDb250ZXh0KSgpLGR0PXV0LkNvbnN1bWVyLHB0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7Uih0aGlzLHQpO3ZhciByPUEodGhpcyxlLmNhbGwodGhpcyxuKSk7cmV0dXJuIHIuZ2V0Q29udGV4dD1wKHIuZ2V0Q29udGV4dC5iaW5kKHIpKSxyLnJlbmRlcklubmVyPXIucmVuZGVySW5uZXIuYmluZChyKSxyfXJldHVybiBIKHQsZSksdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW4/bC5jcmVhdGVFbGVtZW50KHV0LkNvbnN1bWVyLG51bGwsdGhpcy5yZW5kZXJJbm5lcik6bnVsbH0sdC5wcm90b3R5cGUucmVuZGVySW5uZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRDb250ZXh0KHRoaXMucHJvcHMudGhlbWUsZSk7cmV0dXJuIGwuY3JlYXRlRWxlbWVudCh1dC5Qcm92aWRlcix7dmFsdWU6dH0sdGhpcy5wcm9wcy5jaGlsZHJlbil9LHQucHJvdG90eXBlLmdldFRoZW1lPWZ1bmN0aW9uKGUsdCl7aWYoWihlKSlyZXR1cm4gZSh0KTtpZihudWxsPT09ZXx8QXJyYXkuaXNBcnJheShlKXx8XCJvYmplY3RcIiE9PSh2b2lkIDA9PT1lP1widW5kZWZpbmVkXCI6aihlKSkpdGhyb3cgbmV3IHEoOCk7cmV0dXJuIFYoe30sdCxlKX0sdC5wcm90b3R5cGUuZ2V0Q29udGV4dD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmdldFRoZW1lKGUsdCl9LHR9KGwuQ29tcG9uZW50KSxmdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtSKHRoaXMsZSksdGhpcy5tYXN0ZXJTaGVldD1QZS5tYXN0ZXIsdGhpcy5pbnN0YW5jZT10aGlzLm1hc3RlclNoZWV0LmNsb25lKCksdGhpcy5zZWFsZWQ9ITF9cmV0dXJuIGUucHJvdG90eXBlLnNlYWw9ZnVuY3Rpb24oKXtpZighdGhpcy5zZWFsZWQpe3ZhciBlPXRoaXMubWFzdGVyU2hlZXQuY2xvbmVzLmluZGV4T2YodGhpcy5pbnN0YW5jZSk7dGhpcy5tYXN0ZXJTaGVldC5jbG9uZXMuc3BsaWNlKGUsMSksdGhpcy5zZWFsZWQ9ITB9fSxlLnByb3RvdHlwZS5jb2xsZWN0U3R5bGVzPWZ1bmN0aW9uKGUpe2lmKHRoaXMuc2VhbGVkKXRocm93IG5ldyBxKDIpO3JldHVybiBsLmNyZWF0ZUVsZW1lbnQodnQse3NoZWV0OnRoaXMuaW5zdGFuY2V9LGUpfSxlLnByb3RvdHlwZS5nZXRTdHlsZVRhZ3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWFsKCksdGhpcy5pbnN0YW5jZS50b0hUTUwoKX0sZS5wcm90b3R5cGUuZ2V0U3R5bGVFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VhbCgpLHRoaXMuaW5zdGFuY2UudG9SZWFjdEVsZW1lbnRzKCl9LGUucHJvdG90eXBlLmludGVybGVhdmVXaXRoTm9kZVN0cmVhbT1mdW5jdGlvbihlKXt0aHJvdyBuZXcgcSgzKX0sZX0oKSxodD0oMCxsLmNyZWF0ZUNvbnRleHQpKCksZ3Q9aHQuQ29uc3VtZXIsdnQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtSKHRoaXMsdCk7dmFyIHI9QSh0aGlzLGUuY2FsbCh0aGlzLG4pKTtyZXR1cm4gci5nZXRDb250ZXh0PXAoci5nZXRDb250ZXh0KSxyfXJldHVybiBIKHQsZSksdC5wcm90b3R5cGUuZ2V0Q29udGV4dD1mdW5jdGlvbihlLHQpe2lmKGUpcmV0dXJuIGU7aWYodClyZXR1cm4gbmV3IFBlKHQpO3Rocm93IG5ldyBxKDQpfSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5jaGlsZHJlbixuPWUuc2hlZXQscj1lLnRhcmdldDtyZXR1cm4gbC5jcmVhdGVFbGVtZW50KGh0LlByb3ZpZGVyLHt2YWx1ZTp0aGlzLmdldENvbnRleHQobixyKX0sdCl9LHR9KGwuQ29tcG9uZW50KSxDdD17fTt2YXIgbXQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe1IodGhpcyx0KTt2YXIgbj1BKHRoaXMsZS5jYWxsKHRoaXMpKTtyZXR1cm4gbi5hdHRycz17fSxuLnJlbmRlck91dGVyPW4ucmVuZGVyT3V0ZXIuYmluZChuKSxuLnJlbmRlcklubmVyPW4ucmVuZGVySW5uZXIuYmluZChuKSxufXJldHVybiBIKHQsZSksdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGwuY3JlYXRlRWxlbWVudChndCxudWxsLHRoaXMucmVuZGVyT3V0ZXIpfSx0LnByb3RvdHlwZS5yZW5kZXJPdXRlcj1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpQZS5tYXN0ZXI7cmV0dXJuIHRoaXMuc3R5bGVTaGVldD1lLHRoaXMucHJvcHMuZm9yd2FyZGVkQ29tcG9uZW50LmNvbXBvbmVudFN0eWxlLmlzU3RhdGljP3RoaXMucmVuZGVySW5uZXIoKTpsLmNyZWF0ZUVsZW1lbnQoZHQsbnVsbCx0aGlzLnJlbmRlcklubmVyKX0sdC5wcm90b3R5cGUucmVuZGVySW5uZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcy5mb3J3YXJkZWRDb21wb25lbnQsbj10LmNvbXBvbmVudFN0eWxlLHI9dC5kZWZhdWx0UHJvcHMsbz0odC5kaXNwbGF5TmFtZSx0LmZvbGRlZENvbXBvbmVudElkcyksYT10LnN0eWxlZENvbXBvbmVudElkLGk9dC50YXJnZXQscz12b2lkIDA7cz1uLmlzU3RhdGljP3RoaXMuZ2VuZXJhdGVBbmRJbmplY3RTdHlsZXMoQix0aGlzLnByb3BzKTp0aGlzLmdlbmVyYXRlQW5kSW5qZWN0U3R5bGVzKEdlKHRoaXMucHJvcHMsZSxyKXx8Qix0aGlzLnByb3BzKTt2YXIgYz10aGlzLnByb3BzLmFzfHx0aGlzLmF0dHJzLmFzfHxpLHU9SmUoYyksZD17fSxwPVYoe30sdGhpcy5wcm9wcyx0aGlzLmF0dHJzKSxmPXZvaWQgMDtmb3IoZiBpbiBwKVwiZm9yd2FyZGVkQ29tcG9uZW50XCIhPT1mJiZcImFzXCIhPT1mJiYoXCJmb3J3YXJkZWRSZWZcIj09PWY/ZC5yZWY9cFtmXTpcImZvcndhcmRlZEFzXCI9PT1mP2QuYXM9cFtmXTp1JiYhaChmKXx8KGRbZl09cFtmXSkpO3JldHVybiB0aGlzLnByb3BzLnN0eWxlJiZ0aGlzLmF0dHJzLnN0eWxlJiYoZC5zdHlsZT1WKHt9LHRoaXMuYXR0cnMuc3R5bGUsdGhpcy5wcm9wcy5zdHlsZSkpLGQuY2xhc3NOYW1lPUFycmF5LnByb3RvdHlwZS5jb25jYXQobyxhLHMhPT1hP3M6bnVsbCx0aGlzLnByb3BzLmNsYXNzTmFtZSx0aGlzLmF0dHJzLmNsYXNzTmFtZSkuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpLCgwLGwuY3JlYXRlRWxlbWVudCkoYyxkKX0sdC5wcm90b3R5cGUuYnVpbGRFeGVjdXRpb25Db250ZXh0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLG89Vih7fSx0LHt0aGVtZTplfSk7cmV0dXJuIG4ubGVuZ3RoPyh0aGlzLmF0dHJzPXt9LG4uZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQsbj1lLGE9ITEsaT12b2lkIDAsbD12b2lkIDA7Zm9yKGwgaW4gWihuKSYmKG49bihvKSxhPSEwKSxuKWk9bltsXSxhfHwhWihpKXx8KHQ9aSkmJnQucHJvdG90eXBlJiZ0LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50fHxOKGkpfHwoaT1pKG8pKSxyLmF0dHJzW2xdPWksb1tsXT1pfSkpLG8pOm99LHQucHJvdG90eXBlLmdlbmVyYXRlQW5kSW5qZWN0U3R5bGVzPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5mb3J3YXJkZWRDb21wb25lbnQscj1uLmF0dHJzLG89bi5jb21wb25lbnRTdHlsZTtuLndhcm5Ub29NYW55Q2xhc3NlcztyZXR1cm4gby5pc1N0YXRpYyYmIXIubGVuZ3RoP28uZ2VuZXJhdGVBbmRJbmplY3RTdHlsZXMoQix0aGlzLnN0eWxlU2hlZXQpOm8uZ2VuZXJhdGVBbmRJbmplY3RTdHlsZXModGhpcy5idWlsZEV4ZWN1dGlvbkNvbnRleHQoZSx0LHIpLHRoaXMuc3R5bGVTaGVldCl9LHR9KGwuQ29tcG9uZW50KTtmdW5jdGlvbiB3dChlLHQsbil7dmFyIHI9TihlKSxvPSFKZShlKSxhPXQuZGlzcGxheU5hbWUsaT12b2lkIDA9PT1hP2Z1bmN0aW9uKGUpe3JldHVybiBKZShlKT9cInN0eWxlZC5cIitlOlwiU3R5bGVkKFwiKyQoZSkrXCIpXCJ9KGUpOmEscz10LmNvbXBvbmVudElkLGM9dm9pZCAwPT09cz9mdW5jdGlvbihlLHQsbil7dmFyIHI9XCJzdHJpbmdcIiE9dHlwZW9mIHQ/XCJzY1wiOlllKHQpLG89KEN0W3JdfHwwKSsxO0N0W3JdPW87dmFyIGE9citcIi1cIitlLmdlbmVyYXRlTmFtZShyK28pO3JldHVybiBuP24rXCItXCIrYTphfSh6ZSx0LmRpc3BsYXlOYW1lLHQucGFyZW50Q29tcG9uZW50SWQpOnMsdT10LlBhcmVudENvbXBvbmVudCxkPXZvaWQgMD09PXU/bXQ6dSxwPXQuYXR0cnMsZj12b2lkIDA9PT1wP0Q6cCxoPXQuZGlzcGxheU5hbWUmJnQuY29tcG9uZW50SWQ/WWUodC5kaXNwbGF5TmFtZSkrXCItXCIrdC5jb21wb25lbnRJZDp0LmNvbXBvbmVudElkfHxjLGc9ciYmZS5hdHRycz9BcnJheS5wcm90b3R5cGUuY29uY2F0KGUuYXR0cnMsZikuZmlsdGVyKEJvb2xlYW4pOmYsdj1uZXcgemUocj9lLmNvbXBvbmVudFN0eWxlLnJ1bGVzLmNvbmNhdChuKTpuLGcsaCksQz12b2lkIDAsbT1mdW5jdGlvbihlLHQpe3JldHVybiBsLmNyZWF0ZUVsZW1lbnQoZCxWKHt9LGUse2ZvcndhcmRlZENvbXBvbmVudDpDLGZvcndhcmRlZFJlZjp0fSkpfTtyZXR1cm4gbS5kaXNwbGF5TmFtZT1pLChDPWwuZm9yd2FyZFJlZihtKSkuZGlzcGxheU5hbWU9aSxDLmF0dHJzPWcsQy5jb21wb25lbnRTdHlsZT12LEMuZm9sZGVkQ29tcG9uZW50SWRzPXI/QXJyYXkucHJvdG90eXBlLmNvbmNhdChlLmZvbGRlZENvbXBvbmVudElkcyxlLnN0eWxlZENvbXBvbmVudElkKTpELEMuc3R5bGVkQ29tcG9uZW50SWQ9aCxDLnRhcmdldD1yP2UudGFyZ2V0OmUsQy53aXRoQ29tcG9uZW50PWZ1bmN0aW9uKGUpe3ZhciByPXQuY29tcG9uZW50SWQsbz1mdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKXQuaW5kZXhPZihyKT49MHx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJihuW3JdPWVbcl0pO3JldHVybiBufSh0LFtcImNvbXBvbmVudElkXCJdKSxhPXImJnIrXCItXCIrKEplKGUpP2U6WWUoJChlKSkpO3JldHVybiB3dChlLFYoe30sbyx7YXR0cnM6Zyxjb21wb25lbnRJZDphLFBhcmVudENvbXBvbmVudDpkfSksbil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDLFwiZGVmYXVsdFByb3BzXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9mb2xkZWREZWZhdWx0UHJvcHN9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9mb2xkZWREZWZhdWx0UHJvcHM9cj9QKGUuZGVmYXVsdFByb3BzLHQpOnR9fSksQy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiLlwiK0Muc3R5bGVkQ29tcG9uZW50SWR9LG8mJmN0KEMsZSx7YXR0cnM6ITAsY29tcG9uZW50U3R5bGU6ITAsZGlzcGxheU5hbWU6ITAsZm9sZGVkQ29tcG9uZW50SWRzOiEwLHN0eWxlZENvbXBvbmVudElkOiEwLHRhcmdldDohMCx3aXRoQ29tcG9uZW50OiEwfSksQ312YXIgYnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIERlKHd0LGUpfTtbXCJhXCIsXCJhYmJyXCIsXCJhZGRyZXNzXCIsXCJhcmVhXCIsXCJhcnRpY2xlXCIsXCJhc2lkZVwiLFwiYXVkaW9cIixcImJcIixcImJhc2VcIixcImJkaVwiLFwiYmRvXCIsXCJiaWdcIixcImJsb2NrcXVvdGVcIixcImJvZHlcIixcImJyXCIsXCJidXR0b25cIixcImNhbnZhc1wiLFwiY2FwdGlvblwiLFwiY2l0ZVwiLFwiY29kZVwiLFwiY29sXCIsXCJjb2xncm91cFwiLFwiZGF0YVwiLFwiZGF0YWxpc3RcIixcImRkXCIsXCJkZWxcIixcImRldGFpbHNcIixcImRmblwiLFwiZGlhbG9nXCIsXCJkaXZcIixcImRsXCIsXCJkdFwiLFwiZW1cIixcImVtYmVkXCIsXCJmaWVsZHNldFwiLFwiZmlnY2FwdGlvblwiLFwiZmlndXJlXCIsXCJmb290ZXJcIixcImZvcm1cIixcImgxXCIsXCJoMlwiLFwiaDNcIixcImg0XCIsXCJoNVwiLFwiaDZcIixcImhlYWRcIixcImhlYWRlclwiLFwiaGdyb3VwXCIsXCJoclwiLFwiaHRtbFwiLFwiaVwiLFwiaWZyYW1lXCIsXCJpbWdcIixcImlucHV0XCIsXCJpbnNcIixcImtiZFwiLFwia2V5Z2VuXCIsXCJsYWJlbFwiLFwibGVnZW5kXCIsXCJsaVwiLFwibGlua1wiLFwibWFpblwiLFwibWFwXCIsXCJtYXJrXCIsXCJtYXJxdWVlXCIsXCJtZW51XCIsXCJtZW51aXRlbVwiLFwibWV0YVwiLFwibWV0ZXJcIixcIm5hdlwiLFwibm9zY3JpcHRcIixcIm9iamVjdFwiLFwib2xcIixcIm9wdGdyb3VwXCIsXCJvcHRpb25cIixcIm91dHB1dFwiLFwicFwiLFwicGFyYW1cIixcInBpY3R1cmVcIixcInByZVwiLFwicHJvZ3Jlc3NcIixcInFcIixcInJwXCIsXCJydFwiLFwicnVieVwiLFwic1wiLFwic2FtcFwiLFwic2NyaXB0XCIsXCJzZWN0aW9uXCIsXCJzZWxlY3RcIixcInNtYWxsXCIsXCJzb3VyY2VcIixcInNwYW5cIixcInN0cm9uZ1wiLFwic3R5bGVcIixcInN1YlwiLFwic3VtbWFyeVwiLFwic3VwXCIsXCJ0YWJsZVwiLFwidGJvZHlcIixcInRkXCIsXCJ0ZXh0YXJlYVwiLFwidGZvb3RcIixcInRoXCIsXCJ0aGVhZFwiLFwidGltZVwiLFwidGl0bGVcIixcInRyXCIsXCJ0cmFja1wiLFwidVwiLFwidWxcIixcInZhclwiLFwidmlkZW9cIixcIndiclwiLFwiY2lyY2xlXCIsXCJjbGlwUGF0aFwiLFwiZGVmc1wiLFwiZWxsaXBzZVwiLFwiZm9yZWlnbk9iamVjdFwiLFwiZ1wiLFwiaW1hZ2VcIixcImxpbmVcIixcImxpbmVhckdyYWRpZW50XCIsXCJtYXJrZXJcIixcIm1hc2tcIixcInBhdGhcIixcInBhdHRlcm5cIixcInBvbHlnb25cIixcInBvbHlsaW5lXCIsXCJyYWRpYWxHcmFkaWVudFwiLFwicmVjdFwiLFwic3RvcFwiLFwic3ZnXCIsXCJ0ZXh0XCIsXCJ0c3BhblwiXS5mb3JFYWNoKChmdW5jdGlvbihlKXtidFtlXT1idChlKX0pKTt2YXIgeXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbil7Uih0aGlzLGUpLHRoaXMucnVsZXM9dCx0aGlzLmNvbXBvbmVudElkPW4sdGhpcy5pc1N0YXRpYz1GZSh0LEQpLFBlLm1hc3Rlci5oYXNJZChuKXx8UGUubWFzdGVyLmRlZmVycmVkSW5qZWN0KG4sW10pfXJldHVybiBlLnByb3RvdHlwZS5jcmVhdGVTdHlsZXM9ZnVuY3Rpb24oZSx0KXt2YXIgbj1jZShBZSh0aGlzLnJ1bGVzLGUsdCksXCJcIik7dC5pbmplY3QodGhpcy5jb21wb25lbnRJZCxuKX0sZS5wcm90b3R5cGUucmVtb3ZlU3R5bGVzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY29tcG9uZW50SWQ7ZS5oYXNJZCh0KSYmZS5yZW1vdmUodCl9LGUucHJvdG90eXBlLnJlbmRlclN0eWxlcz1mdW5jdGlvbihlLHQpe3RoaXMucmVtb3ZlU3R5bGVzKHQpLHRoaXMuY3JlYXRlU3R5bGVzKGUsdCl9LGV9KCk7ZnVuY3Rpb24geHQoZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1BcnJheSh0PjE/dC0xOjApLHI9MTtyPHQ7cisrKW5bci0xXT1hcmd1bWVudHNbcl07dmFyIG89VGUuYXBwbHkodm9pZCAwLFtlXS5jb25jYXQobikpLGE9XCJzYy1nbG9iYWwtXCIrQmUoSlNPTi5zdHJpbmdpZnkobykpLGk9bmV3IHl0KG8sYSkscz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe1IodGhpcyx0KTt2YXIgcj1BKHRoaXMsZS5jYWxsKHRoaXMsbikpLG89ci5jb25zdHJ1Y3RvcixhPW8uZ2xvYmFsU3R5bGUsaT1vLnN0eWxlZENvbXBvbmVudElkO3JldHVybiB6JiYod2luZG93LnNjQ0dTSE1SQ2FjaGVbaV09KHdpbmRvdy5zY0NHU0hNUkNhY2hlW2ldfHwwKSsxKSxyLnN0YXRlPXtnbG9iYWxTdHlsZTphLHN0eWxlZENvbXBvbmVudElkOml9LHJ9cmV0dXJuIEgodCxlKSx0LnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3dpbmRvdy5zY0NHU0hNUkNhY2hlW3RoaXMuc3RhdGUuc3R5bGVkQ29tcG9uZW50SWRdJiYod2luZG93LnNjQ0dTSE1SQ2FjaGVbdGhpcy5zdGF0ZS5zdHlsZWRDb21wb25lbnRJZF0tPTEpLDA9PT13aW5kb3cuc2NDR1NITVJDYWNoZVt0aGlzLnN0YXRlLnN0eWxlZENvbXBvbmVudElkXSYmdGhpcy5zdGF0ZS5nbG9iYWxTdHlsZS5yZW1vdmVTdHlsZXModGhpcy5zdHlsZVNoZWV0KX0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gbC5jcmVhdGVFbGVtZW50KGd0LG51bGwsKGZ1bmN0aW9uKHQpe2Uuc3R5bGVTaGVldD10fHxQZS5tYXN0ZXI7dmFyIG49ZS5zdGF0ZS5nbG9iYWxTdHlsZTtyZXR1cm4gbi5pc1N0YXRpYz8obi5yZW5kZXJTdHlsZXMoSyxlLnN0eWxlU2hlZXQpLG51bGwpOmwuY3JlYXRlRWxlbWVudChkdCxudWxsLChmdW5jdGlvbih0KXt2YXIgcj1lLmNvbnN0cnVjdG9yLmRlZmF1bHRQcm9wcyxvPVYoe30sZS5wcm9wcyk7cmV0dXJuIHZvaWQgMCE9PXQmJihvLnRoZW1lPUdlKGUucHJvcHMsdCxyKSksbi5yZW5kZXJTdHlsZXMobyxlLnN0eWxlU2hlZXQpLG51bGx9KSl9KSl9LHR9KGwuQ29tcG9uZW50KTtyZXR1cm4gcy5nbG9iYWxTdHlsZT1pLHMuc3R5bGVkQ29tcG9uZW50SWQ9YSxzfXomJih3aW5kb3cuc2NDR1NITVJDYWNoZT17fSk7dmFyIGt0PWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1xcc3xcXFxcbi9nLFwiXCIpfTtmdW5jdGlvbiBTdChlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPUFycmF5KHQ+MT90LTE6MCkscj0xO3I8dDtyKyspbltyLTFdPWFyZ3VtZW50c1tyXTt2YXIgbz1UZS5hcHBseSh2b2lkIDAsW2VdLmNvbmNhdChuKSksYT1OZShCZShrdChKU09OLnN0cmluZ2lmeShvKSkpKTtyZXR1cm4gbmV3IEVlKGEsY2UobyxhLFwiQGtleWZyYW1lc1wiKSl9dmFyIE90PWZ1bmN0aW9uKGUpe3ZhciB0PWwuZm9yd2FyZFJlZigoZnVuY3Rpb24odCxuKXtyZXR1cm4gbC5jcmVhdGVFbGVtZW50KGR0LG51bGwsKGZ1bmN0aW9uKHIpe3ZhciBvPWUuZGVmYXVsdFByb3BzLGE9R2UodCxyLG8pO3JldHVybiBsLmNyZWF0ZUVsZW1lbnQoZSxWKHt9LHQse3RoZW1lOmEscmVmOm59KSl9KSl9KSk7cmV0dXJuIGN0KHQsZSksdC5kaXNwbGF5TmFtZT1cIldpdGhUaGVtZShcIiskKGUpK1wiKVwiLHR9LE10PXtTdHlsZVNoZWV0OlBlfTtjb25zdCBMdD1idH0sMjQ2OmU9PntlLmV4cG9ydHM9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9XCIvKnwqL1wiLG49dCtcIn1cIjtmdW5jdGlvbiByKHQpe2lmKHQpdHJ5e2UodCtcIn1cIil9Y2F0Y2goZSl7fX1yZXR1cm4gZnVuY3Rpb24obyxhLGksbCxzLGMsdSxkLHAsZil7c3dpdGNoKG8pe2Nhc2UgMTppZigwPT09cCYmNjQ9PT1hLmNoYXJDb2RlQXQoMCkpcmV0dXJuIGUoYStcIjtcIiksXCJcIjticmVhaztjYXNlIDI6aWYoMD09PWQpcmV0dXJuIGErdDticmVhaztjYXNlIDM6c3dpdGNoKGQpe2Nhc2UgMTAyOmNhc2UgMTEyOnJldHVybiBlKGlbMF0rYSksXCJcIjtkZWZhdWx0OnJldHVybiBhKygwPT09Zj90OlwiXCIpfWNhc2UtMjphLnNwbGl0KG4pLmZvckVhY2gocil9fX19KCl9LDk0NjplPT57ZS5leHBvcnRzPWZ1bmN0aW9uIGUodCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49L15cXDArL2cscj0vW1xcMFxcclxcZl0vZyxvPS86ICovZyxhPS96b298Z3JhLyxpPS8oWyw6IF0pKHRyYW5zZm9ybSkvZyxsPS8sK1xccyooPyFbXihdKlspXSkvZyxzPS8gK1xccyooPyFbXihdKlspXSkvZyxjPS8gKltcXDBdICovZyx1PS8sXFxyKz8vZyxkPS8oW1xcdFxcclxcbiBdKSpcXGY/Ji9nLHA9LzpnbG9iYWxcXCgoKD86W15cXChcXClcXFtcXF1dKnxcXFsuKlxcXXxcXChbXlxcKFxcKV0qXFwpKSopXFwpL2csZj0vXFxXKy9nLGg9L0Aoa1xcdyspXFxzKihcXFMqKVxccyovLGc9Lzo6KHBsYWNlKS9nLHY9LzoocmVhZC1vbmx5KS9nLEM9L1xccysoPz1be1xcXTs9Oj5dKS9nLG09LyhbW309Oj5dKVxccysvZyx3PS8oXFx7W157XSs/KTsoPz1cXH0pL2csYj0vXFxzezIsfS9nLHk9LyhbXlxcKF0pKDorKSAqL2cseD0vW3N2aF1cXHcrLVt0YmxyXXsyfS8saz0vXFwoXFxzKiguKilcXHMqXFwpL2csUz0vKFtcXHNcXFNdKj8pOy9nLE89Ly1zZWxmfGZsZXgtL2csTT0vW15dKj8oOltycF1bZWxdYVtcXHctXSspW15dKi8sTD0vc3RyZXRjaHw6XFxzKlxcdytcXC0oPzpjb250ZXxhdmFpbCkvLF89LyhbXi1dKShpbWFnZS1zZXRcXCgpLyxQPVwiLXdlYmtpdC1cIixFPVwiLW1vei1cIixqPVwiLW1zLVwiLFI9NTksST0xMjUsVj0xMjMsSD00MCxBPTQxLFQ9OTEsRD05MyxCPTEwLFo9MTMsJD05LE49NjQsRj0zMixXPTM4LFU9NDUsej05NSxHPTQyLEs9NDQscT01OCxZPTM5LEo9MzQsWD00NyxRPTYyLGVlPTQzLHRlPTEyNixuZT0wLHJlPTEyLG9lPTExLGFlPTEwNyxpZT0xMDksbGU9MTE1LHNlPTExMixjZT0xMTEsdWU9MTA1LGRlPTk5LHBlPTEwMCxmZT0xMTIsaGU9MSxnZT0xLHZlPTAsQ2U9MSxtZT0xLHdlPTEsYmU9MCx5ZT0wLHhlPTAsa2U9W10sU2U9W10sT2U9MCxNZT1udWxsLExlPS0yLF9lPS0xLFBlPTAsRWU9MSxqZT0yLFJlPTMsSWU9MCxWZT0xLEhlPVwiXCIsQWU9XCJcIixUZT1cIlwiO2Z1bmN0aW9uIERlKGUsdCxvLGEsaSl7Zm9yKHZhciBsLHMsdT0wLGQ9MCxwPTAsZj0wLEM9MCxtPTAsdz0wLGI9MCx4PTAsUz0wLE89MCxNPTAsTD0wLF89MCx6PTAsYmU9MCxTZT0wLE1lPTAsTGU9MCxfZT1vLmxlbmd0aCxaZT1fZS0xLHplPVwiXCIsR2U9XCJcIixLZT1cIlwiLHFlPVwiXCIsWWU9XCJcIixKZT1cIlwiO3o8X2U7KXtpZih3PW8uY2hhckNvZGVBdCh6KSx6PT09WmUmJmQrZitwK3UhPT0wJiYoMCE9PWQmJih3PWQ9PT1YP0I6WCksZj1wPXU9MCxfZSsrLFplKyspLGQrZitwK3U9PT0wKXtpZih6PT09WmUmJihiZT4wJiYoR2U9R2UucmVwbGFjZShyLFwiXCIpKSxHZS50cmltKCkubGVuZ3RoPjApKXtzd2l0Y2godyl7Y2FzZSBGOmNhc2UgJDpjYXNlIFI6Y2FzZSBaOmNhc2UgQjpicmVhaztkZWZhdWx0OkdlKz1vLmNoYXJBdCh6KX13PVJ9aWYoMT09PVNlKXN3aXRjaCh3KXtjYXNlIFY6Y2FzZSBJOmNhc2UgUjpjYXNlIEo6Y2FzZSBZOmNhc2UgSDpjYXNlIEE6Y2FzZSBLOlNlPTA7Y2FzZSAkOmNhc2UgWjpjYXNlIEI6Y2FzZSBGOmJyZWFrO2RlZmF1bHQ6Zm9yKFNlPTAsTGU9eixDPXcsei0tLHc9UjtMZTxfZTspc3dpdGNoKG8uY2hhckNvZGVBdChMZSsrKSl7Y2FzZSBCOmNhc2UgWjpjYXNlIFI6Kyt6LHc9QyxMZT1fZTticmVhaztjYXNlIHE6YmU+MCYmKCsreix3PUMpO2Nhc2UgVjpMZT1fZX19c3dpdGNoKHcpe2Nhc2UgVjpmb3IoQz0oR2U9R2UudHJpbSgpKS5jaGFyQ29kZUF0KDApLE89MSxMZT0rK3o7ejxfZTspe3N3aXRjaCh3PW8uY2hhckNvZGVBdCh6KSl7Y2FzZSBWOk8rKzticmVhaztjYXNlIEk6Ty0tO2JyZWFrO2Nhc2UgWDpzd2l0Y2gobT1vLmNoYXJDb2RlQXQoeisxKSl7Y2FzZSBHOmNhc2UgWDp6PVVlKG0seixaZSxvKX1icmVhaztjYXNlIFQ6dysrO2Nhc2UgSDp3Kys7Y2FzZSBKOmNhc2UgWTpmb3IoO3orKzxaZSYmby5jaGFyQ29kZUF0KHopIT09dzspO31pZigwPT09TylicmVhazt6Kyt9aWYoS2U9by5zdWJzdHJpbmcoTGUseiksQz09PW5lJiYoQz0oR2U9R2UucmVwbGFjZShuLFwiXCIpLnRyaW0oKSkuY2hhckNvZGVBdCgwKSksQz09PU4pe3N3aXRjaChiZT4wJiYoR2U9R2UucmVwbGFjZShyLFwiXCIpKSxtPUdlLmNoYXJDb2RlQXQoMSkpe2Nhc2UgcGU6Y2FzZSBpZTpjYXNlIGxlOmNhc2UgVTpsPXQ7YnJlYWs7ZGVmYXVsdDpsPWtlfWlmKExlPShLZT1EZSh0LGwsS2UsbSxpKzEpKS5sZW5ndGgseGU+MCYmMD09PUxlJiYoTGU9R2UubGVuZ3RoKSxPZT4wJiYobD1CZShrZSxHZSxNZSkscz1XZShSZSxLZSxsLHQsZ2UsaGUsTGUsbSxpLGEpLEdlPWwuam9pbihcIlwiKSx2b2lkIDAhPT1zJiYwPT09KExlPShLZT1zLnRyaW0oKSkubGVuZ3RoKSYmKG09MCxLZT1cIlwiKSksTGU+MClzd2l0Y2gobSl7Y2FzZSBsZTpHZT1HZS5yZXBsYWNlKGssRmUpO2Nhc2UgcGU6Y2FzZSBpZTpjYXNlIFU6S2U9R2UrXCJ7XCIrS2UrXCJ9XCI7YnJlYWs7Y2FzZSBhZTpLZT0oR2U9R2UucmVwbGFjZShoLFwiJDEgJDJcIisoVmU+MD9IZTpcIlwiKSkpK1wie1wiK0tlK1wifVwiLEtlPTE9PT1tZXx8Mj09PW1lJiZOZShcIkBcIitLZSwzKT9cIkBcIitQK0tlK1wiQFwiK0tlOlwiQFwiK0tlO2JyZWFrO2RlZmF1bHQ6S2U9R2UrS2UsYT09PWZlJiYocWUrPUtlLEtlPVwiXCIpfWVsc2UgS2U9XCJcIn1lbHNlIEtlPURlKHQsQmUodCxHZSxNZSksS2UsYSxpKzEpO1llKz1LZSxNPTAsU2U9MCxfPTAsYmU9MCxNZT0wLEw9MCxHZT1cIlwiLEtlPVwiXCIsdz1vLmNoYXJDb2RlQXQoKyt6KTticmVhaztjYXNlIEk6Y2FzZSBSOmlmKChMZT0oR2U9KGJlPjA/R2UucmVwbGFjZShyLFwiXCIpOkdlKS50cmltKCkpLmxlbmd0aCk+MSlzd2l0Y2goMD09PV8mJigoQz1HZS5jaGFyQ29kZUF0KDApKT09PVV8fEM+OTYmJkM8MTIzKSYmKExlPShHZT1HZS5yZXBsYWNlKFwiIFwiLFwiOlwiKSkubGVuZ3RoKSxPZT4wJiZ2b2lkIDAhPT0ocz1XZShFZSxHZSx0LGUsZ2UsaGUscWUubGVuZ3RoLGEsaSxhKSkmJjA9PT0oTGU9KEdlPXMudHJpbSgpKS5sZW5ndGgpJiYoR2U9XCJcXDBcXDBcIiksQz1HZS5jaGFyQ29kZUF0KDApLG09R2UuY2hhckNvZGVBdCgxKSxDKXtjYXNlIG5lOmJyZWFrO2Nhc2UgTjppZihtPT09dWV8fG09PT1kZSl7SmUrPUdlK28uY2hhckF0KHopO2JyZWFrfWRlZmF1bHQ6aWYoR2UuY2hhckNvZGVBdChMZS0xKT09PXEpYnJlYWs7cWUrPSRlKEdlLEMsbSxHZS5jaGFyQ29kZUF0KDIpKX1NPTAsU2U9MCxfPTAsYmU9MCxNZT0wLEdlPVwiXCIsdz1vLmNoYXJDb2RlQXQoKyt6KX19c3dpdGNoKHcpe2Nhc2UgWjpjYXNlIEI6aWYoZCtmK3ArdSt5ZT09PTApc3dpdGNoKFMpe2Nhc2UgQTpjYXNlIFk6Y2FzZSBKOmNhc2UgTjpjYXNlIHRlOmNhc2UgUTpjYXNlIEc6Y2FzZSBlZTpjYXNlIFg6Y2FzZSBVOmNhc2UgcTpjYXNlIEs6Y2FzZSBSOmNhc2UgVjpjYXNlIEk6YnJlYWs7ZGVmYXVsdDpfPjAmJihTZT0xKX1kPT09WD9kPTA6Q2UrTT09PTAmJmEhPT1hZSYmR2UubGVuZ3RoPjAmJihiZT0xLEdlKz1cIlxcMFwiKSxPZSpJZT4wJiZXZShQZSxHZSx0LGUsZ2UsaGUscWUubGVuZ3RoLGEsaSxhKSxoZT0xLGdlKys7YnJlYWs7Y2FzZSBSOmNhc2UgSTppZihkK2YrcCt1PT09MCl7aGUrKzticmVha31kZWZhdWx0OnN3aXRjaChoZSsrLHplPW8uY2hhckF0KHopLHcpe2Nhc2UgJDpjYXNlIEY6aWYoZit1K2Q9PT0wKXN3aXRjaChiKXtjYXNlIEs6Y2FzZSBxOmNhc2UgJDpjYXNlIEY6emU9XCJcIjticmVhaztkZWZhdWx0OnchPT1GJiYoemU9XCIgXCIpfWJyZWFrO2Nhc2UgbmU6emU9XCJcXFxcMFwiO2JyZWFrO2Nhc2UgcmU6emU9XCJcXFxcZlwiO2JyZWFrO2Nhc2Ugb2U6emU9XCJcXFxcdlwiO2JyZWFrO2Nhc2UgVzpmK2QrdT09PTAmJkNlPjAmJihNZT0xLGJlPTEsemU9XCJcXGZcIit6ZSk7YnJlYWs7Y2FzZSAxMDg6aWYoZitkK3UrdmU9PT0wJiZfPjApc3dpdGNoKHotXyl7Y2FzZSAyOmI9PT1zZSYmby5jaGFyQ29kZUF0KHotMyk9PT1xJiYodmU9Yik7Y2FzZSA4Ong9PT1jZSYmKHZlPXgpfWJyZWFrO2Nhc2UgcTpmK2QrdT09PTAmJihfPXopO2JyZWFrO2Nhc2UgSzpkK3ArZit1PT09MCYmKGJlPTEsemUrPVwiXFxyXCIpO2JyZWFrO2Nhc2UgSjpjYXNlIFk6MD09PWQmJihmPWY9PT13PzA6MD09PWY/dzpmKTticmVhaztjYXNlIFQ6ZitkK3A9PT0wJiZ1Kys7YnJlYWs7Y2FzZSBEOmYrZCtwPT09MCYmdS0tO2JyZWFrO2Nhc2UgQTpmK2QrdT09PTAmJnAtLTticmVhaztjYXNlIEg6ZitkK3U9PT0wJiYoMD09PU0mJigyKmIrMyp4PT01MzN8fChPPTAsTT0xKSkscCsrKTticmVhaztjYXNlIE46ZCtwK2YrdStfK0w9PT0wJiYoTD0xKTticmVhaztjYXNlIEc6Y2FzZSBYOmlmKGYrdStwPjApYnJlYWs7c3dpdGNoKGQpe2Nhc2UgMDpzd2l0Y2goMip3KzMqby5jaGFyQ29kZUF0KHorMSkpe2Nhc2UgMjM1OmQ9WDticmVhaztjYXNlIDIyMDpMZT16LGQ9R31icmVhaztjYXNlIEc6dz09PVgmJmI9PT1HJiZMZSsyIT09eiYmKDMzPT09by5jaGFyQ29kZUF0KExlKzIpJiYocWUrPW8uc3Vic3RyaW5nKExlLHorMSkpLHplPVwiXCIsZD0wKX19aWYoMD09PWQpe2lmKENlK2YrdStMPT09MCYmYSE9PWFlJiZ3IT09Uilzd2l0Y2godyl7Y2FzZSBLOmNhc2UgdGU6Y2FzZSBROmNhc2UgZWU6Y2FzZSBBOmNhc2UgSDppZigwPT09TSl7c3dpdGNoKGIpe2Nhc2UgJDpjYXNlIEY6Y2FzZSBCOmNhc2UgWjp6ZSs9XCJcXDBcIjticmVhaztkZWZhdWx0OnplPVwiXFwwXCIremUrKHc9PT1LP1wiXCI6XCJcXDBcIil9YmU9MX1lbHNlIHN3aXRjaCh3KXtjYXNlIEg6Xys3PT09eiYmMTA4PT09YiYmKF89MCksTT0rK087YnJlYWs7Y2FzZSBBOjA9PShNPS0tTykmJihiZT0xLHplKz1cIlxcMFwiKX1icmVhaztjYXNlICQ6Y2FzZSBGOnN3aXRjaChiKXtjYXNlIG5lOmNhc2UgVjpjYXNlIEk6Y2FzZSBSOmNhc2UgSzpjYXNlIHJlOmNhc2UgJDpjYXNlIEY6Y2FzZSBCOmNhc2UgWjpicmVhaztkZWZhdWx0OjA9PT1NJiYoYmU9MSx6ZSs9XCJcXDBcIil9fUdlKz16ZSx3IT09RiYmdyE9PSQmJihTPXcpfX14PWIsYj13LHorK31pZihMZT1xZS5sZW5ndGgseGU+MCYmMD09PUxlJiYwPT09WWUubGVuZ3RoJiYwPT09dFswXS5sZW5ndGg9PTAmJihhIT09aWV8fDE9PT10Lmxlbmd0aCYmKENlPjA/QWU6VGUpPT09dFswXSkmJihMZT10LmpvaW4oXCIsXCIpLmxlbmd0aCsyKSxMZT4wKXtpZihsPTA9PT1DZSYmYSE9PWFlP2Z1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLG89MCxhPWUubGVuZ3RoLGk9QXJyYXkoYSk7bzxhOysrbyl7Zm9yKHZhciBsPWVbb10uc3BsaXQoYykscz1cIlwiLHU9MCxkPTAscD0wLGY9MCxoPWwubGVuZ3RoO3U8aDsrK3UpaWYoISgwPT09KGQ9KG49bFt1XSkubGVuZ3RoKSYmaD4xKSl7aWYocD1zLmNoYXJDb2RlQXQocy5sZW5ndGgtMSksZj1uLmNoYXJDb2RlQXQoMCksdD1cIlwiLDAhPT11KXN3aXRjaChwKXtjYXNlIEc6Y2FzZSB0ZTpjYXNlIFE6Y2FzZSBlZTpjYXNlIEY6Y2FzZSBIOmJyZWFrO2RlZmF1bHQ6dD1cIiBcIn1zd2l0Y2goZil7Y2FzZSBXOm49dCtBZTtjYXNlIHRlOmNhc2UgUTpjYXNlIGVlOmNhc2UgRjpjYXNlIEE6Y2FzZSBIOmJyZWFrO2Nhc2UgVDpuPXQrbitBZTticmVhaztjYXNlIHE6c3dpdGNoKDIqbi5jaGFyQ29kZUF0KDEpKzMqbi5jaGFyQ29kZUF0KDIpKXtjYXNlIDUzMDppZih3ZT4wKXtuPXQrbi5zdWJzdHJpbmcoOCxkLTEpO2JyZWFrfWRlZmF1bHQ6KHU8MXx8bFt1LTFdLmxlbmd0aDwxKSYmKG49dCtBZStuKX1icmVhaztjYXNlIEs6dD1cIlwiO2RlZmF1bHQ6bj1kPjEmJm4uaW5kZXhPZihcIjpcIik+MD90K24ucmVwbGFjZSh5LFwiJDFcIitBZStcIiQyXCIpOnQrbitBZX1zKz1ufWlbb109cy5yZXBsYWNlKHIsXCJcIikudHJpbSgpfXJldHVybiBpfSh0KTp0LE9lPjAmJnZvaWQgMCE9PShzPVdlKGplLHFlLGwsZSxnZSxoZSxMZSxhLGksYSkpJiYwPT09KHFlPXMpLmxlbmd0aClyZXR1cm4gSmUrcWUrWWU7aWYocWU9bC5qb2luKFwiLFwiKStcIntcIitxZStcIn1cIixtZSp2ZSE9MCl7c3dpdGNoKDIhPT1tZXx8TmUocWUsMil8fCh2ZT0wKSx2ZSl7Y2FzZSBjZTpxZT1xZS5yZXBsYWNlKHYsXCI6XCIrRStcIiQxXCIpK3FlO2JyZWFrO2Nhc2Ugc2U6cWU9cWUucmVwbGFjZShnLFwiOjpcIitQK1wiaW5wdXQtJDFcIikrcWUucmVwbGFjZShnLFwiOjpcIitFK1wiJDFcIikrcWUucmVwbGFjZShnLFwiOlwiK2orXCJpbnB1dC0kMVwiKStxZX12ZT0wfX1yZXR1cm4gSmUrcWUrWWV9ZnVuY3Rpb24gQmUoZSx0LG4pe3ZhciByPXQudHJpbSgpLnNwbGl0KHUpLG89cixhPXIubGVuZ3RoLGk9ZS5sZW5ndGg7c3dpdGNoKGkpe2Nhc2UgMDpjYXNlIDE6Zm9yKHZhciBsPTAscz0wPT09aT9cIlwiOmVbMF0rXCIgXCI7bDxhOysrbClvW2xdPVplKHMsb1tsXSxuLGkpLnRyaW0oKTticmVhaztkZWZhdWx0Omw9MDt2YXIgYz0wO2ZvcihvPVtdO2w8YTsrK2wpZm9yKHZhciBkPTA7ZDxpOysrZClvW2MrK109WmUoZVtkXStcIiBcIixyW2xdLG4saSkudHJpbSgpfXJldHVybiBvfWZ1bmN0aW9uIFplKGUsdCxuLHIpe3ZhciBvPXQsYT1vLmNoYXJDb2RlQXQoMCk7c3dpdGNoKGE8MzMmJihhPShvPW8udHJpbSgpKS5jaGFyQ29kZUF0KDApKSxhKXtjYXNlIFc6c3dpdGNoKENlK3Ipe2Nhc2UgMDpjYXNlIDE6aWYoMD09PWUudHJpbSgpLmxlbmd0aClicmVhaztkZWZhdWx0OnJldHVybiBvLnJlcGxhY2UoZCxcIiQxXCIrZS50cmltKCkpfWJyZWFrO2Nhc2UgcTppZigxMDMhPT1vLmNoYXJDb2RlQXQoMSkpcmV0dXJuIGUudHJpbSgpK28ucmVwbGFjZShkLFwiJDFcIitlLnRyaW0oKSk7aWYod2U+MCYmQ2U+MClyZXR1cm4gby5yZXBsYWNlKHAsXCIkMVwiKS5yZXBsYWNlKGQsXCIkMVwiK1RlKTtkZWZhdWx0OmlmKG4qQ2U+MCYmby5pbmRleE9mKFwiXFxmXCIpPjApcmV0dXJuIG8ucmVwbGFjZShkLChlLmNoYXJDb2RlQXQoMCk9PT1xP1wiXCI6XCIkMVwiKStlLnRyaW0oKSl9cmV0dXJuIGUrb31mdW5jdGlvbiAkZShlLHQsbixyKXt2YXIgYyx1PTAsZD1lK1wiO1wiLHA9Mip0KzMqbis0KnI7aWYoOTQ0PT09cClyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgsbj1lLmluZGV4T2YoXCI6XCIsOSkrMSxyPWUuc3Vic3RyaW5nKDAsbikudHJpbSgpLG89ZS5zdWJzdHJpbmcobix0LTEpLnRyaW0oKTtzd2l0Y2goZS5jaGFyQ29kZUF0KDkpKlZlKXtjYXNlIDA6YnJlYWs7Y2FzZSBVOmlmKDExMCE9PWUuY2hhckNvZGVBdCgxMCkpYnJlYWs7ZGVmYXVsdDp2YXIgYT1vLnNwbGl0KChvPVwiXCIsbCkpLGk9MDtmb3Iobj0wLHQ9YS5sZW5ndGg7aTx0O249MCwrK2kpe2Zvcih2YXIgYz1hW2ldLHU9Yy5zcGxpdChzKTtjPXVbbl07KXt2YXIgZD1jLmNoYXJDb2RlQXQoMCk7aWYoMT09PVZlJiYoZD5OJiZkPDkwfHxkPjk2JiZkPDEyM3x8ZD09PXp8fGQ9PT1VJiZjLmNoYXJDb2RlQXQoMSkhPT1VKSYmaXNOYU4ocGFyc2VGbG9hdChjKSkrKC0xIT09Yy5pbmRleE9mKFwiKFwiKSk9PT0xKXN3aXRjaChjKXtjYXNlXCJpbmZpbml0ZVwiOmNhc2VcImFsdGVybmF0ZVwiOmNhc2VcImJhY2t3YXJkc1wiOmNhc2VcInJ1bm5pbmdcIjpjYXNlXCJub3JtYWxcIjpjYXNlXCJmb3J3YXJkc1wiOmNhc2VcImJvdGhcIjpjYXNlXCJub25lXCI6Y2FzZVwibGluZWFyXCI6Y2FzZVwiZWFzZVwiOmNhc2VcImVhc2UtaW5cIjpjYXNlXCJlYXNlLW91dFwiOmNhc2VcImVhc2UtaW4tb3V0XCI6Y2FzZVwicGF1c2VkXCI6Y2FzZVwicmV2ZXJzZVwiOmNhc2VcImFsdGVybmF0ZS1yZXZlcnNlXCI6Y2FzZVwiaW5oZXJpdFwiOmNhc2VcImluaXRpYWxcIjpjYXNlXCJ1bnNldFwiOmNhc2VcInN0ZXAtc3RhcnRcIjpjYXNlXCJzdGVwLWVuZFwiOmJyZWFrO2RlZmF1bHQ6Yys9SGV9dVtuKytdPWN9bys9KDA9PT1pP1wiXCI6XCIsXCIpK3Uuam9pbihcIiBcIil9fXJldHVybiBvPXIrbytcIjtcIiwxPT09bWV8fDI9PT1tZSYmTmUobywxKT9QK28rbzpvfShkKTtpZigwPT09bWV8fDI9PT1tZSYmIU5lKGQsMSkpcmV0dXJuIGQ7c3dpdGNoKHApe2Nhc2UgMTAxNTpyZXR1cm4gOTc9PT1kLmNoYXJDb2RlQXQoMTApP1ArZCtkOmQ7Y2FzZSA5NTE6cmV0dXJuIDExNj09PWQuY2hhckNvZGVBdCgzKT9QK2QrZDpkO2Nhc2UgOTYzOnJldHVybiAxMTA9PT1kLmNoYXJDb2RlQXQoNSk/UCtkK2Q6ZDtjYXNlIDEwMDk6aWYoMTAwIT09ZC5jaGFyQ29kZUF0KDQpKWJyZWFrO2Nhc2UgOTY5OmNhc2UgOTQyOnJldHVybiBQK2QrZDtjYXNlIDk3ODpyZXR1cm4gUCtkK0UrZCtkO2Nhc2UgMTAxOTpjYXNlIDk4MzpyZXR1cm4gUCtkK0UrZCtqK2QrZDtjYXNlIDg4MzpyZXR1cm4gZC5jaGFyQ29kZUF0KDgpPT09VT9QK2QrZDpkLmluZGV4T2YoXCJpbWFnZS1zZXQoXCIsMTEpPjA/ZC5yZXBsYWNlKF8sXCIkMVwiK1ArXCIkMlwiKStkOmQ7Y2FzZSA5MzI6aWYoZC5jaGFyQ29kZUF0KDQpPT09VSlzd2l0Y2goZC5jaGFyQ29kZUF0KDUpKXtjYXNlIDEwMzpyZXR1cm4gUCtcImJveC1cIitkLnJlcGxhY2UoXCItZ3Jvd1wiLFwiXCIpK1ArZCtqK2QucmVwbGFjZShcImdyb3dcIixcInBvc2l0aXZlXCIpK2Q7Y2FzZSAxMTU6cmV0dXJuIFArZCtqK2QucmVwbGFjZShcInNocmlua1wiLFwibmVnYXRpdmVcIikrZDtjYXNlIDk4OnJldHVybiBQK2QraitkLnJlcGxhY2UoXCJiYXNpc1wiLFwicHJlZmVycmVkLXNpemVcIikrZH1yZXR1cm4gUCtkK2orZCtkO2Nhc2UgOTY0OnJldHVybiBQK2QraitcImZsZXgtXCIrZCtkO2Nhc2UgMTAyMzppZig5OSE9PWQuY2hhckNvZGVBdCg4KSlicmVhaztyZXR1cm4gYz1kLnN1YnN0cmluZyhkLmluZGV4T2YoXCI6XCIsMTUpKS5yZXBsYWNlKFwiZmxleC1cIixcIlwiKS5yZXBsYWNlKFwic3BhY2UtYmV0d2VlblwiLFwianVzdGlmeVwiKSxQK1wiYm94LXBhY2tcIitjK1ArZCtqK1wiZmxleC1wYWNrXCIrYytkO2Nhc2UgMTAwNTpyZXR1cm4gYS50ZXN0KGQpP2QucmVwbGFjZShvLFwiOlwiK1ApK2QucmVwbGFjZShvLFwiOlwiK0UpK2Q6ZDtjYXNlIDFlMzpzd2l0Y2godT0oYz1kLnN1YnN0cmluZygxMykudHJpbSgpKS5pbmRleE9mKFwiLVwiKSsxLGMuY2hhckNvZGVBdCgwKStjLmNoYXJDb2RlQXQodSkpe2Nhc2UgMjI2OmM9ZC5yZXBsYWNlKHgsXCJ0YlwiKTticmVhaztjYXNlIDIzMjpjPWQucmVwbGFjZSh4LFwidGItcmxcIik7YnJlYWs7Y2FzZSAyMjA6Yz1kLnJlcGxhY2UoeCxcImxyXCIpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIGR9cmV0dXJuIFArZCtqK2MrZDtjYXNlIDEwMTc6aWYoLTE9PT1kLmluZGV4T2YoXCJzdGlja3lcIiw5KSlyZXR1cm4gZDtjYXNlIDk3NTpzd2l0Y2godT0oZD1lKS5sZW5ndGgtMTAscD0oYz0oMzM9PT1kLmNoYXJDb2RlQXQodSk/ZC5zdWJzdHJpbmcoMCx1KTpkKS5zdWJzdHJpbmcoZS5pbmRleE9mKFwiOlwiLDcpKzEpLnRyaW0oKSkuY2hhckNvZGVBdCgwKSsoMHxjLmNoYXJDb2RlQXQoNykpKXtjYXNlIDIwMzppZihjLmNoYXJDb2RlQXQoOCk8MTExKWJyZWFrO2Nhc2UgMTE1OmQ9ZC5yZXBsYWNlKGMsUCtjKStcIjtcIitkO2JyZWFrO2Nhc2UgMjA3OmNhc2UgMTAyOmQ9ZC5yZXBsYWNlKGMsUCsocD4xMDI/XCJpbmxpbmUtXCI6XCJcIikrXCJib3hcIikrXCI7XCIrZC5yZXBsYWNlKGMsUCtjKStcIjtcIitkLnJlcGxhY2UoYyxqK2MrXCJib3hcIikrXCI7XCIrZH1yZXR1cm4gZCtcIjtcIjtjYXNlIDkzODppZihkLmNoYXJDb2RlQXQoNSk9PT1VKXN3aXRjaChkLmNoYXJDb2RlQXQoNikpe2Nhc2UgMTA1OnJldHVybiBjPWQucmVwbGFjZShcIi1pdGVtc1wiLFwiXCIpLFArZCtQK1wiYm94LVwiK2MraitcImZsZXgtXCIrYytkO2Nhc2UgMTE1OnJldHVybiBQK2QraitcImZsZXgtaXRlbS1cIitkLnJlcGxhY2UoTyxcIlwiKStkO2RlZmF1bHQ6cmV0dXJuIFArZCtqK1wiZmxleC1saW5lLXBhY2tcIitkLnJlcGxhY2UoXCJhbGlnbi1jb250ZW50XCIsXCJcIikucmVwbGFjZShPLFwiXCIpK2R9YnJlYWs7Y2FzZSA5NzM6Y2FzZSA5ODk6aWYoZC5jaGFyQ29kZUF0KDMpIT09VXx8MTIyPT09ZC5jaGFyQ29kZUF0KDQpKWJyZWFrO2Nhc2UgOTMxOmNhc2UgOTUzOmlmKCEwPT09TC50ZXN0KGUpKXJldHVybiAxMTU9PT0oYz1lLnN1YnN0cmluZyhlLmluZGV4T2YoXCI6XCIpKzEpKS5jaGFyQ29kZUF0KDApPyRlKGUucmVwbGFjZShcInN0cmV0Y2hcIixcImZpbGwtYXZhaWxhYmxlXCIpLHQsbixyKS5yZXBsYWNlKFwiOmZpbGwtYXZhaWxhYmxlXCIsXCI6c3RyZXRjaFwiKTpkLnJlcGxhY2UoYyxQK2MpK2QucmVwbGFjZShjLEUrYy5yZXBsYWNlKFwiZmlsbC1cIixcIlwiKSkrZDticmVhaztjYXNlIDk2MjppZihkPVArZCsoMTAyPT09ZC5jaGFyQ29kZUF0KDUpP2orZDpcIlwiKStkLG4rcj09PTIxMSYmMTA1PT09ZC5jaGFyQ29kZUF0KDEzKSYmZC5pbmRleE9mKFwidHJhbnNmb3JtXCIsMTApPjApcmV0dXJuIGQuc3Vic3RyaW5nKDAsZC5pbmRleE9mKFwiO1wiLDI3KSsxKS5yZXBsYWNlKGksXCIkMVwiK1ArXCIkMlwiKStkfXJldHVybiBkfWZ1bmN0aW9uIE5lKGUsdCl7dmFyIG49ZS5pbmRleE9mKDE9PT10P1wiOlwiOlwie1wiKSxyPWUuc3Vic3RyaW5nKDAsMyE9PXQ/bjoxMCksbz1lLnN1YnN0cmluZyhuKzEsZS5sZW5ndGgtMSk7cmV0dXJuIE1lKDIhPT10P3I6ci5yZXBsYWNlKE0sXCIkMVwiKSxvLHQpfWZ1bmN0aW9uIEZlKGUsdCl7dmFyIG49JGUodCx0LmNoYXJDb2RlQXQoMCksdC5jaGFyQ29kZUF0KDEpLHQuY2hhckNvZGVBdCgyKSk7cmV0dXJuIG4hPT10K1wiO1wiP24ucmVwbGFjZShTLFwiIG9yICgkMSlcIikuc3Vic3RyaW5nKDQpOlwiKFwiK3QrXCIpXCJ9ZnVuY3Rpb24gV2UoZSx0LG4scixvLGEsaSxsLHMsYyl7Zm9yKHZhciB1LGQ9MCxwPXQ7ZDxPZTsrK2Qpc3dpdGNoKHU9U2VbZF0uY2FsbChHZSxlLHAsbixyLG8sYSxpLGwscyxjKSl7Y2FzZSB2b2lkIDA6Y2FzZSExOmNhc2UhMDpjYXNlIG51bGw6YnJlYWs7ZGVmYXVsdDpwPXV9aWYocCE9PXQpcmV0dXJuIHB9ZnVuY3Rpb24gVWUoZSx0LG4scil7Zm9yKHZhciBvPXQrMTtvPG47KytvKXN3aXRjaChyLmNoYXJDb2RlQXQobykpe2Nhc2UgWDppZihlPT09RyYmci5jaGFyQ29kZUF0KG8tMSk9PT1HJiZ0KzIhPT1vKXJldHVybiBvKzE7YnJlYWs7Y2FzZSBCOmlmKGU9PT1YKXJldHVybiBvKzF9cmV0dXJuIG99ZnVuY3Rpb24gemUoZSl7Zm9yKHZhciB0IGluIGUpe3ZhciBuPWVbdF07c3dpdGNoKHQpe2Nhc2VcImtleWZyYW1lXCI6VmU9MHxuO2JyZWFrO2Nhc2VcImdsb2JhbFwiOndlPTB8bjticmVhaztjYXNlXCJjYXNjYWRlXCI6Q2U9MHxuO2JyZWFrO2Nhc2VcImNvbXByZXNzXCI6YmU9MHxuO2JyZWFrO2Nhc2VcInNlbWljb2xvblwiOnllPTB8bjticmVhaztjYXNlXCJwcmVzZXJ2ZVwiOnhlPTB8bjticmVhaztjYXNlXCJwcmVmaXhcIjpNZT1udWxsLG4/XCJmdW5jdGlvblwiIT10eXBlb2Ygbj9tZT0xOihtZT0yLE1lPW4pOm1lPTB9fXJldHVybiB6ZX1mdW5jdGlvbiBHZSh0LG4pe2lmKHZvaWQgMCE9PXRoaXMmJnRoaXMuY29uc3RydWN0b3I9PT1HZSlyZXR1cm4gZSh0KTt2YXIgbz10LGE9by5jaGFyQ29kZUF0KDApO2E8MzMmJihhPShvPW8udHJpbSgpKS5jaGFyQ29kZUF0KDApKSxWZT4wJiYoSGU9by5yZXBsYWNlKGYsYT09PVQ/XCJcIjpcIi1cIikpLGE9MSwxPT09Q2U/VGU9bzpBZT1vO3ZhciBpLGw9W1RlXTtPZT4wJiZ2b2lkIDAhPT0oaT1XZShfZSxuLGwsbCxnZSxoZSwwLDAsMCwwKSkmJlwic3RyaW5nXCI9PXR5cGVvZiBpJiYobj1pKTt2YXIgcz1EZShrZSxsLG4sMCwwKTtyZXR1cm4gT2U+MCYmdm9pZCAwIT09KGk9V2UoTGUscyxsLGwsZ2UsaGUscy5sZW5ndGgsMCwwLDApKSYmXCJzdHJpbmdcIiE9dHlwZW9mKHM9aSkmJihhPTApLEhlPVwiXCIsVGU9XCJcIixBZT1cIlwiLHZlPTAsZ2U9MSxoZT0xLGJlKmE9PTA/czpzLnJlcGxhY2UocixcIlwiKS5yZXBsYWNlKEMsXCJcIikucmVwbGFjZShtLFwiJDFcIikucmVwbGFjZSh3LFwiJDFcIikucmVwbGFjZShiLFwiIFwiKX1yZXR1cm4gR2UudXNlPWZ1bmN0aW9uIGUodCl7c3dpdGNoKHQpe2Nhc2Ugdm9pZCAwOmNhc2UgbnVsbDpPZT1TZS5sZW5ndGg9MDticmVhaztkZWZhdWx0OmlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpU2VbT2UrK109dDtlbHNlIGlmKFwib2JqZWN0XCI9PXR5cGVvZiB0KWZvcih2YXIgbj0wLHI9dC5sZW5ndGg7bjxyOysrbillKHRbbl0pO2Vsc2UgSWU9MHwhIXR9cmV0dXJuIGV9LEdlLnNldD16ZSx2b2lkIDAhPT10JiZ6ZSh0KSxHZX0obnVsbCl9LDM2MTplPT57ZS5leHBvcnRzPXthcmVhOiEwLGJhc2U6ITAsYnI6ITAsY29sOiEwLGVtYmVkOiEwLGhyOiEwLGltZzohMCxpbnB1dDohMCxsaW5rOiEwLG1ldGE6ITAscGFyYW06ITAsc291cmNlOiEwLHRyYWNrOiEwLHdicjohMH19fSx0PXt9O2Z1bmN0aW9uIG4ocil7dmFyIG89dFtyXTtpZih2b2lkIDAhPT1vKXJldHVybiBvLmV4cG9ydHM7dmFyIGE9dFtyXT17ZXhwb3J0czp7fX07cmV0dXJuIGVbcl0oYSxhLmV4cG9ydHMsbiksYS5leHBvcnRzfW4ubj1lPT57dmFyIHQ9ZSYmZS5fX2VzTW9kdWxlPygpPT5lLmRlZmF1bHQ6KCk9PmU7cmV0dXJuIG4uZCh0LHthOnR9KSx0fSxuLmQ9KGUsdCk9Pntmb3IodmFyIHIgaW4gdCluLm8odCxyKSYmIW4ubyhlLHIpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLHtlbnVtZXJhYmxlOiEwLGdldDp0W3JdfSl9LG4uZz1mdW5jdGlvbigpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBnbG9iYWxUaGlzKXJldHVybiBnbG9iYWxUaGlzO3RyeXtyZXR1cm4gdGhpc3x8bmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKX1jYXRjaChlKXtpZihcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93KXJldHVybiB3aW5kb3d9fSgpLG4ubz0oZSx0KT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCksbi5yPWU9PntcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6XCJNb2R1bGVcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSxuLm5jPXZvaWQgMDt2YXIgcj17fTsoKCk9PntcInVzZSBzdHJpY3RcIjt2YXIgZSx0LG8sYSxpLGwscyxjO24ucihyKSxuLmQocix7QXBwTWFuaWZlc3RUeXBlOigpPT5zLEJvb2ttYXJrSXRlbUNvbnRleHRNZW51T3B0aW9uVHlwZTooKT0+bSxCcm93c2VyQnV0dG9uVHlwZTooKT0+YixDb2xvclNjaGVtZU9wdGlvblR5cGU6KCk9PmcsQ3VzdG9tQWN0aW9uQ2FsbGVyVHlwZTooKT0+ayxFbnRlcnByaXNlTWFpbkNvbnRleHRNZW51T3B0aW9uVHlwZTooKT0+QyxHbG9iYWxDb250ZXh0TWVudU9wdGlvblR5cGU6KCk9PmgsUGFnZUNoYW5nZUV2ZW50VHlwZTooKT0+ZixQYWdlVGFiQ29udGV4dE1lbnVPcHRpb25UeXBlOigpPT52LFBhbmVsUG9zaXRpb246KCk9PnAsU1VQUE9SVEVEX0xBTkdVQUdFUzooKT0+TS5TVVBQT1JURURfTEFOR1VBR0VTLFNhdmVCdXR0b25Db250ZXh0TWVudU9wdGlvblR5cGU6KCk9PnksU2F2ZU1vZGFsVHlwZTooKT0+UyxWaWV3VGFiTWVudU9wdGlvblR5cGU6KCk9PncsV2luZG93VHlwZTooKT0+eCxnZXRDdXJyZW50U3luYzooKT0+THQsaW5pdDooKT0+b2wsd3JhcFN5bmM6KCk9Pk10fSksZnVuY3Rpb24oZSl7ZS5GZXRjaGluZz1cImZldGNoaW5nXCIsZS5GZXRjaGVkPVwiZmV0Y2hlZFwiLGUuQ29tcGxldGU9XCJjb21wbGV0ZVwifShlfHwoZT17fSkpLGZ1bmN0aW9uKGUpe2UuVXNlckFjdGlvbj1cInVzZXItYWN0aW9uXCIsZS5Gb2N1c0NoYW5nZT1cImZvY3VzLWNoYW5nZVwiLGUuUmVsb2FkPVwicmVsb2FkXCJ9KHR8fCh0PXt9KSksZnVuY3Rpb24oZSl7ZS5BY3RpdmU9XCJhY3RpdmVcIixlLkRlZmF1bHQ9XCJkZWZhdWx0XCJ9KG98fChvPXt9KSksZnVuY3Rpb24oZSl7ZS5TdWdnZXN0aW9uPVwic3VnZ2VzdGlvblwifShhfHwoYT17fSkpLGZ1bmN0aW9uKGUpe2UuQ29udGFjdD1cIkNvbnRhY3RcIixlLkN1c3RvbT1cIkN1c3RvbVwiLGUuTGlzdD1cIkxpc3RcIixlLlBsYWluPVwiUGxhaW5cIixlLlNpbXBsZVRleHQ9XCJTaW1wbGVUZXh0XCIsZS5Mb2FkaW5nPVwiTG9hZGluZ1wiLGUuRXJyb3I9XCJFcnJvclwifShpfHwoaT17fSkpLGZ1bmN0aW9uKGUpe2UuTXVsdGlTZWxlY3Q9XCJNdWx0aVNlbGVjdFwifShsfHwobD17fSkpLGZ1bmN0aW9uKGUpe2UuU25hcHNob3Q9XCJzbmFwc2hvdFwiLGUuTWFuaWZlc3Q9XCJtYW5pZmVzdFwiLGUuVmlldz1cInZpZXdcIixlLkV4dGVybmFsPVwiZXh0ZXJuYWxcIn0oc3x8KHM9e30pKSxmdW5jdGlvbihlKXtlLkxhbmRpbmdQYWdlPVwibGFuZGluZ1BhZ2VcIixlLkFwcEdyaWQ9XCJhcHBHcmlkXCJ9KGN8fChjPXt9KSk7dmFyIHUsZCxwOyFmdW5jdGlvbihlKXtlLlByaW1hcnk9XCJwcmltYXJ5XCIsZS5TZWNvbmRhcnk9XCJzZWNvbmRhcnlcIixlLlRleHRPbmx5PVwidGV4dE9ubHlcIn0odXx8KHU9e30pKSxmdW5jdGlvbihlKXtlLkFjdGlvbkJ1dHRvbj1cIkFjdGlvbkJ1dHRvblwiLGUuRHJvcGRvd25CdXR0b249XCJEcm9wZG93bkJ1dHRvblwifShkfHwoZD17fSkpLGZ1bmN0aW9uKGUpe2UuTGVmdD1cIkxlZnRcIixlLlJpZ2h0PVwiUmlnaHRcIixlLlRvcD1cIlRvcFwiLGUuQm90dG9tPVwiQm90dG9tXCJ9KHB8fChwPXt9KSk7dmFyIGYsaCxnLHYsQyxtLHcsYix5LHgsayxTLE8sTT1uKDMwNCk7IWZ1bmN0aW9uKGUpe2UuVXJsQ2hhbmdlPVwiVVJMX0NIQU5HRVwiLGUuVmlld0FkZGVkPVwiVklFV19BRERFRFwiLGUuVmlld1JlbW92ZWQ9XCJWSUVXX1JFTU9WRURcIixlLlBhZ2VDb250ZXh0QWRkZWQ9XCJQQUdFX0NPTlRFWFRfQURERURcIixlLlBhZ2VDb250ZXh0UmVtb3ZlZD1cIlBBR0VfQ09OVEVYVF9SRU1PVkVEXCJ9KGZ8fChmPXt9KSksZnVuY3Rpb24oZSl7ZS5OZXdXaW5kb3c9XCJOZXdXaW5kb3dcIixlLk5ld1BhZ2U9XCJOZXdQYWdlXCIsZS5TYXZlUGFnZT1cIlNhdmVQYWdlXCIsZS5TYXZlUGFnZUFzPVwiU2F2ZVBhZ2VBc1wiLGUuUHJpbnQ9XCJQcmludFwiLGUuUHJpbnRBbGw9XCJQcmludEFsbFwiLGUuUHJpbnRTY3JlZW49XCJQcmludFNjcmVlblwiLGUuQ2xvc2VXaW5kb3c9XCJDbG9zZVdpbmRvd1wiLGUuUmVzdG9yZUNoYW5nZXM9XCJSZXN0b3JlQ2hhbmdlc1wiLGUuU2F2ZVdvcmtzcGFjZT1cIlNhdmVXb3Jrc3BhY2VcIixlLlNhdmVXb3Jrc3BhY2VBcz1cIlNhdmVXb3Jrc3BhY2VBc1wiLGUuUmVuYW1lV29ya3NwYWNlPVwiUmVuYW1lV29ya3NwYWNlXCIsZS5Td2l0Y2hXb3Jrc3BhY2U9XCJTd2l0Y2hXb3Jrc3BhY2VcIixlLkRlbGV0ZVdvcmtzcGFjZT1cIkRlbGV0ZVdvcmtzcGFjZVwiLGUuRG93bmxvYWRzPVwiRG93bmxvYWRzXCIsZS5PcGVuU3RvcmVmcm9udD1cIk9wZW5TdG9yZWZyb250XCIsZS5BcHBlYXJhbmNlPVwiQXBwZWFyYW5jZVwiLGUuUXVpdD1cIlF1aXRcIixlLkN1c3RvbT1cIkN1c3RvbVwifShofHwoaD17fSkpLGZ1bmN0aW9uKGUpe2UuTGlnaHQ9XCJsaWdodFwiLGUuRGFyaz1cImRhcmtcIixlLlN5c3RlbT1cInN5c3RlbVwifShnfHwoZz17fSkpLGZ1bmN0aW9uKGUpe2UuQ2xvc2U9XCJDbG9zZVwiLGUuRHVwbGljYXRlPVwiRHVwbGljYXRlXCIsZS5SZW5hbWU9XCJSZW5hbWVcIixlLlNhdmU9XCJTYXZlXCIsZS5TYXZlQXM9XCJTYXZlIEFzXCIsZS5OZXdQYWdlPVwiTmV3IFBhZ2VcIixlLkRlbGV0ZVBhZ2U9XCJEZWxldGUgUGFnZVwiLGUuU2F2ZVdvcmtzcGFjZUFzPVwiU2F2ZVdvcmtzcGFjZUFzXCIsZS5SZWZyZXNoPVwiUmVmcmVzaFwiLGUuQ2xvc2VPdGhlcnM9XCJDbG9zZSBvdGhlcnNcIixlLkRlbGV0ZT1cIkRlbGV0ZVwiLGUuQ3VzdG9tPVwiQ3VzdG9tXCJ9KHZ8fCh2PXt9KSksZnVuY3Rpb24oZSl7ZS5Mb2NrPVwiTG9ja1wiLGUuU2hvd0hpZGVUYWJzPVwiU2hvd0hpZGVUYWJzXCIsZS5BZGRUb0NoYW5lbD1cIkFkZFRvQ2hhbm5lbFwiLGUuUHJpbnQ9XCJQcmludFwiLGUuUGluPVwiUGluXCJ9KEN8fChDPXt9KSksZnVuY3Rpb24oZSl7ZS5FZGl0TmFtZT1cIkVkaXQgTmFtZVwiLGUuTW92ZT1cIk1vdmVcIixlLkRlbGV0ZT1cIkRlbGV0ZVwifShtfHwobT17fSkpLGZ1bmN0aW9uKGUpe2UuTmV3Vmlldz1cIk5ld1ZpZXdcIixlLkR1cGxpY2F0ZVZpZXdzPVwiRHVwbGljYXRlVmlld1wiLGUuT3BlbldpdGhEZWZhdWx0QnJvd3Nlcj1cIk9wZW5XaXRoRGVmYXVsdEJyb3dzZXJcIixlLlJlbG9hZFZpZXdzPVwiUmVsb2FkVGFiXCIsZS5DbG9zZVZpZXdzPVwiQ2xvc2VUYWJcIixlLkFkZFRvQ2hhbm5lbD1cIkFkZFRvQ2hhbm5lbFwiLGUuUmVtb3ZlRnJvbUNoYW5uZWw9XCJSZW1vdmVGcm9tQ2hhbm5lbFwiLGUuQmFjaz1cIkJhY2tcIixlLkZvcndhcmQ9XCJGb3J3YXJkXCIsZS5QcmludD1cIlByaW50XCIsZS5QcmludEFsbD1cIlByaW50QWxsXCIsZS5QcmludFNjcmVlbj1cIlByaW50U2NyZWVuXCIsZS5DdXN0b209XCJDdXN0b21cIn0od3x8KHc9e30pKSxmdW5jdGlvbihlKXtlLlNob3dIaWRlVGFicz1cIlNob3dIaWRlVGFic1wiLGUuQ29sb3JMaW5raW5nPVwiQ29sb3JMaW5raW5nXCIsZS5QcmVzZXRMYXlvdXRzPVwiUHJlc2V0TGF5b3V0c1wiLGUuTG9ja1VubG9ja1BhZ2U9XCJMb2NrVW5sb2NrUGFnZVwiLGUuU2F2ZU1lbnU9XCJTYXZlTWVudVwiLGUuU2F2ZVBhZ2U9XCJTYXZlUGFnZVwiLGUuTWluaW1pc2U9XCJNaW5pbWlzZVwiLGUuTWF4aW1pc2U9XCJNYXhpbWlzZVwiLGUuQ2xvc2U9XCJDbG9zZVwiLGUuQ3VzdG9tPVwiQ3VzdG9tXCJ9KGJ8fChiPXt9KSksZnVuY3Rpb24oZSl7ZS5TYXZlUGFnZT1cIlNhdmVQYWdlXCIsZS5TYXZlV29ya3NwYWNlPVwiU2F2ZVdvcmtzcGFjZVwiLGUuU2F2ZVBhZ2VBcz1cIlNhdmVQYWdlQXNcIixlLlNhdmVXb3Jrc3BhY2VBcz1cIlNhdmVXb3Jrc3BhY2VBc1wiLGUuQ3VzdG9tPVwiQ3VzdG9tXCJ9KHl8fCh5PXt9KSksZnVuY3Rpb24oZSl7ZS5Ccm93c2VyPVwiYnJvd3NlclwiLGUuUGxhdGZvcm09XCJwbGF0Zm9ybVwifSh4fHwoeD17fSkpLGZ1bmN0aW9uKGUpe2UuQ3VzdG9tQnV0dG9uPVwiQ3VzdG9tQnV0dG9uXCIsZS5TdG9yZUN1c3RvbUJ1dHRvbj1cIlN0b3JlQ3VzdG9tQnV0dG9uXCIsZS5DdXN0b21Ecm9wZG93bkl0ZW09XCJDdXN0b21Ecm9wZG93bkl0ZW1cIixlLkdsb2JhbENvbnRleHRNZW51PVwiR2xvYmFsQ29udGV4dE1lbnVcIixlLlZpZXdUYWJDb250ZXh0TWVudT1cIlZpZXdUYWJDb250ZXh0TWVudVwiLGUuUGFnZVRhYkNvbnRleHRNZW51PVwiUGFnZVRhYkNvbnRleHRNZW51XCIsZS5TYXZlQnV0dG9uQ29udGV4dE1lbnU9XCJTYXZlQnV0dG9uQ29udGV4dE1lbnVcIixlLkFQST1cIkFQSVwifShrfHwoaz17fSkpLGZ1bmN0aW9uKGUpe2UuU0FWRV9QQUdFPVwiU0FWRV9QQUdFXCIsZS5TQVZFX1dPUktTUEFDRT1cIlNBVkVfV09SS1NQQUNFXCIsZS5TQVZFX1BBR0VfQVM9XCJTQVZFX1BBR0VfQVNcIixlLlNBVkVfV09SS1NQQUNFX0FTPVwiU0FWRV9XT1JLU1BBQ0VfQVNcIixlLlJFTkFNRV9QQUdFPVwiUkVOQU1FX1BBR0VcIixlLlJFTkFNRV9XT1JLU1BBQ0U9XCJSRU5BTUVfV09SS1NQQUNFXCJ9KFN8fChTPXt9KSksZnVuY3Rpb24oZSl7ZS5Mb2NhbD1cImxvY2FsXCIsZS5EZXY9XCJkZXZcIixlLlN0YWdpbmc9XCJzdGFnaW5nXCIsZS5Qcm9kPVwicHJvZFwifShPfHwoTz17fSkpO2NvbnN0IEw9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGZpbixfPShcInVuZGVmaW5lZFwiPT10eXBlb2YgcHJvY2Vzc3x8cHJvY2Vzcy5lbnYsXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyksUD1fJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgaW5kZXhlZERCLEU9Xz93aW5kb3cub3JpZ2luOk8uTG9jYWwsaj1MJiZmaW4ubWUudXVpZCxSPUwmJmZpbi5tZS5uYW1lLEk9TCYmZmluLm1lLmVudGl0eVR5cGUsVj0oTy5Mb2NhbCxPLkRldixPLlN0YWdpbmcsXCJwcm9kXCI9PT1PLlByb2QpLEg9ZT0+ZS5zdGFydHNXaXRoKFwiaHR0cDovL1wiKXx8ZS5zdGFydHNXaXRoKFwiaHR0cHM6Ly9cIik/ZTpFK2UsQT1IKFwiaHR0cHM6Ly93b3Jrc3BhY2Uub3BlbmZpbi5jby93b3Jrc3BhY2UvMjAuMS41XCIpLFQ9SChcImh0dHBzOi8vd29ya3NwYWNlLm9wZW5maW4uY28vd29ya3NwYWNlLzIwLjEuNVwiKSxEPShcInVuZGVmaW5lZFwiIT10eXBlb2YgV09SS1NQQUNFX0RPQ1NfUExBVEZPUk1fVVJMJiZIKFdPUktTUEFDRV9ET0NTX1BMQVRGT1JNX1VSTCksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFdPUktTUEFDRV9ET0NTX0NMSUVOVF9VUkwmJkgoV09SS1NQQUNFX0RPQ1NfQ0xJRU5UX1VSTCksXCI0MC4xMzAuMTAxLjFcIiksQj1cIjIwLjEuNVwiO1widW5kZWZpbmVkXCIhPXR5cGVvZiBXT1JLU1BBQ0VfQlVJTERfU0hBJiZXT1JLU1BBQ0VfQlVJTERfU0hBO3ZhciBaPW4oMzc4KTtjb25zdCAkPWU9PmZpbi5TeXN0ZW0uZ2V0U3lzdGVtQXBwQ29uZmlnKGUpO2xldCBOO2FzeW5jIGZ1bmN0aW9uIEYoKXtpZihOKXJldHVybiBOO2NvbnN0IGU9XCJnZXRPdmVycmlkZXNcIjtpZighTClyZXR1cm4gXyYmY29uc29sZS53YXJuKGAke2V9OiBUaGUgRmluIEFQSSB3YXMgbm90IGF2YWlsYWJsZS4gUmV0dXJuaW5nIGFuIGVtcHR5IHJlc3VsdC5gKSx7fTtjb25zdCB0PWF3YWl0IGFzeW5jIGZ1bmN0aW9uKCl7Y29uc3QgZT1cImdldERPU092ZXJyaWRlc1wiO2lmKCFMKXJldHVybiBjb25zb2xlLndhcm4oYCR7ZX06IHRoZSBmaW4gQVBJIHdhcyBub3QgYXZhaWxhYmxlLCByZXR1cm5pbmcgbm8gcmVzdWx0YCkse307dHJ5e2xldCB0PWF3YWl0ICQoXCJ3b3Jrc3BhY2VcIikuY2F0Y2goKHQ9Pntjb25zb2xlLndhcm4oYCR7ZX06IGN1c3RvbUNvbmZpZyBlbnRyeSBmb3IgU3lzdGVtQXBwIHdvcmtzcGFjZSBub3QgYXZhaWxhYmxlIGluIERlc2t0b3AgT3duZXIgU2V0dGluZ3MuICR7dD8ubWVzc2FnZX1gKX0pKTtyZXR1cm4gdHx8KHQ9YXdhaXQgJChcImhvbWVcIikpLEpTT04uc3RyaW5naWZ5KHQpLHR9Y2F0Y2godCl7aWYoIVYpcmV0dXJue307aWYoISh0IGluc3RhbmNlb2YgRXJyb3IpKXRocm93IHQ7Y29uc29sZS53YXJuKGAke2V9OiBNaXNzaW5nIFdvcmtzcGFjZSBEZXNrdG9wIE93bmVyIFNldHRpbmdzIGNvbmZpZ3VyYXRpb24sIHVzaW5nIGRlZmF1bHRzLiAke3Q/Lm1lc3NhZ2V9YCl9cmV0dXJue319KCksbj1hd2FpdCBhc3luYyBmdW5jdGlvbigpe2NvbnN0IGU9XCJnZXRNYW5pZmVzdE92ZXJyaWRlc1wiLHttYW5pZmVzdDp0LGluaXRpYWxPcHRpb25zOm59PWF3YWl0IGZpbi5BcHBsaWNhdGlvbi5nZXRDdXJyZW50U3luYygpLmdldEluZm8oKTtyZXR1cm4gdD8ucGxhdGZvcm0ud29ya3NwYWNlfHx0Py5wbGF0Zm9ybS5ob21lfHxuPy53b3Jrc3BhY2V8fG4/LmhvbWV8fGNvbnNvbGUud2FybihgJHtlfTogTWlzc2luZyBIb21lIGRldmVsb3BtZW50IG1hbmlmZXN0IG92ZXJyaWRlcywgdXNpbmcgRGVza3RvcCBPd25lciBTZXR0aW5ncy5gKSx0Py5wbGF0Zm9ybS53b3Jrc3BhY2U/KEpTT04uc3RyaW5naWZ5KHQ/LnBsYXRmb3JtLndvcmtzcGFjZSksdD8ucGxhdGZvcm0ud29ya3NwYWNlKTp0Py5wbGF0Zm9ybS5ob21lPyhKU09OLnN0cmluZ2lmeSh0Py5wbGF0Zm9ybS5ob21lKSx0Py5wbGF0Zm9ybS5ob21lKTpuPy53b3Jrc3BhY2U/KEpTT04uc3RyaW5naWZ5KG4/LndvcmtzcGFjZSksbj8ud29ya3NwYWNlKTpuPy5ob21lPyhKU09OLnN0cmluZ2lmeShuPy5ob21lKSxuPy5ob21lKTp7fX0oKTtyZXR1cm4gTj17Li4ubiwuLi50fSxOfWxldCBXO2FzeW5jIGZ1bmN0aW9uIFUoKXtjb25zdCBlPShhd2FpdCBGKCkpLmJyb3dzZXJCYXNlVXJsO2lmKGUpdHJ5e2NvbnN0IHQ9bmV3IFVSTChlKTtpZih0LnBhdGhuYW1lLmVuZHNXaXRoKFwiL1wiKSl0LnBhdGhuYW1lPXQucGF0aG5hbWUuc2xpY2UoMCwtMSk7ZWxzZXtpZihcIi93b3Jrc3BhY2VcIj09PXQucGF0aG5hbWUpcmV0dXJuIHQucGF0aG5hbWUrPWAvJHtCfWAsdC50b1N0cmluZygpO2NvbnNvbGUud2FybihgQG9wZW5maW4vd29ya3NwYWNlLXBsYXRmb3JtOiBicm93c2VyT3ZlcnJpZGVCYXNlVXJsIG11c3QgYmUgYSB2YWxpZCB1cmwsIHdpdGggcGF0aDogL3dvcmtzcGFjZS4gRXhwZWN0ZWQgPHByb3RvY29sPjovLzxvcHRpb25hbCBzdWJkb21haW4+Ljxkb21haW4+L3dvcmtzcGFjZSBidXQgZ290ICR7ZX1gKX19Y2F0Y2godCl7Y29uc29sZS53YXJuKGBAb3BlbmZpbi93b3Jrc3BhY2UtcGxhdGZvcm06IGJyb3dzZXJPdmVycmlkZUJhc2VVcmwgbXVzdCBiZSBhIHZhbGlkIHVybC4gRXhwZWN0ZWQgPHByb3RvY29sPjovLzxvcHRpb25hbCBzdWJkb21haW4+Ljxkb21haW4+L3dvcmtzcGFjZSBidXQgZ290ICR7ZX1gKX1yZXR1cm4gVz8/VH12YXIgejshZnVuY3Rpb24oZSl7ZS5Ib21lPVwiL2hvbWUvXCIsZS5Ib21lU2VhcmNoPVwiL2hvbWUvP2RlZXBsaW5rPXNlYXJjaFwiLGUuSG9tZVBhZ2VzUmVuYW1lPVwiL2hvbWUvcGFnZXMvcmVuYW1lL1wiLGUuRG9jaz1cIi9kb2NrL1wiLGUuQnJvd3Nlcj1cIi9icm93c2VyL1wiLGUuQnJvd3NlclBvcHVwTWVudT1cIi9icm93c2VyL3BvcHVwLW1lbnUvXCIsZS5Qcm92aWRlcj1cIi9wcm92aWRlci9cIixlLkJyb3dzZXJQb3B1cE1lbnVTYXZlTW9kYWw9XCIvYnJvd3Nlci9wb3B1cC1tZW51L3NhdmUtbW9kYWwvXCIsZS5Ccm93c2VyUG9wdXBNZW51TGF5b3V0cz1cIi9icm93c2VyL3BvcHVwLW1lbnUvbGF5b3V0cy9sYXlvdXRzL1wiLGUuQnJvd3NlclBvcHVwTWVudUNvbG9yTGlua2luZz1cIi9icm93c2VyL3BvcHVwLW1lbnUvY29sb3ItbGlua2luZy9jb2xvci1saW5raW5nL1wiLGUuQnJvd3NlckluZGljYXRvcj1cIi9icm93c2VyL2luZGljYXRvci9cIixlLkJyb3dzZXJQb3B1cE1lbnVBZGRyZXNzU2VhcmNoUmVzdWx0c1ZpZXc9XCIvYnJvd3Nlci9wb3B1cC1tZW51L2FkZHJlc3Mtc2VhcmNoLXJlc3VsdHMtdmlldy9cIixlLlJlc3BvbnNlTW9kYWw9XCIvYnJvd3Nlci9wb3B1cC1tZW51L3Jlc3BvbnNlLW1vZGFsL1wiLGUuQ2xvc2VDb25maXJtYXRpb25Nb2RhbD1cIi9icm93c2VyL3BvcHVwLW1lbnUvY2xvc2UtY29uZmlybWF0aW9uLW1vZGFsL1wiLGUuRG9jcz1cIi9wcm92aWRlci9kb2NzL1wiLGUuU3RvcmVmcm9udD1cIi9zdG9yZWZyb250L1wiLGUuRGVwcmVjYXRlZEFsZXJ0PVwiL3Byb3ZpZGVyL2RlcHJlY2F0ZWQtYWxlcnQvXCIsZS5BbmFseXRpY3M9XCIvcHJvdmlkZXIvYW5hbHl0aWNzL1wiLGUuRW50ZXJwcmlzZUJyb3dzZXI9XCIvYnJvd3Nlci9lbnRlcnByaXNlL1wiLGUuRW50ZXJwcmlzZUNvbnRleHRNZW51PVwiL2Jyb3dzZXIvZW50ZXJwcmlzZS9jb250ZXh0LW1lbnUvXCIsZS5FbnRlcnByaXNlQm9va21hcmtEaWFsb2c9XCIvYnJvd3Nlci9lbnRlcnByaXNlL2Jvb2ttYXJrLWRpYWxvZy9cIixlLkRyb3Bkb3duTWVudT1cIi9icm93c2VyL2VudGVycHJpc2UvZHJvcGRvd24tbWVudS9cIn0oenx8KHo9e30pKTt2YXIgRzshZnVuY3Rpb24oZSl7ZS5TZWFyY2g9XCJzZWFyY2hcIn0oR3x8KEc9e30pKTtjb25zdCBLPXo7dmFyIHEsWTshZnVuY3Rpb24oZSl7ZS5Xb3Jrc3BhY2U9XCJvcGVuZmluLXdvcmtzcGFjZVwiLGUuT2xkV29ya3NwYWNlPVwib3BlbmZpbi1icm93c2VyXCJ9KHF8fChxPXt9KSksZnVuY3Rpb24oZSl7ZS5GaW5Qcm90b2NvbD1cImZpbi1wcm90b2NvbFwifShZfHwoWT17fSkpO2NvbnN0IEo9e3V1aWQ6an0sWD0ocS5Xb3Jrc3BhY2UsZT0+e2lmKCFMKXRocm93IG5ldyBFcnJvcihcImdldEFwcGxpY2F0aW9uIGNhbm5vdCBiZSB1c2VkIGluIGEgbm9uIE9wZW5GaW4gZW52LiBBdm9pZCB1c2luZyB0aGlzIGR1cmluZyBwcmUtcmVuZGVyaW5nLlwiKTtyZXR1cm4gZmluLkFwcGxpY2F0aW9uLndyYXBTeW5jKGUpfSksUT0oKT0+WChKKTt2YXIgZWU7IWZ1bmN0aW9uKGUpe2UuSG9tZT1cIm9wZW5maW4taG9tZVwiLGUuRG9jaz1cIm9wZW5maW4tZG9ja1wiLGUuU3RvcmVmcm9udD1cIm9wZW5maW4tc3RvcmVmcm9udFwiLGUuSG9tZUludGVybmFsPVwib3BlbmZpbi1ob21lLWludGVybmFsXCIsZS5Ccm93c2VyTWVudT1cIm9wZW5maW4tYnJvd3Nlci1tZW51XCIsZS5Ccm93c2VyU2F2ZU1lbnU9XCJvcGVuZmluLWJyb3dzZXItc2F2ZS1tZW51XCIsZS5Ccm93c2VySW5kaWNhdG9yPVwib3BlbmZpbi1icm93c2VyLWluZGljYXRvclwiLGUuQnJvd3NlcldpbmRvdz1cImludGVybmFsLWdlbmVyYXRlZC13aW5kb3dcIixlLkNsYXNzaWNXaW5kb3c9XCJpbnRlcm5hbC1nZW5lcmF0ZWQtY2xhc3NpYy13aW5kb3dcIixlLkVudGVycHJpc2VDb250ZXh0TWVudT1cIm9wZW5maW4tZW50ZXJwcmlzZS1jb250ZXh0LW1lbnVcIixlLkJyb3dzZXJBZGRyZXNzU2VhcmNoUHJlZml4PVwib3BlbmZpbi1icm93c2VyLW1lbnUtYWRkcmVzcy1zZWFyY2gtXCIsZS5FbnRlcnByaXNlQm9va21hcmtEaWFsb2dXaW5kb3c9XCJvcGVuZmluLWVudGVycHJpc2UtYm9va21hcmstZGlhbG9nXCIsZS5Ecm9wZG93bk1lbnU9XCJvcGVuZmluLWVudGVycHJpc2UtZHJvcGRvd24tbWVudVwifShlZXx8KGVlPXt9KSk7ZnVuY3Rpb24gdGUoZSl7aWYoIUwpdGhyb3cgbmV3IEVycm9yKFwiZ2V0T0ZXaW5kb3cgY2FuIG9ubHkgYmUgdXNlZCBpbiBhbiBPcGVuRmluIGVudi4gQXZvaWQgY2FsbGluZyB0aGlzIG1ldGhvZCBkdXJpbmcgcHJlLXJlbmRlcmluZy5cIik7cmV0dXJuIGZpbi5XaW5kb3cud3JhcFN5bmMoZSl9Y29uc3QgbmU9e25hbWU6Uix1dWlkOmp9O2VlLkhvbWUscS5Xb3Jrc3BhY2UsZWUuRG9jayxxLldvcmtzcGFjZTtjb25zdCByZT17bmFtZTplZS5TdG9yZWZyb250LHV1aWQ6cS5Xb3Jrc3BhY2V9O3EuV29ya3NwYWNlLHEuV29ya3NwYWNlO2FzeW5jIGZ1bmN0aW9uIG9lKGUpe2NvbnN0IHQ9dGUoZSk7XCJtaW5pbWl6ZWRcIj09PWF3YWl0IHQuZ2V0U3RhdGUoKSYmYXdhaXQgdC5yZXN0b3JlKCksYXdhaXQgdC5zaG93KCksYXdhaXQgdC5zZXRBc0ZvcmVncm91bmQoKX1jb25zdCBhZT1hc3luYyBlPT57dHJ5e2NvbnN0IHQ9YXdhaXQgZmluLldpbmRvdy53cmFwU3luYyh7bmFtZTplLm5hbWUsdXVpZDplLnV1aWQ/P2Zpbi5tZS51dWlkfSkuZ2V0T3B0aW9ucygpO3JldHVybihcImJyb3dzZXJcIj09PXQud29ya3NwYWNlUGxhdGZvcm0/LndpbmRvd1R5cGV8fFwiZW50ZXJwcmlzZVwiPT09dC53b3Jrc3BhY2VQbGF0Zm9ybT8ud2luZG93VHlwZSkmJnQud29ya3NwYWNlUGxhdGZvcm0/LnBhZ2VzfWNhdGNoKGUpe3JldHVybiBjb25zb2xlLndhcm4oXCJpc0Jyb3dzZXJXaW5kb3cgZXJyb3I6IFwiLGUpLCExfX07YXN5bmMgZnVuY3Rpb24gaWUoKXtjb25zdCBlPWF3YWl0IGZpbi5BcHBsaWNhdGlvbi5nZXRDdXJyZW50U3luYygpLmdldENoaWxkV2luZG93cygpLHQ9YXdhaXQgUHJvbWlzZS5hbGwoZS5tYXAoKGFzeW5jIGU9PmFlKGUuaWRlbnRpdHkpKSkpO3JldHVybiBlLmZpbHRlcigoKGUsbik9PnRbbl0pKX1hc3luYyBmdW5jdGlvbiBsZSgpe3JldHVybihhd2FpdCBmaW4uQXBwbGljYXRpb24uZ2V0Q3VycmVudFN5bmMoKS5nZXRDaGlsZFdpbmRvd3MoKSkuZmlsdGVyKChlPT5lLmlkZW50aXR5Lm5hbWUuc3RhcnRzV2l0aChlZS5Ccm93c2VyTWVudSkpKX1jb25zdCBzZT1lPT50ZShlKS5nZXRPcHRpb25zKCkudGhlbigoKCk9PiEwKSkuY2F0Y2goKCgpPT4hMSkpLGNlPSgpPT5zZShyZSksdWU9ZT0+YCR7ZS50b3B9LCR7ZS5sZWZ0fSwke2UuaGVpZ2h0fSwke2Uud2lkdGh9LCR7ZS5ib3R0b219LCR7ZS5yaWdodH1gO2Z1bmN0aW9uIGRlKGUsdCl7Y29uc3Qgbj1lLnRvcCxyPWUubGVmdCxvPWUudG9wK2UuaGVpZ2h0LGE9ZS5sZWZ0K2Uud2lkdGgsaT10Lm1vbml0b3JSZWN0LnRvcCxsPXQubW9uaXRvclJlY3QubGVmdCxzPXQubW9uaXRvclJlY3QuYm90dG9tLGM9dC5tb25pdG9yUmVjdC5yaWdodDtpZihuPnN8fG88aXx8cj5jfHxhPGwpcmV0dXJuIDA7Y29uc3QgdT1NYXRoLm1heChuLGkpLGQ9TWF0aC5tYXgocixsKTtyZXR1cm4oTWF0aC5taW4obyxzKS11KSooTWF0aC5taW4oYSxjKS1kKS8oZS5oZWlnaHQqZS53aWR0aCl9YXN5bmMgZnVuY3Rpb24gcGUoZSl7Y29uc3QgdD1hd2FpdCBmaW4uU3lzdGVtLmdldE1vbml0b3JJbmZvKCk7cmV0dXJuW3QucHJpbWFyeU1vbml0b3IsLi4udC5ub25QcmltYXJ5TW9uaXRvcnNdLnJlZHVjZSgoKHQsbik9Pntjb25zdCByPWRlKGUsbik7cmV0dXJuIHI+dC5wZXJjZW50YWdlP3twZXJjZW50YWdlOnIsbW9uaXRvcjpufTp0fSkse3BlcmNlbnRhZ2U6MCxtb25pdG9yOnQucHJpbWFyeU1vbml0b3J9KS5tb25pdG9yfWNvbnN0IGZlPWFzeW5jIGU9Pntjb25zdCB0PWU/ZmluLldpbmRvdy53cmFwU3luYyhlKTpmaW4uV2luZG93LmdldEN1cnJlbnRTeW5jKCksbj1hd2FpdCB0LmdldE9wdGlvbnMoKTtyZXR1cm4gbi53b3Jrc3BhY2VQbGF0Zm9ybT8ud2luZG93VHlwZSYmXCJlbnRlcnByaXNlXCI9PT1uLndvcmtzcGFjZVBsYXRmb3JtLndpbmRvd1R5cGV9LGhlPWU9Pntjb25zdCB0PWU/LmRlZmF1bHRXaW5kb3dPcHRpb25zPy53b3Jrc3BhY2VQbGF0Zm9ybT8ud2luZG93VHlwZTtyZXR1cm5cImVudGVycHJpc2VcIj09PXR9O3ZhciBnZTshZnVuY3Rpb24oZSl7ZS5Ccm93c2VyPVwiQnJvd3NlclwiLGUuRG9jaz1cIkRvY2tcIixlLkhvbWU9XCJIb21lXCIsZS5Ob3RpZmljYXRpb249XCJOb3RpZmljYXRpb25cIixlLlN0b3JlZnJvbnQ9XCJTdG9yZWZyb250XCIsZS5QbGF0Zm9ybT1cIlBsYXRmb3JtXCIsZS5UaGVtaW5nPVwiVGhlbWluZ1wiLGUuTWljcm9mbG93PVwiTWljcm9mbG93XCJ9KGdlfHwoZ2U9e30pKTtjb25zdCB2ZT1hc3luYyhlLHQsbj1cIndvcmtzcGFjZS1saWNlbnNpbmdcIik9Pntjb25zdCByPXthcGlWZXJzaW9uOnQuYXBpVmVyc2lvbnx8Qixjb21wb25lbnROYW1lOmUsY29tcG9uZW50VmVyc2lvbjp0LmNvbXBvbmVudFZlcnNpb258fEIsYWxsb3dlZDp0LmFsbG93ZWQscmVqZWN0aW9uQ29kZTp0LnJlamVjdGlvbkNvZGV9O2Zpbi5TeXN0ZW0ucmVnaXN0ZXJVc2FnZSh7dHlwZTpuLGRhdGE6cn0pfTtsZXQgQ2U9ITE7Y29uc3QgbWU9bmV3IE1hcCx3ZT1lPT57bGV0IHQ9bWUuZ2V0KGUudXVpZCk7cmV0dXJuIHR8fCh0PU10KGUpLHQub25jZShcImNsb3NlZFwiLCgoKT0+e21lLmRlbGV0ZShlLnV1aWQpfSkpLG1lLnNldChlLnV1aWQsdCkpLHR9LGJlPWFzeW5jKGUsdCk9Pnt0cnl7YXdhaXQgZS5fcmFpc2VBbmFseXRpY3MoW3RdKX1jYXRjaChlKXtjb25zb2xlLmVycm9yKFwiZmFpbGVkIHRvIHJhaXNlIGFuYWx5dGljcyBldmVudFwiLGUpfX0seWU9YXN5bmMgZT0+e2F3YWl0IGJlKHdlKGZpbi5tZS5pZGVudGl0eSkse3NvdXJjZTpcIkJyb3dzZXJcIiwuLi5lfSl9O2xldCB4ZTtjb25zdCBrZT1hc3luYyBlPT57eGV8fCh4ZT1uZXcgVGV4dEVuY29kZXIpO2NvbnN0IHQ9eGUuZW5jb2RlKGUpLG49YXdhaXQgd2luZG93LmNyeXB0by5zdWJ0bGUuZGlnZXN0KFwiU0hBLTI1NlwiLHQpO3JldHVybiBBcnJheS5mcm9tKG5ldyBVaW50OEFycmF5KG4pKS5tYXAoKGU9PmUudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsXCIwXCIpKSkuam9pbihcIlwiKX07ZnVuY3Rpb24gU2UoZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiYhQXJyYXkuaXNBcnJheShlKX1mdW5jdGlvbiBPZShlLC4uLnQpe2lmKCF0Lmxlbmd0aClyZXR1cm4gZTtjb25zdCBuPXQuc2hpZnQoKTtyZXR1cm4gU2UoZSkmJlNlKG4pJiZPYmplY3QuZW50cmllcyhuKS5mb3JFYWNoKCgoW3Qsbl0pPT57aWYoU2UobikpcmV0dXJuIGVbdF18fChlW3RdPXt9KSxPZShlW3RdLG4pO2VbdF09bn0pKSxPZShlLC4uLnQpfXZhciBNZSxMZT1uKDE5OCksX2U9bi5uKExlKTshZnVuY3Rpb24oZSl7ZS5DdXJyZW50V29ya3NwYWNlSWQ9XCJjdXJyZW50V29ya3NwYWNlSWRcIixlLkxhc3RGb2N1c2VkQnJvd3NlcldpbmRvdz1cImxhc3RGb2N1c2VkQnJvd3NlcldpbmRvd1wiLGUuTWFjaGluZU5hbWU9XCJtYWNoaW5lTmFtZVwiLGUuTmV3VGFiUGFnZUxheW91dD1cIk5ld1RhYlBhZ2VMYXlvdXRcIixlLk5ld1RhYlBhZ2VTb3J0PVwiTmV3VGFiUGFnZVNvcnRcIixlLkRvY2tQb3NpdGlvbj1cIkRvY2tQb3NpdGlvblwiLGUuU2VsZWN0ZWRDb2xvclNjaGVtZT1cIlNlbGVjdGVkQ29sb3JTY2hlbWVcIixlLkhhc01vdmVkU3RvcmU9XCJIYXNNb3ZlZFN0b3JlXCIsZS5QYWdlRHJhZ1N0YXRlPVwiQnJvd3NlclBhZ2VEcmFnU3RhdGVcIn0oTWV8fChNZT17fSkpO2NvbnN0IFBlPU1lO2Z1bmN0aW9uIEVlKCl7cmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFBlLk1hY2hpbmVOYW1lKT8/XCJ1bmtub3duXCJ9bGV0IGplO2FzeW5jIGZ1bmN0aW9uIFJlKCl7cmV0dXJuIGplfHwoamU9YXdhaXQgZmluLlN5c3RlbS5nZXRNYWNoaW5lSWQoKSksamV9Y29uc3QgSWU9ZT0+e2lmKEFycmF5LmlzQXJyYXkoZS53b3Jrc3BhY2VQbGF0Zm9ybT8ucGFnZXMpJiYoZS5sYXlvdXRTbmFwc2hvdHx8ZS5sYXlvdXQpKXtjb25zdCB0PWUud29ya3NwYWNlUGxhdGZvcm0ucGFnZXMuZmluZCgoZT0+ZS5pc0FjdGl2ZSkpO2lmKHQpe2NvbnN0IG49ZS5sYXlvdXRTbmFwc2hvdD9lLmxheW91dFNuYXBzaG90LmxheW91dHNbdC5sYXlvdXRDb250YWluZXJLZXldOmUubGF5b3V0O2lmKG4paWYodC5pc0xvY2tlZCl7Y29uc3Qgcj1UdChuLHQubGF5b3V0KTt0LmxheW91dD1yLGUubGF5b3V0PXJ9ZWxzZSB0LmxheW91dD1uLGUubGF5b3V0PW59fXJldHVybiBlfTthc3luYyBmdW5jdGlvbiBWZShlKXtjb25zdCB0PWV8fGF3YWl0IGZpbi5QbGF0Zm9ybS5nZXRDdXJyZW50U3luYygpLmdldFNuYXBzaG90KCk7aWYodC5zbmFwc2hvdERldGFpbHM/Lm1hY2hpbmVJZClyZXR1cm4gdDtjb25zdCBuPUVlKCk7cmV0dXJuey4uLnQsc25hcHNob3REZXRhaWxzOnsuLi50LnNuYXBzaG90RGV0YWlscyxtYWNoaW5lSWQ6YXdhaXQgUmUoKSxtYWNoaW5lTmFtZTpufX19ZnVuY3Rpb24gSGUoKXtyZXR1cm4gdm9pZCAwIT09dHlwZW9mIGNyeXB0byYmXCJyYW5kb21VVUlEXCJpbiBjcnlwdG8mJlwiZnVuY3Rpb25cIj09dHlwZW9mIGNyeXB0by5yYW5kb21VVUlEP2NyeXB0by5yYW5kb21VVUlEKCk6XCIxMDAwMDAwMC0xMDAwLTQwMDAtODAwMC0xMDAwMDAwMDAwMDBcIi5yZXBsYWNlKC9bMDE4XS9nLChlPT4oZV5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDEpKVswXSYxNT4+ZS80KS50b1N0cmluZygxNikpKX1jb25zdCBBZT1fJiZcImNvbXBsZXRlXCIhPT1kb2N1bWVudC5yZWFkeVN0YXRlJiZuZXcgUHJvbWlzZSgoZT0+ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInJlYWR5c3RhdGVjaGFuZ2VcIiwoKCk9PntcImNvbXBsZXRlXCI9PT1kb2N1bWVudC5yZWFkeVN0YXRlJiZlKCl9KSkpKTtmdW5jdGlvbiBUZShlKXtsZXQgdDtjb25zdCBuPW5ldyBTZXQ7cmV0dXJuKCk9PntpZighTCl0aHJvdyBuZXcgRXJyb3IoXCJnZXRDaGFubmVsQ2xpZW50IGNhbm5vdCBiZSB1c2VkIG91dHNpZGUgYW4gT3BlbkZpbiBlbnYuIEF2b2lkIHVzaW5nIHRoaXMgbWV0aG9kIGR1cmluZyBwcmUtcmVuZGVyaW5nLlwiKTtyZXR1cm4gdHx8KHQ9KGFzeW5jKCk9Pnthd2FpdCBBZTtjb25zdCByPXtjbGllbnRBUElWZXJzaW9uOkJ9LG89YXdhaXQgZmluLkludGVyQXBwbGljYXRpb25CdXMuQ2hhbm5lbC5jb25uZWN0KGUse3BheWxvYWQ6cn0pO3JldHVybiBvLm9uRGlzY29ubmVjdGlvbigoYXN5bmMoKT0+e24uZm9yRWFjaCgoZT0+ZSgpKSksbi5jbGVhcigpLGNvbnNvbGUud2FybihgZGlzY29ubmVjdGVkIGZyb20gY2hhbm5lbCBwcm92aWRlciAke2V9YCksdD12b2lkIDB9KSksb30pKCkudGhlbigoZT0+KGUuYWRkRGlzY29ubmVjdGlvbkxpc3RlbmVyPWU9PntuLmFkZChlKX0sZSkpKS5jYXRjaCgobj0+e3Rocm93IHQ9dm9pZCAwLG5ldyBFcnJvcihgZmFpbGVkIHRvIGNvbm5lY3QgdG8gY2hhbm5lbCBwcm92aWRlciAke2V9OiAke259YCl9KSkpLHR9fXZhciBEZSxCZTshZnVuY3Rpb24oZSl7ZS5GZXRjaGluZz1cImZldGNoaW5nXCIsZS5GZXRjaGVkPVwiZmV0Y2hlZFwiLGUuQ29tcGxldGU9XCJjb21wbGV0ZVwifShEZXx8KERlPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkluaXRpYWw9MF09XCJJbml0aWFsXCIsZVtlLk9wZW49MV09XCJPcGVuXCIsZVtlLkNsb3NlPTJdPVwiQ2xvc2VcIn0oQmV8fChCZT17fSkpO2NvbnN0IFplPVRlKFwiX19vZl93b3Jrc3BhY2VfcHJvdG9jb2xfX1wiKSwkZT1aZTtUZShcIl9fc2VhcmNoLW9wZW5maW4tYnJvd3Nlci1ob21lLXRvcGljX19cIik7Y29uc3QgTmU9YXN5bmMgZT0+KHsuLi5lLGxheW91dERldGFpbHM6e21hY2hpbmVJZDphd2FpdCBSZSgpLG1hY2hpbmVOYW1lOkVlKCl9fSksRmU9YXN5bmMoZSx0KT0+KHtwYWdlSWQ6SGUoKSx0aXRsZTplLGxheW91dDphd2FpdCBOZSh0KSxpc1JlYWRPbmx5OiExfSksV2U9YXN5bmMgZT0+e2NvbnN0IHQ9YXdhaXQgRmUoZS50aXRsZSxWdChlLmxheW91dCkpO3JldHVybiBlLnBhbmVscyYmKHQucGFuZWxzPWUucGFuZWxzLm1hcCgoZT0+KHsuLi5lLHZpZXdPcHRpb25zOkl0KGUudmlld09wdGlvbnMpfSkpKSksey4uLmUsLi4udH19LFVlPWU9Pntjb25zdCB0PWZpbi5QbGF0Zm9ybS5MYXlvdXQud3JhcFN5bmMoZSk7cmV0dXJue3Nob3c6YXN5bmMoKT0+e2NvbnN0IG49YXdhaXQgdC5nZXRDb25maWcoKSx7c2V0dGluZ3M6cixkaW1lbnNpb25zOm99PW4sYT1hd2FpdCBmZShlKTthd2FpdCB0LnJlcGxhY2Uoey4uLm4sc2V0dGluZ3M6ey4uLnIsaGFzSGVhZGVyczohMCxyZW9yZGVyRW5hYmxlZDohMH0sZGltZW5zaW9uczp7Li4ubyxoZWFkZXJIZWlnaHQ6YT8yODozMH19KX0saGlkZTphc3luYyBlPT57Y29uc3Qgbj1hd2FpdCB0LmdldENvbmZpZygpLHtzZXR0aW5nczpyLGRpbWVuc2lvbnM6b309YXdhaXQgbjthd2FpdCB0LnJlcGxhY2Uoey4uLm4sc2V0dGluZ3M6ey4uLnIsaGFzSGVhZGVyczohMSxyZW9yZGVyRW5hYmxlZDplPy5zZXR0aW5ncz8ucmVvcmRlckVuYWJsZWQ/PyExfSxkaW1lbnNpb25zOnsuLi5vLGhlYWRlckhlaWdodDowfX0pfSxpc1Nob3dpbmdUYWJzOmFzeW5jKCk9Pnt0cnl7Y29uc3QgZT1hd2FpdCB0LmdldENvbmZpZygpLHtzZXR0aW5nczpufT1hd2FpdCBlO3JldHVybiBuLmhhc0hlYWRlcnN9Y2F0Y2goZSl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJmYWlsZWQgdG8gZ2V0IGxheW91dCBjb25maWc6IFwiLGUpLCEwfX19fTt2YXIgemU7IWZ1bmN0aW9uKGUpe2UuTGF1bmNoQXBwPVwibGF1bmNoQXBwXCIsZS5TYXZlUGFnZT1cInNhdmVQYWdlXCIsZS5HZXRTYXZlZFBhZ2U9XCJnZXRTYXZlZFBhZ2VcIixlLkNyZWF0ZVNhdmVkUGFnZT1cImNyZWF0ZVNhdmVkUGFnZVwiLGUuVXBkYXRlU2F2ZWRQYWdlPVwidXBkYXRlU2F2ZWRQYWdlXCIsZS5EZWxldGVTYXZlZFBhZ2U9XCJkZWxldGVTYXZlZFBhZ2VcIixlLkdldFNhdmVkUGFnZXM9XCJnZXRTYXZlZFBhZ2VzXCIsZS5DcmVhdGVTYXZlZFBhZ2VJbnRlcm5hbD1cImNyZWF0ZVNhdmVkUGFnZUludGVybmFsXCIsZS5VcGRhdGVTYXZlZFBhZ2VJbnRlcm5hbD1cInVwZGF0ZVNhdmVkUGFnZUludGVybmFsXCIsZS5EZWxldGVTYXZlZFBhZ2VJbnRlcm5hbD1cImRlbGV0ZVNhdmVkUGFnZUludGVybmFsXCIsZS5VcGRhdGVQYWdlRm9yV2luZG93PVwidXBkYXRlUGFnZUZvcldpbmRvd1wiLGUuQXR0YWNoUGFnZXNUb1dpbmRvdz1cImF0dGFjaFBhZ2VzVG9XaW5kb3dcIixlLkRldGFjaFBhZ2VzRnJvbVdpbmRvdz1cImRldGFjaFBhZ2VzRnJvbVdpbmRvd1wiLGUuUmVvcmRlclBhZ2VzRm9yV2luZG93PVwicmVvcmRlclBhZ2VzRm9yV2luZG93XCIsZS5TZXRBY3RpdmVQYWdlPVwic2V0QWN0aXZlUGFnZVwiLGUuQWRkUGFnZT1cImFkZFBhZ2VcIixlLkFkZERlZmF1bHRQYWdlPVwiYWRkRGVmYXVsdFBhZ2VcIixlLkdldEFsbEF0dGFjaGVkUGFnZXM9XCJnZXRBbGxBdHRhY2hlZFBhZ2VzXCIsZS5HZXRBY3RpdmVQYWdlSWRGb3JXaW5kb3c9XCJnZXRBY3RpdmVQYWdlSWRGb3JXaW5kb3dcIixlLkdldFBhZ2VzRm9yV2luZG93PVwiZ2V0UGFnZXNGb3JXaW5kb3dcIixlLkdldFBhZ2VGb3JXaW5kb3c9XCJnZXRQYWdlRm9yV2luZG93XCIsZS5HZXRTYXZlZFBhZ2VNZXRhZGF0YT1cImdldFNhdmVkUGFnZU1ldGFkYXRhXCIsZS5HZXRVbmlxdWVQYWdlVGl0bGU9XCJnZXRVbmlxdWVQYWdlVGl0bGVcIixlLkdldExhc3RGb2N1c2VkQnJvd3NlcldpbmRvdz1cImdldExhc3RGb2N1c2VkQnJvd3NlcldpbmRvd1wiLGUuR2V0VGhlbWVzPVwiZ2V0VGhlbWVzXCIsZS5HZXRTZWxlY3RlZFNjaGVtZT1cImdldFNlbGVjdGVkU2NoZW1lXCIsZS5TZXRTZWxlY3RlZFNjaGVtZT1cInNldFNlbGVjdGVkU2NoZW1lXCIsZS5PcGVuR2xvYmFsQ29udGV4dE1lbnVJbnRlcm5hbD1cIm9wZW5HbG9iYWxDb250ZXh0TWVudUludGVybmFsXCIsZS5PcGVuVmlld1RhYkNvbnRleHRNZW51SW50ZXJuYWw9XCJvcGVuVmlld1RhYkNvbnRleHRNZW51SW50ZXJuYWxcIixlLk9wZW5QYWdlVGFiQ29udGV4dE1lbnVJbnRlcm5hbD1cIm9wZW5QYWdlVGFiQ29udGV4dE1lbnVJbnRlcm5hbFwiLGUuT3BlblNhdmVCdXR0b25Db250ZXh0TWVudUludGVybmFsPVwib3BlblNhdmVCdXR0b25Db250ZXh0TWVudUludGVybmFsXCIsZS5JbnZva2VDdXN0b21BY3Rpb25JbnRlcm5hbD1cImludm9rZUN1c3RvbUFjdGlvbkludGVybmFsXCIsZS5SZXF1ZXN0UXVpdFBsYXRmb3JtRGlhbG9nSW50ZXJuYWw9XCJyZXF1ZXN0UXVpdFBsYXRmb3JtRGlhbG9nSW50ZXJuYWxcIixlLkdldFNhdmVkV29ya3NwYWNlPVwiZ2V0U2F2ZWRXb3Jrc3BhY2VcIixlLkNyZWF0ZVNhdmVkV29ya3NwYWNlPVwiY3JlYXRlU2F2ZWRXb3Jrc3BhY2VcIixlLlVwZGF0ZVNhdmVkV29ya3NwYWNlPVwidXBkYXRlU2F2ZWRXb3Jrc3BhY2VcIixlLkRlbGV0ZVNhdmVkV29ya3NwYWNlPVwiZGVsZXRlU2F2ZWRXb3Jrc3BhY2VcIixlLkdldFNhdmVkV29ya3NwYWNlcz1cImdldFNhdmVkV29ya3NwYWNlc1wiLGUuU2F2ZVdvcmtzcGFjZT1cInNhdmVXb3Jrc3BhY2VcIixlLkdldEN1cnJlbnRXb3Jrc3BhY2U9XCJnZXRDdXJyZW50V29ya3NwYWNlXCIsZS5BcHBseVdvcmtzcGFjZT1cImFwcGx5V29ya3NwYWNlXCIsZS5TZXRBY3RpdmVXb3Jrc3BhY2U9XCJzZXRBY3RpdmVXb3Jrc3BhY2VcIixlLklzQnJvd3NlckluaXRpYWxpemVkPVwiaXNCcm93c2VySW5pdGlhbGl6ZWRcIixlLkFuYWx5dGljcz1cImFuYWx5dGljc0ludGVybmFsXCIsZS5HZXRMYW5ndWFnZT1cImdldExhbmd1YWdlXCIsZS5HZXRMYW5ndWFnZVJlc291cmNlc0ludGVybmFsPVwiZ2V0TGFuZ3VhZ2VSZXNvdXJjZXNJbnRlcm5hbFwiLGUuU2V0TGFuZ3VhZ2U9XCJzZXRMYW5ndWFnZVwiLGUuR2V0RG9ja1Byb3ZpZGVyQ29uZmlnPVwiZ2V0RG9ja1Byb3ZpZGVyQ29uZmlnXCIsZS5TYXZlRG9ja1Byb3ZpZGVyQ29uZmlnPVwic2F2ZURvY2tQcm92aWRlckNvbmZpZ1wiLGUuSGFuZGxlU2F2ZU1vZGFsT25QYWdlQ2xvc2U9XCJoYW5kbGVTYXZlTW9kYWxPblBhZ2VDbG9zZVwiLGUuU2hvdWxkUGFnZUNsb3NlPVwic2hvdWxkUGFnZUNsb3NlXCIsZS5TaG91bGRXaW5kb3dDbG9zZT1cInNob3VsZFdpbmRvd0Nsb3NlXCIsZS5Db3B5UGFnZT1cImNvcHlQYWdlXCIsZS5IYW5kbGVQYWdlQ2hhbmdlcz1cImhhbmRsZVBhZ2VDaGFuZ2VzXCIsZS5NYXJrVW5zYXZlZFBhZ2VzQXNTYXZlZEludGVybmFsPVwibWFya1Vuc2F2ZWRQYWdlc0FzU2F2ZWRJbnRlcm5hbFwiLGUuVHJhY2tSZW1vdmVkVGFiSW50ZXJuYWw9XCJ0cmFja1JlbW92ZWRUYWJJbnRlcm5hbFwiLGUuUmVzdG9yZVJlbW92ZWRUYWJJbnRlcm5hbD1cInJlc3RvcmVSZW1vdmVkVGFiSW50ZXJuYWxcIixlLlRyYWNrVmlzaXRlZFNpdGVJbnRlcm5hbD1cInRyYWNrVmlzaXRlZFNpdGVJbnRlcm5hbFwiLGUuR2V0UmVjZW50bHlWaXNpdGVkU2l0ZXNJbnRlcm5hbD1cImdldFJlY2VudGx5VmlzaXRlZFNpdGVzSW50ZXJuYWxcIixlLkdldEZyZXF1ZW50bHlWaXNpdGVkU2l0ZXNJbnRlcm5hbD1cImdldEZyZXF1ZW50bHlWaXNpdGVkU2l0ZXNJbnRlcm5hbFwiLGUuU2VhcmNoU2l0ZXNJbnRlcm5hbD1cInNlYXJjaFNpdGVzSW50ZXJuYWxcIixlLkdldEN1cmF0ZWRDb250ZW50SW50ZXJuYWw9XCJnZXRDdXJhdGVkQ29udGVudEludGVybmFsXCIsZS5IYW5kbGVSZXF1ZXN0TmF2aWdhdGlvbkludGVybmFsPVwiaGFuZGxlUmVxdWVzdE5hdmlnYXRpb25JbnRlcm5hbFwiLGUuUmVmcmVzaEJvb2ttYXJrc0ludGVybmFsPVwicmVmcmVzaEJvb2ttYXJrc0ludGVybmFsXCIsZS5HZXROb3RpZmljYXRpb25zQ29uZmlnPVwiZ2V0Tm90aWZpY2F0aW9uc0NvbmZpZ1wifSh6ZXx8KHplPXt9KSk7Y29uc3QgR2U9YXN5bmMgZT0+ZmluLlBsYXRmb3JtLndyYXBTeW5jKGUpLmdldENsaWVudCgpLEtlPWFzeW5jIGU9Pntjb25zdCB0PWF3YWl0IEdlKGUpLG49XCJUYXJnZXQgaXMgbm90IGEgV29ya3NwYWNlIFBsYXRmb3JtLiBUYXJnZXQgbXVzdCBjYWxsIFdvcmtzcGFjZVBsYXRmb3JtLmluaXRcIjtsZXQgcjt0cnl7cj1hd2FpdCB0LmRpc3BhdGNoKFwiaXNXb3Jrc3BhY2VQbGF0Zm9ybVwiKX1jYXRjaChlKXt0aHJvdyBuZXcgRXJyb3Iobil9aWYoXCJib29sZWFuXCI9PXR5cGVvZiByJiZyKXJldHVybiBjb25zb2xlLndhcm4oXCJZb3UgYXJlIHVzaW5nIGFuIG9sZGVyIHZlcnNpb24gb2YgdGhlIHdvcmtzcGFjZSBwbGF0Zm9ybS4gUGxlYXNlIHVwZGF0ZSB5b3VyIHdvcmtzcGFjZSBwbGF0Zm9ybS5cIikscjtpZihcIm9iamVjdFwiPT10eXBlb2YgciYmci5pc1dvcmtzcGFjZVBsYXRmb3JtKXJldHVybiByO3Rocm93IG5ldyBFcnJvcihuKX0scWU9YXN5bmMgZT0+KGF3YWl0IEtlKGUpLEdlKGUpKSxZZT1hc3luYyBlPT57Y29uc3QgdD1hd2FpdCBLZShlKTtpZihcIm9iamVjdFwiPT10eXBlb2YgdCYmITAhPT10Py5pc0Jyb3dzZXJJbml0aWFsaXplZCl0aHJvdyBuZXcgRXJyb3IoXCJUYXJnZXQgaXMgbm90IGEgQnJvd3Nlci1lbmFibGVkIFdvcmtzcGFjZSBQbGF0Zm9ybS5cIik7cmV0dXJuIEdlKGUpfSxKZT1cIm9mLXdvcmtzcGFjZS1cIjtjb25zdCBYZT1uZXcgY2xhc3N7bWFyayhlKXtwZXJmb3JtYW5jZS5tYXJrKGAke0plfSR7ZX1gKX1tYXJrU3RhcnQoZSl7cGVyZm9ybWFuY2UubWFyayhgJHtKZX0ke2V9LXN0YXJ0YCl9bWFya0VuZChlKXtwZXJmb3JtYW5jZS5tYXJrKGAke0plfSR7ZX0tZW5kYCl9bWFya0VuZEFuZE1lYXN1cmUoZSl7cGVyZm9ybWFuY2UubWFyayhgJHtKZX0ke2V9LWVuZGApO3RyeXtyZXR1cm4gcGVyZm9ybWFuY2UubWVhc3VyZShgJHtKZX0ke2V9YCxgJHtKZX0ke2V9LXN0YXJ0YCxgJHtKZX0ke2V9LWVuZGApfWNhdGNoKGUpezB9fW1hcmtBbmRNZWFzdXJlKGUsdCl7cGVyZm9ybWFuY2UubWFyayhgJHtKZX0ke2V9YCk7dHJ5e3JldHVybiBwZXJmb3JtYW5jZS5tZWFzdXJlKGAke0plfSR7ZX0tbWVhc3VyZWAsYCR7SmV9JHt0fS1zdGFydGAsYCR7SmV9JHtlfWApfWNhdGNoKGUpezB9fXJlcG9ydFdvcmtzcGFjZVBlcmZvcm1hbmNlRW50cmllcygpe3JldHVybiBwZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlUeXBlKFwibWVhc3VyZVwiKS5maWx0ZXIoKGU9PmUubmFtZS5zdGFydHNXaXRoKEplKSkpfXJlcG9ydFdvcmtzcGFjZVBlcmZvcm1hbmNlKCl7cmV0dXJuIHRoaXMucmVwb3J0V29ya3NwYWNlUGVyZm9ybWFuY2VFbnRyaWVzKCkubWFwKChlPT4oe25hbWU6ZS5uYW1lLnJlcGxhY2UoYCR7SmV9YCxcIlwiKS5yZXBsYWNlKFwiLW1lYXN1cmVcIixcIlwiKSxkdXJhdGlvbjplLmR1cmF0aW9ufSkpKX19LFFlPShlLHQpPT50P2Ake3R9LSR7ZS51dWlkfS0ke2UubmFtZX1gOmBfX2Jyb3dzZXJfd2luZG93X18tJHtlLnV1aWR9LSR7ZS5uYW1lfWAsZXQ9bmV3IE1hcCx0dD0oZSx0KT0+e2NvbnN0IG49UWUoZSx0KTtyZXR1cm4gZXQuaGFzKG4pfHxldC5zZXQobixUZShuKSksZXQuZ2V0KG4pKCl9O3ZhciBudCxydCxvdCxhdDshZnVuY3Rpb24oZSl7ZS5DbG9zZUJyb3dzZXJXaW5kb3c9XCJjbG9zZS1icm93c2VyLXdpbmRvd1wiLGUuUXVpdFBsYXRmb3JtPVwicXVpdC1wbGF0Zm9ybVwiLGUuQ2xvc2VQYWdlPVwiY2xvc2UtcGFnZVwiLGUuQWRkVG9DaGFubmVsPVwiYWRkLXRvLWNoYW5uZWxcIixlLlJlbW92ZUZyb21DaGFubmVsPVwicmVtb3ZlLWZyb20tY2hhbm5lbFwiLGUuT3BlblNhdmVNb2RhbEludGVybmFsPVwib3Blbi1zYXZlLW1vZGFsLWludGVybmFsXCIsZS5EdXBsaWNhdGVQYWdlPVwiZHVwbGljYXRlLXBhZ2VcIixlLlNldFNlbGVjdGVkU2NoZW1lPVwic2V0LXNlbGVjdGVkLXNjaGVtZVwiLGUuU2hvd0Jyb3dzZXJJbmRpY2F0b3I9XCJzaG93LWJyb3dzZXItaW5kaWNhdG9yXCIsZS5TZXRTZWxlY3RlZExhbmd1YWdlPVwic2V0LXNlbGVjdGVkLWxhbmd1YWdlXCIsZS5SZWZyZXNoQm9va21hcmtzSW50ZXJuYWw9XCJyZWZyZXNoLWJvb2ttYXJrc1wifShudHx8KG50PXt9KSksZnVuY3Rpb24oZSl7ZS5HZXRQYWdlcz1cImdldC1wYWdlc1wiLGUuR2V0QWN0aXZlUGFnZUZvcldpbmRvdz1cImdldC1hY3RpdmUtcGFnZS1mb3Itd2luZG93XCIsZS5BdHRhY2hQYWdlc1RvV2luZG93PVwiYXR0YWNoLXBhZ2VzLXRvLXdpbmRvd1wiLGUuRGV0YWNoUGFnZXNGcm9tV2luZG93PVwiZGV0YWNoLXBhZ2VzLWZyb20td2luZG93XCIsZS5TZXRBY3RpdmVQYWdlRm9yV2luZG93PVwic2V0LWFjdGl2ZS1wYWdlLWZvci13aW5kb3dcIixlLlJlbmFtZVBhZ2U9XCJyZW5hbWUtcGFnZVwiLGUuUmVvcmRlclBhZ2VzRm9yV2luZG93PVwicmVvcmRlci1wYWdlcy1mb3Itd2luZG93XCIsZS5VcGRhdGVQYWdlRm9yV2luZG93PVwidXBkYXRlLXBhZ2UtZm9yLXdpbmRvd1wiLGUuVXBkYXRlUGFnZXNXaW5kb3dPcHRpb25zPVwidXBkYXRlLXBhZ2VzLXdpbmRvdy1vcHRpb25zXCIsZS5Jc0RldGFjaGluZ1BhZ2VzPVwiaXMtZGV0YWNoaW5nLXBhZ2VzXCIsZS5Jc0FjdGl2ZVBhZ2VDaGFuZ2luZz1cImlzLWFjdGl2ZS1wYWdlLWNoYW5naW5nXCJ9KHJ0fHwocnQ9e30pKSxmdW5jdGlvbihlKXtlLkdldEFwcHM9XCJnZXQtYXBwc1wiLGUuR2V0Q3VyYXRlZENvbnRlbnQ9XCJnZXQtY3VyYXRlZC1jb250ZW50XCIsZS5HZXRSZWNlbnRseVZpc2l0ZWQ9XCJnZXQtcmVjZW50bHktdmlzaXRlZFwifShvdHx8KG90PXt9KSksZnVuY3Rpb24oZSl7ZS5DcmVhdGVCb29rbWFya05vZGU9XCJjcmVhdGUtYm9va21hcmstbm9kZVwiLGUuR2V0Qm9va21hcmtOb2RlPVwiZ2V0LWJvb2ttYXJrLW5vZGVcIixlLlNlYXJjaEJvb2ttYXJrTm9kZXM9XCJzZWFyY2gtYm9va21hcmstbm9kZXNcIixlLlVwZGF0ZUJvb2ttYXJrTm9kZT1cInVwZGF0ZS1ib29rbWFyay1ub2RlXCIsZS5EZWxldGVCb29rbWFya05vZGU9XCJkZWxldGUtYm9va21hcmstbm9kZVwifShhdHx8KGF0PXt9KSk7Y29uc3QgaXQ9ey4uLm50LC4uLnJ0fSxsdD1UZShgJHtcInVuZGVmaW5lZFwiIT10eXBlb2YgZmluJiZmaW4/Lm1lLmlkZW50aXR5LnV1aWR9LWVudGVycHJpc2UtYm9va21hcmtzYCksc3Q9ZT0+KHtpZGVudGl0eTplLG9wZW5maW5XaW5kb3c6ZmluLldpbmRvdy53cmFwU3luYyhlKSxfYm9va21hcmtzOntfY3JlYXRlQm9va21hcmtOb2RlOmFzeW5jIGU9Pihhc3luYyBlPT4oYXdhaXQgbHQoKSkuZGlzcGF0Y2goYXQuQ3JlYXRlQm9va21hcmtOb2RlLGUpKShlKSxfZ2V0Qm9va21hcmtOb2RlOmFzeW5jIGU9Pihhc3luYyBlPT4oYXdhaXQgbHQoKSkuZGlzcGF0Y2goYXQuR2V0Qm9va21hcmtOb2RlLGUpKShlKSxfc2VhcmNoQm9va21hcmtOb2Rlczphc3luYyBlPT4oYXN5bmMgZT0+KGF3YWl0IGx0KCkpLmRpc3BhdGNoKGF0LlNlYXJjaEJvb2ttYXJrTm9kZXMsZSkpKGUpLF91cGRhdGVCb29rbWFya05vZGU6YXN5bmMgZT0+KGFzeW5jIGU9Pihhd2FpdCBsdCgpKS5kaXNwYXRjaChhdC5VcGRhdGVCb29rbWFya05vZGUsZSkpKGUpLF9kZWxldGVCb29rbWFya05vZGU6YXN5bmMgZT0+KGFzeW5jIGU9Pihhd2FpdCBsdCgpKS5kaXNwYXRjaChhdC5EZWxldGVCb29rbWFya05vZGUsZSkpKGUpfSxnZXRQYWdlczphc3luYygpPT4oYXdhaXQgWWUoZSkpLmRpc3BhdGNoKHplLkdldFBhZ2VzRm9yV2luZG93LGUpLGdldFBhZ2U6YXN5bmMgdD0+KGF3YWl0IFllKGUpKS5kaXNwYXRjaCh6ZS5HZXRQYWdlRm9yV2luZG93LHtpZGVudGl0eTplLHBhZ2VJZDp0fSksYWRkUGFnZTphc3luYyB0PT5MdCgpLkJyb3dzZXIud3JhcFN5bmMoZSkuX2FkZFBhZ2UodCksX2FkZFBhZ2U6YXN5bmModCxuKT0+e2NvbnN0IHI9YXdhaXQgWWUoZSksbz17aWRlbnRpdHk6ZSxwYWdlOnQsaW5zZXJ0aW9uSW5kZXg6bj8uaW5kZXh9O3JldHVybiByLmRpc3BhdGNoKHplLkFkZFBhZ2Usbyl9LHJlbW92ZVBhZ2U6YXN5bmMgdD0+KGF3YWl0IFllKGUpKS5kaXNwYXRjaCh6ZS5EZXRhY2hQYWdlc0Zyb21XaW5kb3cse2lkZW50aXR5OmUscGFnZUlkczpbdF19KSxyZXBhcmVudFBhZ2U6YXN5bmMgdD0+THQoKS5Ccm93c2VyLndyYXBTeW5jKGUpLl9yZXBhcmVudFBhZ2UodCksX3JlcGFyZW50UGFnZTphc3luYyB0PT57Y29uc3R7cGFnZUlkOm59PXQscj1hd2FpdCBZZShlKSxvPShhd2FpdCByLmRpc3BhdGNoKHplLkdldEFsbEF0dGFjaGVkUGFnZXMsdm9pZCAwKSkuZmluZCgoKHtwYWdlSWQ6ZX0pPT5lPT09bikpO2lmKCFvKXRocm93IG5ldyBFcnJvcihgUmVwYXJlbnQgUGFnZSBFcnJvcjogVGFyZ2V0IHBhZ2Ugd2l0aCBwYWdlSWQgJHtufSBub3QgZm91bmRgKTtvLm11bHRpSW5zdGFuY2VWaWV3QmVoYXZpb3I9XCJyZXBhcmVudFwiO2NvbnN0IGE9e2lkZW50aXR5OmUscGFnZXM6W29dLGluc2VydGlvbkluZGV4OnQuaW5kZXh9O3JldHVybiByLmRpc3BhdGNoKHplLkF0dGFjaFBhZ2VzVG9XaW5kb3csYSl9LHNldEFjdGl2ZVBhZ2U6YXN5bmMgdD0+KGF3YWl0IFllKGUpKS5kaXNwYXRjaCh6ZS5TZXRBY3RpdmVQYWdlLHtpZGVudGl0eTplLHBhZ2VJZDp0fSksdXBkYXRlUGFnZTphc3luYyB0PT57Y29uc3Qgbj1hd2FpdCBZZShlKTtyZXR1cm4gdC5pZGVudGl0eT1lLG4uZGlzcGF0Y2goemUuVXBkYXRlUGFnZUZvcldpbmRvdyx0KX0scmVvcmRlclBhZ2VzOmFzeW5jIHQ9Pntjb25zdCBuPWF3YWl0IFllKGUpO3JldHVybiB0LmlkZW50aXR5PWUsbi5kaXNwYXRjaCh6ZS5SZW9yZGVyUGFnZXNGb3JXaW5kb3csdCl9LF9vcGVuR2xvYmFsQ29udGV4dE1lbnU6YXN5bmMgdD0+e2NvbnN0IG49YXdhaXQgWWUoZSk7cmV0dXJuIHQuaWRlbnRpdHk9ZSxuLmRpc3BhdGNoKHplLk9wZW5HbG9iYWxDb250ZXh0TWVudUludGVybmFsLHQpfSxyZXBsYWNlVG9vbGJhck9wdGlvbnM6YXN5bmMgdD0+e2F3YWl0IFllKGUpO2NvbnN0IG49ZmluLldpbmRvdy53cmFwU3luYyhlKTthd2FpdCBuLnVwZGF0ZU9wdGlvbnMoe3dvcmtzcGFjZVBsYXRmb3JtOnt0b29sYmFyT3B0aW9uczp0fX0pfSxyZXBsYWNlV2luZG93U3RhdGVCdXR0b25PcHRpb25zOmFzeW5jIHQ9Pnthd2FpdCBZZShlKTtjb25zdCBuPWZpbi5XaW5kb3cud3JhcFN5bmMoZSk7YXdhaXQgbi51cGRhdGVPcHRpb25zKHt3b3Jrc3BhY2VQbGF0Zm9ybTp7d2luZG93U3RhdGVCdXR0b25PcHRpb25zOnR9fSl9LHVwZGF0ZUJyb3dzZXJXaW5kb3dUaXRsZTphc3luYyB0PT57Y29uc3Qgbj1maW4uV2luZG93LndyYXBTeW5jKGUpO1wic3RyaW5nXCIhPXR5cGVvZiB0P2F3YWl0IG4udXBkYXRlT3B0aW9ucyh7d29ya3NwYWNlUGxhdGZvcm06e3RpdGxlOnR9fSk6Y29uc29sZS53YXJuKFwiVHlwZSBzdHJpbmcgZm9yIHdpbmRvdyB0aXRsZSBpcyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIFdpbmRvd1RpdGxlIHR5cGUgaW5zdGVhZFwiLHQpfSxfb3BlblZpZXdUYWJDb250ZXh0TWVudTphc3luYyB0PT57Y29uc3Qgbj1hd2FpdCBZZShlKTtyZXR1cm4gdC5pZGVudGl0eT1lLG4uZGlzcGF0Y2goemUuT3BlblZpZXdUYWJDb250ZXh0TWVudUludGVybmFsLHQpfSxfb3BlblBhZ2VUYWJDb250ZXh0TWVudTphc3luYyB0PT57Y29uc3Qgbj1hd2FpdCBZZShlKTtyZXR1cm4gdC5pZGVudGl0eT1lLG4uZGlzcGF0Y2goemUuT3BlblBhZ2VUYWJDb250ZXh0TWVudUludGVybmFsLHQpfSxfb3BlblNhdmVNb2RhbDphc3luYyB0PT57YXdhaXQgWWUoZSk7cmV0dXJuKGF3YWl0IHR0KGUpKS5kaXNwYXRjaChpdC5PcGVuU2F2ZU1vZGFsSW50ZXJuYWwsdCl9LF9vcGVuU2F2ZUJ1dHRvbkNvbnRleHRNZW51OmFzeW5jIHQ9Pntjb25zdCBuPWF3YWl0IFllKGUpO3JldHVybiB0LmlkZW50aXR5PWUsbi5kaXNwYXRjaCh6ZS5PcGVuU2F2ZUJ1dHRvbkNvbnRleHRNZW51SW50ZXJuYWwsdCl9LF9hZGREZWZhdWx0UGFnZTphc3luYyB0PT57Y29uc3Qgbj1hd2FpdCBZZShlKTtyZXR1cm4gdC5pZGVudGl0eT1lLG4uZGlzcGF0Y2goemUuQWRkRGVmYXVsdFBhZ2UsdCl9LF90cmFja1JlbW92ZWRUYWI6YXN5bmMgdD0+KGF3YWl0IFllKGUpKS5kaXNwYXRjaCh6ZS5UcmFja1JlbW92ZWRUYWJJbnRlcm5hbCx0KSxfcmVzdG9yZVJlbW92ZWRUYWI6YXN5bmMgdD0+KGF3YWl0IFllKGUpKS5kaXNwYXRjaCh6ZS5SZXN0b3JlUmVtb3ZlZFRhYkludGVybmFsLHQpLF90cmFja1Zpc2l0ZWRTaXRlOmFzeW5jIHQ9Pihhd2FpdCBZZShlKSkuZGlzcGF0Y2goemUuVHJhY2tWaXNpdGVkU2l0ZUludGVybmFsLHQpLF9nZXRSZWNlbnRseVZpc2l0ZWRTaXRlczphc3luYyB0PT4oYXdhaXQgWWUoZSkpLmRpc3BhdGNoKHplLkdldFJlY2VudGx5VmlzaXRlZFNpdGVzSW50ZXJuYWwsdCksX2dldEZyZXF1ZW50bHlWaXNpdGVkU2l0ZXM6YXN5bmMgdD0+KGF3YWl0IFllKGUpKS5kaXNwYXRjaCh6ZS5HZXRGcmVxdWVudGx5VmlzaXRlZFNpdGVzSW50ZXJuYWwsdCksX3NlYXJjaFNpdGVzOmFzeW5jIHQ9Pihhd2FpdCBZZShlKSkuZGlzcGF0Y2goemUuU2VhcmNoU2l0ZXNJbnRlcm5hbCx7aWRlbnRpdHk6ZSxyZXE6dH0pLF9nZXRDdXJhdGVkQ29udGVudDphc3luYyB0PT4oYXdhaXQgWWUoZSkpLmRpc3BhdGNoKHplLkdldEN1cmF0ZWRDb250ZW50SW50ZXJuYWwse2lkZW50aXR5OmUscmVxOnR9KSxfaGFuZGxlUmVxdWVzdE5hdmlnYXRpb246YXN5bmMgdD0+KGF3YWl0IFllKGUpKS5kaXNwYXRjaCh6ZS5IYW5kbGVSZXF1ZXN0TmF2aWdhdGlvbkludGVybmFsLHQpfSksY3Q9ZT0+e2NvbnN0IHQ9ZmluLlBsYXRmb3JtLndyYXBTeW5jKGUpO3JldHVybnt3cmFwU3luYzplPT5zdChlKSxjcmVhdGVXaW5kb3c6YXN5bmMgbj0+e2NvbnN0IHI9KCgpPT57Y29uc3QgZT1gYnJvd3Nlci13aW5kb3ctc3RhcnR1cC0ke0hlKCl9YDtyZXR1cm4gWGUubWFya1N0YXJ0KGUpLGV9KSgpOyhlPT57ZmluLkFwcGxpY2F0aW9uLndyYXBTeW5jKHt1dWlkOmZpbi5tZS5pZGVudGl0eS51dWlkfSkub25jZShcIndpbmRvdy1zaG93blwiLCgoKT0+e1hlLm1hcmtBbmRNZWFzdXJlKFwiYnJvd3Nlci13aW5kb3ctc2hvd25cIixlKX0pKX0pKHIpLGF3YWl0IFllKGUpO2NvbnN0IG89YXdhaXQgdC5jcmVhdGVXaW5kb3cobik7cmV0dXJuKGU9PntYZS5tYXJrQW5kTWVhc3VyZShcImJyb3dzZXItd2luZG93LXN0YXJ0ZWRcIixlKX0pKHIpLHN0KG8uaWRlbnRpdHkpfSxnZXRBbGxBdHRhY2hlZFBhZ2VzOmFzeW5jKCk9Pihhd2FpdCBZZShlKSkuZGlzcGF0Y2goemUuR2V0QWxsQXR0YWNoZWRQYWdlcyx2b2lkIDApLGdldEFsbFdpbmRvd3M6YXN5bmMoKT0+e2F3YWl0IFllKGUpO3JldHVybihhd2FpdCBpZSgpKS5tYXAoKGU9PnN0KGUuaWRlbnRpdHkpKSl9LGdldFVuaXF1ZVBhZ2VUaXRsZTphc3luYyB0PT4oYXdhaXQgWWUoZSkpLmRpc3BhdGNoKHplLkdldFVuaXF1ZVBhZ2VUaXRsZSx0KSxnZXRMYXN0Rm9jdXNlZFdpbmRvdzphc3luYygpPT4oYXdhaXQgWWUoZSkpLmRpc3BhdGNoKHplLkdldExhc3RGb2N1c2VkQnJvd3NlcldpbmRvdyx2b2lkIDApfX0sdXQ9ZT0+KHtjcmVhdGVQYWdlOmFzeW5jIHQ9Pihhd2FpdCBZZShlKSkuZGlzcGF0Y2goemUuQ3JlYXRlU2F2ZWRQYWdlSW50ZXJuYWwsdCksZGVsZXRlUGFnZTphc3luYyB0PT4oYXdhaXQgWWUoZSkpLmRpc3BhdGNoKHplLkRlbGV0ZVNhdmVkUGFnZUludGVybmFsLHQpLHVwZGF0ZVBhZ2U6YXN5bmMgdD0+KGF3YWl0IFllKGUpKS5kaXNwYXRjaCh6ZS5VcGRhdGVTYXZlZFBhZ2VJbnRlcm5hbCx0KSxnZXRQYWdlOmFzeW5jIHQ9Pihhd2FpdCBZZShlKSkuZGlzcGF0Y2goemUuR2V0U2F2ZWRQYWdlLHQpLGdldFBhZ2VzOmFzeW5jIHQ9Pihhd2FpdCBZZShlKSkuZGlzcGF0Y2goemUuR2V0U2F2ZWRQYWdlcyx0KSxzYXZlUGFnZTphc3luYyB0PT4oYXdhaXQgWWUoZSkpLmRpc3BhdGNoKHplLlNhdmVQYWdlLHQpLGNyZWF0ZVdvcmtzcGFjZTphc3luYyB0PT4oYXdhaXQgcWUoZSkpLmRpc3BhdGNoKHplLkNyZWF0ZVNhdmVkV29ya3NwYWNlLHQpLGRlbGV0ZVdvcmtzcGFjZTphc3luYyB0PT57Y29uc3Qgbj1MdCgpLHI9YXdhaXQgbi5nZXRDdXJyZW50V29ya3NwYWNlKCk7aWYoci53b3Jrc3BhY2VJZD09PXQpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZGVsZXRlIGN1cnJlbnQgYWN0aXZlIHdvcmtzcGFjZSAke3IudGl0bGV9YCk7cmV0dXJuKGF3YWl0IHFlKGUpKS5kaXNwYXRjaCh6ZS5EZWxldGVTYXZlZFdvcmtzcGFjZSx0KX0sdXBkYXRlV29ya3NwYWNlOmFzeW5jIHQ9Pihhd2FpdCBxZShlKSkuZGlzcGF0Y2goemUuVXBkYXRlU2F2ZWRXb3Jrc3BhY2UsdCksZ2V0V29ya3NwYWNlOmFzeW5jIHQ9Pihhd2FpdCBxZShlKSkuZGlzcGF0Y2goemUuR2V0U2F2ZWRXb3Jrc3BhY2UsdCksZ2V0V29ya3NwYWNlczphc3luYyB0PT4oYXdhaXQgcWUoZSkpLmRpc3BhdGNoKHplLkdldFNhdmVkV29ya3NwYWNlcyx0KSxzYXZlV29ya3NwYWNlOmFzeW5jIHQ9Pihhd2FpdCBxZShlKSkuZGlzcGF0Y2goemUuU2F2ZVdvcmtzcGFjZSx0KSxnZXREb2NrUHJvdmlkZXJDb25maWc6YXN5bmMgdD0+KGF3YWl0IHFlKGUpKS5kaXNwYXRjaCh6ZS5HZXREb2NrUHJvdmlkZXJDb25maWcsdCksc2F2ZURvY2tQcm92aWRlckNvbmZpZzphc3luYyB0PT4oYXdhaXQgcWUoZSkpLmRpc3BhdGNoKHplLlNhdmVEb2NrUHJvdmlkZXJDb25maWcsdCl9KSxkdD0oZSx0KT0+e2xvY2FsU3RvcmFnZS5zZXRJdGVtKGAke2p9LSR7ZX1gLHQpfSxwdD1lPT5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShgJHtqfS0ke2V9YCk7dmFyIGZ0OyFmdW5jdGlvbihlKXtlLlVwZGF0ZVBsYXRmb3JtVGhlbWVTY2hlbWU9XCJ1cGRhdGUtcGxhdGZvcm0tdGhlbWUtc2NoZW1lXCJ9KGZ0fHwoZnQ9e30pKTtjb25zdCBodD1UZShcIm9mLXdvcmtzcGFjZS1ub3RpZmljYXRpb25zLXN5bmNcIiksZ3Q9ZT0+KHtnZXRUaGVtZXM6YXN5bmMoKT0+KGF3YWl0IHFlKGUpKS5kaXNwYXRjaCh6ZS5HZXRUaGVtZXMsdm9pZCAwKSxzZXRTZWxlY3RlZFNjaGVtZTphc3luYyB0PT4oYXdhaXQgcWUoZSkpLmRpc3BhdGNoKHplLlNldFNlbGVjdGVkU2NoZW1lLHQpLGdldFNlbGVjdGVkU2NoZW1lOmFzeW5jKCk9Pihhd2FpdCBxZShlKSkuZGlzcGF0Y2goemUuR2V0U2VsZWN0ZWRTY2hlbWUsdm9pZCAwKX0pLHZ0PWFzeW5jIGU9Pntjb25zdCB0PWF3YWl0ICRlKCk7YXdhaXQgdC5kaXNwYXRjaChcInNldC1zZWxlY3RlZC1zY2hlbWVcIixlKX0sQ3Q9YXN5bmMgZT0+e2NvbnN0IHQ9YXdhaXQgaHQoKTthd2FpdCB0LmRpc3BhdGNoKGZ0LlVwZGF0ZVBsYXRmb3JtVGhlbWVTY2hlbWUse3NjaGVtZTplfSl9LG10PWFzeW5jIGU9Pntjb25zdCB0PWF3YWl0IGllKCk7cmV0dXJuIFByb21pc2UuYWxsKHQubWFwKChhc3luYyB0PT57Y29uc3Qgbj1hd2FpdCB0dCh0LmlkZW50aXR5KTthd2FpdCBuLmRpc3BhdGNoKGl0LlNldFNlbGVjdGVkU2NoZW1lLGUpfSkpKX0sd3Q9YXN5bmMgZT0+e2NvbnN0IHQ9bmV3IEFycmF5LG49ZmluLkFwcGxpY2F0aW9uLmdldEN1cnJlbnRTeW5jKCkscj1hd2FpdCBuLmdldFZpZXdzKCk7Zm9yKGNvbnN0IGUgb2Ygcil7LTEhPT1lLmlkZW50aXR5Lm5hbWUuaW5kZXhPZihlZS5Ccm93c2VyQWRkcmVzc1NlYXJjaFByZWZpeCkmJnQucHVzaChlLmlkZW50aXR5KTstMSE9PShhd2FpdCBlLmdldE9wdGlvbnMoKSkudXJsLmluZGV4T2YoSy5FbnRlcnByaXNlQnJvd3NlcikmJnQucHVzaChlLmlkZW50aXR5KX1yZXR1cm4gUHJvbWlzZS5hbGwodC5tYXAoKGFzeW5jIHQ9Pntjb25zdCBuPWF3YWl0IHR0KHQsXCJ0aGVtZS1jaGFuZ2UtbGlzdGVuZXJcIik7YXdhaXQgbi5kaXNwYXRjaChpdC5TZXRTZWxlY3RlZFNjaGVtZSxlKX0pKSl9LGJ0PWFzeW5jIGU9Pntjb25zdCB0PWF3YWl0IGxlKCk7cmV0dXJuIFByb21pc2UuYWxsKHQubWFwKChhc3luYyB0PT57Y29uc3Qgbj1hd2FpdCB0dCh0LmlkZW50aXR5KTthd2FpdCBuLmRpc3BhdGNoKGl0LlNldFNlbGVjdGVkU2NoZW1lLGUpfSkpKX0seXQ9YXN5bmMgZT0+e2NvbnN0IHQ9YXdhaXQgdHQoe3V1aWQ6bmUudXVpZCxuYW1lOmVlLkVudGVycHJpc2VDb250ZXh0TWVudX0pO2F3YWl0IHQuZGlzcGF0Y2goaXQuU2V0U2VsZWN0ZWRTY2hlbWUsZSl9LHh0PWFzeW5jIGU9Pntjb25zdCB0PWF3YWl0IHR0KHt1dWlkOm5lLnV1aWQsbmFtZTplZS5FbnRlcnByaXNlQm9va21hcmtEaWFsb2dXaW5kb3d9KTthd2FpdCB0LmRpc3BhdGNoKGl0LlNldFNlbGVjdGVkU2NoZW1lLGUpLmNhdGNoKCgoKT0+e30pKX0sa3Q9YXN5bmMgZT0+e2NvbnN0IHQ9YXdhaXQgdHQoe3V1aWQ6bmUudXVpZCxuYW1lOmVlLkRyb3Bkb3duTWVudX0pO2F3YWl0IHQuZGlzcGF0Y2goaXQuU2V0U2VsZWN0ZWRTY2hlbWUsZSkuY2F0Y2goKCgpPT57fSkpfSxTdD1hc3luYyBlPT57aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGxvY2FsU3RvcmFnZSl0cnl7YXdhaXQgUHJvbWlzZS5hbGwoW2R0KFBlLlNlbGVjdGVkQ29sb3JTY2hlbWUsZSksd3QoZSksQ3QoZSksbXQoZSksYnQoZSkseXQoZSksdnQoZSkseHQoZSksa3QoZSldKX1jYXRjaChlKXtjb25zb2xlLmVycm9yKFwiZmFpbGVkIHRvIHNldCB0aGUgc2VsZWN0ZWQgc2NoZW1lOiBcIixlKX19LE90PSgpPT57aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGxvY2FsU3RvcmFnZSlyZXR1cm4gbnVsbDt0cnl7Y29uc3QgZT1wdChQZS5TZWxlY3RlZENvbG9yU2NoZW1lKTtyZXR1cm4gZXx8bnVsbH1jYXRjaChlKXtjb25zb2xlLmVycm9yKFwiZmFpbGVkIHRvIGdldCB0aGUgc2VsZWN0ZWQgc2NoZW1lOiBcIixlKX19LE10PWU9Pntjb25zdCB0PWZpbi5QbGF0Zm9ybS53cmFwU3luYyhlKTtsZXQgbjtyZXR1cm4gT2JqZWN0LmFzc2lnbih0LHthcHBseVNuYXBzaG90OmFzeW5jKHQsbik9PntpZihcInN0cmluZ1wiIT10eXBlb2YgdCYmIXQ/LndpbmRvd3MpdGhyb3cgbmV3IEVycm9yKFwiTm90IGEgdmFsaWQgYnJvd3NlciBzbmFwc2hvdFwiKTtyZXR1cm4gZmluLlBsYXRmb3JtLndyYXBTeW5jKGUpLmFwcGx5U25hcHNob3QodCxuKX0sZ2V0U25hcHNob3Q6KCk9PmZpbi5QbGF0Zm9ybS53cmFwU3luYyhlKS5nZXRTbmFwc2hvdCgpLnRoZW4oKGU9PmUpKSxnZXRWaWV3U25hcHNob3Q6dD0+ZmluLlBsYXRmb3JtLndyYXBTeW5jKGUpLmdldFZpZXdTbmFwc2hvdCh0KSxjcmVhdGVWaWV3Oih0LG4scik9PmZpbi5QbGF0Zm9ybS53cmFwU3luYyhlKS5jcmVhdGVWaWV3KHQsbixyKSxsYXVuY2hBcHA6YXN5bmMgdD0+e2NvbnNvbGUud2FybihcImxhdW5jaEFwcCBtZXRob2QgaXMgZGVwcmVjYXRlZC4gSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIGNyZWF0ZVZpZXcgLSBodHRwczovL2RldmVsb3BlcnMub3BlbmZpbi5jby9vZi1kb2NzL2RvY3MvcGxhdGZvcm0tZ2V0dGluZy1zdGFydGVkI2FkZC1hLXZpZXctdG8tYW4tZXhpc3Rpbmctd2luZG93IG9yICBjcmVhdGVXaW5kb3cgLSBodHRwczovL2RldmVsb3BlcnMub3BlbmZpbi5jby9vZi1kb2NzL2RvY3MvcGxhdGZvcm0tZ2V0dGluZy1zdGFydGVkI2NyZWF0ZS1hLXBsYXRmb3JtLXdpbmRvdyBpbnN0ZWFkLlwiKSx0LnRhcmdldHx8KHQudGFyZ2V0PXt1dWlkOmosbmFtZTpSLGVudGl0eVR5cGU6SXx8XCJ1bmtub3duXCJ9KTtyZXR1cm4oYXdhaXQgcWUoZSkpLmRpc3BhdGNoKHplLkxhdW5jaEFwcCx0KX0sX2ludm9rZUN1c3RvbUFjdGlvbjphc3luYyh0LG4pPT57Y29uc3Qgcj1hd2FpdCBxZShlKSxvPXthY3Rpb25JZDp0LHBheWxvYWQ6ey4uLm4sY2FsbGVyVHlwZTpuLmNhbGxlclR5cGV8fGsuQVBJfX07cmV0dXJuIHIuZGlzcGF0Y2goemUuSW52b2tlQ3VzdG9tQWN0aW9uSW50ZXJuYWwsbyl9LF9yZXF1ZXN0UXVpdFBsYXRmb3JtRGlhbG9nOmFzeW5jIHQ9Pihhd2FpdCBxZShlKSkuZGlzcGF0Y2goemUuUmVxdWVzdFF1aXRQbGF0Zm9ybURpYWxvZ0ludGVybmFsLHQpLGdldEN1cnJlbnRXb3Jrc3BhY2U6YXN5bmMoKT0+KGF3YWl0IHFlKGUpKS5kaXNwYXRjaCh6ZS5HZXRDdXJyZW50V29ya3NwYWNlLHZvaWQgMCksYXBwbHlXb3Jrc3BhY2U6YXN5bmModCxuKT0+KGF3YWl0IHFlKGUpKS5kaXNwYXRjaCh6ZS5BcHBseVdvcmtzcGFjZSx7Li4udCxvcHRpb25zOm59KSxzZXRBY3RpdmVXb3Jrc3BhY2U6YXN5bmMgdD0+KGF3YWl0IHFlKGUpKS5kaXNwYXRjaCh6ZS5TZXRBY3RpdmVXb3Jrc3BhY2UsdCksZ2V0TGFuZ3VhZ2U6YXN5bmMoKT0+KGF3YWl0IHFlKGUpKS5kaXNwYXRjaCh6ZS5HZXRMYW5ndWFnZSksX2dldExhbmd1YWdlUmVzb3VyY2VzOmFzeW5jKCk9Pihhd2FpdCBxZShlKSkuZGlzcGF0Y2goemUuR2V0TGFuZ3VhZ2VSZXNvdXJjZXNJbnRlcm5hbCksc2V0TGFuZ3VhZ2U6YXN5bmMgdD0+KGF3YWl0IHFlKGUpKS5kaXNwYXRjaCh6ZS5TZXRMYW5ndWFnZSx0KSxfcmFpc2VBbmFseXRpY3M6YXN5bmMgdD0+e2lmKG58fChuPWF3YWl0IEtlKGUpKSxcIm9iamVjdFwiPT10eXBlb2YgbiYmbj8uYW5hbHl0aWNzPy5pc1N1cHBvcnRlZCl7cmV0dXJuKGF3YWl0IHFlKGUpKS5kaXNwYXRjaCh6ZS5BbmFseXRpY3MsdCl9ZS51dWlkfSxnZXROb3RpZmljYXRpb25zQ29uZmlnOmFzeW5jKCk9Pihhd2FpdCBxZShlKSkuZGlzcGF0Y2goemUuR2V0Tm90aWZpY2F0aW9uc0NvbmZpZyksX3JlZnJlc2hCb29rbWFya3NJbnRlcm5hbDphc3luYygpPT4oYXdhaXQgcWUoZSkpLmRpc3BhdGNoKHplLlJlZnJlc2hCb29rbWFya3NJbnRlcm5hbCksVGhlbWU6Z3QoZSksQnJvd3NlcjpjdChlKSxTdG9yYWdlOnV0KGUpfSl9LEx0PSgpPT5NdChmaW4ubWUuaWRlbnRpdHkpLF90PXtjb250ZXh0TWVudU9wdGlvbnM6e2VuYWJsZWQ6ITAsdGVtcGxhdGU6W1wic3BlbGxDaGVja1wiLFwic2VwYXJhdG9yXCIsXCJwcmludFwiLFwic2VwYXJhdG9yXCIsXCJjdXRcIixcImNvcHlcIixcInBhc3RlXCIsXCJ1bmRvXCIsXCJyZWRvXCIsXCJzZWxlY3RBbGxcIixcImluc3BlY3RcIixcInJlbG9hZFwiXX0sZG93bmxvYWRTaGVsZjp7ZW5hYmxlZDohMH19O2Z1bmN0aW9uIFB0KGUsdCl7cmV0dXJuIE9lKHt9LF90LHQsZSl9Y29uc3QgRXQ9XCJpbnRlcm5hbC1nZW5lcmF0ZWQtdmlldy1cIixqdD0oZSx0KT0+ZS5jb250ZW50P3suLi5lLGNvbnRlbnQ6ZS5jb250ZW50Lm1hcCgoZT0+anQoZSx0KSkpfTp7Li4uZSxjb21wb25lbnRTdGF0ZTp0KGUuY29tcG9uZW50U3RhdGUpfSxSdD0oZSx0KT0+e3JldHVybiBuPVB0KGUsdCksey4uLm4sbmFtZTpuLm5hbWU/bi5uYW1lOmBpbnRlcm5hbC1nZW5lcmF0ZWQtdmlldy0ke0hlKCl9YCxfaW50ZXJuYWxXb3Jrc3BhY2VEYXRhOnsuLi5uLl9pbnRlcm5hbFdvcmtzcGFjZURhdGEsdmlld0lkZW50aWZpZXI6bi5faW50ZXJuYWxXb3Jrc3BhY2VEYXRhPy52aWV3SWRlbnRpZmllcnx8SGUoKX19O3ZhciBufSxJdD1lPT4oey4uLmUsbmFtZTp2b2lkIDB9KSxWdD1lPT57Y29uc3QgdD17Li4uZX07cmV0dXJuIGp0KHQsSXQpfSxIdD1lPT57Y29uc3QgdD17Li4uZX07cmV0dXJuIGp0KHQsKGU9PmUubmFtZSYmZS5uYW1lLnN0YXJ0c1dpdGgoRXQpP0l0KGUpOmUpKX0sQXQ9ZT0+e2NvbnN0IHQ9W107cmV0dXJuKGUmJkFycmF5LmlzQXJyYXkoZSk/ZTpbXSkuZm9yRWFjaCgoZT0+e2lmKFwiY29tcG9uZW50XCI9PT1lLnR5cGUpcmV0dXJuIHQucHVzaChlLmNvbXBvbmVudFN0YXRlKTtjb25zdCBuPUF0KGUuY29udGVudCk7dC5wdXNoKC4uLm4pfSkpLHR9O25ldyBNYXAsbmV3IE1hcDtjb25zdCBUdD0oZSx0KT0+e2NvbnN0IG49QXQodC5jb250ZW50KTtyZXR1cm57Li4uanQoZSwoZT0+e2NvbnN0IHQ9bi5maW5kKCh0PT50Ll9pbnRlcm5hbFdvcmtzcGFjZURhdGE/LnZpZXdJZGVudGlmaWVyPT09ZS5faW50ZXJuYWxXb3Jrc3BhY2VEYXRhPy52aWV3SWRlbnRpZmllcikpLHI9dD90LmlzQ2xvc2FibGU6ZS5pc0Nsb3NhYmxlO3JldHVybnsuLi5lLGlzQ2xvc2FibGU6cn19KSksc2V0dGluZ3M6dC5zZXR0aW5nc319LER0PWU9PmU/QXQoZSkubGVuZ3RoOjA7X2UoKSgoYXN5bmMgZT0+e3RyeXtjb25zdCB0PWF3YWl0KGFzeW5jIGU9PmZpbi5QbGF0Zm9ybS5MYXlvdXQud3JhcFN5bmMoey4uLmZpbi5tZS5pZGVudGl0eSxsYXlvdXROYW1lOmV9KS5nZXRDb25maWcoKSkoZS5sYXlvdXRDb250YWluZXJLZXkpLG49dC5jb250ZW50P0F0KHQuY29udGVudCk6W10scj1uLmxlbmd0aDtyPjE/KGU9PntcIm11bHRpVmlld1wiIT09ZS5hdHRhY2hlZFBhZ2VUeXBlJiZMdCgpLkJyb3dzZXIud3JhcFN5bmMobmUpLnVwZGF0ZVBhZ2Uoe3BhZ2VJZDplLnBhZ2VJZCxwYWdlOntzaW5nbGVWaWV3TmFtZTpudWxsLGF0dGFjaGVkUGFnZVR5cGU6XCJtdWx0aVZpZXdcIn19KX0pKGUpOjE9PT1yJiYoYXN5bmMoZSx0KT0+e2NvbnN0IG49THQoKS5Ccm93c2VyLndyYXBTeW5jKG5lKTtpZihcInNpbmdsZVZpZXdcIiE9PWUuYXR0YWNoZWRQYWdlVHlwZSl7Y29uc3Qgcj1hd2FpdCBXZShlKSxvPWF3YWl0IEx0KCkuQnJvd3Nlci5nZXRVbmlxdWVQYWdlVGl0bGUoKTtkZWxldGUgci5sYXlvdXQ7Y29uc3QgYT17Li4ucixzaW5nbGVWaWV3TmFtZTp0LHRpdGxlOm8saGFzVW5zYXZlZENoYW5nZXM6ITEsYXR0YWNoZWRQYWdlVHlwZTpcInNpbmdsZVZpZXdcIn07YXdhaXQgbi51cGRhdGVQYWdlKHtwYWdlSWQ6ZS5wYWdlSWQscGFnZTphfSl9fSkoZSxuWzBdLm5hbWUpLGF3YWl0KGFzeW5jKGUsdCk9Pntjb25zdCBuPVVlKHsuLi5uZSxsYXlvdXROYW1lOmUubGF5b3V0Q29udGFpbmVyS2V5fSkscj1hd2FpdCBuLmlzU2hvd2luZ1RhYnMoKTt0PjE/cnx8YXdhaXQgbi5zaG93KCk6MT09PXQmJnImJmF3YWl0IG4uaGlkZSh7c2V0dGluZ3M6e3Jlb3JkZXJFbmFibGVkOiEwfX0pfSkoZSxyKX1jYXRjaChlKXt9fSksNTAse2xlYWRpbmc6ITEsdHJhaWxpbmc6ITB9KTtuKDM2MSk7T2JqZWN0LmNyZWF0ZShudWxsKTtjb25zdCBCdD0vJig/OmFtcHwjMzh8bHR8IzYwfGd0fCM2MnxhcG9zfCMzOXxxdW90fCMzNHxuYnNwfCMxNjB8Y29weXwjMTY5fHJlZ3wjMTc0fGhlbGxpcHwjODIzMHwjeDJGfCM0Nyk7L2csWnQ9e1wiJmFtcDtcIjpcIiZcIixcIiYjMzg7XCI6XCImXCIsXCImbHQ7XCI6XCI8XCIsXCImIzYwO1wiOlwiPFwiLFwiJmd0O1wiOlwiPlwiLFwiJiM2MjtcIjpcIj5cIixcIiZhcG9zO1wiOlwiJ1wiLFwiJiMzOTtcIjpcIidcIixcIiZxdW90O1wiOidcIicsXCImIzM0O1wiOidcIicsXCImbmJzcDtcIjpcIiBcIixcIiYjMTYwO1wiOlwiIFwiLFwiJmNvcHk7XCI6XCLCqVwiLFwiJiMxNjk7XCI6XCLCqVwiLFwiJnJlZztcIjpcIsKuXCIsXCImIzE3NDtcIjpcIsKuXCIsXCImaGVsbGlwO1wiOlwi4oCmXCIsXCImIzgyMzA7XCI6XCLigKZcIixcIiYjeDJGO1wiOlwiL1wiLFwiJiM0NztcIjpcIi9cIn0sJHQ9ZT0+WnRbZV07bGV0IE50LEZ0PXtiaW5kSTE4bjpcImxhbmd1YWdlQ2hhbmdlZFwiLGJpbmRJMThuU3RvcmU6XCJcIix0cmFuc0VtcHR5Tm9kZVZhbHVlOlwiXCIsdHJhbnNTdXBwb3J0QmFzaWNIdG1sTm9kZXM6ITAsdHJhbnNXcmFwVGV4dE5vZGVzOlwiXCIsdHJhbnNLZWVwQmFzaWNIdG1sTm9kZXNGb3I6W1wiYnJcIixcInN0cm9uZ1wiLFwiaVwiLFwicFwiXSx1c2VTdXNwZW5zZTohMCx1bmVzY2FwZTplPT5lLnJlcGxhY2UoQnQsJHQpfTtjb25zdCBXdD17dHlwZTpcIjNyZFBhcnR5XCIsaW5pdChlKXshZnVuY3Rpb24oKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307RnQ9ey4uLkZ0LC4uLmV9fShlLm9wdGlvbnMucmVhY3QpLGZ1bmN0aW9uKGUpe050PWV9KGUpfX07KDAsWi5jcmVhdGVDb250ZXh0KSgpO2NvbnN0IFV0PXt0eXBlOlwibG9nZ2VyXCIsbG9nKGUpe3RoaXMub3V0cHV0KFwibG9nXCIsZSl9LHdhcm4oZSl7dGhpcy5vdXRwdXQoXCJ3YXJuXCIsZSl9LGVycm9yKGUpe3RoaXMub3V0cHV0KFwiZXJyb3JcIixlKX0sb3V0cHV0KGUsdCl7Y29uc29sZSYmY29uc29sZVtlXSYmY29uc29sZVtlXS5hcHBseShjb25zb2xlLHQpfX07Y2xhc3MgenR7Y29uc3RydWN0b3IoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O3RoaXMuaW5pdChlLHQpfWluaXQoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O3RoaXMucHJlZml4PXQucHJlZml4fHxcImkxOG5leHQ6XCIsdGhpcy5sb2dnZXI9ZXx8VXQsdGhpcy5vcHRpb25zPXQsdGhpcy5kZWJ1Zz10LmRlYnVnfWxvZygpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dO3JldHVybiB0aGlzLmZvcndhcmQodCxcImxvZ1wiLFwiXCIsITApfXdhcm4oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gdGhpcy5mb3J3YXJkKHQsXCJ3YXJuXCIsXCJcIiwhMCl9ZXJyb3IoKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gdGhpcy5mb3J3YXJkKHQsXCJlcnJvclwiLFwiXCIpfWRlcHJlY2F0ZSgpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dO3JldHVybiB0aGlzLmZvcndhcmQodCxcIndhcm5cIixcIldBUk5JTkcgREVQUkVDQVRFRDogXCIsITApfWZvcndhcmQoZSx0LG4scil7cmV0dXJuIHImJiF0aGlzLmRlYnVnP251bGw6KFwic3RyaW5nXCI9PXR5cGVvZiBlWzBdJiYoZVswXT1gJHtufSR7dGhpcy5wcmVmaXh9ICR7ZVswXX1gKSx0aGlzLmxvZ2dlclt0XShlKSl9Y3JlYXRlKGUpe3JldHVybiBuZXcgenQodGhpcy5sb2dnZXIse3ByZWZpeDpgJHt0aGlzLnByZWZpeH06JHtlfTpgLC4uLnRoaXMub3B0aW9uc30pfWNsb25lKGUpe3JldHVybihlPWV8fHRoaXMub3B0aW9ucykucHJlZml4PWUucHJlZml4fHx0aGlzLnByZWZpeCxuZXcgenQodGhpcy5sb2dnZXIsZSl9fXZhciBHdD1uZXcgenQ7Y2xhc3MgS3R7Y29uc3RydWN0b3IoKXt0aGlzLm9ic2VydmVycz17fX1vbihlLHQpe3JldHVybiBlLnNwbGl0KFwiIFwiKS5mb3JFYWNoKChlPT57dGhpcy5vYnNlcnZlcnNbZV18fCh0aGlzLm9ic2VydmVyc1tlXT1uZXcgTWFwKTtjb25zdCBuPXRoaXMub2JzZXJ2ZXJzW2VdLmdldCh0KXx8MDt0aGlzLm9ic2VydmVyc1tlXS5zZXQodCxuKzEpfSkpLHRoaXN9b2ZmKGUsdCl7dGhpcy5vYnNlcnZlcnNbZV0mJih0P3RoaXMub2JzZXJ2ZXJzW2VdLmRlbGV0ZSh0KTpkZWxldGUgdGhpcy5vYnNlcnZlcnNbZV0pfWVtaXQoZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkodD4xP3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO2lmKHRoaXMub2JzZXJ2ZXJzW2VdKXtBcnJheS5mcm9tKHRoaXMub2JzZXJ2ZXJzW2VdLmVudHJpZXMoKSkuZm9yRWFjaCgoZT0+e2xldFt0LHJdPWU7Zm9yKGxldCBlPTA7ZTxyO2UrKyl0KC4uLm4pfSkpfWlmKHRoaXMub2JzZXJ2ZXJzW1wiKlwiXSl7QXJyYXkuZnJvbSh0aGlzLm9ic2VydmVyc1tcIipcIl0uZW50cmllcygpKS5mb3JFYWNoKCh0PT57bGV0W3Isb109dDtmb3IobGV0IHQ9MDt0PG87dCsrKXIuYXBwbHkocixbZSwuLi5uXSl9KSl9fX1mdW5jdGlvbiBxdCgpe2xldCBlLHQ7Y29uc3Qgbj1uZXcgUHJvbWlzZSgoKG4scik9PntlPW4sdD1yfSkpO3JldHVybiBuLnJlc29sdmU9ZSxuLnJlamVjdD10LG59ZnVuY3Rpb24gWXQoZSl7cmV0dXJuIG51bGw9PWU/XCJcIjpcIlwiK2V9Y29uc3QgSnQ9LyMjIy9nO2Z1bmN0aW9uIFh0KGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLmluZGV4T2YoXCIjIyNcIik+LTE/ZS5yZXBsYWNlKEp0LFwiLlwiKTplfWZ1bmN0aW9uIG8oKXtyZXR1cm4hZXx8XCJzdHJpbmdcIj09dHlwZW9mIGV9Y29uc3QgYT1cInN0cmluZ1wiIT10eXBlb2YgdD90OnQuc3BsaXQoXCIuXCIpO2xldCBpPTA7Zm9yKDtpPGEubGVuZ3RoLTE7KXtpZihvKCkpcmV0dXJue307Y29uc3QgdD1yKGFbaV0pOyFlW3RdJiZuJiYoZVt0XT1uZXcgbiksZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KT9lW3RdOnt9LCsraX1yZXR1cm4gbygpP3t9OntvYmo6ZSxrOnIoYVtpXSl9fWZ1bmN0aW9uIFF0KGUsdCxuKXtjb25zdHtvYmo6cixrOm99PVh0KGUsdCxPYmplY3QpO2lmKHZvaWQgMCE9PXJ8fDE9PT10Lmxlbmd0aClyZXR1cm4gdm9pZChyW29dPW4pO2xldCBhPXRbdC5sZW5ndGgtMV0saT10LnNsaWNlKDAsdC5sZW5ndGgtMSksbD1YdChlLGksT2JqZWN0KTtmb3IoO3ZvaWQgMD09PWwub2JqJiZpLmxlbmd0aDspYT1gJHtpW2kubGVuZ3RoLTFdfS4ke2F9YCxpPWkuc2xpY2UoMCxpLmxlbmd0aC0xKSxsPVh0KGUsaSxPYmplY3QpLGwmJmwub2JqJiZ2b2lkIDAhPT1sLm9ialtgJHtsLmt9LiR7YX1gXSYmKGwub2JqPXZvaWQgMCk7bC5vYmpbYCR7bC5rfS4ke2F9YF09bn1mdW5jdGlvbiBlbihlLHQpe2NvbnN0e29iajpuLGs6cn09WHQoZSx0KTtpZihuKXJldHVybiBuW3JdfWZ1bmN0aW9uIHRuKGUsdCxuKXtmb3IoY29uc3QgciBpbiB0KVwiX19wcm90b19fXCIhPT1yJiZcImNvbnN0cnVjdG9yXCIhPT1yJiYociBpbiBlP1wic3RyaW5nXCI9PXR5cGVvZiBlW3JdfHxlW3JdaW5zdGFuY2VvZiBTdHJpbmd8fFwic3RyaW5nXCI9PXR5cGVvZiB0W3JdfHx0W3JdaW5zdGFuY2VvZiBTdHJpbmc/biYmKGVbcl09dFtyXSk6dG4oZVtyXSx0W3JdLG4pOmVbcl09dFtyXSk7cmV0dXJuIGV9ZnVuY3Rpb24gbm4oZSl7cmV0dXJuIGUucmVwbGFjZSgvW1xcLVxcW1xcXVxcL1xce1xcfVxcKFxcKVxcKlxcK1xcP1xcLlxcXFxcXF5cXCRcXHxdL2csXCJcXFxcJCZcIil9dmFyIHJuPXtcIiZcIjpcIiZhbXA7XCIsXCI8XCI6XCImbHQ7XCIsXCI+XCI6XCImZ3Q7XCIsJ1wiJzpcIiZxdW90O1wiLFwiJ1wiOlwiJiMzOTtcIixcIi9cIjpcIiYjeDJGO1wifTtmdW5jdGlvbiBvbihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZT9lLnJlcGxhY2UoL1smPD5cIidcXC9dL2csKGU9PnJuW2VdKSk6ZX1jb25zdCBhbj1bXCIgXCIsXCIsXCIsXCI/XCIsXCIhXCIsXCI7XCJdLGxuPW5ldyBjbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLmNhcGFjaXR5PWUsdGhpcy5yZWdFeHBNYXA9bmV3IE1hcCx0aGlzLnJlZ0V4cFF1ZXVlPVtdfWdldFJlZ0V4cChlKXtjb25zdCB0PXRoaXMucmVnRXhwTWFwLmdldChlKTtpZih2b2lkIDAhPT10KXJldHVybiB0O2NvbnN0IG49bmV3IFJlZ0V4cChlKTtyZXR1cm4gdGhpcy5yZWdFeHBRdWV1ZS5sZW5ndGg9PT10aGlzLmNhcGFjaXR5JiZ0aGlzLnJlZ0V4cE1hcC5kZWxldGUodGhpcy5yZWdFeHBRdWV1ZS5zaGlmdCgpKSx0aGlzLnJlZ0V4cE1hcC5zZXQoZSxuKSx0aGlzLnJlZ0V4cFF1ZXVlLnB1c2goZSksbn19KDIwKTtmdW5jdGlvbiBzbihlLHQpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpcIi5cIjtpZighZSlyZXR1cm47aWYoZVt0XSlyZXR1cm4gZVt0XTtjb25zdCByPXQuc3BsaXQobik7bGV0IG89ZTtmb3IobGV0IGU9MDtlPHIubGVuZ3RoOyl7aWYoIW98fFwib2JqZWN0XCIhPXR5cGVvZiBvKXJldHVybjtsZXQgdCxhPVwiXCI7Zm9yKGxldCBpPWU7aTxyLmxlbmd0aDsrK2kpaWYoaSE9PWUmJihhKz1uKSxhKz1yW2ldLHQ9b1thXSx2b2lkIDAhPT10KXtpZihbXCJzdHJpbmdcIixcIm51bWJlclwiLFwiYm9vbGVhblwiXS5pbmRleE9mKHR5cGVvZiB0KT4tMSYmaTxyLmxlbmd0aC0xKWNvbnRpbnVlO2UrPWktZSsxO2JyZWFrfW89dH1yZXR1cm4gb31mdW5jdGlvbiBjbihlKXtyZXR1cm4gZSYmZS5pbmRleE9mKFwiX1wiKT4wP2UucmVwbGFjZShcIl9cIixcIi1cIik6ZX1jbGFzcyB1biBleHRlbmRzIEt0e2NvbnN0cnVjdG9yKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7bnM6W1widHJhbnNsYXRpb25cIl0sZGVmYXVsdE5TOlwidHJhbnNsYXRpb25cIn07c3VwZXIoKSx0aGlzLmRhdGE9ZXx8e30sdGhpcy5vcHRpb25zPXQsdm9pZCAwPT09dGhpcy5vcHRpb25zLmtleVNlcGFyYXRvciYmKHRoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3I9XCIuXCIpLHZvaWQgMD09PXRoaXMub3B0aW9ucy5pZ25vcmVKU09OU3RydWN0dXJlJiYodGhpcy5vcHRpb25zLmlnbm9yZUpTT05TdHJ1Y3R1cmU9ITApfWFkZE5hbWVzcGFjZXMoZSl7dGhpcy5vcHRpb25zLm5zLmluZGV4T2YoZSk8MCYmdGhpcy5vcHRpb25zLm5zLnB1c2goZSl9cmVtb3ZlTmFtZXNwYWNlcyhlKXtjb25zdCB0PXRoaXMub3B0aW9ucy5ucy5pbmRleE9mKGUpO3Q+LTEmJnRoaXMub3B0aW9ucy5ucy5zcGxpY2UodCwxKX1nZXRSZXNvdXJjZShlLHQsbil7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOnt9O2NvbnN0IG89dm9pZCAwIT09ci5rZXlTZXBhcmF0b3I/ci5rZXlTZXBhcmF0b3I6dGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcixhPXZvaWQgMCE9PXIuaWdub3JlSlNPTlN0cnVjdHVyZT9yLmlnbm9yZUpTT05TdHJ1Y3R1cmU6dGhpcy5vcHRpb25zLmlnbm9yZUpTT05TdHJ1Y3R1cmU7bGV0IGk7ZS5pbmRleE9mKFwiLlwiKT4tMT9pPWUuc3BsaXQoXCIuXCIpOihpPVtlLHRdLG4mJihBcnJheS5pc0FycmF5KG4pP2kucHVzaCguLi5uKTpcInN0cmluZ1wiPT10eXBlb2YgbiYmbz9pLnB1c2goLi4ubi5zcGxpdChvKSk6aS5wdXNoKG4pKSk7Y29uc3QgbD1lbih0aGlzLmRhdGEsaSk7cmV0dXJuIWwmJiF0JiYhbiYmZS5pbmRleE9mKFwiLlwiKT4tMSYmKGU9aVswXSx0PWlbMV0sbj1pLnNsaWNlKDIpLmpvaW4oXCIuXCIpKSxsfHwhYXx8XCJzdHJpbmdcIiE9dHlwZW9mIG4/bDpzbih0aGlzLmRhdGEmJnRoaXMuZGF0YVtlXSYmdGhpcy5kYXRhW2VdW3RdLG4sbyl9YWRkUmVzb3VyY2UoZSx0LG4scil7bGV0IG89YXJndW1lbnRzLmxlbmd0aD40JiZ2b2lkIDAhPT1hcmd1bWVudHNbNF0/YXJndW1lbnRzWzRdOntzaWxlbnQ6ITF9O2NvbnN0IGE9dm9pZCAwIT09by5rZXlTZXBhcmF0b3I/by5rZXlTZXBhcmF0b3I6dGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcjtsZXQgaT1bZSx0XTtuJiYoaT1pLmNvbmNhdChhP24uc3BsaXQoYSk6bikpLGUuaW5kZXhPZihcIi5cIik+LTEmJihpPWUuc3BsaXQoXCIuXCIpLHI9dCx0PWlbMV0pLHRoaXMuYWRkTmFtZXNwYWNlcyh0KSxRdCh0aGlzLmRhdGEsaSxyKSxvLnNpbGVudHx8dGhpcy5lbWl0KFwiYWRkZWRcIixlLHQsbixyKX1hZGRSZXNvdXJjZXMoZSx0LG4pe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTp7c2lsZW50OiExfTtmb3IoY29uc3QgciBpbiBuKVwic3RyaW5nXCIhPXR5cGVvZiBuW3JdJiZcIltvYmplY3QgQXJyYXldXCIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KG5bcl0pfHx0aGlzLmFkZFJlc291cmNlKGUsdCxyLG5bcl0se3NpbGVudDohMH0pO3Iuc2lsZW50fHx0aGlzLmVtaXQoXCJhZGRlZFwiLGUsdCxuKX1hZGRSZXNvdXJjZUJ1bmRsZShlLHQsbixyLG8pe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+NSYmdm9pZCAwIT09YXJndW1lbnRzWzVdP2FyZ3VtZW50c1s1XTp7c2lsZW50OiExfSxpPVtlLHRdO2UuaW5kZXhPZihcIi5cIik+LTEmJihpPWUuc3BsaXQoXCIuXCIpLHI9bixuPXQsdD1pWzFdKSx0aGlzLmFkZE5hbWVzcGFjZXModCk7bGV0IGw9ZW4odGhpcy5kYXRhLGkpfHx7fTtyP3RuKGwsbixvKTpsPXsuLi5sLC4uLm59LFF0KHRoaXMuZGF0YSxpLGwpLGEuc2lsZW50fHx0aGlzLmVtaXQoXCJhZGRlZFwiLGUsdCxuKX1yZW1vdmVSZXNvdXJjZUJ1bmRsZShlLHQpe3RoaXMuaGFzUmVzb3VyY2VCdW5kbGUoZSx0KSYmZGVsZXRlIHRoaXMuZGF0YVtlXVt0XSx0aGlzLnJlbW92ZU5hbWVzcGFjZXModCksdGhpcy5lbWl0KFwicmVtb3ZlZFwiLGUsdCl9aGFzUmVzb3VyY2VCdW5kbGUoZSx0KXtyZXR1cm4gdm9pZCAwIT09dGhpcy5nZXRSZXNvdXJjZShlLHQpfWdldFJlc291cmNlQnVuZGxlKGUsdCl7cmV0dXJuIHR8fCh0PXRoaXMub3B0aW9ucy5kZWZhdWx0TlMpLFwidjFcIj09PXRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5QVBJP3suLi50aGlzLmdldFJlc291cmNlKGUsdCl9OnRoaXMuZ2V0UmVzb3VyY2UoZSx0KX1nZXREYXRhQnlMYW5ndWFnZShlKXtyZXR1cm4gdGhpcy5kYXRhW2VdfWhhc0xhbmd1YWdlU29tZVRyYW5zbGF0aW9ucyhlKXtjb25zdCB0PXRoaXMuZ2V0RGF0YUJ5TGFuZ3VhZ2UoZSk7cmV0dXJuISEodCYmT2JqZWN0LmtleXModCl8fFtdKS5maW5kKChlPT50W2VdJiZPYmplY3Qua2V5cyh0W2VdKS5sZW5ndGg+MCkpfXRvSlNPTigpe3JldHVybiB0aGlzLmRhdGF9fXZhciBkbj17cHJvY2Vzc29yczp7fSxhZGRQb3N0UHJvY2Vzc29yKGUpe3RoaXMucHJvY2Vzc29yc1tlLm5hbWVdPWV9LGhhbmRsZShlLHQsbixyLG8pe3JldHVybiBlLmZvckVhY2goKGU9Pnt0aGlzLnByb2Nlc3NvcnNbZV0mJih0PXRoaXMucHJvY2Vzc29yc1tlXS5wcm9jZXNzKHQsbixyLG8pKX0pKSx0fX07Y29uc3QgcG49e307Y2xhc3MgZm4gZXh0ZW5kcyBLdHtjb25zdHJ1Y3RvcihlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307c3VwZXIoKSxmdW5jdGlvbihlLHQsbil7ZS5mb3JFYWNoKChlPT57dFtlXSYmKG5bZV09dFtlXSl9KSl9KFtcInJlc291cmNlU3RvcmVcIixcImxhbmd1YWdlVXRpbHNcIixcInBsdXJhbFJlc29sdmVyXCIsXCJpbnRlcnBvbGF0b3JcIixcImJhY2tlbmRDb25uZWN0b3JcIixcImkxOG5Gb3JtYXRcIixcInV0aWxzXCJdLGUsdGhpcyksdGhpcy5vcHRpb25zPXQsdm9pZCAwPT09dGhpcy5vcHRpb25zLmtleVNlcGFyYXRvciYmKHRoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3I9XCIuXCIpLHRoaXMubG9nZ2VyPUd0LmNyZWF0ZShcInRyYW5zbGF0b3JcIil9Y2hhbmdlTGFuZ3VhZ2UoZSl7ZSYmKHRoaXMubGFuZ3VhZ2U9ZSl9ZXhpc3RzKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7aW50ZXJwb2xhdGlvbjp7fX07aWYobnVsbD09ZSlyZXR1cm4hMTtjb25zdCBuPXRoaXMucmVzb2x2ZShlLHQpO3JldHVybiBuJiZ2b2lkIDAhPT1uLnJlc31leHRyYWN0RnJvbUtleShlLHQpe2xldCBuPXZvaWQgMCE9PXQubnNTZXBhcmF0b3I/dC5uc1NlcGFyYXRvcjp0aGlzLm9wdGlvbnMubnNTZXBhcmF0b3I7dm9pZCAwPT09biYmKG49XCI6XCIpO2NvbnN0IHI9dm9pZCAwIT09dC5rZXlTZXBhcmF0b3I/dC5rZXlTZXBhcmF0b3I6dGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcjtsZXQgbz10Lm5zfHx0aGlzLm9wdGlvbnMuZGVmYXVsdE5TfHxbXTtjb25zdCBhPW4mJmUuaW5kZXhPZihuKT4tMSxpPSEodGhpcy5vcHRpb25zLnVzZXJEZWZpbmVkS2V5U2VwYXJhdG9yfHx0LmtleVNlcGFyYXRvcnx8dGhpcy5vcHRpb25zLnVzZXJEZWZpbmVkTnNTZXBhcmF0b3J8fHQubnNTZXBhcmF0b3J8fGZ1bmN0aW9uKGUsdCxuKXt0PXR8fFwiXCIsbj1ufHxcIlwiO2NvbnN0IHI9YW4uZmlsdGVyKChlPT50LmluZGV4T2YoZSk8MCYmbi5pbmRleE9mKGUpPDApKTtpZigwPT09ci5sZW5ndGgpcmV0dXJuITA7Y29uc3Qgbz1sbi5nZXRSZWdFeHAoYCgke3IubWFwKChlPT5cIj9cIj09PWU/XCJcXFxcP1wiOmUpKS5qb2luKFwifFwiKX0pYCk7bGV0IGE9IW8udGVzdChlKTtpZighYSl7Y29uc3QgdD1lLmluZGV4T2Yobik7dD4wJiYhby50ZXN0KGUuc3Vic3RyaW5nKDAsdCkpJiYoYT0hMCl9cmV0dXJuIGF9KGUsbixyKSk7aWYoYSYmIWkpe2NvbnN0IHQ9ZS5tYXRjaCh0aGlzLmludGVycG9sYXRvci5uZXN0aW5nUmVnZXhwKTtpZih0JiZ0Lmxlbmd0aD4wKXJldHVybntrZXk6ZSxuYW1lc3BhY2VzOm99O2NvbnN0IGE9ZS5zcGxpdChuKTsobiE9PXJ8fG49PT1yJiZ0aGlzLm9wdGlvbnMubnMuaW5kZXhPZihhWzBdKT4tMSkmJihvPWEuc2hpZnQoKSksZT1hLmpvaW4ocil9cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIG8mJihvPVtvXSkse2tleTplLG5hbWVzcGFjZXM6b319dHJhbnNsYXRlKGUsdCxuKXtpZihcIm9iamVjdFwiIT10eXBlb2YgdCYmdGhpcy5vcHRpb25zLm92ZXJsb2FkVHJhbnNsYXRpb25PcHRpb25IYW5kbGVyJiYodD10aGlzLm9wdGlvbnMub3ZlcmxvYWRUcmFuc2xhdGlvbk9wdGlvbkhhbmRsZXIoYXJndW1lbnRzKSksXCJvYmplY3RcIj09dHlwZW9mIHQmJih0PXsuLi50fSksdHx8KHQ9e30pLG51bGw9PWUpcmV0dXJuXCJcIjtBcnJheS5pc0FycmF5KGUpfHwoZT1bU3RyaW5nKGUpXSk7Y29uc3Qgcj12b2lkIDAhPT10LnJldHVybkRldGFpbHM/dC5yZXR1cm5EZXRhaWxzOnRoaXMub3B0aW9ucy5yZXR1cm5EZXRhaWxzLG89dm9pZCAwIT09dC5rZXlTZXBhcmF0b3I/dC5rZXlTZXBhcmF0b3I6dGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcix7a2V5OmEsbmFtZXNwYWNlczppfT10aGlzLmV4dHJhY3RGcm9tS2V5KGVbZS5sZW5ndGgtMV0sdCksbD1pW2kubGVuZ3RoLTFdLHM9dC5sbmd8fHRoaXMubGFuZ3VhZ2UsYz10LmFwcGVuZE5hbWVzcGFjZVRvQ0lNb2RlfHx0aGlzLm9wdGlvbnMuYXBwZW5kTmFtZXNwYWNlVG9DSU1vZGU7aWYocyYmXCJjaW1vZGVcIj09PXMudG9Mb3dlckNhc2UoKSl7aWYoYyl7Y29uc3QgZT10Lm5zU2VwYXJhdG9yfHx0aGlzLm9wdGlvbnMubnNTZXBhcmF0b3I7cmV0dXJuIHI/e3JlczpgJHtsfSR7ZX0ke2F9YCx1c2VkS2V5OmEsZXhhY3RVc2VkS2V5OmEsdXNlZExuZzpzLHVzZWROUzpsLHVzZWRQYXJhbXM6dGhpcy5nZXRVc2VkUGFyYW1zRGV0YWlscyh0KX06YCR7bH0ke2V9JHthfWB9cmV0dXJuIHI/e3JlczphLHVzZWRLZXk6YSxleGFjdFVzZWRLZXk6YSx1c2VkTG5nOnMsdXNlZE5TOmwsdXNlZFBhcmFtczp0aGlzLmdldFVzZWRQYXJhbXNEZXRhaWxzKHQpfTphfWNvbnN0IHU9dGhpcy5yZXNvbHZlKGUsdCk7bGV0IGQ9dSYmdS5yZXM7Y29uc3QgcD11JiZ1LnVzZWRLZXl8fGEsZj11JiZ1LmV4YWN0VXNlZEtleXx8YSxoPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuYXBwbHkoZCksZz12b2lkIDAhPT10LmpvaW5BcnJheXM/dC5qb2luQXJyYXlzOnRoaXMub3B0aW9ucy5qb2luQXJyYXlzLHY9IXRoaXMuaTE4bkZvcm1hdHx8dGhpcy5pMThuRm9ybWF0LmhhbmRsZUFzT2JqZWN0O2lmKHYmJmQmJihcInN0cmluZ1wiIT10eXBlb2YgZCYmXCJib29sZWFuXCIhPXR5cGVvZiBkJiZcIm51bWJlclwiIT10eXBlb2YgZCkmJltcIltvYmplY3QgTnVtYmVyXVwiLFwiW29iamVjdCBGdW5jdGlvbl1cIixcIltvYmplY3QgUmVnRXhwXVwiXS5pbmRleE9mKGgpPDAmJihcInN0cmluZ1wiIT10eXBlb2YgZ3x8XCJbb2JqZWN0IEFycmF5XVwiIT09aCkpe2lmKCF0LnJldHVybk9iamVjdHMmJiF0aGlzLm9wdGlvbnMucmV0dXJuT2JqZWN0cyl7dGhpcy5vcHRpb25zLnJldHVybmVkT2JqZWN0SGFuZGxlcnx8dGhpcy5sb2dnZXIud2FybihcImFjY2Vzc2luZyBhbiBvYmplY3QgLSBidXQgcmV0dXJuT2JqZWN0cyBvcHRpb25zIGlzIG5vdCBlbmFibGVkIVwiKTtjb25zdCBlPXRoaXMub3B0aW9ucy5yZXR1cm5lZE9iamVjdEhhbmRsZXI/dGhpcy5vcHRpb25zLnJldHVybmVkT2JqZWN0SGFuZGxlcihwLGQsey4uLnQsbnM6aX0pOmBrZXkgJyR7YX0gKCR7dGhpcy5sYW5ndWFnZX0pJyByZXR1cm5lZCBhbiBvYmplY3QgaW5zdGVhZCBvZiBzdHJpbmcuYDtyZXR1cm4gcj8odS5yZXM9ZSx1LnVzZWRQYXJhbXM9dGhpcy5nZXRVc2VkUGFyYW1zRGV0YWlscyh0KSx1KTplfWlmKG8pe2NvbnN0IGU9XCJbb2JqZWN0IEFycmF5XVwiPT09aCxuPWU/W106e30scj1lP2Y6cDtmb3IoY29uc3QgZSBpbiBkKWlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkLGUpKXtjb25zdCBhPWAke3J9JHtvfSR7ZX1gO25bZV09dGhpcy50cmFuc2xhdGUoYSx7Li4udCxqb2luQXJyYXlzOiExLG5zOml9KSxuW2VdPT09YSYmKG5bZV09ZFtlXSl9ZD1ufX1lbHNlIGlmKHYmJlwic3RyaW5nXCI9PXR5cGVvZiBnJiZcIltvYmplY3QgQXJyYXldXCI9PT1oKWQ9ZC5qb2luKGcpLGQmJihkPXRoaXMuZXh0ZW5kVHJhbnNsYXRpb24oZCxlLHQsbikpO2Vsc2V7bGV0IHI9ITEsaT0hMTtjb25zdCBjPXZvaWQgMCE9PXQuY291bnQmJlwic3RyaW5nXCIhPXR5cGVvZiB0LmNvdW50LHA9Zm4uaGFzRGVmYXVsdFZhbHVlKHQpLGY9Yz90aGlzLnBsdXJhbFJlc29sdmVyLmdldFN1ZmZpeChzLHQuY291bnQsdCk6XCJcIixoPXQub3JkaW5hbCYmYz90aGlzLnBsdXJhbFJlc29sdmVyLmdldFN1ZmZpeChzLHQuY291bnQse29yZGluYWw6ITF9KTpcIlwiLGc9YyYmIXQub3JkaW5hbCYmMD09PXQuY291bnQmJnRoaXMucGx1cmFsUmVzb2x2ZXIuc2hvdWxkVXNlSW50bEFwaSgpLHY9ZyYmdFtgZGVmYXVsdFZhbHVlJHt0aGlzLm9wdGlvbnMucGx1cmFsU2VwYXJhdG9yfXplcm9gXXx8dFtgZGVmYXVsdFZhbHVlJHtmfWBdfHx0W2BkZWZhdWx0VmFsdWUke2h9YF18fHQuZGVmYXVsdFZhbHVlOyF0aGlzLmlzVmFsaWRMb29rdXAoZCkmJnAmJihyPSEwLGQ9diksdGhpcy5pc1ZhbGlkTG9va3VwKGQpfHwoaT0hMCxkPWEpO2NvbnN0IEM9KHQubWlzc2luZ0tleU5vVmFsdWVGYWxsYmFja1RvS2V5fHx0aGlzLm9wdGlvbnMubWlzc2luZ0tleU5vVmFsdWVGYWxsYmFja1RvS2V5KSYmaT92b2lkIDA6ZCxtPXAmJnYhPT1kJiZ0aGlzLm9wdGlvbnMudXBkYXRlTWlzc2luZztpZihpfHxyfHxtKXtpZih0aGlzLmxvZ2dlci5sb2cobT9cInVwZGF0ZUtleVwiOlwibWlzc2luZ0tleVwiLHMsbCxhLG0/djpkKSxvKXtjb25zdCBlPXRoaXMucmVzb2x2ZShhLHsuLi50LGtleVNlcGFyYXRvcjohMX0pO2UmJmUucmVzJiZ0aGlzLmxvZ2dlci53YXJuKFwiU2VlbXMgdGhlIGxvYWRlZCB0cmFuc2xhdGlvbnMgd2VyZSBpbiBmbGF0IEpTT04gZm9ybWF0IGluc3RlYWQgb2YgbmVzdGVkLiBFaXRoZXIgc2V0IGtleVNlcGFyYXRvcjogZmFsc2Ugb24gaW5pdCBvciBtYWtlIHN1cmUgeW91ciB0cmFuc2xhdGlvbnMgYXJlIHB1Ymxpc2hlZCBpbiBuZXN0ZWQgZm9ybWF0LlwiKX1sZXQgZT1bXTtjb25zdCBuPXRoaXMubGFuZ3VhZ2VVdGlscy5nZXRGYWxsYmFja0NvZGVzKHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZyx0LmxuZ3x8dGhpcy5sYW5ndWFnZSk7aWYoXCJmYWxsYmFja1wiPT09dGhpcy5vcHRpb25zLnNhdmVNaXNzaW5nVG8mJm4mJm5bMF0pZm9yKGxldCB0PTA7dDxuLmxlbmd0aDt0KyspZS5wdXNoKG5bdF0pO2Vsc2VcImFsbFwiPT09dGhpcy5vcHRpb25zLnNhdmVNaXNzaW5nVG8/ZT10aGlzLmxhbmd1YWdlVXRpbHMudG9SZXNvbHZlSGllcmFyY2h5KHQubG5nfHx0aGlzLmxhbmd1YWdlKTplLnB1c2godC5sbmd8fHRoaXMubGFuZ3VhZ2UpO2NvbnN0IHI9KGUsbixyKT0+e2NvbnN0IG89cCYmciE9PWQ/cjpDO3RoaXMub3B0aW9ucy5taXNzaW5nS2V5SGFuZGxlcj90aGlzLm9wdGlvbnMubWlzc2luZ0tleUhhbmRsZXIoZSxsLG4sbyxtLHQpOnRoaXMuYmFja2VuZENvbm5lY3RvciYmdGhpcy5iYWNrZW5kQ29ubmVjdG9yLnNhdmVNaXNzaW5nJiZ0aGlzLmJhY2tlbmRDb25uZWN0b3Iuc2F2ZU1pc3NpbmcoZSxsLG4sbyxtLHQpLHRoaXMuZW1pdChcIm1pc3NpbmdLZXlcIixlLGwsbixkKX07dGhpcy5vcHRpb25zLnNhdmVNaXNzaW5nJiYodGhpcy5vcHRpb25zLnNhdmVNaXNzaW5nUGx1cmFscyYmYz9lLmZvckVhY2goKGU9Pntjb25zdCBuPXRoaXMucGx1cmFsUmVzb2x2ZXIuZ2V0U3VmZml4ZXMoZSx0KTtnJiZ0W2BkZWZhdWx0VmFsdWUke3RoaXMub3B0aW9ucy5wbHVyYWxTZXBhcmF0b3J9emVyb2BdJiZuLmluZGV4T2YoYCR7dGhpcy5vcHRpb25zLnBsdXJhbFNlcGFyYXRvcn16ZXJvYCk8MCYmbi5wdXNoKGAke3RoaXMub3B0aW9ucy5wbHVyYWxTZXBhcmF0b3J9emVyb2ApLG4uZm9yRWFjaCgobj0+e3IoW2VdLGErbix0W2BkZWZhdWx0VmFsdWUke259YF18fHYpfSkpfSkpOnIoZSxhLHYpKX1kPXRoaXMuZXh0ZW5kVHJhbnNsYXRpb24oZCxlLHQsdSxuKSxpJiZkPT09YSYmdGhpcy5vcHRpb25zLmFwcGVuZE5hbWVzcGFjZVRvTWlzc2luZ0tleSYmKGQ9YCR7bH06JHthfWApLChpfHxyKSYmdGhpcy5vcHRpb25zLnBhcnNlTWlzc2luZ0tleUhhbmRsZXImJihkPVwidjFcIiE9PXRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5QVBJP3RoaXMub3B0aW9ucy5wYXJzZU1pc3NpbmdLZXlIYW5kbGVyKHRoaXMub3B0aW9ucy5hcHBlbmROYW1lc3BhY2VUb01pc3NpbmdLZXk/YCR7bH06JHthfWA6YSxyP2Q6dm9pZCAwKTp0aGlzLm9wdGlvbnMucGFyc2VNaXNzaW5nS2V5SGFuZGxlcihkKSl9cmV0dXJuIHI/KHUucmVzPWQsdS51c2VkUGFyYW1zPXRoaXMuZ2V0VXNlZFBhcmFtc0RldGFpbHModCksdSk6ZH1leHRlbmRUcmFuc2xhdGlvbihlLHQsbixyLG8pe3ZhciBhPXRoaXM7aWYodGhpcy5pMThuRm9ybWF0JiZ0aGlzLmkxOG5Gb3JtYXQucGFyc2UpZT10aGlzLmkxOG5Gb3JtYXQucGFyc2UoZSx7Li4udGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZGVmYXVsdFZhcmlhYmxlcywuLi5ufSxuLmxuZ3x8dGhpcy5sYW5ndWFnZXx8ci51c2VkTG5nLHIudXNlZE5TLHIudXNlZEtleSx7cmVzb2x2ZWQ6cn0pO2Vsc2UgaWYoIW4uc2tpcEludGVycG9sYXRpb24pe24uaW50ZXJwb2xhdGlvbiYmdGhpcy5pbnRlcnBvbGF0b3IuaW5pdCh7Li4ubixpbnRlcnBvbGF0aW9uOnsuLi50aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbiwuLi5uLmludGVycG9sYXRpb259fSk7Y29uc3QgaT1cInN0cmluZ1wiPT10eXBlb2YgZSYmKG4mJm4uaW50ZXJwb2xhdGlvbiYmdm9pZCAwIT09bi5pbnRlcnBvbGF0aW9uLnNraXBPblZhcmlhYmxlcz9uLmludGVycG9sYXRpb24uc2tpcE9uVmFyaWFibGVzOnRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLnNraXBPblZhcmlhYmxlcyk7bGV0IGw7aWYoaSl7Y29uc3QgdD1lLm1hdGNoKHRoaXMuaW50ZXJwb2xhdG9yLm5lc3RpbmdSZWdleHApO2w9dCYmdC5sZW5ndGh9bGV0IHM9bi5yZXBsYWNlJiZcInN0cmluZ1wiIT10eXBlb2Ygbi5yZXBsYWNlP24ucmVwbGFjZTpuO2lmKHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmRlZmF1bHRWYXJpYWJsZXMmJihzPXsuLi50aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5kZWZhdWx0VmFyaWFibGVzLC4uLnN9KSxlPXRoaXMuaW50ZXJwb2xhdG9yLmludGVycG9sYXRlKGUscyxuLmxuZ3x8dGhpcy5sYW5ndWFnZSxuKSxpKXtjb25zdCB0PWUubWF0Y2godGhpcy5pbnRlcnBvbGF0b3IubmVzdGluZ1JlZ2V4cCk7bDwodCYmdC5sZW5ndGgpJiYobi5uZXN0PSExKX0hbi5sbmcmJlwidjFcIiE9PXRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5QVBJJiZyJiZyLnJlcyYmKG4ubG5nPXIudXNlZExuZyksITEhPT1uLm5lc3QmJihlPXRoaXMuaW50ZXJwb2xhdG9yLm5lc3QoZSwoZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxlO2krKylyW2ldPWFyZ3VtZW50c1tpXTtyZXR1cm4gbyYmb1swXT09PXJbMF0mJiFuLmNvbnRleHQ/KGEubG9nZ2VyLndhcm4oYEl0IHNlZW1zIHlvdSBhcmUgbmVzdGluZyByZWN1cnNpdmVseSBrZXk6ICR7clswXX0gaW4ga2V5OiAke3RbMF19YCksbnVsbCk6YS50cmFuc2xhdGUoLi4ucix0KX0pLG4pKSxuLmludGVycG9sYXRpb24mJnRoaXMuaW50ZXJwb2xhdG9yLnJlc2V0KCl9Y29uc3QgaT1uLnBvc3RQcm9jZXNzfHx0aGlzLm9wdGlvbnMucG9zdFByb2Nlc3MsbD1cInN0cmluZ1wiPT10eXBlb2YgaT9baV06aTtyZXR1cm4gbnVsbCE9ZSYmbCYmbC5sZW5ndGgmJiExIT09bi5hcHBseVBvc3RQcm9jZXNzb3ImJihlPWRuLmhhbmRsZShsLGUsdCx0aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5wb3N0UHJvY2Vzc1Bhc3NSZXNvbHZlZD97aTE4blJlc29sdmVkOnsuLi5yLHVzZWRQYXJhbXM6dGhpcy5nZXRVc2VkUGFyYW1zRGV0YWlscyhuKX0sLi4ubn06bix0aGlzKSksZX1yZXNvbHZlKGUpe2xldCB0LG4scixvLGEsaT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPVtlXSksZS5mb3JFYWNoKChlPT57aWYodGhpcy5pc1ZhbGlkTG9va3VwKHQpKXJldHVybjtjb25zdCBsPXRoaXMuZXh0cmFjdEZyb21LZXkoZSxpKSxzPWwua2V5O249cztsZXQgYz1sLm5hbWVzcGFjZXM7dGhpcy5vcHRpb25zLmZhbGxiYWNrTlMmJihjPWMuY29uY2F0KHRoaXMub3B0aW9ucy5mYWxsYmFja05TKSk7Y29uc3QgdT12b2lkIDAhPT1pLmNvdW50JiZcInN0cmluZ1wiIT10eXBlb2YgaS5jb3VudCxkPXUmJiFpLm9yZGluYWwmJjA9PT1pLmNvdW50JiZ0aGlzLnBsdXJhbFJlc29sdmVyLnNob3VsZFVzZUludGxBcGkoKSxwPXZvaWQgMCE9PWkuY29udGV4dCYmKFwic3RyaW5nXCI9PXR5cGVvZiBpLmNvbnRleHR8fFwibnVtYmVyXCI9PXR5cGVvZiBpLmNvbnRleHQpJiZcIlwiIT09aS5jb250ZXh0LGY9aS5sbmdzP2kubG5nczp0aGlzLmxhbmd1YWdlVXRpbHMudG9SZXNvbHZlSGllcmFyY2h5KGkubG5nfHx0aGlzLmxhbmd1YWdlLGkuZmFsbGJhY2tMbmcpO2MuZm9yRWFjaCgoZT0+e3RoaXMuaXNWYWxpZExvb2t1cCh0KXx8KGE9ZSwhcG5bYCR7ZlswXX0tJHtlfWBdJiZ0aGlzLnV0aWxzJiZ0aGlzLnV0aWxzLmhhc0xvYWRlZE5hbWVzcGFjZSYmIXRoaXMudXRpbHMuaGFzTG9hZGVkTmFtZXNwYWNlKGEpJiYocG5bYCR7ZlswXX0tJHtlfWBdPSEwLHRoaXMubG9nZ2VyLndhcm4oYGtleSBcIiR7bn1cIiBmb3IgbGFuZ3VhZ2VzIFwiJHtmLmpvaW4oXCIsIFwiKX1cIiB3b24ndCBnZXQgcmVzb2x2ZWQgYXMgbmFtZXNwYWNlIFwiJHthfVwiIHdhcyBub3QgeWV0IGxvYWRlZGAsXCJUaGlzIG1lYW5zIHNvbWV0aGluZyBJUyBXUk9ORyBpbiB5b3VyIHNldHVwLiBZb3UgYWNjZXNzIHRoZSB0IGZ1bmN0aW9uIGJlZm9yZSBpMThuZXh0LmluaXQgLyBpMThuZXh0LmxvYWROYW1lc3BhY2UgLyBpMThuZXh0LmNoYW5nZUxhbmd1YWdlIHdhcyBkb25lLiBXYWl0IGZvciB0aGUgY2FsbGJhY2sgb3IgUHJvbWlzZSB0byByZXNvbHZlIGJlZm9yZSBhY2Nlc3NpbmcgaXQhISFcIikpLGYuZm9yRWFjaCgobj0+e2lmKHRoaXMuaXNWYWxpZExvb2t1cCh0KSlyZXR1cm47bz1uO2NvbnN0IGE9W3NdO2lmKHRoaXMuaTE4bkZvcm1hdCYmdGhpcy5pMThuRm9ybWF0LmFkZExvb2t1cEtleXMpdGhpcy5pMThuRm9ybWF0LmFkZExvb2t1cEtleXMoYSxzLG4sZSxpKTtlbHNle2xldCBlO3UmJihlPXRoaXMucGx1cmFsUmVzb2x2ZXIuZ2V0U3VmZml4KG4saS5jb3VudCxpKSk7Y29uc3QgdD1gJHt0aGlzLm9wdGlvbnMucGx1cmFsU2VwYXJhdG9yfXplcm9gLHI9YCR7dGhpcy5vcHRpb25zLnBsdXJhbFNlcGFyYXRvcn1vcmRpbmFsJHt0aGlzLm9wdGlvbnMucGx1cmFsU2VwYXJhdG9yfWA7aWYodSYmKGEucHVzaChzK2UpLGkub3JkaW5hbCYmMD09PWUuaW5kZXhPZihyKSYmYS5wdXNoKHMrZS5yZXBsYWNlKHIsdGhpcy5vcHRpb25zLnBsdXJhbFNlcGFyYXRvcikpLGQmJmEucHVzaChzK3QpKSxwKXtjb25zdCBuPWAke3N9JHt0aGlzLm9wdGlvbnMuY29udGV4dFNlcGFyYXRvcn0ke2kuY29udGV4dH1gO2EucHVzaChuKSx1JiYoYS5wdXNoKG4rZSksaS5vcmRpbmFsJiYwPT09ZS5pbmRleE9mKHIpJiZhLnB1c2gobitlLnJlcGxhY2Uocix0aGlzLm9wdGlvbnMucGx1cmFsU2VwYXJhdG9yKSksZCYmYS5wdXNoKG4rdCkpfX1sZXQgbDtmb3IoO2w9YS5wb3AoKTspdGhpcy5pc1ZhbGlkTG9va3VwKHQpfHwocj1sLHQ9dGhpcy5nZXRSZXNvdXJjZShuLGUsbCxpKSl9KSkpfSkpfSkpLHtyZXM6dCx1c2VkS2V5Om4sZXhhY3RVc2VkS2V5OnIsdXNlZExuZzpvLHVzZWROUzphfX1pc1ZhbGlkTG9va3VwKGUpe3JldHVybiEodm9pZCAwPT09ZXx8IXRoaXMub3B0aW9ucy5yZXR1cm5OdWxsJiZudWxsPT09ZXx8IXRoaXMub3B0aW9ucy5yZXR1cm5FbXB0eVN0cmluZyYmXCJcIj09PWUpfWdldFJlc291cmNlKGUsdCxuKXtsZXQgcj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106e307cmV0dXJuIHRoaXMuaTE4bkZvcm1hdCYmdGhpcy5pMThuRm9ybWF0LmdldFJlc291cmNlP3RoaXMuaTE4bkZvcm1hdC5nZXRSZXNvdXJjZShlLHQsbixyKTp0aGlzLnJlc291cmNlU3RvcmUuZ2V0UmVzb3VyY2UoZSx0LG4scil9Z2V0VXNlZFBhcmFtc0RldGFpbHMoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307Y29uc3QgdD1bXCJkZWZhdWx0VmFsdWVcIixcIm9yZGluYWxcIixcImNvbnRleHRcIixcInJlcGxhY2VcIixcImxuZ1wiLFwibG5nc1wiLFwiZmFsbGJhY2tMbmdcIixcIm5zXCIsXCJrZXlTZXBhcmF0b3JcIixcIm5zU2VwYXJhdG9yXCIsXCJyZXR1cm5PYmplY3RzXCIsXCJyZXR1cm5EZXRhaWxzXCIsXCJqb2luQXJyYXlzXCIsXCJwb3N0UHJvY2Vzc1wiLFwiaW50ZXJwb2xhdGlvblwiXSxuPWUucmVwbGFjZSYmXCJzdHJpbmdcIiE9dHlwZW9mIGUucmVwbGFjZTtsZXQgcj1uP2UucmVwbGFjZTplO2lmKG4mJnZvaWQgMCE9PWUuY291bnQmJihyLmNvdW50PWUuY291bnQpLHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmRlZmF1bHRWYXJpYWJsZXMmJihyPXsuLi50aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5kZWZhdWx0VmFyaWFibGVzLC4uLnJ9KSwhbil7cj17Li4ucn07Zm9yKGNvbnN0IGUgb2YgdClkZWxldGUgcltlXX1yZXR1cm4gcn1zdGF0aWMgaGFzRGVmYXVsdFZhbHVlKGUpe2NvbnN0IHQ9XCJkZWZhdWx0VmFsdWVcIjtmb3IoY29uc3QgbiBpbiBlKWlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZ0PT09bi5zdWJzdHJpbmcoMCwxMikmJnZvaWQgMCE9PWVbbl0pcmV0dXJuITA7cmV0dXJuITF9fWZ1bmN0aW9uIGhuKGUpe3JldHVybiBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSl9Y2xhc3MgZ257Y29uc3RydWN0b3IoZSl7dGhpcy5vcHRpb25zPWUsdGhpcy5zdXBwb3J0ZWRMbmdzPXRoaXMub3B0aW9ucy5zdXBwb3J0ZWRMbmdzfHwhMSx0aGlzLmxvZ2dlcj1HdC5jcmVhdGUoXCJsYW5ndWFnZVV0aWxzXCIpfWdldFNjcmlwdFBhcnRGcm9tQ29kZShlKXtpZighKGU9Y24oZSkpfHxlLmluZGV4T2YoXCItXCIpPDApcmV0dXJuIG51bGw7Y29uc3QgdD1lLnNwbGl0KFwiLVwiKTtyZXR1cm4gMj09PXQubGVuZ3RoP251bGw6KHQucG9wKCksXCJ4XCI9PT10W3QubGVuZ3RoLTFdLnRvTG93ZXJDYXNlKCk/bnVsbDp0aGlzLmZvcm1hdExhbmd1YWdlQ29kZSh0LmpvaW4oXCItXCIpKSl9Z2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUoZSl7aWYoIShlPWNuKGUpKXx8ZS5pbmRleE9mKFwiLVwiKTwwKXJldHVybiBlO2NvbnN0IHQ9ZS5zcGxpdChcIi1cIik7cmV0dXJuIHRoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKHRbMF0pfWZvcm1hdExhbmd1YWdlQ29kZShlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSYmZS5pbmRleE9mKFwiLVwiKT4tMSl7Y29uc3QgdD1bXCJoYW5zXCIsXCJoYW50XCIsXCJsYXRuXCIsXCJjeXJsXCIsXCJjYW5zXCIsXCJtb25nXCIsXCJhcmFiXCJdO2xldCBuPWUuc3BsaXQoXCItXCIpO3JldHVybiB0aGlzLm9wdGlvbnMubG93ZXJDYXNlTG5nP249bi5tYXAoKGU9PmUudG9Mb3dlckNhc2UoKSkpOjI9PT1uLmxlbmd0aD8oblswXT1uWzBdLnRvTG93ZXJDYXNlKCksblsxXT1uWzFdLnRvVXBwZXJDYXNlKCksdC5pbmRleE9mKG5bMV0udG9Mb3dlckNhc2UoKSk+LTEmJihuWzFdPWhuKG5bMV0udG9Mb3dlckNhc2UoKSkpKTozPT09bi5sZW5ndGgmJihuWzBdPW5bMF0udG9Mb3dlckNhc2UoKSwyPT09blsxXS5sZW5ndGgmJihuWzFdPW5bMV0udG9VcHBlckNhc2UoKSksXCJzZ25cIiE9PW5bMF0mJjI9PT1uWzJdLmxlbmd0aCYmKG5bMl09blsyXS50b1VwcGVyQ2FzZSgpKSx0LmluZGV4T2YoblsxXS50b0xvd2VyQ2FzZSgpKT4tMSYmKG5bMV09aG4oblsxXS50b0xvd2VyQ2FzZSgpKSksdC5pbmRleE9mKG5bMl0udG9Mb3dlckNhc2UoKSk+LTEmJihuWzJdPWhuKG5bMl0udG9Mb3dlckNhc2UoKSkpKSxuLmpvaW4oXCItXCIpfXJldHVybiB0aGlzLm9wdGlvbnMuY2xlYW5Db2RlfHx0aGlzLm9wdGlvbnMubG93ZXJDYXNlTG5nP2UudG9Mb3dlckNhc2UoKTplfWlzU3VwcG9ydGVkQ29kZShlKXtyZXR1cm4oXCJsYW5ndWFnZU9ubHlcIj09PXRoaXMub3B0aW9ucy5sb2FkfHx0aGlzLm9wdGlvbnMubm9uRXhwbGljaXRTdXBwb3J0ZWRMbmdzKSYmKGU9dGhpcy5nZXRMYW5ndWFnZVBhcnRGcm9tQ29kZShlKSksIXRoaXMuc3VwcG9ydGVkTG5nc3x8IXRoaXMuc3VwcG9ydGVkTG5ncy5sZW5ndGh8fHRoaXMuc3VwcG9ydGVkTG5ncy5pbmRleE9mKGUpPi0xfWdldEJlc3RNYXRjaEZyb21Db2RlcyhlKXtpZighZSlyZXR1cm4gbnVsbDtsZXQgdDtyZXR1cm4gZS5mb3JFYWNoKChlPT57aWYodClyZXR1cm47Y29uc3Qgbj10aGlzLmZvcm1hdExhbmd1YWdlQ29kZShlKTt0aGlzLm9wdGlvbnMuc3VwcG9ydGVkTG5ncyYmIXRoaXMuaXNTdXBwb3J0ZWRDb2RlKG4pfHwodD1uKX0pKSwhdCYmdGhpcy5vcHRpb25zLnN1cHBvcnRlZExuZ3MmJmUuZm9yRWFjaCgoZT0+e2lmKHQpcmV0dXJuO2NvbnN0IG49dGhpcy5nZXRMYW5ndWFnZVBhcnRGcm9tQ29kZShlKTtpZih0aGlzLmlzU3VwcG9ydGVkQ29kZShuKSlyZXR1cm4gdD1uO3Q9dGhpcy5vcHRpb25zLnN1cHBvcnRlZExuZ3MuZmluZCgoZT0+ZT09PW4/ZTplLmluZGV4T2YoXCItXCIpPDAmJm4uaW5kZXhPZihcIi1cIik8MD92b2lkIDA6MD09PWUuaW5kZXhPZihuKT9lOnZvaWQgMCkpfSkpLHR8fCh0PXRoaXMuZ2V0RmFsbGJhY2tDb2Rlcyh0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcpWzBdKSx0fWdldEZhbGxiYWNrQ29kZXMoZSx0KXtpZighZSlyZXR1cm5bXTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiYoZT1lKHQpKSxcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9W2VdKSxcIltvYmplY3QgQXJyYXldXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KGUpKXJldHVybiBlO2lmKCF0KXJldHVybiBlLmRlZmF1bHR8fFtdO2xldCBuPWVbdF07cmV0dXJuIG58fChuPWVbdGhpcy5nZXRTY3JpcHRQYXJ0RnJvbUNvZGUodCldKSxufHwobj1lW3RoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKHQpXSksbnx8KG49ZVt0aGlzLmdldExhbmd1YWdlUGFydEZyb21Db2RlKHQpXSksbnx8KG49ZS5kZWZhdWx0KSxufHxbXX10b1Jlc29sdmVIaWVyYXJjaHkoZSx0KXtjb25zdCBuPXRoaXMuZ2V0RmFsbGJhY2tDb2Rlcyh0fHx0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmd8fFtdLGUpLHI9W10sbz1lPT57ZSYmKHRoaXMuaXNTdXBwb3J0ZWRDb2RlKGUpP3IucHVzaChlKTp0aGlzLmxvZ2dlci53YXJuKGByZWplY3RpbmcgbGFuZ3VhZ2UgY29kZSBub3QgZm91bmQgaW4gc3VwcG9ydGVkTG5nczogJHtlfWApKX07cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUmJihlLmluZGV4T2YoXCItXCIpPi0xfHxlLmluZGV4T2YoXCJfXCIpPi0xKT8oXCJsYW5ndWFnZU9ubHlcIiE9PXRoaXMub3B0aW9ucy5sb2FkJiZvKHRoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKGUpKSxcImxhbmd1YWdlT25seVwiIT09dGhpcy5vcHRpb25zLmxvYWQmJlwiY3VycmVudE9ubHlcIiE9PXRoaXMub3B0aW9ucy5sb2FkJiZvKHRoaXMuZ2V0U2NyaXB0UGFydEZyb21Db2RlKGUpKSxcImN1cnJlbnRPbmx5XCIhPT10aGlzLm9wdGlvbnMubG9hZCYmbyh0aGlzLmdldExhbmd1YWdlUGFydEZyb21Db2RlKGUpKSk6XCJzdHJpbmdcIj09dHlwZW9mIGUmJm8odGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUoZSkpLG4uZm9yRWFjaCgoZT0+e3IuaW5kZXhPZihlKTwwJiZvKHRoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKGUpKX0pKSxyfX1sZXQgdm49W3tsbmdzOltcImFjaFwiLFwiYWtcIixcImFtXCIsXCJhcm5cIixcImJyXCIsXCJmaWxcIixcImd1blwiLFwibG5cIixcIm1mZVwiLFwibWdcIixcIm1pXCIsXCJvY1wiLFwicHRcIixcInB0LUJSXCIsXCJ0Z1wiLFwidGxcIixcInRpXCIsXCJ0clwiLFwidXpcIixcIndhXCJdLG5yOlsxLDJdLGZjOjF9LHtsbmdzOltcImFmXCIsXCJhblwiLFwiYXN0XCIsXCJhelwiLFwiYmdcIixcImJuXCIsXCJjYVwiLFwiZGFcIixcImRlXCIsXCJkZXZcIixcImVsXCIsXCJlblwiLFwiZW9cIixcImVzXCIsXCJldFwiLFwiZXVcIixcImZpXCIsXCJmb1wiLFwiZnVyXCIsXCJmeVwiLFwiZ2xcIixcImd1XCIsXCJoYVwiLFwiaGlcIixcImh1XCIsXCJoeVwiLFwiaWFcIixcIml0XCIsXCJra1wiLFwia25cIixcImt1XCIsXCJsYlwiLFwibWFpXCIsXCJtbFwiLFwibW5cIixcIm1yXCIsXCJuYWhcIixcIm5hcFwiLFwibmJcIixcIm5lXCIsXCJubFwiLFwibm5cIixcIm5vXCIsXCJuc29cIixcInBhXCIsXCJwYXBcIixcInBtc1wiLFwicHNcIixcInB0LVBUXCIsXCJybVwiLFwic2NvXCIsXCJzZVwiLFwic2lcIixcInNvXCIsXCJzb25cIixcInNxXCIsXCJzdlwiLFwic3dcIixcInRhXCIsXCJ0ZVwiLFwidGtcIixcInVyXCIsXCJ5b1wiXSxucjpbMSwyXSxmYzoyfSx7bG5nczpbXCJheVwiLFwiYm9cIixcImNnZ1wiLFwiZmFcIixcImh0XCIsXCJpZFwiLFwiamFcIixcImpib1wiLFwia2FcIixcImttXCIsXCJrb1wiLFwia3lcIixcImxvXCIsXCJtc1wiLFwic2FoXCIsXCJzdVwiLFwidGhcIixcInR0XCIsXCJ1Z1wiLFwidmlcIixcIndvXCIsXCJ6aFwiXSxucjpbMV0sZmM6M30se2xuZ3M6W1wiYmVcIixcImJzXCIsXCJjbnJcIixcImR6XCIsXCJoclwiLFwicnVcIixcInNyXCIsXCJ1a1wiXSxucjpbMSwyLDVdLGZjOjR9LHtsbmdzOltcImFyXCJdLG5yOlswLDEsMiwzLDExLDEwMF0sZmM6NX0se2xuZ3M6W1wiY3NcIixcInNrXCJdLG5yOlsxLDIsNV0sZmM6Nn0se2xuZ3M6W1wiY3NiXCIsXCJwbFwiXSxucjpbMSwyLDVdLGZjOjd9LHtsbmdzOltcImN5XCJdLG5yOlsxLDIsMyw4XSxmYzo4fSx7bG5nczpbXCJmclwiXSxucjpbMSwyXSxmYzo5fSx7bG5nczpbXCJnYVwiXSxucjpbMSwyLDMsNywxMV0sZmM6MTB9LHtsbmdzOltcImdkXCJdLG5yOlsxLDIsMywyMF0sZmM6MTF9LHtsbmdzOltcImlzXCJdLG5yOlsxLDJdLGZjOjEyfSx7bG5nczpbXCJqdlwiXSxucjpbMCwxXSxmYzoxM30se2xuZ3M6W1wia3dcIl0sbnI6WzEsMiwzLDRdLGZjOjE0fSx7bG5nczpbXCJsdFwiXSxucjpbMSwyLDEwXSxmYzoxNX0se2xuZ3M6W1wibHZcIl0sbnI6WzEsMiwwXSxmYzoxNn0se2xuZ3M6W1wibWtcIl0sbnI6WzEsMl0sZmM6MTd9LHtsbmdzOltcIm1ua1wiXSxucjpbMCwxLDJdLGZjOjE4fSx7bG5nczpbXCJtdFwiXSxucjpbMSwyLDExLDIwXSxmYzoxOX0se2xuZ3M6W1wib3JcIl0sbnI6WzIsMV0sZmM6Mn0se2xuZ3M6W1wicm9cIl0sbnI6WzEsMiwyMF0sZmM6MjB9LHtsbmdzOltcInNsXCJdLG5yOls1LDEsMiwzXSxmYzoyMX0se2xuZ3M6W1wiaGVcIixcIml3XCJdLG5yOlsxLDIsMjAsMjFdLGZjOjIyfV0sQ249ezE6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcihlPjEpfSwyOmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoMSE9ZSl9LDM6ZnVuY3Rpb24oZSl7cmV0dXJuIDB9LDQ6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcihlJTEwPT0xJiZlJTEwMCE9MTE/MDplJTEwPj0yJiZlJTEwPD00JiYoZSUxMDA8MTB8fGUlMTAwPj0yMCk/MToyKX0sNTpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDA9PWU/MDoxPT1lPzE6Mj09ZT8yOmUlMTAwPj0zJiZlJTEwMDw9MTA/MzplJTEwMD49MTE/NDo1KX0sNjpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDE9PWU/MDplPj0yJiZlPD00PzE6Mil9LDc6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lPzA6ZSUxMD49MiYmZSUxMDw9NCYmKGUlMTAwPDEwfHxlJTEwMD49MjApPzE6Mil9LDg6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lPzA6Mj09ZT8xOjghPWUmJjExIT1lPzI6Myl9LDk6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcihlPj0yKX0sMTA6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lPzA6Mj09ZT8xOmU8Nz8yOmU8MTE/Mzo0KX0sMTE6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lfHwxMT09ZT8wOjI9PWV8fDEyPT1lPzE6ZT4yJiZlPDIwPzI6Myl9LDEyOmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoZSUxMCE9MXx8ZSUxMDA9PTExKX0sMTM6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigwIT09ZSl9LDE0OmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoMT09ZT8wOjI9PWU/MTozPT1lPzI6Myl9LDE1OmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoZSUxMD09MSYmZSUxMDAhPTExPzA6ZSUxMD49MiYmKGUlMTAwPDEwfHxlJTEwMD49MjApPzE6Mil9LDE2OmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoZSUxMD09MSYmZSUxMDAhPTExPzA6MCE9PWU/MToyKX0sMTc6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lfHxlJTEwPT0xJiZlJTEwMCE9MTE/MDoxKX0sMTg6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigwPT1lPzA6MT09ZT8xOjIpfSwxOTpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDE9PWU/MDowPT1lfHxlJTEwMD4xJiZlJTEwMDwxMT8xOmUlMTAwPjEwJiZlJTEwMDwyMD8yOjMpfSwyMDpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDE9PWU/MDowPT1lfHxlJTEwMD4wJiZlJTEwMDwyMD8xOjIpfSwyMTpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKGUlMTAwPT0xPzE6ZSUxMDA9PTI/MjplJTEwMD09M3x8ZSUxMDA9PTQ/MzowKX0sMjI6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lPzA6Mj09ZT8xOihlPDB8fGU+MTApJiZlJTEwPT0wPzI6Myl9fTtjb25zdCBtbj1bXCJ2MVwiLFwidjJcIixcInYzXCJdLHduPVtcInY0XCJdLGJuPXt6ZXJvOjAsb25lOjEsdHdvOjIsZmV3OjMsbWFueTo0LG90aGVyOjV9O2NsYXNzIHlue2NvbnN0cnVjdG9yKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTt0aGlzLmxhbmd1YWdlVXRpbHM9ZSx0aGlzLm9wdGlvbnM9dCx0aGlzLmxvZ2dlcj1HdC5jcmVhdGUoXCJwbHVyYWxSZXNvbHZlclwiKSx0aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUpTT04mJiF3bi5pbmNsdWRlcyh0aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUpTT04pfHxcInVuZGVmaW5lZFwiIT10eXBlb2YgSW50bCYmSW50bC5QbHVyYWxSdWxlc3x8KHRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTj1cInYzXCIsdGhpcy5sb2dnZXIuZXJyb3IoXCJZb3VyIGVudmlyb25tZW50IHNlZW1zIG5vdCB0byBiZSBJbnRsIEFQSSBjb21wYXRpYmxlLCB1c2UgYW4gSW50bC5QbHVyYWxSdWxlcyBwb2x5ZmlsbC4gV2lsbCBmYWxsYmFjayB0byB0aGUgY29tcGF0aWJpbGl0eUpTT04gdjMgZm9ybWF0IGhhbmRsaW5nLlwiKSksdGhpcy5ydWxlcz1mdW5jdGlvbigpe2NvbnN0IGU9e307cmV0dXJuIHZuLmZvckVhY2goKHQ9Pnt0LmxuZ3MuZm9yRWFjaCgobj0+e2Vbbl09e251bWJlcnM6dC5ucixwbHVyYWxzOkNuW3QuZmNdfX0pKX0pKSxlfSgpfWFkZFJ1bGUoZSx0KXt0aGlzLnJ1bGVzW2VdPXR9Z2V0UnVsZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307aWYodGhpcy5zaG91bGRVc2VJbnRsQXBpKCkpdHJ5e3JldHVybiBuZXcgSW50bC5QbHVyYWxSdWxlcyhjbihcImRldlwiPT09ZT9cImVuXCI6ZSkse3R5cGU6dC5vcmRpbmFsP1wib3JkaW5hbFwiOlwiY2FyZGluYWxcIn0pfWNhdGNoKGUpe3JldHVybn1yZXR1cm4gdGhpcy5ydWxlc1tlXXx8dGhpcy5ydWxlc1t0aGlzLmxhbmd1YWdlVXRpbHMuZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUoZSldfW5lZWRzUGx1cmFsKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtjb25zdCBuPXRoaXMuZ2V0UnVsZShlLHQpO3JldHVybiB0aGlzLnNob3VsZFVzZUludGxBcGkoKT9uJiZuLnJlc29sdmVkT3B0aW9ucygpLnBsdXJhbENhdGVnb3JpZXMubGVuZ3RoPjE6biYmbi5udW1iZXJzLmxlbmd0aD4xfWdldFBsdXJhbEZvcm1zT2ZLZXkoZSx0KXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307cmV0dXJuIHRoaXMuZ2V0U3VmZml4ZXMoZSxuKS5tYXAoKGU9PmAke3R9JHtlfWApKX1nZXRTdWZmaXhlcyhlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307Y29uc3Qgbj10aGlzLmdldFJ1bGUoZSx0KTtyZXR1cm4gbj90aGlzLnNob3VsZFVzZUludGxBcGkoKT9uLnJlc29sdmVkT3B0aW9ucygpLnBsdXJhbENhdGVnb3JpZXMuc29ydCgoKGUsdCk9PmJuW2VdLWJuW3RdKSkubWFwKChlPT5gJHt0aGlzLm9wdGlvbnMucHJlcGVuZH0ke3Qub3JkaW5hbD9gb3JkaW5hbCR7dGhpcy5vcHRpb25zLnByZXBlbmR9YDpcIlwifSR7ZX1gKSk6bi5udW1iZXJzLm1hcCgobj0+dGhpcy5nZXRTdWZmaXgoZSxuLHQpKSk6W119Z2V0U3VmZml4KGUsdCl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9O2NvbnN0IHI9dGhpcy5nZXRSdWxlKGUsbik7cmV0dXJuIHI/dGhpcy5zaG91bGRVc2VJbnRsQXBpKCk/YCR7dGhpcy5vcHRpb25zLnByZXBlbmR9JHtuLm9yZGluYWw/YG9yZGluYWwke3RoaXMub3B0aW9ucy5wcmVwZW5kfWA6XCJcIn0ke3Iuc2VsZWN0KHQpfWA6dGhpcy5nZXRTdWZmaXhSZXRyb0NvbXBhdGlibGUocix0KToodGhpcy5sb2dnZXIud2Fybihgbm8gcGx1cmFsIHJ1bGUgZm91bmQgZm9yOiAke2V9YCksXCJcIil9Z2V0U3VmZml4UmV0cm9Db21wYXRpYmxlKGUsdCl7Y29uc3Qgbj1lLm5vQWJzP2UucGx1cmFscyh0KTplLnBsdXJhbHMoTWF0aC5hYnModCkpO2xldCByPWUubnVtYmVyc1tuXTt0aGlzLm9wdGlvbnMuc2ltcGxpZnlQbHVyYWxTdWZmaXgmJjI9PT1lLm51bWJlcnMubGVuZ3RoJiYxPT09ZS5udW1iZXJzWzBdJiYoMj09PXI/cj1cInBsdXJhbFwiOjE9PT1yJiYocj1cIlwiKSk7Y29uc3Qgbz0oKT0+dGhpcy5vcHRpb25zLnByZXBlbmQmJnIudG9TdHJpbmcoKT90aGlzLm9wdGlvbnMucHJlcGVuZCtyLnRvU3RyaW5nKCk6ci50b1N0cmluZygpO3JldHVyblwidjFcIj09PXRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTj8xPT09cj9cIlwiOlwibnVtYmVyXCI9PXR5cGVvZiByP2BfcGx1cmFsXyR7ci50b1N0cmluZygpfWA6bygpOlwidjJcIj09PXRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTnx8dGhpcy5vcHRpb25zLnNpbXBsaWZ5UGx1cmFsU3VmZml4JiYyPT09ZS5udW1iZXJzLmxlbmd0aCYmMT09PWUubnVtYmVyc1swXT9vKCk6dGhpcy5vcHRpb25zLnByZXBlbmQmJm4udG9TdHJpbmcoKT90aGlzLm9wdGlvbnMucHJlcGVuZCtuLnRvU3RyaW5nKCk6bi50b1N0cmluZygpfXNob3VsZFVzZUludGxBcGkoKXtyZXR1cm4hbW4uaW5jbHVkZXModGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlKU09OKX19ZnVuY3Rpb24geG4oZSx0LG4pe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTpcIi5cIixvPSEoYXJndW1lbnRzLmxlbmd0aD40JiZ2b2lkIDAhPT1hcmd1bWVudHNbNF0pfHxhcmd1bWVudHNbNF0sYT1mdW5jdGlvbihlLHQsbil7Y29uc3Qgcj1lbihlLG4pO3JldHVybiB2b2lkIDAhPT1yP3I6ZW4odCxuKX0oZSx0LG4pO3JldHVybiFhJiZvJiZcInN0cmluZ1wiPT10eXBlb2YgbiYmKGE9c24oZSxuLHIpLHZvaWQgMD09PWEmJihhPXNuKHQsbixyKSkpLGF9Y2xhc3Mga257Y29uc3RydWN0b3IoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307dGhpcy5sb2dnZXI9R3QuY3JlYXRlKFwiaW50ZXJwb2xhdG9yXCIpLHRoaXMub3B0aW9ucz1lLHRoaXMuZm9ybWF0PWUuaW50ZXJwb2xhdGlvbiYmZS5pbnRlcnBvbGF0aW9uLmZvcm1hdHx8KGU9PmUpLHRoaXMuaW5pdChlKX1pbml0KCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2UuaW50ZXJwb2xhdGlvbnx8KGUuaW50ZXJwb2xhdGlvbj17ZXNjYXBlVmFsdWU6ITB9KTtjb25zdCB0PWUuaW50ZXJwb2xhdGlvbjt0aGlzLmVzY2FwZT12b2lkIDAhPT10LmVzY2FwZT90LmVzY2FwZTpvbix0aGlzLmVzY2FwZVZhbHVlPXZvaWQgMD09PXQuZXNjYXBlVmFsdWV8fHQuZXNjYXBlVmFsdWUsdGhpcy51c2VSYXdWYWx1ZVRvRXNjYXBlPXZvaWQgMCE9PXQudXNlUmF3VmFsdWVUb0VzY2FwZSYmdC51c2VSYXdWYWx1ZVRvRXNjYXBlLHRoaXMucHJlZml4PXQucHJlZml4P25uKHQucHJlZml4KTp0LnByZWZpeEVzY2FwZWR8fFwie3tcIix0aGlzLnN1ZmZpeD10LnN1ZmZpeD9ubih0LnN1ZmZpeCk6dC5zdWZmaXhFc2NhcGVkfHxcIn19XCIsdGhpcy5mb3JtYXRTZXBhcmF0b3I9dC5mb3JtYXRTZXBhcmF0b3I/dC5mb3JtYXRTZXBhcmF0b3I6dC5mb3JtYXRTZXBhcmF0b3J8fFwiLFwiLHRoaXMudW5lc2NhcGVQcmVmaXg9dC51bmVzY2FwZVN1ZmZpeD9cIlwiOnQudW5lc2NhcGVQcmVmaXh8fFwiLVwiLHRoaXMudW5lc2NhcGVTdWZmaXg9dGhpcy51bmVzY2FwZVByZWZpeD9cIlwiOnQudW5lc2NhcGVTdWZmaXh8fFwiXCIsdGhpcy5uZXN0aW5nUHJlZml4PXQubmVzdGluZ1ByZWZpeD9ubih0Lm5lc3RpbmdQcmVmaXgpOnQubmVzdGluZ1ByZWZpeEVzY2FwZWR8fG5uKFwiJHQoXCIpLHRoaXMubmVzdGluZ1N1ZmZpeD10Lm5lc3RpbmdTdWZmaXg/bm4odC5uZXN0aW5nU3VmZml4KTp0Lm5lc3RpbmdTdWZmaXhFc2NhcGVkfHxubihcIilcIiksdGhpcy5uZXN0aW5nT3B0aW9uc1NlcGFyYXRvcj10Lm5lc3RpbmdPcHRpb25zU2VwYXJhdG9yP3QubmVzdGluZ09wdGlvbnNTZXBhcmF0b3I6dC5uZXN0aW5nT3B0aW9uc1NlcGFyYXRvcnx8XCIsXCIsdGhpcy5tYXhSZXBsYWNlcz10Lm1heFJlcGxhY2VzP3QubWF4UmVwbGFjZXM6MWUzLHRoaXMuYWx3YXlzRm9ybWF0PXZvaWQgMCE9PXQuYWx3YXlzRm9ybWF0JiZ0LmFsd2F5c0Zvcm1hdCx0aGlzLnJlc2V0UmVnRXhwKCl9cmVzZXQoKXt0aGlzLm9wdGlvbnMmJnRoaXMuaW5pdCh0aGlzLm9wdGlvbnMpfXJlc2V0UmVnRXhwKCl7Y29uc3QgZT0oZSx0KT0+ZSYmZS5zb3VyY2U9PT10PyhlLmxhc3RJbmRleD0wLGUpOm5ldyBSZWdFeHAodCxcImdcIik7dGhpcy5yZWdleHA9ZSh0aGlzLnJlZ2V4cCxgJHt0aGlzLnByZWZpeH0oLis/KSR7dGhpcy5zdWZmaXh9YCksdGhpcy5yZWdleHBVbmVzY2FwZT1lKHRoaXMucmVnZXhwVW5lc2NhcGUsYCR7dGhpcy5wcmVmaXh9JHt0aGlzLnVuZXNjYXBlUHJlZml4fSguKz8pJHt0aGlzLnVuZXNjYXBlU3VmZml4fSR7dGhpcy5zdWZmaXh9YCksdGhpcy5uZXN0aW5nUmVnZXhwPWUodGhpcy5uZXN0aW5nUmVnZXhwLGAke3RoaXMubmVzdGluZ1ByZWZpeH0oLis/KSR7dGhpcy5uZXN0aW5nU3VmZml4fWApfWludGVycG9sYXRlKGUsdCxuLHIpe2xldCBvLGEsaTtjb25zdCBsPXRoaXMub3B0aW9ucyYmdGhpcy5vcHRpb25zLmludGVycG9sYXRpb24mJnRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmRlZmF1bHRWYXJpYWJsZXN8fHt9O2Z1bmN0aW9uIHMoZSl7cmV0dXJuIGUucmVwbGFjZSgvXFwkL2csXCIkJCQkXCIpfWNvbnN0IGM9ZT0+e2lmKGUuaW5kZXhPZih0aGlzLmZvcm1hdFNlcGFyYXRvcik8MCl7Y29uc3Qgbz14bih0LGwsZSx0aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yLHRoaXMub3B0aW9ucy5pZ25vcmVKU09OU3RydWN0dXJlKTtyZXR1cm4gdGhpcy5hbHdheXNGb3JtYXQ/dGhpcy5mb3JtYXQobyx2b2lkIDAsbix7Li4uciwuLi50LGludGVycG9sYXRpb25rZXk6ZX0pOm99Y29uc3Qgbz1lLnNwbGl0KHRoaXMuZm9ybWF0U2VwYXJhdG9yKSxhPW8uc2hpZnQoKS50cmltKCksaT1vLmpvaW4odGhpcy5mb3JtYXRTZXBhcmF0b3IpLnRyaW0oKTtyZXR1cm4gdGhpcy5mb3JtYXQoeG4odCxsLGEsdGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcix0aGlzLm9wdGlvbnMuaWdub3JlSlNPTlN0cnVjdHVyZSksaSxuLHsuLi5yLC4uLnQsaW50ZXJwb2xhdGlvbmtleTphfSl9O3RoaXMucmVzZXRSZWdFeHAoKTtjb25zdCB1PXImJnIubWlzc2luZ0ludGVycG9sYXRpb25IYW5kbGVyfHx0aGlzLm9wdGlvbnMubWlzc2luZ0ludGVycG9sYXRpb25IYW5kbGVyLGQ9ciYmci5pbnRlcnBvbGF0aW9uJiZ2b2lkIDAhPT1yLmludGVycG9sYXRpb24uc2tpcE9uVmFyaWFibGVzP3IuaW50ZXJwb2xhdGlvbi5za2lwT25WYXJpYWJsZXM6dGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uc2tpcE9uVmFyaWFibGVzO3JldHVyblt7cmVnZXg6dGhpcy5yZWdleHBVbmVzY2FwZSxzYWZlVmFsdWU6ZT0+cyhlKX0se3JlZ2V4OnRoaXMucmVnZXhwLHNhZmVWYWx1ZTplPT50aGlzLmVzY2FwZVZhbHVlP3ModGhpcy5lc2NhcGUoZSkpOnMoZSl9XS5mb3JFYWNoKCh0PT57Zm9yKGk9MDtvPXQucmVnZXguZXhlYyhlKTspe2NvbnN0IG49b1sxXS50cmltKCk7aWYoYT1jKG4pLHZvaWQgMD09PWEpaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdSl7Y29uc3QgdD11KGUsbyxyKTthPVwic3RyaW5nXCI9PXR5cGVvZiB0P3Q6XCJcIn1lbHNlIGlmKHImJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG4pKWE9XCJcIjtlbHNle2lmKGQpe2E9b1swXTtjb250aW51ZX10aGlzLmxvZ2dlci53YXJuKGBtaXNzZWQgdG8gcGFzcyBpbiB2YXJpYWJsZSAke259IGZvciBpbnRlcnBvbGF0aW5nICR7ZX1gKSxhPVwiXCJ9ZWxzZVwic3RyaW5nXCI9PXR5cGVvZiBhfHx0aGlzLnVzZVJhd1ZhbHVlVG9Fc2NhcGV8fChhPVl0KGEpKTtjb25zdCBsPXQuc2FmZVZhbHVlKGEpO2lmKGU9ZS5yZXBsYWNlKG9bMF0sbCksZD8odC5yZWdleC5sYXN0SW5kZXgrPWEubGVuZ3RoLHQucmVnZXgubGFzdEluZGV4LT1vWzBdLmxlbmd0aCk6dC5yZWdleC5sYXN0SW5kZXg9MCxpKyssaT49dGhpcy5tYXhSZXBsYWNlcylicmVha319KSksZX1uZXN0KGUsdCl7bGV0IG4scixvLGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9O2Z1bmN0aW9uIGkoZSx0KXtjb25zdCBuPXRoaXMubmVzdGluZ09wdGlvbnNTZXBhcmF0b3I7aWYoZS5pbmRleE9mKG4pPDApcmV0dXJuIGU7Y29uc3Qgcj1lLnNwbGl0KG5ldyBSZWdFeHAoYCR7bn1bIF0qe2ApKTtsZXQgYT1geyR7clsxXX1gO2U9clswXSxhPXRoaXMuaW50ZXJwb2xhdGUoYSxvKTtjb25zdCBpPWEubWF0Y2goLycvZyksbD1hLm1hdGNoKC9cIi9nKTsoaSYmaS5sZW5ndGglMj09MCYmIWx8fGwubGVuZ3RoJTIhPTApJiYoYT1hLnJlcGxhY2UoLycvZywnXCInKSk7dHJ5e289SlNPTi5wYXJzZShhKSx0JiYobz17Li4udCwuLi5vfSl9Y2F0Y2godCl7cmV0dXJuIHRoaXMubG9nZ2VyLndhcm4oYGZhaWxlZCBwYXJzaW5nIG9wdGlvbnMgc3RyaW5nIGluIG5lc3RpbmcgZm9yIGtleSAke2V9YCx0KSxgJHtlfSR7bn0ke2F9YH1yZXR1cm4gZGVsZXRlIG8uZGVmYXVsdFZhbHVlLGV9Zm9yKDtuPXRoaXMubmVzdGluZ1JlZ2V4cC5leGVjKGUpOyl7bGV0IGw9W107bz17Li4uYX0sbz1vLnJlcGxhY2UmJlwic3RyaW5nXCIhPXR5cGVvZiBvLnJlcGxhY2U/by5yZXBsYWNlOm8sby5hcHBseVBvc3RQcm9jZXNzb3I9ITEsZGVsZXRlIG8uZGVmYXVsdFZhbHVlO2xldCBzPSExO2lmKC0xIT09blswXS5pbmRleE9mKHRoaXMuZm9ybWF0U2VwYXJhdG9yKSYmIS97Lip9Ly50ZXN0KG5bMV0pKXtjb25zdCBlPW5bMV0uc3BsaXQodGhpcy5mb3JtYXRTZXBhcmF0b3IpLm1hcCgoZT0+ZS50cmltKCkpKTtuWzFdPWUuc2hpZnQoKSxsPWUscz0hMH1pZihyPXQoaS5jYWxsKHRoaXMsblsxXS50cmltKCksbyksbyksciYmblswXT09PWUmJlwic3RyaW5nXCIhPXR5cGVvZiByKXJldHVybiByO1wic3RyaW5nXCIhPXR5cGVvZiByJiYocj1ZdChyKSkscnx8KHRoaXMubG9nZ2VyLndhcm4oYG1pc3NlZCB0byByZXNvbHZlICR7blsxXX0gZm9yIG5lc3RpbmcgJHtlfWApLHI9XCJcIikscyYmKHI9bC5yZWR1Y2UoKChlLHQpPT50aGlzLmZvcm1hdChlLHQsYS5sbmcsey4uLmEsaW50ZXJwb2xhdGlvbmtleTpuWzFdLnRyaW0oKX0pKSxyLnRyaW0oKSkpLGU9ZS5yZXBsYWNlKG5bMF0sciksdGhpcy5yZWdleHAubGFzdEluZGV4PTB9cmV0dXJuIGV9fWZ1bmN0aW9uIFNuKGUpe2NvbnN0IHQ9e307cmV0dXJuIGZ1bmN0aW9uKG4scixvKXtjb25zdCBhPXIrSlNPTi5zdHJpbmdpZnkobyk7bGV0IGk9dFthXTtyZXR1cm4gaXx8KGk9ZShjbihyKSxvKSx0W2FdPWkpLGkobil9fWNsYXNzIE9ue2NvbnN0cnVjdG9yKCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O3RoaXMubG9nZ2VyPUd0LmNyZWF0ZShcImZvcm1hdHRlclwiKSx0aGlzLm9wdGlvbnM9ZSx0aGlzLmZvcm1hdHM9e251bWJlcjpTbigoKGUsdCk9Pntjb25zdCBuPW5ldyBJbnRsLk51bWJlckZvcm1hdChlLHsuLi50fSk7cmV0dXJuIGU9Pm4uZm9ybWF0KGUpfSkpLGN1cnJlbmN5OlNuKCgoZSx0KT0+e2NvbnN0IG49bmV3IEludGwuTnVtYmVyRm9ybWF0KGUsey4uLnQsc3R5bGU6XCJjdXJyZW5jeVwifSk7cmV0dXJuIGU9Pm4uZm9ybWF0KGUpfSkpLGRhdGV0aW1lOlNuKCgoZSx0KT0+e2NvbnN0IG49bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoZSx7Li4udH0pO3JldHVybiBlPT5uLmZvcm1hdChlKX0pKSxyZWxhdGl2ZXRpbWU6U24oKChlLHQpPT57Y29uc3Qgbj1uZXcgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQoZSx7Li4udH0pO3JldHVybiBlPT5uLmZvcm1hdChlLHQucmFuZ2V8fFwiZGF5XCIpfSkpLGxpc3Q6U24oKChlLHQpPT57Y29uc3Qgbj1uZXcgSW50bC5MaXN0Rm9ybWF0KGUsey4uLnR9KTtyZXR1cm4gZT0+bi5mb3JtYXQoZSl9KSl9LHRoaXMuaW5pdChlKX1pbml0KGUpe2NvbnN0IHQ9KGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7aW50ZXJwb2xhdGlvbjp7fX0pLmludGVycG9sYXRpb247dGhpcy5mb3JtYXRTZXBhcmF0b3I9dC5mb3JtYXRTZXBhcmF0b3I/dC5mb3JtYXRTZXBhcmF0b3I6dC5mb3JtYXRTZXBhcmF0b3J8fFwiLFwifWFkZChlLHQpe3RoaXMuZm9ybWF0c1tlLnRvTG93ZXJDYXNlKCkudHJpbSgpXT10fWFkZENhY2hlZChlLHQpe3RoaXMuZm9ybWF0c1tlLnRvTG93ZXJDYXNlKCkudHJpbSgpXT1Tbih0KX1mb3JtYXQoZSx0LG4pe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTp7fTtyZXR1cm4gdC5zcGxpdCh0aGlzLmZvcm1hdFNlcGFyYXRvcikucmVkdWNlKCgoZSx0KT0+e2NvbnN0e2Zvcm1hdE5hbWU6byxmb3JtYXRPcHRpb25zOmF9PWZ1bmN0aW9uKGUpe2xldCB0PWUudG9Mb3dlckNhc2UoKS50cmltKCk7Y29uc3Qgbj17fTtpZihlLmluZGV4T2YoXCIoXCIpPi0xKXtjb25zdCByPWUuc3BsaXQoXCIoXCIpO3Q9clswXS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtjb25zdCBvPXJbMV0uc3Vic3RyaW5nKDAsclsxXS5sZW5ndGgtMSk7XCJjdXJyZW5jeVwiPT09dCYmby5pbmRleE9mKFwiOlwiKTwwP24uY3VycmVuY3l8fChuLmN1cnJlbmN5PW8udHJpbSgpKTpcInJlbGF0aXZldGltZVwiPT09dCYmby5pbmRleE9mKFwiOlwiKTwwP24ucmFuZ2V8fChuLnJhbmdlPW8udHJpbSgpKTpvLnNwbGl0KFwiO1wiKS5mb3JFYWNoKChlPT57aWYoIWUpcmV0dXJuO2NvbnN0W3QsLi4ucl09ZS5zcGxpdChcIjpcIiksbz1yLmpvaW4oXCI6XCIpLnRyaW0oKS5yZXBsYWNlKC9eJyt8JyskL2csXCJcIik7blt0LnRyaW0oKV18fChuW3QudHJpbSgpXT1vKSxcImZhbHNlXCI9PT1vJiYoblt0LnRyaW0oKV09ITEpLFwidHJ1ZVwiPT09byYmKG5bdC50cmltKCldPSEwKSxpc05hTihvKXx8KG5bdC50cmltKCldPXBhcnNlSW50KG8sMTApKX0pKX1yZXR1cm57Zm9ybWF0TmFtZTp0LGZvcm1hdE9wdGlvbnM6bn19KHQpO2lmKHRoaXMuZm9ybWF0c1tvXSl7bGV0IHQ9ZTt0cnl7Y29uc3QgaT1yJiZyLmZvcm1hdFBhcmFtcyYmci5mb3JtYXRQYXJhbXNbci5pbnRlcnBvbGF0aW9ua2V5XXx8e30sbD1pLmxvY2FsZXx8aS5sbmd8fHIubG9jYWxlfHxyLmxuZ3x8bjt0PXRoaXMuZm9ybWF0c1tvXShlLGwsey4uLmEsLi4uciwuLi5pfSl9Y2F0Y2goZSl7dGhpcy5sb2dnZXIud2FybihlKX1yZXR1cm4gdH1yZXR1cm4gdGhpcy5sb2dnZXIud2FybihgdGhlcmUgd2FzIG5vIGZvcm1hdCBmdW5jdGlvbiBmb3IgJHtvfWApLGV9KSxlKX19Y2xhc3MgTW4gZXh0ZW5kcyBLdHtjb25zdHJ1Y3RvcihlLHQsbil7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOnt9O3N1cGVyKCksdGhpcy5iYWNrZW5kPWUsdGhpcy5zdG9yZT10LHRoaXMuc2VydmljZXM9bix0aGlzLmxhbmd1YWdlVXRpbHM9bi5sYW5ndWFnZVV0aWxzLHRoaXMub3B0aW9ucz1yLHRoaXMubG9nZ2VyPUd0LmNyZWF0ZShcImJhY2tlbmRDb25uZWN0b3JcIiksdGhpcy53YWl0aW5nUmVhZHM9W10sdGhpcy5tYXhQYXJhbGxlbFJlYWRzPXIubWF4UGFyYWxsZWxSZWFkc3x8MTAsdGhpcy5yZWFkaW5nQ2FsbHM9MCx0aGlzLm1heFJldHJpZXM9ci5tYXhSZXRyaWVzPj0wP3IubWF4UmV0cmllczo1LHRoaXMucmV0cnlUaW1lb3V0PXIucmV0cnlUaW1lb3V0Pj0xP3IucmV0cnlUaW1lb3V0OjM1MCx0aGlzLnN0YXRlPXt9LHRoaXMucXVldWU9W10sdGhpcy5iYWNrZW5kJiZ0aGlzLmJhY2tlbmQuaW5pdCYmdGhpcy5iYWNrZW5kLmluaXQobixyLmJhY2tlbmQscil9cXVldWVMb2FkKGUsdCxuLHIpe2NvbnN0IG89e30sYT17fSxpPXt9LGw9e307cmV0dXJuIGUuZm9yRWFjaCgoZT0+e2xldCByPSEwO3QuZm9yRWFjaCgodD0+e2NvbnN0IGk9YCR7ZX18JHt0fWA7IW4ucmVsb2FkJiZ0aGlzLnN0b3JlLmhhc1Jlc291cmNlQnVuZGxlKGUsdCk/dGhpcy5zdGF0ZVtpXT0yOnRoaXMuc3RhdGVbaV08MHx8KDE9PT10aGlzLnN0YXRlW2ldP3ZvaWQgMD09PWFbaV0mJihhW2ldPSEwKToodGhpcy5zdGF0ZVtpXT0xLHI9ITEsdm9pZCAwPT09YVtpXSYmKGFbaV09ITApLHZvaWQgMD09PW9baV0mJihvW2ldPSEwKSx2b2lkIDA9PT1sW3RdJiYobFt0XT0hMCkpKX0pKSxyfHwoaVtlXT0hMCl9KSksKE9iamVjdC5rZXlzKG8pLmxlbmd0aHx8T2JqZWN0LmtleXMoYSkubGVuZ3RoKSYmdGhpcy5xdWV1ZS5wdXNoKHtwZW5kaW5nOmEscGVuZGluZ0NvdW50Ok9iamVjdC5rZXlzKGEpLmxlbmd0aCxsb2FkZWQ6e30sZXJyb3JzOltdLGNhbGxiYWNrOnJ9KSx7dG9Mb2FkOk9iamVjdC5rZXlzKG8pLHBlbmRpbmc6T2JqZWN0LmtleXMoYSksdG9Mb2FkTGFuZ3VhZ2VzOk9iamVjdC5rZXlzKGkpLHRvTG9hZE5hbWVzcGFjZXM6T2JqZWN0LmtleXMobCl9fWxvYWRlZChlLHQsbil7Y29uc3Qgcj1lLnNwbGl0KFwifFwiKSxvPXJbMF0sYT1yWzFdO3QmJnRoaXMuZW1pdChcImZhaWxlZExvYWRpbmdcIixvLGEsdCksbiYmdGhpcy5zdG9yZS5hZGRSZXNvdXJjZUJ1bmRsZShvLGEsbiksdGhpcy5zdGF0ZVtlXT10Py0xOjI7Y29uc3QgaT17fTt0aGlzLnF1ZXVlLmZvckVhY2goKG49PnshZnVuY3Rpb24oZSx0LG4scil7Y29uc3R7b2JqOm8sazphfT1YdChlLHQsT2JqZWN0KTtvW2FdPW9bYV18fFtdLHImJihvW2FdPW9bYV0uY29uY2F0KG4pKSxyfHxvW2FdLnB1c2gobil9KG4ubG9hZGVkLFtvXSxhKSxmdW5jdGlvbihlLHQpe3ZvaWQgMCE9PWUucGVuZGluZ1t0XSYmKGRlbGV0ZSBlLnBlbmRpbmdbdF0sZS5wZW5kaW5nQ291bnQtLSl9KG4sZSksdCYmbi5lcnJvcnMucHVzaCh0KSwwIT09bi5wZW5kaW5nQ291bnR8fG4uZG9uZXx8KE9iamVjdC5rZXlzKG4ubG9hZGVkKS5mb3JFYWNoKChlPT57aVtlXXx8KGlbZV09e30pO2NvbnN0IHQ9bi5sb2FkZWRbZV07dC5sZW5ndGgmJnQuZm9yRWFjaCgodD0+e3ZvaWQgMD09PWlbZV1bdF0mJihpW2VdW3RdPSEwKX0pKX0pKSxuLmRvbmU9ITAsbi5lcnJvcnMubGVuZ3RoP24uY2FsbGJhY2sobi5lcnJvcnMpOm4uY2FsbGJhY2soKSl9KSksdGhpcy5lbWl0KFwibG9hZGVkXCIsaSksdGhpcy5xdWV1ZT10aGlzLnF1ZXVlLmZpbHRlcigoZT0+IWUuZG9uZSkpfXJlYWQoZSx0LG4pe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTowLG89YXJndW1lbnRzLmxlbmd0aD40JiZ2b2lkIDAhPT1hcmd1bWVudHNbNF0/YXJndW1lbnRzWzRdOnRoaXMucmV0cnlUaW1lb3V0LGE9YXJndW1lbnRzLmxlbmd0aD41P2FyZ3VtZW50c1s1XTp2b2lkIDA7aWYoIWUubGVuZ3RoKXJldHVybiBhKG51bGwse30pO2lmKHRoaXMucmVhZGluZ0NhbGxzPj10aGlzLm1heFBhcmFsbGVsUmVhZHMpcmV0dXJuIHZvaWQgdGhpcy53YWl0aW5nUmVhZHMucHVzaCh7bG5nOmUsbnM6dCxmY05hbWU6bix0cmllZDpyLHdhaXQ6byxjYWxsYmFjazphfSk7dGhpcy5yZWFkaW5nQ2FsbHMrKztjb25zdCBpPShpLGwpPT57aWYodGhpcy5yZWFkaW5nQ2FsbHMtLSx0aGlzLndhaXRpbmdSZWFkcy5sZW5ndGg+MCl7Y29uc3QgZT10aGlzLndhaXRpbmdSZWFkcy5zaGlmdCgpO3RoaXMucmVhZChlLmxuZyxlLm5zLGUuZmNOYW1lLGUudHJpZWQsZS53YWl0LGUuY2FsbGJhY2spfWkmJmwmJnI8dGhpcy5tYXhSZXRyaWVzP3NldFRpbWVvdXQoKCgpPT57dGhpcy5yZWFkLmNhbGwodGhpcyxlLHQsbixyKzEsMipvLGEpfSksbyk6YShpLGwpfSxsPXRoaXMuYmFja2VuZFtuXS5iaW5kKHRoaXMuYmFja2VuZCk7aWYoMiE9PWwubGVuZ3RoKXJldHVybiBsKGUsdCxpKTt0cnl7Y29uc3Qgbj1sKGUsdCk7biYmXCJmdW5jdGlvblwiPT10eXBlb2Ygbi50aGVuP24udGhlbigoZT0+aShudWxsLGUpKSkuY2F0Y2goaSk6aShudWxsLG4pfWNhdGNoKGUpe2koZSl9fXByZXBhcmVMb2FkaW5nKGUsdCl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9LHI9YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDA7aWYoIXRoaXMuYmFja2VuZClyZXR1cm4gdGhpcy5sb2dnZXIud2FybihcIk5vIGJhY2tlbmQgd2FzIGFkZGVkIHZpYSBpMThuZXh0LnVzZS4gV2lsbCBub3QgbG9hZCByZXNvdXJjZXMuXCIpLHImJnIoKTtcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9dGhpcy5sYW5ndWFnZVV0aWxzLnRvUmVzb2x2ZUhpZXJhcmNoeShlKSksXCJzdHJpbmdcIj09dHlwZW9mIHQmJih0PVt0XSk7Y29uc3Qgbz10aGlzLnF1ZXVlTG9hZChlLHQsbixyKTtpZighby50b0xvYWQubGVuZ3RoKXJldHVybiBvLnBlbmRpbmcubGVuZ3RofHxyKCksbnVsbDtvLnRvTG9hZC5mb3JFYWNoKChlPT57dGhpcy5sb2FkT25lKGUpfSkpfWxvYWQoZSx0LG4pe3RoaXMucHJlcGFyZUxvYWRpbmcoZSx0LHt9LG4pfXJlbG9hZChlLHQsbil7dGhpcy5wcmVwYXJlTG9hZGluZyhlLHQse3JlbG9hZDohMH0sbil9bG9hZE9uZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06XCJcIjtjb25zdCBuPWUuc3BsaXQoXCJ8XCIpLHI9blswXSxvPW5bMV07dGhpcy5yZWFkKHIsbyxcInJlYWRcIix2b2lkIDAsdm9pZCAwLCgobixhKT0+e24mJnRoaXMubG9nZ2VyLndhcm4oYCR7dH1sb2FkaW5nIG5hbWVzcGFjZSAke299IGZvciBsYW5ndWFnZSAke3J9IGZhaWxlZGAsbiksIW4mJmEmJnRoaXMubG9nZ2VyLmxvZyhgJHt0fWxvYWRlZCBuYW1lc3BhY2UgJHtvfSBmb3IgbGFuZ3VhZ2UgJHtyfWAsYSksdGhpcy5sb2FkZWQoZSxuLGEpfSkpfXNhdmVNaXNzaW5nKGUsdCxuLHIsbyl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD41JiZ2b2lkIDAhPT1hcmd1bWVudHNbNV0/YXJndW1lbnRzWzVdOnt9LGk9YXJndW1lbnRzLmxlbmd0aD42JiZ2b2lkIDAhPT1hcmd1bWVudHNbNl0/YXJndW1lbnRzWzZdOigpPT57fTtpZih0aGlzLnNlcnZpY2VzLnV0aWxzJiZ0aGlzLnNlcnZpY2VzLnV0aWxzLmhhc0xvYWRlZE5hbWVzcGFjZSYmIXRoaXMuc2VydmljZXMudXRpbHMuaGFzTG9hZGVkTmFtZXNwYWNlKHQpKXRoaXMubG9nZ2VyLndhcm4oYGRpZCBub3Qgc2F2ZSBrZXkgXCIke259XCIgYXMgdGhlIG5hbWVzcGFjZSBcIiR7dH1cIiB3YXMgbm90IHlldCBsb2FkZWRgLFwiVGhpcyBtZWFucyBzb21ldGhpbmcgSVMgV1JPTkcgaW4geW91ciBzZXR1cC4gWW91IGFjY2VzcyB0aGUgdCBmdW5jdGlvbiBiZWZvcmUgaTE4bmV4dC5pbml0IC8gaTE4bmV4dC5sb2FkTmFtZXNwYWNlIC8gaTE4bmV4dC5jaGFuZ2VMYW5ndWFnZSB3YXMgZG9uZS4gV2FpdCBmb3IgdGhlIGNhbGxiYWNrIG9yIFByb21pc2UgdG8gcmVzb2x2ZSBiZWZvcmUgYWNjZXNzaW5nIGl0ISEhXCIpO2Vsc2UgaWYobnVsbCE9biYmXCJcIiE9PW4pe2lmKHRoaXMuYmFja2VuZCYmdGhpcy5iYWNrZW5kLmNyZWF0ZSl7Y29uc3QgbD17Li4uYSxpc1VwZGF0ZTpvfSxzPXRoaXMuYmFja2VuZC5jcmVhdGUuYmluZCh0aGlzLmJhY2tlbmQpO2lmKHMubGVuZ3RoPDYpdHJ5e2xldCBvO289NT09PXMubGVuZ3RoP3MoZSx0LG4scixsKTpzKGUsdCxuLHIpLG8mJlwiZnVuY3Rpb25cIj09dHlwZW9mIG8udGhlbj9vLnRoZW4oKGU9PmkobnVsbCxlKSkpLmNhdGNoKGkpOmkobnVsbCxvKX1jYXRjaChlKXtpKGUpfWVsc2UgcyhlLHQsbixyLGksbCl9ZSYmZVswXSYmdGhpcy5zdG9yZS5hZGRSZXNvdXJjZShlWzBdLHQsbixyKX19fWZ1bmN0aW9uIExuKCl7cmV0dXJue2RlYnVnOiExLGluaXRJbW1lZGlhdGU6ITAsbnM6W1widHJhbnNsYXRpb25cIl0sZGVmYXVsdE5TOltcInRyYW5zbGF0aW9uXCJdLGZhbGxiYWNrTG5nOltcImRldlwiXSxmYWxsYmFja05TOiExLHN1cHBvcnRlZExuZ3M6ITEsbm9uRXhwbGljaXRTdXBwb3J0ZWRMbmdzOiExLGxvYWQ6XCJhbGxcIixwcmVsb2FkOiExLHNpbXBsaWZ5UGx1cmFsU3VmZml4OiEwLGtleVNlcGFyYXRvcjpcIi5cIixuc1NlcGFyYXRvcjpcIjpcIixwbHVyYWxTZXBhcmF0b3I6XCJfXCIsY29udGV4dFNlcGFyYXRvcjpcIl9cIixwYXJ0aWFsQnVuZGxlZExhbmd1YWdlczohMSxzYXZlTWlzc2luZzohMSx1cGRhdGVNaXNzaW5nOiExLHNhdmVNaXNzaW5nVG86XCJmYWxsYmFja1wiLHNhdmVNaXNzaW5nUGx1cmFsczohMCxtaXNzaW5nS2V5SGFuZGxlcjohMSxtaXNzaW5nSW50ZXJwb2xhdGlvbkhhbmRsZXI6ITEscG9zdFByb2Nlc3M6ITEscG9zdFByb2Nlc3NQYXNzUmVzb2x2ZWQ6ITEscmV0dXJuTnVsbDohMSxyZXR1cm5FbXB0eVN0cmluZzohMCxyZXR1cm5PYmplY3RzOiExLGpvaW5BcnJheXM6ITEscmV0dXJuZWRPYmplY3RIYW5kbGVyOiExLHBhcnNlTWlzc2luZ0tleUhhbmRsZXI6ITEsYXBwZW5kTmFtZXNwYWNlVG9NaXNzaW5nS2V5OiExLGFwcGVuZE5hbWVzcGFjZVRvQ0lNb2RlOiExLG92ZXJsb2FkVHJhbnNsYXRpb25PcHRpb25IYW5kbGVyOmZ1bmN0aW9uKGUpe2xldCB0PXt9O2lmKFwib2JqZWN0XCI9PXR5cGVvZiBlWzFdJiYodD1lWzFdKSxcInN0cmluZ1wiPT10eXBlb2YgZVsxXSYmKHQuZGVmYXVsdFZhbHVlPWVbMV0pLFwic3RyaW5nXCI9PXR5cGVvZiBlWzJdJiYodC50RGVzY3JpcHRpb249ZVsyXSksXCJvYmplY3RcIj09dHlwZW9mIGVbMl18fFwib2JqZWN0XCI9PXR5cGVvZiBlWzNdKXtjb25zdCBuPWVbM118fGVbMl07T2JqZWN0LmtleXMobikuZm9yRWFjaCgoZT0+e3RbZV09bltlXX0pKX1yZXR1cm4gdH0saW50ZXJwb2xhdGlvbjp7ZXNjYXBlVmFsdWU6ITAsZm9ybWF0OmU9PmUscHJlZml4Olwie3tcIixzdWZmaXg6XCJ9fVwiLGZvcm1hdFNlcGFyYXRvcjpcIixcIix1bmVzY2FwZVByZWZpeDpcIi1cIixuZXN0aW5nUHJlZml4OlwiJHQoXCIsbmVzdGluZ1N1ZmZpeDpcIilcIixuZXN0aW5nT3B0aW9uc1NlcGFyYXRvcjpcIixcIixtYXhSZXBsYWNlczoxZTMsc2tpcE9uVmFyaWFibGVzOiEwfX19ZnVuY3Rpb24gX24oZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUubnMmJihlLm5zPVtlLm5zXSksXCJzdHJpbmdcIj09dHlwZW9mIGUuZmFsbGJhY2tMbmcmJihlLmZhbGxiYWNrTG5nPVtlLmZhbGxiYWNrTG5nXSksXCJzdHJpbmdcIj09dHlwZW9mIGUuZmFsbGJhY2tOUyYmKGUuZmFsbGJhY2tOUz1bZS5mYWxsYmFja05TXSksZS5zdXBwb3J0ZWRMbmdzJiZlLnN1cHBvcnRlZExuZ3MuaW5kZXhPZihcImNpbW9kZVwiKTwwJiYoZS5zdXBwb3J0ZWRMbmdzPWUuc3VwcG9ydGVkTG5ncy5jb25jYXQoW1wiY2ltb2RlXCJdKSksZX1mdW5jdGlvbiBQbigpe31jbGFzcyBFbiBleHRlbmRzIEt0e2NvbnN0cnVjdG9yKCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDA7dmFyIG47aWYoc3VwZXIoKSx0aGlzLm9wdGlvbnM9X24oZSksdGhpcy5zZXJ2aWNlcz17fSx0aGlzLmxvZ2dlcj1HdCx0aGlzLm1vZHVsZXM9e2V4dGVybmFsOltdfSxuPXRoaXMsT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoT2JqZWN0LmdldFByb3RvdHlwZU9mKG4pKS5mb3JFYWNoKChlPT57XCJmdW5jdGlvblwiPT10eXBlb2YgbltlXSYmKG5bZV09bltlXS5iaW5kKG4pKX0pKSx0JiYhdGhpcy5pc0luaXRpYWxpemVkJiYhZS5pc0Nsb25lKXtpZighdGhpcy5vcHRpb25zLmluaXRJbW1lZGlhdGUpcmV0dXJuIHRoaXMuaW5pdChlLHQpLHRoaXM7c2V0VGltZW91dCgoKCk9Pnt0aGlzLmluaXQoZSx0KX0pLDApfX1pbml0KCl7dmFyIGU9dGhpcztsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sbj1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMDtcImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiYobj10LHQ9e30pLCF0LmRlZmF1bHROUyYmITEhPT10LmRlZmF1bHROUyYmdC5ucyYmKFwic3RyaW5nXCI9PXR5cGVvZiB0Lm5zP3QuZGVmYXVsdE5TPXQubnM6dC5ucy5pbmRleE9mKFwidHJhbnNsYXRpb25cIik8MCYmKHQuZGVmYXVsdE5TPXQubnNbMF0pKTtjb25zdCByPUxuKCk7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZT9cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP25ldyBlOmU6bnVsbH1pZih0aGlzLm9wdGlvbnM9ey4uLnIsLi4udGhpcy5vcHRpb25zLC4uLl9uKHQpfSxcInYxXCIhPT10aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUFQSSYmKHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uPXsuLi5yLmludGVycG9sYXRpb24sLi4udGhpcy5vcHRpb25zLmludGVycG9sYXRpb259KSx2b2lkIDAhPT10LmtleVNlcGFyYXRvciYmKHRoaXMub3B0aW9ucy51c2VyRGVmaW5lZEtleVNlcGFyYXRvcj10LmtleVNlcGFyYXRvciksdm9pZCAwIT09dC5uc1NlcGFyYXRvciYmKHRoaXMub3B0aW9ucy51c2VyRGVmaW5lZE5zU2VwYXJhdG9yPXQubnNTZXBhcmF0b3IpLCF0aGlzLm9wdGlvbnMuaXNDbG9uZSl7bGV0IHQ7dGhpcy5tb2R1bGVzLmxvZ2dlcj9HdC5pbml0KG8odGhpcy5tb2R1bGVzLmxvZ2dlciksdGhpcy5vcHRpb25zKTpHdC5pbml0KG51bGwsdGhpcy5vcHRpb25zKSx0aGlzLm1vZHVsZXMuZm9ybWF0dGVyP3Q9dGhpcy5tb2R1bGVzLmZvcm1hdHRlcjpcInVuZGVmaW5lZFwiIT10eXBlb2YgSW50bCYmKHQ9T24pO2NvbnN0IG49bmV3IGduKHRoaXMub3B0aW9ucyk7dGhpcy5zdG9yZT1uZXcgdW4odGhpcy5vcHRpb25zLnJlc291cmNlcyx0aGlzLm9wdGlvbnMpO2NvbnN0IGE9dGhpcy5zZXJ2aWNlczthLmxvZ2dlcj1HdCxhLnJlc291cmNlU3RvcmU9dGhpcy5zdG9yZSxhLmxhbmd1YWdlVXRpbHM9bixhLnBsdXJhbFJlc29sdmVyPW5ldyB5bihuLHtwcmVwZW5kOnRoaXMub3B0aW9ucy5wbHVyYWxTZXBhcmF0b3IsY29tcGF0aWJpbGl0eUpTT046dGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlKU09OLHNpbXBsaWZ5UGx1cmFsU3VmZml4OnRoaXMub3B0aW9ucy5zaW1wbGlmeVBsdXJhbFN1ZmZpeH0pLCF0fHx0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5mb3JtYXQmJnRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmZvcm1hdCE9PXIuaW50ZXJwb2xhdGlvbi5mb3JtYXR8fChhLmZvcm1hdHRlcj1vKHQpLGEuZm9ybWF0dGVyLmluaXQoYSx0aGlzLm9wdGlvbnMpLHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmZvcm1hdD1hLmZvcm1hdHRlci5mb3JtYXQuYmluZChhLmZvcm1hdHRlcikpLGEuaW50ZXJwb2xhdG9yPW5ldyBrbih0aGlzLm9wdGlvbnMpLGEudXRpbHM9e2hhc0xvYWRlZE5hbWVzcGFjZTp0aGlzLmhhc0xvYWRlZE5hbWVzcGFjZS5iaW5kKHRoaXMpfSxhLmJhY2tlbmRDb25uZWN0b3I9bmV3IE1uKG8odGhpcy5tb2R1bGVzLmJhY2tlbmQpLGEucmVzb3VyY2VTdG9yZSxhLHRoaXMub3B0aW9ucyksYS5iYWNrZW5kQ29ubmVjdG9yLm9uKFwiKlwiLChmdW5jdGlvbih0KXtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShuPjE/bi0xOjApLG89MTtvPG47bysrKXJbby0xXT1hcmd1bWVudHNbb107ZS5lbWl0KHQsLi4ucil9KSksdGhpcy5tb2R1bGVzLmxhbmd1YWdlRGV0ZWN0b3ImJihhLmxhbmd1YWdlRGV0ZWN0b3I9byh0aGlzLm1vZHVsZXMubGFuZ3VhZ2VEZXRlY3RvciksYS5sYW5ndWFnZURldGVjdG9yLmluaXQmJmEubGFuZ3VhZ2VEZXRlY3Rvci5pbml0KGEsdGhpcy5vcHRpb25zLmRldGVjdGlvbix0aGlzLm9wdGlvbnMpKSx0aGlzLm1vZHVsZXMuaTE4bkZvcm1hdCYmKGEuaTE4bkZvcm1hdD1vKHRoaXMubW9kdWxlcy5pMThuRm9ybWF0KSxhLmkxOG5Gb3JtYXQuaW5pdCYmYS5pMThuRm9ybWF0LmluaXQodGhpcykpLHRoaXMudHJhbnNsYXRvcj1uZXcgZm4odGhpcy5zZXJ2aWNlcyx0aGlzLm9wdGlvbnMpLHRoaXMudHJhbnNsYXRvci5vbihcIipcIiwoZnVuY3Rpb24odCl7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkobj4xP24tMTowKSxvPTE7bzxuO28rKylyW28tMV09YXJndW1lbnRzW29dO2UuZW1pdCh0LC4uLnIpfSkpLHRoaXMubW9kdWxlcy5leHRlcm5hbC5mb3JFYWNoKChlPT57ZS5pbml0JiZlLmluaXQodGhpcyl9KSl9aWYodGhpcy5mb3JtYXQ9dGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZm9ybWF0LG58fChuPVBuKSx0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcmJiF0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3ImJiF0aGlzLm9wdGlvbnMubG5nKXtjb25zdCBlPXRoaXMuc2VydmljZXMubGFuZ3VhZ2VVdGlscy5nZXRGYWxsYmFja0NvZGVzKHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZyk7ZS5sZW5ndGg+MCYmXCJkZXZcIiE9PWVbMF0mJih0aGlzLm9wdGlvbnMubG5nPWVbMF0pfXRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvcnx8dGhpcy5vcHRpb25zLmxuZ3x8dGhpcy5sb2dnZXIud2FybihcImluaXQ6IG5vIGxhbmd1YWdlRGV0ZWN0b3IgaXMgdXNlZCBhbmQgbm8gbG5nIGlzIGRlZmluZWRcIik7W1wiZ2V0UmVzb3VyY2VcIixcImhhc1Jlc291cmNlQnVuZGxlXCIsXCJnZXRSZXNvdXJjZUJ1bmRsZVwiLFwiZ2V0RGF0YUJ5TGFuZ3VhZ2VcIl0uZm9yRWFjaCgodD0+e3RoaXNbdF09ZnVuY3Rpb24oKXtyZXR1cm4gZS5zdG9yZVt0XSguLi5hcmd1bWVudHMpfX0pKTtbXCJhZGRSZXNvdXJjZVwiLFwiYWRkUmVzb3VyY2VzXCIsXCJhZGRSZXNvdXJjZUJ1bmRsZVwiLFwicmVtb3ZlUmVzb3VyY2VCdW5kbGVcIl0uZm9yRWFjaCgodD0+e3RoaXNbdF09ZnVuY3Rpb24oKXtyZXR1cm4gZS5zdG9yZVt0XSguLi5hcmd1bWVudHMpLGV9fSkpO2NvbnN0IGE9cXQoKSxpPSgpPT57Y29uc3QgZT0oZSx0KT0+e3RoaXMuaXNJbml0aWFsaXplZCYmIXRoaXMuaW5pdGlhbGl6ZWRTdG9yZU9uY2UmJnRoaXMubG9nZ2VyLndhcm4oXCJpbml0OiBpMThuZXh0IGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQuIFlvdSBzaG91bGQgY2FsbCBpbml0IGp1c3Qgb25jZSFcIiksdGhpcy5pc0luaXRpYWxpemVkPSEwLHRoaXMub3B0aW9ucy5pc0Nsb25lfHx0aGlzLmxvZ2dlci5sb2coXCJpbml0aWFsaXplZFwiLHRoaXMub3B0aW9ucyksdGhpcy5lbWl0KFwiaW5pdGlhbGl6ZWRcIix0aGlzLm9wdGlvbnMpLGEucmVzb2x2ZSh0KSxuKGUsdCl9O2lmKHRoaXMubGFuZ3VhZ2VzJiZcInYxXCIhPT10aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUFQSSYmIXRoaXMuaXNJbml0aWFsaXplZClyZXR1cm4gZShudWxsLHRoaXMudC5iaW5kKHRoaXMpKTt0aGlzLmNoYW5nZUxhbmd1YWdlKHRoaXMub3B0aW9ucy5sbmcsZSl9O3JldHVybiB0aGlzLm9wdGlvbnMucmVzb3VyY2VzfHwhdGhpcy5vcHRpb25zLmluaXRJbW1lZGlhdGU/aSgpOnNldFRpbWVvdXQoaSwwKSxhfWxvYWRSZXNvdXJjZXMoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOlBuO2NvbnN0IG49XCJzdHJpbmdcIj09dHlwZW9mIGU/ZTp0aGlzLmxhbmd1YWdlO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJih0PWUpLCF0aGlzLm9wdGlvbnMucmVzb3VyY2VzfHx0aGlzLm9wdGlvbnMucGFydGlhbEJ1bmRsZWRMYW5ndWFnZXMpe2lmKG4mJlwiY2ltb2RlXCI9PT1uLnRvTG93ZXJDYXNlKCkmJighdGhpcy5vcHRpb25zLnByZWxvYWR8fDA9PT10aGlzLm9wdGlvbnMucHJlbG9hZC5sZW5ndGgpKXJldHVybiB0KCk7Y29uc3QgZT1bXSxyPXQ9PntpZighdClyZXR1cm47aWYoXCJjaW1vZGVcIj09PXQpcmV0dXJuO3RoaXMuc2VydmljZXMubGFuZ3VhZ2VVdGlscy50b1Jlc29sdmVIaWVyYXJjaHkodCkuZm9yRWFjaCgodD0+e1wiY2ltb2RlXCIhPT10JiZlLmluZGV4T2YodCk8MCYmZS5wdXNoKHQpfSkpfTtpZihuKXIobik7ZWxzZXt0aGlzLnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMuZ2V0RmFsbGJhY2tDb2Rlcyh0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcpLmZvckVhY2goKGU9PnIoZSkpKX10aGlzLm9wdGlvbnMucHJlbG9hZCYmdGhpcy5vcHRpb25zLnByZWxvYWQuZm9yRWFjaCgoZT0+cihlKSkpLHRoaXMuc2VydmljZXMuYmFja2VuZENvbm5lY3Rvci5sb2FkKGUsdGhpcy5vcHRpb25zLm5zLChlPT57ZXx8dGhpcy5yZXNvbHZlZExhbmd1YWdlfHwhdGhpcy5sYW5ndWFnZXx8dGhpcy5zZXRSZXNvbHZlZExhbmd1YWdlKHRoaXMubGFuZ3VhZ2UpLHQoZSl9KSl9ZWxzZSB0KG51bGwpfXJlbG9hZFJlc291cmNlcyhlLHQsbil7Y29uc3Qgcj1xdCgpO3JldHVybiBlfHwoZT10aGlzLmxhbmd1YWdlcyksdHx8KHQ9dGhpcy5vcHRpb25zLm5zKSxufHwobj1QbiksdGhpcy5zZXJ2aWNlcy5iYWNrZW5kQ29ubmVjdG9yLnJlbG9hZChlLHQsKGU9PntyLnJlc29sdmUoKSxuKGUpfSkpLHJ9dXNlKGUpe2lmKCFlKXRocm93IG5ldyBFcnJvcihcIllvdSBhcmUgcGFzc2luZyBhbiB1bmRlZmluZWQgbW9kdWxlISBQbGVhc2UgY2hlY2sgdGhlIG9iamVjdCB5b3UgYXJlIHBhc3NpbmcgdG8gaTE4bmV4dC51c2UoKVwiKTtpZighZS50eXBlKXRocm93IG5ldyBFcnJvcihcIllvdSBhcmUgcGFzc2luZyBhIHdyb25nIG1vZHVsZSEgUGxlYXNlIGNoZWNrIHRoZSBvYmplY3QgeW91IGFyZSBwYXNzaW5nIHRvIGkxOG5leHQudXNlKClcIik7cmV0dXJuXCJiYWNrZW5kXCI9PT1lLnR5cGUmJih0aGlzLm1vZHVsZXMuYmFja2VuZD1lKSwoXCJsb2dnZXJcIj09PWUudHlwZXx8ZS5sb2cmJmUud2FybiYmZS5lcnJvcikmJih0aGlzLm1vZHVsZXMubG9nZ2VyPWUpLFwibGFuZ3VhZ2VEZXRlY3RvclwiPT09ZS50eXBlJiYodGhpcy5tb2R1bGVzLmxhbmd1YWdlRGV0ZWN0b3I9ZSksXCJpMThuRm9ybWF0XCI9PT1lLnR5cGUmJih0aGlzLm1vZHVsZXMuaTE4bkZvcm1hdD1lKSxcInBvc3RQcm9jZXNzb3JcIj09PWUudHlwZSYmZG4uYWRkUG9zdFByb2Nlc3NvcihlKSxcImZvcm1hdHRlclwiPT09ZS50eXBlJiYodGhpcy5tb2R1bGVzLmZvcm1hdHRlcj1lKSxcIjNyZFBhcnR5XCI9PT1lLnR5cGUmJnRoaXMubW9kdWxlcy5leHRlcm5hbC5wdXNoKGUpLHRoaXN9c2V0UmVzb2x2ZWRMYW5ndWFnZShlKXtpZihlJiZ0aGlzLmxhbmd1YWdlcyYmIShbXCJjaW1vZGVcIixcImRldlwiXS5pbmRleE9mKGUpPi0xKSlmb3IobGV0IGU9MDtlPHRoaXMubGFuZ3VhZ2VzLmxlbmd0aDtlKyspe2NvbnN0IHQ9dGhpcy5sYW5ndWFnZXNbZV07aWYoIShbXCJjaW1vZGVcIixcImRldlwiXS5pbmRleE9mKHQpPi0xKSYmdGhpcy5zdG9yZS5oYXNMYW5ndWFnZVNvbWVUcmFuc2xhdGlvbnModCkpe3RoaXMucmVzb2x2ZWRMYW5ndWFnZT10O2JyZWFrfX19Y2hhbmdlTGFuZ3VhZ2UoZSx0KXt2YXIgbj10aGlzO3RoaXMuaXNMYW5ndWFnZUNoYW5naW5nVG89ZTtjb25zdCByPXF0KCk7dGhpcy5lbWl0KFwibGFuZ3VhZ2VDaGFuZ2luZ1wiLGUpO2NvbnN0IG89ZT0+e3RoaXMubGFuZ3VhZ2U9ZSx0aGlzLmxhbmd1YWdlcz10aGlzLnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMudG9SZXNvbHZlSGllcmFyY2h5KGUpLHRoaXMucmVzb2x2ZWRMYW5ndWFnZT12b2lkIDAsdGhpcy5zZXRSZXNvbHZlZExhbmd1YWdlKGUpfSxhPShlLGEpPT57YT8obyhhKSx0aGlzLnRyYW5zbGF0b3IuY2hhbmdlTGFuZ3VhZ2UoYSksdGhpcy5pc0xhbmd1YWdlQ2hhbmdpbmdUbz12b2lkIDAsdGhpcy5lbWl0KFwibGFuZ3VhZ2VDaGFuZ2VkXCIsYSksdGhpcy5sb2dnZXIubG9nKFwibGFuZ3VhZ2VDaGFuZ2VkXCIsYSkpOnRoaXMuaXNMYW5ndWFnZUNoYW5naW5nVG89dm9pZCAwLHIucmVzb2x2ZSgoZnVuY3Rpb24oKXtyZXR1cm4gbi50KC4uLmFyZ3VtZW50cyl9KSksdCYmdChlLChmdW5jdGlvbigpe3JldHVybiBuLnQoLi4uYXJndW1lbnRzKX0pKX0saT10PT57ZXx8dHx8IXRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvcnx8KHQ9W10pO2NvbnN0IG49XCJzdHJpbmdcIj09dHlwZW9mIHQ/dDp0aGlzLnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMuZ2V0QmVzdE1hdGNoRnJvbUNvZGVzKHQpO24mJih0aGlzLmxhbmd1YWdlfHxvKG4pLHRoaXMudHJhbnNsYXRvci5sYW5ndWFnZXx8dGhpcy50cmFuc2xhdG9yLmNoYW5nZUxhbmd1YWdlKG4pLHRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3RvciYmdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmNhY2hlVXNlckxhbmd1YWdlJiZ0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuY2FjaGVVc2VyTGFuZ3VhZ2UobikpLHRoaXMubG9hZFJlc291cmNlcyhuLChlPT57YShlLG4pfSkpfTtyZXR1cm4gZXx8IXRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvcnx8dGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmFzeW5jPyFlJiZ0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3ImJnRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvci5hc3luYz8wPT09dGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmRldGVjdC5sZW5ndGg/dGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmRldGVjdCgpLnRoZW4oaSk6dGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmRldGVjdChpKTppKGUpOmkodGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmRldGVjdCgpKSxyfWdldEZpeGVkVChlLHQsbil7dmFyIHI9dGhpcztjb25zdCBvPWZ1bmN0aW9uKGUsdCl7bGV0IGE7aWYoXCJvYmplY3RcIiE9dHlwZW9mIHQpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoLGw9bmV3IEFycmF5KGk+Mj9pLTI6MCkscz0yO3M8aTtzKyspbFtzLTJdPWFyZ3VtZW50c1tzXTthPXIub3B0aW9ucy5vdmVybG9hZFRyYW5zbGF0aW9uT3B0aW9uSGFuZGxlcihbZSx0XS5jb25jYXQobCkpfWVsc2UgYT17Li4udH07YS5sbmc9YS5sbmd8fG8ubG5nLGEubG5ncz1hLmxuZ3N8fG8ubG5ncyxhLm5zPWEubnN8fG8ubnMsYS5rZXlQcmVmaXg9YS5rZXlQcmVmaXh8fG58fG8ua2V5UHJlZml4O2NvbnN0IGM9ci5vcHRpb25zLmtleVNlcGFyYXRvcnx8XCIuXCI7bGV0IHU7cmV0dXJuIHU9YS5rZXlQcmVmaXgmJkFycmF5LmlzQXJyYXkoZSk/ZS5tYXAoKGU9PmAke2Eua2V5UHJlZml4fSR7Y30ke2V9YCkpOmEua2V5UHJlZml4P2Ake2Eua2V5UHJlZml4fSR7Y30ke2V9YDplLHIudCh1LGEpfTtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZT9vLmxuZz1lOm8ubG5ncz1lLG8ubnM9dCxvLmtleVByZWZpeD1uLG99dCgpe3JldHVybiB0aGlzLnRyYW5zbGF0b3ImJnRoaXMudHJhbnNsYXRvci50cmFuc2xhdGUoLi4uYXJndW1lbnRzKX1leGlzdHMoKXtyZXR1cm4gdGhpcy50cmFuc2xhdG9yJiZ0aGlzLnRyYW5zbGF0b3IuZXhpc3RzKC4uLmFyZ3VtZW50cyl9c2V0RGVmYXVsdE5hbWVzcGFjZShlKXt0aGlzLm9wdGlvbnMuZGVmYXVsdE5TPWV9aGFzTG9hZGVkTmFtZXNwYWNlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtpZighdGhpcy5pc0luaXRpYWxpemVkKXJldHVybiB0aGlzLmxvZ2dlci53YXJuKFwiaGFzTG9hZGVkTmFtZXNwYWNlOiBpMThuZXh0IHdhcyBub3QgaW5pdGlhbGl6ZWRcIix0aGlzLmxhbmd1YWdlcyksITE7aWYoIXRoaXMubGFuZ3VhZ2VzfHwhdGhpcy5sYW5ndWFnZXMubGVuZ3RoKXJldHVybiB0aGlzLmxvZ2dlci53YXJuKFwiaGFzTG9hZGVkTmFtZXNwYWNlOiBpMThuLmxhbmd1YWdlcyB3ZXJlIHVuZGVmaW5lZCBvciBlbXB0eVwiLHRoaXMubGFuZ3VhZ2VzKSwhMTtjb25zdCBuPXQubG5nfHx0aGlzLnJlc29sdmVkTGFuZ3VhZ2V8fHRoaXMubGFuZ3VhZ2VzWzBdLHI9ISF0aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5mYWxsYmFja0xuZyxvPXRoaXMubGFuZ3VhZ2VzW3RoaXMubGFuZ3VhZ2VzLmxlbmd0aC0xXTtpZihcImNpbW9kZVwiPT09bi50b0xvd2VyQ2FzZSgpKXJldHVybiEwO2NvbnN0IGE9KGUsdCk9Pntjb25zdCBuPXRoaXMuc2VydmljZXMuYmFja2VuZENvbm5lY3Rvci5zdGF0ZVtgJHtlfXwke3R9YF07cmV0dXJuLTE9PT1ufHwyPT09bn07aWYodC5wcmVjaGVjayl7Y29uc3QgZT10LnByZWNoZWNrKHRoaXMsYSk7aWYodm9pZCAwIT09ZSlyZXR1cm4gZX1yZXR1cm4hIXRoaXMuaGFzUmVzb3VyY2VCdW5kbGUobixlKXx8KCEodGhpcy5zZXJ2aWNlcy5iYWNrZW5kQ29ubmVjdG9yLmJhY2tlbmQmJighdGhpcy5vcHRpb25zLnJlc291cmNlc3x8dGhpcy5vcHRpb25zLnBhcnRpYWxCdW5kbGVkTGFuZ3VhZ2VzKSl8fCEoIWEobixlKXx8ciYmIWEobyxlKSkpfWxvYWROYW1lc3BhY2VzKGUsdCl7Y29uc3Qgbj1xdCgpO3JldHVybiB0aGlzLm9wdGlvbnMubnM/KFwic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT1bZV0pLGUuZm9yRWFjaCgoZT0+e3RoaXMub3B0aW9ucy5ucy5pbmRleE9mKGUpPDAmJnRoaXMub3B0aW9ucy5ucy5wdXNoKGUpfSkpLHRoaXMubG9hZFJlc291cmNlcygoZT0+e24ucmVzb2x2ZSgpLHQmJnQoZSl9KSksbik6KHQmJnQoKSxQcm9taXNlLnJlc29sdmUoKSl9bG9hZExhbmd1YWdlcyhlLHQpe2NvbnN0IG49cXQoKTtcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9W2VdKTtjb25zdCByPXRoaXMub3B0aW9ucy5wcmVsb2FkfHxbXSxvPWUuZmlsdGVyKChlPT5yLmluZGV4T2YoZSk8MCkpO3JldHVybiBvLmxlbmd0aD8odGhpcy5vcHRpb25zLnByZWxvYWQ9ci5jb25jYXQobyksdGhpcy5sb2FkUmVzb3VyY2VzKChlPT57bi5yZXNvbHZlKCksdCYmdChlKX0pKSxuKToodCYmdCgpLFByb21pc2UucmVzb2x2ZSgpKX1kaXIoZSl7aWYoZXx8KGU9dGhpcy5yZXNvbHZlZExhbmd1YWdlfHwodGhpcy5sYW5ndWFnZXMmJnRoaXMubGFuZ3VhZ2VzLmxlbmd0aD4wP3RoaXMubGFuZ3VhZ2VzWzBdOnRoaXMubGFuZ3VhZ2UpKSwhZSlyZXR1cm5cInJ0bFwiO2NvbnN0IHQ9dGhpcy5zZXJ2aWNlcyYmdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZVV0aWxzfHxuZXcgZ24oTG4oKSk7cmV0dXJuW1wiYXJcIixcInNodVwiLFwic3FyXCIsXCJzc2hcIixcInhhYVwiLFwieWhkXCIsXCJ5dWRcIixcImFhb1wiLFwiYWJoXCIsXCJhYnZcIixcImFjbVwiLFwiYWNxXCIsXCJhY3dcIixcImFjeFwiLFwiYWN5XCIsXCJhZGZcIixcImFkc1wiLFwiYWViXCIsXCJhZWNcIixcImFmYlwiLFwiYWpwXCIsXCJhcGNcIixcImFwZFwiLFwiYXJiXCIsXCJhcnFcIixcImFyc1wiLFwiYXJ5XCIsXCJhcnpcIixcImF1elwiLFwiYXZsXCIsXCJheWhcIixcImF5bFwiLFwiYXluXCIsXCJheXBcIixcImJielwiLFwicGdhXCIsXCJoZVwiLFwiaXdcIixcInBzXCIsXCJwYnRcIixcInBidVwiLFwicHN0XCIsXCJwcnBcIixcInByZFwiLFwidWdcIixcInVyXCIsXCJ5ZGRcIixcInlkc1wiLFwieWloXCIsXCJqaVwiLFwieWlcIixcImhib1wiLFwibWVuXCIsXCJ4bW5cIixcImZhXCIsXCJqcHJcIixcInBlb1wiLFwicGVzXCIsXCJwcnNcIixcImR2XCIsXCJzYW1cIixcImNrYlwiXS5pbmRleE9mKHQuZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUoZSkpPi0xfHxlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihcIi1hcmFiXCIpPjE/XCJydGxcIjpcImx0clwifXN0YXRpYyBjcmVhdGVJbnN0YW5jZSgpe3JldHVybiBuZXcgRW4oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX1jbG9uZUluc3RhbmNlKCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOlBuO2NvbnN0IG49ZS5mb3JrUmVzb3VyY2VTdG9yZTtuJiZkZWxldGUgZS5mb3JrUmVzb3VyY2VTdG9yZTtjb25zdCByPXsuLi50aGlzLm9wdGlvbnMsLi4uZSxpc0Nsb25lOiEwfSxvPW5ldyBFbihyKTt2b2lkIDA9PT1lLmRlYnVnJiZ2b2lkIDA9PT1lLnByZWZpeHx8KG8ubG9nZ2VyPW8ubG9nZ2VyLmNsb25lKGUpKTtyZXR1cm5bXCJzdG9yZVwiLFwic2VydmljZXNcIixcImxhbmd1YWdlXCJdLmZvckVhY2goKGU9PntvW2VdPXRoaXNbZV19KSksby5zZXJ2aWNlcz17Li4udGhpcy5zZXJ2aWNlc30sby5zZXJ2aWNlcy51dGlscz17aGFzTG9hZGVkTmFtZXNwYWNlOm8uaGFzTG9hZGVkTmFtZXNwYWNlLmJpbmQobyl9LG4mJihvLnN0b3JlPW5ldyB1bih0aGlzLnN0b3JlLmRhdGEsciksby5zZXJ2aWNlcy5yZXNvdXJjZVN0b3JlPW8uc3RvcmUpLG8udHJhbnNsYXRvcj1uZXcgZm4oby5zZXJ2aWNlcyxyKSxvLnRyYW5zbGF0b3Iub24oXCIqXCIsKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KHQ+MT90LTE6MCkscj0xO3I8dDtyKyspbltyLTFdPWFyZ3VtZW50c1tyXTtvLmVtaXQoZSwuLi5uKX0pKSxvLmluaXQocix0KSxvLnRyYW5zbGF0b3Iub3B0aW9ucz1yLG8udHJhbnNsYXRvci5iYWNrZW5kQ29ubmVjdG9yLnNlcnZpY2VzLnV0aWxzPXtoYXNMb2FkZWROYW1lc3BhY2U6by5oYXNMb2FkZWROYW1lc3BhY2UuYmluZChvKX0sb310b0pTT04oKXtyZXR1cm57b3B0aW9uczp0aGlzLm9wdGlvbnMsc3RvcmU6dGhpcy5zdG9yZSxsYW5ndWFnZTp0aGlzLmxhbmd1YWdlLGxhbmd1YWdlczp0aGlzLmxhbmd1YWdlcyxyZXNvbHZlZExhbmd1YWdlOnRoaXMucmVzb2x2ZWRMYW5ndWFnZX19fWNvbnN0IGpuPUVuLmNyZWF0ZUluc3RhbmNlKCk7am4uY3JlYXRlSW5zdGFuY2U9RW4uY3JlYXRlSW5zdGFuY2U7am4uY3JlYXRlSW5zdGFuY2Usam4uZGlyLGpuLmluaXQsam4ubG9hZFJlc291cmNlcyxqbi5yZWxvYWRSZXNvdXJjZXMsam4udXNlLGpuLmNoYW5nZUxhbmd1YWdlLGpuLmdldEZpeGVkVCxqbi50LGpuLmV4aXN0cyxqbi5zZXREZWZhdWx0TmFtZXNwYWNlLGpuLmhhc0xvYWRlZE5hbWVzcGFjZSxqbi5sb2FkTmFtZXNwYWNlcyxqbi5sb2FkTGFuZ3VhZ2VzO2NvbnN0IFJuPUpTT04ucGFyc2UoJ3tcImNvbnRleHRNZW51Lm5ld1dpbmRvd1wiOlwi5paw5bu656qX5Y+jXCIsXCJjb250ZXh0TWVudS5uZXdQYWdlXCI6XCLmlrDlu7rpobXpnaJcIixcImNvbnRleHRNZW51LnJlc3RvcmVcIjpcIui/mOWOn+WIsOS4iuasoeS/neWtmOeahOabtOaUuVwiLFwiY29udGV4dE1lbnUuc3dpdGNoV29ya3NwYWNlXCI6XCLliIfmjaLlt6XkvZzljLpcIixcImNvbnRleHRNZW51LmFwcGVhcmFuY2VcIjpcIuWkluinglwiLFwiY29udGV4dE1lbnUuc2F2ZVdvcmtzcGFjZVwiOlwi5L+d5a2Y5bel5L2c5Yy6XCIsXCJjb250ZXh0TWVudS5zYXZlV29ya3NwYWNlQXNcIjpcIuWwhuW3peS9nOWMuuWPpuWtmOS4ui4uLlwiLFwiY29udGV4dE1lbnUucmVuYW1lV29ya3NwYWNlXCI6XCLph43lkb3lkI3lt6XkvZzljLpcIixcImNvbnRleHRNZW51LmRlbGV0ZVdvcmtzcGFjZVwiOlwi5Yig6Zmk5bel5L2c5Yy6XCIsXCJjb250ZXh0TWVudS5kb3dubG9hZHNcIjpcIuS4i+i9vVwiLFwiY29udGV4dE1lbnUuc2F2ZVBhZ2VcIjpcIuS/neWtmOmhtemdolwiLFwiY29udGV4dE1lbnUuc2F2ZVBhZ2VBc1wiOlwi5bCG6aG16Z2i5Y+m5a2Y5Li6Li4uXCIsXCJjb250ZXh0TWVudS5wcmludFwiOlwi5omT5Y2wLi4uXCIsXCJjb250ZXh0TWVudS5wcmludFNjcmVlblwiOlwi5omT5Y2w5bGP5bmVXCIsXCJjb250ZXh0TWVudS5jbG9zZVdpbmRvd1wiOlwi5YWz6Zet56qX5Y+jXCIsXCJjb250ZXh0TWVudS5vcGVuU3RvcmVmcm9udFwiOlwi5byA5pS+5byP5bqX6Z2iXCIsXCJjb250ZXh0TWVudS5xdWl0UGxhdGZvcm1cIjpcIumAgOWHuuW5s+WPsFwiLFwiY29udGV4dE1lbnUubmV3Vmlld1wiOlwi5paw5bu66KeG5Zu+XCIsXCJjb250ZXh0TWVudS5vcGVuVmlld1wiOlwi5L2/55So6buY6K6kIFdlYiDmtY/op4jlmajmiZPlvIDop4blm75cIixcImNvbnRleHRNZW51Lm9wZW5WaWV3c1wiOlwi5L2/55So6buY6K6kIFdlYiDmtY/op4jlmajmiZPlvIDop4blm75cIixcImNvbnRleHRNZW51LnJlbG9hZFwiOlwiUmVsb2FkIENOXCIsXCJjb250ZXh0TWVudS5yZWxvYWRWaWV3XCI6XCLph43mlrDliqDovb3op4blm75cIixcImNvbnRleHRNZW51LnJlbG9hZFZpZXdzXCI6XCLph43mlrDliqDovb3op4blm75cIixcImNvbnRleHRNZW51LmR1cGxpY2F0ZVwiOlwiRHVwbGljYXRlIENOXCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVWaWV3XCI6XCLlpI3liLbop4blm75cIixcImNvbnRleHRNZW51LmR1cGxpY2F0ZVZpZXdzXCI6XCLlpI3liLbop4blm75cIixcImNvbnRleHRNZW51LmFkZFZpZXdcIjpcIuWwhuinhuWbvua3u+WKoOWIsOmikemBk1wiLFwiY29udGV4dE1lbnUuYWRkVmlld3NcIjpcIuWwhuinhuWbvua3u+WKoOWIsOmikemBk1wiLFwiY29udGV4dE1lbnUucmVtb3ZlVmlld1wiOlwi5LuO6aKR6YGT5Lit56e76Zmk6KeG5Zu+XCIsXCJjb250ZXh0TWVudS5yZW1vdmVWaWV3c1wiOlwi5LuO6aKR6YGT5Lit56e76Zmk6KeG5Zu+XCIsXCJjb250ZXh0TWVudS5jbG9zZVZpZXdcIjpcIuWFs+mXreinhuWbvlwiLFwiY29udGV4dE1lbnUuY2xvc2VWaWV3c1wiOlwi5YWz6Zet6KeG5Zu+XCIsXCJjb250ZXh0TWVudS5jbG9zZVRhYlwiOlwiQ2xvc2UgVGFiIENOXCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVQYWdlXCI6XCLlpI3liLbpobXpnaJcIixcImNvbnRleHRNZW51LnN1Ym1lbnUucHJpbnRcIjpcIuaJk+WNsFwiLFwiY29udGV4dE1lbnUuc3VibWVudS5wcmludEFsbFwiOlwi5YWo6YOo5omT5Y2wXCIsXCJzYXZlTWVudS5zYXZlV29ya3NwYWNlQXNcIjpcIuWwhuW3peS9nOWMuuWPpuWtmOS4ulwiLFwic2F2ZU1lbnUuc2F2ZVBhZ2VBc1wiOlwi5bCG6aG16Z2i5Y+m5a2Y5Li6XCIsXCJzYXZlTW9kYWwuZW50ZXJWYWx1ZVwiOlwiUGxlYXNlIGVudGVyIGEgdmFsdWUgQ05cIixcInNhdmVNb2RhbC5hbHJlYWR5RXhpc3RzXCI6XCJ7e3RpdGxlfX0g5bey5a2Y5Zyo44CCXCIsXCJzYXZlTW9kYWwucGxlYXNlRW50ZXJWYWxpZE5hbWVcIjpcIuivt+i+k+WFpeacieaViOWQjeensFwiLFwic2F2ZU1vZGFsLnJlbmFtZVBhZ2VcIjpcIumHjeaWsOWRveWQjemhtemdolwiLFwic2F2ZU1vZGFsLmNsb3NlUGFnZVwiOlwi5YWz6Zet6aG16Z2iXCIsXCJzYXZlTW9kYWwuZGlzY2FyZENoYW5nZXNcIjpcIuaUvuW8g+abtOaUuVwiLFwic2F2ZU1vZGFsLmRpc2NhcmRBbGxcIjpcIuWFqOmDqOaUvuW8g1wiLFwic2F2ZU1vZGFsLnNhdmVBbGxcIjpcIuWFqOmDqOS/neWtmFwiLFwic2F2ZU1vZGFsLnNhdmVQYWdlc0NvdW50XCI6XCLlhbPpl63liY3kv53lrZggKHt7Y291bnR9fSkg5Liq6aG16Z2i77yfXCIsXCJkZWZhdWx0UGFnZVRpdGxlXCI6XCJVbnRpdGxlZCBQYWdlIENOXCIsXCJlbnRlcnByaXNlRGVmYXVsdFBhZ2VUaXRsZVwiOlwiVW50aXRsZWQgU3VwZXJ0YWIgQ05cIixcImFkZE5ld1BhZ2VcIjpcIk5ldyBQYWdlIENOXCIsXCJhZGROZXdUYWJcIjpcIua3u+WKoOaWsOmAiemhueWNoVwiLFwiYWRkTmV3Vmlld1wiOlwi5paw5bu66KeG5Zu+XCIsXCJyZXN0b3JlTW9kYWxcIjpcIuaCqOehruWumuimgei/mOWOn+WIsOS4iuasoeS/neWtmOeahOabtOaUueWQl++8n1wiLFwibW9kYWwuZGlzY2FyZFdhcm5pbmdcIjpcIuS7u+S9leacquS/neWtmOeahOabtOaUuemDveWwhuS4ouWksVwiLFwibW9kYWwuZGlzY2FyZFBhZ2VXYXJuaW5nXCI6XCLlr7nmraTpobXnmoTku7vkvZXmnKrkv53lrZjnmoTmm7TmlLnpg73lsIbkuKLlpLHjgIJcIixcIm1vZGFsLnNhdmVDaGFuZ2VzUHJvbXB0XCI6XCLlhbPpl63liY3kv53lrZjmm7TmlLnvvJ9cIixcIm1vZGFsLnBhZ2VDbG9zZVwiOlwiUGFnZSBDbG9zZSBDTlwiLFwic3dpdGNoV29ya3NwYWNlTW9kYWxcIjpcIuaCqOehruWumuimgeWIh+aNouWIsCB7e3dvcmtzcGFjZX19IOWQl++8n1wiLFwic3dpdGNoV29ya3NwYWNlTW9kYWwud2FybmluZ1wiOlwi5Lu75L2V5pyq5L+d5a2Y55qE5pu05pS56YO95bCG5Lii5aSxXCIsXCJkZWxldGVXb3Jrc3BhY2VNb2RhbFwiOlwi5oKo56Gu5a6a6KaB5rC45LmF5Yig6Zmk5q2k5bel5L2c5Yy65ZCX77yfXCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwud2FybmluZ1wiOlwi5ZCN56ew5Li6IHt7d29ya3NwYWNlfX0g55qE5bel5L2c5Yy65bey5a2Y5Zyo44CC5oKo5piv5ZCm6KaB5pu/5o2i5a6D77yfXCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwud2FybmluZy5ib2R5XCI6XCLlt7LlrZjlnKjlkIzlkI3nmoTlt6XkvZzljLrjgILmm7/mjaLlroPlsIbopobnm5blhbblvZPliY3lhoXlrrnjgIJcIixcInJlcGxhY2VXb3Jrc3BhY2VNb2RhbC5yZXBsYWNlXCI6XCLmm7/mjaJcIixcImNsb3NlUGxhdGZvcm1cIjpcIuWFs+mXreW5s+WPsFwiLFwiY2xvc2VQbGF0Zm9ybS53b3Jrc3BhY2VcIjpcIuWFs+mXrSB7e3dvcmtzcGFjZX19IOW5s+WPsFwiLFwiY2xvc2VQbGF0Zm9ybS53YXJuaW5nXCI6XCLlhbPpl63lubPlj7DlsIblhbPpl63miYDmnInlt6XkvZzljLrjgIHlupTnlKjmiJbku7vkvZXmraPlnKjov5DooYznmoTov5vnqIvjgIJcIixcImJhY2tcIjpcIuWQjumAgFwiLFwiZm9yd2FyZFwiOlwi5YmN6L+bXCIsXCJyZWxvYWRcIjpcIumHjeaWsOWKoOi9vVwiLFwiZ3JlZW5cIjpcIue7v+iJslwiLFwicHVycGxlXCI6XCLntKvoibJcIixcIm9yYW5nZVwiOlwi5qmZ6ImyXCIsXCJyZWRcIjpcIue6ouiJslwiLFwicGlua1wiOlwi57KJ57qi6ImyXCIsXCJ5ZWxsb3dcIjpcIum7hOiJslwiLFwidGhlbWUubGlnaHRcIjpcIua1heiJslwiLFwidGhlbWUuZGFya1wiOlwi5rex6ImyXCIsXCJ0aGVtZS5zeXN0ZW1cIjpcIuS4juaTjeS9nOezu+e7n+iuvue9ruWQjOatpVwiLFwidG9vbGJhci5oaWRlVGFic1wiOlwi6ZqQ6JeP6YCJ6aG55Y2hXCIsXCJ0b29sYmFyLnNob3dUYWJzXCI6XCLmmL7npLrpgInpobnljaFcIixcInRvb2xiYXIubG9ja1wiOlwi6ZSB5a6aXCIsXCJ0b29sYmFyLnVubG9ja1wiOlwi6Kej6ZSBXCIsXCJ0b29sYmFyLmNvbG9yTGlua2luZ1wiOlwi6aKc6Imy6ZO+5o6lXCIsXCJ0b29sYmFyLmNoYW5nZUxheW91dFwiOlwi5pu05pS55biD5bGAXCIsXCJ0b29sYmFyLnNhdmVNZW51XCI6XCLkv53lrZjoj5zljZVcIixcInRvb2xiYXIubWF4aW1pemVXaW5kb3dcIjpcIuacgOWkp+WMlueql+WPo1wiLFwidG9vbGJhci5yZXN0b3JlV2luZG93XCI6XCLov5jljp/nqpflj6NcIixcInRvb2xiYXIubWluaW1pemVXaW5kb3dcIjpcIuacgOWwj+WMlueql+WPo1wiLFwiY2hhbmdlTGF5b3V0LmZ1bGxXaWR0aFwiOlwi5YWo5a69XCIsXCJjaGFuZ2VMYXlvdXQuY29sdW1uc1wiOlwi5YiX5pWwXCIsXCJjaGFuZ2VMYXlvdXQuUm93c1wiOlwi6KGM5pWwXCIsXCJjaGFuZ2VMYXlvdXQuR3JpZFwiOlwi572R5qC8XCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZVN3aXRjaGVkXCI6XCLlt7LliIfmjaLlt6XkvZzljLpcIixcInN1Y2Nlc3NJbmRpY2F0b3IuaGlkZGVuXCI6XCLpgInpobnljaHlt7LpmpDol49cIixcInN1Y2Nlc3NJbmRpY2F0b3Iuc2hvd25cIjpcIumAiemhueWNoeW3suaYvuekulwiLFwic3VjY2Vzc0luZGljYXRvci5sb2NrZWRcIjpcIumhtemdouW3sumUgeWumlwiLFwic3VjY2Vzc0luZGljYXRvci51bmxvY2tlZFwiOlwi6aG16Z2i5bey6Kej6ZSBXCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZVNhdmVkXCI6XCLlt6XkvZzljLrlt7Lkv53lrZhcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlU2F2ZWRBc1wiOlwi5bel5L2c5Yy65bey5Y+m5a2Y5Li6IHt7d29ya3NwYWNlfX1cIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlUmVuYW1lZFwiOlwi5bel5L2c5Yy65bey6YeN5ZG95ZCNXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VTYXZlZFwiOlwi6aG16Z2i5bey5L+d5a2YXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VIYXNCZWVuU2F2ZWRcIjpcIlxcXFxcInt7dGl0bGV9fVxcXFxcIiBoYXMgYmVlbiBzYXZlZC4gQ05cIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZUNvcHlTYXZlZFwiOlwi6aG16Z2i5bey5Y+m5a2Y5Li6IHt7dGl0bGV9fVwiLFwic3VjY2Vzc0luZGljYXRvci5wYWdlUmVuYW1lZFwiOlwi6aG16Z2i5bey6YeN5ZG95ZCNXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmNvbnRleHRHcm91cEFwcGxpZWRcIjpcIuW3suW6lOeUqOS4iuS4i+aWh+e7hFwiLFwic3VjY2Vzc0luZGljYXRvci5uYW1lZENvbnRleHRHcm91cEFwcGxpZWRcIjpcIuW3suW6lOeUqCB7e2NvbG9yTmFtZX19IOS4iuS4i+aWh+e7hFwiLFwic3VjY2Vzc0luZGljYXRvci52aWV3UmVtb3ZlZFwiOlwi5LuO5LiK5LiL5paH57uE5Lit56e76Zmk6KeG5Zu+XCIsXCJzdWNjZXNzSW5kaWNhdG9yLnZpZXdzUmVtb3ZlZFwiOlwi5LuO5LiK5LiL5paH57uE5Lit56e76Zmk6KeG5Zu+XCIsXCJzdWNjZXNzSW5kaWNhdG9yLmxheW91dEFwcGxpZWRcIjpcIuW3suW6lOeUqCB7e2xheW91dE5hbWV9fSDluIPlsYBcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlRGVsZXRlZFwiOlwi5bel5L2c5Yy65bey5Yig6ZmkXCIsXCJlcnJvckluZGljYXRvci5wYWdlU2F2ZUZhaWxlZFwiOlwi6aG16Z2i5L+d5a2Y5aSx6LSlXCIsXCJlcnJvckluZGljYXRvci53b3Jrc3BhY2VTYXZlRmFpbGVkXCI6XCLlt6XkvZzljLrkv53lrZjlpLHotKVcIixcImVycm9ySW5kaWNhdG9yLmZhaWxlZFRvRHVwbGljYXRlUGFnZVwiOlwi5aSN5Yi26aG16Z2i5aSx6LSlXCIsXCJpbmZvSW5kaWNhdG9yLmNvbG9yTGlua0F0dGVtcHRcIjpcIuaIkeS7rOWwneivleWvueatpOmAiemhueWNoei/m+ihjOminOiJsumTvuaOpe+8jOS9hue9keermS/lhoXlrrnmiYDmnInogIXlsJrmnKrlkK/nlKjor6Xlip/og71cIixcImdsb2JhbC5jYW5jZWxcIjpcIuWPlua2iFwiLFwiZ2xvYmFsLmNvbmZpcm1cIjpcIuehruiupFwiLFwiZ2xvYmFsLnNhdmVcIjpcIuS/neWtmFwiLFwiZ2xvYmFsLmRlbGV0ZVwiOlwiRGVsZXRlIENOXCIsXCJhcHBSZXN1bHRzLmhlYWRlclwiOlwiRmVhdHVyZWQgQ29udGVudCBDTlwiLFwicmVjZW50bHlWaXNpdGVkLmhlYWRlclwiOlwiUmVjZW50bHkgdmlzaXRlZCBDTlwiLFwibGFuZGluZ1BhZ2Uuc3ViaGVhZGVyXCI6XCJBcHBzIGFuZCB3ZWJzaXRlcyBzZWxlY3RlZCBieSBhbiBhZG1pbiB3aWxsIHNob3cgaGVyZSBDTlwiLFwiYXJpYS5vcGVuQnJvd3NlclwiOlwi5omT5byA5rWP6KeI5Zmo6I+c5Y2VXCIsXCJhcmlhLmJyb3dzZXJUYWJzXCI6XCLmtY/op4jlmajpgInpobnljaFcIixcImFyaWEudmlld1RhYlwiOlwi5p+l55yLIHt7dGl0bGV9fSDnmoTpgInpobnljaFcIixcImFyaWEuY2xvc2VQYWdlXCI6XCLlhbPpl60ge3t0aXRsZX19IOeahOmhtemdoumAiemhueWNoeaMiemSrlwiLFwiYXJpYS5jbG9zZVRhYlwiOlwi5YWz6Zet6YCJ6aG55Y2hIHt7dGl0bGV9fVwiLFwiYXJpYS50aXRsZVwiOlwi5qCH6aKYXCIsXCJhcmlhLmNsb3NlQ29udGV4dEdyb3VwXCI6XCLkvb/nlKjovazkuYnlhbPpl63kuIrkuIvmlofnu4TpgInmi6nlr7nor53moYZcIixcImFyaWEuY29sb3JMaW5raW5nXCI6XCLmmL7npLrmiJbpmpDol4/popzoibLpk77mjqVcIixcImFyaWEuYXBwbHlDb2xvckxpbmtpbmdcIjpcIuivt+mAieaLqeS4gOS4quinhuWbvuS7peW6lOeUqOminOiJsumTvuaOpVwiLFwiYXJpYS5hc3NpZ25Db2xvckxpbmtpbmdDdXJyZW50Vmlld1wiOlwi5YiG6YWN57uZIHt7bmFtZX19IOS4iuS4i+aWh+e7hOeahOW9k+WJjeinhuWbvlwiLFwiYXJpYS5hc3NpZ25Db2xvckxpbmtpbmdDdXJyZW50Vmlld3NcIjpcIuWIhumFjee7mSB7e25hbWV9fSDkuIrkuIvmlofnu4TnmoTlvZPliY3op4blm75cIixcImFyaWEuc2V0Q29sb3JMaW5raW5nQWN0aXZlVmlld1wiOlwi5bCG5rS75Yqo6KeG5Zu+6K6+572u5Li6IHt7bmFtZX19IOS4iuS4i+aWh+e7hFwiLFwiYXJpYS5zZXRDb2xvckxpbmtpbmdBY3RpdmVWaWV3c1wiOlwi5bCG5rS75Yqo6KeG5Zu+6K6+572u5Li6IHt7bmFtZX19IOS4iuS4i+aWh+e7hFwiLFwiYXJpYS5lc2NhcGVMYXlvdXREaWFsb2dcIjpcIuS9v+eUqOi9rOS5ieWFs+mXreabtOaUueW4g+WxgOWvueivneahhlwiLFwiZ2xvYmFsLnN1cGVydGFiXCI6XCJTdXBlcnRhYiBDTlwiLFwiZ2xvYmFsLnRhYlwiOlwiVGFiIENOXCIsXCJib29rbWFya3MuZWRpdEJvb2ttYXJrXCI6XCJFZGl0IEJvb2ttYXJrIENOXCIsXCJib29rbWFya3MuYm9va21hcmtBZGRlZFwiOlwiQm9va21hcmsgYWRkZWQgQ05cIixcImJvb2ttYXJrcy5kb25lXCI6XCJEb25lIENOXCIsXCJib29rbWFya3MucmVtb3ZlXCI6XCJSZW1vdmUgQ05cIixcImJvb2ttYXJrcy5ib29rbWFya3NQYW5lbFwiOlwiQm9va21hcmtzIFBhbmVsIENOXCIsXCJib29rbWFya3MuY2xvc2VQYW5lbFwiOlwiQ2xvc2UgQm9va21hcmtzIFBhbmVsIENOXCIsXCJib29rbWFya3MuYm9va21hcmtzXCI6XCJCb29rbWFya3MgQ05cIixcImJvb2ttYXJrcy5hbGxCb29rbWFya3NcIjpcIkFsbCBCb29rbWFya3MgQ05cIixcImJvb2ttYXJrcy5mYXZvcml0ZXNcIjpcIkZhdm9yaXRlcyBDTlwiLFwiYm9va21hcmtzLnNlYXJjaEJvb2ttYXJrc1wiOlwiU2VhcmNoIEJvb2ttYXJrcyBDTlwiLFwiYm9va21hcmtzLmNsZWFyU2VhcmNoSW5wdXRcIjpcIkNsZWFyIFNlYXJjaCBJbnB1dCBDTlwiLFwiYm9va21hcmtzLmNyZWF0ZUZvbGRlclwiOlwiQ3JlYXRlIE5ldyBGb2xkZXIgQ05cIixcImJvb2ttYXJrcy5leGl0Rm9sZGVyXCI6XCJFeGl0IEZvbGRlciBDTlwiLFwiYm9va21hcmtzLm5ld0ZvbGRlclwiOlwiTmV3IEZvbGRlciBDTlwiLFwiYm9va21hcmtzLm5hbWVkRm9sZGVyXCI6XCJ7e25hbWV9fSBGb2xkZXIgQ05cIixcImJvb2ttYXJrcy5ib29rbWFya1NldHRpbmdzXCI6XCJ7e25hbWV9fSBCb29rbWFyayBTZXR0aW5ncyBDTlwiLFwiYm9va21hcmtzLmZvbGRlclNldHRpbmdzXCI6XCJ7e25hbWV9fSBGb2xkZXIgU2V0dGluZ3MgQ05cIixcImJvb2ttYXJrcy5ub1Jlc3VsdHNGb3VuZFwiOlwiTm8gcmVzdWx0cyBmb3VuZCBDTlwiLFwiYm9va21hcmtzLm5vUmVzdWx0c0ZvdW5kU3VidGV4dFwiOlwiVGhlcmUgYXJlIG5vIGJvb2ttYXJrcyB0aGF0IG1hdGNoIHlvdXIgc2VhcmNoIENOXCIsXCJib29rbWFya3Mubm90aGluZ1RvU2hvd1wiOlwiTm90aGluZyB0byBzaG93IHlldCBDTlwiLFwiYm9va21hcmtzLm5vdGhpbmdUb1Nob3dTdWJ0ZXh0XCI6XCJBZGQgYSBib29rbWFyayB0byB0aGlzIGZvbGRlciBDTlwiLFwiYm9va21hcmtzLnJlc3VsdHNGb3VuZEluXCI6XCJSZXN1bHRzIGZvdW5kIGluIHt7bmFtZX19IENOXCIsXCJib29rbWFya3MucmVzdWx0c0luT3RoZXJGb2xkZXJzXCI6XCJSZXN1bHRzIGZvdW5kIGluIG90aGVyIGZvbGRlcnMgQ05cIixcImJvb2ttYXJrcy5hbGxSZXN1bHRzRm91bmRJblwiOlwiQWxsIHJlc3VsdHMgZm91bmQgaW4gQ05cIixcImJvb2ttYXJrcy5lZGl0TmFtZVwiOlwiRWRpdCBOYW1lIENOXCIsXCJib29rbWFya3MubW92ZVwiOlwiTW92ZSBDTlwiLFwiYm9va21hcmtzLmJvb2ttYXJrQWRkZWRUaXRsZVwiOlwiQm9va21hcmsgQWRkZWQgQ05cIixcImJvb2ttYXJrcy5ib29rbWFya0FkZGVkVG9Gb2xkZXJcIjpcIllvdXIgYm9va21hcmsgd2FzIGFkZGVkIHRvIFxcXFxcInt7Zm9sZGVyTmFtZX19XFxcXFwiIENOXCIsXCJib29rbWFya3MuYm9va21hcmtFZGl0ZWRUaXRsZVwiOlwiQm9va21hcmsgRWRpdGVkIENOXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuc2F2ZVN1cGVydGFiXCI6XCJTYXZlIFN1cGVydGFiIENOXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuc2F2ZVN1cGVydGFiQXNcIjpcIlNhdmUgU3VwZXJ0YWIgQXMuLi4gQ05cIixcImVudGVycHJpc2VDb250ZXh0TWVudS5kdXBsaWNhdGVcIjpcIkR1cGxpY2F0ZSBDTlwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LmRlbGV0ZVN1cGVydGFiXCI6XCJEZWxldGUgU3VwZXJ0YWIgQ05cIixcImVudGVycHJpc2VDb250ZXh0TWVudS5uZXdUYWJcIjpcIk5ldyBUYWIgQ05cIixcImVudGVycHJpc2VTYXZlTWVudS5zYXZlU3VwZXJ0YWJBc1wiOlwiU2F2ZSBTdXBlcnRhYiBBcyBDTlwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC5yZW5hbWVTdXBlcnRhYlwiOlwiUmVuYW1lIENOXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLnVuc2F2ZWRDaGFuZ2VzXCI6XCJZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMgaW4gdGhpcyBUYWIuIENOXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLmNsb3NlVGFiXCI6XCJDbG9zZSBUYWIgQ05cIixcImVudGVycHJpc2VTYXZlTW9kYWwuY2xvc2VTdXBlcnRhYlwiOlwiQ2xvc2UgU3VwZXJ0YWIgQ05cIixcImVudGVycHJpc2VTYXZlTW9kYWwuc2F2ZVN1cGVydGFiQ291bnRcIjpcIlNhdmUge3tjb3VudH19IFN1cGVydGFicyBiZWZvcmUgY2xvc2luZz8gQ05cIixcImVudGVycHJpc2VNb2RhbC5kaXNjYXJkU3VwZXJ0YWJXYXJuaW5nXCI6XCJBbnkgdW5zYXZlZCBjaGFuZ2VzIHRvIHRoaXMgU3VwZXJ0YWIgd2lsbCBiZSBsb3N0LiBDTlwiLFwiZW50ZXJwcmlzZURlbGV0ZU1vZGFsLmRlbGV0ZVN1cGVydGFiXCI6XCJEZWxldGUgdGhlIFxcXFxcInt7dGl0bGV9fVxcXFxcIiBTdXBlcnRhYj8gQ05cIixcImVudGVycHJpc2VEZWxldGVNb2RhbC5kZWxldGVTdXBlcnRhYldhcm5pbmdcIjpcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBTdXBlcnRhYj8gVGhpcyBhY3Rpb24gY2Fubm90IGJlIHVuZG9uZSBhbmQgaXMgcGVybWFuZW50LiBDTlwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJTYXZlZFwiOlwiU3VwZXJ0YWIgU2F2ZWQgQ05cIixcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiSGFzQmVlblNhdmVkXCI6XCJcXFxcXCJ7e3RpdGxlfX1cXFxcXCIgU3VwZXJ0YWIgaGFzIGJlZW4gc2F2ZWQuIENOXCIsXCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYkRlbGV0ZWRcIjpcIlN1cGVydGFiIERlbGV0ZWQgQ05cIixcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiSGFzQmVlbkRlbGV0ZWRcIjpcIlxcXFxcInt7dGl0bGV9fVxcXFxcIiBTdXBlcnRhYiBoYXMgYmVlbiBkZWxldGVkLiBDTlwiLFwiZW50ZXJwcmlzZUVycm9ySW5kaWNhdG9yLmZhaWxlZFRvRHVwbGljYXRlVGFiXCI6XCJGYWlsZWQgdG8gZHVwbGljYXRlIFRhYiBDTlwiLFwiZW50ZXJwcmlzZUVycm9ySW5kaWNhdG9yLmZhaWxlZFRvRHVwbGljYXRlU3VwZXJ0YWJcIjpcIkZhaWxlZCB0byBkdXBsaWNhdGUgU3VwZXJ0YWIgQ05cIixcImVudGVycHJpc2VDb21tYW5kQmFyLnN3aXRjaFRvU3VwZXJ0YWJcIjpcIlN3aXRjaCB0byBTdXBlcnRhYiBDTlwiLFwiZW50ZXJwcmlzZUNvbW1hbmRCYXIuZ29Ub1wiOlwiR28gdG8ge3t0eXBlfX0gQ05cIixcImNvbnRleHRNZW51LnF1aXRFbnRlcnByaXNlQnJvd3NlclwiOlwiUXVpdCBDTlwifScpLEluPUpTT04ucGFyc2UoJ3tcImNvbnRleHRNZW51Lm5ld1dpbmRvd1wiOlwi5paw6KaW56qXXCIsXCJjb250ZXh0TWVudS5uZXdQYWdlXCI6XCLmlrDpoIHpnaJcIixcImNvbnRleHRNZW51LnJlc3RvcmVcIjpcIumChOWOn+WIsOS4iuasoeWEsuWtmOeahOiuiuabtFwiLFwiY29udGV4dE1lbnUuc3dpdGNoV29ya3NwYWNlXCI6XCLliIfmj5vlt6XkvZznqbrplpNcIixcImNvbnRleHRNZW51LmFwcGVhcmFuY2VcIjpcIuWkluingFwiLFwiY29udGV4dE1lbnUuc2F2ZVdvcmtzcGFjZVwiOlwi5YSy5a2Y5bel5L2c56m66ZaTXCIsXCJjb250ZXh0TWVudS5zYXZlV29ya3NwYWNlQXNcIjpcIuWwh+W3peS9nOepuumWk+WPpuWtmOeCui4uLlwiLFwiY29udGV4dE1lbnUucmVuYW1lV29ya3NwYWNlXCI6XCLph43mlrDlkb3lkI3lt6XkvZznqbrplpNcIixcImNvbnRleHRNZW51LmRlbGV0ZVdvcmtzcGFjZVwiOlwi5Yiq6Zmk5bel5L2c56m66ZaTXCIsXCJjb250ZXh0TWVudS5kb3dubG9hZHNcIjpcIuS4i+i8iVwiLFwiY29udGV4dE1lbnUuc2F2ZVBhZ2VcIjpcIuWEsuWtmOmggemdolwiLFwiY29udGV4dE1lbnUuc2F2ZVBhZ2VBc1wiOlwi5bCH6aCB6Z2i5Y+m5a2Y54K6Li4uXCIsXCJjb250ZXh0TWVudS5wcmludFwiOlwi5YiX5Y2wLi4uXCIsXCJjb250ZXh0TWVudS5wcmludFNjcmVlblwiOlwi5pO35Y+W55Wr6Z2iXCIsXCJjb250ZXh0TWVudS5jbG9zZVdpbmRvd1wiOlwi6Zec6ZaJ6KaW56qXXCIsXCJjb250ZXh0TWVudS5vcGVuU3RvcmVmcm9udFwiOlwi5omT6ZaLIFN0b3JlZnJvbnRcIixcImNvbnRleHRNZW51LnF1aXRQbGF0Zm9ybVwiOlwi6YCA5Ye65bmz5Y+wXCIsXCJjb250ZXh0TWVudS5uZXdWaWV3XCI6XCLmlrDoppblnJZcIixcImNvbnRleHRNZW51Lm9wZW5WaWV3XCI6XCLkvb/nlKjpoJDoqK3ntrLpoIHngI/opr3lmajmiZPplovoppblnJZcIixcImNvbnRleHRNZW51Lm9wZW5WaWV3c1wiOlwi5L2/55So6aCQ6Kit57ay6aCB54CP6Ka95Zmo5omT6ZaL6KaW5ZyWXCIsXCJjb250ZXh0TWVudS5yZWxvYWRcIjpcIlJlbG9hZCBaSFwiLFwiY29udGV4dE1lbnUucmVsb2FkVmlld1wiOlwi6YeN5paw6LyJ5YWl6KaW5ZyWXCIsXCJjb250ZXh0TWVudS5yZWxvYWRWaWV3c1wiOlwi6YeN5paw6LyJ5YWl6KaW5ZyWXCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVcIjpcIkR1cGxpY2F0ZSBaSFwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlVmlld1wiOlwi6KSH5a+r6KaW5ZyWXCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVWaWV3c1wiOlwi6KSH5a+r6KaW5ZyWXCIsXCJjb250ZXh0TWVudS5hZGRWaWV3XCI6XCLlsIfoppblnJbmlrDlop7oh7PpoLvpgZNcIixcImNvbnRleHRNZW51LmFkZFZpZXdzXCI6XCLlsIfoppblnJbmlrDlop7oh7PpoLvpgZNcIixcImNvbnRleHRNZW51LnJlbW92ZVZpZXdcIjpcIuW+numgu+mBk+S4reenu+mZpOimluWcllwiLFwiY29udGV4dE1lbnUucmVtb3ZlVmlld3NcIjpcIuW+numgu+mBk+S4reenu+mZpOimluWcllwiLFwiY29udGV4dE1lbnUuY2xvc2VWaWV3XCI6XCLpl5zplonoppblnJZcIixcImNvbnRleHRNZW51LmNsb3NlVmlld3NcIjpcIumXnOmWieimluWcllwiLFwiY29udGV4dE1lbnUuY2xvc2VUYWJcIjpcIkNsb3NlIFRhYiBaSFwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlUGFnZVwiOlwi6KSH5a+r6aCB6Z2iXCIsXCJjb250ZXh0TWVudS5zdWJtZW51LnByaW50XCI6XCLliJfljbBcIixcImNvbnRleHRNZW51LnN1Ym1lbnUucHJpbnRBbGxcIjpcIuWIl+WNsOWFqOmDqFwiLFwic2F2ZU1lbnUuc2F2ZVdvcmtzcGFjZUFzXCI6XCLlsIflt6XkvZznqbrplpPlj6blrZjngrpcIixcInNhdmVNZW51LnNhdmVQYWdlQXNcIjpcIumggemdouWPpuWtmOeCulwiLFwic2F2ZU1vZGFsLmVudGVyVmFsdWVcIjpcIlBsZWFzZSBlbnRlciBhIHZhbHVlIFpIXCIsXCJzYXZlTW9kYWwuYWxyZWFkeUV4aXN0c1wiOlwie3t0aXRsZX19IOW3sue2k+WtmOWcqOOAglwiLFwic2F2ZU1vZGFsLnBsZWFzZUVudGVyVmFsaWROYW1lXCI6XCLoq4vovLjlhaXkuIDlgIvmnInmlYjnmoTlkI3nqLFcIixcInNhdmVNb2RhbC5yZW5hbWVQYWdlXCI6XCLph43mlrDlkb3lkI3poIHpnaJcIixcInNhdmVNb2RhbC5jbG9zZVBhZ2VcIjpcIumXnOmWiemggemdolwiLFwic2F2ZU1vZGFsLmRpc2NhcmRDaGFuZ2VzXCI6XCLmjajmo4Torormm7RcIixcInNhdmVNb2RhbC5kaXNjYXJkQWxsXCI6XCLlhajpg6jmjajmo4RcIixcInNhdmVNb2RhbC5zYXZlQWxsXCI6XCLlhLLlrZjlhajpg6hcIixcInNhdmVNb2RhbC5zYXZlUGFnZXNDb3VudFwiOlwi6KaB5YWI5YSy5a2YICh7e2NvdW50fX0pIOWAi+mggemdouWGjemXnOmWieWXju+8n1wiLFwiZGVmYXVsdFBhZ2VUaXRsZVwiOlwiVW50aXRsZWQgUGFnZSBaSFwiLFwiZW50ZXJwcmlzZURlZmF1bHRQYWdlVGl0bGVcIjpcIlVudGl0bGVkIFN1cGVydGFiIFpIXCIsXCJhZGROZXdQYWdlXCI6XCJOZXcgUGFnZSBaSFwiLFwiYWRkTmV3VGFiXCI6XCLmlrDlop7mlrDntKLlvJXmqJnnsaRcIixcImFkZE5ld1ZpZXdcIjpcIuaWsOimluWcllwiLFwicmVzdG9yZU1vZGFsXCI6XCLmgqjnorrlrpropoHpgoTljp/liLDkuIrmrKHlhLLlrZjnmoTorormm7Tll47vvJ9cIixcIm1vZGFsLmRpc2NhcmRXYXJuaW5nXCI6XCLku7vkvZXmnKrlhLLlrZjnmoTorormm7Tpg73lsIfooqvmjajmo4RcIixcIm1vZGFsLmRpc2NhcmRQYWdlV2FybmluZ1wiOlwi5Zyo5q2k6aCB6Z2i5Lu75L2V5pyq5YSy5a2Y55qE6K6K5pu06YO95bCH6YG65aSx44CCXCIsXCJtb2RhbC5zYXZlQ2hhbmdlc1Byb21wdFwiOlwi6KaB5YWI5YSy5a2Y6K6K5pu05YaN6Zec6ZaJ5ZeO77yfXCIsXCJtb2RhbC5wYWdlQ2xvc2VcIjpcIlBhZ2UgQ2xvc2UgWkhcIixcInN3aXRjaFdvcmtzcGFjZU1vZGFsXCI6XCLmgqjnorrlrpropoHliIfmj5vliLAge3t3b3Jrc3BhY2V9fe+8n1wiLFwic3dpdGNoV29ya3NwYWNlTW9kYWwud2FybmluZ1wiOlwi5Lu75L2V5pyq5YSy5a2Y55qE6K6K5pu06YO95bCH6KKr5o2o5qOEXCIsXCJkZWxldGVXb3Jrc3BhY2VNb2RhbFwiOlwi5oKo56K65a6a6KaB5rC45LmF5Yiq6Zmk5q2k5bel5L2c56m66ZaT5ZeO77yfXCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwud2FybmluZ1wiOlwi5YW35pyJ5ZCN56ixIHt7d29ya3NwYWNlfX0g55qE5bel5L2c56m66ZaT5bey57aT5a2Y5Zyo44CC5L2g6KaB5pu05o+b5a6D5ZeO77yfXCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwud2FybmluZy5ib2R5XCI6XCLnm7jlkIzlkI3nqLHnmoTlt6XkvZznqbrplpPlt7LntpPlrZjlnKjjgILmm7Tmj5vlroPlvozvvIzlsIfmnIPopobok4vnm67liY3lhaflrrnjgIJcIixcInJlcGxhY2VXb3Jrc3BhY2VNb2RhbC5yZXBsYWNlXCI6XCLmm7Tmj5tcIixcImNsb3NlUGxhdGZvcm1cIjpcIumXnOmWieW5s+WPsFwiLFwiY2xvc2VQbGF0Zm9ybS53b3Jrc3BhY2VcIjpcIumXnOmWiSB7e3dvcmtzcGFjZX19IOW5s+WPsFwiLFwiY2xvc2VQbGF0Zm9ybS53YXJuaW5nXCI6XCLpl5zplonlubPlj7DlvozvvIzlsIfpl5zplonmraPlnKjln7fooYznmoTku7vkvZXlt6XkvZznqbrplpPjgIFBUFAg5oiW5rWB56iL44CCXCIsXCJiYWNrXCI6XCLkuIrkuIDpoIFcIixcImZvcndhcmRcIjpcIuS4i+S4gOmggVwiLFwicmVsb2FkXCI6XCLph43mlrDovInlhaVcIixcImdyZWVuXCI6XCLntqBcIixcInB1cnBsZVwiOlwi57SrXCIsXCJvcmFuZ2VcIjpcIuapmFwiLFwicmVkXCI6XCLntIXoibJcIixcInBpbmtcIjpcIueyiee0hVwiLFwieWVsbG93XCI6XCLpu4NcIixcInRoZW1lLmxpZ2h0XCI6XCLmt7pcIixcInRoZW1lLmRhcmtcIjpcIua3sVwiLFwidGhlbWUuc3lzdGVtXCI6XCLoiIcgT1Mg6Kit5a6a5ZCM5q2lXCIsXCJ0b29sYmFyLmhpZGVUYWJzXCI6XCLpmrHol4/ntKLlvJXmqJnnsaRcIixcInRvb2xiYXIuc2hvd1RhYnNcIjpcIumhr+ekuue0ouW8leaomeexpFwiLFwidG9vbGJhci5sb2NrXCI6XCLkuIrpjpZcIixcInRvb2xiYXIudW5sb2NrXCI6XCLop6PpjpZcIixcInRvb2xiYXIuY29sb3JMaW5raW5nXCI6XCLpoY/oibLpgKPntZBcIixcInRvb2xiYXIuY2hhbmdlTGF5b3V0XCI6XCLorormm7TniYjpnaJcIixcInRvb2xiYXIuc2F2ZU1lbnVcIjpcIuWEsuWtmOmBuOWWrlwiLFwidG9vbGJhci5tYXhpbWl6ZVdpbmRvd1wiOlwi5pyA5aSn5YyW6KaW56qXXCIsXCJ0b29sYmFyLnJlc3RvcmVXaW5kb3dcIjpcIumChOWOn+imlueql1wiLFwidG9vbGJhci5taW5pbWl6ZVdpbmRvd1wiOlwi5pyA5bCP5YyW6KaW56qXXCIsXCJjaGFuZ2VMYXlvdXQuZnVsbFdpZHRoXCI6XCLlhajonqLluZXlr6zluqZcIixcImNoYW5nZUxheW91dC5jb2x1bW5zXCI6XCLooYxcIixcImNoYW5nZUxheW91dC5Sb3dzXCI6XCLliJdcIixcImNoYW5nZUxheW91dC5HcmlkXCI6XCLntrLmoLxcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlU3dpdGNoZWRcIjpcIuW3peS9nOepuumWk+W3suWIh+aPm1wiLFwic3VjY2Vzc0luZGljYXRvci5oaWRkZW5cIjpcIue0ouW8leaomeexpOW3sumaseiXj1wiLFwic3VjY2Vzc0luZGljYXRvci5zaG93blwiOlwi57Si5byV5qiZ57Gk5bey6aGv56S6XCIsXCJzdWNjZXNzSW5kaWNhdG9yLmxvY2tlZFwiOlwi6aCB6Z2i5bey5LiK6Y6WXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnVubG9ja2VkXCI6XCLpoIHpnaLlt7Lop6PpjpZcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlU2F2ZWRcIjpcIuW3peS9nOepuumWk+W3suWEsuWtmFwiLFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VTYXZlZEFzXCI6XCLlt6XkvZznqbrplpPlt7Llj6blrZjngroge3t3b3Jrc3BhY2V9fVwiLFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VSZW5hbWVkXCI6XCLlt6XkvZznqbrplpPlt7Lph43mlrDlkb3lkI1cIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZVNhdmVkXCI6XCLpoIHpnaLlt7LlhLLlrZhcIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZUhhc0JlZW5TYXZlZFwiOlwiXFxcXFwie3t0aXRsZX19XFxcXFwiIGhhcyBiZWVuIHNhdmVkLiBaSFwiLFwic3VjY2Vzc0luZGljYXRvci5wYWdlQ29weVNhdmVkXCI6XCLpoIHpnaLlt7Llj6blrZjngroge3t0aXRsZX19XCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VSZW5hbWVkXCI6XCLpoIHpnaLlt7Lph43mlrDlkb3lkI1cIixcInN1Y2Nlc3NJbmRpY2F0b3IuY29udGV4dEdyb3VwQXBwbGllZFwiOlwi6ISI57Wh576k57WE5bey5aWX55SoXCIsXCJzdWNjZXNzSW5kaWNhdG9yLm5hbWVkQ29udGV4dEdyb3VwQXBwbGllZFwiOlwie3tjb2xvck5hbWV9fSDohIjntaHnvqTntYTlt7LlpZfnlKhcIixcInN1Y2Nlc3NJbmRpY2F0b3Iudmlld1JlbW92ZWRcIjpcIuW+nuiEiOe1oee+pOe1hOS4reenu+mZpOeahOimluWcllwiLFwic3VjY2Vzc0luZGljYXRvci52aWV3c1JlbW92ZWRcIjpcIuW+nuiEiOe1oee+pOe1hOS4reenu+mZpOeahOimluWcllwiLFwic3VjY2Vzc0luZGljYXRvci5sYXlvdXRBcHBsaWVkXCI6XCJ7e2xheW91dE5hbWV9fSDniYjpnaLlt7LlpZfnlKhcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlRGVsZXRlZFwiOlwi5bel5L2c56m66ZaT5bey5Yiq6ZmkXCIsXCJlcnJvckluZGljYXRvci5wYWdlU2F2ZUZhaWxlZFwiOlwi6aCB6Z2i54Sh5rOV5YSy5a2YXCIsXCJlcnJvckluZGljYXRvci53b3Jrc3BhY2VTYXZlRmFpbGVkXCI6XCLlt6XkvZznqbrplpPnhKHms5XlhLLlrZhcIixcImVycm9ySW5kaWNhdG9yLmZhaWxlZFRvRHVwbGljYXRlUGFnZVwiOlwi54Sh5rOV6KSH5a+r6aCB6Z2iXCIsXCJpbmZvSW5kaWNhdG9yLmNvbG9yTGlua0F0dGVtcHRcIjpcIuaIkeWAkeWYl+ippuWwjeatpOe0ouW8leaomeexpOmAsuihjOmhj+iJsumAo+e1kO+8jOS9hue2suermS/lhaflrrnmiYDmnInogIXlsJrmnKrllZ/nlKjoqbLlip/og71cIixcImdsb2JhbC5jYW5jZWxcIjpcIuWPlua2iFwiLFwiZ2xvYmFsLmNvbmZpcm1cIjpcIueiuuiqjVwiLFwiZ2xvYmFsLnNhdmVcIjpcIuWEsuWtmFwiLFwiZ2xvYmFsLmRlbGV0ZVwiOlwiRGVsZXRlIFpIXCIsXCJhcHBSZXN1bHRzLmhlYWRlclwiOlwiRmVhdHVyZWQgQ29udGVudCBaSFwiLFwicmVjZW50bHlWaXNpdGVkLmhlYWRlclwiOlwiUmVjZW50bHkgdmlzaXRlZCBaSFwiLFwibGFuZGluZ1BhZ2Uuc3ViaGVhZGVyXCI6XCJBcHBzIGFuZCB3ZWJzaXRlcyBzZWxlY3RlZCBieSBhbiBhZG1pbiB3aWxsIHNob3cgaGVyZSBaSFwiLFwiYXJpYS5vcGVuQnJvd3NlclwiOlwi6ZaL5ZWf54CP6Ka95Zmo6YG45ZauXCIsXCJhcmlhLmJyb3dzZXJUYWJzXCI6XCLngI/opr3lmajntKLlvJXmqJnnsaRcIixcImFyaWEudmlld1RhYlwiOlwie3t0aXRsZX19IOeahOimluWclue0ouW8leaomeexpFwiLFwiYXJpYS5jbG9zZVBhZ2VcIjpcIumXnOmWiSB7e3RpdGxlfX0g55qE6aCB6Z2i57Si5byV5qiZ57Gk5oyJ6YiVXCIsXCJhcmlhLmNsb3NlVGFiXCI6XCLpl5zplonntKLlvJXmqJnnsaQge3t0aXRsZX19XCIsXCJhcmlhLnRpdGxlXCI6XCLmqJnpoYxcIixcImFyaWEuY2xvc2VDb250ZXh0R3JvdXBcIjpcIuS9v+eUqCBFc2Mg6Y216Zec6ZaJ6ISI57Wh576k57WE6YG45Y+W5bCN6Kmx5qGGXCIsXCJhcmlhLmNvbG9yTGlua2luZ1wiOlwi6aGv56S65oiW6Zqx6JeP6aGP6Imy6YCj57WQXCIsXCJhcmlhLmFwcGx5Q29sb3JMaW5raW5nXCI6XCLoq4vpgbjlj5bopoHlpZfnlKjpoY/oibLpgKPntZDnmoToppblnJZcIixcImFyaWEuYXNzaWduQ29sb3JMaW5raW5nQ3VycmVudFZpZXdcIjpcIuebruWJjeimluWcluWIhumFjee1piB7e25hbWV9fSDohIjntaHnvqTntYRcIixcImFyaWEuYXNzaWduQ29sb3JMaW5raW5nQ3VycmVudFZpZXdzXCI6XCLnm67liY3oppblnJbliIbphY3ntaYge3tuYW1lfX0g6ISI57Wh576k57WEXCIsXCJhcmlhLnNldENvbG9yTGlua2luZ0FjdGl2ZVZpZXdcIjpcIuWwh+WVn+eUqOimluWcluioreWumueCuiB7e25hbWV9fSDohIjntaHnvqTntYRcIixcImFyaWEuc2V0Q29sb3JMaW5raW5nQWN0aXZlVmlld3NcIjpcIuWwh+WVn+eUqOimluWcluioreWumueCuiB7e25hbWV9fSDohIjntaHnvqTntYRcIixcImFyaWEuZXNjYXBlTGF5b3V0RGlhbG9nXCI6XCLkvb/nlKggRXNjIOmNtemXnOmWieiuiuabtOeJiOmdouWwjeipseahhlwiLFwiZ2xvYmFsLnN1cGVydGFiXCI6XCJTdXBlcnRhYiBaSFwiLFwiZ2xvYmFsLnRhYlwiOlwiVGFiIFpIXCIsXCJib29rbWFya3MuZWRpdEJvb2ttYXJrXCI6XCJFZGl0IEJvb2ttYXJrIFpIXCIsXCJib29rbWFya3MuYm9va21hcmtBZGRlZFwiOlwiQm9va21hcmsgYWRkZWQgWkhcIixcImJvb2ttYXJrcy5kb25lXCI6XCJEb25lIFpIXCIsXCJib29rbWFya3MucmVtb3ZlXCI6XCJSZW1vdmUgWkhcIixcImJvb2ttYXJrcy5ib29rbWFya3NQYW5lbFwiOlwiQm9va21hcmtzIFBhbmVsIFpIXCIsXCJib29rbWFya3MuY2xvc2VQYW5lbFwiOlwiQ2xvc2UgQm9va21hcmtzIFBhbmVsIFpIXCIsXCJib29rbWFya3MuYm9va21hcmtzXCI6XCJCb29rbWFya3MgWkhcIixcImJvb2ttYXJrcy5hbGxCb29rbWFya3NcIjpcIkFsbCBCb29rbWFya3MgWkhcIixcImJvb2ttYXJrcy5mYXZvcml0ZXNcIjpcIkZhdm9yaXRlcyBaSFwiLFwiYm9va21hcmtzLnNlYXJjaEJvb2ttYXJrc1wiOlwiU2VhcmNoIEJvb2ttYXJrcyBaSFwiLFwiYm9va21hcmtzLmNsZWFyU2VhcmNoSW5wdXRcIjpcIkNsZWFyIFNlYXJjaCBJbnB1dCBaSFwiLFwiYm9va21hcmtzLmNyZWF0ZUZvbGRlclwiOlwiQ3JlYXRlIE5ldyBGb2xkZXIgWkhcIixcImJvb2ttYXJrcy5leGl0Rm9sZGVyXCI6XCJFeGl0IEZvbGRlciBaSFwiLFwiYm9va21hcmtzLm5ld0ZvbGRlclwiOlwiTmV3IEZvbGRlciBaSFwiLFwiYm9va21hcmtzLm5hbWVkRm9sZGVyXCI6XCJ7e25hbWV9fSBGb2xkZXIgWkhcIixcImJvb2ttYXJrcy5ib29rbWFya1NldHRpbmdzXCI6XCJ7e25hbWV9fSBCb29rbWFyayBTZXR0aW5ncyBaSFwiLFwiYm9va21hcmtzLmZvbGRlclNldHRpbmdzXCI6XCJ7e25hbWV9fSBGb2xkZXIgU2V0dGluZ3MgWkhcIixcImJvb2ttYXJrcy5ub1Jlc3VsdHNGb3VuZFwiOlwiTm8gcmVzdWx0cyBmb3VuZCBaSFwiLFwiYm9va21hcmtzLm5vUmVzdWx0c0ZvdW5kU3VidGV4dFwiOlwiVGhlcmUgYXJlIG5vIGJvb2ttYXJrcyB0aGF0IG1hdGNoIHlvdXIgc2VhcmNoIFpIXCIsXCJib29rbWFya3Mubm90aGluZ1RvU2hvd1wiOlwiTm90aGluZyB0byBzaG93IHlldCBaSFwiLFwiYm9va21hcmtzLm5vdGhpbmdUb1Nob3dTdWJ0ZXh0XCI6XCJBZGQgYSBib29rbWFyayB0byB0aGlzIGZvbGRlciBaSFwiLFwiYm9va21hcmtzLnJlc3VsdHNGb3VuZEluXCI6XCJSZXN1bHRzIGZvdW5kIGluIHt7bmFtZX19IFpIXCIsXCJib29rbWFya3MucmVzdWx0c0luT3RoZXJGb2xkZXJzXCI6XCJSZXN1bHRzIGZvdW5kIGluIG90aGVyIGZvbGRlcnMgWkhcIixcImJvb2ttYXJrcy5hbGxSZXN1bHRzRm91bmRJblwiOlwiQWxsIHJlc3VsdHMgZm91bmQgaW4gWkhcIixcImJvb2ttYXJrcy5lZGl0TmFtZVwiOlwiRWRpdCBOYW1lIFpIXCIsXCJib29rbWFya3MubW92ZVwiOlwiTW92ZSBaSFwiLFwiYm9va21hcmtzLmJvb2ttYXJrQWRkZWRUaXRsZVwiOlwiQm9va21hcmsgQWRkZWQgWkhcIixcImJvb2ttYXJrcy5ib29rbWFya0FkZGVkVG9Gb2xkZXJcIjpcIllvdXIgYm9va21hcmsgd2FzIGFkZGVkIHRvIFxcXFxcInt7Zm9sZGVyTmFtZX19XFxcXFwiIFpIXCIsXCJib29rbWFya3MuYm9va21hcmtFZGl0ZWRUaXRsZVwiOlwiQm9va21hcmsgRWRpdGVkIFpIXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuc2F2ZVN1cGVydGFiXCI6XCJTYXZlIFN1cGVydGFiIFpIXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuc2F2ZVN1cGVydGFiQXNcIjpcIlNhdmUgU3VwZXJ0YWIgQXMuLi4gWkhcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5kdXBsaWNhdGVcIjpcIkR1cGxpY2F0ZSBaSFwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LmRlbGV0ZVN1cGVydGFiXCI6XCJEZWxldGUgU3VwZXJ0YWIgWkhcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5uZXdUYWJcIjpcIk5ldyBUYWIgWkhcIixcImVudGVycHJpc2VTYXZlTWVudS5zYXZlU3VwZXJ0YWJBc1wiOlwiU2F2ZSBTdXBlcnRhYiBBcyBaSFwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC5yZW5hbWVTdXBlcnRhYlwiOlwiUmVuYW1lIFpIXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLnVuc2F2ZWRDaGFuZ2VzXCI6XCJZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMgaW4gdGhpcyBUYWIuIFpIXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLmNsb3NlVGFiXCI6XCJDbG9zZSBUYWIgWkhcIixcImVudGVycHJpc2VTYXZlTW9kYWwuY2xvc2VTdXBlcnRhYlwiOlwiQ2xvc2UgU3VwZXJ0YWIgWkhcIixcImVudGVycHJpc2VTYXZlTW9kYWwuc2F2ZVN1cGVydGFiQ291bnRcIjpcIlNhdmUge3tjb3VudH19IFN1cGVydGFicyBiZWZvcmUgY2xvc2luZz8gWkhcIixcImVudGVycHJpc2VNb2RhbC5kaXNjYXJkU3VwZXJ0YWJXYXJuaW5nXCI6XCJBbnkgdW5zYXZlZCBjaGFuZ2VzIHRvIHRoaXMgU3VwZXJ0YWIgd2lsbCBiZSBsb3N0LiBaSFwiLFwiZW50ZXJwcmlzZURlbGV0ZU1vZGFsLmRlbGV0ZVN1cGVydGFiXCI6XCJEZWxldGUgdGhlIFxcXFxcInt7dGl0bGV9fVxcXFxcIiBTdXBlcnRhYj8gWkhcIixcImVudGVycHJpc2VEZWxldGVNb2RhbC5kZWxldGVTdXBlcnRhYldhcm5pbmdcIjpcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBTdXBlcnRhYj8gVGhpcyBhY3Rpb24gY2Fubm90IGJlIHVuZG9uZSBhbmQgaXMgcGVybWFuZW50LiBaSFwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJTYXZlZFwiOlwiU3VwZXJ0YWIgU2F2ZWQgWkhcIixcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiSGFzQmVlblNhdmVkXCI6XCJcXFxcXCJ7e3RpdGxlfX1cXFxcXCIgU3VwZXJ0YWIgaGFzIGJlZW4gc2F2ZWQuIFpIXCIsXCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYkRlbGV0ZWRcIjpcIlN1cGVydGFiIERlbGV0ZWQgWkhcIixcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiSGFzQmVlbkRlbGV0ZWRcIjpcIlxcXFxcInt7dGl0bGV9fVxcXFxcIiBTdXBlcnRhYiBoYXMgYmVlbiBkZWxldGVkLiBaSFwiLFwiZW50ZXJwcmlzZUVycm9ySW5kaWNhdG9yLmZhaWxlZFRvRHVwbGljYXRlVGFiXCI6XCJGYWlsZWQgdG8gZHVwbGljYXRlIFRhYiBaSFwiLFwiZW50ZXJwcmlzZUVycm9ySW5kaWNhdG9yLmZhaWxlZFRvRHVwbGljYXRlU3VwZXJ0YWJcIjpcIkZhaWxlZCB0byBkdXBsaWNhdGUgU3VwZXJ0YWIgWkhcIixcImVudGVycHJpc2VDb21tYW5kQmFyLnN3aXRjaFRvU3VwZXJ0YWJcIjpcIlN3aXRjaCB0byBTdXBlcnRhYiBaSFwiLFwiZW50ZXJwcmlzZUNvbW1hbmRCYXIuZ29Ub1wiOlwiR28gdG8ge3t0eXBlfX0gWkhcIixcImNvbnRleHRNZW51LnF1aXRFbnRlcnByaXNlQnJvd3NlclwiOlwiUXVpdCBaSFwifScpLFZuPUpTT04ucGFyc2UoJ3tcImNvbnRleHRNZW51Lm5ld1dpbmRvd1wiOlwiTmV3IFdpbmRvd1wiLFwiY29udGV4dE1lbnUubmV3UGFnZVwiOlwiTmV3IFBhZ2VcIixcImNvbnRleHRNZW51LnJlc3RvcmVcIjpcIlJlc3RvcmUgdG8gTGFzdCBTYXZlZCBDaGFuZ2VzXCIsXCJjb250ZXh0TWVudS5zd2l0Y2hXb3Jrc3BhY2VcIjpcIlN3aXRjaCBXb3Jrc3BhY2VcIixcImNvbnRleHRNZW51LmFwcGVhcmFuY2VcIjpcIkFwcGVhcmFuY2VcIixcImNvbnRleHRNZW51LnNhdmVXb3Jrc3BhY2VcIjpcIlNhdmUgV29ya3NwYWNlXCIsXCJjb250ZXh0TWVudS5zYXZlV29ya3NwYWNlQXNcIjpcIlNhdmUgV29ya3NwYWNlIEFzLi4uXCIsXCJjb250ZXh0TWVudS5yZW5hbWVXb3Jrc3BhY2VcIjpcIlJlbmFtZSBXb3Jrc3BhY2VcIixcImNvbnRleHRNZW51LmRlbGV0ZVdvcmtzcGFjZVwiOlwiRGVsZXRlIFdvcmtzcGFjZVwiLFwiY29udGV4dE1lbnUuZG93bmxvYWRzXCI6XCJEb3dubG9hZHNcIixcImNvbnRleHRNZW51LnNhdmVQYWdlXCI6XCJTYXZlIFBhZ2VcIixcImNvbnRleHRNZW51LnNhdmVQYWdlQXNcIjpcIlNhdmUgUGFnZSBBcy4uLlwiLFwiY29udGV4dE1lbnUucHJpbnRcIjpcIlByaW50Li4uXCIsXCJjb250ZXh0TWVudS5wcmludFNjcmVlblwiOlwiUHJpbnQgU2NyZWVuXCIsXCJjb250ZXh0TWVudS5jbG9zZVdpbmRvd1wiOlwiQ2xvc2UgV2luZG93XCIsXCJjb250ZXh0TWVudS5vcGVuU3RvcmVmcm9udFwiOlwiT3BlbiBTdG9yZWZyb250XCIsXCJjb250ZXh0TWVudS5xdWl0UGxhdGZvcm1cIjpcIlF1aXQge3twbGF0Zm9ybUxhYmVsfX1cIixcImNvbnRleHRNZW51Lm5ld1ZpZXdcIjpcIk5ldyBWaWV3XCIsXCJjb250ZXh0TWVudS5vcGVuVmlld1wiOlwiT3BlbiBWaWV3IHdpdGggRGVmYXVsdCBXZWIgQnJvd3NlclwiLFwiY29udGV4dE1lbnUub3BlblZpZXdzXCI6XCJPcGVuIFZpZXdzIHdpdGggRGVmYXVsdCBXZWIgQnJvd3NlclwiLFwiY29udGV4dE1lbnUucmVsb2FkXCI6XCJSZWxvYWRcIixcImNvbnRleHRNZW51LnJlbG9hZFZpZXdcIjpcIlJlbG9hZCBWaWV3XCIsXCJjb250ZXh0TWVudS5yZWxvYWRWaWV3c1wiOlwiUmVsb2FkIFZpZXdzXCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVcIjpcIkR1cGxpY2F0ZVwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlVmlld1wiOlwiRHVwbGljYXRlIFZpZXdcIixcImNvbnRleHRNZW51LmR1cGxpY2F0ZVZpZXdzXCI6XCJEdXBsaWNhdGUgVmlld3NcIixcImNvbnRleHRNZW51LmFkZFZpZXdcIjpcIkFkZCBWaWV3IHRvIENoYW5uZWxcIixcImNvbnRleHRNZW51LmFkZFZpZXdzXCI6XCJBZGQgVmlld3MgdG8gQ2hhbm5lbFwiLFwiY29udGV4dE1lbnUucmVtb3ZlVmlld1wiOlwiUmVtb3ZlIFZpZXcgZnJvbSBDaGFubmVsXCIsXCJjb250ZXh0TWVudS5yZW1vdmVWaWV3c1wiOlwiUmVtb3ZlIFZpZXdzIGZyb20gQ2hhbm5lbFwiLFwiY29udGV4dE1lbnUuY2xvc2VWaWV3XCI6XCJDbG9zZSBWaWV3XCIsXCJjb250ZXh0TWVudS5jbG9zZVZpZXdzXCI6XCJDbG9zZSBWaWV3c1wiLFwiY29udGV4dE1lbnUuY2xvc2VUYWJcIjpcIkNsb3NlIFRhYlwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlUGFnZVwiOlwiRHVwbGljYXRlIFBhZ2VcIixcImNvbnRleHRNZW51LnN1Ym1lbnUucHJpbnRcIjpcIlByaW50XCIsXCJjb250ZXh0TWVudS5zdWJtZW51LnByaW50QWxsXCI6XCJQcmludCBBbGxcIixcInNhdmVNZW51LnNhdmVXb3Jrc3BhY2VBc1wiOlwiU2F2ZSBXb3Jrc3BhY2UgQXNcIixcInNhdmVNZW51LnNhdmVQYWdlQXNcIjpcIlNhdmUgUGFnZSBBc1wiLFwic2F2ZU1vZGFsLmVudGVyVmFsdWVcIjpcIlBsZWFzZSBlbnRlciBhIHZhbHVlXCIsXCJzYXZlTW9kYWwuYWxyZWFkeUV4aXN0c1wiOlwie3t0aXRsZX19IGFscmVhZHkgZXhpc3RzLlwiLFwic2F2ZU1vZGFsLnBsZWFzZUVudGVyVmFsaWROYW1lXCI6XCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBuYW1lXCIsXCJzYXZlTW9kYWwucmVuYW1lUGFnZVwiOlwiUmVuYW1lIFBhZ2VcIixcInNhdmVNb2RhbC5jbG9zZVBhZ2VcIjpcIkNsb3NlIFBhZ2VcIixcInNhdmVNb2RhbC5kaXNjYXJkQ2hhbmdlc1wiOlwiRGlzY2FyZCBDaGFuZ2VzXCIsXCJzYXZlTW9kYWwuZGlzY2FyZEFsbFwiOlwiRGlzY2FyZCBBbGxcIixcInNhdmVNb2RhbC5zYXZlQWxsXCI6XCJTYXZlIEFsbFwiLFwic2F2ZU1vZGFsLnNhdmVQYWdlc0NvdW50XCI6XCJTYXZlICh7e2NvdW50fX0pIHBhZ2VzIGJlZm9yZSBjbG9zaW5nP1wiLFwiZGVmYXVsdFBhZ2VUaXRsZVwiOlwiVW50aXRsZWQgUGFnZVwiLFwiZW50ZXJwcmlzZURlZmF1bHRQYWdlVGl0bGVcIjpcIlVudGl0bGVkIFN1cGVydGFiXCIsXCJhZGROZXdQYWdlXCI6XCJOZXcgUGFnZVwiLFwiYWRkTmV3VGFiXCI6XCJBZGQgTmV3IFRhYlwiLFwiYWRkTmV3Vmlld1wiOlwiTmV3IFZpZXdcIixcInJlc3RvcmVNb2RhbFwiOlwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlc3RvcmUgdG8gbGFzdCBzYXZlZCBjaGFuZ2VzP1wiLFwibW9kYWwuZGlzY2FyZFdhcm5pbmdcIjpcIkFueSB1bnNhdmVkIGNoYW5nZXMgd2lsbCBiZSBkaXNjYXJkZWRcIixcIm1vZGFsLmRpc2NhcmRQYWdlV2FybmluZ1wiOlwiQW55IHVuc2F2ZWQgY2hhbmdlcyB0byB0aGlzIHBhZ2Ugd2lsbCBiZSBsb3N0LlwiLFwibW9kYWwuc2F2ZUNoYW5nZXNQcm9tcHRcIjpcIlNhdmUgY2hhbmdlcyBiZWZvcmUgY2xvc2luZz9cIixcIm1vZGFsLnBhZ2VDbG9zZVwiOlwiUGFnZSBDbG9zZVwiLFwic3dpdGNoV29ya3NwYWNlTW9kYWxcIjpcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBzd2l0Y2ggdG8ge3t3b3Jrc3BhY2V9fT9cIixcInN3aXRjaFdvcmtzcGFjZU1vZGFsLndhcm5pbmdcIjpcIkFueSB1bnNhdmVkIGNoYW5nZXMgd2lsbCBiZSBkaXNjYXJkZWRcIixcImRlbGV0ZVdvcmtzcGFjZU1vZGFsXCI6XCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcGVybWFuZW50bHkgZGVsZXRlIHRoaXMgd29ya3NwYWNlP1wiLFwicmVwbGFjZVdvcmtzcGFjZU1vZGFsLndhcm5pbmdcIjpcIkEgV29ya3NwYWNlIHdpdGggdGhlIG5hbWUge3t3b3Jrc3BhY2V9fSBhbHJlYWR5IGV4aXN0cy4gRG8geW91IHdhbnQgdG8gcmVwbGFjZSBpdD9cIixcInJlcGxhY2VXb3Jrc3BhY2VNb2RhbC53YXJuaW5nLmJvZHlcIjpcIkEgd29ya3NwYWNlIHdpdGggdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cy4gUmVwbGFjaW5nIGl0IHdpbGwgb3ZlcndyaXRlIGl0cyBjdXJyZW50IGNvbnRlbnRzLlwiLFwicmVwbGFjZVdvcmtzcGFjZU1vZGFsLnJlcGxhY2VcIjpcIlJlcGxhY2VcIixcImNsb3NlUGxhdGZvcm1cIjpcIkNsb3NlIHRoZSBwbGF0Zm9ybVwiLFwiY2xvc2VQbGF0Zm9ybS53b3Jrc3BhY2VcIjpcIkNsb3NlIHRoZSB7e3dvcmtzcGFjZX19IFBsYXRmb3JtXCIsXCJjbG9zZVBsYXRmb3JtLndhcm5pbmdcIjpcIkNsb3NpbmcgYSBwbGF0Zm9ybSB3aWxsIGNsb3NlIGFueSB3b3Jrc3BhY2VzLCBhcHBzIG9yIGFueSBwcm9jZXNzZXMgdGhhdCBhcmUgcnVubmluZy5cIixcImJhY2tcIjpcIkJhY2tcIixcImZvcndhcmRcIjpcIkZvcndhcmRcIixcInJlbG9hZFwiOlwiUmVsb2FkXCIsXCJncmVlblwiOlwiR3JlZW5cIixcInB1cnBsZVwiOlwiUHVycGxlXCIsXCJvcmFuZ2VcIjpcIk9yYW5nZVwiLFwicmVkXCI6XCJSZWRcIixcInBpbmtcIjpcIlBpbmtcIixcInllbGxvd1wiOlwiWWVsbG93XCIsXCJ0aGVtZS5saWdodFwiOlwiTGlnaHRcIixcInRoZW1lLmRhcmtcIjpcIkRhcmtcIixcInRoZW1lLnN5c3RlbVwiOlwiU3luYyB3aXRoIE9TIHNldHRpbmdcIixcInRvb2xiYXIuaGlkZVRhYnNcIjpcIkhpZGUgVGFic1wiLFwidG9vbGJhci5zaG93VGFic1wiOlwiU2hvdyBUYWJzXCIsXCJ0b29sYmFyLmxvY2tcIjpcIkxvY2tcIixcInRvb2xiYXIudW5sb2NrXCI6XCJVbmxvY2tcIixcInRvb2xiYXIuY29sb3JMaW5raW5nXCI6XCJDb2xvciBMaW5raW5nXCIsXCJ0b29sYmFyLmNoYW5nZUxheW91dFwiOlwiQ2hhbmdlIExheW91dFwiLFwidG9vbGJhci5zYXZlTWVudVwiOlwiU2F2ZSBNZW51XCIsXCJ0b29sYmFyLm1heGltaXplV2luZG93XCI6XCJNYXhpbWl6ZSBXaW5kb3dcIixcInRvb2xiYXIucmVzdG9yZVdpbmRvd1wiOlwiUmVzdG9yZSBXaW5kb3dcIixcInRvb2xiYXIubWluaW1pemVXaW5kb3dcIjpcIk1pbmltaXplIFdpbmRvd1wiLFwiY2hhbmdlTGF5b3V0LmZ1bGxXaWR0aFwiOlwiRnVsbCBXaWR0aFwiLFwiY2hhbmdlTGF5b3V0LmNvbHVtbnNcIjpcIkNvbHVtbnNcIixcImNoYW5nZUxheW91dC5Sb3dzXCI6XCJSb3dzXCIsXCJjaGFuZ2VMYXlvdXQuR3JpZFwiOlwiR3JpZFwiLFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VTd2l0Y2hlZFwiOlwiV29ya3NwYWNlIFN3aXRjaGVkXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmhpZGRlblwiOlwiVGFicyBhcmUgSGlkZGVuXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnNob3duXCI6XCJUYWJzIGFyZSBTaG93blwiLFwic3VjY2Vzc0luZGljYXRvci5sb2NrZWRcIjpcIlBhZ2UgaXMgTG9ja2VkXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnVubG9ja2VkXCI6XCJQYWdlIGlzIFVubG9ja2VkXCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZVNhdmVkXCI6XCJXb3Jrc3BhY2Ugc2F2ZWRcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlU2F2ZWRBc1wiOlwiV29ya3NwYWNlIHNhdmVkIGFzIHt7d29ya3NwYWNlfX1cIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlUmVuYW1lZFwiOlwiV29ya3NwYWNlIHJlbmFtZWRcIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZVNhdmVkXCI6XCJQYWdlIFNhdmVkXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VIYXNCZWVuU2F2ZWRcIjpcIlxcXFxcInt7dGl0bGV9fVxcXFxcIiBoYXMgYmVlbiBzYXZlZC5cIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZUNvcHlTYXZlZFwiOlwiUGFnZSBzYXZlZCBhcyB7e3RpdGxlfX1cIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZVJlbmFtZWRcIjpcIlBhZ2UgcmVuYW1lZFwiLFwic3VjY2Vzc0luZGljYXRvci5jb250ZXh0R3JvdXBBcHBsaWVkXCI6XCJDb250ZXh0IGdyb3VwIGFwcGxpZWRcIixcInN1Y2Nlc3NJbmRpY2F0b3IubmFtZWRDb250ZXh0R3JvdXBBcHBsaWVkXCI6XCJ7e2NvbG9yTmFtZX19IGNvbnRleHQgZ3JvdXAgYXBwbGllZFwiLFwic3VjY2Vzc0luZGljYXRvci52aWV3UmVtb3ZlZFwiOlwiVmlldyByZW1vdmVkIGZyb20gY29udGV4dCBncm91cFwiLFwic3VjY2Vzc0luZGljYXRvci52aWV3c1JlbW92ZWRcIjpcIlZpZXdzIHJlbW92ZWQgZnJvbSBjb250ZXh0IGdyb3VwXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmxheW91dEFwcGxpZWRcIjpcInt7bGF5b3V0TmFtZX19IGxheW91dCBhcHBsaWVkXCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZURlbGV0ZWRcIjpcIldvcmtzcGFjZSBkZWxldGVkXCIsXCJlcnJvckluZGljYXRvci5wYWdlU2F2ZUZhaWxlZFwiOlwiUGFnZSBmYWlsZWQgdG8gc2F2ZVwiLFwiZXJyb3JJbmRpY2F0b3Iud29ya3NwYWNlU2F2ZUZhaWxlZFwiOlwiV29ya3NwYWNlIGZhaWxlZCB0byBzYXZlXCIsXCJlcnJvckluZGljYXRvci5mYWlsZWRUb0R1cGxpY2F0ZVBhZ2VcIjpcIkZhaWxlZCB0byBkdXBsaWNhdGUgUGFnZVwiLFwiaW5mb0luZGljYXRvci5jb2xvckxpbmtBdHRlbXB0XCI6XCJXZSBhdHRlbXB0ZWQgdG8gY29sb3IgbGluayB0aGlzIHRhYiwgYnV0IHRoZSBzaXRlL2NvbnRlbnQgb3duZXIgaGFzIG5vdCBlbmFibGVkIGl0IHlldFwiLFwiZ2xvYmFsLmNhbmNlbFwiOlwiQ2FuY2VsXCIsXCJnbG9iYWwuY29uZmlybVwiOlwiQ29uZmlybVwiLFwiZ2xvYmFsLnNhdmVcIjpcIlNhdmVcIixcImdsb2JhbC5kZWxldGVcIjpcIkRlbGV0ZVwiLFwiYXBwUmVzdWx0cy5oZWFkZXJcIjpcIkZlYXR1cmVkIENvbnRlbnRcIixcInJlY2VudGx5VmlzaXRlZC5oZWFkZXJcIjpcIlJlY2VudGx5IHZpc2l0ZWRcIixcImxhbmRpbmdQYWdlLnN1YmhlYWRlclwiOlwiQXBwcyBhbmQgd2Vic2l0ZXMgc2VsZWN0ZWQgYnkgYW4gYWRtaW4gd2lsbCBzaG93IGhlcmVcIixcImFyaWEub3BlbkJyb3dzZXJcIjpcIk9wZW4gQnJvd3NlciBNZW51XCIsXCJhcmlhLmJyb3dzZXJUYWJzXCI6XCJCcm93c2VyIFRhYnNcIixcImFyaWEudmlld1RhYlwiOlwiVmlldyBUYWIgZm9yIHt7dGl0bGV9fVwiLFwiYXJpYS5jbG9zZVBhZ2VcIjpcIkNsb3NlIFBhZ2UgVGFiIEJ1dHRvbiBmb3Ige3t0aXRsZX19XCIsXCJhcmlhLmNsb3NlVGFiXCI6XCJDbG9zZSBUYWIge3t0aXRsZX19XCIsXCJhcmlhLnRpdGxlXCI6XCJUaXRsZVwiLFwiYXJpYS5jbG9zZUNvbnRleHRHcm91cFwiOlwiVXNlIGVzY2FwZSB0byBjbG9zZSBjb250ZXh0IGdyb3VwIHNlbGVjdGlvbiBkaWFsb2dcIixcImFyaWEuY29sb3JMaW5raW5nXCI6XCJTaG93IG9yIGhpZGUgY29sb3IgbGlua2luZ1wiLFwiYXJpYS5hcHBseUNvbG9yTGlua2luZ1wiOlwiUGxlYXNlIHNlbGVjdCBhIHZpZXcgdG8gYXBwbHkgY29sb3IgbGlua2luZ1wiLFwiYXJpYS5hc3NpZ25Db2xvckxpbmtpbmdDdXJyZW50Vmlld1wiOlwiQ3VycmVudCB2aWV3IGFzc2lnbmVkIHRvIHt7bmFtZX19IGNvbnRleHQgZ3JvdXBcIixcImFyaWEuYXNzaWduQ29sb3JMaW5raW5nQ3VycmVudFZpZXdzXCI6XCJDdXJyZW50IHZpZXdzIGFzc2lnbmVkIHRvIHt7bmFtZX19IGNvbnRleHQgZ3JvdXBcIixcImFyaWEuc2V0Q29sb3JMaW5raW5nQWN0aXZlVmlld1wiOlwiU2V0IGFjdGl2ZSB2aWV3IHRvIHt7bmFtZX19IGNvbnRleHQgZ3JvdXBcIixcImFyaWEuc2V0Q29sb3JMaW5raW5nQWN0aXZlVmlld3NcIjpcIlNldCBhY3RpdmUgdmlld3MgdG8ge3tuYW1lfX0gY29udGV4dCBncm91cFwiLFwiYXJpYS5lc2NhcGVMYXlvdXREaWFsb2dcIjpcIlVzZSBlc2NhcGUgdG8gY2xvc2UgY2hhbmdlIGxheW91dCBkaWFsb2dcIixcImdsb2JhbC5zdXBlcnRhYlwiOlwiU3VwZXJ0YWJcIixcImdsb2JhbC50YWJcIjpcIlRhYlwiLFwiYm9va21hcmtzLmVkaXRCb29rbWFya1wiOlwiRWRpdCBCb29rbWFya1wiLFwiYm9va21hcmtzLmJvb2ttYXJrQWRkZWRcIjpcIkJvb2ttYXJrIGFkZGVkXCIsXCJib29rbWFya3MuZG9uZVwiOlwiRG9uZVwiLFwiYm9va21hcmtzLnJlbW92ZVwiOlwiUmVtb3ZlXCIsXCJib29rbWFya3MuYm9va21hcmtzUGFuZWxcIjpcIkJvb2ttYXJrcyBQYW5lbFwiLFwiYm9va21hcmtzLmNsb3NlUGFuZWxcIjpcIkNsb3NlIEJvb2ttYXJrcyBQYW5lbFwiLFwiYm9va21hcmtzLmJvb2ttYXJrc1wiOlwiQm9va21hcmtzXCIsXCJib29rbWFya3MuYWxsQm9va21hcmtzXCI6XCJBbGwgQm9va21hcmtzXCIsXCJib29rbWFya3MuZmF2b3JpdGVzXCI6XCJGYXZvcml0ZXNcIixcImJvb2ttYXJrcy5zZWFyY2hCb29rbWFya3NcIjpcIlNlYXJjaCBCb29rbWFya3NcIixcImJvb2ttYXJrcy5jbGVhclNlYXJjaElucHV0XCI6XCJDbGVhciBTZWFyY2ggSW5wdXRcIixcImJvb2ttYXJrcy5jcmVhdGVGb2xkZXJcIjpcIkNyZWF0ZSBOZXcgRm9sZGVyXCIsXCJib29rbWFya3MuZXhpdEZvbGRlclwiOlwiRXhpdCBGb2xkZXJcIixcImJvb2ttYXJrcy5uZXdGb2xkZXJcIjpcIk5ldyBGb2xkZXJcIixcImJvb2ttYXJrcy5uYW1lZEZvbGRlclwiOlwie3tuYW1lfX0gRm9sZGVyXCIsXCJib29rbWFya3MuYm9va21hcmtTZXR0aW5nc1wiOlwie3tuYW1lfX0gQm9va21hcmsgU2V0dGluZ3NcIixcImJvb2ttYXJrcy5mb2xkZXJTZXR0aW5nc1wiOlwie3tuYW1lfX0gRm9sZGVyIFNldHRpbmdzXCIsXCJib29rbWFya3Mubm9SZXN1bHRzRm91bmRcIjpcIk5vIHJlc3VsdHMgZm91bmRcIixcImJvb2ttYXJrcy5ub1Jlc3VsdHNGb3VuZFN1YnRleHRcIjpcIlRoZXJlIGFyZSBubyBib29rbWFya3MgdGhhdCBtYXRjaCB5b3VyIHNlYXJjaFwiLFwiYm9va21hcmtzLm5vdGhpbmdUb1Nob3dcIjpcIk5vdGhpbmcgdG8gc2hvdyB5ZXRcIixcImJvb2ttYXJrcy5ub3RoaW5nVG9TaG93U3VidGV4dFwiOlwiQWRkIGEgYm9va21hcmsgdG8gdGhpcyBmb2xkZXJcIixcImJvb2ttYXJrcy5yZXN1bHRzRm91bmRJblwiOlwiUmVzdWx0cyBmb3VuZCBpbiB7e25hbWV9fVwiLFwiYm9va21hcmtzLnJlc3VsdHNJbk90aGVyRm9sZGVyc1wiOlwiUmVzdWx0cyBmb3VuZCBpbiBvdGhlciBmb2xkZXJzXCIsXCJib29rbWFya3MuYWxsUmVzdWx0c0ZvdW5kSW5cIjpcIkFsbCByZXN1bHRzIGZvdW5kIGluXCIsXCJib29rbWFya3MuZWRpdE5hbWVcIjpcIkVkaXQgTmFtZVwiLFwiYm9va21hcmtzLm1vdmVcIjpcIk1vdmVcIixcImJvb2ttYXJrcy5ib29rbWFya0FkZGVkVGl0bGVcIjpcIkJvb2ttYXJrIEFkZGVkXCIsXCJib29rbWFya3MuYm9va21hcmtBZGRlZFRvRm9sZGVyXCI6XCJZb3VyIGJvb2ttYXJrIHdhcyBhZGRlZCB0byBcXFxcXCJ7e2ZvbGRlck5hbWV9fVxcXFxcIlwiLFwiYm9va21hcmtzLmJvb2ttYXJrRWRpdGVkVGl0bGVcIjpcIkJvb2ttYXJrIEVkaXRlZFwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LnNhdmVTdXBlcnRhYlwiOlwiU2F2ZSBTdXBlcnRhYlwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LnNhdmVTdXBlcnRhYkFzXCI6XCJTYXZlIFN1cGVydGFiIEFzLi4uXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuZHVwbGljYXRlXCI6XCJEdXBsaWNhdGVcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5kZWxldGVTdXBlcnRhYlwiOlwiRGVsZXRlIFN1cGVydGFiXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUubmV3VGFiXCI6XCJOZXcgVGFiXCIsXCJlbnRlcnByaXNlU2F2ZU1lbnUuc2F2ZVN1cGVydGFiQXNcIjpcIlNhdmUgU3VwZXJ0YWIgQXNcIixcImVudGVycHJpc2VTYXZlTW9kYWwucmVuYW1lU3VwZXJ0YWJcIjpcIlJlbmFtZVwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC51bnNhdmVkQ2hhbmdlc1wiOlwiWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzIGluIHRoaXMgVGFiLlwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC5jbG9zZVRhYlwiOlwiQ2xvc2UgVGFiXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLmNsb3NlU3VwZXJ0YWJcIjpcIkNsb3NlIFN1cGVydGFiXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLnNhdmVTdXBlcnRhYkNvdW50XCI6XCJTYXZlIHt7Y291bnR9fSBTdXBlcnRhYnMgYmVmb3JlIGNsb3Npbmc/XCIsXCJlbnRlcnByaXNlTW9kYWwuZGlzY2FyZFN1cGVydGFiV2FybmluZ1wiOlwiQW55IHVuc2F2ZWQgY2hhbmdlcyB0byB0aGlzIFN1cGVydGFiIHdpbGwgYmUgbG9zdC5cIixcImVudGVycHJpc2VEZWxldGVNb2RhbC5kZWxldGVTdXBlcnRhYlwiOlwiRGVsZXRlIHRoZSBcXFxcXCJ7e3RpdGxlfX1cXFxcXCIgU3VwZXJ0YWI/XCIsXCJlbnRlcnByaXNlRGVsZXRlTW9kYWwuZGVsZXRlU3VwZXJ0YWJXYXJuaW5nXCI6XCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgU3VwZXJ0YWI/IFRoaXMgYWN0aW9uIGNhbm5vdCBiZSB1bmRvbmUgYW5kIGlzIHBlcm1hbmVudC5cIixcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiU2F2ZWRcIjpcIlN1cGVydGFiIFNhdmVkXCIsXCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYkhhc0JlZW5TYXZlZFwiOlwiXFxcXFwie3t0aXRsZX19XFxcXFwiIFN1cGVydGFiIGhhcyBiZWVuIHNhdmVkLlwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJEZWxldGVkXCI6XCJTdXBlcnRhYiBEZWxldGVkXCIsXCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYkhhc0JlZW5EZWxldGVkXCI6XCJcXFxcXCJ7e3RpdGxlfX1cXFxcXCIgU3VwZXJ0YWIgaGFzIGJlZW4gZGVsZXRlZC5cIixcImVudGVycHJpc2VFcnJvckluZGljYXRvci5mYWlsZWRUb0R1cGxpY2F0ZVRhYlwiOlwiRmFpbGVkIHRvIGR1cGxpY2F0ZSBUYWJcIixcImVudGVycHJpc2VFcnJvckluZGljYXRvci5mYWlsZWRUb0R1cGxpY2F0ZVN1cGVydGFiXCI6XCJGYWlsZWQgdG8gZHVwbGljYXRlIFN1cGVydGFiXCIsXCJlbnRlcnByaXNlQ29tbWFuZEJhci5zd2l0Y2hUb1N1cGVydGFiXCI6XCJTd2l0Y2ggdG8gU3VwZXJ0YWJcIixcImVudGVycHJpc2VDb21tYW5kQmFyLmdvVG9cIjpcIkdvIHRvIHt7dHlwZX19XCIsXCJjb250ZXh0TWVudS5xdWl0RW50ZXJwcmlzZUJyb3dzZXJcIjpcIlF1aXRcIn0nKSxIbj1KU09OLnBhcnNlKCd7XCJjb250ZXh0TWVudS5uZXdXaW5kb3dcIjpcIk5ldWVzIEZlbnN0ZXJcIixcImNvbnRleHRNZW51Lm5ld1BhZ2VcIjpcIk5ldWUgU2VpdGVcIixcImNvbnRleHRNZW51LnJlc3RvcmVcIjpcIldpZWRlcmhlcnN0ZWxsZW4gZGVyIHp1bGV0enQgZ2VzcGVpY2hlcnRlbiDDhG5kZXJ1bmdlblwiLFwiY29udGV4dE1lbnUuc3dpdGNoV29ya3NwYWNlXCI6XCJXb3Jrc3BhY2Ugd2VjaHNlbG5cIixcImNvbnRleHRNZW51LmFwcGVhcmFuY2VcIjpcIkVyc2NoZWludW5nc2JpbGRcIixcImNvbnRleHRNZW51LnNhdmVXb3Jrc3BhY2VcIjpcIldvcmtzcGFjZSBzcGVpY2hlcm5cIixcImNvbnRleHRNZW51LnNhdmVXb3Jrc3BhY2VBc1wiOlwiV29ya3NwYWNlIHNwZWljaGVybiB1bnRlci4uLlwiLFwiY29udGV4dE1lbnUucmVuYW1lV29ya3NwYWNlXCI6XCJXb3Jrc3BhY2UgdW1iZW5lbm5lblwiLFwiY29udGV4dE1lbnUuZGVsZXRlV29ya3NwYWNlXCI6XCJXb3Jrc3BhY2UgbMO2c2NoZW5cIixcImNvbnRleHRNZW51LmRvd25sb2Fkc1wiOlwiRG93bmxvYWRzXCIsXCJjb250ZXh0TWVudS5zYXZlUGFnZVwiOlwiU2VpdGUgc3BlaWNoZXJuXCIsXCJjb250ZXh0TWVudS5zYXZlUGFnZUFzXCI6XCJTZWl0ZSBzcGVpY2hlcm4gdW50ZXIuLi5cIixcImNvbnRleHRNZW51LnByaW50XCI6XCJEcnVja2VuLi4uXCIsXCJjb250ZXh0TWVudS5wcmludFNjcmVlblwiOlwiQmlsZHNjaGlybWFuc2ljaHQgZHJ1Y2tlblwiLFwiY29udGV4dE1lbnUuY2xvc2VXaW5kb3dcIjpcIkZlbnN0ZXIgc2NobGllw59lblwiLFwiY29udGV4dE1lbnUub3BlblN0b3JlZnJvbnRcIjpcIlNjaGF1ZmVuc3RlciDDtmZmbmVuXCIsXCJjb250ZXh0TWVudS5xdWl0UGxhdGZvcm1cIjpcIlBsYXR0Zm9ybSB2ZXJsYXNzZW5cIixcImNvbnRleHRNZW51Lm5ld1ZpZXdcIjpcIk5ldWUgQW5zaWNodFwiLFwiY29udGV4dE1lbnUub3BlblZpZXdcIjpcIkFuc2ljaHQgbWl0IFN0YW5kYXJkLVdlYmJyb3dzZXIgw7ZmZm5lblwiLFwiY29udGV4dE1lbnUub3BlblZpZXdzXCI6XCJBbnNpY2h0ZW4gbWl0IFN0YW5kYXJkLVdlYmJyb3dzZXIgw7ZmZm5lblwiLFwiY29udGV4dE1lbnUucmVsb2FkXCI6XCJSZWxvYWQgREVcIixcImNvbnRleHRNZW51LnJlbG9hZFZpZXdcIjpcIkFuc2ljaHQgbmV1IGxhZGVuXCIsXCJjb250ZXh0TWVudS5yZWxvYWRWaWV3c1wiOlwiQW5zaWNodGVuIG5ldSBsYWRlblwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlXCI6XCJEdXBsaWNhdGUgREVcIixcImNvbnRleHRNZW51LmR1cGxpY2F0ZVZpZXdcIjpcIkFuc2ljaHQgZHVwbGl6aWVyZW5cIixcImNvbnRleHRNZW51LmR1cGxpY2F0ZVZpZXdzXCI6XCJBbnNpY2h0ZW4gZHVwbGl6aWVyZW5cIixcImNvbnRleHRNZW51LmFkZFZpZXdcIjpcIkFuc2ljaHQgenVtIENoYW5uZWwgaGluenVmw7xnZW5cIixcImNvbnRleHRNZW51LmFkZFZpZXdzXCI6XCJBbnNpY2h0ZW4genVtIENoYW5uZWwgaGluenVmw7xnZW5cIixcImNvbnRleHRNZW51LnJlbW92ZVZpZXdcIjpcIkFuc2ljaHQgYXVzIGRlbSBDaGFubmVsIGVudGZlcm5lblwiLFwiY29udGV4dE1lbnUucmVtb3ZlVmlld3NcIjpcIkFuc2ljaHRlbiBhdXMgZGVtIENoYW5uZWwgZW50ZmVybmVuXCIsXCJjb250ZXh0TWVudS5jbG9zZVZpZXdcIjpcIkFuc2ljaHQgc2NobGllw59lblwiLFwiY29udGV4dE1lbnUuY2xvc2VWaWV3c1wiOlwiQW5zaWNodGVuIHNjaGxpZcOfZW5cIixcImNvbnRleHRNZW51LmNsb3NlVGFiXCI6XCJDbG9zZSBUYWIgREVcIixcImNvbnRleHRNZW51LmR1cGxpY2F0ZVBhZ2VcIjpcIlNlaXRlIGR1cGxpemllcmVuXCIsXCJjb250ZXh0TWVudS5zdWJtZW51LnByaW50XCI6XCJEcnVja2VuXCIsXCJjb250ZXh0TWVudS5zdWJtZW51LnByaW50QWxsXCI6XCJBbGxlIGRydWNrZW5cIixcInNhdmVNZW51LnNhdmVXb3Jrc3BhY2VBc1wiOlwiV29ya3NwYWNlIHNwZWljaGVybiB1bnRlclwiLFwic2F2ZU1lbnUuc2F2ZVBhZ2VBc1wiOlwiU2VpdGUgc3BlaWNoZXJuIHVudGVyXCIsXCJzYXZlTW9kYWwuZW50ZXJWYWx1ZVwiOlwiUGxlYXNlIGVudGVyIGEgdmFsdWUgREVcIixcInNhdmVNb2RhbC5hbHJlYWR5RXhpc3RzXCI6XCJ7e3RpdGxlfX0gZXhpc3RpZXJ0IGJlcmVpdHMuXCIsXCJzYXZlTW9kYWwucGxlYXNlRW50ZXJWYWxpZE5hbWVcIjpcIkJpdHRlIGdlYmVuIFNpZSBlaW5lbiBnw7xsdGlnZW4gTmFtZW4gZWluXCIsXCJzYXZlTW9kYWwucmVuYW1lUGFnZVwiOlwiU2VpdGUgdW1iZW5lbm5lblwiLFwic2F2ZU1vZGFsLmNsb3NlUGFnZVwiOlwiU2VpdGUgc2NobGllw59lblwiLFwic2F2ZU1vZGFsLmRpc2NhcmRDaGFuZ2VzXCI6XCLDhG5kZXJ1bmdlbiB2ZXJ3ZXJmZW5cIixcInNhdmVNb2RhbC5kaXNjYXJkQWxsXCI6XCJBbGxlIHZlcndlcmZlblwiLFwic2F2ZU1vZGFsLnNhdmVBbGxcIjpcIkFsbGUgc3BlaWNoZXJuXCIsXCJzYXZlTW9kYWwuc2F2ZVBhZ2VzQ291bnRcIjpcIih7e2NvdW50fX0pIFNlaXRlbiB2b3IgZGVtIFNjaGxpZcOfZW4gc3BlaWNoZXJuP1wiLFwiZGVmYXVsdFBhZ2VUaXRsZVwiOlwiVW50aXRsZWQgUGFnZSBERVwiLFwiZW50ZXJwcmlzZURlZmF1bHRQYWdlVGl0bGVcIjpcIlVudGl0bGVkIFN1cGVydGFiIERFXCIsXCJhZGROZXdQYWdlXCI6XCJOZXcgUGFnZSBERVwiLFwiYWRkTmV3VGFiXCI6XCJOZXVlbiBUYWIgaGluenVmw7xnZW5cIixcImFkZE5ld1ZpZXdcIjpcIk5ldWUgQW5zaWNodFwiLFwicmVzdG9yZU1vZGFsXCI6XCJTaW5kIFNpZSBzaWNoZXIsIGRhc3MgU2llIGRpZSB6dWxldHp0IGdlc3BlaWNoZXJ0ZW4gw4RuZGVydW5nZW4gd2llZGVyaGVyc3RlbGxlbiB3b2xsZW4/XCIsXCJtb2RhbC5kaXNjYXJkV2FybmluZ1wiOlwiQWxsZSBuaWNodCBnZXNwZWljaGVydGVuIMOEbmRlcnVuZ2VuIHdlcmRlbiB2ZXJ3b3JmZW5cIixcIm1vZGFsLmRpc2NhcmRQYWdlV2FybmluZ1wiOlwiQWxsZSBuaWNodCBnZXNwZWljaGVydGVuIMOEbmRlcnVuZ2VuIGF1ZiBkaWVzZXIgU2VpdGUgZ2VoZW4gdmVybG9yZW4uXCIsXCJtb2RhbC5zYXZlQ2hhbmdlc1Byb21wdFwiOlwiw4RuZGVydW5nZW4gdm9yIGRlbSBTY2hsaWXDn2VuIHNwZWljaGVybj9cIixcIm1vZGFsLnBhZ2VDbG9zZVwiOlwiUGFnZSBDbG9zZSBERVwiLFwic3dpdGNoV29ya3NwYWNlTW9kYWxcIjpcIlNpbmQgU2llIHNpY2hlciwgZGFzcyBTaWUgenUge3t3b3Jrc3BhY2V9fXdlY2hzZWxuIHdvbGxlbj9cIixcInN3aXRjaFdvcmtzcGFjZU1vZGFsLndhcm5pbmdcIjpcIkFsbGUgbmljaHQgZ2VzcGVpY2hlcnRlbiDDhG5kZXJ1bmdlbiB3ZXJkZW4gdmVyd29yZmVuXCIsXCJkZWxldGVXb3Jrc3BhY2VNb2RhbFwiOlwiU2luZCBTaWUgc2ljaGVyLCBkYXNzIFNpZSBkaWVzZW4gV29ya3NwYWNlIGRhdWVyaGFmdCBsw7ZzY2hlbiB3b2xsZW4/XCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwud2FybmluZ1wiOlwiRWluIFdvcmtzcGFjZSBtaXQgZGVtIE5hbWVuIHt7d29ya3NwYWNlfX0gZXhpc3RpZXJ0IGJlcmVpdHMuIE3DtmNodGVuIFNpZSBpaG4gZXJzZXR6ZW4/XCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwud2FybmluZy5ib2R5XCI6XCJFaW4gV29ya3NwYWNlIG1pdCBkZW1zZWxiZW4gTmFtZW4gZXhpc3RpZXJ0IGJlcmVpdHMuIFdlbm4gU2llIGlobiBlcnNldHplbiwgd2lyZCBkZXIgYWt0dWVsbGUgSW5oYWx0IMO8YmVyc2NocmllYmVuLlwiLFwicmVwbGFjZVdvcmtzcGFjZU1vZGFsLnJlcGxhY2VcIjpcIkVyc2V0emVuXCIsXCJjbG9zZVBsYXRmb3JtXCI6XCJQbGF0dGZvcm0gc2NobGllw59lblwiLFwiY2xvc2VQbGF0Zm9ybS53b3Jrc3BhY2VcIjpcIkRpZSB7e3dvcmtzcGFjZX19IFBsYXR0Zm9ybSBzY2hsaWXDn2VuXCIsXCJjbG9zZVBsYXRmb3JtLndhcm5pbmdcIjpcIldlbm4gU2llIGVpbmUgUGxhdHRmb3JtIHNjaGxpZcOfZW4sIHdlcmRlbiBhbGxlIFdvcmtzcGFjZXMsIEFwcHMgdW5kIGxhdWZlbmRlbiBQcm96ZXNzZSBiZWVuZGV0LlwiLFwiYmFja1wiOlwiWnVyw7xja1wiLFwiZm9yd2FyZFwiOlwiV2VpdGVyXCIsXCJyZWxvYWRcIjpcIk5ldSBsYWRlblwiLFwiZ3JlZW5cIjpcIkdyw7xuXCIsXCJwdXJwbGVcIjpcIkxpbGFcIixcIm9yYW5nZVwiOlwiT3JhbmdlXCIsXCJyZWRcIjpcIlJvdFwiLFwicGlua1wiOlwiUGlua1wiLFwieWVsbG93XCI6XCJHZWxiXCIsXCJ0aGVtZS5saWdodFwiOlwiSGVsbFwiLFwidGhlbWUuZGFya1wiOlwiRHVua2VsXCIsXCJ0aGVtZS5zeXN0ZW1cIjpcIlN5bmNocm9uaXNpZXJ1bmcgbWl0IE9TLUVpbnN0ZWxsdW5nXCIsXCJ0b29sYmFyLmhpZGVUYWJzXCI6XCJUYWJzIGF1c2JsZW5kZW5cIixcInRvb2xiYXIuc2hvd1RhYnNcIjpcIlRhYnMgYW56ZWlnZW5cIixcInRvb2xiYXIubG9ja1wiOlwiU3BlcnJlblwiLFwidG9vbGJhci51bmxvY2tcIjpcIkZyZWlzY2hhbHRlblwiLFwidG9vbGJhci5jb2xvckxpbmtpbmdcIjpcIkZhcmJ2ZXJrbsO8cGZ1bmdcIixcInRvb2xiYXIuY2hhbmdlTGF5b3V0XCI6XCJMYXlvdXQgw6RuZGVyblwiLFwidG9vbGJhci5zYXZlTWVudVwiOlwiTWVuw7wgc3BlaWNoZXJuXCIsXCJ0b29sYmFyLm1heGltaXplV2luZG93XCI6XCJGZW5zdGVyIG1heGltaWVyZW5cIixcInRvb2xiYXIucmVzdG9yZVdpbmRvd1wiOlwiRmVuc3RlciB3aWVkZXJoZXJzdGVsbGVuXCIsXCJ0b29sYmFyLm1pbmltaXplV2luZG93XCI6XCJGZW5zdGVyIG1pbmltaWVyZW5cIixcImNoYW5nZUxheW91dC5mdWxsV2lkdGhcIjpcIlZvbGxlIEJyZWl0ZVwiLFwiY2hhbmdlTGF5b3V0LmNvbHVtbnNcIjpcIlNwYWx0ZW5cIixcImNoYW5nZUxheW91dC5Sb3dzXCI6XCJaZWlsZW5cIixcImNoYW5nZUxheW91dC5HcmlkXCI6XCJSYXN0ZXJcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlU3dpdGNoZWRcIjpcIldvcmtzcGFjZSBnZXdlY2hzZWx0XCIsXCJzdWNjZXNzSW5kaWNhdG9yLmhpZGRlblwiOlwiVGFicyBzaW5kIGF1c2dlYmxlbmRldFwiLFwic3VjY2Vzc0luZGljYXRvci5zaG93blwiOlwiVGFicyB3ZXJkZW4gYW5nZXplaWd0XCIsXCJzdWNjZXNzSW5kaWNhdG9yLmxvY2tlZFwiOlwiU2VpdGUgaXN0IGdlc3BlcnJ0XCIsXCJzdWNjZXNzSW5kaWNhdG9yLnVubG9ja2VkXCI6XCJTZWl0ZSBpc3QgZnJlaWdlc2NoYWx0ZXRcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlU2F2ZWRcIjpcIldvcmtzcGFjZSBnZXNwZWljaGVydFwiLFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VTYXZlZEFzXCI6XCJXb3Jrc3BhY2UgZ2VzcGVpY2hlcnQgYWxzIHt7d29ya3NwYWNlfX1cIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlUmVuYW1lZFwiOlwiV29ya3NwYWNlIHVtYmVuYW5udFwiLFwic3VjY2Vzc0luZGljYXRvci5wYWdlU2F2ZWRcIjpcIlNlaXRlIGdlc3BlaWNoZXJ0XCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VIYXNCZWVuU2F2ZWRcIjpcIlxcXFxcInt7dGl0bGV9fVxcXFxcIiBoYXMgYmVlbiBzYXZlZC4gREVcIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZUNvcHlTYXZlZFwiOlwiU2VpdGUgZ2VzcGVpY2hlcnQgYWxzIHt7dGl0bGV9fVwiLFwic3VjY2Vzc0luZGljYXRvci5wYWdlUmVuYW1lZFwiOlwiU2VpdGUgdW1iZW5hbm50XCIsXCJzdWNjZXNzSW5kaWNhdG9yLmNvbnRleHRHcm91cEFwcGxpZWRcIjpcIkFuZ2V3YW5kdGUgS29udGV4dGdydXBwZVwiLFwic3VjY2Vzc0luZGljYXRvci5uYW1lZENvbnRleHRHcm91cEFwcGxpZWRcIjpcInt7Y29sb3JOYW1lfX0gYW5nZXdhbmR0ZSBLb250ZXh0Z3J1cHBlXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnZpZXdSZW1vdmVkXCI6XCJBbnNpY2h0IGF1cyBkZXIgS29udGV4dGdydXBwZSBlbnRmZXJudFwiLFwic3VjY2Vzc0luZGljYXRvci52aWV3c1JlbW92ZWRcIjpcIkFuc2ljaHRlbiBhdXMgZGVyIEtvbnRleHRncnVwcGUgZW50ZmVybnRcIixcInN1Y2Nlc3NJbmRpY2F0b3IubGF5b3V0QXBwbGllZFwiOlwie3tsYXlvdXROYW1lfX0gYW5nZXdhbmR0ZXMgTGF5b3V0XCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZURlbGV0ZWRcIjpcIldvcmtzcGFjZSBnZWzDtnNjaHRcIixcImVycm9ySW5kaWNhdG9yLnBhZ2VTYXZlRmFpbGVkXCI6XCJTZWl0ZSBrb25udGUgbmljaHQgZ2VzcGVpY2hlcnQgd2VyZGVuXCIsXCJlcnJvckluZGljYXRvci53b3Jrc3BhY2VTYXZlRmFpbGVkXCI6XCJXb3Jrc3BhY2Uga29ubnRlIG5pY2h0IGdlc3BlaWNoZXJ0IHdlcmRlblwiLFwiZXJyb3JJbmRpY2F0b3IuZmFpbGVkVG9EdXBsaWNhdGVQYWdlXCI6XCJTZWl0ZSBrYW5uIG5pY2h0IGR1cGxpemllcnQgd2VyZGVuXCIsXCJpbmZvSW5kaWNhdG9yLmNvbG9yTGlua0F0dGVtcHRcIjpcIldpciBoYWJlbiB2ZXJzdWNodCwgZGllc2VtIFRhYiBlaW5lIEZhcmJlIHp1b3JkbmVuLCBhYmVyIGRlciBFaWdlbnTDvG1lciBkZXIgV2Vic2l0ZS9kZXMgSW5oYWx0cyBoYXQgc2llIG5vY2ggbmljaHQgYWt0aXZpZXJ0XCIsXCJnbG9iYWwuY2FuY2VsXCI6XCJBYmJyZWNoZW5cIixcImdsb2JhbC5jb25maXJtXCI6XCJCZXN0w6R0aWdlblwiLFwiZ2xvYmFsLnNhdmVcIjpcIlNwZWljaGVyblwiLFwiZ2xvYmFsLmRlbGV0ZVwiOlwiRGVsZXRlIERFXCIsXCJhcHBSZXN1bHRzLmhlYWRlclwiOlwiRmVhdHVyZWQgQ29udGVudCBEQ1wiLFwicmVjZW50bHlWaXNpdGVkLmhlYWRlclwiOlwiUmVjZW50bHkgdmlzaXRlZCBEQ1wiLFwibGFuZGluZ1BhZ2Uuc3ViaGVhZGVyXCI6XCJBcHBzIGFuZCB3ZWJzaXRlcyBzZWxlY3RlZCBieSBhbiBhZG1pbiB3aWxsIHNob3cgaGVyZSBERVwiLFwiYXJpYS5vcGVuQnJvd3NlclwiOlwiQnJvd3Nlci1NZW7DvCDDtmZmbmVuXCIsXCJhcmlhLmJyb3dzZXJUYWJzXCI6XCJCcm93c2VyLVRhYlwiLFwiYXJpYS52aWV3VGFiXCI6XCJUYWIg4oCeQW5zaWNodOKAnCBmw7xyIHt7dGl0bGV9fVwiLFwiYXJpYS5jbG9zZVBhZ2VcIjpcIkJ1dHRvbiDigJ5TZWl0ZSBzY2hsaWXDn2Vu4oCcIGbDvHIge3t0aXRsZX19XCIsXCJhcmlhLmNsb3NlVGFiXCI6XCJUYWIgc2NobGllw59lbiB7e3RpdGxlfX1cIixcImFyaWEudGl0bGVcIjpcIkJlemVpY2hudW5nXCIsXCJhcmlhLmNsb3NlQ29udGV4dEdyb3VwXCI6XCJWZXJ3ZW5kZW4gU2llIGRpZSBFc2NhcGUtVGFzdGUsIHVtIGRlbiBEaWFsb2cgenVyIEF1c3dhaGwgdm9uIEtvbnRleHRncnVwcGVuIHp1IHNjaGxpZcOfZW5cIixcImFyaWEuY29sb3JMaW5raW5nXCI6XCJGYXJidmVya27DvHBmdW5nIGVpbi0gb2RlciBhdXNibGVuZGVuXCIsXCJhcmlhLmFwcGx5Q29sb3JMaW5raW5nXCI6XCJCaXR0ZSB3w6RobGVuIFNpZSBlaW5lIEFuc2ljaHQsIHVtIGRpZSBGYXJidmVya27DvHBmdW5nIGFuenV3ZW5kZW5cIixcImFyaWEuYXNzaWduQ29sb3JMaW5raW5nQ3VycmVudFZpZXdcIjpcIkFrdHVlbGxlIEFuc2ljaHQsIGRpZSBkZXIgS29udGV4dGdydXBwZSB7e25hbWV9fSB6dWdlb3JkbmV0IGlzdFwiLFwiYXJpYS5hc3NpZ25Db2xvckxpbmtpbmdDdXJyZW50Vmlld3NcIjpcIkFrdHVlbGxlIEFuc2ljaHRlbiwgZGllIGRlciBLb250ZXh0Z3J1cHBlIHt7bmFtZX19IHp1Z2VvcmRuZXQgc2luZFwiLFwiYXJpYS5zZXRDb2xvckxpbmtpbmdBY3RpdmVWaWV3XCI6XCJBa3RpdmUgQW5zaWNodCBhdWYgZGllIEtvbnRleHRncnVwcGUge3tuYW1lfX0gc2V0emVuXCIsXCJhcmlhLnNldENvbG9yTGlua2luZ0FjdGl2ZVZpZXdzXCI6XCJBa3RpdmUgQW5zaWNodGVuIGF1ZiBkaWUgS29udGV4dGdydXBwZSB7e25hbWV9fSBzZXR6ZW5cIixcImFyaWEuZXNjYXBlTGF5b3V0RGlhbG9nXCI6XCJWZXJ3ZW5kZW4gU2llIGRpZSBFc2NhcGUtVGFzdGUsIHVtIGRlbiBEaWFsb2cgenVyIExheW91dMOkbmRlcnVuZyB6dSBzY2hsaWXDn2VuXCIsXCJnbG9iYWwuc3VwZXJ0YWJcIjpcIlN1cGVydGFiIERFXCIsXCJnbG9iYWwudGFiXCI6XCJUYWIgREVcIixcImJvb2ttYXJrcy5lZGl0Qm9va21hcmtcIjpcIkVkaXQgQm9va21hcmsgREVcIixcImJvb2ttYXJrcy5ib29rbWFya0FkZGVkXCI6XCJCb29rbWFyayBhZGRlZCBERVwiLFwiYm9va21hcmtzLmRvbmVcIjpcIkRvbmUgREVcIixcImJvb2ttYXJrcy5yZW1vdmVcIjpcIlJlbW92ZSBERVwiLFwiYm9va21hcmtzLmJvb2ttYXJrc1BhbmVsXCI6XCJCb29rbWFya3MgUGFuZWwgREVcIixcImJvb2ttYXJrcy5jbG9zZVBhbmVsXCI6XCJDbG9zZSBCb29rbWFya3MgUGFuZWwgREVcIixcImJvb2ttYXJrcy5ib29rbWFya3NcIjpcIkJvb2ttYXJrcyBERVwiLFwiYm9va21hcmtzLmFsbEJvb2ttYXJrc1wiOlwiQWxsIEJvb2ttYXJrcyBERVwiLFwiYm9va21hcmtzLmZhdm9yaXRlc1wiOlwiRmF2b3JpdGVzIERFXCIsXCJib29rbWFya3Muc2VhcmNoQm9va21hcmtzXCI6XCJTZWFyY2ggQm9va21hcmtzIERFXCIsXCJib29rbWFya3MuY2xlYXJTZWFyY2hJbnB1dFwiOlwiQ2xlYXIgU2VhcmNoIElucHV0IERFXCIsXCJib29rbWFya3MuY3JlYXRlRm9sZGVyXCI6XCJDcmVhdGUgTmV3IEZvbGRlciBERVwiLFwiYm9va21hcmtzLmV4aXRGb2xkZXJcIjpcIkV4aXQgRm9sZGVyIERFXCIsXCJib29rbWFya3MubmV3Rm9sZGVyXCI6XCJOZXcgRm9sZGVyIERFXCIsXCJib29rbWFya3MubmFtZWRGb2xkZXJcIjpcInt7bmFtZX19IEZvbGRlciBERVwiLFwiYm9va21hcmtzLmJvb2ttYXJrU2V0dGluZ3NcIjpcInt7bmFtZX19IEJvb2ttYXJrIFNldHRpbmdzIERFXCIsXCJib29rbWFya3MuZm9sZGVyU2V0dGluZ3NcIjpcInt7bmFtZX19IEZvbGRlciBTZXR0aW5ncyBERVwiLFwiYm9va21hcmtzLm5vUmVzdWx0c0ZvdW5kXCI6XCJObyByZXN1bHRzIGZvdW5kIERFXCIsXCJib29rbWFya3Mubm9SZXN1bHRzRm91bmRTdWJ0ZXh0XCI6XCJUaGVyZSBhcmUgbm8gYm9va21hcmtzIHRoYXQgbWF0Y2ggeW91ciBzZWFyY2ggREVcIixcImJvb2ttYXJrcy5ub3RoaW5nVG9TaG93XCI6XCJOb3RoaW5nIHRvIHNob3cgeWV0IERFXCIsXCJib29rbWFya3Mubm90aGluZ1RvU2hvd1N1YnRleHRcIjpcIkFkZCBhIGJvb2ttYXJrIHRvIHRoaXMgZm9sZGVyIERFXCIsXCJib29rbWFya3MucmVzdWx0c0ZvdW5kSW5cIjpcIlJlc3VsdHMgZm91bmQgaW4ge3tuYW1lfX0gREVcIixcImJvb2ttYXJrcy5yZXN1bHRzSW5PdGhlckZvbGRlcnNcIjpcIlJlc3VsdHMgZm91bmQgaW4gb3RoZXIgZm9sZGVycyBERVwiLFwiYm9va21hcmtzLmFsbFJlc3VsdHNGb3VuZEluXCI6XCJBbGwgcmVzdWx0cyBmb3VuZCBpbiBERVwiLFwiYm9va21hcmtzLmVkaXROYW1lXCI6XCJFZGl0IE5hbWUgREVcIixcImJvb2ttYXJrcy5tb3ZlXCI6XCJNb3ZlIERFXCIsXCJib29rbWFya3MuYm9va21hcmtBZGRlZFRpdGxlXCI6XCJCb29rbWFyayBBZGRlZCBERVwiLFwiYm9va21hcmtzLmJvb2ttYXJrQWRkZWRUb0ZvbGRlclwiOlwiWW91ciBib29rbWFyayB3YXMgYWRkZWQgdG8gXFxcXFwie3tmb2xkZXJOYW1lfX1cXFxcXCIgREVcIixcImJvb2ttYXJrcy5ib29rbWFya0VkaXRlZFRpdGxlXCI6XCJCb29rbWFyayBFZGl0ZWQgREVcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5zYXZlU3VwZXJ0YWJcIjpcIlNhdmUgU3VwZXJ0YWIgREVcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5zYXZlU3VwZXJ0YWJBc1wiOlwiU2F2ZSBTdXBlcnRhYiBBcy4uLiBERVwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LmR1cGxpY2F0ZVwiOlwiRHVwbGljYXRlIERFXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuZGVsZXRlU3VwZXJ0YWJcIjpcIkRlbGV0ZSBTdXBlcnRhYiBERVwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51Lm5ld1RhYlwiOlwiTmV3IFRhYiBERVwiLFwiZW50ZXJwcmlzZVNhdmVNZW51LnNhdmVTdXBlcnRhYkFzXCI6XCJTYXZlIFN1cGVydGFiIEFzIERFXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLnJlbmFtZVN1cGVydGFiXCI6XCJSZW5hbWUgREVcIixcImVudGVycHJpc2VTYXZlTW9kYWwudW5zYXZlZENoYW5nZXNcIjpcIllvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcyBpbiB0aGlzIFRhYi4gREVcIixcImVudGVycHJpc2VTYXZlTW9kYWwuY2xvc2VUYWJcIjpcIkNsb3NlIFRhYiBERVwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC5jbG9zZVN1cGVydGFiXCI6XCJDbG9zZSBTdXBlcnRhYiBERVwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC5zYXZlU3VwZXJ0YWJDb3VudFwiOlwiU2F2ZSB7e2NvdW50fX0gU3VwZXJ0YWJzIGJlZm9yZSBjbG9zaW5nPyBERVwiLFwiZW50ZXJwcmlzZU1vZGFsLmRpc2NhcmRTdXBlcnRhYldhcm5pbmdcIjpcIkFueSB1bnNhdmVkIGNoYW5nZXMgdG8gdGhpcyBTdXBlcnRhYiB3aWxsIGJlIGxvc3QuIERFXCIsXCJlbnRlcnByaXNlRGVsZXRlTW9kYWwuZGVsZXRlU3VwZXJ0YWJcIjpcIkRlbGV0ZSB0aGUgXFxcXFwie3t0aXRsZX19XFxcXFwiIFN1cGVydGFiPyBERVwiLFwiZW50ZXJwcmlzZURlbGV0ZU1vZGFsLmRlbGV0ZVN1cGVydGFiV2FybmluZ1wiOlwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIFN1cGVydGFiPyBUaGlzIGFjdGlvbiBjYW5ub3QgYmUgdW5kb25lIGFuZCBpcyBwZXJtYW5lbnQuIERFXCIsXCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYlNhdmVkXCI6XCJTdXBlcnRhYiBTYXZlZCBERVwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJIYXNCZWVuU2F2ZWRcIjpcIlxcXFxcInt7dGl0bGV9fVxcXFxcIiBTdXBlcnRhYiBoYXMgYmVlbiBzYXZlZC4gREVcIixcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiRGVsZXRlZFwiOlwiU3VwZXJ0YWIgRGVsZXRlZCBERVwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJIYXNCZWVuRGVsZXRlZFwiOlwiXFxcXFwie3t0aXRsZX19XFxcXFwiIFN1cGVydGFiIGhhcyBiZWVuIGRlbGV0ZWQuIERFXCIsXCJlbnRlcnByaXNlRXJyb3JJbmRpY2F0b3IuZmFpbGVkVG9EdXBsaWNhdGVUYWJcIjpcIkZhaWxlZCB0byBkdXBsaWNhdGUgVGFiIERFXCIsXCJlbnRlcnByaXNlRXJyb3JJbmRpY2F0b3IuZmFpbGVkVG9EdXBsaWNhdGVTdXBlcnRhYlwiOlwiRmFpbGVkIHRvIGR1cGxpY2F0ZSBTdXBlcnRhYiBERVwiLFwiZW50ZXJwcmlzZUNvbW1hbmRCYXIuc3dpdGNoVG9TdXBlcnRhYlwiOlwiU3dpdGNoIHRvIFN1cGVydGFiIERFXCIsXCJlbnRlcnByaXNlQ29tbWFuZEJhci5nb1RvXCI6XCJHbyB0byB7e3R5cGV9fSBERVwiLFwiY29udGV4dE1lbnUucXVpdEVudGVycHJpc2VCcm93c2VyXCI6XCJRdWl0IERFXCJ9JyksQW49SlNPTi5wYXJzZSgne1wiY29udGV4dE1lbnUubmV3V2luZG93XCI6XCLmlrDjgZfjgYTjgqbjgqPjg7Pjg4njgqZcIixcImNvbnRleHRNZW51Lm5ld1BhZ2VcIjpcIuaWsOOBl+OBhOODmuODvOOCuFwiLFwiY29udGV4dE1lbnUucmVzdG9yZVwiOlwi5pyA5b6M44Gr5L+d5a2Y44GV44KM44Gf5aSJ5pu044Gr5oi744GZXCIsXCJjb250ZXh0TWVudS5zd2l0Y2hXb3Jrc3BhY2VcIjpcIuODr+ODvOOCr+OCueODmuODvOOCueOBq+WIh+OCiuabv+OBiOOCi1wiLFwiY29udGV4dE1lbnUuYXBwZWFyYW5jZVwiOlwi5aSW6KazXCIsXCJjb250ZXh0TWVudS5zYXZlV29ya3NwYWNlXCI6XCLjg6/jg7zjgq/jgrnjg5rjg7zjgrnjgpLkv53lrZhcIixcImNvbnRleHRNZW51LnNhdmVXb3Jrc3BhY2VBc1wiOlwi44Ov44O844Kv44K544Oa44O844K544KS5Yil5ZCN44Gn5L+d5a2YLi4uXCIsXCJjb250ZXh0TWVudS5yZW5hbWVXb3Jrc3BhY2VcIjpcIuODr+ODvOOCr+OCueODmuODvOOCueWQjeOCkuWkieabtFwiLFwiY29udGV4dE1lbnUuZGVsZXRlV29ya3NwYWNlXCI6XCLjg6/jg7zjgq/jgrnjg5rjg7zjgrnjgpLliYrpmaRcIixcImNvbnRleHRNZW51LmRvd25sb2Fkc1wiOlwi44OA44Km44Oz44Ot44O844OJXCIsXCJjb250ZXh0TWVudS5zYXZlUGFnZVwiOlwi44Oa44O844K444KS5L+d5a2YXCIsXCJjb250ZXh0TWVudS5zYXZlUGFnZUFzXCI6XCLjg5rjg7zjgrjjgpLliKXlkI3jgafkv53lrZguLi5cIixcImNvbnRleHRNZW51LnByaW50XCI6XCLljbDliLcuLi5cIixcImNvbnRleHRNZW51LnByaW50U2NyZWVuXCI6XCLjg5fjg6rjg7Pjg4jjgrnjgq/jg6rjg7zjg7NcIixcImNvbnRleHRNZW51LmNsb3NlV2luZG93XCI6XCLjgqbjgqPjg7Pjg4njgqbjgpLplonjgZjjgotcIixcImNvbnRleHRNZW51Lm9wZW5TdG9yZWZyb250XCI6XCLjgrnjg4jjgqLjg5Xjg63jg7Pjg4jjgpLplovjgY9cIixcImNvbnRleHRNZW51LnF1aXRQbGF0Zm9ybVwiOlwi44OX44Op44OD44OI44OV44Kp44O844Og44KS57WC5LqG44GZ44KLXCIsXCJjb250ZXh0TWVudS5uZXdWaWV3XCI6XCLmlrDjgZfjgYTjg5Pjg6Xjg7xcIixcImNvbnRleHRNZW51Lm9wZW5WaWV3XCI6XCLjg4fjg5Xjgqnjg6vjg4jjga7jgqbjgqfjg5bjg5bjg6njgqbjgrbjg7zjgafjg5Pjg6Xjg7zjgpLplovjgY9cIixcImNvbnRleHRNZW51Lm9wZW5WaWV3c1wiOlwi44OH44OV44Kp44Or44OI44Gu44Km44Kn44OW44OW44Op44Km44K244O844Gn44OT44Ol44O844KS6ZaL44GPXCIsXCJjb250ZXh0TWVudS5yZWxvYWRcIjpcIlJlbG9hZCBKUFwiLFwiY29udGV4dE1lbnUucmVsb2FkVmlld1wiOlwi44OT44Ol44O844KS44Oq44Ot44O844OJXCIsXCJjb250ZXh0TWVudS5yZWxvYWRWaWV3c1wiOlwi44OT44Ol44O844KS44Oq44Ot44O844OJXCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVcIjpcIkR1cGxpY2F0ZSBKUFwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlVmlld1wiOlwi44OT44Ol44O844KS6KSH6KO9XCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVWaWV3c1wiOlwi44OT44Ol44O844KS6KSH6KO9XCIsXCJjb250ZXh0TWVudS5hZGRWaWV3XCI6XCLjg5Pjg6Xjg7zjgpLjg4Hjg6Pjg43jg6vjgavov73liqBcIixcImNvbnRleHRNZW51LmFkZFZpZXdzXCI6XCLjg5Pjg6Xjg7zjgpLjg4Hjg6Pjg43jg6vjgavov73liqBcIixcImNvbnRleHRNZW51LnJlbW92ZVZpZXdcIjpcIuODgeODo+ODjeODq+OBi+OCieODk+ODpeODvOOCkuWJiumZpFwiLFwiY29udGV4dE1lbnUucmVtb3ZlVmlld3NcIjpcIuODgeODo+ODjeODq+OBi+OCieODk+ODpeODvOOCkuWJiumZpFwiLFwiY29udGV4dE1lbnUuY2xvc2VWaWV3XCI6XCLjg5Pjg6Xjg7zjgpLplonjgZjjgotcIixcImNvbnRleHRNZW51LmNsb3NlVmlld3NcIjpcIuODk+ODpeODvOOCkumWieOBmOOCi1wiLFwiY29udGV4dE1lbnUuY2xvc2VUYWJcIjpcIkNsb3NlIFRhYiBKUFwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlUGFnZVwiOlwi44Oa44O844K444KS6KSH6KO9XCIsXCJjb250ZXh0TWVudS5zdWJtZW51LnByaW50XCI6XCLljbDliLdcIixcImNvbnRleHRNZW51LnN1Ym1lbnUucHJpbnRBbGxcIjpcIuOBmeOBueOBpuOCkuWNsOWIt1wiLFwic2F2ZU1lbnUuc2F2ZVdvcmtzcGFjZUFzXCI6XCLjg6/jg7zjgq/jgrnjg5rjg7zjgrnjgpLliKXlkI3jgafkv53lrZhcIixcInNhdmVNZW51LnNhdmVQYWdlQXNcIjpcIuODmuODvOOCuOOCkuWIpeWQjeOBp+S/neWtmFwiLFwic2F2ZU1vZGFsLmVudGVyVmFsdWVcIjpcIlBsZWFzZSBlbnRlciBhIHZhbHVlIEpQXCIsXCJzYXZlTW9kYWwuYWxyZWFkeUV4aXN0c1wiOlwie3t0aXRsZX1944Gv44GZ44Gn44Gr5a2Y5Zyo44GX44Gm44GE44G+44GZ44CCXCIsXCJzYXZlTW9kYWwucGxlYXNlRW50ZXJWYWxpZE5hbWVcIjpcIuacieWKueOBquWQjeWJjeOCkuWFpeWKm+OBl+OBpuOBj+OBoOOBleOBhFwiLFwic2F2ZU1vZGFsLnJlbmFtZVBhZ2VcIjpcIuODmuODvOOCuOWQjeOCkuWkieabtFwiLFwic2F2ZU1vZGFsLmNsb3NlUGFnZVwiOlwi44Oa44O844K444KS6ZaJ44GY44KLXCIsXCJzYXZlTW9kYWwuZGlzY2FyZENoYW5nZXNcIjpcIuWkieabtOOCkuegtOajhFwiLFwic2F2ZU1vZGFsLmRpc2NhcmRBbGxcIjpcIuOBmeOBueOBpuegtOajhFwiLFwic2F2ZU1vZGFsLnNhdmVBbGxcIjpcIuOBmeOBueOBpuS/neWtmFwiLFwic2F2ZU1vZGFsLnNhdmVQYWdlc0NvdW50XCI6XCLplonjgZjjgovliY3jgavvvIh7e2NvdW50fX3vvInjgaTjga7jg5rjg7zjgrjjgpLkv53lrZjjgZfjgb7jgZnjgYvvvJ9cIixcImRlZmF1bHRQYWdlVGl0bGVcIjpcIlVudGl0bGVkIFBhZ2UgSlBcIixcImVudGVycHJpc2VEZWZhdWx0UGFnZVRpdGxlXCI6XCJVbnRpdGxlZCBTdXBlcnRhYiBKUFwiLFwiYWRkTmV3UGFnZVwiOlwiTmV3IFBhZ2UgSlBcIixcImFkZE5ld1RhYlwiOlwi5paw44GX44GE44K/44OW44KS6L+95YqgXCIsXCJhZGROZXdWaWV3XCI6XCLmlrDjgZfjgYTjg5Pjg6Xjg7xcIixcInJlc3RvcmVNb2RhbFwiOlwi5pys5b2T44Gr5pyA5b6M44Gr5L+d5a2Y44GV44KM44Gf5aSJ5pu044Gr5oi744GX44G+44GZ44GL77yfXCIsXCJtb2RhbC5kaXNjYXJkV2FybmluZ1wiOlwi5L+d5a2Y44GV44KM44Gm44GE44Gq44GE5aSJ5pu044Gv56C05qOE44GV44KM44G+44GZXCIsXCJtb2RhbC5kaXNjYXJkUGFnZVdhcm5pbmdcIjpcIuS/neWtmOOBleOCjOOBpuOBhOOBquOBhOOBk+OBruODmuODvOOCuOOBuOOBruWkieabtOOBr+WkseOCj+OCjOOBvuOBmeOAglwiLFwibW9kYWwuc2F2ZUNoYW5nZXNQcm9tcHRcIjpcIumWieOBmOOCi+WJjeOBq+WkieabtOOCkuS/neWtmOOBl+OBvuOBmeOBi++8n1wiLFwibW9kYWwucGFnZUNsb3NlXCI6XCJQYWdlIENsb3NlIEpQXCIsXCJzd2l0Y2hXb3Jrc3BhY2VNb2RhbFwiOlwi5pys5b2T44Gre3t3b3Jrc3BhY2V9feOBq+WIh+OCiuabv+OBiOOBvuOBmeOBi++8n1wiLFwic3dpdGNoV29ya3NwYWNlTW9kYWwud2FybmluZ1wiOlwi5L+d5a2Y44GV44KM44Gm44GE44Gq44GE5aSJ5pu044Gv56C05qOE44GV44KM44G+44GZXCIsXCJkZWxldGVXb3Jrc3BhY2VNb2RhbFwiOlwi44GT44Gu44Ov44O844Kv44K544Oa44O844K544KS5rC45LmF44Gr5YmK6Zmk44GX44Gm44KC44KI44KN44GX44GE44Gn44GZ44GL77yfXCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwud2FybmluZ1wiOlwie3t3b3Jrc3BhY2V9feOBqOOBhOOBhuWQjeWJjeOBruODr+ODvOOCr+OCueODmuODvOOCueOBjOOBmeOBp+OBq+WtmOWcqOOBl+OBvuOBmeOAgue9ruOBjeaPm+OBiOOBvuOBmeOBi++8n1wiLFwicmVwbGFjZVdvcmtzcGFjZU1vZGFsLndhcm5pbmcuYm9keVwiOlwi5ZCM44GY5ZCN5YmN44Gu44Ov44O844Kv44K544Oa44O844K544GM44GZ44Gn44Gr5a2Y5Zyo44GX44G+44GZ44CC572u44GN5o+b44GI44KL44Go44CB54++5Zyo44Gu5YaF5a6544Gv5LiK5pu444GN44GV44KM44G+44GZ44CCXCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwucmVwbGFjZVwiOlwi572u44GN5o+b44GI44KLXCIsXCJjbG9zZVBsYXRmb3JtXCI6XCLjg5fjg6njg4Pjg4jjg5Xjgqnjg7zjg6DjgpLplonjgZjjgotcIixcImNsb3NlUGxhdGZvcm0ud29ya3NwYWNlXCI6XCJ7e3dvcmtzcGFjZX1944OX44Op44OD44OI44OV44Kp44O844Og44KS6ZaJ44GY44KLXCIsXCJjbG9zZVBsYXRmb3JtLndhcm5pbmdcIjpcIuODl+ODqeODg+ODiOODleOCqeODvOODoOOCkumWieOBmOOCi+OBqOOAgeWun+ihjOS4reOBruODr+ODvOOCr+OCueODmuODvOOCueOAgeOCouODl+ODquOAgeODl+ODreOCu+OCueOBjOOBmeOBueOBpumWieOBmOOBvuOBmeOAglwiLFwiYmFja1wiOlwi5oi744KLXCIsXCJmb3J3YXJkXCI6XCLpgLLjgoBcIixcInJlbG9hZFwiOlwi44Oq44Ot44O844OJXCIsXCJncmVlblwiOlwi44Kw44Oq44O844OzXCIsXCJwdXJwbGVcIjpcIuODkeODvOODl+ODq1wiLFwib3JhbmdlXCI6XCLjgqrjg6zjg7PjgrhcIixcInJlZFwiOlwi44Os44OD44OJXCIsXCJwaW5rXCI6XCLjg5Tjg7Pjgq9cIixcInllbGxvd1wiOlwi44Kk44Ko44Ot44O8XCIsXCJ0aGVtZS5saWdodFwiOlwi44Op44Kk44OIXCIsXCJ0aGVtZS5kYXJrXCI6XCLjg4Djg7zjgq9cIixcInRoZW1lLnN5c3RlbVwiOlwiT1Pjga7oqK3lrprjgajlkIzmnJ9cIixcInRvb2xiYXIuaGlkZVRhYnNcIjpcIuOCv+ODluOCkumdnuihqOekulwiLFwidG9vbGJhci5zaG93VGFic1wiOlwi44K/44OW44KS6KGo56S6XCIsXCJ0b29sYmFyLmxvY2tcIjpcIuODreODg+OCr1wiLFwidG9vbGJhci51bmxvY2tcIjpcIuODreODg+OCr+ino+mZpFwiLFwidG9vbGJhci5jb2xvckxpbmtpbmdcIjpcIuOCq+ODqeODvOODquODs+OCr1wiLFwidG9vbGJhci5jaGFuZ2VMYXlvdXRcIjpcIuODrOOCpOOCouOCpuODiOOCkuWkieabtFwiLFwidG9vbGJhci5zYXZlTWVudVwiOlwi44Oh44OL44Ol44O844KS5L+d5a2YXCIsXCJ0b29sYmFyLm1heGltaXplV2luZG93XCI6XCLjgqbjgqPjg7Pjg4njgqbjgpLmnIDlpKfljJbjgZnjgotcIixcInRvb2xiYXIucmVzdG9yZVdpbmRvd1wiOlwi44Km44Kj44Oz44OJ44Km44KS5b6p5YWDXCIsXCJ0b29sYmFyLm1pbmltaXplV2luZG93XCI6XCLjgqbjgqPjg7Pjg4njgqbjgpLmnIDlsI/ljJbjgZnjgotcIixcImNoYW5nZUxheW91dC5mdWxsV2lkdGhcIjpcIuWFqOW5hVwiLFwiY2hhbmdlTGF5b3V0LmNvbHVtbnNcIjpcIuWIl1wiLFwiY2hhbmdlTGF5b3V0LlJvd3NcIjpcIuihjFwiLFwiY2hhbmdlTGF5b3V0LkdyaWRcIjpcIuOCsOODquODg+ODiVwiLFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VTd2l0Y2hlZFwiOlwi44Ov44O844Kv44K544Oa44O844K544GM5YiH44KK5pu/44KP44KK44G+44GX44GfXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmhpZGRlblwiOlwi44K/44OW44GM6Z2e6KGo56S644Gr44Gq44Gj44Gm44GE44G+44GZXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnNob3duXCI6XCLjgr/jg5bjgYzooajnpLrjgZXjgozjgabjgYTjgb7jgZlcIixcInN1Y2Nlc3NJbmRpY2F0b3IubG9ja2VkXCI6XCLjg5rjg7zjgrjjgYzjg63jg4Pjgq/jgZXjgozjgabjgYTjgb7jgZlcIixcInN1Y2Nlc3NJbmRpY2F0b3IudW5sb2NrZWRcIjpcIuODmuODvOOCuOOBruODreODg+OCr+OBjOino+mZpOOBleOCjOOBpuOBhOOBvuOBmVwiLFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VTYXZlZFwiOlwi44Ov44O844Kv44K544Oa44O844K544GM5L+d5a2Y44GV44KM44G+44GX44GfXCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZVNhdmVkQXNcIjpcIuODr+ODvOOCr+OCueODmuODvOOCueOBjHt7d29ya3NwYWNlfX3jgajjgZfjgabkv53lrZjjgZXjgozjgb7jgZfjgZ9cIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlUmVuYW1lZFwiOlwi44Ov44O844Kv44K544Oa44O844K55ZCN44GM5aSJ5pu044GV44KM44G+44GX44GfXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VTYXZlZFwiOlwi44Oa44O844K444GM5L+d5a2Y44GV44KM44G+44GX44GfXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VIYXNCZWVuU2F2ZWRcIjpcIlxcXFxcInt7dGl0bGV9fVxcXFxcIiBoYXMgYmVlbiBzYXZlZC4gSlBcIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZUNvcHlTYXZlZFwiOlwi44Oa44O844K444GMe3t0aXRsZX1944Go44GX44Gm5L+d5a2Y44GV44KM44G+44GX44GfXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VSZW5hbWVkXCI6XCLjg5rjg7zjgrjlkI3jgYzlpInmm7TjgZXjgozjgb7jgZfjgZ9cIixcInN1Y2Nlc3NJbmRpY2F0b3IuY29udGV4dEdyb3VwQXBwbGllZFwiOlwi44Kz44Oz44OG44Kt44K544OI44Kw44Or44O844OX44GM6YGp55So44GV44KM44G+44GX44GfXCIsXCJzdWNjZXNzSW5kaWNhdG9yLm5hbWVkQ29udGV4dEdyb3VwQXBwbGllZFwiOlwie3tjb2xvck5hbWV9feOCs+ODs+ODhuOCreOCueODiOOCsOODq+ODvOODl+OBjOmBqeeUqOOBleOCjOOBvuOBl+OBn1wiLFwic3VjY2Vzc0luZGljYXRvci52aWV3UmVtb3ZlZFwiOlwi44Kz44Oz44OG44Kt44K544OI44Kw44Or44O844OX44GL44KJ44OT44Ol44O844GM5YmK6Zmk44GV44KM44G+44GX44GfXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnZpZXdzUmVtb3ZlZFwiOlwi44Kz44Oz44OG44Kt44K544OI44Kw44Or44O844OX44GL44KJ44OT44Ol44O844GM5YmK6Zmk44GV44KM44G+44GX44GfXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmxheW91dEFwcGxpZWRcIjpcInt7bGF5b3V0TmFtZX1944Os44Kk44Ki44Km44OI44GM6YGp55So44GV44KM44G+44GX44GfXCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZURlbGV0ZWRcIjpcIuODr+ODvOOCr+OCueODmuODvOOCueOBjOWJiumZpOOBleOCjOOBvuOBl+OBn1wiLFwiZXJyb3JJbmRpY2F0b3IucGFnZVNhdmVGYWlsZWRcIjpcIuODmuODvOOCuOOCkuS/neWtmOOBp+OBjeOBvuOBm+OCk+OBp+OBl+OBn1wiLFwiZXJyb3JJbmRpY2F0b3Iud29ya3NwYWNlU2F2ZUZhaWxlZFwiOlwi44Ov44O844Kv44K544Oa44O844K544KS5L+d5a2Y44Gn44GN44G+44Gb44KT44Gn44GX44GfXCIsXCJlcnJvckluZGljYXRvci5mYWlsZWRUb0R1cGxpY2F0ZVBhZ2VcIjpcIuODmuODvOOCuOOCkuikh+ijveOBp+OBjeOBvuOBm+OCk+OBp+OBl+OBn1wiLFwiaW5mb0luZGljYXRvci5jb2xvckxpbmtBdHRlbXB0XCI6XCLjgZPjga7jgr/jg5bjgpLjgqvjg6njg7zjg6rjg7Pjgq/jgZfjgojjgYbjgajjgZfjgb7jgZfjgZ/jgYzjgIHjgrXjgqTjg4gv44Kz44Oz44OG44Oz44OE44Gu44Kq44O844OK44O844GM44G+44Gg44GT44KM44KS5pyJ5Yq544Gr44GX44Gm44GE44G+44Gb44KTXCIsXCJnbG9iYWwuY2FuY2VsXCI6XCLjgq3jg6Pjg7Pjgrvjg6tcIixcImdsb2JhbC5jb25maXJtXCI6XCLnorroqo1cIixcImdsb2JhbC5zYXZlXCI6XCLkv53lrZhcIixcImdsb2JhbC5kZWxldGVcIjpcIkRlbGV0ZSBKUFwiLFwiYXBwUmVzdWx0cy5oZWFkZXJcIjpcIkZlYXR1cmVkIGNvbnRlbnQgSlBcIixcInJlY2VudGx5VmlzaXRlZC5oZWFkZXJcIjpcIlJlY2VudGx5IHZpc2l0ZWQgSlBcIixcImxhbmRpbmdQYWdlLnN1YmhlYWRlclwiOlwiQXBwcyBhbmQgd2Vic2l0ZXMgc2VsZWN0ZWQgYnkgYW4gYWRtaW4gd2lsbCBzaG93IGhlcmUgSlBcIixcImFyaWEub3BlbkJyb3dzZXJcIjpcIuODluODqeOCpuOCtuODvOODoeODi+ODpeODvOOCkumWi+OBj1wiLFwiYXJpYS5icm93c2VyVGFic1wiOlwi44OW44Op44Km44K244O844K/44OWXCIsXCJhcmlhLnZpZXdUYWJcIjpcInt7dGl0bGV9feOBruOCv+ODluOCkuihqOekulwiLFwiYXJpYS5jbG9zZVBhZ2VcIjpcInt7dGl0bGV9feOBruODmuODvOOCuOOCv+ODluODnOOCv+ODs+OCkumWieOBmOOCi1wiLFwiYXJpYS5jbG9zZVRhYlwiOlwie3t0aXRsZX1944K/44OW44KS6ZaJ44GY44KLXCIsXCJhcmlhLnRpdGxlXCI6XCLjgr/jgqTjg4jjg6tcIixcImFyaWEuY2xvc2VDb250ZXh0R3JvdXBcIjpcIuOCqOOCueOCseODvOODl+OCkuS9v+eUqOOBl+OBpuOAgeOCs+ODs+ODhuOCreOCueODiOOCsOODq+ODvOODl+mBuOaKnuODgOOCpOOCouODreOCsOOCkumWieOBmOOCi1wiLFwiYXJpYS5jb2xvckxpbmtpbmdcIjpcIuOCq+ODqeODvOODquODs+OCr+OBruihqOekui/pnZ7ooajnpLpcIixcImFyaWEuYXBwbHlDb2xvckxpbmtpbmdcIjpcIuOCq+ODqeODvOODquODs+OCr+OCkumBqeeUqOOBmeOCi+ODk+ODpeODvOOCkumBuOaKnuOBl+OBpuOBj+OBoOOBleOBhFwiLFwiYXJpYS5hc3NpZ25Db2xvckxpbmtpbmdDdXJyZW50Vmlld1wiOlwi54++5Zyo44Gu44OT44Ol44O844Gve3tuYW1lfX3jgrPjg7Pjg4bjgq3jgrnjg4jjgrDjg6vjg7zjg5fjgavlibLjgorlvZPjgabjgonjgozjgabjgYTjgb7jgZlcIixcImFyaWEuYXNzaWduQ29sb3JMaW5raW5nQ3VycmVudFZpZXdzXCI6XCLnj77lnKjjga7jg5Pjg6Xjg7zjga97e25hbWV9feOCs+ODs+ODhuOCreOCueODiOOCsOODq+ODvOODl+OBq+WJsuOCiuW9k+OBpuOCieOCjOOBpuOBhOOBvuOBmVwiLFwiYXJpYS5zZXRDb2xvckxpbmtpbmdBY3RpdmVWaWV3XCI6XCLjgqLjgq/jg4bjgqPjg5bjg5Pjg6Xjg7zjgpJ7e25hbWV9feOCs+ODs+ODhuOCreOCueODiOOCsOODq+ODvOODl+OBq+ioreWumlwiLFwiYXJpYS5zZXRDb2xvckxpbmtpbmdBY3RpdmVWaWV3c1wiOlwi44Ki44Kv44OG44Kj44OW44OT44Ol44O844KSe3tuYW1lfX3jgrPjg7Pjg4bjgq3jgrnjg4jjgrDjg6vjg7zjg5fjgavoqK3lrppcIixcImFyaWEuZXNjYXBlTGF5b3V0RGlhbG9nXCI6XCLjgqjjgrnjgrHjg7zjg5fjgpLkvb/nlKjjgZfjgabjgIHjg6zjgqTjgqLjgqbjg4jlpInmm7Tpgbjmip7jg4DjgqTjgqLjg63jgrDjgpLplonjgZjjgotcIixcImdsb2JhbC5zdXBlcnRhYlwiOlwiU3VwZXJ0YWIgSlBcIixcImdsb2JhbC50YWJcIjpcIlRhYiBKUFwiLFwiYm9va21hcmtzLmVkaXRCb29rbWFya1wiOlwiRWRpdCBCb29rbWFyayBKUFwiLFwiYm9va21hcmtzLmJvb2ttYXJrQWRkZWRcIjpcIkJvb2ttYXJrIGFkZGVkIEpQXCIsXCJib29rbWFya3MuZG9uZVwiOlwiRG9uZSBKUFwiLFwiYm9va21hcmtzLnJlbW92ZVwiOlwiUmVtb3ZlIEpQXCIsXCJib29rbWFya3MuYm9va21hcmtzUGFuZWxcIjpcIkJvb2ttYXJrcyBQYW5lbCBKUFwiLFwiYm9va21hcmtzLmNsb3NlUGFuZWxcIjpcIkNsb3NlIEJvb2ttYXJrcyBQYW5lbCBKUFwiLFwiYm9va21hcmtzLmJvb2ttYXJrc1wiOlwiQm9va21hcmtzIEpQXCIsXCJib29rbWFya3MuYWxsQm9va21hcmtzXCI6XCJBbGwgQm9va21hcmtzIEpQXCIsXCJib29rbWFya3MuZmF2b3JpdGVzXCI6XCJGYXZvcml0ZXMgSlBcIixcImJvb2ttYXJrcy5zZWFyY2hCb29rbWFya3NcIjpcIlNlYXJjaCBCb29rbWFya3MgSlBcIixcImJvb2ttYXJrcy5jbGVhclNlYXJjaElucHV0XCI6XCJDbGVhciBTZWFyY2ggSW5wdXQgSlBcIixcImJvb2ttYXJrcy5jcmVhdGVGb2xkZXJcIjpcIkNyZWF0ZSBOZXcgRm9sZGVyIEpQXCIsXCJib29rbWFya3MuZXhpdEZvbGRlclwiOlwiRXhpdCBGb2xkZXIgSlBcIixcImJvb2ttYXJrcy5uZXdGb2xkZXJcIjpcIk5ldyBGb2xkZXIgSlBcIixcImJvb2ttYXJrcy5uYW1lZEZvbGRlclwiOlwie3tuYW1lfX0gRm9sZGVyIEpQXCIsXCJib29rbWFya3MuYm9va21hcmtTZXR0aW5nc1wiOlwie3tuYW1lfX0gQm9va21hcmsgU2V0dGluZ3MgSlBcIixcImJvb2ttYXJrcy5mb2xkZXJTZXR0aW5nc1wiOlwie3tuYW1lfX0gRm9sZGVyIFNldHRpbmdzIEpQXCIsXCJib29rbWFya3Mubm9SZXN1bHRzRm91bmRcIjpcIk5vIHJlc3VsdHMgZm91bmQgSlBcIixcImJvb2ttYXJrcy5ub1Jlc3VsdHNGb3VuZFN1YnRleHRcIjpcIlRoZXJlIGFyZSBubyBib29rbWFya3MgdGhhdCBtYXRjaCB5b3VyIHNlYXJjaCBKUFwiLFwiYm9va21hcmtzLm5vdGhpbmdUb1Nob3dcIjpcIk5vdGhpbmcgdG8gc2hvdyB5ZXQgSlBcIixcImJvb2ttYXJrcy5ub3RoaW5nVG9TaG93U3VidGV4dFwiOlwiQWRkIGEgYm9va21hcmsgdG8gdGhpcyBmb2xkZXIgSlBcIixcImJvb2ttYXJrcy5yZXN1bHRzRm91bmRJblwiOlwiUmVzdWx0cyBmb3VuZCBpbiB7e25hbWV9fSBKUFwiLFwiYm9va21hcmtzLnJlc3VsdHNJbk90aGVyRm9sZGVyc1wiOlwiUmVzdWx0cyBmb3VuZCBpbiBvdGhlciBmb2xkZXJzIEpQXCIsXCJib29rbWFya3MuYWxsUmVzdWx0c0ZvdW5kSW5cIjpcIkFsbCByZXN1bHRzIGZvdW5kIGluIEpQXCIsXCJib29rbWFya3MuZWRpdE5hbWVcIjpcIkVkaXQgTmFtZSBKUFwiLFwiYm9va21hcmtzLm1vdmVcIjpcIk1vdmUgSlBcIixcImJvb2ttYXJrcy5ib29rbWFya0FkZGVkVGl0bGVcIjpcIkJvb2ttYXJrIEFkZGVkIEpQXCIsXCJib29rbWFya3MuYm9va21hcmtBZGRlZFRvRm9sZGVyXCI6XCJZb3VyIGJvb2ttYXJrIHdhcyBhZGRlZCB0byBcXFxcXCJ7e2ZvbGRlck5hbWV9fVxcXFxcIiBKUFwiLFwiYm9va21hcmtzLmJvb2ttYXJrRWRpdGVkVGl0bGVcIjpcIkJvb2ttYXJrIEVkaXRlZCBKUFwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LnNhdmVTdXBlcnRhYlwiOlwiU2F2ZSBTdXBlcnRhYiBKUFwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LnNhdmVTdXBlcnRhYkFzXCI6XCJTYXZlIFN1cGVydGFiIEFzLi4uIEpQXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuZHVwbGljYXRlXCI6XCJEdXBsaWNhdGUgSlBcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5kZWxldGVTdXBlcnRhYlwiOlwiRGVsZXRlIFN1cGVydGFiIEpQXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUubmV3VGFiXCI6XCJOZXcgVGFiIEpQXCIsXCJlbnRlcnByaXNlU2F2ZU1lbnUuc2F2ZVN1cGVydGFiQXNcIjpcIlNhdmUgU3VwZXJ0YWIgQXMgSlBcIixcImVudGVycHJpc2VTYXZlTW9kYWwucmVuYW1lU3VwZXJ0YWJcIjpcIlJlbmFtZSBKUFwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC51bnNhdmVkQ2hhbmdlc1wiOlwiWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzIGluIHRoaXMgVGFiLiBKUFwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC5jbG9zZVRhYlwiOlwiQ2xvc2UgVGFiIEpQXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLmNsb3NlU3VwZXJ0YWJcIjpcIkNsb3NlIFN1cGVydGFiIEpQXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLnNhdmVTdXBlcnRhYkNvdW50XCI6XCJTYXZlIHt7Y291bnR9fSBTdXBlcnRhYnMgYmVmb3JlIGNsb3Npbmc/IEpQXCIsXCJlbnRlcnByaXNlTW9kYWwuZGlzY2FyZFN1cGVydGFiV2FybmluZ1wiOlwiQW55IHVuc2F2ZWQgY2hhbmdlcyB0byB0aGlzIFN1cGVydGFiIHdpbGwgYmUgbG9zdC4gSlBcIixcImVudGVycHJpc2VEZWxldGVNb2RhbC5kZWxldGVTdXBlcnRhYlwiOlwiRGVsZXRlIHRoZSBcXFxcXCJ7e3RpdGxlfX1cXFxcXCIgU3VwZXJ0YWI/IEpQXCIsXCJlbnRlcnByaXNlRGVsZXRlTW9kYWwuZGVsZXRlU3VwZXJ0YWJXYXJuaW5nXCI6XCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgU3VwZXJ0YWI/IFRoaXMgYWN0aW9uIGNhbm5vdCBiZSB1bmRvbmUgYW5kIGlzIHBlcm1hbmVudC4gSlBcIixcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiU2F2ZWRcIjpcIlN1cGVydGFiIFNhdmVkIEpQXCIsXCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYkhhc0JlZW5TYXZlZFwiOlwiXFxcXFwie3t0aXRsZX19XFxcXFwiIFN1cGVydGFiIGhhcyBiZWVuIHNhdmVkLiBKUFwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJEZWxldGVkXCI6XCJTdXBlcnRhYiBEZWxldGVkIEpQXCIsXCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYkhhc0JlZW5EZWxldGVkXCI6XCJcXFxcXCJ7e3RpdGxlfX1cXFxcXCIgU3VwZXJ0YWIgaGFzIGJlZW4gZGVsZXRlZC4gSlBcIixcImVudGVycHJpc2VFcnJvckluZGljYXRvci5mYWlsZWRUb0R1cGxpY2F0ZVRhYlwiOlwiRmFpbGVkIHRvIGR1cGxpY2F0ZSBUYWIgSlBcIixcImVudGVycHJpc2VFcnJvckluZGljYXRvci5mYWlsZWRUb0R1cGxpY2F0ZVN1cGVydGFiXCI6XCJGYWlsZWQgdG8gZHVwbGljYXRlIFN1cGVydGFiIEpQXCIsXCJlbnRlcnByaXNlQ29tbWFuZEJhci5zd2l0Y2hUb1N1cGVydGFiXCI6XCJTd2l0Y2ggdG8gU3VwZXJ0YWIgSlBcIixcImVudGVycHJpc2VDb21tYW5kQmFyLmdvVG9cIjpcIkdvIHRvIHt7dHlwZX19IEpQXCIsXCJjb250ZXh0TWVudS5xdWl0RW50ZXJwcmlzZUJyb3dzZXJcIjpcIlF1aXQgSlBcIn0nKSxUbj1KU09OLnBhcnNlKCd7XCJjb250ZXh0TWVudS5uZXdXaW5kb3dcIjpcIuyDiCDssL1cIixcImNvbnRleHRNZW51Lm5ld1BhZ2VcIjpcIuyDiCDtjpjsnbTsp4BcIixcImNvbnRleHRNZW51LnJlc3RvcmVcIjpcIuuniOyngOunieycvOuhnCDsoIDsnqXtlZwg67OA6rK9IOyCrO2VreycvOuhnCDrs7Xsm5BcIixcImNvbnRleHRNZW51LnN3aXRjaFdvcmtzcGFjZVwiOlwi7J6R7JeFIOqzteqwhCDsoITtmZhcIixcImNvbnRleHRNZW51LmFwcGVhcmFuY2VcIjpcIuuqqOyWkVwiLFwiY29udGV4dE1lbnUuc2F2ZVdvcmtzcGFjZVwiOlwi7J6R7JeFIOqzteqwhCDsoIDsnqVcIixcImNvbnRleHRNZW51LnNhdmVXb3Jrc3BhY2VBc1wiOlwi64uk66W4IOydtOumhOycvOuhnCDsnpHsl4Ug6rO16rCEIOyggOyepS4uLlwiLFwiY29udGV4dE1lbnUucmVuYW1lV29ya3NwYWNlXCI6XCLsnpHsl4Ug6rO16rCEIOydtOumhCDrsJTqvrjquLBcIixcImNvbnRleHRNZW51LmRlbGV0ZVdvcmtzcGFjZVwiOlwi7J6R7JeFIOqzteqwhCDsgq3soJxcIixcImNvbnRleHRNZW51LmRvd25sb2Fkc1wiOlwi64uk7Jq066Gc65OcXCIsXCJjb250ZXh0TWVudS5zYXZlUGFnZVwiOlwi7Y6Y7J207KeAIOyggOyepVwiLFwiY29udGV4dE1lbnUuc2F2ZVBhZ2VBc1wiOlwi64uk66W4IOydtOumhOycvOuhnCDtjpjsnbTsp4Ag7KCA7J6lLi4uXCIsXCJjb250ZXh0TWVudS5wcmludFwiOlwi7J247IeELi4uXCIsXCJjb250ZXh0TWVudS5wcmludFNjcmVlblwiOlwi7ZmU66m0IOyduOyHhFwiLFwiY29udGV4dE1lbnUuY2xvc2VXaW5kb3dcIjpcIuywvSDri6vquLBcIixcImNvbnRleHRNZW51Lm9wZW5TdG9yZWZyb250XCI6XCLrp6TsnqUg7Je06riwXCIsXCJjb250ZXh0TWVudS5xdWl0UGxhdGZvcm1cIjpcIu2UjOueq+2PvCDsooXro4xcIixcImNvbnRleHRNZW51Lm5ld1ZpZXdcIjpcIuyDiCDrt7BcIixcImNvbnRleHRNZW51Lm9wZW5WaWV3XCI6XCLquLDrs7gg7Ju5IOu4jOudvOyasOyggOuhnCDrt7Ag7Je06riwXCIsXCJjb250ZXh0TWVudS5vcGVuVmlld3NcIjpcIuq4sOuzuCDsm7kg67iM65287Jqw7KCA66GcIOu3sCDsl7TquLBcIixcImNvbnRleHRNZW51LnJlbG9hZFwiOlwiUmVsb2FkIEtSXCIsXCJjb250ZXh0TWVudS5yZWxvYWRWaWV3XCI6XCLrt7Ag64uk7IucIOuhnOuTnFwiLFwiY29udGV4dE1lbnUucmVsb2FkVmlld3NcIjpcIuu3sCDri6Tsi5wg66Gc65OcXCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVcIjpcIkR1cGxpY2F0ZSBLUlwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlVmlld1wiOlwi67ewIOuzteygnFwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlVmlld3NcIjpcIuu3sCDrs7XsoJxcIixcImNvbnRleHRNZW51LmFkZFZpZXdcIjpcIuyxhOuEkOyXkCDrt7Ag7LaU6rCAXCIsXCJjb250ZXh0TWVudS5hZGRWaWV3c1wiOlwi7LGE64SQ7JeQIOu3sCDstpTqsIBcIixcImNvbnRleHRNZW51LnJlbW92ZVZpZXdcIjpcIuyxhOuEkOyXkOyEnCDrt7Ag7KCc6rGwXCIsXCJjb250ZXh0TWVudS5yZW1vdmVWaWV3c1wiOlwi7LGE64SQ7JeQ7IScIOu3sCDsoJzqsbBcIixcImNvbnRleHRNZW51LmNsb3NlVmlld1wiOlwi67ewIOuLq+q4sFwiLFwiY29udGV4dE1lbnUuY2xvc2VWaWV3c1wiOlwi67ewIOuLq+q4sFwiLFwiY29udGV4dE1lbnUuY2xvc2VUYWJcIjpcIkNsb3NlIFRhYiBLUlwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlUGFnZVwiOlwi7Y6Y7J207KeAIOuzteygnFwiLFwiY29udGV4dE1lbnUuc3VibWVudS5wcmludFwiOlwi7J247IeEXCIsXCJjb250ZXh0TWVudS5zdWJtZW51LnByaW50QWxsXCI6XCLrqqjrkZAg7J247IeEXCIsXCJzYXZlTWVudS5zYXZlV29ya3NwYWNlQXNcIjpcIuuLpOuluCDsnbTrpoTsnLzroZwg7J6R7JeFIOqzteqwhCDsoIDsnqVcIixcInNhdmVNZW51LnNhdmVQYWdlQXNcIjpcIuuLpOuluCDsnbTrpoTsnLzroZwg7Y6Y7J207KeAIOyggOyepVwiLFwic2F2ZU1vZGFsLmVudGVyVmFsdWVcIjpcIlBsZWFzZSBlbnRlciBhIHZhbHVlIEtSXCIsXCJzYXZlTW9kYWwuYWxyZWFkeUV4aXN0c1wiOlwie3t0aXRsZX197J20KOqwgCkg7J2066+4IOyhtOyerO2VqeuLiOuLpC5cIixcInNhdmVNb2RhbC5wbGVhc2VFbnRlclZhbGlkTmFtZVwiOlwi7Jyg7Zqo7ZWcIOydtOumhOydhCDsnoXroKXtlZjsi63si5zsmKQuXCIsXCJzYXZlTW9kYWwucmVuYW1lUGFnZVwiOlwi7Y6Y7J207KeAIOydtOumhCDrsJTqvrjquLBcIixcInNhdmVNb2RhbC5jbG9zZVBhZ2VcIjpcIu2OmOydtOyngCDri6vquLBcIixcInNhdmVNb2RhbC5kaXNjYXJkQ2hhbmdlc1wiOlwi67OA6rK9IOyCrO2VrSDtj5DquLBcIixcInNhdmVNb2RhbC5kaXNjYXJkQWxsXCI6XCLrqqjrkZAg7Y+Q6riwXCIsXCJzYXZlTW9kYWwuc2F2ZUFsbFwiOlwi66qo65GQIOyggOyepVwiLFwic2F2ZU1vZGFsLnNhdmVQYWdlc0NvdW50XCI6XCLri6vquLAg7KCE7JeQIO2OmOydtOyngCh7e2NvdW50fX3qsJwp66W8IOyggOyepe2VmOyLnOqyoOyKteuLiOq5jD9cIixcImRlZmF1bHRQYWdlVGl0bGVcIjpcIlVudGl0bGVkIFBhZ2UgS1JcIixcImVudGVycHJpc2VEZWZhdWx0UGFnZVRpdGxlXCI6XCJVbnRpdGxlZCBTdXBlcnRhYiBLUlwiLFwiYWRkTmV3UGFnZVwiOlwiTmV3IFBhZ2UgS1JcIixcImFkZE5ld1RhYlwiOlwi7IOIIO2DrSDstpTqsIBcIixcImFkZE5ld1ZpZXdcIjpcIuyDiCDrt7BcIixcInJlc3RvcmVNb2RhbFwiOlwi66eI7KeA66eJ7Jy866GcIOyggOyepe2VnCDrs4Dqsr0g7IKs7ZWt7Jy866GcIOuzteybkO2VmOyLnOqyoOyKteuLiOq5jD9cIixcIm1vZGFsLmRpc2NhcmRXYXJuaW5nXCI6XCLsoIDsnqXtlZjsp4Ag7JWK7J2AIOuzgOqyvSDsgqztla3snYAg66qo65GQIO2PkOq4sOuQqeuLiOuLpFwiLFwibW9kYWwuZGlzY2FyZFBhZ2VXYXJuaW5nXCI6XCLsnbQg7Y6Y7J207KeA7J2YIOyggOyepe2VmOyngCDslYrsnYAg67OA6rK9IOyCrO2VreydgCDrqqjrkZAg7IaQ7Iuk65Cp64uI64ukLlwiLFwibW9kYWwuc2F2ZUNoYW5nZXNQcm9tcHRcIjpcIuuLq+q4sCDsoITsl5Ag67OA6rK9IOyCrO2VreydhCDsoIDsnqXtlZjsi5zqsqDsirXri4jquYw/XCIsXCJtb2RhbC5wYWdlQ2xvc2VcIjpcIlBhZ2UgQ2xvc2UgS1JcIixcInN3aXRjaFdvcmtzcGFjZU1vZGFsXCI6XCJ7e3dvcmtzcGFjZX19KOycvCnroZwg7KCE7ZmY7ZWY7Iuc6rKg7Iq164uI6rmMP1wiLFwic3dpdGNoV29ya3NwYWNlTW9kYWwud2FybmluZ1wiOlwi7KCA7J6l7ZWY7KeAIOyViuydgCDrs4Dqsr0g7IKs7ZWt7J2AIOuqqOuRkCDtj5DquLDrkKnri4jri6RcIixcImRlbGV0ZVdvcmtzcGFjZU1vZGFsXCI6XCLsnbQg7J6R7JeFIOqzteqwhOydhCDsmIHqtazsoIHsnLzroZwg7IKt7KCc7ZWY7Iuc6rKg7Iq164uI6rmMP1wiLFwicmVwbGFjZVdvcmtzcGFjZU1vZGFsLndhcm5pbmdcIjpcInt7d29ya3NwYWNlfX0o7J20KeudvOuKlCDsnbTrpoTsnZgg7J6R7JeFIOqzteqwhOydtCDsnbTrr7gg7KG07J6s7ZWp64uI64ukLiDqtZDssrTtlZjsi5zqsqDsirXri4jquYw/XCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwud2FybmluZy5ib2R5XCI6XCLqsJnsnYAg7J2066aE7J2YIOyekeyXhSDqs7XqsITsnbQg7J2066+4IOyhtOyerO2VqeuLiOuLpC4g6rWQ7LK07ZWY66m0IO2YhOyerCDrgrTsmqnsnYQg642u7Ja07JOw6rKMIOuQqeuLiOuLpC5cIixcInJlcGxhY2VXb3Jrc3BhY2VNb2RhbC5yZXBsYWNlXCI6XCLqtZDssrRcIixcImNsb3NlUGxhdGZvcm1cIjpcIu2UjOueq+2PvCDri6vquLBcIixcImNsb3NlUGxhdGZvcm0ud29ya3NwYWNlXCI6XCJ7e3dvcmtzcGFjZX19IO2UjOueq+2PvCDri6vquLBcIixcImNsb3NlUGxhdGZvcm0ud2FybmluZ1wiOlwi7ZSM656r7Y+87J2EIOuLq+ycvOuptCDsi6Ttlokg7KSR7J24IOuqqOuToCDsnpHsl4Ug6rO16rCELCDslbEg65iQ64qUIO2UhOuhnOyEuOyKpOqwgCDri6vtnpnri4jri6QuXCIsXCJiYWNrXCI6XCLrkqTroZwg6rCA6riwXCIsXCJmb3J3YXJkXCI6XCLslZ7snLzroZwg6rCA6riwXCIsXCJyZWxvYWRcIjpcIuyDiOuhnOqzoOy5qFwiLFwiZ3JlZW5cIjpcIuuFueyDiVwiLFwicHVycGxlXCI6XCLrs7Trnbzsg4lcIixcIm9yYW5nZVwiOlwi7Jik66CM7KeA7IOJXCIsXCJyZWRcIjpcIuu5qOqwhOyDiVwiLFwicGlua1wiOlwi7ZWR7YGs7IOJXCIsXCJ5ZWxsb3dcIjpcIuuFuOuegOyDiVwiLFwidGhlbWUubGlnaHRcIjpcIuuwneydgFwiLFwidGhlbWUuZGFya1wiOlwi7Ja065GQ7Jq0XCIsXCJ0aGVtZS5zeXN0ZW1cIjpcIk9TIOyEpOygleqzvCDrj5nquLDtmZRcIixcInRvb2xiYXIuaGlkZVRhYnNcIjpcIu2DrSDsiKjquLDquLBcIixcInRvb2xiYXIuc2hvd1RhYnNcIjpcIu2DrSDtkZzsi5xcIixcInRvb2xiYXIubG9ja1wiOlwi7J6g6riIXCIsXCJ0b29sYmFyLnVubG9ja1wiOlwi7J6g6riIIO2VtOygnFwiLFwidG9vbGJhci5jb2xvckxpbmtpbmdcIjpcIuyDieyDgSDsl7DqsrBcIixcInRvb2xiYXIuY2hhbmdlTGF5b3V0XCI6XCLroIjsnbTslYTsm4Mg67OA6rK9XCIsXCJ0b29sYmFyLnNhdmVNZW51XCI6XCLsoIDsnqUg66mU64m0XCIsXCJ0b29sYmFyLm1heGltaXplV2luZG93XCI6XCLssL0g7LWc64yA7ZmUXCIsXCJ0b29sYmFyLnJlc3RvcmVXaW5kb3dcIjpcIuywvSDrs7Xsm5BcIixcInRvb2xiYXIubWluaW1pemVXaW5kb3dcIjpcIuywvSDstZzshoztmZRcIixcImNoYW5nZUxheW91dC5mdWxsV2lkdGhcIjpcIuyghOyytCDrhIjruYRcIixcImNoYW5nZUxheW91dC5jb2x1bW5zXCI6XCLsl7RcIixcImNoYW5nZUxheW91dC5Sb3dzXCI6XCLtlolcIixcImNoYW5nZUxheW91dC5HcmlkXCI6XCLqt7jrpqzrk5xcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlU3dpdGNoZWRcIjpcIuyekeyXhSDqs7XqsIQg7KCE7ZmYXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmhpZGRlblwiOlwi7YOtIOyIqOq5gFwiLFwic3VjY2Vzc0luZGljYXRvci5zaG93blwiOlwi7YOtIO2RnOyLnFwiLFwic3VjY2Vzc0luZGljYXRvci5sb2NrZWRcIjpcIu2OmOydtOyngCDsnqDquIhcIixcInN1Y2Nlc3NJbmRpY2F0b3IudW5sb2NrZWRcIjpcIu2OmOydtOyngCDsnqDquIgg7ZW07KCc65CoXCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZVNhdmVkXCI6XCLsnpHsl4Ug6rO16rCEIOyggOyepeuQqFwiLFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VTYXZlZEFzXCI6XCLsnpHsl4Ug6rO16rCE7J20IHt7d29ya3NwYWNlfX0o7Jy8KeuhnCDsoIDsnqXrkKhcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlUmVuYW1lZFwiOlwi7J6R7JeFIOqzteqwhCDsnbTrpoQg67OA6rK965CoXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VTYXZlZFwiOlwi7Y6Y7J207KeAIOyggOyepeuQqFwiLFwic3VjY2Vzc0luZGljYXRvci5wYWdlSGFzQmVlblNhdmVkXCI6XCJcXFxcXCJ7e3RpdGxlfX1cXFxcXCIgaGFzIGJlZW4gc2F2ZWQuIEtSXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VDb3B5U2F2ZWRcIjpcIu2OmOydtOyngOqwgCB7e3RpdGxlfX0o7Jy8KeuhnCDsoIDsnqXrkKhcIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZVJlbmFtZWRcIjpcIu2OmOydtOyngCDsnbTrpoQg67OA6rK965CoXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmNvbnRleHRHcm91cEFwcGxpZWRcIjpcIuy7qO2FjeyKpO2KuCDqt7jro7kg7KCB7Jqp65CoXCIsXCJzdWNjZXNzSW5kaWNhdG9yLm5hbWVkQ29udGV4dEdyb3VwQXBwbGllZFwiOlwie3tjb2xvck5hbWV9fSDsu6jthY3siqTtirgg6re466O5IOyggeyaqeuQqFwiLFwic3VjY2Vzc0luZGljYXRvci52aWV3UmVtb3ZlZFwiOlwi7Luo7YWN7Iqk7Yq4IOq3uOujueyXkOyEnCDrt7Ag7KCc6rGw65CoXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnZpZXdzUmVtb3ZlZFwiOlwi7Luo7YWN7Iqk7Yq4IOq3uOujueyXkOyEnCDrt7Ag7KCc6rGw65CoXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmxheW91dEFwcGxpZWRcIjpcInt7bGF5b3V0TmFtZX19IOugiOydtOyVhOybgyDsoIHsmqnrkKhcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlRGVsZXRlZFwiOlwi7J6R7JeFIOqzteqwhCDsgq3soJzrkKhcIixcImVycm9ySW5kaWNhdG9yLnBhZ2VTYXZlRmFpbGVkXCI6XCLtjpjsnbTsp4Ag7KCA7J6lIOyLpO2MqFwiLFwiZXJyb3JJbmRpY2F0b3Iud29ya3NwYWNlU2F2ZUZhaWxlZFwiOlwi7J6R7JeFIOqzteqwhCDsoIDsnqUg7Iuk7YyoXCIsXCJlcnJvckluZGljYXRvci5mYWlsZWRUb0R1cGxpY2F0ZVBhZ2VcIjpcIu2OmOydtOyngCDrs7XsoJwg7Iuk7YyoXCIsXCJpbmZvSW5kaWNhdG9yLmNvbG9yTGlua0F0dGVtcHRcIjpcIuydtCDtg63snZgg7IOJ7IOBIOunge2BrOulvCDsi5zrj4Ttlojsp4Drp4wg7IKs7J207Yq4L+y9mO2FkOy4oCDshozsnKDsnpDqsIAg7JWE7KeBIO2ZnOyEse2ZlO2VmOyngCDslYrslZjsirXri4jri6QuXCIsXCJnbG9iYWwuY2FuY2VsXCI6XCLst6jshoxcIixcImdsb2JhbC5jb25maXJtXCI6XCLtmZXsnbhcIixcImdsb2JhbC5zYXZlXCI6XCLsoIDsnqVcIixcImdsb2JhbC5kZWxldGVcIjpcIkRlbGV0ZSBLUlwiLFwiYXBwUmVzdWx0cy5oZWFkZXJcIjpcIkZlYXR1cmVkIENvbnRlbnQgS1JcIixcInJlY2VudGx5VmlzaXRlZC5oZWFkZXJcIjpcIlJlY2VudGx5IHZpc2l0ZWQgS1JcIixcImxhbmRpbmdQYWdlLnN1YmhlYWRlclwiOlwiQXBwcyBhbmQgd2Vic2l0ZXMgc2VsZWN0ZWQgYnkgYW4gYWRtaW4gd2lsbCBzaG93IGhlcmUgS1JcIixcImFyaWEub3BlbkJyb3dzZXJcIjpcIuu4jOudvOyasOyggCDrqZTribQg7Je06riwXCIsXCJhcmlhLmJyb3dzZXJUYWJzXCI6XCLruIzrnbzsmrDsoIAg7YOtXCIsXCJhcmlhLnZpZXdUYWJcIjpcInt7dGl0bGV9feydmCDrt7Ag7YOtXCIsXCJhcmlhLmNsb3NlUGFnZVwiOlwie3t0aXRsZX197J2YIO2OmOydtOyngCDri6vquLAg7YOtXCIsXCJhcmlhLmNsb3NlVGFiXCI6XCLtg60ge3t0aXRsZX19IOuLq+q4sFwiLFwiYXJpYS50aXRsZVwiOlwi7KCc66qpXCIsXCJhcmlhLmNsb3NlQ29udGV4dEdyb3VwXCI6XCLsnbTsiqTsvIDsnbTtlITrpbwg7IKs7Jqp7ZWY7JesIOy7qO2FjeyKpO2KuCDqt7jro7kg7ISg7YOdIOuMgO2ZlOyDgeyekCDri6vquLBcIixcImFyaWEuY29sb3JMaW5raW5nXCI6XCLsg4nsg4Eg7Jew6rKwIO2RnOyLnCDrmJDripQg7Iio6riw6riwXCIsXCJhcmlhLmFwcGx5Q29sb3JMaW5raW5nXCI6XCLsg4nsg4Eg7Jew6rKw7J2EIOyggeyaqe2VmOugpOuptCDrt7Drpbwg7ISg7YOd7ZWY7Iut7Iuc7JikLlwiLFwiYXJpYS5hc3NpZ25Db2xvckxpbmtpbmdDdXJyZW50Vmlld1wiOlwie3tuYW1lfX0g7Luo7YWN7Iqk7Yq4IOq3uOujueyXkCDtlaDri7nrkJwg7ZiE7J6sIOu3sFwiLFwiYXJpYS5hc3NpZ25Db2xvckxpbmtpbmdDdXJyZW50Vmlld3NcIjpcInt7bmFtZX19IOy7qO2FjeyKpO2KuCDqt7jro7nsl5Ag7ZWg64u565CcIO2YhOyerCDrt7BcIixcImFyaWEuc2V0Q29sb3JMaW5raW5nQWN0aXZlVmlld1wiOlwi7Zmc7ISxIOu3sOulvCB7e25hbWV9fSDsu6jthY3siqTtirgg6re466O57Jy866GcIOyEpOyglVwiLFwiYXJpYS5zZXRDb2xvckxpbmtpbmdBY3RpdmVWaWV3c1wiOlwi7Zmc7ISxIOu3sOulvCB7e25hbWV9fSDsu6jthY3siqTtirgg6re466O57Jy866GcIOyEpOyglVwiLFwiYXJpYS5lc2NhcGVMYXlvdXREaWFsb2dcIjpcIuydtOyKpOy8gOydtO2UhOulvCDsgqzsmqntlZjsl6wg66CI7J207JWE7JuDIOuzgOqyvSDrjIDtmZTsg4HsnpAg64ur6riwXCIsXCJnbG9iYWwuc3VwZXJ0YWJcIjpcIlN1cGVydGFiIEtSXCIsXCJnbG9iYWwudGFiXCI6XCJUYWIgS1JcIixcImJvb2ttYXJrcy5lZGl0Qm9va21hcmtcIjpcIkVkaXQgQm9va21hcmsgS1JcIixcImJvb2ttYXJrcy5ib29rbWFya0FkZGVkXCI6XCJCb29rbWFyayBhZGRlZCBLUlwiLFwiYm9va21hcmtzLmRvbmVcIjpcIkRvbmUgS1JcIixcImJvb2ttYXJrcy5yZW1vdmVcIjpcIlJlbW92ZSBLUlwiLFwiYm9va21hcmtzLmJvb2ttYXJrc1BhbmVsXCI6XCJCb29rbWFya3MgUGFuZWwgS1JcIixcImJvb2ttYXJrcy5jbG9zZVBhbmVsXCI6XCJDbG9zZSBCb29rbWFya3MgUGFuZWwgS1JcIixcImJvb2ttYXJrcy5ib29rbWFya3NcIjpcIkJvb2ttYXJrcyBLUlwiLFwiYm9va21hcmtzLmFsbEJvb2ttYXJrc1wiOlwiQWxsIEJvb2ttYXJrcyBLUlwiLFwiYm9va21hcmtzLmZhdm9yaXRlc1wiOlwiRmF2b3JpdGVzIEtSXCIsXCJib29rbWFya3Muc2VhcmNoQm9va21hcmtzXCI6XCJTZWFyY2ggQm9va21hcmtzIEtSXCIsXCJib29rbWFya3MuY2xlYXJTZWFyY2hJbnB1dFwiOlwiQ2xlYXIgU2VhcmNoIElucHV0IEtSXCIsXCJib29rbWFya3MuY3JlYXRlRm9sZGVyXCI6XCJDcmVhdGUgTmV3IEZvbGRlciBLUlwiLFwiYm9va21hcmtzLmV4aXRGb2xkZXJcIjpcIkV4aXQgRm9sZGVyIEtSXCIsXCJib29rbWFya3MubmV3Rm9sZGVyXCI6XCJOZXcgRm9sZGVyIEtSXCIsXCJib29rbWFya3MubmFtZWRGb2xkZXJcIjpcInt7bmFtZX19IEZvbGRlciBLUlwiLFwiYm9va21hcmtzLmJvb2ttYXJrU2V0dGluZ3NcIjpcInt7bmFtZX19IEJvb2ttYXJrIFNldHRpbmdzIEtSXCIsXCJib29rbWFya3MuZm9sZGVyU2V0dGluZ3NcIjpcInt7bmFtZX19IEZvbGRlciBTZXR0aW5ncyBLUlwiLFwiYm9va21hcmtzLm5vUmVzdWx0c0ZvdW5kXCI6XCJObyByZXN1bHRzIGZvdW5kIEtSXCIsXCJib29rbWFya3Mubm9SZXN1bHRzRm91bmRTdWJ0ZXh0XCI6XCJUaGVyZSBhcmUgbm8gYm9va21hcmtzIHRoYXQgbWF0Y2ggeW91ciBzZWFyY2ggS1JcIixcImJvb2ttYXJrcy5ub3RoaW5nVG9TaG93XCI6XCJOb3RoaW5nIHRvIHNob3cgeWV0IEtSXCIsXCJib29rbWFya3Mubm90aGluZ1RvU2hvd1N1YnRleHRcIjpcIkFkZCBhIGJvb2ttYXJrIHRvIHRoaXMgZm9sZGVyIEtSXCIsXCJib29rbWFya3MucmVzdWx0c0ZvdW5kSW5cIjpcIlJlc3VsdHMgZm91bmQgaW4ge3tuYW1lfX0gS1JcIixcImJvb2ttYXJrcy5yZXN1bHRzSW5PdGhlckZvbGRlcnNcIjpcIlJlc3VsdHMgZm91bmQgaW4gb3RoZXIgZm9sZGVycyBLUlwiLFwiYm9va21hcmtzLmFsbFJlc3VsdHNGb3VuZEluXCI6XCJBbGwgcmVzdWx0cyBmb3VuZCBpbiBLUlwiLFwiYm9va21hcmtzLmVkaXROYW1lXCI6XCJFZGl0IE5hbWUgS1JcIixcImJvb2ttYXJrcy5tb3ZlXCI6XCJNb3ZlIEtSXCIsXCJib29rbWFya3MuYm9va21hcmtBZGRlZFRpdGxlXCI6XCJCb29rbWFyayBBZGRlZCBLUlwiLFwiYm9va21hcmtzLmJvb2ttYXJrQWRkZWRUb0ZvbGRlclwiOlwiWW91ciBib29rbWFyayB3YXMgYWRkZWQgdG8gXFxcXFwie3tmb2xkZXJOYW1lfX1cXFxcXCIgS1JcIixcImJvb2ttYXJrcy5ib29rbWFya0VkaXRlZFRpdGxlXCI6XCJCb29rbWFyayBFZGl0ZWQgS1JcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5zYXZlU3VwZXJ0YWJcIjpcIlNhdmUgU3VwZXJ0YWIgS1JcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5zYXZlU3VwZXJ0YWJBc1wiOlwiU2F2ZSBTdXBlcnRhYiBBcy4uLiBLUlwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LmR1cGxpY2F0ZVwiOlwiRHVwbGljYXRlIEtSXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuZGVsZXRlU3VwZXJ0YWJcIjpcIkRlbGV0ZSBTdXBlcnRhYiBLUlwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51Lm5ld1RhYlwiOlwiTmV3IFRhYiBLUlwiLFwiZW50ZXJwcmlzZVNhdmVNZW51LnNhdmVTdXBlcnRhYkFzXCI6XCJTYXZlIFN1cGVydGFiIEFzIEtSXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLnJlbmFtZVN1cGVydGFiXCI6XCJSZW5hbWUgS1JcIixcImVudGVycHJpc2VTYXZlTW9kYWwudW5zYXZlZENoYW5nZXNcIjpcIllvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcyBpbiB0aGlzIFRhYi4gS1JcIixcImVudGVycHJpc2VTYXZlTW9kYWwuY2xvc2VUYWJcIjpcIkNsb3NlIFRhYiBLUlwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC5jbG9zZVN1cGVydGFiXCI6XCJDbG9zZSBTdXBlcnRhYiBLUlwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC5zYXZlU3VwZXJ0YWJDb3VudFwiOlwiU2F2ZSB7e2NvdW50fX0gU3VwZXJ0YWJzIGJlZm9yZSBjbG9zaW5nPyBLUlwiLFwiZW50ZXJwcmlzZU1vZGFsLmRpc2NhcmRTdXBlcnRhYldhcm5pbmdcIjpcIkFueSB1bnNhdmVkIGNoYW5nZXMgdG8gdGhpcyBTdXBlcnRhYiB3aWxsIGJlIGxvc3QuIEtSXCIsXCJlbnRlcnByaXNlRGVsZXRlTW9kYWwuZGVsZXRlU3VwZXJ0YWJcIjpcIkRlbGV0ZSB0aGUgXFxcXFwie3t0aXRsZX19XFxcXFwiIFN1cGVydGFiPyBLUlwiLFwiZW50ZXJwcmlzZURlbGV0ZU1vZGFsLmRlbGV0ZVN1cGVydGFiV2FybmluZ1wiOlwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIFN1cGVydGFiPyBUaGlzIGFjdGlvbiBjYW5ub3QgYmUgdW5kb25lIGFuZCBpcyBwZXJtYW5lbnQuIEtSXCIsXCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYlNhdmVkXCI6XCJTdXBlcnRhYiBTYXZlZCBLUlwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJIYXNCZWVuU2F2ZWRcIjpcIlxcXFxcInt7dGl0bGV9fVxcXFxcIiBTdXBlcnRhYiBoYXMgYmVlbiBzYXZlZC4gS1JcIixcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiRGVsZXRlZFwiOlwiU3VwZXJ0YWIgRGVsZXRlZCBLUlwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJIYXNCZWVuRGVsZXRlZFwiOlwiXFxcXFwie3t0aXRsZX19XFxcXFwiIFN1cGVydGFiIGhhcyBiZWVuIGRlbGV0ZWQuIEtSXCIsXCJlbnRlcnByaXNlRXJyb3JJbmRpY2F0b3IuZmFpbGVkVG9EdXBsaWNhdGVUYWJcIjpcIkZhaWxlZCB0byBkdXBsaWNhdGUgVGFiIEtSXCIsXCJlbnRlcnByaXNlRXJyb3JJbmRpY2F0b3IuZmFpbGVkVG9EdXBsaWNhdGVTdXBlcnRhYlwiOlwiRmFpbGVkIHRvIGR1cGxpY2F0ZSBTdXBlcnRhYiBLUlwiLFwiZW50ZXJwcmlzZUNvbW1hbmRCYXIuc3dpdGNoVG9TdXBlcnRhYlwiOlwiU3dpdGNoIHRvIFN1cGVydGFiIEtSXCIsXCJlbnRlcnByaXNlQ29tbWFuZEJhci5nb1RvXCI6XCJHbyB0byB7e3R5cGV9fSBLUlwiLFwiY29udGV4dE1lbnUucXVpdEVudGVycHJpc2VCcm93c2VyXCI6XCJRdWl0IEtSXCJ9JyksRG49SlNPTi5wYXJzZSgne1wiY29udGV4dE1lbnUubmV3V2luZG93XCI6XCLQndC+0LLQvtC1INC+0LrQvdC+XCIsXCJjb250ZXh0TWVudS5uZXdQYWdlXCI6XCLQndC+0LLQsNGPINGB0YLRgNCw0L3QuNGG0LBcIixcImNvbnRleHRNZW51LnJlc3RvcmVcIjpcItCS0L7RgdGB0YLQsNC90L7QstC40YLRjCDQv9C+0YHQu9C10LTQvdC40LUg0YHQvtGF0YDQsNC90LXQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y9cIixcImNvbnRleHRNZW51LnN3aXRjaFdvcmtzcGFjZVwiOlwi0J/QtdGA0LXQutC70Y7Rh9C40YLRjCDRgNCw0LHQvtGH0YPRjiDQvtCx0LvQsNGB0YLRjFwiLFwiY29udGV4dE1lbnUuYXBwZWFyYW5jZVwiOlwi0JLQvdC10YjQvdC40Lkg0LLQuNC0XCIsXCJjb250ZXh0TWVudS5zYXZlV29ya3NwYWNlXCI6XCLQodC+0YXRgNCw0L3QuNGC0Ywg0YDQsNCx0L7Rh9GD0Y4g0L7QsdC70LDRgdGC0YxcIixcImNvbnRleHRNZW51LnNhdmVXb3Jrc3BhY2VBc1wiOlwi0KHQvtGF0YDQsNC90LjRgtGMINGA0LDQsdC+0YfRg9GOINC+0LHQu9Cw0YHRgtGMINC60LDQui4uLlwiLFwiY29udGV4dE1lbnUucmVuYW1lV29ya3NwYWNlXCI6XCLQn9C10YDQtdC40LzQtdC90L7QstCw0YLRjCDRgNCw0LHQvtGH0YPRjiDQvtCx0LvQsNGB0YLRjFwiLFwiY29udGV4dE1lbnUuZGVsZXRlV29ya3NwYWNlXCI6XCLQo9C00LDQu9C40YLRjCDRgNCw0LHQvtGH0YPRjiDQvtCx0LvQsNGB0YLRjFwiLFwiY29udGV4dE1lbnUuZG93bmxvYWRzXCI6XCLQl9Cw0LPRgNGD0LfQutC4XCIsXCJjb250ZXh0TWVudS5zYXZlUGFnZVwiOlwi0KHQvtGF0YDQsNC90LjRgtGMINGB0YLRgNCw0L3QuNGG0YNcIixcImNvbnRleHRNZW51LnNhdmVQYWdlQXNcIjpcItCh0L7RhdGA0LDQvdC40YLRjCDRgdGC0YDQsNC90LjRhtGDINC60LDQui4uLlwiLFwiY29udGV4dE1lbnUucHJpbnRcIjpcItCf0LXRh9Cw0YLRjC4uLlwiLFwiY29udGV4dE1lbnUucHJpbnRTY3JlZW5cIjpcItCg0LDRgdC/0LXRh9Cw0YLQsNGC0Ywg0Y3QutGA0LDQvVwiLFwiY29udGV4dE1lbnUuY2xvc2VXaW5kb3dcIjpcItCX0LDQutGA0YvRgtGMINC+0LrQvdC+XCIsXCJjb250ZXh0TWVudS5vcGVuU3RvcmVmcm9udFwiOlwi0J7RgtC60YDRi9GC0YwgU3RvcmVmcm9udFwiLFwiY29udGV4dE1lbnUucXVpdFBsYXRmb3JtXCI6XCLQktGL0LnRgtC4INC40Lcg0L/Qu9Cw0YLRhNC+0YDQvNGLXCIsXCJjb250ZXh0TWVudS5uZXdWaWV3XCI6XCLQndC+0LLQvtC1INC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC1XCIsXCJjb250ZXh0TWVudS5vcGVuVmlld1wiOlwi0J7RgtC60YDRi9GC0Ywg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LUg0YEg0L/QvtC80L7RidGM0Y4g0LLQtdCxLdCx0YDQsNGD0LfQtdGA0LAg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y5cIixcImNvbnRleHRNZW51Lm9wZW5WaWV3c1wiOlwi0J7RgtC60YDRi9GC0Ywg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40Y8g0YEg0L/QvtC80L7RidGM0Y4g0LLQtdCxLdCx0YDQsNGD0LfQtdGA0LAg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y5cIixcImNvbnRleHRNZW51LnJlbG9hZFwiOlwiUmVsb2FkIFJVXCIsXCJjb250ZXh0TWVudS5yZWxvYWRWaWV3XCI6XCLQn9C10YDQtdC30LDQs9GA0YPQt9C40YLRjCDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtVwiLFwiY29udGV4dE1lbnUucmVsb2FkVmlld3NcIjpcItCf0LXRgNC10LfQsNCz0YDRg9C30LjRgtGMINC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNGPXCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVcIjpcIkR1cGxpY2F0ZSBSVVwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlVmlld1wiOlwi0JTRg9Cx0LvQuNGA0L7QstCw0YLRjCDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtVwiLFwiY29udGV4dE1lbnUuZHVwbGljYXRlVmlld3NcIjpcItCU0YPQsdC70LjRgNC+0LLQsNGC0Ywg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40Y9cIixcImNvbnRleHRNZW51LmFkZFZpZXdcIjpcItCU0L7QsdCw0LLQuNGC0Ywg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LUg0L3QsCDQutCw0L3QsNC7XCIsXCJjb250ZXh0TWVudS5hZGRWaWV3c1wiOlwi0JTQvtCx0LDQstC40YLRjCDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjRjyDQvdCwINC60LDQvdCw0LtcIixcImNvbnRleHRNZW51LnJlbW92ZVZpZXdcIjpcItCj0LTQsNC70LjRgtGMINC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC1INC40Lcg0LrQsNC90LDQu9CwXCIsXCJjb250ZXh0TWVudS5yZW1vdmVWaWV3c1wiOlwi0KPQtNCw0LvQuNGC0Ywg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40Y8g0LjQtyDQutCw0L3QsNC70LBcIixcImNvbnRleHRNZW51LmNsb3NlVmlld1wiOlwi0JfQsNC60YDRi9GC0Ywg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LVcIixcImNvbnRleHRNZW51LmNsb3NlVmlld3NcIjpcItCX0LDQutGA0YvRgtGMINC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNGPXCIsXCJjb250ZXh0TWVudS5jbG9zZVRhYlwiOlwiQ2xvc2UgVGFiIFJVXCIsXCJjb250ZXh0TWVudS5kdXBsaWNhdGVQYWdlXCI6XCLQlNGD0LHQu9C40YDQvtCy0LDRgtGMINGB0YLRgNCw0L3QuNGG0YNcIixcImNvbnRleHRNZW51LnN1Ym1lbnUucHJpbnRcIjpcItCf0LXRh9Cw0YLQsNGC0YxcIixcImNvbnRleHRNZW51LnN1Ym1lbnUucHJpbnRBbGxcIjpcItCf0LXRh9Cw0YLQsNGC0Ywg0LLRgdC1XCIsXCJzYXZlTWVudS5zYXZlV29ya3NwYWNlQXNcIjpcItCh0L7RhdGA0LDQvdC40YLRjCDRgNCw0LHQvtGH0YPRjiDQvtCx0LvQsNGB0YLRjCDQutCw0LpcIixcInNhdmVNZW51LnNhdmVQYWdlQXNcIjpcItCh0L7RhdGA0LDQvdC40YLRjCDRgdGC0YDQsNC90LjRhtGDINC60LDQulwiLFwic2F2ZU1vZGFsLmVudGVyVmFsdWVcIjpcIlBsZWFzZSBlbnRlciBhIHZhbHVlIFJVXCIsXCJzYXZlTW9kYWwuYWxyZWFkeUV4aXN0c1wiOlwie3t0aXRsZX19INGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgi5cIixcInNhdmVNb2RhbC5wbGVhc2VFbnRlclZhbGlkTmFtZVwiOlwi0JLQstC10LTQuNGC0LUg0L/QvtC00YXQvtC00Y/RidC10LUg0LjQvNGPXCIsXCJzYXZlTW9kYWwucmVuYW1lUGFnZVwiOlwi0J/QtdGA0LXQuNC80LXQvdC+0LLQsNGC0Ywg0YHRgtGA0LDQvdC40YbRg1wiLFwic2F2ZU1vZGFsLmNsb3NlUGFnZVwiOlwi0JfQsNC60YDRi9GC0Ywg0YHRgtGA0LDQvdC40YbRg1wiLFwic2F2ZU1vZGFsLmRpc2NhcmRDaGFuZ2VzXCI6XCLQntGC0LzQtdC90LjRgtGMINC40LfQvNC10L3QtdC90LjRj1wiLFwic2F2ZU1vZGFsLmRpc2NhcmRBbGxcIjpcItCe0YLQvNC10L3QuNGC0Ywg0LLRgdC1XCIsXCJzYXZlTW9kYWwuc2F2ZUFsbFwiOlwi0KHQvtGF0YDQsNC90LjRgtGMINCy0YHQtVwiLFwic2F2ZU1vZGFsLnNhdmVQYWdlc0NvdW50XCI6XCLQodC+0YXRgNCw0L3QuNGC0YwgKHt7Y291bnR9fSkg0YHRgtGA0LDQvdC40YYg0L/QtdGA0LXQtCDQt9Cw0LrRgNGL0YLQuNC10Lw/XCIsXCJkZWZhdWx0UGFnZVRpdGxlXCI6XCJVbnRpdGxlZCBQYWdlIFJVXCIsXCJlbnRlcnByaXNlRGVmYXVsdFBhZ2VUaXRsZVwiOlwiVW50aXRsZWQgU3VwZXJ0YWIgUlVcIixcImFkZE5ld1BhZ2VcIjpcIk5ldyBQYWdlIFJVXCIsXCJhZGROZXdUYWJcIjpcItCU0L7QsdCw0LLQuNGC0Ywg0L3QvtCy0YPRjiDQstC60LvQsNC00LrRg1wiLFwiYWRkTmV3Vmlld1wiOlwi0J3QvtCy0L7QtSDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtVwiLFwicmVzdG9yZU1vZGFsXCI6XCLQktGLINGD0LLQtdGA0LXQvdGLLCDRh9GC0L4g0YXQvtGC0LjRgtC1INCy0L7RgdGB0YLQsNC90L7QstC40YLRjCDQv9C+0YHQu9C10LTQvdC40LUg0YHQvtGF0YDQsNC90LXQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8/XCIsXCJtb2RhbC5kaXNjYXJkV2FybmluZ1wiOlwi0JLRgdC1INC90LXRgdC+0YXRgNCw0L3QtdC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjyDQsdGD0LTRg9GCINC+0YLQvNC10L3QtdC90YtcIixcIm1vZGFsLmRpc2NhcmRQYWdlV2FybmluZ1wiOlwi0JLRgdC1INC90LXRgdC+0YXRgNCw0L3QtdC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjyDQvdCwINGN0YLQvtC5INGB0YLRgNCw0L3QuNGG0LUg0LHRg9C00YPRgiDQv9C+0YLQtdGA0Y/QvdGLLlwiLFwibW9kYWwuc2F2ZUNoYW5nZXNQcm9tcHRcIjpcItCh0L7RhdGA0LDQvdC40YLRjCDQuNC30LzQtdC90LXQvdC40Y8g0L/QtdGA0LXQtCDQt9Cw0LrRgNGL0YLQuNC10Lw/XCIsXCJtb2RhbC5wYWdlQ2xvc2VcIjpcIlBhZ2UgQ2xvc2UgUlVcIixcInN3aXRjaFdvcmtzcGFjZU1vZGFsXCI6XCLQktGLINGD0LLQtdGA0LXQvdGLLCDRh9GC0L4g0YXQvtGC0LjRgtC1INC/0LXRgNC10LnRgtC4INCyIHt7d29ya3NwYWNlfX0/XCIsXCJzd2l0Y2hXb3Jrc3BhY2VNb2RhbC53YXJuaW5nXCI6XCLQktGB0LUg0L3QtdGB0L7RhdGA0LDQvdC10L3QvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPINCx0YPQtNGD0YIg0L7RgtC80LXQvdC10L3Ri1wiLFwiZGVsZXRlV29ya3NwYWNlTW9kYWxcIjpcItCS0Ysg0YPQstC10YDQtdC90YssINGH0YLQviDRhdC+0YLQuNGC0LUg0L3QsNCy0YHQtdCz0LTQsCDRg9C00LDQu9C40YLRjCDRjdGC0YMg0YDQsNCx0L7Rh9GD0Y4g0L7QsdC70LDRgdGC0Yw/XCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwud2FybmluZ1wiOlwi0KDQsNCx0L7Rh9Cw0Y8g0L7QsdC70LDRgdGC0Ywg0YEg0LjQvNC10L3QtdC8IHt7d29ya3NwYWNlfX0g0YPQttC1INGB0YPRidC10YHRgtCy0YPQtdGCLiDQktGLINGF0L7RgtC40YLQtSDQt9Cw0LzQtdC90LjRgtGMINC10LU/XCIsXCJyZXBsYWNlV29ya3NwYWNlTW9kYWwud2FybmluZy5ib2R5XCI6XCLQoNCw0LHQvtGH0LDRjyDQvtCx0LvQsNGB0YLRjCDRgSDRgtCw0LrQuNC8INC20LUg0LjQvNC10L3QtdC8INGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgi4g0J/RgNC4INC10LUg0LfQsNC80LXQvdC1INGC0LXQutGD0YnQtdC1INGB0L7QtNC10YDQttC40LzQvtC1INCx0YPQtNC10YIg0L/QtdGA0LXQt9Cw0L/QuNGB0LDQvdC+LlwiLFwicmVwbGFjZVdvcmtzcGFjZU1vZGFsLnJlcGxhY2VcIjpcItCX0LDQvNC10L3QuNGC0YxcIixcImNsb3NlUGxhdGZvcm1cIjpcItCX0LDQutGA0YvRgtGMINC/0LvQsNGC0YTQvtGA0LzRg1wiLFwiY2xvc2VQbGF0Zm9ybS53b3Jrc3BhY2VcIjpcItCX0LDQutGA0YvRgtGMINC/0LvQsNGC0YTQvtGA0LzRgyB7e3dvcmtzcGFjZX19XCIsXCJjbG9zZVBsYXRmb3JtLndhcm5pbmdcIjpcItCX0LDQutGA0YvRgtC40LUg0L/Qu9Cw0YLRhNC+0YDQvNGLINC/0YDQuNCy0LXQtNC10YIg0Log0LfQsNC60YDRi9GC0LjRjiDQstGB0LXRhSDRgNCw0LHQvtGH0LjRhSDQvtCx0LvQsNGB0YLQtdC5LCDQv9GA0LjQu9C+0LbQtdC90LjQuSDQuCDQt9Cw0L/Rg9GJ0LXQvdC90YvRhSDQv9GA0L7RhtC10YHRgdC+0LIuXCIsXCJiYWNrXCI6XCLQndCw0LfQsNC0XCIsXCJmb3J3YXJkXCI6XCLQktC/0LXRgNC10LRcIixcInJlbG9hZFwiOlwi0J/QtdGA0LXQt9Cw0LPRgNGD0LfQuNGC0YzCoFwiLFwiZ3JlZW5cIjpcItCX0LXQu9C10L3Ri9C5XCIsXCJwdXJwbGVcIjpcItCk0LjQvtC70LXRgtC+0LLRi9C5XCIsXCJvcmFuZ2VcIjpcItCe0YDQsNC90LbQtdCy0YvQuVwiLFwicmVkXCI6XCLQmtGA0LDRgdC90YvQuVwiLFwicGlua1wiOlwi0KDQvtC30L7QstGL0LlcIixcInllbGxvd1wiOlwi0JbQtdC70YLRi9C5XCIsXCJ0aGVtZS5saWdodFwiOlwi0KHQstC10YLQu9GL0LlcIixcInRoZW1lLmRhcmtcIjpcItCi0LXQvNC90YvQuVwiLFwidGhlbWUuc3lzdGVtXCI6XCLQodC40L3RhdGA0L7QvdC40LfQuNGA0L7QstCw0YLRjCDRgSDQvdCw0YHRgtGA0L7QudC60LDQvNC4INCe0KFcIixcInRvb2xiYXIuaGlkZVRhYnNcIjpcItCh0LrRgNGL0YLRjCDQstC60LvQsNC00LrQuFwiLFwidG9vbGJhci5zaG93VGFic1wiOlwi0J/QvtC60LDQt9Cw0YLRjCDQstC60LvQsNC00LrQuFwiLFwidG9vbGJhci5sb2NrXCI6XCLQl9Cw0LHQu9C+0LrQuNGA0L7QstCw0YLRjFwiLFwidG9vbGJhci51bmxvY2tcIjpcItCg0LDQt9Cx0LvQvtC60LjRgNC+0LLQsNGC0YxcIixcInRvb2xiYXIuY29sb3JMaW5raW5nXCI6XCLQn9GA0LjQstGP0LfQutCwINC6INGG0LLQtdGC0YNcIixcInRvb2xiYXIuY2hhbmdlTGF5b3V0XCI6XCLQmNC30LzQtdC90LjRgtGMINC80LDQutC10YJcIixcInRvb2xiYXIuc2F2ZU1lbnVcIjpcItCc0LXQvdGOINGB0L7RhdGA0LDQvdC10L3QuNGPXCIsXCJ0b29sYmFyLm1heGltaXplV2luZG93XCI6XCLQo9Cy0LXQu9C40YfQuNGC0Ywg0L7QutC90L5cIixcInRvb2xiYXIucmVzdG9yZVdpbmRvd1wiOlwi0JLQvtGB0YHRgtCw0L3QvtCy0LjRgtGMINC+0LrQvdC+XCIsXCJ0b29sYmFyLm1pbmltaXplV2luZG93XCI6XCLQodCy0LXRgNC90YPRgtGMINC+0LrQvdC+XCIsXCJjaGFuZ2VMYXlvdXQuZnVsbFdpZHRoXCI6XCLQn9C+0LvQvdCw0Y8g0YjQuNGA0LjQvdCwXCIsXCJjaGFuZ2VMYXlvdXQuY29sdW1uc1wiOlwi0KHRgtC+0LvQsdGG0YtcIixcImNoYW5nZUxheW91dC5Sb3dzXCI6XCLQodGC0YDQvtC60LhcIixcImNoYW5nZUxheW91dC5HcmlkXCI6XCLQodC10YLQutCwXCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZVN3aXRjaGVkXCI6XCLQoNCw0LHQvtGH0LDRjyDQvtCx0LvQsNGB0YLRjCDQv9C10YDQtdC60LvRjtGH0LXQvdCwXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmhpZGRlblwiOlwi0JLQutC70LDQtNC60Lgg0YHQutGA0YvRgtGLXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnNob3duXCI6XCLQktC60LvQsNC00LrQuCDQv9C+0LrQsNC30LDQvdGLXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmxvY2tlZFwiOlwi0KHRgtGA0LDQvdC40YbQsCDQt9Cw0LHQu9C+0LrQuNGA0L7QstCw0L3QsFwiLFwic3VjY2Vzc0luZGljYXRvci51bmxvY2tlZFwiOlwi0KHRgtGA0LDQvdC40YbQsCDRgNCw0LfQsdC70L7QutC40YDQvtCy0LDQvdCwXCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZVNhdmVkXCI6XCLQoNCw0LHQvtGH0LDRjyDQvtCx0LvQsNGB0YLRjCDRgdC+0YXRgNCw0L3QtdC90LBcIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlU2F2ZWRBc1wiOlwi0KDQsNCx0L7Rh9Cw0Y8g0L7QsdC70LDRgdGC0Ywg0YHQvtGF0YDQsNC90LXQvdCwINC60LDQuiB7e3dvcmtzcGFjZX19XCIsXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZVJlbmFtZWRcIjpcItCg0LDQsdC+0YfQsNGPINC+0LHQu9Cw0YHRgtGMINC/0LXRgNC10LjQvNC10L3QvtCy0LDQvdCwXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VTYXZlZFwiOlwi0KHRgtGA0LDQvdC40YbQsCDRgdC+0YXRgNCw0L3QtdC90LBcIixcInN1Y2Nlc3NJbmRpY2F0b3IucGFnZUhhc0JlZW5TYXZlZFwiOlwiXFxcXFwie3t0aXRsZX19XFxcXFwiIGhhcyBiZWVuIHNhdmVkLiBSVVwiLFwic3VjY2Vzc0luZGljYXRvci5wYWdlQ29weVNhdmVkXCI6XCLQodGC0YDQsNC90LjRhtCwINGB0L7RhdGA0LDQvdC10L3QsCDQutCw0Loge3t0aXRsZX19XCIsXCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VSZW5hbWVkXCI6XCLQodGC0YDQsNC90LjRhtCwINC/0LXRgNC10LjQvNC10L3QvtCy0LDQvdCwXCIsXCJzdWNjZXNzSW5kaWNhdG9yLmNvbnRleHRHcm91cEFwcGxpZWRcIjpcItCa0L7QvdGC0LXQutGB0YLQvdCw0Y8g0LPRgNGD0L/Qv9CwINC/0YDQuNC80LXQvdC10L3QsFwiLFwic3VjY2Vzc0luZGljYXRvci5uYW1lZENvbnRleHRHcm91cEFwcGxpZWRcIjpcItCa0L7QvdGC0LXQutGB0YLQvdCw0Y8g0LPRgNGD0L/Qv9CwIHt7Y29sb3JOYW1lfX0g0L/RgNC40LzQtdC90LXQvdCwXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnZpZXdSZW1vdmVkXCI6XCLQn9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtSDRg9C00LDQu9C10L3QviDQuNC3INC60L7QvdGC0LXQutGB0YLQvdC+0Lkg0LPRgNGD0L/Qv9GLXCIsXCJzdWNjZXNzSW5kaWNhdG9yLnZpZXdzUmVtb3ZlZFwiOlwi0J/RgNC10LTRgdGC0LDQstC70LXQvdC40Y8g0YPQtNCw0LvQtdC90Ysg0LjQtyDQutC+0L3RgtC10LrRgdGC0L3QvtC5INCz0YDRg9C/0L/Ri1wiLFwic3VjY2Vzc0luZGljYXRvci5sYXlvdXRBcHBsaWVkXCI6XCLQnNCw0LrQtdGCIHt7bGF5b3V0TmFtZX19INC/0YDQuNC80LXQvdC10L1cIixcInN1Y2Nlc3NJbmRpY2F0b3Iud29ya3NwYWNlRGVsZXRlZFwiOlwi0KDQsNCx0L7Rh9Cw0Y8g0L7QsdC70LDRgdGC0Ywg0YPQtNCw0LvQtdC90LBcIixcImVycm9ySW5kaWNhdG9yLnBhZ2VTYXZlRmFpbGVkXCI6XCLQndC1INGD0LTQsNC70L7RgdGMINGB0L7RhdGA0LDQvdC40YLRjCDRgdGC0YDQsNC90LjRhtGDXCIsXCJlcnJvckluZGljYXRvci53b3Jrc3BhY2VTYXZlRmFpbGVkXCI6XCLQndC1INGD0LTQsNC70L7RgdGMINGB0L7RhdGA0LDQvdC40YLRjCDRgNCw0LHQvtGH0YPRjiDQvtCx0LvQsNGB0YLRjFwiLFwiZXJyb3JJbmRpY2F0b3IuZmFpbGVkVG9EdXBsaWNhdGVQYWdlXCI6XCLQndC1INGD0LTQsNC70L7RgdGMINC/0YDQvtC00YPQsdC70LjRgNC+0LLQsNGC0Ywg0YHRgtGA0LDQvdC40YbRg1wiLFwiaW5mb0luZGljYXRvci5jb2xvckxpbmtBdHRlbXB0XCI6XCLQnNGLINC/0L7Qv9GL0YLQsNC70LjRgdGMINC/0YDQuNCy0Y/Qt9Cw0YLRjCDRhtCy0LXRgiDQuiDRjdGC0L7QuSDQstC60LvQsNC00LrQtSwg0L3QviDQstC70LDQtNC10LvQtdGGINGB0LDQudGC0LAv0LrQvtC90YLQtdC90YLQsCDQtdGJ0LUg0L3QtSDQstC60LvRjtGH0LjQuyDRjdGC0YMg0LLQvtC30LzQvtC20L3QvtGB0YLRjFwiLFwiZ2xvYmFsLmNhbmNlbFwiOlwi0J7RgtC80LXQvdC40YLRjFwiLFwiZ2xvYmFsLmNvbmZpcm1cIjpcItCf0L7QtNGC0LLQtdGA0LTQuNGC0YxcIixcImdsb2JhbC5zYXZlXCI6XCLQodC+0YXRgNCw0L3QuNGC0YxcIixcImdsb2JhbC5kZWxldGVcIjpcIkRlbGV0ZSBSVVwiLFwiYXBwUmVzdWx0cy5oZWFkZXJcIjpcIkZlYXR1cmVkIENvbnRlbnQgUlVcIixcInJlY2VudGx5VmlzaXRlZC5oZWFkZXJcIjpcIlJlY2VudGx5IHZpc2l0ZWQgUlVcIixcImxhbmRpbmdQYWdlLnN1YmhlYWRlclwiOlwiQXBwcyBhbmQgd2Vic2l0ZXMgc2VsZWN0ZWQgYnkgYW4gYWRtaW4gd2lsbCBzaG93IGhlcmUgUlVcIixcImFyaWEub3BlbkJyb3dzZXJcIjpcItCe0YLQutGA0YvRgtGMINC80LXQvdGOINCx0YDQsNGD0LfQtdGA0LBcIixcImFyaWEuYnJvd3NlclRhYnNcIjpcItCS0LrQu9Cw0LTQutC4INCx0YDQsNGD0LfQtdGA0LBcIixcImFyaWEudmlld1RhYlwiOlwi0JLQutC70LDQtNC60LAg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40Y8ge3t0aXRsZX19XCIsXCJhcmlhLmNsb3NlUGFnZVwiOlwi0JrQvdC+0L/QutCwIMKr0JfQsNC60YDRi9GC0YzCuyDQvdCwINCy0LrQu9Cw0LTQutC1INC00LvRjyDRgdGC0YDQsNC90LjRhtGLIHt7dGl0bGV9fVwiLFwiYXJpYS5jbG9zZVRhYlwiOlwi0JfQsNC60YDRi9GC0Ywg0LLQutC70LDQtNC60YMge3t0aXRsZX19XCIsXCJhcmlhLnRpdGxlXCI6XCLQndCw0LfQstCw0L3QuNC1XCIsXCJhcmlhLmNsb3NlQ29udGV4dEdyb3VwXCI6XCLQp9GC0L7QsdGLINC30LDQutGA0YvRgtGMINC00LjQsNC70L7QsyDQstGL0LHQvtGA0LAg0LrQvtC90YLQtdC60YHRgtC90L7QuSDQs9GA0YPQv9C/0YssINC40YHQv9C+0LvRjNC30YPQudGC0LUgZXNjYXBlXCIsXCJhcmlhLmNvbG9yTGlua2luZ1wiOlwi0J/QvtC60LDQt9Cw0YLRjCDQuNC70Lgg0YHQutGA0YvRgtGMINC/0YDQuNCy0Y/Qt9C60YMg0Log0YbQstC10YLRg1wiLFwiYXJpYS5hcHBseUNvbG9yTGlua2luZ1wiOlwi0JLRi9Cx0LXRgNC40YLQtSDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtSwg0YfRgtC+0LHRiyDQv9GA0LjQvNC10L3QuNGC0Ywg0L/RgNC40LLRj9C30LrRgyDQuiDRhtCy0LXRgtGDXCIsXCJhcmlhLmFzc2lnbkNvbG9yTGlua2luZ0N1cnJlbnRWaWV3XCI6XCLQotC10LrRg9GJ0LXQtSDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtSwg0L3QsNC30L3QsNGH0LXQvdC90L7QtSDQutC+0L3RgtC10LrRgdGC0L3QvtC5INCz0YDRg9C/0L/QtSB7e25hbWV9fVwiLFwiYXJpYS5hc3NpZ25Db2xvckxpbmtpbmdDdXJyZW50Vmlld3NcIjpcItCi0LXQutGD0YnQuNC1INC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNGPLCDQvdCw0LfQvdCw0YfQtdC90L3Ri9C1INC60L7QvdGC0LXQutGB0YLQvdC+0Lkg0LPRgNGD0L/Qv9C1IHt7bmFtZX19XCIsXCJhcmlhLnNldENvbG9yTGlua2luZ0FjdGl2ZVZpZXdcIjpcItCj0YHRgtCw0L3QvtCy0LjRgtGMINCw0LrRgtC40LLQvdC+0LUg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LUg0LIg0LrQvtC90YLQtdC60YHRgtC90YPRjiDQs9GA0YPQv9C/0YMge3tuYW1lfX1cIixcImFyaWEuc2V0Q29sb3JMaW5raW5nQWN0aXZlVmlld3NcIjpcItCj0YHRgtCw0L3QvtCy0LjRgtGMINCw0LrRgtC40LLQvdGL0LUg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40Y8g0LIg0LrQvtC90YLQtdC60YHRgtC90YPRjiDQs9GA0YPQv9C/0YMge3tuYW1lfX1cIixcImFyaWEuZXNjYXBlTGF5b3V0RGlhbG9nXCI6XCLQp9GC0L7QsdGLINC30LDQutGA0YvRgtGMINC00LjQsNC70L7QsyDQuNC30LzQtdC90LXQvdC40Y8g0LzQsNC60LXRgtCwLCDQuNGB0L/QvtC70YzQt9GD0LnRgtC1IGVzY2FwZVwiLFwiZ2xvYmFsLnN1cGVydGFiXCI6XCJTdXBlcnRhYiBSVVwiLFwiZ2xvYmFsLnRhYlwiOlwiVGFiIFJVXCIsXCJib29rbWFya3MuZWRpdEJvb2ttYXJrXCI6XCJFZGl0IEJvb2ttYXJrIFJVXCIsXCJib29rbWFya3MuYm9va21hcmtBZGRlZFwiOlwiQm9va21hcmsgYWRkZWQgUlVcIixcImJvb2ttYXJrcy5kb25lXCI6XCJEb25lIFJVXCIsXCJib29rbWFya3MucmVtb3ZlXCI6XCJSZW1vdmUgUlVcIixcImJvb2ttYXJrcy5ib29rbWFya3NQYW5lbFwiOlwiQm9va21hcmtzIFBhbmVsIFJVXCIsXCJib29rbWFya3MuY2xvc2VQYW5lbFwiOlwiQ2xvc2UgQm9va21hcmtzIFBhbmVsIFJVXCIsXCJib29rbWFya3MuYm9va21hcmtzXCI6XCJCb29rbWFya3MgUlVcIixcImJvb2ttYXJrcy5hbGxCb29rbWFya3NcIjpcIkFsbCBCb29rbWFya3MgUlVcIixcImJvb2ttYXJrcy5mYXZvcml0ZXNcIjpcIkZhdm9yaXRlcyBSVVwiLFwiYm9va21hcmtzLnNlYXJjaEJvb2ttYXJrc1wiOlwiU2VhcmNoIEJvb2ttYXJrcyBSVVwiLFwiYm9va21hcmtzLmNsZWFyU2VhcmNoSW5wdXRcIjpcIkNsZWFyIFNlYXJjaCBJbnB1dCBSVVwiLFwiYm9va21hcmtzLmNyZWF0ZUZvbGRlclwiOlwiQ3JlYXRlIE5ldyBGb2xkZXIgUlVcIixcImJvb2ttYXJrcy5leGl0Rm9sZGVyXCI6XCJFeGl0IEZvbGRlciBSVVwiLFwiYm9va21hcmtzLm5ld0ZvbGRlclwiOlwiTmV3IEZvbGRlciBSVVwiLFwiYm9va21hcmtzLm5hbWVkRm9sZGVyXCI6XCJ7e25hbWV9fSBGb2xkZXIgUlVcIixcImJvb2ttYXJrcy5ib29rbWFya1NldHRpbmdzXCI6XCJ7e25hbWV9fSBCb29rbWFyayBTZXR0aW5ncyBSVVwiLFwiYm9va21hcmtzLmZvbGRlclNldHRpbmdzXCI6XCJ7e25hbWV9fSBGb2xkZXIgU2V0dGluZ3MgUlVcIixcImJvb2ttYXJrcy5ub1Jlc3VsdHNGb3VuZFwiOlwiTm8gcmVzdWx0cyBmb3VuZCBSVVwiLFwiYm9va21hcmtzLm5vUmVzdWx0c0ZvdW5kU3VidGV4dFwiOlwiVGhlcmUgYXJlIG5vIGJvb2ttYXJrcyB0aGF0IG1hdGNoIHlvdXIgc2VhcmNoIFJVXCIsXCJib29rbWFya3Mubm90aGluZ1RvU2hvd1wiOlwiTm90aGluZyB0byBzaG93IHlldCBSVVwiLFwiYm9va21hcmtzLm5vdGhpbmdUb1Nob3dTdWJ0ZXh0XCI6XCJBZGQgYSBib29rbWFyayB0byB0aGlzIGZvbGRlciBSVVwiLFwiYm9va21hcmtzLnJlc3VsdHNGb3VuZEluXCI6XCJSZXN1bHRzIGZvdW5kIGluIHt7bmFtZX19IFJVXCIsXCJib29rbWFya3MucmVzdWx0c0luT3RoZXJGb2xkZXJzXCI6XCJSZXN1bHRzIGZvdW5kIGluIG90aGVyIGZvbGRlcnMgUlVcIixcImJvb2ttYXJrcy5hbGxSZXN1bHRzRm91bmRJblwiOlwiQWxsIHJlc3VsdHMgZm91bmQgaW4gUlVcIixcImJvb2ttYXJrcy5lZGl0TmFtZVwiOlwiRWRpdCBOYW1lIFJVXCIsXCJib29rbWFya3MubW92ZVwiOlwiTW92ZSBSVVwiLFwiYm9va21hcmtzLmJvb2ttYXJrQWRkZWRUaXRsZVwiOlwiQm9va21hcmsgQWRkZWQgUlVcIixcImJvb2ttYXJrcy5ib29rbWFya0FkZGVkVG9Gb2xkZXJcIjpcIllvdXIgYm9va21hcmsgd2FzIGFkZGVkIHRvIFxcXFxcInt7Zm9sZGVyTmFtZX19XFxcXFwiIFJVXCIsXCJib29rbWFya3MuYm9va21hcmtFZGl0ZWRUaXRsZVwiOlwiQm9va21hcmsgRWRpdGVkIFJVXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuc2F2ZVN1cGVydGFiXCI6XCJTYXZlIFN1cGVydGFiIFJVXCIsXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuc2F2ZVN1cGVydGFiQXNcIjpcIlNhdmUgU3VwZXJ0YWIgQXMuLi4gUlVcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5kdXBsaWNhdGVcIjpcIkR1cGxpY2F0ZSBSVVwiLFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LmRlbGV0ZVN1cGVydGFiXCI6XCJEZWxldGUgU3VwZXJ0YWIgUlVcIixcImVudGVycHJpc2VDb250ZXh0TWVudS5uZXdUYWJcIjpcIk5ldyBUYWIgUlVcIixcImVudGVycHJpc2VTYXZlTWVudS5zYXZlU3VwZXJ0YWJBc1wiOlwiU2F2ZSBTdXBlcnRhYiBBcyBSVVwiLFwiZW50ZXJwcmlzZVNhdmVNb2RhbC5yZW5hbWVTdXBlcnRhYlwiOlwiUmVuYW1lIFJVXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLnVuc2F2ZWRDaGFuZ2VzXCI6XCJZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMgaW4gdGhpcyBUYWIuIFJVXCIsXCJlbnRlcnByaXNlU2F2ZU1vZGFsLmNsb3NlVGFiXCI6XCJDbG9zZSBUYWIgUlVcIixcImVudGVycHJpc2VTYXZlTW9kYWwuY2xvc2VTdXBlcnRhYlwiOlwiQ2xvc2UgU3VwZXJ0YWIgUlVcIixcImVudGVycHJpc2VTYXZlTW9kYWwuc2F2ZVN1cGVydGFiQ291bnRcIjpcIlNhdmUge3tjb3VudH19IFN1cGVydGFicyBiZWZvcmUgY2xvc2luZz8gUlVcIixcImVudGVycHJpc2VNb2RhbC5kaXNjYXJkU3VwZXJ0YWJXYXJuaW5nXCI6XCJBbnkgdW5zYXZlZCBjaGFuZ2VzIHRvIHRoaXMgU3VwZXJ0YWIgd2lsbCBiZSBsb3N0LiBSVVwiLFwiZW50ZXJwcmlzZURlbGV0ZU1vZGFsLmRlbGV0ZVN1cGVydGFiXCI6XCJEZWxldGUgdGhlIFxcXFxcInt7dGl0bGV9fVxcXFxcIiBTdXBlcnRhYj8gUlVcIixcImVudGVycHJpc2VEZWxldGVNb2RhbC5kZWxldGVTdXBlcnRhYldhcm5pbmdcIjpcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBTdXBlcnRhYj8gVGhpcyBhY3Rpb24gY2Fubm90IGJlIHVuZG9uZSBhbmQgaXMgcGVybWFuZW50LiBSVVwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJTYXZlZFwiOlwiU3VwZXJ0YWIgU2F2ZWQgUlVcIixcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiSGFzQmVlblNhdmVkXCI6XCJcXFxcXCJ7e3RpdGxlfX1cXFxcXCIgU3VwZXJ0YWIgaGFzIGJlZW4gc2F2ZWQuUlVcIixcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiRGVsZXRlZFwiOlwiU3VwZXJ0YWIgRGVsZXRlZCBSVVwiLFwiZW50ZXJwcmlzZVN1Y2Nlc3NJbmRpY2F0b3Iuc3VwZXJ0YWJIYXNCZWVuRGVsZXRlZFwiOlwiXFxcXFwie3t0aXRsZX19XFxcXFwiIFN1cGVydGFiIGhhcyBiZWVuIGRlbGV0ZWQuIFJVXCIsXCJlbnRlcnByaXNlRXJyb3JJbmRpY2F0b3IuZmFpbGVkVG9EdXBsaWNhdGVUYWJcIjpcIkZhaWxlZCB0byBkdXBsaWNhdGUgVGFiIFJVXCIsXCJlbnRlcnByaXNlRXJyb3JJbmRpY2F0b3IuZmFpbGVkVG9EdXBsaWNhdGVTdXBlcnRhYlwiOlwiRmFpbGVkIHRvIGR1cGxpY2F0ZSBTdXBlcnRhYiBSVVwiLFwiZW50ZXJwcmlzZUNvbW1hbmRCYXIuc3dpdGNoVG9TdXBlcnRhYlwiOlwiU3dpdGNoIHRvIFN1cGVydGFiIFJVXCIsXCJlbnRlcnByaXNlQ29tbWFuZEJhci5nb1RvXCI6XCJHbyB0byB7e3R5cGV9fSBSVVwiLFwiY29udGV4dE1lbnUucXVpdEVudGVycHJpc2VCcm93c2VyXCI6XCJRdWl0IFJVXCJ9Jyk7Y29uc3QgQm49am4udCxabj1hc3luYyBlPT57Y29uc3QgdD1hd2FpdCB0dChlKTtyZXR1cm4gYXdhaXQgdC5kaXNwYXRjaChpdC5HZXRQYWdlcyl9LCRuPWFzeW5jIGU9Pihhd2FpdCB0dChlLmlkZW50aXR5KSkuZGlzcGF0Y2goaXQuVXBkYXRlUGFnZUZvcldpbmRvdyxlKTtsZXQgTm49ITE7ZnVuY3Rpb24gRm4oZSl7cmV0dXJuIGUubWFwKChlPT57Y29uc3QgdD0obj1lLnZpZXdPcHRpb25zLG4ubmFtZXx8PWAke0V0fSR7SGUoKX1gLG4pO3ZhciBuO3JldHVybnsuLi5lLHZpZXdPcHRpb25zOnsuLi50LHV1aWQ6bmUudXVpZH19fSkpfWFzeW5jIGZ1bmN0aW9uIFduKGUpe2Zvcihjb25zdCB0IG9mIGUpdC5wYW5lbHMmJmF3YWl0IHpuKHQucGFuZWxzKX1jb25zdCBVbj1lPT5udWxsIT09ZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwibWVzc2FnZVwiaW4gZSYmXCJzdHJpbmdcIj09dHlwZW9mIGUubWVzc2FnZSYmL0VSUl8oW0EtWl0rXyopKy8udGVzdChlLm1lc3NhZ2UpO2FzeW5jIGZ1bmN0aW9uIHpuKGUpe2NvbnN0IHQ9ZS5tYXAoKGU9PmZpbi5QbGF0Zm9ybS5nZXRDdXJyZW50U3luYygpLmNyZWF0ZVZpZXcoZS52aWV3T3B0aW9ucyxmaW4ubWUuaWRlbnRpdHkpLmNhdGNoKChlPT57aWYoIVVuKGUpKXRocm93IGU7Y29uc29sZS5lcnJvcihlKX0pKSkpO3JldHVybiBhd2FpdCBQcm9taXNlLmFsbCh0KX1jb25zdCBHbj0oZSx0KT0+IXQuZmluZCgodD0+dD09PWUpKSxLbj0oZSx0KT0+YCR7ZX0gKCR7dH0pYCxxbj0oZSx0KT0+e2lmKEduKGUsdCkpcmV0dXJuIGU7bGV0IG49MTtjb25zdCByPWUucmVwbGFjZSgvICpcXChcXGQrXFwpJC8sXCJcIik7Zm9yKDshR24oS24ocixuKSx0KTspbis9MTtyZXR1cm4gS24ocixuKX0sWW49YXN5bmMoKT0+e2NvbnN0IGU9YXdhaXQgaWUoKTtyZXR1cm4oYXdhaXQgUHJvbWlzZS5hbGwoZS5tYXAoKGFzeW5jIGU9Pnt0cnl7cmV0dXJuIFpuKGUuaWRlbnRpdHkpfWNhdGNoKHQpe0pTT04uc3RyaW5naWZ5KGUuaWRlbnRpdHkpO2NvbnN0IG49YXdhaXQgZS5nZXRPcHRpb25zKCk7cmV0dXJuIG4ud29ya3NwYWNlUGxhdGZvcm0/LnBhZ2VzfHxbXX19KSkpKS5yZWR1Y2UoKChlLHQpPT5lLmNvbmNhdCh0KSksW10pfSxKbj1hc3luYygpPT4oYXdhaXQgcWUobmUpKS5kaXNwYXRjaCh6ZS5HZXRTYXZlZFBhZ2VzLHZvaWQgMCksWG49YXN5bmMgZT0+KGF3YWl0IHFlKG5lKSkuZGlzcGF0Y2goemUuR2V0U2F2ZWRQYWdlLGUpLFFuPWFzeW5jKGUsdCk9Pntjb25zdCBuPWF3YWl0KGFzeW5jIGU9Pihhd2FpdCBZbigpKS5maW5kKCh0PT50LnBhZ2VJZD09PWUpKSkoZSk7cmV0dXJuIW58fG4udGl0bGU9PT10LnRpdGxlJiZlPT09dC5wYWdlSWR8fGF3YWl0ICRuKHtpZGVudGl0eTpuLnBhcmVudElkZW50aXR5LHBhZ2VJZDplLHBhZ2U6e3BhZ2VJZDp0LnBhZ2VJZCx0aXRsZTp0LnRpdGxlfX0pLG59LGVyPWFzeW5jKHtwYWdlOmV9KT0+e2F3YWl0IFFuKGUucGFnZUlkLGUpLGF3YWl0KGFzeW5jIGU9Pihhd2FpdCBxZShuZSkpLmRpc3BhdGNoKHplLkNyZWF0ZVNhdmVkUGFnZSxlKSkoe3BhZ2U6ZX0pfSx0cj1hc3luYyBlPT57YXdhaXQgWG4oZSkmJmF3YWl0KGFzeW5jIGU9Pihhd2FpdCBxZShuZSkpLmRpc3BhdGNoKHplLkRlbGV0ZVNhdmVkUGFnZSxlKSkoZSl9LG5yPWFzeW5jKHtwYWdlSWQ6ZSxwYWdlOnR9KT0+e2F3YWl0IFFuKGUsdCk7cmV0dXJuIGF3YWl0KGFzeW5jIGU9Pihhd2FpdCBxZShuZSkpLmRpc3BhdGNoKHplLlVwZGF0ZVNhdmVkUGFnZSxlKSkoe3BhZ2VJZDplLHBhZ2U6dH0pfSxycj1hc3luYyBlPT5hd2FpdCBYbihlLnBhZ2VJZCk/bnIoe3BhZ2VJZDplLnBhZ2VJZCxwYWdlOmV9KTplcih7cGFnZTplfSksb3I9YXN5bmMgZT0+e2F3YWl0KGFzeW5jIGU9Pihhd2FpdCB0dChlLmlkZW50aXR5KSkuZGlzcGF0Y2goaXQuQXR0YWNoUGFnZXNUb1dpbmRvdyxlKSkoZSl9LGFyPWFzeW5jIGU9Pntjb25zdCB0PXsuLi5lLnBhZ2UscGFuZWxzOmUucGFnZS5wYW5lbHMmJkZuKGUucGFnZS5wYW5lbHMpfTt0LnBhbmVscyYmYXdhaXQgem4odC5wYW5lbHMpLGF3YWl0ICRuKHsuLi5lLHBhZ2U6dH0pfSxpcj1hc3luYyBlPT57YXdhaXQoYXN5bmMgZT0+KGF3YWl0IHR0KGUuaWRlbnRpdHkpKS5kaXNwYXRjaChpdC5EZXRhY2hQYWdlc0Zyb21XaW5kb3csZSkpKGUpfSxscj1hc3luYyBlPT57YXdhaXQoYXN5bmMgZT0+KGF3YWl0IHR0KGUuaWRlbnRpdHkpKS5kaXNwYXRjaChpdC5TZXRBY3RpdmVQYWdlRm9yV2luZG93LGUpKShlKX0sc3I9ZT0+Wm4oZSksY3I9YXN5bmMoe2lkZW50aXR5OmUscGFnZUlkOnR9KT0+KGF3YWl0IHNyKGUpKS5maW5kKChlPT5lLnBhZ2VJZD09PXQpKSx1cj1hc3luYyBlPT57YXdhaXQoYXN5bmMgZT0+KGF3YWl0IHR0KGUuaWRlbnRpdHkpKS5kaXNwYXRjaChpdC5SZW9yZGVyUGFnZXNGb3JXaW5kb3csZSkpKGUpfSxkcj1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnF1ZXVlPVtdLHRoaXMubG9ja2VkPSExfWxvY2soKXtyZXR1cm4gbmV3IFByb21pc2UoKGU9Pnt0aGlzLmxvY2tlZD90aGlzLnF1ZXVlLnB1c2goZSk6KHRoaXMubG9ja2VkPSEwLGUoKSl9KSl9dW5sb2NrKCl7aWYodGhpcy5xdWV1ZS5sZW5ndGg+MCl7Y29uc3QgZT10aGlzLnF1ZXVlLnNoaWZ0KCk7ZSYmZSgpfWVsc2UgdGhpcy5sb2NrZWQ9ITF9fTthc3luYyBmdW5jdGlvbiBwcihlKXthd2FpdCBkci5sb2NrKCk7dHJ5e2NvbnN0IHQ9Qm4oTm4/XCJlbnRlcnByaXNlRGVmYXVsdFBhZ2VUaXRsZVwiOlwiZGVmYXVsdFBhZ2VUaXRsZVwiKSxuPWU/P3QsW3Isb109YXdhaXQgUHJvbWlzZS5hbGwoW0puKCksWW4oKV0pLGE9Wy4uLnIsLi4ub10ubWFwKCgoe3RpdGxlOmV9KT0+ZSkpO3JldHVybiBxbihuLGEpfWZpbmFsbHl7ZHIudW5sb2NrKCl9fWFzeW5jIGZ1bmN0aW9uIGZyKHtwYWdlOmV9KXtyZXR1cm57c2hvdWxkU2hvd01vZGFsOiEoIWV8fCFlLmhhc1Vuc2F2ZWRDaGFuZ2VzKX19YXN5bmMgZnVuY3Rpb24gaHIoe3BhZ2U6ZSxpZGVudGl0eTp0fSl7Y29uc3Qgbj1maW4uQXBwbGljYXRpb24uZ2V0Q3VycmVudFN5bmMoKTtpZigoYXdhaXQgbi5nZXRJbmZvKCkpLmluaXRpYWxPcHRpb25zLmVuYWJsZUJlZm9yZVVubG9hZCl7Y29uc3Qgbj1BdChlLmxheW91dC5jb250ZW50KS5maWx0ZXIoKGU9PmUubmFtZSkpLm1hcCgoZT0+ZmluLlZpZXcud3JhcFN5bmMoe25hbWU6ZS5uYW1lLHV1aWQ6dC51dWlkfSkpKSxyPWF3YWl0IHRoaXMuY2hlY2tWaWV3c0ZvclByZXZlbnRVbmxvYWQobik7aWYoci52aWV3c1ByZXZlbnRpbmdVbmxvYWQubGVuZ3RoPjApe2lmKChhd2FpdCB0aGlzLmdldFVzZXJEZWNpc2lvbkZvckJlZm9yZVVubG9hZCh7Li4ucix3aW5kb3dJZDp0LHdpbmRvd1Nob3VsZENsb3NlOiExLGNsb3NlVHlwZTpcInBhZ2VcIn0pKS52aWV3c1RvQ2xvc2UubGVuZ3RoIT09bi5sZW5ndGgpcmV0dXJuIGUucGFnZUlkLHtzaG91bGRQYWdlQ2xvc2U6ITF9fX1yZXR1cm57c2hvdWxkUGFnZUNsb3NlOiEwfX1hc3luYyBmdW5jdGlvbiBncih7cGFnZXM6ZSxpZGVudGl0eTp0fSl7Y29uc3Qgbj1hd2FpdCBQcm9taXNlLmFsbChlLm1hcCgoZT0+dGhpcy5zaG91bGRQYWdlQ2xvc2Uoe3BhZ2U6ZSxjbG9zZVR5cGU6XCJ3aW5kb3dcIixpZGVudGl0eTp0fSkpKSkse3BhZ2VzUHJldmVudGluZ0Nsb3NlOnIscGFnZXNOb3RQcmV2ZW50aW5nQ2xvc2U6b309ZS5yZWR1Y2UoKChlLHQscik9PiFuW3JdLnNob3VsZFBhZ2VDbG9zZT97cGFnZXNOb3RQcmV2ZW50aW5nQ2xvc2U6ZS5wYWdlc05vdFByZXZlbnRpbmdDbG9zZSxwYWdlc1ByZXZlbnRpbmdDbG9zZTpbLi4uZS5wYWdlc1ByZXZlbnRpbmdDbG9zZSx0XX06e3BhZ2VzUHJldmVudGluZ0Nsb3NlOmUucGFnZXNQcmV2ZW50aW5nQ2xvc2UscGFnZXNOb3RQcmV2ZW50aW5nQ2xvc2U6Wy4uLmUucGFnZXNOb3RQcmV2ZW50aW5nQ2xvc2UsdF19KSx7cGFnZXNQcmV2ZW50aW5nQ2xvc2U6W10scGFnZXNOb3RQcmV2ZW50aW5nQ2xvc2U6W119KTtyZXR1cm4gdGhpcy5oYW5kbGVQYWdlc0FuZFdpbmRvd0Nsb3NlKHtwYWdlc05vdFByZXZlbnRpbmdDbG9zZTpvLHBhZ2VzUHJldmVudGluZ0Nsb3NlOnIsaWRlbnRpdHk6dH0pfWFzeW5jIGZ1bmN0aW9uIHZyKHtwYWdlc1ByZXZlbnRpbmdDbG9zZTplLHBhZ2VzTm90UHJldmVudGluZ0Nsb3NlOnQsaWRlbnRpdHk6bn0pe3JldHVybntzaG91bGRXaW5kb3dDbG9zZTowPT09ZS5sZW5ndGh9fWFzeW5jIGZ1bmN0aW9uIENyKHtwYWdlOmV9KXtyZXR1cm4gV2UoZSl9YXN5bmMgZnVuY3Rpb24gbXIoZSl7cmV0dXJue2hhc1Vuc2F2ZWRDaGFuZ2VzOiEwfX1jb25zdCB3cj1hc3luYygpPT57Y29uc3QgZT1MdCgpLHQ9KGF3YWl0IGllKCkpLm1hcCgodD0+ZS5Ccm93c2VyLndyYXBTeW5jKHQuaWRlbnRpdHkpKSk7YXdhaXQgUHJvbWlzZS5hbGwodC5tYXAoKGFzeW5jIGU9Pntjb25zdCB0PWF3YWl0IGUuZ2V0UGFnZXMoKTthd2FpdCBQcm9taXNlLmFsbCh0Lm1hcCgoYXN5bmMgdD0+e3QudGl0bGUsYXdhaXQgZS51cGRhdGVQYWdlKHtwYWdlSWQ6dC5wYWdlSWQscGFnZTp7aGFzVW5zYXZlZENoYW5nZXM6ITF9fSksdC5wYWdlSWQsdC50aXRsZSxhd2FpdCBycih7Li4udCxoYXNVbnNhdmVkQ2hhbmdlczohMX0pfSkpKX0pKSl9LGJyPW5ldyBNYXAseXI9KCk9PmJyLHhyPWU9PmJyLmRlbGV0ZShlKTtsZXQga3I9ITE7Y29uc3QgU3I9KCk9Pntrcnx8KGtyPSEwLGZpbi5XaW5kb3cud3JhcFN5bmMocmUpLm9uY2UoXCJjbG9zZWRcIiwoKCk9Pntrcj0hMSwoYXN5bmMoZSx0KT0+e2F3YWl0IGJlKHdlKGUpLHtzb3VyY2U6XCJTdG9yZVwiLC4uLnR9KX0pKGZpbi5tZS5pZGVudGl0eSx7dHlwZTpcIk5hdmlnYXRpb25cIixhY3Rpb246XCJDbG9zZSBTdG9yZVwiLHNraXBWYWx1ZUhhc2hpbmc6ITB9KX0pKSl9O2xldCBPcixNcixMcjtjb25zdCBfcj1hc3luYygpPT4odm9pZCAwPT09THImJihMcj0hIShhd2FpdCBGKCkpLmRpc2FibGVPcGVuRmluQW5hbHl0aWNzKSxMcik7YXN5bmMgZnVuY3Rpb24gUHIoZSl7ZS5mb3JFYWNoKChlPT57dmFyIHQsbjtcIlBhZ2VcIj09PWUudHlwZT9cIk9wZW4gUGFnZVwiPT09ZS5hY3Rpb24/KHQ9ZS5kYXRhLnV1aWQsbj1lLGJyLnNldCh0LG4pKTpcIkNsb3NlIFBhZ2VcIj09PWUuYWN0aW9uJiZ4cihlLmRhdGEudXVpZCk6XCJTdG9yZVwiPT09ZS5zb3VyY2UmJlwiQ2xvc2VcIiE9PWUuYWN0aW9uJiZTcigpfSkpLGF3YWl0KGFzeW5jIGU9PntPcj8uc2VuZFRvT3BlbkZpbiYmKGF3YWl0IF9yKCl8fGUuZm9yRWFjaCgoYXN5bmMgZT0+e2NvbnN0IHQ9T2Uoe30sZSk7dC5lbnRpdHlJZCYmKHQuZW50aXR5SWQudXVpZD1hd2FpdCBrZSh0LmVudGl0eUlkLnV1aWQpLHQuZW50aXR5SWQubmFtZT1hd2FpdCBrZSh0LmVudGl0eUlkLm5hbWUpKSwhZS5za2lwVmFsdWVIYXNoaW5nJiZcInZhbHVlXCJpbiB0JiYodC52YWx1ZT1hd2FpdCBrZSh0LnZhbHVlKSksTXIodCl9KSkpfSkoZSk7Y29uc3QgdD1lLm1hcCgoKHtza2lwVmFsdWVIYXNoaW5nOmUsLi4udH0pPT50KSk7dGhpcy5oYW5kbGVBbmFseXRpY3ModCl9Y29uc3QgRXI9YXN5bmMgZT0+e09yPWU7T3I/LnNlbmRUb09wZW5GaW4mJiFhd2FpdCBfcigpJiYoKCk9Pntjb25zdCBlPUEsdD1lK0suQW5hbHl0aWNzLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIklGUkFNRVwiKTtuLnNldEF0dHJpYnV0ZShcInNyY1wiLHQpLG4uc2V0QXR0cmlidXRlKFwic3R5bGVcIixcIndpZHRoOiAwcHggIWltcG9ydGFudFwiKSxuLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsXCJoZWlnaHQ6IDBweCAhaW1wb3J0YW50XCIpLG4uc2V0QXR0cmlidXRlKFwic3R5bGVcIixcImRpc3BsYXk6IG5vbmUgIWltcG9ydGFudFwiKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG4pLE1yPWFzeW5jIHQ9PntuLmNvbnRlbnRXaW5kb3cucG9zdE1lc3NhZ2UodCxlKX19KSgpO2NvbnN0IHQ9ZmluLkFwcGxpY2F0aW9uLmdldEN1cnJlbnRTeW5jKCk7dC5hZGRMaXN0ZW5lcihcInZpZXctY3JlYXRlZFwiLChhc3luYyBlPT57dmFyIHQ7eWUoe3R5cGU6XCJWaWV3XCIsYWN0aW9uOlwiT3BlbiBWaWV3XCIsdmFsdWU6ZS52aWV3SWRlbnRpdHkubmFtZSxkYXRhOnt1dWlkOmUudmlld0lkZW50aXR5LnV1aWQsdXJsOmF3YWl0KHQ9ZS52aWV3SWRlbnRpdHksZmluLlZpZXcud3JhcFN5bmModCkuZ2V0SW5mbygpLnRoZW4oKGU9PmUudXJsKSkpfX0pfSkpLHQuYWRkTGlzdGVuZXIoXCJ2aWV3LWRlc3Ryb3llZFwiLChhc3luYyBlPT57eWUoe3R5cGU6XCJWaWV3XCIsYWN0aW9uOlwiQ2xvc2UgVmlld1wiLHZhbHVlOmUudmlld0lkZW50aXR5Lm5hbWUsZGF0YTp7dXVpZDplLnZpZXdJZGVudGl0eS51dWlkfX0pfSkpLHQuYWRkTGlzdGVuZXIoXCJ3aW5kb3ctY2xvc2VkXCIsKGU9PntlLm5hbWUuc3RhcnRzV2l0aChlZS5Ccm93c2VyTWVudSl8fCh5ZSh7dHlwZTpcIldpbmRvd1wiLGFjdGlvbjpcIkNsb3NlIFdpbmRvd1wiLHZhbHVlOmUubmFtZSxkYXRhOnt1dWlkOmUudXVpZH19KSwoYXN5bmMoKT0+e2NvbnN0IGU9eXIoKSx0PWF3YWl0IFluKCk7aWYodC5sZW5ndGg9PT1lLnNpemUpcmV0dXJuO2NvbnN0IG49dC5yZWR1Y2UoKChlLHQpPT5lLnNldCh0LnBhZ2VJZCwxKSksbmV3IE1hcCk7Zm9yKGNvbnN0W3Qscl1vZiBlKW4uaGFzKHQpfHwoci5hY3Rpb249XCJDbG9zZSBQYWdlXCIseWUocikseHIodCkpfSkoKSl9KSl9O3ZhciBqcjshZnVuY3Rpb24oZSl7ZS5FUlJPUj1cImVycm9yXCIsZS5TVUNDRVNTPVwic3VjY2Vzc1wiLGUuSU5GTz1cImluZm9cIn0oanJ8fChqcj17fSkpO2NvbnN0IFJyPShlLHQpPT57Y29uc3Qgbj1lO3JldHVybiBuLndvcmtzcGFjZVBsYXRmb3JtfHwobi53b3Jrc3BhY2VQbGF0Zm9ybT17fSksbi53b3Jrc3BhY2VQbGF0Zm9ybS5faW50ZXJuYWxEZWZlclNob3dPcHRpb25zPXtzZXRBc0ZvcmVncm91bmQ6ISF0LGRlZmVyU2hvd0VuYWJsZWQ6ITAsYXV0b1Nob3c6bi53b3Jrc3BhY2VQbGF0Zm9ybT8uX2ludGVybmFsQXV0b1Nob3d8fG4ud29ya3NwYWNlUGxhdGZvcm0/Ll9pbnRlcm5hbERlZmVyU2hvd09wdGlvbnM/LmF1dG9TaG93fHx2b2lkIDA9PT1uLmF1dG9TaG93fHxuLmF1dG9TaG93fSxuLmF1dG9TaG93PSExLG59O2NvbnN0IElyPVJyKHthbHdheXNPblRvcDohMCxhdXRvU2hvdzohMSxmcmFtZTohMSxyZXNpemFibGU6ITEsc2hvd1Rhc2tiYXJJY29uOiExfSk7dmFyIFZyOyFmdW5jdGlvbihlKXtlLkxvY2tlZD1cIkxvY2tDbG9zZWRJY29uXCIsZS5VbmxvY2tlZD1cIkxvY2tPcGVuMUljb25cIn0oVnJ8fChWcj17fSkpO2NvbnN0IEhyPVwiYnJvd3NlclwiLEFyPWZ1bmN0aW9uKGU9SXIpe2NvbnN0IHQ9bmV3IE1hcDtyZXR1cm4gYXN5bmMobixyLG8sYSxpKT0+e2lmKHQuaGFzKG4pKXtjb25zdHtjdXJyZW50VXJsOmUsY3VycmVudE5hbWU6b309dC5nZXQobik7aWYoZT09PXIpcmV0dXJuO2NvbnN0IGE9ZmluLldpbmRvdy53cmFwU3luYyh7dXVpZDpmaW4ubWUudXVpZCxuYW1lOm99KTthd2FpdCBhLmNsb3NlKCl9Y29uc3QgbD1gJHtlZS5Ib21lSW50ZXJuYWx9LSR7RGF0ZS5ub3coKX0ke01hdGgucmFuZG9tKCl9YDt0LnNldChuLHtjdXJyZW50VXJsOnIsY3VycmVudE5hbWU6bH0pO2NvbnN0IHM9YE5ldyAke2F9IGluZGljYXRvcjogJHtvfSAke2l9YCxjPWF3YWl0IGZpbi5QbGF0Zm9ybS5nZXRDdXJyZW50U3luYygpLmNyZWF0ZVdpbmRvdyh7Li4uZSxuYW1lOmwsdXJsOnJ9KTsoKGUsdCk9Pntjb25zdCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7bi5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsXCJhbGVydFwiKSxuLnNldEF0dHJpYnV0ZShcImFyaWEtbGl2ZVwiLHR8fFwicG9saXRlXCIpLChlPT57ZS5zdHlsZS5wb3NpdGlvbj1cImFic29sdXRlXCIsZS5zdHlsZS53aWR0aD1cIjFweFwiLGUuc3R5bGUuaGVpZ2h0PVwiMXB4XCIsZS5zdHlsZS5wYWRkaW5nPVwiMFwiLGUuc3R5bGUubWFyZ2luPVwiLTFweFwiLGUuc3R5bGUub3ZlcmZsb3c9XCJoaWRkZW5cIixlLnN0eWxlLndoaXRlU3BhY2U9XCJub3dyYXBcIixlLnN0eWxlLmJvcmRlcj1cIjBcIn0pKG4pLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobiksc2V0VGltZW91dCgoKCk9PntuLmlubmVySFRNTD1lfSksMzAwKSxzZXRUaW1lb3V0KCgoKT0+e2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobil9KSwxZTMpfSkocyksYy5vbmNlKFwiY2xvc2VkXCIsKCgpPT57dC5kZWxldGUobil9KSl9fSgpO2FzeW5jIGZ1bmN0aW9uIFRyKGUsdCxuLHIsbyxhKXtpZihuJiZmaW4ubWUubmFtZSE9PW4pe2NvbnN0IGk9e3R5cGU6ZSxtZXNzYWdlOnQscGFyZW50QnJvd3Nlck5hbWU6bixzZWNvbmRhcnlNZXNzYWdlOnIsaWNvbjpvLGlzRW50ZXJwcmlzZTphfTtyZXR1cm4oYXdhaXQgdHQoe3V1aWQ6ZmluLm1lLnV1aWQsbmFtZTpufSkpLmRpc3BhdGNoKGl0LlNob3dCcm93c2VySW5kaWNhdG9yLGkpfWNvbnN0IGk9bmV3IFVSTFNlYXJjaFBhcmFtcztpZihpLmFwcGVuZChcInR5cGVcIixlKSxpLmFwcGVuZChcIm1lc3NhZ2VcIix0KSxpLmFwcGVuZChcInBhcmVudE5hbWVcIixufHxcIlwiKSxpLmFwcGVuZChcInNlY29uZGFyeU1lc3NhZ2VcIixyfHxcIlwiKSxpLmFwcGVuZChcImljb25cIixvfHxcIlwiKSxpLmFwcGVuZChcImlzRW50ZXJwcmlzZVwiLGAke2F9YHx8XCJcIiksbil7Y29uc3QgZT1uP3t1dWlkOmosbmFtZTpufTp2b2lkIDAsdD1hd2FpdCB0ZShlKSxyPXVlKGF3YWl0IHQuZ2V0Qm91bmRzKCkpO2kuYXBwZW5kKFwicGFyZW50Qm91bmRzXCIscil9Y29uc3QgbD1gJHthd2FpdCBVKCkrSy5Ccm93c2VySW5kaWNhdG9yfSMke2kudG9TdHJpbmcoKX1gO3JldHVybiBBcihIcituLGwsdCxlLHIpfWFzeW5jIGZ1bmN0aW9uIERyKGUsdCxuLHIpe2NvbnN0IG89YXdhaXQgZmUodCksYT10Lm5hbWU7cmV0dXJuIFRyKGpyLlNVQ0NFU1MsZSxhLG4scixvKX1jb25zdCBCcj1hc3luYyhlPW5lKT0+e2NvbnN0e3dvcmtzcGFjZVBsYXRmb3JtOnR9PWF3YWl0IHRlKGUpLmdldE9wdGlvbnMoKSxuPXQ/Lm5ld1BhZ2VVcmwscj10Py5uZXdUYWJVcmw7cmV0dXJue25ld1BhZ2VVcmw6bixuZXdUYWJVcmw6cn19LFpyPWFzeW5jKGUsdD1uZSk9Pntjb25zdHtuZXdQYWdlVXJsOm59PWF3YWl0IEJyKHQpO2lmKCFuKXRocm93IG5ldyBFcnJvcihcIlRyeWluZyB0byBjcmVhdGUgYSBuZXcgcGFnZSB3aXRob3V0IGEgbmV3UGFnZVVybCBzZXRcIik7cmV0dXJuKGFzeW5jKGUsdCxuPW5lKT0+e2xldCByO2F3YWl0IGFlKG4pJiYocj0oYXdhaXQgdGUobikuZ2V0T3B0aW9ucygpKS5sYXlvdXR8fHtzZXR0aW5nczp7fX0pO3JldHVybnsuLi5yLGNvbnRlbnQ6W3t0eXBlOlwic3RhY2tcIixjb250ZW50Olt7dHlwZTpcImNvbXBvbmVudFwiLGNvbXBvbmVudE5hbWU6XCJ2aWV3XCIsY29tcG9uZW50U3RhdGU6e3RpdGxlOmUsdXJsOnR9fV19XX19KShlLG4sdCl9LCRyPWFzeW5jKGU9bmUpPT57Y29uc3QgdD1hd2FpdCBmZShlKSxuPWF3YWl0IEx0KCkuQnJvd3Nlci5nZXRVbmlxdWVQYWdlVGl0bGUoKSxyPWF3YWl0IFpyKG4sZSk7dCYmKHIuc2V0dGluZ3MuaGFzSGVhZGVycz0hMSxyLnNldHRpbmdzLnJlb3JkZXJFbmFibGVkPSEwLHIuZGltZW5zaW9ucy5oZWFkZXJIZWlnaHQ9MCk7Y29uc3Qgbz1hd2FpdCBGZShuLHIpO3JldHVybiB0JiYoby5oYXNVbnNhdmVkQ2hhbmdlcz0hMSksb307dmFyIE5yOyFmdW5jdGlvbihlKXtlLkhvbWU9XCIvaG9tZVwiLGUuQnJvd3Nlcj1cIi9icm93c2VyXCIsZS5Qcm92aWRlcj1cIi9wcm92aWRlclwiLGUuU3RvcmVmcm9udD1cIi9zdG9yZWZyb250XCIsZS5Eb2NrPVwiL2RvY2tcIn0oTnJ8fChOcj17fSkpO2NvbnN0IEZyPShlLHQ9MCk9PntsZXQgbixyLG89ITE7Y29uc3QgYT1hc3luYyByPT57Y29uc3QgaT1hd2FpdCBlKC4uLnIpO2lmKG8pe2F3YWl0IG5ldyBQcm9taXNlKChlPT5zZXRUaW1lb3V0KGUsdCkpKTtjb25zdCBlPW47cmV0dXJuIG49dm9pZCAwLG89ITEsYShlKX1yZXR1cm4gaX07cmV0dXJuKC4uLmUpPT4ocj8obz0hMCxuPWUpOnI9YShlKS5jYXRjaCgoZT0+e3Rocm93IGNvbnNvbGUuZXJyb3IoXCJtYWtlRGVib3VuY2VkRnVuY1wiLGUpLGV9KSkuZmluYWxseSgoKCk9PntyPXZvaWQgMH0pKSxyKX07ZnVuY3Rpb24gV3IoZSx0KXtyZXR1cm4gYXN5bmMobiwuLi5yKT0+e2UuaGFzKG4pJiZlLmdldChuKS5mb3JFYWNoKChlPT5lKC4uLnIpKSksdCYmYXdhaXQgdCh7ZXZlbnQ6bixwYXlsb2FkOnJ9KX19ZnVuY3Rpb24gVXIoZSx0KXtyZXR1cm4gdCYmdCgodD0+e2NvbnN0e2V2ZW50Om4scGF5bG9hZDpyfT10O2UuaGFzKG4pJiZlLmdldChuKS5mb3JFYWNoKChlPT5lKC4uLnIpKSl9KSksKHQsbik9PntlLmhhcyh0KXx8ZS5zZXQodCxuZXcgU2V0KSxlLmdldCh0KS5hZGQobil9fWZ1bmN0aW9uIHpyKGUpe3JldHVybih0LG4pPT57ZS5oYXModCl8fGUuc2V0KHQsbmV3IFNldCk7Y29uc3Qgcj1lLmdldCh0KSxvPSguLi5lKT0+e24oLi4uZSksci5kZWxldGUobyl9O3IuYWRkKG8pfX1mdW5jdGlvbiBHcihlKXtyZXR1cm4odCxuKT0+e2UuaGFzKHQpJiZlLmdldCh0KS5kZWxldGUobil9fWNvbnN0IEtyPWU9PmUucmVwbGFjZSgvW15cXGQsXS9nLFwiXCIpLnNwbGl0KFwiLFwiKSxxcj1lPT57aWYoZS5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNvbG9yIG9iamVjdCwgY2Fubm90IGNvbnZlcnQgdG8gSFNMLlwiKTtjb25zdCB0PWVbMF0vMjU1LG49ZVsxXS8yNTUscj1lWzJdLzI1NSxvPU1hdGgubWluKHQsbixyKSxhPU1hdGgubWF4KHQsbixyKSxpPWEtbztsZXQgbD0wLHM9MCxjPTA7cmV0dXJuIGw9MD09PWk/MDphPT09dD8obi1yKS9pJTY6YT09PW4/KHItdCkvaSsyOih0LW4pL2krNCxsPU1hdGgucm91bmQoNjAqbCksbDwwJiYobCs9MzYwKSxjPShhK28pLzIscz0wPT1pPzA6aS8oMS1NYXRoLmFicygyKmMtMSkpLHM9KygxMDAqcykudG9GaXhlZCgxKSxjPSsoMTAwKmMpLnRvRml4ZWQoMSkse2hzbDpgaHNsKCR7bH0sICR7c30lLCAke2N9JSlgLGhzbGE6YGhzbCgke2x9LCAke3N9JSwgJHtjfSUsIDEpYCxodWU6bCxsaWdodG5lc3M6YyxzYXR1cmF0aW9uOnN9fSxZcj1lPT57aWYoIWUpdGhyb3cgbmV3IEVycm9yKFwiQ29sb3IgaXMgbm90IGRlZmluZWRcIik7Y29uc3QgdD1lLnRvTG93ZXJDYXNlKCk7bGV0IG47aWYodC5pbmNsdWRlcyhcInJnYlwiKSl7Y29uc3QgZT1Lcih0KTtlLmxlbmd0aD4zJiZlLnBvcCgpLG49cXIoZSkuaHVlfWlmKHQuaW5jbHVkZXMoXCIjXCIpKXtjb25zdCBlPShlPT57aWYoIWUuaW5jbHVkZXMoXCIjXCIpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgaGV4IHZhbHVlLCBjYW5ub3QgY29udmVydCB0byBSR0IuIEhleCB2YWx1ZSBiZWdpbnMgd2l0aCBhIGhhc2h0YWcuXCIpO2xldCB0PTAsbj0wLHI9MDtpZig0PT09ZS5sZW5ndGgpdD1gMHgke2VbMV19JHtlWzFdfWAsbj1gMHgke2VbMl19JHtlWzJdfWAscj1gMHgke2VbM119JHtlWzNdfWA7ZWxzZXtpZig3IT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBoZXggc3RyaW5nIGxlbmd0aCwgY2Fubm90IGNvbnZlcnQgdG8gUkdCLlwiKTt0PWAweCR7ZVsxXX0ke2VbMl19YCxuPWAweCR7ZVszXX0ke2VbNF19YCxyPWAweCR7ZVs1XX0ke2VbNl19YH1yZXR1cm5bK3QsK24sK3JdfSkodCk7bj1xcihlKS5odWV9aWYodC5pbmNsdWRlcyhcImhzbFwiKSl7bj1Lcih0KVswXX1jb25zdCByPW4/LnRvU3RyaW5nKCk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBIdWUgd2FzIHVuYWJsZSB0byBiZSBleHRyYWN0ZWQgZnJvbSBcIiR7dH1cIiwgY2hlY2sgY29sb3IgZm9ybWF0LiBBY2NlcHRlZCBmb3JtYXRzIGFyZTogcmdiKCksIHJnYmEoKSwgaGV4LCBoc2woKSwgYW5kIGhzbGEoKWApO3JldHVybiByfSxKcj0oZSx0PSExKT0+e2NvbnN0IG49WXIoZSk7cmV0dXJuIHQ/e2JhY2tncm91bmQxOmBoc2xhKCR7bn0sIDAlLCAxMDAlLCAxKWAsYmFja2dyb3VuZDI6YGhzbGEoJHtufSwgNjclLCA5OSUsIDEpYCxiYWNrZ3JvdW5kMzpgaHNsYSgke259LCAyNiUsIDk2JSwgMSlgLGJhY2tncm91bmQ0OmBoc2xhKCR7bn0sIDE1JSwgOTQlLCAxKWAsYmFja2dyb3VuZDU6YGhzbGEoJHtufSwgMTAlLCA4OCUsIDEpYCxiYWNrZ3JvdW5kNjpgaHNsYSgke259LCA4MCUsIDgwJSwgMSlgfTp7YmFja2dyb3VuZDE6YGhzbGEoJHtufSwgOCUsIDclLCAxKWAsYmFja2dyb3VuZDI6YGhzbGEoJHtufSwgOCUsIDEzJSwgMSlgLGJhY2tncm91bmQzOmBoc2xhKCR7bn0sIDklLCAxNSUsIDEpYCxiYWNrZ3JvdW5kNDpgaHNsYSgke259LCA2JSwgMjMlLCAxKWAsYmFja2dyb3VuZDU6YGhzbGEoJHtufSwgMjElLCAyOCUsIDEpYCxiYWNrZ3JvdW5kNjpgaHNsYSgke259LCA1JSwgNTElLCAxKWB9fSxYcj0oZSx0KT0+e2NvbnN0IG49e307cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goKHI9PntuW3JdPXRbcl0/dFtyXTplW3JdfSkpLG59LFFyPXtbTS5QYWxldHRlLmJyYW5kUHJpbWFyeV06XCIjMEE3NkQzXCIsW00uUGFsZXR0ZS5zdGF0dXNTdWNjZXNzXTpNLkNvbG9yLmZ1bmN0aW9uYWwxLFtNLlBhbGV0dGUuc3RhdHVzV2FybmluZ106TS5Db2xvci5mdW5jdGlvbmFsMTAsW00uUGFsZXR0ZS5zdGF0dXNDcml0aWNhbF06TS5Db2xvci5mdW5jdGlvbmFsNyxbTS5QYWxldHRlLnN0YXR1c0FjdGl2ZV06TS5Db2xvci5mdW5jdGlvbmFsMyxbTS5QYWxldHRlLmNvbnRlbnRCYWNrZ3JvdW5kMV06XCIjMEE3NkQzXCIsW00uUGFsZXR0ZS5jb250ZW50QmFja2dyb3VuZDJdOlwiIzAwMDAwMFwiLFtNLlBhbGV0dGUuY29udGVudEJhY2tncm91bmQzXTpcIiMwMDAwMDBcIixbTS5QYWxldHRlLmNvbnRlbnRCYWNrZ3JvdW5kNF06XCIjMDAwMDAwXCIsW00uUGFsZXR0ZS5jb250ZW50QmFja2dyb3VuZDVdOlwiIzAwMDAwMFwifSxlbz17Li4uUXIsW00uUGFsZXR0ZS5iYWNrZ3JvdW5kMV06TS5Db2xvci53aGl0ZSxbTS5QYWxldHRlLmJhY2tncm91bmQyXTpNLkNvbG9yLmxpZ2h0R3JheTEsW00uUGFsZXR0ZS5iYWNrZ3JvdW5kM106TS5Db2xvci5saWdodEdyYXkyLFtNLlBhbGV0dGUuYmFja2dyb3VuZDRdOk0uQ29sb3IubGlnaHRHcmF5MyxbTS5QYWxldHRlLmJhY2tncm91bmQ1XTpNLkNvbG9yLmxpZ2h0R3JheTQsW00uUGFsZXR0ZS5iYWNrZ3JvdW5kNl06TS5Db2xvci5saWdodEdyYXk1LFtNLlBhbGV0dGUuYnJhbmRTZWNvbmRhcnldOk0uQ29sb3IubGlnaHRHcmF5NCxbTS5QYWxldHRlLmlucHV0QmFja2dyb3VuZF06TS5Db2xvci5saWdodEdyYXkzLFtNLlBhbGV0dGUuaW5wdXRDb2xvcl06TS5Db2xvci5kYXJrR3JheTUsW00uUGFsZXR0ZS5pbnB1dFBsYWNlaG9sZGVyXTpNLkNvbG9yLmRhcmtHcmF5MixbTS5QYWxldHRlLmlucHV0RGlzYWJsZWRdOk0uQ29sb3IubmV1dHJhbEdyYXksW00uUGFsZXR0ZS5pbnB1dEZvY3VzZWRdOk0uQ29sb3IubGlnaHRHcmF5NSxbTS5QYWxldHRlLmlucHV0Qm9yZGVyXTpNLkNvbG9yLm5ldXRyYWxHcmF5LFtNLlBhbGV0dGUudGV4dERlZmF1bHRdOk0uQ29sb3IuZGFya0dyYXk1LFtNLlBhbGV0dGUudGV4dEhlbHBdOk0uQ29sb3IuZGFya0dyYXkzLFtNLlBhbGV0dGUudGV4dEluYWN0aXZlXTpNLkNvbG9yLm5ldXRyYWxHcmF5fSx0bz17Li4uUXIsW00uUGFsZXR0ZS5iYWNrZ3JvdW5kMV06TS5Db2xvci5kYXJrR3JheTYsW00uUGFsZXR0ZS5iYWNrZ3JvdW5kMl06TS5Db2xvci5kYXJrR3JheTUsW00uUGFsZXR0ZS5iYWNrZ3JvdW5kM106TS5Db2xvci5kYXJrR3JheTQsW00uUGFsZXR0ZS5iYWNrZ3JvdW5kNF06TS5Db2xvci5kYXJrR3JheTMsW00uUGFsZXR0ZS5iYWNrZ3JvdW5kNV06TS5Db2xvci5kYXJrR3JheTIsW00uUGFsZXR0ZS5iYWNrZ3JvdW5kNl06TS5Db2xvci5kYXJrR3JheTEsW00uUGFsZXR0ZS5icmFuZFNlY29uZGFyeV06TS5Db2xvci5kYXJrR3JheTIsW00uUGFsZXR0ZS5pbnB1dEJhY2tncm91bmRdOk0uQ29sb3IuZGFya0dyYXkxLFtNLlBhbGV0dGUuaW5wdXRDb2xvcl06TS5Db2xvci53aGl0ZSxbTS5QYWxldHRlLmlucHV0UGxhY2Vob2xkZXJdOk0uQ29sb3IubGlnaHRHcmF5NSxbTS5QYWxldHRlLmlucHV0RGlzYWJsZWRdOk0uQ29sb3IubmV1dHJhbEdyYXksW00uUGFsZXR0ZS5pbnB1dEZvY3VzZWRdOk0uQ29sb3IubGlnaHRHcmF5NSxbTS5QYWxldHRlLmlucHV0Qm9yZGVyXTpNLkNvbG9yLm5ldXRyYWxHcmF5LFtNLlBhbGV0dGUudGV4dERlZmF1bHRdOk0uQ29sb3Iud2hpdGUsW00uUGFsZXR0ZS50ZXh0SGVscF06TS5Db2xvci5saWdodEdyYXk1LFtNLlBhbGV0dGUudGV4dEluYWN0aXZlXTpNLkNvbG9yLm5ldXRyYWxHcmF5fSxubz1be2xhYmVsOlwiT3BlbkZpbiBEZWZhdWx0IExpZ2h0IGFuZCBEYXJrIFRoZW1lXCIscGFsZXR0ZXM6e2xpZ2h0OnsuLi5lbyxicmFuZFByaW1hcnk6XCIjMEE3NkQzXCIsYnJhbmRTZWNvbmRhcnk6TS5Db2xvci5saWdodEdyYXk0LGJhY2tncm91bmRQcmltYXJ5Ok0uQ29sb3IuZGFya0dyYXk1fSxkYXJrOnsuLi50byxicmFuZFByaW1hcnk6XCIjMEE3NkQzXCIsYnJhbmRTZWNvbmRhcnk6TS5Db2xvci5kYXJrR3JheTIsYmFja2dyb3VuZFByaW1hcnk6TS5Db2xvci5kYXJrR3JheTV9fX1dLHJvPWU9Pntjb25zdHtiYWNrZ3JvdW5kOnQsZm9yZWdyb3VuZDpufT1lO3JldHVybntiYWNrZ3JvdW5kOnQsZm9yZWdyb3VuZDpuPz9cIiNGRkZGRkZcIn19LG9vPWU9Pntjb25zdHtsaWdodDp0LGRhcms6bn09XCJwYWxldHRlc1wiaW4gZT9lLnBhbGV0dGVzOntsaWdodDplLnBhbGV0dGUsZGFyazplLnBhbGV0dGV9LHI9WHIodG8sbiksbz1Ycihlbyx0KSxhPSgoZSx0KT0+e2NvbnN0IG49ey4uLmV9LHI9ey4uLnR9O2xldCBvPXQuYmFja2dyb3VuZFByaW1hcnk/SnIodC5iYWNrZ3JvdW5kUHJpbWFyeSwhMCk6e30sYT1lLmJhY2tncm91bmRQcmltYXJ5P0pyKGUuYmFja2dyb3VuZFByaW1hcnkpOnt9O3JldHVybiBvPXsuLi5vLC4uLnJ9LGE9ey4uLmEsLi4ubn0se2xpZ2h0OnsuLi50LC4uLm99LGRhcms6ey4uLmUsLi4uYX19fSkobix0KSxpPSgwLE0uY3JlYXRlVGhlbWUpKHsuLi5yLC4uLmE/LmRhcmt9KSxsPSgwLE0uY3JlYXRlVGhlbWUpKHsuLi5vLC4uLmE/LmxpZ2h0fSkse2xpZ2h0OnMsZGFyazpjfT0oZT0+e2NvbnN0IHQ9T2JqZWN0LmtleXMoZS5ub3RpZmljYXRpb25JbmRpY2F0b3JDb2xvcnM/P3t9KTtpZih0Py5sZW5ndGgpe2NvbnN0IG49e30scj17fTtyZXR1cm4gdC5mb3JFYWNoKCh0PT57Y29uc3Qgbz1lLm5vdGlmaWNhdGlvbkluZGljYXRvckNvbG9yc1t0XTtcImJhY2tncm91bmRcImluIG8/KG5bdF09cm8obyksclt0XT1ybyhvKSk6KG5bdF09cm8oby5kYXJrPz9vLmxpZ2h0KSxyW3RdPXJvKG8ubGlnaHQ/P28uZGFyaykpfSkpLHtsaWdodDpyLGRhcms6bn19cmV0dXJue2xpZ2h0Om51bGwsZGFyazpudWxsfX0pKGUpO3JldHVybiBpLm5vdGlmaWNhdGlvbkluZGljYXRvckNvbG9ycz1jLGwubm90aWZpY2F0aW9uSW5kaWNhdG9yQ29sb3JzPXMse2Rhcms6aSxsaWdodDpsfX0sYW89YXN5bmMgZT0+e2NvbnN0e3RoZW1lczp0LHNlbGVjdGVkU2NoZW1lOm59PWF3YWl0KGFzeW5jIGU9Pntjb25zdCB0PWZpbj8uX19pbnRlcm5hbF8/LmluaXRpYWxPcHRpb25zPy53b3Jrc3BhY2VQbGF0Zm9ybT8uX3RoZW1lRGF0YTtpZighdHx8ZS51dWlkIT09bmUudXVpZClyZXR1cm57dGhlbWVzOmF3YWl0IE10KGUpLlRoZW1lLmdldFRoZW1lcygpLHNlbGVjdGVkU2NoZW1lOmF3YWl0IE10KGUpLlRoZW1lLmdldFNlbGVjdGVkU2NoZW1lKCl9O3JldHVybiB0fSkoZSk7dmFyIHIsbztyZXR1cm4ocj10Py5sZW5ndGg/dDpubyxvPW4sci5tYXAoKGU9Pntjb25zdCB0PVwicGFsZXR0ZXNcImluIGU/ZS5kZWZhdWx0Ok0uQ29sb3JTY2hlbWUuZGFyayx7bGlnaHQ6bixkYXJrOnJ9PW9vKGUpO3JldHVybntsYWJlbDplLmxhYmVsLGxvZ29Vcmw6ZS5sb2dvVXJsLHRoZW1lOntkYXJrOnIsbGlnaHQ6bn0sZGVmYXVsdFNjaGVtZTpvPz90fX0pKSlbMF19LGlvPWFzeW5jIGU9Pntjb25zdCB0PWF3YWl0IHFlKGV8fGZpbi5tZS5pZGVudGl0eSksbj1hd2FpdCB0LmRpc3BhdGNoKHplLkdldFNlbGVjdGVkU2NoZW1lLHZvaWQgMCk7cmV0dXJuIG49PT1nLlN5c3RlbT93aW5kb3cubWF0Y2hNZWRpYShcIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaylcIikubWF0Y2hlcz9cImRhcmtcIjpcImxpZ2h0XCI6bn0sbG89e25hbWU6ZWUuQnJvd3Nlck1lbnUsYWx3YXlzT25Ub3A6ITAsYXV0b1Nob3c6ITAsZnJhbWU6ITEscmVzaXphYmxlOiExLGJhY2tncm91bmRDb2xvcjpcIiMyZjMxMzZcIixzbWFsbFdpbmRvdzohMCxzaG93VGFza2Jhckljb246ITEsYmFja2dyb3VuZFRocm90dGxpbmc6ITEsc2F2ZVdpbmRvd1N0YXRlOiExfTtmdW5jdGlvbiBzbyhlKXtjb25zdCB0PXsuLi5sbywuLi5lfTtyZXR1cm4gdC51cmw9ZnVuY3Rpb24oZSx0KXtpZighXyl0aHJvdyBuZXcgRXJyb3IoXCJyZXNvbHZlQWJzb2x1dGVQYXRoIGNhbiBvbmx5IGJlIHVzZWQgaW4gYSB3aW5kb3dcIik7Y29uc3Qgbj10Pz93aW5kb3cubG9jYXRpb247aWYoL14oPzpbYS16XSs6KT9cXC9cXC8vaS50ZXN0KGUpKXJldHVybiBlO2NvbnN0IHI9YCR7bi5wcm90b2NvbH0vLyR7bi5ob3N0bmFtZX1gO3JldHVybiBuZXcgVVJMKGUscikuaHJlZn0odC51cmw/P1wiXCIpLHR9Y29uc3QgY289ZnVuY3Rpb24oZSl7Y29uc3QgdD1uZXcgTWFwO3JldHVybntlbWl0OldyKHQsKHQ9PkwmJmZpbi5JbnRlckFwcGxpY2F0aW9uQnVzLnB1Ymxpc2goZSx0KSkpLGFkZExpc3RlbmVyOlVyKHQsKHQ9PkwmJmZpbi5JbnRlckFwcGxpY2F0aW9uQnVzLnN1YnNjcmliZSh7dXVpZDpmaW4ubWUudXVpZH0sZSx0KSkpLHJlbW92ZUxpc3RlbmVyOkdyKHQpLG9uY2U6enIodCl9fShcIndpbmRvdy5tZW51XCIpLHVvPShlLHQpPT5maW4uV2luZG93LndyYXBTeW5jKGUpLnVwZGF0ZU9wdGlvbnMoe29wYWNpdHk6dH0pLHBvPWU9PmNvLmVtaXQoXCJyZXNwb25zZVwiLGUpLGZvPUZyKCgoKT0+USgpLmdldENoaWxkV2luZG93cygpKSw1MDApO2NvbnN0IGhvPW5ldyBNYXA7YXN5bmMgZnVuY3Rpb24gZ28oZSx0KXtjb25zdCBuPXNvKGUpLHI9e3RvcDpuLnRvcCxsZWZ0Om4ubGVmdCx3aWR0aDpuLmRlZmF1bHRXaWR0aHx8bi53aWR0aCxoZWlnaHQ6bi5kZWZhdWx0SGVpZ2h0fHxuLmhlaWdodH07cmV0dXJuIHQuc2V0KFwicGFyZW50TmFtZVwiLGZpbi5XaW5kb3cuZ2V0Q3VycmVudFN5bmMoKS5pZGVudGl0eS5uYW1lKSx7bmFtZTpuLm5hbWUsYm91bmRzOnIscm91dGU6YCR7bi51cmx9IyR7dC50b1N0cmluZygpfWB9fWFzeW5jIGZ1bmN0aW9uIHZvKHtvcHRpb25zOmUscGFyYW1ldGVyczp0fSl7Y29uc3Qgbj1zbyhlKSx7bmFtZTpyfT1uO2xldCBvPWF3YWl0IGFzeW5jIGZ1bmN0aW9uKGUpe3JldHVybihhd2FpdCBmbygpKS5maW5kKCh0PT50LmlkZW50aXR5Lm5hbWU9PT1lKSl9KHIpO2lmKG8pYXdhaXQgYXN5bmMgZnVuY3Rpb24oZSx0KXtjb25zdHtuYW1lOm4sYm91bmRzOnIscm91dGU6b309YXdhaXQgZ28oZSx0KSxhPXt1dWlkOmZpbi5tZS5pZGVudGl0eS51dWlkLG5hbWU6bn0saT1maW4uV2luZG93LndyYXBTeW5jKGEpO2F3YWl0IFByb21pc2UuYWxsKFt1byhhLDApLGkuc2V0Qm91bmRzKHIpXSksaS5vbmNlKFwiYmx1cnJlZFwiLCgoKT0+e3VvKGEsMCksaS5oaWRlKCkscG8oe25hbWU6YS5uYW1lLGRhdGE6e2FjdGlvbk5hbWU6XCJDYW5jZWxcIn19KX0pKSxjby5lbWl0KFwidXBkYXRlXCIsbixyLG8pLGF3YWl0IHBvKHtuYW1lOm4sZGF0YTp7YWN0aW9uTmFtZTpcIkNhbmNlbFwifX0pfShuLHR8fG5ldyBVUkxTZWFyY2hQYXJhbXMpO2Vsc2V7Y29uc3R7cm91dGU6cixib3VuZHM6YX09YXdhaXQgZ28oZSx0KTtvPWF3YWl0IGFzeW5jIGZ1bmN0aW9uKGUsdCxuKXtjb25zdCByPXNvKGUpLG89YXdhaXQgYW8oZmluLm1lLmlkZW50aXR5KSxhPWF3YWl0IGlvKGZpbi5tZS5pZGVudGl0eSk9PT1nLkRhcmssaT1vPy50aGVtZTtpZihyLmJhY2tncm91bmRDb2xvcj1pPy5bYT9nLkRhcms6Zy5MaWdodF0ucGFsZXR0ZT8uaW5wdXRCYWNrZ3JvdW5kfHxyLmJhY2tncm91bmRDb2xvciwhaG8uaGFzKHIubmFtZSkpcmV0dXJuIG5ldyBQcm9taXNlKChlPT57Y28ub25jZShcInJlYWR5XCIsKGFzeW5jIHQ9PntpZih0Lm5hbWU9PT1yLm5hbWUpe2NvbnN0IG49YXdhaXQgaG8uZ2V0KHIubmFtZSk7bi5vbmNlKFwiYmx1cnJlZFwiLChhc3luYygpPT57aWYodW8odCwwKSxuLmhpZGUoKSxwbyh7bmFtZTpyLm5hbWUsZGF0YTp7YWN0aW9uTmFtZTpcIkNhbmNlbFwifX0pLG4uaWRlbnRpdHkubmFtZT09PWVlLkJyb3dzZXJTYXZlTWVudSl7Y29uc3QgZT1hd2FpdCBuLmdldE9wdGlvbnMoKTtcInN1Ym1pdHRpbmdcIiE9PWUuY3VzdG9tQ29udGV4dCYmXCJlcnJvclwiIT09ZS5jdXN0b21Db250ZXh0JiZuLmNsb3NlKCl9ZWxzZSBuLmlkZW50aXR5Lm5hbWUuc3RhcnRzV2l0aChlZS5Ccm93c2VyTWVudSkmJm4uY2xvc2UoKX0pKSxzZXRUaW1lb3V0KChhc3luYygpPT57YXdhaXQgdW8odCwxKSwxIT09KGF3YWl0IGZpbi5XaW5kb3cud3JhcFN5bmModCkuZ2V0T3B0aW9ucygpKS5vcGFjaXR5JiZ1byh0LDEpfSkpLGUobil9fSkpO2NvbnN0IG89KGFzeW5jKCk9Pntjb25zdCBlPWF3YWl0IGZpbi5QbGF0Zm9ybS5nZXRDdXJyZW50U3luYygpLmNyZWF0ZVdpbmRvdyhScih7Li4ucixvcGFjaXR5OjAsdXJsOnR8fHIudXJsLGRlZmF1bHRMZWZ0Om4/LmxlZnQsZGVmYXVsdFRvcDpuPy50b3AsZGVmYXVsdFdpZHRoOm4/LndpZHRoLGRlZmF1bHRIZWlnaHQ6bj8uaGVpZ2h0fSwhMCkpO3JldHVybiBlLm9uY2UoXCJjbG9zZWRcIiwoKCk9Pntoby5kZWxldGUoci5uYW1lKX0pKSxlfSkoKTtoby5zZXQoci5uYW1lLG8pfSkpO3JldHVybiBoby5nZXQoci5uYW1lKX0oey4uLm59LHIsYSl9cmV0dXJuIG99Y29uc3QgQ289YXN5bmMoe29wdGlvbnM6ZSxjb250ZW50OnR9KT0+e2NvbnN0IG49KGU9Pm5ldyBVUkxTZWFyY2hQYXJhbXMoe2NvbnRlbnQ6SlNPTi5zdHJpbmdpZnkoZSl9KSkoey4uLnQsaW52b2NhdGlvbklkOkhlKCl9KSxyPXsuLi5lLG5hbWU6YCR7ZS5uYW1lfS0tJHtlLm1vZGFsUGFyZW50SWRlbnRpdHk/Lm5hbWU/P1wiXCJ9YH07cmV0dXJuIGF3YWl0IHZvKHtvcHRpb25zOnIscGFyYW1ldGVyczpufSksbmV3IFByb21pc2UoKGU9Pntjby5vbmNlKFwicmVzcG9uc2VcIiwoYXN5bmMgdD0+e3QubmFtZT09PXIubmFtZSYmZSh7ZGF0YTp0LmRhdGF9KX0pKX0pKX0sbW89YXN5bmMoZSx0LG49ITEpPT57bGV0IHI7aWYobilyPWF3YWl0KGFzeW5jIGU9Pntjb25zdCB0PWUmJmF3YWl0IHRlKGUpLmdldEJvdW5kcygpLG49ZT9hd2FpdCBwZSh0KTooYXdhaXQgZmluLlN5c3RlbS5nZXRNb25pdG9ySW5mbygpKS5wcmltYXJ5TW9uaXRvcjtyZXR1cm57bGVmdDooKHI9bi5hdmFpbGFibGVSZWN0KS5sZWZ0K3IucmlnaHQpLzIsdG9wOihyLnRvcCtyLmJvdHRvbSkvMn07dmFyIHJ9KSh0KTtlbHNle2NvbnN0IGU9dGUodCksbj1hd2FpdCBlLmdldEJvdW5kcygpO3I9cj8/e2xlZnQ6KChvPW4pLmxlZnQrKG8ucmlnaHQ/P28ubGVmdCtvLndpZHRoKSkvMix0b3A6KG8udG9wKyhvLmJvdHRvbT8/by50b3Arby5oZWlnaHQpKS8yfX12YXIgbztjb25zdHtkZWZhdWx0SGVpZ2h0OmEsZGVmYXVsdFdpZHRoOml9PWU7cmV0dXJuKChlLHQpPT57Y29uc3Qgbj10LndpZHRoLzIscj10LmhlaWdodC8yO3JldHVybntsZWZ0Ok1hdGgucm91bmQoZS5sZWZ0LW4pLHRvcDpNYXRoLnJvdW5kKGUudG9wLXIpLHdpZHRoOnQud2lkdGgsaGVpZ2h0OnQuaGVpZ2h0fX0pKHIse2hlaWdodDphLHdpZHRoOml9KX07YXN5bmMgZnVuY3Rpb24gd28oZSx0LG49ITEpe2NvbnN0IHI9dCYmXCJtYXhpbWl6ZWRcIj09PWF3YWl0IHRlKHQpLmdldFN0YXRlKCksbz1ufHxyfHwhdCxhPWF3YWl0IG1vKGUsdCxvKTtyZXR1cm4gYXdhaXQoYXN5bmMgZT0+e2NvbnN0IHQ9YXdhaXQgZmluLlN5c3RlbS5nZXRNb25pdG9ySW5mbygpLG49W3QucHJpbWFyeU1vbml0b3IsLi4udC5ub25QcmltYXJ5TW9uaXRvcnNdO2Zvcihjb25zdCB0IG9mIG4paWYoMT09PWRlKGUsdCkpcmV0dXJuITE7cmV0dXJuITB9KShhKT8oYXdhaXQgdGUodCkuY2VudGVyKCksbW8oZSx0LG8pKTooY29uc29sZS53YXJuKFwiUmVzcG9uc2UgbW9kYWwgaXNuJ3Qgb2ZmIHNjcmVlbiwgbm90IGNlbnRlcmluZyBwYXJlbnQgd2luZG93XCIpLGEpfWNvbnN0IGJvPWFzeW5jKGUsdCxuKT0+e2NvbnN0e3dpbmRvd09wdGlvbnM6cixjb250ZW50Om99PWF3YWl0KGFzeW5jKGUsdCk9Pih7dGl0bGU6XCJTd2l0Y2ggV29ya3NwYWNlXCIsd2luZG93T3B0aW9uczp7dXJsOmF3YWl0IFUoKStLLlJlc3BvbnNlTW9kYWwsbmFtZTplZS5Ccm93c2VyTWVudSxkZWZhdWx0SGVpZ2h0OjEzNCxkZWZhdWx0V2lkdGg6NDEwLG1vZGFsUGFyZW50SWRlbnRpdHk6dH0sY29udGVudDp7dGl0bGU6Qm4oXCJzd2l0Y2hXb3Jrc3BhY2VNb2RhbFwiLHt3b3Jrc3BhY2U6ZX0pLGJvZHk6Qm4oXCJzd2l0Y2hXb3Jrc3BhY2VNb2RhbC53YXJuaW5nXCIpLGJ1dHRvbnM6e3JpZ2h0Olt7bGFiZWw6Qm4oXCJnbG9iYWwuY2FuY2VsXCIpLHR5cGU6XCJzZWNvbmRhcnlcIixpZDpcIkNhbmNlbFwifSx7bGFiZWw6Qm4oXCJnbG9iYWwuY29uZmlybVwiKSx0eXBlOlwicHJpbWFyeVwiLGlkOlwiQ29uZmlybVwifV19fX0pKSh0LG4/dm9pZCAwOmUpLGE9YXdhaXQgd28ocixlLG4pLGk9ey4uLnIsdG9wOmEudG9wLGxlZnQ6YS5sZWZ0fTtyZXR1cm5cIkNvbmZpcm1cIj09PShhd2FpdCBDbyh7b3B0aW9uczppLGNvbnRlbnQ6b30pKS5kYXRhLmFjdGlvbk5hbWV9LHlvPWFzeW5jKGUsdCk9Pntjb25zdHt3aW5kb3dPcHRpb25zOm4sY29udGVudDpyfT1hd2FpdChhc3luYyhlLHQpPT4oe3RpdGxlOlwiRGVsZXRlIFdvcmtzcGFjZVwiLHdpbmRvd09wdGlvbnM6e3VybDphd2FpdCBVKCkrSy5SZXNwb25zZU1vZGFsLG5hbWU6ZWUuQnJvd3Nlck1lbnUsZGVmYXVsdEhlaWdodDoxNDQsZGVmYXVsdFdpZHRoOjQxMCxtb2RhbFBhcmVudElkZW50aXR5OmV9LGNvbnRlbnQ6e3RpdGxlOkJuKFwiZGVsZXRlV29ya3NwYWNlTW9kYWxcIiksYm9keTpgJHt0fWAsYnV0dG9uczp7cmlnaHQ6W3tsYWJlbDpCbihcImdsb2JhbC5jYW5jZWxcIiksdHlwZTpcInNlY29uZGFyeVwiLGlkOlwiQ2FuY2VsXCJ9LHtsYWJlbDpCbihcImdsb2JhbC5jb25maXJtXCIpLHR5cGU6XCJwcmltYXJ5XCIsaWQ6XCJDb25maXJtXCJ9XX19fSkpKGUsdCksbz1hd2FpdCB3byhuLG4ubW9kYWxQYXJlbnRJZGVudGl0eSksYT17Li4ubix0b3A6by50b3AsbGVmdDpvLmxlZnR9O3JldHVyblwiQ29uZmlybVwiPT09KGF3YWl0IENvKHtvcHRpb25zOmEsY29udGVudDpyfSkpLmRhdGEuYWN0aW9uTmFtZX0seG89YXN5bmMoZSx0LG4pPT57Y29uc3R7d2luZG93T3B0aW9uczpyLGNvbnRlbnQ6b309YXdhaXQoYXN5bmMoZSx0KT0+KHt0aXRsZTpcIlBsYXRmb3JtIFF1aXRcIix3aW5kb3dPcHRpb25zOnt1cmw6YXdhaXQgVSgpK0suUmVzcG9uc2VNb2RhbCxuYW1lOmVlLkJyb3dzZXJNZW51LGRlZmF1bHRIZWlnaHQ6MTM0LGRlZmF1bHRXaWR0aDo0MTAsbW9kYWxQYXJlbnRJZGVudGl0eTp0fSxjb250ZW50Ont0aXRsZTpCbihcIlBsYXRmb3JtXCI9PT1lP1wiY2xvc2VQbGF0Zm9ybVwiOlwiY2xvc2VQbGF0Zm9ybS53b3Jrc3BhY2VcIix7d29ya3NwYWNlOmV9KSxib2R5OkJuKFwiY2xvc2VQbGF0Zm9ybS53YXJuaW5nXCIpLGJ1dHRvbnM6e3JpZ2h0Olt7bGFiZWw6Qm4oXCJnbG9iYWwuY2FuY2VsXCIpLHR5cGU6XCJzZWNvbmRhcnlcIixpZDpcIkNhbmNlbFwifSx7bGFiZWw6Qm4oXCJnbG9iYWwuY29uZmlybVwiKSx0eXBlOlwicHJpbWFyeVwiLGlkOlwiQ29uZmlybVwifV19fX0pKSh0LG4/dm9pZCAwOmUpLGE9YXdhaXQgd28ocixlLG4pLGk9ey4uLnIsdG9wOmEudG9wLGxlZnQ6YS5sZWZ0fTtyZXR1cm5cIkNvbmZpcm1cIj09PShhd2FpdCBDbyh7b3B0aW9uczppLGNvbnRlbnQ6b30pKS5kYXRhLmFjdGlvbk5hbWV9LGtvPWFzeW5jIGU9Pntjb25zdHt3aW5kb3dPcHRpb25zOnQsY29udGVudDpufT1hd2FpdChhc3luYyBlPT4oe3RpdGxlOlwiUmVzdG9yZSBDaGFuZ2VzXCIsd2luZG93T3B0aW9uczp7dXJsOmF3YWl0IFUoKStLLlJlc3BvbnNlTW9kYWwsbmFtZTplZS5Ccm93c2VyTWVudSxkZWZhdWx0SGVpZ2h0OjEzNCxkZWZhdWx0V2lkdGg6NDEwLG1vZGFsUGFyZW50SWRlbnRpdHk6ZX0sY29udGVudDp7dGl0bGU6Qm4oXCJyZXN0b3JlTW9kYWxcIiksYm9keTpCbihcIm1vZGFsLmRpc2NhcmRXYXJuaW5nXCIpLGJ1dHRvbnM6e3JpZ2h0Olt7bGFiZWw6Qm4oXCJnbG9iYWwuY2FuY2VsXCIpLHR5cGU6XCJzZWNvbmRhcnlcIixpZDpcIkNhbmNlbFwifSx7bGFiZWw6Qm4oXCJnbG9iYWwuY29uZmlybVwiKSx0eXBlOlwicHJpbWFyeVwiLGlkOlwiQ29uZmlybVwifV19fX0pKShlKSxyPWF3YWl0IHdvKHQsdC5tb2RhbFBhcmVudElkZW50aXR5KSxvPXsuLi50LHRvcDpyLnRvcCxsZWZ0OnIubGVmdH07cmV0dXJuXCJDb25maXJtXCI9PT0oYXdhaXQgQ28oe29wdGlvbnM6byxjb250ZW50Om59KSkuZGF0YS5hY3Rpb25OYW1lfSxTbz1hc3luYyhlLHQpPT57Y29uc3R7d2luZG93T3B0aW9uczpuLGNvbnRlbnQ6cn09YXdhaXQoYXN5bmMoZSx0KT0+e2NvbnN0IG49YXdhaXQgZmUoZSkscj1uZXcgVVJMKGF3YWl0IFUoKStLLlJlc3BvbnNlTW9kYWwpO3JldHVybiByLnNlYXJjaFBhcmFtcy5hcHBlbmQoXCJpc0VudGVycHJpc2VcIixgJHtufWApLHt0aXRsZTpcIkRlbGV0ZSBQYWdlXCIsd2luZG93T3B0aW9uczp7dXJsOnIudG9TdHJpbmcoKSxuYW1lOmVlLkJyb3dzZXJNZW51LGRlZmF1bHRIZWlnaHQ6MTcyLGRlZmF1bHRXaWR0aDo0NjQsbW9kYWxQYXJlbnRJZGVudGl0eTplfSxjb250ZW50Ont0aXRsZTpCbihcImVudGVycHJpc2VEZWxldGVNb2RhbC5kZWxldGVTdXBlcnRhYlwiLHt0aXRsZTp0fSksYm9keTpCbihcImVudGVycHJpc2VEZWxldGVNb2RhbC5kZWxldGVTdXBlcnRhYldhcm5pbmdcIiksYnV0dG9uczp7cmlnaHQ6W3tsYWJlbDpCbihcImdsb2JhbC5jYW5jZWxcIiksdHlwZTpcInNlY29uZGFyeVwiLGlkOlwiQ2FuY2VsXCJ9LHtsYWJlbDpCbihcImdsb2JhbC5kZWxldGVcIiksdHlwZTpcInByaW1hcnlcIixpZDpcIkRlbGV0ZVwifV19fX19KShlLHQpLG89YXdhaXQgd28obixuLm1vZGFsUGFyZW50SWRlbnRpdHkpLGE9ey4uLm4sdG9wOm8udG9wLGxlZnQ6by5sZWZ0fTtyZXR1cm5cIkRlbGV0ZVwiPT09KGF3YWl0IENvKHtvcHRpb25zOmEsY29udGVudDpyfSkpLmRhdGEuYWN0aW9uTmFtZX07YXN5bmMgZnVuY3Rpb24gT28oe29wdGlvbnM6ZSwuLi50fSl7dHJ5e2lmKCEoISFlPy5za2lwUHJvbXB0fHxhd2FpdCBibyhlPy5wcm9tcHRDb250YWluZXJXaW5kb3dJZGVudGl0eSx0LnRpdGxlLGU/LnNob3VsZENlbnRlck1vZGFsT25Nb25pdG9yKSkpcmV0dXJuITE7Y29uc3Qgbj1MdCgpO2F3YWl0IG4uYXBwbHlTbmFwc2hvdCh0LnNuYXBzaG90LHsuLi5lPy5hcHBseVNuYXBzaG90T3B0aW9ucz8/e30sY2xvc2VFeGlzdGluZ1dpbmRvd3M6ZT8uYXBwbHlTbmFwc2hvdE9wdGlvbnM/LmNsb3NlRXhpc3RpbmdXaW5kb3dzPz8hMH0pLE1vKHQpLFRyKGpyLlNVQ0NFU1MsQm4oXCJzdWNjZXNzSW5kaWNhdG9yLndvcmtzcGFjZVN3aXRjaGVkXCIpKS5jYXRjaChjb25zb2xlLndhcm4pfWNhdGNoKGUpe3JldHVybiBjb25zb2xlLmVycm9yKFwiZmFpbGVkIHRvIGFwcGx5IHRoZSBjdXJyZW50IHdvcmtzcGFjZTogXCIsZSksITF9cmV0dXJuITB9ZnVuY3Rpb24gTW8oZSl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGxvY2FsU3RvcmFnZSl0cnl7Y29uc3QgdD1KU09OLnN0cmluZ2lmeShlKTtkdChQZS5DdXJyZW50V29ya3NwYWNlSWQsdCl9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihcImZhaWxlZCB0byBzZXQgdGhlIGFjdGl2ZSB3b3Jrc3BhY2U6IFwiLGUpfX1hc3luYyBmdW5jdGlvbiBMbygpe2NvbnN0IGU9THQoKSx0PWF3YWl0IGUuZ2V0U25hcHNob3QoKTtyZXR1cm57d29ya3NwYWNlSWQ6SGUoKSx0aXRsZTphd2FpdCBqbygpLG1ldGFkYXRhOntBUElWZXJzaW9uOkJ9LHNuYXBzaG90OnR9fWFzeW5jIGZ1bmN0aW9uIF9vKCl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGxvY2FsU3RvcmFnZSlyZXR1cm4gTG8oKTtjb25zdCBlPXB0KFBlLkN1cnJlbnRXb3Jrc3BhY2VJZCk7aWYoIWUpcmV0dXJuIExvKCk7Y29uc3QgdD1KU09OLnBhcnNlKGUpLG49THQoKSxyPWF3YWl0IG4uZ2V0U25hcHNob3QoKTtyZXR1cm57Li4udCxtZXRhZGF0YTp7QVBJVmVyc2lvbjpCfSxzbmFwc2hvdDpyfX1jb25zdCBQbz1hc3luYygpPT4oYXdhaXQgcWUobmUpKS5kaXNwYXRjaCh6ZS5HZXRTYXZlZFdvcmtzcGFjZXMsdm9pZCAwKSxFbz1hc3luYyBlPT5hd2FpdChhc3luYyBlPT4oYXdhaXQgcWUobmUpKS5kaXNwYXRjaCh6ZS5HZXRTYXZlZFdvcmtzcGFjZSxlKSkoZS53b3Jrc3BhY2VJZCk/KGFzeW5jIGU9Pihhd2FpdCBxZShuZSkpLmRpc3BhdGNoKHplLlVwZGF0ZVNhdmVkV29ya3NwYWNlLGUpKSh7d29ya3NwYWNlSWQ6ZS53b3Jrc3BhY2VJZCx3b3Jrc3BhY2U6ZX0pOihhc3luYyBlPT4oYXdhaXQgcWUobmUpKS5kaXNwYXRjaCh6ZS5DcmVhdGVTYXZlZFdvcmtzcGFjZSxlKSkoe3dvcmtzcGFjZTplfSk7YXN5bmMgZnVuY3Rpb24gam8oZT1cIlVudGl0bGVkIFdvcmtzcGFjZVwiKXtjb25zdCB0PShhd2FpdCBQbygpKS5tYXAoKCh7dGl0bGU6ZX0pPT5lKSk7cmV0dXJuIHFuKGUsdCl9Y29uc3QgUm89ZT0+KHsuLi5lLHNuYXBzaG90OnsuLi5lLnNuYXBzaG90LHdpbmRvd3M6ZS5zbmFwc2hvdC53aW5kb3dzLm1hcCgoZT0+KHsuLi5lLHdvcmtzcGFjZVBsYXRmb3JtOnsuLi5lLndvcmtzcGFjZVBsYXRmb3JtLHBhZ2VzOmUud29ya3NwYWNlUGxhdGZvcm0/LnBhZ2VzPy5tYXAoKGU9Pih7Li4uZSxoYXNVbnNhdmVkQ2hhbmdlczohMX0pKSl9fSkpKX19KSxJbz1hc3luYyhlLHQpPT57Y29uc3Qgbj10Pz9MdCgpO2F3YWl0IG4uU3RvcmFnZS5zYXZlV29ya3NwYWNlKFJvKGUpKSxhd2FpdChhc3luYygpPT4oYXdhaXQgcWUobmUpKS5kaXNwYXRjaCh6ZS5NYXJrVW5zYXZlZFBhZ2VzQXNTYXZlZEludGVybmFsLHZvaWQgMCkpKCl9LFZvPWFzeW5jIGU9Pntjb25zdCB0PUx0KCksbj1hd2FpdCB0LmdldEN1cnJlbnRXb3Jrc3BhY2UoKSxyPWF3YWl0IHQuU3RvcmFnZS5nZXRXb3Jrc3BhY2VzKCksbz1uLndvcmtzcGFjZUlkO2lmKHIuc29tZSgoZT0+ZS53b3Jrc3BhY2VJZD09PW8pKSlhd2FpdCBJbyhuLHQpLGF3YWl0IHQuc2V0QWN0aXZlV29ya3NwYWNlKG4pLGF3YWl0IERyKEJuKFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VTYXZlZFwiKSxlKTtlbHNle2NvbnN0IG49dC5Ccm93c2VyLndyYXBTeW5jKGUpO2F3YWl0IG4uX29wZW5TYXZlTW9kYWwoe21lbnVUeXBlOlMuU0FWRV9XT1JLU1BBQ0V9KX19LEhvPWU9PntMdCgpLkJyb3dzZXIud3JhcFN5bmMoZSkuX29wZW5TYXZlTW9kYWwoe21lbnVUeXBlOlMuU0FWRV9XT1JLU1BBQ0VfQVN9KX0sQW89YXN5bmMgZT0+e2NvbnN0IHQ9THQoKS5Ccm93c2VyLndyYXBTeW5jKGUpLHtuZXdQYWdlVXJsOm59PWF3YWl0IEJyKCkscj1hd2FpdCAkcihlKSxvPW58fHZvaWQgMDthd2FpdCB0Ll9hZGREZWZhdWx0UGFnZSh7aWRlbnRpdHk6ZSxwYWdlOnIsbmV3UGFnZVVybDpvfSl9LFRvPWFzeW5jKGUsdCk9Pntjb25zdCBuPUx0KCkuQnJvd3Nlci53cmFwU3luYyhlKSxyPWF3YWl0IEx0KCkuU3RvcmFnZS5nZXRQYWdlcygpLG89KGF3YWl0IG4uZ2V0UGFnZXMoKSkuZmluZCgoZT0+dD9lLnBhZ2VJZD09PXQ6ZS5pc0FjdGl2ZSkpLGE9ci5zb21lKChlPT5vLnBhZ2VJZD09PWUucGFnZUlkKSksaT1hd2FpdCBmZShlKTtpZihhKXRyeXthd2FpdCBMdCgpLlN0b3JhZ2Uuc2F2ZVBhZ2UoKHU9byx7Li4udSxoYXNVbnNhdmVkQ2hhbmdlczp2b2lkIDAscGFyZW50SWRlbnRpdHk6dm9pZCAwLGlzQWN0aXZlOnZvaWQgMCxsYXlvdXQ6SHQodS5sYXlvdXQpfSkpLGF3YWl0IG4udXBkYXRlUGFnZSh7cGFnZUlkOm8ucGFnZUlkLHBhZ2U6e2hhc1Vuc2F2ZWRDaGFuZ2VzOiExfX0pLERyKEJuKGk/XCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYlNhdmVkXCI6XCJzdWNjZXNzSW5kaWNhdG9yLnBhZ2VTYXZlZFwiKSxlLEJuKGk/XCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYkhhc0JlZW5TYXZlZFwiOlwic3VjY2Vzc0luZGljYXRvci5wYWdlSGFzQmVlblNhdmVkXCIse3RpdGxlOm8udGl0bGV9KSl9Y2F0Y2h7bD1CbihcImVycm9ySW5kaWNhdG9yLnBhZ2VTYXZlRmFpbGVkXCIpLHM9by5wYXJlbnRJZGVudGl0eS5uYW1lLFRyKGpyLkVSUk9SLGwscyxjKX1lbHNlIG4uX29wZW5TYXZlTW9kYWwoe2lkOm8ucGFnZUlkLG1lbnVUeXBlOlMuU0FWRV9QQUdFfSk7dmFyIGwscyxjLHV9LERvPWFzeW5jKGUsdCk9Pntjb25zdCBuPUx0KCkuQnJvd3Nlci53cmFwU3luYyhlKSxyPShhd2FpdCBuLmdldFBhZ2VzKCkpLmZpbmQoKGU9PnQ/ZS5wYWdlSWQ9PT10OmUuaXNBY3RpdmUpKTtuLl9vcGVuU2F2ZU1vZGFsKHtpZDpyLnBhZ2VJZCxtZW51VHlwZTpTLlNBVkVfUEFHRV9BU30pLHllKHt0eXBlOlwiUGFnZSBNb2RhbFwiLGFjdGlvbjpcIlNlbGVjdCBTYXZlIEFzXCIsdmFsdWU6ci50aXRsZSxza2lwVmFsdWVIYXNoaW5nOiEwfSl9LEJvPXt0aXRsZTpcIkRvd25sb2Fkc1wiLHBhZ2VJZDpcImRvd25sb2Fkcy1wYWdlLWlkXCIsbGF5b3V0Ontjb250ZW50Olt7dHlwZTpcInN0YWNrXCIsY29udGVudDpbe3R5cGU6XCJjb21wb25lbnRcIixjb21wb25lbnROYW1lOlwidmlld1wiLGNvbXBvbmVudFN0YXRlOntuYW1lOlwic2hvdy1kb3dubG9hZC12aWV3XCIsdXJsOlwiY2hyb21lOi8vZG93bmxvYWRzL1wifX1dfV19fSxabz1hc3luYyBlPT57Y29uc3QgdD10ZShlKSxuPWF3YWl0IHQuZ2V0Q3VycmVudFZpZXdzKCkscj0oYXdhaXQgTHQoKS5Ccm93c2VyLndyYXBTeW5jKHQuaWRlbnRpdHkpLmdldFBhZ2VzKCkpLmZpbmQoKGU9PmUuaXNBY3RpdmUpKTt0cnl7Y29uc3QgdD0oYXdhaXQgUHJvbWlzZS5hbGwobi5tYXAoKGFzeW5jIGU9Pih7aWRlbnRpdHk6ZS5pZGVudGl0eSxpbmZvOmF3YWl0IGZpbi5WaWV3LndyYXBTeW5jKGUuaWRlbnRpdHkpLmdldEluZm8oKX0pKSkpKS5maW5kKChlPT5cImNocm9tZTovL2Rvd25sb2Fkcy9cIj09PWUuaW5mby51cmwpKTtpZih0KWF3YWl0IGZpbi5WaWV3LndyYXBTeW5jKHQuaWRlbnRpdHkpLmZvY3VzKCk7ZWxzZXtjb25zdCB0PUx0KCk7aWYocj8uaXNMb2NrZWQpe2NvbnN0IGU9KGF3YWl0IGZpbi5BcHBsaWNhdGlvbi5nZXRDdXJyZW50U3luYygpLmdldENoaWxkV2luZG93cygpKS5maW5kKChlPT5cInNob3ctZG93bmxvYWQtd2luZG93XCI9PT1lLmlkZW50aXR5Lm5hbWUpKTtyZXR1cm4gdm9pZChlP2F3YWl0IGUuZm9jdXMoKTp0LkJyb3dzZXIuY3JlYXRlV2luZG93KHtuYW1lOlwic2hvdy1kb3dubG9hZC13aW5kb3dcIix3b3Jrc3BhY2VQbGF0Zm9ybTp7cGFnZXM6W0JvXX19KSl9KGF3YWl0IEx0KCkuY3JlYXRlVmlldyh7bmFtZTpcInNob3ctZG93bmxvYWQtdmlld1wiLHVybDpcImNocm9tZTovL2Rvd25sb2Fkcy9cIix0YXJnZXQ6ZX0sZSkpLmZvY3VzKCl9fWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoXCJDb3VsZG4ndCBvcGVuIGRvd25sb2FkcyB2aWV3XCIsZSl9fSwkbz1hc3luYyBlPT57Y29uc3QgdD1lLm1hcCgoZT0+ZmluLlZpZXcud3JhcFN5bmMoZSkucHJpbnQoKSkpO2F3YWl0IFByb21pc2UuYWxsKHQpfSxObz1lPT57Y29uc3RbdCxuLHJdPWUuc3BsaXQoXCIuXCIpLm1hcCgoZT0+XCJ4XCI9PT1lPzA6MSkpO3JldHVybiAxMDAqdCsxMCpuKzEqcn07Y2xhc3MgRm8gZXh0ZW5kcyBFcnJvcnt9Y29uc3QgV289YXN5bmMgZT0+e3RyeXtjb25zdCBuPWF3YWl0IGFzeW5jIGZ1bmN0aW9uKCl7Y29uc3QgZT1hd2FpdCBGKCksdD1lPy50cmFuc2xhdGlvbk92ZXJyaWRlc1VybD8/XCJodHRwczovL3dvcmtzcGFjZS5vcGVuZmluLmNvL3dvcmtzcGFjZS9hc3NldHMvdHJhbnNsYXRpb24tb3ZlcnJpZGUuanNvblwiO2lmKFwiXCI9PT10KXRocm93IG5ldyBGbyhcIkVtcHR5IHN0cmluZyBwcm92aWRlZCBhcyB1cmwgdG8gdHJhbnNsYXRpb25PdmVycmlkZXNVcmwsIG92ZXJyaWRlcyB3aWxsIG5vdCBiZSBmZXRjaGVkLlwiKTtyZXR1cm4gYXdhaXQgZmV0Y2godCkudGhlbigoZT0+ZS5qc29uKCkpKX0oKSxyPSh0PShlPT57Y29uc3QgdD1CLnNwbGl0KFwiLlwiKTtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZmlsdGVyKChlPT57Y29uc3Qgbj1lLnNwbGl0KFwiLlwiKTtpZigzIT09bi5sZW5ndGgpcmV0dXJuIGNvbnNvbGUud2FybihgRW5jb3VudGVyZWQgYSB0cmFuc2xhdGlvbiBvdmVycmlkZSB2ZXJzaW9uIHN0cmluZyBpbiBhbiB1bnN1cHBvcnRlZCBmb3JtYXQ6ICR7ZX0uIFZlcnNpb25zIG11c3QgYmUgaW4gQS5CLkMgZm9ybWF0IHdoZXJlIEEsIEIsIEMgYXJlIGVpdGhlciBpbnRlZ2VycyBvciB0aGUgd2lsZGNhcmQgc3ltYm9sICd4Jy5gKSwhMTtjb25zdFtyLG8sYV09bjtyZXR1cm4hKHIhPT10WzBdJiZcInhcIiE9PXJ8fG8hPT10WzFdJiZcInhcIiE9PW98fGEhPT10WzJdJiZcInhcIiE9PWEpfSkpfSkobiksWy4uLnRdLnNvcnQoKChlLHQpPT5ObyhlKS1Obyh0KSkpKTtyLmZvckVhY2goKHQ9Pntjb25zdCByPW5bdF07T2JqZWN0LmtleXMocikuZm9yRWFjaCgodD0+e2UuYWRkUmVzb3VyY2VCdW5kbGUodCxcInRyYW5zbGF0aW9uXCIsclt0XSwhMCwhMCl9KSl9KSl9Y2F0Y2goZSl7ZSBpbnN0YW5jZW9mIEZvP2NvbnNvbGUud2FybihlLm1lc3NhZ2UpOmNvbnNvbGUuZXJyb3IoXCJFcnJvciBhcHBseWluZyBhIHRyYW5zbGF0aW9uIG92ZXJyaWRlOiBcIixlKX12YXIgdH07ZnVuY3Rpb24gVW8oKXtyZXR1cm4gam4ubGFuZ3VhZ2V9Y29uc3Qgem89YXN5bmMgZT0+e3FvKGUpLChlPT57am4uY2hhbmdlTGFuZ3VhZ2UoZSl9KShlKSxhd2FpdChhc3luYyBlPT57Y29uc3QgdD1hd2FpdCBpZSgpO3JldHVybiBQcm9taXNlLmFsbCh0Lm1hcCgoYXN5bmMgdD0+e2NvbnN0IG49YXdhaXQgdHQodC5pZGVudGl0eSk7YXdhaXQgbi5kaXNwYXRjaChpdC5TZXRTZWxlY3RlZExhbmd1YWdlLGUpfSkpKX0pKGUpfTtmdW5jdGlvbiBHbygpe2lmKCFqbi5vcHRpb25zLnJlc291cmNlcyl0aHJvdyBuZXcgRXJyb3IoXCJObyBsYW5ndWFnZSByZXNvdXJjZXMgZm91bmRcIik7cmV0dXJue2N1cnJlbnRMYW5ndWFnZTpVbygpLHJlc291cmNlczpqbi5vcHRpb25zLnJlc291cmNlc319YXN5bmMgZnVuY3Rpb24gS28oZT1cImVuLVVTXCIpe3FvKGUpLGZ1bmN0aW9uKGU9XCJlbi1VU1wiKXtqbi51c2UoV3QpLmluaXQoe2xuZzplLGZhbGxiYWNrTG5nOlwiZW4tVVNcIixyZXNvdXJjZXM6e1wiZW4tVVNcIjp7dHJhbnNsYXRpb246Vm59LFwiamEtSlBcIjp7dHJhbnNsYXRpb246QW59LFwiemgtQ05cIjp7dHJhbnNsYXRpb246Um59LFwia28tS1JcIjp7dHJhbnNsYXRpb246VG59LFwicnUtUlVcIjp7dHJhbnNsYXRpb246RG59LFwiZGUtREVcIjp7dHJhbnNsYXRpb246SG59LFwiemgtSGFudFwiOnt0cmFuc2xhdGlvbjpJbn19fSl9KGUpLGF3YWl0IFdvKGpuKX1mdW5jdGlvbiBxbyhlKXtpZighTS5TVVBQT1JURURfTEFOR1VBR0VTLmluY2x1ZGVzKGUpKXRocm93IG5ldyBFcnJvcihgVGhlIElTTyBsYW5ndWFnZSBwcm92aWRlZCAke2V9IGlzIG5vdCBzdXBwb3J0ZWRgKX1jb25zdCBZbz1bXCJncmVlblwiLFwicHVycGxlXCIsXCJvcmFuZ2VcIixcInJlZFwiLFwicGlua1wiLFwieWVsbG93XCJdLEpvPVwiQ09OVEVYVF9HUk9VUF9QQUdFXCIsWG89KCk9PmU9PmNsYXNzIGV4dGVuZHMgZXtnZXRDb250ZXh0R3JvdXBzKCl7cmV0dXJuIHN1cGVyLmdldENvbnRleHRHcm91cHMoKS5tYXAoKGU9PllvLmluY2x1ZGVzKGUuZGlzcGxheU1ldGFkYXRhPy5uYW1lKT97Li4uZSxkaXNwbGF5TWV0YWRhdGE6ey4uLmUuZGlzcGxheU1ldGFkYXRhLG5hbWU6Qm4oZS5kaXNwbGF5TWV0YWRhdGE/Lm5hbWUpfX06ZSkpfX0sUW89KCk9Pntjb25zdCBlPW5ldyBTZXQ7cmV0dXJuIHQ9PmNsYXNzIGV4dGVuZHMgdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5vbkNsaWVudENvbm5lY3RlZD1lPT57ZS5uYW1lLnN0YXJ0c1dpdGgoXCJpbnRlcm5hbC1nZW5lcmF0ZWQtdmlld1wiKSYmdGhpcy5qb2luQ29udGV4dEdyb3VwKHtjb250ZXh0R3JvdXBJZDpKbyx0YXJnZXQ6ZX0se3V1aWQ6dGhpcy5maW4ubWUudXVpZCxuYW1lOnRoaXMuZmluLm1lLm5hbWV9KX07Y29uc3QgZT10aGlzLmludGVyb3BDbGllbnRzLnNldDt0aGlzLmludGVyb3BDbGllbnRzLnNldD0odCxuKT0+e2UuY2FsbCh0aGlzLmludGVyb3BDbGllbnRzLHQsbiksdGhpcy5vbkNsaWVudENvbm5lY3RlZChuLmNsaWVudElkZW50aXR5KX19YXN5bmMgam9pbkNvbnRleHRHcm91cCh7Y29udGV4dEdyb3VwSWQ6dCx0YXJnZXQ6bn0scil7aWYodCE9PUpvKXJldHVybiBzdXBlci5qb2luQ29udGV4dEdyb3VwKHtjb250ZXh0R3JvdXBJZDp0LHRhcmdldDpufSxyKTt0cnl7Y29uc3QgdD1hd2FpdCB0aGlzLmZpbi5WaWV3LndyYXBTeW5jKG4pLmdldFBhcmVudExheW91dCgpLHtzZXR0aW5nczp7cGFnZUlkOm99fT1hd2FpdCB0LmdldENvbmZpZygpO2lmKCFvKXRocm93IG5ldyBFcnJvcihcIlZpZXcgZG9lcyBub3QgYmVsb25nIHRvIGEgcGFnZVwiKTtpZighZS5oYXMobykmJihlLmFkZChvKSwhdGhpcy5jb250ZXh0R3JvdXBzQnlJZC5oYXMobykpKXtjb25zdCBlPW5ldyBNYXA7dGhpcy5jb250ZXh0R3JvdXBzQnlJZC5zZXQobyxlKX1hd2FpdCBzdXBlci5qb2luQ29udGV4dEdyb3VwKHtjb250ZXh0R3JvdXBJZDpvLHRhcmdldDpufSxyKSxuLm5hbWV9Y2F0Y2goZSl7SlNPTi5zdHJpbmdpZnkobiksZS5zdGFja319Z2V0Q29udGV4dEdyb3Vwcygpe3JldHVyblsuLi5BcnJheS5mcm9tKGUpLm1hcCgoZT0+KHtpZDplLGRpc3BsYXlNZXRhZGF0YTp7fX0pKSldfXNldENvbnRleHRGb3JHcm91cChlLHQpe2lmKCF0aGlzLmNvbnRleHRHcm91cHNCeUlkLmhhcyh0KSl7Y29uc3QgZT1uZXcgTWFwO3RoaXMuY29udGV4dEdyb3Vwc0J5SWQuc2V0KHQsZSl9cmV0dXJuIHN1cGVyLnNldENvbnRleHRGb3JHcm91cChlLHQpfX19LGVhPShlLHQpPT57Y29uc3Qgbj0oZT0+aGUoZSk/UW8oKTpYbygpKSh0KTt0cnl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZT90PT5lKG4odCkpOkFycmF5LmlzQXJyYXkoZSk/Wy4uLmUsbl06ZT0+bmV3KG4oZSkpfWNhdGNoKGUpe3Rocm93IG5ldyBFcnJvcihcIldvcmtzcGFjZVBsYXRmb3JtLmluaXQgRXJyb3I6XCIsZSl9fTthc3luYyBmdW5jdGlvbiB0YSgpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBsb2NhbFN0b3JhZ2UpdHJ5e2NvbnN0IGU9cHQoUGUuTGFzdEZvY3VzZWRCcm93c2VyV2luZG93KTtpZighZSlyZXR1cm47Y29uc3QgdD1KU09OLnBhcnNlKGUpO2lmKGF3YWl0IHNlKHQpKXJldHVybiB0fWNhdGNoKGUpe3Rocm93IG5ldyBFcnJvcihgZmFpbGVkIHRvIGdldCBsYXN0IGZvY3VzZWQgYnJvd3NlciB3aW5kb3c6ICR7ZX1gKX19YXN5bmMgZnVuY3Rpb24gbmEoZT1maW4ubWUuaWRlbnRpdHkpe2F3YWl0IGFlKGUpJiZmdW5jdGlvbihlKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgbG9jYWxTdG9yYWdlKXRyeXtjb25zdCB0PUpTT04uc3RyaW5naWZ5KGUpO2R0KFBlLkxhc3RGb2N1c2VkQnJvd3NlcldpbmRvdyx0KX1jYXRjaChlKXtjb25zb2xlLmVycm9yKFwiZmFpbGVkIHRvIHNhdmUgbGFzdCBmb2N1c2VkIGJyb3dzZXIgd2luZG93OiBcIixlKX19KGUpfWNvbnN0IHJhPV9lKCkoKGFzeW5jKCk9Pntjb25zdCBlPWF3YWl0IGZpbi5QbGF0Zm9ybS5nZXRDdXJyZW50U3luYygpLkFwcGxpY2F0aW9uLmdldENoaWxkV2luZG93cygpO2xldCB0LG49ITE7Zm9yKGNvbnN0IHIgb2YgZSlpZihyLmlkZW50aXR5Lm5hbWU9PT1lZS5Ccm93c2VyTWVudXx8ci5pZGVudGl0eS5uYW1lPT09ZWUuQnJvd3NlclNhdmVNZW51P3Q9cjphd2FpdCBhZShyLmlkZW50aXR5KSYmKG49ITApLG4pYnJlYWs7IW4mJnQmJnQuY2xvc2UoKX0pLDEwMCx7bGVhZGluZzohMSx0cmFpbGluZzohMH0pLG9hPWFzeW5jKCk9PntRKCkub24oXCJ3aW5kb3ctY2xvc2VkXCIscmEpfTtsZXQgYWE9e307Y29uc3QgaWE9YXN5bmMoe2FjdGlvbklkOmUscGF5bG9hZDp0fSk9PntpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBhYVtlXSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIGEgY29uZmlndXJlZCBmdW5jdGlvbiBmb3IgdGhlIGFjdGlvbiAnJHtlfSdgKTtyZXR1cm4gYWFbZV0odCl9LGxhPSgpPT5gY3VzdG9tLWNvbnRleHQtbWVudS0ke0x0KCkuaWRlbnRpdHkudXVpZH0tJHtCfWAsc2E9KCk9PmZpbi5JbnRlckFwcGxpY2F0aW9uQnVzLkNoYW5uZWwuY29ubmVjdChsYSgpKTt2YXIgY2E7IWZ1bmN0aW9uKGUpe2UuTGFiZWw9XCJub3JtYWxcIixlLlNlcGFyYXRvcj1cInNlcGFyYXRvclwiLGUuU3VibWVudT1cInN1Ym1lbnVcIixlLkNoZWNrYm94PVwiY2hlY2tib3hcIn0oY2F8fChjYT17fSkpO2NvbnN0IHVhPXt0eXBlOmNhLlNlcGFyYXRvcixkYXRhOnZvaWQgMH07dmFyIGRhOyFmdW5jdGlvbihlKXtlLlNhdmU9XCJTYXZlXCIsZS5TYXZlQXM9XCJTYXZlQXNcIn0oZGF8fChkYT17fSkpO3ZhciBwYTshZnVuY3Rpb24oZSl7ZS5HbG9iYWxNZW51PVwiZ2xvYmFsLW1lbnVcIixlLkNvbnRleHRNZW51PVwiY29udGV4dC1tZW51XCIsZS5SZW5hbWVTdXBlcnRhYj1cInJlbmFtZS1zdXBlcnRhYlwiLGUuQWRkRWRpdEJvb2ttYXJrPVwiYWRkLWVkaXQtYm9va21hcmtcIixlLkRyb3Bkb3duTWVudT1cImRyb3Bkb3duLW1lbnVcIn0ocGF8fChwYT17fSkpO2Z1bmN0aW9uIGZhKGUpe3JldHVybiBuZXcgUHJvbWlzZSgoKHQsbik9PntlLm9uY29tcGxldGU9ZS5vbnN1Y2Nlc3M9KCk9PnQoZS5yZXN1bHQpLGUub25hYm9ydD1lLm9uZXJyb3I9KCk9Pm4oZS5lcnJvcil9KSl9ZnVuY3Rpb24gaGEoZSx0KXtjb25zdCBuPWluZGV4ZWREQi5vcGVuKGUpO24ub251cGdyYWRlbmVlZGVkPSgpPT5uLnJlc3VsdC5jcmVhdGVPYmplY3RTdG9yZSh0KTtjb25zdCByPWZhKG4pO3JldHVybihlLG4pPT5yLnRoZW4oKHI9Pm4oci50cmFuc2FjdGlvbih0LGUpLm9iamVjdFN0b3JlKHQpKSkpfWxldCBnYTtmdW5jdGlvbiB2YSgpe3JldHVybiBnYXx8KGdhPWhhKFwia2V5dmFsLXN0b3JlXCIsXCJrZXl2YWxcIikpLGdhfWZ1bmN0aW9uIENhKGUsdD12YSgpKXtyZXR1cm4gdChcInJlYWRvbmx5XCIsKHQ9PmZhKHQuZ2V0KGUpKSkpfWZ1bmN0aW9uIG1hKGUsdCxuPXZhKCkpe3JldHVybiBuKFwicmVhZHdyaXRlXCIsKG49PihuLnB1dCh0LGUpLGZhKG4udHJhbnNhY3Rpb24pKSkpfWZ1bmN0aW9uIHdhKGUsdD12YSgpKXtyZXR1cm4gdChcInJlYWR3cml0ZVwiLCh0PT4odC5kZWxldGUoZSksZmEodC50cmFuc2FjdGlvbikpKSl9ZnVuY3Rpb24gYmEoZSx0KXtyZXR1cm4gZS5vcGVuQ3Vyc29yKCkub25zdWNjZXNzPWZ1bmN0aW9uKCl7dGhpcy5yZXN1bHQmJih0KHRoaXMucmVzdWx0KSx0aGlzLnJlc3VsdC5jb250aW51ZSgpKX0sZmEoZS50cmFuc2FjdGlvbil9ZnVuY3Rpb24geWEoZT12YSgpKXtyZXR1cm4gZShcInJlYWRvbmx5XCIsKGU9PntpZihlLmdldEFsbEtleXMpcmV0dXJuIGZhKGUuZ2V0QWxsS2V5cygpKTtjb25zdCB0PVtdO3JldHVybiBiYShlLChlPT50LnB1c2goZS5rZXkpKSkudGhlbigoKCk9PnQpKX0pKX1mdW5jdGlvbiB4YShlPXZhKCkpe3JldHVybiBlKFwicmVhZG9ubHlcIiwodD0+e2lmKHQuZ2V0QWxsJiZ0LmdldEFsbEtleXMpcmV0dXJuIFByb21pc2UuYWxsKFtmYSh0LmdldEFsbEtleXMoKSksZmEodC5nZXRBbGwoKSldKS50aGVuKCgoW2UsdF0pPT5lLm1hcCgoKGUsbik9PltlLHRbbl1dKSkpKTtjb25zdCBuPVtdO3JldHVybiBlKFwicmVhZG9ubHlcIiwoZT0+YmEoZSwoZT0+bi5wdXNoKFtlLmtleSxlLnZhbHVlXSkpKS50aGVuKCgoKT0+bikpKSl9KSl9Y29uc3Qga2E9YXN5bmMoZSx0LG4pPT57Y29uc3Qgcj1wdChQZS5IYXNNb3ZlZFN0b3JlKSxvPXI/SlNPTi5wYXJzZShyKTp7fTtpZihvJiZvW25dKXJldHVybjtvW25dPSEwLGR0KFBlLkhhc01vdmVkU3RvcmUsSlNPTi5zdHJpbmdpZnkobykpO2NvbnN0IGE9YXdhaXQgeGEoZSk7YXdhaXQgZnVuY3Rpb24oZSx0PXZhKCkpe3JldHVybiB0KFwicmVhZHdyaXRlXCIsKHQ9PihlLmZvckVhY2goKGU9PnQucHV0KGVbMV0sZVswXSkpKSxmYSh0LnRyYW5zYWN0aW9uKSkpKX0oYSx0KX0sU2E9KGUsdCk9PmhhKGUrXCItXCIrZmluLm1lLnV1aWQsdCksT2E9KGUsdCk9Pntjb25zdCBuPVNhKGUsdCkscj1oYShlLHQpO3JldHVybiBrYShyLG4sZSksbn0sTWE9KGUsdD1cIlwiKT0+ZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHQudG9Mb3dlckNhc2UoKSksTGE9UCYmTCYmT2EoXCJvcGVuZmluLWhvbWUtcGFnZXNcIixcInBhZ2VzXCIpO2FzeW5jIGZ1bmN0aW9uIF9hKGUpe2lmKCFMYSl0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gZ2V0IHBhZ2UgLSBJbmRleERCIG5vdCBzdXBwb3J0ZWRcIik7Y29uc3QgdD1hd2FpdCBDYShlLExhKTtpZih0KXJldHVybiB0LnBhZ2VJZD1lLnRvU3RyaW5nKCksdC50aXRsZT10LnRpdGxlfHx0LnBhZ2VJZCx0fWFzeW5jIGZ1bmN0aW9uIFBhKGUpe2lmKCFMYSl0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gZ2V0IHBhZ2UgbGlzdCAtIEluZGV4REIgbm90IHN1cHBvcnRlZFwiKTtjb25zdCB0PWF3YWl0IHlhKExhKSxuPShhd2FpdCBQcm9taXNlLmFsbCh0Lm1hcCgoZT0+X2EoZS50b1N0cmluZygpKSkpKSkuZmlsdGVyKChlPT4hIWUpKTtyZXR1cm4gZT9uLmZpbHRlcigodD0+TWEodC50aXRsZSxlKSkpOm59YXN5bmMgZnVuY3Rpb24gRWEoe3BhZ2U6ZX0pe2lmKCFMYSl0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gY3JlYXRlIHBhZ2UgLSBJbmRleERCIG5vdCBzdXBwb3J0ZWRcIik7YXdhaXQgbWEoZS5wYWdlSWQsZSxMYSl9YXN5bmMgZnVuY3Rpb24gamEoZSl7aWYoIUxhKXRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBkZWxldGUgcGFnZSAtIEluZGV4REIgbm90IHN1cHBvcnRlZFwiKTthd2FpdCB3YShlLExhKX1hc3luYyBmdW5jdGlvbiBSYSh7cGFnZUlkOmUscGFnZTp0fSl7aWYoIUxhKXRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byB1cGRhdGUgcGFnZSAtIEluZGV4REIgbm90IHN1cHBvcnRlZFwiKTtpZih2b2lkIDA9PT1hd2FpdCBfYShlKSl0aHJvdyBuZXcgRXJyb3IoXCJwYWdlIG5vdCBmb3VuZFwiKTthd2FpdCBFYSh7cGFnZTp0fSksZSE9PXQucGFnZUlkJiZhd2FpdCBqYShlKX1jb25zdCBJYT1QJiZMJiZTYShcIm9wZW5maW4tZW50ZXJwcmlzZS10YWItaGlzdG9yeVwiLFwicmVtb3ZlZC10YWItc3RhY2tcIiksVmE9YXN5bmMgZT0+e21hKERhdGUubm93KCksZSxJYSl9LEhhPVAmJkwmJlNhKFwib3BlbmZpbi1lbnRlcnByaXNlLXNpdGUtaGlzdG9yeVwiLFwidmlzaXRlZC1zaXRlc1wiKSxBYT1hc3luYyBlPT57aWYoXCJ3ZWJzaXRlXCI9PT1lLnR5cGUpe2xldCB0PWF3YWl0IENhKGUudXJsLEhhKTt0Pyh0Lmljb249ZS5pY29uLHQudGl0bGU9ZS50aXRsZSx0LnR5cGU9ZS50eXBlLHQudmlzaXRDb3VudD0odC52aXNpdENvdW50fHwwKSsxKTp0PXt1cmw6ZS51cmwsaWNvbjplLmljb24sdGl0bGU6ZS50aXRsZSx0eXBlOmUudHlwZSx2aXNpdENvdW50OjF9LHQuYWNjZXNzVGltZT1EYXRlLm5vdygpLG1hKHQudXJsLHQsSGEpfX0sVGE9YXN5bmMoKT0+e2NvbnN0IGU9YXdhaXQgeGEoSGEpO2lmKGUubGVuZ3RoPjApe2Uuc29ydCgoKGUsdCk9PnRbMV0udmlzaXRDb3VudC1lWzFdLnZpc2l0Q291bnQpKTtyZXR1cm4oZS5sZW5ndGg+NT9lLnNsaWNlKDAsNSk6ZSkubWFwKChlPT5lWzFdKSl9cmV0dXJuW119LERhPWFzeW5jKCk9Pihhd2FpdCBmaW4uU3lzdGVtLmdldEhvc3RTcGVjcygpKS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJ3aW5kb3dzXCIpLEJhPSgpPT4oe3R5cGU6Y2EuTGFiZWwsbGFiZWw6Qm4oXCJjb250ZXh0TWVudS5jbG9zZVdpbmRvd1wiKSxkYXRhOnt0eXBlOmguQ2xvc2VXaW5kb3d9fSksWmE9ZT0+KHt0eXBlOmNhLkxhYmVsLGxhYmVsOkJuKGU/XCJjb250ZXh0TWVudS5xdWl0RW50ZXJwcmlzZUJyb3dzZXJcIjpcImNvbnRleHRNZW51LnF1aXRQbGF0Zm9ybVwiKSxkYXRhOnt0eXBlOmguUXVpdH19KSwkYT0oKT0+KHt0eXBlOmNhLkxhYmVsLGxhYmVsOkJuKFwiY29udGV4dE1lbnUubmV3V2luZG93XCIpLGRhdGE6e3R5cGU6aC5OZXdXaW5kb3d9fSksTmE9ZT0+KHt0eXBlOmNhLkxhYmVsLGxhYmVsOkJuKGU/XCJlbnRlcnByaXNlQ29udGV4dE1lbnUuc2F2ZVN1cGVydGFiXCI6XCJjb250ZXh0TWVudS5zYXZlUGFnZVwiKSxkYXRhOnt0eXBlOmguU2F2ZVBhZ2V9fSksRmE9ZT0+KHt0eXBlOmNhLkxhYmVsLGxhYmVsOkJuKGU/XCJlbnRlcnByaXNlQ29udGV4dE1lbnUuc2F2ZVN1cGVydGFiQXNcIjpcImNvbnRleHRNZW51LnNhdmVQYWdlQXNcIiksZGF0YTp7dHlwZTpoLlNhdmVQYWdlQXN9fSksV2E9KGUsdCk9Pih7dHlwZTpjYS5MYWJlbCxsYWJlbDpCbih0P1wiZW50ZXJwcmlzZUNvbnRleHRNZW51Lm5ld1RhYlwiOlwiY29udGV4dE1lbnUubmV3UGFnZVwiKSxkYXRhOnt0eXBlOmguTmV3UGFnZX0sZW5hYmxlZDplfSksVWE9KCk9Pih7bGFiZWw6Qm4oXCJjb250ZXh0TWVudS5zd2l0Y2hXb3Jrc3BhY2VcIil9KSx6YT0oKT0+KHtsYWJlbDpCbihcImNvbnRleHRNZW51LmRlbGV0ZVdvcmtzcGFjZVwiKX0pLEdhPSgpPT4oe2xhYmVsOkJuKFwiY29udGV4dE1lbnUuYXBwZWFyYW5jZVwiKX0pLEthPShlLHQsbik9PnQubWFwKCh0PT57Y29uc3Qgcj10LndvcmtzcGFjZUlkPT09ZS53b3Jrc3BhY2VJZDtyZXR1cm57bGFiZWw6dC50aXRsZSx0eXBlOmNhLkNoZWNrYm94LGVuYWJsZWQ6IXIsY2hlY2tlZDpyLGRhdGE6e3R5cGU6bix3b3Jrc3BhY2VJZDp0LndvcmtzcGFjZUlkfX19KSkscWE9YXN5bmMoKT0+e2NvbnN0IGU9YXdhaXQgTHQoKS5UaGVtZS5nZXRTZWxlY3RlZFNjaGVtZSgpO3JldHVyblt7bGFiZWw6Qm4oXCJ0aGVtZS5saWdodFwiKSx0eXBlOmNhLkNoZWNrYm94LGNoZWNrZWQ6ZT09PWcuTGlnaHQsZGF0YTp7dHlwZTpoLkFwcGVhcmFuY2Usc2NoZW1lOmcuTGlnaHR9fSx7bGFiZWw6Qm4oXCJ0aGVtZS5kYXJrXCIpLHR5cGU6Y2EuQ2hlY2tib3gsY2hlY2tlZDplPT09Zy5EYXJrLGRhdGE6e3R5cGU6aC5BcHBlYXJhbmNlLHNjaGVtZTpnLkRhcmt9fSx7bGFiZWw6Qm4oXCJ0aGVtZS5zeXN0ZW1cIiksdHlwZTpjYS5DaGVja2JveCxjaGVja2VkOmU9PT1nLlN5c3RlbSxkYXRhOnt0eXBlOmguQXBwZWFyYW5jZSxzY2hlbWU6Zy5TeXN0ZW19fV19LFlhPWFzeW5jKGUsdD1bXSk9Pntjb25zdCBuPWF3YWl0IGNlKCkse25ld1BhZ2VVcmw6cn09YXdhaXQgQnIoZSksbz1hd2FpdChhc3luYyBlPT57Y29uc3QgdD10ZShlKSx7d29ya3NwYWNlUGxhdGZvcm06bn09YXdhaXQgdC5nZXRPcHRpb25zKCk7cmV0dXJuIG4/LmRpc2FibGVNdWx0aXBsZVBhZ2VzfSkoZSksYT1hd2FpdChhc3luYyBlPT57Y29uc3QgdD10ZShlKSx7d29ya3NwYWNlUGxhdGZvcm06bn09YXdhaXQgdC5nZXRPcHRpb25zKCk7cmV0dXJuIG4/LmlzTG9ja2VkfSkoZSksaT1hd2FpdCBmZShlKSxsPVtdLHM9dC5sZW5ndGg+MDtyJiYobC5wdXNoKCRhKCkpLG98fGwucHVzaChXYSghYSxpKSkpLGwucHVzaCh1YSk7Y29uc3QgYz1MdCgpLHU9YXdhaXQgYy5nZXRDdXJyZW50V29ya3NwYWNlKCksZD1hd2FpdCBjLlN0b3JhZ2UuZ2V0V29ya3NwYWNlcygpLHA9ZC5maW5kKChlPT5lLndvcmtzcGFjZUlkPT09dS53b3Jrc3BhY2VJZCkpO2wucHVzaCh7dHlwZTpjYS5MYWJlbCxsYWJlbDpCbihcImNvbnRleHRNZW51LnJlc3RvcmVcIiksZGF0YTp7dHlwZTpoLlJlc3RvcmVDaGFuZ2VzfSxlbmFibGVkOiEhcH0pLGwucHVzaCh7dHlwZTpjYS5MYWJlbCxsYWJlbDpCbihcImNvbnRleHRNZW51LnNhdmVXb3Jrc3BhY2VcIiksZGF0YTp7dHlwZTpoLlNhdmVXb3Jrc3BhY2V9LGVuYWJsZWQ6ISFwfSksbC5wdXNoKHt0eXBlOmNhLkxhYmVsLGxhYmVsOkJuKFwiY29udGV4dE1lbnUuc2F2ZVdvcmtzcGFjZUFzXCIpLGRhdGE6e3R5cGU6aC5TYXZlV29ya3NwYWNlQXN9fSksbC5wdXNoKHt0eXBlOmNhLkxhYmVsLGxhYmVsOkJuKFwiY29udGV4dE1lbnUucmVuYW1lV29ya3NwYWNlXCIpLGRhdGE6e3R5cGU6aC5SZW5hbWVXb3Jrc3BhY2V9LGVuYWJsZWQ6ISFwfSksZC5zb21lKChlPT5lLndvcmtzcGFjZUlkIT09dS53b3Jrc3BhY2VJZCkpP2wucHVzaCh7bGFiZWw6VWEoKS5sYWJlbCxzdWJtZW51OkthKHUsZCxoLlN3aXRjaFdvcmtzcGFjZSksZGF0YTp2b2lkIDB9LHtsYWJlbDp6YSgpLmxhYmVsLHN1Ym1lbnU6S2EodSxkLGguRGVsZXRlV29ya3NwYWNlKSxkYXRhOnZvaWQgMH0pOmwucHVzaCh7bGFiZWw6VWEoKS5sYWJlbCxlbmFibGVkOiExLGRhdGE6dm9pZCAwfSx7bGFiZWw6emEoKS5sYWJlbCxlbmFibGVkOiExLGRhdGE6dm9pZCAwfSksbC5wdXNoKHtsYWJlbDpCbihcImNvbnRleHRNZW51LmRvd25sb2Fkc1wiKSxkYXRhOnt0eXBlOmguRG93bmxvYWRzfX0pO2NvbnN0IGY9YXdhaXQgYy5UaGVtZS5nZXRUaGVtZXMoKTtyZXR1cm4oZlswXSYmXCJwYWxldHRlc1wiaW4gZlswXXx8IWZbMF18fDA9PT1mLmxlbmd0aCkmJmwucHVzaCh7bGFiZWw6R2EoKS5sYWJlbCxzdWJtZW51OmF3YWl0IHFhKCksZGF0YTp2b2lkIDB9KSxsLnB1c2godWEsTmEoaSksRmEoaSksYXdhaXQoYXN5bmMgZT0+e2NvbnN0IHQ9YXdhaXQgRGEoKTtyZXR1cm57bGFiZWw6Qm4oXCJjb250ZXh0TWVudS5wcmludFwiKSxzdWJtZW51Olt7dHlwZTpjYS5MYWJlbCxsYWJlbDpCbihcImNvbnRleHRNZW51LnN1Ym1lbnUucHJpbnRcIiksZGF0YTp7dHlwZTpoLlByaW50fSxlbmFibGVkOmV9LHt0eXBlOmNhLkxhYmVsLGxhYmVsOkJuKFwiY29udGV4dE1lbnUuc3VibWVudS5wcmludEFsbFwiKSxkYXRhOnt0eXBlOmguUHJpbnRBbGx9fSwuLi50P1t1YSx7dHlwZTpjYS5MYWJlbCxsYWJlbDpCbihcImNvbnRleHRNZW51LnByaW50U2NyZWVuXCIpLGRhdGE6e3R5cGU6aC5QcmludFNjcmVlbn19XTpbXV0sZGF0YTp2b2lkIDB9fSkocykpLG4/Wy4uLmwsQmEoKSx1YSx7dHlwZTpjYS5MYWJlbCxsYWJlbDpCbihcImNvbnRleHRNZW51Lm9wZW5TdG9yZWZyb250XCIpLGRhdGE6e3R5cGU6aC5PcGVuU3RvcmVmcm9udH19LHVhLFphKCldOlsuLi5sLHVhLEJhKCksdWEsWmEoKV19LEphPWFzeW5jKGUsdCk9Pntjb25zdCBuPXQuc2VsZWN0ZWRWaWV3c1swXSxyPWZpbi5WaWV3LndyYXBTeW5jKG4pLG89YXdhaXQoYXN5bmMgZT0+e2NvbnN0e25ld1RhYlVybDp0fT1hd2FpdCBCcihlKTtpZighdCl0aHJvdyBuZXcgRXJyb3IoXCJUcnlpbmcgdG8gY3JlYXRlIGEgbmV3IHBhZ2Ugd2l0aG91dCBhIG5ld1RhYlVybCBzZXRcIik7cmV0dXJue3VybDp0LHRhcmdldDplLHRpdGxlOlwiTmV3IFRhYlwifX0pKGUpO2F3YWl0IEx0KCkuY3JlYXRlVmlldyhvLGUsci5pZGVudGl0eSl9LFhhPWFzeW5jKGUsdCk9Pntjb25zdCBuPWF3YWl0KGU9PlByb21pc2UuYWxsKGUubWFwKChhc3luYyBlPT5maW4uVmlldy53cmFwU3luYyhlKS5nZXRJbmZvKCkpKSkpKHQpLHtuZXdQYWdlVXJsOnIsbmV3VGFiVXJsOm99PWF3YWl0IEJyKGUpO24uZm9yRWFjaCgoYXN5bmMgZT0+e2UudXJsIT09ciYmZS51cmwhPT1vJiZhd2FpdCBmaW4uU3lzdGVtLm9wZW5VcmxXaXRoQnJvd3NlcihlLnVybCl9KSl9LFFhPShlLHQpPT57dC5mb3JFYWNoKChhc3luYyB0PT57Y29uc3Qgbj1maW4uVmlldy53cmFwU3luYyh0KTthd2FpdChhc3luYyhlLHQpPT57Y29uc3R7dXJsOm59PWF3YWl0IHQuZ2V0SW5mbygpLHI9ey4uLmF3YWl0IHQuZ2V0T3B0aW9ucygpLHVybDpuLHRhcmdldDplLG5hbWU6dm9pZCAwfTthd2FpdCBMdCgpLmNyZWF0ZVZpZXcocixlLHQuaWRlbnRpdHkpfSkoZSxuKX0pKX0sZWk9YXN5bmMoZSx0LG4pPT57Y29uc3Qgcj17bmV3Q2hhbm5lbElkOnQsc2VsZWN0ZWRWaWV3czpufTsoYXdhaXQgdHQoZSkpLmRpc3BhdGNoKGl0LkFkZFRvQ2hhbm5lbCxyKX0sdGk9YXN5bmMoZSx0KT0+eyhhd2FpdCB0dChlKSkuZGlzcGF0Y2goaXQuUmVtb3ZlRnJvbUNoYW5uZWwsdCl9LG5pPWFzeW5jKGUsdCk9PntpZighZSlyZXR1cm47Y29uc3Qgbj10LmlkZW50aXR5LHI9ZmluLldpbmRvdy53cmFwU3luYyhuKTtzd2l0Y2goeWUoe3R5cGU6XCJWaWV3IFRhYiBNZW51XCIsYWN0aW9uOlwiU2VsZWN0IE1lbnUgSXRlbVwiLHZhbHVlOmUudHlwZSxza2lwVmFsdWVIYXNoaW5nOiEwfSksZS50eXBlKXtjYXNlIHcuQmFjazphd2FpdChhc3luYyBlPT57Y29uc3QgdD1lLm1hcCgoZT0+ZmluLlZpZXcud3JhcFN5bmMoZSkubmF2aWdhdGVCYWNrKCkpKTthd2FpdCBQcm9taXNlLmFsbCh0KX0pKHQuc2VsZWN0ZWRWaWV3cyk7YnJlYWs7Y2FzZSB3LkZvcndhcmQ6YXdhaXQoYXN5bmMgZT0+e2NvbnN0IHQ9ZS5tYXAoKGU9PmZpbi5WaWV3LndyYXBTeW5jKGUpLm5hdmlnYXRlRm9yd2FyZCgpKSk7YXdhaXQgUHJvbWlzZS5hbGwodCl9KSh0LnNlbGVjdGVkVmlld3MpO2JyZWFrO2Nhc2Ugdy5QcmludDphd2FpdCAkbyh0LnNlbGVjdGVkVmlld3MpO2JyZWFrO2Nhc2Ugdy5QcmludEFsbDphd2FpdCByLnByaW50KHtjb250ZW50Olwidmlld3NcIixpbmNsdWRlU2VsZjohMX0pO2JyZWFrO2Nhc2Ugdy5QcmludFNjcmVlbjphd2FpdCByLnByaW50KHtjb250ZW50Olwic2NyZWVuc2hvdFwifSk7YnJlYWs7Y2FzZSB3LkNsb3NlVmlld3M6YXdhaXQoYXN5bmMoZSx0KT0+e2NvbnN0IG49KGF3YWl0IEx0KCkuQnJvd3Nlci53cmFwU3luYyhlKS5nZXRQYWdlcygpKS5maW5kKChlPT5lLmlzQWN0aXZlKSkscj1hd2FpdCBmaW4uV2luZG93LndyYXBTeW5jKGUpLmdldEN1cnJlbnRWaWV3cygpO2lmKHQubGVuZ3RoPT09ci5sZW5ndGgtKG4ucGFuZWxzPz9bXSkubGVuZ3RoKXJldHVybiB2b2lkKGF3YWl0IHR0KGUpKS5kaXNwYXRjaChpdC5DbG9zZVBhZ2Use3BhZ2VJZDpuPy5wYWdlSWR9KTtjb25zdCBvPWZpbi5QbGF0Zm9ybS5nZXRDdXJyZW50U3luYygpO3QuZm9yRWFjaCgoYXN5bmMgZT0+e2F3YWl0IG8uY2xvc2VWaWV3KGUpfSkpfSkobix0LnNlbGVjdGVkVmlld3MpO2JyZWFrO2Nhc2Ugdy5PcGVuV2l0aERlZmF1bHRCcm93c2VyOmF3YWl0IFhhKG4sdC5zZWxlY3RlZFZpZXdzKTticmVhaztjYXNlIHcuUmVsb2FkVmlld3M6dC5zZWxlY3RlZFZpZXdzLmZvckVhY2goKGFzeW5jIGU9Pntjb25zdCB0PWZpbi5WaWV3LndyYXBTeW5jKGUpO2F3YWl0IHQucmVsb2FkKCl9KSk7YnJlYWs7Y2FzZSB3Lk5ld1ZpZXc6YXdhaXQgSmEobix0KTticmVhaztjYXNlIHcuRHVwbGljYXRlVmlld3M6UWEobix0LnNlbGVjdGVkVmlld3MpO2JyZWFrO2Nhc2Ugdy5BZGRUb0NoYW5uZWw6ZWkobixlLm9wdGlvbix0LnNlbGVjdGVkVmlld3MpO2JyZWFrO2Nhc2Ugdy5SZW1vdmVGcm9tQ2hhbm5lbDp0aShuLHQuc2VsZWN0ZWRWaWV3cyk7YnJlYWs7Y2FzZSB3LkN1c3RvbTppZihlLmFjdGlvbil7Y29uc3Qgcj17Y2FsbGVyVHlwZTprLlZpZXdUYWJDb250ZXh0TWVudSx3aW5kb3dJZGVudGl0eTpuLHNlbGVjdGVkVmlld3M6dC5zZWxlY3RlZFZpZXdzLGN1c3RvbURhdGE6ZS5hY3Rpb24uY3VzdG9tRGF0YX07THQoKS5faW52b2tlQ3VzdG9tQWN0aW9uKGUuYWN0aW9uLmlkLHIpfX19O2xldCByaT1cIlBsYXRmb3JtXCI7Y29uc3Qgb2k9YXN5bmMoKT0+cmk7Y29uc3QgYWk9YXN5bmMoZSx0KT0+e2lmKCFlKXJldHVybjtjb25zdCBuPXQuaWRlbnRpdHkscj1hd2FpdCB0dChuKSxvPUx0KCkuQnJvd3Nlci53cmFwU3luYyhuKSxhPWZpbi5XaW5kb3cud3JhcFN5bmMobik7aWYoeWUoe3R5cGU6XCJHbG9iYWwgTWVudVwiLGFjdGlvbjpcIlNlbGVjdCBNZW51IEl0ZW1cIix2YWx1ZTplLnR5cGUsc2tpcFZhbHVlSGFzaGluZzohMCxkYXRhOnthY3Rpb246ZS5hY3Rpb24/LmlkfX0pLGF3YWl0IGZlKG4pKXtjb25zdCBuPWF3YWl0KGFzeW5jKGUsdCk9Pntjb25zdCBuPXQuaWRlbnRpdHkscj1MdCgpLkJyb3dzZXIud3JhcFN5bmMobiksbz0oYXdhaXQgci5nZXRQYWdlcygpKS5maW5kKChlPT5lLmlzQWN0aXZlKSksYT1VZSh7Li4ubixsYXlvdXROYW1lOm8ubGF5b3V0Q29udGFpbmVyS2V5fSksaT10LnNlbGVjdGVkVmlld3M7c3dpdGNoKGU/LnR5cGUpe2Nhc2UgQy5Mb2NrOmF3YWl0IHIudXBkYXRlUGFnZSh7cGFnZUlkOm8ucGFnZUlkLHBhZ2U6e2lzTG9ja2VkOiFvLmlzTG9ja2VkfX0pO2JyZWFrO2Nhc2UgQy5BZGRUb0NoYW5lbDplLm9wdGlvbj9hd2FpdCBlaShuLGUub3B0aW9uLGkpOm51bGw9PT1lLm9wdGlvbiYmYXdhaXQgdGkobixpKTticmVhaztjYXNlIGguTmV3V2luZG93Ontjb25zdCBlPWF3YWl0ICRyKG4pO2F3YWl0IEx0KCkuQnJvd3Nlci5jcmVhdGVXaW5kb3coe3dvcmtzcGFjZVBsYXRmb3JtOntwYWdlczpbZV0sd2luZG93VHlwZTpcImVudGVycHJpc2VcIn19KTticmVha31jYXNlIEMuUGluOntjb25zdHthbHdheXNPblRvcDplfT1hd2FpdCByLm9wZW5maW5XaW5kb3cuZ2V0T3B0aW9ucygpO2F3YWl0IHIub3BlbmZpbldpbmRvdy51cGRhdGVPcHRpb25zKHthbHdheXNPblRvcDohZX0pO2JyZWFrfWNhc2UgQy5TaG93SGlkZVRhYnM6YXdhaXQgYS5pc1Nob3dpbmdUYWJzKCk/YXdhaXQgYS5oaWRlKCk6YXdhaXQgYS5zaG93KCk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4hMX1yZXR1cm4hMH0pKGUsdCk7aWYobilyZXR1cm59c3dpdGNoKGUudHlwZSl7Y2FzZSBoLk5ld1dpbmRvdzp7Y29uc3R7bmV3UGFnZVVybDplfT1hd2FpdCBCcihuKTtpZighZSl0aHJvdyBuZXcgRXJyb3IoXCJUcnlpbmcgdG8gY3JlYXRlIGEgbmV3IGVtcHR5IHdpbmRvdyB3aXRob3V0IGEgbmV3UGFnZVVybCBzZXRcIik7THQoKS5jcmVhdGVWaWV3KHt0YXJnZXQ6dm9pZCAwLHVybDplfSk7YnJlYWt9Y2FzZSBoLk5ld1BhZ2U6YXdhaXQgQW8obik7YnJlYWs7Y2FzZSBoLkNsb3NlV2luZG93OnIuZGlzcGF0Y2goaXQuQ2xvc2VCcm93c2VyV2luZG93KTticmVhaztjYXNlIGguU2F2ZVdvcmtzcGFjZTphd2FpdCBWbyhuKTticmVhaztjYXNlIGguU2F2ZVBhZ2U6YXdhaXQgVG8obik7YnJlYWs7Y2FzZSBoLlNhdmVQYWdlQXM6YXdhaXQgRG8obik7YnJlYWs7Y2FzZSBoLlNhdmVXb3Jrc3BhY2VBczphd2FpdCBIbyhuKTticmVhaztjYXNlIGguUmVuYW1lV29ya3NwYWNlOm8uX29wZW5TYXZlTW9kYWwoe21lbnVUeXBlOlMuUkVOQU1FX1dPUktTUEFDRX0pO2JyZWFrO2Nhc2UgaC5Td2l0Y2hXb3Jrc3BhY2U6YXdhaXQoYXN5bmMoZSx0KT0+e2NvbnN0IG49THQoKSxyPShhd2FpdCBuLlN0b3JhZ2UuZ2V0V29ya3NwYWNlcygpKS5maW5kKChlPT5lLndvcmtzcGFjZUlkPT09dC53b3Jrc3BhY2VJZCkpO24uYXBwbHlXb3Jrc3BhY2Uocix7c2tpcFByb21wdDohMSxwcm9tcHRDb250YWluZXJXaW5kb3dJZGVudGl0eTplfSl9KShuLGUpO2JyZWFrO2Nhc2UgaC5EZWxldGVXb3Jrc3BhY2U6YXdhaXQoYXN5bmMoZSx0KT0+e2NvbnN0IG49THQoKSxyPShhd2FpdCBuLlN0b3JhZ2UuZ2V0V29ya3NwYWNlcygpKS5maW5kKChlPT5lLndvcmtzcGFjZUlkPT09dC53b3Jrc3BhY2VJZCkpO3ImJmF3YWl0IHlvKGUsci50aXRsZSkmJihhd2FpdCBuLlN0b3JhZ2UuZGVsZXRlV29ya3NwYWNlKHQud29ya3NwYWNlSWQpLERyKEJuKFwic3VjY2Vzc0luZGljYXRvci53b3Jrc3BhY2VEZWxldGVkXCIpLGUpKX0pKG4sZSk7YnJlYWs7Y2FzZSBoLkRvd25sb2Fkczphd2FpdCBabyhuKTticmVhaztjYXNlIGguQXBwZWFyYW5jZTphd2FpdCBMdCgpLlRoZW1lLnNldFNlbGVjdGVkU2NoZW1lKGUuc2NoZW1lKTticmVhaztjYXNlIGguUXVpdDp7Y29uc3QgZT1vaSgpO2F3YWl0IHhvKG4sYXdhaXQgZSkmJmZpbi5QbGF0Zm9ybS5nZXRDdXJyZW50U3luYygpLnF1aXQoKX1icmVhaztjYXNlIGguT3BlblN0b3JlZnJvbnQ6KGFzeW5jKCk9Pnthd2FpdCBjZSgpJiZvZShyZSl9KSgpO2JyZWFrO2Nhc2UgaC5SZXN0b3JlQ2hhbmdlczp7Y29uc3QgZT1hd2FpdCBhc3luYyBmdW5jdGlvbigpe2NvbnN0IGU9THQoKSx0PWF3YWl0IGUuZ2V0Q3VycmVudFdvcmtzcGFjZSgpO3JldHVybihhd2FpdCBlLlN0b3JhZ2UuZ2V0V29ya3NwYWNlcygpKS5maW5kKChlPT5lLndvcmtzcGFjZUlkPT09dC53b3Jrc3BhY2VJZCkpfSgpO2F3YWl0IGtvKG4pJiZhd2FpdCBPbyh7b3B0aW9uczp7c2tpcFByb21wdDohMH0sLi4uZX0pfWJyZWFrO2Nhc2UgaC5QcmludDphd2FpdCAkbyh0LnNlbGVjdGVkVmlld3MpO2JyZWFrO2Nhc2UgaC5QcmludEFsbDphd2FpdCBhLnByaW50KHtjb250ZW50Olwidmlld3NcIixpbmNsdWRlU2VsZjohMX0pO2JyZWFrO2Nhc2UgaC5QcmludFNjcmVlbjphd2FpdCBhLnByaW50KHtjb250ZW50Olwic2NyZWVuc2hvdFwifSk7YnJlYWs7Y2FzZSBoLkN1c3RvbTppZihlLmFjdGlvbil7Y29uc3QgdD17Y2FsbGVyVHlwZTprLkdsb2JhbENvbnRleHRNZW51LHdpbmRvd0lkZW50aXR5Om4sY3VzdG9tRGF0YTplLmFjdGlvbi5jdXN0b21EYXRhfTtMdCgpLl9pbnZva2VDdXN0b21BY3Rpb24oZS5hY3Rpb24uaWQsdCl9ZWxzZSBjb25zb2xlLndhcm4oYEVuY291bnRlcmVkIGEgQ3VzdG9tIGNvbnRleHQgbWVudSBvcHRpb24gd2l0aCBhbiBcImFjdGlvblwiIHByb3BlcnR5IHdpdGggdmFsdWUgXCIke2UuYWN0aW9ufVwiYCl9fSxpaT1hc3luYyhlLHQsbik9Pntjb25zdCByPWF3YWl0IHR0KHQuaWRlbnRpdHkpLG89THQoKSxhPWF3YWl0IGZlKCk7c3dpdGNoKGUmJnllKHt0eXBlOlwiUGFnZSBUYWIgTWVudVwiLGFjdGlvbjpcIlNlbGVjdCBNZW51IEl0ZW1cIix2YWx1ZTplLnR5cGUsc2tpcFZhbHVlSGFzaGluZzohMH0pLGU/LnR5cGUpe2Nhc2Ugdi5TYXZlOmF3YWl0IFRvKHQuaWRlbnRpdHksdC5wYWdlSWQpO2JyZWFrO2Nhc2Ugdi5TYXZlQXM6YXdhaXQgRG8odC5pZGVudGl0eSx0LnBhZ2VJZCk7YnJlYWs7Y2FzZSB2Lk5ld1BhZ2U6YXdhaXQgQW8odC5pZGVudGl0eSk7YnJlYWs7Y2FzZSB2LkRlbGV0ZVBhZ2U6YXdhaXQoYXN5bmMoZSx0KT0+e2NvbnN0IG49THQoKSxyPW4uQnJvd3Nlci53cmFwU3luYyhlKSxvPShhd2FpdCBuLlN0b3JhZ2UuZ2V0UGFnZXMoKSkuZmluZCgoZT0+ZS5wYWdlSWQ9PT10KSk7byYmYXdhaXQgU28oZSxvLnRpdGxlKSYmKGF3YWl0IG4uU3RvcmFnZS5kZWxldGVQYWdlKG8ucGFnZUlkKSxhd2FpdCByLnJlbW92ZVBhZ2UodCksRHIoQm4oXCJlbnRlcnByaXNlU3VjY2Vzc0luZGljYXRvci5zdXBlcnRhYkRlbGV0ZWRcIiksZSxCbihcImVudGVycHJpc2VTdWNjZXNzSW5kaWNhdG9yLnN1cGVydGFiSGFzQmVlbkRlbGV0ZWRcIix7dGl0bGU6by50aXRsZX0pKSl9KSh0LmlkZW50aXR5LHQucGFnZUlkKTticmVhaztjYXNlIHYuUmVuYW1lOmlmKGF3YWl0IGZlKHQuaWRlbnRpdHkpKXtjb25zdCBlPUx0KCkuQnJvd3Nlci53cmFwU3luYyh0LmlkZW50aXR5KTthd2FpdCBlLnNldEFjdGl2ZVBhZ2UodC5wYWdlSWQpO2NvbnN0IHI9YXdhaXQgc2EoKTthd2FpdCByLmRpc3BhdGNoKFwib3BlblwiLHtwYXJlbnRJZGVudGl0eTp0LmlkZW50aXR5LHR5cGU6cGEuUmVuYW1lU3VwZXJ0YWIsYW5jaG9yQmVoYXZpb3I6c2kuQ2VudGVyLHg6bi5sZWZ0K24ud2lkdGgvMi0xNjQseTpuLmJvdHRvbS04LHBheWxvYWQ6e3BhZ2VJZDp0LnBhZ2VJZH19KX1lbHNlIGF3YWl0IG8uQnJvd3Nlci53cmFwU3luYyh0LmlkZW50aXR5KS5fb3BlblNhdmVNb2RhbCh7bWVudVR5cGU6Uy5SRU5BTUVfUEFHRSxpZDp0LnBhZ2VJZH0pO2JyZWFrO2Nhc2Ugdi5EdXBsaWNhdGU6ci5kaXNwYXRjaChpdC5EdXBsaWNhdGVQYWdlLHQucGFnZUlkKTticmVhaztjYXNlIHYuQ2xvc2U6YT9hd2FpdChhc3luYyhlLHQpPT57Y29uc3Qgbj1MdCgpLkJyb3dzZXIud3JhcFN5bmMoZSkscj1hd2FpdCBuLmdldFBhZ2VzKCk7Zm9yKGNvbnN0IG8gb2YgcilpZihvLnBhZ2VJZD09PXQpe2F3YWl0IG4ucmVtb3ZlUGFnZShvLnBhZ2VJZCksYXdhaXQgbi5fdHJhY2tSZW1vdmVkVGFiKHtpZGVudGl0eTplLHBhZ2U6b30pO2JyZWFrfX0pKHQuaWRlbnRpdHksdC5wYWdlSWQpOnIuZGlzcGF0Y2goaXQuQ2xvc2VQYWdlLHtwYWdlSWQ6dC5wYWdlSWR9KTticmVhaztjYXNlIHYuQ3VzdG9tOmlmKGUuYWN0aW9uKXtjb25zdCBuPXtjYWxsZXJUeXBlOmsuUGFnZVRhYkNvbnRleHRNZW51LHdpbmRvd0lkZW50aXR5OnQuaWRlbnRpdHkscGFnZUlkOnQucGFnZUlkLGN1c3RvbURhdGE6ZS5hY3Rpb24uY3VzdG9tRGF0YX07THQoKS5faW52b2tlQ3VzdG9tQWN0aW9uKGUuYWN0aW9uLmlkLG4pfWVsc2UgY29uc29sZS53YXJuKGBFbmNvdW50ZXJlZCBhIEN1c3RvbSBjb250ZXh0IG1lbnUgb3B0aW9uIHdpdGggYW4gXCJhY3Rpb25cIiBwcm9wZXJ0eSB3aXRoIHZhbHVlIFwiJHtlLmFjdGlvbn1cImApO2JyZWFrO2Nhc2Ugdi5SZWZyZXNoOmF3YWl0KGFzeW5jKGUsdCk9Pntjb25zdCBuPUx0KCkscj1uLkJyb3dzZXIud3JhcFN5bmMoZSksbz0oYXdhaXQgci5nZXRQYWdlcygpKS5maW5kKChlPT50P2UucGFnZUlkPT09dDplLmlzQWN0aXZlKSk7bz8ubGF5b3V0Py5jb250ZW50JiZBdChvLmxheW91dC5jb250ZW50KS5mb3JFYWNoKChhc3luYyBlPT57KGF3YWl0IGZpbi5WaWV3LndyYXAoe3V1aWQ6bi5pZGVudGl0eS51dWlkLG5hbWU6ZS5uYW1lfSkpLnJlbG9hZCgpfSkpfSkodC5pZGVudGl0eSx0LnBhZ2VJZCk7YnJlYWs7Y2FzZSB2LkNsb3NlT3RoZXJzOmF3YWl0KGFzeW5jKGUsdCk9Pntjb25zdCBuPUx0KCkuQnJvd3Nlci53cmFwU3luYyhlKSxyPWF3YWl0IG4uZ2V0UGFnZXMoKTtmb3IoY29uc3QgbyBvZiByKW8ucGFnZUlkIT09dCYmKGF3YWl0IG4ucmVtb3ZlUGFnZShvLnBhZ2VJZCksYXdhaXQgbi5fdHJhY2tSZW1vdmVkVGFiKHtpZGVudGl0eTplLHBhZ2U6b30pKX0pKHQuaWRlbnRpdHksdC5wYWdlSWQpO2JyZWFrO2Nhc2Ugdi5TYXZlV29ya3NwYWNlQXM6YXdhaXQgSG8odC5pZGVudGl0eSl9fSxsaT1hc3luYyhlLHQpPT57aWYoZT8udHlwZSl7Y29uc3Qgbj10LmlkZW50aXR5O3N3aXRjaChlLnR5cGUpe2Nhc2UgeS5TYXZlUGFnZTphd2FpdCBUbyhuKTticmVhaztjYXNlIHkuU2F2ZVdvcmtzcGFjZTphd2FpdCBWbyhuKTticmVhaztjYXNlIHkuU2F2ZVBhZ2VBczphd2FpdCBEbyhuKTticmVhaztjYXNlIHkuU2F2ZVdvcmtzcGFjZUFzOmF3YWl0IEhvKG4pO2JyZWFrO2Nhc2UgeS5DdXN0b206aWYoZS5hY3Rpb24pe2NvbnN0IG49e2NhbGxlclR5cGU6ay5TYXZlQnV0dG9uQ29udGV4dE1lbnUsd2luZG93SWRlbnRpdHk6dC5pZGVudGl0eSxwYWdlSWQ6dC5wYWdlSWQsY3VzdG9tRGF0YTplLmFjdGlvbi5jdXN0b21EYXRhfTtMdCgpLl9pbnZva2VDdXN0b21BY3Rpb24oZS5hY3Rpb24uaWQsbil9ZWxzZSBjb25zb2xlLndhcm4oYEVuY291bnRlcmVkIGEgQ3VzdG9tIGNvbnRleHQgbWVudSBvcHRpb24gd2l0aCBhbiBcImFjdGlvblwiIHByb3BlcnR5IHdpdGggdmFsdWUgXCIke2UuYWN0aW9ufVwiYCl9fX07dmFyIHNpOyFmdW5jdGlvbihlKXtlW2UuQm90dG9tTGVmdD0wXT1cIkJvdHRvbUxlZnRcIixlW2UuQm90dG9tUmlnaHQ9MV09XCJCb3R0b21SaWdodFwiLGVbZS5DZW50ZXI9Ml09XCJDZW50ZXJcIn0oc2l8fChzaT17fSkpO2NvbnN0IGNpPWFzeW5jKGUsdCxuLHIpPT57Y29uc3R7eDpvLHk6YSxpZGVudGl0eTppLHRlbXBsYXRlOmwsY2FsbGJhY2s6c309ZSxjPWF3YWl0IGZlKGkpLHtkYXRhOnV9PWM/YXdhaXQoYXN5bmMoZSx0LG4scik9PntpZighTCl0aHJvdyBuZXcgRXJyb3IoXCJzaG93RW50ZXJwcmlzZUNvbnRleHRNZW51IGNhbiBvbmx5IGJlIHVzZWQgaW4gYSBIZXJlIGVudi4gQXZvaWQgY2FsbGluZyB0aGlzIG1ldGhvZCBkdXJpbmcgcHJlLXJlbmRlcmluZy5cIik7aWYoIXImJiFmaW4ubWUuaXNXaW5kb3cpdGhyb3cgbmV3IEVycm9yKFwic2hvd0VudGVycHJpc2VDb250ZXh0TWVudSBjYW4gb25seSBiZSB1c2VkIGluIGEgSGVyZSB3aW5kb3cuXCIpO2NvbnN0IG89ZmluLldpbmRvdy53cmFwU3luYyh7dXVpZDpuZS51dWlkLG5hbWU6ZWUuRW50ZXJwcmlzZUNvbnRleHRNZW51fSk7YXdhaXQgby5pc1Nob3dpbmcoKSYmYXdhaXQgby5ibHVyKCk7Y29uc3QgYT1hd2FpdCBzYSgpLGk9bmV3IFByb21pc2UoKChlLHQpPT57YS5yZWdpc3RlcihcInJlc3BvbnNlXCIsKHQ9PntlKHQpfSkpfSkpLHt4OmwseTpzLHRlbXBsYXRlOmN9PWU7cmV0dXJuIGF3YWl0IGEuZGlzcGF0Y2goXCJvcGVuXCIse3BhcmVudElkZW50aXR5OnIuaWRlbnRpdHkscmVzcG9uc2VJZGVudGl0eTpuZSx0eXBlOnQsYW5jaG9yQmVoYXZpb3I6bix4OmwseTpzLHBheWxvYWQ6e3RlbXBsYXRlOmN9fSksaX0pKHt4Om8seTphLHRlbXBsYXRlOmx9LG4scixmaW4uV2luZG93LndyYXBTeW5jKGkpKTphd2FpdCBmdW5jdGlvbihlLHQpe2lmKCFMKXRocm93IG5ldyBFcnJvcihcInNob3dDb250ZXh0TWVudSBjYW4gb25seSBiZSB1c2VkIGluIGFuIE9wZW5GaW4gZW52LiBBdm9pZCBjYWxsaW5nIHRoaXMgbWV0aG9kIGR1cmluZyBwcmUtcmVuZGVyaW5nLlwiKTtpZighdCYmIWZpbi5tZS5pc1dpbmRvdyl0aHJvdyBuZXcgRXJyb3IoXCJzaG93Q29udGV4dE1lbnUgY2FuIG9ubHkgYmUgdXNlZCBpbiBhbiBPcGVuRmluIHdpbmRvdy5cIik7cmV0dXJuKHR8fGZpbi5XaW5kb3cuZ2V0Q3VycmVudFN5bmMoKSkuc2hvd1BvcHVwTWVudShlKX0oe3g6byx5OmEsdGVtcGxhdGU6bH0sZmluLldpbmRvdy53cmFwU3luYyhpKSk7cyh1LGUpfTthc3luYyBmdW5jdGlvbiB1aShlLHQpe2NvbnN0IG49YXdhaXQgZmUoZS5pZGVudGl0eSkscj1uP2F3YWl0KGFzeW5jKHtpZGVudGl0eTplLHNlbGVjdGVkVmlld3M6dH0pPT57Y29uc3Qgbj1MdCgpLHI9bi5Ccm93c2VyLndyYXBTeW5jKGUpLG89KGF3YWl0IHIuZ2V0UGFnZXMoKSkuZmluZCgoZT0+ZS5pc0FjdGl2ZSkpLGE9RHQoby5sYXlvdXQuY29udGVudCk+MSxpPWF3YWl0IGZlKGUpLGw9YXdhaXQgbi5UaGVtZS5nZXRUaGVtZXMoKSxzPWxbMF0mJlwicGFsZXR0ZXNcImluIGxbMF18fCFsWzBdfHwwPT09bC5sZW5ndGgsYz17Li4uTmEoaSksZW5hYmxlZDphfSx1PXsuLi5GYShpKSxlbmFibGVkOmF9O3JldHVyblskYSgpLFdhKCEwLGkpLHt0eXBlOmNhLlNlcGFyYXRvcn0sYyx1LHt0eXBlOmNhLlNlcGFyYXRvcn0sLi4ucz9be3R5cGU6Y2EuU3VibWVudSxsYWJlbDpHYSgpLmxhYmVsLHN1Ym1lbnU6YXdhaXQgcWEoKX1dOltdLHt0eXBlOmNhLlNlcGFyYXRvcn0sQmEoKSx7dHlwZTpjYS5TZXBhcmF0b3J9LFphKCEwKV19KSh7aWRlbnRpdHk6ZS5pZGVudGl0eSxzZWxlY3RlZFZpZXdzOmUuc2VsZWN0ZWRWaWV3c30pOmF3YWl0IFlhKGUuaWRlbnRpdHksZS5zZWxlY3RlZFZpZXdzKSxvPWF3YWl0IG9pKCk7bnx8KHIuZmluZCgoZT0+ZS5kYXRhPy50eXBlPT09aC5RdWl0KSkubGFiZWw9YFF1aXQgJHtvfWApO2NvbnN0e3JlY3Q6YSwuLi5pfT1lLHt4OmwseTpzfT1uP3t4OmEubGVmdCthLndpZHRoLHk6YS5ib3R0b219OmUsYz17Li4uaSx4OmwseTpzLHRlbXBsYXRlOnIsY2FsbGJhY2s6YWl9O2F3YWl0IHRoaXMub3Blbkdsb2JhbENvbnRleHRNZW51KGMsdCl9YXN5bmMgZnVuY3Rpb24gZGkoZSx0KXtjb25zdCBuPXsuLi5lLGNhbGxiYWNrOm5pfTthd2FpdCB0aGlzLm9wZW5WaWV3VGFiQ29udGV4dE1lbnUobix0KX1hc3luYyBmdW5jdGlvbiBwaShlLHQpe2NvbnN0IG49YXdhaXQoYXN5bmMoZSx0KT0+e2NvbnN0IG49YXdhaXQgTHQoKS5TdG9yYWdlLmdldFBhZ2UoZSkscj1hd2FpdCBZbigpLG89YXdhaXQgZmUodCksYT1yLmZpbmQoKHQ9PnQucGFnZUlkPT09ZSkpLGk9RHQoYS5sYXlvdXQuY29udGVudCk+MSxsPWkse3dvcmtzcGFjZVBsYXRmb3JtOnN9PWF3YWl0IHRlKHQpLmdldE9wdGlvbnMoKSxjPSEocy5pc0xvY2tlZHx8cy5wcmV2ZW50UGFnZUNsb3NlfHxhLmNsb3NlQnV0dG9uPy5kaXNhYmxlZHx8YS5jbG9zZUJ1dHRvbj8uaGlkZGVuKSx1PVt7dHlwZTpjYS5MYWJlbCxsYWJlbDpCbihcImVudGVycHJpc2VDb250ZXh0TWVudS5uZXdUYWJcIiksZGF0YTp7dHlwZTp2Lk5ld1BhZ2V9fSx1YSx7dHlwZTpjYS5MYWJlbCxsYWJlbDpCbihcInJlbG9hZFwiKSxkYXRhOnt0eXBlOnYuUmVmcmVzaH19LHt0eXBlOmNhLkxhYmVsLGxhYmVsOkJuKFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LmR1cGxpY2F0ZVwiKSxkYXRhOnt0eXBlOnYuRHVwbGljYXRlfSxlbmFibGVkOiFzLmlzTG9ja2VkfSx1YSx7dHlwZTpjYS5MYWJlbCxsYWJlbDpCbihsP1wiZW50ZXJwcmlzZVNhdmVNb2RhbC5jbG9zZVN1cGVydGFiXCI6XCJlbnRlcnByaXNlU2F2ZU1vZGFsLmNsb3NlVGFiXCIpLGRhdGE6e3R5cGU6di5DbG9zZX0sZW5hYmxlZDpjfV0sZD1be3R5cGU6Y2EuTGFiZWwsbGFiZWw6Qm4oXCJlbnRlcnByaXNlQ29udGV4dE1lbnUubmV3VGFiXCIpLGRhdGE6e3R5cGU6di5OZXdQYWdlfX0sdWEse3R5cGU6Y2EuTGFiZWwsbGFiZWw6Qm4oXCJlbnRlcnByaXNlU2F2ZU1vZGFsLnJlbmFtZVN1cGVydGFiXCIpLGRhdGE6e3R5cGU6di5SZW5hbWV9LGVuYWJsZWQ6IXMuaXNMb2NrZWQmJiEhbiYmaX0se3R5cGU6Y2EuTGFiZWwsbGFiZWw6Qm4oXCJlbnRlcnByaXNlQ29udGV4dE1lbnUuZHVwbGljYXRlXCIpLGRhdGE6e3R5cGU6di5EdXBsaWNhdGV9LGVuYWJsZWQ6IXMuaXNMb2NrZWR9LHVhLHt0eXBlOmNhLkxhYmVsLGxhYmVsOkJuKFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LnNhdmVTdXBlcnRhYlwiKSxkYXRhOnt0eXBlOnYuU2F2ZX0sZW5hYmxlZDppfSx7dHlwZTpjYS5MYWJlbCxsYWJlbDpCbihcImVudGVycHJpc2VDb250ZXh0TWVudS5zYXZlU3VwZXJ0YWJBc1wiKSxkYXRhOnt0eXBlOnYuU2F2ZUFzfSxlbmFibGVkOml9LHVhLHt0eXBlOmNhLkxhYmVsLGxhYmVsOkJuKFwiZW50ZXJwcmlzZUNvbnRleHRNZW51LmRlbGV0ZVN1cGVydGFiXCIpLGRhdGE6e3R5cGU6di5EZWxldGVQYWdlfSxlbmFibGVkOiEhbn0sdWEse3R5cGU6Y2EuTGFiZWwsbGFiZWw6Qm4obD9cImVudGVycHJpc2VTYXZlTW9kYWwuY2xvc2VTdXBlcnRhYlwiOlwiZW50ZXJwcmlzZVNhdmVNb2RhbC5jbG9zZVRhYlwiKSxkYXRhOnt0eXBlOnYuQ2xvc2V9LGVuYWJsZWQ6Y31dLHA9W3t0eXBlOmNhLkxhYmVsLGxhYmVsOkJuKFwiY29udGV4dE1lbnUuc2F2ZVBhZ2VcIiksZGF0YTp7dHlwZTp2LlNhdmV9LGVuYWJsZWQ6ITB9LHt0eXBlOmNhLkxhYmVsLGxhYmVsOkJuKFwic2F2ZU1lbnUuc2F2ZVBhZ2VBc1wiKSxkYXRhOnt0eXBlOnYuU2F2ZUFzfSxlbmFibGVkOiEwfSx7dHlwZTpjYS5MYWJlbCxsYWJlbDpcIlNhdmUgV29ya3NwYWNlIEFzXCIsZGF0YTp7dHlwZTp2LlNhdmVXb3Jrc3BhY2VBc319LHt0eXBlOmNhLkxhYmVsLGxhYmVsOlwiUmVmcmVzaFwiLGRhdGE6e3R5cGU6di5SZWZyZXNofX0sdWEse3R5cGU6Y2EuTGFiZWwsbGFiZWw6Qm4oXCJzYXZlTW9kYWwucmVuYW1lUGFnZVwiKSxkYXRhOnt0eXBlOnYuUmVuYW1lfSxlbmFibGVkOiEhbn0se3R5cGU6Y2EuTGFiZWwsbGFiZWw6Qm4oXCJjb250ZXh0TWVudS5kdXBsaWNhdGVQYWdlXCIpLGRhdGE6e3R5cGU6di5EdXBsaWNhdGV9LGVuYWJsZWQ6IXMuaXNMb2NrZWR9LHVhLHt0eXBlOmNhLkxhYmVsLGxhYmVsOkJuKFwic2F2ZU1vZGFsLmNsb3NlUGFnZVwiKSxkYXRhOnt0eXBlOnYuQ2xvc2V9LGVuYWJsZWQ6Y31dO3JldHVybiBvP2w/ZDp1OnB9KShlLnBhZ2VJZCxlLmlkZW50aXR5KSxyPXsuLi5lLHRlbXBsYXRlOm4sY2FsbGJhY2s6KHQsbik9PntpaSh0LG4sZS5yZWN0KX19O2F3YWl0IHRoaXMub3BlblBhZ2VUYWJDb250ZXh0TWVudShyLHQpfWFzeW5jIGZ1bmN0aW9uIGZpKGUsdCl7Y29uc3Qgbj17Li4uZSx0ZW1wbGF0ZTphd2FpdChhc3luYygpPT57Y29uc3QgZT1MdCgpLHQ9YXdhaXQgZS5nZXRDdXJyZW50V29ya3NwYWNlKCksbj0oYXdhaXQgZS5TdG9yYWdlLmdldFdvcmtzcGFjZXMoKSkuZmluZCgoZT0+ZS53b3Jrc3BhY2VJZD09PXQud29ya3NwYWNlSWQpKTtyZXR1cm5be3R5cGU6Y2EuTGFiZWwsbGFiZWw6Qm4oXCJjb250ZXh0TWVudS5zYXZlV29ya3NwYWNlXCIpLGVuYWJsZWQ6ISFuLGRhdGE6e3R5cGU6eS5TYXZlV29ya3NwYWNlfX0se3R5cGU6Y2EuTGFiZWwsbGFiZWw6Qm4oXCJzYXZlTWVudS5zYXZlV29ya3NwYWNlQXNcIiksZGF0YTp7dHlwZTp5LlNhdmVXb3Jrc3BhY2VBc319LHt0eXBlOmNhLlNlcGFyYXRvcixkYXRhOnZvaWQgMH0se3R5cGU6Y2EuTGFiZWwsbGFiZWw6Qm4oXCJjb250ZXh0TWVudS5zYXZlUGFnZVwiKSxkYXRhOnt0eXBlOnkuU2F2ZVBhZ2V9fSx7dHlwZTpjYS5MYWJlbCxsYWJlbDpCbihcInNhdmVNZW51LnNhdmVQYWdlQXNcIiksZGF0YTp7dHlwZTp5LlNhdmVQYWdlQXN9fV19KSgpLGNhbGxiYWNrOmxpfTthd2FpdCB0aGlzLm9wZW5TYXZlQnV0dG9uQ29udGV4dE1lbnUobix0KX1jb25zdCBoaT1QJiZMJiZTYShcImRvY2stcHJvdmlkZXItY29uZmlnc1wiLFwiZG9jay1wcm92aWRlci1jb25maWdzXCIpO2FzeW5jIGZ1bmN0aW9uIGdpKGUpe2lmKCFoaSl0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gZ2V0IERvY2sgcHJvdmlkZXIgY29uZmlnIC0gSW5kZXhEQiBub3Qgc3VwcG9ydGVkXCIpO3JldHVybiBhd2FpdCBDYShlLGhpKS5jYXRjaCgoZT0+e2NvbnNvbGUud2FybihcIkZhaWxlZCB0byByZXRyaWV2ZSBEb2NrIHByb3ZpZGVyIGNvbmZpZyBmcm9tIEluZGV4ZWREQlwiLGUpfSkpfWFzeW5jIGZ1bmN0aW9uIHZpKGUpe2F3YWl0IG1hKGUuaWQsZSxoaSl9Y29uc3QgQ2k9UCYmTCYmT2EoXCJvcGVuZmluLXdvcmtzcGFjZS1wbGF0Zm9ybS13b3Jrc3BhY2VzXCIsXCJ3b3Jrc3BhY2VzXCIpO2FzeW5jIGZ1bmN0aW9uIG1pKGUpe2lmKCFDaSl0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gZ2V0IHdvcmtzcGFjZSAtIEluZGV4REIgbm90IHN1cHBvcnRlZFwiKTtjb25zdCB0PWF3YWl0IENhKGUsQ2kpO2lmKHQpcmV0dXJuIHQud29ya3NwYWNlSWQ9ZS50b1N0cmluZygpLHQudGl0bGU9dC50aXRsZXx8dC53b3Jrc3BhY2VJZCx0fWFzeW5jIGZ1bmN0aW9uIHdpKGUpe2lmKCFDaSl0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gZ2V0IHdvcmtzcGFjZXMgLSBJbmRleERCIG5vdCBzdXBwb3J0ZWRcIik7Y29uc3QgdD1hd2FpdCB5YShDaSksbj0oYXdhaXQgUHJvbWlzZS5hbGwodC5tYXAoKGU9Pm1pKGUudG9TdHJpbmcoKSkpKSkpLmZpbHRlcigoZT0+ISFlKSk7cmV0dXJuIGU/bi5maWx0ZXIoKHQ9Pk1hKHQudGl0bGUsZSkpKTpufWFzeW5jIGZ1bmN0aW9uIGJpKHt3b3Jrc3BhY2U6ZX0pe2lmKCFDaSl0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gY3JlYXRlIHdvcmtzcGFjZSAtIEluZGV4REIgbm90IHN1cHBvcnRlZFwiKTtjb25zdCB0PShhd2FpdCB3aSgpKS5maW5kKCh0PT50LnRpdGxlPT09ZS50aXRsZSkpO2lmKHQmJnQud29ya3NwYWNlSWQhPT1lLndvcmtzcGFjZUlkKXRocm93IG5ldyBFcnJvcihgV29ya3NwYWNlIHdpdGggdGl0bGUgJyR7ZS50aXRsZX0nIGFscmVhZHkgZXhpc3RzLmApO2F3YWl0IG1hKGUud29ya3NwYWNlSWQsZSxDaSl9YXN5bmMgZnVuY3Rpb24geWkoZSl7aWYoIUNpKXRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBkZWxldGUgd29ya3NwYWNlIC0gSW5kZXhEQiBub3Qgc3VwcG9ydGVkXCIpO2F3YWl0IHdhKGUsQ2kpfWFzeW5jIGZ1bmN0aW9uIHhpKHt3b3Jrc3BhY2VJZDplLHdvcmtzcGFjZTp0fSl7aWYoIUNpKXRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byB1cGRhdGUgd29ya3NwYWNlcyAtIEluZGV4REIgbm90IHN1cHBvcnRlZFwiKTtpZighYXdhaXQgbWkoZSkpdGhyb3cgbmV3IEVycm9yKFwid29ya3NwYWNlIG5vdCBmb3VuZFwiKTthd2FpdCBiaSh7d29ya3NwYWNlOnR9KSxlIT09dC53b3Jrc3BhY2VJZCYmYXdhaXQgeWkoZSl9Y29uc3Qga2k9ZT0+e2NvbnN0IHQ9ZS5sYXlvdXQsbj10LmNvbnRlbnQ/QXQodC5jb250ZW50KTpbXSxyPW4ubGVuZ3RoO3JldHVybiByPjE/ey4uLmUsc2luZ2xlVmlld05hbWU6bnVsbH06MT09PXI/ey4uLmUsc2luZ2xlVmlld05hbWU6blswXS5uYW1lfTp2b2lkIDB9LFNpPWFzeW5jKGUsdCxuKT0+e2NvbnN0IHI9YXdhaXQgTHQoKS5Ccm93c2VyLmdldEFsbEF0dGFjaGVkUGFnZXMoKSxvPW5ldyBTZXQoci5tYXAoKGU9PmUudGl0bGUpKS5maWx0ZXIoKGU9PiEhZSkpKSxhPW5ldyBTZXQoci5tYXAoKGU9PmUucGFnZUlkKSkuZmlsdGVyKChlPT4hIWUpKSksaT10Py5kZWZhdWx0UGFnZU9wdGlvbnMsbD1cImVudGVycHJpc2VcIj09PW4/LndvcmtzcGFjZVBsYXRmb3JtPy53aW5kb3dUeXBlfHxcImVudGVycHJpc2VcIj09PXQ/LmRlZmF1bHRXaW5kb3dPcHRpb25zPy53b3Jrc3BhY2VQbGF0Zm9ybT8ud2luZG93VHlwZSxzPWF3YWl0IFUoKTtyZXR1cm4gZS5tYXAoKGU9PntpZihcInJlcGFyZW50XCI9PT1lLm11bHRpSW5zdGFuY2VWaWV3QmVoYXZpb3IpcmV0dXJuey4uLmUsbGF5b3V0Q29udGFpbmVyS2V5OkhlKCl9OygoZSx0KT0+e2UucGFnZUlkfHw9SGUoKSx0LmhhcyhlLnBhZ2VJZCkmJihjb25zb2xlLndhcm4oXCJQYWdlSUQgY29sbGlzaW9uIGRldGVjdGVkLiBBbGwgUGFnZSBJRHMgc2hvdWxkIGJlIHVuaXF1ZS4gQSByYW5kb20gbmV3IHBhZ2VJZCB3aWxsIGJlIGdlbmVyYXRlZFwiKSxlLnBhZ2VJZD1IZSgpKSx0LmFkZChlLnBhZ2VJZCl9KShlLGEpLGw/ZS5pY29uVXJsPWAke3N9L2ljb25zL2VudGVycHJpc2UtcGFnZS5zdmdgOmUudGl0bGU9cW4oZS50aXRsZSxBcnJheS5mcm9tKG8ua2V5cygpKSksby5hZGQoZS50aXRsZSksZS5wYW5lbHM/LnJlZHVjZSgoKGUsdCk9Pntjb25zdCBuPU9iamVjdC52YWx1ZXMocCk7aWYoIW4uaW5jbHVkZXModC5wb3NpdGlvbikpdGhyb3cgbmV3IEVycm9yKGBFbmNvdW50ZXJlZCBhIHBhbmVsIHdpdGggdW5zdXBwb3J0ZWQgcG9zaXRpb24gXCIke3QucG9zaXRpb259XCIuIFN1cHBvcnRlZCBwb3NpdGlvbnMgYXJlOiAke24udG9TdHJpbmcoKX1gKTtpZigxPT1lW3QucG9zaXRpb25dKXRocm93IG5ldyBFcnJvcihgRm91bmQgbW9yZSB0aGFuIDEgcGFuZWwgYXQgcG9zaXRpb246ICR7dC5wb3NpdGlvbn0uIE9ubHkgMSBwYW5lbCBhdCBhIGdpdmVuIHBvc2l0aW9uIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQuYCk7cmV0dXJuey4uLmUsW3QucG9zaXRpb25dOmVbdC5wb3NpdGlvbl0rMX19KSx7W3AuTGVmdF06MCxbcC5SaWdodF06MCxbcC5Ub3BdOjAsW3AuQm90dG9tXTowfSk7Y29uc3Qgcj1cInBhbmVsc1wiaW4gZT9lLnBhbmVsczppPy5wYW5lbHM7bGV0IGM9KHU9ZS5sYXlvdXQsZD10Py5kZWZhdWx0Vmlld09wdGlvbnMsanQoey4uLnV9LChlPT5SdChlLGQpKSkpO3ZhciB1LGQ7Y29uc3QgZj0oKGUsdCxuKT0+e2lmKG4pcmV0dXJuIE1pO2NvbnN0IHI9dD8ud29ya3NwYWNlUGxhdGZvcm0/Lm5ld1RhYlVybDtpZihyKXJldHVybiByO2NvbnN0IG89ZT8uZGVmYXVsdFdpbmRvd09wdGlvbnM/LndvcmtzcGFjZVBsYXRmb3JtPy5uZXdUYWJVcmw7cmV0dXJuIG98fHZvaWQgMH0pKHQsbixsKTtmJiYhYz8uc2V0dGluZ3M/Lm5ld1RhYkJ1dHRvbiYmKGM9ey4uLmMsc2V0dGluZ3M6ey4uLmM/LnNldHRpbmdzLG5ld1RhYkJ1dHRvbjp7dXJsOmZ9fX0pO3JldHVybnsuLi5pLC4uLmUscGFuZWxzOnImJkZuKHIpLGxheW91dENvbnRhaW5lcktleTpIZSgpLGxheW91dDpjLGlzTGF5b3V0Q3JlYXRlZDohMX19KSl9LE9pPWFzeW5jKCk9PmF3YWl0IFUoKStLLkJyb3dzZXIsTWk9VCtLLkJyb3dzZXIrXCJlbnRlcnByaXNlL2xhbmRpbmcvXCIsTGk9e2RpbWVuc2lvbnM6e2JvcmRlcldpZHRoOjMsaGVhZGVySGVpZ2h0OjMwfX0sX2k9KG5lLnV1aWQsZWUuQnJvd3NlckFkZHJlc3NTZWFyY2hQcmVmaXgpO2FzeW5jIGZ1bmN0aW9uIFBpKGUsdCxuKXtsZXQgcj1lO2NvbnN0IG89XCJlbnRlcnByaXNlXCI9PT1yLndvcmtzcGFjZVBsYXRmb3JtPy53aW5kb3dUeXBlfHxcImVudGVycHJpc2VcIj09PXQ/LmRlZmF1bHRXaW5kb3dPcHRpb25zPy53b3Jrc3BhY2VQbGF0Zm9ybT8ud2luZG93VHlwZTtpZihyLmxheW91dCYmIXIud29ya3NwYWNlUGxhdGZvcm0/LnBhZ2VzPy5sZW5ndGgpe2NvbnN0IGU9YXdhaXQgcHIoKSxuPXsuLi5hd2FpdCBGZShlLHIubGF5b3V0KSxpc0FjdGl2ZTohMH07ci53b3Jrc3BhY2VQbGF0Zm9ybXx8PXt9LHIud29ya3NwYWNlUGxhdGZvcm0ucGFnZXM9YXdhaXQgU2koW25dLHQscil9Y29uc3QgYT1uPy50aGVtZXM/LlswXTtpZihyLndvcmtzcGFjZVBsYXRmb3JtPy5wYWdlcz8ubGVuZ3RoKXtjb25zdCBlPWF3YWl0IFNpKHIud29ya3NwYWNlUGxhdGZvcm0ucGFnZXMsdCxyKSxpPWUsbD0oZT0+e2lmKCFlKXJldHVybjtsZXQgdD1lLmZpbmQoKGU9PmUuaXNBY3RpdmUpKTtyZXR1cm4hdCYmZS5sZW5ndGg+MCYmKGVbMF0uaXNBY3RpdmU9ITAsdD1lWzBdKSx0fSkoaSk7aWYoaS5mb3JFYWNoKChlPT57ZS5wYWdlSWQhPT1sPy5wYWdlSWQmJihlLmlzQWN0aXZlPSExKX0pKSxhd2FpdCBXbihpKSxyLndvcmtzcGFjZVBsYXRmb3JtLnBhZ2VzPWUscj1PZSh7fSxhd2FpdChhc3luYyBlPT4oe2NvbnRleHRNZW51T3B0aW9uczp7ZW5hYmxlZDohMX0sZXhwZXJpbWVudGFsOntzaG93RmF2aWNvbnM6ITAsZGVmYXVsdEZhdmljb25Vcmw6ZT9cImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEFRQUJBSUFBQVAvLy93QUFBQ0g1QkFFQUFBQUFMQUFBQUFBQkFBRUFBQUlDUkFFQU93PT1cIjpgJHthd2FpdCBVKCl9L2ljb25zL2RlZmF1bHRGYXZpY29uLnN2Z2B9LHZpZXdWaXNpYmlsaXR5OntzaG93Vmlld3NPblNwbGl0dGVyRHJhZzp7ZW5hYmxlZDohMH0sc2hvd1ZpZXdzT25XaW5kb3dSZXNpemU6e2VuYWJsZWQ6ITB9fX0pKShvKSx0Py5kZWZhdWx0V2luZG93T3B0aW9ucyxyLGF3YWl0KGFzeW5jKCk9Pih7YmFja2dyb3VuZFRocm90dGxpbmc6ITAsdXJsOmF3YWl0IE9pKCksY29udGV4dE1lbnU6ITAsY2xvc2VPbkxhc3RWaWV3UmVtb3ZlZDohMSxwZXJtaXNzaW9uczp7U3lzdGVtOntvcGVuVXJsV2l0aEJyb3dzZXI6e2VuYWJsZWQ6ITAscHJvdG9jb2xzOltcIm1haWx0b1wiXX19fX0pKSgpKSxsLmxheW91dD1PZShsLmxheW91dCxMaSksYXN5bmMgZnVuY3Rpb24oZSl7aWYoZS5pY29ufHxlLnRhc2tiYXJJY29uKXtjb25zdCB0PWZpbi5BcHBsaWNhdGlvbi5nZXRDdXJyZW50U3luYygpLG49YXdhaXQoYXdhaXQgdC5nZXRXaW5kb3coKSkuZ2V0T3B0aW9ucygpO2UudGFza2Jhckljb25Hcm91cHx8PW4udGFza2Jhckljb25Hcm91cHx8ZmluLm1lLmlkZW50aXR5LnV1aWR9aWYoZS53b3Jrc3BhY2VQbGF0Zm9ybS5pY29uKWlmKFwib2JqZWN0XCI9PXR5cGVvZiBlLndvcmtzcGFjZVBsYXRmb3JtLmljb24pe2NvbnN0IHQ9d2luZG93Lm1hdGNoTWVkaWEoXCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspXCIpO2UuaWNvbj10Lm1hdGNoZXM/ZS53b3Jrc3BhY2VQbGF0Zm9ybS5pY29uLmRhcms6ZS53b3Jrc3BhY2VQbGF0Zm9ybS5pY29uLmxpZ2h0fWVsc2UgZS5pY29uPWUud29ya3NwYWNlUGxhdGZvcm0uaWNvbn0ociksIXIuYmFja2dyb3VuZENvbG9yJiZhKWlmKFwicGFsZXR0ZVwiaW4gYSlyLmJhY2tncm91bmRDb2xvcj1hPy5wYWxldHRlPy5iYWNrZ3JvdW5kMnx8YT8ucGFsZXR0ZT8uYmFja2dyb3VuZFByaW1hcnk7ZWxzZXtjb25zdCBlPW4uc2VsZWN0ZWRTY2hlbWU9PT1nLkRhcmt8fG4uc2VsZWN0ZWRTY2hlbWU9PT1nLlN5c3RlbSYmd2luZG93Lm1hdGNoTWVkaWEoXCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspXCIpP2E/LnBhbGV0dGVzLmRhcms6YT8ucGFsZXR0ZXMubGlnaHQ7ci5iYWNrZ3JvdW5kQ29sb3I9ZT8uYmFja2dyb3VuZDJ8fGU/LmJhY2tncm91bmRQcmltYXJ5fXI9UnIociwhMCk7Y29uc3Qgcz1hd2FpdCBVKCk7cyYmKHIudXJsPXMrSy5Ccm93c2VyKSxyLmxheW91dD1sLmxheW91dCxyLmxheW91dFNuYXBzaG90PSgoZSx0KT0+KHtsYXlvdXRzOmUucmVkdWNlKCgoZSxuKT0+e2lmKCFuLmlzQWN0aXZlKXtpZighdClyZXR1cm4gZTtpZigha2kobikuc2luZ2xlVmlld05hbWUpcmV0dXJuIGV9cmV0dXJuIGVbbi5sYXlvdXRDb250YWluZXJLZXldPW4ubGF5b3V0LGV9KSx7fSkscGFnZXM6ZX0pKShyLndvcmtzcGFjZVBsYXRmb3JtLnBhZ2VzLG8pLHIud29ya3NwYWNlUGxhdGZvcm0ud2luZG93VHlwZT1yLndvcmtzcGFjZVBsYXRmb3JtLndpbmRvd1R5cGU/P3guQnJvd3Nlcn1pZihyLmNvcm5lclJvdW5kaW5nJiZkZWxldGUgci5jb3JuZXJSb3VuZGluZyxyLm5hbWV8fHIubGF5b3V0U25hcHNob3Q/ci5jb250ZXh0TWVudU9wdGlvbnM/LnRlbXBsYXRlPy5sZW5ndGg+MD9yLmNvbnRleHRNZW51T3B0aW9ucy50ZW1wbGF0ZT1yLmNvbnRleHRNZW51T3B0aW9ucy50ZW1wbGF0ZS5maWx0ZXIoKGU9PlwicHJpbnRcIiE9PWUpKTpyLmNvbnRleHRNZW51T3B0aW9ucz17dGVtcGxhdGU6W10sZW5hYmxlZDohMX06ci5uYW1lPWAke2VlLkNsYXNzaWNXaW5kb3d9LSR7SGUoKX1gLHIud29ya3NwYWNlUGxhdGZvcm0mJm4mJihyLndvcmtzcGFjZVBsYXRmb3JtLl90aGVtZURhdGE9biksbyl7ci53b3Jrc3BhY2VQbGF0Zm9ybS5uZXdQYWdlVXJsPU1pLHIud29ya3NwYWNlUGxhdGZvcm0ubmV3VGFiVXJsPU1pLHIubGF5b3V0JiYoci5sYXlvdXQuZGltZW5zaW9ucy5ib3JkZXJXaWR0aD00LHIubGF5b3V0LmRpbWVuc2lvbnMuaGVhZGVySGVpZ2h0PTI4KSxyLm5hbWU9ci5uYW1lfHxgJHtlZS5Ccm93c2VyV2luZG93fS0ke0hlKCl9YDtjb25zdCBlPV9pK3IubmFtZSx0PWZpbi5BcHBsaWNhdGlvbi5nZXRDdXJyZW50U3luYygpO2lmKCEoYXdhaXQgdC5nZXRWaWV3cygpKS5zb21lKCh0PT50LmlkZW50aXR5Lm5hbWU9PT1lKSkmJnIubmFtZS5zdGFydHNXaXRoKGVlLkJyb3dzZXJXaW5kb3cpKXtjb25zdCB0PWF3YWl0IFUoKStLLkJyb3dzZXJQb3B1cE1lbnVBZGRyZXNzU2VhcmNoUmVzdWx0c1ZpZXc7KGF3YWl0IGZpbi5WaWV3LmNyZWF0ZSh7bmFtZTplLGNvbnRleHRNZW51T3B0aW9uczp7ZW5hYmxlZDohMH0sdXJsOnQsdGFyZ2V0OmZpbi5tZS5pZGVudGl0eSxib3VuZHM6e3RvcDowLGxlZnQ6MCx3aWR0aDowLGhlaWdodDowfX0pKS5uYXZpZ2F0ZSh0KX19cmV0dXJuIHJ9Y29uc3QgRWk9YXN5bmMoZSx0KT0+e2NvbnN0IG49e3V1aWQ6dC51dWlkLG5hbWU6dC5uYW1lfTthd2FpdCB4byhuLGUudGl0bGU/P2F3YWl0IG9pKCksZS5zaG91bGRDZW50ZXJPbk1vbml0b3IpJiZmaW4uUGxhdGZvcm0uZ2V0Q3VycmVudFN5bmMoKS5xdWl0KCl9LGppPWU9Pntjb25zdCB0PWUubmFtZT09PWVlLkhvbWUsbj1lLm5hbWU/LnN0YXJ0c1dpdGgoZWUuSG9tZUludGVybmFsKSxyPWUubmFtZT8uc3RhcnRzV2l0aChlZS5Ccm93c2VyTWVudSl8fGUubmFtZT8uc3RhcnRzV2l0aChlZS5Ccm93c2VyU2F2ZU1lbnUpO3JldHVybiF0JiYhbiYmIXJ9O2NvbnN0IFJpPWU9PkpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZSkpO2FzeW5jIGZ1bmN0aW9uIElpKGUsdCxuKXtjb25zdCByPWUubWFuaWZlc3RVcmw/YXdhaXQgdCh7bWFuaWZlc3RVcmw6ZS5tYW5pZmVzdFVybH0sbik6dm9pZCAwO2lmKHI/LmludGVyb3AmJmUuaW50ZXJvcCl7Y29uc3QgdD17Li4uZSwuLi5yLGludGVyb3A6ZS5pbnRlcm9wfTtyZXR1cm4gZGVsZXRlIHQubWFuaWZlc3RVcmwsdH1yZXR1cm4gZX1jb25zdCBWaT1lPT57Y29uc3QgdD1SaShlKTtyZXR1cm4gdC5faW50ZXJuYWxXb3Jrc3BhY2VEYXRhPy5icm93c2VyTmF2aWdhdGlvbkJ1dHRvbnMmJih0LndvcmtzcGFjZVBsYXRmb3JtPXsuLi50LndvcmtzcGFjZVBsYXRmb3JtLGJyb3dzZXJOYXZpZ2F0aW9uQnV0dG9uczp0Ll9pbnRlcm5hbFdvcmtzcGFjZURhdGEuYnJvd3Nlck5hdmlnYXRpb25CdXR0b25zfSxkZWxldGUgdC5faW50ZXJuYWxXb3Jrc3BhY2VEYXRhLmJyb3dzZXJOYXZpZ2F0aW9uQnV0dG9ucyksdH0sSGk9ZT0+e2NvbnN0IHQ9UmkoZSk7cmV0dXJuIHQud29ya3NwYWNlUGxhdGZvcm0mJih0Ll9pbnRlcm5hbFdvcmtzcGFjZURhdGE9ey4uLnQuX2ludGVybmFsV29ya3NwYWNlRGF0YSwuLi50LndvcmtzcGFjZVBsYXRmb3JtfSxkZWxldGUgdC53b3Jrc3BhY2VQbGF0Zm9ybSksdH0sQWk9e3JlbG9hZDpbe2tleXM6XCJDdHJsK1JcIixwcmV2ZW50RGVmYXVsdDohMH1dLGJhY2s6W3trZXlzOlwiQWx0K0xlZnRcIixwcmV2ZW50RGVmYXVsdDohMH1dLGZvcndhcmQ6W3trZXlzOlwiQWx0K1JpZ2h0XCIscHJldmVudERlZmF1bHQ6ITB9XX0sVGk9e3JlbG9hZDpbe2tleXM6XCJDbWQrUlwiLHByZXZlbnREZWZhdWx0OiEwfV0sYmFjazpbe2tleXM6XCJDbWQrW1wiLHByZXZlbnREZWZhdWx0OiEwfSx7a2V5czpcIkNtZCtMZWZ0XCIscHJldmVudERlZmF1bHQ6ITB9XSxmb3J3YXJkOlt7a2V5czpcIkNtZCtdXCIscHJldmVudERlZmF1bHQ6ITB9LHtrZXlzOlwiQ21kK1JpZ2h0XCIscHJldmVudERlZmF1bHQ6ITB9XX0sRGk9YXN5bmMoKT0+YXdhaXQgRGEoKT9BaTpUaSxCaT1hc3luYyBlPT57Y29uc3QgdD1hd2FpdCBlLmdldEN1cnJlbnRXaW5kb3coKSxuPWF3YWl0IHQuZ2V0T3B0aW9ucygpLHI9bi53b3Jrc3BhY2VQbGF0Zm9ybT8ubmF2aWdhdGlvbkJ1dHRvbnM7cmV0dXJuIHIuZW5hYmxlZCYmIXIuaG90a2V5c0Rpc2FibGVkfSxaaT0oZSx0KT0+e2NvbnN0IG49ZmluLlZpZXcud3JhcFN5bmMoZSk7dD8ucmVsb2FkJiYoZT0+e2UuYWRkTGlzdGVuZXIoXCJob3RrZXlcIiwoYXN5bmMgdD0+e2lmKFwia2V5RG93blwiPT09dC5pbnB1dFR5cGUpe2NvbnN0IG49YXdhaXQgQmkoZSkscj1hd2FpdCBEYSgpLG89dC5jdHJsS2V5JiYhdC5hbHRLZXkmJiF0Lm1ldGFLZXkmJiF0LnNoaWZ0S2V5JiZcInJcIj09PXQua2V5LGE9IXQuY3RybEtleSYmIXQuYWx0S2V5JiZ0Lm1ldGFLZXkmJiF0LnNoaWZ0S2V5JiZcInJcIj09PXQua2V5O24mJihyP286YSkmJihlLnJlbG9hZCgpLHllKHt0eXBlOlwiVmlld1wiLGFjdGlvbjpcIlJlbG9hZFwiLHZhbHVlOmUuaWRlbnRpdHkubmFtZX0pKX19KSl9KShuKSx0Py5iYWNrJiYoZT0+e2UuYWRkTGlzdGVuZXIoXCJob3RrZXlcIiwoYXN5bmMgdD0+e2lmKFwia2V5RG93blwiPT09dC5pbnB1dFR5cGUpe2NvbnN0IG49YXdhaXQgQmkoZSkscj1hd2FpdCBEYSgpLG89IXQuY3RybEtleSYmdC5hbHRLZXkmJiF0Lm1ldGFLZXkmJiF0LnNoaWZ0S2V5JiZcIkFycm93TGVmdFwiPT09dC5rZXksYT0hdC5jdHJsS2V5JiYhdC5hbHRLZXkmJnQubWV0YUtleSYmIXQuc2hpZnRLZXkmJlwiQXJyb3dMZWZ0XCI9PT10LmtleSxpPSF0LmN0cmxLZXkmJiF0LmFsdEtleSYmdC5tZXRhS2V5JiYhdC5zaGlmdEtleSYmXCJbXCI9PT10LmtleTtuJiYocj9vOmF8fGkpJiYoZS5uYXZpZ2F0ZUJhY2soKSx5ZSh7dHlwZTpcIlZpZXdcIixhY3Rpb246XCJCYWNrXCIsdmFsdWU6ZS5pZGVudGl0eS5uYW1lfSkpfX0pKX0pKG4pLHQ/LmZvcndhcmQmJihlPT57ZS5hZGRMaXN0ZW5lcihcImhvdGtleVwiLChhc3luYyB0PT57aWYoXCJrZXlEb3duXCI9PT10LmlucHV0VHlwZSl7Y29uc3Qgbj1hd2FpdCBCaShlKSxyPWF3YWl0IERhKCksbz0hdC5jdHJsS2V5JiZ0LmFsdEtleSYmIXQubWV0YUtleSYmIXQuc2hpZnRLZXkmJlwiQXJyb3dSaWdodFwiPT09dC5rZXksYT0hdC5jdHJsS2V5JiYhdC5hbHRLZXkmJnQubWV0YUtleSYmIXQuc2hpZnRLZXkmJlwiQXJyb3dSaWdodFwiPT09dC5rZXksaT0hdC5jdHJsS2V5JiYhdC5hbHRLZXkmJnQubWV0YUtleSYmIXQuc2hpZnRLZXkmJlwiXVwiPT09dC5rZXk7biYmKHI/bzphfHxpKSYmKGUubmF2aWdhdGVGb3J3YXJkKCkseWUoe3R5cGU6XCJWaWV3XCIsYWN0aW9uOlwiRm9yd2FyZFwiLHZhbHVlOmUuaWRlbnRpdHkubmFtZX0pKX19KSl9KShuKX0sJGk9KGUsdCk9PlJpKGUpLm1hcCgoZT0+KFwiY29tcG9uZW50U3RhdGVcImluIGU/ZS5jb21wb25lbnRTdGF0ZT10KGUuY29tcG9uZW50U3RhdGUpOlwiY29udGVudFwiaW4gZSYmKGUuY29udGVudD0kaShlLmNvbnRlbnQsdCkpLGUpKSksTmk9ZT0+e2lmKGUpe2NvbnN0IHQ9UmkoZSk7cmV0dXJuIHQuY29udGVudCYmKHQuY29udGVudD0kaSh0LmNvbnRlbnQsVmkpKSx0fXJldHVybiBlfSxGaT1lPT57aWYoZSl7Y29uc3QgdD1SaShlKTtyZXR1cm4gdC5jb250ZW50JiYodC5jb250ZW50PSRpKHQuY29udGVudCxIaSkpLHR9cmV0dXJuIGV9O2FzeW5jIGZ1bmN0aW9uIFdpKHthcHA6ZSx0YXJnZXQ6dH0pe2NvbnN0IG49ZmluLlBsYXRmb3JtLmdldEN1cnJlbnRTeW5jKCk7c3dpdGNoKGUubWFuaWZlc3RUeXBlKXtjYXNlIHMuU25hcHNob3Q6cmV0dXJuIG4uYXBwbHlTbmFwc2hvdChlLm1hbmlmZXN0KTtjYXNlIHMuVmlldzpyZXR1cm4gYXN5bmMgZnVuY3Rpb24oZSx0KXtjb25zdCBuPWZpbi5QbGF0Zm9ybS5nZXRDdXJyZW50U3luYygpO2lmKFwidmlld1wiPT09dC5lbnRpdHlUeXBlKXtjb25zdCBuPWZpbi5WaWV3LndyYXBTeW5jKHQpLHI9YXdhaXQgbi5nZXRQYXJlbnRMYXlvdXQoKTtyZXR1cm4gYXdhaXQgci5yZXBsYWNlVmlldyh0LHttYW5pZmVzdFVybDplLm1hbmlmZXN0LHVybDp2b2lkIDAsdGFyZ2V0OnZvaWQgMH0pLG4uZGVzdHJveSgpfXJldHVybiBuLmNyZWF0ZVZpZXcoe25hbWU6dm9pZCAwLHVybDp2b2lkIDAsbWFuaWZlc3RVcmw6ZS5tYW5pZmVzdCx0YXJnZXQ6dm9pZCAwfSl9KGUsdCk7Y2FzZSBzLkV4dGVybmFsOnJldHVybiBmaW4uU3lzdGVtLmxhdW5jaEV4dGVybmFsUHJvY2Vzcyh7cGF0aDplLm1hbmlmZXN0LHV1aWQ6ZS5hcHBJZH0pO2RlZmF1bHQ6cmV0dXJuIGZpbi5BcHBsaWNhdGlvbi5zdGFydEZyb21NYW5pZmVzdChlLm1hbmlmZXN0KX19bGV0IFVpO2NvbnN0IHppPSgpPT57aWYoIVVpKXtjb25zdCBlPVRlKGAke1widW5kZWZpbmVkXCIhPXR5cGVvZiBmaW4mJmZpbi5tZS5pZGVudGl0eS51dWlkfS1lbnRlcnByaXNlLWFwcC1kaXJlY3RvcnlgKTtVaT1lKCl9cmV0dXJuIFVpfTthc3luYyBmdW5jdGlvbiBHaShlKXtpZighYXdhaXQgZmUoZS5pZGVudGl0eSkpcmV0dXJue307cmV0dXJuKGF3YWl0IHppKCkpLmRpc3BhdGNoKG90LkdldEFwcHMse3F1ZXJ5OmUucmVxLnNlYXJjaFF1ZXJ5fSl9YXN5bmMgZnVuY3Rpb24gS2koZSl7cmV0dXJuKGF3YWl0IHppKCkpLmRpc3BhdGNoKG90LkdldEN1cmF0ZWRDb250ZW50LGUpfWFzeW5jIGZ1bmN0aW9uIHFpKGUpe3JldHVybihhd2FpdCB6aSgpKS5kaXNwYXRjaChvdC5HZXRSZWNlbnRseVZpc2l0ZWQsZSl9YXN5bmMgZnVuY3Rpb24gWWkoZSl7Y29uc3QgdD0oYXdhaXQgaWUoKSkubWFwKChhc3luYyBlPT57Y29uc3QgdD1hd2FpdCBlLmdldE9wdGlvbnMoKTt0LndvcmtzcGFjZVBsYXRmb3JtPy5wYWdlcyYmdC5sYXlvdXQmJmF3YWl0KGFzeW5jIGU9Pihhd2FpdCB0dChlKSkuZGlzcGF0Y2goaXQuVXBkYXRlUGFnZXNXaW5kb3dPcHRpb25zKSkoZS5pZGVudGl0eSl9KSk7cmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKHQpLGU/ZSgpOlZlKCl9bGV0IEppPVtdO2NvbnN0IFhpPSgpPT5KaTtjb25zdCBRaT0oZSx0KT0+bj0+e2NvbnN0IHI9bnVsbCE9PWU7cmV0dXJuIGNsYXNzIGV4dGVuZHMgbntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5pc1dvcmtzcGFjZVBsYXRmb3JtPSgpPT4oe2lzV29ya3NwYWNlUGxhdGZvcm06ITAsaXNCcm93c2VySW5pdGlhbGl6ZWQ6ISFlLGFuYWx5dGljczp7aXNTdXBwb3J0ZWQ6ITB9fSksdGhpcy5kZXRhY2hQYWdlc0Zyb21XaW5kb3c9aXIsdGhpcy5nZXRBbGxBdHRhY2hlZFBhZ2VzPVluLHRoaXMuZ2V0UGFnZXNGb3JXaW5kb3c9c3IsdGhpcy5nZXRQYWdlRm9yV2luZG93PWNyLHRoaXMubWFya1Vuc2F2ZWRQYWdlc0FzU2F2ZWRJbnRlcm5hbD13cix0aGlzLmxhdW5jaEFwcD1XaSx0aGlzLnNhdmVQYWdlPXJyLHRoaXMuc2F2ZVdvcmtzcGFjZT1Fbyx0aGlzLmNyZWF0ZVNhdmVkUGFnZUludGVybmFsPWVyLHRoaXMudXBkYXRlU2F2ZWRQYWdlSW50ZXJuYWw9bnIsdGhpcy5kZWxldGVTYXZlZFBhZ2VJbnRlcm5hbD10cix0aGlzLnJlb3JkZXJQYWdlc0ZvcldpbmRvdz11cix0aGlzLmdldFVuaXF1ZVBhZ2VUaXRsZT1wcix0aGlzLnVwZGF0ZVBhZ2VGb3JXaW5kb3c9YXIsdGhpcy5nZXRMYXN0Rm9jdXNlZEJyb3dzZXJXaW5kb3c9dGEsdGhpcy5nZXRUaGVtZXM9WGksdGhpcy5pbnZva2VDdXN0b21BY3Rpb25JbnRlcm5hbD1pYSx0aGlzLnJlcXVlc3RRdWl0UGxhdGZvcm1EaWFsb2dJbnRlcm5hbD1FaSx0aGlzLmdldEN1cnJlbnRXb3Jrc3BhY2U9X28sdGhpcy5zZXRBY3RpdmVXb3Jrc3BhY2U9TW8sdGhpcy5nZXRMYW5ndWFnZVJlc291cmNlc0ludGVybmFsPUdvLHRoaXMub3Blbkdsb2JhbENvbnRleHRNZW51SW50ZXJuYWw9dGhpcy5vcGVuR2xvYmFsQ29udGV4dE1lbnVJbnRlcm5hbC5iaW5kKHRoaXMpLHRoaXMub3Blbkdsb2JhbENvbnRleHRNZW51PXRoaXMub3Blbkdsb2JhbENvbnRleHRNZW51LmJpbmQodGhpcyksdGhpcy5nZXRTYXZlZFBhZ2VzPXRoaXMuZ2V0U2F2ZWRQYWdlcy5iaW5kKHRoaXMpLHRoaXMuZ2V0U2F2ZWRQYWdlPXRoaXMuZ2V0U2F2ZWRQYWdlLmJpbmQodGhpcyksdGhpcy5jcmVhdGVTYXZlZFBhZ2U9dGhpcy5jcmVhdGVTYXZlZFBhZ2UuYmluZCh0aGlzKSx0aGlzLnVwZGF0ZVNhdmVkUGFnZT10aGlzLnVwZGF0ZVNhdmVkUGFnZS5iaW5kKHRoaXMpLHRoaXMuZGVsZXRlU2F2ZWRQYWdlPXRoaXMuZGVsZXRlU2F2ZWRQYWdlLmJpbmQodGhpcyksdGhpcy5oYW5kbGVQYWdlQ2hhbmdlcz10aGlzLmhhbmRsZVBhZ2VDaGFuZ2VzLmJpbmQodGhpcyksdGhpcy5hdHRhY2hQYWdlc1RvV2luZG93PXRoaXMuYXR0YWNoUGFnZXNUb1dpbmRvdy5iaW5kKHRoaXMpLHRoaXMub3BlblZpZXdUYWJDb250ZXh0TWVudUludGVybmFsPXRoaXMub3BlblZpZXdUYWJDb250ZXh0TWVudUludGVybmFsLmJpbmQodGhpcyksdGhpcy5vcGVuVmlld1RhYkNvbnRleHRNZW51PXRoaXMub3BlblZpZXdUYWJDb250ZXh0TWVudS5iaW5kKHRoaXMpLHRoaXMub3BlblBhZ2VUYWJDb250ZXh0TWVudUludGVybmFsPXRoaXMub3BlblBhZ2VUYWJDb250ZXh0TWVudUludGVybmFsLmJpbmQodGhpcyksdGhpcy5vcGVuUGFnZVRhYkNvbnRleHRNZW51PXRoaXMub3BlblBhZ2VUYWJDb250ZXh0TWVudS5iaW5kKHRoaXMpLHRoaXMuZ2V0U2F2ZWRXb3Jrc3BhY2VzPXRoaXMuZ2V0U2F2ZWRXb3Jrc3BhY2VzLmJpbmQodGhpcyksdGhpcy5nZXRTYXZlZFdvcmtzcGFjZT10aGlzLmdldFNhdmVkV29ya3NwYWNlLmJpbmQodGhpcyksdGhpcy5jcmVhdGVTYXZlZFdvcmtzcGFjZT10aGlzLmNyZWF0ZVNhdmVkV29ya3NwYWNlLmJpbmQodGhpcyksdGhpcy51cGRhdGVTYXZlZFdvcmtzcGFjZT10aGlzLnVwZGF0ZVNhdmVkV29ya3NwYWNlLmJpbmQodGhpcyksdGhpcy5kZWxldGVTYXZlZFdvcmtzcGFjZT10aGlzLmRlbGV0ZVNhdmVkV29ya3NwYWNlLmJpbmQodGhpcyksdGhpcy5nZXRDdXJyZW50V29ya3NwYWNlPXRoaXMuZ2V0Q3VycmVudFdvcmtzcGFjZS5iaW5kKHRoaXMpLHRoaXMuZ2V0RG9ja1Byb3ZpZGVyQ29uZmlnPXRoaXMuZ2V0RG9ja1Byb3ZpZGVyQ29uZmlnLmJpbmQodGhpcyksdGhpcy5zYXZlRG9ja1Byb3ZpZGVyQ29uZmlnPXRoaXMuc2F2ZURvY2tQcm92aWRlckNvbmZpZy5iaW5kKHRoaXMpLHRoaXMuYXBwbHlXb3Jrc3BhY2U9dGhpcy5hcHBseVdvcmtzcGFjZS5iaW5kKHRoaXMpLHRoaXMuc2V0QWN0aXZlV29ya3NwYWNlPXRoaXMuc2V0QWN0aXZlV29ya3NwYWNlLmJpbmQodGhpcyksdGhpcy5vcGVuU2F2ZUJ1dHRvbkNvbnRleHRNZW51PXRoaXMub3BlblNhdmVCdXR0b25Db250ZXh0TWVudS5iaW5kKHRoaXMpLHRoaXMub3BlblNhdmVCdXR0b25Db250ZXh0TWVudUludGVybmFsPXRoaXMub3BlblNhdmVCdXR0b25Db250ZXh0TWVudUludGVybmFsLmJpbmQodGhpcyksdGhpcy5nZXRTZWxlY3RlZFNjaGVtZT10aGlzLmdldFNlbGVjdGVkU2NoZW1lLmJpbmQodGhpcyksdGhpcy5zZXRTZWxlY3RlZFNjaGVtZT10aGlzLnNldFNlbGVjdGVkU2NoZW1lLmJpbmQodGhpcyksdGhpcy5hbmFseXRpY3NJbnRlcm5hbD10aGlzLmFuYWx5dGljc0ludGVybmFsLmJpbmQodGhpcyksdGhpcy5oYW5kbGVBbmFseXRpY3M9dGhpcy5oYW5kbGVBbmFseXRpY3MuYmluZCh0aGlzKSx0aGlzLmdldExhbmd1YWdlPXRoaXMuZ2V0TGFuZ3VhZ2UuYmluZCh0aGlzKSx0aGlzLnNldExhbmd1YWdlPXRoaXMuc2V0TGFuZ3VhZ2UuYmluZCh0aGlzKSx0aGlzLmhhbmRsZVNhdmVNb2RhbE9uUGFnZUNsb3NlPXRoaXMuaGFuZGxlU2F2ZU1vZGFsT25QYWdlQ2xvc2UuYmluZCh0aGlzKSx0aGlzLnNob3VsZFBhZ2VDbG9zZT10aGlzLnNob3VsZFBhZ2VDbG9zZS5iaW5kKHRoaXMpLHRoaXMuc2hvdWxkV2luZG93Q2xvc2U9dGhpcy5zaG91bGRXaW5kb3dDbG9zZS5iaW5kKHRoaXMpLHRoaXMuaGFuZGxlUGFnZXNBbmRXaW5kb3dDbG9zZT10aGlzLmhhbmRsZVBhZ2VzQW5kV2luZG93Q2xvc2UuYmluZCh0aGlzKSx0aGlzLnNldEFjdGl2ZVBhZ2U9dGhpcy5zZXRBY3RpdmVQYWdlLmJpbmQodGhpcyksdGhpcy5oYW5kbGVQYWdlQ2hhbmdlcz10aGlzLmhhbmRsZVBhZ2VDaGFuZ2VzLmJpbmQodGhpcyksdGhpcy5jb3B5UGFnZT10aGlzLmNvcHlQYWdlLmJpbmQodGhpcyksdGhpcy5hZGRQYWdlPXRoaXMuYWRkUGFnZS5iaW5kKHRoaXMpLHRoaXMuYWRkRGVmYXVsdFBhZ2U9dGhpcy5hZGREZWZhdWx0UGFnZS5iaW5kKHRoaXMpLHRoaXMubWFya1Vuc2F2ZWRQYWdlc0FzU2F2ZWRJbnRlcm5hbD10aGlzLm1hcmtVbnNhdmVkUGFnZXNBc1NhdmVkSW50ZXJuYWwuYmluZCh0aGlzKSx0aGlzLnRyYWNrUmVtb3ZlZFRhYkludGVybmFsPXRoaXMudHJhY2tSZW1vdmVkVGFiSW50ZXJuYWwuYmluZCh0aGlzKSx0aGlzLnJlc3RvcmVSZW1vdmVkVGFiSW50ZXJuYWw9dGhpcy5yZXN0b3JlUmVtb3ZlZFRhYkludGVybmFsLmJpbmQodGhpcyksdGhpcy50cmFja1Zpc2l0ZWRTaXRlSW50ZXJuYWw9dGhpcy50cmFja1Zpc2l0ZWRTaXRlSW50ZXJuYWwuYmluZCh0aGlzKSx0aGlzLmdldFJlY2VudGx5VmlzaXRlZFNpdGVzSW50ZXJuYWw9dGhpcy5nZXRSZWNlbnRseVZpc2l0ZWRTaXRlc0ludGVybmFsLmJpbmQodGhpcyksdGhpcy5nZXRGcmVxdWVudGx5VmlzaXRlZFNpdGVzSW50ZXJuYWw9dGhpcy5nZXRGcmVxdWVudGx5VmlzaXRlZFNpdGVzSW50ZXJuYWwuYmluZCh0aGlzKSx0aGlzLnNlYXJjaFNpdGVzSW50ZXJuYWw9dGhpcy5zZWFyY2hTaXRlc0ludGVybmFsLmJpbmQodGhpcyksdGhpcy5nZXRDdXJhdGVkQ29udGVudEludGVybmFsPXRoaXMuZ2V0Q3VyYXRlZENvbnRlbnRJbnRlcm5hbC5iaW5kKHRoaXMpLHRoaXMuaGFuZGxlUmVxdWVzdE5hdmlnYXRpb25JbnRlcm5hbD10aGlzLmhhbmRsZVJlcXVlc3ROYXZpZ2F0aW9uSW50ZXJuYWwuYmluZCh0aGlzKSx0aGlzLnJlZnJlc2hCb29rbWFya3NJbnRlcm5hbD10aGlzLnJlZnJlc2hCb29rbWFya3NJbnRlcm5hbC5iaW5kKHRoaXMpLHRoaXMuZ2V0Tm90aWZpY2F0aW9uc0NvbmZpZz10aGlzLmdldE5vdGlmaWNhdGlvbnNDb25maWcuYmluZCh0aGlzKX1hc3luYyBhcHBseVdvcmtzcGFjZSguLi5lKXtyZXR1cm4gT28uYXBwbHkodGhpcyxlKX1hc3luYyBnZXRTbmFwc2hvdCgpe2NvbnN0IGU9cj9hd2FpdCBZaSgoYXN5bmMoKT0+VmUoYXdhaXQgc3VwZXIuZ2V0U25hcHNob3Qodm9pZCAwLGZpbi5tZS5pZGVudGl0eSkpKSk6YXdhaXQgVmUoYXdhaXQgc3VwZXIuZ2V0U25hcHNob3Qodm9pZCAwLGZpbi5tZS5pZGVudGl0eSkpO2xldCB0PXsuLi5lLHdpbmRvd3M6ZS53aW5kb3dzLmZpbHRlcihqaSkubWFwKEllKX07cmV0dXJuIHQ9KGU9Pntjb25zdCB0PVJpKGUpO3JldHVybiB0LndpbmRvd3MuZm9yRWFjaCgoZT0+e2UubGF5b3V0JiYoZS5sYXlvdXQ9TmkoZS5sYXlvdXQpKSxlLndvcmtzcGFjZVBsYXRmb3JtPy5wYWdlcz8uZm9yRWFjaCgoZT0+e2U/LmxheW91dCYmKGUubGF5b3V0PU5pKGUubGF5b3V0KSl9KSl9KSksdH0pKHQpLHR9YXN5bmMgZ2V0Vmlld1NuYXBzaG90KGUpe2xldCB0PWF3YWl0IHN1cGVyLmdldFZpZXdTbmFwc2hvdChlKTtyZXR1cm4gdD1WaSh0KSx0fWFzeW5jIGFwcGx5U25hcHNob3Qoe3NuYXBzaG90OmUsb3B0aW9uczp0fSl7bGV0IG49ZTtcInN0cmluZ1wiPT10eXBlb2YgbiYmKG49YXdhaXQgc3VwZXIuZmV0Y2hNYW5pZmVzdCh7bWFuaWZlc3RVcmw6bn0sZmluLm1lLmlkZW50aXR5KSk7Y29uc3Qgbz1mdW5jdGlvbihlKXtmb3IoY29uc3QgdCBvZiBlLndpbmRvd3MpaWYodC53b3Jrc3BhY2VQbGF0Zm9ybT8ucGFnZXM/Lmxlbmd0aClyZXR1cm4hMDtyZXR1cm4hMX0obik7aWYoIXImJm8pdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBzbmFwc2hvdCBjYW5ub3QgYmUgYXBwbGllZCBhcyB0aGUgcGxhdGZvcm0gaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aG91dCB0aGUgYnJvd3Nlci5cIik7cmV0dXJuIG49KGU9Pntjb25zdCB0PVJpKGUpO3JldHVybiB0LndpbmRvd3MuZm9yRWFjaCgoZT0+e2UubGF5b3V0PUZpKGUubGF5b3V0KSxlLndvcmtzcGFjZVBsYXRmb3JtPy5wYWdlcz8uZm9yRWFjaCgoZT0+e2UubGF5b3V0PUZpKGUubGF5b3V0KX0pKX0pKSx0fSkobiksc3VwZXIuYXBwbHlTbmFwc2hvdCh7c25hcHNob3Q6bixvcHRpb25zOnR9KX1hc3luYyBjcmVhdGVXaW5kb3codCxuKXtpZihyJiZcInRlYXJvdXRcIj09PXQucmVhc29uKXtjb25zdCBlPWF3YWl0IGZpbi5XaW5kb3cud3JhcFN5bmMobikuZ2V0T3B0aW9ucygpLHI9ZS53b3Jrc3BhY2VQbGF0Zm9ybT8ud2luZG93VHlwZTt0LnRhc2tiYXJJY29uR3JvdXA9ZS50YXNrYmFySWNvbkdyb3VwLHImJih0LndvcmtzcGFjZVBsYXRmb3JtfHw9e30sdC53b3Jrc3BhY2VQbGF0Zm9ybS53aW5kb3dUeXBlPWUud29ya3NwYWNlUGxhdGZvcm0ud2luZG93VHlwZSxyPT09eC5QbGF0Zm9ybSYmKHQudXJsPWUudXJsKSl9aWYoIXJ8fHQud29ya3NwYWNlUGxhdGZvcm0/LndpbmRvd1R5cGU9PT14LlBsYXRmb3JtKXtjb25zdCBlPWF3YWl0IHN1cGVyLmNyZWF0ZVdpbmRvdyh0LG4pO3JldHVybiB5ZSh7dHlwZTpcIldpbmRvd1wiLGFjdGlvbjpcIk9wZW4gV2luZG93XCIsdmFsdWU6ZS5pZGVudGl0eS5uYW1lLGRhdGE6e3V1aWQ6ZS5pZGVudGl0eS51dWlkfX0pLGV9dmFyIG87bz17YWxsb3dlZDohMH0sQ2V8fChDZT0hMCx2ZShnZS5Ccm93c2VyLG8pKSwoKGU9W10pPT57Y29uc3QgdD1lLmZpbHRlcigoZT0+ZS50eXBlIT09Yi5DdXN0b20pKSxuPW5ldyBTZXQscj1bXTtmb3IoY29uc3QgZSBvZiB0KW4uaGFzKGUudHlwZSkmJnIucHVzaChlLnR5cGUpLG4uYWRkKGUudHlwZSk7aWYoci5sZW5ndGg+MCl7Y29uc3QgZT1yLmpvaW4oXCIsIFwiKTt0aHJvdyBuZXcgRXJyb3IoYEVuY291bnRlcmVkIGEgZHVwbGljYXRlIFwiJHtlfVwiIHRvb2xiYXIgYnV0dG9uLiBObyBtb3JlIHRoYW4gb25lIGluc3RhbmNlIG9mIGEgYnV0dG9uIHR5cGUgbWF5IGJlIHByb3ZpZGVkLmApfX0pKHQud29ya3NwYWNlUGxhdGZvcm0/LnRvb2xiYXJPcHRpb25zPy5idXR0b25zKTtsZXQgYT0oZT0+XCJ3b3Jrc3BhY2VQbGF0Zm9ybVwiaW4gZT9lOigoe3dvcmtzdGFja3M6ZSxwYWdlczp0LC4uLm59KT0+KHsuLi5uLHdvcmtzcGFjZVBsYXRmb3JtOntwYWdlczp0fHxlfHxudWxsfX0pKShlKSkodCk7ZT8uZGVmYXVsdFdpbmRvd09wdGlvbnM/LmhvdGtleXMmJihhLmhvdGtleXM9ZS5kZWZhdWx0V2luZG93T3B0aW9ucy5ob3RrZXlzKSxhPWF3YWl0IFBpKGEsZSx7dGhlbWVzOlhpKCksc2VsZWN0ZWRTY2hlbWU6dGhpcy5nZXRTZWxlY3RlZFNjaGVtZSgpfSksYT1hd2FpdChhc3luYyBlPT57Y29uc3QgdD1hd2FpdCBmaW4uU3lzdGVtLmdldE1vbml0b3JJbmZvKCk7bGV0IG49dC5wcmltYXJ5TW9uaXRvcjtjb25zdCByPWUuZGVmYXVsdExlZnQsbz1lLmRlZmF1bHRUb3A7dC5ub25QcmltYXJ5TW9uaXRvcnMuZm9yRWFjaCgoZT0+e2NvbnN0e3RvcDp0LGJvdHRvbTphLGxlZnQ6aSxyaWdodDpsfT1lLmF2YWlsYWJsZVJlY3Q7cj49aSYmcjw9bCYmbz49dCYmbzw9YSYmKG49ZSl9KSk7Y29uc3QgYT1uLmF2YWlsYWJsZVJlY3QuYm90dG9tLW4uYXZhaWxhYmxlUmVjdC50b3AsaT1uLmF2YWlsYWJsZVJlY3QucmlnaHQtbi5hdmFpbGFibGVSZWN0LmxlZnQ7cmV0dXJuIGUuZGVmYXVsdEhlaWdodD1NYXRoLm1pbihlLmRlZmF1bHRIZWlnaHR8fDgwMCxhKSxlLmRlZmF1bHRXaWR0aD1NYXRoLm1pbihlLmRlZmF1bHRXaWR0aHx8ODAwLGkpLGV9KShhKTtjb25zdCBpPWF3YWl0KGU9PmFzeW5jKHQsbik9PntsZXQgcj0hMTtjb25zdCBvPWF3YWl0IGUodCxuKTtyZXR1cm4gdD8ud29ya3NwYWNlUGxhdGZvcm0/Ll9pbnRlcm5hbERlZmVyU2hvd09wdGlvbnM/LmRlZmVyU2hvd0VuYWJsZWQ/KGF3YWl0IG8uYWRkTGlzdGVuZXIoXCJzaG93LXJlcXVlc3RlZFwiLChhc3luYygpPT57aWYocilyZXR1cm47Y29uc3QgZT1hd2FpdCBvLmdldE9wdGlvbnMoKTthd2FpdCBvLnVwZGF0ZU9wdGlvbnMoe3dvcmtzcGFjZVBsYXRmb3JtOnsuLi5lLndvcmtzcGFjZVBsYXRmb3JtLF9pbnRlcm5hbERlZmVyU2hvd09wdGlvbnM6ey4uLmUud29ya3NwYWNlUGxhdGZvcm0uX2ludGVybmFsRGVmZXJTaG93T3B0aW9ucyxhdXRvU2hvdzohMH19fSkscj0hMH0pKSxvKTpvfSkoKChlLHQpPT5zdXBlci5jcmVhdGVXaW5kb3coZSx0KSkpKGEsbik7cmV0dXJuIHllKHt0eXBlOlwiV2luZG93XCIsYWN0aW9uOlwiT3BlbiBXaW5kb3dcIix2YWx1ZTppLmlkZW50aXR5Lm5hbWUsZGF0YTp7dXVpZDppLmlkZW50aXR5LnV1aWR9fSksaX1hc3luYyBjcmVhdGVWaWV3KHQsbil7dC5vcHRzPVB0KHQub3B0cyxlPy5kZWZhdWx0Vmlld09wdGlvbnMpLGU/LmRlZmF1bHRWaWV3T3B0aW9ucz8uaG90a2V5cyYmKHQub3B0cy5ob3RrZXlzPWUuZGVmYXVsdFZpZXdPcHRpb25zLmhvdGtleXMpLHQub3B0cz1hd2FpdCBJaSh0Lm9wdHMsdGhpcy5mZXRjaE1hbmlmZXN0LG4pLHQub3B0cz1hd2FpdChhc3luYyBlPT57Y29uc3QgdD1SaShlKSxuPXQud29ya3NwYWNlUGxhdGZvcm0/LmJyb3dzZXJOYXZpZ2F0aW9uQnV0dG9ucztpZihuKXtjb25zdCBlPU9iamVjdC5rZXlzKG4pO2Zvcihjb25zdCByIG9mIGUpaWYobltyXSl7Y29uc3QgZT0oYXdhaXQgRGkoKSlbcl07dC5ob3RrZXlzP3QuaG90a2V5cy5wdXNoKC4uLmUpOnQuaG90a2V5cz1bLi4uZV19fXJldHVybiB0fSkodC5vcHRzKSx0Lm9wdHM9SGkodC5vcHRzKTtjb25zdCByPWF3YWl0IHN1cGVyLmNyZWF0ZVZpZXcodCxuKTtyZXR1cm4gWmkoci5pZGVudGl0eSx0Lm9wdHMuX2ludGVybmFsV29ya3NwYWNlRGF0YT8uYnJvd3Nlck5hdmlnYXRpb25CdXR0b25zKSxyfWFzeW5jIHJlcGxhY2VWaWV3KHQsbil7cmV0dXJuIHQub3B0cy5uZXdWaWV3PWF3YWl0IFB0KHQub3B0cy5uZXdWaWV3LGU/LmRlZmF1bHRWaWV3T3B0aW9ucyksdC5vcHRzLm5ld1ZpZXc9YXdhaXQgSWkodC5vcHRzLm5ld1ZpZXcsdGhpcy5mZXRjaE1hbmlmZXN0LG4pLHN1cGVyLnJlcGxhY2VWaWV3KHQsbil9YXN5bmMgcmVwbGFjZUxheW91dChlLHQpe3JldHVybiBhd2FpdCBmZSh0KXx8ZGVsZXRlIGUub3B0cy5sYXlvdXQ/LmRpbWVuc2lvbnMsc3VwZXIucmVwbGFjZUxheW91dChlLHQpfWFzeW5jIGdldFNhdmVkUGFnZSguLi5lKXtyZXR1cm4gX2EuYXBwbHkodGhpcyxlKX1hc3luYyBnZXRTYXZlZFBhZ2VzKC4uLmUpe3JldHVybiBQYS5hcHBseSh0aGlzLGUpfWFzeW5jIGNyZWF0ZVNhdmVkUGFnZSguLi5lKXtyZXR1cm4gRWEuYXBwbHkodGhpcyxlKX1hc3luYyBkZWxldGVTYXZlZFBhZ2UoLi4uZSl7cmV0dXJuIGphLmFwcGx5KHRoaXMsZSl9YXN5bmMgdXBkYXRlU2F2ZWRQYWdlKC4uLmUpe3JldHVybiBSYS5hcHBseSh0aGlzLGUpfWFzeW5jIGdldFNhdmVkV29ya3NwYWNlKC4uLmUpe3JldHVybiBtaS5hcHBseSh0aGlzLGUpfWFzeW5jIGdldFNhdmVkV29ya3NwYWNlcyguLi5lKXtyZXR1cm4gd2kuYXBwbHkodGhpcyxlKX1hc3luYyBjcmVhdGVTYXZlZFdvcmtzcGFjZSguLi5lKXtyZXR1cm4gYmkuYXBwbHkodGhpcyxlKX1hc3luYyBkZWxldGVTYXZlZFdvcmtzcGFjZSguLi5lKXtyZXR1cm4geWkuYXBwbHkodGhpcyxlKX1hc3luYyB1cGRhdGVTYXZlZFdvcmtzcGFjZSguLi5lKXtyZXR1cm4geGkuYXBwbHkodGhpcyxlKX1hc3luYyBnZXREb2NrUHJvdmlkZXJDb25maWcoLi4uZSl7cmV0dXJuIGdpLmFwcGx5KHRoaXMsZSl9YXN5bmMgc2F2ZURvY2tQcm92aWRlckNvbmZpZyguLi5lKXtyZXR1cm4gdmkuYXBwbHkodGhpcyxlKX1hc3luYyBhdHRhY2hQYWdlc1RvV2luZG93KHQpe2NvbnN0IG49YXdhaXQgU2kodC5wYWdlcyxlKTthd2FpdCBXbihuKSxhd2FpdCBvcih7Li4udCxwYWdlczpufSl9YXN5bmMgYWRkUGFnZShlKXtjb25zdCB0PWF3YWl0IGZlKGUuaWRlbnRpdHkpLG49YXdhaXQgWWUoZS5pZGVudGl0eSkse3BhZ2U6cixpbnNlcnRpb25JbmRleDpvfT1lO3I/LnRpdGxlfHwoci50aXRsZT1hd2FpdCBuLmRpc3BhdGNoKHplLkdldFVuaXF1ZVBhZ2VUaXRsZSx2b2lkIDApKTtjb25zdCBhPShhd2FpdCB0aGlzLmdldEFsbEF0dGFjaGVkUGFnZXMoKSkuZmluZCgoZT0+ZS5wYWdlSWQ9PT1yLnBhZ2VJZHx8ZS50aXRsZT09PXIudGl0bGUpKTtpZihhKXtpZihhLnBhZ2VJZD09PXIucGFnZUlkKXRocm93IG5ldyBFcnJvcihgcGFnZSB3aXRoIGlkICR7ci5wYWdlSWR9IGlzIGFscmVhZHkgYXR0YWNoZWQgdG8gYSBicm93c2VyIHdpbmRvdyAke2EucGFyZW50SWRlbnRpdHkubmFtZX1gKTtpZighdCl0aHJvdyBuZXcgRXJyb3IoYGFkZFBhZ2UgdGl0bGUgY29sbGlzaW9uLCBwYWdlIHdpdGggdGl0bGUgJHtyLnRpdGxlfSBhbHJlYWR5IGV4aXN0cywgY29uZmxpY3RpbmcgcGFnZSBpZDogJHthLnBhZ2VJZH0gd2l0aCB0aXRsZSAke2EudGl0bGV9YCl9Y29uc3QgaT17aWRlbnRpdHk6ZS5pZGVudGl0eSxwYWdlczpbey4uLnIsbXVsdGlJbnN0YW5jZVZpZXdCZWhhdmlvcjpcImR1cGxpY2F0ZVwifV0saW5zZXJ0aW9uSW5kZXg6b307YXdhaXQgdGhpcy5hdHRhY2hQYWdlc1RvV2luZG93KGkpfWFzeW5jIGFkZERlZmF1bHRQYWdlKGUpe2F3YWl0IHRoaXMuYWRkUGFnZShlKSxhd2FpdCB0aGlzLnNldEFjdGl2ZVBhZ2Uoe2lkZW50aXR5OmUuaWRlbnRpdHkscGFnZUlkOmUucGFnZS5wYWdlSWR9KX1hc3luYyBzZXRBY3RpdmVQYWdlKC4uLmUpe3JldHVybiBsci5hcHBseSh0aGlzLGUpfWFzeW5jIG9wZW5HbG9iYWxDb250ZXh0TWVudUludGVybmFsKC4uLmUpe3JldHVybiB1aS5hcHBseSh0aGlzLGUpfWFzeW5jIG9wZW5HbG9iYWxDb250ZXh0TWVudSguLi5lKXtyZXR1cm4gY2kuYXBwbHkodGhpcyxbLi4uZSxwYS5HbG9iYWxNZW51LHNpLkJvdHRvbVJpZ2h0XSl9YXN5bmMgb3BlblZpZXdUYWJDb250ZXh0TWVudUludGVybmFsKC4uLmUpe3JldHVybiBkaS5hcHBseSh0aGlzLGUpfWFzeW5jIG9wZW5WaWV3VGFiQ29udGV4dE1lbnUoLi4uZSl7cmV0dXJuIGNpLmFwcGx5KHRoaXMsWy4uLmUscGEuQ29udGV4dE1lbnVdKX1hc3luYyBvcGVuUGFnZVRhYkNvbnRleHRNZW51SW50ZXJuYWwoLi4uZSl7cmV0dXJuIHBpLmFwcGx5KHRoaXMsZSl9YXN5bmMgb3BlblBhZ2VUYWJDb250ZXh0TWVudSguLi5lKXtyZXR1cm4gY2kuYXBwbHkodGhpcyxbLi4uZSxwYS5Db250ZXh0TWVudV0pfWFzeW5jIG9wZW5TYXZlQnV0dG9uQ29udGV4dE1lbnUoLi4uZSl7cmV0dXJuIGNpLmFwcGx5KHRoaXMsZSl9YXN5bmMgb3BlblNhdmVCdXR0b25Db250ZXh0TWVudUludGVybmFsKC4uLmUpe3JldHVybiBmaS5hcHBseSh0aGlzLGUpfWdldFNlbGVjdGVkU2NoZW1lKC4uLmUpe3JldHVybiBPdC5hcHBseSh0aGlzLGUpfWFzeW5jIHNldFNlbGVjdGVkU2NoZW1lKC4uLmUpe3JldHVybiBTdC5hcHBseSh0aGlzLGUpfWFzeW5jIGhhbmRsZVBhZ2VDaGFuZ2VzKC4uLmUpe3JldHVybiBtci5hcHBseSh0aGlzLGUpfWFzeW5jIGFuYWx5dGljc0ludGVybmFsKC4uLmUpe3JldHVybiBQci5hcHBseSh0aGlzLGUpfWFzeW5jIGhhbmRsZUFuYWx5dGljcyguLi5lKXt9YXN5bmMgaGFuZGxlU2F2ZU1vZGFsT25QYWdlQ2xvc2UoLi4uZSl7cmV0dXJuIGZyLmFwcGx5KHRoaXMsZSl9YXN5bmMgc2hvdWxkUGFnZUNsb3NlKC4uLmUpe3JldHVybiBoci5hcHBseSh0aGlzLGUpfWFzeW5jIHNob3VsZFdpbmRvd0Nsb3NlKC4uLmUpe3JldHVybiBnci5hcHBseSh0aGlzLGUpfWhhbmRsZVBhZ2VzQW5kV2luZG93Q2xvc2UoLi4uZSl7cmV0dXJuIHZyLmFwcGx5KHRoaXMsZSl9YXN5bmMgY29weVBhZ2UoLi4uZSl7cmV0dXJuIENyLmFwcGx5KHRoaXMsZSl9YXN5bmMgZ2V0Tm90aWZpY2F0aW9uc0NvbmZpZygpe3JldHVybiB0fWFzeW5jIHNldExhbmd1YWdlKC4uLmUpe3JldHVybiB6by5hcHBseSh0aGlzLGUpfWFzeW5jIGdldExhbmd1YWdlKCl7cmV0dXJuIFVvLmFwcGx5KHRoaXMpfWFzeW5jIHRyYWNrUmVtb3ZlZFRhYkludGVybmFsKC4uLmUpe3JldHVybiBWYS5hcHBseSh0aGlzLGUpfWFzeW5jIHJlc3RvcmVSZW1vdmVkVGFiSW50ZXJuYWwoKXtjb25zdCBlPWF3YWl0KGFzeW5jKCk9Pntjb25zdCBlPWF3YWl0IHlhKElhKTtpZihlLmxlbmd0aD4wKXtjb25zdCB0PU1hdGgubWF4KC4uLmUpLG49YXdhaXQgQ2EodCxJYSk7cmV0dXJuIGF3YWl0IHdhKHQsSWEpLG59fSkoKTtpZihlPy5wYWdlKWlmKGF3YWl0IHNlKGUuaWRlbnRpdHkpKXtjb25zdCB0PUx0KCkuQnJvd3Nlci53cmFwU3luYyhlLmlkZW50aXR5KTthd2FpdCB0LmFkZFBhZ2UoZS5wYWdlKSxhd2FpdCB0LnNldEFjdGl2ZVBhZ2UoZS5wYWdlLnBhZ2VJZCl9ZWxzZSBMdCgpLmNyZWF0ZVdpbmRvdyh7bmFtZTplLmlkZW50aXR5Lm5hbWUsd29ya3NwYWNlUGxhdGZvcm06e3BhZ2VzOltlLnBhZ2VdLHdpbmRvd1R5cGU6eC5Ccm93c2VyfX0pO2Vsc2UgZT8ud2luZG93JiZMdCgpLmNyZWF0ZVdpbmRvdyh7d29ya3NwYWNlUGxhdGZvcm06e3BhZ2VzOmUud2luZG93LnBhZ2VzLHdpbmRvd1R5cGU6eC5Ccm93c2VyfX0pfWFzeW5jIHRyYWNrVmlzaXRlZFNpdGVJbnRlcm5hbCguLi5lKXtyZXR1cm4gQWEuYXBwbHkodGhpcyxlKX1hc3luYyBnZXRSZWNlbnRseVZpc2l0ZWRTaXRlc0ludGVybmFsKC4uLmUpe3JldHVybiBhd2FpdCBxaS5hcHBseSh0aGlzLGUpfWFzeW5jIGdldEZyZXF1ZW50bHlWaXNpdGVkU2l0ZXNJbnRlcm5hbCguLi5lKXtyZXR1cm4gVGEuYXBwbHkodGhpcyxlKX1hc3luYyBzZWFyY2hTaXRlc0ludGVybmFsKC4uLmUpe3JldHVybiBhd2FpdCBHaS5hcHBseSh0aGlzLGUpfWFzeW5jIGdldEN1cmF0ZWRDb250ZW50SW50ZXJuYWwoLi4uZSl7cmV0dXJuIGF3YWl0IEtpLmFwcGx5KHRoaXMsZSl9YXN5bmMgaGFuZGxlUmVxdWVzdE5hdmlnYXRpb25JbnRlcm5hbCguLi5lKXt9YXN5bmMgcmVmcmVzaEJvb2ttYXJrc0ludGVybmFsKCl7KGF3YWl0IEx0KCkuQnJvd3Nlci5nZXRBbGxXaW5kb3dzKCkpLmZvckVhY2goKGFzeW5jKHtpZGVudGl0eTplfSk9PnsoYXdhaXQgdHQoZSkpLmRpc3BhdGNoKGl0LlJlZnJlc2hCb29rbWFya3NJbnRlcm5hbCl9KSl9fX07ZnVuY3Rpb24gZWwoZSx0LG4pe2NvbnN0IHI9UWkoZSxuKTt0cnl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdD9lPT50KHIoZSkpOkFycmF5LmlzQXJyYXkodCk/Wy4uLnQscl06ZT0+bmV3KHIoZSkpfWNhdGNoKGUpe3Rocm93IG5ldyBFcnJvcihcIldvcmtzcGFjZVBsYXRmb3JtLmluaXQgRXJyb3I6XCIsZSl9fWFzeW5jIGZ1bmN0aW9uIHRsKCl7b2EoKSxhc3luYyBmdW5jdGlvbigpe2NvbnN0IGU9ZmluLkFwcGxpY2F0aW9uLmdldEN1cnJlbnRTeW5jKCk7YXdhaXQgZS5hZGRMaXN0ZW5lcihcIndpbmRvdy1mb2N1c2VkXCIsbmEpfSgpO01vKGF3YWl0IExvKCkpfWxldCBubDtmdW5jdGlvbiBybCh7b3ZlcnJpZGVDYWxsYmFjazplLGludGVyb3BPdmVycmlkZTp0LGJyb3dzZXI6bixub3RpZmljYXRpb25zOnIsYW5hbHl0aWNzOm8saW50ZWdyYXRpb25zOmE9W10sd29ya3NwYWNlQXNhcjppfSl7aWYoIUwpdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGJlIHVzZWQgb3V0c2lkZSBhbiBPcGVuRmluIGVudi5cIik7cmV0dXJuIG5sfHwobmw9KGFzeW5jKCk9Pntjb25zdCBsPWZpbi5QbGF0Zm9ybS5nZXRDdXJyZW50U3luYygpO3ZhciBzLGM7aWYobC5vbmNlKFwicGxhdGZvcm0tYXBpLXJlYWR5XCIsKCgpPT50bCgpKSksbC5vbihcIndpbmRvdy1zaG93LWFsbC1kb3dubG9hZHNcIiwoKHtuYW1lOmUsdXVpZDp0fSk9Pntabyh7bmFtZTplLHV1aWQ6dH0pfSkpLG4/LnRpdGxlJiYocz1uLnRpdGxlLHJpPXMpLEVyKG8pLGkpe2NvbnN0IGU9YHdvcmtzcGFjZS0ke2VuY29kZVVSSUNvbXBvbmVudChmaW4ubWUudXVpZCl9YCx7YmFzZVVybDp0fT1hd2FpdCBmaW4uU3lzdGVtLnNlcnZlQXNzZXQoey4uLmksaG9zdE5hbWU6ZX0pO1c9dH1hd2FpdCBmaW4uUGxhdGZvcm0uaW5pdCh7b3ZlcnJpZGVDYWxsYmFjazplbChuLGV8fG4/Lm92ZXJyaWRlQ2FsbGJhY2ssciksaW50ZXJvcE92ZXJyaWRlOmVhKHR8fG4/LmludGVyb3BPdmVycmlkZSxuKX0pLGM9e2FsbG93ZWQ6ITB9LHZlKGdlLlBsYXRmb3JtLGMpLGF3YWl0IFByb21pc2UuYWxsKGEubWFwKChhc3luYyBlPT57KChlLHQpPT57dmUoYCR7Z2UuTWljcm9mbG93fToke2V9YCx0LFwiaW50ZWdyYXRpb24tZmVhdHVyZVwiKX0pKGUud29ya2Zsb3dJbnRlZ3JhdGlvbk5hbWUse2FsbG93ZWQ6ITAsYXBpVmVyc2lvbjpEfSksYXdhaXQgZS5faW5pdGlhbGl6ZVdvcmtmbG93cygpfSkpKSxoZShuKSYmKE5uPSEwKX0pKCkpLG5sfWNvbnN0IG9sPWFzeW5jKHt0aGVtZTplLGN1c3RvbUFjdGlvbnM6dCxsYW5ndWFnZTpuLC4uLnJ9KT0+e2NvbnN0IG89RC5zcGxpdChcIi5cIikubWFwKChlPT5wYXJzZUludChlKSkpLGE9YXdhaXQoYXN5bmMgZT0+e2lmKChhd2FpdCBGKCkpLmRpc2FibGVSdW50aW1lVmFsaWRhdGlvbilyZXR1cm4hMDtpZihhd2FpdCBmZSgpKXJldHVybiEwO2NvbnN0IHQ9KGF3YWl0IGZpbi5TeXN0ZW0uZ2V0VmVyc2lvbigpKS5zcGxpdChcIi5cIikubWFwKChlPT5wYXJzZUludChlKSkpLG49ZS5ldmVyeSgoKG4scik9PiEocjwzKXx8dFtyXT09PWVbcl0pKTtyZXR1cm4gbn0pKG8pO2lmKCFhKXRocm93IG5ldyBFcnJvcihgUnVudGltZSB2ZXJzaW9uIGlzIG5vdCBzdXBwb3J0ZWQuICAke29bMF19LiR7b1sxXX0uJHtvWzJdfS4qIGlzIHJlcXVpcmVkYCk7dmFyIGk7cmV0dXJuIGUmJighZnVuY3Rpb24oZSl7Y29uc3QgdD1lPT57aWYoIWUuaW5jbHVkZXMoXCIjXCIpJiYhZS5pbmNsdWRlcyhcInJnYlwiKSYmIWUuaW5jbHVkZXMoXCJoc2xcIikpdGhyb3cgbmV3IEVycm9yKFwiQmFja2dyb3VuZCBwcmltYXJ5IGNvbG9yIGlzIG5vdCB0aGUgcmlnaHQgZm9ybWF0LlwiKX07ZS5mb3JFYWNoKChlPT57XCJwYWxldHRlXCJpbiBlJiZ0KGUucGFsZXR0ZS5iYWNrZ3JvdW5kUHJpbWFyeSksXCJwYWxldHRlc1wiaW4gZSYmKHQoZS5wYWxldHRlcy5kYXJrLmJhY2tncm91bmRQcmltYXJ5KSx0KGUucGFsZXR0ZXMubGlnaHQuYmFja2dyb3VuZFByaW1hcnkpKX0pKSxKaT1lfShlKSxpPXthbGxvd2VkOiEwfSx2ZShnZS5UaGVtaW5nLGkpKSx0JiYoYWE9dCksYXdhaXQgS28obj8uaW5pdGlhbExhbmd1YWdlKSxybChyKX19KSgpLG1vZHVsZS5leHBvcnRzPXJ9KSgpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiLyohIEZvciBsaWNlbnNlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgaW5kZXguanMuTElDRU5TRS50eHQgKi9cbigoKT0+e3ZhciBlPXs1MzA0OihlLHQsbik9Pnt2YXIgcj17ODU5NDooZSx0LG4pPT57bi5kKHQse1o6KCk9Pm99KTt2YXIgcj0vXigoY2hpbGRyZW58ZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUx8a2V5fHJlZnxhdXRvRm9jdXN8ZGVmYXVsdFZhbHVlfGRlZmF1bHRDaGVja2VkfGlubmVySFRNTHxzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmd8c3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nfHZhbHVlTGlua3xhY2NlcHR8YWNjZXB0Q2hhcnNldHxhY2Nlc3NLZXl8YWN0aW9ufGFsbG93fGFsbG93VXNlck1lZGlhfGFsbG93UGF5bWVudFJlcXVlc3R8YWxsb3dGdWxsU2NyZWVufGFsbG93VHJhbnNwYXJlbmN5fGFsdHxhc3luY3xhdXRvQ29tcGxldGV8YXV0b1BsYXl8Y2FwdHVyZXxjZWxsUGFkZGluZ3xjZWxsU3BhY2luZ3xjaGFsbGVuZ2V8Y2hhclNldHxjaGVja2VkfGNpdGV8Y2xhc3NJRHxjbGFzc05hbWV8Y29sc3xjb2xTcGFufGNvbnRlbnR8Y29udGVudEVkaXRhYmxlfGNvbnRleHRNZW51fGNvbnRyb2xzfGNvbnRyb2xzTGlzdHxjb29yZHN8Y3Jvc3NPcmlnaW58ZGF0YXxkYXRlVGltZXxkZWNvZGluZ3xkZWZhdWx0fGRlZmVyfGRpcnxkaXNhYmxlZHxkaXNhYmxlUGljdHVyZUluUGljdHVyZXxkb3dubG9hZHxkcmFnZ2FibGV8ZW5jVHlwZXxmb3JtfGZvcm1BY3Rpb258Zm9ybUVuY1R5cGV8Zm9ybU1ldGhvZHxmb3JtTm9WYWxpZGF0ZXxmb3JtVGFyZ2V0fGZyYW1lQm9yZGVyfGhlYWRlcnN8aGVpZ2h0fGhpZGRlbnxoaWdofGhyZWZ8aHJlZkxhbmd8aHRtbEZvcnxodHRwRXF1aXZ8aWR8aW5wdXRNb2RlfGludGVncml0eXxpc3xrZXlQYXJhbXN8a2V5VHlwZXxraW5kfGxhYmVsfGxhbmd8bGlzdHxsb2FkaW5nfGxvb3B8bG93fG1hcmdpbkhlaWdodHxtYXJnaW5XaWR0aHxtYXh8bWF4TGVuZ3RofG1lZGlhfG1lZGlhR3JvdXB8bWV0aG9kfG1pbnxtaW5MZW5ndGh8bXVsdGlwbGV8bXV0ZWR8bmFtZXxub25jZXxub1ZhbGlkYXRlfG9wZW58b3B0aW11bXxwYXR0ZXJufHBsYWNlaG9sZGVyfHBsYXlzSW5saW5lfHBvc3RlcnxwcmVsb2FkfHByb2ZpbGV8cmFkaW9Hcm91cHxyZWFkT25seXxyZWZlcnJlclBvbGljeXxyZWx8cmVxdWlyZWR8cmV2ZXJzZWR8cm9sZXxyb3dzfHJvd1NwYW58c2FuZGJveHxzY29wZXxzY29wZWR8c2Nyb2xsaW5nfHNlYW1sZXNzfHNlbGVjdGVkfHNoYXBlfHNpemV8c2l6ZXN8c2xvdHxzcGFufHNwZWxsQ2hlY2t8c3JjfHNyY0RvY3xzcmNMYW5nfHNyY1NldHxzdGFydHxzdGVwfHN0eWxlfHN1bW1hcnl8dGFiSW5kZXh8dGFyZ2V0fHRpdGxlfHR5cGV8dXNlTWFwfHZhbHVlfHdpZHRofHdtb2RlfHdyYXB8YWJvdXR8ZGF0YXR5cGV8aW5saXN0fHByZWZpeHxwcm9wZXJ0eXxyZXNvdXJjZXx0eXBlb2Z8dm9jYWJ8YXV0b0NhcGl0YWxpemV8YXV0b0NvcnJlY3R8YXV0b1NhdmV8Y29sb3J8aW5lcnR8aXRlbVByb3B8aXRlbVNjb3BlfGl0ZW1UeXBlfGl0ZW1JRHxpdGVtUmVmfG9ufHJlc3VsdHN8c2VjdXJpdHl8dW5zZWxlY3RhYmxlfGFjY2VudEhlaWdodHxhY2N1bXVsYXRlfGFkZGl0aXZlfGFsaWdubWVudEJhc2VsaW5lfGFsbG93UmVvcmRlcnxhbHBoYWJldGljfGFtcGxpdHVkZXxhcmFiaWNGb3JtfGFzY2VudHxhdHRyaWJ1dGVOYW1lfGF0dHJpYnV0ZVR5cGV8YXV0b1JldmVyc2V8YXppbXV0aHxiYXNlRnJlcXVlbmN5fGJhc2VsaW5lU2hpZnR8YmFzZVByb2ZpbGV8YmJveHxiZWdpbnxiaWFzfGJ5fGNhbGNNb2RlfGNhcEhlaWdodHxjbGlwfGNsaXBQYXRoVW5pdHN8Y2xpcFBhdGh8Y2xpcFJ1bGV8Y29sb3JJbnRlcnBvbGF0aW9ufGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnN8Y29sb3JQcm9maWxlfGNvbG9yUmVuZGVyaW5nfGNvbnRlbnRTY3JpcHRUeXBlfGNvbnRlbnRTdHlsZVR5cGV8Y3Vyc29yfGN4fGN5fGR8ZGVjZWxlcmF0ZXxkZXNjZW50fGRpZmZ1c2VDb25zdGFudHxkaXJlY3Rpb258ZGlzcGxheXxkaXZpc29yfGRvbWluYW50QmFzZWxpbmV8ZHVyfGR4fGR5fGVkZ2VNb2RlfGVsZXZhdGlvbnxlbmFibGVCYWNrZ3JvdW5kfGVuZHxleHBvbmVudHxleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkfGZpbGx8ZmlsbE9wYWNpdHl8ZmlsbFJ1bGV8ZmlsdGVyfGZpbHRlclJlc3xmaWx0ZXJVbml0c3xmbG9vZENvbG9yfGZsb29kT3BhY2l0eXxmb2N1c2FibGV8Zm9udEZhbWlseXxmb250U2l6ZXxmb250U2l6ZUFkanVzdHxmb250U3RyZXRjaHxmb250U3R5bGV8Zm9udFZhcmlhbnR8Zm9udFdlaWdodHxmb3JtYXR8ZnJvbXxmcnxmeHxmeXxnMXxnMnxnbHlwaE5hbWV8Z2x5cGhPcmllbnRhdGlvbkhvcml6b250YWx8Z2x5cGhPcmllbnRhdGlvblZlcnRpY2FsfGdseXBoUmVmfGdyYWRpZW50VHJhbnNmb3JtfGdyYWRpZW50VW5pdHN8aGFuZ2luZ3xob3JpekFkdlh8aG9yaXpPcmlnaW5YfGlkZW9ncmFwaGljfGltYWdlUmVuZGVyaW5nfGlufGluMnxpbnRlcmNlcHR8a3xrMXxrMnxrM3xrNHxrZXJuZWxNYXRyaXh8a2VybmVsVW5pdExlbmd0aHxrZXJuaW5nfGtleVBvaW50c3xrZXlTcGxpbmVzfGtleVRpbWVzfGxlbmd0aEFkanVzdHxsZXR0ZXJTcGFjaW5nfGxpZ2h0aW5nQ29sb3J8bGltaXRpbmdDb25lQW5nbGV8bG9jYWx8bWFya2VyRW5kfG1hcmtlck1pZHxtYXJrZXJTdGFydHxtYXJrZXJIZWlnaHR8bWFya2VyVW5pdHN8bWFya2VyV2lkdGh8bWFza3xtYXNrQ29udGVudFVuaXRzfG1hc2tVbml0c3xtYXRoZW1hdGljYWx8bW9kZXxudW1PY3RhdmVzfG9mZnNldHxvcGFjaXR5fG9wZXJhdG9yfG9yZGVyfG9yaWVudHxvcmllbnRhdGlvbnxvcmlnaW58b3ZlcmZsb3d8b3ZlcmxpbmVQb3NpdGlvbnxvdmVybGluZVRoaWNrbmVzc3xwYW5vc2UxfHBhaW50T3JkZXJ8cGF0aExlbmd0aHxwYXR0ZXJuQ29udGVudFVuaXRzfHBhdHRlcm5UcmFuc2Zvcm18cGF0dGVyblVuaXRzfHBvaW50ZXJFdmVudHN8cG9pbnRzfHBvaW50c0F0WHxwb2ludHNBdFl8cG9pbnRzQXRafHByZXNlcnZlQWxwaGF8cHJlc2VydmVBc3BlY3RSYXRpb3xwcmltaXRpdmVVbml0c3xyfHJhZGl1c3xyZWZYfHJlZll8cmVuZGVyaW5nSW50ZW50fHJlcGVhdENvdW50fHJlcGVhdER1cnxyZXF1aXJlZEV4dGVuc2lvbnN8cmVxdWlyZWRGZWF0dXJlc3xyZXN0YXJ0fHJlc3VsdHxyb3RhdGV8cnh8cnl8c2NhbGV8c2VlZHxzaGFwZVJlbmRlcmluZ3xzbG9wZXxzcGFjaW5nfHNwZWN1bGFyQ29uc3RhbnR8c3BlY3VsYXJFeHBvbmVudHxzcGVlZHxzcHJlYWRNZXRob2R8c3RhcnRPZmZzZXR8c3RkRGV2aWF0aW9ufHN0ZW1ofHN0ZW12fHN0aXRjaFRpbGVzfHN0b3BDb2xvcnxzdG9wT3BhY2l0eXxzdHJpa2V0aHJvdWdoUG9zaXRpb258c3RyaWtldGhyb3VnaFRoaWNrbmVzc3xzdHJpbmd8c3Ryb2tlfHN0cm9rZURhc2hhcnJheXxzdHJva2VEYXNob2Zmc2V0fHN0cm9rZUxpbmVjYXB8c3Ryb2tlTGluZWpvaW58c3Ryb2tlTWl0ZXJsaW1pdHxzdHJva2VPcGFjaXR5fHN0cm9rZVdpZHRofHN1cmZhY2VTY2FsZXxzeXN0ZW1MYW5ndWFnZXx0YWJsZVZhbHVlc3x0YXJnZXRYfHRhcmdldFl8dGV4dEFuY2hvcnx0ZXh0RGVjb3JhdGlvbnx0ZXh0UmVuZGVyaW5nfHRleHRMZW5ndGh8dG98dHJhbnNmb3JtfHUxfHUyfHVuZGVybGluZVBvc2l0aW9ufHVuZGVybGluZVRoaWNrbmVzc3x1bmljb2RlfHVuaWNvZGVCaWRpfHVuaWNvZGVSYW5nZXx1bml0c1BlckVtfHZBbHBoYWJldGljfHZIYW5naW5nfHZJZGVvZ3JhcGhpY3x2TWF0aGVtYXRpY2FsfHZhbHVlc3x2ZWN0b3JFZmZlY3R8dmVyc2lvbnx2ZXJ0QWR2WXx2ZXJ0T3JpZ2luWHx2ZXJ0T3JpZ2luWXx2aWV3Qm94fHZpZXdUYXJnZXR8dmlzaWJpbGl0eXx3aWR0aHN8d29yZFNwYWNpbmd8d3JpdGluZ01vZGV8eHx4SGVpZ2h0fHgxfHgyfHhDaGFubmVsU2VsZWN0b3J8eGxpbmtBY3R1YXRlfHhsaW5rQXJjcm9sZXx4bGlua0hyZWZ8eGxpbmtSb2xlfHhsaW5rU2hvd3x4bGlua1RpdGxlfHhsaW5rVHlwZXx4bWxCYXNlfHhtbG5zfHhtbG5zWGxpbmt8eG1sTGFuZ3x4bWxTcGFjZXx5fHkxfHkyfHlDaGFubmVsU2VsZWN0b3J8enx6b29tQW5kUGFufGZvcnxjbGFzc3xhdXRvZm9jdXMpfCgoW0RkXVtBYV1bVHRdW0FhXXxbQWFdW1JyXVtJaV1bQWFdfHgpLS4qKSkkLztjb25zdCBvPShpPXt9LGZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1pW2VdJiYoaVtlXT0odD1lLHIudGVzdCh0KXx8MTExPT09dC5jaGFyQ29kZUF0KDApJiYxMTA9PT10LmNoYXJDb2RlQXQoMSkmJnQuY2hhckNvZGVBdCgyKTw5MSkpLGlbZV07dmFyIHR9KTt2YXIgaX0sMTUyMTooZSx0LG4pPT57bi5yKHQpLG4uZCh0LHtBY3Rpdml0eUxvZ0ljb246KCk9PmksQWxpZ25CYXNlbGluZUljb246KCk9PmEsQWxpZ25Cb3R0b21JY29uOigpPT5sLEFsaWduQ2VudGVySG9yaXpvbnRhbGx5SWNvbjooKT0+cyxBbGlnbkNlbnRlclZlcnRpY2FsbHlJY29uOigpPT5jLEFsaWduTGVmdEljb246KCk9PnUsQWxpZ25SaWdodEljb246KCk9PmYsQWxpZ25Ub3BJY29uOigpPT5kLEFsbFNpZGVzSWNvbjooKT0+cCxBbmdsZUljb246KCk9PmgsQXJjaGl2ZUljb246KCk9PmcsQXJyb3dCb3R0b21MZWZ0SWNvbjooKT0+dixBcnJvd0JvdHRvbVJpZ2h0SWNvbjooKT0+bSxBcnJvd0Rvd25JY29uOigpPT5DLEFycm93TGVmdEljb246KCk9PnksQXJyb3dSaWdodEljb246KCk9PncsQXJyb3dUb3BMZWZ0SWNvbjooKT0+YixBcnJvd1RvcFJpZ2h0SWNvbjooKT0+eCxBcnJvd1VwSWNvbjooKT0+XyxBc3BlY3RSYXRpb0ljb246KCk9Pk8sQXZhdGFySWNvbjooKT0+TCxCYWNrcGFja0ljb246KCk9PkUsQmFkZ2VJY29uOigpPT5TLEJhckNoYXJ0SWNvbjooKT0+aixCZWxsSWNvbjooKT0+TSxCbGVuZGluZ01vZGVJY29uOigpPT5rLEJvb2ttYXJrSWNvbjooKT0+UixCb3JkZXJBbGxJY29uOigpPT5QLEJvcmRlckJvdHRvbUljb246KCk9PkksQm9yZGVyRGFzaGVkSWNvbjooKT0+QSxCb3JkZXJEb3R0ZWRJY29uOigpPT5ULEJvcmRlckxlZnRJY29uOigpPT5ILEJvcmRlck5vbmVJY29uOigpPT5CLEJvcmRlclJpZ2h0SWNvbjooKT0+VixCb3JkZXJTb2xpZEljb246KCk9PkQsQm9yZGVyU3BsaXRJY29uOigpPT5aLEJvcmRlclN0eWxlSWNvbjooKT0+JCxCb3JkZXJUb3BJY29uOigpPT5OLEJveEljb246KCk9PkYsQm94TW9kZWxJY29uOigpPT5VLEJ1dHRvbkljb246KCk9PlcsQ2FsZW5kYXJJY29uOigpPT56LENhbWVyYUljb246KCk9PkcsQ2FyZFN0YWNrSWNvbjooKT0+cSxDYXJkU3RhY2tNaW51c0ljb246KCk9PlksQ2FyZFN0YWNrUGx1c0ljb246KCk9PkssQ2FyZXREb3duSWNvbjooKT0+WCxDYXJldExlZnRJY29uOigpPT5KLENhcmV0UmlnaHRJY29uOigpPT5RLENhcmV0U29ydEljb246KCk9PmVlLENhcmV0VXBJY29uOigpPT50ZSxDaGF0QnViYmxlSWNvbjooKT0+bmUsQ2hlY2tDaXJjbGVkSWNvbjooKT0+b2UsQ2hlY2tJY29uOigpPT5yZSxDaGVja2JveEljb246KCk9PmllLENoZXZyb25Eb3duSWNvbjooKT0+YWUsQ2hldnJvbkxlZnRJY29uOigpPT5sZSxDaGV2cm9uUmlnaHRJY29uOigpPT5zZSxDaGV2cm9uVXBJY29uOigpPT5jZSxDaXJjbGVCYWNrc2xhc2hJY29uOigpPT5mZSxDaXJjbGVJY29uOigpPT51ZSxDbGlwYm9hcmRDb3B5SWNvbjooKT0+cGUsQ2xpcGJvYXJkSWNvbjooKT0+ZGUsQ2xvY2tJY29uOigpPT5oZSxDb2RlSWNvbjooKT0+Z2UsQ29kZVNhbmRib3hMb2dvSWNvbjooKT0+dmUsQ29sdW1uU3BhY2luZ0ljb246KCk9Pm1lLENvbHVtbnNJY29uOigpPT5DZSxDb21taXRJY29uOigpPT55ZSxDb21wb25lbnQxSWNvbjooKT0+d2UsQ29tcG9uZW50Mkljb246KCk9PmJlLENvbXBvbmVudEJvb2xlYW5JY29uOigpPT54ZSxDb21wb25lbnRJbnN0YW5jZUljb246KCk9Pl9lLENvbXBvbmVudE5vbmVJY29uOigpPT5PZSxDb21wb25lbnRQbGFjZWhvbGRlckljb246KCk9PkxlLENvbnRhaW5lckljb246KCk9PkVlLENvb2tpZUljb246KCk9PlNlLENvcHlJY29uOigpPT5qZSxDb3JuZXJCb3R0b21MZWZ0SWNvbjooKT0+TWUsQ29ybmVyQm90dG9tUmlnaHRJY29uOigpPT5rZSxDb3JuZXJUb3BMZWZ0SWNvbjooKT0+UmUsQ29ybmVyVG9wUmlnaHRJY29uOigpPT5QZSxDb3JuZXJzSWNvbjooKT0+SWUsQ291bnRkb3duVGltZXJJY29uOigpPT5BZSxDb3VudGVyQ2xvY2t3aXNlQ2xvY2tJY29uOigpPT5UZSxDcm9wSWNvbjooKT0+SGUsQ3Jvc3MxSWNvbjooKT0+QmUsQ3Jvc3MySWNvbjooKT0+VmUsQ3Jvc3NDaXJjbGVkSWNvbjooKT0+RGUsQ3Jvc3NoYWlyMUljb246KCk9PlplLENyb3NzaGFpcjJJY29uOigpPT4kZSxDcnVtcGxlZFBhcGVySWNvbjooKT0+TmUsQ3ViZUljb246KCk9PkZlLEN1cnNvckFycm93SWNvbjooKT0+VWUsQ3Vyc29yVGV4dEljb246KCk9PldlLERhc2hJY29uOigpPT56ZSxEYXNoYm9hcmRJY29uOigpPT5HZSxEaW1lbnNpb25zSWNvbjooKT0+cWUsRGlzY0ljb246KCk9PlllLERpdmlkZXJIb3Jpem9udGFsSWNvbjooKT0+S2UsRGl2aWRlclZlcnRpY2FsSWNvbjooKT0+WGUsRG90RmlsbGVkSWNvbjooKT0+UWUsRG90SWNvbjooKT0+SmUsRG90c0hvcml6b250YWxJY29uOigpPT5ldCxEb3RzVmVydGljYWxJY29uOigpPT50dCxEb3VibGVBcnJvd0Rvd25JY29uOigpPT5udCxEb3VibGVBcnJvd0xlZnRJY29uOigpPT5ydCxEb3VibGVBcnJvd1JpZ2h0SWNvbjooKT0+b3QsRG91YmxlQXJyb3dVcEljb246KCk9Pml0LERvd25sb2FkSWNvbjooKT0+YXQsRHJhZ0hhbmRsZURvdHMxSWNvbjooKT0+bHQsRHJhZ0hhbmRsZURvdHMySWNvbjooKT0+c3QsRHJhZ0hhbmRsZUhvcml6b250YWxJY29uOigpPT5jdCxEcmFnSGFuZGxlVmVydGljYWxJY29uOigpPT51dCxEcmF3aW5nUGluRmlsbGVkSWNvbjooKT0+ZHQsRHJhd2luZ1Bpbkljb246KCk9PmZ0LERyb3Bkb3duTWVudUljb246KCk9PnB0LEVudGVyRnVsbFNjcmVlbkljb246KCk9Pmd0LEVudGVySWNvbjooKT0+aHQsRW52ZWxvcGVDbG9zZWRJY29uOigpPT52dCxFbnZlbG9wZU9wZW5JY29uOigpPT5tdCxFeGNsYW1hdGlvblRyaWFuZ2xlSWNvbjooKT0+Q3QsRXhpdEZ1bGxTY3JlZW5JY29uOigpPT53dCxFeGl0SWNvbjooKT0+eXQsRXh0ZXJuYWxMaW5rSWNvbjooKT0+YnQsRXllQ2xvc2VkSWNvbjooKT0+eHQsRXllTm9uZUljb246KCk9Pl90LEV5ZU9wZW5JY29uOigpPT5PdCxGYWNlSWNvbjooKT0+THQsRmlnbWFMb2dvSWNvbjooKT0+RXQsRmlsZUljb246KCk9PlN0LEZpbGVNaW51c0ljb246KCk9Pmp0LEZpbGVQbHVzSWNvbjooKT0+TXQsRmlsZVRleHRJY29uOigpPT5rdCxGb250Qm9sZEljb246KCk9PlJ0LEZvbnRGYW1pbHlJY29uOigpPT5QdCxGb250SXRhbGljSWNvbjooKT0+SXQsRm9udFJvbWFuSWNvbjooKT0+QXQsRm9udFNpemVJY29uOigpPT5UdCxGb250U3R5bGVJY29uOigpPT5IdCxGcmFtZUljb246KCk9PkJ0LEZyYW1lckxvZ29JY29uOigpPT5WdCxHZWFySWNvbjooKT0+RHQsR2l0SHViTG9nb0ljb246KCk9Plp0LEdsb2JlSWNvbjooKT0+JHQsR3JpZEljb246KCk9Pk50LEdyb3VwSWNvbjooKT0+RnQsSGFsZjFJY29uOigpPT5VdCxIYWxmMkljb246KCk9Pld0LEhhbWJ1cmdlck1lbnVJY29uOigpPT56dCxIYW5kSWNvbjooKT0+R3QsSGVhZGluZ0ljb246KCk9PnF0LEhlaWdodEljb246KCk9Pll0LEhvbWVJY29uOigpPT5LdCxJY29uSmFyTG9nb0ljb246KCk9Plh0LElkQ2FyZEljb246KCk9Pkp0LEltYWdlSWNvbjooKT0+UXQsSW5mb0NpcmNsZWRJY29uOigpPT5lbixJbnB1dEljb246KCk9PnRuLExhcFRpbWVySWNvbjooKT0+bm4sTGF5ZXJzSWNvbjooKT0+cm4sTGF5b3V0SWNvbjooKT0+b24sTGV0dGVyQ2FzZUNhcGl0YWxpemVJY29uOigpPT5hbixMZXR0ZXJDYXNlTG93ZXJjYXNlSWNvbjooKT0+bG4sTGV0dGVyQ2FzZVRvZ2dsZUljb246KCk9PnNuLExldHRlckNhc2VVcHBlcmNhc2VJY29uOigpPT5jbixMZXR0ZXJTcGFjaW5nSWNvbjooKT0+dW4sTGlnaHRuaW5nQm9sdEljb246KCk9PmZuLExpbmVIZWlnaHRJY29uOigpPT5kbixMaW5rMUljb246KCk9PnBuLExpbmsySWNvbjooKT0+aG4sTGlua0JyZWFrMUljb246KCk9PmduLExpbmtCcmVhazJJY29uOigpPT52bixMaW5rTm9uZTFJY29uOigpPT5tbixMaW5rTm9uZTJJY29uOigpPT5DbixMaXN0QnVsbGV0SWNvbjooKT0+eW4sTG9ja0Nsb3NlZEljb246KCk9PnduLExvY2tPcGVuMUljb246KCk9PmJuLExvY2tPcGVuMkljb246KCk9PnhuLExvb3BJY29uOigpPT5fbixNYWdpY1dhbmRJY29uOigpPT5PbixNYWduaWZ5aW5nR2xhc3NJY29uOigpPT5MbixNYXJnaW5JY29uOigpPT5FbixNYXNrT2ZmSWNvbjooKT0+U24sTWFza09uSWNvbjooKT0+am4sTWludXNDaXJjbGVkSWNvbjooKT0+a24sTWludXNJY29uOigpPT5NbixNaXhJY29uOigpPT5SbixNaXhlckhvcml6b250YWxJY29uOigpPT5QbixNaXhlclZlcnRpY2FsSWNvbjooKT0+SW4sTW9kdWx6TG9nb0ljb246KCk9PkFuLE1vb25JY29uOigpPT5UbixNb3ZlSWNvbjooKT0+SG4sTm90aW9uTG9nb0ljb246KCk9PkJuLE9wYWNpdHlJY29uOigpPT5WbixPdmVybGluZUljb246KCk9PkRuLFBhZGRpbmdJY29uOigpPT5abixQYXBlclBsYW5lSWNvbjooKT0+JG4sUGF1c2VJY29uOigpPT5ObixQZW5jaWwxSWNvbjooKT0+Rm4sUGVuY2lsMkljb246KCk9PlVuLFBlcnNvbkljb246KCk9PlduLFBpZUNoYXJ0SWNvbjooKT0+em4sUGlsY3Jvd0ljb246KCk9PkduLFBpbkJvdHRvbUljb246KCk9PnFuLFBpbkxlZnRJY29uOigpPT5ZbixQaW5SaWdodEljb246KCk9PktuLFBpblRvcEljb246KCk9PlhuLFBsYXlJY29uOigpPT5KbixQbHVzQ2lyY2xlZEljb246KCk9PmVyLFBsdXNJY29uOigpPT5RbixRdWVzdGlvbk1hcmtDaXJjbGVkSWNvbjooKT0+bnIsUXVlc3Rpb25NYXJrSWNvbjooKT0+dHIsUXVvdGVJY29uOigpPT5ycixSYWRpb2J1dHRvbkljb246KCk9Pm9yLFJlYWRlckljb246KCk9PmlyLFJlbG9hZEljb246KCk9PmFyLFJlc2V0SWNvbjooKT0+bHIsUmVzdW1lSWNvbjooKT0+c3IsUm9ja2V0SWNvbjooKT0+Y3IsUm90YXRlQ291bnRlckNsb2Nrd2lzZUljb246KCk9PnVyLFJvd1NwYWNpbmdJY29uOigpPT5mcixSb3dzSWNvbjooKT0+ZHIsUnVsZXJIb3Jpem9udGFsSWNvbjooKT0+cHIsUnVsZXJTcXVhcmVJY29uOigpPT5ocixTZWN0aW9uSWNvbjooKT0+Z3IsU2V3aW5nUGluRmlsbGVkSWNvbjooKT0+bXIsU2V3aW5nUGluSWNvbjooKT0+dnIsU2hhZG93SWNvbjooKT0+Q3IsU2hhZG93SW5uZXJJY29uOigpPT55cixTaGFkb3dOb25lSWNvbjooKT0+d3IsU2hhZG93T3V0ZXJJY29uOigpPT5icixTaGFyZTFJY29uOigpPT54cixTaGFyZTJJY29uOigpPT5fcixTaHVmZmxlSWNvbjooKT0+T3IsU2l6ZUljb246KCk9PkxyLFNrZXRjaExvZ29JY29uOigpPT5FcixTbGFzaEljb246KCk9PlNyLFNsaWRlckljb246KCk9PmpyLFNwYWNlQmV0d2Vlbkhvcml6b250YWxseUljb246KCk9Pk1yLFNwYWNlQmV0d2VlblZlcnRpY2FsbHlJY29uOigpPT5rcixTcGFjZUV2ZW5seUhvcml6b250YWxseUljb246KCk9PlJyLFNwYWNlRXZlbmx5VmVydGljYWxseUljb246KCk9PlByLFNwZWFrZXJMb3VkSWNvbjooKT0+SXIsU3BlYWtlck1vZGVyYXRlSWNvbjooKT0+QXIsU3BlYWtlck9mZkljb246KCk9PlRyLFNwZWFrZXJRdWlldEljb246KCk9PkhyLFNxdWFyZUljb246KCk9PkJyLFN0YWNrSWNvbjooKT0+VnIsU3RhckZpbGxlZEljb246KCk9PlpyLFN0YXJJY29uOigpPT5EcixTdGl0Y2hlc0xvZ29JY29uOigpPT4kcixTdG9wSWNvbjooKT0+TnIsU3RvcHdhdGNoSWNvbjooKT0+RnIsU3RyZXRjaEhvcml6b250YWxseUljb246KCk9PlVyLFN0cmV0Y2hWZXJ0aWNhbGx5SWNvbjooKT0+V3IsU3RyaWtldGhyb3VnaEljb246KCk9PnpyLFN1bkljb246KCk9PkdyLFN3aXRjaEljb246KCk9PnFyLFN5bWJvbEljb246KCk9PllyLFRhYmxlSWNvbjooKT0+S3IsVGFyZ2V0SWNvbjooKT0+WHIsVGV4dEFsaWduQ2VudGVySWNvbjooKT0+UXIsVGV4dEFsaWduSnVzdGlmeUljb246KCk9PmVvLFRleHRBbGlnbkxlZnRJY29uOigpPT50byxUZXh0QWxpZ25SaWdodEljb246KCk9Pm5vLFRleHRJY29uOigpPT5KcixUZXh0Tm9uZUljb246KCk9PnJvLFRoaWNrQXJyb3dEb3duSWNvbjooKT0+b28sVGhpY2tBcnJvd0xlZnRJY29uOigpPT5pbyxUaGlja0Fycm93UmlnaHRJY29uOigpPT5hbyxUaGlja0Fycm93VXBJY29uOigpPT5sbyxUaW1lckljb246KCk9PnNvLFRva2Vuc0ljb246KCk9PmNvLFRyYWNrTmV4dEljb246KCk9PnVvLFRyYWNrUHJldmlvdXNJY29uOigpPT5mbyxUcmFuc3BhcmVuY3lHcmlkSWNvbjooKT0+cG8sVHJhc2hJY29uOigpPT5obyxUcmlhbmdsZURvd25JY29uOigpPT5nbyxUcmlhbmdsZUxlZnRJY29uOigpPT52byxUcmlhbmdsZVJpZ2h0SWNvbjooKT0+bW8sVHJpYW5nbGVVcEljb246KCk9PkNvLFR3aXR0ZXJMb2dvSWNvbjooKT0+eW8sVW5kZXJsaW5lSWNvbjooKT0+d28sVXBkYXRlSWNvbjooKT0+Ym8sVXBsb2FkSWNvbjooKT0+eG8sVmFsdWVJY29uOigpPT5fbyxWYWx1ZU5vbmVJY29uOigpPT5PbyxWZXJjZWxMb2dvSWNvbjooKT0+TG8sVmlkZW9JY29uOigpPT5FbyxWaWV3R3JpZEljb246KCk9PlNvLFZpZXdIb3Jpem9udGFsSWNvbjooKT0+am8sVmlld05vbmVJY29uOigpPT5NbyxWaWV3VmVydGljYWxJY29uOigpPT5rbyxXaWR0aEljb246KCk9PlJvLFpvb21Jbkljb246KCk9PlBvLFpvb21PdXRJY29uOigpPT5Jb30pO3ZhciByPW4oNjY4OSk7ZnVuY3Rpb24gbyhlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LGk9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKyluPWlbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb312YXIgaT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMCAxLjVDMCAxLjIyMzg2IDAuMjIzODU4IDEgMC41IDFIMi41QzIuNzc2MTQgMSAzIDEuMjIzODYgMyAxLjVDMyAxLjc3NjE0IDIuNzc2MTQgMiAyLjUgMkgwLjVDMC4yMjM4NTggMiAwIDEuNzc2MTQgMCAxLjVaTTQgMS41QzQgMS4yMjM4NiA0LjIyMzg2IDEgNC41IDFIMTQuNUMxNC43NzYxIDEgMTUgMS4yMjM4NiAxNSAxLjVDMTUgMS43NzYxNCAxNC43NzYxIDIgMTQuNSAySDQuNUM0LjIyMzg2IDIgNCAxLjc3NjE0IDQgMS41Wk00IDQuNUM0IDQuMjIzODYgNC4yMjM4NiA0IDQuNSA0SDExLjVDMTEuNzc2MSA0IDEyIDQuMjIzODYgMTIgNC41QzEyIDQuNzc2MTQgMTEuNzc2MSA1IDExLjUgNUg0LjVDNC4yMjM4NiA1IDQgNC43NzYxNCA0IDQuNVpNMCA3LjVDMCA3LjIyMzg2IDAuMjIzODU4IDcgMC41IDdIMi41QzIuNzc2MTQgNyAzIDcuMjIzODYgMyA3LjVDMyA3Ljc3NjE0IDIuNzc2MTQgOCAyLjUgOEgwLjVDMC4yMjM4NTggOCAwIDcuNzc2MTQgMCA3LjVaTTQgNy41QzQgNy4yMjM4NiA0LjIyMzg2IDcgNC41IDdIMTQuNUMxNC43NzYxIDcgMTUgNy4yMjM4NiAxNSA3LjVDMTUgNy43NzYxNCAxNC43NzYxIDggMTQuNSA4SDQuNUM0LjIyMzg2IDggNCA3Ljc3NjE0IDQgNy41Wk00IDEwLjVDNCAxMC4yMjM5IDQuMjIzODYgMTAgNC41IDEwSDExLjVDMTEuNzc2MSAxMCAxMiAxMC4yMjM5IDEyIDEwLjVDMTIgMTAuNzc2MSAxMS43NzYxIDExIDExLjUgMTFINC41QzQuMjIzODYgMTEgNCAxMC43NzYxIDQgMTAuNVpNMCAxMy41QzAgMTMuMjIzOSAwLjIyMzg1OCAxMyAwLjUgMTNIMi41QzIuNzc2MTQgMTMgMyAxMy4yMjM5IDMgMTMuNUMzIDEzLjc3NjEgMi43NzYxNCAxNCAyLjUgMTRIMC41QzAuMjIzODU4IDE0IDAgMTMuNzc2MSAwIDEzLjVaTTQgMTMuNUM0IDEzLjIyMzkgNC4yMjM4NiAxMyA0LjUgMTNIMTQuNUMxNC43NzYxIDEzIDE1IDEzLjIyMzkgMTUgMTMuNUMxNSAxMy43NzYxIDE0Ljc3NjEgMTQgMTQuNSAxNEg0LjVDNC4yMjM4NiAxNCA0IDEzLjc3NjEgNCAxMy41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sYT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTAuNSAxLjc1MDAzQzEwLjcxMDcgMS43NTAwMyAxMC44OTg4IDEuODgyMTcgMTAuOTcwMyAyLjA4MDQyTDEzLjk3MDMgMTAuNEMxNC4wNjQgMTAuNjU5OCAxMy45MjkzIDEwLjk0NjMgMTMuNjY5NiAxMS4wNEMxMy40MDk4IDExLjEzMzYgMTMuMTIzMyAxMC45OTkgMTMuMDI5NiAxMC43MzkyTDEyLjA0NzcgOC4wMTYwNkg4Ljk1MjI3TDcuOTcwMzEgMTAuNzM5MkM3Ljg3NjY0IDEwLjk5OSA3LjU5MDEyIDExLjEzMzYgNy4zMzAzNSAxMS4wNEM3LjA3MDU4IDEwLjk0NjMgNi45MzU5MyAxMC42NTk4IDcuMDI5NiAxMC40TDEwLjAyOTYgMi4wODA0MkMxMC4xMDExIDEuODgyMTcgMTAuMjg5MiAxLjc1MDAzIDEwLjUgMS43NTAwM1pNMTAuNSAzLjcyNDAyTDExLjc0MTEgNy4xNjYwNkg5LjI1ODc3TDEwLjUgMy43MjQwMlpNMi40OTk0OSAyLjA5OTk3QzIuNzIwNCAyLjA5OTk3IDIuODk5NDkgMi4yNzkwNiAyLjg5OTQ5IDIuNDk5OTdMMi44OTk0OSA5LjUzNDI4TDQuMjE2NjQgOC4yMTcxM0M0LjM3Mjg1IDguMDYwOTIgNC42MjYxMiA4LjA2MDkyIDQuNzgyMzMgOC4yMTcxM0M0LjkzODU0IDguMzczMzQgNC45Mzg1NCA4LjYyNjYgNC43ODIzMyA4Ljc4MjgxTDIuNzgyMzMgMTAuNzgyOEMyLjcwNzMyIDEwLjg1NzggMi42MDU1NyAxMC45IDIuNDk5NDkgMTAuOUMyLjM5MzQgMTAuOSAyLjI5MTY2IDEwLjg1NzggMi4yMTY2NCAxMC43ODI4TDAuMjE2NjQ1IDguNzgyODFDMC4wNjA0MzQ5IDguNjI2NiAwLjA2MDQzNDkgOC4zNzMzNCAwLjIxNjY0NSA4LjIxNzEzQzAuMzcyODU0IDguMDYwOTIgMC42MjYxMiA4LjA2MDkyIDAuNzgyMzMgOC4yMTcxM0wyLjA5OTQ5IDkuNTM0MjhMMi4wOTk0OSAyLjQ5OTk3QzIuMDk5NDkgMi4yNzkwNiAyLjI3ODU3IDIuMDk5OTcgMi40OTk0OSAyLjA5OTk3Wk0wLjA5OTk2OTUgMTMuNTAwMUMwLjA5OTk2OTUgMTMuMjc5MSAwLjI3OTA1NiAxMy4xMDAxIDAuNDk5OTY5IDEzLjEwMDFIMTQuNUMxNC43MjA5IDEzLjEwMDEgMTQuOSAxMy4yNzkxIDE0LjkgMTMuNTAwMUMxNC45IDEzLjcyMSAxNC43MjA5IDEzLjkwMDEgMTQuNSAxMy45MDAxSDAuNDk5OTY5QzAuMjc5MDU2IDEzLjkwMDEgMC4wOTk5Njk1IDEzLjcyMSAwLjA5OTk2OTUgMTMuNTAwMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTkgM0M5IDIuNDQ3NzIgOC41NTIyOSAyIDggMkg3QzYuNDQ3NzIgMiA2IDIuNDQ3NzIgNiAzTDYgMTRIMS41QzEuMjIzODYgMTQgMSAxNC4yMjM5IDEgMTQuNUMxIDE0Ljc3NjEgMS4yMjM4NiAxNSAxLjUgMTVMNiAxNUg5SDEzLjVDMTMuNzc2MSAxNSAxNCAxNC43NzYxIDE0IDE0LjVDMTQgMTQuMjIzOSAxMy43NzYxIDE0IDEzLjUgMTRIOVYzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNi45OTk4OCAxQzYuNDQ3NTkgMSA1Ljk5OTg4IDEuNDQ3NzIgNS45OTk4OCAyVjdIMS40OTk4OEMxLjIyMzc0IDcgMC45OTk4NzggNy4yMjM4NiAwLjk5OTg3OCA3LjVDMC45OTk4NzggNy43NzYxNCAxLjIyMzc0IDggMS40OTk4OCA4SDUuOTk5ODhWMTNDNS45OTk4OCAxMy41NTIzIDYuNDQ3NTkgMTQgNi45OTk4OCAxNEg3Ljk5OTg4QzguNTUyMTYgMTQgOC45OTk4OCAxMy41NTIzIDguOTk5ODggMTNWOEgxMy40OTk5QzEzLjc3NiA4IDEzLjk5OTkgNy43NzYxNCAxMy45OTk5IDcuNUMxMy45OTk5IDcuMjIzODYgMTMuNzc2IDcgMTMuNDk5OSA3SDguOTk5ODhWMkM4Ljk5OTg4IDEuNDQ3NzIgOC41NTIxNiAxIDcuOTk5ODggMUw2Ljk5OTg4IDFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxjPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjk5OTg4IDZDMS40NDc1OSA2IDAuOTk5ODc3IDYuNDQ3NzIgMC45OTk4NzcgN0wwLjk5OTg3NyA4QzAuOTk5ODc3IDguNTUyMjggMS40NDc1OSA5IDEuOTk5ODggOUw2Ljk5OTg4IDlMNi45OTk4OCAxMy41QzYuOTk5ODggMTMuNzc2MSA3LjIyMzc0IDE0IDcuNDk5ODggMTRDNy43NzYwMiAxNCA3Ljk5OTg4IDEzLjc3NjEgNy45OTk4OCAxMy41TDcuOTk5ODggOUwxMi45OTk5IDlDMTMuNTUyMiA5IDEzLjk5OTkgOC41NTIyOCAxMy45OTk5IDhMMTMuOTk5OSA3QzEzLjk5OTkgNi40NDc3MiAxMy41NTIyIDYgMTIuOTk5OSA2TDcuOTk5ODggNkw3Ljk5OTg4IDEuNUM3Ljk5OTg4IDEuMjIzODYgNy43NzYwMiAxIDcuNDk5ODggMUM3LjIyMzczIDEgNi45OTk4OCAxLjIyMzg2IDYuOTk5ODggMS41TDYuOTk5ODggNkwxLjk5OTg4IDZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx1PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wLjQ5OTk5NSAwLjk5OTk5NUMwLjIyMzg1NSAwLjk5OTk5NSAtNS41ODQ1OGUtMDcgMS4yMjM4NSAtNS40NjM4OGUtMDcgMS40OTk5OUwtMi4xODU1NGUtMDggMTMuNDk5OUMtOS43ODQ5MmUtMDkgMTMuNzc2IDAuMjIzODU1IDEzLjk5OTkgMC40OTk5OTUgMTMuOTk5OUMwLjc3NjEzNiAxMy45OTk5IDAuOTk5OTkxIDEzLjc3NiAwLjk5OTk5MSAxMy40OTk5TDAuOTk5OTkxIDguOTk5OTNMMTIgOC45OTk5M0MxMi41NTIzIDguOTk5OTMgMTMgOC41NTIyMiAxMyA3Ljk5OTkzTDEzIDYuOTk5OTRDMTMgNi40NDc2NiAxMi41NTIzIDUuOTk5OTUgMTIgNS45OTk5NUwwLjk5OTk5MSA1Ljk5OTk1TDAuOTk5OTkxIDEuNDk5OTlDMC45OTk5OTEgMS4yMjM4NSAwLjc3NjEzNSAwLjk5OTk5NSAwLjQ5OTk5NSAwLjk5OTk5NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGY9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTE0LjQ5OTkgMUMxNC4yMjM3IDEgMTMuOTk5OSAxLjIyMzg2IDEzLjk5OTkgMS41TDEzLjk5OTkgNkwyLjk5OTg4IDZDMi40NDc1OSA2IDEuOTk5ODggNi40NDc3MiAxLjk5OTg4IDdMMS45OTk4OCA4QzEuOTk5ODggOC41NTIyOCAyLjQ0NzU5IDkgMi45OTk4OCA5TDEzLjk5OTkgOUwxMy45OTk5IDEzLjVDMTMuOTk5OSAxMy43NzYxIDE0LjIyMzcgMTQgMTQuNDk5OSAxNEMxNC43NzYgMTQgMTQuOTk5OSAxMy43NzYxIDE0Ljk5OTkgMTMuNUwxNC45OTk5IDlMMTQuOTk5OSA2TDE0Ljk5OTkgMS41QzE0Ljk5OTkgMS4yMjM4NiAxNC43NzYgMSAxNC40OTk5IDFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxkPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjUgMEMxLjIyMzg2IDAgMSAwLjIyMzg1OCAxIDAuNUMxIDAuNzc2MTQyIDEuMjIzODYgMSAxLjUgMUg2VjEyQzYgMTIuNTUyMyA2LjQ0NzcyIDEzIDcgMTNIOEM4LjU1MjI4IDEzIDkgMTIuNTUyMyA5IDEyVjFIMTMuNUMxMy43NzYxIDEgMTQgMC43NzYxNDIgMTQgMC41QzE0IDAuMjIzODU4IDEzLjc3NjEgMCAxMy41IDBIOUg2SDEuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHA9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNSAwLjc1TDkuNzUgM0g1LjI1TDcuNSAwLjc1Wk03LjUgMTQuMjVMOS43NSAxMkg1LjI1TDcuNSAxNC4yNVpNMyA1LjI1TDAuNzUgNy41TDMgOS43NVY1LjI1Wk0xNC4yNSA3LjVMMTIgNS4yNVY5Ljc1TDE0LjI1IDcuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGg9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTguODkxNCAyLjE5MzdDOS4xMTU4IDIuMzU0NjQgOS4xNjcyNSAyLjY2NzAxIDkuMDA2MzEgMi44OTE0MUwyLjQ3Mzg4IDEySDEzLjVDMTMuNzc2MSAxMiAxNCAxMi4yMjM5IDE0IDEyLjVDMTQgMTIuNzc2MiAxMy43NzYxIDEzIDEzLjUgMTNIMS41QzEuMzEyNTQgMTMgMS4xNDA4MiAxMi44OTUyIDEuMDU1MiAxMi43Mjg0QzAuOTY5NTc4IDEyLjU2MTYgMC45ODQ0MzggMTIuMzYxIDEuMDkzNjkgMTIuMjA4Nkw4LjE5MzY5IDIuMzA4NjJDOC4zNTQ2MiAyLjA4NDIyIDguNjY3IDIuMDMyNzcgOC44OTE0IDIuMTkzN1pNMTEuMSA2LjUwMDAxQzExLjEgNi4yMjM4NyAxMS4zMjM4IDYuMDAwMDEgMTEuNiA2LjAwMDAxQzExLjg3NjEgNi4wMDAwMSAxMi4xIDYuMjIzODcgMTIuMSA2LjUwMDAxQzEyLjEgNi43NzYxNSAxMS44NzYxIDcuMDAwMDEgMTEuNiA3LjAwMDAxQzExLjMyMzggNy4wMDAwMSAxMS4xIDYuNzc2MTUgMTEuMSA2LjUwMDAxWk0xMC40IDQuMDAwMDFDMTAuMTIzOSA0LjAwMDAxIDkuOTAwMDMgNC4yMjM4NyA5LjkwMDAzIDQuNTAwMDFDOS45MDAwMyA0Ljc3NjE1IDEwLjEyMzkgNS4wMDAwMSAxMC40IDUuMDAwMDFDMTAuNjc2MiA1LjAwMDAxIDEwLjkgNC43NzYxNSAxMC45IDQuNTAwMDFDMTAuOSA0LjIyMzg3IDEwLjY3NjIgNC4wMDAwMSAxMC40IDQuMDAwMDFaTTEyLjEgOC41MDAwMUMxMi4xIDguMjIzODcgMTIuMzIzOCA4LjAwMDAxIDEyLjYgOC4wMDAwMUMxMi44NzYxIDguMDAwMDEgMTMuMSA4LjIyMzg3IDEzLjEgOC41MDAwMUMxMy4xIDguNzc2MTUgMTIuODc2MSA5LjAwMDAxIDEyLjYgOS4wMDAwMUMxMi4zMjM4IDkuMDAwMDEgMTIuMSA4Ljc3NjE1IDEyLjEgOC41MDAwMVpNMTMuNCAxMEMxMy4xMjM5IDEwIDEyLjkgMTAuMjIzOSAxMi45IDEwLjVDMTIuOSAxMC43NzYxIDEzLjEyMzkgMTEgMTMuNCAxMUMxMy42NzYyIDExIDEzLjkgMTAuNzc2MSAxMy45IDEwLjVDMTMuOSAxMC4yMjM5IDEzLjY3NjIgMTAgMTMuNCAxMFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGc9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuMzA5MDIgMUMyLjkzMDI1IDEgMi41ODM5OCAxLjIxNCAyLjQxNDU5IDEuNTUyNzlMMS4wNTI3OSA0LjI3NjM5QzEuMDE4MDcgNC4zNDU4MiAxIDQuNDIyMzggMSA0LjVWMTNDMSAxMy41NTIzIDEuNDQ3NzIgMTQgMiAxNEgxM0MxMy41NTIzIDE0IDE0IDEzLjU1MjMgMTQgMTNWNC41QzE0IDQuNDIyMzggMTMuOTgxOSA0LjM0NTgyIDEzLjk0NzIgNC4yNzYzOUwxMi41ODU0IDEuNTUyODFDMTIuNDE2IDEuMjE0MDMgMTIuMDY5OCAxLjAwMDAzIDExLjY5MSAxLjAwMDAzTDcuNSAxLjAwMDAxTDMuMzA5MDIgMVpNMy4zMDkwMiAyTDcgMi4wMDAwMVY0SDIuMzA5MDJMMy4zMDkwMiAyWk04IDRWMi4wMDAwMkwxMS42OTEgMi4wMDAwM0wxMi42OTEgNEg4Wk03LjUgNUgxM1YxM0gyVjVINy41Wk01LjUgN0M1LjIyMzg2IDcgNSA3LjIyMzg2IDUgNy41QzUgNy43NzYxNCA1LjIyMzg2IDggNS41IDhIOS41QzkuNzc2MTQgOCAxMCA3Ljc3NjE0IDEwIDcuNUMxMCA3LjIyMzg2IDkuNzc2MTQgNyA5LjUgN0g1LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx2PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMS4zNTM2IDMuNjQ2NDRDMTEuNTQ4OCAzLjg0MTcgMTEuNTQ4OCA0LjE1ODI4IDExLjM1MzYgNC4zNTM1NEw0LjcwNzExIDExTDkgMTFDOS4yNzYxNCAxMSA5LjUgMTEuMjIzOSA5LjUgMTEuNUM5LjUgMTEuNzc2MSA5LjI3NjE0IDEyIDkgMTJMMy41IDEyQzMuMzY3MzkgMTIgMy4yNDAyMSAxMS45NDczIDMuMTQ2NDUgMTEuODUzNkMzLjA1MjY4IDExLjc1OTggMyAxMS42MzI2IDMgMTEuNUwzIDUuOTk5OTlDMyA1LjcyMzg1IDMuMjIzODYgNS40OTk5OSAzLjUgNS40OTk5OUMzLjc3NjE0IDUuNDk5OTkgNCA1LjcyMzg1IDQgNS45OTk5OVYxMC4yOTI5TDEwLjY0NjQgMy42NDY0M0MxMC44NDE3IDMuNDUxMTcgMTEuMTU4MyAzLjQ1MTE3IDExLjM1MzYgMy42NDY0NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG09ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNjQ2NDUgMy42NDY0NEMzLjQ1MTE4IDMuODQxNyAzLjQ1MTE4IDQuMTU4MjggMy42NDY0NSA0LjM1MzU0TDEwLjI5MjkgMTFMNiAxMUM1LjcyMzg2IDExIDUuNSAxMS4yMjM5IDUuNSAxMS41QzUuNSAxMS43NzYxIDUuNzIzODYgMTIgNiAxMkwxMS41IDEyQzExLjYzMjYgMTIgMTEuNzU5OCAxMS45NDczIDExLjg1MzYgMTEuODUzNkMxMS45NDczIDExLjc1OTggMTIgMTEuNjMyNiAxMiAxMS41TDEyIDUuOTk5OTlDMTIgNS43MjM4NSAxMS43NzYxIDUuNDk5OTkgMTEuNSA1LjQ5OTk5QzExLjIyMzkgNS40OTk5OSAxMSA1LjcyMzg1IDExIDUuOTk5OTlWMTAuMjkyOUw0LjM1MzU1IDMuNjQ2NDNDNC4xNTgyOSAzLjQ1MTE3IDMuODQxNzEgMy40NTExNyAzLjY0NjQ1IDMuNjQ2NDRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxDPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUgMkM3Ljc3NjE0IDIgOCAyLjIyMzg2IDggMi41TDggMTEuMjkyOUwxMS4xNDY0IDguMTQ2NDVDMTEuMzQxNyA3Ljk1MTE4IDExLjY1ODMgNy45NTExOCAxMS44NTM2IDguMTQ2NDVDMTIuMDQ4OCA4LjM0MTcxIDEyLjA0ODggOC42NTgyOSAxMS44NTM2IDguODUzNTVMNy44NTM1NSAxMi44NTM2QzcuNzU5NzkgMTIuOTQ3MyA3LjYzMjYxIDEzIDcuNSAxM0M3LjM2NzM5IDEzIDcuMjQwMjEgMTIuOTQ3MyA3LjE0NjQ1IDEyLjg1MzZMMy4xNDY0NSA4Ljg1MzU1QzIuOTUxMTggOC42NTgyOSAyLjk1MTE4IDguMzQxNzEgMy4xNDY0NSA4LjE0NjQ1QzMuMzQxNzEgNy45NTExOCAzLjY1ODI5IDcuOTUxMTggMy44NTM1NSA4LjE0NjQ1TDcgMTEuMjkyOUw3IDIuNUM3IDIuMjIzODYgNy4yMjM4NiAyIDcuNSAyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0seT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNi44NTM1NSAzLjE0NjQ1QzcuMDQ4ODIgMy4zNDE3MSA3LjA0ODgyIDMuNjU4MjkgNi44NTM1NSAzLjg1MzU1TDMuNzA3MTEgN0gxMi41QzEyLjc3NjEgNyAxMyA3LjIyMzg2IDEzIDcuNUMxMyA3Ljc3NjE0IDEyLjc3NjEgOCAxMi41IDhIMy43MDcxMUw2Ljg1MzU1IDExLjE0NjRDNy4wNDg4MiAxMS4zNDE3IDcuMDQ4ODIgMTEuNjU4MyA2Ljg1MzU1IDExLjg1MzZDNi42NTgyOSAxMi4wNDg4IDYuMzQxNzEgMTIuMDQ4OCA2LjE0NjQ1IDExLjg1MzZMMi4xNDY0NSA3Ljg1MzU1QzEuOTUxMTggNy42NTgyOSAxLjk1MTE4IDcuMzQxNzEgMi4xNDY0NSA3LjE0NjQ1TDYuMTQ2NDUgMy4xNDY0NUM2LjM0MTcxIDIuOTUxMTggNi42NTgyOSAyLjk1MTE4IDYuODUzNTUgMy4xNDY0NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHc9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTguMTQ2NDUgMy4xNDY0NUM4LjM0MTcxIDIuOTUxMTggOC42NTgyOSAyLjk1MTE4IDguODUzNTUgMy4xNDY0NUwxMi44NTM2IDcuMTQ2NDVDMTMuMDQ4OCA3LjM0MTcxIDEzLjA0ODggNy42NTgyOSAxMi44NTM2IDcuODUzNTVMOC44NTM1NSAxMS44NTM2QzguNjU4MjkgMTIuMDQ4OCA4LjM0MTcxIDEyLjA0ODggOC4xNDY0NSAxMS44NTM2QzcuOTUxMTggMTEuNjU4MyA3Ljk1MTE4IDExLjM0MTcgOC4xNDY0NSAxMS4xNDY0TDExLjI5MjkgOEgyLjVDMi4yMjM4NiA4IDIgNy43NzYxNCAyIDcuNUMyIDcuMjIzODYgMi4yMjM4NiA3IDIuNSA3SDExLjI5MjlMOC4xNDY0NSAzLjg1MzU1QzcuOTUxMTggMy42NTgyOSA3Ljk1MTE4IDMuMzQxNzEgOC4xNDY0NSAzLjE0NjQ1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sYj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTEuMzUzNiAxMS4zNTM2QzExLjU0ODggMTEuMTU4MyAxMS41NDg4IDEwLjg0MTcgMTEuMzUzNiAxMC42NDY1TDQuNzA3MTEgNEw5IDRDOS4yNzYxNCA0IDkuNSAzLjc3NjE0IDkuNSAzLjVDOS41IDMuMjIzODYgOS4yNzYxNCAzIDkgM0wzLjUgM0MzLjM2NzM5IDMgMy4yNDAyMSAzLjA1MjY4IDMuMTQ2NDUgMy4xNDY0NUMzLjA1MjY4IDMuMjQwMjIgMyAzLjM2NzM5IDMgMy41TDMgOS4wMDAwMUMzIDkuMjc2MTUgMy4yMjM4NiA5LjUwMDAxIDMuNSA5LjUwMDAxQzMuNzc2MTQgOS41MDAwMSA0IDkuMjc2MTUgNCA5LjAwMDAxVjQuNzA3MTFMMTAuNjQ2NCAxMS4zNTM2QzEwLjg0MTcgMTEuNTQ4OCAxMS4xNTgzIDExLjU0ODggMTEuMzUzNiAxMS4zNTM2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0seD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy42NDY0NSAxMS4zNTM2QzMuNDUxMTggMTEuMTU4MyAzLjQ1MTE4IDEwLjg0MTcgMy42NDY0NSAxMC42NDY1TDEwLjI5MjkgNEw2IDRDNS43MjM4NiA0IDUuNSAzLjc3NjE0IDUuNSAzLjVDNS41IDMuMjIzODYgNS43MjM4NiAzIDYgM0wxMS41IDNDMTEuNjMyNiAzIDExLjc1OTggMy4wNTI2OCAxMS44NTM2IDMuMTQ2NDVDMTEuOTQ3MyAzLjI0MDIyIDEyIDMuMzY3MzkgMTIgMy41TDEyIDkuMDAwMDFDMTIgOS4yNzYxNSAxMS43NzYxIDkuNTAwMDEgMTEuNSA5LjUwMDAxQzExLjIyMzkgOS41MDAwMSAxMSA5LjI3NjE1IDExIDkuMDAwMDFWNC43MDcxMUw0LjM1MzU1IDExLjM1MzZDNC4xNTgyOSAxMS41NDg4IDMuODQxNzEgMTEuNTQ4OCAzLjY0NjQ1IDExLjM1MzZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxfPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjE0NjQ1IDIuMTQ2NDVDNy4zNDE3MSAxLjk1MTE4IDcuNjU4MjkgMS45NTExOCA3Ljg1MzU1IDIuMTQ2NDVMMTEuODUzNiA2LjE0NjQ1QzEyLjA0ODggNi4zNDE3MSAxMi4wNDg4IDYuNjU4MjkgMTEuODUzNiA2Ljg1MzU1QzExLjY1ODMgNy4wNDg4MiAxMS4zNDE3IDcuMDQ4ODIgMTEuMTQ2NCA2Ljg1MzU1TDggMy43MDcxMUw4IDEyLjVDOCAxMi43NzYxIDcuNzc2MTQgMTMgNy41IDEzQzcuMjIzODYgMTMgNyAxMi43NzYxIDcgMTIuNUw3IDMuNzA3MTFMMy44NTM1NSA2Ljg1MzU1QzMuNjU4MjkgNy4wNDg4MiAzLjM0MTcxIDcuMDQ4ODIgMy4xNDY0NSA2Ljg1MzU1QzIuOTUxMTggNi42NTgyOSAyLjk1MTE4IDYuMzQxNzEgMy4xNDY0NSA2LjE0NjQ1TDcuMTQ2NDUgMi4xNDY0NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuNSAySDEyLjVDMTIuNzc2MSAyIDEzIDIuMjIzODYgMTMgMi41VjEyLjVDMTMgMTIuNzc2MSAxMi43NzYxIDEzIDEyLjUgMTNIMi41QzIuMjIzODYgMTMgMiAxMi43NzYxIDIgMTIuNVYyLjVDMiAyLjIyMzg2IDIuMjIzODYgMiAyLjUgMlpNMSAyLjVDMSAxLjY3MTU3IDEuNjcxNTcgMSAyLjUgMUgxMi41QzEzLjMyODQgMSAxNCAxLjY3MTU3IDE0IDIuNVYxMi41QzE0IDEzLjMyODQgMTMuMzI4NCAxNCAxMi41IDE0SDIuNUMxLjY3MTU3IDE0IDEgMTMuMzI4NCAxIDEyLjVWMi41Wk03LjUgNEM3Ljc3NjE0IDQgOCAzLjc3NjE0IDggMy41QzggMy4yMjM4NiA3Ljc3NjE0IDMgNy41IDNDNy4yMjM4NiAzIDcgMy4yMjM4NiA3IDMuNUM3IDMuNzc2MTQgNy4yMjM4NiA0IDcuNSA0Wk04IDUuNUM4IDUuNzc2MTQgNy43NzYxNCA2IDcuNSA2QzcuMjIzODYgNiA3IDUuNzc2MTQgNyA1LjVDNyA1LjIyMzg2IDcuMjIzODYgNSA3LjUgNUM3Ljc3NjE0IDUgOCA1LjIyMzg2IDggNS41Wk03LjUgOEM3Ljc3NjE0IDggOCA3Ljc3NjE0IDggNy41QzggNy4yMjM4NiA3Ljc3NjE0IDcgNy41IDdDNy4yMjM4NiA3IDcgNy4yMjM4NiA3IDcuNUM3IDcuNzc2MTQgNy4yMjM4NiA4IDcuNSA4Wk0xMCA3LjVDMTAgNy43NzYxNCA5Ljc3NjE0IDggOS41IDhDOS4yMjM4NiA4IDkgNy43NzYxNCA5IDcuNUM5IDcuMjIzODYgOS4yMjM4NiA3IDkuNSA3QzkuNzc2MTQgNyAxMCA3LjIyMzg2IDEwIDcuNVpNMTEuNSA4QzExLjc3NjEgOCAxMiA3Ljc3NjE0IDEyIDcuNUMxMiA3LjIyMzg2IDExLjc3NjEgNyAxMS41IDdDMTEuMjIzOSA3IDExIDcuMjIzODYgMTEgNy41QzExIDcuNzc2MTQgMTEuMjIzOSA4IDExLjUgOFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuODc3MDE0IDcuNDk5ODhDMC44NzcwMTQgMy44NDIxOSAzLjg0MjE2IDAuODc3MDQ1IDcuNDk5ODUgMC44NzcwNDVDMTEuMTU3NSAwLjg3NzA0NSAxNC4xMjI3IDMuODQyMTkgMTQuMTIyNyA3LjQ5OTg4QzE0LjEyMjcgMTEuMTU3NSAxMS4xNTc1IDE0LjEyMjcgNy40OTk4NSAxNC4xMjI3QzMuODQyMTYgMTQuMTIyNyAwLjg3NzAxNCAxMS4xNTc1IDAuODc3MDE0IDcuNDk5ODhaTTcuNDk5ODUgMS44MjcwNEM0LjM2NjgzIDEuODI3MDQgMS44MjcwMSA0LjM2Njg2IDEuODI3MDEgNy40OTk4OEMxLjgyNzAxIDguOTcxOTYgMi4zODc3NCAxMC4zMTMxIDMuMzA3MjcgMTEuMzIxM0M0LjE5MDc0IDkuOTQxMTkgNS43MzgxOCA5LjAyNDk5IDcuNTAwMjMgOS4wMjQ5OUM5LjI2MjA2IDkuMDI0OTkgMTAuODA5MyA5Ljk0MDk3IDExLjY5MjkgMTEuMzIwOEMxMi42MTIxIDEwLjMxMjcgMTMuMTcyNyA4Ljk3MTcyIDEzLjE3MjcgNy40OTk4OEMxMy4xNzI3IDQuMzY2ODYgMTAuNjMyOCAxLjgyNzA0IDcuNDk5ODUgMS44MjcwNFpNMTAuOTgxOCAxMS45Nzg3QzEwLjI4MzkgMTAuNzc5NSA4Ljk4NTcgOS45NzQ5OSA3LjUwMDIzIDkuOTc0OTlDNi4wMTQ1OCA5Ljk3NDk5IDQuNzE2MjQgMTAuNzc5NyA0LjAxODQ1IDExLjk3OTFDNC45Nzk1MiAxMi43MjcyIDYuMTg3NjUgMTMuMTcyNyA3LjQ5OTg1IDEzLjE3MjdDOC44MTIyNyAxMy4xNzI3IDEwLjAyMDYgMTIuNzI3IDEwLjk4MTggMTEuOTc4N1pNNS4xNDk5OSA2LjUwNDg3QzUuMTQ5OTkgNS4yMDcgNi4yMDIxMiA0LjE1NDg3IDcuNDk5OTkgNC4xNTQ4N0M4Ljc5Nzg2IDQuMTU0ODcgOS44NDk5OSA1LjIwNyA5Ljg0OTk5IDYuNTA0ODdDOS44NDk5OSA3LjgwMjc0IDguNzk3ODYgOC44NTQ4NyA3LjQ5OTk5IDguODU0ODdDNi4yMDIxMiA4Ljg1NDg3IDUuMTQ5OTkgNy44MDI3NCA1LjE0OTk5IDYuNTA0ODdaTTcuNDk5OTkgNS4xMDQ4N0M2LjcyNjc5IDUuMTA0ODcgNi4wOTk5OSA1LjczMTY3IDYuMDk5OTkgNi41MDQ4N0M2LjA5OTk5IDcuMjc4MDcgNi43MjY3OSA3LjkwNDg3IDcuNDk5OTkgNy45MDQ4N0M4LjI3MzE5IDcuOTA0ODcgOC44OTk5OSA3LjI3ODA3IDguODk5OTkgNi41MDQ4N0M4Ljg5OTk5IDUuNzMxNjcgOC4yNzMxOSA1LjEwNDg3IDcuNDk5OTkgNS4xMDQ4N1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUgMUM1IDAuNDQ3NzE1IDUuNDQ3NzIgMCA2IDBIOUM5LjU1MjI4IDAgMTAgMC40NDc3MTUgMTAgMVYySDE0QzE0LjU1MjMgMiAxNSAyLjQ0NzcyIDE1IDNWNkMxNSA2Ljg4ODggMTQuNjEzMSA3LjY4NzM0IDE0IDguMjM2MDhWMTEuNUMxNCAxMi4zMjg0IDEzLjMyODQgMTMgMTIuNSAxM0gyLjVDMS42NzE1NyAxMyAxIDEyLjMyODQgMSAxMS41VjguMjM1OUMwLjM4Njk3IDcuNjg3MjEgMCA2Ljg4ODgzIDAgNlYzQzAgMi40NDc3MiAwLjQ0NzcxNiAyIDEgMkg1VjFaTTkgMVYySDZWMUg5Wk0xIDNINUg1LjVIOS41SDEwSDE0VjZDMTQgNi42NTQgMTMuNjg2NiA3LjIzNDY3IDEzLjE5OTcgNy42MDA0QzEyLjg2NTUgNy44NTE0NCAxMi40NTA4IDggMTIgOEg4VjcuNUM4IDcuMjIzODYgNy43NzYxNCA3IDcuNSA3QzcuMjIzODYgNyA3IDcuMjIzODYgNyA3LjVWOEgzQzIuNTQ5MyA4IDIuMTM0NiA3Ljg1MTMzIDEuODAwMjkgNy42MDAyMkMxLjMxMzM1IDcuMjM0NDYgMSA2LjY1Mzk2IDEgNlYzWk03IDlIM0MyLjY0OTYxIDkgMi4zMTI5MiA4LjkzOTcyIDIgOC44MjkwNVYxMS41QzIgMTEuNzc2MSAyLjIyMzg2IDEyIDIuNSAxMkgxMi41QzEyLjc3NjEgMTIgMTMgMTEuNzc2MSAxMyAxMS41VjguODI5MTVDMTIuNjg3MSA4LjkzOTc4IDEyLjM1MDQgOSAxMiA5SDhWOS41QzggOS43NzYxNCA3Ljc3NjE0IDEwIDcuNSAxMEM3LjIyMzg2IDEwIDcgOS43NzYxNCA3IDkuNVY5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy41IDZIMTEuNUMxMi4zMjg0IDYgMTMgNi42NzE1NyAxMyA3LjVDMTMgOC4zMjg0MyAxMi4zMjg0IDkgMTEuNSA5SDMuNUMyLjY3MTU3IDkgMiA4LjMyODQzIDIgNy41QzIgNi42NzE1NyAyLjY3MTU3IDYgMy41IDZaTTEgNy41QzEgNi4xMTkyOSAyLjExOTI5IDUgMy41IDVIMTEuNUMxMi44ODA3IDUgMTQgNi4xMTkyOSAxNCA3LjVDMTQgOC44ODA3MSAxMi44ODA3IDEwIDExLjUgMTBIMy41QzIuMTE5MjkgMTAgMSA4Ljg4MDcxIDEgNy41Wk00LjUgN0M0LjIyMzg2IDcgNCA3LjIyMzg2IDQgNy41QzQgNy43NzYxNCA0LjIyMzg2IDggNC41IDhIMTAuNUMxMC43NzYxIDggMTEgNy43NzYxNCAxMSA3LjVDMTEgNy4yMjM4NiAxMC43NzYxIDcgMTAuNSA3SDQuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGo9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTExLjUgMUMxMS43NzYxIDEgMTIgMS4yMjM4NiAxMiAxLjVWMTMuNUMxMiAxMy43NzYxIDExLjc3NjEgMTQgMTEuNSAxNEMxMS4yMjM5IDE0IDExIDEzLjc3NjEgMTEgMTMuNVYxLjVDMTEgMS4yMjM4NiAxMS4yMjM5IDEgMTEuNSAxWk05LjUgM0M5Ljc3NjE0IDMgMTAgMy4yMjM4NiAxMCAzLjVWMTMuNUMxMCAxMy43NzYxIDkuNzc2MTQgMTQgOS41IDE0QzkuMjIzODYgMTQgOSAxMy43NzYxIDkgMTMuNVYzLjVDOSAzLjIyMzg2IDkuMjIzODYgMyA5LjUgM1pNMTMuNSAzQzEzLjc3NjEgMyAxNCAzLjIyMzg2IDE0IDMuNVYxMy41QzE0IDEzLjc3NjEgMTMuNzc2MSAxNCAxMy41IDE0QzEzLjIyMzkgMTQgMTMgMTMuNzc2MSAxMyAxMy41VjMuNUMxMyAzLjIyMzg2IDEzLjIyMzkgMyAxMy41IDNaTTUuNSA0QzUuNzc2MTQgNCA2IDQuMjIzODYgNiA0LjVWMTMuNUM2IDEzLjc3NjEgNS43NzYxNCAxNCA1LjUgMTRDNS4yMjM4NiAxNCA1IDEzLjc3NjEgNSAxMy41VjQuNUM1IDQuMjIzODYgNS4yMjM4NiA0IDUuNSA0Wk0xLjUgNUMxLjc3NjE0IDUgMiA1LjIyMzg2IDIgNS41VjEzLjVDMiAxMy43NzYxIDEuNzc2MTQgMTQgMS41IDE0QzEuMjIzODYgMTQgMSAxMy43NzYxIDEgMTMuNVY1LjVDMSA1LjIyMzg2IDEuMjIzODYgNSAxLjUgNVpNNy41IDVDNy43NzYxNCA1IDggNS4yMjM4NiA4IDUuNVYxMy41QzggMTMuNzc2MSA3Ljc3NjE0IDE0IDcuNSAxNEM3LjIyMzg2IDE0IDcgMTMuNzc2MSA3IDEzLjVWNS41QzcgNS4yMjM4NiA3LjIyMzg2IDUgNy41IDVaTTMuNSA3QzMuNzc2MTQgNyA0IDcuMjIzODYgNCA3LjVWMTMuNUM0IDEzLjc3NjEgMy43NzYxNCAxNCAzLjUgMTRDMy4yMjM4NiAxNCAzIDEzLjc3NjEgMyAxMy41VjcuNUMzIDcuMjIzODYgMy4yMjM4NiA3IDMuNSA3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC42MDEyNCAxLjI1MDg2QzguNjAxMjQgMS43NTQ1OSA4LjI2Mjc4IDIuMTc5MjcgNy44MDA4NyAyLjMwOTg5QzEwLjE0NTkgMi40NjQ3IDEyIDQuNDE1ODIgMTIgNi43OTk5OVYxMC4yNUMxMiAxMS4wNTYzIDEyLjAzMjkgMTEuNzA3NCAxMi43MjM2IDEyLjA1MjhDMTIuOTMxIDEyLjE1NjUgMTMuMDM5OSAxMi4zODkyIDEyLjk4NjYgMTIuNjE0OUMxMi45MzMzIDEyLjg0MDYgMTIuNzMxOSAxMyAxMi41IDEzSDguMTYxNDRDOC4zNjkwNCAxMy4xODMyIDguNDk5OTcgMTMuNDUxMyA4LjQ5OTk3IDEzLjc1QzguNDk5OTcgMTQuMzAyMyA4LjA1MjI2IDE0Ljc1IDcuNDk5OTcgMTQuNzVDNi45NDc2OSAxNC43NSA2LjQ5OTk3IDE0LjMwMjMgNi40OTk5NyAxMy43NUM2LjQ5OTk3IDEzLjQ1MTMgNi42MzA5MSAxMy4xODMyIDYuODM4NTEgMTNIMi40OTk5OUMyLjI2ODEgMTMgMi4wNjY2NCAxMi44NDA2IDIuMDEzMzYgMTIuNjE0OUMxLjk2MDA5IDEyLjM4OTIgMi4wNjg5NyAxMi4xNTY1IDIuMjc2MzggMTIuMDUyOEMyLjk2NzA4IDExLjcwNzQgMi45OTk5OSAxMS4wNTYzIDIuOTk5OTkgMTAuMjVWNi43OTk5OUMyLjk5OTk5IDQuNDE1MzcgNC44NTQ4MSAyLjQ2Mzk2IDcuMjAwNDIgMi4zMDk4QzYuNzM4NjcgMi4xNzkwOCA2LjQwMDM2IDEuNzU0NDggNi40MDAzNiAxLjI1MDg2QzYuNDAwMzYgMC42NDMxMDQgNi44OTMwNCAwLjE1MDQyMSA3LjUwMDggMC4xNTA0MjFDOC4xMDg1NSAwLjE1MDQyMSA4LjYwMTI0IDAuNjQzMTA0IDguNjAxMjQgMS4yNTA4NlpNNy40OTk5OSAzLjI5OTk5QzUuNTY2OTkgMy4yOTk5OSAzLjk5OTk5IDQuODY2OTkgMy45OTk5OSA2Ljc5OTk5VjEwLjI1TDQuMDAwMDIgMTAuMzAwOUM0LjAwMDUgMTAuNzQ2MyA0LjAwMTIxIDExLjQwODQgMy42OTkyOSAxMkgxMS4zMDA3QzEwLjk5ODggMTEuNDA4NCAxMC45OTk1IDEwLjc0NjMgMTEgMTAuMzAwOUwxMSAxMC4yNVY2Ljc5OTk5QzExIDQuODY2OTkgOS40MzI5OSAzLjI5OTk5IDcuNDk5OTkgMy4yOTk5OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGs9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMgOUMzIDYuNSA0LjUgNC4yNSA3LjUgMS41QzEwLjUgNC4yNSAxMiA2LjUgMTIgOUMxMiAxMS40ODUzIDkuOTg1MjggMTMuNSA3LjUgMTMuNUM1LjAxNDcyIDEzLjUgMyAxMS40ODUzIDMgOVpNMTAuOTUyNCA4LjMwMzA3QzkuNjczNDcgNy44MjEyMSA4LjI4NzkgOC40NjIwOCA2Ljk4OTU2IDkuMDYyNTlDNS45MzI3IDkuNTUxNDIgNC45MzM2NSAxMC4wMTM1IDQuMDk2OTUgOS44MjE1M0M0LjAzMzU3IDkuNTU4MDQgNCA5LjI4Mjk0IDQgOUM0IDcuMTEyMDMgNS4wMjY4NiA1LjI3MTk1IDcuNSAyLjg3MzU3QzkuNjY4MzcgNC45NzYzOSAxMC43MjUgNi42NTAwNCAxMC45NTI0IDguMzAzMDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxSPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zIDIuNUMzIDIuMjIzODYgMy4yMjM4NiAyIDMuNSAySDExLjVDMTEuNzc2MSAyIDEyIDIuMjIzODYgMTIgMi41VjEzLjVDMTIgMTMuNjgxOCAxMS45MDE0IDEzLjg0OTIgMTEuNzQyNCAxMy45MzczQzExLjU4MzQgMTQuMDI1NCAxMS4zODkxIDE0LjAyMDMgMTEuMjM1IDEzLjkyNEw3LjUgMTEuNTg5NkwzLjc2NSAxMy45MjRDMy42MTA4NyAxNC4wMjAzIDMuNDE2NTkgMTQuMDI1NCAzLjI1NzYyIDEzLjkzNzNDMy4wOTg2NCAxMy44NDkyIDMgMTMuNjgxOCAzIDEzLjVWMi41Wk00IDNWMTIuNTk3OUw2Ljk3IDEwLjc0MTZDNy4yOTQyNyAxMC41MzkgNy43MDU3MyAxMC41MzkgOC4wMyAxMC43NDE2TDExIDEyLjU5NzlWM0g0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC4yNSAxQzAuMjUgMC41ODU3ODYgMC41ODU3ODYgMC4yNSAxIDAuMjVIMTRDMTQuNDE0MiAwLjI1IDE0Ljc1IDAuNTg1Nzg2IDE0Ljc1IDFWMTRDMTQuNzUgMTQuNDE0MiAxNC40MTQyIDE0Ljc1IDE0IDE0Ljc1SDFDMC41ODU3ODYgMTQuNzUgMC4yNSAxNC40MTQyIDAuMjUgMTRWMVpNMS43NSAxLjc1VjEzLjI1SDEzLjI1VjEuNzVIMS43NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNVwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiM1wiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOVwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTFcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiOVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiMTFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pKX0sST1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMSAxMy4yNUwxNCAxMy4yNVYxNC43NUwxIDE0Ljc1VjEzLjI1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxM1wiLHk6XCI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTNcIix5OlwiM1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiMVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxM1wiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNVwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNVwiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiM1wiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiM1wiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOVwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOVwiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTFcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjExXCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjlcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxM1wiLHk6XCI5XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIxMVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjExXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCIzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCI3XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCI5XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCIxMVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSkpfSxBPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wIDcuNUMwIDcuMjIzODYgMC4yMjM4NTggNyAwLjUgN0gzQzMuMjc2MTQgNyAzLjUgNy4yMjM4NiAzLjUgNy41QzMuNSA3Ljc3NjE0IDMuMjc2MTQgOCAzIDhIMC41QzAuMjIzODU4IDggMCA3Ljc3NjE0IDAgNy41Wk01Ljc1IDcuNUM1Ljc1IDcuMjIzODYgNS45NzM4NiA3IDYuMjUgN0g4Ljc1QzkuMDI2MTQgNyA5LjI1IDcuMjIzODYgOS4yNSA3LjVDOS4yNSA3Ljc3NjE0IDkuMDI2MTQgOCA4Ljc1IDhINi4yNUM1Ljk3Mzg2IDggNS43NSA3Ljc3NjE0IDUuNzUgNy41Wk0xMiA3QzExLjcyMzkgNyAxMS41IDcuMjIzODYgMTEuNSA3LjVDMTEuNSA3Ljc3NjE0IDExLjcyMzkgOCAxMiA4SDE0LjVDMTQuNzc2MSA4IDE1IDcuNzc2MTQgMTUgNy41QzE1IDcuMjIzODYgMTQuNzc2MSA3IDE0LjUgN0gxMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuNSA2LjYyNUMxLjAxNjc1IDYuNjI1IDAuNjI1IDcuMDE2NzUgMC42MjUgNy41QzAuNjI1IDcuOTgzMjUgMS4wMTY3NSA4LjM3NSAxLjUgOC4zNzVDMS45ODMyNSA4LjM3NSAyLjM3NSA3Ljk4MzI1IDIuMzc1IDcuNUMyLjM3NSA3LjAxNjc1IDEuOTgzMjUgNi42MjUgMS41IDYuNjI1Wk01LjUgNi42MjVDNS4wMTY3NSA2LjYyNSA0LjYyNSA3LjAxNjc1IDQuNjI1IDcuNUM0LjYyNSA3Ljk4MzI1IDUuMDE2NzUgOC4zNzUgNS41IDguMzc1QzUuOTgzMjUgOC4zNzUgNi4zNzUgNy45ODMyNSA2LjM3NSA3LjVDNi4zNzUgNy4wMTY3NSA1Ljk4MzI1IDYuNjI1IDUuNSA2LjYyNVpNOS41IDYuNjI1QzkuMDE2NzUgNi42MjUgOC42MjUgNy4wMTY3NSA4LjYyNSA3LjVDOC42MjUgNy45ODMyNSA5LjAxNjc1IDguMzc1IDkuNSA4LjM3NUM5Ljk4MzI1IDguMzc1IDEwLjM3NSA3Ljk4MzI1IDEwLjM3NSA3LjVDMTAuMzc1IDcuMDE2NzUgOS45ODMyNSA2LjYyNSA5LjUgNi42MjVaTTEyLjYyNSA3LjVDMTIuNjI1IDcuMDE2NzUgMTMuMDE2OCA2LjYyNSAxMy41IDYuNjI1QzEzLjk4MzIgNi42MjUgMTQuMzc1IDcuMDE2NzUgMTQuMzc1IDcuNUMxNC4zNzUgNy45ODMyNSAxMy45ODMyIDguMzc1IDEzLjUgOC4zNzVDMTMuMDE2OCA4LjM3NSAxMi42MjUgNy45ODMyNSAxMi42MjUgNy41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sSD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS43NSAxTDEuNzUgMTRMMC4yNDk5OTkgMTRMMC4yNSAxTDEuNzUgMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTBcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDEwIDcpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEwXCIseTpcIjEzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgMTAgMTMpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEyXCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxMiA3KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMlwiLHk6XCIxM1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDEyIDEzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCA4IDcpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjdcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxNCA3KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjEzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgOCAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTRcIix5OlwiMTNcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxNCAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOFwiLHk6XCI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgOCA1KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxNFwiLHk6XCI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgMTQgNSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOFwiLHk6XCIzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgOCAzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxNFwiLHk6XCIzXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgMTQgMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOFwiLHk6XCI5XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgOCA5KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxNFwiLHk6XCI5XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgMTQgOSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOFwiLHk6XCIxMVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDggMTEpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjExXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgMTQgMTEpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjZcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDYgNylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNlwiLHk6XCIxM1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDYgMTMpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjRcIix5OlwiN1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDQgNylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNFwiLHk6XCIxM1wiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKDkwIDQgMTMpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEwXCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCAxMCAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMlwiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgMTIgMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOFwiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgOCAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxNFwiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgMTQgMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNlwiLHk6XCIxXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoOTAgNiAxKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI0XCIseTpcIjFcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSg5MCA0IDEpXCIsZmlsbDpufSkpfSxCPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiNS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxM1wiLHk6XCI1LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiMy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxM1wiLHk6XCIzLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjEzLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiMS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxM1wiLHk6XCI3LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjEzLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjEuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNVwiLHk6XCI3LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjVcIix5OlwiMTMuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNVwiLHk6XCIxLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjNcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIzXCIseTpcIjEzLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjNcIix5OlwiMS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI5XCIseTpcIjcuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOVwiLHk6XCIxMy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI5XCIseTpcIjEuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTFcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMVwiLHk6XCIxMy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMVwiLHk6XCIxLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiOS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxM1wiLHk6XCI5LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiMTEuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTNcIix5OlwiMTEuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCI1LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjFcIix5OlwiMy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjcuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCIxMy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjEuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMVwiLHk6XCI5LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjFcIix5OlwiMTEuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSl9LFY9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEzLjI1IDFMMTMuMjUgMTRMMTQuNzUgMTRMMTQuNzUgMUwxMy4yNSAxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgNSA3KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgNSAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDMgNylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDMgMTMpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCA3IDcpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCAxIDcpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCA3IDEzKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgMSAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDcgNSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDEgNSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDcgMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDEgMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDcgOSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDEgOSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDcgMTEpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCAxIDExKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgOSA3KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3dpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwibWF0cml4KDAgMSAxIDAgOSAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDExIDcpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7d2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJtYXRyaXgoMCAxIDEgMCAxMSAxMylcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDUgMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDMgMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDcgMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDEgMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDkgMSlcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcIm1hdHJpeCgwIDEgMSAwIDExIDEpXCIsZmlsbDpufSkpfSxEPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjI1IDcuNUMxLjI1IDcuMjIzODYgMS40NzM4NiA3IDEuNzUgN0gxMy4yNUMxMy41MjYxIDcgMTMuNzUgNy4yMjM4NiAxMy43NSA3LjVDMTMuNzUgNy43NzYxNCAxMy41MjYxIDggMTMuMjUgOEgxLjc1QzEuNDczODYgOCAxLjI1IDcuNzc2MTQgMS4yNSA3LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxaPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiNS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjMuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCI3LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjdcIix5OlwiMTMuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIxLjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjEzXCIseTpcIjcuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNVwiLHk6XCI3LjAyNVwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjNcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI5XCIseTpcIjcuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTFcIix5OlwiNy4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI3XCIseTpcIjkuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiN1wiLHk6XCIxMS4wMjVcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxXCIseTpcIjcuMDI1XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEgMS40OTk5NEMxIDEuMjIzOCAxLjIyMzg2IDAuOTk5OTM5IDEuNSAwLjk5OTkzOUg2VjEuOTk5OTRIMlY1Ljk5OTk0SDFWMS40OTk5NFpNMTMgMS45OTk5NEg5VjAuOTk5OTM5SDEzLjVDMTMuNzc2MSAwLjk5OTkzOSAxNCAxLjIyMzggMTQgMS40OTk5NFY1Ljk5OTk0SDEzVjEuOTk5OTRaTTEgMTMuNDk5OVY4Ljk5OTk0SDJWMTIuOTk5OUg2VjEzLjk5OTlIMS41QzEuMjIzODYgMTMuOTk5OSAxIDEzLjc3NjEgMSAxMy40OTk5Wk0xMyAxMi45OTk5VjguOTk5OTRIMTRWMTMuNDk5OUMxNCAxMy43NzYxIDEzLjc3NjEgMTMuOTk5OSAxMy41IDEzLjk5OTlIOS41VjEyLjk5OTlIMTNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSwkPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjUgM0MxLjIyMzg2IDMgMSAzLjIyMzg2IDEgMy41QzEgMy43NzYxNCAxLjIyMzg2IDQgMS41IDRIMTMuNUMxMy43NzYxIDQgMTQgMy43NzYxNCAxNCAzLjVDMTQgMy4yMjM4NiAxMy43NzYxIDMgMTMuNSAzSDEuNVpNMSA3LjVDMSA3LjIyMzg2IDEuMjIzODYgNyAxLjUgN0gzLjVDMy43NzYxNCA3IDQgNy4yMjM4NiA0IDcuNUM0IDcuNzc2MTQgMy43NzYxNCA4IDMuNSA4SDEuNUMxLjIyMzg2IDggMSA3Ljc3NjE0IDEgNy41Wk0xIDExLjVDMSAxMS4yMjM5IDEuMjIzODYgMTEgMS41IDExQzEuNzc2MTQgMTEgMiAxMS4yMjM5IDIgMTEuNUMyIDExLjc3NjEgMS43NzYxNCAxMiAxLjUgMTJDMS4yMjM4NiAxMiAxIDExLjc3NjEgMSAxMS41Wk0zIDExLjVDMyAxMS4yMjM5IDMuMjIzODYgMTEgMy41IDExQzMuNzc2MTQgMTEgNCAxMS4yMjM5IDQgMTEuNUM0IDExLjc3NjEgMy43NzYxNCAxMiAzLjUgMTJDMy4yMjM4NiAxMiAzIDExLjc3NjEgMyAxMS41Wk01LjUgMTFDNS4yMjM4NiAxMSA1IDExLjIyMzkgNSAxMS41QzUgMTEuNzc2MSA1LjIyMzg2IDEyIDUuNSAxMkM1Ljc3NjE0IDEyIDYgMTEuNzc2MSA2IDExLjVDNiAxMS4yMjM5IDUuNzc2MTQgMTEgNS41IDExWk03IDExLjVDNyAxMS4yMjM5IDcuMjIzODYgMTEgNy41IDExQzcuNzc2MTQgMTEgOCAxMS4yMjM5IDggMTEuNUM4IDExLjc3NjEgNy43NzYxNCAxMiA3LjUgMTJDNy4yMjM4NiAxMiA3IDExLjc3NjEgNyAxMS41Wk05LjUgMTFDOS4yMjM4NiAxMSA5IDExLjIyMzkgOSAxMS41QzkgMTEuNzc2MSA5LjIyMzg2IDEyIDkuNSAxMkM5Ljc3NjE0IDEyIDEwIDExLjc3NjEgMTAgMTEuNUMxMCAxMS4yMjM5IDkuNzc2MTQgMTEgOS41IDExWk0xMSAxMS41QzExIDExLjIyMzkgMTEuMjIzOSAxMSAxMS41IDExQzExLjc3NjEgMTEgMTIgMTEuMjIzOSAxMiAxMS41QzEyIDExLjc3NjEgMTEuNzc2MSAxMiAxMS41IDEyQzExLjIyMzkgMTIgMTEgMTEuNzc2MSAxMSAxMS41Wk0xMy41IDExQzEzLjIyMzkgMTEgMTMgMTEuMjIzOSAxMyAxMS41QzEzIDExLjc3NjEgMTMuMjIzOSAxMiAxMy41IDEyQzEzLjc3NjEgMTIgMTQgMTEuNzc2MSAxNCAxMS41QzE0IDExLjIyMzkgMTMuNzc2MSAxMSAxMy41IDExWk02LjUgN0M2LjIyMzg2IDcgNiA3LjIyMzg2IDYgNy41QzYgNy43NzYxNCA2LjIyMzg2IDggNi41IDhIOC41QzguNzc2MTQgOCA5IDcuNzc2MTQgOSA3LjVDOSA3LjIyMzg2IDguNzc2MTQgNyA4LjUgN0g2LjVaTTExIDcuNUMxMSA3LjIyMzg2IDExLjIyMzkgNyAxMS41IDdIMTMuNUMxMy43NzYxIDcgMTQgNy4yMjM4NiAxNCA3LjVDMTQgNy43NzYxNCAxMy43NzYxIDggMTMuNSA4SDExLjVDMTEuMjIzOSA4IDExIDcuNzc2MTQgMTEgNy41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTQgMS43NUwxIDEuNzVMMSAwLjI0OTk5OUwxNCAwLjI1TDE0IDEuNzVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjhcIix5OlwiMTBcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDggMTApXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjJcIix5OlwiMTBcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDIgMTApXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjhcIix5OlwiMTJcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDggMTIpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjJcIix5OlwiMTJcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDIgMTIpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjhcIix5OlwiOFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgOCA4KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjE0XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCA4IDE0KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIyXCIseTpcIjhcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDIgOClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMlwiLHk6XCIxNFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMiAxNClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTBcIix5OlwiOFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMTAgOClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTBcIix5OlwiMTRcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDEwIDE0KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMlwiLHk6XCI4XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCAxMiA4KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxMlwiLHk6XCIxNFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMTIgMTQpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjZcIix5OlwiOFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgNiA4KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI2XCIseTpcIjE0XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCA2IDE0KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI0XCIseTpcIjhcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDQgOClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiNFwiLHk6XCIxNFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgNCAxNClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiOFwiLHk6XCI2XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCA4IDYpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjJcIix5OlwiNlwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMiA2KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCI4XCIseTpcIjRcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDggNClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMlwiLHk6XCI0XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCAyIDQpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjEwXCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCAxNCAxMClcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicmVjdFwiLHt4OlwiMTRcIix5OlwiMTJcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDE0IDEyKVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxNFwiLHk6XCI4XCIsd2lkdGg6XCIxXCIsaGVpZ2h0OlwiMVwiLHJ4OlwiLjVcIix0cmFuc2Zvcm06XCJyb3RhdGUoLTE4MCAxNCA4KVwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJyZWN0XCIse3g6XCIxNFwiLHk6XCIxNFwiLHdpZHRoOlwiMVwiLGhlaWdodDpcIjFcIixyeDpcIi41XCIsdHJhbnNmb3JtOlwicm90YXRlKC0xODAgMTQgMTQpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjZcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDE0IDYpXCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcInJlY3RcIix7eDpcIjE0XCIseTpcIjRcIix3aWR0aDpcIjFcIixoZWlnaHQ6XCIxXCIscng6XCIuNVwiLHRyYW5zZm9ybTpcInJvdGF0ZSgtMTgwIDE0IDQpXCIsZmlsbDpufSkpfSxGPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMi41IDJIMi41QzIuMjIzODYgMiAyIDIuMjIzODYgMiAyLjVWMTIuNUMyIDEyLjc3NjEgMi4yMjM4NiAxMyAyLjUgMTNIMTIuNUMxMi43NzYxIDEzIDEzIDEyLjc3NjEgMTMgMTIuNVYyLjVDMTMgMi4yMjM4NiAxMi43NzYxIDIgMTIuNSAyWk0yLjUgMUMxLjY3MTU3IDEgMSAxLjY3MTU3IDEgMi41VjEyLjVDMSAxMy4zMjg0IDEuNjcxNTcgMTQgMi41IDE0SDEyLjVDMTMuMzI4NCAxNCAxNCAxMy4zMjg0IDE0IDEyLjVWMi41QzE0IDEuNjcxNTcgMTMuMzI4NCAxIDEyLjUgMUgyLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxVPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjk5OTk4IDAuOTk5OTc2QzEuNDQ3NjkgMC45OTk5NzYgMC45OTk5NzYgMS40NDc2OSAwLjk5OTk3NiAxLjk5OTk4VjEzQzAuOTk5OTc2IDEzLjU1MjMgMS40NDc2OSAxNCAxLjk5OTk4IDE0SDEzQzEzLjU1MjMgMTQgMTQgMTMuNTUyMyAxNCAxM1YxLjk5OTk4QzE0IDEuNDQ3NjkgMTMuNTUyMyAwLjk5OTk3NiAxMyAwLjk5OTk3NkgxLjk5OTk4Wk0xLjk5OTk4IDEuOTk5OThMMTMgMS45OTk5OFYxM0gxLjk5OTk4VjEuOTk5OThaTTQuNDk5OTYgMy45OTk5NkM0LjIyMzgyIDMuOTk5OTYgMy45OTk5NiA0LjIyMzgyIDMuOTk5OTYgNC40OTk5NlYxMC41QzMuOTk5OTYgMTAuNzc2MSA0LjIyMzgyIDExIDQuNDk5OTYgMTFIMTAuNUMxMC43NzYxIDExIDExIDEwLjc3NjEgMTEgMTAuNVY0LjQ5OTk2QzExIDQuMjIzODIgMTAuNzc2MSAzLjk5OTk2IDEwLjUgMy45OTk5Nkg0LjQ5OTk2Wk00Ljk5OTk2IDkuOTk5OTZWNC45OTk5Nkg5Ljk5OTk2VjkuOTk5OTZINC45OTk5NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFc9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIgNUgxM0MxMy41NTIzIDUgMTQgNS40NDc3MiAxNCA2VjlDMTQgOS41NTIyOCAxMy41NTIzIDEwIDEzIDEwSDJDMS40NDc3MiAxMCAxIDkuNTUyMjggMSA5VjZDMSA1LjQ0NzcyIDEuNDQ3NzIgNSAyIDVaTTAgNkMwIDQuODk1NDMgMC44OTU0MzEgNCAyIDRIMTNDMTQuMTA0NiA0IDE1IDQuODk1NDMgMTUgNlY5QzE1IDEwLjEwNDYgMTQuMTA0NiAxMSAxMyAxMUgyQzAuODk1NDMgMTEgMCAxMC4xMDQ2IDAgOVY2Wk00LjUgNi43NUM0LjA4NTc5IDYuNzUgMy43NSA3LjA4NTc5IDMuNzUgNy41QzMuNzUgNy45MTQyMSA0LjA4NTc5IDguMjUgNC41IDguMjVDNC45MTQyMSA4LjI1IDUuMjUgNy45MTQyMSA1LjI1IDcuNUM1LjI1IDcuMDg1NzkgNC45MTQyMSA2Ljc1IDQuNSA2Ljc1Wk02Ljc1IDcuNUM2Ljc1IDcuMDg1NzkgNy4wODU3OSA2Ljc1IDcuNSA2Ljc1QzcuOTE0MjEgNi43NSA4LjI1IDcuMDg1NzkgOC4yNSA3LjVDOC4yNSA3LjkxNDIxIDcuOTE0MjEgOC4yNSA3LjUgOC4yNUM3LjA4NTc5IDguMjUgNi43NSA3LjkxNDIxIDYuNzUgNy41Wk0xMC41IDYuNzVDMTAuMDg1OCA2Ljc1IDkuNzUgNy4wODU3OSA5Ljc1IDcuNUM5Ljc1IDcuOTE0MjEgMTAuMDg1OCA4LjI1IDEwLjUgOC4yNUMxMC45MTQyIDguMjUgMTEuMjUgNy45MTQyMSAxMS4yNSA3LjVDMTEuMjUgNy4wODU3OSAxMC45MTQyIDYuNzUgMTAuNSA2Ljc1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sej1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC41IDFDNC43NzYxNCAxIDUgMS4yMjM4NiA1IDEuNVYySDEwVjEuNUMxMCAxLjIyMzg2IDEwLjIyMzkgMSAxMC41IDFDMTAuNzc2MSAxIDExIDEuMjIzODYgMTEgMS41VjJIMTIuNUMxMy4zMjg0IDIgMTQgMi42NzE1NyAxNCAzLjVWMTIuNUMxNCAxMy4zMjg0IDEzLjMyODQgMTQgMTIuNSAxNEgyLjVDMS42NzE1NyAxNCAxIDEzLjMyODQgMSAxMi41VjMuNUMxIDIuNjcxNTcgMS42NzE1NyAyIDIuNSAySDRWMS41QzQgMS4yMjM4NiA0LjIyMzg2IDEgNC41IDFaTTEwIDNWMy41QzEwIDMuNzc2MTQgMTAuMjIzOSA0IDEwLjUgNEMxMC43NzYxIDQgMTEgMy43NzYxNCAxMSAzLjVWM0gxMi41QzEyLjc3NjEgMyAxMyAzLjIyMzg2IDEzIDMuNVY1SDJWMy41QzIgMy4yMjM4NiAyLjIyMzg2IDMgMi41IDNINFYzLjVDNCAzLjc3NjE0IDQuMjIzODYgNCA0LjUgNEM0Ljc3NjE0IDQgNSAzLjc3NjE0IDUgMy41VjNIMTBaTTIgNlYxMi41QzIgMTIuNzc2MSAyLjIyMzg2IDEzIDIuNSAxM0gxMi41QzEyLjc3NjEgMTMgMTMgMTIuNzc2MSAxMyAxMi41VjZIMlpNNyA3LjVDNyA3LjIyMzg2IDcuMjIzODYgNyA3LjUgN0M3Ljc3NjE0IDcgOCA3LjIyMzg2IDggNy41QzggNy43NzYxNCA3Ljc3NjE0IDggNy41IDhDNy4yMjM4NiA4IDcgNy43NzYxNCA3IDcuNVpNOS41IDdDOS4yMjM4NiA3IDkgNy4yMjM4NiA5IDcuNUM5IDcuNzc2MTQgOS4yMjM4NiA4IDkuNSA4QzkuNzc2MTQgOCAxMCA3Ljc3NjE0IDEwIDcuNUMxMCA3LjIyMzg2IDkuNzc2MTQgNyA5LjUgN1pNMTEgNy41QzExIDcuMjIzODYgMTEuMjIzOSA3IDExLjUgN0MxMS43NzYxIDcgMTIgNy4yMjM4NiAxMiA3LjVDMTIgNy43NzYxNCAxMS43NzYxIDggMTEuNSA4QzExLjIyMzkgOCAxMSA3Ljc3NjE0IDExIDcuNVpNMTEuNSA5QzExLjIyMzkgOSAxMSA5LjIyMzg2IDExIDkuNUMxMSA5Ljc3NjE0IDExLjIyMzkgMTAgMTEuNSAxMEMxMS43NzYxIDEwIDEyIDkuNzc2MTQgMTIgOS41QzEyIDkuMjIzODYgMTEuNzc2MSA5IDExLjUgOVpNOSA5LjVDOSA5LjIyMzg2IDkuMjIzODYgOSA5LjUgOUM5Ljc3NjE0IDkgMTAgOS4yMjM4NiAxMCA5LjVDMTAgOS43NzYxNCA5Ljc3NjE0IDEwIDkuNSAxMEM5LjIyMzg2IDEwIDkgOS43NzYxNCA5IDkuNVpNNy41IDlDNy4yMjM4NiA5IDcgOS4yMjM4NiA3IDkuNUM3IDkuNzc2MTQgNy4yMjM4NiAxMCA3LjUgMTBDNy43NzYxNCAxMCA4IDkuNzc2MTQgOCA5LjVDOCA5LjIyMzg2IDcuNzc2MTQgOSA3LjUgOVpNNSA5LjVDNSA5LjIyMzg2IDUuMjIzODYgOSA1LjUgOUM1Ljc3NjE0IDkgNiA5LjIyMzg2IDYgOS41QzYgOS43NzYxNCA1Ljc3NjE0IDEwIDUuNSAxMEM1LjIyMzg2IDEwIDUgOS43NzYxNCA1IDkuNVpNMy41IDlDMy4yMjM4NiA5IDMgOS4yMjM4NiAzIDkuNUMzIDkuNzc2MTQgMy4yMjM4NiAxMCAzLjUgMTBDMy43NzYxNCAxMCA0IDkuNzc2MTQgNCA5LjVDNCA5LjIyMzg2IDMuNzc2MTQgOSAzLjUgOVpNMyAxMS41QzMgMTEuMjIzOSAzLjIyMzg2IDExIDMuNSAxMUMzLjc3NjE0IDExIDQgMTEuMjIzOSA0IDExLjVDNCAxMS43NzYxIDMuNzc2MTQgMTIgMy41IDEyQzMuMjIzODYgMTIgMyAxMS43NzYxIDMgMTEuNVpNNS41IDExQzUuMjIzODYgMTEgNSAxMS4yMjM5IDUgMTEuNUM1IDExLjc3NjEgNS4yMjM4NiAxMiA1LjUgMTJDNS43NzYxNCAxMiA2IDExLjc3NjEgNiAxMS41QzYgMTEuMjIzOSA1Ljc3NjE0IDExIDUuNSAxMVpNNyAxMS41QzcgMTEuMjIzOSA3LjIyMzg2IDExIDcuNSAxMUM3Ljc3NjE0IDExIDggMTEuMjIzOSA4IDExLjVDOCAxMS43NzYxIDcuNzc2MTQgMTIgNy41IDEyQzcuMjIzODYgMTIgNyAxMS43NzYxIDcgMTEuNVpNOS41IDExQzkuMjIzODYgMTEgOSAxMS4yMjM5IDkgMTEuNUM5IDExLjc3NjEgOS4yMjM4NiAxMiA5LjUgMTJDOS43NzYxNCAxMiAxMCAxMS43NzYxIDEwIDExLjVDMTAgMTEuMjIzOSA5Ljc3NjE0IDExIDkuNSAxMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEc9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIgM0MxLjQ0NzcyIDMgMSAzLjQ0NzcyIDEgNFYxMUMxIDExLjU1MjMgMS40NDc3MiAxMiAyIDEySDEzQzEzLjU1MjMgMTIgMTQgMTEuNTUyMyAxNCAxMVY0QzE0IDMuNDQ3NzIgMTMuNTUyMyAzIDEzIDNIMlpNMCA0QzAgMi44OTU0MyAwLjg5NTQzMSAyIDIgMkgxM0MxNC4xMDQ2IDIgMTUgMi44OTU0MyAxNSA0VjExQzE1IDEyLjEwNDYgMTQuMTA0NiAxMyAxMyAxM0gyQzAuODk1NDMxIDEzIDAgMTIuMTA0NiAwIDExVjRaTTIgNC4yNUMyIDQuMTExOTMgMi4xMTE5MyA0IDIuMjUgNEg0Ljc1QzQuODg4MDcgNCA1IDQuMTExOTMgNSA0LjI1VjUuNzU0NTRDNSA1Ljg5MjYxIDQuODg4MDcgNi4wMDQ1NCA0Ljc1IDYuMDA0NTRIMi4yNUMyLjExMTkzIDYuMDA0NTQgMiA1Ljg5MjYxIDIgNS43NTQ1NFY0LjI1Wk0xMi4xMDEgNy41ODQyMUMxMi4xMDEgOS4wMjA3MyAxMC45MzY1IDEwLjE4NTMgOS40OTk5OCAxMC4xODUzQzguMDYzNDYgMTAuMTg1MyA2Ljg5ODkzIDkuMDIwNzMgNi44OTg5MyA3LjU4NDIxQzYuODk4OTMgNi4xNDc2OSA4LjA2MzQ2IDQuOTgzMTUgOS40OTk5OCA0Ljk4MzE1QzEwLjkzNjUgNC45ODMxNSAxMi4xMDEgNi4xNDc2OSAxMi4xMDEgNy41ODQyMVpNMTMuMTAxIDcuNTg0MjFDMTMuMTAxIDkuNTczMDIgMTEuNDg4OCAxMS4xODUzIDkuNDk5OTggMTEuMTg1M0M3LjUxMTE3IDExLjE4NTMgNS44OTg5MyA5LjU3MzAyIDUuODk4OTMgNy41ODQyMUM1Ljg5ODkzIDUuNTk1NCA3LjUxMTE3IDMuOTgzMTUgOS40OTk5OCAzLjk4MzE1QzExLjQ4ODggMy45ODMxNSAxMy4xMDEgNS41OTU0IDEzLjEwMSA3LjU4NDIxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiAzLjVDMiAzLjIyMzg2IDIuMjIzODYgMyAyLjUgM0gxMi41QzEyLjc3NjEgMyAxMyAzLjIyMzg2IDEzIDMuNVY5LjVDMTMgOS43NzYxNCAxMi43NzYxIDEwIDEyLjUgMTBIMi41QzIuMjIzODYgMTAgMiA5Ljc3NjE0IDIgOS41VjMuNVpNMiAxMC45MTQ2QzEuNDE3NCAxMC43MDg3IDEgMTAuMTUzMSAxIDkuNVYzLjVDMSAyLjY3MTU3IDEuNjcxNTcgMiAyLjUgMkgxMi41QzEzLjMyODQgMiAxNCAyLjY3MTU3IDE0IDMuNVY5LjVDMTQgMTAuMTUzMSAxMy41ODI2IDEwLjcwODcgMTMgMTAuOTE0NlYxMS41QzEzIDEyLjMyODQgMTIuMzI4NCAxMyAxMS41IDEzSDMuNUMyLjY3MTU3IDEzIDIgMTIuMzI4NCAyIDExLjVWMTAuOTE0NlpNMTIgMTFWMTEuNUMxMiAxMS43NzYxIDExLjc3NjEgMTIgMTEuNSAxMkgzLjVDMy4yMjM4NiAxMiAzIDExLjc3NjEgMyAxMS41VjExSDEyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sWT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi41IDNDMi4yMjM4NiAzIDIgMy4yMjM4NiAyIDMuNVY5LjVDMiA5Ljc3NjE0IDIuMjIzODYgMTAgMi41IDEwSDEyLjVDMTIuNzc2MSAxMCAxMyA5Ljc3NjE0IDEzIDkuNVYzLjVDMTMgMy4yMjM4NiAxMi43NzYxIDMgMTIuNSAzSDIuNVpNMSA5LjVDMSAxMC4xNTMxIDEuNDE3NCAxMC43MDg3IDIgMTAuOTE0NlYxMS41QzIgMTIuMzI4NCAyLjY3MTU3IDEzIDMuNSAxM0gxMS41QzEyLjMyODQgMTMgMTMgMTIuMzI4NCAxMyAxMS41VjEwLjkxNDZDMTMuNTgyNiAxMC43MDg3IDE0IDEwLjE1MzEgMTQgOS41VjMuNUMxNCAyLjY3MTU3IDEzLjMyODQgMiAxMi41IDJIMi41QzEuNjcxNTcgMiAxIDIuNjcxNTcgMSAzLjVWOS41Wk0xMiAxMS41VjExSDNWMTEuNUMzIDExLjc3NjEgMy4yMjM4NiAxMiAzLjUgMTJIMTEuNUMxMS43NzYxIDEyIDEyIDExLjc3NjEgMTIgMTEuNVpNNS41IDZDNS4yMjM4NiA2IDUgNi4yMjM4NiA1IDYuNUM1IDYuNzc2MTQgNS4yMjM4NiA3IDUuNSA3SDkuNUM5Ljc3NjE0IDcgMTAgNi43NzYxNCAxMCA2LjVDMTAgNi4yMjM4NiA5Ljc3NjE0IDYgOS41IDZINS41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sSz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiAzLjVDMiAzLjIyMzg2IDIuMjIzODYgMyAyLjUgM0gxMi41QzEyLjc3NjEgMyAxMyAzLjIyMzg2IDEzIDMuNVY5LjVDMTMgOS43NzYxNCAxMi43NzYxIDEwIDEyLjUgMTBIMi41QzIuMjIzODYgMTAgMiA5Ljc3NjE0IDIgOS41VjMuNVpNMiAxMC45MTQ2QzEuNDE3NCAxMC43MDg3IDEgMTAuMTUzMSAxIDkuNVYzLjVDMSAyLjY3MTU3IDEuNjcxNTcgMiAyLjUgMkgxMi41QzEzLjMyODQgMiAxNCAyLjY3MTU3IDE0IDMuNVY5LjVDMTQgMTAuMTUzMSAxMy41ODI2IDEwLjcwODcgMTMgMTAuOTE0NlYxMS41QzEzIDEyLjMyODQgMTIuMzI4NCAxMyAxMS41IDEzSDMuNUMyLjY3MTU3IDEzIDIgMTIuMzI4NCAyIDExLjVWMTAuOTE0NlpNMTIgMTFWMTEuNUMxMiAxMS43NzYxIDExLjc3NjEgMTIgMTEuNSAxMkgzLjVDMy4yMjM4NiAxMiAzIDExLjc3NjEgMyAxMS41VjExSDEyWk01IDYuNUM1IDYuMjIzODYgNS4yMjM4NiA2IDUuNSA2SDdWNC41QzcgNC4yMjM4NiA3LjIyMzg2IDQgNy41IDRDNy43NzYxNCA0IDggNC4yMjM4NiA4IDQuNVY2SDkuNUM5Ljc3NjE0IDYgMTAgNi4yMjM4NiAxMCA2LjVDMTAgNi43NzYxNCA5Ljc3NjE0IDcgOS41IDdIOFY4LjVDOCA4Ljc3NjE0IDcuNzc2MTQgOSA3LjUgOUM3LjIyMzg2IDkgNyA4Ljc3NjE0IDcgOC41VjdINS41QzUuMjIzODYgNyA1IDYuNzc2MTQgNSA2LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxYPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjE4MTc5IDYuMTgxODFDNC4zNTc1MyA2LjAwNjA4IDQuNjQyNDUgNi4wMDYwOCA0LjgxODE5IDYuMTgxODFMNy40OTk5OSA4Ljg2MzYyTDEwLjE4MTggNi4xODE4MUMxMC4zNTc1IDYuMDA2MDggMTAuNjQyNCA2LjAwNjA4IDEwLjgxODIgNi4xODE4MUMxMC45OTM5IDYuMzU3NTUgMTAuOTkzOSA2LjY0MjQ3IDEwLjgxODIgNi44MTgyMUw3LjgxODE5IDkuODE4MjFDNy43MzM3OSA5LjkwMjYgNy42MTkzNCA5Ljk1MDAxIDcuNDk5OTkgOS45NTAwMUM3LjM4MDY0IDkuOTUwMDEgNy4yNjYxOCA5LjkwMjYgNy4xODE3OSA5LjgxODIxTDQuMTgxNzkgNi44MTgyMUM0LjAwNjA1IDYuNjQyNDcgNC4wMDYwNSA2LjM1NzU1IDQuMTgxNzkgNi4xODE4MVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEo9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTguODE4MDkgNC4xODE3OUM4Ljk5MzgzIDQuMzU3NTMgOC45OTM4MyA0LjY0MjQ1IDguODE4MDkgNC44MTgxOUw2LjEzNjI5IDcuNDk5OTlMOC44MTgwOSAxMC4xODE4QzguOTkzODMgMTAuMzU3NSA4Ljk5MzgzIDEwLjY0MjQgOC44MTgwOSAxMC44MTgyQzguNjQyMzYgMTAuOTkzOSA4LjM1NzQzIDEwLjk5MzkgOC4xODE3IDEwLjgxODJMNS4xODE3IDcuODE4MTlDNS4wOTczMSA3LjczMzc5IDUuMDQ5OSA3LjYxOTMzIDUuMDQ5OSA3LjQ5OTk5QzUuMDQ5OSA3LjM4MDY0IDUuMDk3MzEgNy4yNjYxOCA1LjE4MTcgNy4xODE3OUw4LjE4MTcgNC4xODE3OUM4LjM1NzQzIDQuMDA2MDUgOC42NDIzNiA0LjAwNjA1IDguODE4MDkgNC4xODE3OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFE9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTYuMTgxOTQgNC4xODE4NUM2LjM1NzY3IDQuMDA2MTEgNi42NDI2IDQuMDA2MTEgNi44MTgzMyA0LjE4MTg1TDkuODE4MzMgNy4xODE4NUM5LjkwMjcyIDcuMjY2MjQgOS45NTAxMyA3LjM4MDcgOS45NTAxMyA3LjUwMDA1QzkuOTUwMTMgNy42MTk0IDkuOTAyNzIgNy43MzM4NiA5LjgxODMzIDcuODE4MjVMNi44MTgzMyAxMC44MTgyQzYuNjQyNiAxMC45OTQgNi4zNTc2NyAxMC45OTQgNi4xODE5NCAxMC44MTgyQzYuMDA2MiAxMC42NDI1IDYuMDA2MiAxMC4zNTc2IDYuMTgxOTQgMTAuMTgxOUw4Ljg2Mzc0IDcuNTAwMDVMNi4xODE5NCA0LjgxODI1QzYuMDA2MiA0LjY0MjUxIDYuMDA2MiA0LjM1NzU5IDYuMTgxOTQgNC4xODE4NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGVlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjkzMTc5IDUuNDMxNzlDNC43NTYwNSA1LjYwNzUzIDQuNzU2MDUgNS44OTI0NSA0LjkzMTc5IDYuMDY4MTlDNS4xMDc1MyA2LjI0MzkyIDUuMzkyNDUgNi4yNDM5MiA1LjU2ODE5IDYuMDY4MTlMNy40OTk5OSA0LjEzNjM4TDkuNDMxNzkgNi4wNjgxOUM5LjYwNzUzIDYuMjQzOTIgOS44OTI0NSA2LjI0MzkyIDEwLjA2ODIgNi4wNjgxOUMxMC4yNDM5IDUuODkyNDUgMTAuMjQzOSA1LjYwNzUzIDEwLjA2ODIgNS40MzE3OUw3LjgxODE5IDMuMTgxNzlDNy43MzM3OSAzLjA5NzQgNy42MTkzMyAzLjA0OTk5IDcuNDk5OTkgMy4wNDk5OUM3LjM4MDY0IDMuMDQ5OTkgNy4yNjYxOCAzLjA5NzQgNy4xODE3OSAzLjE4MTc5TDQuOTMxNzkgNS40MzE3OVpNMTAuMDY4MiA5LjU2ODE5QzEwLjI0MzkgOS4zOTI0NSAxMC4yNDM5IDkuMTA3NTMgMTAuMDY4MiA4LjkzMTc5QzkuODkyNDUgOC43NTYwNiA5LjYwNzUzIDguNzU2MDYgOS40MzE3OSA4LjkzMTc5TDcuNDk5OTkgMTAuODYzNkw1LjU2ODE5IDguOTMxNzlDNS4zOTI0NSA4Ljc1NjA2IDUuMTA3NTMgOC43NTYwNiA0LjkzMTc5IDguOTMxNzlDNC43NTYwNSA5LjEwNzUzIDQuNzU2MDUgOS4zOTI0NSA0LjkzMTc5IDkuNTY4MTlMNy4xODE3OSAxMS44MTgyQzcuMzU3NTMgMTEuOTkzOSA3LjY0MjQ1IDExLjk5MzkgNy44MTgxOSAxMS44MTgyTDEwLjA2ODIgOS41NjgxOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHRlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjE4MTc5IDguODE4MTlDNC4wMDYwNSA4LjY0MjQ1IDQuMDA2MDUgOC4zNTc1MyA0LjE4MTc5IDguMTgxNzlMNy4xODE3OSA1LjE4MTc5QzcuMjY2MTggNS4wOTc0IDcuMzgwNjQgNS4wNDk5OSA3LjQ5OTk5IDUuMDQ5OTlDNy42MTkzMyA1LjA0OTk5IDcuNzMzNzkgNS4wOTc0IDcuODE4MTkgNS4xODE3OUwxMC44MTgyIDguMTgxNzlDMTAuOTkzOSA4LjM1NzUzIDEwLjk5MzkgOC42NDI0NSAxMC44MTgyIDguODE4MTlDMTAuNjQyNCA4Ljk5MzkyIDEwLjM1NzUgOC45OTM5MiAxMC4xODE4IDguODE4MTlMNy40OTk5OSA2LjEzNjM4TDQuODE4MTkgOC44MTgxOUM0LjY0MjQ1IDguOTkzOTIgNC4zNTc1MyA4Ljk5MzkyIDQuMTgxNzkgOC44MTgxOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG5lPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMi41IDNMMi40OTk5OSAzLjAwMDAyQzEuNjcxNTcgMy4wMDAwMiAwLjk5OTk5OSAzLjY3MTU5IDAuOTk5OTk5IDQuNTAwMDJWOS41MDAwMkMwLjk5OTk5OSAxMC4zMjg0IDEuNjcxNTcgMTEgMi41IDExSDcuNTAwMDJDNy42MzI2MyAxMSA3Ljc1OTgxIDExLjA1MjcgNy44NTM1OCAxMS4xNDY1TDkuOTk5OTkgMTMuMjkyOVYxMS41QzkuOTk5OTkgMTEuMjIzOSAxMC4yMjM5IDExIDEwLjUgMTFIMTIuNUMxMy4zMjg0IDExIDE0IDEwLjMyODQgMTQgOS41MDAwMlY0LjVDMTQgMy42NzE1NyAxMy4zMjg0IDMgMTIuNSAzWk0yLjQ5OTk5IDIuMDAwMDJMMTIuNSAyQzEzLjg4MDcgMiAxNSAzLjExOTI4IDE1IDQuNVY5LjUwMDAyQzE1IDEwLjg4MDcgMTMuODgwNyAxMiAxMi41IDEySDExVjE0LjVDMTEgMTQuNzAyMiAxMC44NzgyIDE0Ljg4NDUgMTAuNjkxMyAxNC45NjE5QzEwLjUwNDUgMTUuMDM5MyAxMC4yODk0IDE0Ljk5NjUgMTAuMTQ2NCAxNC44NTM1TDcuMjkyOTIgMTJIMi41QzEuMTE5MjkgMTIgMCAxMC44ODA3IDAgOS41MDAwMlY0LjUwMDAyQzAgMy4xMTkzMSAxLjExOTI4IDIuMDAwMDIgMi40OTk5OSAyLjAwMDAyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTExLjQ2NjkgMy43MjY4NEMxMS43NTU4IDMuOTE1NzQgMTEuODM2OSA0LjMwMzA4IDExLjY0OCA0LjU5MTk4TDcuMzk3OTkgMTEuMDkyQzcuMjk3ODMgMTEuMjQ1MiA3LjEzNTU2IDExLjM0NjcgNi45NTQwMiAxMS4zNjk5QzYuNzcyNDcgMTEuMzkzMSA2LjU4OTg5IDExLjMzNTUgNi40NTQ0NiAxMS4yMTI0TDMuNzA0NDYgOC43MTI0MUMzLjQ0OTA1IDguNDgwMjIgMy40MzAyMyA4LjA4NDk0IDMuNjYyNDIgNy44Mjk1M0MzLjg5NDYxIDcuNTc0MTIgNC4yODk4OSA3LjU1NTI5IDQuNTQ1MyA3Ljc4NzQ5TDYuNzUyOTIgOS43OTQ0MUwxMC42MDE4IDMuOTA3OTJDMTAuNzkwNyAzLjYxOTAyIDExLjE3OCAzLjUzNzk1IDExLjQ2NjkgMy43MjY4NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG9lPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTkxIDAuODc3MDQ1QzMuODQyMjIgMC44NzcwNDUgMC44NzcwNzUgMy44NDIxOSAwLjg3NzA3NSA3LjQ5OTg4QzAuODc3MDc1IDExLjE1NzUgMy44NDIyMiAxNC4xMjI3IDcuNDk5OTEgMTQuMTIyN0MxMS4xNTc2IDE0LjEyMjcgMTQuMTIyNyAxMS4xNTc1IDE0LjEyMjcgNy40OTk4OEMxNC4xMjI3IDMuODQyMTkgMTEuMTU3NiAwLjg3NzA0NSA3LjQ5OTkxIDAuODc3MDQ1Wk0xLjgyNzA4IDcuNDk5ODhDMS44MjcwOCA0LjM2Njg2IDQuMzY2ODkgMS44MjcwNCA3LjQ5OTkxIDEuODI3MDRDMTAuNjMyOSAxLjgyNzA0IDEzLjE3MjcgNC4zNjY4NiAxMy4xNzI3IDcuNDk5ODhDMTMuMTcyNyAxMC42MzI5IDEwLjYzMjkgMTMuMTcyNyA3LjQ5OTkxIDEzLjE3MjdDNC4zNjY4OSAxMy4xNzI3IDEuODI3MDggMTAuNjMyOSAxLjgyNzA4IDcuNDk5ODhaTTEwLjE1ODkgNS41Mzc3NEMxMC4zMTc4IDUuMzExOTEgMTAuMjYzNiA1LjAwMDAxIDEwLjAzNzggNC44NDEwOUM5LjgxMTk0IDQuNjgyMTcgOS41MDAwNCA0LjczNjQyIDkuMzQxMTIgNC45NjIyNUw2LjUxOTc3IDguOTcxNTRMNS4zNTY4MSA3Ljc4NzA2QzUuMTYzMzQgNy41OTAwMiA0Ljg0Njc3IDcuNTg3MTEgNC42NDk3MyA3Ljc4MDU4QzQuNDUyNjggNy45NzQwNCA0LjQ0OTc4IDguMjkwNjEgNC42NDMyNSA4LjQ4NzY1TDYuMjI2NTggMTAuMTAwM0M2LjMzMDU0IDEwLjIwNjIgNi40NzYxNyAxMC4yNjA0IDYuNjI0MDcgMTAuMjQ4M0M2Ljc3MTk3IDEwLjIzNjMgNi45MDY4NiAxMC4xNTkxIDYuOTkyMjYgMTAuMDM3N0wxMC4xNTg5IDUuNTM3NzRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxpZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMyAzSDEyVjEySDNMMyAzWk0yIDNDMiAyLjQ0NzcxIDIuNDQ3NzIgMiAzIDJIMTJDMTIuNTUyMyAyIDEzIDIuNDQ3NzIgMTMgM1YxMkMxMyAxMi41NTIzIDEyLjU1MjMgMTMgMTIgMTNIM0MyLjQ0NzcxIDEzIDIgMTIuNTUyMyAyIDEyVjNaTTEwLjM0OTggNS41MTEwNUMxMC41MDYgNS4yODMzNyAxMC40NDgxIDQuOTcyMTIgMTAuMjIwNCA0LjgxNTg3QzkuOTkyNzUgNC42NTk2MSA5LjY4MTUgNC43MTc1MSA5LjUyNTI1IDQuOTQ1MTlMNi42NDA0OCA5LjE0ODU3TDUuMTk3MzMgNy40MDg4OUM1LjAyMTAyIDcuMTk2MzUgNC43MDU4IDcuMTY2OTkgNC40OTMyNyA3LjM0MzI5QzQuMjgwNzMgNy41MTk2IDQuMjUxMzcgNy44MzQ4MiA0LjQyNzY3IDguMDQ3MzVMNi4yOTM0IDEwLjI5NjRDNi4zOTM0OCAxMC40MTcxIDYuNTQ0MzcgMTAuNDgzOCA2LjcwMDk3IDEwLjQ3NjdDNi44NTc1NyAxMC40Njk1IDcuMDAxNzcgMTAuMzg5NCA3LjA5MDQ3IDEwLjI2MDFMMTAuMzQ5OCA1LjUxMTA1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sYWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuMTM1MjMgNi4xNTgwM0MzLjMyNDEgNS45NTY1NyAzLjY0MDUyIDUuOTQ2MzcgMy44NDE5NyA2LjEzNTIzTDcuNSA5LjU2NDY0TDExLjE1OCA2LjEzNTIzQzExLjM1OTUgNS45NDYzNyAxMS42NzU5IDUuOTU2NTcgMTEuODY0OCA2LjE1ODAzQzEyLjA1MzYgNi4zNTk0OSAxMi4wNDM0IDYuNjc1OTEgMTEuODQyIDYuODY0NzdMNy44NDE5NyAxMC42MTQ4QzcuNjQ5NjQgMTAuNzk1MSA3LjM1MDM2IDEwLjc5NTEgNy4xNTgwMyAxMC42MTQ4TDMuMTU4MDMgNi44NjQ3N0MyLjk1NjU3IDYuNjc1OTEgMi45NDYzNyA2LjM1OTQ5IDMuMTM1MjMgNi4xNTgwM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGxlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk04Ljg0MTgyIDMuMTM1MTRDOS4wNDMyNyAzLjMyNDAxIDkuMDUzNDggMy42NDA0MiA4Ljg2NDYyIDMuODQxODhMNS40MzUyMSA3LjQ5OTkxTDguODY0NjIgMTEuMTU3OUM5LjA1MzQ4IDExLjM1OTQgOS4wNDMyNyAxMS42NzU4IDguODQxODIgMTEuODY0N0M4LjY0MDM2IDEyLjA1MzUgOC4zMjM5NCAxMi4wNDMzIDguMTM1MDggMTEuODQxOUw0LjM4NTA4IDcuODQxODhDNC4yMDQ3NyA3LjY0OTU1IDQuMjA0NzcgNy4zNTAyNyA0LjM4NTA4IDcuMTU3OTRMOC4xMzUwOCAzLjE1Nzk0QzguMzIzOTQgMi45NTY0OCA4LjY0MDM2IDIuOTQ2MjggOC44NDE4MiAzLjEzNTE0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sc2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTYuMTU4NCAzLjEzNTA4QzYuMzU5ODUgMi45NDYyMSA2LjY3NjI3IDIuOTU2NDIgNi44NjUxNCAzLjE1Nzg4TDEwLjYxNTEgNy4xNTc4OEMxMC43OTU0IDcuMzUwMiAxMC43OTU0IDcuNjQ5NDkgMTAuNjE1MSA3Ljg0MTgyTDYuODY1MTQgMTEuODQxOEM2LjY3NjI3IDEyLjA0MzMgNi4zNTk4NSAxMi4wNTM1IDYuMTU4NCAxMS44NjQ2QzUuOTU2OTQgMTEuNjc1NyA1Ljk0NjczIDExLjM1OTMgNi4xMzU2IDExLjE1NzlMOS41NjUgNy40OTk4NUw2LjEzNTYgMy44NDE4MkM1Ljk0NjczIDMuNjQwMzYgNS45NTY5NCAzLjMyMzk0IDYuMTU4NCAzLjEzNTA4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sY2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuMTM1MjMgOC44NDE5N0MzLjMyNDEgOS4wNDM0MyAzLjY0MDUyIDkuMDUzNjMgMy44NDE5NyA4Ljg2NDc3TDcuNSA1LjQzNTM2TDExLjE1OCA4Ljg2NDc3QzExLjM1OTUgOS4wNTM2MyAxMS42NzU5IDkuMDQzNDMgMTEuODY0OCA4Ljg0MTk3QzEyLjA1MzYgOC42NDA1MSAxMi4wNDM0IDguMzI0MDkgMTEuODQyIDguMTM1MjNMNy44NDE5NyA0LjM4NTIzQzcuNjQ5NjQgNC4yMDQ5MiA3LjM1MDM2IDQuMjA0OTIgNy4xNTgwMyA0LjM4NTIzTDMuMTU4MDMgOC4xMzUyM0MyLjk1NjU3IDguMzI0MDkgMi45NDYzNyA4LjY0MDUxIDMuMTM1MjMgOC44NDE5N1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHVlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wLjg3NzA3NSA3LjQ5OTkxQzAuODc3MDc1IDMuODQyMjIgMy44NDIyMiAwLjg3NzA3NSA3LjQ5OTkxIDAuODc3MDc1QzExLjE1NzYgMC44NzcwNzUgMTQuMTIyNyAzLjg0MjIyIDE0LjEyMjcgNy40OTk5MUMxNC4xMjI3IDExLjE1NzYgMTEuMTU3NiAxNC4xMjI3IDcuNDk5OTEgMTQuMTIyN0MzLjg0MjIyIDE0LjEyMjcgMC44NzcwNzUgMTEuMTU3NiAwLjg3NzA3NSA3LjQ5OTkxWk03LjQ5OTkxIDEuODI3MDhDNC4zNjY4OSAxLjgyNzA4IDEuODI3MDggNC4zNjY4OSAxLjgyNzA4IDcuNDk5OTFDMS44MjcwOCAxMC42MzI5IDQuMzY2ODkgMTMuMTcyNyA3LjQ5OTkxIDEzLjE3MjdDMTAuNjMyOSAxMy4xNzI3IDEzLjE3MjcgMTAuNjMyOSAxMy4xNzI3IDcuNDk5OTFDMTMuMTcyNyA0LjM2Njg5IDEwLjYzMjkgMS44MjcwOCA3LjQ5OTkxIDEuODI3MDhaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxmZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTk5MSAwLjg3NzA3NUMzLjg0MjIyIDAuODc3MDc1IDAuODc3MDc1IDMuODQyMjIgMC44NzcwNzUgNy40OTk5MUMwLjg3NzA3NSAxMS4xNTc2IDMuODQyMjIgMTQuMTIyNyA3LjQ5OTkxIDE0LjEyMjdDMTEuMTU3NiAxNC4xMjI3IDE0LjEyMjcgMTEuMTU3NiAxNC4xMjI3IDcuNDk5OTFDMTQuMTIyNyAzLjg0MjIyIDExLjE1NzYgMC44NzcwNzUgNy40OTk5MSAwLjg3NzA3NVpNMy44NTc2OCAzLjE1MDU3QzQuODQzMTEgMi4zMjQ0OCA2LjExMzQyIDEuODI3MDggNy40OTk5MSAxLjgyNzA4QzEwLjYzMjkgMS44MjcwOCAxMy4xNzI3IDQuMzY2ODkgMTMuMTcyNyA3LjQ5OTkxQzEzLjE3MjcgOC44ODYzOCAxMi42NzUzIDEwLjE1NjcgMTEuODQ5MiAxMS4xNDIxTDMuODU3NjggMy4xNTA1N1pNMy4xNTA1NyAzLjg1NzY4QzIuMzI0NDggNC44NDMxMSAxLjgyNzA4IDYuMTEzNDIgMS44MjcwOCA3LjQ5OTkxQzEuODI3MDggMTAuNjMyOSA0LjM2Njg5IDEzLjE3MjcgNy40OTk5MSAxMy4xNzI3QzguODg2MzggMTMuMTcyNyAxMC4xNTY3IDEyLjY3NTMgMTEuMTQyMSAxMS44NDkyTDMuMTUwNTcgMy44NTc2OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGRlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01IDJWMUgxMFYySDVaTTQuNzUgMEM0LjMzNTc5IDAgNCAwLjMzNTc4NiA0IDAuNzVWMUgzLjVDMi42NzE1NyAxIDIgMS42NzE1NyAyIDIuNVYxMi41QzIgMTMuMzI4NCAyLjY3MTU3IDE0IDMuNSAxNEgxMS41QzEyLjMyODQgMTQgMTMgMTMuMzI4NCAxMyAxMi41VjIuNUMxMyAxLjY3MTU3IDEyLjMyODQgMSAxMS41IDFIMTFWMC43NUMxMSAwLjMzNTc4NiAxMC42NjQyIDAgMTAuMjUgMEg0Ljc1Wk0xMSAyVjIuMjVDMTEgMi42NjQyMSAxMC42NjQyIDMgMTAuMjUgM0g0Ljc1QzQuMzM1NzkgMyA0IDIuNjY0MjEgNCAyLjI1VjJIMy41QzMuMjIzODYgMiAzIDIuMjIzODYgMyAyLjVWMTIuNUMzIDEyLjc3NjEgMy4yMjM4NiAxMyAzLjUgMTNIMTEuNUMxMS43NzYxIDEzIDEyIDEyLjc3NjEgMTIgMTIuNVYyLjVDMTIgMi4yMjM4NiAxMS43NzYxIDIgMTEuNSAySDExWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUgMlYxSDEwVjJINVpNNC43NSAwQzQuMzM1NzkgMCA0IDAuMzM1Nzg2IDQgMC43NVYxSDMuNUMyLjY3MTU3IDEgMiAxLjY3MTU3IDIgMi41VjEyLjVDMiAxMy4zMjg0IDIuNjcxNTcgMTQgMy41IDE0SDdWMTNIMy41QzMuMjIzODYgMTMgMyAxMi43NzYxIDMgMTIuNVYyLjVDMyAyLjIyMzg2IDMuMjIzODYgMiAzLjUgMkg0VjIuMjVDNCAyLjY2NDIxIDQuMzM1NzkgMyA0Ljc1IDNIMTAuMjVDMTAuNjY0MiAzIDExIDIuNjY0MjEgMTEgMi4yNVYySDExLjVDMTEuNzc2MSAyIDEyIDIuMjIzODYgMTIgMi41VjdIMTNWMi41QzEzIDEuNjcxNTcgMTIuMzI4NCAxIDExLjUgMUgxMVYwLjc1QzExIDAuMzM1Nzg2IDEwLjY2NDIgMCAxMC4yNSAwSDQuNzVaTTkgOC41QzkgOC43NzYxNCA4Ljc3NjE0IDkgOC41IDlDOC4yMjM4NiA5IDggOC43NzYxNCA4IDguNUM4IDguMjIzODYgOC4yMjM4NiA4IDguNSA4QzguNzc2MTQgOCA5IDguMjIzODYgOSA4LjVaTTEwLjUgOUMxMC43NzYxIDkgMTEgOC43NzYxNCAxMSA4LjVDMTEgOC4yMjM4NiAxMC43NzYxIDggMTAuNSA4QzEwLjIyMzkgOCAxMCA4LjIyMzg2IDEwIDguNUMxMCA4Ljc3NjE0IDEwLjIyMzkgOSAxMC41IDlaTTEzIDguNUMxMyA4Ljc3NjE0IDEyLjc3NjEgOSAxMi41IDlDMTIuMjIzOSA5IDEyIDguNzc2MTQgMTIgOC41QzEyIDguMjIzODYgMTIuMjIzOSA4IDEyLjUgOEMxMi43NzYxIDggMTMgOC4yMjM4NiAxMyA4LjVaTTE0LjUgOUMxNC43NzYxIDkgMTUgOC43NzYxNCAxNSA4LjVDMTUgOC4yMjM4NiAxNC43NzYxIDggMTQuNSA4QzE0LjIyMzkgOCAxNCA4LjIyMzg2IDE0IDguNUMxNCA4Ljc3NjE0IDE0LjIyMzkgOSAxNC41IDlaTTE1IDEwLjVDMTUgMTAuNzc2MSAxNC43NzYxIDExIDE0LjUgMTFDMTQuMjIzOSAxMSAxNCAxMC43NzYxIDE0IDEwLjVDMTQgMTAuMjIzOSAxNC4yMjM5IDEwIDE0LjUgMTBDMTQuNzc2MSAxMCAxNSAxMC4yMjM5IDE1IDEwLjVaTTE0LjUgMTNDMTQuNzc2MSAxMyAxNSAxMi43NzYxIDE1IDEyLjVDMTUgMTIuMjIzOSAxNC43NzYxIDEyIDE0LjUgMTJDMTQuMjIzOSAxMiAxNCAxMi4yMjM5IDE0IDEyLjVDMTQgMTIuNzc2MSAxNC4yMjM5IDEzIDE0LjUgMTNaTTE0LjUgMTVDMTQuNzc2MSAxNSAxNSAxNC43NzYxIDE1IDE0LjVDMTUgMTQuMjIzOSAxNC43NzYxIDE0IDE0LjUgMTRDMTQuMjIzOSAxNCAxNCAxNC4yMjM5IDE0IDE0LjVDMTQgMTQuNzc2MSAxNC4yMjM5IDE1IDE0LjUgMTVaTTguNSAxMUM4Ljc3NjE0IDExIDkgMTAuNzc2MSA5IDEwLjVDOSAxMC4yMjM5IDguNzc2MTQgMTAgOC41IDEwQzguMjIzODYgMTAgOCAxMC4yMjM5IDggMTAuNUM4IDEwLjc3NjEgOC4yMjM4NiAxMSA4LjUgMTFaTTkgMTIuNUM5IDEyLjc3NjEgOC43NzYxNCAxMyA4LjUgMTNDOC4yMjM4NiAxMyA4IDEyLjc3NjEgOCAxMi41QzggMTIuMjIzOSA4LjIyMzg2IDEyIDguNSAxMkM4Ljc3NjE0IDEyIDkgMTIuMjIzOSA5IDEyLjVaTTguNSAxNUM4Ljc3NjE0IDE1IDkgMTQuNzc2MSA5IDE0LjVDOSAxNC4yMjM5IDguNzc2MTQgMTQgOC41IDE0QzguMjIzODYgMTQgOCAxNC4yMjM5IDggMTQuNUM4IDE0Ljc3NjEgOC4yMjM4NiAxNSA4LjUgMTVaTTExIDE0LjVDMTEgMTQuNzc2MSAxMC43NzYxIDE1IDEwLjUgMTVDMTAuMjIzOSAxNSAxMCAxNC43NzYxIDEwIDE0LjVDMTAgMTQuMjIzOSAxMC4yMjM5IDE0IDEwLjUgMTRDMTAuNzc2MSAxNCAxMSAxNC4yMjM5IDExIDE0LjVaTTEyLjUgMTVDMTIuNzc2MSAxNSAxMyAxNC43NzYxIDEzIDE0LjVDMTMgMTQuMjIzOSAxMi43NzYxIDE0IDEyLjUgMTRDMTIuMjIzOSAxNCAxMiAxNC4yMjM5IDEyIDE0LjVDMTIgMTQuNzc2MSAxMi4yMjM5IDE1IDEyLjUgMTVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxoZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41MDAwOSAwLjg3NzAxNEMzLjg0MjQxIDAuODc3MDE0IDAuODc3MjU4IDMuODQyMTYgMC44NzcyNTggNy40OTk4NEMwLjg3NzI1OCAxMS4xNTc1IDMuODQyNCAxNC4xMjI3IDcuNTAwMDkgMTQuMTIyN0MxMS4xNTc4IDE0LjEyMjcgMTQuMTIyOSAxMS4xNTc1IDE0LjEyMjkgNy40OTk4NEMxNC4xMjI5IDMuODQyMTYgMTEuMTU3NyAwLjg3NzAxNCA3LjUwMDA5IDAuODc3MDE0Wk0xLjgyNzI2IDcuNDk5ODRDMS44MjcyNiA0LjM2NjgzIDQuMzY3MDggMS44MjcwMSA3LjUwMDA5IDEuODI3MDFDMTAuNjMzMSAxLjgyNzAxIDEzLjE3MjkgNC4zNjY4MyAxMy4xNzI5IDcuNDk5ODRDMTMuMTcyOSAxMC42MzI4IDEwLjYzMzEgMTMuMTcyNyA3LjUwMDA5IDEzLjE3MjdDNC4zNjcwOCAxMy4xNzI3IDEuODI3MjYgMTAuNjMyOCAxLjgyNzI2IDcuNDk5ODRaTTggNC41MDAwMUM4IDQuMjIzODcgNy43NzYxNCA0LjAwMDAxIDcuNSA0LjAwMDAxQzcuMjIzODYgNC4wMDAwMSA3IDQuMjIzODcgNyA0LjUwMDAxVjcuNTAwMDFDNyA3LjYzMjYyIDcuMDUyNjggNy43NTk4IDcuMTQ2NDUgNy44NTM1N0w5LjE0NjQ1IDkuODUzNTdDOS4zNDE3MSAxMC4wNDg4IDkuNjU4MjkgMTAuMDQ4OCA5Ljg1MzU1IDkuODUzNTdDMTAuMDQ4OCA5LjY1ODMxIDEwLjA0ODggOS4zNDE3MiA5Ljg1MzU1IDkuMTQ2NDZMOCA3LjI5MjkxVjQuNTAwMDFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxnZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOS45NjQyNCAyLjY4NTcxQzEwLjA2NjggMi40MjkzMSA5Ljk0MjA5IDIuMTM4MzMgOS42ODU3IDIuMDM1NzdDOS40MjkzIDEuOTMzMjIgOS4xMzgzMiAyLjA1NzkyIDkuMDM1NzYgMi4zMTQzMkw1LjAzNTc2IDEyLjMxNDNDNC45MzMyIDEyLjU3MDcgNS4wNTc5MSAxMi44NjE3IDUuMzE0MyAxMi45NjQyQzUuNTcwNyAxMy4wNjY4IDUuODYxNjggMTIuOTQyMSA1Ljk2NDI0IDEyLjY4NTdMOS45NjQyNCAyLjY4NTcxWk0zLjg1MzU1IDUuMTQ2NDZDNC4wNDg4MiA1LjM0MTcyIDQuMDQ4ODIgNS42NTgzIDMuODUzNTUgNS44NTM1NkwyLjIwNzExIDcuNTAwMDFMMy44NTM1NSA5LjE0NjQ2QzQuMDQ4ODIgOS4zNDE3MiA0LjA0ODgyIDkuNjU4MyAzLjg1MzU1IDkuODUzNTZDMy42NTgyOSAxMC4wNDg4IDMuMzQxNzEgMTAuMDQ4OCAzLjE0NjQ1IDkuODUzNTZMMS4xNDY0NSA3Ljg1MzU2QzAuOTUxMTg0IDcuNjU4MyAwLjk1MTE4NCA3LjM0MTcyIDEuMTQ2NDUgNy4xNDY0NkwzLjE0NjQ1IDUuMTQ2NDZDMy4zNDE3MSA0Ljk1MTIgMy42NTgyOSA0Ljk1MTIgMy44NTM1NSA1LjE0NjQ2Wk0xMS4xNDY0IDUuMTQ2NDZDMTEuMzQxNyA0Ljk1MTIgMTEuNjU4MyA0Ljk1MTIgMTEuODUzNiA1LjE0NjQ2TDEzLjg1MzYgNy4xNDY0NkMxNC4wNDg4IDcuMzQxNzIgMTQuMDQ4OCA3LjY1ODMgMTMuODUzNiA3Ljg1MzU2TDExLjg1MzYgOS44NTM1NkMxMS42NTgzIDEwLjA0ODggMTEuMzQxNyAxMC4wNDg4IDExLjE0NjQgOS44NTM1NkMxMC45NTEyIDkuNjU4MyAxMC45NTEyIDkuMzQxNzIgMTEuMTQ2NCA5LjE0NjQ2TDEyLjc5MjkgNy41MDAwMUwxMS4xNDY0IDUuODUzNTZDMTAuOTUxMiA1LjY1ODMgMTAuOTUxMiA1LjM0MTcyIDExLjE0NjQgNS4xNDY0NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHZlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjcxMTQ0IDAuNzk2OTAyQzcuNTc3NDEgMC43MzQzNTcgNy40MjI1NyAwLjczNDM1NyA3LjI4ODU1IDAuNzk2OTAyTDEuMjg4NTUgMy41OTY5QzEuMTEyNTEgMy42NzkwNSAwLjk5OTk5MyAzLjg1NTczIDAuOTk5OTkzIDQuMDQ5OTlWMTAuOTVDMC45OTk5OTMgMTEuMTQ0MyAxLjExMjUxIDExLjMyMDkgMS4yODg1NSAxMS40MDMxTDcuMjg4NTUgMTQuMjAzMUM3LjQyMjU3IDE0LjI2NTYgNy41Nzc0MSAxNC4yNjU2IDcuNzExNDQgMTQuMjAzMUwxMy43MTE0IDExLjQwMzFDMTMuODg3NSAxMS4zMjA5IDE0IDExLjE0NDMgMTQgMTAuOTVWNC4wNDk5OUMxNCAzLjg1NTczIDEzLjg4NzUgMy42NzkwNSAxMy43MTE0IDMuNTk2OUw3LjcxMTQ0IDAuNzk2OTAyWk03LjQ5OTk5IDMuMTU2NzRMNS45ODAzOSAyLjUxMDkxTDcuNDk5OTkgMS44MDE3Nkw5LjAxOTU5IDIuNTEwOTFMNy40OTk5OSAzLjE1Njc0Wk03LjY5NTU2IDQuMTYwMThMMTAuMjM4MiAzLjA3OTU4TDEyLjI3MTkgNC4wMjg2NUw3LjQ5OTk5IDYuMDU2NzFMMi43MjgwOCA0LjAyODY1TDQuNzYxODEgMy4wNzk1OEw3LjMwNDQyIDQuMTYwMThDNy40MjkzOSA0LjIxMzMgNy41NzA1OSA0LjIxMzMgNy42OTU1NiA0LjE2MDE4Wk03Ljk5OTk5IDYuOTMwNzhMMTMgNC44MDU3OFY3LjkyOTY2TDExLjA4MjEgOC44MTE5QzEwLjcyNzMgOC45NzUwOSAxMC41IDkuMzI5ODggMTAuNSA5LjcyMDM5VjExLjc5ODJMNy45OTk5OSAxMi45NjQ5VjYuOTMwNzhaTTExLjUgMTEuMzMxNkwxMyAxMC42MzE2VjkuMDMwMzlMMTEuNSA5LjcyMDM5VjExLjMzMTZaTTYuOTk5OTkgNi45MzA3OFYxMi45NjQ5TDQuNTAyMzEgMTEuNzk5M1Y5LjcyMDM2QzQuNTAyMzEgOS4zMjk4NSA0LjI3NDk5IDguOTc1MDYgMy45MjAyMiA4LjgxMTg3TDEuOTk5OTkgNy45Mjg1NlY0LjgwNTc4TDYuOTk5OTkgNi45MzA3OFpNMS45OTk5OSAxMC42MzE2TDMuNTAyMzEgMTEuMzMyNkwzLjUwMjMxIDkuNzIwMzZMMS45OTk5OSA5LjAyOTI5VjEwLjYzMTZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxtZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC4wMDAxMiAxLjVDOC4wMDAxMiAxLjIyMzg2IDcuNzc2MjYgMSA3LjUwMDEyIDFDNy4yMjM5OCAxIDcuMDAwMTIgMS4yMjM4NiA3LjAwMDEyIDEuNVYxMy41QzcuMDAwMTIgMTMuNzc2MSA3LjIyMzk4IDE0IDcuNTAwMTIgMTRDNy43NzYyNiAxNCA4LjAwMDEyIDEzLjc3NjEgOC4wMDAxMiAxMy41VjEuNVpNMy4zMTgxMiA1LjgxOEMzLjQ5Mzg2IDUuNjQyMjcgMy40OTM4NiA1LjM1NzM0IDMuMzE4MTIgNS4xODE2MUMzLjE0MjM5IDUuMDA1ODcgMi44NTc0NiA1LjAwNTg3IDIuNjgxNzMgNS4xODE2MUwwLjY4MTcyOSA3LjE4MTYxQzAuNTA1OTkzIDcuMzU3MzQgMC41MDU5OTMgNy42NDIyNyAwLjY4MTcyOSA3LjgxOEwyLjY4MTczIDkuODE4QzIuODU3NDYgOS45OTM3NCAzLjE0MjM5IDkuOTkzNzQgMy4zMTgxMiA5LjgxOEMzLjQ5Mzg2IDkuNjQyMjcgMy40OTM4NiA5LjM1NzM0IDMuMzE4MTIgOS4xODE2MUwyLjA4NjMyIDcuOTQ5OEg1LjUwMDE3QzUuNzQ4NyA3Ljk0OTggNS45NTAxNyA3Ljc0ODMzIDUuOTUwMTcgNy40OTk4QzUuOTUwMTcgNy4yNTEyOCA1Ljc0ODcgNy4wNDk4IDUuNTAwMTcgNy4wNDk4SDIuMDg2MzJMMy4zMTgxMiA1LjgxOFpNMTIuMzE4MSA1LjE4MTYxQzEyLjE0MjQgNS4wMDU4NyAxMS44NTc1IDUuMDA1ODcgMTEuNjgxNyA1LjE4MTYxQzExLjUwNiA1LjM1NzM0IDExLjUwNiA1LjY0MjI3IDExLjY4MTcgNS44MThMMTIuOTEzNSA3LjA0OThIOS41MDAxN0M5LjI1MTY0IDcuMDQ5OCA5LjA1MDE3IDcuMjUxMjggOS4wNTAxNyA3LjQ5OThDOS4wNTAxNyA3Ljc0ODMzIDkuMjUxNjQgNy45NDk4IDkuNTAwMTcgNy45NDk4SDEyLjkxMzVMMTEuNjgxNyA5LjE4MTYxQzExLjUwNiA5LjM1NzM0IDExLjUwNiA5LjY0MjI3IDExLjY4MTcgOS44MThDMTEuODU3NSA5Ljk5Mzc0IDEyLjE0MjQgOS45OTM3NCAxMi4zMTgxIDkuODE4TDE0LjMxODEgNy44MThDMTQuNDkzOSA3LjY0MjI3IDE0LjQ5MzkgNy4zNTczNCAxNC4zMTgxIDcuMTgxNjFMMTIuMzE4MSA1LjE4MTYxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQ2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuMTQ5OTggMTRWMUgwLjg0OTk3NlYxNEgyLjE0OTk4Wk02LjE0OTk4IDE0VjFINC44NDk5OFYxNEg2LjE0OTk4Wk0xMC4xNSAxVjE0SDguODQ5OThWMUgxMC4xNVpNMTQuMTUgMTRWMUgxMi44NVYxNEgxNC4xNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHllPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk05Ljk0OTY5IDcuNDk5ODlDOS45NDk2OSA4Ljg1Mjg4IDguODUyODggOS45NDk2OSA3LjQ5OTg5IDkuOTQ5NjlDNi4xNDY5MSA5Ljk0OTY5IDUuMDUwMSA4Ljg1Mjg4IDUuMDUwMSA3LjQ5OTg5QzUuMDUwMSA2LjE0NjkxIDYuMTQ2OTEgNS4wNTAxIDcuNDk5ODkgNS4wNTAxQzguODUyODggNS4wNTAxIDkuOTQ5NjkgNi4xNDY5MSA5Ljk0OTY5IDcuNDk5ODlaTTEwLjg2MzIgOEMxMC42MjEzIDkuNjQwNTUgOS4yMDc2NCAxMC44OTk3IDcuNDk5ODkgMTAuODk5N0M1Ljc5MjE0IDEwLjg5OTcgNC4zNzg0NyA5LjY0MDU1IDQuMTM2NjIgOEgwLjVDMC4yMjM4NTggOCAwIDcuNzc2MTQgMCA3LjVDMCA3LjIyMzg2IDAuMjIzODU4IDcgMC41IDdINC4xMzY1OUM0LjM3ODM1IDUuMzU5MzUgNS43OTIwNiA0LjEwMDEgNy40OTk4OSA0LjEwMDFDOS4yMDc3MiA0LjEwMDEgMTAuNjIxNCA1LjM1OTM1IDEwLjg2MzIgN0gxNC41QzE0Ljc3NjEgNyAxNSA3LjIyMzg2IDE1IDcuNUMxNSA3Ljc3NjE0IDE0Ljc3NjEgOCAxNC41IDhIMTAuODYzMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHdlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjY3MTI5IDMuMTQ2MzRDNC40NzYwMyAzLjM0MTYxIDQuNDc2MDMgMy42NTgxOSA0LjY3MTI5IDMuODUzNDVMNy4xNDYxNiA2LjMyODMzQzcuMzQxNDIgNi41MjM1OSA3LjY1ODAxIDYuNTIzNTkgNy44NTMyNyA2LjMyODMzTDEwLjMyODEgMy44NTM0NUMxMC41MjM0IDMuNjU4MTkgMTAuNTIzNCAzLjM0MTYxIDEwLjMyODEgMy4xNDYzNEw3Ljg1MzI3IDAuNjcxNDcxQzcuNjU4MDEgMC40NzYyMDkgNy4zNDE0MiAwLjQ3NjIwOSA3LjE0NjE2IDAuNjcxNDcxTDQuNjcxMjkgMy4xNDYzNFpNNy40OTk3MSA1LjI2NzY2TDUuNzMxOTUgMy40OTk5TDcuNDk5NzEgMS43MzIxM0w5LjI2NzQ4IDMuNDk5OUw3LjQ5OTcxIDUuMjY3NjZaTTguNjcxMjkgNy4xNDYzNEM4LjQ3NjAzIDcuMzQxNjEgOC40NzYwMyA3LjY1ODE5IDguNjcxMjkgNy44NTM0NUwxMS4xNDYyIDEwLjMyODNDMTEuMzQxNCAxMC41MjM2IDExLjY1OCAxMC41MjM2IDExLjg1MzMgMTAuMzI4M0wxNC4zMjgxIDcuODUzNDVDMTQuNTIzNCA3LjY1ODE5IDE0LjUyMzQgNy4zNDE2MSAxNC4zMjgxIDcuMTQ2MzRMMTEuODUzMyA0LjY3MTQ3QzExLjY1OCA0LjQ3NjIxIDExLjM0MTQgNC40NzYyMSAxMS4xNDYyIDQuNjcxNDdMOC42NzEyOSA3LjE0NjM0Wk0xMS40OTk3IDkuMjY3NjZMOS43MzE5NSA3LjQ5OTlMMTEuNDk5NyA1LjczMjEzTDEzLjI2NzUgNy40OTk5TDExLjQ5OTcgOS4yNjc2NlpNNC42NzEyOSAxMS44NTM1QzQuNDc2MDMgMTEuNjU4MiA0LjQ3NjAzIDExLjM0MTYgNC42NzEyOSAxMS4xNDYzTDcuMTQ2MTYgOC42NzE0N0M3LjM0MTQyIDguNDc2MjEgNy42NTgwMSA4LjQ3NjIxIDcuODUzMjcgOC42NzE0N0wxMC4zMjgxIDExLjE0NjNDMTAuNTIzNCAxMS4zNDE2IDEwLjUyMzQgMTEuNjU4MiAxMC4zMjgxIDExLjg1MzVMNy44NTMyNyAxNC4zMjgzQzcuNjU4MDEgMTQuNTIzNiA3LjM0MTQyIDE0LjUyMzYgNy4xNDYxNiAxNC4zMjgzTDQuNjcxMjkgMTEuODUzNVpNNS43MzE5NSAxMS40OTk5TDcuNDk5NzEgMTMuMjY3N0w5LjI2NzQ4IDExLjQ5OTlMNy40OTk3MSA5LjczMjEzTDUuNzMxOTUgMTEuNDk5OVpNMC42NzEyODggNy4xNDY0OUMwLjQ3NjAyNiA3LjM0MTc1IDAuNDc2MDI2IDcuNjU4MzQgMC42NzEyODggNy44NTM2TDMuMTQ2MTYgMTAuMzI4NUMzLjM0MTQyIDEwLjUyMzcgMy42NTgwMSAxMC41MjM3IDMuODUzMjcgMTAuMzI4NUw2LjMyODE0IDcuODUzNkM2LjUyMzQgNy42NTgzNCA2LjUyMzQgNy4zNDE3NSA2LjMyODE0IDcuMTQ2NDlMMy44NTMyNyA0LjY3MTYyQzMuNjU4MDEgNC40NzYzNiAzLjM0MTQyIDQuNDc2MzYgMy4xNDYxNiA0LjY3MTYyTDAuNjcxMjg4IDcuMTQ2NDlaTTMuNDk5NzIgOS4yNjc4MUwxLjczMTk1IDcuNTAwMDVMMy40OTk3MiA1LjczMjI4TDUuMjY3NDggNy41MDAwNUwzLjQ5OTcyIDkuMjY3ODFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxiZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy44NzkzNSAxSDMuOUgxMS4xSDExLjEyMDdDMTEuNTIzMSAwLjk5OTk5NCAxMS44NTUzIDAuOTk5OTg5IDEyLjEyNTkgMS4wMjIxQzEyLjQwNyAxLjA0NTA2IDEyLjY2NTMgMS4wOTQzNCAxMi45MDggMS4yMTc5OUMxMy4yODQzIDEuNDA5NzMgMTMuNTkwMyAxLjcxNTcgMTMuNzgyIDIuMDkyMDJDMTMuOTA1NyAyLjMzNDY5IDEzLjk1NDkgMi41OTMwNCAxMy45Nzc5IDIuODc0MDlDMTQgMy4xNDQ2OCAxNCAzLjQ3Njg2IDE0IDMuODc5MzRWMy45VjExLjFWMTEuMTIwN0MxNCAxMS41MjMxIDE0IDExLjg1NTMgMTMuOTc3OSAxMi4xMjU5QzEzLjk1NDkgMTIuNDA3IDEzLjkwNTcgMTIuNjY1MyAxMy43ODIgMTIuOTA4QzEzLjU5MDMgMTMuMjg0MyAxMy4yODQzIDEzLjU5MDMgMTIuOTA4IDEzLjc4MkMxMi42NjUzIDEzLjkwNTcgMTIuNDA3IDEzLjk1NDkgMTIuMTI1OSAxMy45Nzc5QzExLjg1NTMgMTQgMTEuNTIzMSAxNCAxMS4xMjA3IDE0SDExLjFIMy45SDMuODc5MzRDMy40NzY4NiAxNCAzLjE0NDY4IDE0IDIuODc0MDkgMTMuOTc3OUMyLjU5MzA0IDEzLjk1NDkgMi4zMzQ2OSAxMy45MDU3IDIuMDkyMDIgMTMuNzgyQzEuNzE1NyAxMy41OTAzIDEuNDA5NzMgMTMuMjg0MyAxLjIxNzk5IDEyLjkwOEMxLjA5NDM0IDEyLjY2NTMgMS4wNDUwNiAxMi40MDcgMS4wMjIxIDEyLjEyNTlDMC45OTk5ODkgMTEuODU1MyAwLjk5OTk5NCAxMS41MjMxIDEgMTEuMTIwN1YxMS4xMjA3VjExLjFWMy45VjMuODc5MzVWMy44NzkzNEMwLjk5OTk5NCAzLjQ3Njg2IDAuOTk5OTg5IDMuMTQ0NjggMS4wMjIxIDIuODc0MDlDMS4wNDUwNiAyLjU5MzA0IDEuMDk0MzQgMi4zMzQ2OSAxLjIxNzk5IDIuMDkyMDJDMS40MDk3MyAxLjcxNTcgMS43MTU3IDEuNDA5NzMgMi4wOTIwMiAxLjIxNzk5QzIuMzM0NjkgMS4wOTQzNCAyLjU5MzA0IDEuMDQ1MDYgMi44NzQwOSAxLjAyMjFDMy4xNDQ2OSAwLjk5OTk4OSAzLjQ3Njg3IDAuOTk5OTk0IDMuODc5MzUgMVpNMi45NTU1MiAyLjAxODc4QzIuNzM2MzEgMi4wMzY2OSAyLjYyNDIxIDIuMDY5MTUgMi41NDYwMSAyLjEwODk5QzIuMzU3ODUgMi4yMDQ4NyAyLjIwNDg3IDIuMzU3ODUgMi4xMDg5OSAyLjU0NjAxQzIuMDY5MTUgMi42MjQyMSAyLjAzNjY5IDIuNzM2MzEgMi4wMTg3OCAyLjk1NTUyQzIuMDAwMzkgMy4xODA1NiAyIDMuNDcxNzEgMiAzLjlWN0g3VjJIMy45QzMuNDcxNzEgMiAzLjE4MDU2IDIuMDAwMzkgMi45NTU1MiAyLjAxODc4Wk03IDhIMlYxMS4xQzIgMTEuNTI4MyAyLjAwMDM5IDExLjgxOTQgMi4wMTg3OCAxMi4wNDQ1QzIuMDM2NjkgMTIuMjYzNyAyLjA2OTE1IDEyLjM3NTggMi4xMDg5OSAxMi40NTRDMi4yMDQ4NyAxMi42NDIyIDIuMzU3ODUgMTIuNzk1MSAyLjU0NjAxIDEyLjg5MUMyLjYyNDIxIDEyLjkzMDkgMi43MzYzMSAxMi45NjMzIDIuOTU1NTIgMTIuOTgxMkMzLjE4MDU2IDEyLjk5OTYgMy40NzE3MSAxMyAzLjkgMTNIN1Y4Wk04IDhIMTNWMTEuMUMxMyAxMS41MjgzIDEyLjk5OTYgMTEuODE5NCAxMi45ODEyIDEyLjA0NDVDMTIuOTYzMyAxMi4yNjM3IDEyLjkzMDkgMTIuMzc1OCAxMi44OTEgMTIuNDU0QzEyLjc5NTEgMTIuNjQyMiAxMi42NDIyIDEyLjc5NTEgMTIuNDU0IDEyLjg5MUMxMi4zNzU4IDEyLjkzMDkgMTIuMjYzNyAxMi45NjMzIDEyLjA0NDUgMTIuOTgxMkMxMS44MTk0IDEyLjk5OTYgMTEuNTI4MyAxMyAxMS4xIDEzSDhWOFpNMTMgN0g4VjJIMTEuMUMxMS41MjgzIDIgMTEuODE5NCAyLjAwMDM5IDEyLjA0NDUgMi4wMTg3OEMxMi4yNjM3IDIuMDM2NjkgMTIuMzc1OCAyLjA2OTE1IDEyLjQ1NCAyLjEwODk5QzEyLjY0MjIgMi4yMDQ4NyAxMi43OTUxIDIuMzU3ODUgMTIuODkxIDIuNTQ2MDFDMTIuOTMwOSAyLjYyNDIxIDEyLjk2MzMgMi43MzYzMSAxMi45ODEyIDIuOTU1NTJDMTIuOTk5NiAzLjE4MDU2IDEzIDMuNDcxNzEgMTMgMy45VjdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx4ZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy44NTM2NyAxLjQ4OTU2QzcuNjU4NDEgMS4yOTQyOSA3LjM0MTgyIDEuMjk0MjkgNy4xNDY1NiAxLjQ4OTU2TDEuNDg5NzEgNy4xNDY0MUMxLjI5NDQ1IDcuMzQxNjcgMS4yOTQ0NSA3LjY1ODI1IDEuNDg5NzEgNy44NTM1Mkw3LjE0NjU2IDEzLjUxMDRDNy4zNDE4MiAxMy43MDU2IDcuNjU4NDEgMTMuNzA1NiA3Ljg1MzY3IDEzLjUxMDRMMTMuNTEwNSA3Ljg1MzUyQzEzLjcwNTggNy42NTgyNSAxMy43MDU4IDcuMzQxNjcgMTMuNTEwNSA3LjE0NjQxTDcuODUzNjcgMS40ODk1NlpNNy41IDIuNTUwMzNMMi41NTAzNyA3LjQ5OTk2TDcuNSAxMi40NDk2VjIuNTUwMzNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxfZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy4xNDY1IDEuNDg5NTlDNy4zNDE3NiAxLjI5NDMyIDcuNjU4MzUgMS4yOTQzMiA3Ljg1MzYxIDEuNDg5NTlMMTMuNTEwNSA3LjE0NjQ0QzEzLjcwNTcgNy4zNDE3IDEzLjcwNTcgNy42NTgyOSAxMy41MTA1IDcuODUzNTVMNy44NTM2MSAxMy41MTA0QzcuNjU4MzUgMTMuNzA1NyA3LjM0MTc2IDEzLjcwNTcgNy4xNDY1IDEzLjUxMDRMMS40ODk2NSA3Ljg1MzU1QzEuMjk0MzkgNy42NTgyOSAxLjI5NDM5IDcuMzQxNyAxLjQ4OTY1IDcuMTQ2NDRMNy4xNDY1IDEuNDg5NTlaTTcuNTAwMDUgMi41NTAyNUwyLjU1MDMxIDcuNDk5OTlMNy41MDAwNSAxMi40NDk3TDEyLjQ0OTggNy40OTk5OUw3LjUwMDA1IDIuNTUwMjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxPZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy44NTM2MSAxLjQ4OTU5QzcuNjU4MzUgMS4yOTQzMiA3LjM0MTc2IDEuMjk0MzIgNy4xNDY1IDEuNDg5NTlMMS40ODk2NSA3LjE0NjQ0QzEuMjk0MzkgNy4zNDE3IDEuMjk0MzkgNy42NTgyOSAxLjQ4OTY1IDcuODUzNTVMMy45NjQ1IDEwLjMyODRMMS42NDY0NCAxMi42NDY0QzEuNDUxMTggMTIuODQxNyAxLjQ1MTE4IDEzLjE1ODMgMS42NDY0NCAxMy4zNTM2QzEuODQxNzEgMTMuNTQ4OCAyLjE1ODI5IDEzLjU0ODggMi4zNTM1NSAxMy4zNTM2TDQuNjcxNiAxMS4wMzU1TDcuMTQ2NSAxMy41MTA0QzcuMzQxNzYgMTMuNzA1NyA3LjY1ODM1IDEzLjcwNTcgNy44NTM2MSAxMy41MTA0TDEzLjUxMDUgNy44NTM1NUMxMy43MDU3IDcuNjU4MjkgMTMuNzA1NyA3LjM0MTcgMTMuNTEwNSA3LjE0NjQ0TDExLjAzNTYgNC42NzE1NEwxMy4zNTM1IDIuMzUzNTVDMTMuNTQ4OCAyLjE1ODI5IDEzLjU0ODggMS44NDE3MSAxMy4zNTM1IDEuNjQ2NDVDMTMuMTU4MyAxLjQ1MTE4IDEyLjg0MTcgMS40NTExOCAxMi42NDY0IDEuNjQ2NDVMMTAuMzI4NSAzLjk2NDQzTDcuODUzNjEgMS40ODk1OVpNOS42MjEzNSA0LjY3MTU0TDcuNTAwMDUgMi41NTAyNUwyLjU1MDMxIDcuNDk5OTlMNC42NzE2IDkuNjIxMjlMOS42MjEzNSA0LjY3MTU0Wk01LjM3ODcxIDEwLjMyODRMNy41MDAwNSAxMi40NDk3TDEyLjQ0OTggNy40OTk5OUwxMC4zMjg1IDUuMzc4NjVMNS4zNzg3MSAxMC4zMjg0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEyLjgwMzQgNy4xNDY0NEMxMi45OTg2IDYuOTUxMTggMTMuMzE1MiA2Ljk1MTE4IDEzLjUxMDUgNy4xNDY0NEMxMy43MDU3IDcuMzQxNyAxMy43MDU3IDcuNjU4MjkgMTMuNTEwNSA3Ljg1MzU1QzEzLjMxNTIgOC4wNDg4MSAxMi45OTg2IDguMDQ4ODEgMTIuODAzNCA3Ljg1MzU1QzEyLjYwODEgNy42NTgyOCAxMi42MDgxIDcuMzQxNyAxMi44MDM0IDcuMTQ2NDRaTTEyLjA5NjIgOC41NjA2NUMxMi4yOTE1IDguNzU1OTIgMTIuMjkxNSA5LjA3MjUgMTIuMDk2MiA5LjI2Nzc2QzExLjkwMSA5LjQ2MzAyIDExLjU4NDQgOS40NjMwMiAxMS4zODkxIDkuMjY3NzZDMTEuMTkzOSA5LjA3MjUgMTEuMTkzOSA4Ljc1NTkyIDExLjM4OTEgOC41NjA2NUMxMS41ODQ0IDguMzY1MzkgMTEuOTAxIDguMzY1MzkgMTIuMDk2MiA4LjU2MDY1Wk0xMC42ODIgOS45NzQ4N0MxMC44NzczIDEwLjE3MDEgMTAuODc3MyAxMC40ODY3IDEwLjY4MiAxMC42ODJDMTAuNDg2OCAxMC44NzcyIDEwLjE3MDIgMTAuODc3MiA5Ljk3NDkzIDEwLjY4MkM5Ljc3OTY3IDEwLjQ4NjcgOS43Nzk2NyAxMC4xNzAxIDkuOTc0OTMgOS45NzQ4N0MxMC4xNzAyIDkuNzc5NiAxMC40ODY4IDkuNzc5NiAxMC42ODIgOS45NzQ4N1pNOS4yNjc4MiAxMS4zODkxQzkuNDYzMDggMTEuNTg0MyA5LjQ2MzA4IDExLjkwMDkgOS4yNjc4MiAxMi4wOTYyQzkuMDcyNTYgMTIuMjkxNSA4Ljc1NTk4IDEyLjI5MTUgOC41NjA3MSAxMi4wOTYyQzguMzY1NDUgMTEuOTAwOSA4LjM2NTQ1IDExLjU4NDMgOC41NjA3MiAxMS4zODkxQzguNzU1OTggMTEuMTkzOCA5LjA3MjU2IDExLjE5MzggOS4yNjc4MiAxMS4zODkxWk03LjE0NjUgMTMuNTEwNEM2Ljk1MTI0IDEzLjMxNTEgNi45NTEyNCAxMi45OTg2IDcuMTQ2NSAxMi44MDMzQzcuMTcwOTEgMTIuNzc4OSA3LjE5NzIxIDEyLjc1NzUgNy4yMjQ5NCAxMi43MzkyQzcuNDE5MDEgMTIuNjExMSA3LjY4Mjc1IDEyLjYzMjQgNy44NTM2MSAxMi44MDMzQzguMDQ4ODcgMTIuOTk4NiA4LjA0ODg3IDEzLjMxNTEgNy44NTM2MSAxMy41MTA0QzcuNjU4MzUgMTMuNzA1NyA3LjM0MTc2IDEzLjcwNTcgNy4xNDY1IDEzLjUxMDRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjkwMzg2IDguNTYwNjVDMi43MDg2IDguNzU1OTIgMi43MDg2IDkuMDcyNSAyLjkwMzg2IDkuMjY3NzYgMy4wOTkxMiA5LjQ2MzAyIDMuNDE1NzEgOS40NjMwMiAzLjYxMDk3IDkuMjY3NzYgMy44MDYyMyA5LjA3MjUgMy44MDYyMyA4Ljc1NTkyIDMuNjEwOTcgOC41NjA2NSAzLjQxNTcxIDguMzY1MzkgMy4wOTkxMiA4LjM2NTM5IDIuOTAzODYgOC41NjA2NXpNNC4zMTgwNyA5Ljk3NDg3QzQuMTIyODEgMTAuMTcwMSA0LjEyMjgxIDEwLjQ4NjcgNC4zMTgwNyAxMC42ODIgNC41MTMzNCAxMC44NzcyIDQuODI5OTIgMTAuODc3MiA1LjAyNTE4IDEwLjY4MiA1LjIyMDQ0IDEwLjQ4NjcgNS4yMjA0NCAxMC4xNzAxIDUuMDI1MTggOS45NzQ4NyA0LjgyOTkyIDkuNzc5NiA0LjUxMzM0IDkuNzc5NiA0LjMxODA3IDkuOTc0ODd6TTUuNzMyMjkgMTEuMzg5MUM1LjUzNzAzIDExLjU4NDMgNS41MzcwMyAxMS45MDA5IDUuNzMyMjkgMTIuMDk2MiA1LjkyNzU1IDEyLjI5MTQgNi4yNDQxMyAxMi4yOTE1IDYuNDM5MzkgMTIuMDk2MiA2LjYzNDY2IDExLjkwMDkgNi42MzQ2NiAxMS41ODQzIDYuNDM5MzkgMTEuMzg5MSA2LjI0NDEzIDExLjE5MzggNS45Mjc1NSAxMS4xOTM4IDUuNzMyMjkgMTEuMzg5MXpNMi4xOTY3NSA3Ljg1MzU1QzIuMzY3NjEgNy42ODI2OSAyLjM4ODk3IDcuNDE4OTUgMi4yNjA4MiA3LjIyNDg4IDIuMDkwNDYgNi45NjY4NCAxLjcxMDYzIDYuOTI1NDYgMS40ODk2NSA3LjE0NjQ0IDEuMjk0MzkgNy4zNDE3IDEuMjk0MzkgNy42NTgyOSAxLjQ4OTY1IDcuODUzNTUgMS42ODQ5MSA4LjA0ODgxIDIuMDAxNDkgOC4wNDg4MSAyLjE5Njc1IDcuODUzNTV6TTMuNjEwOTcgNS43MzIyM0MzLjQxNTcxIDUuNTM2OTYgMy4wOTkxMiA1LjUzNjk2IDIuOTAzODYgNS43MzIyMyAyLjcwODYgNS45Mjc0OSAyLjcwODYgNi4yNDQwNyAyLjkwMzg2IDYuNDM5MzMgMy4wOTkxMiA2LjYzNDYgMy40MTU3MSA2LjYzNDYgMy42MTA5NyA2LjQzOTMzIDMuODA2MjMgNi4yNDQwNyAzLjgwNjIzIDUuOTI3NDkgMy42MTA5NyA1LjczMjIzek01LjAyNTE4IDQuMzE4MDFDNC44Mjk5MiA0LjEyMjc1IDQuNTEzMzQgNC4xMjI3NSA0LjMxODA3IDQuMzE4MDEgNC4xMjI4MSA0LjUxMzI4IDQuMTIyODEgNC44Mjk4NiA0LjMxODA3IDUuMDI1MTIgNC41MTMzNCA1LjIyMDM4IDQuODI5OTIgNS4yMjAzOCA1LjAyNTE4IDUuMDI1MTIgNS4yMjA0NCA0LjgyOTg2IDUuMjIwNDQgNC41MTMyOCA1LjAyNTE4IDQuMzE4MDF6TTYuNDM5MzkgMi45MDM4QzYuMjQ0MTMgMi43MDg1NCA1LjkyNzU1IDIuNzA4NTQgNS43MzIyOSAyLjkwMzggNS41MzcwMyAzLjA5OTA2IDUuNTM3MDMgMy40MTU2NCA1LjczMjI5IDMuNjEwOTEgNS45Mjc1NSAzLjgwNjE3IDYuMjQ0MTMgMy44MDYxNyA2LjQzOTM5IDMuNjEwOTEgNi42MzQ2NiAzLjQxNTY0IDYuNjM0NjYgMy4wOTkwNiA2LjQzOTM5IDIuOTAzOHpNNy44NTM2MSAxLjQ4OTU5QzcuNjU4MzUgMS4yOTQzMiA3LjM0MTc2IDEuMjk0MzIgNy4xNDY1IDEuNDg5NTkgNi45NTEyNCAxLjY4NDg1IDYuOTUxMjQgMi4wMDE0MyA3LjE0NjUgMi4xOTY2OSA3LjM0MTc2IDIuMzkxOTYgNy42NTgzNSAyLjM5MTk2IDcuODUzNjEgMi4xOTY2OSA4LjA0ODg3IDIuMDAxNDMgOC4wNDg4NyAxLjY4NDg1IDcuODUzNjEgMS40ODk1OXpNOS4yNjc4MiAyLjkwMzhDOS4wNzI1NiAyLjcwODU0IDguNzU1OTggMi43MDg1NCA4LjU2MDcxIDIuOTAzOCA4LjM2NTQ1IDMuMDk5MDYgOC4zNjU0NSAzLjQxNTY0IDguNTYwNzEgMy42MTA5MSA4Ljc1NTk4IDMuODA2MTcgOS4wNzI1NiAzLjgwNjE3IDkuMjY3ODIgMy42MTA5MSA5LjQ2MzA4IDMuNDE1NjQgOS40NjMwOCAzLjA5OTA2IDkuMjY3ODIgMi45MDM4ek0xMC42ODIgNC4zMTgwMUMxMC40ODY4IDQuMTIyNzUgMTAuMTcwMiA0LjEyMjc1IDkuOTc0OTMgNC4zMTgwMSA5Ljc3OTY3IDQuNTEzMjggOS43Nzk2NyA0LjgyOTg2IDkuOTc0OTMgNS4wMjUxMiAxMC4xNzAyIDUuMjIwMzggMTAuNDg2OCA1LjIyMDM4IDEwLjY4MiA1LjAyNTEyIDEwLjg3NzMgNC44Mjk4NiAxMC44NzczIDQuNTEzMjggMTAuNjgyIDQuMzE4MDF6TTEyLjA5NjIgNS43MzIyM0MxMS45MDEgNS41MzY5NiAxMS41ODQ0IDUuNTM2OTYgMTEuMzg5MSA1LjczMjIzIDExLjE5MzkgNS45Mjc0OSAxMS4xOTM5IDYuMjQ0MDcgMTEuMzg5MSA2LjQzOTMzIDExLjU4NDQgNi42MzQ2IDExLjkwMSA2LjYzNDYgMTIuMDk2MiA2LjQzOTMzIDEyLjI5MTUgNi4yNDQwNyAxMi4yOTE1IDUuOTI3NDkgMTIuMDk2MiA1LjczMjIzelwiLGZpbGw6bn0pKX0sRWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIgMS41QzIgMS43NzYxNCAxLjc3NjE0IDIgMS41IDJDMS4yMjM4NiAyIDEgMS43NzYxNCAxIDEuNUMxIDEuMjIzODYgMS4yMjM4NiAxIDEuNSAxQzEuNzc2MTQgMSAyIDEuMjIzODYgMiAxLjVaTTUgMTNIMTBWMkw1IDJMNSAxM1pNNCAxM0M0IDEzLjU1MjMgNC40NDc3MiAxNCA1IDE0SDEwQzEwLjU1MjMgMTQgMTEgMTMuNTUyMyAxMSAxM1YyQzExIDEuNDQ3NzIgMTAuNTUyMyAxIDEwIDFINUM0LjQ0NzcyIDEgNCAxLjQ0NzcxIDQgMlYxM1pNMTMuNSAyQzEzLjc3NjEgMiAxNCAxLjc3NjE0IDE0IDEuNUMxNCAxLjIyMzg2IDEzLjc3NjEgMSAxMy41IDFDMTMuMjIzOSAxIDEzIDEuMjIzODYgMTMgMS41QzEzIDEuNzc2MTQgMTMuMjIzOSAyIDEzLjUgMlpNMiAzLjVDMiAzLjc3NjE0IDEuNzc2MTQgNCAxLjUgNEMxLjIyMzg2IDQgMSAzLjc3NjE0IDEgMy41QzEgMy4yMjM4NiAxLjIyMzg2IDMgMS41IDNDMS43NzYxNCAzIDIgMy4yMjM4NiAyIDMuNVpNMTMuNSA0QzEzLjc3NjEgNCAxNCAzLjc3NjE0IDE0IDMuNUMxNCAzLjIyMzg2IDEzLjc3NjEgMyAxMy41IDNDMTMuMjIzOSAzIDEzIDMuMjIzODYgMTMgMy41QzEzIDMuNzc2MTQgMTMuMjIzOSA0IDEzLjUgNFpNMiA1LjVDMiA1Ljc3NjE0IDEuNzc2MTQgNiAxLjUgNkMxLjIyMzg2IDYgMSA1Ljc3NjE0IDEgNS41QzEgNS4yMjM4NiAxLjIyMzg2IDUgMS41IDVDMS43NzYxNCA1IDIgNS4yMjM4NiAyIDUuNVpNMTMuNSA2QzEzLjc3NjEgNiAxNCA1Ljc3NjE0IDE0IDUuNUMxNCA1LjIyMzg2IDEzLjc3NjEgNSAxMy41IDVDMTMuMjIzOSA1IDEzIDUuMjIzODYgMTMgNS41QzEzIDUuNzc2MTQgMTMuMjIzOSA2IDEzLjUgNlpNMiA3LjVDMiA3Ljc3NjE0IDEuNzc2MTQgOCAxLjUgOEMxLjIyMzg2IDggMSA3Ljc3NjE0IDEgNy41QzEgNy4yMjM4NiAxLjIyMzg2IDcgMS41IDdDMS43NzYxNCA3IDIgNy4yMjM4NiAyIDcuNVpNMTMuNSA4QzEzLjc3NjEgOCAxNCA3Ljc3NjE0IDE0IDcuNUMxNCA3LjIyMzg2IDEzLjc3NjEgNyAxMy41IDdDMTMuMjIzOSA3IDEzIDcuMjIzODYgMTMgNy41QzEzIDcuNzc2MTQgMTMuMjIzOSA4IDEzLjUgOFpNMiA5LjVDMiA5Ljc3NjE0IDEuNzc2MTQgMTAgMS41IDEwQzEuMjIzODYgMTAgMSA5Ljc3NjE0IDEgOS41QzEgOS4yMjM4NiAxLjIyMzg2IDkgMS41IDlDMS43NzYxNCA5IDIgOS4yMjM4NiAyIDkuNVpNMTMuNSAxMEMxMy43NzYxIDEwIDE0IDkuNzc2MTQgMTQgOS41QzE0IDkuMjIzODYgMTMuNzc2MSA5IDEzLjUgOUMxMy4yMjM5IDkgMTMgOS4yMjM4NiAxMyA5LjVDMTMgOS43NzYxNCAxMy4yMjM5IDEwIDEzLjUgMTBaTTIgMTEuNUMyIDExLjc3NjEgMS43NzYxNCAxMiAxLjUgMTJDMS4yMjM4NiAxMiAxIDExLjc3NjEgMSAxMS41QzEgMTEuMjIzOSAxLjIyMzg2IDExIDEuNSAxMUMxLjc3NjE0IDExIDIgMTEuMjIzOSAyIDExLjVaTTEzLjUgMTJDMTMuNzc2MSAxMiAxNCAxMS43NzYxIDE0IDExLjVDMTQgMTEuMjIzOSAxMy43NzYxIDExIDEzLjUgMTFDMTMuMjIzOSAxMSAxMyAxMS4yMjM5IDEzIDExLjVDMTMgMTEuNzc2MSAxMy4yMjM5IDEyIDEzLjUgMTJaTTIgMTMuNUMyIDEzLjc3NjEgMS43NzYxNCAxNCAxLjUgMTRDMS4yMjM4NiAxNCAxIDEzLjc3NjEgMSAxMy41QzEgMTMuMjIzOSAxLjIyMzg2IDEzIDEuNSAxM0MxLjc3NjE0IDEzIDIgMTMuMjIzOSAyIDEzLjVaTTEzLjUgMTRDMTMuNzc2MSAxNCAxNCAxMy43NzYxIDE0IDEzLjVDMTQgMTMuMjIzOSAxMy43NzYxIDEzIDEzLjUgMTNDMTMuMjIzOSAxMyAxMyAxMy4yMjM5IDEzIDEzLjVDMTMgMTMuNzc2MSAxMy4yMjM5IDE0IDEzLjUgMTRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxTZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTIuMDY5NyAxLjc2NzQ2QzEyLjQ4MDcgMS4yMTk0NyAxMS40NjA1IDAuNDU0MzExIDExLjA0OTUgMS4wMDIzQzEwLjYzODUgMS41NTAyOCAxMS42NTg4IDIuMzE1NDQgMTIuMDY5NyAxLjc2NzQ2Wk04LjM5MjYzIDEuMDc4MTFDNy4xNTU4NSAwLjk1MDYwMiA1Ljc4MjMgMS4xNjM0OCA0LjU4NDMzIDEuNzA5MzdDMy4zODU1MiAyLjI1NTYzIDIuMzI3MzUgMy4xNTMwOSAxLjc4ODQ0IDQuNDE4MzJDMS4zNzU3NCA1LjM4NzI0IDEuMDE3MTUgNi4yODExMyAxLjAwMDg4IDcuNDQzNTRDMC45ODQ3MjQgOC41OTg0NCAxLjMwNTIyIDkuOTY4OTggMi4xMzE3NCAxMS45MjhDMi42MTE0MiAxMy4wNjQ5IDQuMDM5NjMgMTMuNTQ0NiA1LjEzODk1IDEzLjgwNzlDNi40MDgzNiAxNC4xMTE5IDcuODA4NTcgMTQuMTkxNCA4LjY2NDQgMTQuMDc0MkM5LjM2NTE1IDEzLjk3ODIgMTAuMTQ0OCAxMy44Mjg0IDEwLjc5ODcgMTMuMjk3QzExLjg5NzcgMTIuNDAzOSAxMi45MDA5IDExLjM5NTUgMTMuNDk5NCAxMC4zMzkzQzE0LjEwNCA5LjI3MjIxIDE0LjMyNTYgOC4wOTIwNyAxMy43MjE2IDYuOTUzMjRDMTMuNTYyOCA2LjY1MzczIDEzLjMxNiA2LjU3NzM0IDEzLjA0MTIgNi40OTIzQzEyLjkzNzQgNi40NjAxNiAxMi44Mjk1IDYuNDI2NzggMTIuNzIwOSA2LjM3OTY2QzExLjYyMTEgNS45MDIzNCAxMC45NjQ2IDUuMzQ5NjMgMTAuOTEzNSA1LjAyODc2QzEwLjg2NTYgNC43MjgwOCAxMC45MjIxIDQuNTE0NjMgMTAuOTgxMSA0LjI5MTgxQzExLjAxMjkgNC4xNzE5OSAxMS4wNDUzIDQuMDQ5NDcgMTEuMDYyNiAzLjkwOTIyQzExLjA4MzggMy43MzczNyAxMS4wODE0IDMuMzMzMTkgMTAuNjk5NiAzLjEyNzYxQzEwLjQwNDggMi45Njg4OCAxMC4yMTY0IDIuNjU4NDMgMTAuMDQwNyAyLjM2OTA0QzkuOTk3NDIgMi4yOTc3NSA5Ljk1NDkyIDIuMjI3NzMgOS45MTE4IDIuMTYxNThDOS42MjYzNCAxLjcyMzY3IDkuMjA3NjkgMS4xNjIxMyA4LjM5MjYzIDEuMDc4MTFaTTQuOTk4OTkgMi42MTkzNUMzLjk2NDgzIDMuMDkwNTggMy4xMjU1NCAzLjgzMDk3IDIuNzA4NDYgNC44MTAxOEMyLjI5ODA4IDUuNzczNjggMi4wMTQwNiA2LjUwODczIDIuMDAwNzkgNy40NTc1M0MxLjk4NzQxIDguNDEzODUgMi4yNTA0MyA5LjYzNjggMy4wNTMxIDExLjUzOTNDMy4zOTE4MSAxMi4zNDIxIDQuNjIxNjcgMTIuNjU1NyA1LjM3MTg2IDEyLjgzNTRDNi41NDkzIDEzLjExNzQgNy44MjIgMTMuMTgwMiA4LjUyODY4IDEzLjA4MzRDOS4yMTI3MSAxMi45ODk3IDkuNzQ1NjggMTIuODY0MiAxMC4xNjgxIDEyLjUyMDlDMTEuMjI5IDExLjY1ODcgMTIuMTIxIDEwLjc0MzUgMTIuNjI5MyA5Ljg0NjM1QzEyLjkzNDkgOS4zMDcwOSAxMy41MTQxIDcuNzAyOCAxMi42MjkyIDcuMzg3M0MxMC43NTM5IDYuNzE4NzUgMTAuMjYyIDYuMDY2NjkgOS45OTAxMSA1LjQxMjY4QzkuODA5MTUgNC45Nzc0NCA5LjgyODY4IDQuNTIyODIgOS45NTc0MSA0LjA3ODg1TDkuOTU3NDEgNC4wNzg4NEM5Ljk3NjYyIDQuMDEyNiA5Ljk5NTM4IDMuOTQ3OTEgMTAuMDMzNCAzLjg4ODgyQzkuODE4NTcgMy43MzY3NiA5LjY1MTUgMy41NTE5NSA5LjUxNDY0IDMuMzcxNUM5LjQyODc2IDMuMjU4MjggOS4zNDY5IDMuMTIwOTkgOS4yNjE5NyAyLjk3ODU2QzkuMDE4NjYgMi41NzA1MiA4Ljc1MDE4IDIuMTIwMjcgOC4yOTAwOCAyLjA3MjgzQzcuMjI4ODkgMS45NjM0MyA2LjAzMzk4IDIuMTQ3NzIgNC45OTg5OSAyLjYxOTM1Wk0xMy4yMDgxIDMuNzc0NzFDMTMuNDQxIDMuMjI2NzEgMTIuNDU0NyAyLjYzNjA2IDEyLjA4MjIgMy4xMDE2M0MxMS41ODE3IDMuNzI3MzIgMTIuOTAyOSA0LjQ5MjgxIDEzLjIwODEgMy43NzQ3MVpNMTQuMzY3MiAyLjI2MDMxQzE0Ljk2NjggMi4yNzQ5MyAxNS4xNTUxIDEuMTE2MDMgMTQuNTcxOCAwLjk0OTM3MUMxMy44MDc2IDAuNzMxMDI2IDEzLjU5MTggMi4yNDEzOSAxNC4zNjcyIDIuMjYwMzFaTTE0LjI4NTcgNS4wOTA5OEMxNC44NjQ0IDUuMTAwMDQgMTUuMDQ2MiA0LjM4MjIyIDE0LjQ4MzIgNC4yNzg5OUMxMy43NDU1IDQuMTQzNzUgMTMuNTM3MyA1LjA3OTI3IDE0LjI4NTcgNS4wOTA5OFpNNi45MDc1IDQuMjg2NzJDNi40Njg5OCA0LjY2NzU0IDYuMDUyMiA0LjE1MTg1IDUuOTc5ODMgMy43MzY1QzUuODY4NDggMy4wOTc0NCA2LjMzNjk2IDIuNTY4NTYgNi45NDgyMyAyLjkxMTU2QzcuNDMzNDQgMy4xODM4MiA3LjI2Njc4IDMuOTc0NzEgNi45MDc1IDQuMjg2NzJaTTQuOTQ0NTUgNS44ODE4NEM1LjQwODg1IDUuNDE3NTQgNC41OTU2NyA0LjU3MDEzIDQuMTE0MjUgNS4wNTE1NEMzLjgzMzM4IDUuMzMyNDIgNC4wMDkzNiA1LjY1Mzc2IDQuMjM3NDQgNS44ODE4NEM0LjQzMjcxIDYuMDc3MSA0Ljc0OTI5IDYuMDc3MSA0Ljk0NDU1IDUuODgxODRaTTYuOTc3MTYgNi43MTk4NEM3LjMxMTgxIDcuMzg5MTQgOC40ODgwNCA2Ljc5MTU5IDcuOTk0MTMgNi4xNDc4OEM3Ljg2NTE5IDUuOTc5ODMgNy42ODY1NyA1Ljk0OTQgNy42MjE0NSA1Ljk0MjA3QzcuMjEyMTcgNS44OTYwMSA2Ljc2MzQ5IDYuMjkyNSA2Ljk3NzE2IDYuNzE5ODRaTTYuOTg3OTggOC43MjQ2MUM3LjE0MDY2IDkuMTE4OCA3LjUxMTIyIDkuMzE4NyA3LjkxOTE1IDkuMTYzM0M4LjI3NDM0IDkuMDI3OTkgOC4zMzE4NiA4LjM5Njg5IDguMTcxNzUgOC4wNzQyN0M4LjAyMzMxIDcuNzc1MTQgNy42Mzk1NiA3LjY3NzkzIDcuMzM3NDcgNy43OTQxN0M2Ljk4NTEyIDcuOTI5NzYgNi44NTY3MiA4LjM4NzA4IDYuOTg1NzYgOC43MTg4OUw2Ljk4Nzk4IDguNzI0NjFaTTEwLjM4ODUgOC44NDA4MUMxMC43NTc1IDguNjU2NiAxMS40NjE3IDguODI3NzEgMTEuNDYxNyA5LjMxMTk5QzExLjQ2MTcgOS43MTI4NiAxMC45NTg3IDEwLjIxNjUgMTAuNTYzNCAxMC4yODI2QzEwLjE4MTMgMTAuMzQ2NSA5LjcwNTE1IDkuOTc1ODEgOS43NjY0OCA5LjU3NzE4QzkuODE0NDUgOS4yNjUzOSAxMC4xMjE3IDguOTc0MDEgMTAuMzg4NSA4Ljg0MDgxWk03LjU2NzA0IDEwLjg0MzJDNy4zMzQ2MSAxMC43NTAyIDcuMTQzNTMgMTAuODYwMSA3LjExNDM3IDEwLjg3NjlMNy4xMTI3OSAxMC44Nzc4QzYuOTA3ODIgMTAuOTk0OSA2LjcxMzgzIDExLjI0MzkgNi42NzQ3IDExLjQ4NDJDNi41OTAxOCAxMi4wMDM0IDcuMTMxOTkgMTIuMTIzOSA3LjUyNjYxIDEyLjA5ODdDOC4yMDc0IDEyLjA1NTMgOC4wNjU0NyAxMS4wNDI2IDcuNTY3MDQgMTAuODQzMlpNNC44ODA1IDEwLjg5MzJDNS4wNjc0IDEwLjc3MjMgNS4xNTY1OCAxMC41MzYzIDUuMDgyOTMgMTAuMzE1M0M0LjkzMDQ2IDkuNzk2ODcgNC4zMjQ2IDkuNzEyNTIgMy45NjU2MSAxMC4xMjk3QzMuNzkzMzYgMTAuMzI5OSAzLjgwNzQ5IDEwLjYyNzQgMy45OTIxNCAxMC44MTA1TDMuOTk0OTUgMTAuODE0TDMuOTk3OSAxMC44MTc2QzQuMjIwMjUgMTEuMDk0MiA0LjYzNjI0IDExLjE4NTcgNC44ODA1IDEwLjg5MzJaTTMuMDQ2OTUgNy44MTMxOEMzLjMzMTQ3IDguMDk3NyAzLjYwMDc3IDguMTUwNjcgMy45ODQ0MyA4LjA1ODU5QzQuNjA4MjYgNy45MDg4NyA0LjEzODE0IDYuMjQyOTkgMy4wNDcgNi44NzI5NkMyLjcwOTM5IDcuMDY3ODggMi44NjcxNiA3LjYzMzM5IDMuMDQ2OTUgNy44MTMxOFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGplPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xIDkuNTAwMDZDMSAxMC4zMjg1IDEuNjcxNTcgMTEuMDAwMSAyLjUgMTEuMDAwMUg0TDQgMTAuMDAwMUgyLjVDMi4yMjM4NiAxMC4wMDAxIDIgOS43NzYyIDIgOS41MDAwNkwyIDIuNTAwMDZDMiAyLjIyMzkyIDIuMjIzODYgMi4wMDAwNiAyLjUgMi4wMDAwNkw5LjUgMi4wMDAwNkM5Ljc3NjE0IDIuMDAwMDYgMTAgMi4yMjM5MiAxMCAyLjUwMDA2VjQuMDAwMDJINS41QzQuNjcxNTggNC4wMDAwMiA0IDQuNjcxNTkgNCA1LjUwMDAyVjEyLjVDNCAxMy4zMjg0IDQuNjcxNTggMTQgNS41IDE0SDEyLjVDMTMuMzI4NCAxNCAxNCAxMy4zMjg0IDE0IDEyLjVWNS41MDAwMkMxNCA0LjY3MTU5IDEzLjMyODQgNC4wMDAwMiAxMi41IDQuMDAwMDJIMTFWMi41MDAwNkMxMSAxLjY3MTYzIDEwLjMyODQgMS4wMDAwNiA5LjUgMS4wMDAwNkgyLjVDMS42NzE1NyAxLjAwMDA2IDEgMS42NzE2MyAxIDIuNTAwMDZWOS41MDAwNlpNNSA1LjUwMDAyQzUgNS4yMjM4OCA1LjIyMzg2IDUuMDAwMDIgNS41IDUuMDAwMDJIMTIuNUMxMi43NzYxIDUuMDAwMDIgMTMgNS4yMjM4OCAxMyA1LjUwMDAyVjEyLjVDMTMgMTIuNzc2MiAxMi43NzYxIDEzIDEyLjUgMTNINS41QzUuMjIzODYgMTMgNSAxMi43NzYyIDUgMTIuNVY1LjUwMDAyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTkuODc3MzcgMTJIOS45SDExLjVDMTEuNzc2MSAxMiAxMiAxMS43NzYxIDEyIDExLjVDMTIgMTEuMjIzOSAxMS43NzYxIDExIDExLjUgMTFIOS45QzguNzcxNjQgMTEgNy45NTU0NSAxMC45OTk2IDcuMzEzNTIgMTAuOTQ3MkM2LjY3NzQ0IDEwLjg5NTIgNi4yNTY2MiAxMC43OTQ2IDUuOTExMDMgMTAuNjE4NUM1LjI1MjQ3IDEwLjI4MyA0LjcxNzAzIDkuNzQ3NTMgNC4zODE0OCA5LjA4ODk3QzQuMjA1MzkgOC43NDMzOCA0LjEwNDgxIDguMzIyNTYgNC4wNTI4NCA3LjY4NjQ4QzQuMDAwMzkgNy4wNDQ1NSA0IDYuMjI4MzYgNCA1LjFWMy41QzQgMy4yMjM4NiAzLjc3NjE0IDMgMy41IDNDMy4yMjM4NiAzIDMgMy4yMjM4NiAzIDMuNVY1LjFWNS4xMjI2M0MzIDYuMjIzNTkgMyA3LjA4MDUyIDMuMDU2MTYgNy43Njc5MUMzLjExMzE4IDguNDY1ODQgMy4yMzA1OCA5LjAzMjkgMy40OTA0NyA5LjU0Mjk2QzMuOTIxOSAxMC4zODk3IDQuNjEwMzEgMTEuMDc4MSA1LjQ1NzA0IDExLjUwOTVDNS45NjcxIDExLjc2OTQgNi41MzQxNiAxMS44ODY4IDcuMjMyMDkgMTEuOTQzOEM3LjkxOTQ4IDEyIDguNzc2NDEgMTIgOS44NzczNyAxMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGtlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjEyMjYzIDEySDUuMUgzLjVDMy4yMjM4NiAxMiAzIDExLjc3NjEgMyAxMS41QzMgMTEuMjIzOSAzLjIyMzg2IDExIDMuNSAxMUg1LjFDNi4yMjgzNiAxMSA3LjA0NDU1IDEwLjk5OTYgNy42ODY0OCAxMC45NDcyQzguMzIyNTYgMTAuODk1MiA4Ljc0MzM4IDEwLjc5NDYgOS4wODg5NyAxMC42MTg1QzkuNzQ3NTMgMTAuMjgzIDEwLjI4MyA5Ljc0NzUzIDEwLjYxODUgOS4wODg5N0MxMC43OTQ2IDguNzQzMzggMTAuODk1MiA4LjMyMjU2IDEwLjk0NzIgNy42ODY0OEMxMC45OTk2IDcuMDQ0NTUgMTEgNi4yMjgzNiAxMSA1LjFWMy41QzExIDMuMjIzODYgMTEuMjIzOSAzIDExLjUgM0MxMS43NzYxIDMgMTIgMy4yMjM4NiAxMiAzLjVWNS4xVjUuMTIyNjNDMTIgNi4yMjM1OSAxMiA3LjA4MDUyIDExLjk0MzggNy43Njc5MUMxMS44ODY4IDguNDY1ODQgMTEuNzY5NCA5LjAzMjkgMTEuNTA5NSA5LjU0Mjk2QzExLjA3ODEgMTAuMzg5NyAxMC4zODk3IDExLjA3ODEgOS41NDI5NiAxMS41MDk1QzkuMDMyOSAxMS43Njk0IDguNDY1ODQgMTEuODg2OCA3Ljc2NzkxIDExLjk0MzhDNy4wODA1MiAxMiA2LjIyMzU5IDEyIDUuMTIyNjMgMTJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxSZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOS44NzczNyAzSDkuOUgxMS41QzExLjc3NjEgMyAxMiAzLjIyMzg2IDEyIDMuNUMxMiAzLjc3NjE0IDExLjc3NjEgNCAxMS41IDRIOS45QzguNzcxNjQgNCA3Ljk1NTQ1IDQuMDAwMzkgNy4zMTM1MiA0LjA1Mjg0QzYuNjc3NDQgNC4xMDQ4MSA2LjI1NjYyIDQuMjA1MzkgNS45MTEwMyA0LjM4MTQ4QzUuMjUyNDcgNC43MTcwMyA0LjcxNzAzIDUuMjUyNDcgNC4zODE0OCA1LjkxMTAzQzQuMjA1MzkgNi4yNTY2MiA0LjEwNDgxIDYuNjc3NDQgNC4wNTI4NCA3LjMxMzUyQzQuMDAwMzkgNy45NTU0NSA0IDguNzcxNjQgNCA5LjlWMTEuNUM0IDExLjc3NjEgMy43NzYxNCAxMiAzLjUgMTJDMy4yMjM4NiAxMiAzIDExLjc3NjEgMyAxMS41VjkuOVY5Ljg3NzM3QzMgOC43NzY0MSAzIDcuOTE5NDggMy4wNTYxNiA3LjIzMjA5QzMuMTEzMTggNi41MzQxNiAzLjIzMDU4IDUuOTY3MSAzLjQ5MDQ3IDUuNDU3MDRDMy45MjE5IDQuNjEwMzEgNC42MTAzMSAzLjkyMTkgNS40NTcwNCAzLjQ5MDQ3QzUuOTY3MSAzLjIzMDU4IDYuNTM0MTYgMy4xMTMxOCA3LjIzMjA5IDMuMDU2MTZDNy45MTk0OCAzIDguNzc2NDEgMyA5Ljg3NzM3IDNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxQZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNS4xMjI2MyAzSDUuMUgzLjVDMy4yMjM4NiAzIDMgMy4yMjM4NiAzIDMuNUMzIDMuNzc2MTQgMy4yMjM4NiA0IDMuNSA0SDUuMUM2LjIyODM2IDQgNy4wNDQ1NSA0LjAwMDM5IDcuNjg2NDggNC4wNTI4NEM4LjMyMjU2IDQuMTA0ODEgOC43NDMzOCA0LjIwNTM5IDkuMDg4OTcgNC4zODE0OEM5Ljc0NzUzIDQuNzE3MDMgMTAuMjgzIDUuMjUyNDcgMTAuNjE4NSA1LjkxMTAzQzEwLjc5NDYgNi4yNTY2MiAxMC44OTUyIDYuNjc3NDQgMTAuOTQ3MiA3LjMxMzUyQzEwLjk5OTYgNy45NTU0NSAxMSA4Ljc3MTY0IDExIDkuOVYxMS41QzExIDExLjc3NjEgMTEuMjIzOSAxMiAxMS41IDEyQzExLjc3NjEgMTIgMTIgMTEuNzc2MSAxMiAxMS41VjkuOVY5Ljg3NzM3QzEyIDguNzc2NDEgMTIgNy45MTk0OCAxMS45NDM4IDcuMjMyMDlDMTEuODg2OCA2LjUzNDE2IDExLjc2OTQgNS45NjcxIDExLjUwOTUgNS40NTcwNEMxMS4wNzgxIDQuNjEwMzEgMTAuMzg5NyAzLjkyMTkgOS41NDI5NiAzLjQ5MDQ3QzkuMDMyOSAzLjIzMDU4IDguNDY1ODQgMy4xMTMxOCA3Ljc2NzkxIDMuMDU2MTZDNy4wODA1MiAzIDYuMjIzNTkgMyA1LjEyMjYzIDNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxJZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTAuMSAzQzEwLjUyODMgMyAxMC44MTk0IDMuMDAwMzkgMTEuMDQ0NSAzLjAxODc4QzExLjI2MzcgMy4wMzY2OSAxMS4zNzU4IDMuMDY5MTUgMTEuNDU0IDMuMTA4OTlDMTEuNjQyMiAzLjIwNDg3IDExLjc5NTEgMy4zNTc4NSAxMS44OTEgMy41NDYwMUMxMS45MzA5IDMuNjI0MjEgMTEuOTYzMyAzLjczNjMxIDExLjk4MTIgMy45NTU1MkMxMS45OTk2IDQuMTgwNTYgMTIgNC40NzE3MSAxMiA0LjlWNS41QzEyIDUuNzc2MTQgMTIuMjIzOSA2IDEyLjUgNkMxMi43NzYxIDYgMTMgNS43NzYxNCAxMyA1LjVWNC44NzkzNUMxMyA0LjQ3Njg3IDEzIDQuMTQ0NjkgMTIuOTc3OSAzLjg3NDA5QzEyLjk1NDkgMy41OTMwNCAxMi45MDU3IDMuMzM0NjkgMTIuNzgyIDMuMDkyMDJDMTIuNTkwMyAyLjcxNTcgMTIuMjg0MyAyLjQwOTczIDExLjkwOCAyLjIxNzk5QzExLjY2NTMgMi4wOTQzNCAxMS40MDcgMi4wNDUwNiAxMS4xMjU5IDIuMDIyMUMxMC44NTUzIDEuOTk5OTkgMTAuNTIzMSAxLjk5OTk5IDEwLjEyMDcgMkgxMC4xMjA2SDEwLjFIOS41QzkuMjIzODYgMiA5IDIuMjIzODYgOSAyLjVDOSAyLjc3NjE0IDkuMjIzODYgMyA5LjUgM0gxMC4xWk01LjUgMkg0Ljg3OTM1SDQuODc5MzRDNC40NzY4NiAxLjk5OTk5IDQuMTQ0NjggMS45OTk5OSAzLjg3NDA5IDIuMDIyMUMzLjU5MzA0IDIuMDQ1MDYgMy4zMzQ2OSAyLjA5NDM0IDMuMDkyMDIgMi4yMTc5OUMyLjcxNTcgMi40MDk3MyAyLjQwOTczIDIuNzE1NyAyLjIxNzk5IDMuMDkyMDJDMi4wOTQzNCAzLjMzNDY5IDIuMDQ1MDYgMy41OTMwNCAyLjAyMjEgMy44NzQwOUMxLjk5OTk5IDQuMTQ0NjggMS45OTk5OSA0LjQ3Njg2IDIgNC44NzkzNFY0Ljg3OTM1VjUuNUMyIDUuNzc2MTQgMi4yMjM4NiA2IDIuNSA2QzIuNzc2MTQgNiAzIDUuNzc2MTQgMyA1LjVWNC45QzMgNC40NzE3MSAzLjAwMDM5IDQuMTgwNTYgMy4wMTg3OCAzLjk1NTUyQzMuMDM2NjkgMy43MzYzMSAzLjA2OTE1IDMuNjI0MjEgMy4xMDg5OSAzLjU0NjAxQzMuMjA0ODcgMy4zNTc4NSAzLjM1Nzg1IDMuMjA0ODcgMy41NDYwMSAzLjEwODk5QzMuNjI0MjEgMy4wNjkxNSAzLjczNjMxIDMuMDM2NjkgMy45NTU1MiAzLjAxODc4QzQuMTgwNTYgMy4wMDAzOSA0LjQ3MTcxIDMgNC45IDNINS41QzUuNzc2MTQgMyA2IDIuNzc2MTQgNiAyLjVDNiAyLjIyMzg2IDUuNzc2MTQgMiA1LjUgMlpNMTMgOS41QzEzIDkuMjIzODYgMTIuNzc2MSA5IDEyLjUgOUMxMi4yMjM5IDkgMTIgOS4yMjM4NiAxMiA5LjVWMTAuMUMxMiAxMC41MjgzIDExLjk5OTYgMTAuODE5NCAxMS45ODEyIDExLjA0NDVDMTEuOTYzMyAxMS4yNjM3IDExLjkzMDkgMTEuMzc1OCAxMS44OTEgMTEuNDU0QzExLjc5NTEgMTEuNjQyMiAxMS42NDIyIDExLjc5NTEgMTEuNDU0IDExLjg5MUMxMS4zNzU4IDExLjkzMDkgMTEuMjYzNyAxMS45NjMzIDExLjA0NDUgMTEuOTgxMkMxMC44MTk0IDExLjk5OTYgMTAuNTI4MyAxMiAxMC4xIDEySDkuNUM5LjIyMzg2IDEyIDkgMTIuMjIzOSA5IDEyLjVDOSAxMi43NzYxIDkuMjIzODYgMTMgOS41IDEzSDEwLjEyMDZDMTAuNTIzMSAxMyAxMC44NTUzIDEzIDExLjEyNTkgMTIuOTc3OUMxMS40MDcgMTIuOTU0OSAxMS42NjUzIDEyLjkwNTcgMTEuOTA4IDEyLjc4MkMxMi4yODQzIDEyLjU5MDMgMTIuNTkwMyAxMi4yODQzIDEyLjc4MiAxMS45MDhDMTIuOTA1NyAxMS42NjUzIDEyLjk1NDkgMTEuNDA3IDEyLjk3NzkgMTEuMTI1OUMxMyAxMC44NTUzIDEzIDEwLjUyMzEgMTMgMTAuMTIwNlY5LjVaTTIuNSA5QzIuNzc2MTQgOSAzIDkuMjIzODYgMyA5LjVWMTAuMUMzIDEwLjUyODMgMy4wMDAzOSAxMC44MTk0IDMuMDE4NzggMTEuMDQ0NUMzLjAzNjY5IDExLjI2MzcgMy4wNjkxNSAxMS4zNzU4IDMuMTA4OTkgMTEuNDU0QzMuMjA0ODcgMTEuNjQyMiAzLjM1Nzg1IDExLjc5NTEgMy41NDYwMSAxMS44OTFDMy42MjQyMSAxMS45MzA5IDMuNzM2MzEgMTEuOTYzMyAzLjk1NTUyIDExLjk4MTJDNC4xODA1NiAxMS45OTk2IDQuNDcxNzEgMTIgNC45IDEySDUuNUM1Ljc3NjE0IDEyIDYgMTIuMjIzOSA2IDEyLjVDNiAxMi43NzYxIDUuNzc2MTQgMTMgNS41IDEzSDQuODc5MzVDNC40NzY4NyAxMyA0LjE0NDY5IDEzIDMuODc0MDkgMTIuOTc3OUMzLjU5MzA0IDEyLjk1NDkgMy4zMzQ2OSAxMi45MDU3IDMuMDkyMDIgMTIuNzgyQzIuNzE1NyAxMi41OTAzIDIuNDA5NzMgMTIuMjg0MyAyLjIxNzk5IDExLjkwOEMyLjA5NDM0IDExLjY2NTMgMi4wNDUwNiAxMS40MDcgMi4wMjIxIDExLjEyNTlDMS45OTk5OSAxMC44NTUzIDEuOTk5OTkgMTAuNTIzMSAyIDEwLjEyMDdWMTAuMTIwNlYxMC4xVjkuNUMyIDkuMjIzODYgMi4yMjM4NiA5IDIuNSA5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEzLjE1IDcuNDk5OThDMTMuMTUgNC42NjQ1OCAxMC45NDAyIDEuODQ5OTggNy41MDAwMiAxLjg0OTk4QzQuNzIxNyAxLjg0OTk4IDMuMzQ4NTEgMy45MDYzNiAyLjc2MzM2IDQuOTk5OTdINC41QzQuNzc2MTQgNC45OTk5NyA1IDUuMjIzODMgNSA1LjQ5OTk3QzUgNS43NzYxMSA0Ljc3NjE0IDUuOTk5OTcgNC41IDUuOTk5OTdIMS41QzEuMjIzODYgNS45OTk5NyAxIDUuNzc2MTEgMSA1LjQ5OTk3VjIuNDk5OTdDMSAyLjIyMzgzIDEuMjIzODYgMS45OTk5NyAxLjUgMS45OTk5N0MxLjc3NjE0IDEuOTk5OTcgMiAyLjIyMzgzIDIgMi40OTk5N1Y0LjMxMzE4QzIuNzA0NTMgMy4wNzEyNiA0LjMzNDA2IDAuODQ5OTc2IDcuNTAwMDIgMC44NDk5NzZDMTEuNTYyOCAwLjg0OTk3NiAxNC4xNSA0LjE4NTM3IDE0LjE1IDcuNDk5OThDMTQuMTUgMTAuODE0NiAxMS41NjI4IDE0LjE1IDcuNTAwMDIgMTQuMTVDNS41NTYxOCAxNC4xNSAzLjkzNzc4IDEzLjM4MDggMi43ODU0OCAxMi4yMDg0QzIuMTY4NTIgMTEuNTgwNiAxLjY4NjY4IDEwLjgzOSAxLjM1ODE2IDEwLjA0MDdDMS4yNTMwNiA5Ljc4NTM2IDEuMzc0ODggOS40OTMxNSAxLjYzMDI0IDkuMzg4MDZDMS44ODU2IDkuMjgyOTYgMi4xNzc4MSA5LjQwNDc4IDIuMjgyOSA5LjY2MDE0QzIuNTYzNzQgMTAuMzQyNSAyLjk3NDk1IDEwLjk3NDUgMy40OTg3IDExLjUwNzRDNC40NzA1MiAxMi40OTYzIDUuODM0OTYgMTMuMTUgNy41MDAwMiAxMy4xNUMxMC45NDAyIDEzLjE1IDEzLjE1IDEwLjMzNTQgMTMuMTUgNy40OTk5OFpNNyAxMFY1LjAwMDAxSDhWMTBIN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFRlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMy4xNSA3LjQ5OTk4QzEzLjE1IDQuNjY0NTggMTAuOTQwMiAxLjg0OTk4IDcuNTAwMDIgMS44NDk5OEM0LjcyMTY3IDEuODQ5OTggMy4zNDg0OSAzLjkwNjQgMi43NjMzNSA1SDQuNUM0Ljc3NjE0IDUgNSA1LjIyMzg2IDUgNS41QzUgNS43NzYxNCA0Ljc3NjE0IDYgNC41IDZIMS41QzEuMjIzODYgNiAxIDUuNzc2MTQgMSA1LjVWMi41QzEgMi4yMjM4NiAxLjIyMzg2IDIgMS41IDJDMS43NzYxNCAyIDIgMi4yMjM4NiAyIDIuNVY0LjMxMzE4QzIuNzA0NTMgMy4wNzEyNiA0LjMzNDA2IDAuODQ5OTc2IDcuNTAwMDIgMC44NDk5NzZDMTEuNTYyOCAwLjg0OTk3NiAxNC4xNSA0LjE4NTM3IDE0LjE1IDcuNDk5OThDMTQuMTUgMTAuODE0NiAxMS41NjI4IDE0LjE1IDcuNTAwMDIgMTQuMTVDNS41NTYxOCAxNC4xNSAzLjkzNzc4IDEzLjM4MDggMi43ODU0OCAxMi4yMDg0QzIuMTY4NTIgMTEuNTgwNiAxLjY4NjY4IDEwLjgzOSAxLjM1ODE2IDEwLjA0MDdDMS4yNTMwNiA5Ljc4NTM2IDEuMzc0ODggOS40OTMxNSAxLjYzMDI0IDkuMzg4MDZDMS44ODU2IDkuMjgyOTYgMi4xNzc4MSA5LjQwNDc4IDIuMjgyOSA5LjY2MDE0QzIuNTYzNzQgMTAuMzQyNSAyLjk3NDk1IDEwLjk3NDUgMy40OTg3IDExLjUwNzRDNC40NzA1MiAxMi40OTYzIDUuODM0OTYgMTMuMTUgNy41MDAwMiAxMy4xNUMxMC45NDAyIDEzLjE1IDEzLjE1IDEwLjMzNTQgMTMuMTUgNy40OTk5OFpNNy41IDQuMDAwMDFDNy43NzYxNCA0LjAwMDAxIDggNC4yMjM4NyA4IDQuNTAwMDFWNy4yOTI5MUw5Ljg1MzU1IDkuMTQ2NDZDMTAuMDQ4OCA5LjM0MTcyIDEwLjA0ODggOS42NTgzMSA5Ljg1MzU1IDkuODUzNTdDOS42NTgyOSAxMC4wNDg4IDkuMzQxNzEgMTAuMDQ4OCA5LjE0NjQ1IDkuODUzNTdMNy4xNDY0NSA3Ljg1MzU3QzcuMDUyNjggNy43NTk4IDcgNy42MzI2MiA3IDcuNTAwMDFWNC41MDAwMUM3IDQuMjIzODcgNy4yMjM4NiA0LjAwMDAxIDcuNSA0LjAwMDAxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sSGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNSA4LjAwNjg0ZS0wN0MzLjc3NjE0IDcuODg2MTRlLTA3IDQgMC4yMjM4NTkgNCAwLjUwMDAwMUw0IDMuMDAwMDZMMTEuNSAzLjAwMDA2QzExLjc3NjEgMy4wMDAwNiAxMiAzLjIyMzkyIDEyIDMuNTAwMDZMMTIgMTEuMDAwMUwxNC41IDExQzE0Ljc3NjEgMTEgMTUgMTEuMjIzOCAxNSAxMS41QzE1IDExLjc3NjEgMTQuNzc2MiAxMiAxNC41IDEyTDEyIDEyLjAwMDFMMTIgMTQuNUMxMiAxNC43NzYxIDExLjc3NjEgMTUgMTEuNSAxNUMxMS4yMjM5IDE1IDExIDE0Ljc3NjEgMTEgMTQuNUwxMSAxMi4wMDAxTDMuNSAxMi4wMDAxQzMuMjIzODYgMTIuMDAwMSAzIDExLjc3NjIgMyAxMS41MDAxTDMgNC4wMDAwNUwwLjQ5OTk4OSA0QzAuMjIzODQ3IDQgLTYuMTA1NDFlLTA2IDMuNzc2MTMgLTUuMDI1NzZlLTA3IDMuNDk5OTlDNS4xMzAwNmUtMDYgMy4yMjM4NSAwLjIyMzg2NyAzIDAuNTAwMDEgM0wzIDMuMDAwMDVMMyAwLjUwMDAwMUMzIDAuMjIzODU5IDMuMjIzODYgOC4xMjc1NWUtMDcgMy41IDguMDA2ODRlLTA3Wk00IDQuMDAwMDZMNCAxMS4wMDAxTDExIDExLjAwMDFMMTEgNC4wMDAwNkw0IDQuMDAwMDZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxCZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTIuODUzNiAyLjg1MzU1QzEzLjA0ODggMi42NTgyOSAxMy4wNDg4IDIuMzQxNzEgMTIuODUzNiAyLjE0NjQ1QzEyLjY1ODMgMS45NTExOCAxMi4zNDE3IDEuOTUxMTggMTIuMTQ2NCAyLjE0NjQ1TDcuNSA2Ljc5Mjg5TDIuODUzNTUgMi4xNDY0NUMyLjY1ODI5IDEuOTUxMTggMi4zNDE3MSAxLjk1MTE4IDIuMTQ2NDUgMi4xNDY0NUMxLjk1MTE4IDIuMzQxNzEgMS45NTExOCAyLjY1ODI5IDIuMTQ2NDUgMi44NTM1NUw2Ljc5Mjg5IDcuNUwyLjE0NjQ1IDEyLjE0NjRDMS45NTExOCAxMi4zNDE3IDEuOTUxMTggMTIuNjU4MyAyLjE0NjQ1IDEyLjg1MzZDMi4zNDE3MSAxMy4wNDg4IDIuNjU4MjkgMTMuMDQ4OCAyLjg1MzU1IDEyLjg1MzZMNy41IDguMjA3MTFMMTIuMTQ2NCAxMi44NTM2QzEyLjM0MTcgMTMuMDQ4OCAxMi42NTgzIDEzLjA0ODggMTIuODUzNiAxMi44NTM2QzEzLjA0ODggMTIuNjU4MyAxMy4wNDg4IDEyLjM0MTcgMTIuODUzNiAxMi4xNDY0TDguMjA3MTEgNy41TDEyLjg1MzYgMi44NTM1NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFZlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMS43ODE2IDQuMDMxNTdDMTIuMDA2MiAzLjgwNzAyIDEyLjAwNjIgMy40NDI5NSAxMS43ODE2IDMuMjE4NEMxMS41NTcxIDIuOTkzODUgMTEuMTkzIDIuOTkzODUgMTAuOTY4NSAzLjIxODRMNy41MDAwNSA2LjY4NjgyTDQuMDMxNjQgMy4yMTg0QzMuODA3MDggMi45OTM4NSAzLjQ0MzAxIDIuOTkzODUgMy4yMTg0NiAzLjIxODRDMi45OTM5MSAzLjQ0Mjk1IDIuOTkzOTEgMy44MDcwMiAzLjIxODQ2IDQuMDMxNTdMNi42ODY4OCA3LjQ5OTk5TDMuMjE4NDYgMTAuOTY4NEMyLjk5MzkxIDExLjE5MyAyLjk5MzkxIDExLjU1NyAzLjIxODQ2IDExLjc4MTZDMy40NDMwMSAxMi4wMDYxIDMuODA3MDggMTIuMDA2MSA0LjAzMTY0IDExLjc4MTZMNy41MDAwNSA4LjMxMzE2TDEwLjk2ODUgMTEuNzgxNkMxMS4xOTMgMTIuMDA2MSAxMS41NTcxIDEyLjAwNjEgMTEuNzgxNiAxMS43ODE2QzEyLjAwNjIgMTEuNTU3IDEyLjAwNjIgMTEuMTkzIDExLjc4MTYgMTAuOTY4NEw4LjMxMzIyIDcuNDk5OTlMMTEuNzgxNiA0LjAzMTU3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sRGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuODc3MDc1IDcuNDk5ODhDMC44NzcwNzUgMy44NDIxOSAzLjg0MjIyIDAuODc3MDQ1IDcuNDk5OTEgMC44NzcwNDVDMTEuMTU3NiAwLjg3NzA0NSAxNC4xMjI3IDMuODQyMTkgMTQuMTIyNyA3LjQ5OTg4QzE0LjEyMjcgMTEuMTU3NSAxMS4xNTc2IDE0LjEyMjcgNy40OTk5MSAxNC4xMjI3QzMuODQyMjIgMTQuMTIyNyAwLjg3NzA3NSAxMS4xNTc1IDAuODc3MDc1IDcuNDk5ODhaTTcuNDk5OTEgMS44MjcwNEM0LjM2Njg5IDEuODI3MDQgMS44MjcwOCA0LjM2Njg2IDEuODI3MDggNy40OTk4OEMxLjgyNzA4IDEwLjYzMjkgNC4zNjY4OSAxMy4xNzI3IDcuNDk5OTEgMTMuMTcyN0MxMC42MzI5IDEzLjE3MjcgMTMuMTcyNyAxMC42MzI5IDEzLjE3MjcgNy40OTk4OEMxMy4xNzI3IDQuMzY2ODYgMTAuNjMyOSAxLjgyNzA0IDcuNDk5OTEgMS44MjcwNFpNOS44NTM1OCA1LjE0NjQ0QzEwLjA0ODggNS4zNDE3IDEwLjA0ODggNS42NTgyOSA5Ljg1MzU4IDUuODUzNTVMOC4yMDcxMyA3LjQ5OTk5TDkuODUzNTggOS4xNDY0NEMxMC4wNDg4IDkuMzQxNyAxMC4wNDg4IDkuNjU4MjkgOS44NTM1OCA5Ljg1MzU1QzkuNjU4MzIgMTAuMDQ4OCA5LjM0MTczIDEwLjA0ODggOS4xNDY0NyA5Ljg1MzU1TDcuNTAwMDIgOC4yMDcxTDUuODUzNTggOS44NTM1NUM1LjY1ODMyIDEwLjA0ODggNS4zNDE3MyAxMC4wNDg4IDUuMTQ2NDcgOS44NTM1NUM0Ljk1MTIxIDkuNjU4MjkgNC45NTEyMSA5LjM0MTcgNS4xNDY0NyA5LjE0NjQ0TDYuNzkyOTIgNy40OTk5OUw1LjE0NjQ3IDUuODUzNTVDNC45NTEyMSA1LjY1ODI5IDQuOTUxMjEgNS4zNDE3IDUuMTQ2NDcgNS4xNDY0NEM1LjM0MTczIDQuOTUxMTggNS42NTgzMiA0Ljk1MTE4IDUuODUzNTggNS4xNDY0NEw3LjUwMDAyIDYuNzkyODlMOS4xNDY0NyA1LjE0NjQ0QzkuMzQxNzMgNC45NTExOCA5LjY1ODMyIDQuOTUxMTggOS44NTM1OCA1LjE0NjQ0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sWmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuODc3MDc1IDcuNTAyMDdDMC44NzcwNzUgMy44NDMxOSAzLjg0MzE5IDAuODc3MDc1IDcuNTAyMDggMC44NzcwNzVDMTEuMTYwOSAwLjg3NzA3NSAxNC4xMjcxIDMuODQzMTkgMTQuMTI3MSA3LjUwMjA3QzE0LjEyNzEgMTEuMTYwOSAxMS4xNjA5IDE0LjEyNzEgNy41MDIwOCAxNC4xMjcxQzMuODQzMTkgMTQuMTI3MSAwLjg3NzA3NSAxMS4xNjA5IDAuODc3MDc1IDcuNTAyMDdaTTEuODQ4OTggNy4wMDAwM0MyLjA4ODYgNC4yNjYzOSA0LjI2NjM5IDIuMDg4NiA3LjAwMDAzIDEuODQ4OThWNC41MDAwM0M3LjAwMDAzIDQuNzc2MTcgNy4yMjM4OCA1LjAwMDAzIDcuNTAwMDMgNS4wMDAwM0M3Ljc3NjE3IDUuMDAwMDMgOC4wMDAwMyA0Ljc3NjE3IDguMDAwMDMgNC41MDAwM1YxLjg0ODYyQzEwLjczNTYgMi4wODY0MyAxMi45MTU0IDQuMjY1MDIgMTMuMTU1MiA3LjAwMDAzSDEwLjVDMTAuMjIzOSA3LjAwMDAzIDEwIDcuMjIzODggMTAgNy41MDAwM0MxMCA3Ljc3NjE3IDEwLjIyMzkgOC4wMDAwMyAxMC41IDguMDAwMDNIMTMuMTU1NUMxMi45MTc2IDEwLjczNjkgMTAuNzM2OSAxMi45MTc2IDguMDAwMDMgMTMuMTU1NVYxMC41QzguMDAwMDMgMTAuMjIzOSA3Ljc3NjE3IDEwIDcuNTAwMDMgMTBDNy4yMjM4OCAxMCA3LjAwMDAzIDEwLjIyMzkgNy4wMDAwMyAxMC41VjEzLjE1NTJDNC4yNjUwMiAxMi45MTU0IDIuMDg2NDMgMTAuNzM1NiAxLjg0ODYyIDguMDAwMDNINC41MDAwM0M0Ljc3NjE3IDguMDAwMDMgNS4wMDAwMyA3Ljc3NjE3IDUuMDAwMDMgNy41MDAwM0M1LjAwMDAzIDcuMjIzODggNC43NzYxNyA3LjAwMDAzIDQuNTAwMDMgNy4wMDAwM0gxLjg0ODk4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sJGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNSAwQzcuNzc2MTQgMCA4IDAuMjIzODU4IDggMC41VjEuODA2ODdDMTAuNjkyMiAyLjA5MzUgMTIuODE2NyA0LjI4MDEyIDEzLjAwNjggN0gxNC41QzE0Ljc3NjEgNyAxNSA3LjIyMzg2IDE1IDcuNUMxNSA3Ljc3NjE0IDE0Ljc3NjEgOCAxNC41IDhIMTIuOTg4OEMxMi43MDk0IDEwLjYyNDQgMTAuNjI0NCAxMi43MDk0IDggMTIuOTg4OFYxNC41QzggMTQuNzc2MSA3Ljc3NjE0IDE1IDcuNSAxNUM3LjIyMzg2IDE1IDcgMTQuNzc2MSA3IDE0LjVWMTMuMDA2OEM0LjI4MDEyIDEyLjgxNjcgMi4wOTM1IDEwLjY5MjIgMS44MDY4NyA4SDAuNUMwLjIyMzg1OCA4IDAgNy43NzYxNCAwIDcuNUMwIDcuMjIzODYgMC4yMjM4NTggNyAwLjUgN0gxLjc4ODg2QzEuOTgzNzYgNC4yMTE2NiA0LjIxMTY2IDEuOTgzNzYgNyAxLjc4ODg2VjAuNUM3IDAuMjIzODU4IDcuMjIzODYgMCA3LjUgMFpNOCAxMi4wMzIyVjkuNUM4IDkuMjIzODYgNy43NzYxNCA5IDcuNSA5QzcuMjIzODYgOSA3IDkuMjIzODYgNyA5LjVWMTIuMDU0QzQuODA1MTcgMTEuODY4OSAzLjA0MjIyIDEwLjE2NjggMi43NjM0NCA4SDUuNUM1Ljc3NjE0IDggNiA3Ljc3NjE0IDYgNy41QzYgNy4yMjM4NiA1Ljc3NjE0IDcgNS41IDdIMi43NDE3QzIuOTMyNTIgNC43MzY2MiA0LjczNjYyIDIuOTMyNTIgNyAyLjc0MTdWNS41QzcgNS43NzYxNCA3LjIyMzg2IDYgNy41IDZDNy43NzYxNCA2IDggNS43NzYxNCA4IDUuNVYyLjc2MzQ0QzEwLjE2NjggMy4wNDIyMiAxMS44Njg5IDQuODA1MTcgMTIuMDU0IDdIOS41QzkuMjIzODYgNyA5IDcuMjIzODYgOSA3LjVDOSA3Ljc3NjE0IDkuMjIzODYgOCA5LjUgOEgxMi4wMzIyQzExLjc2MjEgMTAuMDk5MSAxMC4wOTkxIDExLjc2MjEgOCAxMi4wMzIyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuNjA5MTMgMC4wNjM0Mjg3QzQuMzkwODIgMC4wMDg4NTA1IDQuMTY1NzUgMC4xMjM5MyA0LjA4MjE4IDAuMzMyODY3TDMuMTUzOCAyLjY1MzhMMC44MzI4NjYgMy41ODIxOEMwLjcwMjg4NCAzLjYzNDE3IDAuNjA0NTA0IDMuNzQzNyAwLjU2NjcwNSAzLjg3ODQ5QzAuNTI4OTA2IDQuMDEzMjkgMC41NTU5OTQgNC4xNTggMC42Mzk5OTIgNC4yNjk5OUwyLjAxMTQ4IDYuMDk4NjRMMS4wNjM0MyA5Ljg5MDg1QzEuMDA5NDQgMTAuMTA2OCAxLjEyMTQ1IDEwLjMyOTggMS4zMjY5MSAxMC40MTU0TDQuMjAxMTUgMTEuNjEzTDUuNjI1NTcgMTMuNzQ5NkM1LjczNDEyIDEzLjkxMjQgNS45MzU0NSAxMy45ODY0IDYuMTIzNjIgMTMuOTMyN0w5LjYyMzYyIDEyLjkzMjdDOS42Mjk4OCAxMi45MzA5IDkuNjM2MTEgMTIuOTI5IDkuNjQyMjkgMTIuOTI2OUwxMi42NDIzIDExLjkyNjlDMTIuNzkyMyAxMS44NzY5IDEyLjkwNSAxMS43NTE5IDEyLjkzOTMgMTEuNTk3NkwxMy45MzkzIDcuMDk3NjFDMTMuOTc3NiA2LjkyNTA2IDEzLjkxMTQgNi43NDYwNSAxMy43NyA2LjYzOTk5TDExLjk1IDUuMjc0OTlWMi45OTk5OUMxMS45NSAyLjgyOTU1IDExLjg1MzcgMi42NzM3MyAxMS43MDEyIDIuNTk3NUw4LjcwMTI0IDEuMDk3NUM4LjY3MTg3IDEuMDgyODIgOC42NDA5OCAxLjA3MTM5IDguNjA5MTMgMS4wNjM0M0w0LjYwOTEzIDAuMDYzNDI4N1pNMTEuNDMyMyA2LjAxMTczTDEyLjc3NDggNy4wMTg1OEwxMC4yMTE5IDkuMTU0MjlDMTAuMTQ3NiA5LjIwNzg2IDEwLjA5OTUgOS4yNzgzIDEwLjA3MzEgOS4zNTc2OUw5LjI1MzgyIDExLjgxNTVMNy43Mzg0OSAxMC44Njg0QzcuNTI3NzQgMTAuNzM2NyA3LjI1MDExIDEwLjgwMDcgNy4xMTgzOSAxMS4wMTE1QzYuOTg2NjcgMTEuMjIyMiA3LjA1MDc0IDExLjQ5OTkgNy4yNjE0OSAxMS42MzE2TDguNDAzNDEgMTIuMzQ1M0w2LjE5MjIxIDEyLjk3NzFMNC44NzQ0MSAxMS4wMDA0QzQuODI1MTMgMTAuOTI2NSA0Ljc1NTA4IDEwLjg2ODggNC42NzMwNyAxMC44MzQ2TDIuMDMwNDYgOS43MzM1MkwyLjg1MTM0IDYuNDQ5OTlINC45OTk5OUM1LjI0ODUyIDYuNDQ5OTkgNS40NDk5OSA2LjI0ODUyIDUuNDQ5OTkgNS45OTk5OUM1LjQ0OTk5IDUuNzUxNDYgNS4yNDg1MiA1LjU0OTk5IDQuOTk5OTkgNS41NDk5OUgyLjcyNDk5TDEuNzEyMyA0LjE5OTc0TDMuNTE0MDcgMy40NzkwM0w2LjM1NzY5IDQuNDI2OUM2LjUzNjU1IDQuNDg2NTIgNi43MzM2MSA0LjQyODMyIDYuODUxMzggNC4yODExMUw4LjYyNDEzIDIuMDY1MThMMTEuMDUgMy4yNzgxMVY1LjE5NTMzTDguODMyODcgNi4wODIxOEM4LjcwOTk2IDYuMTMxMzQgOC42MTQ5NCA2LjIzMjEyIDguNTczMDggNi4zNTc2OUw4LjA3MzA4IDcuODU3NjlDNy45OTQ0OSA4LjA5MzQ2IDguMTIxOTEgOC4zNDgzMSA4LjM1NzY5IDguNDI2OUM4LjU5MzQ2IDguNTA1NDkgOC44NDgzMSA4LjM3ODA3IDguOTI2OSA4LjE0MjI5TDkuMzYwOSA2Ljg0MDI5TDExLjQzMjMgNi4wMTE3M1pNNy43MTA1MiAxLjc2NjQ4TDYuMzQ0NjIgMy40NzM4Nkw0LjA5NTA1IDIuNzI0TDQuNzcxOTIgMS4wMzE4M0w3LjcxMDUyIDEuNzY2NDhaTTEwLjIxMTUgMTEuNzg4NUwxMi4xMTYgMTEuMTUzN0wxMi43NzQ1IDguMTkwMzRMMTAuODg2NCA5Ljc2Mzc0TDEwLjIxMTUgMTEuNzg4NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEZlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjI4ODU2IDAuNzk2OTA4QzcuNDIyNTggMC43MzQzNjQgNy41Nzc0MiAwLjczNDM2NCA3LjcxMTQ0IDAuNzk2OTA4TDEzLjcxMTQgMy41OTY5MUMxMy44ODc1IDMuNjc5MDYgMTQgMy44NTU3NCAxNCA0LjA1VjEwLjk1QzE0IDExLjE0NDMgMTMuODg3NSAxMS4zMjA5IDEzLjcxMTQgMTEuNDAzMUw3LjcxMTQ0IDE0LjIwMzFDNy41Nzc0MiAxNC4yNjU2IDcuNDIyNTggMTQuMjY1NiA3LjI4ODU2IDE0LjIwMzFMMS4yODg1NiAxMS40MDMxQzEuMTEyNTIgMTEuMzIwOSAxIDExLjE0NDMgMSAxMC45NVY0LjA1QzEgMy44NTU3NCAxLjExMjUyIDMuNjc5MDYgMS4yODg1NiAzLjU5NjkxTDcuMjg4NTYgMC43OTY5MDhaTTIgNC44MDU3OEw3IDYuOTMwNzhWMTIuOTY0OUwyIDEwLjYzMTZWNC44MDU3OFpNOCAxMi45NjQ5TDEzIDEwLjYzMTZWNC44MDU3OEw4IDYuOTMwNzhWMTIuOTY0OVpNNy41IDYuMDU2NzJMMTIuMjcxOSA0LjAyODY2TDcuNSAxLjgwMTc2TDIuNzI4MDkgNC4wMjg2Nkw3LjUgNi4wNTY3MlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFVlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjI5MjI3IDAuMDQ4OTg0QzMuNDcwMzMgLTAuMDMyMzM4IDMuNjc5NDYgLTAuMDAyMjgyMTQgMy44Mjc0IDAuMTI1ODkxTDEyLjg1ODcgNy45NTAyNkMxMy4wMTM0IDguMDg0MzIgMTMuMDcwOCA4LjI5OTE2IDEzLjAwMzUgOC40OTI1MUMxMi45MzYyIDguNjg1ODYgMTIuNzU3OCA4LjgxODY2IDEyLjU1MzMgOC44Mjc2OEw5LjIxODg3IDguOTc0NzRMMTEuMTUwNCAxMy4yMTg3QzExLjI2NDggMTMuNDcgMTEuMTUzOCAxMy43NjY0IDEwLjkwMjYgMTMuODgwOEw4Ljc1MDI0IDE0Ljg2MTNDOC40OTkgMTQuOTc1OCA4LjIwMjU1IDE0Ljg2NDkgOC4wODgwMiAxNC42MTM3TDYuMTUzMzkgMTAuMzcwM0wzLjg2Mjc5IDEyLjc4NTVDMy43MjE5NiAxMi45MzQgMy41MDQ4NyAxMi45ODE3IDMuMzE0NzkgMTIuOTA1OUMzLjEyNDcgMTIuODMwMSAzIDEyLjY0NjEgMyAxMi40NDE0VjAuNTAzNzkyQzMgMC4zMDgwNDggMy4xMTQyMiAwLjEzMDMwNiAzLjI5MjI3IDAuMDQ4OTg0Wk00IDEuNTk4NTJWMTEuMTg3N0w1LjkzNzk5IDkuMTQ0MjVDNi4wNTIzOCA5LjAyMzYzIDYuMjE5MjQgOC45Njc3NiA2LjM4MzE5IDguOTk1MTZDNi41NDcxNSA5LjAyMjU2IDYuNjg2NzcgOS4xMjk2NSA2Ljc1NTczIDkuMjgwOUw4Ljc5MDU2IDEzLjc0NDFMMTAuMDMzMiAxMy4xNzhMOC4wMDE5NSA4LjcxNDk3QzcuOTMzMTMgOC41NjM3NiA3Ljk0MzkxIDguMzg4MjQgOC4wMzA3MiA4LjI0NjU5QzguMTE3NTMgOC4xMDQ5NCA4LjI2OTAzIDguMDE1NjYgOC40MzUgOC4wMDgzNEwxMS4yNTQ5IDcuODgzOTdMNCAxLjU5ODUyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sV2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuNSAxQzQuMjIzODYgMSA0IDEuMjIzODYgNCAxLjVDNCAxLjc3NjE0IDQuMjIzODYgMiA0LjUgMkM1LjQyMjE1IDIgNi4wMzk5IDIuMjMwNTQgNi40MjA3NSAyLjU2Mzc5QzYuNzkyODYgMi44ODkzOSA3IDMuMzY2MjYgNyA0VjdINS43NUM1LjQ3Mzg2IDcgNS4yNSA3LjIyMzg2IDUuMjUgNy41QzUuMjUgNy43NzYxNCA1LjQ3Mzg2IDggNS43NSA4SDdWMTFDNyAxMS42MzM3IDYuNzkyODYgMTIuMTEwNiA2LjQyMDc1IDEyLjQzNjJDNi4wMzk5IDEyLjc2OTUgNS40MjIxNSAxMyA0LjUgMTNDNC4yMjM4NiAxMyA0IDEzLjIyMzkgNCAxMy41QzQgMTMuNzc2MSA0LjIyMzg2IDE0IDQuNSAxNEM1LjU3Nzg1IDE0IDYuNDYwMSAxMy43MzA1IDcuMDc5MjUgMTMuMTg4OEM3LjI0MTY4IDEzLjA0NjcgNy4zODE2OSAxMi44ODk2IDcuNSAxMi43MTk4QzcuNjE4MzIgMTIuODg5NiA3Ljc1ODMyIDEzLjA0NjcgNy45MjA3NSAxMy4xODg4QzguNTM5OSAxMy43MzA1IDkuNDIyMTUgMTQgMTAuNSAxNEMxMC43NzYxIDE0IDExIDEzLjc3NjEgMTEgMTMuNUMxMSAxMy4yMjM5IDEwLjc3NjEgMTMgMTAuNSAxM0M5LjU3Nzg1IDEzIDguOTYwMSAxMi43Njk1IDguNTc5MjUgMTIuNDM2MkM4LjIwNzE0IDEyLjExMDYgOCAxMS42MzM3IDggMTFWOEg5LjI1QzkuNTI2MTQgOCA5Ljc1IDcuNzc2MTQgOS43NSA3LjVDOS43NSA3LjIyMzg2IDkuNTI2MTQgNyA5LjI1IDdIOFY0QzggMy4zNjYyNiA4LjIwNzE0IDIuODg5MzkgOC41NzkyNSAyLjU2Mzc5QzguOTYwMSAyLjIzMDU0IDkuNTc3ODUgMiAxMC41IDJDMTAuNzc2MSAyIDExIDEuNzc2MTQgMTEgMS41QzExIDEuMjIzODYgMTAuNzc2MSAxIDEwLjUgMUM5LjQyMjE1IDEgOC41Mzk5IDEuMjY5NDYgNy45MjA3NSAxLjgxMTIxQzcuNzU4MzIgMS45NTMzMyA3LjYxODMyIDIuMTEwNDMgNy41IDIuMjgwMjNDNy4zODE2OCAyLjExMDQzIDcuMjQxNjggMS45NTMzMyA3LjA3OTI1IDEuODExMjFDNi40NjAxIDEuMjY5NDYgNS41Nzc4NSAxIDQuNSAxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0semU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUgNy41QzUgNy4yMjM4NiA1LjIyMzg2IDcgNS41IDdIOS41QzkuNzc2MTQgNyAxMCA3LjIyMzg2IDEwIDcuNUMxMCA3Ljc3NjE0IDkuNzc2MTQgOCA5LjUgOEg1LjVDNS4yMjM4NiA4IDUgNy43NzYxNCA1IDcuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEdlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjggMUwyLjc0OTY3IDAuOTk5OTdDMi41MjEyMiAwLjk5OTc1MiAyLjMyNDI5IDAuOTk5NTY0IDIuMTQ5ODMgMS4wNDE0NUMxLjYwMTM2IDEuMTczMTIgMS4xNzMxMiAxLjYwMTM2IDEuMDQxNDUgMi4xNDk4M0MwLjk5OTU2NCAyLjMyNDI5IDAuOTk5NzUyIDIuNTIxMjIgMC45OTk5NyAyLjc0OTY3TDEgMi44VjUuMkwwLjk5OTk3IDUuMjUwMzNDMC45OTk3NTIgNS40Nzg3OCAwLjk5OTU2NCA1LjY3NTcyIDEuMDQxNDUgNS44NTAxN0MxLjE3MzEyIDYuMzk4NjQgMS42MDEzNiA2LjgyNjg4IDIuMTQ5ODMgNi45NTg1NkMyLjMyNDI5IDcuMDAwNDQgMi41MjEyMiA3LjAwMDI1IDIuNzQ5NjcgNy4wMDAwM0wyLjggN0g1LjJMNS4yNTAzMyA3LjAwMDAzQzUuNDc4NzggNy4wMDAyNSA1LjY3NTcyIDcuMDAwNDQgNS44NTAxNyA2Ljk1ODU2QzYuMzk4NjQgNi44MjY4OCA2LjgyNjg4IDYuMzk4NjQgNi45NTg1NiA1Ljg1MDE3QzcuMDAwNDQgNS42NzU3MiA3LjAwMDI1IDUuNDc4NzggNy4wMDAwMyA1LjI1MDMzTDcgNS4yVjIuOEw3LjAwMDAzIDIuNzQ5NjdDNy4wMDAyNSAyLjUyMTIyIDcuMDAwNDQgMi4zMjQyOSA2Ljk1ODU2IDIuMTQ5ODNDNi44MjY4OCAxLjYwMTM2IDYuMzk4NjQgMS4xNzMxMiA1Ljg1MDE3IDEuMDQxNDVDNS42NzU3MiAwLjk5OTU2NCA1LjQ3ODc4IDAuOTk5NzUyIDUuMjUwMzMgMC45OTk5N0w1LjIgMUgyLjhaTTIuMzgzMjggMi4wMTM4MkMyLjQyNjMyIDIuMDAzNDggMi40OTIyMiAyIDIuOCAySDUuMkM1LjUwNzc5IDIgNS41NzM2OSAyLjAwMzQ4IDUuNjE2NzIgMi4wMTM4MkM1Ljc5OTU1IDIuMDU3NzEgNS45NDIyOSAyLjIwMDQ1IDUuOTg2MTkgMi4zODMyOEM1Ljk5NjUyIDIuNDI2MzIgNiAyLjQ5MjIyIDYgMi44VjUuMkM2IDUuNTA3NzkgNS45OTY1MiA1LjU3MzY5IDUuOTg2MTkgNS42MTY3MkM1Ljk0MjI5IDUuNzk5NTUgNS43OTk1NSA1Ljk0MjI5IDUuNjE2NzIgNS45ODYxOUM1LjU3MzY5IDUuOTk2NTIgNS41MDc3OSA2IDUuMiA2SDIuOEMyLjQ5MjIyIDYgMi40MjYzMiA1Ljk5NjUyIDIuMzgzMjggNS45ODYxOUMyLjIwMDQ1IDUuOTQyMjkgMi4wNTc3MSA1Ljc5OTU1IDIuMDEzODIgNS42MTY3MkMyLjAwMzQ4IDUuNTczNjkgMiA1LjUwNzc5IDIgNS4yVjIuOEMyIDIuNDkyMjIgMi4wMDM0OCAyLjQyNjMyIDIuMDEzODIgMi4zODMyOEMyLjA1NzcxIDIuMjAwNDUgMi4yMDA0NSAyLjA1NzcxIDIuMzgzMjggMi4wMTM4MlpNOS44IDFMOS43NDk2NyAwLjk5OTk3QzkuNTIxMjIgMC45OTk3NTIgOS4zMjQyOSAwLjk5OTU2NCA5LjE0OTgzIDEuMDQxNDVDOC42MDEzNiAxLjE3MzEyIDguMTczMTIgMS42MDEzNiA4LjA0MTQ1IDIuMTQ5ODNDNy45OTk1NiAyLjMyNDI5IDcuOTk5NzUgMi41MjEyMiA3Ljk5OTk3IDIuNzQ5NjdMOCAyLjhWNS4yTDcuOTk5OTcgNS4yNTAzM0M3Ljk5OTc1IDUuNDc4NzggNy45OTk1NiA1LjY3NTcyIDguMDQxNDUgNS44NTAxN0M4LjE3MzEyIDYuMzk4NjQgOC42MDEzNiA2LjgyNjg4IDkuMTQ5ODMgNi45NTg1NkM5LjMyNDI5IDcuMDAwNDQgOS41MjEyMiA3LjAwMDI1IDkuNzQ5NjcgNy4wMDAwM0w5LjggN0gxMi4yTDEyLjI1MDMgNy4wMDAwM0MxMi40Nzg4IDcuMDAwMjUgMTIuNjc1NyA3LjAwMDQ0IDEyLjg1MDIgNi45NTg1NkMxMy4zOTg2IDYuODI2ODggMTMuODI2OSA2LjM5ODY0IDEzLjk1ODYgNS44NTAxN0MxNC4wMDA0IDUuNjc1NzIgMTQuMDAwMyA1LjQ3ODc4IDE0IDUuMjUwMzNMMTQgNS4yVjIuOEwxNCAyLjc0OTY3QzE0LjAwMDMgMi41MjEyMiAxNC4wMDA0IDIuMzI0MjkgMTMuOTU4NiAyLjE0OTgzQzEzLjgyNjkgMS42MDEzNiAxMy4zOTg2IDEuMTczMTIgMTIuODUwMiAxLjA0MTQ1QzEyLjY3NTcgMC45OTk1NjQgMTIuNDc4OCAwLjk5OTc1MiAxMi4yNTAzIDAuOTk5OTdMMTIuMiAxSDkuOFpNOS4zODMyOCAyLjAxMzgyQzkuNDI2MzIgMi4wMDM0OCA5LjQ5MjIyIDIgOS44IDJIMTIuMkMxMi41MDc4IDIgMTIuNTczNyAyLjAwMzQ4IDEyLjYxNjcgMi4wMTM4MkMxMi43OTk1IDIuMDU3NzEgMTIuOTQyMyAyLjIwMDQ1IDEyLjk4NjIgMi4zODMyOEMxMi45OTY1IDIuNDI2MzIgMTMgMi40OTIyMiAxMyAyLjhWNS4yQzEzIDUuNTA3NzkgMTIuOTk2NSA1LjU3MzY5IDEyLjk4NjIgNS42MTY3MkMxMi45NDIzIDUuNzk5NTUgMTIuNzk5NSA1Ljk0MjI5IDEyLjYxNjcgNS45ODYxOUMxMi41NzM3IDUuOTk2NTIgMTIuNTA3OCA2IDEyLjIgNkg5LjhDOS40OTIyMiA2IDkuNDI2MzIgNS45OTY1MiA5LjM4MzI4IDUuOTg2MTlDOS4yMDA0NSA1Ljk0MjI5IDkuMDU3NzEgNS43OTk1NSA5LjAxMzgyIDUuNjE2NzJDOS4wMDM0OCA1LjU3MzY5IDkgNS41MDc3OSA5IDUuMlYyLjhDOSAyLjQ5MjIyIDkuMDAzNDggMi40MjYzMiA5LjAxMzgyIDIuMzgzMjhDOS4wNTc3MSAyLjIwMDQ1IDkuMjAwNDUgMi4wNTc3MSA5LjM4MzI4IDIuMDEzODJaTTIuNzQ5NjcgNy45OTk5N0wyLjggOEg1LjJMNS4yNTAzMyA3Ljk5OTk3QzUuNDc4NzggNy45OTk3NSA1LjY3NTcyIDcuOTk5NTYgNS44NTAxNyA4LjA0MTQ1QzYuMzk4NjQgOC4xNzMxMiA2LjgyNjg4IDguNjAxMzYgNi45NTg1NiA5LjE0OTgzQzcuMDAwNDQgOS4zMjQyOSA3LjAwMDI1IDkuNTIxMjIgNy4wMDAwMyA5Ljc0OTY3TDcgOS44VjEyLjJMNy4wMDAwMyAxMi4yNTAzQzcuMDAwMjUgMTIuNDc4OCA3LjAwMDQ0IDEyLjY3NTcgNi45NTg1NiAxMi44NTAyQzYuODI2ODggMTMuMzk4NiA2LjM5ODY0IDEzLjgyNjkgNS44NTAxNyAxMy45NTg2QzUuNjc1NzIgMTQuMDAwNCA1LjQ3ODc4IDE0LjAwMDMgNS4yNTAzMyAxNEw1LjIgMTRIMi44TDIuNzQ5NjcgMTRDMi41MjEyMiAxNC4wMDAzIDIuMzI0MjkgMTQuMDAwNCAyLjE0OTgzIDEzLjk1ODZDMS42MDEzNiAxMy44MjY5IDEuMTczMTIgMTMuMzk4NiAxLjA0MTQ1IDEyLjg1MDJDMC45OTk1NjQgMTIuNjc1NyAwLjk5OTc1MiAxMi40Nzg4IDAuOTk5OTcgMTIuMjUwM0wxIDEyLjJWOS44TDAuOTk5OTcgOS43NDk2N0MwLjk5OTc1MiA5LjUyMTIyIDAuOTk5NTY0IDkuMzI0MjkgMS4wNDE0NSA5LjE0OTgzQzEuMTczMTIgOC42MDEzNiAxLjYwMTM2IDguMTczMTIgMi4xNDk4MyA4LjA0MTQ1QzIuMzI0MjkgNy45OTk1NiAyLjUyMTIyIDcuOTk5NzUgMi43NDk2NyA3Ljk5OTk3Wk0yLjggOUMyLjQ5MjIyIDkgMi40MjYzMiA5LjAwMzQ4IDIuMzgzMjggOS4wMTM4MkMyLjIwMDQ1IDkuMDU3NzEgMi4wNTc3MSA5LjIwMDQ1IDIuMDEzODIgOS4zODMyOEMyLjAwMzQ4IDkuNDI2MzIgMiA5LjQ5MjIyIDIgOS44VjEyLjJDMiAxMi41MDc4IDIuMDAzNDggMTIuNTczNyAyLjAxMzgyIDEyLjYxNjdDMi4wNTc3MSAxMi43OTk1IDIuMjAwNDUgMTIuOTQyMyAyLjM4MzI4IDEyLjk4NjJDMi40MjYzMiAxMi45OTY1IDIuNDkyMjIgMTMgMi44IDEzSDUuMkM1LjUwNzc5IDEzIDUuNTczNjkgMTIuOTk2NSA1LjYxNjcyIDEyLjk4NjJDNS43OTk1NSAxMi45NDIzIDUuOTQyMjkgMTIuNzk5NSA1Ljk4NjE5IDEyLjYxNjdDNS45OTY1MiAxMi41NzM3IDYgMTIuNTA3OCA2IDEyLjJWOS44QzYgOS40OTIyMiA1Ljk5NjUyIDkuNDI2MzIgNS45ODYxOSA5LjM4MzI4QzUuOTQyMjkgOS4yMDA0NSA1Ljc5OTU1IDkuMDU3NzEgNS42MTY3MiA5LjAxMzgyQzUuNTczNjkgOS4wMDM0OCA1LjUwNzc5IDkgNS4yIDlIMi44Wk05LjggOEw5Ljc0OTY3IDcuOTk5OTdDOS41MjEyMiA3Ljk5OTc1IDkuMzI0MjkgNy45OTk1NiA5LjE0OTgzIDguMDQxNDVDOC42MDEzNiA4LjE3MzEyIDguMTczMTIgOC42MDEzNiA4LjA0MTQ1IDkuMTQ5ODNDNy45OTk1NiA5LjMyNDI5IDcuOTk5NzUgOS41MjEyMiA3Ljk5OTk3IDkuNzQ5NjdMOCA5LjhWMTIuMkw3Ljk5OTk3IDEyLjI1MDNDNy45OTk3NSAxMi40Nzg4IDcuOTk5NTYgMTIuNjc1NyA4LjA0MTQ1IDEyLjg1MDJDOC4xNzMxMiAxMy4zOTg2IDguNjAxMzYgMTMuODI2OSA5LjE0OTgzIDEzLjk1ODZDOS4zMjQyOSAxNC4wMDA0IDkuNTIxMjIgMTQuMDAwMyA5Ljc0OTY3IDE0TDkuOCAxNEgxMi4yTDEyLjI1MDMgMTRDMTIuNDc4OCAxNC4wMDAzIDEyLjY3NTcgMTQuMDAwNCAxMi44NTAyIDEzLjk1ODZDMTMuMzk4NiAxMy44MjY5IDEzLjgyNjkgMTMuMzk4NiAxMy45NTg2IDEyLjg1MDJDMTQuMDAwNCAxMi42NzU3IDE0LjAwMDMgMTIuNDc4OCAxNCAxMi4yNTAzTDE0IDEyLjJWOS44TDE0IDkuNzQ5NjdDMTQuMDAwMyA5LjUyMTIyIDE0LjAwMDQgOS4zMjQyOSAxMy45NTg2IDkuMTQ5ODNDMTMuODI2OSA4LjYwMTM2IDEzLjM5ODYgOC4xNzMxMiAxMi44NTAyIDguMDQxNDVDMTIuNjc1NyA3Ljk5OTU2IDEyLjQ3ODggNy45OTk3NSAxMi4yNTAzIDcuOTk5OTdMMTIuMiA4SDkuOFpNOS4zODMyOCA5LjAxMzgyQzkuNDI2MzIgOS4wMDM0OCA5LjQ5MjIyIDkgOS44IDlIMTIuMkMxMi41MDc4IDkgMTIuNTczNyA5LjAwMzQ4IDEyLjYxNjcgOS4wMTM4MkMxMi43OTk1IDkuMDU3NzEgMTIuOTQyMyA5LjIwMDQ1IDEyLjk4NjIgOS4zODMyOEMxMi45OTY1IDkuNDI2MzIgMTMgOS40OTIyMiAxMyA5LjhWMTIuMkMxMyAxMi41MDc4IDEyLjk5NjUgMTIuNTczNyAxMi45ODYyIDEyLjYxNjdDMTIuOTQyMyAxMi43OTk1IDEyLjc5OTUgMTIuOTQyMyAxMi42MTY3IDEyLjk4NjJDMTIuNTczNyAxMi45OTY1IDEyLjUwNzggMTMgMTIuMiAxM0g5LjhDOS40OTIyMiAxMyA5LjQyNjMyIDEyLjk5NjUgOS4zODMyOCAxMi45ODYyQzkuMjAwNDUgMTIuOTQyMyA5LjA1NzcxIDEyLjc5OTUgOS4wMTM4MiAxMi42MTY3QzkuMDAzNDggMTIuNTczNyA5IDEyLjUwNzggOSAxMi4yVjkuOEM5IDkuNDkyMjIgOS4wMDM0OCA5LjQyNjMyIDkuMDEzODIgOS4zODMyOEM5LjA1NzcxIDkuMjAwNDUgOS4yMDA0NSA5LjA1NzcxIDkuMzgzMjggOS4wMTM4MlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHFlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjAwMDE0IDIuNzM4OTVDMy4wMDAxNCAyLjk0Njk4IDIuNzYwODcgMy4wNjQwMSAyLjU5NjY2IDIuOTM2MjhMMS4wMDM4NiAxLjY5NzQ0QzAuODc1MTc3IDEuNTk3MzUgMC44NzUxNzcgMS40MDI4NiAxLjAwMzg2IDEuMzAyNzdMMi41OTY2NiAwLjA2MzkyOEMyLjc2MDg3IC0wLjA2Mzc5NDQgMy4wMDAxNCAwLjA1MzIyOTMgMy4wMDAxNCAwLjI2MTI2NlYxLjAwMDEySDkuMDAwMDlWMC4yNjEyOTZDOS4wMDAwOSAwLjA1MzI1OTEgOS4yMzkzNiAtMC4wNjM3NjQ2IDkuNDAzNTggMC4wNjM5NTc4TDEwLjk5NjQgMS4zMDI4QzExLjEyNTEgMS40MDI4OSAxMS4xMjUxIDEuNTk3MzggMTAuOTk2NCAxLjY5NzQ3TDkuNDAzNTggMi45MzYzMUM5LjIzOTM2IDMuMDY0MDQgOS4wMDAwOSAyLjk0NzAxIDkuMDAwMDkgMi43Mzg5OFYyLjAwMDEySDMuMDAwMTRWMi43Mzg5NVpNOS41MDAwMiA0Ljk5OTk4SDIuNTAwMDJDMi4yMjM4OCA0Ljk5OTk4IDIuMDAwMDIgNS4yMjM4NCAyLjAwMDAyIDUuNDk5OThWMTIuNUMyLjAwMDAyIDEyLjc3NjEgMi4yMjM4OCAxMyAyLjUwMDAyIDEzSDkuNTAwMDJDOS43NzYxNiAxMyAxMCAxMi43NzYxIDEwIDEyLjVWNS40OTk5OEMxMCA1LjIyMzg0IDkuNzc2MTYgNC45OTk5OCA5LjUwMDAyIDQuOTk5OThaTTIuNTAwMDIgMy45OTk5OEMxLjY3MTU5IDMuOTk5OTggMS4wMDAwMiA0LjY3MTU2IDEuMDAwMDIgNS40OTk5OFYxMi41QzEuMDAwMDIgMTMuMzI4NCAxLjY3MTU5IDE0IDIuNTAwMDIgMTRIOS41MDAwMkMxMC4zMjg0IDE0IDExIDEzLjMyODQgMTEgMTIuNVY1LjQ5OTk4QzExIDQuNjcxNTYgMTAuMzI4NCAzLjk5OTk4IDkuNTAwMDIgMy45OTk5OEgyLjUwMDAyWk0xNC43Mzg5IDYuMDAwMDFIMTRWMTJIMTQuNzM4OUMxNC45NDY5IDEyIDE1LjA2NCAxMi4yMzkzIDE0LjkzNjIgMTIuNDAzNUwxMy42OTc0IDEzLjk5NjNDMTMuNTk3MyAxNC4xMjUgMTMuNDAyOCAxNC4xMjUgMTMuMzAyNyAxMy45OTYzTDEyLjA2MzkgMTIuNDAzNUMxMS45MzYyIDEyLjIzOTMgMTIuMDUzMiAxMiAxMi4yNjEyIDEySDEzVjYuMDAwMDFIMTIuMjYxMkMxMi4wNTMyIDYuMDAwMDEgMTEuOTM2MSA1Ljc2MDc0IDEyLjA2MzkgNS41OTY1M0wxMy4zMDI3IDQuMDAzNzNDMTMuNDAyOCAzLjg3NTA1IDEzLjU5NzMgMy44NzUwNSAxMy42OTc0IDQuMDAzNzRMMTQuOTM2MiA1LjU5NjUzQzE1LjA2MzkgNS43NjA3NCAxNC45NDY5IDYuMDAwMDEgMTQuNzM4OSA2LjAwMDAxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sWWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5OTEgMC44NzcwNzVDMy44NDIyMiAwLjg3NzA3NSAwLjg3NzA3NSAzLjg0MjIyIDAuODc3MDc1IDcuNDk5OTFDMC44NzcwNzUgMTEuMTU3NiAzLjg0MjIyIDE0LjEyMjcgNy40OTk5MSAxNC4xMjI3QzExLjE1NzYgMTQuMTIyNyAxNC4xMjI3IDExLjE1NzYgMTQuMTIyNyA3LjQ5OTkxQzE0LjEyMjcgMy44NDIyMiAxMS4xNTc2IDAuODc3MDc1IDcuNDk5OTEgMC44NzcwNzVaTTEuODI3MDggNy40OTk5MUMxLjgyNzA4IDQuMzY2ODkgNC4zNjY4OSAxLjgyNzA3IDcuNDk5OTEgMS44MjcwN0MxMC42MzI5IDEuODI3MDcgMTMuMTcyNyA0LjM2Njg5IDEzLjE3MjcgNy40OTk5MUMxMy4xNzI3IDEwLjYzMjkgMTAuNjMyOSAxMy4xNzI3IDcuNDk5OTEgMTMuMTcyN0M0LjM2Njg5IDEzLjE3MjcgMS44MjcwOCAxMC42MzI5IDEuODI3MDggNy40OTk5MVpNOC4zNzI4NyA3LjUwMDA2QzguMzcyODcgNy45ODE5NiA3Ljk4MjIxIDguMzcyNjMgNy41MDAzIDguMzcyNjNDNy4wMTgzOSA4LjM3MjYzIDYuNjI3NzMgNy45ODE5NiA2LjYyNzczIDcuNTAwMDZDNi42Mjc3MyA3LjAxODE1IDcuMDE4MzkgNi42Mjc0OCA3LjUwMDMgNi42Mjc0OEM3Ljk4MjIxIDYuNjI3NDggOC4zNzI4NyA3LjAxODE1IDguMzcyODcgNy41MDAwNlpNOS4zMjI4NyA3LjUwMDA2QzkuMzIyODcgOC41MDY2NCA4LjUwNjg4IDkuMzIyNjMgNy41MDAzIDkuMzIyNjNDNi40OTM3MiA5LjMyMjYzIDUuNjc3NzMgOC41MDY2NCA1LjY3NzczIDcuNTAwMDZDNS42Nzc3MyA2LjQ5MzQ4IDYuNDkzNzIgNS42Nzc0OCA3LjUwMDMgNS42Nzc0OEM4LjUwNjg4IDUuNjc3NDggOS4zMjI4NyA2LjQ5MzQ4IDkuMzIyODcgNy41MDAwNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEtlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yIDcuNUMyIDcuMjIzODYgMi4yMjM4NiA3IDIuNSA3SDEyLjVDMTIuNzc2MSA3IDEzIDcuMjIzODYgMTMgNy41QzEzIDcuNzc2MTQgMTIuNzc2MSA4IDEyLjUgOEgyLjVDMi4yMjM4NiA4IDIgNy43NzYxNCAyIDcuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFhlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUgMkM3Ljc3NjE0IDIgOCAyLjIyMzg2IDggMi41TDggMTIuNUM4IDEyLjc3NjEgNy43NzYxNCAxMyA3LjUgMTNDNy4yMjM4NiAxMyA3IDEyLjc3NjEgNyAxMi41TDcgMi41QzcgMi4yMjM4NiA3LjIyMzg2IDIgNy41IDJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxKZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41IDkuMTI1QzguMzk3NDYgOS4xMjUgOS4xMjUgOC4zOTc0NiA5LjEyNSA3LjVDOS4xMjUgNi42MDI1NCA4LjM5NzQ2IDUuODc1IDcuNSA1Ljg3NUM2LjYwMjU0IDUuODc1IDUuODc1IDYuNjAyNTQgNS44NzUgNy41QzUuODc1IDguMzk3NDYgNi42MDI1NCA5LjEyNSA3LjUgOS4xMjVaTTcuNSAxMC4xMjVDOC45NDk3NSAxMC4xMjUgMTAuMTI1IDguOTQ5NzUgMTAuMTI1IDcuNUMxMC4xMjUgNi4wNTAyNSA4Ljk0OTc1IDQuODc1IDcuNSA0Ljg3NUM2LjA1MDI1IDQuODc1IDQuODc1IDYuMDUwMjUgNC44NzUgNy41QzQuODc1IDguOTQ5NzUgNi4wNTAyNSAxMC4xMjUgNy41IDEwLjEyNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFFlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk05Ljg3NSA3LjVDOS44NzUgOC44MTE2OCA4LjgxMTY4IDkuODc1IDcuNSA5Ljg3NUM2LjE4ODMyIDkuODc1IDUuMTI1IDguODExNjggNS4xMjUgNy41QzUuMTI1IDYuMTg4MzIgNi4xODgzMiA1LjEyNSA3LjUgNS4xMjVDOC44MTE2OCA1LjEyNSA5Ljg3NSA2LjE4ODMyIDkuODc1IDcuNVpcIixmaWxsOm59KSl9LGV0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjYyNSA3LjVDMy42MjUgOC4xMjEzMiAzLjEyMTMyIDguNjI1IDIuNSA4LjYyNUMxLjg3ODY4IDguNjI1IDEuMzc1IDguMTIxMzIgMS4zNzUgNy41QzEuMzc1IDYuODc4NjggMS44Nzg2OCA2LjM3NSAyLjUgNi4zNzVDMy4xMjEzMiA2LjM3NSAzLjYyNSA2Ljg3ODY4IDMuNjI1IDcuNVpNOC42MjUgNy41QzguNjI1IDguMTIxMzIgOC4xMjEzMiA4LjYyNSA3LjUgOC42MjVDNi44Nzg2OCA4LjYyNSA2LjM3NSA4LjEyMTMyIDYuMzc1IDcuNUM2LjM3NSA2Ljg3ODY4IDYuODc4NjggNi4zNzUgNy41IDYuMzc1QzguMTIxMzIgNi4zNzUgOC42MjUgNi44Nzg2OCA4LjYyNSA3LjVaTTEyLjUgOC42MjVDMTMuMTIxMyA4LjYyNSAxMy42MjUgOC4xMjEzMiAxMy42MjUgNy41QzEzLjYyNSA2Ljg3ODY4IDEzLjEyMTMgNi4zNzUgMTIuNSA2LjM3NUMxMS44Nzg3IDYuMzc1IDExLjM3NSA2Ljg3ODY4IDExLjM3NSA3LjVDMTEuMzc1IDguMTIxMzIgMTEuODc4NyA4LjYyNSAxMi41IDguNjI1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTguNjI1IDIuNUM4LjYyNSAzLjEyMTMyIDguMTIxMzIgMy42MjUgNy41IDMuNjI1QzYuODc4NjggMy42MjUgNi4zNzUgMy4xMjEzMiA2LjM3NSAyLjVDNi4zNzUgMS44Nzg2OCA2Ljg3ODY4IDEuMzc1IDcuNSAxLjM3NUM4LjEyMTMyIDEuMzc1IDguNjI1IDEuODc4NjggOC42MjUgMi41Wk04LjYyNSA3LjVDOC42MjUgOC4xMjEzMiA4LjEyMTMyIDguNjI1IDcuNSA4LjYyNUM2Ljg3ODY4IDguNjI1IDYuMzc1IDguMTIxMzIgNi4zNzUgNy41QzYuMzc1IDYuODc4NjggNi44Nzg2OCA2LjM3NSA3LjUgNi4zNzVDOC4xMjEzMiA2LjM3NSA4LjYyNSA2Ljg3ODY4IDguNjI1IDcuNVpNNy41IDEzLjYyNUM4LjEyMTMyIDEzLjYyNSA4LjYyNSAxMy4xMjEzIDguNjI1IDEyLjVDOC42MjUgMTEuODc4NyA4LjEyMTMyIDExLjM3NSA3LjUgMTEuMzc1QzYuODc4NjggMTEuMzc1IDYuMzc1IDExLjg3ODcgNi4zNzUgMTIuNUM2LjM3NSAxMy4xMjEzIDYuODc4NjggMTMuNjI1IDcuNSAxMy42MjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxudD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy44NTM1NSAyLjE0NjQ1QzMuNjU4MjkgMS45NTExOCAzLjM0MTcxIDEuOTUxMTggMy4xNDY0NSAyLjE0NjQ1QzIuOTUxMTggMi4zNDE3MSAyLjk1MTE4IDIuNjU4MjkgMy4xNDY0NSAyLjg1MzU1TDcuMTQ2NDUgNi44NTM1NUM3LjM0MTcxIDcuMDQ4ODIgNy42NTgyOSA3LjA0ODgyIDcuODUzNTUgNi44NTM1NUwxMS44NTM2IDIuODUzNTVDMTIuMDQ4OCAyLjY1ODI5IDEyLjA0ODggMi4zNDE3MSAxMS44NTM2IDIuMTQ2NDVDMTEuNjU4MyAxLjk1MTE4IDExLjM0MTcgMS45NTExOCAxMS4xNDY0IDIuMTQ2NDVMNy41IDUuNzkyODlMMy44NTM1NSAyLjE0NjQ1Wk0zLjg1MzU1IDguMTQ2NDVDMy42NTgyOSA3Ljk1MTE4IDMuMzQxNzEgNy45NTExOCAzLjE0NjQ1IDguMTQ2NDVDMi45NTExOCA4LjM0MTcxIDIuOTUxMTggOC42NTgyOSAzLjE0NjQ1IDguODUzNTVMNy4xNDY0NSAxMi44NTM2QzcuMzQxNzEgMTMuMDQ4OCA3LjY1ODI5IDEzLjA0ODggNy44NTM1NSAxMi44NTM2TDExLjg1MzYgOC44NTM1NUMxMi4wNDg4IDguNjU4MjkgMTIuMDQ4OCA4LjM0MTcxIDExLjg1MzYgOC4xNDY0NUMxMS42NTgzIDcuOTUxMTggMTEuMzQxNyA3Ljk1MTE4IDExLjE0NjQgOC4xNDY0NUw3LjUgMTEuNzkyOUwzLjg1MzU1IDguMTQ2NDVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxydD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNi44NTM1NSAzLjg1MzU1QzcuMDQ4ODIgMy42NTgyOSA3LjA0ODgyIDMuMzQxNzEgNi44NTM1NSAzLjE0NjQ1QzYuNjU4MjkgMi45NTExOCA2LjM0MTcxIDIuOTUxMTggNi4xNDY0NSAzLjE0NjQ1TDIuMTQ2NDUgNy4xNDY0NUMxLjk1MTE4IDcuMzQxNzEgMS45NTExOCA3LjY1ODI5IDIuMTQ2NDUgNy44NTM1NUw2LjE0NjQ1IDExLjg1MzZDNi4zNDE3MSAxMi4wNDg4IDYuNjU4MjkgMTIuMDQ4OCA2Ljg1MzU1IDExLjg1MzZDNy4wNDg4MiAxMS42NTgzIDcuMDQ4ODIgMTEuMzQxNyA2Ljg1MzU1IDExLjE0NjRMMy4yMDcxMSA3LjVMNi44NTM1NSAzLjg1MzU1Wk0xMi44NTM2IDMuODUzNTVDMTMuMDQ4OCAzLjY1ODI5IDEzLjA0ODggMy4zNDE3MSAxMi44NTM2IDMuMTQ2NDVDMTIuNjU4MyAyLjk1MTE4IDEyLjM0MTcgMi45NTExOCAxMi4xNDY0IDMuMTQ2NDVMOC4xNDY0NSA3LjE0NjQ1QzcuOTUxMTggNy4zNDE3MSA3Ljk1MTE4IDcuNjU4MjkgOC4xNDY0NSA3Ljg1MzU1TDEyLjE0NjQgMTEuODUzNkMxMi4zNDE3IDEyLjA0ODggMTIuNjU4MyAxMi4wNDg4IDEyLjg1MzYgMTEuODUzNkMxMy4wNDg4IDExLjY1ODMgMTMuMDQ4OCAxMS4zNDE3IDEyLjg1MzYgMTEuMTQ2NEw5LjIwNzExIDcuNUwxMi44NTM2IDMuODUzNTVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxvdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi4xNDY0NSAxMS4xNDY0QzEuOTUxMTggMTEuMzQxNyAxLjk1MTE4IDExLjY1ODMgMi4xNDY0NSAxMS44NTM2QzIuMzQxNzEgMTIuMDQ4OCAyLjY1ODI5IDEyLjA0ODggMi44NTM1NSAxMS44NTM2TDYuODUzNTUgNy44NTM1NUM3LjA0ODgyIDcuNjU4MjkgNy4wNDg4MiA3LjM0MTcxIDYuODUzNTUgNy4xNDY0NUwyLjg1MzU1IDMuMTQ2NDVDMi42NTgyOSAyLjk1MTE4IDIuMzQxNzEgMi45NTExOCAyLjE0NjQ1IDMuMTQ2NDVDMS45NTExOCAzLjM0MTcxIDEuOTUxMTggMy42NTgyOSAyLjE0NjQ1IDMuODUzNTVMNS43OTI4OSA3LjVMMi4xNDY0NSAxMS4xNDY0Wk04LjE0NjQ1IDExLjE0NjRDNy45NTExOCAxMS4zNDE3IDcuOTUxMTggMTEuNjU4MyA4LjE0NjQ1IDExLjg1MzZDOC4zNDE3MSAxMi4wNDg4IDguNjU4MjkgMTIuMDQ4OCA4Ljg1MzU1IDExLjg1MzZMMTIuODUzNiA3Ljg1MzU1QzEzLjA0ODggNy42NTgyOSAxMy4wNDg4IDcuMzQxNzEgMTIuODUzNiA3LjE0NjQ1TDguODUzNTUgMy4xNDY0NUM4LjY1ODI5IDIuOTUxMTggOC4zNDE3MSAyLjk1MTE4IDguMTQ2NDUgMy4xNDY0NUM3Ljk1MTE4IDMuMzQxNzEgNy45NTExOCAzLjY1ODI5IDguMTQ2NDUgMy44NTM1NUwxMS43OTI5IDcuNUw4LjE0NjQ1IDExLjE0NjRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxpdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTEuMTQ2NCA2Ljg1MzU1QzExLjM0MTcgNy4wNDg4MiAxMS42NTgzIDcuMDQ4ODIgMTEuODUzNiA2Ljg1MzU1QzEyLjA0ODggNi42NTgyOSAxMi4wNDg4IDYuMzQxNzEgMTEuODUzNiA2LjE0NjQ1TDcuODUzNTUgMi4xNDY0NUM3LjY1ODI5IDEuOTUxMTggNy4zNDE3MSAxLjk1MTE4IDcuMTQ2NDUgMi4xNDY0NUwzLjE0NjQ1IDYuMTQ2NDVDMi45NTExOCA2LjM0MTcxIDIuOTUxMTggNi42NTgyOSAzLjE0NjQ1IDYuODUzNTVDMy4zNDE3MSA3LjA0ODgyIDMuNjU4MjkgNy4wNDg4MiAzLjg1MzU1IDYuODUzNTVMNy41IDMuMjA3MTFMMTEuMTQ2NCA2Ljg1MzU1Wk0xMS4xNDY0IDEyLjg1MzZDMTEuMzQxNyAxMy4wNDg4IDExLjY1ODMgMTMuMDQ4OCAxMS44NTM2IDEyLjg1MzZDMTIuMDQ4OCAxMi42NTgzIDEyLjA0ODggMTIuMzQxNyAxMS44NTM2IDEyLjE0NjRMNy44NTM1NSA4LjE0NjQ1QzcuNjU4MjkgNy45NTExOCA3LjM0MTcxIDcuOTUxMTggNy4xNDY0NSA4LjE0NjQ1TDMuMTQ2NDUgMTIuMTQ2NEMyLjk1MTE4IDEyLjM0MTcgMi45NTExOCAxMi42NTgzIDMuMTQ2NDUgMTIuODUzNkMzLjM0MTcxIDEzLjA0ODggMy42NTgyOSAxMy4wNDg4IDMuODUzNTUgMTIuODUzNkw3LjUgOS4yMDcxMUwxMS4xNDY0IDEyLjg1MzZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxhdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41MDAwNSAxLjA0OTk5QzcuNzQ4NTggMS4wNDk5OSA3Ljk1MDA1IDEuMjUxNDYgNy45NTAwNSAxLjQ5OTk5VjguNDEzNTlMMTAuMTgxOSA2LjE4MTc5QzEwLjM1NzYgNi4wMDYwNSAxMC42NDI1IDYuMDA2MDUgMTAuODE4MiA2LjE4MTc5QzEwLjk5NCA2LjM1NzUzIDEwLjk5NCA2LjY0MjQ1IDEwLjgxODIgNi44MTgxOUw3LjgxODI1IDkuODE4MTlDNy42NDI1MSA5Ljk5MzkyIDcuMzU3NTkgOS45OTM5MiA3LjE4MTg1IDkuODE4MTlMNC4xODE4NSA2LjgxODE5QzQuMDA2MTEgNi42NDI0NSA0LjAwNjExIDYuMzU3NTMgNC4xODE4NSA2LjE4MTc5QzQuMzU3NTkgNi4wMDYwNSA0LjY0MjUxIDYuMDA2MDUgNC44MTgyNSA2LjE4MTc5TDcuMDUwMDUgOC40MTM1OVYxLjQ5OTk5QzcuMDUwMDUgMS4yNTE0NiA3LjI1MTUyIDEuMDQ5OTkgNy41MDAwNSAxLjA0OTk5Wk0yLjUgMTBDMi43NzYxNCAxMCAzIDEwLjIyMzkgMyAxMC41VjEyQzMgMTIuNTUzOSAzLjQ0NTY1IDEzIDMuOTk2MzUgMTNIMTEuMDAxMkMxMS41NTI5IDEzIDEyIDEyLjU1MjggMTIgMTJWMTAuNUMxMiAxMC4yMjM5IDEyLjIyMzkgMTAgMTIuNSAxMEMxMi43NzYxIDEwIDEzIDEwLjIyMzkgMTMgMTAuNVYxMkMxMyAxMy4xMDQxIDEyLjEwNjIgMTQgMTEuMDAxMiAxNEgzLjk5NjM1QzIuODkwMTkgMTQgMiAxMy4xMDMgMiAxMlYxMC41QzIgMTAuMjIzOSAyLjIyMzg2IDEwIDIuNSAxMFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGx0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjQuNVwiLGN5OlwiMi41XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjQuNVwiLGN5OlwiNC41XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjQuNVwiLGN5OlwiNi40OTlcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiNC41XCIsY3k6XCI4LjQ5OVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI0LjVcIixjeTpcIjEwLjQ5OFwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI0LjVcIixjeTpcIjEyLjQ5OFwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI2LjVcIixjeTpcIjIuNVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI2LjVcIixjeTpcIjQuNVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI2LjVcIixjeTpcIjYuNDk5XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjYuNVwiLGN5OlwiOC40OTlcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiNi41XCIsY3k6XCIxMC40OThcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiNi41XCIsY3k6XCIxMi40OThcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiOC40OTlcIixjeTpcIjIuNVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI4LjQ5OVwiLGN5OlwiNC41XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjguNDk5XCIsY3k6XCI2LjQ5OVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI4LjQ5OVwiLGN5OlwiOC40OTlcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiOC40OTlcIixjeTpcIjEwLjQ5OFwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCI4LjQ5OVwiLGN5OlwiMTIuNDk4XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjEwLjQ5OVwiLGN5OlwiMi41XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjEwLjQ5OVwiLGN5OlwiNC41XCIscjpcIi42XCIsZmlsbDpufSksKDAsci5jcmVhdGVFbGVtZW50KShcImNpcmNsZVwiLHtjeDpcIjEwLjQ5OVwiLGN5OlwiNi40OTlcIixyOlwiLjZcIixmaWxsOm59KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwiY2lyY2xlXCIse2N4OlwiMTAuNDk5XCIsY3k6XCI4LjQ5OVwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCIxMC40OTlcIixjeTpcIjEwLjQ5OFwiLHI6XCIuNlwiLGZpbGw6bn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJjaXJjbGVcIix7Y3g6XCIxMC40OTlcIixjeTpcIjEyLjQ5OFwiLHI6XCIuNlwiLGZpbGw6bn0pKX0sc3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUuNSA0LjYyNUM2LjEyMTMyIDQuNjI1IDYuNjI1IDQuMTIxMzIgNi42MjUgMy41QzYuNjI1IDIuODc4NjggNi4xMjEzMiAyLjM3NSA1LjUgMi4zNzVDNC44Nzg2OCAyLjM3NSA0LjM3NSAyLjg3ODY4IDQuMzc1IDMuNUM0LjM3NSA0LjEyMTMyIDQuODc4NjggNC42MjUgNS41IDQuNjI1Wk05LjUgNC42MjVDMTAuMTIxMyA0LjYyNSAxMC42MjUgNC4xMjEzMiAxMC42MjUgMy41QzEwLjYyNSAyLjg3ODY4IDEwLjEyMTMgMi4zNzUgOS41IDIuMzc1QzguODc4NjggMi4zNzUgOC4zNzUgMi44Nzg2OCA4LjM3NSAzLjVDOC4zNzUgNC4xMjEzMiA4Ljg3ODY4IDQuNjI1IDkuNSA0LjYyNVpNMTAuNjI1IDcuNUMxMC42MjUgOC4xMjEzMiAxMC4xMjEzIDguNjI1IDkuNSA4LjYyNUM4Ljg3ODY4IDguNjI1IDguMzc1IDguMTIxMzIgOC4zNzUgNy41QzguMzc1IDYuODc4NjggOC44Nzg2OCA2LjM3NSA5LjUgNi4zNzVDMTAuMTIxMyA2LjM3NSAxMC42MjUgNi44Nzg2OCAxMC42MjUgNy41Wk01LjUgOC42MjVDNi4xMjEzMiA4LjYyNSA2LjYyNSA4LjEyMTMyIDYuNjI1IDcuNUM2LjYyNSA2Ljg3ODY4IDYuMTIxMzIgNi4zNzUgNS41IDYuMzc1QzQuODc4NjggNi4zNzUgNC4zNzUgNi44Nzg2OCA0LjM3NSA3LjVDNC4zNzUgOC4xMjEzMiA0Ljg3ODY4IDguNjI1IDUuNSA4LjYyNVpNMTAuNjI1IDExLjVDMTAuNjI1IDEyLjEyMTMgMTAuMTIxMyAxMi42MjUgOS41IDEyLjYyNUM4Ljg3ODY4IDEyLjYyNSA4LjM3NSAxMi4xMjEzIDguMzc1IDExLjVDOC4zNzUgMTAuODc4NyA4Ljg3ODY4IDEwLjM3NSA5LjUgMTAuMzc1QzEwLjEyMTMgMTAuMzc1IDEwLjYyNSAxMC44Nzg3IDEwLjYyNSAxMS41Wk01LjUgMTIuNjI1QzYuMTIxMzIgMTIuNjI1IDYuNjI1IDEyLjEyMTMgNi42MjUgMTEuNUM2LjYyNSAxMC44Nzg3IDYuMTIxMzIgMTAuMzc1IDUuNSAxMC4zNzVDNC44Nzg2OCAxMC4zNzUgNC4zNzUgMTAuODc4NyA0LjM3NSAxMS41QzQuMzc1IDEyLjEyMTMgNC44Nzg2OCAxMi42MjUgNS41IDEyLjYyNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGN0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjQ5OTk4IDQuMDk5OThDMi4yNzkwNiA0LjA5OTk4IDIuMDk5OTggNC4yNzkwNiAyLjA5OTk4IDQuNDk5OThDMi4wOTk5OCA0LjcyMDg5IDIuMjc5MDYgNC44OTk5OCAyLjQ5OTk4IDQuODk5OThIMTIuNUMxMi43MjA5IDQuODk5OTggMTIuOSA0LjcyMDg5IDEyLjkgNC40OTk5OEMxMi45IDQuMjc5MDYgMTIuNzIwOSA0LjA5OTk4IDEyLjUgNC4wOTk5OEgyLjQ5OTk4Wk0yLjQ5OTk4IDYuMDk5OThDMi4yNzkwNiA2LjA5OTk4IDIuMDk5OTggNi4yNzkwNiAyLjA5OTk4IDYuNDk5OThDMi4wOTk5OCA2LjcyMDg5IDIuMjc5MDYgNi44OTk5OCAyLjQ5OTk4IDYuODk5OThIMTIuNUMxMi43MjA5IDYuODk5OTggMTIuOSA2LjcyMDg5IDEyLjkgNi40OTk5OEMxMi45IDYuMjc5MDYgMTIuNzIwOSA2LjA5OTk4IDEyLjUgNi4wOTk5OEgyLjQ5OTk4Wk0yLjA5OTk4IDguNDk5OThDMi4wOTk5OCA4LjI3OTA2IDIuMjc5MDYgOC4wOTk5OCAyLjQ5OTk4IDguMDk5OThIMTIuNUMxMi43MjA5IDguMDk5OTggMTIuOSA4LjI3OTA2IDEyLjkgOC40OTk5OEMxMi45IDguNzIwODkgMTIuNzIwOSA4Ljg5OTk4IDEyLjUgOC44OTk5OEgyLjQ5OTk4QzIuMjc5MDYgOC44OTk5OCAyLjA5OTk4IDguNzIwODkgMi4wOTk5OCA4LjQ5OTk4Wk0yLjQ5OTk4IDEwLjFDMi4yNzkwNiAxMC4xIDIuMDk5OTggMTAuMjc5MSAyLjA5OTk4IDEwLjVDMi4wOTk5OCAxMC43MjA5IDIuMjc5MDYgMTAuOSAyLjQ5OTk4IDEwLjlIMTIuNUMxMi43MjA5IDEwLjkgMTIuOSAxMC43MjA5IDEyLjkgMTAuNUMxMi45IDEwLjI3OTEgMTIuNzIwOSAxMC4xIDEyLjUgMTAuMUgyLjQ5OTk4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuMDk5OTggMTIuNUM0LjA5OTk4IDEyLjcyMDkgNC4yNzkwNiAxMi45IDQuNDk5OTggMTIuOUM0LjcyMDg5IDEyLjkgNC44OTk5OCAxMi43MjA5IDQuODk5OTggMTIuNUw0Ljg5OTk4IDIuNTAwMDJDNC44OTk5OCAyLjI3OTExIDQuNzIwODkgMi4xMDAwMyA0LjQ5OTk4IDIuMTAwMDNDNC4yNzkwNiAyLjEwMDAzIDQuMDk5OTggMi4yNzkxMSA0LjA5OTk4IDIuNTAwMDJMNC4wOTk5OCAxMi41Wk02LjA5OTk4IDEyLjVDNi4wOTk5OCAxMi43MjA5IDYuMjc5MDYgMTIuOSA2LjQ5OTk4IDEyLjlDNi43MjA4OSAxMi45IDYuODk5OTggMTIuNzIwOSA2Ljg5OTk4IDEyLjVMNi44OTk5OCAyLjUwMDAyQzYuODk5OTggMi4yNzkxMSA2LjcyMDg5IDIuMTAwMDMgNi40OTk5OCAyLjEwMDAzQzYuMjc5MDYgMi4xMDAwMyA2LjA5OTk4IDIuMjc5MTEgNi4wOTk5OCAyLjUwMDAyTDYuMDk5OTggMTIuNVpNOC40OTk5OCAxMi45QzguMjc5MDYgMTIuOSA4LjA5OTk4IDEyLjcyMDkgOC4wOTk5OCAxMi41TDguMDk5OTggMi41MDAwMkM4LjA5OTk4IDIuMjc5MTEgOC4yNzkwNiAyLjEwMDAyIDguNDk5OTggMi4xMDAwMkM4LjcyMDg5IDIuMTAwMDIgOC44OTk5OCAyLjI3OTExIDguODk5OTggMi41MDAwMkw4Ljg5OTk4IDEyLjVDOC44OTk5OCAxMi43MjA5IDguNzIwODkgMTIuOSA4LjQ5OTk4IDEyLjlaTTEwLjEgMTIuNUMxMC4xIDEyLjcyMDkgMTAuMjc5MSAxMi45IDEwLjUgMTIuOUMxMC43MjA5IDEyLjkgMTAuOSAxMi43MjA5IDEwLjkgMTIuNUwxMC45IDIuNTAwMDJDMTAuOSAyLjI3OTExIDEwLjcyMDkgMi4xMDAwMiAxMC41IDIuMTAwMDJDMTAuMjc5MSAyLjEwMDAyIDEwLjEgMi4yNzkxMSAxMC4xIDIuNTAwMDJMMTAuMSAxMi41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEwLjMyODUgMS4xMzYwN0MxMC4xMzMyIDAuOTQwODA5IDkuODE2NjIgMC45NDA4MDggOS42MjEzNiAxLjEzNjA3QzkuNDI2MDkgMS4zMzEzMyA5LjQyNjA5IDEuNjQ3OTIgOS42MjEzNiAxLjg0MzE4TDEwLjI3NDQgMi40OTYxOUw1LjQyNTYzIDYuMTMyNzRMNC4zMTgwNSA1LjAyNTE2QzQuMTIyNzkgNC44Mjk5IDMuODA2MjEgNC44Mjk5IDMuNjEwOTUgNS4wMjUxNkMzLjQxNTY5IDUuMjIwNDIgMy40MTU2OSA1LjUzNyAzLjYxMDk1IDUuNzMyMjZMNS4wMjUxNiA3LjE0NjQ4TDYuMDg1ODIgOC4yMDcxNEwyLjgxNTQ1IDExLjQ3NzVDMi42MjAxOSAxMS42NzI4IDIuNjIwMTkgMTEuOTg5NCAyLjgxNTQ1IDEyLjE4NDZDMy4wMTA3MiAxMi4zNzk5IDMuMzI3MyAxMi4zNzk5IDMuNTIyNTYgMTIuMTg0Nkw2Ljc5MjkzIDguOTE0MjVMNy44NTM1OSA5Ljk3NDkxTDkuMjY3OCAxMS4zODkxQzkuNDYzMDYgMTEuNTg0NCA5Ljc3OTY1IDExLjU4NDQgOS45NzQ5MSAxMS4zODkxQzEwLjE3MDIgMTEuMTkzOSAxMC4xNzAyIDEwLjg3NzMgOS45NzQ5MSAxMC42ODJMOC44NjczMyA5LjU3NDQzTDEyLjUwMzkgNC43MjU3TDEzLjE1NjkgNS4zNzg3MUMxMy4zNTIyIDUuNTczOTcgMTMuNjY4NyA1LjU3Mzk3IDEzLjg2NCA1LjM3ODcxQzE0LjA1OTMgNS4xODM0NSAxNC4wNTkzIDQuODY2ODcgMTMuODY0IDQuNjcxNkwxMi44MDMzIDMuNjEwOTRMMTEuMzg5MSAyLjE5NjczTDEwLjMyODUgMS4xMzYwN1pNNi4xMzk5MiA2Ljg0NzAyTDEwLjk4ODcgMy4yMTA0N0wxMS43ODk2IDQuMDExNDJMOC4xNTMwNSA4Ljg2MDE1TDYuMTM5OTIgNi44NDcwMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGR0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk05LjYyMTI5IDEuMTM2MDdDOS44MTY1NiAwLjk0MDgwOCAxMC4xMzMxIDAuOTQwODA5IDEwLjMyODQgMS4xMzYwN0wxMS4zODkxIDIuMTk2NzNMMTIuODAzMyAzLjYxMDk0TDEzLjg2MzkgNC42NzE2QzE0LjA1OTIgNC44NjY4NyAxNC4wNTkyIDUuMTgzNDUgMTMuODYzOSA1LjM3ODcxQzEzLjY2ODcgNS41NzM5NyAxMy4zNTIxIDUuNTczOTcgMTMuMTU2OCA1LjM3ODcxTDEyLjUwMzggNC43MjU3TDguODY3MjcgOS41NzQ0M0w5Ljk3NDg1IDEwLjY4MkMxMC4xNzAxIDEwLjg3NzMgMTAuMTcwMSAxMS4xOTM5IDkuOTc0ODUgMTEuMzg5MUM5Ljc3OTU5IDExLjU4NDQgOS40NjMgMTEuNTg0NCA5LjI2Nzc0IDExLjM4OTFMNy44NTM1MyA5Ljk3NDkxTDYuNzkyODcgOC45MTQyNUwzLjUyMjUgMTIuMTg0NkMzLjMyNzI0IDEyLjM3OTkgMy4wMTA2NSAxMi4zNzk5IDIuODE1MzkgMTIuMTg0NkMyLjYyMDEzIDExLjk4OTQgMi42MjAxMyAxMS42NzI4IDIuODE1MzkgMTEuNDc3NUw2LjA4NTc2IDguMjA3MTRMNS4wMjUxIDcuMTQ2NDhMMy42MTA4OSA1LjczMjI2QzMuNDE1NjMgNS41MzcgMy40MTU2MiA1LjIyMDQyIDMuNjEwODkgNS4wMjUxNkMzLjgwNjE1IDQuODI5OSA0LjEyMjczIDQuODI5OSA0LjMxNzk5IDUuMDI1MTZMNS40MjU1NyA2LjEzMjc0TDEwLjI3NDMgMi40OTYxOUw5LjYyMTI5IDEuODQzMThDOS40MjYwMyAxLjY0NzkyIDkuNDI2MDMgMS4zMzEzMyA5LjYyMTI5IDEuMTM2MDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk05LjYyMTI5IDEuMTM2MDdDOS44MTY1NiAwLjk0MDgwOCAxMC4xMzMxIDAuOTQwODA5IDEwLjMyODQgMS4xMzYwN0wxMS4zODkxIDIuMTk2NzNMMTIuODAzMyAzLjYxMDk0TDEzLjg2MzkgNC42NzE2QzE0LjA1OTIgNC44NjY4NyAxNC4wNTkyIDUuMTgzNDUgMTMuODYzOSA1LjM3ODcxQzEzLjY2ODcgNS41NzM5NyAxMy4zNTIxIDUuNTczOTcgMTMuMTU2OCA1LjM3ODcxTDEyLjUwMzggNC43MjU3TDguODY3MjcgOS41NzQ0M0w5Ljk3NDg1IDEwLjY4MkMxMC4xNzAxIDEwLjg3NzMgMTAuMTcwMSAxMS4xOTM5IDkuOTc0ODUgMTEuMzg5MUM5Ljc3OTU5IDExLjU4NDQgOS40NjMgMTEuNTg0NCA5LjI2Nzc0IDExLjM4OTFMNy44NTM1MyA5Ljk3NDkxTDYuNzkyODcgOC45MTQyNUwzLjUyMjUgMTIuMTg0NkMzLjMyNzI0IDEyLjM3OTkgMy4wMTA2NSAxMi4zNzk5IDIuODE1MzkgMTIuMTg0NkMyLjYyMDEzIDExLjk4OTQgMi42MjAxMyAxMS42NzI4IDIuODE1MzkgMTEuNDc3NUw2LjA4NTc2IDguMjA3MTRMNS4wMjUxIDcuMTQ2NDhMMy42MTA4OSA1LjczMjI2QzMuNDE1NjMgNS41MzcgMy40MTU2MiA1LjIyMDQyIDMuNjEwODkgNS4wMjUxNkMzLjgwNjE1IDQuODI5OSA0LjEyMjczIDQuODI5OSA0LjMxNzk5IDUuMDI1MTZMNS40MjU1NyA2LjEzMjc0TDEwLjI3NDMgMi40OTYxOUw5LjYyMTI5IDEuODQzMThDOS40MjYwMyAxLjY0NzkyIDkuNDI2MDMgMS4zMzEzMyA5LjYyMTI5IDEuMTM2MDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxwdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTk5OSAzLjA5OTk4QzcuMjc5MDcgMy4wOTk5OCA3LjA5OTk5IDMuMjc5MDYgNy4wOTk5OSAzLjQ5OTk4QzcuMDk5OTkgMy43MjA4OSA3LjI3OTA3IDMuODk5OTggNy40OTk5OSAzLjg5OTk4SDE0LjVDMTQuNzIwOSAzLjg5OTk4IDE0LjkgMy43MjA4OSAxNC45IDMuNDk5OThDMTQuOSAzLjI3OTA2IDE0LjcyMDkgMy4wOTk5OCAxNC41IDMuMDk5OThINy40OTk5OVpNNy40OTk5OCA1LjFDNy4yNzkwNyA1LjEgNy4wOTk5OCA1LjI3OTA4IDcuMDk5OTggNS41QzcuMDk5OTggNS43MjA5MSA3LjI3OTA3IDUuOSA3LjQ5OTk4IDUuOUgxNC41QzE0LjcyMDkgNS45IDE0LjkgNS43MjA5MSAxNC45IDUuNUMxNC45IDUuMjc5MDggMTQuNzIwOSA1LjEgMTQuNSA1LjFINy40OTk5OFpNNy4xIDcuNUM3LjEgNy4yNzkwOCA3LjI3OTA5IDcuMSA3LjUgNy4xSDE0LjVDMTQuNzIwOSA3LjEgMTQuOSA3LjI3OTA4IDE0LjkgNy41QzE0LjkgNy43MjA5MSAxNC43MjA5IDcuOSAxNC41IDcuOUg3LjVDNy4yNzkwOSA3LjkgNy4xIDcuNzIwOTEgNy4xIDcuNVpNNy40OTk5OCA5LjFDNy4yNzkwNyA5LjEgNy4wOTk5OCA5LjI3OTA4IDcuMDk5OTggOS41QzcuMDk5OTggOS43MjA5MSA3LjI3OTA3IDkuOSA3LjQ5OTk4IDkuOUgxNC41QzE0LjcyMDkgOS45IDE0LjkgOS43MjA5MSAxNC45IDkuNUMxNC45IDkuMjc5MDggMTQuNzIwOSA5LjEgMTQuNSA5LjFINy40OTk5OFpNNy4wOTk5OCAxMS41QzcuMDk5OTggMTEuMjc5MSA3LjI3OTA3IDExLjEgNy40OTk5OCAxMS4xSDE0LjVDMTQuNzIwOSAxMS4xIDE0LjkgMTEuMjc5MSAxNC45IDExLjVDMTQuOSAxMS43MjA5IDE0LjcyMDkgMTEuOSAxNC41IDExLjlINy40OTk5OEM3LjI3OTA3IDExLjkgNy4wOTk5OCAxMS43MjA5IDcuMDk5OTggMTEuNVpNMi41IDkuMjUwMDNMNSA2LjAwMDAzSDBMMi41IDkuMjUwMDNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxodD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC41IDFDNC4yMjM4NiAxIDQgMS4yMjM4NiA0IDEuNUM0IDEuNzc2MTQgNC4yMjM4NiAyIDQuNSAySDEyVjEzSDQuNUM0LjIyMzg2IDEzIDQgMTMuMjIzOSA0IDEzLjVDNCAxMy43NzYxIDQuMjIzODYgMTQgNC41IDE0SDEyQzEyLjU1MjMgMTQgMTMgMTMuNTUyMyAxMyAxM1YyQzEzIDEuNDQ3NzIgMTIuNTUyMyAxIDEyIDFINC41Wk02LjYwMzU1IDQuODk2NDVDNi40MDgyOSA0LjcwMTE4IDYuMDkxNzEgNC43MDExOCA1Ljg5NjQ1IDQuODk2NDVDNS43MDExOCA1LjA5MTcxIDUuNzAxMTggNS40MDgyOSA1Ljg5NjQ1IDUuNjAzNTVMNy4yOTI4OSA3SDAuNUMwLjIyMzg1OCA3IDAgNy4yMjM4NiAwIDcuNUMwIDcuNzc2MTQgMC4yMjM4NTggOCAwLjUgOEg3LjI5Mjg5TDUuODk2NDUgOS4zOTY0NUM1LjcwMTE4IDkuNTkxNzEgNS43MDExOCA5LjkwODI5IDUuODk2NDUgMTAuMTAzNkM2LjA5MTcxIDEwLjI5ODggNi40MDgyOSAxMC4yOTg4IDYuNjAzNTUgMTAuMTAzNkw4Ljg1MzU1IDcuODUzNTVDOS4wNDg4MiA3LjY1ODI5IDkuMDQ4ODIgNy4zNDE3MSA4Ljg1MzU1IDcuMTQ2NDVMNi42MDM1NSA0Ljg5NjQ1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZ3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIgMi41QzIgMi4yMjM4NiAyLjIyMzg2IDIgMi41IDJINS41QzUuNzc2MTQgMiA2IDIuMjIzODYgNiAyLjVDNiAyLjc3NjE0IDUuNzc2MTQgMyA1LjUgM0gzVjUuNUMzIDUuNzc2MTQgMi43NzYxNCA2IDIuNSA2QzIuMjIzODYgNiAyIDUuNzc2MTQgMiA1LjVWMi41Wk05IDIuNUM5IDIuMjIzODYgOS4yMjM4NiAyIDkuNSAySDEyLjVDMTIuNzc2MSAyIDEzIDIuMjIzODYgMTMgMi41VjUuNUMxMyA1Ljc3NjE0IDEyLjc3NjEgNiAxMi41IDZDMTIuMjIzOSA2IDEyIDUuNzc2MTQgMTIgNS41VjNIOS41QzkuMjIzODYgMyA5IDIuNzc2MTQgOSAyLjVaTTIuNSA5QzIuNzc2MTQgOSAzIDkuMjIzODYgMyA5LjVWMTJINS41QzUuNzc2MTQgMTIgNiAxMi4yMjM5IDYgMTIuNUM2IDEyLjc3NjEgNS43NzYxNCAxMyA1LjUgMTNIMi41QzIuMjIzODYgMTMgMiAxMi43NzYxIDIgMTIuNVY5LjVDMiA5LjIyMzg2IDIuMjIzODYgOSAyLjUgOVpNMTIuNSA5QzEyLjc3NjEgOSAxMyA5LjIyMzg2IDEzIDkuNVYxMi41QzEzIDEyLjc3NjEgMTIuNzc2MSAxMyAxMi41IDEzSDkuNUM5LjIyMzg2IDEzIDkgMTIuNzc2MSA5IDEyLjVDOSAxMi4yMjM5IDkuMjIzODYgMTIgOS41IDEySDEyVjkuNUMxMiA5LjIyMzg2IDEyLjIyMzkgOSAxMi41IDlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx2dD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMSAyQzAuNDQ3NzE1IDIgMCAyLjQ0NzcyIDAgM1YxMkMwIDEyLjU1MjMgMC40NDc3MTUgMTMgMSAxM0gxNEMxNC41NTIzIDEzIDE1IDEyLjU1MjMgMTUgMTJWM0MxNSAyLjQ0NzcyIDE0LjU1MjMgMiAxNCAySDFaTTEgM0wxNCAzVjMuOTI0OTRDMTMuOTE3NCAzLjkyNDg2IDEzLjgzMzggMy45NDc1MSAxMy43NTg5IDMuOTk1MDVMNy41IDcuOTY3MDNMMS4yNDExMiAzLjk5NTA1QzEuMTY2MjEgMy45NDc1MSAxLjA4MjYgMy45MjQ4NiAxIDMuOTI0OTRWM1pNMSA0LjkwNzk3VjEySDE0VjQuOTA3OTdMNy43NDExMiA4Ljg3OTk1QzcuNTkzOTQgOC45NzMzNSA3LjQwNjA2IDguOTczMzUgNy4yNTg4OCA4Ljg3OTk1TDEgNC45MDc5N1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG10PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03Ljk0NzIxIDAuMTY0NTk0QzcuNjY1NjkgMC4wMjM4Mjk5IDcuMzM0MzEgMC4wMjM4MzAyIDcuMDUyNzkgMC4xNjQ1OTRMMC41NTI3ODYgMy40MTQ1OUMwLjIxNDAwMiAzLjU4Mzk5IDAgMy45MzAyNSAwIDQuMzA5MDJWMTJDMCAxMi41NTIzIDAuNDQ3NzE1IDEzIDEgMTNIMTRDMTQuNTUyMyAxMyAxNSAxMi41NTIzIDE1IDEyVjQuMzA5MDJDMTUgMy45MzAyNSAxNC43ODYgMy41ODM5OSAxNC40NDcyIDMuNDE0NTlMNy45NDcyMSAwLjE2NDU5NFpNMTMuNTY4OSA0LjA5MzQ5TDcuNSAxLjA1OTAyTDEuNDMxMDUgNC4wOTM0OUw3LjUgNy4yOTEzNkwxMy41Njg5IDQuMDkzNDlaTTEgNC44ODM2NlYxMkgxNFY0Ljg4MzY2TDcuNzA5NzcgOC4xOTgxM0M3LjU3ODQ4IDguMjY3MzEgNy40MjE1MiA4LjI2NzMxIDcuMjkwMjMgOC4xOTgxM0wxIDQuODgzNjZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxDdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC40NDQ5IDAuNjA4NzY1QzguMDE4MyAtMC4xMDcwMTUgNi45ODE3IC0wLjEwNzAxNSA2LjU1NTA5IDAuNjA4NzY2TDAuMTYxMTc4IDExLjMzNjhDLTAuMjc1ODI0IDEyLjA3IDAuMjUyNTAzIDEzIDEuMTA2MDggMTNIMTMuODkzOUMxNC43NDc1IDEzIDE1LjI3NTggMTIuMDcgMTQuODM4OCAxMS4zMzY4TDguNDQ0OSAwLjYwODc2NVpNNy40MTQxIDEuMTIwNzNDNy40NTI4OCAxLjA1NTY2IDcuNTQ3MTIgMS4wNTU2NiA3LjU4NTkgMS4xMjA3M0wxMy45Nzk4IDExLjg0ODhDMTQuMDE5NiAxMS45MTU0IDEzLjk3MTUgMTIgMTMuODkzOSAxMkgxLjEwNjA4QzEuMDI4NDkgMTIgMC45ODA0NTQgMTEuOTE1NCAxLjAyMDE4IDExLjg0ODhMNy40MTQxIDEuMTIwNzNaTTYuODI2OSA0LjQ4NjExQzYuODEyMjEgNC4xMDQyMyA3LjExNzgzIDMuNzg2NjMgNy41IDMuNzg2NjNDNy44ODIxNyAzLjc4NjYzIDguMTg3NzggNC4xMDQyMyA4LjE3MzEgNC40ODYxMkw4LjAxOTIxIDguNDg3MDFDOC4wMDg0OCA4Ljc2NiA3Ljc3OTIgOC45ODY2NCA3LjUgOC45ODY2NEM3LjIyMDggOC45ODY2NCA2Ljk5MTUxIDguNzY2IDYuOTgwNzggOC40ODcwMUw2LjgyNjkgNC40ODYxMVpNOC4yNDk4OSAxMC40NzZDOC4yNDk4OSAxMC44OTAyIDcuOTE0MSAxMS4yMjYgNy40OTk4OSAxMS4yMjZDNy4wODU2NyAxMS4yMjYgNi43NDk4OSAxMC44OTAyIDYuNzQ5ODkgMTAuNDc2QzYuNzQ5ODkgMTAuMDYxOCA3LjA4NTY3IDkuNzI1OTkgNy40OTk4OSA5LjcyNTk5QzcuOTE0MSA5LjcyNTk5IDguMjQ5ODkgMTAuMDYxOCA4LjI0OTg5IDEwLjQ3NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHl0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zIDFDMi40NDc3MSAxIDIgMS40NDc3MiAyIDJWMTNDMiAxMy41NTIzIDIuNDQ3NzIgMTQgMyAxNEgxMC41QzEwLjc3NjEgMTQgMTEgMTMuNzc2MSAxMSAxMy41QzExIDEzLjIyMzkgMTAuNzc2MSAxMyAxMC41IDEzSDNWMkwxMC41IDJDMTAuNzc2MSAyIDExIDEuNzc2MTQgMTEgMS41QzExIDEuMjIzODYgMTAuNzc2MSAxIDEwLjUgMUgzWk0xMi42MDM2IDQuODk2NDVDMTIuNDA4MyA0LjcwMTE4IDEyLjA5MTcgNC43MDExOCAxMS44OTY0IDQuODk2NDVDMTEuNzAxMiA1LjA5MTcxIDExLjcwMTIgNS40MDgyOSAxMS44OTY0IDUuNjAzNTVMMTMuMjkyOSA3SDYuNUM2LjIyMzg2IDcgNiA3LjIyMzg2IDYgNy41QzYgNy43NzYxNCA2LjIyMzg2IDggNi41IDhIMTMuMjkyOUwxMS44OTY0IDkuMzk2NDVDMTEuNzAxMiA5LjU5MTcxIDExLjcwMTIgOS45MDgyOSAxMS44OTY0IDEwLjEwMzZDMTIuMDkxNyAxMC4yOTg4IDEyLjQwODMgMTAuMjk4OCAxMi42MDM2IDEwLjEwMzZMMTQuODUzNiA3Ljg1MzU1QzE1LjA0ODggNy42NTgyOSAxNS4wNDg4IDcuMzQxNzEgMTQuODUzNiA3LjE0NjQ1TDEyLjYwMzYgNC44OTY0NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHd0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjUgMkM1Ljc3NjE0IDIgNiAyLjIyMzg2IDYgMi41VjUuNUM2IDUuNzc2MTQgNS43NzYxNCA2IDUuNSA2SDIuNUMyLjIyMzg2IDYgMiA1Ljc3NjE0IDIgNS41QzIgNS4yMjM4NiAyLjIyMzg2IDUgMi41IDVINVYyLjVDNSAyLjIyMzg2IDUuMjIzODYgMiA1LjUgMlpNOS41IDJDOS43NzYxNCAyIDEwIDIuMjIzODYgMTAgMi41VjVIMTIuNUMxMi43NzYxIDUgMTMgNS4yMjM4NiAxMyA1LjVDMTMgNS43NzYxNCAxMi43NzYxIDYgMTIuNSA2SDkuNUM5LjIyMzg2IDYgOSA1Ljc3NjE0IDkgNS41VjIuNUM5IDIuMjIzODYgOS4yMjM4NiAyIDkuNSAyWk0yIDkuNUMyIDkuMjIzODYgMi4yMjM4NiA5IDIuNSA5SDUuNUM1Ljc3NjE0IDkgNiA5LjIyMzg2IDYgOS41VjEyLjVDNiAxMi43NzYxIDUuNzc2MTQgMTMgNS41IDEzQzUuMjIzODYgMTMgNSAxMi43NzYxIDUgMTIuNVYxMEgyLjVDMi4yMjM4NiAxMCAyIDkuNzc2MTQgMiA5LjVaTTkgOS41QzkgOS4yMjM4NiA5LjIyMzg2IDkgOS41IDlIMTIuNUMxMi43NzYxIDkgMTMgOS4yMjM4NiAxMyA5LjVDMTMgOS43NzYxNCAxMi43NzYxIDEwIDEyLjUgMTBIMTBWMTIuNUMxMCAxMi43NzYxIDkuNzc2MTQgMTMgOS41IDEzQzkuMjIzODYgMTMgOSAxMi43NzYxIDkgMTIuNVY5LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxidD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMyAyQzIuNDQ3NzIgMiAyIDIuNDQ3NzIgMiAzVjEyQzIgMTIuNTUyMyAyLjQ0NzcyIDEzIDMgMTNIMTJDMTIuNTUyMyAxMyAxMyAxMi41NTIzIDEzIDEyVjguNUMxMyA4LjIyMzg2IDEyLjc3NjEgOCAxMi41IDhDMTIuMjIzOSA4IDEyIDguMjIzODYgMTIgOC41VjEySDNWM0w2LjUgM0M2Ljc3NjE0IDMgNyAyLjc3NjE0IDcgMi41QzcgMi4yMjM4NiA2Ljc3NjE0IDIgNi41IDJIM1pNMTIuODUzNiAyLjE0NjQ1QzEyLjkwMTUgMi4xOTQzOSAxMi45Mzc3IDIuMjQ5NjQgMTIuOTYyMSAyLjMwODYxQzEyLjk4NjEgMi4zNjY2OSAxMi45OTk2IDIuNDMwMyAxMyAyLjQ5N0wxMyAyLjVWMi41MDA0OVY1LjVDMTMgNS43NzYxNCAxMi43NzYxIDYgMTIuNSA2QzEyLjIyMzkgNiAxMiA1Ljc3NjE0IDEyIDUuNVYzLjcwNzExTDYuODUzNTUgOC44NTM1NUM2LjY1ODI5IDkuMDQ4ODIgNi4zNDE3MSA5LjA0ODgyIDYuMTQ2NDUgOC44NTM1NUM1Ljk1MTE4IDguNjU4MjkgNS45NTExOCA4LjM0MTcxIDYuMTQ2NDUgOC4xNDY0NUwxMS4yOTI5IDNIOS41QzkuMjIzODYgMyA5IDIuNzc2MTQgOSAyLjVDOSAyLjIyMzg2IDkuMjIzODYgMiA5LjUgMkgxMi40OTk5SDEyLjVDMTIuNTY3OCAyIDEyLjYzMjQgMi4wMTM0OSAxMi42OTE0IDIuMDM3OTRDMTIuNzUwNCAyLjA2MjM0IDEyLjgwNTYgMi4wOTg1MSAxMi44NTM2IDIuMTQ2NDVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx4dD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTQuNzY0OSA2LjA3NTk1QzE0Ljk5OTEgNi4yMjIzMSAxNS4wNzAzIDYuNTMwNzggMTQuOTIzOSA2Ljc2NDk1QzE0LjQ4NDkgNy40Njc0MiAxMy45NjMyIDguMTA2NDQgMTMuMzcwMiA4LjY2MzA0TDE0LjU3MTIgOS44NjQwNUMxNC43NjY0IDEwLjA1OTMgMTQuNzY2NCAxMC4zNzU5IDE0LjU3MTIgMTAuNTcxMkMxNC4zNzU5IDEwLjc2NjQgMTQuMDU5MyAxMC43NjY0IDEzLjg2NDEgMTAuNTcxMkwxMi42MDExIDkuMzA4MTZDMTEuODA0OSA5LjkwMjgyIDEwLjkwODkgMTAuMzYyMSA5LjkzMzc0IDEwLjY1MUwxMC4zODMgMTIuMzI3NkMxMC40NTQ0IDEyLjU5NDQgMTAuMjk2MSAxMi44Njg1IDEwLjAyOTQgMTIuOTRDOS43NjI2NiAxMy4wMTE1IDkuNDg4NSAxMi44NTMyIDkuNDE3MDMgMTIuNTg2NEw4Ljk1OTE2IDEwLjg3NzVDOC40ODc0MiAxMC45NTggOC4wMDAzNSAxMC45OTk5IDcuNSAxMC45OTk5QzYuOTk5NjQgMTAuOTk5OSA2LjUxMjU3IDEwLjk1OCA2LjA0MDgyIDEwLjg3NzVMNS41ODI5OSAxMi41ODY0QzUuNTExNTMgMTIuODUzMiA1LjIzNzM3IDEzLjAxMTUgNC45NzA2MyAxMi45NEM0LjcwMzkgMTIuODY4NSA0LjU0NTYgMTIuNTk0NCA0LjYxNzA2IDEyLjMyNzdMNS4wNjYyNCAxMC42NTFDNC4wOTExMSAxMC4zNjIxIDMuMTk1MDMgOS45MDI4MSAyLjM5ODkgOS4zMDgxNEwxLjEzNTkgMTAuNTcxMUMwLjk0MDYzOCAxMC43NjY0IDAuNjI0MDU4IDEwLjc2NjQgMC40Mjg3OTcgMTAuNTcxMUMwLjIzMzUzNyAxMC4zNzU5IDAuMjMzNTM3IDEwLjA1OTMgMC40Mjg3OTcgOS44NjQwNEwxLjYyOTgyIDguNjYzMDJDMS4wMzY4MiA4LjEwNjQzIDAuNTE1MTEzIDcuNDY3NDIgMC4wNzYwNjc3IDYuNzY0OTVDLTAuMDcwMjg2NyA2LjUzMDc4IDAuMDAwODk4NTQ0IDYuMjIyMzEgMC4yMzUwNjQgNi4wNzU5NUMwLjQ2OTIzIDUuOTI5NiAwLjc3NzcwMyA2LjAwMDc4IDAuOTI0MDU3IDYuMjM0OTVDMS40MDM1NCA3LjAwMjEyIDEuOTg5IDcuNjgwNTYgMi42NjIzMyA4LjI0MjdDMi42NzMxNSA4LjI1MDk2IDIuNjgzNyA4LjI1OTcxIDIuNjkzOTcgOC4yNjg5N0M0LjAwODk3IDkuMzU1MjcgNS42NTUzNiA5Ljk5OTkgNy41IDkuOTk5OUMxMC4zMDc4IDkuOTk5OSAxMi42NTYzIDguNTA2MjkgMTQuMDc1OSA2LjIzNDk1QzE0LjIyMjMgNi4wMDA3OCAxNC41MzA4IDUuOTI5NiAxNC43NjQ5IDYuMDc1OTVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxfdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTMuMzUzNiAyLjM1MzU1QzEzLjU0ODggMi4xNTgyOSAxMy41NDg4IDEuODQxNzEgMTMuMzUzNiAxLjY0NjQ1QzEzLjE1ODMgMS40NTExOCAxMi44NDE3IDEuNDUxMTggMTIuNjQ2NCAxLjY0NjQ1TDEwLjY4MjggMy42MTAxMkM5LjcwNjUyIDMuMjE2NzEgOC42Mzc1OSAzIDcuNSAzQzQuMzA3ODYgMyAxLjY1NjM5IDQuNzA2MzggMC4wNzYwMDAyIDcuMjM1MDFDLTAuMDI1MzMzOCA3LjM5NzE1IC0wLjAyNTMzMzQgNy42MDI4OCAwLjA3NjAwMTQgNy43NjUwMUMwLjkwMjk0NSA5LjA4ODEyIDIuMDIzMTQgMTAuMTg2MSAzLjM2MDYxIDEwLjkzMjNMMS42NDY0NSAxMi42NDY0QzEuNDUxMTggMTIuODQxNyAxLjQ1MTE4IDEzLjE1ODMgMS42NDY0NSAxMy4zNTM2QzEuODQxNzEgMTMuNTQ4OCAyLjE1ODI5IDEzLjU0ODggMi4zNTM1NSAxMy4zNTM2TDQuMzE3MjMgMTEuMzg5OUM1LjI5MzQ4IDExLjc4MzMgNi4zNjI0MSAxMiA3LjUgMTJDMTAuNjkyMSAxMiAxMy4zNDM2IDEwLjI5MzYgMTQuOTI0IDcuNzY1MDFDMTUuMDI1MyA3LjYwMjg4IDE1LjAyNTMgNy4zOTcxNSAxNC45MjQgNy4yMzUwMUMxNC4wOTcxIDUuOTExOSAxMi45NzY5IDQuODEzOTEgMTEuNjM5NCA0LjA2NzcxTDEzLjM1MzYgMi4zNTM1NVpNOS45MDQyOCA0LjM4ODYxQzkuMTUzMzIgNC4xMzYxIDguMzQ3NTkgNCA3LjUgNEM0LjgwMjg1IDQgMi41Mjk1MiA1LjM3ODE2IDEuMDk2MjIgNy41MDAwMUMxLjg3Mjg0IDguNjQ5NyAyLjg5NjA5IDkuNTgxMDYgNC4wOTk3NCAxMC4xOTMxTDkuOTA0MjggNC4zODg2MVpNNS4wOTU3MiAxMC42MTE0TDEwLjkwMDMgNC44MDY4NUMxMi4xMDM5IDUuNDE4OTQgMTMuMTI3MiA2LjM1MDMxIDEzLjkwMzggNy41MDAwMUMxMi40NzA1IDkuNjIxODMgMTAuMTk3MSAxMSA3LjUgMTFDNi42NTI0MSAxMSA1Ljg0NjY4IDEwLjg2MzkgNS4wOTU3MiAxMC42MTE0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sT3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNSAxMUM0LjgwMjg1IDExIDIuNTI5NTIgOS42MjE4NCAxLjA5NjIyIDcuNTAwMDFDMi41Mjk1MiA1LjM3ODE2IDQuODAyODUgNCA3LjUgNEMxMC4xOTcxIDQgMTIuNDcwNSA1LjM3ODE2IDEzLjkwMzggNy41MDAwMUMxMi40NzA1IDkuNjIxODMgMTAuMTk3MSAxMSA3LjUgMTFaTTcuNSAzQzQuMzA3ODYgMyAxLjY1NjM5IDQuNzA2MzggMC4wNzYwMDAyIDcuMjM1MDFDLTAuMDI1MzMzOCA3LjM5NzE1IC0wLjAyNTMzMzQgNy42MDI4OCAwLjA3NjAwMTQgNy43NjUwMUMxLjY1NjM5IDEwLjI5MzYgNC4zMDc4NiAxMiA3LjUgMTJDMTAuNjkyMSAxMiAxMy4zNDM2IDEwLjI5MzYgMTQuOTI0IDcuNzY1MDFDMTUuMDI1MyA3LjYwMjg4IDE1LjAyNTMgNy4zOTcxNSAxNC45MjQgNy4yMzUwMUMxMy4zNDM2IDQuNzA2MzggMTAuNjkyMSAzIDcuNSAzWk03LjUgOS41QzguNjA0NTcgOS41IDkuNSA4LjYwNDU3IDkuNSA3LjVDOS41IDYuMzk1NDMgOC42MDQ1NyA1LjUgNy41IDUuNUM2LjM5NTQzIDUuNSA1LjUgNi4zOTU0MyA1LjUgNy41QzUuNSA4LjYwNDU3IDYuMzk1NDMgOS41IDcuNSA5LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxMdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTk5MSAwLjg3Njg5MkMzLjg0MjIyIDAuODc2ODkyIDAuODc3MDc1IDMuODQyMDQgMC44NzcwNzUgNy40OTk3MkMwLjg3NzA3NSAxMS4xNTc0IDMuODQyMjIgMTQuMTIyNiA3LjQ5OTkxIDE0LjEyMjZDMTEuMTU3NiAxNC4xMjI2IDE0LjEyMjcgMTEuMTU3NCAxNC4xMjI3IDcuNDk5NzJDMTQuMTIyNyAzLjg0MjA0IDExLjE1NzYgMC44NzY4OTIgNy40OTk5MSAwLjg3Njg5MlpNMS44MjcwOCA3LjQ5OTcyQzEuODI3MDggNC4zNjY3MSA0LjM2Njg5IDEuODI2ODkgNy40OTk5MSAxLjgyNjg5QzEwLjYzMjkgMS44MjY4OSAxMy4xNzI3IDQuMzY2NzEgMTMuMTcyNyA3LjQ5OTcyQzEzLjE3MjcgMTAuNjMyNyAxMC42MzI5IDEzLjE3MjYgNy40OTk5MSAxMy4xNzI2QzQuMzY2ODkgMTMuMTcyNiAxLjgyNzA4IDEwLjYzMjcgMS44MjcwOCA3LjQ5OTcyWk01LjAzNzQ3IDkuMjEzOTVDNC44Nzk0OSA4Ljk4NzQ2IDQuNTY3ODIgOC45MzE5MyA0LjM0MTMzIDkuMDg5OTFDNC4xMTQ4NCA5LjI0Nzg5IDQuMDU5MzEgOS41NTk1NiA0LjIxNzI5IDkuNzg2MDVDNC45MzkyNiAxMC44MjExIDYuMTQwMzMgMTEuNSA3LjUwMDA0IDExLjVDOC44NTk3NCAxMS41IDEwLjA2MDggMTAuODIxMSAxMC43ODI4IDkuNzg2MDVDMTAuOTQwOCA5LjU1OTU2IDEwLjg4NTIgOS4yNDc4OSAxMC42NTg3IDkuMDg5OTFDMTAuNDMyMyA4LjkzMTkzIDEwLjEyMDYgOC45ODc0NiA5Ljk2MjYgOS4yMTM5NUM5LjQxOTYzIDkuOTkyMzggOC41MTkwNyAxMC41IDcuNTAwMDQgMTAuNUM2LjQ4MSAxMC41IDUuNTgwNDQgOS45OTIzOCA1LjAzNzQ3IDkuMjEzOTVaTTUuMzc1MDMgNi44NDk5OEM1Ljg1ODI4IDYuODQ5OTggNi4yNTAwMyA2LjQ1ODE1IDYuMjUwMDMgNS45NzQ5OEM2LjI1MDAzIDUuNDkxOCA1Ljg1ODI4IDUuMDk5OTggNS4zNzUwMyA1LjA5OTk4QzQuODkxNzkgNS4wOTk5OCA0LjUwMDAzIDUuNDkxOCA0LjUwMDAzIDUuOTc0OThDNC41MDAwMyA2LjQ1ODE1IDQuODkxNzkgNi44NDk5OCA1LjM3NTAzIDYuODQ5OThaTTEwLjUgNS45NzQ5OEMxMC41IDYuNDU4MTUgMTAuMTA4MyA2Ljg0OTk4IDkuNjI1MDMgNi44NDk5OEM5LjE0MTc5IDYuODQ5OTggOC43NTAwMyA2LjQ1ODE1IDguNzUwMDMgNS45NzQ5OEM4Ljc1MDAzIDUuNDkxOCA5LjE0MTc5IDUuMDk5OTggOS42MjUwMyA1LjA5OTk4QzEwLjEwODMgNS4wOTk5OCAxMC41IDUuNDkxOCAxMC41IDUuOTc0OThaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxFdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy4wMDAwNSAyLjA0OTk5SDUuNTI1MDVDNC43MTA0MyAyLjA0OTk5IDQuMDUwMDUgMi43MTAzNyA0LjA1MDA1IDMuNTI0OTlDNC4wNTAwNSA0LjMzOTYxIDQuNzEwNDMgNC45OTk5OSA1LjUyNTA1IDQuOTk5OTlINy4wMDAwNVYyLjA0OTk5Wk03LjAwMDA1IDEuMDQ5OTlIOC4wMDAwNUg5LjQ3NTA1QzEwLjg0MiAxLjA0OTk5IDExLjk1IDIuMTU4MDggMTEuOTUgMy41MjQ5OUMxMS45NSA0LjMzMTYzIDExLjU2NDIgNS4wNDgxNSAxMC45NjY5IDUuNDk5OTlDMTEuNTY0MiA1Ljk1MTg0IDExLjk1IDYuNjY4MzYgMTEuOTUgNy40NzVDMTEuOTUgOC44NDE5IDEwLjg0MiA5Ljk1IDkuNDc1MDUgOS45NUM4LjkyMjM2IDkuOTUgOC40MTE5OCA5Ljc2ODg0IDguMDAwMDUgOS40NjI2NlY5Ljk1TDguMDAwMDUgMTEuNDI1QzguMDAwMDUgMTIuNzkxOSA2Ljg5MTk1IDEzLjkgNS41MjUwNSAxMy45QzQuMTU4MTQgMTMuOSAzLjA1MDA1IDEyLjc5MTkgMy4wNTAwNSAxMS40MjVDMy4wNTAwNSAxMC42MTgzIDMuNDM1OTMgOS45MDE4NCA0LjAzMzE3IDkuNDQ5OTlDMy40MzU5MyA4Ljk5ODE0IDMuMDUwMDUgOC4yODE2MyAzLjA1MDA1IDcuNDc1QzMuMDUwMDUgNi42NjgzNiAzLjQzNTk0IDUuOTUxODQgNC4wMzMxOSA1LjVDMy40MzU5NCA1LjA0ODE1IDMuMDUwMDUgNC4zMzE2MyAzLjA1MDA1IDMuNTI0OTlDMy4wNTAwNSAyLjE1ODA4IDQuMTU4MTQgMS4wNDk5OSA1LjUyNTA1IDEuMDQ5OTlINy4wMDAwNVpNOC4wMDAwNSAyLjA0OTk5VjQuOTk5OTlIOS40NzUwNUMxMC4yODk3IDQuOTk5OTkgMTAuOTUgNC4zMzk2MSAxMC45NSAzLjUyNDk5QzEwLjk1IDIuNzEwMzcgMTAuMjg5NyAyLjA0OTk5IDkuNDc1MDUgMi4wNDk5OUg4LjAwMDA1Wk01LjUyNTA1IDguOTQ5OThINy4wMDAwNUw3LjAwMDA1IDcuNDc4OEw3LjAwMDA1IDcuNDc1TDcuMDAwMDUgNy40NzEyVjZINS41MjUwNUM0LjcxMDQzIDYgNC4wNTAwNSA2LjY2MDM4IDQuMDUwMDUgNy40NzVDNC4wNTAwNSA4LjI4NzY3IDQuNzA3MjcgOC45NDY4NCA1LjUxOTIgOC45NDk5OUw1LjUyNTA1IDguOTQ5OThaTTQuMDUwMDUgMTEuNDI1QzQuMDUwMDUgMTAuNjEyMyA0LjcwNzI3IDkuOTUzMTUgNS41MTkyIDkuOTQ5OTlMNS41MjUwNSA5Ljk1SDcuMDAwMDVMNy4wMDAwNSAxMS40MjVDNy4wMDAwNSAxMi4yMzk2IDYuMzM5NjcgMTIuOSA1LjUyNTA1IDEyLjlDNC43MTA0MyAxMi45IDQuMDUwMDUgMTIuMjM5NiA0LjA1MDA1IDExLjQyNVpNOC4wMDAwNSA3LjQ3MjA2QzguMDAxNjQgNi42NTg3OSA4LjY2MTQxIDYgOS40NzUwNSA2QzEwLjI4OTcgNiAxMC45NSA2LjY2MDM4IDEwLjk1IDcuNDc1QzEwLjk1IDguMjg5NjIgMTAuMjg5NyA4Ljk1IDkuNDc1MDUgOC45NUM4LjY2MTQxIDguOTUgOC4wMDE2NCA4LjI5MTIxIDguMDAwMDUgNy40Nzc5NFY3LjQ3MjA2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sU3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNSAyQzMuMjIzODYgMiAzIDIuMjIzODYgMyAyLjVWMTIuNUMzIDEyLjc3NjEgMy4yMjM4NiAxMyAzLjUgMTNIMTEuNUMxMS43NzYxIDEzIDEyIDEyLjc3NjEgMTIgMTIuNVY2SDguNUM4LjIyMzg2IDYgOCA1Ljc3NjE0IDggNS41VjJIMy41Wk05IDIuNzA3MTFMMTEuMjkyOSA1SDlWMi43MDcxMVpNMiAyLjVDMiAxLjY3MTU3IDIuNjcxNTcgMSAzLjUgMUg4LjVDOC42MzI2MSAxIDguNzU5NzkgMS4wNTI2OCA4Ljg1MzU1IDEuMTQ2NDVMMTIuODUzNiA1LjE0NjQ1QzEyLjk0NzMgNS4yNDAyMSAxMyA1LjM2NzM5IDEzIDUuNVYxMi41QzEzIDEzLjMyODQgMTIuMzI4NCAxNCAxMS41IDE0SDMuNUMyLjY3MTU3IDE0IDIgMTMuMzI4NCAyIDEyLjVWMi41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sanQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMgMi41QzMgMi4yMjM4NiAzLjIyMzg2IDIgMy41IDJIOS4yOTI4OUwxMiA0LjcwNzExVjEyLjVDMTIgMTIuNzc2MSAxMS43NzYxIDEzIDExLjUgMTNIMy41QzMuMjIzODYgMTMgMyAxMi43NzYxIDMgMTIuNVYyLjVaTTMuNSAxQzIuNjcxNTcgMSAyIDEuNjcxNTcgMiAyLjVWMTIuNUMyIDEzLjMyODQgMi42NzE1NyAxNCAzLjUgMTRIMTEuNUMxMi4zMjg0IDE0IDEzIDEzLjMyODQgMTMgMTIuNVY0LjYwMzU1QzEzIDQuNDA0NjQgMTIuOTIxIDQuMjEzODggMTIuNzgwMyA0LjA3MzIyTDkuODUzNTUgMS4xNDY0NUM5Ljc1OTc5IDEuMDUyNjggOS42MzI2MSAxIDkuNSAxSDMuNVpNNS4yNSA3QzQuOTczODYgNyA0Ljc1IDcuMjIzODYgNC43NSA3LjVDNC43NSA3Ljc3NjE0IDQuOTczODYgOCA1LjI1IDhIOS43NUMxMC4wMjYxIDggMTAuMjUgNy43NzYxNCAxMC4yNSA3LjVDMTAuMjUgNy4yMjM4NiAxMC4wMjYxIDcgOS43NSA3SDUuMjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxNdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy41IDJDMy4yMjM4NiAyIDMgMi4yMjM4NiAzIDIuNVYxMi41QzMgMTIuNzc2MSAzLjIyMzg2IDEzIDMuNSAxM0gxMS41QzExLjc3NjEgMTMgMTIgMTIuNzc2MSAxMiAxMi41VjQuNzA3MTFMOS4yOTI4OSAySDMuNVpNMiAyLjVDMiAxLjY3MTU3IDIuNjcxNTcgMSAzLjUgMUg5LjVDOS42MzI2MSAxIDkuNzU5NzkgMS4wNTI2OCA5Ljg1MzU1IDEuMTQ2NDVMMTIuNzgwMyA0LjA3MzIyQzEyLjkyMSA0LjIxMzg4IDEzIDQuNDA0NjQgMTMgNC42MDM1NVYxMi41QzEzIDEzLjMyODQgMTIuMzI4NCAxNCAxMS41IDE0SDMuNUMyLjY3MTU3IDE0IDIgMTMuMzI4NCAyIDEyLjVWMi41Wk00Ljc1IDcuNUM0Ljc1IDcuMjIzODYgNC45NzM4NiA3IDUuMjUgN0g3VjUuMjVDNyA0Ljk3Mzg2IDcuMjIzODYgNC43NSA3LjUgNC43NUM3Ljc3NjE0IDQuNzUgOCA0Ljk3Mzg2IDggNS4yNVY3SDkuNzVDMTAuMDI2MSA3IDEwLjI1IDcuMjIzODYgMTAuMjUgNy41QzEwLjI1IDcuNzc2MTQgMTAuMDI2MSA4IDkuNzUgOEg4VjkuNzVDOCAxMC4wMjYxIDcuNzc2MTQgMTAuMjUgNy41IDEwLjI1QzcuMjIzODYgMTAuMjUgNyAxMC4wMjYxIDcgOS43NVY4SDUuMjVDNC45NzM4NiA4IDQuNzUgNy43NzYxNCA0Ljc1IDcuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGt0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zIDIuNUMzIDIuMjIzODYgMy4yMjM4NiAyIDMuNSAySDkuMDg1NzlDOS4yMTgzOSAyIDkuMzQ1NTcgMi4wNTI2OCA5LjQzOTM0IDIuMTQ2NDVMMTEuODUzNiA0LjU2MDY2QzExLjk0NzMgNC42NTQ0MyAxMiA0Ljc4MTYxIDEyIDQuOTE0MjFWMTIuNUMxMiAxMi43NzYxIDExLjc3NjEgMTMgMTEuNSAxM0gzLjVDMy4yMjM4NiAxMyAzIDEyLjc3NjEgMyAxMi41VjIuNVpNMy41IDFDMi42NzE1NyAxIDIgMS42NzE1NyAyIDIuNVYxMi41QzIgMTMuMzI4NCAyLjY3MTU3IDE0IDMuNSAxNEgxMS41QzEyLjMyODQgMTQgMTMgMTMuMzI4NCAxMyAxMi41VjQuOTE0MjFDMTMgNC41MTYzOSAxMi44NDIgNC4xMzQ4NiAxMi41NjA3IDMuODUzNTVMMTAuMTQ2NCAxLjQzOTM0QzkuODY1MTQgMS4xNTgwNCA5LjQ4MzYxIDEgOS4wODU3OSAxSDMuNVpNNC41IDRDNC4yMjM4NiA0IDQgNC4yMjM4NiA0IDQuNUM0IDQuNzc2MTQgNC4yMjM4NiA1IDQuNSA1SDcuNUM3Ljc3NjE0IDUgOCA0Ljc3NjE0IDggNC41QzggNC4yMjM4NiA3Ljc3NjE0IDQgNy41IDRINC41Wk00LjUgN0M0LjIyMzg2IDcgNCA3LjIyMzg2IDQgNy41QzQgNy43NzYxNCA0LjIyMzg2IDggNC41IDhIMTAuNUMxMC43NzYxIDggMTEgNy43NzYxNCAxMSA3LjVDMTEgNy4yMjM4NiAxMC43NzYxIDcgMTAuNSA3SDQuNVpNNC41IDEwQzQuMjIzODYgMTAgNCAxMC4yMjM5IDQgMTAuNUM0IDEwLjc3NjEgNC4yMjM4NiAxMSA0LjUgMTFIMTAuNUMxMC43NzYxIDExIDExIDEwLjc3NjEgMTEgMTAuNUMxMSAxMC4yMjM5IDEwLjc3NjEgMTAgMTAuNSAxMEg0LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxSdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNS4xMDUwNSAxMkM0LjcwODA1IDEyIDQuNDIzNiAxMS45MTIgNC4yNTE3MSAxMS43MzZDNC4wODM5IDExLjU1NTkgNCAxMS4yNzE1IDQgMTAuODgyN1Y0LjExNzMzQzQgMy43MjAzMyA0LjA4NTk1IDMuNDM1ODggNC4yNTc4NCAzLjI2Mzk4QzQuNDMzODMgMy4wODc5OSA0LjcxNjIzIDMgNS4xMDUwNSAzQzYuNDI3NDEgMyA4LjI1NTkxIDMgOS4wMjg1MiAzQzEwLjEzNzMgMyAxMS4wNTM5IDMuOTgxNTMgMTEuMDUzOSA1LjE4NDZDMTEuMDUzOSA2LjA4NTAxIDEwLjYwMzcgNi44MTg1NSA5LjcwMzI3IDcuMjM2MDJDMTAuODY1NyA3LjQ0ODUxIDExLjUxNzYgOC42Mjc4NyAxMS41MTc2IDkuNDgxMjhDMTEuNTE3NiAxMC41MTI1IDEwLjk5MDIgMTIgOS4yNzczNCAxMkM4Ljc3NzQyIDEyIDYuNDI2MjYgMTIgNS4xMDUwNSAxMlpNOC4zNzg5MSA4LjAwMzQxSDUuOFYxMC42MzFIOC4zNzg5MUM4LjkgMTAuNjMxIDkuNjI5NiAxMC4xMjExIDkuNjI5NiA5LjI5ODc3QzkuNjI5NiA4LjQ3NjQzIDguOSA4LjAwMzQxIDguMzc4OTEgOC4wMDM0MVpNNS44IDQuMzY5MDNWNi42OTU3N0g4LjE3OTY5QzguNTM5MDYgNi42OTU3NyA5LjI3NzM0IDYuMzU5MzkgOS4yNzczNCA1LjUwMDAyQzkuMjc3MzQgNC42NDA2NCA4LjQ4MDQ3IDQuMzY5MDMgOC4xNzk2OSA0LjM2OTAzSDUuOFpcIixmaWxsOm59KSl9LFB0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjUgNC41QzIuNSAzLjA5ODg2IDMuNTk4ODYgMiA1IDJIMTIuNDk5QzEyLjc3NTIgMiAxMyAyLjIyMzg2IDEzIDIuNUMxMyAyLjc3NjE0IDEyLjc3NjEgMyAxMi41IDNIOC42OTI0NEw4LjQwNTA5IDMuODU0NThDOC4xODg2OSA0LjQ5NzUyIDcuODk0MDEgNS4zNzE5NyA3LjU4MDkxIDYuMjk3OTRDNy41MDI1OSA2LjUyOTU2IDcuNDIzMDggNi43NjQ1MyA3LjM0MzMyIDdIOC41QzguNzc2MTQgNyA5IDcuMjIzODYgOSA3LjVDOSA3Ljc3NjE0IDguNzc2MTQgOCA4LjUgOEg3LjAwNDA3QzYuNTY3MjQgOS4yODU0MyA2LjE2NDM1IDEwLjQ2MTMgNS45NTc5OSAxMS4wMzg2QzUuNjM2MjcgMTEuOTM4NiA1LjIwNzEyIDEyLjQ4NTcgNC42Njc0MSAxMi43Nzc4QzQuMTYzMzUgMTMuMDUwNyAzLjY0MTU0IDEzLjA1MDMgMy4yODM3OCAxMy4wNUwzLjI1IDEzLjA1QzIuOTQ2MjQgMTMuMDUgMi43IDEyLjgwMzcgMi43IDEyLjVDMi43IDEyLjE5NjIgMi45NDYyNCAxMS45NSAzLjI1IDExLjk1QzMuNjQxODIgMTEuOTUgMy45MDM1IDExLjk0MDUgNC4xNDM3NCAxMS44MTA1QzQuMzY0NDMgMTEuNjkxIDQuNjU1MzIgMTEuNDE0OCA0LjkyMjE3IDEwLjY2ODNDNS4xMDY5NSAxMC4xNTE0IDUuNDUzNzUgOS4xNDEzNCA1Ljg0MjIgOEg0LjVDNC4yMjM4NiA4IDQgNy43NzYxNCA0IDcuNUM0IDcuMjIzODYgNC4yMjM4NiA3IDQuNSA3SDYuMTgxODdDNi4zMDEyNyA2LjY0Nzg1IDYuNDIxMzIgNi4yOTMyMyA2LjUzODg3IDUuOTQ1NTlDNi44NTE3NSA1LjAyMDI1IDcuMTQ2MjcgNC4xNDYzMSA3LjM2MjU2IDMuNTAzNjhMNy41MzE5MiAzSDVDNC4xNTExNCAzIDMuNSAzLjY1MTE0IDMuNSA0LjVDMy41IDQuNzc2MTQgMy4yNzYxNCA1IDMgNUMyLjcyMzg2IDUgMi41IDQuNzc2MTQgMi41IDQuNVpcIixmaWxsOm59KSl9LEl0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjY3NDk0IDMuNTAwMTdDNS42NzQ5NCAzLjI1MTY0IDUuODc2NDEgMy4wNTAxNyA2LjEyNDk0IDMuMDUwMTdIMTAuNjI0OUMxMC44NzM1IDMuMDUwMTcgMTEuMDc0OSAzLjI1MTY0IDExLjA3NDkgMy41MDAxN0MxMS4wNzQ5IDMuNzQ4NyAxMC44NzM1IDMuOTUwMTcgMTAuNjI0OSAzLjk1MDE3SDkuMDA1ODdMNy4yMzA5IDExLjA1SDguODc0OTNDOS4xMjM0NSAxMS4wNSA5LjMyNDkzIDExLjI1MTUgOS4zMjQ5MyAxMS41QzkuMzI0OTMgMTEuNzQ4NiA5LjEyMzQ1IDExLjk1IDguODc0OTMgMTEuOTVINC4zNzQ5M0M0LjEyNjQgMTEuOTUgMy45MjQ5MyAxMS43NDg2IDMuOTI0OTMgMTEuNUMzLjkyNDkzIDExLjI1MTUgNC4xMjY0IDExLjA1IDQuMzc0OTMgMTEuMDVINS45OTM5N0w3Ljc2ODk0IDMuOTUwMTdINi4xMjQ5NEM1Ljg3NjQxIDMuOTUwMTcgNS42NzQ5NCAzLjc0ODcgNS42NzQ5NCAzLjUwMDE3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuNzk5OTMgMy41MDAxN0M0Ljc5OTkzIDMuMjUxNjQgNS4wMDE0IDMuMDUwMTcgNS4yNDk5MyAzLjA1MDE3SDkuNzQ5OTNDOS45OTg0NSAzLjA1MDE3IDEwLjE5OTkgMy4yNTE2NCAxMC4xOTk5IDMuNTAwMTdDMTAuMTk5OSAzLjc0ODcgOS45OTg0NSAzLjk1MDE3IDkuNzQ5OTMgMy45NTAxN0g4LjA5OTkzVjExLjA1SDkuNzQ5OTRDOS45OTg0NyAxMS4wNSAxMC4xOTk5IDExLjI1MTUgMTAuMTk5OSAxMS41QzEwLjE5OTkgMTEuNzQ4NiA5Ljk5ODQ3IDExLjk1IDkuNzQ5OTQgMTEuOTVINS4yNDk5NEM1LjAwMTQxIDExLjk1IDQuNzk5OTQgMTEuNzQ4NiA0Ljc5OTk0IDExLjVDNC43OTk5NCAxMS4yNTE1IDUuMDAxNDEgMTEuMDUgNS4yNDk5NCAxMS4wNUg2Ljg5OTkzVjMuOTUwMTdINS4yNDk5M0M1LjAwMTQgMy45NTAxNyA0Ljc5OTkzIDMuNzQ4NyA0Ljc5OTkzIDMuNTAwMTdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxUdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi43ODIzMyAyLjIxNzA3QzIuNzA3MzIgMi4xNDIwNiAyLjYwNTU3IDIuMDk5OTEgMi40OTk0OSAyLjA5OTkxQzIuMzkzNCAyLjA5OTkxIDIuMjkxNjYgMi4xNDIwNiAyLjIxNjY0IDIuMjE3MDdMMC4yMTY2NDUgNC4yMTcwN0MwLjA2MDQzNTEgNC4zNzMyOCAwLjA2MDQzNTEgNC42MjY1NSAwLjIxNjY0NSA0Ljc4Mjc2QzAuMzcyODU1IDQuOTM4OTcgMC42MjYxMjEgNC45Mzg5NyAwLjc4MjMzIDQuNzgyNzZMMi4wOTk0OSAzLjQ2NTZMMi4wOTk0OSAxMS41MzQyTDAuNzgyMzMgMTAuMjE3MUMwLjYyNjEyIDEwLjA2MDkgMC4zNzI4NTQgMTAuMDYwOSAwLjIxNjY0NSAxMC4yMTcxQzAuMDYwNDM0OSAxMC4zNzMzIDAuMDYwNDM0OSAxMC42MjY1IDAuMjE2NjQ1IDEwLjc4MjhMMi4yMTY2NCAxMi43ODI4QzIuMjkxNjYgMTIuODU3OCAyLjM5MzQgMTIuODk5OSAyLjQ5OTQ5IDEyLjg5OTlDMi42MDU1NyAxMi44OTk5IDIuNzA3MzEgMTIuODU3OCAyLjc4MjMzIDEyLjc4MjhMNC43ODIzMyAxMC43ODI4QzQuOTM4NTQgMTAuNjI2NSA0LjkzODU0IDEwLjM3MzMgNC43ODIzMyAxMC4yMTcxQzQuNjI2MTIgMTAuMDYwOSA0LjM3Mjg1IDEwLjA2MDkgNC4yMTY2NCAxMC4yMTcxTDIuODk5NDkgMTEuNTM0MkwyLjg5OTQ5IDMuNDY1Nkw0LjIxNjY0IDQuNzgyNzZDNC4zNzI4NSA0LjkzODk3IDQuNjI2MTIgNC45Mzg5NyA0Ljc4MjMzIDQuNzgyNzZDNC45Mzg1NCA0LjYyNjU1IDQuOTM4NTQgNC4zNzMyOCA0Ljc4MjMzIDQuMjE3MDdMMi43ODIzMyAyLjIxNzA3Wk0xMC41IDIuNzQ5OTdDMTAuNzEwNyAyLjc0OTk3IDEwLjg5ODggMi44ODIxMSAxMC45NzAzIDMuMDgwMzZMMTMuOTcwMyAxMS4zOTk5QzE0LjA2NCAxMS42NTk3IDEzLjkyOTMgMTEuOTQ2MiAxMy42Njk2IDEyLjAzOTlDMTMuNDA5OCAxMi4xMzM2IDEzLjEyMzMgMTEuOTk4OSAxMy4wMjk2IDExLjczOTJMMTIuMDQ3NyA5LjAxNkg4Ljk1MjI4TDcuOTcwMzMgMTEuNzM5MkM3Ljg3NjY2IDExLjk5ODkgNy41OTAxMyAxMi4xMzM2IDcuMzMwMzYgMTIuMDM5OUM3LjA3MDU5IDExLjk0NjIgNi45MzU5NSAxMS42NTk3IDcuMDI5NjIgMTEuMzk5OUwxMC4wMjk2IDMuMDgwMzZDMTAuMTAxMSAyLjg4MjExIDEwLjI4OTIgMi43NDk5NyAxMC41IDIuNzQ5OTdaTTEwLjUgNC43MjM5NkwxMS43NDEyIDguMTY2SDkuMjU4NzlMMTAuNSA0LjcyMzk2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sSHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuMDM3OTEgOS45ODA3NUMwLjkzNDc3NyA5LjY1ODMgMS4xMTYwMyA5LjM3NzE5IDEuNDAwMDUgOS4yNDg3MUMxLjY4NDA4IDkuMTIwMjIgMi4wOTQ2MyA5LjEzNDEyIDIuMjcwNzEgOS40NTQyNkMyLjg1MzkzIDEwLjUxNDcgMy42NDU5OSAxMC43MjgyIDQuNDg2NjUgMTAuNzI4MkM1LjUyNzIxIDEwLjcyODIgNi4yOTY1OSAxMC4yNjE1IDYuMjk2NTkgOS40NTQyNkM2LjI5NjU5IDguODA0NyA1LjkxMTkgOC40NjQxNiA0Ljg3MTM0IDguMTQyNTNMNC4xNTg3MiA3LjkyMTgxQzIuNjQ1MTggNy40NDg4MyAxLjg4ODQyIDYuNjkyMDYgMS44ODg0MiA1LjQ1NjAxQzEuODg4NDIgMy43OTc0MyAzLjI3NTgzIDIuNjg3NSA1LjI0MzQyIDIuNjg3NUM2LjkxNzMzIDIuNjg3NSA3Ljk3NDA5IDMuMzM1MzYgOC40MzgzMyA0LjMxMDY1QzguNTcwODcgNC41ODkwOSA4LjU3NjE0IDQuOTEyOTQgOC4yMjc5NCA1LjE5MTE0QzcuODc5NzQgNS40NjkzNCA3LjUyMzUxIDUuMzQ3OTkgNy4yMzMyNyA1LjAzODM5QzYuNDcyMTUgNC4yMjY1MyA1Ljk5NTQ1IDQuMDQ5NjggNS4yNTYwNCA0LjA0OTY4QzQuMTM5OCA0LjA0OTY4IDMuNTQ3IDQuNjM2MTggMy41NDcgNS4yNzk0M0MzLjU0NyA1Ljg2NTkyIDMuOTYzMjIgNi4yMzE2OSA0Ljk0NzAyIDYuNTM0NEw1LjY3ODU2IDYuNzYxNDNDNy4yMjk5NCA3LjIzNDQxIDcuOTc0MDkgNy45NTk2NCA3Ljk3NDA5IDkuMTcwNDdDNy45NzQwOSAxMC43NzIzIDYuNjkzODkgMTIuMDkwMyA0LjQ2MTQzIDEyLjA5MDNDMi44NjYxMiAxMi4wOTAzIDEuNDAwMDUgMTEuMTEzMSAxLjAzNzkxIDkuOTgwNzVaTTExLjg0OTEgOC43Nzk4NUMxMC42NjEgOC4zOTU0MyAxMC4xNjQ5IDcuODYxMTQgMTAuMTY0OSA2Ljk4ODA1QzEwLjE2NDkgNS44NjczNiAxMS4xNjM2IDUuMDQ2MzkgMTIuNjEyOCA1LjA0NjM5QzEzLjg1NDYgNS4wNDYzOSAxNC42NjI5IDUuNjMzNDUgMTQuOTc3OCA2LjYzNDZDMTUuMDQ0MyA2Ljg0NTk5IDE0Ljk1OTMgNi45ODAwNiAxNC43NDc1IDcuMDQ5MUMxNC41Mzk0IDcuMTE2OTcgMTQuMzE3NiA3LjA5OTc0IDE0LjIzOCA2Ljg5NjExQzEzLjkzNTYgNi4xMjI3MyAxMy4zNTIgNS43NjMxMSAxMi41OTk4IDUuNzYzMTFDMTEuNjQ2NyA1Ljc2MzExIDExLjAxMzUgNi4yNTE3OCAxMS4wMTM1IDYuOTE2MzhDMTEuMDEzNSA3LjQ1MDY2IDExLjM0NjQgNy43NTAzOCAxMi4yNDczIDguMDQzNThMMTIuODM0OCA4LjIzMjU0QzE0LjA2MiA4LjYyOTk5IDE0LjU1MTYgOS4xMzgyMSAxNC41NTE2IDEwLjAxNzhDMTQuNTUxNiAxMS4xOTcyIDEzLjQ4MSAxMi4wNDQyIDExLjk5MjcgMTIuMDQ0MkMxMC42NDM5IDEyLjA0NDIgOS42NTY0NCAxMS4yODA5IDkuNDE5NzkgMTAuMzM2MUM5LjM2NTM1IDEwLjExODggOS40MTE5MiAxMC4wMjg3IDkuNzAwMzkgOS45NjE4NEM5Ljk4ODg2IDkuODk0OTkgMTAuMDcxNCA5Ljg5OTE4IDEwLjE3MTUgMTAuMTM2OUMxMC40NTU1IDEwLjgxMTQgMTEuMTUzMSAxMS4zMjc1IDEyLjAzMTggMTEuMzI3NUMxMi45OTE0IDExLjMyNzUgMTMuNjgzNCAxMC43ODAyIDEzLjY4MzQgMTAuMDYzNEMxMy42ODM0IDkuNTM1NjcgMTMuMzk2MSA5LjI4ODA3IDEyLjQzNjYgOC45NzUzMkwxMS44NDkxIDguNzc5ODVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxCdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTEgMS41QzExIDEuMjIzODYgMTAuNzc2MSAxIDEwLjUgMUMxMC4yMjM5IDEgMTAgMS4yMjM4NiAxMCAxLjVWNEg1VjEuNUM1IDEuMjIzODYgNC43NzYxNCAxIDQuNSAxQzQuMjIzODYgMSA0IDEuMjIzODYgNCAxLjVWNEgxLjVDMS4yMjM4NiA0IDEgNC4yMjM4NiAxIDQuNUMxIDQuNzc2MTQgMS4yMjM4NiA1IDEuNSA1SDRWMTBIMS41QzEuMjIzODYgMTAgMSAxMC4yMjM5IDEgMTAuNUMxIDEwLjc3NjEgMS4yMjM4NiAxMSAxLjUgMTFINFYxMy41QzQgMTMuNzc2MSA0LjIyMzg2IDE0IDQuNSAxNEM0Ljc3NjE0IDE0IDUgMTMuNzc2MSA1IDEzLjVWMTFIMTBWMTMuNUMxMCAxMy43NzYxIDEwLjIyMzkgMTQgMTAuNSAxNEMxMC43NzYxIDE0IDExIDEzLjc3NjEgMTEgMTMuNVYxMUgxMy41QzEzLjc3NjEgMTEgMTQgMTAuNzc2MSAxNCAxMC41QzE0IDEwLjIyMzkgMTMuNzc2MSAxMCAxMy41IDEwSDExVjVIMTMuNUMxMy43NzYxIDUgMTQgNC43NzYxNCAxNCA0LjVDMTQgNC4yMjM4NiAxMy43NzYxIDQgMTMuNSA0SDExVjEuNVpNMTAgMTBWNUg1VjEwSDEwWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuMzgyNSAxLjI5NTY3QzMuNDYyNDEgMS4xMTQzMiAzLjY0MTg4IDAuOTk3Mjg0IDMuODQwMDUgMC45OTcyODRIMTEuNUMxMS43NzYxIDAuOTk3Mjg0IDEyIDEuMjIxMTQgMTIgMS40OTcyOFY1LjVDMTIgNS43NzYxNCAxMS43NzYxIDYgMTEuNSA2SDguNjM1MjFMMTEuNTI4OCA5LjE2MjQ3QzExLjY2MjYgOS4zMDg3IDExLjY5NzQgOS41MjAxNSAxMS42MTc1IDkuNzAxNTRDMTEuNTM3NiA5Ljg4MjkzIDExLjM1ODIgMTAgMTEuMTYgMTBIOFYxMy41QzggMTMuNzAyMiA3Ljg3ODE4IDEzLjg4NDUgNy42OTEzNCAxMy45NjE5QzcuNTA0NSAxNC4wMzkzIDcuMjg5NDUgMTMuOTk2NiA3LjE0NjQ1IDEzLjg1MzZMMy4xNDY0NSA5Ljg1MzU1QzMuMDUyNjggOS43NTk3OSAzIDkuNjMyNjEgMyA5LjVWNS41QzMgNS4yMjM4NiAzLjIyMzg2IDUgMy41IDVINi4zNjUzMUwzLjQ3MTA1IDEuODM0NjhDMy4zMzczMiAxLjY4ODQ0IDMuMzAyNTkgMS40NzcwMSAzLjM4MjUgMS4yOTU2N1pNNy43MjAzMiA1TDQuOTc0NzQgMS45OTcyOEgxMVY1SDcuNzIwMzJaTTcuMjc5NzggNkg0VjlINy41SDEwLjAyNDdMNy4yNzk3OCA2Wk00LjcwNzExIDEwTDcgMTIuMjkyOVYxMEg0LjcwNzExWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sRHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuMDcwOTUgMC42NTAyMzhDNi42NzM5MSAwLjY1MDIzOCA2LjMyOTc3IDAuOTI1MDk2IDYuMjQxOTggMS4zMTIzMUw2LjAwMzkgMi4zNjI0N0M1LjYyNDkgMi40NzI2OSA1LjI2MzM1IDIuNjIzNjMgNC45MjQzNiAyLjgxMDEzTDQuMDEzMzUgMi4yMzU4NUMzLjY3NzQ4IDIuMDI0MTMgMy4yMzk3OCAyLjA3MzEyIDIuOTU5MDMgMi4zNTM4NkwyLjM1Mjk0IDIuOTU5OTZDMi4wNzIyIDMuMjQwNyAyLjAyMzIgMy42Nzg0IDIuMjM0OTMgNC4wMTQyN0wyLjgwOTQyIDQuOTI1NjFDMi42MjMwNyA1LjI2NDUgMi40NzIyNyA1LjYyNTk0IDIuMzYyMTYgNi4wMDQ4MUwxLjMxMjA5IDYuMjQyODdDMC45MjQ4ODMgNi4zMzA2NSAwLjY1MDAyNCA2LjY3NDggMC42NTAwMjQgNy4wNzE4M1Y3LjkyODk3QzAuNjUwMDI0IDguMzI2MDEgMC45MjQ4ODMgOC42NzAxNSAxLjMxMjA5IDguNzU3OTRMMi4zNjIyOCA4Ljk5NjAzQzIuNDcyNDYgOS4zNzUgMi42MjMzNSA5LjczNjUyIDIuODA5NzkgMTAuMDc1NUwyLjIzNTQgMTAuOTg2N0MyLjAyMzY3IDExLjMyMjUgMi4wNzI2NyAxMS43NjAyIDIuMzUzNDEgMTIuMDQxTDIuOTU5NTEgMTIuNjQ3MUMzLjI0MDI1IDEyLjkyNzggMy42Nzc5NSAxMi45NzY4IDQuMDEzODIgMTIuNzY1MUw0LjkyNTA2IDEyLjE5MDdDNS4yNjM4NCAxMi4zNzcgNS42MjUxNiAxMi41Mjc4IDYuMDAzOSAxMi42Mzc5TDYuMjQxOTggMTMuNjg4MUM2LjMyOTc3IDE0LjA3NTMgNi42NzM5MSAxNC4zNTAyIDcuMDcwOTUgMTQuMzUwMkg3LjkyODA5QzguMzI1MTIgMTQuMzUwMiA4LjY2OTI3IDE0LjA3NTMgOC43NTcwNSAxMy42ODgxTDguOTk1MDUgMTIuNjM4M0M5LjM3NDExIDEyLjUyODIgOS43MzU3MyAxMi4zNzczIDEwLjA3NDggMTIuMTkwOUwxMC45ODYgMTIuNzY1M0MxMS4zMjE4IDEyLjk3NyAxMS43NTk1IDEyLjkyOCAxMi4wNDAzIDEyLjY0NzNMMTIuNjQ2NCAxMi4wNDEyQzEyLjkyNzEgMTEuNzYwNCAxMi45NzYxIDExLjMyMjcgMTIuNzY0NCAxMC45ODY5TDEyLjE5MDIgMTAuMDc2QzEyLjM3NjggOS43MzY4OCAxMi41Mjc4IDkuMzc1MTUgMTIuNjM4IDguOTk1OTZMMTMuNjg3OSA4Ljc1Nzk0QzE0LjA3NTEgOC42NzAxNSAxNC4zNSA4LjMyNjAxIDE0LjM1IDcuOTI4OTdWNy4wNzE4M0MxNC4zNSA2LjY3NDggMTQuMDc1MSA2LjMzMDY1IDEzLjY4NzkgNi4yNDI4N0wxMi42MzgxIDYuMDA0ODhDMTIuNTI4IDUuNjI1NzggMTIuMzc3MSA1LjI2NDE0IDEyLjE5MDYgNC45MjUwN0wxMi43NjQ4IDQuMDE0MDdDMTIuOTc2NiAzLjY3ODIgMTIuOTI3NiAzLjI0MDUgMTIuNjQ2OCAyLjk1OTc1TDEyLjA0MDcgMi4zNTM2NkMxMS43NiAyLjA3MjkyIDExLjMyMjMgMi4wMjM5MiAxMC45ODY0IDIuMjM1NjVMMTAuMDc1NSAyLjgwOTg5QzkuNzM2MjIgMi42MjMyOCA5LjM3NDM3IDIuNDcyMjkgOC45OTUwNSAyLjM2MjA5TDguNzU3MDUgMS4zMTIzMUM4LjY2OTI3IDAuOTI1MDk2IDguMzI1MTIgMC42NTAyMzggNy45MjgwOSAwLjY1MDIzOEg3LjA3MDk1Wk00LjkyMDUzIDMuODEyNTFDNS40NDcyNCAzLjQ0MzM5IDYuMDU2NjUgMy4xODQyNCA2LjcxNTQzIDMuMDY4MzlMNy4wNzA5NSAxLjUwMDI0SDcuOTI4MDlMOC4yODM1NSAzLjA2ODE2QzguOTQyNjcgMy4xODM4NyA5LjU1MjQgMy40NDMwMiAxMC4wNzk0IDMuODEyMjRMMTEuNDM5NyAyLjk1NDdMMTIuMDQ1OCAzLjU2MDc5TDExLjE4ODIgNC45MjExN0MxMS41NTczIDUuNDQ3OTggMTEuODE2NCA2LjA1NzUgMTEuOTMyMSA2LjcxNjM4TDEzLjUgNy4wNzE4M1Y3LjkyODk3TDExLjkzMiA4LjI4NDQ0QzExLjgxNjIgOC45NDM0MiAxMS41NTcgOS41NTMwMSAxMS4xODc4IDEwLjA3OThMMTIuMDQ1MyAxMS40NDAyTDExLjQzOTIgMTIuMDQ2MkwxMC4wNzg3IDExLjE4ODZDOS41NTE5MiAxMS41NTc2IDguOTQyNDEgMTEuODE2NiA4LjI4MzU1IDExLjkzMjNMNy45MjgwOSAxMy41MDAySDcuMDcwOTVMNi43MTU0MyAxMS45MzJDNi4wNTY5IDExLjgxNjIgNS40NDc3MiAxMS41NTcyIDQuOTIxMTYgMTEuMTg4M0wzLjU2MDU1IDEyLjA0NkwyLjk1NDQ1IDExLjQzOTlMMy44MTIxMyAxMC4wNzk0QzMuNDQzMSA5LjU1MjY2IDMuMTg0MDMgOC45NDMyNiAzLjA2ODI1IDguMjg0NUwxLjUwMDAyIDcuOTI4OTdWNy4wNzE4M0wzLjA2ODE4IDYuNzE2MzJDMy4xODM4OCA2LjA1NzY1IDMuNDQyODMgNS40NDgzMyAzLjgxMTcxIDQuOTIxNjVMMi45NTM5OCAzLjU2MUwzLjU2MDA4IDIuOTU0OTFMNC45MjA1MyAzLjgxMjUxWk05LjAyNDk2IDcuNTAwMDhDOS4wMjQ5NiA4LjM0MjI2IDguMzQyMjMgOS4wMjQ5OSA3LjUwMDA1IDkuMDI0OTlDNi42NTc4NiA5LjAyNDk5IDUuOTc1MTMgOC4zNDIyNiA1Ljk3NTEzIDcuNTAwMDhDNS45NzUxMyA2LjY1Nzg5IDYuNjU3ODYgNS45NzUxNiA3LjUwMDA1IDUuOTc1MTZDOC4zNDIyMyA1Ljk3NTE2IDkuMDI0OTYgNi42NTc4OSA5LjAyNDk2IDcuNTAwMDhaTTkuOTI0OTYgNy41MDAwOEM5LjkyNDk2IDguODM5MzIgOC44MzkyOSA5LjkyNDk5IDcuNTAwMDUgOS45MjQ5OUM2LjE2MDggOS45MjQ5OSA1LjA3NTEzIDguODM5MzIgNS4wNzUxMyA3LjUwMDA4QzUuMDc1MTMgNi4xNjA4NCA2LjE2MDggNS4wNzUxNiA3LjUwMDA1IDUuMDc1MTZDOC44MzkyOSA1LjA3NTE2IDkuOTI0OTYgNi4xNjA4NCA5LjkyNDk2IDcuNTAwMDhaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxadD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTkzNiAwLjg1MDAwNkMzLjgyNzY3IDAuODUwMDA2IDAuODQ5OTc2IDMuODI3MyAwLjg0OTk3NiA3LjUwMDIzQzAuODQ5OTc2IDEwLjQzNzkgMi43NTUyMyAxMi45MzA2IDUuMzk3NzUgMTMuODEwNEM1LjczMDQ3IDEzLjg3MTIgNS44NTE3MSAxMy42NjU4IDUuODUxNzEgMTMuNDg5NUM1Ljg1MTcxIDEzLjMzMTUgNS44NDYgMTIuOTEzNSA1Ljg0MjczIDEyLjM1ODdDMy45OTMwMSAxMi43NjA0IDMuNjAyNzMgMTEuNDY3MSAzLjYwMjczIDExLjQ2NzFDMy4zMDAyMiAxMC42OTg4IDIuODY0MjMgMTAuNDk0MiAyLjg2NDIzIDEwLjQ5NDJDMi4yNjA0NCAxMC4wODE5IDIuOTA5OTUgMTAuMDkwMSAyLjkwOTk1IDEwLjA5MDFDMy41Nzc0MiAxMC4xMzcgMy45Mjg1IDEwLjc3NTUgMy45Mjg1IDEwLjc3NTVDNC41MjE2NyAxMS43OTE2IDUuNDg1MTIgMTEuNDk4MSA1Ljg2Mzk2IDExLjMyNzlDNS45MjQzOCAxMC44OTg0IDYuMDk2MjUgMTAuNjA1MyA2LjI4NjA4IDEwLjQzOTFDNC44MDk0OCAxMC4yNzA5IDMuMjU2OTUgOS43MDA2MyAzLjI1Njk1IDcuMTUyNDFDMy4yNTY5NSA2LjQyNjE1IDMuNTE2MTggNS44MzI5OCAzLjk0MTU3IDUuMzY4QzMuODcyOTkgNS4xOTk4IDMuNjQ0NzggNC41MjM3NSA0LjAwNjg5IDMuNjA4MDdDNC4wMDY4OSAzLjYwODA3IDQuNTY0OTQgMy40MjkyNiA1LjgzNTM4IDQuMjg5NDFDNi4zNjU2OCA0LjE0MjA0IDYuOTM0NzcgNC4wNjg1NiA3LjUwMDE4IDQuMDY1N0M4LjA2NTE4IDQuMDY4NTYgOC42MzM4NiA0LjE0MjA0IDkuMTY0OTggNC4yODk0MUMxMC40MzQ2IDMuNDI5MjYgMTAuOTkxOCAzLjYwODA3IDEwLjk5MTggMy42MDgwN0MxMS4zNTQ4IDQuNTIzNzUgMTEuMTI2NiA1LjE5OTggMTEuMDU4NCA1LjM2OEMxMS40ODQ2IDUuODMyOTggMTEuNzQxOCA2LjQyNjE1IDExLjc0MTggNy4xNTI0MUMxMS43NDE4IDkuNzA3MTYgMTAuMTg2OCAxMC4yNjkzIDguNzA1NzEgMTAuNDMzOEM4Ljk0NDEyIDEwLjYzOTIgOS4xNTY4MSAxMS4wNDUgOS4xNTY4MSAxMS42NjU1QzkuMTU2ODEgMTIuNTU0MiA5LjE0ODY1IDEzLjI3MTUgOS4xNDg2NSAxMy40ODk1QzkuMTQ4NjUgMTMuNjY3NSA5LjI2ODY3IDEzLjg3NDUgOS42MDU4OCAxMy44MDk1QzEyLjI0NjQgMTIuOTI4MiAxNC4xNSAxMC40Mzc1IDE0LjE1IDcuNTAwMjNDMTQuMTUgMy44MjczIDExLjE3MjMgMC44NTAwMDYgNy40OTkzNiAwLjg1MDAwNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LCR0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTk2IDEuODAwMDJDNC4zNTE5NCAxLjgwMDAyIDEuNzk5OTYgNC4zNTIgMS43OTk5NiA3LjUwMDAyQzEuNzk5OTYgMTAuNjQ4IDQuMzUxOTQgMTMuMiA3LjQ5OTk2IDEzLjJDMTAuNjQ4IDEzLjIgMTMuMiAxMC42NDggMTMuMiA3LjUwMDAyQzEzLjIgNC4zNTIgMTAuNjQ4IDEuODAwMDIgNy40OTk5NiAxLjgwMDAyWk0wLjg5OTk2MyA3LjUwMDAyQzAuODk5OTYzIDMuODU0OTQgMy44NTQ4OCAwLjkwMDAyNCA3LjQ5OTk2IDAuOTAwMDI0QzExLjE0NSAwLjkwMDAyNCAxNC4xIDMuODU0OTQgMTQuMSA3LjUwMDAyQzE0LjEgMTEuMTQ1MSAxMS4xNDUgMTQuMSA3LjQ5OTk2IDE0LjFDMy44NTQ4OCAxNC4xIDAuODk5OTYzIDExLjE0NTEgMC44OTk5NjMgNy41MDAwMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEzLjQ5OTkgNy44OTk5OEgxLjQ5OTk0VjcuMDk5OThIMTMuNDk5OVY3Ljg5OTk4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy4wOTk5MSAxMy41VjEuNUg3Ljg5OTkxVjEzLjVINy4wOTk5MXpNMTAuMzc1IDcuNDk5OThDMTAuMzc1IDUuMzI3MjQgOS41OTM2NCAzLjE3Nzc4IDguMDYxODMgMS43NTY1Nkw4LjUzNzkzIDEuMjQzNDFDMTAuMjM5NiAyLjgyMjE4IDExLjA3NSA1LjE3MjczIDExLjA3NSA3LjQ5OTk4IDExLjA3NSA5LjgyNzI0IDEwLjIzOTYgMTIuMTc3OCA4LjUzNzkzIDEzLjc1NjZMOC4wNjE4MyAxMy4yNDM0QzkuNTkzNjQgMTEuODIyMiAxMC4zNzUgOS42NzI3MyAxMC4zNzUgNy40OTk5OHpNMy45OTk2OSA3LjVDMy45OTk2OSA1LjE3NjExIDQuODA3ODYgMi44MjY3OCA2LjQ1NzY4IDEuMjQ3MTlMNi45NDE3NyAxLjc1MjgxQzUuNDU4MiAzLjE3MzIzIDQuNjk5NjkgNS4zMjM4OSA0LjY5OTY5IDcuNSA0LjY5OTcgOS42NzYxMSA1LjQ1ODIyIDExLjgyNjggNi45NDE3OSAxMy4yNDcyTDYuNDU3NjkgMTMuNzUyOEM0LjgwNzg4IDEyLjE3MzIgMy45OTk3IDkuODIzOSAzLjk5OTY5IDcuNXpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5OTYgMy45NTgwMUM5LjY2OTI4IDMuOTU4MDEgMTEuODc1MyA0LjM1OTE1IDEzLjM3MDYgNS4xOTQ0OCAxMy41Mzk0IDUuMjg4NzUgMTMuNTk5OCA1LjUwMTk3IDEzLjUwNTUgNS42NzA3MyAxMy40MTEzIDUuODM5NDggMTMuMTk4IDUuODk5ODcgMTMuMDI5MyA1LjgwNTYgMTEuNjc5NCA1LjA1MTU1IDkuNjA3OTkgNC42NTgwMSA3LjQ5OTk2IDQuNjU4MDEgNS4zOTE5MiA0LjY1ODAxIDMuMzIwNTIgNS4wNTE1NSAxLjk3MDY0IDUuODA1NiAxLjgwMTg4IDUuODk5ODcgMS41ODg2NiA1LjgzOTQ4IDEuNDk0MzkgNS42NzA3MyAxLjQwMDEzIDUuNTAxOTcgMS40NjA1MSA1LjI4ODc1IDEuNjI5MjcgNS4xOTQ0OCAzLjEyNDY2IDQuMzU5MTUgNS4zMzA2MyAzLjk1ODAxIDcuNDk5OTYgMy45NTgwMXpNNy40OTk5NiAxMC44NUM5LjY2OTI4IDEwLjg1IDExLjg3NTMgMTAuNDQ4OCAxMy4zNzA2IDkuNjEzNSAxMy41Mzk0IDkuNTE5MjQgMTMuNTk5OCA5LjMwNjAxIDEzLjUwNTUgOS4xMzcyNiAxMy40MTEzIDguOTY4NSAxMy4xOTggOC45MDgxMiAxMy4wMjkzIDkuMDAyMzggMTEuNjc5NCA5Ljc1NjQzIDkuNjA3OTkgMTAuMTUgNy40OTk5NiAxMC4xNSA1LjM5MTkyIDEwLjE1IDMuMzIwNTIgOS43NTY0MyAxLjk3MDY0IDkuMDAyMzkgMS44MDE4OCA4LjkwODEyIDEuNTg4NjYgOC45Njg1IDEuNDk0MzkgOS4xMzcyNiAxLjQwMDEzIDkuMzA2MDEgMS40NjA1MSA5LjUxOTI0IDEuNjI5MjcgOS42MTM1IDMuMTI0NjYgMTAuNDQ4OCA1LjMzMDYzIDEwLjg1IDcuNDk5OTYgMTAuODV6XCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxOdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTIuNSAySDhWN0gxM1YyLjVDMTMgMi4yMjM4NiAxMi43NzYxIDIgMTIuNSAyWk0xMyA4SDhWMTNIMTIuNUMxMi43NzYxIDEzIDEzIDEyLjc3NjEgMTMgMTIuNVY4Wk03IDdWMkgyLjVDMi4yMjM4NiAyIDIgMi4yMjM4NiAyIDIuNVY3SDdaTTIgOFYxMi41QzIgMTIuNzc2MSAyLjIyMzg2IDEzIDIuNSAxM0g3VjhIMlpNMi41IDFDMS42NzE1NyAxIDEgMS42NzE1NyAxIDIuNVYxMi41QzEgMTMuMzI4NCAxLjY3MTU3IDE0IDIuNSAxNEgxMi41QzEzLjMyODQgMTQgMTQgMTMuMzI4NCAxNCAxMi41VjIuNUMxNCAxLjY3MTU3IDEzLjMyODQgMSAxMi41IDFIMi41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sRnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuNDQ5OTUgMC45NDk5NTFDMS4zMTczNCAwLjk0OTk1MSAxLjE5MDE2IDEuMDAyNjMgMS4wOTY0IDEuMDk2NEMxLjAwMjYzIDEuMTkwMTcgMC45NDk5NTEgMS4zMTczNSAwLjk0OTk1MSAxLjQ0OTk1TDAuOTQ5OTY2IDMuNDQ5OTVDMC45NDk5NjkgMy43MjYxIDEuMTczODMgMy45NDk5NSAxLjQ0OTk3IDMuOTQ5OTVDMS43MjYxMSAzLjk0OTk1IDEuOTQ5OTcgMy43MjYwOSAxLjk0OTk3IDMuNDQ5OTVMMS45NDk5NSAxLjk0OTk1SDMuNDQ5OTdDMy43MjYxMSAxLjk0OTk1IDMuOTQ5OTcgMS43MjYwOSAzLjk0OTk3IDEuNDQ5OTVDMy45NDk5NyAxLjE3MzgxIDMuNzI2MTEgMC45NDk5NTEgMy40NDk5NyAwLjk0OTk1MUgxLjQ0OTk1Wk01Ljk0OTk1IDAuOTQ5OTUxQzUuNjczODEgMC45NDk5NTEgNS40NDk5NSAxLjE3MzgxIDUuNDQ5OTUgMS40NDk5NUM1LjQ0OTk1IDEuNzI2MDkgNS42NzM4MSAxLjk0OTk1IDUuOTQ5OTUgMS45NDk5NUg4Ljk0OTk1QzkuMjI2MDkgMS45NDk5NSA5LjQ0OTk1IDEuNzI2MDkgOS40NDk5NSAxLjQ0OTk1QzkuNDQ5OTUgMS4xNzM4MSA5LjIyNjA5IDAuOTQ5OTUxIDguOTQ5OTUgMC45NDk5NTFINS45NDk5NVpNNS40NDk5NSAxMy40NUM1LjQ0OTk1IDEzLjE3MzggNS42NzM4MSAxMi45NSA1Ljk0OTk1IDEyLjk1SDguOTQ5OTVDOS4yMjYwOSAxMi45NSA5LjQ0OTk1IDEzLjE3MzggOS40NDk5NSAxMy40NUM5LjQ0OTk1IDEzLjcyNjEgOS4yMjYwOSAxMy45NSA4Ljk0OTk1IDEzLjk1SDUuOTQ5OTVDNS42NzM4MSAxMy45NSA1LjQ0OTk1IDEzLjcyNjEgNS40NDk5NSAxMy40NVpNMS45NDk5NSA1Ljk0OTk1QzEuOTQ5OTUgNS42NzM4MSAxLjcyNjA5IDUuNDQ5OTUgMS40NDk5NSA1LjQ0OTk1QzEuMTczODEgNS40NDk5NSAwLjk0OTk1MSA1LjY3MzgxIDAuOTQ5OTUxIDUuOTQ5OTVWOC45NDk5NUMwLjk0OTk1MSA5LjIyNjA5IDEuMTczODEgOS40NDk5NSAxLjQ0OTk1IDkuNDQ5OTVDMS43MjYwOSA5LjQ0OTk1IDEuOTQ5OTUgOS4yMjYwOSAxLjk0OTk1IDguOTQ5OTVWNS45NDk5NVpNMTMuNDUgNS40NDk5NUMxMy43MjYxIDUuNDQ5OTUgMTMuOTUgNS42NzM4MSAxMy45NSA1Ljk0OTk1VjguOTQ5OTVDMTMuOTUgOS4yMjYwOSAxMy43MjYxIDkuNDQ5OTUgMTMuNDUgOS40NDk5NUMxMy4xNzM4IDkuNDQ5OTUgMTIuOTUgOS4yMjYwOSAxMi45NSA4Ljk0OTk1VjUuOTQ5OTVDMTIuOTUgNS42NzM4MSAxMy4xNzM4IDUuNDQ5OTUgMTMuNDUgNS40NDk5NVpNMTEuNDUgMC45NDk5NTFDMTEuMTczOCAwLjk0OTk1MSAxMC45NSAxLjE3MzgxIDEwLjk1IDEuNDQ5OTVDMTAuOTUgMS43MjYwOSAxMS4xNzM4IDEuOTQ5OTUgMTEuNDUgMS45NDk5NUgxMi45NDk5VjMuNDQ5OTVDMTIuOTQ5OSAzLjcyNjA5IDEzLjE3MzggMy45NDk5NSAxMy40NDk5IDMuOTQ5OTVDMTMuNzI2MSAzLjk0OTk1IDEzLjk0OTkgMy43MjYwOSAxMy45NDk5IDMuNDQ5OTVWMS40NDk5NUMxMy45NDk5IDEuMTczODEgMTMuNzI1MiAwLjk0OTk1MSAxMy40NDkgMC45NDk5NTFIMTEuNDVaTTEuNDQ5OTUgMTAuOTVDMS43MjYwOSAxMC45NSAxLjk0OTk1IDExLjE3MzggMS45NDk5NSAxMS40NVYxMi45NUgzLjQ0OTk3QzMuNzI2MTEgMTIuOTUgMy45NDk5NyAxMy4xNzM4IDMuOTQ5OTcgMTMuNDVDMy45NDk5NyAxMy43MjYxIDMuNzI2MTEgMTMuOTUgMy40NDk5NyAxMy45NUgxLjQ0OTk1QzEuMTczODEgMTMuOTUgMC45NDk5NTEgMTMuNzI2MSAwLjk0OTk1MSAxMy40NVYxMS40NUMwLjk0OTk1MSAxMS4xNzM4IDEuMTczODEgMTAuOTUgMS40NDk5NSAxMC45NVpNMTMuOTUgMTEuNDVDMTMuOTUgMTEuMTczOCAxMy43MjYxIDEwLjk1IDEzLjQ1IDEwLjk1QzEzLjE3MzggMTAuOTQ5OSAxMi45NSAxMS4xNzM4IDEyLjk1IDExLjQ0OTlMMTIuOTQ5MSAxMi45NUgxMS40NUMxMS4xNzM4IDEyLjk1IDEwLjk1IDEzLjE3MzggMTAuOTUgMTMuNDVDMTAuOTUgMTMuNzI2MSAxMS4xNzM4IDEzLjk1IDExLjQ1IDEzLjk1SDEzLjQ0OTlDMTMuNzI2MSAxMy45NSAxMy45NDk5IDEzLjcyNjEgMTMuOTQ5OSAxMy40NUwxMy45NSAxMS40NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFV0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTkxIDAuODc2ODkyQzMuODQyMjIgMC44NzY4OTIgMC44NzcwNzUgMy44NDIwNCAwLjg3NzA3NSA3LjQ5OTcyQzAuODc3MDc1IDExLjE1NzQgMy44NDIyMiAxNC4xMjI2IDcuNDk5OTEgMTQuMTIyNkMxMS4xNTc2IDE0LjEyMjYgMTQuMTIyNyAxMS4xNTc0IDE0LjEyMjcgNy40OTk3MkMxNC4xMjI3IDMuODQyMDQgMTEuMTU3NiAwLjg3Njg5MiA3LjQ5OTkxIDAuODc2ODkyWk03LjAwMDAzIDEuODQ4NjFDNC4xMDExNCAyLjEwMTcgMS44MjcwNyA0LjUzNTE1IDEuODI3MDcgNy40OTk3MkMxLjgyNzA3IDEwLjQ2NDMgNC4xMDExNCAxMi44OTc3IDcuMDAwMDMgMTMuMTUwOFYxLjg0ODYxWk04LjAwMDAzIDEzLjE1MDhDMTAuODk4OCAxMi44OTc2IDEzLjE3MjcgMTAuNDY0MiAxMy4xNzI3IDcuNDk5NzJDMTMuMTcyNyA0LjUzNTI0IDEwLjg5ODggMi4xMDE4NSA4LjAwMDAzIDEuODQ4NjRWMTMuMTUwOFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFd0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTkxIDAuODc2ODkyQzMuODQyMjIgMC44NzY4OTIgMC44NzcwNzUgMy44NDIwNCAwLjg3NzA3NSA3LjQ5OTcyQzAuODc3MDc1IDExLjE1NzQgMy44NDIyMiAxNC4xMjI2IDcuNDk5OTEgMTQuMTIyNkMxMS4xNTc2IDE0LjEyMjYgMTQuMTIyNyAxMS4xNTc0IDE0LjEyMjcgNy40OTk3MkMxNC4xMjI3IDMuODQyMDQgMTEuMTU3NiAwLjg3Njg5MiA3LjQ5OTkxIDAuODc2ODkyWk03LjQ5OTg4IDEuODI2ODlDNC4zNjY4OCAxLjgyNjkgMS44MjcwNyA0LjM2NjcyIDEuODI3MDcgNy40OTk3MkMxLjgyNzA3IDEwLjYzMjcgNC4zNjY4OCAxMy4xNzI1IDcuNDk5ODggMTMuMTcyNlYxLjgyNjg5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0senQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuNSAzQzEuMjIzODYgMyAxIDMuMjIzODYgMSAzLjVDMSAzLjc3NjE0IDEuMjIzODYgNCAxLjUgNEgxMy41QzEzLjc3NjEgNCAxNCAzLjc3NjE0IDE0IDMuNUMxNCAzLjIyMzg2IDEzLjc3NjEgMyAxMy41IDNIMS41Wk0xIDcuNUMxIDcuMjIzODYgMS4yMjM4NiA3IDEuNSA3SDEzLjVDMTMuNzc2MSA3IDE0IDcuMjIzODYgMTQgNy41QzE0IDcuNzc2MTQgMTMuNzc2MSA4IDEzLjUgOEgxLjVDMS4yMjM4NiA4IDEgNy43NzYxNCAxIDcuNVpNMSAxMS41QzEgMTEuMjIzOSAxLjIyMzg2IDExIDEuNSAxMUgxMy41QzEzLjc3NjEgMTEgMTQgMTEuMjIzOSAxNCAxMS41QzE0IDExLjc3NjEgMTMuNzc2MSAxMiAxMy41IDEySDEuNUMxLjIyMzg2IDEyIDEgMTEuNzc2MSAxIDExLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxHdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNi44MTEzIDEuNjQ3MDZDNi42MjE4OCAyLjg3OTE4IDYuNjgyNjggMy44ODUyMyA2Ljc2ODQ4IDUuMzA0OTlDNi43ODQxNSA1LjU2NDI2IDYuODAwNjUgNS44MzczMiA2LjgxNjYxIDYuMTI4MDhDNi44MzExMSA2LjM5MjA4IDYuNjM3NTggNi42MjE3MiA2LjM3NDk1IDYuNjUyMTdDNi4xMTIzMiA2LjY4MjYyIDUuODcxMzggNi41MDMzNCA1LjgyNTA5IDYuMjQzMDRMNS43NDc1NCA1LjgwNjk4QzUuNjQ0MDIgNS4xNjUyOSA1LjQ4MzU1IDQuMjU0ODEgNS4xNzgwNyAzLjQ0NzQxQzQuODYyNDEgMi42MTMxMiA0LjQ0ODYgMi4wNDEyMSAzLjkzNDM2IDEuODYwNDRDMy42NDk5NCAxLjc2MTA0IDMuNDE5MDEgMS44NDI3OSAzLjI1ODY4IDIuMDEwNTJDMy4wODc0NiAyLjE4OTYyIDIuOTk3NiAyLjQ3MDY1IDMuMDYyNyAyLjc1Mzk5QzMuMjE0NiAzLjM0NDI0IDMuNDQ2MjcgMy45MTY3IDMuNjk4MzYgNC41MTgwMkMzLjcyMDgyIDQuNTcxNTggMy43NDM0NiA0LjYyNTQzIDMuNzY2MjEgNC42Nzk1NEMzLjk5NTQgNS4yMjQ1NyA0LjIzNjE5IDUuNzk3MiA0LjQxNjQ0IDYuMzkwODFMNC40MTY5MSA2LjM5MjM4QzQuNTYyIDYuODc1ODYgNC42NTY0NiA3LjI1OTUgNC43MzA4NiA3LjU2MTY1QzQuNzYwMzQgNy42ODEzOCA0Ljc4NjY3IDcuNzg4MzEgNC44MTE3NSA3Ljg4MzU5QzQuODY3NjggOC4wOTYwNiA0Ljc3ODM2IDguMzIwMTQgNC41OTE2MSA4LjQzNTg4QzQuNDA0ODYgOC41NTE2MSA0LjE2NDQ1IDguNTMxODggMy45OTkwNyA4LjM4NzI1QzMuNzM3NDkgOC4xNTg0OCAzLjUxNSA3LjkyNzg0IDMuMzE4MTcgNy43MTgwMkMzLjI3NjI3IDcuNjczMzUgMy4yMzYwMiA3LjYzMDE4IDMuMTk3MDUgNy41ODgzOEMzLjA0Nzc3IDcuNDI4MjYgMi45MTcxMiA3LjI4ODEyIDIuNzgzMzQgNy4xNjAyOUMyLjQ1OTg5IDYuODUxMjIgMi4xODM5OCA2LjY4MDA0IDEuODA1ODUgNi42NDM2OUwxLjgwMzI0IDYuNjQzNDNDMS41NjExNyA2LjYxODg4IDEuNDE0MDIgNi42NjQ0MSAxLjMxNzU2IDYuNzI2MjdDMS4yMTg5OSA2Ljc4OTQ3IDEuMTE5ODggNi45MDQxNCAxLjAzNzg0IDcuMTEyM0MwLjk3NjU3NiA3LjI4NDkyIDEuMDE1MTUgNy42Mjk4NyAxLjE5MjkgNy45NjkxMUwxLjE5NzI4IDcuOTc3NDdDMS40MDA4NiA4LjM4NDUyIDEuNzQ0NzUgOC44MTU4NyAyLjE4MTQxIDkuMjkyOTlDMi4zOTczOSA5LjUyODk4IDIuNjI4NzIgOS43Njg0OSAyLjg2OTM0IDEwLjAxNzRMMi44Nzk2NiAxMC4wMjgxQzMuMTE1NDYgMTAuMjcyMSAzLjM1OTYyIDEwLjUyNDcgMy41OTcxMyAxMC43ODI3QzQuNDI4OCAxMS42ODYzIDUuMjc3MDYgMTIuNzUzOCA1LjQ2MjcgMTRIMTEuNTA4N0MxMS41NjM2IDEyLjQzNTMgMTEuODc1NiAxMS4yNjggMTIuMjg3NSAxMC4xMzQ2QzEyLjQ0NTQgOS43MDA0MSAxMi42MTIxIDkuMjg0MTIgMTIuNzgyNiA4Ljg1ODI5QzEzLjEwOTcgOC4wNDEzOSAxMy40NTA5IDcuMTg5MzcgMTMuNzcwNSA2LjEwODI0QzE0LjA5ODkgNC45OTczNyAxNC4wMDk3IDQuMzcwMzMgMTMuODYxMyA0LjAzOTg0QzEzLjcxNyAzLjcxODU4IDEzLjQ5MTQgMy42MTc4NiAxMy4zODE2IDMuNTk2MDZDMTMuMTM4MSAzLjU0Nzc0IDEzLjAzODQgMy42MDk0NyAxMi45Njk4IDMuNjc5MDFDMTIuODY3IDMuNzgzMTYgMTIuNzY5OCAzLjk4MjczIDEyLjY5MjEgNC4zMDI2OUMxMi42MTY2IDQuNjEzNDUgMTIuNTc1MiA0Ljk2NTE3IDEyLjUzMyA1LjMyNTAxTDEyLjUyOTggNS4zNTI4NUMxMi40OTI0IDUuNjcyNDIgMTIuNDUwNSA2LjAzMDE2IDEyLjM2NjUgNi4zMDA5OEMxMi4zMzgzIDYuNDA2OTkgMTIuMjgxOSA2LjUwNDA3IDEyLjE5NzkgNi41NzUzOUMxMi4xMzgyIDYuNjI2MSAxMi4wMTA0IDYuNzA4MTggMTEuODMwOSA2LjY5MzEyQzExLjU0MjQgNi42Njg5MSAxMS4zNzEyIDYuNDIxNDMgMTEuMzY1IDYuMTQ3ODNDMTEuMzU2IDUuNzU0NTQgMTEuMzg4MyA1LjM1ODY0IDExLjQwNzQgNC45NjYwOEMxMS40NDI4IDQuMjM2NDYgMTEuNDc3IDMuNTMzNyAxMS40MjQ1IDIuODM0MkwxMS40MjQyIDIuODI5MzRDMTEuMzkxNiAyLjMyOTk3IDExLjA0OTMgMi4wMDIyOCAxMC43MDA3IDEuOTIyOEMxMC41MzA1IDEuODg0MDEgMTAuMzY5IDEuOTA2MDEgMTAuMjM0NyAxLjk4MzVDMTAuMTAzIDIuMDU5NDYgOS45NTUzNSAyLjIxMzE4IDkuODU3NCAyLjUxMzk0TDkuODU2MzEgMi41MTcyNkM5LjgxNTI1IDIuNjQwNCA5Ljc3Mjk4IDIuODc3NTMgOS43MzYwNiAzLjIxMjRDOS43MDA0NCAzLjUzNTQyIDkuNjczMzcgMy45MTI3OSA5LjY1MTU2IDQuMjk0MThDOS42MzI5IDQuNjIwMzMgOS42MTc4NSA0Ljk1ODQgOS42MDQzNCA1LjI2MTk0QzkuNTg3MjggNS42NDUyOSA5LjU3MjY3IDUuOTczNTcgOS41NTYzMyA2LjE1MzJDOS41NDk4MyA2LjIyNDU5IDkuNTI5MzkgNi4yOTQ5MyA5LjQ5NTAxIDYuMzU3ODVDOS40NzM1NiA2LjM5NzExIDkuMzYxMTUgNi42MDk0NyA5LjA3MTA2IDYuNjE4NDNDOC43NzkxNyA2LjYyNzQ0IDguNjM5NzUgNi40MDA1NyA4LjYxNjk4IDYuMzU5MTlDOC41NTYzNCA2LjI0ODk5IDguNTUwNjYgNi4xMTgwNyA4LjU0NzU0IDUuOTkyODNDOC41NDQ3NCA1Ljg4MDY0IDguNTQyOTQgNS43MTc5OCA4LjU0MTc0IDUuNTQ3NjdDOC41MzkzNSA1LjIwNTgyIDguNTM5MzUgNC44MTkxOSA4LjUzOTM1IDQuNzA5NTJDOC41MzkzNSAzLjY2NTcgOC41MzgzOCAyLjY1MzcyIDguNDQ3MTQgMS42NDM3MkM4LjM5MTgzIDEuMjQxMjcgOC4wNjI3OCAxLjAwNDU1IDcuNjQzNiAxLjAwMDA1QzcuMjIzOTkgMC45OTU1NTIgNi44NzkxOCAxLjIyNzA0IDYuODExMyAxLjY0NzA2Wk05LjQxMjE5IDEuMzYxN0M5LjIxNDY5IDAuNDQ4NDg0IDguMzk5MTMgMC4wMDgxMDMyNCA3LjY1NDMzIDAuMDAwMTExNTRDNi44NjQ1MiAtMC4wMDgzNjMwOCA1Ljk4NzYxIDAuNDY1ODgxIDUuODIzNjUgMS40OTAzN0w1LjgyMzE4IDEuNDkzMzRDNS43ODIzOSAxLjc1ODQgNS43NTIyOSAyLjAxNDgxIDUuNzMwOSAyLjI2NjUyQzUuMzk0MjMgMS42NzM2NCA0LjkyNjIyIDEuMTQ4OTQgNC4yNjU1IDAuOTE2ODU5QzMuNTg2NjEgMC42NzkzMTIgMi45NDkyIDAuODg3MDg3IDIuNTM1ODIgMS4zMTk1MkMyLjEzNDE1IDEuNzM5NzEgMS45NDQzOCAyLjM2NzQyIDIuMDkwMzEgMi45ODc0NkwyLjA5MjY5IDIuOTk3MTNDMi4yNjQ3OCAzLjY2ODA4IDIuNTIzOTYgNC4zMDMxNiAyLjc3NjEzIDQuOTA0NjVDMi43OTgxNCA0Ljk1NzE3IDIuODIwMSA1LjAwOTQxIDIuODQxOTQgNS4wNjEzOUMzLjAyMTM5IDUuNDg4NDIgMy4xOTM3OCA1Ljg5ODY2IDMuMzM4NzEgNi4zMTI1NkMyLjk2NDA0IDUuOTgxNDIgMi41MTkyNSA1LjcwNzk2IDEuOTAyNzYgNS42NDg0QzEuNDg4NjUgNS42MDY2MyAxLjEwMzkxIDUuNjc1MzYgMC43Nzc4MDUgNS44ODQ0NEMwLjQ1NDIzOSA2LjA5MTkgMC4yNDA2NzEgNi40MDQwNSAwLjEwNDE4NyA2Ljc1NDA2TDAuMTAwODY4IDYuNzYyODFDLTAuMTAxODQgNy4zMTI4NiAwLjA2NjMzMTIgNy45NzE1NyAwLjMwNDg5NSA4LjQyODk3QzAuNTczNzA0IDguOTY0NzQgMC45OTYxMDQgOS40NzkwNCAxLjQ0MzcyIDkuOTY4MTNDMS42NzA0NiAxMC4yMTU5IDEuOTExMzYgMTAuNDY1MiAyLjE1MDMzIDEwLjcxMjRMMi4xNTY4MiAxMC43MTkxQzIuMzk1MjQgMTAuOTY1OCAyLjYzMjE3IDExLjIxMDkgMi44NjEzNCAxMS40NTk5QzMuODA5MzcgMTIuNDkgNC41MDAwMiAxMy40NjMyIDQuNTAwMDIgMTQuNUM0LjUwMDAyIDE0Ljc3NjEgNC43MjM4OCAxNSA1LjAwMDAyIDE1SDEyQzEyLjI3NjIgMTUgMTIuNSAxNC43NzYxIDEyLjUgMTQuNUMxMi41IDEyLjgyMTIgMTIuODAyMSAxMS42NDYyIDEzLjIyNzQgMTAuNDc2MkMxMy4zNjUzIDEwLjA5NjggMTMuNTIxNiA5LjcwNTc5IDEzLjY4NjggOS4yOTI0N0MxNC4wMjM4IDguNDQ5MjIgMTQuMzk4IDcuNTEyOTggMTQuNzI5NSA2LjM5MTc1QzE1LjA5NTYgNS4xNTMyNCAxNS4wNTU5IDQuMjU5MDQgMTQuNzczNSAzLjYzMDE3QzE0LjQ4NyAyLjk5MjA4IDEzLjk3OTggMi42OTUzIDEzLjU3NjMgMi42MTUyQzEzLjEyNzYgMi41MjYxNCAxMi43MzY3IDIuNjA0NzUgMTIuNDI2OCAyLjgzMDgxQzEyLjQyNTMgMi44MDc3MyAxMi40MjM2IDIuNzg0NjggMTIuNDIxOSAyLjc2MTY3QzEyLjM1ODcgMS44MTA1IDExLjY5MDcgMS4xMjI4NSAxMC45MjMgMC45NDc4MjFDMTAuNTM0NiAwLjg1OTI4NyAxMC4xMTExIDAuOTAwMzkzIDkuNzM1MDkgMS4xMTcyNEM5LjYxODUyIDEuMTg0NDYgOS41MTA1NSAxLjI2NjIzIDkuNDEyMTkgMS4zNjE3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0scXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTguNzU0MzIgMi4wNTAyQzguNTA1NzkgMi4wNTAyIDguMzA0MzIgMi4yNTE2NyA4LjMwNDMyIDIuNTAwMkM4LjMwNDMyIDIuNzQ4NzMgOC41MDU3OSAyLjk1MDIgOC43NTQzMiAyLjk1MDJIOS45NDk5N1Y3LjA1MDA0SDUuMDQ5OTdWMi45NTAySDYuMjU0MzJDNi41MDI4NSAyLjk1MDIgNi43MDQzMiAyLjc0ODczIDYuNzA0MzIgMi41MDAyQzYuNzA0MzIgMi4yNTE2NyA2LjUwMjg1IDIuMDUwMiA2LjI1NDMyIDIuMDUwMkgyLjc1NDMyQzIuNTA1NzkgMi4wNTAyIDIuMzA0MzIgMi4yNTE2NyAyLjMwNDMyIDIuNTAwMkMyLjMwNDMyIDIuNzQ4NzMgMi41MDU3OSAyLjk1MDIgMi43NTQzMiAyLjk1MDJIMy45NDk5N1YxMi4wNTAySDIuNzU0MzJDMi41MDU3OSAxMi4wNTAyIDIuMzA0MzIgMTIuMjUxNyAyLjMwNDMyIDEyLjUwMDJDMi4zMDQzMiAxMi43NDg3IDIuNTA1NzkgMTIuOTUwMiAyLjc1NDMyIDEyLjk1MDJINi4yNTQzMkM2LjUwMjg1IDEyLjk1MDIgNi43MDQzMiAxMi43NDg3IDYuNzA0MzIgMTIuNTAwMkM2LjcwNDMyIDEyLjI1MTcgNi41MDI4NSAxMi4wNTAyIDYuMjU0MzIgMTIuMDUwMkg1LjA0OTk3VjcuOTUwMDRIOS45NDk5N1YxMi4wNTAySDguNzU0MzJDOC41MDU3OSAxMi4wNTAyIDguMzA0MzIgMTIuMjUxNyA4LjMwNDMyIDEyLjUwMDJDOC4zMDQzMiAxMi43NDg3IDguNTA1NzkgMTIuOTUwMiA4Ljc1NDMyIDEyLjk1MDJIMTIuMjU0M0MxMi41MDI4IDEyLjk1MDIgMTIuNzA0MyAxMi43NDg3IDEyLjcwNDMgMTIuNTAwMkMxMi43MDQzIDEyLjI1MTcgMTIuNTAyOCAxMi4wNTAyIDEyLjI1NDMgMTIuMDUwMkgxMS4wNVYyLjk1MDJIMTIuMjU0M0MxMi41MDI4IDIuOTUwMiAxMi43MDQzIDIuNzQ4NzMgMTIuNzA0MyAyLjUwMDJDMTIuNzA0MyAyLjI1MTY3IDEyLjUwMjggMi4wNTAyIDEyLjI1NDMgMi4wNTAySDguNzU0MzJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxZdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy4xODEzIDEuNjgxNzlDNy4zNTcwNCAxLjUwNjA1IDcuNjQxOTYgMS41MDYwNSA3LjgxNzcgMS42ODE3OUwxMC4zMTc3IDQuMTgxNzlDMTAuNDkzNCA0LjM1NzUzIDEwLjQ5MzQgNC42NDI0NSAxMC4zMTc3IDQuODE4MTlDMTAuMTQyIDQuOTkzOTIgOS44NTcwNCA0Ljk5MzkyIDkuNjgxMyA0LjgxODE5TDcuOTQ5NSAzLjA4NjM4TDcuOTQ5NSAxMS45MTM2TDkuNjgxMyAxMC4xODE4QzkuODU3MDQgMTAuMDA2MSAxMC4xNDIgMTAuMDA2MSAxMC4zMTc3IDEwLjE4MThDMTAuNDkzNCAxMC4zNTc1IDEwLjQ5MzQgMTAuNjQyNCAxMC4zMTc3IDEwLjgxODJMNy44MTc3IDEzLjMxODJDNy43MzMzMSAxMy40MDI2IDcuNjE4ODUgMTMuNDUgNy40OTk1IDEzLjQ1QzcuMzgwMTUgMTMuNDUgNy4yNjU2OSAxMy40MDI2IDcuMTgxMyAxMy4zMTgyTDQuNjgxMyAxMC44MTgyQzQuNTA1NTcgMTAuNjQyNCA0LjUwNTU3IDEwLjM1NzUgNC42ODEzIDEwLjE4MThDNC44NTcwNCAxMC4wMDYxIDUuMTQxOTYgMTAuMDA2MSA1LjMxNzcgMTAuMTgxOEw3LjA0OTUgMTEuOTEzNkw3LjA0OTUgMy4wODYzOEw1LjMxNzcgNC44MTgxOUM1LjE0MTk2IDQuOTkzOTIgNC44NTcwNCA0Ljk5MzkyIDQuNjgxMyA0LjgxODE5QzQuNTA1NTcgNC42NDI0NSA0LjUwNTU3IDQuMzU3NTMgNC42ODEzIDQuMTgxNzlMNy4xODEzIDEuNjgxNzlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxLdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy4wNzkyNiAwLjIyMjI1M0M3LjMxMjc1IC0wLjAwNzQzNCA3LjY4NzMgLTAuMDA3NDM0IDcuOTIwNzkgMC4yMjIyNTNMMTQuNjcwOCA2Ljg2MjI3QzE0LjkwNyA3LjA5NDY1IDE0LjkxMDEgNy40NzQ1MyAxNC42Nzc4IDcuNzEwNzZDMTQuNDQ1NCA3Ljk0NyAxNC4wNjU1IDcuOTUwMTIgMTMuODI5MyA3LjcxNzczTDEzIDYuOTAyMDFWMTIuNUMxMyAxMi43NzYxIDEyLjc3NjIgMTMgMTIuNSAxM0gyLjUwMDAyQzIuMjIzODggMTMgMi4wMDAwMiAxMi43NzYxIDIuMDAwMDIgMTIuNVY2LjkwMjAxTDEuMTcwNzkgNy43MTc3M0MwLjkzNDU1OCA3Ljk1MDEyIDAuNTU0NjcyIDcuOTQ3IDAuMzIyMjkgNy43MTA3NkMwLjA4OTkwNzkgNy40NzQ1MyAwLjA5MzAyODMgNy4wOTQ2NSAwLjMyOTI2IDYuODYyMjdMNy4wNzkyNiAwLjIyMjI1M1pNNy41MDAwMiAxLjQ5MTYzTDEyIDUuOTE4MzFWMTJIMTBWOC40OTk5OUMxMCA4LjIyMzg1IDkuNzc2MTcgNy45OTk5OSA5LjUwMDAyIDcuOTk5OTlINi41MDAwMkM2LjIyMzg4IDcuOTk5OTkgNi4wMDAwMiA4LjIyMzg1IDYuMDAwMDIgOC40OTk5OVYxMkgzLjAwMDAyVjUuOTE4MzFMNy41MDAwMiAxLjQ5MTYzWk03LjAwMDAyIDEySDkuMDAwMDJWOC45OTk5OUg3LjAwMDAyVjEyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sWHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNSAwLjAwMzI5NTlDNi44MDQ3MyAwLjAwMzI5NTkgNi4yNDk1MyAwLjI4MTEwNiA2LjI1IDAuNzQ5OTk1QzYuMjUgMC45OTcyNTggNi40MjQ0NiAxLjEyMDE0IDYuNTc2ODcgMS4yMjc0OUM2LjY5NTA3IDEuMzEwNzQgNi44IDEuMzg0NjUgNi44IDEuNUM2LjggMS43MDcxIDYuMDYyMjQgMS43NDI2NCA1LjE5Nzg5IDEuNzg0MjdDMy45NzU1MyAxLjg0MzE0IDIuNSAxLjkxNDIxIDIuNSAyLjVDMi41IDIuNzc2MTQgMi43MjM4NiAzIDMgM0gxMkMxMi4yNzYxIDMgMTIuNSAyLjc3NjE0IDEyLjUgMi41QzEyLjUgMS45MTQyMSAxMS4wMjQ1IDEuODQzMTQgOS44MDIxMSAxLjc4NDI3QzguOTM3NzYgMS43NDI2NCA4LjIgMS43MDcxIDguMiAxLjVDOC4yIDEuMzg0NjUgOC4zMDQ5MyAxLjMxMDc0IDguNDIzMTMgMS4yMjc0OUM4LjU3NTU0IDEuMTIwMTQgOC43NSAwLjk5NzI1OCA4Ljc1IDAuNzQ5OTk1QzguNzUwNDcgMC4yODExMDYgOC4xOTUyNyAwLjAwMzI5NTkgNy41IDAuMDAzMjk1OVpNMi44OTQ1MSA2LjEyMjY2QzIuMjU4MDYgNi41MjQ3MSAxLjkwNDE3IDcuMzExMTggMi4wMjQ3MyA4LjA1NTZMMi44MzU4OCAxMi40NzcyQzMuMDA5OTMgMTMuMzU2MiAzLjc2MjkgMTQgNC42NjA2MSAxNEgxMC4zMzczQzExLjIzNTQgMTQgMTEuOTg4NCAxMy4zNTYyIDEyLjE2MjUgMTIuNDc3MkwxMi45NzM2IDguMDU2MDdDMTMuMDg5IDcuMzIzNTggMTIuODI4NCA2LjUzMjc2IDEyLjEzMzEgNi4wOTM3M0MxMS43MjgzIDUuODMwMTMgMTEuNjQxMiA1LjMzMjMxIDEyLjEzMzEgNS4xMjc5NkMxMi44Mjg0IDQuODY0MzUgMTIuNjk0OCA0IDEyIDRIMTAuMzAwMUg2LjgwMDA1SDIuOTk5OTZDMi4zMDQ2OSA0IDIuMTk4NzggNC44OTMyOCAyLjg5NDUxIDUuMTU2ODlDMy4zODY0MiA1LjMzMjMxIDMuMjk5MzkgNS44MzAxMyAyLjg5NDUxIDYuMTIyNjZaTTguMjAwMDYgNi4yNUM4LjIwMDA2IDUuODE3NjkgOC4wODU3MiA1LjM3NjE1IDcuOTA2MzUgNUw0LjExMDkzIDVDNC4yMDYyNiA1LjIxMzEyIDQuMjQxOSA1LjQzODg5IDQuMjI5MDQgNS42NTUyMUM0LjE5NTIyIDYuMjI0MTIgMy44NDU4NyA2LjY2ODk5IDMuNDgwMTYgNi45MzMyMkwzLjQ1NDkyIDYuOTUxNDZMMy40Mjg1OCA2Ljk2ODFDMy4xMzQwNyA3LjE1NDE0IDIuOTU4MDEgNy41Mzk4OSAzLjAxMDU4IDcuODg3NDlMMy44MTc5NyAxMi4yODg2QzMuOTA1MTMgMTIuNzE1NCA0LjI2MTQ4IDEzIDQuNjYwNjEgMTNIMTAuMzM3M0MxMC43MzcgMTMgMTEuMDkzMiAxMi43MTUzIDExLjE4MDQgMTIuMjg4NkwxMS45ODc0IDcuODg5OEMxMi4wNDggNy40ODI0NyAxMS44OTU0IDcuMTI2MzEgMTEuNTk5MiA2LjkzOTI3TDExLjU4NzUgNi45MzE4NEwxMS41ODc1IDYuOTMxNzZDMTEuMTk0NyA2LjY3NjAyIDEwLjgzMzEgNi4yMjc4NSAxMC43OTg2IDUuNjQ3OThDMTAuNzg0NiA1LjQxMiAxMC44MjY0IDUuMTkzOTcgMTAuOTExMiA1SDkuMDU1MTdDOS4wMTk4NyA1LjE0NjExIDkuMDAwMDYgNS4zMTIwMSA5LjAwMDA2IDUuNUM5LjAwMDA2IDUuOTc0NSA5LjIxNjc5IDYuMzcxMjcgOS40NDM2NyA2Ljc4NjYyQzkuNjkyODQgNy4yNDI3OCA5Ljk1NDI1IDcuNzIxMzYgOS45NTQyNSA4LjM0OTkzQzkuOTU0MjUgOS4yNjk4IDkuNDk4NjggOS44NDIwNSA4LjYyMTg5IDkuODQyMDVDOC4xMzIwNiA5Ljg0MjA1IDcuNTc4MTggOS40NjA5NyA3LjU3ODE4IDguNzU3ODFDNy41NzgxOCA4LjM1Mjc5IDcuNzE1NTggOC4wMTY0NiA3Ljg2MTIxIDcuNjU5OThDOC4wMjU0IDcuMjU4MDYgOC4yMDAwNiA2LjgzMDUxIDguMjAwMDYgNi4yNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEp0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xNCAxMS4wMDAxVjQuMDAwMDZMMSA0LjAwMDA2TDEgMTEuMDAwMUgxNFpNMTUgNC4wMDAwNlYxMS4wMDAxQzE1IDExLjU1MjMgMTQuNTUyMyAxMi4wMDAxIDE0IDEyLjAwMDFIMUMwLjQ0NzcxNSAxMi4wMDAxIDAgMTEuNTUyMyAwIDExLjAwMDFWNC4wMDAwNkMwIDMuNDQ3NzggMC40NDc3MTUgMy4wMDAwNiAxIDMuMDAwMDZIMTRDMTQuNTUyMyAzLjAwMDA2IDE1IDMuNDQ3NzggMTUgNC4wMDAwNlpNMiA1LjI1QzIgNS4xMTE5MyAyLjExMTkzIDUgMi4yNSA1SDUuNzVDNS44ODgwNyA1IDYgNS4xMTE5MyA2IDUuMjVWOS43NUM2IDkuODg4MDcgNS44ODgwNyAxMCA1Ljc1IDEwSDIuMjVDMi4xMTE5MyAxMCAyIDkuODg4MDcgMiA5Ljc1VjUuMjVaTTcuNSA3QzcuMjIzODYgNyA3IDcuMjIzODYgNyA3LjVDNyA3Ljc3NjE0IDcuMjIzODYgOCA3LjUgOEgxMC41QzEwLjc3NjEgOCAxMSA3Ljc3NjE0IDExIDcuNUMxMSA3LjIyMzg2IDEwLjc3NjEgNyAxMC41IDdINy41Wk03IDkuNUM3IDkuMjIzODYgNy4yMjM4NiA5IDcuNSA5SDEyLjVDMTIuNzc2MSA5IDEzIDkuMjIzODYgMTMgOS41QzEzIDkuNzc2MTQgMTIuNzc2MSAxMCAxMi41IDEwSDcuNUM3LjIyMzg2IDEwIDcgOS43NzYxNCA3IDkuNVpNNy41IDVDNy4yMjM4NiA1IDcgNS4yMjM4NiA3IDUuNUM3IDUuNzc2MTQgNy4yMjM4NiA2IDcuNSA2SDExLjVDMTEuNzc2MSA2IDEyIDUuNzc2MTQgMTIgNS41QzEyIDUuMjIzODYgMTEuNzc2MSA1IDExLjUgNUg3LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxRdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi41IDFIMTIuNUMxMy4zMjg0IDEgMTQgMS42NzE1NyAxNCAyLjVWMTIuNUMxNCAxMy4zMjg0IDEzLjMyODQgMTQgMTIuNSAxNEgyLjVDMS42NzE1NyAxNCAxIDEzLjMyODQgMSAxMi41VjIuNUMxIDEuNjcxNTcgMS42NzE1NyAxIDIuNSAxWk0yLjUgMkMyLjIyMzg2IDIgMiAyLjIyMzg2IDIgMi41VjguMzYzNkwzLjY4MTggNi42ODE4QzMuNzY4MDkgNi41OTU1MSAzLjg4NTcyIDYuNTQ3OTcgNC4wMDc3NCA2LjU1MDA3QzQuMTI5NzUgNi41NTIxNiA0LjI0NTY4IDYuNjAzNzIgNC4zMjg5NSA2LjY5MjkzTDcuODczNTUgMTAuNDkwMUwxMC42ODE4IDcuNjgxOEMxMC44NTc1IDcuNTA2MDcgMTEuMTQyNSA3LjUwNjA3IDExLjMxODIgNy42ODE4TDEzIDkuMzYzNlYyLjVDMTMgMi4yMjM4NiAxMi43NzYxIDIgMTIuNSAySDIuNVpNMiAxMi41VjkuNjM2NEwzLjk4ODg3IDcuNjQ3NTNMNy41MzExIDExLjQ0MjFMOC45NDExMyAxM0gyLjVDMi4yMjM4NiAxMyAyIDEyLjc3NjEgMiAxMi41Wk0xMi41IDEzSDEwLjE1NUw4LjQ4MzM2IDExLjE1M0wxMSA4LjYzNjRMMTMgMTAuNjM2NFYxMi41QzEzIDEyLjc3NjEgMTIuNzc2MSAxMyAxMi41IDEzWk02LjY0OTIyIDUuNUM2LjY0OTIyIDUuMDMwMTMgNy4wMzAxMyA0LjY0OTIyIDcuNSA0LjY0OTIyQzcuOTY5ODcgNC42NDkyMiA4LjM1MDc4IDUuMDMwMTMgOC4zNTA3OCA1LjVDOC4zNTA3OCA1Ljk2OTg3IDcuOTY5ODcgNi4zNTA3OCA3LjUgNi4zNTA3OEM3LjAzMDEzIDYuMzUwNzggNi42NDkyMiA1Ljk2OTg3IDYuNjQ5MjIgNS41Wk03LjUgMy43NDkyMkM2LjUzMzA3IDMuNzQ5MjIgNS43NDkyMiA0LjUzMzA3IDUuNzQ5MjIgNS41QzUuNzQ5MjIgNi40NjY5MyA2LjUzMzA3IDcuMjUwNzggNy41IDcuMjUwNzhDOC40NjY5MyA3LjI1MDc4IDkuMjUwNzggNi40NjY5MyA5LjI1MDc4IDUuNUM5LjI1MDc4IDQuNTMzMDcgOC40NjY5MyAzLjc0OTIyIDcuNSAzLjc0OTIyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNDk5OTEgMC44NzY4OTJDMy44NDIyMiAwLjg3Njg5MiAwLjg3NzA3NSAzLjg0MjA0IDAuODc3MDc1IDcuNDk5NzJDMC44NzcwNzUgMTEuMTU3NCAzLjg0MjIyIDE0LjEyMjYgNy40OTk5MSAxNC4xMjI2QzExLjE1NzYgMTQuMTIyNiAxNC4xMjI3IDExLjE1NzQgMTQuMTIyNyA3LjQ5OTcyQzE0LjEyMjcgMy44NDIwNCAxMS4xNTc2IDAuODc2ODkyIDcuNDk5OTEgMC44NzY4OTJaTTEuODI3MDcgNy40OTk3MkMxLjgyNzA3IDQuMzY2NzEgNC4zNjY4OSAxLjgyNjg5IDcuNDk5OTEgMS44MjY4OUMxMC42MzI5IDEuODI2ODkgMTMuMTcyNyA0LjM2NjcxIDEzLjE3MjcgNy40OTk3MkMxMy4xNzI3IDEwLjYzMjcgMTAuNjMyOSAxMy4xNzI2IDcuNDk5OTEgMTMuMTcyNkM0LjM2Njg5IDEzLjE3MjYgMS44MjcwNyAxMC42MzI3IDEuODI3MDcgNy40OTk3MlpNOC4yNDk5MiA0LjQ5OTk5QzguMjQ5OTIgNC45MTQyIDcuOTE0MTMgNS4yNDk5OSA3LjQ5OTkyIDUuMjQ5OTlDNy4wODU3MSA1LjI0OTk5IDYuNzQ5OTIgNC45MTQyIDYuNzQ5OTIgNC40OTk5OUM2Ljc0OTkyIDQuMDg1NzcgNy4wODU3MSAzLjc0OTk5IDcuNDk5OTIgMy43NDk5OUM3LjkxNDEzIDMuNzQ5OTkgOC4yNDk5MiA0LjA4NTc3IDguMjQ5OTIgNC40OTk5OVpNNi4wMDAwMyA1Ljk5OTk5SDYuNTAwMDNINy41MDAwM0M3Ljc3NjE4IDUuOTk5OTkgOC4wMDAwMyA2LjIyMzg0IDguMDAwMDMgNi40OTk5OVY5Ljk5OTk5SDguNTAwMDNIOS4wMDAwM1YxMUg4LjUwMDAzSDcuNTAwMDNINi41MDAwM0g2LjAwMDAzVjkuOTk5OTlINi41MDAwM0g3LjAwMDAzVjYuOTk5OTlINi41MDAwM0g2LjAwMDAzVjUuOTk5OTlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx0bj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNi41IDFDNi4yMjM4NiAxIDYgMS4yMjM4NiA2IDEuNUM2IDEuNzc2MTQgNi4yMjM4NiAyIDYuNSAyQzcuMTI2NzEgMiA3LjQ1NzE4IDIuMjAwMjggNy42NTU2MyAyLjQ3ODEyQzcuODc4MSAyLjc4OTU3IDggMy4yODgzNyA4IDRWMTFDOCAxMS43MTE2IDcuODc4MSAxMi4yMTA0IDcuNjU1NjMgMTIuNTIxOUM3LjQ1NzE4IDEyLjc5OTcgNy4xMjY3MSAxMyA2LjUgMTNDNi4yMjM4NiAxMyA2IDEzLjIyMzkgNiAxMy41QzYgMTMuNzc2MSA2LjIyMzg2IDE0IDYuNSAxNEM3LjM3MzI5IDE0IDguMDQyODIgMTMuNzAwMyA4LjQ2OTM3IDEzLjEwMzFDOC40Nzk3NiAxMy4wODg2IDguNDg5OTcgMTMuMDczOSA4LjUgMTMuMDU5MUM4LjUxMDAzIDEzLjA3MzkgOC41MjAyNCAxMy4wODg2IDguNTMwNjMgMTMuMTAzMUM4Ljk1NzE4IDEzLjcwMDMgOS42MjY3MSAxNCAxMC41IDE0QzEwLjc3NjEgMTQgMTEgMTMuNzc2MSAxMSAxMy41QzExIDEzLjIyMzkgMTAuNzc2MSAxMyAxMC41IDEzQzkuODczMjkgMTMgOS41NDI4MiAxMi43OTk3IDkuMzQ0MzcgMTIuNTIxOUM5LjEyMTkgMTIuMjEwNCA5IDExLjcxMTYgOSAxMVY0QzkgMy4yODgzNyA5LjEyMTkgMi43ODk1NyA5LjM0NDM3IDIuNDc4MTJDOS41NDI4MiAyLjIwMDI4IDkuODczMjkgMiAxMC41IDJDMTAuNzc2MSAyIDExIDEuNzc2MTQgMTEgMS41QzExIDEuMjIzODYgMTAuNzc2MSAxIDEwLjUgMUM5LjYyNjcxIDEgOC45NTcxOCAxLjI5OTcyIDguNTMwNjMgMS44OTY4OEM4LjUyMDI0IDEuOTExNDMgOC41MTAwMyAxLjkyNjExIDguNSAxLjk0MDlDOC40ODk5NyAxLjkyNjExIDguNDc5NzYgMS45MTE0MyA4LjQ2OTM3IDEuODk2ODhDOC4wNDI4MiAxLjI5OTcyIDcuMzczMjkgMSA2LjUgMVpNMTQgNUgxMVY0SDE0QzE0LjU1MjMgNCAxNSA0LjQ0NzcyIDE1IDVWMTBDMTUgMTAuNTUyMyAxNC41NTIzIDExIDE0IDExSDExVjEwSDE0VjVaTTYgNFY1SDFMMSAxMEg2VjExSDFDMC40NDc3MTUgMTEgMCAxMC41NTIzIDAgMTBWNUMwIDQuNDQ3NzIgMC40NDc3MTUgNCAxIDRINlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG5uPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjQ5OTk4IDAuNUM1LjQ5OTk4IDAuMjIzODU4IDUuNzIzODMgMCA1Ljk5OTk4IDBINy40OTk5OEg4Ljk5OTk4QzkuMjc2MTIgMCA5LjQ5OTk4IDAuMjIzODU4IDkuNDk5OTggMC41QzkuNDk5OTggMC43NzYxNDIgOS4yNzYxMiAxIDguOTk5OTggMUg3Ljk5OTk4VjIuMTE5MjJDOS4wOTgzMiAyLjIwNDA5IDEwLjExOSAyLjU2NjIyIDEwLjk5MiAzLjEzNTcyQzExLjAxMTYgMy4xMDg1MSAxMS4wMzM2IDMuMDgyNTIgMTEuMDU4IDMuMDU4MDZMMTIuMDU4IDIuMDU4MDZDMTIuMzAyMSAxLjgxMzk4IDEyLjY5NzggMS44MTM5OCAxMi45NDE5IDIuMDU4MDZDMTMuMTg2IDIuMzAyMTQgMTMuMTg2IDIuNjk3ODYgMTIuOTQxOSAyLjk0MTk0TDExLjk2NyAzLjkxNjgyQzEzLjE1OTUgNS4wNzkyNSAxMy45IDYuNzAzMTQgMTMuOSA4LjQ5OTk4QzEzLjkgMTIuMDM0NiAxMS4wMzQ2IDE0LjkgNy40OTk5OCAxNC45QzMuOTY1MzUgMTQuOSAxLjA5OTk4IDEyLjAzNDYgMS4wOTk5OCA4LjQ5OTk4QzEuMDk5OTggNS4xMzM2MSAzLjY5OTA0IDIuMzc0MyA2Ljk5OTk4IDIuMTE5MjJWMUg1Ljk5OTk4QzUuNzIzODMgMSA1LjQ5OTk4IDAuNzc2MTQyIDUuNDk5OTggMC41Wk0yLjA5OTk4IDguNDk5OThDMi4wOTk5OCA1LjUxNzY0IDQuNTE3NjQgMy4wOTk5OCA3LjQ5OTk4IDMuMDk5OThDMTAuNDgyMyAzLjA5OTk4IDEyLjkgNS41MTc2NCAxMi45IDguNDk5OThDMTIuOSAxMS40ODIzIDEwLjQ4MjMgMTMuOSA3LjQ5OTk4IDEzLjlDNC41MTc2NCAxMy45IDIuMDk5OTggMTEuNDgyMyAyLjA5OTk4IDguNDk5OThaTTcuNDk5OTggOC40OTk5OFY0LjA5OTk4QzUuMDY5OTIgNC4wOTk5OCAzLjA5OTk4IDYuMDY5OTIgMy4wOTk5OCA4LjQ5OTk4QzMuMDk5OTggMTAuOTMgNS4wNjk5MiAxMi45IDcuNDk5OTggMTIuOUM4LjcxNSAxMi45IDkuODE1IDEyLjQwNzUgMTAuNjExMiAxMS42MTEyTDcuNDk5OTggOC40OTk5OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHJuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03Ljc1NDMyIDAuODE5NTM3QzcuNTk3NDIgMC43MjY4MjEgNy40MDI1IDAuNzI2ODIxIDcuMjQ1NTkgMC44MTk1MzdMMS43NDU1OSA0LjA2OTU0QzEuNTkzMzYgNC4xNTk0OSAxLjQ5OTk2IDQuMzIzMTcgMS40OTk5NiA0LjVDMS40OTk5NiA0LjY3NjgzIDEuNTkzMzYgNC44NDA1MSAxLjc0NTU5IDQuOTMwNDZMNy4yNDU1OSA4LjE4MDQ2QzcuNDAyNSA4LjI3MzE4IDcuNTk3NDIgOC4yNzMxOCA3Ljc1NDMyIDguMTgwNDZMMTMuMjU0MyA0LjkzMDQ2QzEzLjQwNjYgNC44NDA1MSAxMy41IDQuNjc2ODMgMTMuNSA0LjVDMTMuNSA0LjMyMzE3IDEzLjQwNjYgNC4xNTk0OSAxMy4yNTQzIDQuMDY5NTRMNy43NTQzMiAwLjgxOTUzN1pNNy40OTk5NiA3LjE2OTIzTDIuOTgyOCA0LjVMNy40OTk5NiAxLjgzMDc3TDEyLjAxNzEgNC41TDcuNDk5OTYgNy4xNjkyM1pNMS41Njk1IDcuNDk1NjRDMS43MDk5OCA3LjI1NzkgMi4wMTY1OSA3LjE3OTA2IDIuMjU0MzIgNy4zMTk1NEw3LjQ5OTk2IDEwLjQxOTJMMTIuNzQ1NiA3LjMxOTU0QzEyLjk4MzMgNy4xNzkwNiAxMy4yODk5IDcuMjU3OSAxMy40MzA0IDcuNDk1NjRDMTMuNTcwOSA3LjczMzM3IDEzLjQ5MjEgOC4wMzk5OCAxMy4yNTQzIDguMTgwNDZMNy43NTQzMiAxMS40MzA1QzcuNTk3NDIgMTEuNTIzMiA3LjQwMjUgMTEuNTIzMiA3LjI0NTU5IDExLjQzMDVMMS43NDU1OSA4LjE4MDQ2QzEuNTA3ODYgOC4wMzk5OCAxLjQyOTAxIDcuNzMzMzcgMS41Njk1IDcuNDk1NjRaTTEuNTY5NDkgMTAuNDk1NkMxLjcwOTk4IDEwLjI1NzkgMi4wMTY1OCAxMC4xNzkxIDIuMjU0MzIgMTAuMzE5NUw3LjQ5OTk2IDEzLjQxOTJMMTIuNzQ1NiAxMC4zMTk1QzEyLjk4MzMgMTAuMTc5MSAxMy4yODk5IDEwLjI1NzkgMTMuNDMwNCAxMC40OTU2QzEzLjU3MDkgMTAuNzMzNCAxMy40OTIxIDExLjA0IDEzLjI1NDMgMTEuMTgwNUw3Ljc1NDMyIDE0LjQzMDVDNy41OTc0MiAxNC41MjMyIDcuNDAyNSAxNC41MjMyIDcuMjQ1NTkgMTQuNDMwNUwxLjc0NTU5IDExLjE4MDVDMS41MDc4NSAxMS4wNCAxLjQyOTAxIDEwLjczMzQgMS41Njk0OSAxMC40OTU2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sb249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTkgMkg2VjEzSDlWMlpNMTAgMlYxM0gxMi41QzEyLjc3NjEgMTMgMTMgMTIuNzc2MSAxMyAxMi41VjIuNUMxMyAyLjIyMzg2IDEyLjc3NjEgMiAxMi41IDJIMTBaTTIuNSAySDVWMTNIMi41QzIuMjIzODYgMTMgMiAxMi43NzYxIDIgMTIuNVYyLjVDMiAyLjIyMzg2IDIuMjIzODYgMiAyLjUgMlpNMi41IDFDMS42NzE1NyAxIDEgMS42NzE1NyAxIDIuNVYxMi41QzEgMTMuMzI4NCAxLjY3MTU3IDE0IDIuNSAxNEgxMi41QzEzLjMyODQgMTQgMTQgMTMuMzI4NCAxNCAxMi41VjIuNUMxNCAxLjY3MTU3IDEzLjMyODQgMSAxMi41IDFIMi41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sYW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNjg5NzkgMi43NUMzLjg5NjY3IDIuNzQ5NzkgNC4wODIzMiAyLjg3NzAxIDQuMTU2NzkgMy4wNzAwM0w3LjM2NjYyIDExLjM5QzcuNDY2MDIgMTEuNjQ3NyA3LjMzNzc0IDExLjkzNzEgNy4wODAxIDEyLjAzNjVDNi44MjI0NyAxMi4xMzU5IDYuNTMzMDQgMTIuMDA3NiA2LjQzMzY1IDExLjc1TDUuMzgyNSA5LjAyNTM3SDIuMDExMzNMMC45NjY5OTIgMTEuNzQ5QzAuODY4MTI4IDEyLjAwNjggMC41Nzg5NjQgMTIuMTM1NyAwLjMyMTEyNiAxMi4wMzY5QzAuMDYzMjg3OCAxMS45MzggLTAuMDY1NTg2NCAxMS42NDg4IDAuMDMzMjc3NCAxMS4zOTFMMy4yMjM0NCAzLjA3MDk5QzMuMjk3NTEgMi44Nzc4MiAzLjQ4MjkgMi43NTAyMSAzLjY4OTc5IDIuNzVaTTMuNjkxNzQgNC42NDI4NEw1LjA1NDU4IDguMTc1MzdIMi4zMzcyNEwzLjY5MTc0IDQuNjQyODRaTTEwLjg5ODkgNS4yMDcwM0M5LjI1ODE4IDUuMjA3MDMgOC4wMDkxNSA2LjY4NTY5IDguMDA5MTUgOC42MDk3MkM4LjAwOTE1IDEwLjYzMzcgOS4zNTgxOCAxMi4wMTI0IDEwLjg5ODkgMTIuMDEyNEMxMS43MjE0IDEyLjAxMjQgMTIuNTc0NCAxMS42NjkyIDEzLjE1NDMgMTEuMDIxOVYxMS41M0MxMy4xNTQzIDExLjc3ODUgMTMuMzU1NyAxMS45OCAxMy42MDQzIDExLjk4QzEzLjg1MjggMTEuOTggMTQuMDU0MyAxMS43Nzg1IDE0LjA1NDMgMTEuNTNWNS43MkMxNC4wNTQzIDUuNDcxNDcgMTMuODUyOCA1LjI3IDEzLjYwNDMgNS4yN0MxMy4zNTU3IDUuMjcgMTMuMTU0MyA1LjQ3MTQ3IDEzLjE1NDMgNS43MlY2LjIyMzE3QzEyLjYwNTQgNS42MDA5NSAxMS43OTI0IDUuMjA3MDMgMTAuODk4OSA1LjIwNzAzWk0xMy4xNTQzIDkuNzk4MjNWNy4zMDE5NUMxMi43NjM5IDYuNTgxMDEgMTEuOTQxNCA2LjA1NzU3IDExLjA4NjggNi4wNTc1N0MxMC4xMDg4IDYuMDU3NTcgOS4wMzUwMyA2Ljk2NTgxIDkuMDM1MDMgOC42MDk1NUM5LjAzNTAzIDEwLjE1MzMgMTAuMDA4OCAxMS4xNjE1IDExLjA4NjggMTEuMTYxNUMxMS45NzAxIDExLjE2MTUgMTIuNzcxOSAxMC40OTUyIDEzLjE1NDMgOS43OTgyM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGxuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjY5ODk5IDUuMjA3MDNDMi4wNTgyMyA1LjIwNzAzIDAuODA5MjA0IDYuNjg1NjkgMC44MDkyMDQgOC42MDk3MkMwLjgwOTIwNCAxMC42MzM3IDIuMTU4MjMgMTIuMDEyNCAzLjY5ODk5IDEyLjAxMjRDNC41MjEyNiAxMi4wMTI0IDUuMzc0MDIgMTEuNjY5MyA1Ljk1MzkgMTEuMDIyM1YxMS41M0M1Ljk1MzkgMTEuNzc4NSA2LjE1NTM3IDExLjk4IDYuNDAzOSAxMS45OEM2LjY1MjQzIDExLjk4IDYuODUzOSAxMS43Nzg1IDYuODUzOSAxMS41M1Y1LjcyMDAxQzYuODUzOSA1LjQ3MTQ5IDYuNjUyNDMgNS4yNzAwMSA2LjQwMzkgNS4yNzAwMUM2LjE1NTM3IDUuMjcwMDEgNS45NTM5IDUuNDcxNDkgNS45NTM5IDUuNzIwMDFWNi4yMjI2OUM1LjQwNTA2IDUuNjAwNzUgNC41OTIxOCA1LjIwNzAzIDMuNjk4OTkgNS4yMDcwM1pNNS45NTM5IDkuNzk5VjcuMzAxMTdDNS41NjMzOSA2LjU4MDY0IDQuNzQxMTggNi4wNTc1NyAzLjg4NjggNi4wNTc1N0MyLjkwODkgNi4wNTc1NyAxLjgzNTA4IDYuOTY1ODEgMS44MzUwOCA4LjYwOTU1QzEuODM1MDggMTAuMTUzMyAyLjgwODg5IDExLjE2MTUgMy44ODY4IDExLjE2MTVDNC43Njk4NCAxMS4xNjE1IDUuNTcxNDEgMTAuNDk1NyA1Ljk1MzkgOS43OTlaTTEwLjc5OSA1LjIwNzAzQzkuMTU4MjMgNS4yMDcwMyA3LjkwOTIgNi42ODU2OSA3LjkwOTIgOC42MDk3MkM3LjkwOTIgMTAuNjMzNyA5LjI1ODIzIDEyLjAxMjQgMTAuNzk5IDEyLjAxMjRDMTEuNjIxNSAxMi4wMTI0IDEyLjQ3NDQgMTEuNjY5MiAxMy4wNTQzIDExLjAyMThWMTEuNTNDMTMuMDU0MyAxMS43Nzg1IDEzLjI1NTggMTEuOTggMTMuNTA0MyAxMS45OEMxMy43NTI5IDExLjk4IDEzLjk1NDMgMTEuNzc4NSAxMy45NTQzIDExLjUzVjUuNzJDMTMuOTU0MyA1LjQ3MTQ3IDEzLjc1MjkgNS4yNyAxMy41MDQzIDUuMjdDMTMuMjU1OCA1LjI3IDEzLjA1NDMgNS40NzE0NyAxMy4wNTQzIDUuNzJWNi4yMjMxOEMxMi41MDU1IDUuNjAwOTUgMTEuNjkyNCA1LjIwNzAzIDEwLjc5OSA1LjIwNzAzWk0xMy4wNTQzIDkuNzk4MjJWNy4zMDE5NkMxMi42NjQgNi41ODEwMiAxMS44NDE1IDYuMDU3NTcgMTAuOTg2OCA2LjA1NzU3QzEwLjAwODkgNi4wNTc1NyA4LjkzNTA4IDYuOTY1ODEgOC45MzUwOCA4LjYwOTU1QzguOTM1MDggMTAuMTUzMyA5LjkwODg5IDExLjE2MTUgMTAuOTg2OCAxMS4xNjE1QzExLjg3MDIgMTEuMTYxNSAxMi42NzIgMTAuNDk1MiAxMy4wNTQzIDkuNzk4MjJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxzbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTEuMjg5NSAyLjc1QzExLjQ5NjQgMi43NDk3OSAxMS42ODIxIDIuODc3MDEgMTEuNzU2NSAzLjA3MDAzTDE0Ljk2NjQgMTEuMzlDMTUuMDY1NyAxMS42NDc3IDE0LjkzNzUgMTEuOTM3MSAxNC42Nzk4IDEyLjAzNjVDMTQuNDIyMiAxMi4xMzU5IDE0LjEzMjggMTIuMDA3NiAxNC4wMzM0IDExLjc1TDEyLjk4MjIgOS4wMjUzN0g5LjYxMTA2TDguNTY2NzIgMTEuNzQ5QzguNDY3ODYgMTIuMDA2OCA4LjE3ODcgMTIuMTM1NyA3LjkyMDg2IDEyLjAzNjlDNy42NjMwMiAxMS45MzggNy41MzQxNCAxMS42NDg4IDcuNjMzMDEgMTEuMzkxTDEwLjgyMzIgMy4wNzA5OUMxMC44OTcyIDIuODc3ODIgMTEuMDgyNiAyLjc1MDIxIDExLjI4OTUgMi43NVpNMTEuMjkxNSA0LjY0Mjg0TDEyLjY1NDMgOC4xNzUzN0g5LjkzNjk4TDExLjI5MTUgNC42NDI4NFpNMi44OTg5NSA1LjIwNzAzQzEuMjU4MTggNS4yMDcwMyAwLjAwOTE1NTI3IDYuNjg1NjkgMC4wMDkxNTUyNyA4LjYwOTcyQzAuMDA5MTU1MjcgMTAuNjMzNyAxLjM1ODE4IDEyLjAxMjQgMi44OTg5NSAxMi4wMTI0QzMuNzIxNDEgMTIuMDEyNCA0LjU3NDM4IDExLjY2OTIgNS4xNTQyNyAxMS4wMjE5VjExLjUzQzUuMTU0MjcgMTEuNzc4NSA1LjM1NTc0IDExLjk4IDUuNjA0MjcgMTEuOThDNS44NTI4IDExLjk4IDYuMDU0MjcgMTEuNzc4NSA2LjA1NDI3IDExLjUzVjUuNzJDNi4wNTQyNyA1LjQ3MTQ3IDUuODUyOCA1LjI3IDUuNjA0MjcgNS4yN0M1LjM1NTc0IDUuMjcgNS4xNTQyNyA1LjQ3MTQ3IDUuMTU0MjcgNS43MlY2LjIyMzE3QzQuNjA1NDMgNS42MDA5NSAzLjc5MjM2IDUuMjA3MDMgMi44OTg5NSA1LjIwNzAzWk01LjE1NDI3IDkuNzk4MjNWNy4zMDE5NUM0Ljc2MzkzIDYuNTgxMDEgMy45NDE0NCA2LjA1NzU3IDMuMDg2NzUgNi4wNTc1N0MyLjEwODg1IDYuMDU3NTcgMS4wMzUwMyA2Ljk2NTgxIDEuMDM1MDMgOC42MDk1NUMxLjAzNTAzIDEwLjE1MzMgMi4wMDg4NSAxMS4xNjE1IDMuMDg2NzUgMTEuMTYxNUMzLjk3MDExIDExLjE2MTUgNC43NzE5NSAxMC40OTUyIDUuMTU0MjcgOS43OTgyM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGNuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjYyNTUgMi43NUMzLjgzNDc4IDIuNzUgNC4wMjE5MiAyLjg4MDM0IDQuMDk0NDggMy4wNzY2NEw3LjE2OTg1IDExLjM5NjJDNy4yNjU2IDExLjY1NTIgNy4xMzMyNCAxMS45NDI4IDYuODc0MjMgMTIuMDM4NkM2LjYxNTIyIDEyLjEzNDMgNi4zMjc2MyAxMi4wMDIgNi4yMzE4OCAxMS43NDI5TDUuMjIzODcgOS4wMTYwM0gyLjAyNzEyTDEuMDE5MTEgMTEuNzQyOUMwLjkyMzM2MiAxMi4wMDIgMC42MzU3NzQgMTIuMTM0MyAwLjM3Njc2MiAxMi4wMzg2QzAuMTE3NzQ5IDExLjk0MjggLTAuMDE0NjA1MiAxMS42NTUyIDAuMDgxMTQwMSAxMS4zOTYyTDMuMTU2NTEgMy4wNzY2NEMzLjIyOTA4IDIuODgwMzQgMy40MTYyMSAyLjc1IDMuNjI1NSAyLjc1Wk0zLjYyNTUgNC42OTIwN0w0LjkwOTY2IDguMTY2MDNIMi4zNDEzM0wzLjYyNTUgNC42OTIwN1pNMTEuMzcxOSAyLjc1QzExLjU4MTEgMi43NSAxMS43NjgzIDIuODgwMzQgMTEuODQwOCAzLjA3NjY0TDE0LjkxNjIgMTEuMzk2MkMxNS4wMTIgMTEuNjU1MiAxNC44Nzk2IDExLjk0MjggMTQuNjIwNiAxMi4wMzg2QzE0LjM2MTYgMTIuMTM0MyAxNC4wNzQgMTIuMDAyIDEzLjk3ODIgMTEuNzQyOUwxMi45NzAyIDkuMDE2MDNIOS43NzM0OEw4Ljc2NTQ3IDExLjc0MjlDOC42Njk3MiAxMi4wMDIgOC4zODIxMyAxMi4xMzQzIDguMTIzMTIgMTIuMDM4NkM3Ljg2NDExIDExLjk0MjggNy43MzE3NSAxMS42NTUyIDcuODI3NSAxMS4zOTYyTDEwLjkwMjkgMy4wNzY2NEMxMC45NzU0IDIuODgwMzQgMTEuMTYyNiAyLjc1IDExLjM3MTkgMi43NVpNMTEuMzcxOSA0LjY5MjA3TDEyLjY1NiA4LjE2NjAzSDEwLjA4NzdMMTEuMzcxOSA0LjY5MjA3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuNTUyOTMgMC45OTk5NjlDNC43NTI5NSAwLjk5OTk2OSA0LjkzMzcyIDEuMTE5MTcgNS4wMTI1IDEuMzAzMDFMOC4wMTEwNiA4LjI5OTgyQzguMTE5ODQgOC41NTM2MyA4LjAwMjI2IDguODQ3NTcgNy43NDg0NCA4Ljk1NjM1QzcuNDk0NjMgOS4wNjUxMiA3LjIwMDY5IDguOTQ3NTQgNy4wOTE5MSA4LjY5MzczTDYuMTE2MTMgNi40MTY4NUgyLjk4OTczTDIuMDEzOTUgOC42OTM3M0MxLjkwNTE3IDguOTQ3NTQgMS42MTEyMyA5LjA2NTEyIDEuMzU3NDIgOC45NTYzNUMxLjEwMzYgOC44NDc1NyAwLjk4NjAyMyA4LjU1MzYzIDEuMDk0OCA4LjI5OTgyTDQuMDkzMzYgMS4zMDMwMUM0LjE3MjE0IDEuMTE5MTcgNC4zNTI5MSAwLjk5OTk2OSA0LjU1MjkzIDAuOTk5OTY5Wk00LjU1MjkzIDIuNzY5MjlMNS43NTE4NiA1LjU2Njg1SDMuMzU0TDQuNTUyOTMgMi43NjkyOVpNMTEuMDU2MiA5LjAwMjE0QzExLjI2MTcgOS4wMDIxNCAxMS40NDYzIDguODc2MzMgMTEuNTIxNSA4LjY4NTAyTDE0LjI3MzMgMS42ODI5OUMxNC4zNzQzIDEuNDI1OTggMTQuMjQ3OCAxLjEzNTc1IDEzLjk5MDggMS4wMzQ3NUMxMy43MzM4IDAuOTMzNzQ3IDEzLjQ0MzYgMS4wNjAyMSAxMy4zNDI2IDEuMzE3MjJMMTEuMDU2MiA3LjEzNTE0TDguNzY5NzMgMS4zMTcyMkM4LjY2ODczIDEuMDYwMjEgOC4zNzg1IDAuOTMzNzQ3IDguMTIxNSAxLjAzNDc1QzcuODY0NDkgMS4xMzU3NSA3LjczODAyIDEuNDI1OTggNy44MzkwMiAxLjY4Mjk5TDEwLjU5MDggOC42ODUwMkMxMC42NjYgOC44NzYzMyAxMC44NTA2IDkuMDAyMTQgMTEuMDU2MiA5LjAwMjE0Wk0xNC45NTM3IDEyLjQ5OTlDMTQuOTUzNyAxMi42MDYgMTQuOTExNSAxMi43MDc3IDE0LjgzNjUgMTIuNzgyOEwxMi44MzY1IDE0Ljc4MjhDMTIuNjgwMyAxNC45MzkgMTIuNDI3MSAxNC45MzkgMTIuMjcwOCAxNC43ODI4QzEyLjExNDYgMTQuNjI2NSAxMi4xMTQ2IDE0LjM3MzMgMTIuMjcwOCAxNC4yMTcxTDEzLjU4OCAxMi44OTk5SDEuNTE5MzdMMi44MzY1MyAxNC4yMTcxQzIuOTkyNzQgMTQuMzczMyAyLjk5Mjc0IDE0LjYyNjUgMi44MzY1MyAxNC43ODI4QzIuNjgwMzIgMTQuOTM5IDIuNDI3MDUgMTQuOTM5IDIuMjcwODQgMTQuNzgyOEwwLjI3MDg0MyAxMi43ODI4QzAuMTk1ODI4IDEyLjcwNzcgMC4xNTM2ODcgMTIuNjA2IDAuMTUzNjg3IDEyLjQ5OTlDMC4xNTM2ODcgMTIuMzkzOCAwLjE5NTgyOCAxMi4yOTIxIDAuMjcwODQzIDEyLjIxNzFMMi4yNzA4NCAxMC4yMTcxQzIuNDI3MDUgMTAuMDYwOSAyLjY4MDMyIDEwLjA2MDkgMi44MzY1MyAxMC4yMTcxQzIuOTkyNzQgMTAuMzczMyAyLjk5Mjc0IDEwLjYyNjUgMi44MzY1MyAxMC43ODI4TDEuNTE5MzcgMTIuMDk5OUwxMy41ODggMTIuMDk5OUwxMi4yNzA4IDEwLjc4MjhDMTIuMTE0NiAxMC42MjY1IDEyLjExNDYgMTAuMzczMyAxMi4yNzA4IDEwLjIxNzFDMTIuNDI3MSAxMC4wNjA5IDEyLjY4MDMgMTAuMDYwOSAxMi44MzY1IDEwLjIxNzFMMTQuODM2NSAxMi4yMTcxQzE0LjkxMTUgMTIuMjkyMSAxNC45NTM3IDEyLjM5MzggMTQuOTUzNyAxMi40OTk5WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTguNjk2NjYgMC4wNDAzNTRDOC45MDg1OSAwLjEzMTAzOCA5LjAzMTA1IDAuMzU0ODU2IDguOTkzMTUgMC41ODIyMzVMOC4wOTAxOSA2LjAwMDAxSDEyLjQ5OTlDMTIuNjg5MyA2LjAwMDAxIDEyLjg2MjUgNi4xMDcwMSAxMi45NDcyIDYuMjc2NEMxMy4wMzE4IDYuNDQ1NzkgMTMuMDEzNiA2LjY0ODUgMTIuODk5OSA2LjhMNi44OTk5NyAxNC44QzYuNzYxNjYgMTQuOTg0NCA2LjUxNTIgMTUuMDUwMyA2LjMwMzI3IDE0Ljk1OTZDNi4wOTEzNCAxNC44NjkgNS45Njg4OCAxNC42NDUxIDYuMDA2NzggMTQuNDE3OEw2LjkwOTc0IDguOTk5OTlIMi40OTk5OUMyLjMxMDYxIDguOTk5OTkgMi4xMzc0NyA4Ljg5Mjk5IDIuMDUyNzggOC43MjM2QzEuOTY4MDggOC41NTQyMSAxLjk4NjM2IDguMzUxNSAyLjA5OTk5IDguMkw4LjA5OTk2IDAuMjAwMDM3QzguMjM4MjcgMC4wMTU2MjU1IDguNDg0NzMgLTAuMDUwMzMwMSA4LjY5NjY2IDAuMDQwMzU0Wk0zLjQ5OTk5IDhINy40OTk5NkM3LjY0Njk0IDggNy43ODY0NyA4LjA2NDY2IDcuODgxNDcgOC4xNzY4MUM3Ljk3NjQ3IDguMjg4OTUgOC4wMTczMiA4LjQzNzIyIDcuOTkzMTYgOC41ODIxOUw3LjMzMDI2IDEyLjU1OTZMMTEuNDk5OSA3SDcuNDk5OTZDNy4zNTI5OSA3IDcuMjEzNDYgNi45MzUzNCA3LjExODQ2IDYuODIzMTlDNy4wMjM0NiA2LjcxMTA1IDYuOTgyNjEgNi41NjI3OCA3LjAwNjc3IDYuNDE3ODFMNy42Njk2NyAyLjQ0MDQyTDMuNDk5OTkgOFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGRuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjc4MjMzIDIuMjE3MTNDMy43MDczMiAyLjE0MjEyIDMuNjA1NTcgMi4wOTk5OCAzLjQ5OTQ5IDIuMDk5OThDMy4zOTM0IDIuMDk5OTggMy4yOTE2NiAyLjE0MjEyIDMuMjE2NjQgMi4yMTcxM0wxLjIxNjY0IDQuMjE3MTNDMS4wNjA0NCA0LjM3MzM0IDEuMDYwNDQgNC42MjY2MSAxLjIxNjY0IDQuNzgyODJDMS4zNzI4NSA0LjkzOTAzIDEuNjI2MTIgNC45MzkwMyAxLjc4MjMzIDQuNzgyODJMMy4wOTk0OSAzLjQ2NTY2TDMuMDk5NDkgMTEuNTM0M0wxLjc4MjMzIDEwLjIxNzFDMS42MjYxMiAxMC4wNjA5IDEuMzcyODUgMTAuMDYwOSAxLjIxNjY0IDEwLjIxNzFDMS4wNjA0MyAxMC4zNzMzIDEuMDYwNDMgMTAuNjI2NiAxLjIxNjY0IDEwLjc4MjhMMy4yMTY2NCAxMi43ODI4QzMuMjkxNjYgMTIuODU3OCAzLjM5MzQgMTIuOSAzLjQ5OTQ5IDEyLjlDMy42MDU1NyAxMi45IDMuNzA3MzEgMTIuODU3OCAzLjc4MjMzIDEyLjc4MjhMNS43ODIzMyAxMC43ODI4QzUuOTM4NTQgMTAuNjI2NiA1LjkzODU0IDEwLjM3MzMgNS43ODIzMyAxMC4yMTcxQzUuNjI2MTIgMTAuMDYwOSA1LjM3Mjg1IDEwLjA2MDkgNS4yMTY2NCAxMC4yMTcxTDMuODk5NDkgMTEuNTM0M0wzLjg5OTQ5IDMuNDY1NjZMNS4yMTY2NCA0Ljc4MjgyQzUuMzcyODUgNC45MzkwMyA1LjYyNjEyIDQuOTM5MDMgNS43ODIzMyA0Ljc4MjgyQzUuOTM4NTQgNC42MjY2MSA1LjkzODU0IDQuMzczMzQgNS43ODIzMyA0LjIxNzEzTDMuNzgyMzMgMi4yMTcxM1pNOC40OTk5OCAzLjk5OTk3QzguMjIzODMgMy45OTk5NyA3Ljk5OTk4IDQuMjIzODIgNy45OTk5OCA0LjQ5OTk3QzcuOTk5OTggNC43NzYxMSA4LjIyMzgzIDQuOTk5OTcgOC40OTk5OCA0Ljk5OTk3SDE0LjVDMTQuNzc2MSA0Ljk5OTk3IDE1IDQuNzc2MTEgMTUgNC40OTk5N0MxNSA0LjIyMzgyIDE0Ljc3NjEgMy45OTk5NyAxNC41IDMuOTk5OTdIOC40OTk5OFpNNy45OTk5OCA3LjQ5OTk3QzcuOTk5OTggNy4yMjM4MiA4LjIyMzgzIDYuOTk5OTcgOC40OTk5OCA2Ljk5OTk3SDE0LjVDMTQuNzc2MSA2Ljk5OTk3IDE1IDcuMjIzODIgMTUgNy40OTk5N0MxNSA3Ljc3NjExIDE0Ljc3NjEgNy45OTk5NyAxNC41IDcuOTk5OTdIOC40OTk5OEM4LjIyMzgzIDcuOTk5OTcgNy45OTk5OCA3Ljc3NjExIDcuOTk5OTggNy40OTk5N1pNOC40OTk5OCA5Ljk5OTk3QzguMjIzODMgOS45OTk5NyA3Ljk5OTk4IDEwLjIyMzggNy45OTk5OCAxMC41QzcuOTk5OTggMTAuNzc2MSA4LjIyMzgzIDExIDguNDk5OTggMTFIMTQuNUMxNC43NzYxIDExIDE1IDEwLjc3NjEgMTUgMTAuNUMxNSAxMC4yMjM4IDE0Ljc3NjEgOS45OTk5NyAxNC41IDkuOTk5OTdIOC40OTk5OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHBuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjYyNDcxIDQuMDAwMDFMNC41NjQwMiA0LjAwMDAxQzQuMDQxMzQgMy45OTk5MyAzLjcwNjg3IDMuOTk5ODggMy40MTgyIDQuMDU1QzIuMjM3OSA0LjI4MDM5IDEuMjk4NDYgNS4xNzA1MyAxLjA1ODE1IDYuMzMwMzVDMC45OTk1MzggNi42MTMyMSAwLjk5OTYwNCA2LjkzOTk4IDAuOTk5NzAzIDcuNDM2ODlMMC45OTk3MTEgNy41MDAwMUwwLjk5OTcwMyA3LjU2MzEzQzAuOTk5NjA0IDguMDYwMDQgMC45OTk1MzggOC4zODY4MSAxLjA1ODE1IDguNjY5NjdDMS4yOTg0NiA5LjgyOTUgMi4yMzc5IDEwLjcxOTYgMy40MTgyIDEwLjk0NUMzLjcwNjg4IDExLjAwMDEgNC4wNDEzNSAxMS4wMDAxIDQuNTY0MDMgMTFMNC42MjQ3MSAxMUg1LjQ5OTcxQzUuNzc1ODUgMTEgNS45OTk3MSAxMC43NzYyIDUuOTk5NzEgMTAuNUM1Ljk5OTcxIDEwLjIyMzkgNS43NzU4NSAxMCA1LjQ5OTcxIDEwSDQuNjI0NzFDNC4wMjA4NCAxMCAzLjc4OTA3IDkuOTk3NzcgMy42MDU3NyA5Ljk2Mjc3QzIuODAyNjIgOS44MDk0IDIuMTkxNTcgOS4yMTEwOCAyLjAzNzM1IDguNDY2NzhDMi4wMDIzMyA4LjI5Nzc4IDEuOTk5NzEgOC4wODI1MSAxLjk5OTcxIDcuNTAwMDFDMS45OTk3MSA2LjkxNzUyIDIuMDAyMzMgNi43MDIyNSAyLjAzNzM1IDYuNTMzMjRDMi4xOTE1NyA1Ljc4ODk1IDIuODAyNjIgNS4xOTA2MiAzLjYwNTc3IDUuMDM3MjVDMy43ODkwNyA1LjAwMjI1IDQuMDIwODQgNS4wMDAwMSA0LjYyNDcxIDUuMDAwMDFINS40OTk3MUM1Ljc3NTg1IDUuMDAwMDEgNS45OTk3MSA0Ljc3NjE1IDUuOTk5NzEgNC41MDAwMUM1Ljk5OTcxIDQuMjIzODcgNS43NzU4NSA0LjAwMDAxIDUuNDk5NzEgNC4wMDAwMUg0LjYyNDcxWk0xMC4zNzQ3IDUuMDAwMDFDMTAuOTc4NiA1LjAwMDAxIDExLjIxMDQgNS4wMDIyNSAxMS4zOTM3IDUuMDM3MjVDMTIuMTk2OCA1LjE5MDYyIDEyLjgwNzkgNS43ODg5NSAxMi45NjIxIDYuNTMzMjRDMTIuOTk3MSA2LjcwMjI1IDEyLjk5OTcgNi45MTc1MiAxMi45OTk3IDcuNTAwMDFDMTIuOTk5NyA4LjA4MjUxIDEyLjk5NzEgOC4yOTc3OCAxMi45NjIxIDguNDY2NzhDMTIuODA3OSA5LjIxMTA4IDEyLjE5NjggOS44MDk0IDExLjM5MzcgOS45NjI3N0MxMS4yMTA0IDkuOTk3NzcgMTAuOTc4NiAxMCAxMC4zNzQ3IDEwSDkuNDk5NzFDOS4yMjM1NyAxMCA4Ljk5OTcxIDEwLjIyMzkgOC45OTk3MSAxMC41QzguOTk5NzEgMTAuNzc2MiA5LjIyMzU3IDExIDkuNDk5NzEgMTFIMTAuMzc0N0wxMC40MzU0IDExQzEwLjk1ODEgMTEuMDAwMSAxMS4yOTI1IDExLjAwMDEgMTEuNTgxMiAxMC45NDVDMTIuNzYxNSAxMC43MTk2IDEzLjcwMSA5LjgyOTUgMTMuOTQxMyA4LjY2OTY3QzEzLjk5OTkgOC4zODY4MSAxMy45OTk4IDguMDYwMDUgMTMuOTk5NyA3LjU2MzE0TDEzLjk5OTcgNy41MDAwMUwxMy45OTk3IDcuNDM2ODhDMTMuOTk5OCA2LjkzOTk4IDEzLjk5OTkgNi42MTMyMSAxMy45NDEzIDYuMzMwMzVDMTMuNzAxIDUuMTcwNTMgMTIuNzYxNSA0LjI4MDM5IDExLjU4MTIgNC4wNTVDMTEuMjkyNSAzLjk5OTg4IDEwLjk1ODEgMy45OTk5MyAxMC40MzU0IDQuMDAwMDFMMTAuMzc0NyA0LjAwMDAxSDkuNDk5NzFDOS4yMjM1NyA0LjAwMDAxIDguOTk5NzEgNC4yMjM4NyA4Ljk5OTcxIDQuNTAwMDFDOC45OTk3MSA0Ljc3NjE1IDkuMjIzNTcgNS4wMDAwMSA5LjQ5OTcxIDUuMDAwMDFIMTAuMzc0N1pNNS4wMDAzOCA3QzQuNzI0MjQgNyA0LjUwMDM4IDcuMjIzODYgNC41MDAzOCA3LjVDNC41MDAzOCA3Ljc3NjE0IDQuNzI0MjQgOCA1LjAwMDM4IDhIMTAuMDAwNEMxMC4yNzY1IDggMTAuNTAwNCA3Ljc3NjE0IDEwLjUwMDQgNy41QzEwLjUwMDQgNy4yMjM4NiAxMC4yNzY1IDcgMTAuMDAwNCA3SDUuMDAwMzhaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxobj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOC41MTE5NCAzLjAwNTQxQzkuMTg4MjkgMi41NDU5NCAxMC4wNDM1IDIuNTM2OTQgMTAuNjc4OCAyLjk1NDE5QzEwLjgyMzEgMy4wNDg5MyAxMC45NzcxIDMuMTk5MyAxMS4zODkgMy42MTExOUMxMS44MDA5IDQuMDIzMDcgMTEuOTUxMyA0LjE3NzE0IDEyLjA0NiA0LjMyMTQxQzEyLjQ2MzMgNC45NTY3NSAxMi40NTQzIDUuODExOTIgMTEuOTk0OCA2LjQ4ODI3QzExLjg4OTkgNi42NDI2NCAxMS43Mjc2IDYuODA4MTEgMTEuMzAwNiA3LjIzNTExTDEwLjY4MTkgNy44NTM4M0MxMC40ODY3IDguMDQ5MDkgMTAuNDg2NyA4LjM2NTY3IDEwLjY4MTkgOC41NjA5M0MxMC44NzcyIDguNzU2MiAxMS4xOTM4IDguNzU2MiAxMS4zODkgOC41NjA5M0wxMi4wMDc3IDcuOTQyMjFMMTIuMDUwNyA3Ljg5OTI5QzEyLjQyMDMgNy41Mjk3NiAxMi42NTY4IDcuMjkzMyAxMi44MjIgNy4wNTAyQzEzLjQ5NzIgNi4wNTYyMyAxMy41MzIxIDQuNzYyNTIgMTIuODgxOSAzLjc3MjQ4QzEyLjcyMzMgMy41MzEwMiAxMi40OTIyIDMuMzAwMDEgMTIuMTQwOCAyLjk0ODcxTDEyLjA5NjEgMi45MDQwOEwxMi4wNTE1IDIuODU5NDJDMTEuNzAwMiAyLjUwOCAxMS40NjkyIDIuMjc2ODkgMTEuMjI3NyAyLjExODMyQzEwLjIzNzcgMS40NjgxMyA4Ljk0Mzk4IDEuNTAyOTkgNy45NTAwMSAyLjE3ODIyQzcuNzA2OTEgMi4zNDMzNiA3LjQ3MDQ0IDIuNTc5OTEgNy4xMDA5IDIuOTQ5NTVMNy4wNTggMi45OTI0N0w2LjQzOTI4IDMuNjExMTlDNi4yNDQwMSAzLjgwNjQ1IDYuMjQ0MDEgNC4xMjMwMyA2LjQzOTI4IDQuMzE4MjlDNi42MzQ1NCA0LjUxMzU1IDYuOTUxMTIgNC41MTM1NSA3LjE0NjM4IDQuMzE4MjlMNy43NjUxIDMuNjk5NTdDOC4xOTIxIDMuMjcyNTcgOC4zNTc1NyAzLjExMDI3IDguNTExOTQgMy4wMDU0MVpNNC4zMTc5NiA3LjE0NjcyQzQuNTEzMjIgNi45NTE0NiA0LjUxMzIyIDYuNjM0ODcgNC4zMTc5NiA2LjQzOTYxQzQuMTIyNjkgNi4yNDQzNSAzLjgwNjExIDYuMjQ0MzUgMy42MTA4NSA2LjQzOTYxTDIuOTkyMTMgNy4wNTgzM0wyLjk0OTIyIDcuMTAxMjRDMi41Nzk1NyA3LjQ3MDc3IDIuMzQzMDMgNy43MDcyNCAyLjE3Nzg4IDcuOTUwMzVDMS41MDI2NSA4Ljk0NDMyIDEuNDY3OCAxMC4yMzggMi4xMTc5OSAxMS4yMjgxQzIuMjc2NTYgMTEuNDY5NSAyLjUwNzY2IDExLjcwMDUgMi44NTkxIDEyLjA1MThMMi45MDM3NCAxMi4wOTY1TDIuOTQ4MzcgMTIuMTQxMUMzLjI5OTY3IDEyLjQ5MjUgMy41MzA2OCAxMi43MjM3IDMuNzcyMTQgMTIuODgyMkM0Ljc2MjE5IDEzLjUzMjQgNi4wNTU4OSAxMy40OTc2IDcuMDQ5ODYgMTIuODIyM0M3LjI5Mjk2IDEyLjY1NzIgNy41Mjk0MyAxMi40MjA2IDcuODk4OTYgMTIuMDUxTDcuODk4OTcgMTIuMDUxTDcuOTQxODggMTIuMDA4MUw4LjU2MDYgMTEuMzg5NEM4Ljc1NTg2IDExLjE5NDEgOC43NTU4NiAxMC44Nzc1IDguNTYwNiAxMC42ODIzQzguMzY1MzMgMTAuNDg3IDguMDQ4NzUgMTAuNDg3IDcuODUzNDkgMTAuNjgyM0w3LjIzNDc3IDExLjMwMUM2LjgwNzc3IDExLjcyOCA2LjY0MjMgMTEuODkwMyA2LjQ4Nzk0IDExLjk5NTFDNS44MTE1OCAxMi40NTQ2IDQuOTU2NDIgMTIuNDYzNiA0LjMyMTA3IDEyLjA0NjRDNC4xNzY4MSAxMS45NTE2IDQuMDIyNzQgMTEuODAxMiAzLjYxMDg1IDExLjM4OTRDMy4xOTg5NiAxMC45Nzc1IDMuMDQ4NiAxMC44MjM0IDIuOTUzODUgMTAuNjc5MUMyLjUzNjYxIDEwLjA0MzggMi41NDU2MSA5LjE4ODYzIDMuMDA1MDcgOC41MTIyN0MzLjEwOTkzIDguMzU3OTEgMy4yNzIyNCA4LjE5MjQ0IDMuNjk5MjQgNy43NjU0NEw0LjMxNzk2IDcuMTQ2NzJaTTkuNjIxNzIgNi4wODU1OEM5LjgxNjk4IDUuODkwMzIgOS44MTY5OCA1LjU3MzczIDkuNjIxNzIgNS4zNzg0N0M5LjQyNjQ2IDUuMTgzMjEgOS4xMDk4OCA1LjE4MzIxIDguOTE0NjEgNS4zNzg0N0w1LjM3OTA4IDguOTE0MDFDNS4xODM4MiA5LjEwOTI3IDUuMTgzODIgOS40MjU4NSA1LjM3OTA4IDkuNjIxMTFDNS41NzQzNCA5LjgxNjM3IDUuODkwOTIgOS44MTYzNyA2LjA4NjE5IDkuNjIxMTFMOS42MjE3MiA2LjA4NTU4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZ249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEzLjM1MzYgMi4zNTM1NUMxMy41NDg4IDIuMTU4MjkgMTMuNTQ4OCAxLjg0MTcxIDEzLjM1MzYgMS42NDY0NUMxMy4xNTgzIDEuNDUxMTggMTIuODQxNyAxLjQ1MTE4IDEyLjY0NjQgMS42NDY0NUwxLjY0NjQ1IDEyLjY0NjRDMS40NTExOCAxMi44NDE3IDEuNDUxMTggMTMuMTU4MyAxLjY0NjQ1IDEzLjM1MzZDMS44NDE3MSAxMy41NDg4IDIuMTU4MjkgMTMuNTQ4OCAyLjM1MzU1IDEzLjM1MzZMMTMuMzUzNiAyLjM1MzU1Wk0yLjAzNzM1IDguNDY2NzhDMi4xNzM5OCA5LjEyNjE5IDIuNjY5MTggOS42NzEwMyAzLjMzODg2IDkuODkzMzhMMi41NzgzMyAxMC42NTM5QzEuODA4NDMgMTAuMjUzNCAxLjIzNzg0IDkuNTM2OTMgMS4wNTgxNSA4LjY2OTY3QzAuOTk5NTM4IDguMzg2ODEgMC45OTk2MDQgOC4wNjAwNCAwLjk5OTcwMyA3LjU2MzEzTDAuOTk5NzExIDcuNTAwMDFMMC45OTk3MDMgNy40MzY4OUMwLjk5OTYwNCA2LjkzOTk4IDAuOTk5NTM4IDYuNjEzMjEgMS4wNTgxNSA2LjMzMDM1QzEuMjk4NDYgNS4xNzA1MyAyLjIzNzkgNC4yODAzOSAzLjQxODIgNC4wNTVDMy43MDY4NyAzLjk5OTg4IDQuMDQxMzQgMy45OTk5MyA0LjU2NDAyIDQuMDAwMDFMNC42MjQ3MSA0LjAwMDAxSDUuNDk5NzFDNS43NzU4NSA0LjAwMDAxIDUuOTk5NzEgNC4yMjM4NyA1Ljk5OTcxIDQuNTAwMDFDNS45OTk3MSA0Ljc3NjE1IDUuNzc1ODUgNS4wMDAwMSA1LjQ5OTcxIDUuMDAwMDFINC42MjQ3MUM0LjAyMDg0IDUuMDAwMDEgMy43ODkwNyA1LjAwMjI1IDMuNjA1NzcgNS4wMzcyNUMyLjgwMjYyIDUuMTkwNjIgMi4xOTE1NyA1Ljc4ODk1IDIuMDM3MzUgNi41MzMyNEMyLjAwMjMzIDYuNzAyMjUgMS45OTk3MSA2LjkxNzUyIDEuOTk5NzEgNy41MDAwMUMxLjk5OTcxIDguMDgyNTEgMi4wMDIzMyA4LjI5Nzc4IDIuMDM3MzUgOC40NjY3OFpNMTIuOTYyMSA2LjUzMzI0QzEyLjgyNTUgNS44NzM5NyAxMi4zMzA0IDUuMzI5MjIgMTEuNjYxIDUuMTA2NzlMMTIuNDIxNSA0LjM0NjMxQzEzLjE5MTIgNC43NDY4NiAxMy43NjE2IDUuNDYzMjMgMTMuOTQxMyA2LjMzMDM1QzEzLjk5OTkgNi42MTMyMSAxMy45OTk4IDYuOTM5OTggMTMuOTk5NyA3LjQzNjg4TDEzLjk5OTcgNy41MDAwMUwxMy45OTk3IDcuNTYzMTRDMTMuOTk5OCA4LjA2MDA1IDEzLjk5OTkgOC4zODY4MSAxMy45NDEzIDguNjY5NjdDMTMuNzAxIDkuODI5NSAxMi43NjE1IDEwLjcxOTYgMTEuNTgxMiAxMC45NDVDMTEuMjkyNSAxMS4wMDAxIDEwLjk1ODEgMTEuMDAwMSAxMC40MzU0IDExTDEwLjM3NDcgMTFIOS40OTk3MUM5LjIyMzU3IDExIDguOTk5NzEgMTAuNzc2MiA4Ljk5OTcxIDEwLjVDOC45OTk3MSAxMC4yMjM5IDkuMjIzNTcgMTAgOS40OTk3MSAxMEgxMC4zNzQ3QzEwLjk3ODYgMTAgMTEuMjEwNCA5Ljk5Nzc3IDExLjM5MzcgOS45NjI3N0MxMi4xOTY4IDkuODA5NCAxMi44MDc5IDkuMjExMDggMTIuOTYyMSA4LjQ2Njc4QzEyLjk5NzEgOC4yOTc3OCAxMi45OTk3IDguMDgyNTEgMTIuOTk5NyA3LjUwMDAxQzEyLjk5OTcgNi45MTc1MiAxMi45OTcxIDYuNzAyMjUgMTIuOTYyMSA2LjUzMzI0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQuNTAwMjEgMEM0Ljc3NjM1IDAgNS4wMDAyIDAuMjIzODUzIDUuMDAwMiAwLjQ5OTk5VjIuNDk5OTVDNS4wMDAyIDIuNzc2MDkgNC43NzYzNSAyLjk5OTk0IDQuNTAwMjEgMi45OTk5NEM0LjIyNDA4IDIuOTk5OTQgNC4wMDAyMiAyLjc3NjA5IDQuMDAwMjIgMi40OTk5NVYwLjQ5OTk5QzQuMDAwMjIgMC4yMjM4NTMgNC4yMjQwOCAwIDQuNTAwMjEgMFpNMC42NDY0NTEgMC42NDY0N0MwLjg0MTcxIDAuNDUxMjEyIDEuMTU4MjkgMC40NTEyMTIgMS4zNTM1NCAwLjY0NjQ3TDIuODUzNTEgMi4xNDY0NEMzLjA0ODc3IDIuMzQxNyAzLjA0ODc3IDIuNjU4MjcgMi44NTM1MSAyLjg1MzUzQzIuNjU4MjYgMy4wNDg3OSAyLjM0MTY4IDMuMDQ4NzkgMi4xNDY0MiAyLjg1MzUzTDAuNjQ2NDUyIDEuMzUzNTZDMC40NTExOTMgMS4xNTgzIDAuNDUxMTkzIDAuODQxNzI4IDAuNjQ2NDUxIDAuNjQ2NDdaTTAuMDAwMzA1MTcgNC40OTk5MUMwLjAwMDMwNTE3IDQuMjIzNzcgMC4yMjQxNTggMy45OTk5MiAwLjUwMDI5NSAzLjk5OTkySDIuNTAwMjVDMi43NzYzOSAzLjk5OTkyIDMuMDAwMjQgNC4yMjM3NyAzLjAwMDI0IDQuNDk5OTFDMy4wMDAyNCA0Ljc3NjA1IDIuNzc2MzkgNC45OTk5IDIuNTAwMjUgNC45OTk5SDAuNTAwMjk1QzAuMjI0MTU4IDQuOTk5OSAwLjAwMDMwNTE3IDQuNzc2MDUgMC4wMDAzMDUxNyA0LjQ5OTkxWk0xMi4wMDAxIDEwLjQ5OThDMTIuMDAwMSAxMC4yMjM2IDEyLjIyMzkgOS45OTk4IDEyLjUwMDEgOS45OTk4SDE0LjVDMTQuNzc2MSA5Ljk5OTggMTUgMTAuMjIzNiAxNSAxMC40OTk4QzE1IDEwLjc3NTkgMTQuNzc2MSAxMC45OTk4IDE0LjUgMTAuOTk5OEgxMi41MDAxQzEyLjIyMzkgMTAuOTk5OCAxMi4wMDAxIDEwLjc3NTkgMTIuMDAwMSAxMC40OTk4Wk0xMC41MDAxIDExLjk5OThDMTAuNzc2MiAxMS45OTk4IDExLjAwMDEgMTIuMjIzNiAxMS4wMDAxIDEyLjQ5OTdWMTQuNDk5N0MxMS4wMDAxIDE0Ljc3NTggMTAuNzc2MiAxNC45OTk3IDEwLjUwMDEgMTQuOTk5N0MxMC4yMjQgMTQuOTk5NyAxMC4wMDAxIDE0Ljc3NTggMTAuMDAwMSAxNC40OTk3VjEyLjQ5OTdDMTAuMDAwMSAxMi4yMjM2IDEwLjIyNCAxMS45OTk4IDEwLjUwMDEgMTEuOTk5OFpNMTIuMTQ2MiAxMi4xNDYyQzEyLjM0MTUgMTEuOTUxIDEyLjY1OCAxMS45NTEgMTIuODUzMyAxMi4xNDYyTDE0LjM1MzMgMTMuNjQ2MkMxNC41NDg1IDEzLjg0MTUgMTQuNTQ4NSAxNC4xNTggMTQuMzUzMyAxNC4zNTMzQzE0LjE1OCAxNC41NDg1IDEzLjg0MTQgMTQuNTQ4NSAxMy42NDYyIDE0LjM1MzNMMTIuMTQ2MiAxMi44NTMzQzExLjk1MSAxMi42NTgxIDExLjk1MSAxMi4zNDE1IDEyLjE0NjIgMTIuMTQ2MlpNNy43NjQ3OCAzLjY5OTM4QzguMTkxNzcgMy4yNzIzOCA4LjM1NzI0IDMuMTEwMDggOC41MTE2IDMuMDA1MjJDOS4xODc5NCAyLjU0NTc3IDEwLjA0MzEgMi41MzY3NyAxMC42Nzg0IDIuOTU0MDFDMTAuODIyNyAzLjA0ODc1IDEwLjk3NjcgMy4xOTkxMSAxMS4zODg2IDMuNjEwOTlDMTEuODAwNSA0LjAyMjg3IDExLjk1MDkgNC4xNzY5NCAxMi4wNDU2IDQuMzIxMkMxMi40NjI4IDQuOTU2NTMgMTIuNDUzOSA1LjgxMTY4IDExLjk5NDQgNi40ODgwMkMxMS44ODk1IDYuNjQyMzggMTEuNzI3MiA2LjgwNzg1IDExLjMwMDIgNy4yMzQ4NEwxMC42ODE1IDcuODUzNTRDMTAuNDg2MyA4LjA0ODggMTAuNDg2MyA4LjM2NTM4IDEwLjY4MTUgOC41NjA2NEMxMC44NzY4IDguNzU1ODkgMTEuMTkzNCA4Ljc1NTg5IDExLjM4ODYgOC41NjA2NEwxMi4wMDczIDcuOTQxOTNMMTIuMDUwMiA3Ljg5OTAzQzEyLjQxOTkgNy41Mjk1IDEyLjY1NjQgNy4yOTMwMyAxMi44MjE2IDcuMDQ5OTNDMTMuNDk2OCA2LjA1NTk4IDEzLjUzMTYgNC43NjIzIDEyLjg4MTUgMy43NzIyOEMxMi43MjI5IDMuNTMwODMgMTIuNDkxOCAzLjI5OTgyIDEyLjE0MDQgMi45NDg1M0wxMi4wOTU3IDIuOTAzOUwxMi4wNTExIDIuODU5MjVDMTEuNjk5OCAyLjUwNzgyIDExLjQ2ODggMi4yNzY3MiAxMS4yMjczIDIuMTE4MTZDMTAuMjM3MyAxLjQ2Nzk4IDguOTQzNjQgMS41MDI4NCA3Ljk0OTY4IDIuMTc4MDVDNy43MDY1OSAyLjM0MzE5IDcuNDcwMTIgMi41Nzk3MyA3LjEwMDYgMi45NDkzNkw3LjEwMDYgMi45NDkzN0w3LjA1NzY5IDIuOTkyMjhMNi40Mzg5OCAzLjYxMDk5QzYuMjQzNzIgMy44MDYyNSA2LjI0MzcyIDQuMTIyODIgNi40Mzg5OCA0LjMxODA4QzYuNjM0MjQgNC41MTMzNCA2Ljk1MDgxIDQuNTEzMzQgNy4xNDYwNyA0LjMxODA4TDcuNzY0NzggMy42OTkzOFpNMi45OTE5MSA3LjA1ODA3TDIuOTQ4OTkgNy4xMDA5N0MyLjU3OTM1IDcuNDcwNSAyLjM0MjgyIDcuNzA2OTcgMi4xNzc2NyA3Ljk1MDA2QzEuNTAyNDYgOC45NDQwMSAxLjQ2NzYgMTAuMjM3NyAyLjExNzc4IDExLjIyNzdDMi4yNzYzNCAxMS40NjkyIDIuNTA3NDQgMTEuNzAwMiAyLjg1ODg2IDEyLjA1MTVMMi44NTg4OCAxMi4wNTE1TDIuOTAzNTIgMTIuMDk2MUwyLjk0ODE1IDEyLjE0MDdMMi45NDgxNSAxMi4xNDA3TDIuOTQ4MTcgMTIuMTQwOEMzLjI5OTQ1IDEyLjQ5MjIgMy41MzA0NSAxMi43MjMzIDMuNzcxOSAxMi44ODE4QzQuNzYxOTMgMTMuNTMyIDYuMDU1NiAxMy40OTcyIDcuMDQ5NTYgMTIuODIxOUM3LjI5MjY1IDEyLjY1NjggNy41MjkxMiAxMi40MjAzIDcuODk4NjUgMTIuMDUwNkw3Ljk0MTU1IDEyLjAwNzdMOC41NjAyNiAxMS4zODlDOC43NTU1MiAxMS4xOTM3IDguNzU1NTIgMTAuODc3MiA4LjU2MDI2IDEwLjY4MTlDOC4zNjUgMTAuNDg2NyA4LjA0ODQyIDEwLjQ4NjcgNy44NTMxNyAxMC42ODE5TDcuMjM0NDYgMTEuMzAwNkM2LjgwNzQ3IDExLjcyNzYgNi42NDIgMTEuODg5OSA2LjQ4NzY0IDExLjk5NDhDNS44MTEzIDEyLjQ1NDIgNC45NTYxNSAxMi40NjMyIDQuMzIwODIgMTIuMDQ2QzQuMTc2NTYgMTEuOTUxMiA0LjAyMjQ5IDExLjgwMDkgMy42MTA2MSAxMS4zODlDMy4xOTg3MyAxMC45NzcxIDMuMDQ4MzcgMTAuODIzMSAyLjk1MzYzIDEwLjY3ODhDMi41MzYzOSAxMC4wNDM1IDIuNTQ1MzkgOS4xODgzMiAzLjAwNDg0IDguNTExOThDMy4xMDk3MSA4LjM1NzYxIDMuMjcyMDEgOC4xOTIxNSAzLjY5OSA3Ljc2NTE2TDQuMzE3NyA3LjE0NjQ1QzQuNTEyOTYgNi45NTExOSA0LjUxMjk2IDYuNjM0NjIgNC4zMTc3IDYuNDM5MzZDNC4xMjI0NSA2LjI0NDEgMy44MDU4NyA2LjI0NDEgMy42MTA2MSA2LjQzOTM2TDIuOTkxOTEgNy4wNTgwN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG1uPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjU2NDI3IDMuOTk5ODhDNC41ODQyMiAzLjk5OTg5IDQuNjA0NDUgMy45OTk4OSA0LjYyNDk2IDMuOTk5ODlINS40OTk5NkM1Ljc3NjEgMy45OTk4OSA1Ljk5OTk2IDQuMjIzNzUgNS45OTk5NiA0LjQ5OTg5QzUuOTk5OTYgNC43NzYwMyA1Ljc3NjEgNC45OTk4OSA1LjQ5OTk2IDQuOTk5ODlINC42MjQ5NkM0LjAyMTA4IDQuOTk5ODkgMy43ODkzMiA1LjAwMjEzIDMuNjA2MDEgNS4wMzcxM0MyLjgwMjg3IDUuMTkwNSAyLjE5MTgxIDUuNzg4ODMgMi4wMzc1OSA2LjUzMzEyQzIuMDAyNTcgNi43MDIxMiAxLjk5OTk2IDYuOTE3MzkgMS45OTk5NiA3LjQ5OTg5QzEuOTk5OTYgOC4wODIzOSAyLjAwMjU3IDguMjk3NjYgMi4wMzc1OSA4LjQ2NjY2QzIuMTkxODEgOS4yMTA5NSAyLjgwMjg3IDkuODA5MjggMy42MDYwMSA5Ljk2MjY1QzMuNzg5MzIgOS45OTc2NSA0LjAyMTA4IDkuOTk5ODkgNC42MjQ5NiA5Ljk5OTg5SDUuNDk5OTZDNS43NzYxIDkuOTk5ODkgNS45OTk5NiAxMC4yMjM3IDUuOTk5OTYgMTAuNDk5OUM1Ljk5OTk2IDEwLjc3NiA1Ljc3NjEgMTAuOTk5OSA1LjQ5OTk2IDEwLjk5OTlINC42MjQ5NkM0LjYwNDQ1IDEwLjk5OTkgNC41ODQyMiAxMC45OTk5IDQuNTY0MjcgMTAuOTk5OUM0LjA0MTU5IDExIDMuNzA3MTIgMTEgMy40MTg0NSAxMC45NDQ5QzIuMjM4MTQgMTAuNzE5NSAxLjI5ODcxIDkuODI5MzcgMS4wNTgzOSA4LjY2OTU1QzAuOTk5NzgyIDguMzg2NjkgMC45OTk4NDggOC4wNTk5MiAwLjk5OTk0NyA3LjU2MzAxQzAuOTk5OTUxIDcuNTQyMjcgMC45OTk5NTUgNy41MjEyMyAwLjk5OTk1NSA3LjQ5OTg5QzAuOTk5OTU1IDcuNDc4NTUgMC45OTk5NTEgNy40NTc1MSAwLjk5OTk0NyA3LjQzNjc3QzAuOTk5ODQ4IDYuOTM5ODYgMC45OTk3ODIgNi42MTMwOSAxLjA1ODM5IDYuMzMwMjNDMS4yOTg3MSA1LjE3MDQxIDIuMjM4MTQgNC4yODAyNyAzLjQxODQ1IDQuMDU0ODhDMy43MDcxMiAzLjk5OTc2IDQuMDQxNTkgMy45OTk4MSA0LjU2NDI3IDMuOTk5ODhaTTExLjM5MzkgNS4wMzcxM0MxMS4yMTA2IDUuMDAyMTMgMTAuOTc4OCA0Ljk5OTg5IDEwLjM3NSA0Ljk5OTg5SDkuNDk5OTZDOS4yMjM4MSA0Ljk5OTg5IDguOTk5OTYgNC43NzYwMyA4Ljk5OTk2IDQuNDk5ODlDOC45OTk5NiA0LjIyMzc1IDkuMjIzODEgMy45OTk4OSA5LjQ5OTk2IDMuOTk5ODlIMTAuMzc1QzEwLjM5NTUgMy45OTk4OSAxMC40MTU3IDMuOTk5ODkgMTAuNDM1NiAzLjk5OTg4QzEwLjk1ODMgMy45OTk4MSAxMS4yOTI4IDMuOTk5NzYgMTEuNTgxNSA0LjA1NDg4QzEyLjc2MTggNC4yODAyNyAxMy43MDEyIDUuMTcwNDEgMTMuOTQxNSA2LjMzMDIzQzE0LjAwMDEgNi42MTMwOSAxNC4wMDAxIDYuOTM5ODUgMTQgNy40MzY3NkMxNCA3LjQ1NzUgMTQgNy40Nzg1NCAxNCA3LjQ5OTg5QzE0IDcuNTIxMjQgMTQgNy41NDIyOCAxNCA3LjU2MzAyQzE0LjAwMDEgOC4wNTk5MiAxNC4wMDAxIDguMzg2NjkgMTMuOTQxNSA4LjY2OTU1QzEzLjcwMTIgOS44MjkzNyAxMi43NjE4IDEwLjcxOTUgMTEuNTgxNSAxMC45NDQ5QzExLjI5MjggMTEgMTAuOTU4MyAxMSAxMC40MzU2IDEwLjk5OTlDMTAuNDE1NyAxMC45OTk5IDEwLjM5NTUgMTAuOTk5OSAxMC4zNzUgMTAuOTk5OUg5LjQ5OTk2QzkuMjIzODEgMTAuOTk5OSA4Ljk5OTk2IDEwLjc3NiA4Ljk5OTk2IDEwLjQ5OTlDOC45OTk5NiAxMC4yMjM3IDkuMjIzODEgOS45OTk4OSA5LjQ5OTk2IDkuOTk5ODlIMTAuMzc1QzEwLjk3ODggOS45OTk4OSAxMS4yMTA2IDkuOTk3NjUgMTEuMzkzOSA5Ljk2MjY1QzEyLjE5NyA5LjgwOTI4IDEyLjgwODEgOS4yMTA5NSAxMi45NjIzIDguNDY2NjZDMTIuOTk3MyA4LjI5NzY2IDEzIDguMDgyMzkgMTMgNy40OTk4OUMxMyA2LjkxNzM5IDEyLjk5NzMgNi43MDIxMiAxMi45NjIzIDYuNTMzMTJDMTIuODA4MSA1Ljc4ODgzIDEyLjE5NyA1LjE5MDUgMTEuMzkzOSA1LjAzNzEzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQ249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEwLjY3ODggMi45NTQxOUMxMC4wNDM1IDIuNTM2OTQgOS4xODgyOSAyLjU0NTk0IDguNTExOTQgMy4wMDU0MUM4LjM1NzU3IDMuMTEwMjcgOC4xOTIxIDMuMjcyNTcgNy43NjUxIDMuNjk5NTdMNy4xNDYzOCA0LjMxODI5QzYuOTUxMTIgNC41MTM1NSA2LjYzNDU0IDQuNTEzNTUgNi40MzkyOCA0LjMxODI5QzYuMjQ0MDEgNC4xMjMwMyA2LjI0NDAxIDMuODA2NDUgNi40MzkyOCAzLjYxMTE5TDcuMDU4IDIuOTkyNDdDNy4wNzI1IDIuOTc3OTcgNy4wODY3OSAyLjk2MzY2IDcuMTAwOSAyLjk0OTU1QzcuNDcwNDQgMi41Nzk5MSA3LjcwNjkxIDIuMzQzMzYgNy45NTAwMSAyLjE3ODIyQzguOTQzOTggMS41MDI5OSAxMC4yMzc3IDEuNDY4MTMgMTEuMjI3NyAyLjExODMyQzExLjQ2OTIgMi4yNzY4OSAxMS43MDAyIDIuNTA4IDEyLjA1MTUgMi44NTk0MkMxMi4wNjYyIDIuODc0MSAxMi4wODEgMi44ODg5OCAxMi4wOTYxIDIuOTA0MDhDMTIuMTExMiAyLjkxOTE3IDEyLjEyNjEgMi45MzQwNSAxMi4xNDA4IDIuOTQ4NzFDMTIuNDkyMiAzLjMwMDAxIDEyLjcyMzMgMy41MzEwMiAxMi44ODE5IDMuNzcyNDhDMTMuNTMyMSA0Ljc2MjUyIDEzLjQ5NzIgNi4wNTYyMyAxMi44MjIgNy4wNTAyQzEyLjY1NjggNy4yOTMzIDEyLjQyMDMgNy41Mjk3NiAxMi4wNTA3IDcuODk5MjlDMTIuMDM2NiA3LjkxMzQgMTIuMDIyMiA3LjkyNzcxIDEyLjAwNzcgNy45NDIyMUwxMS4zODkgOC41NjA5M0MxMS4xOTM4IDguNzU2MiAxMC44NzcyIDguNzU2MiAxMC42ODE5IDguNTYwOTNDMTAuNDg2NyA4LjM2NTY3IDEwLjQ4NjcgOC4wNDkwOSAxMC42ODE5IDcuODUzODNMMTEuMzAwNiA3LjIzNTExQzExLjcyNzYgNi44MDgxMSAxMS44ODk5IDYuNjQyNjQgMTEuOTk0OCA2LjQ4ODI3QzEyLjQ1NDMgNS44MTE5MiAxMi40NjMzIDQuOTU2NzUgMTIuMDQ2IDQuMzIxNDFDMTEuOTUxMyA0LjE3NzE0IDExLjgwMDkgNC4wMjMwNyAxMS4zODkgMy42MTExOUMxMC45NzcxIDMuMTk5MyAxMC44MjMxIDMuMDQ4OTMgMTAuNjc4OCAyLjk1NDE5Wk00LjMxNzk2IDYuNDM5NjFDNC41MTMyMiA2LjYzNDg3IDQuNTEzMjIgNi45NTE0NiA0LjMxNzk2IDcuMTQ2NzJMMy42OTkyNCA3Ljc2NTQ0QzMuMjcyMjQgOC4xOTI0NCAzLjEwOTkzIDguMzU3OTEgMy4wMDUwNyA4LjUxMjI3QzIuNTQ1NjEgOS4xODg2MyAyLjUzNjYxIDEwLjA0MzggMi45NTM4NSAxMC42NzkxQzMuMDQ4NiAxMC44MjM0IDMuMTk4OTYgMTAuOTc3NSAzLjYxMDg1IDExLjM4OTRDNC4wMjI3NCAxMS44MDEyIDQuMTc2ODEgMTEuOTUxNiA0LjMyMTA3IDEyLjA0NjRDNC45NTY0MiAxMi40NjM2IDUuODExNTggMTIuNDU0NiA2LjQ4Nzk0IDExLjk5NTFDNi42NDIzIDExLjg5MDMgNi44MDc3NyAxMS43MjggNy4yMzQ3NyAxMS4zMDFMNy44NTM0OSAxMC42ODIzQzguMDQ4NzUgMTAuNDg3IDguMzY1MzMgMTAuNDg3IDguNTYwNiAxMC42ODIzQzguNzU1ODYgMTAuODc3NSA4Ljc1NTg2IDExLjE5NDEgOC41NjA2IDExLjM4OTRMNy45NDE4OCAxMi4wMDgxQzcuOTI3MzggMTIuMDIyNiA3LjkxMzA3IDEyLjAzNjkgNy44OTg5NyAxMi4wNTFDNy41Mjk0MyAxMi40MjA2IDcuMjkyOTYgMTIuNjU3MiA3LjA0OTg2IDEyLjgyMjNDNi4wNTU4OSAxMy40OTc2IDQuNzYyMTkgMTMuNTMyNCAzLjc3MjE0IDEyLjg4MjJDMy41MzA2OCAxMi43MjM3IDMuMjk5NjcgMTIuNDkyNSAyLjk0ODM3IDEyLjE0MTFDMi45MzM3MSAxMi4xMjY0IDIuOTE4ODMgMTIuMTExNiAyLjkwMzc0IDEyLjA5NjVDMi44ODg2NSAxMi4wODE0IDIuODczNzcgMTIuMDY2NSAyLjg1OTEgMTIuMDUxOEMyLjUwNzY2IDExLjcwMDUgMi4yNzY1NiAxMS40Njk1IDIuMTE3OTkgMTEuMjI4MUMxLjQ2NzggMTAuMjM4IDEuNTAyNjUgOC45NDQzMiAyLjE3Nzg4IDcuOTUwMzVDMi4zNDMwMyA3LjcwNzI0IDIuNTc5NTcgNy40NzA3NyAyLjk0OTIyIDcuMTAxMjRDMi45NjMzMyA3LjA4NzEzIDIuOTc3NjMgNy4wNzI4MyAyLjk5MjEzIDcuMDU4MzNMMy42MTA4NSA2LjQzOTYxQzMuODA2MTEgNi4yNDQzNSA0LjEyMjY5IDYuMjQ0MzUgNC4zMTc5NiA2LjQzOTYxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0seW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuNSA1LjI1QzEuOTE0MjEgNS4yNSAyLjI1IDQuOTE0MjEgMi4yNSA0LjVDMi4yNSA0LjA4NTc5IDEuOTE0MjEgMy43NSAxLjUgMy43NUMxLjA4NTc5IDMuNzUgMC43NSA0LjA4NTc5IDAuNzUgNC41QzAuNzUgNC45MTQyMSAxLjA4NTc5IDUuMjUgMS41IDUuMjVaTTQgNC41QzQgNC4yMjM4NiA0LjIyMzg2IDQgNC41IDRIMTMuNUMxMy43NzYxIDQgMTQgNC4yMjM4NiAxNCA0LjVDMTQgNC43NzYxNCAxMy43NzYxIDUgMTMuNSA1SDQuNUM0LjIyMzg2IDUgNCA0Ljc3NjE0IDQgNC41Wk00LjUgN0M0LjIyMzg2IDcgNCA3LjIyMzg2IDQgNy41QzQgNy43NzYxNCA0LjIyMzg2IDggNC41IDhIMTMuNUMxMy43NzYxIDggMTQgNy43NzYxNCAxNCA3LjVDMTQgNy4yMjM4NiAxMy43NzYxIDcgMTMuNSA3SDQuNVpNNC41IDEwQzQuMjIzODYgMTAgNCAxMC4yMjM5IDQgMTAuNUM0IDEwLjc3NjEgNC4yMjM4NiAxMSA0LjUgMTFIMTMuNUMxMy43NzYxIDExIDE0IDEwLjc3NjEgMTQgMTAuNUMxNCAxMC4yMjM5IDEzLjc3NjEgMTAgMTMuNSAxMEg0LjVaTTIuMjUgNy41QzIuMjUgNy45MTQyMSAxLjkxNDIxIDguMjUgMS41IDguMjVDMS4wODU3OSA4LjI1IDAuNzUgNy45MTQyMSAwLjc1IDcuNUMwLjc1IDcuMDg1NzkgMS4wODU3OSA2Ljc1IDEuNSA2Ljc1QzEuOTE0MjEgNi43NSAyLjI1IDcuMDg1NzkgMi4yNSA3LjVaTTEuNSAxMS4yNUMxLjkxNDIxIDExLjI1IDIuMjUgMTAuOTE0MiAyLjI1IDEwLjVDMi4yNSAxMC4wODU4IDEuOTE0MjEgOS43NSAxLjUgOS43NUMxLjA4NTc5IDkuNzUgMC43NSAxMC4wODU4IDAuNzUgMTAuNUMwLjc1IDEwLjkxNDIgMS4wODU3OSAxMS4yNSAxLjUgMTEuMjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx3bj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNSA0LjYzNjAxQzUgMy43NjAzMSA1LjI0MjE5IDMuMTA1NCA1LjY0MzIzIDIuNjczNTdDNi4wMzkzNCAyLjI0NzA1IDYuNjQ1ODIgMS45NzgzIDcuNTAxNCAxLjk3ODNDOC4zNTc0NSAxLjk3ODMgOC45NjMwNiAyLjI0NjUyIDkuMzU4MjMgMi42NzIwOEM5Ljc1ODM4IDMuMTAyOTkgMTAgMy43NTcwOCAxMCA0LjYzMzI1VjUuOTk5OTlINVY0LjYzNjAxWk00IDUuOTk5OTlWNC42MzYwMUM0IDMuNTgxNDggNC4yOTMzOSAyLjY1NzU0IDQuOTEwNDkgMS45OTMwN0M1LjUzMjUyIDEuMzIzMjkgNi40MjY3NSAwLjk3ODMwMiA3LjUwMTQgMC45NzgzMDJDOC41NzU4MyAwLjk3ODMwMiA5LjQ2OTUyIDEuMzIyMzMgMTAuMDkxIDEuOTkxNjJDMTAuNzA3NiAyLjY1NTU3IDExIDMuNTc4OTYgMTEgNC42MzMyNVY1Ljk5OTk5SDEyQzEyLjU1MjMgNS45OTk5OSAxMyA2LjQ0NzcxIDEzIDYuOTk5OTlWMTNDMTMgMTMuNTUyMyAxMi41NTIzIDE0IDEyIDE0SDNDMi40NDc3MiAxNCAyIDEzLjU1MjMgMiAxM1Y2Ljk5OTk5QzIgNi40NDc3MSAyLjQ0NzcyIDUuOTk5OTkgMyA1Ljk5OTk5SDRaTTMgNi45OTk5OUgxMlYxM0gzVjYuOTk5OTlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxibj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTg2IDBDNi4zMjU3IDAgNS4zNjEwNyAwLjM4OTQzIDQuNzM3NTMgMS4xOTM2MUM0LjIzNzQ1IDEuODM4NTYgNCAyLjY4MjQyIDQgMy42MzMyNUg1QzUgMi44NDMxMyA1LjE5NjkxIDIuMjMzMTIgNS41Mjc4IDEuODA2MzZDNS45MTYxNSAxLjMwNTUyIDYuNTUxNTIgMSA3LjQ5ODYgMUM4LjM1NjgzIDEgOC45NjMzNiAxLjI2NTAyIDkuMzU4NDYgMS42ODYyM0M5Ljc1NzkzIDIuMTEyMTEgMTAgMi43NjA0NCAxMCAzLjYzNjAxVjZIM0MyLjQ0NzcyIDYgMiA2LjQ0NzcyIDIgN1YxM0MyIDEzLjU1MjMgMi40NDc3MiAxNCAzIDE0SDEyQzEyLjU1MjMgMTQgMTMgMTMuNTUyMyAxMyAxM1Y3QzEzIDYuNDQ3NzEgMTIuNTUyMyA2IDEyIDZIMTFWMy42MzYwMUMxMSAyLjU4MTM1IDEwLjcwNjUgMS42NjE2NyAxMC4wODc4IDEuMDAyMUM5LjQ2NDc3IDAuMzM3ODcxIDguNTcwNjEgMCA3LjQ5ODYgMFpNMyA3SDEyVjEzSDNWN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHhuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk05IDMuNjM2MDFDOSAyLjc2MDQ0IDkuMjQyMDcgMi4xMTIxMSA5LjY0MTU0IDEuNjg2MjNDMTAuMDM2NiAxLjI2NTAyIDEwLjY0MzIgMSAxMS41MDE0IDFDMTIuNDQ4NSAxIDEzLjA4MzkgMS4zMDU1MiAxMy40NzIyIDEuODA2MzZDMTMuODAzMSAyLjIzMzEyIDE0IDIuODQzMTMgMTQgMy42MzMyNUgxNUMxNSAyLjY4MjQyIDE0Ljc2MjYgMS44Mzg1NiAxNC4yNjI1IDEuMTkzNjFDMTMuNjM4OSAwLjM4OTQzIDEyLjY3NDMgMCAxMS41MDE0IDBDMTAuNDI5NCAwIDkuNTM1MjMgMC4zMzc4NzEgOC45MTIxOCAxLjAwMjFDOC4yOTM1MSAxLjY2MTY3IDggMi41ODEzNSA4IDMuNjM2MDFWNkgxQzAuNDQ3NzE1IDYgMCA2LjQ0NzcyIDAgN1YxM0MwIDEzLjU1MjMgMC40NDc3MTUgMTQgMSAxNEgxMEMxMC41NTIzIDE0IDExIDEzLjU1MjMgMTEgMTNWN0MxMSA2LjQ0NzcyIDEwLjU1MjMgNiAxMCA2SDlWMy42MzYwMVpNMSA3SDEwVjEzSDFWN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LF9uPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjM1MzU1IDEuODUzNTVDMy41NDg4MiAxLjY1ODI5IDMuNTQ4ODIgMS4zNDE3MSAzLjM1MzU1IDEuMTQ2NDVDMy4xNTgyOSAwLjk1MTE4NCAyLjg0MTcxIDAuOTUxMTg0IDIuNjQ2NDUgMS4xNDY0NUwwLjY0NjQ0NyAzLjE0NjQ1QzAuNDUxMTg0IDMuMzQxNzEgMC40NTExODQgMy42NTgyOSAwLjY0NjQ0NyAzLjg1MzU1TDIuNjQ2NDUgNS44NTM1NUMyLjg0MTcxIDYuMDQ4ODIgMy4xNTgyOSA2LjA0ODgyIDMuMzUzNTUgNS44NTM1NUMzLjU0ODgyIDUuNjU4MjkgMy41NDg4MiA1LjM0MTcxIDMuMzUzNTUgNS4xNDY0NUwyLjIwNzExIDRIOS41QzExLjQzMyA0IDEzIDUuNTY3IDEzIDcuNUMxMyA3Ljc3NjE0IDEzLjIyMzkgOCAxMy41IDhDMTMuNzc2MSA4IDE0IDcuNzc2MTQgMTQgNy41QzE0IDUuMDE0NzIgMTEuOTg1MyAzIDkuNSAzSDIuMjA3MTFMMy4zNTM1NSAxLjg1MzU1Wk0yIDcuNUMyIDcuMjIzODYgMS43NzYxNCA3IDEuNSA3QzEuMjIzODYgNyAxIDcuMjIzODYgMSA3LjVDMSA5Ljk4NTI4IDMuMDE0NzIgMTIgNS41IDEySDEyLjc5MjlMMTEuNjQ2NCAxMy4xNDY0QzExLjQ1MTIgMTMuMzQxNyAxMS40NTEyIDEzLjY1ODMgMTEuNjQ2NCAxMy44NTM2QzExLjg0MTcgMTQuMDQ4OCAxMi4xNTgzIDE0LjA0ODggMTIuMzUzNiAxMy44NTM2TDE0LjM1MzYgMTEuODUzNkMxNC41NDg4IDExLjY1ODMgMTQuNTQ4OCAxMS4zNDE3IDE0LjM1MzYgMTEuMTQ2NEwxMi4zNTM2IDkuMTQ2NDVDMTIuMTU4MyA4Ljk1MTE4IDExLjg0MTcgOC45NTExOCAxMS42NDY0IDkuMTQ2NDVDMTEuNDUxMiA5LjM0MTcxIDExLjQ1MTIgOS42NTgyOSAxMS42NDY0IDkuODUzNTVMMTIuNzkyOSAxMUg1LjVDMy41NjcgMTEgMiA5LjQzMyAyIDcuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE9uPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMy45IDAuNDk5OTc2QzEzLjkgMC4yNzkwNjIgMTMuNzIwOSAwLjA5OTk3NTYgMTMuNSAwLjA5OTk3NTZDMTMuMjc5MSAwLjA5OTk3NTYgMTMuMSAwLjI3OTA2MiAxMy4xIDAuNDk5OTc2VjEuMDk5OThIMTIuNUMxMi4yNzkxIDEuMDk5OTggMTIuMSAxLjI3OTA2IDEyLjEgMS40OTk5OEMxMi4xIDEuNzIwODkgMTIuMjc5MSAxLjg5OTk4IDEyLjUgMS44OTk5OEgxMy4xVjIuNDk5OThDMTMuMSAyLjcyMDg5IDEzLjI3OTEgMi44OTk5OCAxMy41IDIuODk5OThDMTMuNzIwOSAyLjg5OTk4IDEzLjkgMi43MjA4OSAxMy45IDIuNDk5OThWMS44OTk5OEgxNC41QzE0LjcyMDkgMS44OTk5OCAxNC45IDEuNzIwODkgMTQuOSAxLjQ5OTk4QzE0LjkgMS4yNzkwNiAxNC43MjA5IDEuMDk5OTggMTQuNSAxLjA5OTk4SDEzLjlWMC40OTk5NzZaTTExLjg1MzYgMy4xNDY0MkMxMi4wNDg4IDMuMzQxNjggMTIuMDQ4OCAzLjY1ODI2IDExLjg1MzYgMy44NTM1M0wxMC44NTM2IDQuODUzNTNDMTAuNjU4MyA1LjA0ODc5IDEwLjM0MTcgNS4wNDg3OSAxMC4xNDY1IDQuODUzNTNDOS45NTEyIDQuNjU4MjcgOS45NTEyIDQuMzQxNjkgMTAuMTQ2NSA0LjE0NjQyTDExLjE0NjQgMy4xNDY0M0MxMS4zNDE3IDIuOTUxMTYgMTEuNjU4MyAyLjk1MTE2IDExLjg1MzYgMy4xNDY0MlpNOS44NTM1NyA1LjE0NjQyQzEwLjA0ODggNS4zNDE2OCAxMC4wNDg4IDUuNjU4MjcgOS44NTM1NyA1Ljg1MzUzTDIuODUzNTUgMTIuODUzNUMyLjY1ODI5IDEzLjA0ODggMi4zNDE3MSAxMy4wNDg4IDIuMTQ2NDUgMTIuODUzNUMxLjk1MTE4IDEyLjY1ODMgMS45NTExOCAxMi4zNDE3IDIuMTQ2NDUgMTIuMTQ2NEw5LjE0NjQ2IDUuMTQ2NDJDOS4zNDE3MiA0Ljk1MTE2IDkuNjU4MzEgNC45NTExNiA5Ljg1MzU3IDUuMTQ2NDJaTTEzLjUgNS4wOTk5OEMxMy43MjA5IDUuMDk5OTggMTMuOSA1LjI3OTA2IDEzLjkgNS40OTk5OFY2LjA5OTk4SDE0LjVDMTQuNzIwOSA2LjA5OTk4IDE0LjkgNi4yNzkwNiAxNC45IDYuNDk5OThDMTQuOSA2LjcyMDg5IDE0LjcyMDkgNi44OTk5OCAxNC41IDYuODk5OThIMTMuOVY3LjQ5OTk4QzEzLjkgNy43MjA4OSAxMy43MjA5IDcuODk5OTggMTMuNSA3Ljg5OTk4QzEzLjI3OTEgNy44OTk5OCAxMy4xIDcuNzIwODkgMTMuMSA3LjQ5OTk4VjYuODk5OThIMTIuNUMxMi4yNzkxIDYuODk5OTggMTIuMSA2LjcyMDg5IDEyLjEgNi40OTk5OEMxMi4xIDYuMjc5MDYgMTIuMjc5MSA2LjA5OTk4IDEyLjUgNi4wOTk5OEgxMy4xVjUuNDk5OThDMTMuMSA1LjI3OTA2IDEzLjI3OTEgNS4wOTk5OCAxMy41IDUuMDk5OThaTTguOTAwMDIgMC40OTk5NzZDOC45MDAwMiAwLjI3OTA2MiA4LjcyMDkzIDAuMDk5OTc1NiA4LjUwMDAyIDAuMDk5OTc1NkM4LjI3OTEgMC4wOTk5NzU2IDguMTAwMDIgMC4yNzkwNjIgOC4xMDAwMiAwLjQ5OTk3NlYxLjA5OTk4SDcuNTAwMDJDNy4yNzkxIDEuMDk5OTggNy4xMDAwMiAxLjI3OTA2IDcuMTAwMDIgMS40OTk5OEM3LjEwMDAyIDEuNzIwODkgNy4yNzkxIDEuODk5OTggNy41MDAwMiAxLjg5OTk4SDguMTAwMDJWMi40OTk5OEM4LjEwMDAyIDIuNzIwODkgOC4yNzkxIDIuODk5OTggOC41MDAwMiAyLjg5OTk4QzguNzIwOTMgMi44OTk5OCA4LjkwMDAyIDIuNzIwODkgOC45MDAwMiAyLjQ5OTk4VjEuODk5OThIOS41MDAwMkM5LjcyMDkzIDEuODk5OTggOS45MDAwMiAxLjcyMDg5IDkuOTAwMDIgMS40OTk5OEM5LjkwMDAyIDEuMjc5MDYgOS43MjA5MyAxLjA5OTk4IDkuNTAwMDIgMS4wOTk5OEg4LjkwMDAyVjAuNDk5OTc2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEwIDYuNUMxMCA4LjQzMyA4LjQzMyAxMCA2LjUgMTBDNC41NjcgMTAgMyA4LjQzMyAzIDYuNUMzIDQuNTY3IDQuNTY3IDMgNi41IDNDOC40MzMgMyAxMCA0LjU2NyAxMCA2LjVaTTkuMzA4ODQgMTAuMDE1OUM4LjUzOTAxIDEwLjYzMTggNy41NjI1MSAxMSA2LjUgMTFDNC4wMTQ3MiAxMSAyIDguOTg1MjggMiA2LjVDMiA0LjAxNDcyIDQuMDE0NzIgMiA2LjUgMkM4Ljk4NTI4IDIgMTEgNC4wMTQ3MiAxMSA2LjVDMTEgNy41NjI1MSAxMC42MzE4IDguNTM5MDEgMTAuMDE1OSA5LjMwODg0TDEyLjg1MzYgMTIuMTQ2NEMxMy4wNDg4IDEyLjM0MTcgMTMuMDQ4OCAxMi42NTgzIDEyLjg1MzYgMTIuODUzNkMxMi42NTgzIDEzLjA0ODggMTIuMzQxNyAxMy4wNDg4IDEyLjE0NjQgMTIuODUzNkw5LjMwODg0IDEwLjAxNTlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxFbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS40OTk4OCAyLjAwMDEyQzEuNzc2MDIgMi4wMDAxMiAxLjk5OTg4IDEuNzc2MjYgMS45OTk4OCAxLjUwMDEyQzEuOTk5ODggMS4yMjM5OCAxLjc3NjAyIDEuMDAwMTIgMS40OTk4OCAxLjAwMDEyQzEuMjIzNzQgMS4wMDAxMiAwLjk5OTg3OCAxLjIyMzk4IDAuOTk5ODc4IDEuNTAwMTJDMC45OTk4NzggMS43NzYyNiAxLjIyMzc0IDIuMDAwMTIgMS40OTk4OCAyLjAwMDEyWk00LjQ5OTg4IDIuMDAwMTJDNC43NzYwMiAyLjAwMDEyIDQuOTk5ODggMS43NzYyNiA0Ljk5OTg4IDEuNTAwMTJDNC45OTk4OCAxLjIyMzk4IDQuNzc2MDIgMS4wMDAxMiA0LjQ5OTg4IDEuMDAwMTJDNC4yMjM3NCAxLjAwMDEyIDMuOTk5ODggMS4yMjM5OCAzLjk5OTg4IDEuNTAwMTJDMy45OTk4OCAxLjc3NjI2IDQuMjIzNzQgMi4wMDAxMiA0LjQ5OTg4IDIuMDAwMTJaTTcuOTk5ODggMS41MDAxMkM3Ljk5OTg4IDEuNzc2MjYgNy43NzYwMiAyLjAwMDEyIDcuNDk5ODggMi4wMDAxMkM3LjIyMzc0IDIuMDAwMTIgNi45OTk4OCAxLjc3NjI2IDYuOTk5ODggMS41MDAxMkM2Ljk5OTg4IDEuMjIzOTggNy4yMjM3NCAxLjAwMDEyIDcuNDk5ODggMS4wMDAxMkM3Ljc3NjAyIDEuMDAwMTIgNy45OTk4OCAxLjIyMzk4IDcuOTk5ODggMS41MDAxMlpNMTAuNDk5OSAyLjAwMDEyQzEwLjc3NiAyLjAwMDEyIDEwLjk5OTkgMS43NzYyNiAxMC45OTk5IDEuNTAwMTJDMTAuOTk5OSAxLjIyMzk4IDEwLjc3NiAxLjAwMDEyIDEwLjQ5OTkgMS4wMDAxMkMxMC4yMjM3IDEuMDAwMTIgOS45OTk4OCAxLjIyMzk4IDkuOTk5ODggMS41MDAxMkM5Ljk5OTg4IDEuNzc2MjYgMTAuMjIzNyAyLjAwMDEyIDEwLjQ5OTkgMi4wMDAxMlpNMTMuOTk5OSAxLjUwMDEyQzEzLjk5OTkgMS43NzYyNiAxMy43NzYgMi4wMDAxMiAxMy40OTk5IDIuMDAwMTJDMTMuMjIzNyAyLjAwMDEyIDEyLjk5OTkgMS43NzYyNiAxMi45OTk5IDEuNTAwMTJDMTIuOTk5OSAxLjIyMzk4IDEzLjIyMzcgMS4wMDAxMiAxMy40OTk5IDEuMDAwMTJDMTMuNzc2IDEuMDAwMTIgMTMuOTk5OSAxLjIyMzk4IDEzLjk5OTkgMS41MDAxMlpNMS40OTk4OCAxNC4wMDAxQzEuNzc2MDIgMTQuMDAwMSAxLjk5OTg4IDEzLjc3NjMgMS45OTk4OCAxMy41MDAxQzEuOTk5ODggMTMuMjI0IDEuNzc2MDIgMTMuMDAwMSAxLjQ5OTg4IDEzLjAwMDFDMS4yMjM3NCAxMy4wMDAxIDAuOTk5ODc4IDEzLjIyNCAwLjk5OTg3OCAxMy41MDAxQzAuOTk5ODc4IDEzLjc3NjMgMS4yMjM3NCAxNC4wMDAxIDEuNDk5ODggMTQuMDAwMVpNMS45OTk4OCAxMC41MDAxQzEuOTk5ODggMTAuNzc2MyAxLjc3NjAyIDExLjAwMDEgMS40OTk4OCAxMS4wMDAxQzEuMjIzNzQgMTEuMDAwMSAwLjk5OTg3OCAxMC43NzYzIDAuOTk5ODc4IDEwLjUwMDFDMC45OTk4NzggMTAuMjI0IDEuMjIzNzQgMTAuMDAwMSAxLjQ5OTg4IDEwLjAwMDFDMS43NzYwMiAxMC4wMDAxIDEuOTk5ODggMTAuMjI0IDEuOTk5ODggMTAuNTAwMVpNMS40OTk4OCA4LjAwMDEyQzEuNzc2MDIgOC4wMDAxMiAxLjk5OTg4IDcuNzc2MjYgMS45OTk4OCA3LjUwMDEyQzEuOTk5ODggNy4yMjM5OCAxLjc3NjAyIDcuMDAwMTIgMS40OTk4OCA3LjAwMDEyQzEuMjIzNzQgNy4wMDAxMiAwLjk5OTg3OCA3LjIyMzk4IDAuOTk5ODc4IDcuNTAwMTJDMC45OTk4NzggNy43NzYyNiAxLjIyMzc0IDguMDAwMTIgMS40OTk4OCA4LjAwMDEyWk0xLjk5OTg4IDQuNTAwMTJDMS45OTk4OCA0Ljc3NjI2IDEuNzc2MDIgNS4wMDAxMiAxLjQ5OTg4IDUuMDAwMTJDMS4yMjM3NCA1LjAwMDEyIDAuOTk5ODc4IDQuNzc2MjYgMC45OTk4NzggNC41MDAxMkMwLjk5OTg3OCA0LjIyMzk4IDEuMjIzNzQgNC4wMDAxMiAxLjQ5OTg4IDQuMDAwMTJDMS43NzYwMiA0LjAwMDEyIDEuOTk5ODggNC4yMjM5OCAxLjk5OTg4IDQuNTAwMTJaTTEzLjQ5OTkgMTEuMDAwMUMxMy43NzYgMTEuMDAwMSAxMy45OTk5IDEwLjc3NjMgMTMuOTk5OSAxMC41MDAxQzEzLjk5OTkgMTAuMjI0IDEzLjc3NiAxMC4wMDAxIDEzLjQ5OTkgMTAuMDAwMUMxMy4yMjM3IDEwLjAwMDEgMTIuOTk5OSAxMC4yMjQgMTIuOTk5OSAxMC41MDAxQzEyLjk5OTkgMTAuNzc2MyAxMy4yMjM3IDExLjAwMDEgMTMuNDk5OSAxMS4wMDAxWk0xMy45OTk5IDcuNTAwMTJDMTMuOTk5OSA3Ljc3NjI2IDEzLjc3NiA4LjAwMDEyIDEzLjQ5OTkgOC4wMDAxMkMxMy4yMjM3IDguMDAwMTIgMTIuOTk5OSA3Ljc3NjI2IDEyLjk5OTkgNy41MDAxMkMxMi45OTk5IDcuMjIzOTggMTMuMjIzNyA3LjAwMDEyIDEzLjQ5OTkgNy4wMDAxMkMxMy43NzYgNy4wMDAxMiAxMy45OTk5IDcuMjIzOTggMTMuOTk5OSA3LjUwMDEyWk0xMy40OTk5IDUuMDAwMTJDMTMuNzc2IDUuMDAwMTIgMTMuOTk5OSA0Ljc3NjI2IDEzLjk5OTkgNC41MDAxMkMxMy45OTk5IDQuMjIzOTggMTMuNzc2IDQuMDAwMTIgMTMuNDk5OSA0LjAwMDEyQzEzLjIyMzcgNC4wMDAxMiAxMi45OTk5IDQuMjIzOTggMTIuOTk5OSA0LjUwMDEyQzEyLjk5OTkgNC43NzYyNiAxMy4yMjM3IDUuMDAwMTIgMTMuNDk5OSA1LjAwMDEyWk00Ljk5OTg4IDEzLjUwMDFDNC45OTk4OCAxMy43NzYzIDQuNzc2MDIgMTQuMDAwMSA0LjQ5OTg4IDE0LjAwMDFDNC4yMjM3NCAxNC4wMDAxIDMuOTk5ODggMTMuNzc2MyAzLjk5OTg4IDEzLjUwMDFDMy45OTk4OCAxMy4yMjQgNC4yMjM3NCAxMy4wMDAxIDQuNDk5ODggMTMuMDAwMUM0Ljc3NjAyIDEzLjAwMDEgNC45OTk4OCAxMy4yMjQgNC45OTk4OCAxMy41MDAxWk03LjQ5OTg4IDE0LjAwMDFDNy43NzYwMiAxNC4wMDAxIDcuOTk5ODggMTMuNzc2MyA3Ljk5OTg4IDEzLjUwMDFDNy45OTk4OCAxMy4yMjQgNy43NzYwMiAxMy4wMDAxIDcuNDk5ODggMTMuMDAwMUM3LjIyMzc0IDEzLjAwMDEgNi45OTk4OCAxMy4yMjQgNi45OTk4OCAxMy41MDAxQzYuOTk5ODggMTMuNzc2MyA3LjIyMzc0IDE0LjAwMDEgNy40OTk4OCAxNC4wMDAxWk0xMC45OTk5IDEzLjUwMDFDMTAuOTk5OSAxMy43NzYzIDEwLjc3NiAxNC4wMDAxIDEwLjQ5OTkgMTQuMDAwMUMxMC4yMjM3IDE0LjAwMDEgOS45OTk4OCAxMy43NzYzIDkuOTk5ODggMTMuNTAwMUM5Ljk5OTg4IDEzLjIyNCAxMC4yMjM3IDEzLjAwMDEgMTAuNDk5OSAxMy4wMDAxQzEwLjc3NiAxMy4wMDAxIDEwLjk5OTkgMTMuMjI0IDEwLjk5OTkgMTMuNTAwMVpNMTMuNDk5OSAxNC4wMDAxQzEzLjc3NiAxNC4wMDAxIDEzLjk5OTkgMTMuNzc2MyAxMy45OTk5IDEzLjUwMDFDMTMuOTk5OSAxMy4yMjQgMTMuNzc2IDEzLjAwMDEgMTMuNDk5OSAxMy4wMDAxQzEzLjIyMzcgMTMuMDAwMSAxMi45OTk5IDEzLjIyNCAxMi45OTk5IDEzLjUwMDFDMTIuOTk5OSAxMy43NzYzIDEzLjIyMzcgMTQuMDAwMSAxMy40OTk5IDE0LjAwMDFaTTMuOTk5ODggNS4wMDAxMkMzLjk5OTg4IDQuNDQ3ODQgNC40NDc1OSA0LjAwMDEyIDQuOTk5ODggNC4wMDAxMkg5Ljk5OTg4QzEwLjU1MjIgNC4wMDAxMiAxMC45OTk5IDQuNDQ3ODQgMTAuOTk5OSA1LjAwMDEyVjEwLjAwMDFDMTAuOTk5OSAxMC41NTI0IDEwLjU1MjIgMTEuMDAwMSA5Ljk5OTg4IDExLjAwMDFINC45OTk4OEM0LjQ0NzU5IDExLjAwMDEgMy45OTk4OCAxMC41NTI0IDMuOTk5ODggMTAuMDAwMVY1LjAwMDEyWk00Ljk5OTg4IDUuMDAwMTJIOS45OTk4OFYxMC4wMDAxSDQuOTk5ODhWNS4wMDAxMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFNuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xIDJIMTRWMTNIMUwxIDJaTTAgMkMwIDEuNDQ3NzIgMC40NDc3MTUgMSAxIDFIMTRDMTQuNTUyMyAxIDE1IDEuNDQ3NzIgMTUgMlYxM0MxNSAxMy41NTIzIDE0LjU1MjMgMTQgMTQgMTRIMUMwLjQ0NzcxNSAxNCAwIDEzLjU1MjMgMCAxM1YyWk00Ljg3NSA3LjVDNC44NzUgNi4wNTAyNSA2LjA1MDI1IDQuODc1IDcuNSA0Ljg3NUM4Ljk0OTc1IDQuODc1IDEwLjEyNSA2LjA1MDI1IDEwLjEyNSA3LjVDMTAuMTI1IDguOTQ5NzUgOC45NDk3NSAxMC4xMjUgNy41IDEwLjEyNUM2LjA1MDI1IDEwLjEyNSA0Ljg3NSA4Ljk0OTc1IDQuODc1IDcuNVpNNy41IDMuODc1QzUuNDk3OTcgMy44NzUgMy44NzUgNS40OTc5NyAzLjg3NSA3LjVDMy44NzUgOS41MDIwMyA1LjQ5Nzk3IDExLjEyNSA3LjUgMTEuMTI1QzkuNTAyMDMgMTEuMTI1IDExLjEyNSA5LjUwMjAzIDExLjEyNSA3LjVDMTEuMTI1IDUuNDk3OTcgOS41MDIwMyAzLjg3NSA3LjUgMy44NzVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxqbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMSAxQzAuNDQ3NzE1IDEgMCAxLjQ0NzcyIDAgMlYxM0MwIDEzLjU1MjMgMC40NDc3MTUgMTQgMSAxNEgxNEMxNC41NTIzIDE0IDE1IDEzLjU1MjMgMTUgMTNWMkMxNSAxLjQ0NzcyIDE0LjU1MjMgMSAxNCAxSDFaTTcuNSAxMC42MjVDOS4yMjU4OSAxMC42MjUgMTAuNjI1IDkuMjI1ODkgMTAuNjI1IDcuNUMxMC42MjUgNS43NzQxMSA5LjIyNTg5IDQuMzc1IDcuNSA0LjM3NUM1Ljc3NDExIDQuMzc1IDQuMzc1IDUuNzc0MTEgNC4zNzUgNy41QzQuMzc1IDkuMjI1ODkgNS43NzQxMSAxMC42MjUgNy41IDEwLjYyNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE1uPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjI1IDcuNUMyLjI1IDcuMjIzODYgMi40NzM4NiA3IDIuNzUgN0gxMi4yNUMxMi41MjYxIDcgMTIuNzUgNy4yMjM4NiAxMi43NSA3LjVDMTIuNzUgNy43NzYxNCAxMi41MjYxIDggMTIuMjUgOEgyLjc1QzIuNDczODYgOCAyLjI1IDcuNzc2MTQgMi4yNSA3LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxrbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTk5MSAwLjg3Njg5MkMzLjg0MjIyIDAuODc2ODkyIDAuODc3MDc1IDMuODQyMDQgMC44NzcwNzUgNy40OTk3MkMwLjg3NzA3NSAxMS4xNTc0IDMuODQyMjIgMTQuMTIyNiA3LjQ5OTkxIDE0LjEyMjZDMTEuMTU3NiAxNC4xMjI2IDE0LjEyMjcgMTEuMTU3NCAxNC4xMjI3IDcuNDk5NzJDMTQuMTIyNyAzLjg0MjA0IDExLjE1NzYgMC44NzY4OTIgNy40OTk5MSAwLjg3Njg5MlpNMS44MjcwNyA3LjQ5OTcyQzEuODI3MDcgNC4zNjY3MSA0LjM2Njg5IDEuODI2ODkgNy40OTk5MSAxLjgyNjg5QzEwLjYzMjkgMS44MjY4OSAxMy4xNzI3IDQuMzY2NzEgMTMuMTcyNyA3LjQ5OTcyQzEzLjE3MjcgMTAuNjMyNyAxMC42MzI5IDEzLjE3MjYgNy40OTk5MSAxMy4xNzI2QzQuMzY2ODkgMTMuMTcyNiAxLjgyNzA3IDEwLjYzMjcgMS44MjcwNyA3LjQ5OTcyWk00LjUwMDAzIDdDNC4yMjM4OSA3IDQuMDAwMDMgNy4yMjM4NiA0LjAwMDAzIDcuNUM0LjAwMDAzIDcuNzc2MTQgNC4yMjM4OSA4IDQuNTAwMDMgOEgxMC41QzEwLjc3NjIgOCAxMSA3Ljc3NjE0IDExIDcuNUMxMSA3LjIyMzg2IDEwLjc3NjIgNyAxMC41IDdINC41MDAwM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFJuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yLjE0OTIxIDMuOTk5OTZDMi4xNDkyMSAyLjk3Nzc4IDIuOTc3ODQgMi4xNDkxNSA0LjAwMDAyIDIuMTQ5MTVDNS4wMjIxOSAyLjE0OTE1IDUuODUwODMgMi45Nzc3OCA1Ljg1MDgzIDMuOTk5OTZDNS44NTA4MyA1LjAyMjEzIDUuMDIyMTkgNS44NTA3NyA0LjAwMDAyIDUuODUwNzdDMi45Nzc4NCA1Ljg1MDc3IDIuMTQ5MjEgNS4wMjIxMyAyLjE0OTIxIDMuOTk5OTZaTTQuMDAwMDIgMS4yNDkxNUMyLjQ4MDc5IDEuMjQ5MTUgMS4yNDkyMSAyLjQ4MDczIDEuMjQ5MjEgMy45OTk5NkMxLjI0OTIxIDUuNTE5MTkgMi40ODA3OSA2Ljc1MDc3IDQuMDAwMDIgNi43NTA3N0M1LjUxOTI1IDYuNzUwNzcgNi43NTA4MyA1LjUxOTE5IDYuNzUwODMgMy45OTk5NkM2Ljc1MDgzIDIuNDgwNzMgNS41MTkyNSAxLjI0OTE1IDQuMDAwMDIgMS4yNDkxNVpNNS44MjAzNCAxMS4wMDAxTDIuNDk5OTggMTIuODM2OVY5LjE2MzMxTDUuODIwMzQgMTEuMDAwMVpNMi42Mzg4MyA4LjIxMTU5QzIuMTcyMjggNy45NTM1IDEuNTk5OTggOC4yOTA5MyAxLjU5OTk4IDguODI0MTFWMTMuMTc2MUMxLjU5OTk4IDEzLjcwOTMgMi4xNzIyOCAxNC4wNDY3IDIuNjM4ODMgMTMuNzg4Nkw2LjU3MjM1IDExLjYxMjZDNy4wNTM4OSAxMS4zNDYyIDcuMDUzODkgMTAuNjU0IDYuNTcyMzUgMTAuMzg3NkwyLjYzODgzIDguMjExNTlaTTguMzAwMDEgOS4wMDAwM0M4LjMwMDAxIDguNjEzNDMgOC42MTM0MSA4LjMwMDAzIDkuMDAwMDEgOC4zMDAwM0gxM0MxMy4zODY2IDguMzAwMDMgMTMuNyA4LjYxMzQzIDEzLjcgOS4wMDAwM1YxM0MxMy43IDEzLjM4NjYgMTMuMzg2NiAxMy43IDEzIDEzLjdIOS4wMDAwMUM4LjYxMzQxIDEzLjcgOC4zMDAwMSAxMy4zODY2IDguMzAwMDEgMTNWOS4wMDAwM1pNOS4yMDAwMSA5LjIwMDAzVjEyLjhIMTIuOFY5LjIwMDAzSDkuMjAwMDFaTTEzLjQ0MzIgMi4xOTMxMUMxMy42MTg5IDIuMDE3MzcgMTMuNjE4OSAxLjczMjQ1IDEzLjQ0MzIgMS41NTY3MUMxMy4yNjc1IDEuMzgwOTggMTIuOTgyNiAxLjM4MDk4IDEyLjgwNjggMS41NTY3MUwxMSAzLjM2MzUzTDkuMTkzMjEgMS41NTY3NEM5LjAxNzQ4IDEuMzgxIDguNzMyNTUgMS4zODEgOC41NTY4MiAxLjU1Njc0QzguMzgxMDggMS43MzI0NyA4LjM4MTA4IDIuMDE3NCA4LjU1NjgyIDIuMTkzMTNMMTAuMzYzNiAzLjk5OTkyTDguNTU2ODIgNS44MDY3MUM4LjM4MTA4IDUuOTgyNDUgOC4zODEwOCA2LjI2NzM3IDguNTU2ODIgNi40NDMxMUM4LjczMjU1IDYuNjE4ODUgOS4wMTc0OCA2LjYxODg1IDkuMTkzMjEgNi40NDMxMUwxMSA0LjYzNjMyTDEyLjgwNjggNi40NDMxNEMxMi45ODI2IDYuNjE4ODcgMTMuMjY3NSA2LjYxODg3IDEzLjQ0MzIgNi40NDMxNEMxMy42MTg5IDYuMjY3NCAxMy42MTg5IDUuOTgyNDcgMTMuNDQzMiA1LjgwNjc0TDExLjYzNjQgMy45OTk5MkwxMy40NDMyIDIuMTkzMTFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxQbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNS41IDNDNC42NzE1NyAzIDQgMy42NzE1NyA0IDQuNUM0IDUuMzI4NDMgNC42NzE1NyA2IDUuNSA2QzYuMzI4NDMgNiA3IDUuMzI4NDMgNyA0LjVDNyAzLjY3MTU3IDYuMzI4NDMgMyA1LjUgM1pNMyA1QzMuMDE2NzEgNSAzLjAzMzIzIDQuOTk5MTggMy4wNDk1MiA0Ljk5NzU4QzMuMjgwMjIgNi4xMzk5IDQuMjg5NjcgNyA1LjUgN0M2LjcxMDMzIDcgNy43MTk3OCA2LjEzOTkgNy45NTA0OCA0Ljk5NzU4QzcuOTY2NzcgNC45OTkxOCA3Ljk4MzI5IDUgOCA1SDEzLjVDMTMuNzc2MSA1IDE0IDQuNzc2MTQgMTQgNC41QzE0IDQuMjIzODYgMTMuNzc2MSA0IDEzLjUgNEg4QzcuOTgzMjkgNCA3Ljk2Njc3IDQuMDAwODIgNy45NTA0OCA0LjAwMjQyQzcuNzE5NzggMi44NjAwOSA2LjcxMDMzIDIgNS41IDJDNC4yODk2NyAyIDMuMjgwMjIgMi44NjAwOSAzLjA0OTUyIDQuMDAyNDJDMy4wMzMyMyA0LjAwMDgyIDMuMDE2NzEgNCAzIDRIMS41QzEuMjIzODYgNCAxIDQuMjIzODYgMSA0LjVDMSA0Ljc3NjE0IDEuMjIzODYgNSAxLjUgNUgzWk0xMS45NTA1IDEwLjk5NzZDMTEuNzE5OCAxMi4xMzk5IDEwLjcxMDMgMTMgOS41IDEzQzguMjg5NjcgMTMgNy4yODAyMiAxMi4xMzk5IDcuMDQ5NTIgMTAuOTk3NkM3LjAzMzIzIDEwLjk5OTIgNy4wMTY3MSAxMSA3IDExSDEuNUMxLjIyMzg2IDExIDEgMTAuNzc2MSAxIDEwLjVDMSAxMC4yMjM5IDEuMjIzODYgMTAgMS41IDEwSDdDNy4wMTY3MSAxMCA3LjAzMzIzIDEwLjAwMDggNy4wNDk1MiAxMC4wMDI0QzcuMjgwMjIgOC44NjAxIDguMjg5NjcgOCA5LjUgOEMxMC43MTAzIDggMTEuNzE5OCA4Ljg2MDEgMTEuOTUwNSAxMC4wMDI0QzExLjk2NjggMTAuMDAwOCAxMS45ODMzIDEwIDEyIDEwSDEzLjVDMTMuNzc2MSAxMCAxNCAxMC4yMjM5IDE0IDEwLjVDMTQgMTAuNzc2MSAxMy43NzYxIDExIDEzLjUgMTFIMTJDMTEuOTgzMyAxMSAxMS45NjY4IDEwLjk5OTIgMTEuOTUwNSAxMC45OTc2Wk04IDEwLjVDOCA5LjY3MTU3IDguNjcxNTcgOSA5LjUgOUMxMC4zMjg0IDkgMTEgOS42NzE1NyAxMSAxMC41QzExIDExLjMyODQgMTAuMzI4NCAxMiA5LjUgMTJDOC42NzE1NyAxMiA4IDExLjMyODQgOCAxMC41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sSW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUgMS41QzUgMS4yMjM4NiA0Ljc3NjE0IDEgNC41IDFDNC4yMjM4NiAxIDQgMS4yMjM4NiA0IDEuNUw0IDdDNCA3LjAxNjcxIDQuMDAwODIgNy4wMzMyMyA0LjAwMjQyIDcuMDQ5NTJDMi44NjAwOSA3LjI4MDIyIDIgOC4yODk2NyAyIDkuNUMyIDEwLjcxMDMgMi44NjAwOSAxMS43MTk4IDQuMDAyNDIgMTEuOTUwNUM0LjAwMDgyIDExLjk2NjggNCAxMS45ODMzIDQgMTJWMTMuNUM0IDEzLjc3NjEgNC4yMjM4NiAxNCA0LjUgMTRDNC43NzYxNCAxNCA1IDEzLjc3NjEgNSAxMy41VjEyQzUgMTEuOTgzMyA0Ljk5OTE4IDExLjk2NjggNC45OTc1OCAxMS45NTA1QzYuMTM5OSAxMS43MTk4IDcgMTAuNzEwMyA3IDkuNUM3IDguMjg5NjcgNi4xMzk5IDcuMjgwMjIgNC45OTc1OCA3LjA0OTUyQzQuOTk5MTggNy4wMzMyMyA1IDcuMDE2NzEgNSA3TDUgMS41Wk0xMSAxLjVDMTEgMS4yMjM4NiAxMC43NzYxIDEgMTAuNSAxQzEwLjIyMzkgMSAxMCAxLjIyMzg2IDEwIDEuNVYzQzEwIDMuMDE2NzEgMTAuMDAwOCAzLjAzMzIzIDEwLjAwMjQgMy4wNDk1MkM4Ljg2MDEgMy4yODAyMiA4IDQuMjg5NjcgOCA1LjVDOCA2LjcxMDMzIDguODYwMSA3LjcxOTc4IDEwLjAwMjQgNy45NTA0OEMxMC4wMDA4IDcuOTY2NzcgMTAgNy45ODMyOSAxMCA4VjEzLjVDMTAgMTMuNzc2MSAxMC4yMjM5IDE0IDEwLjUgMTRDMTAuNzc2MSAxNCAxMSAxMy43NzYxIDExIDEzLjVWOEMxMSA3Ljk4MzI5IDEwLjk5OTIgNy45NjY3NyAxMC45OTc2IDcuOTUwNDhDMTIuMTM5OSA3LjcxOTc4IDEzIDYuNzEwMzMgMTMgNS41QzEzIDQuMjg5NjcgMTIuMTM5OSAzLjI4MDIyIDEwLjk5NzYgMy4wNDk1MkMxMC45OTkyIDMuMDMzMjMgMTEgMy4wMTY3MSAxMSAzVjEuNVpNNC41IDhDMy42NzE1NyA4IDMgOC42NzE1NyAzIDkuNUMzIDEwLjMyODQgMy42NzE1NyAxMSA0LjUgMTFDNS4zMjg0MyAxMSA2IDEwLjMyODQgNiA5LjVDNiA4LjY3MTU3IDUuMzI4NDMgOCA0LjUgOFpNOSA1LjVDOSA0LjY3MTU3IDkuNjcxNTcgNCAxMC41IDRDMTEuMzI4NCA0IDEyIDQuNjcxNTcgMTIgNS41QzEyIDYuMzI4NDMgMTEuMzI4NCA3IDEwLjUgN0M5LjY3MTU3IDcgOSA2LjMyODQzIDkgNS41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sQW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuMjU5MjUgMy4xNjY2N0w0LjM3MDM2IDUuMzMzMzNWMUw3LjI1OTI1IDMuMTY2NjdaTTEgOC4yMjIyMkwzLjg4ODg5IDYuMDU1NTVMMSAzLjg4ODg5VjguMjIyMjJaTTEgMTRMMy44ODg4OSAxMS44MzMzTDEgOS42NjY2NlYxNFpNNy43NDA3MiA4LjIyMjIyTDEwLjYyOTYgNi4wNTU1NUw3Ljc0MDcyIDMuODg4ODlWOC4yMjIyMlpNMTQgMy4xNjY2N0wxMS4xMTExIDUuMzMzMzNWMUwxNCAzLjE2NjY3Wk0xMS4xMTExIDExLjExMTFMMTQgOC45NDQ0NEwxMS4xMTExIDYuNzc3NzdWMTEuMTExMVpNMy44ODg4OSAxMS4xMTExTDEgOC45NDQ0NEwzLjg4ODg5IDYuNzc3NzdWMTEuMTExMVpNNC4zNzAzNiA2LjA1NTU1TDcuMjU5MjUgOC4yMjIyMlYzLjg4ODg5TDQuMzcwMzYgNi4wNTU1NVpNMy44ODg4OSA1LjMzMzMzTDEgMy4xNjY2N0wzLjg4ODg5IDFWNS4zMzMzM1pNNy43NDA3MiAzLjE2NjY3TDEwLjYyOTYgNS4zMzMzM1YxTDcuNzQwNzIgMy4xNjY2N1pNMTQgOC4yMjIyMkwxMS4xMTExIDYuMDU1NTVMMTQgMy44ODg4OVY4LjIyMjIyWk0xMS4xMTExIDExLjgzMzNMMTQgMTRWOS42NjY2NkwxMS4xMTExIDExLjgzMzNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxUbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi44OTk5OCAwLjQ5OTk3NkMyLjg5OTk4IDAuMjc5MDYyIDIuNzIwODkgMC4wOTk5NzU2IDIuNDk5OTggMC4wOTk5NzU2QzIuMjc5MDYgMC4wOTk5NzU2IDIuMDk5OTggMC4yNzkwNjIgMi4wOTk5OCAwLjQ5OTk3NlYxLjA5OTk4SDEuNDk5OThDMS4yNzkwNiAxLjA5OTk4IDEuMDk5OTggMS4yNzkwNiAxLjA5OTk4IDEuNDk5OThDMS4wOTk5OCAxLjcyMDg5IDEuMjc5MDYgMS44OTk5OCAxLjQ5OTk4IDEuODk5OThIMi4wOTk5OFYyLjQ5OTk4QzIuMDk5OTggMi43MjA4OSAyLjI3OTA2IDIuODk5OTggMi40OTk5OCAyLjg5OTk4QzIuNzIwODkgMi44OTk5OCAyLjg5OTk4IDIuNzIwODkgMi44OTk5OCAyLjQ5OTk4VjEuODk5OThIMy40OTk5OEMzLjcyMDg5IDEuODk5OTggMy44OTk5OCAxLjcyMDg5IDMuODk5OTggMS40OTk5OEMzLjg5OTk4IDEuMjc5MDYgMy43MjA4OSAxLjA5OTk4IDMuNDk5OTggMS4wOTk5OEgyLjg5OTk4VjAuNDk5OTc2Wk01Ljg5OTk4IDMuNDk5OThDNS44OTk5OCAzLjI3OTA2IDUuNzIwODkgMy4wOTk5OCA1LjQ5OTk4IDMuMDk5OThDNS4yNzkwNiAzLjA5OTk4IDUuMDk5OTggMy4yNzkwNiA1LjA5OTk4IDMuNDk5OThWNC4wOTk5OEg0LjQ5OTk4QzQuMjc5MDYgNC4wOTk5OCA0LjA5OTk4IDQuMjc5MDYgNC4wOTk5OCA0LjQ5OTk4QzQuMDk5OTggNC43MjA4OSA0LjI3OTA2IDQuODk5OTggNC40OTk5OCA0Ljg5OTk4SDUuMDk5OThWNS40OTk5OEM1LjA5OTk4IDUuNzIwODkgNS4yNzkwNiA1Ljg5OTk4IDUuNDk5OTggNS44OTk5OEM1LjcyMDg5IDUuODk5OTggNS44OTk5OCA1LjcyMDg5IDUuODk5OTggNS40OTk5OFY0Ljg5OTk4SDYuNDk5OThDNi43MjA4OSA0Ljg5OTk4IDYuODk5OTggNC43MjA4OSA2Ljg5OTk4IDQuNDk5OThDNi44OTk5OCA0LjI3OTA2IDYuNzIwODkgNC4wOTk5OCA2LjQ5OTk4IDQuMDk5OThINS44OTk5OFYzLjQ5OTk4Wk0xLjg5OTk4IDYuNDk5OThDMS44OTk5OCA2LjI3OTA2IDEuNzIwODkgNi4wOTk5OCAxLjQ5OTk4IDYuMDk5OThDMS4yNzkwNiA2LjA5OTk4IDEuMDk5OTggNi4yNzkwNiAxLjA5OTk4IDYuNDk5OThWNy4wOTk5OEgwLjQ5OTk3NkMwLjI3OTA2MiA3LjA5OTk4IDAuMDk5OTc1NiA3LjI3OTA2IDAuMDk5OTc1NiA3LjQ5OTk4QzAuMDk5OTc1NiA3LjcyMDg5IDAuMjc5MDYyIDcuODk5OTggMC40OTk5NzYgNy44OTk5OEgxLjA5OTk4VjguNDk5OThDMS4wOTk5OCA4LjcyMDg5IDEuMjc5MDYgOC44OTk5NyAxLjQ5OTk4IDguODk5OTdDMS43MjA4OSA4Ljg5OTk3IDEuODk5OTggOC43MjA4OSAxLjg5OTk4IDguNDk5OThWNy44OTk5OEgyLjQ5OTk4QzIuNzIwODkgNy44OTk5OCAyLjg5OTk4IDcuNzIwODkgMi44OTk5OCA3LjQ5OTk4QzIuODk5OTggNy4yNzkwNiAyLjcyMDg5IDcuMDk5OTggMi40OTk5OCA3LjA5OTk4SDEuODk5OThWNi40OTk5OFpNOC41NDQwNiAwLjk4MTg0TDguMjQ2MTggMC45NDE1ODZDOC4wMzI3NSAwLjkxNzY3NiA3LjkwNjkyIDEuMTY1NSA4LjAyOTM2IDEuMzQxOTRDOC4xNzAxMyAxLjU0NDc5IDguMjk5ODEgMS43NTU5MiA4LjQxNzU0IDEuOTc0NDVDOC45MTg3OCAyLjkwNDg1IDkuMjAzMjIgMy45NjkzMiA5LjIwMzIyIDUuMTAwMjJDOS4yMDMyMiA4LjM3MjAxIDYuODIyNDcgMTEuMDg3OCAzLjY5ODg3IDExLjYwOTdDMy40NTczNiAxMS42NSAzLjIwOTg4IDExLjY3NzIgMi45NjAwOCAxMS42OTA2QzIuNzQ1NjMgMTEuNzAyIDIuNjI3MjkgMTEuOTUzNSAyLjc3NzIxIDEyLjEwNzJDMi44NDU1MSAxMi4xNzczIDIuOTE1MzUgMTIuMjQ1OCAyLjk4NjY3IDEyLjMxMjhMMy4wNTg4MyAxMi4zNzk1TDMuMzE4ODMgMTIuNjA0NUwzLjUwNjg0IDEyLjc1MzJMMy42Mjc5NiAxMi44NDMzTDMuODE0OTEgMTIuOTc0MkwzLjk5MDc5IDEzLjA4OUM0LjExMTc1IDEzLjE2NTEgNC4yMzUzNiAxMy4yMzc1IDQuMzYxNTcgMTMuMzA1OUw0LjYyNDk2IDEzLjQ0MTJMNC44ODU1MyAxMy41NjA3TDUuMTg4MzcgMTMuNjgyOEw1LjQzMTY5IDEzLjc2ODZDNS41NjU2NCAxMy44MTI4IDUuNzAxNDkgMTMuODUyOSA1LjgzODU3IDEzLjg4ODVDNS45NDI2MiAxMy45MTU1IDYuMDQ3NjcgMTMuOTQwMSA2LjE1NDA1IDEzLjk2MjJDNi4yNzk5MyAxMy45ODgzIDYuNDA3MTMgMTQuMDEwOSA2LjUzNTQ0IDE0LjAyOThMNi44NTI0MSAxNC4wNjg1TDcuMTE5MzQgMTQuMDg5MkM3LjI0NjM3IDE0LjA5NjUgNy4zNzQzNiAxNC4xMDAyIDcuNTAzMjIgMTQuMTAwMkMxMS4xNDgzIDE0LjEwMDIgMTQuMTAzMiAxMS4xNDUzIDE0LjEwMzIgNy41MDAyM0MxNC4xMDMyIDcuMjUwNDQgMTQuMDg5MyA3LjAwMzg5IDE0LjA2MjMgNi43NjEzMUwxNC4wMjU1IDYuNDg0MDdDMTMuOTkxIDYuMjYwODMgMTMuOTQ1MyA2LjA0MTI5IDEzLjg4OTEgNS44MjY0MkMxMy44MjEzIDUuNTY3MDkgMTMuNzM4MiA1LjMxMzk4IDEzLjY0MDkgNS4wNjg4MUwxMy41Mjc5IDQuODAxMzJMMTMuNDUwNyA0LjYzNTQyTDEzLjM3NjYgNC40ODY2NkMxMy4yMTc4IDQuMTc3NzMgMTMuMDM1MyAzLjg4Mjk1IDEyLjgzMTIgMy42MDQyM0wxMi42NzgyIDMuNDAzNTJMMTIuNDc5MyAzLjE2NDMyTDEyLjMxNTcgMi45ODM2MUwxMi4xOTYxIDIuODU5NTFMMTIuMDM1NSAyLjcwMjQ2TDExLjgxMzQgMi41MDE4NEwxMS40OTI1IDIuMjQxOTFMMTEuMjQ4MyAyLjA2NDk4TDEwLjk1NjIgMS44NzQ0NkwxMC42MzQ2IDEuNjg4OTRMMTAuMzA3MyAxLjUyMzc4TDEwLjE5MzggMS40NzE3Nkw5Ljk1NDg4IDEuMzcwNkw5LjY3NzkxIDEuMjY2OUw5LjQyNTY2IDEuMTg0Nkw5LjEwMDc1IDEuMDk0ODlMOC44MzU5OSAxLjAzNDg2TDguNTQ0MDYgMC45ODE4NFpNMTAuNDAzMiA1LjMwMDIzQzEwLjQwMzIgNC4yNzU4OCAxMC4yMDAyIDMuMjk4MjkgOS44MzI0NCAyLjQwNjA0QzExLjc2MjMgMy4yODk5NSAxMy4xMDMyIDUuMjM4NjIgMTMuMTAzMiA3LjUwMDIzQzEzLjEwMzIgMTAuNTkzIDEwLjU5NiAxMy4xMDAyIDcuNTAzMjIgMTMuMTAwMkM2LjYzNjQ2IDEzLjEwMDIgNS44MTU5NyAxMi45MDM2IDUuMDgzNTUgMTIuNTUyMkM2LjU0MTkgMTIuMDk0MSA3LjgxMDgxIDExLjIwODIgOC43NDMyMiAxMC4wNDE2QzguODc5NjMgMTAuMjI4NCA5LjEwMDI4IDEwLjM0OTcgOS4zNDkyOCAxMC4zNDk3QzkuNzYzNDkgMTAuMzQ5NyAxMC4wOTkzIDEwLjAxMzkgMTAuMDk5MyA5LjU5OTcxQzEwLjA5OTMgOS4yNDI1NiA5Ljg0OTY1IDguOTQzNzMgOS41MTUzNSA4Ljg2ODE2QzkuNTc3NDEgOC43NTE2NSA5LjYzNjUzIDguNjMzMzQgOS42OTI2IDguNTEzMzJDOS44ODM1OCA4LjYzMTYzIDEwLjEwODggOC42OTk5MyAxMC4zNSA4LjY5OTkzQzExLjA0MDMgOC42OTk5MyAxMS42IDguMTQwMjggMTEuNiA3LjQ0OTkzQzExLjYgNi43NTk3NiAxMS4wNDA2IDYuMjAwMjQgMTAuMzUwNSA2LjE5OTkzQzEwLjM4NTMgNS45MDQ4NyAxMC40MDMyIDUuNjA0NjQgMTAuNDAzMiA1LjMwMDIzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sSG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuODE4MTkgMC45MzE3OUM3LjY0MjQ1IDAuNzU2MDU0IDcuMzU3NTMgMC43NTYwNTQgNy4xODE3OSAwLjkzMTc5TDUuNDMxNzkgMi42ODE3OUM1LjI1NjA1IDIuODU3NTMgNS4yNTYwNSAzLjE0MjQ1IDUuNDMxNzkgMy4zMTgxOUM1LjYwNzUzIDMuNDkzOTIgNS44OTI0NSAzLjQ5MzkyIDYuMDY4MTkgMy4zMTgxOUw2Ljk5OTk5IDIuMzg2MzhWNS40OTk5OUM2Ljk5OTk5IDUuNzc2MTMgNy4yMjM4NSA1Ljk5OTk5IDcuNDk5OTkgNS45OTk5OUM3Ljc3NjEzIDUuOTk5OTkgNy45OTk5OSA1Ljc3NjEzIDcuOTk5OTkgNS40OTk5OVYyLjM4NjM4TDguOTMxNzkgMy4zMTgxOUM5LjEwNzUzIDMuNDkzOTIgOS4zOTI0NSAzLjQ5MzkyIDkuNTY4MTkgMy4zMTgxOUM5Ljc0MzkyIDMuMTQyNDUgOS43NDM5MiAyLjg1NzUzIDkuNTY4MTkgMi42ODE3OUw3LjgxODE5IDAuOTMxNzlaTTcuOTk5OTkgOS40OTk5OUM3Ljk5OTk5IDkuMjIzODUgNy43NzYxMyA4Ljk5OTk5IDcuNDk5OTkgOC45OTk5OUM3LjIyMzg1IDguOTk5OTkgNi45OTk5OSA5LjIyMzg1IDYuOTk5OTkgOS40OTk5OVYxMi42MTM2TDYuMDY4MTkgMTEuNjgxOEM1Ljg5MjQ1IDExLjUwNjEgNS42MDc1MyAxMS41MDYxIDUuNDMxNzkgMTEuNjgxOEM1LjI1NjA1IDExLjg1NzUgNS4yNTYwNSAxMi4xNDI0IDUuNDMxNzkgMTIuMzE4Mkw3LjE4MTc5IDE0LjA2ODJDNy4zNTc1MyAxNC4yNDM5IDcuNjQyNDUgMTQuMjQzOSA3LjgxODE5IDE0LjA2ODJMOS41NjgxOSAxMi4zMTgyQzkuNzQzOTIgMTIuMTQyNCA5Ljc0MzkyIDExLjg1NzUgOS41NjgxOSAxMS42ODE4QzkuMzkyNDUgMTEuNTA2MSA5LjEwNzUzIDExLjUwNjEgOC45MzE3OSAxMS42ODE4TDcuOTk5OTkgMTIuNjEzNlY5LjQ5OTk5Wk04Ljk5OTk5IDcuNDk5OTlDOC45OTk5OSA3LjIyMzg1IDkuMjIzODUgNi45OTk5OSA5LjQ5OTk5IDYuOTk5OTlIMTIuNjEzNkwxMS42ODE4IDYuMDY4MTlDMTEuNTA2MSA1Ljg5MjQ1IDExLjUwNjEgNS42MDc1MyAxMS42ODE4IDUuNDMxNzlDMTEuODU3NSA1LjI1NjA1IDEyLjE0MjQgNS4yNTYwNSAxMi4zMTgyIDUuNDMxNzlMMTQuMDY4MiA3LjE4MTc5QzE0LjI0MzkgNy4zNTc1MyAxNC4yNDM5IDcuNjQyNDUgMTQuMDY4MiA3LjgxODE5TDEyLjMxODIgOS41NjgxOUMxMi4xNDI0IDkuNzQzOTIgMTEuODU3NSA5Ljc0MzkyIDExLjY4MTggOS41NjgxOUMxMS41MDYxIDkuMzkyNDUgMTEuNTA2MSA5LjEwNzUzIDExLjY4MTggOC45MzE3OUwxMi42MTM2IDcuOTk5OTlIOS40OTk5OUM5LjIyMzg1IDcuOTk5OTkgOC45OTk5OSA3Ljc3NjEzIDguOTk5OTkgNy40OTk5OVpNMy4zMTgxOSA2LjA2ODE5TDIuMzg2MzggNi45OTk5OUg1LjQ5OTk5QzUuNzc2MTMgNi45OTk5OSA1Ljk5OTk5IDcuMjIzODUgNS45OTk5OSA3LjQ5OTk5QzUuOTk5OTkgNy43NzYxMyA1Ljc3NjEzIDcuOTk5OTkgNS40OTk5OSA3Ljk5OTk5SDIuMzg2MzhMMy4zMTgxOSA4LjkzMTc5QzMuNDkzOTIgOS4xMDc1MyAzLjQ5MzkyIDkuMzkyNDUgMy4zMTgxOSA5LjU2ODE5QzMuMTQyNDUgOS43NDM5MiAyLjg1NzUzIDkuNzQzOTIgMi42ODE3OSA5LjU2ODE5TDAuOTMxNzkgNy44MTgxOUMwLjc1NjA1NCA3LjY0MjQ1IDAuNzU2MDU0IDcuMzU3NTMgMC45MzE3OSA3LjE4MTc5TDIuNjgxNzkgNS40MzE3OUMyLjg1NzUzIDUuMjU2MDUgMy4xNDI0NSA1LjI1NjA1IDMuMzE4MTkgNS40MzE3OUMzLjQ5MzkyIDUuNjA3NTMgMy40OTM5MiA1Ljg5MjQ1IDMuMzE4MTkgNi4wNjgxOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEJuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjI1NzgxIDMuMTE2ODRDMy42Nzc3MSAzLjQ1Nzk2IDMuODM1MjMgMy40MzE5MyA0LjYyMzY5IDMuMzc5MzNMMTIuMDU3MSAyLjkzMjk5QzEyLjIxNDcgMi45MzI5OSAxMi4wODM2IDIuNzc1NzEgMTIuMDMxMSAyLjc0OTU3TDEwLjc5NjUgMS44NTcxMUMxMC41NiAxLjY3MzQ3IDEwLjI0NDggMS40NjMxNSA5LjY0MDgzIDEuNTE1NzZMMi40NDMwOCAyLjA0MDc0QzIuMTgwNTkgMi4wNjY3NyAyLjEyODE1IDIuMTk4MDEgMi4yMzI3IDIuMzAzMjJMMy4yNTc4MSAzLjExNjg0Wk0zLjcwNDEgNC44NDkxN1YxMi42NzA0QzMuNzA0MSAxMy4wOTA3IDMuOTE0MTUgMTMuMjQ4IDQuMzg2OTMgMTMuMjIyTDEyLjU1NjIgMTIuNzQ5M0MxMy4wMjkyIDEyLjcyMzMgMTMuMDgxOSAxMi40MzQxIDEzLjA4MTkgMTIuMDkyN1Y0LjMyMzk3QzEzLjA4MTkgMy45ODMwNiAxMi45NTA4IDMuNzk5MjEgMTIuNjYxMiAzLjgyNTQ1TDQuMTI0MjIgNC4zMjM5N0MzLjgwOTE4IDQuMzUwNDQgMy43MDQxIDQuNTA4MDMgMy43MDQxIDQuODQ5MTdaTTExLjc2ODggNS4yNjg3MkMxMS44MjEyIDUuNTA1MTggMTEuNzY4OCA1Ljc0MTQyIDExLjUzMTkgNS43Njc5OUwxMS4xMzgzIDUuODQ2NDFWMTEuNjIwNUMxMC43OTY1IDExLjgwNDIgMTAuNDgxNCAxMS45MDkyIDEwLjIxODggMTEuOTA5MkM5Ljc5ODM1IDExLjkwOTIgOS42OTMwNSAxMS43Nzc5IDkuMzc4MTIgMTEuMzg0NEw2LjgwMzQ1IDcuMzQyNDlWMTEuMjUzMkw3LjYxODE2IDExLjQzN0M3LjYxODE2IDExLjQzNyA3LjYxODE2IDExLjkwOTIgNi45NjA4NiAxMS45MDkyTDUuMTQ4NzkgMTIuMDE0M0M1LjA5NjE1IDExLjkwOTIgNS4xNDg3OSAxMS42NDcgNS4zMzI1OSAxMS41OTQ0TDUuODA1NDYgMTEuNDYzNFY2LjI5Mjc2TDUuMTQ4OSA2LjI0MDE1QzUuMDk2MjUgNi4wMDM2OSA1LjIyNzM5IDUuNjYyNzggNS41OTU0IDUuNjM2MzFMNy41MzkzNSA1LjUwNTI4TDEwLjIxODggOS41OTk4VjUuOTc3NjVMOS41MzU2NCA1Ljg5OTI0QzkuNDgzMiA1LjYxMDE4IDkuNjkzMDUgNS40MDAyOCA5Ljk1NTc2IDUuMzc0MjVMMTEuNzY4OCA1LjI2ODcyWk0xLjgzODc0IDEuMzMyMTJMOS4zMjU1NyAwLjc4MDc4N0MxMC4yNDUgMC43MDE5MzIgMTAuNDgxNSAwLjc1NDc1MyAxMS4wNTk0IDEuMTc0NTJMMTMuNDQ5MiAyLjg1NDI0QzEzLjg0MzYgMy4xNDMwOSAxMy45NzUgMy4yMjE3MyAxMy45NzUgMy41MzY2MVYxMi43NDkzQzEzLjk3NSAxMy4zMjY2IDEzLjc2NDcgMTMuNjY4MSAxMy4wMjkzIDEzLjcyMDNMNC4zMzQ5MiAxNC4yNDU0QzMuNzgyOTEgMTQuMjcxNyAzLjUyMDE5IDE0LjE5MyAzLjIzMTExIDEzLjgyNTNMMS40NzExNiAxMS41NDE5QzEuMTU1OCAxMS4xMjE2IDEuMDI0NjYgMTAuODA3MSAxLjAyNDY2IDEwLjQzOTJWMi4yNTA0MUMxLjAyNDY2IDEuNzc4MjUgMS4yMzUwNCAxLjM4NDQxIDEuODM4NzQgMS4zMzIxMlpcIixmaWxsOm59KSl9LFZuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUgMS41QzQuNSA0LjI1IDMgNi41IDMgOUMzIDExLjQ4NTMgNS4wMTQ3MiAxMy41IDcuNSAxMy41QzkuOTg1MjggMTMuNSAxMiAxMS40ODUzIDEyIDlDMTIgNi41IDEwLjUgNC4yNSA3LjUgMS41Wk0xMSA5QzExIDcuMTEyMDMgOS45NzMxNSA1LjI3MTk1IDcuNSAyLjg3MzU3QzUuMDI2ODYgNS4yNzE5NSA0IDcuMTEyMDMgNCA5QzQgMTAuOTMzIDUuNTY3IDEyLjUgNy41IDEyLjVDOS40MzMgMTIuNSAxMSAxMC45MzMgMTEgOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LERuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zLjQ5OTg1IDEuMTAwMDFDMy4yNzg5NCAxLjEwMDAxIDMuMDk5ODUgMS4yNzkwOSAzLjA5OTg1IDEuNTAwMDFDMy4wOTk4NSAxLjcyMDkyIDMuMjc4OTQgMS45MDAwMSAzLjQ5OTg1IDEuOTAwMDFIMTEuNDk5OUMxMS43MjA4IDEuOTAwMDEgMTEuODk5OSAxLjcyMDkyIDExLjg5OTkgMS41MDAwMUMxMS44OTk5IDEuMjc5MDkgMTEuNzIwOCAxLjEwMDAxIDExLjQ5OTkgMS4xMDAwMUgzLjQ5OTg1Wk00Ljk5OTk1IDQuMjUwMDFDNC45OTk5NSAzLjk3Mzg3IDQuNzc2MDkgMy43NTAwMSA0LjQ5OTk1IDMuNzUwMDFDNC4yMjM4MSAzLjc1MDAxIDMuOTk5OTUgMy45NzM4NyAzLjk5OTk1IDQuMjUwMDFWOS41NTAwMUMzLjk5OTk1IDExLjQ4MyA1LjU2Njk1IDEzLjA1IDcuNDk5OTUgMTMuMDVDOS40MzI5NSAxMy4wNSAxMSAxMS40ODMgMTEgOS41NTAwMVY0LjI1MDAxQzExIDMuOTczODcgMTAuNzc2MSAzLjc1MDAxIDEwLjUgMy43NTAwMUMxMC4yMjM4IDMuNzUwMDEgOS45OTk5NSAzLjk3Mzg3IDkuOTk5OTUgNC4yNTAwMVY5LjU1MDAxQzkuOTk5OTUgMTAuOTMwNyA4Ljg4MDY2IDEyLjA1IDcuNDk5OTUgMTIuMDVDNi4xMTkyNCAxMi4wNSA0Ljk5OTk1IDEwLjkzMDcgNC45OTk5NSA5LjU1MDAxVjQuMjUwMDFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxabj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMi44NTcxNCAySDEyLjE0MjlDMTIuNjE2MiAyIDEzIDIuMzgzNzYgMTMgMi44NTcxNFYxMi4xNDI5QzEzIDEyLjYxNjIgMTIuNjE2MiAxMyAxMi4xNDI5IDEzSDIuODU3MTRDMi4zODM3NiAxMyAyIDEyLjYxNjIgMiAxMi4xNDI5VjIuODU3MTRDMiAyLjM4Mzc2IDIuMzgzNzYgMiAyLjg1NzE0IDJaTTEgMi44NTcxNEMxIDEuODMxNDcgMS44MzE0NyAxIDIuODU3MTQgMUgxMi4xNDI5QzEzLjE2ODUgMSAxNCAxLjgzMTQ3IDE0IDIuODU3MTRWMTIuMTQyOUMxNCAxMy4xNjg1IDEzLjE2ODUgMTQgMTIuMTQyOSAxNEgyLjg1NzE0QzEuODMxNDcgMTQgMSAxMy4xNjg1IDEgMTIuMTQyOVYyLjg1NzE0Wk03LjQ5OTg4IDUuMDAwMTJDNy43NzYwMiA1LjAwMDEyIDcuOTk5ODggNC43NzYyNiA3Ljk5OTg4IDQuNTAwMTJDNy45OTk4OCA0LjIyMzk4IDcuNzc2MDIgNC4wMDAxMiA3LjQ5OTg4IDQuMDAwMTJDNy4yMjM3NCA0LjAwMDEyIDYuOTk5ODggNC4yMjM5OCA2Ljk5OTg4IDQuNTAwMTJDNi45OTk4OCA0Ljc3NjI2IDcuMjIzNzQgNS4wMDAxMiA3LjQ5OTg4IDUuMDAwMTJaTTQuNDk5ODggMTEuMDAwMUM0Ljc3NjAyIDExLjAwMDEgNC45OTk4OCAxMC43NzYzIDQuOTk5ODggMTAuNTAwMUM0Ljk5OTg4IDEwLjIyNCA0Ljc3NjAyIDEwLjAwMDEgNC40OTk4OCAxMC4wMDAxQzQuMjIzNzQgMTAuMDAwMSAzLjk5OTg4IDEwLjIyNCAzLjk5OTg4IDEwLjUwMDFDMy45OTk4OCAxMC43NzYzIDQuMjIzNzQgMTEuMDAwMSA0LjQ5OTg4IDExLjAwMDFaTTQuOTk5ODggNy41MDAxMkM0Ljk5OTg4IDcuNzc2MjYgNC43NzYwMiA4LjAwMDEyIDQuNDk5ODggOC4wMDAxMkM0LjIyMzc0IDguMDAwMTIgMy45OTk4OCA3Ljc3NjI2IDMuOTk5ODggNy41MDAxMkMzLjk5OTg4IDcuMjIzOTggNC4yMjM3NCA3LjAwMDEyIDQuNDk5ODggNy4wMDAxMkM0Ljc3NjAyIDcuMDAwMTIgNC45OTk4OCA3LjIyMzk4IDQuOTk5ODggNy41MDAxMlpNNC40OTk4OCA1LjAwMDEyQzQuNzc2MDIgNS4wMDAxMiA0Ljk5OTg4IDQuNzc2MjYgNC45OTk4OCA0LjUwMDEyQzQuOTk5ODggNC4yMjM5OCA0Ljc3NjAyIDQuMDAwMTIgNC40OTk4OCA0LjAwMDEyQzQuMjIzNzQgNC4wMDAxMiAzLjk5OTg4IDQuMjIzOTggMy45OTk4OCA0LjUwMDEyQzMuOTk5ODggNC43NzYyNiA0LjIyMzc0IDUuMDAwMTIgNC40OTk4OCA1LjAwMDEyWk0xMC45OTk5IDEwLjUwMDFDMTAuOTk5OSAxMC43NzYzIDEwLjc3NiAxMS4wMDAxIDEwLjQ5OTkgMTEuMDAwMUMxMC4yMjM3IDExLjAwMDEgOS45OTk4OCAxMC43NzYzIDkuOTk5ODggMTAuNTAwMUM5Ljk5OTg4IDEwLjIyNCAxMC4yMjM3IDEwLjAwMDEgMTAuNDk5OSAxMC4wMDAxQzEwLjc3NiAxMC4wMDAxIDEwLjk5OTkgMTAuMjI0IDEwLjk5OTkgMTAuNTAwMVpNMTAuNDk5OSA4LjAwMDEyQzEwLjc3NiA4LjAwMDEyIDEwLjk5OTkgNy43NzYyNiAxMC45OTk5IDcuNTAwMTJDMTAuOTk5OSA3LjIyMzk4IDEwLjc3NiA3LjAwMDEyIDEwLjQ5OTkgNy4wMDAxMkMxMC4yMjM3IDcuMDAwMTIgOS45OTk4OCA3LjIyMzk4IDkuOTk5ODggNy41MDAxMkM5Ljk5OTg4IDcuNzc2MjYgMTAuMjIzNyA4LjAwMDEyIDEwLjQ5OTkgOC4wMDAxMlpNMTAuOTk5OSA0LjUwMDEyQzEwLjk5OTkgNC43NzYyNiAxMC43NzYgNS4wMDAxMiAxMC40OTk5IDUuMDAwMTJDMTAuMjIzNyA1LjAwMDEyIDkuOTk5ODggNC43NzYyNiA5Ljk5OTg4IDQuNTAwMTJDOS45OTk4OCA0LjIyMzk4IDEwLjIyMzcgNC4wMDAxMiAxMC40OTk5IDQuMDAwMTJDMTAuNzc2IDQuMDAwMTIgMTAuOTk5OSA0LjIyMzk4IDEwLjk5OTkgNC41MDAxMlpNNy40OTk4OCAxMS4wMDAxQzcuNzc2MDIgMTEuMDAwMSA3Ljk5OTg4IDEwLjc3NjMgNy45OTk4OCAxMC41MDAxQzcuOTk5ODggMTAuMjI0IDcuNzc2MDIgMTAuMDAwMSA3LjQ5OTg4IDEwLjAwMDFDNy4yMjM3NCAxMC4wMDAxIDYuOTk5ODggMTAuMjI0IDYuOTk5ODggMTAuNTAwMUM2Ljk5OTg4IDEwLjc3NjMgNy4yMjM3NCAxMS4wMDAxIDcuNDk5ODggMTEuMDAwMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LCRuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjIwMzA3IDEuMDQzMTJDMS4wMDQ4MSAwLjk1NDk5OCAwLjc3MjM0IDEuMDA0OCAwLjYyNzU3NyAxLjE2NjQxQzAuNDgyODEzIDEuMzI4MDIgMC40NTg3OTQgMS41NjQ1NSAwLjU2ODExNiAxLjc1MTk2TDMuOTIxMTUgNy41MDAwMkwwLjU2ODExNiAxMy4yNDgxQzAuNDU4Nzk0IDEzLjQzNTUgMC40ODI4MTMgMTMuNjcyIDAuNjI3NTc3IDEzLjgzMzZDMC43NzIzNCAxMy45OTUyIDEuMDA0ODEgMTQuMDQ1IDEuMjAzMDcgMTMuOTU2OUwxNC43MDMxIDcuOTU2OTJDMTQuODgzNiA3Ljg3NjY3IDE1IDcuNjk3NjEgMTUgNy41MDAwMkMxNSA3LjMwMjQyIDE0Ljg4MzYgNy4xMjMzNiAxNC43MDMxIDcuMDQzMTFMMS4yMDMwNyAxLjA0MzEyWk00Ljg0NTUyIDcuMTAwMDJMMi4yMTIzNCAyLjU4NkwxMy4yNjg5IDcuNTAwMDJMMi4yMTIzNCAxMi40MTRMNC44NDU1MiA3LjkwMDAySDlDOS4yMjA5MSA3LjkwMDAyIDkuNCA3LjcyMDk0IDkuNCA3LjUwMDAyQzkuNCA3LjI3OTExIDkuMjIwOTEgNy4xMDAwMiA5IDcuMTAwMDJINC44NDU1MlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE5uPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02LjA0OTk1IDIuNzQ5OThDNi4wNDk5NSAyLjQ0NjIzIDUuODAzNzEgMi4xOTk5OCA1LjQ5OTk1IDIuMTk5OThDNS4xOTYxOSAyLjE5OTk4IDQuOTQ5OTUgMi40NDYyMyA0Ljk0OTk1IDIuNzQ5OThWMTIuMjVDNC45NDk5NSAxMi41NTM3IDUuMTk2MTkgMTIuOCA1LjQ5OTk1IDEyLjhDNS44MDM3MSAxMi44IDYuMDQ5OTUgMTIuNTUzNyA2LjA0OTk1IDEyLjI1VjIuNzQ5OThaTTEwLjA1IDIuNzQ5OThDMTAuMDUgMi40NDYyMyA5LjgwMzcxIDIuMTk5OTggOS40OTk5NSAyLjE5OTk4QzkuMTk2MTkgMi4xOTk5OCA4Ljk0OTk1IDIuNDQ2MjMgOC45NDk5NSAyLjc0OTk4VjEyLjI1QzguOTQ5OTUgMTIuNTUzNyA5LjE5NjE5IDEyLjggOS40OTk5NSAxMi44QzkuODAzNzEgMTIuOCAxMC4wNSAxMi41NTM3IDEwLjA1IDEyLjI1VjIuNzQ5OThaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxGbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTEuODUzNiAxLjE0NjQ1QzExLjY1ODMgMC45NTExODQgMTEuMzQxNyAwLjk1MTE4NCAxMS4xNDY1IDEuMTQ2NDVMMy43MTQ1NSA4LjU3ODM2QzMuNjI0NTkgOC42NjgzMiAzLjU1MjYzIDguNzc0NjEgMy41MDI1MSA4Ljg5MTU1TDIuMDQwNDQgMTIuMzAzQzEuOTU5OSAxMi40OTEgMi4wMDE4OSAxMi43MDkgMi4xNDY0NiAxMi44NTM2QzIuMjkxMDMgMTIuOTk4MSAyLjUwOTA1IDEzLjA0MDEgMi42OTY5NyAxMi45NTk2TDYuMTA4NDcgMTEuNDk3NUM2LjIyNTQgMTEuNDQ3NCA2LjMzMTcgMTEuMzc1NCA2LjQyMTY2IDExLjI4NTVMMTMuODUzNiAzLjg1MzU1QzE0LjA0ODggMy42NTgyOSAxNC4wNDg4IDMuMzQxNzEgMTMuODUzNiAzLjE0NjQ1TDExLjg1MzYgMS4xNDY0NVpNNC40MjE2NiA5LjI4NTQ3TDExLjUgMi4yMDcxMUwxMi43OTI5IDMuNUw1LjcxNDU1IDEwLjU3ODRMNC4yMTkyNCAxMS4yMTkyTDMuNzgwODEgMTAuNzgwOEw0LjQyMTY2IDkuMjg1NDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxVbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTIuMTQ2NCAxLjE0NjQ1QzEyLjM0MTcgMC45NTExODQgMTIuNjU4MyAwLjk1MTE4NCAxMi44NTM1IDEuMTQ2NDVMMTQuODUzNSAzLjE0NjQ1QzE1LjA0ODggMy4zNDE3MSAxNS4wNDg4IDMuNjU4MjkgMTQuODUzNSAzLjg1MzU1TDEwLjkxMDkgNy43OTYxOEMxMC44MzQ5IDcuODcyMTggMTAuNzQ3MSA3LjkzNTQzIDEwLjY1MSA3Ljk4MzVMNi43MjM1OSA5Ljk0NzIxQzYuNTMxMDkgMTAuMDQzNSA2LjI5ODYxIDEwLjAwNTcgNi4xNDY0MyA5Ljg1MzU1QzUuOTk0MjUgOS43MDEzNyA1Ljk1NjUyIDkuNDY4ODkgNi4wNTI3NyA5LjI3NjM5TDguMDE2NDggNS4zNDg5N0M4LjA2NDU1IDUuMjUyODMgOC4xMjc4IDUuMTY1MDcgOC4yMDM4IDUuMDg5MDdMMTIuMTQ2NCAxLjE0NjQ1Wk0xMi41IDIuMjA3MTFMOC45MTA5MSA1Ljc5NjE4TDcuODcyNjYgNy44NzI2N0w4LjEyNzMxIDguMTI3MzJMMTAuMjAzOCA3LjA4OTA3TDEzLjc5MjkgMy41TDEyLjUgMi4yMDcxMVpNOS45OTk5OCAyTDguOTk5OTggM0g0LjlDNC40NzE3MSAzIDQuMTgwNTYgMy4wMDAzOSAzLjk1NTUyIDMuMDE4NzdDMy43MzYzMSAzLjAzNjY4IDMuNjI0MjEgMy4wNjkxNSAzLjU0NjAxIDMuMTA4OTlDMy4zNTc4NSAzLjIwNDg3IDMuMjA0ODcgMy4zNTc4NSAzLjEwODk5IDMuNTQ2MDFDMy4wNjkxNSAzLjYyNDIxIDMuMDM2NjkgMy43MzYzMSAzLjAxODc4IDMuOTU1NTJDMy4wMDAzOSA0LjE4MDU2IDMgNC40NzE3MSAzIDQuOVYxMS4xQzMgMTEuNTI4MyAzLjAwMDM5IDExLjgxOTQgMy4wMTg3OCAxMi4wNDQ1QzMuMDM2NjkgMTIuMjYzNyAzLjA2OTE1IDEyLjM3NTggMy4xMDg5OSAxMi40NTRDMy4yMDQ4NyAxMi42NDIyIDMuMzU3ODUgMTIuNzk1MSAzLjU0NjAxIDEyLjg5MUMzLjYyNDIxIDEyLjkzMDkgMy43MzYzMSAxMi45NjMzIDMuOTU1NTIgMTIuOTgxMkM0LjE4MDU2IDEyLjk5OTYgNC40NzE3MSAxMyA0LjkgMTNIMTEuMUMxMS41MjgzIDEzIDExLjgxOTQgMTIuOTk5NiAxMi4wNDQ1IDEyLjk4MTJDMTIuMjYzNyAxMi45NjMzIDEyLjM3NTggMTIuOTMwOSAxMi40NTQgMTIuODkxQzEyLjY0MjIgMTIuNzk1MSAxMi43OTUxIDEyLjY0MjIgMTIuODkxIDEyLjQ1NEMxMi45MzA5IDEyLjM3NTggMTIuOTYzMyAxMi4yNjM3IDEyLjk4MTIgMTIuMDQ0NUMxMi45OTk2IDExLjgxOTQgMTMgMTEuNTI4MyAxMyAxMS4xVjYuOTk5OThMMTQgNS45OTk5OFYxMS4xVjExLjEyMDdDMTQgMTEuNTIzMSAxNCAxMS44NTUzIDEzLjk3NzkgMTIuMTI1OUMxMy45NTQ5IDEyLjQwNyAxMy45MDU3IDEyLjY2NTMgMTMuNzgyIDEyLjkwOEMxMy41OTAzIDEzLjI4NDMgMTMuMjg0MyAxMy41OTAzIDEyLjkwOCAxMy43ODJDMTIuNjY1MyAxMy45MDU3IDEyLjQwNyAxMy45NTQ5IDEyLjEyNTkgMTMuOTc3OUMxMS44NTUzIDE0IDExLjUyMzEgMTQgMTEuMTIwNyAxNEgxMS4xSDQuOUg0Ljg3OTM0QzQuNDc2ODYgMTQgNC4xNDQ2OCAxNCAzLjg3NDA5IDEzLjk3NzlDMy41OTMwNCAxMy45NTQ5IDMuMzM0NjkgMTMuOTA1NyAzLjA5MjAyIDEzLjc4MkMyLjcxNTcgMTMuNTkwMyAyLjQwOTczIDEzLjI4NDMgMi4yMTc5OSAxMi45MDhDMi4wOTQzNCAxMi42NjUzIDIuMDQ1MDYgMTIuNDA3IDIuMDIyMSAxMi4xMjU5QzEuOTk5OTkgMTEuODU1MyAxLjk5OTk5IDExLjUyMzEgMiAxMS4xMjA3VjExLjEyMDZWMTEuMVY0LjlWNC44NzkzNVY0Ljg3OTMyVjQuODc5MzFDMS45OTk5OSA0LjQ3Njg1IDEuOTk5OTkgNC4xNDQ2OCAyLjAyMjEgMy44NzQwOUMyLjA0NTA2IDMuNTkzMDQgMi4wOTQzNCAzLjMzNDY5IDIuMjE3OTkgMy4wOTIwMkMyLjQwOTczIDIuNzE1NjkgMi43MTU3IDIuNDA5NzMgMy4wOTIwMiAyLjIxNzk5QzMuMzM0NjkgMi4wOTQzNCAzLjU5MzA0IDIuMDQ1MDYgMy44NzQwOSAyLjAyMjFDNC4xNDQ2OCAxLjk5OTk5IDQuNDc2ODUgMS45OTk5OSA0Ljg3OTMyIDJINC44NzkzNUg0LjlIOS45OTk5OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFduPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUgMC44NzVDNS40OTc5NyAwLjg3NSAzLjg3NSAyLjQ5Nzk3IDMuODc1IDQuNUMzLjg3NSA2LjE1Mjg4IDQuOTgxMjQgNy41NDczOCA2LjQ5MzczIDcuOTgzNTFDNS4yOTk3IDguMTI5MDEgNC4yNzU1NyA4LjU1MTM0IDMuNTA0MDcgOS4zMTE2N0MyLjUyMjE2IDEwLjI3OTQgMi4wMjUwMiAxMS43MiAyLjAyNTAyIDEzLjU5OTlDMi4wMjUwMiAxMy44NjIzIDIuMjM3NjkgMTQuMDc0OSAyLjUwMDAyIDE0LjA3NDlDMi43NjIzNiAxNC4wNzQ5IDIuOTc1MDIgMTMuODYyMyAyLjk3NTAyIDEzLjU5OTlDMi45NzUwMiAxMS44Nzk5IDMuNDI3ODYgMTAuNzIwNiA0LjE3MDkxIDkuOTg4M0M0LjkxNTM2IDkuMjU0NjMgNi4wMjY3NCA4Ljg3NDk5IDcuNDk5OTUgOC44NzQ5OUM4Ljk3MzE3IDguODc0OTkgMTAuMDg0NiA5LjI1NDYzIDEwLjgyOTEgOS45ODgzMUMxMS41NzIxIDEwLjcyMDYgMTIuMDI1IDExLjg3OTkgMTIuMDI1IDEzLjU5OTlDMTIuMDI1IDEzLjg2MjMgMTIuMjM3NiAxNC4wNzQ5IDEyLjUgMTQuMDc0OUMxMi43NjIzIDE0LjA3NSAxMi45NzUgMTMuODYyMyAxMi45NzUgMTMuNkMxMi45NzUgMTEuNzIgMTIuNDc3OCAxMC4yNzk0IDExLjQ5NTkgOS4zMTE2NkMxMC43MjQ0IDguNTUxMzUgOS43MDAyNSA4LjEyOTAzIDguNTA2MjUgNy45ODM1MkMxMC4wMTg3IDcuNTQ3NCAxMS4xMjUgNi4xNTI4OSAxMS4xMjUgNC41QzExLjEyNSAyLjQ5Nzk3IDkuNTAyMDMgMC44NzUgNy41IDAuODc1Wk00LjgyNSA0LjVDNC44MjUgMy4wMjI2NCA2LjAyMjY0IDEuODI1IDcuNSAxLjgyNUM4Ljk3NzM2IDEuODI1IDEwLjE3NSAzLjAyMjY0IDEwLjE3NSA0LjVDMTAuMTc1IDUuOTc3MzYgOC45NzczNiA3LjE3NSA3LjUgNy4xNzVDNi4wMjI2NCA3LjE3NSA0LjgyNSA1Ljk3NzM2IDQuODI1IDQuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHpuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjg1MDAxIDcuNTAwNDNDMS44NTAwMSA0LjM3OTc1IDQuMzc5NjMgMS44NTAwMSA3LjUwMDAxIDEuODUwMDFDMTAuNjIwNCAxLjg1MDAxIDEzLjE1IDQuMzc5NzUgMTMuMTUgNy41MDA0M0MxMy4xNSAxMC42MjExIDEwLjYyMDQgMTMuMTUwOSA3LjUwMDAxIDEzLjE1MDlDNC4zNzk2MyAxMy4xNTA5IDEuODUwMDEgMTAuNjIxMSAxLjg1MDAxIDcuNTAwNDNaTTcuNTAwMDEgMC44NTAwMDZDMy44MjcyOCAwLjg1MDAwNiAwLjg1MDAwNiAzLjgyNzUzIDAuODUwMDA2IDcuNTAwNDNDMC44NTAwMDYgMTEuMTczMyAzLjgyNzI4IDE0LjE1MDkgNy41MDAwMSAxNC4xNTA5QzExLjE3MjcgMTQuMTUwOSAxNC4xNSAxMS4xNzMzIDE0LjE1IDcuNTAwNDNDMTQuMTUgMy44Mjc1MyAxMS4xNzI3IDAuODUwMDA2IDcuNTAwMDEgMC44NTAwMDZaTTcuMDAwMDEgOC4wMDAwMVYzLjEyODExQzcuMTY0MTEgMy4xMDk1NCA3LjMzMDk0IDMuMTAwMDEgNy41MDAwMSAzLjEwMDAxQzkuOTMwMDYgMy4xMDAwMSAxMS45IDUuMDcwMTQgMTEuOSA3LjUwMDQzQzExLjkgNy42NjkzNSAxMS44OTA1IDcuODM2MDQgMTEuODcyIDguMDAwMDFINy4wMDAwMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEduPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0zIDUuNUMzIDcuOTgzIDQuOTkxNjkgOSA3IDlWMTIuNUM3IDEyLjc3NjEgNy4yMjM4NiAxMyA3LjUgMTNDNy43NzYxNCAxMyA4IDEyLjc3NjEgOCAxMi41VjlWMy4xSDlWMTIuNUM5IDEyLjc3NjEgOS4yMjM4NiAxMyA5LjUgMTNDOS43NzYxNCAxMyAxMCAxMi43NzYxIDEwIDEyLjVWMy4xSDExLjVDMTEuODAzOCAzLjEgMTIuMDUgMi44NTM3NiAxMi4wNSAyLjU1QzEyLjA1IDIuMjQ2MjQgMTEuODAzOCAyIDExLjUgMkg5LjVIOEg3LjVIN0M0Ljk5MTY5IDIgMyAzLjAxNyAzIDUuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHFuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMy41IDEzLjk1QzEzLjc0ODUgMTMuOTUgMTMuOTUgMTMuNzQ4NSAxMy45NSAxMy41QzEzLjk1IDEzLjI1MTQgMTMuNzQ4NSAxMy4wNSAxMy41IDEzLjA1TDEuNDk5OTUgMTMuMDVDMS4yNTE0MiAxMy4wNSAxLjA0OTk1IDEzLjI1MTQgMS4wNDk5NSAxMy41QzEuMDQ5OTUgMTMuNzQ4NSAxLjI1MTQyIDEzLjk1IDEuNDk5OTUgMTMuOTVMMTMuNSAxMy45NVpNMTEuMDY4MSA3LjU2ODNDMTEuMjQzOSA3LjM5MjU3IDExLjI0MzkgNy4xMDc2NCAxMS4wNjgxIDYuOTMxOTFDMTAuODkyNCA2Ljc1NjE3IDEwLjYwNzUgNi43NTYxNyAxMC40MzE3IDYuOTMxOTFMNy45NDk5MyA5LjQxMzcxTDcuOTQ5OTMgMS40OTk5OEM3Ljk0OTkzIDEuMjUxNDYgNy43NDg0NiAxLjA0OTk4IDcuNDk5OTMgMS4wNDk5OEM3LjI1MTQgMS4wNDk5OCA3LjA0OTkzIDEuMjUxNDYgNy4wNDk5MyAxLjQ5OTk4TDcuMDQ5OTMgOS40MTM3MUw0LjU2ODEzIDYuOTMxOTFDNC4zOTIzOSA2Ljc1NjE3IDQuMTA3NDYgNi43NTYxNyAzLjkzMTczIDYuOTMxOTFDMy43NTU5OSA3LjEwNzY0IDMuNzU1OTkgNy4zOTI1NyAzLjkzMTczIDcuNTY4M0w3LjE4MTczIDEwLjgxODNDNy4zNTc0NiAxMC45OTQgNy42NDIzOSAxMC45OTQgNy44MTgxMiAxMC44MTgzTDExLjA2ODEgNy41NjgzWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sWW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuMDUwMDUgMTMuNUMyLjA1MDA1IDEzLjc0ODUgMi4yNTE1MiAxMy45NSAyLjUwMDA1IDEzLjk1QzIuNzQ4NTggMTMuOTUgMi45NTAwNSAxMy43NDg1IDIuOTUwMDUgMTMuNUwyLjk1MDA1IDEuNDk5OTVDMi45NTAwNSAxLjI1MTQyIDIuNzQ4NTggMS4wNDk5NSAyLjUwMDA1IDEuMDQ5OTVDMi4yNTE1MiAxLjA0OTk1IDIuMDUwMDUgMS4yNTE0MiAyLjA1MDA1IDEuNDk5OTVMMi4wNTAwNSAxMy41Wk04LjQzMTcgMTEuMDY4MUM4LjYwNzQzIDExLjI0MzkgOC44OTIzNiAxMS4yNDM5IDkuMDY4MDkgMTEuMDY4MUM5LjI0MzgzIDEwLjg5MjQgOS4yNDM4MyAxMC42MDc1IDkuMDY4MDkgMTAuNDMxN0w2LjU4NjI5IDcuOTQ5OTNMMTQuNSA3Ljk0OTkzQzE0Ljc0ODUgNy45NDk5MyAxNC45NSA3Ljc0ODQ2IDE0Ljk1IDcuNDk5OTNDMTQuOTUgNy4yNTE0IDE0Ljc0ODUgNy4wNDk5MyAxNC41IDcuMDQ5OTNMNi41ODYyOSA3LjA0OTkzTDkuMDY4MDkgNC41NjgxM0M5LjI0MzgzIDQuMzkyMzkgOS4yNDM4MyA0LjEwNzQ2IDkuMDY4MDkgMy45MzE3M0M4Ljg5MjM2IDMuNzU1OTkgOC42MDc0MyAzLjc1NTk5IDguNDMxNyAzLjkzMTczTDUuMTgxNyA3LjE4MTczQzUuMDA1OTYgNy4zNTc0NiA1LjAwNTk2IDcuNjQyMzkgNS4xODE3IDcuODE4MTJMOC40MzE3IDExLjA2ODFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxLbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTIuOTUgMS41MDAwNUMxMi45NSAxLjI1MTUyIDEyLjc0ODUgMS4wNTAwNSAxMi41IDEuMDUwMDVDMTIuMjUxNCAxLjA1MDA1IDEyLjA1IDEuMjUxNTIgMTIuMDUgMS41MDAwNUwxMi4wNSAxMy41QzEyLjA1IDEzLjc0ODYgMTIuMjUxNCAxMy45NSAxMi41IDEzLjk1QzEyLjc0ODUgMTMuOTUgMTIuOTUgMTMuNzQ4NiAxMi45NSAxMy41TDEyLjk1IDEuNTAwMDVaTTYuNTY4MyAzLjkzMTg4QzYuMzkyNTcgMy43NTYxNCA2LjEwNzY0IDMuNzU2MTQgNS45MzE5MSAzLjkzMTg4QzUuNzU2MTcgNC4xMDc2MSA1Ljc1NjE3IDQuMzkyNTQgNS45MzE5MSA0LjU2ODI3TDguNDEzNzEgNy4wNTAwN0wwLjQ5OTk4NCA3LjA1MDA3QzAuMjUxNDU2IDcuMDUwMDcgMC4wNDk5ODQ3IDcuMjUxNTUgMC4wNDk5ODQ3IDcuNTAwMDdDMC4wNDk5ODQ2IDcuNzQ4NiAwLjI1MTQ1NyA3Ljk1MDA3IDAuNDk5OTg0IDcuOTUwMDdMOC40MTM3MSA3Ljk1MDA3TDUuOTMxOTEgMTAuNDMxOUM1Ljc1NjE3IDEwLjYwNzYgNS43NTYxNyAxMC44OTI1IDUuOTMxOTEgMTEuMDY4M0M2LjEwNzY0IDExLjI0NCA2LjM5MjU3IDExLjI0NCA2LjU2ODMxIDExLjA2ODNMOS44MTgzIDcuODE4MjdDOS45OTQwNCA3LjY0MjU0IDkuOTk0MDQgNy4zNTc2MSA5LjgxODMgNy4xODE4OEw2LjU2ODMgMy45MzE4OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFhuPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjUwMDA1IDEuMDUwMDVDMS4yNTE1MiAxLjA1MDA1IDEuMDUwMDUgMS4yNTE1MiAxLjA1MDA1IDEuNTAwMDVDMS4wNTAwNSAxLjc0ODU4IDEuMjUxNTIgMS45NTAwNSAxLjUwMDA1IDEuOTUwMDVMMTMuNSAxLjk1MDA1QzEzLjc0ODYgMS45NTAwNSAxMy45NSAxLjc0ODU4IDEzLjk1IDEuNTAwMDVDMTMuOTUgMS4yNTE1MiAxMy43NDg2IDEuMDUwMDUgMTMuNSAxLjA1MDA1SDEuNTAwMDVaTTMuOTMxODggNy40MzE2OUMzLjc1NjE0IDcuNjA3NDMgMy43NTYxNCA3Ljg5MjM2IDMuOTMxODggOC4wNjgwOUM0LjEwNzYxIDguMjQzODMgNC4zOTI1NCA4LjI0MzgzIDQuNTY4MjcgOC4wNjgwOUw3LjA1MDA3IDUuNTg2MjlWMTMuNUM3LjA1MDA3IDEzLjc0ODUgNy4yNTE1NSAxMy45NSA3LjUwMDA3IDEzLjk1QzcuNzQ4NiAxMy45NSA3Ljk1MDA3IDEzLjc0ODUgNy45NTAwNyAxMy41TDcuOTUwMDcgNS41ODYyOUwxMC40MzE5IDguMDY4MDlDMTAuNjA3NiA4LjI0MzgzIDEwLjg5MjUgOC4yNDM4MyAxMS4wNjgzIDguMDY4MDlDMTEuMjQ0IDcuODkyMzUgMTEuMjQ0IDcuNjA3NDMgMTEuMDY4MyA3LjQzMTY5TDcuODE4MjcgNC4xODE2OUM3LjY0MjU0IDQuMDA1OTYgNy4zNTc2MSA0LjAwNTk2IDcuMTgxODggNC4xODE2OUwzLjkzMTg4IDcuNDMxNjlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxKbj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy4yNDE4MiAyLjMyMTgxQzMuMzkxOSAyLjIzMTMyIDMuNTc4NCAyLjIyNjAxIDMuNzMzMzggMi4zMDc4MUwxMi43MzM0IDcuMDU3ODFDMTIuODk3NCA3LjE0NDM2IDEzIDcuMzE0NTcgMTMgNy41QzEzIDcuNjg1NDMgMTIuODk3NCA3Ljg1NTY0IDEyLjczMzQgNy45NDIxOUwzLjczMzM4IDEyLjY5MjJDMy41Nzg0IDEyLjc3NCAzLjM5MTkgMTIuNzY4NyAzLjI0MTgyIDEyLjY3ODJDMy4wOTE3NSAxMi41ODc3IDMgMTIuNDI1MiAzIDEyLjI1VjIuNzVDMyAyLjU3NDc2IDMuMDkxNzUgMi40MTIzIDMuMjQxODIgMi4zMjE4MVpNNCAzLjU3OTI1VjExLjQyMDdMMTEuNDI4OCA3LjVMNCAzLjU3OTI1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTggMi43NUM4IDIuNDczODYgNy43NzYxNCAyLjI1IDcuNSAyLjI1QzcuMjIzODYgMi4yNSA3IDIuNDczODYgNyAyLjc1VjdIMi43NUMyLjQ3Mzg2IDcgMi4yNSA3LjIyMzg2IDIuMjUgNy41QzIuMjUgNy43NzYxNCAyLjQ3Mzg2IDggMi43NSA4SDdWMTIuMjVDNyAxMi41MjYxIDcuMjIzODYgMTIuNzUgNy41IDEyLjc1QzcuNzc2MTQgMTIuNzUgOCAxMi41MjYxIDggMTIuMjVWOEgxMi4yNUMxMi41MjYxIDggMTIuNzUgNy43NzYxNCAxMi43NSA3LjVDMTIuNzUgNy4yMjM4NiAxMi41MjYxIDcgMTIuMjUgN0g4VjIuNzVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxlcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTk5MSAwLjg3Njg5MkMzLjg0MjIyIDAuODc2ODkyIDAuODc3MDc1IDMuODQyMDQgMC44NzcwNzUgNy40OTk3MkMwLjg3NzA3NSAxMS4xNTc0IDMuODQyMjIgMTQuMTIyNiA3LjQ5OTkxIDE0LjEyMjZDMTEuMTU3NiAxNC4xMjI2IDE0LjEyMjcgMTEuMTU3NCAxNC4xMjI3IDcuNDk5NzJDMTQuMTIyNyAzLjg0MjA0IDExLjE1NzYgMC44NzY4OTIgNy40OTk5MSAwLjg3Njg5MlpNMS44MjcwNyA3LjQ5OTcyQzEuODI3MDcgNC4zNjY3MSA0LjM2Njg5IDEuODI2ODkgNy40OTk5MSAxLjgyNjg5QzEwLjYzMjkgMS44MjY4OSAxMy4xNzI3IDQuMzY2NzEgMTMuMTcyNyA3LjQ5OTcyQzEzLjE3MjcgMTAuNjMyNyAxMC42MzI5IDEzLjE3MjYgNy40OTk5MSAxMy4xNzI2QzQuMzY2ODkgMTMuMTcyNiAxLjgyNzA3IDEwLjYzMjcgMS44MjcwNyA3LjQ5OTcyWk03LjUwMDAzIDRDNy43NzYxNyA0IDguMDAwMDMgNC4yMjM4NiA4LjAwMDAzIDQuNVY3SDEwLjVDMTAuNzc2MiA3IDExIDcuMjIzODYgMTEgNy41QzExIDcuNzc2MTQgMTAuNzc2MiA4IDEwLjUgOEg4LjAwMDAzVjEwLjVDOC4wMDAwMyAxMC43NzYxIDcuNzc2MTcgMTEgNy41MDAwMyAxMUM3LjIyMzg5IDExIDcuMDAwMDMgMTAuNzc2MSA3LjAwMDAzIDEwLjVWOEg0LjUwMDAzQzQuMjIzODkgOCA0LjAwMDAzIDcuNzc2MTQgNC4wMDAwMyA3LjVDNC4wMDAwMyA3LjIyMzg2IDQuMjIzODkgNyA0LjUwMDAzIDdINy4wMDAwM1Y0LjVDNy4wMDAwMyA0LjIyMzg2IDcuMjIzODkgNCA3LjUwMDAzIDRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx0cj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNS4wNzUwNSA0LjEwMDAxQzUuMDc1MDUgMi45MTEwMyA2LjI1NzI3IDEuOTI1MDIgNy41MDAwNSAxLjkyNTAyQzguNzQyODMgMS45MjUwMiA5LjkyNTA1IDIuOTExMDMgOS45MjUwNSA0LjEwMDAxQzkuOTI1MDUgNS4xOTg2MSA5LjM2NzgyIDUuNzE0MzYgOC42MTg1NCA2LjM3ODg0TDguNTg3NTcgNi40MDYzQzcuODQ0ODEgNy4wNjQ2NyA2LjkyNTA1IDcuODc5OTUgNi45MjUwNSA5LjVDNi45MjUwNSA5LjgxNzU3IDcuMTgyNDggMTAuMDc1IDcuNTAwMDUgMTAuMDc1QzcuODE3NjEgMTAuMDc1IDguMDc1MDUgOS44MTc1NyA4LjA3NTA1IDkuNUM4LjA3NTA1IDguNDE1MTcgOC42Mjk0NSA3LjkwNjIzIDkuMzgxNTYgNy4yMzkyNUw5LjQwMjM4IDcuMjIwNzlDMTAuMTQ5NiA2LjU1ODI5IDExLjA3NSA1LjczNzc1IDExLjA3NSA0LjEwMDAxQzExLjA3NSAyLjEyNzU3IDkuMjE4NjkgMC43NzUwMjQgNy41MDAwNSAwLjc3NTAyNEM1Ljc4MTQgMC43NzUwMjQgMy45MjUwNSAyLjEyNzU3IDMuOTI1MDUgNC4xMDAwMUMzLjkyNTA1IDQuNDE3NTggNC4xODI0OSA0LjY3NTAxIDQuNTAwMDUgNC42NzUwMUM0LjgxNzYxIDQuNjc1MDEgNS4wNzUwNSA0LjQxNzU4IDUuMDc1MDUgNC4xMDAwMVpNNy41MDAwNSAxMy4zNTc1QzcuOTgzMyAxMy4zNTc1IDguMzc1MDUgMTIuOTY1NyA4LjM3NTA1IDEyLjQ4MjVDOC4zNzUwNSAxMS45OTkyIDcuOTgzMyAxMS42MDc1IDcuNTAwMDUgMTEuNjA3NUM3LjAxNjggMTEuNjA3NSA2LjYyNTA1IDExLjk5OTIgNi42MjUwNSAxMi40ODI1QzYuNjI1MDUgMTIuOTY1NyA3LjAxNjggMTMuMzU3NSA3LjUwMDA1IDEzLjM1NzVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxucj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC44NzcwNzUgNy40OTk3MkMwLjg3NzA3NSAzLjg0MjA0IDMuODQyMjIgMC44NzY4OTIgNy40OTk5MSAwLjg3Njg5MkMxMS4xNTc2IDAuODc2ODkyIDE0LjEyMjcgMy44NDIwNCAxNC4xMjI3IDcuNDk5NzJDMTQuMTIyNyAxMS4xNTc0IDExLjE1NzYgMTQuMTIyNiA3LjQ5OTkxIDE0LjEyMjZDMy44NDIyMiAxNC4xMjI2IDAuODc3MDc1IDExLjE1NzQgMC44NzcwNzUgNy40OTk3MlpNNy40OTk5MSAxLjgyNjg5QzQuMzY2ODkgMS44MjY4OSAxLjgyNzA4IDQuMzY2NzEgMS44MjcwOCA3LjQ5OTcyQzEuODI3MDggMTAuNjMyNyA0LjM2Njg5IDEzLjE3MjYgNy40OTk5MSAxMy4xNzI2QzEwLjYzMjkgMTMuMTcyNiAxMy4xNzI3IDEwLjYzMjcgMTMuMTcyNyA3LjQ5OTcyQzEzLjE3MjcgNC4zNjY3MSAxMC42MzI5IDEuODI2ODkgNy40OTk5MSAxLjgyNjg5Wk04LjI0OTkzIDEwLjVDOC4yNDk5MyAxMC45MTQyIDcuOTE0MTQgMTEuMjUgNy40OTk5MyAxMS4yNUM3LjA4NTcxIDExLjI1IDYuNzQ5OTMgMTAuOTE0MiA2Ljc0OTkzIDEwLjVDNi43NDk5MyAxMC4wODU4IDcuMDg1NzEgOS43NSA3LjQ5OTkzIDkuNzVDNy45MTQxNCA5Ljc1IDguMjQ5OTMgMTAuMDg1OCA4LjI0OTkzIDEwLjVaTTYuMDUwMDMgNi4yNUM2LjA1MDAzIDUuNTcyMTEgNi42MzUxMSA0LjkyNSA3LjUwMDAzIDQuOTI1QzguMzY0OTYgNC45MjUgOC45NTAwMyA1LjU3MjExIDguOTUwMDMgNi4yNUM4Ljk1MDAzIDYuNzQxMTggOC42ODAwMiA2Ljk5MjEyIDguMjE0NDcgNy4yNzQ5NEM4LjE2MjUxIDcuMzA2NTEgOC4xMDI1OCA3LjM0MTMxIDguMDM4NDcgNy4zNzg1NEw4LjAzODQxIDcuMzc4NThDNy44NTUyMSA3LjQ4NDk3IDcuNjM3ODggNy42MTExOSA3LjQ3NDQ5IDcuNzM4NDlDNy4yMzIxNCA3LjkyNzMyIDYuOTUwMDMgOC4yMzE5OCA2Ljk1MDAzIDguN0M2Ljk1MDA0IDkuMDAzNzYgNy4xOTYyOCA5LjI1IDcuNTAwMDQgOS4yNUM3LjgwMjQgOS4yNSA4LjA0Nzc4IDkuMDA2MDEgOC4wNTAwMiA4LjcwNDE3TDguMDUwNTYgOC43MDMzQzguMDU5MjQgOC42ODk2IDguMDg0OTMgOC42NTczNSA4LjE1MDU4IDguNjA2MkM4LjI1MjA3IDguNTI3MTIgOC4zNjUwOCA4LjQ2MTYzIDguNTE1NjcgOC4zNzQzNkw4LjUxNTcxIDguMzc0MzNDOC41OTQyMiA4LjMyODgzIDguNjgyOTYgOC4yNzc0MSA4Ljc4NTU5IDguMjE1MDZDOS4zMjAwNCA3Ljg5MDM4IDEwLjA1IDcuMzUzODIgMTAuMDUgNi4yNUMxMC4wNSA0LjkyNzg5IDguOTM1MTEgMy44MjUgNy41MDAwMyAzLjgyNUM2LjA2NDk2IDMuODI1IDQuOTUwMDMgNC45Mjc4OSA0Ljk1MDAzIDYuMjVDNC45NTAwMyA2LjU1Mzc2IDUuMTk2MjggNi44IDUuNTAwMDMgNi44QzUuODAzNzkgNi44IDYuMDUwMDMgNi41NTM3NiA2LjA1MDAzIDYuMjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxycj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOS40MjUwMyAzLjQ0MTM2QzEwLjA1NjEgMy4yMzY1NCAxMC43ODM3IDMuMjQwMiAxMS4zNzkyIDMuNTQ2MjNDMTIuNzUzMiA0LjI1MjI0IDEzLjM0NzcgNi4wNzE5MSAxMi43OTQ2IDhDMTIuNTQ2NSA4Ljg2NDkgMTIuMTEwMiA5LjcwNDcyIDExLjE4NjEgMTAuNTUyNEMxMC4yNjIgMTEuNCA4Ljk4MDM0IDExLjkgOC4zODU3MSAxMS45QzguMTcyNjkgMTEuOSA4IDExLjczMjEgOCAxMS41MjVDOCAxMS4zMTc5IDguMTc2NDQgMTEuMTUgOC4zODU3MSAxMS4xNUM5LjA2NDk3IDExLjE1IDkuNjcxODkgMTAuNzgwNCAxMC4zOTA2IDEwLjIzNkMxMC45NDA2IDkuODE5MyAxMS4zNzAxIDkuMjg2MzMgMTEuNjA4IDguODIxOTFDMTIuMDYyOCA3LjkzMzY3IDEyLjA3ODIgNi42ODE3NCAxMS4zNDMzIDYuMzQ5MDFDMTAuOTkwNCA2LjczNDU1IDEwLjUyOTUgNi45NTk0NiA5Ljk3NzI1IDYuOTU5NDZDOC43NzczIDYuOTU5NDYgOC4wNzAxIDUuOTk0MTIgOC4xMDA1MSA1LjEyMDA5QzguMTI5NTcgNC4yODQ3NCA4LjY2MDMyIDMuNjg5NTQgOS40MjUwMyAzLjQ0MTM2Wk0zLjQyNTAzIDMuNDQxMzZDNC4wNTYxNCAzLjIzNjU0IDQuNzgzNjYgMy4yNDAyIDUuMzc5MjMgMy41NDYyM0M2Ljc1MzIgNC4yNTIyNCA3LjM0NzY2IDYuMDcxOTEgNi43OTQ2MiA4QzYuNTQ2NTQgOC44NjQ5IDYuMTEwMTkgOS43MDQ3MiA1LjE4NjEgMTAuNTUyNEM0LjI2MjAxIDExLjQgMi45ODAzNCAxMS45IDIuMzg1NzEgMTEuOUMyLjE3MjY5IDExLjkgMiAxMS43MzIxIDIgMTEuNTI1QzIgMTEuMzE3OSAyLjE3NjQ0IDExLjE1IDIuMzg1NzEgMTEuMTVDMy4wNjQ5NyAxMS4xNSAzLjY3MTg5IDEwLjc4MDQgNC4zOTA1OCAxMC4yMzZDNC45NDA2NSA5LjgxOTMgNS4zNzAxNCA5LjI4NjMzIDUuNjA3OTcgOC44MjE5MUM2LjA2MjgyIDcuOTMzNjcgNi4wNzgyMSA2LjY4MTc0IDUuMzQzMyA2LjM0OTAxQzQuOTkwMzcgNi43MzQ1NSA0LjUyOTQ4IDYuOTU5NDYgMy45NzcyNSA2Ljk1OTQ2QzIuNzc3MyA2Ljk1OTQ2IDIuMDcwMSA1Ljk5NDEyIDIuMTAwNTEgNS4xMjAwOUMyLjEyOTU3IDQuMjg0NzQgMi42NjAzMiAzLjY4OTU0IDMuNDI1MDMgMy40NDEzNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG9yPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTg1IDAuODc3MDQ1QzMuODQyMTYgMC44NzcwNDUgMC44NzcwMTQgMy44NDIxOSAwLjg3NzAxNCA3LjQ5OTg4QzAuODc3MDE0IDExLjE1NzUgMy44NDIxNiAxNC4xMjI3IDcuNDk5ODUgMTQuMTIyN0MxMS4xNTc1IDE0LjEyMjcgMTQuMTIyNyAxMS4xNTc1IDE0LjEyMjcgNy40OTk4OEMxNC4xMjI3IDMuODQyMTkgMTEuMTU3NSAwLjg3NzA0NSA3LjQ5OTg1IDAuODc3MDQ1Wk0xLjgyNzAxIDcuNDk5ODhDMS44MjcwMSA0LjM2Njg2IDQuMzY2ODMgMS44MjcwNCA3LjQ5OTg1IDEuODI3MDRDMTAuNjMyOCAxLjgyNzA0IDEzLjE3MjcgNC4zNjY4NiAxMy4xNzI3IDcuNDk5ODhDMTMuMTcyNyAxMC42MzI5IDEwLjYzMjggMTMuMTcyNyA3LjQ5OTg1IDEzLjE3MjdDNC4zNjY4MyAxMy4xNzI3IDEuODI3MDEgMTAuNjMyOSAxLjgyNzAxIDcuNDk5ODhaTTcuNDk5OTkgOS40OTk5OUM4LjYwNDU2IDkuNDk5OTkgOS40OTk5OSA4LjYwNDU2IDkuNDk5OTkgNy40OTk5OUM5LjQ5OTk5IDYuMzk1NDIgOC42MDQ1NiA1LjQ5OTk5IDcuNDk5OTkgNS40OTk5OUM2LjM5NTQyIDUuNDk5OTkgNS40OTk5OSA2LjM5NTQyIDUuNDk5OTkgNy40OTk5OUM1LjQ5OTk5IDguNjA0NTYgNi4zOTU0MiA5LjQ5OTk5IDcuNDk5OTkgOS40OTk5OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGlyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjIgMUg0LjE3NzQxSDQuMTc3NEMzLjg2OTM2IDAuOTk5OTg4IDMuNjAzNjggMC45OTk5NzggMy4zODYwOSAxLjAyMDY3QzMuMTU1NzYgMS4wNDI1NyAyLjkyODI1IDEuMDkxMTMgMi43MTYyNSAxLjIyMTA0QzIuNTE0NDIgMS4zNDQ3MiAyLjM0NDczIDEuNTE0NDIgMi4yMjEwNCAxLjcxNjI1QzIuMDkxMTMgMS45MjgyNSAyLjA0MjU3IDIuMTU1NzYgMi4wMjA2NyAyLjM4NjA5QzEuOTk5OTggMi42MDM2NyAxLjk5OTk5IDIuODY5MzUgMiAzLjE3NzM4VjMuMTc3NFYzLjJWMTEuOFYxMS44MjI2VjExLjgyMjZDMS45OTk5OSAxMi4xMzA3IDEuOTk5OTggMTIuMzk2MyAyLjAyMDY3IDEyLjYxMzlDMi4wNDI1NyAxMi44NDQyIDIuMDkxMTMgMTMuMDcxNyAyLjIyMTA0IDEzLjI4MzdDMi4zNDQ3MyAxMy40ODU2IDIuNTE0NDIgMTMuNjU1MyAyLjcxNjI1IDEzLjc3OUMyLjkyODI1IDEzLjkwODkgMy4xNTU3NiAxMy45NTc0IDMuMzg2MDkgMTMuOTc5M0MzLjYwMzY4IDE0IDMuODY5MzcgMTQgNC4xNzc0MSAxNEg0LjJIMTAuOEgxMC44MjI2QzExLjEzMDYgMTQgMTEuMzk2MyAxNCAxMS42MTM5IDEzLjk3OTNDMTEuODQ0MiAxMy45NTc0IDEyLjA3MTcgMTMuOTA4OSAxMi4yODM3IDEzLjc3OUMxMi40ODU2IDEzLjY1NTMgMTIuNjU1MyAxMy40ODU2IDEyLjc3OSAxMy4yODM3QzEyLjkwODkgMTMuMDcxNyAxMi45NTc0IDEyLjg0NDIgMTIuOTc5MyAxMi42MTM5QzEzIDEyLjM5NjMgMTMgMTIuMTMwNiAxMyAxMS44MjI2VjExLjhWMy4yVjMuMTc3NDFDMTMgMi44NjkzNiAxMyAyLjYwMzY4IDEyLjk3OTMgMi4zODYwOUMxMi45NTc0IDIuMTU1NzYgMTIuOTA4OSAxLjkyODI1IDEyLjc3OSAxLjcxNjI1QzEyLjY1NTMgMS41MTQ0MiAxMi40ODU2IDEuMzQ0NzIgMTIuMjgzNyAxLjIyMTA0QzEyLjA3MTcgMS4wOTExMyAxMS44NDQyIDEuMDQyNTcgMTEuNjEzOSAxLjAyMDY3QzExLjM5NjMgMC45OTk5NzggMTEuMTMwNiAwLjk5OTk4OCAxMC44MjI2IDFIMTAuOEg0LjJaTTMuMjM4NzUgMi4wNzM2OEMzLjI2NzIyIDIuMDU2MjMgMy4zMjM2MiAyLjAzMTEyIDMuNDgwNzUgMi4wMTYxOEMzLjY0NTMyIDIuMDAwNTMgMy44NjI5OCAyIDQuMiAySDEwLjhDMTEuMTM3IDIgMTEuMzU0NyAyLjAwMDUzIDExLjUxOTMgMi4wMTYxOEMxMS42NzY0IDIuMDMxMTIgMTEuNzMyOCAyLjA1NjIzIDExLjc2MTMgMi4wNzM2OEMxMS44Mjg1IDIuMTE0OTEgMTEuODg1MSAyLjE3MTQ3IDExLjkyNjMgMi4yMzg3NUMxMS45NDM4IDIuMjY3MjIgMTEuOTY4OSAyLjMyMzYyIDExLjk4MzggMi40ODA3NUMxMS45OTk1IDIuNjQ1MzIgMTIgMi44NjI5OCAxMiAzLjJWMTEuOEMxMiAxMi4xMzcgMTEuOTk5NSAxMi4zNTQ3IDExLjk4MzggMTIuNTE5M0MxMS45Njg5IDEyLjY3NjQgMTEuOTQzOCAxMi43MzI4IDExLjkyNjMgMTIuNzYxM0MxMS44ODUxIDEyLjgyODUgMTEuODI4NSAxMi44ODUxIDExLjc2MTMgMTIuOTI2M0MxMS43MzI4IDEyLjk0MzggMTEuNjc2NCAxMi45Njg5IDExLjUxOTMgMTIuOTgzOEMxMS4zNTQ3IDEyLjk5OTUgMTEuMTM3IDEzIDEwLjggMTNINC4yQzMuODYyOTggMTMgMy42NDUzMiAxMi45OTk1IDMuNDgwNzUgMTIuOTgzOEMzLjMyMzYyIDEyLjk2ODkgMy4yNjcyMiAxMi45NDM4IDMuMjM4NzUgMTIuOTI2M0MzLjE3MTQ3IDEyLjg4NTEgMy4xMTQ5MSAxMi44Mjg1IDMuMDczNjggMTIuNzYxM0MzLjA1NjI0IDEyLjczMjggMy4wMzExMiAxMi42NzY0IDMuMDE2MTggMTIuNTE5M0MzLjAwMDUzIDEyLjM1NDcgMyAxMi4xMzcgMyAxMS44VjMuMkMzIDIuODYyOTggMy4wMDA1MyAyLjY0NTMyIDMuMDE2MTggMi40ODA3NUMzLjAzMTEyIDIuMzIzNjIgMy4wNTYyNCAyLjI2NzIyIDMuMDczNjggMi4yMzg3NUMzLjExNDkxIDIuMTcxNDcgMy4xNzE0NyAyLjExNDkxIDMuMjM4NzUgMi4wNzM2OFpNNSAxMEM0LjcyMzg2IDEwIDQuNSAxMC4yMjM5IDQuNSAxMC41QzQuNSAxMC43NzYxIDQuNzIzODYgMTEgNSAxMUg4QzguMjc2MTQgMTEgOC41IDEwLjc3NjEgOC41IDEwLjVDOC41IDEwLjIyMzkgOC4yNzYxNCAxMCA4IDEwSDVaTTQuNSA3LjVDNC41IDcuMjIzODYgNC43MjM4NiA3IDUgN0gxMEMxMC4yNzYxIDcgMTAuNSA3LjIyMzg2IDEwLjUgNy41QzEwLjUgNy43NzYxNCAxMC4yNzYxIDggMTAgOEg1QzQuNzIzODYgOCA0LjUgNy43NzYxNCA0LjUgNy41Wk01IDRDNC43MjM4NiA0IDQuNSA0LjIyMzg2IDQuNSA0LjVDNC41IDQuNzc2MTQgNC43MjM4NiA1IDUgNUgxMEMxMC4yNzYxIDUgMTAuNSA0Ljc3NjE0IDEwLjUgNC41QzEwLjUgNC4yMjM4NiAxMC4yNzYxIDQgMTAgNEg1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sYXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuODQ5OTggNy40OTk5OEMxLjg0OTk4IDQuNjY0NTggNC4wNTk3OSAxLjg0OTk4IDcuNDk5OTggMS44NDk5OEMxMC4yNzgzIDEuODQ5OTggMTEuNjUxNSAzLjkwNjQgMTIuMjM2NyA1SDEwLjVDMTAuMjIzOSA1IDEwIDUuMjIzODYgMTAgNS41QzEwIDUuNzc2MTQgMTAuMjIzOSA2IDEwLjUgNkgxMy41QzEzLjc3NjEgNiAxNCA1Ljc3NjE0IDE0IDUuNVYyLjVDMTQgMi4yMjM4NiAxMy43NzYxIDIgMTMuNSAyQzEzLjIyMzkgMiAxMyAyLjIyMzg2IDEzIDIuNVY0LjMxMzE4QzEyLjI5NTUgMy4wNzEyNiAxMC42NjU5IDAuODQ5OTc2IDcuNDk5OTggMC44NDk5NzZDMy40MzcxNiAwLjg0OTk3NiAwLjg0OTk3NiA0LjE4NTM3IDAuODQ5OTc2IDcuNDk5OThDMC44NDk5NzYgMTAuODE0NiAzLjQzNzE2IDE0LjE1IDcuNDk5OTggMTQuMTVDOS40NDM4MiAxNC4xNSAxMS4wNjIyIDEzLjM4MDggMTIuMjE0NSAxMi4yMDg0QzEyLjgzMTUgMTEuNTgwNiAxMy4zMTMzIDEwLjgzOSAxMy42NDE4IDEwLjA0MDdDMTMuNzQ2OSA5Ljc4NTM2IDEzLjYyNTEgOS40OTMxNSAxMy4zNjk4IDkuMzg4MDZDMTMuMTE0NCA5LjI4Mjk2IDEyLjgyMjIgOS40MDQ3OCAxMi43MTcxIDkuNjYwMTRDMTIuNDM2MyAxMC4zNDI1IDEyLjAyNTEgMTAuOTc0NSAxMS41MDEzIDExLjUwNzRDMTAuNTI5NSAxMi40OTYzIDkuMTY1MDQgMTMuMTUgNy40OTk5OCAxMy4xNUM0LjA1OTc5IDEzLjE1IDEuODQ5OTggMTAuMzM1NCAxLjg0OTk4IDcuNDk5OThaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxscj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC44NTM1NSAyLjE0NjQ1QzUuMDQ4ODIgMi4zNDE3MSA1LjA0ODgyIDIuNjU4MjkgNC44NTM1NSAyLjg1MzU1TDMuNzA3MTEgNEg5QzExLjQ4NTMgNCAxMy41IDYuMDE0NzIgMTMuNSA4LjVDMTMuNSAxMC45ODUzIDExLjQ4NTMgMTMgOSAxM0g1QzQuNzIzODYgMTMgNC41IDEyLjc3NjEgNC41IDEyLjVDNC41IDEyLjIyMzkgNC43MjM4NiAxMiA1IDEySDlDMTAuOTMzIDEyIDEyLjUgMTAuNDMzIDEyLjUgOC41QzEyLjUgNi41NjcgMTAuOTMzIDUgOSA1SDMuNzA3MTFMNC44NTM1NSA2LjE0NjQ1QzUuMDQ4ODIgNi4zNDE3MSA1LjA0ODgyIDYuNjU4MjkgNC44NTM1NSA2Ljg1MzU1QzQuNjU4MjkgNy4wNDg4MiA0LjM0MTcxIDcuMDQ4ODIgNC4xNDY0NSA2Ljg1MzU1TDIuMTQ2NDUgNC44NTM1NUMxLjk1MTE4IDQuNjU4MjkgMS45NTExOCA0LjM0MTcxIDIuMTQ2NDUgNC4xNDY0NUw0LjE0NjQ1IDIuMTQ2NDVDNC4zNDE3MSAxLjk1MTE4IDQuNjU4MjkgMS45NTExOCA0Ljg1MzU1IDIuMTQ2NDVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxzcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMy4wNDk5NSAyLjc0OTk1QzMuMDQ5OTUgMi40NDYxOSAyLjgwMzcxIDIuMTk5OTUgMi40OTk5NSAyLjE5OTk1QzIuMTk2MTkgMi4xOTk5NSAxLjk0OTk1IDIuNDQ2MTkgMS45NDk5NSAyLjc0OTk1VjEyLjI1QzEuOTQ5OTUgMTIuNTUzNyAyLjE5NjE5IDEyLjggMi40OTk5NSAxMi44QzIuODAzNzEgMTIuOCAzLjA0OTk1IDEyLjU1MzcgMy4wNDk5NSAxMi4yNVYyLjc0OTk1Wk01LjczMzMzIDIuMzA3NzZDNS41NzgzNSAyLjIyNTk2IDUuMzkxODUgMi4yMzEyNyA1LjI0MTc3IDIuMzIxNzZDNS4wOTE3IDIuNDEyMjUgNC45OTk5NSAyLjU3NDcxIDQuOTk5OTUgMi43NDk5NVYxMi4yNUM0Ljk5OTk1IDEyLjQyNTIgNS4wOTE3IDEyLjU4NzcgNS4yNDE3NyAxMi42NzgxQzUuMzkxODUgMTIuNzY4NiA1LjU3ODM1IDEyLjc3MzkgNS43MzMzMyAxMi42OTIxTDE0LjczMzMgNy45NDIxNEMxNC44OTczIDcuODU1NTkgMTUgNy42ODUzOSAxNSA3LjQ5OTk1QzE1IDcuMzE0NTIgMTQuODk3MyA3LjE0NDMxIDE0LjczMzMgNy4wNTc3Nkw1LjczMzMzIDIuMzA3NzZaTTUuOTk5OTUgMTEuNDIwN1YzLjU3OTJMMTMuNDI4NyA3LjQ5OTk1TDUuOTk5OTUgMTEuNDIwN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGNyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02Ljg1MzU3IDMuODUzNTVMNy42NTM1NSAzLjA1MzUzQzguMjk4MSAyLjQwOTAxIDkuNDI4NTggMS45NjE3MiAxMC41NTIgMS44MDEyNUMxMS4xMDU2IDEuNzIyMTcgMTEuNjI5MSAxLjcxNzI1IDEyLjA1NjQgMS43ODEyNEMxMi40OTg3IDEuODQ3NDggMTIuNzY5OCAxLjk3Njk2IDEyLjg5NjUgMi4xMDM1N0MxMy4wMjMxIDIuMjMwMTggMTMuMTUyNiAyLjUwMTI1IDEzLjIxODggMi45NDM1N0MxMy4yODI4IDMuMzcwODYgMTMuMjc3OSAzLjg5NDM5IDEzLjE5ODggNC40NDgwMUMxMy4wMzgzIDUuNTcxMzkgMTIuNTkxIDYuNzAxODggMTEuOTQ2NCA3LjM0NjQ1TDcuNDk5OTkgMTEuNzkyOUw2LjM1MzU0IDEwLjY0NjVDNi4xNTgyNyAxMC40NTEyIDUuODQxNjkgMTAuNDUxMiA1LjY0NjQzIDEwLjY0NjVDNS40NTExNyAxMC44NDE3IDUuNDUxMTcgMTEuMTU4MyA1LjY0NjQzIDExLjM1MzZMNy4xNDY0NCAxMi44NTM2QzcuMzQxNzEgMTMuMDQ4OCA3LjY1ODI5IDEzLjA0ODggNy44NTM1NSAxMi44NTM2TDguNDAwNzMgMTIuMzA2NEw5LjU3MTI0IDE0LjI1NzJDOS42NTA0NiAxNC4zODkzIDkuNzg2MDggMTQuNDc3NCA5LjkzODkgMTQuNDk2M0MxMC4wOTE3IDE0LjUxNTEgMTAuMjQ0NyAxNC40NjI0IDEwLjM1MzUgMTQuMzUzNkwxMi4zNTM1IDEyLjM1MzZDMTIuNDY0OCAxMi4yNDIzIDEyLjUxNzIgMTIuMDg1MSAxMi40OTUgMTEuOTI5M0wxMi4wMzAzIDguNjc2NzlMMTIuNjUzNiA4LjA1MzU1QzEzLjUwOSA3LjE5ODA4IDE0LjAxMTcgNS44Mjg1NSAxNC4xODg3IDQuNTg5NDNDMTQuMjc4NCAzLjk2MTggMTQuMjg5MSAzLjMzODQ3IDE0LjIwNzggMi43OTU0NkMxNC4xMjg3IDIuMjY3NDggMTMuOTUxOSAxLjc0NDgyIDEzLjYwMzUgMS4zOTY0NUMxMy4yNTUyIDEuMDQ4MDkgMTIuNzMyNSAwLjg3MTMzMiAxMi4yMDQ1IDAuNzkyMjY0QzExLjY2MTUgMC43MTA5NDUgMTEuMDM4MiAwLjcyMTY0NCAxMC40MTA1IDAuODExM0M5LjE3MTQzIDAuOTg4MzA2IDcuODAxODkgMS40OTEgNi45NDY0NCAyLjM0NjQyTDYuMzIzMjIgMi45Njk2OEwzLjA3MDcxIDIuNTA1MDRDMi45MTQ5MiAyLjQ4Mjc4IDIuNzU3NzMgMi41MzUxNyAyLjY0NjQ1IDIuNjQ2NDZMMC42NDY0NTEgNC42NDY0NUMwLjUzNzU3OSA0Ljc1NTMzIDAuNDg0OTM4IDQuOTA4MjkgMC41MDM3NSA1LjA2MTFDMC41MjI1NjMgNS4yMTM5MSAwLjYxMDczIDUuMzQ5NTQgMC43NDI3NTcgNS40Mjg3NkwyLjY5MzY0IDYuNTk5MjhMMi4xNDY0NiA3LjE0NjQ1QzIuMDUyNyA3LjI0MDIyIDIuMDAwMDIgNy4zNjc0IDIuMDAwMDIgNy41MDAwMUMyLjAwMDAyIDcuNjMyNjEgMi4wNTI3IDcuNzU5NzkgMi4xNDY0NiA3Ljg1MzU2TDMuNjQ2NDcgOS4zNTM1NkMzLjg0MTczIDkuNTQ4ODMgNC4xNTgzMSA5LjU0ODgzIDQuMzUzNTcgOS4zNTM1NkM0LjU0ODg0IDkuMTU4MyA0LjU0ODg0IDguODQxNzIgNC4zNTM1NyA4LjY0NjQ2TDMuMjA3MTIgNy41MDAwMUwzLjg1MzU3IDYuODUzNTZMNi44NTM1NyAzLjg1MzU1Wk0xMC4wOTkzIDEzLjE5MzZMOS4xMjk1OSAxMS41Nzc1TDExLjE0NjQgOS41NjA2N0wxMS40Njk3IDExLjgyMzJMMTAuMDk5MyAxMy4xOTM2Wk0zLjQyMjUxIDUuODcwNDFMNS40MzkzNSAzLjg1MzU2TDMuMTc2NzggMy41MzAzNEwxLjgwNjM4IDQuOTAwNzRMMy40MjI1MSA1Ljg3MDQxWk0yLjM1MzU2IDEwLjM1MzVDMi41NDg4MiAxMC4xNTgzIDIuNTQ4ODIgOS44NDE3IDIuMzUzNTYgOS42NDY0NEMyLjE1ODMgOS40NTExOCAxLjg0MTcxIDkuNDUxMTggMS42NDY0NSA5LjY0NjQ0TDAuNjQ2NDUxIDEwLjY0NjRDMC40NTExODggMTAuODQxNyAwLjQ1MTE4OCAxMS4xNTgzIDAuNjQ2NDUxIDExLjM1MzVDMC44NDE3MTMgMTEuNTQ4OCAxLjE1ODMgMTEuNTQ4OCAxLjM1MzU2IDExLjM1MzVMMi4zNTM1NiAxMC4zNTM1Wk0zLjg1MzU4IDExLjg1MzZDNC4wNDg4NCAxMS42NTgzIDQuMDQ4ODUgMTEuMzQxNyAzLjg1MzU5IDExLjE0NjVDMy42NTgzMyAxMC45NTEyIDMuMzQxNzUgMTAuOTUxMiAzLjE0NjQ4IDExLjE0NjVMMS4xNDY0NSAxMy4xNDY0QzAuOTUxMTkgMTMuMzQxNyAwLjk1MTE4NyAxMy42NTgzIDEuMTQ2NDUgMTMuODUzNUMxLjM0MTcxIDE0LjA0ODggMS42NTgyOSAxNC4wNDg4IDEuODUzNTUgMTMuODUzNkwzLjg1MzU4IDExLjg1MzZaTTUuMzUzNTYgMTMuMzUzNUM1LjU0ODgyIDEzLjE1ODMgNS41NDg4MiAxMi44NDE3IDUuMzUzNTYgMTIuNjQ2NEM1LjE1ODMgMTIuNDUxMiA0Ljg0MTcxIDEyLjQ1MTIgNC42NDY0NSAxMi42NDY0TDMuNjQ2NDUgMTMuNjQ2NEMzLjQ1MTE5IDEzLjg0MTcgMy40NTExOSAxNC4xNTgzIDMuNjQ2NDUgMTQuMzUzNUMzLjg0MTcxIDE0LjU0ODggNC4xNTgzIDE0LjU0ODggNC4zNTM1NiAxNC4zNTM1TDUuMzUzNTYgMTMuMzUzNVpNOS40OTk5NyA2Ljc0ODgxQzEwLjE4OTcgNi43NDg4MSAxMC43NDg4IDYuMTg5NyAxMC43NDg4IDUuNUMxMC43NDg4IDQuODEwMyAxMC4xODk3IDQuMjUxMTggOS40OTk5NyA0LjI1MTE4QzguODEwMjYgNC4yNTExOCA4LjI1MTE1IDQuODEwMyA4LjI1MTE1IDUuNUM4LjI1MTE1IDYuMTg5NyA4LjgxMDI2IDYuNzQ4ODEgOS40OTk5NyA2Ljc0ODgxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNTk2NjQgMi45MzYyOEM3Ljc2MDg1IDMuMDY0MDEgOC4wMDAxMiAyLjk0Njk4IDguMDAwMTIgMi43Mzg5NVYxLjk5OTk4QzkuOTgxNDMgMiAxMS4xODQ4IDIuMzYzNyAxMS45MTA1IDMuMDg5NDVDMTIuNjM2MyAzLjgxNTIyIDEzIDUuMDE4NiAxMyA2Ljk5OTk4QzEzIDcuMjc2MTMgMTMuMjIzOSA3LjQ5OTk4IDEzLjUgNy40OTk5OEMxMy43NzYxIDcuNDk5OTggMTQgNy4yNzYxMyAxNCA2Ljk5OTk4QzE0IDQuOTQzOCAxMy42MzI1IDMuMzk3MTkgMTIuNjE3NiAyLjM4MjM0QzExLjYwMjggMS4zNjc1MiAxMC4wNTYyIDAuOTk5OTk5IDguMDAwMTIgMC45OTk5ODRWMC4yNjEyNjZDOC4wMDAxMiAwLjA1MzIyOTMgNy43NjA4NSAtMC4wNjM3OTQ0IDcuNTk2NjQgMC4wNjM5MjhMNi4wMDM4NCAxLjMwMjc3QzUuODc1MTYgMS40MDI4NiA1Ljg3NTE2IDEuNTk3MzUgNi4wMDM4NCAxLjY5NzQ0TDcuNTk2NjQgMi45MzYyOFpNOS41IDVIMi41QzIuMjIzODYgNSAyIDUuMjIzODYgMiA1LjVWMTIuNUMyIDEyLjc3NjEgMi4yMjM4NiAxMyAyLjUgMTNIOS41QzkuNzc2MTQgMTMgMTAgMTIuNzc2MSAxMCAxMi41VjUuNUMxMCA1LjIyMzg2IDkuNzc2MTQgNSA5LjUgNVpNMi41IDRDMS42NzE1NyA0IDEgNC42NzE1NyAxIDUuNVYxMi41QzEgMTMuMzI4NCAxLjY3MTU3IDE0IDIuNSAxNEg5LjVDMTAuMzI4NCAxNCAxMSAxMy4zMjg0IDExIDEyLjVWNS41QzExIDQuNjcxNTcgMTAuMzI4NCA0IDkuNSA0SDIuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGZyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjgxODMyIDAuNjgxNzlDNy42NDI1OCAwLjUwNjA1NCA3LjM1NzY2IDAuNTA2MDU0IDcuMTgxOTIgMC42ODE3OUw1LjE4MTkyIDIuNjgxNzlDNS4wMDYxOSAyLjg1NzUzIDUuMDA2MTkgMy4xNDI0NSA1LjE4MTkyIDMuMzE4MTlDNS4zNTc2NiAzLjQ5MzkyIDUuNjQyNTggMy40OTM5MiA1LjgxODMyIDMuMzE4MTlMNy4wNTAxMiAyLjA4NjM4TDcuMDUwMTIgNS41MDAyM0M3LjA1MDEyIDUuNzQ4NzYgNy4yNTE1OSA1Ljk1MDIzIDcuNTAwMTIgNS45NTAyM0M3Ljc0ODY1IDUuOTUwMjMgNy45NTAxMiA1Ljc0ODc2IDcuOTUwMTIgNS41MDAyM0w3Ljk1MDEyIDIuMDg2MzhMOS4xODE5MiAzLjMxODE5QzkuMzU3NjYgMy40OTM5MiA5LjY0MjU4IDMuNDkzOTIgOS44MTgzMiAzLjMxODE5QzkuOTk0MDYgMy4xNDI0NSA5Ljk5NDA2IDIuODU3NTMgOS44MTgzMiAyLjY4MTc5TDcuODE4MzIgMC42ODE3OVpNNy45NTAxMiAxMi45MTM2VjkuNTAwMjNDNy45NTAxMiA5LjI1MTcgNy43NDg2NSA5LjA1MDIzIDcuNTAwMTIgOS4wNTAyM0M3LjI1MTU5IDkuMDUwMjMgNy4wNTAxMiA5LjI1MTcgNy4wNTAxMiA5LjUwMDIzVjEyLjkxMzZMNS44MTgzMiAxMS42ODE4QzUuNjQyNTggMTEuNTA2MSA1LjM1NzY2IDExLjUwNjEgNS4xODE5MiAxMS42ODE4QzUuMDA2MTkgMTEuODU3NSA1LjAwNjE5IDEyLjE0MjQgNS4xODE5MiAxMi4zMTgyTDcuMTgxOTIgMTQuMzE4MkM3LjI2NjMyIDE0LjQwMjYgNy4zODA3NyAxNC40NSA3LjUwMDEyIDE0LjQ1QzcuNjE5NDcgMTQuNDUgNy43MzM5MyAxNC40MDI2IDcuODE4MzIgMTQuMzE4Mkw5LjgxODMyIDEyLjMxODJDOS45OTQwNiAxMi4xNDI0IDkuOTk0MDYgMTEuODU3NSA5LjgxODMyIDExLjY4MThDOS42NDI1OCAxMS41MDYxIDkuMzU3NjYgMTEuNTA2MSA5LjE4MTkyIDExLjY4MThMNy45NTAxMiAxMi45MTM2Wk0xLjQ5OTk0IDcuMDAwMTdDMS4yMjM4IDcuMDAwMTcgMC45OTk5MzkgNy4yMjQwMyAwLjk5OTkzOSA3LjUwMDE3QzAuOTk5OTM5IDcuNzc2MzEgMS4yMjM4IDguMDAwMTcgMS40OTk5NCA4LjAwMDE3TDEzLjQ5OTkgOC4wMDAxN0MxMy43NzYxIDguMDAwMTcgMTMuOTk5OSA3Ljc3NjMxIDEzLjk5OTkgNy41MDAxN0MxMy45OTk5IDcuMjI0MDMgMTMuNzc2MSA3LjAwMDE3IDEzLjQ5OTkgNy4wMDAxN0wxLjQ5OTk0IDcuMDAwMTdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxkcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTQgMTIuODVMMSAxMi44NUwxIDE0LjE1TDE0IDE0LjE1TDE0IDEyLjg1Wk0xNCA4Ljg1MDAyTDEgOC44NTAwMkwxIDEwLjE1TDE0IDEwLjE1TDE0IDguODUwMDJaTTEgNC44NTAwM0wxNCA0Ljg1MDAzTDE0IDYuMTUwMDNMMSA2LjE1MDAyTDEgNC44NTAwM1pNMTQgMC44NTAwMjVMMSAwLjg1MDAyNUwxIDIuMTUwMDJMMTQgMi4xNTAwMkwxNCAwLjg1MDAyNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHByPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wLjUgNEMwLjIyMzg1OCA0IDAgNC4yMjM4NiAwIDQuNVYxMC41QzAgMTAuNzc2MSAwLjIyMzg1OCAxMSAwLjUgMTFIMTQuNUMxNC43NzYxIDExIDE1IDEwLjc3NjEgMTUgMTAuNVY0LjVDMTUgNC4yMjM4NiAxNC43NzYxIDQgMTQuNSA0SDAuNVpNMSAxMFY1SDIuMDc1VjcuNUMyLjA3NSA3LjczNDcyIDIuMjY1MjggNy45MjUgMi41IDcuOTI1QzIuNzM0NzIgNy45MjUgMi45MjUgNy43MzQ3MiAyLjkyNSA3LjVWNUg0LjA3NVY2LjVDNC4wNzUgNi43MzQ3MiA0LjI2NTI4IDYuOTI1IDQuNSA2LjkyNUM0LjczNDcyIDYuOTI1IDQuOTI1IDYuNzM0NzIgNC45MjUgNi41VjVINi4wNzVWNi41QzYuMDc1IDYuNzM0NzIgNi4yNjUyOCA2LjkyNSA2LjUgNi45MjVDNi43MzQ3MiA2LjkyNSA2LjkyNSA2LjczNDcyIDYuOTI1IDYuNVY1SDguMDc1VjcuNUM4LjA3NSA3LjczNDcyIDguMjY1MjggNy45MjUgOC41IDcuOTI1QzguNzM0NzIgNy45MjUgOC45MjUgNy43MzQ3MiA4LjkyNSA3LjVWNUgxMC4wNzVWNi41QzEwLjA3NSA2LjczNDcyIDEwLjI2NTMgNi45MjUgMTAuNSA2LjkyNUMxMC43MzQ3IDYuOTI1IDEwLjkyNSA2LjczNDcyIDEwLjkyNSA2LjVWNUgxMi4wNzVWNi41QzEyLjA3NSA2LjczNDcyIDEyLjI2NTMgNi45MjUgMTIuNSA2LjkyNUMxMi43MzQ3IDYuOTI1IDEyLjkyNSA2LjczNDcyIDEyLjkyNSA2LjVWNUgxNFYxMEgxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0saHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuNSAwQzAuMjIzODU4IDAgMCAwLjIyMzg1OCAwIDAuNVYxNC41QzAgMTQuNzc2MSAwLjIyMzg1OCAxNSAwLjUgMTVINC41QzQuNzc2MTQgMTUgNSAxNC43NzYxIDUgMTQuNVY1SDE0LjVDMTQuNzc2MSA1IDE1IDQuNzc2MTQgMTUgNC41VjAuNUMxNSAwLjIyMzg1OCAxNC43NzYxIDAgMTQuNSAwSDAuNVpNMSA0LjA3NTA1TDEgMUg0LjA3NTAyQzQuMDc1MDIgMSA0LjA3NTAyIDEgNC4wNzUwMiAxTDQuMDc1MDUgNC4wNzUwN0wxIDQuMDc1MDVaTTAuOTk5OTk3IDQuOTI1MDVMMSAxNEg0VjEyLjkyNUgyLjc1MDAyQzIuNTE1MyAxMi45MjUgMi4zMjUwMiAxMi43MzQ4IDIuMzI1MDIgMTIuNUMyLjMyNTAyIDEyLjI2NTMgMi41MTUzIDEyLjA3NSAyLjc1MDAyIDEyLjA3NUg0VjEwLjkyNUgyLjI1MDAyQzIuMDE1MyAxMC45MjUgMS44MjUwMiAxMC43MzQ3IDEuODI1MDIgMTAuNUMxLjgyNTAyIDEwLjI2NTMgMi4wMTUzIDEwLjA3NSAyLjI1MDAyIDEwLjA3NUg0VjguOTI1MDRMMi43NTAwMiA4LjkyNTAyQzIuNTE1MyA4LjkyNTAyIDIuMzI1MDIgOC43MzQ3NCAyLjMyNTAyIDguNTAwMDJDMi4zMjUwMyA4LjI2NTI5IDIuNTE1MzEgOC4wNzUwMiAyLjc1MDAzIDguMDc1MDJMNCA4LjA3NTA0VjYuOTI1MDJMMi43NDk5OSA2LjkyNUMyLjUxNTI3IDYuOTI1IDIuMzI1IDYuNzM0NzIgMi4zMjUgNi41QzIuMzI1IDYuMjY1MjggMi41MTUyOSA2LjA3NSAyLjc1MDAxIDYuMDc1TDQgNi4wNzUwMlY0LjkyNTA3TDAuOTk5OTk3IDQuOTI1MDVaTTQuOTI1MDUgNEg2LjA3NVYyLjc1MDA2QzYuMDc1IDIuNTE1MzQgNi4yNjUyOCAyLjMyNTA2IDYuNSAyLjMyNTA2QzYuNzM0NzIgMi4zMjUwNiA2LjkyNSAyLjUxNTM0IDYuOTI1IDIuNzUwMDZWNEg4LjA3NTAyVjIuNzUwMDVDOC4wNzUwMiAyLjUxNTMzIDguMjY1MyAyLjMyNTA1IDguNTAwMDIgMi4zMjUwNUM4LjczNDc0IDIuMzI1MDUgOC45MjUwMiAyLjUxNTMzIDguOTI1MDIgMi43NTAwNVY0SDEwLjA3NTFWMi4yNTAwNUMxMC4wNzUxIDIuMDE1MzMgMTAuMjY1MyAxLjgyNTA1IDEwLjUwMDEgMS44MjUwNUMxMC43MzQ4IDEuODI1MDUgMTAuOTI1MSAyLjAxNTMzIDEwLjkyNTEgMi4yNTAwNVY0SDEyLjA3NTFWMi43NTAwNUMxMi4wNzUxIDIuNTE1MzMgMTIuMjY1NCAyLjMyNTA1IDEyLjUwMDEgMi4zMjUwNUMxMi43MzQ4IDIuMzI1MDUgMTIuOTI1MSAyLjUxNTMzIDEyLjkyNTEgMi43NTAwNVY0SDE0VjFINC45MjUwMkw0LjkyNTA1IDRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxncj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiAxLjVDMiAxLjc3NjE0IDEuNzc2MTQgMiAxLjUgMkMxLjIyMzg2IDIgMSAxLjc3NjE0IDEgMS41QzEgMS4yMjM4NiAxLjIyMzg2IDEgMS41IDFDMS43NzYxNCAxIDIgMS4yMjM4NiAyIDEuNVpNMiA1TDIgMTBIMTNWNUgyWk0yIDRDMS40NDc3MiA0IDEgNC40NDc3MiAxIDVWMTBDMSAxMC41NTIzIDEuNDQ3NzIgMTEgMiAxMUgxM0MxMy41NTIzIDExIDE0IDEwLjU1MjMgMTQgMTBWNUMxNCA0LjQ0NzcyIDEzLjU1MjMgNCAxMyA0SDJaTTEuNSAxNEMxLjc3NjE0IDE0IDIgMTMuNzc2MSAyIDEzLjVDMiAxMy4yMjM5IDEuNzc2MTQgMTMgMS41IDEzQzEuMjIzODYgMTMgMSAxMy4yMjM5IDEgMTMuNUMxIDEzLjc3NjEgMS4yMjM4NiAxNCAxLjUgMTRaTTQgMS41QzQgMS43NzYxNCAzLjc3NjE0IDIgMy41IDJDMy4yMjM4NiAyIDMgMS43NzYxNCAzIDEuNUMzIDEuMjIzODYgMy4yMjM4NiAxIDMuNSAxQzMuNzc2MTQgMSA0IDEuMjIzODYgNCAxLjVaTTMuNSAxNEMzLjc3NjE0IDE0IDQgMTMuNzc2MSA0IDEzLjVDNCAxMy4yMjM5IDMuNzc2MTQgMTMgMy41IDEzQzMuMjIzODYgMTMgMyAxMy4yMjM5IDMgMTMuNUMzIDEzLjc3NjEgMy4yMjM4NiAxNCAzLjUgMTRaTTYgMS41QzYgMS43NzYxNCA1Ljc3NjE0IDIgNS41IDJDNS4yMjM4NiAyIDUgMS43NzYxNCA1IDEuNUM1IDEuMjIzODYgNS4yMjM4NiAxIDUuNSAxQzUuNzc2MTQgMSA2IDEuMjIzODYgNiAxLjVaTTUuNSAxNEM1Ljc3NjE0IDE0IDYgMTMuNzc2MSA2IDEzLjVDNiAxMy4yMjM5IDUuNzc2MTQgMTMgNS41IDEzQzUuMjIzODYgMTMgNSAxMy4yMjM5IDUgMTMuNUM1IDEzLjc3NjEgNS4yMjM4NiAxNCA1LjUgMTRaTTggMS41QzggMS43NzYxNCA3Ljc3NjE0IDIgNy41IDJDNy4yMjM4NiAyIDcgMS43NzYxNCA3IDEuNUM3IDEuMjIzODYgNy4yMjM4NiAxIDcuNSAxQzcuNzc2MTQgMSA4IDEuMjIzODYgOCAxLjVaTTcuNSAxNEM3Ljc3NjE0IDE0IDggMTMuNzc2MSA4IDEzLjVDOCAxMy4yMjM5IDcuNzc2MTQgMTMgNy41IDEzQzcuMjIzODYgMTMgNyAxMy4yMjM5IDcgMTMuNUM3IDEzLjc3NjEgNy4yMjM4NiAxNCA3LjUgMTRaTTEwIDEuNUMxMCAxLjc3NjE0IDkuNzc2MTQgMiA5LjUgMkM5LjIyMzg2IDIgOSAxLjc3NjE0IDkgMS41QzkgMS4yMjM4NiA5LjIyMzg2IDEgOS41IDFDOS43NzYxNCAxIDEwIDEuMjIzODYgMTAgMS41Wk05LjUgMTRDOS43NzYxNCAxNCAxMCAxMy43NzYxIDEwIDEzLjVDMTAgMTMuMjIzOSA5Ljc3NjE0IDEzIDkuNSAxM0M5LjIyMzg2IDEzIDkgMTMuMjIzOSA5IDEzLjVDOSAxMy43NzYxIDkuMjIzODYgMTQgOS41IDE0Wk0xMiAxLjVDMTIgMS43NzYxNCAxMS43NzYxIDIgMTEuNSAyQzExLjIyMzkgMiAxMSAxLjc3NjE0IDExIDEuNUMxMSAxLjIyMzg2IDExLjIyMzkgMSAxMS41IDFDMTEuNzc2MSAxIDEyIDEuMjIzODYgMTIgMS41Wk0xMS41IDE0QzExLjc3NjEgMTQgMTIgMTMuNzc2MSAxMiAxMy41QzEyIDEzLjIyMzkgMTEuNzc2MSAxMyAxMS41IDEzQzExLjIyMzkgMTMgMTEgMTMuMjIzOSAxMSAxMy41QzExIDEzLjc3NjEgMTEuMjIzOSAxNCAxMS41IDE0Wk0xNCAxLjVDMTQgMS43NzYxNCAxMy43NzYxIDIgMTMuNSAyQzEzLjIyMzkgMiAxMyAxLjc3NjE0IDEzIDEuNUMxMyAxLjIyMzg2IDEzLjIyMzkgMSAxMy41IDFDMTMuNzc2MSAxIDE0IDEuMjIzODYgMTQgMS41Wk0xMy41IDE0QzEzLjc3NjEgMTQgMTQgMTMuNzc2MSAxNCAxMy41QzE0IDEzLjIyMzkgMTMuNzc2MSAxMyAxMy41IDEzQzEzLjIyMzkgMTMgMTMgMTMuMjIzOSAxMyAxMy41QzEzIDEzLjc3NjEgMTMuMjIzOSAxNCAxMy41IDE0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdnI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTYgMy41QzYgMi42NzE1NyA2LjY3MTU3IDIgNy41IDJDOC4zMjg0MyAyIDkgMi42NzE1NyA5IDMuNUM5IDQuMzI4NDMgOC4zMjg0MyA1IDcuNSA1QzYuNjcxNTcgNSA2IDQuMzI4NDMgNiAzLjVaTTggNS45NDk5OUM5LjE0MTEyIDUuNzE4MzYgMTAgNC43MDk0OCAxMCAzLjVDMTAgMi4xMTkyOSA4Ljg4MDcxIDEgNy41IDFDNi4xMTkyOSAxIDUgMi4xMTkyOSA1IDMuNUM1IDQuNzA5NDggNS44NTg4OCA1LjcxODM2IDcgNS45NDk5OVYxMy41QzcgMTMuNzc2MSA3LjIyMzg2IDE0IDcuNSAxNEM3Ljc3NjE0IDE0IDggMTMuNzc2MSA4IDEzLjVWNS45NDk5OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG1yPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMCAzLjVDMTAgNC43MDk0OCA5LjE0MTEyIDUuNzE4MzYgOCA1Ljk0OTk5VjEzLjVDOCAxMy43NzYxIDcuNzc2MTQgMTQgNy41IDE0QzcuMjIzODYgMTQgNyAxMy43NzYxIDcgMTMuNVY1Ljk0OTk5QzUuODU4ODggNS43MTgzNiA1IDQuNzA5NDggNSAzLjVDNSAyLjExOTI5IDYuMTE5MjkgMSA3LjUgMUM4Ljg4MDcxIDEgMTAgMi4xMTkyOSAxMCAzLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxDcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC44NzcwNzUgNy40OTk4OEMwLjg3NzA3NSAzLjg0MjE5IDMuODQyMjIgMC44NzcwNDUgNy40OTk5MSAwLjg3NzA0NUMxMS4xNTc2IDAuODc3MDQ1IDE0LjEyMjcgMy44NDIxOSAxNC4xMjI3IDcuNDk5ODhDMTQuMTIyNyAxMS4xNTc1IDExLjE1NzYgMTQuMTIyNyA3LjQ5OTkxIDE0LjEyMjdDMy44NDIyMiAxNC4xMjI3IDAuODc3MDc1IDExLjE1NzUgMC44NzcwNzUgNy40OTk4OFpNNy40OTk5MSAxLjgyNzA0QzQuMzY2ODkgMS44MjcwNCAxLjgyNzA4IDQuMzY2ODYgMS44MjcwOCA3LjQ5OTg4QzEuODI3MDggMTAuNjMyOSA0LjM2Njg5IDEzLjE3MjcgNy40OTk5MSAxMy4xNzI3QzEwLjYzMjkgMTMuMTcyNyAxMy4xNzI3IDEwLjYzMjkgMTMuMTcyNyA3LjQ5OTg4QzEzLjE3MjcgNC4zNjY4NiAxMC42MzI5IDEuODI3MDQgNy40OTk5MSAxLjgyNzA0WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMDVcIixkOlwiTTYuNzgyOTYgMTMuMzc2QzguNzM5MDQgOS45NTI4NCA4LjczOTA0IDUuMDQ3MTkgNi43ODI5NiAxLjYyNDA1TDcuMjE3MDggMS4zNzU5OEM5LjI2MSA0Ljk1MjgzIDkuMjYxIDEwLjA0NzIgNy4yMTcwOCAxMy42MjRMNi43ODI5NiAxMy4zNzZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4xXCIsZDpcIk03LjI4MjA0IDEzLjQ3NzVDOS4yMzkyOSA5Ljk5NTIzIDkuMjM5MjkgNS4wMDQ3NSA3LjI4MjA0IDEuNTIyNDhMNy43MTc5MSAxLjI3NzVDOS43NjA2NyA0LjkxMTkgOS43NjA2NyAxMC4wODgxIDcuNzE3OTEgMTMuNzIyNUw3LjI4MjA0IDEzLjQ3NzVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4xNVwiLGQ6XCJNNy44MjA5OCAxMy41MDY0QzkuNzI1MDIgOS45OTUyMyA5LjcyNjM2IDUuMDE0MTEgNy44MjQ5MiAxLjUwMDg0TDguMjY0NjUgMS4yNjI4NUMxMC4yNDY1IDQuOTI0NjYgMTAuMjQ1MSAxMC4wODUgOC4yNjA1MiAxMy43NDQ4TDcuODIwOTggMTMuNTA2NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjJcIixkOlwiTTguNDEyODQgMTMuNDI5QzEwLjE5NTIgOS45Mjg0MiAxMC4xOTU3IDUuMDc1MzcgOC40MTQzNSAxLjU3NDAyTDguODU5OTkgMS4zNDcyOUMxMC43MTM5IDQuOTkxMTMgMTAuNzEzMyAxMC4wMTI4IDguODU4NDEgMTMuNjU1OUw4LjQxMjg0IDEzLjQyOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjI1XCIsZDpcIk05LjAyNDQxIDEzLjI5NTZDMTAuNjU2NyA5LjgzNzkgMTAuNjU4NiA1LjE3NzE1IDkuMDMwMDUgMS43MTY1Nkw5LjQ4MjQ1IDEuNTAzNjZDMTEuMTc0NSA1LjA5OTE5IDExLjE3MjYgOS45MTYyOSA5LjQ3NjU3IDEzLjUwOTFMOS4wMjQ0MSAxMy4yOTU2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuM1wiLGQ6XCJNOS42NjgwOSAxMy4wNjU1QzExLjEwOTcgOS42OTU3MiAxMS4xMTA3IDUuMzEyMSA5LjY3MDg4IDEuOTQwOTVMMTAuMTMwNyAxLjc0NDU3QzExLjYyNDEgNS4yNDEyMSAxMS42MjMxIDkuNzY2ODMgMTAuMTI3OCAxMy4yNjIyTDkuNjY4MDkgMTMuMDY1NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjM1XCIsZDpcIk0xMC4zMzEgMTIuNzQ1NkMxMS41NTUxIDkuNTIwNzMgMTEuNTU2NCA1LjQ5MTAzIDEwLjMzNDcgMi4yNjQ0NEwxMC44MDI0IDIuMDg3NEMxMi4wNjcyIDUuNDI4MTUgMTIuMDY1OSA5LjU4Mzk0IDEwLjc5ODUgMTIuOTIzMUwxMC4zMzEgMTIuNzQ1NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjRcIixkOlwiTTExLjAxNTUgMTIuMjk4NkMxMS45OTM4IDkuMjk3NDQgMTEuOTk0OCA1LjcxMjk2IDExLjAxODQgMi43MTA2N0wxMS40OTM5IDIuNTU2MDNDMTIuNTAzIDUuNjU4OSAxMi41MDIgOS4zNTE3OCAxMS40OTA5IDEyLjQ1MzVMMTEuMDE1NSAxMi4yOTg2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuNDVcIixkOlwiTTExLjcyMTQgMTEuNjY4QzEyLjQyNTQgOS4wMTMwMyAxMi40MjYyIDUuOTk2OTEgMTEuNzIzNyAzLjM0MTE2TDEyLjIwNzEgMy4yMTMyOUMxMi45MzE4IDUuOTUyOTIgMTIuOTMxIDkuMDU3MjggMTIuMjA0NyAxMS43OTYxTDExLjcyMTQgMTEuNjY4WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuNVwiLGQ6XCJNMTIuNDQzMiAxMC43NTJDMTIuODUyNCA4LjYzNzYyIDEyLjg1MjMgNi4zNjA4OSAxMi40NDI5IDQuMjQ2NkwxMi45MzM4IDQuMTUxNTVDMTMuMzU1MyA2LjMyODYxIDEzLjM1NTQgOC42Njk4NSAxMi45MzQxIDEwLjg0N0wxMi40NDMyIDEwLjc1MlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHlyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0wLjg3NzA3NSA3LjQ5OTg4QzAuODc3MDc1IDMuODQyMTkgMy44NDIyMiAwLjg3NzA0NSA3LjQ5OTkxIDAuODc3MDQ1QzExLjE1NzYgMC44NzcwNDUgMTQuMTIyNyAzLjg0MjE5IDE0LjEyMjcgNy40OTk4OEMxNC4xMjI3IDExLjE1NzUgMTEuMTU3NiAxNC4xMjI3IDcuNDk5OTEgMTQuMTIyN0MzLjg0MjIyIDE0LjEyMjcgMC44NzcwNzUgMTEuMTU3NSAwLjg3NzA3NSA3LjQ5OTg4Wk03LjQ5OTkxIDEuODI3MDRDNC4zNjY4OSAxLjgyNzA0IDEuODI3MDggNC4zNjY4NiAxLjgyNzA4IDcuNDk5ODhDMS44MjcwOCAxMC42MzI5IDQuMzY2ODkgMTMuMTcyNyA3LjQ5OTkxIDEzLjE3MjdDMTAuNjMyOSAxMy4xNzI3IDEzLjE3MjcgMTAuNjMyOSAxMy4xNzI3IDcuNDk5ODhDMTMuMTcyNyA0LjM2Njg2IDEwLjYzMjkgMS44MjcwNCA3LjQ5OTkxIDEuODI3MDRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4wNVwiLGQ6XCJNMTIuMTYxOSAzLjg1MTgyQzguMzU4MTcgNC44ODkxOCA0Ljg4OTM2IDguMzU4IDMuODUxOTkgMTIuMTYxN0wzLjM2OTYgMTIuMDMwMUM0LjQ1MzU2IDguMDU1NjQgOC4wNTU4MSA0LjQ1MzM5IDEyLjAzMDMgMy4zNjk0M0wxMi4xNjE5IDMuODUxODJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4xXCIsZDpcIk0xMS44ODA3IDMuNDI3MDdDOC4wMzQ0MSA0LjUwNTQyIDQuNTA1NjEgOC4wMzQyMiAzLjQyNzI2IDExLjg4MDVMMi45NDU4MiAxMS43NDU2QzQuMDcxMjkgNy43MzEyMSA3LjczMTQgNC4wNzExIDExLjc0NTggMi45NDU2M0wxMS44ODA3IDMuNDI3MDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4xNVwiLGQ6XCJNMTEuNTIwMSAzLjAyNTU2QzcuNjkwOTIgNC4xNjE5OSA0LjE2Nzc5IDcuNjgzMjMgMy4wMjgwNSAxMS41MTJMMi41NDg4MyAxMS4zNjk0QzMuNzM2NzYgNy4zNzg2OSA3LjM4NjU5IDMuNzMwNzYgMTEuMzc3OCAyLjU0NjIzTDExLjUyMDEgMy4wMjU1NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjJcIixkOlwiTTExLjA0NjggMi42NjE2OUM3LjMxMTE3IDMuODc2NjQgMy44NzkxOCA3LjMwNzkgMi42NjI5OCAxMS4wNDM0TDIuMTg3NTQgMTAuODg4NkMzLjQ1MzI0IDcuMDAxMDkgNy4wMDQ0NSAzLjQ1MDYyIDEwLjg5MjEgMi4xODYyMUwxMS4wNDY4IDIuNjYxNjlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4yNVwiLGQ6XCJNMTAuNTIwMSAyLjMyMzY1QzYuOTIwOTEgMy42MTQ0NyAzLjYyMzkxIDYuOTA4NzYgMi4zMjg0NSAxMC41MDczTDEuODU4IDEwLjMzOEMzLjIwMzk4IDYuNTk5MDkgNi42MTE1NSAzLjE5NDI0IDEwLjM1MTMgMS44NTMwMUwxMC41MjAxIDIuMzIzNjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4zXCIsZDpcIk05LjkwMjIyIDIuMDMxMjJDNi41MDAwMyAzLjM5NDY1IDMuMzk5NjggNi40OTM2NyAyLjAzMzk5IDkuODk1NTFMMS41Njk5OCA5LjcwOTI0QzIuOTg2NTEgNi4xODA3NiA2LjE4NzI4IDIuOTgxMzMgOS43MTYyMiAxLjU2NzFMOS45MDIyMiAyLjAzMTIyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMzVcIixkOlwiTTkuMjA3MjcgMS43ODg3M0M2LjA2MTM2IDMuMjAzNDkgMy4yMTEwMyA2LjA1MjAzIDEuNzkzMzEgOS4xOTczOEwxLjMzNzQ3IDguOTkxOTJDMi44MDUzNiA1LjczNTI4IDUuNzQ0ODUgMi43OTc2IDkuMDAyMiAxLjMzMjcyTDkuMjA3MjcgMS43ODg3M1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjRcIixkOlwiTTguNDA3MTMgMS42MjA4NUM1LjU5MzIzIDMuMDUxMTcgMy4wNTc5NCA1LjU4NTA5IDEuNjI1NDQgOC4zOTg0N0wxLjE3OTg3IDguMTcxNkMyLjY2MDM2IDUuMjYzOTcgNS4yNzIzMiAyLjY1MzQgOC4xODA1NyAxLjE3NTEzTDguNDA3MTMgMS42MjA4NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjQ1XCIsZDpcIk03LjQ2MjA3IDEuNTY3NDdDNS4wODY4OSAyLjk0Njk1IDIuOTUzNjIgNS4wNzkxMiAxLjU3MjQ5IDcuNDUzNzlMMS4xNDAyOCA3LjIwMjQxQzIuNTY1MDMgNC43NTI3MyA0Ljc2MDcgMi41NTgxOCA3LjIxMDk2IDEuMTM1MUw3LjQ2MjA3IDEuNTY3NDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi41XCIsZDpcIk02LjMwNDA3IDEuNzA0ODdDNC41MTk2NCAyLjkxMDYzIDIuOTA5ODMgNC41MjA2MSAxLjcwNDMgNi4zMDUxM0wxLjI4OTk4IDYuMDI1MjRDMi41MzEzIDQuMTg3NzMgNC4xODY3MyAyLjUzMjE0IDYuMDI0MTMgMS4yOTA1OUw2LjMwNDA3IDEuNzA0ODdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx3cj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40OTk5MSAwLjg3NzA0NUMzLjg0MjIyIDAuODc3MDQ1IDAuODc3MDc1IDMuODQyMTkgMC44NzcwNzUgNy40OTk4OEMwLjg3NzA3NSA5LjE0ODggMS40Nzk2OSAxMC42NTcgMi40NzY3IDExLjgxNjJMMS42NDY0NyAxMi42NDY0QzEuNDUxMjEgMTIuODQxNyAxLjQ1MTIxIDEzLjE1ODMgMS42NDY0NyAxMy4zNTM1QzEuODQxNzMgMTMuNTQ4OCAyLjE1ODMyIDEzLjU0ODggMi4zNTM1OCAxMy4zNTM1TDMuMTgzODMgMTIuNTIzM0M0LjM0MzAyIDEzLjUyMDIgNS44NTExIDE0LjEyMjcgNy40OTk5MSAxNC4xMjI3QzExLjE1NzYgMTQuMTIyNyAxNC4xMjI3IDExLjE1NzUgMTQuMTIyNyA3LjQ5OTg4QzE0LjEyMjcgNS44NTEwNyAxMy41MjAyIDQuMzQyOTggMTIuNTIzMyAzLjE4MzhMMTMuMzUzNiAyLjM1MzU1QzEzLjU0ODggMi4xNTgyOSAxMy41NDg4IDEuODQxNyAxMy4zNTM2IDEuNjQ2NDRDMTMuMTU4MyAxLjQ1MTE4IDEyLjg0MTcgMS40NTExOCAxMi42NDY1IDEuNjQ2NDRMMTEuODE2MiAyLjQ3NjY3QzEwLjY1NyAxLjQ3OTY2IDkuMTQ4ODMgMC44NzcwNDUgNy40OTk5MSAwLjg3NzA0NVpNMTEuMTQyMyAzLjE1MDY1QzEwLjE1NjggMi4zMjQ0OSA4Ljg4NjQ0IDEuODI3MDQgNy40OTk5MSAxLjgyNzA0QzQuMzY2ODkgMS44MjcwNCAxLjgyNzA4IDQuMzY2ODYgMS44MjcwOCA3LjQ5OTg4QzEuODI3MDggOC44ODY0MSAyLjMyNDUyIDEwLjE1NjggMy4xNTA2OSAxMS4xNDIyTDExLjE0MjMgMy4xNTA2NVpNMy44NTc4MSAxMS44NDkzQzQuODQzMjIgMTIuNjc1MyA2LjExMzQ4IDEzLjE3MjcgNy40OTk5MSAxMy4xNzI3QzEwLjYzMjkgMTMuMTcyNyAxMy4xNzI3IDEwLjYzMjkgMTMuMTcyNyA3LjQ5OTg4QzEzLjE3MjcgNi4xMTM0NSAxMi42NzU0IDQuODQzMTkgMTEuODQ5MyAzLjg1Nzc4TDMuODU3ODEgMTEuODQ5M1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjA1XCIsZDpcIk02Ljc4Mjk2IDEzLjM3NkM4LjczOTA0IDkuOTUyODQgOC43MzkwNCA1LjA0NzE5IDYuNzgyOTYgMS42MjQwNUw3LjIxNzA4IDEuMzc1OThDOS4yNjEgNC45NTI4MyA5LjI2MSAxMC4wNDcyIDcuMjE3MDggMTMuNjI0TDYuNzgyOTYgMTMuMzc2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMVwiLGQ6XCJNNy4yODIwNCAxMy40Nzc1QzkuMjM5MjkgOS45OTUyMyA5LjIzOTI5IDUuMDA0NzUgNy4yODIwNCAxLjUyMjQ4TDcuNzE3OTEgMS4yNzc1QzkuNzYwNjcgNC45MTE5IDkuNzYwNjcgMTAuMDg4MSA3LjcxNzkxIDEzLjcyMjVMNy4yODIwNCAxMy40Nzc1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMTVcIixkOlwiTTcuODIwOTggMTMuNTA2NEM5LjcyNTAyIDkuOTk1MjMgOS43MjYzNiA1LjAxNDExIDcuODI0OTIgMS41MDA4NEw4LjI2NDY1IDEuMjYyODVDMTAuMjQ2NSA0LjkyNDY2IDEwLjI0NTEgMTAuMDg1IDguMjYwNTIgMTMuNzQ0OEw3LjgyMDk4IDEzLjUwNjRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4yXCIsZDpcIk04LjQxMjg0IDEzLjQyOUMxMC4xOTUyIDkuOTI4NDIgMTAuMTk1NyA1LjA3NTM3IDguNDE0MzUgMS41NzQwMkw4Ljg1OTk5IDEuMzQ3MjlDMTAuNzEzOSA0Ljk5MTEzIDEwLjcxMzMgMTAuMDEyOCA4Ljg1ODQxIDEzLjY1NTlMOC40MTI4NCAxMy40MjlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4yNVwiLGQ6XCJNOS4wMjQ0MSAxMy4yOTU2QzEwLjY1NjcgOS44Mzc5IDEwLjY1ODYgNS4xNzcxNSA5LjAzMDA1IDEuNzE2NTZMOS40ODI0NSAxLjUwMzY2QzExLjE3NDUgNS4wOTkxOSAxMS4xNzI2IDkuOTE2MjkgOS40NzY1NyAxMy41MDkxTDkuMDI0NDEgMTMuMjk1NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjNcIixkOlwiTTkuNjY4MDkgMTMuMDY1NUMxMS4xMDk3IDkuNjk1NzIgMTEuMTEwNyA1LjMxMjEgOS42NzA4OCAxLjk0MDk1TDEwLjEzMDcgMS43NDQ1N0MxMS42MjQxIDUuMjQxMjEgMTEuNjIzMSA5Ljc2NjgzIDEwLjEyNzggMTMuMjYyMkw5LjY2ODA5IDEzLjA2NTVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4zNVwiLGQ6XCJNMTAuMzMxIDEyLjc0NTZDMTEuNTU1MSA5LjUyMDczIDExLjU1NjQgNS40OTEwMyAxMC4zMzQ3IDIuMjY0NDRMMTAuODAyNCAyLjA4NzRDMTIuMDY3MiA1LjQyODE1IDEyLjA2NTkgOS41ODM5NCAxMC43OTg1IDEyLjkyMzFMMTAuMzMxIDEyLjc0NTZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi40XCIsZDpcIk0xMS4wMTU1IDEyLjI5ODZDMTEuOTkzOCA5LjI5NzQ0IDExLjk5NDggNS43MTI5NiAxMS4wMTg0IDIuNzEwNjdMMTEuNDkzOSAyLjU1NjAzQzEyLjUwMyA1LjY1ODkgMTIuNTAyIDkuMzUxNzggMTEuNDkwOSAxMi40NTM1TDExLjAxNTUgMTIuMjk4NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjQ1XCIsZDpcIk0xMS43MjE0IDExLjY2OEMxMi40MjU0IDkuMDEzMDMgMTIuNDI2MiA1Ljk5NjkxIDExLjcyMzcgMy4zNDExNkwxMi4yMDcxIDMuMjEzMjlDMTIuOTMxOCA1Ljk1MjkyIDEyLjkzMSA5LjA1NzI4IDEyLjIwNDcgMTEuNzk2MUwxMS43MjE0IDExLjY2OFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjVcIixkOlwiTTEyLjQ0MzIgMTAuNzUyQzEyLjg1MjQgOC42Mzc2MiAxMi44NTIzIDYuMzYwODkgMTIuNDQyOSA0LjI0NjZMMTIuOTMzOCA0LjE1MTU1QzEzLjM1NTMgNi4zMjg2MSAxMy4zNTU0IDguNjY5ODUgMTIuOTM0MSAxMC44NDdMMTIuNDQzMiAxMC43NTJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxicj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse29wYWNpdHk6XCIuMDVcIixkOlwiTTEyLjEzOTggMy44ODYxNkMxMy44NTUzIDQuOTQxNTkgMTUgNi44MzcgMTUgOC45OTk5OUMxNSAxMi4zMTM3IDEyLjMxMzcgMTUgOS4wMDAwMSAxNUM2Ljg0MzUgMTUgNC45NTI5NSAxMy44NjIxIDMuODk1NjkgMTIuMTU1Mkw0LjMyMDc1IDExLjg5MTlDNS4yOTA2OSAxMy40NTc4IDcuMDIzNzUgMTQuNSA5LjAwMDAxIDE0LjVDMTIuMDM3NSAxNC41IDE0LjUgMTIuMDM3NSAxNC41IDguOTk5OTlDMTQuNSA3LjAxNzggMTMuNDUxNiA1LjI4MDI2IDExLjg3NzggNC4zMTIwMkwxMi4xMzk4IDMuODg2MTZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4yXCIsZDpcIk0xMi44NTEgNS4wNzMyQzEzLjg2ODQgNi4wNzEwNSAxNC41IDcuNDYxOTggMTQuNSA4Ljk5OTk5QzE0LjUgMTIuMDM3NSAxMi4wMzc2IDE0LjUgOS4wMDAwMiAxNC41QzcuNDYyMTQgMTQuNSA2LjA3MTMxIDEzLjg2ODUgNS4wNzM0OCAxMi44NTEyTDUuNDMwNDIgMTIuNTAxMUM2LjMzODA5IDEzLjQyNjQgNy42MDE4NSAxNCA5LjAwMDAyIDE0QzExLjc2MTQgMTQgMTQgMTEuNzYxNCAxNCA4Ljk5OTk5QzE0IDcuNjAxNyAxMy40MjY0IDYuMzM3ODUgMTIuNTAwOSA1LjQzMDE3TDEyLjg1MSA1LjA3MzJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4zNVwiLGQ6XCJNMTMuMzAyMSA2LjQ1MDcxQzEzLjc0NTUgNy4xOTczNyAxNCA4LjA2OTM0IDE0IDlDMTQgMTEuNzYxNCAxMS43NjE0IDE0IDkuMDAwMDEgMTRDOC4wNDg2NyAxNCA3LjE1ODY3IDEzLjczNDEgNi40MDExOCAxMy4yNzIzTDYuNjYxNDEgMTIuODQ1NEM3LjM0Mjc0IDEzLjI2MDcgOC4xNDMwNSAxMy41IDkuMDAwMDEgMTMuNUMxMS40ODUzIDEzLjUgMTMuNSAxMS40ODUzIDEzLjUgOUMxMy41IDguMTYxNjQgMTMuMjcxIDcuMzc3NTMgMTIuODcyMiA2LjcwNTk4TDEzLjMwMjEgNi40NTA3MVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjVcIixkOlwiTTEzLjM3NDQgNy45NDAyMUMxMy40NTY2IDguMjgwMyAxMy41IDguNjM1MjQgMTMuNSA5QzEzLjUgMTEuNDg1MyAxMS40ODUzIDEzLjUgOS4wMDAwMiAxMy41QzguNjExMDMgMTMuNSA4LjIzMzIxIDEzLjQ1MDYgNy44NzI2NyAxMy4zNTc2TDcuOTk3NTggMTIuODczNEM4LjMxNzY3IDEyLjk1NiA4LjY1MzUyIDEzIDkuMDAwMDIgMTNDMTEuMjA5MSAxMyAxMyAxMS4yMDkxIDEzIDlDMTMgOC42NzUwNyAxMi45NjEzIDguMzU5NTIgMTIuODg4NCA4LjA1NzU2TDEzLjM3NDQgNy45NDAyMVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtvcGFjaXR5OlwiLjY1XCIsZDpcIk0xMi45MTU1IDkuODIxMzJDMTIuNTg5OCAxMS4zODEzIDExLjM1NjIgMTIuNjA3MiA5Ljc5MjAzIDEyLjkyMTVMOS42OTM1MyAxMi40MzEzQzExLjA2MTMgMTIuMTU2NSAxMi4xNDEzIDExLjA4MzMgMTIuNDI2MSA5LjcxOTEzTDEyLjkxNTUgOS44MjEzMlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuMjc3MSA3LjUwMjUyQzEuMjc3MSA0LjA2NDU1IDQuMDY0MTMgMS4yNzc1MyA3LjUwMjA5IDEuMjc3NTNDMTAuOTQgMS4yNzc1MyAxMy43MjcxIDQuMDY0NTUgMTMuNzI3MSA3LjUwMjUyQzEzLjcyNzEgMTAuOTQwNSAxMC45NCAxMy43Mjc1IDcuNTAyMDkgMTMuNzI3NUM0LjA2NDEyIDEzLjcyNzUgMS4yNzcxIDEwLjk0MDUgMS4yNzcxIDcuNTAyNTJaTTcuNTAyMDkgMi4yMjc1MkM0LjU4ODggMi4yMjc1MiAyLjIyNzEgNC41ODkyMiAyLjIyNzEgNy41MDI1MkMyLjIyNzEgMTAuNDE1OCA0LjU4ODggMTIuNzc3NSA3LjUwMjA5IDEyLjc3NzVDMTAuNDE1NCAxMi43Nzc1IDEyLjc3NzEgMTAuNDE1OCAxMi43NzcxIDcuNTAyNTJDMTIuNzc3MSA0LjU4OTIyIDEwLjQxNTQgMi4yMjc1MiA3LjUwMjA5IDIuMjI3NTJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx4cj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNSA3LjUwMDAzQzUgOC4zMjg0NSA0LjMyODQzIDkuMDAwMDMgMy41IDkuMDAwMDNDMi42NzE1NyA5LjAwMDAzIDIgOC4zMjg0NSAyIDcuNTAwMDNDMiA2LjY3MTYgMi42NzE1NyA2LjAwMDAzIDMuNSA2LjAwMDAzQzQuMzI4NDMgNi4wMDAwMyA1IDYuNjcxNiA1IDcuNTAwMDNaTTUuNzEzMTMgOC42NjM4OEM1LjI5NDQ1IDkuNDU4MzggNC40NjA0OCAxMCAzLjUgMTBDMi4xMTkyOSAxMCAxIDguODgwNzQgMSA3LjUwMDAzQzEgNi4xMTkzMSAyLjExOTI5IDUuMDAwMDMgMy41IDUuMDAwMDNDNC40NjA0OCA1LjAwMDAzIDUuMjk0NDUgNS41NDE2NyA1LjcxMzEzIDYuMzM2MTZMOS4xMDQyNCA0LjIxNjcxQzkuMDM2NDMgMy45ODk2OCA5IDMuNzQ5MTEgOSAzLjUwMDAzQzkgMi4xMTkzMiAxMC4xMTkzIDEuMDAwMDMgMTEuNSAxLjAwMDAzQzEyLjg4MDcgMS4wMDAwMyAxNCAyLjExOTMyIDE0IDMuNTAwMDNDMTQgNC44ODA3NCAxMi44ODA3IDYuMDAwMDMgMTEuNSA2LjAwMDAzQzEwLjY5MTUgNi4wMDAwMyA5Ljk3MjY0IDUuNjE2MjQgOS41MTU2NiA1LjAyMDlMNS45ODUzIDcuMjI3MzhDNS45OTUwMiA3LjMxNjkyIDYgNy40MDc4OSA2IDcuNTAwMDNDNiA3LjU5MjE2IDUuOTk1MDIgNy42ODMxMiA1Ljk4NTMgNy43NzI2N0w5LjUxNTY3IDkuOTc5MTVDOS45NzI2NSA5LjM4MzgyIDEwLjY5MTUgOS4wMDAwMyAxMS41IDkuMDAwMDNDMTIuODgwNyA5LjAwMDAzIDE0IDEwLjExOTMgMTQgMTEuNUMxNCAxMi44ODA3IDEyLjg4MDcgMTQgMTEuNSAxNEMxMC4xMTkzIDE0IDkgMTIuODgwNyA5IDExLjVDOSAxMS4yNTA5IDkuMDM2NDMgMTEuMDEwNCA5LjEwNDI1IDEwLjc4MzNMNS43MTMxMyA4LjY2Mzg4Wk0xMS41IDUuMDAwMDNDMTIuMzI4NCA1LjAwMDAzIDEzIDQuMzI4NDYgMTMgMy41MDAwM0MxMyAyLjY3MTYgMTIuMzI4NCAyLjAwMDAzIDExLjUgMi4wMDAwM0MxMC42NzE2IDIuMDAwMDMgMTAgMi42NzE2IDEwIDMuNTAwMDNDMTAgNC4zMjg0NiAxMC42NzE2IDUuMDAwMDMgMTEuNSA1LjAwMDAzWk0xMyAxMS41QzEzIDEyLjMyODUgMTIuMzI4NCAxMyAxMS41IDEzQzEwLjY3MTYgMTMgMTAgMTIuMzI4NSAxMCAxMS41QzEwIDEwLjY3MTYgMTAuNjcxNiAxMCAxMS41IDEwQzEyLjMyODQgMTAgMTMgMTAuNjcxNiAxMyAxMS41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sX3I9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuNSA1LjAwMDA2QzMuMjIzODYgNS4wMDAwNiAzIDUuMjIzOTIgMyA1LjUwMDA2TDMgMTEuNTAwMUMzIDExLjc3NjIgMy4yMjM4NiAxMi4wMDAxIDMuNSAxMi4wMDAxTDExLjUgMTIuMDAwMUMxMS43NzYxIDEyLjAwMDEgMTIgMTEuNzc2MiAxMiAxMS41MDAxTDEyIDUuNTAwMDZDMTIgNS4yMjM5MiAxMS43NzYxIDUuMDAwMDYgMTEuNSA1LjAwMDA2TDEwLjI1IDUuMDAwMDZDOS45NzM4NiA1LjAwMDA2IDkuNzUgNC43NzYyIDkuNzUgNC41MDAwNkM5Ljc1IDQuMjIzOTIgOS45NzM4NiA0LjAwMDA2IDEwLjI1IDQuMDAwMDZMMTEuNSA0LjAwMDA2QzEyLjMyODQgNC4wMDAwNiAxMyA0LjY3MTYzIDEzIDUuNTAwMDZMMTMgMTEuNTAwMUMxMyAxMi4zMjg1IDEyLjMyODQgMTMuMDAwMSAxMS41IDEzLjAwMDFMMy41IDEzLjAwMDFDMi42NzE1NyAxMy4wMDAxIDIgMTIuMzI4NSAyIDExLjUwMDFMMiA1LjUwMDA2QzIgNC42NzE2MyAyLjY3MTU3IDQuMDAwMDYgMy41IDQuMDAwMDZMNC43NSA0LjAwMDA2QzUuMDI2MTQgNC4wMDAwNiA1LjI1IDQuMjIzOTIgNS4yNSA0LjUwMDA2QzUuMjUgNC43NzYyIDUuMDI2MTQgNS4wMDAwNiA0Ljc1IDUuMDAwMDZMMy41IDUuMDAwMDZaTTcgMS42MzY0TDUuNTY4MiAzLjA2ODJDNS4zOTI0NiAzLjI0MzkzIDUuMTA3NTQgMy4yNDM5MyA0LjkzMTggMy4wNjgyQzQuNzU2MDcgMi44OTI0NiA0Ljc1NjA3IDIuNjA3NTQgNC45MzE4IDIuNDMxOEw3LjE4MTggMC4xODE4MDJDNy4yNjYxOSAwLjA5NzQxIDcuMzgwNjUgMC4wNDk5OTkgNy41IDAuMDQ5OTk5QzcuNjE5MzUgMC4wNDk5OTkgNy43MzM4MSAwLjA5NzQxIDcuODE4MiAwLjE4MTgwMkwxMC4wNjgyIDIuNDMxOEMxMC4yNDM5IDIuNjA3NTQgMTAuMjQzOSAyLjg5MjQ2IDEwLjA2ODIgMy4wNjgyQzkuODkyNDYgMy4yNDM5MyA5LjYwNzU0IDMuMjQzOTMgOS40MzE4IDMuMDY4Mkw4IDEuNjM2NEw4IDguNUM4IDguNzc2MTQgNy43NzYxNCA5IDcuNSA5QzcuMjIzODYgOSA3IDguNzc2MTQgNyA4LjVMNyAxLjYzNjRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxPcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTIuMzUzNiAxLjE0NjQ1QzEyLjE1ODMgMC45NTExODQgMTEuODQxNyAwLjk1MTE4NCAxMS42NDY0IDEuMTQ2NDVDMTEuNDUxMiAxLjM0MTcxIDExLjQ1MTIgMS42NTgyOSAxMS42NDY0IDEuODUzNTVMMTIuNzkyOSAzSDEyQzEwLjcwMzcgMyA5LjcxMTExIDMuNTg0MjMgOC44NzI0OCA0LjM4OTMxQzguMjAwNjUgNS4wMzQyNyA3LjU5MzQ5IDUuODU2ODQgNi45OTQ2MSA2LjY2ODJDNi44NjI4NyA2Ljg0NjY4IDYuNzMxNTQgNy4wMjQ2MiA2LjYgNy4yQzUuMTA4NzQgOS4xODgzNSAzLjQ5MDM3IDExIDAuNSAxMUMwLjIyMzg1OCAxMSAwIDExLjIyMzkgMCAxMS41QzAgMTEuNzc2MSAwLjIyMzg1OCAxMiAwLjUgMTJDNC4wMDk2MyAxMiA1Ljg5MTI2IDkuODExNjUgNy40IDcuOEM3LjU0MzY3IDcuNjA4NDUgNy42ODMyIDcuNDE5NjIgNy44MTk5NiA3LjIzNDU0TDcuODIwMDUgNy4yMzQ0M0w3LjgyMDA2IDcuMjM0NDFDOC40MTY3NCA2LjQyNjk1IDguOTYwNjkgNS42OTA4NSA5LjU2NTAyIDUuMTEwNjlDMTAuMjg4OSA0LjQxNTc3IDExLjA0NjMgNCAxMiA0SDEyLjc5MjlMMTEuNjQ2NCA1LjE0NjQ1QzExLjQ1MTIgNS4zNDE3MSAxMS40NTEyIDUuNjU4MjkgMTEuNjQ2NCA1Ljg1MzU1QzExLjg0MTcgNi4wNDg4MiAxMi4xNTgzIDYuMDQ4ODIgMTIuMzUzNiA1Ljg1MzU1TDE0LjM1MzYgMy44NTM1NUMxNC41NDg4IDMuNjU4MjkgMTQuNTQ4OCAzLjM0MTcxIDE0LjM1MzYgMy4xNDY0NUwxMi4zNTM2IDEuMTQ2NDVaTTAuNSAzQzMuMzUyNzggMyA1LjEyOTkyIDQuNDQ1ODggNi41MDU0OCA2LjA2NzQ2TDYuMzc2MiA2LjI0MjY2QzYuMjQ4MyA2LjQxNjEgNi4xMjI5MyA2LjU4NjA5IDYgNi43NUM1Ljk2Mzk3IDYuNzk4MDQgNS45Mjc5OCA2Ljg0NTgxIDUuODkyIDYuODkzMzFDNC41NzM0OCA1LjI5MzA2IDMuMDI2MzcgNCAwLjUgNEMwLjIyMzg1OCA0IDAgMy43NzYxNCAwIDMuNUMwIDMuMjIzODYgMC4yMjM4NTggMyAwLjUgM1pNOC44NzI0OCAxMC42MTA3QzguMzcyODQgMTAuMTMxIDcuOTA4OTcgOS41NTMxNCA3LjQ1NzY3IDguOTU0NjhDNy42NDY4OCA4LjcxNjkzIDcuODI3MDQgOC40ODA2MSA4IDguMjVMOC4wODk4NyA4LjEyOTg3QzguNTg0MTIgOC43OTQwMiA5LjA1Mjg4IDkuMzk3NjYgOS41NjUwMiA5Ljg4OTMxQzEwLjI4ODkgMTAuNTg0MiAxMS4wNDYzIDExIDEyIDExSDEyLjc5MjlMMTEuNjQ2NCA5Ljg1MzU1QzExLjQ1MTIgOS42NTgyOSAxMS40NTEyIDkuMzQxNzEgMTEuNjQ2NCA5LjE0NjQ1QzExLjg0MTcgOC45NTExOCAxMi4xNTgzIDguOTUxMTggMTIuMzUzNiA5LjE0NjQ1TDE0LjM1MzYgMTEuMTQ2NEMxNC41NDg4IDExLjM0MTcgMTQuNTQ4OCAxMS42NTgzIDE0LjM1MzYgMTEuODUzNkwxMi4zNTM2IDEzLjg1MzZDMTIuMTU4MyAxNC4wNDg4IDExLjg0MTcgMTQuMDQ4OCAxMS42NDY0IDEzLjg1MzZDMTEuNDUxMiAxMy42NTgzIDExLjQ1MTIgMTMuMzQxNyAxMS42NDY0IDEzLjE0NjRMMTIuNzkyOSAxMkgxMkMxMC43MDM3IDEyIDkuNzExMTEgMTEuNDE1OCA4Ljg3MjQ4IDEwLjYxMDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxMcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTEuNSAzLjA0OTk5QzExLjc0ODUgMy4wNDk5OSAxMS45NSAzLjI1MTQ2IDExLjk1IDMuNDk5OTlWNy40OTk5OUMxMS45NSA3Ljc0ODUyIDExLjc0ODUgNy45NDk5OSAxMS41IDcuOTQ5OTlDMTEuMjUxNSA3Ljk0OTk5IDExLjA1IDcuNzQ4NTIgMTEuMDUgNy40OTk5OVY0LjU4NjM5TDQuNTg2MzggMTEuMDVINy40OTk5OUM3Ljc0ODUyIDExLjA1IDcuOTQ5OTkgMTEuMjUxNSA3Ljk0OTk5IDExLjVDNy45NDk5OSAxMS43NDg1IDcuNzQ4NTIgMTEuOTUgNy40OTk5OSAxMS45NUwzLjQ5OTk5IDExLjk1QzMuMzgwNjQgMTEuOTUgMy4yNjYxOCAxMS45MDI2IDMuMTgxNzkgMTEuODE4MkMzLjA5NzQgMTEuNzMzOCAzLjA0OTk5IDExLjYxOTMgMy4wNDk5OSAxMS41TDMuMDQ5OTkgNy40OTk5OUMzLjA0OTk5IDcuMjUxNDYgMy4yNTE0NiA3LjA0OTk5IDMuNDk5OTkgNy4wNDk5OUMzLjc0ODUyIDcuMDQ5OTkgMy45NDk5OSA3LjI1MTQ2IDMuOTQ5OTkgNy40OTk5OUwzLjk0OTk5IDEwLjQxMzZMMTAuNDEzNiAzLjk0OTk5TDcuNDk5OTkgMy45NDk5OUM3LjI1MTQ2IDMuOTQ5OTkgNy4wNDk5OSAzLjc0ODUyIDcuMDQ5OTkgMy40OTk5OUM3LjA0OTk5IDMuMjUxNDYgNy4yNTE0NiAzLjA0OTk5IDcuNDk5OTkgMy4wNDk5OUwxMS41IDMuMDQ5OTlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxFcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41MzczMSAwLjgyNjg3M0M3LjUxMjUgMC44MjQzOTIgNy40ODc1IDAuODI0MzkyIDcuNDYyNjkgMC44MjY4NzNMMy45NjI2OSAxLjE3Njg3QzMuODU2NzIgMS4xODc0NyAzLjc2MDI1IDEuMjQyNjIgMy42OTczNiAxLjMyODU3TDAuNjk5NzcxIDUuNDI1MjhDMC42NTQwNDYgNS40ODYyNyAwLjYyNjQ3IDUuNTYxNjUgMC42MjUwNTcgNS42NDM0QzAuNjI1MDE5IDUuNjQ1NiAwLjYyNSA1LjY0NzgxIDAuNjI1IDUuNjUwMDFDMC42MjUgNS42NTA1MiAwLjYyNTAwMSA1LjY1MTAzIDAuNjI1MDAzIDUuNjUxNTNDMC42MjUzNjMgNS43NDIzNyAwLjY1ODAyMSA1LjgyNTU5IDAuNzEyMDg3IDUuODkwM0w3LjIxMDQyIDEzLjc4ODNDNy4yODE2NSAxMy44NzQ5IDcuMzg3ODkgMTMuOTI1IDcuNSAxMy45MjVDNy42MTIxMSAxMy45MjUgNy43MTgzNSAxMy44NzQ5IDcuNzg5NTggMTMuNzg4M0wxNC4yODc5IDUuODkwMzFDMTQuMzQyIDUuODI1NiAxNC4zNzQ2IDUuNzQyMzcgMTQuMzc1IDUuNjUxNTNDMTQuMzc1IDUuNjUxMDMgMTQuMzc1IDUuNjUwNTIgMTQuMzc1IDUuNjUwMDFDMTQuMzc1IDUuNjQ4NDkgMTQuMzc1IDUuNjQ2OTcgMTQuMzc1IDUuNjQ1NDVDMTQuMzc0OSA1LjYzOTYzIDE0LjM3NDcgNS42MzM4MiAxNC4zNzQ0IDUuNjI4MDFDMTQuMzcgNS41NTIxOSAxNC4zNDMxIDUuNDgyNDIgMTQuMzAwMiA1LjQyNTI3TDExLjMwMjYgMS4zMjg1N0MxMS4yMzk3IDEuMjQyNjIgMTEuMTQzMyAxLjE4NzQ3IDExLjAzNzMgMS4xNzY4N0w3LjUzNzMxIDAuODI2ODczWk0xMC45MjUgNS4yNzUwMVY1LjI1MjM2TDEwLjkyMjMgNS4yNzUwMUgxMC45MjVaTTEwLjkzNDIgNS4xNzQ5OEgxMy4xODc3TDExLjI0OTUgMi41MjYxTDEwLjkzNDIgNS4xNzQ5OFpNMTAuNTcwNyAxLjg4Mzk1TDguMDQ0MzIgMS42MzEzMUwxMC4xNzQ3IDUuMjEwMzRMMTAuNTcwNyAxLjg4Mzk1Wk02Ljk1NTY4IDEuNjMxMzFMNC40MjkzMSAxLjg4Mzk1TDQuODI1MzEgNS4yMTAzNEw2Ljk1NTY4IDEuNjMxMzFaTTMuNzUwNDYgMi41MjYxTDEuODEyMjYgNS4xNzQ5OEg0LjA2NThMMy43NTA0NiAyLjUyNjFaTTEuNzk0MTYgNi4wMjUwMUw2Ljc1ODYxIDEyLjA1ODdMNC4yMjM3MSA2LjA2NjlDNC4yMTc4NyA2LjA1MzEgNC4yMTMxNCA2LjAzOTEgNC4yMDk0OSA2LjAyNTAxSDEuNzk0MTZaTTUuMTUwNTUgNi4wMjUwMUw3LjQ5OTk5IDEyLjEwODVMOS44NDk0MyA2LjAyNTAxSDkuNzg2ODFINS4yMTMxOUg1LjE1MDU1Wk0xMC43OTA1IDYuMDI1MDFDMTAuNzg2OSA2LjAzOTEgMTAuNzgyMSA2LjA1MzEgMTAuNzc2MyA2LjA2NjlMOC4yNDEzOSAxMi4wNTg3TDEzLjIwNTggNi4wMjUwMUgxMC43OTA1Wk03LjUgMi4xODMxN0w5LjM0MDM4IDUuMjc1MDFINS42NTk2Mkw3LjUgMi4xODMxN1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFNyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjEwODc2IDE0TDkuNDY1ODIgMUgxMC44MTc4TDUuNDYwNzQgMTRINC4xMDg3NlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGpyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMC4zMDA0IDcuNDk5OTFDMTAuMzAwNCA4LjQ5NDMgOS40OTQyNiA5LjMwMDQxIDguNDk5ODggOS4zMDA0MUM3LjUwNTQ5IDkuMzAwNDEgNi42OTkzOCA4LjQ5NDMgNi42OTkzOCA3LjQ5OTkxQzYuNjk5MzggNi41MDU1MyA3LjUwNTQ5IDUuNjk5NDIgOC40OTk4OCA1LjY5OTQyQzkuNDk0MjYgNS42OTk0MiAxMC4zMDA0IDYuNTA1NTMgMTAuMzAwNCA3LjQ5OTkxWk0xMS4yMDUgOEMxMC45Njk5IDkuMjgwMjkgOS44NDgxNiAxMC4yNTA0IDguNDk5ODggMTAuMjUwNEM3LjE1MTYgMTAuMjUwNCA2LjAyOTkgOS4yODAyOSA1Ljc5NDczIDhIMC41QzAuMjIzODU4IDggMCA3Ljc3NjE0IDAgNy41QzAgNy4yMjM4NiAwLjIyMzg1OCA3IDAuNSA3SDUuNzk0N0M2LjAyOTggNS43MTk2MiA3LjE1MTU0IDQuNzQ5NDIgOC40OTk4OCA0Ljc0OTQyQzkuODQ4MjIgNC43NDk0MiAxMC45Njk5IDUuNzE5NjIgMTEuMjA1MSA3SDE0LjVDMTQuNzc2MSA3IDE1IDcuMjIzODYgMTUgNy41QzE1IDcuNzc2MTQgMTQuNzc2MSA4IDE0LjUgOEgxMS4yMDVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxNcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTQuNDk5OSAwLjk5OTk5NEMxNC4yMjM3IDAuOTk5OTk0IDEzLjk5OTkgMS4yMjM4NSAxMy45OTk5IDEuNDk5OTlMMTMuOTk5OSA1Ljk5OTk1TDkuOTk5OTIgNS45OTk5NUM5LjQ0NzY0IDUuOTk5OTUgOC45OTk5MyA2LjQ0NzY2IDguOTk5OTMgNi45OTk5NEw4Ljk5OTkzIDcuOTk5OTRDOC45OTk5MyA4LjU1MjIyIDkuNDQ3NjQgOC45OTk5MyA5Ljk5OTkyIDguOTk5OTNMMTMuOTk5OSA4Ljk5OTkzTDEzLjk5OTkgMTMuNDk5OUMxMy45OTk5IDEzLjc3NiAxNC4yMjM3IDEzLjk5OTkgMTQuNDk5OSAxMy45OTk5QzE0Ljc3NiAxMy45OTk5IDE0Ljk5OTkgMTMuNzc2IDE0Ljk5OTkgMTMuNDk5OUwxNC45OTk5IDEuNDk5OTlDMTQuOTk5OSAxLjIyMzg1IDE0Ljc3NiAwLjk5OTk5NCAxNC40OTk5IDAuOTk5OTk0Wk00Ljk5OTk2IDUuOTk5OTVMMC45OTk5OTIgNS45OTk5NUwwLjk5OTk5MiAxLjQ5OTk5QzAuOTk5OTkyIDEuMjIzODUgMC43NzYxMzYgMC45OTk5OTQgMC40OTk5OTYgMC45OTk5OTRDMC4yMjM4NTYgMC45OTk5OTQgLTkuNzg1MmUtMDkgMS4yMjM4NSAtMi4xODU1N2UtMDggMS40OTk5OUw0LjA3Mjc5ZS0wNyAxMy40OTk5QzMuOTUyMDhlLTA3IDEzLjc3NiAwLjIyMzg1NSAxMy45OTk5IDAuNDk5OTk2IDEzLjk5OTlDMC43NzYxMzYgMTMuOTk5OSAwLjk5OTk5MiAxMy43NzYgMC45OTk5OTIgMTMuNDk5OUwwLjk5OTk5MiA4Ljk5OTkzTDQuOTk5OTYgOC45OTk5M0M1LjU1MjI0IDguOTk5OTMgNS45OTk5NSA4LjU1MjIyIDUuOTk5OTUgNy45OTk5M0w1Ljk5OTk1IDYuOTk5OTRDNS45OTk5NSA2LjQ0NzY2IDUuNTUyMjQgNS45OTk5NSA0Ljk5OTk2IDUuOTk5OTVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxrcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC45OTk4NzggMC41QzAuOTk5ODc4IDAuMjIzODU4IDEuMjIzNzQgMCAxLjQ5OTg4IDBIMTMuNDk5OUMxMy43NzYgMCAxMy45OTk5IDAuMjIzODU4IDEzLjk5OTkgMC41QzEzLjk5OTkgMC43NzYxNDIgMTMuNzc2IDEgMTMuNDk5OSAxTDkgMVY1QzkgNS41NTIyOCA4LjU1MjI4IDYgOCA2SDdDNi40NDc3MiA2IDYgNS41NTIyOCA2IDVWMUgxLjQ5OTg4QzEuMjIzNzQgMSAwLjk5OTg3OCAwLjc3NjE0MiAwLjk5OTg3OCAwLjVaTTcgOUM2LjQ0NzcyIDkgNiA5LjQ0NzcxIDYgMTBWMTRIMS40OTk4OEMxLjIyMzc0IDE0IDAuOTk5ODc4IDE0LjIyMzkgMC45OTk4NzggMTQuNUMwLjk5OTg3OCAxNC43NzYxIDEuMjIzNzQgMTUgMS40OTk4OCAxNUgxMy40OTk5QzEzLjc3NiAxNSAxMy45OTk5IDE0Ljc3NjEgMTMuOTk5OSAxNC41QzEzLjk5OTkgMTQuMjIzOSAxMy43NzYgMTQgMTMuNDk5OSAxNEg5VjEwQzkgOS40NDc3MiA4LjU1MjI4IDkgOCA5SDdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxScj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTQuNDk5OSAwLjk5OTk5MkMxNC4yMjM3IDAuOTk5OTkyIDEzLjk5OTkgMS4yMjM4NSAxMy45OTk5IDEuNDk5OTlMMTMuOTk5OSAxMy40OTk5QzEzLjk5OTkgMTMuNzc2IDE0LjIyMzcgMTMuOTk5OSAxNC40OTk5IDEzLjk5OTlDMTQuNzc2IDEzLjk5OTkgMTQuOTk5OSAxMy43NzYgMTQuOTk5OSAxMy40OTk5TDE0Ljk5OTkgMS40OTk5OUMxNC45OTk5IDEuMjIzODUgMTQuNzc2IDAuOTk5OTkyIDE0LjQ5OTkgMC45OTk5OTJaTTAuNDk5OTk2IDAuOTk5OTkyQzAuMjIzODU2IDAuOTk5OTkyIC05Ljc4NTA5ZS0wOSAxLjIyMzg1IC0yLjE4NTU2ZS0wOCAxLjQ5OTk5TDQuMDcyNzllLTA3IDEzLjQ5OTlDMy45NTIwOGUtMDcgMTMuNzc2IDAuMjIzODU1IDEzLjk5OTkgMC40OTk5OTYgMTMuOTk5OUMwLjc3NjEzNiAxMy45OTk5IDAuOTk5OTkyIDEzLjc3NiAwLjk5OTk5MiAxMy40OTk5TDAuOTk5OTkyIDEuNDk5OTlDMC45OTk5OTIgMS4yMjM4NSAwLjc3NjEzNiAwLjk5OTk5MiAwLjQ5OTk5NiAwLjk5OTk5MlpNMS45OTk5OCA2Ljk5OTk0QzEuOTk5OTggNi40NDc2NiAyLjQ0NzY5IDUuOTk5OTUgMi45OTk5OCA1Ljk5OTk1TDUuOTk5OTUgNS45OTk5NUM2LjU1MjIzIDUuOTk5OTUgNi45OTk5NCA2LjQ0NzY2IDYuOTk5OTQgNi45OTk5NEw2Ljk5OTk0IDcuOTk5OTNDNi45OTk5NCA4LjU1MjIxIDYuNTUyMjMgOC45OTk5MiA1Ljk5OTk1IDguOTk5OTJMMi45OTk5OCA4Ljk5OTkyQzIuNDQ3NyA4Ljk5OTkyIDEuOTk5OTggOC41NTIyMSAxLjk5OTk4IDcuOTk5OTNMMS45OTk5OCA2Ljk5OTk0Wk04Ljk5OTkzIDUuOTk5OTVDOC40NDc2NSA1Ljk5OTk1IDcuOTk5OTMgNi40NDc2NiA3Ljk5OTkzIDYuOTk5OTRMNy45OTk5MyA3Ljk5OTkzQzcuOTk5OTMgOC41NTIyMSA4LjQ0NzY1IDguOTk5OTIgOC45OTk5MyA4Ljk5OTkyTDExLjk5OTkgOC45OTk5MkMxMi41NTIyIDguOTk5OTIgMTIuOTk5OSA4LjU1MjIxIDEyLjk5OTkgNy45OTk5M0wxMi45OTk5IDYuOTk5OTRDMTIuOTk5OSA2LjQ0NzY2IDEyLjU1MjIgNS45OTk5NSAxMS45OTk5IDUuOTk5OTVMOC45OTk5MyA1Ljk5OTk1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sUHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuOTk5ODc4IDAuNUMwLjk5OTg3OCAwLjIyMzg1OCAxLjIyMzc0IDAgMS40OTk4OCAwSDEzLjQ5OTlDMTMuNzc2IDAgMTMuOTk5OSAwLjIyMzg1OCAxMy45OTk5IDAuNUMxMy45OTk5IDAuNzc2MTQyIDEzLjc3NiAxIDEzLjQ5OTkgMUgxLjQ5OTg4QzEuMjIzNzQgMSAwLjk5OTg3OCAwLjc3NjE0MiAwLjk5OTg3OCAwLjVaTTcgMkM2LjQ0NzcyIDIgNiAyLjQ0NzcyIDYgM1Y2QzYgNi41NTIyOCA2LjQ0NzcyIDcgNyA3SDhDOC41NTIyOCA3IDkgNi41NTIyOCA5IDZWM0M5IDIuNDQ3NzIgOC41NTIyOCAyIDggMkg3Wk03IDhDNi40NDc3MiA4IDYgOC40NDc3MSA2IDlWMTJDNiAxMi41NTIzIDYuNDQ3NzIgMTMgNyAxM0g4QzguNTUyMjggMTMgOSAxMi41NTIzIDkgMTJWOUM5IDguNDQ3NzIgOC41NTIyOCA4IDggOEg3Wk0xLjQ5OTg4IDE0QzEuMjIzNzQgMTQgMC45OTk4NzggMTQuMjIzOSAwLjk5OTg3OCAxNC41QzAuOTk5ODc4IDE0Ljc3NjEgMS4yMjM3NCAxNSAxLjQ5OTg4IDE1SDEzLjQ5OTlDMTMuNzc2IDE1IDEzLjk5OTkgMTQuNzc2MSAxMy45OTk5IDE0LjVDMTMuOTk5OSAxNC4yMjM5IDEzLjc3NiAxNCAxMy40OTk5IDE0SDEuNDk5ODhaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxJcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy40Njk2OCAxLjA1MDg1QzcuNjQxMjIgMS4xMzQ3NSA3Ljc1IDEuMzA5MDQgNy43NSAxLjVWMTMuNUM3Ljc1IDEzLjY5MSA3LjY0MTIyIDEzLjg2NTMgNy40Njk2OCAxMy45NDkyQzcuMjk4MTMgMTQuMDMzMSA3LjA5Mzc3IDE0LjAxMTkgNi45NDMwMyAxMy44OTQ3TDMuMjIxMyAxMUgxLjVDMC42NzE1NzEgMTEgMCAxMC4zMjg0IDAgOS41VjUuNUMwIDQuNjcxNTggMC42NzE1NzMgNCAxLjUgNEgzLjIyMTNMNi45NDMwMyAxLjEwNTMzQzcuMDkzNzcgMC45ODgwODUgNy4yOTgxMyAwLjk2Njk0NSA3LjQ2OTY4IDEuMDUwODVaTTYuNzUgMi41MjIzMkwzLjY5OTgzIDQuODk0NjhDMy42MTIwNiA0Ljk2Mjk0IDMuNTA0MDUgNSAzLjM5Mjg2IDVIMS41QzEuMjIzODYgNSAxIDUuMjIzODYgMSA1LjVWOS41QzEgOS43NzYxNSAxLjIyMzg2IDEwIDEuNSAxMEgzLjM5Mjg2QzMuNTA0MDUgMTAgMy42MTIwNiAxMC4wMzcxIDMuNjk5ODMgMTAuMTA1M0w2Ljc1IDEyLjQ3NzdWMi41MjIzMlpNMTAuMjc4NCAzLjg0ODA0QzEwLjQ2MjMgMy43MjU2NyAxMC43MTA2IDMuNzc1NTcgMTAuODMzIDMuOTU5NDlDMTIuMjU1OCA2LjA5Nzk4IDEyLjI1NTggOC45MDE5OSAxMC44MzMgMTEuMDQwNUMxMC43MTA2IDExLjIyNDQgMTAuNDYyMyAxMS4yNzQzIDEwLjI3ODQgMTEuMTUxOUMxMC4wOTQ0IDExLjAyOTYgMTAuMDQ0NSAxMC43ODEzIDEwLjE2NjkgMTAuNTk3M0MxMS40MTExIDguNzI3MjggMTEuNDExMSA2LjI3MjY5IDEwLjE2NjkgNC40MDI2NEMxMC4wNDQ1IDQuMjE4NzEgMTAuMDk0NCAzLjk3MDQxIDEwLjI3ODQgMy44NDgwNFpNMTIuNjc4NSAxLjQzMDQ0QzEyLjUzNTYgMS4yNjE5IDEyLjI4MzIgMS4yNDEwNCAxMi4xMTQ3IDEuMzgzODZDMTEuOTQ2MiAxLjUyNjY3IDExLjkyNTMgMS43NzkwOCAxMi4wNjgxIDEuOTQ3NjJDMTQuNzc3MyA1LjE0NDg4IDE0Ljc3NzMgOS44NTUxMyAxMi4wNjgxIDEzLjA1MjRDMTEuOTI1MyAxMy4yMjA5IDExLjk0NjIgMTMuNDczMyAxMi4xMTQ3IDEzLjYxNjFDMTIuMjgzMiAxMy43NTkgMTIuNTM1NiAxMy43MzgxIDEyLjY3ODUgMTMuNTY5NkMxNS42NDA2IDEwLjA3MzkgMTUuNjQwNiA0LjkyNjEyIDEyLjY3ODUgMS40MzA0NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEFyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk04IDEuNUM4IDEuMzEwNjIgNy44OTMgMS4xMzc0OSA3LjcyMzYxIDEuMDUyNzlDNy41NTQyMSAwLjk2ODA5MyA3LjM1MTUxIDAuOTg2MzcxIDcuMiAxLjFMMy4zMzMzMyA0SDEuNUMwLjY3MTU3MyA0IDAgNC42NzE1OCAwIDUuNVY5LjVDMCAxMC4zMjg0IDAuNjcxNTczIDExIDEuNSAxMUgzLjMzMzMzTDcuMiAxMy45QzcuMzUxNTEgMTQuMDEzNiA3LjU1NDIxIDE0LjAzMTkgNy43MjM2MSAxMy45NDcyQzcuODkzIDEzLjg2MjUgOCAxMy42ODk0IDggMTMuNVYxLjVaTTMuOCA0LjlMNyAyLjVWMTIuNUwzLjggMTAuMUMzLjcxMzQ1IDEwLjAzNTEgMy42MDgxOSAxMCAzLjUgMTBIMS41QzEuMjIzODYgMTAgMSA5Ljc3NjE0IDEgOS41VjUuNUMxIDUuMjIzODYgMS4yMjM4NiA1IDEuNSA1SDMuNUMzLjYwODE5IDUgMy43MTM0NSA0Ljk2NDkxIDMuOCA0LjlaTTEwLjgzMyAzLjk1OTQ5QzEwLjcxMDYgMy43NzU1NyAxMC40NjIzIDMuNzI1NjcgMTAuMjc4NCAzLjg0ODA0QzEwLjA5NDQgMy45NzA0MSAxMC4wNDQ1IDQuMjE4NzEgMTAuMTY2OSA0LjQwMjY0QzExLjQxMTEgNi4yNzI2OCAxMS40MTExIDguNzI3MjggMTAuMTY2OSAxMC41OTczQzEwLjA0NDUgMTAuNzgxMyAxMC4wOTQ0IDExLjAyOTYgMTAuMjc4NCAxMS4xNTE5QzEwLjQ2MjMgMTEuMjc0MyAxMC43MTA2IDExLjIyNDQgMTAuODMzIDExLjA0MDVDMTIuMjU1OCA4LjkwMTk5IDEyLjI1NTggNi4wOTc5OCAxMC44MzMgMy45NTk0OVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFRyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjcyMzYxIDEuMDUyNzlDNy44OTMgMS4xMzc0OSA4IDEuMzEwNjIgOCAxLjVWMTMuNUM4IDEzLjY4OTQgNy44OTMgMTMuODYyNSA3LjcyMzYxIDEzLjk0NzJDNy41NTQyMSAxNC4wMzE5IDcuMzUxNTEgMTQuMDEzNiA3LjIgMTMuOUwzLjMzMzMzIDExSDEuNUMwLjY3MTU3MyAxMSAwIDEwLjMyODQgMCA5LjVWNS41QzAgNC42NzE1OCAwLjY3MTU3MyA0IDEuNSA0SDMuMzMzMzNMNy4yIDEuMUM3LjM1MTUxIDAuOTg2MzcxIDcuNTU0MjEgMC45NjgwOTMgNy43MjM2MSAxLjA1Mjc5Wk03IDIuNUwzLjggNC45QzMuNzEzNDUgNC45NjQ5MSAzLjYwODE5IDUgMy41IDVIMS41QzEuMjIzODYgNSAxIDUuMjIzODYgMSA1LjVWOS41QzEgOS43NzYxNCAxLjIyMzg2IDEwIDEuNSAxMEgzLjVDMy42MDgxOSAxMCAzLjcxMzQ1IDEwLjAzNTEgMy44IDEwLjFMNyAxMi41VjIuNVpNMTQuODUzNiA1LjE0NjQ1QzE1LjA0ODggNS4zNDE3MSAxNS4wNDg4IDUuNjU4MjkgMTQuODUzNiA1Ljg1MzU1TDEzLjIwNzEgNy41TDE0Ljg1MzYgOS4xNDY0NUMxNS4wNDg4IDkuMzQxNzEgMTUuMDQ4OCA5LjY1ODI5IDE0Ljg1MzYgOS44NTM1NUMxNC42NTgzIDEwLjA0ODggMTQuMzQxNyAxMC4wNDg4IDE0LjE0NjQgOS44NTM1NUwxMi41IDguMjA3MTFMMTAuODUzNiA5Ljg1MzU1QzEwLjY1ODMgMTAuMDQ4OCAxMC4zNDE3IDEwLjA0ODggMTAuMTQ2NCA5Ljg1MzU1QzkuOTUxMTggOS42NTgyOSA5Ljk1MTE4IDkuMzQxNzEgMTAuMTQ2NCA5LjE0NjQ1TDExLjc5MjkgNy41TDEwLjE0NjQgNS44NTM1NUM5Ljk1MTE4IDUuNjU4MjkgOS45NTExOCA1LjM0MTcxIDEwLjE0NjQgNS4xNDY0NUMxMC4zNDE3IDQuOTUxMTggMTAuNjU4MyA0Ljk1MTE4IDEwLjg1MzYgNS4xNDY0NUwxMi41IDYuNzkyODlMMTQuMTQ2NCA1LjE0NjQ1QzE0LjM0MTcgNC45NTExOCAxNC42NTgzIDQuOTUxMTggMTQuODUzNiA1LjE0NjQ1WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sSHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTggMS41QzggMS4zMTA2MiA3Ljg5MyAxLjEzNzQ5IDcuNzIzNjEgMS4wNTI3OUM3LjU1NDIxIDAuOTY4MDkzIDcuMzUxNTEgMC45ODYzNzEgNy4yIDEuMUwzLjMzMzMzIDRIMS41QzAuNjcxNTczIDQgMCA0LjY3MTU4IDAgNS41VjkuNUMwIDEwLjMyODQgMC42NzE1NzMgMTEgMS41IDExSDMuMzMzMzNMNy4yIDEzLjlDNy4zNTE1MSAxNC4wMTM2IDcuNTU0MjEgMTQuMDMxOSA3LjcyMzYxIDEzLjk0NzJDNy44OTMgMTMuODYyNSA4IDEzLjY4OTQgOCAxMy41VjEuNVpNMy44IDQuOUw3IDIuNVYxMi41TDMuOCAxMC4xQzMuNzEzNDUgMTAuMDM1MSAzLjYwODE5IDEwIDMuNSAxMEgxLjVDMS4yMjM4NiAxMCAxIDkuNzc2MTQgMSA5LjVWNS41QzEgNS4yMjM4NiAxLjIyMzg2IDUgMS41IDVIMy41QzMuNjA4MTkgNSAzLjcxMzQ1IDQuOTY0OTEgMy44IDQuOVpNMTAuMDgzIDUuMDU1NzdDOS45NjA2NiA0Ljg3MTg1IDkuNzEyMzUgNC44MjE5NSA5LjUyODQzIDQuOTQ0MzJDOS4zNDQ1IDUuMDY2NjkgOS4yOTQ2IDUuMzE0OTkgOS40MTY5NyA1LjQ5ODkyQzEwLjIyMDcgNi43MDY5MyAxMC4yMjA3IDguMjkzMDMgOS40MTY5NyA5LjUwMTA0QzkuMjk0NiA5LjY4NDk2IDkuMzQ0NSA5LjkzMzI2IDkuNTI4NDMgMTAuMDU1NkM5LjcxMjM1IDEwLjE3OCA5Ljk2MDY2IDEwLjEyODEgMTAuMDgzIDkuOTQ0MThDMTEuMDY1MyA4LjQ2NzczIDExLjA2NTMgNi41MzIyMiAxMC4wODMgNS4wNTU3N1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEJyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xIDFIMS41SDEzLjVIMTRWMS41VjEzLjVWMTRIMTMuNUgxLjVIMVYxMy41VjEuNVYxWk0yIDJWMTNIMTNWMkgyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sVnI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuNzU0MzIgMS44MTk1NEM3LjU5NzQyIDEuNzI2ODIgNy40MDI1IDEuNzI2ODIgNy4yNDU1OSAxLjgxOTU0TDEuNzQ1NTkgNS4wNjk1NEMxLjU5MzM2IDUuMTU5NDkgMS40OTk5NiA1LjMyMzE3IDEuNDk5OTYgNS41QzEuNDk5OTYgNS42NzY4MyAxLjU5MzM2IDUuODQwNTEgMS43NDU1OSA1LjkzMDQ2TDcuMjQ1NTkgOS4xODA0NkM3LjQwMjUgOS4yNzMxOCA3LjU5NzQyIDkuMjczMTggNy43NTQzMiA5LjE4MDQ2TDEzLjI1NDMgNS45MzA0NkMxMy40MDY2IDUuODQwNTEgMTMuNSA1LjY3NjgzIDEzLjUgNS41QzEzLjUgNS4zMjMxNyAxMy40MDY2IDUuMTU5NDkgMTMuMjU0MyA1LjA2OTU0TDcuNzU0MzIgMS44MTk1NFpNNy40OTk5NiA4LjE2OTIzTDIuOTgyOCA1LjVMNy40OTk5NiAyLjgzMDc3TDEyLjAxNzEgNS41TDcuNDk5OTYgOC4xNjkyM1pNMi4yNTQzMiA4LjMxOTU0QzIuMDE2NTggOC4xNzkwNiAxLjcwOTk4IDguMjU3OSAxLjU2OTQ5IDguNDk1NjRDMS40MjkwMSA4LjczMzM3IDEuNTA3ODUgOS4wMzk5OCAxLjc0NTU5IDkuMTgwNDZMNy4yNDU1OSAxMi40MzA1QzcuNDAyNSAxMi41MjMyIDcuNTk3NDIgMTIuNTIzMiA3Ljc1NDMyIDEyLjQzMDVMMTMuMjU0MyA5LjE4MDQ2QzEzLjQ5MjEgOS4wMzk5OCAxMy41NzA5IDguNzMzMzcgMTMuNDMwNCA4LjQ5NTY0QzEzLjI4OTkgOC4yNTc5IDEyLjk4MzMgOC4xNzkwNiAxMi43NDU2IDguMzE5NTRMNy40OTk5NiAxMS40MTkyTDIuMjU0MzIgOC4zMTk1NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LERyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02Ljk3OTQyIDEuMjUxNzFMNi45NTg1IDEuMzAxOTlMNS41ODY2MiA0LjYwMDM5QzUuNTQzNDIgNC43MDQyNiA1LjQ0NTczIDQuNzc1MjMgNS4zMzM2IDQuNzg0MjJMMS43NzI3IDUuMDY5N0wxLjcxODQxIDUuMDc0MDVMMS4zODY4NyA1LjEwMDYzTDEuMDg2MDggNS4xMjQ3NUMwLjgyMDA4NSA1LjE0NjA3IDAuNzEyMjI4IDUuNDc4MDIgMC45MTQ4ODkgNS42NTE2MkwxLjE0NDA2IDUuODQ3OTNMMS4zOTY2NiA2LjA2NDMxTDEuNDM4MDIgNi4wOTk3NEw0LjE1MTA1IDguNDIzNzRDNC4yMzY0OCA4LjQ5NjkyIDQuMjczOCA4LjYxMTc2IDQuMjQ3NjkgOC43MjExOEwzLjQxODgyIDEyLjE5NkwzLjQwNjE4IDEyLjI0OUwzLjMyOTAxIDEyLjU3MjVMMy4yNTg5OSAxMi44NjZDMy4xOTcwOCAxMy4xMjU2IDMuNDc5NDUgMTMuMzMwOCAzLjcwNzE4IDEzLjE5MTdMMy45NjQ3IDEzLjAzNDRMNC4yNDg1NCAxMi44NjFMNC4yOTUwMiAxMi44MzI2TDcuMzQzNjUgMTAuOTcwNUM3LjQzOTY1IDEwLjkxMTkgNy41NjA0IDEwLjkxMTkgNy42NTY0IDEwLjk3MDVMMTAuNzA1IDEyLjgzMjZMMTAuNzUxNSAxMi44NjFMMTEuMDM1NCAxMy4wMzQ0TDExLjI5MjkgMTMuMTkxN0MxMS41MjA2IDEzLjMzMDggMTEuODAzIDEzLjEyNTYgMTEuNzQxMSAxMi44NjZMMTEuNjcxIDEyLjU3MjVMMTEuNTkzOSAxMi4yNDlMMTEuNTgxMiAxMi4xOTZMMTAuNzUyNCA4LjcyMTE4QzEwLjcyNjMgOC42MTE3NiAxMC43NjM2IDguNDk2OTIgMTAuODQ5IDguNDIzNzRMMTMuNTYyIDYuMDk5NzRMMTMuNjAzNCA2LjA2NDMxTDEzLjg1NiA1Ljg0NzkzTDE0LjA4NTIgNS42NTE2MkMxNC4yODc4IDUuNDc4MDIgMTQuMTggNS4xNDYwNyAxMy45MTQgNS4xMjQ3NUwxMy42MTMyIDUuMTAwNjNMMTMuMjgxNiA1LjA3NDA1TDEzLjIyNzQgNS4wNjk3TDkuNjY2NDUgNC43ODQyMkM5LjU1NDMyIDQuNzc1MjMgOS40NTY2MyA0LjcwNDI2IDkuNDEzNDMgNC42MDAzOUw4LjA0MTU1IDEuMzAxOTlMOC4wMjA2NCAxLjI1MTcxTDcuODkyOTEgMC45NDQ2MDlMNy43NzcwMiAwLjY2NTk5MkM3LjY3NDU0IDAuNDE5NjA0IDcuMzI1NTEgMC40MTk2MDQgNy4yMjMwMyAwLjY2NTk5Mkw3LjEwNzE1IDAuOTQ0NjA5TDYuOTc5NDIgMS4yNTE3MVpNNy41MDAwMyAyLjYwMzk3TDYuNTA5OTQgNC45ODQ0MkM2LjMyMjczIDUuNDM0NTMgNS44OTk0NCA1Ljc0MjA3IDUuNDEzNTEgNS43ODEwM0wyLjg0MzYxIDUuOTg3MDVMNC44MDE2IDcuNjY0MjhDNS4xNzE4MyA3Ljk4MTQyIDUuMzMzNTEgOC40NzkwMyA1LjIyMDQgOC45NTMyMUw0LjYyMjIxIDExLjQ2MUw2LjgyMjQgMTAuMTE3MUM3LjIzODQyIDkuODYzMDIgNy43NjE2NCA5Ljg2MzAyIDguMTc3NjYgMTAuMTE3MUwxMC4zNzc4IDExLjQ2MUw5Ljc3OTY1IDguOTUzMjFDOS42NjY1NCA4LjQ3OTAzIDkuODI4MjIgNy45ODE0MiAxMC4xOTg0IDcuNjY0MjhMMTIuMTU2NCA1Ljk4NzA1TDkuNTg2NTQgNS43ODEwM0M5LjEwMDYxIDUuNzQyMDcgOC42NzczMiA1LjQzNDUzIDguNDkwMTEgNC45ODQ0Mkw3LjUwMDAzIDIuNjAzOTdaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxacj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy4yMjMwMyAwLjY2NTk5MkM3LjMyNTUxIDAuNDE5NjA0IDcuNjc0NTQgMC40MTk2MDQgNy43NzcwMiAwLjY2NTk5Mkw5LjQxMzQzIDQuNjAwMzlDOS40NTY2MyA0LjcwNDI2IDkuNTU0MzIgNC43NzUyMyA5LjY2NjQ1IDQuNzg0MjJMMTMuOTE0IDUuMTI0NzVDMTQuMTggNS4xNDYwNyAxNC4yODc4IDUuNDc4MDIgMTQuMDg1MiA1LjY1MTYyTDEwLjg0OSA4LjQyMzc0QzEwLjc2MzYgOC40OTY5MiAxMC43MjYzIDguNjExNzYgMTAuNzUyNCA4LjcyMTE4TDExLjc0MTEgMTIuODY2QzExLjgwMyAxMy4xMjU2IDExLjUyMDYgMTMuMzMwOCAxMS4yOTI5IDEzLjE5MTdMNy42NTY0IDEwLjk3MDVDNy41NjA0IDEwLjkxMTkgNy40Mzk2NSAxMC45MTE5IDcuMzQzNjUgMTAuOTcwNUwzLjcwNzE4IDEzLjE5MTdDMy40Nzk0NSAxMy4zMzA4IDMuMTk3MDggMTMuMTI1NiAzLjI1ODk5IDEyLjg2Nkw0LjI0NzY5IDguNzIxMThDNC4yNzM4IDguNjExNzYgNC4yMzY0OCA4LjQ5NjkyIDQuMTUxMDUgOC40MjM3NEwwLjkxNDg4OSA1LjY1MTYyQzAuNzEyMjI4IDUuNDc4MDIgMC44MjAwODYgNS4xNDYwNyAxLjA4NjA4IDUuMTI0NzVMNS4zMzM2IDQuNzg0MjJDNS40NDU3MyA0Ljc3NTIzIDUuNTQzNDIgNC43MDQyNiA1LjU4NjYyIDQuNjAwMzlMNy4yMjMwMyAwLjY2NTk5MlpcIixmaWxsOm59KSl9LCRyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjg0OTk4IDcuNDk5OThDMS44NDk5OCA3LjIxMzIxIDEuODcxMzQgNi45MzE0MyAxLjkxMjU2IDYuNjU2MTVMOS41NjM3NCAyLjIzODc1QzkuODYzMTEgMi4zNTYyNyAxMC4xNSAyLjQ5ODYxIDEwLjQyMTkgMi42NjMyMkwzLjc3MDY1IDYuNTAzMzJDMy43MzY2OSA2LjUyMTgzIDMuNzA0ODIgNi41NDQ5IDMuNjc2MDIgNi41NzIzOEMzLjU5MTEgNi42NTMwOCAzLjU0MjQ1IDYuNzYyODYgMy41MzY4MiA2Ljg3NjU4QzMuNTMzNTkgNi45NDE4IDMuNTQ0NTEgNy4wMDgzMSAzLjU3MDg2IDcuMDcxMzdDMy41ODkyNyA3LjExNTcgMy42MTQ5IDcuMTU3NDIgMy42NDc0NCA3LjE5NDU4QzMuNjczMDYgNy4yMjM5NiAzLjcwMiA3LjI0OTQxIDMuNzMzMzcgNy4yNzA2OUw3LjMyNTMzIDkuODM4MTNMMy44NzIzMiAxMS44MzE3QzIuNjM2MDQgMTAuNzk1MyAxLjg0OTk4IDkuMjM5NDQgMS44NDk5OCA3LjQ5OTk4Wk04LjM2ODQzIDEwLjI3NTFDOC4zNzY4MiAxMC4yNzA2IDguMzg1MDkgMTAuMjY1OSA4LjM5MzIyIDEwLjI2MDhMOS44NDA5MSA5LjQyNDk5QzkuODQ3MDYgOS40MjE2MyA5Ljg1MzE0IDkuNDE4MTIgOS44NTkxNSA5LjQxNDQ2TDExLjMxMDEgOC41NzY3N0MxMS4zNjU1IDguNTQ2NDkgMTEuNDE1NCA4LjUwNCAxMS40NTU0IDguNDQ5OTVDMTEuNjAzNCA4LjI1MDMxIDExLjU2MTYgNy45Njg0OCAxMS4zNjIgNy44MjA0Nkw3LjgyNzc5IDUuMjAwMTdMMTEuMjE2MSAzLjI0MzkzQzEyLjQwMTMgNC4yNzk2MyAxMy4xNSA1LjgwMjM3IDEzLjE1IDcuNDk5OThDMTMuMTUgNy44MzU0NiAxMy4xMjA3IDguMTY0MTEgMTMuMDY0NyA4LjQ4MzUzTDUuNTY4NzUgMTIuODExM0M1LjI2MTM4IDEyLjY5OTUgNC45NjY0NiAxMi41NjE4IDQuNjg2NjIgMTIuNDAwOEw4LjM2ODQzIDEwLjI3NTFaTTguMTgxNDkgOS4zNDM4M0w0LjgxNjU5IDYuOTM4NjhMNS41MDkxOCA2LjUzODgxTDguODA2MDQgOC45ODMyNEw4LjE4MTQ5IDkuMzQzODNaTTYuMzU4NzUgNi4wNDgzMkw2Ljk3ODIyIDUuNjkwNjdMMTAuMjc1MSA4LjEzNTA2TDkuNjU1NiA4LjQ5Mjc1TDYuMzU4NzUgNi4wNDgzMlpNOC4zMzE4IDEuOTEwNzhMMi4yNDI2MyA1LjQyNjM2QzMuMDY5NDEgMy4zMzE4OCA1LjExMTY0IDEuODQ5OTggNy40OTk5OCAxLjg0OTk4QzcuNzgyNTggMS44NDk5OCA4LjA2MDMzIDEuODcwNzIgOC4zMzE4IDEuOTEwNzhaTTYuODQ2ODQgMTMuMTEyNkM3LjA2MTE0IDEzLjEzNzMgNy4yNzkwOCAxMy4xNSA3LjQ5OTk4IDEzLjE1QzkuODI0NiAxMy4xNSAxMS44MjEzIDExLjc0NjEgMTIuNjg4NiA5LjczOTlMNi44NDY4NCAxMy4xMTI2Wk03LjQ5OTk4IDAuODQ5OTc2QzMuODI3MjggMC44NDk5NzYgMC44NDk5NzYgMy44MjcyOCAwLjg0OTk3NiA3LjQ5OTk4QzAuODQ5OTc2IDExLjE3MjcgMy44MjcyOCAxNC4xNSA3LjQ5OTk4IDE0LjE1QzExLjE3MjcgMTQuMTUgMTQuMTUgMTEuMTcyNyAxNC4xNSA3LjQ5OTk4QzE0LjE1IDMuODI3MjggMTEuMTcyNyAwLjg0OTk3NiA3LjQ5OTk4IDAuODQ5OTc2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sTnI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIgM0MyIDIuNDQ3NzIgMi40NDc3MiAyIDMgMkgxMkMxMi41NTIzIDIgMTMgMi40NDc3MiAxMyAzVjEyQzEzIDEyLjU1MjMgMTIuNTUyMyAxMyAxMiAxM0gzQzIuNDQ3NzIgMTMgMiAxMi41NTIzIDIgMTJWM1pNMTIgM0gzVjEySDEyVjNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxGcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNS40OTk5OCAwLjVDNS40OTk5OCAwLjIyMzg1OCA1LjcyMzgzIDAgNS45OTk5OCAwSDcuNDk5OThIOC45OTk5OEM5LjI3NjEyIDAgOS40OTk5OCAwLjIyMzg1OCA5LjQ5OTk4IDAuNUM5LjQ5OTk4IDAuNzc2MTQyIDkuMjc2MTIgMSA4Ljk5OTk4IDFINy45OTk5OFYyLjExOTIyQzkuMDk4MzIgMi4yMDQwOSAxMC4xMTkgMi41NjYyMiAxMC45OTIgMy4xMzU3MkMxMS4wMTE2IDMuMTA4NTEgMTEuMDMzNiAzLjA4MjUyIDExLjA1OCAzLjA1ODA2TDExLjg1OCAyLjI1ODA2QzEyLjEwMjEgMi4wMTM5OCAxMi40OTc4IDIuMDEzOTggMTIuNzQxOSAyLjI1ODA2QzEyLjk4NiAyLjUwMjE0IDEyLjk4NiAyLjg5Nzg2IDEyLjc0MTkgMy4xNDE5NEwxMS45NjcgMy45MTY4MkMxMy4xNTk1IDUuMDc5MjUgMTMuOSA2LjcwMzE0IDEzLjkgOC40OTk5OEMxMy45IDEyLjAzNDYgMTEuMDM0NiAxNC45IDcuNDk5OTggMTQuOUMzLjk2NTM1IDE0LjkgMS4wOTk5OCAxMi4wMzQ2IDEuMDk5OTggOC40OTk5OEMxLjA5OTk4IDUuMTMzNjIgMy42OTkwNCAyLjM3NDMgNi45OTk5OCAyLjExOTIyVjFINS45OTk5OEM1LjcyMzgzIDEgNS40OTk5OCAwLjc3NjE0MiA1LjQ5OTk4IDAuNVpNMi4wOTk5OCA4LjQ5OTk4QzIuMDk5OTggNS41MTc2NCA0LjUxNzY0IDMuMDk5OTggNy40OTk5OCAzLjA5OTk4QzEwLjQ4MjMgMy4wOTk5OCAxMi45IDUuNTE3NjQgMTIuOSA4LjQ5OTk4QzEyLjkgMTEuNDgyMyAxMC40ODIzIDEzLjkgNy40OTk5OCAxMy45QzQuNTE3NjQgMTMuOSAyLjA5OTk4IDExLjQ4MjMgMi4wOTk5OCA4LjQ5OTk4Wk03Ljk5OTk4IDQuNUM3Ljk5OTk4IDQuMjIzODYgNy43NzYxMiA0IDcuNDk5OTggNEM3LjIyMzgzIDQgNi45OTk5OCA0LjIyMzg2IDYuOTk5OTggNC41VjkuNUM2Ljk5OTk4IDkuNzc2MTQgNy4yMjM4MyAxMCA3LjQ5OTk4IDEwQzcuNzc2MTIgMTAgNy45OTk5OCA5Ljc3NjE0IDcuOTk5OTggOS41VjQuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFVyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xNC40OTk5IDAuOTk5OTkyQzE0LjIyMzcgMC45OTk5OTIgMTMuOTk5OSAxLjIyMzg1IDEzLjk5OTkgMS40OTk5OUwxMy45OTk5IDUuOTk5OTVMMC45OTk5OTIgNS45OTk5NUwwLjk5OTk5MiAxLjQ5OTk5QzAuOTk5OTkyIDEuMjIzODUgMC43NzYxMzYgMC45OTk5OTIgMC40OTk5OTYgMC45OTk5OTJDMC4yMjM4NTYgMC45OTk5OTIgLTkuNzg1MDllLTA5IDEuMjIzODUgLTIuMTg1NTZlLTA4IDEuNDk5OTlMNC4wNzI3OWUtMDcgMTMuNDk5OUMzLjk1MjA4ZS0wNyAxMy43NzYgMC4yMjM4NTUgMTMuOTk5OSAwLjQ5OTk5NiAxMy45OTk5QzAuNzc2MTM2IDEzLjk5OTkgMC45OTk5OTIgMTMuNzc2IDAuOTk5OTkyIDEzLjQ5OTlMMC45OTk5OTIgOC45OTk5MkwxMy45OTk5IDguOTk5OTJMMTMuOTk5OSAxMy40OTk5QzEzLjk5OTkgMTMuNzc2IDE0LjIyMzcgMTMuOTk5OSAxNC40OTk5IDEzLjk5OTlDMTQuNzc2IDEzLjk5OTkgMTQuOTk5OSAxMy43NzYgMTQuOTk5OSAxMy40OTk5TDE0Ljk5OTkgMS40OTk5OUMxNC45OTk5IDEuMjIzODUgMTQuNzc2IDAuOTk5OTkyIDE0LjQ5OTkgMC45OTk5OTJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxXcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMC45OTk4NzggMC41QzAuOTk5ODc4IDAuMjIzODU4IDEuMjIzNzQgMCAxLjQ5OTg4IDBIMTMuNDk5OUMxMy43NzYgMCAxMy45OTk5IDAuMjIzODU4IDEzLjk5OTkgMC41QzEzLjk5OTkgMC43NzYxNDIgMTMuNzc2IDEgMTMuNDk5OSAxSDZIMS40OTk4OEMxLjIyMzc0IDEgMC45OTk4NzggMC43NzYxNDIgMC45OTk4NzggMC41Wk05IDE0VjFMNiAxVjE0SDEuNDk5ODhDMS4yMjM3NCAxNCAwLjk5OTg3OCAxNC4yMjM5IDAuOTk5ODc4IDE0LjVDMC45OTk4NzggMTQuNzc2MSAxLjIyMzc0IDE1IDEuNDk5ODggMTVIMTMuNDk5OUMxMy43NzYgMTUgMTMuOTk5OSAxNC43NzYxIDEzLjk5OTkgMTQuNUMxMy45OTk5IDE0LjIyMzkgMTMuNzc2IDE0IDEzLjQ5OTkgMTRIOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHpyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjAwMDAzIDMuMjVDNS4wMDAwMyAyLjk3Mzg2IDQuNzc2MTcgMi43NSA0LjUwMDAzIDIuNzVDNC4yMjM4OSAyLjc1IDQuMDAwMDMgMi45NzM4NiA0LjAwMDAzIDMuMjVWNy4xMDAwM0gyLjQ5OTk4QzIuMjc5MDYgNy4xMDAwMyAyLjA5OTk4IDcuMjc5MTIgMi4wOTk5OCA3LjUwMDAzQzIuMDk5OTggNy43MjA5NCAyLjI3OTA2IDcuOTAwMDMgMi40OTk5OCA3LjkwMDAzSDQuMDAwMDNWOC41NUM0LjAwMDAzIDEwLjQ4MyA1LjU2NzAzIDEyLjA1IDcuNTAwMDMgMTIuMDVDOS40MzMwMyAxMi4wNSAxMSAxMC40ODMgMTEgOC41NVY3LjkwMDAzSDEyLjVDMTIuNzIwOSA3LjkwMDAzIDEyLjkgNy43MjA5NCAxMi45IDcuNTAwMDNDMTIuOSA3LjI3OTEyIDEyLjcyMDkgNy4xMDAwMyAxMi41IDcuMTAwMDNIMTFWMy4yNUMxMSAyLjk3Mzg2IDEwLjc3NjIgMi43NSAxMC41IDIuNzVDMTAuMjIzOSAyLjc1IDEwIDIuOTczODYgMTAgMy4yNVY3LjEwMDAzSDUuMDAwMDNWMy4yNVpNNS4wMDAwMyA3LjkwMDAzVjguNTVDNS4wMDAwMyA5LjkzMDcxIDYuMTE5MzIgMTEuMDUgNy41MDAwMyAxMS4wNUM4Ljg4MDc0IDExLjA1IDEwIDkuOTMwNzEgMTAgOC41NVY3LjkwMDAzSDUuMDAwMDNaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxHcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNy41IDBDNy43NzYxNCAwIDggMC4yMjM4NTggOCAwLjVWMi41QzggMi43NzYxNCA3Ljc3NjE0IDMgNy41IDNDNy4yMjM4NiAzIDcgMi43NzYxNCA3IDIuNVYwLjVDNyAwLjIyMzg1OCA3LjIyMzg2IDAgNy41IDBaTTIuMTk2NyAyLjE5NjdDMi4zOTE5NiAyLjAwMTQ0IDIuNzA4NTQgMi4wMDE0NCAyLjkwMzgxIDIuMTk2N0w0LjMxODAyIDMuNjEwOTFDNC41MTMyOCAzLjgwNjE3IDQuNTEzMjggNC4xMjI3NiA0LjMxODAyIDQuMzE4MDJDNC4xMjI3NiA0LjUxMzI4IDMuODA2MTcgNC41MTMyOCAzLjYxMDkxIDQuMzE4MDJMMi4xOTY3IDIuOTAzODFDMi4wMDE0NCAyLjcwODU0IDIuMDAxNDQgMi4zOTE5NiAyLjE5NjcgMi4xOTY3Wk0wLjUgN0MwLjIyMzg1OCA3IDAgNy4yMjM4NiAwIDcuNUMwIDcuNzc2MTQgMC4yMjM4NTggOCAwLjUgOEgyLjVDMi43NzYxNCA4IDMgNy43NzYxNCAzIDcuNUMzIDcuMjIzODYgMi43NzYxNCA3IDIuNSA3SDAuNVpNMi4xOTY3IDEyLjgwMzNDMi4wMDE0NCAxMi42MDggMi4wMDE0NCAxMi4yOTE1IDIuMTk2NyAxMi4wOTYyTDMuNjEwOTEgMTAuNjgyQzMuODA2MTcgMTAuNDg2NyA0LjEyMjc2IDEwLjQ4NjcgNC4zMTgwMiAxMC42ODJDNC41MTMyOCAxMC44NzcyIDQuNTEzMjggMTEuMTkzOCA0LjMxODAyIDExLjM4OTFMMi45MDM4MSAxMi44MDMzQzIuNzA4NTQgMTIuOTk4NiAyLjM5MTk2IDEyLjk5ODYgMi4xOTY3IDEyLjgwMzNaTTEyLjUgN0MxMi4yMjM5IDcgMTIgNy4yMjM4NiAxMiA3LjVDMTIgNy43NzYxNCAxMi4yMjM5IDggMTIuNSA4SDE0LjVDMTQuNzc2MSA4IDE1IDcuNzc2MTQgMTUgNy41QzE1IDcuMjIzODYgMTQuNzc2MSA3IDE0LjUgN0gxMi41Wk0xMC42ODIgNC4zMTgwMkMxMC40ODY3IDQuMTIyNzYgMTAuNDg2NyAzLjgwNjE3IDEwLjY4MiAzLjYxMDkxTDEyLjA5NjIgMi4xOTY3QzEyLjI5MTUgMi4wMDE0NCAxMi42MDggMi4wMDE0NCAxMi44MDMzIDIuMTk2N0MxMi45OTg2IDIuMzkxOTYgMTIuOTk4NiAyLjcwODU0IDEyLjgwMzMgMi45MDM4MUwxMS4zODkxIDQuMzE4MDJDMTEuMTkzOCA0LjUxMzI4IDEwLjg3NzIgNC41MTMyOCAxMC42ODIgNC4zMTgwMlpNOCAxMi41QzggMTIuMjIzOSA3Ljc3NjE0IDEyIDcuNSAxMkM3LjIyMzg2IDEyIDcgMTIuMjIzOSA3IDEyLjVWMTQuNUM3IDE0Ljc3NjEgNy4yMjM4NiAxNSA3LjUgMTVDNy43NzYxNCAxNSA4IDE0Ljc3NjEgOCAxNC41VjEyLjVaTTEwLjY4MiAxMC42ODJDMTAuODc3MiAxMC40ODY3IDExLjE5MzggMTAuNDg2NyAxMS4zODkxIDEwLjY4MkwxMi44MDMzIDEyLjA5NjJDMTIuOTk4NiAxMi4yOTE1IDEyLjk5ODYgMTIuNjA4IDEyLjgwMzMgMTIuODAzM0MxMi42MDggMTIuOTk4NiAxMi4yOTE1IDEyLjk5ODYgMTIuMDk2MiAxMi44MDMzTDEwLjY4MiAxMS4zODkxQzEwLjQ4NjcgMTEuMTkzOCAxMC40ODY3IDEwLjg3NzIgMTAuNjgyIDEwLjY4MlpNNS41IDcuNUM1LjUgNi4zOTU0MyA2LjM5NTQzIDUuNSA3LjUgNS41QzguNjA0NTcgNS41IDkuNSA2LjM5NTQzIDkuNSA3LjVDOS41IDguNjA0NTcgOC42MDQ1NyA5LjUgNy41IDkuNUM2LjM5NTQzIDkuNSA1LjUgOC42MDQ1NyA1LjUgNy41Wk03LjUgNC41QzUuODQzMTUgNC41IDQuNSA1Ljg0MzE1IDQuNSA3LjVDNC41IDkuMTU2ODUgNS44NDMxNSAxMC41IDcuNSAxMC41QzkuMTU2ODUgMTAuNSAxMC41IDkuMTU2ODUgMTAuNSA3LjVDMTAuNSA1Ljg0MzE1IDkuMTU2ODUgNC41IDcuNSA0LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxxcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTAuNSA0QzguNTY3IDQgNyA1LjU2NyA3IDcuNUM3IDkuNDMzIDguNTY3IDExIDEwLjUgMTFDMTIuNDMzIDExIDE0IDkuNDMzIDE0IDcuNUMxNCA1LjU2NyAxMi40MzMgNCAxMC41IDRaTTcuNjcxMzMgMTFDNi42NTE4MyAxMC4xNzUgNiA4LjkxMzYzIDYgNy41QzYgNi4wODYzNyA2LjY1MTgzIDQuODI0OTggNy42NzEzMyA0SDQuNUMyLjU2NyA0IDEgNS41NjcgMSA3LjVDMSA5LjQzMyAyLjU2NyAxMSA0LjUgMTFINy42NzEzM1pNMCA3LjVDMCA1LjAxNDcyIDIuMDE0NzIgMyA0LjUgM0gxMC41QzEyLjk4NTMgMyAxNSA1LjAxNDcyIDE1IDcuNUMxNSA5Ljk4NTI4IDEyLjk4NTMgMTIgMTAuNSAxMkg0LjVDMi4wMTQ3MiAxMiAwIDkuOTg1MjggMCA3LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxZcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS45MDMyMSA3LjI5Njc3QzEuOTAzMjEgMTAuMzQxIDQuMTEwNDEgMTIuNDE0NyA2LjU4ODkzIDEyLjg0MzlDNi44NzI1NSAxMi44OTMgNy4wNjI2NiAxMy4xNjI3IDcuMDEzNTUgMTMuNDQ2NEM2Ljk2NDQ0IDEzLjczIDYuNjk0NzEgMTMuOTIwMSA2LjQxMTA5IDEzLjg3MUMzLjQ5OTQyIDEzLjM2NjggMC44NjA4NCAxMC45MTI3IDAuODYwODQgNy4yOTY3N0MwLjg2MDgzOSA1Ljc2MDA5IDEuNTU5OTYgNC41NTI0NSAyLjM3NjM5IDMuNjMzNzdDMi45NjEyNCAyLjk3NTY4IDMuNjMwMzQgMi40NDEzNSA0LjE2ODQ2IDIuMDMyMDJMMi41MzIwNSAyLjAzMjAyQzIuMjU1OTEgMi4wMzIwMiAyLjAzMjA1IDEuODA4MTYgMi4wMzIwNSAxLjUzMjAyQzIuMDMyMDUgMS4yNTU4OCAyLjI1NTkxIDEuMDMyMDIgMi41MzIwNSAxLjAzMjAyTDUuNTMyMDUgMS4wMzIwMkM1LjgwODE5IDEuMDMyMDIgNi4wMzIwNSAxLjI1NTg4IDYuMDMyMDUgMS41MzIwMkw2LjAzMjA1IDQuNTMyMDJDNi4wMzIwNSA0LjgwODE2IDUuODA4MTkgNS4wMzIwMiA1LjUzMjA1IDUuMDMyMDJDNS4yNTU5MSA1LjAzMjAyIDUuMDMyMDUgNC44MDgxNiA1LjAzMjA1IDQuNTMyMDJMNS4wMzIwNSAyLjY4NjQ1TDUuMDMwNTQgMi42ODc1OUw1LjAzMDQ1IDIuNjg3NjZMNS4wMzA0NCAyLjY4NzY3TDUuMDMwNDMgMi42ODc2N0M0LjQ1ODk2IDMuMTE4NjggMy43NjA1OSAzLjY0NTM4IDMuMTU1NTQgNC4zMjYyQzIuNDQxMDIgNS4xMzAyMSAxLjkwMzIxIDYuMTAxNTQgMS45MDMyMSA3LjI5Njc3Wk0xMy4wMTA5IDcuNzAzMjFDMTMuMDEwOSA0LjY5MTE1IDEwLjg1MDUgMi42Mjk2IDguNDAzODQgMi4xNzAyOUM4LjEyMDkzIDIuMTE3MTggNy45MzQ2NSAxLjg0NDc5IDcuOTg3NzYgMS41NjE4OEM4LjA0MDg3IDEuMjc4OTggOC4zMTMyNiAxLjA5MjcgOC41OTYxNiAxLjE0NTgxQzExLjQ3MDQgMS42ODU0MSAxNC4wNTMyIDQuMTI2MDUgMTQuMDUzMiA3LjcwMzIxQzE0LjA1MzIgOS4yMzk4OCAxMy4zNTQxIDEwLjQ0NzUgMTIuNTM3NyAxMS4zNjYyQzExLjk1MjggMTIuMDI0MyAxMS4yODM3IDEyLjU1ODYgMTAuNzQ1NiAxMi45NjhMMTIuMzgyMSAxMi45NjhDMTIuNjU4MiAxMi45NjggMTIuODgyMSAxMy4xOTE4IDEyLjg4MjEgMTMuNDY4QzEyLjg4MjEgMTMuNzQ0MSAxMi42NTgyIDEzLjk2OCAxMi4zODIxIDEzLjk2OEw5LjM4MjA1IDEzLjk2OEM5LjEwNTkxIDEzLjk2OCA4Ljg4MjA1IDEzLjc0NDEgOC44ODIwNSAxMy40NjhMOC44ODIwNSAxMC40NjhDOC44ODIwNSAxMC4xOTE4IDkuMTA1OTEgOS45Njc5NiA5LjM4MjA1IDkuOTY3OTZDOS42NTgxOSA5Ljk2Nzk2IDkuODgyMDUgMTAuMTkxOCA5Ljg4MjA1IDEwLjQ2OEw5Ljg4MjA1IDEyLjMxMzVMOS44ODM2MiAxMi4zMTIzQzEwLjQ1NTEgMTEuODgxMyAxMS4xNTM1IDExLjM1NDYgMTEuNzU4NSAxMC42NzM4QzEyLjQ3MzEgOS44Njk3NiAxMy4wMTA5IDguODk4NDQgMTMuMDEwOSA3LjcwMzIxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sS3I9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTggMkgxMi41QzEyLjc3NjEgMiAxMyAyLjIyMzg2IDEzIDIuNVY1SDhWMlpNNyA1VjJIMi41QzIuMjIzODYgMiAyIDIuMjIzODYgMiAyLjVWNUg3Wk0yIDZWOUg3VjZIMlpNOCA2SDEzVjlIOFY2Wk04IDEwSDEzVjEyLjVDMTMgMTIuNzc2MSAxMi43NzYxIDEzIDEyLjUgMTNIOFYxMFpNMiAxMi41VjEwSDdWMTNIMi41QzIuMjIzODYgMTMgMiAxMi43NzYxIDIgMTIuNVpNMSAyLjVDMSAxLjY3MTU3IDEuNjcxNTcgMSAyLjUgMUgxMi41QzEzLjMyODQgMSAxNCAxLjY3MTU3IDE0IDIuNVYxMi41QzE0IDEzLjMyODQgMTMuMzI4NCAxNCAxMi41IDE0SDIuNUMxLjY3MTU3IDE0IDEgMTMuMzI4NCAxIDEyLjVWMi41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sWHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuOTAwMDI0IDcuNTAwMDJDMC45MDAwMjQgMy44NTQ5NSAzLjg1NDk1IDAuOTAwMDI0IDcuNTAwMDIgMC45MDAwMjRDMTEuMTQ1MSAwLjkwMDAyNCAxNC4xIDMuODU0OTUgMTQuMSA3LjUwMDAyQzE0LjEgMTEuMTQ1MSAxMS4xNDUxIDE0LjEgNy41MDAwMiAxNC4xQzMuODU0OTUgMTQuMSAwLjkwMDAyNCAxMS4xNDUxIDAuOTAwMDI0IDcuNTAwMDJaTTcuNTAwMDIgMS44MDAwMkM0LjM1MjAxIDEuODAwMDIgMS44MDAwMiA0LjM1MjAxIDEuODAwMDIgNy41MDAwMkMxLjgwMDAyIDEwLjY0OCA0LjM1MjAxIDEzLjIgNy41MDAwMiAxMy4yQzEwLjY0OCAxMy4yIDEzLjIgMTAuNjQ4IDEzLjIgNy41MDAwMkMxMy4yIDQuMzUyMDEgMTAuNjQ4IDEuODAwMDIgNy41MDAwMiAxLjgwMDAyWk0zLjA3NTA0IDcuNTAwMDJDMy4wNzUwNCA1LjA1NjE3IDUuMDU2MTggMy4wNzUwMiA3LjUwMDA0IDMuMDc1MDJDOS45NDM4OCAzLjA3NTAyIDExLjkyNSA1LjA1NjE3IDExLjkyNSA3LjUwMDAyQzExLjkyNSA5Ljk0Mzg2IDkuOTQzODggMTEuOTI1IDcuNTAwMDQgMTEuOTI1QzUuMDU2MTggMTEuOTI1IDMuMDc1MDQgOS45NDM4NiAzLjA3NTA0IDcuNTAwMDJaTTcuNTAwMDQgMy45MjUwMkM1LjUyNTYyIDMuOTI1MDIgMy45MjUwNCA1LjUyNTYxIDMuOTI1MDQgNy41MDAwMkMzLjkyNTA0IDkuNDc0NDIgNS41MjU2MyAxMS4wNzUgNy41MDAwNCAxMS4wNzVDOS40NzQ0NCAxMS4wNzUgMTEuMDc1IDkuNDc0NDIgMTEuMDc1IDcuNTAwMDJDMTEuMDc1IDUuNTI1NjEgOS40NzQ0NCAzLjkyNTAyIDcuNTAwMDQgMy45MjUwMlpNNy41MDAwNCA1LjI1MDAyQzYuMjU3NCA1LjI1MDAyIDUuMjUwMDQgNi4yNTczOSA1LjI1MDA0IDcuNTAwMDJDNS4yNTAwNCA4Ljc0MjY2IDYuMjU3NCA5Ljc1MDAyIDcuNTAwMDQgOS43NTAwMkM4Ljc0MjY3IDkuNzUwMDIgOS43NTAwNCA4Ljc0MjY2IDkuNzUwMDQgNy41MDAwMkM5Ljc1MDA0IDYuMjU3MzggOC43NDI2NyA1LjI1MDAyIDcuNTAwMDQgNS4yNTAwMlpNNi4wNTAwNCA3LjUwMDAyQzYuMDUwMDQgNi42OTkyMSA2LjY5OTIzIDYuMDUwMDIgNy41MDAwNCA2LjA1MDAyQzguMzAwODQgNi4wNTAwMiA4Ljk1MDA0IDYuNjk5MjEgOC45NTAwNCA3LjUwMDAyQzguOTUwMDQgOC4zMDA4MyA4LjMwMDg0IDguOTUwMDIgNy41MDAwNCA4Ljk1MDAyQzYuNjk5MjMgOC45NTAwMiA2LjA1MDA0IDguMzAwODMgNi4wNTAwNCA3LjUwMDAyWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sSnI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTMuOTQ5OTMgMi45NTAwMkwzLjk0OTkzIDQuNDk5OThDMy45NDk5MyA0Ljc0ODUxIDMuNzQ4NDUgNC45NDk5OCAzLjQ5OTkzIDQuOTQ5OThDMy4yNTE0IDQuOTQ5OTggMy4wNDk5MyA0Ljc0ODUxIDMuMDQ5OTMgNC40OTk5OFYyLjUwMDA0QzMuMDQ5OTMgMi40NTI0NiAzLjA1NzMxIDIuNDA2NjEgMy4wNzA5OSAyLjM2MzU3QzMuMTI4NzggMi4xODE3NSAzLjI5ODk3IDIuMDUwMDIgMy40OTk5MyAyLjA1MDAySDExLjQ5OTlDMTEuNjU1MyAyLjA1MDAyIDExLjc5MjIgMi4xMjg3MiAxMS44NzMxIDIuMjQ4NDJDMTEuOTIxNiAyLjMyMDI0IDExLjk0OTkgMi40MDY4MiAxMS45NDk5IDIuNTAwMDJMMTEuOTQ5OSAyLjUwMDA0VjQuNDk5OThDMTEuOTQ5OSA0Ljc0ODUxIDExLjc0ODUgNC45NDk5OCAxMS40OTk5IDQuOTQ5OThDMTEuMjUxNCA0Ljk0OTk4IDExLjA0OTkgNC43NDg1MSAxMS4wNDk5IDQuNDk5OThWMi45NTAwMkg4LjA0OTkzVjEyLjA1SDkuMjU0MjhDOS41MDI4MSAxMi4wNSA5LjcwNDI4IDEyLjI1MTUgOS43MDQyOCAxMi41QzkuNzA0MjggMTIuNzQ4NiA5LjUwMjgxIDEyLjk1IDkuMjU0MjggMTIuOTVINS43NTQyOEM1LjUwNTc1IDEyLjk1IDUuMzA0MjggMTIuNzQ4NiA1LjMwNDI4IDEyLjVDNS4zMDQyOCAxMi4yNTE1IDUuNTA1NzUgMTIuMDUgNS43NTQyOCAxMi4wNUg2Ljk0OTkzVjIuOTUwMDJIMy45NDk5M1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFFyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0yIDQuNUMyIDQuMjIzODYgMi4yMjM4NiA0IDIuNSA0SDEyLjVDMTIuNzc2MSA0IDEzIDQuMjIzODYgMTMgNC41QzEzIDQuNzc2MTQgMTIuNzc2MSA1IDEyLjUgNUgyLjVDMi4yMjM4NiA1IDIgNC43NzYxNCAyIDQuNVpNNCA3LjVDNCA3LjIyMzg2IDQuMjIzODYgNyA0LjUgN0gxMC41QzEwLjc3NjEgNyAxMSA3LjIyMzg2IDExIDcuNUMxMSA3Ljc3NjE0IDEwLjc3NjEgOCAxMC41IDhINC41QzQuMjIzODYgOCA0IDcuNzc2MTQgNCA3LjVaTTMgMTAuNUMzIDEwLjIyMzkgMy4yMjM4NiAxMCAzLjUgMTBIMTEuNUMxMS43NzYxIDEwIDEyIDEwLjIyMzkgMTIgMTAuNUMxMiAxMC43NzYxIDExLjc3NjEgMTEgMTEuNSAxMUgzLjVDMy4yMjM4NiAxMSAzIDEwLjc3NjEgMyAxMC41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZW89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTIuNSA0QzIuMjIzODYgNCAyIDQuMjIzODYgMiA0LjVDMiA0Ljc3NjE0IDIuMjIzODYgNSAyLjUgNUgxMi41QzEyLjc3NjEgNSAxMyA0Ljc3NjE0IDEzIDQuNUMxMyA0LjIyMzg2IDEyLjc3NjEgNCAxMi41IDRIMi41Wk0yIDcuNUMyIDcuMjIzODYgMi4yMjM4NiA3IDIuNSA3SDEyLjVDMTIuNzc2MSA3IDEzIDcuMjIzODYgMTMgNy41QzEzIDcuNzc2MTQgMTIuNzc2MSA4IDEyLjUgOEgyLjVDMi4yMjM4NiA4IDIgNy43NzYxNCAyIDcuNVpNMiAxMC41QzIgMTAuMjIzOSAyLjIyMzg2IDEwIDIuNSAxMEgxMi41QzEyLjc3NjEgMTAgMTMgMTAuMjIzOSAxMyAxMC41QzEzIDEwLjc3NjEgMTIuNzc2MSAxMSAxMi41IDExSDIuNUMyLjIyMzg2IDExIDIgMTAuNzc2MSAyIDEwLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSx0bz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiA0LjVDMiA0LjIyMzg2IDIuMjIzODYgNCAyLjUgNEgxMi41QzEyLjc3NjEgNCAxMyA0LjIyMzg2IDEzIDQuNUMxMyA0Ljc3NjE0IDEyLjc3NjEgNSAxMi41IDVIMi41QzIuMjIzODYgNSAyIDQuNzc2MTQgMiA0LjVaTTIgNy41QzIgNy4yMjM4NiAyLjIyMzg2IDcgMi41IDdINy41QzcuNzc2MTQgNyA4IDcuMjIzODYgOCA3LjVDOCA3Ljc3NjE0IDcuNzc2MTQgOCA3LjUgOEgyLjVDMi4yMjM4NiA4IDIgNy43NzYxNCAyIDcuNVpNMiAxMC41QzIgMTAuMjIzOSAyLjIyMzg2IDEwIDIuNSAxMEgxMC41QzEwLjc3NjEgMTAgMTEgMTAuMjIzOSAxMSAxMC41QzExIDEwLjc3NjEgMTAuNzc2MSAxMSAxMC41IDExSDIuNUMyLjIyMzg2IDExIDIgMTAuNzc2MSAyIDEwLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxubz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMiA0LjVDMiA0LjIyMzg2IDIuMjIzODYgNCAyLjUgNEgxMi41QzEyLjc3NjEgNCAxMyA0LjIyMzg2IDEzIDQuNUMxMyA0Ljc3NjE0IDEyLjc3NjEgNSAxMi41IDVIMi41QzIuMjIzODYgNSAyIDQuNzc2MTQgMiA0LjVaTTcgNy41QzcgNy4yMjM4NiA3LjIyMzg2IDcgNy41IDdIMTIuNUMxMi43NzYxIDcgMTMgNy4yMjM4NiAxMyA3LjVDMTMgNy43NzYxNCAxMi43NzYxIDggMTIuNSA4SDcuNUM3LjIyMzg2IDggNyA3Ljc3NjE0IDcgNy41Wk00IDEwLjVDNCAxMC4yMjM5IDQuMjIzODYgMTAgNC41IDEwSDEyLjVDMTIuNzc2MSAxMCAxMyAxMC4yMjM5IDEzIDEwLjVDMTMgMTAuNzc2MSAxMi43NzYxIDExIDEyLjUgMTFINC41QzQuMjIzODYgMTEgNCAxMC43NzYxIDQgMTAuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHJvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xMy4zNTM2IDIuMzUzNTVDMTMuNTQ4OCAyLjE1ODI5IDEzLjU0ODggMS44NDE3MSAxMy4zNTM2IDEuNjQ2NDVDMTMuMTU4MyAxLjQ1MTE4IDEyLjg0MTcgMS40NTExOCAxMi42NDY0IDEuNjQ2NDVMMTEuOTI5MSAyLjM2MzgzQzExLjkxNTkgMi4zMjI0NiAxMS44OTcgMi4yODM2OCAxMS44NzMyIDIuMjQ4NDVDMTEuNzkyMyAyLjEyODc1IDExLjY1NTQgMi4wNTAwNSAxMS41MDAxIDIuMDUwMDVIMy41MDAwNUMzLjI5OTA5IDIuMDUwMDUgMy4xMjg5IDIuMTgxNzggMy4wNzExMSAyLjM2MzZDMy4wNTc0MyAyLjQwNjY1IDMuMDUwMDUgMi40NTI0OSAzLjA1MDA1IDIuNTAwMDdWNC41MDAwMUMzLjA1MDA1IDQuNzQ4NTQgMy4yNTE1MiA0Ljk1MDAxIDMuNTAwMDUgNC45NTAwMUMzLjc0ODU4IDQuOTUwMDEgMy45NTAwNSA0Ljc0ODU0IDMuOTUwMDUgNC41MDAwMVYyLjk1MDA1SDYuOTUwMDZWNy4zNDI4NEwxLjY0NjQ1IDEyLjY0NjRDMS40NTExOCAxMi44NDE3IDEuNDUxMTggMTMuMTU4MyAxLjY0NjQ1IDEzLjM1MzZDMS44NDE3MSAxMy41NDg4IDIuMTU4MjkgMTMuNTQ4OCAyLjM1MzU1IDEzLjM1MzZMNi45NTAwNiA4Ljc1NzA1VjEyLjA1MDFINS43NTQ0QzUuNTA1ODcgMTIuMDUwMSA1LjMwNDQgMTIuMjUxNSA1LjMwNDQgMTIuNTAwMUM1LjMwNDQgMTIuNzQ4NiA1LjUwNTg3IDEyLjk1MDEgNS43NTQ0IDEyLjk1MDFIOS4yNTQ0QzkuNTAyOTMgMTIuOTUwMSA5LjcwNDQgMTIuNzQ4NiA5LjcwNDQgMTIuNTAwMUM5LjcwNDQgMTIuMjUxNSA5LjUwMjkzIDEyLjA1MDEgOS4yNTQ0IDEyLjA1MDFIOC4wNTAwNlY3LjY1NzA1TDEzLjM1MzYgMi4zNTM1NVpNOC4wNTAwNiA2LjI0Mjg0TDExLjA1MDEgMy4yNDI4M1YyLjk1MDA1SDguMDUwMDZWNi4yNDI4NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LG9vPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01IDMuNUM1IDMuMjIzODYgNS4yMjM4NiAzIDUuNSAzSDkuNUM5Ljc3NjE0IDMgMTAgMy4yMjM4NiAxMCAzLjVWNkgxMi41QzEyLjY4NzMgNiAxMi44NTg5IDYuMTA0NjcgMTIuOTQ0NiA2LjI3MTIxQzEzLjAzMDMgNi40Mzc3NCAxMy4wMTU3IDYuNjM4MjEgMTIuOTA2OSA2Ljc5MDYyTDcuOTA2ODcgMTMuNzkwNkM3LjgxMzAxIDEzLjkyMiA3LjY2MTQ4IDE0IDcuNSAxNEM3LjMzODUzIDE0IDcuMTg2OTkgMTMuOTIyIDcuMDkzMTQgMTMuNzkwNkwyLjA5MzE0IDYuNzkwNjJDMS45ODQyNyA2LjYzODIxIDEuOTY5NzIgNi40Mzc3NCAyLjA1NTQyIDYuMjcxMjFDMi4xNDExMiA2LjEwNDY3IDIuMzEyNzEgNiAyLjUgNkg1VjMuNVpNNiA0VjYuNUM2IDYuNzc2MTQgNS43NzYxNCA3IDUuNSA3SDMuNDcxNkw3LjUgMTIuNjM5OEwxMS41Mjg0IDdIOS41QzkuMjIzODYgNyA5IDYuNzc2MTQgOSA2LjVWNEg2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0saW89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEgNy41QzEgNy42NjE0OCAxLjA3Nzk4IDcuODEzMDEgMS4yMDkzOCA3LjkwNjg3TDguMjA5MzggMTIuOTA2OUM4LjM2MTc5IDEzLjAxNTcgOC41NjIyNiAxMy4wMzAzIDguNzI4NzkgMTIuOTQ0NkM4Ljg5NTMzIDEyLjg1ODkgOSAxMi42ODczIDkgMTIuNUw5IDEwTDExLjUgMTBDMTEuNzc2MSAxMCAxMiA5Ljc3NjE0IDEyIDkuNUwxMiA1LjVDMTIgNS4yMjM4NiAxMS43NzYxIDUgMTEuNSA1TDkgNUw5IDIuNUM5IDIuMzEyNzEgOC44OTUzMyAyLjE0MTEyIDguNzI4NzkgMi4wNTU0MkM4LjU2MjI2IDEuOTY5NzIgOC4zNjE3OSAxLjk4NDI3IDguMjA5MzggMi4wOTMxM0wxLjIwOTM4IDcuMDkzMTRDMS4wNzc5OCA3LjE4Njk5IDEgNy4zMzg1MyAxIDcuNVpNOCAzLjQ3MTZMOCA1LjVDOCA1Ljc3NjE0IDguMjIzODYgNiA4LjUgNkwxMSA2TDExIDlMOC41IDlDOC4yMjM4NiA5IDggOS4yMjM4NiA4IDkuNUw4IDExLjUyODRMMi4zNjAyMyA3LjVMOCAzLjQ3MTZaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxhbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTQgNy41QzE0IDcuNjYxNDggMTMuOTIyIDcuODEzMDEgMTMuNzkwNiA3LjkwNjg3TDYuNzkwNjIgMTIuOTA2OUM2LjYzODIxIDEzLjAxNTcgNi40Mzc3NCAxMy4wMzAzIDYuMjcxMjEgMTIuOTQ0NkM2LjEwNDY3IDEyLjg1ODkgNiAxMi42ODczIDYgMTIuNUw2IDEwTDMuNSAxMEMzLjIyMzg2IDEwIDMgOS43NzYxNCAzIDkuNUwzIDUuNUMzIDUuMjIzODYgMy4yMjM4NiA1IDMuNSA1TDYgNUw2IDIuNUM2IDIuMzEyNzEgNi4xMDQ2NyAyLjE0MTEyIDYuMjcxMjEgMi4wNTU0MkM2LjQzNzc0IDEuOTY5NzIgNi42MzgyMSAxLjk4NDI3IDYuNzkwNjIgMi4wOTMxM0wxMy43OTA2IDcuMDkzMTRDMTMuOTIyIDcuMTg2OTkgMTQgNy4zMzg1MyAxNCA3LjVaTTcgMy40NzE2TDcgNS41QzcgNS43NzYxNCA2Ljc3NjE0IDYgNi41IDZMNCA2TDQgOUw2LjUgOUM2Ljc3NjE0IDkgNyA5LjIyMzg2IDcgOS41TDcgMTEuNTI4NEwxMi42Mzk4IDcuNUw3IDMuNDcxNlpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGxvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjUgMUM3LjY2MTQ4IDEgNy44MTMwMSAxLjA3Nzk4IDcuOTA2ODcgMS4yMDkzOEwxMi45MDY5IDguMjA5MzhDMTMuMDE1NyA4LjM2MTc5IDEzLjAzMDMgOC41NjIyNiAxMi45NDQ2IDguNzI4NzlDMTIuODU4OSA4Ljg5NTMzIDEyLjY4NzMgOSAxMi41IDlIMTBWMTEuNUMxMCAxMS43NzYxIDkuNzc2MTQgMTIgOS41IDEySDUuNUM1LjIyMzg2IDEyIDUgMTEuNzc2MSA1IDExLjVWOUgyLjVDMi4zMTI3MSA5IDIuMTQxMTIgOC44OTUzMyAyLjA1NTQyIDguNzI4NzlDMS45Njk3MiA4LjU2MjI2IDEuOTg0MjcgOC4zNjE3OSAyLjA5MzE0IDguMjA5MzhMNy4wOTMxNCAxLjIwOTM4QzcuMTg2OTkgMS4wNzc5OCA3LjMzODUzIDEgNy41IDFaTTMuNDcxNiA4SDUuNUM1Ljc3NjE0IDggNiA4LjIyMzg2IDYgOC41VjExSDlWOC41QzkgOC4yMjM4NiA5LjIyMzg2IDggOS41IDhIMTEuNTI4NEw3LjUgMi4zNjAyM0wzLjQ3MTYgOFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHNvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTk4IDAuODQ5OTc2QzcuMjIzODMgMC44NDk5NzYgNi45OTk5OCAxLjA3MzgzIDYuOTk5OTggMS4zNDk5OFYzLjUyMjM0QzYuOTk5OTggMy43OTg0OCA3LjIyMzgzIDQuMDIyMzQgNy40OTk5OCA0LjAyMjM0QzcuNzc2MTIgNC4wMjIzNCA3Ljk5OTk4IDMuNzk4NDggNy45OTk5OCAzLjUyMjM0VjEuODcxOEMxMC44ODYyIDIuMTI0ODggMTMuMTUgNC41NDgwNiAxMy4xNSA3LjQ5OTk4QzEzLjE1IDEwLjYyMDQgMTAuNjIwNCAxMy4xNSA3LjQ5OTk4IDEzLjE1QzQuMzc5NTcgMTMuMTUgMS44NDk5OCAxMC42MjA0IDEuODQ5OTggNy40OTk5OEMxLjg0OTk4IDYuMTA2MTIgMi4zNTQwNyA0LjgzMTI4IDMuMTkwNDkgMy44NDU5QzMuMzY5MTkgMy42MzUzOCAzLjM0MzM5IDMuMzE5ODUgMy4xMzI4NiAzLjE0MTE1QzIuOTIyMzQgMi45NjI0NSAyLjYwNjgxIDIuOTg4MjUgMi40MjgxMSAzLjE5ODc3QzEuNDQ0MDUgNC4zNTgwOCAwLjg0OTk3NiA1Ljg2MDI5IDAuODQ5OTc2IDcuNDk5OThDMC44NDk5NzYgMTEuMTcyNyAzLjgyNzI4IDE0LjE1IDcuNDk5OTggMTQuMTVDMTEuMTcyNyAxNC4xNSAxNC4xNSAxMS4xNzI3IDE0LjE1IDcuNDk5OThDMTQuMTUgMy44MjcyOCAxMS4xNzI3IDAuODQ5OTc2IDcuNDk5OTggMC44NDk5NzZaTTYuNzQwNDkgOC4wODA3Mkw0LjIyMzYzIDQuNTcyMzdDNC4xNTIzMSA0LjQ3Mjk1IDQuMTYzNDYgNC4zMzY1MiA0LjI0OTk4IDQuMjVDNC4zMzY0OSA0LjE2MzQ4IDQuNDcyOTMgNC4xNTIzMyA0LjU3MjM0IDQuMjIzNjVMOC4wODA2OSA2Ljc0MDUxQzguNTYyMjcgNy4wODU5OSA4LjYxOTA2IDcuNzgwOTEgOC4xOTk5OCA4LjJDNy43ODA4OSA4LjYxOTA5IDcuMDg1OTcgOC41NjIyOSA2Ljc0MDQ5IDguMDgwNzJaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxjbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNC41IDJDMy4xMTkyOSAyIDIgMy4xMTkyOSAyIDQuNUMyIDUuODgwNzIgMy4xMTkyOSA3IDQuNSA3QzUuODgwNzIgNyA3IDUuODgwNzIgNyA0LjVDNyAzLjExOTI5IDUuODgwNzIgMiA0LjUgMlpNMyA0LjVDMyAzLjY3MTU3IDMuNjcxNTcgMyA0LjUgM0M1LjMyODQzIDMgNiAzLjY3MTU3IDYgNC41QzYgNS4zMjg0MyA1LjMyODQzIDYgNC41IDZDMy42NzE1NyA2IDMgNS4zMjg0MyAzIDQuNVpNMTAuNSAyQzkuMTE5MjkgMiA4IDMuMTE5MjkgOCA0LjVDOCA1Ljg4MDcyIDkuMTE5MjkgNyAxMC41IDdDMTEuODgwNyA3IDEzIDUuODgwNzIgMTMgNC41QzEzIDMuMTE5MjkgMTEuODgwNyAyIDEwLjUgMlpNOSA0LjVDOSAzLjY3MTU3IDkuNjcxNTcgMyAxMC41IDNDMTEuMzI4NCAzIDEyIDMuNjcxNTcgMTIgNC41QzEyIDUuMzI4NDMgMTEuMzI4NCA2IDEwLjUgNkM5LjY3MTU3IDYgOSA1LjMyODQzIDkgNC41Wk0yIDEwLjVDMiA5LjExOTI5IDMuMTE5MjkgOCA0LjUgOEM1Ljg4MDcyIDggNyA5LjExOTI5IDcgMTAuNUM3IDExLjg4MDcgNS44ODA3MiAxMyA0LjUgMTNDMy4xMTkyOSAxMyAyIDExLjg4MDcgMiAxMC41Wk00LjUgOUMzLjY3MTU3IDkgMyA5LjY3MTU3IDMgMTAuNUMzIDExLjMyODQgMy42NzE1NyAxMiA0LjUgMTJDNS4zMjg0MyAxMiA2IDExLjMyODQgNiAxMC41QzYgOS42NzE1NyA1LjMyODQzIDkgNC41IDlaTTEwLjUgOEM5LjExOTI5IDggOCA5LjExOTI5IDggMTAuNUM4IDExLjg4MDcgOS4xMTkyOSAxMyAxMC41IDEzQzExLjg4MDcgMTMgMTMgMTEuODgwNyAxMyAxMC41QzEzIDkuMTE5MjkgMTEuODgwNyA4IDEwLjUgOFpNOSAxMC41QzkgOS42NzE1NyA5LjY3MTU3IDkgMTAuNSA5QzExLjMyODQgOSAxMiA5LjY3MTU3IDEyIDEwLjVDMTIgMTEuMzI4NCAxMS4zMjg0IDEyIDEwLjUgMTJDOS42NzE1NyAxMiA5IDExLjMyODQgOSAxMC41WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sdW89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEzLjA1MDIgMi43NDk4OUMxMy4wNTAyIDIuNDQ2MTMgMTIuODA0IDIuMTk5ODkgMTIuNTAwMiAyLjE5OTg5QzEyLjE5NjUgMi4xOTk4OSAxMS45NTAyIDIuNDQ2MTMgMTEuOTUwMiAyLjc0OTg5VjcuMjgyNUMxMS45MDQ2IDcuMTg4MDIgMTEuODI5NSA3LjEwODUxIDExLjczMzQgNy4wNTc3NkwyLjczMzM4IDIuMzA3NzZDMi41Nzg0IDIuMjI1OTYgMi4zOTE5IDIuMjMxMjcgMi4yNDE4MiAyLjMyMTc2QzIuMDkxNzUgMi40MTIyNSAyIDIuNTc0NzEgMiAyLjc0OTk1VjEyLjI1QzIgMTIuNDI1MiAyLjA5MTc1IDEyLjU4NzcgMi4yNDE4MiAxMi42NzgxQzIuMzkxOSAxMi43Njg2IDIuNTc4NCAxMi43NzM5IDIuNzMzMzggMTIuNjkyMUwxMS43MzM0IDcuOTQyMTRDMTEuODI5NSA3Ljg5MTM5IDExLjkwNDYgNy44MTE4OCAxMS45NTAyIDcuNzE3NFYxMi4yNDk5QzExLjk1MDIgMTIuNTUzNiAxMi4xOTY1IDEyLjc5OTkgMTIuNTAwMiAxMi43OTk5QzEyLjgwNCAxMi43OTk5IDEzLjA1MDIgMTIuNTUzNiAxMy4wNTAyIDEyLjI0OTlWMi43NDk4OVpNMyAxMS40MjA3VjMuNTc5MkwxMC40Mjg4IDcuNDk5OTVMMyAxMS40MjA3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sZm89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTEuOTQ5NzYgMi43NDk4OUMxLjk0OTc2IDIuNDQ2MTMgMi4xOTYgMi4xOTk4OSAyLjQ5OTc2IDIuMTk5ODlDMi44MDM1MSAyLjE5OTg5IDMuMDQ5NzYgMi40NDYxMyAzLjA0OTc2IDIuNzQ5ODlWNy4yODI1QzMuMDk1NCA3LjE4ODAyIDMuMTcwNDYgNy4xMDg1MSAzLjI2NjYyIDcuMDU3NzZMMTIuMjY2NiAyLjMwNzc2QzEyLjQyMTYgMi4yMjU5NiAxMi42MDgxIDIuMjMxMjcgMTIuNzU4MiAyLjMyMTc2QzEyLjkwODMgMi40MTIyNSAxMyAyLjU3NDcxIDEzIDIuNzQ5OTVWMTIuMjVDMTMgMTIuNDI1MiAxMi45MDgzIDEyLjU4NzcgMTIuNzU4MiAxMi42NzgxQzEyLjYwODEgMTIuNzY4NiAxMi40MjE2IDEyLjc3MzkgMTIuMjY2NiAxMi42OTIxTDMuMjY2NjIgNy45NDIxNEMzLjE3MDQ2IDcuODkxMzkgMy4wOTU0IDcuODExODggMy4wNDk3NiA3LjcxNzRWMTIuMjQ5OUMzLjA0OTc2IDEyLjU1MzYgMi44MDM1MSAxMi43OTk5IDIuNDk5NzYgMTIuNzk5OUMyLjE5NiAxMi43OTk5IDEuOTQ5NzYgMTIuNTUzNiAxLjk0OTc2IDEyLjI0OTlWMi43NDk4OVpNNC41NzEyMiA3LjQ5OTk1TDEyIDExLjQyMDdWMy41NzkyTDQuNTcxMjIgNy40OTk5NVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LHBvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7b3BhY2l0eTpcIi4yNVwiLGQ6XCJNMCAwSDNWM0gwVjBaTTYgM0gzVjZIMFY5SDNWMTJIMFYxNUgzVjEySDZWMTVIOVYxMkgxMlYxNUgxNVYxMkgxMlY5SDE1VjZIMTJWM0gxNVYwSDEyVjNIOVYwSDZWM1pNNiA2VjNIOVY2SDZaTTYgOUgzVjZINlY5Wk05IDlWNkgxMlY5SDlaTTkgOUg2VjEySDlWOVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGhvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk01LjUgMUM1LjIyMzg2IDEgNSAxLjIyMzg2IDUgMS41QzUgMS43NzYxNCA1LjIyMzg2IDIgNS41IDJIOS41QzkuNzc2MTQgMiAxMCAxLjc3NjE0IDEwIDEuNUMxMCAxLjIyMzg2IDkuNzc2MTQgMSA5LjUgMUg1LjVaTTMgMy41QzMgMy4yMjM4NiAzLjIyMzg2IDMgMy41IDNINUgxMEgxMS41QzExLjc3NjEgMyAxMiAzLjIyMzg2IDEyIDMuNUMxMiAzLjc3NjE0IDExLjc3NjEgNCAxMS41IDRIMTFWMTJDMTEgMTIuNTUyMyAxMC41NTIzIDEzIDEwIDEzSDVDNC40NDc3MiAxMyA0IDEyLjU1MjMgNCAxMlY0TDMuNSA0QzMuMjIzODYgNCAzIDMuNzc2MTQgMyAzLjVaTTUgNEgxMFYxMkg1VjRaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxnbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNCA2SDExTDcuNSAxMC41TDQgNlpcIixmaWxsOm59KSl9LHZvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk05IDRMOSAxMUw0LjUgNy41TDkgNFpcIixmaWxsOm59KSl9LG1vPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk02IDExTDYgNEwxMC41IDcuNUw2IDExWlwiLGZpbGw6bn0pKX0sQ289ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTQgOUgxMUw3LjUgNC41TDQgOVpcIixmaWxsOm59KSl9LHlvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjIzMzM2IDQuNjk2MjlDNy4yMzMzNiAyLjk2ODg0IDguNjMzMzUgMS41Njg1NyAxMC4zNiAxLjU2ODU3QzExLjM3MzYgMS41Njg1NyAxMi4xODMgMi4wNDgwNCAxMi43MjU0IDIuNzQzODVDMTMuMzA3OSAyLjYyNDY3IDEzLjg1NTcgMi40MDkxMyAxNC4zNTEzIDIuMTE1MDhDMTQuMTU1OSAyLjcyNTk4IDEzLjc0MjQgMy4yMzk2IDEzLjIwMzMgMy41NjQ2M0MxMy4yMDM4IDMuNTY1NjggMTMuMjA0MiAzLjU2Njc0IDEzLjIwNDcgMy41Njc3OUMxMy43MzM0IDMuNTAzNjEgMTQuMjM2NCAzLjM2MzAyIDE0LjcwNDggMy4xNTU0NkwxNC43MDM3IDMuMTU3MTVDMTQuMzY2NyAzLjY2MTgzIDEzLjk0MzEgNC4xMDczNiAxMy40NTYxIDQuNDcwMzRDMTMuNDgyMyA0LjY0NjcyIDEzLjQ5NTYgNC44MjQyNyAxMy40OTU2IDUuMDAwNzlDMTMuNDk1NiA4LjY4NzEgMTAuNjg3MyAxMi45NzQ2IDUuNTIxMjIgMTIuOTc0NkMzLjkzOTA2IDEyLjk3NDYgMi40NjU0NCAxMi41MTEgMS4yMjUwNSAxMS43MTUyQzAuOTkyNjMyIDExLjU2NjEgMC45MjUxMDggMTEuMjU2OCAxLjA3NDIzIDExLjAyNDRDMS4wODc0IDExLjAwMzggMS4xMDE4MyAxMC45ODQ2IDEuMTE3MzQgMTAuOTY2NkMxLjIwNTgyIDEwLjgyMDIgMS4zNzQzOCAxMC43MzA5IDEuNTU1NCAxMC43NTIyQzIuNDcwNjYgMTAuODYwMSAzLjM4NTY4IDEwLjc0ODUgNC4xOTIxOSAxMC4zOTYyQzMuMzkyMjYgMTAuMDQzNCAyLjc3MTI5IDkuMzU5NzUgMi41MDIwNCA4LjUxOTc0QzIuNDUzNTkgOC4zNjg2IDIuNDg4MzUgOC4yMDMxMSAyLjU5MzUxIDguMDg0MjJDMi41OTcxNiA4LjA4MDEgMi42MDA4NyA4LjA3NjA2IDIuNjA0NjQgOC4wNzIxQzEuOTYzOTEgNy41MDgxOSAxLjU1OTczIDYuNjgyMDggMS41NTk3MyA1Ljc2MTQzVjUuNzI3NTlDMS41NTk3MyA1LjU2ODE0IDEuNjQ0MTEgNS40MjA1OSAxLjc4MTU1IDUuMzM5NzRDMS44MjY3MSA1LjMxMzE3IDEuODc1MzcgNS4yOTUxMSAxLjkyNTMyIDUuMjg1NThDMS43MDU0OSA0Ljg2MTU0IDEuNTgxMTYgNC4zNzk4NCAxLjU4MTE2IDMuODY5NThDMS41ODExNiAzLjQwMTY1IDEuNTgzODQgMi44MTE5MiAxLjkxMzMyIDIuMjgwODFDMS45ODcxOCAyLjE2MTc1IDIuMTA3NTggMi4wODkxNSAyLjIzNjQgMi4wNzE5NUMyLjQyNTg4IDIuMDEyMzcgMi42NDA4NyAyLjA2OTY5IDIuNzc0MDYgMi4yMzMwMkMzLjg2NTM2IDMuNTcxMjYgNS40NDA2NiA0LjQ5NTgzIDcuMjMzNjYgNC43Mzk2MUw3LjIzMzM2IDQuNjk2MjlaTTUuNTIxMjIgMTEuOTc0NkM0LjczMzg3IDExLjk3NDYgMy45Nzc4MSAxMS44NDM1IDMuMjcyNDggMTEuNjAyM0M0LjEzMDEyIDExLjQ1MzggNC45NTMwNyAxMS4xMTU5IDUuNjYyMTggMTAuNTYwMkM1LjgxMjExIDEwLjQ0MjcgNS44NzE4MiAxMC4yNDM1IDUuODExMjYgMTAuMDYyOUM1Ljc1MDcgOS44ODIzNCA1LjU4MyA5Ljc1OTQzIDUuMzkyNTUgOS43NTYwN0M0LjY4OTY4IDkuNzQzNjYgNC4wNjcxMiA5LjM5NzE2IDMuNjc3OTMgOC44Njg0NUMzLjg2ODI4IDguODUzMDYgNC4wNTQyOCA4LjgyMDM5IDQuMjM0NDUgOC43NzE2N0M0LjQzNjAzIDguNzE3MTYgNC41NzM2MyA4LjUzMTE0IDQuNTY2NzQgOC4zMjI0M0M0LjU1OTg1IDguMTEzNzIgNC40MTAyOSA3LjkzNzE4IDQuMjA1NTUgNy44OTYwN0MzLjQyNjk0IDcuNzM5NzcgMi43OTg4MyA3LjE2NzY0IDIuNTYxNjkgNi40MjE3NEMyLjc2MjU1IDYuNDcwMjUgMi45NzEwMiA2LjQ5OTEgMy4xODQ4MiA2LjUwNjFDMy4zODU2MyA2LjUxMjY3IDMuNTY2NDYgNi4zODUzMyAzLjYyNzk1IDYuMTk0MDVDMy42ODk0MyA2LjAwMjc3IDMuNjE2NjYgNS43OTM5MSAzLjQ0OTYzIDUuNjgyMjRDMi44NjUyMyA1LjI5MTU1IDIuNDgxMTYgNC42MjQ2NCAyLjQ4MTE2IDMuODY5NThDMi40ODExNiAzLjcwMjEzIDIuNDgzNTIgMy41NTI2OCAyLjQ5MzU1IDMuNDE3MTlDMy44NTExNSA0Ljc5OTEzIDUuNzA4NzMgNS42ODkzMSA3Ljc3NTg4IDUuNzkzMzhDNy45MzIyNSA1LjgwMTI2IDguMDgzMjggNS43MzU0MyA4LjE4Mzk1IDUuNjE1NTNDOC4yODQ2MyA1LjQ5NTYyIDguMzIzMzIgNS4zMzU0OCA4LjI4ODUxIDUuMTgyODRDOC4yNTI1NSA1LjAyNTE3IDguMjMzMzYgNC44NjI4NCA4LjIzMzM2IDQuNjk2MjlDOC4yMzMzNiAzLjUyMDg1IDkuMTg1OTEgMi41Njg1NyAxMC4zNiAyLjU2ODU3QzExLjU5NDMgMi41Njg1NyAxMi40OTU2IDMuNzEyMDggMTIuNDk1NiA1LjAwMDc5QzEyLjQ5NTYgOC4yNTcwOSAxMC4wMjAyIDExLjk3NDYgNS41MjEyMiAxMS45NzQ2WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sd289ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTUuMDAwMDEgMi43NUM1LjAwMDAxIDIuNDczODYgNC43NzYxNSAyLjI1IDQuNTAwMDEgMi4yNUM0LjIyMzg3IDIuMjUgNC4wMDAwMSAyLjQ3Mzg2IDQuMDAwMDEgMi43NVY4LjA1QzQuMDAwMDEgOS45ODMgNS41NjcwMiAxMS41NSA3LjUwMDAxIDExLjU1QzkuNDMzMDEgMTEuNTUgMTEgOS45ODMgMTEgOC4wNVYyLjc1QzExIDIuNDczODYgMTAuNzc2MiAyLjI1IDEwLjUgMi4yNUMxMC4yMjM5IDIuMjUgMTAgMi40NzM4NiAxMCAyLjc1VjguMDVDMTAgOS40MzA3MSA4Ljg4MDcyIDEwLjU1IDcuNTAwMDEgMTAuNTVDNi4xMTkzIDEwLjU1IDUuMDAwMDEgOS40MzA3MSA1LjAwMDAxIDguMDVWMi43NVpNMy40OTk5OCAxMy4xMDAxQzMuMjc5MDYgMTMuMTAwMSAzLjA5OTk4IDEzLjI3OTEgMy4wOTk5OCAxMy41MDAxQzMuMDk5OTggMTMuNzIxIDMuMjc5MDYgMTMuOTAwMSAzLjQ5OTk4IDEzLjkwMDFIMTEuNUMxMS43MjA5IDEzLjkwMDEgMTEuOSAxMy43MjEgMTEuOSAxMy41MDAxQzExLjkgMTMuMjc5MSAxMS43MjA5IDEzLjEwMDEgMTEuNSAxMy4xMDAxSDMuNDk5OThaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxibz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMS45MDMyMSA3LjI5Njc3QzEuOTAzMjEgMTAuMzQxIDQuMTEwNDEgMTIuNDE0NyA2LjU4ODkzIDEyLjg0MzlDNi44NzI1NSAxMi44OTMgNy4wNjI2NiAxMy4xNjI3IDcuMDEzNTUgMTMuNDQ2NEM2Ljk2NDQ0IDEzLjczIDYuNjk0NzEgMTMuOTIwMSA2LjQxMTA5IDEzLjg3MUMzLjQ5OTQyIDEzLjM2NjggMC44NjA4NCAxMC45MTI3IDAuODYwODQgNy4yOTY3N0MwLjg2MDgzOSA1Ljc2MDA5IDEuNTU5OTYgNC41NTI0NSAyLjM3NjM5IDMuNjMzNzdDMi45NjEyNCAyLjk3NTY4IDMuNjMwMzQgMi40NDEzNSA0LjE2ODQ2IDIuMDMyMDJMMi41MzIwNSAyLjAzMjAyQzIuMjU1OTEgMi4wMzIwMiAyLjAzMjA1IDEuODA4MTYgMi4wMzIwNSAxLjUzMjAyQzIuMDMyMDUgMS4yNTU4OCAyLjI1NTkxIDEuMDMyMDIgMi41MzIwNSAxLjAzMjAyTDUuNTMyMDUgMS4wMzIwMkM1LjgwODE5IDEuMDMyMDIgNi4wMzIwNSAxLjI1NTg4IDYuMDMyMDUgMS41MzIwMkw2LjAzMjA1IDQuNTMyMDJDNi4wMzIwNSA0LjgwODE2IDUuODA4MTkgNS4wMzIwMiA1LjUzMjA1IDUuMDMyMDJDNS4yNTU5MSA1LjAzMjAyIDUuMDMyMDUgNC44MDgxNiA1LjAzMjA1IDQuNTMyMDJMNS4wMzIwNSAyLjY4NjQ1TDUuMDMwNTQgMi42ODc1OUw1LjAzMDQ1IDIuNjg3NjZMNS4wMzA0NCAyLjY4NzY3TDUuMDMwNDMgMi42ODc2N0M0LjQ1ODk2IDMuMTE4NjggMy43NjA1OSAzLjY0NTM4IDMuMTU1NTQgNC4zMjYyQzIuNDQxMDIgNS4xMzAyMSAxLjkwMzIxIDYuMTAxNTQgMS45MDMyMSA3LjI5Njc3Wk0xMy4wMTA5IDcuNzAzMjFDMTMuMDEwOSA0LjY5MTE1IDEwLjg1MDUgMi42Mjk2IDguNDAzODQgMi4xNzAyOUM4LjEyMDkzIDIuMTE3MTggNy45MzQ2NSAxLjg0NDc5IDcuOTg3NzYgMS41NjE4OEM4LjA0MDg3IDEuMjc4OTggOC4zMTMyNiAxLjA5MjcgOC41OTYxNiAxLjE0NTgxQzExLjQ3MDQgMS42ODU0MSAxNC4wNTMyIDQuMTI2MDUgMTQuMDUzMiA3LjcwMzIxQzE0LjA1MzIgOS4yMzk4OCAxMy4zNTQxIDEwLjQ0NzUgMTIuNTM3NyAxMS4zNjYyQzExLjk1MjggMTIuMDI0MyAxMS4yODM3IDEyLjU1ODYgMTAuNzQ1NiAxMi45NjhMMTIuMzgyMSAxMi45NjhDMTIuNjU4MiAxMi45NjggMTIuODgyMSAxMy4xOTE4IDEyLjg4MjEgMTMuNDY4QzEyLjg4MjEgMTMuNzQ0MSAxMi42NTgyIDEzLjk2OCAxMi4zODIxIDEzLjk2OEw5LjM4MjA1IDEzLjk2OEM5LjEwNTkxIDEzLjk2OCA4Ljg4MjA1IDEzLjc0NDEgOC44ODIwNSAxMy40NjhMOC44ODIwNSAxMC40NjhDOC44ODIwNSAxMC4xOTE4IDkuMTA1OTEgOS45Njc5NiA5LjM4MjA1IDkuOTY3OTZDOS42NTgxOSA5Ljk2Nzk2IDkuODgyMDUgMTAuMTkxOCA5Ljg4MjA1IDEwLjQ2OEw5Ljg4MjA1IDEyLjMxMzVMOS44ODM2MiAxMi4zMTIzQzEwLjQ1NTEgMTEuODgxMyAxMS4xNTM1IDExLjM1NDYgMTEuNzU4NSAxMC42NzM4QzEyLjQ3MzEgOS44Njk3NiAxMy4wMTA5IDguODk4NDQgMTMuMDEwOSA3LjcwMzIxWlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0seG89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTcuODE4MjUgMS4xODE4OEM3LjY0MjUxIDEuMDA2MTUgNy4zNTc1OSAxLjAwNjE1IDcuMTgxODUgMS4xODE4OEw0LjE4MTg1IDQuMTgxODhDNC4wMDYxMSA0LjM1NzYyIDQuMDA2MTEgNC42NDI1NCA0LjE4MTg1IDQuODE4MjhDNC4zNTc1OSA0Ljk5NDAxIDQuNjQyNTEgNC45OTQwMSA0LjgxODI1IDQuODE4MjhMNy4wNTAwNSAyLjU4NjQ4VjkuNDk5OTZDNy4wNTAwNSA5Ljc0ODQ5IDcuMjUxNTIgOS45NDk5NiA3LjUwMDA1IDkuOTQ5OTZDNy43NDg1OCA5Ljk0OTk2IDcuOTUwMDUgOS43NDg0OSA3Ljk1MDA1IDkuNDk5OTZWMi41ODY0OEwxMC4xODE5IDQuODE4MjhDMTAuMzU3NiA0Ljk5NDAxIDEwLjY0MjUgNC45OTQwMSAxMC44MTgyIDQuODE4MjhDMTAuOTk0IDQuNjQyNTQgMTAuOTk0IDQuMzU3NjIgMTAuODE4MiA0LjE4MTg4TDcuODE4MjUgMS4xODE4OFpNMi41IDkuOTk5OTdDMi43NzYxNCA5Ljk5OTk3IDMgMTAuMjIzOCAzIDEwLjVWMTJDMyAxMi41NTM4IDMuNDQ1NjUgMTMgMy45OTYzNSAxM0gxMS4wMDEyQzExLjU1MjkgMTMgMTIgMTIuNTUyOCAxMiAxMlYxMC41QzEyIDEwLjIyMzggMTIuMjIzOSA5Ljk5OTk3IDEyLjUgOS45OTk5N0MxMi43NzYxIDkuOTk5OTcgMTMgMTAuMjIzOCAxMyAxMC41VjEyQzEzIDEzLjEwNCAxMi4xMDYyIDE0IDExLjAwMTIgMTRIMy45OTYzNUMyLjg5MDE5IDE0IDIgMTMuMTAzIDIgMTJWMTAuNUMyIDEwLjIyMzggMi4yMjM4NiA5Ljk5OTk3IDIuNSA5Ljk5OTk3WlwiLGZpbGw6bixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pKX0sX289ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xvcixuPXZvaWQgMD09PXQ/XCJjdXJyZW50Q29sb3JcIjp0LGk9byhlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxpKSwoMCxyLmNyZWF0ZUVsZW1lbnQpKFwicGF0aFwiLHtkOlwiTTAuODc3MDc1IDcuNDk5ODhDMC44NzcwNzUgMy44NDIxOSAzLjg0MjIyIDAuODc3MDQ1IDcuNDk5OTEgMC44NzcwNDVDMTEuMTU3NiAwLjg3NzA0NSAxNC4xMjI3IDMuODQyMTkgMTQuMTIyNyA3LjQ5OTg4QzE0LjEyMjcgMTEuMTU3NSAxMS4xNTc2IDE0LjEyMjcgNy40OTk5MSAxNC4xMjI3QzMuODQyMjIgMTQuMTIyNyAwLjg3NzA3NSAxMS4xNTc1IDAuODc3MDc1IDcuNDk5ODhaTTcuNDk5OTEgMS44MjcwNEM0LjM2Njg5IDEuODI3MDQgMS44MjcwOCA0LjM2Njg2IDEuODI3MDggNy40OTk4OEMxLjgyNzA4IDEwLjYzMjkgNC4zNjY4OSAxMy4xNzI3IDcuNDk5OTEgMTMuMTcyN0MxMC42MzI5IDEzLjE3MjcgMTMuMTcyNyAxMC42MzI5IDEzLjE3MjcgNy40OTk4OEMxMy4xNzI3IDQuMzY2ODYgMTAuNjMyOSAxLjgyNzA0IDcuNDk5OTEgMS44MjcwNFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LE9vPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTg1IDAuODc3MDQ1QzMuODQyMTYgMC44NzcwNDUgMC44NzcwMTQgMy44NDIxOSAwLjg3NzAxNCA3LjQ5OTg4QzAuODc3MDE0IDkuMTQ4OCAxLjQ3OTYzIDEwLjY1NyAyLjQ3NjY1IDExLjgxNjJMMS42NDY0MyAxMi42NDY0QzEuNDUxMTcgMTIuODQxNyAxLjQ1MTE3IDEzLjE1ODMgMS42NDY0MyAxMy4zNTM1QzEuODQxNyAxMy41NDg4IDIuMTU4MjggMTMuNTQ4OCAyLjM1MzU0IDEzLjM1MzVMMy4xODM3NyAxMi41MjMzQzQuMzQyOTYgMTMuNTIwMiA1Ljg1MTA0IDE0LjEyMjcgNy40OTk4NSAxNC4xMjI3QzExLjE1NzUgMTQuMTIyNyAxNC4xMjI3IDExLjE1NzUgMTQuMTIyNyA3LjQ5OTg4QzE0LjEyMjcgNS44NTEwNyAxMy41MjAyIDQuMzQyOTkgMTIuNTIzMyAzLjE4MzhMMTMuMzUzNSAyLjM1MzU0QzEzLjU0ODggMi4xNTgyNyAxMy41NDg4IDEuODQxNjkgMTMuMzUzNSAxLjY0NjQzQzEzLjE1ODMgMS40NTExNyAxMi44NDE3IDEuNDUxMTcgMTIuNjQ2NCAxLjY0NjQzTDExLjgxNjIgMi40NzY2OEMxMC42NTcgMS40Nzk2NiA5LjE0ODc3IDAuODc3MDQ1IDcuNDk5ODUgMC44NzcwNDVaTTExLjE0MjIgMy4xNTA2NkMxMC4xNTY3IDIuMzI0NDkgOC44ODYzOSAxLjgyNzA0IDcuNDk5ODUgMS44MjcwNEM0LjM2NjgzIDEuODI3MDQgMS44MjcwMSA0LjM2Njg2IDEuODI3MDEgNy40OTk4OEMxLjgyNzAxIDguODg2NDIgMi4zMjQ0NiAxMC4xNTY4IDMuMTUwNjMgMTEuMTQyMkwxMS4xNDIyIDMuMTUwNjZaTTMuODU3NzYgMTEuODQ5M0M0Ljg0MzE3IDEyLjY3NTMgNi4xMTM0MyAxMy4xNzI3IDcuNDk5ODUgMTMuMTcyN0MxMC42MzI4IDEzLjE3MjcgMTMuMTcyNyAxMC42MzI5IDEzLjE3MjcgNy40OTk4OEMxMy4xNzI3IDYuMTEzNDYgMTIuNjc1MyA0Ljg0MzIgMTEuODQ5MyAzLjg1Nzc5TDMuODU3NzYgMTEuODQ5M1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LExvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03LjQ5OTk4IDFMNi45MjMyMSAyLjAwMzA3TDEuMTc0OTggMTJMMC41OTk5NzYgMTNIMS43NTM1SDEzLjI0NjRIMTQuNEwxMy44MjUgMTJMOC4wNzY3NCAyLjAwMzA3TDcuNDk5OTggMVpNNy40OTk5OCAzLjAwNjEzTDIuMzI4NSAxMkgxMi42NzE0TDcuNDk5OTggMy4wMDYxM1pcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LEVvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00Ljc2NDQ3IDMuMTIxOTlDNS42MzE1MSAzLjA0ODU5IDYuNTYwODIgMyA3LjUgM0M4LjQzOTE4IDMgOS4zNjg0OSAzLjA0ODU5IDEwLjIzNTUgMy4xMjE5OUMxMS4yNzk2IDMuMjEwMzcgMTEuOTU1MyAzLjI3MDA4IDEyLjQ3MiAzLjM5MjAzQzEyLjk0MjUgMy41MDMwNCAxMy4yMDQ4IDMuNjQ5NzYgMTMuNDMwNiAzLjg4MDg2QzEzLjQ1NTMgMy45MDYxOCAxMy40OTAyIDMuOTQ0MTQgMTMuNTEzMyAzLjk3MDkyQzEzLjcxMjYgNC4yMDE0OSAxMy44NDM1IDQuNDg4NyAxMy45MTggNS4wMzI4M0MxMy45OTc4IDUuNjE1NiAxNCA2LjM3NjQ0IDE0IDcuNTI0OTNDMTQgOC42NjAyNiAxMy45OTc4IDkuNDEwMTkgMTMuOTE4MSA5Ljk4NTM4QzEzLjg0MzkgMTAuNTIwNiAxMy43MTM3IDEwLjgwNjEgMTMuNTEyNSAxMS4wMzg3QzEzLjQ4OTYgMTEuMDY1MSAxMy40NTQxIDExLjEwMzggMTMuNDI5NiAxMS4xMjg3QzEzLjIwMDkgMTEuMzYyNSAxMi45NDA2IDExLjUwNzYgMTIuNDgxOCAxMS42MTY0QzExLjk3NTIgMTEuNzM2NSAxMS4zMTQzIDExLjc5NDIgMTAuMjg3OCAxMS44Nzk3QzkuNDE5NDggMTEuOTUyMSA4LjQ3NTY2IDEyIDcuNSAxMkM2LjUyNDM0IDEyIDUuNTgwNTIgMTEuOTUyMSA0LjcxMjIgMTEuODc5N0MzLjY4NTcyIDExLjc5NDIgMy4wMjQ3NyAxMS43MzY1IDIuNTE4MTYgMTEuNjE2NEMyLjA1OTM2IDExLjUwNzYgMS43OTkxIDExLjM2MjUgMS41NzAzNyAxMS4xMjg3QzEuNTQ1OTMgMTEuMTAzOCAxLjUxMDM1IDExLjA2NTEgMS40ODc0OCAxMS4wMzg3QzEuMjg2MjggMTAuODA2MSAxLjE1NjEyIDEwLjUyMDYgMS4wODE5MyA5Ljk4NTM4QzEuMDAyMjEgOS40MTAxOSAxIDguNjYwMjYgMSA3LjUyNDkzQzEgNi4zNzY0NCAxLjAwMjE2IDUuNjE1NiAxLjA4MiA1LjAzMjgzQzEuMTU2NTQgNC40ODg3IDEuMjg3NDQgNC4yMDE0OSAxLjQ4NjY2IDMuOTcwOTJDMS41MDk4IDMuOTQ0MTQgMS41NDQ2OCAzLjkwNjE4IDEuNTY5NDIgMy44ODA4NkMxLjc5NTIgMy42NDk3NiAyLjA1NzUyIDMuNTAzMDQgMi41Mjc5NiAzLjM5MjAzQzMuMDQ0NzMgMy4yNzAwOCAzLjcyMDQgMy4yMTAzNyA0Ljc2NDQ3IDMuMTIxOTlaTTAgNy41MjQ5M0MwIDUuMjgyOTYgMCA0LjE2MTk4IDAuNzI5OTg1IDMuMzE3MTNDMC43NjY0NTcgMy4yNzQ5MSAwLjgxNTEzOSAzLjIyMTk0IDAuODU0MTIzIDMuMTgyMDRDMS42MzQzOSAyLjM4MzM5IDIuNjQ5NjMgMi4yOTc0NCA0LjY4MDEyIDIuMTI1NTVDNS41NjkyMyAyLjA1MDI4IDYuNTI3MjQgMiA3LjUgMkM4LjQ3Mjc2IDIgOS40MzA3NyAyLjA1MDI4IDEwLjMxOTkgMi4xMjU1NUMxMi4zNTA0IDIuMjk3NDQgMTMuMzY1NiAyLjM4MzM5IDE0LjE0NTkgMy4xODIwNEMxNC4xODQ5IDMuMjIxOTQgMTQuMjMzNSAzLjI3NDkxIDE0LjI3IDMuMzE3MTNDMTUgNC4xNjE5OCAxNSA1LjI4Mjk2IDE1IDcuNTI0OTNDMTUgOS43NDAxMiAxNSAxMC44NDc3IDE0LjI2ODggMTEuNjkyOUMxNC4yMzI2IDExLjczNDggMTQuMTgzMiAxMS43ODg1IDE0LjE0NDQgMTEuODI4MUMxMy4zNjI5IDEyLjYyNjkgMTIuMzY1NSAxMi43MSAxMC4zNzA5IDEyLjg3NjNDOS40Nzk3MSAxMi45NTA1IDguNTA3ODIgMTMgNy41IDEzQzYuNDkyMTggMTMgNS41MjAyOCAxMi45NTA1IDQuNjI5MTUgMTIuODc2M0MyLjYzNDQ2IDEyLjcxIDEuNjM3MTIgMTIuNjI2OSAwLjg1NTU1OCAxMS44MjgxQzAuODE2ODQ0IDExLjc4ODUgMC43Njc0NDIgMTEuNzM0OCAwLjczMTIyMSAxMS42OTI5QzAgMTAuODQ3NyAwIDkuNzQwMTIgMCA3LjUyNDkzWk01LjI1IDUuMzgyNjRDNS4yNSA1LjIwMjI1IDUuNDM1MjIgNS4wODEyNCA1LjYwMDQxIDUuMTUzNjlMMTAuNDI4IDcuMjcxMDVDMTAuNjI3NCA3LjM1ODUzIDEwLjYyNzQgNy42NDE0NyAxMC40MjggNy43Mjg5NUw1LjYwMDQxIDkuODQ2MzFDNS40MzUyMiA5LjkxODc2IDUuMjUgOS43OTc3NSA1LjI1IDkuNjE3MzZWNS4zODI2NFpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFNvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk03IDJIMS41QzEuMjIzODYgMiAxIDIuMjIzODYgMSAyLjVWN0g3VjJaTTggMlY3SDE0VjIuNUMxNCAyLjIyMzg2IDEzLjc3NjEgMiAxMy41IDJIOFpNNyA4SDFWMTIuNUMxIDEyLjc3NjEgMS4yMjM4NiAxMyAxLjUgMTNIN1Y4Wk04IDEzVjhIMTRWMTIuNUMxNCAxMi43NzYxIDEzLjc3NjEgMTMgMTMuNSAxM0g4Wk0xLjUgMUMwLjY3MTU3MyAxIDAgMS42NzE1NyAwIDIuNVYxMi41QzAgMTMuMzI4NCAwLjY3MTU3MyAxNCAxLjUgMTRIMTMuNUMxNC4zMjg0IDE0IDE1IDEzLjMyODQgMTUgMTIuNVYyLjVDMTUgMS42NzE1NyAxNC4zMjg0IDEgMTMuNSAxSDEuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LGpvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk0xLjUgMkgxMy41QzEzLjc3NjEgMiAxNCAyLjIyMzg2IDE0IDIuNVY3SDFWMi41QzEgMi4yMjM4NiAxLjIyMzg2IDIgMS41IDJaTTEgOFYxMi41QzEgMTIuNzc2MSAxLjIyMzg2IDEzIDEuNSAxM0gxMy41QzEzLjc3NjEgMTMgMTQgMTIuNzc2MSAxNCAxMi41VjhIMVpNMCAyLjVDMCAxLjY3MTU3IDAuNjcxNTczIDEgMS41IDFIMTMuNUMxNC4zMjg0IDEgMTUgMS42NzE1NyAxNSAyLjVWMTIuNUMxNSAxMy4zMjg0IDE0LjMyODQgMTQgMTMuNSAxNEgxLjVDMC42NzE1NzMgMTQgMCAxMy4zMjg0IDAgMTIuNVYyLjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxNbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTQgMi41ODcxMUwxLjg1MTYzIDEzSDEzLjVDMTMuNzc2MSAxMyAxNCAxMi43NzYxIDE0IDEyLjVWMi41ODcxMVpNMC43NjI4NzkgMTMuODA2N0wwLjgyNTM5NiAxMy44Nzk2TDAuODU0NzE3IDEzLjg1NDVDMS4wNTAxNyAxMy45NDc4IDEuMjY4OTkgMTQgMS41IDE0SDEzLjVDMTQuMzI4NCAxNCAxNSAxMy4zMjg0IDE1IDEyLjVWMi41QzE1IDEuOTM5NDkgMTQuNjkyNiAxLjQ1MDc4IDE0LjIzNzEgMS4xOTMzMUwxNC4xNzQ2IDEuMTIwMzdMMTQuMTQ1MyAxLjE0NTVDMTMuOTQ5OCAxLjA1MjIyIDEzLjczMSAxIDEzLjUgMUgxLjVDMC42NzE1NzMgMSAwIDEuNjcxNTcgMCAyLjVWMTIuNUMwIDEzLjA2MDUgMC4zMDc0MzUgMTMuNTQ5MiAwLjc2Mjg3OSAxMy44MDY3Wk0xIDEyLjQxMjlMMTMuMTQ4NCAySDEuNUMxLjIyMzg2IDIgMSAyLjIyMzg2IDEgMi41VjEyLjQxMjlaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxrbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNOCAySDEzLjVDMTMuNzc2MSAyIDE0IDIuMjIzODYgMTQgMi41VjEyLjVDMTQgMTIuNzc2MSAxMy43NzYxIDEzIDEzLjUgMTNIOFYyWk03IDJIMS41QzEuMjIzODYgMiAxIDIuMjIzODYgMSAyLjVWMTIuNUMxIDEyLjc3NjEgMS4yMjM4NiAxMyAxLjUgMTNIN1YyWk0wIDIuNUMwIDEuNjcxNTcgMC42NzE1NzMgMSAxLjUgMUgxMy41QzE0LjMyODQgMSAxNSAxLjY3MTU3IDE1IDIuNVYxMi41QzE1IDEzLjMyODQgMTQuMzI4NCAxNCAxMy41IDE0SDEuNUMwLjY3MTU3MyAxNCAwIDEzLjMyODQgMCAxMi41VjIuNVpcIixmaWxsOm4sZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KSl9LFJvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sb3Isbj12b2lkIDA9PT10P1wiY3VycmVudENvbG9yXCI6dCxpPW8oZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsci5jcmVhdGVFbGVtZW50KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0saSksKDAsci5jcmVhdGVFbGVtZW50KShcInBhdGhcIix7ZDpcIk00LjgxODEyIDQuNjgxNjFDNC45OTM4NiA0Ljg1NzM0IDQuOTkzODYgNS4xNDIyNyA0LjgxODEyIDUuMzE4TDMuMDg2MzIgNy4wNDk4SDExLjkxMzVMMTAuMTgxNyA1LjMxOEMxMC4wMDYgNS4xNDIyNyAxMC4wMDYgNC44NTczNCAxMC4xODE3IDQuNjgxNjFDMTAuMzU3NSA0LjUwNTg3IDEwLjY0MjQgNC41MDU4NyAxMC44MTgxIDQuNjgxNjFMMTMuMzE4MSA3LjE4MTYxQzEzLjQ5MzkgNy4zNTczNCAxMy40OTM5IDcuNjQyMjcgMTMuMzE4MSA3LjgxOEwxMC44MTgxIDEwLjMxOEMxMC42NDI0IDEwLjQ5MzcgMTAuMzU3NSAxMC40OTM3IDEwLjE4MTcgMTAuMzE4QzEwLjAwNiAxMC4xNDIzIDEwLjAwNiA5Ljg1NzM0IDEwLjE4MTcgOS42ODE2MUwxMS45MTM1IDcuOTQ5OEgzLjA4NjMyTDQuODE4MTIgOS42ODE2MUM0Ljk5Mzg2IDkuODU3MzQgNC45OTM4NiAxMC4xNDIzIDQuODE4MTIgMTAuMzE4QzQuNjQyMzkgMTAuNDkzNyA0LjM1NzQ2IDEwLjQ5MzcgNC4xODE3MyAxMC4zMThMMS42ODE3MyA3LjgxOEMxLjUwNTk5IDcuNjQyMjcgMS41MDU5OSA3LjM1NzM0IDEuNjgxNzMgNy4xODE2MUw0LjE4MTczIDQuNjgxNjFDNC4zNTc0NiA0LjUwNTg3IDQuNjQyMzkgNC41MDU4NyA0LjgxODEyIDQuNjgxNjFaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxQbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNMTAgNi41QzEwIDguNDMzIDguNDMzIDEwIDYuNSAxMEM0LjU2NyAxMCAzIDguNDMzIDMgNi41QzMgNC41NjcgNC41NjcgMyA2LjUgM0M4LjQzMyAzIDEwIDQuNTY3IDEwIDYuNVpNOS4zMDg4NCAxMC4wMTU5QzguNTM5MDEgMTAuNjMxOCA3LjU2MjUxIDExIDYuNSAxMUM0LjAxNDcyIDExIDIgOC45ODUyOCAyIDYuNUMyIDQuMDE0NzIgNC4wMTQ3MiAyIDYuNSAyQzguOTg1MjggMiAxMSA0LjAxNDcyIDExIDYuNUMxMSA3LjU2MjUxIDEwLjYzMTggOC41MzkwMSAxMC4wMTU5IDkuMzA4ODRMMTIuODUzNiAxMi4xNDY0QzEzLjA0ODggMTIuMzQxNyAxMy4wNDg4IDEyLjY1ODMgMTIuODUzNiAxMi44NTM2QzEyLjY1ODMgMTMuMDQ4OCAxMi4zNDE3IDEzLjA0ODggMTIuMTQ2NCAxMi44NTM2TDkuMzA4ODQgMTAuMDE1OVpNNC4yNSA2LjVDNC4yNSA2LjIyMzg2IDQuNDczODYgNiA0Ljc1IDZINlY0Ljc1QzYgNC40NzM4NiA2LjIyMzg2IDQuMjUgNi41IDQuMjVDNi43NzYxNCA0LjI1IDcgNC40NzM4NiA3IDQuNzVWNkg4LjI1QzguNTI2MTQgNiA4Ljc1IDYuMjIzODYgOC43NSA2LjVDOC43NSA2Ljc3NjE0IDguNTI2MTQgNyA4LjI1IDdIN1Y4LjI1QzcgOC41MjYxNCA2Ljc3NjE0IDguNzUgNi41IDguNzVDNi4yMjM4NiA4Ljc1IDYgOC41MjYxNCA2IDguMjVWN0g0Ljc1QzQuNDczODYgNyA0LjI1IDYuNzc2MTQgNC4yNSA2LjVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfSxJbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbG9yLG49dm9pZCAwPT09dD9cImN1cnJlbnRDb2xvclwiOnQsaT1vKGUsW1wiY29sb3JcIl0pO3JldHVybigwLHIuY3JlYXRlRWxlbWVudCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGkpLCgwLHIuY3JlYXRlRWxlbWVudCkoXCJwYXRoXCIse2Q6XCJNNi41IDEwQzguNDMzIDEwIDEwIDguNDMzIDEwIDYuNUMxMCA0LjU2NyA4LjQzMyAzIDYuNSAzQzQuNTY3IDMgMyA0LjU2NyAzIDYuNUMzIDguNDMzIDQuNTY3IDEwIDYuNSAxMFpNNi41IDExQzcuNTYyNTEgMTEgOC41MzkwMSAxMC42MzE4IDkuMzA4ODQgMTAuMDE1OUwxMi4xNDY0IDEyLjg1MzZDMTIuMzQxNyAxMy4wNDg4IDEyLjY1ODMgMTMuMDQ4OCAxMi44NTM2IDEyLjg1MzZDMTMuMDQ4OCAxMi42NTgzIDEzLjA0ODggMTIuMzQxNyAxMi44NTM2IDEyLjE0NjRMMTAuMDE1OSA5LjMwODg0QzEwLjYzMTggOC41MzkwMSAxMSA3LjU2MjUxIDExIDYuNUMxMSA0LjAxNDcyIDguOTg1MjggMiA2LjUgMkM0LjAxNDcyIDIgMiA0LjAxNDcyIDIgNi41QzIgOC45ODUyOCA0LjAxNDcyIDExIDYuNSAxMVpNNC43NSA2QzQuNDczODYgNiA0LjI1IDYuMjIzODYgNC4yNSA2LjVDNC4yNSA2Ljc3NjE0IDQuNDczODYgNyA0Ljc1IDdIOC4yNUM4LjUyNjE0IDcgOC43NSA2Ljc3NjE0IDguNzUgNi41QzguNzUgNi4yMjM4NiA4LjUyNjE0IDYgOC4yNSA2SDQuNzVaXCIsZmlsbDpuLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSkpfX0sNTI5OTooZSx0LG4pPT57bi5yKHQpLG4uZCh0LHtkZWZhdWx0OigpPT5sfSk7dmFyIHI9big4MDgxKSxvPW4ubihyKSxpPW4oMzY0NSksYT1uLm4oaSkoKShvKCkpO2EucHVzaChbZS5pZCxcIi5yZWFjdC1jYWxlbmRhciB7XFxuICB3aWR0aDogMzUwcHg7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNhMGEwOTY7XFxuICBmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcXG4gIGxpbmUtaGVpZ2h0OiAxLjEyNWVtO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXItLWRvdWJsZVZpZXcge1xcbiAgd2lkdGg6IDcwMHB4O1xcbn1cXG4ucmVhY3QtY2FsZW5kYXItLWRvdWJsZVZpZXcgLnJlYWN0LWNhbGVuZGFyX192aWV3Q29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBtYXJnaW46IC0wLjVlbTtcXG59XFxuLnJlYWN0LWNhbGVuZGFyLS1kb3VibGVWaWV3IC5yZWFjdC1jYWxlbmRhcl9fdmlld0NvbnRhaW5lciA+ICoge1xcbiAgd2lkdGg6IDUwJTtcXG4gIG1hcmdpbjogMC41ZW07XFxufVxcbi5yZWFjdC1jYWxlbmRhcixcXG4ucmVhY3QtY2FsZW5kYXIgKixcXG4ucmVhY3QtY2FsZW5kYXIgKjpiZWZvcmUsXFxuLnJlYWN0LWNhbGVuZGFyICo6YWZ0ZXIge1xcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuLnJlYWN0LWNhbGVuZGFyIGJ1dHRvbiB7XFxuICBtYXJnaW46IDA7XFxuICBib3JkZXI6IDA7XFxuICBvdXRsaW5lOiBub25lO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXIgYnV0dG9uOmVuYWJsZWQ6aG92ZXIge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX25hdmlnYXRpb24ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGhlaWdodDogNDRweDtcXG4gIG1hcmdpbi1ib3R0b206IDFlbTtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX19uYXZpZ2F0aW9uIGJ1dHRvbiB7XFxuICBtaW4td2lkdGg6IDQ0cHg7XFxuICBiYWNrZ3JvdW5kOiBub25lO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX25hdmlnYXRpb24gYnV0dG9uOmRpc2FibGVkIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjA7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fbmF2aWdhdGlvbiBidXR0b246ZW5hYmxlZDpob3ZlcixcXG4ucmVhY3QtY2FsZW5kYXJfX25hdmlnYXRpb24gYnV0dG9uOmVuYWJsZWQ6Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZTZlNjtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX19tb250aC12aWV3X193ZWVrZGF5cyB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxuICBmb250LXNpemU6IDAuNzVlbTtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX19tb250aC12aWV3X193ZWVrZGF5c19fd2Vla2RheSB7XFxuICBwYWRkaW5nOiAwLjVlbTtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX19tb250aC12aWV3X193ZWVrTnVtYmVycyAucmVhY3QtY2FsZW5kYXJfX3RpbGUge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIGZvbnQtc2l6ZTogMC43NWVtO1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fbW9udGgtdmlld19fZGF5c19fZGF5LS13ZWVrZW5kIHtcXG4gIGNvbG9yOiAjZDEwMDAwO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdfX2RheXNfX2RheS0tbmVpZ2hib3JpbmdNb250aCB7XFxuICBjb2xvcjogIzc1NzU3NTtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX195ZWFyLXZpZXcgLnJlYWN0LWNhbGVuZGFyX190aWxlLFxcbi5yZWFjdC1jYWxlbmRhcl9fZGVjYWRlLXZpZXcgLnJlYWN0LWNhbGVuZGFyX190aWxlLFxcbi5yZWFjdC1jYWxlbmRhcl9fY2VudHVyeS12aWV3IC5yZWFjdC1jYWxlbmRhcl9fdGlsZSB7XFxuICBwYWRkaW5nOiAyZW0gMC41ZW07XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fdGlsZSB7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBwYWRkaW5nOiAxMHB4IDYuNjY2N3B4O1xcbiAgYmFja2dyb3VuZDogbm9uZTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIGxpbmUtaGVpZ2h0OiAxNnB4O1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX3RpbGU6ZGlzYWJsZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX190aWxlOmVuYWJsZWQ6aG92ZXIsXFxuLnJlYWN0LWNhbGVuZGFyX190aWxlOmVuYWJsZWQ6Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZTZlNjtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX190aWxlLS1ub3cge1xcbiAgYmFja2dyb3VuZDogI2ZmZmY3NjtcXG59XFxuLnJlYWN0LWNhbGVuZGFyX190aWxlLS1ub3c6ZW5hYmxlZDpob3ZlcixcXG4ucmVhY3QtY2FsZW5kYXJfX3RpbGUtLW5vdzplbmFibGVkOmZvY3VzIHtcXG4gIGJhY2tncm91bmQ6ICNmZmZmYTk7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fdGlsZS0taGFzQWN0aXZlIHtcXG4gIGJhY2tncm91bmQ6ICM3NmJhZmY7XFxufVxcbi5yZWFjdC1jYWxlbmRhcl9fdGlsZS0taGFzQWN0aXZlOmVuYWJsZWQ6aG92ZXIsXFxuLnJlYWN0LWNhbGVuZGFyX190aWxlLS1oYXNBY3RpdmU6ZW5hYmxlZDpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kOiAjYTlkNGZmO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX3RpbGUtLWFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kOiAjMDA2ZWRjO1xcbiAgY29sb3I6IHdoaXRlO1xcbn1cXG4ucmVhY3QtY2FsZW5kYXJfX3RpbGUtLWFjdGl2ZTplbmFibGVkOmhvdmVyLFxcbi5yZWFjdC1jYWxlbmRhcl9fdGlsZS0tYWN0aXZlOmVuYWJsZWQ6Zm9jdXMge1xcbiAgYmFja2dyb3VuZDogIzEwODdmZjtcXG59XFxuLnJlYWN0LWNhbGVuZGFyLS1zZWxlY3RSYW5nZSAucmVhY3QtY2FsZW5kYXJfX3RpbGUtLWhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlNmU2ZTY7XFxufVxcblwiLFwiXCJdKTtjb25zdCBsPWF9LDM2NDU6ZT0+e2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcCgoZnVuY3Rpb24odCl7dmFyIG49XCJcIixyPXZvaWQgMCE9PXRbNV07cmV0dXJuIHRbNF0mJihuKz1cIkBzdXBwb3J0cyAoXCIuY29uY2F0KHRbNF0sXCIpIHtcIikpLHRbMl0mJihuKz1cIkBtZWRpYSBcIi5jb25jYXQodFsyXSxcIiB7XCIpKSxyJiYobis9XCJAbGF5ZXJcIi5jb25jYXQodFs1XS5sZW5ndGg+MD9cIiBcIi5jb25jYXQodFs1XSk6XCJcIixcIiB7XCIpKSxuKz1lKHQpLHImJihuKz1cIn1cIiksdFsyXSYmKG4rPVwifVwiKSx0WzRdJiYobis9XCJ9XCIpLG59KSkuam9pbihcIlwiKX0sdC5pPWZ1bmN0aW9uKGUsbixyLG8saSl7XCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPVtbbnVsbCxlLHZvaWQgMF1dKTt2YXIgYT17fTtpZihyKWZvcih2YXIgbD0wO2w8dGhpcy5sZW5ndGg7bCsrKXt2YXIgcz10aGlzW2xdWzBdO251bGwhPXMmJihhW3NdPSEwKX1mb3IodmFyIGM9MDtjPGUubGVuZ3RoO2MrKyl7dmFyIHU9W10uY29uY2F0KGVbY10pO3ImJmFbdVswXV18fCh2b2lkIDAhPT1pJiYodm9pZCAwPT09dVs1XXx8KHVbMV09XCJAbGF5ZXJcIi5jb25jYXQodVs1XS5sZW5ndGg+MD9cIiBcIi5jb25jYXQodVs1XSk6XCJcIixcIiB7XCIpLmNvbmNhdCh1WzFdLFwifVwiKSksdVs1XT1pKSxuJiYodVsyXT8odVsxXT1cIkBtZWRpYSBcIi5jb25jYXQodVsyXSxcIiB7XCIpLmNvbmNhdCh1WzFdLFwifVwiKSx1WzJdPW4pOnVbMl09biksbyYmKHVbNF0/KHVbMV09XCJAc3VwcG9ydHMgKFwiLmNvbmNhdCh1WzRdLFwiKSB7XCIpLmNvbmNhdCh1WzFdLFwifVwiKSx1WzRdPW8pOnVbNF09XCJcIi5jb25jYXQobykpLHQucHVzaCh1KSl9fSx0fX0sODA4MTplPT57ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBlWzFdfX0sNDQ4MzooZSx0LG4pPT57ZnVuY3Rpb24gcihlKXtyZXR1cm4gcj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT9cInN5bWJvbFwiOnR5cGVvZiBlfSxyKGUpfWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gbz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LG8oZSx0KX1mdW5jdGlvbiBpKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiBlfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIGE9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGEoZSl9ZnVuY3Rpb24gbChlKXt2YXIgdD1mdW5jdGlvbihlLHQpe2lmKFwib2JqZWN0XCIhPT1yKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgbj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09bil7dmFyIG89bi5jYWxsKGUsXCJzdHJpbmdcIik7aWYoXCJvYmplY3RcIiE9PXIobykpcmV0dXJuIG87dGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpfXJldHVybiBTdHJpbmcoZSl9KGUpO3JldHVyblwic3ltYm9sXCI9PT1yKHQpP3Q6U3RyaW5nKHQpfXZhciBzPW4oNjY4OSksYz1uKDU2OTcpLHU9big1MzAzKS5jcmVhdGVGb2N1c1RyYXAsZj1uKDgzODgpLmlzRm9jdXNhYmxlLGQ9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcInByb3RvdHlwZVwiLHt3cml0YWJsZTohMX0pLHQmJm8oZSx0KX0ocCxlKTt2YXIgdCxuLGMsdSxkPShjPXAsdT1mdW5jdGlvbigpe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsdD1hKGMpO2lmKHUpe3ZhciBuPWEodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxuKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKFwib2JqZWN0XCI9PT1yKHQpfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTtyZXR1cm4gaShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIHAoZSl7dmFyIHQsbixyLG87IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX0odGhpcyxwKSxuPWkodD1kLmNhbGwodGhpcyxlKSksbz1mdW5jdGlvbihlKXt2YXIgdCxuPW51bGwhPT0odD10aGlzLmludGVybmFsT3B0aW9uc1tlXSkmJnZvaWQgMCE9PXQ/dDp0aGlzLm9yaWdpbmFsT3B0aW9uc1tlXTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxvPW5ldyBBcnJheShyPjE/ci0xOjApLGk9MTtpPHI7aSsrKW9baS0xXT1hcmd1bWVudHNbaV07bj1uLmFwcGx5KHZvaWQgMCxvKX1pZighMD09PW4mJihuPXZvaWQgMCksIW4pe2lmKHZvaWQgMD09PW58fCExPT09bilyZXR1cm4gbjt0aHJvdyBuZXcgRXJyb3IoXCJgXCIuY29uY2F0KGUsXCJgIHdhcyBzcGVjaWZpZWQgYnV0IHdhcyBub3QgYSBub2RlLCBvciBkaWQgbm90IHJldHVybiBhIG5vZGVcIikpfXZhciBhLGw9bjtpZihcInN0cmluZ1wiPT10eXBlb2YgbiYmIShsPW51bGw9PT0oYT10aGlzLmdldERvY3VtZW50KCkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnF1ZXJ5U2VsZWN0b3IobikpKXRocm93IG5ldyBFcnJvcihcImBcIi5jb25jYXQoZSxcImAgYXMgc2VsZWN0b3IgcmVmZXJzIHRvIG5vIGtub3duIG5vZGVcIikpO3JldHVybiBsfSwocj1sKHI9XCJnZXROb2RlRm9yT3B0aW9uXCIpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4scix7dmFsdWU6byxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bcl09byx0LmhhbmRsZURlYWN0aXZhdGU9dC5oYW5kbGVEZWFjdGl2YXRlLmJpbmQoaSh0KSksdC5oYW5kbGVQb3N0RGVhY3RpdmF0ZT10LmhhbmRsZVBvc3REZWFjdGl2YXRlLmJpbmQoaSh0KSksdC5oYW5kbGVDbGlja091dHNpZGVEZWFjdGl2YXRlcz10LmhhbmRsZUNsaWNrT3V0c2lkZURlYWN0aXZhdGVzLmJpbmQoaSh0KSksdC5pbnRlcm5hbE9wdGlvbnM9e3JldHVybkZvY3VzT25EZWFjdGl2YXRlOiExLGNoZWNrQ2FuUmV0dXJuRm9jdXM6bnVsbCxvbkRlYWN0aXZhdGU6dC5oYW5kbGVEZWFjdGl2YXRlLG9uUG9zdERlYWN0aXZhdGU6dC5oYW5kbGVQb3N0RGVhY3RpdmF0ZSxjbGlja091dHNpZGVEZWFjdGl2YXRlczp0LmhhbmRsZUNsaWNrT3V0c2lkZURlYWN0aXZhdGVzfSx0Lm9yaWdpbmFsT3B0aW9ucz17cmV0dXJuRm9jdXNPbkRlYWN0aXZhdGU6ITAsb25EZWFjdGl2YXRlOm51bGwsb25Qb3N0RGVhY3RpdmF0ZTpudWxsLGNoZWNrQ2FuUmV0dXJuRm9jdXM6bnVsbCxjbGlja091dHNpZGVEZWFjdGl2YXRlczohMX07dmFyIGE9ZS5mb2N1c1RyYXBPcHRpb25zO2Zvcih2YXIgcyBpbiBhKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLHMpJiYoXCJyZXR1cm5Gb2N1c09uRGVhY3RpdmF0ZVwiIT09cyYmXCJvbkRlYWN0aXZhdGVcIiE9PXMmJlwib25Qb3N0RGVhY3RpdmF0ZVwiIT09cyYmXCJjaGVja0NhblJldHVybkZvY3VzXCIhPT1zJiZcImNsaWNrT3V0c2lkZURlYWN0aXZhdGVzXCIhPT1zP3QuaW50ZXJuYWxPcHRpb25zW3NdPWFbc106dC5vcmlnaW5hbE9wdGlvbnNbc109YVtzXSk7cmV0dXJuIHQub3V0c2lkZUNsaWNrPW51bGwsdC5mb2N1c1RyYXBFbGVtZW50cz1lLmNvbnRhaW5lckVsZW1lbnRzfHxbXSx0LnVwZGF0ZVByZXZpb3VzRWxlbWVudCgpLHR9cmV0dXJuIHQ9cCwobj1be2tleTpcImdldERvY3VtZW50XCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9wcy5mb2N1c1RyYXBPcHRpb25zLmRvY3VtZW50fHwoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGRvY3VtZW50P2RvY3VtZW50OnZvaWQgMCl9fSx7a2V5OlwiZ2V0UmV0dXJuRm9jdXNOb2RlXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldE5vZGVGb3JPcHRpb24oXCJzZXRSZXR1cm5Gb2N1c1wiLHRoaXMucHJldmlvdXNseUZvY3VzZWRFbGVtZW50KTtyZXR1cm4gZXx8ITEhPT1lJiZ0aGlzLnByZXZpb3VzbHlGb2N1c2VkRWxlbWVudH19LHtrZXk6XCJ1cGRhdGVQcmV2aW91c0VsZW1lbnRcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0RG9jdW1lbnQoKTtlJiYodGhpcy5wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQ9ZS5hY3RpdmVFbGVtZW50KX19LHtrZXk6XCJkZWFjdGl2YXRlVHJhcFwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5mb2N1c1RyYXAmJnRoaXMuZm9jdXNUcmFwLmFjdGl2ZSYmdGhpcy5mb2N1c1RyYXAuZGVhY3RpdmF0ZSh7cmV0dXJuRm9jdXM6ITEsY2hlY2tDYW5SZXR1cm5Gb2N1czpudWxsLG9uRGVhY3RpdmF0ZTp0aGlzLm9yaWdpbmFsT3B0aW9ucy5vbkRlYWN0aXZhdGV9KX19LHtrZXk6XCJoYW5kbGVDbGlja091dHNpZGVEZWFjdGl2YXRlc1wiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PVwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMub3JpZ2luYWxPcHRpb25zLmNsaWNrT3V0c2lkZURlYWN0aXZhdGVzP3RoaXMub3JpZ2luYWxPcHRpb25zLmNsaWNrT3V0c2lkZURlYWN0aXZhdGVzLmNhbGwobnVsbCxlKTp0aGlzLm9yaWdpbmFsT3B0aW9ucy5jbGlja091dHNpZGVEZWFjdGl2YXRlcztyZXR1cm4gdCYmKHRoaXMub3V0c2lkZUNsaWNrPXt0YXJnZXQ6ZS50YXJnZXQsYWxsb3dEZWFjdGl2YXRpb246dH0pLHR9fSx7a2V5OlwiaGFuZGxlRGVhY3RpdmF0ZVwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5vcmlnaW5hbE9wdGlvbnMub25EZWFjdGl2YXRlJiZ0aGlzLm9yaWdpbmFsT3B0aW9ucy5vbkRlYWN0aXZhdGUuY2FsbChudWxsKSx0aGlzLmRlYWN0aXZhdGVUcmFwKCl9fSx7a2V5OlwiaGFuZGxlUG9zdERlYWN0aXZhdGVcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1mdW5jdGlvbigpe3ZhciB0PWUuZ2V0UmV0dXJuRm9jdXNOb2RlKCksbj0hKCFlLm9yaWdpbmFsT3B0aW9ucy5yZXR1cm5Gb2N1c09uRGVhY3RpdmF0ZXx8bnVsbD09dHx8IXQuZm9jdXN8fGUub3V0c2lkZUNsaWNrJiYoIWUub3V0c2lkZUNsaWNrLmFsbG93RGVhY3RpdmF0aW9ufHxmKGUub3V0c2lkZUNsaWNrLnRhcmdldCxlLmludGVybmFsT3B0aW9ucy50YWJiYWJsZU9wdGlvbnMpKSkscj1lLmludGVybmFsT3B0aW9ucy5wcmV2ZW50U2Nyb2xsLG89dm9pZCAwIT09ciYmcjtuJiZ0LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOm99KSxlLm9yaWdpbmFsT3B0aW9ucy5vblBvc3REZWFjdGl2YXRlJiZlLm9yaWdpbmFsT3B0aW9ucy5vblBvc3REZWFjdGl2YXRlLmNhbGwobnVsbCksZS5vdXRzaWRlQ2xpY2s9bnVsbH07dGhpcy5vcmlnaW5hbE9wdGlvbnMuY2hlY2tDYW5SZXR1cm5Gb2N1cz90aGlzLm9yaWdpbmFsT3B0aW9ucy5jaGVja0NhblJldHVybkZvY3VzLmNhbGwobnVsbCx0aGlzLmdldFJldHVybkZvY3VzTm9kZSgpKS50aGVuKHQsdCk6dCgpfX0se2tleTpcInNldHVwRm9jdXNUcmFwXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmZvY3VzVHJhcD90aGlzLnByb3BzLmFjdGl2ZSYmIXRoaXMuZm9jdXNUcmFwLmFjdGl2ZSYmKHRoaXMuZm9jdXNUcmFwLmFjdGl2YXRlKCksdGhpcy5wcm9wcy5wYXVzZWQmJnRoaXMuZm9jdXNUcmFwLnBhdXNlKCkpOnRoaXMuZm9jdXNUcmFwRWxlbWVudHMuc29tZShCb29sZWFuKSYmKHRoaXMuZm9jdXNUcmFwPXRoaXMucHJvcHMuX2NyZWF0ZUZvY3VzVHJhcCh0aGlzLmZvY3VzVHJhcEVsZW1lbnRzLHRoaXMuaW50ZXJuYWxPcHRpb25zKSx0aGlzLnByb3BzLmFjdGl2ZSYmdGhpcy5mb2N1c1RyYXAuYWN0aXZhdGUoKSx0aGlzLnByb3BzLnBhdXNlZCYmdGhpcy5mb2N1c1RyYXAucGF1c2UoKSl9fSx7a2V5OlwiY29tcG9uZW50RGlkTW91bnRcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucHJvcHMuYWN0aXZlJiZ0aGlzLnNldHVwRm9jdXNUcmFwKCl9fSx7a2V5OlwiY29tcG9uZW50RGlkVXBkYXRlXCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5mb2N1c1RyYXApe2UuY29udGFpbmVyRWxlbWVudHMhPT10aGlzLnByb3BzLmNvbnRhaW5lckVsZW1lbnRzJiZ0aGlzLmZvY3VzVHJhcC51cGRhdGVDb250YWluZXJFbGVtZW50cyh0aGlzLnByb3BzLmNvbnRhaW5lckVsZW1lbnRzKTt2YXIgdD0hZS5hY3RpdmUmJnRoaXMucHJvcHMuYWN0aXZlLG49ZS5hY3RpdmUmJiF0aGlzLnByb3BzLmFjdGl2ZSxyPSFlLnBhdXNlZCYmdGhpcy5wcm9wcy5wYXVzZWQsbz1lLnBhdXNlZCYmIXRoaXMucHJvcHMucGF1c2VkO2lmKHQmJih0aGlzLnVwZGF0ZVByZXZpb3VzRWxlbWVudCgpLHRoaXMuZm9jdXNUcmFwLmFjdGl2YXRlKCkpLG4pcmV0dXJuIHZvaWQgdGhpcy5kZWFjdGl2YXRlVHJhcCgpO3ImJnRoaXMuZm9jdXNUcmFwLnBhdXNlKCksbyYmdGhpcy5mb2N1c1RyYXAudW5wYXVzZSgpfWVsc2UgZS5jb250YWluZXJFbGVtZW50cyE9PXRoaXMucHJvcHMuY29udGFpbmVyRWxlbWVudHMmJih0aGlzLmZvY3VzVHJhcEVsZW1lbnRzPXRoaXMucHJvcHMuY29udGFpbmVyRWxlbWVudHMpLHRoaXMucHJvcHMuYWN0aXZlJiYodGhpcy51cGRhdGVQcmV2aW91c0VsZW1lbnQoKSx0aGlzLnNldHVwRm9jdXNUcmFwKCkpfX0se2tleTpcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRlYWN0aXZhdGVUcmFwKCl9fSx7a2V5OlwicmVuZGVyXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcy5jaGlsZHJlbj9zLkNoaWxkcmVuLm9ubHkodGhpcy5wcm9wcy5jaGlsZHJlbik6dm9pZCAwO2lmKHQpe2lmKHQudHlwZSYmdC50eXBlPT09cy5GcmFnbWVudCl0aHJvdyBuZXcgRXJyb3IoXCJBIGZvY3VzLXRyYXAgY2Fubm90IHVzZSBhIEZyYWdtZW50IGFzIGl0cyBjaGlsZCBjb250YWluZXIuIFRyeSByZXBsYWNpbmcgaXQgd2l0aCBhIDxkaXY+IGVsZW1lbnQuXCIpO3JldHVybiBzLmNsb25lRWxlbWVudCh0LHtyZWY6ZnVuY3Rpb24obil7dmFyIHI9ZS5wcm9wcy5jb250YWluZXJFbGVtZW50czt0JiYoXCJmdW5jdGlvblwiPT10eXBlb2YgdC5yZWY/dC5yZWYobik6dC5yZWYmJih0LnJlZi5jdXJyZW50PW4pKSxlLmZvY3VzVHJhcEVsZW1lbnRzPXJ8fFtuXX19KX1yZXR1cm4gbnVsbH19XSkmJmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLGwoci5rZXkpLHIpfX0odC5wcm90b3R5cGUsbiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJwcm90b3R5cGVcIix7d3JpdGFibGU6ITF9KSxwfShzLkNvbXBvbmVudCkscD1cInVuZGVmaW5lZFwiPT10eXBlb2YgRWxlbWVudD9GdW5jdGlvbjpFbGVtZW50O2QucHJvcFR5cGVzPXthY3RpdmU6Yy5ib29sLHBhdXNlZDpjLmJvb2wsZm9jdXNUcmFwT3B0aW9uczpjLnNoYXBlKHtkb2N1bWVudDpjLm9iamVjdCxvbkFjdGl2YXRlOmMuZnVuYyxvblBvc3RBY3RpdmF0ZTpjLmZ1bmMsY2hlY2tDYW5Gb2N1c1RyYXA6Yy5mdW5jLG9uRGVhY3RpdmF0ZTpjLmZ1bmMsb25Qb3N0RGVhY3RpdmF0ZTpjLmZ1bmMsY2hlY2tDYW5SZXR1cm5Gb2N1czpjLmZ1bmMsaW5pdGlhbEZvY3VzOmMub25lT2ZUeXBlKFtjLmluc3RhbmNlT2YocCksYy5zdHJpbmcsYy5ib29sLGMuZnVuY10pLGZhbGxiYWNrRm9jdXM6Yy5vbmVPZlR5cGUoW2MuaW5zdGFuY2VPZihwKSxjLnN0cmluZyxjLmZ1bmNdKSxlc2NhcGVEZWFjdGl2YXRlczpjLm9uZU9mVHlwZShbYy5ib29sLGMuZnVuY10pLGNsaWNrT3V0c2lkZURlYWN0aXZhdGVzOmMub25lT2ZUeXBlKFtjLmJvb2wsYy5mdW5jXSkscmV0dXJuRm9jdXNPbkRlYWN0aXZhdGU6Yy5ib29sLHNldFJldHVybkZvY3VzOmMub25lT2ZUeXBlKFtjLmluc3RhbmNlT2YocCksYy5zdHJpbmcsYy5ib29sLGMuZnVuY10pLGFsbG93T3V0c2lkZUNsaWNrOmMub25lT2ZUeXBlKFtjLmJvb2wsYy5mdW5jXSkscHJldmVudFNjcm9sbDpjLmJvb2wsdGFiYmFibGVPcHRpb25zOmMuc2hhcGUoe2Rpc3BsYXlDaGVjazpjLm9uZU9mKFtcImZ1bGxcIixcImxlZ2FjeS1mdWxsXCIsXCJub24temVyby1hcmVhXCIsXCJub25lXCJdKSxnZXRTaGFkb3dSb290OmMub25lT2ZUeXBlKFtjLmJvb2wsYy5mdW5jXSl9KSx0cmFwU3RhY2s6Yy5hcnJheSxpc0tleUZvcndhcmQ6Yy5mdW5jLGlzS2V5QmFja3dhcmQ6Yy5mdW5jfSksY29udGFpbmVyRWxlbWVudHM6Yy5hcnJheU9mKGMuaW5zdGFuY2VPZihwKSksY2hpbGRyZW46Yy5vbmVPZlR5cGUoW2MuZWxlbWVudCxjLmluc3RhbmNlT2YocCldKX0sZC5kZWZhdWx0UHJvcHM9e2FjdGl2ZTohMCxwYXVzZWQ6ITEsZm9jdXNUcmFwT3B0aW9uczp7fSxfY3JlYXRlRm9jdXNUcmFwOnV9LGUuZXhwb3J0cz1kfSw1MzAzOihlLHQsbik9PntuLnIodCksbi5kKHQse2NyZWF0ZUZvY3VzVHJhcDooKT0+Z30pO3ZhciByPW4oODM4OCk7ZnVuY3Rpb24gbyhlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gaShlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9vKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7YShlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6byhPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX1mdW5jdGlvbiBhKGUsdCxuKXtyZXR1cm4odD1mdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbihlLHQpe2lmKFwib2JqZWN0XCIhPXR5cGVvZiBlfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgbj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09bil7dmFyIHI9bi5jYWxsKGUsXCJzdHJpbmdcIik7aWYoXCJvYmplY3RcIiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpfXJldHVybiBTdHJpbmcoZSl9KGUpO3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiB0P3Q6U3RyaW5nKHQpfSh0KSlpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX12YXIgbD1mdW5jdGlvbihlKXtyZXR1cm5cIlRhYlwiPT09ZS5rZXl8fDk9PT1lLmtleUNvZGV9LHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGwoZSkmJiFlLnNoaWZ0S2V5fSxjPWZ1bmN0aW9uKGUpe3JldHVybiBsKGUpJiZlLnNoaWZ0S2V5fSx1PWZ1bmN0aW9uKGUpe3JldHVybiBzZXRUaW1lb3V0KGUsMCl9LGY9ZnVuY3Rpb24oZSx0KXt2YXIgbj0tMTtyZXR1cm4gZS5ldmVyeSgoZnVuY3Rpb24oZSxyKXtyZXR1cm4hdChlKXx8KG49ciwhMSl9KSksbn0sZD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPW5ldyBBcnJheSh0PjE/dC0xOjApLHI9MTtyPHQ7cisrKW5bci0xXT1hcmd1bWVudHNbcl07cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZT9lLmFwcGx5KHZvaWQgMCxuKTplfSxwPWZ1bmN0aW9uKGUpe3JldHVybiBlLnRhcmdldC5zaGFkb3dSb290JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmNvbXBvc2VkUGF0aD9lLmNvbXBvc2VkUGF0aCgpWzBdOmUudGFyZ2V0fSxoPVtdLGc9ZnVuY3Rpb24oZSx0KXt2YXIgbixvPShudWxsPT10P3ZvaWQgMDp0LmRvY3VtZW50KXx8ZG9jdW1lbnQsYT0obnVsbD09dD92b2lkIDA6dC50cmFwU3RhY2spfHxoLGc9aSh7cmV0dXJuRm9jdXNPbkRlYWN0aXZhdGU6ITAsZXNjYXBlRGVhY3RpdmF0ZXM6ITAsZGVsYXlJbml0aWFsRm9jdXM6ITAsaXNLZXlGb3J3YXJkOnMsaXNLZXlCYWNrd2FyZDpjfSx0KSx2PXtjb250YWluZXJzOltdLGNvbnRhaW5lckdyb3VwczpbXSx0YWJiYWJsZUdyb3VwczpbXSxub2RlRm9jdXNlZEJlZm9yZUFjdGl2YXRpb246bnVsbCxtb3N0UmVjZW50bHlGb2N1c2VkTm9kZTpudWxsLGFjdGl2ZTohMSxwYXVzZWQ6ITEsZGVsYXlJbml0aWFsRm9jdXNUaW1lcjp2b2lkIDB9LG09ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlJiZ2b2lkIDAhPT1lW3RdP2VbdF06Z1tufHx0XX0sQz1mdW5jdGlvbihlKXtyZXR1cm4gdi5jb250YWluZXJHcm91cHMuZmluZEluZGV4KChmdW5jdGlvbih0KXt2YXIgbj10LmNvbnRhaW5lcixyPXQudGFiYmFibGVOb2RlcztyZXR1cm4gbi5jb250YWlucyhlKXx8ci5maW5kKChmdW5jdGlvbih0KXtyZXR1cm4gdD09PWV9KSl9KSl9LHk9ZnVuY3Rpb24oZSl7dmFyIHQ9Z1tlXTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0KXtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShuPjE/bi0xOjApLGk9MTtpPG47aSsrKXJbaS0xXT1hcmd1bWVudHNbaV07dD10LmFwcGx5KHZvaWQgMCxyKX1pZighMD09PXQmJih0PXZvaWQgMCksIXQpe2lmKHZvaWQgMD09PXR8fCExPT09dClyZXR1cm4gdDt0aHJvdyBuZXcgRXJyb3IoXCJgXCIuY29uY2F0KGUsXCJgIHdhcyBzcGVjaWZpZWQgYnV0IHdhcyBub3QgYSBub2RlLCBvciBkaWQgbm90IHJldHVybiBhIG5vZGVcIikpfXZhciBhPXQ7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQmJiEoYT1vLnF1ZXJ5U2VsZWN0b3IodCkpKXRocm93IG5ldyBFcnJvcihcImBcIi5jb25jYXQoZSxcImAgYXMgc2VsZWN0b3IgcmVmZXJzIHRvIG5vIGtub3duIG5vZGVcIikpO3JldHVybiBhfSx3PWZ1bmN0aW9uKCl7dmFyIGU9eShcImluaXRpYWxGb2N1c1wiKTtpZighMT09PWUpcmV0dXJuITE7aWYodm9pZCAwPT09ZSlpZihDKG8uYWN0aXZlRWxlbWVudCk+PTApZT1vLmFjdGl2ZUVsZW1lbnQ7ZWxzZXt2YXIgdD12LnRhYmJhYmxlR3JvdXBzWzBdO2U9dCYmdC5maXJzdFRhYmJhYmxlTm9kZXx8eShcImZhbGxiYWNrRm9jdXNcIil9aWYoIWUpdGhyb3cgbmV3IEVycm9yKFwiWW91ciBmb2N1cy10cmFwIG5lZWRzIHRvIGhhdmUgYXQgbGVhc3Qgb25lIGZvY3VzYWJsZSBlbGVtZW50XCIpO3JldHVybiBlfSxiPWZ1bmN0aW9uKCl7aWYodi5jb250YWluZXJHcm91cHM9di5jb250YWluZXJzLm1hcCgoZnVuY3Rpb24oZSl7dmFyIHQ9KDAsci50YWJiYWJsZSkoZSxnLnRhYmJhYmxlT3B0aW9ucyksbj0oMCxyLmZvY3VzYWJsZSkoZSxnLnRhYmJhYmxlT3B0aW9ucyk7cmV0dXJue2NvbnRhaW5lcjplLHRhYmJhYmxlTm9kZXM6dCxmb2N1c2FibGVOb2RlczpuLGZpcnN0VGFiYmFibGVOb2RlOnQubGVuZ3RoPjA/dFswXTpudWxsLGxhc3RUYWJiYWJsZU5vZGU6dC5sZW5ndGg+MD90W3QubGVuZ3RoLTFdOm51bGwsbmV4dFRhYmJhYmxlTm9kZTpmdW5jdGlvbihlKXt2YXIgdD0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLG89bi5maW5kSW5kZXgoKGZ1bmN0aW9uKHQpe3JldHVybiB0PT09ZX0pKTtpZighKG88MCkpcmV0dXJuIHQ/bi5zbGljZShvKzEpLmZpbmQoKGZ1bmN0aW9uKGUpe3JldHVybigwLHIuaXNUYWJiYWJsZSkoZSxnLnRhYmJhYmxlT3B0aW9ucyl9KSk6bi5zbGljZSgwLG8pLnJldmVyc2UoKS5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4oMCxyLmlzVGFiYmFibGUpKGUsZy50YWJiYWJsZU9wdGlvbnMpfSkpfX19KSksdi50YWJiYWJsZUdyb3Vwcz12LmNvbnRhaW5lckdyb3Vwcy5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRhYmJhYmxlTm9kZXMubGVuZ3RoPjB9KSksdi50YWJiYWJsZUdyb3Vwcy5sZW5ndGg8PTAmJiF5KFwiZmFsbGJhY2tGb2N1c1wiKSl0aHJvdyBuZXcgRXJyb3IoXCJZb3VyIGZvY3VzLXRyYXAgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBjb250YWluZXIgd2l0aCBhdCBsZWFzdCBvbmUgdGFiYmFibGUgbm9kZSBpbiBpdCBhdCBhbGwgdGltZXNcIil9LHg9ZnVuY3Rpb24gZSh0KXshMSE9PXQmJnQhPT1vLmFjdGl2ZUVsZW1lbnQmJih0JiZ0LmZvY3VzPyh0LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEhZy5wcmV2ZW50U2Nyb2xsfSksdi5tb3N0UmVjZW50bHlGb2N1c2VkTm9kZT10LGZ1bmN0aW9uKGUpe3JldHVybiBlLnRhZ05hbWUmJlwiaW5wdXRcIj09PWUudGFnTmFtZS50b0xvd2VyQ2FzZSgpJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnNlbGVjdH0odCkmJnQuc2VsZWN0KCkpOmUodygpKSl9LF89ZnVuY3Rpb24oZSl7dmFyIHQ9eShcInNldFJldHVybkZvY3VzXCIsZSk7cmV0dXJuIHR8fCExIT09dCYmZX0sTz1mdW5jdGlvbihlKXt2YXIgdD1wKGUpO0ModCk+PTB8fChkKGcuY2xpY2tPdXRzaWRlRGVhY3RpdmF0ZXMsZSk/bi5kZWFjdGl2YXRlKHtyZXR1cm5Gb2N1czpnLnJldHVybkZvY3VzT25EZWFjdGl2YXRlfSk6ZChnLmFsbG93T3V0c2lkZUNsaWNrLGUpfHxlLnByZXZlbnREZWZhdWx0KCkpfSxMPWZ1bmN0aW9uKGUpe3ZhciB0PXAoZSksbj1DKHQpPj0wO258fHQgaW5zdGFuY2VvZiBEb2N1bWVudD9uJiYodi5tb3N0UmVjZW50bHlGb2N1c2VkTm9kZT10KTooZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx4KHYubW9zdFJlY2VudGx5Rm9jdXNlZE5vZGV8fHcoKSkpfSxFPWZ1bmN0aW9uKGUpe2lmKChcIkVzY2FwZVwiPT09KHQ9ZSkua2V5fHxcIkVzY1wiPT09dC5rZXl8fDI3PT09dC5rZXlDb2RlKSYmITEhPT1kKGcuZXNjYXBlRGVhY3RpdmF0ZXMsZSkpcmV0dXJuIGUucHJldmVudERlZmF1bHQoKSx2b2lkIG4uZGVhY3RpdmF0ZSgpO3ZhciB0OyhnLmlzS2V5Rm9yd2FyZChlKXx8Zy5pc0tleUJhY2t3YXJkKGUpKSYmZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxuPXAoZSk7YigpO3ZhciBvPW51bGw7aWYodi50YWJiYWJsZUdyb3Vwcy5sZW5ndGg+MCl7dmFyIGk9QyhuKSxhPWk+PTA/di5jb250YWluZXJHcm91cHNbaV06dm9pZCAwO2lmKGk8MClvPXQ/di50YWJiYWJsZUdyb3Vwc1t2LnRhYmJhYmxlR3JvdXBzLmxlbmd0aC0xXS5sYXN0VGFiYmFibGVOb2RlOnYudGFiYmFibGVHcm91cHNbMF0uZmlyc3RUYWJiYWJsZU5vZGU7ZWxzZSBpZih0KXt2YXIgcz1mKHYudGFiYmFibGVHcm91cHMsKGZ1bmN0aW9uKGUpe3ZhciB0PWUuZmlyc3RUYWJiYWJsZU5vZGU7cmV0dXJuIG49PT10fSkpO2lmKHM8MCYmKGEuY29udGFpbmVyPT09bnx8KDAsci5pc0ZvY3VzYWJsZSkobixnLnRhYmJhYmxlT3B0aW9ucykmJiEoMCxyLmlzVGFiYmFibGUpKG4sZy50YWJiYWJsZU9wdGlvbnMpJiYhYS5uZXh0VGFiYmFibGVOb2RlKG4sITEpKSYmKHM9aSkscz49MCl7dmFyIGM9MD09PXM/di50YWJiYWJsZUdyb3Vwcy5sZW5ndGgtMTpzLTE7bz12LnRhYmJhYmxlR3JvdXBzW2NdLmxhc3RUYWJiYWJsZU5vZGV9ZWxzZSBsKGUpfHwobz1hLm5leHRUYWJiYWJsZU5vZGUobiwhMSkpfWVsc2V7dmFyIHU9Zih2LnRhYmJhYmxlR3JvdXBzLChmdW5jdGlvbihlKXt2YXIgdD1lLmxhc3RUYWJiYWJsZU5vZGU7cmV0dXJuIG49PT10fSkpO2lmKHU8MCYmKGEuY29udGFpbmVyPT09bnx8KDAsci5pc0ZvY3VzYWJsZSkobixnLnRhYmJhYmxlT3B0aW9ucykmJiEoMCxyLmlzVGFiYmFibGUpKG4sZy50YWJiYWJsZU9wdGlvbnMpJiYhYS5uZXh0VGFiYmFibGVOb2RlKG4pKSYmKHU9aSksdT49MCl7dmFyIGQ9dT09PXYudGFiYmFibGVHcm91cHMubGVuZ3RoLTE/MDp1KzE7bz12LnRhYmJhYmxlR3JvdXBzW2RdLmZpcnN0VGFiYmFibGVOb2RlfWVsc2UgbChlKXx8KG89YS5uZXh0VGFiYmFibGVOb2RlKG4pKX19ZWxzZSBvPXkoXCJmYWxsYmFja0ZvY3VzXCIpO28mJihsKGUpJiZlLnByZXZlbnREZWZhdWx0KCkseChvKSl9KGUsZy5pc0tleUJhY2t3YXJkKGUpKX0sUz1mdW5jdGlvbihlKXt2YXIgdD1wKGUpO0ModCk+PTB8fGQoZy5jbGlja091dHNpZGVEZWFjdGl2YXRlcyxlKXx8ZChnLmFsbG93T3V0c2lkZUNsaWNrLGUpfHwoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkpfSxqPWZ1bmN0aW9uKCl7aWYodi5hY3RpdmUpcmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoZS5sZW5ndGg+MCl7dmFyIG49ZVtlLmxlbmd0aC0xXTtuIT09dCYmbi5wYXVzZSgpfXZhciByPWUuaW5kZXhPZih0KTstMT09PXJ8fGUuc3BsaWNlKHIsMSksZS5wdXNoKHQpfShhLG4pLHYuZGVsYXlJbml0aWFsRm9jdXNUaW1lcj1nLmRlbGF5SW5pdGlhbEZvY3VzP3UoKGZ1bmN0aW9uKCl7eCh3KCkpfSkpOngodygpKSxvLmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c2luXCIsTCwhMCksby5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsTyx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSksby5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLE8se2NhcHR1cmU6ITAscGFzc2l2ZTohMX0pLG8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsUyx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSksby5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLEUse2NhcHR1cmU6ITAscGFzc2l2ZTohMX0pLG59LE09ZnVuY3Rpb24oKXtpZih2LmFjdGl2ZSlyZXR1cm4gby5yZW1vdmVFdmVudExpc3RlbmVyKFwiZm9jdXNpblwiLEwsITApLG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLE8sITApLG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNoc3RhcnRcIixPLCEwKSxvLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLFMsITApLG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixFLCEwKSxufTtyZXR1cm4obj17Z2V0IGFjdGl2ZSgpe3JldHVybiB2LmFjdGl2ZX0sZ2V0IHBhdXNlZCgpe3JldHVybiB2LnBhdXNlZH0sYWN0aXZhdGU6ZnVuY3Rpb24oZSl7aWYodi5hY3RpdmUpcmV0dXJuIHRoaXM7dmFyIHQ9bShlLFwib25BY3RpdmF0ZVwiKSxuPW0oZSxcIm9uUG9zdEFjdGl2YXRlXCIpLHI9bShlLFwiY2hlY2tDYW5Gb2N1c1RyYXBcIik7cnx8YigpLHYuYWN0aXZlPSEwLHYucGF1c2VkPSExLHYubm9kZUZvY3VzZWRCZWZvcmVBY3RpdmF0aW9uPW8uYWN0aXZlRWxlbWVudCx0JiZ0KCk7dmFyIGk9ZnVuY3Rpb24oKXtyJiZiKCksaigpLG4mJm4oKX07cmV0dXJuIHI/KHIodi5jb250YWluZXJzLmNvbmNhdCgpKS50aGVuKGksaSksdGhpcyk6KGkoKSx0aGlzKX0sZGVhY3RpdmF0ZTpmdW5jdGlvbihlKXtpZighdi5hY3RpdmUpcmV0dXJuIHRoaXM7dmFyIHQ9aSh7b25EZWFjdGl2YXRlOmcub25EZWFjdGl2YXRlLG9uUG9zdERlYWN0aXZhdGU6Zy5vblBvc3REZWFjdGl2YXRlLGNoZWNrQ2FuUmV0dXJuRm9jdXM6Zy5jaGVja0NhblJldHVybkZvY3VzfSxlKTtjbGVhclRpbWVvdXQodi5kZWxheUluaXRpYWxGb2N1c1RpbWVyKSx2LmRlbGF5SW5pdGlhbEZvY3VzVGltZXI9dm9pZCAwLE0oKSx2LmFjdGl2ZT0hMSx2LnBhdXNlZD0hMSxmdW5jdGlvbihlLHQpe3ZhciBuPWUuaW5kZXhPZih0KTstMSE9PW4mJmUuc3BsaWNlKG4sMSksZS5sZW5ndGg+MCYmZVtlLmxlbmd0aC0xXS51bnBhdXNlKCl9KGEsbik7dmFyIHI9bSh0LFwib25EZWFjdGl2YXRlXCIpLG89bSh0LFwib25Qb3N0RGVhY3RpdmF0ZVwiKSxsPW0odCxcImNoZWNrQ2FuUmV0dXJuRm9jdXNcIikscz1tKHQsXCJyZXR1cm5Gb2N1c1wiLFwicmV0dXJuRm9jdXNPbkRlYWN0aXZhdGVcIik7ciYmcigpO3ZhciBjPWZ1bmN0aW9uKCl7dSgoZnVuY3Rpb24oKXtzJiZ4KF8odi5ub2RlRm9jdXNlZEJlZm9yZUFjdGl2YXRpb24pKSxvJiZvKCl9KSl9O3JldHVybiBzJiZsPyhsKF8odi5ub2RlRm9jdXNlZEJlZm9yZUFjdGl2YXRpb24pKS50aGVuKGMsYyksdGhpcyk6KGMoKSx0aGlzKX0scGF1c2U6ZnVuY3Rpb24oKXtyZXR1cm4gdi5wYXVzZWR8fCF2LmFjdGl2ZXx8KHYucGF1c2VkPSEwLE0oKSksdGhpc30sdW5wYXVzZTpmdW5jdGlvbigpe3JldHVybiB2LnBhdXNlZCYmdi5hY3RpdmU/KHYucGF1c2VkPSExLGIoKSxqKCksdGhpcyk6dGhpc30sdXBkYXRlQ29udGFpbmVyRWxlbWVudHM6ZnVuY3Rpb24oZSl7dmFyIHQ9W10uY29uY2F0KGUpLmZpbHRlcihCb29sZWFuKTtyZXR1cm4gdi5jb250YWluZXJzPXQubWFwKChmdW5jdGlvbihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZT9vLnF1ZXJ5U2VsZWN0b3IoZSk6ZX0pKSx2LmFjdGl2ZSYmYigpLHRoaXN9fSkudXBkYXRlQ29udGFpbmVyRWxlbWVudHMoZSksbn19LDkxNDE6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciByPW4oNjU1KSxvPW4oNjY4OSksaT1uKDQzOTQpLGE9bigzNTczKSxsPW4oOTI5NCkscz1uKDQ4MzkpO2Z1bmN0aW9uIGMoZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgdT1mdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gZSYmT2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24obil7aWYoXCJkZWZhdWx0XCIhPT1uKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsbik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbixyLmdldD9yOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlW25dfX0pfX0pKSx0LmRlZmF1bHQ9ZSxPYmplY3QuZnJlZXplKHQpfShvKSxmPWMobyksZD1jKHMpLHA9ZnVuY3Rpb24oZSl7cmV0dXJue2lzRW5hYmxlZDpmdW5jdGlvbih0KXtyZXR1cm4gZS5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4hIXRbZV19KSl9fX0saD17bWVhc3VyZUxheW91dDpwKFtcImxheW91dFwiLFwibGF5b3V0SWRcIixcImRyYWdcIixcIl9sYXlvdXRSZXNldFRyYW5zZm9ybVwiXSksYW5pbWF0aW9uOnAoW1wiYW5pbWF0ZVwiLFwiZXhpdFwiLFwidmFyaWFudHNcIixcIndoaWxlSG92ZXJcIixcIndoaWxlVGFwXCIsXCJ3aGlsZUZvY3VzXCIsXCJ3aGlsZURyYWdcIl0pLGV4aXQ6cChbXCJleGl0XCJdKSxkcmFnOnAoW1wiZHJhZ1wiLFwiZHJhZ0NvbnRyb2xzXCJdKSxmb2N1czpwKFtcIndoaWxlRm9jdXNcIl0pLGhvdmVyOnAoW1wid2hpbGVIb3ZlclwiLFwib25Ib3ZlclN0YXJ0XCIsXCJvbkhvdmVyRW5kXCJdKSx0YXA6cChbXCJ3aGlsZVRhcFwiLFwib25UYXBcIixcIm9uVGFwU3RhcnRcIixcIm9uVGFwQ2FuY2VsXCJdKSxwYW46cChbXCJvblBhblwiLFwib25QYW5TdGFydFwiLFwib25QYW5TZXNzaW9uU3RhcnRcIixcIm9uUGFuRW5kXCJdKSxsYXlvdXRBbmltYXRpb246cChbXCJsYXlvdXRcIixcImxheW91dElkXCJdKX07ZnVuY3Rpb24gZyhlKXtmb3IodmFyIHQgaW4gZSl7dmFyIG49ZVt0XTtudWxsIT09biYmKGhbdF0uQ29tcG9uZW50PW4pfX12YXIgdj1vLmNyZWF0ZUNvbnRleHQoe3N0cmljdDohMX0pLG09T2JqZWN0LmtleXMoaCksQz1tLmxlbmd0aCx5PW8uY3JlYXRlQ29udGV4dCh7dHJhbnNmb3JtUGFnZVBvaW50OmZ1bmN0aW9uKGUpe3JldHVybiBlfSxpc1N0YXRpYzohMX0pLHc9by5jcmVhdGVDb250ZXh0KHt9KTtmdW5jdGlvbiBiKCl7cmV0dXJuIG8udXNlQ29udGV4dCh3KS52aXN1YWxFbGVtZW50fXZhciB4PW8uY3JlYXRlQ29udGV4dChudWxsKTtmdW5jdGlvbiBfKGUpe3ZhciB0PW8udXNlUmVmKG51bGwpO3JldHVybiBudWxsPT09dC5jdXJyZW50JiYodC5jdXJyZW50PWUoKSksdC5jdXJyZW50fWZ1bmN0aW9uIE8oKXt2YXIgZT1vLnVzZUNvbnRleHQoeCk7aWYobnVsbD09PWUpcmV0dXJuWyEwLG51bGxdO3ZhciB0PWUuaXNQcmVzZW50LG49ZS5vbkV4aXRDb21wbGV0ZSxyPWUucmVnaXN0ZXIsaT1qKCk7cmV0dXJuIG8udXNlRWZmZWN0KChmdW5jdGlvbigpe3JldHVybiByKGkpfSksW10pLCF0JiZuP1shMSxmdW5jdGlvbigpe3JldHVybiBudWxsPT1uP3ZvaWQgMDpuKGkpfV06WyEwXX1mdW5jdGlvbiBMKGUpe3JldHVybiBudWxsPT09ZXx8ZS5pc1ByZXNlbnR9dmFyIEU9MCxTPWZ1bmN0aW9uKCl7cmV0dXJuIEUrK30saj1mdW5jdGlvbigpe3JldHVybiBfKFMpfSxNPW8uY3JlYXRlQ29udGV4dChudWxsKSxrPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3csUj1rP28udXNlTGF5b3V0RWZmZWN0Om8udXNlRWZmZWN0O2Z1bmN0aW9uIFAoZSl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLFwiY3VycmVudFwiKX1mdW5jdGlvbiBJKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpfWZ1bmN0aW9uIEEoZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGV8fEkoZSl9ZnVuY3Rpb24gVChlLHQsbixyLG8pe3ZhciBpO3JldHVybiB2b2lkIDA9PT1yJiYocj17fSksdm9pZCAwPT09byYmKG89e30pLFwic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1udWxsPT09KGk9ZS52YXJpYW50cyl8fHZvaWQgMD09PWk/dm9pZCAwOmlbdF0pLFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dChudWxsIT1uP246ZS5jdXN0b20scixvKTp0fWZ1bmN0aW9uIEgoZSx0LG4pe3ZhciByPWUuZ2V0UHJvcHMoKTtyZXR1cm4gVChyLHQsbnVsbCE9bj9uOnIuY3VzdG9tLGZ1bmN0aW9uKGUpe3ZhciB0PXt9O3JldHVybiBlLmZvckVhY2hWYWx1ZSgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gdFtuXT1lLmdldCgpfSkpLHR9KGUpLGZ1bmN0aW9uKGUpe3ZhciB0PXt9O3JldHVybiBlLmZvckVhY2hWYWx1ZSgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gdFtuXT1lLmdldFZlbG9jaXR5KCl9KSksdH0oZSkpfWZ1bmN0aW9uIEIoZSl7dmFyIHQ7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YobnVsbD09PSh0PWUuYW5pbWF0ZSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuc3RhcnQpfHxBKGUuaW5pdGlhbCl8fEEoZS5hbmltYXRlKXx8QShlLndoaWxlSG92ZXIpfHxBKGUud2hpbGVEcmFnKXx8QShlLndoaWxlVGFwKXx8QShlLndoaWxlRm9jdXMpfHxBKGUuZXhpdCl9ZnVuY3Rpb24gVihlKXtyZXR1cm4gQm9vbGVhbihCKGUpfHxlLnZhcmlhbnRzKX1mdW5jdGlvbiBEKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2Uuam9pbihcIiBcIik6ZX1mdW5jdGlvbiBaKGUpe3ZhciB0PWUucHJlbG9hZGVkRmVhdHVyZXMsbj1lLmNyZWF0ZVZpc3VhbEVsZW1lbnQsaT1lLnVzZVJlbmRlcixhPWUudXNlVmlzdWFsU3RhdGUsbD1lLkNvbXBvbmVudDtyZXR1cm4gdCYmZyh0KSxvLmZvcndhcmRSZWYoKGZ1bmN0aW9uKGUsdCl7dmFyIHM9by51c2VDb250ZXh0KHkpLmlzU3RhdGljLGM9bnVsbCxmPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZnVuY3Rpb24oZSx0KXtpZihCKGUpKXt2YXIgbj1lLmluaXRpYWwscj1lLmFuaW1hdGU7cmV0dXJue2luaXRpYWw6ITE9PT1ufHxBKG4pP246dm9pZCAwLGFuaW1hdGU6QShyKT9yOnZvaWQgMH19cmV0dXJuITEhPT1lLmluaGVyaXQ/dDp7fX0oZSxvLnVzZUNvbnRleHQodykpLHI9bi5pbml0aWFsLGk9bi5hbmltYXRlO3JldHVybiBvLnVzZU1lbW8oKGZ1bmN0aW9uKCl7cmV0dXJue2luaXRpYWw6cixhbmltYXRlOml9fSksdD9bRChyKSxEKGkpXTpbXSl9KGUscyksZD1hKGUscyk7cmV0dXJuIXMmJmsmJihmLnZpc3VhbEVsZW1lbnQ9ZnVuY3Rpb24oZSx0LG4saSl7dmFyIGE9by51c2VDb250ZXh0KHkpLGw9by51c2VDb250ZXh0KHYpLHM9YigpLGM9by51c2VDb250ZXh0KHgpLHU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sYXlvdXRJZCxuPW8udXNlQ29udGV4dChNKTtyZXR1cm4gbiYmdm9pZCAwIT09dD9uK1wiLVwiK3Q6dH0obiksZj1vLnVzZVJlZih2b2lkIDApO2l8fChpPWwucmVuZGVyZXIpLCFmLmN1cnJlbnQmJmkmJihmLmN1cnJlbnQ9aShlLHt2aXN1YWxTdGF0ZTp0LHBhcmVudDpzLHByb3BzOnIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxuKSx7bGF5b3V0SWQ6dX0pLHByZXNlbmNlSWQ6bnVsbD09Yz92b2lkIDA6Yy5pZCxibG9ja0luaXRpYWxBbmltYXRpb246ITE9PT0obnVsbD09Yz92b2lkIDA6Yy5pbml0aWFsKX0pKTt2YXIgZD1mLmN1cnJlbnQ7cmV0dXJuIFIoKGZ1bmN0aW9uKCl7ZCYmKGQuc2V0UHJvcHMoci5fX2Fzc2lnbihyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sYSksbikse2xheW91dElkOnV9KSksZC5pc1ByZXNlbnQ9TChjKSxkLmlzUHJlc2VuY2VSb290PSFzfHxzLnByZXNlbmNlSWQhPT0obnVsbD09Yz92b2lkIDA6Yy5pZCksZC5zeW5jUmVuZGVyKCkpfSkpLG8udXNlRWZmZWN0KChmdW5jdGlvbigpe3ZhciBlO2QmJihudWxsPT09KGU9ZC5hbmltYXRpb25TdGF0ZSl8fHZvaWQgMD09PWV8fGUuYW5pbWF0ZUNoYW5nZXMoKSl9KSksUigoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09ZD92b2lkIDA6ZC5ub3RpZnlVbm1vdW50KCl9fSksW10pLGR9KGwsZCxlLG4pLGM9ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPVtdO2lmKG8udXNlQ29udGV4dCh2KSwhdClyZXR1cm4gbnVsbDtmb3IodmFyIGE9MDthPEM7YSsrKXt2YXIgbD1tW2FdLHM9aFtsXSxjPXMuaXNFbmFibGVkLGY9cy5Db21wb25lbnQ7YyhlKSYmZiYmaS5wdXNoKHUuY3JlYXRlRWxlbWVudChmLHIuX19hc3NpZ24oe2tleTpsfSxlLHt2aXN1YWxFbGVtZW50OnR9KSkpfXJldHVybiBpfShlLGYudmlzdWFsRWxlbWVudCkpLHUuY3JlYXRlRWxlbWVudCh1LkZyYWdtZW50LG51bGwsdS5jcmVhdGVFbGVtZW50KHcuUHJvdmlkZXIse3ZhbHVlOmZ9LGkobCxlLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gby51c2VDYWxsYmFjaygoZnVuY3Rpb24ocil7dmFyIG87ciYmKG51bGw9PT0obz1lLm1vdW50KXx8dm9pZCAwPT09b3x8by5jYWxsKGUscikpLHQmJihyP3QubW91bnQocik6dC51bm1vdW50KCkpLG4mJihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuP24ocik6UChuKSYmKG4uY3VycmVudD1yKSl9KSxbdF0pfShkLGYudmlzdWFsRWxlbWVudCx0KSxkLHMpKSxjKX0pKX1mdW5jdGlvbiAkKGUpe2Z1bmN0aW9uIHQodCxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49e30pLFooZSh0LG4pKX12YXIgbj1uZXcgTWFwO3JldHVybiBuZXcgUHJveHkodCx7Z2V0OmZ1bmN0aW9uKGUscil7cmV0dXJuIG4uaGFzKHIpfHxuLnNldChyLHQocikpLG4uZ2V0KHIpfX0pfXZhciBOPVtcImFuaW1hdGVcIixcImNpcmNsZVwiLFwiZGVmc1wiLFwiZGVzY1wiLFwiZWxsaXBzZVwiLFwiZ1wiLFwiaW1hZ2VcIixcImxpbmVcIixcImZpbHRlclwiLFwibWFya2VyXCIsXCJtYXNrXCIsXCJtZXRhZGF0YVwiLFwicGF0aFwiLFwicGF0dGVyblwiLFwicG9seWdvblwiLFwicG9seWxpbmVcIixcInJlY3RcIixcInN0b3BcIixcInN2Z1wiLFwic3dpdGNoXCIsXCJzeW1ib2xcIixcInRleHRcIixcInRzcGFuXCIsXCJ1c2VcIixcInZpZXdcIl07ZnVuY3Rpb24gRihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZSYmIWUuaW5jbHVkZXMoXCItXCIpJiYhIShOLmluZGV4T2YoZSk+LTF8fC9bQS1aXS8udGVzdChlKSl9dmFyIFU9e307ZnVuY3Rpb24gVyhlKXtmb3IodmFyIHQgaW4gZSlVW3RdPWVbdF19dmFyIHo9W1wiXCIsXCJYXCIsXCJZXCIsXCJaXCJdLEc9W1widHJhbnNmb3JtUGVyc3BlY3RpdmVcIixcInhcIixcInlcIixcInpcIl07ZnVuY3Rpb24gcShlLHQpe3JldHVybiBHLmluZGV4T2YoZSktRy5pbmRleE9mKHQpfVtcInRyYW5zbGF0ZVwiLFwic2NhbGVcIixcInJvdGF0ZVwiLFwic2tld1wiXS5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gei5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gRy5wdXNoKGUrdCl9KSl9KSk7dmFyIFk9bmV3IFNldChHKTtmdW5jdGlvbiBLKGUpe3JldHVybiBZLmhhcyhlKX12YXIgWD1uZXcgU2V0KFtcIm9yaWdpblhcIixcIm9yaWdpbllcIixcIm9yaWdpblpcIl0pO2Z1bmN0aW9uIEooZSl7cmV0dXJuIFguaGFzKGUpfWZ1bmN0aW9uIFEoZSx0KXt2YXIgbj10LmxheW91dCxyPXQubGF5b3V0SWQ7cmV0dXJuIEsoZSl8fEooZSl8fChufHx2b2lkIDAhPT1yKSYmKCEhVVtlXXx8XCJvcGFjaXR5XCI9PT1lKX12YXIgZWU9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPT1lJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmZS5nZXRWZWxvY2l0eX0sdGU9e3g6XCJ0cmFuc2xhdGVYXCIseTpcInRyYW5zbGF0ZVlcIix6OlwidHJhbnNsYXRlWlwiLHRyYW5zZm9ybVBlcnNwZWN0aXZlOlwicGVyc3BlY3RpdmVcIn07ZnVuY3Rpb24gbmUoZSl7cmV0dXJuIGUuc3RhcnRzV2l0aChcIi0tXCIpfXZhciByZT1mdW5jdGlvbihlLHQpe3JldHVybiB0JiZcIm51bWJlclwiPT10eXBlb2YgZT90LnRyYW5zZm9ybShlKTplfSxvZT1yLl9fYXNzaWduKHIuX19hc3NpZ24oe30sYS5udW1iZXIpLHt0cmFuc2Zvcm06TWF0aC5yb3VuZH0pLGllPXtib3JkZXJXaWR0aDphLnB4LGJvcmRlclRvcFdpZHRoOmEucHgsYm9yZGVyUmlnaHRXaWR0aDphLnB4LGJvcmRlckJvdHRvbVdpZHRoOmEucHgsYm9yZGVyTGVmdFdpZHRoOmEucHgsYm9yZGVyUmFkaXVzOmEucHgscmFkaXVzOmEucHgsYm9yZGVyVG9wTGVmdFJhZGl1czphLnB4LGJvcmRlclRvcFJpZ2h0UmFkaXVzOmEucHgsYm9yZGVyQm90dG9tUmlnaHRSYWRpdXM6YS5weCxib3JkZXJCb3R0b21MZWZ0UmFkaXVzOmEucHgsd2lkdGg6YS5weCxtYXhXaWR0aDphLnB4LGhlaWdodDphLnB4LG1heEhlaWdodDphLnB4LHNpemU6YS5weCx0b3A6YS5weCxyaWdodDphLnB4LGJvdHRvbTphLnB4LGxlZnQ6YS5weCxwYWRkaW5nOmEucHgscGFkZGluZ1RvcDphLnB4LHBhZGRpbmdSaWdodDphLnB4LHBhZGRpbmdCb3R0b206YS5weCxwYWRkaW5nTGVmdDphLnB4LG1hcmdpbjphLnB4LG1hcmdpblRvcDphLnB4LG1hcmdpblJpZ2h0OmEucHgsbWFyZ2luQm90dG9tOmEucHgsbWFyZ2luTGVmdDphLnB4LHJvdGF0ZTphLmRlZ3JlZXMscm90YXRlWDphLmRlZ3JlZXMscm90YXRlWTphLmRlZ3JlZXMscm90YXRlWjphLmRlZ3JlZXMsc2NhbGU6YS5zY2FsZSxzY2FsZVg6YS5zY2FsZSxzY2FsZVk6YS5zY2FsZSxzY2FsZVo6YS5zY2FsZSxza2V3OmEuZGVncmVlcyxza2V3WDphLmRlZ3JlZXMsc2tld1k6YS5kZWdyZWVzLGRpc3RhbmNlOmEucHgsdHJhbnNsYXRlWDphLnB4LHRyYW5zbGF0ZVk6YS5weCx0cmFuc2xhdGVaOmEucHgseDphLnB4LHk6YS5weCx6OmEucHgscGVyc3BlY3RpdmU6YS5weCx0cmFuc2Zvcm1QZXJzcGVjdGl2ZTphLnB4LG9wYWNpdHk6YS5hbHBoYSxvcmlnaW5YOmEucHJvZ3Jlc3NQZXJjZW50YWdlLG9yaWdpblk6YS5wcm9ncmVzc1BlcmNlbnRhZ2Usb3JpZ2luWjphLnB4LHpJbmRleDpvZSxmaWxsT3BhY2l0eTphLmFscGhhLHN0cm9rZU9wYWNpdHk6YS5hbHBoYSxudW1PY3RhdmVzOm9lfTtmdW5jdGlvbiBhZShlLHQsbixyLG8saSxhLGwpe3ZhciBzLGM9ZS5zdHlsZSx1PWUudmFycyxmPWUudHJhbnNmb3JtLGQ9ZS50cmFuc2Zvcm1LZXlzLHA9ZS50cmFuc2Zvcm1PcmlnaW47ZC5sZW5ndGg9MDt2YXIgaD0hMSxnPSExLHY9ITA7Zm9yKHZhciBtIGluIHQpe3ZhciBDPXRbbV07aWYobmUobSkpdVttXT1DO2Vsc2V7dmFyIHk9aWVbbV0sdz1yZShDLHkpO2lmKEsobSkpe2lmKGg9ITAsZlttXT13LGQucHVzaChtKSwhdiljb250aW51ZTtDIT09KG51bGwhPT0ocz15LmRlZmF1bHQpJiZ2b2lkIDAhPT1zP3M6MCkmJih2PSExKX1lbHNlIGlmKEoobSkpcFttXT13LGc9ITA7ZWxzZSBpZigobnVsbD09bj92b2lkIDA6bi5pc0h5ZHJhdGVkKSYmKG51bGw9PXI/dm9pZCAwOnIuaXNIeWRyYXRlZCkmJlVbbV0pe3ZhciBiPVVbbV0ucHJvY2VzcyhDLHIsbikseD1VW21dLmFwcGx5VG87aWYoeClmb3IodmFyIF89eC5sZW5ndGgsTz0wO088XztPKyspY1t4W09dXT1iO2Vsc2UgY1ttXT1ifWVsc2UgY1ttXT13fX1yJiZuJiZhJiZsPyhjLnRyYW5zZm9ybT1hKHIuZGVsdGFGaW5hbCxyLnRyZWVTY2FsZSxoP2Y6dm9pZCAwKSxpJiYoYy50cmFuc2Zvcm09aShmLGMudHJhbnNmb3JtKSksYy50cmFuc2Zvcm1PcmlnaW49bChyKSk6KGgmJihjLnRyYW5zZm9ybT1mdW5jdGlvbihlLHQsbixyKXt2YXIgbz1lLnRyYW5zZm9ybSxpPWUudHJhbnNmb3JtS2V5cyxhPXQuZW5hYmxlSGFyZHdhcmVBY2NlbGVyYXRpb24sbD12b2lkIDA9PT1hfHxhLHM9dC5hbGxvd1RyYW5zZm9ybU5vbmUsYz12b2lkIDA9PT1zfHxzLHU9XCJcIjtpLnNvcnQocSk7Zm9yKHZhciBmPSExLGQ9aS5sZW5ndGgscD0wO3A8ZDtwKyspe3ZhciBoPWlbcF07dSs9KHRlW2hdfHxoKStcIihcIitvW2hdK1wiKSBcIixcInpcIj09PWgmJihmPSEwKX1yZXR1cm4hZiYmbD91Kz1cInRyYW5zbGF0ZVooMClcIjp1PXUudHJpbSgpLHI/dT1yKG8sbj9cIlwiOnUpOmMmJm4mJih1PVwibm9uZVwiKSx1fShlLG8sdixpKSksZyYmKGMudHJhbnNmb3JtT3JpZ2luPWZ1bmN0aW9uKGUpe3ZhciB0PWUub3JpZ2luWCxuPXZvaWQgMD09PXQ/XCI1MCVcIjp0LHI9ZS5vcmlnaW5ZLG89dm9pZCAwPT09cj9cIjUwJVwiOnIsaT1lLm9yaWdpblo7cmV0dXJuIG4rXCIgXCIrbytcIiBcIisodm9pZCAwPT09aT8wOmkpfShwKSkpfXZhciBsZT1mdW5jdGlvbigpe3JldHVybntzdHlsZTp7fSx0cmFuc2Zvcm06e30sdHJhbnNmb3JtS2V5czpbXSx0cmFuc2Zvcm1PcmlnaW46e30sdmFyczp7fX19O2Z1bmN0aW9uIHNlKGUsdCxuKXtmb3IodmFyIHIgaW4gdCllZSh0W3JdKXx8UShyLG4pfHwoZVtyXT10W3JdKX1mdW5jdGlvbiBjZShlLHQsbil7dmFyIGk9e30sYT1mdW5jdGlvbihlLHQsbil7dmFyIGk9e307cmV0dXJuIHNlKGksZS5zdHlsZXx8e30sZSksT2JqZWN0LmFzc2lnbihpLGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1lLnRyYW5zZm9ybVRlbXBsYXRlO3JldHVybiBvLnVzZU1lbW8oKGZ1bmN0aW9uKCl7dmFyIGU9bGUoKTthZShlLHQsdm9pZCAwLHZvaWQgMCx7ZW5hYmxlSGFyZHdhcmVBY2NlbGVyYXRpb246IW59LGkpO3ZhciBvPWUudmFycyxhPWUuc3R5bGU7cmV0dXJuIHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxvKSxhKX0pLFt0XSl9KGUsdCxuKSksZS50cmFuc2Zvcm1WYWx1ZXMmJihpPWUudHJhbnNmb3JtVmFsdWVzKGkpKSxpfShlLHQsbik7cmV0dXJuIEJvb2xlYW4oZS5kcmFnKSYmKGkuZHJhZ2dhYmxlPSExLGEudXNlclNlbGVjdD1hLldlYmtpdFVzZXJTZWxlY3Q9YS5XZWJraXRUb3VjaENhbGxvdXQ9XCJub25lXCIsYS50b3VjaEFjdGlvbj0hMD09PWUuZHJhZz9cIm5vbmVcIjpcInBhbi1cIisoXCJ4XCI9PT1lLmRyYWc/XCJ5XCI6XCJ4XCIpKSxpLnN0eWxlPWEsaX12YXIgdWU9bmV3IFNldChbXCJpbml0aWFsXCIsXCJhbmltYXRlXCIsXCJleGl0XCIsXCJzdHlsZVwiLFwidmFyaWFudHNcIixcInRyYW5zaXRpb25cIixcInRyYW5zZm9ybVRlbXBsYXRlXCIsXCJ0cmFuc2Zvcm1WYWx1ZXNcIixcImN1c3RvbVwiLFwiaW5oZXJpdFwiLFwibGF5b3V0XCIsXCJsYXlvdXRJZFwiLFwiX2xheW91dFJlc2V0VHJhbnNmb3JtXCIsXCJvbkxheW91dEFuaW1hdGlvbkNvbXBsZXRlXCIsXCJvblZpZXdwb3J0Qm94VXBkYXRlXCIsXCJvbkxheW91dE1lYXN1cmVcIixcIm9uQmVmb3JlTGF5b3V0TWVhc3VyZVwiLFwib25BbmltYXRpb25TdGFydFwiLFwib25BbmltYXRpb25Db21wbGV0ZVwiLFwib25VcGRhdGVcIixcIm9uRHJhZ1N0YXJ0XCIsXCJvbkRyYWdcIixcIm9uRHJhZ0VuZFwiLFwib25NZWFzdXJlRHJhZ0NvbnN0cmFpbnRzXCIsXCJvbkRpcmVjdGlvbkxvY2tcIixcIm9uRHJhZ1RyYW5zaXRpb25FbmRcIixcImRyYWdcIixcImRyYWdDb250cm9sc1wiLFwiZHJhZ0xpc3RlbmVyXCIsXCJkcmFnQ29uc3RyYWludHNcIixcImRyYWdEaXJlY3Rpb25Mb2NrXCIsXCJfZHJhZ1hcIixcIl9kcmFnWVwiLFwiZHJhZ0VsYXN0aWNcIixcImRyYWdNb21lbnR1bVwiLFwiZHJhZ1Byb3BhZ2F0aW9uXCIsXCJkcmFnVHJhbnNpdGlvblwiLFwid2hpbGVEcmFnXCIsXCJvblBhblwiLFwib25QYW5TdGFydFwiLFwib25QYW5FbmRcIixcIm9uUGFuU2Vzc2lvblN0YXJ0XCIsXCJvblRhcFwiLFwib25UYXBTdGFydFwiLFwib25UYXBDYW5jZWxcIixcIm9uSG92ZXJTdGFydFwiLFwib25Ib3ZlckVuZFwiLFwid2hpbGVGb2N1c1wiLFwid2hpbGVUYXBcIixcIndoaWxlSG92ZXJcIl0pO2Z1bmN0aW9uIGZlKGUpe3JldHVybiB1ZS5oYXMoZSl9dmFyIGRlPWZ1bmN0aW9uKGUpe3JldHVybiFmZShlKX07dHJ5e3ZhciBwZT1uKDg1OTQpLlo7ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3RhcnRzV2l0aChcIm9uXCIpPyFmZShlKTpwZShlKX19Y2F0Y2goZSl7fWZ1bmN0aW9uIGhlKGUsdCxuKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZT9lOmEucHgudHJhbnNmb3JtKHQrbiplKX12YXIgZ2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYS5weC50cmFuc2Zvcm0oZSp0KX0sdmU9e29mZnNldDpcInN0cm9rZS1kYXNob2Zmc2V0XCIsYXJyYXk6XCJzdHJva2UtZGFzaGFycmF5XCJ9LG1lPXtvZmZzZXQ6XCJzdHJva2VEYXNob2Zmc2V0XCIsYXJyYXk6XCJzdHJva2VEYXNoYXJyYXlcIn07ZnVuY3Rpb24gQ2UoZSx0LG4sbyxpLGEsbCxzKXt2YXIgYz10LmF0dHJYLHU9dC5hdHRyWSxmPXQub3JpZ2luWCxkPXQub3JpZ2luWSxwPXQucGF0aExlbmd0aCxoPXQucGF0aFNwYWNpbmcsZz12b2lkIDA9PT1oPzE6aCx2PXQucGF0aE9mZnNldCxtPXZvaWQgMD09PXY/MDp2O2FlKGUsci5fX3Jlc3QodCxbXCJhdHRyWFwiLFwiYXR0cllcIixcIm9yaWdpblhcIixcIm9yaWdpbllcIixcInBhdGhMZW5ndGhcIixcInBhdGhTcGFjaW5nXCIsXCJwYXRoT2Zmc2V0XCJdKSxuLG8saSxhLGwscyksZS5hdHRycz1lLnN0eWxlLGUuc3R5bGU9e307dmFyIEM9ZS5hdHRycyx5PWUuc3R5bGUsdz1lLmRpbWVuc2lvbnMsYj1lLnRvdGFsUGF0aExlbmd0aDtDLnRyYW5zZm9ybSYmKHcmJih5LnRyYW5zZm9ybT1DLnRyYW5zZm9ybSksZGVsZXRlIEMudHJhbnNmb3JtKSx3JiYodm9pZCAwIT09Znx8dm9pZCAwIT09ZHx8eS50cmFuc2Zvcm0pJiYoeS50cmFuc2Zvcm1PcmlnaW49ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBoZSh0LGUueCxlLndpZHRoKStcIiBcIitoZShuLGUueSxlLmhlaWdodCl9KHcsdm9pZCAwIT09Zj9mOi41LHZvaWQgMCE9PWQ/ZDouNSkpLHZvaWQgMCE9PWMmJihDLng9Yyksdm9pZCAwIT09dSYmKEMueT11KSx2b2lkIDAhPT1iJiZ2b2lkIDAhPT1wJiZmdW5jdGlvbihlLHQsbixyLG8saSl7dm9pZCAwPT09ciYmKHI9MSksdm9pZCAwPT09byYmKG89MCksdm9pZCAwPT09aSYmKGk9ITApO3ZhciBhPWk/dmU6bWU7ZVthLm9mZnNldF09Z2UoLW8sdCk7dmFyIGw9Z2Uobix0KSxzPWdlKHIsdCk7ZVthLmFycmF5XT1sK1wiIFwiK3N9KEMsYixwLGcsbSwhMSl9dmFyIHllPWZ1bmN0aW9uKCl7cmV0dXJuIHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxsZSgpKSx7YXR0cnM6e319KX07ZnVuY3Rpb24gd2UoZSx0KXt2YXIgbj1vLnVzZU1lbW8oKGZ1bmN0aW9uKCl7dmFyIG49eWUoKTtyZXR1cm4gQ2Uobix0LHZvaWQgMCx2b2lkIDAse2VuYWJsZUhhcmR3YXJlQWNjZWxlcmF0aW9uOiExfSxlLnRyYW5zZm9ybVRlbXBsYXRlKSxyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sbi5hdHRycykse3N0eWxlOnIuX19hc3NpZ24oe30sbi5zdHlsZSl9KX0pLFt0XSk7aWYoZS5zdHlsZSl7dmFyIGk9e307c2UoaSxlLnN0eWxlLGUpLG4uc3R5bGU9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGkpLG4uc3R5bGUpfXJldHVybiBufWZ1bmN0aW9uIGJlKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0hMSksZnVuY3Rpb24odCxuLGksYSxsKXt2YXIgcz1hLmxhdGVzdFZhbHVlcyxjPShGKHQpP3dlOmNlKShuLHMsbCksdT1mdW5jdGlvbihlLHQsbil7dmFyIHI9e307Zm9yKHZhciBvIGluIGUpKGRlKG8pfHwhMD09PW4mJmZlKG8pfHwhdCYmIWZlKG8pKSYmKHJbb109ZVtvXSk7cmV0dXJuIHJ9KG4sXCJzdHJpbmdcIj09dHlwZW9mIHQsZSksZj1yLl9fYXNzaWduKHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSx1KSxjKSx7cmVmOml9KTtyZXR1cm4gby5jcmVhdGVFbGVtZW50KHQsZil9fXZhciB4ZT0vKFthLXpdKShbQS1aXSkvZyxfZT1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKHhlLFwiJDEtJDJcIikudG9Mb3dlckNhc2UoKX07ZnVuY3Rpb24gT2UoZSx0KXt2YXIgbj10LnN0eWxlLHI9dC52YXJzO2Zvcih2YXIgbyBpbiBPYmplY3QuYXNzaWduKGUuc3R5bGUsbikscillLnN0eWxlLnNldFByb3BlcnR5KG8scltvXSl9dmFyIExlPW5ldyBTZXQoW1wiYmFzZUZyZXF1ZW5jeVwiLFwiZGlmZnVzZUNvbnN0YW50XCIsXCJrZXJuZWxNYXRyaXhcIixcImtlcm5lbFVuaXRMZW5ndGhcIixcImtleVNwbGluZXNcIixcImtleVRpbWVzXCIsXCJsaW1pdGluZ0NvbmVBbmdsZVwiLFwibWFya2VySGVpZ2h0XCIsXCJtYXJrZXJXaWR0aFwiLFwibnVtT2N0YXZlc1wiLFwidGFyZ2V0WFwiLFwidGFyZ2V0WVwiLFwic3VyZmFjZVNjYWxlXCIsXCJzcGVjdWxhckNvbnN0YW50XCIsXCJzcGVjdWxhckV4cG9uZW50XCIsXCJzdGREZXZpYXRpb25cIixcInRhYmxlVmFsdWVzXCIsXCJ2aWV3Qm94XCIsXCJncmFkaWVudFRyYW5zZm9ybVwiXSk7ZnVuY3Rpb24gRWUoZSx0KXtmb3IodmFyIG4gaW4gT2UoZSx0KSx0LmF0dHJzKWUuc2V0QXR0cmlidXRlKExlLmhhcyhuKT9uOl9lKG4pLHQuYXR0cnNbbl0pfWZ1bmN0aW9uIFNlKGUpe3ZhciB0PWUuc3R5bGUsbj17fTtmb3IodmFyIHIgaW4gdCkoZWUodFtyXSl8fFEocixlKSkmJihuW3JdPXRbcl0pO3JldHVybiBufWZ1bmN0aW9uIGplKGUpe3ZhciB0PVNlKGUpO2Zvcih2YXIgbiBpbiBlKWVlKGVbbl0pJiYodFtcInhcIj09PW58fFwieVwiPT09bj9cImF0dHJcIituLnRvVXBwZXJDYXNlKCk6bl09ZVtuXSk7cmV0dXJuIHR9ZnVuY3Rpb24gTWUoZSl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuc3RhcnR9dmFyIGtlPWZ1bmN0aW9uKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpfSxSZT1mdW5jdGlvbihlKXtyZXR1cm4gQm9vbGVhbihlJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmZS5taXgmJmUudG9WYWx1ZSl9LFBlPWZ1bmN0aW9uKGUpe3JldHVybiBrZShlKT9lW2UubGVuZ3RoLTFdfHwwOmV9O2Z1bmN0aW9uIEllKGUpe3ZhciB0PWVlKGUpP2UuZ2V0KCk6ZTtyZXR1cm4gUmUodCk/dC50b1ZhbHVlKCk6dH1mdW5jdGlvbiBBZShlLHQsbixyKXt2YXIgbz1lLnNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyxpPWUuY3JlYXRlUmVuZGVyU3RhdGUsYT1lLm9uTW91bnQsbD17bGF0ZXN0VmFsdWVzOkhlKHQsbixyLG8pLHJlbmRlclN0YXRlOmkoKX07cmV0dXJuIGEmJihsLm1vdW50PWZ1bmN0aW9uKGUpe3JldHVybiBhKHQsZSxsKX0pLGx9dmFyIFRlPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3ZhciByPW8udXNlQ29udGV4dCh3KSxpPW8udXNlQ29udGV4dCh4KTtyZXR1cm4gbj9BZShlLHQscixpKTpfKChmdW5jdGlvbigpe3JldHVybiBBZShlLHQscixpKX0pKX19O2Z1bmN0aW9uIEhlKGUsdCxuLG8pe3ZhciBpPXt9LGE9ITE9PT0obnVsbD09bj92b2lkIDA6bi5pbml0aWFsKSxsPW8oZSk7Zm9yKHZhciBzIGluIGwpaVtzXT1JZShsW3NdKTt2YXIgYz1lLmluaXRpYWwsdT1lLmFuaW1hdGUsZj1CKGUpLGQ9VihlKTt0JiZkJiYhZiYmITEhPT1lLmluaGVyaXQmJihudWxsIT1jfHwoYz10LmluaXRpYWwpLG51bGwhPXV8fCh1PXQuYW5pbWF0ZSkpO3ZhciBwPWF8fCExPT09Yz91OmM7cmV0dXJuIHAmJlwiYm9vbGVhblwiIT10eXBlb2YgcCYmIU1lKHApJiYoQXJyYXkuaXNBcnJheShwKT9wOltwXSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49VChlLHQpO2lmKG4pe3ZhciBvPW4udHJhbnNpdGlvbkVuZDtuLnRyYW5zaXRpb247dmFyIGE9ci5fX3Jlc3QobixbXCJ0cmFuc2l0aW9uRW5kXCIsXCJ0cmFuc2l0aW9uXCJdKTtmb3IodmFyIGwgaW4gYSlpW2xdPWFbbF07Zm9yKHZhciBsIGluIG8paVtsXT1vW2xdfX0pKSxpfXZhciBCZSxWZT17dXNlVmlzdWFsU3RhdGU6VGUoe3NjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wczpqZSxjcmVhdGVSZW5kZXJTdGF0ZTp5ZSxvbk1vdW50OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uLnJlbmRlclN0YXRlLG89bi5sYXRlc3RWYWx1ZXM7dHJ5e3IuZGltZW5zaW9ucz1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmdldEJCb3g/dC5nZXRCQm94KCk6dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1jYXRjaChlKXtyLmRpbWVuc2lvbnM9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH19XCJwYXRoXCI9PT10LnRhZ05hbWUmJihyLnRvdGFsUGF0aExlbmd0aD10LmdldFRvdGFsTGVuZ3RoKCkpLENlKHIsbyx2b2lkIDAsdm9pZCAwLHtlbmFibGVIYXJkd2FyZUFjY2VsZXJhdGlvbjohMX0sZS50cmFuc2Zvcm1UZW1wbGF0ZSksRWUodCxyKX19KX0sRGU9e3VzZVZpc3VhbFN0YXRlOlRlKHtzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHM6U2UsY3JlYXRlUmVuZGVyU3RhdGU6bGV9KX07ZnVuY3Rpb24gWmUoZSx0LG4sbyl7dmFyIGk9dC5mb3J3YXJkTW90aW9uUHJvcHMsYT12b2lkIDAhPT1pJiZpLGw9RihlKT9WZTpEZTtyZXR1cm4gci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGwpLHtwcmVsb2FkZWRGZWF0dXJlczpuLHVzZVJlbmRlcjpiZShhKSxjcmVhdGVWaXN1YWxFbGVtZW50Om8sQ29tcG9uZW50OmV9KX1mdW5jdGlvbiAkZShlLHQsbixyKXtyZXR1cm4gZS5hZGRFdmVudExpc3RlbmVyKHQsbixyKSxmdW5jdGlvbigpe3JldHVybiBlLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxuLHIpfX1mdW5jdGlvbiBOZShlLHQsbixyKXtvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXt2YXIgbz1lLmN1cnJlbnQ7aWYobiYmbylyZXR1cm4gJGUobyx0LG4scil9KSxbZSx0LG4scl0pfWZ1bmN0aW9uIEZlKGUpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBQb2ludGVyRXZlbnQmJmUgaW5zdGFuY2VvZiBQb2ludGVyRXZlbnQ/IShcIm1vdXNlXCIhPT1lLnBvaW50ZXJUeXBlKTplIGluc3RhbmNlb2YgTW91c2VFdmVudH1mdW5jdGlvbiBVZShlKXtyZXR1cm4hIWUudG91Y2hlc30hZnVuY3Rpb24oZSl7ZS5BbmltYXRlPVwiYW5pbWF0ZVwiLGUuSG92ZXI9XCJ3aGlsZUhvdmVyXCIsZS5UYXA9XCJ3aGlsZVRhcFwiLGUuRHJhZz1cIndoaWxlRHJhZ1wiLGUuRm9jdXM9XCJ3aGlsZUZvY3VzXCIsZS5FeGl0PVwiZXhpdFwifShCZXx8KEJlPXt9KSk7dmFyIFdlPXtwYWdlWDowLHBhZ2VZOjB9O2Z1bmN0aW9uIHplKGUsdCl7dm9pZCAwPT09dCYmKHQ9XCJwYWdlXCIpO3ZhciBuPWUudG91Y2hlc1swXXx8ZS5jaGFuZ2VkVG91Y2hlc1swXXx8V2U7cmV0dXJue3g6blt0K1wiWFwiXSx5Om5bdCtcIllcIl19fWZ1bmN0aW9uIEdlKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PVwicGFnZVwiKSx7eDplW3QrXCJYXCJdLHk6ZVt0K1wiWVwiXX19ZnVuY3Rpb24gcWUoZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9XCJwYWdlXCIpLHtwb2ludDpVZShlKT96ZShlLHQpOkdlKGUsdCl9fXZhciBZZT1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PSExKTt2YXIgbixyPWZ1bmN0aW9uKHQpe3JldHVybiBlKHQscWUodCkpfTtyZXR1cm4gdD8obj1yLGZ1bmN0aW9uKGUpe3ZhciB0PWUgaW5zdGFuY2VvZiBNb3VzZUV2ZW50OyghdHx8dCYmMD09PWUuYnV0dG9uKSYmbihlKX0pOnJ9LEtlPWZ1bmN0aW9uKCl7cmV0dXJuIGsmJm51bGw9PT13aW5kb3cub25wb2ludGVyZG93bn0sWGU9ZnVuY3Rpb24oKXtyZXR1cm4gayYmbnVsbD09PXdpbmRvdy5vbnRvdWNoc3RhcnR9LEplPWZ1bmN0aW9uKCl7cmV0dXJuIGsmJm51bGw9PT13aW5kb3cub25tb3VzZWRvd259LFFlPXtwb2ludGVyZG93bjpcIm1vdXNlZG93blwiLHBvaW50ZXJtb3ZlOlwibW91c2Vtb3ZlXCIscG9pbnRlcnVwOlwibW91c2V1cFwiLHBvaW50ZXJjYW5jZWw6XCJtb3VzZWNhbmNlbFwiLHBvaW50ZXJvdmVyOlwibW91c2VvdmVyXCIscG9pbnRlcm91dDpcIm1vdXNlb3V0XCIscG9pbnRlcmVudGVyOlwibW91c2VlbnRlclwiLHBvaW50ZXJsZWF2ZTpcIm1vdXNlbGVhdmVcIn0sZXQ9e3BvaW50ZXJkb3duOlwidG91Y2hzdGFydFwiLHBvaW50ZXJtb3ZlOlwidG91Y2htb3ZlXCIscG9pbnRlcnVwOlwidG91Y2hlbmRcIixwb2ludGVyY2FuY2VsOlwidG91Y2hjYW5jZWxcIn07ZnVuY3Rpb24gdHQoZSl7cmV0dXJuIEtlKCk/ZTpYZSgpP2V0W2VdOkplKCk/UWVbZV06ZX1mdW5jdGlvbiBudChlLHQsbixyKXtyZXR1cm4gJGUoZSx0dCh0KSxZZShuLFwicG9pbnRlcmRvd25cIj09PXQpLHIpfWZ1bmN0aW9uIHJ0KGUsdCxuLHIpe3JldHVybiBOZShlLHR0KHQpLG4mJlllKG4sXCJwb2ludGVyZG93blwiPT09dCkscil9ZnVuY3Rpb24gb3QoZSl7dmFyIHQ9bnVsbDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXQmJih0PWUsZnVuY3Rpb24oKXt0PW51bGx9KX19dmFyIGl0PW90KFwiZHJhZ0hvcml6b250YWxcIiksYXQ9b3QoXCJkcmFnVmVydGljYWxcIik7ZnVuY3Rpb24gbHQoZSl7dmFyIHQ9ITE7aWYoXCJ5XCI9PT1lKXQ9YXQoKTtlbHNlIGlmKFwieFwiPT09ZSl0PWl0KCk7ZWxzZXt2YXIgbj1pdCgpLHI9YXQoKTtuJiZyP3Q9ZnVuY3Rpb24oKXtuKCkscigpfToobiYmbigpLHImJnIoKSl9cmV0dXJuIHR9ZnVuY3Rpb24gc3QoKXt2YXIgZT1sdCghMCk7cmV0dXJuIWV8fChlKCksITEpfWZ1bmN0aW9uIGN0KGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24ocixvKXt2YXIgaTtGZShyKSYmIXN0KCkmJihudWxsPT1ufHxuKHIsbyksbnVsbD09PShpPWUuYW5pbWF0aW9uU3RhdGUpfHx2b2lkIDA9PT1pfHxpLnNldEFjdGl2ZShCZS5Ib3Zlcix0KSl9fXZhciB1dD1mdW5jdGlvbihlLHQpe3JldHVybiEhdCYmKGU9PT10fHx1dChlLHQucGFyZW50RWxlbWVudCkpfTtmdW5jdGlvbiBmdChlKXtyZXR1cm4gby51c2VFZmZlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUoKX19KSxbXSl9dmFyIGR0PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSh0KSxudWxsfX0scHQ9e3RhcDpkdCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vblRhcCxuPWUub25UYXBTdGFydCxyPWUub25UYXBDYW5jZWwsaT1lLndoaWxlVGFwLGE9ZS52aXN1YWxFbGVtZW50LHM9dHx8bnx8cnx8aSxjPW8udXNlUmVmKCExKSx1PW8udXNlUmVmKG51bGwpO2Z1bmN0aW9uIGYoKXt2YXIgZTtudWxsPT09KGU9dS5jdXJyZW50KXx8dm9pZCAwPT09ZXx8ZS5jYWxsKHUpLHUuY3VycmVudD1udWxsfWZ1bmN0aW9uIGQoKXt2YXIgZTtyZXR1cm4gZigpLGMuY3VycmVudD0hMSxudWxsPT09KGU9YS5hbmltYXRpb25TdGF0ZSl8fHZvaWQgMD09PWV8fGUuc2V0QWN0aXZlKEJlLlRhcCwhMSksIXN0KCl9ZnVuY3Rpb24gcChlLG4pe2QoKSYmKHV0KGEuZ2V0SW5zdGFuY2UoKSxlLnRhcmdldCk/bnVsbD09dHx8dChlLG4pOm51bGw9PXJ8fHIoZSxuKSl9ZnVuY3Rpb24gaChlLHQpe2QoKSYmKG51bGw9PXJ8fHIoZSx0KSl9cnQoYSxcInBvaW50ZXJkb3duXCIscz9mdW5jdGlvbihlLHQpe3ZhciByO2YoKSxjLmN1cnJlbnR8fChjLmN1cnJlbnQ9ITAsdS5jdXJyZW50PWwucGlwZShudCh3aW5kb3csXCJwb2ludGVydXBcIixwKSxudCh3aW5kb3csXCJwb2ludGVyY2FuY2VsXCIsaCkpLG51bGw9PW58fG4oZSx0KSxudWxsPT09KHI9YS5hbmltYXRpb25TdGF0ZSl8fHZvaWQgMD09PXJ8fHIuc2V0QWN0aXZlKEJlLlRhcCwhMCkpfTp2b2lkIDApLGZ0KGYpfSkpLGZvY3VzOmR0KChmdW5jdGlvbihlKXt2YXIgdD1lLndoaWxlRm9jdXMsbj1lLnZpc3VhbEVsZW1lbnQ7TmUobixcImZvY3VzXCIsdD9mdW5jdGlvbigpe3ZhciBlO251bGw9PT0oZT1uLmFuaW1hdGlvblN0YXRlKXx8dm9pZCAwPT09ZXx8ZS5zZXRBY3RpdmUoQmUuRm9jdXMsITApfTp2b2lkIDApLE5lKG4sXCJibHVyXCIsdD9mdW5jdGlvbigpe3ZhciBlO251bGw9PT0oZT1uLmFuaW1hdGlvblN0YXRlKXx8dm9pZCAwPT09ZXx8ZS5zZXRBY3RpdmUoQmUuRm9jdXMsITEpfTp2b2lkIDApfSkpLGhvdmVyOmR0KChmdW5jdGlvbihlKXt2YXIgdD1lLm9uSG92ZXJTdGFydCxuPWUub25Ib3ZlckVuZCxyPWUud2hpbGVIb3ZlcixvPWUudmlzdWFsRWxlbWVudDtydChvLFwicG9pbnRlcmVudGVyXCIsdHx8cj9jdChvLCEwLHQpOnZvaWQgMCkscnQobyxcInBvaW50ZXJsZWF2ZVwiLG58fHI/Y3QobywhMSxuKTp2b2lkIDApfSkpfTtmdW5jdGlvbiBodChlLHQpe2lmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiExO3ZhciBuPXQubGVuZ3RoO2lmKG4hPT1lLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIHI9MDtyPG47cisrKWlmKHRbcl0hPT1lW3JdKXJldHVybiExO3JldHVybiEwfXZhciBndD1mdW5jdGlvbihlKXtyZXR1cm4gMWUzKmV9LHZ0PXtsaW5lYXI6bC5saW5lYXIsZWFzZUluOmwuZWFzZUluLGVhc2VJbk91dDpsLmVhc2VJbk91dCxlYXNlT3V0OmwuZWFzZU91dCxjaXJjSW46bC5jaXJjSW4sY2lyY0luT3V0OmwuY2lyY0luT3V0LGNpcmNPdXQ6bC5jaXJjT3V0LGJhY2tJbjpsLmJhY2tJbixiYWNrSW5PdXQ6bC5iYWNrSW5PdXQsYmFja091dDpsLmJhY2tPdXQsYW50aWNpcGF0ZTpsLmFudGljaXBhdGUsYm91bmNlSW46bC5ib3VuY2VJbixib3VuY2VJbk91dDpsLmJvdW5jZUluT3V0LGJvdW5jZU91dDpsLmJvdW5jZU91dH0sbXQ9ZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSl7aS5pbnZhcmlhbnQoND09PWUubGVuZ3RoLFwiQ3ViaWMgYmV6aWVyIGFycmF5cyBtdXN0IGNvbnRhaW4gZm91ciBudW1lcmljYWwgdmFsdWVzLlwiKTt2YXIgdD1yLl9fcmVhZChlLDQpLG49dFswXSxvPXRbMV0sYT10WzJdLHM9dFszXTtyZXR1cm4gbC5jdWJpY0JlemllcihuLG8sYSxzKX1yZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZT8oaS5pbnZhcmlhbnQodm9pZCAwIT09dnRbZV0sXCJJbnZhbGlkIGVhc2luZyB0eXBlICdcIitlK1wiJ1wiKSx2dFtlXSk6ZX0sQ3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSkmJlwibnVtYmVyXCIhPXR5cGVvZiBlWzBdfSx5dD1mdW5jdGlvbihlLHQpe3JldHVybiEoXCJ6SW5kZXhcIj09PWV8fFwibnVtYmVyXCIhPXR5cGVvZiB0JiYhQXJyYXkuaXNBcnJheSh0KSYmKFwic3RyaW5nXCIhPXR5cGVvZiB0fHwhYS5jb21wbGV4LnRlc3QodCl8fHQuc3RhcnRzV2l0aChcInVybChcIikpKX0sd3Q9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTpcInNwcmluZ1wiLHN0aWZmbmVzczo1MDAsZGFtcGluZzoyNSxyZXN0RGVsdGE6LjUscmVzdFNwZWVkOjEwfX0sYnQ9ZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6XCJzcHJpbmdcIixzdGlmZm5lc3M6NTUwLGRhbXBpbmc6MD09PWU/MipNYXRoLnNxcnQoNTUwKTozMCxyZXN0RGVsdGE6LjAxLHJlc3RTcGVlZDoxMH19LHh0PWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6XCJrZXlmcmFtZXNcIixlYXNlOlwibGluZWFyXCIsZHVyYXRpb246LjN9fSxfdD1mdW5jdGlvbihlKXtyZXR1cm57dHlwZTpcImtleWZyYW1lc1wiLGR1cmF0aW9uOi44LHZhbHVlczplfX0sT3Q9e3g6d3QseTp3dCx6Ond0LHJvdGF0ZTp3dCxyb3RhdGVYOnd0LHJvdGF0ZVk6d3Qscm90YXRlWjp3dCxzY2FsZVg6YnQsc2NhbGVZOmJ0LHNjYWxlOmJ0LG9wYWNpdHk6eHQsYmFja2dyb3VuZENvbG9yOnh0LGNvbG9yOnh0LGRlZmF1bHQ6YnR9LEx0PWZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuIG49a2UodCk/X3Q6T3RbZV18fE90LmRlZmF1bHQsci5fX2Fzc2lnbih7dG86dH0sbih0KSl9LEV0PXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxpZSkse2NvbG9yOmEuY29sb3IsYmFja2dyb3VuZENvbG9yOmEuY29sb3Isb3V0bGluZUNvbG9yOmEuY29sb3IsZmlsbDphLmNvbG9yLHN0cm9rZTphLmNvbG9yLGJvcmRlckNvbG9yOmEuY29sb3IsYm9yZGVyVG9wQ29sb3I6YS5jb2xvcixib3JkZXJSaWdodENvbG9yOmEuY29sb3IsYm9yZGVyQm90dG9tQ29sb3I6YS5jb2xvcixib3JkZXJMZWZ0Q29sb3I6YS5jb2xvcixmaWx0ZXI6YS5maWx0ZXIsV2Via2l0RmlsdGVyOmEuZmlsdGVyfSksU3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0W2VdfTtmdW5jdGlvbiBqdChlLHQpe3ZhciBuLHI9U3QoZSk7cmV0dXJuIHIhPT1hLmZpbHRlciYmKHI9YS5jb21wbGV4KSxudWxsPT09KG49ci5nZXRBbmltYXRhYmxlTm9uZSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uY2FsbChyLHQpfXZhciBNdD0hMTtmdW5jdGlvbiBrdChlKXtyZXR1cm4gMD09PWV8fFwic3RyaW5nXCI9PXR5cGVvZiBlJiYwPT09cGFyc2VGbG9hdChlKSYmLTE9PT1lLmluZGV4T2YoXCIgXCIpfWZ1bmN0aW9uIFJ0KGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlPzA6anQoXCJcIixlKX1mdW5jdGlvbiBQdChlLHQpe3JldHVybiBlW3RdfHxlLmRlZmF1bHR8fGV9ZnVuY3Rpb24gSXQoZSx0LG4sbyl7cmV0dXJuIHZvaWQgMD09PW8mJihvPXt9KSx0LnN0YXJ0KChmdW5jdGlvbihhKXt2YXIgcyxjLHU9ZnVuY3Rpb24oZSx0LG4sbyxhKXt2YXIgcyxjPVB0KG8sZSksdT1udWxsIT09KHM9Yy5mcm9tKSYmdm9pZCAwIT09cz9zOnQuZ2V0KCksZj15dChlLG4pO1wibm9uZVwiPT09dSYmZiYmXCJzdHJpbmdcIj09dHlwZW9mIG4/dT1qdChlLG4pOmt0KHUpJiZcInN0cmluZ1wiPT10eXBlb2Ygbj91PVJ0KG4pOiFBcnJheS5pc0FycmF5KG4pJiZrdChuKSYmXCJzdHJpbmdcIj09dHlwZW9mIHUmJihuPVJ0KHUpKTt2YXIgZD15dChlLHUpO3JldHVybiBpLndhcm5pbmcoZD09PWYsXCJZb3UgYXJlIHRyeWluZyB0byBhbmltYXRlIFwiK2UrJyBmcm9tIFwiJyt1KydcIiB0byBcIicrbisnXCIuICcrdStcIiBpcyBub3QgYW4gYW5pbWF0YWJsZSB2YWx1ZSAtIHRvIGVuYWJsZSB0aGlzIGFuaW1hdGlvbiBzZXQgXCIrdStcIiB0byBhIHZhbHVlIGFuaW1hdGFibGUgdG8gXCIrbitcIiB2aWEgdGhlIGBzdHlsZWAgcHJvcGVydHkuXCIpLGQmJmYmJiExIT09Yy50eXBlP2Z1bmN0aW9uKCl7dmFyIG89e2Zyb206dSx0bzpuLHZlbG9jaXR5OnQuZ2V0VmVsb2NpdHkoKSxvbkNvbXBsZXRlOmEsb25VcGRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHQuc2V0KGUpfX07cmV0dXJuXCJpbmVydGlhXCI9PT1jLnR5cGV8fFwiZGVjYXlcIj09PWMudHlwZT9sLmluZXJ0aWEoci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LG8pLGMpKTpsLmFuaW1hdGUoci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgbztyZXR1cm4gQXJyYXkuaXNBcnJheSh0LnRvKSYmKG51bGwhPT0obz1lLmR1cmF0aW9uKSYmdm9pZCAwIT09b3x8KGUuZHVyYXRpb249LjgpKSxmdW5jdGlvbihlKXtBcnJheS5pc0FycmF5KGUudG8pJiZudWxsPT09ZS50b1swXSYmKGUudG89ci5fX3NwcmVhZEFycmF5KFtdLHIuX19yZWFkKGUudG8pKSxlLnRvWzBdPWUuZnJvbSl9KHQpLGZ1bmN0aW9uKGUpe2Uud2hlbixlLmRlbGF5LGUuZGVsYXlDaGlsZHJlbixlLnN0YWdnZXJDaGlsZHJlbixlLnN0YWdnZXJEaXJlY3Rpb24sZS5yZXBlYXQsZS5yZXBlYXRUeXBlLGUucmVwZWF0RGVsYXksZS5mcm9tO3ZhciB0PXIuX19yZXN0KGUsW1wid2hlblwiLFwiZGVsYXlcIixcImRlbGF5Q2hpbGRyZW5cIixcInN0YWdnZXJDaGlsZHJlblwiLFwic3RhZ2dlckRpcmVjdGlvblwiLFwicmVwZWF0XCIsXCJyZXBlYXRUeXBlXCIsXCJyZXBlYXREZWxheVwiLFwiZnJvbVwiXSk7cmV0dXJuISFPYmplY3Qua2V5cyh0KS5sZW5ndGh9KGUpfHwoZT1yLl9fYXNzaWduKHIuX19hc3NpZ24oe30sZSksTHQobix0LnRvKSkpLHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSx0KSxmdW5jdGlvbihlKXt2YXIgdD1lLmVhc2Usbj1lLnRpbWVzLG89ZS55b3lvLGE9ZS5mbGlwLGw9ZS5sb29wLHM9ci5fX3Jlc3QoZSxbXCJlYXNlXCIsXCJ0aW1lc1wiLFwieW95b1wiLFwiZmxpcFwiLFwibG9vcFwiXSksYz1yLl9fYXNzaWduKHt9LHMpO3JldHVybiBuJiYoYy5vZmZzZXQ9bikscy5kdXJhdGlvbiYmKGMuZHVyYXRpb249Z3Qocy5kdXJhdGlvbikpLHMucmVwZWF0RGVsYXkmJihjLnJlcGVhdERlbGF5PWd0KHMucmVwZWF0RGVsYXkpKSx0JiYoYy5lYXNlPUN0KHQpP3QubWFwKG10KTptdCh0KSksXCJ0d2VlblwiPT09cy50eXBlJiYoYy50eXBlPVwia2V5ZnJhbWVzXCIpLChvfHxsfHxhKSYmKGkud2FybmluZyghTXQsXCJ5b3lvLCBsb29wIGFuZCBmbGlwIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIEFQSS4gUmVwbGFjZSB3aXRoIHJlcGVhdCBhbmQgcmVwZWF0VHlwZSBvcHRpb25zLlwiKSxNdD0hMCxvP2MucmVwZWF0VHlwZT1cInJldmVyc2VcIjpsP2MucmVwZWF0VHlwZT1cImxvb3BcIjphJiYoYy5yZXBlYXRUeXBlPVwibWlycm9yXCIpLGMucmVwZWF0PWx8fG98fGF8fHMucmVwZWF0KSxcInNwcmluZ1wiIT09cy50eXBlJiYoYy50eXBlPVwia2V5ZnJhbWVzXCIpLGN9KGUpKX0oYyxvLGUpKSx7b25VcGRhdGU6ZnVuY3Rpb24oZSl7dmFyIHQ7by5vblVwZGF0ZShlKSxudWxsPT09KHQ9Yy5vblVwZGF0ZSl8fHZvaWQgMD09PXR8fHQuY2FsbChjLGUpfSxvbkNvbXBsZXRlOmZ1bmN0aW9uKCl7dmFyIGU7by5vbkNvbXBsZXRlKCksbnVsbD09PShlPWMub25Db21wbGV0ZSl8fHZvaWQgMD09PWV8fGUuY2FsbChjKX19KSl9OmZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHQuc2V0KG4pLGEoKSxudWxsPT09KGU9bnVsbD09Yz92b2lkIDA6Yy5vbkNvbXBsZXRlKXx8dm9pZCAwPT09ZXx8ZS5jYWxsKGMpLHtzdG9wOmZ1bmN0aW9uKCl7fX19fShlLHQsbixvLGEpLGY9ZnVuY3Rpb24oZSx0KXt2YXIgbjtyZXR1cm4gbnVsbCE9PShuPShQdChlLHQpfHx7fSkuZGVsYXkpJiZ2b2lkIDAhPT1uP246MH0obyxlKSxkPWZ1bmN0aW9uKCl7cmV0dXJuIGM9dSgpfTtyZXR1cm4gZj9zPXNldFRpbWVvdXQoZCxndChmKSk6ZCgpLGZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHMpLG51bGw9PWN8fGMuc3RvcCgpfX0pKX1mdW5jdGlvbiBBdChlLHQpey0xPT09ZS5pbmRleE9mKHQpJiZlLnB1c2godCl9ZnVuY3Rpb24gVHQoZSx0KXt2YXIgbj1lLmluZGV4T2YodCk7bj4tMSYmZS5zcGxpY2UobiwxKX12YXIgSHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5zdWJzY3JpcHRpb25zPVtdfXJldHVybiBlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztyZXR1cm4gQXQodGhpcy5zdWJzY3JpcHRpb25zLGUpLGZ1bmN0aW9uKCl7cmV0dXJuIFR0KHQuc3Vic2NyaXB0aW9ucyxlKX19LGUucHJvdG90eXBlLm5vdGlmeT1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5zdWJzY3JpcHRpb25zLmxlbmd0aDtpZihyKWlmKDE9PT1yKXRoaXMuc3Vic2NyaXB0aW9uc1swXShlLHQsbik7ZWxzZSBmb3IodmFyIG89MDtvPHI7bysrKXt2YXIgaT10aGlzLnN1YnNjcmlwdGlvbnNbb107aSYmaShlLHQsbil9fSxlLnByb3RvdHlwZS5nZXRTaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3Vic2NyaXB0aW9ucy5sZW5ndGh9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zdWJzY3JpcHRpb25zLmxlbmd0aD0wfSxlfSgpLEJ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgdCxuPXRoaXM7dGhpcy50aW1lRGVsdGE9MCx0aGlzLmxhc3RVcGRhdGVkPTAsdGhpcy51cGRhdGVTdWJzY3JpYmVycz1uZXcgSHQsdGhpcy52ZWxvY2l0eVVwZGF0ZVN1YnNjcmliZXJzPW5ldyBIdCx0aGlzLnJlbmRlclN1YnNjcmliZXJzPW5ldyBIdCx0aGlzLmNhblRyYWNrVmVsb2NpdHk9ITEsdGhpcy51cGRhdGVBbmROb3RpZnk9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD0hMCksbi5wcmV2PW4uY3VycmVudCxuLmN1cnJlbnQ9ZTt2YXIgcj1zLmdldEZyYW1lRGF0YSgpLG89ci5kZWx0YSxpPXIudGltZXN0YW1wO24ubGFzdFVwZGF0ZWQhPT1pJiYobi50aW1lRGVsdGE9byxuLmxhc3RVcGRhdGVkPWksZC5kZWZhdWx0LnBvc3RSZW5kZXIobi5zY2hlZHVsZVZlbG9jaXR5Q2hlY2spKSxuLnByZXYhPT1uLmN1cnJlbnQmJm4udXBkYXRlU3Vic2NyaWJlcnMubm90aWZ5KG4uY3VycmVudCksbi52ZWxvY2l0eVVwZGF0ZVN1YnNjcmliZXJzLmdldFNpemUoKSYmbi52ZWxvY2l0eVVwZGF0ZVN1YnNjcmliZXJzLm5vdGlmeShuLmdldFZlbG9jaXR5KCkpLHQmJm4ucmVuZGVyU3Vic2NyaWJlcnMubm90aWZ5KG4uY3VycmVudCl9LHRoaXMuc2NoZWR1bGVWZWxvY2l0eUNoZWNrPWZ1bmN0aW9uKCl7cmV0dXJuIGQuZGVmYXVsdC5wb3N0UmVuZGVyKG4udmVsb2NpdHlDaGVjayl9LHRoaXMudmVsb2NpdHlDaGVjaz1mdW5jdGlvbihlKXtlLnRpbWVzdGFtcCE9PW4ubGFzdFVwZGF0ZWQmJihuLnByZXY9bi5jdXJyZW50LG4udmVsb2NpdHlVcGRhdGVTdWJzY3JpYmVycy5ub3RpZnkobi5nZXRWZWxvY2l0eSgpKSl9LHRoaXMuaGFzQW5pbWF0ZWQ9ITEsdGhpcy5wcmV2PXRoaXMuY3VycmVudD1lLHRoaXMuY2FuVHJhY2tWZWxvY2l0eT0odD10aGlzLmN1cnJlbnQsIWlzTmFOKHBhcnNlRmxvYXQodCkpKX1yZXR1cm4gZS5wcm90b3R5cGUub25DaGFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudXBkYXRlU3Vic2NyaWJlcnMuYWRkKGUpfSxlLnByb3RvdHlwZS5jbGVhckxpc3RlbmVycz1mdW5jdGlvbigpe3RoaXMudXBkYXRlU3Vic2NyaWJlcnMuY2xlYXIoKX0sZS5wcm90b3R5cGUub25SZW5kZXJSZXF1ZXN0PWZ1bmN0aW9uKGUpe3JldHVybiBlKHRoaXMuZ2V0KCkpLHRoaXMucmVuZGVyU3Vic2NyaWJlcnMuYWRkKGUpfSxlLnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24oZSl7dGhpcy5wYXNzaXZlRWZmZWN0PWV9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PSEwKSx0JiZ0aGlzLnBhc3NpdmVFZmZlY3Q/dGhpcy5wYXNzaXZlRWZmZWN0KGUsdGhpcy51cGRhdGVBbmROb3RpZnkpOnRoaXMudXBkYXRlQW5kTm90aWZ5KGUsdCl9LGUucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LGUucHJvdG90eXBlLmdldFByZXZpb3VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldn0sZS5wcm90b3R5cGUuZ2V0VmVsb2NpdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW5UcmFja1ZlbG9jaXR5P2wudmVsb2NpdHlQZXJTZWNvbmQocGFyc2VGbG9hdCh0aGlzLmN1cnJlbnQpLXBhcnNlRmxvYXQodGhpcy5wcmV2KSx0aGlzLnRpbWVEZWx0YSk6MH0sZS5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5zdG9wKCksbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4pe3QuaGFzQW5pbWF0ZWQ9ITAsdC5zdG9wQW5pbWF0aW9uPWUobil9KSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gdC5jbGVhckFuaW1hdGlvbigpfSkpfSxlLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7dGhpcy5zdG9wQW5pbWF0aW9uJiZ0aGlzLnN0b3BBbmltYXRpb24oKSx0aGlzLmNsZWFyQW5pbWF0aW9uKCl9LGUucHJvdG90eXBlLmlzQW5pbWF0aW5nPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLnN0b3BBbmltYXRpb259LGUucHJvdG90eXBlLmNsZWFyQW5pbWF0aW9uPWZ1bmN0aW9uKCl7dGhpcy5zdG9wQW5pbWF0aW9uPW51bGx9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnVwZGF0ZVN1YnNjcmliZXJzLmNsZWFyKCksdGhpcy5yZW5kZXJTdWJzY3JpYmVycy5jbGVhcigpLHRoaXMuc3RvcCgpfSxlfSgpO2Z1bmN0aW9uIFZ0KGUpe3JldHVybiBuZXcgQnQoZSl9dmFyIER0PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdC50ZXN0KGUpfX0sWnQ9W2EubnVtYmVyLGEucHgsYS5wZXJjZW50LGEuZGVncmVlcyxhLnZ3LGEudmgse3Rlc3Q6ZnVuY3Rpb24oZSl7cmV0dXJuXCJhdXRvXCI9PT1lfSxwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gZX19XSwkdD1mdW5jdGlvbihlKXtyZXR1cm4gWnQuZmluZChEdChlKSl9LE50PXIuX19zcHJlYWRBcnJheShyLl9fc3ByZWFkQXJyYXkoW10sci5fX3JlYWQoWnQpKSxbYS5jb2xvcixhLmNvbXBsZXhdKTtmdW5jdGlvbiBGdChlLHQsbil7ZS5oYXNWYWx1ZSh0KT9lLmdldFZhbHVlKHQpLnNldChuKTplLmFkZFZhbHVlKHQsVnQobikpfWZ1bmN0aW9uIFV0KGUsdCl7dmFyIG49SChlLHQpLG89bj9lLm1ha2VUYXJnZXRBbmltYXRhYmxlKG4sITEpOnt9LGk9by50cmFuc2l0aW9uRW5kLGE9dm9pZCAwPT09aT97fTppO28udHJhbnNpdGlvbjt2YXIgbD1yLl9fcmVzdChvLFtcInRyYW5zaXRpb25FbmRcIixcInRyYW5zaXRpb25cIl0pO2Zvcih2YXIgcyBpbiBsPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxsKSxhKSlGdChlLHMsUGUobFtzXSkpfWZ1bmN0aW9uIFd0KGUsdCl7ci5fX3NwcmVhZEFycmF5KFtdLHIuX19yZWFkKHQpKS5yZXZlcnNlKCkuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIHIsbz1lLmdldFZhcmlhbnQobik7byYmVXQoZSxvKSxudWxsPT09KHI9ZS52YXJpYW50Q2hpbGRyZW4pfHx2b2lkIDA9PT1yfHxyLmZvckVhY2goKGZ1bmN0aW9uKGUpe1d0KGUsdCl9KSl9KSl9ZnVuY3Rpb24genQoZSx0LG4pe3ZhciByLG8saSxsLHMsYz1PYmplY3Qua2V5cyh0KS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiFlLmhhc1ZhbHVlKHQpfSkpLHU9Yy5sZW5ndGg7aWYodSlmb3IodmFyIGY9MDtmPHU7ZisrKXt2YXIgZD1jW2ZdLHA9dFtkXSxoPW51bGw7QXJyYXkuaXNBcnJheShwKSYmKGg9cFswXSksbnVsbD09PWgmJihoPW51bGwhPT0obz1udWxsIT09KHI9bltkXSkmJnZvaWQgMCE9PXI/cjplLnJlYWRWYWx1ZShkKSkmJnZvaWQgMCE9PW8/bzp0W2RdKSxudWxsIT1oJiYoXCJzdHJpbmdcIj09dHlwZW9mIGgmJi9eXFwtP1xcZCpcXC4/XFxkKyQvLnRlc3QoaCk/aD1wYXJzZUZsb2F0KGgpOihzPWgsIU50LmZpbmQoRHQocykpJiZhLmNvbXBsZXgudGVzdChwKSYmKGg9anQoZCxwKSkpLGUuYWRkVmFsdWUoZCxWdChoKSksbnVsbCE9PShpPShsPW4pW2RdKSYmdm9pZCAwIT09aXx8KGxbZF09aCksZS5zZXRCYXNlVGFyZ2V0KGQsaCkpfX1mdW5jdGlvbiBHdChlLHQpe2lmKHQpcmV0dXJuKHRbZV18fHQuZGVmYXVsdHx8dCkuZnJvbX1mdW5jdGlvbiBxdChlLHQsbil7dmFyIHIsbyxpPXt9O2Zvcih2YXIgYSBpbiBlKWlbYV09bnVsbCE9PShyPUd0KGEsdCkpJiZ2b2lkIDAhPT1yP3I6bnVsbD09PShvPW4uZ2V0VmFsdWUoYSkpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLmdldCgpO3JldHVybiBpfWZ1bmN0aW9uIFl0KGUsdCxuKXt2YXIgcjtpZih2b2lkIDA9PT1uJiYobj17fSksZS5ub3RpZnlBbmltYXRpb25TdGFydCgpLEFycmF5LmlzQXJyYXkodCkpe3ZhciBvPXQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gS3QoZSx0LG4pfSkpO3I9UHJvbWlzZS5hbGwobyl9ZWxzZSBpZihcInN0cmluZ1wiPT10eXBlb2YgdClyPUt0KGUsdCxuKTtlbHNle3ZhciBpPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/SChlLHQsbi5jdXN0b20pOnQ7cj1YdChlLGksbil9cmV0dXJuIHIudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gZS5ub3RpZnlBbmltYXRpb25Db21wbGV0ZSh0KX0pKX1mdW5jdGlvbiBLdChlLHQsbil7dmFyIG87dm9pZCAwPT09biYmKG49e30pO3ZhciBpPUgoZSx0LG4uY3VzdG9tKSxhPShpfHx7fSkudHJhbnNpdGlvbixsPXZvaWQgMD09PWE/ZS5nZXREZWZhdWx0VHJhbnNpdGlvbigpfHx7fTphO24udHJhbnNpdGlvbk92ZXJyaWRlJiYobD1uLnRyYW5zaXRpb25PdmVycmlkZSk7dmFyIHM9aT9mdW5jdGlvbigpe3JldHVybiBYdChlLGksbil9OmZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfSxjPShudWxsPT09KG89ZS52YXJpYW50Q2hpbGRyZW4pfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLnNpemUpP2Z1bmN0aW9uKG8pe3ZvaWQgMD09PW8mJihvPTApO3ZhciBpPWwuZGVsYXlDaGlsZHJlbixhPXZvaWQgMD09PWk/MDppLHM9bC5zdGFnZ2VyQ2hpbGRyZW4sYz1sLnN0YWdnZXJEaXJlY3Rpb247cmV0dXJuIGZ1bmN0aW9uKGUsdCxuLG8saSxhKXt2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1vJiYobz0wKSx2b2lkIDA9PT1pJiYoaT0xKTt2YXIgbD1bXSxzPShlLnZhcmlhbnRDaGlsZHJlbi5zaXplLTEpKm8sYz0xPT09aT9mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9MCksZSpvfTpmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9MCkscy1lKm99O3JldHVybiBBcnJheS5mcm9tKGUudmFyaWFudENoaWxkcmVuKS5zb3J0KEp0KS5mb3JFYWNoKChmdW5jdGlvbihlLG8pe2wucHVzaChLdChlLHQsci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGEpLHtkZWxheTpuK2Mobyl9KSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gZS5ub3RpZnlBbmltYXRpb25Db21wbGV0ZSh0KX0pKSl9KSksUHJvbWlzZS5hbGwobCl9KGUsdCxhK28scyxjLG4pfTpmdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUoKX0sdT1sLndoZW47aWYodSl7dmFyIGY9ci5fX3JlYWQoXCJiZWZvcmVDaGlsZHJlblwiPT09dT9bcyxjXTpbYyxzXSwyKSxkPWZbMF0scD1mWzFdO3JldHVybiBkKCkudGhlbihwKX1yZXR1cm4gUHJvbWlzZS5hbGwoW3MoKSxjKG4uZGVsYXkpXSl9ZnVuY3Rpb24gWHQoZSx0LG4pe3ZhciBvLGk9dm9pZCAwPT09bj97fTpuLGE9aS5kZWxheSxsPXZvaWQgMD09PWE/MDphLHM9aS50cmFuc2l0aW9uT3ZlcnJpZGUsYz1pLnR5cGUsdT1lLm1ha2VUYXJnZXRBbmltYXRhYmxlKHQpLGY9dS50cmFuc2l0aW9uLGQ9dm9pZCAwPT09Zj9lLmdldERlZmF1bHRUcmFuc2l0aW9uKCk6ZixwPXUudHJhbnNpdGlvbkVuZCxoPXIuX19yZXN0KHUsW1widHJhbnNpdGlvblwiLFwidHJhbnNpdGlvbkVuZFwiXSk7cyYmKGQ9cyk7dmFyIGc9W10sdj1jJiYobnVsbD09PShvPWUuYW5pbWF0aW9uU3RhdGUpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLmdldFN0YXRlKClbY10pO2Zvcih2YXIgbSBpbiBoKXt2YXIgQz1lLmdldFZhbHVlKG0pLHk9aFttXTtpZighKCFDfHx2b2lkIDA9PT15fHx2JiZRdCh2LG0pKSl7dmFyIHc9SXQobSxDLHksci5fX2Fzc2lnbih7ZGVsYXk6bH0sZCkpO2cucHVzaCh3KX19cmV0dXJuIFByb21pc2UuYWxsKGcpLnRoZW4oKGZ1bmN0aW9uKCl7cCYmVXQoZSxwKX0pKX1mdW5jdGlvbiBKdChlLHQpe3JldHVybiBlLnNvcnROb2RlUG9zaXRpb24odCl9ZnVuY3Rpb24gUXQoZSx0KXt2YXIgbj1lLnByb3RlY3RlZEtleXMscj1lLm5lZWRzQW5pbWF0aW5nLG89bi5oYXNPd25Qcm9wZXJ0eSh0KSYmITAhPT1yW3RdO3JldHVybiByW3RdPSExLG99dmFyIGVuPVtCZS5BbmltYXRlLEJlLkhvdmVyLEJlLlRhcCxCZS5EcmFnLEJlLkZvY3VzLEJlLkV4aXRdLHRuPXIuX19zcHJlYWRBcnJheShbXSxyLl9fcmVhZChlbikpLnJldmVyc2UoKSxubj1lbi5sZW5ndGg7ZnVuY3Rpb24gcm4oZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSExKSx7aXNBY3RpdmU6ZSxwcm90ZWN0ZWRLZXlzOnt9LG5lZWRzQW5pbWF0aW5nOnt9LHByZXZSZXNvbHZlZFZhbHVlczp7fX19dmFyIG9uPXthbmltYXRpb246ZHQoKGZ1bmN0aW9uKGUpe3ZhciB0PWUudmlzdWFsRWxlbWVudCxuPWUuYW5pbWF0ZTt0LmFuaW1hdGlvblN0YXRlfHwodC5hbmltYXRpb25TdGF0ZT1mdW5jdGlvbihlKXt2YXIgdCxuPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gUHJvbWlzZS5hbGwodC5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBuPXQuYW5pbWF0aW9uLHI9dC5vcHRpb25zO3JldHVybiBZdChlLG4scil9KSkpfX0oZSksbz0oKHQ9e30pW0JlLkFuaW1hdGVdPXJuKCEwKSx0W0JlLkhvdmVyXT1ybigpLHRbQmUuVGFwXT1ybigpLHRbQmUuRHJhZ109cm4oKSx0W0JlLkZvY3VzXT1ybigpLHRbQmUuRXhpdF09cm4oKSx0KSxpPXt9LGE9ITAsbD1mdW5jdGlvbih0LG4pe3ZhciBvPUgoZSxuKTtpZihvKXtvLnRyYW5zaXRpb247dmFyIGk9by50cmFuc2l0aW9uRW5kLGE9ci5fX3Jlc3QobyxbXCJ0cmFuc2l0aW9uXCIsXCJ0cmFuc2l0aW9uRW5kXCJdKTt0PXIuX19hc3NpZ24oci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LHQpLGEpLGkpfXJldHVybiB0fTtmdW5jdGlvbiBzKHQscyl7Zm9yKHZhciBjLHU9ZS5nZXRQcm9wcygpLGY9ZS5nZXRWYXJpYW50Q29udGV4dCghMCl8fHt9LGQ9W10scD1uZXcgU2V0LGg9e30sZz0xLzAsdj1mdW5jdGlvbihuKXt2YXIgaT10bltuXSx2PW9baV0sbT1udWxsIT09KGM9dVtpXSkmJnZvaWQgMCE9PWM/YzpmW2ldLEM9QShtKSx5PWk9PT1zP3YuaXNBY3RpdmU6bnVsbDshMT09PXkmJihnPW4pO3ZhciB3PW09PT1mW2ldJiZtIT09dVtpXSYmQztpZih3JiZhJiZlLm1hbnVhbGx5QW5pbWF0ZU9uTW91bnQmJih3PSExKSx2LnByb3RlY3RlZEtleXM9ci5fX2Fzc2lnbih7fSxoKSwhdi5pc0FjdGl2ZSYmbnVsbD09PXl8fCFtJiYhdi5wcmV2UHJvcHx8TWUobSl8fFwiYm9vbGVhblwiPT10eXBlb2YgbSlyZXR1cm5cImNvbnRpbnVlXCI7dmFyIGI9ZnVuY3Rpb24oZSx0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdD90IT09ZTohIUkodCkmJiFodCh0LGUpfSh2LnByZXZQcm9wLG0pfHxpPT09cyYmdi5pc0FjdGl2ZSYmIXcmJkN8fG4+ZyYmQyx4PUFycmF5LmlzQXJyYXkobSk/bTpbbV0sXz14LnJlZHVjZShsLHt9KTshMT09PXkmJihfPXt9KTt2YXIgTz12LnByZXZSZXNvbHZlZFZhbHVlcyxMPXZvaWQgMD09PU8/e306TyxFPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxMKSxfKSxTPWZ1bmN0aW9uKGUpe2I9ITAscC5kZWxldGUoZSksdi5uZWVkc0FuaW1hdGluZ1tlXT0hMH07Zm9yKHZhciBqIGluIEUpe3ZhciBNPV9bal0saz1MW2pdO2guaGFzT3duUHJvcGVydHkoail8fChNIT09az9rZShNKSYma2Uoayk/aHQoTSxrKT92LnByb3RlY3RlZEtleXNbal09ITA6UyhqKTp2b2lkIDAhPT1NP1Moaik6cC5hZGQoaik6dm9pZCAwIT09TSYmcC5oYXMoaik/UyhqKTp2LnByb3RlY3RlZEtleXNbal09ITApfXYucHJldlByb3A9bSx2LnByZXZSZXNvbHZlZFZhbHVlcz1fLHYuaXNBY3RpdmUmJihoPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxoKSxfKSksYSYmZS5ibG9ja0luaXRpYWxBbmltYXRpb24mJihiPSExKSxiJiYhdyYmZC5wdXNoLmFwcGx5KGQsci5fX3NwcmVhZEFycmF5KFtdLHIuX19yZWFkKHgubWFwKChmdW5jdGlvbihlKXtyZXR1cm57YW5pbWF0aW9uOmUsb3B0aW9uczpyLl9fYXNzaWduKHt0eXBlOml9LHQpfX0pKSkpKX0sbT0wO208bm47bSsrKXYobSk7aWYoaT1yLl9fYXNzaWduKHt9LGgpLHAuc2l6ZSl7dmFyIEM9e307cC5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1lLmdldEJhc2VUYXJnZXQodCk7dm9pZCAwIT09biYmKENbdF09bil9KSksZC5wdXNoKHthbmltYXRpb246Q30pfXZhciB5PUJvb2xlYW4oZC5sZW5ndGgpO3JldHVybiBhJiYhMT09PXUuaW5pdGlhbCYmIWUubWFudWFsbHlBbmltYXRlT25Nb3VudCYmKHk9ITEpLGE9ITEseT9uKGQpOlByb21pc2UucmVzb2x2ZSgpfXJldHVybntpc0FuaW1hdGVkOmZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT1pW2VdfSxhbmltYXRlQ2hhbmdlczpzLHNldEFjdGl2ZTpmdW5jdGlvbih0LG4scil7dmFyIGk7cmV0dXJuIG9bdF0uaXNBY3RpdmU9PT1uP1Byb21pc2UucmVzb2x2ZSgpOihudWxsPT09KGk9ZS52YXJpYW50Q2hpbGRyZW4pfHx2b2lkIDA9PT1pfHxpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciByO3JldHVybiBudWxsPT09KHI9ZS5hbmltYXRpb25TdGF0ZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc2V0QWN0aXZlKHQsbil9KSksb1t0XS5pc0FjdGl2ZT1uLHMocix0KSl9LHNldEFuaW1hdGVGdW5jdGlvbjpmdW5jdGlvbih0KXtuPXQoZSl9LGdldFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIG99fX0odCkpLE1lKG4pJiZvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gbi5zdWJzY3JpYmUodCl9KSxbbl0pfSkpLGV4aXQ6ZHQoKGZ1bmN0aW9uKGUpe3ZhciB0PWUuY3VzdG9tLG49ZS52aXN1YWxFbGVtZW50LGk9ci5fX3JlYWQoTygpLDIpLGE9aVswXSxsPWlbMV0scz1vLnVzZUNvbnRleHQoeCk7by51c2VFZmZlY3QoKGZ1bmN0aW9uKCl7dmFyIGUscixvPW51bGw9PT0oZT1uLmFuaW1hdGlvblN0YXRlKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5zZXRBY3RpdmUoQmUuRXhpdCwhYSx7Y3VzdG9tOm51bGwhPT0ocj1udWxsPT1zP3ZvaWQgMDpzLmN1c3RvbSkmJnZvaWQgMCE9PXI/cjp0fSk7IWEmJihudWxsPT1vfHxvLnRoZW4obCkpfSksW2FdKX0pKX0sYW49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt2YXIgbz10aGlzLGk9KHZvaWQgMD09PW4/e306bikudHJhbnNmb3JtUGFnZVBvaW50O2lmKHRoaXMuc3RhcnRFdmVudD1udWxsLHRoaXMubGFzdE1vdmVFdmVudD1udWxsLHRoaXMubGFzdE1vdmVFdmVudEluZm89bnVsbCx0aGlzLmhhbmRsZXJzPXt9LHRoaXMudXBkYXRlUG9pbnQ9ZnVuY3Rpb24oKXtpZihvLmxhc3RNb3ZlRXZlbnQmJm8ubGFzdE1vdmVFdmVudEluZm8pe3ZhciBlPWNuKG8ubGFzdE1vdmVFdmVudEluZm8sby5oaXN0b3J5KSx0PW51bGwhPT1vLnN0YXJ0RXZlbnQsbj1sLmRpc3RhbmNlKGUub2Zmc2V0LHt4OjAseTowfSk+PTM7aWYodHx8bil7dmFyIGk9ZS5wb2ludCxhPXMuZ2V0RnJhbWVEYXRhKCkudGltZXN0YW1wO28uaGlzdG9yeS5wdXNoKHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxpKSx7dGltZXN0YW1wOmF9KSk7dmFyIGM9by5oYW5kbGVycyx1PWMub25TdGFydCxmPWMub25Nb3ZlO3R8fCh1JiZ1KG8ubGFzdE1vdmVFdmVudCxlKSxvLnN0YXJ0RXZlbnQ9by5sYXN0TW92ZUV2ZW50KSxmJiZmKG8ubGFzdE1vdmVFdmVudCxlKX19fSx0aGlzLmhhbmRsZVBvaW50ZXJNb3ZlPWZ1bmN0aW9uKGUsdCl7by5sYXN0TW92ZUV2ZW50PWUsby5sYXN0TW92ZUV2ZW50SW5mbz1sbih0LG8udHJhbnNmb3JtUGFnZVBvaW50KSxGZShlKSYmMD09PWUuYnV0dG9ucz9vLmhhbmRsZVBvaW50ZXJVcChlLHQpOmQuZGVmYXVsdC51cGRhdGUoby51cGRhdGVQb2ludCwhMCl9LHRoaXMuaGFuZGxlUG9pbnRlclVwPWZ1bmN0aW9uKGUsdCl7by5lbmQoKTt2YXIgbj1vLmhhbmRsZXJzLHI9bi5vbkVuZCxpPW4ub25TZXNzaW9uRW5kLGE9Y24obG4odCxvLnRyYW5zZm9ybVBhZ2VQb2ludCksby5oaXN0b3J5KTtvLnN0YXJ0RXZlbnQmJnImJnIoZSxhKSxpJiZpKGUsYSl9LCEoVWUoZSkmJmUudG91Y2hlcy5sZW5ndGg+MSkpe3RoaXMuaGFuZGxlcnM9dCx0aGlzLnRyYW5zZm9ybVBhZ2VQb2ludD1pO3ZhciBhPWxuKHFlKGUpLHRoaXMudHJhbnNmb3JtUGFnZVBvaW50KSxjPWEucG9pbnQsdT1zLmdldEZyYW1lRGF0YSgpLnRpbWVzdGFtcDt0aGlzLmhpc3Rvcnk9W3IuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxjKSx7dGltZXN0YW1wOnV9KV07dmFyIGY9dC5vblNlc3Npb25TdGFydDtmJiZmKGUsY24oYSx0aGlzLmhpc3RvcnkpKSx0aGlzLnJlbW92ZUxpc3RlbmVycz1sLnBpcGUobnQod2luZG93LFwicG9pbnRlcm1vdmVcIix0aGlzLmhhbmRsZVBvaW50ZXJNb3ZlKSxudCh3aW5kb3csXCJwb2ludGVydXBcIix0aGlzLmhhbmRsZVBvaW50ZXJVcCksbnQod2luZG93LFwicG9pbnRlcmNhbmNlbFwiLHRoaXMuaGFuZGxlUG9pbnRlclVwKSl9fXJldHVybiBlLnByb3RvdHlwZS51cGRhdGVIYW5kbGVycz1mdW5jdGlvbihlKXt0aGlzLmhhbmRsZXJzPWV9LGUucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3RoaXMucmVtb3ZlTGlzdGVuZXJzJiZ0aGlzLnJlbW92ZUxpc3RlbmVycygpLHMuY2FuY2VsU3luYy51cGRhdGUodGhpcy51cGRhdGVQb2ludCl9LGV9KCk7ZnVuY3Rpb24gbG4oZSx0KXtyZXR1cm4gdD97cG9pbnQ6dChlLnBvaW50KX06ZX1mdW5jdGlvbiBzbihlLHQpe3JldHVybnt4OmUueC10LngseTplLnktdC55fX1mdW5jdGlvbiBjbihlLHQpe3ZhciBuPWUucG9pbnQ7cmV0dXJue3BvaW50Om4sZGVsdGE6c24obixmbih0KSksb2Zmc2V0OnNuKG4sdW4odCkpLHZlbG9jaXR5OmRuKHQsLjEpfX1mdW5jdGlvbiB1bihlKXtyZXR1cm4gZVswXX1mdW5jdGlvbiBmbihlKXtyZXR1cm4gZVtlLmxlbmd0aC0xXX1mdW5jdGlvbiBkbihlLHQpe2lmKGUubGVuZ3RoPDIpcmV0dXJue3g6MCx5OjB9O2Zvcih2YXIgbj1lLmxlbmd0aC0xLHI9bnVsbCxvPWZuKGUpO24+PTAmJihyPWVbbl0sIShvLnRpbWVzdGFtcC1yLnRpbWVzdGFtcD5ndCh0KSkpOyluLS07aWYoIXIpcmV0dXJue3g6MCx5OjB9O3ZhciBpPShvLnRpbWVzdGFtcC1yLnRpbWVzdGFtcCkvMWUzO2lmKDA9PT1pKXJldHVybnt4OjAseTowfTt2YXIgYT17eDooby54LXIueCkvaSx5OihvLnktci55KS9pfTtyZXR1cm4gYS54PT09MS8wJiYoYS54PTApLGEueT09PTEvMCYmKGEueT0wKSxhfWZ1bmN0aW9uIHBuKGUpe3JldHVybiBlfWZ1bmN0aW9uIGhuKGUpe3ZhciB0PWUudG9wO3JldHVybnt4OnttaW46ZS5sZWZ0LG1heDplLnJpZ2h0fSx5OnttaW46dCxtYXg6ZS5ib3R0b219fX12YXIgZ249e3RyYW5zbGF0ZTowLHNjYWxlOjEsb3JpZ2luOjAsb3JpZ2luUG9pbnQ6MH07ZnVuY3Rpb24gdm4oKXtyZXR1cm57eDpyLl9fYXNzaWduKHt9LGduKSx5OnIuX19hc3NpZ24oe30sZ24pfX1mdW5jdGlvbiBtbihlKXtyZXR1cm5bZShcInhcIiksZShcInlcIildfWZ1bmN0aW9uIENuKGUsdCxuKXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09biYmKG49LjAxKSxsLmRpc3RhbmNlKGUsdCk8bn1mdW5jdGlvbiB5bihlKXtyZXR1cm4gZS5tYXgtZS5taW59ZnVuY3Rpb24gd24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9LjUpLGUub3JpZ2luPXIsZS5vcmlnaW5Qb2ludD1sLm1peCh0Lm1pbix0Lm1heCxlLm9yaWdpbiksZS5zY2FsZT15bihuKS95bih0KSxDbihlLnNjYWxlLDEsMWUtNCkmJihlLnNjYWxlPTEpLGUudHJhbnNsYXRlPWwubWl4KG4ubWluLG4ubWF4LGUub3JpZ2luKS1lLm9yaWdpblBvaW50LENuKGUudHJhbnNsYXRlKSYmKGUudHJhbnNsYXRlPTApfWZ1bmN0aW9uIGJuKGUsdCxuLHIpe3duKGUueCx0Lngsbi54LHhuKHIub3JpZ2luWCkpLHduKGUueSx0Lnksbi55LHhuKHIub3JpZ2luWSkpfWZ1bmN0aW9uIHhuKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlP2U6LjV9ZnVuY3Rpb24gX24oZSx0LG4pe2UubWluPW4ubWluK3QubWluLGUubWF4PWUubWluK3luKHQpfWZ1bmN0aW9uIE9uKGUsdCxuKXt2YXIgcj10Lm1pbixvPXQubWF4O3JldHVybiB2b2lkIDAhPT1yJiZlPHI/ZT1uP2wubWl4KHIsZSxuLm1pbik6TWF0aC5tYXgoZSxyKTp2b2lkIDAhPT1vJiZlPm8mJihlPW4/bC5taXgobyxlLG4ubWF4KTpNYXRoLm1pbihlLG8pKSxlfWZ1bmN0aW9uIExuKGUsdCxuKXtyZXR1cm57bWluOnZvaWQgMCE9PXQ/ZS5taW4rdDp2b2lkIDAsbWF4OnZvaWQgMCE9PW4/ZS5tYXgrbi0oZS5tYXgtZS5taW4pOnZvaWQgMH19ZnVuY3Rpb24gRW4oZSx0KXt2YXIgbixvPXQubWluLWUubWluLGk9dC5tYXgtZS5tYXg7cmV0dXJuIHQubWF4LXQubWluPGUubWF4LWUubWluJiYobz0obj1yLl9fcmVhZChbaSxvXSwyKSlbMF0saT1uWzFdKSx7bWluOmUubWluK28sbWF4OmUubWluK2l9fWZ1bmN0aW9uIFNuKGUsdCxuKXtyZXR1cm57bWluOmpuKGUsdCksbWF4OmpuKGUsbil9fWZ1bmN0aW9uIGpuKGUsdCl7dmFyIG47cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGU/ZTpudWxsIT09KG49ZVt0XSkmJnZvaWQgMCE9PW4/bjowfWZ1bmN0aW9uIE1uKGUsdCl7cmV0dXJuIGhuKGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS50b3Ascj1lLmxlZnQsbz1lLmJvdHRvbSxpPWUucmlnaHQ7dm9pZCAwPT09dCYmKHQ9cG4pO3ZhciBhPXQoe3g6cix5Om59KSxsPXQoe3g6aSx5Om99KTtyZXR1cm57dG9wOmEueSxsZWZ0OmEueCxib3R0b206bC55LHJpZ2h0OmwueH19KGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdCkpfXZhciBrbj1mdW5jdGlvbihlLHQpe3JldHVybiBlLmRlcHRoLXQuZGVwdGh9O2Z1bmN0aW9uIFJuKGUpe3JldHVybiBlLnByb2plY3Rpb24uaXNFbmFibGVkfHxlLnNob3VsZFJlc2V0VHJhbnNmb3JtKCl9ZnVuY3Rpb24gUG4oZSx0KXt2b2lkIDA9PT10JiYodD1bXSk7dmFyIG49ZS5wYXJlbnQ7cmV0dXJuIG4mJlBuKG4sdCksUm4oZSkmJnQucHVzaChlKSx0fWZ1bmN0aW9uIEluKGUpe2lmKCFlLnNob3VsZFJlc2V0VHJhbnNmb3JtKCkpe3ZhciB0LG49ZS5nZXRMYXlvdXRTdGF0ZSgpO2Uubm90aWZ5QmVmb3JlTGF5b3V0TWVhc3VyZShuLmxheW91dCksbi5pc0h5ZHJhdGVkPSEwLG4ubGF5b3V0PWUubWVhc3VyZVZpZXdwb3J0Qm94KCksbi5sYXlvdXRDb3JyZWN0ZWQ9KHQ9bi5sYXlvdXQse3g6ci5fX2Fzc2lnbih7fSx0LngpLHk6ci5fX2Fzc2lnbih7fSx0LnkpfSksZS5ub3RpZnlMYXlvdXRNZWFzdXJlKG4ubGF5b3V0LGUucHJldlZpZXdwb3J0Qm94fHxuLmxheW91dCksZC5kZWZhdWx0LnVwZGF0ZSgoZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWJhc2VQcm9qZWN0aW9uVGFyZ2V0KCl9KSl9fWZ1bmN0aW9uIEFuKGUpe2Uuc2hvdWxkUmVzZXRUcmFuc2Zvcm0oKXx8KGUucHJldlZpZXdwb3J0Qm94PWUubWVhc3VyZVZpZXdwb3J0Qm94KCExKSxlLnJlYmFzZVByb2plY3Rpb25UYXJnZXQoITEsZS5wcmV2Vmlld3BvcnRCb3gpKX1mdW5jdGlvbiBUbihlLHQpe3JldHVybnttaW46dC5taW4tZS5taW4sbWF4OnQubWF4LWUubWlufX1mdW5jdGlvbiBIbihlLHQpe3JldHVybnt4OlRuKGUueCx0LngpLHk6VG4oZS55LHQueSl9fWZ1bmN0aW9uIEJuKGUpe3ZhciB0PWUuZ2V0UHJvcHMoKSxuPXQuZHJhZyxyPXQuX2RyYWdYO3JldHVybiBuJiYhcn1mdW5jdGlvbiBWbihlLHQpe2UubWluPXQubWluLGUubWF4PXQubWF4fWZ1bmN0aW9uIERuKGUsdCxuKXtyZXR1cm4gbit0KihlLW4pfWZ1bmN0aW9uIFpuKGUsdCxuLHIsbyl7cmV0dXJuIHZvaWQgMCE9PW8mJihlPURuKGUsbyxyKSksRG4oZSxuLHIpK3R9ZnVuY3Rpb24gJG4oZSx0LG4scixvKXt2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1uJiYobj0xKSxlLm1pbj1abihlLm1pbix0LG4scixvKSxlLm1heD1abihlLm1heCx0LG4scixvKX1mdW5jdGlvbiBObihlLHQpe3ZhciBuPXQueCxyPXQueTskbihlLngsbi50cmFuc2xhdGUsbi5zY2FsZSxuLm9yaWdpblBvaW50KSwkbihlLnksci50cmFuc2xhdGUsci5zY2FsZSxyLm9yaWdpblBvaW50KX1mdW5jdGlvbiBGbihlLHQsbixvKXt2YXIgaT1yLl9fcmVhZChvLDMpLGE9aVswXSxzPWlbMV0sYz1pWzJdO2UubWluPXQubWluLGUubWF4PXQubWF4O3ZhciB1PXZvaWQgMCE9PW5bY10/bltjXTouNSxmPWwubWl4KHQubWluLHQubWF4LHUpOyRuKGUsblthXSxuW3NdLGYsbi5zY2FsZSl9dmFyIFVuPVtcInhcIixcInNjYWxlWFwiLFwib3JpZ2luWFwiXSxXbj1bXCJ5XCIsXCJzY2FsZVlcIixcIm9yaWdpbllcIl07ZnVuY3Rpb24gem4oZSx0LG4pe0ZuKGUueCx0LngsbixVbiksRm4oZS55LHQueSxuLFduKX1mdW5jdGlvbiBHbihlLHQsbixyLG8pe3JldHVybiBlPURuKGUtPXQsMS9uLHIpLHZvaWQgMCE9PW8mJihlPURuKGUsMS9vLHIpKSxlfWZ1bmN0aW9uIHFuKGUsdCxuKXt2YXIgbz1yLl9fcmVhZChuLDMpLGk9b1swXSxhPW9bMV0scz1vWzJdOyFmdW5jdGlvbihlLHQsbixyLG8pe3ZvaWQgMD09PXQmJih0PTApLHZvaWQgMD09PW4mJihuPTEpLHZvaWQgMD09PXImJihyPS41KTt2YXIgaT1sLm1peChlLm1pbixlLm1heCxyKS10O2UubWluPUduKGUubWluLHQsbixpLG8pLGUubWF4PUduKGUubWF4LHQsbixpLG8pfShlLHRbaV0sdFthXSx0W3NdLHQuc2NhbGUpfWZ1bmN0aW9uIFluKGUsdCl7cW4oZS54LHQsVW4pLHFuKGUueSx0LFduKX12YXIgS249bmV3IFNldDtmdW5jdGlvbiBYbihlLHQsbil7ZVtuXXx8KGVbbl09W10pLGVbbl0ucHVzaCh0KX1mdW5jdGlvbiBKbihlKXtyZXR1cm4gS24uYWRkKGUpLGZ1bmN0aW9uKCl7cmV0dXJuIEtuLmRlbGV0ZShlKX19ZnVuY3Rpb24gUW4oKXtpZihLbi5zaXplKXt2YXIgZT0wLHQ9W1tdXSxuPVtdLHI9ZnVuY3Rpb24obil7cmV0dXJuIFhuKHQsbixlKX0sbz1mdW5jdGlvbih0KXtYbihuLHQsZSksZSsrfTtLbi5mb3JFYWNoKChmdW5jdGlvbih0KXt0KHIsbyksZT0wfSkpLEtuLmNsZWFyKCk7Zm9yKHZhciBpPW4ubGVuZ3RoLGE9MDthPD1pO2ErKyl0W2FdJiZ0W2FdLmZvckVhY2godHIpLG5bYV0mJm5bYV0uZm9yRWFjaCh0cil9fXZhciBlcix0cj1mdW5jdGlvbihlKXtyZXR1cm4gZSgpfSxucj1uZXcgV2Vha01hcCxycj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dmFyIHQ9ZS52aXN1YWxFbGVtZW50O3RoaXMuaXNEcmFnZ2luZz0hMSx0aGlzLmN1cnJlbnREaXJlY3Rpb249bnVsbCx0aGlzLmNvbnN0cmFpbnRzPSExLHRoaXMuZWxhc3RpYz17eDp7bWluOjAsbWF4OjF9LHk6e21pbjowLG1heDoxfX0sdGhpcy5wcm9wcz17fSx0aGlzLmhhc011dGF0ZWRDb25zdHJhaW50cz0hMSx0aGlzLmN1cnNvclByb2dyZXNzPXt4Oi41LHk6LjV9LHRoaXMub3JpZ2luUG9pbnQ9e30sdGhpcy5vcGVuR2xvYmFsTG9jaz1udWxsLHRoaXMucGFuU2Vzc2lvbj1udWxsLHRoaXMudmlzdWFsRWxlbWVudD10LHRoaXMudmlzdWFsRWxlbWVudC5lbmFibGVMYXlvdXRQcm9qZWN0aW9uKCksbnIuc2V0KHQsdGhpcyl9cmV0dXJuIGUucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxvPXZvaWQgMD09PXQ/e306dCxpPW8uc25hcFRvQ3Vyc29yLGE9dm9pZCAwIT09aSYmaSxjPW8uY3Vyc29yUHJvZ3Jlc3MsdT10aGlzLnByb3BzLnRyYW5zZm9ybVBhZ2VQb2ludDt0aGlzLnBhblNlc3Npb249bmV3IGFuKGUse29uU2Vzc2lvblN0YXJ0OmZ1bmN0aW9uKGUpe3ZhciB0O24uc3RvcE1vdGlvbigpO3ZhciBvPWZ1bmN0aW9uKGUpe3JldHVybiBxZShlLFwiY2xpZW50XCIpfShlKS5wb2ludDtudWxsPT09KHQ9bi5jYW5jZWxMYXlvdXQpfHx2b2lkIDA9PT10fHx0LmNhbGwobiksbi5jYW5jZWxMYXlvdXQ9Sm4oKGZ1bmN0aW9uKGUsdCl7dmFyIGk9UG4obi52aXN1YWxFbGVtZW50KSx1PWZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49ZnVuY3Rpb24oZSl7Um4oZSkmJnQucHVzaChlKSxlLmNoaWxkcmVuLmZvckVhY2gobil9O3JldHVybiBlLmNoaWxkcmVuLmZvckVhY2gobiksdC5zb3J0KGtuKX0obi52aXN1YWxFbGVtZW50KSxmPXIuX19zcHJlYWRBcnJheShyLl9fc3ByZWFkQXJyYXkoW10sci5fX3JlYWQoaSkpLHIuX19yZWFkKHUpKSxkPSExO24uaXNMYXlvdXREcmFnKCkmJm4udmlzdWFsRWxlbWVudC5sb2NrUHJvamVjdGlvblRhcmdldCgpLHQoKGZ1bmN0aW9uKCl7Zi5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXNldFRyYW5zZm9ybSgpfSkpfSkpLGUoKGZ1bmN0aW9uKCl7SW4obi52aXN1YWxFbGVtZW50KSx1LmZvckVhY2goSW4pfSkpLHQoKGZ1bmN0aW9uKCl7Zi5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXN0b3JlVHJhbnNmb3JtKCl9KSksYSYmKGQ9bi5zbmFwVG9DdXJzb3IobykpfSkpLGUoKGZ1bmN0aW9uKCl7Qm9vbGVhbihuLmdldEF4aXNNb3Rpb25WYWx1ZShcInhcIikmJiFuLmlzRXh0ZXJuYWxEcmFnKCkpfHxuLnZpc3VhbEVsZW1lbnQucmViYXNlUHJvamVjdGlvblRhcmdldCghMCxuLnZpc3VhbEVsZW1lbnQubWVhc3VyZVZpZXdwb3J0Qm94KCExKSksbi52aXN1YWxFbGVtZW50LnNjaGVkdWxlVXBkYXRlTGF5b3V0UHJvamVjdGlvbigpO3ZhciBlPW4udmlzdWFsRWxlbWVudC5wcm9qZWN0aW9uO21uKChmdW5jdGlvbih0KXtpZighZCl7dmFyIHI9ZS50YXJnZXRbdF0saT1yLm1pbixhPXIubWF4O24uY3Vyc29yUHJvZ3Jlc3NbdF09Yz9jW3RdOmwucHJvZ3Jlc3MoaSxhLG9bdF0pfXZhciBzPW4uZ2V0QXhpc01vdGlvblZhbHVlKHQpO3MmJihuLm9yaWdpblBvaW50W3RdPXMuZ2V0KCkpfSkpfSkpLHQoKGZ1bmN0aW9uKCl7cy5mbHVzaFN5bmMudXBkYXRlKCkscy5mbHVzaFN5bmMucHJlUmVuZGVyKCkscy5mbHVzaFN5bmMucmVuZGVyKCkscy5mbHVzaFN5bmMucG9zdFJlbmRlcigpfSkpLGUoKGZ1bmN0aW9uKCl7cmV0dXJuIG4ucmVzb2x2ZURyYWdDb25zdHJhaW50cygpfSkpfSkpfSxvblN0YXJ0OmZ1bmN0aW9uKGUsdCl7dmFyIHIsbyxpLGE9bi5wcm9wcyxsPWEuZHJhZyxzPWEuZHJhZ1Byb3BhZ2F0aW9uOyghbHx8c3x8KG4ub3Blbkdsb2JhbExvY2smJm4ub3Blbkdsb2JhbExvY2soKSxuLm9wZW5HbG9iYWxMb2NrPWx0KGwpLG4ub3Blbkdsb2JhbExvY2spKSYmKFFuKCksbi5pc0RyYWdnaW5nPSEwLG4uY3VycmVudERpcmVjdGlvbj1udWxsLG51bGw9PT0obz0ocj1uLnByb3BzKS5vbkRyYWdTdGFydCl8fHZvaWQgMD09PW98fG8uY2FsbChyLGUsdCksbnVsbD09PShpPW4udmlzdWFsRWxlbWVudC5hbmltYXRpb25TdGF0ZSl8fHZvaWQgMD09PWl8fGkuc2V0QWN0aXZlKEJlLkRyYWcsITApKX0sb25Nb3ZlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbyxpLGEsbD1uLnByb3BzLHM9bC5kcmFnUHJvcGFnYXRpb24sYz1sLmRyYWdEaXJlY3Rpb25Mb2NrO2lmKHN8fG4ub3Blbkdsb2JhbExvY2spe3ZhciB1PXQub2Zmc2V0O2lmKGMmJm51bGw9PT1uLmN1cnJlbnREaXJlY3Rpb24pcmV0dXJuIG4uY3VycmVudERpcmVjdGlvbj1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PTEwKTt2YXIgbj1udWxsO3JldHVybiBNYXRoLmFicyhlLnkpPnQ/bj1cInlcIjpNYXRoLmFicyhlLngpPnQmJihuPVwieFwiKSxufSh1KSx2b2lkKG51bGwhPT1uLmN1cnJlbnREaXJlY3Rpb24mJihudWxsPT09KG89KHI9bi5wcm9wcykub25EaXJlY3Rpb25Mb2NrKXx8dm9pZCAwPT09b3x8by5jYWxsKHIsbi5jdXJyZW50RGlyZWN0aW9uKSkpO24udXBkYXRlQXhpcyhcInhcIix0LnBvaW50LHUpLG4udXBkYXRlQXhpcyhcInlcIix0LnBvaW50LHUpLG51bGw9PT0oYT0oaT1uLnByb3BzKS5vbkRyYWcpfHx2b2lkIDA9PT1hfHxhLmNhbGwoaSxlLHQpLGVyPWV9fSxvblNlc3Npb25FbmQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5zdG9wKGUsdCl9fSx7dHJhbnNmb3JtUGFnZVBvaW50OnV9KX0sZS5wcm90b3R5cGUucmVzb2x2ZURyYWdDb25zdHJhaW50cz1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnByb3BzLG49dC5kcmFnQ29uc3RyYWludHMscj10LmRyYWdFbGFzdGljLG89dGhpcy52aXN1YWxFbGVtZW50LmdldExheW91dFN0YXRlKCkubGF5b3V0Q29ycmVjdGVkO3RoaXMuY29uc3RyYWludHM9ISFuJiYoUChuKT90aGlzLnJlc29sdmVSZWZDb25zdHJhaW50cyhvLG4pOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC50b3Ascj10LmxlZnQsbz10LmJvdHRvbSxpPXQucmlnaHQ7cmV0dXJue3g6TG4oZS54LHIsaSkseTpMbihlLnksbixvKX19KG8sbikpLHRoaXMuZWxhc3RpYz1mdW5jdGlvbihlKXtyZXR1cm4hMT09PWU/ZT0wOiEwPT09ZSYmKGU9LjM1KSx7eDpTbihlLFwibGVmdFwiLFwicmlnaHRcIikseTpTbihlLFwidG9wXCIsXCJib3R0b21cIil9fShyKSx0aGlzLmNvbnN0cmFpbnRzJiYhdGhpcy5oYXNNdXRhdGVkQ29uc3RyYWludHMmJm1uKChmdW5jdGlvbih0KXtlLmdldEF4aXNNb3Rpb25WYWx1ZSh0KSYmKGUuY29uc3RyYWludHNbdF09ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtyZXR1cm4gdm9pZCAwIT09dC5taW4mJihuLm1pbj10Lm1pbi1lLm1pbiksdm9pZCAwIT09dC5tYXgmJihuLm1heD10Lm1heC1lLm1pbiksbn0ob1t0XSxlLmNvbnN0cmFpbnRzW3RdKSl9KSl9LGUucHJvdG90eXBlLnJlc29sdmVSZWZDb25zdHJhaW50cz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMucHJvcHMscj1uLm9uTWVhc3VyZURyYWdDb25zdHJhaW50cyxvPW4udHJhbnNmb3JtUGFnZVBvaW50LGE9dC5jdXJyZW50O2kuaW52YXJpYW50KG51bGwhPT1hLFwiSWYgYGRyYWdDb25zdHJhaW50c2AgaXMgc2V0IGFzIGEgUmVhY3QgcmVmLCB0aGF0IHJlZiBtdXN0IGJlIHBhc3NlZCB0byBhbm90aGVyIGNvbXBvbmVudCdzIGByZWZgIHByb3AuXCIpLHRoaXMuY29uc3RyYWludHNCb3g9TW4oYSxvKTt2YXIgbD1mdW5jdGlvbihlLHQpe3JldHVybnt4OkVuKGUueCx0LngpLHk6RW4oZS55LHQueSl9fShlLHRoaXMuY29uc3RyYWludHNCb3gpO2lmKHIpe3ZhciBzPXIoZnVuY3Rpb24oZSl7dmFyIHQ9ZS54LG49ZS55O3JldHVybnt0b3A6bi5taW4sYm90dG9tOm4ubWF4LGxlZnQ6dC5taW4scmlnaHQ6dC5tYXh9fShsKSk7dGhpcy5oYXNNdXRhdGVkQ29uc3RyYWludHM9ISFzLHMmJihsPWhuKHMpKX1yZXR1cm4gbH0sZS5wcm90b3R5cGUuY2FuY2VsRHJhZz1mdW5jdGlvbigpe3ZhciBlLHQ7dGhpcy52aXN1YWxFbGVtZW50LnVubG9ja1Byb2plY3Rpb25UYXJnZXQoKSxudWxsPT09KGU9dGhpcy5jYW5jZWxMYXlvdXQpfHx2b2lkIDA9PT1lfHxlLmNhbGwodGhpcyksdGhpcy5pc0RyYWdnaW5nPSExLHRoaXMucGFuU2Vzc2lvbiYmdGhpcy5wYW5TZXNzaW9uLmVuZCgpLHRoaXMucGFuU2Vzc2lvbj1udWxsLCF0aGlzLnByb3BzLmRyYWdQcm9wYWdhdGlvbiYmdGhpcy5vcGVuR2xvYmFsTG9jayYmKHRoaXMub3Blbkdsb2JhbExvY2soKSx0aGlzLm9wZW5HbG9iYWxMb2NrPW51bGwpLG51bGw9PT0odD10aGlzLnZpc3VhbEVsZW1lbnQuYW5pbWF0aW9uU3RhdGUpfHx2b2lkIDA9PT10fHx0LnNldEFjdGl2ZShCZS5EcmFnLCExKX0sZS5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbihlLHQpe3ZhciBuLHIsbztudWxsPT09KG49dGhpcy5wYW5TZXNzaW9uKXx8dm9pZCAwPT09bnx8bi5lbmQoKSx0aGlzLnBhblNlc3Npb249bnVsbDt2YXIgaT10aGlzLmlzRHJhZ2dpbmc7aWYodGhpcy5jYW5jZWxEcmFnKCksaSl7dmFyIGE9dC52ZWxvY2l0eTt0aGlzLmFuaW1hdGVEcmFnRW5kKGEpLG51bGw9PT0obz0ocj10aGlzLnByb3BzKS5vbkRyYWdFbmQpfHx2b2lkIDA9PT1vfHxvLmNhbGwocixlLHQpfX0sZS5wcm90b3R5cGUuc25hcFRvQ3Vyc29yPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIG1uKChmdW5jdGlvbihuKXtpZihvcihuLHQucHJvcHMuZHJhZyx0LmN1cnJlbnREaXJlY3Rpb24pKXt2YXIgcj10LmdldEF4aXNNb3Rpb25WYWx1ZShuKTtpZighcilyZXR1cm4gdC5jdXJzb3JQcm9ncmVzc1tuXT0uNSwhMDt2YXIgbz10LnZpc3VhbEVsZW1lbnQuZ2V0TGF5b3V0U3RhdGUoKS5sYXlvdXQsaT1vW25dLm1heC1vW25dLm1pbixhPW9bbl0ubWluK2kvMixsPWVbbl0tYTt0Lm9yaWdpblBvaW50W25dPWVbbl0sci5zZXQobCl9fSkpLmluY2x1ZGVzKCEwKX0sZS5wcm90b3R5cGUudXBkYXRlQXhpcz1mdW5jdGlvbihlLHQsbil7aWYob3IoZSx0aGlzLnByb3BzLmRyYWcsdGhpcy5jdXJyZW50RGlyZWN0aW9uKSlyZXR1cm4gdGhpcy5nZXRBeGlzTW90aW9uVmFsdWUoZSk/dGhpcy51cGRhdGVBeGlzTW90aW9uVmFsdWUoZSxuKTp0aGlzLnVwZGF0ZVZpc3VhbEVsZW1lbnRBeGlzKGUsdCl9LGUucHJvdG90eXBlLnVwZGF0ZUF4aXNNb3Rpb25WYWx1ZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZ2V0QXhpc01vdGlvblZhbHVlKGUpO2lmKHQmJm4pe3ZhciByPXRoaXMub3JpZ2luUG9pbnRbZV0rdFtlXSxvPXRoaXMuY29uc3RyYWludHM/T24ocix0aGlzLmNvbnN0cmFpbnRzW2VdLHRoaXMuZWxhc3RpY1tlXSk6cjtuLnNldChvKX19LGUucHJvdG90eXBlLnVwZGF0ZVZpc3VhbEVsZW1lbnRBeGlzPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj10aGlzLnZpc3VhbEVsZW1lbnQuZ2V0TGF5b3V0U3RhdGUoKS5sYXlvdXRbZV0sbz1yLm1heC1yLm1pbixpPXRoaXMuY3Vyc29yUHJvZ3Jlc3NbZV0sYT1mdW5jdGlvbihlLHQsbixyLG8pe3ZhciBpPWUtdCpuO3JldHVybiByP09uKGkscixvKTppfSh0W2VdLG8saSxudWxsPT09KG49dGhpcy5jb25zdHJhaW50cyl8fHZvaWQgMD09PW4/dm9pZCAwOm5bZV0sdGhpcy5lbGFzdGljW2VdKTt0aGlzLnZpc3VhbEVsZW1lbnQuc2V0UHJvamVjdGlvblRhcmdldEF4aXMoZSxhLGErbyl9LGUucHJvdG90eXBlLnNldFByb3BzPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZHJhZyxuPXZvaWQgMCE9PXQmJnQsbz1lLmRyYWdEaXJlY3Rpb25Mb2NrLGk9dm9pZCAwIT09byYmbyxhPWUuZHJhZ1Byb3BhZ2F0aW9uLGw9dm9pZCAwIT09YSYmYSxzPWUuZHJhZ0NvbnN0cmFpbnRzLGM9dm9pZCAwIT09cyYmcyx1PWUuZHJhZ0VsYXN0aWMsZj12b2lkIDA9PT11Py4zNTp1LGQ9ZS5kcmFnTW9tZW50dW0scD12b2lkIDA9PT1kfHxkLGg9ci5fX3Jlc3QoZSxbXCJkcmFnXCIsXCJkcmFnRGlyZWN0aW9uTG9ja1wiLFwiZHJhZ1Byb3BhZ2F0aW9uXCIsXCJkcmFnQ29uc3RyYWludHNcIixcImRyYWdFbGFzdGljXCIsXCJkcmFnTW9tZW50dW1cIl0pO3RoaXMucHJvcHM9ci5fX2Fzc2lnbih7ZHJhZzpuLGRyYWdEaXJlY3Rpb25Mb2NrOmksZHJhZ1Byb3BhZ2F0aW9uOmwsZHJhZ0NvbnN0cmFpbnRzOmMsZHJhZ0VsYXN0aWM6ZixkcmFnTW9tZW50dW06cH0saCl9LGUucHJvdG90eXBlLmdldEF4aXNNb3Rpb25WYWx1ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnByb3BzLG49dC5sYXlvdXQscj10LmxheW91dElkLG89XCJfZHJhZ1wiK2UudG9VcHBlckNhc2UoKTtyZXR1cm4gdGhpcy5wcm9wc1tvXT90aGlzLnByb3BzW29dOm58fHZvaWQgMCE9PXI/dm9pZCAwOnRoaXMudmlzdWFsRWxlbWVudC5nZXRWYWx1ZShlLDApfSxlLnByb3RvdHlwZS5pc0xheW91dERyYWc9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5nZXRBeGlzTW90aW9uVmFsdWUoXCJ4XCIpfSxlLnByb3RvdHlwZS5pc0V4dGVybmFsRHJhZz1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLl9kcmFnWCxuPWUuX2RyYWdZO3JldHVybiB0fHxufSxlLnByb3RvdHlwZS5hbmltYXRlRHJhZ0VuZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dGhpcy5wcm9wcyxvPW4uZHJhZyxpPW4uZHJhZ01vbWVudHVtLGE9bi5kcmFnRWxhc3RpYyxsPW4uZHJhZ1RyYW5zaXRpb24scz1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PSEwKTt2YXIgbixyPWUuZ2V0UHJvamVjdGlvblBhcmVudCgpO3JldHVybiEhciYmKHQ/WW4obj1IbihyLnByb2plY3Rpb24udGFyZ2V0LGUucHJvamVjdGlvbi50YXJnZXQpLHIuZ2V0TGF0ZXN0VmFsdWVzKCkpOm49SG4oci5nZXRMYXlvdXRTdGF0ZSgpLmxheW91dCxlLmdldExheW91dFN0YXRlKCkubGF5b3V0KSxtbigoZnVuY3Rpb24odCl7cmV0dXJuIGUuc2V0UHJvamVjdGlvblRhcmdldEF4aXModCxuW3RdLm1pbixuW3RdLm1heCwhMCl9KSksITApfSh0aGlzLnZpc3VhbEVsZW1lbnQsdGhpcy5pc0xheW91dERyYWcoKSYmIXRoaXMuaXNFeHRlcm5hbERyYWcoKSksYz10aGlzLmNvbnN0cmFpbnRzfHx7fTtpZihzJiZPYmplY3Qua2V5cyhjKS5sZW5ndGgmJnRoaXMuaXNMYXlvdXREcmFnKCkpe3ZhciB1PXRoaXMudmlzdWFsRWxlbWVudC5nZXRQcm9qZWN0aW9uUGFyZW50KCk7aWYodSl7dmFyIGY9SG4odS5wcm9qZWN0aW9uLnRhcmdldEZpbmFsLGMpO21uKChmdW5jdGlvbihlKXt2YXIgdD1mW2VdLG49dC5taW4scj10Lm1heDtjW2VdPXttaW46aXNOYU4obik/dm9pZCAwOm4sbWF4OmlzTmFOKHIpP3ZvaWQgMDpyfX0pKX19dmFyIGQ9bW4oKGZ1bmN0aW9uKG4pe3ZhciB1O2lmKG9yKG4sbyx0LmN1cnJlbnREaXJlY3Rpb24pKXt2YXIgZj1udWxsIT09KHU9bnVsbD09Yz92b2lkIDA6Y1tuXSkmJnZvaWQgMCE9PXU/dTp7fSxkPWE/MjAwOjFlNixwPWE/NDA6MWU3LGg9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt0eXBlOlwiaW5lcnRpYVwiLHZlbG9jaXR5Omk/ZVtuXTowLGJvdW5jZVN0aWZmbmVzczpkLGJvdW5jZURhbXBpbmc6cCx0aW1lQ29uc3RhbnQ6NzUwLHJlc3REZWx0YToxLHJlc3RTcGVlZDoxMH0sbCksZik7cmV0dXJuIHQuZ2V0QXhpc01vdGlvblZhbHVlKG4pP3Quc3RhcnRBeGlzVmFsdWVBbmltYXRpb24obixoKTp0LnZpc3VhbEVsZW1lbnQuc3RhcnRMYXlvdXRBbmltYXRpb24obixoLHMpfX0pKTtyZXR1cm4gUHJvbWlzZS5hbGwoZCkudGhlbigoZnVuY3Rpb24oKXt2YXIgZSxuO251bGw9PT0obj0oZT10LnByb3BzKS5vbkRyYWdUcmFuc2l0aW9uRW5kKXx8dm9pZCAwPT09bnx8bi5jYWxsKGUpfSkpfSxlLnByb3RvdHlwZS5zdG9wTW90aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczttbigoZnVuY3Rpb24odCl7dmFyIG49ZS5nZXRBeGlzTW90aW9uVmFsdWUodCk7bj9uLnN0b3AoKTplLnZpc3VhbEVsZW1lbnQuc3RvcExheW91dEFuaW1hdGlvbigpfSkpfSxlLnByb3RvdHlwZS5zdGFydEF4aXNWYWx1ZUFuaW1hdGlvbj1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZ2V0QXhpc01vdGlvblZhbHVlKGUpO2lmKG4pe3ZhciByPW4uZ2V0KCk7cmV0dXJuIG4uc2V0KHIpLG4uc2V0KHIpLEl0KGUsbiwwLHQpfX0sZS5wcm90b3R5cGUuc2NhbGVQb2ludD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnByb3BzLG49dC5kcmFnO2lmKFAodC5kcmFnQ29uc3RyYWludHMpJiZ0aGlzLmNvbnN0cmFpbnRzQm94KXt0aGlzLnN0b3BNb3Rpb24oKTt2YXIgcj17eDowLHk6MH07bW4oKGZ1bmN0aW9uKHQpe3ZhciBuLG8saSxhLHMsYztyW3RdPShuPWUudmlzdWFsRWxlbWVudC5wcm9qZWN0aW9uLnRhcmdldFt0XSxvPWUuY29uc3RyYWludHNCb3hbdF0sYT0uNSxzPXluKG4pLChjPXluKG8pKT5zP2E9bC5wcm9ncmVzcyhvLm1pbixvLm1heC1zLG4ubWluKTpzPmMmJihhPWwucHJvZ3Jlc3Mobi5taW4sbi5tYXgtYyxvLm1pbikpLGk9YSxsLmNsYW1wKDAsMSxpKSl9KSksdGhpcy51cGRhdGVDb25zdHJhaW50cygoZnVuY3Rpb24oKXttbigoZnVuY3Rpb24odCl7aWYob3IodCxuLG51bGwpKXt2YXIgbz1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5tYXgtZS5taW4sbz1sLm1peCh0Lm1pbix0Lm1heC1yLG4pO3JldHVybnttaW46byxtYXg6bytyfX0oZS52aXN1YWxFbGVtZW50LnByb2plY3Rpb24udGFyZ2V0W3RdLGUuY29uc3RyYWludHNCb3hbdF0sclt0XSksaT1vLm1pbixhPW8ubWF4O2UudmlzdWFsRWxlbWVudC5zZXRQcm9qZWN0aW9uVGFyZ2V0QXhpcyh0LGksYSl9fSkpfSkpLHNldFRpbWVvdXQoUW4sMSl9fSxlLnByb3RvdHlwZS51cGRhdGVDb25zdHJhaW50cz1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMuY2FuY2VsTGF5b3V0PUpuKChmdW5jdGlvbihuLHIpe3ZhciBvPVBuKHQudmlzdWFsRWxlbWVudCk7cigoZnVuY3Rpb24oKXtyZXR1cm4gby5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXNldFRyYW5zZm9ybSgpfSkpfSkpLG4oKGZ1bmN0aW9uKCl7cmV0dXJuIEluKHQudmlzdWFsRWxlbWVudCl9KSkscigoZnVuY3Rpb24oKXtyZXR1cm4gby5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXN0b3JlVHJhbnNmb3JtKCl9KSl9KSksbigoZnVuY3Rpb24oKXt0LnJlc29sdmVEcmFnQ29uc3RyYWludHMoKX0pKSxlJiZyKGUpfSkpfSxlLnByb3RvdHlwZS5tb3VudD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49bnQoZS5nZXRJbnN0YW5jZSgpLFwicG9pbnRlcmRvd25cIiwoZnVuY3Rpb24oZSl7dmFyIG49dC5wcm9wcyxyPW4uZHJhZyxvPW4uZHJhZ0xpc3RlbmVyO3ImJih2b2lkIDA9PT1vfHxvKSYmdC5zdGFydChlKX0pKSxyPSRlKHdpbmRvdyxcInJlc2l6ZVwiLChmdW5jdGlvbigpe3Quc2NhbGVQb2ludCgpfSkpLG89ZS5vbkxheW91dFVwZGF0ZSgoZnVuY3Rpb24oKXt0LmlzRHJhZ2dpbmcmJnQucmVzb2x2ZURyYWdDb25zdHJhaW50cygpfSkpLGk9ZS5wcmV2RHJhZ0N1cnNvcjtyZXR1cm4gaSYmdGhpcy5zdGFydChlcix7Y3Vyc29yUHJvZ3Jlc3M6aX0pLGZ1bmN0aW9uKCl7bnVsbD09bnx8bigpLG51bGw9PXJ8fHIoKSxudWxsPT1vfHxvKCksdC5jYW5jZWxEcmFnKCl9fSxlfSgpO2Z1bmN0aW9uIG9yKGUsdCxuKXtyZXR1cm4hKCEwIT09dCYmdCE9PWV8fG51bGwhPT1uJiZuIT09ZSl9dmFyIGlyLGFyLGxyPXtwYW46ZHQoKGZ1bmN0aW9uKGUpe3ZhciB0PWUub25QYW4sbj1lLm9uUGFuU3RhcnQscj1lLm9uUGFuRW5kLGk9ZS5vblBhblNlc3Npb25TdGFydCxhPWUudmlzdWFsRWxlbWVudCxsPXR8fG58fHJ8fGkscz1vLnVzZVJlZihudWxsKSxjPW8udXNlQ29udGV4dCh5KS50cmFuc2Zvcm1QYWdlUG9pbnQsdT17b25TZXNzaW9uU3RhcnQ6aSxvblN0YXJ0Om4sb25Nb3ZlOnQsb25FbmQ6ZnVuY3Rpb24oZSx0KXtzLmN1cnJlbnQ9bnVsbCxyJiZyKGUsdCl9fTtvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXtudWxsIT09cy5jdXJyZW50JiZzLmN1cnJlbnQudXBkYXRlSGFuZGxlcnModSl9KSkscnQoYSxcInBvaW50ZXJkb3duXCIsbCYmZnVuY3Rpb24oZSl7cy5jdXJyZW50PW5ldyBhbihlLHUse3RyYW5zZm9ybVBhZ2VQb2ludDpjfSl9KSxmdCgoZnVuY3Rpb24oKXtyZXR1cm4gcy5jdXJyZW50JiZzLmN1cnJlbnQuZW5kKCl9KSl9KSksZHJhZzpkdCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kcmFnQ29udHJvbHMsbj1lLnZpc3VhbEVsZW1lbnQsaT1vLnVzZUNvbnRleHQoeSkudHJhbnNmb3JtUGFnZVBvaW50LGE9XygoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHJyKHt2aXN1YWxFbGVtZW50Om59KX0pKTthLnNldFByb3BzKHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxlKSx7dHJhbnNmb3JtUGFnZVBvaW50Oml9KSksby51c2VFZmZlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHQmJnQuc3Vic2NyaWJlKGEpfSksW2FdKSxvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gYS5tb3VudChuKX0pLFtdKX0pKX07ZnVuY3Rpb24gc3IoZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUmJmUuc3RhcnRzV2l0aChcInZhcigtLVwiKX0hZnVuY3Rpb24oZSl7ZVtlLkVudGVyaW5nPTBdPVwiRW50ZXJpbmdcIixlW2UuUHJlc2VudD0xXT1cIlByZXNlbnRcIixlW2UuRXhpdGluZz0yXT1cIkV4aXRpbmdcIn0oaXJ8fChpcj17fSkpLHQuVmlzaWJpbGl0eUFjdGlvbj12b2lkIDAsKGFyPXQuVmlzaWJpbGl0eUFjdGlvbnx8KHQuVmlzaWJpbGl0eUFjdGlvbj17fSkpW2FyLkhpZGU9MF09XCJIaWRlXCIsYXJbYXIuU2hvdz0xXT1cIlNob3dcIjt2YXIgY3I9L3ZhclxcKCgtLVthLXpBLVowLTktX10rKSw/ID8oW2EtekEtWjAtOSAoKSUjLiwtXSspP1xcKS87ZnVuY3Rpb24gdXIoZSx0LG4pe3ZvaWQgMD09PW4mJihuPTEpLGkuaW52YXJpYW50KG48PTQsJ01heCBDU1MgdmFyaWFibGUgZmFsbGJhY2sgZGVwdGggZGV0ZWN0ZWQgaW4gcHJvcGVydHkgXCInK2UrJ1wiLiBUaGlzIG1heSBpbmRpY2F0ZSBhIGNpcmN1bGFyIGZhbGxiYWNrIGRlcGVuZGVuY3kuJyk7dmFyIG89ci5fX3JlYWQoZnVuY3Rpb24oZSl7dmFyIHQ9Y3IuZXhlYyhlKTtpZighdClyZXR1cm5bLF07dmFyIG49ci5fX3JlYWQodCwzKTtyZXR1cm5bblsxXSxuWzJdXX0oZSksMiksYT1vWzBdLGw9b1sxXTtpZihhKXt2YXIgcz13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KS5nZXRQcm9wZXJ0eVZhbHVlKGEpO3JldHVybiBzP3MudHJpbSgpOnNyKGwpP3VyKGwsdCxuKzEpOmx9fWZ1bmN0aW9uIGZyKGUsdCl7cmV0dXJuIGUvKHQubWF4LXQubWluKSoxMDB9dmFyIGRyPVwiXyRjc3NcIixwcj17cHJvY2VzczpmdW5jdGlvbihlLHQsbil7dmFyIHI9bi50YXJnZXQ7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpe2lmKCFhLnB4LnRlc3QoZSkpcmV0dXJuIGU7ZT1wYXJzZUZsb2F0KGUpfXJldHVybiBmcihlLHIueCkrXCIlIFwiK2ZyKGUsci55KStcIiVcIn19LGhyPXtib3JkZXJSYWRpdXM6ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LHByKSx7YXBwbHlUbzpbXCJib3JkZXJUb3BMZWZ0UmFkaXVzXCIsXCJib3JkZXJUb3BSaWdodFJhZGl1c1wiLFwiYm9yZGVyQm90dG9tTGVmdFJhZGl1c1wiLFwiYm9yZGVyQm90dG9tUmlnaHRSYWRpdXNcIl19KSxib3JkZXJUb3BMZWZ0UmFkaXVzOnByLGJvcmRlclRvcFJpZ2h0UmFkaXVzOnByLGJvcmRlckJvdHRvbUxlZnRSYWRpdXM6cHIsYm9yZGVyQm90dG9tUmlnaHRSYWRpdXM6cHIsYm94U2hhZG93Ontwcm9jZXNzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5kZWx0YSxyPXQudHJlZVNjYWxlLG89ZSxpPWUuaW5jbHVkZXMoXCJ2YXIoXCIpLHM9W107aSYmKGU9ZS5yZXBsYWNlKGNyLChmdW5jdGlvbihlKXtyZXR1cm4gcy5wdXNoKGUpLGRyfSkpKTt2YXIgYz1hLmNvbXBsZXgucGFyc2UoZSk7aWYoYy5sZW5ndGg+NSlyZXR1cm4gbzt2YXIgdT1hLmNvbXBsZXguY3JlYXRlVHJhbnNmb3JtZXIoZSksZj1cIm51bWJlclwiIT10eXBlb2YgY1swXT8xOjAsZD1uLnguc2NhbGUqci54LHA9bi55LnNjYWxlKnIueTtjWzArZl0vPWQsY1sxK2ZdLz1wO3ZhciBoPWwubWl4KGQscCwuNSk7XCJudW1iZXJcIj09dHlwZW9mIGNbMitmXSYmKGNbMitmXS89aCksXCJudW1iZXJcIj09dHlwZW9mIGNbMytmXSYmKGNbMytmXS89aCk7dmFyIGc9dShjKTtpZihpKXt2YXIgdj0wO2c9Zy5yZXBsYWNlKGRyLChmdW5jdGlvbigpe3ZhciBlPXNbdl07cmV0dXJuIHYrKyxlfSkpfXJldHVybiBnfX19LGdyPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXt2YXIgbj1udWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIG4uZnJhbWVUYXJnZXQ9e3g6e21pbjowLG1heDoxfSx5OnttaW46MCxtYXg6MX19LG4uY3VycmVudEFuaW1hdGlvblRhcmdldD17eDp7bWluOjAsbWF4OjF9LHk6e21pbjowLG1heDoxfX0sbi5pc0FuaW1hdGluZz17eDohMSx5OiExfSxuLnN0b3BBeGlzQW5pbWF0aW9uPXt4OnZvaWQgMCx5OnZvaWQgMH0sbi5pc0FuaW1hdGluZ1RyZWU9ITEsbi5hbmltYXRlPWZ1bmN0aW9uKGUsbyxpKXt2b2lkIDA9PT1pJiYoaT17fSk7dmFyIGE9aS5vcmlnaW5Cb3gsbD1pLnRhcmdldEJveCxzPWkudmlzaWJpbGl0eUFjdGlvbixjPWkuc2hvdWxkU3RhY2tBbmltYXRlLHU9aS5vbkNvbXBsZXRlLGY9aS5wcmV2UGFyZW50LGQ9ci5fX3Jlc3QoaSxbXCJvcmlnaW5Cb3hcIixcInRhcmdldEJveFwiLFwidmlzaWJpbGl0eUFjdGlvblwiLFwic2hvdWxkU3RhY2tBbmltYXRlXCIsXCJvbkNvbXBsZXRlXCIsXCJwcmV2UGFyZW50XCJdKSxwPW4ucHJvcHMsaD1wLnZpc3VhbEVsZW1lbnQsZz1wLmxheW91dDtpZighMT09PWMpcmV0dXJuIG4uaXNBbmltYXRpbmdUcmVlPSExLG4uc2FmZVRvUmVtb3ZlKCk7aWYoIW4uaXNBbmltYXRpbmdUcmVlfHwhMD09PWMpe2MmJihuLmlzQW5pbWF0aW5nVHJlZT0hMCksbz1hfHxvLGU9bHx8ZTt2YXIgdixtLEMseT0hMSx3PWguZ2V0UHJvamVjdGlvblBhcmVudCgpO2lmKHcpe3ZhciBiPXcucHJldlZpZXdwb3J0Qm94LHg9dy5nZXRMYXlvdXRTdGF0ZSgpLmxheW91dDtmJiYobCYmKHg9Zi5nZXRMYXlvdXRTdGF0ZSgpLmxheW91dCksYSYmKG09dywodj1mKS5nZXRMYXlvdXRJZCgpPT09KEM9bS5nZXRMYXlvdXRJZCgpKSYmKHZvaWQgMCE9PUN8fHY9PT1tKSkmJmYucHJldlZpZXdwb3J0Qm94JiYoYj1mLnByZXZWaWV3cG9ydEJveCkpLGImJmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZXx8IWUmJiEodHx8bil9KGYsYSxsKSYmKHk9ITAsbz1IbihiLG8pLGU9SG4oeCxlKSl9dmFyIF8sTyxMPShPPWUsIShtcihfPW8pfHxtcihPKXx8Q3IoXy54LE8ueCkmJkNyKF8ueSxPLnkpKSksRT1tbigoZnVuY3Rpb24oaSl7dmFyIGEsbDtpZihcInBvc2l0aW9uXCI9PT1nKXt2YXIgYz1lW2ldLm1heC1lW2ldLm1pbjtvW2ldLm1heD1vW2ldLm1pbitjfWlmKCFoLnByb2plY3Rpb24uaXNUYXJnZXRMb2NrZWQpcmV0dXJuIHZvaWQgMD09PXM/TD9uLmFuaW1hdGVBeGlzKGksZVtpXSxvW2ldLHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxkKSx7aXNSZWxhdGl2ZTp5fSkpOihudWxsPT09KGw9KGE9bi5zdG9wQXhpc0FuaW1hdGlvbilbaV0pfHx2b2lkIDA9PT1sfHxsLmNhbGwoYSksaC5zZXRQcm9qZWN0aW9uVGFyZ2V0QXhpcyhpLGVbaV0ubWluLGVbaV0ubWF4LHkpKTp2b2lkIGguc2V0VmlzaWJpbGl0eShzPT09dC5WaXNpYmlsaXR5QWN0aW9uLlNob3cpfSkpO3JldHVybiBoLnN5bmNSZW5kZXIoKSxQcm9taXNlLmFsbChFKS50aGVuKChmdW5jdGlvbigpe24uaXNBbmltYXRpbmdUcmVlPSExLHUmJnUoKSxoLm5vdGlmeUxheW91dEFuaW1hdGlvbkNvbXBsZXRlKCl9KSl9fSxufXJldHVybiByLl9fZXh0ZW5kcyhuLGUpLG4ucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMudmlzdWFsRWxlbWVudDt0LmFuaW1hdGVNb3Rpb25WYWx1ZT1JdCx0LmVuYWJsZUxheW91dFByb2plY3Rpb24oKSx0aGlzLnVuc3ViTGF5b3V0UmVhZHk9dC5vbkxheW91dFVwZGF0ZSh0aGlzLmFuaW1hdGUpLHQubGF5b3V0U2FmZVRvUmVtb3ZlPWZ1bmN0aW9uKCl7cmV0dXJuIGUuc2FmZVRvUmVtb3ZlKCl9LFcoaHIpfSxuLnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy51bnN1YkxheW91dFJlYWR5KCksbW4oKGZ1bmN0aW9uKHQpe3ZhciBuLHI7cmV0dXJuIG51bGw9PT0ocj0obj1lLnN0b3BBeGlzQW5pbWF0aW9uKVt0XSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuY2FsbChuKX0pKX0sbi5wcm90b3R5cGUuYW5pbWF0ZUF4aXM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIG8saSxhPXRoaXMscz12b2lkIDA9PT1yP3t9OnIsYz1zLnRyYW5zaXRpb24sdT1zLmlzUmVsYXRpdmU7aWYoIXRoaXMuaXNBbmltYXRpbmdbZV18fCFDcih0LHRoaXMuY3VycmVudEFuaW1hdGlvblRhcmdldFtlXSkpe251bGw9PT0oaT0obz10aGlzLnN0b3BBeGlzQW5pbWF0aW9uKVtlXSl8fHZvaWQgMD09PWl8fGkuY2FsbChvKSx0aGlzLmlzQW5pbWF0aW5nW2VdPSEwO3ZhciBmPXRoaXMucHJvcHMudmlzdWFsRWxlbWVudCxkPXRoaXMuZnJhbWVUYXJnZXRbZV0scD1mLmdldFByb2plY3Rpb25BbmltYXRpb25Qcm9ncmVzcygpW2VdO3AuY2xlYXJMaXN0ZW5lcnMoKSxwLnNldCgwKSxwLnNldCgwKTt2YXIgaD1mdW5jdGlvbigpe3ZhciByPXAuZ2V0KCkvMWUzOyFmdW5jdGlvbihlLHQsbixyKXtlLm1pbj1sLm1peCh0Lm1pbixuLm1pbixyKSxlLm1heD1sLm1peCh0Lm1heCxuLm1heCxyKX0oZCxuLHQsciksZi5zZXRQcm9qZWN0aW9uVGFyZ2V0QXhpcyhlLGQubWluLGQubWF4LHUpfTtoKCk7dmFyIGc9cC5vbkNoYW5nZShoKTt0aGlzLnN0b3BBeGlzQW5pbWF0aW9uW2VdPWZ1bmN0aW9uKCl7YS5pc0FuaW1hdGluZ1tlXT0hMSxwLnN0b3AoKSxnKCl9LHRoaXMuY3VycmVudEFuaW1hdGlvblRhcmdldFtlXT10O3ZhciB2PWN8fGYuZ2V0RGVmYXVsdFRyYW5zaXRpb24oKXx8eXI7cmV0dXJuIEl0KFwieFwiPT09ZT9cImxheW91dFhcIjpcImxheW91dFlcIixwLDFlMyx2JiZQdCh2LFwibGF5b3V0XCIpKS50aGVuKHRoaXMuc3RvcEF4aXNBbmltYXRpb25bZV0pfX0sbi5wcm90b3R5cGUuc2FmZVRvUmVtb3ZlPWZ1bmN0aW9uKCl7dmFyIGUsdDtudWxsPT09KHQ9KGU9dGhpcy5wcm9wcykuc2FmZVRvUmVtb3ZlKXx8dm9pZCAwPT09dHx8dC5jYWxsKGUpfSxuLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbn0odS5Db21wb25lbnQpLHZyPXttaW46MCxtYXg6MH07ZnVuY3Rpb24gbXIoZSl7cmV0dXJuIENyKGUueCx2cikmJkNyKGUueSx2cil9ZnVuY3Rpb24gQ3IoZSx0KXtyZXR1cm4gZS5taW49PT10Lm1pbiYmZS5tYXg9PT10Lm1heH12YXIgeXI9e2R1cmF0aW9uOi40NSxlYXNlOlsuNCwwLC4xLDFdfSx3cj17bGF5b3V0UmVhZHk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUubm90aWZ5TGF5b3V0UmVhZHkoKX19O2Z1bmN0aW9uIGJyKCl7dmFyIGU9bmV3IFNldDtyZXR1cm57YWRkOmZ1bmN0aW9uKHQpe3JldHVybiBlLmFkZCh0KX0sZmx1c2g6ZnVuY3Rpb24odCl7dmFyIG49dm9pZCAwPT09dD93cjp0LG89bi5sYXlvdXRSZWFkeSxpPW4ucGFyZW50O0puKChmdW5jdGlvbih0LG4pe3ZhciBhPUFycmF5LmZyb20oZSkuc29ydChrbiksbD1pP1BuKGkpOltdO24oKGZ1bmN0aW9uKCl7ci5fX3NwcmVhZEFycmF5KHIuX19zcHJlYWRBcnJheShbXSxyLl9fcmVhZChsKSksci5fX3JlYWQoYSkpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlc2V0VHJhbnNmb3JtKCl9KSl9KSksdCgoZnVuY3Rpb24oKXthLmZvckVhY2goSW4pfSkpLG4oKGZ1bmN0aW9uKCl7bC5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXN0b3JlVHJhbnNmb3JtKCl9KSksYS5mb3JFYWNoKG8pfSkpLHQoKGZ1bmN0aW9uKCl7YS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmlzUHJlc2VudCYmKGUucHJlc2VuY2U9aXIuUHJlc2VudCl9KSl9KSksbigoZnVuY3Rpb24oKXtzLmZsdXNoU3luYy5wcmVSZW5kZXIoKSxzLmZsdXNoU3luYy5yZW5kZXIoKX0pKSx0KChmdW5jdGlvbigpe2QuZGVmYXVsdC5wb3N0UmVuZGVyKChmdW5jdGlvbigpe3JldHVybiBhLmZvckVhY2goeHIpfSkpLGUuY2xlYXIoKX0pKX0pKSxRbigpfX19ZnVuY3Rpb24geHIoZSl7ZS5wcmV2Vmlld3BvcnRCb3g9ZS5wcm9qZWN0aW9uLnRhcmdldH12YXIgX3I9by5jcmVhdGVDb250ZXh0KGJyKCkpLE9yPW8uY3JlYXRlQ29udGV4dChicigpKTtmdW5jdGlvbiBMcihlKXtyZXR1cm4hIWUuZm9yY2VVcGRhdGV9dmFyIEVyPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiByLl9fZXh0ZW5kcyh0LGUpLHQucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuc3luY0xheW91dCxuPWUuZnJhbWVyU3luY0xheW91dCxyPWUudmlzdWFsRWxlbWVudDtMcih0KSYmdC5yZWdpc3RlcihyKSxMcihuKSYmbi5yZWdpc3RlcihyKSxyLm9uVW5tb3VudCgoZnVuY3Rpb24oKXtMcih0KSYmdC5yZW1vdmUociksTHIobikmJm4ucmVtb3ZlKHIpfSkpfSx0LnByb3RvdHlwZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnN5bmNMYXlvdXQsbj1lLnZpc3VhbEVsZW1lbnQ7cmV0dXJuIExyKHQpP3Quc3luY1VwZGF0ZSgpOihBbihuKSx0LmFkZChuKSksbnVsbH0sdC5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5zeW5jTGF5b3V0O0xyKGUpfHxlLmZsdXNoKCl9LHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiBudWxsfSx0fShmLmRlZmF1bHQuQ29tcG9uZW50KSxTcj17bWVhc3VyZUxheW91dDpmdW5jdGlvbihlKXt2YXIgdD1vLnVzZUNvbnRleHQoX3IpLG49by51c2VDb250ZXh0KE9yKTtyZXR1cm4gZi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoRXIsci5fX2Fzc2lnbih7fSxlLHtzeW5jTGF5b3V0OnQsZnJhbWVyU3luY0xheW91dDpufSkpfSxsYXlvdXRBbmltYXRpb246ZnVuY3Rpb24oZSl7dmFyIHQ9ci5fX3JlYWQoTygpLDIpWzFdO3JldHVybiB1LmNyZWF0ZUVsZW1lbnQoZ3Isci5fX2Fzc2lnbih7fSxlLHtzYWZlVG9SZW1vdmU6dH0pKX19O2Z1bmN0aW9uIGpyKCl7cmV0dXJue2lzSHlkcmF0ZWQ6ITEsbGF5b3V0Ont4OnttaW46MCxtYXg6MX0seTp7bWluOjAsbWF4OjF9fSxsYXlvdXRDb3JyZWN0ZWQ6e3g6e21pbjowLG1heDoxfSx5OnttaW46MCxtYXg6MX19LHRyZWVTY2FsZTp7eDoxLHk6MX0sZGVsdGE6dm4oKSxkZWx0YUZpbmFsOnZuKCksZGVsdGFUcmFuc2Zvcm06XCJcIn19dmFyIE1yPWpyKCk7ZnVuY3Rpb24ga3IoZSx0LG4pe3ZhciByPWUueCxvPWUueSxpPVwidHJhbnNsYXRlM2QoXCIrci50cmFuc2xhdGUvdC54K1wicHgsIFwiK28udHJhbnNsYXRlL3QueStcInB4LCAwKSBcIjtpZihuKXt2YXIgYT1uLnJvdGF0ZSxsPW4ucm90YXRlWCxzPW4ucm90YXRlWTthJiYoaSs9XCJyb3RhdGUoXCIrYStcIikgXCIpLGwmJihpKz1cInJvdGF0ZVgoXCIrbCtcIikgXCIpLHMmJihpKz1cInJvdGF0ZVkoXCIrcytcIikgXCIpfXJldHVybiBpKz1cInNjYWxlKFwiK3Iuc2NhbGUrXCIsIFwiK28uc2NhbGUrXCIpXCIsbnx8aSE9PVByP2k6XCJcIn1mdW5jdGlvbiBScihlKXt2YXIgdD1lLmRlbHRhRmluYWw7cmV0dXJuIDEwMCp0Lngub3JpZ2luK1wiJSBcIisxMDAqdC55Lm9yaWdpbitcIiUgMFwifXZhciBQcj1rcihNci5kZWx0YSxNci50cmVlU2NhbGUse3g6MSx5OjF9KSxJcj1bXCJMYXlvdXRNZWFzdXJlXCIsXCJCZWZvcmVMYXlvdXRNZWFzdXJlXCIsXCJMYXlvdXRVcGRhdGVcIixcIlZpZXdwb3J0Qm94VXBkYXRlXCIsXCJVcGRhdGVcIixcIlJlbmRlclwiLFwiQW5pbWF0aW9uQ29tcGxldGVcIixcIkxheW91dEFuaW1hdGlvbkNvbXBsZXRlXCIsXCJBbmltYXRpb25TdGFydFwiLFwiU2V0QXhpc1RhcmdldFwiLFwiVW5tb3VudFwiXSxBcj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmNoaWxkcmVuPVtdLHRoaXMuaXNEaXJ0eT0hMX1yZXR1cm4gZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe0F0KHRoaXMuY2hpbGRyZW4sZSksdGhpcy5pc0RpcnR5PSEwfSxlLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oZSl7VHQodGhpcy5jaGlsZHJlbixlKSx0aGlzLmlzRGlydHk9ITB9LGUucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSl7dGhpcy5pc0RpcnR5JiZ0aGlzLmNoaWxkcmVuLnNvcnQoa24pLHRoaXMuaXNEaXJ0eT0hMSx0aGlzLmNoaWxkcmVuLmZvckVhY2goZSl9LGV9KCksVHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50cmVlVHlwZSxuPXZvaWQgMD09PXQ/XCJcIjp0LG89ZS5idWlsZCxpPWUuZ2V0QmFzZVRhcmdldCxhPWUubWFrZVRhcmdldEFuaW1hdGFibGUsYz1lLm1lYXN1cmVWaWV3cG9ydEJveCx1PWUucmVuZGVyLGY9ZS5yZWFkVmFsdWVGcm9tSW5zdGFuY2UscD1lLnJlc2V0VHJhbnNmb3JtLGg9ZS5yZXN0b3JlVHJhbnNmb3JtLGc9ZS5yZW1vdmVWYWx1ZUZyb21SZW5kZXJTdGF0ZSx2PWUuc29ydE5vZGVQb3NpdGlvbixtPWUuc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzO3JldHVybiBmdW5jdGlvbihlLHQpe3ZhciBDPWUucGFyZW50LHk9ZS5wcm9wcyx3PWUucHJlc2VuY2VJZCxiPWUuYmxvY2tJbml0aWFsQW5pbWF0aW9uLHg9ZS52aXN1YWxTdGF0ZTt2b2lkIDA9PT10JiYodD17fSk7dmFyIF8sTyxMLEUsUyxqLE09eC5sYXRlc3RWYWx1ZXMsaz14LnJlbmRlclN0YXRlLFI9ZnVuY3Rpb24oKXt2YXIgZT1Jci5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBIdH0pKSx0PXt9LG49e2NsZWFyQWxsTGlzdGVuZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2xlYXIoKX0pKX0sdXBkYXRlUHJvcExpc3RlbmVyczpmdW5jdGlvbihlKXtyZXR1cm4gSXIuZm9yRWFjaCgoZnVuY3Rpb24ocil7dmFyIG87bnVsbD09PShvPXRbcl0pfHx2b2lkIDA9PT1vfHxvLmNhbGwodCk7dmFyIGk9XCJvblwiK3IsYT1lW2ldO2EmJih0W3JdPW5baV0oYSkpfSkpfX07cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtuW1wib25cIitJclt0XV09ZnVuY3Rpb24odCl7cmV0dXJuIGUuYWRkKHQpfSxuW1wibm90aWZ5XCIrSXJbdF1dPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXRbbl09YXJndW1lbnRzW25dO3JldHVybiBlLm5vdGlmeS5hcHBseShlLHIuX19zcHJlYWRBcnJheShbXSxyLl9fcmVhZCh0KSkpfX0pKSxufSgpLFA9e2lzRW5hYmxlZDohMSxpc0h5ZHJhdGVkOiExLGlzVGFyZ2V0TG9ja2VkOiExLHRhcmdldDp7eDp7bWluOjAsbWF4OjF9LHk6e21pbjowLG1heDoxfX0sdGFyZ2V0RmluYWw6e3g6e21pbjowLG1heDoxfSx5OnttaW46MCxtYXg6MX19fSxJPVAsVD1NLEg9anIoKSxEPSExLFo9bmV3IE1hcCwkPW5ldyBNYXAsTj17fSxGPXIuX19hc3NpZ24oe30sTSk7ZnVuY3Rpb24gVSgpe18mJihRLmlzUHJvamVjdGlvblJlYWR5KCkmJih6bihJLnRhcmdldEZpbmFsLEkudGFyZ2V0LFQpLGJuKEguZGVsdGFGaW5hbCxILmxheW91dENvcnJlY3RlZCxJLnRhcmdldEZpbmFsLE0pKSxXKCksdShfLGspKX1mdW5jdGlvbiBXKCl7dmFyIGU9TTtpZihFJiZFLmlzQWN0aXZlKCkpe3ZhciBuPUUuZ2V0Q3Jvc3NmYWRlU3RhdGUoUSk7biYmKGU9bil9byhRLGssZSxJLEgsdCx5KX1mdW5jdGlvbiB6KCl7Ui5ub3RpZnlVcGRhdGUoTSl9ZnVuY3Rpb24gRygpe1EubGF5b3V0VHJlZS5mb3JFYWNoKEJyKX12YXIgcT1tKHkpO2Zvcih2YXIgWSBpbiBxKXt2YXIgSz1xW1ldO3ZvaWQgMCE9PU1bWV0mJmVlKEspJiZLLnNldChNW1ldLCExKX12YXIgWD1CKHkpLEo9Vih5KSxRPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7dHJlZVR5cGU6bixjdXJyZW50Om51bGwsZGVwdGg6Qz9DLmRlcHRoKzE6MCxwYXJlbnQ6QyxjaGlsZHJlbjpuZXcgU2V0LHBhdGg6Qz9yLl9fc3ByZWFkQXJyYXkoci5fX3NwcmVhZEFycmF5KFtdLHIuX19yZWFkKEMucGF0aCkpLFtDXSk6W10sbGF5b3V0VHJlZTpDP0MubGF5b3V0VHJlZTpuZXcgQXIscHJlc2VuY2VJZDp3LHByb2plY3Rpb246UCx2YXJpYW50Q2hpbGRyZW46Sj9uZXcgU2V0OnZvaWQgMCxpc1Zpc2libGU6dm9pZCAwLG1hbnVhbGx5QW5pbWF0ZU9uTW91bnQ6Qm9vbGVhbihudWxsPT1DP3ZvaWQgMDpDLmlzTW91bnRlZCgpKSxibG9ja0luaXRpYWxBbmltYXRpb246Yixpc01vdW50ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gQm9vbGVhbihfKX0sbW91bnQ6ZnVuY3Rpb24oZSl7Xz1RLmN1cnJlbnQ9ZSxRLnBvaW50VG8oUSksSiYmQyYmIVgmJihqPW51bGw9PUM/dm9pZCAwOkMuYWRkVmFyaWFudENoaWxkKFEpKSxudWxsPT1DfHxDLmNoaWxkcmVuLmFkZChRKX0sdW5tb3VudDpmdW5jdGlvbigpe3MuY2FuY2VsU3luYy51cGRhdGUoeikscy5jYW5jZWxTeW5jLnJlbmRlcihVKSxzLmNhbmNlbFN5bmMucHJlUmVuZGVyKFEudXBkYXRlTGF5b3V0UHJvamVjdGlvbiksJC5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZSgpfSkpLFEuc3RvcExheW91dEFuaW1hdGlvbigpLFEubGF5b3V0VHJlZS5yZW1vdmUoUSksbnVsbD09anx8aigpLG51bGw9PUN8fEMuY2hpbGRyZW4uZGVsZXRlKFEpLG51bGw9PUx8fEwoKSxSLmNsZWFyQWxsTGlzdGVuZXJzKCl9LGFkZFZhcmlhbnRDaGlsZDpmdW5jdGlvbihlKXt2YXIgdCxuPVEuZ2V0Q2xvc2VzdFZhcmlhbnROb2RlKCk7aWYobilyZXR1cm4gbnVsbD09PSh0PW4udmFyaWFudENoaWxkcmVuKXx8dm9pZCAwPT09dHx8dC5hZGQoZSksZnVuY3Rpb24oKXtyZXR1cm4gbi52YXJpYW50Q2hpbGRyZW4uZGVsZXRlKGUpfX0sc29ydE5vZGVQb3NpdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gdiYmbj09PWUudHJlZVR5cGU/dihRLmdldEluc3RhbmNlKCksZS5nZXRJbnN0YW5jZSgpKTowfSxnZXRDbG9zZXN0VmFyaWFudE5vZGU6ZnVuY3Rpb24oKXtyZXR1cm4gSj9ROm51bGw9PUM/dm9pZCAwOkMuZ2V0Q2xvc2VzdFZhcmlhbnROb2RlKCl9LHNjaGVkdWxlVXBkYXRlTGF5b3V0UHJvamVjdGlvbjpDP0Muc2NoZWR1bGVVcGRhdGVMYXlvdXRQcm9qZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGQuZGVmYXVsdC5wcmVSZW5kZXIoUS51cGRhdGVUcmVlTGF5b3V0UHJvamVjdGlvbiwhMSwhMCl9LGdldExheW91dElkOmZ1bmN0aW9uKCl7cmV0dXJuIHkubGF5b3V0SWR9LGdldEluc3RhbmNlOmZ1bmN0aW9uKCl7cmV0dXJuIF99LGdldFN0YXRpY1ZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBNW2VdfSxzZXRTdGF0aWNWYWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBNW2VdPXR9LGdldExhdGVzdFZhbHVlczpmdW5jdGlvbigpe3JldHVybiBNfSxzZXRWaXNpYmlsaXR5OmZ1bmN0aW9uKGUpe1EuaXNWaXNpYmxlIT09ZSYmKFEuaXNWaXNpYmxlPWUsUS5zY2hlZHVsZVJlbmRlcigpKX0sbWFrZVRhcmdldEFuaW1hdGFibGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9ITApLGEoUSxlLHksdCl9LGFkZFZhbHVlOmZ1bmN0aW9uKGUsdCl7US5oYXNWYWx1ZShlKSYmUS5yZW1vdmVWYWx1ZShlKSxaLnNldChlLHQpLE1bZV09dC5nZXQoKSxmdW5jdGlvbihlLHQpe3ZhciBuPXQub25DaGFuZ2UoKGZ1bmN0aW9uKHQpe01bZV09dCx5Lm9uVXBkYXRlJiZkLmRlZmF1bHQudXBkYXRlKHosITEsITApfSkpLHI9dC5vblJlbmRlclJlcXVlc3QoUS5zY2hlZHVsZVJlbmRlcik7JC5zZXQoZSwoZnVuY3Rpb24oKXtuKCkscigpfSkpfShlLHQpfSxyZW1vdmVWYWx1ZTpmdW5jdGlvbihlKXt2YXIgdDtaLmRlbGV0ZShlKSxudWxsPT09KHQ9JC5nZXQoZSkpfHx2b2lkIDA9PT10fHx0KCksJC5kZWxldGUoZSksZGVsZXRlIE1bZV0sZyhlLGspfSxoYXNWYWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gWi5oYXMoZSl9LGdldFZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49Wi5nZXQoZSk7cmV0dXJuIHZvaWQgMD09PW4mJnZvaWQgMCE9PXQmJihuPVZ0KHQpLFEuYWRkVmFsdWUoZSxuKSksbn0sZm9yRWFjaFZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBaLmZvckVhY2goZSl9LHJlYWRWYWx1ZTpmdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbnVsbCE9PShuPU1bZV0pJiZ2b2lkIDAhPT1uP246ZihfLGUsdCl9LHNldEJhc2VUYXJnZXQ6ZnVuY3Rpb24oZSx0KXtGW2VdPXR9LGdldEJhc2VUYXJnZXQ6ZnVuY3Rpb24oZSl7aWYoaSl7dmFyIHQ9aSh5LGUpO2lmKHZvaWQgMCE9PXQmJiFlZSh0KSlyZXR1cm4gdH1yZXR1cm4gRltlXX19LFIpLHtidWlsZDpmdW5jdGlvbigpe3JldHVybiBXKCksa30sc2NoZWR1bGVSZW5kZXI6ZnVuY3Rpb24oKXtkLmRlZmF1bHQucmVuZGVyKFUsITEsITApfSxzeW5jUmVuZGVyOlUsc2V0UHJvcHM6ZnVuY3Rpb24oZSl7eT1lLFIudXBkYXRlUHJvcExpc3RlbmVycyhlKSxOPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtmb3IodmFyIG8gaW4gdCl7dmFyIGk9dFtvXSxhPW5bb107aWYoZWUoaSkpZS5hZGRWYWx1ZShvLGkpO2Vsc2UgaWYoZWUoYSkpZS5hZGRWYWx1ZShvLFZ0KGkpKTtlbHNlIGlmKGEhPT1pKWlmKGUuaGFzVmFsdWUobykpe3ZhciBsPWUuZ2V0VmFsdWUobyk7IWwuaGFzQW5pbWF0ZWQmJmwuc2V0KGkpfWVsc2UgZS5hZGRWYWx1ZShvLFZ0KG51bGwhPT0ocj1lLmdldFN0YXRpY1ZhbHVlKG8pKSYmdm9pZCAwIT09cj9yOmkpKX1mb3IodmFyIG8gaW4gbil2b2lkIDA9PT10W29dJiZlLnJlbW92ZVZhbHVlKG8pO3JldHVybiB0fShRLG0oeSksTil9LGdldFByb3BzOmZ1bmN0aW9uKCl7cmV0dXJuIHl9LGdldFZhcmlhbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIG51bGw9PT0odD15LnZhcmlhbnRzKXx8dm9pZCAwPT09dD92b2lkIDA6dFtlXX0sZ2V0RGVmYXVsdFRyYW5zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4geS50cmFuc2l0aW9ufSxnZXRWYXJpYW50Q29udGV4dDpmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lJiYoZT0hMSksZSlyZXR1cm4gbnVsbD09Qz92b2lkIDA6Qy5nZXRWYXJpYW50Q29udGV4dCgpO2lmKCFYKXt2YXIgdD0obnVsbD09Qz92b2lkIDA6Qy5nZXRWYXJpYW50Q29udGV4dCgpKXx8e307cmV0dXJuIHZvaWQgMCE9PXkuaW5pdGlhbCYmKHQuaW5pdGlhbD15LmluaXRpYWwpLHR9Zm9yKHZhciBuPXt9LHI9MDtyPFpyO3IrKyl7dmFyIG89RHJbcl0saT15W29dOyhBKGkpfHwhMT09PWkpJiYobltvXT1pKX1yZXR1cm4gbn0sZW5hYmxlTGF5b3V0UHJvamVjdGlvbjpmdW5jdGlvbigpe1AuaXNFbmFibGVkPSEwLFEubGF5b3V0VHJlZS5hZGQoUSl9LGxvY2tQcm9qZWN0aW9uVGFyZ2V0OmZ1bmN0aW9uKCl7UC5pc1RhcmdldExvY2tlZD0hMH0sdW5sb2NrUHJvamVjdGlvblRhcmdldDpmdW5jdGlvbigpe1Euc3RvcExheW91dEFuaW1hdGlvbigpLFAuaXNUYXJnZXRMb2NrZWQ9ITF9LGdldExheW91dFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIEh9LHNldENyb3NzZmFkZXI6ZnVuY3Rpb24oZSl7RT1lfSxpc1Byb2plY3Rpb25SZWFkeTpmdW5jdGlvbigpe3JldHVybiBQLmlzRW5hYmxlZCYmUC5pc0h5ZHJhdGVkJiZILmlzSHlkcmF0ZWR9LHN0YXJ0TGF5b3V0QW5pbWF0aW9uOmZ1bmN0aW9uKGUsdCxuKXt2b2lkIDA9PT1uJiYobj0hMSk7dmFyIHI9US5nZXRQcm9qZWN0aW9uQW5pbWF0aW9uUHJvZ3Jlc3MoKVtlXSxvPW4/UC5yZWxhdGl2ZVRhcmdldFtlXTpQLnRhcmdldFtlXSxpPW8ubWluLGE9by5tYXgtaTtyZXR1cm4gci5jbGVhckxpc3RlbmVycygpLHIuc2V0KGkpLHIuc2V0KGkpLHIub25DaGFuZ2UoKGZ1bmN0aW9uKHQpe1Euc2V0UHJvamVjdGlvblRhcmdldEF4aXMoZSx0LHQrYSxuKX0pKSxRLmFuaW1hdGVNb3Rpb25WYWx1ZShlLHIsMCx0KX0sc3RvcExheW91dEFuaW1hdGlvbjpmdW5jdGlvbigpe21uKChmdW5jdGlvbihlKXtyZXR1cm4gUS5nZXRQcm9qZWN0aW9uQW5pbWF0aW9uUHJvZ3Jlc3MoKVtlXS5zdG9wKCl9KSl9LG1lYXN1cmVWaWV3cG9ydEJveDpmdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT0hMCk7dmFyIG49YyhfLHQpO3JldHVybiBlfHxZbihuLE0pLG59LGdldFByb2plY3Rpb25BbmltYXRpb25Qcm9ncmVzczpmdW5jdGlvbigpe3JldHVybiBTfHwoUz17eDpWdCgwKSx5OlZ0KDApfSksU30sc2V0UHJvamVjdGlvblRhcmdldEF4aXM6ZnVuY3Rpb24oZSx0LG4scil7dmFyIG87dm9pZCAwPT09ciYmKHI9ITEpLHI/KFAucmVsYXRpdmVUYXJnZXR8fChQLnJlbGF0aXZlVGFyZ2V0PXt4OnttaW46MCxtYXg6MX0seTp7bWluOjAsbWF4OjF9fSksbz1QLnJlbGF0aXZlVGFyZ2V0W2VdKTooUC5yZWxhdGl2ZVRhcmdldD12b2lkIDAsbz1QLnRhcmdldFtlXSksUC5pc0h5ZHJhdGVkPSEwLG8ubWluPXQsby5tYXg9bixEPSEwLFIubm90aWZ5U2V0QXhpc1RhcmdldCgpfSxyZWJhc2VQcm9qZWN0aW9uVGFyZ2V0OmZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9SC5sYXlvdXQpO3ZhciBuPVEuZ2V0UHJvamVjdGlvbkFuaW1hdGlvblByb2dyZXNzKCkscj1uLngsbz1uLnksaT0hKFAucmVsYXRpdmVUYXJnZXR8fFAuaXNUYXJnZXRMb2NrZWR8fHIuaXNBbmltYXRpbmcoKXx8by5pc0FuaW1hdGluZygpKTsoZXx8aSkmJm1uKChmdW5jdGlvbihlKXt2YXIgbj10W2VdLHI9bi5taW4sbz1uLm1heDtRLnNldFByb2plY3Rpb25UYXJnZXRBeGlzKGUscixvKX0pKX0sbm90aWZ5TGF5b3V0UmVhZHk6ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0UHJvamVjdGlvblBhcmVudCgpO2lmKHQpe3ZhciBuPUhuKHQuZ2V0TGF5b3V0U3RhdGUoKS5sYXlvdXQsZS5nZXRMYXlvdXRTdGF0ZSgpLmxheW91dCk7bW4oKGZ1bmN0aW9uKHQpe2Uuc2V0UHJvamVjdGlvblRhcmdldEF4aXModCxuW3RdLm1pbixuW3RdLm1heCwhMCl9KSl9ZWxzZSBlLnJlYmFzZVByb2plY3Rpb25UYXJnZXQoKX0oUSksUS5ub3RpZnlMYXlvdXRVcGRhdGUoSC5sYXlvdXQsUS5wcmV2Vmlld3BvcnRCb3h8fEgubGF5b3V0LGUpfSxyZXNldFRyYW5zZm9ybTpmdW5jdGlvbigpe3JldHVybiBwKFEsXyx5KX0scmVzdG9yZVRyYW5zZm9ybTpmdW5jdGlvbigpe3JldHVybiBoKF8sayl9LHVwZGF0ZUxheW91dFByb2plY3Rpb246ZnVuY3Rpb24oKXtpZihRLmlzUHJvamVjdGlvblJlYWR5KCkpe3ZhciBlPUguZGVsdGEsdD1ILnRyZWVTY2FsZSxuPXQueCxyPXQueSxvPUguZGVsdGFUcmFuc2Zvcm07KGZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvLGksYT1lLmRlbHRhLGw9ZS5sYXlvdXQscz1lLmxheW91dENvcnJlY3RlZCxjPWUudHJlZVNjYWxlLHU9dC50YXJnZXQ7aT1sLFZuKChvPXMpLngsaS54KSxWbihvLnksaS55KSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bi5sZW5ndGg7aWYocil7dmFyIG8saTt0Lng9dC55PTE7Zm9yKHZhciBhPTA7YTxyO2ErKylpPShvPW5bYV0pLmdldExheW91dFN0YXRlKCkuZGVsdGEsdC54Kj1pLnguc2NhbGUsdC55Kj1pLnkuc2NhbGUsTm4oZSxpKSxCbihvKSYmem4oZSxlLG8uZ2V0TGF0ZXN0VmFsdWVzKCkpfX0ocyxjLG4pLGJuKGEscyx1LHIpfSkoSCxJLFEucGF0aCxNKSxEJiZRLm5vdGlmeVZpZXdwb3J0Qm94VXBkYXRlKEkudGFyZ2V0LGUpLEQ9ITE7dmFyIGk9a3IoZSx0KTtpPT09byYmbj09PXQueCYmcj09PXQueXx8US5zY2hlZHVsZVJlbmRlcigpLEguZGVsdGFUcmFuc2Zvcm09aX19LHVwZGF0ZVRyZWVMYXlvdXRQcm9qZWN0aW9uOmZ1bmN0aW9uKCl7US5sYXlvdXRUcmVlLmZvckVhY2goSHIpLGQuZGVmYXVsdC5wcmVSZW5kZXIoRywhMSwhMCl9LGdldFByb2plY3Rpb25QYXJlbnQ6ZnVuY3Rpb24oKXtpZih2b2lkIDA9PT1PKXtmb3IodmFyIGU9ITEsdD1RLnBhdGgubGVuZ3RoLTE7dD49MDt0LS0pe3ZhciBuPVEucGF0aFt0XTtpZihuLnByb2plY3Rpb24uaXNFbmFibGVkKXtlPW47YnJlYWt9fU89ZX1yZXR1cm4gT30scmVzb2x2ZVJlbGF0aXZlVGFyZ2V0Qm94OmZ1bmN0aW9uKCl7dmFyIGU9US5nZXRQcm9qZWN0aW9uUGFyZW50KCk7aWYoUC5yZWxhdGl2ZVRhcmdldCYmZSYmKGZ1bmN0aW9uKGUsdCl7X24oZS50YXJnZXQueCxlLnJlbGF0aXZlVGFyZ2V0LngsdC50YXJnZXQueCksX24oZS50YXJnZXQueSxlLnJlbGF0aXZlVGFyZ2V0LnksdC50YXJnZXQueSl9KFAsZS5wcm9qZWN0aW9uKSxCbihlKSkpe3ZhciB0PVAudGFyZ2V0O3puKHQsdCxlLmdldExhdGVzdFZhbHVlcygpKX19LHNob3VsZFJlc2V0VHJhbnNmb3JtOmZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4oeS5fbGF5b3V0UmVzZXRUcmFuc2Zvcm0pfSxwb2ludFRvOmZ1bmN0aW9uKGUpe0k9ZS5wcm9qZWN0aW9uLFQ9ZS5nZXRMYXRlc3RWYWx1ZXMoKSxudWxsPT1MfHxMKCksTD1sLnBpcGUoZS5vblNldEF4aXNUYXJnZXQoUS5zY2hlZHVsZVVwZGF0ZUxheW91dFByb2plY3Rpb24pLGUub25MYXlvdXRBbmltYXRpb25Db21wbGV0ZSgoZnVuY3Rpb24oKXt2YXIgZTtRLmlzUHJlc2VudD9RLnByZXNlbmNlPWlyLlByZXNlbnQ6bnVsbD09PShlPVEubGF5b3V0U2FmZVRvUmVtb3ZlKXx8dm9pZCAwPT09ZXx8ZS5jYWxsKFEpfSkpKX0saXNQcmVzZW50OiEwLHByZXNlbmNlOmlyLkVudGVyaW5nfSk7cmV0dXJuIFF9fTtmdW5jdGlvbiBIcihlKXtlLnJlc29sdmVSZWxhdGl2ZVRhcmdldEJveCgpfWZ1bmN0aW9uIEJyKGUpe2UudXBkYXRlTGF5b3V0UHJvamVjdGlvbigpfXZhciBWcixEcj1yLl9fc3ByZWFkQXJyYXkoW1wiaW5pdGlhbFwiXSxyLl9fcmVhZChlbikpLFpyPURyLmxlbmd0aCwkcj1uZXcgU2V0KFtcIndpZHRoXCIsXCJoZWlnaHRcIixcInRvcFwiLFwibGVmdFwiLFwicmlnaHRcIixcImJvdHRvbVwiLFwieFwiLFwieVwiXSksTnI9ZnVuY3Rpb24oZSl7cmV0dXJuICRyLmhhcyhlKX0sRnI9ZnVuY3Rpb24oZSx0KXtlLnNldCh0LCExKSxlLnNldCh0KX0sVXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1hLm51bWJlcnx8ZT09PWEucHh9OyFmdW5jdGlvbihlKXtlLndpZHRoPVwid2lkdGhcIixlLmhlaWdodD1cImhlaWdodFwiLGUubGVmdD1cImxlZnRcIixlLnJpZ2h0PVwicmlnaHRcIixlLnRvcD1cInRvcFwiLGUuYm90dG9tPVwiYm90dG9tXCJ9KFZyfHwoVnI9e30pKTt2YXIgV3I9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcGFyc2VGbG9hdChlLnNwbGl0KFwiLCBcIilbdF0pfSx6cj1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuLHIpe3ZhciBvPXIudHJhbnNmb3JtO2lmKFwibm9uZVwiPT09b3x8IW8pcmV0dXJuIDA7dmFyIGk9by5tYXRjaCgvXm1hdHJpeDNkXFwoKC4rKVxcKSQvKTtpZihpKXJldHVybiBXcihpWzFdLHQpO3ZhciBhPW8ubWF0Y2goL15tYXRyaXhcXCgoLispXFwpJC8pO3JldHVybiBhP1dyKGFbMV0sZSk6MH19LEdyPW5ldyBTZXQoW1wieFwiLFwieVwiLFwielwiXSkscXI9Ry5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiFHci5oYXMoZSl9KSksWXI9e3dpZHRoOmZ1bmN0aW9uKGUpe3ZhciB0PWUueDtyZXR1cm4gdC5tYXgtdC5taW59LGhlaWdodDpmdW5jdGlvbihlKXt2YXIgdD1lLnk7cmV0dXJuIHQubWF4LXQubWlufSx0b3A6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnRvcDtyZXR1cm4gcGFyc2VGbG9hdChuKX0sbGVmdDpmdW5jdGlvbihlLHQpe3ZhciBuPXQubGVmdDtyZXR1cm4gcGFyc2VGbG9hdChuKX0sYm90dG9tOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS55LHI9dC50b3A7cmV0dXJuIHBhcnNlRmxvYXQocikrKG4ubWF4LW4ubWluKX0scmlnaHQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLngscj10LmxlZnQ7cmV0dXJuIHBhcnNlRmxvYXQocikrKG4ubWF4LW4ubWluKX0seDp6cig0LDEzKSx5OnpyKDUsMTQpfTtmdW5jdGlvbiBLcihlLHQsbixvKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLnNvbWUoTnIpfSh0KT9mdW5jdGlvbihlLHQsbixvKXt2b2lkIDA9PT1uJiYobj17fSksdm9pZCAwPT09byYmKG89e30pLHQ9ci5fX2Fzc2lnbih7fSx0KSxvPXIuX19hc3NpZ24oe30sbyk7dmFyIGw9T2JqZWN0LmtleXModCkuZmlsdGVyKE5yKSxzPVtdLGM9ITEsdT1bXTtpZihsLmZvckVhY2goKGZ1bmN0aW9uKHIpe3ZhciBsPWUuZ2V0VmFsdWUocik7aWYoZS5oYXNWYWx1ZShyKSl7dmFyIGYsZD1uW3JdLHA9dFtyXSxoPSR0KGQpO2lmKGtlKHApKWZvcih2YXIgZz1wLmxlbmd0aCx2PW51bGw9PT1wWzBdPzE6MDt2PGc7disrKWY/aS5pbnZhcmlhbnQoJHQocFt2XSk9PT1mLFwiQWxsIGtleWZyYW1lcyBtdXN0IGJlIG9mIHRoZSBzYW1lIHR5cGVcIik6KGY9JHQocFt2XSksaS5pbnZhcmlhbnQoZj09PWh8fFVyKGgpJiZVcihmKSxcIktleWZyYW1lcyBtdXN0IGJlIG9mIHRoZSBzYW1lIGRpbWVuc2lvbiBhcyB0aGUgY3VycmVudCB2YWx1ZVwiKSk7ZWxzZSBmPSR0KHApO2lmKGghPT1mKWlmKFVyKGgpJiZVcihmKSl7dmFyIG09bC5nZXQoKTtcInN0cmluZ1wiPT10eXBlb2YgbSYmbC5zZXQocGFyc2VGbG9hdChtKSksXCJzdHJpbmdcIj09dHlwZW9mIHA/dFtyXT1wYXJzZUZsb2F0KHApOkFycmF5LmlzQXJyYXkocCkmJmY9PT1hLnB4JiYodFtyXT1wLm1hcChwYXJzZUZsb2F0KSl9ZWxzZShudWxsPT1oP3ZvaWQgMDpoLnRyYW5zZm9ybSkmJihudWxsPT1mP3ZvaWQgMDpmLnRyYW5zZm9ybSkmJigwPT09ZHx8MD09PXApPzA9PT1kP2wuc2V0KGYudHJhbnNmb3JtKGQpKTp0W3JdPWgudHJhbnNmb3JtKHApOihjfHwocz1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gcXIuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIHI9ZS5nZXRWYWx1ZShuKTt2b2lkIDAhPT1yJiYodC5wdXNoKFtuLHIuZ2V0KCldKSxyLnNldChuLnN0YXJ0c1dpdGgoXCJzY2FsZVwiKT8xOjApKX0pKSx0Lmxlbmd0aCYmZS5zeW5jUmVuZGVyKCksdH0oZSksYz0hMCksdS5wdXNoKHIpLG9bcl09dm9pZCAwIT09b1tyXT9vW3JdOnRbcl0sRnIobCxwKSl9fSkpLHUubGVuZ3RoKXt2YXIgZj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dC5tZWFzdXJlVmlld3BvcnRCb3goKSxvPXQuZ2V0SW5zdGFuY2UoKSxpPWdldENvbXB1dGVkU3R5bGUobyksYT1pLmRpc3BsYXksbD17dG9wOmkudG9wLGxlZnQ6aS5sZWZ0LGJvdHRvbTppLmJvdHRvbSxyaWdodDppLnJpZ2h0LHRyYW5zZm9ybTppLnRyYW5zZm9ybX07XCJub25lXCI9PT1hJiZ0LnNldFN0YXRpY1ZhbHVlKFwiZGlzcGxheVwiLGUuZGlzcGxheXx8XCJibG9ja1wiKSx0LnN5bmNSZW5kZXIoKTt2YXIgcz10Lm1lYXN1cmVWaWV3cG9ydEJveCgpO3JldHVybiBuLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBvPXQuZ2V0VmFsdWUobik7RnIobyxZcltuXShyLGwpKSxlW25dPVlyW25dKHMsaSl9KSksZX0odCxlLHUpO3JldHVybiBzLmxlbmd0aCYmcy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1yLl9fcmVhZCh0LDIpLG89blswXSxpPW5bMV07ZS5nZXRWYWx1ZShvKS5zZXQoaSl9KSksZS5zeW5jUmVuZGVyKCkse3RhcmdldDpmLHRyYW5zaXRpb25FbmQ6b319cmV0dXJue3RhcmdldDp0LHRyYW5zaXRpb25FbmQ6b319KGUsdCxuLG8pOnt0YXJnZXQ6dCx0cmFuc2l0aW9uRW5kOm99fXZhciBYcj17dHJlZVR5cGU6XCJkb21cIixyZWFkVmFsdWVGcm9tSW5zdGFuY2U6ZnVuY3Rpb24oZSx0KXtpZihLKHQpKXt2YXIgbj1TdCh0KTtyZXR1cm4gbiYmbi5kZWZhdWx0fHwwfXZhciByLG89KHI9ZSx3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShyKSk7cmV0dXJuKG5lKHQpP28uZ2V0UHJvcGVydHlWYWx1ZSh0KTpvW3RdKXx8MH0sc29ydE5vZGVQb3NpdGlvbjpmdW5jdGlvbihlLHQpe3JldHVybiAyJmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCk/MTotMX0sZ2V0QmFzZVRhcmdldDpmdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBudWxsPT09KG49ZS5zdHlsZSl8fHZvaWQgMD09PW4/dm9pZCAwOm5bdF19LG1lYXN1cmVWaWV3cG9ydEJveDpmdW5jdGlvbihlLHQpe3JldHVybiBNbihlLHQudHJhbnNmb3JtUGFnZVBvaW50KX0scmVzZXRUcmFuc2Zvcm06ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4udHJhbnNmb3JtVGVtcGxhdGU7dC5zdHlsZS50cmFuc2Zvcm09cj9yKHt9LFwiXCIpOlwibm9uZVwiLGUuc2NoZWR1bGVSZW5kZXIoKX0scmVzdG9yZVRyYW5zZm9ybTpmdW5jdGlvbihlLHQpe2Uuc3R5bGUudHJhbnNmb3JtPXQuc3R5bGUudHJhbnNmb3JtfSxyZW1vdmVWYWx1ZUZyb21SZW5kZXJTdGF0ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXQudmFycyxyPXQuc3R5bGU7ZGVsZXRlIG5bZV0sZGVsZXRlIHJbZV19LG1ha2VUYXJnZXRBbmltYXRhYmxlOmZ1bmN0aW9uKGUsdCxuLG8pe3ZhciBpPW4udHJhbnNmb3JtVmFsdWVzO3ZvaWQgMD09PW8mJihvPSEwKTt2YXIgYT10LnRyYW5zaXRpb24sbD10LnRyYW5zaXRpb25FbmQscz1yLl9fcmVzdCh0LFtcInRyYW5zaXRpb25cIixcInRyYW5zaXRpb25FbmRcIl0pLGM9cXQocyxhfHx7fSxlKTtpZihpJiYobCYmKGw9aShsKSkscyYmKHM9aShzKSksYyYmKGM9aShjKSkpLG8pe3p0KGUscyxjKTt2YXIgdT1mdW5jdGlvbihlLHQsbixvKXt2YXIgaT1mdW5jdGlvbihlLHQsbil7dmFyIG8saT1yLl9fcmVzdCh0LFtdKSxhPWUuZ2V0SW5zdGFuY2UoKTtpZighKGEgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpcmV0dXJue3RhcmdldDppLHRyYW5zaXRpb25FbmQ6bn07Zm9yKHZhciBsIGluIG4mJihuPXIuX19hc3NpZ24oe30sbikpLGUuZm9yRWFjaFZhbHVlKChmdW5jdGlvbihlKXt2YXIgdD1lLmdldCgpO2lmKHNyKHQpKXt2YXIgbj11cih0LGEpO24mJmUuc2V0KG4pfX0pKSxpKXt2YXIgcz1pW2xdO2lmKHNyKHMpKXt2YXIgYz11cihzLGEpO2MmJihpW2xdPWMsbiYmKG51bGwhPT0obz1uW2xdKSYmdm9pZCAwIT09b3x8KG5bbF09cykpKX19cmV0dXJue3RhcmdldDppLHRyYW5zaXRpb25FbmQ6bn19KGUsdCxvKTtyZXR1cm4gS3IoZSx0PWkudGFyZ2V0LG4sbz1pLnRyYW5zaXRpb25FbmQpfShlLHMsYyxsKTtsPXUudHJhbnNpdGlvbkVuZCxzPXUudGFyZ2V0fXJldHVybiByLl9fYXNzaWduKHt0cmFuc2l0aW9uOmEsdHJhbnNpdGlvbkVuZDpsfSxzKX0sc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzOlNlLGJ1aWxkOmZ1bmN0aW9uKGUsdCxuLHIsbyxpLGEpe3ZvaWQgMCE9PWUuaXNWaXNpYmxlJiYodC5zdHlsZS52aXNpYmlsaXR5PWUuaXNWaXNpYmxlP1widmlzaWJsZVwiOlwiaGlkZGVuXCIpO3ZhciBsPXIuaXNFbmFibGVkJiZvLmlzSHlkcmF0ZWQ7YWUodCxuLHIsbyxpLGEudHJhbnNmb3JtVGVtcGxhdGUsbD9rcjp2b2lkIDAsbD9Scjp2b2lkIDApfSxyZW5kZXI6T2V9LEpyPVRyKFhyKSxRcj1UcihyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sWHIpLHtnZXRCYXNlVGFyZ2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF19LHJlYWRWYWx1ZUZyb21JbnN0YW5jZTpmdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBLKHQpPyhudWxsPT09KG49U3QodCkpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmRlZmF1bHQpfHwwOih0PUxlLmhhcyh0KT90Ol9lKHQpLGUuZ2V0QXR0cmlidXRlKHQpKX0sc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzOmplLGJ1aWxkOmZ1bmN0aW9uKGUsdCxuLHIsbyxpLGEpe3ZhciBsPXIuaXNFbmFibGVkJiZvLmlzSHlkcmF0ZWQ7Q2UodCxuLHIsbyxpLGEudHJhbnNmb3JtVGVtcGxhdGUsbD9rcjp2b2lkIDAsbD9Scjp2b2lkIDApfSxyZW5kZXI6RWV9KSksZW89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gRihlKT9Rcih0LHtlbmFibGVIYXJkd2FyZUFjY2VsZXJhdGlvbjohMX0pOkpyKHQse2VuYWJsZUhhcmR3YXJlQWNjZWxlcmF0aW9uOiEwfSl9LHRvPXIuX19hc3NpZ24oci5fX2Fzc2lnbihyLl9fYXNzaWduKHIuX19hc3NpZ24oe30sb24pLHB0KSxsciksU3IpLG5vPSQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIFplKGUsdCx0byxlbyl9KSkscm89JChaZSksb289MDtmdW5jdGlvbiBpbygpe3ZhciBlPW9vO3JldHVybiBvbysrLGV9dmFyIGFvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2hpbGRyZW4sbj1lLmluaXRpYWwscj1lLmlzUHJlc2VudCxpPWUub25FeGl0Q29tcGxldGUsYT1lLmN1c3RvbSxsPWUucHJlc2VuY2VBZmZlY3RzTGF5b3V0LHM9XyhsbyksYz1fKGlvKSxmPW8udXNlTWVtbygoZnVuY3Rpb24oKXtyZXR1cm57aWQ6Yyxpbml0aWFsOm4saXNQcmVzZW50OnIsY3VzdG9tOmEsb25FeGl0Q29tcGxldGU6ZnVuY3Rpb24oZSl7cy5zZXQoZSwhMCk7dmFyIHQ9ITA7cy5mb3JFYWNoKChmdW5jdGlvbihlKXtlfHwodD0hMSl9KSksdCYmKG51bGw9PWl8fGkoKSl9LHJlZ2lzdGVyOmZ1bmN0aW9uKGUpe3JldHVybiBzLnNldChlLCExKSxmdW5jdGlvbigpe3JldHVybiBzLmRlbGV0ZShlKX19fX0pLGw/dm9pZCAwOltyXSk7cmV0dXJuIG8udXNlTWVtbygoZnVuY3Rpb24oKXtzLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHMuc2V0KHQsITEpfSkpfSksW3JdKSx1LnVzZUVmZmVjdCgoZnVuY3Rpb24oKXshciYmIXMuc2l6ZSYmKG51bGw9PWl8fGkoKSl9KSxbcl0pLHUuY3JlYXRlRWxlbWVudCh4LlByb3ZpZGVyLHt2YWx1ZTpmfSx0KX07ZnVuY3Rpb24gbG8oKXtyZXR1cm4gbmV3IE1hcH1mdW5jdGlvbiBzbyhlKXtyZXR1cm4gZS5rZXl8fFwiXCJ9ZnVuY3Rpb24gY28oZSx0LG4pe3ZvaWQgMD09PW4mJihuPXt9KTt2YXIgcj1lZShlKT9lOlZ0KGUpO3JldHVybiBJdChcIlwiLHIsdCxuKSx7c3RvcDpmdW5jdGlvbigpe3JldHVybiByLnN0b3AoKX19fWZ1bmN0aW9uIHVvKCl7dmFyIGU9VnQoMSksdD17bGVhZDp2b2lkIDAsZm9sbG93OnZvaWQgMCxjcm9zc2ZhZGVPcGFjaXR5OiExLHByZXNlcnZlRm9sbG93T3BhY2l0eTohMX0sbj1yLl9fYXNzaWduKHt9LHQpLG89e30saT17fSxhPSExLGM9bnVsbCx1PTA7ZnVuY3Rpb24gZihuLG8pe3ZhciBpPXQubGVhZCxsPXQuZm9sbG93O2E9ITAsYz1udWxsO3ZhciB1PSExLGY9ZnVuY3Rpb24oKXt1PSEwLGkmJmkuc2NoZWR1bGVSZW5kZXIoKSxsJiZsLnNjaGVkdWxlUmVuZGVyKCl9LHA9ZnVuY3Rpb24oKXthPSExLGM9cy5nZXRGcmFtZURhdGEoKS50aW1lc3RhbXB9O3JldHVybiBvPW8mJlB0KG8sXCJjcm9zc2ZhZGVcIiksY28oZSxuLHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxvKSx7b25VcGRhdGU6ZixvbkNvbXBsZXRlOmZ1bmN0aW9uKCl7dT9wKCk6KGUuc2V0KG4pLGQuZGVmYXVsdC5yZWFkKHApKSxmKCl9fSkpfXJldHVybntpc0FjdGl2ZTpmdW5jdGlvbigpe3JldHVybiBvJiYoYXx8cy5nZXRGcmFtZURhdGEoKS50aW1lc3RhbXA9PT1jKX0sZnJvbUxlYWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGYoMCxlKX0sdG9MZWFkOmZ1bmN0aW9uKHIpe3ZhciBvPTA7cmV0dXJuIHQucHJldlZhbHVlc3x8dC5mb2xsb3c/bi5sZWFkPT09dC5mb2xsb3cmJm4uZm9sbG93PT09dC5sZWFkJiYobz0xLWUuZ2V0KCkpOm89MSxlLnNldChvKSxmKDEscil9LHJlc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUuc2V0KDEpfSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGUuc3RvcCgpfSxnZXRDcm9zc2ZhZGVTdGF0ZTpmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbixyLGE9cy5nZXRGcmFtZURhdGEoKS50aW1lc3RhbXAsYz10LmxlYWQsZj10LmZvbGxvdztpZihhIT09dSYmYyl7dT1hO3ZhciBkPWMuZ2V0TGF0ZXN0VmFsdWVzKCk7T2JqZWN0LmFzc2lnbihvLGQpO3ZhciBwPWY/Zi5nZXRMYXRlc3RWYWx1ZXMoKTp0LnByZXZWYWx1ZXM7T2JqZWN0LmFzc2lnbihpLHApO3ZhciBoPWUuZ2V0KCksZz1udWxsIT09KG49ZC5vcGFjaXR5KSYmdm9pZCAwIT09bj9uOjEsdj1udWxsIT09KHI9bnVsbD09cD92b2lkIDA6cC5vcGFjaXR5KSYmdm9pZCAwIT09cj9yOjE7dC5jcm9zc2ZhZGVPcGFjaXR5JiZmPyhvLm9wYWNpdHk9bC5taXgoITEhPT1mLmlzVmlzaWJsZT8wOnYsZyxmbyhoKSksaS5vcGFjaXR5PXQucHJlc2VydmVGb2xsb3dPcGFjaXR5P3Y6bC5taXgodiwwLHBvKGgpKSk6Znx8KG8ub3BhY2l0eT1sLm1peCh2LGcsaCkpLGZ1bmN0aW9uKGUsdCxuLHIsbyxpKXtmb3IodmFyIGE9MDthPHZvO2ErKyl7dmFyIHM9XCJib3JkZXJcIitnb1thXStcIlJhZGl1c1wiLGM9bW8ocixzKSx1PW1vKG4scyk7aWYoKHZvaWQgMCE9PWN8fHZvaWQgMCE9PXUpJiYoY3x8KGM9MCksdXx8KHU9MCksXCJudW1iZXJcIj09dHlwZW9mIGMmJlwibnVtYmVyXCI9PXR5cGVvZiB1KSl7dmFyIGY9TWF0aC5tYXgobC5taXgoYyx1LGkpLDApO2Vbc109dFtzXT1mfX1pZihyLnJvdGF0ZXx8bi5yb3RhdGUpe3ZhciBkPWwubWl4KHIucm90YXRlfHwwLG4ucm90YXRlfHwwLGkpO2Uucm90YXRlPXQucm90YXRlPWR9IW8mJm4uYmFja2dyb3VuZENvbG9yJiZyLmJhY2tncm91bmRDb2xvciYmKGUuYmFja2dyb3VuZENvbG9yPXQuYmFja2dyb3VuZENvbG9yPWwubWl4Q29sb3Ioci5iYWNrZ3JvdW5kQ29sb3Isbi5iYWNrZ3JvdW5kQ29sb3IpKGkpKX0obyxpLGQscHx8e30sQm9vbGVhbihmKSxoKX19KCksbj09PXQubGVhZD9vOm49PT10LmZvbGxvdz9pOnZvaWQgMH0sc2V0T3B0aW9uczpmdW5jdGlvbihlKXtuPXQsdD1lLG89e30saT17fX0sZ2V0TGF0ZXN0VmFsdWVzOmZ1bmN0aW9uKCl7cmV0dXJuIG99fX12YXIgZm89aG8oMCwuNSxsLmNpcmNPdXQpLHBvPWhvKC41LC45NSxsLmxpbmVhcik7ZnVuY3Rpb24gaG8oZSx0LG4pe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gcjxlPzA6cj50PzE6bihsLnByb2dyZXNzKGUsdCxyKSl9fXZhciBnbz1bXCJUb3BMZWZ0XCIsXCJUb3BSaWdodFwiLFwiQm90dG9tTGVmdFwiLFwiQm90dG9tUmlnaHRcIl0sdm89Z28ubGVuZ3RoO2Z1bmN0aW9uIG1vKGUsdCl7dmFyIG47cmV0dXJuIG51bGwhPT0obj1lW3RdKSYmdm9pZCAwIT09bj9uOmUuYm9yZGVyUmFkaXVzfXZhciBDbz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIHQ9bnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiB0LmNoaWxkcmVuPW5ldyBTZXQsdC5zdGFja3M9bmV3IE1hcCx0Lmhhc01vdW50ZWQ9ITEsdC51cGRhdGVTY2hlZHVsZWQ9ITEsdC5yZW5kZXJTY2hlZHVsZWQ9ITEsdC5zeW5jQ29udGV4dD1yLl9fYXNzaWduKHIuX19hc3NpZ24oe30sYnIoKSkse3N5bmNVcGRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHQuc2NoZWR1bGVVcGRhdGUoZSl9LGZvcmNlVXBkYXRlOmZ1bmN0aW9uKCl7dC5zeW5jQ29udGV4dD1yLl9fYXNzaWduKHt9LHQuc3luY0NvbnRleHQpLHQuc2NoZWR1bGVVcGRhdGUoITApfSxyZWdpc3RlcjpmdW5jdGlvbihlKXtyZXR1cm4gdC5hZGRDaGlsZChlKX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3JldHVybiB0LnJlbW92ZUNoaWxkKGUpfX0pLHR9cmV0dXJuIHIuX19leHRlbmRzKHQsZSksdC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt0aGlzLmhhc01vdW50ZWQ9ITB9LHQucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT1mdW5jdGlvbigpe3RoaXMuc3RhcnRMYXlvdXRBbmltYXRpb24oKX0sdC5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVuZGVyU2NoZWR1bGVkPSEwLCEwfSx0LnByb3RvdHlwZS5zdGFydExheW91dEFuaW1hdGlvbj1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5yZW5kZXJTY2hlZHVsZWQ9dGhpcy51cGRhdGVTY2hlZHVsZWQ9ITE7dmFyIHQ9dGhpcy5wcm9wcy50eXBlO3RoaXMuY2hpbGRyZW4uZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5pc1ByZXNlbnQ/ZS5wcmVzZW5jZSE9PWlyLkVudGVyaW5nJiYoZS5wcmVzZW5jZT1lLnByZXNlbmNlPT09aXIuRXhpdGluZz9pci5FbnRlcmluZzppci5QcmVzZW50KTplLnByZXNlbmNlPWlyLkV4aXRpbmd9KSksdGhpcy51cGRhdGVTdGFja3MoKTt2YXIgbj17bGF5b3V0UmVhZHk6ZnVuY3Rpb24obil7dm9pZCAwIT09bi5nZXRMYXlvdXRJZCgpP2UuZ2V0U3RhY2sobikuYW5pbWF0ZShuLFwiY3Jvc3NmYWRlXCI9PT10KTpuLm5vdGlmeUxheW91dFJlYWR5KCl9LHBhcmVudDp0aGlzLmNvbnRleHQudmlzdWFsRWxlbWVudH07dGhpcy5jaGlsZHJlbi5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gZS5zeW5jQ29udGV4dC5hZGQodCl9KSksdGhpcy5zeW5jQ29udGV4dC5mbHVzaChuKSx0aGlzLnN0YWNrcy5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGVhclNuYXBzaG90KCl9KSl9LHQucHJvdG90eXBlLnVwZGF0ZVN0YWNrcz1mdW5jdGlvbigpe3RoaXMuc3RhY2tzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLnVwZGF0ZUxlYWRBbmRGb2xsb3coKX0pKX0sdC5wcm90b3R5cGUuc2NoZWR1bGVVcGRhdGU9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9ITEpLCFlJiZ0aGlzLnVwZGF0ZVNjaGVkdWxlZHx8KHRoaXMudXBkYXRlU2NoZWR1bGVkPSEwLHRoaXMuY2hpbGRyZW4uZm9yRWFjaCgoZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0hMSxuPXt9LHI9MDtyPHoubGVuZ3RoO3IrKyl7dmFyIG89XCJyb3RhdGVcIit6W3JdO2UuaGFzVmFsdWUobykmJjAhPT1lLmdldFN0YXRpY1ZhbHVlKG8pJiYodD0hMCxuW29dPWUuZ2V0U3RhdGljVmFsdWUobyksZS5zZXRTdGF0aWNWYWx1ZShvLDApKX1pZih0KXtmb3IodmFyIG8gaW4gZS5zeW5jUmVuZGVyKCksbillLnNldFN0YXRpY1ZhbHVlKG8sbltvXSk7ZS5zY2hlZHVsZVJlbmRlcigpfX0oZSksZS5zaG91bGRSZXNldFRyYW5zZm9ybSgpJiZlLnJlc2V0VHJhbnNmb3JtKCl9KSksdGhpcy5jaGlsZHJlbi5mb3JFYWNoKEFuKSx0aGlzLnN0YWNrcy5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS51cGRhdGVTbmFwc2hvdCgpfSkpLCFlJiZ0aGlzLnJlbmRlclNjaGVkdWxlZHx8KHRoaXMucmVuZGVyU2NoZWR1bGVkPSEwLHRoaXMuZm9yY2VVcGRhdGUoKSkpfSx0LnByb3RvdHlwZS5hZGRDaGlsZD1mdW5jdGlvbihlKXt0aGlzLmNoaWxkcmVuLmFkZChlKSx0aGlzLmFkZFRvU3RhY2soZSksZS5wcmVzZW5jZT10aGlzLmhhc01vdW50ZWQ/aXIuRW50ZXJpbmc6aXIuUHJlc2VudH0sdC5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ9ZnVuY3Rpb24oZSl7dGhpcy5zY2hlZHVsZVVwZGF0ZSgpLHRoaXMuY2hpbGRyZW4uZGVsZXRlKGUpLHRoaXMucmVtb3ZlRnJvbVN0YWNrKGUpfSx0LnByb3RvdHlwZS5hZGRUb1N0YWNrPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0U3RhY2soZSk7bnVsbD09dHx8dC5hZGQoZSl9LHQucHJvdG90eXBlLnJlbW92ZUZyb21TdGFjaz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldFN0YWNrKGUpO251bGw9PXR8fHQucmVtb3ZlKGUpfSx0LnByb3RvdHlwZS5nZXRTdGFjaz1mdW5jdGlvbihlKXt2YXIgdCxuLG8saSxhLGwscyxjLHU9ZS5nZXRMYXlvdXRJZCgpO2lmKHZvaWQgMCE9PXUpcmV0dXJuIXRoaXMuc3RhY2tzLmhhcyh1KSYmdGhpcy5zdGFja3Muc2V0KHUsKGk9bmV3IFNldCxhPXtsZWFkSXNFeGl0aW5nOiExfSxsPXIuX19hc3NpZ24oe30sYSkscz11bygpLGM9ITEse2FkZDpmdW5jdGlvbihlKXtlLnNldENyb3NzZmFkZXIocyksaS5hZGQoZSksbyYmKGUucHJldkRyYWdDdXJzb3I9byksYS5sZWFkfHwoYS5sZWFkPWUpfSxyZW1vdmU6ZnVuY3Rpb24oZSl7aS5kZWxldGUoZSl9LGdldExlYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5sZWFkfSx1cGRhdGVTbmFwc2hvdDpmdW5jdGlvbigpe2lmKGEubGVhZCl7dD1zLmlzQWN0aXZlKCk/cy5nZXRMYXRlc3RWYWx1ZXMoKTphLmxlYWQuZ2V0TGF0ZXN0VmFsdWVzKCksbj1hLmxlYWQucHJldlZpZXdwb3J0Qm94O3ZhciBlPW5yLmdldChhLmxlYWQpO2UmJmUuaXNEcmFnZ2luZyYmKG89ZS5jdXJzb3JQcm9ncmVzcyl9fSxjbGVhclNuYXBzaG90OmZ1bmN0aW9uKCl7bz1uPXZvaWQgMH0sdXBkYXRlTGVhZEFuZEZvbGxvdzpmdW5jdGlvbigpe3ZhciBlLG4sbztsPXIuX19hc3NpZ24oe30sYSk7Zm9yKHZhciB1PUFycmF5LmZyb20oaSksZj11Lmxlbmd0aDtmLS07Zj49MCl7dmFyIGQ9dVtmXTtpZihuJiYobnVsbCE9b3x8KG89ZCkpLG51bGwhPW58fChuPWQpLG4mJm8pYnJlYWt9YS5sZWFkPW4sYS5mb2xsb3c9byxhLmxlYWRJc0V4aXRpbmc9KG51bGw9PT0oZT1hLmxlYWQpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnByZXNlbmNlKT09PWlyLkV4aXRpbmcscy5zZXRPcHRpb25zKHtsZWFkOm4sZm9sbG93Om8scHJldlZhbHVlczp0LGNyb3NzZmFkZU9wYWNpdHk6KG51bGw9PW8/dm9pZCAwOm8uaXNQcmVzZW5jZVJvb3QpfHwobnVsbD09bj92b2lkIDA6bi5pc1ByZXNlbmNlUm9vdCl9KSxhLmxlYWQ9PT1sLmZvbGxvd3x8bC5sZWFkPT09YS5sZWFkJiZsLmxlYWRJc0V4aXRpbmc9PT1hLmxlYWRJc0V4aXRpbmd8fChjPSEwKX0sYW5pbWF0ZTpmdW5jdGlvbihlLHQpe3ZhciByO2lmKHZvaWQgMD09PXQmJih0PSExKSxlPT09YS5sZWFkKXt0P2UucG9pbnRUbyhhLmxlYWQpOmUuc2V0VmlzaWJpbGl0eSghMCk7dmFyIG89e30saT1udWxsPT09KHI9YS5mb2xsb3cpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmdldFByb2plY3Rpb25QYXJlbnQoKTtpZihpJiYoby5wcmV2UGFyZW50PWkpLGUucHJlc2VuY2U9PT1pci5FbnRlcmluZz9vLm9yaWdpbkJveD1hLmZvbGxvdz9hLmZvbGxvdy5wcmV2Vmlld3BvcnRCb3g6bjplLnByZXNlbmNlPT09aXIuRXhpdGluZyYmKG8udGFyZ2V0Qm94PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIG51bGw9PT0oZT1hLmZvbGxvdyl8fHZvaWQgMD09PWU/dm9pZCAwOmUuZ2V0TGF5b3V0U3RhdGUoKS5sYXlvdXR9KCkpLGMpe2M9ITE7dmFyIGw9ZS5nZXREZWZhdWx0VHJhbnNpdGlvbigpO2UucHJlc2VuY2U9PT1pci5FbnRlcmluZz9zLnRvTGVhZChsKTpzLmZyb21MZWFkKGwpfWUubm90aWZ5TGF5b3V0UmVhZHkobyl9ZWxzZSB0P2EubGVhZCYmZS5wb2ludFRvKGEubGVhZCk6ZS5zZXRWaXNpYmlsaXR5KCExKX19KSksdGhpcy5zdGFja3MuZ2V0KHUpfSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdS5jcmVhdGVFbGVtZW50KF9yLlByb3ZpZGVyLHt2YWx1ZTp0aGlzLnN5bmNDb250ZXh0fSx0aGlzLnByb3BzLmNoaWxkcmVuKX0sdC5jb250ZXh0VHlwZT13LHR9KHUuQ29tcG9uZW50KTtmdW5jdGlvbiB5byhlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlfXZhciB3bz1yLl9fYXNzaWduKHIuX19hc3NpZ24oe3JlbmRlcmVyOmVvfSxvbikscHQpLGJvPXIuX19hc3NpZ24oci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LHdvKSxsciksU3IpO2Z1bmN0aW9uIHhvKGUpe3ZhciB0PV8oKGZ1bmN0aW9uKCl7cmV0dXJuIFZ0KGUpfSkpO2lmKG8udXNlQ29udGV4dCh5KS5pc1N0YXRpYyl7dmFyIG49ci5fX3JlYWQoby51c2VTdGF0ZShlKSwyKVsxXTtvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdC5vbkNoYW5nZShuKX0pLFtdKX1yZXR1cm4gdH1mdW5jdGlvbiBfbyhlLHQpe28udXNlRWZmZWN0KChmdW5jdGlvbigpe2lmKGVlKGUpKXJldHVybiBlLm9uQ2hhbmdlKHQpfSksW3RdKX1mdW5jdGlvbiBPbyhlLHQpe3ZhciBuPXhvKHQoKSkscj1mdW5jdGlvbigpe3JldHVybiBuLnNldCh0KCkpfTtyZXR1cm4gcigpLGZ1bmN0aW9uKGUsdCl7by51c2VFZmZlY3QoKGZ1bmN0aW9uKCl7dmFyIG49ZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLm9uQ2hhbmdlKHQpfSkpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlKCl9KSl9fSkpfShlLChmdW5jdGlvbigpe3JldHVybiBkLmRlZmF1bHQudXBkYXRlKHIsITEsITApfSkpLG59dmFyIExvLEVvPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgZSYmZS5taXh9KGUpP2UubWl4OnZvaWQgMH07ZnVuY3Rpb24gU28oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07dmFyIG49IUFycmF5LmlzQXJyYXkoZVswXSksbz1uPzA6LTEsaT1lWzArb10sYT1lWzErb10scz1lWzIrb10sYz1lWzMrb10sdT1sLmludGVycG9sYXRlKGEscyxyLl9fYXNzaWduKHttaXhlcjpFbyhzWzBdKX0sYykpO3JldHVybiBuP3UoaSk6dX1mdW5jdGlvbiBqbyhlLHQsbixvKXt2YXIgaT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6U28odCxuLG8pO3JldHVybiBBcnJheS5pc0FycmF5KGUpP01vKGUsaSk6TW8oW2VdLChmdW5jdGlvbihlKXt2YXIgdD1yLl9fcmVhZChlLDEpWzBdO3JldHVybiBpKHQpfSkpfWZ1bmN0aW9uIE1vKGUsdCl7dmFyIG49XygoZnVuY3Rpb24oKXtyZXR1cm5bXX0pKTtyZXR1cm4gT28oZSwoZnVuY3Rpb24oKXtuLmxlbmd0aD0wO2Zvcih2YXIgcj1lLmxlbmd0aCxvPTA7bzxyO28rKyluW29dPWVbb10uZ2V0KCk7cmV0dXJuIHQobil9KSl9ZnVuY3Rpb24ga28oKXtyZXR1cm57c2Nyb2xsWDpWdCgwKSxzY3JvbGxZOlZ0KDApLHNjcm9sbFhQcm9ncmVzczpWdCgwKSxzY3JvbGxZUHJvZ3Jlc3M6VnQoMCl9fWZ1bmN0aW9uIFJvKGUsdCxuKXtuLnNldChlJiZ0P2UvdDowKX1mdW5jdGlvbiBQbyhlLHQpe3ZhciBuPWZ1bmN0aW9uKCl7dmFyIG49dCgpLHI9bi54T2Zmc2V0LG89bi55T2Zmc2V0LGk9bi54TWF4T2Zmc2V0LGE9bi55TWF4T2Zmc2V0O2Uuc2Nyb2xsWC5zZXQociksZS5zY3JvbGxZLnNldChvKSxSbyhyLGksZS5zY3JvbGxYUHJvZ3Jlc3MpLFJvKG8sYSxlLnNjcm9sbFlQcm9ncmVzcyl9O3JldHVybiBuKCksbn1mdW5jdGlvbiBJbygpe3JldHVybnt4T2Zmc2V0OndpbmRvdy5wYWdlWE9mZnNldCx5T2Zmc2V0OndpbmRvdy5wYWdlWU9mZnNldCx4TWF4T2Zmc2V0OmRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGgtd2luZG93LmlubmVyV2lkdGgseU1heE9mZnNldDpkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodC13aW5kb3cuaW5uZXJIZWlnaHR9fXZhciBBbyxUbz0hMTtmdW5jdGlvbiBIbygpe3ZhciBlPSExLHQ9W10sbj1uZXcgU2V0LG89e3N1YnNjcmliZTpmdW5jdGlvbihlKXtyZXR1cm4gbi5hZGQoZSksZnVuY3Rpb24oKXtuLmRlbGV0ZShlKX19LHN0YXJ0OmZ1bmN0aW9uKHIsbyl7aWYoZSl7dmFyIGk9W107cmV0dXJuIG4uZm9yRWFjaCgoZnVuY3Rpb24oZSl7aS5wdXNoKFl0KGUscix7dHJhbnNpdGlvbk92ZXJyaWRlOm99KSl9KSksUHJvbWlzZS5hbGwoaSl9cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihlKXt0LnB1c2goe2FuaW1hdGlvbjpbcixvXSxyZXNvbHZlOmV9KX0pKX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBpLmludmFyaWFudChlLFwiY29udHJvbHMuc2V0KCkgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGFmdGVyIGEgY29tcG9uZW50IGhhcyBtb3VudGVkLiBDb25zaWRlciBjYWxsaW5nIHdpdGhpbiBhIHVzZUVmZmVjdCBob29rLlwiKSxuLmZvckVhY2goKGZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe0FycmF5LmlzQXJyYXkodCk/V3QoZSx0KTpcInN0cmluZ1wiPT10eXBlb2YgdD9XdChlLFt0XSk6VXQoZSx0KX0oZSx0KX0pKX0sc3RvcDpmdW5jdGlvbigpe24uZm9yRWFjaCgoZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUpe2UuZm9yRWFjaFZhbHVlKChmdW5jdGlvbihlKXtyZXR1cm4gZS5zdG9wKCl9KSl9KGUpfSkpfSxtb3VudDpmdW5jdGlvbigpe3JldHVybiBlPSEwLHQuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5hbmltYXRpb24sbj1lLnJlc29sdmU7by5zdGFydC5hcHBseShvLHIuX19zcHJlYWRBcnJheShbXSxyLl9fcmVhZCh0KSkpLnRoZW4obil9KSksZnVuY3Rpb24oKXtlPSExLG8uc3RvcCgpfX19O3JldHVybiBvfXZhciBCbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmNvbXBvbmVudENvbnRyb2xzPW5ldyBTZXR9cmV0dXJuIGUucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLmNvbXBvbmVudENvbnRyb2xzLmFkZChlKSxmdW5jdGlvbigpe3JldHVybiB0LmNvbXBvbmVudENvbnRyb2xzLmRlbGV0ZShlKX19LGUucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGUsdCl7dGhpcy5jb21wb25lbnRDb250cm9scy5mb3JFYWNoKChmdW5jdGlvbihuKXtuLnN0YXJ0KGUubmF0aXZlRXZlbnR8fGUsdCl9KSl9LGUucHJvdG90eXBlLnVwZGF0ZUNvbnN0cmFpbnRzPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPSEwKSx0aGlzLmNvbXBvbmVudENvbnRyb2xzLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UudXBkYXRlQ29uc3RyYWludHMoKX0pKSxlJiZRbigpfSxlfSgpLFZvPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBCb30sRG89ZnVuY3Rpb24oKXtyZXR1cm57fX0sWm89VHIoe2J1aWxkOmZ1bmN0aW9uKCl7fSxtZWFzdXJlVmlld3BvcnRCb3g6ZnVuY3Rpb24oKXtyZXR1cm57eDp7bWluOjAsbWF4OjF9LHk6e21pbjowLG1heDoxfX19LHJlc2V0VHJhbnNmb3JtOmZ1bmN0aW9uKCl7fSxyZXN0b3JlVHJhbnNmb3JtOmZ1bmN0aW9uKCl7fSxyZW1vdmVWYWx1ZUZyb21SZW5kZXJTdGF0ZTpmdW5jdGlvbigpe30scmVuZGVyOmZ1bmN0aW9uKCl7fSxzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHM6RG8scmVhZFZhbHVlRnJvbUluc3RhbmNlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbi5pbml0aWFsU3RhdGVbdF18fDB9LG1ha2VUYXJnZXRBbmltYXRhYmxlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC50cmFuc2l0aW9uLG89dC50cmFuc2l0aW9uRW5kLGk9ci5fX3Jlc3QodCxbXCJ0cmFuc2l0aW9uXCIsXCJ0cmFuc2l0aW9uRW5kXCJdKTtyZXR1cm4genQoZSxpLHF0KGksbnx8e30sZSkpLHIuX19hc3NpZ24oe3RyYW5zaXRpb246bix0cmFuc2l0aW9uRW5kOm99LGkpfX0pLCRvPVRlKHtzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHM6RG8sY3JlYXRlUmVuZGVyU3RhdGU6RG99KSxObz1mdW5jdGlvbihlKXtyZXR1cm4gZT4uMDAxPzEvZToxZTV9LEZvPSExO3QuQW5pbWF0ZVByZXNlbmNlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2hpbGRyZW4sbj1lLmN1c3RvbSxpPWUuaW5pdGlhbCxhPXZvaWQgMD09PWl8fGksbD1lLm9uRXhpdENvbXBsZXRlLHM9ZS5leGl0QmVmb3JlRW50ZXIsYz1lLnByZXNlbmNlQWZmZWN0c0xheW91dCxmPXZvaWQgMD09PWN8fGMsZD1mdW5jdGlvbigpe3ZhciBlPW8udXNlUmVmKCExKSx0PXIuX19yZWFkKG8udXNlU3RhdGUoMCksMiksbj10WzBdLGk9dFsxXTtyZXR1cm4gZnQoKGZ1bmN0aW9uKCl7cmV0dXJuIGUuY3VycmVudD0hMH0pKSxvLnVzZUNhbGxiYWNrKChmdW5jdGlvbigpeyFlLmN1cnJlbnQmJmkobisxKX0pLFtuXSl9KCkscD1vLnVzZUNvbnRleHQoX3IpO0xyKHApJiYoZD1wLmZvcmNlVXBkYXRlKTt2YXIgaD1vLnVzZVJlZighMCksZz1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gby5DaGlsZHJlbi5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe28uaXNWYWxpZEVsZW1lbnQoZSkmJnQucHVzaChlKX0pKSx0fSh0KSx2PW8udXNlUmVmKGcpLG09by51c2VSZWYobmV3IE1hcCkuY3VycmVudCxDPW8udXNlUmVmKG5ldyBTZXQpLmN1cnJlbnQ7aWYoZnVuY3Rpb24oZSx0KXtlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPXNvKGUpO3Quc2V0KG4sZSl9KSl9KGcsbSksaC5jdXJyZW50KXJldHVybiBoLmN1cnJlbnQ9ITEsdS5jcmVhdGVFbGVtZW50KHUuRnJhZ21lbnQsbnVsbCxnLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHUuY3JlYXRlRWxlbWVudChhbyx7a2V5OnNvKGUpLGlzUHJlc2VudDohMCxpbml0aWFsOiEhYSYmdm9pZCAwLHByZXNlbmNlQWZmZWN0c0xheW91dDpmfSxlKX0pKSk7Zm9yKHZhciB5PXIuX19zcHJlYWRBcnJheShbXSxyLl9fcmVhZChnKSksdz12LmN1cnJlbnQubWFwKHNvKSxiPWcubWFwKHNvKSx4PXcubGVuZ3RoLF89MDtfPHg7XysrKXt2YXIgTz13W19dOy0xPT09Yi5pbmRleE9mKE8pP0MuYWRkKE8pOkMuZGVsZXRlKE8pfXJldHVybiBzJiZDLnNpemUmJih5PVtdKSxDLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKC0xPT09Yi5pbmRleE9mKGUpKXt2YXIgdD1tLmdldChlKTtpZih0KXt2YXIgcj13LmluZGV4T2YoZSk7eS5zcGxpY2UociwwLHUuY3JlYXRlRWxlbWVudChhbyx7a2V5OnNvKHQpLGlzUHJlc2VudDohMSxvbkV4aXRDb21wbGV0ZTpmdW5jdGlvbigpe20uZGVsZXRlKGUpLEMuZGVsZXRlKGUpO3ZhciB0PXYuY3VycmVudC5maW5kSW5kZXgoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleT09PWV9KSk7di5jdXJyZW50LnNwbGljZSh0LDEpLEMuc2l6ZXx8KHYuY3VycmVudD1nLGQoKSxsJiZsKCkpfSxjdXN0b206bixwcmVzZW5jZUFmZmVjdHNMYXlvdXQ6Zn0sdCkpfX19KSkseT15Lm1hcCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5rZXk7cmV0dXJuIEMuaGFzKHQpP2U6dS5jcmVhdGVFbGVtZW50KGFvLHtrZXk6c28oZSksaXNQcmVzZW50OiEwLHByZXNlbmNlQWZmZWN0c0xheW91dDpmfSxlKX0pKSx2LmN1cnJlbnQ9eSx1LmNyZWF0ZUVsZW1lbnQodS5GcmFnbWVudCxudWxsLEMuc2l6ZT95OnkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gby5jbG9uZUVsZW1lbnQoZSl9KSkpfSx0LkFuaW1hdGVTaGFyZWRMYXlvdXQ9Q28sdC5EcmFnQ29udHJvbHM9Qm8sdC5GbGF0VHJlZT1Bcix0LkZyYW1lclRyZWVMYXlvdXRDb250ZXh0PU9yLHQuTGF5b3V0R3JvdXBDb250ZXh0PU0sdC5MYXp5TW90aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2hpbGRyZW4sbj1lLmZlYXR1cmVzLGk9ZS5zdHJpY3QsYT12b2lkIDAhPT1pJiZpLGw9ci5fX3JlYWQoby51c2VTdGF0ZSgheW8obikpLDIpWzFdLHM9by51c2VSZWYodm9pZCAwKTtpZigheW8obikpe3ZhciBjPW4ucmVuZGVyZXIsZj1yLl9fcmVzdChuLFtcInJlbmRlcmVyXCJdKTtzLmN1cnJlbnQ9YyxnKGYpfXJldHVybiBvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXt5byhuKSYmbigpLnRoZW4oKGZ1bmN0aW9uKGUpe3ZhciB0PWUucmVuZGVyZXI7ZyhyLl9fcmVzdChlLFtcInJlbmRlcmVyXCJdKSkscy5jdXJyZW50PXQsbCghMCl9KSl9KSxbXSksdS5jcmVhdGVFbGVtZW50KHYuUHJvdmlkZXIse3ZhbHVlOntyZW5kZXJlcjpzLmN1cnJlbnQsc3RyaWN0OmF9fSx0KX0sdC5Nb3Rpb25Db25maWc9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jaGlsZHJlbixuPXIuX19yZXN0KGUsW1wiY2hpbGRyZW5cIl0pOyhuPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxvLnVzZUNvbnRleHQoeSkpLG4pKS5pc1N0YXRpYz1fKChmdW5jdGlvbigpe3JldHVybiBuLmlzU3RhdGljfSkpO3ZhciBpPVwib2JqZWN0XCI9PXR5cGVvZiBuLnRyYW5zaXRpb24/bi50cmFuc2l0aW9uLnRvU3RyaW5nKCk6XCJcIixhPW8udXNlTWVtbygoZnVuY3Rpb24oKXtyZXR1cm4gbn0pLFtpLG4udHJhbnNmb3JtUGFnZVBvaW50XSk7cmV0dXJuIHUuY3JlYXRlRWxlbWVudCh5LlByb3ZpZGVyLHt2YWx1ZTphfSx0KX0sdC5Nb3Rpb25Db25maWdDb250ZXh0PXksdC5Nb3Rpb25WYWx1ZT1CdCx0LlByZXNlbmNlQ29udGV4dD14LHQuU2hhcmVkTGF5b3V0Q29udGV4dD1fcix0LmFkZFNjYWxlQ29ycmVjdGlvbj1XLHQuYW5pbWF0ZT1jbyx0LmFuaW1hdGVWaXN1YWxFbGVtZW50PVl0LHQuYW5pbWF0aW9uQ29udHJvbHM9SG8sdC5iYXRjaExheW91dD1Kbix0LmNyZWF0ZUJhdGNoZXI9YnIsdC5jcmVhdGVDcm9zc2ZhZGVyPXVvLHQuY3JlYXRlRG9tTW90aW9uQ29tcG9uZW50PWZ1bmN0aW9uKGUpe3JldHVybiBaKFplKGUse2ZvcndhcmRNb3Rpb25Qcm9wczohMX0sdG8sZW8pKX0sdC5jcmVhdGVNb3Rpb25Db21wb25lbnQ9Wix0LmRvbUFuaW1hdGlvbj13byx0LmRvbU1heD1ibyx0LmZsdXNoTGF5b3V0PVFuLHQuaXNWYWxpZE1vdGlvblByb3A9ZmUsdC5tPXJvLHQubW90aW9uPW5vLHQubW90aW9uVmFsdWU9VnQsdC5yZXNvbHZlTW90aW9uVmFsdWU9SWUsdC5zbmFwc2hvdFZpZXdwb3J0Qm94PUFuLHQudHJhbnNmb3JtPVNvLHQudXNlQW5pbWF0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9XyhIbyk7cmV0dXJuIG8udXNlRWZmZWN0KGUubW91bnQsW10pLGV9LHQudXNlQ3ljbGU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07dmFyIG49by51c2VSZWYoMCksaT1yLl9fcmVhZChvLnVzZVN0YXRlKGVbbi5jdXJyZW50XSksMiksYT1pWzBdLHM9aVsxXTtyZXR1cm5bYSxmdW5jdGlvbih0KXtuLmN1cnJlbnQ9XCJudW1iZXJcIiE9dHlwZW9mIHQ/bC53cmFwKDAsZS5sZW5ndGgsbi5jdXJyZW50KzEpOnQscyhlW24uY3VycmVudF0pfV19LHQudXNlRGVwcmVjYXRlZEFuaW1hdGVkU3RhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ci5fX3JlYWQoby51c2VTdGF0ZShlKSwyKSxuPXRbMF0saT10WzFdLGE9JG8oe30sITEpLGw9XygoZnVuY3Rpb24oKXtyZXR1cm4gWm8oe3Byb3BzOnt9LHZpc3VhbFN0YXRlOmF9LHtpbml0aWFsU3RhdGU6ZX0pfSkpO3JldHVybiBvLnVzZUVmZmVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gbC5tb3VudCh7fSksbC51bm1vdW50KCl9KSxbXSksby51c2VFZmZlY3QoKGZ1bmN0aW9uKCl7bC5zZXRQcm9wcyh7b25VcGRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGkoci5fX2Fzc2lnbih7fSxlKSl9fSl9KSksW24sXygoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIFl0KGwsZSl9fSkpXX0sdC51c2VEZXByZWNhdGVkSW52ZXJ0ZWRTY2FsZT1mdW5jdGlvbihlKXt2YXIgdD14bygxKSxuPXhvKDEpLHI9YigpO3JldHVybiBpLmludmFyaWFudCghKCFlJiYhciksXCJJZiBubyBzY2FsZSB2YWx1ZXMgYXJlIHByb3ZpZGVkLCB1c2VJbnZlcnRlZFNjYWxlIG11c3QgYmUgdXNlZCB3aXRoaW4gYSBjaGlsZCBvZiBhbm90aGVyIG1vdGlvbiBjb21wb25lbnQuXCIpLGkud2FybmluZyhGbyxcInVzZUludmVydGVkU2NhbGUgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDMuMC4gVXNlIHRoZSBsYXlvdXQgcHJvcCBpbnN0ZWFkLlwiKSxGbz0hMCxlPyh0PWUuc2NhbGVYfHx0LG49ZS5zY2FsZVl8fG4pOnImJih0PXIuZ2V0VmFsdWUoXCJzY2FsZVhcIiwxKSxuPXIuZ2V0VmFsdWUoXCJzY2FsZVlcIiwxKSkse3NjYWxlWDpqbyh0LE5vKSxzY2FsZVk6am8obixObyl9fSx0LnVzZURvbUV2ZW50PU5lLHQudXNlRHJhZ0NvbnRyb2xzPWZ1bmN0aW9uKCl7cmV0dXJuIF8oVm8pfSx0LnVzZUVsZW1lbnRTY3JvbGw9ZnVuY3Rpb24oZSl7dmFyIHQ9Xyhrbyk7cmV0dXJuIFIoKGZ1bmN0aW9uKCl7dmFyIG49ZS5jdXJyZW50O2lmKGkuaW52YXJpYW50KCEhbixcInJlZiBwcm92aWRlZCB0byB1c2VTY3JvbGwgbXVzdCBiZSBwYXNzZWQgaW50byBhIEhUTUwgZWxlbWVudC5cIiksbil7dmFyIHI9UG8odCxmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm57eE9mZnNldDplLnNjcm9sbExlZnQseU9mZnNldDplLnNjcm9sbFRvcCx4TWF4T2Zmc2V0OmUuc2Nyb2xsV2lkdGgtZS5vZmZzZXRXaWR0aCx5TWF4T2Zmc2V0OmUuc2Nyb2xsSGVpZ2h0LWUub2Zmc2V0SGVpZ2h0fX19KG4pKSxvPSRlKG4sXCJzY3JvbGxcIixyLHtwYXNzaXZlOiEwfSksYT0kZShuLFwicmVzaXplXCIscik7cmV0dXJuIGZ1bmN0aW9uKCl7byYmbygpLGEmJmEoKX19fSksW10pLHR9LHQudXNlSXNQcmVzZW50PWZ1bmN0aW9uKCl7cmV0dXJuIEwoby51c2VDb250ZXh0KHgpKX0sdC51c2VNb3Rpb25UZW1wbGF0ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuLTFdPWFyZ3VtZW50c1tuXTt2YXIgcj1lLmxlbmd0aDtyZXR1cm4gT28odCwoZnVuY3Rpb24oKXtmb3IodmFyIG49XCJcIixvPTA7bzxyO28rKyluKz1lW29dLHRbb10mJihuKz10W29dLmdldCgpKTtyZXR1cm4gbn0pKX0sdC51c2VNb3Rpb25WYWx1ZT14byx0LnVzZVByZXNlbmNlPU8sdC51c2VSZWR1Y2VkTW90aW9uPWZ1bmN0aW9uKCl7IUFvJiZmdW5jdGlvbigpe2lmKEFvPVZ0KG51bGwpLFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cpaWYod2luZG93Lm1hdGNoTWVkaWEpe3ZhciBlPXdpbmRvdy5tYXRjaE1lZGlhKFwiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb24pXCIpLHQ9ZnVuY3Rpb24oKXtyZXR1cm4gQW8uc2V0KGUubWF0Y2hlcyl9O2UuYWRkTGlzdGVuZXIodCksdCgpfWVsc2UgQW8uc2V0KCExKX0oKTt2YXIgZT1yLl9fcmVhZChvLnVzZVN0YXRlKEFvLmdldCgpKSwyKSx0PWVbMF0sbj1lWzFdO3JldHVybiBfbyhBbyxuKSx0fSx0LnVzZVNwcmluZz1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PXt9KTt2YXIgbj1vLnVzZUNvbnRleHQoeSkuaXNTdGF0aWMsaT1vLnVzZVJlZihudWxsKSxhPXhvKGVlKGUpP2UuZ2V0KCk6ZSk7cmV0dXJuIG8udXNlTWVtbygoZnVuY3Rpb24oKXtyZXR1cm4gYS5hdHRhY2goKGZ1bmN0aW9uKGUsbyl7cmV0dXJuIG4/byhlKTooaS5jdXJyZW50JiZpLmN1cnJlbnQuc3RvcCgpLGkuY3VycmVudD1sLmFuaW1hdGUoci5fX2Fzc2lnbihyLl9fYXNzaWduKHtmcm9tOmEuZ2V0KCksdG86ZSx2ZWxvY2l0eTphLmdldFZlbG9jaXR5KCl9LHQpLHtvblVwZGF0ZTpvfSkpLGEuZ2V0KCkpfSkpfSksT2JqZWN0LnZhbHVlcyh0KSksX28oZSwoZnVuY3Rpb24oZSl7cmV0dXJuIGEuc2V0KHBhcnNlRmxvYXQoZSkpfSkpLGF9LHQudXNlVHJhbnNmb3JtPWpvLHQudXNlVmVsb2NpdHk9ZnVuY3Rpb24oZSl7dmFyIHQ9eG8oZS5nZXRWZWxvY2l0eSgpKTtyZXR1cm4gby51c2VFZmZlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIGUudmVsb2NpdHlVcGRhdGVTdWJzY3JpYmVycy5hZGQoKGZ1bmN0aW9uKGUpe3Quc2V0KGUpfSkpfSksW2VdKSx0fSx0LnVzZVZpZXdwb3J0U2Nyb2xsPWZ1bmN0aW9uKCl7cmV0dXJuIExvfHwoTG89a28oKSksUigoZnVuY3Rpb24oKXshVG8mJmZ1bmN0aW9uKCl7aWYoVG89ITAsXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyl7dmFyIGU9UG8oTG8sSW8pOyRlKHdpbmRvdyxcInNjcm9sbFwiLGUse3Bhc3NpdmU6ITB9KSwkZSh3aW5kb3csXCJyZXNpemVcIixlKX19KCl9KSxbXSksTG99LHQudmlzdWFsRWxlbWVudD1Ucn0sNDgzOTooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBuPTEvNjAqMWUzLHI9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHBlcmZvcm1hbmNlP2Z1bmN0aW9uKCl7cmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpfTpmdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdygpfSxvPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/ZnVuY3Rpb24oZSl7cmV0dXJuIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSl9OmZ1bmN0aW9uKGUpe3JldHVybiBzZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiBlKHIoKSl9KSxuKX0saT0hMCxhPSExLGw9ITEscz17ZGVsdGE6MCx0aW1lc3RhbXA6MH0sYz1bXCJyZWFkXCIsXCJ1cGRhdGVcIixcInByZVJlbmRlclwiLFwicmVuZGVyXCIsXCJwb3N0UmVuZGVyXCJdLHU9Yy5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF09ZnVuY3Rpb24oZSl7dmFyIHQ9W10sbj1bXSxyPTAsbz0hMSxpPW5ldyBXZWFrU2V0LGE9e3NjaGVkdWxlOmZ1bmN0aW9uKGUsYSxsKXt2b2lkIDA9PT1hJiYoYT0hMSksdm9pZCAwPT09bCYmKGw9ITEpO3ZhciBzPWwmJm8sYz1zP3Q6bjtyZXR1cm4gYSYmaS5hZGQoZSksLTE9PT1jLmluZGV4T2YoZSkmJihjLnB1c2goZSkscyYmbyYmKHI9dC5sZW5ndGgpKSxlfSxjYW5jZWw6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5pbmRleE9mKGUpOy0xIT09dCYmbi5zcGxpY2UodCwxKSxpLmRlbGV0ZShlKX0scHJvY2VzczpmdW5jdGlvbihsKXt2YXIgcztpZihvPSEwLHQ9KHM9W24sdF0pWzBdLChuPXNbMV0pLmxlbmd0aD0wLHI9dC5sZW5ndGgpZm9yKHZhciBjPTA7YzxyO2MrKyl7dmFyIHU9dFtjXTt1KGwpLGkuaGFzKHUpJiYoYS5zY2hlZHVsZSh1KSxlKCkpfW89ITF9fTtyZXR1cm4gYX0oKGZ1bmN0aW9uKCl7cmV0dXJuIGE9ITB9KSksZX0pLHt9KSxmPWMucmVkdWNlKChmdW5jdGlvbihlLHQpe3ZhciBuPXVbdF07cmV0dXJuIGVbdF09ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB2b2lkIDA9PT10JiYodD0hMSksdm9pZCAwPT09ciYmKHI9ITEpLGF8fHYoKSxuLnNjaGVkdWxlKGUsdCxyKX0sZX0pLHt9KSxkPWMucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlW3RdPXVbdF0uY2FuY2VsLGV9KSx7fSkscD1jLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XT1mdW5jdGlvbigpe3JldHVybiB1W3RdLnByb2Nlc3Mocyl9LGV9KSx7fSksaD1mdW5jdGlvbihlKXtyZXR1cm4gdVtlXS5wcm9jZXNzKHMpfSxnPWZ1bmN0aW9uKGUpe2E9ITEscy5kZWx0YT1pP246TWF0aC5tYXgoTWF0aC5taW4oZS1zLnRpbWVzdGFtcCw0MCksMSkscy50aW1lc3RhbXA9ZSxsPSEwLGMuZm9yRWFjaChoKSxsPSExLGEmJihpPSExLG8oZykpfSx2PWZ1bmN0aW9uKCl7YT0hMCxpPSEwLGx8fG8oZyl9O3QuY2FuY2VsU3luYz1kLHQuZGVmYXVsdD1mLHQuZmx1c2hTeW5jPXAsdC5nZXRGcmFtZURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gc319LDQzOTQ6KGUsdCxuKT0+e24ucih0KSxuLmQodCx7aW52YXJpYW50OigpPT5vLHdhcm5pbmc6KCk9PnJ9KTt2YXIgcj1mdW5jdGlvbigpe30sbz1mdW5jdGlvbigpe319LDc3MzooZSx0LG4pPT57dmFyIHIsbz1cIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX19cIixpPS9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC8sYT1cIm9iamVjdFwiPT10eXBlb2Ygbi5nJiZuLmcmJm4uZy5PYmplY3Q9PT1PYmplY3QmJm4uZyxsPVwib2JqZWN0XCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixzPWF8fGx8fEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSxjPUFycmF5LnByb3RvdHlwZSx1PUZ1bmN0aW9uLnByb3RvdHlwZSxmPU9iamVjdC5wcm90b3R5cGUsZD1zW1wiX19jb3JlLWpzX3NoYXJlZF9fXCJdLHA9KHI9L1teLl0rJC8uZXhlYyhkJiZkLmtleXMmJmQua2V5cy5JRV9QUk9UT3x8XCJcIikpP1wiU3ltYm9sKHNyYylfMS5cIityOlwiXCIsaD11LnRvU3RyaW5nLGc9Zi5oYXNPd25Qcm9wZXJ0eSx2PWYudG9TdHJpbmcsbT1SZWdFeHAoXCJeXCIraC5jYWxsKGcpLnJlcGxhY2UoL1tcXFxcXiQuKis/KClbXFxde318XS9nLFwiXFxcXCQmXCIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csXCIkMS4qP1wiKStcIiRcIiksQz1jLnNwbGljZSx5PUUocyxcIk1hcFwiKSx3PUUoT2JqZWN0LFwiY3JlYXRlXCIpO2Z1bmN0aW9uIGIoZSl7dmFyIHQ9LTEsbj1lP2UubGVuZ3RoOjA7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24geChlKXt2YXIgdD0tMSxuPWU/ZS5sZW5ndGg6MDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiBfKGUpe3ZhciB0PS0xLG49ZT9lLmxlbmd0aDowO2Zvcih0aGlzLmNsZWFyKCk7Kyt0PG47KXt2YXIgcj1lW3RdO3RoaXMuc2V0KHJbMF0sclsxXSl9fWZ1bmN0aW9uIE8oZSx0KXtmb3IodmFyIG4scixvPWUubGVuZ3RoO28tLTspaWYoKG49ZVtvXVswXSk9PT0ocj10KXx8biE9biYmciE9cilyZXR1cm4gbztyZXR1cm4tMX1mdW5jdGlvbiBMKGUsdCl7dmFyIG4scixvPWUuX19kYXRhX187cmV0dXJuKFwic3RyaW5nXCI9PShyPXR5cGVvZihuPXQpKXx8XCJudW1iZXJcIj09cnx8XCJzeW1ib2xcIj09cnx8XCJib29sZWFuXCI9PXI/XCJfX3Byb3RvX19cIiE9PW46bnVsbD09PW4pP29bXCJzdHJpbmdcIj09dHlwZW9mIHQ/XCJzdHJpbmdcIjpcImhhc2hcIl06by5tYXB9ZnVuY3Rpb24gRShlLHQpe3ZhciBuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWU/dm9pZCAwOmVbdF19KGUsdCk7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKCFqKGUpfHxwJiZwIGluIGUpcmV0dXJuITE7dmFyIHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9aihlKT92LmNhbGwoZSk6XCJcIjtyZXR1cm5cIltvYmplY3QgRnVuY3Rpb25dXCI9PXR8fFwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl1cIj09dH0oZSl8fGZ1bmN0aW9uKGUpe3ZhciB0PSExO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGUudG9TdHJpbmcpdHJ5e3Q9ISEoZStcIlwiKX1jYXRjaChlKXt9cmV0dXJuIHR9KGUpP206aTtyZXR1cm4gdC50ZXN0KGZ1bmN0aW9uKGUpe2lmKG51bGwhPWUpe3RyeXtyZXR1cm4gaC5jYWxsKGUpfWNhdGNoKGUpe310cnl7cmV0dXJuIGUrXCJcIn1jYXRjaChlKXt9fXJldHVyblwiXCJ9KGUpKX0obik/bjp2b2lkIDB9ZnVuY3Rpb24gUyhlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGV8fHQmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGEgZnVuY3Rpb25cIik7dmFyIG49ZnVuY3Rpb24oKXt2YXIgcj1hcmd1bWVudHMsbz10P3QuYXBwbHkodGhpcyxyKTpyWzBdLGk9bi5jYWNoZTtpZihpLmhhcyhvKSlyZXR1cm4gaS5nZXQobyk7dmFyIGE9ZS5hcHBseSh0aGlzLHIpO3JldHVybiBuLmNhY2hlPWkuc2V0KG8sYSksYX07cmV0dXJuIG4uY2FjaGU9bmV3KFMuQ2FjaGV8fF8pLG59ZnVuY3Rpb24gaihlKXt2YXIgdD10eXBlb2YgZTtyZXR1cm4hIWUmJihcIm9iamVjdFwiPT10fHxcImZ1bmN0aW9uXCI9PXQpfWIucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz13P3cobnVsbCk6e319LGIucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5oYXMoZSkmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW2VdfSxiLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXztpZih3KXt2YXIgbj10W2VdO3JldHVybiBuPT09bz92b2lkIDA6bn1yZXR1cm4gZy5jYWxsKHQsZSk/dFtlXTp2b2lkIDB9LGIucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fO3JldHVybiB3P3ZvaWQgMCE9PXRbZV06Zy5jYWxsKHQsZSl9LGIucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9fZGF0YV9fW2VdPXcmJnZvaWQgMD09PXQ/bzp0LHRoaXN9LHgucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1bXX0seC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX18sbj1PKHQsZSk7cmV0dXJuIShuPDB8fChuPT10Lmxlbmd0aC0xP3QucG9wKCk6Qy5jYWxsKHQsbiwxKSwwKSl9LHgucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fLG49Tyh0LGUpO3JldHVybiBuPDA/dm9pZCAwOnRbbl1bMV19LHgucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gTyh0aGlzLl9fZGF0YV9fLGUpPi0xfSx4LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fLHI9TyhuLGUpO3JldHVybiByPDA/bi5wdXNoKFtlLHRdKTpuW3JdWzFdPXQsdGhpc30sXy5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBiLG1hcDpuZXcoeXx8eCksc3RyaW5nOm5ldyBifX0sXy5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3JldHVybiBMKHRoaXMsZSkuZGVsZXRlKGUpfSxfLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIEwodGhpcyxlKS5nZXQoZSl9LF8ucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gTCh0aGlzLGUpLmhhcyhlKX0sXy5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEwodGhpcyxlKS5zZXQoZSx0KSx0aGlzfSxTLkNhY2hlPV8sZS5leHBvcnRzPVN9LDY0ODY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByO2U9bi5ubWQoZSksZnVuY3Rpb24oKXt2YXIgbyxpPVwiRXhwZWN0ZWQgYSBmdW5jdGlvblwiLGE9XCJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fXCIsbD1cIl9fbG9kYXNoX3BsYWNlaG9sZGVyX19cIixzPTMyLGM9MTI4LHU9MS8wLGY9OTAwNzE5OTI1NDc0MDk5MSxkPU5hTixwPTQyOTQ5NjcyOTUsaD1bW1wiYXJ5XCIsY10sW1wiYmluZFwiLDFdLFtcImJpbmRLZXlcIiwyXSxbXCJjdXJyeVwiLDhdLFtcImN1cnJ5UmlnaHRcIiwxNl0sW1wiZmxpcFwiLDUxMl0sW1wicGFydGlhbFwiLHNdLFtcInBhcnRpYWxSaWdodFwiLDY0XSxbXCJyZWFyZ1wiLDI1Nl1dLGc9XCJbb2JqZWN0IEFyZ3VtZW50c11cIix2PVwiW29iamVjdCBBcnJheV1cIixtPVwiW29iamVjdCBCb29sZWFuXVwiLEM9XCJbb2JqZWN0IERhdGVdXCIseT1cIltvYmplY3QgRXJyb3JdXCIsdz1cIltvYmplY3QgRnVuY3Rpb25dXCIsYj1cIltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dXCIseD1cIltvYmplY3QgTWFwXVwiLF89XCJbb2JqZWN0IE51bWJlcl1cIixPPVwiW29iamVjdCBPYmplY3RdXCIsTD1cIltvYmplY3QgUHJvbWlzZV1cIixFPVwiW29iamVjdCBSZWdFeHBdXCIsUz1cIltvYmplY3QgU2V0XVwiLGo9XCJbb2JqZWN0IFN0cmluZ11cIixNPVwiW29iamVjdCBTeW1ib2xdXCIsaz1cIltvYmplY3QgV2Vha01hcF1cIixSPVwiW29iamVjdCBBcnJheUJ1ZmZlcl1cIixQPVwiW29iamVjdCBEYXRhVmlld11cIixJPVwiW29iamVjdCBGbG9hdDMyQXJyYXldXCIsQT1cIltvYmplY3QgRmxvYXQ2NEFycmF5XVwiLFQ9XCJbb2JqZWN0IEludDhBcnJheV1cIixIPVwiW29iamVjdCBJbnQxNkFycmF5XVwiLEI9XCJbb2JqZWN0IEludDMyQXJyYXldXCIsVj1cIltvYmplY3QgVWludDhBcnJheV1cIixEPVwiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV1cIixaPVwiW29iamVjdCBVaW50MTZBcnJheV1cIiwkPVwiW29iamVjdCBVaW50MzJBcnJheV1cIixOPS9cXGJfX3AgXFwrPSAnJzsvZyxGPS9cXGIoX19wIFxcKz0pICcnIFxcKy9nLFU9LyhfX2VcXCguKj9cXCl8XFxiX190XFwpKSBcXCtcXG4nJzsvZyxXPS8mKD86YW1wfGx0fGd0fHF1b3R8IzM5KTsvZyx6PS9bJjw+XCInXS9nLEc9UmVnRXhwKFcuc291cmNlKSxxPVJlZ0V4cCh6LnNvdXJjZSksWT0vPCUtKFtcXHNcXFNdKz8pJT4vZyxLPS88JShbXFxzXFxTXSs/KSU+L2csWD0vPCU9KFtcXHNcXFNdKz8pJT4vZyxKPS9cXC58XFxbKD86W15bXFxdXSp8KFtcIiddKSg/Oig/IVxcMSlbXlxcXFxdfFxcXFwuKSo/XFwxKVxcXS8sUT0vXlxcdyokLyxlZT0vW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2csdGU9L1tcXFxcXiQuKis/KClbXFxde318XS9nLG5lPVJlZ0V4cCh0ZS5zb3VyY2UpLHJlPS9eXFxzKy8sb2U9L1xccy8saWU9L1xceyg/OlxcblxcL1xcKiBcXFt3cmFwcGVkIHdpdGggLitcXF0gXFwqXFwvKT9cXG4/LyxhZT0vXFx7XFxuXFwvXFwqIFxcW3dyYXBwZWQgd2l0aCAoLispXFxdIFxcKi8sbGU9Lyw/ICYgLyxzZT0vW15cXHgwMC1cXHgyZlxceDNhLVxceDQwXFx4NWItXFx4NjBcXHg3Yi1cXHg3Zl0rL2csY2U9L1soKT0se31cXFtcXF1cXC9cXHNdLyx1ZT0vXFxcXChcXFxcKT8vZyxmZT0vXFwkXFx7KFteXFxcXH1dKig/OlxcXFwuW15cXFxcfV0qKSopXFx9L2csZGU9L1xcdyokLyxwZT0vXlstK10weFswLTlhLWZdKyQvaSxoZT0vXjBiWzAxXSskL2ksZ2U9L15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLyx2ZT0vXjBvWzAtN10rJC9pLG1lPS9eKD86MHxbMS05XVxcZCopJC8sQ2U9L1tcXHhjMC1cXHhkNlxceGQ4LVxceGY2XFx4ZjgtXFx4ZmZcXHUwMTAwLVxcdTAxN2ZdL2cseWU9LygkXikvLHdlPS9bJ1xcblxcclxcdTIwMjhcXHUyMDI5XFxcXF0vZyxiZT1cIlxcXFx1ZDgwMC1cXFxcdWRmZmZcIix4ZT1cIlxcXFx1MDMwMC1cXFxcdTAzNmZcXFxcdWZlMjAtXFxcXHVmZTJmXFxcXHUyMGQwLVxcXFx1MjBmZlwiLF9lPVwiXFxcXHUyNzAwLVxcXFx1MjdiZlwiLE9lPVwiYS16XFxcXHhkZi1cXFxceGY2XFxcXHhmOC1cXFxceGZmXCIsTGU9XCJBLVpcXFxceGMwLVxcXFx4ZDZcXFxceGQ4LVxcXFx4ZGVcIixFZT1cIlxcXFx1ZmUwZVxcXFx1ZmUwZlwiLFNlPVwiXFxcXHhhY1xcXFx4YjFcXFxceGQ3XFxcXHhmN1xcXFx4MDAtXFxcXHgyZlxcXFx4M2EtXFxcXHg0MFxcXFx4NWItXFxcXHg2MFxcXFx4N2ItXFxcXHhiZlxcXFx1MjAwMC1cXFxcdTIwNmYgXFxcXHRcXFxceDBiXFxcXGZcXFxceGEwXFxcXHVmZWZmXFxcXG5cXFxcclxcXFx1MjAyOFxcXFx1MjAyOVxcXFx1MTY4MFxcXFx1MTgwZVxcXFx1MjAwMFxcXFx1MjAwMVxcXFx1MjAwMlxcXFx1MjAwM1xcXFx1MjAwNFxcXFx1MjAwNVxcXFx1MjAwNlxcXFx1MjAwN1xcXFx1MjAwOFxcXFx1MjAwOVxcXFx1MjAwYVxcXFx1MjAyZlxcXFx1MjA1ZlxcXFx1MzAwMFwiLGplPVwiW1wiK2JlK1wiXVwiLE1lPVwiW1wiK1NlK1wiXVwiLGtlPVwiW1wiK3hlK1wiXVwiLFJlPVwiXFxcXGQrXCIsUGU9XCJbXCIrX2UrXCJdXCIsSWU9XCJbXCIrT2UrXCJdXCIsQWU9XCJbXlwiK2JlK1NlK1JlK19lK09lK0xlK1wiXVwiLFRlPVwiXFxcXHVkODNjW1xcXFx1ZGZmYi1cXFxcdWRmZmZdXCIsSGU9XCJbXlwiK2JlK1wiXVwiLEJlPVwiKD86XFxcXHVkODNjW1xcXFx1ZGRlNi1cXFxcdWRkZmZdKXsyfVwiLFZlPVwiW1xcXFx1ZDgwMC1cXFxcdWRiZmZdW1xcXFx1ZGMwMC1cXFxcdWRmZmZdXCIsRGU9XCJbXCIrTGUrXCJdXCIsWmU9XCJcXFxcdTIwMGRcIiwkZT1cIig/OlwiK0llK1wifFwiK0FlK1wiKVwiLE5lPVwiKD86XCIrRGUrXCJ8XCIrQWUrXCIpXCIsRmU9XCIoPzpbJ+KAmV0oPzpkfGxsfG18cmV8c3x0fHZlKSk/XCIsVWU9XCIoPzpbJ+KAmV0oPzpEfExMfE18UkV8U3xUfFZFKSk/XCIsV2U9XCIoPzpcIitrZStcInxcIitUZStcIik/XCIsemU9XCJbXCIrRWUrXCJdP1wiLEdlPXplK1dlK1wiKD86XCIrWmUrXCIoPzpcIitbSGUsQmUsVmVdLmpvaW4oXCJ8XCIpK1wiKVwiK3plK1dlK1wiKSpcIixxZT1cIig/OlwiK1tQZSxCZSxWZV0uam9pbihcInxcIikrXCIpXCIrR2UsWWU9XCIoPzpcIitbSGUra2UrXCI/XCIsa2UsQmUsVmUsamVdLmpvaW4oXCJ8XCIpK1wiKVwiLEtlPVJlZ0V4cChcIlsn4oCZXVwiLFwiZ1wiKSxYZT1SZWdFeHAoa2UsXCJnXCIpLEplPVJlZ0V4cChUZStcIig/PVwiK1RlK1wiKXxcIitZZStHZSxcImdcIiksUWU9UmVnRXhwKFtEZStcIj9cIitJZStcIitcIitGZStcIig/PVwiK1tNZSxEZSxcIiRcIl0uam9pbihcInxcIikrXCIpXCIsTmUrXCIrXCIrVWUrXCIoPz1cIitbTWUsRGUrJGUsXCIkXCJdLmpvaW4oXCJ8XCIpK1wiKVwiLERlK1wiP1wiKyRlK1wiK1wiK0ZlLERlK1wiK1wiK1VlLFwiXFxcXGQqKD86MVNUfDJORHwzUkR8KD8hWzEyM10pXFxcXGRUSCkoPz1cXFxcYnxbYS16X10pXCIsXCJcXFxcZCooPzoxc3R8Mm5kfDNyZHwoPyFbMTIzXSlcXFxcZHRoKSg/PVxcXFxifFtBLVpfXSlcIixSZSxxZV0uam9pbihcInxcIiksXCJnXCIpLGV0PVJlZ0V4cChcIltcIitaZStiZSt4ZStFZStcIl1cIiksdHQ9L1thLXpdW0EtWl18W0EtWl17Mn1bYS16XXxbMC05XVthLXpBLVpdfFthLXpBLVpdWzAtOV18W15hLXpBLVowLTkgXS8sbnQ9W1wiQXJyYXlcIixcIkJ1ZmZlclwiLFwiRGF0YVZpZXdcIixcIkRhdGVcIixcIkVycm9yXCIsXCJGbG9hdDMyQXJyYXlcIixcIkZsb2F0NjRBcnJheVwiLFwiRnVuY3Rpb25cIixcIkludDhBcnJheVwiLFwiSW50MTZBcnJheVwiLFwiSW50MzJBcnJheVwiLFwiTWFwXCIsXCJNYXRoXCIsXCJPYmplY3RcIixcIlByb21pc2VcIixcIlJlZ0V4cFwiLFwiU2V0XCIsXCJTdHJpbmdcIixcIlN5bWJvbFwiLFwiVHlwZUVycm9yXCIsXCJVaW50OEFycmF5XCIsXCJVaW50OENsYW1wZWRBcnJheVwiLFwiVWludDE2QXJyYXlcIixcIlVpbnQzMkFycmF5XCIsXCJXZWFrTWFwXCIsXCJfXCIsXCJjbGVhclRpbWVvdXRcIixcImlzRmluaXRlXCIsXCJwYXJzZUludFwiLFwic2V0VGltZW91dFwiXSxydD0tMSxvdD17fTtvdFtJXT1vdFtBXT1vdFtUXT1vdFtIXT1vdFtCXT1vdFtWXT1vdFtEXT1vdFtaXT1vdFskXT0hMCxvdFtnXT1vdFt2XT1vdFtSXT1vdFttXT1vdFtQXT1vdFtDXT1vdFt5XT1vdFt3XT1vdFt4XT1vdFtfXT1vdFtPXT1vdFtFXT1vdFtTXT1vdFtqXT1vdFtrXT0hMTt2YXIgaXQ9e307aXRbZ109aXRbdl09aXRbUl09aXRbUF09aXRbbV09aXRbQ109aXRbSV09aXRbQV09aXRbVF09aXRbSF09aXRbQl09aXRbeF09aXRbX109aXRbT109aXRbRV09aXRbU109aXRbal09aXRbTV09aXRbVl09aXRbRF09aXRbWl09aXRbJF09ITAsaXRbeV09aXRbd109aXRba109ITE7dmFyIGF0PXtcIlxcXFxcIjpcIlxcXFxcIixcIidcIjpcIidcIixcIlxcblwiOlwiblwiLFwiXFxyXCI6XCJyXCIsXCJcXHUyMDI4XCI6XCJ1MjAyOFwiLFwiXFx1MjAyOVwiOlwidTIwMjlcIn0sbHQ9cGFyc2VGbG9hdCxzdD1wYXJzZUludCxjdD1cIm9iamVjdFwiPT10eXBlb2Ygbi5nJiZuLmcmJm4uZy5PYmplY3Q9PT1PYmplY3QmJm4uZyx1dD1cIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsZnQ9Y3R8fHV0fHxGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCksZHQ9dCYmIXQubm9kZVR5cGUmJnQscHQ9ZHQmJmUmJiFlLm5vZGVUeXBlJiZlLGh0PXB0JiZwdC5leHBvcnRzPT09ZHQsZ3Q9aHQmJmN0LnByb2Nlc3MsdnQ9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIHB0JiZwdC5yZXF1aXJlJiZwdC5yZXF1aXJlKFwidXRpbFwiKS50eXBlc3x8Z3QmJmd0LmJpbmRpbmcmJmd0LmJpbmRpbmcoXCJ1dGlsXCIpfWNhdGNoKGUpe319KCksbXQ9dnQmJnZ0LmlzQXJyYXlCdWZmZXIsQ3Q9dnQmJnZ0LmlzRGF0ZSx5dD12dCYmdnQuaXNNYXAsd3Q9dnQmJnZ0LmlzUmVnRXhwLGJ0PXZ0JiZ2dC5pc1NldCx4dD12dCYmdnQuaXNUeXBlZEFycmF5O2Z1bmN0aW9uIF90KGUsdCxuKXtzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gZS5jYWxsKHQpO2Nhc2UgMTpyZXR1cm4gZS5jYWxsKHQsblswXSk7Y2FzZSAyOnJldHVybiBlLmNhbGwodCxuWzBdLG5bMV0pO2Nhc2UgMzpyZXR1cm4gZS5jYWxsKHQsblswXSxuWzFdLG5bMl0pfXJldHVybiBlLmFwcGx5KHQsbil9ZnVuY3Rpb24gT3QoZSx0LG4scil7Zm9yKHZhciBvPS0xLGk9bnVsbD09ZT8wOmUubGVuZ3RoOysrbzxpOyl7dmFyIGE9ZVtvXTt0KHIsYSxuKGEpLGUpfXJldHVybiByfWZ1bmN0aW9uIEx0KGUsdCl7Zm9yKHZhciBuPS0xLHI9bnVsbD09ZT8wOmUubGVuZ3RoOysrbjxyJiYhMSE9PXQoZVtuXSxuLGUpOyk7cmV0dXJuIGV9ZnVuY3Rpb24gRXQoZSx0KXtmb3IodmFyIG49bnVsbD09ZT8wOmUubGVuZ3RoO24tLSYmITEhPT10KGVbbl0sbixlKTspO3JldHVybiBlfWZ1bmN0aW9uIFN0KGUsdCl7Zm9yKHZhciBuPS0xLHI9bnVsbD09ZT8wOmUubGVuZ3RoOysrbjxyOylpZighdChlW25dLG4sZSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24ganQoZSx0KXtmb3IodmFyIG49LTEscj1udWxsPT1lPzA6ZS5sZW5ndGgsbz0wLGk9W107KytuPHI7KXt2YXIgYT1lW25dO3QoYSxuLGUpJiYoaVtvKytdPWEpfXJldHVybiBpfWZ1bmN0aW9uIE10KGUsdCl7cmV0dXJuIShudWxsPT1lfHwhZS5sZW5ndGgpJiZEdChlLHQsMCk+LTF9ZnVuY3Rpb24ga3QoZSx0LG4pe2Zvcih2YXIgcj0tMSxvPW51bGw9PWU/MDplLmxlbmd0aDsrK3I8bzspaWYobih0LGVbcl0pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFJ0KGUsdCl7Zm9yKHZhciBuPS0xLHI9bnVsbD09ZT8wOmUubGVuZ3RoLG89QXJyYXkocik7KytuPHI7KW9bbl09dChlW25dLG4sZSk7cmV0dXJuIG99ZnVuY3Rpb24gUHQoZSx0KXtmb3IodmFyIG49LTEscj10Lmxlbmd0aCxvPWUubGVuZ3RoOysrbjxyOyllW28rbl09dFtuXTtyZXR1cm4gZX1mdW5jdGlvbiBJdChlLHQsbixyKXt2YXIgbz0tMSxpPW51bGw9PWU/MDplLmxlbmd0aDtmb3IociYmaSYmKG49ZVsrK29dKTsrK288aTspbj10KG4sZVtvXSxvLGUpO3JldHVybiBufWZ1bmN0aW9uIEF0KGUsdCxuLHIpe3ZhciBvPW51bGw9PWU/MDplLmxlbmd0aDtmb3IociYmbyYmKG49ZVstLW9dKTtvLS07KW49dChuLGVbb10sbyxlKTtyZXR1cm4gbn1mdW5jdGlvbiBUdChlLHQpe2Zvcih2YXIgbj0tMSxyPW51bGw9PWU/MDplLmxlbmd0aDsrK248cjspaWYodChlW25dLG4sZSkpcmV0dXJuITA7cmV0dXJuITF9dmFyIEh0PUZ0KFwibGVuZ3RoXCIpO2Z1bmN0aW9uIEJ0KGUsdCxuKXt2YXIgcjtyZXR1cm4gbihlLChmdW5jdGlvbihlLG4sbyl7aWYodChlLG4sbykpcmV0dXJuIHI9biwhMX0pKSxyfWZ1bmN0aW9uIFZ0KGUsdCxuLHIpe2Zvcih2YXIgbz1lLmxlbmd0aCxpPW4rKHI/MTotMSk7cj9pLS06KytpPG87KWlmKHQoZVtpXSxpLGUpKXJldHVybiBpO3JldHVybi0xfWZ1bmN0aW9uIER0KGUsdCxuKXtyZXR1cm4gdD09dD9mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPW4tMSxvPWUubGVuZ3RoOysrcjxvOylpZihlW3JdPT09dClyZXR1cm4gcjtyZXR1cm4tMX0oZSx0LG4pOlZ0KGUsJHQsbil9ZnVuY3Rpb24gWnQoZSx0LG4scil7Zm9yKHZhciBvPW4tMSxpPWUubGVuZ3RoOysrbzxpOylpZihyKGVbb10sdCkpcmV0dXJuIG87cmV0dXJuLTF9ZnVuY3Rpb24gJHQoZSl7cmV0dXJuIGUhPWV9ZnVuY3Rpb24gTnQoZSx0KXt2YXIgbj1udWxsPT1lPzA6ZS5sZW5ndGg7cmV0dXJuIG4/enQoZSx0KS9uOmR9ZnVuY3Rpb24gRnQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P286dFtlXX19ZnVuY3Rpb24gVXQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT1lP286ZVt0XX19ZnVuY3Rpb24gV3QoZSx0LG4scixvKXtyZXR1cm4gbyhlLChmdW5jdGlvbihlLG8saSl7bj1yPyhyPSExLGUpOnQobixlLG8saSl9KSksbn1mdW5jdGlvbiB6dChlLHQpe2Zvcih2YXIgbixyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KXt2YXIgYT10KGVbcl0pO2EhPT1vJiYobj1uPT09bz9hOm4rYSl9cmV0dXJuIG59ZnVuY3Rpb24gR3QoZSx0KXtmb3IodmFyIG49LTEscj1BcnJheShlKTsrK248ZTspcltuXT10KG4pO3JldHVybiByfWZ1bmN0aW9uIHF0KGUpe3JldHVybiBlP2Uuc2xpY2UoMCxmbihlKSsxKS5yZXBsYWNlKHJlLFwiXCIpOmV9ZnVuY3Rpb24gWXQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpfX1mdW5jdGlvbiBLdChlLHQpe3JldHVybiBSdCh0LChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pKX1mdW5jdGlvbiBYdChlLHQpe3JldHVybiBlLmhhcyh0KX1mdW5jdGlvbiBKdChlLHQpe2Zvcih2YXIgbj0tMSxyPWUubGVuZ3RoOysrbjxyJiZEdCh0LGVbbl0sMCk+LTE7KTtyZXR1cm4gbn1mdW5jdGlvbiBRdChlLHQpe2Zvcih2YXIgbj1lLmxlbmd0aDtuLS0mJkR0KHQsZVtuXSwwKT4tMTspO3JldHVybiBufXZhciBlbj1VdCh7w4A6XCJBXCIsw4E6XCJBXCIsw4I6XCJBXCIsw4M6XCJBXCIsw4Q6XCJBXCIsw4U6XCJBXCIsw6A6XCJhXCIsw6E6XCJhXCIsw6I6XCJhXCIsw6M6XCJhXCIsw6Q6XCJhXCIsw6U6XCJhXCIsw4c6XCJDXCIsw6c6XCJjXCIsw5A6XCJEXCIsw7A6XCJkXCIsw4g6XCJFXCIsw4k6XCJFXCIsw4o6XCJFXCIsw4s6XCJFXCIsw6g6XCJlXCIsw6k6XCJlXCIsw6o6XCJlXCIsw6s6XCJlXCIsw4w6XCJJXCIsw406XCJJXCIsw446XCJJXCIsw486XCJJXCIsw6w6XCJpXCIsw606XCJpXCIsw646XCJpXCIsw686XCJpXCIsw5E6XCJOXCIsw7E6XCJuXCIsw5I6XCJPXCIsw5M6XCJPXCIsw5Q6XCJPXCIsw5U6XCJPXCIsw5Y6XCJPXCIsw5g6XCJPXCIsw7I6XCJvXCIsw7M6XCJvXCIsw7Q6XCJvXCIsw7U6XCJvXCIsw7Y6XCJvXCIsw7g6XCJvXCIsw5k6XCJVXCIsw5o6XCJVXCIsw5s6XCJVXCIsw5w6XCJVXCIsw7k6XCJ1XCIsw7o6XCJ1XCIsw7s6XCJ1XCIsw7w6XCJ1XCIsw506XCJZXCIsw706XCJ5XCIsw786XCJ5XCIsw4Y6XCJBZVwiLMOmOlwiYWVcIizDnjpcIlRoXCIsw746XCJ0aFwiLMOfOlwic3NcIizEgDpcIkFcIizEgjpcIkFcIizEhDpcIkFcIizEgTpcImFcIizEgzpcImFcIizEhTpcImFcIizEhjpcIkNcIizEiDpcIkNcIizEijpcIkNcIizEjDpcIkNcIizEhzpcImNcIizEiTpcImNcIizEizpcImNcIizEjTpcImNcIizEjjpcIkRcIizEkDpcIkRcIizEjzpcImRcIizEkTpcImRcIizEkjpcIkVcIizElDpcIkVcIizEljpcIkVcIizEmDpcIkVcIizEmjpcIkVcIizEkzpcImVcIizElTpcImVcIizElzpcImVcIizEmTpcImVcIizEmzpcImVcIizEnDpcIkdcIizEnjpcIkdcIizEoDpcIkdcIizEojpcIkdcIizEnTpcImdcIizEnzpcImdcIizEoTpcImdcIizEozpcImdcIizEpDpcIkhcIizEpjpcIkhcIizEpTpcImhcIizEpzpcImhcIizEqDpcIklcIizEqjpcIklcIizErDpcIklcIizErjpcIklcIizEsDpcIklcIizEqTpcImlcIizEqzpcImlcIizErTpcImlcIizErzpcImlcIizEsTpcImlcIizEtDpcIkpcIizEtTpcImpcIizEtjpcIktcIizEtzpcImtcIizEuDpcImtcIizEuTpcIkxcIizEuzpcIkxcIizEvTpcIkxcIizEvzpcIkxcIizFgTpcIkxcIizEujpcImxcIizEvDpcImxcIizEvjpcImxcIizFgDpcImxcIizFgjpcImxcIizFgzpcIk5cIizFhTpcIk5cIizFhzpcIk5cIizFijpcIk5cIizFhDpcIm5cIizFhjpcIm5cIizFiDpcIm5cIizFizpcIm5cIizFjDpcIk9cIizFjjpcIk9cIizFkDpcIk9cIizFjTpcIm9cIizFjzpcIm9cIizFkTpcIm9cIizFlDpcIlJcIizFljpcIlJcIizFmDpcIlJcIizFlTpcInJcIizFlzpcInJcIizFmTpcInJcIizFmjpcIlNcIizFnDpcIlNcIizFnjpcIlNcIizFoDpcIlNcIizFmzpcInNcIizFnTpcInNcIizFnzpcInNcIizFoTpcInNcIizFojpcIlRcIizFpDpcIlRcIizFpjpcIlRcIizFozpcInRcIizFpTpcInRcIizFpzpcInRcIizFqDpcIlVcIizFqjpcIlVcIizFrDpcIlVcIizFrjpcIlVcIizFsDpcIlVcIizFsjpcIlVcIizFqTpcInVcIizFqzpcInVcIizFrTpcInVcIizFrzpcInVcIizFsTpcInVcIizFszpcInVcIizFtDpcIldcIizFtTpcIndcIizFtjpcIllcIizFtzpcInlcIizFuDpcIllcIizFuTpcIlpcIizFuzpcIlpcIizFvTpcIlpcIizFujpcInpcIizFvDpcInpcIizFvjpcInpcIizEsjpcIklKXCIsxLM6XCJpalwiLMWSOlwiT2VcIizFkzpcIm9lXCIsxYk6XCInblwiLMW/Olwic1wifSksdG49VXQoe1wiJlwiOlwiJmFtcDtcIixcIjxcIjpcIiZsdDtcIixcIj5cIjpcIiZndDtcIiwnXCInOlwiJnF1b3Q7XCIsXCInXCI6XCImIzM5O1wifSk7ZnVuY3Rpb24gbm4oZSl7cmV0dXJuXCJcXFxcXCIrYXRbZV19ZnVuY3Rpb24gcm4oZSl7cmV0dXJuIGV0LnRlc3QoZSl9ZnVuY3Rpb24gb24oZSl7dmFyIHQ9LTEsbj1BcnJheShlLnNpemUpO3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKGUscil7blsrK3RdPVtyLGVdfSkpLG59ZnVuY3Rpb24gYW4oZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGUodChuKSl9fWZ1bmN0aW9uIGxuKGUsdCl7Zm9yKHZhciBuPS0xLHI9ZS5sZW5ndGgsbz0wLGk9W107KytuPHI7KXt2YXIgYT1lW25dO2EhPT10JiZhIT09bHx8KGVbbl09bCxpW28rK109bil9cmV0dXJuIGl9ZnVuY3Rpb24gc24oZSl7dmFyIHQ9LTEsbj1BcnJheShlLnNpemUpO3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKGUpe25bKyt0XT1lfSkpLG59ZnVuY3Rpb24gY24oZSl7cmV0dXJuIHJuKGUpP2Z1bmN0aW9uKGUpe2Zvcih2YXIgdD1KZS5sYXN0SW5kZXg9MDtKZS50ZXN0KGUpOykrK3Q7cmV0dXJuIHR9KGUpOkh0KGUpfWZ1bmN0aW9uIHVuKGUpe3JldHVybiBybihlKT9mdW5jdGlvbihlKXtyZXR1cm4gZS5tYXRjaChKZSl8fFtdfShlKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdChcIlwiKX0oZSl9ZnVuY3Rpb24gZm4oZSl7Zm9yKHZhciB0PWUubGVuZ3RoO3QtLSYmb2UudGVzdChlLmNoYXJBdCh0KSk7KTtyZXR1cm4gdH12YXIgZG49VXQoe1wiJmFtcDtcIjpcIiZcIixcIiZsdDtcIjpcIjxcIixcIiZndDtcIjpcIj5cIixcIiZxdW90O1wiOidcIicsXCImIzM5O1wiOlwiJ1wifSkscG49ZnVuY3Rpb24gZSh0KXt2YXIgbixyPSh0PW51bGw9PXQ/ZnQ6cG4uZGVmYXVsdHMoZnQuT2JqZWN0KCksdCxwbi5waWNrKGZ0LG50KSkpLkFycmF5LG9lPXQuRGF0ZSxiZT10LkVycm9yLHhlPXQuRnVuY3Rpb24sX2U9dC5NYXRoLE9lPXQuT2JqZWN0LExlPXQuUmVnRXhwLEVlPXQuU3RyaW5nLFNlPXQuVHlwZUVycm9yLGplPXIucHJvdG90eXBlLE1lPXhlLnByb3RvdHlwZSxrZT1PZS5wcm90b3R5cGUsUmU9dFtcIl9fY29yZS1qc19zaGFyZWRfX1wiXSxQZT1NZS50b1N0cmluZyxJZT1rZS5oYXNPd25Qcm9wZXJ0eSxBZT0wLFRlPShuPS9bXi5dKyQvLmV4ZWMoUmUmJlJlLmtleXMmJlJlLmtleXMuSUVfUFJPVE98fFwiXCIpKT9cIlN5bWJvbChzcmMpXzEuXCIrbjpcIlwiLEhlPWtlLnRvU3RyaW5nLEJlPVBlLmNhbGwoT2UpLFZlPWZ0Ll8sRGU9TGUoXCJeXCIrUGUuY2FsbChJZSkucmVwbGFjZSh0ZSxcIlxcXFwkJlwiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLFwiJDEuKj9cIikrXCIkXCIpLFplPWh0P3QuQnVmZmVyOm8sJGU9dC5TeW1ib2wsTmU9dC5VaW50OEFycmF5LEZlPVplP1plLmFsbG9jVW5zYWZlOm8sVWU9YW4oT2UuZ2V0UHJvdG90eXBlT2YsT2UpLFdlPU9lLmNyZWF0ZSx6ZT1rZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxHZT1qZS5zcGxpY2UscWU9JGU/JGUuaXNDb25jYXRTcHJlYWRhYmxlOm8sWWU9JGU/JGUuaXRlcmF0b3I6byxKZT0kZT8kZS50b1N0cmluZ1RhZzpvLGV0PWZ1bmN0aW9uKCl7dHJ5e3ZhciBlPXNpKE9lLFwiZGVmaW5lUHJvcGVydHlcIik7cmV0dXJuIGUoe30sXCJcIix7fSksZX1jYXRjaChlKXt9fSgpLGF0PXQuY2xlYXJUaW1lb3V0IT09ZnQuY2xlYXJUaW1lb3V0JiZ0LmNsZWFyVGltZW91dCxjdD1vZSYmb2Uubm93IT09ZnQuRGF0ZS5ub3cmJm9lLm5vdyx1dD10LnNldFRpbWVvdXQhPT1mdC5zZXRUaW1lb3V0JiZ0LnNldFRpbWVvdXQsZHQ9X2UuY2VpbCxwdD1fZS5mbG9vcixndD1PZS5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsdnQ9WmU/WmUuaXNCdWZmZXI6byxIdD10LmlzRmluaXRlLFV0PWplLmpvaW4saG49YW4oT2Uua2V5cyxPZSksZ249X2UubWF4LHZuPV9lLm1pbixtbj1vZS5ub3csQ249dC5wYXJzZUludCx5bj1fZS5yYW5kb20sd249amUucmV2ZXJzZSxibj1zaSh0LFwiRGF0YVZpZXdcIikseG49c2kodCxcIk1hcFwiKSxfbj1zaSh0LFwiUHJvbWlzZVwiKSxPbj1zaSh0LFwiU2V0XCIpLExuPXNpKHQsXCJXZWFrTWFwXCIpLEVuPXNpKE9lLFwiY3JlYXRlXCIpLFNuPUxuJiZuZXcgTG4sam49e30sTW49SGkoYm4pLGtuPUhpKHhuKSxSbj1IaShfbiksUG49SGkoT24pLEluPUhpKExuKSxBbj0kZT8kZS5wcm90b3R5cGU6byxUbj1Bbj9Bbi52YWx1ZU9mOm8sSG49QW4/QW4udG9TdHJpbmc6bztmdW5jdGlvbiBCbihlKXtpZihRYShlKSYmIU5hKGUpJiYhKGUgaW5zdGFuY2VvZiAkbikpe2lmKGUgaW5zdGFuY2VvZiBabilyZXR1cm4gZTtpZihJZS5jYWxsKGUsXCJfX3dyYXBwZWRfX1wiKSlyZXR1cm4gQmkoZSl9cmV0dXJuIG5ldyBabihlKX12YXIgVm49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBmdW5jdGlvbih0KXtpZighSmEodCkpcmV0dXJue307aWYoV2UpcmV0dXJuIFdlKHQpO2UucHJvdG90eXBlPXQ7dmFyIG49bmV3IGU7cmV0dXJuIGUucHJvdG90eXBlPW8sbn19KCk7ZnVuY3Rpb24gRG4oKXt9ZnVuY3Rpb24gWm4oZSx0KXt0aGlzLl9fd3JhcHBlZF9fPWUsdGhpcy5fX2FjdGlvbnNfXz1bXSx0aGlzLl9fY2hhaW5fXz0hIXQsdGhpcy5fX2luZGV4X189MCx0aGlzLl9fdmFsdWVzX189b31mdW5jdGlvbiAkbihlKXt0aGlzLl9fd3JhcHBlZF9fPWUsdGhpcy5fX2FjdGlvbnNfXz1bXSx0aGlzLl9fZGlyX189MSx0aGlzLl9fZmlsdGVyZWRfXz0hMSx0aGlzLl9faXRlcmF0ZWVzX189W10sdGhpcy5fX3Rha2VDb3VudF9fPXAsdGhpcy5fX3ZpZXdzX189W119ZnVuY3Rpb24gTm4oZSl7dmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24gRm4oZSl7dmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24gVW4oZSl7dmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24gV24oZSl7dmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuX19kYXRhX189bmV3IFVuOysrdDxuOyl0aGlzLmFkZChlW3RdKX1mdW5jdGlvbiB6bihlKXt2YXIgdD10aGlzLl9fZGF0YV9fPW5ldyBGbihlKTt0aGlzLnNpemU9dC5zaXplfWZ1bmN0aW9uIEduKGUsdCl7dmFyIG49TmEoZSkscj0hbiYmJGEoZSksbz0hbiYmIXImJnphKGUpLGk9IW4mJiFyJiYhbyYmbGwoZSksYT1ufHxyfHxvfHxpLGw9YT9HdChlLmxlbmd0aCxFZSk6W10scz1sLmxlbmd0aDtmb3IodmFyIGMgaW4gZSkhdCYmIUllLmNhbGwoZSxjKXx8YSYmKFwibGVuZ3RoXCI9PWN8fG8mJihcIm9mZnNldFwiPT1jfHxcInBhcmVudFwiPT1jKXx8aSYmKFwiYnVmZmVyXCI9PWN8fFwiYnl0ZUxlbmd0aFwiPT1jfHxcImJ5dGVPZmZzZXRcIj09Yyl8fGdpKGMscykpfHxsLnB1c2goYyk7cmV0dXJuIGx9ZnVuY3Rpb24gcW4oZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIHQ/ZVtVcigwLHQtMSldOm99ZnVuY3Rpb24gWW4oZSx0KXtyZXR1cm4gUmkoRW8oZSksb3IodCwwLGUubGVuZ3RoKSl9ZnVuY3Rpb24gS24oZSl7cmV0dXJuIFJpKEVvKGUpKX1mdW5jdGlvbiBYbihlLHQsbil7KG4hPT1vJiYhVmEoZVt0XSxuKXx8bj09PW8mJiEodCBpbiBlKSkmJm5yKGUsdCxuKX1mdW5jdGlvbiBKbihlLHQsbil7dmFyIHI9ZVt0XTtJZS5jYWxsKGUsdCkmJlZhKHIsbikmJihuIT09b3x8dCBpbiBlKXx8bnIoZSx0LG4pfWZ1bmN0aW9uIFFuKGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoO24tLTspaWYoVmEoZVtuXVswXSx0KSlyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiBlcihlLHQsbixyKXtyZXR1cm4gY3IoZSwoZnVuY3Rpb24oZSxvLGkpe3QocixlLG4oZSksaSl9KSkscn1mdW5jdGlvbiB0cihlLHQpe3JldHVybiBlJiZTbyh0LE1sKHQpLGUpfWZ1bmN0aW9uIG5yKGUsdCxuKXtcIl9fcHJvdG9fX1wiPT10JiZldD9ldChlLHQse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOm4sd3JpdGFibGU6ITB9KTplW3RdPW59ZnVuY3Rpb24gcnIoZSx0KXtmb3IodmFyIG49LTEsaT10Lmxlbmd0aCxhPXIoaSksbD1udWxsPT1lOysrbjxpOylhW25dPWw/bzpPbChlLHRbbl0pO3JldHVybiBhfWZ1bmN0aW9uIG9yKGUsdCxuKXtyZXR1cm4gZT09ZSYmKG4hPT1vJiYoZT1lPD1uP2U6biksdCE9PW8mJihlPWU+PXQ/ZTp0KSksZX1mdW5jdGlvbiBpcihlLHQsbixyLGksYSl7dmFyIGwscz0xJnQsYz0yJnQsdT00JnQ7aWYobiYmKGw9aT9uKGUscixpLGEpOm4oZSkpLGwhPT1vKXJldHVybiBsO2lmKCFKYShlKSlyZXR1cm4gZTt2YXIgZj1OYShlKTtpZihmKXtpZihsPWZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoLG49bmV3IGUuY29uc3RydWN0b3IodCk7cmV0dXJuIHQmJlwic3RyaW5nXCI9PXR5cGVvZiBlWzBdJiZJZS5jYWxsKGUsXCJpbmRleFwiKSYmKG4uaW5kZXg9ZS5pbmRleCxuLmlucHV0PWUuaW5wdXQpLG59KGUpLCFzKXJldHVybiBFbyhlLGwpfWVsc2V7dmFyIGQ9ZmkoZSkscD1kPT13fHxkPT1iO2lmKHphKGUpKXJldHVybiB3byhlLHMpO2lmKGQ9PU98fGQ9PWd8fHAmJiFpKXtpZihsPWN8fHA/e306cGkoZSksIXMpcmV0dXJuIGM/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gU28oZSx1aShlKSx0KX0oZSxmdW5jdGlvbihlLHQpe3JldHVybiBlJiZTbyh0LGtsKHQpLGUpfShsLGUpKTpmdW5jdGlvbihlLHQpe3JldHVybiBTbyhlLGNpKGUpLHQpfShlLHRyKGwsZSkpfWVsc2V7aWYoIWl0W2RdKXJldHVybiBpP2U6e307bD1mdW5jdGlvbihlLHQsbil7dmFyIHIsbz1lLmNvbnN0cnVjdG9yO3N3aXRjaCh0KXtjYXNlIFI6cmV0dXJuIGJvKGUpO2Nhc2UgbTpjYXNlIEM6cmV0dXJuIG5ldyBvKCtlKTtjYXNlIFA6cmV0dXJuIGZ1bmN0aW9uKGUsdCl7dmFyIG49dD9ibyhlLmJ1ZmZlcik6ZS5idWZmZXI7cmV0dXJuIG5ldyBlLmNvbnN0cnVjdG9yKG4sZS5ieXRlT2Zmc2V0LGUuYnl0ZUxlbmd0aCl9KGUsbik7Y2FzZSBJOmNhc2UgQTpjYXNlIFQ6Y2FzZSBIOmNhc2UgQjpjYXNlIFY6Y2FzZSBEOmNhc2UgWjpjYXNlICQ6cmV0dXJuIHhvKGUsbik7Y2FzZSB4OnJldHVybiBuZXcgbztjYXNlIF86Y2FzZSBqOnJldHVybiBuZXcgbyhlKTtjYXNlIEU6cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBlLmNvbnN0cnVjdG9yKGUuc291cmNlLGRlLmV4ZWMoZSkpO3JldHVybiB0Lmxhc3RJbmRleD1lLmxhc3RJbmRleCx0fShlKTtjYXNlIFM6cmV0dXJuIG5ldyBvO2Nhc2UgTTpyZXR1cm4gcj1lLFRuP09lKFRuLmNhbGwocikpOnt9fX0oZSxkLHMpfX1hfHwoYT1uZXcgem4pO3ZhciBoPWEuZ2V0KGUpO2lmKGgpcmV0dXJuIGg7YS5zZXQoZSxsKSxvbChlKT9lLmZvckVhY2goKGZ1bmN0aW9uKHIpe2wuYWRkKGlyKHIsdCxuLHIsZSxhKSl9KSk6ZWwoZSkmJmUuZm9yRWFjaCgoZnVuY3Rpb24ocixvKXtsLnNldChvLGlyKHIsdCxuLG8sZSxhKSl9KSk7dmFyIHY9Zj9vOih1P2M/dGk6ZWk6Yz9rbDpNbCkoZSk7cmV0dXJuIEx0KHZ8fGUsKGZ1bmN0aW9uKHIsbyl7diYmKHI9ZVtvPXJdKSxKbihsLG8saXIocix0LG4sbyxlLGEpKX0pKSxsfWZ1bmN0aW9uIGFyKGUsdCxuKXt2YXIgcj1uLmxlbmd0aDtpZihudWxsPT1lKXJldHVybiFyO2ZvcihlPU9lKGUpO3ItLTspe3ZhciBpPW5bcl0sYT10W2ldLGw9ZVtpXTtpZihsPT09byYmIShpIGluIGUpfHwhYShsKSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBscihlLHQsbil7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgU2UoaSk7cmV0dXJuIFNpKChmdW5jdGlvbigpe2UuYXBwbHkobyxuKX0pLHQpfWZ1bmN0aW9uIHNyKGUsdCxuLHIpe3ZhciBvPS0xLGk9TXQsYT0hMCxsPWUubGVuZ3RoLHM9W10sYz10Lmxlbmd0aDtpZighbClyZXR1cm4gcztuJiYodD1SdCh0LFl0KG4pKSkscj8oaT1rdCxhPSExKTp0Lmxlbmd0aD49MjAwJiYoaT1YdCxhPSExLHQ9bmV3IFduKHQpKTtlOmZvcig7KytvPGw7KXt2YXIgdT1lW29dLGY9bnVsbD09bj91Om4odSk7aWYodT1yfHwwIT09dT91OjAsYSYmZj09Zil7Zm9yKHZhciBkPWM7ZC0tOylpZih0W2RdPT09Ziljb250aW51ZSBlO3MucHVzaCh1KX1lbHNlIGkodCxmLHIpfHxzLnB1c2godSl9cmV0dXJuIHN9Qm4udGVtcGxhdGVTZXR0aW5ncz17ZXNjYXBlOlksZXZhbHVhdGU6SyxpbnRlcnBvbGF0ZTpYLHZhcmlhYmxlOlwiXCIsaW1wb3J0czp7XzpCbn19LEJuLnByb3RvdHlwZT1Ebi5wcm90b3R5cGUsQm4ucHJvdG90eXBlLmNvbnN0cnVjdG9yPUJuLFpuLnByb3RvdHlwZT1WbihEbi5wcm90b3R5cGUpLFpuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1abiwkbi5wcm90b3R5cGU9Vm4oRG4ucHJvdG90eXBlKSwkbi5wcm90b3R5cGUuY29uc3RydWN0b3I9JG4sTm4ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1Fbj9FbihudWxsKTp7fSx0aGlzLnNpemU9MH0sTm4ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmhhcyhlKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bZV07cmV0dXJuIHRoaXMuc2l6ZS09dD8xOjAsdH0sTm4ucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fO2lmKEVuKXt2YXIgbj10W2VdO3JldHVybiBuPT09YT9vOm59cmV0dXJuIEllLmNhbGwodCxlKT90W2VdOm99LE5uLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXztyZXR1cm4gRW4/dFtlXSE9PW86SWUuY2FsbCh0LGUpfSxObi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyhlKT8wOjEsbltlXT1FbiYmdD09PW8/YTp0LHRoaXN9LEZuLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9LEZuLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxuPVFuKHQsZSk7cmV0dXJuIShuPDB8fChuPT10Lmxlbmd0aC0xP3QucG9wKCk6R2UuY2FsbCh0LG4sMSksLS10aGlzLnNpemUsMCkpfSxGbi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX18sbj1Rbih0LGUpO3JldHVybiBuPDA/bzp0W25dWzFdfSxGbi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiBRbih0aGlzLl9fZGF0YV9fLGUpPi0xfSxGbi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fX2RhdGFfXyxyPVFuKG4sZSk7cmV0dXJuIHI8MD8oKyt0aGlzLnNpemUsbi5wdXNoKFtlLHRdKSk6bltyXVsxXT10LHRoaXN9LFVuLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuc2l6ZT0wLHRoaXMuX19kYXRhX189e2hhc2g6bmV3IE5uLG1hcDpuZXcoeG58fEZuKSxzdHJpbmc6bmV3IE5ufX0sVW4ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXt2YXIgdD1haSh0aGlzLGUpLmRlbGV0ZShlKTtyZXR1cm4gdGhpcy5zaXplLT10PzE6MCx0fSxVbi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBhaSh0aGlzLGUpLmdldChlKX0sVW4ucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gYWkodGhpcyxlKS5oYXMoZSl9LFVuLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1haSh0aGlzLGUpLHI9bi5zaXplO3JldHVybiBuLnNldChlLHQpLHRoaXMuc2l6ZSs9bi5zaXplPT1yPzA6MSx0aGlzfSxXbi5wcm90b3R5cGUuYWRkPVduLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLnNldChlLGEpLHRoaXN9LFduLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGUpfSx6bi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPW5ldyBGbix0aGlzLnNpemU9MH0sem4ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fLG49dC5kZWxldGUoZSk7cmV0dXJuIHRoaXMuc2l6ZT10LnNpemUsbn0sem4ucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoZSl9LHpuLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGUpfSx6bi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fX2RhdGFfXztpZihuIGluc3RhbmNlb2YgRm4pe3ZhciByPW4uX19kYXRhX187aWYoIXhufHxyLmxlbmd0aDwxOTkpcmV0dXJuIHIucHVzaChbZSx0XSksdGhpcy5zaXplPSsrbi5zaXplLHRoaXM7bj10aGlzLl9fZGF0YV9fPW5ldyBVbihyKX1yZXR1cm4gbi5zZXQoZSx0KSx0aGlzLnNpemU9bi5zaXplLHRoaXN9O3ZhciBjcj1rbyhtciksdXI9a28oQ3IsITApO2Z1bmN0aW9uIGZyKGUsdCl7dmFyIG49ITA7cmV0dXJuIGNyKGUsKGZ1bmN0aW9uKGUscixvKXtyZXR1cm4gbj0hIXQoZSxyLG8pfSkpLG59ZnVuY3Rpb24gZHIoZSx0LG4pe2Zvcih2YXIgcj0tMSxpPWUubGVuZ3RoOysrcjxpOyl7dmFyIGE9ZVtyXSxsPXQoYSk7aWYobnVsbCE9bCYmKHM9PT1vP2w9PWwmJiFhbChsKTpuKGwscykpKXZhciBzPWwsYz1hfXJldHVybiBjfWZ1bmN0aW9uIHByKGUsdCl7dmFyIG49W107cmV0dXJuIGNyKGUsKGZ1bmN0aW9uKGUscixvKXt0KGUscixvKSYmbi5wdXNoKGUpfSkpLG59ZnVuY3Rpb24gaHIoZSx0LG4scixvKXt2YXIgaT0tMSxhPWUubGVuZ3RoO2ZvcihufHwobj1oaSksb3x8KG89W10pOysraTxhOyl7dmFyIGw9ZVtpXTt0PjAmJm4obCk/dD4xP2hyKGwsdC0xLG4scixvKTpQdChvLGwpOnJ8fChvW28ubGVuZ3RoXT1sKX1yZXR1cm4gb312YXIgZ3I9Um8oKSx2cj1SbyghMCk7ZnVuY3Rpb24gbXIoZSx0KXtyZXR1cm4gZSYmZ3IoZSx0LE1sKX1mdW5jdGlvbiBDcihlLHQpe3JldHVybiBlJiZ2cihlLHQsTWwpfWZ1bmN0aW9uIHlyKGUsdCl7cmV0dXJuIGp0KHQsKGZ1bmN0aW9uKHQpe3JldHVybiBZYShlW3RdKX0pKX1mdW5jdGlvbiB3cihlLHQpe2Zvcih2YXIgbj0wLHI9KHQ9dm8odCxlKSkubGVuZ3RoO251bGwhPWUmJm48cjspZT1lW1RpKHRbbisrXSldO3JldHVybiBuJiZuPT1yP2U6b31mdW5jdGlvbiBicihlLHQsbil7dmFyIHI9dChlKTtyZXR1cm4gTmEoZSk/cjpQdChyLG4oZSkpfWZ1bmN0aW9uIHhyKGUpe3JldHVybiBudWxsPT1lP2U9PT1vP1wiW29iamVjdCBVbmRlZmluZWRdXCI6XCJbb2JqZWN0IE51bGxdXCI6SmUmJkplIGluIE9lKGUpP2Z1bmN0aW9uKGUpe3ZhciB0PUllLmNhbGwoZSxKZSksbj1lW0plXTt0cnl7ZVtKZV09bzt2YXIgcj0hMH1jYXRjaChlKXt9dmFyIGk9SGUuY2FsbChlKTtyZXR1cm4gciYmKHQ/ZVtKZV09bjpkZWxldGUgZVtKZV0pLGl9KGUpOmZ1bmN0aW9uKGUpe3JldHVybiBIZS5jYWxsKGUpfShlKX1mdW5jdGlvbiBfcihlLHQpe3JldHVybiBlPnR9ZnVuY3Rpb24gT3IoZSx0KXtyZXR1cm4gbnVsbCE9ZSYmSWUuY2FsbChlLHQpfWZ1bmN0aW9uIExyKGUsdCl7cmV0dXJuIG51bGwhPWUmJnQgaW4gT2UoZSl9ZnVuY3Rpb24gRXIoZSx0LG4pe2Zvcih2YXIgaT1uP2t0Ok10LGE9ZVswXS5sZW5ndGgsbD1lLmxlbmd0aCxzPWwsYz1yKGwpLHU9MS8wLGY9W107cy0tOyl7dmFyIGQ9ZVtzXTtzJiZ0JiYoZD1SdChkLFl0KHQpKSksdT12bihkLmxlbmd0aCx1KSxjW3NdPSFuJiYodHx8YT49MTIwJiZkLmxlbmd0aD49MTIwKT9uZXcgV24ocyYmZCk6b31kPWVbMF07dmFyIHA9LTEsaD1jWzBdO2U6Zm9yKDsrK3A8YSYmZi5sZW5ndGg8dTspe3ZhciBnPWRbcF0sdj10P3QoZyk6ZztpZihnPW58fDAhPT1nP2c6MCwhKGg/WHQoaCx2KTppKGYsdixuKSkpe2ZvcihzPWw7LS1zOyl7dmFyIG09Y1tzXTtpZighKG0/WHQobSx2KTppKGVbc10sdixuKSkpY29udGludWUgZX1oJiZoLnB1c2godiksZi5wdXNoKGcpfX1yZXR1cm4gZn1mdW5jdGlvbiBTcihlLHQsbil7dmFyIHI9bnVsbD09KGU9T2koZSx0PXZvKHQsZSkpKT9lOmVbVGkocWkodCkpXTtyZXR1cm4gbnVsbD09cj9vOl90KHIsZSxuKX1mdW5jdGlvbiBqcihlKXtyZXR1cm4gUWEoZSkmJnhyKGUpPT1nfWZ1bmN0aW9uIE1yKGUsdCxuLHIsaSl7cmV0dXJuIGU9PT10fHwobnVsbD09ZXx8bnVsbD09dHx8IVFhKGUpJiYhUWEodCk/ZSE9ZSYmdCE9dDpmdW5jdGlvbihlLHQsbixyLGksYSl7dmFyIGw9TmEoZSkscz1OYSh0KSxjPWw/djpmaShlKSx1PXM/djpmaSh0KSxmPShjPWM9PWc/TzpjKT09TyxkPSh1PXU9PWc/Tzp1KT09TyxwPWM9PXU7aWYocCYmemEoZSkpe2lmKCF6YSh0KSlyZXR1cm4hMTtsPSEwLGY9ITF9aWYocCYmIWYpcmV0dXJuIGF8fChhPW5ldyB6biksbHx8bGwoZSk/Sm8oZSx0LG4scixpLGEpOmZ1bmN0aW9uKGUsdCxuLHIsbyxpLGEpe3N3aXRjaChuKXtjYXNlIFA6aWYoZS5ieXRlTGVuZ3RoIT10LmJ5dGVMZW5ndGh8fGUuYnl0ZU9mZnNldCE9dC5ieXRlT2Zmc2V0KXJldHVybiExO2U9ZS5idWZmZXIsdD10LmJ1ZmZlcjtjYXNlIFI6cmV0dXJuIShlLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8IWkobmV3IE5lKGUpLG5ldyBOZSh0KSkpO2Nhc2UgbTpjYXNlIEM6Y2FzZSBfOnJldHVybiBWYSgrZSwrdCk7Y2FzZSB5OnJldHVybiBlLm5hbWU9PXQubmFtZSYmZS5tZXNzYWdlPT10Lm1lc3NhZ2U7Y2FzZSBFOmNhc2UgajpyZXR1cm4gZT09dCtcIlwiO2Nhc2UgeDp2YXIgbD1vbjtjYXNlIFM6dmFyIHM9MSZyO2lmKGx8fChsPXNuKSxlLnNpemUhPXQuc2l6ZSYmIXMpcmV0dXJuITE7dmFyIGM9YS5nZXQoZSk7aWYoYylyZXR1cm4gYz09dDtyfD0yLGEuc2V0KGUsdCk7dmFyIHU9Sm8obChlKSxsKHQpLHIsbyxpLGEpO3JldHVybiBhLmRlbGV0ZShlKSx1O2Nhc2UgTTppZihUbilyZXR1cm4gVG4uY2FsbChlKT09VG4uY2FsbCh0KX1yZXR1cm4hMX0oZSx0LGMsbixyLGksYSk7aWYoISgxJm4pKXt2YXIgaD1mJiZJZS5jYWxsKGUsXCJfX3dyYXBwZWRfX1wiKSx3PWQmJkllLmNhbGwodCxcIl9fd3JhcHBlZF9fXCIpO2lmKGh8fHcpe3ZhciBiPWg/ZS52YWx1ZSgpOmUsTD13P3QudmFsdWUoKTp0O3JldHVybiBhfHwoYT1uZXcgem4pLGkoYixMLG4scixhKX19cmV0dXJuISFwJiYoYXx8KGE9bmV3IHpuKSxmdW5jdGlvbihlLHQsbixyLGksYSl7dmFyIGw9MSZuLHM9ZWkoZSksYz1zLmxlbmd0aDtpZihjIT1laSh0KS5sZW5ndGgmJiFsKXJldHVybiExO2Zvcih2YXIgdT1jO3UtLTspe3ZhciBmPXNbdV07aWYoIShsP2YgaW4gdDpJZS5jYWxsKHQsZikpKXJldHVybiExfXZhciBkPWEuZ2V0KGUpLHA9YS5nZXQodCk7aWYoZCYmcClyZXR1cm4gZD09dCYmcD09ZTt2YXIgaD0hMDthLnNldChlLHQpLGEuc2V0KHQsZSk7Zm9yKHZhciBnPWw7Kyt1PGM7KXt2YXIgdj1lW2Y9c1t1XV0sbT10W2ZdO2lmKHIpdmFyIEM9bD9yKG0sdixmLHQsZSxhKTpyKHYsbSxmLGUsdCxhKTtpZighKEM9PT1vP3Y9PT1tfHxpKHYsbSxuLHIsYSk6Qykpe2g9ITE7YnJlYWt9Z3x8KGc9XCJjb25zdHJ1Y3RvclwiPT1mKX1pZihoJiYhZyl7dmFyIHk9ZS5jb25zdHJ1Y3Rvcix3PXQuY29uc3RydWN0b3I7eT09d3x8IShcImNvbnN0cnVjdG9yXCJpbiBlKXx8IShcImNvbnN0cnVjdG9yXCJpbiB0KXx8XCJmdW5jdGlvblwiPT10eXBlb2YgeSYmeSBpbnN0YW5jZW9mIHkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHcmJncgaW5zdGFuY2VvZiB3fHwoaD0hMSl9cmV0dXJuIGEuZGVsZXRlKGUpLGEuZGVsZXRlKHQpLGh9KGUsdCxuLHIsaSxhKSl9KGUsdCxuLHIsTXIsaSkpfWZ1bmN0aW9uIGtyKGUsdCxuLHIpe3ZhciBpPW4ubGVuZ3RoLGE9aSxsPSFyO2lmKG51bGw9PWUpcmV0dXJuIWE7Zm9yKGU9T2UoZSk7aS0tOyl7dmFyIHM9bltpXTtpZihsJiZzWzJdP3NbMV0hPT1lW3NbMF1dOiEoc1swXWluIGUpKXJldHVybiExfWZvcig7KytpPGE7KXt2YXIgYz0ocz1uW2ldKVswXSx1PWVbY10sZj1zWzFdO2lmKGwmJnNbMl0pe2lmKHU9PT1vJiYhKGMgaW4gZSkpcmV0dXJuITF9ZWxzZXt2YXIgZD1uZXcgem47aWYocil2YXIgcD1yKHUsZixjLGUsdCxkKTtpZighKHA9PT1vP01yKGYsdSwzLHIsZCk6cCkpcmV0dXJuITF9fXJldHVybiEwfWZ1bmN0aW9uIFJyKGUpe3JldHVybiEoIUphKGUpfHwodD1lLFRlJiZUZSBpbiB0KSkmJihZYShlKT9EZTpnZSkudGVzdChIaShlKSk7dmFyIHR9ZnVuY3Rpb24gUHIoZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZT9lOm51bGw9PWU/dHM6XCJvYmplY3RcIj09dHlwZW9mIGU/TmEoZSk/QnIoZVswXSxlWzFdKTpIcihlKTp1cyhlKX1mdW5jdGlvbiBJcihlKXtpZighd2koZSkpcmV0dXJuIGhuKGUpO3ZhciB0PVtdO2Zvcih2YXIgbiBpbiBPZShlKSlJZS5jYWxsKGUsbikmJlwiY29uc3RydWN0b3JcIiE9biYmdC5wdXNoKG4pO3JldHVybiB0fWZ1bmN0aW9uIEFyKGUsdCl7cmV0dXJuIGU8dH1mdW5jdGlvbiBUcihlLHQpe3ZhciBuPS0xLG89VWEoZSk/cihlLmxlbmd0aCk6W107cmV0dXJuIGNyKGUsKGZ1bmN0aW9uKGUscixpKXtvWysrbl09dChlLHIsaSl9KSksb31mdW5jdGlvbiBIcihlKXt2YXIgdD1saShlKTtyZXR1cm4gMT09dC5sZW5ndGgmJnRbMF1bMl0/eGkodFswXVswXSx0WzBdWzFdKTpmdW5jdGlvbihuKXtyZXR1cm4gbj09PWV8fGtyKG4sZSx0KX19ZnVuY3Rpb24gQnIoZSx0KXtyZXR1cm4gbWkoZSkmJmJpKHQpP3hpKFRpKGUpLHQpOmZ1bmN0aW9uKG4pe3ZhciByPU9sKG4sZSk7cmV0dXJuIHI9PT1vJiZyPT09dD9MbChuLGUpOk1yKHQsciwzKX19ZnVuY3Rpb24gVnIoZSx0LG4scixpKXtlIT09dCYmZ3IodCwoZnVuY3Rpb24oYSxsKXtpZihpfHwoaT1uZXcgem4pLEphKGEpKSFmdW5jdGlvbihlLHQsbixyLGksYSxsKXt2YXIgcz1MaShlLG4pLGM9TGkodCxuKSx1PWwuZ2V0KGMpO2lmKHUpWG4oZSxuLHUpO2Vsc2V7dmFyIGY9YT9hKHMsYyxuK1wiXCIsZSx0LGwpOm8sZD1mPT09bztpZihkKXt2YXIgcD1OYShjKSxoPSFwJiZ6YShjKSxnPSFwJiYhaCYmbGwoYyk7Zj1jLHB8fGh8fGc/TmEocyk/Zj1zOldhKHMpP2Y9RW8ocyk6aD8oZD0hMSxmPXdvKGMsITApKTpnPyhkPSExLGY9eG8oYywhMCkpOmY9W106bmwoYyl8fCRhKGMpPyhmPXMsJGEocyk/Zj1nbChzKTpKYShzKSYmIVlhKHMpfHwoZj1waShjKSkpOmQ9ITF9ZCYmKGwuc2V0KGMsZiksaShmLGMscixhLGwpLGwuZGVsZXRlKGMpKSxYbihlLG4sZil9fShlLHQsbCxuLFZyLHIsaSk7ZWxzZXt2YXIgcz1yP3IoTGkoZSxsKSxhLGwrXCJcIixlLHQsaSk6bztzPT09byYmKHM9YSksWG4oZSxsLHMpfX0pLGtsKX1mdW5jdGlvbiBEcihlLHQpe3ZhciBuPWUubGVuZ3RoO2lmKG4pcmV0dXJuIGdpKHQrPXQ8MD9uOjAsbik/ZVt0XTpvfWZ1bmN0aW9uIFpyKGUsdCxuKXt0PXQubGVuZ3RoP1J0KHQsKGZ1bmN0aW9uKGUpe3JldHVybiBOYShlKT9mdW5jdGlvbih0KXtyZXR1cm4gd3IodCwxPT09ZS5sZW5ndGg/ZVswXTplKX06ZX0pKTpbdHNdO3ZhciByPS0xO3Q9UnQodCxZdChpaSgpKSk7dmFyIG89VHIoZSwoZnVuY3Rpb24oZSxuLG8pe3ZhciBpPVJ0KHQsKGZ1bmN0aW9uKHQpe3JldHVybiB0KGUpfSkpO3JldHVybntjcml0ZXJpYTppLGluZGV4Oisrcix2YWx1ZTplfX0pKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmxlbmd0aDtmb3IoZS5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPS0xLG89ZS5jcml0ZXJpYSxpPXQuY3JpdGVyaWEsYT1vLmxlbmd0aCxsPW4ubGVuZ3RoOysrcjxhOyl7dmFyIHM9X28ob1tyXSxpW3JdKTtpZihzKXJldHVybiByPj1sP3M6cyooXCJkZXNjXCI9PW5bcl0/LTE6MSl9cmV0dXJuIGUuaW5kZXgtdC5pbmRleH0oZSx0LG4pfSkpO3ItLTspZVtyXT1lW3JdLnZhbHVlO3JldHVybiBlfShvKX1mdW5jdGlvbiAkcihlLHQsbil7Zm9yKHZhciByPS0xLG89dC5sZW5ndGgsaT17fTsrK3I8bzspe3ZhciBhPXRbcl0sbD13cihlLGEpO24obCxhKSYmWXIoaSx2byhhLGUpLGwpfXJldHVybiBpfWZ1bmN0aW9uIE5yKGUsdCxuLHIpe3ZhciBvPXI/WnQ6RHQsaT0tMSxhPXQubGVuZ3RoLGw9ZTtmb3IoZT09PXQmJih0PUVvKHQpKSxuJiYobD1SdChlLFl0KG4pKSk7KytpPGE7KWZvcih2YXIgcz0wLGM9dFtpXSx1PW4/bihjKTpjOyhzPW8obCx1LHMscikpPi0xOylsIT09ZSYmR2UuY2FsbChsLHMsMSksR2UuY2FsbChlLHMsMSk7cmV0dXJuIGV9ZnVuY3Rpb24gRnIoZSx0KXtmb3IodmFyIG49ZT90Lmxlbmd0aDowLHI9bi0xO24tLTspe3ZhciBvPXRbbl07aWYobj09cnx8byE9PWkpe3ZhciBpPW87Z2kobyk/R2UuY2FsbChlLG8sMSk6bG8oZSxvKX19cmV0dXJuIGV9ZnVuY3Rpb24gVXIoZSx0KXtyZXR1cm4gZStwdCh5bigpKih0LWUrMSkpfWZ1bmN0aW9uIFdyKGUsdCl7dmFyIG49XCJcIjtpZighZXx8dDwxfHx0PmYpcmV0dXJuIG47ZG97dCUyJiYobis9ZSksKHQ9cHQodC8yKSkmJihlKz1lKX13aGlsZSh0KTtyZXR1cm4gbn1mdW5jdGlvbiB6cihlLHQpe3JldHVybiBqaShfaShlLHQsdHMpLGUrXCJcIil9ZnVuY3Rpb24gR3IoZSl7cmV0dXJuIHFuKFZsKGUpKX1mdW5jdGlvbiBxcihlLHQpe3ZhciBuPVZsKGUpO3JldHVybiBSaShuLG9yKHQsMCxuLmxlbmd0aCkpfWZ1bmN0aW9uIFlyKGUsdCxuLHIpe2lmKCFKYShlKSlyZXR1cm4gZTtmb3IodmFyIGk9LTEsYT0odD12byh0LGUpKS5sZW5ndGgsbD1hLTEscz1lO251bGwhPXMmJisraTxhOyl7dmFyIGM9VGkodFtpXSksdT1uO2lmKFwiX19wcm90b19fXCI9PT1jfHxcImNvbnN0cnVjdG9yXCI9PT1jfHxcInByb3RvdHlwZVwiPT09YylyZXR1cm4gZTtpZihpIT1sKXt2YXIgZj1zW2NdOyh1PXI/cihmLGMscyk6byk9PT1vJiYodT1KYShmKT9mOmdpKHRbaSsxXSk/W106e30pfUpuKHMsYyx1KSxzPXNbY119cmV0dXJuIGV9dmFyIEtyPVNuP2Z1bmN0aW9uKGUsdCl7cmV0dXJuIFNuLnNldChlLHQpLGV9OnRzLFhyPWV0P2Z1bmN0aW9uKGUsdCl7cmV0dXJuIGV0KGUsXCJ0b1N0cmluZ1wiLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTpKbCh0KSx3cml0YWJsZTohMH0pfTp0cztmdW5jdGlvbiBKcihlKXtyZXR1cm4gUmkoVmwoZSkpfWZ1bmN0aW9uIFFyKGUsdCxuKXt2YXIgbz0tMSxpPWUubGVuZ3RoO3Q8MCYmKHQ9LXQ+aT8wOmkrdCksKG49bj5pP2k6bik8MCYmKG4rPWkpLGk9dD5uPzA6bi10Pj4+MCx0Pj4+PTA7Zm9yKHZhciBhPXIoaSk7KytvPGk7KWFbb109ZVtvK3RdO3JldHVybiBhfWZ1bmN0aW9uIGVvKGUsdCl7dmFyIG47cmV0dXJuIGNyKGUsKGZ1bmN0aW9uKGUscixvKXtyZXR1cm4hKG49dChlLHIsbykpfSkpLCEhbn1mdW5jdGlvbiB0byhlLHQsbil7dmFyIHI9MCxvPW51bGw9PWU/cjplLmxlbmd0aDtpZihcIm51bWJlclwiPT10eXBlb2YgdCYmdD09dCYmbzw9MjE0NzQ4MzY0Nyl7Zm9yKDtyPG87KXt2YXIgaT1yK28+Pj4xLGE9ZVtpXTtudWxsIT09YSYmIWFsKGEpJiYobj9hPD10OmE8dCk/cj1pKzE6bz1pfXJldHVybiBvfXJldHVybiBubyhlLHQsdHMsbil9ZnVuY3Rpb24gbm8oZSx0LG4scil7dmFyIGk9MCxhPW51bGw9PWU/MDplLmxlbmd0aDtpZigwPT09YSlyZXR1cm4gMDtmb3IodmFyIGw9KHQ9bih0KSkhPXQscz1udWxsPT09dCxjPWFsKHQpLHU9dD09PW87aTxhOyl7dmFyIGY9cHQoKGkrYSkvMiksZD1uKGVbZl0pLHA9ZCE9PW8saD1udWxsPT09ZCxnPWQ9PWQsdj1hbChkKTtpZihsKXZhciBtPXJ8fGc7ZWxzZSBtPXU/ZyYmKHJ8fHApOnM/ZyYmcCYmKHJ8fCFoKTpjP2cmJnAmJiFoJiYocnx8IXYpOiFoJiYhdiYmKHI/ZDw9dDpkPHQpO20/aT1mKzE6YT1mfXJldHVybiB2bihhLDQyOTQ5NjcyOTQpfWZ1bmN0aW9uIHJvKGUsdCl7Zm9yKHZhciBuPS0xLHI9ZS5sZW5ndGgsbz0wLGk9W107KytuPHI7KXt2YXIgYT1lW25dLGw9dD90KGEpOmE7aWYoIW58fCFWYShsLHMpKXt2YXIgcz1sO2lbbysrXT0wPT09YT8wOmF9fXJldHVybiBpfWZ1bmN0aW9uIG9vKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlP2U6YWwoZSk/ZDorZX1mdW5jdGlvbiBpbyhlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gZTtpZihOYShlKSlyZXR1cm4gUnQoZSxpbykrXCJcIjtpZihhbChlKSlyZXR1cm4gSG4/SG4uY2FsbChlKTpcIlwiO3ZhciB0PWUrXCJcIjtyZXR1cm5cIjBcIj09dCYmMS9lPT0tMS8wP1wiLTBcIjp0fWZ1bmN0aW9uIGFvKGUsdCxuKXt2YXIgcj0tMSxvPU10LGk9ZS5sZW5ndGgsYT0hMCxsPVtdLHM9bDtpZihuKWE9ITEsbz1rdDtlbHNlIGlmKGk+PTIwMCl7dmFyIGM9dD9udWxsOnpvKGUpO2lmKGMpcmV0dXJuIHNuKGMpO2E9ITEsbz1YdCxzPW5ldyBXbn1lbHNlIHM9dD9bXTpsO2U6Zm9yKDsrK3I8aTspe3ZhciB1PWVbcl0sZj10P3QodSk6dTtpZih1PW58fDAhPT11P3U6MCxhJiZmPT1mKXtmb3IodmFyIGQ9cy5sZW5ndGg7ZC0tOylpZihzW2RdPT09Ziljb250aW51ZSBlO3QmJnMucHVzaChmKSxsLnB1c2godSl9ZWxzZSBvKHMsZixuKXx8KHMhPT1sJiZzLnB1c2goZiksbC5wdXNoKHUpKX1yZXR1cm4gbH1mdW5jdGlvbiBsbyhlLHQpe3JldHVybiBudWxsPT0oZT1PaShlLHQ9dm8odCxlKSkpfHxkZWxldGUgZVtUaShxaSh0KSldfWZ1bmN0aW9uIHNvKGUsdCxuLHIpe3JldHVybiBZcihlLHQsbih3cihlLHQpKSxyKX1mdW5jdGlvbiBjbyhlLHQsbixyKXtmb3IodmFyIG89ZS5sZW5ndGgsaT1yP286LTE7KHI/aS0tOisraTxvKSYmdChlW2ldLGksZSk7KTtyZXR1cm4gbj9RcihlLHI/MDppLHI/aSsxOm8pOlFyKGUscj9pKzE6MCxyP286aSl9ZnVuY3Rpb24gdW8oZSx0KXt2YXIgbj1lO3JldHVybiBuIGluc3RhbmNlb2YgJG4mJihuPW4udmFsdWUoKSksSXQodCwoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5mdW5jLmFwcGx5KHQudGhpc0FyZyxQdChbZV0sdC5hcmdzKSl9KSxuKX1mdW5jdGlvbiBmbyhlLHQsbil7dmFyIG89ZS5sZW5ndGg7aWYobzwyKXJldHVybiBvP2FvKGVbMF0pOltdO2Zvcih2YXIgaT0tMSxhPXIobyk7KytpPG87KWZvcih2YXIgbD1lW2ldLHM9LTE7KytzPG87KXMhPWkmJihhW2ldPXNyKGFbaV18fGwsZVtzXSx0LG4pKTtyZXR1cm4gYW8oaHIoYSwxKSx0LG4pfWZ1bmN0aW9uIHBvKGUsdCxuKXtmb3IodmFyIHI9LTEsaT1lLmxlbmd0aCxhPXQubGVuZ3RoLGw9e307KytyPGk7KXt2YXIgcz1yPGE/dFtyXTpvO24obCxlW3JdLHMpfXJldHVybiBsfWZ1bmN0aW9uIGhvKGUpe3JldHVybiBXYShlKT9lOltdfWZ1bmN0aW9uIGdvKGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTp0c31mdW5jdGlvbiB2byhlLHQpe3JldHVybiBOYShlKT9lOm1pKGUsdCk/W2VdOkFpKHZsKGUpKX12YXIgbW89enI7ZnVuY3Rpb24gQ28oZSx0LG4pe3ZhciByPWUubGVuZ3RoO3JldHVybiBuPW49PT1vP3I6biwhdCYmbj49cj9lOlFyKGUsdCxuKX12YXIgeW89YXR8fGZ1bmN0aW9uKGUpe3JldHVybiBmdC5jbGVhclRpbWVvdXQoZSl9O2Z1bmN0aW9uIHdvKGUsdCl7aWYodClyZXR1cm4gZS5zbGljZSgpO3ZhciBuPWUubGVuZ3RoLHI9RmU/RmUobik6bmV3IGUuY29uc3RydWN0b3Iobik7cmV0dXJuIGUuY29weShyKSxyfWZ1bmN0aW9uIGJvKGUpe3ZhciB0PW5ldyBlLmNvbnN0cnVjdG9yKGUuYnl0ZUxlbmd0aCk7cmV0dXJuIG5ldyBOZSh0KS5zZXQobmV3IE5lKGUpKSx0fWZ1bmN0aW9uIHhvKGUsdCl7dmFyIG49dD9ibyhlLmJ1ZmZlcik6ZS5idWZmZXI7cmV0dXJuIG5ldyBlLmNvbnN0cnVjdG9yKG4sZS5ieXRlT2Zmc2V0LGUubGVuZ3RoKX1mdW5jdGlvbiBfbyhlLHQpe2lmKGUhPT10KXt2YXIgbj1lIT09byxyPW51bGw9PT1lLGk9ZT09ZSxhPWFsKGUpLGw9dCE9PW8scz1udWxsPT09dCxjPXQ9PXQsdT1hbCh0KTtpZighcyYmIXUmJiFhJiZlPnR8fGEmJmwmJmMmJiFzJiYhdXx8ciYmbCYmY3x8IW4mJmN8fCFpKXJldHVybiAxO2lmKCFyJiYhYSYmIXUmJmU8dHx8dSYmbiYmaSYmIXImJiFhfHxzJiZuJiZpfHwhbCYmaXx8IWMpcmV0dXJuLTF9cmV0dXJuIDB9ZnVuY3Rpb24gT28oZSx0LG4sbyl7Zm9yKHZhciBpPS0xLGE9ZS5sZW5ndGgsbD1uLmxlbmd0aCxzPS0xLGM9dC5sZW5ndGgsdT1nbihhLWwsMCksZj1yKGMrdSksZD0hbzsrK3M8YzspZltzXT10W3NdO2Zvcig7KytpPGw7KShkfHxpPGEpJiYoZltuW2ldXT1lW2ldKTtmb3IoO3UtLTspZltzKytdPWVbaSsrXTtyZXR1cm4gZn1mdW5jdGlvbiBMbyhlLHQsbixvKXtmb3IodmFyIGk9LTEsYT1lLmxlbmd0aCxsPS0xLHM9bi5sZW5ndGgsYz0tMSx1PXQubGVuZ3RoLGY9Z24oYS1zLDApLGQ9cihmK3UpLHA9IW87KytpPGY7KWRbaV09ZVtpXTtmb3IodmFyIGg9aTsrK2M8dTspZFtoK2NdPXRbY107Zm9yKDsrK2w8czspKHB8fGk8YSkmJihkW2grbltsXV09ZVtpKytdKTtyZXR1cm4gZH1mdW5jdGlvbiBFbyhlLHQpe3ZhciBuPS0xLG89ZS5sZW5ndGg7Zm9yKHR8fCh0PXIobykpOysrbjxvOyl0W25dPWVbbl07cmV0dXJuIHR9ZnVuY3Rpb24gU28oZSx0LG4scil7dmFyIGk9IW47bnx8KG49e30pO2Zvcih2YXIgYT0tMSxsPXQubGVuZ3RoOysrYTxsOyl7dmFyIHM9dFthXSxjPXI/cihuW3NdLGVbc10scyxuLGUpOm87Yz09PW8mJihjPWVbc10pLGk/bnIobixzLGMpOkpuKG4scyxjKX1yZXR1cm4gbn1mdW5jdGlvbiBqbyhlLHQpe3JldHVybiBmdW5jdGlvbihuLHIpe3ZhciBvPU5hKG4pP090OmVyLGk9dD90KCk6e307cmV0dXJuIG8obixlLGlpKHIsMiksaSl9fWZ1bmN0aW9uIE1vKGUpe3JldHVybiB6cigoZnVuY3Rpb24odCxuKXt2YXIgcj0tMSxpPW4ubGVuZ3RoLGE9aT4xP25baS0xXTpvLGw9aT4yP25bMl06bztmb3IoYT1lLmxlbmd0aD4zJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBhPyhpLS0sYSk6byxsJiZ2aShuWzBdLG5bMV0sbCkmJihhPWk8Mz9vOmEsaT0xKSx0PU9lKHQpOysrcjxpOyl7dmFyIHM9bltyXTtzJiZlKHQscyxyLGEpfXJldHVybiB0fSkpfWZ1bmN0aW9uIGtvKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7aWYobnVsbD09bilyZXR1cm4gbjtpZighVWEobikpcmV0dXJuIGUobixyKTtmb3IodmFyIG89bi5sZW5ndGgsaT10P286LTEsYT1PZShuKTsodD9pLS06KytpPG8pJiYhMSE9PXIoYVtpXSxpLGEpOyk7cmV0dXJuIG59fWZ1bmN0aW9uIFJvKGUpe3JldHVybiBmdW5jdGlvbih0LG4scil7Zm9yKHZhciBvPS0xLGk9T2UodCksYT1yKHQpLGw9YS5sZW5ndGg7bC0tOyl7dmFyIHM9YVtlP2w6KytvXTtpZighMT09PW4oaVtzXSxzLGkpKWJyZWFrfXJldHVybiB0fX1mdW5jdGlvbiBQbyhlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49cm4odD12bCh0KSk/dW4odCk6byxyPW4/blswXTp0LmNoYXJBdCgwKSxpPW4/Q28obiwxKS5qb2luKFwiXCIpOnQuc2xpY2UoMSk7cmV0dXJuIHJbZV0oKStpfX1mdW5jdGlvbiBJbyhlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEl0KFlsKCRsKHQpLnJlcGxhY2UoS2UsXCJcIikpLGUsXCJcIil9fWZ1bmN0aW9uIEFvKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cztzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IGU7Y2FzZSAxOnJldHVybiBuZXcgZSh0WzBdKTtjYXNlIDI6cmV0dXJuIG5ldyBlKHRbMF0sdFsxXSk7Y2FzZSAzOnJldHVybiBuZXcgZSh0WzBdLHRbMV0sdFsyXSk7Y2FzZSA0OnJldHVybiBuZXcgZSh0WzBdLHRbMV0sdFsyXSx0WzNdKTtjYXNlIDU6cmV0dXJuIG5ldyBlKHRbMF0sdFsxXSx0WzJdLHRbM10sdFs0XSk7Y2FzZSA2OnJldHVybiBuZXcgZSh0WzBdLHRbMV0sdFsyXSx0WzNdLHRbNF0sdFs1XSk7Y2FzZSA3OnJldHVybiBuZXcgZSh0WzBdLHRbMV0sdFsyXSx0WzNdLHRbNF0sdFs1XSx0WzZdKX12YXIgbj1WbihlLnByb3RvdHlwZSkscj1lLmFwcGx5KG4sdCk7cmV0dXJuIEphKHIpP3I6bn19ZnVuY3Rpb24gVG8oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXt2YXIgaT1PZSh0KTtpZighVWEodCkpe3ZhciBhPWlpKG4sMyk7dD1NbCh0KSxuPWZ1bmN0aW9uKGUpe3JldHVybiBhKGlbZV0sZSxpKX19dmFyIGw9ZSh0LG4scik7cmV0dXJuIGw+LTE/aVthP3RbbF06bF06b319ZnVuY3Rpb24gSG8oZSl7cmV0dXJuIFFvKChmdW5jdGlvbih0KXt2YXIgbj10Lmxlbmd0aCxyPW4sYT1abi5wcm90b3R5cGUudGhydTtmb3IoZSYmdC5yZXZlcnNlKCk7ci0tOyl7dmFyIGw9dFtyXTtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBsKXRocm93IG5ldyBTZShpKTtpZihhJiYhcyYmXCJ3cmFwcGVyXCI9PXJpKGwpKXZhciBzPW5ldyBabihbXSwhMCl9Zm9yKHI9cz9yOm47KytyPG47KXt2YXIgYz1yaShsPXRbcl0pLHU9XCJ3cmFwcGVyXCI9PWM/bmkobCk6bztzPXUmJkNpKHVbMF0pJiY0MjQ9PXVbMV0mJiF1WzRdLmxlbmd0aCYmMT09dVs5XT9zW3JpKHVbMF0pXS5hcHBseShzLHVbM10pOjE9PWwubGVuZ3RoJiZDaShsKT9zW2NdKCk6cy50aHJ1KGwpfXJldHVybiBmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cyxyPWVbMF07aWYocyYmMT09ZS5sZW5ndGgmJk5hKHIpKXJldHVybiBzLnBsYW50KHIpLnZhbHVlKCk7Zm9yKHZhciBvPTAsaT1uP3Rbb10uYXBwbHkodGhpcyxlKTpyOysrbzxuOylpPXRbb10uY2FsbCh0aGlzLGkpO3JldHVybiBpfX0pKX1mdW5jdGlvbiBCbyhlLHQsbixpLGEsbCxzLHUsZixkKXt2YXIgcD10JmMsaD0xJnQsZz0yJnQsdj0yNCZ0LG09NTEyJnQsQz1nP286QW8oZSk7cmV0dXJuIGZ1bmN0aW9uIGMoKXtmb3IodmFyIHk9YXJndW1lbnRzLmxlbmd0aCx3PXIoeSksYj15O2ItLTspd1tiXT1hcmd1bWVudHNbYl07aWYodil2YXIgeD1vaShjKSxfPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoLHI9MDtuLS07KWVbbl09PT10JiYrK3I7cmV0dXJuIHJ9KHcseCk7aWYoaSYmKHc9T28odyxpLGEsdikpLGwmJih3PUxvKHcsbCxzLHYpKSx5LT1fLHYmJnk8ZCl7dmFyIE89bG4odyx4KTtyZXR1cm4gVW8oZSx0LEJvLGMucGxhY2Vob2xkZXIsbix3LE8sdSxmLGQteSl9dmFyIEw9aD9uOnRoaXMsRT1nP0xbZV06ZTtyZXR1cm4geT13Lmxlbmd0aCx1P3c9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49ZS5sZW5ndGgscj12bih0Lmxlbmd0aCxuKSxpPUVvKGUpO3ItLTspe3ZhciBhPXRbcl07ZVtyXT1naShhLG4pP2lbYV06b31yZXR1cm4gZX0odyx1KTptJiZ5PjEmJncucmV2ZXJzZSgpLHAmJmY8eSYmKHcubGVuZ3RoPWYpLHRoaXMmJnRoaXMhPT1mdCYmdGhpcyBpbnN0YW5jZW9mIGMmJihFPUN8fEFvKEUpKSxFLmFwcGx5KEwsdyl9fWZ1bmN0aW9uIFZvKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBtcihlLChmdW5jdGlvbihlLG8saSl7dChyLG4oZSksbyxpKX0pKSxyfShuLGUsdChyKSx7fSl9fWZ1bmN0aW9uIERvKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7dmFyIGk7aWYobj09PW8mJnI9PT1vKXJldHVybiB0O2lmKG4hPT1vJiYoaT1uKSxyIT09byl7aWYoaT09PW8pcmV0dXJuIHI7XCJzdHJpbmdcIj09dHlwZW9mIG58fFwic3RyaW5nXCI9PXR5cGVvZiByPyhuPWlvKG4pLHI9aW8ocikpOihuPW9vKG4pLHI9b28ocikpLGk9ZShuLHIpfXJldHVybiBpfX1mdW5jdGlvbiBabyhlKXtyZXR1cm4gUW8oKGZ1bmN0aW9uKHQpe3JldHVybiB0PVJ0KHQsWXQoaWkoKSkpLHpyKChmdW5jdGlvbihuKXt2YXIgcj10aGlzO3JldHVybiBlKHQsKGZ1bmN0aW9uKGUpe3JldHVybiBfdChlLHIsbil9KSl9KSl9KSl9ZnVuY3Rpb24gJG8oZSx0KXt2YXIgbj0odD10PT09bz9cIiBcIjppbyh0KSkubGVuZ3RoO2lmKG48MilyZXR1cm4gbj9Xcih0LGUpOnQ7dmFyIHI9V3IodCxkdChlL2NuKHQpKSk7cmV0dXJuIHJuKHQpP0NvKHVuKHIpLDAsZSkuam9pbihcIlwiKTpyLnNsaWNlKDAsZSl9ZnVuY3Rpb24gTm8oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbixpKXtyZXR1cm4gaSYmXCJudW1iZXJcIiE9dHlwZW9mIGkmJnZpKHQsbixpKSYmKG49aT1vKSx0PWZsKHQpLG49PT1vPyhuPXQsdD0wKTpuPWZsKG4pLGZ1bmN0aW9uKGUsdCxuLG8pe2Zvcih2YXIgaT0tMSxhPWduKGR0KCh0LWUpLyhufHwxKSksMCksbD1yKGEpO2EtLTspbFtvP2E6KytpXT1lLGUrPW47cmV0dXJuIGx9KHQsbixpPWk9PT1vP3Q8bj8xOi0xOmZsKGkpLGUpfX1mdW5jdGlvbiBGbyhlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdCYmXCJzdHJpbmdcIj09dHlwZW9mIG58fCh0PWhsKHQpLG49aGwobikpLGUodCxuKX19ZnVuY3Rpb24gVW8oZSx0LG4scixpLGEsbCxjLHUsZil7dmFyIGQ9OCZ0O3R8PWQ/czo2NCw0Jih0Jj1+KGQ/NjQ6cykpfHwodCY9LTQpO3ZhciBwPVtlLHQsaSxkP2E6byxkP2w6byxkP286YSxkP286bCxjLHUsZl0saD1uLmFwcGx5KG8scCk7cmV0dXJuIENpKGUpJiZFaShoLHApLGgucGxhY2Vob2xkZXI9cixNaShoLGUsdCl9ZnVuY3Rpb24gV28oZSl7dmFyIHQ9X2VbZV07cmV0dXJuIGZ1bmN0aW9uKGUsbil7aWYoZT1obChlKSwobj1udWxsPT1uPzA6dm4oZGwobiksMjkyKSkmJkh0KGUpKXt2YXIgcj0odmwoZSkrXCJlXCIpLnNwbGl0KFwiZVwiKTtyZXR1cm4rKChyPSh2bCh0KHJbMF0rXCJlXCIrKCtyWzFdK24pKSkrXCJlXCIpLnNwbGl0KFwiZVwiKSlbMF0rXCJlXCIrKCtyWzFdLW4pKX1yZXR1cm4gdChlKX19dmFyIHpvPU9uJiYxL3NuKG5ldyBPbihbLC0wXSkpWzFdPT11P2Z1bmN0aW9uKGUpe3JldHVybiBuZXcgT24oZSl9OmFzO2Z1bmN0aW9uIEdvKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj1maSh0KTtyZXR1cm4gbj09eD9vbih0KTpuPT1TP2Z1bmN0aW9uKGUpe3ZhciB0PS0xLG49QXJyYXkoZS5zaXplKTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlKXtuWysrdF09W2UsZV19KSksbn0odCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUnQodCwoZnVuY3Rpb24odCl7cmV0dXJuW3QsZVt0XV19KSl9KHQsZSh0KSl9fWZ1bmN0aW9uIHFvKGUsdCxuLGEsdSxmLGQscCl7dmFyIGg9MiZ0O2lmKCFoJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBTZShpKTt2YXIgZz1hP2EubGVuZ3RoOjA7aWYoZ3x8KHQmPS05NyxhPXU9byksZD1kPT09bz9kOmduKGRsKGQpLDApLHA9cD09PW8/cDpkbChwKSxnLT11P3UubGVuZ3RoOjAsNjQmdCl7dmFyIHY9YSxtPXU7YT11PW99dmFyIEM9aD9vOm5pKGUpLHk9W2UsdCxuLGEsdSx2LG0sZixkLHBdO2lmKEMmJmZ1bmN0aW9uKGUsdCl7dmFyIG49ZVsxXSxyPXRbMV0sbz1ufHIsaT1vPDEzMSxhPXI9PWMmJjg9PW58fHI9PWMmJjI1Nj09biYmZVs3XS5sZW5ndGg8PXRbOF18fDM4ND09ciYmdFs3XS5sZW5ndGg8PXRbOF0mJjg9PW47aWYoIWkmJiFhKXJldHVybiBlOzEmciYmKGVbMl09dFsyXSxvfD0xJm4/MDo0KTt2YXIgcz10WzNdO2lmKHMpe3ZhciB1PWVbM107ZVszXT11P09vKHUscyx0WzRdKTpzLGVbNF09dT9sbihlWzNdLGwpOnRbNF19KHM9dFs1XSkmJih1PWVbNV0sZVs1XT11P0xvKHUscyx0WzZdKTpzLGVbNl09dT9sbihlWzVdLGwpOnRbNl0pLChzPXRbN10pJiYoZVs3XT1zKSxyJmMmJihlWzhdPW51bGw9PWVbOF0/dFs4XTp2bihlWzhdLHRbOF0pKSxudWxsPT1lWzldJiYoZVs5XT10WzldKSxlWzBdPXRbMF0sZVsxXT1vfSh5LEMpLGU9eVswXSx0PXlbMV0sbj15WzJdLGE9eVszXSx1PXlbNF0sIShwPXlbOV09eVs5XT09PW8/aD8wOmUubGVuZ3RoOmduKHlbOV0tZywwKSkmJjI0JnQmJih0Jj0tMjUpLHQmJjEhPXQpdz04PT10fHwxNj09dD9mdW5jdGlvbihlLHQsbil7dmFyIGk9QW8oZSk7cmV0dXJuIGZ1bmN0aW9uIGEoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxzPXIobCksYz1sLHU9b2koYSk7Yy0tOylzW2NdPWFyZ3VtZW50c1tjXTt2YXIgZj1sPDMmJnNbMF0hPT11JiZzW2wtMV0hPT11P1tdOmxuKHMsdSk7cmV0dXJuKGwtPWYubGVuZ3RoKTxuP1VvKGUsdCxCbyxhLnBsYWNlaG9sZGVyLG8scyxmLG8sbyxuLWwpOl90KHRoaXMmJnRoaXMhPT1mdCYmdGhpcyBpbnN0YW5jZW9mIGE/aTplLHRoaXMscyl9fShlLHQscCk6dCE9cyYmMzMhPXR8fHUubGVuZ3RoP0JvLmFwcGx5KG8seSk6ZnVuY3Rpb24oZSx0LG4sbyl7dmFyIGk9MSZ0LGE9QW8oZSk7cmV0dXJuIGZ1bmN0aW9uIHQoKXtmb3IodmFyIGw9LTEscz1hcmd1bWVudHMubGVuZ3RoLGM9LTEsdT1vLmxlbmd0aCxmPXIodStzKSxkPXRoaXMmJnRoaXMhPT1mdCYmdGhpcyBpbnN0YW5jZW9mIHQ/YTplOysrYzx1OylmW2NdPW9bY107Zm9yKDtzLS07KWZbYysrXT1hcmd1bWVudHNbKytsXTtyZXR1cm4gX3QoZCxpP246dGhpcyxmKX19KGUsdCxuLGEpO2Vsc2UgdmFyIHc9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPTEmdCxvPUFvKGUpO3JldHVybiBmdW5jdGlvbiB0KCl7cmV0dXJuKHRoaXMmJnRoaXMhPT1mdCYmdGhpcyBpbnN0YW5jZW9mIHQ/bzplKS5hcHBseShyP246dGhpcyxhcmd1bWVudHMpfX0oZSx0LG4pO3JldHVybiBNaSgoQz9LcjpFaSkodyx5KSxlLHQpfWZ1bmN0aW9uIFlvKGUsdCxuLHIpe3JldHVybiBlPT09b3x8VmEoZSxrZVtuXSkmJiFJZS5jYWxsKHIsbik/dDplfWZ1bmN0aW9uIEtvKGUsdCxuLHIsaSxhKXtyZXR1cm4gSmEoZSkmJkphKHQpJiYoYS5zZXQodCxlKSxWcihlLHQsbyxLbyxhKSxhLmRlbGV0ZSh0KSksZX1mdW5jdGlvbiBYbyhlKXtyZXR1cm4gbmwoZSk/bzplfWZ1bmN0aW9uIEpvKGUsdCxuLHIsaSxhKXt2YXIgbD0xJm4scz1lLmxlbmd0aCxjPXQubGVuZ3RoO2lmKHMhPWMmJiEobCYmYz5zKSlyZXR1cm4hMTt2YXIgdT1hLmdldChlKSxmPWEuZ2V0KHQpO2lmKHUmJmYpcmV0dXJuIHU9PXQmJmY9PWU7dmFyIGQ9LTEscD0hMCxoPTImbj9uZXcgV246bztmb3IoYS5zZXQoZSx0KSxhLnNldCh0LGUpOysrZDxzOyl7dmFyIGc9ZVtkXSx2PXRbZF07aWYocil2YXIgbT1sP3IodixnLGQsdCxlLGEpOnIoZyx2LGQsZSx0LGEpO2lmKG0hPT1vKXtpZihtKWNvbnRpbnVlO3A9ITE7YnJlYWt9aWYoaCl7aWYoIVR0KHQsKGZ1bmN0aW9uKGUsdCl7aWYoIVh0KGgsdCkmJihnPT09ZXx8aShnLGUsbixyLGEpKSlyZXR1cm4gaC5wdXNoKHQpfSkpKXtwPSExO2JyZWFrfX1lbHNlIGlmKGchPT12JiYhaShnLHYsbixyLGEpKXtwPSExO2JyZWFrfX1yZXR1cm4gYS5kZWxldGUoZSksYS5kZWxldGUodCkscH1mdW5jdGlvbiBRbyhlKXtyZXR1cm4gamkoX2koZSxvLEZpKSxlK1wiXCIpfWZ1bmN0aW9uIGVpKGUpe3JldHVybiBicihlLE1sLGNpKX1mdW5jdGlvbiB0aShlKXtyZXR1cm4gYnIoZSxrbCx1aSl9dmFyIG5pPVNuP2Z1bmN0aW9uKGUpe3JldHVybiBTbi5nZXQoZSl9OmFzO2Z1bmN0aW9uIHJpKGUpe2Zvcih2YXIgdD1lLm5hbWUrXCJcIixuPWpuW3RdLHI9SWUuY2FsbChqbix0KT9uLmxlbmd0aDowO3ItLTspe3ZhciBvPW5bcl0saT1vLmZ1bmM7aWYobnVsbD09aXx8aT09ZSlyZXR1cm4gby5uYW1lfXJldHVybiB0fWZ1bmN0aW9uIG9pKGUpe3JldHVybihJZS5jYWxsKEJuLFwicGxhY2Vob2xkZXJcIik/Qm46ZSkucGxhY2Vob2xkZXJ9ZnVuY3Rpb24gaWkoKXt2YXIgZT1Cbi5pdGVyYXRlZXx8bnM7cmV0dXJuIGU9ZT09PW5zP1ByOmUsYXJndW1lbnRzLmxlbmd0aD9lKGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0pOmV9ZnVuY3Rpb24gYWkoZSx0KXt2YXIgbixyLG89ZS5fX2RhdGFfXztyZXR1cm4oXCJzdHJpbmdcIj09KHI9dHlwZW9mKG49dCkpfHxcIm51bWJlclwiPT1yfHxcInN5bWJvbFwiPT1yfHxcImJvb2xlYW5cIj09cj9cIl9fcHJvdG9fX1wiIT09bjpudWxsPT09bik/b1tcInN0cmluZ1wiPT10eXBlb2YgdD9cInN0cmluZ1wiOlwiaGFzaFwiXTpvLm1hcH1mdW5jdGlvbiBsaShlKXtmb3IodmFyIHQ9TWwoZSksbj10Lmxlbmd0aDtuLS07KXt2YXIgcj10W25dLG89ZVtyXTt0W25dPVtyLG8sYmkobyldfXJldHVybiB0fWZ1bmN0aW9uIHNpKGUsdCl7dmFyIG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZT9vOmVbdF19KGUsdCk7cmV0dXJuIFJyKG4pP246b312YXIgY2k9Z3Q/ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/W106KGU9T2UoZSksanQoZ3QoZSksKGZ1bmN0aW9uKHQpe3JldHVybiB6ZS5jYWxsKGUsdCl9KSkpfTpwcyx1aT1ndD9mdW5jdGlvbihlKXtmb3IodmFyIHQ9W107ZTspUHQodCxjaShlKSksZT1VZShlKTtyZXR1cm4gdH06cHMsZmk9eHI7ZnVuY3Rpb24gZGkoZSx0LG4pe2Zvcih2YXIgcj0tMSxvPSh0PXZvKHQsZSkpLmxlbmd0aCxpPSExOysrcjxvOyl7dmFyIGE9VGkodFtyXSk7aWYoIShpPW51bGwhPWUmJm4oZSxhKSkpYnJlYWs7ZT1lW2FdfXJldHVybiBpfHwrK3IhPW8/aTohIShvPW51bGw9PWU/MDplLmxlbmd0aCkmJlhhKG8pJiZnaShhLG8pJiYoTmEoZSl8fCRhKGUpKX1mdW5jdGlvbiBwaShlKXtyZXR1cm5cImZ1bmN0aW9uXCIhPXR5cGVvZiBlLmNvbnN0cnVjdG9yfHx3aShlKT97fTpWbihVZShlKSl9ZnVuY3Rpb24gaGkoZSl7cmV0dXJuIE5hKGUpfHwkYShlKXx8ISEocWUmJmUmJmVbcWVdKX1mdW5jdGlvbiBnaShlLHQpe3ZhciBuPXR5cGVvZiBlO3JldHVybiEhKHQ9bnVsbD09dD9mOnQpJiYoXCJudW1iZXJcIj09bnx8XCJzeW1ib2xcIiE9biYmbWUudGVzdChlKSkmJmU+LTEmJmUlMT09MCYmZTx0fWZ1bmN0aW9uIHZpKGUsdCxuKXtpZighSmEobikpcmV0dXJuITE7dmFyIHI9dHlwZW9mIHQ7cmV0dXJuISEoXCJudW1iZXJcIj09cj9VYShuKSYmZ2kodCxuLmxlbmd0aCk6XCJzdHJpbmdcIj09ciYmdCBpbiBuKSYmVmEoblt0XSxlKX1mdW5jdGlvbiBtaShlLHQpe2lmKE5hKGUpKXJldHVybiExO3ZhciBuPXR5cGVvZiBlO3JldHVybiEoXCJudW1iZXJcIiE9biYmXCJzeW1ib2xcIiE9biYmXCJib29sZWFuXCIhPW4mJm51bGwhPWUmJiFhbChlKSl8fFEudGVzdChlKXx8IUoudGVzdChlKXx8bnVsbCE9dCYmZSBpbiBPZSh0KX1mdW5jdGlvbiBDaShlKXt2YXIgdD1yaShlKSxuPUJuW3RdO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIG58fCEodCBpbiAkbi5wcm90b3R5cGUpKXJldHVybiExO2lmKGU9PT1uKXJldHVybiEwO3ZhciByPW5pKG4pO3JldHVybiEhciYmZT09PXJbMF19KGJuJiZmaShuZXcgYm4obmV3IEFycmF5QnVmZmVyKDEpKSkhPVB8fHhuJiZmaShuZXcgeG4pIT14fHxfbiYmZmkoX24ucmVzb2x2ZSgpKSE9THx8T24mJmZpKG5ldyBPbikhPVN8fExuJiZmaShuZXcgTG4pIT1rKSYmKGZpPWZ1bmN0aW9uKGUpe3ZhciB0PXhyKGUpLG49dD09Tz9lLmNvbnN0cnVjdG9yOm8scj1uP0hpKG4pOlwiXCI7aWYocilzd2l0Y2gocil7Y2FzZSBNbjpyZXR1cm4gUDtjYXNlIGtuOnJldHVybiB4O2Nhc2UgUm46cmV0dXJuIEw7Y2FzZSBQbjpyZXR1cm4gUztjYXNlIEluOnJldHVybiBrfXJldHVybiB0fSk7dmFyIHlpPVJlP1lhOmhzO2Z1bmN0aW9uIHdpKGUpe3ZhciB0PWUmJmUuY29uc3RydWN0b3I7cmV0dXJuIGU9PT0oXCJmdW5jdGlvblwiPT10eXBlb2YgdCYmdC5wcm90b3R5cGV8fGtlKX1mdW5jdGlvbiBiaShlKXtyZXR1cm4gZT09ZSYmIUphKGUpfWZ1bmN0aW9uIHhpKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBudWxsIT1uJiZuW2VdPT09dCYmKHQhPT1vfHxlIGluIE9lKG4pKX19ZnVuY3Rpb24gX2koZSx0LG4pe3JldHVybiB0PWduKHQ9PT1vP2UubGVuZ3RoLTE6dCwwKSxmdW5jdGlvbigpe2Zvcih2YXIgbz1hcmd1bWVudHMsaT0tMSxhPWduKG8ubGVuZ3RoLXQsMCksbD1yKGEpOysraTxhOylsW2ldPW9bdCtpXTtpPS0xO2Zvcih2YXIgcz1yKHQrMSk7KytpPHQ7KXNbaV09b1tpXTtyZXR1cm4gc1t0XT1uKGwpLF90KGUsdGhpcyxzKX19ZnVuY3Rpb24gT2koZSx0KXtyZXR1cm4gdC5sZW5ndGg8Mj9lOndyKGUsUXIodCwwLC0xKSl9ZnVuY3Rpb24gTGkoZSx0KXtpZigoXCJjb25zdHJ1Y3RvclwiIT09dHx8XCJmdW5jdGlvblwiIT10eXBlb2YgZVt0XSkmJlwiX19wcm90b19fXCIhPXQpcmV0dXJuIGVbdF19dmFyIEVpPWtpKEtyKSxTaT11dHx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnQuc2V0VGltZW91dChlLHQpfSxqaT1raShYcik7ZnVuY3Rpb24gTWkoZSx0LG4pe3ZhciByPXQrXCJcIjtyZXR1cm4gamkoZSxmdW5jdGlvbihlLHQpe3ZhciBuPXQubGVuZ3RoO2lmKCFuKXJldHVybiBlO3ZhciByPW4tMTtyZXR1cm4gdFtyXT0obj4xP1wiJiBcIjpcIlwiKSt0W3JdLHQ9dC5qb2luKG4+Mj9cIiwgXCI6XCIgXCIpLGUucmVwbGFjZShpZSxcIntcXG4vKiBbd3JhcHBlZCB3aXRoIFwiK3QrXCJdICovXFxuXCIpfShyLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIEx0KGgsKGZ1bmN0aW9uKG4pe3ZhciByPVwiXy5cIituWzBdO3QmblsxXSYmIU10KGUscikmJmUucHVzaChyKX0pKSxlLnNvcnQoKX0oZnVuY3Rpb24oZSl7dmFyIHQ9ZS5tYXRjaChhZSk7cmV0dXJuIHQ/dFsxXS5zcGxpdChsZSk6W119KHIpLG4pKSl9ZnVuY3Rpb24ga2koZSl7dmFyIHQ9MCxuPTA7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9bW4oKSxpPTE2LShyLW4pO2lmKG49cixpPjApe2lmKCsrdD49ODAwKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSB0PTA7cmV0dXJuIGUuYXBwbHkobyxhcmd1bWVudHMpfX1mdW5jdGlvbiBSaShlLHQpe3ZhciBuPS0xLHI9ZS5sZW5ndGgsaT1yLTE7Zm9yKHQ9dD09PW8/cjp0Oysrbjx0Oyl7dmFyIGE9VXIobixpKSxsPWVbYV07ZVthXT1lW25dLGVbbl09bH1yZXR1cm4gZS5sZW5ndGg9dCxlfXZhciBQaSxJaSxBaT0oUGk9UGEoKGZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiA0Nj09PWUuY2hhckNvZGVBdCgwKSYmdC5wdXNoKFwiXCIpLGUucmVwbGFjZShlZSwoZnVuY3Rpb24oZSxuLHIsbyl7dC5wdXNoKHI/by5yZXBsYWNlKHVlLFwiJDFcIik6bnx8ZSl9KSksdH0pLChmdW5jdGlvbihlKXtyZXR1cm4gNTAwPT09SWkuc2l6ZSYmSWkuY2xlYXIoKSxlfSkpLElpPVBpLmNhY2hlLFBpKTtmdW5jdGlvbiBUaShlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZXx8YWwoZSkpcmV0dXJuIGU7dmFyIHQ9ZStcIlwiO3JldHVyblwiMFwiPT10JiYxL2U9PS0xLzA/XCItMFwiOnR9ZnVuY3Rpb24gSGkoZSl7aWYobnVsbCE9ZSl7dHJ5e3JldHVybiBQZS5jYWxsKGUpfWNhdGNoKGUpe310cnl7cmV0dXJuIGUrXCJcIn1jYXRjaChlKXt9fXJldHVyblwiXCJ9ZnVuY3Rpb24gQmkoZSl7aWYoZSBpbnN0YW5jZW9mICRuKXJldHVybiBlLmNsb25lKCk7dmFyIHQ9bmV3IFpuKGUuX193cmFwcGVkX18sZS5fX2NoYWluX18pO3JldHVybiB0Ll9fYWN0aW9uc19fPUVvKGUuX19hY3Rpb25zX18pLHQuX19pbmRleF9fPWUuX19pbmRleF9fLHQuX192YWx1ZXNfXz1lLl9fdmFsdWVzX18sdH12YXIgVmk9enIoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIFdhKGUpP3NyKGUsaHIodCwxLFdhLCEwKSk6W119KSksRGk9enIoKGZ1bmN0aW9uKGUsdCl7dmFyIG49cWkodCk7cmV0dXJuIFdhKG4pJiYobj1vKSxXYShlKT9zcihlLGhyKHQsMSxXYSwhMCksaWkobiwyKSk6W119KSksWmk9enIoKGZ1bmN0aW9uKGUsdCl7dmFyIG49cWkodCk7cmV0dXJuIFdhKG4pJiYobj1vKSxXYShlKT9zcihlLGhyKHQsMSxXYSwhMCksbyxuKTpbXX0pKTtmdW5jdGlvbiAkaShlLHQsbil7dmFyIHI9bnVsbD09ZT8wOmUubGVuZ3RoO2lmKCFyKXJldHVybi0xO3ZhciBvPW51bGw9PW4/MDpkbChuKTtyZXR1cm4gbzwwJiYobz1nbihyK28sMCkpLFZ0KGUsaWkodCwzKSxvKX1mdW5jdGlvbiBOaShlLHQsbil7dmFyIHI9bnVsbD09ZT8wOmUubGVuZ3RoO2lmKCFyKXJldHVybi0xO3ZhciBpPXItMTtyZXR1cm4gbiE9PW8mJihpPWRsKG4pLGk9bjwwP2duKHIraSwwKTp2bihpLHItMSkpLFZ0KGUsaWkodCwzKSxpLCEwKX1mdW5jdGlvbiBGaShlKXtyZXR1cm4gbnVsbCE9ZSYmZS5sZW5ndGg/aHIoZSwxKTpbXX1mdW5jdGlvbiBVaShlKXtyZXR1cm4gZSYmZS5sZW5ndGg/ZVswXTpvfXZhciBXaT16cigoZnVuY3Rpb24oZSl7dmFyIHQ9UnQoZSxobyk7cmV0dXJuIHQubGVuZ3RoJiZ0WzBdPT09ZVswXT9Fcih0KTpbXX0pKSx6aT16cigoZnVuY3Rpb24oZSl7dmFyIHQ9cWkoZSksbj1SdChlLGhvKTtyZXR1cm4gdD09PXFpKG4pP3Q9bzpuLnBvcCgpLG4ubGVuZ3RoJiZuWzBdPT09ZVswXT9FcihuLGlpKHQsMikpOltdfSkpLEdpPXpyKChmdW5jdGlvbihlKXt2YXIgdD1xaShlKSxuPVJ0KGUsaG8pO3JldHVybih0PVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpvKSYmbi5wb3AoKSxuLmxlbmd0aCYmblswXT09PWVbMF0/RXIobixvLHQpOltdfSkpO2Z1bmN0aW9uIHFpKGUpe3ZhciB0PW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gdD9lW3QtMV06b312YXIgWWk9enIoS2kpO2Z1bmN0aW9uIEtpKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoJiZ0JiZ0Lmxlbmd0aD9OcihlLHQpOmV9dmFyIFhpPVFvKChmdW5jdGlvbihlLHQpe3ZhciBuPW51bGw9PWU/MDplLmxlbmd0aCxyPXJyKGUsdCk7cmV0dXJuIEZyKGUsUnQodCwoZnVuY3Rpb24oZSl7cmV0dXJuIGdpKGUsbik/K2U6ZX0pKS5zb3J0KF9vKSkscn0pKTtmdW5jdGlvbiBKaShlKXtyZXR1cm4gbnVsbD09ZT9lOnduLmNhbGwoZSl9dmFyIFFpPXpyKChmdW5jdGlvbihlKXtyZXR1cm4gYW8oaHIoZSwxLFdhLCEwKSl9KSksZWE9enIoKGZ1bmN0aW9uKGUpe3ZhciB0PXFpKGUpO3JldHVybiBXYSh0KSYmKHQ9byksYW8oaHIoZSwxLFdhLCEwKSxpaSh0LDIpKX0pKSx0YT16cigoZnVuY3Rpb24oZSl7dmFyIHQ9cWkoZSk7cmV0dXJuIHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Om8sYW8oaHIoZSwxLFdhLCEwKSxvLHQpfSkpO2Z1bmN0aW9uIG5hKGUpe2lmKCFlfHwhZS5sZW5ndGgpcmV0dXJuW107dmFyIHQ9MDtyZXR1cm4gZT1qdChlLChmdW5jdGlvbihlKXtpZihXYShlKSlyZXR1cm4gdD1nbihlLmxlbmd0aCx0KSwhMH0pKSxHdCh0LChmdW5jdGlvbih0KXtyZXR1cm4gUnQoZSxGdCh0KSl9KSl9ZnVuY3Rpb24gcmEoZSx0KXtpZighZXx8IWUubGVuZ3RoKXJldHVybltdO3ZhciBuPW5hKGUpO3JldHVybiBudWxsPT10P246UnQobiwoZnVuY3Rpb24oZSl7cmV0dXJuIF90KHQsbyxlKX0pKX12YXIgb2E9enIoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIFdhKGUpP3NyKGUsdCk6W119KSksaWE9enIoKGZ1bmN0aW9uKGUpe3JldHVybiBmbyhqdChlLFdhKSl9KSksYWE9enIoKGZ1bmN0aW9uKGUpe3ZhciB0PXFpKGUpO3JldHVybiBXYSh0KSYmKHQ9byksZm8oanQoZSxXYSksaWkodCwyKSl9KSksbGE9enIoKGZ1bmN0aW9uKGUpe3ZhciB0PXFpKGUpO3JldHVybiB0PVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpvLGZvKGp0KGUsV2EpLG8sdCl9KSksc2E9enIobmEpLGNhPXpyKChmdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aCxuPXQ+MT9lW3QtMV06bztyZXR1cm4gbj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBuPyhlLnBvcCgpLG4pOm8scmEoZSxuKX0pKTtmdW5jdGlvbiB1YShlKXt2YXIgdD1CbihlKTtyZXR1cm4gdC5fX2NoYWluX189ITAsdH1mdW5jdGlvbiBmYShlLHQpe3JldHVybiB0KGUpfXZhciBkYT1RbygoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgsbj10P2VbMF06MCxyPXRoaXMuX193cmFwcGVkX18saT1mdW5jdGlvbih0KXtyZXR1cm4gcnIodCxlKX07cmV0dXJuISh0PjF8fHRoaXMuX19hY3Rpb25zX18ubGVuZ3RoKSYmciBpbnN0YW5jZW9mICRuJiZnaShuKT8oKHI9ci5zbGljZShuLCtuKyh0PzE6MCkpKS5fX2FjdGlvbnNfXy5wdXNoKHtmdW5jOmZhLGFyZ3M6W2ldLHRoaXNBcmc6b30pLG5ldyBabihyLHRoaXMuX19jaGFpbl9fKS50aHJ1KChmdW5jdGlvbihlKXtyZXR1cm4gdCYmIWUubGVuZ3RoJiZlLnB1c2gobyksZX0pKSk6dGhpcy50aHJ1KGkpfSkpLHBhPWpvKChmdW5jdGlvbihlLHQsbil7SWUuY2FsbChlLG4pPysrZVtuXTpucihlLG4sMSl9KSksaGE9VG8oJGkpLGdhPVRvKE5pKTtmdW5jdGlvbiB2YShlLHQpe3JldHVybihOYShlKT9MdDpjcikoZSxpaSh0LDMpKX1mdW5jdGlvbiBtYShlLHQpe3JldHVybihOYShlKT9FdDp1cikoZSxpaSh0LDMpKX12YXIgQ2E9am8oKGZ1bmN0aW9uKGUsdCxuKXtJZS5jYWxsKGUsbik/ZVtuXS5wdXNoKHQpOm5yKGUsbixbdF0pfSkpLHlhPXpyKChmdW5jdGlvbihlLHQsbil7dmFyIG89LTEsaT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0LGE9VWEoZSk/cihlLmxlbmd0aCk6W107cmV0dXJuIGNyKGUsKGZ1bmN0aW9uKGUpe2FbKytvXT1pP190KHQsZSxuKTpTcihlLHQsbil9KSksYX0pKSx3YT1qbygoZnVuY3Rpb24oZSx0LG4pe25yKGUsbix0KX0pKTtmdW5jdGlvbiBiYShlLHQpe3JldHVybihOYShlKT9SdDpUcikoZSxpaSh0LDMpKX12YXIgeGE9am8oKGZ1bmN0aW9uKGUsdCxuKXtlW24/MDoxXS5wdXNoKHQpfSksKGZ1bmN0aW9uKCl7cmV0dXJuW1tdLFtdXX0pKSxfYT16cigoZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybltdO3ZhciBuPXQubGVuZ3RoO3JldHVybiBuPjEmJnZpKGUsdFswXSx0WzFdKT90PVtdOm4+MiYmdmkodFswXSx0WzFdLHRbMl0pJiYodD1bdFswXV0pLFpyKGUsaHIodCwxKSxbXSl9KSksT2E9Y3R8fGZ1bmN0aW9uKCl7cmV0dXJuIGZ0LkRhdGUubm93KCl9O2Z1bmN0aW9uIExhKGUsdCxuKXtyZXR1cm4gdD1uP286dCx0PWUmJm51bGw9PXQ/ZS5sZW5ndGg6dCxxbyhlLGMsbyxvLG8sbyx0KX1mdW5jdGlvbiBFYShlLHQpe3ZhciBuO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFNlKGkpO3JldHVybiBlPWRsKGUpLGZ1bmN0aW9uKCl7cmV0dXJuLS1lPjAmJihuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxlPD0xJiYodD1vKSxufX12YXIgU2E9enIoKGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0xO2lmKG4ubGVuZ3RoKXt2YXIgbz1sbihuLG9pKFNhKSk7cnw9c31yZXR1cm4gcW8oZSxyLHQsbixvKX0pKSxqYT16cigoZnVuY3Rpb24oZSx0LG4pe3ZhciByPTM7aWYobi5sZW5ndGgpe3ZhciBvPWxuKG4sb2koamEpKTtyfD1zfXJldHVybiBxbyh0LHIsZSxuLG8pfSkpO2Z1bmN0aW9uIE1hKGUsdCxuKXt2YXIgcixhLGwscyxjLHUsZj0wLGQ9ITEscD0hMSxoPSEwO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFNlKGkpO2Z1bmN0aW9uIGcodCl7dmFyIG49cixpPWE7cmV0dXJuIHI9YT1vLGY9dCxzPWUuYXBwbHkoaSxuKX1mdW5jdGlvbiB2KGUpe3ZhciBuPWUtdTtyZXR1cm4gdT09PW98fG4+PXR8fG48MHx8cCYmZS1mPj1sfWZ1bmN0aW9uIG0oKXt2YXIgZT1PYSgpO2lmKHYoZSkpcmV0dXJuIEMoZSk7Yz1TaShtLGZ1bmN0aW9uKGUpe3ZhciBuPXQtKGUtdSk7cmV0dXJuIHA/dm4obixsLShlLWYpKTpufShlKSl9ZnVuY3Rpb24gQyhlKXtyZXR1cm4gYz1vLGgmJnI/ZyhlKToocj1hPW8scyl9ZnVuY3Rpb24geSgpe3ZhciBlPU9hKCksbj12KGUpO2lmKHI9YXJndW1lbnRzLGE9dGhpcyx1PWUsbil7aWYoYz09PW8pcmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBmPWUsYz1TaShtLHQpLGQ/ZyhlKTpzfSh1KTtpZihwKXJldHVybiB5byhjKSxjPVNpKG0sdCksZyh1KX1yZXR1cm4gYz09PW8mJihjPVNpKG0sdCkpLHN9cmV0dXJuIHQ9aGwodCl8fDAsSmEobikmJihkPSEhbi5sZWFkaW5nLGw9KHA9XCJtYXhXYWl0XCJpbiBuKT9nbihobChuLm1heFdhaXQpfHwwLHQpOmwsaD1cInRyYWlsaW5nXCJpbiBuPyEhbi50cmFpbGluZzpoKSx5LmNhbmNlbD1mdW5jdGlvbigpe2MhPT1vJiZ5byhjKSxmPTAscj11PWE9Yz1vfSx5LmZsdXNoPWZ1bmN0aW9uKCl7cmV0dXJuIGM9PT1vP3M6QyhPYSgpKX0seX12YXIga2E9enIoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGxyKGUsMSx0KX0pKSxSYT16cigoZnVuY3Rpb24oZSx0LG4pe3JldHVybiBscihlLGhsKHQpfHwwLG4pfSkpO2Z1bmN0aW9uIFBhKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZXx8bnVsbCE9dCYmXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBuZXcgU2UoaSk7dmFyIG49ZnVuY3Rpb24oKXt2YXIgcj1hcmd1bWVudHMsbz10P3QuYXBwbHkodGhpcyxyKTpyWzBdLGk9bi5jYWNoZTtpZihpLmhhcyhvKSlyZXR1cm4gaS5nZXQobyk7dmFyIGE9ZS5hcHBseSh0aGlzLHIpO3JldHVybiBuLmNhY2hlPWkuc2V0KG8sYSl8fGksYX07cmV0dXJuIG4uY2FjaGU9bmV3KFBhLkNhY2hlfHxVbiksbn1mdW5jdGlvbiBJYShlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBTZShpKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHM7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIWUuY2FsbCh0aGlzKTtjYXNlIDE6cmV0dXJuIWUuY2FsbCh0aGlzLHRbMF0pO2Nhc2UgMjpyZXR1cm4hZS5jYWxsKHRoaXMsdFswXSx0WzFdKTtjYXNlIDM6cmV0dXJuIWUuY2FsbCh0aGlzLHRbMF0sdFsxXSx0WzJdKX1yZXR1cm4hZS5hcHBseSh0aGlzLHQpfX1QYS5DYWNoZT1Vbjt2YXIgQWE9bW8oKGZ1bmN0aW9uKGUsdCl7dmFyIG49KHQ9MT09dC5sZW5ndGgmJk5hKHRbMF0pP1J0KHRbMF0sWXQoaWkoKSkpOlJ0KGhyKHQsMSksWXQoaWkoKSkpKS5sZW5ndGg7cmV0dXJuIHpyKChmdW5jdGlvbihyKXtmb3IodmFyIG89LTEsaT12bihyLmxlbmd0aCxuKTsrK288aTspcltvXT10W29dLmNhbGwodGhpcyxyW29dKTtyZXR1cm4gX3QoZSx0aGlzLHIpfSkpfSkpLFRhPXpyKChmdW5jdGlvbihlLHQpe3ZhciBuPWxuKHQsb2koVGEpKTtyZXR1cm4gcW8oZSxzLG8sdCxuKX0pKSxIYT16cigoZnVuY3Rpb24oZSx0KXt2YXIgbj1sbih0LG9pKEhhKSk7cmV0dXJuIHFvKGUsNjQsbyx0LG4pfSkpLEJhPVFvKChmdW5jdGlvbihlLHQpe3JldHVybiBxbyhlLDI1NixvLG8sbyx0KX0pKTtmdW5jdGlvbiBWYShlLHQpe3JldHVybiBlPT09dHx8ZSE9ZSYmdCE9dH12YXIgRGE9Rm8oX3IpLFphPUZvKChmdW5jdGlvbihlLHQpe3JldHVybiBlPj10fSkpLCRhPWpyKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk/anI6ZnVuY3Rpb24oZSl7cmV0dXJuIFFhKGUpJiZJZS5jYWxsKGUsXCJjYWxsZWVcIikmJiF6ZS5jYWxsKGUsXCJjYWxsZWVcIil9LE5hPXIuaXNBcnJheSxGYT1tdD9ZdChtdCk6ZnVuY3Rpb24oZSl7cmV0dXJuIFFhKGUpJiZ4cihlKT09Un07ZnVuY3Rpb24gVWEoZSl7cmV0dXJuIG51bGwhPWUmJlhhKGUubGVuZ3RoKSYmIVlhKGUpfWZ1bmN0aW9uIFdhKGUpe3JldHVybiBRYShlKSYmVWEoZSl9dmFyIHphPXZ0fHxocyxHYT1DdD9ZdChDdCk6ZnVuY3Rpb24oZSl7cmV0dXJuIFFhKGUpJiZ4cihlKT09Q307ZnVuY3Rpb24gcWEoZSl7aWYoIVFhKGUpKXJldHVybiExO3ZhciB0PXhyKGUpO3JldHVybiB0PT15fHxcIltvYmplY3QgRE9NRXhjZXB0aW9uXVwiPT10fHxcInN0cmluZ1wiPT10eXBlb2YgZS5tZXNzYWdlJiZcInN0cmluZ1wiPT10eXBlb2YgZS5uYW1lJiYhbmwoZSl9ZnVuY3Rpb24gWWEoZSl7aWYoIUphKGUpKXJldHVybiExO3ZhciB0PXhyKGUpO3JldHVybiB0PT13fHx0PT1ifHxcIltvYmplY3QgQXN5bmNGdW5jdGlvbl1cIj09dHx8XCJbb2JqZWN0IFByb3h5XVwiPT10fWZ1bmN0aW9uIEthKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlJiZlPT1kbChlKX1mdW5jdGlvbiBYYShlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZSYmZT4tMSYmZSUxPT0wJiZlPD1mfWZ1bmN0aW9uIEphKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiBudWxsIT1lJiYoXCJvYmplY3RcIj09dHx8XCJmdW5jdGlvblwiPT10KX1mdW5jdGlvbiBRYShlKXtyZXR1cm4gbnVsbCE9ZSYmXCJvYmplY3RcIj09dHlwZW9mIGV9dmFyIGVsPXl0P1l0KHl0KTpmdW5jdGlvbihlKXtyZXR1cm4gUWEoZSkmJmZpKGUpPT14fTtmdW5jdGlvbiB0bChlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZXx8UWEoZSkmJnhyKGUpPT1ffWZ1bmN0aW9uIG5sKGUpe2lmKCFRYShlKXx8eHIoZSkhPU8pcmV0dXJuITE7dmFyIHQ9VWUoZSk7aWYobnVsbD09PXQpcmV0dXJuITA7dmFyIG49SWUuY2FsbCh0LFwiY29uc3RydWN0b3JcIikmJnQuY29uc3RydWN0b3I7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgbiYmbiBpbnN0YW5jZW9mIG4mJlBlLmNhbGwobik9PUJlfXZhciBybD13dD9ZdCh3dCk6ZnVuY3Rpb24oZSl7cmV0dXJuIFFhKGUpJiZ4cihlKT09RX0sb2w9YnQ/WXQoYnQpOmZ1bmN0aW9uKGUpe3JldHVybiBRYShlKSYmZmkoZSk9PVN9O2Z1bmN0aW9uIGlsKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlfHwhTmEoZSkmJlFhKGUpJiZ4cihlKT09an1mdW5jdGlvbiBhbChlKXtyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgZXx8UWEoZSkmJnhyKGUpPT1NfXZhciBsbD14dD9ZdCh4dCk6ZnVuY3Rpb24oZSl7cmV0dXJuIFFhKGUpJiZYYShlLmxlbmd0aCkmJiEhb3RbeHIoZSldfSxzbD1GbyhBciksY2w9Rm8oKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU8PXR9KSk7ZnVuY3Rpb24gdWwoZSl7aWYoIWUpcmV0dXJuW107aWYoVWEoZSkpcmV0dXJuIGlsKGUpP3VuKGUpOkVvKGUpO2lmKFllJiZlW1llXSlyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49W107ISh0PWUubmV4dCgpKS5kb25lOyluLnB1c2godC52YWx1ZSk7cmV0dXJuIG59KGVbWWVdKCkpO3ZhciB0PWZpKGUpO3JldHVybih0PT14P29uOnQ9PVM/c246VmwpKGUpfWZ1bmN0aW9uIGZsKGUpe3JldHVybiBlPyhlPWhsKGUpKT09PXV8fGU9PT0tMS8wPzE3OTc2OTMxMzQ4NjIzMTU3ZTI5MiooZTwwPy0xOjEpOmU9PWU/ZTowOjA9PT1lP2U6MH1mdW5jdGlvbiBkbChlKXt2YXIgdD1mbChlKSxuPXQlMTtyZXR1cm4gdD09dD9uP3Qtbjp0OjB9ZnVuY3Rpb24gcGwoZSl7cmV0dXJuIGU/b3IoZGwoZSksMCxwKTowfWZ1bmN0aW9uIGhsKGUpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXJldHVybiBlO2lmKGFsKGUpKXJldHVybiBkO2lmKEphKGUpKXt2YXIgdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnZhbHVlT2Y/ZS52YWx1ZU9mKCk6ZTtlPUphKHQpP3QrXCJcIjp0fWlmKFwic3RyaW5nXCIhPXR5cGVvZiBlKXJldHVybiAwPT09ZT9lOitlO2U9cXQoZSk7dmFyIG49aGUudGVzdChlKTtyZXR1cm4gbnx8dmUudGVzdChlKT9zdChlLnNsaWNlKDIpLG4/Mjo4KTpwZS50ZXN0KGUpP2Q6K2V9ZnVuY3Rpb24gZ2woZSl7cmV0dXJuIFNvKGUsa2woZSkpfWZ1bmN0aW9uIHZsKGUpe3JldHVybiBudWxsPT1lP1wiXCI6aW8oZSl9dmFyIG1sPU1vKChmdW5jdGlvbihlLHQpe2lmKHdpKHQpfHxVYSh0KSlTbyh0LE1sKHQpLGUpO2Vsc2UgZm9yKHZhciBuIGluIHQpSWUuY2FsbCh0LG4pJiZKbihlLG4sdFtuXSl9KSksQ2w9TW8oKGZ1bmN0aW9uKGUsdCl7U28odCxrbCh0KSxlKX0pKSx5bD1NbygoZnVuY3Rpb24oZSx0LG4scil7U28odCxrbCh0KSxlLHIpfSkpLHdsPU1vKChmdW5jdGlvbihlLHQsbixyKXtTbyh0LE1sKHQpLGUscil9KSksYmw9UW8ocnIpLHhsPXpyKChmdW5jdGlvbihlLHQpe2U9T2UoZSk7dmFyIG49LTEscj10Lmxlbmd0aCxpPXI+Mj90WzJdOm87Zm9yKGkmJnZpKHRbMF0sdFsxXSxpKSYmKHI9MSk7KytuPHI7KWZvcih2YXIgYT10W25dLGw9a2woYSkscz0tMSxjPWwubGVuZ3RoOysrczxjOyl7dmFyIHU9bFtzXSxmPWVbdV07KGY9PT1vfHxWYShmLGtlW3VdKSYmIUllLmNhbGwoZSx1KSkmJihlW3VdPWFbdV0pfXJldHVybiBlfSkpLF9sPXpyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5wdXNoKG8sS28pLF90KFBsLG8sZSl9KSk7ZnVuY3Rpb24gT2woZSx0LG4pe3ZhciByPW51bGw9PWU/bzp3cihlLHQpO3JldHVybiByPT09bz9uOnJ9ZnVuY3Rpb24gTGwoZSx0KXtyZXR1cm4gbnVsbCE9ZSYmZGkoZSx0LExyKX12YXIgRWw9Vm8oKGZ1bmN0aW9uKGUsdCxuKXtudWxsIT10JiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB0LnRvU3RyaW5nJiYodD1IZS5jYWxsKHQpKSxlW3RdPW59KSxKbCh0cykpLFNsPVZvKChmdW5jdGlvbihlLHQsbil7bnVsbCE9dCYmXCJmdW5jdGlvblwiIT10eXBlb2YgdC50b1N0cmluZyYmKHQ9SGUuY2FsbCh0KSksSWUuY2FsbChlLHQpP2VbdF0ucHVzaChuKTplW3RdPVtuXX0pLGlpKSxqbD16cihTcik7ZnVuY3Rpb24gTWwoZSl7cmV0dXJuIFVhKGUpP0duKGUpOklyKGUpfWZ1bmN0aW9uIGtsKGUpe3JldHVybiBVYShlKT9HbihlLCEwKTpmdW5jdGlvbihlKXtpZighSmEoZSkpcmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PVtdO2lmKG51bGwhPWUpZm9yKHZhciBuIGluIE9lKGUpKXQucHVzaChuKTtyZXR1cm4gdH0oZSk7dmFyIHQ9d2koZSksbj1bXTtmb3IodmFyIHIgaW4gZSkoXCJjb25zdHJ1Y3RvclwiIT1yfHwhdCYmSWUuY2FsbChlLHIpKSYmbi5wdXNoKHIpO3JldHVybiBufShlKX12YXIgUmw9TW8oKGZ1bmN0aW9uKGUsdCxuKXtWcihlLHQsbil9KSksUGw9TW8oKGZ1bmN0aW9uKGUsdCxuLHIpe1ZyKGUsdCxuLHIpfSkpLElsPVFvKChmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2lmKG51bGw9PWUpcmV0dXJuIG47dmFyIHI9ITE7dD1SdCh0LChmdW5jdGlvbih0KXtyZXR1cm4gdD12byh0LGUpLHJ8fChyPXQubGVuZ3RoPjEpLHR9KSksU28oZSx0aShlKSxuKSxyJiYobj1pcihuLDcsWG8pKTtmb3IodmFyIG89dC5sZW5ndGg7by0tOylsbyhuLHRbb10pO3JldHVybiBufSkpLEFsPVFvKChmdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lP3t9OmZ1bmN0aW9uKGUsdCl7cmV0dXJuICRyKGUsdCwoZnVuY3Rpb24odCxuKXtyZXR1cm4gTGwoZSxuKX0pKX0oZSx0KX0pKTtmdW5jdGlvbiBUbChlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG49UnQodGkoZSksKGZ1bmN0aW9uKGUpe3JldHVybltlXX0pKTtyZXR1cm4gdD1paSh0KSwkcihlLG4sKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQoZSxuWzBdKX0pKX12YXIgSGw9R28oTWwpLEJsPUdvKGtsKTtmdW5jdGlvbiBWbChlKXtyZXR1cm4gbnVsbD09ZT9bXTpLdChlLE1sKGUpKX12YXIgRGw9SW8oKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD10LnRvTG93ZXJDYXNlKCksZSsobj9abCh0KTp0KX0pKTtmdW5jdGlvbiBabChlKXtyZXR1cm4gcWwodmwoZSkudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gJGwoZSl7cmV0dXJuKGU9dmwoZSkpJiZlLnJlcGxhY2UoQ2UsZW4pLnJlcGxhY2UoWGUsXCJcIil9dmFyIE5sPUlvKChmdW5jdGlvbihlLHQsbil7cmV0dXJuIGUrKG4/XCItXCI6XCJcIikrdC50b0xvd2VyQ2FzZSgpfSkpLEZsPUlvKChmdW5jdGlvbihlLHQsbil7cmV0dXJuIGUrKG4/XCIgXCI6XCJcIikrdC50b0xvd2VyQ2FzZSgpfSkpLFVsPVBvKFwidG9Mb3dlckNhc2VcIiksV2w9SW8oKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSsobj9cIl9cIjpcIlwiKSt0LnRvTG93ZXJDYXNlKCl9KSksemw9SW8oKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSsobj9cIiBcIjpcIlwiKStxbCh0KX0pKSxHbD1JbygoZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlKyhuP1wiIFwiOlwiXCIpK3QudG9VcHBlckNhc2UoKX0pKSxxbD1QbyhcInRvVXBwZXJDYXNlXCIpO2Z1bmN0aW9uIFlsKGUsdCxuKXtyZXR1cm4gZT12bChlKSwodD1uP286dCk9PT1vP2Z1bmN0aW9uKGUpe3JldHVybiB0dC50ZXN0KGUpfShlKT9mdW5jdGlvbihlKXtyZXR1cm4gZS5tYXRjaChRZSl8fFtdfShlKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXRjaChzZSl8fFtdfShlKTplLm1hdGNoKHQpfHxbXX12YXIgS2w9enIoKGZ1bmN0aW9uKGUsdCl7dHJ5e3JldHVybiBfdChlLG8sdCl9Y2F0Y2goZSl7cmV0dXJuIHFhKGUpP2U6bmV3IGJlKGUpfX0pKSxYbD1RbygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gTHQodCwoZnVuY3Rpb24odCl7dD1UaSh0KSxucihlLHQsU2EoZVt0XSxlKSl9KSksZX0pKTtmdW5jdGlvbiBKbChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIFFsPUhvKCksZXM9SG8oITApO2Z1bmN0aW9uIHRzKGUpe3JldHVybiBlfWZ1bmN0aW9uIG5zKGUpe3JldHVybiBQcihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6aXIoZSwxKSl9dmFyIHJzPXpyKChmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gU3IobixlLHQpfX0pKSxvcz16cigoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIFNyKGUsbix0KX19KSk7ZnVuY3Rpb24gaXMoZSx0LG4pe3ZhciByPU1sKHQpLG89eXIodCxyKTtudWxsIT1ufHxKYSh0KSYmKG8ubGVuZ3RofHwhci5sZW5ndGgpfHwobj10LHQ9ZSxlPXRoaXMsbz15cih0LE1sKHQpKSk7dmFyIGk9IShKYShuKSYmXCJjaGFpblwiaW4gbiYmIW4uY2hhaW4pLGE9WWEoZSk7cmV0dXJuIEx0KG8sKGZ1bmN0aW9uKG4pe3ZhciByPXRbbl07ZVtuXT1yLGEmJihlLnByb3RvdHlwZVtuXT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX19jaGFpbl9fO2lmKGl8fHQpe3ZhciBuPWUodGhpcy5fX3dyYXBwZWRfXyk7cmV0dXJuKG4uX19hY3Rpb25zX189RW8odGhpcy5fX2FjdGlvbnNfXykpLnB1c2goe2Z1bmM6cixhcmdzOmFyZ3VtZW50cyx0aGlzQXJnOmV9KSxuLl9fY2hhaW5fXz10LG59cmV0dXJuIHIuYXBwbHkoZSxQdChbdGhpcy52YWx1ZSgpXSxhcmd1bWVudHMpKX0pfSkpLGV9ZnVuY3Rpb24gYXMoKXt9dmFyIGxzPVpvKFJ0KSxzcz1abyhTdCksY3M9Wm8oVHQpO2Z1bmN0aW9uIHVzKGUpe3JldHVybiBtaShlKT9GdChUaShlKSk6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB3cih0LGUpfX0oZSl9dmFyIGZzPU5vKCksZHM9Tm8oITApO2Z1bmN0aW9uIHBzKCl7cmV0dXJuW119ZnVuY3Rpb24gaHMoKXtyZXR1cm4hMX12YXIgZ3MsdnM9RG8oKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdH0pLDApLG1zPVdvKFwiY2VpbFwiKSxDcz1EbygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS90fSksMSkseXM9V28oXCJmbG9vclwiKSx3cz1EbygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSp0fSksMSksYnM9V28oXCJyb3VuZFwiKSx4cz1EbygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS10fSksMCk7cmV0dXJuIEJuLmFmdGVyPWZ1bmN0aW9uKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBuZXcgU2UoaSk7cmV0dXJuIGU9ZGwoZSksZnVuY3Rpb24oKXtpZigtLWU8MSlyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSxCbi5hcnk9TGEsQm4uYXNzaWduPW1sLEJuLmFzc2lnbkluPUNsLEJuLmFzc2lnbkluV2l0aD15bCxCbi5hc3NpZ25XaXRoPXdsLEJuLmF0PWJsLEJuLmJlZm9yZT1FYSxCbi5iaW5kPVNhLEJuLmJpbmRBbGw9WGwsQm4uYmluZEtleT1qYSxCbi5jYXN0QXJyYXk9ZnVuY3Rpb24oKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm5bXTt2YXIgZT1hcmd1bWVudHNbMF07cmV0dXJuIE5hKGUpP2U6W2VdfSxCbi5jaGFpbj11YSxCbi5jaHVuaz1mdW5jdGlvbihlLHQsbil7dD0obj92aShlLHQsbik6dD09PW8pPzE6Z24oZGwodCksMCk7dmFyIGk9bnVsbD09ZT8wOmUubGVuZ3RoO2lmKCFpfHx0PDEpcmV0dXJuW107Zm9yKHZhciBhPTAsbD0wLHM9cihkdChpL3QpKTthPGk7KXNbbCsrXT1RcihlLGEsYSs9dCk7cmV0dXJuIHN9LEJuLmNvbXBhY3Q9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PS0xLG49bnVsbD09ZT8wOmUubGVuZ3RoLHI9MCxvPVtdOysrdDxuOyl7dmFyIGk9ZVt0XTtpJiYob1tyKytdPWkpfXJldHVybiBvfSxCbi5jb25jYXQ9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoO2lmKCFlKXJldHVybltdO2Zvcih2YXIgdD1yKGUtMSksbj1hcmd1bWVudHNbMF0sbz1lO28tLTspdFtvLTFdPWFyZ3VtZW50c1tvXTtyZXR1cm4gUHQoTmEobik/RW8obik6W25dLGhyKHQsMSkpfSxCbi5jb25kPWZ1bmN0aW9uKGUpe3ZhciB0PW51bGw9PWU/MDplLmxlbmd0aCxuPWlpKCk7cmV0dXJuIGU9dD9SdChlLChmdW5jdGlvbihlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlWzFdKXRocm93IG5ldyBTZShpKTtyZXR1cm5bbihlWzBdKSxlWzFdXX0pKTpbXSx6cigoZnVuY3Rpb24obil7Zm9yKHZhciByPS0xOysrcjx0Oyl7dmFyIG89ZVtyXTtpZihfdChvWzBdLHRoaXMsbikpcmV0dXJuIF90KG9bMV0sdGhpcyxuKX19KSl9LEJuLmNvbmZvcm1zPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1NbChlKTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGFyKG4sZSx0KX19KGlyKGUsMSkpfSxCbi5jb25zdGFudD1KbCxCbi5jb3VudEJ5PXBhLEJuLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3ZhciBuPVZuKGUpO3JldHVybiBudWxsPT10P246dHIobix0KX0sQm4uY3Vycnk9ZnVuY3Rpb24gZSh0LG4scil7dmFyIGk9cW8odCw4LG8sbyxvLG8sbyxuPXI/bzpuKTtyZXR1cm4gaS5wbGFjZWhvbGRlcj1lLnBsYWNlaG9sZGVyLGl9LEJuLmN1cnJ5UmlnaHQ9ZnVuY3Rpb24gZSh0LG4scil7dmFyIGk9cW8odCwxNixvLG8sbyxvLG8sbj1yP286bik7cmV0dXJuIGkucGxhY2Vob2xkZXI9ZS5wbGFjZWhvbGRlcixpfSxCbi5kZWJvdW5jZT1NYSxCbi5kZWZhdWx0cz14bCxCbi5kZWZhdWx0c0RlZXA9X2wsQm4uZGVmZXI9a2EsQm4uZGVsYXk9UmEsQm4uZGlmZmVyZW5jZT1WaSxCbi5kaWZmZXJlbmNlQnk9RGksQm4uZGlmZmVyZW5jZVdpdGg9WmksQm4uZHJvcD1mdW5jdGlvbihlLHQsbil7dmFyIHI9bnVsbD09ZT8wOmUubGVuZ3RoO3JldHVybiByP1FyKGUsKHQ9bnx8dD09PW8/MTpkbCh0KSk8MD8wOnQscik6W119LEJuLmRyb3BSaWdodD1mdW5jdGlvbihlLHQsbil7dmFyIHI9bnVsbD09ZT8wOmUubGVuZ3RoO3JldHVybiByP1FyKGUsMCwodD1yLSh0PW58fHQ9PT1vPzE6ZGwodCkpKTwwPzA6dCk6W119LEJuLmRyb3BSaWdodFdoaWxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP2NvKGUsaWkodCwzKSwhMCwhMCk6W119LEJuLmRyb3BXaGlsZT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD9jbyhlLGlpKHQsMyksITApOltdfSxCbi5maWxsPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gaT8obiYmXCJudW1iZXJcIiE9dHlwZW9mIG4mJnZpKGUsdCxuKSYmKG49MCxyPWkpLGZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPWUubGVuZ3RoO2Zvcigobj1kbChuKSk8MCYmKG49LW4+aT8wOmkrbiksKHI9cj09PW98fHI+aT9pOmRsKHIpKTwwJiYocis9aSkscj1uPnI/MDpwbChyKTtuPHI7KWVbbisrXT10O3JldHVybiBlfShlLHQsbixyKSk6W119LEJuLmZpbHRlcj1mdW5jdGlvbihlLHQpe3JldHVybihOYShlKT9qdDpwcikoZSxpaSh0LDMpKX0sQm4uZmxhdE1hcD1mdW5jdGlvbihlLHQpe3JldHVybiBocihiYShlLHQpLDEpfSxCbi5mbGF0TWFwRGVlcD1mdW5jdGlvbihlLHQpe3JldHVybiBocihiYShlLHQpLHUpfSxCbi5mbGF0TWFwRGVwdGg9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuPW49PT1vPzE6ZGwobiksaHIoYmEoZSx0KSxuKX0sQm4uZmxhdHRlbj1GaSxCbi5mbGF0dGVuRGVlcD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmZS5sZW5ndGg/aHIoZSx1KTpbXX0sQm4uZmxhdHRlbkRlcHRoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGwhPWUmJmUubGVuZ3RoP2hyKGUsdD10PT09bz8xOmRsKHQpKTpbXX0sQm4uZmxpcD1mdW5jdGlvbihlKXtyZXR1cm4gcW8oZSw1MTIpfSxCbi5mbG93PVFsLEJuLmZsb3dSaWdodD1lcyxCbi5mcm9tUGFpcnM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PS0xLG49bnVsbD09ZT8wOmUubGVuZ3RoLHI9e307Kyt0PG47KXt2YXIgbz1lW3RdO3Jbb1swXV09b1sxXX1yZXR1cm4gcn0sQm4uZnVuY3Rpb25zPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP1tdOnlyKGUsTWwoZSkpfSxCbi5mdW5jdGlvbnNJbj1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT9bXTp5cihlLGtsKGUpKX0sQm4uZ3JvdXBCeT1DYSxCbi5pbml0aWFsPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lJiZlLmxlbmd0aD9RcihlLDAsLTEpOltdfSxCbi5pbnRlcnNlY3Rpb249V2ksQm4uaW50ZXJzZWN0aW9uQnk9emksQm4uaW50ZXJzZWN0aW9uV2l0aD1HaSxCbi5pbnZlcnQ9RWwsQm4uaW52ZXJ0Qnk9U2wsQm4uaW52b2tlTWFwPXlhLEJuLml0ZXJhdGVlPW5zLEJuLmtleUJ5PXdhLEJuLmtleXM9TWwsQm4ua2V5c0luPWtsLEJuLm1hcD1iYSxCbi5tYXBLZXlzPWZ1bmN0aW9uKGUsdCl7dmFyIG49e307cmV0dXJuIHQ9aWkodCwzKSxtcihlLChmdW5jdGlvbihlLHIsbyl7bnIobix0KGUscixvKSxlKX0pKSxufSxCbi5tYXBWYWx1ZXM9ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtyZXR1cm4gdD1paSh0LDMpLG1yKGUsKGZ1bmN0aW9uKGUscixvKXtucihuLHIsdChlLHIsbykpfSkpLG59LEJuLm1hdGNoZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIEhyKGlyKGUsMSkpfSxCbi5tYXRjaGVzUHJvcGVydHk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gQnIoZSxpcih0LDEpKX0sQm4ubWVtb2l6ZT1QYSxCbi5tZXJnZT1SbCxCbi5tZXJnZVdpdGg9UGwsQm4ubWV0aG9kPXJzLEJuLm1ldGhvZE9mPW9zLEJuLm1peGluPWlzLEJuLm5lZ2F0ZT1JYSxCbi5udGhBcmc9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZGwoZSksenIoKGZ1bmN0aW9uKHQpe3JldHVybiBEcih0LGUpfSkpfSxCbi5vbWl0PUlsLEJuLm9taXRCeT1mdW5jdGlvbihlLHQpe3JldHVybiBUbChlLElhKGlpKHQpKSl9LEJuLm9uY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIEVhKDIsZSl9LEJuLm9yZGVyQnk9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG51bGw9PWU/W106KE5hKHQpfHwodD1udWxsPT10P1tdOlt0XSksTmEobj1yP286bil8fChuPW51bGw9PW4/W106W25dKSxacihlLHQsbikpfSxCbi5vdmVyPWxzLEJuLm92ZXJBcmdzPUFhLEJuLm92ZXJFdmVyeT1zcyxCbi5vdmVyU29tZT1jcyxCbi5wYXJ0aWFsPVRhLEJuLnBhcnRpYWxSaWdodD1IYSxCbi5wYXJ0aXRpb249eGEsQm4ucGljaz1BbCxCbi5waWNrQnk9VGwsQm4ucHJvcGVydHk9dXMsQm4ucHJvcGVydHlPZj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PWU/bzp3cihlLHQpfX0sQm4ucHVsbD1ZaSxCbi5wdWxsQWxsPUtpLEJuLnB1bGxBbGxCeT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUmJmUubGVuZ3RoJiZ0JiZ0Lmxlbmd0aD9OcihlLHQsaWkobiwyKSk6ZX0sQm4ucHVsbEFsbFdpdGg9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlJiZlLmxlbmd0aCYmdCYmdC5sZW5ndGg/TnIoZSx0LG8sbik6ZX0sQm4ucHVsbEF0PVhpLEJuLnJhbmdlPWZzLEJuLnJhbmdlUmlnaHQ9ZHMsQm4ucmVhcmc9QmEsQm4ucmVqZWN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuKE5hKGUpP2p0OnByKShlLElhKGlpKHQsMykpKX0sQm4ucmVtb3ZlPWZ1bmN0aW9uKGUsdCl7dmFyIG49W107aWYoIWV8fCFlLmxlbmd0aClyZXR1cm4gbjt2YXIgcj0tMSxvPVtdLGk9ZS5sZW5ndGg7Zm9yKHQ9aWkodCwzKTsrK3I8aTspe3ZhciBhPWVbcl07dChhLHIsZSkmJihuLnB1c2goYSksby5wdXNoKHIpKX1yZXR1cm4gRnIoZSxvKSxufSxCbi5yZXN0PWZ1bmN0aW9uKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgU2UoaSk7cmV0dXJuIHpyKGUsdD10PT09bz90OmRsKHQpKX0sQm4ucmV2ZXJzZT1KaSxCbi5zYW1wbGVTaXplPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD0obj92aShlLHQsbik6dD09PW8pPzE6ZGwodCksKE5hKGUpP1luOnFyKShlLHQpfSxCbi5zZXQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBudWxsPT1lP2U6WXIoZSx0LG4pfSxCbi5zZXRXaXRoPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiByPVwiZnVuY3Rpb25cIj09dHlwZW9mIHI/cjpvLG51bGw9PWU/ZTpZcihlLHQsbixyKX0sQm4uc2h1ZmZsZT1mdW5jdGlvbihlKXtyZXR1cm4oTmEoZSk/S246SnIpKGUpfSxCbi5zbGljZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9bnVsbD09ZT8wOmUubGVuZ3RoO3JldHVybiByPyhuJiZcIm51bWJlclwiIT10eXBlb2YgbiYmdmkoZSx0LG4pPyh0PTAsbj1yKToodD1udWxsPT10PzA6ZGwodCksbj1uPT09bz9yOmRsKG4pKSxRcihlLHQsbikpOltdfSxCbi5zb3J0Qnk9X2EsQm4uc29ydGVkVW5pcT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5sZW5ndGg/cm8oZSk6W119LEJuLnNvcnRlZFVuaXFCeT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD9ybyhlLGlpKHQsMikpOltdfSxCbi5zcGxpdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG4mJlwibnVtYmVyXCIhPXR5cGVvZiBuJiZ2aShlLHQsbikmJih0PW49byksKG49bj09PW8/cDpuPj4+MCk/KGU9dmwoZSkpJiYoXCJzdHJpbmdcIj09dHlwZW9mIHR8fG51bGwhPXQmJiFybCh0KSkmJiEodD1pbyh0KSkmJnJuKGUpP0NvKHVuKGUpLDAsbik6ZS5zcGxpdCh0LG4pOltdfSxCbi5zcHJlYWQ9ZnVuY3Rpb24oZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBTZShpKTtyZXR1cm4gdD1udWxsPT10PzA6Z24oZGwodCksMCksenIoKGZ1bmN0aW9uKG4pe3ZhciByPW5bdF0sbz1DbyhuLDAsdCk7cmV0dXJuIHImJlB0KG8sciksX3QoZSx0aGlzLG8pfSkpfSxCbi50YWlsPWZ1bmN0aW9uKGUpe3ZhciB0PW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gdD9RcihlLDEsdCk6W119LEJuLnRha2U9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlJiZlLmxlbmd0aD9RcihlLDAsKHQ9bnx8dD09PW8/MTpkbCh0KSk8MD8wOnQpOltdfSxCbi50YWtlUmlnaHQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW51bGw9PWU/MDplLmxlbmd0aDtyZXR1cm4gcj9RcihlLCh0PXItKHQ9bnx8dD09PW8/MTpkbCh0KSkpPDA/MDp0LHIpOltdfSxCbi50YWtlUmlnaHRXaGlsZT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD9jbyhlLGlpKHQsMyksITEsITApOltdfSxCbi50YWtlV2hpbGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/Y28oZSxpaSh0LDMpKTpbXX0sQm4udGFwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQoZSksZX0sQm4udGhyb3R0bGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSEwLG89ITA7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgU2UoaSk7cmV0dXJuIEphKG4pJiYocj1cImxlYWRpbmdcImluIG4/ISFuLmxlYWRpbmc6cixvPVwidHJhaWxpbmdcImluIG4/ISFuLnRyYWlsaW5nOm8pLE1hKGUsdCx7bGVhZGluZzpyLG1heFdhaXQ6dCx0cmFpbGluZzpvfSl9LEJuLnRocnU9ZmEsQm4udG9BcnJheT11bCxCbi50b1BhaXJzPUhsLEJuLnRvUGFpcnNJbj1CbCxCbi50b1BhdGg9ZnVuY3Rpb24oZSl7cmV0dXJuIE5hKGUpP1J0KGUsVGkpOmFsKGUpP1tlXTpFbyhBaSh2bChlKSkpfSxCbi50b1BsYWluT2JqZWN0PWdsLEJuLnRyYW5zZm9ybT1mdW5jdGlvbihlLHQsbil7dmFyIHI9TmEoZSksbz1yfHx6YShlKXx8bGwoZSk7aWYodD1paSh0LDQpLG51bGw9PW4pe3ZhciBpPWUmJmUuY29uc3RydWN0b3I7bj1vP3I/bmV3IGk6W106SmEoZSkmJllhKGkpP1ZuKFVlKGUpKTp7fX1yZXR1cm4obz9MdDptcikoZSwoZnVuY3Rpb24oZSxyLG8pe3JldHVybiB0KG4sZSxyLG8pfSkpLG59LEJuLnVuYXJ5PWZ1bmN0aW9uKGUpe3JldHVybiBMYShlLDEpfSxCbi51bmlvbj1RaSxCbi51bmlvbkJ5PWVhLEJuLnVuaW9uV2l0aD10YSxCbi51bmlxPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmxlbmd0aD9hbyhlKTpbXX0sQm4udW5pcUJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP2FvKGUsaWkodCwyKSk6W119LEJuLnVuaXFXaXRoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Om8sZSYmZS5sZW5ndGg/YW8oZSxvLHQpOltdfSxCbi51bnNldD1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lfHxsbyhlLHQpfSxCbi51bnppcD1uYSxCbi51bnppcFdpdGg9cmEsQm4udXBkYXRlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnVsbD09ZT9lOnNvKGUsdCxnbyhuKSl9LEJuLnVwZGF0ZVdpdGg9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHI9XCJmdW5jdGlvblwiPT10eXBlb2Ygcj9yOm8sbnVsbD09ZT9lOnNvKGUsdCxnbyhuKSxyKX0sQm4udmFsdWVzPVZsLEJuLnZhbHVlc0luPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP1tdOkt0KGUsa2woZSkpfSxCbi53aXRob3V0PW9hLEJuLndvcmRzPVlsLEJuLndyYXA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gVGEoZ28odCksZSl9LEJuLnhvcj1pYSxCbi54b3JCeT1hYSxCbi54b3JXaXRoPWxhLEJuLnppcD1zYSxCbi56aXBPYmplY3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcG8oZXx8W10sdHx8W10sSm4pfSxCbi56aXBPYmplY3REZWVwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHBvKGV8fFtdLHR8fFtdLFlyKX0sQm4uemlwV2l0aD1jYSxCbi5lbnRyaWVzPUhsLEJuLmVudHJpZXNJbj1CbCxCbi5leHRlbmQ9Q2wsQm4uZXh0ZW5kV2l0aD15bCxpcyhCbixCbiksQm4uYWRkPXZzLEJuLmF0dGVtcHQ9S2wsQm4uY2FtZWxDYXNlPURsLEJuLmNhcGl0YWxpemU9WmwsQm4uY2VpbD1tcyxCbi5jbGFtcD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG49PT1vJiYobj10LHQ9byksbiE9PW8mJihuPShuPWhsKG4pKT09bj9uOjApLHQhPT1vJiYodD0odD1obCh0KSk9PXQ/dDowKSxvcihobChlKSx0LG4pfSxCbi5jbG9uZT1mdW5jdGlvbihlKXtyZXR1cm4gaXIoZSw0KX0sQm4uY2xvbmVEZWVwPWZ1bmN0aW9uKGUpe3JldHVybiBpcihlLDUpfSxCbi5jbG9uZURlZXBXaXRoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGlyKGUsNSx0PVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpvKX0sQm4uY2xvbmVXaXRoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGlyKGUsNCx0PVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpvKX0sQm4uY29uZm9ybXNUbz1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT10fHxhcihlLHQsTWwodCkpfSxCbi5kZWJ1cnI9JGwsQm4uZGVmYXVsdFRvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWV8fGUhPWU/dDplfSxCbi5kaXZpZGU9Q3MsQm4uZW5kc1dpdGg9ZnVuY3Rpb24oZSx0LG4pe2U9dmwoZSksdD1pbyh0KTt2YXIgcj1lLmxlbmd0aCxpPW49bj09PW8/cjpvcihkbChuKSwwLHIpO3JldHVybihuLT10Lmxlbmd0aCk+PTAmJmUuc2xpY2UobixpKT09dH0sQm4uZXE9VmEsQm4uZXNjYXBlPWZ1bmN0aW9uKGUpe3JldHVybihlPXZsKGUpKSYmcS50ZXN0KGUpP2UucmVwbGFjZSh6LHRuKTplfSxCbi5lc2NhcGVSZWdFeHA9ZnVuY3Rpb24oZSl7cmV0dXJuKGU9dmwoZSkpJiZuZS50ZXN0KGUpP2UucmVwbGFjZSh0ZSxcIlxcXFwkJlwiKTplfSxCbi5ldmVyeT1mdW5jdGlvbihlLHQsbil7dmFyIHI9TmEoZSk/U3Q6ZnI7cmV0dXJuIG4mJnZpKGUsdCxuKSYmKHQ9bykscihlLGlpKHQsMykpfSxCbi5maW5kPWhhLEJuLmZpbmRJbmRleD0kaSxCbi5maW5kS2V5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEJ0KGUsaWkodCwzKSxtcil9LEJuLmZpbmRMYXN0PWdhLEJuLmZpbmRMYXN0SW5kZXg9TmksQm4uZmluZExhc3RLZXk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gQnQoZSxpaSh0LDMpLENyKX0sQm4uZmxvb3I9eXMsQm4uZm9yRWFjaD12YSxCbi5mb3JFYWNoUmlnaHQ9bWEsQm4uZm9ySW49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZT9lOmdyKGUsaWkodCwzKSxrbCl9LEJuLmZvckluUmlnaHQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZT9lOnZyKGUsaWkodCwzKSxrbCl9LEJuLmZvck93bj1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZtcihlLGlpKHQsMykpfSxCbi5mb3JPd25SaWdodD1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZDcihlLGlpKHQsMykpfSxCbi5nZXQ9T2wsQm4uZ3Q9RGEsQm4uZ3RlPVphLEJuLmhhcz1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsIT1lJiZkaShlLHQsT3IpfSxCbi5oYXNJbj1MbCxCbi5oZWFkPVVpLEJuLmlkZW50aXR5PXRzLEJuLmluY2x1ZGVzPWZ1bmN0aW9uKGUsdCxuLHIpe2U9VWEoZSk/ZTpWbChlKSxuPW4mJiFyP2RsKG4pOjA7dmFyIG89ZS5sZW5ndGg7cmV0dXJuIG48MCYmKG49Z24obytuLDApKSxpbChlKT9uPD1vJiZlLmluZGV4T2YodCxuKT4tMTohIW8mJkR0KGUsdCxuKT4tMX0sQm4uaW5kZXhPZj1mdW5jdGlvbihlLHQsbil7dmFyIHI9bnVsbD09ZT8wOmUubGVuZ3RoO2lmKCFyKXJldHVybi0xO3ZhciBvPW51bGw9PW4/MDpkbChuKTtyZXR1cm4gbzwwJiYobz1nbihyK28sMCkpLER0KGUsdCxvKX0sQm4uaW5SYW5nZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ9ZmwodCksbj09PW8/KG49dCx0PTApOm49ZmwobiksZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPj12bih0LG4pJiZlPGduKHQsbil9KGU9aGwoZSksdCxuKX0sQm4uaW52b2tlPWpsLEJuLmlzQXJndW1lbnRzPSRhLEJuLmlzQXJyYXk9TmEsQm4uaXNBcnJheUJ1ZmZlcj1GYSxCbi5pc0FycmF5TGlrZT1VYSxCbi5pc0FycmF5TGlrZU9iamVjdD1XYSxCbi5pc0Jvb2xlYW49ZnVuY3Rpb24oZSl7cmV0dXJuITA9PT1lfHwhMT09PWV8fFFhKGUpJiZ4cihlKT09bX0sQm4uaXNCdWZmZXI9emEsQm4uaXNEYXRlPUdhLEJuLmlzRWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gUWEoZSkmJjE9PT1lLm5vZGVUeXBlJiYhbmwoZSl9LEJuLmlzRW1wdHk9ZnVuY3Rpb24oZSl7aWYobnVsbD09ZSlyZXR1cm4hMDtpZihVYShlKSYmKE5hKGUpfHxcInN0cmluZ1wiPT10eXBlb2YgZXx8XCJmdW5jdGlvblwiPT10eXBlb2YgZS5zcGxpY2V8fHphKGUpfHxsbChlKXx8JGEoZSkpKXJldHVybiFlLmxlbmd0aDt2YXIgdD1maShlKTtpZih0PT14fHx0PT1TKXJldHVybiFlLnNpemU7aWYod2koZSkpcmV0dXJuIUlyKGUpLmxlbmd0aDtmb3IodmFyIG4gaW4gZSlpZihJZS5jYWxsKGUsbikpcmV0dXJuITE7cmV0dXJuITB9LEJuLmlzRXF1YWw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTXIoZSx0KX0sQm4uaXNFcXVhbFdpdGg9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPShuPVwiZnVuY3Rpb25cIj09dHlwZW9mIG4/bjpvKT9uKGUsdCk6bztyZXR1cm4gcj09PW8/TXIoZSx0LG8sbik6ISFyfSxCbi5pc0Vycm9yPXFhLEJuLmlzRmluaXRlPWZ1bmN0aW9uKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlJiZIdChlKX0sQm4uaXNGdW5jdGlvbj1ZYSxCbi5pc0ludGVnZXI9S2EsQm4uaXNMZW5ndGg9WGEsQm4uaXNNYXA9ZWwsQm4uaXNNYXRjaD1mdW5jdGlvbihlLHQpe3JldHVybiBlPT09dHx8a3IoZSx0LGxpKHQpKX0sQm4uaXNNYXRjaFdpdGg9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuPVwiZnVuY3Rpb25cIj09dHlwZW9mIG4/bjpvLGtyKGUsdCxsaSh0KSxuKX0sQm4uaXNOYU49ZnVuY3Rpb24oZSl7cmV0dXJuIHRsKGUpJiZlIT0rZX0sQm4uaXNOYXRpdmU9ZnVuY3Rpb24oZSl7aWYoeWkoZSkpdGhyb3cgbmV3IGJlKFwiVW5zdXBwb3J0ZWQgY29yZS1qcyB1c2UuIFRyeSBodHRwczovL25wbXMuaW8vc2VhcmNoP3E9cG9ueWZpbGwuXCIpO3JldHVybiBScihlKX0sQm4uaXNOaWw9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWV9LEJuLmlzTnVsbD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09PWV9LEJuLmlzTnVtYmVyPXRsLEJuLmlzT2JqZWN0PUphLEJuLmlzT2JqZWN0TGlrZT1RYSxCbi5pc1BsYWluT2JqZWN0PW5sLEJuLmlzUmVnRXhwPXJsLEJuLmlzU2FmZUludGVnZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIEthKGUpJiZlPj0tOTAwNzE5OTI1NDc0MDk5MSYmZTw9Zn0sQm4uaXNTZXQ9b2wsQm4uaXNTdHJpbmc9aWwsQm4uaXNTeW1ib2w9YWwsQm4uaXNUeXBlZEFycmF5PWxsLEJuLmlzVW5kZWZpbmVkPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09b30sQm4uaXNXZWFrTWFwPWZ1bmN0aW9uKGUpe3JldHVybiBRYShlKSYmZmkoZSk9PWt9LEJuLmlzV2Vha1NldD1mdW5jdGlvbihlKXtyZXR1cm4gUWEoZSkmJlwiW29iamVjdCBXZWFrU2V0XVwiPT14cihlKX0sQm4uam9pbj1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lP1wiXCI6VXQuY2FsbChlLHQpfSxCbi5rZWJhYkNhc2U9TmwsQm4ubGFzdD1xaSxCbi5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQsbil7dmFyIHI9bnVsbD09ZT8wOmUubGVuZ3RoO2lmKCFyKXJldHVybi0xO3ZhciBpPXI7cmV0dXJuIG4hPT1vJiYoaT0oaT1kbChuKSk8MD9nbihyK2ksMCk6dm4oaSxyLTEpKSx0PT10P2Z1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bisxO3ItLTspaWYoZVtyXT09PXQpcmV0dXJuIHI7cmV0dXJuIHJ9KGUsdCxpKTpWdChlLCR0LGksITApfSxCbi5sb3dlckNhc2U9RmwsQm4ubG93ZXJGaXJzdD1VbCxCbi5sdD1zbCxCbi5sdGU9Y2wsQm4ubWF4PWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmxlbmd0aD9kcihlLHRzLF9yKTpvfSxCbi5tYXhCeT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD9kcihlLGlpKHQsMiksX3IpOm99LEJuLm1lYW49ZnVuY3Rpb24oZSl7cmV0dXJuIE50KGUsdHMpfSxCbi5tZWFuQnk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTnQoZSxpaSh0LDIpKX0sQm4ubWluPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmxlbmd0aD9kcihlLHRzLEFyKTpvfSxCbi5taW5CeT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD9kcihlLGlpKHQsMiksQXIpOm99LEJuLnN0dWJBcnJheT1wcyxCbi5zdHViRmFsc2U9aHMsQm4uc3R1Yk9iamVjdD1mdW5jdGlvbigpe3JldHVybnt9fSxCbi5zdHViU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJcIn0sQm4uc3R1YlRydWU9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sQm4ubXVsdGlwbHk9d3MsQm4ubnRoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP0RyKGUsZGwodCkpOm99LEJuLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZnQuXz09PXRoaXMmJihmdC5fPVZlKSx0aGlzfSxCbi5ub29wPWFzLEJuLm5vdz1PYSxCbi5wYWQ9ZnVuY3Rpb24oZSx0LG4pe2U9dmwoZSk7dmFyIHI9KHQ9ZGwodCkpP2NuKGUpOjA7aWYoIXR8fHI+PXQpcmV0dXJuIGU7dmFyIG89KHQtcikvMjtyZXR1cm4gJG8ocHQobyksbikrZSskbyhkdChvKSxuKX0sQm4ucGFkRW5kPWZ1bmN0aW9uKGUsdCxuKXtlPXZsKGUpO3ZhciByPSh0PWRsKHQpKT9jbihlKTowO3JldHVybiB0JiZyPHQ/ZSskbyh0LXIsbik6ZX0sQm4ucGFkU3RhcnQ9ZnVuY3Rpb24oZSx0LG4pe2U9dmwoZSk7dmFyIHI9KHQ9ZGwodCkpP2NuKGUpOjA7cmV0dXJuIHQmJnI8dD8kbyh0LXIsbikrZTplfSxCbi5wYXJzZUludD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG58fG51bGw9PXQ/dD0wOnQmJih0PSt0KSxDbih2bChlKS5yZXBsYWNlKHJlLFwiXCIpLHR8fDApfSxCbi5yYW5kb209ZnVuY3Rpb24oZSx0LG4pe2lmKG4mJlwiYm9vbGVhblwiIT10eXBlb2YgbiYmdmkoZSx0LG4pJiYodD1uPW8pLG49PT1vJiYoXCJib29sZWFuXCI9PXR5cGVvZiB0PyhuPXQsdD1vKTpcImJvb2xlYW5cIj09dHlwZW9mIGUmJihuPWUsZT1vKSksZT09PW8mJnQ9PT1vPyhlPTAsdD0xKTooZT1mbChlKSx0PT09bz8odD1lLGU9MCk6dD1mbCh0KSksZT50KXt2YXIgcj1lO2U9dCx0PXJ9aWYobnx8ZSUxfHx0JTEpe3ZhciBpPXluKCk7cmV0dXJuIHZuKGUraSoodC1lK2x0KFwiMWUtXCIrKChpK1wiXCIpLmxlbmd0aC0xKSkpLHQpfXJldHVybiBVcihlLHQpfSxCbi5yZWR1Y2U9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPU5hKGUpP0l0Old0LG89YXJndW1lbnRzLmxlbmd0aDwzO3JldHVybiByKGUsaWkodCw0KSxuLG8sY3IpfSxCbi5yZWR1Y2VSaWdodD1mdW5jdGlvbihlLHQsbil7dmFyIHI9TmEoZSk/QXQ6V3Qsbz1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIHIoZSxpaSh0LDQpLG4sbyx1cil9LEJuLnJlcGVhdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ9KG4/dmkoZSx0LG4pOnQ9PT1vKT8xOmRsKHQpLFdyKHZsKGUpLHQpfSxCbi5yZXBsYWNlPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLHQ9dmwoZVswXSk7cmV0dXJuIGUubGVuZ3RoPDM/dDp0LnJlcGxhY2UoZVsxXSxlWzJdKX0sQm4ucmVzdWx0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0tMSxpPSh0PXZvKHQsZSkpLmxlbmd0aDtmb3IoaXx8KGk9MSxlPW8pOysrcjxpOyl7dmFyIGE9bnVsbD09ZT9vOmVbVGkodFtyXSldO2E9PT1vJiYocj1pLGE9biksZT1ZYShhKT9hLmNhbGwoZSk6YX1yZXR1cm4gZX0sQm4ucm91bmQ9YnMsQm4ucnVuSW5Db250ZXh0PWUsQm4uc2FtcGxlPWZ1bmN0aW9uKGUpe3JldHVybihOYShlKT9xbjpHcikoZSl9LEJuLnNpemU9ZnVuY3Rpb24oZSl7aWYobnVsbD09ZSlyZXR1cm4gMDtpZihVYShlKSlyZXR1cm4gaWwoZSk/Y24oZSk6ZS5sZW5ndGg7dmFyIHQ9ZmkoZSk7cmV0dXJuIHQ9PXh8fHQ9PVM/ZS5zaXplOklyKGUpLmxlbmd0aH0sQm4uc25ha2VDYXNlPVdsLEJuLnNvbWU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPU5hKGUpP1R0OmVvO3JldHVybiBuJiZ2aShlLHQsbikmJih0PW8pLHIoZSxpaSh0LDMpKX0sQm4uc29ydGVkSW5kZXg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdG8oZSx0KX0sQm4uc29ydGVkSW5kZXhCeT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG5vKGUsdCxpaShuLDIpKX0sQm4uc29ydGVkSW5kZXhPZj1mdW5jdGlvbihlLHQpe3ZhciBuPW51bGw9PWU/MDplLmxlbmd0aDtpZihuKXt2YXIgcj10byhlLHQpO2lmKHI8biYmVmEoZVtyXSx0KSlyZXR1cm4gcn1yZXR1cm4tMX0sQm4uc29ydGVkTGFzdEluZGV4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRvKGUsdCwhMCl9LEJuLnNvcnRlZExhc3RJbmRleEJ5PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbm8oZSx0LGlpKG4sMiksITApfSxCbi5zb3J0ZWRMYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQpe2lmKG51bGwhPWUmJmUubGVuZ3RoKXt2YXIgbj10byhlLHQsITApLTE7aWYoVmEoZVtuXSx0KSlyZXR1cm4gbn1yZXR1cm4tMX0sQm4uc3RhcnRDYXNlPXpsLEJuLnN0YXJ0c1dpdGg9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPXZsKGUpLG49bnVsbD09bj8wOm9yKGRsKG4pLDAsZS5sZW5ndGgpLHQ9aW8odCksZS5zbGljZShuLG4rdC5sZW5ndGgpPT10fSxCbi5zdWJ0cmFjdD14cyxCbi5zdW09ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUubGVuZ3RoP3p0KGUsdHMpOjB9LEJuLnN1bUJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP3p0KGUsaWkodCwyKSk6MH0sQm4udGVtcGxhdGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPUJuLnRlbXBsYXRlU2V0dGluZ3M7biYmdmkoZSx0LG4pJiYodD1vKSxlPXZsKGUpLHQ9eWwoe30sdCxyLFlvKTt2YXIgaSxhLGw9eWwoe30sdC5pbXBvcnRzLHIuaW1wb3J0cyxZbykscz1NbChsKSxjPUt0KGwscyksdT0wLGY9dC5pbnRlcnBvbGF0ZXx8eWUsZD1cIl9fcCArPSAnXCIscD1MZSgodC5lc2NhcGV8fHllKS5zb3VyY2UrXCJ8XCIrZi5zb3VyY2UrXCJ8XCIrKGY9PT1YP2ZlOnllKS5zb3VyY2UrXCJ8XCIrKHQuZXZhbHVhdGV8fHllKS5zb3VyY2UrXCJ8JFwiLFwiZ1wiKSxoPVwiLy8jIHNvdXJjZVVSTD1cIisoSWUuY2FsbCh0LFwic291cmNlVVJMXCIpPyh0LnNvdXJjZVVSTCtcIlwiKS5yZXBsYWNlKC9cXHMvZyxcIiBcIik6XCJsb2Rhc2gudGVtcGxhdGVTb3VyY2VzW1wiKyArK3J0K1wiXVwiKStcIlxcblwiO2UucmVwbGFjZShwLChmdW5jdGlvbih0LG4scixvLGwscyl7cmV0dXJuIHJ8fChyPW8pLGQrPWUuc2xpY2UodSxzKS5yZXBsYWNlKHdlLG5uKSxuJiYoaT0hMCxkKz1cIicgK1xcbl9fZShcIituK1wiKSArXFxuJ1wiKSxsJiYoYT0hMCxkKz1cIic7XFxuXCIrbCtcIjtcXG5fX3AgKz0gJ1wiKSxyJiYoZCs9XCInICtcXG4oKF9fdCA9IChcIityK1wiKSkgPT0gbnVsbCA/ICcnIDogX190KSArXFxuJ1wiKSx1PXMrdC5sZW5ndGgsdH0pKSxkKz1cIic7XFxuXCI7dmFyIGc9SWUuY2FsbCh0LFwidmFyaWFibGVcIikmJnQudmFyaWFibGU7aWYoZyl7aWYoY2UudGVzdChnKSl0aHJvdyBuZXcgYmUoXCJJbnZhbGlkIGB2YXJpYWJsZWAgb3B0aW9uIHBhc3NlZCBpbnRvIGBfLnRlbXBsYXRlYFwiKX1lbHNlIGQ9XCJ3aXRoIChvYmopIHtcXG5cIitkK1wiXFxufVxcblwiO2Q9KGE/ZC5yZXBsYWNlKE4sXCJcIik6ZCkucmVwbGFjZShGLFwiJDFcIikucmVwbGFjZShVLFwiJDE7XCIpLGQ9XCJmdW5jdGlvbihcIisoZ3x8XCJvYmpcIikrXCIpIHtcXG5cIisoZz9cIlwiOlwib2JqIHx8IChvYmogPSB7fSk7XFxuXCIpK1widmFyIF9fdCwgX19wID0gJydcIisoaT9cIiwgX19lID0gXy5lc2NhcGVcIjpcIlwiKSsoYT9cIiwgX19qID0gQXJyYXkucHJvdG90eXBlLmpvaW47XFxuZnVuY3Rpb24gcHJpbnQoKSB7IF9fcCArPSBfX2ouY2FsbChhcmd1bWVudHMsICcnKSB9XFxuXCI6XCI7XFxuXCIpK2QrXCJyZXR1cm4gX19wXFxufVwiO3ZhciB2PUtsKChmdW5jdGlvbigpe3JldHVybiB4ZShzLGgrXCJyZXR1cm4gXCIrZCkuYXBwbHkobyxjKX0pKTtpZih2LnNvdXJjZT1kLHFhKHYpKXRocm93IHY7cmV0dXJuIHZ9LEJuLnRpbWVzPWZ1bmN0aW9uKGUsdCl7aWYoKGU9ZGwoZSkpPDF8fGU+ZilyZXR1cm5bXTt2YXIgbj1wLHI9dm4oZSxwKTt0PWlpKHQpLGUtPXA7Zm9yKHZhciBvPUd0KHIsdCk7KytuPGU7KXQobik7cmV0dXJuIG99LEJuLnRvRmluaXRlPWZsLEJuLnRvSW50ZWdlcj1kbCxCbi50b0xlbmd0aD1wbCxCbi50b0xvd2VyPWZ1bmN0aW9uKGUpe3JldHVybiB2bChlKS50b0xvd2VyQ2FzZSgpfSxCbi50b051bWJlcj1obCxCbi50b1NhZmVJbnRlZ2VyPWZ1bmN0aW9uKGUpe3JldHVybiBlP29yKGRsKGUpLC05MDA3MTk5MjU0NzQwOTkxLGYpOjA9PT1lP2U6MH0sQm4udG9TdHJpbmc9dmwsQm4udG9VcHBlcj1mdW5jdGlvbihlKXtyZXR1cm4gdmwoZSkudG9VcHBlckNhc2UoKX0sQm4udHJpbT1mdW5jdGlvbihlLHQsbil7aWYoKGU9dmwoZSkpJiYobnx8dD09PW8pKXJldHVybiBxdChlKTtpZighZXx8ISh0PWlvKHQpKSlyZXR1cm4gZTt2YXIgcj11bihlKSxpPXVuKHQpO3JldHVybiBDbyhyLEp0KHIsaSksUXQocixpKSsxKS5qb2luKFwiXCIpfSxCbi50cmltRW5kPWZ1bmN0aW9uKGUsdCxuKXtpZigoZT12bChlKSkmJihufHx0PT09bykpcmV0dXJuIGUuc2xpY2UoMCxmbihlKSsxKTtpZighZXx8ISh0PWlvKHQpKSlyZXR1cm4gZTt2YXIgcj11bihlKTtyZXR1cm4gQ28ociwwLFF0KHIsdW4odCkpKzEpLmpvaW4oXCJcIil9LEJuLnRyaW1TdGFydD1mdW5jdGlvbihlLHQsbil7aWYoKGU9dmwoZSkpJiYobnx8dD09PW8pKXJldHVybiBlLnJlcGxhY2UocmUsXCJcIik7aWYoIWV8fCEodD1pbyh0KSkpcmV0dXJuIGU7dmFyIHI9dW4oZSk7cmV0dXJuIENvKHIsSnQocix1bih0KSkpLmpvaW4oXCJcIil9LEJuLnRydW5jYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49MzAscj1cIi4uLlwiO2lmKEphKHQpKXt2YXIgaT1cInNlcGFyYXRvclwiaW4gdD90LnNlcGFyYXRvcjppO249XCJsZW5ndGhcImluIHQ/ZGwodC5sZW5ndGgpOm4scj1cIm9taXNzaW9uXCJpbiB0P2lvKHQub21pc3Npb24pOnJ9dmFyIGE9KGU9dmwoZSkpLmxlbmd0aDtpZihybihlKSl7dmFyIGw9dW4oZSk7YT1sLmxlbmd0aH1pZihuPj1hKXJldHVybiBlO3ZhciBzPW4tY24ocik7aWYoczwxKXJldHVybiByO3ZhciBjPWw/Q28obCwwLHMpLmpvaW4oXCJcIik6ZS5zbGljZSgwLHMpO2lmKGk9PT1vKXJldHVybiBjK3I7aWYobCYmKHMrPWMubGVuZ3RoLXMpLHJsKGkpKXtpZihlLnNsaWNlKHMpLnNlYXJjaChpKSl7dmFyIHUsZj1jO2ZvcihpLmdsb2JhbHx8KGk9TGUoaS5zb3VyY2UsdmwoZGUuZXhlYyhpKSkrXCJnXCIpKSxpLmxhc3RJbmRleD0wO3U9aS5leGVjKGYpOyl2YXIgZD11LmluZGV4O2M9Yy5zbGljZSgwLGQ9PT1vP3M6ZCl9fWVsc2UgaWYoZS5pbmRleE9mKGlvKGkpLHMpIT1zKXt2YXIgcD1jLmxhc3RJbmRleE9mKGkpO3A+LTEmJihjPWMuc2xpY2UoMCxwKSl9cmV0dXJuIGMrcn0sQm4udW5lc2NhcGU9ZnVuY3Rpb24oZSl7cmV0dXJuKGU9dmwoZSkpJiZHLnRlc3QoZSk/ZS5yZXBsYWNlKFcsZG4pOmV9LEJuLnVuaXF1ZUlkPWZ1bmN0aW9uKGUpe3ZhciB0PSsrQWU7cmV0dXJuIHZsKGUpK3R9LEJuLnVwcGVyQ2FzZT1HbCxCbi51cHBlckZpcnN0PXFsLEJuLmVhY2g9dmEsQm4uZWFjaFJpZ2h0PW1hLEJuLmZpcnN0PVVpLGlzKEJuLChncz17fSxtcihCbiwoZnVuY3Rpb24oZSx0KXtJZS5jYWxsKEJuLnByb3RvdHlwZSx0KXx8KGdzW3RdPWUpfSkpLGdzKSx7Y2hhaW46ITF9KSxCbi5WRVJTSU9OPVwiNC4xNy4yMVwiLEx0KFtcImJpbmRcIixcImJpbmRLZXlcIixcImN1cnJ5XCIsXCJjdXJyeVJpZ2h0XCIsXCJwYXJ0aWFsXCIsXCJwYXJ0aWFsUmlnaHRcIl0sKGZ1bmN0aW9uKGUpe0JuW2VdLnBsYWNlaG9sZGVyPUJufSkpLEx0KFtcImRyb3BcIixcInRha2VcIl0sKGZ1bmN0aW9uKGUsdCl7JG4ucHJvdG90eXBlW2VdPWZ1bmN0aW9uKG4pe249bj09PW8/MTpnbihkbChuKSwwKTt2YXIgcj10aGlzLl9fZmlsdGVyZWRfXyYmIXQ/bmV3ICRuKHRoaXMpOnRoaXMuY2xvbmUoKTtyZXR1cm4gci5fX2ZpbHRlcmVkX18/ci5fX3Rha2VDb3VudF9fPXZuKG4sci5fX3Rha2VDb3VudF9fKTpyLl9fdmlld3NfXy5wdXNoKHtzaXplOnZuKG4scCksdHlwZTplKyhyLl9fZGlyX188MD9cIlJpZ2h0XCI6XCJcIil9KSxyfSwkbi5wcm90b3R5cGVbZStcIlJpZ2h0XCJdPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJldmVyc2UoKVtlXSh0KS5yZXZlcnNlKCl9fSkpLEx0KFtcImZpbHRlclwiLFwibWFwXCIsXCJ0YWtlV2hpbGVcIl0sKGZ1bmN0aW9uKGUsdCl7dmFyIG49dCsxLHI9MT09bnx8Mz09bjskbi5wcm90b3R5cGVbZV09ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jbG9uZSgpO3JldHVybiB0Ll9faXRlcmF0ZWVzX18ucHVzaCh7aXRlcmF0ZWU6aWkoZSwzKSx0eXBlOm59KSx0Ll9fZmlsdGVyZWRfXz10Ll9fZmlsdGVyZWRfX3x8cix0fX0pKSxMdChbXCJoZWFkXCIsXCJsYXN0XCJdLChmdW5jdGlvbihlLHQpe3ZhciBuPVwidGFrZVwiKyh0P1wiUmlnaHRcIjpcIlwiKTskbi5wcm90b3R5cGVbZV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tuXSgxKS52YWx1ZSgpWzBdfX0pKSxMdChbXCJpbml0aWFsXCIsXCJ0YWlsXCJdLChmdW5jdGlvbihlLHQpe3ZhciBuPVwiZHJvcFwiKyh0P1wiXCI6XCJSaWdodFwiKTskbi5wcm90b3R5cGVbZV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2ZpbHRlcmVkX18/bmV3ICRuKHRoaXMpOnRoaXNbbl0oMSl9fSkpLCRuLnByb3RvdHlwZS5jb21wYWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsdGVyKHRzKX0sJG4ucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZmlsdGVyKGUpLmhlYWQoKX0sJG4ucHJvdG90eXBlLmZpbmRMYXN0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJldmVyc2UoKS5maW5kKGUpfSwkbi5wcm90b3R5cGUuaW52b2tlTWFwPXpyKChmdW5jdGlvbihlLHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGU/bmV3ICRuKHRoaXMpOnRoaXMubWFwKChmdW5jdGlvbihuKXtyZXR1cm4gU3IobixlLHQpfSkpfSkpLCRuLnByb3RvdHlwZS5yZWplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZmlsdGVyKElhKGlpKGUpKSl9LCRuLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihlLHQpe2U9ZGwoZSk7dmFyIG49dGhpcztyZXR1cm4gbi5fX2ZpbHRlcmVkX18mJihlPjB8fHQ8MCk/bmV3ICRuKG4pOihlPDA/bj1uLnRha2VSaWdodCgtZSk6ZSYmKG49bi5kcm9wKGUpKSx0IT09byYmKG49KHQ9ZGwodCkpPDA/bi5kcm9wUmlnaHQoLXQpOm4udGFrZSh0LWUpKSxuKX0sJG4ucHJvdG90eXBlLnRha2VSaWdodFdoaWxlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJldmVyc2UoKS50YWtlV2hpbGUoZSkucmV2ZXJzZSgpfSwkbi5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRha2UocCl9LG1yKCRuLnByb3RvdHlwZSwoZnVuY3Rpb24oZSx0KXt2YXIgbj0vXig/OmZpbHRlcnxmaW5kfG1hcHxyZWplY3QpfFdoaWxlJC8udGVzdCh0KSxyPS9eKD86aGVhZHxsYXN0KSQvLnRlc3QodCksaT1CbltyP1widGFrZVwiKyhcImxhc3RcIj09dD9cIlJpZ2h0XCI6XCJcIik6dF0sYT1yfHwvXmZpbmQvLnRlc3QodCk7aSYmKEJuLnByb3RvdHlwZVt0XT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX193cmFwcGVkX18sbD1yP1sxXTphcmd1bWVudHMscz10IGluc3RhbmNlb2YgJG4sYz1sWzBdLHU9c3x8TmEodCksZj1mdW5jdGlvbihlKXt2YXIgdD1pLmFwcGx5KEJuLFB0KFtlXSxsKSk7cmV0dXJuIHImJmQ/dFswXTp0fTt1JiZuJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBjJiYxIT1jLmxlbmd0aCYmKHM9dT0hMSk7dmFyIGQ9dGhpcy5fX2NoYWluX18scD0hIXRoaXMuX19hY3Rpb25zX18ubGVuZ3RoLGg9YSYmIWQsZz1zJiYhcDtpZighYSYmdSl7dD1nP3Q6bmV3ICRuKHRoaXMpO3ZhciB2PWUuYXBwbHkodCxsKTtyZXR1cm4gdi5fX2FjdGlvbnNfXy5wdXNoKHtmdW5jOmZhLGFyZ3M6W2ZdLHRoaXNBcmc6b30pLG5ldyBabih2LGQpfXJldHVybiBoJiZnP2UuYXBwbHkodGhpcyxsKToodj10aGlzLnRocnUoZiksaD9yP3YudmFsdWUoKVswXTp2LnZhbHVlKCk6dil9KX0pKSxMdChbXCJwb3BcIixcInB1c2hcIixcInNoaWZ0XCIsXCJzb3J0XCIsXCJzcGxpY2VcIixcInVuc2hpZnRcIl0sKGZ1bmN0aW9uKGUpe3ZhciB0PWplW2VdLG49L14oPzpwdXNofHNvcnR8dW5zaGlmdCkkLy50ZXN0KGUpP1widGFwXCI6XCJ0aHJ1XCIscj0vXig/OnBvcHxzaGlmdCkkLy50ZXN0KGUpO0JuLnByb3RvdHlwZVtlXT1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cztpZihyJiYhdGhpcy5fX2NoYWluX18pe3ZhciBvPXRoaXMudmFsdWUoKTtyZXR1cm4gdC5hcHBseShOYShvKT9vOltdLGUpfXJldHVybiB0aGlzW25dKChmdW5jdGlvbihuKXtyZXR1cm4gdC5hcHBseShOYShuKT9uOltdLGUpfSkpfX0pKSxtcigkbi5wcm90b3R5cGUsKGZ1bmN0aW9uKGUsdCl7dmFyIG49Qm5bdF07aWYobil7dmFyIHI9bi5uYW1lK1wiXCI7SWUuY2FsbChqbixyKXx8KGpuW3JdPVtdKSxqbltyXS5wdXNoKHtuYW1lOnQsZnVuYzpufSl9fSkpLGpuW0JvKG8sMikubmFtZV09W3tuYW1lOlwid3JhcHBlclwiLGZ1bmM6b31dLCRuLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBlPW5ldyAkbih0aGlzLl9fd3JhcHBlZF9fKTtyZXR1cm4gZS5fX2FjdGlvbnNfXz1Fbyh0aGlzLl9fYWN0aW9uc19fKSxlLl9fZGlyX189dGhpcy5fX2Rpcl9fLGUuX19maWx0ZXJlZF9fPXRoaXMuX19maWx0ZXJlZF9fLGUuX19pdGVyYXRlZXNfXz1Fbyh0aGlzLl9faXRlcmF0ZWVzX18pLGUuX190YWtlQ291bnRfXz10aGlzLl9fdGFrZUNvdW50X18sZS5fX3ZpZXdzX189RW8odGhpcy5fX3ZpZXdzX18pLGV9LCRuLnByb3RvdHlwZS5yZXZlcnNlPWZ1bmN0aW9uKCl7aWYodGhpcy5fX2ZpbHRlcmVkX18pe3ZhciBlPW5ldyAkbih0aGlzKTtlLl9fZGlyX189LTEsZS5fX2ZpbHRlcmVkX189ITB9ZWxzZShlPXRoaXMuY2xvbmUoKSkuX19kaXJfXyo9LTE7cmV0dXJuIGV9LCRuLnByb3RvdHlwZS52YWx1ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX193cmFwcGVkX18udmFsdWUoKSx0PXRoaXMuX19kaXJfXyxuPU5hKGUpLHI9dDwwLG89bj9lLmxlbmd0aDowLGk9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj0tMSxvPW4ubGVuZ3RoOysrcjxvOyl7dmFyIGk9bltyXSxhPWkuc2l6ZTtzd2l0Y2goaS50eXBlKXtjYXNlXCJkcm9wXCI6ZSs9YTticmVhaztjYXNlXCJkcm9wUmlnaHRcIjp0LT1hO2JyZWFrO2Nhc2VcInRha2VcIjp0PXZuKHQsZSthKTticmVhaztjYXNlXCJ0YWtlUmlnaHRcIjplPWduKGUsdC1hKX19cmV0dXJue3N0YXJ0OmUsZW5kOnR9fSgwLG8sdGhpcy5fX3ZpZXdzX18pLGE9aS5zdGFydCxsPWkuZW5kLHM9bC1hLGM9cj9sOmEtMSx1PXRoaXMuX19pdGVyYXRlZXNfXyxmPXUubGVuZ3RoLGQ9MCxwPXZuKHMsdGhpcy5fX3Rha2VDb3VudF9fKTtpZighbnx8IXImJm89PXMmJnA9PXMpcmV0dXJuIHVvKGUsdGhpcy5fX2FjdGlvbnNfXyk7dmFyIGg9W107ZTpmb3IoO3MtLSYmZDxwOyl7Zm9yKHZhciBnPS0xLHY9ZVtjKz10XTsrK2c8Zjspe3ZhciBtPXVbZ10sQz1tLml0ZXJhdGVlLHk9bS50eXBlLHc9Qyh2KTtpZigyPT15KXY9dztlbHNlIGlmKCF3KXtpZigxPT15KWNvbnRpbnVlIGU7YnJlYWsgZX19aFtkKytdPXZ9cmV0dXJuIGh9LEJuLnByb3RvdHlwZS5hdD1kYSxCbi5wcm90b3R5cGUuY2hhaW49ZnVuY3Rpb24oKXtyZXR1cm4gdWEodGhpcyl9LEJuLnByb3RvdHlwZS5jb21taXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFpuKHRoaXMudmFsdWUoKSx0aGlzLl9fY2hhaW5fXyl9LEJuLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7dGhpcy5fX3ZhbHVlc19fPT09byYmKHRoaXMuX192YWx1ZXNfXz11bCh0aGlzLnZhbHVlKCkpKTt2YXIgZT10aGlzLl9faW5kZXhfXz49dGhpcy5fX3ZhbHVlc19fLmxlbmd0aDtyZXR1cm57ZG9uZTplLHZhbHVlOmU/bzp0aGlzLl9fdmFsdWVzX19bdGhpcy5fX2luZGV4X18rK119fSxCbi5wcm90b3R5cGUucGxhbnQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49dGhpcztuIGluc3RhbmNlb2YgRG47KXt2YXIgcj1CaShuKTtyLl9faW5kZXhfXz0wLHIuX192YWx1ZXNfXz1vLHQ/aS5fX3dyYXBwZWRfXz1yOnQ9cjt2YXIgaT1yO249bi5fX3dyYXBwZWRfX31yZXR1cm4gaS5fX3dyYXBwZWRfXz1lLHR9LEJuLnByb3RvdHlwZS5yZXZlcnNlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fX3dyYXBwZWRfXztpZihlIGluc3RhbmNlb2YgJG4pe3ZhciB0PWU7cmV0dXJuIHRoaXMuX19hY3Rpb25zX18ubGVuZ3RoJiYodD1uZXcgJG4odGhpcykpLCh0PXQucmV2ZXJzZSgpKS5fX2FjdGlvbnNfXy5wdXNoKHtmdW5jOmZhLGFyZ3M6W0ppXSx0aGlzQXJnOm99KSxuZXcgWm4odCx0aGlzLl9fY2hhaW5fXyl9cmV0dXJuIHRoaXMudGhydShKaSl9LEJuLnByb3RvdHlwZS50b0pTT049Qm4ucHJvdG90eXBlLnZhbHVlT2Y9Qm4ucHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHVvKHRoaXMuX193cmFwcGVkX18sdGhpcy5fX2FjdGlvbnNfXyl9LEJuLnByb3RvdHlwZS5maXJzdD1Cbi5wcm90b3R5cGUuaGVhZCxZZSYmKEJuLnByb3RvdHlwZVtZZV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLEJufSgpO2Z0Ll89cG4sKHI9ZnVuY3Rpb24oKXtyZXR1cm4gcG59LmNhbGwodCxuLHQsZSkpPT09b3x8KGUuZXhwb3J0cz1yKX0uY2FsbCh0aGlzKX0sNzQxODplPT57dmFyIHQ9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxuPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkscj1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO2UuZXhwb3J0cz1mdW5jdGlvbigpe3RyeXtpZighT2JqZWN0LmFzc2lnbilyZXR1cm4hMTt2YXIgZT1uZXcgU3RyaW5nKFwiYWJjXCIpO2lmKGVbNV09XCJkZVwiLFwiNVwiPT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSlbMF0pcmV0dXJuITE7Zm9yKHZhciB0PXt9LG49MDtuPDEwO24rKyl0W1wiX1wiK1N0cmluZy5mcm9tQ2hhckNvZGUobildPW47aWYoXCIwMTIzNDU2Nzg5XCIhPT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSkpLmpvaW4oXCJcIikpcmV0dXJuITE7dmFyIHI9e307cmV0dXJuXCJhYmNkZWZnaGlqa2xtbm9wcXJzdFwiLnNwbGl0KFwiXCIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JbZV09ZX0pKSxcImFiY2RlZmdoaWprbG1ub3BxcnN0XCI9PT1PYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LHIpKS5qb2luKFwiXCIpfWNhdGNoKGUpe3JldHVybiExfX0oKT9PYmplY3QuYXNzaWduOmZ1bmN0aW9uKGUsbyl7Zm9yKHZhciBpLGEsbD1mdW5jdGlvbihlKXtpZihudWxsPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZFwiKTtyZXR1cm4gT2JqZWN0KGUpfShlKSxzPTE7czxhcmd1bWVudHMubGVuZ3RoO3MrKyl7Zm9yKHZhciBjIGluIGk9T2JqZWN0KGFyZ3VtZW50c1tzXSkpbi5jYWxsKGksYykmJihsW2NdPWlbY10pO2lmKHQpe2E9dChpKTtmb3IodmFyIHU9MDt1PGEubGVuZ3RoO3UrKylyLmNhbGwoaSxhW3VdKSYmKGxbYVt1XV09aVthW3VdXSl9fXJldHVybiBsfX0sOTI5NDooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIHI9big2NTUpLG89big0Mzk0KSxpPW4oMzU3MyksYT1uKDQ4MzkpO3ZhciBsPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmXCJkZWZhdWx0XCJpbiBlP2U6e2RlZmF1bHQ6ZX19KGEpLHM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBNYXRoLm1pbihNYXRoLm1heChuLGUpLHQpfSxjPS4wMDEsdT0uMDEsZj0xMCxkPS4wNSxwPTEsaD0xMjtmdW5jdGlvbiBnKGUsdCl7cmV0dXJuIGUqTWF0aC5zcXJ0KDEtdCp0KX12YXIgdj1bXCJkdXJhdGlvblwiLFwiYm91bmNlXCJdLG09W1wic3RpZmZuZXNzXCIsXCJkYW1waW5nXCIsXCJtYXNzXCJdO2Z1bmN0aW9uIEMoZSx0KXtyZXR1cm4gdC5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09ZVt0XX0pKX1mdW5jdGlvbiB5KGUpe3ZhciB0PWUuZnJvbSxuPXZvaWQgMD09PXQ/MDp0LGk9ZS50byxhPXZvaWQgMD09PWk/MTppLGw9ZS5yZXN0U3BlZWQseT12b2lkIDA9PT1sPzI6bCxiPWUucmVzdERlbHRhLHg9ci5fX3Jlc3QoZSxbXCJmcm9tXCIsXCJ0b1wiLFwicmVzdFNwZWVkXCIsXCJyZXN0RGVsdGFcIl0pLF89e2RvbmU6ITEsdmFsdWU6bn0sTz1mdW5jdGlvbihlKXt2YXIgdD1yLl9fYXNzaWduKHt2ZWxvY2l0eTowLHN0aWZmbmVzczoxMDAsZGFtcGluZzoxMCxtYXNzOjEsaXNSZXNvbHZlZEZyb21EdXJhdGlvbjohMX0sZSk7aWYoIUMoZSxtKSYmQyhlLHYpKXt2YXIgbj1mdW5jdGlvbihlKXt2YXIgdCxuLHI9ZS5kdXJhdGlvbixpPXZvaWQgMD09PXI/ODAwOnIsYT1lLmJvdW5jZSxsPXZvaWQgMD09PWE/LjI1OmEsdj1lLnZlbG9jaXR5LG09dm9pZCAwPT09dj8wOnYsQz1lLm1hc3MseT12b2lkIDA9PT1DPzE6QztvLndhcm5pbmcoaTw9MWUzKmYsXCJTcHJpbmcgZHVyYXRpb24gbXVzdCBiZSAxMCBzZWNvbmRzIG9yIGxlc3NcIik7dmFyIHc9MS1sO3c9cyhkLHAsdyksaT1zKHUsZixpLzFlMyksdzwxPyh0PWZ1bmN0aW9uKGUpe3ZhciB0PWUqdyxuPXQqaSxyPXQtbSxvPWcoZSx3KSxhPU1hdGguZXhwKC1uKTtyZXR1cm4gYy1yL28qYX0sbj1mdW5jdGlvbihlKXt2YXIgbj1lKncqaSxyPW4qbSttLG89TWF0aC5wb3codywyKSpNYXRoLnBvdyhlLDIpKmksYT1NYXRoLmV4cCgtbiksbD1nKE1hdGgucG93KGUsMiksdyk7cmV0dXJuKC10KGUpK2M+MD8tMToxKSooKHItbykqYSkvbH0pOih0PWZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmV4cCgtZSppKSooKGUtbSkqaSsxKS1jfSxuPWZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmV4cCgtZSppKSooaSppKihtLWUpKX0pO3ZhciBiPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bixvPTE7bzxoO28rKylyLT1lKHIpL3Qocik7cmV0dXJuIHJ9KHQsbiw1L2kpO2lmKGkqPTFlMyxpc05hTihiKSlyZXR1cm57c3RpZmZuZXNzOjEwMCxkYW1waW5nOjEwLGR1cmF0aW9uOml9O3ZhciB4PU1hdGgucG93KGIsMikqeTtyZXR1cm57c3RpZmZuZXNzOngsZGFtcGluZzoyKncqTWF0aC5zcXJ0KHkqeCksZHVyYXRpb246aX19KGUpOyh0PXIuX19hc3NpZ24oci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LHQpLG4pLHt2ZWxvY2l0eTowLG1hc3M6MX0pKS5pc1Jlc29sdmVkRnJvbUR1cmF0aW9uPSEwfXJldHVybiB0fSh4KSxMPU8uc3RpZmZuZXNzLEU9Ty5kYW1waW5nLFM9Ty5tYXNzLGo9Ty52ZWxvY2l0eSxNPU8uZHVyYXRpb24saz1PLmlzUmVzb2x2ZWRGcm9tRHVyYXRpb24sUj13LFA9dztmdW5jdGlvbiBJKCl7dmFyIGU9aj8tai8xZTM6MCx0PWEtbixyPUUvKDIqTWF0aC5zcXJ0KEwqUykpLG89TWF0aC5zcXJ0KEwvUykvMWUzO2lmKG51bGwhPWJ8fChiPU1hdGguYWJzKGEtbik8PTE/LjAxOi40KSxyPDEpe3ZhciBpPWcobyxyKTtSPWZ1bmN0aW9uKG4pe3ZhciBsPU1hdGguZXhwKC1yKm8qbik7cmV0dXJuIGEtbCooKGUrcipvKnQpL2kqTWF0aC5zaW4oaSpuKSt0Kk1hdGguY29zKGkqbikpfSxQPWZ1bmN0aW9uKG4pe3ZhciBhPU1hdGguZXhwKC1yKm8qbik7cmV0dXJuIHIqbyphKihNYXRoLnNpbihpKm4pKihlK3Iqbyp0KS9pK3QqTWF0aC5jb3MoaSpuKSktYSooTWF0aC5jb3MoaSpuKSooZStyKm8qdCktaSp0Kk1hdGguc2luKGkqbikpfX1lbHNlIGlmKDE9PT1yKVI9ZnVuY3Rpb24obil7cmV0dXJuIGEtTWF0aC5leHAoLW8qbikqKHQrKGUrbyp0KSpuKX07ZWxzZXt2YXIgbD1vKk1hdGguc3FydChyKnItMSk7Uj1mdW5jdGlvbihuKXt2YXIgaT1NYXRoLmV4cCgtcipvKm4pLHM9TWF0aC5taW4obCpuLDMwMCk7cmV0dXJuIGEtaSooKGUrcipvKnQpKk1hdGguc2luaChzKStsKnQqTWF0aC5jb3NoKHMpKS9sfX19cmV0dXJuIEkoKSx7bmV4dDpmdW5jdGlvbihlKXt2YXIgdD1SKGUpO2lmKGspXy5kb25lPWU+PU07ZWxzZXt2YXIgbj0xZTMqUChlKSxyPU1hdGguYWJzKG4pPD15LG89TWF0aC5hYnMoYS10KTw9YjtfLmRvbmU9ciYmb31yZXR1cm4gXy52YWx1ZT1fLmRvbmU/YTp0LF99LGZsaXBUYXJnZXQ6ZnVuY3Rpb24oKXt2YXIgZTtqPS1qLG49KGU9W2Esbl0pWzBdLGE9ZVsxXSxJKCl9fX15Lm5lZWRzSW50ZXJwb2xhdGlvbj1mdW5jdGlvbihlLHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlfHxcInN0cmluZ1wiPT10eXBlb2YgdH07dmFyIHc9ZnVuY3Rpb24oZSl7cmV0dXJuIDB9LGI9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQtZTtyZXR1cm4gMD09PXI/MToobi1lKS9yfSx4PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4tbiplK24qdCtlfSxfPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lKmUsbz10KnQ7cmV0dXJuIE1hdGguc3FydChNYXRoLm1heCgwLG4qKG8tcikrcikpfSxPPVtpLmhleCxpLnJnYmEsaS5oc2xhXSxMPWZ1bmN0aW9uKGUpe3JldHVybiBPLmZpbmQoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRlc3QoZSl9KSl9LEU9ZnVuY3Rpb24oZSl7cmV0dXJuXCInXCIrZStcIicgaXMgbm90IGFuIGFuaW1hdGFibGUgY29sb3IuIFVzZSB0aGUgZXF1aXZhbGVudCBjb2xvciBjb2RlIGluc3RlYWQuXCJ9LFM9ZnVuY3Rpb24oZSx0KXt2YXIgbj1MKGUpLGE9TCh0KTtvLmludmFyaWFudCghIW4sRShlKSksby5pbnZhcmlhbnQoISFhLEUodCkpLG8uaW52YXJpYW50KG4udHJhbnNmb3JtPT09YS50cmFuc2Zvcm0sXCJCb3RoIGNvbG9ycyBtdXN0IGJlIGhleC9SR0JBLCBPUiBib3RoIG11c3QgYmUgSFNMQS5cIik7dmFyIGw9bi5wYXJzZShlKSxzPWEucGFyc2UodCksYz1yLl9fYXNzaWduKHt9LGwpLHU9bj09PWkuaHNsYT94Ol87cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBjKVwiYWxwaGFcIiE9PXQmJihjW3RdPXUobFt0XSxzW3RdLGUpKTtyZXR1cm4gYy5hbHBoYT14KGwuYWxwaGEscy5hbHBoYSxlKSxuLnRyYW5zZm9ybShjKX19LGo9e3g6MCx5OjAsejowfSxNPWZ1bmN0aW9uKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlfSxrPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0KGUobikpfX0sUj1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTtyZXR1cm4gZS5yZWR1Y2Uoayl9O2Z1bmN0aW9uIFAoZSx0KXtyZXR1cm4gTShlKT9mdW5jdGlvbihuKXtyZXR1cm4geChlLHQsbil9OmkuY29sb3IudGVzdChlKT9TKGUsdCk6SChlLHQpfXZhciBJPWZ1bmN0aW9uKGUsdCl7dmFyIG49ci5fX3NwcmVhZEFycmF5KFtdLGUpLG89bi5sZW5ndGgsaT1lLm1hcCgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gUChlLHRbbl0pfSkpO3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PG87dCsrKW5bdF09aVt0XShlKTtyZXR1cm4gbn19LEE9ZnVuY3Rpb24oZSx0KXt2YXIgbj1yLl9fYXNzaWduKHIuX19hc3NpZ24oe30sZSksdCksbz17fTtmb3IodmFyIGkgaW4gbil2b2lkIDAhPT1lW2ldJiZ2b2lkIDAhPT10W2ldJiYob1tpXT1QKGVbaV0sdFtpXSkpO3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gbyluW3RdPW9bdF0oZSk7cmV0dXJuIG59fTtmdW5jdGlvbiBUKGUpe2Zvcih2YXIgdD1pLmNvbXBsZXgucGFyc2UoZSksbj10Lmxlbmd0aCxyPTAsbz0wLGE9MCxsPTA7bDxuO2wrKylyfHxcIm51bWJlclwiPT10eXBlb2YgdFtsXT9yKys6dm9pZCAwIT09dFtsXS5odWU/YSsrOm8rKztyZXR1cm57cGFyc2VkOnQsbnVtTnVtYmVyczpyLG51bVJHQjpvLG51bUhTTDphfX12YXIgSD1mdW5jdGlvbihlLHQpe3ZhciBuPWkuY29tcGxleC5jcmVhdGVUcmFuc2Zvcm1lcih0KSxyPVQoZSksYT1UKHQpO3JldHVybiBvLmludmFyaWFudChyLm51bUhTTD09PWEubnVtSFNMJiZyLm51bVJHQj09PWEubnVtUkdCJiZyLm51bU51bWJlcnM+PWEubnVtTnVtYmVycyxcIkNvbXBsZXggdmFsdWVzICdcIitlK1wiJyBhbmQgJ1wiK3QrXCInIHRvbyBkaWZmZXJlbnQgdG8gbWl4LiBFbnN1cmUgYWxsIGNvbG9ycyBhcmUgb2YgdGhlIHNhbWUgdHlwZS5cIiksUihJKHIucGFyc2VkLGEucGFyc2VkKSxuKX0sQj1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4geChlLHQsbil9fTtmdW5jdGlvbiBWKGUsdCxuKXt2YXIgcj12b2lkIDA9PT1uP3t9Om4sYT1yLmNsYW1wLGw9dm9pZCAwPT09YXx8YSxjPXIuZWFzZSx1PXIubWl4ZXIsZj1lLmxlbmd0aDtvLmludmFyaWFudChmPT09dC5sZW5ndGgsXCJCb3RoIGlucHV0IGFuZCBvdXRwdXQgcmFuZ2VzIG11c3QgYmUgdGhlIHNhbWUgbGVuZ3RoXCIpLG8uaW52YXJpYW50KCFjfHwhQXJyYXkuaXNBcnJheShjKXx8Yy5sZW5ndGg9PT1mLTEsXCJBcnJheSBvZiBlYXNpbmcgZnVuY3Rpb25zIG11c3QgYmUgb2YgbGVuZ3RoIGBpbnB1dC5sZW5ndGggLSAxYCwgYXMgaXQgYXBwbGllcyB0byB0aGUgdHJhbnNpdGlvbnMgKipiZXR3ZWVuKiogdGhlIGRlZmluZWQgdmFsdWVzLlwiKSxlWzBdPmVbZi0xXSYmKGU9W10uY29uY2F0KGUpLHQ9W10uY29uY2F0KHQpLGUucmV2ZXJzZSgpLHQucmV2ZXJzZSgpKTt2YXIgZD1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByLG89W10sYT1ufHwoXCJudW1iZXJcIj09dHlwZW9mKHI9ZVswXSk/QjpcInN0cmluZ1wiPT10eXBlb2Ygcj9pLmNvbG9yLnRlc3Qocik/UzpIOkFycmF5LmlzQXJyYXkocik/STpcIm9iamVjdFwiPT10eXBlb2Ygcj9BOnZvaWQgMCksbD1lLmxlbmd0aC0xLHM9MDtzPGw7cysrKXt2YXIgYz1hKGVbc10sZVtzKzFdKTtpZih0KXt2YXIgdT1BcnJheS5pc0FycmF5KHQpP3Rbc106dDtjPVIodSxjKX1vLnB1c2goYyl9cmV0dXJuIG99KHQsYyx1KSxwPTI9PT1mP2Z1bmN0aW9uKGUsdCl7dmFyIG49ZVswXSxyPWVbMV0sbz10WzBdO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gbyhiKG4scixlKSl9fShlLGQpOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5sZW5ndGgscj1uLTE7cmV0dXJuIGZ1bmN0aW9uKG8pe3ZhciBpPTAsYT0hMTtpZihvPD1lWzBdP2E9ITA6bz49ZVtyXSYmKGk9ci0xLGE9ITApLCFhKXtmb3IodmFyIGw9MTtsPG4mJiEoZVtsXT5vfHxsPT09cik7bCsrKTtpPWwtMX12YXIgcz1iKGVbaV0sZVtpKzFdLG8pO3JldHVybiB0W2ldKHMpfX0oZSxkKTtyZXR1cm4gbD9mdW5jdGlvbih0KXtyZXR1cm4gcChzKGVbMF0sZVtmLTFdLHQpKX06cH12YXIgRD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIDEtZSgxLXQpfX0sWj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQ8PS41P2UoMip0KS8yOigyLWUoMiooMS10KSkpLzJ9fSwkPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5wb3codCxlKX19LE49ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0KnQqKChlKzEpKnQtZSl9fSxGPWZ1bmN0aW9uKGUpe3ZhciB0PU4oZSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybihlKj0yKTwxPy41KnQoZSk6LjUqKDItTWF0aC5wb3coMiwtMTAqKGUtMSkpKX19LFU9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LFc9JCgyKSx6PUQoVyksRz1aKFcpLHE9ZnVuY3Rpb24oZSl7cmV0dXJuIDEtTWF0aC5zaW4oTWF0aC5hY29zKGUpKX0sWT1EKHEpLEs9WihZKSxYPU4oMS41MjUpLEo9RChYKSxRPVooWCksZWU9RigxLjUyNSksdGU9ZnVuY3Rpb24oZSl7aWYoMT09PWV8fDA9PT1lKXJldHVybiBlO3ZhciB0PWUqZTtyZXR1cm4gZTwuMzYzNjM2MzYzNjM2MzYzNjU/Ny41NjI1KnQ6ZTwuNzI3MjcyNzI3MjcyNzI3Mz85LjA3NSp0LTkuOSplKzMuNDplPC45PzEyLjA2NjQ4MTk5NDQ1OTgzMyp0LTE5LjYzNTQ1NzA2MzcxMTkxKmUrOC44OTgwNjA5NDE4MjgyNTU6MTAuOCplKmUtMjAuNTIqZSsxMC43Mn0sbmU9RCh0ZSk7ZnVuY3Rpb24gcmUoZSx0KXtyZXR1cm4gZS5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuIHR8fEd9KSkuc3BsaWNlKDAsZS5sZW5ndGgtMSl9ZnVuY3Rpb24gb2UoZSl7dmFyIHQ9ZS5mcm9tLG49dm9pZCAwPT09dD8wOnQscj1lLnRvLG89dm9pZCAwPT09cj8xOnIsaT1lLmVhc2UsYT1lLm9mZnNldCxsPWUuZHVyYXRpb24scz12b2lkIDA9PT1sPzMwMDpsLGM9e2RvbmU6ITEsdmFsdWU6bn0sdT1BcnJheS5pc0FycmF5KG8pP286W24sb10sZj1mdW5jdGlvbihlLHQpe3JldHVybiBlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUqdH0pKX0oYSYmYS5sZW5ndGg9PT11Lmxlbmd0aD9hOmZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybiBlLm1hcCgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gMCE9PW4/bi8odC0xKTowfSkpfSh1KSxzKTtmdW5jdGlvbiBkKCl7cmV0dXJuIFYoZix1LHtlYXNlOkFycmF5LmlzQXJyYXkoaSk/aTpyZSh1LGkpfSl9dmFyIHA9ZCgpO3JldHVybntuZXh0OmZ1bmN0aW9uKGUpe3JldHVybiBjLnZhbHVlPXAoZSksYy5kb25lPWU+PXMsY30sZmxpcFRhcmdldDpmdW5jdGlvbigpe3UucmV2ZXJzZSgpLHA9ZCgpfX19ZnVuY3Rpb24gaWUoZSl7dmFyIHQ9ZS52ZWxvY2l0eSxuPXZvaWQgMD09PXQ/MDp0LHI9ZS5mcm9tLG89dm9pZCAwPT09cj8wOnIsaT1lLnBvd2VyLGE9dm9pZCAwPT09aT8uODppLGw9ZS50aW1lQ29uc3RhbnQscz12b2lkIDA9PT1sPzM1MDpsLGM9ZS5yZXN0RGVsdGEsdT12b2lkIDA9PT1jPy41OmMsZj1lLm1vZGlmeVRhcmdldCxkPXtkb25lOiExLHZhbHVlOm99LHA9YSpuLGg9bytwLGc9dm9pZCAwPT09Zj9oOmYoaCk7cmV0dXJuIGchPT1oJiYocD1nLW8pLHtuZXh0OmZ1bmN0aW9uKGUpe3ZhciB0PS1wKk1hdGguZXhwKC1lL3MpO3JldHVybiBkLmRvbmU9ISh0PnV8fHQ8LXUpLGQudmFsdWU9ZC5kb25lP2c6Zyt0LGR9LGZsaXBUYXJnZXQ6ZnVuY3Rpb24oKXt9fX12YXIgYWU9e2tleWZyYW1lczpvZSxzcHJpbmc6eSxkZWNheTppZX07ZnVuY3Rpb24gbGUoZSx0LG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj0wKSxlLXQtbn12YXIgc2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24odCl7dmFyIG49dC5kZWx0YTtyZXR1cm4gZShuKX07cmV0dXJue3N0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIGwuZGVmYXVsdC51cGRhdGUodCwhMCl9LHN0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gYS5jYW5jZWxTeW5jLnVwZGF0ZSh0KX19fTtmdW5jdGlvbiBjZShlKXt2YXIgdCxuLG8saSxhLGw9ZS5mcm9tLHM9ZS5hdXRvcGxheSxjPXZvaWQgMD09PXN8fHMsdT1lLmRyaXZlcixmPXZvaWQgMD09PXU/c2U6dSxkPWUuZWxhcHNlZCxwPXZvaWQgMD09PWQ/MDpkLGg9ZS5yZXBlYXQsZz12b2lkIDA9PT1oPzA6aCx2PWUucmVwZWF0VHlwZSxtPXZvaWQgMD09PXY/XCJsb29wXCI6dixDPWUucmVwZWF0RGVsYXksdz12b2lkIDA9PT1DPzA6QyxiPWUub25QbGF5LHg9ZS5vblN0b3AsXz1lLm9uQ29tcGxldGUsTz1lLm9uUmVwZWF0LEw9ZS5vblVwZGF0ZSxFPXIuX19yZXN0KGUsW1wiZnJvbVwiLFwiYXV0b3BsYXlcIixcImRyaXZlclwiLFwiZWxhcHNlZFwiLFwicmVwZWF0XCIsXCJyZXBlYXRUeXBlXCIsXCJyZXBlYXREZWxheVwiLFwib25QbGF5XCIsXCJvblN0b3BcIixcIm9uQ29tcGxldGVcIixcIm9uUmVwZWF0XCIsXCJvblVwZGF0ZVwiXSksUz1FLnRvLGo9MCxNPUUuZHVyYXRpb24saz0hMSxSPSEwLFA9ZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlLnRvKSlyZXR1cm4gb2U7aWYoYWVbZS50eXBlXSlyZXR1cm4gYWVbZS50eXBlXTt2YXIgdD1uZXcgU2V0KE9iamVjdC5rZXlzKGUpKTtyZXR1cm4gdC5oYXMoXCJlYXNlXCIpfHx0LmhhcyhcImR1cmF0aW9uXCIpJiYhdC5oYXMoXCJkYW1waW5nUmF0aW9cIik/b2U6dC5oYXMoXCJkYW1waW5nUmF0aW9cIil8fHQuaGFzKFwic3RpZmZuZXNzXCIpfHx0LmhhcyhcIm1hc3NcIil8fHQuaGFzKFwiZGFtcGluZ1wiKXx8dC5oYXMoXCJyZXN0U3BlZWRcIil8fHQuaGFzKFwicmVzdERlbHRhXCIpP3k6b2V9KEUpOyhudWxsPT09KG49KHQ9UCkubmVlZHNJbnRlcnBvbGF0aW9uKXx8dm9pZCAwPT09bj92b2lkIDA6bi5jYWxsKHQsbCxTKSkmJihhPVYoWzAsMTAwXSxbbCxTXSx7Y2xhbXA6ITF9KSxsPTAsUz0xMDApO3ZhciBJPVAoci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LEUpLHtmcm9tOmwsdG86U30pKTtyZXR1cm4gYyYmKG51bGw9PWJ8fGIoKSwobz1mKChmdW5jdGlvbihlKXtpZihSfHwoZT0tZSkscCs9ZSwhayl7dmFyIHQ9SS5uZXh0KE1hdGgubWF4KDAscCkpO2k9dC52YWx1ZSxhJiYoaT1hKGkpKSxrPVI/dC5kb25lOnA8PTB9bnVsbD09THx8TChpKSxrJiYoMD09PWomJihudWxsIT1NfHwoTT1wKSksajxnP2Z1bmN0aW9uKGUsdCxuLHIpe3JldHVybiByP2U+PXQrbjplPD0tbn0ocCxNLHcsUikmJihqKyssXCJyZXZlcnNlXCI9PT1tP3A9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHZvaWQgMD09PW4mJihuPTApLHZvaWQgMD09PXImJihyPSEwKSxyP2xlKHQrLWUsdCxuKTp0LShlLXQpK259KHAsTSx3LFI9aiUyPT0wKToocD1sZShwLE0sdyksXCJtaXJyb3JcIj09PW0mJkkuZmxpcFRhcmdldCgpKSxrPSExLE8mJk8oKSk6KG8uc3RvcCgpLF8mJl8oKSkpfSkpKS5zdGFydCgpKSx7c3RvcDpmdW5jdGlvbigpe251bGw9PXh8fHgoKSxvLnN0b3AoKX19fWZ1bmN0aW9uIHVlKGUsdCl7cmV0dXJuIHQ/ZSooMWUzL3QpOjB9dmFyIGZlPWZ1bmN0aW9uKGUpe3JldHVybiAxODAqZS9NYXRoLlBJfSxkZT1mdW5jdGlvbihlKXtyZXR1cm4gZX0scGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPWRlKSxmdW5jdGlvbih0LG4scil7dmFyIG89bi1yLGk9LSgwLXQrMSkqKDAtZShNYXRoLmFicyhvKSkpO3JldHVybiBvPD0wP24raTpuLWl9fSxoZT1wZSgpLGdlPXBlKE1hdGguc3FydCksdmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUqTWF0aC5QSS8xODB9LG1lPWZ1bmN0aW9uKGUpe3JldHVybiBlLmhhc093blByb3BlcnR5KFwieFwiKSYmZS5oYXNPd25Qcm9wZXJ0eShcInlcIil9LENlPWZ1bmN0aW9uKGUpe3JldHVybiBtZShlKSYmZS5oYXNPd25Qcm9wZXJ0eShcInpcIil9LHllPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1hdGguYWJzKGUtdCl9LHdlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PTIpLHQ9TWF0aC5wb3coMTAsdCksTWF0aC5yb3VuZChlKnQpL3R9LGJlPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB2b2lkIDA9PT1yJiYocj0wKSx3ZShlK24qKHQtZSkvTWF0aC5tYXgocixuKSl9LHhlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIDEtMyp0KzMqZX0sX2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMyp0LTYqZX0sT2U9ZnVuY3Rpb24oZSl7cmV0dXJuIDMqZX0sTGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybigoeGUodCxuKSplK19lKHQsbikpKmUrT2UodCkpKmV9LEVlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gMyp4ZSh0LG4pKmUqZSsyKl9lKHQsbikqZStPZSh0KX0sU2U9LjE7dC5hbmdsZT1mdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD1qKSxmZShNYXRoLmF0YW4yKHQueS1lLnksdC54LWUueCkpfSx0LmFuaW1hdGU9Y2UsdC5hbnRpY2lwYXRlPWVlLHQuYXBwbHlPZmZzZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj0hMDtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9ZSxuPSExKSxmdW5jdGlvbihyKXtyZXR1cm4gbj9yLWUrdDooZT1yLG49ITAsdCl9fSx0LmF0dHJhY3Q9aGUsdC5hdHRyYWN0RXhwbz1nZSx0LmJhY2tJbj1YLHQuYmFja0luT3V0PVEsdC5iYWNrT3V0PUosdC5ib3VuY2VJbj1uZSx0LmJvdW5jZUluT3V0PWZ1bmN0aW9uKGUpe3JldHVybiBlPC41Py41KigxLXRlKDEtMiplKSk6LjUqdGUoMiplLTEpKy41fSx0LmJvdW5jZU91dD10ZSx0LmNpcmNJbj1xLHQuY2lyY0luT3V0PUssdC5jaXJjT3V0PVksdC5jbGFtcD1zLHQuY3JlYXRlQW50aWNpcGF0ZT1GLHQuY3JlYXRlQXR0cmFjdG9yPXBlLHQuY3JlYXRlQmFja0luPU4sdC5jcmVhdGVFeHBvSW49JCx0LmN1YmljQmV6aWVyPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKGU9PT10JiZuPT09cilyZXR1cm4gVTtmb3IodmFyIG89bmV3IEZsb2F0MzJBcnJheSgxMSksaT0wO2k8MTE7KytpKW9baV09TGUoaSpTZSxlLG4pO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gMD09PWl8fDE9PT1pP2k6TGUoZnVuY3Rpb24odCl7Zm9yKHZhciByPTAsaT0xOzEwIT09aSYmb1tpXTw9dDsrK2kpcis9U2U7LS1pO3ZhciBhPXIrKHQtb1tpXSkvKG9baSsxXS1vW2ldKSpTZSxsPUVlKGEsZSxuKTtyZXR1cm4gbD49LjAwMT9mdW5jdGlvbihlLHQsbixyKXtmb3IodmFyIG89MDtvPDg7KytvKXt2YXIgaT1FZSh0LG4scik7aWYoMD09PWkpcmV0dXJuIHQ7dC09KExlKHQsbixyKS1lKS9pfXJldHVybiB0fSh0LGEsZSxuKTowPT09bD9hOmZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIGksYSxsPTA7ZG97KGk9TGUoYT10KyhuLXQpLzIscixvKS1lKT4wP249YTp0PWF9d2hpbGUoTWF0aC5hYnMoaSk+MWUtNyYmKytsPDEwKTtyZXR1cm4gYX0odCxyLHIrU2UsZSxuKX0oaSksdCxyKX19LHQuZGVjYXk9aWUsdC5kZWdyZWVzVG9SYWRpYW5zPXZlLHQuZGlzdGFuY2U9ZnVuY3Rpb24oZSx0KXtpZihNKGUpJiZNKHQpKXJldHVybiB5ZShlLHQpO2lmKG1lKGUpJiZtZSh0KSl7dmFyIG49eWUoZS54LHQueCkscj15ZShlLnksdC55KSxvPUNlKGUpJiZDZSh0KT95ZShlLnosdC56KTowO3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3cobiwyKStNYXRoLnBvdyhyLDIpK01hdGgucG93KG8sMikpfX0sdC5lYXNlSW49Vyx0LmVhc2VJbk91dD1HLHQuZWFzZU91dD16LHQuaW5lcnRpYT1mdW5jdGlvbihlKXt2YXIgdCxuPWUuZnJvbSxvPXZvaWQgMD09PW4/MDpuLGk9ZS52ZWxvY2l0eSxsPXZvaWQgMD09PWk/MDppLHM9ZS5taW4sYz1lLm1heCx1PWUucG93ZXIsZj12b2lkIDA9PT11Py44OnUsZD1lLnRpbWVDb25zdGFudCxwPXZvaWQgMD09PWQ/NzUwOmQsaD1lLmJvdW5jZVN0aWZmbmVzcyxnPXZvaWQgMD09PWg/NTAwOmgsdj1lLmJvdW5jZURhbXBpbmcsbT12b2lkIDA9PT12PzEwOnYsQz1lLnJlc3REZWx0YSx5PXZvaWQgMD09PUM/MTpDLHc9ZS5tb2RpZnlUYXJnZXQsYj1lLmRyaXZlcix4PWUub25VcGRhdGUsXz1lLm9uQ29tcGxldGU7ZnVuY3Rpb24gTyhlKXtyZXR1cm4gdm9pZCAwIT09cyYmZTxzfHx2b2lkIDAhPT1jJiZlPmN9ZnVuY3Rpb24gTChlKXtyZXR1cm4gdm9pZCAwPT09cz9jOnZvaWQgMD09PWN8fE1hdGguYWJzKHMtZSk8TWF0aC5hYnMoYy1lKT9zOmN9ZnVuY3Rpb24gRShlKXtudWxsPT10fHx0LnN0b3AoKSx0PWNlKHIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxlKSx7ZHJpdmVyOmIsb25VcGRhdGU6ZnVuY3Rpb24odCl7dmFyIG47bnVsbD09eHx8eCh0KSxudWxsPT09KG49ZS5vblVwZGF0ZSl8fHZvaWQgMD09PW58fG4uY2FsbChlLHQpfSxvbkNvbXBsZXRlOl99KSl9ZnVuY3Rpb24gUyhlKXtFKHIuX19hc3NpZ24oe3R5cGU6XCJzcHJpbmdcIixzdGlmZm5lc3M6ZyxkYW1waW5nOm0scmVzdERlbHRhOnl9LGUpKX1pZihPKG8pKVMoe2Zyb206byx2ZWxvY2l0eTpsLHRvOkwobyl9KTtlbHNle3ZhciBqPWYqbCtvO3ZvaWQgMCE9PXcmJihqPXcoaikpO3ZhciBNLGssUj1MKGopLFA9Uj09PXM/LTE6MTtFKHt0eXBlOlwiZGVjYXlcIixmcm9tOm8sdmVsb2NpdHk6bCx0aW1lQ29uc3RhbnQ6cCxwb3dlcjpmLHJlc3REZWx0YTp5LG1vZGlmeVRhcmdldDp3LG9uVXBkYXRlOk8oaik/ZnVuY3Rpb24oZSl7TT1rLGs9ZSxsPXVlKGUtTSxhLmdldEZyYW1lRGF0YSgpLmRlbHRhKSwoMT09PVAmJmU+Unx8LTE9PT1QJiZlPFIpJiZTKHtmcm9tOmUsdG86Uix2ZWxvY2l0eTpsfSl9OnZvaWQgMH0pfXJldHVybntzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PXQ/dm9pZCAwOnQuc3RvcCgpfX19LHQuaW50ZXJwb2xhdGU9Vix0LmlzUG9pbnQ9bWUsdC5pc1BvaW50M0Q9Q2UsdC5rZXlmcmFtZXM9b2UsdC5saW5lYXI9VSx0Lm1pcnJvckVhc2luZz1aLHQubWl4PXgsdC5taXhDb2xvcj1TLHQubWl4Q29tcGxleD1ILHQucGlwZT1SLHQucG9pbnRGcm9tVmVjdG9yPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD12ZSh0KSx7eDpuKk1hdGguY29zKHQpK2UueCx5Om4qTWF0aC5zaW4odCkrZS55fX0sdC5wcm9ncmVzcz1iLHQucmFkaWFuc1RvRGVncmVlcz1mZSx0LnJldmVyc2VFYXNpbmc9RCx0LnNtb290aD1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT01MCk7dmFyIHQ9MCxuPTA7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBvPWEuZ2V0RnJhbWVEYXRhKCkudGltZXN0YW1wLGk9byE9PW4/by1uOjAsbD1pP2JlKHQscixpLGUpOnQ7cmV0dXJuIG49byx0PWwsbH19LHQuc21vb3RoRnJhbWU9YmUsdC5zbmFwPWZ1bmN0aW9uKGUpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0L2UpKmV9O3ZhciB0PTAsbj1lLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG89TWF0aC5hYnMoZVswXS1yKTtmb3IodD0xO3Q8bjt0Kyspe3ZhciBpPWVbdF0sYT1NYXRoLmFicyhpLXIpO2lmKDA9PT1hKXJldHVybiBpO2lmKGE+bylyZXR1cm4gZVt0LTFdO2lmKHQ9PT1uLTEpcmV0dXJuIGk7bz1hfX19LHQuc3ByaW5nPXksdC5zdGVwcz1mdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD1cImVuZFwiKSxmdW5jdGlvbihuKXt2YXIgcj0obj1cImVuZFwiPT09dD9NYXRoLm1pbihuLC45OTkpOk1hdGgubWF4KG4sLjAwMSkpKmUsbz1cImVuZFwiPT09dD9NYXRoLmZsb29yKHIpOk1hdGguY2VpbChyKTtyZXR1cm4gcygwLDEsby9lKX19LHQudG9EZWNpbWFsPXdlLHQudmVsb2NpdHlQZXJGcmFtZT1mdW5jdGlvbihlLHQpe3JldHVybiBlLygxZTMvdCl9LHQudmVsb2NpdHlQZXJTZWNvbmQ9dWUsdC53cmFwPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10LWU7cmV0dXJuKChuLWUpJXIrciklcitlfX0sMjcwMzooZSx0LG4pPT57dmFyIHI9big0MTQpO2Z1bmN0aW9uIG8oKXt9ZnVuY3Rpb24gaSgpe31pLnJlc2V0V2FybmluZ0NhY2hlPW8sZS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbixvLGksYSl7aWYoYSE9PXIpe3ZhciBsPW5ldyBFcnJvcihcIkNhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuIFVzZSBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKSB0byBjYWxsIHRoZW0uIFJlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXNcIik7dGhyb3cgbC5uYW1lPVwiSW52YXJpYW50IFZpb2xhdGlvblwiLGx9fWZ1bmN0aW9uIHQoKXtyZXR1cm4gZX1lLmlzUmVxdWlyZWQ9ZTt2YXIgbj17YXJyYXk6ZSxiaWdpbnQ6ZSxib29sOmUsZnVuYzplLG51bWJlcjplLG9iamVjdDplLHN0cmluZzplLHN5bWJvbDplLGFueTplLGFycmF5T2Y6dCxlbGVtZW50OmUsZWxlbWVudFR5cGU6ZSxpbnN0YW5jZU9mOnQsbm9kZTplLG9iamVjdE9mOnQsb25lT2Y6dCxvbmVPZlR5cGU6dCxzaGFwZTp0LGV4YWN0OnQsY2hlY2tQcm9wVHlwZXM6aSxyZXNldFdhcm5pbmdDYWNoZTpvfTtyZXR1cm4gbi5Qcm9wVHlwZXM9bixufX0sNTY5NzooZSx0LG4pPT57ZS5leHBvcnRzPW4oMjcwMykoKX0sNDE0OmU9PntlLmV4cG9ydHM9XCJTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRFwifSw3MjkyOihlLHQsbik9PntuLnIodCksbi5kKHQse0NhbGVuZGFyOigpPT5KbixDZW50dXJ5VmlldzooKT0+a3QsRGVjYWRlVmlldzooKT0+TnQsTW9udGhWaWV3OigpPT5TbixOYXZpZ2F0aW9uOigpPT5OZSxZZWFyVmlldzooKT0+dG4sZGVmYXVsdDooKT0+dHJ9KTt2YXIgcj1uKDY2ODkpLG89bi5uKHIpLGk9big1Njk3KSxhPW4ubihpKTtmdW5jdGlvbiBsKGUpe3ZhciB0LG4scj1cIlwiO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlfHxcIm51bWJlclwiPT10eXBlb2YgZSlyKz1lO2Vsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIGUpaWYoQXJyYXkuaXNBcnJheShlKSlmb3IodD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF0mJihuPWwoZVt0XSkpJiYociYmKHIrPVwiIFwiKSxyKz1uKTtlbHNlIGZvcih0IGluIGUpZVt0XSYmKHImJihyKz1cIiBcIikscis9dCk7cmV0dXJuIHJ9Y29uc3Qgcz1mdW5jdGlvbigpe2Zvcih2YXIgZSx0LG49MCxyPVwiXCI7bjxhcmd1bWVudHMubGVuZ3RoOykoZT1hcmd1bWVudHNbbisrXSkmJih0PWwoZSkpJiYociYmKHIrPVwiIFwiKSxyKz10KTtyZXR1cm4gcn07dmFyIGM9big3NzMpLHU9bi5uKGMpO2Z1bmN0aW9uIGYoZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfXZhciBkPXUoKSgoZnVuY3Rpb24oZSl7dmFyIHQsbj12b2lkIDA9PT1lP3t9OmUscj1uLnVzZUZhbGxiYWNrTG9jYWxlLG89dm9pZCAwPT09cnx8cixpPW4uZmFsbGJhY2tMb2NhbGUsYT12b2lkIDA9PT1pP1wiZW4tVVNcIjppLGw9W107aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyl7dmFyIHM9d2luZG93Lm5hdmlnYXRvcjtsPWwuY29uY2F0KHMubGFuZ3VhZ2VzLHMubGFuZ3VhZ2Uscy51c2VyTGFuZ3VhZ2Uscy5icm93c2VyTGFuZ3VhZ2Uscy5zeXN0ZW1MYW5ndWFnZSl9cmV0dXJuIG8mJmwucHVzaChhKSxmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXAoKGZ1bmN0aW9uKGUpe2lmKCFlfHwtMT09PWUuaW5kZXhPZihcIi1cIil8fGUudG9Mb3dlckNhc2UoKSE9PWUpcmV0dXJuIGU7dmFyIHQ9ZS5zcGxpdChcIi1cIik7cmV0dXJuIHRbMF0rXCItXCIrdFsxXS50b1VwcGVyQ2FzZSgpfSkpfSgodD1sKS5maWx0ZXIoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIGUmJnQuaW5kZXhPZihlKT09PW59KSkpfSksZikscD11KCkoKGZ1bmN0aW9uKGUpe3JldHVybiBkKGUpWzBdfHxudWxsfSksZik7Y29uc3QgaD1wO2Z1bmN0aW9uIGcoZSx0LG4pe3JldHVybiBmdW5jdGlvbihyLG8pe3ZvaWQgMD09PW8mJihvPW4pO3ZhciBpPWUocikrbztyZXR1cm4gdChpKX19ZnVuY3Rpb24gdihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBEYXRlKGUodCkuZ2V0VGltZSgpLTEpfX1mdW5jdGlvbiBtKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybltlKG4pLHQobildfX1mdW5jdGlvbiBDKGUpe2lmKGUgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBlLmdldEZ1bGxZZWFyKCk7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpcmV0dXJuIGU7dmFyIHQ9cGFyc2VJbnQoZSwxMCk7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUmJiFpc05hTih0KSlyZXR1cm4gdDt0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZ2V0IHllYXIgZnJvbSBkYXRlOiBcIi5jb25jYXQoZSxcIi5cIikpfWZ1bmN0aW9uIHkoZSl7aWYoZSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIGUuZ2V0TW9udGgoKTt0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZ2V0IG1vbnRoIGZyb20gZGF0ZTogXCIuY29uY2F0KGUsXCIuXCIpKX1mdW5jdGlvbiB3KGUpe2lmKGUgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBlLmdldERhdGUoKTt0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZ2V0IHllYXIgZnJvbSBkYXRlOiBcIi5jb25jYXQoZSxcIi5cIikpfWZ1bmN0aW9uIGIoZSl7dmFyIHQ9QyhlKSxuPXQrKDEtdCklMTAwLHI9bmV3IERhdGU7cmV0dXJuIHIuc2V0RnVsbFllYXIobiwwLDEpLHIuc2V0SG91cnMoMCwwLDAsMCkscn12YXIgeD1nKEMsYiwtMTAwKSxfPWcoQyxiLDEwMCksTz12KF8pLEw9ZyhDLE8sLTEwMCksRT0oZyhDLE8sMTAwKSxtKGIsTykpO2Z1bmN0aW9uIFMoZSl7dmFyIHQ9QyhlKSxuPXQrKDEtdCklMTAscj1uZXcgRGF0ZTtyZXR1cm4gci5zZXRGdWxsWWVhcihuLDAsMSksci5zZXRIb3VycygwLDAsMCwwKSxyfXZhciBqPWcoQyxTLC0xMCksTT1nKEMsUywxMCksaz12KE0pLFI9ZyhDLGssLTEwKSxQPShnKEMsaywxMCksbShTLGspKTtmdW5jdGlvbiBJKGUpe3ZhciB0PUMoZSksbj1uZXcgRGF0ZTtyZXR1cm4gbi5zZXRGdWxsWWVhcih0LDAsMSksbi5zZXRIb3VycygwLDAsMCwwKSxufXZhciBBPWcoQyxJLC0xKSxUPWcoQyxJLDEpLEg9dihUKSxCPWcoQyxILC0xKSxWPShnKEMsSCwxKSxtKEksSCkpO2Z1bmN0aW9uIEQoZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXt2b2lkIDA9PT1yJiYocj10KTt2YXIgbz1DKG4pLGk9eShuKStyLGE9bmV3IERhdGU7cmV0dXJuIGEuc2V0RnVsbFllYXIobyxpLDEpLGEuc2V0SG91cnMoMCwwLDAsMCksZShhKX19ZnVuY3Rpb24gWihlKXt2YXIgdD1DKGUpLG49eShlKSxyPW5ldyBEYXRlO3JldHVybiByLnNldEZ1bGxZZWFyKHQsbiwxKSxyLnNldEhvdXJzKDAsMCwwLDApLHJ9dmFyICQ9RChaLC0xKSxOPUQoWiwxKSxGPXYoTiksVT1EKEYsLTEpLFc9KEQoRiwxKSxtKFosRikpO2Z1bmN0aW9uIHooZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXt2b2lkIDA9PT1yJiYocj10KTt2YXIgbz1DKG4pLGk9eShuKSxhPXcobikrcixsPW5ldyBEYXRlO3JldHVybiBsLnNldEZ1bGxZZWFyKG8saSxhKSxsLnNldEhvdXJzKDAsMCwwLDApLGUobCl9fWZ1bmN0aW9uIEcoZSl7dmFyIHQ9QyhlKSxuPXkoZSkscj13KGUpLG89bmV3IERhdGU7cmV0dXJuIG8uc2V0RnVsbFllYXIodCxuLHIpLG8uc2V0SG91cnMoMCwwLDAsMCksb316KEcsLTEpO3ZhciBxLFk9dih6KEcsMSkpLEs9KHooWSwtMSkseihZLDEpLG0oRyxZKSk7ZnVuY3Rpb24gWChlKXtyZXR1cm4gdyhGKGUpKX1mdW5jdGlvbiBKKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciBuPTAscj1uZXcgQXJyYXkodCk7bjx0O24rKylyW25dPWVbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gUShlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9dmFyIGVlLHRlPXtBUkFCSUM6XCJBcmFiaWNcIixIRUJSRVc6XCJIZWJyZXdcIixJU09fODYwMTpcIklTTyA4NjAxXCIsVVM6XCJVU1wifSxuZT0oUShxPXt9LHRlLlVTLFtcImVuLUNBXCIsXCJlbi1VU1wiLFwiZXMtQVJcIixcImVzLUJPXCIsXCJlcy1DTFwiLFwiZXMtQ09cIixcImVzLUNSXCIsXCJlcy1ET1wiLFwiZXMtRUNcIixcImVzLUdUXCIsXCJlcy1ITlwiLFwiZXMtTVhcIixcImVzLU5JXCIsXCJlcy1QQVwiLFwiZXMtUEVcIixcImVzLVBSXCIsXCJlcy1TVlwiLFwiZXMtVkVcIixcInB0LUJSXCJdKSxRKHEsdGUuQVJBQklDLFtcImFyXCIsXCJhci1BRVwiLFwiYXItQkhcIixcImFyLURaXCIsXCJhci1FR1wiLFwiYXItSVFcIixcImFyLUpPXCIsXCJhci1LV1wiLFwiYXItTFlcIixcImFyLU9NXCIsXCJhci1RQVwiLFwiYXItU0FcIixcImFyLVNEXCIsXCJhci1TWVwiLFwiYXItWUVcIixcImR2XCIsXCJkdi1NVlwiLFwicHNcIixcInBzLUFSXCJdKSxRKHEsdGUuSEVCUkVXLFtcImhlXCIsXCJoZS1JTFwiXSkscSkscmU9KGVlPUFycmF5KDcpLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIEooZSl9KGVlKXx8ZnVuY3Rpb24oZSl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lW1wiQEBpdGVyYXRvclwiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oZWUpfHxmdW5jdGlvbihlLHQpe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBKKGUsdCk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVyblwiT2JqZWN0XCI9PT1uJiZlLmNvbnN0cnVjdG9yJiYobj1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT1ufHxcIlNldFwiPT09bj9BcnJheS5mcm9tKGUpOlwiQXJndW1lbnRzXCI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT9KKGUsdCk6dm9pZCAwfX0oZWUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpKS5tYXAoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR9KSksb2U9bmV3IE1hcDtmdW5jdGlvbiBpZShlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dmFyIHI9dHx8aCgpO29lLmhhcyhyKXx8b2Uuc2V0KHIsbmV3IE1hcCk7dmFyIG89b2UuZ2V0KHIpO3JldHVybiBvLmhhcyhlKXx8by5zZXQoZSxuZXcgSW50bC5EYXRlVGltZUZvcm1hdChyLGUpLmZvcm1hdCksby5nZXQoZSkobil9fShlKSh0LGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBEYXRlKGUpO3JldHVybiBuZXcgRGF0ZSh0LnNldEhvdXJzKDEyKSl9KG4pKX19aWUoe2RheTpcIm51bWVyaWNcIixtb250aDpcIm51bWVyaWNcIix5ZWFyOlwibnVtZXJpY1wifSk7dmFyIGFlPWllKHtkYXk6XCJudW1lcmljXCJ9KSxsZT1pZSh7ZGF5OlwibnVtZXJpY1wiLG1vbnRoOlwibG9uZ1wiLHllYXI6XCJudW1lcmljXCJ9KSxzZT1pZSh7bW9udGg6XCJsb25nXCJ9KSxjZT1pZSh7bW9udGg6XCJsb25nXCIseWVhcjpcIm51bWVyaWNcIn0pLHVlPWllKHt3ZWVrZGF5Olwic2hvcnRcIn0pLGZlPWllKHt3ZWVrZGF5OlwibG9uZ1wifSksZGU9aWUoe3llYXI6XCJudW1lcmljXCJ9KSxwZT1yZVswXSxoZT1yZVs1XSxnZT1yZVs2XTtmdW5jdGlvbiB2ZShlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGUuSVNPXzg2MDEsbj1lLmdldERheSgpO3N3aXRjaCh0KXtjYXNlIHRlLklTT184NjAxOnJldHVybihuKzYpJTc7Y2FzZSB0ZS5BUkFCSUM6cmV0dXJuKG4rMSklNztjYXNlIHRlLkhFQlJFVzpjYXNlIHRlLlVTOnJldHVybiBuO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgY2FsZW5kYXIgdHlwZS5cIil9fWZ1bmN0aW9uIG1lKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0ZS5JU09fODYwMSxuPUMoZSkscj15KGUpLG89ZS5nZXREYXRlKCktdmUoZSx0KTtyZXR1cm4gbmV3IERhdGUobixyLG8pfWZ1bmN0aW9uIENlKGUsdCl7c3dpdGNoKGUpe2Nhc2VcImNlbnR1cnlcIjpyZXR1cm4gYih0KTtjYXNlXCJkZWNhZGVcIjpyZXR1cm4gUyh0KTtjYXNlXCJ5ZWFyXCI6cmV0dXJuIEkodCk7Y2FzZVwibW9udGhcIjpyZXR1cm4gWih0KTtjYXNlXCJkYXlcIjpyZXR1cm4gRyh0KTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmFuZ2VUeXBlOiBcIi5jb25jYXQoZSkpfX1mdW5jdGlvbiB5ZShlLHQpe3N3aXRjaChlKXtjYXNlXCJjZW50dXJ5XCI6cmV0dXJuIF8odCk7Y2FzZVwiZGVjYWRlXCI6cmV0dXJuIE0odCk7Y2FzZVwieWVhclwiOnJldHVybiBUKHQpO2Nhc2VcIm1vbnRoXCI6cmV0dXJuIE4odCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHJhbmdlVHlwZTogXCIuY29uY2F0KGUpKX19dmFyIHdlPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2VcImRlY2FkZVwiOnJldHVybiBqKHQsLTEwMCk7Y2FzZVwieWVhclwiOnJldHVybiBBKHQsLTEwKTtjYXNlXCJtb250aFwiOnJldHVybiAkKHQsLTEyKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmFuZ2VUeXBlOiBcIi5jb25jYXQoZSkpfX0sYmU9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZVwiZGVjYWRlXCI6cmV0dXJuIE0odCwxMDApO2Nhc2VcInllYXJcIjpyZXR1cm4gVCh0LDEwKTtjYXNlXCJtb250aFwiOnJldHVybiBOKHQsMTIpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByYW5nZVR5cGU6IFwiLmNvbmNhdChlKSl9fTtmdW5jdGlvbiB4ZShlLHQpe3N3aXRjaChlKXtjYXNlXCJjZW50dXJ5XCI6cmV0dXJuIE8odCk7Y2FzZVwiZGVjYWRlXCI6cmV0dXJuIGsodCk7Y2FzZVwieWVhclwiOnJldHVybiBIKHQpO2Nhc2VcIm1vbnRoXCI6cmV0dXJuIEYodCk7Y2FzZVwiZGF5XCI6cmV0dXJuIFkodCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHJhbmdlVHlwZTogXCIuY29uY2F0KGUpKX19dmFyIF9lPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2VcImRlY2FkZVwiOnJldHVybiBSKHQsLTEwMCk7Y2FzZVwieWVhclwiOnJldHVybiBCKHQsLTEwKTtjYXNlXCJtb250aFwiOnJldHVybiBVKHQsLTEyKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmFuZ2VUeXBlOiBcIi5jb25jYXQoZSkpfX07ZnVuY3Rpb24gT2UoZSx0KXtzd2l0Y2goZSl7Y2FzZVwiY2VudHVyeVwiOnJldHVybiBFKHQpO2Nhc2VcImRlY2FkZVwiOnJldHVybiBQKHQpO2Nhc2VcInllYXJcIjpyZXR1cm4gVih0KTtjYXNlXCJtb250aFwiOnJldHVybiBXKHQpO2Nhc2VcImRheVwiOnJldHVybiBLKHQpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByYW5nZVR5cGU6IFwiLmNvbmNhdChlKSl9fWZ1bmN0aW9uIExlKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpkZTtyZXR1cm4oYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApLm1hcCgoZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKX0pKS5qb2luKFwiIOKAkyBcIil9ZnVuY3Rpb24gRWUoZSx0LG4pe3JldHVybiBMZShlLHQsUChuKSl9ZnVuY3Rpb24gU2UoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRlLklTT184NjAxLG49ZS5nZXREYXkoKTtzd2l0Y2godCl7Y2FzZSB0ZS5BUkFCSUM6Y2FzZSB0ZS5IRUJSRVc6cmV0dXJuIG49PT1oZXx8bj09PWdlO2Nhc2UgdGUuSVNPXzg2MDE6Y2FzZSB0ZS5VUzpyZXR1cm4gbj09PWdlfHxuPT09cGU7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBjYWxlbmRhciB0eXBlLlwiKX19ZnVuY3Rpb24gamUoZSl7cmV0dXJuIGplPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlP1wic3ltYm9sXCI6dHlwZW9mIGV9LGplKGUpfXZhciBNZT1PYmplY3QudmFsdWVzKHRlKSxrZT1bXCJjZW50dXJ5XCIsXCJkZWNhZGVcIixcInllYXJcIixcIm1vbnRoXCJdLFJlPWEoKS5vbmVPZihNZSksUGU9YSgpLm9uZU9mVHlwZShbYSgpLnN0cmluZyxhKCkuYXJyYXlPZihhKCkuc3RyaW5nKV0pLEllPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lW3RdO2lmKCFyKXJldHVybiBudWxsO2lmKCEociBpbnN0YW5jZW9mIERhdGUpKXJldHVybiBuZXcgRXJyb3IoXCJJbnZhbGlkIHByb3AgYFwiLmNvbmNhdCh0LFwiYCBvZiB0eXBlIGBcIikuY29uY2F0KGplKHIpLFwiYCBzdXBwbGllZCB0byBgXCIpLmNvbmNhdChuLFwiYCwgZXhwZWN0ZWQgaW5zdGFuY2Ugb2YgYERhdGVgLlwiKSk7dmFyIG89ZS5tYXhEYXRlO3JldHVybiBvJiZyPm8/bmV3IEVycm9yKFwiSW52YWxpZCBwcm9wIGBcIi5jb25jYXQodCxcImAgb2YgdHlwZSBgXCIpLmNvbmNhdChqZShyKSxcImAgc3VwcGxpZWQgdG8gYFwiKS5jb25jYXQobixcImAsIG1pbkRhdGUgY2Fubm90IGJlIGxhcmdlciB0aGFuIG1heERhdGUuXCIpKTpudWxsfSxBZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZVt0XTtpZighcilyZXR1cm4gbnVsbDtpZighKHIgaW5zdGFuY2VvZiBEYXRlKSlyZXR1cm4gbmV3IEVycm9yKFwiSW52YWxpZCBwcm9wIGBcIi5jb25jYXQodCxcImAgb2YgdHlwZSBgXCIpLmNvbmNhdChqZShyKSxcImAgc3VwcGxpZWQgdG8gYFwiKS5jb25jYXQobixcImAsIGV4cGVjdGVkIGluc3RhbmNlIG9mIGBEYXRlYC5cIikpO3ZhciBvPWUubWluRGF0ZTtyZXR1cm4gbyYmcjxvP25ldyBFcnJvcihcIkludmFsaWQgcHJvcCBgXCIuY29uY2F0KHQsXCJgIG9mIHR5cGUgYFwiKS5jb25jYXQoamUociksXCJgIHN1cHBsaWVkIHRvIGBcIikuY29uY2F0KG4sXCJgLCBtYXhEYXRlIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gbWluRGF0ZS5cIikpOm51bGx9LFRlPWEoKS5vbmVPZlR5cGUoW2EoKS5mdW5jLGEoKS5zaGFwZSh7Y3VycmVudDphKCkuYW55fSldKSxIZT1hKCkub25lT2ZUeXBlKFthKCkuaW5zdGFuY2VPZihEYXRlKSxhKCkuYXJyYXlPZihhKCkuaW5zdGFuY2VPZihEYXRlKSldKSxCZT1hKCkuYXJyYXlPZihhKCkub25lT2Yoa2UpKSxWZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZVt0XSxvPWUudmlld3N8fGtlO3JldHVybiB2b2lkIDAhPT1yJiYtMT09PW8uaW5kZXhPZihyKT9uZXcgRXJyb3IoXCJJbnZhbGlkIHByb3AgYFwiLmNvbmNhdCh0LFwiYCBvZiB2YWx1ZSBgXCIpLmNvbmNhdChyLFwiYCBzdXBwbGllZCB0byBgXCIpLmNvbmNhdChuLFwiYCwgZXhwZWN0ZWQgb25lIG9mIFtcIikuY29uY2F0KG8ubWFwKChmdW5jdGlvbihlKXtyZXR1cm4nXCInLmNvbmNhdChlLCdcIicpfSkpLmpvaW4oXCIsIFwiKSxcIl0uXCIpKTpudWxsfTtWZS5pc1JlcXVpcmVkPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lW3RdO3JldHVybiByP1ZlKGUsdCxuKTpuZXcgRXJyb3IoXCJUaGUgcHJvcCBgXCIuY29uY2F0KHQsXCJgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCBpbiBgXCIpLmNvbmNhdChuLFwiYCwgYnV0IGl0cyB2YWx1ZSBpcyBgXCIpLmNvbmNhdChyLFwiYC5cIikpfTt2YXIgRGU9e2FjdGl2ZVN0YXJ0RGF0ZTphKCkuaW5zdGFuY2VPZihEYXRlKS5pc1JlcXVpcmVkLGhvdmVyOmEoKS5pbnN0YW5jZU9mKERhdGUpLGxvY2FsZTphKCkuc3RyaW5nLG1heERhdGU6QWUsbWluRGF0ZTpJZSxvbkNsaWNrOmEoKS5mdW5jLG9uTW91c2VPdmVyOmEoKS5mdW5jLHRpbGVDbGFzc05hbWU6YSgpLm9uZU9mVHlwZShbYSgpLmZ1bmMsUGVdKSx0aWxlQ29udGVudDphKCkub25lT2ZUeXBlKFthKCkuZnVuYyxhKCkubm9kZV0pLHZhbHVlOkhlLHZhbHVlVHlwZTphKCkuc3RyaW5nfSxaZT17YWN0aXZlU3RhcnREYXRlOmEoKS5pbnN0YW5jZU9mKERhdGUpLmlzUmVxdWlyZWQsY2xhc3NlczphKCkuYXJyYXlPZihhKCkuc3RyaW5nKS5pc1JlcXVpcmVkLGRhdGU6YSgpLmluc3RhbmNlT2YoRGF0ZSkuaXNSZXF1aXJlZCxsb2NhbGU6YSgpLnN0cmluZyxtYXhEYXRlOkFlLG1pbkRhdGU6SWUsb25DbGljazphKCkuZnVuYyxvbk1vdXNlT3ZlcjphKCkuZnVuYyxzdHlsZTphKCkub2JqZWN0T2YoYSgpLm9uZU9mVHlwZShbYSgpLnN0cmluZyxhKCkubnVtYmVyXSkpLHRpbGVDbGFzc05hbWU6YSgpLm9uZU9mVHlwZShbYSgpLmZ1bmMsUGVdKSx0aWxlQ29udGVudDphKCkub25lT2ZUeXBlKFthKCkuZnVuYyxhKCkubm9kZV0pLHRpbGVEaXNhYmxlZDphKCkuZnVuY30sJGU9XCJyZWFjdC1jYWxlbmRhcl9fbmF2aWdhdGlvblwiO2Z1bmN0aW9uIE5lKGUpe3ZhciB0LG49ZS5hY3RpdmVTdGFydERhdGUscj1lLmRyaWxsVXAsaT1lLmZvcm1hdE1vbnRoWWVhcixhPXZvaWQgMD09PWk/Y2U6aSxsPWUuZm9ybWF0WWVhcixzPXZvaWQgMD09PWw/ZGU6bCxjPWUubG9jYWxlLHU9ZS5tYXhEYXRlLGY9ZS5taW5EYXRlLGQ9ZS5uYXZpZ2F0aW9uQXJpYUxhYmVsLGg9dm9pZCAwPT09ZD9cIlwiOmQsZz1lLm5hdmlnYXRpb25BcmlhTGl2ZSx2PWUubmF2aWdhdGlvbkxhYmVsLG09ZS5uZXh0MkFyaWFMYWJlbCxDPXZvaWQgMD09PW0/XCJcIjptLHk9ZS5uZXh0MkxhYmVsLHc9dm9pZCAwPT09eT9cIsK7XCI6eSxiPWUubmV4dEFyaWFMYWJlbCxfPXZvaWQgMD09PWI/XCJcIjpiLE89ZS5uZXh0TGFiZWwsUz12b2lkIDA9PT1PP1wi4oC6XCI6TyxNPWUucHJldjJBcmlhTGFiZWwsaz12b2lkIDA9PT1NP1wiXCI6TSxQPWUucHJldjJMYWJlbCxJPXZvaWQgMD09PVA/XCLCq1wiOlAsVD1lLnByZXZBcmlhTGFiZWwsSD12b2lkIDA9PT1UP1wiXCI6VCxWPWUucHJldkxhYmVsLEQ9dm9pZCAwPT09Vj9cIuKAuVwiOlYsWj1lLnNldEFjdGl2ZVN0YXJ0RGF0ZSxOPWUuc2hvd0RvdWJsZVZpZXcsRj1lLnZpZXcsVz1lLnZpZXdzLmluZGV4T2YoRik+MCx6PVwiY2VudHVyeVwiIT09RixHPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2VcImNlbnR1cnlcIjpyZXR1cm4geCh0KTtjYXNlXCJkZWNhZGVcIjpyZXR1cm4gaih0KTtjYXNlXCJ5ZWFyXCI6cmV0dXJuIEEodCk7Y2FzZVwibW9udGhcIjpyZXR1cm4gJCh0KTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmFuZ2VUeXBlOiBcIi5jb25jYXQoZSkpfX0oRixuKSxxPXomJndlKEYsbiksWT15ZShGLG4pLEs9eiYmYmUoRixuKSxYPWZ1bmN0aW9uKCl7aWYoRy5nZXRGdWxsWWVhcigpPDApcmV0dXJuITA7dmFyIGU9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZVwiY2VudHVyeVwiOnJldHVybiBMKHQpO2Nhc2VcImRlY2FkZVwiOnJldHVybiBSKHQpO2Nhc2VcInllYXJcIjpyZXR1cm4gQih0KTtjYXNlXCJtb250aFwiOnJldHVybiBVKHQpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByYW5nZVR5cGU6IFwiLmNvbmNhdChlKSl9fShGLG4pO3JldHVybiBmJiZmPj1lfSgpLEo9eiYmZnVuY3Rpb24oKXtpZihxLmdldEZ1bGxZZWFyKCk8MClyZXR1cm4hMDt2YXIgZT1fZShGLG4pO3JldHVybiBmJiZmPj1lfSgpLFE9dSYmdTxZLGVlPXomJnUmJnU8SztmdW5jdGlvbiB0ZShlKXt2YXIgdD1mdW5jdGlvbigpe3N3aXRjaChGKXtjYXNlXCJjZW50dXJ5XCI6cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gTGUoZSx0LEUobikpfShjLHMsZSk7Y2FzZVwiZGVjYWRlXCI6cmV0dXJuIEVlKGMscyxlKTtjYXNlXCJ5ZWFyXCI6cmV0dXJuIHMoYyxlKTtjYXNlXCJtb250aFwiOnJldHVybiBhKGMsZSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHZpZXc6IFwiLmNvbmNhdChGLFwiLlwiKSl9fSgpO3JldHVybiB2P3Yoe2RhdGU6ZSxsYWJlbDp0LGxvY2FsZTpjfHxwKCksdmlldzpGfSk6dH1yZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOiRlfSxudWxsIT09SSYmeiYmbygpLmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIix7XCJhcmlhLWxhYmVsXCI6ayxjbGFzc05hbWU6XCJcIi5jb25jYXQoJGUsXCJfX2Fycm93IFwiKS5jb25jYXQoJGUsXCJfX3ByZXYyLWJ1dHRvblwiKSxkaXNhYmxlZDpKLG9uQ2xpY2s6ZnVuY3Rpb24oKXtaKHEsXCJwcmV2MlwiKX0sdHlwZTpcImJ1dHRvblwifSxJKSxudWxsIT09RCYmbygpLmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIix7XCJhcmlhLWxhYmVsXCI6SCxjbGFzc05hbWU6XCJcIi5jb25jYXQoJGUsXCJfX2Fycm93IFwiKS5jb25jYXQoJGUsXCJfX3ByZXYtYnV0dG9uXCIpLGRpc2FibGVkOlgsb25DbGljazpmdW5jdGlvbigpe1ooRyxcInByZXZcIil9LHR5cGU6XCJidXR0b25cIn0sRCksKHQ9XCJcIi5jb25jYXQoJGUsXCJfX2xhYmVsXCIpLG8oKS5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIse1wiYXJpYS1sYWJlbFwiOmgsXCJhcmlhLWxpdmVcIjpnLGNsYXNzTmFtZTp0LGRpc2FibGVkOiFXLG9uQ2xpY2s6cixzdHlsZTp7ZmxleEdyb3c6MX0sdHlwZTpcImJ1dHRvblwifSxvKCkuY3JlYXRlRWxlbWVudChcInNwYW5cIix7Y2xhc3NOYW1lOlwiXCIuY29uY2F0KHQsXCJfX2xhYmVsVGV4dCBcIikuY29uY2F0KHQsXCJfX2xhYmVsVGV4dC0tZnJvbVwiKX0sdGUobikpLE4mJm8oKS5jcmVhdGVFbGVtZW50KG8oKS5GcmFnbWVudCxudWxsLG8oKS5jcmVhdGVFbGVtZW50KFwic3BhblwiLHtjbGFzc05hbWU6XCJcIi5jb25jYXQodCxcIl9fZGl2aWRlclwiKX0sXCIg4oCTIFwiKSxvKCkuY3JlYXRlRWxlbWVudChcInNwYW5cIix7Y2xhc3NOYW1lOlwiXCIuY29uY2F0KHQsXCJfX2xhYmVsVGV4dCBcIikuY29uY2F0KHQsXCJfX2xhYmVsVGV4dC0tdG9cIil9LHRlKFkpKSkpKSxudWxsIT09UyYmbygpLmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIix7XCJhcmlhLWxhYmVsXCI6XyxjbGFzc05hbWU6XCJcIi5jb25jYXQoJGUsXCJfX2Fycm93IFwiKS5jb25jYXQoJGUsXCJfX25leHQtYnV0dG9uXCIpLGRpc2FibGVkOlEsb25DbGljazpmdW5jdGlvbigpe1ooWSxcIm5leHRcIil9LHR5cGU6XCJidXR0b25cIn0sUyksbnVsbCE9PXcmJnomJm8oKS5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIse1wiYXJpYS1sYWJlbFwiOkMsY2xhc3NOYW1lOlwiXCIuY29uY2F0KCRlLFwiX19hcnJvdyBcIikuY29uY2F0KCRlLFwiX19uZXh0Mi1idXR0b25cIiksZGlzYWJsZWQ6ZWUsb25DbGljazpmdW5jdGlvbigpe1ooSyxcIm5leHQyXCIpfSx0eXBlOlwiYnV0dG9uXCJ9LHcpKX1OZS5wcm9wVHlwZXM9e2FjdGl2ZVN0YXJ0RGF0ZTphKCkuaW5zdGFuY2VPZihEYXRlKS5pc1JlcXVpcmVkLGRyaWxsVXA6YSgpLmZ1bmMuaXNSZXF1aXJlZCxmb3JtYXRNb250aFllYXI6YSgpLmZ1bmMsZm9ybWF0WWVhcjphKCkuZnVuYyxsb2NhbGU6YSgpLnN0cmluZyxtYXhEYXRlOmEoKS5pbnN0YW5jZU9mKERhdGUpLG1pbkRhdGU6YSgpLmluc3RhbmNlT2YoRGF0ZSksbmF2aWdhdGlvbkFyaWFMYWJlbDphKCkuc3RyaW5nLG5hdmlnYXRpb25BcmlhTGl2ZTphKCkuc3RyaW5nLG5hdmlnYXRpb25MYWJlbDphKCkuZnVuYyxuZXh0MkFyaWFMYWJlbDphKCkuc3RyaW5nLG5leHQyTGFiZWw6YSgpLm5vZGUsbmV4dEFyaWFMYWJlbDphKCkuc3RyaW5nLG5leHRMYWJlbDphKCkubm9kZSxwcmV2MkFyaWFMYWJlbDphKCkuc3RyaW5nLHByZXYyTGFiZWw6YSgpLm5vZGUscHJldkFyaWFMYWJlbDphKCkuc3RyaW5nLHByZXZMYWJlbDphKCkubm9kZSxzZXRBY3RpdmVTdGFydERhdGU6YSgpLmZ1bmMuaXNSZXF1aXJlZCxzaG93RG91YmxlVmlldzphKCkuYm9vbCx2aWV3OlZlLmlzUmVxdWlyZWQsdmlld3M6QmUuaXNSZXF1aXJlZH07dmFyIEZlPVtcImNoaWxkcmVuXCIsXCJjbGFzc05hbWVcIixcImRpcmVjdGlvblwiLFwiY291bnRcIixcIm9mZnNldFwiLFwic3R5bGVcIixcIndyYXBcIl07ZnVuY3Rpb24gVWUoKXtyZXR1cm4gVWU9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxVZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gV2UoZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIHplKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP1dlKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7R2UoZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOldlKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfWZ1bmN0aW9uIEdlKGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBxZShlKXtyZXR1cm5cIlwiLmNvbmNhdChlLFwiJVwiKX1mdW5jdGlvbiBZZShlKXt2YXIgdD1lLmNoaWxkcmVuLG49ZS5jbGFzc05hbWUscj1lLmRpcmVjdGlvbixpPWUuY291bnQsYT1lLm9mZnNldCxsPWUuc3R5bGUscz1lLndyYXAsYz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89e30saT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKW49aVtyXSx0LmluZGV4T2Yobik+PTB8fChvW25dPWVbbl0pO3JldHVybiBvfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKyluPWlbcl0sdC5pbmRleE9mKG4pPj0wfHxPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxuKSYmKG9bbl09ZVtuXSl9cmV0dXJuIG99KGUsRmUpO3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChcImRpdlwiLFVlKHtjbGFzc05hbWU6bixzdHlsZTp6ZSh7ZGlzcGxheTpcImZsZXhcIixmbGV4RGlyZWN0aW9uOnIsZmxleFdyYXA6cz9cIndyYXBcIjpcIm5vLXdyYXBcIn0sbCl9LGMpLG8oKS5DaGlsZHJlbi5tYXAodCwoZnVuY3Rpb24oZSx0KXtyZXR1cm4gbygpLmNsb25lRWxlbWVudChlLHplKHplKHt9LGUucHJvcHMpLHt9LHtzdHlsZTp7ZmxleEJhc2lzOnFlKDEwMC9pKSxmbGV4U2hyaW5rOjAsZmxleEdyb3c6MCxvdmVyZmxvdzpcImhpZGRlblwiLG1hcmdpbkxlZnQ6YSYmMD09PXQ/cWUoMTAwKmEvaSk6bnVsbH19KSl9KSkpfWZ1bmN0aW9uIEtlKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBYZShlKX0oZSl8fGZ1bmN0aW9uKGUpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVtcIkBAaXRlcmF0b3JcIl0pcmV0dXJuIEFycmF5LmZyb20oZSl9KGUpfHxmdW5jdGlvbihlLHQpe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBYZShlLHQpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm5cIk9iamVjdFwiPT09biYmZS5jb25zdHJ1Y3RvciYmKG49ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09bnx8XCJTZXRcIj09PW4/QXJyYXkuZnJvbShlKTpcIkFyZ3VtZW50c1wiPT09bnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qobik/WGUoZSx0KTp2b2lkIDB9fShlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX1mdW5jdGlvbiBYZShlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9bmV3IEFycmF5KHQpO248dDtuKyspcltuXT1lW25dO3JldHVybiByfWZ1bmN0aW9uIEplKGUsdCl7cmV0dXJuIHRbMF08PWUmJnRbMV0+PWV9ZnVuY3Rpb24gUWUoZSx0KXtyZXR1cm4gSmUoZVswXSx0KXx8SmUoZVsxXSx0KX1mdW5jdGlvbiBldChlLHQsbil7dmFyIHI9W107aWYoUWUodCxlKSl7ci5wdXNoKG4pO3ZhciBvPUplKGVbMF0sdCksaT1KZShlWzFdLHQpO28mJnIucHVzaChcIlwiLmNvbmNhdChuLFwiU3RhcnRcIikpLGkmJnIucHVzaChcIlwiLmNvbmNhdChuLFwiRW5kXCIpKSxvJiZpJiZyLnB1c2goXCJcIi5jb25jYXQobixcIkJvdGhFbmRzXCIpKX1yZXR1cm4gcn1mdW5jdGlvbiB0dCgpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSx0PWUudmFsdWUsbj1lLnZhbHVlVHlwZSxyPWUuZGF0ZSxvPWUuZGF0ZVR5cGUsaT1lLmhvdmVyLGE9XCJyZWFjdC1jYWxlbmRhcl9fdGlsZVwiLGw9W2FdO2lmKCFyKXJldHVybiBsO2lmKCFBcnJheS5pc0FycmF5KHIpJiYhbyl0aHJvdyBuZXcgRXJyb3IoXCJnZXRUaWxlQ2xhc3NlcygpOiBVbmFibGUgdG8gZ2V0IHRpbGUgYWN0aXZpdHkgY2xhc3NlcyBiZWNhdXNlIG9uZSBvciBtb3JlIHJlcXVpcmVkIGFyZ3VtZW50cyB3ZXJlIG5vdCBwYXNzZWQuXCIpO3ZhciBzPW5ldyBEYXRlLGM9QXJyYXkuaXNBcnJheShyKT9yOk9lKG8scik7aWYoSmUocyxjKSYmbC5wdXNoKFwiXCIuY29uY2F0KGEsXCItLW5vd1wiKSksIXQpcmV0dXJuIGw7aWYoIUFycmF5LmlzQXJyYXkodCkmJiFuKXRocm93IG5ldyBFcnJvcihcImdldFRpbGVDbGFzc2VzKCk6IFVuYWJsZSB0byBnZXQgdGlsZSBhY3Rpdml0eSBjbGFzc2VzIGJlY2F1c2Ugb25lIG9yIG1vcmUgcmVxdWlyZWQgYXJndW1lbnRzIHdlcmUgbm90IHBhc3NlZC5cIik7dmFyIHUsZixkPUFycmF5LmlzQXJyYXkodCk/dDpPZShuLHQpO2Y9YywodT1kKVswXTw9ZlswXSYmdVsxXT49ZlsxXT9sLnB1c2goXCJcIi5jb25jYXQoYSxcIi0tYWN0aXZlXCIpKTpRZShkLGMpJiZsLnB1c2goXCJcIi5jb25jYXQoYSxcIi0taGFzQWN0aXZlXCIpKTt2YXIgcD1ldChkLGMsXCJcIi5jb25jYXQoYSxcIi0tcmFuZ2VcIikpO2wucHVzaC5hcHBseShsLEtlKHApKTt2YXIgaD1bXS5jb25jYXQodCk7aWYoaSYmMT09PWgubGVuZ3RoKXt2YXIgZz1ldChpPmRbMF0/W2RbMF0saV06W2ksZFswXV0sYyxcIlwiLmNvbmNhdChhLFwiLS1ob3ZlclwiKSk7bC5wdXNoLmFwcGx5KGwsS2UoZykpfXJldHVybiBsfVllLnByb3BUeXBlcz17Y2hpbGRyZW46YSgpLm5vZGUsY2xhc3NOYW1lOmEoKS5zdHJpbmcsY291bnQ6YSgpLm51bWJlci5pc1JlcXVpcmVkLGRpcmVjdGlvbjphKCkuc3RyaW5nLG9mZnNldDphKCkubnVtYmVyLHN0eWxlOmEoKS5vYmplY3RPZihhKCkub25lT2ZUeXBlKFthKCkuc3RyaW5nLGEoKS5udW1iZXJdKSksd3JhcDphKCkuYm9vbH07dmFyIG50PVtcImNsYXNzTmFtZVwiLFwiY291bnRcIixcImRhdGVUcmFuc2Zvcm1cIixcImRhdGVUeXBlXCIsXCJlbmRcIixcImhvdmVyXCIsXCJvZmZzZXRcIixcInN0YXJ0XCIsXCJzdGVwXCIsXCJ0aWxlXCIsXCJ2YWx1ZVwiLFwidmFsdWVUeXBlXCJdO2Z1bmN0aW9uIHJ0KGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBvdChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9ydChPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe2l0KGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpydChPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX1mdW5jdGlvbiBpdChlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gYXQoKXtyZXR1cm4gYXQ9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxhdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gbHQoZSl7Zm9yKHZhciB0PWUuY2xhc3NOYW1lLG49ZS5jb3VudCxyPXZvaWQgMD09PW4/MzpuLGk9ZS5kYXRlVHJhbnNmb3JtLGE9ZS5kYXRlVHlwZSxsPWUuZW5kLHM9ZS5ob3ZlcixjPWUub2Zmc2V0LHU9ZS5zdGFydCxmPWUuc3RlcCxkPXZvaWQgMD09PWY/MTpmLHA9ZS50aWxlLGg9ZS52YWx1ZSxnPWUudmFsdWVUeXBlLHY9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LGk9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKyluPWlbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb30oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgaT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspbj1pW3JdLHQuaW5kZXhPZihuKT49MHx8T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsbikmJihvW25dPWVbbl0pfXJldHVybiBvfShlLG50KSxtPVtdLEM9dTtDPD1sO0MrPWQpe3ZhciB5PWkoQyk7bS5wdXNoKG8oKS5jcmVhdGVFbGVtZW50KHAsYXQoe2tleTp5LmdldFRpbWUoKSxjbGFzc2VzOnR0KHt2YWx1ZTpoLHZhbHVlVHlwZTpnLGRhdGU6eSxkYXRlVHlwZTphLGhvdmVyOnN9KSxkYXRlOnkscG9pbnQ6Q30sdikpKX1yZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQoWWUse2NsYXNzTmFtZTp0LGNvdW50OnIsb2Zmc2V0OmMsd3JhcDohMH0sbSl9ZnVuY3Rpb24gc3QoZSl7cmV0dXJuIHN0PVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlP1wic3ltYm9sXCI6dHlwZW9mIGV9LHN0KGUpfWZ1bmN0aW9uIGN0KGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiB1dChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9jdChPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe2d0KGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpjdChPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX1mdW5jdGlvbiBmdChlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19ZnVuY3Rpb24gZHQoZSx0KXtyZXR1cm4gZHQ9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxkdChlLHQpfWZ1bmN0aW9uIHB0KGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiBlfWZ1bmN0aW9uIGh0KGUpe3JldHVybiBodD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0saHQoZSl9ZnVuY3Rpb24gZ3QoZSx0LG4pe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIHZ0KGUsdCl7cmV0dXJuIGUmJiF0fHwhZSYmdHx8ZSYmdCYmZS5nZXRUaW1lKCkhPT10LmdldFRpbWUoKX1mdW5jdGlvbiBtdChlLHQpe3ZhciBuPWUuYWN0aXZlU3RhcnREYXRlLHI9ZS5kYXRlLG89ZS52aWV3O3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dCh7YWN0aXZlU3RhcnREYXRlOm4sZGF0ZTpyLHZpZXc6b30pOnR9bHQucHJvcFR5cGVzPW90KG90KHt9LERlKSx7fSx7YWN0aXZlU3RhcnREYXRlOmEoKS5pbnN0YW5jZU9mKERhdGUpLGNvdW50OmEoKS5udW1iZXIsZGF0ZVRyYW5zZm9ybTphKCkuZnVuYy5pc1JlcXVpcmVkLGRhdGVUeXBlOmEoKS5zdHJpbmcsb2Zmc2V0OmEoKS5udW1iZXIsc3RlcDphKCkubnVtYmVyLHRpbGU6YSgpLmZ1bmMuaXNSZXF1aXJlZH0pO3ZhciBDdD1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwicHJvdG90eXBlXCIse3dyaXRhYmxlOiExfSksdCYmZHQoZSx0KX0oYyxlKTt2YXIgdCxuLHIsaSxhLGw9KGk9YyxhPWZ1bmN0aW9uKCl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCksZnVuY3Rpb24oKXt2YXIgZSx0PWh0KGkpO2lmKGEpe3ZhciBuPWh0KHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QodCxhcmd1bWVudHMsbil9ZWxzZSBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJihcIm9iamVjdFwiPT09c3QodCl8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO3JldHVybiBwdChlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGMoKXt2YXIgZTshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfSh0aGlzLGMpO2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKW5bcl09YXJndW1lbnRzW3JdO3JldHVybiBndChwdChlPWwuY2FsbC5hcHBseShsLFt0aGlzXS5jb25jYXQobikpKSxcInN0YXRlXCIse30pLGV9cmV0dXJuIHQ9YyxyPVt7a2V5OlwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzXCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmFjdGl2ZVN0YXJ0RGF0ZSxyPWUudGlsZUNsYXNzTmFtZSxvPWUudGlsZUNvbnRlbnQsaT17fTtyZXR1cm4ociE9PXQudGlsZUNsYXNzTmFtZVByb3BzfHx2dChuLHQuYWN0aXZlU3RhcnREYXRlUHJvcHMpKSYmKGkudGlsZUNsYXNzTmFtZT1tdChlLHIpLGkudGlsZUNsYXNzTmFtZVByb3BzPXIpLChvIT09dC50aWxlQ29udGVudFByb3BzfHx2dChuLHQuYWN0aXZlU3RhcnREYXRlUHJvcHMpKSYmKGkudGlsZUNvbnRlbnQ9bXQoZSxvKSxpLnRpbGVDb250ZW50UHJvcHM9byksaS5hY3RpdmVTdGFydERhdGVQcm9wcz1uLGl9fV0sKG49W3trZXk6XCJyZW5kZXJcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmFjdGl2ZVN0YXJ0RGF0ZSxuPWUuY2hpbGRyZW4scj1lLmNsYXNzZXMsaT1lLmRhdGUsYT1lLmZvcm1hdEFiYnIsbD1lLmxvY2FsZSxjPWUubWF4RGF0ZSx1PWUubWF4RGF0ZVRyYW5zZm9ybSxmPWUubWluRGF0ZSxkPWUubWluRGF0ZVRyYW5zZm9ybSxwPWUub25DbGljayxoPWUub25Nb3VzZU92ZXIsZz1lLnN0eWxlLHY9ZS50aWxlRGlzYWJsZWQsbT1lLnZpZXcsQz10aGlzLnN0YXRlLHk9Qy50aWxlQ2xhc3NOYW1lLHc9Qy50aWxlQ29udGVudDtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIix7Y2xhc3NOYW1lOnMocix5KSxkaXNhYmxlZDpmJiZkKGYpPml8fGMmJnUoYyk8aXx8diYmdih7YWN0aXZlU3RhcnREYXRlOnQsZGF0ZTppLHZpZXc6bX0pLG9uQ2xpY2s6cCYmZnVuY3Rpb24oZSl7cmV0dXJuIHAoaSxlKX0sb25Gb2N1czpoJiZmdW5jdGlvbigpe3JldHVybiBoKGkpfSxvbk1vdXNlT3ZlcjpoJiZmdW5jdGlvbigpe3JldHVybiBoKGkpfSxzdHlsZTpnLHR5cGU6XCJidXR0b25cIn0sYT9vKCkuY3JlYXRlRWxlbWVudChcImFiYnJcIix7XCJhcmlhLWxhYmVsXCI6YShsLGkpfSxuKTpuLHcpfX1dKSYmZnQodC5wcm90b3R5cGUsbiksciYmZnQodCxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcInByb3RvdHlwZVwiLHt3cml0YWJsZTohMX0pLGN9KHIuQ29tcG9uZW50KTtDdC5wcm9wVHlwZXM9dXQodXQoe30sWmUpLHt9LHtjaGlsZHJlbjphKCkubm9kZS5pc1JlcXVpcmVkLGZvcm1hdEFiYnI6YSgpLmZ1bmMsbWF4RGF0ZVRyYW5zZm9ybTphKCkuZnVuYy5pc1JlcXVpcmVkLG1pbkRhdGVUcmFuc2Zvcm06YSgpLmZ1bmMuaXNSZXF1aXJlZH0pO3ZhciB5dD1bXCJjbGFzc2VzXCIsXCJmb3JtYXRZZWFyXCJdO2Z1bmN0aW9uIHd0KGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBidChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj93dChPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe3h0KGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTp3dChPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX1mdW5jdGlvbiB4dChlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gX3QoKXtyZXR1cm4gX3Q9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxfdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIE90PVwicmVhY3QtY2FsZW5kYXJfX2NlbnR1cnktdmlld19fZGVjYWRlc19fZGVjYWRlXCI7ZnVuY3Rpb24gTHQoZSl7dmFyIHQ9ZS5jbGFzc2VzLG49ZS5mb3JtYXRZZWFyLHI9dm9pZCAwPT09bj9kZTpuLGk9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LGk9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKyluPWlbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb30oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgaT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspbj1pW3JdLHQuaW5kZXhPZihuKT49MHx8T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsbikmJihvW25dPWVbbl0pfXJldHVybiBvfShlLHl0KSxhPWkuZGF0ZSxsPWkubG9jYWxlO3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChDdCxfdCh7fSxpLHtjbGFzc2VzOltdLmNvbmNhdCh0LE90KSxtYXhEYXRlVHJhbnNmb3JtOmssbWluRGF0ZVRyYW5zZm9ybTpTLHZpZXc6XCJjZW50dXJ5XCJ9KSxFZShsLHIsYSkpfWZ1bmN0aW9uIEV0KGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBTdChlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24ganQoKXtyZXR1cm4ganQ9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxqdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gTXQoZSl7dmFyIHQ9QyhiKGUuYWN0aXZlU3RhcnREYXRlKSksbj10Kzk5O3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChsdCxqdCh7fSxlLHtjbGFzc05hbWU6XCJyZWFjdC1jYWxlbmRhcl9fY2VudHVyeS12aWV3X19kZWNhZGVzXCIsZGF0ZVRyYW5zZm9ybTpTLGRhdGVUeXBlOlwiZGVjYWRlXCIsZW5kOm4sc3RhcnQ6dCxzdGVwOjEwLHRpbGU6THR9KSl9ZnVuY3Rpb24ga3QoZSl7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcInJlYWN0LWNhbGVuZGFyX19jZW50dXJ5LXZpZXdcIn0sbygpLmNyZWF0ZUVsZW1lbnQoTXQsZSkpfUx0LnByb3BUeXBlcz1idChidCh7fSxaZSkse30se2Zvcm1hdFllYXI6YSgpLmZ1bmN9KSxNdC5wcm9wVHlwZXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fTt0JTI/RXQoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXtTdChlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6RXQoT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSl9cmV0dXJuIGV9KHt9LERlKTt2YXIgUnQ9W1wiY2xhc3Nlc1wiLFwiZm9ybWF0WWVhclwiXTtmdW5jdGlvbiBQdChlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gSXQoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fTt0JTI/UHQoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXtBdChlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6UHQoT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSl9cmV0dXJuIGV9ZnVuY3Rpb24gQXQoZSx0LG4pe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIFR0KCl7cmV0dXJuIFR0PU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sVHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBIdD1cInJlYWN0LWNhbGVuZGFyX19kZWNhZGUtdmlld19feWVhcnNfX3llYXJcIjtmdW5jdGlvbiBCdChlKXt2YXIgdD1lLmNsYXNzZXMsbj1lLmZvcm1hdFllYXIscj12b2lkIDA9PT1uP2RlOm4saT1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89e30saT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKW49aVtyXSx0LmluZGV4T2Yobik+PTB8fChvW25dPWVbbl0pO3JldHVybiBvfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKyluPWlbcl0sdC5pbmRleE9mKG4pPj0wfHxPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxuKSYmKG9bbl09ZVtuXSl9cmV0dXJuIG99KGUsUnQpLGE9aS5kYXRlLGw9aS5sb2NhbGU7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KEN0LFR0KHt9LGkse2NsYXNzZXM6W10uY29uY2F0KHQsSHQpLG1heERhdGVUcmFuc2Zvcm06SCxtaW5EYXRlVHJhbnNmb3JtOkksdmlldzpcImRlY2FkZVwifSkscihsLGEpKX1mdW5jdGlvbiBWdChlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gRHQoZSx0LG4pe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIFp0KCl7cmV0dXJuIFp0PU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sWnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uICR0KGUpe3ZhciB0PUMoUyhlLmFjdGl2ZVN0YXJ0RGF0ZSkpLG49dCs5O3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChsdCxadCh7fSxlLHtjbGFzc05hbWU6XCJyZWFjdC1jYWxlbmRhcl9fZGVjYWRlLXZpZXdfX3llYXJzXCIsZGF0ZVRyYW5zZm9ybTpmdW5jdGlvbihlKXt2YXIgdD1uZXcgRGF0ZTtyZXR1cm4gdC5zZXRGdWxsWWVhcihlLDAsMSksdC5zZXRIb3VycygwLDAsMCwwKSx0fSxkYXRlVHlwZTpcInllYXJcIixlbmQ6bixzdGFydDp0LHRpbGU6QnR9KSl9ZnVuY3Rpb24gTnQoZSl7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcInJlYWN0LWNhbGVuZGFyX19kZWNhZGUtdmlld1wifSxvKCkuY3JlYXRlRWxlbWVudCgkdCxlKSl9QnQucHJvcFR5cGVzPUl0KEl0KHt9LFplKSx7fSx7Zm9ybWF0WWVhcjphKCkuZnVuY30pLCR0LnByb3BUeXBlcz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9WdChPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe0R0KGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpWdChPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX0oe30sRGUpO3ZhciBGdD1bXCJjbGFzc2VzXCIsXCJmb3JtYXRNb250aFwiLFwiZm9ybWF0TW9udGhZZWFyXCJdO2Z1bmN0aW9uIFV0KGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBXdChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9VdChPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe3p0KGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpVdChPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX1mdW5jdGlvbiB6dChlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gR3QoKXtyZXR1cm4gR3Q9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxHdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIHF0PVwicmVhY3QtY2FsZW5kYXJfX3llYXItdmlld19fbW9udGhzX19tb250aFwiO2Z1bmN0aW9uIFl0KGUpe3ZhciB0PWUuY2xhc3NlcyxuPWUuZm9ybWF0TW9udGgscj12b2lkIDA9PT1uP3NlOm4saT1lLmZvcm1hdE1vbnRoWWVhcixhPXZvaWQgMD09PWk/Y2U6aSxsPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz17fSxpPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspbj1pW3JdLHQuaW5kZXhPZihuKT49MHx8KG9bbl09ZVtuXSk7cmV0dXJuIG99KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKW49aVtyXSx0LmluZGV4T2Yobik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYob1tuXT1lW25dKX1yZXR1cm4gb30oZSxGdCkscz1sLmRhdGUsYz1sLmxvY2FsZTtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQoQ3QsR3Qoe30sbCx7Y2xhc3NlczpbXS5jb25jYXQodCxxdCksZm9ybWF0QWJicjphLG1heERhdGVUcmFuc2Zvcm06RixtaW5EYXRlVHJhbnNmb3JtOlosdmlldzpcInllYXJcIn0pLHIoYyxzKSl9ZnVuY3Rpb24gS3QoZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIFh0KGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP0t0KE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7SnQoZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOkt0KE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfWZ1bmN0aW9uIEp0KGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBRdCgpe3JldHVybiBRdD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LFF0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBlbihlKXt2YXIgdD1DKGUuYWN0aXZlU3RhcnREYXRlKTtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQobHQsUXQoe30sZSx7Y2xhc3NOYW1lOlwicmVhY3QtY2FsZW5kYXJfX3llYXItdmlld19fbW9udGhzXCIsZGF0ZVRyYW5zZm9ybTpmdW5jdGlvbihlKXt2YXIgbj1uZXcgRGF0ZTtyZXR1cm4gbi5zZXRGdWxsWWVhcih0LGUsMSksbi5zZXRIb3VycygwLDAsMCwwKSxufSxkYXRlVHlwZTpcIm1vbnRoXCIsZW5kOjExLHN0YXJ0OjAsdGlsZTpZdH0pKX1mdW5jdGlvbiB0bihlKXtyZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVhY3QtY2FsZW5kYXJfX3llYXItdmlld1wifSxvKCkuY3JlYXRlRWxlbWVudChlbixlKSl9WXQucHJvcFR5cGVzPVd0KFd0KHt9LFplKSx7fSx7Zm9ybWF0TW9udGg6YSgpLmZ1bmMsZm9ybWF0TW9udGhZZWFyOmEoKS5mdW5jfSksZW4ucHJvcFR5cGVzPVh0KFh0KHt9LERlKSx7fSx7bG9jYWxlOmEoKS5zdHJpbmd9KTt2YXIgbm49W1wiZm9ybWF0RGF5XCIsXCJmb3JtYXRMb25nRGF0ZVwiLFwiY2FsZW5kYXJUeXBlXCIsXCJjbGFzc2VzXCIsXCJjdXJyZW50TW9udGhJbmRleFwiXTtmdW5jdGlvbiBybihlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fTt0JTI/cm4oT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXthbihlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6cm4oT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSl9cmV0dXJuIGV9ZnVuY3Rpb24gYW4oZSx0LG4pe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIGxuKCl7cmV0dXJuIGxuPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sbG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBzbj1cInJlYWN0LWNhbGVuZGFyX19tb250aC12aWV3X19kYXlzX19kYXlcIjtmdW5jdGlvbiBjbihlKXt2YXIgdD1lLmZvcm1hdERheSxuPXZvaWQgMD09PXQ/YWU6dCxyPWUuZm9ybWF0TG9uZ0RhdGUsaT12b2lkIDA9PT1yP2xlOnIsYT1lLmNhbGVuZGFyVHlwZSxsPWUuY2xhc3NlcyxzPWUuY3VycmVudE1vbnRoSW5kZXgsYz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89e30saT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKW49aVtyXSx0LmluZGV4T2Yobik+PTB8fChvW25dPWVbbl0pO3JldHVybiBvfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKyluPWlbcl0sdC5pbmRleE9mKG4pPj0wfHxPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxuKSYmKG9bbl09ZVtuXSl9cmV0dXJuIG99KGUsbm4pLHU9Yy5kYXRlLGY9Yy5sb2NhbGU7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KEN0LGxuKHt9LGMse2NsYXNzZXM6W10uY29uY2F0KGwsc24sU2UodSxhKT9cIlwiLmNvbmNhdChzbixcIi0td2Vla2VuZFwiKTpudWxsLHUuZ2V0TW9udGgoKSE9PXM/XCJcIi5jb25jYXQoc24sXCItLW5laWdoYm9yaW5nTW9udGhcIik6bnVsbCksZm9ybWF0QWJicjppLG1heERhdGVUcmFuc2Zvcm06WSxtaW5EYXRlVHJhbnNmb3JtOkcsdmlldzpcIm1vbnRoXCJ9KSxuKGYsdSkpfWNuLnByb3BUeXBlcz1vbihvbih7fSxaZSkse30se2N1cnJlbnRNb250aEluZGV4OmEoKS5udW1iZXIuaXNSZXF1aXJlZCxmb3JtYXREYXk6YSgpLmZ1bmMsZm9ybWF0TG9uZ0RhdGU6YSgpLmZ1bmN9KTt2YXIgdW49W1wic2hvd0ZpeGVkTnVtYmVyT2ZXZWVrc1wiLFwic2hvd05laWdoYm9yaW5nTW9udGhcIl07ZnVuY3Rpb24gZm4oZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIGRuKGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBwbigpe3JldHVybiBwbj1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LHBuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBobihlKXt2YXIgdD1lLmFjdGl2ZVN0YXJ0RGF0ZSxuPWUuY2FsZW5kYXJUeXBlLHI9ZS5zaG93Rml4ZWROdW1iZXJPZldlZWtzLGk9ZS5zaG93TmVpZ2hib3JpbmdNb250aCxhPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz17fSxpPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspbj1pW3JdLHQuaW5kZXhPZihuKT49MHx8KG9bbl09ZVtuXSk7cmV0dXJuIG99KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKW49aVtyXSx0LmluZGV4T2Yobik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYob1tuXT1lW25dKX1yZXR1cm4gb30oZSx1biksbD1DKHQpLHM9eSh0KSxjPXJ8fGksdT12ZSh0LG4pLGY9Yz8wOnUsZD0xKyhjPy11OjApLHA9ZnVuY3Rpb24oKXtpZihyKXJldHVybiBkKzQyLTE7dmFyIGU9WCh0KTtpZihpKXt2YXIgbz1uZXcgRGF0ZTtyZXR1cm4gby5zZXRGdWxsWWVhcihsLHMsZSksby5zZXRIb3VycygwLDAsMCwwKSxlKyg3LXZlKG8sbiktMSl9cmV0dXJuIGV9KCk7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KGx0LHBuKHt9LGEse2NsYXNzTmFtZTpcInJlYWN0LWNhbGVuZGFyX19tb250aC12aWV3X19kYXlzXCIsY291bnQ6NyxjdXJyZW50TW9udGhJbmRleDpzLGRhdGVUcmFuc2Zvcm06ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IERhdGU7cmV0dXJuIHQuc2V0RnVsbFllYXIobCxzLGUpLHQuc2V0SG91cnMoMCwwLDAsMCksdH0sZGF0ZVR5cGU6XCJkYXlcIixlbmQ6cCxvZmZzZXQ6ZixzdGFydDpkLHRpbGU6Y259KSl9aG4ucHJvcFR5cGVzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP2ZuKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZG4oZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOmZuKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfSh7Y2FsZW5kYXJUeXBlOlJlLmlzUmVxdWlyZWQsc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrczphKCkuYm9vbCxzaG93TmVpZ2hib3JpbmdNb250aDphKCkuYm9vbH0sRGUpO3ZhciBnbj1cInJlYWN0LWNhbGVuZGFyX19tb250aC12aWV3X193ZWVrZGF5c1wiLHZuPVwiXCIuY29uY2F0KGduLFwiX193ZWVrZGF5XCIpO2Z1bmN0aW9uIG1uKGUpe2Zvcih2YXIgdD1lLmNhbGVuZGFyVHlwZSxuPWUuZm9ybWF0U2hvcnRXZWVrZGF5LHI9dm9pZCAwPT09bj91ZTpuLGk9ZS5mb3JtYXRXZWVrZGF5LGE9dm9pZCAwPT09aT9mZTppLGw9ZS5sb2NhbGUsYz1lLm9uTW91c2VMZWF2ZSx1PVoobmV3IERhdGUpLGY9Qyh1KSxkPXkodSkscD1bXSxoPTE7aDw9NztoKz0xKXt2YXIgZz1uZXcgRGF0ZShmLGQsaC12ZSh1LHQpKSx2PWEobCxnKTtwLnB1c2gobygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7a2V5OmgsY2xhc3NOYW1lOnModm4sU2UoZyx0KSYmXCJcIi5jb25jYXQodm4sXCItLXdlZWtlbmRcIikpfSxvKCkuY3JlYXRlRWxlbWVudChcImFiYnJcIix7XCJhcmlhLWxhYmVsXCI6dix0aXRsZTp2fSxyKGwsZykucmVwbGFjZShcIi5cIixcIlwiKSkpKX1yZXR1cm4gbygpLmNyZWF0ZUVsZW1lbnQoWWUse2NsYXNzTmFtZTpnbixjb3VudDo3LG9uRm9jdXM6Yyxvbk1vdXNlT3ZlcjpjfSxwKX1tbi5wcm9wVHlwZXM9e2NhbGVuZGFyVHlwZTpSZS5pc1JlcXVpcmVkLGZvcm1hdFNob3J0V2Vla2RheTphKCkuZnVuYyxmb3JtYXRXZWVrZGF5OmEoKS5mdW5jLGxvY2FsZTphKCkuc3RyaW5nLG9uTW91c2VMZWF2ZTphKCkuZnVuY307dmFyIENuPVtcImRhdGVcIixcIm9uQ2xpY2tXZWVrTnVtYmVyXCIsXCJ3ZWVrTnVtYmVyXCJdO2Z1bmN0aW9uIHluKCl7cmV0dXJuIHluPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0seW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHduKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBibihlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9dmFyIHhuPVwicmVhY3QtY2FsZW5kYXJfX3RpbGVcIjtmdW5jdGlvbiBfbihlKXt2YXIgdD1lLmRhdGUsbj1lLm9uQ2xpY2tXZWVrTnVtYmVyLHI9ZS53ZWVrTnVtYmVyLGk9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LGk9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKyluPWlbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb30oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgaT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspbj1pW3JdLHQuaW5kZXhPZihuKT49MHx8T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsbikmJihvW25dPWVbbl0pfXJldHVybiBvfShlLENuKSxhPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP3duKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7Ym4oZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOnduKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfSh7Y2xhc3NOYW1lOnhufSxpKSxsPW8oKS5jcmVhdGVFbGVtZW50KFwic3BhblwiLG51bGwscik7cmV0dXJuIG4/bygpLmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIix5bih7fSxhLHtvbkNsaWNrOmZ1bmN0aW9uKGUpe3JldHVybiBuKHIsdCxlKX0sdHlwZTpcImJ1dHRvblwifSksbCk6bygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIixhLGwpfWZ1bmN0aW9uIE9uKGUpe3ZhciB0PWUuYWN0aXZlU3RhcnREYXRlLG49ZS5jYWxlbmRhclR5cGUscj1lLm9uQ2xpY2tXZWVrTnVtYmVyLGk9ZS5vbk1vdXNlTGVhdmUsYT1lLnNob3dGaXhlZE51bWJlck9mV2Vla3MsbD1mdW5jdGlvbigpe2lmKGEpcmV0dXJuIDY7dmFyIGU9WCh0KS0oNy12ZSh0LG4pKTtyZXR1cm4gMStNYXRoLmNlaWwoZS83KX0oKSxzPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPUModCkscj15KHQpLG89dyh0KSxpPVtdLGE9MDthPGw7YSs9MSlpLnB1c2gobWUobmV3IERhdGUoZSxyLG8rNyphKSxuKSk7cmV0dXJuIGl9KCksYz1zLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0LG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRlLklTT184NjAxLHI9bj09PXRlLlVTP3RlLlVTOnRlLklTT184NjAxLG89bWUoZSxuKSxpPUMoZSkrMTtkb3t0PW1lKG5ldyBEYXRlKGksMCxyPT09dGUuSVNPXzg2MDE/NDoxKSxuKSxpLT0xfXdoaWxlKGU8dCk7cmV0dXJuIE1hdGgucm91bmQoKG8tdCkvNjA0OGU1KSsxfShlLG4pfSkpO3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChZZSx7Y2xhc3NOYW1lOlwicmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdfX3dlZWtOdW1iZXJzXCIsY291bnQ6bCxkaXJlY3Rpb246XCJjb2x1bW5cIixvbkZvY3VzOmksb25Nb3VzZU92ZXI6aSxzdHlsZTp7ZmxleEJhc2lzOlwiY2FsYygxMDAlICogKDEgLyA4KVwiLGZsZXhTaHJpbms6MH19LGMubWFwKChmdW5jdGlvbihlLHQpe3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChfbix7a2V5OmUsZGF0ZTpzW3RdLG9uQ2xpY2tXZWVrTnVtYmVyOnIsd2Vla051bWJlcjplfSl9KSkpfV9uLnByb3BUeXBlcz17ZGF0ZTphKCkuaW5zdGFuY2VPZihEYXRlKS5pc1JlcXVpcmVkLG9uQ2xpY2tXZWVrTnVtYmVyOmEoKS5mdW5jLHdlZWtOdW1iZXI6YSgpLm5vZGUuaXNSZXF1aXJlZH0sT24ucHJvcFR5cGVzPXthY3RpdmVTdGFydERhdGU6YSgpLmluc3RhbmNlT2YoRGF0ZSkuaXNSZXF1aXJlZCxjYWxlbmRhclR5cGU6UmUuaXNSZXF1aXJlZCxvbkNsaWNrV2Vla051bWJlcjphKCkuZnVuYyxvbk1vdXNlTGVhdmU6YSgpLmZ1bmMsc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrczphKCkuYm9vbH07dmFyIExuPVtcImNhbGVuZGFyVHlwZVwiLFwiZm9ybWF0U2hvcnRXZWVrZGF5XCIsXCJmb3JtYXRXZWVrZGF5XCIsXCJvbkNsaWNrV2Vla051bWJlclwiLFwic2hvd1dlZWtOdW1iZXJzXCJdO2Z1bmN0aW9uIEVuKCl7cmV0dXJuIEVuPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sRW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFNuKGUpe3ZhciB0PWUuYWN0aXZlU3RhcnREYXRlLG49ZS5sb2NhbGUscj1lLm9uTW91c2VMZWF2ZSxpPWUuc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrcyxhPWUuY2FsZW5kYXJUeXBlLGw9dm9pZCAwPT09YT9mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmtleXMobmUpLmZpbmQoKGZ1bmN0aW9uKHQpe3JldHVybiBuZVt0XS5pbmNsdWRlcyhlKX0pKXx8dGUuSVNPXzg2MDF9KG4pOmEsYz1lLmZvcm1hdFNob3J0V2Vla2RheSx1PWUuZm9ybWF0V2Vla2RheSxmPWUub25DbGlja1dlZWtOdW1iZXIsZD1lLnNob3dXZWVrTnVtYmVycyxwPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz17fSxpPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspbj1pW3JdLHQuaW5kZXhPZihuKT49MHx8KG9bbl09ZVtuXSk7cmV0dXJuIG99KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKW49aVtyXSx0LmluZGV4T2Yobik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYob1tuXT1lW25dKX1yZXR1cm4gb30oZSxMbiksaD1cInJlYWN0LWNhbGVuZGFyX19tb250aC12aWV3XCI7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpzKGgsZD9cIlwiLmNvbmNhdChoLFwiLS13ZWVrTnVtYmVyc1wiKTpcIlwiKX0sbygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7c3R5bGU6e2Rpc3BsYXk6XCJmbGV4XCIsYWxpZ25JdGVtczpcImZsZXgtZW5kXCJ9fSxkP28oKS5jcmVhdGVFbGVtZW50KE9uLHthY3RpdmVTdGFydERhdGU6dCxjYWxlbmRhclR5cGU6bCxvbkNsaWNrV2Vla051bWJlcjpmLG9uTW91c2VMZWF2ZTpyLHNob3dGaXhlZE51bWJlck9mV2Vla3M6aX0pOm51bGwsbygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7c3R5bGU6e2ZsZXhHcm93OjEsd2lkdGg6XCIxMDAlXCJ9fSxvKCkuY3JlYXRlRWxlbWVudChtbix7Y2FsZW5kYXJUeXBlOmwsZm9ybWF0U2hvcnRXZWVrZGF5OmMsZm9ybWF0V2Vla2RheTp1LGxvY2FsZTpuLG9uTW91c2VMZWF2ZTpyfSksbygpLmNyZWF0ZUVsZW1lbnQoaG4sRW4oe2NhbGVuZGFyVHlwZTpsfSxwKSkpKSl9U24ucHJvcFR5cGVzPXthY3RpdmVTdGFydERhdGU6YSgpLmluc3RhbmNlT2YoRGF0ZSkuaXNSZXF1aXJlZCxjYWxlbmRhclR5cGU6UmUsZm9ybWF0U2hvcnRXZWVrZGF5OmEoKS5mdW5jLGZvcm1hdFdlZWtkYXk6YSgpLmZ1bmMsbG9jYWxlOmEoKS5zdHJpbmcsb25DbGlja1dlZWtOdW1iZXI6YSgpLmZ1bmMsb25Nb3VzZUxlYXZlOmEoKS5mdW5jLHNob3dGaXhlZE51bWJlck9mV2Vla3M6YSgpLmJvb2wsc2hvd1dlZWtOdW1iZXJzOmEoKS5ib29sfTt2YXIgam49W1wiYWN0aXZlU3RhcnREYXRlXCIsXCJkZWZhdWx0QWN0aXZlU3RhcnREYXRlXCIsXCJkZWZhdWx0VmFsdWVcIixcImRlZmF1bHRWaWV3XCIsXCJtYXhEZXRhaWxcIixcIm1pbkRldGFpbFwiLFwidmFsdWVcIixcInZpZXdcIl07ZnVuY3Rpb24gTW4oKXtyZXR1cm4gTW49T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxNbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24ga24oZSl7cmV0dXJuIGtuPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlP1wic3ltYm9sXCI6dHlwZW9mIGV9LGtuKGUpfWZ1bmN0aW9uIFJuKGUsdCl7cmV0dXJuIFJuPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sUm4oZSx0KX1mdW5jdGlvbiBQbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4gZX1mdW5jdGlvbiBJbihlKXtyZXR1cm4gSW49T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LEluKGUpfWZ1bmN0aW9uIEFuKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBUbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9BbihPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe0huKGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpBbihPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX1mdW5jdGlvbiBIbihlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gQm4oZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIG49MCxyPW5ldyBBcnJheSh0KTtuPHQ7bisrKXJbbl09ZVtuXTtyZXR1cm4gcn12YXIgVm49bmV3IERhdGU7Vm4uc2V0RnVsbFllYXIoMSwwLDEpLFZuLnNldEhvdXJzKDAsMCwwLDApO3ZhciBEbj1uZXcgRGF0ZSg4NjRlMTMpLFpuPVwicmVhY3QtY2FsZW5kYXJcIiwkbj1bXCJjZW50dXJ5XCIsXCJkZWNhZGVcIixcInllYXJcIixcIm1vbnRoXCJdLE5uPVtdLmNvbmNhdChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gQm4oZSl9KGUpfHxmdW5jdGlvbihlKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbXCJAQGl0ZXJhdG9yXCJdKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8ZnVuY3Rpb24oZSx0KXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gQm4oZSx0KTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuXCJPYmplY3RcIj09PW4mJmUuY29uc3RydWN0b3ImJihuPWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PW58fFwiU2V0XCI9PT1uP0FycmF5LmZyb20oZSk6XCJBcmd1bWVudHNcIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pP0JuKGUsdCk6dm9pZCAwfX0oZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9KCRuLnNsaWNlKDEpKSxbXCJkYXlcIl0pO2Z1bmN0aW9uIEZuKGUsdCl7cmV0dXJuICRuLnNsaWNlKCRuLmluZGV4T2YoZSksJG4uaW5kZXhPZih0KSsxKX1mdW5jdGlvbiBVbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4tMSE9PUZuKHQsbikuaW5kZXhPZihlKX0oZSx0LG4pP2U6bn1mdW5jdGlvbiBXbihlKXtyZXR1cm4gTm5bJG4uaW5kZXhPZihlKV19ZnVuY3Rpb24gem4oZSx0KXt2YXIgbj1lLnZhbHVlLHI9ZS5taW5EYXRlLG89ZS5tYXhEYXRlLGk9ZS5tYXhEZXRhaWwsYT1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiBudWxsO3ZhciBuPUFycmF5LmlzQXJyYXkoZSkmJjI9PT1lLmxlbmd0aD9lW3RdOmU7aWYoIW4pcmV0dXJuIG51bGw7dmFyIHI9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBEYXRlP2U6bmV3IERhdGUoZSl9KG4pO2lmKGlzTmFOKHIuZ2V0VGltZSgpKSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGRhdGU6IFwiLmNvbmNhdChlKSk7cmV0dXJuIHJ9KG4sdCk7aWYoIWEpcmV0dXJuIG51bGw7dmFyIGw9V24oaSk7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdCYmdD5lP3Q6biYmbjxlP246ZX0oW0NlLHhlXVt0XShsLGEpLHIsbyl9dmFyIEduPWZ1bmN0aW9uKGUpe3JldHVybiB6bihlLDApfSxxbj1mdW5jdGlvbihlKXtyZXR1cm4gem4oZSwxKX0sWW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS52YWx1ZTtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90OltHbixxbl0ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdChlKX0pKX07ZnVuY3Rpb24gS24oZSl7dmFyIHQ9ZS5tYXhEYXRlLG49ZS5tYXhEZXRhaWwscj1lLm1pbkRhdGUsbz1lLm1pbkRldGFpbCxpPWUudmFsdWU7cmV0dXJuIENlKFVuKGUudmlldyxvLG4pLEduKHt2YWx1ZTppLG1pbkRhdGU6cixtYXhEYXRlOnQsbWF4RGV0YWlsOm59KXx8bmV3IERhdGUpfXZhciBYbj1mdW5jdGlvbihlKXtyZXR1cm4gZSYmMT09PVtdLmNvbmNhdChlKS5sZW5ndGh9LEpuPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJwcm90b3R5cGVcIix7d3JpdGFibGU6ITF9KSx0JiZSbihlLHQpfShsLGUpO3ZhciB0LG4scixpLGE9KHI9bCxpPWZ1bmN0aW9uKCl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCksZnVuY3Rpb24oKXt2YXIgZSx0PUluKHIpO2lmKGkpe3ZhciBuPUluKHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QodCxhcmd1bWVudHMsbil9ZWxzZSBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJihcIm9iamVjdFwiPT09a24odCl8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO3JldHVybiBQbihlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGwoKXt2YXIgZTshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfSh0aGlzLGwpO2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKW5bcl09YXJndW1lbnRzW3JdO3JldHVybiBIbihQbihlPWEuY2FsbC5hcHBseShhLFt0aGlzXS5jb25jYXQobikpKSxcInN0YXRlXCIse2FjdGl2ZVN0YXJ0RGF0ZTplLnByb3BzLmRlZmF1bHRBY3RpdmVTdGFydERhdGUsdmFsdWU6ZS5wcm9wcy5kZWZhdWx0VmFsdWUsdmlldzplLnByb3BzLmRlZmF1bHRWaWV3fSksSG4oUG4oZSksXCJzZXRTdGF0ZUFuZENhbGxDYWxsYmFja3NcIiwoZnVuY3Rpb24odCxuLHIpe3ZhciBvPVBuKGUpLGk9by5hY3RpdmVTdGFydERhdGUsYT1vLnZpZXcsbD1lLnByb3BzLHM9bC5hbGxvd1BhcnRpYWxSYW5nZSxjPWwub25BY3RpdmVTdGFydERhdGVDaGFuZ2UsdT1sLm9uQ2hhbmdlLGY9bC5vblZpZXdDaGFuZ2UsZD1sLnNlbGVjdFJhbmdlLHA9e2FjdGl2ZVN0YXJ0RGF0ZTppLHZpZXc6YX07ZS5zZXRTdGF0ZSh0LChmdW5jdGlvbigpe3ZhciBvPXthY3Rpb246dC5hY3Rpb24sYWN0aXZlU3RhcnREYXRlOnQuYWN0aXZlU3RhcnREYXRlfHxlLmFjdGl2ZVN0YXJ0RGF0ZSx2YWx1ZTp0LnZhbHVlfHxlLnZhbHVlLHZpZXc6dC52aWV3fHxlLnZpZXd9O2Z1bmN0aW9uIGkoZSl7cmV0dXJuIGUgaW4gdCYmKGtuKHRbZV0pIT09a24ocFtlXSl8fCh0W2VdaW5zdGFuY2VvZiBEYXRlP3RbZV0uZ2V0VGltZSgpIT09cFtlXS5nZXRUaW1lKCk6dFtlXSE9PXBbZV0pKX1pKFwiYWN0aXZlU3RhcnREYXRlXCIpJiZjJiZjKG8pLGkoXCJ2aWV3XCIpJiZmJiZmKG8pLGkoXCJ2YWx1ZVwiKSYmdSYmKGQmJlhuKHQudmFsdWUpP3MmJnUoW3QudmFsdWVdLG4pOnUodC52YWx1ZSxuKSksciYmcihvKX0pKX0pKSxIbihQbihlKSxcInNldEFjdGl2ZVN0YXJ0RGF0ZVwiLChmdW5jdGlvbih0LG4pe2Uuc2V0U3RhdGVBbmRDYWxsQ2FsbGJhY2tzKHthY3Rpb246bixhY3RpdmVTdGFydERhdGU6dH0pfSkpLEhuKFBuKGUpLFwiZHJpbGxEb3duXCIsKGZ1bmN0aW9uKHQsbil7aWYoZS5kcmlsbERvd25BdmFpbGFibGUpe2Uub25DbGlja1RpbGUodCxuKTt2YXIgcj1QbihlKSxvPXIudmlldyxpPXIudmlld3MsYT1lLnByb3BzLm9uRHJpbGxEb3duLGw9aVtpLmluZGV4T2YobykrMV07ZS5zZXRTdGF0ZUFuZENhbGxDYWxsYmFja3Moe2FjdGlvbjpcImRyaWxsRG93blwiLGFjdGl2ZVN0YXJ0RGF0ZTp0LHZpZXc6bH0sdm9pZCAwLGEpfX0pKSxIbihQbihlKSxcImRyaWxsVXBcIiwoZnVuY3Rpb24oKXtpZihlLmRyaWxsVXBBdmFpbGFibGUpe3ZhciB0PVBuKGUpLG49dC5hY3RpdmVTdGFydERhdGUscj10LnZpZXcsbz10LnZpZXdzLGk9ZS5wcm9wcy5vbkRyaWxsVXAsYT1vW28uaW5kZXhPZihyKS0xXSxsPUNlKGEsbik7ZS5zZXRTdGF0ZUFuZENhbGxDYWxsYmFja3Moe2FjdGlvbjpcImRyaWxsVXBcIixhY3RpdmVTdGFydERhdGU6bCx2aWV3OmF9LHZvaWQgMCxpKX19KSksSG4oUG4oZSksXCJvbkNoYW5nZVwiLChmdW5jdGlvbih0LG4pe3ZhciByPVBuKGUpLnZhbHVlLG89ZS5wcm9wcyxpPW8uZ29Ub1JhbmdlU3RhcnRPblNlbGVjdCxhPW8uc2VsZWN0UmFuZ2U7ZS5vbkNsaWNrVGlsZSh0LG4pO3ZhciBsLHMsYyx1PWEmJiFYbihyKTtpZihhKXt2YXIgZj1QbihlKS52YWx1ZVR5cGU7bD11P0NlKGYsdCk6W0NlKHM9ZiwoYz1bcix0XS5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBlLXR9KSkpWzBdKSx4ZShzLGNbMV0pXX1lbHNlIGw9ZS5nZXRQcm9jZXNzZWRWYWx1ZSh0KTt2YXIgZD0hYXx8dXx8aT9LbihUbihUbih7fSxlLnByb3BzKSx7fSx7dmFsdWU6bH0pKTpudWxsO24ucGVyc2lzdCgpLGUuc2V0U3RhdGVBbmRDYWxsQ2FsbGJhY2tzKHthY3Rpb246XCJvbkNoYW5nZVwiLGFjdGl2ZVN0YXJ0RGF0ZTpkLHZhbHVlOmx9LG4pfSkpLEhuKFBuKGUpLFwib25DbGlja1RpbGVcIiwoZnVuY3Rpb24odCxuKXt2YXIgcj1QbihlKS52aWV3LG89ZS5wcm9wcyxpPW8ub25DbGlja0RheSxhPW8ub25DbGlja0RlY2FkZSxsPW8ub25DbGlja01vbnRoLHM9by5vbkNsaWNrWWVhcixjPWZ1bmN0aW9uKCl7c3dpdGNoKHIpe2Nhc2VcImNlbnR1cnlcIjpyZXR1cm4gYTtjYXNlXCJkZWNhZGVcIjpyZXR1cm4gcztjYXNlXCJ5ZWFyXCI6cmV0dXJuIGw7Y2FzZVwibW9udGhcIjpyZXR1cm4gaTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgdmlldzogXCIuY29uY2F0KHIsXCIuXCIpKX19KCk7YyYmYyh0LG4pfSkpLEhuKFBuKGUpLFwib25Nb3VzZU92ZXJcIiwoZnVuY3Rpb24odCl7ZS5zZXRTdGF0ZSgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaG92ZXImJmUuaG92ZXIuZ2V0VGltZSgpPT09dC5nZXRUaW1lKCk/bnVsbDp7aG92ZXI6dH19KSl9KSksSG4oUG4oZSksXCJvbk1vdXNlTGVhdmVcIiwoZnVuY3Rpb24oKXtlLnNldFN0YXRlKHtob3ZlcjpudWxsfSl9KSksZX1yZXR1cm4gdD1sLG49W3trZXk6XCJhY3RpdmVTdGFydERhdGVcIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZSx0LG4scixvLGksYSxsLHMsYyx1LGYsZD10aGlzLnByb3BzLmFjdGl2ZVN0YXJ0RGF0ZSxwPXRoaXMuc3RhdGUuYWN0aXZlU3RhcnREYXRlO3JldHVybiBkfHxwfHwodD0oZT10aGlzLnByb3BzKS5hY3RpdmVTdGFydERhdGUsbj1lLmRlZmF1bHRBY3RpdmVTdGFydERhdGUscj1lLmRlZmF1bHRWYWx1ZSxvPWUuZGVmYXVsdFZpZXcsaT1lLm1heERldGFpbCxhPWUubWluRGV0YWlsLGw9ZS52YWx1ZSxzPWUudmlldyxjPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuLHIsbz17fSxpPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspbj1pW3JdLHQuaW5kZXhPZihuKT49MHx8KG9bbl09ZVtuXSk7cmV0dXJuIG99KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKW49aVtyXSx0LmluZGV4T2Yobik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYob1tuXT1lW25dKX1yZXR1cm4gb30oZSxqbiksdT1VbihzLGEsaSksKGY9dHx8bik/Q2UodSxmKTpLbihUbih7bWF4RGV0YWlsOmksbWluRGV0YWlsOmEsdmFsdWU6bHx8cix2aWV3OnN8fG99LGMpKSl9fSx7a2V5OlwidmFsdWVcIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5zZWxlY3RSYW5nZSxuPWUudmFsdWUscj10aGlzLnN0YXRlLnZhbHVlO3JldHVybiB0JiZYbihyKT9yOnZvaWQgMCE9PW4/bjpyfX0se2tleTpcInZhbHVlVHlwZVwiLGdldDpmdW5jdGlvbigpe3JldHVybiBXbih0aGlzLnByb3BzLm1heERldGFpbCl9fSx7a2V5Olwidmlld1wiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLm1pbkRldGFpbCxuPWUubWF4RGV0YWlsLHI9ZS52aWV3LG89dGhpcy5zdGF0ZS52aWV3O3JldHVybiBVbihyfHxvLHQsbil9fSx7a2V5Olwidmlld3NcIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzO3JldHVybiBGbihlLm1pbkRldGFpbCxlLm1heERldGFpbCl9fSx7a2V5OlwiaG92ZXJcIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLnNlbGVjdFJhbmdlLHQ9dGhpcy5zdGF0ZS5ob3ZlcjtyZXR1cm4gZT90Om51bGx9fSx7a2V5OlwiZHJpbGxEb3duQXZhaWxhYmxlXCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy52aWV3LHQ9dGhpcy52aWV3cztyZXR1cm4gdC5pbmRleE9mKGUpPHQubGVuZ3RoLTF9fSx7a2V5OlwiZHJpbGxVcEF2YWlsYWJsZVwiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMudmlldztyZXR1cm4gdGhpcy52aWV3cy5pbmRleE9mKGUpPjB9fSx7a2V5OlwiZ2V0UHJvY2Vzc2VkVmFsdWVcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnByb3BzLG49dC5taW5EYXRlLHI9dC5tYXhEYXRlLG89dC5tYXhEZXRhaWwsaT10LnJldHVyblZhbHVlO3JldHVybiBmdW5jdGlvbigpe3N3aXRjaChpKXtjYXNlXCJzdGFydFwiOnJldHVybiBHbjtjYXNlXCJlbmRcIjpyZXR1cm4gcW47Y2FzZVwicmFuZ2VcIjpyZXR1cm4gWW47ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHJldHVyblZhbHVlLlwiKX19KCkoe3ZhbHVlOmUsbWluRGF0ZTpuLG1heERhdGU6cixtYXhEZXRhaWw6b30pfX0se2tleTpcInJlbmRlckNvbnRlbnRcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmFjdGl2ZVN0YXJ0RGF0ZSxuPXRoaXMub25Nb3VzZU92ZXIscj10aGlzLnZhbHVlVHlwZSxpPXRoaXMudmFsdWUsYT10aGlzLnZpZXcsbD10aGlzLnByb3BzLHM9bC5jYWxlbmRhclR5cGUsYz1sLmxvY2FsZSx1PWwubWF4RGF0ZSxmPWwubWluRGF0ZSxkPWwuc2VsZWN0UmFuZ2UscD1sLnRpbGVDbGFzc05hbWUsaD1sLnRpbGVDb250ZW50LGc9bC50aWxlRGlzYWJsZWQsdj10aGlzLmhvdmVyLG09e2FjdGl2ZVN0YXJ0RGF0ZTplP3llKGEsdCk6Q2UoYSx0KSxob3Zlcjp2LGxvY2FsZTpjLG1heERhdGU6dSxtaW5EYXRlOmYsb25DbGljazp0aGlzLmRyaWxsRG93bkF2YWlsYWJsZT90aGlzLmRyaWxsRG93bjp0aGlzLm9uQ2hhbmdlLG9uTW91c2VPdmVyOmQ/bjpudWxsLHRpbGVDbGFzc05hbWU6cCx0aWxlQ29udGVudDpoLHRpbGVEaXNhYmxlZDpnLHZhbHVlOmksdmFsdWVUeXBlOnJ9O3N3aXRjaChhKXtjYXNlXCJjZW50dXJ5XCI6dmFyIEM9dGhpcy5wcm9wcy5mb3JtYXRZZWFyO3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChrdCxNbih7Zm9ybWF0WWVhcjpDfSxtKSk7Y2FzZVwiZGVjYWRlXCI6dmFyIHk9dGhpcy5wcm9wcy5mb3JtYXRZZWFyO3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChOdCxNbih7Zm9ybWF0WWVhcjp5fSxtKSk7Y2FzZVwieWVhclwiOnZhciB3PXRoaXMucHJvcHMsYj13LmZvcm1hdE1vbnRoLHg9dy5mb3JtYXRNb250aFllYXI7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KHRuLE1uKHtmb3JtYXRNb250aDpiLGZvcm1hdE1vbnRoWWVhcjp4fSxtKSk7Y2FzZVwibW9udGhcIjp2YXIgXz10aGlzLnByb3BzLE89Xy5mb3JtYXREYXksTD1fLmZvcm1hdExvbmdEYXRlLEU9Xy5mb3JtYXRTaG9ydFdlZWtkYXksUz1fLmZvcm1hdFdlZWtkYXksaj1fLm9uQ2xpY2tXZWVrTnVtYmVyLE09Xy5zaG93RG91YmxlVmlldyxrPV8uc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrcyxSPV8uc2hvd05laWdoYm9yaW5nTW9udGgsUD1fLnNob3dXZWVrTnVtYmVycyxJPXRoaXMub25Nb3VzZUxlYXZlO3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChTbixNbih7Y2FsZW5kYXJUeXBlOnMsZm9ybWF0RGF5Ok8sZm9ybWF0TG9uZ0RhdGU6TCxmb3JtYXRTaG9ydFdlZWtkYXk6RSxmb3JtYXRXZWVrZGF5OlMsb25DbGlja1dlZWtOdW1iZXI6aixvbk1vdXNlTGVhdmU6ZD9JOm51bGwsc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrczp2b2lkIDAhPT1rP2s6TSxzaG93TmVpZ2hib3JpbmdNb250aDpSLHNob3dXZWVrTnVtYmVyczpQfSxtKSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHZpZXc6IFwiLmNvbmNhdChhLFwiLlwiKSl9fX0se2tleTpcInJlbmRlck5hdmlnYXRpb25cIix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLnByb3BzLnNob3dOYXZpZ2F0aW9uKXJldHVybiBudWxsO3ZhciBlPXRoaXMuYWN0aXZlU3RhcnREYXRlLHQ9dGhpcy52aWV3LG49dGhpcy52aWV3cyxyPXRoaXMucHJvcHMsaT1yLmZvcm1hdE1vbnRoWWVhcixhPXIuZm9ybWF0WWVhcixsPXIubG9jYWxlLHM9ci5tYXhEYXRlLGM9ci5taW5EYXRlLHU9ci5uYXZpZ2F0aW9uQXJpYUxhYmVsLGY9ci5uYXZpZ2F0aW9uQXJpYUxpdmUsZD1yLm5hdmlnYXRpb25MYWJlbCxwPXIubmV4dDJBcmlhTGFiZWwsaD1yLm5leHQyTGFiZWwsZz1yLm5leHRBcmlhTGFiZWwsdj1yLm5leHRMYWJlbCxtPXIucHJldjJBcmlhTGFiZWwsQz1yLnByZXYyTGFiZWwseT1yLnByZXZBcmlhTGFiZWwsdz1yLnByZXZMYWJlbCxiPXIuc2hvd0RvdWJsZVZpZXc7cmV0dXJuIG8oKS5jcmVhdGVFbGVtZW50KE5lLHthY3RpdmVTdGFydERhdGU6ZSxkcmlsbFVwOnRoaXMuZHJpbGxVcCxmb3JtYXRNb250aFllYXI6aSxmb3JtYXRZZWFyOmEsbG9jYWxlOmwsbWF4RGF0ZTpzLG1pbkRhdGU6YyxuYXZpZ2F0aW9uQXJpYUxhYmVsOnUsbmF2aWdhdGlvbkFyaWFMaXZlOmYsbmF2aWdhdGlvbkxhYmVsOmQsbmV4dDJBcmlhTGFiZWw6cCxuZXh0MkxhYmVsOmgsbmV4dEFyaWFMYWJlbDpnLG5leHRMYWJlbDp2LHByZXYyQXJpYUxhYmVsOm0scHJldjJMYWJlbDpDLHByZXZBcmlhTGFiZWw6eSxwcmV2TGFiZWw6dyxzZXRBY3RpdmVTdGFydERhdGU6dGhpcy5zZXRBY3RpdmVTdGFydERhdGUsc2hvd0RvdWJsZVZpZXc6Yix2aWV3OnQsdmlld3M6bn0pfX0se2tleTpcInJlbmRlclwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuY2xhc3NOYW1lLG49ZS5pbnB1dFJlZixyPWUuc2VsZWN0UmFuZ2UsaT1lLnNob3dEb3VibGVWaWV3LGE9dGhpcy5vbk1vdXNlTGVhdmUsbD10aGlzLnZhbHVlLGM9W10uY29uY2F0KGwpO3JldHVybiBvKCkuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6cyhabixyJiYxPT09Yy5sZW5ndGgmJlwiXCIuY29uY2F0KFpuLFwiLS1zZWxlY3RSYW5nZVwiKSxpJiZcIlwiLmNvbmNhdChabixcIi0tZG91YmxlVmlld1wiKSx0KSxyZWY6bn0sdGhpcy5yZW5kZXJOYXZpZ2F0aW9uKCksbygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwiXCIuY29uY2F0KFpuLFwiX192aWV3Q29udGFpbmVyXCIpLG9uQmx1cjpyP2E6bnVsbCxvbk1vdXNlTGVhdmU6cj9hOm51bGx9LHRoaXMucmVuZGVyQ29udGVudCgpLGkmJnRoaXMucmVuZGVyQ29udGVudCghMCkpKX19XSxuJiZmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19KHQucHJvdG90eXBlLG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwicHJvdG90eXBlXCIse3dyaXRhYmxlOiExfSksbH0oci5Db21wb25lbnQpO0puLmRlZmF1bHRQcm9wcz17Z29Ub1JhbmdlU3RhcnRPblNlbGVjdDohMCxtYXhEYXRlOkRuLG1heERldGFpbDpcIm1vbnRoXCIsbWluRGF0ZTpWbixtaW5EZXRhaWw6XCJjZW50dXJ5XCIscmV0dXJuVmFsdWU6XCJzdGFydFwiLHNob3dOYXZpZ2F0aW9uOiEwLHNob3dOZWlnaGJvcmluZ01vbnRoOiEwfTt2YXIgUW49YSgpLmluc3RhbmNlT2YoRGF0ZSksZXI9YSgpLm9uZU9mVHlwZShbYSgpLnN0cmluZyxIZV0pO0puLnByb3BUeXBlcz17YWN0aXZlU3RhcnREYXRlOlFuLGFsbG93UGFydGlhbFJhbmdlOmEoKS5ib29sLGNhbGVuZGFyVHlwZTpSZSxjbGFzc05hbWU6UGUsZGVmYXVsdEFjdGl2ZVN0YXJ0RGF0ZTpRbixkZWZhdWx0VmFsdWU6ZXIsZGVmYXVsdFZpZXc6VmUsZm9ybWF0RGF5OmEoKS5mdW5jLGZvcm1hdExvbmdEYXRlOmEoKS5mdW5jLGZvcm1hdE1vbnRoOmEoKS5mdW5jLGZvcm1hdE1vbnRoWWVhcjphKCkuZnVuYyxmb3JtYXRTaG9ydFdlZWtkYXk6YSgpLmZ1bmMsZm9ybWF0V2Vla2RheTphKCkuZnVuYyxmb3JtYXRZZWFyOmEoKS5mdW5jLGdvVG9SYW5nZVN0YXJ0T25TZWxlY3Q6YSgpLmJvb2wsaW5wdXRSZWY6VGUsbG9jYWxlOmEoKS5zdHJpbmcsbWF4RGF0ZTpBZSxtYXhEZXRhaWw6YSgpLm9uZU9mKCRuKSxtaW5EYXRlOkllLG1pbkRldGFpbDphKCkub25lT2YoJG4pLG5hdmlnYXRpb25BcmlhTGFiZWw6YSgpLnN0cmluZyxuYXZpZ2F0aW9uQXJpYUxpdmU6YSgpLm9uZU9mKFtcIm9mZlwiLFwicG9saXRlXCIsXCJhc3NlcnRpdmVcIl0pLG5hdmlnYXRpb25MYWJlbDphKCkuZnVuYyxuZXh0MkFyaWFMYWJlbDphKCkuc3RyaW5nLG5leHQyTGFiZWw6YSgpLm5vZGUsbmV4dEFyaWFMYWJlbDphKCkuc3RyaW5nLG5leHRMYWJlbDphKCkubm9kZSxvbkFjdGl2ZVN0YXJ0RGF0ZUNoYW5nZTphKCkuZnVuYyxvbkNoYW5nZTphKCkuZnVuYyxvbkNsaWNrRGF5OmEoKS5mdW5jLG9uQ2xpY2tEZWNhZGU6YSgpLmZ1bmMsb25DbGlja01vbnRoOmEoKS5mdW5jLG9uQ2xpY2tXZWVrTnVtYmVyOmEoKS5mdW5jLG9uQ2xpY2tZZWFyOmEoKS5mdW5jLG9uRHJpbGxEb3duOmEoKS5mdW5jLG9uRHJpbGxVcDphKCkuZnVuYyxvblZpZXdDaGFuZ2U6YSgpLmZ1bmMscHJldjJBcmlhTGFiZWw6YSgpLnN0cmluZyxwcmV2MkxhYmVsOmEoKS5ub2RlLHByZXZBcmlhTGFiZWw6YSgpLnN0cmluZyxwcmV2TGFiZWw6YSgpLm5vZGUscmV0dXJuVmFsdWU6YSgpLm9uZU9mKFtcInN0YXJ0XCIsXCJlbmRcIixcInJhbmdlXCJdKSxzZWxlY3RSYW5nZTphKCkuYm9vbCxzaG93RG91YmxlVmlldzphKCkuYm9vbCxzaG93Rml4ZWROdW1iZXJPZldlZWtzOmEoKS5ib29sLHNob3dOYXZpZ2F0aW9uOmEoKS5ib29sLHNob3dOZWlnaGJvcmluZ01vbnRoOmEoKS5ib29sLHNob3dXZWVrTnVtYmVyczphKCkuYm9vbCx0aWxlQ2xhc3NOYW1lOmEoKS5vbmVPZlR5cGUoW2EoKS5mdW5jLFBlXSksdGlsZUNvbnRlbnQ6YSgpLm9uZU9mVHlwZShbYSgpLmZ1bmMsYSgpLm5vZGVdKSx0aWxlRGlzYWJsZWQ6YSgpLmZ1bmMsdmFsdWU6ZXIsdmlldzpWZX07Y29uc3QgdHI9Sm59LDUyNTE6KGUsdCxuKT0+e24oNzQxOCk7dmFyIHI9big2Njg5KSxvPTYwMTAzO2lmKHQuRnJhZ21lbnQ9NjAxMDcsXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yKXt2YXIgaT1TeW1ib2wuZm9yO289aShcInJlYWN0LmVsZW1lbnRcIiksdC5GcmFnbWVudD1pKFwicmVhY3QuZnJhZ21lbnRcIil9dmFyIGE9ci5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRC5SZWFjdEN1cnJlbnRPd25lcixsPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkscz17a2V5OiEwLHJlZjohMCxfX3NlbGY6ITAsX19zb3VyY2U6ITB9O2Z1bmN0aW9uIGMoZSx0LG4pe3ZhciByLGk9e30sYz1udWxsLHU9bnVsbDtmb3IociBpbiB2b2lkIDAhPT1uJiYoYz1cIlwiK24pLHZvaWQgMCE9PXQua2V5JiYoYz1cIlwiK3Qua2V5KSx2b2lkIDAhPT10LnJlZiYmKHU9dC5yZWYpLHQpbC5jYWxsKHQscikmJiFzLmhhc093blByb3BlcnR5KHIpJiYoaVtyXT10W3JdKTtpZihlJiZlLmRlZmF1bHRQcm9wcylmb3IociBpbiB0PWUuZGVmYXVsdFByb3BzKXZvaWQgMD09PWlbcl0mJihpW3JdPXRbcl0pO3JldHVybnskJHR5cGVvZjpvLHR5cGU6ZSxrZXk6YyxyZWY6dSxwcm9wczppLF9vd25lcjphLmN1cnJlbnR9fXQuanN4PWMsdC5qc3hzPWN9LDU4OTM6KGUsdCxuKT0+e2UuZXhwb3J0cz1uKDUyNTEpfSwzNTczOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgcj1uKDY1NSksbz1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4obix0KSxlKX19LGk9ZnVuY3Rpb24oZSl7cmV0dXJuIGUlMT9OdW1iZXIoZS50b0ZpeGVkKDUpKTplfSxhPS8oLSk/KFtcXGRdKlxcLj9bXFxkXSkrL2csbD0vKCNbMC05YS1mXXs2fXwjWzAtOWEtZl17M318Iyg/OlswLTlhLWZdezJ9KXsyLDR9fChyZ2J8aHNsKWE/XFwoKC0/W1xcZFxcLl0rJT9bLFxcc10rKXsyLDN9XFxzKlxcLypcXHMqW1xcZFxcLl0rJT9cXCkpL2dpLHM9L14oI1swLTlhLWZdezN9fCMoPzpbMC05YS1mXXsyfSl7Miw0fXwocmdifGhzbClhP1xcKCgtP1tcXGRcXC5dKyU/WyxcXHNdKyl7MiwzfVxccypcXC8qXFxzKltcXGRcXC5dKyU/XFwpKSQvaTtmdW5jdGlvbiBjKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlfXZhciB1PXt0ZXN0OmZ1bmN0aW9uKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlfSxwYXJzZTpwYXJzZUZsb2F0LHRyYW5zZm9ybTpmdW5jdGlvbihlKXtyZXR1cm4gZX19LGY9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LHUpLHt0cmFuc2Zvcm06bygwLDEpfSksZD1yLl9fYXNzaWduKHIuX19hc3NpZ24oe30sdSkse2RlZmF1bHQ6MX0pLHA9ZnVuY3Rpb24oZSl7cmV0dXJue3Rlc3Q6ZnVuY3Rpb24odCl7cmV0dXJuIGModCkmJnQuZW5kc1dpdGgoZSkmJjE9PT10LnNwbGl0KFwiIFwiKS5sZW5ndGh9LHBhcnNlOnBhcnNlRmxvYXQsdHJhbnNmb3JtOmZ1bmN0aW9uKHQpe3JldHVyblwiXCIrdCtlfX19LGg9cChcImRlZ1wiKSxnPXAoXCIlXCIpLHY9cChcInB4XCIpLG09cChcInZoXCIpLEM9cChcInZ3XCIpLHk9ci5fX2Fzc2lnbihyLl9fYXNzaWduKHt9LGcpLHtwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gZy5wYXJzZShlKS8xMDB9LHRyYW5zZm9ybTpmdW5jdGlvbihlKXtyZXR1cm4gZy50cmFuc2Zvcm0oMTAwKmUpfX0pLHc9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIEJvb2xlYW4oYyhuKSYmcy50ZXN0KG4pJiZuLnN0YXJ0c1dpdGgoZSl8fHQmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHQpKX19LGI9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBmdW5jdGlvbihyKXt2YXIgbztpZighYyhyKSlyZXR1cm4gcjt2YXIgaT1yLm1hdGNoKGEpLGw9aVswXSxzPWlbMV0sdT1pWzJdLGY9aVszXTtyZXR1cm4obz17fSlbZV09cGFyc2VGbG9hdChsKSxvW3RdPXBhcnNlRmxvYXQocyksb1tuXT1wYXJzZUZsb2F0KHUpLG8uYWxwaGE9dm9pZCAwIT09Zj9wYXJzZUZsb2F0KGYpOjEsb319LHg9e3Rlc3Q6dyhcImhzbFwiLFwiaHVlXCIpLHBhcnNlOmIoXCJodWVcIixcInNhdHVyYXRpb25cIixcImxpZ2h0bmVzc1wiKSx0cmFuc2Zvcm06ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5odWUsbj1lLnNhdHVyYXRpb24scj1lLmxpZ2h0bmVzcyxvPWUuYWxwaGEsYT12b2lkIDA9PT1vPzE6bztyZXR1cm5cImhzbGEoXCIrTWF0aC5yb3VuZCh0KStcIiwgXCIrZy50cmFuc2Zvcm0oaShuKSkrXCIsIFwiK2cudHJhbnNmb3JtKGkocikpK1wiLCBcIitpKGYudHJhbnNmb3JtKGEpKStcIilcIn19LF89bygwLDI1NSksTz1yLl9fYXNzaWduKHIuX19hc3NpZ24oe30sdSkse3RyYW5zZm9ybTpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChfKGUpKX19KSxMPXt0ZXN0OncoXCJyZ2JcIixcInJlZFwiKSxwYXJzZTpiKFwicmVkXCIsXCJncmVlblwiLFwiYmx1ZVwiKSx0cmFuc2Zvcm06ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZWQsbj1lLmdyZWVuLHI9ZS5ibHVlLG89ZS5hbHBoYSxhPXZvaWQgMD09PW8/MTpvO3JldHVyblwicmdiYShcIitPLnRyYW5zZm9ybSh0KStcIiwgXCIrTy50cmFuc2Zvcm0obikrXCIsIFwiK08udHJhbnNmb3JtKHIpK1wiLCBcIitpKGYudHJhbnNmb3JtKGEpKStcIilcIn19LEU9e3Rlc3Q6dyhcIiNcIikscGFyc2U6ZnVuY3Rpb24oZSl7dmFyIHQ9XCJcIixuPVwiXCIscj1cIlwiLG89XCJcIjtyZXR1cm4gZS5sZW5ndGg+NT8odD1lLnN1YnN0cigxLDIpLG49ZS5zdWJzdHIoMywyKSxyPWUuc3Vic3RyKDUsMiksbz1lLnN1YnN0cig3LDIpKToodD1lLnN1YnN0cigxLDEpLG49ZS5zdWJzdHIoMiwxKSxyPWUuc3Vic3RyKDMsMSksbz1lLnN1YnN0cig0LDEpLHQrPXQsbis9bixyKz1yLG8rPW8pLHtyZWQ6cGFyc2VJbnQodCwxNiksZ3JlZW46cGFyc2VJbnQobiwxNiksYmx1ZTpwYXJzZUludChyLDE2KSxhbHBoYTpvP3BhcnNlSW50KG8sMTYpLzI1NToxfX0sdHJhbnNmb3JtOkwudHJhbnNmb3JtfSxTPXt0ZXN0OmZ1bmN0aW9uKGUpe3JldHVybiBMLnRlc3QoZSl8fEUudGVzdChlKXx8eC50ZXN0KGUpfSxwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gTC50ZXN0KGUpP0wucGFyc2UoZSk6eC50ZXN0KGUpP3gucGFyc2UoZSk6RS5wYXJzZShlKX0sdHJhbnNmb3JtOmZ1bmN0aW9uKGUpe3JldHVybiBjKGUpP2U6ZS5oYXNPd25Qcm9wZXJ0eShcInJlZFwiKT9MLnRyYW5zZm9ybShlKTp4LnRyYW5zZm9ybShlKX19LGo9XCIke2N9XCIsTT1cIiR7bn1cIjtmdW5jdGlvbiBrKGUpe3ZhciB0PVtdLG49MCxyPWUubWF0Y2gobCk7ciYmKG49ci5sZW5ndGgsZT1lLnJlcGxhY2UobCxqKSx0LnB1c2guYXBwbHkodCxyLm1hcChTLnBhcnNlKSkpO3ZhciBvPWUubWF0Y2goYSk7cmV0dXJuIG8mJihlPWUucmVwbGFjZShhLE0pLHQucHVzaC5hcHBseSh0LG8ubWFwKHUucGFyc2UpKSkse3ZhbHVlczp0LG51bUNvbG9yczpuLHRva2VuaXNlZDplfX1mdW5jdGlvbiBSKGUpe3JldHVybiBrKGUpLnZhbHVlc31mdW5jdGlvbiBQKGUpe3ZhciB0PWsoZSksbj10LnZhbHVlcyxyPXQubnVtQ29sb3JzLG89dC50b2tlbmlzZWQsYT1uLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW8sbj0wO248YTtuKyspdD10LnJlcGxhY2UobjxyP2o6TSxuPHI/Uy50cmFuc2Zvcm0oZVtuXSk6aShlW25dKSk7cmV0dXJuIHR9fXZhciBJPWZ1bmN0aW9uKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlPzA6ZX0sQT17dGVzdDpmdW5jdGlvbihlKXt2YXIgdCxuLHIsbztyZXR1cm4gaXNOYU4oZSkmJmMoZSkmJihudWxsIT09KG49bnVsbD09PSh0PWUubWF0Y2goYSkpfHx2b2lkIDA9PT10P3ZvaWQgMDp0Lmxlbmd0aCkmJnZvaWQgMCE9PW4/bjowKSsobnVsbCE9PShvPW51bGw9PT0ocj1lLm1hdGNoKGwpKXx8dm9pZCAwPT09cj92b2lkIDA6ci5sZW5ndGgpJiZ2b2lkIDAhPT1vP286MCk+MH0scGFyc2U6UixjcmVhdGVUcmFuc2Zvcm1lcjpQLGdldEFuaW1hdGFibGVOb25lOmZ1bmN0aW9uKGUpe3ZhciB0PVIoZSk7cmV0dXJuIFAoZSkodC5tYXAoSSkpfX0sVD1uZXcgU2V0KFtcImJyaWdodG5lc3NcIixcImNvbnRyYXN0XCIsXCJzYXR1cmF0ZVwiLFwib3BhY2l0eVwiXSk7ZnVuY3Rpb24gSChlKXt2YXIgdD1lLnNsaWNlKDAsLTEpLnNwbGl0KFwiKFwiKSxuPXRbMF0scj10WzFdO2lmKFwiZHJvcC1zaGFkb3dcIj09PW4pcmV0dXJuIGU7dmFyIG89KHIubWF0Y2goYSl8fFtdKVswXTtpZighbylyZXR1cm4gZTt2YXIgaT1yLnJlcGxhY2UobyxcIlwiKSxsPVQuaGFzKG4pPzE6MDtyZXR1cm4gbyE9PXImJihsKj0xMDApLG4rXCIoXCIrbCtpK1wiKVwifXZhciBCPS8oW2Etei1dKilcXCguKj9cXCkvZyxWPXIuX19hc3NpZ24oci5fX2Fzc2lnbih7fSxBKSx7Z2V0QW5pbWF0YWJsZU5vbmU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5tYXRjaChCKTtyZXR1cm4gdD90Lm1hcChIKS5qb2luKFwiIFwiKTplfX0pO3QuYWxwaGE9Zix0LmNvbG9yPVMsdC5jb21wbGV4PUEsdC5kZWdyZWVzPWgsdC5maWx0ZXI9Vix0LmhleD1FLHQuaHNsYT14LHQubnVtYmVyPXUsdC5wZXJjZW50PWcsdC5wcm9ncmVzc1BlcmNlbnRhZ2U9eSx0LnB4PXYsdC5yZ2JVbml0PU8sdC5yZ2JhPUwsdC5zY2FsZT1kLHQudmg9bSx0LnZ3PUN9LDgzODg6KGUsdCxuKT0+e24ucih0KSxuLmQodCx7Zm9jdXNhYmxlOigpPT53LGlzRm9jdXNhYmxlOigpPT5fLGlzVGFiYmFibGU6KCk9PmIsdGFiYmFibGU6KCk9Pnl9KTt2YXIgcj1bXCJpbnB1dDpub3QoW2luZXJ0XSlcIixcInNlbGVjdDpub3QoW2luZXJ0XSlcIixcInRleHRhcmVhOm5vdChbaW5lcnRdKVwiLFwiYVtocmVmXTpub3QoW2luZXJ0XSlcIixcImJ1dHRvbjpub3QoW2luZXJ0XSlcIixcIlt0YWJpbmRleF06bm90KHNsb3QpOm5vdChbaW5lcnRdKVwiLFwiYXVkaW9bY29udHJvbHNdOm5vdChbaW5lcnRdKVwiLFwidmlkZW9bY29udHJvbHNdOm5vdChbaW5lcnRdKVwiLCdbY29udGVudGVkaXRhYmxlXTpub3QoW2NvbnRlbnRlZGl0YWJsZT1cImZhbHNlXCJdKTpub3QoW2luZXJ0XSknLFwiZGV0YWlscz5zdW1tYXJ5OmZpcnN0LW9mLXR5cGU6bm90KFtpbmVydF0pXCIsXCJkZXRhaWxzOm5vdChbaW5lcnRdKVwiXSxvPXIuam9pbihcIixcIiksaT1cInVuZGVmaW5lZFwiPT10eXBlb2YgRWxlbWVudCxhPWk/ZnVuY3Rpb24oKXt9OkVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXN8fEVsZW1lbnQucHJvdG90eXBlLm1zTWF0Y2hlc1NlbGVjdG9yfHxFbGVtZW50LnByb3RvdHlwZS53ZWJraXRNYXRjaGVzU2VsZWN0b3IsbD0haSYmRWxlbWVudC5wcm90b3R5cGUuZ2V0Um9vdE5vZGU/ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIG51bGw9PWV8fG51bGw9PT0odD1lLmdldFJvb3ROb2RlKXx8dm9pZCAwPT09dD92b2lkIDA6dC5jYWxsKGUpfTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT92b2lkIDA6ZS5vd25lckRvY3VtZW50fSxzPWZ1bmN0aW9uIGUodCxuKXt2YXIgcjt2b2lkIDA9PT1uJiYobj0hMCk7dmFyIG89bnVsbD09dHx8bnVsbD09PShyPXQuZ2V0QXR0cmlidXRlKXx8dm9pZCAwPT09cj92b2lkIDA6ci5jYWxsKHQsXCJpbmVydFwiKTtyZXR1cm5cIlwiPT09b3x8XCJ0cnVlXCI9PT1vfHxuJiZ0JiZlKHQucGFyZW50Tm9kZSl9LGM9ZnVuY3Rpb24oZSx0LG4pe2lmKHMoZSkpcmV0dXJuW107dmFyIHI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGUucXVlcnlTZWxlY3RvckFsbChvKSk7cmV0dXJuIHQmJmEuY2FsbChlLG8pJiZyLnVuc2hpZnQoZSksci5maWx0ZXIobil9LHU9ZnVuY3Rpb24gZSh0LG4scil7Zm9yKHZhciBpPVtdLGw9QXJyYXkuZnJvbSh0KTtsLmxlbmd0aDspe3ZhciBjPWwuc2hpZnQoKTtpZighcyhjLCExKSlpZihcIlNMT1RcIj09PWMudGFnTmFtZSl7dmFyIHU9Yy5hc3NpZ25lZEVsZW1lbnRzKCksZj1lKHUubGVuZ3RoP3U6Yy5jaGlsZHJlbiwhMCxyKTtyLmZsYXR0ZW4/aS5wdXNoLmFwcGx5KGksZik6aS5wdXNoKHtzY29wZVBhcmVudDpjLGNhbmRpZGF0ZXM6Zn0pfWVsc2V7YS5jYWxsKGMsbykmJnIuZmlsdGVyKGMpJiYobnx8IXQuaW5jbHVkZXMoYykpJiZpLnB1c2goYyk7dmFyIGQ9Yy5zaGFkb3dSb290fHxcImZ1bmN0aW9uXCI9PXR5cGVvZiByLmdldFNoYWRvd1Jvb3QmJnIuZ2V0U2hhZG93Um9vdChjKSxwPSFzKGQsITEpJiYoIXIuc2hhZG93Um9vdEZpbHRlcnx8ci5zaGFkb3dSb290RmlsdGVyKGMpKTtpZihkJiZwKXt2YXIgaD1lKCEwPT09ZD9jLmNoaWxkcmVuOmQuY2hpbGRyZW4sITAscik7ci5mbGF0dGVuP2kucHVzaC5hcHBseShpLGgpOmkucHVzaCh7c2NvcGVQYXJlbnQ6YyxjYW5kaWRhdGVzOmh9KX1lbHNlIGwudW5zaGlmdC5hcHBseShsLGMuY2hpbGRyZW4pfX1yZXR1cm4gaX0sZj1mdW5jdGlvbihlLHQpe3JldHVybiBlLnRhYkluZGV4PDAmJih0fHwvXihBVURJT3xWSURFT3xERVRBSUxTKSQvLnRlc3QoZS50YWdOYW1lKXx8ZnVuY3Rpb24oZSl7dmFyIHQsbj1udWxsPT1lfHxudWxsPT09KHQ9ZS5nZXRBdHRyaWJ1dGUpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmNhbGwoZSxcImNvbnRlbnRlZGl0YWJsZVwiKTtyZXR1cm5cIlwiPT09bnx8XCJ0cnVlXCI9PT1ufShlKSkmJmlzTmFOKHBhcnNlSW50KGUuZ2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIiksMTApKT8wOmUudGFiSW5kZXh9LGQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50YWJJbmRleD09PXQudGFiSW5kZXg/ZS5kb2N1bWVudE9yZGVyLXQuZG9jdW1lbnRPcmRlcjplLnRhYkluZGV4LXQudGFiSW5kZXh9LHA9ZnVuY3Rpb24oZSl7cmV0dXJuXCJJTlBVVFwiPT09ZS50YWdOYW1lfSxoPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj10LndpZHRoLHI9dC5oZWlnaHQ7cmV0dXJuIDA9PT1uJiYwPT09cn0sZz1mdW5jdGlvbihlLHQpe3JldHVybiEodC5kaXNhYmxlZHx8cyh0KXx8ZnVuY3Rpb24oZSl7cmV0dXJuIHAoZSkmJlwiaGlkZGVuXCI9PT1lLnR5cGV9KHQpfHxmdW5jdGlvbihlLHQpe3ZhciBuPXQuZGlzcGxheUNoZWNrLHI9dC5nZXRTaGFkb3dSb290O2lmKFwiaGlkZGVuXCI9PT1nZXRDb21wdXRlZFN0eWxlKGUpLnZpc2liaWxpdHkpcmV0dXJuITA7dmFyIG89YS5jYWxsKGUsXCJkZXRhaWxzPnN1bW1hcnk6Zmlyc3Qtb2YtdHlwZVwiKT9lLnBhcmVudEVsZW1lbnQ6ZTtpZihhLmNhbGwobyxcImRldGFpbHM6bm90KFtvcGVuXSkgKlwiKSlyZXR1cm4hMDtpZihuJiZcImZ1bGxcIiE9PW4mJlwibGVnYWN5LWZ1bGxcIiE9PW4pe2lmKFwibm9uLXplcm8tYXJlYVwiPT09bilyZXR1cm4gaChlKX1lbHNle2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHIpe2Zvcih2YXIgaT1lO2U7KXt2YXIgcz1lLnBhcmVudEVsZW1lbnQsYz1sKGUpO2lmKHMmJiFzLnNoYWRvd1Jvb3QmJiEwPT09cihzKSlyZXR1cm4gaChlKTtlPWUuYXNzaWduZWRTbG90P2UuYXNzaWduZWRTbG90OnN8fGM9PT1lLm93bmVyRG9jdW1lbnQ/czpjLmhvc3R9ZT1pfWlmKGZ1bmN0aW9uKGUpe3ZhciB0LG4scixvLGk9ZSYmbChlKSxhPW51bGw9PT0odD1pKXx8dm9pZCAwPT09dD92b2lkIDA6dC5ob3N0LHM9ITE7aWYoaSYmaSE9PWUpZm9yKHM9ISEobnVsbCE9PShuPWEpJiZ2b2lkIDAhPT1uJiZudWxsIT09KHI9bi5vd25lckRvY3VtZW50KSYmdm9pZCAwIT09ciYmci5jb250YWlucyhhKXx8bnVsbCE9ZSYmbnVsbCE9PShvPWUub3duZXJEb2N1bWVudCkmJnZvaWQgMCE9PW8mJm8uY29udGFpbnMoZSkpOyFzJiZhOyl7dmFyIGMsdSxmO3M9IShudWxsPT09KHU9YT1udWxsPT09KGM9aT1sKGEpKXx8dm9pZCAwPT09Yz92b2lkIDA6Yy5ob3N0KXx8dm9pZCAwPT09dXx8bnVsbD09PShmPXUub3duZXJEb2N1bWVudCl8fHZvaWQgMD09PWZ8fCFmLmNvbnRhaW5zKGEpKX1yZXR1cm4gc30oZSkpcmV0dXJuIWUuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGg7aWYoXCJsZWdhY3ktZnVsbFwiIT09bilyZXR1cm4hMH1yZXR1cm4hMX0odCxlKXx8ZnVuY3Rpb24oZSl7cmV0dXJuXCJERVRBSUxTXCI9PT1lLnRhZ05hbWUmJkFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShlLmNoaWxkcmVuKS5zb21lKChmdW5jdGlvbihlKXtyZXR1cm5cIlNVTU1BUllcIj09PWUudGFnTmFtZX0pKX0odCl8fGZ1bmN0aW9uKGUpe2lmKC9eKElOUFVUfEJVVFRPTnxTRUxFQ1R8VEVYVEFSRUEpJC8udGVzdChlLnRhZ05hbWUpKWZvcih2YXIgdD1lLnBhcmVudEVsZW1lbnQ7dDspe2lmKFwiRklFTERTRVRcIj09PXQudGFnTmFtZSYmdC5kaXNhYmxlZCl7Zm9yKHZhciBuPTA7bjx0LmNoaWxkcmVuLmxlbmd0aDtuKyspe3ZhciByPXQuY2hpbGRyZW4uaXRlbShuKTtpZihcIkxFR0VORFwiPT09ci50YWdOYW1lKXJldHVybiEhYS5jYWxsKHQsXCJmaWVsZHNldFtkaXNhYmxlZF0gKlwiKXx8IXIuY29udGFpbnMoZSl9cmV0dXJuITB9dD10LnBhcmVudEVsZW1lbnR9cmV0dXJuITF9KHQpKX0sdj1mdW5jdGlvbihlLHQpe3JldHVybiEoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBwKGUpJiZcInJhZGlvXCI9PT1lLnR5cGV9KGUpJiYhZnVuY3Rpb24oZSl7aWYoIWUubmFtZSlyZXR1cm4hMDt2YXIgdCxuPWUuZm9ybXx8bChlKSxyPWZ1bmN0aW9uKGUpe3JldHVybiBuLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9XCJyYWRpb1wiXVtuYW1lPVwiJytlKydcIl0nKX07aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmdm9pZCAwIT09d2luZG93LkNTUyYmXCJmdW5jdGlvblwiPT10eXBlb2Ygd2luZG93LkNTUy5lc2NhcGUpdD1yKHdpbmRvdy5DU1MuZXNjYXBlKGUubmFtZSkpO2Vsc2UgdHJ5e3Q9cihlLm5hbWUpfWNhdGNoKGUpe3JldHVybiBjb25zb2xlLmVycm9yKFwiTG9va3MgbGlrZSB5b3UgaGF2ZSBhIHJhZGlvIGJ1dHRvbiB3aXRoIGEgbmFtZSBhdHRyaWJ1dGUgY29udGFpbmluZyBpbnZhbGlkIENTUyBzZWxlY3RvciBjaGFyYWN0ZXJzIGFuZCBuZWVkIHRoZSBDU1MuZXNjYXBlIHBvbHlmaWxsOiAlc1wiLGUubWVzc2FnZSksITF9dmFyIG89ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZihlW25dLmNoZWNrZWQmJmVbbl0uZm9ybT09PXQpcmV0dXJuIGVbbl19KHQsZS5mb3JtKTtyZXR1cm4hb3x8bz09PWV9KGUpfSh0KXx8Zih0KTwwfHwhZyhlLHQpKX0sbT1mdW5jdGlvbihlKXt2YXIgdD1wYXJzZUludChlLmdldEF0dHJpYnV0ZShcInRhYmluZGV4XCIpLDEwKTtyZXR1cm4hIShpc05hTih0KXx8dD49MCl9LEM9ZnVuY3Rpb24gZSh0KXt2YXIgbj1bXSxyPVtdO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQsbyl7dmFyIGk9ISF0LnNjb3BlUGFyZW50LGE9aT90LnNjb3BlUGFyZW50OnQsbD1mKGEsaSkscz1pP2UodC5jYW5kaWRhdGVzKTphOzA9PT1sP2k/bi5wdXNoLmFwcGx5KG4scyk6bi5wdXNoKGEpOnIucHVzaCh7ZG9jdW1lbnRPcmRlcjpvLHRhYkluZGV4OmwsaXRlbTp0LGlzU2NvcGU6aSxjb250ZW50OnN9KX0pKSxyLnNvcnQoZCkucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiB0LmlzU2NvcGU/ZS5wdXNoLmFwcGx5KGUsdC5jb250ZW50KTplLnB1c2godC5jb250ZW50KSxlfSksW10pLmNvbmNhdChuKX0seT1mdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBuPSh0PXR8fHt9KS5nZXRTaGFkb3dSb290P3UoW2VdLHQuaW5jbHVkZUNvbnRhaW5lcix7ZmlsdGVyOnYuYmluZChudWxsLHQpLGZsYXR0ZW46ITEsZ2V0U2hhZG93Um9vdDp0LmdldFNoYWRvd1Jvb3Qsc2hhZG93Um9vdEZpbHRlcjptfSk6YyhlLHQuaW5jbHVkZUNvbnRhaW5lcix2LmJpbmQobnVsbCx0KSksQyhuKX0sdz1mdW5jdGlvbihlLHQpe3JldHVybih0PXR8fHt9KS5nZXRTaGFkb3dSb290P3UoW2VdLHQuaW5jbHVkZUNvbnRhaW5lcix7ZmlsdGVyOmcuYmluZChudWxsLHQpLGZsYXR0ZW46ITAsZ2V0U2hhZG93Um9vdDp0LmdldFNoYWRvd1Jvb3R9KTpjKGUsdC5pbmNsdWRlQ29udGFpbmVyLGcuYmluZChudWxsLHQpKX0sYj1mdW5jdGlvbihlLHQpe2lmKHQ9dHx8e30sIWUpdGhyb3cgbmV3IEVycm9yKFwiTm8gbm9kZSBwcm92aWRlZFwiKTtyZXR1cm4hMSE9PWEuY2FsbChlLG8pJiZ2KHQsZSl9LHg9ci5jb25jYXQoXCJpZnJhbWVcIikuam9pbihcIixcIiksXz1mdW5jdGlvbihlLHQpe2lmKHQ9dHx8e30sIWUpdGhyb3cgbmV3IEVycm9yKFwiTm8gbm9kZSBwcm92aWRlZFwiKTtyZXR1cm4hMSE9PWEuY2FsbChlLHgpJiZnKHQsZSl9fSw5ODI4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkZvbnRzPXZvaWQgMDtjb25zdCBvPXIobig0NjY4KSksaT1yKG4oNjAzNikpLGE9cihuKDU5NDEpKSxsPXIobigyODEzKSk7dC5Gb250cz17cmVndWxhcjpvLmRlZmF1bHQsaXRhbGljOmkuZGVmYXVsdCxzZW1pQm9sZDphLmRlZmF1bHQsc2VtaUJvbGRJdGFsaWM6bC5kZWZhdWx0fX0sNjIxODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oOTgyOCksdCl9LDQyNDk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5CdXR0b25UZXh0T25seT10LkJ1dHRvblNlY29uZGFyeT10LkJ1dHRvblByaW1hcnk9dC5CdXR0b249dm9pZCAwO2NvbnN0IGk9big1ODkzKSxhPW8obig3NTE4KSksbD1uKDEzMzUpLHM9big5NTA3KSxjPW4oNjEyNik7dC5CdXR0b249ZT0+e3ZhcntsYWJlbDp0LGNoaWxkcmVuOm4sc2l6ZTpvPVwiYmFzZVwiLHNoYXBlOmE9XCJzcXVhcmVcIixraW5kOmw9XCJwcmltYXJ5XCIsbGF5b3V0OnM9XCJmaXRcIixocmVmOmN9PWUsZD1yKGUsW1wibGFiZWxcIixcImNoaWxkcmVuXCIsXCJzaXplXCIsXCJzaGFwZVwiLFwia2luZFwiLFwibGF5b3V0XCIsXCJocmVmXCJdKTtyZXR1cm4oMCxpLmpzeCkodSxPYmplY3QuYXNzaWduKHthczpjP1wiYVwiOlwiYnV0dG9uXCIsc2l6ZTpvLHNoYXBlOmEsa2luZDpsLGxheW91dDpzfSxkLHtjaGlsZHJlbjp0PygwLGkuanN4KShmLE9iamVjdC5hc3NpZ24oe2FsaWduSXRlbXM6XCJjZW50ZXJcIixqdXN0aWZ5Q29udGVudDpcImNlbnRlclwifSx7Y2hpbGRyZW46dH0pKTpufSkpfTtjb25zdCB1PWEuZGVmYXVsdC5idXR0b25gXG4gIC8qIERlZmF1bHQgdmFsdWVzIHRoYXQgZ2V0IG92ZXJyaWRkZW4gYnkgdmFyaWFudHMgKi9cbiAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0QmFja2dyb3VuZH07XG4gIGJvcmRlcjogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dEJhY2tncm91bmR9O1xuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kUHJpbWFyeVRleHR9O1xuXG4gIC8qIEluamVjdCB2YXJpYW50cyAqL1xuICAkeygwLHMuZ2V0VmFyaWFudENTUykoYy52YXJpYW50cyxjLlZhcmlhbnQuc2l6ZSl9XG4gICR7KDAscy5nZXRWYXJpYW50Q1NTKShjLnZhcmlhbnRzLGMuVmFyaWFudC5zaGFwZSl9XG4gICR7KDAscy5nZXRWYXJpYW50Q1NTKShjLnZhcmlhbnRzLGMuVmFyaWFudC5raW5kKX1cbiAgJHsoMCxzLmdldFZhcmlhbnRDU1MpKGMudmFyaWFudHMsYy5WYXJpYW50LmxheW91dCl9XG5cbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG4gIG91dGxpbmU6IG5vbmU7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgbGluZS1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUubGluZUhlaWdodC51aX07XG4gIGZvbnQtd2VpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRXZWlnaHQuYm9sZH07XG4gIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciB2YXIoLS1vcGVuZmluLXVpLWdsb2JhbFRyYW5zaXRpb24pO1xuXG4gICY6bm90KDpkaXNhYmxlZCkge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxuXG4gICY6ZGlzYWJsZWQsXG4gICY6YWN0aXZlOmRpc2FibGVkIHtcbiAgICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXREaXNhYmxlZH07XG4gICAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXREaXNhYmxlZH07XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dFBsYWNlaG9sZGVyfTtcbiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICB9XG5gLGY9KDAsYS5kZWZhdWx0KShsLkJveClgXG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAwICR7ZS5weC54c21hbGx9YH07XG5gO3QuQnV0dG9uUHJpbWFyeT1lPT4oMCxpLmpzeCkodC5CdXR0b24sT2JqZWN0LmFzc2lnbih7fSxlLHtraW5kOlwicHJpbWFyeVwifSkpLHQuQnV0dG9uU2Vjb25kYXJ5PWU9PigwLGkuanN4KSh0LkJ1dHRvbixPYmplY3QuYXNzaWduKHt9LGUse2tpbmQ6XCJzZWNvbmRhcnlcIn0pKSx0LkJ1dHRvblRleHRPbmx5PWU9PigwLGkuanN4KSh0LkJ1dHRvbixPYmplY3QuYXNzaWduKHt9LGUse2tpbmQ6XCJ0ZXh0T25seVwifSkpfSw2MTI2OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnZhcmlhbnRzPXQuQnV0dG9uU2hhcGU9dC5CdXR0b25MYXlvdXQ9dC5CdXR0b25TaXplPXQuQnV0dG9uS2luZD10LlZhcmlhbnQ9dm9pZCAwO2NvbnN0IHI9big3NTE4KTt0LlZhcmlhbnQ9e3NoYXBlOlwic2hhcGVcIixzaXplOlwic2l6ZVwiLGtpbmQ6XCJraW5kXCIsbGF5b3V0OlwibGF5b3V0XCJ9LHQuQnV0dG9uS2luZD17cHJpbWFyeTpcInByaW1hcnlcIixzZWNvbmRhcnk6XCJzZWNvbmRhcnlcIix0ZXh0T25seTpcInRleHRPbmx5XCJ9LHQuQnV0dG9uU2l6ZT17c21hbGw6XCJzbWFsbFwiLGJhc2U6XCJiYXNlXCIsbGFyZ2U6XCJsYXJnZVwifSx0LkJ1dHRvbkxheW91dD17Zml0OlwiZml0XCIsZnVsbDpcImZ1bGxcIn0sdC5CdXR0b25TaGFwZT17c3F1YXJlOlwic3F1YXJlXCIscGlsbDpcInBpbGxcIn0sdC52YXJpYW50cz17W3QuVmFyaWFudC5zaXplXTp7W3QuQnV0dG9uU2l6ZS5iYXNlXTpyLmNzc2BcbiAgICAgIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAke2UucHguc21hbGx9ICR7ZS5weC5sYXJnZX1gfTtcbiAgICAgIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5iYXNlfTtcbiAgICBgLFt0LkJ1dHRvblNpemUuc21hbGxdOnIuY3NzYFxuICAgICAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YCR7ZS5weC54c21hbGx9ICR7ZS5weC5iYXNlfWB9O1xuICAgICAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLnNtYWxsfTtcbiAgICBgLFt0LkJ1dHRvblNpemUubGFyZ2VdOnIuY3NzYFxuICAgICAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YCR7ZS5weC5iYXNlfSAke2UucHgueGxhcmdlfWB9O1xuICAgICAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmxhcmdlfTtcbiAgICBgfSxbdC5WYXJpYW50LnNoYXBlXTp7W3QuQnV0dG9uU2hhcGUuc3F1YXJlXTpyLmNzc2BcbiAgICAgIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbiAgICBgLFt0LkJ1dHRvblNoYXBlLnBpbGxdOnIuY3NzYFxuICAgICAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMucGlsbH07XG4gICAgYH0sW3QuVmFyaWFudC5sYXlvdXRdOntbdC5CdXR0b25MYXlvdXQuZml0XTpyLmNzc2BcbiAgICAgIHdpZHRoOiBmaXQtY29udGVudDtcbiAgICBgLFt0LkJ1dHRvbkxheW91dC5mdWxsXTpyLmNzc2BcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIGB9LFt0LlZhcmlhbnQua2luZF06e1t0LkJ1dHRvbktpbmQucHJpbWFyeV06ci5jc3NgXG4gICAgICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5fTtcbiAgICAgIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kUHJpbWFyeX07XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5SG92ZXJ9O1xuICAgICAgfVxuXG4gICAgICAmOmFjdGl2ZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFByaW1hcnlBY3RpdmV9O1xuICAgICAgfVxuXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5Rm9jdXNlZH07XG4gICAgICB9XG4gICAgYCxbdC5CdXR0b25LaW5kLnNlY29uZGFyeV06ci5jc3NgXG4gICAgICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRTZWNvbmRhcnl9O1xuICAgICAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRTZWNvbmRhcnl9O1xuICAgICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFNlY29uZGFyeVRleHR9O1xuXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kU2Vjb25kYXJ5SG92ZXJ9O1xuICAgICAgfVxuXG4gICAgICAmOmFjdGl2ZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFNlY29uZGFyeUFjdGl2ZX07XG4gICAgICB9XG5cbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5icmFuZFNlY29uZGFyeUZvY3VzZWR9O1xuICAgICAgfVxuICAgIGAsW3QuQnV0dG9uS2luZC50ZXh0T25seV06ci5jc3NgXG4gICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcblxuICAgICAgJjphY3RpdmUge1xuICAgICAgICBvcGFjaXR5OiAwLjg7XG4gICAgICB9XG5cbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dEZvY3VzZWR9O1xuICAgICAgfVxuICAgIGB9fX0sNDEzMDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oNDI0OSksdCksbyhuKDYxMjYpLHQpfSwzOTExOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNhcmRDb250YWluZXI9dm9pZCAwO2NvbnN0IG89big1ODkzKSxpPXIobig3NTE4KSksYT1uKDk1MDcpLGw9bigxMzM1KTt0LkNhcmRDb250YWluZXI9ZT0+KDAsby5qc3gpKHMsT2JqZWN0LmFzc2lnbih7c3R5bGU6e21heEhlaWdodDplLm1heEhlaWdodCxvdmVyZmxvd1k6XCJhdXRvXCJ9LGlkOlwiY2FyZC1jb250YWluZXJcIixcImRhdGEtdGVzdGlkXCI6XCJjYXJkLWNvbnRhaW5lclwifSx7Y2hpbGRyZW46KDAsby5qc3gpKGMse2NoaWxkcmVuOmUuY2hpbGRyZW59KX0pKTtjb25zdCBzPSgwLGkuZGVmYXVsdCkobC5Cb3gpYFxuICBkaXNwbGF5OiBibG9jaztcbiAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQzfTtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNX07XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmUucHgueHNtYWxsfSAkeyh7dGhlbWU6ZX0pPT5lLnB4LnhzbWFsbH1cbiAgICAkeyh7dGhlbWU6ZX0pPT5lLnB4LmxhcmdlfSAwcHg7XG4gIHdpZHRoOiAxMDAlO1xuICAke2EuTWl4aW5zLnNjcm9sbGJhci5iYXNlfTtcbiAgZ2FwOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuYCxjPWkuZGVmYXVsdC5kaXZgXG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9IDBweFxuICAgICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG4gIHdpZHRoOiAxMDAlO1xuYH0sMTI0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNvbGxhcHNpYmxlQ2FyZFN0YXRlbGVzcz10LkNvbGxhcHNpYmxlQ2FyZD12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGk9big2Njg5KSxhPXIobig3NTE4KSksbD1uKDMxMzYpLHM9big5NjM0KSxjPW4oMTMzNSksdT1uKDM5MTEpLGY9big3NzY5KSxkPW4oOTUwNyk7dC5Db2xsYXBzaWJsZUNhcmQ9KDAsaS5mb3J3YXJkUmVmKSgoKGUsbik9Pntjb25zdFtyLGFdPSgwLGkudXNlU3RhdGUpKGUuZXhwYW5kZWR8fCExKTtyZXR1cm4oMCxvLmpzeCkodC5Db2xsYXBzaWJsZUNhcmRTdGF0ZWxlc3MsT2JqZWN0LmFzc2lnbih7fSxlLHtyZWY6bixleHBhbmRlZDpyLG9uRXhwYW5kOmU9PmEoIWUpfSkpfSkpLHQuQ29sbGFwc2libGVDYXJkLmRpc3BsYXlOYW1lPVwiQ29sbGFwc2libGVDYXJkXCIsdC5Db2xsYXBzaWJsZUNhcmRTdGF0ZWxlc3M9KDAsaS5mb3J3YXJkUmVmKSgoKGUsdCk9Pnt2YXIgbixyO3JldHVybigwLG8uanN4cykocCxPYmplY3QuYXNzaWduKHtcImRhdGEtdGVzdGlkXCI6XCJjb2xsYXBzaWJsZS1jYXJkXCJ9LHtjaGlsZHJlbjpbKDAsby5qc3hzKShnLE9iamVjdC5hc3NpZ24oe1wiYXJpYS1leHBhbmRlZFwiOmUuZXhwYW5kZWQsXCJkYXRhLXRlc3RpZFwiOlwiaGVhZGluZy1jb250YWluZXJcIixyZWY6dCx6SW5kZXg6bnVsbD09PShuPWUuaGVhZGVyU2V0dGluZ3MpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLnpJbmRleCxmaXhlZEhlYWRlcjpudWxsPT09KHI9ZS5oZWFkZXJTZXR0aW5ncyl8fHZvaWQgMD09PXI/dm9pZCAwOnIuZml4ZWRIZWFkZXIsb25DbGljazooKT0+ZS5vbkV4cGFuZChlLmV4cGFuZGVkKSx0YWJJbmRleDowLG9uS2V5RG93bjp0PT57c3dpdGNoKHQuY29kZSl7Y2FzZVwiRW50ZXJcIjpjYXNlXCJTcGFjZVwiOnQucHJldmVudERlZmF1bHQoKSxlLm9uRXhwYW5kKGUuZXhwYW5kZWQpfX19LHtjaGlsZHJlbjpbKDAsby5qc3gpKGgse2NoaWxkcmVuOmUudGl0bGV9KSwoMCxvLmpzeHMpKFwiZGl2XCIsT2JqZWN0LmFzc2lnbih7aWQ6XCJpY29uLWNvbnRhaW5lclwifSx7Y2hpbGRyZW46W3ZvaWQgMCE9PWUuYmFkZ2VUZXh0JiYoMCxvLmpzeCkobC5CYWRnZSx7Y291bnQ6ZS5iYWRnZVRleHQsaWQ6XCJjb2xsYXBzaWJsZS1jYXJkLWhlYWRpbmctYmFkZ2VcIixcImRhdGEtdGVzdGlkXCI6XCJjb2xsYXBzaWJsZS1jYXJkLWhlYWRpbmctYmFkZ2VcIn0pLCgwLG8uanN4KShzLkljb24se2ljb246ZS5leHBhbmRlZD9cIkNoZXZyb25VcEljb25cIjpcIkNoZXZyb25Eb3duSWNvblwifSldfSkpXX0pKSxlLmV4cGFuZGVkJiYoMCxvLmpzeCkodS5DYXJkQ29udGFpbmVyLE9iamVjdC5hc3NpZ24oe21heEhlaWdodDplLm1heEhlaWdodHx8XCJub25lXCJ9LHtjaGlsZHJlbjooMCxvLmpzeCkoXCJkaXZcIix7Y2hpbGRyZW46ZS5jaGlsZHJlbn0pfSkpXX0pKX0pKSx0LkNvbGxhcHNpYmxlQ2FyZFN0YXRlbGVzcy5kaXNwbGF5TmFtZT1cIkNvbGxhcHNpYmxlQ2FyZFN0YXRlbGVzc1wiO2NvbnN0IHA9YS5kZWZhdWx0LmRpdmBcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAxMDAlO1xuYCxoPSgwLGEuZGVmYXVsdCkoZi5UZXh0KWBcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gICR7ZC5NaXhpbnMudGV4dE92ZXJmbG93fTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBkaXNwbGF5OiBibG9jaztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbmAsZz0oMCxhLmRlZmF1bHQpKGMuQm94KWBcbiAgcG9zaXRpb246ICR7KHtmaXhlZEhlYWRlcjplfSk9PmU/XCJzdGlja3lcIjpcInJlbGF0aXZlXCJ9O1xuICB0b3A6ICR7KHtmaXhlZEhlYWRlcjplfSk9PmU/MDp2b2lkIDB9O1xuICB6LWluZGV4OiAkeyh7ekluZGV4OmV9KT0+ZX07XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kM307XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDV9O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ1fTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgZ2FwOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBsaW5lLWhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5saW5lSGVpZ2h0LmhlYWRpbmd9O1xuICBvdXRsaW5lOiBub25lO1xuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgdmFyKC0tb3BlbmZpbi11aS1nbG9iYWxUcmFuc2l0aW9uKTtcbiAgd2lkdGg6IDEwMCU7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgI2ljb24tY29udGFpbmVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgbWFyZ2luLWxlZnQ6IDEwcHg7XG4gIH1cblxuICAjY29sbGFwc2libGUtY2FyZC1oZWFkaW5nLWJhZGdlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5fTtcbiAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7XG4gIH1cblxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDJ9O1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDV9O1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDV9O1xuICB9XG5cbiAgJjpmb2N1cyB7XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5ib3JkZXJOZXV0cmFsfTtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJvcmRlck5ldXRyYWx9O1xuICB9XG5gfSw3NDAxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obigxMjQpLHQpfSw5NjQ0OihlLHQpPT57dmFyIG47T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5FeHBhbmREaXJlY3Rpb249dm9pZCAwLChuPXQuRXhwYW5kRGlyZWN0aW9ufHwodC5FeHBhbmREaXJlY3Rpb249e30pKVtuLlVwPTBdPVwiVXBcIixuW24uRG93bj0xXT1cIkRvd25cIn0sNDAyMTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5FeHBhbmRhYmxlQnV0dG9uPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksaT1uKDY2ODkpLGE9big0MTMwKSxsPXIobig3NTE4KSkscz1uKDk2MzQpLGM9big5MTQxKSx1PW4oMzAzMCksZj1uKDEzMzUpLGQ9big5NjQ0KTt0LkV4cGFuZGFibGVCdXR0b249ZT0+e3ZhciB0LG4scixsLHMscDtjb25zdFt3LGJdPSgwLGkudXNlU3RhdGUpKHtzaG93OiExLHJlcXVlc3RlZEJ5Q29sbGFwc2U6ITF9KSx4PXtzaXplOmUuc2l6ZSxraW5kOmUua2luZCxkaXNhYmxlZDplLmRpc2FibGVkLHRhYkluZGV4OmUudGFiSW5kZXh9LF89T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtzaGFwZTphLkJ1dHRvblNoYXBlLnNxdWFyZSxcImFyaWEtbGFiZWxcIjpudWxsIT09KHQ9ZVtcImFyaWEtbGFiZWxcIl0pJiZ2b2lkIDAhPT10P3Q6YFByaW1hcnkgQnV0dG9uICR7ZS50aXRsZX1gfSksTz1udWxsIT09KG49ZS5leHBhbmREaXJlY3Rpb24pJiZ2b2lkIDAhPT1uP246ZC5FeHBhbmREaXJlY3Rpb24uRG93bjtyZXR1cm4oMCxpLnVzZUVmZmVjdCkoKCgpPT57aWYoIXcucmVxdWVzdGVkQnlDb2xsYXBzZSlyZXR1cm47Y29uc3QgZT1zZXRUaW1lb3V0KCgoKT0+Yih7cmVxdWVzdGVkQnlDb2xsYXBzZTohMSxzaG93OiExfSkpLDIwMCk7cmV0dXJuKCk9PmNsZWFyVGltZW91dChlKX0pLFt3LnJlcXVlc3RlZEJ5Q29sbGFwc2VdKSwoMCxvLmpzeHMpKHkse2NoaWxkcmVuOlsoMCxvLmpzeHMpKEMse2NoaWxkcmVuOlsoMCxvLmpzeCkoZyxPYmplY3QuYXNzaWduKHt9LF8se2NoaWxkcmVuOigwLG8uanN4KSh2LHtjaGlsZHJlbjpudWxsIT09KHI9ZS5jaGlsZHJlbikmJnZvaWQgMCE9PXI/cjpfLnRpdGxlfSl9KSksZS5zZWNvbmRhcnlCdXR0b25zJiZlLnNlY29uZGFyeUJ1dHRvbnMubGVuZ3RoPjAmJigwLG8uanN4KShmLkJveCxPYmplY3QuYXNzaWduKHtpZDpcImRyb3Bkb3duLWNvbnRhaW5lclwifSx7Y2hpbGRyZW46KDAsby5qc3hzKShtLE9iamVjdC5hc3NpZ24oe30seCx7cm9sZTpcImNvbWJvYm94XCIsb25DbGljazooKT0+e3cucmVxdWVzdGVkQnlDb2xsYXBzZXx8Yih7cmVxdWVzdGVkQnlDb2xsYXBzZTohMSxzaG93OiF3LnNob3d9KX0sXCJhcmlhLWxhYmVsXCI6XCJFeHBhbmQgU2Vjb25kYXJ5IEJ1dHRvbnMgUGFuZWxcIixcImFyaWEtZXhwYW5kZWRcIjp3LnNob3d9LHtjaGlsZHJlbjpbTz09PWQuRXhwYW5kRGlyZWN0aW9uLkRvd24mJigwLG8uanN4KShoLHtraW5kOm51bGwhPT0obD1lLmtpbmQpJiZ2b2lkIDAhPT1sP2w6YS5CdXR0b25LaW5kLnByaW1hcnksaWNvbjpcIkNhcmV0RG93bkljb25cIn0pLE89PT1kLkV4cGFuZERpcmVjdGlvbi5VcCYmKDAsby5qc3gpKGgse2tpbmQ6bnVsbCE9PShzPWUua2luZCkmJnZvaWQgMCE9PXM/czphLkJ1dHRvbktpbmQucHJpbWFyeSxpY29uOlwiQ2FyZXRVcEljb25cIn0pXX0pKX0pKV19KSxlLnNlY29uZGFyeUJ1dHRvbnMmJmUuc2Vjb25kYXJ5QnV0dG9ucy5sZW5ndGg+MCYmKDAsby5qc3gpKGMuQW5pbWF0ZVByZXNlbmNlLHtjaGlsZHJlbjp3LnNob3cmJigwLG8uanN4KSh1LkV4cGFuZGFibGVQYW5lbCx7ZXhwYW5kRGlyZWN0aW9uOk8sc2Vjb25kYXJ5QnV0dG9uczpudWxsIT09KHA9ZS5zZWNvbmRhcnlCdXR0b25zKSYmdm9pZCAwIT09cD9wOltdLHN0cmV0Y2g6ZS5zdHJldGNoRXhwYW5kYWJsZVBhbmVsLGNsb3NlUGFuZWxPblNlY29uZGFyeUJ1dHRvbkNsaWNrOmUuY2xvc2VQYW5lbE9uU2Vjb25kYXJ5QnV0dG9uQ2xpY2ssb25Db2xsYXBzZVJlcXVlc3Q6KCk9PmIoe3Nob3c6ITEscmVxdWVzdGVkQnlDb2xsYXBzZTohMH0pLGJ1dHRvblNpemU6ZS5zaXplLGRvY3VtZW50OmUuZG9jdW1lbnR9KX0pXX0pfTtjb25zdCBwPXtbYS5CdXR0b25LaW5kLnByaW1hcnldOmU9PmUucGFsZXR0ZS5icmFuZFByaW1hcnlUZXh0LFthLkJ1dHRvbktpbmQuc2Vjb25kYXJ5XTplPT5lLnBhbGV0dGUuYnJhbmRTZWNvbmRhcnlUZXh0LFthLkJ1dHRvbktpbmQudGV4dE9ubHldOmU9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH0saD0oMCxsLmRlZmF1bHQpKHMuSWNvbilgXG4gIHN2ZyBwYXRoIHtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmUsa2luZDp0fSk9PnBbdF0oZSl9O1xuICB9XG4gIGxpbmUtaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmxpbmVIZWlnaHQudWl9O1xuICBmb250LXdlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5mb250V2VpZ2h0LmJvbGR9O1xuYCxnPSgwLGwuZGVmYXVsdCkoYS5CdXR0b24pYFxuICBtYXJnaW4tcmlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHgueHNtYWxsfTtcbmAsdj0oMCxsLmRlZmF1bHQpKGYuQm94KWBcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuYCxtPSgwLGwuZGVmYXVsdCkoYS5CdXR0b24pYFxuICB3aWR0aDogJHtlPT5lLnRoZW1lLnB4Lnh4bGFyZ2V9O1xuICBwYWRkaW5nOiAwO1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbmAsQz1sLmRlZmF1bHQuZGl2YFxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuYCx5PWwuZGVmYXVsdC5kaXZgXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuYH0sMjEyODooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5zZXR1cEV4cGFuZGFibGVQYW5lbD12b2lkIDA7Y29uc3Qgcj1uKDk2NDQpO3Quc2V0dXBFeHBhbmRhYmxlUGFuZWw9KGUsdCxuPSExKT0+e2lmKCFlfHwwPT09ZS5jaGlsZE5vZGVzLmxlbmd0aClyZXR1cm47Y29uc3Qgbz1lLnBhcmVudEVsZW1lbnQsaT1udWxsPT1vP3ZvaWQgMDpvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGE9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZighaSlyZXR1cm47Y29uc3QgbD1hLmhlaWdodCxzPWEud2lkdGg8PWkud2lkdGh8fG4/YS53aWR0aDppLndpZHRoLGM9aS54K3M+ZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aHx8czxpLndpZHRoO2Uuc3R5bGUud2lkdGg9YCR7c31weGAsZS5zdHlsZS5vcGFjaXR5PVwiMVwiLGM/ZS5zdHlsZS5yaWdodD1cIjBweFwiOmUuc3R5bGUubGVmdD1cIjBweFwiLHQ9PT1yLkV4cGFuZERpcmVjdGlvbi5Eb3duJiYoZS5zdHlsZS50b3A9YCR7aS5oZWlnaHR9cHhgKSx0PT09ci5FeHBhbmREaXJlY3Rpb24uVXAmJihlLnN0eWxlLnRvcD0tMSpsK1wicHhcIil9fSwzMDMwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkV4cGFuZGFibGVQYW5lbD12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGk9cihuKDc1MTgpKSxhPW4oOTE0MSksbD1uKDQxMzApLHM9bigxMzM1KSxjPW4oMjEyOCksdT1yKG4oNDQ4MykpLGY9e3R5cGU6XCJzcHJpbmdcIixkdXJhdGlvbjouMixib3VuY2U6LjI1fTt0LkV4cGFuZGFibGVQYW5lbD1lPT57dmFyIHQ7Y29uc3Qgbj1gJHtlLnBhbmVsSWR9LWV4cGFuZGFibGUtcGFuZWxgO3JldHVybigwLG8uanN4KSh1LmRlZmF1bHQsT2JqZWN0LmFzc2lnbih7Zm9jdXNUcmFwT3B0aW9uczp7ZmFsbGJhY2tGb2N1czpgIyR7bn1gLGNsaWNrT3V0c2lkZURlYWN0aXZhdGVzOiEwLG9uRGVhY3RpdmF0ZTplLm9uQ29sbGFwc2VSZXF1ZXN0LGluaXRpYWxGb2N1czohMSxkb2N1bWVudDplLmRvY3VtZW50LHJldHVybkZvY3VzT25EZWFjdGl2YXRlOiExfX0se2NoaWxkcmVuOigwLG8uanN4KShoLE9iamVjdC5hc3NpZ24oe3JlZjp0PT4oMCxjLnNldHVwRXhwYW5kYWJsZVBhbmVsKSh0LGUuZXhwYW5kRGlyZWN0aW9uLGUuc3RyZXRjaCksdGFiSW5kZXg6MCxpZDpuLGluaXRpYWw6XCJpbml0aWFsXCIsZXhpdDpcImhpZGRlblwiLGJ1dHRvblNpemU6bnVsbCE9PSh0PWUuYnV0dG9uU2l6ZSkmJnZvaWQgMCE9PXQ/dDpsLkJ1dHRvblNpemUuYmFzZSxhbmltYXRlOlwidmlzaWJsZVwiLHJvbGU6XCJtZW51XCIsdHJhbnNpdGlvbjpmLG9uTW91c2VPdmVyOigpPT57dmFyIGU7cmV0dXJuIG51bGw9PT0oZT1kb2N1bWVudC5hY3RpdmVFbGVtZW50KXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5ibHVyKCl9fSx7Y2hpbGRyZW46ZS5zZWNvbmRhcnlCdXR0b25zLm1hcCgoKHQsbik9PigwLG8uanN4KShsLkJ1dHRvbixPYmplY3QuYXNzaWduKHtjbGFzc05hbWU6XCJtZW51LWl0ZW1cIix0YWJJbmRleDpuKzEsdGl0bGU6dC50aXRsZSxyb2xlOlwibWVudWl0ZW1cIixzaXplOmUuYnV0dG9uU2l6ZSxkaXNhYmxlZDp0LmRpc2FibGVkLGtpbmQ6XCJ0ZXh0T25seVwiLG9uQ2xpY2s6bj0+KCh0LG4pPT57ZS5jbG9zZVBhbmVsT25TZWNvbmRhcnlCdXR0b25DbGljaz8obi5vbkNsaWNrKHQpLGUub25Db2xsYXBzZVJlcXVlc3QoKSk6bi5vbkNsaWNrKHQsKCgpPT5lLm9uQ29sbGFwc2VSZXF1ZXN0KCkpKX0pKG4sdCksXCJhcmlhLWxhYmVsXCI6dC50aXRsZX0se2NoaWxkcmVuOigwLG8uanN4KShkLE9iamVjdC5hc3NpZ24oe1wiYXJpYS1sYWJlbFwiOnQudGl0bGV9LHtjaGlsZHJlbjp0LnRpdGxlfSkpfSksbikpKX0pLFwiZXhwYW5kYWJsZVBhbmVsXCIpfSkpfTtjb25zdCBkPSgwLGkuZGVmYXVsdCkocy5Cb3gpYFxuICBwYWRkaW5nLWJvdHRvbTogMXB4O1xuICBwYWRkaW5nLXRvcDogMXB4O1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgZGlzcGxheTogYmxvY2s7XG4gIG92ZXJmbG93OiBoaWRkZW47XG5gLHA9e1tsLkJ1dHRvblNpemUuc21hbGxdOmU9PmUucHguc21hbGwsW2wuQnV0dG9uU2l6ZS5iYXNlXTplPT5lLnB4LmJhc2UsW2wuQnV0dG9uU2l6ZS5sYXJnZV06ZT0+ZS5weC5sYXJnZX0saD0oMCxpLmRlZmF1bHQpKGEubW90aW9uLmRpdilgXG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbiAgb3BhY2l0eTogMDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206ICR7ZT0+ZS50aGVtZS5weC54eHhsYXJnZX07XG4gIG1heC13aWR0aDogbWF4LWNvbnRlbnQ7XG4gIG1pbi13aWR0aDogODBweDtcbiAgYmFja2dyb3VuZDogJHtlPT5lLnRoZW1lLnBhbGV0dGUuYmFja2dyb3VuZDR9O1xuICBib3gtc2hhZG93OiAke2U9PmUudGhlbWUuc2hhZG93LmJhc2V9O1xuICBoZWlnaHQ6IG1heC1jb250ZW50O1xuICB6LWluZGV4OiAxMDA7XG5cbiAgLm1lbnUtaXRlbSB7XG4gICAgYm9yZGVyLXJhZGl1czogdW5zZXQ7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICBib3JkZXI6IHRyYW5zcGFyZW50O1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG92ZXJmbG93OiBjbGlwO1xuICAgICYgPiAqIHtcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgfVxuICAgIGZvbnQtd2VpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRXZWlnaHQubm9ybWFsfTtcbiAgICBwYWRkaW5nLXRvcDogJHsoe3RoZW1lOmUsYnV0dG9uU2l6ZTp0fSk9PnBbdF0oZSl9O1xuICAgIHBhZGRpbmctYm90dG9tOiAkeyh7dGhlbWU6ZSxidXR0b25TaXplOnR9KT0+cFt0XShlKX07XG4gICAgcGFkZGluZy1sZWZ0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcblxuICAgIDpmaXJzdC1jaGlsZCB7XG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMuc21hbGx9O1xuICAgIH1cblxuICAgIDpsYXN0LWNoaWxkIHtcbiAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG4gICAgfVxuXG4gICAgJjpmb2N1cyxcbiAgICAmOmhvdmVyIHtcbiAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgYmFja2dyb3VuZDogJHtlPT5lLnRoZW1lLnBhbGV0dGUuYmFja2dyb3VuZDJ9O1xuICAgIH1cblxuICAgICY6ZGlzYWJsZWQsXG4gICAgJjphY3RpdmU6ZGlzYWJsZWQge1xuICAgICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0SW5hY3RpdmV9O1xuICAgICAgYmFja2dyb3VuZDogJHtlPT5lLnRoZW1lLnBhbGV0dGUuYmFja2dyb3VuZDR9O1xuICAgICAgb3BhY2l0eTogdW5zZXQ7XG4gICAgfVxuICB9XG5gfSw0OTI1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig0MDIxKSx0KSxvKG4oOTY0NCksdCl9LDk2NTQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ29udGVudE1lbnU9dC5maW5kUGF0aFRvSXRlbVdpdGhJZD12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGk9big2Njg5KSxhPW4oMzEzNyksbD1yKG4oNzUxOCkpLHM9bigxMzM1KTt0LmZpbmRQYXRoVG9JdGVtV2l0aElkPShlLG4scik9PntpZihlLmlkPT09cilyZXR1cm4gbjtpZihlLmNoaWxkcmVuKWZvcihsZXQgbz0wO288ZS5jaGlsZHJlbi5sZW5ndGg7KytvKXtjb25zdCBpPWUuY2hpbGRyZW5bb107bi5wdXNoKGkuaWQpO2NvbnN0IGE9KDAsdC5maW5kUGF0aFRvSXRlbVdpdGhJZCkoaSxuLHIpO2lmKGEpcmV0dXJuIGE7bi5wb3AoKX19LHQuQ29udGVudE1lbnU9KHtzdHJ1Y3R1cmU6ZSxoYW5kbGVDbGlja0l0ZW06bixoYW5kbGVCb29rbWFya0l0ZW06cix0YXJnZXRJZDpsfSk9Pntjb25zdFtzLHVdPSgwLGkudXNlU3RhdGUpKFtdKSxbZixkXT0oMCxpLnVzZVN0YXRlKSgpLHA9KDAsaS51c2VSZWYpKG51bGwpLGg9KDAsaS51c2VDYWxsYmFjaykoKCgpPT57cC5jdXJyZW50JiZwLmN1cnJlbnQuc2Nyb2xsVG8oe2xlZnQ6cC5jdXJyZW50LnNjcm9sbFdpZHRoLGJlaGF2aW9yOlwic21vb3RoXCJ9KX0pLFtdKTtyZXR1cm4oMCxpLnVzZUVmZmVjdCkoKCgpPT57aWYobCl7Y29uc3Qgbj0oMCx0LmZpbmRQYXRoVG9JdGVtV2l0aElkKSh7aWQ6XCJcIixjaGlsZHJlbjplfSxbXSxsKTtpZihuKXJldHVybiB1KG4pLHZvaWQgZChgY29udGVudC1tZW51LWl0ZW0tJHtsfWApfWQodm9pZCAwKX0pLFtsXSksKDAsaS51c2VFZmZlY3QpKCgoKT0+e2goKX0pLFtzXSksKDAsby5qc3gpKGMsT2JqZWN0LmFzc2lnbih7cmVmOnB9LHtjaGlsZHJlbjooMCxvLmpzeCkoYS5Db250ZW50TWVudUNvbHVtbix7ZW50cmllczplLGRlcHRoOjAscGF0aDpzLHRhcmdldEl0ZW1JZDpmLHNldEN1cnJlbnRseVNlbGVjdGVkUGF0aDp1LGhhbmRsZUNsaWNrSXRlbTpuLGhhbmRsZUJvb2ttYXJrSXRlbTpyfSl9KSl9O2NvbnN0IGM9KDAsbC5kZWZhdWx0KShzLkJveClgXG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDEwMCU7XG5cbiAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQxfTtcbiAgZGlzcGxheTogZmxleDtcblxuICBvdmVyZmxvdy14OiBhdXRvO1xuICBvdmVyZmxvdy15OiBoaWRkZW47XG5gfSwzMTM3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNvbnRlbnRNZW51Q29sdW1uPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksaT1yKG4oNzUxOCkpLGE9big2NzU4KSxsPW4oNjY4OSkscz1uKDI2NTkpO3QuQ29udGVudE1lbnVDb2x1bW49KHtlbnRyaWVzOmUsZGVwdGg6bixwYXRoOnIsdGFyZ2V0SXRlbUlkOmksc2V0Q3VycmVudGx5U2VsZWN0ZWRQYXRoOmEsaGFuZGxlQ2xpY2tJdGVtOmYsaGFuZGxlQm9va21hcmtJdGVtOmR9KT0+e2NvbnN0IHA9KDAsbC51c2VSZWYpKG51bGwpLGg9cltuXSxnPWg/ZS5maW5kKChlPT5lLmlkPT09aCkpOnZvaWQgMDsoMCxsLnVzZUVmZmVjdCkoKCgpPT57aWYoaSYmZyl7Y29uc3QgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChgY29udGVudC1tZW51LWl0ZW0tJHtnLmlkfWApO2lmKGUmJnAuY3VycmVudCl7Y29uc3QgdD1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcC1wLmN1cnJlbnQuY2hpbGRyZW5bMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO3AuY3VycmVudC5zY3JvbGxUbyh7dG9wOnQsYmVoYXZpb3I6XCJzbW9vdGhcIn0pfX19KSxbaV0pO2NvbnN0IHY9KDAsbC51c2VDYWxsYmFjaykoKGU9PnthKCh0PT5lPyh0W25dPWUsdC5zbGljZSgwLG4rMSkpOnQuc2xpY2UoMCxuKSkpfSksW10pO3JldHVybigwLG8uanN4cykoby5GcmFnbWVudCx7Y2hpbGRyZW46WygwLG8uanN4KShjLE9iamVjdC5hc3NpZ24oe3JlZjpwfSx7Y2hpbGRyZW46ZS5sZW5ndGg+MD8oMCxvLmpzeCkoXCJkaXZcIix7Y2hpbGRyZW46ZS5tYXAoKGU9PigwLG8uanN4KShzLkNvbnRlbnRNZW51SXRlbSx7ZW50cnk6ZSxhY3RpdmU6XCJmb2xkZXJcIj09PWUudHlwZSYmZS5pZD09PWgsaGFuZGxlQ2xpY2s6ZT0+e1wiZm9sZGVyXCI9PT1lLnR5cGU/dihlLmlkKTpmKGUpfSxoYW5kbGVCb29rbWFyazpkfSxlLmlkKSkpfSk6KDAsby5qc3gpKHUse2NoaWxkcmVuOlwiTm8gY29udGVudCBhdmFpbGFibGUuXCJ9KX0pKSxnJiZcImZvbGRlclwiPT09Zy50eXBlJiYoMCxvLmpzeCkodC5Db250ZW50TWVudUNvbHVtbix7ZW50cmllczpnLmNoaWxkcmVuLGRlcHRoOm4rMSxwYXRoOnIsdGFyZ2V0SXRlbUlkOmksc2V0Q3VycmVudGx5U2VsZWN0ZWRQYXRoOmEsaGFuZGxlQ2xpY2tJdGVtOmYsaGFuZGxlQm9va21hcmtJdGVtOmR9KV19KX07Y29uc3QgYz0oMCxpLmRlZmF1bHQpKGEuTWVudUZyYW1lKWBcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMjQxcHg7XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmUucHgueHNtYWxsfTtcbiAgb3ZlcmZsb3cteTogYXV0bztcblxuICBwb3NpdGlvbjogdW5zZXQ7XG4gIGZsZXgtc2hyaW5rOiAwO1xuXG4gIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNX07XG5gLHU9aS5kZWZhdWx0LmRpdmBcbiAgaGVpZ2h0OiAxMDAlO1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuXG4gIHVzZXItc2VsZWN0OiBub25lO1xuYH0sMjY1OTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnR9KX06ZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dH0pLGk9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiIT09biYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnIodCxlLG4pO3JldHVybiBvKHQsZSksdH07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Db250ZW50TWVudUl0ZW09dm9pZCAwO2NvbnN0IGE9big1ODkzKSxsPWkobig3NTE4KSkscz1uKDY3NTgpLGM9big5NjM0KSx1PW4oMTAwOSk7dC5Db250ZW50TWVudUl0ZW09KHtlbnRyeTplLGFjdGl2ZTp0LGhhbmRsZUNsaWNrOm4saGFuZGxlQm9va21hcms6cn0pPT57Y29uc3R7bGFiZWw6byx0eXBlOml9PWU7cmV0dXJuKDAsYS5qc3hzKShwLE9iamVjdC5hc3NpZ24oe2lkOmBjb250ZW50LW1lbnUtaXRlbS0ke2UuaWR9YCxvbkNsaWNrOigpPT5uKGUpLGFjdGl2ZTp0fSx7Y2hpbGRyZW46W1wiaXRlbVwiPT09aSYmKDAsYS5qc3gpKHUuSWNvbldpdGhGYWxsYmFjayx7aWNvblVybDplLmljb259KSwoMCxhLmpzeCkoZixPYmplY3QuYXNzaWduKHtzaXplOlwiYmFzZVwiLHdlaWdodDpcIm5vcm1hbFwifSx7Y2hpbGRyZW46b30pKSwoMCxhLmpzeCkoZCxPYmplY3QuYXNzaWduKHtzaWRlOlwicmlnaHRcIixib29rbWFya2VkOmUuYm9va21hcmtlZCxvbkNsaWNrOnQ9PntudWxsPT10fHx0LnN0b3BQcm9wYWdhdGlvbigpLHImJnIoZSl9LFwiZGF0YS10ZXN0aWRcIjpgY29udGVudC1tZW51LWl0ZW0tJHtlLmlkfS1ib29rbWFyay1pY29uYH0se2NoaWxkcmVuOmUuYm9va21hcmtlZD8oMCxhLmpzeCkoYy5JY29uLHtpY29uOlwiU3RhckZpbGxlZEljb25cIn0pOigwLGEuanN4KShjLkljb24se2ljb246XCJTdGFySWNvblwifSl9KSksXCJmb2xkZXJcIj09PWkmJigwLGEuanN4KShzLk1lbnVJdGVtSWNvbkNvbnRhaW5lcixPYmplY3QuYXNzaWduKHtzaWRlOlwicmlnaHRcIixcImRhdGEtdGVzdGlkXCI6YGNvbnRlbnQtbWVudS1pdGVtLSR7ZS5pZH0tY2hldnJvbi1pY29uYH0se2NoaWxkcmVuOigwLGEuanN4KShzLk1lbnVJdGVtUmlnaHRJY29uLHtpY29uOlwiQ2hldnJvblJpZ2h0SWNvblwifSl9KSldfSkpfTtjb25zdCBmPSgwLGwuZGVmYXVsdCkocy5NZW51SXRlbVRleHQpYFxuICBwYWRkaW5nLXJpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmxhcmdlfTtcbmAsZD0oMCxsLmRlZmF1bHQpKHMuTWVudUl0ZW1JY29uQ29udGFpbmVyKWBcbiAgJHsoe2Jvb2ttYXJrZWQ6ZX0pPT5lP2wuY3NzYFxuICAgICAgICAgICYgKyAke3MuTWVudUl0ZW1JY29uQ29udGFpbmVyfSB7XG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogdW5zZXQ7XG4gICAgICAgICAgfVxuICAgICAgICBgOmwuY3NzYFxuICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIGB9O1xuXG4gIHN2ZyB7XG4gICAgaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmxhcmdlfTtcbiAgICB3aWR0aDogJHsoe3RoZW1lOmV9KT0+ZS5weC5sYXJnZX07XG4gIH1cbmAscD0oMCxsLmRlZmF1bHQpKHMuTWVudUl0ZW1Jbm5lckNvbnRhaW5lcilgXG4gICR7KHt0aGVtZTplLGFjdGl2ZTp0fSk9PnQmJmwuY3NzYFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLnBhbGV0dGUuYmFja2dyb3VuZDN9O1xuICAgIGB9XG5cbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQyfTtcblxuICAgICR7ZH0ge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuXG4gICAgJHtkfSArICR7cy5NZW51SXRlbUljb25Db250YWluZXJ9IHtcbiAgICAgIG1hcmdpbi1sZWZ0OiB1bnNldDtcbiAgICB9XG4gIH1cbmB9LDEwMDk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuSWNvbldpdGhGYWxsYmFjaz12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGk9cihuKDc1MTgpKSxhPW4oOTEwNiksbD1uKDk2MzQpO3QuSWNvbldpdGhGYWxsYmFjaz0oe2ljb25Vcmw6ZSxhbHQ6dH0pPT57Y29uc3Qgbj0oMCxhLnVzZUltYWdlTG9hZGVyKShlKTtyZXR1cm5cImVycm9yXCI9PT1uPygwLG8uanN4KShzLHtjaGlsZHJlbjooMCxvLmpzeCkobC5JY29uLHtpY29uOlwiRmFsbGJhY2tHbG9iZUljb25cIn0pfSk6XCJsb2FkaW5nXCI9PT1uPygwLG8uanN4KShjLHt9KTooMCxvLmpzeCkodSx7c3JjOmUsYWx0OnR9KX07Y29uc3Qgcz1pLmRlZmF1bHQuZGl2YFxuICBoZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHgubGFyZ2V9O1xuICB3aWR0aDogJHsoe3RoZW1lOmV9KT0+ZS5weC5sYXJnZX07XG4gIG1hcmdpbi1sZWZ0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcblxuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG5gLGM9aS5kZWZhdWx0LmRpdmBcbiAgaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmxhcmdlfTtcbiAgd2lkdGg6ICR7KHt0aGVtZTplfSk9PmUucHgubGFyZ2V9O1xuICBtYXJnaW4tbGVmdDogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG5gLHU9aS5kZWZhdWx0LmltZ2BcbiAgaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmxhcmdlfTtcbiAgd2lkdGg6ICR7KHt0aGVtZTplfSk9PmUucHgubGFyZ2V9O1xuICBtYXJnaW4tbGVmdDogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG5cbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMuc21hbGx9O1xuXG4gIHVzZXItc2VsZWN0OiBub25lO1xuYH0sOTEwNjooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VJbWFnZUxvYWRlcj12b2lkIDA7Y29uc3Qgcj1uKDY2ODkpO3QudXNlSW1hZ2VMb2FkZXI9ZT0+e2NvbnN0W3Qsbl09KDAsci51c2VTdGF0ZSkoXCJsb2FkaW5nXCIpO3JldHVybigwLHIudXNlRWZmZWN0KSgoKCk9PntpZighZSlyZXR1cm4gdm9pZCBuKFwiZXJyb3JcIik7bihcImxvYWRpbmdcIik7Y29uc3QgdD1uZXcgSW1hZ2Uscj0oKT0+e24oXCJzdWNjZXNzXCIpfSxvPSgpPT57bihcImVycm9yXCIpfTtyZXR1cm4gdC5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLHIpLHQuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsbyksdC5zcmM9ZSwoKT0+e3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImxvYWRcIixyKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLG8pfX0pLFtlXSksdH19LDdlMzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oOTY1NCksdCl9LDQ0NzE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ3VzdG9tQ29udGV4dE1lbnU9dC5DT05URVhUX01FTlVfQU5JTUFUSU9OX0RVUkFUSU9OPXQuUFJJT1JfQ09OVEVYVF9NRU5VX0NMQVNTPXQuQkFTRV9DT05URVhUX01FTlU9dC5BQ1RJVkVfQ09OVEVYVF9NRU5VX0NMQVNTPXQuQ09OVEVYVF9NRU5VX0ZSQU1FX0lEPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksaT1uKDY2ODkpLGE9cihuKDc1MTgpKSxsPW4oMjg1MCkscz1uKDg4OTkpLGM9big5NDc4KSx1PW4oMjQyMSksZj1uKDQ1NzEpLGQ9bigyODM4KSxwPW4oNjc1OCk7dC5DT05URVhUX01FTlVfRlJBTUVfSUQ9XCJjb250ZXh0X21lbnVfZnJhbWVcIix0LkFDVElWRV9DT05URVhUX01FTlVfQ0xBU1M9XCJhY3RpdmVfY29udGV4dF9tZW51XCIsdC5CQVNFX0NPTlRFWFRfTUVOVT1cImJhc2VfY29udGV4dF9tZW51XCIsdC5QUklPUl9DT05URVhUX01FTlVfQ0xBU1M9XCJwcmV2aW91c19jb250ZXh0X21lbnVcIix0LkNPTlRFWFRfTUVOVV9BTklNQVRJT05fRFVSQVRJT049MjAwLHQuQ3VzdG9tQ29udGV4dE1lbnU9KHttZW51VGVtcGxhdGU6ZSxvbkNsaWNrOm4saWNvbjpyLG9uTWVudVJlc2l6ZTphLG9uQ29udGV4dE1lbnVSZWFkeTpwLGlzV2luZG93czp2PSEwfSk9Pnt2YXIgbTtjb25zdCBDPSgwLGkudXNlUmVmKShudWxsKSxbeSx3XT0oMCxpLnVzZVN0YXRlKSghMSksW2IseF09KDAsaS51c2VTdGF0ZSkoe3dpZHRoOjE2MCxoZWlnaHQ6MTYwfSksW18sT109KDAsaS51c2VTdGF0ZSkoMCksW0wsRV09KDAsaS51c2VTdGF0ZSkoW10pLFtTLGpdPSgwLGkudXNlU3RhdGUpKCksW00sa109KDAsaS51c2VTdGF0ZSkoW10pLFtSLFBdPSgwLGkudXNlU3RhdGUpKGUubWFwKChlPT5lLmxhYmVsfHxcIlwiKSkpLFtJLEFdPSgwLGkudXNlU3RhdGUpKC0xKTsoMCxpLnVzZUVmZmVjdCkoKCgpPT57UChlLm1hcCgoZT0+ZS5sYWJlbHx8XCJcIikpKSxBKFIuZmluZEluZGV4KChlPT5lPT09UykpKX0pLFtlXSk7Y29uc3R7d2lkdGg6VCxoZWlnaHQ6SH09KDAscy51c2VSZXNpemVDb250ZXh0TWVudSkoUykse2hhbmRsZU5hdmlnYXRlVG9TdWJtZW51OkIsaGFuZGxlTmF2aWdhdGVCYWNrVG9QYXJlbnQ6VixoYW5kbGVOYXZpZ2F0ZVRvQmFzZTpEfT0oMCx1LnVzZUNvbnRleHRNZW51TmF2aWdhdGlvbikoXyxPLE0sayxTLGoseCxBLEwsYSk7cmV0dXJuKDAsaS51c2VFZmZlY3QpKCgoKT0+e0UoKDAsYy5nZXRNZW51TmF2aWdhdGlvbk9yZGVyKShlKSksaih0LkJBU0VfQ09OVEVYVF9NRU5VKSxrKFtdKSx4KHt3aWR0aDpULGhlaWdodDpIfSl9KSxbZV0pLCgwLGYudXNlQ29udGV4dE1lbnVLZXlib2FyZE5hdmlnYXRpb24pKG51bGw9PT0obT1MLmZpbmQoKGU9PmUucGFyZW50TGFiZWw9PT1TKSkpfHx2b2lkIDA9PT1tP3ZvaWQgMDptLm1lbnVUZW1wbGF0ZSxNLFMsSSxBLG4sQixWLEQpLCgwLGkudXNlRWZmZWN0KSgoKCk9PntDLmN1cnJlbnQmJih5fHwocCYmcCgpLHcoITApKSl9KSxbQy5jdXJyZW50XSksKDAsby5qc3gpKGgsT2JqZWN0LmFzc2lnbih7aWQ6dC5DT05URVhUX01FTlVfRlJBTUVfSUQsdHJhbnNpdGlvblNwZWVkOl8saXNXaW5kb3dzOnZ9LHtjaGlsZHJlbjpMLm1hcCgoKHtwYXJlbnRMYWJlbDplLG1lbnVUZW1wbGF0ZTppfSk9PigwLG8uanN4KShcImRpdlwiLE9iamVjdC5hc3NpZ24oe3JlZjplPT09Uz9DOnZvaWQgMH0se2NoaWxkcmVuOigwLG8uanN4cykoZyxPYmplY3QuYXNzaWduKHtjbGFzc05hbWU6KDAsYy5nZXRDbGFzc05hbWUpKGUsUyxNKSxhY3RpdmVNZW51V2lkdGg6Yi53aWR0aCx0cmFuc2l0aW9uU3BlZWQ6XyxpZDplfSx7Y2hpbGRyZW46W2UhPT10LkJBU0VfQ09OVEVYVF9NRU5VPygwLG8uanN4KShsLkN1c3RvbUNvbnRleHRNZW51SXRlbSx7dHlwZTpcInN1Ym1lbnVIZWFkZXJcIixsYWJlbDplLG9uQmFjazooKT0+VihlLFwiY2xpY2tcIiksb25DbG9zZTpELHNob3dTaG91bGRIb21lQnV0dG9uOk0uc2xpY2UoMikuaW5jbHVkZXMoZSl8fE0ubGVuZ3RoPj0yJiZTPT09ZSxzZWxlY3RlZDotMT09PUl9LGAke2V9LXN1Ym1lbnUtaGVhZGVyYCk6ciYmKDAsby5qc3gpKGQuUm9vdE1lbnVIZWFkZXIse2ljb246cn0pLGkubWFwKCgodCxyKT0+KDAsby5qc3gpKGwuQ3VzdG9tQ29udGV4dE1lbnVJdGVtLE9iamVjdC5hc3NpZ24oe29uQ2xpY2s6KCk9Pnt0Lmhhc1N1Yk1lbnU/Qih0LmxhYmVsfHxcIlwiKTpuKHQuZGF0YSksQSgtMil9fSx0LHtzdWJtZW51OnQuaGFzU3ViTWVudSxzZWxlY3RlZDpJPT09cn0pLGAke2V9LSR7dC5sYWJlbH0tJHtyfWApKSldfSkpfSksZSkpKX0pKX07Y29uc3QgaD1hLmRlZmF1bHQuZGl2YFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1pbi13aWR0aDogZml0LWNvbnRlbnQ7XG4gIG1pbi1oZWlnaHQ6IGZpdC1jb250ZW50O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kMX07XG4gIHRyYW5zaXRpb246ICR7KHt0cmFuc2l0aW9uU3BlZWQ6ZX0pPT5gYWxsICR7ZX1tcyBsaW5lYXJgfTtcbiAgYm9yZGVyOiAkeyh7dGhlbWU6ZSxpc1dpbmRvd3M6dH0pPT50JiZgMXB4IHNvbGlkICR7ZS5wYWxldHRlLmJhY2tncm91bmQzfWB9O1xuICBib3JkZXItcmFkaXVzOiAkeyh7aXNXaW5kb3dzOmV9KT0+IWUmJlwiMTBweFwifTtcbmAsZz0oMCxhLmRlZmF1bHQpKHAuTWVudUZyYW1lKWBcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKCR7KHthY3RpdmVNZW51V2lkdGg6ZX0pPT5gJHtlfXB4YH0pO1xuICB0cmFuc2l0aW9uOiAkeyh7dHJhbnNpdGlvblNwZWVkOmV9KT0+YGFsbCAke2V9bXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuNTgsIDEpYH07XG4gIG9wYWNpdHk6IDAlO1xuXG4gICYuYWN0aXZlX2NvbnRleHRfbWVudSB7XG4gICAgdHJhbnNmb3JtOiB1bnNldDtcbiAgICBvcGFjaXR5OiAxMDAlO1xuICB9XG5cbiAgJi5wcmV2aW91c19jb250ZXh0X21lbnUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTAwJSk7XG4gICAgb3BhY2l0eTogMCU7XG4gIH1cbmB9LDI4NTA6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ3VzdG9tQ29udGV4dE1lbnVJdGVtPXZvaWQgMDtjb25zdCByPW4oNjY4OSksbz1uKDk1MzcpLGk9bigxNTc3KSxhPW4oNzUwMCksbD17bm9ybWFsOmkuTm9ybWFsQ3VzdG9tQ29udGV4dE1lbnVJdGVtLGNoZWNrYm94OmkuTm9ybWFsQ3VzdG9tQ29udGV4dE1lbnVJdGVtLHN1Ym1lbnU6aS5Ob3JtYWxDdXN0b21Db250ZXh0TWVudUl0ZW0sc2VwYXJhdG9yOm8uU2VwYXJhdG9yQ3VzdG9tQ29udGV4dE1lbnVJdGVtLHN1Ym1lbnVIZWFkZXI6YS5TdWJtZW51SGVhZGVyQ3VzdG9tQ29udGV4dE1lbnVJdGVtfTt0LkN1c3RvbUNvbnRleHRNZW51SXRlbT0oe3R5cGU6ZT1cIm5vcm1hbFwiLGljb246dCxsYWJlbDpuLGVuYWJsZWQ6bz0hMCxjaGVja2VkOmksc3VibWVudTphLHNob3dTaG91bGRIb21lQnV0dG9uOnMsb25DbGljazpjLG9uQ2xvc2U6dSxvbkJhY2s6ZixzZWxlY3RlZDpkfSk9Pntjb25zdCBwPWxbZV07bGV0IGg7c3dpdGNoKGUpe2Nhc2VcIm5vcm1hbFwiOmNhc2VcImNoZWNrYm94XCI6aD17dHlwZTplLGxhYmVsOm4saWNvbjp0LGVuYWJsZWQ6byxjaGVja2VkOmksc2VsZWN0ZWQ6ZH07YnJlYWs7Y2FzZVwic3VibWVudVwiOmg9e2xhYmVsOm4sZW5hYmxlZDpvLGNoZWNrZWQ6aSxzdWJtZW51OmEsc2VsZWN0ZWQ6ZH07YnJlYWs7Y2FzZVwic3VibWVudUhlYWRlclwiOmg9e2xhYmVsOm4sc2hvd1Nob3VsZEhvbWVCdXR0b246cyxvbkNsb3NlOnUsb25CYWNrOmYsc2VsZWN0ZWQ6ZH07YnJlYWs7Y2FzZVwic2VwYXJhdG9yXCI6aD17fX1yZXR1cm4oMCxyLmNyZWF0ZUVsZW1lbnQpKHAsT2JqZWN0LmFzc2lnbih7fSxoLHtrZXk6bixvbkNsaWNrOmN9KSl9fSwxNTc3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lk5vcm1hbEN1c3RvbUNvbnRleHRNZW51SXRlbT12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGk9cihuKDc1MTgpKSxhPW4oOTYzNCksbD1uKDY3NTgpO3QuTm9ybWFsQ3VzdG9tQ29udGV4dE1lbnVJdGVtPSh7dHlwZTplLGxhYmVsOnQsZW5hYmxlZDpuPSEwLGNoZWNrZWQ6cixzdWJtZW51Omksb25DbGljazphLHNlbGVjdGVkOmN9KT0+KDAsby5qc3gpKGwuTWVudUl0ZW1Db250YWluZXIse2NoaWxkcmVuOigwLG8uanN4cykobC5NZW51SXRlbUlubmVyQ29udGFpbmVyLE9iamVjdC5hc3NpZ24oe29uQ2xpY2s6bj9hOnZvaWQgMCxlbmFibGVkOm4udG9TdHJpbmcoKSxzZWxlY3RlZDpjfSx7Y2hpbGRyZW46W1wiY2hlY2tib3hcIj09PWUmJigwLG8uanN4KShsLk1lbnVJdGVtSWNvbkNvbnRhaW5lcixPYmplY3QuYXNzaWduKHtzaWRlOlwibGVmdFwifSx7Y2hpbGRyZW46KDAsby5qc3gpKHMse2ljb246XCJDaGVja0ljb25cIixlbmFibGVkOm4udG9TdHJpbmcoKSxjaGVja2VkOnJ9KX0pKSwoMCxvLmpzeCkobC5NZW51SXRlbVRleHQsT2JqZWN0LmFzc2lnbih7c2l6ZTpcImJhc2VcIix3ZWlnaHQ6XCJub3JtYWxcIixlbmFibGVkOm59LHtjaGlsZHJlbjp0fSkpLGkmJigwLG8uanN4KShsLk1lbnVJdGVtSWNvbkNvbnRhaW5lcixPYmplY3QuYXNzaWduKHtzaWRlOlwicmlnaHRcIn0se2NoaWxkcmVuOigwLG8uanN4KShsLk1lbnVJdGVtUmlnaHRJY29uLHtpY29uOlwiQ2hldnJvblJpZ2h0SWNvblwiLGVuYWJsZWQ6bn0pfSkpXX0pKX0pO2NvbnN0IHM9KDAsaS5kZWZhdWx0KShhLkljb24pYFxuICBzdmcgcGF0aCB7XG4gICAgZmlsbDogJHsoe3RoZW1lOmUsZW5hYmxlZDp0LGNoZWNrZWQ6bn0pPT5cInRydWVcIj09PXQ/bj9lLnBhbGV0dGUudGV4dERlZmF1bHQ6XCJ0cmFuc3BhcmVudFwiOmUucGFsZXR0ZS50ZXh0SW5hY3RpdmV9O1xuICAgIHN0cm9rZS13aWR0aDogMS4yNTtcbiAgfVxuYH0sMjgzODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Sb290TWVudUhlYWRlcj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGk9cihuKDc1MTgpKSxhPW4oMTMzNSksbD1uKDk1MzcpO3QuUm9vdE1lbnVIZWFkZXI9KHtpY29uOmV9KT0+KDAsby5qc3hzKShvLkZyYWdtZW50LHtjaGlsZHJlbjpbKDAsby5qc3gpKHMse2NoaWxkcmVuOmV9KSwoMCxvLmpzeCkobC5TZXBhcmF0b3JDdXN0b21Db250ZXh0TWVudUl0ZW0se30pXX0pO2NvbnN0IHM9KDAsaS5kZWZhdWx0KShhLkJveClgXG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDI4cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMuc21hbGx9O1xuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5gMCAwIDAgJHtlLnB4LmxhcmdlfWB9O1xuYH0sOTUzNzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5TZXBhcmF0b3JDdXN0b21Db250ZXh0TWVudUl0ZW09dm9pZCAwO2NvbnN0IG89big1ODkzKSxpPW4oMTMzNSksYT1yKG4oNzUxOCkpO3QuU2VwYXJhdG9yQ3VzdG9tQ29udGV4dE1lbnVJdGVtPSgpPT4oMCxvLmpzeCkobCxPYmplY3QuYXNzaWduKHtcImRhdGEtdGVzdGlkXCI6XCJjdXN0b20tY29udGV4dC1tZW51LXNlcGFyYXRvclwifSx7Y2hpbGRyZW46KDAsby5qc3gpKHMse30pfSkpO2NvbnN0IGw9KDAsYS5kZWZhdWx0KShpLkJveClgXG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfSAwO1xuYCxzPWEuZGVmYXVsdC5ocmBcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMXB4O1xuICBib3JkZXI6IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kM307XG5gfSw3NTAwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlN1Ym1lbnVIZWFkZXJDdXN0b21Db250ZXh0TWVudUl0ZW09dm9pZCAwO2NvbnN0IG89big1ODkzKSxpPW4oNjY4OSksYT1yKG4oNzUxOCkpLGw9big5NjM0KSxzPW4oNzc2OSksYz1uKDEzMzUpLHU9big5NTM3KTt0LlN1Ym1lbnVIZWFkZXJDdXN0b21Db250ZXh0TWVudUl0ZW09KHtsYWJlbDplLHNob3dTaG91bGRIb21lQnV0dG9uOnQsb25DbG9zZTpuLG9uQmFjazpyLHNlbGVjdGVkOmF9KT0+e2NvbnN0IGw9KDAsaS51c2VDYWxsYmFjaykoKGU9PntlLnN0b3BQcm9wYWdhdGlvbigpLG51bGw9PXJ8fHIoKX0pLFtyXSkscz0oMCxpLnVzZUNhbGxiYWNrKSgoZT0+e2Uuc3RvcFByb3BhZ2F0aW9uKCksbnVsbD09bnx8bigpfSksW25dKTtyZXR1cm4oMCxvLmpzeHMpKG8uRnJhZ21lbnQse2NoaWxkcmVuOlsoMCxvLmpzeHMpKGYse2NoaWxkcmVuOlsoMCxvLmpzeCkoZCxPYmplY3QuYXNzaWduKHtzaWRlOlwibGVmdFwiLHNlbGVjdGVkOmF9LHtjaGlsZHJlbjooMCxvLmpzeCkocCx7aWNvbjpcIkFycm93TGVmdEljb25cIixvbkNsaWNrOmwsaWQ6XCJiYWNrLWljb25cIixzZWxlY3RlZDphfSl9KSksKDAsby5qc3gpKGgsT2JqZWN0LmFzc2lnbih7c2l6ZTpcImJhc2VcIix3ZWlnaHQ6XCJub3JtYWxcIn0se2NoaWxkcmVuOmV9KSksdCYmKDAsby5qc3gpKGQsT2JqZWN0LmFzc2lnbih7c2lkZTpcInJpZ2h0XCJ9LHtjaGlsZHJlbjooMCxvLmpzeCkoZyx7aWNvbjpcIkNyb3NzMkljb25cIixvbkNsaWNrOnMsaWQ6XCJjbG9zZS1pY29uXCJ9KX0pKV19KSwoMCxvLmpzeCkodS5TZXBhcmF0b3JDdXN0b21Db250ZXh0TWVudUl0ZW0se30pXX0pfTtjb25zdCBmPSgwLGEuZGVmYXVsdCkoYy5Cb3gpYFxuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAyOHB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YDAgJHtlLnB4LnNtYWxsfSAwICR7ZS5weC5zbWFsbH1gfTtcbmAsZD0oMCxhLmRlZmF1bHQpKGMuQm94KWBcbiAgcGFkZGluZzogJHsoe3RoZW1lOmUsc2lkZTp0fSk9PlwicmlnaHRcIj09PXQ/YDAgJHtlLnB4LnNtYWxsfSAwIDBgOmAwIDAgMCAke2UucHguc21hbGx9YH07XG4gIG1hcmdpbi1sZWZ0OiAkeyh7c2lkZTplfSk9PlwicmlnaHRcIj09PWU/XCJhdXRvXCI6MH07XG5gLHA9KDAsYS5kZWZhdWx0KShsLkljb24pYFxuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG4gIGJhY2tncm91bmQtY29sb3I6ICR7KHtzZWxlY3RlZDplLHRoZW1lOnR9KT0+ZT90LnBhbGV0dGUuYmFja2dyb3VuZDM6XCJ0cmFuc3BhcmVudFwifTtcbiAgY29sb3I6ICR7KHt0aGVtZTplLHNlbGVjdGVkOnR9KT0+dD9lLnBhbGV0dGUudGV4dERlZmF1bHQ6ZS5wYWxldHRlLnRleHRIZWxwfTtcbiAgc3Ryb2tlOiAkeyh7dGhlbWU6ZSxzZWxlY3RlZDp0fSk9PnQ/ZS5wYWxldHRlLnRleHREZWZhdWx0OmUucGFsZXR0ZS50ZXh0SGVscH07XG4gIHN0cm9rZS13aWR0aDogMC4yNTtcblxuICAmOmhvdmVyIHtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgICBzdHJva2U6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gIH1cbmAsaD0oMCxhLmRlZmF1bHQpKHMuVGV4dClgXG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dEhlbHB9O1xuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5gMCAke2UucHgueHh4bGFyZ2V9IDAgJHtlLnB4LnNtYWxsfWB9O1xuICBjdXJzb3I6IGRlZmF1bHQ7XG5gLGc9KDAsYS5kZWZhdWx0KShsLkljb24pYFxuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHRIZWxwfTtcbiAgc3Ryb2tlOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dEhlbHB9O1xuICBzdHJva2Utd2lkdGg6IDAuMjU7XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuXG4gICY6aG92ZXIge1xuICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICAgIHN0cm9rZTogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgfVxuYH0sMjQ1MjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oNDQ3MSksdCl9LDQ1NzE6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlQ29udGV4dE1lbnVLZXlib2FyZE5hdmlnYXRpb249dm9pZCAwO2NvbnN0IHI9big2Njg5KSxvPW4oNDQ3MSk7dC51c2VDb250ZXh0TWVudUtleWJvYXJkTmF2aWdhdGlvbj0oZSx0LG4saSxhLGwscyxjLHUpPT57Y29uc3QgZj10PT57dmFyIG4scixvO3JldHVyblwic2VwYXJhdG9yXCI9PT0obnVsbD09PShuPWVbdF0pfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLnR5cGUpfHwhMT09PShudWxsPT09KHI9ZVt0XSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuZW5hYmxlZCl8fCExPT09KG51bGw9PT0obz1lW3RdKXx8dm9pZCAwPT09bz92b2lkIDA6by52aXNpYmxlKX0sZD0oMCxyLnVzZUNhbGxiYWNrKSgoKCk9PnthKCh0PT57bGV0IG49dDtkb3tpZihuPT09KG51bGw9PWU/dm9pZCAwOmUubGVuZ3RoKS0xKWJyZWFrO24rPTF9d2hpbGUoZihuKSk7cmV0dXJuIGYobik/dDpufSkpfSksW2EsZV0pLHA9KDAsci51c2VDYWxsYmFjaykoKCgpPT57YSgoZT0+e2xldCB0PWU7ZG97aWYobj09PW8uQkFTRV9DT05URVhUX01FTlUmJjA9PT10fHwtMT09PXQpYnJlYWs7dC09MX13aGlsZShmKHQpKTtyZXR1cm4gdH0pKX0pLFthLGVdKSxoPSgwLHIudXNlQ2FsbGJhY2spKCgoKT0+e2Eobj09PW8uQkFTRV9DT05URVhUX01FTlU/MDotMSl9KSxbYSxuXSksZz0oMCxyLnVzZUNhbGxiYWNrKSgoKCk9PnthKCh0PT57Zm9yKGxldCBuPWUubGVuZ3RoLTE7bj49dDtuLS0paWYoIWYobikpcmV0dXJuIG47cmV0dXJuIHR9KSl9KSxbbnVsbD09ZT92b2lkIDA6ZS5sZW5ndGgsYV0pLHY9KDAsci51c2VDYWxsYmFjaykoKCgpPT57dmFyIHQscjtpZihudWxsPT09KHQ9ZVtpXSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuaGFzU3ViTWVudSlzKChudWxsPT09KHI9ZVtpXSl8fHZvaWQgMD09PXI/dm9pZCAwOnIubGFiZWwpfHxcIlwiKTtlbHNle2lmKC0xPT09aSlyZXR1cm4gdm9pZCBjKG4sXCJrZXlib2FyZFwiKTtsKGVbaV0uZGF0YSl9YSgtMSl9KSxbYSxsLHMsZSxpLGMsbl0pLG09KDAsci51c2VDYWxsYmFjaykoKCgpPT57dmFyIHQsbjsobnVsbD09PSh0PWVbaV0pfHx2b2lkIDA9PT10P3ZvaWQgMDp0Lmhhc1N1Yk1lbnUpJiYocygobnVsbD09PShuPWVbaV0pfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmxhYmVsKXx8XCJcIiksYSgtMSkpfSksW2EscyxlLGldKSxDPSgwLHIudXNlQ2FsbGJhY2spKCgoKT0+eyh0LnNsaWNlKDEpLmluY2x1ZGVzKG4pfHwobnVsbD09dD92b2lkIDA6dC5sZW5ndGgpPj0xKSYmYyhuLFwia2V5Ym9hcmRcIil9KSxbYyx0LG5dKSx5PSgwLHIudXNlQ2FsbGJhY2spKCgoKT0+e3Quc2xpY2UoMikuaW5jbHVkZXMobil8fChudWxsPT10P3ZvaWQgMDp0Lmxlbmd0aCk+PTI/dSgpOmwoe3R5cGU6XCJjbG9zZVwifSl9KSxbdSx0LG5dKTsoMCxyLnVzZUVmZmVjdCkoKCgpPT57Y29uc3QgZT1lPT57c3dpdGNoKGUua2V5KXtjYXNlXCJBcnJvd0Rvd25cIjpkKCk7YnJlYWs7Y2FzZVwiQXJyb3dVcFwiOnAoKTticmVhaztjYXNlXCJIb21lXCI6Y2FzZVwiUGFnZVVwXCI6aCgpO2JyZWFrO2Nhc2VcIkVuZFwiOmNhc2VcIlBhZ2VEb3duXCI6ZygpO2JyZWFrO2Nhc2VcIkVudGVyXCI6digpO2JyZWFrO2Nhc2VcIkFycm93UmlnaHRcIjptKCk7YnJlYWs7Y2FzZVwiQXJyb3dMZWZ0XCI6QygpO2JyZWFrO2Nhc2VcIkVzY2FwZVwiOnkoKX19O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGUpLCgpPT57ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixlKX19KSxbZCxwLGgsZyx2LG0sQyx5XSl9fSwyNDIxOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUNvbnRleHRNZW51TmF2aWdhdGlvbj12b2lkIDA7Y29uc3Qgcj1uKDY2ODkpLG89big0NDcxKTt0LnVzZUNvbnRleHRNZW51TmF2aWdhdGlvbj0oZSx0LG4saSxhLGwscyxjLHUsZik9Pntjb25zdCBkPSgwLHIudXNlQ2FsbGJhY2spKChlPT57Y29uc3QgdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKSxuPW51bGw9PXQ/dm9pZCAwOnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue2hlaWdodDoobnVsbD09bj92b2lkIDA6bi5oZWlnaHQpfHwwLHdpZHRoOihudWxsPT1uP3ZvaWQgMDpuLndpZHRoKXx8MH19KSxbXSk7cmV0dXJue2hhbmRsZU5hdmlnYXRlVG9TdWJtZW51OigwLHIudXNlQ2FsbGJhY2spKChyPT57Y29uc3R7aGVpZ2h0OmMsd2lkdGg6dX09ZChyKTtmJiZmKGMsdSksZXx8dChvLkNPTlRFWFRfTUVOVV9BTklNQVRJT05fRFVSQVRJT04pLHMoe3dpZHRoOnUsaGVpZ2h0OmN9KSxsKHIpLGkoWy4uLm4sYV0pfSksW2EsbixpLGYsdCxkXSksaGFuZGxlTmF2aWdhdGVCYWNrVG9QYXJlbnQ6KDAsci51c2VDYWxsYmFjaykoKChlLHQ9XCJjbGlja1wiKT0+e2lmKGYpe2NvbnN0IGU9MT09PW4ubGVuZ3RoP28uQkFTRV9DT05URVhUX01FTlU6bltuLmxlbmd0aC0xXSx7aGVpZ2h0OnQsd2lkdGg6cn09ZChlKTtmKHQscil9Y29uc3Qgcj1uLGE9ci5wb3AoKSxzPXUuZmluZCgoZT0+ZS5wYXJlbnRMYWJlbD09PWEpKTtsKGEpLGkociksYyhcImtleWJvYXJkXCI9PT10PyhudWxsPT1zP3ZvaWQgMDpzLm1lbnVUZW1wbGF0ZS5maW5kSW5kZXgoKHQ9PnQubGFiZWw9PT1lKSkpfHwwOi0xKX0pLFtuLGksYyxkLGYsdV0pLGhhbmRsZU5hdmlnYXRlVG9CYXNlOigwLHIudXNlQ2FsbGJhY2spKCgoKT0+e2lmKGYpe2NvbnN0e2hlaWdodDplLHdpZHRoOnR9PWQoby5CQVNFX0NPTlRFWFRfTUVOVSk7ZihlLHQpfWwoby5CQVNFX0NPTlRFWFRfTUVOVSksaShbXSksYygtMSl9KSxbbCxpLGMsZCxmXSl9fX0sODg5OTooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VSZXNpemVDb250ZXh0TWVudT12b2lkIDA7Y29uc3Qgcj1uKDY2ODkpLG89big0NDcxKTt0LnVzZVJlc2l6ZUNvbnRleHRNZW51PWU9Pntjb25zdFt0LG5dPSgwLHIudXNlU3RhdGUpKHtoZWlnaHQ6MTYwLHdpZHRoOjE2MH0pO3JldHVybigwLHIudXNlRWZmZWN0KSgoKCk9Pntjb25zdCB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpLHI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoby5DT05URVhUX01FTlVfRlJBTUVfSUQpO2lmKCF0KXJldHVybjtjb25zdCBpPW5ldyBSZXNpemVPYnNlcnZlcigoZT0+e2Zvcihjb25zdCB0IG9mIGUpe2NvbnN0e3dpZHRoOmUsaGVpZ2h0Om99PXQudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3ImJihyLnN0eWxlLmhlaWdodD1gJHtvfXB4YCxyLnN0eWxlLndpZHRoPWAke2V9cHhgLG4oe3dpZHRoOmUsaGVpZ2h0Om99KSl9fSkpO3JldHVybiBpLm9ic2VydmUodCksKCk9PntpLnVub2JzZXJ2ZSh0KX19KSxbZV0pLHR9fSw5NDc4OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmdldE1lbnVOYXZpZ2F0aW9uT3JkZXI9dC5nZXRDbGFzc05hbWU9dm9pZCAwO2NvbnN0IHI9big0NDcxKTt0LmdldENsYXNzTmFtZT0oZSx0LG4pPT50PT09ZT9yLkFDVElWRV9DT05URVhUX01FTlVfQ0xBU1M6bi5pbmNsdWRlcyhlKT9yLlBSSU9SX0NPTlRFWFRfTUVOVV9DTEFTUzpcIlwiLHQuZ2V0TWVudU5hdmlnYXRpb25PcmRlcj1lPT57aWYoIWUpcmV0dXJuW107Y29uc3QgdD1be3BhcmVudExhYmVsOnIuQkFTRV9DT05URVhUX01FTlUsdGVtcGxhdGU6ZX1dLG49W107Zm9yKDt0Lmxlbmd0aDspe2NvbnN0e3RlbXBsYXRlOmUscGFyZW50TGFiZWw6cn09dC5wb3AoKTtlLmZvckVhY2goKCh7c3VibWVudTpuLGxhYmVsOnJ9LG8pPT57biYmKHQucHVzaCh7cGFyZW50TGFiZWw6cnx8XCJcIix0ZW1wbGF0ZTpufSksZGVsZXRlIGVbb10uc3VibWVudSxlW29dLmhhc1N1Yk1lbnU9ITApfSkpLG4ucHVzaCh7cGFyZW50TGFiZWw6cixtZW51VGVtcGxhdGU6ZX0pfXJldHVybiBufX0sNjc1ODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5NZW51SXRlbVRleHQ9dC5NZW51SXRlbVJpZ2h0SWNvbj10Lk1lbnVJdGVtSWNvbkNvbnRhaW5lcj10Lk1lbnVJdGVtSW5uZXJDb250YWluZXI9dC5NZW51SXRlbUNvbnRhaW5lcj10Lk1lbnVGcmFtZT12b2lkIDA7Y29uc3Qgbz1yKG4oNzUxOCkpLGk9bigxMzM1KSxhPW4oOTYzNCksbD1uKDc3NjkpO3QuTWVudUZyYW1lPSgwLG8uZGVmYXVsdCkoaS5Cb3gpYFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiBtYXgtY29udGVudDtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQxfTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YCR7ZS5weC5zbWFsbH0gMCAke2UucHguc21hbGx9IDBgfTtcbmAsdC5NZW51SXRlbUNvbnRhaW5lcj0oMCxvLmRlZmF1bHQpKGkuQm94KWBcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAwICR7ZS5weC5zbWFsbH0gMCAke2UucHguc21hbGx9YH07XG5gLHQuTWVudUl0ZW1Jbm5lckNvbnRhaW5lcj0oMCxvLmRlZmF1bHQpKGkuQm94KWBcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMjhweDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG4gIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplLHNlbGVjdGVkOnQsZW5hYmxlZDpufSk9PlwiZmFsc2VcIiE9PW4mJnQ/ZS5wYWxldHRlLmJhY2tncm91bmQzOlwidHJhbnNwYXJlbnRcIn07XG5cbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmUsZW5hYmxlZDp0fSk9PlwiZmFsc2VcIiE9PXQ/ZS5wYWxldHRlLmJhY2tncm91bmQzOlwidHJhbnNwYXJlbnRcIn07XG4gIH1cbmAsdC5NZW51SXRlbUljb25Db250YWluZXI9KDAsby5kZWZhdWx0KShpLkJveClgXG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplLHNpZGU6dH0pPT5cInJpZ2h0XCI9PT10P2AwICR7ZS5weC5zbWFsbH0gMCAwYDpgMCAwIDAgJHtlLnB4LnNtYWxsfWB9O1xuICBtYXJnaW4tbGVmdDogJHsoe3NpZGU6ZX0pPT5cInJpZ2h0XCI9PT1lP1wiYXV0b1wiOjB9O1xuYCx0Lk1lbnVJdGVtUmlnaHRJY29uPSgwLG8uZGVmYXVsdCkoYS5JY29uKWBcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG5cbiAgc3ZnIHBhdGgge1xuICAgIGZpbGw6ICR7KHt0aGVtZTplLGVuYWJsZWQ6dH0pPT5udWxsPT10fHx0P2UucGFsZXR0ZS50ZXh0RGVmYXVsdDplLnBhbGV0dGUudGV4dEluYWN0aXZlfTtcbiAgICBzdHJva2U6ICR7KHt0aGVtZTplLGVuYWJsZWQ6dH0pPT5udWxsPT10fHx0P2UucGFsZXR0ZS50ZXh0RGVmYXVsdDplLnBhbGV0dGUudGV4dEluYWN0aXZlfTtcbiAgICBzdHJva2Utd2lkdGg6IDAuNTtcbiAgfVxuYCx0Lk1lbnVJdGVtVGV4dD0oMCxvLmRlZmF1bHQpKGwuVGV4dClgXG4gIGNvbG9yOiAkeyh7dGhlbWU6ZSxlbmFibGVkOnR9KT0+bnVsbD09dHx8dD9lLnBhbGV0dGUudGV4dERlZmF1bHQ6ZS5wYWxldHRlLnRleHRJbmFjdGl2ZX07XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAwICR7ZS5weC54eHhsYXJnZX0gMCAke2UucHguc21hbGx9YH07XG4gIGN1cnNvcjogZGVmYXVsdDtcblxuICBvdmVyZmxvdzogaGlkZGVuO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuICB1c2VyLXNlbGVjdDogbm9uZTtcbmB9LDI2MDk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDU5NzEpLHQpfSw1OTcxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuVG9nZ2xlPXZvaWQgMDtjb25zdCBpPW4oNTg5MyksYT1uKDY2ODkpLGw9byhuKDc1MTgpKSxzPW4oODUxMCksYz1uKDEzMzUpLHU9bigxOTQ0KTt0LlRvZ2dsZT1lPT57dmFye2lkOnQsbGFiZWw6bixvbkNoYW5nZTpvLGxhYmVsU2lkZTpsPVwicmlnaHRcIix0eXBlOnM9XCJjaGVja2JveFwiLGhlbHBlclRleHQ6Y309ZSxnPXIoZSxbXCJpZFwiLFwibGFiZWxcIixcIm9uQ2hhbmdlXCIsXCJsYWJlbFNpZGVcIixcInR5cGVcIixcImhlbHBlclRleHRcIl0pO2NvbnN0W3YsbV09KDAsYS51c2VTdGF0ZSkoZy5jaGVja2VkKTtyZXR1cm4oMCxhLnVzZUVmZmVjdCkoKCgpPT57bShnLmNoZWNrZWQpfSksW2cuY2hlY2tlZF0pLCgwLGkuanN4cykoZixPYmplY3QuYXNzaWduKHtsYWJlbFNpZGU6bH0se2NoaWxkcmVuOlsobnx8YykmJigwLGkuanN4KSh1LkxhYmVsLHtodG1sRm9yOnQsdGV4dDpuLGhlbHBlclRleHQ6Y30pLCgwLGkuanN4cykoZCxPYmplY3QuYXNzaWduKHtpc0NoZWNrZWQ6dn0se2NoaWxkcmVuOlsoMCxpLmpzeCkoaCxPYmplY3QuYXNzaWduKHt9LGcse2lkOnQsdHlwZTpzLG9uQ2hhbmdlOmU9PnttKGUudGFyZ2V0LmNoZWNrZWQpLG51bGw9PW98fG8oZSl9fSkpLCgwLGkuanN4KShwLHt0YWJJbmRleDotMSxcImFyaWEtaGlkZGVuXCI6XCJ0cnVlXCIsaXNDaGVja2VkOnZ9KV19KSldfSkpfTtjb25zdCBmPWwuZGVmYXVsdC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGdhcDogJHsoe3RoZW1lOmV9KT0+ZS5weC54bGFyZ2V9O1xuICBmbGV4LWRpcmVjdGlvbjogJHsoe2xhYmVsU2lkZTplfSk9PlwibGVmdFwiPT09ZT9cInJvd1wiOlwicm93LXJldmVyc2VcIn07XG4gIGxpbmUtaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnhsYXJnZX07XG5gLGQ9KDAsbC5kZWZhdWx0KShjLkJveClgXG4gIC0tcHgtdG9nZ2xlOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnhsYXJnZX07XG4gIC0tcHgta25vYjogJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcblxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGhlaWdodDogdmFyKC0tcHgtdG9nZ2xlKTtcbiAgd2lkdGg6IGNhbGMoMiAqIHZhcigtLXB4LXRvZ2dsZSkpO1xuICBib3JkZXI6IDFweCBzb2xpZFxuICAgICR7KHtpc0NoZWNrZWQ6ZSx0aGVtZTp0fSk9PmU/dC5wYWxldHRlLmJyYW5kUHJpbWFyeTp0LnBhbGV0dGUuYmFja2dyb3VuZDZ9O1xuICBib3JkZXItcmFkaXVzOiBjYWxjKDAuNSAqIHZhcigtLXB4LXRvZ2dsZSkpO1xuXG4gIGJhY2tncm91bmQ6ICR7KHtpc0NoZWNrZWQ6ZSx0aGVtZTp0fSk9PmU/dC5wYWxldHRlLmJyYW5kUHJpbWFyeTp0LnBhbGV0dGUuYmFja2dyb3VuZDZ9O1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIHZhcigtLW9wZW5maW4tdWktZ2xvYmFsVHJhbnNpdGlvbiksXG4gICAgYm9yZGVyLWNvbG9yIHZhcigtLS1vcGVuZmluLXVpLWdsb2JhbFRyYW5zaXRpb24pO1xuXG4gICY6Zm9jdXMtd2l0aGluIHtcbiAgICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dEZvY3VzZWR9O1xuICB9XG5gLHA9bC5kZWZhdWx0LmJ1dHRvbmBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogdmFyKC0tcHgta25vYik7XG4gIGhlaWdodDogdmFyKC0tcHgta25vYik7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnhzbWFsbH07XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBiYWNrZ3JvdW5kOiAkeyh7aXNDaGVja2VkOmUsdGhlbWU6dH0pPT5lP3QucGFsZXR0ZS5icmFuZFByaW1hcnlUZXh0OnQucGFsZXR0ZS5pbnB1dENvbG9yfTtcbiAgYm9yZGVyOiBub25lO1xuICBvdXRsaW5lOiBub25lO1xuICB0cmFuc2l0aW9uOiBsZWZ0IHZhcigtLW9wZW5maW4tdWktZ2xvYmFsVHJhbnNpdGlvbiksIGJhY2tncm91bmQgdmFyKC0tb3BlbmZpbi11aS1nbG9iYWxUcmFuc2l0aW9uKTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7IC8qIEFsbG93IHBhc3MtdGhydSBmb3IgbmF0aXZlIGlucHV0ICovXG5gLGg9KDAsbC5kZWZhdWx0KShzLlJhd0lucHV0KWBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIG9wYWNpdHk6IDA7XG4gIGJvcmRlcjogbm9uZTtcbiAgb3V0bGluZTogbm9uZTtcbiAgYXBwZWFyYW5jZTogbm9uZTtcbiAgZGlzcGxheTogYmxvY2s7XG5cbiAgJjpjaGVja2VkICsgJHtwfSB7XG4gICAgbGVmdDogY2FsYygxMDAlIC0gJHsoe3RoZW1lOmV9KT0+ZS5weC5sYXJnZX0pO1xuICB9XG4gICY6ZGlzYWJsZWQgKyAke3B9IHtcbiAgICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXREaXNhYmxlZH07XG4gIH1cbiAgJjpub3QoOmRpc2FibGVkKSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5gfSw1MzAwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQmFkZ2U9dm9pZCAwO2NvbnN0IGk9big1ODkzKSxhPW8obig3NTE4KSksbD1uKDEzMzUpLHM9bigzODc3KTt0LkJhZGdlPWU9Pnt2YXJ7Y291bnQ6dD0wLG1heDpufT1lLG89cihlLFtcImNvdW50XCIsXCJtYXhcIl0pO2xldCBhPXQudG9TdHJpbmcoKTtyZXR1cm4gbiYmdD5uJiYoYT1gJHtufStgKSwoMCxpLmpzeCkoYyxPYmplY3QuYXNzaWduKHt9LG8se2NoaWxkcmVuOmF9KSl9O2NvbnN0IGM9KDAsYS5kZWZhdWx0KShsLkJveClgXG4gIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5zdGF0dXNDcml0aWNhbH07XG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnBpbGx9O1xuICBjb2xvcjogJHtzLkNvbG9yLndoaXRlfTtcbiAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLnNtYWxsfTtcbiAgbWluLXdpZHRoOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnhsYXJnZX07XG4gIHBhZGRpbmc6IDJweCA2cHg7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYm94LXNoYWRvdzogJHsoe3RoZW1lOmV9KT0+ZS5zaGFkb3cuYmFzZX07XG5gfSwzMTM2OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig1MzAwKSx0KX0sNjg5NTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnR9KX06ZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dH0pLGk9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiIT09biYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnIodCxlLG4pO3JldHVybiBvKHQsZSksdH0sYT10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxsPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2FsZW5kYXI9dm9pZCAwO2NvbnN0IHM9big1ODkzKSxjPW4oNjY4OSksdT1sKG4oNzUxOCkpLGY9big3MjkyKSxkPW4oNDEzMCkscD1uKDEzMzUpLGg9aShuKDUyOTkpKTt0LkNhbGVuZGFyPWU9Pnt2YXJ7dmFsdWU6dCxvbkNoYW5nZTpuLG9uRGlzbWlzczpyfT1lLG89YShlLFtcInZhbHVlXCIsXCJvbkNoYW5nZVwiLFwib25EaXNtaXNzXCJdKTtjb25zdFtpXT0oMCxjLnVzZVN0YXRlKSh0KSxbbCx1XT0oMCxjLnVzZVN0YXRlKSh0KSxkPSgwLGMudXNlQ2FsbGJhY2spKChlPT57dShlKSxudWxsPT1ufHxuKGUpfSksW10pLHA9KDAsYy51c2VDYWxsYmFjaykoKCgpPT57ZChpKSxudWxsPT1yfHxyKCl9KSxbXSk7cmV0dXJuKDAscy5qc3hzKShtLE9iamVjdC5hc3NpZ24oe1wiZGF0YS10ZXN0aWRcIjpcInJlYWN0LWNhbGVuZGFyXCJ9LHtjaGlsZHJlbjpbKDAscy5qc3gpKGYuQ2FsZW5kYXIsT2JqZWN0LmFzc2lnbih7dmFsdWU6bCxvbkNoYW5nZTpkLGNhbGVuZGFyVHlwZTpcIlVTXCIsZGVmYXVsdFZpZXc6XCJtb250aFwiLG1pbkRldGFpbDpcInllYXJcIixuZXh0MkxhYmVsOm51bGwscHJldjJMYWJlbDpudWxsLHNob3dGaXhlZE51bWJlck9mV2Vla3M6ITB9LG8pKSwoMCxzLmpzeHMpKGcse2NoaWxkcmVuOlsoMCxzLmpzeCkodix7XCJkYXRhLXRlc3RpZFwiOlwiY2FsZW5kYXItY2FuY2VsLWJ1dHRvblwiLFwiYXJpYS1sYWJlbFwiOlwiY2FuY2VsLWJ1dHRvblwiLGxhYmVsOlwiQ2FuY2VsXCIsc2l6ZTpcImJhc2VcIixraW5kOlwidGV4dE9ubHlcIixvbkNsaWNrOnB9KSwoMCxzLmpzeCkodix7XCJkYXRhLXRlc3RpZFwiOlwiY2FsZW5kYXItYXBwbHktYnV0dG9uXCIsXCJhcmlhLWxhYmVsXCI6XCJhcHBseS1idXR0b25cIixsYWJlbDpcIkFwcGx5XCIsc2l6ZTpcImJhc2VcIixraW5kOlwicHJpbWFyeVwiLG9uQ2xpY2s6cn0pXX0pXX0pKX07Y29uc3QgZz0oMCx1LmRlZmF1bHQpKHAuQm94KWBcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAke2UucHguc21hbGx9IDBweGB9O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICBtYXJnaW4tcmlnaHQ6ICR7KHt0aGVtZTplfSk9PmAke2UucHguc21hbGx9YH07XG4gIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNH07XG4gIGJvcmRlcjogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNn07XG4gIGJvcmRlci10b3A6IG5vbmU7XG5gLHY9KDAsdS5kZWZhdWx0KShkLkJ1dHRvbilgXG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAke2UucHguc21hbGx9ICR7ZS5weC5zbWFsbH1gfTtcbiAgbWFyZ2luLXJpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5gJHtlLnB4LnNtYWxsfWB9O1xuYCxtPSgwLHUuZGVmYXVsdCkocC5Cb3gpYFxuICAke2h9O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG5cbiAgLnJlYWN0LWNhbGVuZGFyIHtcbiAgICBtaW4td2lkdGg6IDIzMHB4O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNH07XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gICAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmJhc2V9O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNn07XG4gIH1cblxuICAucmVhY3QtY2FsZW5kYXJfX25hdmlnYXRpb24ge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNH0gIWltcG9ydGFudDtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gICAgbWFyZ2luOiAwO1xuICB9XG5cbiAgLnJlYWN0LWNhbGVuZGFyX19uYXZpZ2F0aW9uX19hcnJvdyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ0fSAhaW1wb3J0YW50O1xuICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICAgIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5sYXJnZX07XG5cbiAgICA6ZGlzYWJsZWQge1xuICAgICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dERpc2FibGVkfTtcbiAgICB9XG4gIH1cblxuICAucmVhY3QtY2FsZW5kYXJfX25hdmlnYXRpb25fX2xhYmVsIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDR9ICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gICAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmJhc2V9O1xuICB9XG5cbiAgLnJlYWN0LWNhbGVuZGFyX192aWV3Q29udGFpbmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDR9ICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dENvbG9yfTtcbiAgICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gIH1cblxuICAucmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdfX3dlZWtkYXlzIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG5cbiAgICBhYmJyIHtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICB9XG4gIH1cblxuICAucmVhY3QtY2FsZW5kYXJfX3RpbGUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDR9ICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG4gICAgYm9yZGVyLXJhZGl1czogMTAwcHg7XG4gICAgYXNwZWN0LXJhdGlvOiAxLzE7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgOmRpc2FibGVkIHtcbiAgICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dEluYWN0aXZlfTtcbiAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cbiAgICAgIDpob3ZlciB7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICA6aG92ZXIge1xuICAgICAgYm9yZGVyOiAycHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kUHJpbWFyeX07XG4gICAgICBib3JkZXItcmFkaXVzOiAxMDBweDtcbiAgICB9XG5cbiAgICA6Zm9jdXMge1xuICAgICAgYm9yZGVyOiAycHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kUHJpbWFyeX07XG4gICAgICBib3JkZXItcmFkaXVzOiAxMDBweDtcbiAgICB9XG4gIH1cblxuICAucmVhY3QtY2FsZW5kYXJfX3RpbGUtLW5vdyB7XG4gICAgYm9yZGVyOiAycHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kUHJpbWFyeX0gIWltcG9ydGFudDtcbiAgICBib3JkZXItcmFkaXVzOiAxMDBweDtcbiAgfVxuXG4gIC5yZWFjdC1jYWxlbmRhcl9fdGlsZS0tYWN0aXZlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5fSAhaW1wb3J0YW50O1xuICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYnJhbmRQcmltYXJ5VGV4dH07XG4gICAgYm9yZGVyLXJhZGl1czogMTAwcHg7XG5cbiAgICA6Zm9jdXMge1xuICAgICAgYm9yZGVyOiAycHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJyYW5kUHJpbWFyeX07XG4gICAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDEwMHB4O1xuICAgIH1cbiAgfVxuYH0sOTczNDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oNjg5NSksdCl9LDE2MjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Ecm9wZG93bkJ1dHRvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpLGk9bigyNzkpLGE9big3MjYxKSxsPW4oOTYzNCkscz1uKDY2ODkpLGM9cihuKDc1MTgpKSx1PW4oMTMzNSksZj1uKDk1MDcpLGQ9bigxOTQ0KTt0LkRyb3Bkb3duQnV0dG9uPSgwLHMuZm9yd2FyZFJlZikoKChlLHQpPT57dmFyIG4scixsLHMsYztyZXR1cm4oMCxvLmpzeCkoaCx7Y2hpbGRyZW46KDAsby5qc3hzKShwLHtjaGlsZHJlbjpbKGUubGFiZWx8fGUuaGVscGVyVGV4dCkmJigwLG8uanN4KShkLkxhYmVsLHt0ZXh0OmUubGFiZWwsaGVscGVyVGV4dDplLmhlbHBlclRleHQsaHRtbEZvcjplLm5hbWV9KSwoMCxvLmpzeHMpKHYsT2JqZWN0LmFzc2lnbih7cm9sZTpcImNvbWJveGJveFwiLHJlZjp0LG5hbWU6ZS5uYW1lLHRhYkluZGV4OmUudGFiSW5kZXgsXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIjplLmFjdGl2ZURlc2NlbmRhbnQsc3RhdHVzOmUuc3RhdHVzLFwiYXJpYS1leHBhbmRlZFwiOmUuZXhwYW5kZWQsXCJhcmlhLWhhc3BvcHVwXCI6XCJsaXN0Ym94XCIsXCJhcmlhLWNvbnRyb2xzXCI6XCJkcm9wZG93bi1saXN0Ym94XCIsb25DbGljazooKT0+ZS5oYW5kbGVDbGljaygpLGFzOlwiYnV0dG9uXCIsXCJkYXRhLXRlc3RpZFwiOlwiZHJvcGRvd24tYnV0dG9uXCIsdGl0bGU6bnVsbCE9PShyPW51bGw9PT0obj1lLnNlbGVjdGVkKXx8dm9pZCAwPT09bj92b2lkIDA6bi50aXRsZSkmJnZvaWQgMCE9PXI/cjplLnBsYWNlaG9sZGVyfSx7Y2hpbGRyZW46WyhudWxsPT09KGw9ZS5zZWxlY3RlZCl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaWNvblVybCkmJigwLG8uanN4KShpLkJ1dHRvbkltYWdlLHtzcmM6ZS5zZWxlY3RlZC5pY29uVXJsfSksKDAsby5qc3gpKGEuT3B0aW9uVGl0bGUsT2JqZWN0LmFzc2lnbih7XCJhcmlhLWxpdmVcIjpcInBvbGl0ZVwiLFwiZGF0YS10ZXN0aWRcIjpcInNlbGVjdGVkLW9wdGlvblwifSx7Y2hpbGRyZW46bnVsbCE9PShjPW51bGw9PT0ocz1lLnNlbGVjdGVkKXx8dm9pZCAwPT09cz92b2lkIDA6cy50aXRsZSkmJnZvaWQgMCE9PWM/YzplLnBsYWNlaG9sZGVyfSkpLCgwLG8uanN4KShnLHtzdGF0dXM6ZS5zdGF0dXMsaWNvbjplLmV4cGFuZGVkP1wiQ2hldnJvblVwSWNvblwiOlwiQ2hldnJvbkRvd25JY29uXCJ9KV19KSldfSl9KX0pKSx0LkRyb3Bkb3duQnV0dG9uLmRpc3BsYXlOYW1lPVwiRHJvcGRvd25CdXR0b25cIjtjb25zdCBwPSgwLGMuZGVmYXVsdCkodS5Cb3gpYFxuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICB3aWR0aDogMTAwJTtcbmAsaD0oMCxjLmRlZmF1bHQpKHUuQm94KWBcbiAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmJhc2V9O1xuICB3aWR0aDogMTAwJTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG5gLGc9KDAsYy5kZWZhdWx0KShsLkljb24pYFxuICBjb2xvcjogJHsoe3RoZW1lOmUsc3RhdHVzOnR9KT0+KDAsZi5nZXRTdGF0dXNDb2xvcikoZSx0LFwidGV4dERlZmF1bHRcIil9O1xuYCx2PSgwLGMuZGVmYXVsdCkodS5Cb3gpYFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDR9O1xuICBib3JkZXI6IDFweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXRCYWNrZ3JvdW5kfTtcbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5yYWRpdXMuc21hbGx9O1xuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplLHN0YXR1czp0fSk9PigwLGYuZ2V0U3RhdHVzQ29sb3IpKGUsdCxcImlucHV0Qm9yZGVyXCIpfTtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGZvbnQtd2VpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRXZWlnaHQuYm9sZH07XG4gIGdhcDogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgbGluZS1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUubGluZUhlaWdodC51aX07XG4gIG91dGxpbmU6IG5vbmU7XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplfSk9PmAke2UucHguc21hbGx9ICR7ZS5weC5zbWFsbH1gfTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciB2YXIoLS1vcGVuZmluLXVpLWdsb2JhbFRyYW5zaXRpb24pO1xuICB3aWR0aDogMTAwJTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuICAke2wuSWNvbn0ge1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICB9XG5cbiAgJjpmb2N1cy13aXRoaW4ge1xuICAgIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0Rm9jdXNlZH07XG4gIH1cblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiAwO1xuICAgIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmUsc3RhdHVzOnR9KT0+KDAsZi5nZXRTdGF0dXNDb2xvcikoZSx0LFwiaW5wdXRGb2N1c2VkXCIpfTtcbiAgfVxuYH0sNjA2MjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Ecm9wZG93bk1lbnU9dm9pZCAwO2NvbnN0IG89big1ODkzKSxpPW4oNjY4OSksYT1uKDEzMzUpLGw9cihuKDc1MTgpKSxzPW4oNzI2MSksYz1uKDI3OSksdT1uKDM0NyksZj1uKDE2Mik7dC5Ecm9wZG93bk1lbnU9KDAsaS5mb3J3YXJkUmVmKSgoKHtsYWJlbDplLG9wdGlvbnM6dD1bW11dLHBsYWNlaG9sZGVyOm49XCJTZWxlY3QgYW4gb3B0aW9uXCIsc2VsZWN0ZWQ6cixvbk9wdGlvbkhvdmVyOmwsb25DaGFuZ2U6aCxyZW5kZXJMYWJlbDpnLGZpdENvbnRlbnQ6dn0sbSk9PntpZihyJiYhKChlLHQpPT5lLnNvbWUoKGU9PmUuc29tZSgoZT0+ZS52YWx1ZT09PXQudmFsdWUpKSkpKSh0LHIpKXRocm93IG5ldyBFcnJvcihgVGhlIHNlbGVjdGVkIG9wdGlvbiAke3IudmFsdWV9IGlzIG5vdCBwcmVzZW50IGluIHRoZSBvcHRpb25zIGFycmF5YCk7Y29uc3RbQyx5XT0oMCxpLnVzZVN0YXRlKSghMSk7KDAsaS51c2VFZmZlY3QpKCgoKT0+ezE9PT10WzBdLmxlbmd0aCYmdyghMSl9KSxbdF0pO2NvbnN0IHc9ZT0+e3kobnVsbCE9ZT9lOiFDKX0se2ZvY3VzZWRPcHRpb246YixoYW5kbGVLZXlEb3duOnh9PSgwLHUudXNlRHJvcGRvd25LZXlib2FyZE5hdmlnYXRpb24pKHQscixDLHcsaCk7cmV0dXJuKDAsby5qc3gpKGQsT2JqZWN0LmFzc2lnbih7cmVmOm0sZmxleERpcmVjdGlvbjpcImNvbHVtblwiLG9uQmx1cjplPT57ZS5jdXJyZW50VGFyZ2V0LmNvbnRhaW5zKGUucmVsYXRlZFRhcmdldCl8fHkoITEpfSxvbktleURvd246eH0se2NoaWxkcmVuOigwLG8uanN4cykoYS5Cb3gsT2JqZWN0LmFzc2lnbih7Z2FwOlwic21hbGxcIixmbGV4RGlyZWN0aW9uOlwiY29sdW1uXCIsc3R5bGU6e3dpZHRoOlwiMTAwJVwifX0se2NoaWxkcmVuOltlJiYoMCxvLmpzeCkoXCJsYWJlbFwiLE9iamVjdC5hc3NpZ24oe2h0bWxGb3I6XCJkcm9wZG93bi1idXR0b25cIn0se2NoaWxkcmVuOigwLG8uanN4KShzLk9wdGlvblRpdGxlLHtjaGlsZHJlbjplfSl9KSksKDAsby5qc3hzKShwLHtjaGlsZHJlbjpbZz8oMCxvLmpzeCkoaS5GcmFnbWVudCx7Y2hpbGRyZW46ZyhyfHx7dGl0bGU6bix2YWx1ZTpudWxsfSxDLHcsYil9LGByZW5kZXItbGFiZWwtJHtyfWApOigwLG8uanN4KShmLkRyb3Bkb3duQnV0dG9uLHt0YWJJbmRleDowLGFjdGl2ZURlc2NlbmRhbnQ6YG1lbnUtb3B0aW9uLSR7bnVsbD09Yj92b2lkIDA6Yi52YWx1ZX1gLGV4cGFuZGVkOkMmJnRbMF0ubGVuZ3RoPjEsaGFuZGxlQ2xpY2s6KCk9PncoKSxzZWxlY3RlZDpyLHBsYWNlaG9sZGVyOm59KSx0Lmxlbmd0aCYmdFswXS5sZW5ndGg+MSYmQyYmKDAsby5qc3gpKGMuTWVudSx7bWVudUlkOlwiZHJvcGRvd24tbGlzdGJveFwiLG9wdGlvbnM6dCxzZWxlY3RlZDpyLGhhbmRsZUV4cGFuZE1lbnU6dyxvbk9wdGlvbkhvdmVyOmwsb25DaGFuZ2U6aCxmaXRDb250ZW50OnYsZm9jdXNlZE9wdGlvbjpiLGFic29sdXRlUG9zaXRpb246ITB9KV19KV19KSl9KSl9KSksdC5Ecm9wZG93bk1lbnUuZGlzcGxheU5hbWU9XCJEcm9wZG93bk1lbnVcIjtjb25zdCBkPSgwLGwuZGVmYXVsdCkoYS5Cb3gpYFxuICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuYCxwPSgwLGwuZGVmYXVsdCkoYS5Cb3gpYGB9LDYwMjY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDYwNjIpLHQpLG8obigyNzkpLHQpLG8obigxNjIpLHQpfSwyNzk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQnV0dG9uSW1hZ2U9dC5NZW51PXZvaWQgMDtjb25zdCBvPW4oNTg5MyksaT1yKG4oNjY4OSkpLGE9cihuKDc1MTgpKSxsPW4oOTYzNCkscz1uKDEzMzUpLGM9big3MjYxKTt0Lk1lbnU9KHtvcHRpb25zOmUsc2VsZWN0ZWQ6bixtZW51SWQ6cixoYW5kbGVFeHBhbmRNZW51OmEsb25PcHRpb25Ib3ZlcjpsLG9uQ2hhbmdlOnMsd2lkdGg6ZyxoZWlnaHQ6dixoZWFkZXI6bSxmb2N1c2VkT3B0aW9uOkMsYWJzb2x1dGVQb3NpdGlvbjp5LGZpdENvbnRlbnQ6d30pPT57Y29uc3QgYj1lPT57bnVsbD09bHx8bChlKX07cmV0dXJuKDAsby5qc3hzKSh1LE9iamVjdC5hc3NpZ24oe3JvbGU6XCJsaXN0Ym94XCIsZmxleERpcmVjdGlvbjpcImNvbHVtblwiLG9uTW91c2VMZWF2ZTooKT0+e2IobnVsbCl9LFwiZGF0YS10ZXN0aWRcIjpcIm1lbnVcIixpZDpyLHdpZHRoOmcsaGVpZ2h0OnYsYWJzb2x1dGVQb3NpdGlvbjp5LGZpdENvbnRlbnQ6d30se2NoaWxkcmVuOlttJiYoMCxvLmpzeHMpKGkuZGVmYXVsdC5GcmFnbWVudCx7Y2hpbGRyZW46WygwLG8uanN4KShkLHtjaGlsZHJlbjooMCxvLmpzeCkoYy5PcHRpb25UaXRsZSx7Y2hpbGRyZW46bX0pfSksKDAsby5qc3gpKGgse30pXX0pLGUubWFwKCgoZSxyKT0+KDAsby5qc3hzKShpLmRlZmF1bHQuRnJhZ21lbnQse2NoaWxkcmVuOlswIT09ciYmKDAsby5qc3gpKGgse30pLGUubWFwKCgoZSxyKT0+KDAsby5qc3hzKShmLE9iamVjdC5hc3NpZ24oe3JvbGU6XCJvcHRpb25cIixpc0ZvY3VzZWQ6KG51bGw9PUM/dm9pZCAwOkMudmFsdWUpPT09ZS52YWx1ZSxcImFyaWEtc2VsZWN0ZWRcIjoobnVsbD09bj92b2lkIDA6bi52YWx1ZSk9PT1lLnZhbHVlLGFsaWduSXRlbXM6XCJjZW50ZXJcIixhczpcImJ1dHRvblwiLFwiZGF0YS10ZXN0aWRcIjpgbWVudS1vcHRpb24tJHtyfWAsaWQ6YG1lbnUtb3B0aW9uLSR7ZS52YWx1ZX1gLHRpdGxlOmUudGl0bGUsb25DbGljazooKT0+e2Uub3ZlcnJpZGVPbkNsaWNrP2Uub3ZlcnJpZGVPbkNsaWNrKGUpOnMoZSksbnVsbD09YXx8YSgpfSxvbk1vdXNlT3ZlcjooKT0+YihlLnZhbHVlKX0se2NoaWxkcmVuOlsobnVsbD09ZT92b2lkIDA6ZS5pY29uVXJsKSYmKDAsby5qc3gpKHQuQnV0dG9uSW1hZ2Use3NyYzplLmljb25Vcmwsc3R5bGU6e21hcmdpblJpZ2h0OlwiOHB4XCJ9fSksKDAsby5qc3gpKGMuT3B0aW9uVGl0bGUse2NoaWxkcmVuOmUudGl0bGV9KSwobnVsbD09bj92b2lkIDA6bi52YWx1ZSk9PT1lLnZhbHVlPygwLG8uanN4KShwLHtpY29uOlwiQ2hlY2tJY29uXCJ9KTooMCxvLmpzeCkocCx7Y2hpbGRyZW46KDAsby5qc3gpKG8uRnJhZ21lbnQse30pfSldfSkscikpKV19LHIpKSldfSkpfTtjb25zdCB1PSgwLGEuZGVmYXVsdCkocy5Cb3gpYFxuICB3aWR0aDogJHsoe3dpZHRoOmUsZml0Q29udGVudDp0fSk9PmV8fCh0P1wiZml0LWNvbnRlbnRcIjpcIjEwMCVcIil9O1xuICBtYXgtaGVpZ2h0OiAkeyh7aGVpZ2h0OmV9KT0+bnVsbCE9ZT9lOlwiZml0LWNvbnRlbnRcIn07XG4gIHRvcDogJHsoe3RoZW1lOmV9KT0+YGNhbGMoMTAwJSArICR7ZS5weC54c21hbGx9KWB9O1xuICBib3gtc2hhZG93OiAwcHggNHB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICBiYWNrZ3JvdW5kOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDR9O1xuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgei1pbmRleDogMTA7XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIGJvcmRlcjogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dEJhY2tncm91bmR9O1xuICBwb3NpdGlvbjogJHsoe2Fic29sdXRlUG9zaXRpb246ZX0pPT5lP1wiYWJzb2x1dGVcIjpcImluaXRpYWxcIn07XG5gLGY9KDAsYS5kZWZhdWx0KShzLkJveClgXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIGJvcmRlcjogJHsoe2lzRm9jdXNlZDplLHRoZW1lOnR9KT0+ZT9gMXB4IHNvbGlkICR7dC5wYWxldHRlLmJvcmRlck5ldXRyYWx9YDpcIjFweCBzb2xpZCB0cmFuc3BhcmVudFwifTtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIG91dGxpbmU6IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5gJHtlLnB4LnNtYWxsfSAke2UucHguc21hbGx9YH07XG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kMn07XG4gIH1cbmAsZD0oMCxhLmRlZmF1bHQpKHMuQm94KWBcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogdHJhbnNwYXJlbnQ7XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dEhlbHB9O1xuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5gJHtlLnB4LnNtYWxsfSAke2UucHguc21hbGx9YH07XG5gLHA9KDAsYS5kZWZhdWx0KShsLkljb24pYFxuICBtYXJnaW4tbGVmdDogYXV0bztcbmAsaD0oMCxhLmRlZmF1bHQpKHMuQm94KWBcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dEJhY2tncm91bmR9O1xuYDt0LkJ1dHRvbkltYWdlPWEuZGVmYXVsdC5pbWdgXG4gIGhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS54bGFyZ2V9O1xuICB3aWR0aDogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS54bGFyZ2V9O1xuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG5gfSw3MjYxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlVG9vbHRpcD10LmlzRWxlbWVudE92ZXJmbG93bj10Lk9wdGlvblRpdGxlPXZvaWQgMDtjb25zdCBpPW4oNTg5MyksYT1uKDY2ODkpLGw9big3NzY5KSxzPW4oOTUwNyksYz1vKG4oNzUxOCkpO3QuT3B0aW9uVGl0bGU9ZT0+e3ZhcntjaGlsZHJlbjpufT1lLG89cihlLFtcImNoaWxkcmVuXCJdKTtyZXR1cm4oMCxpLmpzeCkodSxPYmplY3QuYXNzaWduKHtyZWY6KDAsdC51c2VUb29sdGlwKShuKX0sbyx7Y2hpbGRyZW46KDAsaS5qc3gpKFwiZGl2XCIse2NoaWxkcmVuOm59KX0pKX07Y29uc3QgdT0oMCxjLmRlZmF1bHQpKGwuVGV4dClgXG4gICR7cy5NaXhpbnMudGV4dE92ZXJmbG93fTtcbiAgbWFyZ2luLWxlZnQ6ICR7KHt0aGVtZTplfSk9PmUucHgueHNtYWxsfTtcbmA7ZnVuY3Rpb24gZihlKXtyZXR1cm4gZS5zY3JvbGxIZWlnaHQ+ZS5jbGllbnRIZWlnaHR8fGUuc2Nyb2xsV2lkdGg+ZS5jbGllbnRXaWR0aH10LmlzRWxlbWVudE92ZXJmbG93bj1mLHQudXNlVG9vbHRpcD1lPT4oMCxhLnVzZUNhbGxiYWNrKSgodD0+e3QmJmUmJmYodCkmJih0LnRpdGxlPWUpfSksW10pfSw3MDA2OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuSWNvbj12b2lkIDA7Y29uc3QgaT1uKDU4OTMpLGE9big2Njg5KSxsPW8obig3NTE4KSkscz1uKDEzMzUpLGM9big5NTA3KSx1PW4oMzQ3MSksZj1uKDk2NjkpLGQ9KDAsYS5mb3J3YXJkUmVmKSgoKGUsdCk9Pnt2YXJ7dGFiSW5kZXg6bixpY29uOm8sY2hpbGRyZW46YSxzaXplOmw9XCJiYXNlXCIsY29udGFpbmVyU2l6ZTpzLFwiZGF0YS10ZXN0aWRcIjpjfT1lLHU9cihlLFtcInRhYkluZGV4XCIsXCJpY29uXCIsXCJjaGlsZHJlblwiLFwic2l6ZVwiLFwiY29udGFpbmVyU2l6ZVwiLFwiZGF0YS10ZXN0aWRcIl0pO3JldHVybigwLGkuanN4KShoLE9iamVjdC5hc3NpZ24oe30sdSx7aWNvblNpemU6bCxjb250YWluZXJTaXplOnN8fGwsanVzdGlmeUNvbnRlbnQ6XCJjZW50ZXJcIixhbGlnbkl0ZW1zOlwiY2VudGVyXCIsXCJkYXRhLXRlc3RpZFwiOmMsdGFiSW5kZXg6bixyZWY6dH0se2NoaWxkcmVuOm8/KDAsaS5qc3gpKHAsT2JqZWN0LmFzc2lnbih7YXJpYUxhYmVsOnVbXCJhcmlhLWxhYmVsXCJdLGljb246b30sdSkpOmF9KSl9KSk7ZC5kaXNwbGF5TmFtZT1cIkljb25cIix0Lkljb249KDAsbC5kZWZhdWx0KShkKWBgO2NvbnN0IHA9KDAsbC5kZWZhdWx0KSgoZT0+e3ZhcntpY29uOnQsYXJpYUxhYmVsOm59PWUsbz1yKGUsW1wiaWNvblwiLFwiYXJpYUxhYmVsXCJdKTtjb25zdCBhPXUuSWNvblNldFt0XTtyZXR1cm4oMCxpLmpzeCkoYSxPYmplY3QuYXNzaWduKHtyb2xlOlwiaW1nXCIsXCJhcmlhLWxhYmVsXCI6bn0sbykpfSkpYGAsaD0oMCxsLmRlZmF1bHQpKHMuQm94KWBcbiAgLyoqXG4gICAqIDEuIEluaXRpYWxpemUgbG9jYWwgdmFyaWFibGVzIHdpdGggcmVhc29uYWJsZSBkZWZhdWx0c1xuICAgKi9cbiAgLS1weC1kZWZhdWx0OiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLmJhc2V9O1xuXG4gIC8qKlxuICAgKiAyLiBJbmplY3QgdmFyaWFudHMgLS0gPyBXaGF0IGFyZSBWYXJpYW50c1xuICAgKi9cbiAgJHsoMCxjLmdldFZhcmlhbnRDU1MpKGYudmFyaWFudHMsZi5WYXJpYW50LmNvbnRhaW5lclNpemUpfVxuICAkeygwLGMuZ2V0VmFyaWFudENTUykoZi52YXJpYW50cyxmLlZhcmlhbnQuaWNvblNpemUpfVxuXG4gIHdpZHRoOiB2YXIoLS1weC1jb250YWluZXIsIHZhcigtLXB4LWRlZmF1bHQpKTtcbiAgaGVpZ2h0OiB2YXIoLS1weC1jb250YWluZXIsIHZhcigtLXB4LWRlZmF1bHQpKTtcblxuICAvKiBTVkcgQXNzZXQgKi9cblxuICAmID4gKixcbiAgJHtwfSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IHZhcigtLXB4LWljb24sIHZhcigtLXB4LWRlZmF1bHQpKTtcbiAgICBoZWlnaHQ6IHZhcigtLXB4LWljb24sIHZhcigtLXB4LWRlZmF1bHQpKTtcbiAgICBib3JkZXItcmFkaXVzOiBpbmhlcml0O1xuICB9XG5gfSw5NjY5OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnZhcmlhbnRzPXQuVmFyaWFudD12b2lkIDA7Y29uc3Qgcj1uKDc1MTgpO3QuVmFyaWFudD17aWNvblNpemU6XCJpY29uU2l6ZVwiLGNvbnRhaW5lclNpemU6XCJjb250YWluZXJTaXplXCJ9LHQudmFyaWFudHM9e1t0LlZhcmlhbnQuaWNvblNpemVdOnt4c21hbGw6ci5jc3NgXG4gICAgICAtLXB4LWljb246ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUueHNtYWxsfTtcbiAgICBgLHNtYWxsOnIuY3NzYFxuICAgICAgLS1weC1pY29uOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLnNtYWxsfTtcbiAgICBgLGJhc2U6ci5jc3NgXG4gICAgICAtLXB4LWljb246ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUuYmFzZX07XG4gICAgYCxsYXJnZTpyLmNzc2BcbiAgICAgIC0tcHgtaWNvbjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS5sYXJnZX07XG4gICAgYCx4bGFyZ2U6ci5jc3NgXG4gICAgICAtLXB4LWljb246ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUueGxhcmdlfTtcbiAgICBgLHh4bGFyZ2U6ci5jc3NgXG4gICAgICAtLXB4LWljb246ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUueHhsYXJnZX07XG4gICAgYCx4eHhsYXJnZTpyLmNzc2BcbiAgICAgIC0tcHgtaWNvbjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS54eHhsYXJnZX07XG4gICAgYH0sW3QuVmFyaWFudC5jb250YWluZXJTaXplXTp7eHNtYWxsOnIuY3NzYFxuICAgICAgLS1weC1jb250YWluZXI6ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUueHNtYWxsfTtcbiAgICBgLHNtYWxsOnIuY3NzYFxuICAgICAgLS1weC1jb250YWluZXI6ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUuc21hbGx9O1xuICAgIGAsYmFzZTpyLmNzc2BcbiAgICAgIC0tcHgtY29udGFpbmVyOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLmJhc2V9O1xuICAgIGAsbGFyZ2U6ci5jc3NgXG4gICAgICAtLXB4LWNvbnRhaW5lcjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS5sYXJnZX07XG4gICAgYCx4bGFyZ2U6ci5jc3NgXG4gICAgICAtLXB4LWNvbnRhaW5lcjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS54bGFyZ2V9O1xuICAgIGAseHhsYXJnZTpyLmNzc2BcbiAgICAgIC0tcHgtY29udGFpbmVyOiAkeyh7dGhlbWU6ZX0pPT5lLmljb25TaXplLnh4bGFyZ2V9O1xuICAgIGAseHh4bGFyZ2U6ci5jc3NgXG4gICAgICAtLXB4LWNvbnRhaW5lcjogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS54eHhsYXJnZX07XG4gICAgYH19fSw5NjM0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig3MDA2KSx0KX0sOTI4NTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5CZWxsRmlsbGVkSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuQmVsbEZpbGxlZEljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4cykoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjIwXCIsaGVpZ2h0OlwiMjBcIix2aWV3Qm94OlwiMCAwIDI0IDI0XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LG4se2NoaWxkcmVuOlsoMCxvLmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMTIgMkMxMS4yMjk2IDIgMTAuNTg0NSAyLjU4Mzc5IDEwLjUwNzggMy4zNTA0MUMxMC40OTUyIDMuNDc2NzcgMTAuNDA1NyAzLjU4MTU3IDEwLjI4NDYgMy42MTk3MUM4LjA2NTU0IDQuMzE4NTEgNi40MjIzOCA2LjMzNzk2IDYuMzAwMzMgOC43Nzg5M0w2LjEyMzgyIDEyLjMwOTFDNi4wOTkzNiAxMi43OTgyIDUuODEzMzEgMTMuMjM2MiA1LjM3NTMgMTMuNDU1Mkw0LjYwNzM5IDEzLjgzOTJDNC4xNDc2MSAxNC4wNjkxIDMuODU3MTggMTQuNTM5IDMuODU3MTggMTUuMDUzMVYxNi4yNUMzLjg1NzE4IDE2LjYyNDggNC4xNjA5OCAxNi45Mjg2IDQuNTM1NzUgMTYuOTI4NkgxOS40NjQzQzE5LjgzOTEgMTYuOTI4NiAyMC4xNDI5IDE2LjYyNDggMjAuMTQyOSAxNi4yNVYxNS4wNTMxQzIwLjE0MjkgMTQuNTM5IDE5Ljg1MjUgMTQuMDY5MSAxOS4zOTI3IDEzLjgzOTJMMTguNjI0NyAxMy40NTUyQzE4LjE4NjcgMTMuMjM2MiAxNy45MDA2IDEyLjc5ODIgMTcuODc2MiAxMi4zMDkxTDE3LjY5OTcgOC43Nzg5M0MxNy41Nzc2IDYuMzM3OTYgMTUuOTM0NCA0LjMxODUxIDEzLjcxNTQgMy42MTk3MkMxMy41OTQyIDMuNTgxNTcgMTMuNTA0OCAzLjQ3Njc4IDEzLjQ5MjIgMy4zNTA0MUMxMy40MTU1IDIuNTgzOCAxMi43NzA0IDIgMTIgMlpcIixmaWxsOnR9KSwoMCxvLmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNOS4yODU3MSAxOC4yODU3QzkuMjg1NzEgMTkuNzg0OCAxMC41MDA5IDIxIDEyIDIxQzEzLjQ5OTEgMjEgMTQuNzE0MyAxOS43ODQ4IDE0LjcxNDMgMTguMjg1N0w5LjI4NTcxIDE4LjI4NTdaXCIsZmlsbDp0fSldfSkpfX0sNDcxODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5CZWxsSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuQmVsbEljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTcuNDczMDYgMS4yMjk0M0M2LjUxOTMgMS4yMjk0MyA1Ljg3MjkxIDEuOTgzOTkgNS42NTM3MSAyLjcyNjk3QzUuNjUyMDcgMi43MjkzMiA1LjY0OTIxIDIuNzMzMDMgNS42NDQ4NSAyLjczNzU2QzUuNjM5MiAyLjc0MzQyIDUuNjMyNjQgMi43NDg5NiA1LjYyNTk5IDIuNzUzNTVDNS42MTkyNiAyLjc1ODE5IDUuNjE0NTIgMi43NjA0IDUuNjEzIDIuNzYxMDJMNS42MTI2NSAyLjc2MTE3QzUuMDUwODggMi45OTI1MSA0LjM5MTkzIDMuMzYwMjIgMy44NzY5NyA0LjAzMzU3QzMuMzU4MTUgNC43MTE5NiAzLjAxOTQ5IDUuNjU1NzEgMy4wMTk0NSA2Ljk3NzQ5TDUuNjUzNzEgMi43MjY5N0wzLjAxOTQ1IDYuOTc3NzZDMy4wMTg2NiA4LjMwMTY1IDIuODc4NzEgOS4wMzEzIDIuNjcwOTEgOS41MzQzOUMyLjQ4ODc5IDkuOTc1MzEgMi4yNDg4OSAxMC4yNjU4IDEuOTEyIDEwLjY3MzhMMS45MTE4NSAxMC42NzRDMS44NjI2MyAxMC43MzM2IDEuODExMzUgMTAuNzk1NyAxLjc1Nzg3IDEwLjg2MTJDMS4xNDkyMyAxMS42MDYgMS43MjcyOSAxMi42NDE5IDIuNjU5ODYgMTIuNjQxOUg1LjA5MDE5QzUuMjExOTEgMTIuOTggNS40MDcyNiAxMy4yOTA2IDUuNjY2MTggMTMuNTQ5NUM2LjEyODI3IDE0LjAxMTYgNi43NTQ5OSAxNC4yNzEyIDcuNDA4NDggMTQuMjcxMkM4LjA2MTk3IDE0LjI3MTIgOC42ODg3IDE0LjAxMTYgOS4xNTA3OCAxMy41NDk1QzkuNDA5NzEgMTMuMjkwNiA5LjYwNTA1IDEyLjk4IDkuNzI2NzggMTIuNjQxOUgxMi4yODk0QzEzLjIyMzQgMTIuNjQxOSAxMy43OTIgMTEuNjAwOCAxMy4xODg0IDEwLjg2MTNMMTMuMTg4MyAxMC44NjEyQzEzLjEzNDggMTAuNzk1NyAxMy4wODM1IDEwLjczMzYgMTMuMDM0MiAxMC42NzRDMTIuNjk3MyAxMC4yNjU5IDEyLjQ1NzQgOS45NzU0IDEyLjI3NTUgOS41MzQ1MUMxMi4wNjc4IDkuMDMxNDcgMTEuOTI4MiA4LjMwMTgyIDExLjkyODIgNi45Nzc3NkMxMS45MjgyIDUuNjU2ODggMTEuNTg5MSA0LjcxMjk5IDExLjA3MDMgNC4wMzQzM0MxMC41NTUzIDMuMzYwNzUgOS44OTY1MiAyLjk5MjM0IDkuMzM0OTkgMi43NjExNUw5LjMzNDY3IDIuNzYxMDJDOS4zMzQwOSAyLjc2MDc5IDkuMzI5ODIgMi43NTg4OCA5LjMyMzEzIDIuNzU0MjRDOS4zMTY1NSAyLjc0OTY3IDkuMzA5ODEgMi43NDM5NCA5LjMwMzgyIDIuNzM3N0M5LjI5ODc1IDIuNzMyNDEgOS4yOTU0NSAyLjcyODAzIDkuMjkzNjMgMi43MjUzMUM5LjA3MjY0IDEuOTgzNzggOC40MjY5MSAxLjIyOTQzIDcuNDczMDYgMS4yMjk0M1pNOC42ODY1NCAxMi42NDE5SDYuMTMwNDJDNi4xODc2IDEyLjcyOTUgNi4yNTQwMyAxMi44MTE1IDYuMzI5MSAxMi44ODY2QzYuNjE1MzcgMTMuMTcyOSA3LjAwMzYzIDEzLjMzMzcgNy40MDg0OCAxMy4zMzM3QzcuODEzMzMgMTMuMzMzNyA4LjIwMTYgMTMuMTcyOSA4LjQ4Nzg3IDEyLjg4NjZDOC41NjI5MyAxMi44MTE1IDguNjI5MzcgMTIuNzI5NSA4LjY4NjU0IDEyLjY0MTlaTTYuNTUxNDUgMi45OTcxNkM2LjY5NTcxIDIuNTAwODUgNy4wNzEyMSAyLjE2NjkzIDcuNDczMDYgMi4xNjY5M0M3Ljg3NDkyIDIuMTY2OTMgOC4yNTA1IDIuNTAwNjEgOC4zOTY2IDIuOTk3ODVMOC4zOTY5NSAyLjk5OTA0QzguNDg0OTkgMy4yOTU3NSA4LjcyODQzIDMuNTI1MzggOC45NzgwOSAzLjYyODA2QzkuNDU2MjUgMy44MjQ5MiA5Ljk0ODk0IDQuMTExMTkgMTAuMzI1NSA0LjYwMzczQzEwLjY5ODIgNS4wOTExOSAxMC45OTA3IDUuODI0ODYgMTAuOTkwNyA2Ljk3Nzc2QzEwLjk5MDcgOC4zNTUwNiAxMS4xMzM3IDkuMjI1NSAxMS40MDg5IDkuODkyMTdDMTEuNjQ4MyAxMC40NzIzIDExLjk4MjMgMTAuODc0OSAxMi4zMTY3IDExLjI3OEMxMi4zNjUzIDExLjMzNjYgMTIuNDEzOSAxMS4zOTUxIDEyLjQ2MjIgMTEuNDU0MkMxMi41MDE2IDExLjUwMjUgMTIuNTA0NiAxMS41NTUyIDEyLjQ3OTMgMTEuNjA1QzEyLjQ1NTMgMTEuNjUyNCAxMi4zOTk2IDExLjcwNDQgMTIuMjg5NCAxMS43MDQ0SDIuNjU5ODZDMi41NDYwNCAxMS43MDQ0IDIuNDg5NTUgMTEuNjUwOSAyLjQ2NTg4IDExLjYwNDVDMi40NDExOSAxMS41NTYyIDIuNDQzMjUgMTEuNTA0IDIuNDgzOCAxMS40NTQ0TDIuNDgzODMgMTEuNDU0NEMyLjUzMjE1IDExLjM5NTIgMi41ODA3NSAxMS4zMzY2IDIuNjI5MzQgMTEuMjc4MUwyLjYyOTQ2IDExLjI3NzlDMi45NjM4OSAxMC44NzQ4IDMuMjk3ODUgMTAuNDcyMyAzLjUzNzQgOS44OTIyOUMzLjgxMjczIDkuMjI1NzEgMy45NTYxNSA4LjM1NTMzIDMuOTU2OTUgNi45NzgwM1Y2Ljk3Nzc2QzMuOTU2OTUgNS44MjM0MSA0LjI0OTI4IDUuMDg5OTkgNC42MjE2NSA0LjYwMzA5QzQuOTk3OTIgNC4xMTExIDUuNDkwNDQgMy44MjUzNyA1Ljk2OTYzIDMuNjI4MDVDNi4yMTY2MSAzLjUyNjQ1IDYuNDYyNTcgMy4zMDAwMiA2LjU1MTExIDIuOTk4MzNMNi41NTE0NSAyLjk5NzE2WlwiLGZpbGw6dCxyb2xlOlwiaW1nXCJ9KX0pKX19LDEzMjQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQm9va21hcmtGaWxsZWQ9dm9pZCAwO2NvbnN0IG89big1ODkzKTt0LkJvb2ttYXJrRmlsbGVkPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjEyXCIsaGVpZ2h0OlwiMTJcIix2aWV3Qm94OlwiMCAwIDEyIDEyXCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LG4se2NoaWxkcmVuOigwLG8uanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk0yLjgwMDA1IDEuMTc1NzhDMi41MjM5MSAxLjE3NTc4IDIuMzAwMDUgMS4zOTk2NCAyLjMwMDA1IDEuNjc1NzhWMTAuNDc1OEMyLjMwMDA1IDEwLjY2NjkgMi40MDkwNCAxMC44NDE0IDIuNTgwODYgMTAuOTI1MkMyLjc1MjY3IDExLjAwOSAyLjk1NzIzIDEwLjk4NzUgMy4xMDc4NyAxMC44Njk4TDUuODQ2MTQgOC43MzA1MkM1LjkzNjU4IDguNjU5ODYgNi4wNjM1MiA4LjY1OTg2IDYuMTUzOTYgOC43MzA1Mkw4Ljg5MjIzIDEwLjg2OThDOS4wNDI4NyAxMC45ODc1IDkuMjQ3NDIgMTEuMDA5IDkuNDE5MjQgMTAuOTI1MkM5LjU5MTA1IDEwLjg0MTQgOS43MDAwNSAxMC42NjY5IDkuNzAwMDUgMTAuNDc1OFYxLjY3NTc4QzkuNzAwMDUgMS4zOTk2NCA5LjQ3NjE5IDEuMTc1NzggOS4yMDAwNSAxLjE3NTc4SDIuODAwMDVaXCIsZmlsbDp0fSl9KSl9fSwxMTAzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkJvb2ttYXJrT3V0bGluZWQ9dm9pZCAwO2NvbnN0IG89big1ODkzKTt0LkJvb2ttYXJrT3V0bGluZWQ9ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTJcIixoZWlnaHQ6XCIxMlwiLHZpZXdCb3g6XCIwIDAgMTIgMTJcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTIuMjk5OTkgMS42NzU3OEMyLjI5OTk5IDEuMzk5NjQgMi41MjM4NSAxLjE3NTc4IDIuNzk5OTkgMS4xNzU3OEg5LjE5OTk5QzkuNDc2MTMgMS4xNzU3OCA5LjY5OTk5IDEuMzk5NjQgOS42OTk5OSAxLjY3NTc4VjEwLjQ3NThDOS42OTk5OSAxMC42NjY5IDkuNTkwOTkgMTAuODQxNCA5LjQxOTE4IDEwLjkyNTJDOS4yNDczNiAxMS4wMDkgOS4wNDI4MSAxMC45ODc1IDguODkyMTcgMTAuODY5OEw2LjE1MzkgOC43MzA1MkM2LjA2MzQ2IDguNjU5ODYgNS45MzY1MiA4LjY1OTg2IDUuODQ2MDggOC43MzA1MkwzLjEwNzgxIDEwLjg2OThDMi45NTcxNyAxMC45ODc1IDIuNzUyNjEgMTEuMDA5IDIuNTgwOCAxMC45MjUyQzIuNDA4OTggMTAuODQxNCAyLjI5OTk5IDEwLjY2NjkgMi4yOTk5OSAxMC40NzU4VjEuNjc1NzhaTTMuMjk5OTkgMi4xNzU3OFY5LjQ1MDY2TDUuMjMwNDMgNy45NDI1QzUuNjgyNjUgNy41ODkyMSA2LjMxNzMzIDcuNTg5MiA2Ljc2OTU0IDcuOTQyNUw4LjY5OTk5IDkuNDUwNjZWMi4xNzU3OEgzLjI5OTk5WlwiLGZpbGw6dH0pfSkpfX0sODI2NTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Ccm9rZW5MaW5rSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuQnJva2VuTGlua0ljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4cykoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjMyXCIsaGVpZ2h0OlwiMzJcIix2aWV3Qm94OlwiMCAwIDMyIDMyXCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LG4se2NoaWxkcmVuOlsoMCxvLmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNNi4zMzM1IDMuNzAwMkM2LjA1NzM1IDMuNzAwMiA1LjgzMzUgMy45MjQwNSA1LjgzMzUgNC4yMDAyVjI3LjgwMDJDNS44MzM1IDI4LjA3NjMgNi4wNTczNSAyOC4zMDAyIDYuMzMzNSAyOC4zMDAySDI1LjY2NjhDMjUuOTQzIDI4LjMwMDIgMjYuMTY2OCAyOC4wNzYzIDI2LjE2NjggMjcuODAwMlYxMi4yMzM1SDE4LjEzMzVDMTcuODU3NCAxMi4yMzM1IDE3LjYzMzUgMTIuMDA5NyAxNy42MzM1IDExLjczMzVWMy43MDAySDYuMzMzNVpNMTguNjMzNSA0LjQwNzNMMjUuNDU5NyAxMS4yMzM1SDE4LjYzMzVWNC40MDczWk00LjgzMzUgNC4yMDAyQzQuODMzNSAzLjM3MTc3IDUuNTA1MDcgMi43MDAyIDYuMzMzNSAyLjcwMDJIMTguMTMzNUMxOC4yNjYxIDIuNzAwMiAxOC4zOTMzIDIuNzUyODcgMTguNDg3IDIuODQ2NjRMMjcuMDIwNCAxMS4zOEMyNy4xMTQxIDExLjQ3MzcgMjcuMTY2OCAxMS42MDA5IDI3LjE2NjggMTEuNzMzNVYyNy44MDAyQzI3LjE2NjggMjguNjI4NiAyNi40OTUzIDI5LjMwMDIgMjUuNjY2OCAyOS4zMDAySDYuMzMzNUM1LjUwNTA3IDI5LjMwMDIgNC44MzM1IDI4LjYyODYgNC44MzM1IDI3LjgwMDJWNC4yMDAyWlwiLGZpbGw6dH0pLCgwLG8uanN4KShcInBhdGhcIix7ZDpcIk0xNC4yNDggMjEuOTA4NFYyMS44NDA5QzE0LjI1MjggMjEuNDAwNiAxNC4yOTY2IDIxLjA1MDIgMTQuMzc5NCAyMC43ODk4QzE0LjQ2NDcgMjAuNTI5NCAxNC41ODU0IDIwLjMxODcgMTQuNzQxNyAyMC4xNTc3QzE0Ljg5NzkgMTkuOTk2NyAxNS4wODYxIDE5Ljg0OTkgMTUuMzA2MyAxOS43MTczQzE1LjQ0ODMgMTkuNjI3NCAxNS41NzYyIDE5LjUyNjggMTUuNjg5OCAxOS40MTU1QzE1LjgwMzQgMTkuMzA0MiAxNS44OTM0IDE5LjE3NjQgMTUuOTU5NyAxOS4wMzJDMTYuMDI2IDE4Ljg4NzUgMTYuMDU5MSAxOC43Mjc3IDE2LjA1OTEgMTguNTUyNkMxNi4wNTkxIDE4LjM0MTkgMTYuMDA5NCAxOC4xNTk2IDE1LjkxIDE4LjAwNTdDMTUuODEwNSAxNy44NTE4IDE1LjY3OCAxNy43MzM0IDE1LjUxMjMgMTcuNjUwNkMxNS4zNDg5IDE3LjU2NTMgMTUuMTY2NiAxNy41MjI3IDE0Ljk2NTQgMTcuNTIyN0MxNC43ODMxIDE3LjUyMjcgMTQuNjA5MSAxNy41NjA2IDE0LjQ0MzQgMTcuNjM2NEMxNC4yNzc2IDE3LjcxMjEgMTQuMTQwMyAxNy44MzA1IDE0LjAzMTQgMTcuOTkxNUMxMy45MjI1IDE4LjE1MDEgMTMuODU5OCAxOC4zNTQ5IDEzLjg0MzIgMTguNjA1OEgxMi43NjM3QzEyLjc4MDIgMTguMTc5NyAxMi44ODggMTcuODE5OCAxMy4wODY4IDE3LjUyNjNDMTMuMjg1NyAxNy4yMzA0IDEzLjU0ODUgMTcuMDA2NiAxMy44NzUyIDE2Ljg1NTFDMTQuMjA0MiAxNi43MDM2IDE0LjU2NzYgMTYuNjI3OCAxNC45NjU0IDE2LjYyNzhDMTUuNDAxIDE2LjYyNzggMTUuNzgyMSAxNi43MDk1IDE2LjEwODggMTYuODcyOUMxNi40MzU1IDE3LjAzMzkgMTYuNjg4OSAxNy4yNTk5IDE2Ljg2ODggMTcuNTUxMUMxNy4wNTExIDE3Ljg0IDE3LjE0MjIgMTguMTc3MyAxNy4xNDIyIDE4LjU2MzJDMTcuMTQyMiAxOC44Mjg0IDE3LjEwMDggMTkuMDY3NSAxNy4wMTc5IDE5LjI4MDVDMTYuOTM1MSAxOS40OTEyIDE2LjgxNjcgMTkuNjc5NSAxNi42NjI4IDE5Ljg0NTJDMTYuNTExMyAyMC4wMTA5IDE2LjMyOSAyMC4xNTc3IDE2LjExNTkgMjAuMjg1NUMxNS45MTQ3IDIwLjQxMSAxNS43NTE0IDIwLjU0MTIgMTUuNjI1OSAyMC42NzYxQzE1LjUwMjggMjAuODExMSAxNS40MTI4IDIwLjk3MDkgMTUuMzU2IDIxLjE1NTVDMTUuMjk5MiAyMS4zNDAyIDE1LjI2ODQgMjEuNTY4NyAxNS4yNjM3IDIxLjg0MDlWMjEuOTA4NEgxNC4yNDhaTTE0Ljc4NDMgMjQuMDY3NUMxNC41OTAxIDI0LjA2NzUgMTQuNDIzMiAyMy45OTg4IDE0LjI4MzYgMjMuODYxNUMxNC4xNDM5IDIzLjcyMTggMTQuMDc0IDIzLjU1MzcgMTQuMDc0IDIzLjM1NzJDMTQuMDc0IDIzLjE2MzEgMTQuMTQzOSAyMi45OTc0IDE0LjI4MzYgMjIuODYwMUMxNC40MjMyIDIyLjcyMDQgMTQuNTkwMSAyMi42NTA2IDE0Ljc4NDMgMjIuNjUwNkMxNC45NzYgMjIuNjUwNiAxNS4xNDE3IDIyLjcyMDQgMTUuMjgxNCAyMi44NjAxQzE1LjQyMzUgMjIuOTk3NCAxNS40OTQ1IDIzLjE2MzEgMTUuNDk0NSAyMy4zNTcyQzE1LjQ5NDUgMjMuNDg3NSAxNS40NjE0IDIzLjYwNyAxNS4zOTUxIDIzLjcxNTlDMTUuMzMxMSAyMy44MjI0IDE1LjI0NTkgMjMuOTA3NyAxNS4xMzk0IDIzLjk3MTZDMTUuMDMyOCAyNC4wMzU1IDE0LjkxNDUgMjQuMDY3NSAxNC43ODQzIDI0LjA2NzVaXCIsZmlsbDp0fSldfSkpfX0sNjQ0NzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DaGV2cm9uRG93bkljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0LkNoZXZyb25Eb3duSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7eG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHdpZHRoOlwiMjRcIixoZWlnaHQ6XCIyNFwiLHZpZXdCb3g6XCIwIDAgMjQgMjRcIixmaWxsOlwibm9uZVwifSx7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLE9iamVjdC5hc3NpZ24oe2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNNS4wNTI4MiA5Ljg4NzA3QzUuMzM2MTIgOS41ODQ4OSA1LjgxMDc1IDkuNTY5NTggNi4xMTI5MyA5Ljg1Mjg3TDEyIDE1LjM3MkwxNy44ODcgOS44NTI4N0MxOC4xODkyIDkuNTY5NTggMTguNjYzOCA5LjU4NDg5IDE4Ljk0NzEgOS44ODcwN0MxOS4yMzA0IDEwLjE4OTMgMTkuMjE1MSAxMC42NjM5IDE4LjkxMjkgMTAuOTQ3MkwxMi41MTI5IDE2Ljk0NzJDMTIuMjI0NCAxNy4yMTc2IDExLjc3NTUgMTcuMjE3NiAxMS40ODcgMTYuOTQ3Mkw1LjA4NzAyIDEwLjk0NzJDNC43ODQ4NCAxMC42NjM5IDQuNzY5NTIgMTAuMTg5MyA1LjA1MjgyIDkuODg3MDdaXCIsZmlsbDp0fSxuKSl9KSl9fSwyMTQ3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNoZXZyb25MZWZ0SWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuQ2hldnJvbkxlZnRJY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsd2lkdGg6XCIyNFwiLGhlaWdodDpcIjI0XCIsdmlld0JveDpcIjAgMCAyNCAyNFwiLGZpbGw6XCJub25lXCJ9LHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIsT2JqZWN0LmFzc2lnbih7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk0xNC4xMTI3IDUuMDUyNzJDMTQuNDE0OSA1LjMzNjAxIDE0LjQzMDIgNS44MTA2NCAxNC4xNDY5IDYuMTEyODJMOC42Mjc4NCAxMS45OTk5TDE0LjE0NjkgMTcuODg2OUMxNC40MzAyIDE4LjE4OTEgMTQuNDE0OSAxOC42NjM3IDE0LjExMjcgMTguOTQ3QzEzLjgxMDYgMTkuMjMwMyAxMy4zMzU5IDE5LjIxNSAxMy4wNTI2IDE4LjkxMjhMNy4wNTI2NCAxMi41MTI4QzYuNzgyMTggMTIuMjI0MyA2Ljc4MjE4IDExLjc3NTQgNy4wNTI2NCAxMS40ODY5TDEzLjA1MjYgNS4wODY5MUMxMy4zMzU5IDQuNzg0NzMgMTMuODEwNiA0Ljc2OTQyIDE0LjExMjcgNS4wNTI3MlpcIixmaWxsOnR9LG4pKX0pKX19LDI0MDI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2hldnJvblJpZ2h0SWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuQ2hldnJvblJpZ2h0SWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7eG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHdpZHRoOlwiMjRcIixoZWlnaHQ6XCIyNFwiLHZpZXdCb3g6XCIwIDAgMjQgMjRcIixmaWxsOlwibm9uZVwifSx7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLE9iamVjdC5hc3NpZ24oe2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNOS44ODc2MiA1LjA1MjU2QzEwLjE4OTggNC43NjkyNiAxMC42NjQ0IDQuNzg0NTcgMTAuOTQ3NyA1LjA4Njc2TDE2Ljk0NzcgMTEuNDg2OEMxNy4yMTgyIDExLjc3NTMgMTcuMjE4MiAxMi4yMjQyIDE2Ljk0NzcgMTIuNTEyN0wxMC45NDc3IDE4LjkxMjdDMTAuNjY0NCAxOS4yMTQ5IDEwLjE4OTggMTkuMjMwMiA5Ljg4NzYyIDE4Ljk0NjlDOS41ODU0MyAxOC42NjM2IDkuNTcwMTIgMTguMTg4OSA5Ljg1MzQyIDE3Ljg4NjhMMTUuMzcyNSAxMS45OTk3TDkuODUzNDIgNi4xMTI2N0M5LjU3MDEyIDUuODEwNDkgOS41ODU0NCA1LjMzNTg2IDkuODg3NjIgNS4wNTI1NlpcIixmaWxsOnR9LG4pKX0pKX19LDQ4MjU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2hldnJvblVwSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuQ2hldnJvblVwSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7eG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHdpZHRoOlwiMjRcIixoZWlnaHQ6XCIyNFwiLHZpZXdCb3g6XCIwIDAgMjQgMjRcIixmaWxsOlwibm9uZVwifSx7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLE9iamVjdC5hc3NpZ24oe2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNNS4wNTI4NSAxNC4xMTI5QzUuMzM2MTUgMTQuNDE1MSA1LjgxMDc4IDE0LjQzMDQgNi4xMTI5NiAxNC4xNDcxTDEyIDguNjI4MDJMMTcuODg3IDE0LjE0NzFDMTguMTg5MiAxNC40MzA0IDE4LjY2MzkgMTQuNDE1MSAxOC45NDcyIDE0LjExMjlDMTkuMjMwNSAxMy44MTA3IDE5LjIxNTEgMTMuMzM2MSAxOC45MTMgMTMuMDUyOEwxMi41MTMgNy4wNTI4MkMxMi4yMjQ1IDYuNzgyMzYgMTEuNzc1NSA2Ljc4MjM2IDExLjQ4NzEgNy4wNTI4Mkw1LjA4NzA1IDEzLjA1MjhDNC43ODQ4NyAxMy4zMzYxIDQuNzY5NTYgMTMuODEwNyA1LjA1Mjg1IDE0LjExMjlaXCIsZmlsbDp0fSxuKSl9KSl9fSwxMjgxOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkV4Y2xhbWF0aW9uQ2lyY2xlZEZpbGxlZEljb249dm9pZCAwO2NvbnN0IHI9big1ODkzKTt0LkV4Y2xhbWF0aW9uQ2lyY2xlZEZpbGxlZEljb249ZT0+KDAsci5qc3hzKShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTZcIixoZWlnaHQ6XCIxN1wiLHZpZXdCb3g6XCIwIDAgMTYgMTdcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSx7Y2hpbGRyZW46WygwLHIuanN4KShcInBhdGhcIix7ZDpcIk03Ljk5OTg4IDE1LjMzMTdDMTEuNzcyOSAxNS4zMzE3IDE0LjgzMTYgMTIuMjczMSAxNC44MzE2IDguNTAwMDdDMTQuODMxNiA0LjcyNzA0IDExLjc3MjkgMS42Njg0IDcuOTk5ODggMS42Njg0QzQuMjI2ODYgMS42Njg0IDEuMTY4MjEgNC43MjcwNCAxLjE2ODIxIDguNTAwMDdDMS4xNjgyMSAxMi4yNzMxIDQuMjI2ODYgMTUuMzMxNyA3Ljk5OTg4IDE1LjMzMTdaXCIsZmlsbDpcInJlZFwifSksKDAsci5qc3gpKFwibWFza1wiLE9iamVjdC5hc3NpZ24oe2lkOlwicGF0aC0yLWluc2lkZS0xXzZfMjYyMDMzXCIsZmlsbDpcIndoaXRlXCJ9LHtjaGlsZHJlbjooMCxyLmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNNy45OTk5MyA0LjM3Mzg0QzcuNTc1MjUgNC4zNzM4NCA3LjIzNTY0IDQuNzI2NzYgNy4yNTE5NiA1LjE1MTEzTDcuNDIyOTYgOS41OTcwNkM3LjQzNDg5IDkuOTA3MDggNy42ODk2OCAxMC4xNTIzIDcuOTk5OTMgMTAuMTUyM0M4LjMxMDE5IDEwLjE1MjMgOC41NjQ5OCA5LjkwNzA4IDguNTc2OSA5LjU5NzA2TDguNzQ3OSA1LjE1MTEzQzguNzY0MjIgNC43MjY3NiA4LjQyNDYxIDQuMzczODQgNy45OTk5MyA0LjM3Mzg0Wk03Ljk5OTkzIDEyLjY0MDZDOC40NjAyMiAxMi42NDA2IDguODMzMzUgMTIuMjY3NSA4LjgzMzM1IDExLjgwNzJDOC44MzMzNSAxMS4zNDY5IDguNDYwMjIgMTAuOTczOCA3Ljk5OTkzIDEwLjk3MzhDNy41Mzk2NCAxMC45NzM4IDcuMTY2NSAxMS4zNDY5IDcuMTY2NSAxMS44MDcyQzcuMTY2NSAxMi4yNjc1IDcuNTM5NjQgMTIuNjQwNiA3Ljk5OTkzIDEyLjY0MDZaXCJ9KX0pKSwoMCxyLmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNNy45OTk5MyA0LjM3Mzg0QzcuNTc1MjUgNC4zNzM4NCA3LjIzNTY0IDQuNzI2NzYgNy4yNTE5NiA1LjE1MTEzTDcuNDIyOTYgOS41OTcwNkM3LjQzNDg5IDkuOTA3MDggNy42ODk2OCAxMC4xNTIzIDcuOTk5OTMgMTAuMTUyM0M4LjMxMDE5IDEwLjE1MjMgOC41NjQ5OCA5LjkwNzA4IDguNTc2OSA5LjU5NzA2TDguNzQ3OSA1LjE1MTEzQzguNzY0MjIgNC43MjY3NiA4LjQyNDYxIDQuMzczODQgNy45OTk5MyA0LjM3Mzg0Wk03Ljk5OTkzIDEyLjY0MDZDOC40NjAyMiAxMi42NDA2IDguODMzMzUgMTIuMjY3NSA4LjgzMzM1IDExLjgwNzJDOC44MzMzNSAxMS4zNDY5IDguNDYwMjIgMTAuOTczOCA3Ljk5OTkzIDEwLjk3MzhDNy41Mzk2NCAxMC45NzM4IDcuMTY2NSAxMS4zNDY5IDcuMTY2NSAxMS44MDcyQzcuMTY2NSAxMi4yNjc1IDcuNTM5NjQgMTIuNjQwNiA3Ljk5OTkzIDEyLjY0MDZaXCIsZmlsbDpcIndoaXRlXCJ9KSwoMCxyLmpzeCkoXCJwYXRoXCIse2Q6XCJNNy4yNTE5NiA1LjE1MTEzTDUuNjQ4NzQgNS4yMTI3OUw1LjY0ODc0IDUuMjEyNzlMNy4yNTE5NiA1LjE1MTEzWk03LjQyMjk2IDkuNTk3MDZMOS4wMjYxOCA5LjUzNTRMOS4wMjYxOCA5LjUzNTRMNy40MjI5NiA5LjU5NzA2Wk04LjU3NjkgOS41OTcwNkwxMC4xODAxIDkuNjU4NzJMOC41NzY5IDkuNTk3MDZaTTguNzQ3OSA1LjE1MTEzTDEwLjM1MTEgNS4yMTI3OUwxMC4zNTExIDUuMjEyNzlMOC43NDc5IDUuMTUxMTNaTTguODU1MTkgNS4wODk0N0M4Ljg3Mzg1IDUuNTc0NyA4LjQ4NTUzIDUuOTc4MjUgNy45OTk5MyA1Ljk3ODI1VjIuNzY5NDNDNi42NjQ5OCAyLjc2OTQzIDUuNTk3NDQgMy44Nzg4MiA1LjY0ODc0IDUuMjEyNzlMOC44NTUxOSA1LjA4OTQ3Wk05LjAyNjE4IDkuNTM1NEw4Ljg1NTE5IDUuMDg5NDdMNS42NDg3NCA1LjIxMjc5TDUuODE5NzQgOS42NTg3Mkw5LjAyNjE4IDkuNTM1NFpNNy45OTk5MyA4LjU0Nzg2QzguNTUxNzcgOC41NDc4NiA5LjAwNDk4IDguOTgzOTYgOS4wMjYxOCA5LjUzNTRMNS44MTk3NCA5LjY1ODcyQzUuODY0OCAxMC44MzAyIDYuODI3NTggMTEuNzU2NyA3Ljk5OTkzIDExLjc1NjdWOC41NDc4NlpNNi45NzM2OCA5LjUzNTRDNi45OTQ4OSA4Ljk4Mzk2IDcuNDQ4MDkgOC41NDc4NiA3Ljk5OTkzIDguNTQ3ODZWMTEuNzU2N0M5LjE3MjI4IDExLjc1NjcgMTAuMTM1MSAxMC44MzAyIDEwLjE4MDEgOS42NTg3Mkw2Ljk3MzY4IDkuNTM1NFpNNy4xNDQ2OCA1LjA4OTQ3TDYuOTczNjggOS41MzU0TDEwLjE4MDEgOS42NTg3MkwxMC4zNTExIDUuMjEyNzlMNy4xNDQ2OCA1LjA4OTQ3Wk03Ljk5OTkzIDUuOTc4MjVDNy41MTQzNCA1Ljk3ODI1IDcuMTI2MDIgNS41NzQ3IDcuMTQ0NjggNS4wODk0N0wxMC4zNTExIDUuMjEyNzlDMTAuNDAyNCAzLjg3ODgyIDkuMzM0ODkgMi43Njk0MyA3Ljk5OTkzIDIuNzY5NDNWNS45NzgyNVpNNy4yMjg5NSAxMS44MDcyQzcuMjI4OTUgMTEuMzgxNCA3LjU3NDEzIDExLjAzNjIgNy45OTk5MyAxMS4wMzYyVjE0LjI0NUM5LjM0NjMxIDE0LjI0NSAxMC40Mzc4IDEzLjE1MzYgMTAuNDM3OCAxMS44MDcySDcuMjI4OTVaTTcuOTk5OTMgMTIuNTc4MkM3LjU3NDEzIDEyLjU3ODIgNy4yMjg5NSAxMi4yMzMgNy4yMjg5NSAxMS44MDcySDEwLjQzNzhDMTAuNDM3OCAxMC40NjA4IDkuMzQ2MzEgOS4zNjkzNyA3Ljk5OTkzIDkuMzY5MzdWMTIuNTc4MlpNOC43NzA5MSAxMS44MDcyQzguNzcwOTEgMTIuMjMzIDguNDI1NzMgMTIuNTc4MiA3Ljk5OTkzIDEyLjU3ODJWOS4zNjkzN0M2LjY1MzU1IDkuMzY5MzcgNS41NjIxIDEwLjQ2MDggNS41NjIxIDExLjgwNzJIOC43NzA5MVpNNy45OTk5MyAxMS4wMzYyQzguNDI1NzMgMTEuMDM2MiA4Ljc3MDkxIDExLjM4MTQgOC43NzA5MSAxMS44MDcySDUuNTYyMUM1LjU2MjEgMTMuMTUzNiA2LjY1MzU1IDE0LjI0NSA3Ljk5OTkzIDE0LjI0NVYxMS4wMzYyWlwiLGZpbGw6XCJ3aGl0ZVwiLG1hc2s6XCJ1cmwoI3BhdGgtMi1pbnNpZGUtMV82XzI2MjAzMylcIn0pXX0pKX0sMTQwOTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5GYWxsYmFja0dsb2JlSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuRmFsbGJhY2tHbG9iZUljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTZcIixoZWlnaHQ6XCIxNlwiLHZpZXdCb3g6XCIwIDAgMTYgMTZcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTE0LjQxNDEgNS4xOTk5OEMxMy41OTM3IDMuMzMwNjIgMTEuOTc4OCAxLjg4NTgyIDkuOTk4ODYgMS4yOTQzMkMxMC42MTc3IDIuMjYyMDcgMTEuMDUxNyAzLjY2MzQ3IDExLjI4ODYgNS4xOTk5OEgxNC40MTQxWk0xNC43NzcxIDkuNzQ5OThDMTQuOTIyIDkuMTkwMzMgMTUgOC42MDQ0MyAxNSA3Ljk5OTk4QzE1IDcuMzk1NTMgMTQuOTIyIDYuODA5NjMgMTQuNzc3MSA2LjI0OTk4SDExLjQxNzFDMTEuNDcxMyA2LjgyOTIzIDExLjUgNy40MTY4OCAxMS41IDcuOTk5OThDMTEuNSA4LjU4MzA4IDExLjQ3MTMgOS4xNzA3MyAxMS40MTcxIDkuNzQ5OThIMTQuNzc3MVpNNC41MDAwMSA3Ljk5OTk4QzQuNTAwMDEgNy40MTY4OCA0LjUyODcxIDYuODI5MjMgNC41ODI5NiA2LjI0OTk4SDEuMjIyOTVDMS4wNzgwNSA2LjgwOTYzIDEgNy4zOTU1MyAxIDcuOTk5OThDMSA4LjYwNDQzIDEuMDc4MDUgOS4xOTAzMyAxLjIyMjk1IDkuNzQ5OThINC41ODI5NkM0LjUyODcxIDkuMTcwNzMgNC41MDAwMSA4LjU4MzA4IDQuNTAwMDEgNy45OTk5OFpNMTAuNDUgNy45OTk5OEMxMC40NSA3LjM4OTU4IDEwLjQxNjggNi44MDY0OCAxMC4zNjE4IDYuMjQ5OThINS42MzgyMUM1LjU4MzI2IDYuODA2NDggNS41NTAwMSA3LjM4OTU4IDUuNTUwMDEgNy45OTk5OEM1LjU1MDAxIDguNjEwMzggNS41ODMyNiA5LjE5MzQ4IDUuNjM4MjEgOS43NDk5OEgxMC4zNjE4QzEwLjQxNjggOS4xOTM0OCAxMC40NSA4LjYxMDM4IDEwLjQ1IDcuOTk5OThaTTEwLjIyNjcgNS4xOTk5OEM5LjgwNzQxIDIuNjc3MTcgOC44NjU1NiAwLjk5OTk2OSA4LjAwMDAxIDAuOTk5OTY5QzcuMTM0NDYgMC45OTk5NjkgNi4xOTI2MSAyLjY3NzE3IDUuNzczMzEgNS4xOTk5OEgxMC4yMjY3Wk01Ljc3MzMxIDEwLjhDNi4xOTI2MSAxMy4zMjI4IDcuMTM0ODEgMTUgOC4wMDAwMSAxNUM4Ljg2NTIxIDE1IDkuODA3NDEgMTMuMzIyOCAxMC4yMjY3IDEwLjhINS43NzMzMVpNNC43MTE0MSA1LjE5OTk4QzQuOTQ4MzYgMy42NjM0NyA1LjM4MjM2IDIuMjYyMDcgNi4wMDExNiAxLjI5NDMyQzQuMDIxMiAxLjg4NTgyIDIuNDA2MyAzLjMzMDYyIDEuNTg1OSA1LjE5OTk4SDQuNzExNDFaTTExLjI4ODYgMTAuOEMxMS4wNTE3IDEyLjMzNjUgMTAuNjE3NyAxMy43Mzc5IDkuOTk4ODYgMTQuNzA1NkMxMS45Nzg4IDE0LjExNDEgMTMuNTkzNyAxMi42Njk3IDE0LjQxNDEgMTAuOEgxMS4yODg2Wk0xLjU4NTkgMTAuOEMyLjQwNjMgMTIuNjY5MyA0LjAyMTIgMTQuMTE0MSA2LjAwMTE2IDE0LjcwNTZDNS4zODIzNiAxMy43Mzc5IDQuOTQ4MzYgMTIuMzM2NSA0LjcxMTQxIDEwLjhIMS41ODU5WlwiLGZpbGw6dCxmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pfSkpfX0sNzQyOTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5GaWxsZWRDaXJjbGVJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5GaWxsZWRDaXJjbGVJY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTZcIix2aWV3Qm94OlwiMCAwIDE2IDE2XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LG4se2NoaWxkcmVuOigwLG8uanN4KShcImdcIixPYmplY3QuYXNzaWduKHtpZDpcIi5TbG90XCJ9LHtjaGlsZHJlbjooMCxvLmpzeCkoXCJjaXJjbGVcIix7aWQ6XCJFbGxpcHNlIDFcIixjeDpcIjhcIixjeTpcIjhcIixyOlwiOFwiLGZpbGw6dH0pfSkpfSkpfX0sNjc5NTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5GaWx0ZXJJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5GaWx0ZXJJY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjEyXCIsaGVpZ2h0OlwiN1wiLHZpZXdCb3g6XCIwIDAgMTIgN1wiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNNCA2LjVDNCA2LjM2NzM5IDQuMDUyNjggNi4yNDAyMSA0LjE0NjQ1IDYuMTQ2NDVDNC4yNDAyMSA2LjA1MjY4IDQuMzY3MzkgNiA0LjUgNkg3LjVDNy42MzI2MSA2IDcuNzU5NzkgNi4wNTI2OCA3Ljg1MzU1IDYuMTQ2NDVDNy45NDczMiA2LjI0MDIxIDggNi4zNjczOSA4IDYuNUM4IDYuNjMyNjEgNy45NDczMiA2Ljc1OTc5IDcuODUzNTUgNi44NTM1NUM3Ljc1OTc5IDYuOTQ3MzIgNy42MzI2MSA3IDcuNSA3SDQuNUM0LjM2NzM5IDcgNC4yNDAyMSA2Ljk0NzMyIDQuMTQ2NDUgNi44NTM1NUM0LjA1MjY4IDYuNzU5NzkgNCA2LjYzMjYxIDQgNi41Wk0yIDMuNUMyIDMuMzY3MzkgMi4wNTI2OCAzLjI0MDIxIDIuMTQ2NDUgMy4xNDY0NUMyLjI0MDIxIDMuMDUyNjggMi4zNjczOSAzIDIuNSAzSDkuNUM5LjYzMjYxIDMgOS43NTk3OSAzLjA1MjY4IDkuODUzNTUgMy4xNDY0NUM5Ljk0NzMyIDMuMjQwMjEgMTAgMy4zNjczOSAxMCAzLjVDMTAgMy42MzI2MSA5Ljk0NzMyIDMuNzU5NzkgOS44NTM1NSAzLjg1MzU1QzkuNzU5NzkgMy45NDczMiA5LjYzMjYxIDQgOS41IDRIMi41QzIuMzY3MzkgNCAyLjI0MDIxIDMuOTQ3MzIgMi4xNDY0NSAzLjg1MzU1QzIuMDUyNjggMy43NTk3OSAyIDMuNjMyNjEgMiAzLjVaTTAgMC41QzAgMC4zNjczOTIgMC4wNTI2Nzg1IDAuMjQwMjE1IDAuMTQ2NDQ3IDAuMTQ2NDQ3QzAuMjQwMjE1IDAuMDUyNjc4NSAwLjM2NzM5MiAwIDAuNSAwSDExLjVDMTEuNjMyNiAwIDExLjc1OTggMC4wNTI2Nzg1IDExLjg1MzYgMC4xNDY0NDdDMTEuOTQ3MyAwLjI0MDIxNSAxMiAwLjM2NzM5MiAxMiAwLjVDMTIgMC42MzI2MDggMTEuOTQ3MyAwLjc1OTc4NSAxMS44NTM2IDAuODUzNTUzQzExLjc1OTggMC45NDczMjEgMTEuNjMyNiAxIDExLjUgMUgwLjVDMC4zNjczOTIgMSAwLjI0MDIxNSAwLjk0NzMyMSAwLjE0NjQ0NyAwLjg1MzU1M0MwLjA1MjY3ODUgMC43NTk3ODUgMCAwLjYzMjYwOCAwIDAuNVpcIixmaWxsOnR9KX0pKX19LDExNzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5GbG9wcHlEaXNrSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuRmxvcHB5RGlza0ljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTJcIixoZWlnaHQ6XCIxMlwiLHZpZXdCb3g6XCIwIDAgMTIgMTJcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTEuODc1IDIuMTg3NUMxLjg3NSAyLjE1Mjk4IDEuOTAyOTggMi4xMjUgMS45Mzc1IDIuMTI1SDguMjMwMzlDOC4yNDY5NyAyLjEyNSA4LjI2Mjg3IDIuMTMxNTggOC4yNzQ1OSAyLjE0MzMxTDkuOTgxNjkgMy44NTA0MUM5Ljk5MzQxIDMuODYyMTMgMTAgMy44NzgwMyAxMCAzLjg5NDYxVjEwLjE4NzVDMTAgMTAuMjIyIDkuOTcyMDIgMTAuMjUgOS45Mzc1IDEwLjI1SDEuOTM3NUMxLjkwMjk4IDEwLjI1IDEuODc1IDEwLjIyMiAxLjg3NSAxMC4xODc1VjIuMTg3NVpNMS45Mzc1IDEuMjVDMS40MTk3MyAxLjI1IDEgMS42Njk3MyAxIDIuMTg3NVYxMC4xODc1QzEgMTAuNzA1MyAxLjQxOTczIDExLjEyNSAxLjkzNzUgMTEuMTI1SDkuOTM3NUMxMC40NTUzIDExLjEyNSAxMC44NzUgMTAuNzA1MyAxMC44NzUgMTAuMTg3NVYzLjg5NDYxQzEwLjg3NSAzLjY0NTk3IDEwLjc3NjIgMy40MDc1MSAxMC42MDA0IDMuMjMxNjlMOC44OTMzMSAxLjUyNDU5QzguNzE3NDkgMS4zNDg3NyA4LjQ3OTAzIDEuMjUgOC4yMzAzOSAxLjI1SDEuOTM3NVpNMi44NDkyNCAzLjQwODFDMi44NDkyNCAzLjIzNzU0IDIuOTg3NTEgMy4wOTkyNyAzLjE1ODA3IDMuMDk5MjdINy40ODE2QzcuNjUyMTUgMy4wOTkyNyA3Ljc5MDQyIDMuMjM3NTQgNy43OTA0MiAzLjQwODFWNC42NDMzOUM3Ljc5MDQyIDQuODEzOTUgNy42NTIxNSA0Ljk1MjIxIDcuNDgxNiA0Ljk1MjIxSDMuMTU4MDdDMi45ODc1MSA0Ljk1MjIxIDIuODQ5MjQgNC44MTM5NSAyLjg0OTI0IDQuNjQzMzlWMy40MDgxWk00LjUzNjggNi42Mzk3N0M0LjgyNjM4IDYuMzUwMTkgNS4yMTkxMyA2LjE4NzUxIDUuNjI4NjUgNi4xODc1MUM2LjAzODE4IDYuMTg3NTEgNi40MzA5MyA2LjM1MDE5IDYuNzIwNTEgNi42Mzk3N0M3LjAxMDA5IDYuOTI5MzUgNy4xNzI3NyA3LjMyMjEgNy4xNzI3NyA3LjczMTYzQzcuMTcyNzcgOC4xNDExNSA3LjAxMDA5IDguNTMzOSA2LjcyMDUxIDguODIzNDhDNi40MzA5MyA5LjExMzA2IDYuMDM4MTggOS4yNzU3NCA1LjYyODY1IDkuMjc1NzRDNS4yMTkxMyA5LjI3NTc0IDQuODI2MzggOS4xMTMwNiA0LjUzNjggOC44MjM0OEM0LjI0NzIyIDguNTMzOSA0LjA4NDU0IDguMTQxMTUgNC4wODQ1NCA3LjczMTYzQzQuMDg0NTQgNy4zMjIxIDQuMjQ3MjIgNi45MjkzNSA0LjUzNjggNi42Mzk3N1pcIixmaWxsOnQscm9sZTpcImltZ1wifSl9KSl9fSw1Mjk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuRnJhZ21lbnRzSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuRnJhZ21lbnRzSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIyMFwiLGhlaWdodDpcIjIwXCIsdmlld0JveDpcIjAgMCAyNCAyNFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNOC44MDAwMSA0LjgwMDAySDQuODAwMDFDMy45MTc2MSA0LjgwMDAyIDMuMjAwMDEgNS41MTc2MiAzLjIwMDAxIDYuNDAwMDJWMTAuNEMzLjIwMDAxIDExLjI4MjQgMy45MTc2MSAxMiA0LjgwMDAxIDEySDguODAwMDFDOS42ODI0MSAxMiAxMC40IDExLjI4MjQgMTAuNCAxMC40VjYuNDAwMDJDMTAuNCA1LjUxNzYyIDkuNjgyNDEgNC44MDAwMiA4LjgwMDAxIDQuODAwMDJaTTIwLjM1OTIgNi40Njg4MkwxNy41MzEyIDMuNjQwMDJDMTYuOTA4IDMuMDE2MDIgMTUuODkyIDMuMDE2MDIgMTUuMjY4OCAzLjY0MDAyTDEyLjQ0MDggNi40Njg4MkMxMS44MTY4IDcuMDkyODIgMTEuODE2OCA4LjEwNzIyIDEyLjQ0MDggOC43MzEyMkwxNS4yNjg4IDExLjU2QzE1LjU4MDggMTEuODcyIDE1Ljk5MDQgMTIuMDI4IDE2LjQgMTIuMDI4QzE2LjgwOTYgMTIuMDI4IDE3LjIxOTIgMTEuODcyIDE3LjUzMTIgMTEuNTZMMjAuMzU5MiA4LjczMTIyQzIwLjk4MzIgOC4xMDcyMiAyMC45ODMyIDcuMDkyODIgMjAuMzU5MiA2LjQ2ODgyWk04LjgwMDAxIDEzLjZINC44MDAwMUMzLjkxNzYxIDEzLjYgMy4yMDAwMSAxNC4zMTc2IDMuMjAwMDEgMTUuMlYxOS4yQzMuMjAwMDEgMjAuMDgyNCAzLjkxNzYxIDIwLjggNC44MDAwMSAyMC44SDguODAwMDFDOS42ODI0MSAyMC44IDEwLjQgMjAuMDgyNCAxMC40IDE5LjJWMTUuMkMxMC40IDE0LjMxNzYgOS42ODI0MSAxMy42IDguODAwMDEgMTMuNlpNMTcuNiAxMy42SDEzLjZDMTIuNzE3NiAxMy42IDEyIDE0LjMxNzYgMTIgMTUuMlYxOS4yQzEyIDIwLjA4MjQgMTIuNzE3NiAyMC44IDEzLjYgMjAuOEgxNy42QzE4LjQ4MjQgMjAuOCAxOS4yIDIwLjA4MjQgMTkuMiAxOS4yVjE1LjJDMTkuMiAxNC4zMTc2IDE4LjQ4MjQgMTMuNiAxNy42IDEzLjZaXCIsZmlsbDp0fSl9KSl9fSw3Nzg4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkxpZ2h0QnVsYkZpbGxlZEljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0LkxpZ2h0QnVsYkZpbGxlZEljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4cykoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjEwXCIsaGVpZ2h0OlwiMTJcIix2aWV3Qm94OlwiMCAwIDEwIDEyXCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LG4se2NoaWxkcmVuOlsoMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNMS44MyAxLjMxMDA4QzIuMjQ0MDkgMC44OTE2NjcgMi43Mzc2OCAwLjU2MDMwNyAzLjI4MTc0IDAuMzM1NTA0QzMuODI1ODEgMC4xMTA3MDEgNC40MDkzNCAtMC4wMDMwMDMzMyA0Ljk5OCAwLjAwMTA4MjkxQzYuMTg2MjggLTAuMDAzMTA3ODUgNy4zMjkwNSAwLjQ1NzczMyA4LjE4MiAxLjI4NTA4QzguNTk4ODEgMS42ODcxOSA4LjkzMDQ2IDIuMTY5MDMgOS4xNTcyMyAyLjcwMTk0QzkuMzg0IDMuMjM0ODUgOS41MDEyNSAzLjgwNzkzIDkuNTAyIDQuMzg3MDhDOS41MDIgNS42ODAwOCA4LjkxNyA2LjgzMDA4IDcuODgzIDcuODI1MDhMNy41NzcgOS4wMDAwOEgyLjQ2NkwyLjIzNiA4LjAzNzA4QzEuMTU0IDYuOTA3MDggMC41NTYgNS44MTkwOCAwLjUgNC41ODIwOFY0LjU0NDA4QzAuNTQgMy4yNDgwOCAxLjAzMyAyLjEyMTA4IDEuODMxIDEuMzExMDhMMS44MyAxLjMxMDA4WlwiLGZpbGw6dH0pLCgwLG8uanN4KShcInBhdGhcIix7ZDpcIk0yLjcwNDEgMTBMMi45MzcxIDEwLjk3OEwyLjk0NTEgMTFDMy4wNDUxIDExLjI5NyAzLjIzNzEgMTEuNTQ0IDMuNDc5MSAxMS43MTdDMy43MzAxIDExLjg5NyA0LjAzNzEgMTEuOTk5IDQuMzYxMSAxMS45OTlINC4zNjMxTDUuNzQ2MSAxMS45OTVMNS43NjcxIDExLjk5M0M2LjA3NTg3IDExLjk2NjkgNi4zNjkxMyAxMS44NDY1IDYuNjA3MSAxMS42NDhDNi44MzgxIDExLjQ1NCA3LjAxMzEgMTEuMTg4IDcuMDg3MSAxMC44NzRMNy4zMTYxIDEwSDIuNzA0MVYxMFpcIixmaWxsOnR9KV19KSl9fSwzNzAzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkxpZ2h0QnVsYk91dGxpbmVkSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuTGlnaHRCdWxiT3V0bGluZWRJY29uPWU9Pnt2YXJ7Y29sb3I6dD1cImN1cnJlbnRDb2xvclwifT1lLG49cihlLFtcImNvbG9yXCJdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjEwXCIsaGVpZ2h0OlwiMTJcIix2aWV3Qm94OlwiMCAwIDEwIDEyXCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LG4se2NoaWxkcmVuOigwLG8uanN4KShcInBhdGhcIix7ZDpcIk00Ljk5NzY2IDAuMDAxMDAxNDlDMy43Njg2NiAwLjAwMTAwMTQ5IDIuNjQ3NjYgMC40ODIwMDIgMS44Mjk2NiAxLjMxMUMxLjAzMTY2IDIuMTIxIDAuNTM5NjU3IDMuMjQ4IDAuNDk5NjU3IDQuNTQ0TDAuNDk4NjU3IDQuNTYzVjQuNTgzQzAuNTU1NjU3IDUuODE5IDEuMTUzNjYgNi45MDcgMi4yMzU2NiA4LjAzN0wyLjkzNzY2IDEwLjk3OEwyLjk0NDY2IDExQzMuMDQ0NjYgMTEuMjk3IDMuMjM2NjYgMTEuNTQ0IDMuNDc4NjYgMTEuNzE3QzMuNzI5NjYgMTEuODk3IDQuMDM2NjYgMTEuOTk5IDQuMzYxNjYgMTEuOTk5TDUuNzQ1NjYgMTEuOTk1TDUuNzY2NjYgMTEuOTkzQzYuMDc1NDIgMTEuOTY2OSA2LjM2ODY5IDExLjg0NjUgNi42MDY2NiAxMS42NDhDNi44Mzc2NiAxMS40NTQgNy4wMTI2NiAxMS4xODggNy4wODY2NiAxMC44NzRMNy44ODI2NiA3LjgyNEM4LjkxNjY2IDYuODMgOS41MDA2NiA1LjY4IDkuNTAwNjYgNC4zODdDOS40OTk5MSAzLjgwNzg1IDkuMzgyNjYgMy4yMzQ3NyA5LjE1NTg5IDIuNzAxODZDOC45MjkxMiAyLjE2ODk1IDguNTk3NDYgMS42ODcxMSA4LjE4MDY2IDEuMjg1QzcuMzI3OTYgMC40NTc4OTQgNi4xODU1OSAtMC4wMDI5Mjc4OCA0Ljk5NzY2IDAuMDAxMDAxNDlaTTIuNTQyNjYgMi4wMTNDMi44NjM0NCAxLjY4ODcxIDMuMjQ1OTYgMS40MzE5OCAzLjY2NzYyIDEuMjU4QzQuMDg5MjggMS4wODQwMSA0LjU0MTUzIDAuOTk2MjgzIDQuOTk3NjYgMUM1LjkyNTE0IDAuOTk1Nzg0IDYuODE3NDQgMS4zNTQ3MSA3LjQ4MzY2IDJDNy44MDQ3MSAyLjMwOTA0IDguMDYwMjMgMi42Nzk1NyA4LjIzNDk2IDMuMDg5NTFDOC40MDk2OSAzLjQ5OTQ1IDguNTAwMDUgMy45NDAzOCA4LjUwMDY2IDQuMzg2QzguNTAwNjYgNS4zNzcgOC4wNDc2NiA2LjMxMiA3LjA5NjY2IDcuMTkxTDYuOTg4NjYgNy4yOTFMNi41NDI2NiA5SDMuNDkzNjZMMy4xNDQ2NiA3LjUzNkwzLjA0NzY2IDcuNDM2QzEuOTk5NjYgNi4zNzIgMS41NDc2NiA1LjQ4IDEuNDk4NjYgNC41NTdDMS41MzY2NiAzLjUwOSAxLjkzMjY2IDIuNjMyIDIuNTQyNjYgMi4wMTRWMi4wMTNaTTMuNzMyNjYgMTBINi4yODI2Nkw2LjExNzY2IDEwLjYyN0w2LjExNDY2IDEwLjY0QzYuMDkyMTEgMTAuNzM0MiA2LjAzOTQ0IDEwLjgxODUgNS45NjQ2NiAxMC44OEM1Ljg4ODczIDEwLjk0MzUgNS43OTU5NSAxMC45ODM0IDUuNjk3NjYgMTAuOTk1TDQuMzYwNjYgMTFDNC4yNTMyMSAxMS4wMDAzIDQuMTQ4MzMgMTAuOTY3MSA0LjA2MDY2IDEwLjkwNUMzLjk4NzcgMTAuODUzNiAzLjkzMTM5IDEwLjc4MiAzLjg5ODY2IDEwLjY5OUwzLjczMTY2IDEwSDMuNzMyNjZaXCIsZmlsbDp0fSl9KSl9fSw4MzExOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkxvY2tlZENsb3NlZEZpbGxlZEljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0LkxvY2tlZENsb3NlZEZpbGxlZEljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTUuMDAwMDMgNC42MzYyM0M1LjAwMDAzIDMuNzYwNTIgNS4yNDIyMiAzLjEwNTYxIDUuNjQzMjcgMi42NzM3OEM2LjAzOTM4IDIuMjQ3MjcgNi42NDU4NSAxLjk3ODUyIDcuNTAxNDMgMS45Nzg1MkM4LjM1NzQ4IDEuOTc4NTIgOC45NjMwOSAyLjI0NjczIDkuMzU4MjcgMi42NzIzQzkuNzU4NDEgMy4xMDMyMSAxMCAzLjc1NzI5IDEwIDQuNjMzNDZWNi41MDAyMUgxMVY0LjYzMzQ2QzExIDMuNTc5MTcgMTAuNzA3NiAyLjY1NTc4IDEwLjA5MTEgMS45OTE4M0M5LjQ2OTU1IDEuMzIyNTQgOC41NzU4NiAwLjk3ODUxNiA3LjUwMTQzIDAuOTc4NTE2QzYuNDI2NzggMC45Nzg1MTYgNS41MzI1NSAxLjMyMzUgNC45MTA1MiAxLjk5MzI4QzQuMjkzNDIgMi42NTc3NSA0LjAwMDAzIDMuNTgxNjkgNC4wMDAwMyA0LjYzNjIzVjYuNTAwMjFINS4wMDAwM1Y0LjYzNjIzWk0zIDYuNTAwMjFDMi43MjM4NiA2LjUwMDIxIDIuNSA2LjcyNDA3IDIuNSA3LjAwMDIxVjEzLjAwMDJDMi41IDEzLjI3NjQgMi43MjM4NiAxMy41MDAyIDMgMTMuNTAwMkgxMkMxMi4yNzYxIDEzLjUwMDIgMTIuNSAxMy4yNzY0IDEyLjUgMTMuMDAwMlY3LjAwMDIxQzEyLjUgNi43MjQwNyAxMi4yNzYxIDYuNTAwMjEgMTIgNi41MDAyMUgzWlwiLGZpbGw6dCxyb2xlOlwiaW1nXCJ9KX0pKX19LDU3Mjk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTWluaW1pemVJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5NaW5pbWl6ZUljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTVcIixoZWlnaHQ6XCIxNVwiLHZpZXdCb3g6XCIwIDAgMTUgMTVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTIuMTY2MDIgMTJDMi4xNjYwMiAxMS43MjM5IDIuMzg5ODcgMTEuNSAyLjY2NjAyIDExLjVIMTMuMzMyN0MxMy42MDg4IDExLjUgMTMuODMyNyAxMS43MjM5IDEzLjgzMjcgMTJDMTMuODMyNyAxMi4yNzYxIDEzLjYwODggMTIuNSAxMy4zMzI3IDEyLjVIMi42NjYwMkMyLjM4OTg3IDEyLjUgMi4xNjYwMiAxMi4yNzYxIDIuMTY2MDIgMTJaXCIsZmlsbDp0LHJvbGU6XCJpbWdcIn0pfSkpfX0sMzc5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lk9wZW5GaW5JY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5PcGVuRmluSWNvbj1lPT57dmFye2NvbG9yOnQ9XCJjdXJyZW50Q29sb3JcIn09ZSxuPXIoZSxbXCJjb2xvclwiXSk7cmV0dXJuKDAsby5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNVwiLGhlaWdodDpcIjE1XCIsdmlld0JveDpcIjAgMCAxNSAxNVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxuLHtjaGlsZHJlbjooMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNMTQuMjY4NSA1LjczOTE2QzE0LjE3ODUgNS42NDkwNiAxNC4wODE3IDUuNTY1OTIgMTMuOTc5IDUuNDkwNDdMMTMuOTQxMiA1LjQ2NDI5QzEzLjkxOTYgNS40NDkxOSAxMy44OTg0IDUuNDMzNTggMTMuODc2MyA1LjQxODk4QzEzLjg1NDEgNS40MDQzOCAxMy44Mjg0IDUuMzg4NzggMTMuODA0OCA1LjM3NDE4TDEzLjc3MTUgNS4zNTM1NEMxMy43NDE4IDUuMzM1OTIgMTMuNzExNiA1LjMxOTMgMTMuNjgxNCA1LjMwMzE5TDEzLjY2MzggNS4yOTM2M0MxMy4zMDY1IDUuMTA2MTggMTIuOTA5MSA1LjAwODA3IDEyLjUwNTcgNS4wMDc2OEMxMS44NDE3IDUuMDA3MTUgMTEuMjA1MiA0Ljc0MjkxIDEwLjczNjIgNC4yNzMxQzEwLjI2NzEgMy44MDMzIDEwLjAwNCAzLjE2NjQyIDEwLjAwNDYgMi41MDI2MkMxMC4wMDY1IDEuNDkyMjIgOS4zOTkzMyAwLjU4MDIxOSA4LjQ2NjM0IDAuMTkxOTExQzcuNTMzMzUgLTAuMTk2Mzk3IDYuNDU4MjYgMC4wMTU0NjYgNS43NDI0NCAwLjcyODcwMUM1LjAyNjYxIDEuNDQxOTQgNC44MTEwMyAyLjUxNjA3IDUuMTk2MjEgMy40NTAyQzUuNTgxNCA0LjM4NDMzIDYuNDkxNSA0Ljk5NDQ3IDcuNTAyMSA0Ljk5NjFDOC4xNjYwMyA0Ljk5NjY0IDguODAyNTYgNS4yNjA4OCA5LjI3MTYxIDUuNzMwNjhDOS43NDA2NiA2LjIwMDQ5IDEwLjAwMzggNi44MzczNiAxMC4wMDMxIDcuNTAxMTdDMTAuMDAyNiA4LjE2NDk3IDkuNzM4MyA4LjgwMTM3IDkuMjY4NCA5LjI3MDMyQzguNzk4NSA5LjczOTI4IDguMTYxNSAxMC4wMDI0IDcuNDk3NTYgMTAuMDAxN0M2LjgzNDEzIDEwLjAwMjIgNi4xOTc3MiA5LjczODk0IDUuNzI4NjUgOS4yNjk4N0M1LjI1OTU4IDguODAwOCA0Ljk5NjM2IDguMTY0NDcgNC45OTcwMyA3LjUwMTE3QzQuOTk3MDMgNi4xMjE1NSAzLjg3ODQxIDUuMDAzMTUgMi40OTg1MiA1LjAwMzE1QzEuMTE4NjIgNS4wMDMxNSAwIDYuMTIxNTUgMCA3LjUwMTE3QzAgOC44ODA3OCAxLjExODYyIDkuOTk5MTggMi40OTg1MiA5Ljk5OTE4QzMuODc4NDEgOS45OTkxOCA0Ljk5NzAzIDExLjExNzYgNC45OTcwMyAxMi40OTcyQzQuOTk3MDMgMTMuODc5NSA2LjExNzggMTUgNy41MDAzMyAxNUM4Ljg4Mjg3IDE1IDEwLjAwMzYgMTMuODc5NSAxMC4wMDM2IDEyLjQ5NzJDMTAuMDAzNiAxMS4xMTc2IDExLjEyMjMgOS45OTkxOCAxMi41MDIxIDkuOTk5MThDMTIuOTQ4MiA5Ljk5OTQ4IDEzLjM4NjIgOS44ODAyMiAxMy43NzA1IDkuNjUzODNDMTMuODAzOCA5LjYzNDIgMTMuODM2NSA5LjYxMzU2IDEzLjg3MTIgOS41OTI0MUwxMy44NzgzIDkuNTg3ODhDMTMuOTA4NSA5LjU2Nzc1IDEzLjkzODcgOS41NDY2IDEzLjk2NzkgOS41MjU0NkwxMy45ODEgOS41MTY0QzE0LjAwNzIgOS40OTcyNyAxNC4wMzE0IDkuNDc2NjIgMTQuMDU5MSA5LjQ1NTk4TDE0LjA4MTIgOS40Mzg4N0MxNC4xMDU0IDkuNDE5MjMgMTQuMTI4NiA5LjM5ODU5IDE0LjE1MjIgOS4zNzc5NUwxNC4xNzc5IDkuMzU1OEMxNC4yMDgxIDkuMzI4NjIgMTQuMjM3OCA5LjMwMDQyIDE0LjI2NyA5LjI3MTIzTDE0LjI3MTYgOS4yNjcyQzE0LjM3OTQgOS4xNTg4NyAxNC40NzcyIDkuMDQwOTEgMTQuNTYzNiA4LjkxNDhDMTQuNTgyNCA4Ljg4NzYxIDE0LjYwMDUgOC44NjAwOSAxNC42MTggOC44MzIyM0MxNS4yMzcgNy44NDU4NCAxNS4wOTIgNi41NjI2NyAxNC4yNjg1IDUuNzM5MTZaXCIsZmlsbDp0LHJvbGU6XCJpbWdcIn0pfSkpfX0sOTk0MDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5QYWdlSWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuUGFnZUljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTRcIixoZWlnaHQ6XCIxOFwiLHZpZXdCb3g6XCIwIDAgMTQgMThcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTExLjk5OTcgMC42NjY5OTJIMS45OTk2N0MxLjA4MDUxIDAuNjY2OTkyIDAuMzMzMDA4IDEuNDE0NDkgMC4zMzMwMDggMi4zMzM2NlYxNS42NjdDMC4zMzMwMDggMTYuNTg2MiAxLjA4MDUxIDE3LjMzMzcgMS45OTk2NyAxNy4zMzM3SDExLjk5OTdDMTIuOTE4OCAxNy4zMzM3IDEzLjY2NjMgMTYuNTg2MiAxMy42NjYzIDE1LjY2N1YyLjMzMzY2QzEzLjY2NjMgMS40MTQ0OSAxMi45MTg4IDAuNjY2OTkyIDExLjk5OTcgMC42NjY5OTJaTTcuNDE2MzQgOC4xNjY5OUgzLjI0OTY3QzMuMDE5NjcgOC4xNjY5OSAyLjgzMzAxIDcuOTgwMzMgMi44MzMwMSA3Ljc1MDMzVjYuOTE2OTlDMi44MzMwMSA2LjY4Njk5IDMuMDE5NjcgNi41MDAzMyAzLjI0OTY3IDYuNTAwMzNINy40MTYzNEM3LjY0NjM0IDYuNTAwMzMgNy44MzMwMSA2LjY4Njk5IDcuODMzMDEgNi45MTY5OVY3Ljc1MDMzQzcuODMzMDEgNy45ODAzMyA3LjY0NjM0IDguMTY2OTkgNy40MTYzNCA4LjE2Njk5Wk0xMC43NDk3IDQuODMzNjZIMy4yNDk2N0MzLjAxOTY3IDQuODMzNjYgMi44MzMwMSA0LjY0Njk5IDIuODMzMDEgNC40MTY5OVYzLjU4MzY2QzIuODMzMDEgMy4zNTM2NiAzLjAxOTY3IDMuMTY2OTkgMy4yNDk2NyAzLjE2Njk5SDEwLjc0OTdDMTAuOTc5NyAzLjE2Njk5IDExLjE2NjMgMy4zNTM2NiAxMS4xNjYzIDMuNTgzNjZWNC40MTY5OUMxMS4xNjYzIDQuNjQ2OTkgMTAuOTc5NyA0LjgzMzY2IDEwLjc0OTcgNC44MzM2NlpcIixmaWxsOnR9KX0pKX19LDEwMDI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuUmVkRG90SWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuUmVkRG90SWNvbj1lPT57dmFyIHQ9cihlLFtdKTtyZXR1cm4oMCxvLmpzeCkoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjhcIixoZWlnaHQ6XCI4XCIsdmlld0JveDpcIjAgMCA4IDhcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sdCx7Y2hpbGRyZW46KDAsby5qc3gpKFwicmVjdFwiLHt4OlwiMC41XCIseTpcIjAuNVwiLHdpZHRoOlwiN1wiLGhlaWdodDpcIjdcIixyeDpcIjMuNVwiLGZpbGw6XCIjQzIxMzEzXCJ9KX0pKX19LDE1Mzk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuU3RhY2tJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5Myk7dC5TdGFja0ljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMjBcIixoZWlnaHQ6XCIyMFwiLHZpZXdCb3g6XCIwIDAgMjQgMjRcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTE0LjIxNzggMy4wMDA5MkMxNC4xNTA0IDMuMDA1MTQgMTQuMDgzOSAzLjAxODQ0IDE0LjAyIDMuMDQwNDdMMy41MTk4NiA2LjQyODdDMy4zNjg2NCA2LjQ3NzQzIDMuMjM2ODEgNi41NzI5MSAzLjE0MzM1IDYuNzAxMzhDMy4wNDk4OSA2LjgyOTg2IDIuOTk5NjQgNi45ODQ2OSAyLjk5OTgzIDcuMTQzNTZWMTUuNzU0QzIuOTk4NDMgMTUuODUzNCAzLjAxNjc5IDE1Ljk1MjEgMy4wNTM4NSAxNi4wNDQzQzMuMDkwOTEgMTYuMTM2NiAzLjE0NTkzIDE2LjIyMDUgMy4yMTU3MSAxNi4yOTEzQzMuMjg1NSAxNi4zNjIxIDMuMzY4NjUgMTYuNDE4MyAzLjQ2MDM1IDE2LjQ1NjZDMy41NTIwNCAxNi40OTUgMy42NTA0NSAxNi41MTQ3IDMuNzQ5ODQgMTYuNTE0N0MzLjg0OTI0IDE2LjUxNDcgMy45NDc2NCAxNi40OTUgNC4wMzkzNCAxNi40NTY2QzQuMTMxMDMgMTYuNDE4MyA0LjIxNDE5IDE2LjM2MjEgNC4yODM5NyAxNi4yOTEzQzQuMzUzNzUgMTYuMjIwNSA0LjQwODc4IDE2LjEzNjYgNC40NDU4NCAxNi4wNDQzQzQuNDgyOSAxNS45NTIxIDQuNTAxMjYgMTUuODUzNCA0LjQ5OTg1IDE1Ljc1NFY3LjY4ODQ5TDE0LjQ4IDQuNDY3MjVDMTQuNjQ5IDQuNDE1MjkgMTQuNzk0MiA0LjMwNTMyIDE0Ljg5IDQuMTU2NzRDMTQuOTg1OCA0LjAwODE1IDE1LjAyNiAzLjgzMDUgMTUuMDAzNiAzLjY1NTE0QzE0Ljk4MTIgMy40Nzk3NyAxNC44OTc1IDMuMzE3OTcgMTQuNzY3NCAzLjE5ODI3QzE0LjYzNzMgMy4wNzg1NyAxNC40NjkxIDMuMDA4NjggMTQuMjkyNSAzLjAwMDkyQzE0LjI2NzYgMi45OTk2NyAxNC4yNDI3IDIuOTk5NjcgMTQuMjE3OCAzLjAwMDkyWk0xNy4yMTc4IDUuMjUwOTVDMTcuMTUwNCA1LjI1NTE3IDE3LjA4MzkgNS4yNjg0OCAxNy4wMjAxIDUuMjkwNUw2LjUxOTkgOC42Nzg3NEM2LjM2ODY5IDguNzI3NDYgNi4yMzY4NSA4LjgyMjk0IDYuMTQzMzkgOC45NTE0MkM2LjA0OTkzIDkuMDc5ODkgNS45OTk2OCA5LjIzNDcyIDUuOTk5ODggOS4zOTM1OVYxOC4wMDQxQzUuOTk4NDcgMTguMTAzNSA2LjAxNjgzIDE4LjIwMjEgNi4wNTM4OSAxOC4yOTQ0QzYuMDkwOTUgMTguMzg2NiA2LjE0NTk3IDE4LjQ3MDUgNi4yMTU3NiAxOC41NDEzQzYuMjg1NTQgMTguNjEyMSA2LjM2ODcgMTguNjY4MyA2LjQ2MDM5IDE4LjcwNjZDNi41NTIwOSAxOC43NDUgNi42NTA0OSAxOC43NjQ4IDYuNzQ5ODkgMTguNzY0OEM2Ljg0OTI4IDE4Ljc2NDggNi45NDc2OSAxOC43NDUgNy4wMzkzOCAxOC43MDY2QzcuMTMxMDggMTguNjY4MyA3LjIxNDIzIDE4LjYxMjEgNy4yODQwMiAxOC41NDEzQzcuMzUzOCAxOC40NzA1IDcuNDA4ODIgMTguMzg2NiA3LjQ0NTg4IDE4LjI5NDRDNy40ODI5NCAxOC4yMDIxIDcuNTAxMyAxOC4xMDM1IDcuNDk5OSAxOC4wMDQxVjkuOTM4NTJMMTcuNDggNi43MTcyOEMxNy42NDkgNi42NjUzMyAxNy43OTQyIDYuNTU1MzUgMTcuODkgNi40MDY3N0MxNy45ODU4IDYuMjU4MTggMTguMDI2MSA2LjA4MDU0IDE4LjAwMzYgNS45MDUxN0MxNy45ODEyIDUuNzI5ODEgMTcuODk3NiA1LjU2OCAxNy43Njc1IDUuNDQ4M0MxNy42Mzc0IDUuMzI4NjEgMTcuNDY5MSA1LjI1ODcxIDE3LjI5MjUgNS4yNTA5NUMxNy4yNjc2IDUuMjQ5NzEgMTcuMjQyNyA1LjI0OTcxIDE3LjIxNzggNS4yNTA5NVpNMjAuMTkzIDcuNTA1MzhDMjAuMTM0NCA3LjUwOTgyIDIwLjA3NTggNy41MjE5NyAyMC4wMTg2IDcuNTQwNTNMOS41MTg0OCAxMC45Mjg4QzkuMjA5NDggMTEuMDI5MyA4Ljk5OTkyIDExLjMxODEgOC45OTk5MiAxMS42NDM2VjIwLjI1NDFDOC45OTk5MiAyMC40OTc5IDkuMTE4MjkgMjAuNzI2MiA5LjMxNzggMjAuODY2NEM5LjQ0NjA1IDIwLjk1NzIgOS41OTY5MyAyMS4wMDQxIDkuNzQ5OTMgMjEuMDA0MUM5LjgzNDY4IDIxLjAwNDEgOS45MjAxNCAyMC45ODk0IDEwLjAwMTkgMjAuOTYwMkwyMC41MDIgMTcuMjEwMUMyMC44MDA2IDE3LjEwNDQgMjEuMDAwMSAxNi44MjEzIDIxLjAwMDEgMTYuNTA0VjguMjUzOTJDMjEuMDAwMSA4LjAxNDY3IDIwLjg4NTMgNy43ODkyMiAyMC42OTEgNy42NDc0N0MyMC41NDU5IDcuNTQxNzIgMjAuMzY4OCA3LjQ5MjA1IDIwLjE5MyA3LjUwNTM4WlwiLGZpbGw6dH0pfSkpfX0sNDAyMDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5TdG9yZWZyb250SWNvbj12b2lkIDA7Y29uc3Qgbz1uKDU4OTMpO3QuU3RvcmVmcm9udEljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMjBcIixoZWlnaHQ6XCIyMFwiLHZpZXdCb3g6XCIwIDAgMjQgMjRcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sbix7Y2hpbGRyZW46KDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTUgM0M0LjQ0OCAzIDQgMy40NDggNCA0QzQgNC41NTIgNC40NDggNSA1IDVIMTlDMTkuNTUyIDUgMjAgNC41NTIgMjAgNEMyMCAzLjQ0OCAxOS41NTIgMyAxOSAzSDVaTTQuNjE3MTkgN0M0LjIzODE5IDcgMy44OTM2MSA3LjIxMzczIDMuNzI0NjEgNy41NTI3M0wyLjEwNTQ3IDEwLjc4OTFDMi4wMzU0NyAxMC45MjgxIDIgMTEuMDgxMyAyIDExLjIzNjNWMTJDMiAxMi41NTIgMi40NDggMTMgMyAxM1YxOUMzIDIwLjEwNSAzLjg5NSAyMSA1IDIxSDE5QzIwLjEwNSAyMSAyMSAyMC4xMDUgMjEgMTlWMTNDMjEuNTUyIDEzIDIyIDEyLjU1MiAyMiAxMlYxMS4yMzYzQzIyIDExLjA4MTMgMjEuOTY0NSAxMC45MjgxIDIxLjg5NDUgMTAuNzg5MUwyMC4yNzU0IDcuNTUyNzNDMjAuMTA2NCA3LjIxMzczIDE5Ljc2MTggNyAxOS4zODI4IDdINC42MTcxOVpNNiAxM0gxOEMxOC41NTIgMTMgMTkgMTMuNDQ4IDE5IDE0VjE4QzE5IDE4LjU1MiAxOC41NTIgMTkgMTggMTlINkM1LjQ0OCAxOSA1IDE4LjU1MiA1IDE4VjE0QzUgMTMuNDQ4IDUuNDQ4IDEzIDYgMTNaXCIsZmlsbDp0fSl9KSl9fSw3OTM3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LldvcmtzcGFjZUljb249dm9pZCAwO2NvbnN0IG89big1ODkzKTt0LldvcmtzcGFjZUljb249ZT0+e3Zhcntjb2xvcjp0PVwiY3VycmVudENvbG9yXCJ9PWUsbj1yKGUsW1wiY29sb3JcIl0pO3JldHVybigwLG8uanN4cykoXCJzdmdcIixPYmplY3QuYXNzaWduKHt3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTVcIix2aWV3Qm94OlwiMCAwIDE1IDE1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIscm9sZTpcImltZ1wifSxuLHtjaGlsZHJlbjpbKDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTYuNzM4MTEgMi44MTI1SDMuNTMxMzdDMy4xMzQ0MiAyLjgxMjUgMi44MTI2MiAzLjEzNDMgMi44MTI2MiAzLjUzMTI1VjcuNTEyMDRDMi44MTI2MiA3LjkwOSAzLjEzNDQyIDguMjMwNzkgMy41MzEzNyA4LjIzMDc5SDYuNzM4MTFDNy4xMzUwNiA4LjIzMDc5IDcuNDU2ODYgNy45MDkgNy40NTY4NiA3LjUxMjA0VjMuNTMxMjVDNy40NTY4NiAzLjEzNDMgNy4xMzUwNiAyLjgxMjUgNi43MzgxMSAyLjgxMjVaXCIsZmlsbDp0fSksKDAsby5qc3gpKFwicGF0aFwiLHtkOlwiTTEyLjE1NjUgNi4yNjc1OEg4Ljk0OTcxQzguNzUxMjMgNi4yNjc1OCA4LjU5MDMzIDYuNDI4NDggOC41OTAzMyA2LjYyNjk2VjExLjM4MThDOC41OTAzMyAxMS41ODAzIDguNzUxMjMgMTEuNzQxMiA4Ljk0OTcxIDExLjc0MTJIMTIuMTU2NUMxMi4zNTQ5IDExLjc0MTIgMTIuNTE1OCAxMS41ODAzIDEyLjUxNTggMTEuMzgxOFY2LjYyNjk2QzEyLjUxNTggNi40Mjg0OCAxMi4zNTQ5IDYuMjY3NTggMTIuMTU2NSA2LjI2NzU4WlwiLHN0cm9rZTp0LHN0cm9rZVdpZHRoOlwiMC43MTg3NTNcIn0pLCgwLG8uanN4KShcInBhdGhcIix7ZDpcIk0xMi4xNTY0IDIuODEyNUg4Ljk0OTcxQzguNTUyNzUgMi44MTI1IDguMjMwOTYgMy4xMzQzIDguMjMwOTYgMy41MzEyNVY0LjQxNTg3QzguMjMwOTYgNC44MTI4MyA4LjU1Mjc1IDUuMTM0NjMgOC45NDk3MSA1LjEzNDYzSDEyLjE1NjRDMTIuNTUzNCA1LjEzNDYzIDEyLjg3NTIgNC44MTI4MyAxMi44NzUyIDQuNDE1ODdWMy41MzEyNUMxMi44NzUyIDMuMTM0MyAxMi41NTM0IDIuODEyNSAxMi4xNTY0IDIuODEyNVpcIixmaWxsOnR9KSwoMCxvLmpzeCkoXCJwYXRoXCIse2Q6XCJNNi43Mzc5OCA5LjAwNDg4SDMuNTMxMjVDMy4xMzQzIDkuMDA0ODggMi44MTI1IDkuMzI2NjggMi44MTI1IDkuNzIzNjRWMTEuMzgyM0MyLjgxMjUgMTEuNzc5MyAzLjEzNDMgMTIuMTAxMSAzLjUzMTI1IDEyLjEwMTFINi43Mzc5OEM3LjEzNDk0IDEyLjEwMTEgNy40NTY3NCAxMS43NzkzIDcuNDU2NzQgMTEuMzgyM1Y5LjcyMzY0QzcuNDU2NzQgOS4zMjY2OCA3LjEzNDk0IDkuMDA0ODggNi43Mzc5OCA5LjAwNDg4WlwiLGZpbGw6dH0pXX0pKX19LDI3NzI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDM3OSksdCksbyhuKDQ3MTgpLHQpLG8obig3OTM3KSx0KSxvKG4oODMxMSksdCksbyhuKDU3MjkpLHQpLG8obig3Nzg4KSx0KSxvKG4oMzcwMyksdCksbyhuKDY3OTUpLHQpLG8obig4MjY1KSx0KSxvKG4oMTE3KSx0KSxvKG4oMTUzOSksdCksbyhuKDkyODUpLHQpLG8obig0MDIwKSx0KSxvKG4oNTI5KSx0KSxvKG4oMjQwMiksdCksbyhuKDIxNDcpLHQpLG8obig0ODI1KSx0KSxvKG4oNjQ0NyksdCksbyhuKDEyODEpLHQpLG8obig3NDI5KSx0KSxvKG4oOTk0MCksdCksbyhuKDEwMDIpLHQpLG8obigxMzI0KSx0KSxvKG4oMTEwMyksdCksbyhuKDE0MDkpLHQpfSwzMTE3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuSWNvbldpdGhCYWRnZT12b2lkIDA7Y29uc3QgaT1uKDU4OTMpLGE9byhuKDc1MTgpKSxsPW4oNzAwNikscz1uKDMxMzYpLGM9bigxMzM1KTt0Lkljb25XaXRoQmFkZ2U9ZT0+e3Zhcntjb3VudDp0PTAsbWF4Om59PWUsbz1yKGUsW1wiY291bnRcIixcIm1heFwiXSk7cmV0dXJuKDAsaS5qc3hzKSh1LHtjaGlsZHJlbjpbKDAsaS5qc3gpKGwuSWNvbixPYmplY3QuYXNzaWduKHt9LG8pKSx0PjAmJigwLGkuanN4KShmLHtjb3VudDp0LG1heDpufSldfSl9O2NvbnN0IHU9KDAsYS5kZWZhdWx0KShjLkJveClgXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbmAsZj0oMCxhLmRlZmF1bHQpKHMuQmFkZ2UpYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRyYW5zZm9ybTogc2NhbGUoNzAlKTtcbiAgcmlnaHQ6IC0keyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuICB0b3A6IC0keyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbmB9LDE0NDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oMzExNyksdCl9LDE5NDQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTGFiZWw9dm9pZCAwO2NvbnN0IG89big1ODkzKSxpPXIobig3NTE4KSksYT1uKDEzMzUpLGw9big3NzY5KSxzPW4oOTYzNCk7dC5MYWJlbD0oe2ljb246ZSx0ZXh0OnQsaGVscGVyVGV4dDpuLGh0bWxGb3I6cixpbmxpbmU6aX0pPT4oMCxvLmpzeHMpKGQsT2JqZWN0LmFzc2lnbih7aW5saW5lOml9LHtjaGlsZHJlbjpbKDAsby5qc3hzKShcImRpdlwiLE9iamVjdC5hc3NpZ24oe3N0eWxlOntkaXNwbGF5OlwiZmxleFwifX0se2NoaWxkcmVuOltcImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2UoKTplPygwLG8uanN4KShmLHtpY29uOmV9KTpudWxsLCgwLG8uanN4KSh1LE9iamVjdC5hc3NpZ24oe2FzOlwibGFiZWxcIixodG1sRm9yOnIsd2VpZ2h0OlwiYm9sZFwifSx7Y2hpbGRyZW46dH0pKV19KSksbiYmKDAsby5qc3gpKGMse2NoaWxkcmVuOm59KV19KSk7Y29uc3QgYz0oMCxpLmRlZmF1bHQpKGwuVGV4dClgXG4gIHNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dEhlbHB9O1xuYCx1PSgwLGkuZGVmYXVsdCkobC5UZXh0KWBcbiAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuYCxmPSgwLGkuZGVmYXVsdCkocy5JY29uKWBcbiAgbWFyZ2luLXJpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnhzbWFsbH07XG4gIG1pbi13aWR0aDogJHsoe3RoZW1lOmV9KT0+ZS5pY29uU2l6ZS5zbWFsbH07XG4gIG1pbi1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUuaWNvblNpemUuc21hbGx9O1xuICBhbGlnbi1zZWxmOiBjZW50ZXI7XG5gLGQ9KDAsaS5kZWZhdWx0KShhLkJveClgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIG1hcmdpbi1ib3R0b206ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuXG4gICR7KHtpbmxpbmU6ZSx0aGVtZTp0fSk9PmUmJmBjdXJzb3I6IHBvaW50ZXI7XFxuICAgICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgICAgbWFyZ2luLWxlZnQ6ICR7dC5weC5zbWFsbH07XFxuICAgICBmb250LXdlaWdodDogJHt0LmZvbnRXZWlnaHQubm9ybWFsfTtcXG4gIGB9XG5gfSw5MjM5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig4Mjc1KSx0KSxvKG4oNjkzKSx0KX0sODI3NTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn0sbz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkxvYWRlcj12b2lkIDA7Y29uc3QgaT1uKDU4OTMpLGE9byhuKDc1MTgpKSxsPW4oOTYzNCk7dC5Mb2FkZXI9KDAsYS5kZWZhdWx0KSgoZT0+e3ZhciB0PXIoZSxbXSk7cmV0dXJuKDAsaS5qc3gpKGwuSWNvbixPYmplY3QuYXNzaWduKHt9LHQse2NoaWxkcmVuOigwLGkuanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTAwJVwiLGhlaWdodDpcIjEwMCVcIix2aWV3Qm94OlwiMCAwIDM4IDM4XCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHN0cm9rZTpcImN1cnJlbnRDb2xvclwifSx7Y2hpbGRyZW46KDAsaS5qc3gpKFwiZ1wiLE9iamVjdC5hc3NpZ24oe2ZpbGw6XCJub25lXCIsZmlsbFJ1bGU6XCJldmVub2RkXCJ9LHtjaGlsZHJlbjooMCxpLmpzeHMpKFwiZ1wiLE9iamVjdC5hc3NpZ24oe3RyYW5zZm9ybTpcInRyYW5zbGF0ZSgxIDEpXCIsc3Ryb2tlV2lkdGg6XCIyXCJ9LHtjaGlsZHJlbjpbKDAsaS5qc3gpKFwiY2lyY2xlXCIse3N0cm9rZU9wYWNpdHk6XCIuNVwiLGN4OlwiMThcIixjeTpcIjE4XCIscjpcIjE4XCJ9KSwoMCxpLmpzeCkoXCJwYXRoXCIsT2JqZWN0LmFzc2lnbih7ZDpcIk0zNiAxOGMwLTkuOTQtOC4wNi0xOC0xOC0xOFwifSx7Y2hpbGRyZW46KDAsaS5qc3gpKFwiYW5pbWF0ZVRyYW5zZm9ybVwiLHthdHRyaWJ1dGVOYW1lOlwidHJhbnNmb3JtXCIsdHlwZTpcInJvdGF0ZVwiLGZyb206XCIwIDE4IDE4XCIsdG86XCIzNjAgMTggMThcIixkdXI6XCIxc1wiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifSl9KSldfSkpfSkpfSkpfSkpfSkpYGB9LDY5MzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnR9KX06ZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dH0pLGk9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiIT09biYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnIodCxlLG4pO3JldHVybiBvKHQsZSksdH0sYT10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lk9wZW5maW5Mb2FkZXI9dm9pZCAwO2NvbnN0IGw9big1ODkzKSxzPWkobig3NTE4KSksYz1uKDk2MzQpO3QuT3BlbmZpbkxvYWRlcj0oMCxzLmRlZmF1bHQpKChlPT57dmFyIHQ9YShlLFtdKTtyZXR1cm4oMCxsLmpzeCkoYy5JY29uLE9iamVjdC5hc3NpZ24oe30sdCx7Y2hpbGRyZW46KDAsbC5qc3hzKShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTAwJVwiLGhlaWdodDpcIjEwMCVcIix2aWV3Qm94OlwiMCAwIDE4IDE4XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LHtjaGlsZHJlbjpbKDAsbC5qc3gpKHUse2Q6XCJcXG4gICAgICAgICAgICBNIDE3LjEyMjIgNi44ODdcXG4gICAgICAgICAgICBDIDE3LjAxNDEgNi43Nzg4NyAxNi44OTggNi42NzkxMSAxNi43NzQ4IDYuNTg4NTZcXG4gICAgICAgICAgICBMIDE2LjcyOTUgNi41NTcxNVxcbiAgICAgICAgICAgIEMgMTYuNzAzNSA2LjUzOTAzIDE2LjY3ODEgNi41MjAzIDE2LjY1MTUgNi41MDI3OFxcbiAgICAgICAgICAgIEMgMTYuNjI1IDYuNDg1MjYgMTYuNTk0MSA2LjQ2NjUzIDE2LjU2NTcgNi40NDkwMVxcbiAgICAgICAgICAgIEwgMTYuNTI1OSA2LjQyNDI0XFxuICAgICAgICAgICAgQyAxNi40OTAyIDYuNDAzMSAxNi40NTQgNi4zODMxNiAxNi40MTc3IDYuMzYzODNcXG4gICAgICAgICAgICBMIDE2LjM5NjYgNi4zNTIzNlxcbiAgICAgICAgICAgIEMgMTUuOTY3OCA2LjEyNzQyIDE1LjQ5MSA2LjAwOTY4IDE1LjAwNjggNi4wMDkyMlxcbiAgICAgICAgICAgIEMgMTQuMjEwMSA2LjAwODU4IDEzLjQ0NjMgNS42OTE0OSAxMi44ODM0IDUuMTI3NzJcXG4gICAgICAgICAgICBDIDEyLjMyMDUgNC41NjM5NSAxMi4wMDQ4IDMuNzk5NzEgMTIuMDA1NiAzLjAwMzE0XFxuICAgICAgICAgICAgQyAxMi4wMDc4IDEuNzkwNjYgMTEuMjc5MiAwLjY5NjI2MyAxMC4xNTk2IDAuMjMwMjkzXFxuICAgICAgICAgICAgQyA5LjA0MDAyIC0wLjIzNTY3NiA3Ljc0OTkyIDAuMDE4NTU5MiA2Ljg5MDkzIDAuODc0NDQxXFxuICAgICAgICAgICAgQyA2LjAzMTk0IDEuNzMwMzIgNS43NzMyMyAzLjAxOTI4IDYuMjM1NDYgNC4xNDAyNFxcbiAgICAgICAgICAgIEMgNi42OTc2OCA1LjI2MTE5IDcuNzg5OCA1Ljk5MzM3IDkuMDAyNTEgNS45OTUzMlxcbiAgICAgICAgICAgIEMgOS43OTkyNCA1Ljk5NTk2IDEwLjU2MzEgNi4zMTMwNSAxMS4xMjU5IDYuODc2ODJcXG4gICAgICAgICAgICBDIDExLjY4ODggNy40NDA1OSAxMi4wMDQ2IDguMjA0ODQgMTIuMDAzOCA5LjAwMTRcXG4gICAgICAgICAgICBDIDEyLjAwMzEgOS43OTc5NyAxMS42ODYgMTAuNTYxNiAxMS4xMjIxIDExLjEyNDRcXG4gICAgICAgICAgICBDIDEwLjU1ODIgMTEuNjg3MSA5Ljc5MzggMTIuMDAyOCA4Ljk5NzA4IDEyLjAwMlxcbiAgICAgICAgICAgIEMgOC4yMDA5NiAxMi4wMDI3IDcuNDM3MjcgMTEuNjg2NyA2Ljg3NDM4IDExLjEyMzhcXG4gICAgICAgICAgICBDIDYuMzExNSAxMC41NjEgNS45OTU2NCA5Ljc5NzM2IDUuOTk2NDQgOS4wMDE0XFxuICAgICAgICAgICAgQyA1Ljk5NjQ0IDcuMzQ1ODYgNC42NTQwOSA2LjAwMzc4IDIuOTk4MjIgNi4wMDM3OFxcbiAgICAgICAgICAgIEMgMS4zNDIzNSA2LjAwMzc4IDAgNy4zNDU4NiAwIDkuMDAxNFxcbiAgICAgICAgICAgIEMgMCAxMC42NTY5IDEuMzQyMzUgMTEuOTk5IDIuOTk4MjIgMTEuOTk5XFxuICAgICAgICAgICAgQyA0LjY1NDA5IDExLjk5OSA1Ljk5NjQ0IDEzLjM0MTEgNS45OTY0NCAxNC45OTY2XFxuICAgICAgICAgICAgQyA1Ljk5NjQ0IDE2LjY1NTMgNy4zNDEzNiAxOCA5LjAwMDQgMThcXG4gICAgICAgICAgICBDIDEwLjY1OTQgMTggMTIuMDA0NCAxNi42NTUzIDEyLjAwNDQgMTQuOTk2NlxcbiAgICAgICAgICAgIEMgMTIuMDA0NCAxMy4zNDExIDEzLjM0NjcgMTEuOTk5IDE1LjAwMjYgMTEuOTk5XFxuICAgICAgICAgICAgQyAxNS41Mzc5IDExLjk5OTQgMTYuMDYzNSAxMS44NTYzIDE2LjUyNDcgMTEuNTg0NlxcbiAgICAgICAgICAgIEMgMTYuNTY0NSAxMS41NjEgMTYuNjAzOCAxMS41MzYzIDE2LjY0NTUgMTEuNTEwOVxcbiAgICAgICAgICAgIEwgMTYuNjU0IDExLjUwNTVcXG4gICAgICAgICAgICBDIDE2LjY5MDIgMTEuNDgxMyAxNi43MjY1IDExLjQ1NTkgMTYuNzYxNSAxMS40MzA1XFxuICAgICAgICAgICAgTCAxNi43NzcyIDExLjQxOTdcXG4gICAgICAgICAgICBDIDE2LjgwODYgMTEuMzk2NyAxNi44Mzc2IDExLjM3MiAxNi44NzA5IDExLjM0NzJcXG4gICAgICAgICAgICBMIDE2Ljg5NzUgMTEuMzI2NlxcbiAgICAgICAgICAgIEMgMTYuOTI2NSAxMS4zMDMxIDE2Ljk1NDMgMTEuMjc4MyAxNi45ODI3IDExLjI1MzVcXG4gICAgICAgICAgICBMIDE3LjAxMzUgMTEuMjI3XFxuICAgICAgICAgICAgQyAxNy4wNDk3IDExLjE5NDMgMTcuMDg1NCAxMS4xNjA1IDE3LjEyMDQgMTEuMTI1NVxcbiAgICAgICAgICAgIEwgMTcuMTI1OSAxMS4xMjA2XFxuICAgICAgICAgICAgQyAxNy4yNTUzIDEwLjk5MDYgMTcuMzcyNiAxMC44NDkxIDE3LjQ3NjMgMTAuNjk3OFxcbiAgICAgICAgICAgIEMgMTcuNDk4OSAxMC42NjUxIDE3LjUyMDYgMTAuNjMyMSAxNy41NDE2IDEwLjU5ODdcXG4gICAgICAgICAgICBDIDE4LjI4NDMgOS40MTUgMTguMTEwNCA3Ljg3NTIgMTcuMTIyMiA2Ljg4N1pcXG4gICAgICAgICAgICBcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KSwoMCxsLmpzeCkoZix7Y3g6XCI5XCIsY3k6XCIzXCIscjpcIjIuOVwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIixhbmdsZTowfSksKDAsbC5qc3gpKGYse2N4OlwiMTVcIixjeTpcIjlcIixyOlwiMi43NVwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIixhbmdsZTotOTB9KSwoMCxsLmpzeCkoZix7Y3g6XCI5XCIsY3k6XCIxNVwiLHI6XCIyLjVcIixmaWxsOlwiY3VycmVudENvbG9yXCIsYW5nbGU6LTE4MH0pLCgwLGwuanN4KShmLHtjeDpcIjNcIixjeTpcIjlcIixyOlwiMi4yNVwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIixhbmdsZTotMjcwfSldfSkpfSkpfSkpYGA7Y29uc3QgdT1zLmRlZmF1bHQucGF0aGBcbiAgQGtleWZyYW1lcyBsb2dvQW5pbWF0aW9uIHtcbiAgICAwJSB7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgICAyNSUge1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgMzUlIHtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgfVxuICAgIDYwJSB7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgIH1cbiAgICA3NSUge1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgMTAwJSB7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgfVxuXG4gIGFuaW1hdGlvbjogbG9nb0FuaW1hdGlvbiAycyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmAsZj1zLmRlZmF1bHQuY2lyY2xlYFxuICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXI7XG4gIGFuaW1hdGlvbjogJHsoe2FuZ2xlOmV9KT0+KGU9PnMua2V5ZnJhbWVzYFxuICAgIDAlIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG4gICAgMjUlIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgMzAlIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgNTAlIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKCR7ZX1kZWcpO1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgNzAlIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0zNjBkZWcpO1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgNzUlIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0zNjBkZWcpO1xuICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG4gICAgMTAwJSB7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMzYwZGVnKTtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgfVxuYCkoZSl9IDJzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuYH0sNzAzMDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5WYWxpZGF0aW9uRXJyb3I9dm9pZCAwO2NvbnN0IG89big1ODkzKSxpPXIobig3NTE4KSksYT1uKDc3NjkpLGw9big5NjM0KTt0LlZhbGlkYXRpb25FcnJvcj0oe2NoaWxkcmVuOmV9KT0+KDAsby5qc3hzKShzLHtjaGlsZHJlbjpbKDAsby5qc3gpKGwuSWNvbix7aWNvbjpcIkV4Y2xhbWF0aW9uQ2lyY2xlZEZpbGxlZEljb25cIn0pLCgwLG8uanN4KShjLHtjaGlsZHJlbjplfSldfSk7Y29uc3Qgcz1pLmRlZmF1bHQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6ICR7KHt0aGVtZTplfSk9PmUucHgueHNtYWxsfTtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBtYXJnaW4tdG9wOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbmAsYz0oMCxpLmRlZmF1bHQpKGEuVGV4dClgXG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dEhlbHB9O1xuYH0sMzU4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuU3R5bGVkSW5wdXRGaWVsZD10LkJhc2VJbnB1dD12b2lkIDA7Y29uc3QgaT1uKDU4OTMpLGE9big2Njg5KSxsPW8obig3NTE4KSkscz1uKDEzMzUpLGM9big5NTA3KSx1PW4oNzc2OSksZj1uKDcwMzApLGQ9bigxOTQ0KTt0LkJhc2VJbnB1dD0oMCxhLmZvcndhcmRSZWYpKCgoZSxuKT0+e3ZhcntjbGFzc05hbWU6byxyZW5kZXJJbnB1dDphLG1lc3NhZ2U6bCxsYWJlbDpzLHN0YXR1czpjLG5hbWU6dSxpY29uOnYsdHlwZTptPVwidGV4dFwiLGhlbHBlclRleHQ6QyxwbGFjZWhvbGRlcjp5fT1lLHc9cihlLFtcImNsYXNzTmFtZVwiLFwicmVuZGVySW5wdXRcIixcIm1lc3NhZ2VcIixcImxhYmVsXCIsXCJzdGF0dXNcIixcIm5hbWVcIixcImljb25cIixcInR5cGVcIixcImhlbHBlclRleHRcIixcInBsYWNlaG9sZGVyXCJdKTtjb25zdCBiPVwiY2hlY2tib3hcIj09PW18fFwicmFkaW9cIj09PW07cmV0dXJuKDAsaS5qc3hzKShnLE9iamVjdC5hc3NpZ24oe2ZsZXhEaXJlY3Rpb246XCJjb2x1bW5cIixhbGlnbkl0ZW1zOlwiZmxleC1zdGFydFwifSx7Y2hpbGRyZW46WygwLGkuanN4cykocCxPYmplY3QuYXNzaWduKHtpbmxpbmU6Yn0se2NoaWxkcmVuOlshIXMmJigwLGkuanN4KShkLkxhYmVsLHtpbmxpbmU6YixpY29uOnYsdGV4dDpzLGhlbHBlclRleHQ6QyxodG1sRm9yOnV9KSwhIWEmJmEoT2JqZWN0LmFzc2lnbih7bmFtZTp1LHN0YXR1czpjLHR5cGU6bX0sdykpLCFhJiYoMCxpLmpzeCkodC5TdHlsZWRJbnB1dEZpZWxkLE9iamVjdC5hc3NpZ24oe2NsYXNzTmFtZTpvLG5hbWU6dSxwbGFjZWhvbGRlcjp5LHN0YXR1czpjLHR5cGU6bX0sdyx7cmVmOm59KSldfSkpLGwmJihcImNyaXRpY2FsXCI9PT1jPygwLGkuanN4KShmLlZhbGlkYXRpb25FcnJvcix7Y2hpbGRyZW46bH0pOigwLGkuanN4KShoLE9iamVjdC5hc3NpZ24oe3N0YXR1czpjfSx7Y2hpbGRyZW46bH0pKSldfSkpfSkpLHQuQmFzZUlucHV0LmRpc3BsYXlOYW1lPVwiQmFzZUlucHV0XCI7Y29uc3QgcD0oMCxsLmRlZmF1bHQpKHMuQm94KWBcbiAgYWxpZ24taXRlbXM6ICR7KHtpbmxpbmU6ZX0pPT5lP1wiY2VudGVyXCI6XCJmbGV4LXN0YXJ0XCJ9O1xuICBmbGV4LWRpcmVjdGlvbjogJHsoe2lubGluZTplfSk9PmU/XCJyb3ctcmV2ZXJzZVwiOlwiY29sdW1uXCJ9O1xuICBqdXN0aWZ5LWNvbnRlbnQ6ICR7KHtpbmxpbmU6ZX0pPT5lP1wiZmxleC1lbmRcIjpcImZsZXgtc3RhcnRcIn07XG4gIHdpZHRoOiAxMDAlO1xuYCxoPSgwLGwuZGVmYXVsdCkodS5UZXh0KWBcbiAgY29sb3I6ICR7KHt0aGVtZTplLHN0YXR1czp0fSk9PigwLGMuZ2V0U3RhdHVzQ29sb3IpKGUsdCxcInRleHRIZWxwXCIpfTtcbmAsZz0oMCxsLmRlZmF1bHQpKHMuQm94KWBcbiAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmJhc2V9O1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbmA7dC5TdHlsZWRJbnB1dEZpZWxkPWwuZGVmYXVsdC5pbnB1dGBcbiAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ0fTtcbiAgYm9yZGVyOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ2fTtcbiAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZSxzdGF0dXM6dH0pPT4oMCxjLmdldFN0YXR1c0NvbG9yKShlLHQsYy5QYWxldHRlLmlucHV0Qm9yZGVyKX07XG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucmFkaXVzLnNtYWxsfTtcbiAgYm94LXNoYWRvdzogJHsoe3RoZW1lOmV9KT0+ZS5zaGFkb3cuYmFzZX07XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXRDb2xvcn07XG4gIGZvbnQtc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5iYXNlfTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+YCR7ZS5weC5zbWFsbH0gJHtlLnB4LmJhc2V9YH07XG4gIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciB2YXIoLS1vcGVuZmluLXVpLWdsb2JhbFRyYW5zaXRpb24pO1xuICB3aWR0aDogMTAwJTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiAwO1xuICAgIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmUsc3RhdHVzOnR9KT0+KDAsYy5nZXRTdGF0dXNDb2xvcikoZSx0LGMuUGFsZXR0ZS5pbnB1dEZvY3VzZWQpfTtcbiAgfVxuXG4gICY6ZGlzYWJsZWQge1xuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gIH1cblxuICAmOmRpc2FibGVkOjpwbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dERpc2FibGVkfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGEgaGFjayB0byBpbnZlcnQgdGhlIGNhbGVuZGFyIGljb24uIFRoaXMgb25seSB3b3JrcyBpbiBkYXJrIG1vZGUuXG4gICAqIFVudGlsIGVpdGhlciBsaWdodCBtb2RlIGlzIGEgdGhpbmcgb3Igd2UgZ2V0IGEgZGF0ZXRpbWUgcGlja2VyIGRlc2lnbiwgdGhpcyB3aWxsIGRvLlxuICAgKi9cblxuICA6Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvciB7XG4gICAgZmlsdGVyOiBpbnZlcnQoMSk7XG4gIH1cbmB9LDg4Nzg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDM1OCksdCl9LDE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImRlZmF1bHRcIix7ZW51bWVyYWJsZTohMCx2YWx1ZTp0fSl9OmZ1bmN0aW9uKGUsdCl7ZS5kZWZhdWx0PXR9KSxpPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIiE9PW4mJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZyKHQsZSxuKTtyZXR1cm4gbyh0LGUpLHR9LGE9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn0sbD10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNoZWNrYm94PXZvaWQgMDtjb25zdCBzPW4oNTg5MyksYz1pKG4oNjY4OSkpLHU9bChuKDc1MTgpKSxmPW4oODg3OCksZD1uKDk2MzQpLHA9big5NTA3KTt0LkNoZWNrYm94PWMuZm9yd2FyZFJlZigoKGUsdCk9Pnt2YXJ7c3RhdHVzOm59PWUscj1hKGUsW1wic3RhdHVzXCJdKTtyZXR1cm4oMCxzLmpzeCkoZi5CYXNlSW5wdXQsT2JqZWN0LmFzc2lnbih7fSxyLHt0eXBlOlwiY2hlY2tib3hcIixzdGF0dXM6bixyZW5kZXJJbnB1dDplPT57dmFyIHI9YShlLFtdKTtyZXR1cm4oMCxzLmpzeHMpKGgse2NoaWxkcmVuOlsoMCxzLmpzeCkobSxPYmplY3QuYXNzaWduKHtyZWY6dCxpZDpyLm5hbWUsdHlwZTpcImNoZWNrYm94XCJ9LHIpKSwoMCxzLmpzeCkoZyxPYmplY3QuYXNzaWduKHtzdGF0dXM6bn0se2NoaWxkcmVuOigwLHMuanN4KSh2LHt9KX0pKV19KX19KSl9KSksdC5DaGVja2JveC5kaXNwbGF5TmFtZT1cIkNoZWNrYm94XCI7Y29uc3QgaD11LmRlZmF1bHQuZGl2YFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbmAsZz11LmRlZmF1bHQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuICB3aWR0aDogJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcbiAgYm9yZGVyOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZSxzdGF0dXM6dH0pPT4oMCxwLmdldFN0YXR1c0NvbG9yKShlLHQsXCJ0ZXh0RGVmYXVsdFwiKX07XG4gIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG5gLHY9KDAsdS5kZWZhdWx0KShkLkljb24pLmF0dHJzKHtpY29uOlwiQ2hlY2tJY29uXCIsc2l6ZTpcInNtYWxsXCJ9KWBcbiAgb3BhY2l0eTogMDtcbmAsbT11LmRlZmF1bHQuaW5wdXRgXG4gIG9wYWNpdHk6IDA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICY6Y2hlY2tlZCArICR7ZytcIiBcIit2fSB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuXG4gICY6aG92ZXIgKyAke2d9IHtcbiAgICBib3gtc2hhZG93OiAwIDAgMXB4IDFweCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXRGb2N1c2VkfTtcbiAgfVxuXG4gICY6Zm9jdXMgKyAke2d9IHtcbiAgICBib3gtc2hhZG93OiAwIDAgMXB4IDFweCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXRGb2N1c2VkfTtcbiAgfVxuXG4gICY6ZGlzYWJsZWQge1xuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gIH1cblxuICAmOmRpc2FibGVkICsgJHtnfSB7XG4gICAgb3BhY2l0eTogMC41O1xuICB9XG5gfSw4MDUxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obigxKSx0KX0sOTAyMjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnR9KX06ZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dH0pLGk9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiIT09biYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnIodCxlLG4pO3JldHVybiBvKHQsZSksdH07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DaGVja2JveEdyb3VwPXZvaWQgMDtjb25zdCBhPW4oNTg5MyksbD1pKG4oNjY4OSkpLHM9aShuKDc1MTgpKSxjPW4oMTMzNSksdT1uKDc3NjkpLGY9big4MDUxKSxkPW4oNzAzMCk7dC5DaGVja2JveEdyb3VwPSh7ZGlzYWJsZWQ6ZSxnYXA6dD1cInNtYWxsXCIsaGVscGVyVGV4dDpuLGxhYmVsOnIsbWVzc2FnZTpvLGNoaWxkcmVuOmksdmFsaWRhdGlvbkVycm9yTWVzc2FnZTpzLHZhbHVlczpjLG9uQ2hhbmdlOnV9KT0+e2NvbnN0W3ksd109bC51c2VTdGF0ZShudWxsIT1jP2M6W10pLGI9ZT0+e2NvbnN0IHQ9ZS50YXJnZXQudmFsdWUsbj15LmluY2x1ZGVzKHQpP3kuZmlsdGVyKChlPT5lIT09dCkpOlsuLi55LHRdO3cobiksdSYmdShuKX07cmV0dXJuKDAsYS5qc3hzKSh2LHtjaGlsZHJlbjpbciYmKDAsYS5qc3hzKShwLHtjaGlsZHJlbjpbKDAsYS5qc3gpKGgsT2JqZWN0LmFzc2lnbih7d2VpZ2h0OlwiYm9sZFwifSx7Y2hpbGRyZW46cn0pKSxuJiYoMCxhLmpzeCkoZyx7Y2hpbGRyZW46bn0pXX0pLCgwLGEuanN4KShtLE9iamVjdC5hc3NpZ24oe2dhcDp0fSx7Y2hpbGRyZW46bC5DaGlsZHJlbi5tYXAoaSwodD0+e2NvbnN0IG49dDtyZXR1cm4gbi50eXBlPT09Zi5DaGVja2JveD9sLmNsb25lRWxlbWVudChuLHtkaXNhYmxlZDplLG9uQ2hhbmdlOmIsY2hlY2tlZDp5LmluY2x1ZGVzKG4ucHJvcHMudmFsdWUpfSk6bn0pKX0pKSwheS5sZW5ndGgmJnMmJigwLGEuanN4KShkLlZhbGlkYXRpb25FcnJvcix7Y2hpbGRyZW46c30pLG8/KDAsYS5qc3gpKEMsT2JqZWN0LmFzc2lnbih7ZGlzYWJsZWQ6ZX0se2NoaWxkcmVuOm99KSk6bnVsbF19KX07Y29uc3QgcD0oMCxzLmRlZmF1bHQpKGMuQm94KWBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgbWFyZ2luLWJvdHRvbTogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG5gLGg9KDAscy5kZWZhdWx0KSh1LlRleHQpYFxuICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcbmAsZz0oMCxzLmRlZmF1bHQpKHUuVGV4dClgXG4gIHNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dEhlbHB9O1xuYCx2PSgwLHMuZGVmYXVsdCkoYy5Cb3gpYFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB3aWR0aDogbWF4LWNvbnRlbnQ7XG5gLG09KDAscy5kZWZhdWx0KShjLkJveClgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGFsaWduLWl0ZW1zOiBzdGFydDtcbiAgd2lkdGg6IGZpdC1jb250ZW50O1xuYCxDPSgwLHMuZGVmYXVsdCkodS5UZXh0KWBcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dFBsYWNlaG9sZGVyfTtcbiAgbWFyZ2luLXRvcDogJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcblxuICAkeyh7ZGlzYWJsZWQ6ZX0pPT5lJiZzLmNzc2BcbiAgICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXREaXNhYmxlZH07XG4gICAgYH1cbmB9LDQxNjk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDkwMjIpLHQpfSw5MzY4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuRGF0ZUlucHV0PXZvaWQgMDtjb25zdCBpPW4oNTg5MyksYT1uKDY2ODkpLGw9byhuKDc1MTgpKSxzPW4oOTYzNCksYz1uKDEzMzUpLHU9big4ODc4KTt0LkRhdGVJbnB1dD0oMCxhLmZvcndhcmRSZWYpKCgoZSx0KT0+e3Zhcnt2YWx1ZTpuPVwiXCIsdHlwZTpvPVwiZGF0ZVwiLGV4cGFuZGVkOmw9ITEsb25DaGFuZ2U6c309ZSxjPXIoZSxbXCJ2YWx1ZVwiLFwidHlwZVwiLFwiZXhwYW5kZWRcIixcIm9uQ2hhbmdlXCJdKTtjb25zdFtkLHBdPSgwLGEudXNlU3RhdGUpKG4pO3JldHVybigwLGEudXNlRWZmZWN0KSgoKCk9PnAobikpLFtdKSwoMCxpLmpzeCkodS5CYXNlSW5wdXQsT2JqZWN0LmFzc2lnbih7dHlwZTpvfSxjLHtyZW5kZXJJbnB1dDplPT57dmFyIG49cihlLFtdKTtyZXR1cm4oMCxpLmpzeCkoZixPYmplY3QuYXNzaWduKHtyZWY6dCx0eXBlOm8sb25DaGFuZ2U6ZT0+e2NvbnN0e3ZhbHVlOnR9PWUudGFyZ2V0O3QmJnAodCksbnVsbD09c3x8cyhlKX0sdmFsdWU6ZCxleHBhbmRlZDpsfSxuKSl9fSkpfSkpLHQuRGF0ZUlucHV0LmRpc3BsYXlOYW1lPVwiRGF0ZUlucHV0XCI7Y29uc3QgZj0oMCxhLmZvcndhcmRSZWYpKCgoZSx0KT0+e3Zhcnt0eXBlOm4sZXhwYW5kZWQ6byxvbkV4cGFuZDphfT1lLGw9cihlLFtcInR5cGVcIixcImV4cGFuZGVkXCIsXCJvbkV4cGFuZFwiXSk7cmV0dXJuKDAsaS5qc3hzKShkLHtjaGlsZHJlbjpbKDAsaS5qc3gpKGgse2NoaWxkcmVuOigwLGkuanN4KShzLkljb24se2ljb246XCJ0aW1lXCI9PT1uP1wiQ2xvY2tJY29uXCI6XCJDYWxlbmRhckljb25cIn0pfSksKDAsaS5qc3gpKHYsT2JqZWN0LmFzc2lnbih7cmVmOnQsdHlwZTpuLG9uS2V5RG93bjplPT57XCIgXCI9PT1lLmtleSYmZS5wcmV2ZW50RGVmYXVsdCgpfX0sbCkpLCgwLGkuanN4KShnLE9iamVjdC5hc3NpZ24oe2ZsZXhEaXJlY3Rpb246XCJjb2x1bW5cIixkaXNhYmxlZDpsLmRpc2FibGVkLG9uQ2xpY2s6YX0se2NoaWxkcmVuOigwLGkuanN4KShzLkljb24se2ljb246bz9cIkNoZXZyb25VcEljb25cIjpcIkNoZXZyb25Eb3duSWNvblwifSl9KSldfSl9KSk7Zi5kaXNwbGF5TmFtZT1cIlN0eWxlZERhdGVJbnB1dFwiO2NvbnN0IGQ9bC5kZWZhdWx0LmRpdmBcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG4gIHdpZHRoOiAxMDAlO1xuYCxwPSgwLGwuZGVmYXVsdCkoYy5Cb3gpYFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDFweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAycHgpO1xuYCxoPSgwLGwuZGVmYXVsdCkocClgXG4gIGxlZnQ6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbmAsZz0oMCxsLmRlZmF1bHQpKHApYFxuICByaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG4gIHBvaW50ZXItZXZlbnRzOiAkeyh7ZGlzYWJsZWQ6ZX0pPT5lP1wibm9uZVwiOnZvaWQgMH07XG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ2fTtcbiAgcGFkZGluZy1sZWZ0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbmAsdj0oMCxsLmRlZmF1bHQpKHUuU3R5bGVkSW5wdXRGaWVsZClgXG4gIGFwcGVhcmFuY2U6IHRleHRmaWVsZDtcbiAgcGFkZGluZy1yaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5weC54eHhsYXJnZX07XG4gIHBhZGRpbmctbGVmdDogJHsoe3RoZW1lOmV9KT0+ZS5weC54eHhsYXJnZX07XG4gIDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbiAgOjotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3Ige1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgfVxuYH0sMTQ2NzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oOTM2OCksdCl9LDE5Nzg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDY4ODQpLHQpfSw2ODg0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTnVtYmVySW5wdXQ9dC5EaXJlY3Rpb249dm9pZCAwO2NvbnN0IGk9big1ODkzKSxhPW4oNjY4OSksbD1vKG4oNzUxOCkpLHM9big5NjM0KSxjPW4oMTMzNSksdT1uKDg4NzgpO3ZhciBmOyFmdW5jdGlvbihlKXtlW2UuVXA9MV09XCJVcFwiLGVbZS5Eb3duPS0xXT1cIkRvd25cIn0oZj10LkRpcmVjdGlvbnx8KHQuRGlyZWN0aW9uPXt9KSksdC5OdW1iZXJJbnB1dD0oMCxhLmZvcndhcmRSZWYpKCgoZSx0KT0+e3ZhcnttaW46bixtYXg6byxzdGVwOmE9MSxvblRha2VTdGVwOmwsdmFsdWU6c309ZSxjPXIoZSxbXCJtaW5cIixcIm1heFwiLFwic3RlcFwiLFwib25UYWtlU3RlcFwiLFwidmFsdWVcIl0pO3JldHVybigwLGkuanN4KSh1LkJhc2VJbnB1dCxPYmplY3QuYXNzaWduKHt0eXBlOlwibnVtYmVyXCJ9LGMse3JlbmRlcklucHV0OmU9Pnt2YXIgdT1yKGUsW10pO3JldHVybigwLGkuanN4KShkLE9iamVjdC5hc3NpZ24oe3ByZXBlbmRJY29uOmMucHJlcGVuZEljb24scHJlcGVuZFN0cmluZzpjLnByZXBlbmRTdHJpbmcscmVmOnQsb25JbmNyZW1lbnQ6KCk9PmwmJmwoZi5VcCxhKSxvbkRlY3JlbWVudDooKT0+bCYmbChmLkRvd24sYSksbWluOm4sbWF4Om8sc3RlcDphfSx1LHtwbGFjZWhvbGRlcjpjLnBsYWNlaG9sZGVyLHZhbHVlOnMsXCJhcmlhLXZhbHVlbm93XCI6cyxcImFyaWEtdmFsdWVtaW5cIjpuLFwiYXJpYS12YWx1ZW1heFwiOm99KSl9fSkpfSkpLHQuTnVtYmVySW5wdXQuZGlzcGxheU5hbWU9XCJOdW1iZXJJbnB1dFwiO2NvbnN0IGQ9KDAsYS5mb3J3YXJkUmVmKSgoKGUsdCk9Pnt2YXJ7b25JbmNyZW1lbnQ6bixvbkRlY3JlbWVudDpvLHByZXBlbmRJY29uOmwscHJlcGVuZFN0cmluZzpjfT1lLHU9cihlLFtcIm9uSW5jcmVtZW50XCIsXCJvbkRlY3JlbWVudFwiLFwicHJlcGVuZEljb25cIixcInByZXBlbmRTdHJpbmdcIl0pO2NvbnN0IGY9KGUsdCk9PntcIkVudGVyXCIhPT1lLmtleSYmXCIgXCIhPT1lLmtleXx8KGUucHJldmVudERlZmF1bHQoKSx0P24oKTpvKCkpfSxkPSgwLGEudXNlUmVmKShudWxsKSxbQyx5XT0oMCxhLnVzZVN0YXRlKSgwKTtyZXR1cm4oMCxhLnVzZUVmZmVjdCkoKCgpPT57ZC5jdXJyZW50P3koZC5jdXJyZW50Lm9mZnNldFdpZHRoKTp5KDApfSksW2QuY3VycmVudCxsLGNdKSwoMCxpLmpzeHMpKHAse2NoaWxkcmVuOlsoISFsfHwhIWMpJiYoMCxpLmpzeHMpKGgsT2JqZWN0LmFzc2lnbih7aGFzSWNvbjohIWwscmVmOmQsYWxpZ25JdGVtczpcImNlbnRlclwiLGp1c3RpZnlDb250ZW50OlwiY2VudGVyXCJ9LHtjaGlsZHJlbjpbbCYmKDAsaS5qc3gpKHMuSWNvbix7aWNvbjpsLHNpemU6XCJiYXNlXCJ9KSxjJiYhbCYmY119KSksKDAsaS5qc3gpKG0sT2JqZWN0LmFzc2lnbih7cHJlcGVuZENvbnRhaW5lcldpZHRoOkMscmVmOnR9LHUpKSwoMCxpLmpzeHMpKGcsT2JqZWN0LmFzc2lnbih7ZmxleERpcmVjdGlvbjpcImNvbHVtblwiLGRpc2FibGVkOnUuZGlzYWJsZWR9LHtjaGlsZHJlbjpbKDAsaS5qc3gpKHYsT2JqZWN0LmFzc2lnbih7b25DbGljazpuLG9uS2V5RG93bjplPT5mKGUsITApLGRpc2FibGVkOnUuZGlzYWJsZWQsXCJhcmlhLWxhYmVsXCI6XCJJbmNyZW1lbnQgdmFsdWVcIix0YWJJbmRleDowfSx7Y2hpbGRyZW46KDAsaS5qc3gpKHMuSWNvbix7aWNvbjpcIlRyaWFuZ2xlVXBJY29uXCJ9KX0pKSwoMCxpLmpzeCkodixPYmplY3QuYXNzaWduKHtvbktleURvd246ZT0+ZihlKSxvbkNsaWNrOm8sXCJhcmlhLWxhYmVsXCI6XCJEZWNyZW1lbnQgdmFsdWVcIixkaXNhYmxlZDp1LmRpc2FibGVkLHRhYkluZGV4OjB9LHtjaGlsZHJlbjooMCxpLmpzeCkocy5JY29uLHtpY29uOlwiVHJpYW5nbGVEb3duSWNvblwifSl9KSldfSkpXX0pfSkpO2QuZGlzcGxheU5hbWU9XCJTdHlsZWROdW1iZXJJbnB1dFwiO2NvbnN0IHA9bC5kZWZhdWx0LmRpdmBcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5lLnJhZGl1cy5zbWFsbH07XG4gIHdpZHRoOiAxMDAlO1xuYCxoPSgwLGwuZGVmYXVsdCkoYy5Cb3gpYFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDZ9O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDFweDtcbiAgdG9wOiAxcHg7XG4gIHdpZHRoOiAkeyh7dGhlbWU6ZSxoYXNJY29uOnR9KT0+dD9lLnB4Lnh4bGFyZ2U6XCJmaXQtY29udGVudFwifTtcbiAgcGFkZGluZzogMCAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAycHgpO1xuICBib3JkZXItcmFkaXVzOiAkeyh7dGhlbWU6ZX0pPT5gJHtlLnJhZGl1cy5zbWFsbH0gMCAwICR7ZS5yYWRpdXMuc21hbGx9YH07XG5gLGc9KDAsbC5kZWZhdWx0KShjLkJveClgXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDFweDtcbiAgdG9wOiAxcHg7XG4gIGdhcDogMXB4O1xuICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDJweCk7XG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmAwICR7ZS5yYWRpdXMuc21hbGx9ICR7ZS5yYWRpdXMuc21hbGx9IDBgfTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICBwb2ludGVyLWV2ZW50czogJHsoe2Rpc2FibGVkOmV9KT0+ZT9cIm5vbmVcIjp2b2lkIDB9O1xuYCx2PSgwLGwuZGVmYXVsdCkoYy5Cb3gpYFxuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGJhY2tncm91bmQ6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5iYWNrZ3JvdW5kNn07XG4gIHBhZGRpbmc6IDAgJHsoe3RoZW1lOmV9KT0+ZS5weC54c21hbGx9O1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgaGVpZ2h0OiA1MCU7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXG4gIGNvbG9yOiAkeyh7ZGlzYWJsZWQ6ZSx0aGVtZTp0fSk9PmU/dC5wYWxldHRlLnRleHRIZWxwOnQucGFsZXR0ZS50ZXh0RGVmYXVsdH07XG5cbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0Rm9jdXNlZH07XG4gIH1cblxuICAmOmFjdGl2ZSB7XG4gICAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0Q29sb3J9O1xuICB9XG5gLG09KDAsbC5kZWZhdWx0KSh1LlN0eWxlZElucHV0RmllbGQpYFxuICBhcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XG4gIHBhZGRpbmctbGVmdDogJHsoe3ByZXBlbmRDb250YWluZXJXaWR0aDplfSk9PmAke2UrMTB9cHhgfTtcblxuICA6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG4gIDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XG4gICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgICBtYXJnaW46IDA7XG4gIH1cbmB9LDUyMTU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDIyNTUpLHQpfSwyMjU1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pfTpmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10fSksaT10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCIhPT1uJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmcih0LGUsbik7cmV0dXJuIG8odCxlKSx0fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlJhZGlvR3JvdXA9dm9pZCAwO2NvbnN0IGE9big1ODkzKSxsPWkobig2Njg5KSkscz1pKG4oNzUxOCkpLGM9bigxMzM1KSx1PW4oNzc2OSksZj1uKDI1NjUpLGQ9big3MDMwKTt0LlJhZGlvR3JvdXA9KHtkaXJlY3Rpb246ZT1cImNvbHVtblwiLGxhYmVsOnQsZGlzYWJsZWQ6bixsYWJlbFNpZGU6cj1cInJpZ2h0XCIsZ2FwOm89XCJzbWFsbFwiLG1lc3NhZ2U6aSxoZWxwZXJUZXh0OnMsbmFtZTpjLGNoaWxkcmVuOnUsdmFsaWRhdGlvbkVycm9yTWVzc2FnZTp5LG9uQ2hhbmdlOncsdmFsdWU6Yn0pPT57Y29uc3RbeCxfXT1sLnVzZVN0YXRlKGIpLE89ZT0+e18oZS50YXJnZXQudmFsdWUpLHcmJncoZSl9O3JldHVybiBsLnVzZUVmZmVjdCgoKCk9PntfKGIpfSksW2JdKSwoMCxhLmpzeHMpKGgse2NoaWxkcmVuOlsoMCxhLmpzeHMpKHAse2NoaWxkcmVuOlsoMCxhLmpzeCkoQyxPYmplY3QuYXNzaWduKHt3ZWlnaHQ6XCJib2xkXCJ9LHtjaGlsZHJlbjp0fSkpLHMmJigwLGEuanN4KShnLHtjaGlsZHJlbjpzfSldfSksKDAsYS5qc3gpKHYsT2JqZWN0LmFzc2lnbih7ZGlyZWN0aW9uOmUsbGFiZWxTaWRlOnIsZ2FwOm99LHtjaGlsZHJlbjpsLkNoaWxkcmVuLm1hcCh1LChlPT57Y29uc3QgdD1lO3JldHVybiB0LnR5cGU9PT1mLlJhZGlvSW5wdXQ/bC5jbG9uZUVsZW1lbnQodCx7bmFtZTpjLGxhYmVsU2lkZTpyLGRpc2FibGVkOm4sb25DaGFuZ2U6TyxjaGVja2VkOnQucHJvcHMudmFsdWU9PT14fSk6dH0pKX0pKSwheCYmeSYmKDAsYS5qc3gpKGQuVmFsaWRhdGlvbkVycm9yLHtjaGlsZHJlbjp5fSksaT8oMCxhLmpzeCkobSxPYmplY3QuYXNzaWduKHtkaXNhYmxlZDpufSx7Y2hpbGRyZW46aX0pKTpudWxsXX0pfTtjb25zdCBwPSgwLHMuZGVmYXVsdCkoYy5Cb3gpYFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBtYXJnaW4tYm90dG9tOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbmAsaD0oMCxzLmRlZmF1bHQpKGMuQm94KWBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6IG1heC1jb250ZW50O1xuYCxnPSgwLHMuZGVmYXVsdCkodS5UZXh0KWBcbiAgc2l6ZTogJHsoe3RoZW1lOmV9KT0+ZS5mb250U2l6ZS5iYXNlfTtcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0SGVscH07XG5gLHY9KDAscy5kZWZhdWx0KShjLkJveClgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiAke2U9PmUuZGlyZWN0aW9ufTtcbiAgYWxpZ24taXRlbXM6ICR7ZT0+e3N3aXRjaChlLmxhYmVsU2lkZSl7Y2FzZVwibGVmdFwiOnJldHVyblwiZW5kXCI7Y2FzZVwicmlnaHRcIjpyZXR1cm5cInN0YXJ0XCI7ZGVmYXVsdDpyZXR1cm5cImNlbnRlclwifX19O1xuICB3aWR0aDogZml0LWNvbnRlbnQ7XG5gLG09KDAscy5kZWZhdWx0KSh1LlRleHQpYFxuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0UGxhY2Vob2xkZXJ9O1xuICBtYXJnaW4tdG9wOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuXG4gICR7KHtkaXNhYmxlZDplfSk9PmUmJnMuY3NzYFxuICAgICAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dERpc2FibGVkfTtcbiAgICBgfVxuYCxDPSgwLHMuZGVmYXVsdCkodS5UZXh0KWBcbiAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XG5gfSwzNjQxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obigyNTY1KSx0KX0sMjU2NTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnR9KX06ZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dH0pLGk9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiIT09biYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnIodCxlLG4pO3JldHVybiBvKHQsZSksdH0sYT10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlJhZGlvSW5wdXQ9dm9pZCAwO2NvbnN0IGw9big1ODkzKSxzPW4oNzc2OSksYz1pKG4oNjY4OSkpLHU9aShuKDc1MTgpKSxmPW4oMTMzNSksZD1uKDk2MzQpO3QuUmFkaW9JbnB1dD1jLmZvcndhcmRSZWYoKChlLHQpPT57dmFye2Rpc2FibGVkOm4saWQ6cixsYWJlbDpvLGxhYmVsU2lkZTppLGljb246c309ZSxjPWEoZSxbXCJkaXNhYmxlZFwiLFwiaWRcIixcImxhYmVsXCIsXCJsYWJlbFNpZGVcIixcImljb25cIl0pO3JldHVybigwLGwuanN4KShwLHtjaGlsZHJlbjooMCxsLmpzeHMpKHYsT2JqZWN0LmFzc2lnbih7YXM6XCJsYWJlbFwiLGh0bWxGb3I6cixsYWJlbFNpZGU6aSxkaXNhYmxlZDpufSx7Y2hpbGRyZW46WygwLGwuanN4KShnLE9iamVjdC5hc3NpZ24oe3JlZjp0LHR5cGU6XCJyYWRpb1wiLGRpc2FibGVkOm59LGMpKSwoMCxsLmpzeCkoaCx7fSksISFzJiYoMCxsLmpzeCkoZC5JY29uLHtpY29uOnN9KSxvfHxcIlwiXX0pKX0pfSkpLHQuUmFkaW9JbnB1dC5kaXNwbGF5TmFtZT1cIlJhZGlvSW5wdXRcIjtjb25zdCBwPSgwLHUuZGVmYXVsdCkoZi5Cb3gpYFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuYCxoPXUuZGVmYXVsdC5kaXZgXG4gIHdpZHRoOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuICBoZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XG5cbiAgaW5wdXQ6Y2hlY2tlZCB+ICY6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbjogMnB4IDFweCAwcHggMnB4O1xuICAgIHdpZHRoOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbiAgICBoZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dERlZmF1bHR9O1xuICB9XG5cbiAgaW5wdXQ6ZGlzYWJsZWQgfiAmIHtcbiAgICBib3JkZXItY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS5pbnB1dERpc2FibGVkfTtcbiAgfVxuXG4gIGlucHV0OmRpc2FibGVkIH4gJjphZnRlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0RGlzYWJsZWR9O1xuICB9XG5gLGc9dS5kZWZhdWx0LmlucHV0YFxuICBvcGFjaXR5OiAwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGN1cnNvcjogcG9pbnRlcjtcblxuICAmOmRpc2FibGVkIHtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gIH1cbmAsdj0oMCx1LmRlZmF1bHQpKHMuVGV4dClgXG4gIHdpZHRoOiBmaXQtY29udGVudDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZmxleC1kaXJlY3Rpb246ICR7KHtsYWJlbFNpZGU6ZX0pPT57c3dpdGNoKGV8fFwicmlnaHRcIil7Y2FzZVwibGVmdFwiOnJldHVyblwicm93LXJldmVyc2VcIjtjYXNlXCJyaWdodFwiOnJldHVyblwicm93XCI7Y2FzZVwidG9wXCI6cmV0dXJuXCJjb2x1bW4tcmV2ZXJzZVwiO2Nhc2VcImJvdHRvbVwiOnJldHVyblwiY29sdW1uXCJ9fX07XG4gIGdhcDogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG4gIGN1cnNvcjogcG9pbnRlcjtcblxuICAkeyh7ZGlzYWJsZWQ6ZX0pPT5lP3UuY3NzYFxuICAgICAgICAgICYge1xuICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXREaXNhYmxlZH07XG4gICAgICAgIGA6bnVsbH1cbmB9LDg1MTA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDcwNjgpLHQpfSw3MDY4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlJhd0lucHV0PXZvaWQgMDtjb25zdCBvPXIobig3NTE4KSk7dC5SYXdJbnB1dD1vLmRlZmF1bHQuaW5wdXRgYCx0LlJhd0lucHV0LmRpc3BsYXlOYW1lPVwiUmF3SW5wdXRcIn0sMzExOTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oNzk5KSx0KX0sNzk5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlRleHRBcmVhPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksaT1uKDY2ODkpLGE9cihuKDc1MTgpKSxsPW4oOTUwNykscz1uKDk1MDcpLGM9bigxMzM1KSx1PW4oMTk0NCk7dC5UZXh0QXJlYT0oMCxpLmZvcndhcmRSZWYpKCgoZSx0KT0+KDAsby5qc3gpKGQsT2JqZWN0LmFzc2lnbih7ZmxleERpcmVjdGlvbjpcImNvbHVtblwiLGFsaWduSXRlbXM6XCJmbGV4LXN0YXJ0XCJ9LHtjaGlsZHJlbjooMCxvLmpzeHMpKGYse2NoaWxkcmVuOlshIWUubGFiZWwmJigwLG8uanN4KSh1LkxhYmVsLHt0ZXh0OmUubGFiZWwsaHRtbEZvcjplLm5hbWUsaGVscGVyVGV4dDplLmhlbHBlclRleHR9KSwoMCxvLmpzeCkocCxPYmplY3QuYXNzaWduKHtyZWY6dH0sZSx7b25DaGFuZ2U6ZS5vbkNoYW5nZX0pKV19KX0pKSkpLHQuVGV4dEFyZWEuZGlzcGxheU5hbWU9XCJUZXh0QXJlYVwiO2NvbnN0IGY9KDAsYS5kZWZhdWx0KShjLkJveClgXG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIHdpZHRoOiAxMDAlO1xuYCxkPSgwLGEuZGVmYXVsdCkoYy5Cb3gpYFxuICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gIHVzZXItc2VsZWN0OiBub25lO1xuYCxwPWEuZGVmYXVsdC50ZXh0YXJlYWBcbiAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQ0fTtcbiAgYm9yZGVyOiAxcHggc29saWQgJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0Qm9yZGVyfTtcbiAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZSxzdGF0dXM6dH0pPT4oMCxzLmdldFN0YXR1c0NvbG9yKShlLHQsXCJpbnB1dEJvcmRlclwiKX07XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgd2lkdGg6IDEwMCU7XG4gIHJlc2l6ZTogbm9uZTtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgJHtsLk1peGlucy5zY3JvbGxiYXIuc21hbGx9O1xuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0Q29sb3J9O1xuICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuYmFzZX07XG4gIGxpbmUtaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmxpbmVIZWlnaHQudGV4dH07XG4gIGZvbnQtd2VpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRXZWlnaHQubm9ybWFsfTtcbiAgcGFkZGluZzogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH0gJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH0gMHB4ICR7KHt0aGVtZTplfSk9PmUucHguc21hbGx9O1xuXG4gICY6Zm9jdXMge1xuICAgIG91dGxpbmU6IDA7XG4gICAgYm9yZGVyLWNvbG9yOiAkeyh7dGhlbWU6ZSxzdGF0dXM6dH0pPT4oMCxzLmdldFN0YXR1c0NvbG9yKShlLHQsXCJpbnB1dEZvY3VzZWRcIil9O1xuICB9XG5cbiAgJjpkaXNhYmxlZDo6cGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuaW5wdXREaXNhYmxlZH07XG4gIH1cbmB9LDg5NTE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDIzNTIpLHQpfSwyMzUyOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlRleHRJbnB1dD12b2lkIDA7Y29uc3Qgcj1uKDU4OTMpLG89big2Njg5KSxpPW4oODg3OCk7dC5UZXh0SW5wdXQ9KDAsby5mb3J3YXJkUmVmKSgoKGUsdCk9PigwLHIuanN4KShpLkJhc2VJbnB1dCxPYmplY3QuYXNzaWduKHtyZWY6dCx0eXBlOlwidGV4dFwifSxlKSkpKSx0LlRleHRJbnB1dC5kaXNwbGF5TmFtZT1cIlRleHRJbnB1dFwifSwzMzM5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkJveD12b2lkIDA7Y29uc3Qgbz1yKG4oNzUxOCkpLGk9big4NzMyKSxhPW4oNTQ1OSksbD17MTphLlBhbGV0dGUuYmFja2dyb3VuZDEsMjphLlBhbGV0dGUuYmFja2dyb3VuZDIsMzphLlBhbGV0dGUuYmFja2dyb3VuZDMsNDphLlBhbGV0dGUuYmFja2dyb3VuZDQsNTphLlBhbGV0dGUuYmFja2dyb3VuZDUsNjphLlBhbGV0dGUuYmFja2dyb3VuZDZ9O3QuQm94PW8uZGVmYXVsdC5kaXZgXG4gIC8qKlxuICAgKiBTdHlsZSBTY3JvbGxiYXIgZm9yIEJveGVzIHdpdGggb3ZlcmZsb3dcbiAgICovXG4gICR7aS5NaXhpbnMuc2Nyb2xsYmFyLmJhc2V9XG5cbiAgZGlzcGxheTogJHsoe2Rpc3BsYXk6ZT1cImZsZXhcIn0pPT5lfTtcbiAgZmxleC1kaXJlY3Rpb246ICR7KHtmbGV4RGlyZWN0aW9uOmU9XCJyb3dcIn0pPT5lfTtcbiAgZmxleC13cmFwOiAkeyh7ZmxleFdyYXA6ZT1cIm5vd3JhcFwifSk9PmV9O1xuICBhbGlnbi1pdGVtczogJHsoe2FsaWduSXRlbXM6ZX0pPT5lfTtcbiAganVzdGlmeS1jb250ZW50OiAkeyh7anVzdGlmeUNvbnRlbnQ6ZX0pPT5lfTtcbiAgZ2FwOiAkeyh7dGhlbWU6ZSxnYXA6dH0pPT50JiZlLnB4W3RdfTtcbiAgYWxpZ24tc2VsZjogJHsoe2FsaWduU2VsZjplfSk9PmV9O1xuICBmbGV4LWJhc2lzOiAkeyh7ZmxleEJhc2lzOmV9KT0+ZX07XG4gIGZsZXgtZ3JvdzogJHsoe2ZsZXhHcm93OmV9KT0+ZX07XG4gIGZsZXgtc2hyaW5rOiAkeyh7ZmxleFNocmluazplfSk9PmV9O1xuICBvcmRlcjogJHsoe29yZGVyOmV9KT0+ZX07XG4gIHBhZGRpbmc6ICR7KHt0aGVtZTplLHBhZGRpbmc6dH0pPT50JiZlLnB4W3RdfTtcbiAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmUsYmFja2dyb3VuZDp0fSk9PnQmJmUucGFsZXR0ZVtsW3RdXX07XG5gLHQuQm94LmRpc3BsYXlOYW1lPVwiQm94XCJ9LDEzMzU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDMzMzkpLHQpfSw2NzEwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVzdHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufSxvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuRGVmaW5pdGlvbkxpc3Q9dm9pZCAwO2NvbnN0IGk9big1ODkzKSxhPW8obig3NTE4KSk7dC5EZWZpbml0aW9uTGlzdD1lPT57dmFye2RlZmluaXRpb25zOnR9PWUsbj1yKGUsW1wiZGVmaW5pdGlvbnNcIl0pO3JldHVybigwLGkuanN4KShzLE9iamVjdC5hc3NpZ24oe30sbix7cm9sZTpcImxpc3RcIn0se2NoaWxkcmVuOihBcnJheS5pc0FycmF5KHQpP3Q6QXJyYXkuZnJvbSh0KSkubWFwKCgoW2UsdF0sbik9PigwLGkuanN4cykobCxPYmplY3QuYXNzaWduKHtyb2xlOlwibGlzdGl0ZW1cIn0se2NoaWxkcmVuOlsoMCxpLmpzeCkoYyxPYmplY3QuYXNzaWduKHtpZDpgdGVybSR7bn1gfSx7Y2hpbGRyZW46ZX0pKSwoMCxpLmpzeCkodSxPYmplY3QuYXNzaWduKHtcImFyaWEtbGFiZWxsZWRieVwiOmB0ZXJtJHtufWB9LHtjaGlsZHJlbjp0fSkpXX0pLGAke2V9LSR7bn1gKSkpfSkpfTtjb25zdCBsPWEuZGVmYXVsdC5kaXZgXG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDNmcjtcbmAscz1hLmRlZmF1bHQuZGxgXG4gIGdhcDogJHsoe3RoZW1lOmV9KT0+YDAgJHtlLnB4LmxhcmdlfWB9O1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICBwYWRkaW5nOiAkeyh7dGhlbWU6ZX0pPT5gJHtlLnB4LnNtYWxsfSAke2UucHguYmFzZX1gfTtcbiAgd29yZC1icmVhazogYnJlYWstd29yZDtcbmAsYz1hLmRlZmF1bHQuZHRgXG4gIGNvbG9yOiAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUudGV4dEhlbHB9O1xuICBmb250LXNpemU6ICR7KHt0aGVtZTplfSk9PmUuZm9udFNpemUuc21hbGx9O1xuICBmb250LXdlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5mb250V2VpZ2h0Lm5vcm1hbH07XG4gIGxpbmUtaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuICBwYWRkaW5nLWJvdHRvbTogJHsoe3RoZW1lOmV9KT0+ZS5weC5zbWFsbH07XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5gLHU9YS5kZWZhdWx0LmRkYFxuICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLnNtYWxsfTtcbiAgbGluZS1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHguYmFzZX07XG4gIHBhZGRpbmctYm90dG9tOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LnNtYWxsfTtcbmB9LDUzNzc6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDY3MTApLHQpfSw5NDMxOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lkdsb2JhbFN0eWxlcz12b2lkIDA7Y29uc3Qgcj1uKDc1MTgpLG89big1NzUpLGk9big5MjcyKTt0Lkdsb2JhbFN0eWxlcz1yLmNyZWF0ZUdsb2JhbFN0eWxlYFxuICAvKiogLT4gRGVmaW5lIEdsb2JhbCBDU1MgVmFycyAqL1xuICA6cm9vdCB7XG4gICAgLS1vcGVuZmluLXVpLWdsb2JhbFRyYW5zaXRpb246ICR7KHt0aGVtZTplfSk9PmUudHJhbnNpdGlvbi5iYXNlfTtcblxuICAgIGZvbnQtZmFtaWx5OiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRGYW1pbHl9O1xuICAgIC8qIE1hcCBvdmVyIHRoZSBwYWxldHRlIGtleXMgYW5kIGNyZWF0ZSB2YXJpYWJsZXMgb3V0IG9mIHRoZW0gKi9cbiAgICAke28uZ2V0Um9vdENzc1ZhcnN9XG4gIH1cblxuICAvKiogLT4gQGZvbnQtZmFjZSBEZWNsYXJhdGlvbiAqL1xuICAkeyh7Zm9udHM6ZX0pPT4oMCxpLmNyZWF0ZUZvbnRGYWNlQ3NzKShlKX1cblxuICAvKiogLT4gTWljcm8gUmVzZXQgKi9cbiAgKiB7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICAvKipcbiAgICAgKiBQcmV2ZW50IGJyb3dzZXIgYXV0by13ZWlnaHRpbmdcbiAgICAgKiBAbGluayBodHRwczovL2Nzcy10cmlja3MuY29tL2FsbWFuYWMvcHJvcGVydGllcy9mL2ZvbnQtc3ludGhlc2lzL1xuICAgICAqL1xuICAgIGZvbnQtc3ludGhlc2lzOiBub25lO1xuICB9XG5cbiAgLyoqIC0+IEFwcGx5IEdsb2JhbCBTdHlsZXMgKi9cblxuICBib2R5LFxuICA6cm9vdCB7XG4gICAgYmFja2dyb3VuZDogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmJhY2tncm91bmQxfTtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLnRleHREZWZhdWx0fTtcbiAgICBmb250LWZhbWlseTogJHsoe3RoZW1lOmV9KT0+ZS5mb250RmFtaWx5fTtcbiAgICBmb250LXdlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5mb250V2VpZ2h0Lm5vcm1hbH07XG4gICAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmJhc2V9O1xuICAgIGxpbmUtaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmxpbmVIZWlnaHQudGV4dH07XG4gIH1cblxuICA6OnBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJHsoe3RoZW1lOmV9KT0+ZS5wYWxldHRlLmlucHV0UGxhY2Vob2xkZXJ9O1xuICB9XG5cbiAgLyoqIC0+IFJlZHVjZWQgTW90aW9uIChBY2Nlc3NpYmlsaXR5KSAqL1xuICBAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb24pIHtcbiAgICA6cm9vdCB7XG4gICAgICAtLW9wZW5maW4tdWktZ2xvYmFsVHJhbnNpdGlvbjogJHsoe3RoZW1lOmV9KT0+ZS50cmFuc2l0aW9uLm5vbmV9O1xuICAgIH1cbiAgfVxuYH0sMTA2OTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oOTQzMSksdCl9LDEzMTA6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0sOTUwNzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oOTYzOCksdCksbyhuKDQyMCksdCl9LDk5ODQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZ2V0TW9zdFJlYWRhYmxlPXQuZGFya2VuQ29sb3I9dC5saWdodGVuQ29sb3I9dm9pZCAwO2NvbnN0IG89cihuKDgyMDcpKTt0LmxpZ2h0ZW5Db2xvcj0oZSx0KT0+aShlLFwibGlnaHRlblwiLHQpLHQuZGFya2VuQ29sb3I9KGUsdCk9PmkoZSxcImRhcmtlblwiLHQpO2NvbnN0IGk9KGUsdCxuKT0+e2lmKG4mJihuPDB8fG4+MTAwKSl0aHJvdyBuZXcgRXJyb3IoYCR7bn0gbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEwMGApO3JldHVybigwLG8uZGVmYXVsdCkoZSlbdF0obikudG9TdHJpbmcoKX07dC5nZXRNb3N0UmVhZGFibGU9KGUsdCk9Pm8uZGVmYXVsdC5tb3N0UmVhZGFibGUoZSx0KS50b0hleFN0cmluZygpfSwzNDcxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pfTpmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10fSksaT10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCIhPT1uJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmcih0LGUsbik7cmV0dXJuIG8odCxlKSx0fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lkljb25TaXplPXQuSWNvblNldD10LlRyYW5zaXRpb249dC5MaW5lSGVpZ2h0PXQuRm9udFdlaWdodD10LkZvbnRTaXplPXQuRm9udEZhbWlseT10LlNoYWRvdz10LlJhZGl1cz10LlVuaXRQeD10LlVuaXQ9dC5TaXplTmFtZT10LlNpemU9dC5Db2xvcj12b2lkIDA7Y29uc3QgYT1pKG4oMTUyMSkpLGw9aShuKDI3NzIpKTt0LkNvbG9yPXt3aGl0ZTpcIiNGRkZGRkZcIixsaWdodEdyYXkxOlwiI0ZBRkJGRVwiLGxpZ2h0R3JheTI6XCIjRjNGNUY4XCIsbGlnaHRHcmF5MzpcIiNFQ0VFRjFcIixsaWdodEdyYXk0OlwiI0REREZFNFwiLGxpZ2h0R3JheTU6XCIjQzlDQkQyXCIsbmV1dHJhbEdyYXk6XCIjN0Q4MDhBXCIsbmV1dHJhbEdyYXk4MDpcInJnYmEoMTI1LDEyOCwxMzgsMC44KVwiLHNpbHZlckdyYXk6XCIjQzBDMUMyXCIsZGFya0dyYXkxOlwiIzUzNTY1RlwiLGRhcmtHcmF5MjpcIiMzODNBNDBcIixkYXJrR3JheTM6XCIjMkYzMTM2XCIsZGFya0dyYXk0OlwiIzI0MjYyQlwiLGRhcmtHcmF5NTpcIiMxRTFGMjNcIixkYXJrR3JheTY6XCIjMTExMjE0XCIsb3BlbkZpbkRhcmtlc3Q6XCIjM0QzOUNEXCIsb3BlbkZpbkRhcmtlcjpcIiM0NjQyRTBcIixvcGVuRmluOlwiIzUwNENGRlwiLG9wZW5GaW5MaWdodDpcIiM1MjU0RkJcIixvcGVuRmluTGlnaHRlcjpcIiM1QzVFRkVcIixvcGVuRmluTGlnaHRlc3Q6XCIjNjg2NEZGXCIsZnVuY3Rpb25hbDE6XCIjMjA3NzM1XCIsZnVuY3Rpb25hbDI6XCIjNDZDOEYxXCIsZnVuY3Rpb25hbDM6XCIjMEE3NkQzXCIsZnVuY3Rpb25hbDQ6XCIjNkNBREU1XCIsZnVuY3Rpb25hbDU6XCIjMEE3NkQzXCIsZnVuY3Rpb25hbDY6XCIjODgyQkZFXCIsZnVuY3Rpb25hbDc6XCIjRjMxODE4XCIsZnVuY3Rpb25hbDg6XCIjQzkzNDAwXCIsZnVuY3Rpb25hbDk6XCIjRkY1RTYwXCIsZnVuY3Rpb25hbDEwOlwiI0Y0OEYwMFwiLHB1cnBsZTpcIiM4QzYxRkZcIixsaWdodGJsdWU6XCIjMzZDM0ZFXCIsYXF1YTpcIiMwMENDODhcIix5ZWxsb3c6XCIjRkZFQjAwXCIsc2FsbW9uOlwiI0ZGOEM0Q1wiLHBpbms6XCIjRkY1RTYwXCIsbGlnaHRwaW5rOlwiI0ZGOEZCOFwiLHdoaXRlMDA6XCJyZ2JhKDI1NSwyNTUsMjU1LDAuMClcIix3aGl0ZTEwOlwicmdiYSgyNTUsMjU1LDI1NSwwLjEpXCIsd2hpdGUyMDpcInJnYmEoMjU1LDI1NSwyNTUsMC4yKVwiLHdoaXRlMzA6XCJyZ2JhKDI1NSwyNTUsMjU1LDAuMylcIix3aGl0ZTQwOlwicmdiYSgyNTUsMjU1LDI1NSwwLjQpXCIsd2hpdGU1MDpcInJnYmEoMjU1LDI1NSwyNTUsMC41KVwiLHdoaXRlNjA6XCJyZ2JhKDI1NSwyNTUsMjU1LDAuNilcIix3aGl0ZTcwOlwicmdiYSgyNTUsMjU1LDI1NSwwLjcpXCIsd2hpdGU4MDpcInJnYmEoMjU1LDI1NSwyNTUsMC44KVwiLHdoaXRlOTA6XCJyZ2JhKDI1NSwyNTUsMjU1LDAuOSlcIixibGFjazAwOlwicmdiYSgwLDAsMCwwLjApXCIsYmxhY2sxMDpcInJnYmEoMCwwLDAsMC4xKVwiLGJsYWNrMjA6XCJyZ2JhKDAsMCwwLDAuMilcIixibGFjazMwOlwicmdiYSgwLDAsMCwwLjMpXCIsYmxhY2s0MDpcInJnYmEoMCwwLDAsMC40KVwiLGJsYWNrNTA6XCJyZ2JhKDAsMCwwLDAuNSlcIixibGFjazYwOlwicmdiYSgwLDAsMCwwLjYpXCIsYmxhY2s3MDpcInJnYmEoMCwwLDAsMC43KVwiLGJsYWNrODA6XCJyZ2JhKDAsMCwwLDAuOClcIixibGFjazkwOlwicmdiYSgwLDAsMCwwLjkpXCIsdHJhbnNwYXJlbnQ6XCJ0cmFuc3BhcmVudFwifSx0LlNpemU9e3hzbWFsbDpcInhzbWFsbFwiLHNtYWxsOlwic21hbGxcIixiYXNlOlwiYmFzZVwiLGxhcmdlOlwibGFyZ2VcIix4bGFyZ2U6XCJ4bGFyZ2VcIix4eGxhcmdlOlwieHhsYXJnZVwiLHh4eGxhcmdlOlwieHh4bGFyZ2VcIix4eHh4bGFyZ2U6XCJ4eHh4bGFyZ2VcIn0sdC5TaXplTmFtZT17W3QuU2l6ZS54c21hbGxdOlwiRXh0cmEgU21hbGxcIixbdC5TaXplLnNtYWxsXTpcIlNtYWxsXCIsW3QuU2l6ZS5iYXNlXTpcIkJhc2VcIixbdC5TaXplLmxhcmdlXTpcIkxhcmdlXCIsW3QuU2l6ZS54bGFyZ2VdOlwiRXh0cmEgTGFyZ2VcIixbdC5TaXplLnh4bGFyZ2VdOlwiMlggTGFyZ2VcIixbdC5TaXplLnh4eGxhcmdlXTpcIjNYIExhcmdlXCIsW3QuU2l6ZS54eHh4bGFyZ2VdOlwiNFggTGFyZ2VcIn0sdC5Vbml0PXtbdC5TaXplLnhzbWFsbF06NCxbdC5TaXplLnNtYWxsXTo4LFt0LlNpemUuYmFzZV06MTIsW3QuU2l6ZS5sYXJnZV06MTYsW3QuU2l6ZS54bGFyZ2VdOjIwLFt0LlNpemUueHhsYXJnZV06MjQsW3QuU2l6ZS54eHhsYXJnZV06MzIsW3QuU2l6ZS54eHh4bGFyZ2VdOjQ4fSx0LlVuaXRQeD17W3QuU2l6ZS54c21hbGxdOlwiNHB4XCIsW3QuU2l6ZS5zbWFsbF06XCI4cHhcIixbdC5TaXplLmJhc2VdOlwiMTJweFwiLFt0LlNpemUubGFyZ2VdOlwiMTZweFwiLFt0LlNpemUueGxhcmdlXTpcIjIwcHhcIixbdC5TaXplLnh4bGFyZ2VdOlwiMjRweFwiLFt0LlNpemUueHh4bGFyZ2VdOlwiMzJweFwiLFt0LlNpemUueHh4eGxhcmdlXTpcIjQ4cHhcIn0sdC5SYWRpdXM9e1t0LlNpemUueHNtYWxsXTpcIjJweFwiLFt0LlNpemUuc21hbGxdOlwiNHB4XCIsW3QuU2l6ZS5iYXNlXTpcIjhweFwiLFt0LlNpemUubGFyZ2VdOlwiMjRweFwiLHBpbGw6XCIxMDB2aFwiLHJvdW5kOlwiNTAlXCIsbm9uZTpcIjBcIn0sdC5TaGFkb3c9e1t0LlNpemUuYmFzZV06XCIwIDRweCA0cHggcmdiYSgwLCAwLCAwLCAwLjI1KVwifSx0LkZvbnRGYW1pbHk9W1wiSW50ZXJcIixcInN5c3RlbS11aVwiLFwiQmxpbmtNYWNTeXN0ZW1Gb250XCIsXCJTZWdvZSBVSVwiLFwiUm9ib3RvXCIsXCJPeHlnZW4tU2Fuc1wiLFwiVWJ1bnR1XCIsXCJDYW50YXJlbGxcIixcIkhlbHZldGljYSBOZXVlXCIsXCJzYW5zLXNlcmlmXCJdLmpvaW4oXCIsXCIpLHQuRm9udFNpemU9e1t0LlNpemUueHNtYWxsXTpcIjhweFwiLFt0LlNpemUuc21hbGxdOlwiMTBweFwiLFt0LlNpemUuYmFzZV06XCIxMnB4XCIsW3QuU2l6ZS5sYXJnZV06XCIxNHB4XCIsW3QuU2l6ZS54bGFyZ2VdOlwiMTZweFwiLFt0LlNpemUueHhsYXJnZV06XCIxOHB4XCIsW3QuU2l6ZS54eHhsYXJnZV06XCIyMHB4XCIsW3QuU2l6ZS54eHh4bGFyZ2VdOlwiNDBweFwifSx0LkZvbnRXZWlnaHQ9e25vcm1hbDo0MDAsYm9sZDo2MDB9LHQuTGluZUhlaWdodD17dWk6MSxoZWFkaW5nOjEuMix0ZXh0OjEuNX0sdC5UcmFuc2l0aW9uPXtiYXNlOlwiMjAwbXMgY3ViaWMtYmV6aWVyKDAuMTYsIDEsIDAuMywgMSlcIixub25lOlwiMG1zXCJ9LHQuSWNvblNldD1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYSksbCksdC5JY29uU2l6ZT17W3QuU2l6ZS54c21hbGxdOnQuVW5pdFB4LnNtYWxsLFt0LlNpemUuc21hbGxdOnQuVW5pdFB4LmJhc2UsW3QuU2l6ZS5iYXNlXTpcIjE1cHhcIixbdC5TaXplLmxhcmdlXTp0LlVuaXRQeC54bGFyZ2UsW3QuU2l6ZS54bGFyZ2VdOnQuVW5pdFB4Lnh4bGFyZ2UsW3QuU2l6ZS54eGxhcmdlXTp0LlVuaXRQeC54eHhsYXJnZSxbdC5TaXplLnh4eGxhcmdlXTp0LlVuaXRQeC54eHh4bGFyZ2V9fSw5MjcyOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmNyZWF0ZUZvbnRGYWNlQ3NzPXZvaWQgMDtjb25zdCByPW4oNzUxOCksbz1uKDM0NzEpO3QuY3JlYXRlRm9udEZhY2VDc3M9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuY3NzYFxuICAgICR7ZS5yZWd1bGFyJiZyLmNzc2BcbiAgICAgIEBmb250LWZhY2Uge1xuICAgICAgICBmb250LWZhbWlseTogJ0ludGVyJztcbiAgICAgICAgc3JjOiB1cmwoJHtlLnJlZ3VsYXJ9KSBmb3JtYXQoJ3dvZmYyJyk7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiAke28uRm9udFdlaWdodC5ub3JtYWx9O1xuICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgICAgIGZvbnQtZGlzcGxheTogZmFsbGJhY2s7XG4gICAgICB9XG4gICAgYH1cbiAgICAke2UuaXRhbGljJiZyLmNzc2BcbiAgICAgIEBmb250LWZhY2Uge1xuICAgICAgICBmb250LWZhbWlseTogJ0ludGVyJztcbiAgICAgICAgc3JjOiB1cmwoJHtlLml0YWxpY30pIGZvcm1hdCgnd29mZjInKTtcbiAgICAgICAgZm9udC13ZWlnaHQ6ICR7by5Gb250V2VpZ2h0Lm5vcm1hbH07XG4gICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICAgICAgZm9udC1kaXNwbGF5OiBmYWxsYmFjaztcbiAgICAgIH1cbiAgICBgfVxuICAgICR7ZS5zZW1pQm9sZCYmci5jc3NgXG4gICAgICBAZm9udC1mYWNlIHtcbiAgICAgICAgZm9udC1mYW1pbHk6ICdJbnRlcic7XG4gICAgICAgIHNyYzogdXJsKCR7ZS5zZW1pQm9sZH0pIGZvcm1hdCgnd29mZjInKTtcbiAgICAgICAgZm9udC13ZWlnaHQ6ICR7by5Gb250V2VpZ2h0LmJvbGR9O1xuICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgICAgIGZvbnQtZGlzcGxheTogZmFsbGJhY2s7XG4gICAgICB9XG4gICAgYH1cbiAgICAke2Uuc2VtaUJvbGRJdGFsaWMmJnIuY3NzYFxuICAgICAgQGZvbnQtZmFjZSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnSW50ZXInO1xuICAgICAgICBzcmM6IHVybCgke2Uuc2VtaUJvbGRJdGFsaWN9KSBmb3JtYXQoJ3dvZmYyJyk7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiAke28uRm9udFdlaWdodC5ib2xkfTtcbiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgICAgICBmb250LWRpc3BsYXk6IGZhbGxiYWNrO1xuICAgICAgfVxuICAgIGB9XG4gIGB9fSw2NzE0OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmNyZWF0ZVRoZW1lPXZvaWQgMDtjb25zdCByPW4oMzQ3MSksbz1uKDk5ODQpLGk9big1NDU5KSxhPXtmb250RmFtaWx5OnIuRm9udEZhbWlseSxmb250U2l6ZTpyLkZvbnRTaXplLGZvbnRXZWlnaHQ6ci5Gb250V2VpZ2h0LGxpbmVIZWlnaHQ6ci5MaW5lSGVpZ2h0LGljb25TaXplOnIuSWNvblNpemUscmFkaXVzOnIuUmFkaXVzLHNoYWRvdzpyLlNoYWRvdyx0cmFuc2l0aW9uOnIuVHJhbnNpdGlvbix1bml0OnIuVW5pdCxweDpyLlVuaXRQeH0sbD0oZSx0KT0+KHtbYCR7ZX1BY3RpdmVgXTooMCxvLmRhcmtlbkNvbG9yKSh0LDIpLFtgJHtlfUhvdmVyYF06KDAsby5saWdodGVuQ29sb3IpKHQsNSksW2Ake2V9Rm9jdXNlZGBdOigwLG8uZ2V0TW9zdFJlYWRhYmxlKSh0LFtyLkNvbG9yLndoaXRlLHIuQ29sb3IuZGFya0dyYXk1XSksW2Ake2V9VGV4dGBdOigwLG8uZ2V0TW9zdFJlYWRhYmxlKSh0LFtyLkNvbG9yLndoaXRlLHIuQ29sb3IuZGFya0dyYXk1XSl9KTt0LmNyZWF0ZVRoZW1lPWU9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxhKSx7cGFsZXR0ZTpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSxsKGkuUGFsZXR0ZS5icmFuZFByaW1hcnksZS5icmFuZFByaW1hcnkpKSxsKGkuUGFsZXR0ZS5icmFuZFNlY29uZGFyeSxlLmJyYW5kU2Vjb25kYXJ5KSl9KX0sNTc1OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlNVUFBPUlRFRF9MQU5HVUFHRVM9dC5nZXRTdGF0dXNDb2xvcj10LmdldFJvb3RDc3NWYXJzPXQuZ2V0VmFyaWFudENTUz12b2lkIDA7Y29uc3Qgcj1uKDU0NTkpO3QuZ2V0VmFyaWFudENTUz0oZSx0KT0+bj0+ZVt0XVtuW3RdXSx0LmdldFJvb3RDc3NWYXJzPSh7dGhlbWU6ZX0pPT5PYmplY3Qua2V5cyhyLlBhbGV0dGUpLm1hcCgodD0+YC0tb3BlbmZpbi11aS0ke3R9OiAke2UucGFsZXR0ZVt0XX07YCkpLmpvaW4oXCJcXG5cIiksdC5nZXRTdGF0dXNDb2xvcj0oZSx0LG4pPT57c3dpdGNoKHQpe2Nhc2VcImFjdGl2ZVwiOnJldHVybiBlLnBhbGV0dGUuc3RhdHVzQWN0aXZlO2Nhc2VcImNyaXRpY2FsXCI6cmV0dXJuIGUucGFsZXR0ZS5zdGF0dXNDcml0aWNhbDtjYXNlXCJ3YXJuaW5nXCI6cmV0dXJuIGUucGFsZXR0ZS5zdGF0dXNXYXJuaW5nO2Nhc2VcInN1Y2Nlc3NcIjpyZXR1cm4gZS5wYWxldHRlLnN0YXR1c1N1Y2Nlc3M7ZGVmYXVsdDpyZXR1cm4gbj9lLnBhbGV0dGVbbl06XCJpbmhlcml0XCJ9fSx0LlNVUFBPUlRFRF9MQU5HVUFHRVM9W1wiZW4tVVNcIixcImphLUpQXCIsXCJ6aC1DTlwiLFwia28tS1JcIixcInJ1LVJVXCIsXCJkZS1ERVwiLFwiemgtSGFudFwiXX0sOTYzODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oOTk4NCksdCksbyhuKDM0NzEpLHQpLG8obig5MjcyKSx0KSxvKG4oNjcxNCksdCksbyhuKDU3NSksdCksbyhuKDE0NDEpLHQpLG8obig4NzMyKSx0KSxvKG4oNTQ1OSksdCksbyhuKDUzMTcpLHQpfSwxNDQxOihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LDg3MzI6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTWl4aW5zPXZvaWQgMDtjb25zdCByPW4oMzQ3MSksbz1uKDc1MTgpLGk9by5jc3NgXG4gIHVzZXItc2VsZWN0OiBub25lO1xuYCxhPW8uY3NzYFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbmAsbD1vLmNzc2BcbiAgJjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICAgIHdpZHRoOiB2YXIoLS1zY3JvbGxiYXJTaXplLCAke3IuVW5pdFB4LnhzbWFsbH0pO1xuICAgIGhlaWdodDogdmFyKC0tc2Nyb2xsYmFyU2l6ZSwgJHtyLlVuaXRQeC54c21hbGx9KTtcbiAgfVxuXG4gICY6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcbiAgICBiYWNrZ3JvdW5kOiAke3IuQ29sb3IubmV1dHJhbEdyYXk4MH07XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tc2Nyb2xsYmFyU2l6ZSwgJHtyLlVuaXRQeC54c21hbGx9KTtcbiAgICBvcGFjaXR5OiAwLjg7XG4gIH1cblxuICAmOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gICAgYmFja2dyb3VuZDogJHtyLkNvbG9yLndoaXRlODB9O1xuICAgIHdpZHRoOiB2YXIoLS1zY3JvbGxiYXJTaXplLCAke3IuVW5pdFB4LnhzbWFsbH0pO1xuICAgIGhlaWdodDogdmFyKC0tc2Nyb2xsYmFyU2l6ZSwgJHtyLlVuaXRQeC54c21hbGx9KTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1zY3JvbGxiYXJTaXplLCAke3IuVW5pdFB4LnhzbWFsbH0pO1xuICAgIG9wYWNpdHk6IDAuODtcbiAgfVxuYCxzPW8uY3NzYFxuICAtLXNjcm9sbGJhclNpemU6IDJweDtcbiAgJHtsfTtcbmAsYz1vLmNzc2BcbiAgLXdlYmtpdC1hcHAtcmVnaW9uOiBkcmFnO1xuYCx1PW8uY3NzYFxuICAtd2Via2l0LWFwcC1yZWdpb246IG5vLWRyYWc7XG5gO3QuTWl4aW5zPXtub1NlbGVjdDppLHRleHRPdmVyZmxvdzphLHNjcm9sbGJhcjp7W3IuU2l6ZS5iYXNlXTpsLFtyLlNpemUuc21hbGxdOnN9LGFwcFJlZ2lvbjp7ZHJhZzpjLG5vRHJhZzp1fX19LDU0NTk6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlBhbGV0dGU9dm9pZCAwLHQuUGFsZXR0ZT17YmFja2dyb3VuZDE6XCJiYWNrZ3JvdW5kMVwiLGJhY2tncm91bmQyOlwiYmFja2dyb3VuZDJcIixiYWNrZ3JvdW5kMzpcImJhY2tncm91bmQzXCIsYmFja2dyb3VuZDQ6XCJiYWNrZ3JvdW5kNFwiLGJhY2tncm91bmQ1OlwiYmFja2dyb3VuZDVcIixiYWNrZ3JvdW5kNjpcImJhY2tncm91bmQ2XCIsYnJhbmRQcmltYXJ5OlwiYnJhbmRQcmltYXJ5XCIsYnJhbmRTZWNvbmRhcnk6XCJicmFuZFNlY29uZGFyeVwiLGJyYW5kUHJpbWFyeUFjdGl2ZTpcImJyYW5kUHJpbWFyeUFjdGl2ZVwiLGJyYW5kUHJpbWFyeUhvdmVyOlwiYnJhbmRQcmltYXJ5SG92ZXJcIixicmFuZFByaW1hcnlGb2N1c2VkOlwiYnJhbmRQcmltYXJ5Rm9jdXNlZFwiLGJyYW5kUHJpbWFyeVRleHQ6XCJicmFuZFByaW1hcnlUZXh0XCIsYnJhbmRTZWNvbmRhcnlBY3RpdmU6XCJicmFuZFNlY29uZGFyeUFjdGl2ZVwiLGJyYW5kU2Vjb25kYXJ5SG92ZXI6XCJicmFuZFNlY29uZGFyeUhvdmVyXCIsYnJhbmRTZWNvbmRhcnlGb2N1c2VkOlwiYnJhbmRTZWNvbmRhcnlGb2N1c2VkXCIsYnJhbmRTZWNvbmRhcnlUZXh0OlwiYnJhbmRTZWNvbmRhcnlUZXh0XCIsaW5wdXRCYWNrZ3JvdW5kOlwiaW5wdXRCYWNrZ3JvdW5kXCIsaW5wdXRDb2xvcjpcImlucHV0Q29sb3JcIixpbnB1dFBsYWNlaG9sZGVyOlwiaW5wdXRQbGFjZWhvbGRlclwiLGlucHV0RGlzYWJsZWQ6XCJpbnB1dERpc2FibGVkXCIsaW5wdXRGb2N1c2VkOlwiaW5wdXRGb2N1c2VkXCIsaW5wdXRCb3JkZXI6XCJpbnB1dEJvcmRlclwiLHN0YXR1c1N1Y2Nlc3M6XCJzdGF0dXNTdWNjZXNzXCIsc3RhdHVzV2FybmluZzpcInN0YXR1c1dhcm5pbmdcIixzdGF0dXNDcml0aWNhbDpcInN0YXR1c0NyaXRpY2FsXCIsc3RhdHVzQWN0aXZlOlwic3RhdHVzQWN0aXZlXCIsdGV4dERlZmF1bHQ6XCJ0ZXh0RGVmYXVsdFwiLHRleHRIZWxwOlwidGV4dEhlbHBcIix0ZXh0SW5hY3RpdmU6XCJ0ZXh0SW5hY3RpdmVcIixib3JkZXJOZXV0cmFsOlwiYm9yZGVyTmV1dHJhbFwiLGNvbnRlbnRCYWNrZ3JvdW5kMTpcImNvbnRlbnRCYWNrZ3JvdW5kMVwiLGNvbnRlbnRCYWNrZ3JvdW5kMjpcImNvbnRlbnRCYWNrZ3JvdW5kMlwiLGNvbnRlbnRCYWNrZ3JvdW5kMzpcImNvbnRlbnRCYWNrZ3JvdW5kM1wiLGNvbnRlbnRCYWNrZ3JvdW5kNDpcImNvbnRlbnRCYWNrZ3JvdW5kNFwiLGNvbnRlbnRCYWNrZ3JvdW5kNTpcImNvbnRlbnRCYWNrZ3JvdW5kNVwiLGxpbmtEZWZhdWx0OlwibGlua0RlZmF1bHRcIixsaW5rSG92ZXI6XCJsaW5rSG92ZXJcIn19LDUzMTc6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0sNDI2NjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTtvJiYhKFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpfHwobz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG8pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oOTQ4MyksdCl9LDk0ODM6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuT3BlbkZpbkRhcmtUaGVtZT10Lk9wZW5GaW5MaWdodFRoZW1lPXZvaWQgMDtjb25zdCByPW4oNTQ1OSksbz1uKDM0NzEpLGk9big2NzE0KSxhPXtbci5QYWxldHRlLmJyYW5kUHJpbWFyeV06by5Db2xvci5vcGVuRmluLFtyLlBhbGV0dGUuc3RhdHVzU3VjY2Vzc106by5Db2xvci5mdW5jdGlvbmFsMSxbci5QYWxldHRlLnN0YXR1c1dhcm5pbmddOm8uQ29sb3IuZnVuY3Rpb25hbDEwLFtyLlBhbGV0dGUuc3RhdHVzQ3JpdGljYWxdOm8uQ29sb3IuZnVuY3Rpb25hbDcsW3IuUGFsZXR0ZS5zdGF0dXNBY3RpdmVdOm8uQ29sb3IuZnVuY3Rpb25hbDMsW3IuUGFsZXR0ZS5ib3JkZXJOZXV0cmFsXTpvLkNvbG9yLnNpbHZlckdyYXksW3IuUGFsZXR0ZS5jb250ZW50QmFja2dyb3VuZDFdOm8uQ29sb3Iub3BlbkZpbixbci5QYWxldHRlLmNvbnRlbnRCYWNrZ3JvdW5kMl06XCIjMDAwMDAwXCIsW3IuUGFsZXR0ZS5jb250ZW50QmFja2dyb3VuZDNdOlwiIzAwMDAwMFwiLFtyLlBhbGV0dGUuY29udGVudEJhY2tncm91bmQ0XTpcIiMwMDAwMDBcIixbci5QYWxldHRlLmNvbnRlbnRCYWNrZ3JvdW5kNV06XCIjMDAwMDAwXCIsW3IuUGFsZXR0ZS5saW5rRGVmYXVsdF06by5Db2xvci5mdW5jdGlvbmFsNCxbci5QYWxldHRlLmxpbmtIb3Zlcl06by5Db2xvci5mdW5jdGlvbmFsNX07dC5PcGVuRmluTGlnaHRUaGVtZT0oMCxpLmNyZWF0ZVRoZW1lKShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYSkse1tyLlBhbGV0dGUuYmFja2dyb3VuZDFdOm8uQ29sb3Iud2hpdGUsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kMl06by5Db2xvci5saWdodEdyYXkxLFtyLlBhbGV0dGUuYmFja2dyb3VuZDNdOm8uQ29sb3IubGlnaHRHcmF5Mixbci5QYWxldHRlLmJhY2tncm91bmQ0XTpvLkNvbG9yLmxpZ2h0R3JheTMsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kNV06by5Db2xvci5saWdodEdyYXkzLFtyLlBhbGV0dGUuYmFja2dyb3VuZDZdOm8uQ29sb3IubGlnaHRHcmF5NSxbci5QYWxldHRlLmJyYW5kU2Vjb25kYXJ5XTpvLkNvbG9yLmxpZ2h0R3JheTQsW3IuUGFsZXR0ZS5pbnB1dEJhY2tncm91bmRdOm8uQ29sb3IubGlnaHRHcmF5Myxbci5QYWxldHRlLmlucHV0Q29sb3JdOm8uQ29sb3IuZGFya0dyYXk1LFtyLlBhbGV0dGUuaW5wdXRQbGFjZWhvbGRlcl06by5Db2xvci5kYXJrR3JheTIsW3IuUGFsZXR0ZS5pbnB1dERpc2FibGVkXTpvLkNvbG9yLm5ldXRyYWxHcmF5LFtyLlBhbGV0dGUuaW5wdXRGb2N1c2VkXTpvLkNvbG9yLmxpZ2h0R3JheTUsW3IuUGFsZXR0ZS5pbnB1dEJvcmRlcl06by5Db2xvci5uZXV0cmFsR3JheSxbci5QYWxldHRlLnRleHREZWZhdWx0XTpvLkNvbG9yLmRhcmtHcmF5NSxbci5QYWxldHRlLnRleHRIZWxwXTpvLkNvbG9yLm5ldXRyYWxHcmF5LFtyLlBhbGV0dGUudGV4dEluYWN0aXZlXTpvLkNvbG9yLm5ldXRyYWxHcmF5fSkpLHQuT3BlbkZpbkRhcmtUaGVtZT0oMCxpLmNyZWF0ZVRoZW1lKShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYSkse1tyLlBhbGV0dGUuYmFja2dyb3VuZDFdOm8uQ29sb3IuZGFya0dyYXk2LFtyLlBhbGV0dGUuYmFja2dyb3VuZDJdOm8uQ29sb3IuZGFya0dyYXk1LFtyLlBhbGV0dGUuYmFja2dyb3VuZDNdOm8uQ29sb3IuZGFya0dyYXk0LFtyLlBhbGV0dGUuYmFja2dyb3VuZDRdOm8uQ29sb3IuZGFya0dyYXkzLFtyLlBhbGV0dGUuYmFja2dyb3VuZDVdOm8uQ29sb3IuZGFya0dyYXkyLFtyLlBhbGV0dGUuYmFja2dyb3VuZDZdOm8uQ29sb3IuZGFya0dyYXkxLFtyLlBhbGV0dGUuYnJhbmRTZWNvbmRhcnldOm8uQ29sb3IuZGFya0dyYXkyLFtyLlBhbGV0dGUuaW5wdXRCYWNrZ3JvdW5kXTpvLkNvbG9yLmRhcmtHcmF5MSxbci5QYWxldHRlLmlucHV0Q29sb3JdOm8uQ29sb3Iud2hpdGUsW3IuUGFsZXR0ZS5pbnB1dFBsYWNlaG9sZGVyXTpvLkNvbG9yLmxpZ2h0R3JheTUsW3IuUGFsZXR0ZS5pbnB1dERpc2FibGVkXTpvLkNvbG9yLm5ldXRyYWxHcmF5LFtyLlBhbGV0dGUuaW5wdXRGb2N1c2VkXTpvLkNvbG9yLmxpZ2h0R3JheTUsW3IuUGFsZXR0ZS5pbnB1dEJvcmRlcl06by5Db2xvci5uZXV0cmFsR3JheSxbci5QYWxldHRlLnRleHREZWZhdWx0XTpvLkNvbG9yLndoaXRlLFtyLlBhbGV0dGUudGV4dEhlbHBdOm8uQ29sb3IubGlnaHRHcmF5NSxbci5QYWxldHRlLnRleHRJbmFjdGl2ZV06by5Db2xvci5uZXV0cmFsR3JheX0pKX0sNDIwOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlRoZW1lUHJvdmlkZXI9dm9pZCAwO2NvbnN0IHI9big1ODkzKSxvPW4oNzUxOCksaT1uKDMxOTApLGE9big3MDg4KSxsPW4oMTA2OSkscz1uKDYyMTgpO3QuVGhlbWVQcm92aWRlcj0oe2NoaWxkcmVuOmUsdGhlbWVzOnQsc2NoZW1lOm49aS5Db2xvclNjaGVtZS5zeXN0ZW0sZm9udHM6Yz1zLkZvbnRzfSk9Pntjb25zdCB1PSgwLGEudXNlVGhlbWUpKHt0aGVtZXM6dCxzY2hlbWU6bn0pO3JldHVybigwLHIuanN4KShvLlRoZW1lUHJvdmlkZXIsT2JqZWN0LmFzc2lnbih7dGhlbWU6dX0se2NoaWxkcmVuOigwLHIuanN4cykoci5GcmFnbWVudCx7Y2hpbGRyZW46WygwLHIuanN4KShsLkdsb2JhbFN0eWxlcyx7Zm9udHM6Y30pLGVdfSl9KSl9fSwzODc3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obigxMDY5KSx0KSxvKG4oMTMxMCksdCksbyhuKDk1MDcpLHQpfSw5NzU4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNvbnRhY3RTdGF0dXNJY29uPXZvaWQgMDtjb25zdCBvPW4oNTg5MyksaT1yKG4oNzUxOCkpLGE9bigxMzMzKSxsPXthdmFpbGFibGU6KDAsby5qc3gpKGEuQ2hlY2tTVkcse30pLGF3YXk6KDAsby5qc3gpKGEuQnVzeVNWRyx7fSksXCJkby1ub3QtZGlzdHVyYlwiOigwLG8uanN4KShhLkRvTm90RGlzdHVyYlNWRyx7fSksb2ZmbGluZTooMCxvLmpzeCkoYS5PZmZsaW5lU1ZHLHt9KSxidXN5Om51bGx9O3QuQ29udGFjdFN0YXR1c0ljb249KHtvbmxpbmVTdGF0dXM6ZX0pPT5lPygwLG8uanN4KShzLE9iamVjdC5hc3NpZ24oe29ubGluZVN0YXR1czplfSx7Y2hpbGRyZW46bFtlXXx8bnVsbH0pKTpudWxsO2NvbnN0IHM9aS5kZWZhdWx0LmRpdmBcbiAgYm9yZGVyOiAxLjZweCBzb2xpZCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDF9O1xuXG4gIGJhY2tncm91bmQ6ICR7KHtvbmxpbmVTdGF0dXM6ZX0pPT5cImJ1c3lcIj09PWU/XCIjQzIxMzEzXCI6XCJ3aGl0ZVwifTtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuXG4gIGhlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5weC5sYXJnZX07XG4gIHdpZHRoOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmxhcmdlfTtcblxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDc4Ljk1JTtcbiAgcmlnaHQ6IC03LjAyJTtcbiAgdG9wOiA3Ny4xMiU7XG4gIGJvdHRvbTogLTQuMjQlO1xuYH0sMTMzMzooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5PZmZsaW5lU1ZHPXQuRG9Ob3REaXN0dXJiU1ZHPXQuQnVzeVNWRz10LkNoZWNrU1ZHPXZvaWQgMDtjb25zdCByPW4oNTg5Myk7dC5DaGVja1NWRz0oKT0+KDAsci5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNlwiLGhlaWdodDpcIjE2XCIsdmlld0JveDpcIjAgMCAxNiAxNlwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSx7Y2hpbGRyZW46KDAsci5qc3gpKFwicGF0aFwiLHtkOlwiTTggMEM4LjczNDM4IDAgOS40NDAxIDAuMDk2MzU0MiAxMC4xMTcyIDAuMjg5MDYzQzEwLjc5NDMgMC40ODE3NzEgMTEuNDI5NyAwLjc1MjYwNCAxMi4wMjM0IDEuMTAxNTZDMTIuNjE3MiAxLjQ1MDUyIDEzLjE1NjMgMS44Njk3OSAxMy42NDA2IDIuMzU5MzhDMTQuMTMwMiAyLjg0Mzc1IDE0LjU0OTUgMy4zODI4MSAxNC44OTg0IDMuOTc2NTZDMTUuMjQ3NCA0LjU3MDMxIDE1LjUxODIgNS4yMDU3MyAxNS43MTA5IDUuODgyODFDMTUuOTAzNiA2LjU1OTkgMTYgNy4yNjU2MyAxNiA4QzE2IDguNzI5MTcgMTUuOTAzNiA5LjQzNDkgMTUuNzEwOSAxMC4xMTcyQzE1LjUxODIgMTAuNzk0MyAxNS4yNDc0IDExLjQyOTcgMTQuODk4NCAxMi4wMjM0QzE0LjU0OTUgMTIuNjE3MiAxNC4xMzAyIDEzLjE1ODkgMTMuNjQwNiAxMy42NDg0QzEzLjE1NjMgMTQuMTMyOCAxMi42MTcyIDE0LjU0OTUgMTIuMDIzNCAxNC44OTg0QzExLjQyOTcgMTUuMjQ3NCAxMC43OTE3IDE1LjUxODIgMTAuMTA5NCAxNS43MTA5QzkuNDMyMjkgMTUuOTAzNiA4LjcyOTE3IDE2IDggMTZDNy4yNzA4MyAxNiA2LjU2NTEgMTUuOTAzNiA1Ljg4MjgxIDE1LjcxMDlDNS4yMDU3MyAxNS41MTgyIDQuNTcwMzEgMTUuMjQ3NCAzLjk3NjU2IDE0Ljg5ODRDMy4zODI4MSAxNC41NDk1IDIuODQxMTUgMTQuMTMyOCAyLjM1MTU2IDEzLjY0ODRDMS44NjcxOSAxMy4xNTg5IDEuNDUwNTIgMTIuNjE3MiAxLjEwMTU2IDEyLjAyMzRDMC43NTI2MDQgMTEuNDI5NyAwLjQ4MTc3MSAxMC43OTQzIDAuMjg5MDYzIDEwLjExNzJDMC4wOTYzNTQyIDkuNDM0OSAwIDguNzI5MTcgMCA4QzAgNy4yNzA4MyAwLjA5NjM1NDIgNi41Njc3MSAwLjI4OTA2MyA1Ljg5MDYzQzAuNDgxNzcxIDUuMjA4MzMgMC43NTI2MDQgNC41NzAzMSAxLjEwMTU2IDMuOTc2NTZDMS40NTA1MiAzLjM4MjgxIDEuODY3MTkgMi44NDM3NSAyLjM1MTU2IDIuMzU5MzhDMi44NDExNSAxLjg2OTc5IDMuMzgyODEgMS40NTA1MiAzLjk3NjU2IDEuMTAxNTZDNC41NzAzMSAwLjc1MjYwNCA1LjIwNTczIDAuNDgxNzcxIDUuODgyODEgMC4yODkwNjNDNi41NjUxIDAuMDk2MzU0MiA3LjI3MDgzIDAgOCAwWk0xMC42MzI4IDUuNjg3NUMxMC40MjQ1IDUuNjg3NSAxMC4yNDc0IDUuNzYwNDIgMTAuMTAxNiA1LjkwNjI1TDcuMjczNDQgOC43NUw2LjI2NTYzIDcuNzVDNi4xMTk3OSA3LjYwNDE3IDUuOTQ1MzEgNy41MzEyNSA1Ljc0MjE5IDcuNTMxMjVDNS42NDMyMyA3LjUzMTI1IDUuNTQ5NDggNy41NTIwOCA1LjQ2MDk0IDcuNTkzNzVDNS4zNzI0IDcuNjM1NDIgNS4yOTE2NyA3LjY5MjcxIDUuMjE4NzUgNy43NjU2M0M1LjE1MTA0IDcuODMzMzMgNS4wOTYzNSA3LjkxMTQ2IDUuMDU0NjkgOEM1LjAxMzAyIDguMDg4NTQgNC45OTIxOSA4LjE4MjI5IDQuOTkyMTkgOC4yODEyNUM0Ljk5MjE5IDguNDg5NTggNS4wNjUxIDguNjY2NjcgNS4yMTA5NCA4LjgxMjVMNi43NDIxOSAxMC4zNDM4QzYuODg4MDIgMTAuNDg5NiA3LjA2NTEgMTAuNTYyNSA3LjI3MzQ0IDEwLjU2MjVDNy40ODE3NyAxMC41NjI1IDcuNjU4ODUgMTAuNDg5NiA3LjgwNDY5IDEwLjM0MzhMMTEuMTY0MSA2Ljk2ODc1QzExLjMwOTkgNi44MjI5MiAxMS4zODI4IDYuNjQ1ODMgMTEuMzgyOCA2LjQzNzVDMTEuMzgyOCA2LjMzODU0IDExLjM2MiA2LjI0NDc5IDExLjMyMDMgNi4xNTYyNUMxMS4yNzg2IDYuMDY3NzEgMTEuMjIxNCA1Ljk4OTU4IDExLjE0ODQgNS45MjE4OEMxMS4wODA3IDUuODQ4OTYgMTEuMDAyNiA1Ljc5MTY3IDEwLjkxNDEgNS43NUMxMC44MjU1IDUuNzA4MzMgMTAuNzMxOCA1LjY4NzUgMTAuNjMyOCA1LjY4NzVaXCIsZmlsbDpcIiMyMDc3MzVcIn0pfSkpLHQuQnVzeVNWRz0oKT0+KDAsci5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNlwiLGhlaWdodDpcIjE3XCIsdmlld0JveDpcIjAgMCAxNiAxN1wiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSx7Y2hpbGRyZW46KDAsci5qc3gpKFwicGF0aFwiLHtkOlwiTTggMC43OTAyMzdDOC43MzQzOCAwLjc5MDIzNyA5LjQ0MDEgMC44ODY1OTIgMTAuMTE3MiAxLjA3OTNDMTAuNzk0MyAxLjI3MjAxIDExLjQyOTcgMS41NDI4NCAxMi4wMjM0IDEuODkxOEMxMi42MTcyIDIuMjQwNzYgMTMuMTU2MyAyLjY2MDAzIDEzLjY0MDYgMy4xNDk2MUMxNC4xMzAyIDMuNjMzOTkgMTQuNTQ5NSA0LjE3MzA1IDE0Ljg5ODQgNC43NjY4QzE1LjI0NzQgNS4zNjA1NSAxNS41MTgyIDUuOTk1OTcgMTUuNzEwOSA2LjY3MzA1QzE1LjkwMzYgNy4zNTAxMyAxNiA4LjA1NTg2IDE2IDguNzkwMjRDMTYgOS41MTk0IDE1LjkwMzYgMTAuMjI1MSAxNS43MTA5IDEwLjkwNzRDMTUuNTE4MiAxMS41ODQ1IDE1LjI0NzQgMTIuMjE5OSAxNC44OTg0IDEyLjgxMzdDMTQuNTQ5NSAxMy40MDc0IDE0LjEzMDIgMTMuOTQ5MSAxMy42NDA2IDE0LjQzODdDMTMuMTU2MyAxNC45MjMxIDEyLjYxNzIgMTUuMzM5NyAxMi4wMjM0IDE1LjY4ODdDMTEuNDI5NyAxNi4wMzc2IDEwLjc5MTcgMTYuMzA4NSAxMC4xMDk0IDE2LjUwMTJDOS40MzIyOSAxNi42OTM5IDguNzI5MTcgMTYuNzkwMiA4IDE2Ljc5MDJDNy4yNzA4MyAxNi43OTAyIDYuNTY1MSAxNi42OTM5IDUuODgyODEgMTYuNTAxMkM1LjIwNTczIDE2LjMwODUgNC41NzAzMSAxNi4wMzc2IDMuOTc2NTYgMTUuNjg4N0MzLjM4MjgxIDE1LjMzOTcgMi44NDExNSAxNC45MjMxIDIuMzUxNTYgMTQuNDM4N0MxLjg2NzE5IDEzLjk0OTEgMS40NTA1MiAxMy40MDc0IDEuMTAxNTYgMTIuODEzN0MwLjc1MjYwNCAxMi4yMTk5IDAuNDgxNzcxIDExLjU4NDUgMC4yODkwNjMgMTAuOTA3NEMwLjA5NjM1NDIgMTAuMjI1MSAwIDkuNTE5NCAwIDguNzkwMjRDMCA4LjA2MTA3IDAuMDk2MzU0MiA3LjM1Nzk1IDAuMjg5MDYzIDYuNjgwODZDMC40ODE3NzEgNS45OTg1NyAwLjc1MjYwNCA1LjM2MDU1IDEuMTAxNTYgNC43NjY4QzEuNDUwNTIgNC4xNzMwNSAxLjg2NzE5IDMuNjMzOTkgMi4zNTE1NiAzLjE0OTYxQzIuODQxMTUgMi42NjAwMyAzLjM4MjgxIDIuMjQwNzYgMy45NzY1NiAxLjg5MThDNC41NzAzMSAxLjU0Mjg0IDUuMjA1NzMgMS4yNzIwMSA1Ljg4MjgxIDEuMDc5M0M2LjU2NTEgMC44ODY1OTIgNy4yNzA4MyAwLjc5MDIzNyA4IDAuNzkwMjM3Wk03LjMyMDMxIDQuMDQ4MDVDNy4yMTA5NCA0LjA0ODA1IDcuMTA2NzcgNC4wNzE0OSA3LjAwNzgxIDQuMTE4MzZDNi45MTQwNiA0LjE2MDAzIDYuODI4MTMgNC4yMTk5MiA2Ljc1IDQuMjk4MDVDNi42NzcwOCA0LjM3MDk3IDYuNjE3MTkgNC40NTY5IDYuNTcwMzEgNC41NTU4NkM2LjUyODY1IDQuNjQ5NjEgNi41MDc4MSA0Ljc1MTE3IDYuNTA3ODEgNC44NjA1NVY5LjE5NjQ5QzYuNTA3ODEgOS4zMDU4NiA2LjUyODY1IDkuNDEyNjMgNi41NzAzMSA5LjUxNjhDNi42MTE5OCA5LjYyMDk3IDYuNjcxODggOS43MTIxMSA2Ljc1IDkuNzkwMjRMOS4xODc1IDEyLjIxMjFDOS4zNDg5NiAxMi4zNzM2IDkuNTQxNjcgMTIuNDU0MyA5Ljc2NTYzIDEyLjQ1NDNDOS44NzUgMTIuNDU0MyA5Ljk3OTE3IDEyLjQzMzUgMTAuMDc4MSAxMi4zOTE4QzEwLjE3NzEgMTIuMzQ0OSAxMC4yNjMgMTIuMjg1IDEwLjMzNTkgMTIuMjEyMUMxMC40MDg5IDEyLjEzNCAxMC40NjYxIDEyLjA0NTQgMTAuNTA3OCAxMS45NDY1QzEwLjU1NDcgMTEuODQ3NSAxMC41NzgxIDExLjc0MzQgMTAuNTc4MSAxMS42MzRDMTAuNTc4MSAxMS41Mjk4IDEwLjU1NDcgMTEuNDI4MyAxMC41MDc4IDExLjMyOTNDMTAuNDY2MSAxMS4yMjUxIDEwLjQwODkgMTEuMTM2NiAxMC4zMzU5IDExLjA2MzdMOC4xMzI4MSA4Ljg3NjE4VjQuODYwNTVDOC4xMzI4MSA0Ljc1MTE3IDguMTA5MzggNC42NDcwMSA4LjA2MjUgNC41NDgwNUM4LjAyMDgzIDQuNDQ5MDkgNy45NjM1NCA0LjM2MzE1IDcuODkwNjMgNC4yOTAyNEM3LjgxNzcxIDQuMjE3MzIgNy43MzE3NyA0LjE2MDAzIDcuNjMyODEgNC4xMTgzNkM3LjUzMzg1IDQuMDcxNDkgNy40Mjk2OSA0LjA0ODA1IDcuMzIwMzEgNC4wNDgwNVpcIixmaWxsOlwiI0ZFOUY0RFwifSl9KSksdC5Eb05vdERpc3R1cmJTVkc9KCk9PigwLHIuanN4KShcInN2Z1wiLE9iamVjdC5hc3NpZ24oe3dpZHRoOlwiMTZcIixoZWlnaHQ6XCIxN1wiLHZpZXdCb3g6XCIwIDAgMTYgMTdcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0se2NoaWxkcmVuOigwLHIuanN4KShcInBhdGhcIix7ZDpcIk04IDAuNTkwMjU2QzguNzM0MzggMC41OTAyNTYgOS40NDAxIDAuNjg2NjEgMTAuMTE3MiAwLjg3OTMxOEMxMC43OTQzIDEuMDcyMDMgMTEuNDI5NyAxLjM0Mjg2IDEyLjAyMzQgMS42OTE4MkMxMi42MTcyIDIuMDQwNzggMTMuMTU2MiAyLjQ2MDA1IDEzLjY0MDYgMi45NDk2M0MxNC4xMzAyIDMuNDM0MDEgMTQuNTQ5NSAzLjk3MzA3IDE0Ljg5ODQgNC41NjY4MkMxNS4yNDc0IDUuMTYwNTcgMTUuNTE4MiA1Ljc5NTk4IDE1LjcxMDkgNi40NzMwN0MxNS45MDM2IDcuMTUwMTUgMTYgNy44NTU4OCAxNiA4LjU5MDI2QzE2IDkuMzE5NDIgMTUuOTAzNiAxMC4wMjUyIDE1LjcxMDkgMTAuNzA3NEMxNS41MTgyIDExLjM4NDUgMTUuMjQ3NCAxMi4wMTk5IDE0Ljg5ODQgMTIuNjEzN0MxNC41NDk1IDEzLjIwNzQgMTQuMTMwMiAxMy43NDkxIDEzLjY0MDYgMTQuMjM4N0MxMy4xNTYyIDE0LjcyMzEgMTIuNjE3MiAxNS4xMzk3IDEyLjAyMzQgMTUuNDg4N0MxMS40Mjk3IDE1LjgzNzcgMTAuNzkxNyAxNi4xMDg1IDEwLjEwOTQgMTYuMzAxMkM5LjQzMjI5IDE2LjQ5MzkgOC43MjkxNyAxNi41OTAzIDggMTYuNTkwM0M3LjI3MDgzIDE2LjU5MDMgNi41NjUxIDE2LjQ5MzkgNS44ODI4MSAxNi4zMDEyQzUuMjA1NzMgMTYuMTA4NSA0LjU3MDMxIDE1LjgzNzcgMy45NzY1NiAxNS40ODg3QzMuMzgyODEgMTUuMTM5NyAyLjg0MTE1IDE0LjcyMzEgMi4zNTE1NiAxNC4yMzg3QzEuODY3MTkgMTMuNzQ5MSAxLjQ1MDUyIDEzLjIwNzQgMS4xMDE1NiAxMi42MTM3QzAuNzUyNjA0IDEyLjAxOTkgMC40ODE3NzEgMTEuMzg0NSAwLjI4OTA2MiAxMC43MDc0QzAuMDk2MzU0MiAxMC4wMjUyIDAgOS4zMTk0MiAwIDguNTkwMjZDMCA3Ljg2MTA5IDAuMDk2MzU0MiA3LjE1Nzk2IDAuMjg5MDYyIDYuNDgwODhDMC40ODE3NzEgNS43OTg1OSAwLjc1MjYwNCA1LjE2MDU3IDEuMTAxNTYgNC41NjY4MkMxLjQ1MDUyIDMuOTczMDcgMS44NjcxOSAzLjQzNDAxIDIuMzUxNTYgMi45NDk2M0MyLjg0MTE1IDIuNDYwMDUgMy4zODI4MSAyLjA0MDc4IDMuOTc2NTYgMS42OTE4MkM0LjU3MDMxIDEuMzQyODYgNS4yMDU3MyAxLjA3MjAzIDUuODgyODEgMC44NzkzMThDNi41NjUxIDAuNjg2NjEgNy4yNzA4MyAwLjU5MDI1NiA4IDAuNTkwMjU2Wk01LjQ3NjU2IDcuNzQ2NTFDNS4zNjcxOSA3Ljc0NjUxIDUuMjYwNDIgNy43Njk5NCA1LjE1NjI1IDcuODE2ODJDNS4wNTcyOSA3Ljg2MzY5IDQuOTY4NzUgNy45MjYxOSA0Ljg5MDYyIDguMDA0MzJDNC44MTI1IDguMDgyNDQgNC43NSA4LjE3MzU5IDQuNzAzMTIgOC4yNzc3NkM0LjY1NjI1IDguMzc2NzEgNC42MzI4MSA4LjQ4MDg4IDQuNjMyODEgOC41OTAyNkM0LjYzMjgxIDguNjk5NjMgNC42NTYyNSA4LjgwNjQgNC43MDMxMiA4LjkxMDU3QzQuNzUgOS4wMDk1MyA0LjgxMjUgOS4wOTgwNyA0Ljg5MDYyIDkuMTc2MTlDNC45Njg3NSA5LjI1NDMyIDUuMDU3MjkgOS4zMTY4MiA1LjE1NjI1IDkuMzYzNjlDNS4yNjA0MiA5LjQxMDU3IDUuMzY3MTkgOS40MzQwMSA1LjQ3NjU2IDkuNDM0MDFIMTAuNTIzNEMxMC42MzI4IDkuNDM0MDEgMTAuNzM3IDkuNDEwNTcgMTAuODM1OSA5LjM2MzY5QzEwLjk0MDEgOS4zMTY4MiAxMS4wMzEyIDkuMjU0MzIgMTEuMTA5NCA5LjE3NjE5QzExLjE4NzUgOS4wOTgwNyAxMS4yNSA5LjAwOTUzIDExLjI5NjkgOC45MTA1N0MxMS4zNDM4IDguODA2NCAxMS4zNjcyIDguNjk5NjMgMTEuMzY3MiA4LjU5MDI2QzExLjM2NzIgOC40ODA4OCAxMS4zNDM4IDguMzc2NzEgMTEuMjk2OSA4LjI3Nzc2QzExLjI1IDguMTczNTkgMTEuMTg3NSA4LjA4MjQ0IDExLjEwOTQgOC4wMDQzMkMxMS4wMzEyIDcuOTI2MTkgMTAuOTQwMSA3Ljg2MzY5IDEwLjgzNTkgNy44MTY4MkMxMC43MzcgNy43Njk5NCAxMC42MzI4IDcuNzQ2NTEgMTAuNTIzNCA3Ljc0NjUxSDUuNDc2NTZaXCIsZmlsbDpcIiNDMjEzMTNcIn0pfSkpLHQuT2ZmbGluZVNWRz0oKT0+KDAsci5qc3gpKFwic3ZnXCIsT2JqZWN0LmFzc2lnbih7d2lkdGg6XCIxNlwiLGhlaWdodDpcIjE3XCIsdmlld0JveDpcIjAgMCAxNiAxN1wiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSx7Y2hpbGRyZW46KDAsci5qc3gpKFwicGF0aFwiLHtkOlwiTTggMC45OTAyNTJDOC43MzQzOCAwLjk5MDI1MiA5LjQ0MDEgMS4wODY2MSAxMC4xMTcyIDEuMjc5MzFDMTAuNzk0MyAxLjQ3MjAyIDExLjQyOTcgMS43NDI4NiAxMi4wMjM0IDIuMDkxODFDMTIuNjE3MiAyLjQ0MDc3IDEzLjE1NjIgMi44NjAwNCAxMy42NDA2IDMuMzQ5NjNDMTQuMTMwMiAzLjgzNCAxNC41NDk1IDQuMzczMDYgMTQuODk4NCA0Ljk2NjgxQzE1LjI0NzQgNS41NjA1NiAxNS41MTgyIDYuMTk1OTggMTUuNzEwOSA2Ljg3MzA2QzE1LjkwMzYgNy41NTAxNSAxNiA4LjI1NTg4IDE2IDguOTkwMjVDMTYgOS43MTk0MiAxNS45MDM2IDEwLjQyNTEgMTUuNzEwOSAxMS4xMDc0QzE1LjUxODIgMTEuNzg0NSAxNS4yNDc0IDEyLjQxOTkgMTQuODk4NCAxMy4wMTM3QzE0LjU0OTUgMTMuNjA3NCAxNC4xMzAyIDE0LjE0OTEgMTMuNjQwNiAxNC42Mzg3QzEzLjE1NjIgMTUuMTIzMSAxMi42MTcyIDE1LjUzOTcgMTIuMDIzNCAxNS44ODg3QzExLjQyOTcgMTYuMjM3NiAxMC43OTE3IDE2LjUwODUgMTAuMTA5NCAxNi43MDEyQzkuNDMyMjkgMTYuODkzOSA4LjcyOTE3IDE2Ljk5MDMgOCAxNi45OTAzQzcuMjcwODMgMTYuOTkwMyA2LjU2NTEgMTYuODkzOSA1Ljg4MjgxIDE2LjcwMTJDNS4yMDU3MyAxNi41MDg1IDQuNTcwMzEgMTYuMjM3NiAzLjk3NjU2IDE1Ljg4ODdDMy4zODI4MSAxNS41Mzk3IDIuODQxMTUgMTUuMTIzMSAyLjM1MTU2IDE0LjYzODdDMS44NjcxOSAxNC4xNDkxIDEuNDUwNTIgMTMuNjA3NCAxLjEwMTU2IDEzLjAxMzdDMC43NTI2MDQgMTIuNDE5OSAwLjQ4MTc3MSAxMS43ODQ1IDAuMjg5MDYyIDExLjEwNzRDMC4wOTYzNTQyIDEwLjQyNTEgMCA5LjcxOTQyIDAgOC45OTAyNUMwIDguMjYxMDkgMC4wOTYzNTQyIDcuNTU3OTYgMC4yODkwNjIgNi44ODA4OEMwLjQ4MTc3MSA2LjE5ODU5IDAuNzUyNjA0IDUuNTYwNTYgMS4xMDE1NiA0Ljk2NjgxQzEuNDUwNTIgNC4zNzMwNiAxLjg2NzE5IDMuODM0IDIuMzUxNTYgMy4zNDk2M0MyLjg0MTE1IDIuODYwMDQgMy4zODI4MSAyLjQ0MDc3IDMuOTc2NTYgMi4wOTE4MUM0LjU3MDMxIDEuNzQyODYgNS4yMDU3MyAxLjQ3MjAyIDUuODgyODEgMS4yNzkzMUM2LjU2NTEgMS4wODY2MSA3LjI3MDgzIDAuOTkwMjUyIDggMC45OTAyNTJaTTggMi42Nzc3NUM3LjQyMTg4IDIuNjc3NzUgNi44NjQ1OCAyLjc1MzI3IDYuMzI4MTIgMi45MDQzMUM1Ljc5MTY3IDMuMDU1MzYgNS4yODkwNiAzLjI2ODkgNC44MjAzMSAzLjU0NDk0QzQuMzUxNTYgMy44MjA5OCAzLjkyNDQ4IDQuMTUxNzEgMy41MzkwNiA0LjUzNzEzQzMuMTU4ODUgNC45MTczNCAyLjgzMDczIDUuMzQxODEgMi41NTQ2OSA1LjgxMDU2QzIuMjc4NjUgNi4yNzkzMSAyLjA2NTEgNi43ODE5MiAxLjkxNDA2IDcuMzE4MzhDMS43NjMwMiA3Ljg1NDg0IDEuNjg3NSA4LjQxMjEzIDEuNjg3NSA4Ljk5MDI1QzEuNjg3NSA5LjU2ODM4IDEuNzYzMDIgMTAuMTI1NyAxLjkxNDA2IDEwLjY2MjFDMi4wNjUxIDExLjE5ODYgMi4yNzg2NSAxMS43MDEyIDIuNTU0NjkgMTIuMTY5OUMyLjgzMDczIDEyLjYzODcgMy4xNTg4NSAxMy4wNjU4IDMuNTM5MDYgMTMuNDUxMkMzLjkyNDQ4IDEzLjgzMTQgNC4zNTE1NiAxNC4xNTk1IDQuODIwMzEgMTQuNDM1NkM1LjI4OTA2IDE0LjcxMTYgNS43OTE2NyAxNC45MjUxIDYuMzI4MTIgMTUuMDc2MkM2Ljg2NDU4IDE1LjIyNzIgNy40MjE4OCAxNS4zMDI4IDggMTUuMzAyOEM4LjU3ODEyIDE1LjMwMjggOS4xMzU0MiAxNS4yMjcyIDkuNjcxODggMTUuMDc2MkMxMC4yMDgzIDE0LjkyNTEgMTAuNzEwOSAxNC43MTE2IDExLjE3OTcgMTQuNDM1NkMxMS42NDg0IDE0LjE1OTUgMTIuMDcyOSAxMy44MzE0IDEyLjQ1MzEgMTMuNDUxMkMxMi44Mzg1IDEzLjA2NTggMTMuMTY5MyAxMi42Mzg3IDEzLjQ0NTMgMTIuMTY5OUMxMy43MjE0IDExLjcwMTIgMTMuOTM0OSAxMS4xOTg2IDE0LjA4NTkgMTAuNjYyMUMxNC4yMzcgMTAuMTI1NyAxNC4zMTI1IDkuNTY4MzggMTQuMzEyNSA4Ljk5MDI1QzE0LjMxMjUgOC40MTIxMyAxNC4yMzcgNy44NTQ4NCAxNC4wODU5IDcuMzE4MzhDMTMuOTM0OSA2Ljc4MTkyIDEzLjcyMTQgNi4yNzkzMSAxMy40NDUzIDUuODEwNTZDMTMuMTY5MyA1LjM0MTgxIDEyLjgzODUgNC45MTczNCAxMi40NTMxIDQuNTM3MTNDMTIuMDcyOSA0LjE1MTcxIDExLjY0ODQgMy44MjA5OCAxMS4xNzk3IDMuNTQ0OTRDMTAuNzEwOSAzLjI2ODkgMTAuMjA4MyAzLjA1NTM2IDkuNjcxODggMi45MDQzMUM5LjEzNTQyIDIuNzUzMjcgOC41NzgxMiAyLjY3Nzc1IDggMi42Nzc3NVpcIixmaWxsOlwiIzk3OTc5N1wifSl9KSl9LDM0Mjk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImRlZmF1bHRcIix7ZW51bWVyYWJsZTohMCx2YWx1ZTp0fSl9OmZ1bmN0aW9uKGUsdCl7ZS5kZWZhdWx0PXR9KSxpPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIiE9PW4mJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZyKHQsZSxuKTtyZXR1cm4gbyh0LGUpLHR9LGE9dGhpcyYmdGhpcy5fX3Jlc3R8fGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKX1yZXR1cm4gbn0sbD10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNvbnRhY3RDYXJkPXZvaWQgMDtjb25zdCBzPW4oNTg5MyksYz1pKG4oNjY4OSkpLHU9bChuKDc1MTgpKSxmPW4oNTM3NyksZD1uKDc0NDQpLHA9big5NzU4KSxoPW4oODgzMik7dC5Db250YWN0Q2FyZD1lPT57dmFye25hbWU6dCx0aXRsZTpuLHBob3RvVXJsOnIsdXNlSW5pdGlhbHM6bz0hMSxkZXRhaWxzOmksb25saW5lU3RhdHVzOmx9PWUsdT1hKGUsW1wibmFtZVwiLFwidGl0bGVcIixcInBob3RvVXJsXCIsXCJ1c2VJbml0aWFsc1wiLFwiZGV0YWlsc1wiLFwib25saW5lU3RhdHVzXCJdKTtjb25zdCBmPXJ8fG8sRT0oMCxjLnVzZU1lbW8pKCgoKT0+KDAsZC5nZXRJbml0aWFscykodCkpLFt0XSksUz0oMCxjLnVzZU1lbW8pKCgoKT0+KDAsaC5nZW5lcmF0ZUNvbG9yRnJvbVN0cmluZykodCkpLFt0XSksaj0oMCxjLmNyZWF0ZVJlZikoKTtyZXR1cm4oMCxjLnVzZUVmZmVjdCkoKCgpPT57dmFyIGU7bnVsbD09PShlPWouY3VycmVudCl8fHZvaWQgMD09PWV8fGUuc2Nyb2xsVG8oMCwwKX0pKSwoMCxzLmpzeHMpKGcsT2JqZWN0LmFzc2lnbih7fSx1LHtjaGlsZHJlbjpbKDAscy5qc3hzKSh2LHtjaGlsZHJlbjpbZiYmKDAscy5qc3hzKShtLE9iamVjdC5hc3NpZ24oe2ljb25Db2xvcjpTfSx7Y2hpbGRyZW46W3I/KDAscy5qc3gpKHkse2FsdDpuLHNyYzpyfSk6KDAscy5qc3gpKEMse2NoaWxkcmVuOkV9KSwoMCxzLmpzeCkocC5Db250YWN0U3RhdHVzSWNvbix7b25saW5lU3RhdHVzOmx9KV19KSksKDAscy5qc3hzKSh3LHtjaGlsZHJlbjpbKDAscy5qc3hzKShiLHtjaGlsZHJlbjpbXCIgXCIsdCxcIiBcIl19KSxuJiYoMCxzLmpzeHMpKHgse2NoaWxkcmVuOltcIiBcIixuLFwiIFwiXX0pXX0pXX0pLCgwLHMuanN4KShPLHt9KSwoMCxzLmpzeCkoXyxPYmplY3QuYXNzaWduKHtyZWY6an0se2NoaWxkcmVuOihudWxsPT1pP3ZvaWQgMDppLmxlbmd0aCk+MD9pLm1hcCgoKGUsbik9PigwLHMuanN4cykoYy5kZWZhdWx0LkZyYWdtZW50LHtjaGlsZHJlbjpbKDAscy5qc3gpKEwse2RlZmluaXRpb25zOmV9KSxuPGkubGVuZ3RoLTEmJigwLHMuanN4KShPLHtwYWRkaW5nOiEwfSldfSxgJHt0fS1kZXRhaWxzLSR7bn1gKSkpOigwLHMuanN4KShcInBcIix7Y2hpbGRyZW46XCJObyBpbmZvcm1hdGlvbiBhdmFpbGFibGUuXCJ9KX0pKV19KSl9O2NvbnN0IGc9dS5kZWZhdWx0LmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgaGVpZ2h0OiAxMDAlO1xuYCx2PXUuZGVmYXVsdC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBhZGRpbmctYm90dG9tOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmxhcmdlfTtcbmAsbT11LmRlZmF1bHQuZGl2YFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke2U9PmUuaWNvbkNvbG9yfTtcbiAgYm9yZGVyLXJhZGl1czogJHsoe3RoZW1lOmV9KT0+ZS5weC54c21hbGx9O1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblxuICBoZWlnaHQ6IDYwcHg7XG4gIHdpZHRoOiA2MHB4O1xuXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbmAsQz11LmRlZmF1bHQuc3BhbmBcbiAgZm9udC1zaXplOiAyNHB4O1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuYCx5PXUuZGVmYXVsdC5pbWdgXG4gIGJvcmRlci1yYWRpdXM6ICR7KHt0aGVtZTplfSk9PmUucHgueHNtYWxsfTtcbiAgb2JqZWN0LWZpdDogY292ZXI7XG4gIHVzZXItc2VsZWN0OiBub25lO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHdpZHRoOiAxMDAlO1xuYCx3PXUuZGVmYXVsdC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgbWluLXdpZHRoOiAwO1xuICBtYXJnaW4tbGVmdDogJHsoe3RoZW1lOmV9KT0+ZS5weC5iYXNlfTtcbmAsYj11LmRlZmF1bHQuc3BhbmBcbiAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZX0pPT5lLmZvbnRTaXplLmxhcmdlfTtcbiAgbGluZS1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUucHgubGFyZ2V9O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBwYWRkaW5nLWJvdHRvbTogJHsoe3RoZW1lOmV9KT0+ZS5weC54c21hbGx9O1xuICBmb250LXdlaWdodDogJHsoe3RoZW1lOmV9KT0+ZS5mb250V2VpZ2h0LmJvbGR9O1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbmAseD11LmRlZmF1bHQuc3BhbmBcbiAgY29sb3I6ICR7KHt0aGVtZTplfSk9PmUucGFsZXR0ZS50ZXh0SGVscH07XG4gIGxpbmUtaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBwYWRkaW5nLWJvdHRvbTogMnB4O1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbmAsXz11LmRlZmF1bHQuZGl2YFxuICBib3JkZXItcmFkaXVzOiAycHg7XG4gIGZsZXg6IDE7XG4gIG1hcmdpbi10b3A6ICR7KHt0aGVtZTplfSk9PmUucHgubGFyZ2V9O1xuICBtYXJnaW4tYm90dG9tOiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuICBwYWRkaW5nLXJpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLnB4LmJhc2V9O1xuICBvdmVyZmxvdy15OiBhdXRvO1xuYCxPPXUuZGVmYXVsdC5kaXZgXG4gIGJvcmRlci1ib3R0b206IHNvbGlkIDFweCAkeyh7dGhlbWU6ZX0pPT5lLnBhbGV0dGUuYmFja2dyb3VuZDZ9O1xuICBtYXJnaW4tYm90dG9tOiAkeyh7dGhlbWU6ZSxwYWRkaW5nOnR9KT0+dCYmZS5weC5iYXNlfTtcbmAsTD0oMCx1LmRlZmF1bHQpKGYuRGVmaW5pdGlvbkxpc3QpYFxuICBkdCB7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcbiAgfVxuXG4gIGRkIHtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cbmB9LDMxODg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDM0MjkpLHQpfSw3NDQ0OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5nZXRJbml0aWFscz12b2lkIDAsdC5nZXRJbml0aWFscz1lPT57Y29uc3QgdD1lLnRyaW0oKSxuPXQubGFzdEluZGV4T2YoXCIgXCIpO3JldHVybiBuPi0xP1t0LmNoYXJBdCgwKSx0LmNoYXJBdChuKzEpXS5qb2luKFwiXCIpOnQuc2xpY2UoMCwyKX19LDE5OTY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19yZXN0fHxmdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59LG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5INj10Lkg1PXQuSDQ9dC5IMz10LkgyPXQuSDE9dC5IZWFkaW5nPXQuZGVmYXVsdFNpemU9dm9pZCAwO2NvbnN0IGk9big1ODkzKSxhPW8obig3NTE4KSksbD1uKDM0NzEpLHM9big3NzY5KTt0LmRlZmF1bHRTaXplPXtoMTpsLlNpemUueHh4bGFyZ2UsaDI6bC5TaXplLnh4bGFyZ2UsaDM6bC5TaXplLnhsYXJnZSxoNDpsLlNpemUubGFyZ2UsaDU6bC5TaXplLmJhc2UsaDY6bC5TaXplLnNtYWxsfSx0LkhlYWRpbmc9ZT0+e3ZhcntsZXZlbDpuPTEsY2xhc3NOYW1lOm99PWUsYT1yKGUsW1wibGV2ZWxcIixcImNsYXNzTmFtZVwiXSk7Y29uc3QgbD1gaCR7bn1gO3JldHVybigwLGkuanN4KShjLE9iamVjdC5hc3NpZ24oe2NsYXNzTmFtZTpvLGFzOmwsc2l6ZTp0LmRlZmF1bHRTaXplW2xdLHdlaWdodDpcImJvbGRcIn0sYSkpfTtjb25zdCBjPSgwLGEuZGVmYXVsdCkocy5UZXh0KWBcbiAgbGluZS1oZWlnaHQ6ICR7KHt0aGVtZTplfSk9PmUubGluZUhlaWdodC5oZWFkaW5nfTtcbmA7dC5IMT0oMCxhLmRlZmF1bHQpKHQuSGVhZGluZykuYXR0cnMoKGU9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7bGV2ZWw6MX0pKSlgYCx0LkgyPSgwLGEuZGVmYXVsdCkodC5IZWFkaW5nKS5hdHRycygoZT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtsZXZlbDoyfSkpKWBgLHQuSDM9KDAsYS5kZWZhdWx0KSh0LkhlYWRpbmcpLmF0dHJzKChlPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse2xldmVsOjN9KSkpYGAsdC5IND0oMCxhLmRlZmF1bHQpKHQuSGVhZGluZykuYXR0cnMoKGU9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7bGV2ZWw6NH0pKSlgYCx0Lkg1PSgwLGEuZGVmYXVsdCkodC5IZWFkaW5nKS5hdHRycygoZT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtsZXZlbDo1fSkpKWBgLHQuSDY9KDAsYS5kZWZhdWx0KSh0LkhlYWRpbmcpLmF0dHJzKChlPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse2xldmVsOjZ9KSkpYGB9LDcwNjM6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7byYmIShcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKXx8KG89e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixvKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksbz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxyKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksbyhuKDE5OTYpLHQpfSw3NzY5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig1NDMxKSx0KX0sNTQzMTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5UZXh0PXZvaWQgMDtjb25zdCBvPXIobig3NTE4KSk7dC5UZXh0PW8uZGVmYXVsdC5zcGFuYFxuICBjb2xvcjogJHsoe3RoZW1lOmUsY29sb3I6dD1cInRleHREZWZhdWx0XCJ9KT0+ZS5wYWxldHRlW3RdfTtcbiAgZm9udC1zaXplOiAkeyh7dGhlbWU6ZSxzaXplOnQ9XCJiYXNlXCJ9KT0+ZS5mb250U2l6ZVt0XX07XG4gIGZvbnQtd2VpZ2h0OiAkeyh7dGhlbWU6ZSx3ZWlnaHQ6dD1cIm5vcm1hbFwifSk9PmUuZm9udFdlaWdodFt0XX07XG4gIGxpbmUtaGVpZ2h0OiAkeyh7dGhlbWU6ZX0pPT5lLmxpbmVIZWlnaHQudGV4dH07XG5gLHQuVGV4dC5kaXNwbGF5TmFtZT1cIlRleHRcIn0sMzE5MDooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VDb2xvclNjaGVtZT10LkNvbG9yU2NoZW1lPXZvaWQgMDtjb25zdCByPW4oNjY4OSk7dC5Db2xvclNjaGVtZT17ZGFyazpcImRhcmtcIixsaWdodDpcImxpZ2h0XCIsc3lzdGVtOlwic3lzdGVtXCJ9LHQudXNlQ29sb3JTY2hlbWU9KHtjb2xvclNjaGVtZTplLGZhbGxiYWNrU2NoZW1lOm49dC5Db2xvclNjaGVtZS5saWdodH0pPT57Y29uc3RbaSxhXT0oMCxyLnVzZVN0YXRlKShlJiZlIT09dC5Db2xvclNjaGVtZS5zeXN0ZW0/ZTpuKSxsPXQ9PnthKG8odCxlfHxuKSl9O3JldHVybigwLHIudXNlRWZmZWN0KSgoKCk9Pntjb25zdCB0PXdpbmRvdy5tYXRjaE1lZGlhKFwiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKVwiKTtyZXR1cm4gYShvKHQsZXx8bikpLHQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLGwpLCgpPT50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIixsKX0pLFtlLGldKSxpfTtjb25zdCBvPShlLG4pPT5uPT09dC5Db2xvclNjaGVtZS5zeXN0ZW0/ZS5tYXRjaGVzP3QuQ29sb3JTY2hlbWUuZGFyazp0LkNvbG9yU2NoZW1lLmxpZ2h0Om59LDM0NzooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VEcm9wZG93bktleWJvYXJkTmF2aWdhdGlvbj12b2lkIDA7Y29uc3Qgcj1uKDY2ODkpO3QudXNlRHJvcGRvd25LZXlib2FyZE5hdmlnYXRpb249KGUsdCxuLG8saSk9Pntjb25zdFthLGxdPSgwLHIudXNlU3RhdGUpKDApLFtzLGNdPSgwLHIudXNlU3RhdGUpKFwiXCIpO2xldCB1O2lmKCgwLHIudXNlRWZmZWN0KSgoKCk9PntpZih0JiYhbil7Y29uc3Qgbj1lLmZsYXQoKS5maW5kSW5kZXgoKGU9PmUudmFsdWU9PT10LnZhbHVlKSk7bj49MCYmbChuKX19KSxbZSx0LG5dKSwoMCxyLnVzZUVmZmVjdCkoKCgpPT57bnx8YyhcIlwiKX0pLFtuXSksKDAsci51c2VFZmZlY3QpKCgoKT0+e2lmKHMpe2NvbnN0IHQ9ZS5mbGF0KCkuZmluZEluZGV4KChlPT5lLnRpdGxlLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChzLnRvTG93ZXJDYXNlKCkpKSk7dD49MCYmbCh0KX19KSxbZSxzXSksZVswXS5sZW5ndGg+MCYmZS5mbGF0KCkubGVuZ3RoPmEpe2NvbnN0W3Qsbl09W01hdGguZmxvb3IoYS9lWzBdLmxlbmd0aCksYSVlWzBdLmxlbmd0aF07dT1lW3RdW25dfXJldHVybigwLHIudXNlRWZmZWN0KSgoKCk9Pntjb25zdCBlPXNldFRpbWVvdXQoKCgpPT57YyhcIlwiKX0pLDUwMCk7cmV0dXJuKCk9PmNsZWFyVGltZW91dChlKX0pLFtzXSkse2ZvY3VzZWRPcHRpb246dSxoYW5kbGVLZXlEb3duOnQ9Pntzd2l0Y2godC5jb2RlKXtjYXNlXCJBcnJvd1VwXCI6dC5wcmV2ZW50RGVmYXVsdCgpLGE+MCYmbChhLTEpO2JyZWFrO2Nhc2VcIkFycm93RG93blwiOnQucHJldmVudERlZmF1bHQoKSxhPGUuZmxhdCgpLmxlbmd0aC0xJiZsKGErMSk7YnJlYWs7Y2FzZVwiRW50ZXJcIjpjYXNlXCJTcGFjZVwiOnQucHJldmVudERlZmF1bHQoKSxuPygobnVsbD09dT92b2lkIDA6dS5vdmVycmlkZU9uQ2xpY2spP3Uub3ZlcnJpZGVPbkNsaWNrKCk6aShudWxsIT11P3U6ZVswXVswXSksbygpKTpvKCk7YnJlYWs7Y2FzZVwiRXNjYXBlXCI6dC5wcmV2ZW50RGVmYXVsdCgpLG8oITEpO2JyZWFrO2RlZmF1bHQ6L15bYS16MC05XSQvaS50ZXN0KHQua2V5KSYmYygoZT0+ZSt0LmtleSkpfX19fX0sNDQ4MTooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VMYXlvdXRNZWRpYVF1ZXJ5PXQudXNlTWVkaWFRdWVyeT12b2lkIDA7Y29uc3Qgcj1uKDY2ODkpLG89ZT0+dD0+e2NvbnN0W24sb109KDAsci51c2VTdGF0ZSkoITEpO3JldHVybiBlKCgoKT0+e2NvbnN0IGU9d2luZG93Lm1hdGNoTWVkaWEodCk7aWYoZSl7ZS5tYXRjaGVzIT09biYmbyhlLm1hdGNoZXMpO2NvbnN0IHQ9KCk9Pm8oZS5tYXRjaGVzKSxyPSgpPT5lLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIix0KTtyZXR1cm4gZS5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsdCkscn19KSxbbix0XSksbn07dC51c2VNZWRpYVF1ZXJ5PW8oci51c2VFZmZlY3QpLHQudXNlTGF5b3V0TWVkaWFRdWVyeT1vKHIudXNlTGF5b3V0RWZmZWN0KX0sMjc3NjooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VQcmV2aW91cz12b2lkIDA7Y29uc3Qgcj1uKDY2ODkpO3QudXNlUHJldmlvdXM9ZT0+e2NvbnN0IHQ9KDAsci51c2VSZWYpKCk7cmV0dXJuKDAsci51c2VFZmZlY3QpKCgoKT0+e3QuY3VycmVudD1lfSksW2VdKSx0LmN1cnJlbnR9fSw3MDg4OihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZVRoZW1lPXZvaWQgMDtjb25zdCByPW4oNjY4OSksbz1uKDQyNjYpLGk9bigzMTkwKSxhPW4oOTUwNyksbD1uKDY0ODYpLHM9e1tpLkNvbG9yU2NoZW1lLmRhcmtdOm8uT3BlbkZpbkRhcmtUaGVtZSxbaS5Db2xvclNjaGVtZS5saWdodF06by5PcGVuRmluTGlnaHRUaGVtZX07dC51c2VUaGVtZT0oe3RoZW1lczplLHNjaGVtZTp0fSk9PntsZXQgbj17fTtjb25zdCBvPSgwLGkudXNlQ29sb3JTY2hlbWUpKHtjb2xvclNjaGVtZTp0fSk7dHJ5e249KDAsci51c2VNZW1vKSgoKCk9PigoZSx0KT0+e2NvbnN0IG49bnVsbD09dD92b2lkIDA6dFtlXTtsZXQgcj1PYmplY3QuYXNzaWduKHt9LHNbZV0pO3JldHVybiBuJiZuLnBhbGV0dGUmJihyPSgwLGwubWVyZ2UpKHIsbiwoMCxhLmNyZWF0ZVRoZW1lKShuLnBhbGV0dGUpKSkscn0pKG8sZSkpLFtlLG9dKX1jYXRjaChlKXtjb25zb2xlLmVycm9yKGUpfXJldHVybiBufX0sMzQxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLG89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG8obig0MTMwKSx0KSxvKG4oNzQwMSksdCksbyhuKDI0NTIpLHQpLG8obig3ZTMpLHQpLG8obig0OTI1KSx0KSxvKG4oMjYwOSksdCksbyhuKDMxMzYpLHQpLG8obig5NzM0KSx0KSxvKG4oNjAyNiksdCksbyhuKDk2MzQpLHQpLG8obigxNDQpLHQpLG8obig5MjM5KSx0KSxvKG4oODg3OCksdCksbyhuKDg1MTApLHQpLG8obig4OTUxKSx0KSxvKG4oMTk3OCksdCksbyhuKDgwNTEpLHQpLG8obig0MTY5KSx0KSxvKG4oMzY0MSksdCksbyhuKDUyMTUpLHQpLG8obigxNDY3KSx0KSxvKG4oMzExOSksdCksbyhuKDEzMzUpLHQpLG8obig1Mzc3KSx0KSxvKG4oMzg3NyksdCksbyhuKDMxODgpLHQpLG8obig3MDYzKSx0KSxvKG4oNzc2OSksdCksbyhuKDMxOTApLHQpLG8obig0NDgxKSx0KSxvKG4oMjc3NiksdCksbyhuKDM0NyksdCksbyhuKDQ5OTEpLHQpLG8obig4ODMyKSx0KSxvKG4oNzAzMCksdCksbyhuKDYyMTgpLHQpfSw4ODMyOihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5nZW5lcmF0ZUNvbG9yRnJvbVN0cmluZz12b2lkIDAsdC5nZW5lcmF0ZUNvbG9yRnJvbVN0cmluZz1mdW5jdGlvbihlPVwiXCIsdD03MCxuPTUwKXtsZXQgcj0wO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXI9ZS5jaGFyQ29kZUF0KHQpKygocjw8NSktciksciY9cjtyZXR1cm5gaHNsKCR7ciUzNjB9LCAke3R9JSwgJHtufSUpYH19LDQ5OTE6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LndoZW5GaW49dm9pZCAwLHQud2hlbkZpbj1mdW5jdGlvbihlLHQpe2NvbnN0IG49XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGZpbj9lOnQ7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uKCk6bn19LDY1NTooZSx0LG4pPT57bi5yKHQpLG4uZCh0LHtfX2Fzc2lnbjooKT0+aSxfX2FzeW5jRGVsZWdhdG9yOigpPT5MLF9fYXN5bmNHZW5lcmF0b3I6KCk9Pk8sX19hc3luY1ZhbHVlczooKT0+RSxfX2F3YWl0OigpPT5fLF9fYXdhaXRlcjooKT0+aCxfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0OigpPT5SLF9fY2xhc3NQcml2YXRlRmllbGRJbjooKT0+SSxfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0OigpPT5QLF9fY3JlYXRlQmluZGluZzooKT0+dixfX2RlY29yYXRlOigpPT5sLF9fZXNEZWNvcmF0ZTooKT0+YyxfX2V4cG9ydFN0YXI6KCk9Pm0sX19leHRlbmRzOigpPT5vLF9fZ2VuZXJhdG9yOigpPT5nLF9faW1wb3J0RGVmYXVsdDooKT0+ayxfX2ltcG9ydFN0YXI6KCk9Pk0sX19tYWtlVGVtcGxhdGVPYmplY3Q6KCk9PlMsX19tZXRhZGF0YTooKT0+cCxfX3BhcmFtOigpPT5zLF9fcHJvcEtleTooKT0+ZixfX3JlYWQ6KCk9PnksX19yZXN0OigpPT5hLF9fcnVuSW5pdGlhbGl6ZXJzOigpPT51LF9fc2V0RnVuY3Rpb25OYW1lOigpPT5kLF9fc3ByZWFkOigpPT53LF9fc3ByZWFkQXJyYXk6KCk9PngsX19zcHJlYWRBcnJheXM6KCk9PmIsX192YWx1ZXM6KCk9PkN9KTt2YXIgcj1mdW5jdGlvbihlLHQpe3JldHVybiByPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pJiYoZVtuXT10W25dKX0scihlLHQpfTtmdW5jdGlvbiBvKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIrU3RyaW5nKHQpK1wiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9ZX1yKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KToobi5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IG4pfXZhciBpPWZ1bmN0aW9uKCl7cmV0dXJuIGk9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49MSxyPWFyZ3VtZW50cy5sZW5ndGg7bjxyO24rKylmb3IodmFyIG8gaW4gdD1hcmd1bWVudHNbbl0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbykmJihlW29dPXRbb10pO3JldHVybiBlfSxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07ZnVuY3Rpb24gYShlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59ZnVuY3Rpb24gbChlLHQsbixyKXt2YXIgbyxpPWFyZ3VtZW50cy5sZW5ndGgsYT1pPDM/dDpudWxsPT09cj9yPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTpyO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBSZWZsZWN0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKWE9UmVmbGVjdC5kZWNvcmF0ZShlLHQsbixyKTtlbHNlIGZvcih2YXIgbD1lLmxlbmd0aC0xO2w+PTA7bC0tKShvPWVbbF0pJiYoYT0oaTwzP28oYSk6aT4zP28odCxuLGEpOm8odCxuKSl8fGEpO3JldHVybiBpPjMmJmEmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4sYSksYX1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7dChuLHIsZSl9fWZ1bmN0aW9uIGMoZSx0LG4scixvLGkpe2Z1bmN0aW9uIGEoZSl7aWYodm9pZCAwIT09ZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVuY3Rpb24gZXhwZWN0ZWRcIik7cmV0dXJuIGV9Zm9yKHZhciBsLHM9ci5raW5kLGM9XCJnZXR0ZXJcIj09PXM/XCJnZXRcIjpcInNldHRlclwiPT09cz9cInNldFwiOlwidmFsdWVcIix1PSF0JiZlP3Iuc3RhdGljP2U6ZS5wcm90b3R5cGU6bnVsbCxmPXR8fCh1P09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodSxyLm5hbWUpOnt9KSxkPSExLHA9bi5sZW5ndGgtMTtwPj0wO3AtLSl7dmFyIGg9e307Zm9yKHZhciBnIGluIHIpaFtnXT1cImFjY2Vzc1wiPT09Zz97fTpyW2ddO2Zvcih2YXIgZyBpbiByLmFjY2VzcyloLmFjY2Vzc1tnXT1yLmFjY2Vzc1tnXTtoLmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKGUpe2lmKGQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZFwiKTtpLnB1c2goYShlfHxudWxsKSl9O3ZhciB2PSgwLG5bcF0pKFwiYWNjZXNzb3JcIj09PXM/e2dldDpmLmdldCxzZXQ6Zi5zZXR9OmZbY10saCk7aWYoXCJhY2Nlc3NvclwiPT09cyl7aWYodm9pZCAwPT09diljb250aW51ZTtpZihudWxsPT09dnx8XCJvYmplY3RcIiE9dHlwZW9mIHYpdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZFwiKTsobD1hKHYuZ2V0KSkmJihmLmdldD1sKSwobD1hKHYuc2V0KSkmJihmLnNldD1sKSwobD1hKHYuaW5pdCkpJiZvLnB1c2gobCl9ZWxzZShsPWEodikpJiYoXCJmaWVsZFwiPT09cz9vLnB1c2gobCk6ZltjXT1sKX11JiZPYmplY3QuZGVmaW5lUHJvcGVydHkodSxyLm5hbWUsZiksZD0hMH1mdW5jdGlvbiB1KGUsdCxuKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yLG89MDtvPHQubGVuZ3RoO28rKyluPXI/dFtvXS5jYWxsKGUsbik6dFtvXS5jYWxsKGUpO3JldHVybiByP246dm9pZCAwfWZ1bmN0aW9uIGYoZSl7cmV0dXJuXCJzeW1ib2xcIj09dHlwZW9mIGU/ZTpcIlwiLmNvbmNhdChlKX1mdW5jdGlvbiBkKGUsdCxuKXtyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgdCYmKHQ9dC5kZXNjcmlwdGlvbj9cIltcIi5jb25jYXQodC5kZXNjcmlwdGlvbixcIl1cIik6XCJcIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJuYW1lXCIse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTpuP1wiXCIuY29uY2F0KG4sXCIgXCIsdCk6dH0pfWZ1bmN0aW9uIHAoZSx0KXtpZihcIm9iamVjdFwiPT10eXBlb2YgUmVmbGVjdCYmXCJmdW5jdGlvblwiPT10eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSlyZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShlLHQpfWZ1bmN0aW9uIGgoZSx0LG4scil7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKG8saSl7ZnVuY3Rpb24gYShlKXt0cnl7cyhyLm5leHQoZSkpfWNhdGNoKGUpe2koZSl9fWZ1bmN0aW9uIGwoZSl7dHJ5e3Moci50aHJvdyhlKSl9Y2F0Y2goZSl7aShlKX19ZnVuY3Rpb24gcyhlKXt2YXIgdDtlLmRvbmU/byhlLnZhbHVlKToodD1lLnZhbHVlLHQgaW5zdGFuY2VvZiBuP3Q6bmV3IG4oKGZ1bmN0aW9uKGUpe2UodCl9KSkpLnRoZW4oYSxsKX1zKChyPXIuYXBwbHkoZSx0fHxbXSkpLm5leHQoKSl9KSl9ZnVuY3Rpb24gZyhlLHQpe3ZhciBuLHIsbyxpLGE9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmb1swXSl0aHJvdyBvWzFdO3JldHVybiBvWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIGk9e25leHQ6bCgwKSx0aHJvdzpsKDEpLHJldHVybjpsKDIpfSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJihpW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGk7ZnVuY3Rpb24gbChsKXtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIGZ1bmN0aW9uKGwpe2lmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7Zm9yKDtpJiYoaT0wLGxbMF0mJihhPTApKSxhOyl0cnl7aWYobj0xLHImJihvPTImbFswXT9yLnJldHVybjpsWzBdP3IudGhyb3d8fCgobz1yLnJldHVybikmJm8uY2FsbChyKSwwKTpyLm5leHQpJiYhKG89by5jYWxsKHIsbFsxXSkpLmRvbmUpcmV0dXJuIG87c3dpdGNoKHI9MCxvJiYobD1bMiZsWzBdLG8udmFsdWVdKSxsWzBdKXtjYXNlIDA6Y2FzZSAxOm89bDticmVhaztjYXNlIDQ6cmV0dXJuIGEubGFiZWwrKyx7dmFsdWU6bFsxXSxkb25lOiExfTtjYXNlIDU6YS5sYWJlbCsrLHI9bFsxXSxsPVswXTtjb250aW51ZTtjYXNlIDc6bD1hLm9wcy5wb3AoKSxhLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChvPShvPWEudHJ5cykubGVuZ3RoPjAmJm9bby5sZW5ndGgtMV0pfHw2IT09bFswXSYmMiE9PWxbMF0pKXthPTA7Y29udGludWV9aWYoMz09PWxbMF0mJighb3x8bFsxXT5vWzBdJiZsWzFdPG9bM10pKXthLmxhYmVsPWxbMV07YnJlYWt9aWYoNj09PWxbMF0mJmEubGFiZWw8b1sxXSl7YS5sYWJlbD1vWzFdLG89bDticmVha31pZihvJiZhLmxhYmVsPG9bMl0pe2EubGFiZWw9b1syXSxhLm9wcy5wdXNoKGwpO2JyZWFrfW9bMl0mJmEub3BzLnBvcCgpLGEudHJ5cy5wb3AoKTtjb250aW51ZX1sPXQuY2FsbChlLGEpfWNhdGNoKGUpe2w9WzYsZV0scj0wfWZpbmFsbHl7bj1vPTB9aWYoNSZsWzBdKXRocm93IGxbMV07cmV0dXJue3ZhbHVlOmxbMF0/bFsxXTp2b2lkIDAsZG9uZTohMH19KFtsLHNdKX19fXZhciB2PU9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO28mJiEoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSl8fChvPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbyl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX07ZnVuY3Rpb24gbShlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHYodCxlLG4pfWZ1bmN0aW9uIEMoZSl7dmFyIHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3Isbj10JiZlW3RdLHI9MDtpZihuKXJldHVybiBuLmNhbGwoZSk7aWYoZSYmXCJudW1iZXJcIj09dHlwZW9mIGUubGVuZ3RoKXJldHVybntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIGUmJnI+PWUubGVuZ3RoJiYoZT12b2lkIDApLHt2YWx1ZTplJiZlW3IrK10sZG9uZTohZX19fTt0aHJvdyBuZXcgVHlwZUVycm9yKHQ/XCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiOlwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKX1mdW5jdGlvbiB5KGUsdCl7dmFyIG49XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl07aWYoIW4pcmV0dXJuIGU7dmFyIHIsbyxpPW4uY2FsbChlKSxhPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT10fHx0LS0gPjApJiYhKHI9aS5uZXh0KCkpLmRvbmU7KWEucHVzaChyLnZhbHVlKX1jYXRjaChlKXtvPXtlcnJvcjplfX1maW5hbGx5e3RyeXtyJiYhci5kb25lJiYobj1pLnJldHVybikmJm4uY2FsbChpKX1maW5hbGx5e2lmKG8pdGhyb3cgby5lcnJvcn19cmV0dXJuIGF9ZnVuY3Rpb24gdygpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllPWUuY29uY2F0KHkoYXJndW1lbnRzW3RdKSk7cmV0dXJuIGV9ZnVuY3Rpb24gYigpe2Zvcih2YXIgZT0wLHQ9MCxuPWFyZ3VtZW50cy5sZW5ndGg7dDxuO3QrKyllKz1hcmd1bWVudHNbdF0ubGVuZ3RoO3ZhciByPUFycmF5KGUpLG89MDtmb3IodD0wO3Q8bjt0KyspZm9yKHZhciBpPWFyZ3VtZW50c1t0XSxhPTAsbD1pLmxlbmd0aDthPGw7YSsrLG8rKylyW29dPWlbYV07cmV0dXJuIHJ9ZnVuY3Rpb24geChlLHQsbil7aWYobnx8Mj09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKHZhciByLG89MCxpPXQubGVuZ3RoO288aTtvKyspIXImJm8gaW4gdHx8KHJ8fChyPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsMCxvKSkscltvXT10W29dKTtyZXR1cm4gZS5jb25jYXQocnx8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpfWZ1bmN0aW9uIF8oZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfPyh0aGlzLnY9ZSx0aGlzKTpuZXcgXyhlKX1mdW5jdGlvbiBPKGUsdCxuKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTt2YXIgcixvPW4uYXBwbHkoZSx0fHxbXSksaT1bXTtyZXR1cm4gcj17fSxhKFwibmV4dFwiKSxhKFwidGhyb3dcIiksYShcInJldHVyblwiKSxyW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxyO2Z1bmN0aW9uIGEoZSl7b1tlXSYmKHJbZV09ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLHIpe2kucHVzaChbZSx0LG4scl0pPjF8fGwoZSx0KX0pKX0pfWZ1bmN0aW9uIGwoZSx0KXt0cnl7KG49b1tlXSh0KSkudmFsdWUgaW5zdGFuY2VvZiBfP1Byb21pc2UucmVzb2x2ZShuLnZhbHVlLnYpLnRoZW4ocyxjKTp1KGlbMF1bMl0sbil9Y2F0Y2goZSl7dShpWzBdWzNdLGUpfXZhciBufWZ1bmN0aW9uIHMoZSl7bChcIm5leHRcIixlKX1mdW5jdGlvbiBjKGUpe2woXCJ0aHJvd1wiLGUpfWZ1bmN0aW9uIHUoZSx0KXtlKHQpLGkuc2hpZnQoKSxpLmxlbmd0aCYmbChpWzBdWzBdLGlbMF1bMV0pfX1mdW5jdGlvbiBMKGUpe3ZhciB0LG47cmV0dXJuIHQ9e30scihcIm5leHRcIikscihcInRocm93XCIsKGZ1bmN0aW9uKGUpe3Rocm93IGV9KSkscihcInJldHVyblwiKSx0W1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sdDtmdW5jdGlvbiByKHIsbyl7dFtyXT1lW3JdP2Z1bmN0aW9uKHQpe3JldHVybihuPSFuKT97dmFsdWU6XyhlW3JdKHQpKSxkb25lOiExfTpvP28odCk6dH06b319ZnVuY3Rpb24gRShlKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTt2YXIgdCxuPWVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdO3JldHVybiBuP24uY2FsbChlKTooZT1DKGUpLHQ9e30scihcIm5leHRcIikscihcInRocm93XCIpLHIoXCJyZXR1cm5cIiksdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sdCk7ZnVuY3Rpb24gcihuKXt0W25dPWVbbl0mJmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24ocixvKXshZnVuY3Rpb24oZSx0LG4scil7UHJvbWlzZS5yZXNvbHZlKHIpLnRoZW4oKGZ1bmN0aW9uKHQpe2Uoe3ZhbHVlOnQsZG9uZTpufSl9KSx0KX0ocixvLCh0PWVbbl0odCkpLmRvbmUsdC52YWx1ZSl9KSl9fX1mdW5jdGlvbiBTKGUsdCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcInJhd1wiLHt2YWx1ZTp0fSk6ZS5yYXc9dCxlfXZhciBqPU9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImRlZmF1bHRcIix7ZW51bWVyYWJsZTohMCx2YWx1ZTp0fSl9OmZ1bmN0aW9uKGUsdCl7ZS5kZWZhdWx0PXR9O2Z1bmN0aW9uIE0oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCIhPT1uJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmdih0LGUsbik7cmV0dXJuIGoodCxlKSx0fWZ1bmN0aW9uIGsoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIFIoZSx0LG4scil7aWYoXCJhXCI9PT1uJiYhcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/ZSE9PXR8fCFyOiF0LmhhcyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO3JldHVyblwibVwiPT09bj9yOlwiYVwiPT09bj9yLmNhbGwoZSk6cj9yLnZhbHVlOnQuZ2V0KGUpfWZ1bmN0aW9uIFAoZSx0LG4scixvKXtpZihcIm1cIj09PXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtpZihcImFcIj09PXImJiFvKXRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdD9lIT09dHx8IW86IXQuaGFzKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtyZXR1cm5cImFcIj09PXI/by5jYWxsKGUsbik6bz9vLnZhbHVlPW46dC5zZXQoZSxuKSxufWZ1bmN0aW9uIEkoZSx0KXtpZihudWxsPT09dHx8XCJvYmplY3RcIiE9dHlwZW9mIHQmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGU/dD09PWU6ZS5oYXModCl9fSw2MDM2OmU9PntlLmV4cG9ydHM9XCJodHRwczovL2Nkbi5vcGVuZmluLmNvL3VpLWxpYnJhcnkvZm9udHMvSW50ZXItSXRhbGljLndvZmYyXCJ9LDQ2Njg6ZT0+e2UuZXhwb3J0cz1cImh0dHBzOi8vY2RuLm9wZW5maW4uY28vdWktbGlicmFyeS9mb250cy9JbnRlci1SZWd1bGFyLndvZmYyXCJ9LDU5NDE6ZT0+e2UuZXhwb3J0cz1cImh0dHBzOi8vY2RuLm9wZW5maW4uY28vdWktbGlicmFyeS9mb250cy9JbnRlci1TZW1pQm9sZC53b2ZmMlwifSwyODEzOmU9PntlLmV4cG9ydHM9XCJodHRwczovL2Nkbi5vcGVuZmluLmNvL3VpLWxpYnJhcnkvZm9udHMvSW50ZXItU2VtaUJvbGRJdGFsaWMud29mZjJcIn0sNjY4OTplPT57ZS5leHBvcnRzPW4oNzM3OCl9LDc1MTg6ZT0+e2UuZXhwb3J0cz1uKDI5MjEpfSw4MjA3OmZ1bmN0aW9uKGUpe2UuZXhwb3J0cz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7cmV0dXJuKGU9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgZX0pKHQpfXZhciB0PS9eXFxzKy8sbj0vXFxzKyQvO2Z1bmN0aW9uIHIobyxpKXtpZihpPWl8fHt9LChvPW98fFwiXCIpaW5zdGFuY2VvZiByKXJldHVybiBvO2lmKCEodGhpcyBpbnN0YW5jZW9mIHIpKXJldHVybiBuZXcgcihvLGkpO3ZhciBhPWZ1bmN0aW9uKHIpe3ZhciBvLGksYSxsPXtyOjAsZzowLGI6MH0scz0xLGM9bnVsbCx1PW51bGwsZj1udWxsLGQ9ITEscD0hMTtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgciYmKHI9ZnVuY3Rpb24oZSl7ZT1lLnJlcGxhY2UodCxcIlwiKS5yZXBsYWNlKG4sXCJcIikudG9Mb3dlckNhc2UoKTt2YXIgcixvPSExO2lmKHdbZV0pZT13W2VdLG89ITA7ZWxzZSBpZihcInRyYW5zcGFyZW50XCI9PWUpcmV0dXJue3I6MCxnOjAsYjowLGE6MCxmb3JtYXQ6XCJuYW1lXCJ9O3JldHVybihyPUkucmdiLmV4ZWMoZSkpP3tyOnJbMV0sZzpyWzJdLGI6clszXX06KHI9SS5yZ2JhLmV4ZWMoZSkpP3tyOnJbMV0sZzpyWzJdLGI6clszXSxhOnJbNF19OihyPUkuaHNsLmV4ZWMoZSkpP3toOnJbMV0sczpyWzJdLGw6clszXX06KHI9SS5oc2xhLmV4ZWMoZSkpP3toOnJbMV0sczpyWzJdLGw6clszXSxhOnJbNF19OihyPUkuaHN2LmV4ZWMoZSkpP3toOnJbMV0sczpyWzJdLHY6clszXX06KHI9SS5oc3ZhLmV4ZWMoZSkpP3toOnJbMV0sczpyWzJdLHY6clszXSxhOnJbNF19OihyPUkuaGV4OC5leGVjKGUpKT97cjpMKHJbMV0pLGc6TChyWzJdKSxiOkwoclszXSksYTpNKHJbNF0pLGZvcm1hdDpvP1wibmFtZVwiOlwiaGV4OFwifToocj1JLmhleDYuZXhlYyhlKSk/e3I6TChyWzFdKSxnOkwoclsyXSksYjpMKHJbM10pLGZvcm1hdDpvP1wibmFtZVwiOlwiaGV4XCJ9OihyPUkuaGV4NC5leGVjKGUpKT97cjpMKHJbMV0rXCJcIityWzFdKSxnOkwoclsyXStcIlwiK3JbMl0pLGI6TChyWzNdK1wiXCIrclszXSksYTpNKHJbNF0rXCJcIityWzRdKSxmb3JtYXQ6bz9cIm5hbWVcIjpcImhleDhcIn06ISEocj1JLmhleDMuZXhlYyhlKSkmJntyOkwoclsxXStcIlwiK3JbMV0pLGc6TChyWzJdK1wiXCIrclsyXSksYjpMKHJbM10rXCJcIityWzNdKSxmb3JtYXQ6bz9cIm5hbWVcIjpcImhleFwifX0ocikpLFwib2JqZWN0XCI9PWUocikmJihBKHIucikmJkEoci5nKSYmQShyLmIpPyhvPXIucixpPXIuZyxhPXIuYixsPXtyOjI1NSpfKG8sMjU1KSxnOjI1NSpfKGksMjU1KSxiOjI1NSpfKGEsMjU1KX0sZD0hMCxwPVwiJVwiPT09U3RyaW5nKHIucikuc3Vic3RyKC0xKT9cInByZ2JcIjpcInJnYlwiKTpBKHIuaCkmJkEoci5zKSYmQShyLnYpPyhjPVMoci5zKSx1PVMoci52KSxsPWZ1bmN0aW9uKGUsdCxuKXtlPTYqXyhlLDM2MCksdD1fKHQsMTAwKSxuPV8obiwxMDApO3ZhciByPU1hdGguZmxvb3IoZSksbz1lLXIsaT1uKigxLXQpLGE9biooMS1vKnQpLGw9biooMS0oMS1vKSp0KSxzPXIlNjtyZXR1cm57cjoyNTUqW24sYSxpLGksbCxuXVtzXSxnOjI1NSpbbCxuLG4sYSxpLGldW3NdLGI6MjU1KltpLGksbCxuLG4sYV1bc119fShyLmgsYyx1KSxkPSEwLHA9XCJoc3ZcIik6QShyLmgpJiZBKHIucykmJkEoci5sKSYmKGM9UyhyLnMpLGY9UyhyLmwpLGw9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG8saTtmdW5jdGlvbiBhKGUsdCxuKXtyZXR1cm4gbjwwJiYobis9MSksbj4xJiYobi09MSksbjwxLzY/ZSs2Kih0LWUpKm46bjwuNT90Om48Mi8zP2UrKHQtZSkqKDIvMy1uKSo2OmV9aWYoZT1fKGUsMzYwKSx0PV8odCwxMDApLG49XyhuLDEwMCksMD09PXQpcj1vPWk9bjtlbHNle3ZhciBsPW48LjU/biooMSt0KTpuK3Qtbip0LHM9MipuLWw7cj1hKHMsbCxlKzEvMyksbz1hKHMsbCxlKSxpPWEocyxsLGUtMS8zKX1yZXR1cm57cjoyNTUqcixnOjI1NSpvLGI6MjU1Kml9fShyLmgsYyxmKSxkPSEwLHA9XCJoc2xcIiksci5oYXNPd25Qcm9wZXJ0eShcImFcIikmJihzPXIuYSkpLHM9eChzKSx7b2s6ZCxmb3JtYXQ6ci5mb3JtYXR8fHAscjpNYXRoLm1pbigyNTUsTWF0aC5tYXgobC5yLDApKSxnOk1hdGgubWluKDI1NSxNYXRoLm1heChsLmcsMCkpLGI6TWF0aC5taW4oMjU1LE1hdGgubWF4KGwuYiwwKSksYTpzfX0obyk7dGhpcy5fb3JpZ2luYWxJbnB1dD1vLHRoaXMuX3I9YS5yLHRoaXMuX2c9YS5nLHRoaXMuX2I9YS5iLHRoaXMuX2E9YS5hLHRoaXMuX3JvdW5kQT1NYXRoLnJvdW5kKDEwMCp0aGlzLl9hKS8xMDAsdGhpcy5fZm9ybWF0PWkuZm9ybWF0fHxhLmZvcm1hdCx0aGlzLl9ncmFkaWVudFR5cGU9aS5ncmFkaWVudFR5cGUsdGhpcy5fcjwxJiYodGhpcy5fcj1NYXRoLnJvdW5kKHRoaXMuX3IpKSx0aGlzLl9nPDEmJih0aGlzLl9nPU1hdGgucm91bmQodGhpcy5fZykpLHRoaXMuX2I8MSYmKHRoaXMuX2I9TWF0aC5yb3VuZCh0aGlzLl9iKSksdGhpcy5fb2s9YS5va31mdW5jdGlvbiBvKGUsdCxuKXtlPV8oZSwyNTUpLHQ9Xyh0LDI1NSksbj1fKG4sMjU1KTt2YXIgcixvLGk9TWF0aC5tYXgoZSx0LG4pLGE9TWF0aC5taW4oZSx0LG4pLGw9KGkrYSkvMjtpZihpPT1hKXI9bz0wO2Vsc2V7dmFyIHM9aS1hO3N3aXRjaChvPWw+LjU/cy8oMi1pLWEpOnMvKGkrYSksaSl7Y2FzZSBlOnI9KHQtbikvcysodDxuPzY6MCk7YnJlYWs7Y2FzZSB0OnI9KG4tZSkvcysyO2JyZWFrO2Nhc2UgbjpyPShlLXQpL3MrNH1yLz02fXJldHVybntoOnIsczpvLGx9fWZ1bmN0aW9uIGkoZSx0LG4pe2U9XyhlLDI1NSksdD1fKHQsMjU1KSxuPV8obiwyNTUpO3ZhciByLG8saT1NYXRoLm1heChlLHQsbiksYT1NYXRoLm1pbihlLHQsbiksbD1pLHM9aS1hO2lmKG89MD09PWk/MDpzL2ksaT09YSlyPTA7ZWxzZXtzd2l0Y2goaSl7Y2FzZSBlOnI9KHQtbikvcysodDxuPzY6MCk7YnJlYWs7Y2FzZSB0OnI9KG4tZSkvcysyO2JyZWFrO2Nhc2UgbjpyPShlLXQpL3MrNH1yLz02fXJldHVybntoOnIsczpvLHY6bH19ZnVuY3Rpb24gYShlLHQsbixyKXt2YXIgbz1bRShNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDE2KSksRShNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDE2KSksRShNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDE2KSldO3JldHVybiByJiZvWzBdLmNoYXJBdCgwKT09b1swXS5jaGFyQXQoMSkmJm9bMV0uY2hhckF0KDApPT1vWzFdLmNoYXJBdCgxKSYmb1syXS5jaGFyQXQoMCk9PW9bMl0uY2hhckF0KDEpP29bMF0uY2hhckF0KDApK29bMV0uY2hhckF0KDApK29bMl0uY2hhckF0KDApOm8uam9pbihcIlwiKX1mdW5jdGlvbiBsKGUsdCxuLHIpe3JldHVybltFKGoocikpLEUoTWF0aC5yb3VuZChlKS50b1N0cmluZygxNikpLEUoTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNikpLEUoTWF0aC5yb3VuZChuKS50b1N0cmluZygxNikpXS5qb2luKFwiXCIpfWZ1bmN0aW9uIHMoZSx0KXt0PTA9PT10PzA6dHx8MTA7dmFyIG49cihlKS50b0hzbCgpO3JldHVybiBuLnMtPXQvMTAwLG4ucz1PKG4ucykscihuKX1mdW5jdGlvbiBjKGUsdCl7dD0wPT09dD8wOnR8fDEwO3ZhciBuPXIoZSkudG9Ic2woKTtyZXR1cm4gbi5zKz10LzEwMCxuLnM9TyhuLnMpLHIobil9ZnVuY3Rpb24gdShlKXtyZXR1cm4gcihlKS5kZXNhdHVyYXRlKDEwMCl9ZnVuY3Rpb24gZihlLHQpe3Q9MD09PXQ/MDp0fHwxMDt2YXIgbj1yKGUpLnRvSHNsKCk7cmV0dXJuIG4ubCs9dC8xMDAsbi5sPU8obi5sKSxyKG4pfWZ1bmN0aW9uIGQoZSx0KXt0PTA9PT10PzA6dHx8MTA7dmFyIG49cihlKS50b1JnYigpO3JldHVybiBuLnI9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsbi5yLU1hdGgucm91bmQoLXQvMTAwKjI1NSkpKSxuLmc9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsbi5nLU1hdGgucm91bmQoLXQvMTAwKjI1NSkpKSxuLmI9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsbi5iLU1hdGgucm91bmQoLXQvMTAwKjI1NSkpKSxyKG4pfWZ1bmN0aW9uIHAoZSx0KXt0PTA9PT10PzA6dHx8MTA7dmFyIG49cihlKS50b0hzbCgpO3JldHVybiBuLmwtPXQvMTAwLG4ubD1PKG4ubCkscihuKX1mdW5jdGlvbiBoKGUsdCl7dmFyIG49cihlKS50b0hzbCgpLG89KG4uaCt0KSUzNjA7cmV0dXJuIG4uaD1vPDA/MzYwK286byxyKG4pfWZ1bmN0aW9uIGcoZSl7dmFyIHQ9cihlKS50b0hzbCgpO3JldHVybiB0Lmg9KHQuaCsxODApJTM2MCxyKHQpfWZ1bmN0aW9uIHYoZSx0KXtpZihpc05hTih0KXx8dDw9MCl0aHJvdyBuZXcgRXJyb3IoXCJBcmd1bWVudCB0byBwb2x5YWQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlclwiKTtmb3IodmFyIG49cihlKS50b0hzbCgpLG89W3IoZSldLGk9MzYwL3QsYT0xO2E8dDthKyspby5wdXNoKHIoe2g6KG4uaCthKmkpJTM2MCxzOm4ucyxsOm4ubH0pKTtyZXR1cm4gb31mdW5jdGlvbiBtKGUpe3ZhciB0PXIoZSkudG9Ic2woKSxuPXQuaDtyZXR1cm5bcihlKSxyKHtoOihuKzcyKSUzNjAsczp0LnMsbDp0Lmx9KSxyKHtoOihuKzIxNiklMzYwLHM6dC5zLGw6dC5sfSldfWZ1bmN0aW9uIEMoZSx0LG4pe3Q9dHx8NixuPW58fDMwO3ZhciBvPXIoZSkudG9Ic2woKSxpPTM2MC9uLGE9W3IoZSldO2ZvcihvLmg9KG8uaC0oaSp0Pj4xKSs3MjApJTM2MDstLXQ7KW8uaD0oby5oK2kpJTM2MCxhLnB1c2gocihvKSk7cmV0dXJuIGF9ZnVuY3Rpb24geShlLHQpe3Q9dHx8Njtmb3IodmFyIG49cihlKS50b0hzdigpLG89bi5oLGk9bi5zLGE9bi52LGw9W10scz0xL3Q7dC0tOylsLnB1c2gocih7aDpvLHM6aSx2OmF9KSksYT0oYStzKSUxO3JldHVybiBsfXIucHJvdG90eXBlPXtpc0Rhcms6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRCcmlnaHRuZXNzKCk8MTI4fSxpc0xpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNEYXJrKCl9LGlzVmFsaWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb2t9LGdldE9yaWdpbmFsSW5wdXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb3JpZ2luYWxJbnB1dH0sZ2V0Rm9ybWF0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Zvcm1hdH0sZ2V0QWxwaGE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYX0sZ2V0QnJpZ2h0bmVzczpmdW5jdGlvbigpe3ZhciBlPXRoaXMudG9SZ2IoKTtyZXR1cm4oMjk5KmUucis1ODcqZS5nKzExNCplLmIpLzFlM30sZ2V0THVtaW5hbmNlOmZ1bmN0aW9uKCl7dmFyIGUsdCxuLHI9dGhpcy50b1JnYigpO3JldHVybiBlPXIuci8yNTUsdD1yLmcvMjU1LG49ci5iLzI1NSwuMjEyNiooZTw9LjAzOTI4P2UvMTIuOTI6TWF0aC5wb3coKGUrLjA1NSkvMS4wNTUsMi40KSkrLjcxNTIqKHQ8PS4wMzkyOD90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCkpKy4wNzIyKihuPD0uMDM5Mjg/bi8xMi45MjpNYXRoLnBvdygobisuMDU1KS8xLjA1NSwyLjQpKX0sc2V0QWxwaGE6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2E9eChlKSx0aGlzLl9yb3VuZEE9TWF0aC5yb3VuZCgxMDAqdGhpcy5fYSkvMTAwLHRoaXN9LHRvSHN2OmZ1bmN0aW9uKCl7dmFyIGU9aSh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYik7cmV0dXJue2g6MzYwKmUuaCxzOmUucyx2OmUudixhOnRoaXMuX2F9fSx0b0hzdlN0cmluZzpmdW5jdGlvbigpe3ZhciBlPWkodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpLHQ9TWF0aC5yb3VuZCgzNjAqZS5oKSxuPU1hdGgucm91bmQoMTAwKmUucykscj1NYXRoLnJvdW5kKDEwMCplLnYpO3JldHVybiAxPT10aGlzLl9hP1wiaHN2KFwiK3QrXCIsIFwiK24rXCIlLCBcIityK1wiJSlcIjpcImhzdmEoXCIrdCtcIiwgXCIrbitcIiUsIFwiK3IrXCIlLCBcIit0aGlzLl9yb3VuZEErXCIpXCJ9LHRvSHNsOmZ1bmN0aW9uKCl7dmFyIGU9byh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYik7cmV0dXJue2g6MzYwKmUuaCxzOmUucyxsOmUubCxhOnRoaXMuX2F9fSx0b0hzbFN0cmluZzpmdW5jdGlvbigpe3ZhciBlPW8odGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpLHQ9TWF0aC5yb3VuZCgzNjAqZS5oKSxuPU1hdGgucm91bmQoMTAwKmUucykscj1NYXRoLnJvdW5kKDEwMCplLmwpO3JldHVybiAxPT10aGlzLl9hP1wiaHNsKFwiK3QrXCIsIFwiK24rXCIlLCBcIityK1wiJSlcIjpcImhzbGEoXCIrdCtcIiwgXCIrbitcIiUsIFwiK3IrXCIlLCBcIit0aGlzLl9yb3VuZEErXCIpXCJ9LHRvSGV4OmZ1bmN0aW9uKGUpe3JldHVybiBhKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLGUpfSx0b0hleFN0cmluZzpmdW5jdGlvbihlKXtyZXR1cm5cIiNcIit0aGlzLnRvSGV4KGUpfSx0b0hleDg6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIGk9W0UoTWF0aC5yb3VuZChlKS50b1N0cmluZygxNikpLEUoTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNikpLEUoTWF0aC5yb3VuZChuKS50b1N0cmluZygxNikpLEUoaihyKSldO3JldHVybiBvJiZpWzBdLmNoYXJBdCgwKT09aVswXS5jaGFyQXQoMSkmJmlbMV0uY2hhckF0KDApPT1pWzFdLmNoYXJBdCgxKSYmaVsyXS5jaGFyQXQoMCk9PWlbMl0uY2hhckF0KDEpJiZpWzNdLmNoYXJBdCgwKT09aVszXS5jaGFyQXQoMSk/aVswXS5jaGFyQXQoMCkraVsxXS5jaGFyQXQoMCkraVsyXS5jaGFyQXQoMCkraVszXS5jaGFyQXQoMCk6aS5qb2luKFwiXCIpfSh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYix0aGlzLl9hLGUpfSx0b0hleDhTdHJpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuXCIjXCIrdGhpcy50b0hleDgoZSl9LHRvUmdiOmZ1bmN0aW9uKCl7cmV0dXJue3I6TWF0aC5yb3VuZCh0aGlzLl9yKSxnOk1hdGgucm91bmQodGhpcy5fZyksYjpNYXRoLnJvdW5kKHRoaXMuX2IpLGE6dGhpcy5fYX19LHRvUmdiU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIDE9PXRoaXMuX2E/XCJyZ2IoXCIrTWF0aC5yb3VuZCh0aGlzLl9yKStcIiwgXCIrTWF0aC5yb3VuZCh0aGlzLl9nKStcIiwgXCIrTWF0aC5yb3VuZCh0aGlzLl9iKStcIilcIjpcInJnYmEoXCIrTWF0aC5yb3VuZCh0aGlzLl9yKStcIiwgXCIrTWF0aC5yb3VuZCh0aGlzLl9nKStcIiwgXCIrTWF0aC5yb3VuZCh0aGlzLl9iKStcIiwgXCIrdGhpcy5fcm91bmRBK1wiKVwifSx0b1BlcmNlbnRhZ2VSZ2I6ZnVuY3Rpb24oKXtyZXR1cm57cjpNYXRoLnJvdW5kKDEwMCpfKHRoaXMuX3IsMjU1KSkrXCIlXCIsZzpNYXRoLnJvdW5kKDEwMCpfKHRoaXMuX2csMjU1KSkrXCIlXCIsYjpNYXRoLnJvdW5kKDEwMCpfKHRoaXMuX2IsMjU1KSkrXCIlXCIsYTp0aGlzLl9hfX0sdG9QZXJjZW50YWdlUmdiU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIDE9PXRoaXMuX2E/XCJyZ2IoXCIrTWF0aC5yb3VuZCgxMDAqXyh0aGlzLl9yLDI1NSkpK1wiJSwgXCIrTWF0aC5yb3VuZCgxMDAqXyh0aGlzLl9nLDI1NSkpK1wiJSwgXCIrTWF0aC5yb3VuZCgxMDAqXyh0aGlzLl9iLDI1NSkpK1wiJSlcIjpcInJnYmEoXCIrTWF0aC5yb3VuZCgxMDAqXyh0aGlzLl9yLDI1NSkpK1wiJSwgXCIrTWF0aC5yb3VuZCgxMDAqXyh0aGlzLl9nLDI1NSkpK1wiJSwgXCIrTWF0aC5yb3VuZCgxMDAqXyh0aGlzLl9iLDI1NSkpK1wiJSwgXCIrdGhpcy5fcm91bmRBK1wiKVwifSx0b05hbWU6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuX2E/XCJ0cmFuc3BhcmVudFwiOiEodGhpcy5fYTwxKSYmKGJbYSh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYiwhMCldfHwhMSl9LHRvRmlsdGVyOmZ1bmN0aW9uKGUpe3ZhciB0PVwiI1wiK2wodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IsdGhpcy5fYSksbj10LG89dGhpcy5fZ3JhZGllbnRUeXBlP1wiR3JhZGllbnRUeXBlID0gMSwgXCI6XCJcIjtpZihlKXt2YXIgaT1yKGUpO249XCIjXCIrbChpLl9yLGkuX2csaS5fYixpLl9hKX1yZXR1cm5cInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChcIitvK1wic3RhcnRDb2xvcnN0cj1cIit0K1wiLGVuZENvbG9yc3RyPVwiK24rXCIpXCJ9LHRvU3RyaW5nOmZ1bmN0aW9uKGUpe3ZhciB0PSEhZTtlPWV8fHRoaXMuX2Zvcm1hdDt2YXIgbj0hMSxyPXRoaXMuX2E8MSYmdGhpcy5fYT49MDtyZXR1cm4gdHx8IXJ8fFwiaGV4XCIhPT1lJiZcImhleDZcIiE9PWUmJlwiaGV4M1wiIT09ZSYmXCJoZXg0XCIhPT1lJiZcImhleDhcIiE9PWUmJlwibmFtZVwiIT09ZT8oXCJyZ2JcIj09PWUmJihuPXRoaXMudG9SZ2JTdHJpbmcoKSksXCJwcmdiXCI9PT1lJiYobj10aGlzLnRvUGVyY2VudGFnZVJnYlN0cmluZygpKSxcImhleFwiIT09ZSYmXCJoZXg2XCIhPT1lfHwobj10aGlzLnRvSGV4U3RyaW5nKCkpLFwiaGV4M1wiPT09ZSYmKG49dGhpcy50b0hleFN0cmluZyghMCkpLFwiaGV4NFwiPT09ZSYmKG49dGhpcy50b0hleDhTdHJpbmcoITApKSxcImhleDhcIj09PWUmJihuPXRoaXMudG9IZXg4U3RyaW5nKCkpLFwibmFtZVwiPT09ZSYmKG49dGhpcy50b05hbWUoKSksXCJoc2xcIj09PWUmJihuPXRoaXMudG9Ic2xTdHJpbmcoKSksXCJoc3ZcIj09PWUmJihuPXRoaXMudG9Ic3ZTdHJpbmcoKSksbnx8dGhpcy50b0hleFN0cmluZygpKTpcIm5hbWVcIj09PWUmJjA9PT10aGlzLl9hP3RoaXMudG9OYW1lKCk6dGhpcy50b1JnYlN0cmluZygpfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiByKHRoaXMudG9TdHJpbmcoKSl9LF9hcHBseU1vZGlmaWNhdGlvbjpmdW5jdGlvbihlLHQpe3ZhciBuPWUuYXBwbHkobnVsbCxbdGhpc10uY29uY2F0KFtdLnNsaWNlLmNhbGwodCkpKTtyZXR1cm4gdGhpcy5fcj1uLl9yLHRoaXMuX2c9bi5fZyx0aGlzLl9iPW4uX2IsdGhpcy5zZXRBbHBoYShuLl9hKSx0aGlzfSxsaWdodGVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGYsYXJndW1lbnRzKX0sYnJpZ2h0ZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oZCxhcmd1bWVudHMpfSxkYXJrZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24ocCxhcmd1bWVudHMpfSxkZXNhdHVyYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKHMsYXJndW1lbnRzKX0sc2F0dXJhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oYyxhcmd1bWVudHMpfSxncmV5c2NhbGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24odSxhcmd1bWVudHMpfSxzcGluOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGgsYXJndW1lbnRzKX0sX2FwcGx5Q29tYmluYXRpb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5hcHBseShudWxsLFt0aGlzXS5jb25jYXQoW10uc2xpY2UuY2FsbCh0KSkpfSxhbmFsb2dvdXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihDLGFyZ3VtZW50cyl9LGNvbXBsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihnLGFyZ3VtZW50cyl9LG1vbm9jaHJvbWF0aWM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbih5LGFyZ3VtZW50cyl9LHNwbGl0Y29tcGxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKG0sYXJndW1lbnRzKX0sdHJpYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbih2LFszXSl9LHRldHJhZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKHYsWzRdKX19LHIuZnJvbVJhdGlvPWZ1bmN0aW9uKHQsbil7aWYoXCJvYmplY3RcIj09ZSh0KSl7dmFyIG89e307Zm9yKHZhciBpIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShpKSYmKG9baV09XCJhXCI9PT1pP3RbaV06Uyh0W2ldKSk7dD1vfXJldHVybiByKHQsbil9LHIuZXF1YWxzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuISghZXx8IXQpJiZyKGUpLnRvUmdiU3RyaW5nKCk9PXIodCkudG9SZ2JTdHJpbmcoKX0sci5yYW5kb209ZnVuY3Rpb24oKXtyZXR1cm4gci5mcm9tUmF0aW8oe3I6TWF0aC5yYW5kb20oKSxnOk1hdGgucmFuZG9tKCksYjpNYXRoLnJhbmRvbSgpfSl9LHIubWl4PWZ1bmN0aW9uKGUsdCxuKXtuPTA9PT1uPzA6bnx8NTA7dmFyIG89cihlKS50b1JnYigpLGk9cih0KS50b1JnYigpLGE9bi8xMDA7cmV0dXJuIHIoe3I6KGkuci1vLnIpKmErby5yLGc6KGkuZy1vLmcpKmErby5nLGI6KGkuYi1vLmIpKmErby5iLGE6KGkuYS1vLmEpKmErby5hfSl9LHIucmVhZGFiaWxpdHk9ZnVuY3Rpb24oZSx0KXt2YXIgbj1yKGUpLG89cih0KTtyZXR1cm4oTWF0aC5tYXgobi5nZXRMdW1pbmFuY2UoKSxvLmdldEx1bWluYW5jZSgpKSsuMDUpLyhNYXRoLm1pbihuLmdldEx1bWluYW5jZSgpLG8uZ2V0THVtaW5hbmNlKCkpKy4wNSl9LHIuaXNSZWFkYWJsZT1mdW5jdGlvbihlLHQsbil7dmFyIG8saSxhLGwscyxjPXIucmVhZGFiaWxpdHkoZSx0KTtzd2l0Y2goaT0hMSwoYT1uLFwiQUFcIiE9PShsPSgoYT1hfHx7bGV2ZWw6XCJBQVwiLHNpemU6XCJzbWFsbFwifSkubGV2ZWx8fFwiQUFcIikudG9VcHBlckNhc2UoKSkmJlwiQUFBXCIhPT1sJiYobD1cIkFBXCIpLFwic21hbGxcIiE9PShzPShhLnNpemV8fFwic21hbGxcIikudG9Mb3dlckNhc2UoKSkmJlwibGFyZ2VcIiE9PXMmJihzPVwic21hbGxcIiksbz17bGV2ZWw6bCxzaXplOnN9KS5sZXZlbCtvLnNpemUpe2Nhc2VcIkFBc21hbGxcIjpjYXNlXCJBQUFsYXJnZVwiOmk9Yz49NC41O2JyZWFrO2Nhc2VcIkFBbGFyZ2VcIjppPWM+PTM7YnJlYWs7Y2FzZVwiQUFBc21hbGxcIjppPWM+PTd9cmV0dXJuIGl9LHIubW9zdFJlYWRhYmxlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgbyxpLGEsbCxzPW51bGwsYz0wO2k9KG49bnx8e30pLmluY2x1ZGVGYWxsYmFja0NvbG9ycyxhPW4ubGV2ZWwsbD1uLnNpemU7Zm9yKHZhciB1PTA7dTx0Lmxlbmd0aDt1KyspKG89ci5yZWFkYWJpbGl0eShlLHRbdV0pKT5jJiYoYz1vLHM9cih0W3VdKSk7cmV0dXJuIHIuaXNSZWFkYWJsZShlLHMse2xldmVsOmEsc2l6ZTpsfSl8fCFpP3M6KG4uaW5jbHVkZUZhbGxiYWNrQ29sb3JzPSExLHIubW9zdFJlYWRhYmxlKGUsW1wiI2ZmZlwiLFwiIzAwMFwiXSxuKSl9O3ZhciB3PXIubmFtZXM9e2FsaWNlYmx1ZTpcImYwZjhmZlwiLGFudGlxdWV3aGl0ZTpcImZhZWJkN1wiLGFxdWE6XCIwZmZcIixhcXVhbWFyaW5lOlwiN2ZmZmQ0XCIsYXp1cmU6XCJmMGZmZmZcIixiZWlnZTpcImY1ZjVkY1wiLGJpc3F1ZTpcImZmZTRjNFwiLGJsYWNrOlwiMDAwXCIsYmxhbmNoZWRhbG1vbmQ6XCJmZmViY2RcIixibHVlOlwiMDBmXCIsYmx1ZXZpb2xldDpcIjhhMmJlMlwiLGJyb3duOlwiYTUyYTJhXCIsYnVybHl3b29kOlwiZGViODg3XCIsYnVybnRzaWVubmE6XCJlYTdlNWRcIixjYWRldGJsdWU6XCI1ZjllYTBcIixjaGFydHJldXNlOlwiN2ZmZjAwXCIsY2hvY29sYXRlOlwiZDI2OTFlXCIsY29yYWw6XCJmZjdmNTBcIixjb3JuZmxvd2VyYmx1ZTpcIjY0OTVlZFwiLGNvcm5zaWxrOlwiZmZmOGRjXCIsY3JpbXNvbjpcImRjMTQzY1wiLGN5YW46XCIwZmZcIixkYXJrYmx1ZTpcIjAwMDA4YlwiLGRhcmtjeWFuOlwiMDA4YjhiXCIsZGFya2dvbGRlbnJvZDpcImI4ODYwYlwiLGRhcmtncmF5OlwiYTlhOWE5XCIsZGFya2dyZWVuOlwiMDA2NDAwXCIsZGFya2dyZXk6XCJhOWE5YTlcIixkYXJra2hha2k6XCJiZGI3NmJcIixkYXJrbWFnZW50YTpcIjhiMDA4YlwiLGRhcmtvbGl2ZWdyZWVuOlwiNTU2YjJmXCIsZGFya29yYW5nZTpcImZmOGMwMFwiLGRhcmtvcmNoaWQ6XCI5OTMyY2NcIixkYXJrcmVkOlwiOGIwMDAwXCIsZGFya3NhbG1vbjpcImU5OTY3YVwiLGRhcmtzZWFncmVlbjpcIjhmYmM4ZlwiLGRhcmtzbGF0ZWJsdWU6XCI0ODNkOGJcIixkYXJrc2xhdGVncmF5OlwiMmY0ZjRmXCIsZGFya3NsYXRlZ3JleTpcIjJmNGY0ZlwiLGRhcmt0dXJxdW9pc2U6XCIwMGNlZDFcIixkYXJrdmlvbGV0OlwiOTQwMGQzXCIsZGVlcHBpbms6XCJmZjE0OTNcIixkZWVwc2t5Ymx1ZTpcIjAwYmZmZlwiLGRpbWdyYXk6XCI2OTY5NjlcIixkaW1ncmV5OlwiNjk2OTY5XCIsZG9kZ2VyYmx1ZTpcIjFlOTBmZlwiLGZpcmVicmljazpcImIyMjIyMlwiLGZsb3JhbHdoaXRlOlwiZmZmYWYwXCIsZm9yZXN0Z3JlZW46XCIyMjhiMjJcIixmdWNoc2lhOlwiZjBmXCIsZ2FpbnNib3JvOlwiZGNkY2RjXCIsZ2hvc3R3aGl0ZTpcImY4ZjhmZlwiLGdvbGQ6XCJmZmQ3MDBcIixnb2xkZW5yb2Q6XCJkYWE1MjBcIixncmF5OlwiODA4MDgwXCIsZ3JlZW46XCIwMDgwMDBcIixncmVlbnllbGxvdzpcImFkZmYyZlwiLGdyZXk6XCI4MDgwODBcIixob25leWRldzpcImYwZmZmMFwiLGhvdHBpbms6XCJmZjY5YjRcIixpbmRpYW5yZWQ6XCJjZDVjNWNcIixpbmRpZ286XCI0YjAwODJcIixpdm9yeTpcImZmZmZmMFwiLGtoYWtpOlwiZjBlNjhjXCIsbGF2ZW5kZXI6XCJlNmU2ZmFcIixsYXZlbmRlcmJsdXNoOlwiZmZmMGY1XCIsbGF3bmdyZWVuOlwiN2NmYzAwXCIsbGVtb25jaGlmZm9uOlwiZmZmYWNkXCIsbGlnaHRibHVlOlwiYWRkOGU2XCIsbGlnaHRjb3JhbDpcImYwODA4MFwiLGxpZ2h0Y3lhbjpcImUwZmZmZlwiLGxpZ2h0Z29sZGVucm9keWVsbG93OlwiZmFmYWQyXCIsbGlnaHRncmF5OlwiZDNkM2QzXCIsbGlnaHRncmVlbjpcIjkwZWU5MFwiLGxpZ2h0Z3JleTpcImQzZDNkM1wiLGxpZ2h0cGluazpcImZmYjZjMVwiLGxpZ2h0c2FsbW9uOlwiZmZhMDdhXCIsbGlnaHRzZWFncmVlbjpcIjIwYjJhYVwiLGxpZ2h0c2t5Ymx1ZTpcIjg3Y2VmYVwiLGxpZ2h0c2xhdGVncmF5OlwiNzg5XCIsbGlnaHRzbGF0ZWdyZXk6XCI3ODlcIixsaWdodHN0ZWVsYmx1ZTpcImIwYzRkZVwiLGxpZ2h0eWVsbG93OlwiZmZmZmUwXCIsbGltZTpcIjBmMFwiLGxpbWVncmVlbjpcIjMyY2QzMlwiLGxpbmVuOlwiZmFmMGU2XCIsbWFnZW50YTpcImYwZlwiLG1hcm9vbjpcIjgwMDAwMFwiLG1lZGl1bWFxdWFtYXJpbmU6XCI2NmNkYWFcIixtZWRpdW1ibHVlOlwiMDAwMGNkXCIsbWVkaXVtb3JjaGlkOlwiYmE1NWQzXCIsbWVkaXVtcHVycGxlOlwiOTM3MGRiXCIsbWVkaXVtc2VhZ3JlZW46XCIzY2IzNzFcIixtZWRpdW1zbGF0ZWJsdWU6XCI3YjY4ZWVcIixtZWRpdW1zcHJpbmdncmVlbjpcIjAwZmE5YVwiLG1lZGl1bXR1cnF1b2lzZTpcIjQ4ZDFjY1wiLG1lZGl1bXZpb2xldHJlZDpcImM3MTU4NVwiLG1pZG5pZ2h0Ymx1ZTpcIjE5MTk3MFwiLG1pbnRjcmVhbTpcImY1ZmZmYVwiLG1pc3R5cm9zZTpcImZmZTRlMVwiLG1vY2Nhc2luOlwiZmZlNGI1XCIsbmF2YWpvd2hpdGU6XCJmZmRlYWRcIixuYXZ5OlwiMDAwMDgwXCIsb2xkbGFjZTpcImZkZjVlNlwiLG9saXZlOlwiODA4MDAwXCIsb2xpdmVkcmFiOlwiNmI4ZTIzXCIsb3JhbmdlOlwiZmZhNTAwXCIsb3JhbmdlcmVkOlwiZmY0NTAwXCIsb3JjaGlkOlwiZGE3MGQ2XCIscGFsZWdvbGRlbnJvZDpcImVlZThhYVwiLHBhbGVncmVlbjpcIjk4ZmI5OFwiLHBhbGV0dXJxdW9pc2U6XCJhZmVlZWVcIixwYWxldmlvbGV0cmVkOlwiZGI3MDkzXCIscGFwYXlhd2hpcDpcImZmZWZkNVwiLHBlYWNocHVmZjpcImZmZGFiOVwiLHBlcnU6XCJjZDg1M2ZcIixwaW5rOlwiZmZjMGNiXCIscGx1bTpcImRkYTBkZFwiLHBvd2RlcmJsdWU6XCJiMGUwZTZcIixwdXJwbGU6XCI4MDAwODBcIixyZWJlY2NhcHVycGxlOlwiNjYzMzk5XCIscmVkOlwiZjAwXCIscm9zeWJyb3duOlwiYmM4ZjhmXCIscm95YWxibHVlOlwiNDE2OWUxXCIsc2FkZGxlYnJvd246XCI4YjQ1MTNcIixzYWxtb246XCJmYTgwNzJcIixzYW5keWJyb3duOlwiZjRhNDYwXCIsc2VhZ3JlZW46XCIyZThiNTdcIixzZWFzaGVsbDpcImZmZjVlZVwiLHNpZW5uYTpcImEwNTIyZFwiLHNpbHZlcjpcImMwYzBjMFwiLHNreWJsdWU6XCI4N2NlZWJcIixzbGF0ZWJsdWU6XCI2YTVhY2RcIixzbGF0ZWdyYXk6XCI3MDgwOTBcIixzbGF0ZWdyZXk6XCI3MDgwOTBcIixzbm93OlwiZmZmYWZhXCIsc3ByaW5nZ3JlZW46XCIwMGZmN2ZcIixzdGVlbGJsdWU6XCI0NjgyYjRcIix0YW46XCJkMmI0OGNcIix0ZWFsOlwiMDA4MDgwXCIsdGhpc3RsZTpcImQ4YmZkOFwiLHRvbWF0bzpcImZmNjM0N1wiLHR1cnF1b2lzZTpcIjQwZTBkMFwiLHZpb2xldDpcImVlODJlZVwiLHdoZWF0OlwiZjVkZWIzXCIsd2hpdGU6XCJmZmZcIix3aGl0ZXNtb2tlOlwiZjVmNWY1XCIseWVsbG93OlwiZmYwXCIseWVsbG93Z3JlZW46XCI5YWNkMzJcIn0sYj1yLmhleE5hbWVzPWZ1bmN0aW9uKGUpe3ZhciB0PXt9O2Zvcih2YXIgbiBpbiBlKWUuaGFzT3duUHJvcGVydHkobikmJih0W2Vbbl1dPW4pO3JldHVybiB0fSh3KTtmdW5jdGlvbiB4KGUpe3JldHVybiBlPXBhcnNlRmxvYXQoZSksKGlzTmFOKGUpfHxlPDB8fGU+MSkmJihlPTEpLGV9ZnVuY3Rpb24gXyhlLHQpeyhmdW5jdGlvbihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZSYmLTEhPWUuaW5kZXhPZihcIi5cIikmJjE9PT1wYXJzZUZsb2F0KGUpfSkoZSkmJihlPVwiMTAwJVwiKTt2YXIgbj1mdW5jdGlvbihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZSYmLTEhPWUuaW5kZXhPZihcIiVcIil9KGUpO3JldHVybiBlPU1hdGgubWluKHQsTWF0aC5tYXgoMCxwYXJzZUZsb2F0KGUpKSksbiYmKGU9cGFyc2VJbnQoZSp0LDEwKS8xMDApLE1hdGguYWJzKGUtdCk8MWUtNj8xOmUldC9wYXJzZUZsb2F0KHQpfWZ1bmN0aW9uIE8oZSl7cmV0dXJuIE1hdGgubWluKDEsTWF0aC5tYXgoMCxlKSl9ZnVuY3Rpb24gTChlKXtyZXR1cm4gcGFyc2VJbnQoZSwxNil9ZnVuY3Rpb24gRShlKXtyZXR1cm4gMT09ZS5sZW5ndGg/XCIwXCIrZTpcIlwiK2V9ZnVuY3Rpb24gUyhlKXtyZXR1cm4gZTw9MSYmKGU9MTAwKmUrXCIlXCIpLGV9ZnVuY3Rpb24gaihlKXtyZXR1cm4gTWF0aC5yb3VuZCgyNTUqcGFyc2VGbG9hdChlKSkudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIE0oZSl7cmV0dXJuIEwoZSkvMjU1fXZhciBrLFIsUCxJPShSPVwiW1xcXFxzfFxcXFwoXSsoXCIrKGs9XCIoPzpbLVxcXFwrXT9cXFxcZCpcXFxcLlxcXFxkKyU/KXwoPzpbLVxcXFwrXT9cXFxcZCslPylcIikrXCIpWyx8XFxcXHNdKyhcIitrK1wiKVssfFxcXFxzXSsoXCIraytcIilcXFxccypcXFxcKT9cIixQPVwiW1xcXFxzfFxcXFwoXSsoXCIraytcIilbLHxcXFxcc10rKFwiK2srXCIpWyx8XFxcXHNdKyhcIitrK1wiKVssfFxcXFxzXSsoXCIraytcIilcXFxccypcXFxcKT9cIix7Q1NTX1VOSVQ6bmV3IFJlZ0V4cChrKSxyZ2I6bmV3IFJlZ0V4cChcInJnYlwiK1IpLHJnYmE6bmV3IFJlZ0V4cChcInJnYmFcIitQKSxoc2w6bmV3IFJlZ0V4cChcImhzbFwiK1IpLGhzbGE6bmV3IFJlZ0V4cChcImhzbGFcIitQKSxoc3Y6bmV3IFJlZ0V4cChcImhzdlwiK1IpLGhzdmE6bmV3IFJlZ0V4cChcImhzdmFcIitQKSxoZXgzOi9eIz8oWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkkLyxoZXg2Oi9eIz8oWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkkLyxoZXg0Oi9eIz8oWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pJC8saGV4ODovXiM/KFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KSQvfSk7ZnVuY3Rpb24gQShlKXtyZXR1cm4hIUkuQ1NTX1VOSVQuZXhlYyhlKX1yZXR1cm4gcn0oKX19LG89e307ZnVuY3Rpb24gaShlKXt2YXIgdD1vW2VdO2lmKHZvaWQgMCE9PXQpcmV0dXJuIHQuZXhwb3J0czt2YXIgbj1vW2VdPXtpZDplLGxvYWRlZDohMSxleHBvcnRzOnt9fTtyZXR1cm4gcltlXS5jYWxsKG4uZXhwb3J0cyxuLG4uZXhwb3J0cyxpKSxuLmxvYWRlZD0hMCxuLmV4cG9ydHN9aS5uPWU9Pnt2YXIgdD1lJiZlLl9fZXNNb2R1bGU/KCk9PmUuZGVmYXVsdDooKT0+ZTtyZXR1cm4gaS5kKHQse2E6dH0pLHR9LGkuZD0oZSx0KT0+e2Zvcih2YXIgbiBpbiB0KWkubyh0LG4pJiYhaS5vKGUsbikmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITAsZ2V0OnRbbl19KX0saS5nPWZ1bmN0aW9uKCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGdsb2JhbFRoaXMpcmV0dXJuIGdsb2JhbFRoaXM7dHJ5e3JldHVybiB0aGlzfHxuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpfWNhdGNoKGUpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvd319KCksaS5vPShlLHQpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KSxpLnI9ZT0+e1widW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZTpcIk1vZHVsZVwifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LGkubm1kPWU9PihlLnBhdGhzPVtdLGUuY2hpbGRyZW58fChlLmNoaWxkcmVuPVtdKSxlKTt2YXIgYT1pKDM0MSksbD10O2Zvcih2YXIgcyBpbiBhKWxbc109YVtzXTthLl9fZXNNb2R1bGUmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSwzMTk4OihlLHQsbik9Pnt2YXIgcj1OYU4sbz1cIltvYmplY3QgU3ltYm9sXVwiLGk9L15cXHMrfFxccyskL2csYT0vXlstK10weFswLTlhLWZdKyQvaSxsPS9eMGJbMDFdKyQvaSxzPS9eMG9bMC03XSskL2ksYz1wYXJzZUludCx1PVwib2JqZWN0XCI9PXR5cGVvZiBuLmcmJm4uZyYmbi5nLk9iamVjdD09PU9iamVjdCYmbi5nLGY9XCJvYmplY3RcIj09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLGQ9dXx8Znx8RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpLHA9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxoPU1hdGgubWF4LGc9TWF0aC5taW4sdj1mdW5jdGlvbigpe3JldHVybiBkLkRhdGUubm93KCl9O2Z1bmN0aW9uIG0oZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuISFlJiYoXCJvYmplY3RcIj09dHx8XCJmdW5jdGlvblwiPT10KX1mdW5jdGlvbiBDKGUpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXJldHVybiBlO2lmKGZ1bmN0aW9uKGUpe3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiBlfHxmdW5jdGlvbihlKXtyZXR1cm4hIWUmJlwib2JqZWN0XCI9PXR5cGVvZiBlfShlKSYmcC5jYWxsKGUpPT1vfShlKSlyZXR1cm4gcjtpZihtKGUpKXt2YXIgdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnZhbHVlT2Y/ZS52YWx1ZU9mKCk6ZTtlPW0odCk/dCtcIlwiOnR9aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpcmV0dXJuIDA9PT1lP2U6K2U7ZT1lLnJlcGxhY2UoaSxcIlwiKTt2YXIgbj1sLnRlc3QoZSk7cmV0dXJuIG58fHMudGVzdChlKT9jKGUuc2xpY2UoMiksbj8yOjgpOmEudGVzdChlKT9yOitlfWUuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7dmFyIHIsbyxpLGEsbCxzLGM9MCx1PSExLGY9ITEsZD0hMDtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBhIGZ1bmN0aW9uXCIpO2Z1bmN0aW9uIHAodCl7dmFyIG49cixpPW87cmV0dXJuIHI9bz12b2lkIDAsYz10LGE9ZS5hcHBseShpLG4pfWZ1bmN0aW9uIHkoZSl7dmFyIG49ZS1zO3JldHVybiB2b2lkIDA9PT1zfHxuPj10fHxuPDB8fGYmJmUtYz49aX1mdW5jdGlvbiB3KCl7dmFyIGU9digpO2lmKHkoZSkpcmV0dXJuIGIoZSk7bD1zZXRUaW1lb3V0KHcsZnVuY3Rpb24oZSl7dmFyIG49dC0oZS1zKTtyZXR1cm4gZj9nKG4saS0oZS1jKSk6bn0oZSkpfWZ1bmN0aW9uIGIoZSl7cmV0dXJuIGw9dm9pZCAwLGQmJnI/cChlKToocj1vPXZvaWQgMCxhKX1mdW5jdGlvbiB4KCl7dmFyIGU9digpLG49eShlKTtpZihyPWFyZ3VtZW50cyxvPXRoaXMscz1lLG4pe2lmKHZvaWQgMD09PWwpcmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBjPWUsbD1zZXRUaW1lb3V0KHcsdCksdT9wKGUpOmF9KHMpO2lmKGYpcmV0dXJuIGw9c2V0VGltZW91dCh3LHQpLHAocyl9cmV0dXJuIHZvaWQgMD09PWwmJihsPXNldFRpbWVvdXQodyx0KSksYX1yZXR1cm4gdD1DKHQpfHwwLG0obikmJih1PSEhbi5sZWFkaW5nLGk9KGY9XCJtYXhXYWl0XCJpbiBuKT9oKEMobi5tYXhXYWl0KXx8MCx0KTppLGQ9XCJ0cmFpbGluZ1wiaW4gbj8hIW4udHJhaWxpbmc6ZCkseC5jYW5jZWw9ZnVuY3Rpb24oKXt2b2lkIDAhPT1sJiZjbGVhclRpbWVvdXQobCksYz0wLHI9cz1vPWw9dm9pZCAwfSx4LmZsdXNoPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PWw/YTpiKHYoKSl9LHh9fSwyNTI1OmU9PntcInVzZSBzdHJpY3RcIjt2YXIgdD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLG49T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxyPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dHJ5e2lmKCFPYmplY3QuYXNzaWduKXJldHVybiExO3ZhciBlPW5ldyBTdHJpbmcoXCJhYmNcIik7aWYoZVs1XT1cImRlXCIsXCI1XCI9PT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKVswXSlyZXR1cm4hMTtmb3IodmFyIHQ9e30sbj0wO248MTA7bisrKXRbXCJfXCIrU3RyaW5nLmZyb21DaGFyQ29kZShuKV09bjtpZihcIjAxMjM0NTY3ODlcIiE9PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KSkuam9pbihcIlwiKSlyZXR1cm4hMTt2YXIgcj17fTtyZXR1cm5cImFiY2RlZmdoaWprbG1ub3BxcnN0XCIuc3BsaXQoXCJcIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cltlXT1lfSkpLFwiYWJjZGVmZ2hpamtsbW5vcHFyc3RcIj09PU9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30scikpLmpvaW4oXCJcIil9Y2F0Y2goZSl7cmV0dXJuITF9fSgpP09iamVjdC5hc3NpZ246ZnVuY3Rpb24oZSxvKXtmb3IodmFyIGksYSxsPWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkXCIpO3JldHVybiBPYmplY3QoZSl9KGUpLHM9MTtzPGFyZ3VtZW50cy5sZW5ndGg7cysrKXtmb3IodmFyIGMgaW4gaT1PYmplY3QoYXJndW1lbnRzW3NdKSluLmNhbGwoaSxjKSYmKGxbY109aVtjXSk7aWYodCl7YT10KGkpO2Zvcih2YXIgdT0wO3U8YS5sZW5ndGg7dSsrKXIuY2FsbChpLGFbdV0pJiYobFthW3VdXT1pW2FbdV1dKX19cmV0dXJuIGx9fSw4NzAyOihlLHQpPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIG49XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yLHI9bj9TeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKTo2MDEwMyxvPW4/U3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKTo2MDEwNixpPW4/U3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpOjYwMTA3LGE9bj9TeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIik6NjAxMDgsbD1uP1N5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKTo2MDExNCxzPW4/U3ltYm9sLmZvcihcInJlYWN0LnByb3ZpZGVyXCIpOjYwMTA5LGM9bj9TeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKTo2MDExMCx1PW4/U3ltYm9sLmZvcihcInJlYWN0LmFzeW5jX21vZGVcIik6NjAxMTEsZj1uP1N5bWJvbC5mb3IoXCJyZWFjdC5jb25jdXJyZW50X21vZGVcIik6NjAxMTEsZD1uP1N5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKTo2MDExMixwPW4/U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpOjYwMTEzLGg9bj9TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VfbGlzdFwiKTo2MDEyMCxnPW4/U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIik6NjAxMTUsdj1uP1N5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpOjYwMTE2LG09bj9TeW1ib2wuZm9yKFwicmVhY3QuYmxvY2tcIik6NjAxMjEsQz1uP1N5bWJvbC5mb3IoXCJyZWFjdC5mdW5kYW1lbnRhbFwiKTo2MDExNyx5PW4/U3ltYm9sLmZvcihcInJlYWN0LnJlc3BvbmRlclwiKTo2MDExOCx3PW4/U3ltYm9sLmZvcihcInJlYWN0LnNjb3BlXCIpOjYwMTE5O2Z1bmN0aW9uIGIoZSl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lKXt2YXIgdD1lLiQkdHlwZW9mO3N3aXRjaCh0KXtjYXNlIHI6c3dpdGNoKGU9ZS50eXBlKXtjYXNlIHU6Y2FzZSBmOmNhc2UgaTpjYXNlIGw6Y2FzZSBhOmNhc2UgcDpyZXR1cm4gZTtkZWZhdWx0OnN3aXRjaChlPWUmJmUuJCR0eXBlb2Ype2Nhc2UgYzpjYXNlIGQ6Y2FzZSB2OmNhc2UgZzpjYXNlIHM6cmV0dXJuIGU7ZGVmYXVsdDpyZXR1cm4gdH19Y2FzZSBvOnJldHVybiB0fX19ZnVuY3Rpb24geChlKXtyZXR1cm4gYihlKT09PWZ9dC5Gb3J3YXJkUmVmPWQsdC5pc1ZhbGlkRWxlbWVudFR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGV8fFwiZnVuY3Rpb25cIj09dHlwZW9mIGV8fGU9PT1pfHxlPT09Znx8ZT09PWx8fGU9PT1hfHxlPT09cHx8ZT09PWh8fFwib2JqZWN0XCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmKGUuJCR0eXBlb2Y9PT12fHxlLiQkdHlwZW9mPT09Z3x8ZS4kJHR5cGVvZj09PXN8fGUuJCR0eXBlb2Y9PT1jfHxlLiQkdHlwZW9mPT09ZHx8ZS4kJHR5cGVvZj09PUN8fGUuJCR0eXBlb2Y9PT15fHxlLiQkdHlwZW9mPT09d3x8ZS4kJHR5cGVvZj09PW0pfX0sOTE4NTooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPW4oODcwMil9LDE1MzU6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO3ZhciByPW4oMjUyNSksbz02MDEwMyxpPTYwMTA2O3QuRnJhZ21lbnQ9NjAxMDcsdC5TdHJpY3RNb2RlPTYwMTA4LHQuUHJvZmlsZXI9NjAxMTQ7dmFyIGE9NjAxMDksbD02MDExMCxzPTYwMTEyO3QuU3VzcGVuc2U9NjAxMTM7dmFyIGM9NjAxMTUsdT02MDExNjtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3Ipe3ZhciBmPVN5bWJvbC5mb3I7bz1mKFwicmVhY3QuZWxlbWVudFwiKSxpPWYoXCJyZWFjdC5wb3J0YWxcIiksdC5GcmFnbWVudD1mKFwicmVhY3QuZnJhZ21lbnRcIiksdC5TdHJpY3RNb2RlPWYoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKSx0LlByb2ZpbGVyPWYoXCJyZWFjdC5wcm9maWxlclwiKSxhPWYoXCJyZWFjdC5wcm92aWRlclwiKSxsPWYoXCJyZWFjdC5jb250ZXh0XCIpLHM9ZihcInJlYWN0LmZvcndhcmRfcmVmXCIpLHQuU3VzcGVuc2U9ZihcInJlYWN0LnN1c3BlbnNlXCIpLGM9ZihcInJlYWN0Lm1lbW9cIiksdT1mKFwicmVhY3QubGF6eVwiKX12YXIgZD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcjtmdW5jdGlvbiBwKGUpe2Zvcih2YXIgdD1cImh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9lcnJvci1kZWNvZGVyLmh0bWw/aW52YXJpYW50PVwiK2Usbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdCs9XCImYXJnc1tdPVwiK2VuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbbl0pO3JldHVyblwiTWluaWZpZWQgUmVhY3QgZXJyb3IgI1wiK2UrXCI7IHZpc2l0IFwiK3QrXCIgZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLlwifXZhciBoPXtpc01vdW50ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZW5xdWV1ZUZvcmNlVXBkYXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlUmVwbGFjZVN0YXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlU2V0U3RhdGU6ZnVuY3Rpb24oKXt9fSxnPXt9O2Z1bmN0aW9uIHYoZSx0LG4pe3RoaXMucHJvcHM9ZSx0aGlzLmNvbnRleHQ9dCx0aGlzLnJlZnM9Zyx0aGlzLnVwZGF0ZXI9bnx8aH1mdW5jdGlvbiBtKCl7fWZ1bmN0aW9uIEMoZSx0LG4pe3RoaXMucHJvcHM9ZSx0aGlzLmNvbnRleHQ9dCx0aGlzLnJlZnM9Zyx0aGlzLnVwZGF0ZXI9bnx8aH12LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXt9LHYucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKGUsdCl7aWYoXCJvYmplY3RcIiE9dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJm51bGwhPWUpdGhyb3cgRXJyb3IocCg4NSkpO3RoaXMudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUodGhpcyxlLHQsXCJzZXRTdGF0ZVwiKX0sdi5wcm90b3R5cGUuZm9yY2VVcGRhdGU9ZnVuY3Rpb24oZSl7dGhpcy51cGRhdGVyLmVucXVldWVGb3JjZVVwZGF0ZSh0aGlzLGUsXCJmb3JjZVVwZGF0ZVwiKX0sbS5wcm90b3R5cGU9di5wcm90b3R5cGU7dmFyIHk9Qy5wcm90b3R5cGU9bmV3IG07eS5jb25zdHJ1Y3Rvcj1DLHIoeSx2LnByb3RvdHlwZSkseS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMDt2YXIgdz17Y3VycmVudDpudWxsfSxiPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkseD17a2V5OiEwLHJlZjohMCxfX3NlbGY6ITAsX19zb3VyY2U6ITB9O2Z1bmN0aW9uIF8oZSx0LG4pe3ZhciByLGk9e30sYT1udWxsLGw9bnVsbDtpZihudWxsIT10KWZvcihyIGluIHZvaWQgMCE9PXQucmVmJiYobD10LnJlZiksdm9pZCAwIT09dC5rZXkmJihhPVwiXCIrdC5rZXkpLHQpYi5jYWxsKHQscikmJiF4Lmhhc093blByb3BlcnR5KHIpJiYoaVtyXT10W3JdKTt2YXIgcz1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PXMpaS5jaGlsZHJlbj1uO2Vsc2UgaWYoMTxzKXtmb3IodmFyIGM9QXJyYXkocyksdT0wO3U8czt1KyspY1t1XT1hcmd1bWVudHNbdSsyXTtpLmNoaWxkcmVuPWN9aWYoZSYmZS5kZWZhdWx0UHJvcHMpZm9yKHIgaW4gcz1lLmRlZmF1bHRQcm9wcyl2b2lkIDA9PT1pW3JdJiYoaVtyXT1zW3JdKTtyZXR1cm57JCR0eXBlb2Y6byx0eXBlOmUsa2V5OmEscmVmOmwscHJvcHM6aSxfb3duZXI6dy5jdXJyZW50fX1mdW5jdGlvbiBPKGUpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmZS4kJHR5cGVvZj09PW99dmFyIEw9L1xcLysvZztmdW5jdGlvbiBFKGUsdCl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lJiZudWxsIT1lLmtleT9mdW5jdGlvbihlKXt2YXIgdD17XCI9XCI6XCI9MFwiLFwiOlwiOlwiPTJcIn07cmV0dXJuXCIkXCIrZS5yZXBsYWNlKC9bPTpdL2csKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSkpfShcIlwiK2Uua2V5KTp0LnRvU3RyaW5nKDM2KX1mdW5jdGlvbiBTKGUsdCxuLHIsYSl7dmFyIGw9dHlwZW9mIGU7XCJ1bmRlZmluZWRcIiE9PWwmJlwiYm9vbGVhblwiIT09bHx8KGU9bnVsbCk7dmFyIHM9ITE7aWYobnVsbD09PWUpcz0hMDtlbHNlIHN3aXRjaChsKXtjYXNlXCJzdHJpbmdcIjpjYXNlXCJudW1iZXJcIjpzPSEwO2JyZWFrO2Nhc2VcIm9iamVjdFwiOnN3aXRjaChlLiQkdHlwZW9mKXtjYXNlIG86Y2FzZSBpOnM9ITB9fWlmKHMpcmV0dXJuIGE9YShzPWUpLGU9XCJcIj09PXI/XCIuXCIrRShzLDApOnIsQXJyYXkuaXNBcnJheShhKT8obj1cIlwiLG51bGwhPWUmJihuPWUucmVwbGFjZShMLFwiJCYvXCIpK1wiL1wiKSxTKGEsdCxuLFwiXCIsKGZ1bmN0aW9uKGUpe3JldHVybiBlfSkpKTpudWxsIT1hJiYoTyhhKSYmKGE9ZnVuY3Rpb24oZSx0KXtyZXR1cm57JCR0eXBlb2Y6byx0eXBlOmUudHlwZSxrZXk6dCxyZWY6ZS5yZWYscHJvcHM6ZS5wcm9wcyxfb3duZXI6ZS5fb3duZXJ9fShhLG4rKCFhLmtleXx8cyYmcy5rZXk9PT1hLmtleT9cIlwiOihcIlwiK2Eua2V5KS5yZXBsYWNlKEwsXCIkJi9cIikrXCIvXCIpK2UpKSx0LnB1c2goYSkpLDE7aWYocz0wLHI9XCJcIj09PXI/XCIuXCI6citcIjpcIixBcnJheS5pc0FycmF5KGUpKWZvcih2YXIgYz0wO2M8ZS5sZW5ndGg7YysrKXt2YXIgdT1yK0UobD1lW2NdLGMpO3MrPVMobCx0LG4sdSxhKX1lbHNlIGlmKHU9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PT1lfHxcIm9iamVjdFwiIT10eXBlb2YgZT9udWxsOlwiZnVuY3Rpb25cIj09dHlwZW9mKGU9ZCYmZVtkXXx8ZVtcIkBAaXRlcmF0b3JcIl0pP2U6bnVsbH0oZSksXCJmdW5jdGlvblwiPT10eXBlb2YgdSlmb3IoZT11LmNhbGwoZSksYz0wOyEobD1lLm5leHQoKSkuZG9uZTspcys9UyhsPWwudmFsdWUsdCxuLHU9citFKGwsYysrKSxhKTtlbHNlIGlmKFwib2JqZWN0XCI9PT1sKXRocm93IHQ9XCJcIitlLEVycm9yKHAoMzEsXCJbb2JqZWN0IE9iamVjdF1cIj09PXQ/XCJvYmplY3Qgd2l0aCBrZXlzIHtcIitPYmplY3Qua2V5cyhlKS5qb2luKFwiLCBcIikrXCJ9XCI6dCkpO3JldHVybiBzfWZ1bmN0aW9uIGooZSx0LG4pe2lmKG51bGw9PWUpcmV0dXJuIGU7dmFyIHI9W10sbz0wO3JldHVybiBTKGUscixcIlwiLFwiXCIsKGZ1bmN0aW9uKGUpe3JldHVybiB0LmNhbGwobixlLG8rKyl9KSkscn1mdW5jdGlvbiBNKGUpe2lmKC0xPT09ZS5fc3RhdHVzKXt2YXIgdD1lLl9yZXN1bHQ7dD10KCksZS5fc3RhdHVzPTAsZS5fcmVzdWx0PXQsdC50aGVuKChmdW5jdGlvbih0KXswPT09ZS5fc3RhdHVzJiYodD10LmRlZmF1bHQsZS5fc3RhdHVzPTEsZS5fcmVzdWx0PXQpfSksKGZ1bmN0aW9uKHQpezA9PT1lLl9zdGF0dXMmJihlLl9zdGF0dXM9MixlLl9yZXN1bHQ9dCl9KSl9aWYoMT09PWUuX3N0YXR1cylyZXR1cm4gZS5fcmVzdWx0O3Rocm93IGUuX3Jlc3VsdH12YXIgaz17Y3VycmVudDpudWxsfTtmdW5jdGlvbiBSKCl7dmFyIGU9ay5jdXJyZW50O2lmKG51bGw9PT1lKXRocm93IEVycm9yKHAoMzIxKSk7cmV0dXJuIGV9dmFyIFA9e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6ayxSZWFjdEN1cnJlbnRCYXRjaENvbmZpZzp7dHJhbnNpdGlvbjowfSxSZWFjdEN1cnJlbnRPd25lcjp3LElzU29tZVJlbmRlcmVyQWN0aW5nOntjdXJyZW50OiExfSxhc3NpZ246cn07dC5DaGlsZHJlbj17bWFwOmosZm9yRWFjaDpmdW5jdGlvbihlLHQsbil7aihlLChmdW5jdGlvbigpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksbil9LGNvdW50OmZ1bmN0aW9uKGUpe3ZhciB0PTA7cmV0dXJuIGooZSwoZnVuY3Rpb24oKXt0Kyt9KSksdH0sdG9BcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gaihlLChmdW5jdGlvbihlKXtyZXR1cm4gZX0pKXx8W119LG9ubHk6ZnVuY3Rpb24oZSl7aWYoIU8oZSkpdGhyb3cgRXJyb3IocCgxNDMpKTtyZXR1cm4gZX19LHQuQ29tcG9uZW50PXYsdC5QdXJlQ29tcG9uZW50PUMsdC5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRD1QLHQuY2xvbmVFbGVtZW50PWZ1bmN0aW9uKGUsdCxuKXtpZihudWxsPT1lKXRocm93IEVycm9yKHAoMjY3LGUpKTt2YXIgaT1yKHt9LGUucHJvcHMpLGE9ZS5rZXksbD1lLnJlZixzPWUuX293bmVyO2lmKG51bGwhPXQpe2lmKHZvaWQgMCE9PXQucmVmJiYobD10LnJlZixzPXcuY3VycmVudCksdm9pZCAwIT09dC5rZXkmJihhPVwiXCIrdC5rZXkpLGUudHlwZSYmZS50eXBlLmRlZmF1bHRQcm9wcyl2YXIgYz1lLnR5cGUuZGVmYXVsdFByb3BzO2Zvcih1IGluIHQpYi5jYWxsKHQsdSkmJiF4Lmhhc093blByb3BlcnR5KHUpJiYoaVt1XT12b2lkIDA9PT10W3VdJiZ2b2lkIDAhPT1jP2NbdV06dFt1XSl9dmFyIHU9YXJndW1lbnRzLmxlbmd0aC0yO2lmKDE9PT11KWkuY2hpbGRyZW49bjtlbHNlIGlmKDE8dSl7Yz1BcnJheSh1KTtmb3IodmFyIGY9MDtmPHU7ZisrKWNbZl09YXJndW1lbnRzW2YrMl07aS5jaGlsZHJlbj1jfXJldHVybnskJHR5cGVvZjpvLHR5cGU6ZS50eXBlLGtleTphLHJlZjpsLHByb3BzOmksX293bmVyOnN9fSx0LmNyZWF0ZUNvbnRleHQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9bnVsbCksKGU9eyQkdHlwZW9mOmwsX2NhbGN1bGF0ZUNoYW5nZWRCaXRzOnQsX2N1cnJlbnRWYWx1ZTplLF9jdXJyZW50VmFsdWUyOmUsX3RocmVhZENvdW50OjAsUHJvdmlkZXI6bnVsbCxDb25zdW1lcjpudWxsfSkuUHJvdmlkZXI9eyQkdHlwZW9mOmEsX2NvbnRleHQ6ZX0sZS5Db25zdW1lcj1lfSx0LmNyZWF0ZUVsZW1lbnQ9Xyx0LmNyZWF0ZUZhY3Rvcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9Xy5iaW5kKG51bGwsZSk7cmV0dXJuIHQudHlwZT1lLHR9LHQuY3JlYXRlUmVmPWZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bnVsbH19LHQuZm9yd2FyZFJlZj1mdW5jdGlvbihlKXtyZXR1cm57JCR0eXBlb2Y6cyxyZW5kZXI6ZX19LHQuaXNWYWxpZEVsZW1lbnQ9Tyx0Lmxhenk9ZnVuY3Rpb24oZSl7cmV0dXJueyQkdHlwZW9mOnUsX3BheWxvYWQ6e19zdGF0dXM6LTEsX3Jlc3VsdDplfSxfaW5pdDpNfX0sdC5tZW1vPWZ1bmN0aW9uKGUsdCl7cmV0dXJueyQkdHlwZW9mOmMsdHlwZTplLGNvbXBhcmU6dm9pZCAwPT09dD9udWxsOnR9fSx0LnVzZUNhbGxiYWNrPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIFIoKS51c2VDYWxsYmFjayhlLHQpfSx0LnVzZUNvbnRleHQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUigpLnVzZUNvbnRleHQoZSx0KX0sdC51c2VEZWJ1Z1ZhbHVlPWZ1bmN0aW9uKCl7fSx0LnVzZUVmZmVjdD1mdW5jdGlvbihlLHQpe3JldHVybiBSKCkudXNlRWZmZWN0KGUsdCl9LHQudXNlSW1wZXJhdGl2ZUhhbmRsZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIFIoKS51c2VJbXBlcmF0aXZlSGFuZGxlKGUsdCxuKX0sdC51c2VMYXlvdXRFZmZlY3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUigpLnVzZUxheW91dEVmZmVjdChlLHQpfSx0LnVzZU1lbW89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUigpLnVzZU1lbW8oZSx0KX0sdC51c2VSZWR1Y2VyPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUigpLnVzZVJlZHVjZXIoZSx0LG4pfSx0LnVzZVJlZj1mdW5jdGlvbihlKXtyZXR1cm4gUigpLnVzZVJlZihlKX0sdC51c2VTdGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gUigpLnVzZVN0YXRlKGUpfSx0LnZlcnNpb249XCIxNy4wLjJcIn0sNzM3ODooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPW4oMTUzNSl9LDI5MjE6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24ucih0KSxuLmQodCx7U2VydmVyU3R5bGVTaGVldDooKT0+cHQsU3R5bGVTaGVldENvbnN1bWVyOigpPT5ndCxTdHlsZVNoZWV0Q29udGV4dDooKT0+aHQsU3R5bGVTaGVldE1hbmFnZXI6KCk9PnZ0LFRoZW1lQ29uc3VtZXI6KCk9PmZ0LFRoZW1lQ29udGV4dDooKT0+dXQsVGhlbWVQcm92aWRlcjooKT0+ZHQsX19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0hBVU5URURfQllfU1BPT0tZX0dIT1NUUzooKT0+RXQsY3JlYXRlR2xvYmFsU3R5bGU6KCk9Pnh0LGNzczooKT0+QmUsZGVmYXVsdDooKT0+U3QsaXNTdHlsZWRDb21wb25lbnQ6KCk9Pk4sa2V5ZnJhbWVzOigpPT5PdCx3aXRoVGhlbWU6KCk9Pkx0fSk7dmFyIHI9bigxOTQ2KSxvPW4ubihyKSxpPW4oNTI0NiksYT1uLm4oaSksbD1uKDczNzgpO2NvbnN0IHM9e2FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OjEsYm9yZGVySW1hZ2VPdXRzZXQ6MSxib3JkZXJJbWFnZVNsaWNlOjEsYm9yZGVySW1hZ2VXaWR0aDoxLGJveEZsZXg6MSxib3hGbGV4R3JvdXA6MSxib3hPcmRpbmFsR3JvdXA6MSxjb2x1bW5Db3VudDoxLGNvbHVtbnM6MSxmbGV4OjEsZmxleEdyb3c6MSxmbGV4UG9zaXRpdmU6MSxmbGV4U2hyaW5rOjEsZmxleE5lZ2F0aXZlOjEsZmxleE9yZGVyOjEsZ3JpZFJvdzoxLGdyaWRSb3dFbmQ6MSxncmlkUm93U3BhbjoxLGdyaWRSb3dTdGFydDoxLGdyaWRDb2x1bW46MSxncmlkQ29sdW1uRW5kOjEsZ3JpZENvbHVtblNwYW46MSxncmlkQ29sdW1uU3RhcnQ6MSxtc0dyaWRSb3c6MSxtc0dyaWRSb3dTcGFuOjEsbXNHcmlkQ29sdW1uOjEsbXNHcmlkQ29sdW1uU3BhbjoxLGZvbnRXZWlnaHQ6MSxsaW5lSGVpZ2h0OjEsb3BhY2l0eToxLG9yZGVyOjEsb3JwaGFuczoxLHRhYlNpemU6MSx3aWRvd3M6MSx6SW5kZXg6MSx6b29tOjEsV2Via2l0TGluZUNsYW1wOjEsZmlsbE9wYWNpdHk6MSxmbG9vZE9wYWNpdHk6MSxzdG9wT3BhY2l0eToxLHN0cm9rZURhc2hhcnJheToxLHN0cm9rZURhc2hvZmZzZXQ6MSxzdHJva2VNaXRlcmxpbWl0OjEsc3Ryb2tlT3BhY2l0eToxLHN0cm9rZVdpZHRoOjF9O3ZhciBjPW4oOTE4NSksdT1OdW1iZXIuaXNOYU58fGZ1bmN0aW9uKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlJiZlIT1lfTtmdW5jdGlvbiBmKGUsdCl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZihyPWVbbl0sbz10W25dLCEocj09PW98fHUocikmJnUobykpKXJldHVybiExO3ZhciByLG87cmV0dXJuITB9Y29uc3QgZD1mdW5jdGlvbihlLHQpe3ZhciBuO3ZvaWQgMD09PXQmJih0PWYpO3ZhciByLG89W10saT0hMTtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGE9W10sbD0wO2w8YXJndW1lbnRzLmxlbmd0aDtsKyspYVtsXT1hcmd1bWVudHNbbF07cmV0dXJuIGkmJm49PT10aGlzJiZ0KGEsbyl8fChyPWUuYXBwbHkodGhpcyxhKSxpPSEwLG49dGhpcyxvPWEpLHJ9fTt2YXIgcD0vXigoY2hpbGRyZW58ZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUx8a2V5fHJlZnxhdXRvRm9jdXN8ZGVmYXVsdFZhbHVlfGRlZmF1bHRDaGVja2VkfGlubmVySFRNTHxzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmd8c3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nfHZhbHVlTGlua3xhY2NlcHR8YWNjZXB0Q2hhcnNldHxhY2Nlc3NLZXl8YWN0aW9ufGFsbG93fGFsbG93VXNlck1lZGlhfGFsbG93UGF5bWVudFJlcXVlc3R8YWxsb3dGdWxsU2NyZWVufGFsbG93VHJhbnNwYXJlbmN5fGFsdHxhc3luY3xhdXRvQ29tcGxldGV8YXV0b1BsYXl8Y2FwdHVyZXxjZWxsUGFkZGluZ3xjZWxsU3BhY2luZ3xjaGFsbGVuZ2V8Y2hhclNldHxjaGVja2VkfGNpdGV8Y2xhc3NJRHxjbGFzc05hbWV8Y29sc3xjb2xTcGFufGNvbnRlbnR8Y29udGVudEVkaXRhYmxlfGNvbnRleHRNZW51fGNvbnRyb2xzfGNvbnRyb2xzTGlzdHxjb29yZHN8Y3Jvc3NPcmlnaW58ZGF0YXxkYXRlVGltZXxkZWNvZGluZ3xkZWZhdWx0fGRlZmVyfGRpcnxkaXNhYmxlZHxkaXNhYmxlUGljdHVyZUluUGljdHVyZXxkb3dubG9hZHxkcmFnZ2FibGV8ZW5jVHlwZXxmb3JtfGZvcm1BY3Rpb258Zm9ybUVuY1R5cGV8Zm9ybU1ldGhvZHxmb3JtTm9WYWxpZGF0ZXxmb3JtVGFyZ2V0fGZyYW1lQm9yZGVyfGhlYWRlcnN8aGVpZ2h0fGhpZGRlbnxoaWdofGhyZWZ8aHJlZkxhbmd8aHRtbEZvcnxodHRwRXF1aXZ8aWR8aW5wdXRNb2RlfGludGVncml0eXxpc3xrZXlQYXJhbXN8a2V5VHlwZXxraW5kfGxhYmVsfGxhbmd8bGlzdHxsb2FkaW5nfGxvb3B8bG93fG1hcmdpbkhlaWdodHxtYXJnaW5XaWR0aHxtYXh8bWF4TGVuZ3RofG1lZGlhfG1lZGlhR3JvdXB8bWV0aG9kfG1pbnxtaW5MZW5ndGh8bXVsdGlwbGV8bXV0ZWR8bmFtZXxub25jZXxub1ZhbGlkYXRlfG9wZW58b3B0aW11bXxwYXR0ZXJufHBsYWNlaG9sZGVyfHBsYXlzSW5saW5lfHBvc3RlcnxwcmVsb2FkfHByb2ZpbGV8cmFkaW9Hcm91cHxyZWFkT25seXxyZWZlcnJlclBvbGljeXxyZWx8cmVxdWlyZWR8cmV2ZXJzZWR8cm9sZXxyb3dzfHJvd1NwYW58c2FuZGJveHxzY29wZXxzY29wZWR8c2Nyb2xsaW5nfHNlYW1sZXNzfHNlbGVjdGVkfHNoYXBlfHNpemV8c2l6ZXN8c2xvdHxzcGFufHNwZWxsQ2hlY2t8c3JjfHNyY0RvY3xzcmNMYW5nfHNyY1NldHxzdGFydHxzdGVwfHN0eWxlfHN1bW1hcnl8dGFiSW5kZXh8dGFyZ2V0fHRpdGxlfHR5cGV8dXNlTWFwfHZhbHVlfHdpZHRofHdtb2RlfHdyYXB8YWJvdXR8ZGF0YXR5cGV8aW5saXN0fHByZWZpeHxwcm9wZXJ0eXxyZXNvdXJjZXx0eXBlb2Z8dm9jYWJ8YXV0b0NhcGl0YWxpemV8YXV0b0NvcnJlY3R8YXV0b1NhdmV8Y29sb3J8aW5lcnR8aXRlbVByb3B8aXRlbVNjb3BlfGl0ZW1UeXBlfGl0ZW1JRHxpdGVtUmVmfG9ufHJlc3VsdHN8c2VjdXJpdHl8dW5zZWxlY3RhYmxlfGFjY2VudEhlaWdodHxhY2N1bXVsYXRlfGFkZGl0aXZlfGFsaWdubWVudEJhc2VsaW5lfGFsbG93UmVvcmRlcnxhbHBoYWJldGljfGFtcGxpdHVkZXxhcmFiaWNGb3JtfGFzY2VudHxhdHRyaWJ1dGVOYW1lfGF0dHJpYnV0ZVR5cGV8YXV0b1JldmVyc2V8YXppbXV0aHxiYXNlRnJlcXVlbmN5fGJhc2VsaW5lU2hpZnR8YmFzZVByb2ZpbGV8YmJveHxiZWdpbnxiaWFzfGJ5fGNhbGNNb2RlfGNhcEhlaWdodHxjbGlwfGNsaXBQYXRoVW5pdHN8Y2xpcFBhdGh8Y2xpcFJ1bGV8Y29sb3JJbnRlcnBvbGF0aW9ufGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnN8Y29sb3JQcm9maWxlfGNvbG9yUmVuZGVyaW5nfGNvbnRlbnRTY3JpcHRUeXBlfGNvbnRlbnRTdHlsZVR5cGV8Y3Vyc29yfGN4fGN5fGR8ZGVjZWxlcmF0ZXxkZXNjZW50fGRpZmZ1c2VDb25zdGFudHxkaXJlY3Rpb258ZGlzcGxheXxkaXZpc29yfGRvbWluYW50QmFzZWxpbmV8ZHVyfGR4fGR5fGVkZ2VNb2RlfGVsZXZhdGlvbnxlbmFibGVCYWNrZ3JvdW5kfGVuZHxleHBvbmVudHxleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkfGZpbGx8ZmlsbE9wYWNpdHl8ZmlsbFJ1bGV8ZmlsdGVyfGZpbHRlclJlc3xmaWx0ZXJVbml0c3xmbG9vZENvbG9yfGZsb29kT3BhY2l0eXxmb2N1c2FibGV8Zm9udEZhbWlseXxmb250U2l6ZXxmb250U2l6ZUFkanVzdHxmb250U3RyZXRjaHxmb250U3R5bGV8Zm9udFZhcmlhbnR8Zm9udFdlaWdodHxmb3JtYXR8ZnJvbXxmcnxmeHxmeXxnMXxnMnxnbHlwaE5hbWV8Z2x5cGhPcmllbnRhdGlvbkhvcml6b250YWx8Z2x5cGhPcmllbnRhdGlvblZlcnRpY2FsfGdseXBoUmVmfGdyYWRpZW50VHJhbnNmb3JtfGdyYWRpZW50VW5pdHN8aGFuZ2luZ3xob3JpekFkdlh8aG9yaXpPcmlnaW5YfGlkZW9ncmFwaGljfGltYWdlUmVuZGVyaW5nfGlufGluMnxpbnRlcmNlcHR8a3xrMXxrMnxrM3xrNHxrZXJuZWxNYXRyaXh8a2VybmVsVW5pdExlbmd0aHxrZXJuaW5nfGtleVBvaW50c3xrZXlTcGxpbmVzfGtleVRpbWVzfGxlbmd0aEFkanVzdHxsZXR0ZXJTcGFjaW5nfGxpZ2h0aW5nQ29sb3J8bGltaXRpbmdDb25lQW5nbGV8bG9jYWx8bWFya2VyRW5kfG1hcmtlck1pZHxtYXJrZXJTdGFydHxtYXJrZXJIZWlnaHR8bWFya2VyVW5pdHN8bWFya2VyV2lkdGh8bWFza3xtYXNrQ29udGVudFVuaXRzfG1hc2tVbml0c3xtYXRoZW1hdGljYWx8bW9kZXxudW1PY3RhdmVzfG9mZnNldHxvcGFjaXR5fG9wZXJhdG9yfG9yZGVyfG9yaWVudHxvcmllbnRhdGlvbnxvcmlnaW58b3ZlcmZsb3d8b3ZlcmxpbmVQb3NpdGlvbnxvdmVybGluZVRoaWNrbmVzc3xwYW5vc2UxfHBhaW50T3JkZXJ8cGF0aExlbmd0aHxwYXR0ZXJuQ29udGVudFVuaXRzfHBhdHRlcm5UcmFuc2Zvcm18cGF0dGVyblVuaXRzfHBvaW50ZXJFdmVudHN8cG9pbnRzfHBvaW50c0F0WHxwb2ludHNBdFl8cG9pbnRzQXRafHByZXNlcnZlQWxwaGF8cHJlc2VydmVBc3BlY3RSYXRpb3xwcmltaXRpdmVVbml0c3xyfHJhZGl1c3xyZWZYfHJlZll8cmVuZGVyaW5nSW50ZW50fHJlcGVhdENvdW50fHJlcGVhdER1cnxyZXF1aXJlZEV4dGVuc2lvbnN8cmVxdWlyZWRGZWF0dXJlc3xyZXN0YXJ0fHJlc3VsdHxyb3RhdGV8cnh8cnl8c2NhbGV8c2VlZHxzaGFwZVJlbmRlcmluZ3xzbG9wZXxzcGFjaW5nfHNwZWN1bGFyQ29uc3RhbnR8c3BlY3VsYXJFeHBvbmVudHxzcGVlZHxzcHJlYWRNZXRob2R8c3RhcnRPZmZzZXR8c3RkRGV2aWF0aW9ufHN0ZW1ofHN0ZW12fHN0aXRjaFRpbGVzfHN0b3BDb2xvcnxzdG9wT3BhY2l0eXxzdHJpa2V0aHJvdWdoUG9zaXRpb258c3RyaWtldGhyb3VnaFRoaWNrbmVzc3xzdHJpbmd8c3Ryb2tlfHN0cm9rZURhc2hhcnJheXxzdHJva2VEYXNob2Zmc2V0fHN0cm9rZUxpbmVjYXB8c3Ryb2tlTGluZWpvaW58c3Ryb2tlTWl0ZXJsaW1pdHxzdHJva2VPcGFjaXR5fHN0cm9rZVdpZHRofHN1cmZhY2VTY2FsZXxzeXN0ZW1MYW5ndWFnZXx0YWJsZVZhbHVlc3x0YXJnZXRYfHRhcmdldFl8dGV4dEFuY2hvcnx0ZXh0RGVjb3JhdGlvbnx0ZXh0UmVuZGVyaW5nfHRleHRMZW5ndGh8dG98dHJhbnNmb3JtfHUxfHUyfHVuZGVybGluZVBvc2l0aW9ufHVuZGVybGluZVRoaWNrbmVzc3x1bmljb2RlfHVuaWNvZGVCaWRpfHVuaWNvZGVSYW5nZXx1bml0c1BlckVtfHZBbHBoYWJldGljfHZIYW5naW5nfHZJZGVvZ3JhcGhpY3x2TWF0aGVtYXRpY2FsfHZhbHVlc3x2ZWN0b3JFZmZlY3R8dmVyc2lvbnx2ZXJ0QWR2WXx2ZXJ0T3JpZ2luWHx2ZXJ0T3JpZ2luWXx2aWV3Qm94fHZpZXdUYXJnZXR8dmlzaWJpbGl0eXx3aWR0aHN8d29yZFNwYWNpbmd8d3JpdGluZ01vZGV8eHx4SGVpZ2h0fHgxfHgyfHhDaGFubmVsU2VsZWN0b3J8eGxpbmtBY3R1YXRlfHhsaW5rQXJjcm9sZXx4bGlua0hyZWZ8eGxpbmtSb2xlfHhsaW5rU2hvd3x4bGlua1RpdGxlfHhsaW5rVHlwZXx4bWxCYXNlfHhtbG5zfHhtbG5zWGxpbmt8eG1sTGFuZ3x4bWxTcGFjZXx5fHkxfHkyfHlDaGFubmVsU2VsZWN0b3J8enx6b29tQW5kUGFufGZvcnxjbGFzc3xhdXRvZm9jdXMpfCgoW0RkXVtBYV1bVHRdW0FhXXxbQWFdW1JyXVtJaV1bQWFdfHgpLS4qKSkkLztjb25zdCBoPWZ1bmN0aW9uKGUpe3ZhciB0PXt9O3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdm9pZCAwPT09dFtuXSYmKHRbbl09ZShuKSksdFtuXX19KChmdW5jdGlvbihlKXtyZXR1cm4gcC50ZXN0KGUpfHwxMTE9PT1lLmNoYXJDb2RlQXQoMCkmJjExMD09PWUuY2hhckNvZGVBdCgxKSYmZS5jaGFyQ29kZUF0KDIpPDkxfSkpO2Z1bmN0aW9uIGcoZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKX1mdW5jdGlvbiB2KGUpe3JldHVyblwiVW5kZWZpbmVkXCI9PT1nKGUpfWZ1bmN0aW9uIG0oZSl7cmV0dXJuXCJOdWxsXCI9PT1nKGUpfWZ1bmN0aW9uIEMoZSl7cmV0dXJuXCJPYmplY3RcIj09PWcoZSkmJihlLmNvbnN0cnVjdG9yPT09T2JqZWN0JiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1PYmplY3QucHJvdG90eXBlKX1mdW5jdGlvbiB5KGUpe3JldHVyblwiQXJyYXlcIj09PWcoZSl9ZnVuY3Rpb24gdyhlKXtyZXR1cm5cIlN5bWJvbFwiPT09ZyhlKX12YXIgYix4LF8sTyxMO2I9bSx4PXY7ZnVuY3Rpb24gRSgpe2Zvcih2YXIgZT0wLHQ9MCxuPWFyZ3VtZW50cy5sZW5ndGg7dDxuO3QrKyllKz1hcmd1bWVudHNbdF0ubGVuZ3RoO3ZhciByPUFycmF5KGUpLG89MDtmb3IodD0wO3Q8bjt0KyspZm9yKHZhciBpPWFyZ3VtZW50c1t0XSxhPTAsbD1pLmxlbmd0aDthPGw7YSsrLG8rKylyW29dPWlbYV07cmV0dXJuIHJ9ZnVuY3Rpb24gUyhlLHQsbixyKXt2YXIgbz1yLnByb3BlcnR5SXNFbnVtZXJhYmxlKHQpP1wiZW51bWVyYWJsZVwiOlwibm9uZW51bWVyYWJsZVwiO1wiZW51bWVyYWJsZVwiPT09byYmKGVbdF09biksXCJub25lbnVtZXJhYmxlXCI9PT1vJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9ZnVuY3Rpb24gaihlLHQsbil7aWYoIUModCkpcmV0dXJuIG4mJnkobikmJm4uZm9yRWFjaCgoZnVuY3Rpb24obil7dD1uKGUsdCl9KSksdDt2YXIgcj17fTtDKGUpJiYocj1FKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpLE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSkpLnJlZHVjZSgoZnVuY3Rpb24obixyKXt2YXIgbz1lW3JdO3JldHVybighdyhyKSYmIU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLmluY2x1ZGVzKHIpfHx3KHIpJiYhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5pbmNsdWRlcyhyKSkmJlMobixyLG8sZSksbn0pLHt9KSk7cmV0dXJuIEUoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModCksT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KSkucmVkdWNlKChmdW5jdGlvbihyLG8pe3ZhciBpPXRbb10sYT1DKGUpP2Vbb106dm9pZCAwO3JldHVybiBuJiZ5KG4pJiZuLmZvckVhY2goKGZ1bmN0aW9uKGUpe2k9ZShhLGkpfSkpLHZvaWQgMCE9PWEmJkMoaSkmJihpPWooYSxpLG4pKSxTKHIsbyxpLHQpLHJ9KSxyKX1jb25zdCBNPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMV09YXJndW1lbnRzW25dO3ZhciByPW51bGwsbz1lO3JldHVybiBDKGUpJiZlLmV4dGVuc2lvbnMmJjE9PT1PYmplY3Qua2V5cyhlKS5sZW5ndGgmJihvPXt9LHI9ZS5leHRlbnNpb25zKSx0LnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gaihlLHQscil9KSxvKX07dmFyIGs9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W2VbMF1dLHI9MCxvPXQubGVuZ3RoO3I8bztyKz0xKW4ucHVzaCh0W3JdLGVbcisxXSk7cmV0dXJuIG59LFI9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgZX0sUD1mdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9LEk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24odCxuLHIpe3JldHVybiBuJiZlKHQucHJvdG90eXBlLG4pLHImJmUodCxyKSx0fX0oKSxBPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LFQ9ZnVuY3Rpb24oZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTplLl9fcHJvdG9fXz10KX0sSD1mdW5jdGlvbihlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4hdHx8XCJvYmplY3RcIiE9dHlwZW9mIHQmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHQ/ZTp0fSxCPWZ1bmN0aW9uKGUpe3JldHVyblwib2JqZWN0XCI9PT0odm9pZCAwPT09ZT9cInVuZGVmaW5lZFwiOlIoZSkpJiZlLmNvbnN0cnVjdG9yPT09T2JqZWN0fSxWPU9iamVjdC5mcmVlemUoW10pLEQ9T2JqZWN0LmZyZWV6ZSh7fSk7ZnVuY3Rpb24gWihlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlfWZ1bmN0aW9uICQoZSl7cmV0dXJuIGUuZGlzcGxheU5hbWV8fGUubmFtZXx8XCJDb21wb25lbnRcIn1mdW5jdGlvbiBOKGUpe3JldHVybiBlJiZcInN0cmluZ1wiPT10eXBlb2YgZS5zdHlsZWRDb21wb25lbnRJZH12YXIgRj1cInVuZGVmaW5lZFwiIT10eXBlb2YgcHJvY2VzcyYmKHByb2Nlc3MuZW52LlJFQUNUX0FQUF9TQ19BVFRSfHxwcm9jZXNzLmVudi5TQ19BVFRSKXx8XCJkYXRhLXN0eWxlZFwiLFU9XCJkYXRhLXN0eWxlZC12ZXJzaW9uXCIsVz1cImRhdGEtc3R5bGVkLXN0cmVhbWVkXCIsej1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZcIkhUTUxFbGVtZW50XCJpbiB3aW5kb3csRz1cImJvb2xlYW5cIj09dHlwZW9mIFNDX0RJU0FCTEVfU1BFRURZJiZTQ19ESVNBQkxFX1NQRUVEWXx8XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHByb2Nlc3MmJihwcm9jZXNzLmVudi5SRUFDVF9BUFBfU0NfRElTQUJMRV9TUEVFRFl8fHByb2Nlc3MuZW52LlNDX0RJU0FCTEVfU1BFRURZKXx8ITEscT17fTt2YXIgWT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe1AodGhpcyx0KTtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxvPUFycmF5KHI+MT9yLTE6MCksaT0xO2k8cjtpKyspb1tpLTFdPWFyZ3VtZW50c1tpXTt2YXIgYT1IKHRoaXMsZS5jYWxsKHRoaXMsXCJBbiBlcnJvciBvY2N1cnJlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdHlsZWQtY29tcG9uZW50cy9zdHlsZWQtY29tcG9uZW50cy9ibG9iL21hc3Rlci9wYWNrYWdlcy9zdHlsZWQtY29tcG9uZW50cy9zcmMvdXRpbHMvZXJyb3JzLm1kI1wiK24rXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uXCIrKG8ubGVuZ3RoPjA/XCIgQWRkaXRpb25hbCBhcmd1bWVudHM6IFwiK28uam9pbihcIiwgXCIpOlwiXCIpKSk7cmV0dXJuIEgoYSl9cmV0dXJuIFQodCxlKSx0fShFcnJvciksSz0vXlteXFxTXFxuXSo/XFwvXFwqIHNjLWNvbXBvbmVudC1pZDpcXHMqKFxcUyspXFxzK1xcKlxcLy9nbSxYPWZ1bmN0aW9uKGUpe3ZhciB0PVwiXCIrKGV8fFwiXCIpLG49W107cmV0dXJuIHQucmVwbGFjZShLLChmdW5jdGlvbihlLHQscil7cmV0dXJuIG4ucHVzaCh7Y29tcG9uZW50SWQ6dCxtYXRjaEluZGV4OnJ9KSxlfSkpLG4ubWFwKChmdW5jdGlvbihlLHIpe3ZhciBvPWUuY29tcG9uZW50SWQsaT1lLm1hdGNoSW5kZXgsYT1uW3IrMV07cmV0dXJue2NvbXBvbmVudElkOm8sY3NzRnJvbURPTTphP3Quc2xpY2UoaSxhLm1hdGNoSW5kZXgpOnQuc2xpY2UoaSl9fSkpfSxKPS9eXFxzKlxcL1xcLy4qJC9nbSxRPW5ldyhvKCkpKHtnbG9iYWw6ITEsY2FzY2FkZTohMCxrZXlmcmFtZTohMSxwcmVmaXg6ITEsY29tcHJlc3M6ITEsc2VtaWNvbG9uOiEwfSksZWU9bmV3KG8oKSkoe2dsb2JhbDohMSxjYXNjYWRlOiEwLGtleWZyYW1lOiExLHByZWZpeDohMCxjb21wcmVzczohMSxzZW1pY29sb246ITF9KSx0ZT1bXSxuZT1mdW5jdGlvbihlKXtpZigtMj09PWUpe3ZhciB0PXRlO3JldHVybiB0ZT1bXSx0fX0scmU9YSgpKChmdW5jdGlvbihlKXt0ZS5wdXNoKGUpfSkpLG9lPXZvaWQgMCxpZT12b2lkIDAsYWU9dm9pZCAwLGxlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD4wJiYtMSE9PW4uc2xpY2UoMCx0KS5pbmRleE9mKGllKSYmbi5zbGljZSh0LWllLmxlbmd0aCx0KSE9PWllP1wiLlwiK29lOmV9O2VlLnVzZShbZnVuY3Rpb24oZSx0LG4pezI9PT1lJiZuLmxlbmd0aCYmblswXS5sYXN0SW5kZXhPZihpZSk+MCYmKG5bMF09blswXS5yZXBsYWNlKGFlLGxlKSl9LHJlLG5lXSksUS51c2UoW3JlLG5lXSk7dmFyIHNlPWZ1bmN0aW9uKGUpe3JldHVybiBRKFwiXCIsZSl9O2Z1bmN0aW9uIGNlKGUsdCxuKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106XCImXCIsbz1lLmpvaW4oXCJcIikucmVwbGFjZShKLFwiXCIpLGk9dCYmbj9uK1wiIFwiK3QrXCIgeyBcIitvK1wiIH1cIjpvO3JldHVybiBvZT1yLGllPXQsYWU9bmV3IFJlZ0V4cChcIlxcXFxcIitpZStcIlxcXFxiXCIsXCJnXCIpLGVlKG58fCF0P1wiXCI6dCxpKX12YXIgdWU9ZnVuY3Rpb24oKXtyZXR1cm4gbi5uY30sZmU9ZnVuY3Rpb24oZSx0LG4pe24mJigoZVt0XXx8KGVbdF09T2JqZWN0LmNyZWF0ZShudWxsKSkpW25dPSEwKX0sZGU9ZnVuY3Rpb24oZSx0KXtlW3RdPU9iamVjdC5jcmVhdGUobnVsbCl9LHBlPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3JldHVybiB2b2lkIDAhPT1lW3RdJiZlW3RdW25dfX0saGU9ZnVuY3Rpb24oZSl7dmFyIHQ9XCJcIjtmb3IodmFyIG4gaW4gZSl0Kz1PYmplY3Qua2V5cyhlW25dKS5qb2luKFwiIFwiKStcIiBcIjtyZXR1cm4gdC50cmltKCl9LGdlPWZ1bmN0aW9uKGUpe2lmKGUuc2hlZXQpcmV0dXJuIGUuc2hlZXQ7Zm9yKHZhciB0PWUub3duZXJEb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGgsbj0wO248dDtuKz0xKXt2YXIgcj1lLm93bmVyRG9jdW1lbnQuc3R5bGVTaGVldHNbbl07aWYoci5vd25lck5vZGU9PT1lKXJldHVybiByfXRocm93IG5ldyBZKDEwKX0sdmU9ZnVuY3Rpb24oZSx0LG4pe2lmKCF0KXJldHVybiExO3ZhciByPWUuY3NzUnVsZXMubGVuZ3RoO3RyeXtlLmluc2VydFJ1bGUodCxuPD1yP246cil9Y2F0Y2goZSl7cmV0dXJuITF9cmV0dXJuITB9LG1lPWZ1bmN0aW9uKGUpe3JldHVyblwiXFxuLyogc2MtY29tcG9uZW50LWlkOiBcIitlK1wiICovXFxuXCJ9LENlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTAscj0wO3I8PXQ7cis9MSluKz1lW3JdO3JldHVybiBufSx5ZT1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgcj11ZSgpO3JldHVyblwiPHN0eWxlIFwiK1tyJiYnbm9uY2U9XCInK3IrJ1wiJyxGKyc9XCInK2hlKHQpKydcIicsVSsnPVwiNC40LjFcIicsbl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpK1wiPlwiK2UoKStcIjwvc3R5bGU+XCJ9fSx3ZT1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuLHI9KChuPXt9KVtGXT1oZSh0KSxuW1VdPVwiNC40LjFcIixuKSxvPXVlKCk7cmV0dXJuIG8mJihyLm5vbmNlPW8pLGwuY3JlYXRlRWxlbWVudChcInN0eWxlXCIsQSh7fSxyLHtkYW5nZXJvdXNseVNldElubmVySFRNTDp7X19odG1sOmUoKX19KSl9fSxiZT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXMoZSl9fSx4ZT1mdW5jdGlvbihlLHQpe3JldHVybiBlLmNyZWF0ZVRleHROb2RlKG1lKHQpKX0sX2U9ZnVuY3Rpb24gZSh0LG4pe3ZhciByPXZvaWQgMD09PXQ/T2JqZWN0LmNyZWF0ZShudWxsKTp0LG89dm9pZCAwPT09bj9PYmplY3QuY3JlYXRlKG51bGwpOm4saT1mdW5jdGlvbihlKXt2YXIgdD1vW2VdO3JldHVybiB2b2lkIDAhPT10P3Q6b1tlXT1bXCJcIl19LGE9ZnVuY3Rpb24oKXt2YXIgZT1cIlwiO2Zvcih2YXIgdCBpbiBvKXt2YXIgbj1vW3RdWzBdO24mJihlKz1tZSh0KStuKX1yZXR1cm4gZX0sbD17Y2xvbmU6ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcih2YXIgbiBpbiBlKXRbbl09QSh7fSxlW25dKTtyZXR1cm4gdH0ociksbj1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcih2YXIgaSBpbiBvKW5baV09W29baV1bMF1dO3JldHVybiBlKHQsbil9LGNzczphLGdldElkczpiZShvKSxoYXNOYW1lRm9ySWQ6cGUociksaW5zZXJ0TWFya2VyOmksaW5zZXJ0UnVsZXM6ZnVuY3Rpb24oZSx0LG4pe2koZSlbMF0rPXQuam9pbihcIiBcIiksZmUocixlLG4pfSxyZW1vdmVSdWxlczpmdW5jdGlvbihlKXt2YXIgdD1vW2VdO3ZvaWQgMCE9PXQmJih0WzBdPVwiXCIsZGUocixlKSl9LHNlYWxlZDohMSxzdHlsZVRhZzpudWxsLHRvRWxlbWVudDp3ZShhLHIpLHRvSFRNTDp5ZShhLHIpfTtyZXR1cm4gbH0sT2U9ZnVuY3Rpb24oZSx0LG4scixvKXtpZih6JiYhbil7dmFyIGk9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWRvY3VtZW50O2U/cj1lLm93bmVyRG9jdW1lbnQ6dCYmKHI9dC5vd25lckRvY3VtZW50KTt2YXIgbz1yLmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtvLnNldEF0dHJpYnV0ZShGLFwiXCIpLG8uc2V0QXR0cmlidXRlKFUsXCI0LjQuMVwiKTt2YXIgaT11ZSgpO2lmKGkmJm8uc2V0QXR0cmlidXRlKFwibm9uY2VcIixpKSxvLmFwcGVuZENoaWxkKHIuY3JlYXRlVGV4dE5vZGUoXCJcIikpLGUmJiF0KWUuYXBwZW5kQ2hpbGQobyk7ZWxzZXtpZighdHx8IWV8fCF0LnBhcmVudE5vZGUpdGhyb3cgbmV3IFkoNik7dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShvLG4/dDp0Lm5leHRTaWJsaW5nKX1yZXR1cm4gb30oZSx0LHIpO3JldHVybiBHP2Z1bmN0aW9uKGUsdCl7dmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKSxyPU9iamVjdC5jcmVhdGUobnVsbCksbz12b2lkIDAhPT10LGk9ITEsYT1mdW5jdGlvbih0KXt2YXIgbz1yW3RdO3JldHVybiB2b2lkIDAhPT1vP286KHJbdF09eGUoZS5vd25lckRvY3VtZW50LHQpLGUuYXBwZW5kQ2hpbGQoclt0XSksblt0XT1PYmplY3QuY3JlYXRlKG51bGwpLHJbdF0pfSxsPWZ1bmN0aW9uKCl7dmFyIGU9XCJcIjtmb3IodmFyIHQgaW4gcillKz1yW3RdLmRhdGE7cmV0dXJuIGV9O3JldHVybntjbG9uZTpmdW5jdGlvbigpe3Rocm93IG5ldyBZKDUpfSxjc3M6bCxnZXRJZHM6YmUociksaGFzTmFtZUZvcklkOnBlKG4pLGluc2VydE1hcmtlcjphLGluc2VydFJ1bGVzOmZ1bmN0aW9uKGUscixsKXtmb3IodmFyIHM9YShlKSxjPVtdLHU9ci5sZW5ndGgsZj0wO2Y8dTtmKz0xKXt2YXIgZD1yW2ZdLHA9bztpZihwJiYtMSE9PWQuaW5kZXhPZihcIkBpbXBvcnRcIikpYy5wdXNoKGQpO2Vsc2V7cD0hMTt2YXIgaD1mPT09dS0xP1wiXCI6XCIgXCI7cy5hcHBlbmREYXRhKFwiXCIrZCtoKX19ZmUobixlLGwpLG8mJmMubGVuZ3RoPjAmJihpPSEwLHQoKS5pbnNlcnRSdWxlcyhlK1wiLWltcG9ydFwiLGMpKX0scmVtb3ZlUnVsZXM6ZnVuY3Rpb24oYSl7dmFyIGw9clthXTtpZih2b2lkIDAhPT1sKXt2YXIgcz14ZShlLm93bmVyRG9jdW1lbnQsYSk7ZS5yZXBsYWNlQ2hpbGQocyxsKSxyW2FdPXMsZGUobixhKSxvJiZpJiZ0KCkucmVtb3ZlUnVsZXMoYStcIi1pbXBvcnRcIil9fSxzZWFsZWQ6ITEsc3R5bGVUYWc6ZSx0b0VsZW1lbnQ6d2UobCxuKSx0b0hUTUw6eWUobCxuKX19KGksbyk6ZnVuY3Rpb24oZSx0KXt2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpLHI9T2JqZWN0LmNyZWF0ZShudWxsKSxvPVtdLGk9dm9pZCAwIT09dCxhPSExLGw9ZnVuY3Rpb24oZSl7dmFyIHQ9cltlXTtyZXR1cm4gdm9pZCAwIT09dD90OihyW2VdPW8ubGVuZ3RoLG8ucHVzaCgwKSxkZShuLGUpLHJbZV0pfSxzPWZ1bmN0aW9uKCl7dmFyIHQ9Z2UoZSkuY3NzUnVsZXMsbj1cIlwiO2Zvcih2YXIgaSBpbiByKXtuKz1tZShpKTtmb3IodmFyIGE9cltpXSxsPUNlKG8sYSkscz1sLW9bYV07czxsO3MrPTEpe3ZhciBjPXRbc107dm9pZCAwIT09YyYmKG4rPWMuY3NzVGV4dCl9fXJldHVybiBufTtyZXR1cm57Y2xvbmU6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgWSg1KX0sY3NzOnMsZ2V0SWRzOmJlKHIpLGhhc05hbWVGb3JJZDpwZShuKSxpbnNlcnRNYXJrZXI6bCxpbnNlcnRSdWxlczpmdW5jdGlvbihyLHMsYyl7Zm9yKHZhciB1PWwociksZj1nZShlKSxkPUNlKG8sdSkscD0wLGg9W10sZz1zLmxlbmd0aCx2PTA7djxnO3YrPTEpe3ZhciBtPXNbdl0sQz1pO0MmJi0xIT09bS5pbmRleE9mKFwiQGltcG9ydFwiKT9oLnB1c2gobSk6dmUoZixtLGQrcCkmJihDPSExLHArPTEpfWkmJmgubGVuZ3RoPjAmJihhPSEwLHQoKS5pbnNlcnRSdWxlcyhyK1wiLWltcG9ydFwiLGgpKSxvW3VdKz1wLGZlKG4scixjKX0scmVtb3ZlUnVsZXM6ZnVuY3Rpb24obCl7dmFyIHM9cltsXTtpZih2b2lkIDAhPT1zJiYhMSE9PWUuaXNDb25uZWN0ZWQpe3ZhciBjPW9bc107IWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9dC1uLG89dDtvPnI7by09MSllLmRlbGV0ZVJ1bGUobyl9KGdlKGUpLENlKG8scyktMSxjKSxvW3NdPTAsZGUobixsKSxpJiZhJiZ0KCkucmVtb3ZlUnVsZXMobCtcIi1pbXBvcnRcIil9fSxzZWFsZWQ6ITEsc3R5bGVUYWc6ZSx0b0VsZW1lbnQ6d2UocyxuKSx0b0hUTUw6eWUocyxuKX19KGksbyl9cmV0dXJuIF9lKCl9LExlPS9cXHMrLyxFZT12b2lkIDA7RWU9ej9HPzQwOjFlMzotMTt2YXIgU2U9MCxqZT12b2lkIDAsTWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIHQ9dGhpcyxuPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp6P2RvY3VtZW50LmhlYWQ6bnVsbCxyPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07UCh0aGlzLGUpLHRoaXMuZ2V0SW1wb3J0UnVsZVRhZz1mdW5jdGlvbigpe3ZhciBlPXQuaW1wb3J0UnVsZVRhZztpZih2b2lkIDAhPT1lKXJldHVybiBlO3ZhciBuPXQudGFnc1swXTtyZXR1cm4gdC5pbXBvcnRSdWxlVGFnPU9lKHQudGFyZ2V0LG4/bi5zdHlsZVRhZzpudWxsLHQuZm9yY2VTZXJ2ZXIsITApfSxTZSs9MSx0aGlzLmlkPVNlLHRoaXMuZm9yY2VTZXJ2ZXI9cix0aGlzLnRhcmdldD1yP251bGw6bix0aGlzLnRhZ01hcD17fSx0aGlzLmRlZmVycmVkPXt9LHRoaXMucmVoeWRyYXRlZE5hbWVzPXt9LHRoaXMuaWdub3JlUmVoeWRyYXRlZE5hbWVzPXt9LHRoaXMudGFncz1bXSx0aGlzLmNhcGFjaXR5PTEsdGhpcy5jbG9uZXM9W119cmV0dXJuIGUucHJvdG90eXBlLnJlaHlkcmF0ZT1mdW5jdGlvbigpe2lmKCF6fHx0aGlzLmZvcmNlU2VydmVyKXJldHVybiB0aGlzO3ZhciBlPVtdLHQ9W10sbj0hMSxyPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzdHlsZVtcIitGK1wiXVtcIitVKyc9XCI0LjQuMVwiXScpLG89ci5sZW5ndGg7aWYoIW8pcmV0dXJuIHRoaXM7Zm9yKHZhciBpPTA7aTxvO2krPTEpe3ZhciBhPXJbaV07bnx8KG49ISFhLmdldEF0dHJpYnV0ZShXKSk7Zm9yKHZhciBsLHM9KGEuZ2V0QXR0cmlidXRlKEYpfHxcIlwiKS50cmltKCkuc3BsaXQoTGUpLGM9cy5sZW5ndGgsdT0wO3U8Yzt1Kz0xKWw9c1t1XSx0aGlzLnJlaHlkcmF0ZWROYW1lc1tsXT0hMDt0LnB1c2guYXBwbHkodCxYKGEudGV4dENvbnRlbnQpKSxlLnB1c2goYSl9dmFyIGY9dC5sZW5ndGg7aWYoIWYpcmV0dXJuIHRoaXM7dmFyIGQ9dGhpcy5tYWtlVGFnKG51bGwpOyFmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPTAsbz1uLmxlbmd0aDtyPG87cis9MSl7dmFyIGk9bltyXSxhPWkuY29tcG9uZW50SWQsbD1pLmNzc0Zyb21ET00scz1zZShsKTtlLmluc2VydFJ1bGVzKGEscyl9Zm9yKHZhciBjPTAsdT10Lmxlbmd0aDtjPHU7Yys9MSl7dmFyIGY9dFtjXTtmLnBhcmVudE5vZGUmJmYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChmKX19KGQsZSx0KSx0aGlzLmNhcGFjaXR5PU1hdGgubWF4KDEsRWUtZiksdGhpcy50YWdzLnB1c2goZCk7Zm9yKHZhciBwPTA7cDxmO3ArPTEpdGhpcy50YWdNYXBbdFtwXS5jb21wb25lbnRJZF09ZDtyZXR1cm4gdGhpc30sZS5yZXNldD1mdW5jdGlvbigpe2plPW5ldyBlKHZvaWQgMCxhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKS5yZWh5ZHJhdGUoKX0sZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgZSh0aGlzLnRhcmdldCx0aGlzLmZvcmNlU2VydmVyKTtyZXR1cm4gdGhpcy5jbG9uZXMucHVzaCh0KSx0LnRhZ3M9dGhpcy50YWdzLm1hcCgoZnVuY3Rpb24oZSl7Zm9yKHZhciBuPWUuZ2V0SWRzKCkscj1lLmNsb25lKCksbz0wO288bi5sZW5ndGg7bys9MSl0LnRhZ01hcFtuW29dXT1yO3JldHVybiByfSkpLHQucmVoeWRyYXRlZE5hbWVzPUEoe30sdGhpcy5yZWh5ZHJhdGVkTmFtZXMpLHQuZGVmZXJyZWQ9QSh7fSx0aGlzLmRlZmVycmVkKSx0fSxlLnByb3RvdHlwZS5zZWFsQWxsVGFncz1mdW5jdGlvbigpe3RoaXMuY2FwYWNpdHk9MSx0aGlzLnRhZ3MuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5zZWFsZWQ9ITB9KSl9LGUucHJvdG90eXBlLm1ha2VUYWc9ZnVuY3Rpb24oZSl7dmFyIHQ9ZT9lLnN0eWxlVGFnOm51bGw7cmV0dXJuIE9lKHRoaXMudGFyZ2V0LHQsdGhpcy5mb3JjZVNlcnZlciwhMSx0aGlzLmdldEltcG9ydFJ1bGVUYWcpfSxlLnByb3RvdHlwZS5nZXRUYWdGb3JJZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnRhZ01hcFtlXTtpZih2b2lkIDAhPT10JiYhdC5zZWFsZWQpcmV0dXJuIHQ7dmFyIG49dGhpcy50YWdzW3RoaXMudGFncy5sZW5ndGgtMV07cmV0dXJuIHRoaXMuY2FwYWNpdHktPTEsMD09PXRoaXMuY2FwYWNpdHkmJih0aGlzLmNhcGFjaXR5PUVlLG49dGhpcy5tYWtlVGFnKG4pLHRoaXMudGFncy5wdXNoKG4pKSx0aGlzLnRhZ01hcFtlXT1ufSxlLnByb3RvdHlwZS5oYXNJZD1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09dGhpcy50YWdNYXBbZV19LGUucHJvdG90eXBlLmhhc05hbWVGb3JJZD1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PXRoaXMuaWdub3JlUmVoeWRyYXRlZE5hbWVzW2VdJiZ0aGlzLnJlaHlkcmF0ZWROYW1lc1t0XSlyZXR1cm4hMDt2YXIgbj10aGlzLnRhZ01hcFtlXTtyZXR1cm4gdm9pZCAwIT09biYmbi5oYXNOYW1lRm9ySWQoZSx0KX0sZS5wcm90b3R5cGUuZGVmZXJyZWRJbmplY3Q9ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDA9PT10aGlzLnRhZ01hcFtlXSl7Zm9yKHZhciBuPXRoaXMuY2xvbmVzLHI9MDtyPG4ubGVuZ3RoO3IrPTEpbltyXS5kZWZlcnJlZEluamVjdChlLHQpO3RoaXMuZ2V0VGFnRm9ySWQoZSkuaW5zZXJ0TWFya2VyKGUpLHRoaXMuZGVmZXJyZWRbZV09dH19LGUucHJvdG90eXBlLmluamVjdD1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPXRoaXMuY2xvbmVzLG89MDtvPHIubGVuZ3RoO28rPTEpcltvXS5pbmplY3QoZSx0LG4pO3ZhciBpPXRoaXMuZ2V0VGFnRm9ySWQoZSk7aWYodm9pZCAwIT09dGhpcy5kZWZlcnJlZFtlXSl7dmFyIGE9dGhpcy5kZWZlcnJlZFtlXS5jb25jYXQodCk7aS5pbnNlcnRSdWxlcyhlLGEsbiksdGhpcy5kZWZlcnJlZFtlXT12b2lkIDB9ZWxzZSBpLmluc2VydFJ1bGVzKGUsdCxuKX0sZS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMudGFnTWFwW2VdO2lmKHZvaWQgMCE9PXQpe2Zvcih2YXIgbj10aGlzLmNsb25lcyxyPTA7cjxuLmxlbmd0aDtyKz0xKW5bcl0ucmVtb3ZlKGUpO3QucmVtb3ZlUnVsZXMoZSksdGhpcy5pZ25vcmVSZWh5ZHJhdGVkTmFtZXNbZV09ITAsdGhpcy5kZWZlcnJlZFtlXT12b2lkIDB9fSxlLnByb3RvdHlwZS50b0hUTUw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YWdzLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9IVE1MKCl9KSkuam9pbihcIlwiKX0sZS5wcm90b3R5cGUudG9SZWFjdEVsZW1lbnRzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5pZDtyZXR1cm4gdGhpcy50YWdzLm1hcCgoZnVuY3Rpb24odCxuKXt2YXIgcj1cInNjLVwiK2UrXCItXCIrbjtyZXR1cm4oMCxsLmNsb25lRWxlbWVudCkodC50b0VsZW1lbnQoKSx7a2V5OnJ9KX0pKX0sSShlLG51bGwsW3trZXk6XCJtYXN0ZXJcIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gamV8fChqZT0obmV3IGUpLnJlaHlkcmF0ZSgpKX19LHtrZXk6XCJpbnN0YW5jZVwiLGdldDpmdW5jdGlvbigpe3JldHVybiBlLm1hc3Rlcn19XSksZX0oKSxrZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxuKXt2YXIgcj10aGlzO1AodGhpcyxlKSx0aGlzLmluamVjdD1mdW5jdGlvbihlKXtlLmhhc05hbWVGb3JJZChyLmlkLHIubmFtZSl8fGUuaW5qZWN0KHIuaWQsci5ydWxlcyxyLm5hbWUpfSx0aGlzLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IFkoMTIsU3RyaW5nKHIubmFtZSkpfSx0aGlzLm5hbWU9dCx0aGlzLnJ1bGVzPW4sdGhpcy5pZD1cInNjLWtleWZyYW1lcy1cIit0fXJldHVybiBlLnByb3RvdHlwZS5nZXROYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZX0sZX0oKSxSZT0vKFtBLVpdKS9nLFBlPS9ebXMtLztmdW5jdGlvbiBJZShlKXtyZXR1cm4gZS5yZXBsYWNlKFJlLFwiLSQxXCIpLnRvTG93ZXJDYXNlKCkucmVwbGFjZShQZSxcIi1tcy1cIil9dmFyIEFlPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lfHwhMT09PWV8fFwiXCI9PT1lfSxUZT1mdW5jdGlvbiBlKHQsbil7dmFyIHI9W107cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKG4pe2lmKCFBZSh0W25dKSl7aWYoQih0W25dKSlyZXR1cm4gci5wdXNoLmFwcGx5KHIsZSh0W25dLG4pKSxyO2lmKFoodFtuXSkpcmV0dXJuIHIucHVzaChJZShuKStcIjpcIix0W25dLFwiO1wiKSxyO3IucHVzaChJZShuKStcIjogXCIrKG89biwobnVsbD09KGk9dFtuXSl8fFwiYm9vbGVhblwiPT10eXBlb2YgaXx8XCJcIj09PWk/XCJcIjpcIm51bWJlclwiIT10eXBlb2YgaXx8MD09PWl8fG8gaW4gcz9TdHJpbmcoaSkudHJpbSgpOmkrXCJweFwiKStcIjtcIikpfXZhciBvLGk7cmV0dXJuIHJ9KSksbj9bbitcIiB7XCJdLmNvbmNhdChyLFtcIn1cIl0pOnJ9O2Z1bmN0aW9uIEhlKGUsdCxuKXtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHIsbz1bXSxpPTAsYT1lLmxlbmd0aDtpPGE7aSs9MSludWxsIT09KHI9SGUoZVtpXSx0LG4pKSYmKEFycmF5LmlzQXJyYXkocik/by5wdXNoLmFwcGx5KG8scik6by5wdXNoKHIpKTtyZXR1cm4gb31yZXR1cm4gQWUoZSk/bnVsbDpOKGUpP1wiLlwiK2Uuc3R5bGVkQ29tcG9uZW50SWQ6WihlKT9cImZ1bmN0aW9uXCIhPXR5cGVvZihsPWUpfHxsLnByb3RvdHlwZSYmbC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudHx8IXQ/ZTpIZShlKHQpLHQsbik6ZSBpbnN0YW5jZW9mIGtlP24/KGUuaW5qZWN0KG4pLGUuZ2V0TmFtZSgpKTplOkIoZSk/VGUoZSk6ZS50b1N0cmluZygpO3ZhciBsfWZ1bmN0aW9uIEJlKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkodD4xP3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO3JldHVybiBaKGUpfHxCKGUpP0hlKGsoVixbZV0uY29uY2F0KG4pKSk6SGUoayhlLG4pKX1mdW5jdGlvbiBWZShlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpEO2lmKCEoMCxjLmlzVmFsaWRFbGVtZW50VHlwZSkodCkpdGhyb3cgbmV3IFkoMSxTdHJpbmcodCkpO3ZhciByPWZ1bmN0aW9uKCl7cmV0dXJuIGUodCxuLEJlLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpKX07cmV0dXJuIHIud2l0aENvbmZpZz1mdW5jdGlvbihyKXtyZXR1cm4gVmUoZSx0LEEoe30sbixyKSl9LHIuYXR0cnM9ZnVuY3Rpb24ocil7cmV0dXJuIFZlKGUsdCxBKHt9LG4se2F0dHJzOkFycmF5LnByb3RvdHlwZS5jb25jYXQobi5hdHRycyxyKS5maWx0ZXIoQm9vbGVhbil9KSl9LHJ9ZnVuY3Rpb24gRGUoZSl7Zm9yKHZhciB0LG49MHxlLmxlbmd0aCxyPTB8bixvPTA7bj49NDspdD0xNTQwNDgzNDc3Kig2NTUzNSYodD0yNTUmZS5jaGFyQ29kZUF0KG8pfCgyNTUmZS5jaGFyQ29kZUF0KCsrbykpPDw4fCgyNTUmZS5jaGFyQ29kZUF0KCsrbykpPDwxNnwoMjU1JmUuY2hhckNvZGVBdCgrK28pKTw8MjQpKSsoKDE1NDA0ODM0NzcqKHQ+Pj4xNikmNjU1MzUpPDwxNikscj0xNTQwNDgzNDc3Kig2NTUzNSZyKSsoKDE1NDA0ODM0NzcqKHI+Pj4xNikmNjU1MzUpPDwxNileKHQ9MTU0MDQ4MzQ3NyooNjU1MzUmKHRePXQ+Pj4yNCkpKygoMTU0MDQ4MzQ3NyoodD4+PjE2KSY2NTUzNSk8PDE2KSksbi09NCwrK287c3dpdGNoKG4pe2Nhc2UgMzpyXj0oMjU1JmUuY2hhckNvZGVBdChvKzIpKTw8MTY7Y2FzZSAyOnJePSgyNTUmZS5jaGFyQ29kZUF0KG8rMSkpPDw4O2Nhc2UgMTpyPTE1NDA0ODM0NzcqKDY1NTM1JihyXj0yNTUmZS5jaGFyQ29kZUF0KG8pKSkrKCgxNTQwNDgzNDc3KihyPj4+MTYpJjY1NTM1KTw8MTYpfXJldHVybigocj0xNTQwNDgzNDc3Kig2NTUzNSYocl49cj4+PjEzKSkrKCgxNTQwNDgzNDc3KihyPj4+MTYpJjY1NTM1KTw8MTYpKV5yPj4+MTUpPj4+MH12YXIgWmU9NTIsJGU9ZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZSsoZT4yNT8zOTo5NykpfTtmdW5jdGlvbiBOZShlKXt2YXIgdD1cIlwiLG49dm9pZCAwO2ZvcihuPWU7bj5aZTtuPU1hdGguZmxvb3Iobi9aZSkpdD0kZShuJVplKSt0O3JldHVybiAkZShuJVplKSt0fWZ1bmN0aW9uIEZlKGUsdCl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKz0xKXt2YXIgcj1lW25dO2lmKEFycmF5LmlzQXJyYXkocikmJiFGZShyLHQpKXJldHVybiExO2lmKFoocikmJiFOKHIpKXJldHVybiExfXJldHVybiF0LnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBaKGUpfHxmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gZSlpZihaKGVbdF0pKXJldHVybiEwO3JldHVybiExfShlKX0pKX12YXIgVWUsV2U9ZnVuY3Rpb24oZSl7cmV0dXJuIE5lKERlKGUpKX0semU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbixyKXtQKHRoaXMsZSksdGhpcy5ydWxlcz10LHRoaXMuaXNTdGF0aWM9RmUodCxuKSx0aGlzLmNvbXBvbmVudElkPXIsTWUubWFzdGVyLmhhc0lkKHIpfHxNZS5tYXN0ZXIuZGVmZXJyZWRJbmplY3QocixbXSl9cmV0dXJuIGUucHJvdG90eXBlLmdlbmVyYXRlQW5kSW5qZWN0U3R5bGVzPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5pc1N0YXRpYyxyPXRoaXMuY29tcG9uZW50SWQsbz10aGlzLmxhc3RDbGFzc05hbWU7aWYoeiYmbiYmXCJzdHJpbmdcIj09dHlwZW9mIG8mJnQuaGFzTmFtZUZvcklkKHIsbykpcmV0dXJuIG87dmFyIGk9SGUodGhpcy5ydWxlcyxlLHQpLGE9V2UodGhpcy5jb21wb25lbnRJZCtpLmpvaW4oXCJcIikpO3JldHVybiB0Lmhhc05hbWVGb3JJZChyLGEpfHx0LmluamVjdCh0aGlzLmNvbXBvbmVudElkLGNlKGksXCIuXCIrYSx2b2lkIDAsciksYSksdGhpcy5sYXN0Q2xhc3NOYW1lPWEsYX0sZS5nZW5lcmF0ZU5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIFdlKGUpfSxlfSgpLEdlPWZ1bmN0aW9uKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOkQscj0hIW4mJmUudGhlbWU9PT1uLnRoZW1lO3JldHVybiBlLnRoZW1lJiYhcj9lLnRoZW1lOnR8fG4udGhlbWV9LHFlPS9bW1xcXS4jKiQ+PCt+PXxeOigpLFwiJ2AtXSsvZyxZZT0vKF4tfC0kKS9nO2Z1bmN0aW9uIEtlKGUpe3JldHVybiBlLnJlcGxhY2UocWUsXCItXCIpLnJlcGxhY2UoWWUsXCJcIil9ZnVuY3Rpb24gWGUoZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUmJiEwfXZhciBKZT17Y2hpbGRDb250ZXh0VHlwZXM6ITAsY29udGV4dFR5cGVzOiEwLGRlZmF1bHRQcm9wczohMCxkaXNwbGF5TmFtZTohMCxnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM6ITAscHJvcFR5cGVzOiEwLHR5cGU6ITB9LFFlPXtuYW1lOiEwLGxlbmd0aDohMCxwcm90b3R5cGU6ITAsY2FsbGVyOiEwLGNhbGxlZTohMCxhcmd1bWVudHM6ITAsYXJpdHk6ITB9LGV0PSgoVWU9e30pW2MuRm9yd2FyZFJlZl09eyQkdHlwZW9mOiEwLHJlbmRlcjohMH0sVWUpLHR0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxudD1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyxydD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLG90PXZvaWQgMD09PXJ0P2Z1bmN0aW9uKCl7cmV0dXJuW119OnJ0LGl0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsYXQ9T2JqZWN0LmdldFByb3RvdHlwZU9mLGx0PU9iamVjdC5wcm90b3R5cGUsc3Q9QXJyYXkucHJvdG90eXBlO2Z1bmN0aW9uIGN0KGUsdCxuKXtpZihcInN0cmluZ1wiIT10eXBlb2YgdCl7dmFyIHI9YXQodCk7ciYmciE9PWx0JiZjdChlLHIsbik7Zm9yKHZhciBvPXN0LmNvbmNhdChudCh0KSxvdCh0KSksaT1ldFtlLiQkdHlwZW9mXXx8SmUsYT1ldFt0LiQkdHlwZW9mXXx8SmUsbD1vLmxlbmd0aCxzPXZvaWQgMCxjPXZvaWQgMDtsLS07KWlmKGM9b1tsXSwhKFFlW2NdfHxuJiZuW2NdfHxhJiZhW2NdfHxpJiZpW2NdKSYmKHM9aXQodCxjKSkpdHJ5e3R0KGUsYyxzKX1jYXRjaChlKXt9cmV0dXJuIGV9cmV0dXJuIGV9dmFyIHV0PSgwLGwuY3JlYXRlQ29udGV4dCkoKSxmdD11dC5Db25zdW1lcixkdD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe1AodGhpcyx0KTt2YXIgcj1IKHRoaXMsZS5jYWxsKHRoaXMsbikpO3JldHVybiByLmdldENvbnRleHQ9ZChyLmdldENvbnRleHQuYmluZChyKSksci5yZW5kZXJJbm5lcj1yLnJlbmRlcklubmVyLmJpbmQocikscn1yZXR1cm4gVCh0LGUpLHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuP2wuY3JlYXRlRWxlbWVudCh1dC5Db25zdW1lcixudWxsLHRoaXMucmVuZGVySW5uZXIpOm51bGx9LHQucHJvdG90eXBlLnJlbmRlcklubmVyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0Q29udGV4dCh0aGlzLnByb3BzLnRoZW1lLGUpO3JldHVybiBsLmNyZWF0ZUVsZW1lbnQodXQuUHJvdmlkZXIse3ZhbHVlOnR9LHRoaXMucHJvcHMuY2hpbGRyZW4pfSx0LnByb3RvdHlwZS5nZXRUaGVtZT1mdW5jdGlvbihlLHQpe2lmKFooZSkpcmV0dXJuIGUodCk7aWYobnVsbD09PWV8fEFycmF5LmlzQXJyYXkoZSl8fFwib2JqZWN0XCIhPT0odm9pZCAwPT09ZT9cInVuZGVmaW5lZFwiOlIoZSkpKXRocm93IG5ldyBZKDgpO3JldHVybiBBKHt9LHQsZSl9LHQucHJvdG90eXBlLmdldENvbnRleHQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5nZXRUaGVtZShlLHQpfSx0fShsLkNvbXBvbmVudCkscHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7UCh0aGlzLGUpLHRoaXMubWFzdGVyU2hlZXQ9TWUubWFzdGVyLHRoaXMuaW5zdGFuY2U9dGhpcy5tYXN0ZXJTaGVldC5jbG9uZSgpLHRoaXMuc2VhbGVkPSExfXJldHVybiBlLnByb3RvdHlwZS5zZWFsPWZ1bmN0aW9uKCl7aWYoIXRoaXMuc2VhbGVkKXt2YXIgZT10aGlzLm1hc3RlclNoZWV0LmNsb25lcy5pbmRleE9mKHRoaXMuaW5zdGFuY2UpO3RoaXMubWFzdGVyU2hlZXQuY2xvbmVzLnNwbGljZShlLDEpLHRoaXMuc2VhbGVkPSEwfX0sZS5wcm90b3R5cGUuY29sbGVjdFN0eWxlcz1mdW5jdGlvbihlKXtpZih0aGlzLnNlYWxlZCl0aHJvdyBuZXcgWSgyKTtyZXR1cm4gbC5jcmVhdGVFbGVtZW50KHZ0LHtzaGVldDp0aGlzLmluc3RhbmNlfSxlKX0sZS5wcm90b3R5cGUuZ2V0U3R5bGVUYWdzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VhbCgpLHRoaXMuaW5zdGFuY2UudG9IVE1MKCl9LGUucHJvdG90eXBlLmdldFN0eWxlRWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlYWwoKSx0aGlzLmluc3RhbmNlLnRvUmVhY3RFbGVtZW50cygpfSxlLnByb3RvdHlwZS5pbnRlcmxlYXZlV2l0aE5vZGVTdHJlYW09ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IFkoMyl9LGV9KCksaHQ9KDAsbC5jcmVhdGVDb250ZXh0KSgpLGd0PWh0LkNvbnN1bWVyLHZ0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7UCh0aGlzLHQpO3ZhciByPUgodGhpcyxlLmNhbGwodGhpcyxuKSk7cmV0dXJuIHIuZ2V0Q29udGV4dD1kKHIuZ2V0Q29udGV4dCkscn1yZXR1cm4gVCh0LGUpLHQucHJvdG90eXBlLmdldENvbnRleHQ9ZnVuY3Rpb24oZSx0KXtpZihlKXJldHVybiBlO2lmKHQpcmV0dXJuIG5ldyBNZSh0KTt0aHJvdyBuZXcgWSg0KX0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuY2hpbGRyZW4sbj1lLnNoZWV0LHI9ZS50YXJnZXQ7cmV0dXJuIGwuY3JlYXRlRWxlbWVudChodC5Qcm92aWRlcix7dmFsdWU6dGhpcy5nZXRDb250ZXh0KG4scil9LHQpfSx0fShsLkNvbXBvbmVudCksbXQ9e307dmFyIEN0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtQKHRoaXMsdCk7dmFyIG49SCh0aGlzLGUuY2FsbCh0aGlzKSk7cmV0dXJuIG4uYXR0cnM9e30sbi5yZW5kZXJPdXRlcj1uLnJlbmRlck91dGVyLmJpbmQobiksbi5yZW5kZXJJbm5lcj1uLnJlbmRlcklubmVyLmJpbmQobiksbn1yZXR1cm4gVCh0LGUpLHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiBsLmNyZWF0ZUVsZW1lbnQoZ3QsbnVsbCx0aGlzLnJlbmRlck91dGVyKX0sdC5wcm90b3R5cGUucmVuZGVyT3V0ZXI9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06TWUubWFzdGVyO3JldHVybiB0aGlzLnN0eWxlU2hlZXQ9ZSx0aGlzLnByb3BzLmZvcndhcmRlZENvbXBvbmVudC5jb21wb25lbnRTdHlsZS5pc1N0YXRpYz90aGlzLnJlbmRlcklubmVyKCk6bC5jcmVhdGVFbGVtZW50KGZ0LG51bGwsdGhpcy5yZW5kZXJJbm5lcil9LHQucHJvdG90eXBlLnJlbmRlcklubmVyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMuZm9yd2FyZGVkQ29tcG9uZW50LG49dC5jb21wb25lbnRTdHlsZSxyPXQuZGVmYXVsdFByb3BzLG89KHQuZGlzcGxheU5hbWUsdC5mb2xkZWRDb21wb25lbnRJZHMpLGk9dC5zdHlsZWRDb21wb25lbnRJZCxhPXQudGFyZ2V0LHM9dm9pZCAwO3M9bi5pc1N0YXRpYz90aGlzLmdlbmVyYXRlQW5kSW5qZWN0U3R5bGVzKEQsdGhpcy5wcm9wcyk6dGhpcy5nZW5lcmF0ZUFuZEluamVjdFN0eWxlcyhHZSh0aGlzLnByb3BzLGUscil8fEQsdGhpcy5wcm9wcyk7dmFyIGM9dGhpcy5wcm9wcy5hc3x8dGhpcy5hdHRycy5hc3x8YSx1PVhlKGMpLGY9e30sZD1BKHt9LHRoaXMucHJvcHMsdGhpcy5hdHRycykscD12b2lkIDA7Zm9yKHAgaW4gZClcImZvcndhcmRlZENvbXBvbmVudFwiIT09cCYmXCJhc1wiIT09cCYmKFwiZm9yd2FyZGVkUmVmXCI9PT1wP2YucmVmPWRbcF06XCJmb3J3YXJkZWRBc1wiPT09cD9mLmFzPWRbcF06dSYmIWgocCl8fChmW3BdPWRbcF0pKTtyZXR1cm4gdGhpcy5wcm9wcy5zdHlsZSYmdGhpcy5hdHRycy5zdHlsZSYmKGYuc3R5bGU9QSh7fSx0aGlzLmF0dHJzLnN0eWxlLHRoaXMucHJvcHMuc3R5bGUpKSxmLmNsYXNzTmFtZT1BcnJheS5wcm90b3R5cGUuY29uY2F0KG8saSxzIT09aT9zOm51bGwsdGhpcy5wcm9wcy5jbGFzc05hbWUsdGhpcy5hdHRycy5jbGFzc05hbWUpLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKSwoMCxsLmNyZWF0ZUVsZW1lbnQpKGMsZil9LHQucHJvdG90eXBlLmJ1aWxkRXhlY3V0aW9uQ29udGV4dD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyxvPUEoe30sdCx7dGhlbWU6ZX0pO3JldHVybiBuLmxlbmd0aD8odGhpcy5hdHRycz17fSxuLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0LG49ZSxpPSExLGE9dm9pZCAwLGw9dm9pZCAwO2ZvcihsIGluIFoobikmJihuPW4obyksaT0hMCksbilhPW5bbF0saXx8IVooYSl8fCh0PWEpJiZ0LnByb3RvdHlwZSYmdC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudHx8TihhKXx8KGE9YShvKSksci5hdHRyc1tsXT1hLG9bbF09YX0pKSxvKTpvfSx0LnByb3RvdHlwZS5nZW5lcmF0ZUFuZEluamVjdFN0eWxlcz1mdW5jdGlvbihlLHQpe3ZhciBuPXQuZm9yd2FyZGVkQ29tcG9uZW50LHI9bi5hdHRycyxvPW4uY29tcG9uZW50U3R5bGU7bi53YXJuVG9vTWFueUNsYXNzZXM7cmV0dXJuIG8uaXNTdGF0aWMmJiFyLmxlbmd0aD9vLmdlbmVyYXRlQW5kSW5qZWN0U3R5bGVzKEQsdGhpcy5zdHlsZVNoZWV0KTpvLmdlbmVyYXRlQW5kSW5qZWN0U3R5bGVzKHRoaXMuYnVpbGRFeGVjdXRpb25Db250ZXh0KGUsdCxyKSx0aGlzLnN0eWxlU2hlZXQpfSx0fShsLkNvbXBvbmVudCk7ZnVuY3Rpb24geXQoZSx0LG4pe3ZhciByPU4oZSksbz0hWGUoZSksaT10LmRpc3BsYXlOYW1lLGE9dm9pZCAwPT09aT9mdW5jdGlvbihlKXtyZXR1cm4gWGUoZSk/XCJzdHlsZWQuXCIrZTpcIlN0eWxlZChcIiskKGUpK1wiKVwifShlKTppLHM9dC5jb21wb25lbnRJZCxjPXZvaWQgMD09PXM/ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVwic3RyaW5nXCIhPXR5cGVvZiB0P1wic2NcIjpLZSh0KSxvPShtdFtyXXx8MCkrMTttdFtyXT1vO3ZhciBpPXIrXCItXCIrZS5nZW5lcmF0ZU5hbWUocitvKTtyZXR1cm4gbj9uK1wiLVwiK2k6aX0oemUsdC5kaXNwbGF5TmFtZSx0LnBhcmVudENvbXBvbmVudElkKTpzLHU9dC5QYXJlbnRDb21wb25lbnQsZj12b2lkIDA9PT11P0N0OnUsZD10LmF0dHJzLHA9dm9pZCAwPT09ZD9WOmQsaD10LmRpc3BsYXlOYW1lJiZ0LmNvbXBvbmVudElkP0tlKHQuZGlzcGxheU5hbWUpK1wiLVwiK3QuY29tcG9uZW50SWQ6dC5jb21wb25lbnRJZHx8YyxnPXImJmUuYXR0cnM/QXJyYXkucHJvdG90eXBlLmNvbmNhdChlLmF0dHJzLHApLmZpbHRlcihCb29sZWFuKTpwLHY9bmV3IHplKHI/ZS5jb21wb25lbnRTdHlsZS5ydWxlcy5jb25jYXQobik6bixnLGgpLG09dm9pZCAwLEM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbC5jcmVhdGVFbGVtZW50KGYsQSh7fSxlLHtmb3J3YXJkZWRDb21wb25lbnQ6bSxmb3J3YXJkZWRSZWY6dH0pKX07cmV0dXJuIEMuZGlzcGxheU5hbWU9YSwobT1sLmZvcndhcmRSZWYoQykpLmRpc3BsYXlOYW1lPWEsbS5hdHRycz1nLG0uY29tcG9uZW50U3R5bGU9dixtLmZvbGRlZENvbXBvbmVudElkcz1yP0FycmF5LnByb3RvdHlwZS5jb25jYXQoZS5mb2xkZWRDb21wb25lbnRJZHMsZS5zdHlsZWRDb21wb25lbnRJZCk6VixtLnN0eWxlZENvbXBvbmVudElkPWgsbS50YXJnZXQ9cj9lLnRhcmdldDplLG0ud2l0aENvbXBvbmVudD1mdW5jdGlvbihlKXt2YXIgcj10LmNvbXBvbmVudElkLG89ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSl0LmluZGV4T2Yocik+PTB8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiYobltyXT1lW3JdKTtyZXR1cm4gbn0odCxbXCJjb21wb25lbnRJZFwiXSksaT1yJiZyK1wiLVwiKyhYZShlKT9lOktlKCQoZSkpKTtyZXR1cm4geXQoZSxBKHt9LG8se2F0dHJzOmcsY29tcG9uZW50SWQ6aSxQYXJlbnRDb21wb25lbnQ6Zn0pLG4pfSxPYmplY3QuZGVmaW5lUHJvcGVydHkobSxcImRlZmF1bHRQcm9wc1wiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9sZGVkRGVmYXVsdFByb3BzfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZm9sZGVkRGVmYXVsdFByb3BzPXI/TShlLmRlZmF1bHRQcm9wcyx0KTp0fX0pLG0udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIi5cIittLnN0eWxlZENvbXBvbmVudElkfSxvJiZjdChtLGUse2F0dHJzOiEwLGNvbXBvbmVudFN0eWxlOiEwLGRpc3BsYXlOYW1lOiEwLGZvbGRlZENvbXBvbmVudElkczohMCxzdHlsZWRDb21wb25lbnRJZDohMCx0YXJnZXQ6ITAsd2l0aENvbXBvbmVudDohMH0pLG19dmFyIHd0PWZ1bmN0aW9uKGUpe3JldHVybiBWZSh5dCxlKX07W1wiYVwiLFwiYWJiclwiLFwiYWRkcmVzc1wiLFwiYXJlYVwiLFwiYXJ0aWNsZVwiLFwiYXNpZGVcIixcImF1ZGlvXCIsXCJiXCIsXCJiYXNlXCIsXCJiZGlcIixcImJkb1wiLFwiYmlnXCIsXCJibG9ja3F1b3RlXCIsXCJib2R5XCIsXCJiclwiLFwiYnV0dG9uXCIsXCJjYW52YXNcIixcImNhcHRpb25cIixcImNpdGVcIixcImNvZGVcIixcImNvbFwiLFwiY29sZ3JvdXBcIixcImRhdGFcIixcImRhdGFsaXN0XCIsXCJkZFwiLFwiZGVsXCIsXCJkZXRhaWxzXCIsXCJkZm5cIixcImRpYWxvZ1wiLFwiZGl2XCIsXCJkbFwiLFwiZHRcIixcImVtXCIsXCJlbWJlZFwiLFwiZmllbGRzZXRcIixcImZpZ2NhcHRpb25cIixcImZpZ3VyZVwiLFwiZm9vdGVyXCIsXCJmb3JtXCIsXCJoMVwiLFwiaDJcIixcImgzXCIsXCJoNFwiLFwiaDVcIixcImg2XCIsXCJoZWFkXCIsXCJoZWFkZXJcIixcImhncm91cFwiLFwiaHJcIixcImh0bWxcIixcImlcIixcImlmcmFtZVwiLFwiaW1nXCIsXCJpbnB1dFwiLFwiaW5zXCIsXCJrYmRcIixcImtleWdlblwiLFwibGFiZWxcIixcImxlZ2VuZFwiLFwibGlcIixcImxpbmtcIixcIm1haW5cIixcIm1hcFwiLFwibWFya1wiLFwibWFycXVlZVwiLFwibWVudVwiLFwibWVudWl0ZW1cIixcIm1ldGFcIixcIm1ldGVyXCIsXCJuYXZcIixcIm5vc2NyaXB0XCIsXCJvYmplY3RcIixcIm9sXCIsXCJvcHRncm91cFwiLFwib3B0aW9uXCIsXCJvdXRwdXRcIixcInBcIixcInBhcmFtXCIsXCJwaWN0dXJlXCIsXCJwcmVcIixcInByb2dyZXNzXCIsXCJxXCIsXCJycFwiLFwicnRcIixcInJ1YnlcIixcInNcIixcInNhbXBcIixcInNjcmlwdFwiLFwic2VjdGlvblwiLFwic2VsZWN0XCIsXCJzbWFsbFwiLFwic291cmNlXCIsXCJzcGFuXCIsXCJzdHJvbmdcIixcInN0eWxlXCIsXCJzdWJcIixcInN1bW1hcnlcIixcInN1cFwiLFwidGFibGVcIixcInRib2R5XCIsXCJ0ZFwiLFwidGV4dGFyZWFcIixcInRmb290XCIsXCJ0aFwiLFwidGhlYWRcIixcInRpbWVcIixcInRpdGxlXCIsXCJ0clwiLFwidHJhY2tcIixcInVcIixcInVsXCIsXCJ2YXJcIixcInZpZGVvXCIsXCJ3YnJcIixcImNpcmNsZVwiLFwiY2xpcFBhdGhcIixcImRlZnNcIixcImVsbGlwc2VcIixcImZvcmVpZ25PYmplY3RcIixcImdcIixcImltYWdlXCIsXCJsaW5lXCIsXCJsaW5lYXJHcmFkaWVudFwiLFwibWFya2VyXCIsXCJtYXNrXCIsXCJwYXRoXCIsXCJwYXR0ZXJuXCIsXCJwb2x5Z29uXCIsXCJwb2x5bGluZVwiLFwicmFkaWFsR3JhZGllbnRcIixcInJlY3RcIixcInN0b3BcIixcInN2Z1wiLFwidGV4dFwiLFwidHNwYW5cIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7d3RbZV09d3QoZSl9KSk7dmFyIGJ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4pe1AodGhpcyxlKSx0aGlzLnJ1bGVzPXQsdGhpcy5jb21wb25lbnRJZD1uLHRoaXMuaXNTdGF0aWM9RmUodCxWKSxNZS5tYXN0ZXIuaGFzSWQobil8fE1lLm1hc3Rlci5kZWZlcnJlZEluamVjdChuLFtdKX1yZXR1cm4gZS5wcm90b3R5cGUuY3JlYXRlU3R5bGVzPWZ1bmN0aW9uKGUsdCl7dmFyIG49Y2UoSGUodGhpcy5ydWxlcyxlLHQpLFwiXCIpO3QuaW5qZWN0KHRoaXMuY29tcG9uZW50SWQsbil9LGUucHJvdG90eXBlLnJlbW92ZVN0eWxlcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmNvbXBvbmVudElkO2UuaGFzSWQodCkmJmUucmVtb3ZlKHQpfSxlLnByb3RvdHlwZS5yZW5kZXJTdHlsZXM9ZnVuY3Rpb24oZSx0KXt0aGlzLnJlbW92ZVN0eWxlcyh0KSx0aGlzLmNyZWF0ZVN0eWxlcyhlLHQpfSxlfSgpO2Z1bmN0aW9uIHh0KGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkodD4xP3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO3ZhciBvPUJlLmFwcGx5KHZvaWQgMCxbZV0uY29uY2F0KG4pKSxpPVwic2MtZ2xvYmFsLVwiK0RlKEpTT04uc3RyaW5naWZ5KG8pKSxhPW5ldyBidChvLGkpLHM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtQKHRoaXMsdCk7dmFyIHI9SCh0aGlzLGUuY2FsbCh0aGlzLG4pKSxvPXIuY29uc3RydWN0b3IsaT1vLmdsb2JhbFN0eWxlLGE9by5zdHlsZWRDb21wb25lbnRJZDtyZXR1cm4geiYmKHdpbmRvdy5zY0NHU0hNUkNhY2hlW2FdPSh3aW5kb3cuc2NDR1NITVJDYWNoZVthXXx8MCkrMSksci5zdGF0ZT17Z2xvYmFsU3R5bGU6aSxzdHlsZWRDb21wb25lbnRJZDphfSxyfXJldHVybiBUKHQsZSksdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt3aW5kb3cuc2NDR1NITVJDYWNoZVt0aGlzLnN0YXRlLnN0eWxlZENvbXBvbmVudElkXSYmKHdpbmRvdy5zY0NHU0hNUkNhY2hlW3RoaXMuc3RhdGUuc3R5bGVkQ29tcG9uZW50SWRdLT0xKSwwPT09d2luZG93LnNjQ0dTSE1SQ2FjaGVbdGhpcy5zdGF0ZS5zdHlsZWRDb21wb25lbnRJZF0mJnRoaXMuc3RhdGUuZ2xvYmFsU3R5bGUucmVtb3ZlU3R5bGVzKHRoaXMuc3R5bGVTaGVldCl9LHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIGwuY3JlYXRlRWxlbWVudChndCxudWxsLChmdW5jdGlvbih0KXtlLnN0eWxlU2hlZXQ9dHx8TWUubWFzdGVyO3ZhciBuPWUuc3RhdGUuZ2xvYmFsU3R5bGU7cmV0dXJuIG4uaXNTdGF0aWM/KG4ucmVuZGVyU3R5bGVzKHEsZS5zdHlsZVNoZWV0KSxudWxsKTpsLmNyZWF0ZUVsZW1lbnQoZnQsbnVsbCwoZnVuY3Rpb24odCl7dmFyIHI9ZS5jb25zdHJ1Y3Rvci5kZWZhdWx0UHJvcHMsbz1BKHt9LGUucHJvcHMpO3JldHVybiB2b2lkIDAhPT10JiYoby50aGVtZT1HZShlLnByb3BzLHQscikpLG4ucmVuZGVyU3R5bGVzKG8sZS5zdHlsZVNoZWV0KSxudWxsfSkpfSkpfSx0fShsLkNvbXBvbmVudCk7cmV0dXJuIHMuZ2xvYmFsU3R5bGU9YSxzLnN0eWxlZENvbXBvbmVudElkPWksc316JiYod2luZG93LnNjQ0dTSE1SQ2FjaGU9e30pO3ZhciBfdD1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9cXHN8XFxcXG4vZyxcIlwiKX07ZnVuY3Rpb24gT3QoZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1BcnJheSh0PjE/dC0xOjApLHI9MTtyPHQ7cisrKW5bci0xXT1hcmd1bWVudHNbcl07dmFyIG89QmUuYXBwbHkodm9pZCAwLFtlXS5jb25jYXQobikpLGk9TmUoRGUoX3QoSlNPTi5zdHJpbmdpZnkobykpKSk7cmV0dXJuIG5ldyBrZShpLGNlKG8saSxcIkBrZXlmcmFtZXNcIikpfXZhciBMdD1mdW5jdGlvbihlKXt2YXIgdD1sLmZvcndhcmRSZWYoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGwuY3JlYXRlRWxlbWVudChmdCxudWxsLChmdW5jdGlvbihyKXt2YXIgbz1lLmRlZmF1bHRQcm9wcyxpPUdlKHQscixvKTtyZXR1cm4gbC5jcmVhdGVFbGVtZW50KGUsQSh7fSx0LHt0aGVtZTppLHJlZjpufSkpfSkpfSkpO3JldHVybiBjdCh0LGUpLHQuZGlzcGxheU5hbWU9XCJXaXRoVGhlbWUoXCIrJChlKStcIilcIix0fSxFdD17U3R5bGVTaGVldDpNZX07Y29uc3QgU3Q9d3R9LDUyNDY6ZT0+e2UuZXhwb3J0cz1mdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1cIi8qfCovXCIsbj10K1wifVwiO2Z1bmN0aW9uIHIodCl7aWYodCl0cnl7ZSh0K1wifVwiKX1jYXRjaChlKXt9fXJldHVybiBmdW5jdGlvbihvLGksYSxsLHMsYyx1LGYsZCxwKXtzd2l0Y2gobyl7Y2FzZSAxOmlmKDA9PT1kJiY2ND09PWkuY2hhckNvZGVBdCgwKSlyZXR1cm4gZShpK1wiO1wiKSxcIlwiO2JyZWFrO2Nhc2UgMjppZigwPT09ZilyZXR1cm4gaSt0O2JyZWFrO2Nhc2UgMzpzd2l0Y2goZil7Y2FzZSAxMDI6Y2FzZSAxMTI6cmV0dXJuIGUoYVswXStpKSxcIlwiO2RlZmF1bHQ6cmV0dXJuIGkrKDA9PT1wP3Q6XCJcIil9Y2FzZS0yOmkuc3BsaXQobikuZm9yRWFjaChyKX19fX0oKX0sMTk0NjplPT57ZS5leHBvcnRzPWZ1bmN0aW9uIGUodCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49L15cXDArL2cscj0vW1xcMFxcclxcZl0vZyxvPS86ICovZyxpPS96b298Z3JhLyxhPS8oWyw6IF0pKHRyYW5zZm9ybSkvZyxsPS8sK1xccyooPyFbXihdKlspXSkvZyxzPS8gK1xccyooPyFbXihdKlspXSkvZyxjPS8gKltcXDBdICovZyx1PS8sXFxyKz8vZyxmPS8oW1xcdFxcclxcbiBdKSpcXGY/Ji9nLGQ9LzpnbG9iYWxcXCgoKD86W15cXChcXClcXFtcXF1dKnxcXFsuKlxcXXxcXChbXlxcKFxcKV0qXFwpKSopXFwpL2cscD0vXFxXKy9nLGg9L0Aoa1xcdyspXFxzKihcXFMqKVxccyovLGc9Lzo6KHBsYWNlKS9nLHY9LzoocmVhZC1vbmx5KS9nLG09L1xccysoPz1be1xcXTs9Oj5dKS9nLEM9LyhbW309Oj5dKVxccysvZyx5PS8oXFx7W157XSs/KTsoPz1cXH0pL2csdz0vXFxzezIsfS9nLGI9LyhbXlxcKF0pKDorKSAqL2cseD0vW3N2aF1cXHcrLVt0YmxyXXsyfS8sXz0vXFwoXFxzKiguKilcXHMqXFwpL2csTz0vKFtcXHNcXFNdKj8pOy9nLEw9Ly1zZWxmfGZsZXgtL2csRT0vW15dKj8oOltycF1bZWxdYVtcXHctXSspW15dKi8sUz0vc3RyZXRjaHw6XFxzKlxcdytcXC0oPzpjb250ZXxhdmFpbCkvLGo9LyhbXi1dKShpbWFnZS1zZXRcXCgpLyxNPVwiLXdlYmtpdC1cIixrPVwiLW1vei1cIixSPVwiLW1zLVwiLFA9NTksST0xMjUsQT0xMjMsVD00MCxIPTQxLEI9OTEsVj05MyxEPTEwLFo9MTMsJD05LE49NjQsRj0zMixVPTM4LFc9NDUsej05NSxHPTQyLHE9NDQsWT01OCxLPTM5LFg9MzQsSj00NyxRPTYyLGVlPTQzLHRlPTEyNixuZT0wLHJlPTEyLG9lPTExLGllPTEwNyxhZT0xMDksbGU9MTE1LHNlPTExMixjZT0xMTEsdWU9MTA1LGZlPTk5LGRlPTEwMCxwZT0xMTIsaGU9MSxnZT0xLHZlPTAsbWU9MSxDZT0xLHllPTEsd2U9MCxiZT0wLHhlPTAsX2U9W10sT2U9W10sTGU9MCxFZT1udWxsLFNlPS0yLGplPS0xLE1lPTAsa2U9MSxSZT0yLFBlPTMsSWU9MCxBZT0xLFRlPVwiXCIsSGU9XCJcIixCZT1cIlwiO2Z1bmN0aW9uIFZlKGUsdCxvLGksYSl7Zm9yKHZhciBsLHMsdT0wLGY9MCxkPTAscD0wLG09MCxDPTAseT0wLHc9MCx4PTAsTz0wLEw9MCxFPTAsUz0wLGo9MCx6PTAsd2U9MCxPZT0wLEVlPTAsU2U9MCxqZT1vLmxlbmd0aCxaZT1qZS0xLHplPVwiXCIsR2U9XCJcIixxZT1cIlwiLFllPVwiXCIsS2U9XCJcIixYZT1cIlwiO3o8amU7KXtpZih5PW8uY2hhckNvZGVBdCh6KSx6PT09WmUmJmYrcCtkK3UhPT0wJiYoMCE9PWYmJih5PWY9PT1KP0Q6SikscD1kPXU9MCxqZSsrLFplKyspLGYrcCtkK3U9PT0wKXtpZih6PT09WmUmJih3ZT4wJiYoR2U9R2UucmVwbGFjZShyLFwiXCIpKSxHZS50cmltKCkubGVuZ3RoPjApKXtzd2l0Y2goeSl7Y2FzZSBGOmNhc2UgJDpjYXNlIFA6Y2FzZSBaOmNhc2UgRDpicmVhaztkZWZhdWx0OkdlKz1vLmNoYXJBdCh6KX15PVB9aWYoMT09PU9lKXN3aXRjaCh5KXtjYXNlIEE6Y2FzZSBJOmNhc2UgUDpjYXNlIFg6Y2FzZSBLOmNhc2UgVDpjYXNlIEg6Y2FzZSBxOk9lPTA7Y2FzZSAkOmNhc2UgWjpjYXNlIEQ6Y2FzZSBGOmJyZWFrO2RlZmF1bHQ6Zm9yKE9lPTAsU2U9eixtPXksei0tLHk9UDtTZTxqZTspc3dpdGNoKG8uY2hhckNvZGVBdChTZSsrKSl7Y2FzZSBEOmNhc2UgWjpjYXNlIFA6Kyt6LHk9bSxTZT1qZTticmVhaztjYXNlIFk6d2U+MCYmKCsreix5PW0pO2Nhc2UgQTpTZT1qZX19c3dpdGNoKHkpe2Nhc2UgQTpmb3IobT0oR2U9R2UudHJpbSgpKS5jaGFyQ29kZUF0KDApLEw9MSxTZT0rK3o7ejxqZTspe3N3aXRjaCh5PW8uY2hhckNvZGVBdCh6KSl7Y2FzZSBBOkwrKzticmVhaztjYXNlIEk6TC0tO2JyZWFrO2Nhc2UgSjpzd2l0Y2goQz1vLmNoYXJDb2RlQXQoeisxKSl7Y2FzZSBHOmNhc2UgSjp6PVdlKEMseixaZSxvKX1icmVhaztjYXNlIEI6eSsrO2Nhc2UgVDp5Kys7Y2FzZSBYOmNhc2UgSzpmb3IoO3orKzxaZSYmby5jaGFyQ29kZUF0KHopIT09eTspO31pZigwPT09TClicmVhazt6Kyt9aWYocWU9by5zdWJzdHJpbmcoU2UseiksbT09PW5lJiYobT0oR2U9R2UucmVwbGFjZShuLFwiXCIpLnRyaW0oKSkuY2hhckNvZGVBdCgwKSksbT09PU4pe3N3aXRjaCh3ZT4wJiYoR2U9R2UucmVwbGFjZShyLFwiXCIpKSxDPUdlLmNoYXJDb2RlQXQoMSkpe2Nhc2UgZGU6Y2FzZSBhZTpjYXNlIGxlOmNhc2UgVzpsPXQ7YnJlYWs7ZGVmYXVsdDpsPV9lfWlmKFNlPShxZT1WZSh0LGwscWUsQyxhKzEpKS5sZW5ndGgseGU+MCYmMD09PVNlJiYoU2U9R2UubGVuZ3RoKSxMZT4wJiYobD1EZShfZSxHZSxFZSkscz1VZShQZSxxZSxsLHQsZ2UsaGUsU2UsQyxhLGkpLEdlPWwuam9pbihcIlwiKSx2b2lkIDAhPT1zJiYwPT09KFNlPShxZT1zLnRyaW0oKSkubGVuZ3RoKSYmKEM9MCxxZT1cIlwiKSksU2U+MClzd2l0Y2goQyl7Y2FzZSBsZTpHZT1HZS5yZXBsYWNlKF8sRmUpO2Nhc2UgZGU6Y2FzZSBhZTpjYXNlIFc6cWU9R2UrXCJ7XCIrcWUrXCJ9XCI7YnJlYWs7Y2FzZSBpZTpxZT0oR2U9R2UucmVwbGFjZShoLFwiJDEgJDJcIisoQWU+MD9UZTpcIlwiKSkpK1wie1wiK3FlK1wifVwiLHFlPTE9PT1DZXx8Mj09PUNlJiZOZShcIkBcIitxZSwzKT9cIkBcIitNK3FlK1wiQFwiK3FlOlwiQFwiK3FlO2JyZWFrO2RlZmF1bHQ6cWU9R2UrcWUsaT09PXBlJiYoWWUrPXFlLHFlPVwiXCIpfWVsc2UgcWU9XCJcIn1lbHNlIHFlPVZlKHQsRGUodCxHZSxFZSkscWUsaSxhKzEpO0tlKz1xZSxFPTAsT2U9MCxqPTAsd2U9MCxFZT0wLFM9MCxHZT1cIlwiLHFlPVwiXCIseT1vLmNoYXJDb2RlQXQoKyt6KTticmVhaztjYXNlIEk6Y2FzZSBQOmlmKChTZT0oR2U9KHdlPjA/R2UucmVwbGFjZShyLFwiXCIpOkdlKS50cmltKCkpLmxlbmd0aCk+MSlzd2l0Y2goMD09PWomJigobT1HZS5jaGFyQ29kZUF0KDApKT09PVd8fG0+OTYmJm08MTIzKSYmKFNlPShHZT1HZS5yZXBsYWNlKFwiIFwiLFwiOlwiKSkubGVuZ3RoKSxMZT4wJiZ2b2lkIDAhPT0ocz1VZShrZSxHZSx0LGUsZ2UsaGUsWWUubGVuZ3RoLGksYSxpKSkmJjA9PT0oU2U9KEdlPXMudHJpbSgpKS5sZW5ndGgpJiYoR2U9XCJcXDBcXDBcIiksbT1HZS5jaGFyQ29kZUF0KDApLEM9R2UuY2hhckNvZGVBdCgxKSxtKXtjYXNlIG5lOmJyZWFrO2Nhc2UgTjppZihDPT09dWV8fEM9PT1mZSl7WGUrPUdlK28uY2hhckF0KHopO2JyZWFrfWRlZmF1bHQ6aWYoR2UuY2hhckNvZGVBdChTZS0xKT09PVkpYnJlYWs7WWUrPSRlKEdlLG0sQyxHZS5jaGFyQ29kZUF0KDIpKX1FPTAsT2U9MCxqPTAsd2U9MCxFZT0wLEdlPVwiXCIseT1vLmNoYXJDb2RlQXQoKyt6KX19c3dpdGNoKHkpe2Nhc2UgWjpjYXNlIEQ6aWYoZitwK2QrdStiZT09PTApc3dpdGNoKE8pe2Nhc2UgSDpjYXNlIEs6Y2FzZSBYOmNhc2UgTjpjYXNlIHRlOmNhc2UgUTpjYXNlIEc6Y2FzZSBlZTpjYXNlIEo6Y2FzZSBXOmNhc2UgWTpjYXNlIHE6Y2FzZSBQOmNhc2UgQTpjYXNlIEk6YnJlYWs7ZGVmYXVsdDpqPjAmJihPZT0xKX1mPT09Sj9mPTA6bWUrRT09PTAmJmkhPT1pZSYmR2UubGVuZ3RoPjAmJih3ZT0xLEdlKz1cIlxcMFwiKSxMZSpJZT4wJiZVZShNZSxHZSx0LGUsZ2UsaGUsWWUubGVuZ3RoLGksYSxpKSxoZT0xLGdlKys7YnJlYWs7Y2FzZSBQOmNhc2UgSTppZihmK3ArZCt1PT09MCl7aGUrKzticmVha31kZWZhdWx0OnN3aXRjaChoZSsrLHplPW8uY2hhckF0KHopLHkpe2Nhc2UgJDpjYXNlIEY6aWYocCt1K2Y9PT0wKXN3aXRjaCh3KXtjYXNlIHE6Y2FzZSBZOmNhc2UgJDpjYXNlIEY6emU9XCJcIjticmVhaztkZWZhdWx0OnkhPT1GJiYoemU9XCIgXCIpfWJyZWFrO2Nhc2UgbmU6emU9XCJcXFxcMFwiO2JyZWFrO2Nhc2UgcmU6emU9XCJcXFxcZlwiO2JyZWFrO2Nhc2Ugb2U6emU9XCJcXFxcdlwiO2JyZWFrO2Nhc2UgVTpwK2YrdT09PTAmJm1lPjAmJihFZT0xLHdlPTEsemU9XCJcXGZcIit6ZSk7YnJlYWs7Y2FzZSAxMDg6aWYocCtmK3UrdmU9PT0wJiZqPjApc3dpdGNoKHotail7Y2FzZSAyOnc9PT1zZSYmby5jaGFyQ29kZUF0KHotMyk9PT1ZJiYodmU9dyk7Y2FzZSA4Ong9PT1jZSYmKHZlPXgpfWJyZWFrO2Nhc2UgWTpwK2YrdT09PTAmJihqPXopO2JyZWFrO2Nhc2UgcTpmK2QrcCt1PT09MCYmKHdlPTEsemUrPVwiXFxyXCIpO2JyZWFrO2Nhc2UgWDpjYXNlIEs6MD09PWYmJihwPXA9PT15PzA6MD09PXA/eTpwKTticmVhaztjYXNlIEI6cCtmK2Q9PT0wJiZ1Kys7YnJlYWs7Y2FzZSBWOnArZitkPT09MCYmdS0tO2JyZWFrO2Nhc2UgSDpwK2YrdT09PTAmJmQtLTticmVhaztjYXNlIFQ6cCtmK3U9PT0wJiYoMD09PUUmJigyKncrMyp4PT01MzN8fChMPTAsRT0xKSksZCsrKTticmVhaztjYXNlIE46ZitkK3ArdStqK1M9PT0wJiYoUz0xKTticmVhaztjYXNlIEc6Y2FzZSBKOmlmKHArdStkPjApYnJlYWs7c3dpdGNoKGYpe2Nhc2UgMDpzd2l0Y2goMip5KzMqby5jaGFyQ29kZUF0KHorMSkpe2Nhc2UgMjM1OmY9SjticmVhaztjYXNlIDIyMDpTZT16LGY9R31icmVhaztjYXNlIEc6eT09PUomJnc9PT1HJiZTZSsyIT09eiYmKDMzPT09by5jaGFyQ29kZUF0KFNlKzIpJiYoWWUrPW8uc3Vic3RyaW5nKFNlLHorMSkpLHplPVwiXCIsZj0wKX19aWYoMD09PWYpe2lmKG1lK3ArdStTPT09MCYmaSE9PWllJiZ5IT09UClzd2l0Y2goeSl7Y2FzZSBxOmNhc2UgdGU6Y2FzZSBROmNhc2UgZWU6Y2FzZSBIOmNhc2UgVDppZigwPT09RSl7c3dpdGNoKHcpe2Nhc2UgJDpjYXNlIEY6Y2FzZSBEOmNhc2UgWjp6ZSs9XCJcXDBcIjticmVhaztkZWZhdWx0OnplPVwiXFwwXCIremUrKHk9PT1xP1wiXCI6XCJcXDBcIil9d2U9MX1lbHNlIHN3aXRjaCh5KXtjYXNlIFQ6ais3PT09eiYmMTA4PT09dyYmKGo9MCksRT0rK0w7YnJlYWs7Y2FzZSBIOjA9PShFPS0tTCkmJih3ZT0xLHplKz1cIlxcMFwiKX1icmVhaztjYXNlICQ6Y2FzZSBGOnN3aXRjaCh3KXtjYXNlIG5lOmNhc2UgQTpjYXNlIEk6Y2FzZSBQOmNhc2UgcTpjYXNlIHJlOmNhc2UgJDpjYXNlIEY6Y2FzZSBEOmNhc2UgWjpicmVhaztkZWZhdWx0OjA9PT1FJiYod2U9MSx6ZSs9XCJcXDBcIil9fUdlKz16ZSx5IT09RiYmeSE9PSQmJihPPXkpfX14PXcsdz15LHorK31pZihTZT1ZZS5sZW5ndGgseGU+MCYmMD09PVNlJiYwPT09S2UubGVuZ3RoJiYwPT09dFswXS5sZW5ndGg9PTAmJihpIT09YWV8fDE9PT10Lmxlbmd0aCYmKG1lPjA/SGU6QmUpPT09dFswXSkmJihTZT10LmpvaW4oXCIsXCIpLmxlbmd0aCsyKSxTZT4wKXtpZihsPTA9PT1tZSYmaSE9PWllP2Z1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLG89MCxpPWUubGVuZ3RoLGE9QXJyYXkoaSk7bzxpOysrbyl7Zm9yKHZhciBsPWVbb10uc3BsaXQoYykscz1cIlwiLHU9MCxmPTAsZD0wLHA9MCxoPWwubGVuZ3RoO3U8aDsrK3UpaWYoISgwPT09KGY9KG49bFt1XSkubGVuZ3RoKSYmaD4xKSl7aWYoZD1zLmNoYXJDb2RlQXQocy5sZW5ndGgtMSkscD1uLmNoYXJDb2RlQXQoMCksdD1cIlwiLDAhPT11KXN3aXRjaChkKXtjYXNlIEc6Y2FzZSB0ZTpjYXNlIFE6Y2FzZSBlZTpjYXNlIEY6Y2FzZSBUOmJyZWFrO2RlZmF1bHQ6dD1cIiBcIn1zd2l0Y2gocCl7Y2FzZSBVOm49dCtIZTtjYXNlIHRlOmNhc2UgUTpjYXNlIGVlOmNhc2UgRjpjYXNlIEg6Y2FzZSBUOmJyZWFrO2Nhc2UgQjpuPXQrbitIZTticmVhaztjYXNlIFk6c3dpdGNoKDIqbi5jaGFyQ29kZUF0KDEpKzMqbi5jaGFyQ29kZUF0KDIpKXtjYXNlIDUzMDppZih5ZT4wKXtuPXQrbi5zdWJzdHJpbmcoOCxmLTEpO2JyZWFrfWRlZmF1bHQ6KHU8MXx8bFt1LTFdLmxlbmd0aDwxKSYmKG49dCtIZStuKX1icmVhaztjYXNlIHE6dD1cIlwiO2RlZmF1bHQ6bj1mPjEmJm4uaW5kZXhPZihcIjpcIik+MD90K24ucmVwbGFjZShiLFwiJDFcIitIZStcIiQyXCIpOnQrbitIZX1zKz1ufWFbb109cy5yZXBsYWNlKHIsXCJcIikudHJpbSgpfXJldHVybiBhfSh0KTp0LExlPjAmJnZvaWQgMCE9PShzPVVlKFJlLFllLGwsZSxnZSxoZSxTZSxpLGEsaSkpJiYwPT09KFllPXMpLmxlbmd0aClyZXR1cm4gWGUrWWUrS2U7aWYoWWU9bC5qb2luKFwiLFwiKStcIntcIitZZStcIn1cIixDZSp2ZSE9MCl7c3dpdGNoKDIhPT1DZXx8TmUoWWUsMil8fCh2ZT0wKSx2ZSl7Y2FzZSBjZTpZZT1ZZS5yZXBsYWNlKHYsXCI6XCIraytcIiQxXCIpK1llO2JyZWFrO2Nhc2Ugc2U6WWU9WWUucmVwbGFjZShnLFwiOjpcIitNK1wiaW5wdXQtJDFcIikrWWUucmVwbGFjZShnLFwiOjpcIitrK1wiJDFcIikrWWUucmVwbGFjZShnLFwiOlwiK1IrXCJpbnB1dC0kMVwiKStZZX12ZT0wfX1yZXR1cm4gWGUrWWUrS2V9ZnVuY3Rpb24gRGUoZSx0LG4pe3ZhciByPXQudHJpbSgpLnNwbGl0KHUpLG89cixpPXIubGVuZ3RoLGE9ZS5sZW5ndGg7c3dpdGNoKGEpe2Nhc2UgMDpjYXNlIDE6Zm9yKHZhciBsPTAscz0wPT09YT9cIlwiOmVbMF0rXCIgXCI7bDxpOysrbClvW2xdPVplKHMsb1tsXSxuLGEpLnRyaW0oKTticmVhaztkZWZhdWx0Omw9MDt2YXIgYz0wO2ZvcihvPVtdO2w8aTsrK2wpZm9yKHZhciBmPTA7ZjxhOysrZilvW2MrK109WmUoZVtmXStcIiBcIixyW2xdLG4sYSkudHJpbSgpfXJldHVybiBvfWZ1bmN0aW9uIFplKGUsdCxuLHIpe3ZhciBvPXQsaT1vLmNoYXJDb2RlQXQoMCk7c3dpdGNoKGk8MzMmJihpPShvPW8udHJpbSgpKS5jaGFyQ29kZUF0KDApKSxpKXtjYXNlIFU6c3dpdGNoKG1lK3Ipe2Nhc2UgMDpjYXNlIDE6aWYoMD09PWUudHJpbSgpLmxlbmd0aClicmVhaztkZWZhdWx0OnJldHVybiBvLnJlcGxhY2UoZixcIiQxXCIrZS50cmltKCkpfWJyZWFrO2Nhc2UgWTppZigxMDMhPT1vLmNoYXJDb2RlQXQoMSkpcmV0dXJuIGUudHJpbSgpK28ucmVwbGFjZShmLFwiJDFcIitlLnRyaW0oKSk7aWYoeWU+MCYmbWU+MClyZXR1cm4gby5yZXBsYWNlKGQsXCIkMVwiKS5yZXBsYWNlKGYsXCIkMVwiK0JlKTtkZWZhdWx0OmlmKG4qbWU+MCYmby5pbmRleE9mKFwiXFxmXCIpPjApcmV0dXJuIG8ucmVwbGFjZShmLChlLmNoYXJDb2RlQXQoMCk9PT1ZP1wiXCI6XCIkMVwiKStlLnRyaW0oKSl9cmV0dXJuIGUrb31mdW5jdGlvbiAkZShlLHQsbixyKXt2YXIgYyx1PTAsZj1lK1wiO1wiLGQ9Mip0KzMqbis0KnI7aWYoOTQ0PT09ZClyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgsbj1lLmluZGV4T2YoXCI6XCIsOSkrMSxyPWUuc3Vic3RyaW5nKDAsbikudHJpbSgpLG89ZS5zdWJzdHJpbmcobix0LTEpLnRyaW0oKTtzd2l0Y2goZS5jaGFyQ29kZUF0KDkpKkFlKXtjYXNlIDA6YnJlYWs7Y2FzZSBXOmlmKDExMCE9PWUuY2hhckNvZGVBdCgxMCkpYnJlYWs7ZGVmYXVsdDp2YXIgaT1vLnNwbGl0KChvPVwiXCIsbCkpLGE9MDtmb3Iobj0wLHQ9aS5sZW5ndGg7YTx0O249MCwrK2Epe2Zvcih2YXIgYz1pW2FdLHU9Yy5zcGxpdChzKTtjPXVbbl07KXt2YXIgZj1jLmNoYXJDb2RlQXQoMCk7aWYoMT09PUFlJiYoZj5OJiZmPDkwfHxmPjk2JiZmPDEyM3x8Zj09PXp8fGY9PT1XJiZjLmNoYXJDb2RlQXQoMSkhPT1XKSYmaXNOYU4ocGFyc2VGbG9hdChjKSkrKC0xIT09Yy5pbmRleE9mKFwiKFwiKSk9PT0xKXN3aXRjaChjKXtjYXNlXCJpbmZpbml0ZVwiOmNhc2VcImFsdGVybmF0ZVwiOmNhc2VcImJhY2t3YXJkc1wiOmNhc2VcInJ1bm5pbmdcIjpjYXNlXCJub3JtYWxcIjpjYXNlXCJmb3J3YXJkc1wiOmNhc2VcImJvdGhcIjpjYXNlXCJub25lXCI6Y2FzZVwibGluZWFyXCI6Y2FzZVwiZWFzZVwiOmNhc2VcImVhc2UtaW5cIjpjYXNlXCJlYXNlLW91dFwiOmNhc2VcImVhc2UtaW4tb3V0XCI6Y2FzZVwicGF1c2VkXCI6Y2FzZVwicmV2ZXJzZVwiOmNhc2VcImFsdGVybmF0ZS1yZXZlcnNlXCI6Y2FzZVwiaW5oZXJpdFwiOmNhc2VcImluaXRpYWxcIjpjYXNlXCJ1bnNldFwiOmNhc2VcInN0ZXAtc3RhcnRcIjpjYXNlXCJzdGVwLWVuZFwiOmJyZWFrO2RlZmF1bHQ6Yys9VGV9dVtuKytdPWN9bys9KDA9PT1hP1wiXCI6XCIsXCIpK3Uuam9pbihcIiBcIil9fXJldHVybiBvPXIrbytcIjtcIiwxPT09Q2V8fDI9PT1DZSYmTmUobywxKT9NK28rbzpvfShmKTtpZigwPT09Q2V8fDI9PT1DZSYmIU5lKGYsMSkpcmV0dXJuIGY7c3dpdGNoKGQpe2Nhc2UgMTAxNTpyZXR1cm4gOTc9PT1mLmNoYXJDb2RlQXQoMTApP00rZitmOmY7Y2FzZSA5NTE6cmV0dXJuIDExNj09PWYuY2hhckNvZGVBdCgzKT9NK2YrZjpmO2Nhc2UgOTYzOnJldHVybiAxMTA9PT1mLmNoYXJDb2RlQXQoNSk/TStmK2Y6ZjtjYXNlIDEwMDk6aWYoMTAwIT09Zi5jaGFyQ29kZUF0KDQpKWJyZWFrO2Nhc2UgOTY5OmNhc2UgOTQyOnJldHVybiBNK2YrZjtjYXNlIDk3ODpyZXR1cm4gTStmK2srZitmO2Nhc2UgMTAxOTpjYXNlIDk4MzpyZXR1cm4gTStmK2srZitSK2YrZjtjYXNlIDg4MzpyZXR1cm4gZi5jaGFyQ29kZUF0KDgpPT09Vz9NK2YrZjpmLmluZGV4T2YoXCJpbWFnZS1zZXQoXCIsMTEpPjA/Zi5yZXBsYWNlKGosXCIkMVwiK00rXCIkMlwiKStmOmY7Y2FzZSA5MzI6aWYoZi5jaGFyQ29kZUF0KDQpPT09Vylzd2l0Y2goZi5jaGFyQ29kZUF0KDUpKXtjYXNlIDEwMzpyZXR1cm4gTStcImJveC1cIitmLnJlcGxhY2UoXCItZ3Jvd1wiLFwiXCIpK00rZitSK2YucmVwbGFjZShcImdyb3dcIixcInBvc2l0aXZlXCIpK2Y7Y2FzZSAxMTU6cmV0dXJuIE0rZitSK2YucmVwbGFjZShcInNocmlua1wiLFwibmVnYXRpdmVcIikrZjtjYXNlIDk4OnJldHVybiBNK2YrUitmLnJlcGxhY2UoXCJiYXNpc1wiLFwicHJlZmVycmVkLXNpemVcIikrZn1yZXR1cm4gTStmK1IrZitmO2Nhc2UgOTY0OnJldHVybiBNK2YrUitcImZsZXgtXCIrZitmO2Nhc2UgMTAyMzppZig5OSE9PWYuY2hhckNvZGVBdCg4KSlicmVhaztyZXR1cm4gYz1mLnN1YnN0cmluZyhmLmluZGV4T2YoXCI6XCIsMTUpKS5yZXBsYWNlKFwiZmxleC1cIixcIlwiKS5yZXBsYWNlKFwic3BhY2UtYmV0d2VlblwiLFwianVzdGlmeVwiKSxNK1wiYm94LXBhY2tcIitjK00rZitSK1wiZmxleC1wYWNrXCIrYytmO2Nhc2UgMTAwNTpyZXR1cm4gaS50ZXN0KGYpP2YucmVwbGFjZShvLFwiOlwiK00pK2YucmVwbGFjZShvLFwiOlwiK2spK2Y6ZjtjYXNlIDFlMzpzd2l0Y2godT0oYz1mLnN1YnN0cmluZygxMykudHJpbSgpKS5pbmRleE9mKFwiLVwiKSsxLGMuY2hhckNvZGVBdCgwKStjLmNoYXJDb2RlQXQodSkpe2Nhc2UgMjI2OmM9Zi5yZXBsYWNlKHgsXCJ0YlwiKTticmVhaztjYXNlIDIzMjpjPWYucmVwbGFjZSh4LFwidGItcmxcIik7YnJlYWs7Y2FzZSAyMjA6Yz1mLnJlcGxhY2UoeCxcImxyXCIpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIGZ9cmV0dXJuIE0rZitSK2MrZjtjYXNlIDEwMTc6aWYoLTE9PT1mLmluZGV4T2YoXCJzdGlja3lcIiw5KSlyZXR1cm4gZjtjYXNlIDk3NTpzd2l0Y2godT0oZj1lKS5sZW5ndGgtMTAsZD0oYz0oMzM9PT1mLmNoYXJDb2RlQXQodSk/Zi5zdWJzdHJpbmcoMCx1KTpmKS5zdWJzdHJpbmcoZS5pbmRleE9mKFwiOlwiLDcpKzEpLnRyaW0oKSkuY2hhckNvZGVBdCgwKSsoMHxjLmNoYXJDb2RlQXQoNykpKXtjYXNlIDIwMzppZihjLmNoYXJDb2RlQXQoOCk8MTExKWJyZWFrO2Nhc2UgMTE1OmY9Zi5yZXBsYWNlKGMsTStjKStcIjtcIitmO2JyZWFrO2Nhc2UgMjA3OmNhc2UgMTAyOmY9Zi5yZXBsYWNlKGMsTSsoZD4xMDI/XCJpbmxpbmUtXCI6XCJcIikrXCJib3hcIikrXCI7XCIrZi5yZXBsYWNlKGMsTStjKStcIjtcIitmLnJlcGxhY2UoYyxSK2MrXCJib3hcIikrXCI7XCIrZn1yZXR1cm4gZitcIjtcIjtjYXNlIDkzODppZihmLmNoYXJDb2RlQXQoNSk9PT1XKXN3aXRjaChmLmNoYXJDb2RlQXQoNikpe2Nhc2UgMTA1OnJldHVybiBjPWYucmVwbGFjZShcIi1pdGVtc1wiLFwiXCIpLE0rZitNK1wiYm94LVwiK2MrUitcImZsZXgtXCIrYytmO2Nhc2UgMTE1OnJldHVybiBNK2YrUitcImZsZXgtaXRlbS1cIitmLnJlcGxhY2UoTCxcIlwiKStmO2RlZmF1bHQ6cmV0dXJuIE0rZitSK1wiZmxleC1saW5lLXBhY2tcIitmLnJlcGxhY2UoXCJhbGlnbi1jb250ZW50XCIsXCJcIikucmVwbGFjZShMLFwiXCIpK2Z9YnJlYWs7Y2FzZSA5NzM6Y2FzZSA5ODk6aWYoZi5jaGFyQ29kZUF0KDMpIT09V3x8MTIyPT09Zi5jaGFyQ29kZUF0KDQpKWJyZWFrO2Nhc2UgOTMxOmNhc2UgOTUzOmlmKCEwPT09Uy50ZXN0KGUpKXJldHVybiAxMTU9PT0oYz1lLnN1YnN0cmluZyhlLmluZGV4T2YoXCI6XCIpKzEpKS5jaGFyQ29kZUF0KDApPyRlKGUucmVwbGFjZShcInN0cmV0Y2hcIixcImZpbGwtYXZhaWxhYmxlXCIpLHQsbixyKS5yZXBsYWNlKFwiOmZpbGwtYXZhaWxhYmxlXCIsXCI6c3RyZXRjaFwiKTpmLnJlcGxhY2UoYyxNK2MpK2YucmVwbGFjZShjLGsrYy5yZXBsYWNlKFwiZmlsbC1cIixcIlwiKSkrZjticmVhaztjYXNlIDk2MjppZihmPU0rZisoMTAyPT09Zi5jaGFyQ29kZUF0KDUpP1IrZjpcIlwiKStmLG4rcj09PTIxMSYmMTA1PT09Zi5jaGFyQ29kZUF0KDEzKSYmZi5pbmRleE9mKFwidHJhbnNmb3JtXCIsMTApPjApcmV0dXJuIGYuc3Vic3RyaW5nKDAsZi5pbmRleE9mKFwiO1wiLDI3KSsxKS5yZXBsYWNlKGEsXCIkMVwiK00rXCIkMlwiKStmfXJldHVybiBmfWZ1bmN0aW9uIE5lKGUsdCl7dmFyIG49ZS5pbmRleE9mKDE9PT10P1wiOlwiOlwie1wiKSxyPWUuc3Vic3RyaW5nKDAsMyE9PXQ/bjoxMCksbz1lLnN1YnN0cmluZyhuKzEsZS5sZW5ndGgtMSk7cmV0dXJuIEVlKDIhPT10P3I6ci5yZXBsYWNlKEUsXCIkMVwiKSxvLHQpfWZ1bmN0aW9uIEZlKGUsdCl7dmFyIG49JGUodCx0LmNoYXJDb2RlQXQoMCksdC5jaGFyQ29kZUF0KDEpLHQuY2hhckNvZGVBdCgyKSk7cmV0dXJuIG4hPT10K1wiO1wiP24ucmVwbGFjZShPLFwiIG9yICgkMSlcIikuc3Vic3RyaW5nKDQpOlwiKFwiK3QrXCIpXCJ9ZnVuY3Rpb24gVWUoZSx0LG4scixvLGksYSxsLHMsYyl7Zm9yKHZhciB1LGY9MCxkPXQ7ZjxMZTsrK2Ypc3dpdGNoKHU9T2VbZl0uY2FsbChHZSxlLGQsbixyLG8saSxhLGwscyxjKSl7Y2FzZSB2b2lkIDA6Y2FzZSExOmNhc2UhMDpjYXNlIG51bGw6YnJlYWs7ZGVmYXVsdDpkPXV9aWYoZCE9PXQpcmV0dXJuIGR9ZnVuY3Rpb24gV2UoZSx0LG4scil7Zm9yKHZhciBvPXQrMTtvPG47KytvKXN3aXRjaChyLmNoYXJDb2RlQXQobykpe2Nhc2UgSjppZihlPT09RyYmci5jaGFyQ29kZUF0KG8tMSk9PT1HJiZ0KzIhPT1vKXJldHVybiBvKzE7YnJlYWs7Y2FzZSBEOmlmKGU9PT1KKXJldHVybiBvKzF9cmV0dXJuIG99ZnVuY3Rpb24gemUoZSl7Zm9yKHZhciB0IGluIGUpe3ZhciBuPWVbdF07c3dpdGNoKHQpe2Nhc2VcImtleWZyYW1lXCI6QWU9MHxuO2JyZWFrO2Nhc2VcImdsb2JhbFwiOnllPTB8bjticmVhaztjYXNlXCJjYXNjYWRlXCI6bWU9MHxuO2JyZWFrO2Nhc2VcImNvbXByZXNzXCI6d2U9MHxuO2JyZWFrO2Nhc2VcInNlbWljb2xvblwiOmJlPTB8bjticmVhaztjYXNlXCJwcmVzZXJ2ZVwiOnhlPTB8bjticmVhaztjYXNlXCJwcmVmaXhcIjpFZT1udWxsLG4/XCJmdW5jdGlvblwiIT10eXBlb2Ygbj9DZT0xOihDZT0yLEVlPW4pOkNlPTB9fXJldHVybiB6ZX1mdW5jdGlvbiBHZSh0LG4pe2lmKHZvaWQgMCE9PXRoaXMmJnRoaXMuY29uc3RydWN0b3I9PT1HZSlyZXR1cm4gZSh0KTt2YXIgbz10LGk9by5jaGFyQ29kZUF0KDApO2k8MzMmJihpPShvPW8udHJpbSgpKS5jaGFyQ29kZUF0KDApKSxBZT4wJiYoVGU9by5yZXBsYWNlKHAsaT09PUI/XCJcIjpcIi1cIikpLGk9MSwxPT09bWU/QmU9bzpIZT1vO3ZhciBhLGw9W0JlXTtMZT4wJiZ2b2lkIDAhPT0oYT1VZShqZSxuLGwsbCxnZSxoZSwwLDAsMCwwKSkmJlwic3RyaW5nXCI9PXR5cGVvZiBhJiYobj1hKTt2YXIgcz1WZShfZSxsLG4sMCwwKTtyZXR1cm4gTGU+MCYmdm9pZCAwIT09KGE9VWUoU2UscyxsLGwsZ2UsaGUscy5sZW5ndGgsMCwwLDApKSYmXCJzdHJpbmdcIiE9dHlwZW9mKHM9YSkmJihpPTApLFRlPVwiXCIsQmU9XCJcIixIZT1cIlwiLHZlPTAsZ2U9MSxoZT0xLHdlKmk9PTA/czpzLnJlcGxhY2UocixcIlwiKS5yZXBsYWNlKG0sXCJcIikucmVwbGFjZShDLFwiJDFcIikucmVwbGFjZSh5LFwiJDFcIikucmVwbGFjZSh3LFwiIFwiKX1yZXR1cm4gR2UudXNlPWZ1bmN0aW9uIGUodCl7c3dpdGNoKHQpe2Nhc2Ugdm9pZCAwOmNhc2UgbnVsbDpMZT1PZS5sZW5ndGg9MDticmVhaztkZWZhdWx0OmlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpT2VbTGUrK109dDtlbHNlIGlmKFwib2JqZWN0XCI9PXR5cGVvZiB0KWZvcih2YXIgbj0wLHI9dC5sZW5ndGg7bjxyOysrbillKHRbbl0pO2Vsc2UgSWU9MHwhIXR9cmV0dXJuIGV9LEdlLnNldD16ZSx2b2lkIDAhPT10JiZ6ZSh0KSxHZX0obnVsbCl9LDM5MjY6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24uZCh0LHthOigpPT52fSk7dmFyIHI9big2Njc4KSxvPW4oNTQzOCksaT1uKDcxMDApLGE9bigxMjEpLGw9big3Mjc4KSxzPW4oOTYxMCk7dmFyIGM9bigxMTI3KTtjb25zdCB1PSgwLG4oOTExNykuWikoYCR7XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGZpbiYmZmluPy5tZS5pZGVudGl0eS51dWlkfS1lbnRlcnByaXNlLWJvb2ttYXJrc2ApO3ZhciBmPW4oODYzNik7Y29uc3QgZD1lPT4oe2lkZW50aXR5OmUsb3BlbmZpbldpbmRvdzpmaW4uV2luZG93LndyYXBTeW5jKGUpLF9ib29rbWFya3M6e19jcmVhdGVCb29rbWFya05vZGU6YXN5bmMgZT0+KGFzeW5jIGU9Pihhd2FpdCB1KCkpLmRpc3BhdGNoKGMuYiQuQ3JlYXRlQm9va21hcmtOb2RlLGUpKShlKSxfZ2V0Qm9va21hcmtOb2RlOmFzeW5jIGU9Pihhc3luYyBlPT4oYXdhaXQgdSgpKS5kaXNwYXRjaChjLmIkLkdldEJvb2ttYXJrTm9kZSxlKSkoZSksX3NlYXJjaEJvb2ttYXJrTm9kZXM6YXN5bmMgZT0+KGFzeW5jIGU9Pihhd2FpdCB1KCkpLmRpc3BhdGNoKGMuYiQuU2VhcmNoQm9va21hcmtOb2RlcyxlKSkoZSksX3VwZGF0ZUJvb2ttYXJrTm9kZTphc3luYyBlPT4oYXN5bmMgZT0+KGF3YWl0IHUoKSkuZGlzcGF0Y2goYy5iJC5VcGRhdGVCb29rbWFya05vZGUsZSkpKGUpLF9kZWxldGVCb29rbWFya05vZGU6YXN5bmMgZT0+KGFzeW5jIGU9Pihhd2FpdCB1KCkpLmRpc3BhdGNoKGMuYiQuRGVsZXRlQm9va21hcmtOb2RlLGUpKShlKX0sZ2V0UGFnZXM6YXN5bmMoKT0+KGF3YWl0KDAsby54cCkoZSkpLmRpc3BhdGNoKG8uZm4uR2V0UGFnZXNGb3JXaW5kb3csZSksZ2V0UGFnZTphc3luYyB0PT4oYXdhaXQoMCxvLnhwKShlKSkuZGlzcGF0Y2goby5mbi5HZXRQYWdlRm9yV2luZG93LHtpZGVudGl0eTplLHBhZ2VJZDp0fSksYWRkUGFnZTphc3luYyB0PT4oMCxmLmFBKSgpLkJyb3dzZXIud3JhcFN5bmMoZSkuX2FkZFBhZ2UodCksX2FkZFBhZ2U6YXN5bmModCxuKT0+e2NvbnN0IHI9YXdhaXQoMCxvLnhwKShlKSxpPXtpZGVudGl0eTplLHBhZ2U6dCxpbnNlcnRpb25JbmRleDpuPy5pbmRleH07cmV0dXJuIHIuZGlzcGF0Y2goby5mbi5BZGRQYWdlLGkpfSxyZW1vdmVQYWdlOmFzeW5jIHQ9Pihhd2FpdCgwLG8ueHApKGUpKS5kaXNwYXRjaChvLmZuLkRldGFjaFBhZ2VzRnJvbVdpbmRvdyx7aWRlbnRpdHk6ZSxwYWdlSWRzOlt0XX0pLHJlcGFyZW50UGFnZTphc3luYyB0PT4oMCxmLmFBKSgpLkJyb3dzZXIud3JhcFN5bmMoZSkuX3JlcGFyZW50UGFnZSh0KSxfcmVwYXJlbnRQYWdlOmFzeW5jIHQ9Pntjb25zdHtwYWdlSWQ6bn09dCxyPWF3YWl0KDAsby54cCkoZSksaT0oYXdhaXQgci5kaXNwYXRjaChvLmZuLkdldEFsbEF0dGFjaGVkUGFnZXMsdm9pZCAwKSkuZmluZCgoKHtwYWdlSWQ6ZX0pPT5lPT09bikpO2lmKCFpKXRocm93IG5ldyBFcnJvcihgUmVwYXJlbnQgUGFnZSBFcnJvcjogVGFyZ2V0IHBhZ2Ugd2l0aCBwYWdlSWQgJHtufSBub3QgZm91bmRgKTtpLm11bHRpSW5zdGFuY2VWaWV3QmVoYXZpb3I9XCJyZXBhcmVudFwiO2NvbnN0IGE9e2lkZW50aXR5OmUscGFnZXM6W2ldLGluc2VydGlvbkluZGV4OnQuaW5kZXh9O3JldHVybiByLmRpc3BhdGNoKG8uZm4uQXR0YWNoUGFnZXNUb1dpbmRvdyxhKX0sc2V0QWN0aXZlUGFnZTphc3luYyB0PT4oYXdhaXQoMCxvLnhwKShlKSkuZGlzcGF0Y2goby5mbi5TZXRBY3RpdmVQYWdlLHtpZGVudGl0eTplLHBhZ2VJZDp0fSksdXBkYXRlUGFnZTphc3luYyB0PT57Y29uc3Qgbj1hd2FpdCgwLG8ueHApKGUpO3JldHVybiB0LmlkZW50aXR5PWUsbi5kaXNwYXRjaChvLmZuLlVwZGF0ZVBhZ2VGb3JXaW5kb3csdCl9LHJlb3JkZXJQYWdlczphc3luYyB0PT57Y29uc3Qgbj1hd2FpdCgwLG8ueHApKGUpO3JldHVybiB0LmlkZW50aXR5PWUsbi5kaXNwYXRjaChvLmZuLlJlb3JkZXJQYWdlc0ZvcldpbmRvdyx0KX0sX29wZW5HbG9iYWxDb250ZXh0TWVudTphc3luYyB0PT57Y29uc3Qgbj1hd2FpdCgwLG8ueHApKGUpO3JldHVybiB0LmlkZW50aXR5PWUsbi5kaXNwYXRjaChvLmZuLk9wZW5HbG9iYWxDb250ZXh0TWVudUludGVybmFsLHQpfSxyZXBsYWNlVG9vbGJhck9wdGlvbnM6YXN5bmMgdD0+e2F3YWl0KDAsby54cCkoZSk7Y29uc3Qgbj1maW4uV2luZG93LndyYXBTeW5jKGUpO2F3YWl0IG4udXBkYXRlT3B0aW9ucyh7d29ya3NwYWNlUGxhdGZvcm06e3Rvb2xiYXJPcHRpb25zOnR9fSl9LHJlcGxhY2VXaW5kb3dTdGF0ZUJ1dHRvbk9wdGlvbnM6YXN5bmMgdD0+e2F3YWl0KDAsby54cCkoZSk7Y29uc3Qgbj1maW4uV2luZG93LndyYXBTeW5jKGUpO2F3YWl0IG4udXBkYXRlT3B0aW9ucyh7d29ya3NwYWNlUGxhdGZvcm06e3dpbmRvd1N0YXRlQnV0dG9uT3B0aW9uczp0fX0pfSx1cGRhdGVCcm93c2VyV2luZG93VGl0bGU6YXN5bmMgdD0+e2NvbnN0IG49ZmluLldpbmRvdy53cmFwU3luYyhlKTtcInN0cmluZ1wiIT10eXBlb2YgdD9hd2FpdCBuLnVwZGF0ZU9wdGlvbnMoe3dvcmtzcGFjZVBsYXRmb3JtOnt0aXRsZTp0fX0pOmNvbnNvbGUud2FybihcIlR5cGUgc3RyaW5nIGZvciB3aW5kb3cgdGl0bGUgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSBXaW5kb3dUaXRsZSB0eXBlIGluc3RlYWRcIix0KX0sX29wZW5WaWV3VGFiQ29udGV4dE1lbnU6YXN5bmMgdD0+e2NvbnN0IG49YXdhaXQoMCxvLnhwKShlKTtyZXR1cm4gdC5pZGVudGl0eT1lLG4uZGlzcGF0Y2goby5mbi5PcGVuVmlld1RhYkNvbnRleHRNZW51SW50ZXJuYWwsdCl9LF9vcGVuUGFnZVRhYkNvbnRleHRNZW51OmFzeW5jIHQ9Pntjb25zdCBuPWF3YWl0KDAsby54cCkoZSk7cmV0dXJuIHQuaWRlbnRpdHk9ZSxuLmRpc3BhdGNoKG8uZm4uT3BlblBhZ2VUYWJDb250ZXh0TWVudUludGVybmFsLHQpfSxfb3BlblNhdmVNb2RhbDphc3luYyB0PT57YXdhaXQoMCxvLnhwKShlKTtyZXR1cm4oYXdhaXQoMCxjLkRtKShlKSkuZGlzcGF0Y2goYy55ei5PcGVuU2F2ZU1vZGFsSW50ZXJuYWwsdCl9LF9vcGVuU2F2ZUJ1dHRvbkNvbnRleHRNZW51OmFzeW5jIHQ9Pntjb25zdCBuPWF3YWl0KDAsby54cCkoZSk7cmV0dXJuIHQuaWRlbnRpdHk9ZSxuLmRpc3BhdGNoKG8uZm4uT3BlblNhdmVCdXR0b25Db250ZXh0TWVudUludGVybmFsLHQpfSxfYWRkRGVmYXVsdFBhZ2U6YXN5bmMgdD0+e2NvbnN0IG49YXdhaXQoMCxvLnhwKShlKTtyZXR1cm4gdC5pZGVudGl0eT1lLG4uZGlzcGF0Y2goby5mbi5BZGREZWZhdWx0UGFnZSx0KX0sX3RyYWNrUmVtb3ZlZFRhYjphc3luYyB0PT4oYXdhaXQoMCxvLnhwKShlKSkuZGlzcGF0Y2goby5mbi5UcmFja1JlbW92ZWRUYWJJbnRlcm5hbCx0KSxfcmVzdG9yZVJlbW92ZWRUYWI6YXN5bmMgdD0+KGF3YWl0KDAsby54cCkoZSkpLmRpc3BhdGNoKG8uZm4uUmVzdG9yZVJlbW92ZWRUYWJJbnRlcm5hbCx0KSxfdHJhY2tWaXNpdGVkU2l0ZTphc3luYyB0PT4oYXdhaXQoMCxvLnhwKShlKSkuZGlzcGF0Y2goby5mbi5UcmFja1Zpc2l0ZWRTaXRlSW50ZXJuYWwsdCksX2dldFJlY2VudGx5VmlzaXRlZFNpdGVzOmFzeW5jIHQ9Pihhd2FpdCgwLG8ueHApKGUpKS5kaXNwYXRjaChvLmZuLkdldFJlY2VudGx5VmlzaXRlZFNpdGVzSW50ZXJuYWwsdCksX2dldEZyZXF1ZW50bHlWaXNpdGVkU2l0ZXM6YXN5bmMgdD0+KGF3YWl0KDAsby54cCkoZSkpLmRpc3BhdGNoKG8uZm4uR2V0RnJlcXVlbnRseVZpc2l0ZWRTaXRlc0ludGVybmFsLHQpLF9zZWFyY2hTaXRlczphc3luYyB0PT4oYXdhaXQoMCxvLnhwKShlKSkuZGlzcGF0Y2goby5mbi5TZWFyY2hTaXRlc0ludGVybmFsLHtpZGVudGl0eTplLHJlcTp0fSksX2dldEN1cmF0ZWRDb250ZW50OmFzeW5jIHQ9Pihhd2FpdCgwLG8ueHApKGUpKS5kaXNwYXRjaChvLmZuLkdldEN1cmF0ZWRDb250ZW50SW50ZXJuYWwse2lkZW50aXR5OmUscmVxOnR9KSxfaGFuZGxlUmVxdWVzdE5hdmlnYXRpb246YXN5bmMgdD0+KGF3YWl0KDAsby54cCkoZSkpLmRpc3BhdGNoKG8uZm4uSGFuZGxlUmVxdWVzdE5hdmlnYXRpb25JbnRlcm5hbCx0KX0pLHA9ZT0+e2NvbnN0IHQ9ZmluLlBsYXRmb3JtLndyYXBTeW5jKGUpO3JldHVybnt3cmFwU3luYzplPT5kKGUpLGNyZWF0ZVdpbmRvdzphc3luYyBuPT57Y29uc3Qgcj0oKCk9Pntjb25zdCBlPWBicm93c2VyLXdpbmRvdy1zdGFydHVwLSR7KDAscy5IKSgpfWA7cmV0dXJuIGwuWi5tYXJrU3RhcnQoZSksZX0pKCk7KGU9PntmaW4uQXBwbGljYXRpb24ud3JhcFN5bmMoe3V1aWQ6ZmluLm1lLmlkZW50aXR5LnV1aWR9KS5vbmNlKFwid2luZG93LXNob3duXCIsKCgpPT57bC5aLm1hcmtBbmRNZWFzdXJlKFwiYnJvd3Nlci13aW5kb3ctc2hvd25cIixlKX0pKX0pKHIpLGF3YWl0KDAsby54cCkoZSk7Y29uc3QgaT1hd2FpdCB0LmNyZWF0ZVdpbmRvdyhuKTtyZXR1cm4oZT0+e2wuWi5tYXJrQW5kTWVhc3VyZShcImJyb3dzZXItd2luZG93LXN0YXJ0ZWRcIixlKX0pKHIpLGQoaS5pZGVudGl0eSl9LGdldEFsbEF0dGFjaGVkUGFnZXM6YXN5bmMoKT0+KGF3YWl0KDAsby54cCkoZSkpLmRpc3BhdGNoKG8uZm4uR2V0QWxsQXR0YWNoZWRQYWdlcyx2b2lkIDApLGdldEFsbFdpbmRvd3M6YXN5bmMoKT0+e2F3YWl0KDAsby54cCkoZSk7cmV0dXJuKGF3YWl0KDAsYS5HUCkoKSkubWFwKChlPT5kKGUuaWRlbnRpdHkpKSl9LGdldFVuaXF1ZVBhZ2VUaXRsZTphc3luYyB0PT4oYXdhaXQoMCxvLnhwKShlKSkuZGlzcGF0Y2goby5mbi5HZXRVbmlxdWVQYWdlVGl0bGUsdCksZ2V0TGFzdEZvY3VzZWRXaW5kb3c6YXN5bmMoKT0+KGF3YWl0KDAsby54cCkoZSkpLmRpc3BhdGNoKG8uZm4uR2V0TGFzdEZvY3VzZWRCcm93c2VyV2luZG93LHZvaWQgMCl9fSxoPWU9Pih7Y3JlYXRlUGFnZTphc3luYyB0PT4oYXdhaXQoMCxvLnhwKShlKSkuZGlzcGF0Y2goby5mbi5DcmVhdGVTYXZlZFBhZ2VJbnRlcm5hbCx0KSxkZWxldGVQYWdlOmFzeW5jIHQ9Pihhd2FpdCgwLG8ueHApKGUpKS5kaXNwYXRjaChvLmZuLkRlbGV0ZVNhdmVkUGFnZUludGVybmFsLHQpLHVwZGF0ZVBhZ2U6YXN5bmMgdD0+KGF3YWl0KDAsby54cCkoZSkpLmRpc3BhdGNoKG8uZm4uVXBkYXRlU2F2ZWRQYWdlSW50ZXJuYWwsdCksZ2V0UGFnZTphc3luYyB0PT4oYXdhaXQoMCxvLnhwKShlKSkuZGlzcGF0Y2goby5mbi5HZXRTYXZlZFBhZ2UsdCksZ2V0UGFnZXM6YXN5bmMgdD0+KGF3YWl0KDAsby54cCkoZSkpLmRpc3BhdGNoKG8uZm4uR2V0U2F2ZWRQYWdlcyx0KSxzYXZlUGFnZTphc3luYyB0PT4oYXdhaXQoMCxvLnhwKShlKSkuZGlzcGF0Y2goby5mbi5TYXZlUGFnZSx0KSxjcmVhdGVXb3Jrc3BhY2U6YXN5bmMgdD0+KGF3YWl0KDAsby5qNykoZSkpLmRpc3BhdGNoKG8uZm4uQ3JlYXRlU2F2ZWRXb3Jrc3BhY2UsdCksZGVsZXRlV29ya3NwYWNlOmFzeW5jIHQ9Pntjb25zdCBuPXYoKSxyPWF3YWl0IG4uZ2V0Q3VycmVudFdvcmtzcGFjZSgpO2lmKHIud29ya3NwYWNlSWQ9PT10KXRocm93IG5ldyBFcnJvcihgQ2Fubm90IGRlbGV0ZSBjdXJyZW50IGFjdGl2ZSB3b3Jrc3BhY2UgJHtyLnRpdGxlfWApO3JldHVybihhd2FpdCgwLG8uajcpKGUpKS5kaXNwYXRjaChvLmZuLkRlbGV0ZVNhdmVkV29ya3NwYWNlLHQpfSx1cGRhdGVXb3Jrc3BhY2U6YXN5bmMgdD0+KGF3YWl0KDAsby5qNykoZSkpLmRpc3BhdGNoKG8uZm4uVXBkYXRlU2F2ZWRXb3Jrc3BhY2UsdCksZ2V0V29ya3NwYWNlOmFzeW5jIHQ9Pihhd2FpdCgwLG8uajcpKGUpKS5kaXNwYXRjaChvLmZuLkdldFNhdmVkV29ya3NwYWNlLHQpLGdldFdvcmtzcGFjZXM6YXN5bmMgdD0+KGF3YWl0KDAsby5qNykoZSkpLmRpc3BhdGNoKG8uZm4uR2V0U2F2ZWRXb3Jrc3BhY2VzLHQpLHNhdmVXb3Jrc3BhY2U6YXN5bmMgdD0+KGF3YWl0KDAsby5qNykoZSkpLmRpc3BhdGNoKG8uZm4uU2F2ZVdvcmtzcGFjZSx0KSxnZXREb2NrUHJvdmlkZXJDb25maWc6YXN5bmMgdD0+KGF3YWl0KDAsby5qNykoZSkpLmRpc3BhdGNoKG8uZm4uR2V0RG9ja1Byb3ZpZGVyQ29uZmlnLHQpLHNhdmVEb2NrUHJvdmlkZXJDb25maWc6YXN5bmMgdD0+KGF3YWl0KDAsby5qNykoZSkpLmRpc3BhdGNoKG8uZm4uU2F2ZURvY2tQcm92aWRlckNvbmZpZyx0KX0pO3ZhciBnPW4oNzA1KTtjb25zdCB2PSgpPT4oZT0+e2NvbnN0IHQ9ZmluLlBsYXRmb3JtLndyYXBTeW5jKGUpO2xldCBuO3JldHVybiBPYmplY3QuYXNzaWduKHQse2FwcGx5U25hcHNob3Q6YXN5bmModCxuKT0+e2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0JiYhdD8ud2luZG93cyl0aHJvdyBuZXcgRXJyb3IoXCJOb3QgYSB2YWxpZCBicm93c2VyIHNuYXBzaG90XCIpO3JldHVybiBmaW4uUGxhdGZvcm0ud3JhcFN5bmMoZSkuYXBwbHlTbmFwc2hvdCh0LG4pfSxnZXRTbmFwc2hvdDooKT0+ZmluLlBsYXRmb3JtLndyYXBTeW5jKGUpLmdldFNuYXBzaG90KCkudGhlbigoZT0+ZSkpLGdldFZpZXdTbmFwc2hvdDp0PT5maW4uUGxhdGZvcm0ud3JhcFN5bmMoZSkuZ2V0Vmlld1NuYXBzaG90KHQpLGNyZWF0ZVZpZXc6KHQsbixyKT0+ZmluLlBsYXRmb3JtLndyYXBTeW5jKGUpLmNyZWF0ZVZpZXcodCxuLHIpLGxhdW5jaEFwcDphc3luYyB0PT4oY29uc29sZS53YXJuKFwibGF1bmNoQXBwIG1ldGhvZCBpcyBkZXByZWNhdGVkLiBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgY3JlYXRlVmlldyAtIGh0dHBzOi8vZGV2ZWxvcGVycy5vcGVuZmluLmNvL29mLWRvY3MvZG9jcy9wbGF0Zm9ybS1nZXR0aW5nLXN0YXJ0ZWQjYWRkLWEtdmlldy10by1hbi1leGlzdGluZy13aW5kb3cgb3IgIGNyZWF0ZVdpbmRvdyAtIGh0dHBzOi8vZGV2ZWxvcGVycy5vcGVuZmluLmNvL29mLWRvY3MvZG9jcy9wbGF0Zm9ybS1nZXR0aW5nLXN0YXJ0ZWQjY3JlYXRlLWEtcGxhdGZvcm0td2luZG93IGluc3RlYWQuXCIpLHQudGFyZ2V0fHwodC50YXJnZXQ9e3V1aWQ6ci5BQixuYW1lOnIub0MsZW50aXR5VHlwZTpyLkNMfHxcInVua25vd25cIn0pLChhd2FpdCgwLG8uajcpKGUpKS5kaXNwYXRjaChvLmZuLkxhdW5jaEFwcCx0KSksX2ludm9rZUN1c3RvbUFjdGlvbjphc3luYyh0LG4pPT57Y29uc3Qgcj1hd2FpdCgwLG8uajcpKGUpLGE9e2FjdGlvbklkOnQscGF5bG9hZDp7Li4ubixjYWxsZXJUeXBlOm4uY2FsbGVyVHlwZXx8aS4kZy5BUEl9fTtyZXR1cm4gci5kaXNwYXRjaChvLmZuLkludm9rZUN1c3RvbUFjdGlvbkludGVybmFsLGEpfSxfcmVxdWVzdFF1aXRQbGF0Zm9ybURpYWxvZzphc3luYyB0PT4oYXdhaXQoMCxvLmo3KShlKSkuZGlzcGF0Y2goby5mbi5SZXF1ZXN0UXVpdFBsYXRmb3JtRGlhbG9nSW50ZXJuYWwsdCksZ2V0Q3VycmVudFdvcmtzcGFjZTphc3luYygpPT4oYXdhaXQoMCxvLmo3KShlKSkuZGlzcGF0Y2goby5mbi5HZXRDdXJyZW50V29ya3NwYWNlLHZvaWQgMCksYXBwbHlXb3Jrc3BhY2U6YXN5bmModCxuKT0+KGF3YWl0KDAsby5qNykoZSkpLmRpc3BhdGNoKG8uZm4uQXBwbHlXb3Jrc3BhY2Usey4uLnQsb3B0aW9uczpufSksc2V0QWN0aXZlV29ya3NwYWNlOmFzeW5jIHQ9Pihhd2FpdCgwLG8uajcpKGUpKS5kaXNwYXRjaChvLmZuLlNldEFjdGl2ZVdvcmtzcGFjZSx0KSxnZXRMYW5ndWFnZTphc3luYygpPT4oYXdhaXQoMCxvLmo3KShlKSkuZGlzcGF0Y2goby5mbi5HZXRMYW5ndWFnZSksX2dldExhbmd1YWdlUmVzb3VyY2VzOmFzeW5jKCk9Pihhd2FpdCgwLG8uajcpKGUpKS5kaXNwYXRjaChvLmZuLkdldExhbmd1YWdlUmVzb3VyY2VzSW50ZXJuYWwpLHNldExhbmd1YWdlOmFzeW5jIHQ9Pihhd2FpdCgwLG8uajcpKGUpKS5kaXNwYXRjaChvLmZuLlNldExhbmd1YWdlLHQpLF9yYWlzZUFuYWx5dGljczphc3luYyB0PT57aWYobnx8KG49YXdhaXQoMCxvLkhoKShlKSksXCJvYmplY3RcIj09dHlwZW9mIG4mJm4/LmFuYWx5dGljcz8uaXNTdXBwb3J0ZWQpcmV0dXJuKGF3YWl0KDAsby5qNykoZSkpLmRpc3BhdGNoKG8uZm4uQW5hbHl0aWNzLHQpO2UudXVpZH0sZ2V0Tm90aWZpY2F0aW9uc0NvbmZpZzphc3luYygpPT4oYXdhaXQoMCxvLmo3KShlKSkuZGlzcGF0Y2goby5mbi5HZXROb3RpZmljYXRpb25zQ29uZmlnKSxfcmVmcmVzaEJvb2ttYXJrc0ludGVybmFsOmFzeW5jKCk9Pihhd2FpdCgwLG8uajcpKGUpKS5kaXNwYXRjaChvLmZuLlJlZnJlc2hCb29rbWFya3NJbnRlcm5hbCksVGhlbWU6KDAsZy5QMCkoZSksQnJvd3NlcjpwKGUpLFN0b3JhZ2U6aChlKX0pfSkoZmluLm1lLmlkZW50aXR5KX0sNzA1OihlLHQsbik9PntcInVzZSBzdHJpY3RcIjtuLmQodCx7UDA6KCk9PmF9KTtuKDgwNjEpLG4oNDcyOCksbig2MDA1KSxuKDEyMSksbigxMTI3KTt2YXIgcj1uKDkxMTcpO3ZhciBvOyFmdW5jdGlvbihlKXtlLlVwZGF0ZVBsYXRmb3JtVGhlbWVTY2hlbWU9XCJ1cGRhdGUtcGxhdGZvcm0tdGhlbWUtc2NoZW1lXCJ9KG98fChvPXt9KSk7KDAsci5aKShcIm9mLXdvcmtzcGFjZS1ub3RpZmljYXRpb25zLXN5bmNcIik7big1MTUwKTt2YXIgaT1uKDU0MzgpO2NvbnN0IGE9ZT0+KHtnZXRUaGVtZXM6YXN5bmMoKT0+KGF3YWl0KDAsaS5qNykoZSkpLmRpc3BhdGNoKGkuZm4uR2V0VGhlbWVzLHZvaWQgMCksc2V0U2VsZWN0ZWRTY2hlbWU6YXN5bmMgdD0+KGF3YWl0KDAsaS5qNykoZSkpLmRpc3BhdGNoKGkuZm4uU2V0U2VsZWN0ZWRTY2hlbWUsdCksZ2V0U2VsZWN0ZWRTY2hlbWU6YXN5bmMoKT0+KGF3YWl0KDAsaS5qNykoZSkpLmRpc3BhdGNoKGkuZm4uR2V0U2VsZWN0ZWRTY2hlbWUsdm9pZCAwKX0pfSw4NjM2OihlLHQsbik9PntcInVzZSBzdHJpY3RcIjtuLmQodCx7YUE6KCk9PnEuYX0pO24oNzEwMCk7dmFyIHI9big2Njc4KSxvPW4oNzM3OCk7big4NDIzKSxuKDY1MzIpO3ZhciBpPW4oNTgwNik7dmFyIGE9big2MDA1KSxsPW4oMTIxKTtuKDgzMTEpLG4oMjMwNCk7T2JqZWN0LmNyZWF0ZShudWxsKTsoMCxvLmNyZWF0ZUNvbnRleHQpKCk7Y29uc3Qgcz17dHlwZTpcImxvZ2dlclwiLGxvZyhlKXt0aGlzLm91dHB1dChcImxvZ1wiLGUpfSx3YXJuKGUpe3RoaXMub3V0cHV0KFwid2FyblwiLGUpfSxlcnJvcihlKXt0aGlzLm91dHB1dChcImVycm9yXCIsZSl9LG91dHB1dChlLHQpe2NvbnNvbGUmJmNvbnNvbGVbZV0mJmNvbnNvbGVbZV0uYXBwbHkoY29uc29sZSx0KX19O2NsYXNzIGN7Y29uc3RydWN0b3IoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O3RoaXMuaW5pdChlLHQpfWluaXQoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O3RoaXMucHJlZml4PXQucHJlZml4fHxcImkxOG5leHQ6XCIsdGhpcy5sb2dnZXI9ZXx8cyx0aGlzLm9wdGlvbnM9dCx0aGlzLmRlYnVnPXQuZGVidWd9bG9nKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJuIHRoaXMuZm9yd2FyZCh0LFwibG9nXCIsXCJcIiwhMCl9d2Fybigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dO3JldHVybiB0aGlzLmZvcndhcmQodCxcIndhcm5cIixcIlwiLCEwKX1lcnJvcigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dO3JldHVybiB0aGlzLmZvcndhcmQodCxcImVycm9yXCIsXCJcIil9ZGVwcmVjYXRlKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJuIHRoaXMuZm9yd2FyZCh0LFwid2FyblwiLFwiV0FSTklORyBERVBSRUNBVEVEOiBcIiwhMCl9Zm9yd2FyZChlLHQsbixyKXtyZXR1cm4gciYmIXRoaXMuZGVidWc/bnVsbDooXCJzdHJpbmdcIj09dHlwZW9mIGVbMF0mJihlWzBdPWAke259JHt0aGlzLnByZWZpeH0gJHtlWzBdfWApLHRoaXMubG9nZ2VyW3RdKGUpKX1jcmVhdGUoZSl7cmV0dXJuIG5ldyBjKHRoaXMubG9nZ2VyLHtwcmVmaXg6YCR7dGhpcy5wcmVmaXh9OiR7ZX06YCwuLi50aGlzLm9wdGlvbnN9KX1jbG9uZShlKXtyZXR1cm4oZT1lfHx0aGlzLm9wdGlvbnMpLnByZWZpeD1lLnByZWZpeHx8dGhpcy5wcmVmaXgsbmV3IGModGhpcy5sb2dnZXIsZSl9fXZhciB1PW5ldyBjO2NsYXNzIGZ7Y29uc3RydWN0b3IoKXt0aGlzLm9ic2VydmVycz17fX1vbihlLHQpe3JldHVybiBlLnNwbGl0KFwiIFwiKS5mb3JFYWNoKChlPT57dGhpcy5vYnNlcnZlcnNbZV18fCh0aGlzLm9ic2VydmVyc1tlXT1uZXcgTWFwKTtjb25zdCBuPXRoaXMub2JzZXJ2ZXJzW2VdLmdldCh0KXx8MDt0aGlzLm9ic2VydmVyc1tlXS5zZXQodCxuKzEpfSkpLHRoaXN9b2ZmKGUsdCl7dGhpcy5vYnNlcnZlcnNbZV0mJih0P3RoaXMub2JzZXJ2ZXJzW2VdLmRlbGV0ZSh0KTpkZWxldGUgdGhpcy5vYnNlcnZlcnNbZV0pfWVtaXQoZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkodD4xP3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO2lmKHRoaXMub2JzZXJ2ZXJzW2VdKXtBcnJheS5mcm9tKHRoaXMub2JzZXJ2ZXJzW2VdLmVudHJpZXMoKSkuZm9yRWFjaCgoZT0+e2xldFt0LHJdPWU7Zm9yKGxldCBlPTA7ZTxyO2UrKyl0KC4uLm4pfSkpfWlmKHRoaXMub2JzZXJ2ZXJzW1wiKlwiXSl7QXJyYXkuZnJvbSh0aGlzLm9ic2VydmVyc1tcIipcIl0uZW50cmllcygpKS5mb3JFYWNoKCh0PT57bGV0W3Isb109dDtmb3IobGV0IHQ9MDt0PG87dCsrKXIuYXBwbHkocixbZSwuLi5uXSl9KSl9fX1mdW5jdGlvbiBkKCl7bGV0IGUsdDtjb25zdCBuPW5ldyBQcm9taXNlKCgobixyKT0+e2U9bix0PXJ9KSk7cmV0dXJuIG4ucmVzb2x2ZT1lLG4ucmVqZWN0PXQsbn1mdW5jdGlvbiBwKGUpe3JldHVybiBudWxsPT1lP1wiXCI6XCJcIitlfWNvbnN0IGg9LyMjIy9nO2Z1bmN0aW9uIGcoZSx0LG4pe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuaW5kZXhPZihcIiMjI1wiKT4tMT9lLnJlcGxhY2UoaCxcIi5cIik6ZX1mdW5jdGlvbiBvKCl7cmV0dXJuIWV8fFwic3RyaW5nXCI9PXR5cGVvZiBlfWNvbnN0IGk9XCJzdHJpbmdcIiE9dHlwZW9mIHQ/dDp0LnNwbGl0KFwiLlwiKTtsZXQgYT0wO2Zvcig7YTxpLmxlbmd0aC0xOyl7aWYobygpKXJldHVybnt9O2NvbnN0IHQ9cihpW2FdKTshZVt0XSYmbiYmKGVbdF09bmV3IG4pLGU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCk/ZVt0XTp7fSwrK2F9cmV0dXJuIG8oKT97fTp7b2JqOmUsazpyKGlbYV0pfX1mdW5jdGlvbiB2KGUsdCxuKXtjb25zdHtvYmo6cixrOm99PWcoZSx0LE9iamVjdCk7aWYodm9pZCAwIT09cnx8MT09PXQubGVuZ3RoKXJldHVybiB2b2lkKHJbb109bik7bGV0IGk9dFt0Lmxlbmd0aC0xXSxhPXQuc2xpY2UoMCx0Lmxlbmd0aC0xKSxsPWcoZSxhLE9iamVjdCk7Zm9yKDt2b2lkIDA9PT1sLm9iaiYmYS5sZW5ndGg7KWk9YCR7YVthLmxlbmd0aC0xXX0uJHtpfWAsYT1hLnNsaWNlKDAsYS5sZW5ndGgtMSksbD1nKGUsYSxPYmplY3QpLGwmJmwub2JqJiZ2b2lkIDAhPT1sLm9ialtgJHtsLmt9LiR7aX1gXSYmKGwub2JqPXZvaWQgMCk7bC5vYmpbYCR7bC5rfS4ke2l9YF09bn1mdW5jdGlvbiBtKGUsdCl7Y29uc3R7b2JqOm4sazpyfT1nKGUsdCk7aWYobilyZXR1cm4gbltyXX1mdW5jdGlvbiBDKGUsdCxuKXtmb3IoY29uc3QgciBpbiB0KVwiX19wcm90b19fXCIhPT1yJiZcImNvbnN0cnVjdG9yXCIhPT1yJiYociBpbiBlP1wic3RyaW5nXCI9PXR5cGVvZiBlW3JdfHxlW3JdaW5zdGFuY2VvZiBTdHJpbmd8fFwic3RyaW5nXCI9PXR5cGVvZiB0W3JdfHx0W3JdaW5zdGFuY2VvZiBTdHJpbmc/biYmKGVbcl09dFtyXSk6QyhlW3JdLHRbcl0sbik6ZVtyXT10W3JdKTtyZXR1cm4gZX1mdW5jdGlvbiB5KGUpe3JldHVybiBlLnJlcGxhY2UoL1tcXC1cXFtcXF1cXC9cXHtcXH1cXChcXClcXCpcXCtcXD9cXC5cXFxcXFxeXFwkXFx8XS9nLFwiXFxcXCQmXCIpfXZhciB3PXtcIiZcIjpcIiZhbXA7XCIsXCI8XCI6XCImbHQ7XCIsXCI+XCI6XCImZ3Q7XCIsJ1wiJzpcIiZxdW90O1wiLFwiJ1wiOlwiJiMzOTtcIixcIi9cIjpcIiYjeDJGO1wifTtmdW5jdGlvbiBiKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlP2UucmVwbGFjZSgvWyY8PlwiJ1xcL10vZywoZT0+d1tlXSkpOmV9Y29uc3QgeD1bXCIgXCIsXCIsXCIsXCI/XCIsXCIhXCIsXCI7XCJdLF89bmV3IGNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuY2FwYWNpdHk9ZSx0aGlzLnJlZ0V4cE1hcD1uZXcgTWFwLHRoaXMucmVnRXhwUXVldWU9W119Z2V0UmVnRXhwKGUpe2NvbnN0IHQ9dGhpcy5yZWdFeHBNYXAuZ2V0KGUpO2lmKHZvaWQgMCE9PXQpcmV0dXJuIHQ7Y29uc3Qgbj1uZXcgUmVnRXhwKGUpO3JldHVybiB0aGlzLnJlZ0V4cFF1ZXVlLmxlbmd0aD09PXRoaXMuY2FwYWNpdHkmJnRoaXMucmVnRXhwTWFwLmRlbGV0ZSh0aGlzLnJlZ0V4cFF1ZXVlLnNoaWZ0KCkpLHRoaXMucmVnRXhwTWFwLnNldChlLG4pLHRoaXMucmVnRXhwUXVldWUucHVzaChlKSxufX0oMjApO2Z1bmN0aW9uIE8oZSx0KXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06XCIuXCI7aWYoIWUpcmV0dXJuO2lmKGVbdF0pcmV0dXJuIGVbdF07Y29uc3Qgcj10LnNwbGl0KG4pO2xldCBvPWU7Zm9yKGxldCBlPTA7ZTxyLmxlbmd0aDspe2lmKCFvfHxcIm9iamVjdFwiIT10eXBlb2YgbylyZXR1cm47bGV0IHQsaT1cIlwiO2ZvcihsZXQgYT1lO2E8ci5sZW5ndGg7KythKWlmKGEhPT1lJiYoaSs9biksaSs9clthXSx0PW9baV0sdm9pZCAwIT09dCl7aWYoW1wic3RyaW5nXCIsXCJudW1iZXJcIixcImJvb2xlYW5cIl0uaW5kZXhPZih0eXBlb2YgdCk+LTEmJmE8ci5sZW5ndGgtMSljb250aW51ZTtlKz1hLWUrMTticmVha31vPXR9cmV0dXJuIG99ZnVuY3Rpb24gTChlKXtyZXR1cm4gZSYmZS5pbmRleE9mKFwiX1wiKT4wP2UucmVwbGFjZShcIl9cIixcIi1cIik6ZX1jbGFzcyBFIGV4dGVuZHMgZntjb25zdHJ1Y3RvcihlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e25zOltcInRyYW5zbGF0aW9uXCJdLGRlZmF1bHROUzpcInRyYW5zbGF0aW9uXCJ9O3N1cGVyKCksdGhpcy5kYXRhPWV8fHt9LHRoaXMub3B0aW9ucz10LHZvaWQgMD09PXRoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3ImJih0aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yPVwiLlwiKSx2b2lkIDA9PT10aGlzLm9wdGlvbnMuaWdub3JlSlNPTlN0cnVjdHVyZSYmKHRoaXMub3B0aW9ucy5pZ25vcmVKU09OU3RydWN0dXJlPSEwKX1hZGROYW1lc3BhY2VzKGUpe3RoaXMub3B0aW9ucy5ucy5pbmRleE9mKGUpPDAmJnRoaXMub3B0aW9ucy5ucy5wdXNoKGUpfXJlbW92ZU5hbWVzcGFjZXMoZSl7Y29uc3QgdD10aGlzLm9wdGlvbnMubnMuaW5kZXhPZihlKTt0Pi0xJiZ0aGlzLm9wdGlvbnMubnMuc3BsaWNlKHQsMSl9Z2V0UmVzb3VyY2UoZSx0LG4pe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTp7fTtjb25zdCBvPXZvaWQgMCE9PXIua2V5U2VwYXJhdG9yP3Iua2V5U2VwYXJhdG9yOnRoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3IsaT12b2lkIDAhPT1yLmlnbm9yZUpTT05TdHJ1Y3R1cmU/ci5pZ25vcmVKU09OU3RydWN0dXJlOnRoaXMub3B0aW9ucy5pZ25vcmVKU09OU3RydWN0dXJlO2xldCBhO2UuaW5kZXhPZihcIi5cIik+LTE/YT1lLnNwbGl0KFwiLlwiKTooYT1bZSx0XSxuJiYoQXJyYXkuaXNBcnJheShuKT9hLnB1c2goLi4ubik6XCJzdHJpbmdcIj09dHlwZW9mIG4mJm8/YS5wdXNoKC4uLm4uc3BsaXQobykpOmEucHVzaChuKSkpO2NvbnN0IGw9bSh0aGlzLmRhdGEsYSk7cmV0dXJuIWwmJiF0JiYhbiYmZS5pbmRleE9mKFwiLlwiKT4tMSYmKGU9YVswXSx0PWFbMV0sbj1hLnNsaWNlKDIpLmpvaW4oXCIuXCIpKSxsfHwhaXx8XCJzdHJpbmdcIiE9dHlwZW9mIG4/bDpPKHRoaXMuZGF0YSYmdGhpcy5kYXRhW2VdJiZ0aGlzLmRhdGFbZV1bdF0sbixvKX1hZGRSZXNvdXJjZShlLHQsbixyKXtsZXQgbz1hcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XT9hcmd1bWVudHNbNF06e3NpbGVudDohMX07Y29uc3QgaT12b2lkIDAhPT1vLmtleVNlcGFyYXRvcj9vLmtleVNlcGFyYXRvcjp0aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yO2xldCBhPVtlLHRdO24mJihhPWEuY29uY2F0KGk/bi5zcGxpdChpKTpuKSksZS5pbmRleE9mKFwiLlwiKT4tMSYmKGE9ZS5zcGxpdChcIi5cIikscj10LHQ9YVsxXSksdGhpcy5hZGROYW1lc3BhY2VzKHQpLHYodGhpcy5kYXRhLGEsciksby5zaWxlbnR8fHRoaXMuZW1pdChcImFkZGVkXCIsZSx0LG4scil9YWRkUmVzb3VyY2VzKGUsdCxuKXtsZXQgcj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106e3NpbGVudDohMX07Zm9yKGNvbnN0IHIgaW4gbilcInN0cmluZ1wiIT10eXBlb2YgbltyXSYmXCJbb2JqZWN0IEFycmF5XVwiIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseShuW3JdKXx8dGhpcy5hZGRSZXNvdXJjZShlLHQscixuW3JdLHtzaWxlbnQ6ITB9KTtyLnNpbGVudHx8dGhpcy5lbWl0KFwiYWRkZWRcIixlLHQsbil9YWRkUmVzb3VyY2VCdW5kbGUoZSx0LG4scixvKXtsZXQgaT1hcmd1bWVudHMubGVuZ3RoPjUmJnZvaWQgMCE9PWFyZ3VtZW50c1s1XT9hcmd1bWVudHNbNV06e3NpbGVudDohMX0sYT1bZSx0XTtlLmluZGV4T2YoXCIuXCIpPi0xJiYoYT1lLnNwbGl0KFwiLlwiKSxyPW4sbj10LHQ9YVsxXSksdGhpcy5hZGROYW1lc3BhY2VzKHQpO2xldCBsPW0odGhpcy5kYXRhLGEpfHx7fTtyP0MobCxuLG8pOmw9ey4uLmwsLi4ubn0sdih0aGlzLmRhdGEsYSxsKSxpLnNpbGVudHx8dGhpcy5lbWl0KFwiYWRkZWRcIixlLHQsbil9cmVtb3ZlUmVzb3VyY2VCdW5kbGUoZSx0KXt0aGlzLmhhc1Jlc291cmNlQnVuZGxlKGUsdCkmJmRlbGV0ZSB0aGlzLmRhdGFbZV1bdF0sdGhpcy5yZW1vdmVOYW1lc3BhY2VzKHQpLHRoaXMuZW1pdChcInJlbW92ZWRcIixlLHQpfWhhc1Jlc291cmNlQnVuZGxlKGUsdCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuZ2V0UmVzb3VyY2UoZSx0KX1nZXRSZXNvdXJjZUJ1bmRsZShlLHQpe3JldHVybiB0fHwodD10aGlzLm9wdGlvbnMuZGVmYXVsdE5TKSxcInYxXCI9PT10aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUFQST97Li4udGhpcy5nZXRSZXNvdXJjZShlLHQpfTp0aGlzLmdldFJlc291cmNlKGUsdCl9Z2V0RGF0YUJ5TGFuZ3VhZ2UoZSl7cmV0dXJuIHRoaXMuZGF0YVtlXX1oYXNMYW5ndWFnZVNvbWVUcmFuc2xhdGlvbnMoZSl7Y29uc3QgdD10aGlzLmdldERhdGFCeUxhbmd1YWdlKGUpO3JldHVybiEhKHQmJk9iamVjdC5rZXlzKHQpfHxbXSkuZmluZCgoZT0+dFtlXSYmT2JqZWN0LmtleXModFtlXSkubGVuZ3RoPjApKX10b0pTT04oKXtyZXR1cm4gdGhpcy5kYXRhfX12YXIgUz17cHJvY2Vzc29yczp7fSxhZGRQb3N0UHJvY2Vzc29yKGUpe3RoaXMucHJvY2Vzc29yc1tlLm5hbWVdPWV9LGhhbmRsZShlLHQsbixyLG8pe3JldHVybiBlLmZvckVhY2goKGU9Pnt0aGlzLnByb2Nlc3NvcnNbZV0mJih0PXRoaXMucHJvY2Vzc29yc1tlXS5wcm9jZXNzKHQsbixyLG8pKX0pKSx0fX07Y29uc3Qgaj17fTtjbGFzcyBNIGV4dGVuZHMgZntjb25zdHJ1Y3RvcihlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307c3VwZXIoKSxmdW5jdGlvbihlLHQsbil7ZS5mb3JFYWNoKChlPT57dFtlXSYmKG5bZV09dFtlXSl9KSl9KFtcInJlc291cmNlU3RvcmVcIixcImxhbmd1YWdlVXRpbHNcIixcInBsdXJhbFJlc29sdmVyXCIsXCJpbnRlcnBvbGF0b3JcIixcImJhY2tlbmRDb25uZWN0b3JcIixcImkxOG5Gb3JtYXRcIixcInV0aWxzXCJdLGUsdGhpcyksdGhpcy5vcHRpb25zPXQsdm9pZCAwPT09dGhpcy5vcHRpb25zLmtleVNlcGFyYXRvciYmKHRoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3I9XCIuXCIpLHRoaXMubG9nZ2VyPXUuY3JlYXRlKFwidHJhbnNsYXRvclwiKX1jaGFuZ2VMYW5ndWFnZShlKXtlJiYodGhpcy5sYW5ndWFnZT1lKX1leGlzdHMoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOntpbnRlcnBvbGF0aW9uOnt9fTtpZihudWxsPT1lKXJldHVybiExO2NvbnN0IG49dGhpcy5yZXNvbHZlKGUsdCk7cmV0dXJuIG4mJnZvaWQgMCE9PW4ucmVzfWV4dHJhY3RGcm9tS2V5KGUsdCl7bGV0IG49dm9pZCAwIT09dC5uc1NlcGFyYXRvcj90Lm5zU2VwYXJhdG9yOnRoaXMub3B0aW9ucy5uc1NlcGFyYXRvcjt2b2lkIDA9PT1uJiYobj1cIjpcIik7Y29uc3Qgcj12b2lkIDAhPT10LmtleVNlcGFyYXRvcj90LmtleVNlcGFyYXRvcjp0aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yO2xldCBvPXQubnN8fHRoaXMub3B0aW9ucy5kZWZhdWx0TlN8fFtdO2NvbnN0IGk9biYmZS5pbmRleE9mKG4pPi0xLGE9ISh0aGlzLm9wdGlvbnMudXNlckRlZmluZWRLZXlTZXBhcmF0b3J8fHQua2V5U2VwYXJhdG9yfHx0aGlzLm9wdGlvbnMudXNlckRlZmluZWROc1NlcGFyYXRvcnx8dC5uc1NlcGFyYXRvcnx8ZnVuY3Rpb24oZSx0LG4pe3Q9dHx8XCJcIixuPW58fFwiXCI7Y29uc3Qgcj14LmZpbHRlcigoZT0+dC5pbmRleE9mKGUpPDAmJm4uaW5kZXhPZihlKTwwKSk7aWYoMD09PXIubGVuZ3RoKXJldHVybiEwO2NvbnN0IG89Xy5nZXRSZWdFeHAoYCgke3IubWFwKChlPT5cIj9cIj09PWU/XCJcXFxcP1wiOmUpKS5qb2luKFwifFwiKX0pYCk7bGV0IGk9IW8udGVzdChlKTtpZighaSl7Y29uc3QgdD1lLmluZGV4T2Yobik7dD4wJiYhby50ZXN0KGUuc3Vic3RyaW5nKDAsdCkpJiYoaT0hMCl9cmV0dXJuIGl9KGUsbixyKSk7aWYoaSYmIWEpe2NvbnN0IHQ9ZS5tYXRjaCh0aGlzLmludGVycG9sYXRvci5uZXN0aW5nUmVnZXhwKTtpZih0JiZ0Lmxlbmd0aD4wKXJldHVybntrZXk6ZSxuYW1lc3BhY2VzOm99O2NvbnN0IGk9ZS5zcGxpdChuKTsobiE9PXJ8fG49PT1yJiZ0aGlzLm9wdGlvbnMubnMuaW5kZXhPZihpWzBdKT4tMSkmJihvPWkuc2hpZnQoKSksZT1pLmpvaW4ocil9cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIG8mJihvPVtvXSkse2tleTplLG5hbWVzcGFjZXM6b319dHJhbnNsYXRlKGUsdCxuKXtpZihcIm9iamVjdFwiIT10eXBlb2YgdCYmdGhpcy5vcHRpb25zLm92ZXJsb2FkVHJhbnNsYXRpb25PcHRpb25IYW5kbGVyJiYodD10aGlzLm9wdGlvbnMub3ZlcmxvYWRUcmFuc2xhdGlvbk9wdGlvbkhhbmRsZXIoYXJndW1lbnRzKSksXCJvYmplY3RcIj09dHlwZW9mIHQmJih0PXsuLi50fSksdHx8KHQ9e30pLG51bGw9PWUpcmV0dXJuXCJcIjtBcnJheS5pc0FycmF5KGUpfHwoZT1bU3RyaW5nKGUpXSk7Y29uc3Qgcj12b2lkIDAhPT10LnJldHVybkRldGFpbHM/dC5yZXR1cm5EZXRhaWxzOnRoaXMub3B0aW9ucy5yZXR1cm5EZXRhaWxzLG89dm9pZCAwIT09dC5rZXlTZXBhcmF0b3I/dC5rZXlTZXBhcmF0b3I6dGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcix7a2V5OmksbmFtZXNwYWNlczphfT10aGlzLmV4dHJhY3RGcm9tS2V5KGVbZS5sZW5ndGgtMV0sdCksbD1hW2EubGVuZ3RoLTFdLHM9dC5sbmd8fHRoaXMubGFuZ3VhZ2UsYz10LmFwcGVuZE5hbWVzcGFjZVRvQ0lNb2RlfHx0aGlzLm9wdGlvbnMuYXBwZW5kTmFtZXNwYWNlVG9DSU1vZGU7aWYocyYmXCJjaW1vZGVcIj09PXMudG9Mb3dlckNhc2UoKSl7aWYoYyl7Y29uc3QgZT10Lm5zU2VwYXJhdG9yfHx0aGlzLm9wdGlvbnMubnNTZXBhcmF0b3I7cmV0dXJuIHI/e3JlczpgJHtsfSR7ZX0ke2l9YCx1c2VkS2V5OmksZXhhY3RVc2VkS2V5OmksdXNlZExuZzpzLHVzZWROUzpsLHVzZWRQYXJhbXM6dGhpcy5nZXRVc2VkUGFyYW1zRGV0YWlscyh0KX06YCR7bH0ke2V9JHtpfWB9cmV0dXJuIHI/e3JlczppLHVzZWRLZXk6aSxleGFjdFVzZWRLZXk6aSx1c2VkTG5nOnMsdXNlZE5TOmwsdXNlZFBhcmFtczp0aGlzLmdldFVzZWRQYXJhbXNEZXRhaWxzKHQpfTppfWNvbnN0IHU9dGhpcy5yZXNvbHZlKGUsdCk7bGV0IGY9dSYmdS5yZXM7Y29uc3QgZD11JiZ1LnVzZWRLZXl8fGkscD11JiZ1LmV4YWN0VXNlZEtleXx8aSxoPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuYXBwbHkoZiksZz12b2lkIDAhPT10LmpvaW5BcnJheXM/dC5qb2luQXJyYXlzOnRoaXMub3B0aW9ucy5qb2luQXJyYXlzLHY9IXRoaXMuaTE4bkZvcm1hdHx8dGhpcy5pMThuRm9ybWF0LmhhbmRsZUFzT2JqZWN0O2lmKHYmJmYmJihcInN0cmluZ1wiIT10eXBlb2YgZiYmXCJib29sZWFuXCIhPXR5cGVvZiBmJiZcIm51bWJlclwiIT10eXBlb2YgZikmJltcIltvYmplY3QgTnVtYmVyXVwiLFwiW29iamVjdCBGdW5jdGlvbl1cIixcIltvYmplY3QgUmVnRXhwXVwiXS5pbmRleE9mKGgpPDAmJihcInN0cmluZ1wiIT10eXBlb2YgZ3x8XCJbb2JqZWN0IEFycmF5XVwiIT09aCkpe2lmKCF0LnJldHVybk9iamVjdHMmJiF0aGlzLm9wdGlvbnMucmV0dXJuT2JqZWN0cyl7dGhpcy5vcHRpb25zLnJldHVybmVkT2JqZWN0SGFuZGxlcnx8dGhpcy5sb2dnZXIud2FybihcImFjY2Vzc2luZyBhbiBvYmplY3QgLSBidXQgcmV0dXJuT2JqZWN0cyBvcHRpb25zIGlzIG5vdCBlbmFibGVkIVwiKTtjb25zdCBlPXRoaXMub3B0aW9ucy5yZXR1cm5lZE9iamVjdEhhbmRsZXI/dGhpcy5vcHRpb25zLnJldHVybmVkT2JqZWN0SGFuZGxlcihkLGYsey4uLnQsbnM6YX0pOmBrZXkgJyR7aX0gKCR7dGhpcy5sYW5ndWFnZX0pJyByZXR1cm5lZCBhbiBvYmplY3QgaW5zdGVhZCBvZiBzdHJpbmcuYDtyZXR1cm4gcj8odS5yZXM9ZSx1LnVzZWRQYXJhbXM9dGhpcy5nZXRVc2VkUGFyYW1zRGV0YWlscyh0KSx1KTplfWlmKG8pe2NvbnN0IGU9XCJbb2JqZWN0IEFycmF5XVwiPT09aCxuPWU/W106e30scj1lP3A6ZDtmb3IoY29uc3QgZSBpbiBmKWlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmLGUpKXtjb25zdCBpPWAke3J9JHtvfSR7ZX1gO25bZV09dGhpcy50cmFuc2xhdGUoaSx7Li4udCxqb2luQXJyYXlzOiExLG5zOmF9KSxuW2VdPT09aSYmKG5bZV09ZltlXSl9Zj1ufX1lbHNlIGlmKHYmJlwic3RyaW5nXCI9PXR5cGVvZiBnJiZcIltvYmplY3QgQXJyYXldXCI9PT1oKWY9Zi5qb2luKGcpLGYmJihmPXRoaXMuZXh0ZW5kVHJhbnNsYXRpb24oZixlLHQsbikpO2Vsc2V7bGV0IHI9ITEsYT0hMTtjb25zdCBjPXZvaWQgMCE9PXQuY291bnQmJlwic3RyaW5nXCIhPXR5cGVvZiB0LmNvdW50LGQ9TS5oYXNEZWZhdWx0VmFsdWUodCkscD1jP3RoaXMucGx1cmFsUmVzb2x2ZXIuZ2V0U3VmZml4KHMsdC5jb3VudCx0KTpcIlwiLGg9dC5vcmRpbmFsJiZjP3RoaXMucGx1cmFsUmVzb2x2ZXIuZ2V0U3VmZml4KHMsdC5jb3VudCx7b3JkaW5hbDohMX0pOlwiXCIsZz1jJiYhdC5vcmRpbmFsJiYwPT09dC5jb3VudCYmdGhpcy5wbHVyYWxSZXNvbHZlci5zaG91bGRVc2VJbnRsQXBpKCksdj1nJiZ0W2BkZWZhdWx0VmFsdWUke3RoaXMub3B0aW9ucy5wbHVyYWxTZXBhcmF0b3J9emVyb2BdfHx0W2BkZWZhdWx0VmFsdWUke3B9YF18fHRbYGRlZmF1bHRWYWx1ZSR7aH1gXXx8dC5kZWZhdWx0VmFsdWU7IXRoaXMuaXNWYWxpZExvb2t1cChmKSYmZCYmKHI9ITAsZj12KSx0aGlzLmlzVmFsaWRMb29rdXAoZil8fChhPSEwLGY9aSk7Y29uc3QgbT0odC5taXNzaW5nS2V5Tm9WYWx1ZUZhbGxiYWNrVG9LZXl8fHRoaXMub3B0aW9ucy5taXNzaW5nS2V5Tm9WYWx1ZUZhbGxiYWNrVG9LZXkpJiZhP3ZvaWQgMDpmLEM9ZCYmdiE9PWYmJnRoaXMub3B0aW9ucy51cGRhdGVNaXNzaW5nO2lmKGF8fHJ8fEMpe2lmKHRoaXMubG9nZ2VyLmxvZyhDP1widXBkYXRlS2V5XCI6XCJtaXNzaW5nS2V5XCIscyxsLGksQz92OmYpLG8pe2NvbnN0IGU9dGhpcy5yZXNvbHZlKGksey4uLnQsa2V5U2VwYXJhdG9yOiExfSk7ZSYmZS5yZXMmJnRoaXMubG9nZ2VyLndhcm4oXCJTZWVtcyB0aGUgbG9hZGVkIHRyYW5zbGF0aW9ucyB3ZXJlIGluIGZsYXQgSlNPTiBmb3JtYXQgaW5zdGVhZCBvZiBuZXN0ZWQuIEVpdGhlciBzZXQga2V5U2VwYXJhdG9yOiBmYWxzZSBvbiBpbml0IG9yIG1ha2Ugc3VyZSB5b3VyIHRyYW5zbGF0aW9ucyBhcmUgcHVibGlzaGVkIGluIG5lc3RlZCBmb3JtYXQuXCIpfWxldCBlPVtdO2NvbnN0IG49dGhpcy5sYW5ndWFnZVV0aWxzLmdldEZhbGxiYWNrQ29kZXModGhpcy5vcHRpb25zLmZhbGxiYWNrTG5nLHQubG5nfHx0aGlzLmxhbmd1YWdlKTtpZihcImZhbGxiYWNrXCI9PT10aGlzLm9wdGlvbnMuc2F2ZU1pc3NpbmdUbyYmbiYmblswXSlmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKyllLnB1c2goblt0XSk7ZWxzZVwiYWxsXCI9PT10aGlzLm9wdGlvbnMuc2F2ZU1pc3NpbmdUbz9lPXRoaXMubGFuZ3VhZ2VVdGlscy50b1Jlc29sdmVIaWVyYXJjaHkodC5sbmd8fHRoaXMubGFuZ3VhZ2UpOmUucHVzaCh0LmxuZ3x8dGhpcy5sYW5ndWFnZSk7Y29uc3Qgcj0oZSxuLHIpPT57Y29uc3Qgbz1kJiZyIT09Zj9yOm07dGhpcy5vcHRpb25zLm1pc3NpbmdLZXlIYW5kbGVyP3RoaXMub3B0aW9ucy5taXNzaW5nS2V5SGFuZGxlcihlLGwsbixvLEMsdCk6dGhpcy5iYWNrZW5kQ29ubmVjdG9yJiZ0aGlzLmJhY2tlbmRDb25uZWN0b3Iuc2F2ZU1pc3NpbmcmJnRoaXMuYmFja2VuZENvbm5lY3Rvci5zYXZlTWlzc2luZyhlLGwsbixvLEMsdCksdGhpcy5lbWl0KFwibWlzc2luZ0tleVwiLGUsbCxuLGYpfTt0aGlzLm9wdGlvbnMuc2F2ZU1pc3NpbmcmJih0aGlzLm9wdGlvbnMuc2F2ZU1pc3NpbmdQbHVyYWxzJiZjP2UuZm9yRWFjaCgoZT0+e2NvbnN0IG49dGhpcy5wbHVyYWxSZXNvbHZlci5nZXRTdWZmaXhlcyhlLHQpO2cmJnRbYGRlZmF1bHRWYWx1ZSR7dGhpcy5vcHRpb25zLnBsdXJhbFNlcGFyYXRvcn16ZXJvYF0mJm4uaW5kZXhPZihgJHt0aGlzLm9wdGlvbnMucGx1cmFsU2VwYXJhdG9yfXplcm9gKTwwJiZuLnB1c2goYCR7dGhpcy5vcHRpb25zLnBsdXJhbFNlcGFyYXRvcn16ZXJvYCksbi5mb3JFYWNoKChuPT57cihbZV0saStuLHRbYGRlZmF1bHRWYWx1ZSR7bn1gXXx8dil9KSl9KSk6cihlLGksdikpfWY9dGhpcy5leHRlbmRUcmFuc2xhdGlvbihmLGUsdCx1LG4pLGEmJmY9PT1pJiZ0aGlzLm9wdGlvbnMuYXBwZW5kTmFtZXNwYWNlVG9NaXNzaW5nS2V5JiYoZj1gJHtsfToke2l9YCksKGF8fHIpJiZ0aGlzLm9wdGlvbnMucGFyc2VNaXNzaW5nS2V5SGFuZGxlciYmKGY9XCJ2MVwiIT09dGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlBUEk/dGhpcy5vcHRpb25zLnBhcnNlTWlzc2luZ0tleUhhbmRsZXIodGhpcy5vcHRpb25zLmFwcGVuZE5hbWVzcGFjZVRvTWlzc2luZ0tleT9gJHtsfToke2l9YDppLHI/Zjp2b2lkIDApOnRoaXMub3B0aW9ucy5wYXJzZU1pc3NpbmdLZXlIYW5kbGVyKGYpKX1yZXR1cm4gcj8odS5yZXM9Zix1LnVzZWRQYXJhbXM9dGhpcy5nZXRVc2VkUGFyYW1zRGV0YWlscyh0KSx1KTpmfWV4dGVuZFRyYW5zbGF0aW9uKGUsdCxuLHIsbyl7dmFyIGk9dGhpcztpZih0aGlzLmkxOG5Gb3JtYXQmJnRoaXMuaTE4bkZvcm1hdC5wYXJzZSllPXRoaXMuaTE4bkZvcm1hdC5wYXJzZShlLHsuLi50aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5kZWZhdWx0VmFyaWFibGVzLC4uLm59LG4ubG5nfHx0aGlzLmxhbmd1YWdlfHxyLnVzZWRMbmcsci51c2VkTlMsci51c2VkS2V5LHtyZXNvbHZlZDpyfSk7ZWxzZSBpZighbi5za2lwSW50ZXJwb2xhdGlvbil7bi5pbnRlcnBvbGF0aW9uJiZ0aGlzLmludGVycG9sYXRvci5pbml0KHsuLi5uLGludGVycG9sYXRpb246ey4uLnRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLC4uLm4uaW50ZXJwb2xhdGlvbn19KTtjb25zdCBhPVwic3RyaW5nXCI9PXR5cGVvZiBlJiYobiYmbi5pbnRlcnBvbGF0aW9uJiZ2b2lkIDAhPT1uLmludGVycG9sYXRpb24uc2tpcE9uVmFyaWFibGVzP24uaW50ZXJwb2xhdGlvbi5za2lwT25WYXJpYWJsZXM6dGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uc2tpcE9uVmFyaWFibGVzKTtsZXQgbDtpZihhKXtjb25zdCB0PWUubWF0Y2godGhpcy5pbnRlcnBvbGF0b3IubmVzdGluZ1JlZ2V4cCk7bD10JiZ0Lmxlbmd0aH1sZXQgcz1uLnJlcGxhY2UmJlwic3RyaW5nXCIhPXR5cGVvZiBuLnJlcGxhY2U/bi5yZXBsYWNlOm47aWYodGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZGVmYXVsdFZhcmlhYmxlcyYmKHM9ey4uLnRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmRlZmF1bHRWYXJpYWJsZXMsLi4uc30pLGU9dGhpcy5pbnRlcnBvbGF0b3IuaW50ZXJwb2xhdGUoZSxzLG4ubG5nfHx0aGlzLmxhbmd1YWdlLG4pLGEpe2NvbnN0IHQ9ZS5tYXRjaCh0aGlzLmludGVycG9sYXRvci5uZXN0aW5nUmVnZXhwKTtsPCh0JiZ0Lmxlbmd0aCkmJihuLm5lc3Q9ITEpfSFuLmxuZyYmXCJ2MVwiIT09dGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlBUEkmJnImJnIucmVzJiYobi5sbmc9ci51c2VkTG5nKSwhMSE9PW4ubmVzdCYmKGU9dGhpcy5pbnRlcnBvbGF0b3IubmVzdChlLChmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGE9MDthPGU7YSsrKXJbYV09YXJndW1lbnRzW2FdO3JldHVybiBvJiZvWzBdPT09clswXSYmIW4uY29udGV4dD8oaS5sb2dnZXIud2FybihgSXQgc2VlbXMgeW91IGFyZSBuZXN0aW5nIHJlY3Vyc2l2ZWx5IGtleTogJHtyWzBdfSBpbiBrZXk6ICR7dFswXX1gKSxudWxsKTppLnRyYW5zbGF0ZSguLi5yLHQpfSksbikpLG4uaW50ZXJwb2xhdGlvbiYmdGhpcy5pbnRlcnBvbGF0b3IucmVzZXQoKX1jb25zdCBhPW4ucG9zdFByb2Nlc3N8fHRoaXMub3B0aW9ucy5wb3N0UHJvY2VzcyxsPVwic3RyaW5nXCI9PXR5cGVvZiBhP1thXTphO3JldHVybiBudWxsIT1lJiZsJiZsLmxlbmd0aCYmITEhPT1uLmFwcGx5UG9zdFByb2Nlc3NvciYmKGU9Uy5oYW5kbGUobCxlLHQsdGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMucG9zdFByb2Nlc3NQYXNzUmVzb2x2ZWQ/e2kxOG5SZXNvbHZlZDp7Li4ucix1c2VkUGFyYW1zOnRoaXMuZ2V0VXNlZFBhcmFtc0RldGFpbHMobil9LC4uLm59Om4sdGhpcykpLGV9cmVzb2x2ZShlKXtsZXQgdCxuLHIsbyxpLGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT1bZV0pLGUuZm9yRWFjaCgoZT0+e2lmKHRoaXMuaXNWYWxpZExvb2t1cCh0KSlyZXR1cm47Y29uc3QgbD10aGlzLmV4dHJhY3RGcm9tS2V5KGUsYSkscz1sLmtleTtuPXM7bGV0IGM9bC5uYW1lc3BhY2VzO3RoaXMub3B0aW9ucy5mYWxsYmFja05TJiYoYz1jLmNvbmNhdCh0aGlzLm9wdGlvbnMuZmFsbGJhY2tOUykpO2NvbnN0IHU9dm9pZCAwIT09YS5jb3VudCYmXCJzdHJpbmdcIiE9dHlwZW9mIGEuY291bnQsZj11JiYhYS5vcmRpbmFsJiYwPT09YS5jb3VudCYmdGhpcy5wbHVyYWxSZXNvbHZlci5zaG91bGRVc2VJbnRsQXBpKCksZD12b2lkIDAhPT1hLmNvbnRleHQmJihcInN0cmluZ1wiPT10eXBlb2YgYS5jb250ZXh0fHxcIm51bWJlclwiPT10eXBlb2YgYS5jb250ZXh0KSYmXCJcIiE9PWEuY29udGV4dCxwPWEubG5ncz9hLmxuZ3M6dGhpcy5sYW5ndWFnZVV0aWxzLnRvUmVzb2x2ZUhpZXJhcmNoeShhLmxuZ3x8dGhpcy5sYW5ndWFnZSxhLmZhbGxiYWNrTG5nKTtjLmZvckVhY2goKGU9Pnt0aGlzLmlzVmFsaWRMb29rdXAodCl8fChpPWUsIWpbYCR7cFswXX0tJHtlfWBdJiZ0aGlzLnV0aWxzJiZ0aGlzLnV0aWxzLmhhc0xvYWRlZE5hbWVzcGFjZSYmIXRoaXMudXRpbHMuaGFzTG9hZGVkTmFtZXNwYWNlKGkpJiYoaltgJHtwWzBdfS0ke2V9YF09ITAsdGhpcy5sb2dnZXIud2Fybihga2V5IFwiJHtufVwiIGZvciBsYW5ndWFnZXMgXCIke3Auam9pbihcIiwgXCIpfVwiIHdvbid0IGdldCByZXNvbHZlZCBhcyBuYW1lc3BhY2UgXCIke2l9XCIgd2FzIG5vdCB5ZXQgbG9hZGVkYCxcIlRoaXMgbWVhbnMgc29tZXRoaW5nIElTIFdST05HIGluIHlvdXIgc2V0dXAuIFlvdSBhY2Nlc3MgdGhlIHQgZnVuY3Rpb24gYmVmb3JlIGkxOG5leHQuaW5pdCAvIGkxOG5leHQubG9hZE5hbWVzcGFjZSAvIGkxOG5leHQuY2hhbmdlTGFuZ3VhZ2Ugd2FzIGRvbmUuIFdhaXQgZm9yIHRoZSBjYWxsYmFjayBvciBQcm9taXNlIHRvIHJlc29sdmUgYmVmb3JlIGFjY2Vzc2luZyBpdCEhIVwiKSkscC5mb3JFYWNoKChuPT57aWYodGhpcy5pc1ZhbGlkTG9va3VwKHQpKXJldHVybjtvPW47Y29uc3QgaT1bc107aWYodGhpcy5pMThuRm9ybWF0JiZ0aGlzLmkxOG5Gb3JtYXQuYWRkTG9va3VwS2V5cyl0aGlzLmkxOG5Gb3JtYXQuYWRkTG9va3VwS2V5cyhpLHMsbixlLGEpO2Vsc2V7bGV0IGU7dSYmKGU9dGhpcy5wbHVyYWxSZXNvbHZlci5nZXRTdWZmaXgobixhLmNvdW50LGEpKTtjb25zdCB0PWAke3RoaXMub3B0aW9ucy5wbHVyYWxTZXBhcmF0b3J9emVyb2Ascj1gJHt0aGlzLm9wdGlvbnMucGx1cmFsU2VwYXJhdG9yfW9yZGluYWwke3RoaXMub3B0aW9ucy5wbHVyYWxTZXBhcmF0b3J9YDtpZih1JiYoaS5wdXNoKHMrZSksYS5vcmRpbmFsJiYwPT09ZS5pbmRleE9mKHIpJiZpLnB1c2gocytlLnJlcGxhY2Uocix0aGlzLm9wdGlvbnMucGx1cmFsU2VwYXJhdG9yKSksZiYmaS5wdXNoKHMrdCkpLGQpe2NvbnN0IG49YCR7c30ke3RoaXMub3B0aW9ucy5jb250ZXh0U2VwYXJhdG9yfSR7YS5jb250ZXh0fWA7aS5wdXNoKG4pLHUmJihpLnB1c2gobitlKSxhLm9yZGluYWwmJjA9PT1lLmluZGV4T2YocikmJmkucHVzaChuK2UucmVwbGFjZShyLHRoaXMub3B0aW9ucy5wbHVyYWxTZXBhcmF0b3IpKSxmJiZpLnB1c2gobit0KSl9fWxldCBsO2Zvcig7bD1pLnBvcCgpOyl0aGlzLmlzVmFsaWRMb29rdXAodCl8fChyPWwsdD10aGlzLmdldFJlc291cmNlKG4sZSxsLGEpKX0pKSl9KSl9KSkse3Jlczp0LHVzZWRLZXk6bixleGFjdFVzZWRLZXk6cix1c2VkTG5nOm8sdXNlZE5TOml9fWlzVmFsaWRMb29rdXAoZSl7cmV0dXJuISh2b2lkIDA9PT1lfHwhdGhpcy5vcHRpb25zLnJldHVybk51bGwmJm51bGw9PT1lfHwhdGhpcy5vcHRpb25zLnJldHVybkVtcHR5U3RyaW5nJiZcIlwiPT09ZSl9Z2V0UmVzb3VyY2UoZSx0LG4pe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTp7fTtyZXR1cm4gdGhpcy5pMThuRm9ybWF0JiZ0aGlzLmkxOG5Gb3JtYXQuZ2V0UmVzb3VyY2U/dGhpcy5pMThuRm9ybWF0LmdldFJlc291cmNlKGUsdCxuLHIpOnRoaXMucmVzb3VyY2VTdG9yZS5nZXRSZXNvdXJjZShlLHQsbixyKX1nZXRVc2VkUGFyYW1zRGV0YWlscygpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtjb25zdCB0PVtcImRlZmF1bHRWYWx1ZVwiLFwib3JkaW5hbFwiLFwiY29udGV4dFwiLFwicmVwbGFjZVwiLFwibG5nXCIsXCJsbmdzXCIsXCJmYWxsYmFja0xuZ1wiLFwibnNcIixcImtleVNlcGFyYXRvclwiLFwibnNTZXBhcmF0b3JcIixcInJldHVybk9iamVjdHNcIixcInJldHVybkRldGFpbHNcIixcImpvaW5BcnJheXNcIixcInBvc3RQcm9jZXNzXCIsXCJpbnRlcnBvbGF0aW9uXCJdLG49ZS5yZXBsYWNlJiZcInN0cmluZ1wiIT10eXBlb2YgZS5yZXBsYWNlO2xldCByPW4/ZS5yZXBsYWNlOmU7aWYobiYmdm9pZCAwIT09ZS5jb3VudCYmKHIuY291bnQ9ZS5jb3VudCksdGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZGVmYXVsdFZhcmlhYmxlcyYmKHI9ey4uLnRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmRlZmF1bHRWYXJpYWJsZXMsLi4ucn0pLCFuKXtyPXsuLi5yfTtmb3IoY29uc3QgZSBvZiB0KWRlbGV0ZSByW2VdfXJldHVybiByfXN0YXRpYyBoYXNEZWZhdWx0VmFsdWUoZSl7Y29uc3QgdD1cImRlZmF1bHRWYWx1ZVwiO2Zvcihjb25zdCBuIGluIGUpaWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnQ9PT1uLnN1YnN0cmluZygwLDEyKSYmdm9pZCAwIT09ZVtuXSlyZXR1cm4hMDtyZXR1cm4hMX19ZnVuY3Rpb24gayhlKXtyZXR1cm4gZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStlLnNsaWNlKDEpfWNsYXNzIFJ7Y29uc3RydWN0b3IoZSl7dGhpcy5vcHRpb25zPWUsdGhpcy5zdXBwb3J0ZWRMbmdzPXRoaXMub3B0aW9ucy5zdXBwb3J0ZWRMbmdzfHwhMSx0aGlzLmxvZ2dlcj11LmNyZWF0ZShcImxhbmd1YWdlVXRpbHNcIil9Z2V0U2NyaXB0UGFydEZyb21Db2RlKGUpe2lmKCEoZT1MKGUpKXx8ZS5pbmRleE9mKFwiLVwiKTwwKXJldHVybiBudWxsO2NvbnN0IHQ9ZS5zcGxpdChcIi1cIik7cmV0dXJuIDI9PT10Lmxlbmd0aD9udWxsOih0LnBvcCgpLFwieFwiPT09dFt0Lmxlbmd0aC0xXS50b0xvd2VyQ2FzZSgpP251bGw6dGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUodC5qb2luKFwiLVwiKSkpfWdldExhbmd1YWdlUGFydEZyb21Db2RlKGUpe2lmKCEoZT1MKGUpKXx8ZS5pbmRleE9mKFwiLVwiKTwwKXJldHVybiBlO2NvbnN0IHQ9ZS5zcGxpdChcIi1cIik7cmV0dXJuIHRoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKHRbMF0pfWZvcm1hdExhbmd1YWdlQ29kZShlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSYmZS5pbmRleE9mKFwiLVwiKT4tMSl7Y29uc3QgdD1bXCJoYW5zXCIsXCJoYW50XCIsXCJsYXRuXCIsXCJjeXJsXCIsXCJjYW5zXCIsXCJtb25nXCIsXCJhcmFiXCJdO2xldCBuPWUuc3BsaXQoXCItXCIpO3JldHVybiB0aGlzLm9wdGlvbnMubG93ZXJDYXNlTG5nP249bi5tYXAoKGU9PmUudG9Mb3dlckNhc2UoKSkpOjI9PT1uLmxlbmd0aD8oblswXT1uWzBdLnRvTG93ZXJDYXNlKCksblsxXT1uWzFdLnRvVXBwZXJDYXNlKCksdC5pbmRleE9mKG5bMV0udG9Mb3dlckNhc2UoKSk+LTEmJihuWzFdPWsoblsxXS50b0xvd2VyQ2FzZSgpKSkpOjM9PT1uLmxlbmd0aCYmKG5bMF09blswXS50b0xvd2VyQ2FzZSgpLDI9PT1uWzFdLmxlbmd0aCYmKG5bMV09blsxXS50b1VwcGVyQ2FzZSgpKSxcInNnblwiIT09blswXSYmMj09PW5bMl0ubGVuZ3RoJiYoblsyXT1uWzJdLnRvVXBwZXJDYXNlKCkpLHQuaW5kZXhPZihuWzFdLnRvTG93ZXJDYXNlKCkpPi0xJiYoblsxXT1rKG5bMV0udG9Mb3dlckNhc2UoKSkpLHQuaW5kZXhPZihuWzJdLnRvTG93ZXJDYXNlKCkpPi0xJiYoblsyXT1rKG5bMl0udG9Mb3dlckNhc2UoKSkpKSxuLmpvaW4oXCItXCIpfXJldHVybiB0aGlzLm9wdGlvbnMuY2xlYW5Db2RlfHx0aGlzLm9wdGlvbnMubG93ZXJDYXNlTG5nP2UudG9Mb3dlckNhc2UoKTplfWlzU3VwcG9ydGVkQ29kZShlKXtyZXR1cm4oXCJsYW5ndWFnZU9ubHlcIj09PXRoaXMub3B0aW9ucy5sb2FkfHx0aGlzLm9wdGlvbnMubm9uRXhwbGljaXRTdXBwb3J0ZWRMbmdzKSYmKGU9dGhpcy5nZXRMYW5ndWFnZVBhcnRGcm9tQ29kZShlKSksIXRoaXMuc3VwcG9ydGVkTG5nc3x8IXRoaXMuc3VwcG9ydGVkTG5ncy5sZW5ndGh8fHRoaXMuc3VwcG9ydGVkTG5ncy5pbmRleE9mKGUpPi0xfWdldEJlc3RNYXRjaEZyb21Db2RlcyhlKXtpZighZSlyZXR1cm4gbnVsbDtsZXQgdDtyZXR1cm4gZS5mb3JFYWNoKChlPT57aWYodClyZXR1cm47Y29uc3Qgbj10aGlzLmZvcm1hdExhbmd1YWdlQ29kZShlKTt0aGlzLm9wdGlvbnMuc3VwcG9ydGVkTG5ncyYmIXRoaXMuaXNTdXBwb3J0ZWRDb2RlKG4pfHwodD1uKX0pKSwhdCYmdGhpcy5vcHRpb25zLnN1cHBvcnRlZExuZ3MmJmUuZm9yRWFjaCgoZT0+e2lmKHQpcmV0dXJuO2NvbnN0IG49dGhpcy5nZXRMYW5ndWFnZVBhcnRGcm9tQ29kZShlKTtpZih0aGlzLmlzU3VwcG9ydGVkQ29kZShuKSlyZXR1cm4gdD1uO3Q9dGhpcy5vcHRpb25zLnN1cHBvcnRlZExuZ3MuZmluZCgoZT0+ZT09PW4/ZTplLmluZGV4T2YoXCItXCIpPDAmJm4uaW5kZXhPZihcIi1cIik8MD92b2lkIDA6MD09PWUuaW5kZXhPZihuKT9lOnZvaWQgMCkpfSkpLHR8fCh0PXRoaXMuZ2V0RmFsbGJhY2tDb2Rlcyh0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcpWzBdKSx0fWdldEZhbGxiYWNrQ29kZXMoZSx0KXtpZighZSlyZXR1cm5bXTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiYoZT1lKHQpKSxcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9W2VdKSxcIltvYmplY3QgQXJyYXldXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KGUpKXJldHVybiBlO2lmKCF0KXJldHVybiBlLmRlZmF1bHR8fFtdO2xldCBuPWVbdF07cmV0dXJuIG58fChuPWVbdGhpcy5nZXRTY3JpcHRQYXJ0RnJvbUNvZGUodCldKSxufHwobj1lW3RoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKHQpXSksbnx8KG49ZVt0aGlzLmdldExhbmd1YWdlUGFydEZyb21Db2RlKHQpXSksbnx8KG49ZS5kZWZhdWx0KSxufHxbXX10b1Jlc29sdmVIaWVyYXJjaHkoZSx0KXtjb25zdCBuPXRoaXMuZ2V0RmFsbGJhY2tDb2Rlcyh0fHx0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmd8fFtdLGUpLHI9W10sbz1lPT57ZSYmKHRoaXMuaXNTdXBwb3J0ZWRDb2RlKGUpP3IucHVzaChlKTp0aGlzLmxvZ2dlci53YXJuKGByZWplY3RpbmcgbGFuZ3VhZ2UgY29kZSBub3QgZm91bmQgaW4gc3VwcG9ydGVkTG5nczogJHtlfWApKX07cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUmJihlLmluZGV4T2YoXCItXCIpPi0xfHxlLmluZGV4T2YoXCJfXCIpPi0xKT8oXCJsYW5ndWFnZU9ubHlcIiE9PXRoaXMub3B0aW9ucy5sb2FkJiZvKHRoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKGUpKSxcImxhbmd1YWdlT25seVwiIT09dGhpcy5vcHRpb25zLmxvYWQmJlwiY3VycmVudE9ubHlcIiE9PXRoaXMub3B0aW9ucy5sb2FkJiZvKHRoaXMuZ2V0U2NyaXB0UGFydEZyb21Db2RlKGUpKSxcImN1cnJlbnRPbmx5XCIhPT10aGlzLm9wdGlvbnMubG9hZCYmbyh0aGlzLmdldExhbmd1YWdlUGFydEZyb21Db2RlKGUpKSk6XCJzdHJpbmdcIj09dHlwZW9mIGUmJm8odGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUoZSkpLG4uZm9yRWFjaCgoZT0+e3IuaW5kZXhPZihlKTwwJiZvKHRoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKGUpKX0pKSxyfX1sZXQgUD1be2xuZ3M6W1wiYWNoXCIsXCJha1wiLFwiYW1cIixcImFyblwiLFwiYnJcIixcImZpbFwiLFwiZ3VuXCIsXCJsblwiLFwibWZlXCIsXCJtZ1wiLFwibWlcIixcIm9jXCIsXCJwdFwiLFwicHQtQlJcIixcInRnXCIsXCJ0bFwiLFwidGlcIixcInRyXCIsXCJ1elwiLFwid2FcIl0sbnI6WzEsMl0sZmM6MX0se2xuZ3M6W1wiYWZcIixcImFuXCIsXCJhc3RcIixcImF6XCIsXCJiZ1wiLFwiYm5cIixcImNhXCIsXCJkYVwiLFwiZGVcIixcImRldlwiLFwiZWxcIixcImVuXCIsXCJlb1wiLFwiZXNcIixcImV0XCIsXCJldVwiLFwiZmlcIixcImZvXCIsXCJmdXJcIixcImZ5XCIsXCJnbFwiLFwiZ3VcIixcImhhXCIsXCJoaVwiLFwiaHVcIixcImh5XCIsXCJpYVwiLFwiaXRcIixcImtrXCIsXCJrblwiLFwia3VcIixcImxiXCIsXCJtYWlcIixcIm1sXCIsXCJtblwiLFwibXJcIixcIm5haFwiLFwibmFwXCIsXCJuYlwiLFwibmVcIixcIm5sXCIsXCJublwiLFwibm9cIixcIm5zb1wiLFwicGFcIixcInBhcFwiLFwicG1zXCIsXCJwc1wiLFwicHQtUFRcIixcInJtXCIsXCJzY29cIixcInNlXCIsXCJzaVwiLFwic29cIixcInNvblwiLFwic3FcIixcInN2XCIsXCJzd1wiLFwidGFcIixcInRlXCIsXCJ0a1wiLFwidXJcIixcInlvXCJdLG5yOlsxLDJdLGZjOjJ9LHtsbmdzOltcImF5XCIsXCJib1wiLFwiY2dnXCIsXCJmYVwiLFwiaHRcIixcImlkXCIsXCJqYVwiLFwiamJvXCIsXCJrYVwiLFwia21cIixcImtvXCIsXCJreVwiLFwibG9cIixcIm1zXCIsXCJzYWhcIixcInN1XCIsXCJ0aFwiLFwidHRcIixcInVnXCIsXCJ2aVwiLFwid29cIixcInpoXCJdLG5yOlsxXSxmYzozfSx7bG5nczpbXCJiZVwiLFwiYnNcIixcImNuclwiLFwiZHpcIixcImhyXCIsXCJydVwiLFwic3JcIixcInVrXCJdLG5yOlsxLDIsNV0sZmM6NH0se2xuZ3M6W1wiYXJcIl0sbnI6WzAsMSwyLDMsMTEsMTAwXSxmYzo1fSx7bG5nczpbXCJjc1wiLFwic2tcIl0sbnI6WzEsMiw1XSxmYzo2fSx7bG5nczpbXCJjc2JcIixcInBsXCJdLG5yOlsxLDIsNV0sZmM6N30se2xuZ3M6W1wiY3lcIl0sbnI6WzEsMiwzLDhdLGZjOjh9LHtsbmdzOltcImZyXCJdLG5yOlsxLDJdLGZjOjl9LHtsbmdzOltcImdhXCJdLG5yOlsxLDIsMyw3LDExXSxmYzoxMH0se2xuZ3M6W1wiZ2RcIl0sbnI6WzEsMiwzLDIwXSxmYzoxMX0se2xuZ3M6W1wiaXNcIl0sbnI6WzEsMl0sZmM6MTJ9LHtsbmdzOltcImp2XCJdLG5yOlswLDFdLGZjOjEzfSx7bG5nczpbXCJrd1wiXSxucjpbMSwyLDMsNF0sZmM6MTR9LHtsbmdzOltcImx0XCJdLG5yOlsxLDIsMTBdLGZjOjE1fSx7bG5nczpbXCJsdlwiXSxucjpbMSwyLDBdLGZjOjE2fSx7bG5nczpbXCJta1wiXSxucjpbMSwyXSxmYzoxN30se2xuZ3M6W1wibW5rXCJdLG5yOlswLDEsMl0sZmM6MTh9LHtsbmdzOltcIm10XCJdLG5yOlsxLDIsMTEsMjBdLGZjOjE5fSx7bG5nczpbXCJvclwiXSxucjpbMiwxXSxmYzoyfSx7bG5nczpbXCJyb1wiXSxucjpbMSwyLDIwXSxmYzoyMH0se2xuZ3M6W1wic2xcIl0sbnI6WzUsMSwyLDNdLGZjOjIxfSx7bG5nczpbXCJoZVwiLFwiaXdcIl0sbnI6WzEsMiwyMCwyMV0sZmM6MjJ9XSxJPXsxOmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoZT4xKX0sMjpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDEhPWUpfSwzOmZ1bmN0aW9uKGUpe3JldHVybiAwfSw0OmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoZSUxMD09MSYmZSUxMDAhPTExPzA6ZSUxMD49MiYmZSUxMDw9NCYmKGUlMTAwPDEwfHxlJTEwMD49MjApPzE6Mil9LDU6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigwPT1lPzA6MT09ZT8xOjI9PWU/MjplJTEwMD49MyYmZSUxMDA8PTEwPzM6ZSUxMDA+PTExPzQ6NSl9LDY6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lPzA6ZT49MiYmZTw9ND8xOjIpfSw3OmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoMT09ZT8wOmUlMTA+PTImJmUlMTA8PTQmJihlJTEwMDwxMHx8ZSUxMDA+PTIwKT8xOjIpfSw4OmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoMT09ZT8wOjI9PWU/MTo4IT1lJiYxMSE9ZT8yOjMpfSw5OmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoZT49Mil9LDEwOmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoMT09ZT8wOjI9PWU/MTplPDc/MjplPDExPzM6NCl9LDExOmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoMT09ZXx8MTE9PWU/MDoyPT1lfHwxMj09ZT8xOmU+MiYmZTwyMD8yOjMpfSwxMjpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKGUlMTAhPTF8fGUlMTAwPT0xMSl9LDEzOmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoMCE9PWUpfSwxNDpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDE9PWU/MDoyPT1lPzE6Mz09ZT8yOjMpfSwxNTpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKGUlMTA9PTEmJmUlMTAwIT0xMT8wOmUlMTA+PTImJihlJTEwMDwxMHx8ZSUxMDA+PTIwKT8xOjIpfSwxNjpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKGUlMTA9PTEmJmUlMTAwIT0xMT8wOjAhPT1lPzE6Mil9LDE3OmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoMT09ZXx8ZSUxMD09MSYmZSUxMDAhPTExPzA6MSl9LDE4OmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoMD09ZT8wOjE9PWU/MToyKX0sMTk6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lPzA6MD09ZXx8ZSUxMDA+MSYmZSUxMDA8MTE/MTplJTEwMD4xMCYmZSUxMDA8MjA/MjozKX0sMjA6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lPzA6MD09ZXx8ZSUxMDA+MCYmZSUxMDA8MjA/MToyKX0sMjE6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcihlJTEwMD09MT8xOmUlMTAwPT0yPzI6ZSUxMDA9PTN8fGUlMTAwPT00PzM6MCl9LDIyOmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoMT09ZT8wOjI9PWU/MTooZTwwfHxlPjEwKSYmZSUxMD09MD8yOjMpfX07Y29uc3QgQT1bXCJ2MVwiLFwidjJcIixcInYzXCJdLFQ9W1widjRcIl0sSD17emVybzowLG9uZToxLHR3bzoyLGZldzozLG1hbnk6NCxvdGhlcjo1fTtjbGFzcyBCe2NvbnN0cnVjdG9yKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTt0aGlzLmxhbmd1YWdlVXRpbHM9ZSx0aGlzLm9wdGlvbnM9dCx0aGlzLmxvZ2dlcj11LmNyZWF0ZShcInBsdXJhbFJlc29sdmVyXCIpLHRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTiYmIVQuaW5jbHVkZXModGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlKU09OKXx8XCJ1bmRlZmluZWRcIiE9dHlwZW9mIEludGwmJkludGwuUGx1cmFsUnVsZXN8fCh0aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUpTT049XCJ2M1wiLHRoaXMubG9nZ2VyLmVycm9yKFwiWW91ciBlbnZpcm9ubWVudCBzZWVtcyBub3QgdG8gYmUgSW50bCBBUEkgY29tcGF0aWJsZSwgdXNlIGFuIEludGwuUGx1cmFsUnVsZXMgcG9seWZpbGwuIFdpbGwgZmFsbGJhY2sgdG8gdGhlIGNvbXBhdGliaWxpdHlKU09OIHYzIGZvcm1hdCBoYW5kbGluZy5cIikpLHRoaXMucnVsZXM9ZnVuY3Rpb24oKXtjb25zdCBlPXt9O3JldHVybiBQLmZvckVhY2goKHQ9Pnt0LmxuZ3MuZm9yRWFjaCgobj0+e2Vbbl09e251bWJlcnM6dC5ucixwbHVyYWxzOklbdC5mY119fSkpfSkpLGV9KCl9YWRkUnVsZShlLHQpe3RoaXMucnVsZXNbZV09dH1nZXRSdWxlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtpZih0aGlzLnNob3VsZFVzZUludGxBcGkoKSl0cnl7cmV0dXJuIG5ldyBJbnRsLlBsdXJhbFJ1bGVzKEwoXCJkZXZcIj09PWU/XCJlblwiOmUpLHt0eXBlOnQub3JkaW5hbD9cIm9yZGluYWxcIjpcImNhcmRpbmFsXCJ9KX1jYXRjaChlKXtyZXR1cm59cmV0dXJuIHRoaXMucnVsZXNbZV18fHRoaXMucnVsZXNbdGhpcy5sYW5ndWFnZVV0aWxzLmdldExhbmd1YWdlUGFydEZyb21Db2RlKGUpXX1uZWVkc1BsdXJhbChlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307Y29uc3Qgbj10aGlzLmdldFJ1bGUoZSx0KTtyZXR1cm4gdGhpcy5zaG91bGRVc2VJbnRsQXBpKCk/biYmbi5yZXNvbHZlZE9wdGlvbnMoKS5wbHVyYWxDYXRlZ29yaWVzLmxlbmd0aD4xOm4mJm4ubnVtYmVycy5sZW5ndGg+MX1nZXRQbHVyYWxGb3Jtc09mS2V5KGUsdCl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9O3JldHVybiB0aGlzLmdldFN1ZmZpeGVzKGUsbikubWFwKChlPT5gJHt0fSR7ZX1gKSl9Z2V0U3VmZml4ZXMoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2NvbnN0IG49dGhpcy5nZXRSdWxlKGUsdCk7cmV0dXJuIG4/dGhpcy5zaG91bGRVc2VJbnRsQXBpKCk/bi5yZXNvbHZlZE9wdGlvbnMoKS5wbHVyYWxDYXRlZ29yaWVzLnNvcnQoKChlLHQpPT5IW2VdLUhbdF0pKS5tYXAoKGU9PmAke3RoaXMub3B0aW9ucy5wcmVwZW5kfSR7dC5vcmRpbmFsP2BvcmRpbmFsJHt0aGlzLm9wdGlvbnMucHJlcGVuZH1gOlwiXCJ9JHtlfWApKTpuLm51bWJlcnMubWFwKChuPT50aGlzLmdldFN1ZmZpeChlLG4sdCkpKTpbXX1nZXRTdWZmaXgoZSx0KXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307Y29uc3Qgcj10aGlzLmdldFJ1bGUoZSxuKTtyZXR1cm4gcj90aGlzLnNob3VsZFVzZUludGxBcGkoKT9gJHt0aGlzLm9wdGlvbnMucHJlcGVuZH0ke24ub3JkaW5hbD9gb3JkaW5hbCR7dGhpcy5vcHRpb25zLnByZXBlbmR9YDpcIlwifSR7ci5zZWxlY3QodCl9YDp0aGlzLmdldFN1ZmZpeFJldHJvQ29tcGF0aWJsZShyLHQpOih0aGlzLmxvZ2dlci53YXJuKGBubyBwbHVyYWwgcnVsZSBmb3VuZCBmb3I6ICR7ZX1gKSxcIlwiKX1nZXRTdWZmaXhSZXRyb0NvbXBhdGlibGUoZSx0KXtjb25zdCBuPWUubm9BYnM/ZS5wbHVyYWxzKHQpOmUucGx1cmFscyhNYXRoLmFicyh0KSk7bGV0IHI9ZS5udW1iZXJzW25dO3RoaXMub3B0aW9ucy5zaW1wbGlmeVBsdXJhbFN1ZmZpeCYmMj09PWUubnVtYmVycy5sZW5ndGgmJjE9PT1lLm51bWJlcnNbMF0mJigyPT09cj9yPVwicGx1cmFsXCI6MT09PXImJihyPVwiXCIpKTtjb25zdCBvPSgpPT50aGlzLm9wdGlvbnMucHJlcGVuZCYmci50b1N0cmluZygpP3RoaXMub3B0aW9ucy5wcmVwZW5kK3IudG9TdHJpbmcoKTpyLnRvU3RyaW5nKCk7cmV0dXJuXCJ2MVwiPT09dGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlKU09OPzE9PT1yP1wiXCI6XCJudW1iZXJcIj09dHlwZW9mIHI/YF9wbHVyYWxfJHtyLnRvU3RyaW5nKCl9YDpvKCk6XCJ2MlwiPT09dGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlKU09OfHx0aGlzLm9wdGlvbnMuc2ltcGxpZnlQbHVyYWxTdWZmaXgmJjI9PT1lLm51bWJlcnMubGVuZ3RoJiYxPT09ZS5udW1iZXJzWzBdP28oKTp0aGlzLm9wdGlvbnMucHJlcGVuZCYmbi50b1N0cmluZygpP3RoaXMub3B0aW9ucy5wcmVwZW5kK24udG9TdHJpbmcoKTpuLnRvU3RyaW5nKCl9c2hvdWxkVXNlSW50bEFwaSgpe3JldHVybiFBLmluY2x1ZGVzKHRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTil9fWZ1bmN0aW9uIFYoZSx0LG4pe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTpcIi5cIixvPSEoYXJndW1lbnRzLmxlbmd0aD40JiZ2b2lkIDAhPT1hcmd1bWVudHNbNF0pfHxhcmd1bWVudHNbNF0saT1mdW5jdGlvbihlLHQsbil7Y29uc3Qgcj1tKGUsbik7cmV0dXJuIHZvaWQgMCE9PXI/cjptKHQsbil9KGUsdCxuKTtyZXR1cm4haSYmbyYmXCJzdHJpbmdcIj09dHlwZW9mIG4mJihpPU8oZSxuLHIpLHZvaWQgMD09PWkmJihpPU8odCxuLHIpKSksaX1jbGFzcyBEe2NvbnN0cnVjdG9yKCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O3RoaXMubG9nZ2VyPXUuY3JlYXRlKFwiaW50ZXJwb2xhdG9yXCIpLHRoaXMub3B0aW9ucz1lLHRoaXMuZm9ybWF0PWUuaW50ZXJwb2xhdGlvbiYmZS5pbnRlcnBvbGF0aW9uLmZvcm1hdHx8KGU9PmUpLHRoaXMuaW5pdChlKX1pbml0KCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2UuaW50ZXJwb2xhdGlvbnx8KGUuaW50ZXJwb2xhdGlvbj17ZXNjYXBlVmFsdWU6ITB9KTtjb25zdCB0PWUuaW50ZXJwb2xhdGlvbjt0aGlzLmVzY2FwZT12b2lkIDAhPT10LmVzY2FwZT90LmVzY2FwZTpiLHRoaXMuZXNjYXBlVmFsdWU9dm9pZCAwPT09dC5lc2NhcGVWYWx1ZXx8dC5lc2NhcGVWYWx1ZSx0aGlzLnVzZVJhd1ZhbHVlVG9Fc2NhcGU9dm9pZCAwIT09dC51c2VSYXdWYWx1ZVRvRXNjYXBlJiZ0LnVzZVJhd1ZhbHVlVG9Fc2NhcGUsdGhpcy5wcmVmaXg9dC5wcmVmaXg/eSh0LnByZWZpeCk6dC5wcmVmaXhFc2NhcGVkfHxcInt7XCIsdGhpcy5zdWZmaXg9dC5zdWZmaXg/eSh0LnN1ZmZpeCk6dC5zdWZmaXhFc2NhcGVkfHxcIn19XCIsdGhpcy5mb3JtYXRTZXBhcmF0b3I9dC5mb3JtYXRTZXBhcmF0b3I/dC5mb3JtYXRTZXBhcmF0b3I6dC5mb3JtYXRTZXBhcmF0b3J8fFwiLFwiLHRoaXMudW5lc2NhcGVQcmVmaXg9dC51bmVzY2FwZVN1ZmZpeD9cIlwiOnQudW5lc2NhcGVQcmVmaXh8fFwiLVwiLHRoaXMudW5lc2NhcGVTdWZmaXg9dGhpcy51bmVzY2FwZVByZWZpeD9cIlwiOnQudW5lc2NhcGVTdWZmaXh8fFwiXCIsdGhpcy5uZXN0aW5nUHJlZml4PXQubmVzdGluZ1ByZWZpeD95KHQubmVzdGluZ1ByZWZpeCk6dC5uZXN0aW5nUHJlZml4RXNjYXBlZHx8eShcIiR0KFwiKSx0aGlzLm5lc3RpbmdTdWZmaXg9dC5uZXN0aW5nU3VmZml4P3kodC5uZXN0aW5nU3VmZml4KTp0Lm5lc3RpbmdTdWZmaXhFc2NhcGVkfHx5KFwiKVwiKSx0aGlzLm5lc3RpbmdPcHRpb25zU2VwYXJhdG9yPXQubmVzdGluZ09wdGlvbnNTZXBhcmF0b3I/dC5uZXN0aW5nT3B0aW9uc1NlcGFyYXRvcjp0Lm5lc3RpbmdPcHRpb25zU2VwYXJhdG9yfHxcIixcIix0aGlzLm1heFJlcGxhY2VzPXQubWF4UmVwbGFjZXM/dC5tYXhSZXBsYWNlczoxZTMsdGhpcy5hbHdheXNGb3JtYXQ9dm9pZCAwIT09dC5hbHdheXNGb3JtYXQmJnQuYWx3YXlzRm9ybWF0LHRoaXMucmVzZXRSZWdFeHAoKX1yZXNldCgpe3RoaXMub3B0aW9ucyYmdGhpcy5pbml0KHRoaXMub3B0aW9ucyl9cmVzZXRSZWdFeHAoKXtjb25zdCBlPShlLHQpPT5lJiZlLnNvdXJjZT09PXQ/KGUubGFzdEluZGV4PTAsZSk6bmV3IFJlZ0V4cCh0LFwiZ1wiKTt0aGlzLnJlZ2V4cD1lKHRoaXMucmVnZXhwLGAke3RoaXMucHJlZml4fSguKz8pJHt0aGlzLnN1ZmZpeH1gKSx0aGlzLnJlZ2V4cFVuZXNjYXBlPWUodGhpcy5yZWdleHBVbmVzY2FwZSxgJHt0aGlzLnByZWZpeH0ke3RoaXMudW5lc2NhcGVQcmVmaXh9KC4rPykke3RoaXMudW5lc2NhcGVTdWZmaXh9JHt0aGlzLnN1ZmZpeH1gKSx0aGlzLm5lc3RpbmdSZWdleHA9ZSh0aGlzLm5lc3RpbmdSZWdleHAsYCR7dGhpcy5uZXN0aW5nUHJlZml4fSguKz8pJHt0aGlzLm5lc3RpbmdTdWZmaXh9YCl9aW50ZXJwb2xhdGUoZSx0LG4scil7bGV0IG8saSxhO2NvbnN0IGw9dGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbiYmdGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZGVmYXVsdFZhcmlhYmxlc3x8e307ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZS5yZXBsYWNlKC9cXCQvZyxcIiQkJCRcIil9Y29uc3QgYz1lPT57aWYoZS5pbmRleE9mKHRoaXMuZm9ybWF0U2VwYXJhdG9yKTwwKXtjb25zdCBvPVYodCxsLGUsdGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcix0aGlzLm9wdGlvbnMuaWdub3JlSlNPTlN0cnVjdHVyZSk7cmV0dXJuIHRoaXMuYWx3YXlzRm9ybWF0P3RoaXMuZm9ybWF0KG8sdm9pZCAwLG4sey4uLnIsLi4udCxpbnRlcnBvbGF0aW9ua2V5OmV9KTpvfWNvbnN0IG89ZS5zcGxpdCh0aGlzLmZvcm1hdFNlcGFyYXRvciksaT1vLnNoaWZ0KCkudHJpbSgpLGE9by5qb2luKHRoaXMuZm9ybWF0U2VwYXJhdG9yKS50cmltKCk7cmV0dXJuIHRoaXMuZm9ybWF0KFYodCxsLGksdGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcix0aGlzLm9wdGlvbnMuaWdub3JlSlNPTlN0cnVjdHVyZSksYSxuLHsuLi5yLC4uLnQsaW50ZXJwb2xhdGlvbmtleTppfSl9O3RoaXMucmVzZXRSZWdFeHAoKTtjb25zdCB1PXImJnIubWlzc2luZ0ludGVycG9sYXRpb25IYW5kbGVyfHx0aGlzLm9wdGlvbnMubWlzc2luZ0ludGVycG9sYXRpb25IYW5kbGVyLGY9ciYmci5pbnRlcnBvbGF0aW9uJiZ2b2lkIDAhPT1yLmludGVycG9sYXRpb24uc2tpcE9uVmFyaWFibGVzP3IuaW50ZXJwb2xhdGlvbi5za2lwT25WYXJpYWJsZXM6dGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uc2tpcE9uVmFyaWFibGVzO3JldHVyblt7cmVnZXg6dGhpcy5yZWdleHBVbmVzY2FwZSxzYWZlVmFsdWU6ZT0+cyhlKX0se3JlZ2V4OnRoaXMucmVnZXhwLHNhZmVWYWx1ZTplPT50aGlzLmVzY2FwZVZhbHVlP3ModGhpcy5lc2NhcGUoZSkpOnMoZSl9XS5mb3JFYWNoKCh0PT57Zm9yKGE9MDtvPXQucmVnZXguZXhlYyhlKTspe2NvbnN0IG49b1sxXS50cmltKCk7aWYoaT1jKG4pLHZvaWQgMD09PWkpaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdSl7Y29uc3QgdD11KGUsbyxyKTtpPVwic3RyaW5nXCI9PXR5cGVvZiB0P3Q6XCJcIn1lbHNlIGlmKHImJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG4pKWk9XCJcIjtlbHNle2lmKGYpe2k9b1swXTtjb250aW51ZX10aGlzLmxvZ2dlci53YXJuKGBtaXNzZWQgdG8gcGFzcyBpbiB2YXJpYWJsZSAke259IGZvciBpbnRlcnBvbGF0aW5nICR7ZX1gKSxpPVwiXCJ9ZWxzZVwic3RyaW5nXCI9PXR5cGVvZiBpfHx0aGlzLnVzZVJhd1ZhbHVlVG9Fc2NhcGV8fChpPXAoaSkpO2NvbnN0IGw9dC5zYWZlVmFsdWUoaSk7aWYoZT1lLnJlcGxhY2Uob1swXSxsKSxmPyh0LnJlZ2V4Lmxhc3RJbmRleCs9aS5sZW5ndGgsdC5yZWdleC5sYXN0SW5kZXgtPW9bMF0ubGVuZ3RoKTp0LnJlZ2V4Lmxhc3RJbmRleD0wLGErKyxhPj10aGlzLm1heFJlcGxhY2VzKWJyZWFrfX0pKSxlfW5lc3QoZSx0KXtsZXQgbixyLG8saT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307ZnVuY3Rpb24gYShlLHQpe2NvbnN0IG49dGhpcy5uZXN0aW5nT3B0aW9uc1NlcGFyYXRvcjtpZihlLmluZGV4T2Yobik8MClyZXR1cm4gZTtjb25zdCByPWUuc3BsaXQobmV3IFJlZ0V4cChgJHtufVsgXSp7YCkpO2xldCBpPWB7JHtyWzFdfWA7ZT1yWzBdLGk9dGhpcy5pbnRlcnBvbGF0ZShpLG8pO2NvbnN0IGE9aS5tYXRjaCgvJy9nKSxsPWkubWF0Y2goL1wiL2cpOyhhJiZhLmxlbmd0aCUyPT0wJiYhbHx8bC5sZW5ndGglMiE9MCkmJihpPWkucmVwbGFjZSgvJy9nLCdcIicpKTt0cnl7bz1KU09OLnBhcnNlKGkpLHQmJihvPXsuLi50LC4uLm99KX1jYXRjaCh0KXtyZXR1cm4gdGhpcy5sb2dnZXIud2FybihgZmFpbGVkIHBhcnNpbmcgb3B0aW9ucyBzdHJpbmcgaW4gbmVzdGluZyBmb3Iga2V5ICR7ZX1gLHQpLGAke2V9JHtufSR7aX1gfXJldHVybiBkZWxldGUgby5kZWZhdWx0VmFsdWUsZX1mb3IoO249dGhpcy5uZXN0aW5nUmVnZXhwLmV4ZWMoZSk7KXtsZXQgbD1bXTtvPXsuLi5pfSxvPW8ucmVwbGFjZSYmXCJzdHJpbmdcIiE9dHlwZW9mIG8ucmVwbGFjZT9vLnJlcGxhY2U6byxvLmFwcGx5UG9zdFByb2Nlc3Nvcj0hMSxkZWxldGUgby5kZWZhdWx0VmFsdWU7bGV0IHM9ITE7aWYoLTEhPT1uWzBdLmluZGV4T2YodGhpcy5mb3JtYXRTZXBhcmF0b3IpJiYhL3suKn0vLnRlc3QoblsxXSkpe2NvbnN0IGU9blsxXS5zcGxpdCh0aGlzLmZvcm1hdFNlcGFyYXRvcikubWFwKChlPT5lLnRyaW0oKSkpO25bMV09ZS5zaGlmdCgpLGw9ZSxzPSEwfWlmKHI9dChhLmNhbGwodGhpcyxuWzFdLnRyaW0oKSxvKSxvKSxyJiZuWzBdPT09ZSYmXCJzdHJpbmdcIiE9dHlwZW9mIHIpcmV0dXJuIHI7XCJzdHJpbmdcIiE9dHlwZW9mIHImJihyPXAocikpLHJ8fCh0aGlzLmxvZ2dlci53YXJuKGBtaXNzZWQgdG8gcmVzb2x2ZSAke25bMV19IGZvciBuZXN0aW5nICR7ZX1gKSxyPVwiXCIpLHMmJihyPWwucmVkdWNlKCgoZSx0KT0+dGhpcy5mb3JtYXQoZSx0LGkubG5nLHsuLi5pLGludGVycG9sYXRpb25rZXk6blsxXS50cmltKCl9KSksci50cmltKCkpKSxlPWUucmVwbGFjZShuWzBdLHIpLHRoaXMucmVnZXhwLmxhc3RJbmRleD0wfXJldHVybiBlfX1mdW5jdGlvbiBaKGUpe2NvbnN0IHQ9e307cmV0dXJuIGZ1bmN0aW9uKG4scixvKXtjb25zdCBpPXIrSlNPTi5zdHJpbmdpZnkobyk7bGV0IGE9dFtpXTtyZXR1cm4gYXx8KGE9ZShMKHIpLG8pLHRbaV09YSksYShuKX19Y2xhc3MgJHtjb25zdHJ1Y3Rvcigpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTt0aGlzLmxvZ2dlcj11LmNyZWF0ZShcImZvcm1hdHRlclwiKSx0aGlzLm9wdGlvbnM9ZSx0aGlzLmZvcm1hdHM9e251bWJlcjpaKCgoZSx0KT0+e2NvbnN0IG49bmV3IEludGwuTnVtYmVyRm9ybWF0KGUsey4uLnR9KTtyZXR1cm4gZT0+bi5mb3JtYXQoZSl9KSksY3VycmVuY3k6WigoKGUsdCk9Pntjb25zdCBuPW5ldyBJbnRsLk51bWJlckZvcm1hdChlLHsuLi50LHN0eWxlOlwiY3VycmVuY3lcIn0pO3JldHVybiBlPT5uLmZvcm1hdChlKX0pKSxkYXRldGltZTpaKCgoZSx0KT0+e2NvbnN0IG49bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoZSx7Li4udH0pO3JldHVybiBlPT5uLmZvcm1hdChlKX0pKSxyZWxhdGl2ZXRpbWU6WigoKGUsdCk9Pntjb25zdCBuPW5ldyBJbnRsLlJlbGF0aXZlVGltZUZvcm1hdChlLHsuLi50fSk7cmV0dXJuIGU9Pm4uZm9ybWF0KGUsdC5yYW5nZXx8XCJkYXlcIil9KSksbGlzdDpaKCgoZSx0KT0+e2NvbnN0IG49bmV3IEludGwuTGlzdEZvcm1hdChlLHsuLi50fSk7cmV0dXJuIGU9Pm4uZm9ybWF0KGUpfSkpfSx0aGlzLmluaXQoZSl9aW5pdChlKXtjb25zdCB0PShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e2ludGVycG9sYXRpb246e319KS5pbnRlcnBvbGF0aW9uO3RoaXMuZm9ybWF0U2VwYXJhdG9yPXQuZm9ybWF0U2VwYXJhdG9yP3QuZm9ybWF0U2VwYXJhdG9yOnQuZm9ybWF0U2VwYXJhdG9yfHxcIixcIn1hZGQoZSx0KXt0aGlzLmZvcm1hdHNbZS50b0xvd2VyQ2FzZSgpLnRyaW0oKV09dH1hZGRDYWNoZWQoZSx0KXt0aGlzLmZvcm1hdHNbZS50b0xvd2VyQ2FzZSgpLnRyaW0oKV09Wih0KX1mb3JtYXQoZSx0LG4pe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTp7fTtyZXR1cm4gdC5zcGxpdCh0aGlzLmZvcm1hdFNlcGFyYXRvcikucmVkdWNlKCgoZSx0KT0+e2NvbnN0e2Zvcm1hdE5hbWU6byxmb3JtYXRPcHRpb25zOml9PWZ1bmN0aW9uKGUpe2xldCB0PWUudG9Mb3dlckNhc2UoKS50cmltKCk7Y29uc3Qgbj17fTtpZihlLmluZGV4T2YoXCIoXCIpPi0xKXtjb25zdCByPWUuc3BsaXQoXCIoXCIpO3Q9clswXS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtjb25zdCBvPXJbMV0uc3Vic3RyaW5nKDAsclsxXS5sZW5ndGgtMSk7XCJjdXJyZW5jeVwiPT09dCYmby5pbmRleE9mKFwiOlwiKTwwP24uY3VycmVuY3l8fChuLmN1cnJlbmN5PW8udHJpbSgpKTpcInJlbGF0aXZldGltZVwiPT09dCYmby5pbmRleE9mKFwiOlwiKTwwP24ucmFuZ2V8fChuLnJhbmdlPW8udHJpbSgpKTpvLnNwbGl0KFwiO1wiKS5mb3JFYWNoKChlPT57aWYoIWUpcmV0dXJuO2NvbnN0W3QsLi4ucl09ZS5zcGxpdChcIjpcIiksbz1yLmpvaW4oXCI6XCIpLnRyaW0oKS5yZXBsYWNlKC9eJyt8JyskL2csXCJcIik7blt0LnRyaW0oKV18fChuW3QudHJpbSgpXT1vKSxcImZhbHNlXCI9PT1vJiYoblt0LnRyaW0oKV09ITEpLFwidHJ1ZVwiPT09byYmKG5bdC50cmltKCldPSEwKSxpc05hTihvKXx8KG5bdC50cmltKCldPXBhcnNlSW50KG8sMTApKX0pKX1yZXR1cm57Zm9ybWF0TmFtZTp0LGZvcm1hdE9wdGlvbnM6bn19KHQpO2lmKHRoaXMuZm9ybWF0c1tvXSl7bGV0IHQ9ZTt0cnl7Y29uc3QgYT1yJiZyLmZvcm1hdFBhcmFtcyYmci5mb3JtYXRQYXJhbXNbci5pbnRlcnBvbGF0aW9ua2V5XXx8e30sbD1hLmxvY2FsZXx8YS5sbmd8fHIubG9jYWxlfHxyLmxuZ3x8bjt0PXRoaXMuZm9ybWF0c1tvXShlLGwsey4uLmksLi4uciwuLi5hfSl9Y2F0Y2goZSl7dGhpcy5sb2dnZXIud2FybihlKX1yZXR1cm4gdH1yZXR1cm4gdGhpcy5sb2dnZXIud2FybihgdGhlcmUgd2FzIG5vIGZvcm1hdCBmdW5jdGlvbiBmb3IgJHtvfWApLGV9KSxlKX19Y2xhc3MgTiBleHRlbmRzIGZ7Y29uc3RydWN0b3IoZSx0LG4pe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTp7fTtzdXBlcigpLHRoaXMuYmFja2VuZD1lLHRoaXMuc3RvcmU9dCx0aGlzLnNlcnZpY2VzPW4sdGhpcy5sYW5ndWFnZVV0aWxzPW4ubGFuZ3VhZ2VVdGlscyx0aGlzLm9wdGlvbnM9cix0aGlzLmxvZ2dlcj11LmNyZWF0ZShcImJhY2tlbmRDb25uZWN0b3JcIiksdGhpcy53YWl0aW5nUmVhZHM9W10sdGhpcy5tYXhQYXJhbGxlbFJlYWRzPXIubWF4UGFyYWxsZWxSZWFkc3x8MTAsdGhpcy5yZWFkaW5nQ2FsbHM9MCx0aGlzLm1heFJldHJpZXM9ci5tYXhSZXRyaWVzPj0wP3IubWF4UmV0cmllczo1LHRoaXMucmV0cnlUaW1lb3V0PXIucmV0cnlUaW1lb3V0Pj0xP3IucmV0cnlUaW1lb3V0OjM1MCx0aGlzLnN0YXRlPXt9LHRoaXMucXVldWU9W10sdGhpcy5iYWNrZW5kJiZ0aGlzLmJhY2tlbmQuaW5pdCYmdGhpcy5iYWNrZW5kLmluaXQobixyLmJhY2tlbmQscil9cXVldWVMb2FkKGUsdCxuLHIpe2NvbnN0IG89e30saT17fSxhPXt9LGw9e307cmV0dXJuIGUuZm9yRWFjaCgoZT0+e2xldCByPSEwO3QuZm9yRWFjaCgodD0+e2NvbnN0IGE9YCR7ZX18JHt0fWA7IW4ucmVsb2FkJiZ0aGlzLnN0b3JlLmhhc1Jlc291cmNlQnVuZGxlKGUsdCk/dGhpcy5zdGF0ZVthXT0yOnRoaXMuc3RhdGVbYV08MHx8KDE9PT10aGlzLnN0YXRlW2FdP3ZvaWQgMD09PWlbYV0mJihpW2FdPSEwKToodGhpcy5zdGF0ZVthXT0xLHI9ITEsdm9pZCAwPT09aVthXSYmKGlbYV09ITApLHZvaWQgMD09PW9bYV0mJihvW2FdPSEwKSx2b2lkIDA9PT1sW3RdJiYobFt0XT0hMCkpKX0pKSxyfHwoYVtlXT0hMCl9KSksKE9iamVjdC5rZXlzKG8pLmxlbmd0aHx8T2JqZWN0LmtleXMoaSkubGVuZ3RoKSYmdGhpcy5xdWV1ZS5wdXNoKHtwZW5kaW5nOmkscGVuZGluZ0NvdW50Ok9iamVjdC5rZXlzKGkpLmxlbmd0aCxsb2FkZWQ6e30sZXJyb3JzOltdLGNhbGxiYWNrOnJ9KSx7dG9Mb2FkOk9iamVjdC5rZXlzKG8pLHBlbmRpbmc6T2JqZWN0LmtleXMoaSksdG9Mb2FkTGFuZ3VhZ2VzOk9iamVjdC5rZXlzKGEpLHRvTG9hZE5hbWVzcGFjZXM6T2JqZWN0LmtleXMobCl9fWxvYWRlZChlLHQsbil7Y29uc3Qgcj1lLnNwbGl0KFwifFwiKSxvPXJbMF0saT1yWzFdO3QmJnRoaXMuZW1pdChcImZhaWxlZExvYWRpbmdcIixvLGksdCksbiYmdGhpcy5zdG9yZS5hZGRSZXNvdXJjZUJ1bmRsZShvLGksbiksdGhpcy5zdGF0ZVtlXT10Py0xOjI7Y29uc3QgYT17fTt0aGlzLnF1ZXVlLmZvckVhY2goKG49PnshZnVuY3Rpb24oZSx0LG4scil7Y29uc3R7b2JqOm8sazppfT1nKGUsdCxPYmplY3QpO29baV09b1tpXXx8W10sciYmKG9baV09b1tpXS5jb25jYXQobikpLHJ8fG9baV0ucHVzaChuKX0obi5sb2FkZWQsW29dLGkpLGZ1bmN0aW9uKGUsdCl7dm9pZCAwIT09ZS5wZW5kaW5nW3RdJiYoZGVsZXRlIGUucGVuZGluZ1t0XSxlLnBlbmRpbmdDb3VudC0tKX0obixlKSx0JiZuLmVycm9ycy5wdXNoKHQpLDAhPT1uLnBlbmRpbmdDb3VudHx8bi5kb25lfHwoT2JqZWN0LmtleXMobi5sb2FkZWQpLmZvckVhY2goKGU9PnthW2VdfHwoYVtlXT17fSk7Y29uc3QgdD1uLmxvYWRlZFtlXTt0Lmxlbmd0aCYmdC5mb3JFYWNoKCh0PT57dm9pZCAwPT09YVtlXVt0XSYmKGFbZV1bdF09ITApfSkpfSkpLG4uZG9uZT0hMCxuLmVycm9ycy5sZW5ndGg/bi5jYWxsYmFjayhuLmVycm9ycyk6bi5jYWxsYmFjaygpKX0pKSx0aGlzLmVtaXQoXCJsb2FkZWRcIixhKSx0aGlzLnF1ZXVlPXRoaXMucXVldWUuZmlsdGVyKChlPT4hZS5kb25lKSl9cmVhZChlLHQsbil7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOjAsbz1hcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XT9hcmd1bWVudHNbNF06dGhpcy5yZXRyeVRpbWVvdXQsaT1hcmd1bWVudHMubGVuZ3RoPjU/YXJndW1lbnRzWzVdOnZvaWQgMDtpZighZS5sZW5ndGgpcmV0dXJuIGkobnVsbCx7fSk7aWYodGhpcy5yZWFkaW5nQ2FsbHM+PXRoaXMubWF4UGFyYWxsZWxSZWFkcylyZXR1cm4gdm9pZCB0aGlzLndhaXRpbmdSZWFkcy5wdXNoKHtsbmc6ZSxuczp0LGZjTmFtZTpuLHRyaWVkOnIsd2FpdDpvLGNhbGxiYWNrOml9KTt0aGlzLnJlYWRpbmdDYWxscysrO2NvbnN0IGE9KGEsbCk9PntpZih0aGlzLnJlYWRpbmdDYWxscy0tLHRoaXMud2FpdGluZ1JlYWRzLmxlbmd0aD4wKXtjb25zdCBlPXRoaXMud2FpdGluZ1JlYWRzLnNoaWZ0KCk7dGhpcy5yZWFkKGUubG5nLGUubnMsZS5mY05hbWUsZS50cmllZCxlLndhaXQsZS5jYWxsYmFjayl9YSYmbCYmcjx0aGlzLm1heFJldHJpZXM/c2V0VGltZW91dCgoKCk9Pnt0aGlzLnJlYWQuY2FsbCh0aGlzLGUsdCxuLHIrMSwyKm8saSl9KSxvKTppKGEsbCl9LGw9dGhpcy5iYWNrZW5kW25dLmJpbmQodGhpcy5iYWNrZW5kKTtpZigyIT09bC5sZW5ndGgpcmV0dXJuIGwoZSx0LGEpO3RyeXtjb25zdCBuPWwoZSx0KTtuJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLnRoZW4/bi50aGVuKChlPT5hKG51bGwsZSkpKS5jYXRjaChhKTphKG51bGwsbil9Y2F0Y2goZSl7YShlKX19cHJlcGFyZUxvYWRpbmcoZSx0KXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e30scj1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMDtpZighdGhpcy5iYWNrZW5kKXJldHVybiB0aGlzLmxvZ2dlci53YXJuKFwiTm8gYmFja2VuZCB3YXMgYWRkZWQgdmlhIGkxOG5leHQudXNlLiBXaWxsIG5vdCBsb2FkIHJlc291cmNlcy5cIiksciYmcigpO1wic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT10aGlzLmxhbmd1YWdlVXRpbHMudG9SZXNvbHZlSGllcmFyY2h5KGUpKSxcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9W3RdKTtjb25zdCBvPXRoaXMucXVldWVMb2FkKGUsdCxuLHIpO2lmKCFvLnRvTG9hZC5sZW5ndGgpcmV0dXJuIG8ucGVuZGluZy5sZW5ndGh8fHIoKSxudWxsO28udG9Mb2FkLmZvckVhY2goKGU9Pnt0aGlzLmxvYWRPbmUoZSl9KSl9bG9hZChlLHQsbil7dGhpcy5wcmVwYXJlTG9hZGluZyhlLHQse30sbil9cmVsb2FkKGUsdCxuKXt0aGlzLnByZXBhcmVMb2FkaW5nKGUsdCx7cmVsb2FkOiEwfSxuKX1sb2FkT25lKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpcIlwiO2NvbnN0IG49ZS5zcGxpdChcInxcIikscj1uWzBdLG89blsxXTt0aGlzLnJlYWQocixvLFwicmVhZFwiLHZvaWQgMCx2b2lkIDAsKChuLGkpPT57biYmdGhpcy5sb2dnZXIud2FybihgJHt0fWxvYWRpbmcgbmFtZXNwYWNlICR7b30gZm9yIGxhbmd1YWdlICR7cn0gZmFpbGVkYCxuKSwhbiYmaSYmdGhpcy5sb2dnZXIubG9nKGAke3R9bG9hZGVkIG5hbWVzcGFjZSAke299IGZvciBsYW5ndWFnZSAke3J9YCxpKSx0aGlzLmxvYWRlZChlLG4saSl9KSl9c2F2ZU1pc3NpbmcoZSx0LG4scixvKXtsZXQgaT1hcmd1bWVudHMubGVuZ3RoPjUmJnZvaWQgMCE9PWFyZ3VtZW50c1s1XT9hcmd1bWVudHNbNV06e30sYT1hcmd1bWVudHMubGVuZ3RoPjYmJnZvaWQgMCE9PWFyZ3VtZW50c1s2XT9hcmd1bWVudHNbNl06KCk9Pnt9O2lmKHRoaXMuc2VydmljZXMudXRpbHMmJnRoaXMuc2VydmljZXMudXRpbHMuaGFzTG9hZGVkTmFtZXNwYWNlJiYhdGhpcy5zZXJ2aWNlcy51dGlscy5oYXNMb2FkZWROYW1lc3BhY2UodCkpdGhpcy5sb2dnZXIud2FybihgZGlkIG5vdCBzYXZlIGtleSBcIiR7bn1cIiBhcyB0aGUgbmFtZXNwYWNlIFwiJHt0fVwiIHdhcyBub3QgeWV0IGxvYWRlZGAsXCJUaGlzIG1lYW5zIHNvbWV0aGluZyBJUyBXUk9ORyBpbiB5b3VyIHNldHVwLiBZb3UgYWNjZXNzIHRoZSB0IGZ1bmN0aW9uIGJlZm9yZSBpMThuZXh0LmluaXQgLyBpMThuZXh0LmxvYWROYW1lc3BhY2UgLyBpMThuZXh0LmNoYW5nZUxhbmd1YWdlIHdhcyBkb25lLiBXYWl0IGZvciB0aGUgY2FsbGJhY2sgb3IgUHJvbWlzZSB0byByZXNvbHZlIGJlZm9yZSBhY2Nlc3NpbmcgaXQhISFcIik7ZWxzZSBpZihudWxsIT1uJiZcIlwiIT09bil7aWYodGhpcy5iYWNrZW5kJiZ0aGlzLmJhY2tlbmQuY3JlYXRlKXtjb25zdCBsPXsuLi5pLGlzVXBkYXRlOm99LHM9dGhpcy5iYWNrZW5kLmNyZWF0ZS5iaW5kKHRoaXMuYmFja2VuZCk7aWYocy5sZW5ndGg8Nil0cnl7bGV0IG87bz01PT09cy5sZW5ndGg/cyhlLHQsbixyLGwpOnMoZSx0LG4sciksbyYmXCJmdW5jdGlvblwiPT10eXBlb2Ygby50aGVuP28udGhlbigoZT0+YShudWxsLGUpKSkuY2F0Y2goYSk6YShudWxsLG8pfWNhdGNoKGUpe2EoZSl9ZWxzZSBzKGUsdCxuLHIsYSxsKX1lJiZlWzBdJiZ0aGlzLnN0b3JlLmFkZFJlc291cmNlKGVbMF0sdCxuLHIpfX19ZnVuY3Rpb24gRigpe3JldHVybntkZWJ1ZzohMSxpbml0SW1tZWRpYXRlOiEwLG5zOltcInRyYW5zbGF0aW9uXCJdLGRlZmF1bHROUzpbXCJ0cmFuc2xhdGlvblwiXSxmYWxsYmFja0xuZzpbXCJkZXZcIl0sZmFsbGJhY2tOUzohMSxzdXBwb3J0ZWRMbmdzOiExLG5vbkV4cGxpY2l0U3VwcG9ydGVkTG5nczohMSxsb2FkOlwiYWxsXCIscHJlbG9hZDohMSxzaW1wbGlmeVBsdXJhbFN1ZmZpeDohMCxrZXlTZXBhcmF0b3I6XCIuXCIsbnNTZXBhcmF0b3I6XCI6XCIscGx1cmFsU2VwYXJhdG9yOlwiX1wiLGNvbnRleHRTZXBhcmF0b3I6XCJfXCIscGFydGlhbEJ1bmRsZWRMYW5ndWFnZXM6ITEsc2F2ZU1pc3Npbmc6ITEsdXBkYXRlTWlzc2luZzohMSxzYXZlTWlzc2luZ1RvOlwiZmFsbGJhY2tcIixzYXZlTWlzc2luZ1BsdXJhbHM6ITAsbWlzc2luZ0tleUhhbmRsZXI6ITEsbWlzc2luZ0ludGVycG9sYXRpb25IYW5kbGVyOiExLHBvc3RQcm9jZXNzOiExLHBvc3RQcm9jZXNzUGFzc1Jlc29sdmVkOiExLHJldHVybk51bGw6ITEscmV0dXJuRW1wdHlTdHJpbmc6ITAscmV0dXJuT2JqZWN0czohMSxqb2luQXJyYXlzOiExLHJldHVybmVkT2JqZWN0SGFuZGxlcjohMSxwYXJzZU1pc3NpbmdLZXlIYW5kbGVyOiExLGFwcGVuZE5hbWVzcGFjZVRvTWlzc2luZ0tleTohMSxhcHBlbmROYW1lc3BhY2VUb0NJTW9kZTohMSxvdmVybG9hZFRyYW5zbGF0aW9uT3B0aW9uSGFuZGxlcjpmdW5jdGlvbihlKXtsZXQgdD17fTtpZihcIm9iamVjdFwiPT10eXBlb2YgZVsxXSYmKHQ9ZVsxXSksXCJzdHJpbmdcIj09dHlwZW9mIGVbMV0mJih0LmRlZmF1bHRWYWx1ZT1lWzFdKSxcInN0cmluZ1wiPT10eXBlb2YgZVsyXSYmKHQudERlc2NyaXB0aW9uPWVbMl0pLFwib2JqZWN0XCI9PXR5cGVvZiBlWzJdfHxcIm9iamVjdFwiPT10eXBlb2YgZVszXSl7Y29uc3Qgbj1lWzNdfHxlWzJdO09iamVjdC5rZXlzKG4pLmZvckVhY2goKGU9Pnt0W2VdPW5bZV19KSl9cmV0dXJuIHR9LGludGVycG9sYXRpb246e2VzY2FwZVZhbHVlOiEwLGZvcm1hdDplPT5lLHByZWZpeDpcInt7XCIsc3VmZml4OlwifX1cIixmb3JtYXRTZXBhcmF0b3I6XCIsXCIsdW5lc2NhcGVQcmVmaXg6XCItXCIsbmVzdGluZ1ByZWZpeDpcIiR0KFwiLG5lc3RpbmdTdWZmaXg6XCIpXCIsbmVzdGluZ09wdGlvbnNTZXBhcmF0b3I6XCIsXCIsbWF4UmVwbGFjZXM6MWUzLHNraXBPblZhcmlhYmxlczohMH19fWZ1bmN0aW9uIFUoZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUubnMmJihlLm5zPVtlLm5zXSksXCJzdHJpbmdcIj09dHlwZW9mIGUuZmFsbGJhY2tMbmcmJihlLmZhbGxiYWNrTG5nPVtlLmZhbGxiYWNrTG5nXSksXCJzdHJpbmdcIj09dHlwZW9mIGUuZmFsbGJhY2tOUyYmKGUuZmFsbGJhY2tOUz1bZS5mYWxsYmFja05TXSksZS5zdXBwb3J0ZWRMbmdzJiZlLnN1cHBvcnRlZExuZ3MuaW5kZXhPZihcImNpbW9kZVwiKTwwJiYoZS5zdXBwb3J0ZWRMbmdzPWUuc3VwcG9ydGVkTG5ncy5jb25jYXQoW1wiY2ltb2RlXCJdKSksZX1mdW5jdGlvbiBXKCl7fWNsYXNzIHogZXh0ZW5kcyBme2NvbnN0cnVjdG9yKCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDA7dmFyIG47aWYoc3VwZXIoKSx0aGlzLm9wdGlvbnM9VShlKSx0aGlzLnNlcnZpY2VzPXt9LHRoaXMubG9nZ2VyPXUsdGhpcy5tb2R1bGVzPXtleHRlcm5hbDpbXX0sbj10aGlzLE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE9iamVjdC5nZXRQcm90b3R5cGVPZihuKSkuZm9yRWFjaCgoZT0+e1wiZnVuY3Rpb25cIj09dHlwZW9mIG5bZV0mJihuW2VdPW5bZV0uYmluZChuKSl9KSksdCYmIXRoaXMuaXNJbml0aWFsaXplZCYmIWUuaXNDbG9uZSl7aWYoIXRoaXMub3B0aW9ucy5pbml0SW1tZWRpYXRlKXJldHVybiB0aGlzLmluaXQoZSx0KSx0aGlzO3NldFRpbWVvdXQoKCgpPT57dGhpcy5pbml0KGUsdCl9KSwwKX19aW5pdCgpe3ZhciBlPXRoaXM7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LG49YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDA7XCJmdW5jdGlvblwiPT10eXBlb2YgdCYmKG49dCx0PXt9KSwhdC5kZWZhdWx0TlMmJiExIT09dC5kZWZhdWx0TlMmJnQubnMmJihcInN0cmluZ1wiPT10eXBlb2YgdC5ucz90LmRlZmF1bHROUz10Lm5zOnQubnMuaW5kZXhPZihcInRyYW5zbGF0aW9uXCIpPDAmJih0LmRlZmF1bHROUz10Lm5zWzBdKSk7Y29uc3Qgcj1GKCk7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZT9cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP25ldyBlOmU6bnVsbH1pZih0aGlzLm9wdGlvbnM9ey4uLnIsLi4udGhpcy5vcHRpb25zLC4uLlUodCl9LFwidjFcIiE9PXRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5QVBJJiYodGhpcy5vcHRpb25zLmludGVycG9sYXRpb249ey4uLnIuaW50ZXJwb2xhdGlvbiwuLi50aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbn0pLHZvaWQgMCE9PXQua2V5U2VwYXJhdG9yJiYodGhpcy5vcHRpb25zLnVzZXJEZWZpbmVkS2V5U2VwYXJhdG9yPXQua2V5U2VwYXJhdG9yKSx2b2lkIDAhPT10Lm5zU2VwYXJhdG9yJiYodGhpcy5vcHRpb25zLnVzZXJEZWZpbmVkTnNTZXBhcmF0b3I9dC5uc1NlcGFyYXRvciksIXRoaXMub3B0aW9ucy5pc0Nsb25lKXtsZXQgdDt0aGlzLm1vZHVsZXMubG9nZ2VyP3UuaW5pdChvKHRoaXMubW9kdWxlcy5sb2dnZXIpLHRoaXMub3B0aW9ucyk6dS5pbml0KG51bGwsdGhpcy5vcHRpb25zKSx0aGlzLm1vZHVsZXMuZm9ybWF0dGVyP3Q9dGhpcy5tb2R1bGVzLmZvcm1hdHRlcjpcInVuZGVmaW5lZFwiIT10eXBlb2YgSW50bCYmKHQ9JCk7Y29uc3Qgbj1uZXcgUih0aGlzLm9wdGlvbnMpO3RoaXMuc3RvcmU9bmV3IEUodGhpcy5vcHRpb25zLnJlc291cmNlcyx0aGlzLm9wdGlvbnMpO2NvbnN0IGk9dGhpcy5zZXJ2aWNlcztpLmxvZ2dlcj11LGkucmVzb3VyY2VTdG9yZT10aGlzLnN0b3JlLGkubGFuZ3VhZ2VVdGlscz1uLGkucGx1cmFsUmVzb2x2ZXI9bmV3IEIobix7cHJlcGVuZDp0aGlzLm9wdGlvbnMucGx1cmFsU2VwYXJhdG9yLGNvbXBhdGliaWxpdHlKU09OOnRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTixzaW1wbGlmeVBsdXJhbFN1ZmZpeDp0aGlzLm9wdGlvbnMuc2ltcGxpZnlQbHVyYWxTdWZmaXh9KSwhdHx8dGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZm9ybWF0JiZ0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5mb3JtYXQhPT1yLmludGVycG9sYXRpb24uZm9ybWF0fHwoaS5mb3JtYXR0ZXI9byh0KSxpLmZvcm1hdHRlci5pbml0KGksdGhpcy5vcHRpb25zKSx0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5mb3JtYXQ9aS5mb3JtYXR0ZXIuZm9ybWF0LmJpbmQoaS5mb3JtYXR0ZXIpKSxpLmludGVycG9sYXRvcj1uZXcgRCh0aGlzLm9wdGlvbnMpLGkudXRpbHM9e2hhc0xvYWRlZE5hbWVzcGFjZTp0aGlzLmhhc0xvYWRlZE5hbWVzcGFjZS5iaW5kKHRoaXMpfSxpLmJhY2tlbmRDb25uZWN0b3I9bmV3IE4obyh0aGlzLm1vZHVsZXMuYmFja2VuZCksaS5yZXNvdXJjZVN0b3JlLGksdGhpcy5vcHRpb25zKSxpLmJhY2tlbmRDb25uZWN0b3Iub24oXCIqXCIsKGZ1bmN0aW9uKHQpe2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KG4+MT9uLTE6MCksbz0xO288bjtvKyspcltvLTFdPWFyZ3VtZW50c1tvXTtlLmVtaXQodCwuLi5yKX0pKSx0aGlzLm1vZHVsZXMubGFuZ3VhZ2VEZXRlY3RvciYmKGkubGFuZ3VhZ2VEZXRlY3Rvcj1vKHRoaXMubW9kdWxlcy5sYW5ndWFnZURldGVjdG9yKSxpLmxhbmd1YWdlRGV0ZWN0b3IuaW5pdCYmaS5sYW5ndWFnZURldGVjdG9yLmluaXQoaSx0aGlzLm9wdGlvbnMuZGV0ZWN0aW9uLHRoaXMub3B0aW9ucykpLHRoaXMubW9kdWxlcy5pMThuRm9ybWF0JiYoaS5pMThuRm9ybWF0PW8odGhpcy5tb2R1bGVzLmkxOG5Gb3JtYXQpLGkuaTE4bkZvcm1hdC5pbml0JiZpLmkxOG5Gb3JtYXQuaW5pdCh0aGlzKSksdGhpcy50cmFuc2xhdG9yPW5ldyBNKHRoaXMuc2VydmljZXMsdGhpcy5vcHRpb25zKSx0aGlzLnRyYW5zbGF0b3Iub24oXCIqXCIsKGZ1bmN0aW9uKHQpe2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KG4+MT9uLTE6MCksbz0xO288bjtvKyspcltvLTFdPWFyZ3VtZW50c1tvXTtlLmVtaXQodCwuLi5yKX0pKSx0aGlzLm1vZHVsZXMuZXh0ZXJuYWwuZm9yRWFjaCgoZT0+e2UuaW5pdCYmZS5pbml0KHRoaXMpfSkpfWlmKHRoaXMuZm9ybWF0PXRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmZvcm1hdCxufHwobj1XKSx0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcmJiF0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3ImJiF0aGlzLm9wdGlvbnMubG5nKXtjb25zdCBlPXRoaXMuc2VydmljZXMubGFuZ3VhZ2VVdGlscy5nZXRGYWxsYmFja0NvZGVzKHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZyk7ZS5sZW5ndGg+MCYmXCJkZXZcIiE9PWVbMF0mJih0aGlzLm9wdGlvbnMubG5nPWVbMF0pfXRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvcnx8dGhpcy5vcHRpb25zLmxuZ3x8dGhpcy5sb2dnZXIud2FybihcImluaXQ6IG5vIGxhbmd1YWdlRGV0ZWN0b3IgaXMgdXNlZCBhbmQgbm8gbG5nIGlzIGRlZmluZWRcIik7W1wiZ2V0UmVzb3VyY2VcIixcImhhc1Jlc291cmNlQnVuZGxlXCIsXCJnZXRSZXNvdXJjZUJ1bmRsZVwiLFwiZ2V0RGF0YUJ5TGFuZ3VhZ2VcIl0uZm9yRWFjaCgodD0+e3RoaXNbdF09ZnVuY3Rpb24oKXtyZXR1cm4gZS5zdG9yZVt0XSguLi5hcmd1bWVudHMpfX0pKTtbXCJhZGRSZXNvdXJjZVwiLFwiYWRkUmVzb3VyY2VzXCIsXCJhZGRSZXNvdXJjZUJ1bmRsZVwiLFwicmVtb3ZlUmVzb3VyY2VCdW5kbGVcIl0uZm9yRWFjaCgodD0+e3RoaXNbdF09ZnVuY3Rpb24oKXtyZXR1cm4gZS5zdG9yZVt0XSguLi5hcmd1bWVudHMpLGV9fSkpO2NvbnN0IGk9ZCgpLGE9KCk9Pntjb25zdCBlPShlLHQpPT57dGhpcy5pc0luaXRpYWxpemVkJiYhdGhpcy5pbml0aWFsaXplZFN0b3JlT25jZSYmdGhpcy5sb2dnZXIud2FybihcImluaXQ6IGkxOG5leHQgaXMgYWxyZWFkeSBpbml0aWFsaXplZC4gWW91IHNob3VsZCBjYWxsIGluaXQganVzdCBvbmNlIVwiKSx0aGlzLmlzSW5pdGlhbGl6ZWQ9ITAsdGhpcy5vcHRpb25zLmlzQ2xvbmV8fHRoaXMubG9nZ2VyLmxvZyhcImluaXRpYWxpemVkXCIsdGhpcy5vcHRpb25zKSx0aGlzLmVtaXQoXCJpbml0aWFsaXplZFwiLHRoaXMub3B0aW9ucyksaS5yZXNvbHZlKHQpLG4oZSx0KX07aWYodGhpcy5sYW5ndWFnZXMmJlwidjFcIiE9PXRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5QVBJJiYhdGhpcy5pc0luaXRpYWxpemVkKXJldHVybiBlKG51bGwsdGhpcy50LmJpbmQodGhpcykpO3RoaXMuY2hhbmdlTGFuZ3VhZ2UodGhpcy5vcHRpb25zLmxuZyxlKX07cmV0dXJuIHRoaXMub3B0aW9ucy5yZXNvdXJjZXN8fCF0aGlzLm9wdGlvbnMuaW5pdEltbWVkaWF0ZT9hKCk6c2V0VGltZW91dChhLDApLGl9bG9hZFJlc291cmNlcyhlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Vztjb25zdCBuPVwic3RyaW5nXCI9PXR5cGVvZiBlP2U6dGhpcy5sYW5ndWFnZTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiYodD1lKSwhdGhpcy5vcHRpb25zLnJlc291cmNlc3x8dGhpcy5vcHRpb25zLnBhcnRpYWxCdW5kbGVkTGFuZ3VhZ2VzKXtpZihuJiZcImNpbW9kZVwiPT09bi50b0xvd2VyQ2FzZSgpJiYoIXRoaXMub3B0aW9ucy5wcmVsb2FkfHwwPT09dGhpcy5vcHRpb25zLnByZWxvYWQubGVuZ3RoKSlyZXR1cm4gdCgpO2NvbnN0IGU9W10scj10PT57aWYoIXQpcmV0dXJuO2lmKFwiY2ltb2RlXCI9PT10KXJldHVybjt0aGlzLnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMudG9SZXNvbHZlSGllcmFyY2h5KHQpLmZvckVhY2goKHQ9PntcImNpbW9kZVwiIT09dCYmZS5pbmRleE9mKHQpPDAmJmUucHVzaCh0KX0pKX07aWYobilyKG4pO2Vsc2V7dGhpcy5zZXJ2aWNlcy5sYW5ndWFnZVV0aWxzLmdldEZhbGxiYWNrQ29kZXModGhpcy5vcHRpb25zLmZhbGxiYWNrTG5nKS5mb3JFYWNoKChlPT5yKGUpKSl9dGhpcy5vcHRpb25zLnByZWxvYWQmJnRoaXMub3B0aW9ucy5wcmVsb2FkLmZvckVhY2goKGU9PnIoZSkpKSx0aGlzLnNlcnZpY2VzLmJhY2tlbmRDb25uZWN0b3IubG9hZChlLHRoaXMub3B0aW9ucy5ucywoZT0+e2V8fHRoaXMucmVzb2x2ZWRMYW5ndWFnZXx8IXRoaXMubGFuZ3VhZ2V8fHRoaXMuc2V0UmVzb2x2ZWRMYW5ndWFnZSh0aGlzLmxhbmd1YWdlKSx0KGUpfSkpfWVsc2UgdChudWxsKX1yZWxvYWRSZXNvdXJjZXMoZSx0LG4pe2NvbnN0IHI9ZCgpO3JldHVybiBlfHwoZT10aGlzLmxhbmd1YWdlcyksdHx8KHQ9dGhpcy5vcHRpb25zLm5zKSxufHwobj1XKSx0aGlzLnNlcnZpY2VzLmJhY2tlbmRDb25uZWN0b3IucmVsb2FkKGUsdCwoZT0+e3IucmVzb2x2ZSgpLG4oZSl9KSkscn11c2UoZSl7aWYoIWUpdGhyb3cgbmV3IEVycm9yKFwiWW91IGFyZSBwYXNzaW5nIGFuIHVuZGVmaW5lZCBtb2R1bGUhIFBsZWFzZSBjaGVjayB0aGUgb2JqZWN0IHlvdSBhcmUgcGFzc2luZyB0byBpMThuZXh0LnVzZSgpXCIpO2lmKCFlLnR5cGUpdGhyb3cgbmV3IEVycm9yKFwiWW91IGFyZSBwYXNzaW5nIGEgd3JvbmcgbW9kdWxlISBQbGVhc2UgY2hlY2sgdGhlIG9iamVjdCB5b3UgYXJlIHBhc3NpbmcgdG8gaTE4bmV4dC51c2UoKVwiKTtyZXR1cm5cImJhY2tlbmRcIj09PWUudHlwZSYmKHRoaXMubW9kdWxlcy5iYWNrZW5kPWUpLChcImxvZ2dlclwiPT09ZS50eXBlfHxlLmxvZyYmZS53YXJuJiZlLmVycm9yKSYmKHRoaXMubW9kdWxlcy5sb2dnZXI9ZSksXCJsYW5ndWFnZURldGVjdG9yXCI9PT1lLnR5cGUmJih0aGlzLm1vZHVsZXMubGFuZ3VhZ2VEZXRlY3Rvcj1lKSxcImkxOG5Gb3JtYXRcIj09PWUudHlwZSYmKHRoaXMubW9kdWxlcy5pMThuRm9ybWF0PWUpLFwicG9zdFByb2Nlc3NvclwiPT09ZS50eXBlJiZTLmFkZFBvc3RQcm9jZXNzb3IoZSksXCJmb3JtYXR0ZXJcIj09PWUudHlwZSYmKHRoaXMubW9kdWxlcy5mb3JtYXR0ZXI9ZSksXCIzcmRQYXJ0eVwiPT09ZS50eXBlJiZ0aGlzLm1vZHVsZXMuZXh0ZXJuYWwucHVzaChlKSx0aGlzfXNldFJlc29sdmVkTGFuZ3VhZ2UoZSl7aWYoZSYmdGhpcy5sYW5ndWFnZXMmJiEoW1wiY2ltb2RlXCIsXCJkZXZcIl0uaW5kZXhPZihlKT4tMSkpZm9yKGxldCBlPTA7ZTx0aGlzLmxhbmd1YWdlcy5sZW5ndGg7ZSsrKXtjb25zdCB0PXRoaXMubGFuZ3VhZ2VzW2VdO2lmKCEoW1wiY2ltb2RlXCIsXCJkZXZcIl0uaW5kZXhPZih0KT4tMSkmJnRoaXMuc3RvcmUuaGFzTGFuZ3VhZ2VTb21lVHJhbnNsYXRpb25zKHQpKXt0aGlzLnJlc29sdmVkTGFuZ3VhZ2U9dDticmVha319fWNoYW5nZUxhbmd1YWdlKGUsdCl7dmFyIG49dGhpczt0aGlzLmlzTGFuZ3VhZ2VDaGFuZ2luZ1RvPWU7Y29uc3Qgcj1kKCk7dGhpcy5lbWl0KFwibGFuZ3VhZ2VDaGFuZ2luZ1wiLGUpO2NvbnN0IG89ZT0+e3RoaXMubGFuZ3VhZ2U9ZSx0aGlzLmxhbmd1YWdlcz10aGlzLnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMudG9SZXNvbHZlSGllcmFyY2h5KGUpLHRoaXMucmVzb2x2ZWRMYW5ndWFnZT12b2lkIDAsdGhpcy5zZXRSZXNvbHZlZExhbmd1YWdlKGUpfSxpPShlLGkpPT57aT8obyhpKSx0aGlzLnRyYW5zbGF0b3IuY2hhbmdlTGFuZ3VhZ2UoaSksdGhpcy5pc0xhbmd1YWdlQ2hhbmdpbmdUbz12b2lkIDAsdGhpcy5lbWl0KFwibGFuZ3VhZ2VDaGFuZ2VkXCIsaSksdGhpcy5sb2dnZXIubG9nKFwibGFuZ3VhZ2VDaGFuZ2VkXCIsaSkpOnRoaXMuaXNMYW5ndWFnZUNoYW5naW5nVG89dm9pZCAwLHIucmVzb2x2ZSgoZnVuY3Rpb24oKXtyZXR1cm4gbi50KC4uLmFyZ3VtZW50cyl9KSksdCYmdChlLChmdW5jdGlvbigpe3JldHVybiBuLnQoLi4uYXJndW1lbnRzKX0pKX0sYT10PT57ZXx8dHx8IXRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvcnx8KHQ9W10pO2NvbnN0IG49XCJzdHJpbmdcIj09dHlwZW9mIHQ/dDp0aGlzLnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMuZ2V0QmVzdE1hdGNoRnJvbUNvZGVzKHQpO24mJih0aGlzLmxhbmd1YWdlfHxvKG4pLHRoaXMudHJhbnNsYXRvci5sYW5ndWFnZXx8dGhpcy50cmFuc2xhdG9yLmNoYW5nZUxhbmd1YWdlKG4pLHRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3RvciYmdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmNhY2hlVXNlckxhbmd1YWdlJiZ0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuY2FjaGVVc2VyTGFuZ3VhZ2UobikpLHRoaXMubG9hZFJlc291cmNlcyhuLChlPT57aShlLG4pfSkpfTtyZXR1cm4gZXx8IXRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvcnx8dGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmFzeW5jPyFlJiZ0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3ImJnRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvci5hc3luYz8wPT09dGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmRldGVjdC5sZW5ndGg/dGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmRldGVjdCgpLnRoZW4oYSk6dGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmRldGVjdChhKTphKGUpOmEodGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmRldGVjdCgpKSxyfWdldEZpeGVkVChlLHQsbil7dmFyIHI9dGhpcztjb25zdCBvPWZ1bmN0aW9uKGUsdCl7bGV0IGk7aWYoXCJvYmplY3RcIiE9dHlwZW9mIHQpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGw9bmV3IEFycmF5KGE+Mj9hLTI6MCkscz0yO3M8YTtzKyspbFtzLTJdPWFyZ3VtZW50c1tzXTtpPXIub3B0aW9ucy5vdmVybG9hZFRyYW5zbGF0aW9uT3B0aW9uSGFuZGxlcihbZSx0XS5jb25jYXQobCkpfWVsc2UgaT17Li4udH07aS5sbmc9aS5sbmd8fG8ubG5nLGkubG5ncz1pLmxuZ3N8fG8ubG5ncyxpLm5zPWkubnN8fG8ubnMsaS5rZXlQcmVmaXg9aS5rZXlQcmVmaXh8fG58fG8ua2V5UHJlZml4O2NvbnN0IGM9ci5vcHRpb25zLmtleVNlcGFyYXRvcnx8XCIuXCI7bGV0IHU7cmV0dXJuIHU9aS5rZXlQcmVmaXgmJkFycmF5LmlzQXJyYXkoZSk/ZS5tYXAoKGU9PmAke2kua2V5UHJlZml4fSR7Y30ke2V9YCkpOmkua2V5UHJlZml4P2Ake2kua2V5UHJlZml4fSR7Y30ke2V9YDplLHIudCh1LGkpfTtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZT9vLmxuZz1lOm8ubG5ncz1lLG8ubnM9dCxvLmtleVByZWZpeD1uLG99dCgpe3JldHVybiB0aGlzLnRyYW5zbGF0b3ImJnRoaXMudHJhbnNsYXRvci50cmFuc2xhdGUoLi4uYXJndW1lbnRzKX1leGlzdHMoKXtyZXR1cm4gdGhpcy50cmFuc2xhdG9yJiZ0aGlzLnRyYW5zbGF0b3IuZXhpc3RzKC4uLmFyZ3VtZW50cyl9c2V0RGVmYXVsdE5hbWVzcGFjZShlKXt0aGlzLm9wdGlvbnMuZGVmYXVsdE5TPWV9aGFzTG9hZGVkTmFtZXNwYWNlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtpZighdGhpcy5pc0luaXRpYWxpemVkKXJldHVybiB0aGlzLmxvZ2dlci53YXJuKFwiaGFzTG9hZGVkTmFtZXNwYWNlOiBpMThuZXh0IHdhcyBub3QgaW5pdGlhbGl6ZWRcIix0aGlzLmxhbmd1YWdlcyksITE7aWYoIXRoaXMubGFuZ3VhZ2VzfHwhdGhpcy5sYW5ndWFnZXMubGVuZ3RoKXJldHVybiB0aGlzLmxvZ2dlci53YXJuKFwiaGFzTG9hZGVkTmFtZXNwYWNlOiBpMThuLmxhbmd1YWdlcyB3ZXJlIHVuZGVmaW5lZCBvciBlbXB0eVwiLHRoaXMubGFuZ3VhZ2VzKSwhMTtjb25zdCBuPXQubG5nfHx0aGlzLnJlc29sdmVkTGFuZ3VhZ2V8fHRoaXMubGFuZ3VhZ2VzWzBdLHI9ISF0aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5mYWxsYmFja0xuZyxvPXRoaXMubGFuZ3VhZ2VzW3RoaXMubGFuZ3VhZ2VzLmxlbmd0aC0xXTtpZihcImNpbW9kZVwiPT09bi50b0xvd2VyQ2FzZSgpKXJldHVybiEwO2NvbnN0IGk9KGUsdCk9Pntjb25zdCBuPXRoaXMuc2VydmljZXMuYmFja2VuZENvbm5lY3Rvci5zdGF0ZVtgJHtlfXwke3R9YF07cmV0dXJuLTE9PT1ufHwyPT09bn07aWYodC5wcmVjaGVjayl7Y29uc3QgZT10LnByZWNoZWNrKHRoaXMsaSk7aWYodm9pZCAwIT09ZSlyZXR1cm4gZX1yZXR1cm4hIXRoaXMuaGFzUmVzb3VyY2VCdW5kbGUobixlKXx8KCEodGhpcy5zZXJ2aWNlcy5iYWNrZW5kQ29ubmVjdG9yLmJhY2tlbmQmJighdGhpcy5vcHRpb25zLnJlc291cmNlc3x8dGhpcy5vcHRpb25zLnBhcnRpYWxCdW5kbGVkTGFuZ3VhZ2VzKSl8fCEoIWkobixlKXx8ciYmIWkobyxlKSkpfWxvYWROYW1lc3BhY2VzKGUsdCl7Y29uc3Qgbj1kKCk7cmV0dXJuIHRoaXMub3B0aW9ucy5ucz8oXCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPVtlXSksZS5mb3JFYWNoKChlPT57dGhpcy5vcHRpb25zLm5zLmluZGV4T2YoZSk8MCYmdGhpcy5vcHRpb25zLm5zLnB1c2goZSl9KSksdGhpcy5sb2FkUmVzb3VyY2VzKChlPT57bi5yZXNvbHZlKCksdCYmdChlKX0pKSxuKToodCYmdCgpLFByb21pc2UucmVzb2x2ZSgpKX1sb2FkTGFuZ3VhZ2VzKGUsdCl7Y29uc3Qgbj1kKCk7XCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPVtlXSk7Y29uc3Qgcj10aGlzLm9wdGlvbnMucHJlbG9hZHx8W10sbz1lLmZpbHRlcigoZT0+ci5pbmRleE9mKGUpPDApKTtyZXR1cm4gby5sZW5ndGg/KHRoaXMub3B0aW9ucy5wcmVsb2FkPXIuY29uY2F0KG8pLHRoaXMubG9hZFJlc291cmNlcygoZT0+e24ucmVzb2x2ZSgpLHQmJnQoZSl9KSksbik6KHQmJnQoKSxQcm9taXNlLnJlc29sdmUoKSl9ZGlyKGUpe2lmKGV8fChlPXRoaXMucmVzb2x2ZWRMYW5ndWFnZXx8KHRoaXMubGFuZ3VhZ2VzJiZ0aGlzLmxhbmd1YWdlcy5sZW5ndGg+MD90aGlzLmxhbmd1YWdlc1swXTp0aGlzLmxhbmd1YWdlKSksIWUpcmV0dXJuXCJydGxcIjtjb25zdCB0PXRoaXMuc2VydmljZXMmJnRoaXMuc2VydmljZXMubGFuZ3VhZ2VVdGlsc3x8bmV3IFIoRigpKTtyZXR1cm5bXCJhclwiLFwic2h1XCIsXCJzcXJcIixcInNzaFwiLFwieGFhXCIsXCJ5aGRcIixcInl1ZFwiLFwiYWFvXCIsXCJhYmhcIixcImFidlwiLFwiYWNtXCIsXCJhY3FcIixcImFjd1wiLFwiYWN4XCIsXCJhY3lcIixcImFkZlwiLFwiYWRzXCIsXCJhZWJcIixcImFlY1wiLFwiYWZiXCIsXCJhanBcIixcImFwY1wiLFwiYXBkXCIsXCJhcmJcIixcImFycVwiLFwiYXJzXCIsXCJhcnlcIixcImFyelwiLFwiYXV6XCIsXCJhdmxcIixcImF5aFwiLFwiYXlsXCIsXCJheW5cIixcImF5cFwiLFwiYmJ6XCIsXCJwZ2FcIixcImhlXCIsXCJpd1wiLFwicHNcIixcInBidFwiLFwicGJ1XCIsXCJwc3RcIixcInBycFwiLFwicHJkXCIsXCJ1Z1wiLFwidXJcIixcInlkZFwiLFwieWRzXCIsXCJ5aWhcIixcImppXCIsXCJ5aVwiLFwiaGJvXCIsXCJtZW5cIixcInhtblwiLFwiZmFcIixcImpwclwiLFwicGVvXCIsXCJwZXNcIixcInByc1wiLFwiZHZcIixcInNhbVwiLFwiY2tiXCJdLmluZGV4T2YodC5nZXRMYW5ndWFnZVBhcnRGcm9tQ29kZShlKSk+LTF8fGUudG9Mb3dlckNhc2UoKS5pbmRleE9mKFwiLWFyYWJcIik+MT9cInJ0bFwiOlwibHRyXCJ9c3RhdGljIGNyZWF0ZUluc3RhbmNlKCl7cmV0dXJuIG5ldyB6KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9Y2xvbmVJbnN0YW5jZSgpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSx0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpXO2NvbnN0IG49ZS5mb3JrUmVzb3VyY2VTdG9yZTtuJiZkZWxldGUgZS5mb3JrUmVzb3VyY2VTdG9yZTtjb25zdCByPXsuLi50aGlzLm9wdGlvbnMsLi4uZSxpc0Nsb25lOiEwfSxvPW5ldyB6KHIpO3ZvaWQgMD09PWUuZGVidWcmJnZvaWQgMD09PWUucHJlZml4fHwoby5sb2dnZXI9by5sb2dnZXIuY2xvbmUoZSkpO3JldHVybltcInN0b3JlXCIsXCJzZXJ2aWNlc1wiLFwibGFuZ3VhZ2VcIl0uZm9yRWFjaCgoZT0+e29bZV09dGhpc1tlXX0pKSxvLnNlcnZpY2VzPXsuLi50aGlzLnNlcnZpY2VzfSxvLnNlcnZpY2VzLnV0aWxzPXtoYXNMb2FkZWROYW1lc3BhY2U6by5oYXNMb2FkZWROYW1lc3BhY2UuYmluZChvKX0sbiYmKG8uc3RvcmU9bmV3IEUodGhpcy5zdG9yZS5kYXRhLHIpLG8uc2VydmljZXMucmVzb3VyY2VTdG9yZT1vLnN0b3JlKSxvLnRyYW5zbGF0b3I9bmV3IE0oby5zZXJ2aWNlcyxyKSxvLnRyYW5zbGF0b3Iub24oXCIqXCIsKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KHQ+MT90LTE6MCkscj0xO3I8dDtyKyspbltyLTFdPWFyZ3VtZW50c1tyXTtvLmVtaXQoZSwuLi5uKX0pKSxvLmluaXQocix0KSxvLnRyYW5zbGF0b3Iub3B0aW9ucz1yLG8udHJhbnNsYXRvci5iYWNrZW5kQ29ubmVjdG9yLnNlcnZpY2VzLnV0aWxzPXtoYXNMb2FkZWROYW1lc3BhY2U6by5oYXNMb2FkZWROYW1lc3BhY2UuYmluZChvKX0sb310b0pTT04oKXtyZXR1cm57b3B0aW9uczp0aGlzLm9wdGlvbnMsc3RvcmU6dGhpcy5zdG9yZSxsYW5ndWFnZTp0aGlzLmxhbmd1YWdlLGxhbmd1YWdlczp0aGlzLmxhbmd1YWdlcyxyZXNvbHZlZExhbmd1YWdlOnRoaXMucmVzb2x2ZWRMYW5ndWFnZX19fWNvbnN0IEc9ei5jcmVhdGVJbnN0YW5jZSgpO0cuY3JlYXRlSW5zdGFuY2U9ei5jcmVhdGVJbnN0YW5jZTtHLmNyZWF0ZUluc3RhbmNlLEcuZGlyLEcuaW5pdCxHLmxvYWRSZXNvdXJjZXMsRy5yZWxvYWRSZXNvdXJjZXMsRy51c2UsRy5jaGFuZ2VMYW5ndWFnZSxHLmdldEZpeGVkVCxHLnQsRy5leGlzdHMsRy5zZXREZWZhdWx0TmFtZXNwYWNlLEcuaGFzTG9hZGVkTmFtZXNwYWNlLEcubG9hZE5hbWVzcGFjZXMsRy5sb2FkTGFuZ3VhZ2VzO0cudDtuKDM0MjApLG4oMTEyNyk7big1NDM4KTt2YXIgcT1uKDM5MjYpO25ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMucXVldWU9W10sdGhpcy5sb2NrZWQ9ITF9bG9jaygpe3JldHVybiBuZXcgUHJvbWlzZSgoZT0+e3RoaXMubG9ja2VkP3RoaXMucXVldWUucHVzaChlKToodGhpcy5sb2NrZWQ9ITAsZSgpKX0pKX11bmxvY2soKXtpZih0aGlzLnF1ZXVlLmxlbmd0aD4wKXtjb25zdCBlPXRoaXMucXVldWUuc2hpZnQoKTtlJiZlKCl9ZWxzZSB0aGlzLmxvY2tlZD0hMX19O25ldyBNYXA7dmFyIFk7IWZ1bmN0aW9uKGUpe2UuRVJST1I9XCJlcnJvclwiLGUuU1VDQ0VTUz1cInN1Y2Nlc3NcIixlLklORk89XCJpbmZvXCJ9KFl8fChZPXt9KSk7Y29uc3QgSz0oKGUsdCk9Pntjb25zdCBuPWU7cmV0dXJuIG4ud29ya3NwYWNlUGxhdGZvcm18fChuLndvcmtzcGFjZVBsYXRmb3JtPXt9KSxuLndvcmtzcGFjZVBsYXRmb3JtLl9pbnRlcm5hbERlZmVyU2hvd09wdGlvbnM9e3NldEFzRm9yZWdyb3VuZDohIXQsZGVmZXJTaG93RW5hYmxlZDohMCxhdXRvU2hvdzpuLndvcmtzcGFjZVBsYXRmb3JtPy5faW50ZXJuYWxBdXRvU2hvd3x8bi53b3Jrc3BhY2VQbGF0Zm9ybT8uX2ludGVybmFsRGVmZXJTaG93T3B0aW9ucz8uYXV0b1Nob3d8fHZvaWQgMD09PW4uYXV0b1Nob3d8fG4uYXV0b1Nob3d9LG4uYXV0b1Nob3c9ITEsbn0pKHthbHdheXNPblRvcDohMCxhdXRvU2hvdzohMSxmcmFtZTohMSxyZXNpemFibGU6ITEsc2hvd1Rhc2tiYXJJY29uOiExfSk7dmFyIFg7IWZ1bmN0aW9uKGUpe2UuTG9ja2VkPVwiTG9ja0Nsb3NlZEljb25cIixlLlVubG9ja2VkPVwiTG9ja09wZW4xSWNvblwifShYfHwoWD17fSkpOyFmdW5jdGlvbihlPUspe2NvbnN0IHQ9bmV3IE1hcH0oKTt2YXIgSj1uKDgwNjEpLFE9big0NzI4KTtuKDY2NTApO2NvbnN0IGVlPShlLHQ9MCk9PntsZXQgbixyLG89ITE7Y29uc3QgaT1hc3luYyByPT57Y29uc3QgYT1hd2FpdCBlKC4uLnIpO2lmKG8pe2F3YWl0IG5ldyBQcm9taXNlKChlPT5zZXRUaW1lb3V0KGUsdCkpKTtjb25zdCBlPW47cmV0dXJuIG49dm9pZCAwLG89ITEsaShlKX1yZXR1cm4gYX07cmV0dXJuKC4uLmUpPT4ocj8obz0hMCxuPWUpOnI9aShlKS5jYXRjaCgoZT0+e3Rocm93IGNvbnNvbGUuZXJyb3IoXCJtYWtlRGVib3VuY2VkRnVuY1wiLGUpLGV9KSkuZmluYWxseSgoKCk9PntyPXZvaWQgMH0pKSxyKX07ZnVuY3Rpb24gdGUoZSx0KXtyZXR1cm4gYXN5bmMobiwuLi5yKT0+e2UuaGFzKG4pJiZlLmdldChuKS5mb3JFYWNoKChlPT5lKC4uLnIpKSksdCYmYXdhaXQgdCh7ZXZlbnQ6bixwYXlsb2FkOnJ9KX19ZnVuY3Rpb24gbmUoZSx0KXtyZXR1cm4gdCYmdCgodD0+e2NvbnN0e2V2ZW50Om4scGF5bG9hZDpyfT10O2UuaGFzKG4pJiZlLmdldChuKS5mb3JFYWNoKChlPT5lKC4uLnIpKSl9KSksKHQsbik9PntlLmhhcyh0KXx8ZS5zZXQodCxuZXcgU2V0KSxlLmdldCh0KS5hZGQobil9fWZ1bmN0aW9uIHJlKGUpe3JldHVybih0LG4pPT57ZS5oYXModCl8fGUuc2V0KHQsbmV3IFNldCk7Y29uc3Qgcj1lLmdldCh0KSxvPSguLi5lKT0+e24oLi4uZSksci5kZWxldGUobyl9O3IuYWRkKG8pfX1mdW5jdGlvbiBvZShlKXtyZXR1cm4odCxuKT0+e2UuaGFzKHQpJiZlLmdldCh0KS5kZWxldGUobil9fW4oMTA2NSk7bC5JQS5Ccm93c2VyTWVudTsoZnVuY3Rpb24oZSl7Y29uc3QgdD1uZXcgTWFwO3RlKHQsKHQ9PnIuc1MmJmZpbi5JbnRlckFwcGxpY2F0aW9uQnVzLnB1Ymxpc2goZSx0KSkpLG5lKHQsKHQ9PnIuc1MmJmZpbi5JbnRlckFwcGxpY2F0aW9uQnVzLnN1YnNjcmliZSh7dXVpZDpmaW4ubWUudXVpZH0sZSx0KSkpLG9lKHQpLHJlKHQpfSkoXCJ3aW5kb3cubWVudVwiKSxlZSgoKCk9PigwLGkuRDkpKCkuZ2V0Q2hpbGRXaW5kb3dzKCkpLDUwMCk7bmV3IE1hcDt2YXIgaWU9bigzMTk4KTtuLm4oaWUpKCkoKGFzeW5jKCk9Pntjb25zdCBlPWF3YWl0IGZpbi5QbGF0Zm9ybS5nZXRDdXJyZW50U3luYygpLkFwcGxpY2F0aW9uLmdldENoaWxkV2luZG93cygpO2xldCB0LG49ITE7Zm9yKGNvbnN0IHIgb2YgZSlpZihyLmlkZW50aXR5Lm5hbWU9PT1sLklBLkJyb3dzZXJNZW51fHxyLmlkZW50aXR5Lm5hbWU9PT1sLklBLkJyb3dzZXJTYXZlTWVudT90PXI6YXdhaXQoMCxsLkIpKHIuaWRlbnRpdHkpJiYobj0hMCksbilicmVhazshbiYmdCYmdC5jbG9zZSgpfSksMTAwLHtsZWFkaW5nOiExLHRyYWlsaW5nOiEwfSk7dmFyIGFlOyFmdW5jdGlvbihlKXtlLkxhYmVsPVwibm9ybWFsXCIsZS5TZXBhcmF0b3I9XCJzZXBhcmF0b3JcIixlLlN1Ym1lbnU9XCJzdWJtZW51XCIsZS5DaGVja2JveD1cImNoZWNrYm94XCJ9KGFlfHwoYWU9e30pKTthZS5TZXBhcmF0b3I7dmFyIGxlOyFmdW5jdGlvbihlKXtlLlNhdmU9XCJTYXZlXCIsZS5TYXZlQXM9XCJTYXZlQXNcIn0obGV8fChsZT17fSkpO3ZhciBzZTshZnVuY3Rpb24oZSl7ZS5HbG9iYWxNZW51PVwiZ2xvYmFsLW1lbnVcIixlLkNvbnRleHRNZW51PVwiY29udGV4dC1tZW51XCIsZS5SZW5hbWVTdXBlcnRhYj1cInJlbmFtZS1zdXBlcnRhYlwiLGUuQWRkRWRpdEJvb2ttYXJrPVwiYWRkLWVkaXQtYm9va21hcmtcIixlLkRyb3Bkb3duTWVudT1cImRyb3Bkb3duLW1lbnVcIn0oc2V8fChzZT17fSkpO24oNTkxMik7ZnVuY3Rpb24gY2UoZSl7cmV0dXJuIG5ldyBQcm9taXNlKCgodCxuKT0+e2Uub25jb21wbGV0ZT1lLm9uc3VjY2Vzcz0oKT0+dChlLnJlc3VsdCksZS5vbmFib3J0PWUub25lcnJvcj0oKT0+bihlLmVycm9yKX0pKX1mdW5jdGlvbiB1ZShlLHQpe2NvbnN0IG49aW5kZXhlZERCLm9wZW4oZSk7bi5vbnVwZ3JhZGVuZWVkZWQ9KCk9Pm4ucmVzdWx0LmNyZWF0ZU9iamVjdFN0b3JlKHQpO2NvbnN0IHI9Y2Uobik7cmV0dXJuKGUsbik9PnIudGhlbigocj0+bihyLnRyYW5zYWN0aW9uKHQsZSkub2JqZWN0U3RvcmUodCkpKSl9bGV0IGZlO2Z1bmN0aW9uIGRlKCl7cmV0dXJuIGZlfHwoZmU9dWUoXCJrZXl2YWwtc3RvcmVcIixcImtleXZhbFwiKSksZmV9ZnVuY3Rpb24gcGUoZSx0KXtyZXR1cm4gZS5vcGVuQ3Vyc29yKCkub25zdWNjZXNzPWZ1bmN0aW9uKCl7dGhpcy5yZXN1bHQmJih0KHRoaXMucmVzdWx0KSx0aGlzLnJlc3VsdC5jb250aW51ZSgpKX0sY2UoZS50cmFuc2FjdGlvbil9Y29uc3QgaGU9YXN5bmMoZSx0LG4pPT57Y29uc3Qgcj1RLnJWKEouWi5IYXNNb3ZlZFN0b3JlKSxvPXI/SlNPTi5wYXJzZShyKTp7fTtpZihvJiZvW25dKXJldHVybjtvW25dPSEwLFEuTFMoSi5aLkhhc01vdmVkU3RvcmUsSlNPTi5zdHJpbmdpZnkobykpO2NvbnN0IGk9YXdhaXQgZnVuY3Rpb24oZT1kZSgpKXtyZXR1cm4gZShcInJlYWRvbmx5XCIsKHQ9PntpZih0LmdldEFsbCYmdC5nZXRBbGxLZXlzKXJldHVybiBQcm9taXNlLmFsbChbY2UodC5nZXRBbGxLZXlzKCkpLGNlKHQuZ2V0QWxsKCkpXSkudGhlbigoKFtlLHRdKT0+ZS5tYXAoKChlLG4pPT5bZSx0W25dXSkpKSk7Y29uc3Qgbj1bXTtyZXR1cm4gZShcInJlYWRvbmx5XCIsKGU9PnBlKGUsKGU9Pm4ucHVzaChbZS5rZXksZS52YWx1ZV0pKSkudGhlbigoKCk9Pm4pKSkpfSkpfShlKTthd2FpdCBmdW5jdGlvbihlLHQ9ZGUoKSl7cmV0dXJuIHQoXCJyZWFkd3JpdGVcIiwodD0+KGUuZm9yRWFjaCgoZT0+dC5wdXQoZVsxXSxlWzBdKSkpLGNlKHQudHJhbnNhY3Rpb24pKSkpfShpLHQpfSxnZT0oZSx0KT0+dWUoZStcIi1cIitmaW4ubWUudXVpZCx0KSx2ZT0oZSx0KT0+e2NvbnN0IG49Z2UoZSx0KSxyPXVlKGUsdCk7cmV0dXJuIGhlKHIsbixlKSxufTtyLl9WJiZyLnNTJiZ2ZShcIm9wZW5maW4taG9tZS1wYWdlc1wiLFwicGFnZXNcIik7ci5fViYmci5zUyYmZ2UoXCJvcGVuZmluLWVudGVycHJpc2UtdGFiLWhpc3RvcnlcIixcInJlbW92ZWQtdGFiLXN0YWNrXCIpLHIuX1YmJnIuc1MmJmdlKFwib3BlbmZpbi1lbnRlcnByaXNlLXNpdGUtaGlzdG9yeVwiLFwidmlzaXRlZC1zaXRlc1wiKTtuKDE2NDYpO3ZhciBtZTshZnVuY3Rpb24oZSl7ZVtlLkJvdHRvbUxlZnQ9MF09XCJCb3R0b21MZWZ0XCIsZVtlLkJvdHRvbVJpZ2h0PTFdPVwiQm90dG9tUmlnaHRcIixlW2UuQ2VudGVyPTJdPVwiQ2VudGVyXCJ9KG1lfHwobWU9e30pKTtyLl9WJiZyLnNTJiZnZShcImRvY2stcHJvdmlkZXItY29uZmlnc1wiLFwiZG9jay1wcm92aWRlci1jb25maWdzXCIpO24oNzA1KTtyLl9WJiZyLnNTJiZ2ZShcIm9wZW5maW4td29ya3NwYWNlLXBsYXRmb3JtLXdvcmtzcGFjZXNcIixcIndvcmtzcGFjZXNcIik7big2NDk1KTtyLnJ4LGEuWlAuQnJvd3NlcixsLkdpLnV1aWQsbC5JQS5Ccm93c2VyQWRkcmVzc1NlYXJjaFByZWZpeDtuKDcwOTgpLG4oNzU2NCksbig5MTE3KX0sNzA5ODooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCJ9LDcxMDA6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24uZCh0LHskZzooKT0+cH0pO3ZhciByLG8saSxhLGwscyxjLHUsZixkLHAsaDtuKDc1NjQpLG4oNjQ5NSksbig1MzA0KTshZnVuY3Rpb24oZSl7ZS5VcmxDaGFuZ2U9XCJVUkxfQ0hBTkdFXCIsZS5WaWV3QWRkZWQ9XCJWSUVXX0FEREVEXCIsZS5WaWV3UmVtb3ZlZD1cIlZJRVdfUkVNT1ZFRFwiLGUuUGFnZUNvbnRleHRBZGRlZD1cIlBBR0VfQ09OVEVYVF9BRERFRFwiLGUuUGFnZUNvbnRleHRSZW1vdmVkPVwiUEFHRV9DT05URVhUX1JFTU9WRURcIn0ocnx8KHI9e30pKSxmdW5jdGlvbihlKXtlLk5ld1dpbmRvdz1cIk5ld1dpbmRvd1wiLGUuTmV3UGFnZT1cIk5ld1BhZ2VcIixlLlNhdmVQYWdlPVwiU2F2ZVBhZ2VcIixlLlNhdmVQYWdlQXM9XCJTYXZlUGFnZUFzXCIsZS5QcmludD1cIlByaW50XCIsZS5QcmludEFsbD1cIlByaW50QWxsXCIsZS5QcmludFNjcmVlbj1cIlByaW50U2NyZWVuXCIsZS5DbG9zZVdpbmRvdz1cIkNsb3NlV2luZG93XCIsZS5SZXN0b3JlQ2hhbmdlcz1cIlJlc3RvcmVDaGFuZ2VzXCIsZS5TYXZlV29ya3NwYWNlPVwiU2F2ZVdvcmtzcGFjZVwiLGUuU2F2ZVdvcmtzcGFjZUFzPVwiU2F2ZVdvcmtzcGFjZUFzXCIsZS5SZW5hbWVXb3Jrc3BhY2U9XCJSZW5hbWVXb3Jrc3BhY2VcIixlLlN3aXRjaFdvcmtzcGFjZT1cIlN3aXRjaFdvcmtzcGFjZVwiLGUuRGVsZXRlV29ya3NwYWNlPVwiRGVsZXRlV29ya3NwYWNlXCIsZS5Eb3dubG9hZHM9XCJEb3dubG9hZHNcIixlLk9wZW5TdG9yZWZyb250PVwiT3BlblN0b3JlZnJvbnRcIixlLkFwcGVhcmFuY2U9XCJBcHBlYXJhbmNlXCIsZS5RdWl0PVwiUXVpdFwiLGUuQ3VzdG9tPVwiQ3VzdG9tXCJ9KG98fChvPXt9KSksZnVuY3Rpb24oZSl7ZS5MaWdodD1cImxpZ2h0XCIsZS5EYXJrPVwiZGFya1wiLGUuU3lzdGVtPVwic3lzdGVtXCJ9KGl8fChpPXt9KSksZnVuY3Rpb24oZSl7ZS5DbG9zZT1cIkNsb3NlXCIsZS5EdXBsaWNhdGU9XCJEdXBsaWNhdGVcIixlLlJlbmFtZT1cIlJlbmFtZVwiLGUuU2F2ZT1cIlNhdmVcIixlLlNhdmVBcz1cIlNhdmUgQXNcIixlLk5ld1BhZ2U9XCJOZXcgUGFnZVwiLGUuRGVsZXRlUGFnZT1cIkRlbGV0ZSBQYWdlXCIsZS5TYXZlV29ya3NwYWNlQXM9XCJTYXZlV29ya3NwYWNlQXNcIixlLlJlZnJlc2g9XCJSZWZyZXNoXCIsZS5DbG9zZU90aGVycz1cIkNsb3NlIG90aGVyc1wiLGUuRGVsZXRlPVwiRGVsZXRlXCIsZS5DdXN0b209XCJDdXN0b21cIn0oYXx8KGE9e30pKSxmdW5jdGlvbihlKXtlLkxvY2s9XCJMb2NrXCIsZS5TaG93SGlkZVRhYnM9XCJTaG93SGlkZVRhYnNcIixlLkFkZFRvQ2hhbmVsPVwiQWRkVG9DaGFubmVsXCIsZS5QcmludD1cIlByaW50XCIsZS5QaW49XCJQaW5cIn0obHx8KGw9e30pKSxmdW5jdGlvbihlKXtlLkVkaXROYW1lPVwiRWRpdCBOYW1lXCIsZS5Nb3ZlPVwiTW92ZVwiLGUuRGVsZXRlPVwiRGVsZXRlXCJ9KHN8fChzPXt9KSksZnVuY3Rpb24oZSl7ZS5OZXdWaWV3PVwiTmV3Vmlld1wiLGUuRHVwbGljYXRlVmlld3M9XCJEdXBsaWNhdGVWaWV3XCIsZS5PcGVuV2l0aERlZmF1bHRCcm93c2VyPVwiT3BlbldpdGhEZWZhdWx0QnJvd3NlclwiLGUuUmVsb2FkVmlld3M9XCJSZWxvYWRUYWJcIixlLkNsb3NlVmlld3M9XCJDbG9zZVRhYlwiLGUuQWRkVG9DaGFubmVsPVwiQWRkVG9DaGFubmVsXCIsZS5SZW1vdmVGcm9tQ2hhbm5lbD1cIlJlbW92ZUZyb21DaGFubmVsXCIsZS5CYWNrPVwiQmFja1wiLGUuRm9yd2FyZD1cIkZvcndhcmRcIixlLlByaW50PVwiUHJpbnRcIixlLlByaW50QWxsPVwiUHJpbnRBbGxcIixlLlByaW50U2NyZWVuPVwiUHJpbnRTY3JlZW5cIixlLkN1c3RvbT1cIkN1c3RvbVwifShjfHwoYz17fSkpLGZ1bmN0aW9uKGUpe2UuU2hvd0hpZGVUYWJzPVwiU2hvd0hpZGVUYWJzXCIsZS5Db2xvckxpbmtpbmc9XCJDb2xvckxpbmtpbmdcIixlLlByZXNldExheW91dHM9XCJQcmVzZXRMYXlvdXRzXCIsZS5Mb2NrVW5sb2NrUGFnZT1cIkxvY2tVbmxvY2tQYWdlXCIsZS5TYXZlTWVudT1cIlNhdmVNZW51XCIsZS5TYXZlUGFnZT1cIlNhdmVQYWdlXCIsZS5NaW5pbWlzZT1cIk1pbmltaXNlXCIsZS5NYXhpbWlzZT1cIk1heGltaXNlXCIsZS5DbG9zZT1cIkNsb3NlXCIsZS5DdXN0b209XCJDdXN0b21cIn0odXx8KHU9e30pKSxmdW5jdGlvbihlKXtlLlNhdmVQYWdlPVwiU2F2ZVBhZ2VcIixlLlNhdmVXb3Jrc3BhY2U9XCJTYXZlV29ya3NwYWNlXCIsZS5TYXZlUGFnZUFzPVwiU2F2ZVBhZ2VBc1wiLGUuU2F2ZVdvcmtzcGFjZUFzPVwiU2F2ZVdvcmtzcGFjZUFzXCIsZS5DdXN0b209XCJDdXN0b21cIn0oZnx8KGY9e30pKSxmdW5jdGlvbihlKXtlLkJyb3dzZXI9XCJicm93c2VyXCIsZS5QbGF0Zm9ybT1cInBsYXRmb3JtXCJ9KGR8fChkPXt9KSksZnVuY3Rpb24oZSl7ZS5DdXN0b21CdXR0b249XCJDdXN0b21CdXR0b25cIixlLlN0b3JlQ3VzdG9tQnV0dG9uPVwiU3RvcmVDdXN0b21CdXR0b25cIixlLkN1c3RvbURyb3Bkb3duSXRlbT1cIkN1c3RvbURyb3Bkb3duSXRlbVwiLGUuR2xvYmFsQ29udGV4dE1lbnU9XCJHbG9iYWxDb250ZXh0TWVudVwiLGUuVmlld1RhYkNvbnRleHRNZW51PVwiVmlld1RhYkNvbnRleHRNZW51XCIsZS5QYWdlVGFiQ29udGV4dE1lbnU9XCJQYWdlVGFiQ29udGV4dE1lbnVcIixlLlNhdmVCdXR0b25Db250ZXh0TWVudT1cIlNhdmVCdXR0b25Db250ZXh0TWVudVwiLGUuQVBJPVwiQVBJXCJ9KHB8fChwPXt9KSksZnVuY3Rpb24oZSl7ZS5TQVZFX1BBR0U9XCJTQVZFX1BBR0VcIixlLlNBVkVfV09SS1NQQUNFPVwiU0FWRV9XT1JLU1BBQ0VcIixlLlNBVkVfUEFHRV9BUz1cIlNBVkVfUEFHRV9BU1wiLGUuU0FWRV9XT1JLU1BBQ0VfQVM9XCJTQVZFX1dPUktTUEFDRV9BU1wiLGUuUkVOQU1FX1BBR0U9XCJSRU5BTUVfUEFHRVwiLGUuUkVOQU1FX1dPUktTUEFDRT1cIlJFTkFNRV9XT1JLU1BBQ0VcIn0oaHx8KGg9e30pKX0sMjY5MzooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7bi5kKHQse0U6KCk9Pml9KTt2YXIgcj1uKDU4MDYpLG89big3Mjc4KTtjb25zdCBpPShlLHQpPT57by5aLm1hcmtTdGFydChgJHtlfS1yZWdpc3RyYXRpb25gKSwoMCxyLlRaKSgpLm9uY2UoXCJzdGFydGVkXCIsKCgpPT5vLloubWFya0FuZE1lYXN1cmUoXCJ3b3Jrc3BhY2UtYXBwLXN0YXJ0ZWRcIixgJHtlfS1yZWdpc3RyYXRpb25gKSkpO2NvbnN0IG49ZmluLldpbmRvdy53cmFwU3luYyh0KTtuLm9uY2UoXCJpbml0aWFsaXplZFwiLCgoKT0+by5aLm1hcmtBbmRNZWFzdXJlKGAke2V9LXdpbmRvdy1pbml0aWFsaXplZGAsYCR7ZX0tcmVnaXN0cmF0aW9uYCkpKSxuLm9uY2UoXCJzaG93blwiLCgoKT0+e28uWi5tYXJrQW5kTWVhc3VyZShgJHtlfS1zaG93YCxgJHtlfS1yZWdpc3RyYXRpb25gKX0pKX19LDMyNjE6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24ucih0KSxuLmQodCx7Q0xJQWN0aW9uOigpPT5fLlB0LENMSUZpbHRlck9wdGlvblR5cGU6KCk9Pl8uZWwsQ0xJVGVtcGxhdGU6KCk9Pl8ueVcsZGVyZWdpc3RlcjooKT0+RSxoaWRlOigpPT5qLHJlZ2lzdGVyOigpPT5MLHNob3c6KCk9PlN9KTt2YXIgcj1uKDY2NzgpLG89big3Mjc4KSxpPW4oNjUzMiksYT1uKDEyMSk7Y29uc3QgbD17cmVtb3RlUHJvdmlkZXJEYXRhU3RyZWFtSWQ6XCIwXCIscmVtb3RlQ2xpZW50U2VhcmNoU3RyZWFtSWQ6XCIxXCIscmVtb3RlUHJvdmlkZXJSZWdpc3RyYXRpb25TdHJlYW1JZDpcIjJcIixyZW1vdGVQcm92aWRlckRlcmVnaXN0cmF0aW9uU3RyZWFtSWQ6XCIzXCIscmVtb3RlUHJvdmlkZXJJbmZvU3RyZWFtSWQ6XCI0XCIscmVtb3RlUHJvdmlkZXJEaXNwYXRjaFN0cmVhbUlkOlwiNVwiLHJlbW90ZVNlYXJjaENsb3NlU3RyZWFtSWQ6XCI2XCJ9O3ZhciBzPW4oNTE1MCksYz1uKDU0MzgpLHU9bigzMjY0KTt2YXIgZj1uKDcwNDYpO2NvbnN0IGQ9KCk9Pnt9O2Z1bmN0aW9uIHAoZSl7Y29uc3QgdD17fTtsZXQgbj1bXTtsZXQgcj1bXTtsZXQgbz1udWxsO2xldCBpPWYudzEuSW5pdGlhbDt0LmdldFN0YXR1cz0oKT0+aSx0LmdldFJlc3VsdEJ1ZmZlcj0oKT0+bix0LnNldFJlc3VsdEJ1ZmZlcj1lPT57bj1lLG4/Lmxlbmd0aCYmdC5vbkNoYW5nZSgpfSx0LmdldFJldm9rZWRCdWZmZXI9KCk9PnIsdC5zZXRSZXZva2VkQnVmZmVyPWU9PntyPWUscj8ubGVuZ3RoJiZ0Lm9uQ2hhbmdlKCl9LHQuc2V0VXBkYXRlZENvbnRleHQ9ZT0+e289ZSxudWxsIT09byYmdC5vbkNoYW5nZSgpfSx0LmdldFVwZGF0ZWRDb250ZXh0PSgpPT5vLHQub25DaGFuZ2U9ZDtjb25zdCBhPXt9O3JldHVybiB0LnJlcz1hLGEuY2xvc2U9KCk9PntpIT09Zi53MS5DbG9zZSYmKGk9Zi53MS5DbG9zZSx0Lm9uQ2hhbmdlKCkpfSxhLm9wZW49KCk9PntpIT09Zi53MS5PcGVuJiYoaT1mLncxLk9wZW4sdC5vbkNoYW5nZSgpKX0sYS5yZXNwb25kPW49Pntjb25zdCByPWZ1bmN0aW9uKGU9W10sdD1bXSxuPVwiYXNjZW5kaW5nXCIpe2NvbnN0IHI9W10sbz1uZXcgTWFwO3QuZm9yRWFjaCgoZT0+e2lmKGUua2V5KXJldHVybiBvLnNldChlLmtleSxlKTtyLnB1c2goZSl9KSk7bGV0IGk9ZS5tYXAoKGU9PntpZihlLmtleSl7Y29uc3QgdD1vLmdldChlLmtleSk7aWYodClyZXR1cm4gby5kZWxldGUoZS5rZXkpLHR9cmV0dXJuIGV9KSk7cmV0dXJuIGkucHVzaCguLi5vLnZhbHVlcygpLC4uLnIpLGk9XCJhc2NlbmRpbmdcIj09PW4/aS5zb3J0KCgoZSx0KT0+KGU/LnNjb3JlPz8xLzApLSh0Py5zY29yZT8/MS8wKSkpOmkuc29ydCgoKGUsdCk9Pih0Py5zY29yZT8/MS8wKS0oZT8uc2NvcmU/PzEvMCkpKSxpfSh0LmdldFJlc3VsdEJ1ZmZlcigpLG4sZSk7dC5zZXRSZXN1bHRCdWZmZXIocil9LGEucmV2b2tlPSguLi5lKT0+e2NvbnN0IG49bmV3IFNldChlKSxyPXQuZ2V0UmVzdWx0QnVmZmVyKCkuZmlsdGVyKCgoe2tleTplfSk9Pntjb25zdCB0PW4uaGFzKGUpO3JldHVybiB0JiZuLmRlbGV0ZShlKSwhdH0pKTt0LnNldFJlc3VsdEJ1ZmZlcihyKSxuLnNpemUmJih0LmdldFJldm9rZWRCdWZmZXIoKS5mb3JFYWNoKChlPT5uLmFkZChlKSkpLHQuc2V0UmV2b2tlZEJ1ZmZlcihbLi4ubl0pKX0sYS51cGRhdGVDb250ZXh0PWU9Pnt0LnNldFVwZGF0ZWRDb250ZXh0KGUpfSx0fWNvbnN0IGg9bmV3IE1hcCxnPTEwMDthc3luYyBmdW5jdGlvbiB2KGUpe2NvbnN0e2lkOnQscHJvdmlkZXJJZDpufT1lLHI9dy5nZXRQcm92aWRlck9yRmFpbChuKTtsZXQgbz1oLmdldCh0KTtvfHwobz1mdW5jdGlvbihlLHQpe2NvbnN0IG49bmV3IFNldDtsZXQgcj0hMTtyZXR1cm57Y2xvc2U6KCk9PntyPSEwO2Zvcihjb25zdCBlIG9mIG4pZSgpfSxyZXE6e2lkOmUsLi4udCxjb250ZXh0OnQ/LmNvbnRleHR8fHt9LG9uQ2xvc2U6ZT0+e24uYWRkKGUpLHImJmUoKX0scmVtb3ZlTGlzdGVuZXI6ZT0+e24uZGVsZXRlKGUpfX19fSh0LGUpLGguc2V0KHQsbykpO2NvbnN0IGk9cCgpLGE9KCk9Pntjb25zdCBlPWkuZ2V0UmVzdWx0QnVmZmVyKCk7aS5zZXRSZXN1bHRCdWZmZXIoW10pO2NvbnN0IHI9aS5nZXRSZXZva2VkQnVmZmVyKCk7aS5zZXRSZXZva2VkQnVmZmVyKFtdKTtjb25zdCBvPWkuZ2V0VXBkYXRlZENvbnRleHQoKTtpLnNldFVwZGF0ZWRDb250ZXh0KG51bGwpO2NvbnN0IGE9aS5nZXRTdGF0dXMoKTshYXN5bmMgZnVuY3Rpb24oZSl7KGF3YWl0KDAscy5WRCkoKSkuZGlzcGF0Y2gobC5yZW1vdGVQcm92aWRlckRhdGFTdHJlYW1JZCxlKX0oe2lkOnQscHJvdmlkZXJJZDpuLHJlc3VsdHM6ZSxyZXZva2VkOnIsc3RhdHVzOmEsY29udGV4dDpvfSl9O2xldCBjPSEwLHU9ITE7aS5vbkNoYW5nZT0oKT0+e2lmKGMpcmV0dXJuIGM9ITEsdm9pZCBhKCk7dXx8KHU9ITAsc2V0VGltZW91dCgoKCk9Pnt1PSExLGEoKX0pLGcpKX07dHJ5e2NvbnN0e3Jlc3VsdHM6ZSxjb250ZXh0OmF9PWF3YWl0IHIub25Vc2VySW5wdXQoby5yZXEsaS5yZXMpLGw9aS5nZXRTdGF0dXMoKTtyZXR1cm57aWQ6dCxwcm92aWRlcklkOm4sc3RhdHVzOmwscmVzdWx0czplLGNvbnRleHQ6YX19Y2F0Y2goZSl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoYE9wZW5GaW4vV29ya3NwYWNlL0hvbWUuIFVuY2F1Z2h0IGV4Y2VwdGlvbiBpbiBzZWFyY2ggcHJvdmlkZXIgJHtufSBmb3Igc2VhcmNoICR7dH1gLFwiVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzZWFyY2ggcHJvdmlkZXIuXCIsZSkse2lkOnQscHJvdmlkZXJJZDpuLGVycm9yOmU/Lm1lc3NhZ2V9fX1hc3luYyBmdW5jdGlvbiBtKCl7Zm9yKGNvbnN0e3JlcTplLGNsb3NlOnR9b2YgaC52YWx1ZXMoKSl0KCksaC5kZWxldGUoZS5pZCl9YXN5bmMgZnVuY3Rpb24gQyhlLHQpe2NvbnN0IG49dy5nZXRQcm92aWRlck9yRmFpbChlLnByb3ZpZGVySWQpO3JldHVybiBlLnJlc3VsdC5kaXNwYXRjaGVySWRlbnRpdHk9dCxuLm9uUmVzdWx0RGlzcGF0Y2g/LihlLnJlc3VsdCl9ZnVuY3Rpb24geShlKXtjb25zdCB0PWguZ2V0KGUuaWQpO3Q/LmNsb3NlKCksaC5kZWxldGUoZS5pZCl9Y29uc3Qgdz1uZXcgdS5sVChcImhvbWVcIiksYj1hc3luYyBlPT57YXdhaXQoMCxzLmFCKSgpOyEoXCJza2lwUGxhdGZvcm1Jbml0Q2hlY2tcImluIGUmJiEwPT09ZS5za2lwUGxhdGZvcm1Jbml0Q2hlY2spJiZhd2FpdCgwLGMuSGgpKGZpbi5tZS5pZGVudGl0eSk7dy5hc3NlcnROb3RBbHJlYWR5UmVnaXN0ZXJlZChlLmlkKSx3LnNldFByb3ZpZGVyKGUpO2NvbnN0IHQ9YXdhaXQoMCxzLlZEKSgpO3JldHVybiBmdW5jdGlvbihlKXtlLmhvbWVDaGFubmVsQWN0aW9uc1JlZ2lzdGVyZWR8fChlLmhvbWVDaGFubmVsQWN0aW9uc1JlZ2lzdGVyZWQ9ITAsZS5yZWdpc3RlcihsLnJlbW90ZVByb3ZpZGVyRGF0YVN0cmVhbUlkLHYpLGUucmVnaXN0ZXIobC5yZW1vdGVTZWFyY2hDbG9zZVN0cmVhbUlkLHkpLGUucmVnaXN0ZXIobC5yZW1vdGVQcm92aWRlckRpc3BhdGNoU3RyZWFtSWQsQyksZS5hZGREaXNjb25uZWN0aW9uTGlzdGVuZXIobSkpfSh0KSx0LmRpc3BhdGNoKGwucmVtb3RlUHJvdmlkZXJSZWdpc3RyYXRpb25TdHJlYW1JZCx7aWQ6ZS5pZCx0aXRsZTplLnRpdGxlLGljb246ZS5pY29uLGNsaWVudEFQSVZlcnNpb246ci51MCxpZGVudGl0eTpmaW4ubWUuaWRlbnRpdHksc2NvcmVPcmRlcjplLnNjb3JlT3JkZXIsY29tbWFuZENvZGU6ZS5jb21tYW5kQ29kZSxkZXNjcmlwdGlvbjplLmRlc2NyaXB0aW9uLGhpZGRlbjplLmhpZGRlbixsaXN0VGl0bGU6ZS5saXN0VGl0bGUsaW5wdXRQbGFjZWhvbGRlcjplLmlucHV0UGxhY2Vob2xkZXIsbG9nb1VybDplLmxvZ29VcmwsZGlzcGF0Y2hGb2N1c0V2ZW50czplLmRpc3BhdGNoRm9jdXNFdmVudHN9KX07dmFyIHg9bigyNjkzKSxfPW4oMzc1OCk7bGV0IE87Y29uc3QgTD1hc3luYyBlPT57aWYoIWUuaWNvbil0aHJvdyBuZXcgRXJyb3IoYCR7ZS5pZH0gcHJvdmlkZXIgbmVlZHMgdG8gaGF2ZSBpY29uIHByb3BlcnR5IGRlZmluZWQuYCk7KDAseC5FKShcImhvbWVcIixhLk9JKTtjb25zdCB0PWF3YWl0IGIoZSk7cmV0dXJuIE89bmV3IFByb21pc2UoKChuLGEpPT57dHJ5eygwLGkuY2spKHthbGxvd2VkOiEwLGNvbXBvbmVudFZlcnNpb246dD8ud29ya3NwYWNlVmVyc2lvbn0pLHIudTAsbih7Li4udCxjbGllbnRBUElWZXJzaW9uOnIudTAsc2V0U2VhcmNoUXVlcnk6YXN5bmMgdD0+KGF3YWl0KDAscy54WikoKSkuZGlzcGF0Y2goXCJzZXQtc2VhcmNoLXF1ZXJ5XCIse3F1ZXJ5OnQscHJvdmlkZXJJRDplLmlkfSl9KX1jYXRjaChlKXsoMCxpLmNrKSh7YWxsb3dlZDohMSxyZWplY3Rpb25Db2RlOmUgaW5zdGFuY2VvZiBFcnJvcj9lLm1lc3NhZ2U6XCJ1bmtub3duXCJ9KSxhKGUpfWZpbmFsbHl7by5aLm1hcmtFbmRBbmRNZWFzdXJlKFwiaG9tZS1yZWdpc3RyYXRpb25cIil9fSkpLE99LEU9YXN5bmMgZT0+e3cuZGVsZXRlUHJvdmlkZXIoZSk7Y29uc3QgdD1hd2FpdCgwLHMuVkQpKCk7YXdhaXQgdC5kaXNwYXRjaChsLnJlbW90ZVByb3ZpZGVyRGVyZWdpc3RyYXRpb25TdHJlYW1JZCxlKX07YXN5bmMgZnVuY3Rpb24gUygpe28uWi5tYXJrU3RhcnQoXCJob21lLXNob3dcIiksYXdhaXQgTztjb25zdCBlPWF3YWl0KDAscy54WikoKTthd2FpdCBlLmRpc3BhdGNoKFwic2hvdy1ob21lXCIsdm9pZCAwKX1hc3luYyBmdW5jdGlvbiBqKCl7YXdhaXQgTztjb25zdCBlPWF3YWl0KDAscy54WikoKTthd2FpdCBlLmRpc3BhdGNoKFwiaGlkZS1ob21lXCIsdm9pZCAwKX19LDMyNjQ6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24uZCh0LHtsVDooKT0+ZH0pO3ZhciByPS9cXGIoPzphbj9kP3xhW3N0XXxiZWNhdXNlfGJ1dHxieXxlbnxmb3J8aVtmbl18bmVpdGhlcnxub3J8b1tmbnJdfG9ubHl8b3ZlcnxwZXJ8c298c29tZXx0aGFbdG5dfHRoZXx0b3x1cHx1cG9ufHZzP1xcLj98dmVyc3VzfHZpYXx3aGVufHdpdGh8d2l0aG91dHx5ZXQpXFxiL2ksbz0vW15cXHM64oCT4oCULV0rfC4vZyxpPS9cXHMvLGE9Ly4oPz1bQS1aXXxcXC4uKS8sbD0vW0EtWmEtejAtOVxcdTAwQzAtXFx1MDBGRl0vO2Z1bmN0aW9uIHMoZSl7Zm9yKHZhciB0LG49XCJcIjtudWxsIT09KHQ9by5leGVjKGUpKTspe3ZhciBzPXRbMF0sYz10LmluZGV4O2EudGVzdChzKXx8ci50ZXN0KHMpJiYwIT09YyYmYytzLmxlbmd0aCE9PWUubGVuZ3RofHxcIjpcIj09PWUuY2hhckF0KGMrcy5sZW5ndGgpJiYhaS50ZXN0KGUuY2hhckF0KGMrcy5sZW5ndGgrMSkpP24rPXM6bis9cy5yZXBsYWNlKGwsKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRvVXBwZXJDYXNlKCl9KSl9cmV0dXJuIG59Y2xhc3MgYyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUsdCl7Y29uc3Qgbj1zKGUpO3N1cGVyKGAke259IFByb3ZpZGVyLiAke259IFByb3ZpZGVyJHt0P2Agd2l0aCBpZCAke3R9YDpcIlwifSBpcyBub3QgY3VycmVudGx5IHJlZ2lzdGVyZWQuYCl9fWNsYXNzIHUgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlLHQpe2NvbnN0IG49cyhlKTtzdXBlcihgJHtufSBQcm92aWRlci4gJHtufSBQcm92aWRlciR7dD9gIHdpdGggaWQgJHt0fWA6XCJcIn0gaXMgYWxyZWFkeSByZWdpc3RlcmVkLiBDYWxsIFxcYGRlcmVnaXN0ZXJcXGAgYmVmb3JlIHJlZ2lzdGVyaW5nIGFnYWluLmApfX1jbGFzcyBmIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSx0KXtjb25zdCBuPXMoZSk7c3VwZXIoYEZhaWxlZCB0byBnZXQgJHtufSBQcm92aWRlci4gJHtufSBQcm92aWRlciB3aXRoIGlkICR7dH0gaXMgbm90IGN1cnJlbnRseSByZWdpc3RlcmVkLmApfX1jbGFzcyBke2NvbnN0cnVjdG9yKGUpe3RoaXMucHJvdmlkZXJzTWFwPW5ldyBNYXAsdGhpcy5wcm92aWRlclR5cGU9ZX1hc3NlcnROb3RBbHJlYWR5UmVnaXN0ZXJlZChlKXtpZih0aGlzLmhhc1Byb3ZpZGVyKGUpKXRocm93IG5ldyB1KHRoaXMucHJvdmlkZXJUeXBlLGUpfWFzc2VydFJlZ2lzdGVyZWQoZSl7aWYoIXRoaXMuaGFzUHJvdmlkZXIoZSkpdGhyb3cgbmV3IGModGhpcy5wcm92aWRlclR5cGUsZSl9Z2V0UHJvdmlkZXIoZSl7cmV0dXJuIHRoaXMucHJvdmlkZXJzTWFwLmdldChlKX1oYXNQcm92aWRlcihlKXtyZXR1cm4gdGhpcy5wcm92aWRlcnNNYXAuaGFzKGUpfXNldFByb3ZpZGVyKGUpe3RoaXMucHJvdmlkZXJzTWFwLnNldChlLmlkLGUpfWRlbGV0ZVByb3ZpZGVyKGUpe3RoaXMucHJvdmlkZXJzTWFwLmRlbGV0ZShlKX1nZXRQcm92aWRlck9yRmFpbChlKXtjb25zdCB0PXRoaXMuZ2V0UHJvdmlkZXIoZSk7aWYoIXQpdGhyb3cgbmV3IGYodGhpcy5wcm92aWRlclR5cGUsZSk7cmV0dXJuIHR9Y2xlYXJQcm92aWRlcnMoKXt0aGlzLnByb3ZpZGVyc01hcC5jbGVhcigpfX19LDEyMjI6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO3ZhciByLG8saTtuLmQodCx7cDooKT0+byx3OigpPT5pfSksZnVuY3Rpb24oZSl7ZS5GZXRjaGluZz1cImZldGNoaW5nXCIsZS5GZXRjaGVkPVwiZmV0Y2hlZFwiLGUuQ29tcGxldGU9XCJjb21wbGV0ZVwifShyfHwocj17fSkpLGZ1bmN0aW9uKGUpe2UuVXNlckFjdGlvbj1cInVzZXItYWN0aW9uXCIsZS5Gb2N1c0NoYW5nZT1cImZvY3VzLWNoYW5nZVwiLGUuUmVsb2FkPVwicmVsb2FkXCJ9KG98fChvPXt9KSksZnVuY3Rpb24oZSl7ZS5BY3RpdmU9XCJhY3RpdmVcIixlLkRlZmF1bHQ9XCJkZWZhdWx0XCJ9KGl8fChpPXt9KSl9LDc0Mjc6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO3ZhciByO24uZCh0LHt2OigpPT5yfSksZnVuY3Rpb24oZSl7ZS5BY3Rpb25CdXR0b249XCJBY3Rpb25CdXR0b25cIixlLkRyb3Bkb3duQnV0dG9uPVwiRHJvcGRvd25CdXR0b25cIn0ocnx8KHI9e30pKX0sMzc1ODooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIHIsbyxpO24uZCh0LHtQdDooKT0+cixlbDooKT0+aSx5VzooKT0+b30pLGZ1bmN0aW9uKGUpe2UuU3VnZ2VzdGlvbj1cInN1Z2dlc3Rpb25cIn0ocnx8KHI9e30pKSxmdW5jdGlvbihlKXtlLkNvbnRhY3Q9XCJDb250YWN0XCIsZS5DdXN0b209XCJDdXN0b21cIixlLkxpc3Q9XCJMaXN0XCIsZS5QbGFpbj1cIlBsYWluXCIsZS5TaW1wbGVUZXh0PVwiU2ltcGxlVGV4dFwiLGUuTG9hZGluZz1cIkxvYWRpbmdcIixlLkVycm9yPVwiRXJyb3JcIn0ob3x8KG89e30pKSxmdW5jdGlvbihlKXtlLk11bHRpU2VsZWN0PVwiTXVsdGlTZWxlY3RcIn0oaXx8KGk9e30pKX0sNzU2NDooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7bigxMjIyKSxuKDM3NTgpLG4oNjExNCksbigyMTA5KSxuKDc0MjcpfSw2MTE0OihlLHQsbik9PntcInVzZSBzdHJpY3RcIjt2YXIgcixvO24uZCh0LHtMOigpPT5yLFQ6KCk9Pm99KSxmdW5jdGlvbihlKXtlLlNuYXBzaG90PVwic25hcHNob3RcIixlLk1hbmlmZXN0PVwibWFuaWZlc3RcIixlLlZpZXc9XCJ2aWV3XCIsZS5FeHRlcm5hbD1cImV4dGVybmFsXCJ9KHJ8fChyPXt9KSksZnVuY3Rpb24oZSl7ZS5MYW5kaW5nUGFnZT1cImxhbmRpbmdQYWdlXCIsZS5BcHBHcmlkPVwiYXBwR3JpZFwifShvfHwobz17fSkpfSwyMTA5OihlLHQsbik9PntcInVzZSBzdHJpY3RcIjtuLmQodCx7R286KCk9Pm8sWko6KCk9PmEsYkk6KCk9PmkscDY6KCk9PnJ9KTtjb25zdCByPXtDb250YWluZXI6XCJDb250YWluZXJcIixCdXR0b246XCJCdXR0b25cIixTcGxpdEJ1dHRvbjpcIlNwbGl0QnV0dG9uXCJ9LG89e1RleHQ6XCJUZXh0XCIsSW1hZ2U6XCJJbWFnZVwiLExpc3Q6XCJMaXN0XCJ9LGk9ey4uLnIsLi4ub307dmFyIGE7IWZ1bmN0aW9uKGUpe2UuUHJpbWFyeT1cInByaW1hcnlcIixlLlNlY29uZGFyeT1cInNlY29uZGFyeVwiLGUuVGV4dE9ubHk9XCJ0ZXh0T25seVwifShhfHwoYT17fSkpfSwyNTI4OihlLHQsbik9PntcInVzZSBzdHJpY3RcIjtuLnIodCksbi5kKHQse0FwcE1hbmlmZXN0VHlwZTooKT0+aS5MLFN0b3JlZnJvbnRUZW1wbGF0ZTooKT0+aS5ULGRlcmVnaXN0ZXI6KCk9PkMsaGlkZTooKT0+eSxyZWdpc3RlcjooKT0+bSxzaG93OigpPT53fSk7dmFyIHI9big2NTMyKSxvPW4oNTE1MCksaT1uKDYxMTQpLGE9big2Njc4KSxsPW4oNzI3OCkscz1uKDEyMSksYz1uKDU0MzgpLHU9bigzMjY0KTtsZXQgZj0hMTthc3luYyBmdW5jdGlvbiBkKGUsdCxuKXtjb25zdCByPWF3YWl0KDAsby5EbSkoKTt0cnl7cmV0dXJuIGF3YWl0IHIuZGlzcGF0Y2goZS5hY3Rpb24sZS5wYXlsb2FkKX1jYXRjaChvKXtpZihvIGluc3RhbmNlb2YgRXJyb3ImJi0xIT09by50b1N0cmluZygpLmluZGV4T2YoZS5hY3Rpb24pKXJldHVybiBmfHxjb25zb2xlLndhcm4oXCJZb3UgYXJlIHVzaW5nIGEgbmV3ZXIgdmVyc2lvbiBvZiB0aGUgV29ya3NwYWNlIGNsaWVudCBsaWJyYXJ5IHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgY3VycmVudGx5IHJ1bm5pbmcgd29ya3NwYWNlIHByb3ZpZGVyLiBQbGVhc2UgdXBncmFkZSB0aGUgV29ya3NwYWNlIHRvIHZlcnNpb24gOS4wIG9yIGxhdGVyLlwiKSxmPSEwLGF3YWl0IHIuZGlzcGF0Y2godC5hY3Rpb24sdC5wYXlsb2FkKSxuO3Rocm93IG99fWNvbnN0IHA9bmV3IHUubFQoXCJzdG9yZWZyb250XCIpLGg9YXN5bmMgZT0+e2F3YWl0KDAsYy5IaCkoZmluLm1lLmlkZW50aXR5KTtjb25zdCB0PWF3YWl0KDAsby54WikoKTtyZXR1cm4gcC5hc3NlcnROb3RBbHJlYWR5UmVnaXN0ZXJlZChlLmlkKSxwLnNldFByb3ZpZGVyKGUpLChlPT57ZS5zdG9yZWZyb250Q2hhbm5lbEFjdGlvbnNSZWdpc3RlcmVkfHwoZS5zdG9yZWZyb250Q2hhbm5lbEFjdGlvbnNSZWdpc3RlcmVkPSEwLGUucmVnaXN0ZXIoXCJnZXQtc3RvcmVmcm9udC1wcm92aWRlci1hcHBzXCIsKGU9PnAuZ2V0UHJvdmlkZXJPckZhaWwoZSkuZ2V0QXBwcygpKSksZS5yZWdpc3RlcihcImdldC1zdG9yZWZyb250LXByb3ZpZGVyLWZvb3RlclwiLChlPT5wLmdldFByb3ZpZGVyT3JGYWlsKGUpLmdldEZvb3RlcigpKSksZS5yZWdpc3RlcihcImdldC1zdG9yZWZyb250LXByb3ZpZGVyLWxhbmRpbmctcGFnZVwiLChlPT5wLmdldFByb3ZpZGVyT3JGYWlsKGUpLmdldExhbmRpbmdQYWdlKCkpKSxlLnJlZ2lzdGVyKFwiZ2V0LXN0b3JlZnJvbnQtcHJvdmlkZXItbmF2aWdhdGlvblwiLChlPT5wLmdldFByb3ZpZGVyT3JGYWlsKGUpLmdldE5hdmlnYXRpb24oKSkpLGUucmVnaXN0ZXIoXCJsYXVuY2gtc3RvcmVmcm9udC1wcm92aWRlci1hcHBcIiwoKHtpZDplLGFwcDp0fSk9PnAuZ2V0UHJvdmlkZXJPckZhaWwoZSkubGF1bmNoQXBwKHQpKSkpfSkodCksZS5jbGllbnRBUElWZXJzaW9uPWEudTAsZCh7YWN0aW9uOlwicmVnaXN0ZXItcHJvdmlkZXJcIixwYXlsb2FkOntwcm92aWRlclR5cGU6XCJzdG9yZWZyb250XCIsaW5mbzplfX0se2FjdGlvbjpcInJlZ2lzdGVyLXN0b3JlZnJvbnQtcHJvdmlkZXJcIixwYXlsb2FkOmV9LHt3b3Jrc3BhY2VWZXJzaW9uOlwidW5rbm93blwifSl9O3ZhciBnPW4oMjY5Myk7bGV0IHY7Y29uc3QgbT1hc3luYyBlPT57KDAsZy5FKShcInN0b3JlXCIscy5uZCk7Y29uc3QgdD1hd2FpdCBoKGUpO3JldHVybiB2PW5ldyBQcm9taXNlKCgobixpKT0+e3RyeXsoMCxyLmQ5KSh7YWxsb3dlZDohMCxjb21wb25lbnRWZXJzaW9uOnQ/LndvcmtzcGFjZVZlcnNpb259KSxhLnUwLG4oe2NsaWVudEFQSVZlcnNpb246YS51MCx3b3Jrc3BhY2VWZXJzaW9uOnQ/LndvcmtzcGFjZVZlcnNpb24/P1wiXCIsdXBkYXRlQXBwQ2FyZEJ1dHRvbnM6YXN5bmMgdD0+e2NvbnN0IG49YXdhaXQoMCxvLlhsKSgpO2F3YWl0IG4uZGlzcGF0Y2goXCJ1cGRhdGUtYXBwLWNhcmQtYnV0dG9uLWNvbmZpZ1wiLHsuLi50LGlkOmUuaWQsdGl0bGU6ZS50aXRsZSxpY29uOmUuaWNvbixwbGF0Zm9ybUlkZW50aXR5OmZpbi5tZS5pZGVudGl0eX0pfX0pfWNhdGNoKGUpeygwLHIuZDkpKHthbGxvd2VkOiExLHJlamVjdGlvbkNvZGU6ZSBpbnN0YW5jZW9mIEVycm9yP2UubWVzc2FnZTpcInVua25vd25cIn0pLGkoZSl9ZmluYWxseXtsLloubWFya0VuZEFuZE1lYXN1cmUoXCJzdG9yZS1yZWdpc3RyYXRpb25cIil9fSkpLHZ9LEM9YXN5bmMgZT0+KGF3YWl0IHYscC5hc3NlcnRSZWdpc3RlcmVkKGUpLHAuZGVsZXRlUHJvdmlkZXIoZSksYXdhaXQoMCxvLmFCKSgpLGQoe2FjdGlvbjpcImRlcmVnaXN0ZXItcHJvdmlkZXJcIixwYXlsb2FkOntwcm92aWRlclR5cGU6XCJzdG9yZWZyb250XCIsaWQ6ZX19LHthY3Rpb246XCJkZXJlZ2lzdGVyLXN0b3JlZnJvbnQtcHJvdmlkZXJcIixwYXlsb2FkOmV9KSkseT1hc3luYygpPT4oYXdhaXQgdixhd2FpdCgwLG8uYUIpKCksZCh7YWN0aW9uOlwiaGlkZS1wcm92aWRlci13aW5kb3dcIixwYXlsb2FkOntwcm92aWRlclR5cGU6XCJzdG9yZWZyb250XCJ9fSx7YWN0aW9uOlwiaGlkZS1zdG9yZWZyb250XCJ9KSksdz1hc3luYygpPT4obC5aLm1hcmtTdGFydChcInN0b3JlLXNob3dcIiksYXdhaXQgdixhd2FpdCgwLG8uYUIpKCksZCh7YWN0aW9uOlwic2hvdy1wcm92aWRlci13aW5kb3dcIixwYXlsb2FkOntwcm92aWRlclR5cGU6XCJzdG9yZWZyb250XCJ9fSx7YWN0aW9uOlwic2hvdy1zdG9yZWZyb250XCJ9KSl9LDM0MjA6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24uZCh0LHtWUjooKT0+YyxoZDooKT0+bH0pO3ZhciByPW4oODMxMSksbz1uKDU5MTIpLGk9big5NjEwKSxhPW4oNTE1MCk7YXN5bmMgZnVuY3Rpb24gbCgpe3JldHVybihhd2FpdCgwLGEuRG0pKCkpLmRpc3BhdGNoKFwiZ2V0LWxlZ2FjeS1wYWdlc1wiLHZvaWQgMCl9Y29uc3Qgcz1hc3luYyBlPT4oey4uLmUsbGF5b3V0RGV0YWlsczp7bWFjaGluZUlkOmF3YWl0KDAsby4kdykoKSxtYWNoaW5lTmFtZTooMCxvLlg1KSgpfX0pLGM9YXN5bmMgZT0+e2NvbnN0IHQ9YXdhaXQoYXN5bmMoZSx0KT0+KHtwYWdlSWQ6KDAsaS5IKSgpLHRpdGxlOmUsbGF5b3V0OmF3YWl0IHModCksaXNSZWFkT25seTohMX0pKShlLnRpdGxlLCgwLHIuZEcpKGUubGF5b3V0KSk7cmV0dXJuIGUucGFuZWxzJiYodC5wYW5lbHM9ZS5wYW5lbHMubWFwKChlPT4oey4uLmUsdmlld09wdGlvbnM6KDAsci5aUykoZS52aWV3T3B0aW9ucyl9KSkpKSx7Li4uZSwuLi50fX19LDY0OTU6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO3ZhciByOyFmdW5jdGlvbihlKXtlLkxlZnQ9XCJMZWZ0XCIsZS5SaWdodD1cIlJpZ2h0XCIsZS5Ub3A9XCJUb3BcIixlLkJvdHRvbT1cIkJvdHRvbVwifShyfHwocj17fSkpfSwxMTI3OihlLHQsbik9PntcInVzZSBzdHJpY3RcIjtuLmQodCx7RG06KCk9PmEsYiQ6KCk9PnUseXo6KCk9PmZ9KTt2YXIgcj1uKDkxMTcpO24oMTIxKTtjb25zdCBvPShlLHQpPT50P2Ake3R9LSR7ZS51dWlkfS0ke2UubmFtZX1gOmBfX2Jyb3dzZXJfd2luZG93X18tJHtlLnV1aWR9LSR7ZS5uYW1lfWAsaT1uZXcgTWFwLGE9KGUsdCk9Pntjb25zdCBuPW8oZSx0KTtyZXR1cm4gaS5oYXMobil8fGkuc2V0KG4sKDAsci5aKShuKSksaS5nZXQobikoKX07dmFyIGwscyxjLHU7IWZ1bmN0aW9uKGUpe2UuQ2xvc2VCcm93c2VyV2luZG93PVwiY2xvc2UtYnJvd3Nlci13aW5kb3dcIixlLlF1aXRQbGF0Zm9ybT1cInF1aXQtcGxhdGZvcm1cIixlLkNsb3NlUGFnZT1cImNsb3NlLXBhZ2VcIixlLkFkZFRvQ2hhbm5lbD1cImFkZC10by1jaGFubmVsXCIsZS5SZW1vdmVGcm9tQ2hhbm5lbD1cInJlbW92ZS1mcm9tLWNoYW5uZWxcIixlLk9wZW5TYXZlTW9kYWxJbnRlcm5hbD1cIm9wZW4tc2F2ZS1tb2RhbC1pbnRlcm5hbFwiLGUuRHVwbGljYXRlUGFnZT1cImR1cGxpY2F0ZS1wYWdlXCIsZS5TZXRTZWxlY3RlZFNjaGVtZT1cInNldC1zZWxlY3RlZC1zY2hlbWVcIixlLlNob3dCcm93c2VySW5kaWNhdG9yPVwic2hvdy1icm93c2VyLWluZGljYXRvclwiLGUuU2V0U2VsZWN0ZWRMYW5ndWFnZT1cInNldC1zZWxlY3RlZC1sYW5ndWFnZVwiLGUuUmVmcmVzaEJvb2ttYXJrc0ludGVybmFsPVwicmVmcmVzaC1ib29rbWFya3NcIn0obHx8KGw9e30pKSxmdW5jdGlvbihlKXtlLkdldFBhZ2VzPVwiZ2V0LXBhZ2VzXCIsZS5HZXRBY3RpdmVQYWdlRm9yV2luZG93PVwiZ2V0LWFjdGl2ZS1wYWdlLWZvci13aW5kb3dcIixlLkF0dGFjaFBhZ2VzVG9XaW5kb3c9XCJhdHRhY2gtcGFnZXMtdG8td2luZG93XCIsZS5EZXRhY2hQYWdlc0Zyb21XaW5kb3c9XCJkZXRhY2gtcGFnZXMtZnJvbS13aW5kb3dcIixlLlNldEFjdGl2ZVBhZ2VGb3JXaW5kb3c9XCJzZXQtYWN0aXZlLXBhZ2UtZm9yLXdpbmRvd1wiLGUuUmVuYW1lUGFnZT1cInJlbmFtZS1wYWdlXCIsZS5SZW9yZGVyUGFnZXNGb3JXaW5kb3c9XCJyZW9yZGVyLXBhZ2VzLWZvci13aW5kb3dcIixlLlVwZGF0ZVBhZ2VGb3JXaW5kb3c9XCJ1cGRhdGUtcGFnZS1mb3Itd2luZG93XCIsZS5VcGRhdGVQYWdlc1dpbmRvd09wdGlvbnM9XCJ1cGRhdGUtcGFnZXMtd2luZG93LW9wdGlvbnNcIixlLklzRGV0YWNoaW5nUGFnZXM9XCJpcy1kZXRhY2hpbmctcGFnZXNcIixlLklzQWN0aXZlUGFnZUNoYW5naW5nPVwiaXMtYWN0aXZlLXBhZ2UtY2hhbmdpbmdcIn0oc3x8KHM9e30pKSxmdW5jdGlvbihlKXtlLkdldEFwcHM9XCJnZXQtYXBwc1wiLGUuR2V0Q3VyYXRlZENvbnRlbnQ9XCJnZXQtY3VyYXRlZC1jb250ZW50XCIsZS5HZXRSZWNlbnRseVZpc2l0ZWQ9XCJnZXQtcmVjZW50bHktdmlzaXRlZFwifShjfHwoYz17fSkpLGZ1bmN0aW9uKGUpe2UuQ3JlYXRlQm9va21hcmtOb2RlPVwiY3JlYXRlLWJvb2ttYXJrLW5vZGVcIixlLkdldEJvb2ttYXJrTm9kZT1cImdldC1ib29rbWFyay1ub2RlXCIsZS5TZWFyY2hCb29rbWFya05vZGVzPVwic2VhcmNoLWJvb2ttYXJrLW5vZGVzXCIsZS5VcGRhdGVCb29rbWFya05vZGU9XCJ1cGRhdGUtYm9va21hcmstbm9kZVwiLGUuRGVsZXRlQm9va21hcmtOb2RlPVwiZGVsZXRlLWJvb2ttYXJrLW5vZGVcIn0odXx8KHU9e30pKTtjb25zdCBmPXsuLi5sLC4uLnN9fSw1NDM4OihlLHQsbik9PntcInVzZSBzdHJpY3RcIjt2YXIgcjtuLmQodCx7SGg6KCk9PmksZm46KCk9PnIsajc6KCk9PmEseHA6KCk9Pmx9KSxmdW5jdGlvbihlKXtlLkxhdW5jaEFwcD1cImxhdW5jaEFwcFwiLGUuU2F2ZVBhZ2U9XCJzYXZlUGFnZVwiLGUuR2V0U2F2ZWRQYWdlPVwiZ2V0U2F2ZWRQYWdlXCIsZS5DcmVhdGVTYXZlZFBhZ2U9XCJjcmVhdGVTYXZlZFBhZ2VcIixlLlVwZGF0ZVNhdmVkUGFnZT1cInVwZGF0ZVNhdmVkUGFnZVwiLGUuRGVsZXRlU2F2ZWRQYWdlPVwiZGVsZXRlU2F2ZWRQYWdlXCIsZS5HZXRTYXZlZFBhZ2VzPVwiZ2V0U2F2ZWRQYWdlc1wiLGUuQ3JlYXRlU2F2ZWRQYWdlSW50ZXJuYWw9XCJjcmVhdGVTYXZlZFBhZ2VJbnRlcm5hbFwiLGUuVXBkYXRlU2F2ZWRQYWdlSW50ZXJuYWw9XCJ1cGRhdGVTYXZlZFBhZ2VJbnRlcm5hbFwiLGUuRGVsZXRlU2F2ZWRQYWdlSW50ZXJuYWw9XCJkZWxldGVTYXZlZFBhZ2VJbnRlcm5hbFwiLGUuVXBkYXRlUGFnZUZvcldpbmRvdz1cInVwZGF0ZVBhZ2VGb3JXaW5kb3dcIixlLkF0dGFjaFBhZ2VzVG9XaW5kb3c9XCJhdHRhY2hQYWdlc1RvV2luZG93XCIsZS5EZXRhY2hQYWdlc0Zyb21XaW5kb3c9XCJkZXRhY2hQYWdlc0Zyb21XaW5kb3dcIixlLlJlb3JkZXJQYWdlc0ZvcldpbmRvdz1cInJlb3JkZXJQYWdlc0ZvcldpbmRvd1wiLGUuU2V0QWN0aXZlUGFnZT1cInNldEFjdGl2ZVBhZ2VcIixlLkFkZFBhZ2U9XCJhZGRQYWdlXCIsZS5BZGREZWZhdWx0UGFnZT1cImFkZERlZmF1bHRQYWdlXCIsZS5HZXRBbGxBdHRhY2hlZFBhZ2VzPVwiZ2V0QWxsQXR0YWNoZWRQYWdlc1wiLGUuR2V0QWN0aXZlUGFnZUlkRm9yV2luZG93PVwiZ2V0QWN0aXZlUGFnZUlkRm9yV2luZG93XCIsZS5HZXRQYWdlc0ZvcldpbmRvdz1cImdldFBhZ2VzRm9yV2luZG93XCIsZS5HZXRQYWdlRm9yV2luZG93PVwiZ2V0UGFnZUZvcldpbmRvd1wiLGUuR2V0U2F2ZWRQYWdlTWV0YWRhdGE9XCJnZXRTYXZlZFBhZ2VNZXRhZGF0YVwiLGUuR2V0VW5pcXVlUGFnZVRpdGxlPVwiZ2V0VW5pcXVlUGFnZVRpdGxlXCIsZS5HZXRMYXN0Rm9jdXNlZEJyb3dzZXJXaW5kb3c9XCJnZXRMYXN0Rm9jdXNlZEJyb3dzZXJXaW5kb3dcIixlLkdldFRoZW1lcz1cImdldFRoZW1lc1wiLGUuR2V0U2VsZWN0ZWRTY2hlbWU9XCJnZXRTZWxlY3RlZFNjaGVtZVwiLGUuU2V0U2VsZWN0ZWRTY2hlbWU9XCJzZXRTZWxlY3RlZFNjaGVtZVwiLGUuT3Blbkdsb2JhbENvbnRleHRNZW51SW50ZXJuYWw9XCJvcGVuR2xvYmFsQ29udGV4dE1lbnVJbnRlcm5hbFwiLGUuT3BlblZpZXdUYWJDb250ZXh0TWVudUludGVybmFsPVwib3BlblZpZXdUYWJDb250ZXh0TWVudUludGVybmFsXCIsZS5PcGVuUGFnZVRhYkNvbnRleHRNZW51SW50ZXJuYWw9XCJvcGVuUGFnZVRhYkNvbnRleHRNZW51SW50ZXJuYWxcIixlLk9wZW5TYXZlQnV0dG9uQ29udGV4dE1lbnVJbnRlcm5hbD1cIm9wZW5TYXZlQnV0dG9uQ29udGV4dE1lbnVJbnRlcm5hbFwiLGUuSW52b2tlQ3VzdG9tQWN0aW9uSW50ZXJuYWw9XCJpbnZva2VDdXN0b21BY3Rpb25JbnRlcm5hbFwiLGUuUmVxdWVzdFF1aXRQbGF0Zm9ybURpYWxvZ0ludGVybmFsPVwicmVxdWVzdFF1aXRQbGF0Zm9ybURpYWxvZ0ludGVybmFsXCIsZS5HZXRTYXZlZFdvcmtzcGFjZT1cImdldFNhdmVkV29ya3NwYWNlXCIsZS5DcmVhdGVTYXZlZFdvcmtzcGFjZT1cImNyZWF0ZVNhdmVkV29ya3NwYWNlXCIsZS5VcGRhdGVTYXZlZFdvcmtzcGFjZT1cInVwZGF0ZVNhdmVkV29ya3NwYWNlXCIsZS5EZWxldGVTYXZlZFdvcmtzcGFjZT1cImRlbGV0ZVNhdmVkV29ya3NwYWNlXCIsZS5HZXRTYXZlZFdvcmtzcGFjZXM9XCJnZXRTYXZlZFdvcmtzcGFjZXNcIixlLlNhdmVXb3Jrc3BhY2U9XCJzYXZlV29ya3NwYWNlXCIsZS5HZXRDdXJyZW50V29ya3NwYWNlPVwiZ2V0Q3VycmVudFdvcmtzcGFjZVwiLGUuQXBwbHlXb3Jrc3BhY2U9XCJhcHBseVdvcmtzcGFjZVwiLGUuU2V0QWN0aXZlV29ya3NwYWNlPVwic2V0QWN0aXZlV29ya3NwYWNlXCIsZS5Jc0Jyb3dzZXJJbml0aWFsaXplZD1cImlzQnJvd3NlckluaXRpYWxpemVkXCIsZS5BbmFseXRpY3M9XCJhbmFseXRpY3NJbnRlcm5hbFwiLGUuR2V0TGFuZ3VhZ2U9XCJnZXRMYW5ndWFnZVwiLGUuR2V0TGFuZ3VhZ2VSZXNvdXJjZXNJbnRlcm5hbD1cImdldExhbmd1YWdlUmVzb3VyY2VzSW50ZXJuYWxcIixlLlNldExhbmd1YWdlPVwic2V0TGFuZ3VhZ2VcIixlLkdldERvY2tQcm92aWRlckNvbmZpZz1cImdldERvY2tQcm92aWRlckNvbmZpZ1wiLGUuU2F2ZURvY2tQcm92aWRlckNvbmZpZz1cInNhdmVEb2NrUHJvdmlkZXJDb25maWdcIixlLkhhbmRsZVNhdmVNb2RhbE9uUGFnZUNsb3NlPVwiaGFuZGxlU2F2ZU1vZGFsT25QYWdlQ2xvc2VcIixlLlNob3VsZFBhZ2VDbG9zZT1cInNob3VsZFBhZ2VDbG9zZVwiLGUuU2hvdWxkV2luZG93Q2xvc2U9XCJzaG91bGRXaW5kb3dDbG9zZVwiLGUuQ29weVBhZ2U9XCJjb3B5UGFnZVwiLGUuSGFuZGxlUGFnZUNoYW5nZXM9XCJoYW5kbGVQYWdlQ2hhbmdlc1wiLGUuTWFya1Vuc2F2ZWRQYWdlc0FzU2F2ZWRJbnRlcm5hbD1cIm1hcmtVbnNhdmVkUGFnZXNBc1NhdmVkSW50ZXJuYWxcIixlLlRyYWNrUmVtb3ZlZFRhYkludGVybmFsPVwidHJhY2tSZW1vdmVkVGFiSW50ZXJuYWxcIixlLlJlc3RvcmVSZW1vdmVkVGFiSW50ZXJuYWw9XCJyZXN0b3JlUmVtb3ZlZFRhYkludGVybmFsXCIsZS5UcmFja1Zpc2l0ZWRTaXRlSW50ZXJuYWw9XCJ0cmFja1Zpc2l0ZWRTaXRlSW50ZXJuYWxcIixlLkdldFJlY2VudGx5VmlzaXRlZFNpdGVzSW50ZXJuYWw9XCJnZXRSZWNlbnRseVZpc2l0ZWRTaXRlc0ludGVybmFsXCIsZS5HZXRGcmVxdWVudGx5VmlzaXRlZFNpdGVzSW50ZXJuYWw9XCJnZXRGcmVxdWVudGx5VmlzaXRlZFNpdGVzSW50ZXJuYWxcIixlLlNlYXJjaFNpdGVzSW50ZXJuYWw9XCJzZWFyY2hTaXRlc0ludGVybmFsXCIsZS5HZXRDdXJhdGVkQ29udGVudEludGVybmFsPVwiZ2V0Q3VyYXRlZENvbnRlbnRJbnRlcm5hbFwiLGUuSGFuZGxlUmVxdWVzdE5hdmlnYXRpb25JbnRlcm5hbD1cImhhbmRsZVJlcXVlc3ROYXZpZ2F0aW9uSW50ZXJuYWxcIixlLlJlZnJlc2hCb29rbWFya3NJbnRlcm5hbD1cInJlZnJlc2hCb29rbWFya3NJbnRlcm5hbFwiLGUuR2V0Tm90aWZpY2F0aW9uc0NvbmZpZz1cImdldE5vdGlmaWNhdGlvbnNDb25maWdcIn0ocnx8KHI9e30pKTtjb25zdCBvPWFzeW5jIGU9PmZpbi5QbGF0Zm9ybS53cmFwU3luYyhlKS5nZXRDbGllbnQoKSxpPWFzeW5jIGU9Pntjb25zdCB0PWF3YWl0IG8oZSksbj1cIlRhcmdldCBpcyBub3QgYSBXb3Jrc3BhY2UgUGxhdGZvcm0uIFRhcmdldCBtdXN0IGNhbGwgV29ya3NwYWNlUGxhdGZvcm0uaW5pdFwiO2xldCByO3RyeXtyPWF3YWl0IHQuZGlzcGF0Y2goXCJpc1dvcmtzcGFjZVBsYXRmb3JtXCIpfWNhdGNoKGUpe3Rocm93IG5ldyBFcnJvcihuKX1pZihcImJvb2xlYW5cIj09dHlwZW9mIHImJnIpcmV0dXJuIGNvbnNvbGUud2FybihcIllvdSBhcmUgdXNpbmcgYW4gb2xkZXIgdmVyc2lvbiBvZiB0aGUgd29ya3NwYWNlIHBsYXRmb3JtLiBQbGVhc2UgdXBkYXRlIHlvdXIgd29ya3NwYWNlIHBsYXRmb3JtLlwiKSxyO2lmKFwib2JqZWN0XCI9PXR5cGVvZiByJiZyLmlzV29ya3NwYWNlUGxhdGZvcm0pcmV0dXJuIHI7dGhyb3cgbmV3IEVycm9yKG4pfSxhPWFzeW5jIGU9Pihhd2FpdCBpKGUpLG8oZSkpLGw9YXN5bmMgZT0+e2NvbnN0IHQ9YXdhaXQgaShlKTtpZihcIm9iamVjdFwiPT10eXBlb2YgdCYmITAhPT10Py5pc0Jyb3dzZXJJbml0aWFsaXplZCl0aHJvdyBuZXcgRXJyb3IoXCJUYXJnZXQgaXMgbm90IGEgQnJvd3Nlci1lbmFibGVkIFdvcmtzcGFjZSBQbGF0Zm9ybS5cIik7cmV0dXJuIG8oZSl9fSw1MTUwOihlLHQsbik9PntcInVzZSBzdHJpY3RcIjtuLmQodCx7RG06KCk9PnMsVkQ6KCk9PnUsWGw6KCk9PnAsYUI6KCk9PmQseFo6KCk9Pmh9KTt2YXIgcj1uKDkxMTcpLG89big2Njc4KSxpPW4oMTIxKSxhPW4oNzA0Nik7Y29uc3QgbD0oMCxyLlopKFwiX19vZl93b3Jrc3BhY2VfcHJvdG9jb2xfX1wiKSxzPWwsYz1sLHU9KDAsci5aKShhLlF4KSxmPWU9Pntjb25zdCB0PW5ldyBVUkwoZSk7cmV0dXJuIHQuc2VhcmNoUGFyYW1zLmFwcGVuZChcImlzTGF1bmNoZWRWaWFMaWJcIixcInRydWVcIiksdC50b1N0cmluZygpfSxkPWFzeW5jKCk9PntpZighYXdhaXQoMCxpLkpWKShpLmlXKSl7aWYoby5aS3x8LTE9PT1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoXCJXaW5cIikpcmV0dXJuIHZvaWQgYXdhaXQgZmluLkFwcGxpY2F0aW9uLnN0YXJ0RnJvbU1hbmlmZXN0KGYoby5hVykpO2F3YWl0IGZpbi5TeXN0ZW0ub3BlblVybFdpdGhCcm93c2VyKGYoby5HWCkpfX0scD1hc3luYygpPT4oYXdhaXQgZCgpLHMoKSksaD1hc3luYygpPT4oYXdhaXQgZCgpLGMoKSl9LDcwNDY6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24uZCh0LHtReDooKT0+cix3MTooKT0+aX0pO2NvbnN0IHI9XCJfX3NlYXJjaC1vcGVuZmluLWJyb3dzZXItaG9tZS10b3BpY19fXCI7dmFyIG8saTshZnVuY3Rpb24oZSl7ZS5GZXRjaGluZz1cImZldGNoaW5nXCIsZS5GZXRjaGVkPVwiZmV0Y2hlZFwiLGUuQ29tcGxldGU9XCJjb21wbGV0ZVwifShvfHwobz17fSkpLGZ1bmN0aW9uKGUpe2VbZS5Jbml0aWFsPTBdPVwiSW5pdGlhbFwiLGVbZS5PcGVuPTFdPVwiT3BlblwiLGVbZS5DbG9zZT0yXT1cIkNsb3NlXCJ9KGl8fChpPXt9KSl9LDE2NDY6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24uZCh0LHtlOigpPT5vfSk7dmFyIHI9big4NDIzKTtjb25zdCBvPWU9Pntjb25zdCB0PWZpbi5QbGF0Zm9ybS5MYXlvdXQud3JhcFN5bmMoZSk7cmV0dXJue3Nob3c6YXN5bmMoKT0+e2NvbnN0IG49YXdhaXQgdC5nZXRDb25maWcoKSx7c2V0dGluZ3M6byxkaW1lbnNpb25zOml9PW4sYT1hd2FpdCgwLHIuWVEpKGUpO2F3YWl0IHQucmVwbGFjZSh7Li4ubixzZXR0aW5nczp7Li4ubyxoYXNIZWFkZXJzOiEwLHJlb3JkZXJFbmFibGVkOiEwfSxkaW1lbnNpb25zOnsuLi5pLGhlYWRlckhlaWdodDphPzI4OjMwfX0pfSxoaWRlOmFzeW5jIGU9Pntjb25zdCBuPWF3YWl0IHQuZ2V0Q29uZmlnKCkse3NldHRpbmdzOnIsZGltZW5zaW9uczpvfT1hd2FpdCBuO2F3YWl0IHQucmVwbGFjZSh7Li4ubixzZXR0aW5nczp7Li4ucixoYXNIZWFkZXJzOiExLHJlb3JkZXJFbmFibGVkOmU/LnNldHRpbmdzPy5yZW9yZGVyRW5hYmxlZD8/ITF9LGRpbWVuc2lvbnM6ey4uLm8saGVhZGVySGVpZ2h0OjB9fSl9LGlzU2hvd2luZ1RhYnM6YXN5bmMoKT0+e3RyeXtjb25zdCBlPWF3YWl0IHQuZ2V0Q29uZmlnKCkse3NldHRpbmdzOm59PWF3YWl0IGU7cmV0dXJuIG4uaGFzSGVhZGVyc31jYXRjaChlKXtyZXR1cm4gY29uc29sZS5lcnJvcihcImZhaWxlZCB0byBnZXQgbGF5b3V0IGNvbmZpZzogXCIsZSksITB9fX19fSwxMDY1OihlLHQsbik9PntcInVzZSBzdHJpY3RcIjt2YXIgcj1uKDUzMDQpO24oMTIxKSxuKDg2MzYpLG4oNzEwMCksbig1MTUwKSxuKDU0MzgpO2NvbnN0IG89e1tyLlBhbGV0dGUuYnJhbmRQcmltYXJ5XTpcIiMwQTc2RDNcIixbci5QYWxldHRlLnN0YXR1c1N1Y2Nlc3NdOnIuQ29sb3IuZnVuY3Rpb25hbDEsW3IuUGFsZXR0ZS5zdGF0dXNXYXJuaW5nXTpyLkNvbG9yLmZ1bmN0aW9uYWwxMCxbci5QYWxldHRlLnN0YXR1c0NyaXRpY2FsXTpyLkNvbG9yLmZ1bmN0aW9uYWw3LFtyLlBhbGV0dGUuc3RhdHVzQWN0aXZlXTpyLkNvbG9yLmZ1bmN0aW9uYWwzLFtyLlBhbGV0dGUuY29udGVudEJhY2tncm91bmQxXTpcIiMwQTc2RDNcIixbci5QYWxldHRlLmNvbnRlbnRCYWNrZ3JvdW5kMl06XCIjMDAwMDAwXCIsW3IuUGFsZXR0ZS5jb250ZW50QmFja2dyb3VuZDNdOlwiIzAwMDAwMFwiLFtyLlBhbGV0dGUuY29udGVudEJhY2tncm91bmQ0XTpcIiMwMDAwMDBcIixbci5QYWxldHRlLmNvbnRlbnRCYWNrZ3JvdW5kNV06XCIjMDAwMDAwXCJ9LGk9ey4uLm8sW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kMV06ci5Db2xvci53aGl0ZSxbci5QYWxldHRlLmJhY2tncm91bmQyXTpyLkNvbG9yLmxpZ2h0R3JheTEsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kM106ci5Db2xvci5saWdodEdyYXkyLFtyLlBhbGV0dGUuYmFja2dyb3VuZDRdOnIuQ29sb3IubGlnaHRHcmF5Myxbci5QYWxldHRlLmJhY2tncm91bmQ1XTpyLkNvbG9yLmxpZ2h0R3JheTQsW3IuUGFsZXR0ZS5iYWNrZ3JvdW5kNl06ci5Db2xvci5saWdodEdyYXk1LFtyLlBhbGV0dGUuYnJhbmRTZWNvbmRhcnldOnIuQ29sb3IubGlnaHRHcmF5NCxbci5QYWxldHRlLmlucHV0QmFja2dyb3VuZF06ci5Db2xvci5saWdodEdyYXkzLFtyLlBhbGV0dGUuaW5wdXRDb2xvcl06ci5Db2xvci5kYXJrR3JheTUsW3IuUGFsZXR0ZS5pbnB1dFBsYWNlaG9sZGVyXTpyLkNvbG9yLmRhcmtHcmF5Mixbci5QYWxldHRlLmlucHV0RGlzYWJsZWRdOnIuQ29sb3IubmV1dHJhbEdyYXksW3IuUGFsZXR0ZS5pbnB1dEZvY3VzZWRdOnIuQ29sb3IubGlnaHRHcmF5NSxbci5QYWxldHRlLmlucHV0Qm9yZGVyXTpyLkNvbG9yLm5ldXRyYWxHcmF5LFtyLlBhbGV0dGUudGV4dERlZmF1bHRdOnIuQ29sb3IuZGFya0dyYXk1LFtyLlBhbGV0dGUudGV4dEhlbHBdOnIuQ29sb3IuZGFya0dyYXkzLFtyLlBhbGV0dGUudGV4dEluYWN0aXZlXTpyLkNvbG9yLm5ldXRyYWxHcmF5fSxhPXsuLi5vLFtyLlBhbGV0dGUuYmFja2dyb3VuZDFdOnIuQ29sb3IuZGFya0dyYXk2LFtyLlBhbGV0dGUuYmFja2dyb3VuZDJdOnIuQ29sb3IuZGFya0dyYXk1LFtyLlBhbGV0dGUuYmFja2dyb3VuZDNdOnIuQ29sb3IuZGFya0dyYXk0LFtyLlBhbGV0dGUuYmFja2dyb3VuZDRdOnIuQ29sb3IuZGFya0dyYXkzLFtyLlBhbGV0dGUuYmFja2dyb3VuZDVdOnIuQ29sb3IuZGFya0dyYXkyLFtyLlBhbGV0dGUuYmFja2dyb3VuZDZdOnIuQ29sb3IuZGFya0dyYXkxLFtyLlBhbGV0dGUuYnJhbmRTZWNvbmRhcnldOnIuQ29sb3IuZGFya0dyYXkyLFtyLlBhbGV0dGUuaW5wdXRCYWNrZ3JvdW5kXTpyLkNvbG9yLmRhcmtHcmF5MSxbci5QYWxldHRlLmlucHV0Q29sb3JdOnIuQ29sb3Iud2hpdGUsW3IuUGFsZXR0ZS5pbnB1dFBsYWNlaG9sZGVyXTpyLkNvbG9yLmxpZ2h0R3JheTUsW3IuUGFsZXR0ZS5pbnB1dERpc2FibGVkXTpyLkNvbG9yLm5ldXRyYWxHcmF5LFtyLlBhbGV0dGUuaW5wdXRGb2N1c2VkXTpyLkNvbG9yLmxpZ2h0R3JheTUsW3IuUGFsZXR0ZS5pbnB1dEJvcmRlcl06ci5Db2xvci5uZXV0cmFsR3JheSxbci5QYWxldHRlLnRleHREZWZhdWx0XTpyLkNvbG9yLndoaXRlLFtyLlBhbGV0dGUudGV4dEhlbHBdOnIuQ29sb3IubGlnaHRHcmF5NSxbci5QYWxldHRlLnRleHRJbmFjdGl2ZV06ci5Db2xvci5uZXV0cmFsR3JheX07ci5Db2xvci5saWdodEdyYXk0LHIuQ29sb3IuZGFya0dyYXk1LHIuQ29sb3IuZGFya0dyYXkyLHIuQ29sb3IuZGFya0dyYXk1fSw1ODA2OihlLHQsbik9PntcInVzZSBzdHJpY3RcIjtuLmQodCx7RDk6KCk9PmMsVFo6KCk9PnUscTk6KCk9PnJ9KTt2YXIgcixvLGk9big2Njc4KTshZnVuY3Rpb24oZSl7ZS5Xb3Jrc3BhY2U9XCJvcGVuZmluLXdvcmtzcGFjZVwiLGUuT2xkV29ya3NwYWNlPVwib3BlbmZpbi1icm93c2VyXCJ9KHJ8fChyPXt9KSksZnVuY3Rpb24oZSl7ZS5GaW5Qcm90b2NvbD1cImZpbi1wcm90b2NvbFwifShvfHwobz17fSkpO2NvbnN0IGE9e3V1aWQ6aS5BQn0sbD17dXVpZDpyLldvcmtzcGFjZX0scz1lPT57aWYoIWkuc1MpdGhyb3cgbmV3IEVycm9yKFwiZ2V0QXBwbGljYXRpb24gY2Fubm90IGJlIHVzZWQgaW4gYSBub24gT3BlbkZpbiBlbnYuIEF2b2lkIHVzaW5nIHRoaXMgZHVyaW5nIHByZS1yZW5kZXJpbmcuXCIpO3JldHVybiBmaW4uQXBwbGljYXRpb24ud3JhcFN5bmMoZSl9LGM9KCk9PnMoYSksdT0oKT0+cyhsKX0sOTExNzooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7bi5kKHQse1o6KCk9Pml9KTt2YXIgcj1uKDY2NzgpO2NvbnN0IG89ci5BeCYmXCJjb21wbGV0ZVwiIT09ZG9jdW1lbnQucmVhZHlTdGF0ZSYmbmV3IFByb21pc2UoKGU9PmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJyZWFkeXN0YXRlY2hhbmdlXCIsKCgpPT57XCJjb21wbGV0ZVwiPT09ZG9jdW1lbnQucmVhZHlTdGF0ZSYmZSgpfSkpKSk7ZnVuY3Rpb24gaShlKXtsZXQgdDtjb25zdCBuPW5ldyBTZXQ7cmV0dXJuKCk9PntpZighci5zUyl0aHJvdyBuZXcgRXJyb3IoXCJnZXRDaGFubmVsQ2xpZW50IGNhbm5vdCBiZSB1c2VkIG91dHNpZGUgYW4gT3BlbkZpbiBlbnYuIEF2b2lkIHVzaW5nIHRoaXMgbWV0aG9kIGR1cmluZyBwcmUtcmVuZGVyaW5nLlwiKTtyZXR1cm4gdHx8KHQ9KGFzeW5jKCk9Pnthd2FpdCBvO2NvbnN0IGk9e2NsaWVudEFQSVZlcnNpb246ci51MH0sYT1hd2FpdCBmaW4uSW50ZXJBcHBsaWNhdGlvbkJ1cy5DaGFubmVsLmNvbm5lY3QoZSx7cGF5bG9hZDppfSk7cmV0dXJuIGEub25EaXNjb25uZWN0aW9uKChhc3luYygpPT57bi5mb3JFYWNoKChlPT5lKCkpKSxuLmNsZWFyKCksY29uc29sZS53YXJuKGBkaXNjb25uZWN0ZWQgZnJvbSBjaGFubmVsIHByb3ZpZGVyICR7ZX1gKSx0PXZvaWQgMH0pKSxhfSkoKS50aGVuKChlPT4oZS5hZGREaXNjb25uZWN0aW9uTGlzdGVuZXI9ZT0+e24uYWRkKGUpfSxlKSkpLmNhdGNoKChuPT57dGhyb3cgdD12b2lkIDAsbmV3IEVycm9yKGBmYWlsZWQgdG8gY29ubmVjdCB0byBjaGFubmVsIHByb3ZpZGVyICR7ZX06ICR7bn1gKX0pKSksdH19fSw4NDIzOihlLHQsbik9PntcInVzZSBzdHJpY3RcIjtuLmQodCx7WVE6KCk9PnJ9KTtuKDYwMDUpLG4oMTIxKTtjb25zdCByPWFzeW5jIGU9Pntjb25zdCB0PWU/ZmluLldpbmRvdy53cmFwU3luYyhlKTpmaW4uV2luZG93LmdldEN1cnJlbnRTeW5jKCksbj1hd2FpdCB0LmdldE9wdGlvbnMoKTtyZXR1cm4gbi53b3Jrc3BhY2VQbGF0Zm9ybT8ud2luZG93VHlwZSYmXCJlbnRlcnByaXNlXCI9PT1uLndvcmtzcGFjZVBsYXRmb3JtLndpbmRvd1R5cGV9fSw2Njc4OihlLHQsbik9PntcInVzZSBzdHJpY3RcIjt2YXIgcjtuLmQodCx7QUI6KCk9PnMsQXg6KCk9PmksQ0w6KCk9PnUsR1g6KCk9PmQsWks6KCk9PmYsX1Y6KCk9PmEsYVc6KCk9PnAsb0M6KCk9PmMscng6KCk9Pmcsc1M6KCk9Pm8sdTA6KCk9PnZ9KSxmdW5jdGlvbihlKXtlLkxvY2FsPVwibG9jYWxcIixlLkRldj1cImRldlwiLGUuU3RhZ2luZz1cInN0YWdpbmdcIixlLlByb2Q9XCJwcm9kXCJ9KHJ8fChyPXt9KSk7Y29uc3Qgbz1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZmluLGk9KFwidW5kZWZpbmVkXCI9PXR5cGVvZiBwcm9jZXNzfHxwcm9jZXNzLmVudixcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93KSxhPWkmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBpbmRleGVkREIsbD1pP3dpbmRvdy5vcmlnaW46ci5Mb2NhbCxzPW8mJmZpbi5tZS51dWlkLGM9byYmZmluLm1lLm5hbWUsdT1vJiZmaW4ubWUuZW50aXR5VHlwZSxmPVwicHJvZFwiPT09ci5Mb2NhbCxkPShyLkRldixyLlN0YWdpbmcsci5Qcm9kLFwiZmluczovL3N5c3RlbS1hcHBzL3dvcmtzcGFjZVwiKSxwPVwiaHR0cHM6Ly93b3Jrc3BhY2Uub3BlbmZpbi5jby93b3Jrc3BhY2UvMjAuMS41L2FwcC5qc29uXCIsaD1lPT5lLnN0YXJ0c1dpdGgoXCJodHRwOi8vXCIpfHxlLnN0YXJ0c1dpdGgoXCJodHRwczovL1wiKT9lOmwrZSxnPShoKFwiaHR0cHM6Ly93b3Jrc3BhY2Uub3BlbmZpbi5jby93b3Jrc3BhY2UvMjAuMS41XCIpLGgoXCJodHRwczovL3dvcmtzcGFjZS5vcGVuZmluLmNvL3dvcmtzcGFjZS8yMC4xLjVcIikpLHY9KFwidW5kZWZpbmVkXCIhPXR5cGVvZiBXT1JLU1BBQ0VfRE9DU19QTEFURk9STV9VUkwmJmgoV09SS1NQQUNFX0RPQ1NfUExBVEZPUk1fVVJMKSxcInVuZGVmaW5lZFwiIT10eXBlb2YgV09SS1NQQUNFX0RPQ1NfQ0xJRU5UX1VSTCYmaChXT1JLU1BBQ0VfRE9DU19DTElFTlRfVVJMKSxcIjIwLjEuNVwiKTtcInVuZGVmaW5lZFwiIT10eXBlb2YgV09SS1NQQUNFX0JVSUxEX1NIQSYmV09SS1NQQUNFX0JVSUxEX1NIQX0sODMxMTooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7bi5kKHQse1pTOigpPT51LGRHOigpPT5mfSk7dmFyIHI9bigzMTk4KSxvPW4ubihyKSxpPShuKDY2NzgpLG4oMzQyMCkpLGE9bigxNjQ2KSxsPW4oMzkyNikscz0obig3MDk4KSxuKDEyMSkpO2NvbnN0IGM9KGUsdCk9PmUuY29udGVudD97Li4uZSxjb250ZW50OmUuY29udGVudC5tYXAoKGU9PmMoZSx0KSkpfTp7Li4uZSxjb21wb25lbnRTdGF0ZTp0KGUuY29tcG9uZW50U3RhdGUpfSx1PWU9Pih7Li4uZSxuYW1lOnZvaWQgMH0pLGY9ZT0+e2NvbnN0IHQ9ey4uLmV9O3JldHVybiBjKHQsdSl9LGQ9ZT0+e2NvbnN0IHQ9W107cmV0dXJuKGUmJkFycmF5LmlzQXJyYXkoZSk/ZTpbXSkuZm9yRWFjaCgoZT0+e2lmKFwiY29tcG9uZW50XCI9PT1lLnR5cGUpcmV0dXJuIHQucHVzaChlLmNvbXBvbmVudFN0YXRlKTtjb25zdCBuPWQoZS5jb250ZW50KTt0LnB1c2goLi4ubil9KSksdH07bmV3IE1hcCxuZXcgTWFwO28oKSgoYXN5bmMgZT0+e3RyeXtjb25zdCB0PWF3YWl0KGFzeW5jIGU9PmZpbi5QbGF0Zm9ybS5MYXlvdXQud3JhcFN5bmMoey4uLmZpbi5tZS5pZGVudGl0eSxsYXlvdXROYW1lOmV9KS5nZXRDb25maWcoKSkoZS5sYXlvdXRDb250YWluZXJLZXkpLG49dC5jb250ZW50P2QodC5jb250ZW50KTpbXSxyPW4ubGVuZ3RoO3I+MT8oZT0+e1wibXVsdGlWaWV3XCIhPT1lLmF0dGFjaGVkUGFnZVR5cGUmJigwLGwuYSkoKS5Ccm93c2VyLndyYXBTeW5jKHMuR2kpLnVwZGF0ZVBhZ2Uoe3BhZ2VJZDplLnBhZ2VJZCxwYWdlOntzaW5nbGVWaWV3TmFtZTpudWxsLGF0dGFjaGVkUGFnZVR5cGU6XCJtdWx0aVZpZXdcIn19KX0pKGUpOjE9PT1yJiYoYXN5bmMoZSx0KT0+e2NvbnN0IG49KDAsbC5hKSgpLkJyb3dzZXIud3JhcFN5bmMocy5HaSk7aWYoXCJzaW5nbGVWaWV3XCIhPT1lLmF0dGFjaGVkUGFnZVR5cGUpe2NvbnN0IHI9YXdhaXQoMCxpLlZSKShlKSxvPWF3YWl0KDAsbC5hKSgpLkJyb3dzZXIuZ2V0VW5pcXVlUGFnZVRpdGxlKCk7ZGVsZXRlIHIubGF5b3V0O2NvbnN0IGE9ey4uLnIsc2luZ2xlVmlld05hbWU6dCx0aXRsZTpvLGhhc1Vuc2F2ZWRDaGFuZ2VzOiExLGF0dGFjaGVkUGFnZVR5cGU6XCJzaW5nbGVWaWV3XCJ9O2F3YWl0IG4udXBkYXRlUGFnZSh7cGFnZUlkOmUucGFnZUlkLHBhZ2U6YX0pfX0pKGUsblswXS5uYW1lKSxhd2FpdChhc3luYyhlLHQpPT57Y29uc3Qgbj0oMCxhLmUpKHsuLi5zLkdpLGxheW91dE5hbWU6ZS5sYXlvdXRDb250YWluZXJLZXl9KSxyPWF3YWl0IG4uaXNTaG93aW5nVGFicygpO3Q+MT9yfHxhd2FpdCBuLnNob3coKToxPT09dCYmciYmYXdhaXQgbi5oaWRlKHtzZXR0aW5nczp7cmVvcmRlckVuYWJsZWQ6ITB9fSl9KShlLHIpfWNhdGNoKGUpe319KSw1MCx7bGVhZGluZzohMSx0cmFpbGluZzohMH0pfSw4MDYxOihlLHQsbik9PntcInVzZSBzdHJpY3RcIjt2YXIgcjtuLmQodCx7WjooKT0+b30pLGZ1bmN0aW9uKGUpe2UuQ3VycmVudFdvcmtzcGFjZUlkPVwiY3VycmVudFdvcmtzcGFjZUlkXCIsZS5MYXN0Rm9jdXNlZEJyb3dzZXJXaW5kb3c9XCJsYXN0Rm9jdXNlZEJyb3dzZXJXaW5kb3dcIixlLk1hY2hpbmVOYW1lPVwibWFjaGluZU5hbWVcIixlLk5ld1RhYlBhZ2VMYXlvdXQ9XCJOZXdUYWJQYWdlTGF5b3V0XCIsZS5OZXdUYWJQYWdlU29ydD1cIk5ld1RhYlBhZ2VTb3J0XCIsZS5Eb2NrUG9zaXRpb249XCJEb2NrUG9zaXRpb25cIixlLlNlbGVjdGVkQ29sb3JTY2hlbWU9XCJTZWxlY3RlZENvbG9yU2NoZW1lXCIsZS5IYXNNb3ZlZFN0b3JlPVwiSGFzTW92ZWRTdG9yZVwiLGUuUGFnZURyYWdTdGF0ZT1cIkJyb3dzZXJQYWdlRHJhZ1N0YXRlXCJ9KHJ8fChyPXt9KSk7Y29uc3Qgbz1yfSw0NzI4OihlLHQsbik9PntcInVzZSBzdHJpY3RcIjtuLmQodCx7TFM6KCk9Pm8sclY6KCk9Pml9KTt2YXIgcj1uKDY2NzgpO2NvbnN0IG89KGUsdCk9Pntsb2NhbFN0b3JhZ2Uuc2V0SXRlbShgJHtyLkFCfS0ke2V9YCx0KX0saT1lPT5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShgJHtyLkFCfS0ke2V9YCl9LDcyNzg6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24uZCh0LHtaOigpPT5vfSk7Y29uc3Qgcj1cIm9mLXdvcmtzcGFjZS1cIjtjb25zdCBvPW5ldyBjbGFzc3ttYXJrKGUpe3BlcmZvcm1hbmNlLm1hcmsoYCR7cn0ke2V9YCl9bWFya1N0YXJ0KGUpe3BlcmZvcm1hbmNlLm1hcmsoYCR7cn0ke2V9LXN0YXJ0YCl9bWFya0VuZChlKXtwZXJmb3JtYW5jZS5tYXJrKGAke3J9JHtlfS1lbmRgKX1tYXJrRW5kQW5kTWVhc3VyZShlKXtwZXJmb3JtYW5jZS5tYXJrKGAke3J9JHtlfS1lbmRgKTt0cnl7cmV0dXJuIHBlcmZvcm1hbmNlLm1lYXN1cmUoYCR7cn0ke2V9YCxgJHtyfSR7ZX0tc3RhcnRgLGAke3J9JHtlfS1lbmRgKX1jYXRjaChlKXswfX1tYXJrQW5kTWVhc3VyZShlLHQpe3BlcmZvcm1hbmNlLm1hcmsoYCR7cn0ke2V9YCk7dHJ5e3JldHVybiBwZXJmb3JtYW5jZS5tZWFzdXJlKGAke3J9JHtlfS1tZWFzdXJlYCxgJHtyfSR7dH0tc3RhcnRgLGAke3J9JHtlfWApfWNhdGNoKGUpezB9fXJlcG9ydFdvcmtzcGFjZVBlcmZvcm1hbmNlRW50cmllcygpe3JldHVybiBwZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlUeXBlKFwibWVhc3VyZVwiKS5maWx0ZXIoKGU9PmUubmFtZS5zdGFydHNXaXRoKHIpKSl9cmVwb3J0V29ya3NwYWNlUGVyZm9ybWFuY2UoKXtyZXR1cm4gdGhpcy5yZXBvcnRXb3Jrc3BhY2VQZXJmb3JtYW5jZUVudHJpZXMoKS5tYXAoKGU9Pih7bmFtZTplLm5hbWUucmVwbGFjZShgJHtyfWAsXCJcIikucmVwbGFjZShcIi1tZWFzdXJlXCIsXCJcIiksZHVyYXRpb246ZS5kdXJhdGlvbn0pKSl9fX0sNjAwNTooZSx0LG4pPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIHI7bi5kKHQse1pQOigpPT5sLGRlOigpPT5pfSksZnVuY3Rpb24oZSl7ZS5Ib21lPVwiL2hvbWUvXCIsZS5Ib21lU2VhcmNoPVwiL2hvbWUvP2RlZXBsaW5rPXNlYXJjaFwiLGUuSG9tZVBhZ2VzUmVuYW1lPVwiL2hvbWUvcGFnZXMvcmVuYW1lL1wiLGUuRG9jaz1cIi9kb2NrL1wiLGUuQnJvd3Nlcj1cIi9icm93c2VyL1wiLGUuQnJvd3NlclBvcHVwTWVudT1cIi9icm93c2VyL3BvcHVwLW1lbnUvXCIsZS5Qcm92aWRlcj1cIi9wcm92aWRlci9cIixlLkJyb3dzZXJQb3B1cE1lbnVTYXZlTW9kYWw9XCIvYnJvd3Nlci9wb3B1cC1tZW51L3NhdmUtbW9kYWwvXCIsZS5Ccm93c2VyUG9wdXBNZW51TGF5b3V0cz1cIi9icm93c2VyL3BvcHVwLW1lbnUvbGF5b3V0cy9sYXlvdXRzL1wiLGUuQnJvd3NlclBvcHVwTWVudUNvbG9yTGlua2luZz1cIi9icm93c2VyL3BvcHVwLW1lbnUvY29sb3ItbGlua2luZy9jb2xvci1saW5raW5nL1wiLGUuQnJvd3NlckluZGljYXRvcj1cIi9icm93c2VyL2luZGljYXRvci9cIixlLkJyb3dzZXJQb3B1cE1lbnVBZGRyZXNzU2VhcmNoUmVzdWx0c1ZpZXc9XCIvYnJvd3Nlci9wb3B1cC1tZW51L2FkZHJlc3Mtc2VhcmNoLXJlc3VsdHMtdmlldy9cIixlLlJlc3BvbnNlTW9kYWw9XCIvYnJvd3Nlci9wb3B1cC1tZW51L3Jlc3BvbnNlLW1vZGFsL1wiLGUuQ2xvc2VDb25maXJtYXRpb25Nb2RhbD1cIi9icm93c2VyL3BvcHVwLW1lbnUvY2xvc2UtY29uZmlybWF0aW9uLW1vZGFsL1wiLGUuRG9jcz1cIi9wcm92aWRlci9kb2NzL1wiLGUuU3RvcmVmcm9udD1cIi9zdG9yZWZyb250L1wiLGUuRGVwcmVjYXRlZEFsZXJ0PVwiL3Byb3ZpZGVyL2RlcHJlY2F0ZWQtYWxlcnQvXCIsZS5BbmFseXRpY3M9XCIvcHJvdmlkZXIvYW5hbHl0aWNzL1wiLGUuRW50ZXJwcmlzZUJyb3dzZXI9XCIvYnJvd3Nlci9lbnRlcnByaXNlL1wiLGUuRW50ZXJwcmlzZUNvbnRleHRNZW51PVwiL2Jyb3dzZXIvZW50ZXJwcmlzZS9jb250ZXh0LW1lbnUvXCIsZS5FbnRlcnByaXNlQm9va21hcmtEaWFsb2c9XCIvYnJvd3Nlci9lbnRlcnByaXNlL2Jvb2ttYXJrLWRpYWxvZy9cIixlLkRyb3Bkb3duTWVudT1cIi9icm93c2VyL2VudGVycHJpc2UvZHJvcGRvd24tbWVudS9cIn0ocnx8KHI9e30pKTtjb25zdCBvPVwiL21pY3Jvc29mdC0zNjUtaW50ZWdyYXRpb24tYXNzZXRzL1wiLGk9e0ljb25PcGVuRmluTG9nbzpcIi9pY29ucy9vcGVuZmlubG9nby5zdmdcIixJY29uRmlsdGVyOlwiL2ljb25zL2ZpbHRlci5zdmdcIixMaWdodFN0b3JlZnJvbnQ6XCIvaWNvbnMvc3RvcmUtaWNvbi1saWdodC5wbmdcIixEYXJrU3RvcmVmcm9udDpcIi9pY29ucy9zdG9yZS1pY29uLWRhcmsucG5nXCIsQ2FsbEljb25MaWdodDpcIi9pY29ucy9jYWxsLWljb24tbGlnaHQuc3ZnXCIsQ2FsbEljb25EYXJrOlwiL2ljb25zL2NhbGwtaWNvbi1kYXJrLnN2Z1wiLENoYXRJY29uTGlnaHQ6XCIvaWNvbnMvY2hhdC1pY29uLWxpZ2h0LnN2Z1wiLENoYXRJY29uRGFyazpcIi9pY29ucy9jaGF0LWljb24tZGFyay5zdmdcIixNZXNzYWdlSWNvbkxpZ2h0OlwiL2ljb25zL21lc3NhZ2UtaWNvbi1saWdodC5zdmdcIixNZXNzYWdlSWNvbkRhcms6XCIvaWNvbnMvbWVzc2FnZS1pY29uLWRhcmsuc3ZnXCIsTWljcm9zb2Z0MzY1QXNzZXRzOntNaWNyb3NvZnQzNjVEb2N1bWVudEljb246YCR7b31taWNyb3NvZnQtMzY1LWRvY3VtZW50LWljb24uc3ZnYCxNaWNyb3NvZnQzNjVFeGNlbEljb246YCR7b31taWNyb3NvZnQtMzY1LWV4Y2VsLWljb24uc3ZnYCxNaWNyb3NvZnQzNjVQb3dlcnBvaW50SWNvbjpgJHtvfW1pY3Jvc29mdC0zNjUtcG93ZXJwb2ludC1pY29uLnN2Z2AsTWljcm9zb2Z0MzY1T3V0bG9va0ljb246YCR7b31taWNyb3NvZnQtMzY1LW91dGxvb2staWNvbi5zdmdgLE1pY3Jvc29mdDM2NVRlYW1zSWNvbjpgJHtvfW1pY3Jvc29mdC0zNjUtdGVhbXMtaWNvbi5zdmdgLE1pY3Jvc29mdDM2NUljb246YCR7b31taWNyb3NvZnQtMzY1LWljb24uc3ZnYCxQREZGaWxlSWNvbjpgJHtvfXBkZi1maWxlLWljb24uc3ZnYH0sRG9ja0ljb25MaWdodDpcIi9pY29ucy9kb2NrLWljb24tbGlnaHQucG5nXCIsRG9ja0ljb25EYXJrOlwiL2ljb25zL2RvY2staWNvbi1kYXJrLnBuZ1wifTt2YXIgYTshZnVuY3Rpb24oZSl7ZS5TZWFyY2g9XCJzZWFyY2hcIn0oYXx8KGE9e30pKTtjb25zdCBsPXJ9LDY2NTA6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24uZCh0LHtLMzooKT0+aX0pO3ZhciByO24oNjY3OCk7IWZ1bmN0aW9uKGUpe2UuSG9tZT1cIi9ob21lXCIsZS5Ccm93c2VyPVwiL2Jyb3dzZXJcIixlLlByb3ZpZGVyPVwiL3Byb3ZpZGVyXCIsZS5TdG9yZWZyb250PVwiL3N0b3JlZnJvbnRcIixlLkRvY2s9XCIvZG9ja1wifShyfHwocj17fSkpO2NvbnN0IG89XCIvd29ya3NwYWNlLzIwLjEuNVwiO2Z1bmN0aW9uIGkoZSl7cmV0dXJuIG8rZX19LDU5MTI6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24uZCh0LHskdzooKT0+YSxYNTooKT0+b30pO24oODMxMSk7dmFyIHI9big4MDYxKTtmdW5jdGlvbiBvKCl7cmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKHIuWi5NYWNoaW5lTmFtZSk/P1widW5rbm93blwifWxldCBpO2FzeW5jIGZ1bmN0aW9uIGEoKXtyZXR1cm4gaXx8KGk9YXdhaXQgZmluLlN5c3RlbS5nZXRNYWNoaW5lSWQoKSksaX19LDY1MzI6KGUsdCxuKT0+e1widXNlIHN0cmljdFwiO24uZCh0LHtXbjooKT0+YyxjazooKT0+bCxkOTooKT0+c30pO3ZhciByLG89big2Njc4KSxpPW4oMTIxKTtuKDg2MzYpOyFmdW5jdGlvbihlKXtlLkJyb3dzZXI9XCJCcm93c2VyXCIsZS5Eb2NrPVwiRG9ja1wiLGUuSG9tZT1cIkhvbWVcIixlLk5vdGlmaWNhdGlvbj1cIk5vdGlmaWNhdGlvblwiLGUuU3RvcmVmcm9udD1cIlN0b3JlZnJvbnRcIixlLlBsYXRmb3JtPVwiUGxhdGZvcm1cIixlLlRoZW1pbmc9XCJUaGVtaW5nXCIsZS5NaWNyb2Zsb3c9XCJNaWNyb2Zsb3dcIn0ocnx8KHI9e30pKTtjb25zdCBhPWFzeW5jKGUsdCxuPVwid29ya3NwYWNlLWxpY2Vuc2luZ1wiKT0+e2NvbnN0IHI9e2FwaVZlcnNpb246dC5hcGlWZXJzaW9ufHxvLnUwLGNvbXBvbmVudE5hbWU6ZSxjb21wb25lbnRWZXJzaW9uOnQuY29tcG9uZW50VmVyc2lvbnx8by51MCxhbGxvd2VkOnQuYWxsb3dlZCxyZWplY3Rpb25Db2RlOnQucmVqZWN0aW9uQ29kZX07ZmluLlN5c3RlbS5yZWdpc3RlclVzYWdlKHt0eXBlOm4sZGF0YTpyfSl9O2NvbnN0IGw9ZT0+e2kuT0kudXVpZD09PWkuR2kudXVpZCYmaS5PSS5uYW1lPT09aS5HaS5uYW1lfHxhKHIuSG9tZSxlKX0scz1lPT57YShyLlN0b3JlZnJvbnQsZSl9LGM9ZT0+e2Eoci5Eb2NrLGUpfTtuZXcgTWFwfSw5NjEwOihlLHQsbik9PntcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiByKCl7cmV0dXJuIHZvaWQgMCE9PXR5cGVvZiBjcnlwdG8mJlwicmFuZG9tVVVJRFwiaW4gY3J5cHRvJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBjcnlwdG8ucmFuZG9tVVVJRD9jcnlwdG8ucmFuZG9tVVVJRCgpOlwiMTAwMDAwMDAtMTAwMC00MDAwLTgwMDAtMTAwMDAwMDAwMDAwXCIucmVwbGFjZSgvWzAxOF0vZywoZT0+KGVeY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheSgxKSlbMF0mMTU+PmUvNCkudG9TdHJpbmcoMTYpKSl9bi5kKHQse0g6KCk9PnJ9KX0sMTIxOihlLHQsbik9PntcInVzZSBzdHJpY3RcIjtuLmQodCx7QjooKT0+ZCxHUDooKT0+cCxHaTooKT0+bCxJQTooKT0+cixKVjooKT0+aCxPSTooKT0+cyxaSjooKT0+YyxpVzooKT0+ZixuZDooKT0+dX0pO3ZhciByLG89big1ODA2KSxpPW4oNjY3OCk7IWZ1bmN0aW9uKGUpe2UuSG9tZT1cIm9wZW5maW4taG9tZVwiLGUuRG9jaz1cIm9wZW5maW4tZG9ja1wiLGUuU3RvcmVmcm9udD1cIm9wZW5maW4tc3RvcmVmcm9udFwiLGUuSG9tZUludGVybmFsPVwib3BlbmZpbi1ob21lLWludGVybmFsXCIsZS5Ccm93c2VyTWVudT1cIm9wZW5maW4tYnJvd3Nlci1tZW51XCIsZS5Ccm93c2VyU2F2ZU1lbnU9XCJvcGVuZmluLWJyb3dzZXItc2F2ZS1tZW51XCIsZS5Ccm93c2VySW5kaWNhdG9yPVwib3BlbmZpbi1icm93c2VyLWluZGljYXRvclwiLGUuQnJvd3NlcldpbmRvdz1cImludGVybmFsLWdlbmVyYXRlZC13aW5kb3dcIixlLkNsYXNzaWNXaW5kb3c9XCJpbnRlcm5hbC1nZW5lcmF0ZWQtY2xhc3NpYy13aW5kb3dcIixlLkVudGVycHJpc2VDb250ZXh0TWVudT1cIm9wZW5maW4tZW50ZXJwcmlzZS1jb250ZXh0LW1lbnVcIixlLkJyb3dzZXJBZGRyZXNzU2VhcmNoUHJlZml4PVwib3BlbmZpbi1icm93c2VyLW1lbnUtYWRkcmVzcy1zZWFyY2gtXCIsZS5FbnRlcnByaXNlQm9va21hcmtEaWFsb2dXaW5kb3c9XCJvcGVuZmluLWVudGVycHJpc2UtYm9va21hcmstZGlhbG9nXCIsZS5Ecm9wZG93bk1lbnU9XCJvcGVuZmluLWVudGVycHJpc2UtZHJvcGRvd24tbWVudVwifShyfHwocj17fSkpO2Z1bmN0aW9uIGEoZSl7aWYoIWkuc1MpdGhyb3cgbmV3IEVycm9yKFwiZ2V0T0ZXaW5kb3cgY2FuIG9ubHkgYmUgdXNlZCBpbiBhbiBPcGVuRmluIGVudi4gQXZvaWQgY2FsbGluZyB0aGlzIG1ldGhvZCBkdXJpbmcgcHJlLXJlbmRlcmluZy5cIik7cmV0dXJuIGZpbi5XaW5kb3cud3JhcFN5bmMoZSl9Y29uc3QgbD17bmFtZTppLm9DLHV1aWQ6aS5BQn07Y29uc3Qgcz17bmFtZTpyLkhvbWUsdXVpZDpvLnE5LldvcmtzcGFjZX0sYz17bmFtZTpyLkRvY2ssdXVpZDpvLnE5LldvcmtzcGFjZX0sdT17bmFtZTpyLlN0b3JlZnJvbnQsdXVpZDpvLnE5LldvcmtzcGFjZX0sZj17bmFtZTpvLnE5LldvcmtzcGFjZSx1dWlkOm8ucTkuV29ya3NwYWNlfTtjb25zdCBkPWFzeW5jIGU9Pnt0cnl7Y29uc3QgdD1hd2FpdCBmaW4uV2luZG93LndyYXBTeW5jKHtuYW1lOmUubmFtZSx1dWlkOmUudXVpZD8/ZmluLm1lLnV1aWR9KS5nZXRPcHRpb25zKCk7cmV0dXJuKFwiYnJvd3NlclwiPT09dC53b3Jrc3BhY2VQbGF0Zm9ybT8ud2luZG93VHlwZXx8XCJlbnRlcnByaXNlXCI9PT10LndvcmtzcGFjZVBsYXRmb3JtPy53aW5kb3dUeXBlKSYmdC53b3Jrc3BhY2VQbGF0Zm9ybT8ucGFnZXN9Y2F0Y2goZSl7cmV0dXJuIGNvbnNvbGUud2FybihcImlzQnJvd3NlcldpbmRvdyBlcnJvcjogXCIsZSksITF9fTthc3luYyBmdW5jdGlvbiBwKCl7Y29uc3QgZT1hd2FpdCBmaW4uQXBwbGljYXRpb24uZ2V0Q3VycmVudFN5bmMoKS5nZXRDaGlsZFdpbmRvd3MoKSx0PWF3YWl0IFByb21pc2UuYWxsKGUubWFwKChhc3luYyBlPT5kKGUuaWRlbnRpdHkpKSkpO3JldHVybiBlLmZpbHRlcigoKGUsbik9PnRbbl0pKX1jb25zdCBoPWU9PmEoZSkuZ2V0T3B0aW9ucygpLnRoZW4oKCgpPT4hMCkpLmNhdGNoKCgoKT0+ITEpKX0sMjMwNDplPT57ZS5leHBvcnRzPXthcmVhOiEwLGJhc2U6ITAsYnI6ITAsY29sOiEwLGVtYmVkOiEwLGhyOiEwLGltZzohMCxpbnB1dDohMCxsaW5rOiEwLG1ldGE6ITAscGFyYW06ITAsc291cmNlOiEwLHRyYWNrOiEwLHdicjohMH19fSx0PXt9O2Z1bmN0aW9uIG4ocil7dmFyIG89dFtyXTtpZih2b2lkIDAhPT1vKXJldHVybiBvLmV4cG9ydHM7dmFyIGk9dFtyXT17ZXhwb3J0czp7fX07cmV0dXJuIGVbcl0oaSxpLmV4cG9ydHMsbiksaS5leHBvcnRzfW4ubj1lPT57dmFyIHQ9ZSYmZS5fX2VzTW9kdWxlPygpPT5lLmRlZmF1bHQ6KCk9PmU7cmV0dXJuIG4uZCh0LHthOnR9KSx0fSxuLmQ9KGUsdCk9Pntmb3IodmFyIHIgaW4gdCluLm8odCxyKSYmIW4ubyhlLHIpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLHtlbnVtZXJhYmxlOiEwLGdldDp0W3JdfSl9LG4uZz1mdW5jdGlvbigpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBnbG9iYWxUaGlzKXJldHVybiBnbG9iYWxUaGlzO3RyeXtyZXR1cm4gdGhpc3x8bmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKX1jYXRjaChlKXtpZihcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93KXJldHVybiB3aW5kb3d9fSgpLG4ubz0oZSx0KT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCksbi5yPWU9PntcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6XCJNb2R1bGVcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSxuLm5jPXZvaWQgMDt2YXIgcj17fTsoKCk9PntcInVzZSBzdHJpY3RcIjtuLnIociksbi5kKHIse0FjdGlvblRyaWdnZXI6KCk9PkdlLnAsQXBwTWFuaWZlc3RUeXBlOigpPT5ZZS5MLEJ1dHRvblN0eWxlOigpPT5xZS5aSixDTElBY3Rpb246KCk9PiQuUHQsQ0xJRmlsdGVyT3B0aW9uVHlwZTooKT0+JC5lbCxDTElUZW1wbGF0ZTooKT0+JC55VyxDb250YWluZXJUZW1wbGF0ZUZyYWdtZW50TmFtZXM6KCk9PnFlLnA2LERvY2s6KCk9PmUsRG9ja0J1dHRvbk5hbWVzOigpPT5kLnYsSG9tZTooKT0+XyxJbnRlZ3JhdGlvbnM6KCk9PnQsTGVnYWN5OigpPT5vLFByZXNlbnRhdGlvblRlbXBsYXRlRnJhZ21lbnROYW1lczooKT0+cWUuR28sU2VhcmNoVGFnQmFja2dyb3VuZDooKT0+R2UudyxTdG9yZWZyb250OigpPT56ZSxTdG9yZWZyb250VGVtcGxhdGU6KCk9PlllLlQsVGVtcGxhdGVGcmFnbWVudFR5cGVzOigpPT5xZS5iSX0pO3ZhciBlPXt9O24ucihlKSxuLmQoZSx7RG9ja0J1dHRvbk5hbWVzOigpPT5kLnYsZGVyZWdpc3RlcjooKT0+bSxtaW5pbWl6ZTooKT0+QyxyZWdpc3RlcjooKT0+dixzaG93OigpPT55fSk7dmFyIHQ9e307bi5yKHQpLG4uZCh0LHtNaWNyb3NvZnQzNjVXb3JrZmxvd0ludGVncmF0aW9uOigpPT5OZX0pO3ZhciBvPXt9O24ucihvKSxuLmQobyx7Z2V0UGFnZXM6KCk9PlVlLGdldFdvcmtzcGFjZXM6KCk9PldlfSk7dmFyIGk9big2Njc4KSxhPW4oNzI3OCksbD1uKDY1MzIpLHM9bigxMjEpLGM9big1MTUwKSx1PW4oNTQzOCk7dmFyIGY9bigyNjkzKSxkPW4oNzQyNyk7bGV0IHAsaDtjb25zdCBnPShlPVtdKT0+e2NvbnN0IHQ9ZS5maWx0ZXIoKGU9PiEhZS5pZCkpLm1hcCgoZT0+ZS5pZCkpO2lmKG5ldyBTZXQodCkuc2l6ZSE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIkRvY2sgcHJvdmlkZXIgYnV0dG9ucyBtdXN0IGhhdmUgdW5pcXVlIGlkZW50aWZpZXJzIGlmIHNwZWNpZmllZC5cIil9LHY9YXN5bmMgZT0+eygwLGYuRSkoXCJkb2NrXCIscy5aSik7Y29uc3QgdD1hd2FpdChhc3luYyBlPT57YXdhaXQoMCx1LkhoKShmaW4ubWUuaWRlbnRpdHkpO2NvbnN0IHQ9YXdhaXQoMCxjLnhaKSgpO2lmKGgpdGhyb3cgbmV3IEVycm9yKFwiRXJyb3IgdXNpbmcgYERvY2sucmVnaXN0ZXJgLiBBIERvY2sgcHJvdmlkZXIgZm9yIHRoaXMgV29ya3NwYWNlIFBsYXRmb3JtIGlzIGFscmVhZHkgcmVnaXN0ZXJlZC4gQ2FsbCBgRG9jay5kZXJlZ2lzdGVyYCBiZWZvcmUgY2FsbGluZyBgRG9jay5yZWdpc3RlcmAgYWdhaW4uXCIpO3JldHVybiBoPWUsZS5jbGllbnRBUElWZXJzaW9uPWkudTAsdC5kaXNwYXRjaChcInJlZ2lzdGVyLXByb3ZpZGVyXCIse3Byb3ZpZGVyVHlwZTpcImRvY2tcIixpbmZvOmV9KX0pKGUpO3JldHVybiBwPW5ldyBQcm9taXNlKCgobixyKT0+e3RyeXsoZT0+e2Uud29ya3NwYWNlQ29tcG9uZW50cyYmIUFycmF5LmlzQXJyYXkoZS53b3Jrc3BhY2VDb21wb25lbnRzKSYmY29uc29sZS53YXJuKFwiVXNpbmcgdGhlIGBXb3Jrc3BhY2VDb21wb25lbnRCdXR0b25PcHRpb25zYCB0eXBlIHRvIGNvbmZpZ3VyZSB0aGUgV29ya3NwYWNlIENvbXBvbmVudHMgQnV0dG9ucyBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIGBXb3Jrc3BhY2VCdXR0b25zQ29uZmlnYCBpbnN0ZWFkLlwiKX0pKGUpLGcoZS5idXR0b25zKSwoMCxsLlduKSh7YWxsb3dlZDohMCxjb21wb25lbnRWZXJzaW9uOnQ/LndvcmtzcGFjZVZlcnNpb259KSxpLnUwLG4oe2NsaWVudEFQSVZlcnNpb246aS51MCx3b3Jrc3BhY2VWZXJzaW9uOnQ/LndvcmtzcGFjZVZlcnNpb24/P1wiXCIsdXBkYXRlRG9ja1Byb3ZpZGVyQ29uZmlnOmFzeW5jIHQ9PntpZighaCl0aHJvdyBuZXcgRXJyb3IoXCJFcnJvciB1c2luZyBgRG9jay51cGRhdGVEb2NrUHJvdmlkZXJDb25maWdgLiBEb2NrIHByb3ZpZGVyIGlzIG5vdCByZWdpc3RlcmVkLiBNYWtlIHN1cmUgdG8gY2FsbCBgRG9jay5yZWdpc3RlcmAgZmlyc3QuXCIpO2codC5idXR0b25zKTtjb25zdCBuPWF3YWl0KDAsYy54WikoKTthd2FpdCBuLmRpc3BhdGNoKFwidXBkYXRlLXByb3ZpZGVyXCIse3Byb3ZpZGVyVHlwZTpcImRvY2tcIixwcm92aWRlcjp7Li4uZSx3b3Jrc3BhY2VDb21wb25lbnRzOnQud29ya3NwYWNlQ29tcG9uZW50cyxidXR0b25zOnQuYnV0dG9ucyx0aXRsZTp0LnRpdGxlLGljb246dC5pY29uLGRpc2FibGVVc2VyUmVhcnJhbmdlbWVudDp0LmRpc2FibGVVc2VyUmVhcnJhbmdlbWVudCxpZDplLmlkfX0pfX0pfWNhdGNoKGUpeygwLGwuV24pKHthbGxvd2VkOiExLHJlamVjdGlvbkNvZGU6ZSBpbnN0YW5jZW9mIEVycm9yP2UubWVzc2FnZTpcInVua25vd25cIn0pLHIoZSkscD12b2lkIDB9ZmluYWxseXthLloubWFya0VuZEFuZE1lYXN1cmUoXCJkb2NrLXJlZ2lzdHJhdGlvblwiKX19KSkscH0sbT1hc3luYygpPT57aWYoYXdhaXQgcCwhaCl0aHJvdyBuZXcgRXJyb3IoXCJFcnJvciB1c2luZyBgRG9jay5kZXJlZ2lzdGVyYC4gRG9jayBwcm92aWRlciBpcyBub3QgcmVnaXN0ZXJlZC4gQ2FsbCBgRG9jay5yZWdpc3RlcmAgYmVmb3JlIGNhbGxpbmcgYERvY2suZGVyZWdpc3RlcmAuXCIpO2NvbnN0IGU9YXdhaXQoMCxjLnhaKSgpO2F3YWl0IGUuZGlzcGF0Y2goXCJkZXJlZ2lzdGVyLXByb3ZpZGVyXCIse3Byb3ZpZGVyVHlwZTpcImRvY2tcIixpZDpoLmlkfSksaD12b2lkIDAscD12b2lkIDB9LEM9YXN5bmMoKT0+e2F3YWl0IHAsYXdhaXQoMCxjLmFCKSgpLGF3YWl0KGFzeW5jIGU9Pihhd2FpdCgwLGMuRG0pKCkpLmRpc3BhdGNoKFwiaGlkZS1wcm92aWRlci13aW5kb3dcIix7cHJvdmlkZXJUeXBlOmV9KSkoXCJkb2NrXCIpfSx5PWFzeW5jKCk9PnthLloubWFya1N0YXJ0KFwiZG9jay1zaG93XCIpLGF3YWl0IHAsYXdhaXQoMCxjLmFCKSgpLGF3YWl0KGFzeW5jIGU9Pihhd2FpdCgwLGMuRG0pKCkpLmRpc3BhdGNoKFwic2hvdy1wcm92aWRlci13aW5kb3dcIix7cHJvdmlkZXJUeXBlOmV9KSkoXCJkb2NrXCIpfTt2YXIgdyxiLHgsXz1uKDMyNjEpLE89ZnVuY3Rpb24oZSx0LG4scixvKXtpZihcIm1cIj09PXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtpZihcImFcIj09PXImJiFvKXRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdD9lIT09dHx8IW86IXQuaGFzKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtyZXR1cm5cImFcIj09PXI/by5jYWxsKGUsbik6bz9vLnZhbHVlPW46dC5zZXQoZSxuKSxufSxMPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKFwiYVwiPT09biYmIXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P2UhPT10fHwhcjohdC5oYXMoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtyZXR1cm5cIm1cIj09PW4/cjpcImFcIj09PW4/ci5jYWxsKGUpOnI/ci52YWx1ZTp0LmdldChlKX07dz1uZXcgV2Vha01hcCxiPW5ldyBXZWFrTWFwLHg9bmV3IFdlYWtNYXA7Y29uc3QgRT1jbGFzc3tjb25zdHJ1Y3RvcihlKXt3LnNldCh0aGlzLHZvaWQgMCksYi5zZXQodGhpcyx2b2lkIDApLHguc2V0KHRoaXMsdm9pZCAwKSxPKHRoaXMsdyxlLFwiZlwiKSxPKHRoaXMsYixuZXcgTWFwLFwiZlwiKSxPKHRoaXMseCxbXSxcImZcIil9Z2V0KGUpe2lmKEwodGhpcyxiLFwiZlwiKS5oYXMoZSkpcmV0dXJuIHRoaXMudXBkYXRlUXVldWUoZSksTCh0aGlzLGIsXCJmXCIpLmdldChlKX1oYXMoZSl7cmV0dXJuIEwodGhpcyxiLFwiZlwiKS5oYXMoZSl9cHV0KGUsdCl7aWYoTCh0aGlzLGIsXCJmXCIpLmhhcyhlKSlMKHRoaXMsYixcImZcIikuc2V0KGUsdCksdGhpcy51cGRhdGVRdWV1ZShlKTtlbHNle2lmKEwodGhpcyx4LFwiZlwiKS5sZW5ndGg9PT1MKHRoaXMsdyxcImZcIikpe2NvbnN0IGU9TCh0aGlzLHgsXCJmXCIpLnNoaWZ0KCk7ZSYmTCh0aGlzLGIsXCJmXCIpLmRlbGV0ZShlKX1MKHRoaXMsYixcImZcIikuc2V0KGUsdCksTCh0aGlzLHgsXCJmXCIpLnB1c2goZSl9fXVwZGF0ZVF1ZXVlKGUpe2NvbnN0IHQ9TCh0aGlzLHgsXCJmXCIpLmluZGV4T2YoZSk7LTEhPT10JiYoTCh0aGlzLHgsXCJmXCIpLnNwbGljZSh0LDEpLEwodGhpcyx4LFwiZlwiKS5wdXNoKGUpKX19O2Z1bmN0aW9uIFMoZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiYhQXJyYXkuaXNBcnJheShlKX1mdW5jdGlvbiBqKGUsLi4udCl7aWYoIXQubGVuZ3RoKXJldHVybiBlO2NvbnN0IG49dC5zaGlmdCgpO3JldHVybiBTKGUpJiZTKG4pJiZPYmplY3QuZW50cmllcyhuKS5mb3JFYWNoKCgoW3Qsbl0pPT57aWYoUyhuKSlyZXR1cm4gZVt0XXx8KGVbdF09e30pLGooZVt0XSxuKTtlW3RdPW59KSksaihlLC4uLnQpfXZhciBNLGssUixQLEksQT1uKDYwMDUpLFQ9big2NjUwKSxIPWZ1bmN0aW9uKGUsdCxuLHIsbyl7aWYoXCJtXCI9PT1yKXRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7aWYoXCJhXCI9PT1yJiYhbyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/ZSE9PXR8fCFvOiF0LmhhcyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7cmV0dXJuXCJhXCI9PT1yP28uY2FsbChlLG4pOm8/by52YWx1ZT1uOnQuc2V0KGUsbiksbn0sQj1mdW5jdGlvbihlLHQsbixyKXtpZihcImFcIj09PW4mJiFyKXRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdD9lIT09dHx8IXI6IXQuaGFzKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7cmV0dXJuXCJtXCI9PT1uP3I6XCJhXCI9PT1uP3IuY2FsbChlKTpyP3IudmFsdWU6dC5nZXQoZSl9O2s9bmV3IFdlYWtNYXAsUj1uZXcgV2Vha01hcCxQPW5ldyBXZWFrTWFwLE09bmV3IFdlYWtTZXQsST1mdW5jdGlvbigpe2NvbnN0IGU9QXJyYXkuZnJvbShCKHRoaXMsayxcImZcIikuZW50cmllcygpKS5yZWR1Y2UoKChlLHQpPT4hZXx8dFsxXS50aW1lc3RhbXA8ZVsxXS50aW1lc3RhbXA/dDplKSxudWxsKTtyZXR1cm4gZT9lWzBdOm51bGx9O2NvbnN0IFY9Y2xhc3N7Y29uc3RydWN0b3IoZT0zZTUsdD0xMDApe00uYWRkKHRoaXMpLGsuc2V0KHRoaXMsdm9pZCAwKSxSLnNldCh0aGlzLHZvaWQgMCksUC5zZXQodGhpcyx2b2lkIDApLEgodGhpcyxrLG5ldyBNYXAsXCJmXCIpLEgodGhpcyxSLGUsXCJmXCIpLEgodGhpcyxQLHQsXCJmXCIpfWdldChlKXtjb25zdCB0PUIodGhpcyxrLFwiZlwiKS5nZXQoZSk7aWYoIXQpcmV0dXJuIG51bGw7cmV0dXJuIERhdGUubm93KCktdC50aW1lc3RhbXA8Qih0aGlzLFIsXCJmXCIpP3QudmFsdWU6KEIodGhpcyxrLFwiZlwiKS5kZWxldGUoZSksbnVsbCl9cHV0KGUsdCl7aWYoQih0aGlzLGssXCJmXCIpLnNpemU+PUIodGhpcyxQLFwiZlwiKSl7Y29uc3QgZT1CKHRoaXMsTSxcIm1cIixJKS5jYWxsKHRoaXMpO251bGwhPWUmJkIodGhpcyxrLFwiZlwiKS5kZWxldGUoZSl9Qih0aGlzLGssXCJmXCIpLnNldChlLHt2YWx1ZTp0LHRpbWVzdGFtcDpEYXRlLm5vdygpfSl9cmVtb3ZlKGUpe0IodGhpcyxrLFwiZlwiKS5kZWxldGUoZSl9Y2xlYXIoKXtCKHRoaXMsayxcImZcIikuY2xlYXIoKX19O3ZhciBELFo9big5NjEwKSwkPW4oMzc1OCksTj1mdW5jdGlvbihlLHQsbixyKXtpZihcImFcIj09PW4mJiFyKXRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdD9lIT09dHx8IXI6IXQuaGFzKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7cmV0dXJuXCJtXCI9PT1uP3I6XCJhXCI9PT1uP3IuY2FsbChlKTpyP3IudmFsdWU6dC5nZXQoZSl9O2NvbnN0IEY9e307Y2xhc3MgVXtjb25zdHJ1Y3RvcihlKXtELnNldCh0aGlzLG5ldyBTZXQpLHRoaXMuX2luaXRpYWxpemVXb3JrZmxvd3M9YXN5bmMoZT10aGlzLmNvbmZpZyk9Pntjb25zdHt3b3JrZmxvd3M6dH09ZTtmb3IoY29uc3QgZSBpbiB0KXtpZighdFtlXS5kaXNhYmxlQXV0b0luaXRpYWxpemUpdHJ5e04odGhpcyxELFwiZlwiKS5oYXMoZSk/Y29uc29sZS53YXJuKGBXb3JrZmxvdyAke2V9IGFscmVhZHkgaW5pdGlhbGl6ZWQuYCk6KE4odGhpcyxELFwiZlwiKS5hZGQoZSksYXdhaXQgdGhpcy5pbml0aWFsaXplV29ya2Zsb3coZSkpfWNhdGNoKHQpe04odGhpcyxELFwiZlwiKS5kZWxldGUoZSksY29uc29sZS5lcnJvcihgRXJyb3IgcmVnaXN0ZXJpbmcgJHtlfTpgLHQpfX19O2NvbnN0IHQ9aih7fSxGLGUpO3RoaXMuY29uZmlnPXR9YXN5bmMgaW5pdGlhbGl6ZVdvcmtmbG93KGUpe04odGhpcyxELFwiZlwiKS5hZGQoZSl9fUQ9bmV3IFdlYWtNYXA7dmFyIFc9ezg3NjplPT57Y29uc3R7QWJvcnRDb250cm9sbGVyOnQsQWJvcnRTaWduYWw6bn09XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp2b2lkIDA7ZS5leHBvcnRzPXQsZS5leHBvcnRzLkFib3J0U2lnbmFsPW4sZS5leHBvcnRzLmRlZmF1bHQ9dH0sNjA6KGUsdCk9Pnt0LmJ5dGVMZW5ndGg9ZnVuY3Rpb24oZSl7dmFyIHQ9bChlKSxuPXRbMF0scj10WzFdO3JldHVybiAzKihuK3IpLzQtcn0sdC50b0J5dGVBcnJheT1mdW5jdGlvbihlKXt2YXIgdCxuLGk9bChlKSxhPWlbMF0scz1pWzFdLGM9bmV3IG8oZnVuY3Rpb24oZSx0LG4pe3JldHVybiAzKih0K24pLzQtbn0oMCxhLHMpKSx1PTAsZj1zPjA/YS00OmE7Zm9yKG49MDtuPGY7bis9NCl0PXJbZS5jaGFyQ29kZUF0KG4pXTw8MTh8cltlLmNoYXJDb2RlQXQobisxKV08PDEyfHJbZS5jaGFyQ29kZUF0KG4rMildPDw2fHJbZS5jaGFyQ29kZUF0KG4rMyldLGNbdSsrXT10Pj4xNiYyNTUsY1t1KytdPXQ+PjgmMjU1LGNbdSsrXT0yNTUmdDtyZXR1cm4gMj09PXMmJih0PXJbZS5jaGFyQ29kZUF0KG4pXTw8MnxyW2UuY2hhckNvZGVBdChuKzEpXT4+NCxjW3UrK109MjU1JnQpLDE9PT1zJiYodD1yW2UuY2hhckNvZGVBdChuKV08PDEwfHJbZS5jaGFyQ29kZUF0KG4rMSldPDw0fHJbZS5jaGFyQ29kZUF0KG4rMildPj4yLGNbdSsrXT10Pj44JjI1NSxjW3UrK109MjU1JnQpLGN9LHQuZnJvbUJ5dGVBcnJheT1mdW5jdGlvbihlKXtmb3IodmFyIHQscj1lLmxlbmd0aCxvPXIlMyxpPVtdLGE9MTYzODMsbD0wLGM9ci1vO2w8YztsKz1hKWkucHVzaChzKGUsbCxsK2E+Yz9jOmwrYSkpO3JldHVybiAxPT09bz8odD1lW3ItMV0saS5wdXNoKG5bdD4+Ml0rblt0PDw0JjYzXStcIj09XCIpKToyPT09byYmKHQ9KGVbci0yXTw8OCkrZVtyLTFdLGkucHVzaChuW3Q+PjEwXStuW3Q+PjQmNjNdK25bdDw8MiY2M10rXCI9XCIpKSxpLmpvaW4oXCJcIil9O2Zvcih2YXIgbj1bXSxyPVtdLG89XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQ4QXJyYXk/VWludDhBcnJheTpBcnJheSxpPVwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL1wiLGE9MDthPDY0OysrYSluW2FdPWlbYV0scltpLmNoYXJDb2RlQXQoYSldPWE7ZnVuY3Rpb24gbChlKXt2YXIgdD1lLmxlbmd0aDtpZih0JTQ+MCl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0XCIpO3ZhciBuPWUuaW5kZXhPZihcIj1cIik7cmV0dXJuLTE9PT1uJiYobj10KSxbbixuPT09dD8wOjQtbiU0XX1mdW5jdGlvbiBzKGUsdCxyKXtmb3IodmFyIG8saSxhPVtdLGw9dDtsPHI7bCs9MylvPShlW2xdPDwxNiYxNjcxMTY4MCkrKGVbbCsxXTw8OCY2NTI4MCkrKDI1NSZlW2wrMl0pLGEucHVzaChuWyhpPW8pPj4xOCY2M10rbltpPj4xMiY2M10rbltpPj42JjYzXStuWzYzJmldKTtyZXR1cm4gYS5qb2luKFwiXCIpfXJbXCItXCIuY2hhckNvZGVBdCgwKV09NjIscltcIl9cIi5jaGFyQ29kZUF0KDApXT02M30sNDg1OihlLHQsbik9Pntjb25zdCByPW4oNjApLG89bigyMTUpLGk9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wuZm9yP1N5bWJvbC5mb3IoXCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbVwiKTpudWxsO3QuQnVmZmVyPXMsdC5TbG93QnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybitlIT1lJiYoZT0wKSxzLmFsbG9jKCtlKX0sdC5JTlNQRUNUX01BWF9CWVRFUz01MDtjb25zdCBhPTIxNDc0ODM2NDc7ZnVuY3Rpb24gbChlKXtpZihlPmEpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBcIicrZSsnXCIgaXMgaW52YWxpZCBmb3Igb3B0aW9uIFwic2l6ZVwiJyk7Y29uc3QgdD1uZXcgVWludDhBcnJheShlKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHQscy5wcm90b3R5cGUpLHR9ZnVuY3Rpb24gcyhlLHQsbil7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInN0cmluZ1wiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7cmV0dXJuIGYoZSl9cmV0dXJuIGMoZSx0LG4pfWZ1bmN0aW9uIGMoZSx0LG4pe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBmdW5jdGlvbihlLHQpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0JiZcIlwiIT09dHx8KHQ9XCJ1dGY4XCIpLCFzLmlzRW5jb2RpbmcodCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK3QpO2NvbnN0IG49MHxnKGUsdCk7bGV0IHI9bChuKTtjb25zdCBvPXIud3JpdGUoZSx0KTtyZXR1cm4gbyE9PW4mJihyPXIuc2xpY2UoMCxvKSkscn0oZSx0KTtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoZSkpcmV0dXJuIGZ1bmN0aW9uKGUpe2lmKFkoZSxVaW50OEFycmF5KSl7Y29uc3QgdD1uZXcgVWludDhBcnJheShlKTtyZXR1cm4gcCh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQsdC5ieXRlTGVuZ3RoKX1yZXR1cm4gZChlKX0oZSk7aWYobnVsbD09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgXCIrdHlwZW9mIGUpO2lmKFkoZSxBcnJheUJ1ZmZlcil8fGUmJlkoZS5idWZmZXIsQXJyYXlCdWZmZXIpKXJldHVybiBwKGUsdCxuKTtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXImJihZKGUsU2hhcmVkQXJyYXlCdWZmZXIpfHxlJiZZKGUuYnVmZmVyLFNoYXJlZEFycmF5QnVmZmVyKSkpcmV0dXJuIHAoZSx0LG4pO2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInZhbHVlXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7Y29uc3Qgcj1lLnZhbHVlT2YmJmUudmFsdWVPZigpO2lmKG51bGwhPXImJnIhPT1lKXJldHVybiBzLmZyb20ocix0LG4pO2NvbnN0IG89ZnVuY3Rpb24oZSl7aWYocy5pc0J1ZmZlcihlKSl7Y29uc3QgdD0wfGgoZS5sZW5ndGgpLG49bCh0KTtyZXR1cm4gMD09PW4ubGVuZ3RofHxlLmNvcHkobiwwLDAsdCksbn1yZXR1cm4gdm9pZCAwIT09ZS5sZW5ndGg/XCJudW1iZXJcIiE9dHlwZW9mIGUubGVuZ3RofHxLKGUubGVuZ3RoKT9sKDApOmQoZSk6XCJCdWZmZXJcIj09PWUudHlwZSYmQXJyYXkuaXNBcnJheShlLmRhdGEpP2QoZS5kYXRhKTp2b2lkIDB9KGUpO2lmKG8pcmV0dXJuIG87aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9U3ltYm9sLnRvUHJpbWl0aXZlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlW1N5bWJvbC50b1ByaW1pdGl2ZV0pcmV0dXJuIHMuZnJvbShlW1N5bWJvbC50b1ByaW1pdGl2ZV0oXCJzdHJpbmdcIiksdCxuKTt0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgXCIrdHlwZW9mIGUpfWZ1bmN0aW9uIHUoZSl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlcicpO2lmKGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIFwiJytlKydcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKX1mdW5jdGlvbiBmKGUpe3JldHVybiB1KGUpLGwoZTwwPzA6MHxoKGUpKX1mdW5jdGlvbiBkKGUpe2NvbnN0IHQ9ZS5sZW5ndGg8MD8wOjB8aChlLmxlbmd0aCksbj1sKHQpO2ZvcihsZXQgcj0wO3I8dDtyKz0xKW5bcl09MjU1JmVbcl07cmV0dXJuIG59ZnVuY3Rpb24gcChlLHQsbil7aWYodDwwfHxlLmJ5dGVMZW5ndGg8dCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJvZmZzZXRcIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTtpZihlLmJ5dGVMZW5ndGg8dCsobnx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wibGVuZ3RoXCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7bGV0IHI7cmV0dXJuIHI9dm9pZCAwPT09dCYmdm9pZCAwPT09bj9uZXcgVWludDhBcnJheShlKTp2b2lkIDA9PT1uP25ldyBVaW50OEFycmF5KGUsdCk6bmV3IFVpbnQ4QXJyYXkoZSx0LG4pLE9iamVjdC5zZXRQcm90b3R5cGVPZihyLHMucHJvdG90eXBlKSxyfWZ1bmN0aW9uIGgoZSl7aWYoZT49YSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHhcIithLnRvU3RyaW5nKDE2KStcIiBieXRlc1wiKTtyZXR1cm4gMHxlfWZ1bmN0aW9uIGcoZSx0KXtpZihzLmlzQnVmZmVyKGUpKXJldHVybiBlLmxlbmd0aDtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoZSl8fFkoZSxBcnJheUJ1ZmZlcikpcmV0dXJuIGUuYnl0ZUxlbmd0aDtpZihcInN0cmluZ1wiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJzdHJpbmdcIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBlKTtjb25zdCBuPWUubGVuZ3RoLHI9YXJndW1lbnRzLmxlbmd0aD4yJiYhMD09PWFyZ3VtZW50c1syXTtpZighciYmMD09PW4pcmV0dXJuIDA7bGV0IG89ITE7Zm9yKDs7KXN3aXRjaCh0KXtjYXNlXCJhc2NpaVwiOmNhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOnJldHVybiBuO2Nhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOnJldHVybiB6KGUpLmxlbmd0aDtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4gMipuO2Nhc2VcImhleFwiOnJldHVybiBuPj4+MTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4gRyhlKS5sZW5ndGg7ZGVmYXVsdDppZihvKXJldHVybiByPy0xOnooZSkubGVuZ3RoO3Q9KFwiXCIrdCkudG9Mb3dlckNhc2UoKSxvPSEwfX1mdW5jdGlvbiB2KGUsdCxuKXtsZXQgcj0hMTtpZigodm9pZCAwPT09dHx8dDwwKSYmKHQ9MCksdD50aGlzLmxlbmd0aClyZXR1cm5cIlwiO2lmKCh2b2lkIDA9PT1ufHxuPnRoaXMubGVuZ3RoKSYmKG49dGhpcy5sZW5ndGgpLG48PTApcmV0dXJuXCJcIjtpZigobj4+Pj0wKTw9KHQ+Pj49MCkpcmV0dXJuXCJcIjtmb3IoZXx8KGU9XCJ1dGY4XCIpOzspc3dpdGNoKGUpe2Nhc2VcImhleFwiOnJldHVybiBrKHRoaXMsdCxuKTtjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpyZXR1cm4gRSh0aGlzLHQsbik7Y2FzZVwiYXNjaWlcIjpyZXR1cm4gaih0aGlzLHQsbik7Y2FzZVwibGF0aW4xXCI6Y2FzZVwiYmluYXJ5XCI6cmV0dXJuIE0odGhpcyx0LG4pO2Nhc2VcImJhc2U2NFwiOnJldHVybiBMKHRoaXMsdCxuKTtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4gUih0aGlzLHQsbik7ZGVmYXVsdDppZihyKXRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmtub3duIGVuY29kaW5nOiBcIitlKTtlPShlK1wiXCIpLnRvTG93ZXJDYXNlKCkscj0hMH19ZnVuY3Rpb24gbShlLHQsbil7Y29uc3Qgcj1lW3RdO2VbdF09ZVtuXSxlW25dPXJ9ZnVuY3Rpb24gQyhlLHQsbixyLG8pe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4tMTtpZihcInN0cmluZ1wiPT10eXBlb2Ygbj8ocj1uLG49MCk6bj4yMTQ3NDgzNjQ3P249MjE0NzQ4MzY0NzpuPC0yMTQ3NDgzNjQ4JiYobj0tMjE0NzQ4MzY0OCksSyhuPStuKSYmKG49bz8wOmUubGVuZ3RoLTEpLG48MCYmKG49ZS5sZW5ndGgrbiksbj49ZS5sZW5ndGgpe2lmKG8pcmV0dXJuLTE7bj1lLmxlbmd0aC0xfWVsc2UgaWYobjwwKXtpZighbylyZXR1cm4tMTtuPTB9aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQmJih0PXMuZnJvbSh0LHIpKSxzLmlzQnVmZmVyKHQpKXJldHVybiAwPT09dC5sZW5ndGg/LTE6eShlLHQsbixyLG8pO2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0KXJldHVybiB0Jj0yNTUsXCJmdW5jdGlvblwiPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9vP1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChlLHQsbik6VWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChlLHQsbik6eShlLFt0XSxuLHIsbyk7dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlclwiKX1mdW5jdGlvbiB5KGUsdCxuLHIsbyl7bGV0IGksYT0xLGw9ZS5sZW5ndGgscz10Lmxlbmd0aDtpZih2b2lkIDAhPT1yJiYoXCJ1Y3MyXCI9PT0ocj1TdHJpbmcocikudG9Mb3dlckNhc2UoKSl8fFwidWNzLTJcIj09PXJ8fFwidXRmMTZsZVwiPT09cnx8XCJ1dGYtMTZsZVwiPT09cikpe2lmKGUubGVuZ3RoPDJ8fHQubGVuZ3RoPDIpcmV0dXJuLTE7YT0yLGwvPTIscy89MixuLz0yfWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4gMT09PWE/ZVt0XTplLnJlYWRVSW50MTZCRSh0KmEpfWlmKG8pe2xldCByPS0xO2ZvcihpPW47aTxsO2krKylpZihjKGUsaSk9PT1jKHQsLTE9PT1yPzA6aS1yKSl7aWYoLTE9PT1yJiYocj1pKSxpLXIrMT09PXMpcmV0dXJuIHIqYX1lbHNlLTEhPT1yJiYoaS09aS1yKSxyPS0xfWVsc2UgZm9yKG4rcz5sJiYobj1sLXMpLGk9bjtpPj0wO2ktLSl7bGV0IG49ITA7Zm9yKGxldCByPTA7cjxzO3IrKylpZihjKGUsaStyKSE9PWModCxyKSl7bj0hMTticmVha31pZihuKXJldHVybiBpfXJldHVybi0xfWZ1bmN0aW9uIHcoZSx0LG4scil7bj1OdW1iZXIobil8fDA7Y29uc3Qgbz1lLmxlbmd0aC1uO3I/KHI9TnVtYmVyKHIpKT5vJiYocj1vKTpyPW87Y29uc3QgaT10Lmxlbmd0aDtsZXQgYTtmb3Iocj5pLzImJihyPWkvMiksYT0wO2E8cjsrK2Epe2NvbnN0IHI9cGFyc2VJbnQodC5zdWJzdHIoMiphLDIpLDE2KTtpZihLKHIpKXJldHVybiBhO2VbbithXT1yfXJldHVybiBhfWZ1bmN0aW9uIGIoZSx0LG4scil7cmV0dXJuIHEoeih0LGUubGVuZ3RoLW4pLGUsbixyKX1mdW5jdGlvbiB4KGUsdCxuLHIpe3JldHVybiBxKGZ1bmN0aW9uKGUpe2NvbnN0IHQ9W107Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDsrK24pdC5wdXNoKDI1NSZlLmNoYXJDb2RlQXQobikpO3JldHVybiB0fSh0KSxlLG4scil9ZnVuY3Rpb24gXyhlLHQsbixyKXtyZXR1cm4gcShHKHQpLGUsbixyKX1mdW5jdGlvbiBPKGUsdCxuLHIpe3JldHVybiBxKGZ1bmN0aW9uKGUsdCl7bGV0IG4scixvO2NvbnN0IGk9W107Zm9yKGxldCBhPTA7YTxlLmxlbmd0aCYmISgodC09Mik8MCk7KythKW49ZS5jaGFyQ29kZUF0KGEpLHI9bj4+OCxvPW4lMjU2LGkucHVzaChvKSxpLnB1c2gocik7cmV0dXJuIGl9KHQsZS5sZW5ndGgtbiksZSxuLHIpfWZ1bmN0aW9uIEwoZSx0LG4pe3JldHVybiAwPT09dCYmbj09PWUubGVuZ3RoP3IuZnJvbUJ5dGVBcnJheShlKTpyLmZyb21CeXRlQXJyYXkoZS5zbGljZSh0LG4pKX1mdW5jdGlvbiBFKGUsdCxuKXtuPU1hdGgubWluKGUubGVuZ3RoLG4pO2NvbnN0IHI9W107bGV0IG89dDtmb3IoO288bjspe2NvbnN0IHQ9ZVtvXTtsZXQgaT1udWxsLGE9dD4yMzk/NDp0PjIyMz8zOnQ+MTkxPzI6MTtpZihvK2E8PW4pe2xldCBuLHIsbCxzO3N3aXRjaChhKXtjYXNlIDE6dDwxMjgmJihpPXQpO2JyZWFrO2Nhc2UgMjpuPWVbbysxXSwxMjg9PSgxOTImbikmJihzPSgzMSZ0KTw8Nnw2MyZuLHM+MTI3JiYoaT1zKSk7YnJlYWs7Y2FzZSAzOm49ZVtvKzFdLHI9ZVtvKzJdLDEyOD09KDE5MiZuKSYmMTI4PT0oMTkyJnIpJiYocz0oMTUmdCk8PDEyfCg2MyZuKTw8Nnw2MyZyLHM+MjA0NyYmKHM8NTUyOTZ8fHM+NTczNDMpJiYoaT1zKSk7YnJlYWs7Y2FzZSA0Om49ZVtvKzFdLHI9ZVtvKzJdLGw9ZVtvKzNdLDEyOD09KDE5MiZuKSYmMTI4PT0oMTkyJnIpJiYxMjg9PSgxOTImbCkmJihzPSgxNSZ0KTw8MTh8KDYzJm4pPDwxMnwoNjMmcik8PDZ8NjMmbCxzPjY1NTM1JiZzPDExMTQxMTImJihpPXMpKX19bnVsbD09PWk/KGk9NjU1MzMsYT0xKTppPjY1NTM1JiYoaS09NjU1MzYsci5wdXNoKGk+Pj4xMCYxMDIzfDU1Mjk2KSxpPTU2MzIwfDEwMjMmaSksci5wdXNoKGkpLG8rPWF9cmV0dXJuIGZ1bmN0aW9uKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7aWYodDw9UylyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZSk7bGV0IG49XCJcIixyPTA7Zm9yKDtyPHQ7KW4rPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUuc2xpY2UocixyKz1TKSk7cmV0dXJuIG59KHIpfXQua01heExlbmd0aD1hLHMuVFlQRURfQVJSQVlfU1VQUE9SVD1mdW5jdGlvbigpe3RyeXtjb25zdCBlPW5ldyBVaW50OEFycmF5KDEpLHQ9e2ZvbzpmdW5jdGlvbigpe3JldHVybiA0Mn19O3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YodCxVaW50OEFycmF5LnByb3RvdHlwZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdCksNDI9PT1lLmZvbygpfWNhdGNoKGUpe3JldHVybiExfX0oKSxzLlRZUEVEX0FSUkFZX1NVUFBPUlR8fFwidW5kZWZpbmVkXCI9PXR5cGVvZiBjb25zb2xlfHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBjb25zb2xlLmVycm9yfHxjb25zb2xlLmVycm9yKFwiVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGBidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuXCIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLnByb3RvdHlwZSxcInBhcmVudFwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKHMuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLnByb3RvdHlwZSxcIm9mZnNldFwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKHMuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnl0ZU9mZnNldH19KSxzLnBvb2xTaXplPTgxOTIscy5mcm9tPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gYyhlLHQsbil9LE9iamVjdC5zZXRQcm90b3R5cGVPZihzLnByb3RvdHlwZSxVaW50OEFycmF5LnByb3RvdHlwZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKHMsVWludDhBcnJheSkscy5hbGxvYz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdShlKSxlPD0wP2woZSk6dm9pZCAwIT09dD9cInN0cmluZ1wiPT10eXBlb2Ygbj9sKGUpLmZpbGwodCxuKTpsKGUpLmZpbGwodCk6bChlKX0oZSx0LG4pfSxzLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGUpe3JldHVybiBmKGUpfSxzLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihlKXtyZXR1cm4gZihlKX0scy5pc0J1ZmZlcj1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmITA9PT1lLl9pc0J1ZmZlciYmZSE9PXMucHJvdG90eXBlfSxzLmNvbXBhcmU9ZnVuY3Rpb24oZSx0KXtpZihZKGUsVWludDhBcnJheSkmJihlPXMuZnJvbShlLGUub2Zmc2V0LGUuYnl0ZUxlbmd0aCkpLFkodCxVaW50OEFycmF5KSYmKHQ9cy5mcm9tKHQsdC5vZmZzZXQsdC5ieXRlTGVuZ3RoKSksIXMuaXNCdWZmZXIoZSl8fCFzLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImJ1ZjFcIiwgXCJidWYyXCIgYXJndW1lbnRzIG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtpZihlPT09dClyZXR1cm4gMDtsZXQgbj1lLmxlbmd0aCxyPXQubGVuZ3RoO2ZvcihsZXQgbz0wLGk9TWF0aC5taW4obixyKTtvPGk7KytvKWlmKGVbb10hPT10W29dKXtuPWVbb10scj10W29dO2JyZWFrfXJldHVybiBuPHI/LTE6cjxuPzE6MH0scy5pc0VuY29kaW5nPWZ1bmN0aW9uKGUpe3N3aXRjaChTdHJpbmcoZSkudG9Mb3dlckNhc2UoKSl7Y2FzZVwiaGV4XCI6Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6Y2FzZVwiYXNjaWlcIjpjYXNlXCJsYXRpbjFcIjpjYXNlXCJiaW5hcnlcIjpjYXNlXCJiYXNlNjRcIjpjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0scy5jb25jYXQ9ZnVuY3Rpb24oZSx0KXtpZighQXJyYXkuaXNBcnJheShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIHMuYWxsb2MoMCk7bGV0IG47aWYodm9pZCAwPT09dClmb3IodD0wLG49MDtuPGUubGVuZ3RoOysrbil0Kz1lW25dLmxlbmd0aDtjb25zdCByPXMuYWxsb2NVbnNhZmUodCk7bGV0IG89MDtmb3Iobj0wO248ZS5sZW5ndGg7KytuKXtsZXQgdD1lW25dO2lmKFkodCxVaW50OEFycmF5KSlvK3QubGVuZ3RoPnIubGVuZ3RoPyhzLmlzQnVmZmVyKHQpfHwodD1zLmZyb20odCkpLHQuY29weShyLG8pKTpVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChyLHQsbyk7ZWxzZXtpZighcy5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTt0LmNvcHkocixvKX1vKz10Lmxlbmd0aH1yZXR1cm4gcn0scy5ieXRlTGVuZ3RoPWcscy5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLHMucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe2NvbnN0IGU9dGhpcy5sZW5ndGg7aWYoZSUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHNcIik7Zm9yKGxldCB0PTA7dDxlO3QrPTIpbSh0aGlzLHQsdCsxKTtyZXR1cm4gdGhpc30scy5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7Y29uc3QgZT10aGlzLmxlbmd0aDtpZihlJTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0c1wiKTtmb3IobGV0IHQ9MDt0PGU7dCs9NCltKHRoaXMsdCx0KzMpLG0odGhpcyx0KzEsdCsyKTtyZXR1cm4gdGhpc30scy5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7Y29uc3QgZT10aGlzLmxlbmd0aDtpZihlJTghPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0c1wiKTtmb3IobGV0IHQ9MDt0PGU7dCs9OCltKHRoaXMsdCx0KzcpLG0odGhpcyx0KzEsdCs2KSxtKHRoaXMsdCsyLHQrNSksbSh0aGlzLHQrMyx0KzQpO3JldHVybiB0aGlzfSxzLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe2NvbnN0IGU9dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1lP1wiXCI6MD09PWFyZ3VtZW50cy5sZW5ndGg/RSh0aGlzLDAsZSk6di5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHMucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nPXMucHJvdG90eXBlLnRvU3RyaW5nLHMucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihlKXtpZighcy5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlclwiKTtyZXR1cm4gdGhpcz09PWV8fDA9PT1zLmNvbXBhcmUodGhpcyxlKX0scy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe2xldCBlPVwiXCI7Y29uc3Qgbj10LklOU1BFQ1RfTUFYX0JZVEVTO3JldHVybiBlPXRoaXMudG9TdHJpbmcoXCJoZXhcIiwwLG4pLnJlcGxhY2UoLyguezJ9KS9nLFwiJDEgXCIpLnRyaW0oKSx0aGlzLmxlbmd0aD5uJiYoZSs9XCIgLi4uIFwiKSxcIjxCdWZmZXIgXCIrZStcIj5cIn0saSYmKHMucHJvdG90eXBlW2ldPXMucHJvdG90eXBlLmluc3BlY3QpLHMucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oZSx0LG4scixvKXtpZihZKGUsVWludDhBcnJheSkmJihlPXMuZnJvbShlLGUub2Zmc2V0LGUuYnl0ZUxlbmd0aCkpLCFzLmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInRhcmdldFwiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgZSk7aWYodm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09biYmKG49ZT9lLmxlbmd0aDowKSx2b2lkIDA9PT1yJiYocj0wKSx2b2lkIDA9PT1vJiYobz10aGlzLmxlbmd0aCksdDwwfHxuPmUubGVuZ3RofHxyPDB8fG8+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJvdXQgb2YgcmFuZ2UgaW5kZXhcIik7aWYocj49byYmdD49bilyZXR1cm4gMDtpZihyPj1vKXJldHVybi0xO2lmKHQ+PW4pcmV0dXJuIDE7aWYodGhpcz09PWUpcmV0dXJuIDA7bGV0IGk9KG8+Pj49MCktKHI+Pj49MCksYT0obj4+Pj0wKS0odD4+Pj0wKTtjb25zdCBsPU1hdGgubWluKGksYSksYz10aGlzLnNsaWNlKHIsbyksdT1lLnNsaWNlKHQsbik7Zm9yKGxldCBlPTA7ZTxsOysrZSlpZihjW2VdIT09dVtlXSl7aT1jW2VdLGE9dVtlXTticmVha31yZXR1cm4gaTxhPy0xOmE8aT8xOjB9LHMucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihlLHQsbil9LHMucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBDKHRoaXMsZSx0LG4sITApfSxzLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIEModGhpcyxlLHQsbiwhMSl9LHMucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKHZvaWQgMD09PXQpcj1cInV0ZjhcIixuPXRoaXMubGVuZ3RoLHQ9MDtlbHNlIGlmKHZvaWQgMD09PW4mJlwic3RyaW5nXCI9PXR5cGVvZiB0KXI9dCxuPXRoaXMubGVuZ3RoLHQ9MDtlbHNle2lmKCFpc0Zpbml0ZSh0KSl0aHJvdyBuZXcgRXJyb3IoXCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZFwiKTt0Pj4+PTAsaXNGaW5pdGUobik/KG4+Pj49MCx2b2lkIDA9PT1yJiYocj1cInV0ZjhcIikpOihyPW4sbj12b2lkIDApfWNvbnN0IG89dGhpcy5sZW5ndGgtdDtpZigodm9pZCAwPT09bnx8bj5vKSYmKG49byksZS5sZW5ndGg+MCYmKG48MHx8dDwwKXx8dD50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzXCIpO3J8fChyPVwidXRmOFwiKTtsZXQgaT0hMTtmb3IoOzspc3dpdGNoKHIpe2Nhc2VcImhleFwiOnJldHVybiB3KHRoaXMsZSx0LG4pO2Nhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOnJldHVybiBiKHRoaXMsZSx0LG4pO2Nhc2VcImFzY2lpXCI6Y2FzZVwibGF0aW4xXCI6Y2FzZVwiYmluYXJ5XCI6cmV0dXJuIHgodGhpcyxlLHQsbik7Y2FzZVwiYmFzZTY0XCI6cmV0dXJuIF8odGhpcyxlLHQsbik7Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuIE8odGhpcyxlLHQsbik7ZGVmYXVsdDppZihpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmtub3duIGVuY29kaW5nOiBcIityKTtyPShcIlwiK3IpLnRvTG93ZXJDYXNlKCksaT0hMH19LHMucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOlwiQnVmZmVyXCIsZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnJ8fHRoaXMsMCl9fTtjb25zdCBTPTQwOTY7ZnVuY3Rpb24gaihlLHQsbil7bGV0IHI9XCJcIjtuPU1hdGgubWluKGUubGVuZ3RoLG4pO2ZvcihsZXQgbz10O288bjsrK28pcis9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmZVtvXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gTShlLHQsbil7bGV0IHI9XCJcIjtuPU1hdGgubWluKGUubGVuZ3RoLG4pO2ZvcihsZXQgbz10O288bjsrK28pcis9U3RyaW5nLmZyb21DaGFyQ29kZShlW29dKTtyZXR1cm4gcn1mdW5jdGlvbiBrKGUsdCxuKXtjb25zdCByPWUubGVuZ3RoOyghdHx8dDwwKSYmKHQ9MCksKCFufHxuPDB8fG4+cikmJihuPXIpO2xldCBvPVwiXCI7Zm9yKGxldCByPXQ7cjxuOysrcilvKz1YW2Vbcl1dO3JldHVybiBvfWZ1bmN0aW9uIFIoZSx0LG4pe2NvbnN0IHI9ZS5zbGljZSh0LG4pO2xldCBvPVwiXCI7Zm9yKGxldCBlPTA7ZTxyLmxlbmd0aC0xO2UrPTIpbys9U3RyaW5nLmZyb21DaGFyQ29kZShyW2VdKzI1NipyW2UrMV0pO3JldHVybiBvfWZ1bmN0aW9uIFAoZSx0LG4pe2lmKGUlMSE9MHx8ZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwib2Zmc2V0IGlzIG5vdCB1aW50XCIpO2lmKGUrdD5uKXRocm93IG5ldyBSYW5nZUVycm9yKFwiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aFwiKX1mdW5jdGlvbiBJKGUsdCxuLHIsbyxpKXtpZighcy5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZih0Pm98fHQ8aSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihuK3I+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbmRleCBvdXQgb2YgcmFuZ2VcIil9ZnVuY3Rpb24gQShlLHQsbixyLG8pe04odCxyLG8sZSxuLDcpO2xldCBpPU51bWJlcih0JkJpZ0ludCg0Mjk0OTY3Mjk1KSk7ZVtuKytdPWksaT4+PTgsZVtuKytdPWksaT4+PTgsZVtuKytdPWksaT4+PTgsZVtuKytdPWk7bGV0IGE9TnVtYmVyKHQ+PkJpZ0ludCgzMikmQmlnSW50KDQyOTQ5NjcyOTUpKTtyZXR1cm4gZVtuKytdPWEsYT4+PTgsZVtuKytdPWEsYT4+PTgsZVtuKytdPWEsYT4+PTgsZVtuKytdPWEsbn1mdW5jdGlvbiBUKGUsdCxuLHIsbyl7Tih0LHIsbyxlLG4sNyk7bGV0IGk9TnVtYmVyKHQmQmlnSW50KDQyOTQ5NjcyOTUpKTtlW24rN109aSxpPj49OCxlW24rNl09aSxpPj49OCxlW24rNV09aSxpPj49OCxlW24rNF09aTtsZXQgYT1OdW1iZXIodD4+QmlnSW50KDMyKSZCaWdJbnQoNDI5NDk2NzI5NSkpO3JldHVybiBlW24rM109YSxhPj49OCxlW24rMl09YSxhPj49OCxlW24rMV09YSxhPj49OCxlW25dPWEsbis4fWZ1bmN0aW9uIEgoZSx0LG4scixvLGkpe2lmKG4rcj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkluZGV4IG91dCBvZiByYW5nZVwiKTtpZihuPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbmRleCBvdXQgb2YgcmFuZ2VcIil9ZnVuY3Rpb24gQihlLHQsbixyLGkpe3JldHVybiB0PSt0LG4+Pj49MCxpfHxIKGUsMCxuLDQpLG8ud3JpdGUoZSx0LG4sciwyMyw0KSxuKzR9ZnVuY3Rpb24gVihlLHQsbixyLGkpe3JldHVybiB0PSt0LG4+Pj49MCxpfHxIKGUsMCxuLDgpLG8ud3JpdGUoZSx0LG4sciw1Miw4KSxuKzh9cy5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oZSx0KXtjb25zdCBuPXRoaXMubGVuZ3RoOyhlPX5+ZSk8MD8oZSs9bik8MCYmKGU9MCk6ZT5uJiYoZT1uKSwodD12b2lkIDA9PT10P246fn50KTwwPyh0Kz1uKTwwJiYodD0wKTp0Pm4mJih0PW4pLHQ8ZSYmKHQ9ZSk7Y29uc3Qgcj10aGlzLnN1YmFycmF5KGUsdCk7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihyLHMucHJvdG90eXBlKSxyfSxzLnByb3RvdHlwZS5yZWFkVWludExFPXMucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24oZSx0LG4pe2U+Pj49MCx0Pj4+PTAsbnx8UChlLHQsdGhpcy5sZW5ndGgpO2xldCByPXRoaXNbZV0sbz0xLGk9MDtmb3IoOysraTx0JiYobyo9MjU2KTspcis9dGhpc1tlK2ldKm87cmV0dXJuIHJ9LHMucHJvdG90eXBlLnJlYWRVaW50QkU9cy5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihlLHQsbil7ZT4+Pj0wLHQ+Pj49MCxufHxQKGUsdCx0aGlzLmxlbmd0aCk7bGV0IHI9dGhpc1tlKy0tdF0sbz0xO2Zvcig7dD4wJiYobyo9MjU2KTspcis9dGhpc1tlKy0tdF0qbztyZXR1cm4gcn0scy5wcm90b3R5cGUucmVhZFVpbnQ4PXMucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiBlPj4+PTAsdHx8UChlLDEsdGhpcy5sZW5ndGgpLHRoaXNbZV19LHMucHJvdG90eXBlLnJlYWRVaW50MTZMRT1zLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4+Pj0wLHR8fFAoZSwyLHRoaXMubGVuZ3RoKSx0aGlzW2VdfHRoaXNbZSsxXTw8OH0scy5wcm90b3R5cGUucmVhZFVpbnQxNkJFPXMucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbihlLHQpe3JldHVybiBlPj4+PTAsdHx8UChlLDIsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDh8dGhpc1tlKzFdfSxzLnByb3RvdHlwZS5yZWFkVWludDMyTEU9cy5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU+Pj49MCx0fHxQKGUsNCx0aGlzLmxlbmd0aCksKHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbZSszXX0scy5wcm90b3R5cGUucmVhZFVpbnQzMkJFPXMucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbihlLHQpe3JldHVybiBlPj4+PTAsdHx8UChlLDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbZV0rKHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXSl9LHMucHJvdG90eXBlLnJlYWRCaWdVSW50NjRMRT1KKChmdW5jdGlvbihlKXtGKGU+Pj49MCxcIm9mZnNldFwiKTtjb25zdCB0PXRoaXNbZV0sbj10aGlzW2UrN107dm9pZCAwIT09dCYmdm9pZCAwIT09bnx8VShlLHRoaXMubGVuZ3RoLTgpO2NvbnN0IHI9dCsyNTYqdGhpc1srK2VdKzY1NTM2KnRoaXNbKytlXSt0aGlzWysrZV0qMioqMjQsbz10aGlzWysrZV0rMjU2KnRoaXNbKytlXSs2NTUzNip0aGlzWysrZV0rbioyKioyNDtyZXR1cm4gQmlnSW50KHIpKyhCaWdJbnQobyk8PEJpZ0ludCgzMikpfSkpLHMucHJvdG90eXBlLnJlYWRCaWdVSW50NjRCRT1KKChmdW5jdGlvbihlKXtGKGU+Pj49MCxcIm9mZnNldFwiKTtjb25zdCB0PXRoaXNbZV0sbj10aGlzW2UrN107dm9pZCAwIT09dCYmdm9pZCAwIT09bnx8VShlLHRoaXMubGVuZ3RoLTgpO2NvbnN0IHI9dCoyKioyNCs2NTUzNip0aGlzWysrZV0rMjU2KnRoaXNbKytlXSt0aGlzWysrZV0sbz10aGlzWysrZV0qMioqMjQrNjU1MzYqdGhpc1srK2VdKzI1Nip0aGlzWysrZV0rbjtyZXR1cm4oQmlnSW50KHIpPDxCaWdJbnQoMzIpKStCaWdJbnQobyl9KSkscy5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKGUsdCxuKXtlPj4+PTAsdD4+Pj0wLG58fFAoZSx0LHRoaXMubGVuZ3RoKTtsZXQgcj10aGlzW2VdLG89MSxpPTA7Zm9yKDsrK2k8dCYmKG8qPTI1Nik7KXIrPXRoaXNbZStpXSpvO3JldHVybiBvKj0xMjgscj49byYmKHItPU1hdGgucG93KDIsOCp0KSkscn0scy5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKGUsdCxuKXtlPj4+PTAsdD4+Pj0wLG58fFAoZSx0LHRoaXMubGVuZ3RoKTtsZXQgcj10LG89MSxpPXRoaXNbZSstLXJdO2Zvcig7cj4wJiYobyo9MjU2KTspaSs9dGhpc1tlKy0tcl0qbztyZXR1cm4gbyo9MTI4LGk+PW8mJihpLT1NYXRoLnBvdygyLDgqdCkpLGl9LHMucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU+Pj49MCx0fHxQKGUsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbZV0/LTEqKDI1NS10aGlzW2VdKzEpOnRoaXNbZV19LHMucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKGUsdCl7ZT4+Pj0wLHR8fFAoZSwyLHRoaXMubGVuZ3RoKTtjb25zdCBuPXRoaXNbZV18dGhpc1tlKzFdPDw4O3JldHVybiAzMjc2OCZuPzQyOTQ5MDE3NjB8bjpufSxzLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbihlLHQpe2U+Pj49MCx0fHxQKGUsMix0aGlzLmxlbmd0aCk7Y29uc3Qgbj10aGlzW2UrMV18dGhpc1tlXTw8ODtyZXR1cm4gMzI3Njgmbj80Mjk0OTAxNzYwfG46bn0scy5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4+Pj0wLHR8fFAoZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2fHRoaXNbZSszXTw8MjR9LHMucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU+Pj49MCx0fHxQKGUsNCx0aGlzLmxlbmd0aCksdGhpc1tlXTw8MjR8dGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdfSxzLnByb3RvdHlwZS5yZWFkQmlnSW50NjRMRT1KKChmdW5jdGlvbihlKXtGKGU+Pj49MCxcIm9mZnNldFwiKTtjb25zdCB0PXRoaXNbZV0sbj10aGlzW2UrN107dm9pZCAwIT09dCYmdm9pZCAwIT09bnx8VShlLHRoaXMubGVuZ3RoLTgpO2NvbnN0IHI9dGhpc1tlKzRdKzI1Nip0aGlzW2UrNV0rNjU1MzYqdGhpc1tlKzZdKyhuPDwyNCk7cmV0dXJuKEJpZ0ludChyKTw8QmlnSW50KDMyKSkrQmlnSW50KHQrMjU2KnRoaXNbKytlXSs2NTUzNip0aGlzWysrZV0rdGhpc1srK2VdKjIqKjI0KX0pKSxzLnByb3RvdHlwZS5yZWFkQmlnSW50NjRCRT1KKChmdW5jdGlvbihlKXtGKGU+Pj49MCxcIm9mZnNldFwiKTtjb25zdCB0PXRoaXNbZV0sbj10aGlzW2UrN107dm9pZCAwIT09dCYmdm9pZCAwIT09bnx8VShlLHRoaXMubGVuZ3RoLTgpO2NvbnN0IHI9KHQ8PDI0KSs2NTUzNip0aGlzWysrZV0rMjU2KnRoaXNbKytlXSt0aGlzWysrZV07cmV0dXJuKEJpZ0ludChyKTw8QmlnSW50KDMyKSkrQmlnSW50KHRoaXNbKytlXSoyKioyNCs2NTUzNip0aGlzWysrZV0rMjU2KnRoaXNbKytlXStuKX0pKSxzLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbihlLHQpe3JldHVybiBlPj4+PTAsdHx8UChlLDQsdGhpcy5sZW5ndGgpLG8ucmVhZCh0aGlzLGUsITAsMjMsNCl9LHMucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU+Pj49MCx0fHxQKGUsNCx0aGlzLmxlbmd0aCksby5yZWFkKHRoaXMsZSwhMSwyMyw0KX0scy5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU+Pj49MCx0fHxQKGUsOCx0aGlzLmxlbmd0aCksby5yZWFkKHRoaXMsZSwhMCw1Miw4KX0scy5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU+Pj49MCx0fHxQKGUsOCx0aGlzLmxlbmd0aCksby5yZWFkKHRoaXMsZSwhMSw1Miw4KX0scy5wcm90b3R5cGUud3JpdGVVaW50TEU9cy5wcm90b3R5cGUud3JpdGVVSW50TEU9ZnVuY3Rpb24oZSx0LG4scil7ZT0rZSx0Pj4+PTAsbj4+Pj0wLHJ8fEkodGhpcyxlLHQsbixNYXRoLnBvdygyLDgqbiktMSwwKTtsZXQgbz0xLGk9MDtmb3IodGhpc1t0XT0yNTUmZTsrK2k8biYmKG8qPTI1Nik7KXRoaXNbdCtpXT1lL28mMjU1O3JldHVybiB0K259LHMucHJvdG90eXBlLndyaXRlVWludEJFPXMucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKGUsdCxuLHIpe2U9K2UsdD4+Pj0wLG4+Pj49MCxyfHxJKHRoaXMsZSx0LG4sTWF0aC5wb3coMiw4Km4pLTEsMCk7bGV0IG89bi0xLGk9MTtmb3IodGhpc1t0K29dPTI1NSZlOy0tbz49MCYmKGkqPTI1Nik7KXRoaXNbdCtvXT1lL2kmMjU1O3JldHVybiB0K259LHMucHJvdG90eXBlLndyaXRlVWludDg9cy5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdD4+Pj0wLG58fEkodGhpcyxlLHQsMSwyNTUsMCksdGhpc1t0XT0yNTUmZSx0KzF9LHMucHJvdG90eXBlLndyaXRlVWludDE2TEU9cy5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdD4+Pj0wLG58fEkodGhpcyxlLHQsMiw2NTUzNSwwKSx0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCx0KzJ9LHMucHJvdG90eXBlLndyaXRlVWludDE2QkU9cy5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdD4+Pj0wLG58fEkodGhpcyxlLHQsMiw2NTUzNSwwKSx0aGlzW3RdPWU+Pj44LHRoaXNbdCsxXT0yNTUmZSx0KzJ9LHMucHJvdG90eXBlLndyaXRlVWludDMyTEU9cy5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdD4+Pj0wLG58fEkodGhpcyxlLHQsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbdCszXT1lPj4+MjQsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrMV09ZT4+PjgsdGhpc1t0XT0yNTUmZSx0KzR9LHMucHJvdG90eXBlLndyaXRlVWludDMyQkU9cy5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdD4+Pj0wLG58fEkodGhpcyxlLHQsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT0yNTUmZSx0KzR9LHMucHJvdG90eXBlLndyaXRlQmlnVUludDY0TEU9SigoZnVuY3Rpb24oZSx0PTApe3JldHVybiBBKHRoaXMsZSx0LEJpZ0ludCgwKSxCaWdJbnQoXCIweGZmZmZmZmZmZmZmZmZmZmZcIikpfSkpLHMucHJvdG90eXBlLndyaXRlQmlnVUludDY0QkU9SigoZnVuY3Rpb24oZSx0PTApe3JldHVybiBUKHRoaXMsZSx0LEJpZ0ludCgwKSxCaWdJbnQoXCIweGZmZmZmZmZmZmZmZmZmZmZcIikpfSkpLHMucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24oZSx0LG4scil7aWYoZT0rZSx0Pj4+PTAsIXIpe2NvbnN0IHI9TWF0aC5wb3coMiw4Km4tMSk7SSh0aGlzLGUsdCxuLHItMSwtcil9bGV0IG89MCxpPTEsYT0wO2Zvcih0aGlzW3RdPTI1NSZlOysrbzxuJiYoaSo9MjU2KTspZTwwJiYwPT09YSYmMCE9PXRoaXNbdCtvLTFdJiYoYT0xKSx0aGlzW3Qrb109KGUvaT4+MCktYSYyNTU7cmV0dXJuIHQrbn0scy5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbihlLHQsbixyKXtpZihlPStlLHQ+Pj49MCwhcil7Y29uc3Qgcj1NYXRoLnBvdygyLDgqbi0xKTtJKHRoaXMsZSx0LG4sci0xLC1yKX1sZXQgbz1uLTEsaT0xLGE9MDtmb3IodGhpc1t0K29dPTI1NSZlOy0tbz49MCYmKGkqPTI1Nik7KWU8MCYmMD09PWEmJjAhPT10aGlzW3QrbysxXSYmKGE9MSksdGhpc1t0K29dPShlL2k+PjApLWEmMjU1O3JldHVybiB0K259LHMucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdD4+Pj0wLG58fEkodGhpcyxlLHQsMSwxMjcsLTEyOCksZTwwJiYoZT0yNTUrZSsxKSx0aGlzW3RdPTI1NSZlLHQrMX0scy5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0Pj4+PTAsbnx8SSh0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCksdGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgsdCsyfSxzLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHQ+Pj49MCxufHxJKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSx0aGlzW3RdPWU+Pj44LHRoaXNbdCsxXT0yNTUmZSx0KzJ9LHMucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdD4+Pj0wLG58fEkodGhpcyxlLHQsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCszXT1lPj4+MjQsdCs0fSxzLnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHQ+Pj49MCxufHxJKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZTwwJiYoZT00Mjk0OTY3Mjk1K2UrMSksdGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlLHQrNH0scy5wcm90b3R5cGUud3JpdGVCaWdJbnQ2NExFPUooKGZ1bmN0aW9uKGUsdD0wKXtyZXR1cm4gQSh0aGlzLGUsdCwtQmlnSW50KFwiMHg4MDAwMDAwMDAwMDAwMDAwXCIpLEJpZ0ludChcIjB4N2ZmZmZmZmZmZmZmZmZmZlwiKSl9KSkscy5wcm90b3R5cGUud3JpdGVCaWdJbnQ2NEJFPUooKGZ1bmN0aW9uKGUsdD0wKXtyZXR1cm4gVCh0aGlzLGUsdCwtQmlnSW50KFwiMHg4MDAwMDAwMDAwMDAwMDAwXCIpLEJpZ0ludChcIjB4N2ZmZmZmZmZmZmZmZmZmZlwiKSl9KSkscy5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gQih0aGlzLGUsdCwhMCxuKX0scy5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gQih0aGlzLGUsdCwhMSxuKX0scy5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIFYodGhpcyxlLHQsITAsbil9LHMucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBWKHRoaXMsZSx0LCExLG4pfSxzLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGUsdCxuLHIpe2lmKCFzLmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJhcmd1bWVudCBzaG91bGQgYmUgYSBCdWZmZXJcIik7aWYobnx8KG49MCkscnx8MD09PXJ8fChyPXRoaXMubGVuZ3RoKSx0Pj1lLmxlbmd0aCYmKHQ9ZS5sZW5ndGgpLHR8fCh0PTApLHI+MCYmcjxuJiYocj1uKSxyPT09bilyZXR1cm4gMDtpZigwPT09ZS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzXCIpO2lmKG48MHx8bj49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbmRleCBvdXQgb2YgcmFuZ2VcIik7aWYocjwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwic291cmNlRW5kIG91dCBvZiBib3VuZHNcIik7cj50aGlzLmxlbmd0aCYmKHI9dGhpcy5sZW5ndGgpLGUubGVuZ3RoLXQ8ci1uJiYocj1lLmxlbmd0aC10K24pO2NvbnN0IG89ci1uO3JldHVybiB0aGlzPT09ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbj90aGlzLmNvcHlXaXRoaW4odCxuLHIpOlVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKGUsdGhpcy5zdWJhcnJheShuLHIpLHQpLG99LHMucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oZSx0LG4scil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0PyhyPXQsdD0wLG49dGhpcy5sZW5ndGgpOlwic3RyaW5nXCI9PXR5cGVvZiBuJiYocj1uLG49dGhpcy5sZW5ndGgpLHZvaWQgMCE9PXImJlwic3RyaW5nXCIhPXR5cGVvZiByKXRocm93IG5ldyBUeXBlRXJyb3IoXCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nXCIpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiByJiYhcy5pc0VuY29kaW5nKHIpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmtub3duIGVuY29kaW5nOiBcIityKTtpZigxPT09ZS5sZW5ndGgpe2NvbnN0IHQ9ZS5jaGFyQ29kZUF0KDApOyhcInV0ZjhcIj09PXImJnQ8MTI4fHxcImxhdGluMVwiPT09cikmJihlPXQpfX1lbHNlXCJudW1iZXJcIj09dHlwZW9mIGU/ZSY9MjU1OlwiYm9vbGVhblwiPT10eXBlb2YgZSYmKGU9TnVtYmVyKGUpKTtpZih0PDB8fHRoaXMubGVuZ3RoPHR8fHRoaXMubGVuZ3RoPG4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJPdXQgb2YgcmFuZ2UgaW5kZXhcIik7aWYobjw9dClyZXR1cm4gdGhpcztsZXQgbztpZih0Pj4+PTAsbj12b2lkIDA9PT1uP3RoaXMubGVuZ3RoOm4+Pj4wLGV8fChlPTApLFwibnVtYmVyXCI9PXR5cGVvZiBlKWZvcihvPXQ7bzxuOysrbyl0aGlzW29dPWU7ZWxzZXtjb25zdCBpPXMuaXNCdWZmZXIoZSk/ZTpzLmZyb20oZSxyKSxhPWkubGVuZ3RoO2lmKDA9PT1hKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSB2YWx1ZSBcIicrZSsnXCIgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgXCJ2YWx1ZVwiJyk7Zm9yKG89MDtvPG4tdDsrK28pdGhpc1tvK3RdPWlbbyVhXX1yZXR1cm4gdGhpc307Y29uc3QgRD17fTtmdW5jdGlvbiBaKGUsdCxuKXtEW2VdPWNsYXNzIGV4dGVuZHMgbntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJtZXNzYWdlXCIse3ZhbHVlOnQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHRoaXMubmFtZT1gJHt0aGlzLm5hbWV9IFske2V9XWAsdGhpcy5zdGFjayxkZWxldGUgdGhpcy5uYW1lfWdldCBjb2RlKCl7cmV0dXJuIGV9c2V0IGNvZGUoZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJjb2RlXCIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOmUsd3JpdGFibGU6ITB9KX10b1N0cmluZygpe3JldHVybmAke3RoaXMubmFtZX0gWyR7ZX1dOiAke3RoaXMubWVzc2FnZX1gfX19ZnVuY3Rpb24gJChlKXtsZXQgdD1cIlwiLG49ZS5sZW5ndGg7Y29uc3Qgcj1cIi1cIj09PWVbMF0/MTowO2Zvcig7bj49cis0O24tPTMpdD1gXyR7ZS5zbGljZShuLTMsbil9JHt0fWA7cmV0dXJuYCR7ZS5zbGljZSgwLG4pfSR7dH1gfWZ1bmN0aW9uIE4oZSx0LG4scixvLGkpe2lmKGU+bnx8ZTx0KXtjb25zdCByPVwiYmlnaW50XCI9PXR5cGVvZiB0P1wiblwiOlwiXCI7bGV0IG87dGhyb3cgbz1pPjM/MD09PXR8fHQ9PT1CaWdJbnQoMCk/YD49IDAke3J9IGFuZCA8IDIke3J9ICoqICR7OCooaSsxKX0ke3J9YDpgPj0gLSgyJHtyfSAqKiAkezgqKGkrMSktMX0ke3J9KSBhbmQgPCAyICoqICR7OCooaSsxKS0xfSR7cn1gOmA+PSAke3R9JHtyfSBhbmQgPD0gJHtufSR7cn1gLG5ldyBELkVSUl9PVVRfT0ZfUkFOR0UoXCJ2YWx1ZVwiLG8sZSl9IWZ1bmN0aW9uKGUsdCxuKXtGKHQsXCJvZmZzZXRcIiksdm9pZCAwIT09ZVt0XSYmdm9pZCAwIT09ZVt0K25dfHxVKHQsZS5sZW5ndGgtKG4rMSkpfShyLG8saSl9ZnVuY3Rpb24gRihlLHQpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiBlKXRocm93IG5ldyBELkVSUl9JTlZBTElEX0FSR19UWVBFKHQsXCJudW1iZXJcIixlKX1mdW5jdGlvbiBVKGUsdCxuKXtpZihNYXRoLmZsb29yKGUpIT09ZSl0aHJvdyBGKGUsbiksbmV3IEQuRVJSX09VVF9PRl9SQU5HRShufHxcIm9mZnNldFwiLFwiYW4gaW50ZWdlclwiLGUpO2lmKHQ8MCl0aHJvdyBuZXcgRC5FUlJfQlVGRkVSX09VVF9PRl9CT1VORFM7dGhyb3cgbmV3IEQuRVJSX09VVF9PRl9SQU5HRShufHxcIm9mZnNldFwiLGA+PSAke24/MTowfSBhbmQgPD0gJHt0fWAsZSl9WihcIkVSUl9CVUZGRVJfT1VUX09GX0JPVU5EU1wiLChmdW5jdGlvbihlKXtyZXR1cm4gZT9gJHtlfSBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHNgOlwiQXR0ZW1wdCB0byBhY2Nlc3MgbWVtb3J5IG91dHNpZGUgYnVmZmVyIGJvdW5kc1wifSksUmFuZ2VFcnJvciksWihcIkVSUl9JTlZBTElEX0FSR19UWVBFXCIsKGZ1bmN0aW9uKGUsdCl7cmV0dXJuYFRoZSBcIiR7ZX1cIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlICR7dHlwZW9mIHR9YH0pLFR5cGVFcnJvciksWihcIkVSUl9PVVRfT0ZfUkFOR0VcIiwoZnVuY3Rpb24oZSx0LG4pe2xldCByPWBUaGUgdmFsdWUgb2YgXCIke2V9XCIgaXMgb3V0IG9mIHJhbmdlLmAsbz1uO3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKG4pJiZNYXRoLmFicyhuKT4yKiozMj9vPSQoU3RyaW5nKG4pKTpcImJpZ2ludFwiPT10eXBlb2YgbiYmKG89U3RyaW5nKG4pLChuPkJpZ0ludCgyKSoqQmlnSW50KDMyKXx8bjwtKEJpZ0ludCgyKSoqQmlnSW50KDMyKSkpJiYobz0kKG8pKSxvKz1cIm5cIikscis9YCBJdCBtdXN0IGJlICR7dH0uIFJlY2VpdmVkICR7b31gLHJ9KSxSYW5nZUVycm9yKTtjb25zdCBXPS9bXisvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24geihlLHQpe2xldCBuO3Q9dHx8MS8wO2NvbnN0IHI9ZS5sZW5ndGg7bGV0IG89bnVsbDtjb25zdCBpPVtdO2ZvcihsZXQgYT0wO2E8cjsrK2Epe2lmKG49ZS5jaGFyQ29kZUF0KGEpLG4+NTUyOTUmJm48NTczNDQpe2lmKCFvKXtpZihuPjU2MzE5KXsodC09Myk+LTEmJmkucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYoYSsxPT09cil7KHQtPTMpPi0xJiZpLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfW89bjtjb250aW51ZX1pZihuPDU2MzIwKXsodC09Myk+LTEmJmkucHVzaCgyMzksMTkxLDE4OSksbz1uO2NvbnRpbnVlfW49NjU1MzYrKG8tNTUyOTY8PDEwfG4tNTYzMjApfWVsc2UgbyYmKHQtPTMpPi0xJiZpLnB1c2goMjM5LDE5MSwxODkpO2lmKG89bnVsbCxuPDEyOCl7aWYoKHQtPTEpPDApYnJlYWs7aS5wdXNoKG4pfWVsc2UgaWYobjwyMDQ4KXtpZigodC09Mik8MClicmVhaztpLnB1c2gobj4+NnwxOTIsNjMmbnwxMjgpfWVsc2UgaWYobjw2NTUzNil7aWYoKHQtPTMpPDApYnJlYWs7aS5wdXNoKG4+PjEyfDIyNCxuPj42JjYzfDEyOCw2MyZufDEyOCl9ZWxzZXtpZighKG48MTExNDExMikpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBjb2RlIHBvaW50XCIpO2lmKCh0LT00KTwwKWJyZWFrO2kucHVzaChuPj4xOHwyNDAsbj4+MTImNjN8MTI4LG4+PjYmNjN8MTI4LDYzJm58MTI4KX19cmV0dXJuIGl9ZnVuY3Rpb24gRyhlKXtyZXR1cm4gci50b0J5dGVBcnJheShmdW5jdGlvbihlKXtpZigoZT0oZT1lLnNwbGl0KFwiPVwiKVswXSkudHJpbSgpLnJlcGxhY2UoVyxcIlwiKSkubGVuZ3RoPDIpcmV0dXJuXCJcIjtmb3IoO2UubGVuZ3RoJTQhPTA7KWUrPVwiPVwiO3JldHVybiBlfShlKSl9ZnVuY3Rpb24gcShlLHQsbixyKXtsZXQgbztmb3Iobz0wO288ciYmIShvK24+PXQubGVuZ3RofHxvPj1lLmxlbmd0aCk7KytvKXRbbytuXT1lW29dO3JldHVybiBvfWZ1bmN0aW9uIFkoZSx0KXtyZXR1cm4gZSBpbnN0YW5jZW9mIHR8fG51bGwhPWUmJm51bGwhPWUuY29uc3RydWN0b3ImJm51bGwhPWUuY29uc3RydWN0b3IubmFtZSYmZS5jb25zdHJ1Y3Rvci5uYW1lPT09dC5uYW1lfWZ1bmN0aW9uIEsoZSl7cmV0dXJuIGUhPWV9Y29uc3QgWD1mdW5jdGlvbigpe2NvbnN0IGU9XCIwMTIzNDU2Nzg5YWJjZGVmXCIsdD1uZXcgQXJyYXkoMjU2KTtmb3IobGV0IG49MDtuPDE2Oysrbil7Y29uc3Qgcj0xNipuO2ZvcihsZXQgbz0wO288MTY7KytvKXRbcitvXT1lW25dK2Vbb119cmV0dXJuIHR9KCk7ZnVuY3Rpb24gSihlKXtyZXR1cm5cInVuZGVmaW5lZFwiPT10eXBlb2YgQmlnSW50P1E6ZX1mdW5jdGlvbiBRKCl7dGhyb3cgbmV3IEVycm9yKFwiQmlnSW50IG5vdCBzdXBwb3J0ZWRcIil9fSw0NjU6ZT0+e3ZhciB0LG49XCJvYmplY3RcIj09dHlwZW9mIFJlZmxlY3Q/UmVmbGVjdDpudWxsLHI9biYmXCJmdW5jdGlvblwiPT10eXBlb2Ygbi5hcHBseT9uLmFwcGx5OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoZSx0LG4pfTt0PW4mJlwiZnVuY3Rpb25cIj09dHlwZW9mIG4ub3duS2V5cz9uLm93bktleXM6T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz9mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSkuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSkpfTpmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSl9O3ZhciBvPU51bWJlci5pc05hTnx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUhPWV9O2Z1bmN0aW9uIGkoKXtpLmluaXQuY2FsbCh0aGlzKX1lLmV4cG9ydHM9aSxlLmV4cG9ydHMub25jZT1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixyKXtmdW5jdGlvbiBvKG4pe2UucmVtb3ZlTGlzdGVuZXIodCxpKSxyKG4pfWZ1bmN0aW9uIGkoKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnJlbW92ZUxpc3RlbmVyJiZlLnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIixvKSxuKFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9ZyhlLHQsaSx7b25jZTohMH0pLFwiZXJyb3JcIiE9PXQmJmZ1bmN0aW9uKGUsdCxuKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLm9uJiZnKGUsXCJlcnJvclwiLHQse29uY2U6ITB9KX0oZSxvKX0pKX0saS5FdmVudEVtaXR0ZXI9aSxpLnByb3RvdHlwZS5fZXZlbnRzPXZvaWQgMCxpLnByb3RvdHlwZS5fZXZlbnRzQ291bnQ9MCxpLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzPXZvaWQgMDt2YXIgYT0xMDtmdW5jdGlvbiBsKGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwibGlzdGVuZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgZSl9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gdm9pZCAwPT09ZS5fbWF4TGlzdGVuZXJzP2kuZGVmYXVsdE1heExpc3RlbmVyczplLl9tYXhMaXN0ZW5lcnN9ZnVuY3Rpb24gYyhlLHQsbixyKXt2YXIgbyxpLGEsYztpZihsKG4pLHZvaWQgMD09PShpPWUuX2V2ZW50cyk/KGk9ZS5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksZS5fZXZlbnRzQ291bnQ9MCk6KHZvaWQgMCE9PWkubmV3TGlzdGVuZXImJihlLmVtaXQoXCJuZXdMaXN0ZW5lclwiLHQsbi5saXN0ZW5lcj9uLmxpc3RlbmVyOm4pLGk9ZS5fZXZlbnRzKSxhPWlbdF0pLHZvaWQgMD09PWEpYT1pW3RdPW4sKytlLl9ldmVudHNDb3VudDtlbHNlIGlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGE/YT1pW3RdPXI/W24sYV06W2Esbl06cj9hLnVuc2hpZnQobik6YS5wdXNoKG4pLChvPXMoZSkpPjAmJmEubGVuZ3RoPm8mJiFhLndhcm5lZCl7YS53YXJuZWQ9ITA7dmFyIHU9bmV3IEVycm9yKFwiUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiBcIithLmxlbmd0aCtcIiBcIitTdHJpbmcodCkrXCIgbGlzdGVuZXJzIGFkZGVkLiBVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFzZSBsaW1pdFwiKTt1Lm5hbWU9XCJNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmdcIix1LmVtaXR0ZXI9ZSx1LnR5cGU9dCx1LmNvdW50PWEubGVuZ3RoLGM9dSxjb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybihjKX1yZXR1cm4gZX1mdW5jdGlvbiB1KCl7aWYoIXRoaXMuZmlyZWQpcmV0dXJuIHRoaXMudGFyZ2V0LnJlbW92ZUxpc3RlbmVyKHRoaXMudHlwZSx0aGlzLndyYXBGbiksdGhpcy5maXJlZD0hMCwwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpOnRoaXMubGlzdGVuZXIuYXBwbHkodGhpcy50YXJnZXQsYXJndW1lbnRzKX1mdW5jdGlvbiBmKGUsdCxuKXt2YXIgcj17ZmlyZWQ6ITEsd3JhcEZuOnZvaWQgMCx0YXJnZXQ6ZSx0eXBlOnQsbGlzdGVuZXI6bn0sbz11LmJpbmQocik7cmV0dXJuIG8ubGlzdGVuZXI9bixyLndyYXBGbj1vLG99ZnVuY3Rpb24gZChlLHQsbil7dmFyIHI9ZS5fZXZlbnRzO2lmKHZvaWQgMD09PXIpcmV0dXJuW107dmFyIG89clt0XTtyZXR1cm4gdm9pZCAwPT09bz9bXTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBvP24/W28ubGlzdGVuZXJ8fG9dOltvXTpuP2Z1bmN0aW9uKGUpe2Zvcih2YXIgdD1uZXcgQXJyYXkoZS5sZW5ndGgpLG49MDtuPHQubGVuZ3RoOysrbil0W25dPWVbbl0ubGlzdGVuZXJ8fGVbbl07cmV0dXJuIHR9KG8pOmgobyxvLmxlbmd0aCl9ZnVuY3Rpb24gcChlKXt2YXIgdD10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09dCl7dmFyIG49dFtlXTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuKXJldHVybiAxO2lmKHZvaWQgMCE9PW4pcmV0dXJuIG4ubGVuZ3RofXJldHVybiAwfWZ1bmN0aW9uIGgoZSx0KXtmb3IodmFyIG49bmV3IEFycmF5KHQpLHI9MDtyPHQ7KytyKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBnKGUsdCxuLHIpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUub24pci5vbmNlP2Uub25jZSh0LG4pOmUub24odCxuKTtlbHNle2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUuYWRkRXZlbnRMaXN0ZW5lcil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJlbWl0dGVyXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEV2ZW50RW1pdHRlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBlKTtlLmFkZEV2ZW50TGlzdGVuZXIodCwoZnVuY3Rpb24gbyhpKXtyLm9uY2UmJmUucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG8pLG4oaSl9KSl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFwiZGVmYXVsdE1heExpc3RlbmVyc1wiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhfSxzZXQ6ZnVuY3Rpb24oZSl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGV8fGU8MHx8byhlKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiZGVmYXVsdE1heExpc3RlbmVyc1wiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcrZStcIi5cIik7YT1lfX0pLGkuaW5pdD1mdW5jdGlvbigpe3ZvaWQgMCE9PXRoaXMuX2V2ZW50cyYmdGhpcy5fZXZlbnRzIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHN8fCh0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKSx0aGlzLl9tYXhMaXN0ZW5lcnM9dGhpcy5fbWF4TGlzdGVuZXJzfHx2b2lkIDB9LGkucHJvdG90eXBlLnNldE1heExpc3RlbmVycz1mdW5jdGlvbihlKXtpZihcIm51bWJlclwiIT10eXBlb2YgZXx8ZTwwfHxvKGUpKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJuXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJytlK1wiLlwiKTtyZXR1cm4gdGhpcy5fbWF4TGlzdGVuZXJzPWUsdGhpc30saS5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHModGhpcyl9LGkucHJvdG90eXBlLmVtaXQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXQucHVzaChhcmd1bWVudHNbbl0pO3ZhciBvPVwiZXJyb3JcIj09PWUsaT10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09aSlvPW8mJnZvaWQgMD09PWkuZXJyb3I7ZWxzZSBpZighbylyZXR1cm4hMTtpZihvKXt2YXIgYTtpZih0Lmxlbmd0aD4wJiYoYT10WzBdKSxhIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgYTt2YXIgbD1uZXcgRXJyb3IoXCJVbmhhbmRsZWQgZXJyb3IuXCIrKGE/XCIgKFwiK2EubWVzc2FnZStcIilcIjpcIlwiKSk7dGhyb3cgbC5jb250ZXh0PWEsbH12YXIgcz1pW2VdO2lmKHZvaWQgMD09PXMpcmV0dXJuITE7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgcylyKHMsdGhpcyx0KTtlbHNle3ZhciBjPXMubGVuZ3RoLHU9aChzLGMpO2ZvcihuPTA7bjxjOysrbilyKHVbbl0sdGhpcyx0KX1yZXR1cm4hMH0saS5wcm90b3R5cGUuYWRkTGlzdGVuZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYyh0aGlzLGUsdCwhMSl9LGkucHJvdG90eXBlLm9uPWkucHJvdG90eXBlLmFkZExpc3RlbmVyLGkucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lcj1mdW5jdGlvbihlLHQpe3JldHVybiBjKHRoaXMsZSx0LCEwKX0saS5wcm90b3R5cGUub25jZT1mdW5jdGlvbihlLHQpe3JldHVybiBsKHQpLHRoaXMub24oZSxmKHRoaXMsZSx0KSksdGhpc30saS5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lcj1mdW5jdGlvbihlLHQpe3JldHVybiBsKHQpLHRoaXMucHJlcGVuZExpc3RlbmVyKGUsZih0aGlzLGUsdCkpLHRoaXN9LGkucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixvLGksYTtpZihsKHQpLHZvaWQgMD09PShyPXRoaXMuX2V2ZW50cykpcmV0dXJuIHRoaXM7aWYodm9pZCAwPT09KG49cltlXSkpcmV0dXJuIHRoaXM7aWYobj09PXR8fG4ubGlzdGVuZXI9PT10KTA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6KGRlbGV0ZSByW2VdLHIucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdChcInJlbW92ZUxpc3RlbmVyXCIsZSxuLmxpc3RlbmVyfHx0KSk7ZWxzZSBpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBuKXtmb3Iobz0tMSxpPW4ubGVuZ3RoLTE7aT49MDtpLS0paWYobltpXT09PXR8fG5baV0ubGlzdGVuZXI9PT10KXthPW5baV0ubGlzdGVuZXIsbz1pO2JyZWFrfWlmKG88MClyZXR1cm4gdGhpczswPT09bz9uLnNoaWZ0KCk6ZnVuY3Rpb24oZSx0KXtmb3IoO3QrMTxlLmxlbmd0aDt0KyspZVt0XT1lW3QrMV07ZS5wb3AoKX0obixvKSwxPT09bi5sZW5ndGgmJihyW2VdPW5bMF0pLHZvaWQgMCE9PXIucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdChcInJlbW92ZUxpc3RlbmVyXCIsZSxhfHx0KX1yZXR1cm4gdGhpc30saS5wcm90b3R5cGUub2ZmPWkucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLGkucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbihlKXt2YXIgdCxuLHI7aWYodm9pZCAwPT09KG49dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT1uLnJlbW92ZUxpc3RlbmVyKXJldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD8odGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCk6dm9pZCAwIT09bltlXSYmKDA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6ZGVsZXRlIG5bZV0pLHRoaXM7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpe3ZhciBvLGk9T2JqZWN0LmtleXMobik7Zm9yKHI9MDtyPGkubGVuZ3RoOysrcilcInJlbW92ZUxpc3RlbmVyXCIhPT0obz1pW3JdKSYmdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMobyk7cmV0dXJuIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKFwicmVtb3ZlTGlzdGVuZXJcIiksdGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCx0aGlzfWlmKFwiZnVuY3Rpb25cIj09dHlwZW9mKHQ9bltlXSkpdGhpcy5yZW1vdmVMaXN0ZW5lcihlLHQpO2Vsc2UgaWYodm9pZCAwIT09dClmb3Iocj10Lmxlbmd0aC0xO3I+PTA7ci0tKXRoaXMucmVtb3ZlTGlzdGVuZXIoZSx0W3JdKTtyZXR1cm4gdGhpc30saS5wcm90b3R5cGUubGlzdGVuZXJzPWZ1bmN0aW9uKGUpe3JldHVybiBkKHRoaXMsZSwhMCl9LGkucHJvdG90eXBlLnJhd0xpc3RlbmVycz1mdW5jdGlvbihlKXtyZXR1cm4gZCh0aGlzLGUsITEpfSxpLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmxpc3RlbmVyQ291bnQ/ZS5saXN0ZW5lckNvdW50KHQpOnAuY2FsbChlLHQpfSxpLnByb3RvdHlwZS5saXN0ZW5lckNvdW50PXAsaS5wcm90b3R5cGUuZXZlbnROYW1lcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ldmVudHNDb3VudD4wP3QodGhpcy5fZXZlbnRzKTpbXX19LDIxNTooZSx0KT0+e3QucmVhZD1mdW5jdGlvbihlLHQsbixyLG8pe3ZhciBpLGEsbD04Km8tci0xLHM9KDE8PGwpLTEsYz1zPj4xLHU9LTcsZj1uP28tMTowLGQ9bj8tMToxLHA9ZVt0K2ZdO2ZvcihmKz1kLGk9cCYoMTw8LXUpLTEscD4+PS11LHUrPWw7dT4wO2k9MjU2KmkrZVt0K2ZdLGYrPWQsdS09OCk7Zm9yKGE9aSYoMTw8LXUpLTEsaT4+PS11LHUrPXI7dT4wO2E9MjU2KmErZVt0K2ZdLGYrPWQsdS09OCk7aWYoMD09PWkpaT0xLWM7ZWxzZXtpZihpPT09cylyZXR1cm4gYT9OYU46MS8wKihwPy0xOjEpO2ErPU1hdGgucG93KDIsciksaS09Y31yZXR1cm4ocD8tMToxKSphKk1hdGgucG93KDIsaS1yKX0sdC53cml0ZT1mdW5jdGlvbihlLHQsbixyLG8saSl7dmFyIGEsbCxzLGM9OCppLW8tMSx1PSgxPDxjKS0xLGY9dT4+MSxkPTIzPT09bz9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAscD1yPzA6aS0xLGg9cj8xOi0xLGc9dDwwfHwwPT09dCYmMS90PDA/MTowO2Zvcih0PU1hdGguYWJzKHQpLGlzTmFOKHQpfHx0PT09MS8wPyhsPWlzTmFOKHQpPzE6MCxhPXUpOihhPU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjIpLHQqKHM9TWF0aC5wb3coMiwtYSkpPDEmJihhLS0scyo9MiksKHQrPWErZj49MT9kL3M6ZCpNYXRoLnBvdygyLDEtZikpKnM+PTImJihhKysscy89MiksYStmPj11PyhsPTAsYT11KTphK2Y+PTE/KGw9KHQqcy0xKSpNYXRoLnBvdygyLG8pLGErPWYpOihsPXQqTWF0aC5wb3coMixmLTEpKk1hdGgucG93KDIsbyksYT0wKSk7bz49ODtlW24rcF09MjU1JmwscCs9aCxsLz0yNTYsby09OCk7Zm9yKGE9YTw8b3xsLGMrPW87Yz4wO2VbbitwXT0yNTUmYSxwKz1oLGEvPTI1NixjLT04KTtlW24rcC1oXXw9MTI4Kmd9fSw5NTE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByO2U9bi5ubWQoZSksZnVuY3Rpb24oKXt2YXIgbyxpPVwiRXhwZWN0ZWQgYSBmdW5jdGlvblwiLGE9XCJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fXCIsbD1cIl9fbG9kYXNoX3BsYWNlaG9sZGVyX19cIixzPTMyLGM9MTI4LHU9MS8wLGY9OTAwNzE5OTI1NDc0MDk5MSxkPU5hTixwPTQyOTQ5NjcyOTUsaD1bW1wiYXJ5XCIsY10sW1wiYmluZFwiLDFdLFtcImJpbmRLZXlcIiwyXSxbXCJjdXJyeVwiLDhdLFtcImN1cnJ5UmlnaHRcIiwxNl0sW1wiZmxpcFwiLDUxMl0sW1wicGFydGlhbFwiLHNdLFtcInBhcnRpYWxSaWdodFwiLDY0XSxbXCJyZWFyZ1wiLDI1Nl1dLGc9XCJbb2JqZWN0IEFyZ3VtZW50c11cIix2PVwiW29iamVjdCBBcnJheV1cIixtPVwiW29iamVjdCBCb29sZWFuXVwiLEM9XCJbb2JqZWN0IERhdGVdXCIseT1cIltvYmplY3QgRXJyb3JdXCIsdz1cIltvYmplY3QgRnVuY3Rpb25dXCIsYj1cIltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dXCIseD1cIltvYmplY3QgTWFwXVwiLF89XCJbb2JqZWN0IE51bWJlcl1cIixPPVwiW29iamVjdCBPYmplY3RdXCIsTD1cIltvYmplY3QgUHJvbWlzZV1cIixFPVwiW29iamVjdCBSZWdFeHBdXCIsUz1cIltvYmplY3QgU2V0XVwiLGo9XCJbb2JqZWN0IFN0cmluZ11cIixNPVwiW29iamVjdCBTeW1ib2xdXCIsaz1cIltvYmplY3QgV2Vha01hcF1cIixSPVwiW29iamVjdCBBcnJheUJ1ZmZlcl1cIixQPVwiW29iamVjdCBEYXRhVmlld11cIixJPVwiW29iamVjdCBGbG9hdDMyQXJyYXldXCIsQT1cIltvYmplY3QgRmxvYXQ2NEFycmF5XVwiLFQ9XCJbb2JqZWN0IEludDhBcnJheV1cIixIPVwiW29iamVjdCBJbnQxNkFycmF5XVwiLEI9XCJbb2JqZWN0IEludDMyQXJyYXldXCIsVj1cIltvYmplY3QgVWludDhBcnJheV1cIixEPVwiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV1cIixaPVwiW29iamVjdCBVaW50MTZBcnJheV1cIiwkPVwiW29iamVjdCBVaW50MzJBcnJheV1cIixOPS9cXGJfX3AgXFwrPSAnJzsvZyxGPS9cXGIoX19wIFxcKz0pICcnIFxcKy9nLFU9LyhfX2VcXCguKj9cXCl8XFxiX190XFwpKSBcXCtcXG4nJzsvZyxXPS8mKD86YW1wfGx0fGd0fHF1b3R8IzM5KTsvZyx6PS9bJjw+XCInXS9nLEc9UmVnRXhwKFcuc291cmNlKSxxPVJlZ0V4cCh6LnNvdXJjZSksWT0vPCUtKFtcXHNcXFNdKz8pJT4vZyxLPS88JShbXFxzXFxTXSs/KSU+L2csWD0vPCU9KFtcXHNcXFNdKz8pJT4vZyxKPS9cXC58XFxbKD86W15bXFxdXSp8KFtcIiddKSg/Oig/IVxcMSlbXlxcXFxdfFxcXFwuKSo/XFwxKVxcXS8sUT0vXlxcdyokLyxlZT0vW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2csdGU9L1tcXFxcXiQuKis/KClbXFxde318XS9nLG5lPVJlZ0V4cCh0ZS5zb3VyY2UpLHJlPS9eXFxzKy8sb2U9L1xccy8saWU9L1xceyg/OlxcblxcL1xcKiBcXFt3cmFwcGVkIHdpdGggLitcXF0gXFwqXFwvKT9cXG4/LyxhZT0vXFx7XFxuXFwvXFwqIFxcW3dyYXBwZWQgd2l0aCAoLispXFxdIFxcKi8sbGU9Lyw/ICYgLyxzZT0vW15cXHgwMC1cXHgyZlxceDNhLVxceDQwXFx4NWItXFx4NjBcXHg3Yi1cXHg3Zl0rL2csY2U9L1soKT0se31cXFtcXF1cXC9cXHNdLyx1ZT0vXFxcXChcXFxcKT8vZyxmZT0vXFwkXFx7KFteXFxcXH1dKig/OlxcXFwuW15cXFxcfV0qKSopXFx9L2csZGU9L1xcdyokLyxwZT0vXlstK10weFswLTlhLWZdKyQvaSxoZT0vXjBiWzAxXSskL2ksZ2U9L15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLyx2ZT0vXjBvWzAtN10rJC9pLG1lPS9eKD86MHxbMS05XVxcZCopJC8sQ2U9L1tcXHhjMC1cXHhkNlxceGQ4LVxceGY2XFx4ZjgtXFx4ZmZcXHUwMTAwLVxcdTAxN2ZdL2cseWU9LygkXikvLHdlPS9bJ1xcblxcclxcdTIwMjhcXHUyMDI5XFxcXF0vZyxiZT1cIlxcXFx1ZDgwMC1cXFxcdWRmZmZcIix4ZT1cIlxcXFx1MDMwMC1cXFxcdTAzNmZcXFxcdWZlMjAtXFxcXHVmZTJmXFxcXHUyMGQwLVxcXFx1MjBmZlwiLF9lPVwiXFxcXHUyNzAwLVxcXFx1MjdiZlwiLE9lPVwiYS16XFxcXHhkZi1cXFxceGY2XFxcXHhmOC1cXFxceGZmXCIsTGU9XCJBLVpcXFxceGMwLVxcXFx4ZDZcXFxceGQ4LVxcXFx4ZGVcIixFZT1cIlxcXFx1ZmUwZVxcXFx1ZmUwZlwiLFNlPVwiXFxcXHhhY1xcXFx4YjFcXFxceGQ3XFxcXHhmN1xcXFx4MDAtXFxcXHgyZlxcXFx4M2EtXFxcXHg0MFxcXFx4NWItXFxcXHg2MFxcXFx4N2ItXFxcXHhiZlxcXFx1MjAwMC1cXFxcdTIwNmYgXFxcXHRcXFxceDBiXFxcXGZcXFxceGEwXFxcXHVmZWZmXFxcXG5cXFxcclxcXFx1MjAyOFxcXFx1MjAyOVxcXFx1MTY4MFxcXFx1MTgwZVxcXFx1MjAwMFxcXFx1MjAwMVxcXFx1MjAwMlxcXFx1MjAwM1xcXFx1MjAwNFxcXFx1MjAwNVxcXFx1MjAwNlxcXFx1MjAwN1xcXFx1MjAwOFxcXFx1MjAwOVxcXFx1MjAwYVxcXFx1MjAyZlxcXFx1MjA1ZlxcXFx1MzAwMFwiLGplPVwiW1wiK2JlK1wiXVwiLE1lPVwiW1wiK1NlK1wiXVwiLGtlPVwiW1wiK3hlK1wiXVwiLFJlPVwiXFxcXGQrXCIsUGU9XCJbXCIrX2UrXCJdXCIsSWU9XCJbXCIrT2UrXCJdXCIsQWU9XCJbXlwiK2JlK1NlK1JlK19lK09lK0xlK1wiXVwiLFRlPVwiXFxcXHVkODNjW1xcXFx1ZGZmYi1cXFxcdWRmZmZdXCIsSGU9XCJbXlwiK2JlK1wiXVwiLEJlPVwiKD86XFxcXHVkODNjW1xcXFx1ZGRlNi1cXFxcdWRkZmZdKXsyfVwiLFZlPVwiW1xcXFx1ZDgwMC1cXFxcdWRiZmZdW1xcXFx1ZGMwMC1cXFxcdWRmZmZdXCIsRGU9XCJbXCIrTGUrXCJdXCIsWmU9XCJcXFxcdTIwMGRcIiwkZT1cIig/OlwiK0llK1wifFwiK0FlK1wiKVwiLE5lPVwiKD86XCIrRGUrXCJ8XCIrQWUrXCIpXCIsRmU9XCIoPzpbJ+KAmV0oPzpkfGxsfG18cmV8c3x0fHZlKSk/XCIsVWU9XCIoPzpbJ+KAmV0oPzpEfExMfE18UkV8U3xUfFZFKSk/XCIsV2U9XCIoPzpcIitrZStcInxcIitUZStcIik/XCIsemU9XCJbXCIrRWUrXCJdP1wiLEdlPXplK1dlK1wiKD86XCIrWmUrXCIoPzpcIitbSGUsQmUsVmVdLmpvaW4oXCJ8XCIpK1wiKVwiK3plK1dlK1wiKSpcIixxZT1cIig/OlwiK1tQZSxCZSxWZV0uam9pbihcInxcIikrXCIpXCIrR2UsWWU9XCIoPzpcIitbSGUra2UrXCI/XCIsa2UsQmUsVmUsamVdLmpvaW4oXCJ8XCIpK1wiKVwiLEtlPVJlZ0V4cChcIlsn4oCZXVwiLFwiZ1wiKSxYZT1SZWdFeHAoa2UsXCJnXCIpLEplPVJlZ0V4cChUZStcIig/PVwiK1RlK1wiKXxcIitZZStHZSxcImdcIiksUWU9UmVnRXhwKFtEZStcIj9cIitJZStcIitcIitGZStcIig/PVwiK1tNZSxEZSxcIiRcIl0uam9pbihcInxcIikrXCIpXCIsTmUrXCIrXCIrVWUrXCIoPz1cIitbTWUsRGUrJGUsXCIkXCJdLmpvaW4oXCJ8XCIpK1wiKVwiLERlK1wiP1wiKyRlK1wiK1wiK0ZlLERlK1wiK1wiK1VlLFwiXFxcXGQqKD86MVNUfDJORHwzUkR8KD8hWzEyM10pXFxcXGRUSCkoPz1cXFxcYnxbYS16X10pXCIsXCJcXFxcZCooPzoxc3R8Mm5kfDNyZHwoPyFbMTIzXSlcXFxcZHRoKSg/PVxcXFxifFtBLVpfXSlcIixSZSxxZV0uam9pbihcInxcIiksXCJnXCIpLGV0PVJlZ0V4cChcIltcIitaZStiZSt4ZStFZStcIl1cIiksdHQ9L1thLXpdW0EtWl18W0EtWl17Mn1bYS16XXxbMC05XVthLXpBLVpdfFthLXpBLVpdWzAtOV18W15hLXpBLVowLTkgXS8sbnQ9W1wiQXJyYXlcIixcIkJ1ZmZlclwiLFwiRGF0YVZpZXdcIixcIkRhdGVcIixcIkVycm9yXCIsXCJGbG9hdDMyQXJyYXlcIixcIkZsb2F0NjRBcnJheVwiLFwiRnVuY3Rpb25cIixcIkludDhBcnJheVwiLFwiSW50MTZBcnJheVwiLFwiSW50MzJBcnJheVwiLFwiTWFwXCIsXCJNYXRoXCIsXCJPYmplY3RcIixcIlByb21pc2VcIixcIlJlZ0V4cFwiLFwiU2V0XCIsXCJTdHJpbmdcIixcIlN5bWJvbFwiLFwiVHlwZUVycm9yXCIsXCJVaW50OEFycmF5XCIsXCJVaW50OENsYW1wZWRBcnJheVwiLFwiVWludDE2QXJyYXlcIixcIlVpbnQzMkFycmF5XCIsXCJXZWFrTWFwXCIsXCJfXCIsXCJjbGVhclRpbWVvdXRcIixcImlzRmluaXRlXCIsXCJwYXJzZUludFwiLFwic2V0VGltZW91dFwiXSxydD0tMSxvdD17fTtvdFtJXT1vdFtBXT1vdFtUXT1vdFtIXT1vdFtCXT1vdFtWXT1vdFtEXT1vdFtaXT1vdFskXT0hMCxvdFtnXT1vdFt2XT1vdFtSXT1vdFttXT1vdFtQXT1vdFtDXT1vdFt5XT1vdFt3XT1vdFt4XT1vdFtfXT1vdFtPXT1vdFtFXT1vdFtTXT1vdFtqXT1vdFtrXT0hMTt2YXIgaXQ9e307aXRbZ109aXRbdl09aXRbUl09aXRbUF09aXRbbV09aXRbQ109aXRbSV09aXRbQV09aXRbVF09aXRbSF09aXRbQl09aXRbeF09aXRbX109aXRbT109aXRbRV09aXRbU109aXRbal09aXRbTV09aXRbVl09aXRbRF09aXRbWl09aXRbJF09ITAsaXRbeV09aXRbd109aXRba109ITE7dmFyIGF0PXtcIlxcXFxcIjpcIlxcXFxcIixcIidcIjpcIidcIixcIlxcblwiOlwiblwiLFwiXFxyXCI6XCJyXCIsXCJcXHUyMDI4XCI6XCJ1MjAyOFwiLFwiXFx1MjAyOVwiOlwidTIwMjlcIn0sbHQ9cGFyc2VGbG9hdCxzdD1wYXJzZUludCxjdD1cIm9iamVjdFwiPT10eXBlb2Ygbi5nJiZuLmcmJm4uZy5PYmplY3Q9PT1PYmplY3QmJm4uZyx1dD1cIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsZnQ9Y3R8fHV0fHxGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCksZHQ9dCYmIXQubm9kZVR5cGUmJnQscHQ9ZHQmJmUmJiFlLm5vZGVUeXBlJiZlLGh0PXB0JiZwdC5leHBvcnRzPT09ZHQsZ3Q9aHQmJmN0LnByb2Nlc3MsdnQ9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIHB0JiZwdC5yZXF1aXJlJiZwdC5yZXF1aXJlKFwidXRpbFwiKS50eXBlc3x8Z3QmJmd0LmJpbmRpbmcmJmd0LmJpbmRpbmcoXCJ1dGlsXCIpfWNhdGNoKGUpe319KCksbXQ9dnQmJnZ0LmlzQXJyYXlCdWZmZXIsQ3Q9dnQmJnZ0LmlzRGF0ZSx5dD12dCYmdnQuaXNNYXAsd3Q9dnQmJnZ0LmlzUmVnRXhwLGJ0PXZ0JiZ2dC5pc1NldCx4dD12dCYmdnQuaXNUeXBlZEFycmF5O2Z1bmN0aW9uIF90KGUsdCxuKXtzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gZS5jYWxsKHQpO2Nhc2UgMTpyZXR1cm4gZS5jYWxsKHQsblswXSk7Y2FzZSAyOnJldHVybiBlLmNhbGwodCxuWzBdLG5bMV0pO2Nhc2UgMzpyZXR1cm4gZS5jYWxsKHQsblswXSxuWzFdLG5bMl0pfXJldHVybiBlLmFwcGx5KHQsbil9ZnVuY3Rpb24gT3QoZSx0LG4scil7Zm9yKHZhciBvPS0xLGk9bnVsbD09ZT8wOmUubGVuZ3RoOysrbzxpOyl7dmFyIGE9ZVtvXTt0KHIsYSxuKGEpLGUpfXJldHVybiByfWZ1bmN0aW9uIEx0KGUsdCl7Zm9yKHZhciBuPS0xLHI9bnVsbD09ZT8wOmUubGVuZ3RoOysrbjxyJiYhMSE9PXQoZVtuXSxuLGUpOyk7cmV0dXJuIGV9ZnVuY3Rpb24gRXQoZSx0KXtmb3IodmFyIG49bnVsbD09ZT8wOmUubGVuZ3RoO24tLSYmITEhPT10KGVbbl0sbixlKTspO3JldHVybiBlfWZ1bmN0aW9uIFN0KGUsdCl7Zm9yKHZhciBuPS0xLHI9bnVsbD09ZT8wOmUubGVuZ3RoOysrbjxyOylpZighdChlW25dLG4sZSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24ganQoZSx0KXtmb3IodmFyIG49LTEscj1udWxsPT1lPzA6ZS5sZW5ndGgsbz0wLGk9W107KytuPHI7KXt2YXIgYT1lW25dO3QoYSxuLGUpJiYoaVtvKytdPWEpfXJldHVybiBpfWZ1bmN0aW9uIE10KGUsdCl7cmV0dXJuIShudWxsPT1lfHwhZS5sZW5ndGgpJiZEdChlLHQsMCk+LTF9ZnVuY3Rpb24ga3QoZSx0LG4pe2Zvcih2YXIgcj0tMSxvPW51bGw9PWU/MDplLmxlbmd0aDsrK3I8bzspaWYobih0LGVbcl0pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFJ0KGUsdCl7Zm9yKHZhciBuPS0xLHI9bnVsbD09ZT8wOmUubGVuZ3RoLG89QXJyYXkocik7KytuPHI7KW9bbl09dChlW25dLG4sZSk7cmV0dXJuIG99ZnVuY3Rpb24gUHQoZSx0KXtmb3IodmFyIG49LTEscj10Lmxlbmd0aCxvPWUubGVuZ3RoOysrbjxyOyllW28rbl09dFtuXTtyZXR1cm4gZX1mdW5jdGlvbiBJdChlLHQsbixyKXt2YXIgbz0tMSxpPW51bGw9PWU/MDplLmxlbmd0aDtmb3IociYmaSYmKG49ZVsrK29dKTsrK288aTspbj10KG4sZVtvXSxvLGUpO3JldHVybiBufWZ1bmN0aW9uIEF0KGUsdCxuLHIpe3ZhciBvPW51bGw9PWU/MDplLmxlbmd0aDtmb3IociYmbyYmKG49ZVstLW9dKTtvLS07KW49dChuLGVbb10sbyxlKTtyZXR1cm4gbn1mdW5jdGlvbiBUdChlLHQpe2Zvcih2YXIgbj0tMSxyPW51bGw9PWU/MDplLmxlbmd0aDsrK248cjspaWYodChlW25dLG4sZSkpcmV0dXJuITA7cmV0dXJuITF9dmFyIEh0PUZ0KFwibGVuZ3RoXCIpO2Z1bmN0aW9uIEJ0KGUsdCxuKXt2YXIgcjtyZXR1cm4gbihlLChmdW5jdGlvbihlLG4sbyl7aWYodChlLG4sbykpcmV0dXJuIHI9biwhMX0pKSxyfWZ1bmN0aW9uIFZ0KGUsdCxuLHIpe2Zvcih2YXIgbz1lLmxlbmd0aCxpPW4rKHI/MTotMSk7cj9pLS06KytpPG87KWlmKHQoZVtpXSxpLGUpKXJldHVybiBpO3JldHVybi0xfWZ1bmN0aW9uIER0KGUsdCxuKXtyZXR1cm4gdD09dD9mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPW4tMSxvPWUubGVuZ3RoOysrcjxvOylpZihlW3JdPT09dClyZXR1cm4gcjtyZXR1cm4tMX0oZSx0LG4pOlZ0KGUsJHQsbil9ZnVuY3Rpb24gWnQoZSx0LG4scil7Zm9yKHZhciBvPW4tMSxpPWUubGVuZ3RoOysrbzxpOylpZihyKGVbb10sdCkpcmV0dXJuIG87cmV0dXJuLTF9ZnVuY3Rpb24gJHQoZSl7cmV0dXJuIGUhPWV9ZnVuY3Rpb24gTnQoZSx0KXt2YXIgbj1udWxsPT1lPzA6ZS5sZW5ndGg7cmV0dXJuIG4/enQoZSx0KS9uOmR9ZnVuY3Rpb24gRnQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P286dFtlXX19ZnVuY3Rpb24gVXQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT1lP286ZVt0XX19ZnVuY3Rpb24gV3QoZSx0LG4scixvKXtyZXR1cm4gbyhlLChmdW5jdGlvbihlLG8saSl7bj1yPyhyPSExLGUpOnQobixlLG8saSl9KSksbn1mdW5jdGlvbiB6dChlLHQpe2Zvcih2YXIgbixyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KXt2YXIgYT10KGVbcl0pO2EhPT1vJiYobj1uPT09bz9hOm4rYSl9cmV0dXJuIG59ZnVuY3Rpb24gR3QoZSx0KXtmb3IodmFyIG49LTEscj1BcnJheShlKTsrK248ZTspcltuXT10KG4pO3JldHVybiByfWZ1bmN0aW9uIHF0KGUpe3JldHVybiBlP2Uuc2xpY2UoMCxmbihlKSsxKS5yZXBsYWNlKHJlLFwiXCIpOmV9ZnVuY3Rpb24gWXQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpfX1mdW5jdGlvbiBLdChlLHQpe3JldHVybiBSdCh0LChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pKX1mdW5jdGlvbiBYdChlLHQpe3JldHVybiBlLmhhcyh0KX1mdW5jdGlvbiBKdChlLHQpe2Zvcih2YXIgbj0tMSxyPWUubGVuZ3RoOysrbjxyJiZEdCh0LGVbbl0sMCk+LTE7KTtyZXR1cm4gbn1mdW5jdGlvbiBRdChlLHQpe2Zvcih2YXIgbj1lLmxlbmd0aDtuLS0mJkR0KHQsZVtuXSwwKT4tMTspO3JldHVybiBufXZhciBlbj1VdCh7w4A6XCJBXCIsw4E6XCJBXCIsw4I6XCJBXCIsw4M6XCJBXCIsw4Q6XCJBXCIsw4U6XCJBXCIsw6A6XCJhXCIsw6E6XCJhXCIsw6I6XCJhXCIsw6M6XCJhXCIsw6Q6XCJhXCIsw6U6XCJhXCIsw4c6XCJDXCIsw6c6XCJjXCIsw5A6XCJEXCIsw7A6XCJkXCIsw4g6XCJFXCIsw4k6XCJFXCIsw4o6XCJFXCIsw4s6XCJFXCIsw6g6XCJlXCIsw6k6XCJlXCIsw6o6XCJlXCIsw6s6XCJlXCIsw4w6XCJJXCIsw406XCJJXCIsw446XCJJXCIsw486XCJJXCIsw6w6XCJpXCIsw606XCJpXCIsw646XCJpXCIsw686XCJpXCIsw5E6XCJOXCIsw7E6XCJuXCIsw5I6XCJPXCIsw5M6XCJPXCIsw5Q6XCJPXCIsw5U6XCJPXCIsw5Y6XCJPXCIsw5g6XCJPXCIsw7I6XCJvXCIsw7M6XCJvXCIsw7Q6XCJvXCIsw7U6XCJvXCIsw7Y6XCJvXCIsw7g6XCJvXCIsw5k6XCJVXCIsw5o6XCJVXCIsw5s6XCJVXCIsw5w6XCJVXCIsw7k6XCJ1XCIsw7o6XCJ1XCIsw7s6XCJ1XCIsw7w6XCJ1XCIsw506XCJZXCIsw706XCJ5XCIsw786XCJ5XCIsw4Y6XCJBZVwiLMOmOlwiYWVcIizDnjpcIlRoXCIsw746XCJ0aFwiLMOfOlwic3NcIizEgDpcIkFcIizEgjpcIkFcIizEhDpcIkFcIizEgTpcImFcIizEgzpcImFcIizEhTpcImFcIizEhjpcIkNcIizEiDpcIkNcIizEijpcIkNcIizEjDpcIkNcIizEhzpcImNcIizEiTpcImNcIizEizpcImNcIizEjTpcImNcIizEjjpcIkRcIizEkDpcIkRcIizEjzpcImRcIizEkTpcImRcIizEkjpcIkVcIizElDpcIkVcIizEljpcIkVcIizEmDpcIkVcIizEmjpcIkVcIizEkzpcImVcIizElTpcImVcIizElzpcImVcIizEmTpcImVcIizEmzpcImVcIizEnDpcIkdcIizEnjpcIkdcIizEoDpcIkdcIizEojpcIkdcIizEnTpcImdcIizEnzpcImdcIizEoTpcImdcIizEozpcImdcIizEpDpcIkhcIizEpjpcIkhcIizEpTpcImhcIizEpzpcImhcIizEqDpcIklcIizEqjpcIklcIizErDpcIklcIizErjpcIklcIizEsDpcIklcIizEqTpcImlcIizEqzpcImlcIizErTpcImlcIizErzpcImlcIizEsTpcImlcIizEtDpcIkpcIizEtTpcImpcIizEtjpcIktcIizEtzpcImtcIizEuDpcImtcIizEuTpcIkxcIizEuzpcIkxcIizEvTpcIkxcIizEvzpcIkxcIizFgTpcIkxcIizEujpcImxcIizEvDpcImxcIizEvjpcImxcIizFgDpcImxcIizFgjpcImxcIizFgzpcIk5cIizFhTpcIk5cIizFhzpcIk5cIizFijpcIk5cIizFhDpcIm5cIizFhjpcIm5cIizFiDpcIm5cIizFizpcIm5cIizFjDpcIk9cIizFjjpcIk9cIizFkDpcIk9cIizFjTpcIm9cIizFjzpcIm9cIizFkTpcIm9cIizFlDpcIlJcIizFljpcIlJcIizFmDpcIlJcIizFlTpcInJcIizFlzpcInJcIizFmTpcInJcIizFmjpcIlNcIizFnDpcIlNcIizFnjpcIlNcIizFoDpcIlNcIizFmzpcInNcIizFnTpcInNcIizFnzpcInNcIizFoTpcInNcIizFojpcIlRcIizFpDpcIlRcIizFpjpcIlRcIizFozpcInRcIizFpTpcInRcIizFpzpcInRcIizFqDpcIlVcIizFqjpcIlVcIizFrDpcIlVcIizFrjpcIlVcIizFsDpcIlVcIizFsjpcIlVcIizFqTpcInVcIizFqzpcInVcIizFrTpcInVcIizFrzpcInVcIizFsTpcInVcIizFszpcInVcIizFtDpcIldcIizFtTpcIndcIizFtjpcIllcIizFtzpcInlcIizFuDpcIllcIizFuTpcIlpcIizFuzpcIlpcIizFvTpcIlpcIizFujpcInpcIizFvDpcInpcIizFvjpcInpcIizEsjpcIklKXCIsxLM6XCJpalwiLMWSOlwiT2VcIizFkzpcIm9lXCIsxYk6XCInblwiLMW/Olwic1wifSksdG49VXQoe1wiJlwiOlwiJmFtcDtcIixcIjxcIjpcIiZsdDtcIixcIj5cIjpcIiZndDtcIiwnXCInOlwiJnF1b3Q7XCIsXCInXCI6XCImIzM5O1wifSk7ZnVuY3Rpb24gbm4oZSl7cmV0dXJuXCJcXFxcXCIrYXRbZV19ZnVuY3Rpb24gcm4oZSl7cmV0dXJuIGV0LnRlc3QoZSl9ZnVuY3Rpb24gb24oZSl7dmFyIHQ9LTEsbj1BcnJheShlLnNpemUpO3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKGUscil7blsrK3RdPVtyLGVdfSkpLG59ZnVuY3Rpb24gYW4oZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGUodChuKSl9fWZ1bmN0aW9uIGxuKGUsdCl7Zm9yKHZhciBuPS0xLHI9ZS5sZW5ndGgsbz0wLGk9W107KytuPHI7KXt2YXIgYT1lW25dO2EhPT10JiZhIT09bHx8KGVbbl09bCxpW28rK109bil9cmV0dXJuIGl9ZnVuY3Rpb24gc24oZSl7dmFyIHQ9LTEsbj1BcnJheShlLnNpemUpO3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKGUpe25bKyt0XT1lfSkpLG59ZnVuY3Rpb24gY24oZSl7cmV0dXJuIHJuKGUpP2Z1bmN0aW9uKGUpe2Zvcih2YXIgdD1KZS5sYXN0SW5kZXg9MDtKZS50ZXN0KGUpOykrK3Q7cmV0dXJuIHR9KGUpOkh0KGUpfWZ1bmN0aW9uIHVuKGUpe3JldHVybiBybihlKT9mdW5jdGlvbihlKXtyZXR1cm4gZS5tYXRjaChKZSl8fFtdfShlKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdChcIlwiKX0oZSl9ZnVuY3Rpb24gZm4oZSl7Zm9yKHZhciB0PWUubGVuZ3RoO3QtLSYmb2UudGVzdChlLmNoYXJBdCh0KSk7KTtyZXR1cm4gdH12YXIgZG49VXQoe1wiJmFtcDtcIjpcIiZcIixcIiZsdDtcIjpcIjxcIixcIiZndDtcIjpcIj5cIixcIiZxdW90O1wiOidcIicsXCImIzM5O1wiOlwiJ1wifSkscG49ZnVuY3Rpb24gZSh0KXt2YXIgbixyPSh0PW51bGw9PXQ/ZnQ6cG4uZGVmYXVsdHMoZnQuT2JqZWN0KCksdCxwbi5waWNrKGZ0LG50KSkpLkFycmF5LG9lPXQuRGF0ZSxiZT10LkVycm9yLHhlPXQuRnVuY3Rpb24sX2U9dC5NYXRoLE9lPXQuT2JqZWN0LExlPXQuUmVnRXhwLEVlPXQuU3RyaW5nLFNlPXQuVHlwZUVycm9yLGplPXIucHJvdG90eXBlLE1lPXhlLnByb3RvdHlwZSxrZT1PZS5wcm90b3R5cGUsUmU9dFtcIl9fY29yZS1qc19zaGFyZWRfX1wiXSxQZT1NZS50b1N0cmluZyxJZT1rZS5oYXNPd25Qcm9wZXJ0eSxBZT0wLFRlPShuPS9bXi5dKyQvLmV4ZWMoUmUmJlJlLmtleXMmJlJlLmtleXMuSUVfUFJPVE98fFwiXCIpKT9cIlN5bWJvbChzcmMpXzEuXCIrbjpcIlwiLEhlPWtlLnRvU3RyaW5nLEJlPVBlLmNhbGwoT2UpLFZlPWZ0Ll8sRGU9TGUoXCJeXCIrUGUuY2FsbChJZSkucmVwbGFjZSh0ZSxcIlxcXFwkJlwiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLFwiJDEuKj9cIikrXCIkXCIpLFplPWh0P3QuQnVmZmVyOm8sJGU9dC5TeW1ib2wsTmU9dC5VaW50OEFycmF5LEZlPVplP1plLmFsbG9jVW5zYWZlOm8sVWU9YW4oT2UuZ2V0UHJvdG90eXBlT2YsT2UpLFdlPU9lLmNyZWF0ZSx6ZT1rZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxHZT1qZS5zcGxpY2UscWU9JGU/JGUuaXNDb25jYXRTcHJlYWRhYmxlOm8sWWU9JGU/JGUuaXRlcmF0b3I6byxKZT0kZT8kZS50b1N0cmluZ1RhZzpvLGV0PWZ1bmN0aW9uKCl7dHJ5e3ZhciBlPXNpKE9lLFwiZGVmaW5lUHJvcGVydHlcIik7cmV0dXJuIGUoe30sXCJcIix7fSksZX1jYXRjaChlKXt9fSgpLGF0PXQuY2xlYXJUaW1lb3V0IT09ZnQuY2xlYXJUaW1lb3V0JiZ0LmNsZWFyVGltZW91dCxjdD1vZSYmb2Uubm93IT09ZnQuRGF0ZS5ub3cmJm9lLm5vdyx1dD10LnNldFRpbWVvdXQhPT1mdC5zZXRUaW1lb3V0JiZ0LnNldFRpbWVvdXQsZHQ9X2UuY2VpbCxwdD1fZS5mbG9vcixndD1PZS5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsdnQ9WmU/WmUuaXNCdWZmZXI6byxIdD10LmlzRmluaXRlLFV0PWplLmpvaW4saG49YW4oT2Uua2V5cyxPZSksZ249X2UubWF4LHZuPV9lLm1pbixtbj1vZS5ub3csQ249dC5wYXJzZUludCx5bj1fZS5yYW5kb20sd249amUucmV2ZXJzZSxibj1zaSh0LFwiRGF0YVZpZXdcIikseG49c2kodCxcIk1hcFwiKSxfbj1zaSh0LFwiUHJvbWlzZVwiKSxPbj1zaSh0LFwiU2V0XCIpLExuPXNpKHQsXCJXZWFrTWFwXCIpLEVuPXNpKE9lLFwiY3JlYXRlXCIpLFNuPUxuJiZuZXcgTG4sam49e30sTW49QWkoYm4pLGtuPUFpKHhuKSxSbj1BaShfbiksUG49QWkoT24pLEluPUFpKExuKSxBbj0kZT8kZS5wcm90b3R5cGU6byxUbj1Bbj9Bbi52YWx1ZU9mOm8sSG49QW4/QW4udG9TdHJpbmc6bztmdW5jdGlvbiBCbihlKXtpZihYYShlKSYmIVphKGUpJiYhKGUgaW5zdGFuY2VvZiAkbikpe2lmKGUgaW5zdGFuY2VvZiBabilyZXR1cm4gZTtpZihJZS5jYWxsKGUsXCJfX3dyYXBwZWRfX1wiKSlyZXR1cm4gVGkoZSl9cmV0dXJuIG5ldyBabihlKX12YXIgVm49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBmdW5jdGlvbih0KXtpZighS2EodCkpcmV0dXJue307aWYoV2UpcmV0dXJuIFdlKHQpO2UucHJvdG90eXBlPXQ7dmFyIG49bmV3IGU7cmV0dXJuIGUucHJvdG90eXBlPW8sbn19KCk7ZnVuY3Rpb24gRG4oKXt9ZnVuY3Rpb24gWm4oZSx0KXt0aGlzLl9fd3JhcHBlZF9fPWUsdGhpcy5fX2FjdGlvbnNfXz1bXSx0aGlzLl9fY2hhaW5fXz0hIXQsdGhpcy5fX2luZGV4X189MCx0aGlzLl9fdmFsdWVzX189b31mdW5jdGlvbiAkbihlKXt0aGlzLl9fd3JhcHBlZF9fPWUsdGhpcy5fX2FjdGlvbnNfXz1bXSx0aGlzLl9fZGlyX189MSx0aGlzLl9fZmlsdGVyZWRfXz0hMSx0aGlzLl9faXRlcmF0ZWVzX189W10sdGhpcy5fX3Rha2VDb3VudF9fPXAsdGhpcy5fX3ZpZXdzX189W119ZnVuY3Rpb24gTm4oZSl7dmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24gRm4oZSl7dmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24gVW4oZSl7dmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19ZnVuY3Rpb24gV24oZSl7dmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuX19kYXRhX189bmV3IFVuOysrdDxuOyl0aGlzLmFkZChlW3RdKX1mdW5jdGlvbiB6bihlKXt2YXIgdD10aGlzLl9fZGF0YV9fPW5ldyBGbihlKTt0aGlzLnNpemU9dC5zaXplfWZ1bmN0aW9uIEduKGUsdCl7dmFyIG49WmEoZSkscj0hbiYmRGEoZSksbz0hbiYmIXImJlVhKGUpLGk9IW4mJiFyJiYhbyYmaWwoZSksYT1ufHxyfHxvfHxpLGw9YT9HdChlLmxlbmd0aCxFZSk6W10scz1sLmxlbmd0aDtmb3IodmFyIGMgaW4gZSkhdCYmIUllLmNhbGwoZSxjKXx8YSYmKFwibGVuZ3RoXCI9PWN8fG8mJihcIm9mZnNldFwiPT1jfHxcInBhcmVudFwiPT1jKXx8aSYmKFwiYnVmZmVyXCI9PWN8fFwiYnl0ZUxlbmd0aFwiPT1jfHxcImJ5dGVPZmZzZXRcIj09Yyl8fGdpKGMscykpfHxsLnB1c2goYyk7cmV0dXJuIGx9ZnVuY3Rpb24gcW4oZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIHQ/ZVtVcigwLHQtMSldOm99ZnVuY3Rpb24gWW4oZSx0KXtyZXR1cm4gUmkoRW8oZSksb3IodCwwLGUubGVuZ3RoKSl9ZnVuY3Rpb24gS24oZSl7cmV0dXJuIFJpKEVvKGUpKX1mdW5jdGlvbiBYbihlLHQsbil7KG4hPT1vJiYhSGEoZVt0XSxuKXx8bj09PW8mJiEodCBpbiBlKSkmJm5yKGUsdCxuKX1mdW5jdGlvbiBKbihlLHQsbil7dmFyIHI9ZVt0XTtJZS5jYWxsKGUsdCkmJkhhKHIsbikmJihuIT09b3x8dCBpbiBlKXx8bnIoZSx0LG4pfWZ1bmN0aW9uIFFuKGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoO24tLTspaWYoSGEoZVtuXVswXSx0KSlyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiBlcihlLHQsbixyKXtyZXR1cm4gY3IoZSwoZnVuY3Rpb24oZSxvLGkpe3QocixlLG4oZSksaSl9KSkscn1mdW5jdGlvbiB0cihlLHQpe3JldHVybiBlJiZTbyh0LFNsKHQpLGUpfWZ1bmN0aW9uIG5yKGUsdCxuKXtcIl9fcHJvdG9fX1wiPT10JiZldD9ldChlLHQse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOm4sd3JpdGFibGU6ITB9KTplW3RdPW59ZnVuY3Rpb24gcnIoZSx0KXtmb3IodmFyIG49LTEsaT10Lmxlbmd0aCxhPXIoaSksbD1udWxsPT1lOysrbjxpOylhW25dPWw/bzp4bChlLHRbbl0pO3JldHVybiBhfWZ1bmN0aW9uIG9yKGUsdCxuKXtyZXR1cm4gZT09ZSYmKG4hPT1vJiYoZT1lPD1uP2U6biksdCE9PW8mJihlPWU+PXQ/ZTp0KSksZX1mdW5jdGlvbiBpcihlLHQsbixyLGksYSl7dmFyIGwscz0xJnQsYz0yJnQsdT00JnQ7aWYobiYmKGw9aT9uKGUscixpLGEpOm4oZSkpLGwhPT1vKXJldHVybiBsO2lmKCFLYShlKSlyZXR1cm4gZTt2YXIgZj1aYShlKTtpZihmKXtpZihsPWZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoLG49bmV3IGUuY29uc3RydWN0b3IodCk7cmV0dXJuIHQmJlwic3RyaW5nXCI9PXR5cGVvZiBlWzBdJiZJZS5jYWxsKGUsXCJpbmRleFwiKSYmKG4uaW5kZXg9ZS5pbmRleCxuLmlucHV0PWUuaW5wdXQpLG59KGUpLCFzKXJldHVybiBFbyhlLGwpfWVsc2V7dmFyIGQ9ZmkoZSkscD1kPT13fHxkPT1iO2lmKFVhKGUpKXJldHVybiB3byhlLHMpO2lmKGQ9PU98fGQ9PWd8fHAmJiFpKXtpZihsPWN8fHA/e306cGkoZSksIXMpcmV0dXJuIGM/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gU28oZSx1aShlKSx0KX0oZSxmdW5jdGlvbihlLHQpe3JldHVybiBlJiZTbyh0LGpsKHQpLGUpfShsLGUpKTpmdW5jdGlvbihlLHQpe3JldHVybiBTbyhlLGNpKGUpLHQpfShlLHRyKGwsZSkpfWVsc2V7aWYoIWl0W2RdKXJldHVybiBpP2U6e307bD1mdW5jdGlvbihlLHQsbil7dmFyIHIsbz1lLmNvbnN0cnVjdG9yO3N3aXRjaCh0KXtjYXNlIFI6cmV0dXJuIGJvKGUpO2Nhc2UgbTpjYXNlIEM6cmV0dXJuIG5ldyBvKCtlKTtjYXNlIFA6cmV0dXJuIGZ1bmN0aW9uKGUsdCl7dmFyIG49dD9ibyhlLmJ1ZmZlcik6ZS5idWZmZXI7cmV0dXJuIG5ldyBlLmNvbnN0cnVjdG9yKG4sZS5ieXRlT2Zmc2V0LGUuYnl0ZUxlbmd0aCl9KGUsbik7Y2FzZSBJOmNhc2UgQTpjYXNlIFQ6Y2FzZSBIOmNhc2UgQjpjYXNlIFY6Y2FzZSBEOmNhc2UgWjpjYXNlICQ6cmV0dXJuIHhvKGUsbik7Y2FzZSB4OnJldHVybiBuZXcgbztjYXNlIF86Y2FzZSBqOnJldHVybiBuZXcgbyhlKTtjYXNlIEU6cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBlLmNvbnN0cnVjdG9yKGUuc291cmNlLGRlLmV4ZWMoZSkpO3JldHVybiB0Lmxhc3RJbmRleD1lLmxhc3RJbmRleCx0fShlKTtjYXNlIFM6cmV0dXJuIG5ldyBvO2Nhc2UgTTpyZXR1cm4gcj1lLFRuP09lKFRuLmNhbGwocikpOnt9fX0oZSxkLHMpfX1hfHwoYT1uZXcgem4pO3ZhciBoPWEuZ2V0KGUpO2lmKGgpcmV0dXJuIGg7YS5zZXQoZSxsKSxubChlKT9lLmZvckVhY2goKGZ1bmN0aW9uKHIpe2wuYWRkKGlyKHIsdCxuLHIsZSxhKSl9KSk6SmEoZSkmJmUuZm9yRWFjaCgoZnVuY3Rpb24ocixvKXtsLnNldChvLGlyKHIsdCxuLG8sZSxhKSl9KSk7dmFyIHY9Zj9vOih1P2M/dGk6ZWk6Yz9qbDpTbCkoZSk7cmV0dXJuIEx0KHZ8fGUsKGZ1bmN0aW9uKHIsbyl7diYmKHI9ZVtvPXJdKSxKbihsLG8saXIocix0LG4sbyxlLGEpKX0pKSxsfWZ1bmN0aW9uIGFyKGUsdCxuKXt2YXIgcj1uLmxlbmd0aDtpZihudWxsPT1lKXJldHVybiFyO2ZvcihlPU9lKGUpO3ItLTspe3ZhciBpPW5bcl0sYT10W2ldLGw9ZVtpXTtpZihsPT09byYmIShpIGluIGUpfHwhYShsKSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBscihlLHQsbil7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgU2UoaSk7cmV0dXJuIFNpKChmdW5jdGlvbigpe2UuYXBwbHkobyxuKX0pLHQpfWZ1bmN0aW9uIHNyKGUsdCxuLHIpe3ZhciBvPS0xLGk9TXQsYT0hMCxsPWUubGVuZ3RoLHM9W10sYz10Lmxlbmd0aDtpZighbClyZXR1cm4gcztuJiYodD1SdCh0LFl0KG4pKSkscj8oaT1rdCxhPSExKTp0Lmxlbmd0aD49MjAwJiYoaT1YdCxhPSExLHQ9bmV3IFduKHQpKTtlOmZvcig7KytvPGw7KXt2YXIgdT1lW29dLGY9bnVsbD09bj91Om4odSk7aWYodT1yfHwwIT09dT91OjAsYSYmZj09Zil7Zm9yKHZhciBkPWM7ZC0tOylpZih0W2RdPT09Ziljb250aW51ZSBlO3MucHVzaCh1KX1lbHNlIGkodCxmLHIpfHxzLnB1c2godSl9cmV0dXJuIHN9Qm4udGVtcGxhdGVTZXR0aW5ncz17ZXNjYXBlOlksZXZhbHVhdGU6SyxpbnRlcnBvbGF0ZTpYLHZhcmlhYmxlOlwiXCIsaW1wb3J0czp7XzpCbn19LEJuLnByb3RvdHlwZT1Ebi5wcm90b3R5cGUsQm4ucHJvdG90eXBlLmNvbnN0cnVjdG9yPUJuLFpuLnByb3RvdHlwZT1WbihEbi5wcm90b3R5cGUpLFpuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1abiwkbi5wcm90b3R5cGU9Vm4oRG4ucHJvdG90eXBlKSwkbi5wcm90b3R5cGUuY29uc3RydWN0b3I9JG4sTm4ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1Fbj9FbihudWxsKTp7fSx0aGlzLnNpemU9MH0sTm4ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmhhcyhlKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bZV07cmV0dXJuIHRoaXMuc2l6ZS09dD8xOjAsdH0sTm4ucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fO2lmKEVuKXt2YXIgbj10W2VdO3JldHVybiBuPT09YT9vOm59cmV0dXJuIEllLmNhbGwodCxlKT90W2VdOm99LE5uLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXztyZXR1cm4gRW4/dFtlXSE9PW86SWUuY2FsbCh0LGUpfSxObi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyhlKT8wOjEsbltlXT1FbiYmdD09PW8/YTp0LHRoaXN9LEZuLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9LEZuLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxuPVFuKHQsZSk7cmV0dXJuIShuPDB8fChuPT10Lmxlbmd0aC0xP3QucG9wKCk6R2UuY2FsbCh0LG4sMSksLS10aGlzLnNpemUsMCkpfSxGbi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX18sbj1Rbih0LGUpO3JldHVybiBuPDA/bzp0W25dWzFdfSxGbi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiBRbih0aGlzLl9fZGF0YV9fLGUpPi0xfSxGbi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fX2RhdGFfXyxyPVFuKG4sZSk7cmV0dXJuIHI8MD8oKyt0aGlzLnNpemUsbi5wdXNoKFtlLHRdKSk6bltyXVsxXT10LHRoaXN9LFVuLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuc2l6ZT0wLHRoaXMuX19kYXRhX189e2hhc2g6bmV3IE5uLG1hcDpuZXcoeG58fEZuKSxzdHJpbmc6bmV3IE5ufX0sVW4ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXt2YXIgdD1haSh0aGlzLGUpLmRlbGV0ZShlKTtyZXR1cm4gdGhpcy5zaXplLT10PzE6MCx0fSxVbi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBhaSh0aGlzLGUpLmdldChlKX0sVW4ucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gYWkodGhpcyxlKS5oYXMoZSl9LFVuLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1haSh0aGlzLGUpLHI9bi5zaXplO3JldHVybiBuLnNldChlLHQpLHRoaXMuc2l6ZSs9bi5zaXplPT1yPzA6MSx0aGlzfSxXbi5wcm90b3R5cGUuYWRkPVduLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLnNldChlLGEpLHRoaXN9LFduLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGUpfSx6bi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPW5ldyBGbix0aGlzLnNpemU9MH0sem4ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fLG49dC5kZWxldGUoZSk7cmV0dXJuIHRoaXMuc2l6ZT10LnNpemUsbn0sem4ucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoZSl9LHpuLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGUpfSx6bi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fX2RhdGFfXztpZihuIGluc3RhbmNlb2YgRm4pe3ZhciByPW4uX19kYXRhX187aWYoIXhufHxyLmxlbmd0aDwxOTkpcmV0dXJuIHIucHVzaChbZSx0XSksdGhpcy5zaXplPSsrbi5zaXplLHRoaXM7bj10aGlzLl9fZGF0YV9fPW5ldyBVbihyKX1yZXR1cm4gbi5zZXQoZSx0KSx0aGlzLnNpemU9bi5zaXplLHRoaXN9O3ZhciBjcj1rbyhtciksdXI9a28oQ3IsITApO2Z1bmN0aW9uIGZyKGUsdCl7dmFyIG49ITA7cmV0dXJuIGNyKGUsKGZ1bmN0aW9uKGUscixvKXtyZXR1cm4gbj0hIXQoZSxyLG8pfSkpLG59ZnVuY3Rpb24gZHIoZSx0LG4pe2Zvcih2YXIgcj0tMSxpPWUubGVuZ3RoOysrcjxpOyl7dmFyIGE9ZVtyXSxsPXQoYSk7aWYobnVsbCE9bCYmKHM9PT1vP2w9PWwmJiFvbChsKTpuKGwscykpKXZhciBzPWwsYz1hfXJldHVybiBjfWZ1bmN0aW9uIHByKGUsdCl7dmFyIG49W107cmV0dXJuIGNyKGUsKGZ1bmN0aW9uKGUscixvKXt0KGUscixvKSYmbi5wdXNoKGUpfSkpLG59ZnVuY3Rpb24gaHIoZSx0LG4scixvKXt2YXIgaT0tMSxhPWUubGVuZ3RoO2ZvcihufHwobj1oaSksb3x8KG89W10pOysraTxhOyl7dmFyIGw9ZVtpXTt0PjAmJm4obCk/dD4xP2hyKGwsdC0xLG4scixvKTpQdChvLGwpOnJ8fChvW28ubGVuZ3RoXT1sKX1yZXR1cm4gb312YXIgZ3I9Um8oKSx2cj1SbyghMCk7ZnVuY3Rpb24gbXIoZSx0KXtyZXR1cm4gZSYmZ3IoZSx0LFNsKX1mdW5jdGlvbiBDcihlLHQpe3JldHVybiBlJiZ2cihlLHQsU2wpfWZ1bmN0aW9uIHlyKGUsdCl7cmV0dXJuIGp0KHQsKGZ1bmN0aW9uKHQpe3JldHVybiBHYShlW3RdKX0pKX1mdW5jdGlvbiB3cihlLHQpe2Zvcih2YXIgbj0wLHI9KHQ9dm8odCxlKSkubGVuZ3RoO251bGwhPWUmJm48cjspZT1lW0lpKHRbbisrXSldO3JldHVybiBuJiZuPT1yP2U6b31mdW5jdGlvbiBicihlLHQsbil7dmFyIHI9dChlKTtyZXR1cm4gWmEoZSk/cjpQdChyLG4oZSkpfWZ1bmN0aW9uIHhyKGUpe3JldHVybiBudWxsPT1lP2U9PT1vP1wiW29iamVjdCBVbmRlZmluZWRdXCI6XCJbb2JqZWN0IE51bGxdXCI6SmUmJkplIGluIE9lKGUpP2Z1bmN0aW9uKGUpe3ZhciB0PUllLmNhbGwoZSxKZSksbj1lW0plXTt0cnl7ZVtKZV09bzt2YXIgcj0hMH1jYXRjaChlKXt9dmFyIGk9SGUuY2FsbChlKTtyZXR1cm4gciYmKHQ/ZVtKZV09bjpkZWxldGUgZVtKZV0pLGl9KGUpOmZ1bmN0aW9uKGUpe3JldHVybiBIZS5jYWxsKGUpfShlKX1mdW5jdGlvbiBfcihlLHQpe3JldHVybiBlPnR9ZnVuY3Rpb24gT3IoZSx0KXtyZXR1cm4gbnVsbCE9ZSYmSWUuY2FsbChlLHQpfWZ1bmN0aW9uIExyKGUsdCl7cmV0dXJuIG51bGwhPWUmJnQgaW4gT2UoZSl9ZnVuY3Rpb24gRXIoZSx0LG4pe2Zvcih2YXIgaT1uP2t0Ok10LGE9ZVswXS5sZW5ndGgsbD1lLmxlbmd0aCxzPWwsYz1yKGwpLHU9MS8wLGY9W107cy0tOyl7dmFyIGQ9ZVtzXTtzJiZ0JiYoZD1SdChkLFl0KHQpKSksdT12bihkLmxlbmd0aCx1KSxjW3NdPSFuJiYodHx8YT49MTIwJiZkLmxlbmd0aD49MTIwKT9uZXcgV24ocyYmZCk6b31kPWVbMF07dmFyIHA9LTEsaD1jWzBdO2U6Zm9yKDsrK3A8YSYmZi5sZW5ndGg8dTspe3ZhciBnPWRbcF0sdj10P3QoZyk6ZztpZihnPW58fDAhPT1nP2c6MCwhKGg/WHQoaCx2KTppKGYsdixuKSkpe2ZvcihzPWw7LS1zOyl7dmFyIG09Y1tzXTtpZighKG0/WHQobSx2KTppKGVbc10sdixuKSkpY29udGludWUgZX1oJiZoLnB1c2godiksZi5wdXNoKGcpfX1yZXR1cm4gZn1mdW5jdGlvbiBTcihlLHQsbil7dmFyIHI9bnVsbD09KGU9T2koZSx0PXZvKHQsZSkpKT9lOmVbSWkoemkodCkpXTtyZXR1cm4gbnVsbD09cj9vOl90KHIsZSxuKX1mdW5jdGlvbiBqcihlKXtyZXR1cm4gWGEoZSkmJnhyKGUpPT1nfWZ1bmN0aW9uIE1yKGUsdCxuLHIsaSl7cmV0dXJuIGU9PT10fHwobnVsbD09ZXx8bnVsbD09dHx8IVhhKGUpJiYhWGEodCk/ZSE9ZSYmdCE9dDpmdW5jdGlvbihlLHQsbixyLGksYSl7dmFyIGw9WmEoZSkscz1aYSh0KSxjPWw/djpmaShlKSx1PXM/djpmaSh0KSxmPShjPWM9PWc/TzpjKT09TyxkPSh1PXU9PWc/Tzp1KT09TyxwPWM9PXU7aWYocCYmVWEoZSkpe2lmKCFVYSh0KSlyZXR1cm4hMTtsPSEwLGY9ITF9aWYocCYmIWYpcmV0dXJuIGF8fChhPW5ldyB6biksbHx8aWwoZSk/Sm8oZSx0LG4scixpLGEpOmZ1bmN0aW9uKGUsdCxuLHIsbyxpLGEpe3N3aXRjaChuKXtjYXNlIFA6aWYoZS5ieXRlTGVuZ3RoIT10LmJ5dGVMZW5ndGh8fGUuYnl0ZU9mZnNldCE9dC5ieXRlT2Zmc2V0KXJldHVybiExO2U9ZS5idWZmZXIsdD10LmJ1ZmZlcjtjYXNlIFI6cmV0dXJuIShlLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8IWkobmV3IE5lKGUpLG5ldyBOZSh0KSkpO2Nhc2UgbTpjYXNlIEM6Y2FzZSBfOnJldHVybiBIYSgrZSwrdCk7Y2FzZSB5OnJldHVybiBlLm5hbWU9PXQubmFtZSYmZS5tZXNzYWdlPT10Lm1lc3NhZ2U7Y2FzZSBFOmNhc2UgajpyZXR1cm4gZT09dCtcIlwiO2Nhc2UgeDp2YXIgbD1vbjtjYXNlIFM6dmFyIHM9MSZyO2lmKGx8fChsPXNuKSxlLnNpemUhPXQuc2l6ZSYmIXMpcmV0dXJuITE7dmFyIGM9YS5nZXQoZSk7aWYoYylyZXR1cm4gYz09dDtyfD0yLGEuc2V0KGUsdCk7dmFyIHU9Sm8obChlKSxsKHQpLHIsbyxpLGEpO3JldHVybiBhLmRlbGV0ZShlKSx1O2Nhc2UgTTppZihUbilyZXR1cm4gVG4uY2FsbChlKT09VG4uY2FsbCh0KX1yZXR1cm4hMX0oZSx0LGMsbixyLGksYSk7aWYoISgxJm4pKXt2YXIgaD1mJiZJZS5jYWxsKGUsXCJfX3dyYXBwZWRfX1wiKSx3PWQmJkllLmNhbGwodCxcIl9fd3JhcHBlZF9fXCIpO2lmKGh8fHcpe3ZhciBiPWg/ZS52YWx1ZSgpOmUsTD13P3QudmFsdWUoKTp0O3JldHVybiBhfHwoYT1uZXcgem4pLGkoYixMLG4scixhKX19cmV0dXJuISFwJiYoYXx8KGE9bmV3IHpuKSxmdW5jdGlvbihlLHQsbixyLGksYSl7dmFyIGw9MSZuLHM9ZWkoZSksYz1zLmxlbmd0aDtpZihjIT1laSh0KS5sZW5ndGgmJiFsKXJldHVybiExO2Zvcih2YXIgdT1jO3UtLTspe3ZhciBmPXNbdV07aWYoIShsP2YgaW4gdDpJZS5jYWxsKHQsZikpKXJldHVybiExfXZhciBkPWEuZ2V0KGUpLHA9YS5nZXQodCk7aWYoZCYmcClyZXR1cm4gZD09dCYmcD09ZTt2YXIgaD0hMDthLnNldChlLHQpLGEuc2V0KHQsZSk7Zm9yKHZhciBnPWw7Kyt1PGM7KXt2YXIgdj1lW2Y9c1t1XV0sbT10W2ZdO2lmKHIpdmFyIEM9bD9yKG0sdixmLHQsZSxhKTpyKHYsbSxmLGUsdCxhKTtpZighKEM9PT1vP3Y9PT1tfHxpKHYsbSxuLHIsYSk6Qykpe2g9ITE7YnJlYWt9Z3x8KGc9XCJjb25zdHJ1Y3RvclwiPT1mKX1pZihoJiYhZyl7dmFyIHk9ZS5jb25zdHJ1Y3Rvcix3PXQuY29uc3RydWN0b3I7eT09d3x8IShcImNvbnN0cnVjdG9yXCJpbiBlKXx8IShcImNvbnN0cnVjdG9yXCJpbiB0KXx8XCJmdW5jdGlvblwiPT10eXBlb2YgeSYmeSBpbnN0YW5jZW9mIHkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHcmJncgaW5zdGFuY2VvZiB3fHwoaD0hMSl9cmV0dXJuIGEuZGVsZXRlKGUpLGEuZGVsZXRlKHQpLGh9KGUsdCxuLHIsaSxhKSl9KGUsdCxuLHIsTXIsaSkpfWZ1bmN0aW9uIGtyKGUsdCxuLHIpe3ZhciBpPW4ubGVuZ3RoLGE9aSxsPSFyO2lmKG51bGw9PWUpcmV0dXJuIWE7Zm9yKGU9T2UoZSk7aS0tOyl7dmFyIHM9bltpXTtpZihsJiZzWzJdP3NbMV0hPT1lW3NbMF1dOiEoc1swXWluIGUpKXJldHVybiExfWZvcig7KytpPGE7KXt2YXIgYz0ocz1uW2ldKVswXSx1PWVbY10sZj1zWzFdO2lmKGwmJnNbMl0pe2lmKHU9PT1vJiYhKGMgaW4gZSkpcmV0dXJuITF9ZWxzZXt2YXIgZD1uZXcgem47aWYocil2YXIgcD1yKHUsZixjLGUsdCxkKTtpZighKHA9PT1vP01yKGYsdSwzLHIsZCk6cCkpcmV0dXJuITF9fXJldHVybiEwfWZ1bmN0aW9uIFJyKGUpe3JldHVybiEoIUthKGUpfHwodD1lLFRlJiZUZSBpbiB0KSkmJihHYShlKT9EZTpnZSkudGVzdChBaShlKSk7dmFyIHR9ZnVuY3Rpb24gUHIoZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZT9lOm51bGw9PWU/UWw6XCJvYmplY3RcIj09dHlwZW9mIGU/WmEoZSk/QnIoZVswXSxlWzFdKTpIcihlKTpzcyhlKX1mdW5jdGlvbiBJcihlKXtpZighd2koZSkpcmV0dXJuIGhuKGUpO3ZhciB0PVtdO2Zvcih2YXIgbiBpbiBPZShlKSlJZS5jYWxsKGUsbikmJlwiY29uc3RydWN0b3JcIiE9biYmdC5wdXNoKG4pO3JldHVybiB0fWZ1bmN0aW9uIEFyKGUsdCl7cmV0dXJuIGU8dH1mdW5jdGlvbiBUcihlLHQpe3ZhciBuPS0xLG89TmEoZSk/cihlLmxlbmd0aCk6W107cmV0dXJuIGNyKGUsKGZ1bmN0aW9uKGUscixpKXtvWysrbl09dChlLHIsaSl9KSksb31mdW5jdGlvbiBIcihlKXt2YXIgdD1saShlKTtyZXR1cm4gMT09dC5sZW5ndGgmJnRbMF1bMl0/eGkodFswXVswXSx0WzBdWzFdKTpmdW5jdGlvbihuKXtyZXR1cm4gbj09PWV8fGtyKG4sZSx0KX19ZnVuY3Rpb24gQnIoZSx0KXtyZXR1cm4gbWkoZSkmJmJpKHQpP3hpKElpKGUpLHQpOmZ1bmN0aW9uKG4pe3ZhciByPXhsKG4sZSk7cmV0dXJuIHI9PT1vJiZyPT09dD9fbChuLGUpOk1yKHQsciwzKX19ZnVuY3Rpb24gVnIoZSx0LG4scixpKXtlIT09dCYmZ3IodCwoZnVuY3Rpb24oYSxsKXtpZihpfHwoaT1uZXcgem4pLEthKGEpKSFmdW5jdGlvbihlLHQsbixyLGksYSxsKXt2YXIgcz1MaShlLG4pLGM9TGkodCxuKSx1PWwuZ2V0KGMpO2lmKHUpWG4oZSxuLHUpO2Vsc2V7dmFyIGY9YT9hKHMsYyxuK1wiXCIsZSx0LGwpOm8sZD1mPT09bztpZihkKXt2YXIgcD1aYShjKSxoPSFwJiZVYShjKSxnPSFwJiYhaCYmaWwoYyk7Zj1jLHB8fGh8fGc/WmEocyk/Zj1zOkZhKHMpP2Y9RW8ocyk6aD8oZD0hMSxmPXdvKGMsITApKTpnPyhkPSExLGY9eG8oYywhMCkpOmY9W106ZWwoYyl8fERhKGMpPyhmPXMsRGEocyk/Zj1wbChzKTpLYShzKSYmIUdhKHMpfHwoZj1waShjKSkpOmQ9ITF9ZCYmKGwuc2V0KGMsZiksaShmLGMscixhLGwpLGwuZGVsZXRlKGMpKSxYbihlLG4sZil9fShlLHQsbCxuLFZyLHIsaSk7ZWxzZXt2YXIgcz1yP3IoTGkoZSxsKSxhLGwrXCJcIixlLHQsaSk6bztzPT09byYmKHM9YSksWG4oZSxsLHMpfX0pLGpsKX1mdW5jdGlvbiBEcihlLHQpe3ZhciBuPWUubGVuZ3RoO2lmKG4pcmV0dXJuIGdpKHQrPXQ8MD9uOjAsbik/ZVt0XTpvfWZ1bmN0aW9uIFpyKGUsdCxuKXt0PXQubGVuZ3RoP1J0KHQsKGZ1bmN0aW9uKGUpe3JldHVybiBaYShlKT9mdW5jdGlvbih0KXtyZXR1cm4gd3IodCwxPT09ZS5sZW5ndGg/ZVswXTplKX06ZX0pKTpbUWxdO3ZhciByPS0xO3Q9UnQodCxZdChpaSgpKSk7dmFyIG89VHIoZSwoZnVuY3Rpb24oZSxuLG8pe3ZhciBpPVJ0KHQsKGZ1bmN0aW9uKHQpe3JldHVybiB0KGUpfSkpO3JldHVybntjcml0ZXJpYTppLGluZGV4Oisrcix2YWx1ZTplfX0pKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmxlbmd0aDtmb3IoZS5zb3J0KHQpO24tLTspZVtuXT1lW25dLnZhbHVlO3JldHVybiBlfShvLChmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPS0xLG89ZS5jcml0ZXJpYSxpPXQuY3JpdGVyaWEsYT1vLmxlbmd0aCxsPW4ubGVuZ3RoOysrcjxhOyl7dmFyIHM9X28ob1tyXSxpW3JdKTtpZihzKXJldHVybiByPj1sP3M6cyooXCJkZXNjXCI9PW5bcl0/LTE6MSl9cmV0dXJuIGUuaW5kZXgtdC5pbmRleH0oZSx0LG4pfSkpfWZ1bmN0aW9uICRyKGUsdCxuKXtmb3IodmFyIHI9LTEsbz10Lmxlbmd0aCxpPXt9OysrcjxvOyl7dmFyIGE9dFtyXSxsPXdyKGUsYSk7bihsLGEpJiZZcihpLHZvKGEsZSksbCl9cmV0dXJuIGl9ZnVuY3Rpb24gTnIoZSx0LG4scil7dmFyIG89cj9adDpEdCxpPS0xLGE9dC5sZW5ndGgsbD1lO2ZvcihlPT09dCYmKHQ9RW8odCkpLG4mJihsPVJ0KGUsWXQobikpKTsrK2k8YTspZm9yKHZhciBzPTAsYz10W2ldLHU9bj9uKGMpOmM7KHM9byhsLHUscyxyKSk+LTE7KWwhPT1lJiZHZS5jYWxsKGwscywxKSxHZS5jYWxsKGUscywxKTtyZXR1cm4gZX1mdW5jdGlvbiBGcihlLHQpe2Zvcih2YXIgbj1lP3QubGVuZ3RoOjAscj1uLTE7bi0tOyl7dmFyIG89dFtuXTtpZihuPT1yfHxvIT09aSl7dmFyIGk9bztnaShvKT9HZS5jYWxsKGUsbywxKTpsbyhlLG8pfX1yZXR1cm4gZX1mdW5jdGlvbiBVcihlLHQpe3JldHVybiBlK3B0KHluKCkqKHQtZSsxKSl9ZnVuY3Rpb24gV3IoZSx0KXt2YXIgbj1cIlwiO2lmKCFlfHx0PDF8fHQ+ZilyZXR1cm4gbjtkb3t0JTImJihuKz1lKSwodD1wdCh0LzIpKSYmKGUrPWUpfXdoaWxlKHQpO3JldHVybiBufWZ1bmN0aW9uIHpyKGUsdCl7cmV0dXJuIGppKF9pKGUsdCxRbCksZStcIlwiKX1mdW5jdGlvbiBHcihlKXtyZXR1cm4gcW4oSGwoZSkpfWZ1bmN0aW9uIHFyKGUsdCl7dmFyIG49SGwoZSk7cmV0dXJuIFJpKG4sb3IodCwwLG4ubGVuZ3RoKSl9ZnVuY3Rpb24gWXIoZSx0LG4scil7aWYoIUthKGUpKXJldHVybiBlO2Zvcih2YXIgaT0tMSxhPSh0PXZvKHQsZSkpLmxlbmd0aCxsPWEtMSxzPWU7bnVsbCE9cyYmKytpPGE7KXt2YXIgYz1JaSh0W2ldKSx1PW47aWYoXCJfX3Byb3RvX19cIj09PWN8fFwiY29uc3RydWN0b3JcIj09PWN8fFwicHJvdG90eXBlXCI9PT1jKXJldHVybiBlO2lmKGkhPWwpe3ZhciBmPXNbY107KHU9cj9yKGYsYyxzKTpvKT09PW8mJih1PUthKGYpP2Y6Z2kodFtpKzFdKT9bXTp7fSl9Sm4ocyxjLHUpLHM9c1tjXX1yZXR1cm4gZX12YXIgS3I9U24/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gU24uc2V0KGUsdCksZX06UWwsWHI9ZXQ/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZXQoZSxcInRvU3RyaW5nXCIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOktsKHQpLHdyaXRhYmxlOiEwfSl9OlFsO2Z1bmN0aW9uIEpyKGUpe3JldHVybiBSaShIbChlKSl9ZnVuY3Rpb24gUXIoZSx0LG4pe3ZhciBvPS0xLGk9ZS5sZW5ndGg7dDwwJiYodD0tdD5pPzA6aSt0KSwobj1uPmk/aTpuKTwwJiYobis9aSksaT10Pm4/MDpuLXQ+Pj4wLHQ+Pj49MDtmb3IodmFyIGE9cihpKTsrK288aTspYVtvXT1lW28rdF07cmV0dXJuIGF9ZnVuY3Rpb24gZW8oZSx0KXt2YXIgbjtyZXR1cm4gY3IoZSwoZnVuY3Rpb24oZSxyLG8pe3JldHVybiEobj10KGUscixvKSl9KSksISFufWZ1bmN0aW9uIHRvKGUsdCxuKXt2YXIgcj0wLG89bnVsbD09ZT9yOmUubGVuZ3RoO2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0PT10JiZvPD0yMTQ3NDgzNjQ3KXtmb3IoO3I8bzspe3ZhciBpPXIrbz4+PjEsYT1lW2ldO251bGwhPT1hJiYhb2woYSkmJihuP2E8PXQ6YTx0KT9yPWkrMTpvPWl9cmV0dXJuIG99cmV0dXJuIG5vKGUsdCxRbCxuKX1mdW5jdGlvbiBubyhlLHQsbixyKXt2YXIgaT0wLGE9bnVsbD09ZT8wOmUubGVuZ3RoO2lmKDA9PT1hKXJldHVybiAwO2Zvcih2YXIgbD0odD1uKHQpKSE9dCxzPW51bGw9PT10LGM9b2wodCksdT10PT09bztpPGE7KXt2YXIgZj1wdCgoaSthKS8yKSxkPW4oZVtmXSkscD1kIT09byxoPW51bGw9PT1kLGc9ZD09ZCx2PW9sKGQpO2lmKGwpdmFyIG09cnx8ZztlbHNlIG09dT9nJiYocnx8cCk6cz9nJiZwJiYocnx8IWgpOmM/ZyYmcCYmIWgmJihyfHwhdik6IWgmJiF2JiYocj9kPD10OmQ8dCk7bT9pPWYrMTphPWZ9cmV0dXJuIHZuKGEsNDI5NDk2NzI5NCl9ZnVuY3Rpb24gcm8oZSx0KXtmb3IodmFyIG49LTEscj1lLmxlbmd0aCxvPTAsaT1bXTsrK248cjspe3ZhciBhPWVbbl0sbD10P3QoYSk6YTtpZighbnx8IUhhKGwscykpe3ZhciBzPWw7aVtvKytdPTA9PT1hPzA6YX19cmV0dXJuIGl9ZnVuY3Rpb24gb28oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGU/ZTpvbChlKT9kOitlfWZ1bmN0aW9uIGlvKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBlO2lmKFphKGUpKXJldHVybiBSdChlLGlvKStcIlwiO2lmKG9sKGUpKXJldHVybiBIbj9Ibi5jYWxsKGUpOlwiXCI7dmFyIHQ9ZStcIlwiO3JldHVyblwiMFwiPT10JiYxL2U9PS0xLzA/XCItMFwiOnR9ZnVuY3Rpb24gYW8oZSx0LG4pe3ZhciByPS0xLG89TXQsaT1lLmxlbmd0aCxhPSEwLGw9W10scz1sO2lmKG4pYT0hMSxvPWt0O2Vsc2UgaWYoaT49MjAwKXt2YXIgYz10P251bGw6em8oZSk7aWYoYylyZXR1cm4gc24oYyk7YT0hMSxvPVh0LHM9bmV3IFdufWVsc2Ugcz10P1tdOmw7ZTpmb3IoOysrcjxpOyl7dmFyIHU9ZVtyXSxmPXQ/dCh1KTp1O2lmKHU9bnx8MCE9PXU/dTowLGEmJmY9PWYpe2Zvcih2YXIgZD1zLmxlbmd0aDtkLS07KWlmKHNbZF09PT1mKWNvbnRpbnVlIGU7dCYmcy5wdXNoKGYpLGwucHVzaCh1KX1lbHNlIG8ocyxmLG4pfHwocyE9PWwmJnMucHVzaChmKSxsLnB1c2godSkpfXJldHVybiBsfWZ1bmN0aW9uIGxvKGUsdCl7cmV0dXJuIG51bGw9PShlPU9pKGUsdD12byh0LGUpKSl8fGRlbGV0ZSBlW0lpKHppKHQpKV19ZnVuY3Rpb24gc28oZSx0LG4scil7cmV0dXJuIFlyKGUsdCxuKHdyKGUsdCkpLHIpfWZ1bmN0aW9uIGNvKGUsdCxuLHIpe2Zvcih2YXIgbz1lLmxlbmd0aCxpPXI/bzotMTsocj9pLS06KytpPG8pJiZ0KGVbaV0saSxlKTspO3JldHVybiBuP1FyKGUscj8wOmkscj9pKzE6byk6UXIoZSxyP2krMTowLHI/bzppKX1mdW5jdGlvbiB1byhlLHQpe3ZhciBuPWU7cmV0dXJuIG4gaW5zdGFuY2VvZiAkbiYmKG49bi52YWx1ZSgpKSxJdCh0LChmdW5jdGlvbihlLHQpe3JldHVybiB0LmZ1bmMuYXBwbHkodC50aGlzQXJnLFB0KFtlXSx0LmFyZ3MpKX0pLG4pfWZ1bmN0aW9uIGZvKGUsdCxuKXt2YXIgbz1lLmxlbmd0aDtpZihvPDIpcmV0dXJuIG8/YW8oZVswXSk6W107Zm9yKHZhciBpPS0xLGE9cihvKTsrK2k8bzspZm9yKHZhciBsPWVbaV0scz0tMTsrK3M8bzspcyE9aSYmKGFbaV09c3IoYVtpXXx8bCxlW3NdLHQsbikpO3JldHVybiBhbyhocihhLDEpLHQsbil9ZnVuY3Rpb24gcG8oZSx0LG4pe2Zvcih2YXIgcj0tMSxpPWUubGVuZ3RoLGE9dC5sZW5ndGgsbD17fTsrK3I8aTspe3ZhciBzPXI8YT90W3JdOm87bihsLGVbcl0scyl9cmV0dXJuIGx9ZnVuY3Rpb24gaG8oZSl7cmV0dXJuIEZhKGUpP2U6W119ZnVuY3Rpb24gZ28oZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZT9lOlFsfWZ1bmN0aW9uIHZvKGUsdCl7cmV0dXJuIFphKGUpP2U6bWkoZSx0KT9bZV06UGkoaGwoZSkpfXZhciBtbz16cjtmdW5jdGlvbiBDbyhlLHQsbil7dmFyIHI9ZS5sZW5ndGg7cmV0dXJuIG49bj09PW8/cjpuLCF0JiZuPj1yP2U6UXIoZSx0LG4pfXZhciB5bz1hdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGZ0LmNsZWFyVGltZW91dChlKX07ZnVuY3Rpb24gd28oZSx0KXtpZih0KXJldHVybiBlLnNsaWNlKCk7dmFyIG49ZS5sZW5ndGgscj1GZT9GZShuKTpuZXcgZS5jb25zdHJ1Y3RvcihuKTtyZXR1cm4gZS5jb3B5KHIpLHJ9ZnVuY3Rpb24gYm8oZSl7dmFyIHQ9bmV3IGUuY29uc3RydWN0b3IoZS5ieXRlTGVuZ3RoKTtyZXR1cm4gbmV3IE5lKHQpLnNldChuZXcgTmUoZSkpLHR9ZnVuY3Rpb24geG8oZSx0KXt2YXIgbj10P2JvKGUuYnVmZmVyKTplLmJ1ZmZlcjtyZXR1cm4gbmV3IGUuY29uc3RydWN0b3IobixlLmJ5dGVPZmZzZXQsZS5sZW5ndGgpfWZ1bmN0aW9uIF9vKGUsdCl7aWYoZSE9PXQpe3ZhciBuPWUhPT1vLHI9bnVsbD09PWUsaT1lPT1lLGE9b2woZSksbD10IT09byxzPW51bGw9PT10LGM9dD09dCx1PW9sKHQpO2lmKCFzJiYhdSYmIWEmJmU+dHx8YSYmbCYmYyYmIXMmJiF1fHxyJiZsJiZjfHwhbiYmY3x8IWkpcmV0dXJuIDE7aWYoIXImJiFhJiYhdSYmZTx0fHx1JiZuJiZpJiYhciYmIWF8fHMmJm4mJml8fCFsJiZpfHwhYylyZXR1cm4tMX1yZXR1cm4gMH1mdW5jdGlvbiBPbyhlLHQsbixvKXtmb3IodmFyIGk9LTEsYT1lLmxlbmd0aCxsPW4ubGVuZ3RoLHM9LTEsYz10Lmxlbmd0aCx1PWduKGEtbCwwKSxmPXIoYyt1KSxkPSFvOysrczxjOylmW3NdPXRbc107Zm9yKDsrK2k8bDspKGR8fGk8YSkmJihmW25baV1dPWVbaV0pO2Zvcig7dS0tOylmW3MrK109ZVtpKytdO3JldHVybiBmfWZ1bmN0aW9uIExvKGUsdCxuLG8pe2Zvcih2YXIgaT0tMSxhPWUubGVuZ3RoLGw9LTEscz1uLmxlbmd0aCxjPS0xLHU9dC5sZW5ndGgsZj1nbihhLXMsMCksZD1yKGYrdSkscD0hbzsrK2k8ZjspZFtpXT1lW2ldO2Zvcih2YXIgaD1pOysrYzx1OylkW2grY109dFtjXTtmb3IoOysrbDxzOykocHx8aTxhKSYmKGRbaCtuW2xdXT1lW2krK10pO3JldHVybiBkfWZ1bmN0aW9uIEVvKGUsdCl7dmFyIG49LTEsbz1lLmxlbmd0aDtmb3IodHx8KHQ9cihvKSk7KytuPG87KXRbbl09ZVtuXTtyZXR1cm4gdH1mdW5jdGlvbiBTbyhlLHQsbixyKXt2YXIgaT0hbjtufHwobj17fSk7Zm9yKHZhciBhPS0xLGw9dC5sZW5ndGg7KythPGw7KXt2YXIgcz10W2FdLGM9cj9yKG5bc10sZVtzXSxzLG4sZSk6bztjPT09byYmKGM9ZVtzXSksaT9ucihuLHMsYyk6Sm4obixzLGMpfXJldHVybiBufWZ1bmN0aW9uIGpvKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7dmFyIG89WmEobik/T3Q6ZXIsaT10P3QoKTp7fTtyZXR1cm4gbyhuLGUsaWkociwyKSxpKX19ZnVuY3Rpb24gTW8oZSl7cmV0dXJuIHpyKChmdW5jdGlvbih0LG4pe3ZhciByPS0xLGk9bi5sZW5ndGgsYT1pPjE/bltpLTFdOm8sbD1pPjI/blsyXTpvO2ZvcihhPWUubGVuZ3RoPjMmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGE/KGktLSxhKTpvLGwmJnZpKG5bMF0sblsxXSxsKSYmKGE9aTwzP286YSxpPTEpLHQ9T2UodCk7KytyPGk7KXt2YXIgcz1uW3JdO3MmJmUodCxzLHIsYSl9cmV0dXJuIHR9KSl9ZnVuY3Rpb24ga28oZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXtpZihudWxsPT1uKXJldHVybiBuO2lmKCFOYShuKSlyZXR1cm4gZShuLHIpO2Zvcih2YXIgbz1uLmxlbmd0aCxpPXQ/bzotMSxhPU9lKG4pOyh0P2ktLTorK2k8bykmJiExIT09cihhW2ldLGksYSk7KTtyZXR1cm4gbn19ZnVuY3Rpb24gUm8oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXtmb3IodmFyIG89LTEsaT1PZSh0KSxhPXIodCksbD1hLmxlbmd0aDtsLS07KXt2YXIgcz1hW2U/bDorK29dO2lmKCExPT09bihpW3NdLHMsaSkpYnJlYWt9cmV0dXJuIHR9fWZ1bmN0aW9uIFBvKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj1ybih0PWhsKHQpKT91bih0KTpvLHI9bj9uWzBdOnQuY2hhckF0KDApLGk9bj9DbyhuLDEpLmpvaW4oXCJcIik6dC5zbGljZSgxKTtyZXR1cm4gcltlXSgpK2l9fWZ1bmN0aW9uIElvKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gSXQoR2woRGwodCkucmVwbGFjZShLZSxcIlwiKSksZSxcIlwiKX19ZnVuY3Rpb24gQW8oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzO3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgZTtjYXNlIDE6cmV0dXJuIG5ldyBlKHRbMF0pO2Nhc2UgMjpyZXR1cm4gbmV3IGUodFswXSx0WzFdKTtjYXNlIDM6cmV0dXJuIG5ldyBlKHRbMF0sdFsxXSx0WzJdKTtjYXNlIDQ6cmV0dXJuIG5ldyBlKHRbMF0sdFsxXSx0WzJdLHRbM10pO2Nhc2UgNTpyZXR1cm4gbmV3IGUodFswXSx0WzFdLHRbMl0sdFszXSx0WzRdKTtjYXNlIDY6cmV0dXJuIG5ldyBlKHRbMF0sdFsxXSx0WzJdLHRbM10sdFs0XSx0WzVdKTtjYXNlIDc6cmV0dXJuIG5ldyBlKHRbMF0sdFsxXSx0WzJdLHRbM10sdFs0XSx0WzVdLHRbNl0pfXZhciBuPVZuKGUucHJvdG90eXBlKSxyPWUuYXBwbHkobix0KTtyZXR1cm4gS2Eocik/cjpufX1mdW5jdGlvbiBUbyhlKXtyZXR1cm4gZnVuY3Rpb24odCxuLHIpe3ZhciBpPU9lKHQpO2lmKCFOYSh0KSl7dmFyIGE9aWkobiwzKTt0PVNsKHQpLG49ZnVuY3Rpb24oZSl7cmV0dXJuIGEoaVtlXSxlLGkpfX12YXIgbD1lKHQsbixyKTtyZXR1cm4gbD4tMT9pW2E/dFtsXTpsXTpvfX1mdW5jdGlvbiBIbyhlKXtyZXR1cm4gUW8oKGZ1bmN0aW9uKHQpe3ZhciBuPXQubGVuZ3RoLHI9bixhPVpuLnByb3RvdHlwZS50aHJ1O2ZvcihlJiZ0LnJldmVyc2UoKTtyLS07KXt2YXIgbD10W3JdO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGwpdGhyb3cgbmV3IFNlKGkpO2lmKGEmJiFzJiZcIndyYXBwZXJcIj09cmkobCkpdmFyIHM9bmV3IFpuKFtdLCEwKX1mb3Iocj1zP3I6bjsrK3I8bjspe3ZhciBjPXJpKGw9dFtyXSksdT1cIndyYXBwZXJcIj09Yz9uaShsKTpvO3M9dSYmQ2kodVswXSkmJjQyND09dVsxXSYmIXVbNF0ubGVuZ3RoJiYxPT11WzldP3NbcmkodVswXSldLmFwcGx5KHMsdVszXSk6MT09bC5sZW5ndGgmJkNpKGwpP3NbY10oKTpzLnRocnUobCl9cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLHI9ZVswXTtpZihzJiYxPT1lLmxlbmd0aCYmWmEocikpcmV0dXJuIHMucGxhbnQocikudmFsdWUoKTtmb3IodmFyIG89MCxpPW4/dFtvXS5hcHBseSh0aGlzLGUpOnI7KytvPG47KWk9dFtvXS5jYWxsKHRoaXMsaSk7cmV0dXJuIGl9fSkpfWZ1bmN0aW9uIEJvKGUsdCxuLGksYSxsLHMsdSxmLGQpe3ZhciBwPXQmYyxoPTEmdCxnPTImdCx2PTI0JnQsbT01MTImdCxDPWc/bzpBbyhlKTtyZXR1cm4gZnVuY3Rpb24gYygpe2Zvcih2YXIgeT1hcmd1bWVudHMubGVuZ3RoLHc9cih5KSxiPXk7Yi0tOyl3W2JdPWFyZ3VtZW50c1tiXTtpZih2KXZhciB4PW9pKGMpLF89ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49ZS5sZW5ndGgscj0wO24tLTspZVtuXT09PXQmJisrcjtyZXR1cm4gcn0odyx4KTtpZihpJiYodz1Pbyh3LGksYSx2KSksbCYmKHc9TG8odyxsLHMsdikpLHktPV8sdiYmeTxkKXt2YXIgTz1sbih3LHgpO3JldHVybiBVbyhlLHQsQm8sYy5wbGFjZWhvbGRlcixuLHcsTyx1LGYsZC15KX12YXIgTD1oP246dGhpcyxFPWc/TFtlXTplO3JldHVybiB5PXcubGVuZ3RoLHU/dz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1lLmxlbmd0aCxyPXZuKHQubGVuZ3RoLG4pLGk9RW8oZSk7ci0tOyl7dmFyIGE9dFtyXTtlW3JdPWdpKGEsbik/aVthXTpvfXJldHVybiBlfSh3LHUpOm0mJnk+MSYmdy5yZXZlcnNlKCkscCYmZjx5JiYody5sZW5ndGg9ZiksdGhpcyYmdGhpcyE9PWZ0JiZ0aGlzIGluc3RhbmNlb2YgYyYmKEU9Q3x8QW8oRSkpLEUuYXBwbHkoTCx3KX19ZnVuY3Rpb24gVm8oZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG1yKGUsKGZ1bmN0aW9uKGUsbyxpKXt0KHIsbihlKSxvLGkpfSkpLHJ9KG4sZSx0KHIpLHt9KX19ZnVuY3Rpb24gRG8oZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXt2YXIgaTtpZihuPT09byYmcj09PW8pcmV0dXJuIHQ7aWYobiE9PW8mJihpPW4pLHIhPT1vKXtpZihpPT09bylyZXR1cm4gcjtcInN0cmluZ1wiPT10eXBlb2Ygbnx8XCJzdHJpbmdcIj09dHlwZW9mIHI/KG49aW8obikscj1pbyhyKSk6KG49b28obikscj1vbyhyKSksaT1lKG4scil9cmV0dXJuIGl9fWZ1bmN0aW9uIFpvKGUpe3JldHVybiBRbygoZnVuY3Rpb24odCl7cmV0dXJuIHQ9UnQodCxZdChpaSgpKSksenIoKGZ1bmN0aW9uKG4pe3ZhciByPXRoaXM7cmV0dXJuIGUodCwoZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUscixuKX0pKX0pKX0pKX1mdW5jdGlvbiAkbyhlLHQpe3ZhciBuPSh0PXQ9PT1vP1wiIFwiOmlvKHQpKS5sZW5ndGg7aWYobjwyKXJldHVybiBuP1dyKHQsZSk6dDt2YXIgcj1Xcih0LGR0KGUvY24odCkpKTtyZXR1cm4gcm4odCk/Q28odW4ociksMCxlKS5qb2luKFwiXCIpOnIuc2xpY2UoMCxlKX1mdW5jdGlvbiBObyhlKXtyZXR1cm4gZnVuY3Rpb24odCxuLGkpe3JldHVybiBpJiZcIm51bWJlclwiIT10eXBlb2YgaSYmdmkodCxuLGkpJiYobj1pPW8pLHQ9Y2wodCksbj09PW8/KG49dCx0PTApOm49Y2wobiksZnVuY3Rpb24oZSx0LG4sbyl7Zm9yKHZhciBpPS0xLGE9Z24oZHQoKHQtZSkvKG58fDEpKSwwKSxsPXIoYSk7YS0tOylsW28/YTorK2ldPWUsZSs9bjtyZXR1cm4gbH0odCxuLGk9aT09PW8/dDxuPzE6LTE6Y2woaSksZSl9fWZ1bmN0aW9uIEZvKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0JiZcInN0cmluZ1wiPT10eXBlb2Ygbnx8KHQ9ZGwodCksbj1kbChuKSksZSh0LG4pfX1mdW5jdGlvbiBVbyhlLHQsbixyLGksYSxsLGMsdSxmKXt2YXIgZD04JnQ7dHw9ZD9zOjY0LDQmKHQmPX4oZD82NDpzKSl8fCh0Jj0tNCk7dmFyIHA9W2UsdCxpLGQ/YTpvLGQ/bDpvLGQ/bzphLGQ/bzpsLGMsdSxmXSxoPW4uYXBwbHkobyxwKTtyZXR1cm4gQ2koZSkmJkVpKGgscCksaC5wbGFjZWhvbGRlcj1yLE1pKGgsZSx0KX1mdW5jdGlvbiBXbyhlKXt2YXIgdD1fZVtlXTtyZXR1cm4gZnVuY3Rpb24oZSxuKXtpZihlPWRsKGUpLChuPW51bGw9PW4/MDp2bih1bChuKSwyOTIpKSYmSHQoZSkpe3ZhciByPShobChlKStcImVcIikuc3BsaXQoXCJlXCIpO3JldHVybisoKHI9KGhsKHQoclswXStcImVcIisoK3JbMV0rbikpKStcImVcIikuc3BsaXQoXCJlXCIpKVswXStcImVcIisoK3JbMV0tbikpfXJldHVybiB0KGUpfX12YXIgem89T24mJjEvc24obmV3IE9uKFssLTBdKSlbMV09PXU/ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBPbihlKX06b3M7ZnVuY3Rpb24gR28oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPWZpKHQpO3JldHVybiBuPT14P29uKHQpOm49PVM/ZnVuY3Rpb24oZSl7dmFyIHQ9LTEsbj1BcnJheShlLnNpemUpO3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKGUpe25bKyt0XT1bZSxlXX0pKSxufSh0KTpmdW5jdGlvbihlLHQpe3JldHVybiBSdCh0LChmdW5jdGlvbih0KXtyZXR1cm5bdCxlW3RdXX0pKX0odCxlKHQpKX19ZnVuY3Rpb24gcW8oZSx0LG4sYSx1LGYsZCxwKXt2YXIgaD0yJnQ7aWYoIWgmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFNlKGkpO3ZhciBnPWE/YS5sZW5ndGg6MDtpZihnfHwodCY9LTk3LGE9dT1vKSxkPWQ9PT1vP2Q6Z24odWwoZCksMCkscD1wPT09bz9wOnVsKHApLGctPXU/dS5sZW5ndGg6MCw2NCZ0KXt2YXIgdj1hLG09dTthPXU9b312YXIgQz1oP286bmkoZSkseT1bZSx0LG4sYSx1LHYsbSxmLGQscF07aWYoQyYmZnVuY3Rpb24oZSx0KXt2YXIgbj1lWzFdLHI9dFsxXSxvPW58cixpPW88MTMxLGE9cj09YyYmOD09bnx8cj09YyYmMjU2PT1uJiZlWzddLmxlbmd0aDw9dFs4XXx8Mzg0PT1yJiZ0WzddLmxlbmd0aDw9dFs4XSYmOD09bjtpZighaSYmIWEpcmV0dXJuIGU7MSZyJiYoZVsyXT10WzJdLG98PTEmbj8wOjQpO3ZhciBzPXRbM107aWYocyl7dmFyIHU9ZVszXTtlWzNdPXU/T28odSxzLHRbNF0pOnMsZVs0XT11P2xuKGVbM10sbCk6dFs0XX0ocz10WzVdKSYmKHU9ZVs1XSxlWzVdPXU/TG8odSxzLHRbNl0pOnMsZVs2XT11P2xuKGVbNV0sbCk6dFs2XSksKHM9dFs3XSkmJihlWzddPXMpLHImYyYmKGVbOF09bnVsbD09ZVs4XT90WzhdOnZuKGVbOF0sdFs4XSkpLG51bGw9PWVbOV0mJihlWzldPXRbOV0pLGVbMF09dFswXSxlWzFdPW99KHksQyksZT15WzBdLHQ9eVsxXSxuPXlbMl0sYT15WzNdLHU9eVs0XSwhKHA9eVs5XT15WzldPT09bz9oPzA6ZS5sZW5ndGg6Z24oeVs5XS1nLDApKSYmMjQmdCYmKHQmPS0yNSksdCYmMSE9dCl3PTg9PXR8fDE2PT10P2Z1bmN0aW9uKGUsdCxuKXt2YXIgaT1BbyhlKTtyZXR1cm4gZnVuY3Rpb24gYSgpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLHM9cihsKSxjPWwsdT1vaShhKTtjLS07KXNbY109YXJndW1lbnRzW2NdO3ZhciBmPWw8MyYmc1swXSE9PXUmJnNbbC0xXSE9PXU/W106bG4ocyx1KTtyZXR1cm4obC09Zi5sZW5ndGgpPG4/VW8oZSx0LEJvLGEucGxhY2Vob2xkZXIsbyxzLGYsbyxvLG4tbCk6X3QodGhpcyYmdGhpcyE9PWZ0JiZ0aGlzIGluc3RhbmNlb2YgYT9pOmUsdGhpcyxzKX19KGUsdCxwKTp0IT1zJiYzMyE9dHx8dS5sZW5ndGg/Qm8uYXBwbHkobyx5KTpmdW5jdGlvbihlLHQsbixvKXt2YXIgaT0xJnQsYT1BbyhlKTtyZXR1cm4gZnVuY3Rpb24gdCgpe2Zvcih2YXIgbD0tMSxzPWFyZ3VtZW50cy5sZW5ndGgsYz0tMSx1PW8ubGVuZ3RoLGY9cih1K3MpLGQ9dGhpcyYmdGhpcyE9PWZ0JiZ0aGlzIGluc3RhbmNlb2YgdD9hOmU7KytjPHU7KWZbY109b1tjXTtmb3IoO3MtLTspZltjKytdPWFyZ3VtZW50c1srK2xdO3JldHVybiBfdChkLGk/bjp0aGlzLGYpfX0oZSx0LG4sYSk7ZWxzZSB2YXIgdz1mdW5jdGlvbihlLHQsbil7dmFyIHI9MSZ0LG89QW8oZSk7cmV0dXJuIGZ1bmN0aW9uIHQoKXtyZXR1cm4odGhpcyYmdGhpcyE9PWZ0JiZ0aGlzIGluc3RhbmNlb2YgdD9vOmUpLmFwcGx5KHI/bjp0aGlzLGFyZ3VtZW50cyl9fShlLHQsbik7cmV0dXJuIE1pKChDP0tyOkVpKSh3LHkpLGUsdCl9ZnVuY3Rpb24gWW8oZSx0LG4scil7cmV0dXJuIGU9PT1vfHxIYShlLGtlW25dKSYmIUllLmNhbGwocixuKT90OmV9ZnVuY3Rpb24gS28oZSx0LG4scixpLGEpe3JldHVybiBLYShlKSYmS2EodCkmJihhLnNldCh0LGUpLFZyKGUsdCxvLEtvLGEpLGEuZGVsZXRlKHQpKSxlfWZ1bmN0aW9uIFhvKGUpe3JldHVybiBlbChlKT9vOmV9ZnVuY3Rpb24gSm8oZSx0LG4scixpLGEpe3ZhciBsPTEmbixzPWUubGVuZ3RoLGM9dC5sZW5ndGg7aWYocyE9YyYmIShsJiZjPnMpKXJldHVybiExO3ZhciB1PWEuZ2V0KGUpLGY9YS5nZXQodCk7aWYodSYmZilyZXR1cm4gdT09dCYmZj09ZTt2YXIgZD0tMSxwPSEwLGg9MiZuP25ldyBXbjpvO2ZvcihhLnNldChlLHQpLGEuc2V0KHQsZSk7KytkPHM7KXt2YXIgZz1lW2RdLHY9dFtkXTtpZihyKXZhciBtPWw/cih2LGcsZCx0LGUsYSk6cihnLHYsZCxlLHQsYSk7aWYobSE9PW8pe2lmKG0pY29udGludWU7cD0hMTticmVha31pZihoKXtpZighVHQodCwoZnVuY3Rpb24oZSx0KXtpZighWHQoaCx0KSYmKGc9PT1lfHxpKGcsZSxuLHIsYSkpKXJldHVybiBoLnB1c2godCl9KSkpe3A9ITE7YnJlYWt9fWVsc2UgaWYoZyE9PXYmJiFpKGcsdixuLHIsYSkpe3A9ITE7YnJlYWt9fXJldHVybiBhLmRlbGV0ZShlKSxhLmRlbGV0ZSh0KSxwfWZ1bmN0aW9uIFFvKGUpe3JldHVybiBqaShfaShlLG8sJGkpLGUrXCJcIil9ZnVuY3Rpb24gZWkoZSl7cmV0dXJuIGJyKGUsU2wsY2kpfWZ1bmN0aW9uIHRpKGUpe3JldHVybiBicihlLGpsLHVpKX12YXIgbmk9U24/ZnVuY3Rpb24oZSl7cmV0dXJuIFNuLmdldChlKX06b3M7ZnVuY3Rpb24gcmkoZSl7Zm9yKHZhciB0PWUubmFtZStcIlwiLG49am5bdF0scj1JZS5jYWxsKGpuLHQpP24ubGVuZ3RoOjA7ci0tOyl7dmFyIG89bltyXSxpPW8uZnVuYztpZihudWxsPT1pfHxpPT1lKXJldHVybiBvLm5hbWV9cmV0dXJuIHR9ZnVuY3Rpb24gb2koZSl7cmV0dXJuKEllLmNhbGwoQm4sXCJwbGFjZWhvbGRlclwiKT9CbjplKS5wbGFjZWhvbGRlcn1mdW5jdGlvbiBpaSgpe3ZhciBlPUJuLml0ZXJhdGVlfHxlcztyZXR1cm4gZT1lPT09ZXM/UHI6ZSxhcmd1bWVudHMubGVuZ3RoP2UoYXJndW1lbnRzWzBdLGFyZ3VtZW50c1sxXSk6ZX1mdW5jdGlvbiBhaShlLHQpe3ZhciBuLHIsbz1lLl9fZGF0YV9fO3JldHVybihcInN0cmluZ1wiPT0ocj10eXBlb2Yobj10KSl8fFwibnVtYmVyXCI9PXJ8fFwic3ltYm9sXCI9PXJ8fFwiYm9vbGVhblwiPT1yP1wiX19wcm90b19fXCIhPT1uOm51bGw9PT1uKT9vW1wic3RyaW5nXCI9PXR5cGVvZiB0P1wic3RyaW5nXCI6XCJoYXNoXCJdOm8ubWFwfWZ1bmN0aW9uIGxpKGUpe2Zvcih2YXIgdD1TbChlKSxuPXQubGVuZ3RoO24tLTspe3ZhciByPXRbbl0sbz1lW3JdO3Rbbl09W3IsbyxiaShvKV19cmV0dXJuIHR9ZnVuY3Rpb24gc2koZSx0KXt2YXIgbj1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lP286ZVt0XX0oZSx0KTtyZXR1cm4gUnIobik/bjpvfXZhciBjaT1ndD9mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT9bXTooZT1PZShlKSxqdChndChlKSwoZnVuY3Rpb24odCl7cmV0dXJuIHplLmNhbGwoZSx0KX0pKSl9OmZzLHVpPWd0P2Z1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXTtlOylQdCh0LGNpKGUpKSxlPVVlKGUpO3JldHVybiB0fTpmcyxmaT14cjtmdW5jdGlvbiBkaShlLHQsbil7Zm9yKHZhciByPS0xLG89KHQ9dm8odCxlKSkubGVuZ3RoLGk9ITE7KytyPG87KXt2YXIgYT1JaSh0W3JdKTtpZighKGk9bnVsbCE9ZSYmbihlLGEpKSlicmVhaztlPWVbYV19cmV0dXJuIGl8fCsrciE9bz9pOiEhKG89bnVsbD09ZT8wOmUubGVuZ3RoKSYmWWEobykmJmdpKGEsbykmJihaYShlKXx8RGEoZSkpfWZ1bmN0aW9uIHBpKGUpe3JldHVyblwiZnVuY3Rpb25cIiE9dHlwZW9mIGUuY29uc3RydWN0b3J8fHdpKGUpP3t9OlZuKFVlKGUpKX1mdW5jdGlvbiBoaShlKXtyZXR1cm4gWmEoZSl8fERhKGUpfHwhIShxZSYmZSYmZVtxZV0pfWZ1bmN0aW9uIGdpKGUsdCl7dmFyIG49dHlwZW9mIGU7cmV0dXJuISEodD1udWxsPT10P2Y6dCkmJihcIm51bWJlclwiPT1ufHxcInN5bWJvbFwiIT1uJiZtZS50ZXN0KGUpKSYmZT4tMSYmZSUxPT0wJiZlPHR9ZnVuY3Rpb24gdmkoZSx0LG4pe2lmKCFLYShuKSlyZXR1cm4hMTt2YXIgcj10eXBlb2YgdDtyZXR1cm4hIShcIm51bWJlclwiPT1yP05hKG4pJiZnaSh0LG4ubGVuZ3RoKTpcInN0cmluZ1wiPT1yJiZ0IGluIG4pJiZIYShuW3RdLGUpfWZ1bmN0aW9uIG1pKGUsdCl7aWYoWmEoZSkpcmV0dXJuITE7dmFyIG49dHlwZW9mIGU7cmV0dXJuIShcIm51bWJlclwiIT1uJiZcInN5bWJvbFwiIT1uJiZcImJvb2xlYW5cIiE9biYmbnVsbCE9ZSYmIW9sKGUpKXx8US50ZXN0KGUpfHwhSi50ZXN0KGUpfHxudWxsIT10JiZlIGluIE9lKHQpfWZ1bmN0aW9uIENpKGUpe3ZhciB0PXJpKGUpLG49Qm5bdF07aWYoXCJmdW5jdGlvblwiIT10eXBlb2Ygbnx8ISh0IGluICRuLnByb3RvdHlwZSkpcmV0dXJuITE7aWYoZT09PW4pcmV0dXJuITA7dmFyIHI9bmkobik7cmV0dXJuISFyJiZlPT09clswXX0oYm4mJmZpKG5ldyBibihuZXcgQXJyYXlCdWZmZXIoMSkpKSE9UHx8eG4mJmZpKG5ldyB4bikhPXh8fF9uJiZmaShfbi5yZXNvbHZlKCkpIT1MfHxPbiYmZmkobmV3IE9uKSE9U3x8TG4mJmZpKG5ldyBMbikhPWspJiYoZmk9ZnVuY3Rpb24oZSl7dmFyIHQ9eHIoZSksbj10PT1PP2UuY29uc3RydWN0b3I6byxyPW4/QWkobik6XCJcIjtpZihyKXN3aXRjaChyKXtjYXNlIE1uOnJldHVybiBQO2Nhc2Uga246cmV0dXJuIHg7Y2FzZSBSbjpyZXR1cm4gTDtjYXNlIFBuOnJldHVybiBTO2Nhc2UgSW46cmV0dXJuIGt9cmV0dXJuIHR9KTt2YXIgeWk9UmU/R2E6ZHM7ZnVuY3Rpb24gd2koZSl7dmFyIHQ9ZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4gZT09PShcImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiZ0LnByb3RvdHlwZXx8a2UpfWZ1bmN0aW9uIGJpKGUpe3JldHVybiBlPT1lJiYhS2EoZSl9ZnVuY3Rpb24geGkoZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG51bGwhPW4mJm5bZV09PT10JiYodCE9PW98fGUgaW4gT2UobikpfX1mdW5jdGlvbiBfaShlLHQsbil7cmV0dXJuIHQ9Z24odD09PW8/ZS5sZW5ndGgtMTp0LDApLGZ1bmN0aW9uKCl7Zm9yKHZhciBvPWFyZ3VtZW50cyxpPS0xLGE9Z24oby5sZW5ndGgtdCwwKSxsPXIoYSk7KytpPGE7KWxbaV09b1t0K2ldO2k9LTE7Zm9yKHZhciBzPXIodCsxKTsrK2k8dDspc1tpXT1vW2ldO3JldHVybiBzW3RdPW4obCksX3QoZSx0aGlzLHMpfX1mdW5jdGlvbiBPaShlLHQpe3JldHVybiB0Lmxlbmd0aDwyP2U6d3IoZSxRcih0LDAsLTEpKX1mdW5jdGlvbiBMaShlLHQpe2lmKChcImNvbnN0cnVjdG9yXCIhPT10fHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBlW3RdKSYmXCJfX3Byb3RvX19cIiE9dClyZXR1cm4gZVt0XX12YXIgRWk9a2koS3IpLFNpPXV0fHxmdW5jdGlvbihlLHQpe3JldHVybiBmdC5zZXRUaW1lb3V0KGUsdCl9LGppPWtpKFhyKTtmdW5jdGlvbiBNaShlLHQsbil7dmFyIHI9dCtcIlwiO3JldHVybiBqaShlLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5sZW5ndGg7aWYoIW4pcmV0dXJuIGU7dmFyIHI9bi0xO3JldHVybiB0W3JdPShuPjE/XCImIFwiOlwiXCIpK3Rbcl0sdD10LmpvaW4obj4yP1wiLCBcIjpcIiBcIiksZS5yZXBsYWNlKGllLFwie1xcbi8qIFt3cmFwcGVkIHdpdGggXCIrdCtcIl0gKi9cXG5cIil9KHIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gTHQoaCwoZnVuY3Rpb24obil7dmFyIHI9XCJfLlwiK25bMF07dCZuWzFdJiYhTXQoZSxyKSYmZS5wdXNoKHIpfSkpLGUuc29ydCgpfShmdW5jdGlvbihlKXt2YXIgdD1lLm1hdGNoKGFlKTtyZXR1cm4gdD90WzFdLnNwbGl0KGxlKTpbXX0ociksbikpKX1mdW5jdGlvbiBraShlKXt2YXIgdD0wLG49MDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1tbigpLGk9MTYtKHItbik7aWYobj1yLGk+MCl7aWYoKyt0Pj04MDApcmV0dXJuIGFyZ3VtZW50c1swXX1lbHNlIHQ9MDtyZXR1cm4gZS5hcHBseShvLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIFJpKGUsdCl7dmFyIG49LTEscj1lLmxlbmd0aCxpPXItMTtmb3IodD10PT09bz9yOnQ7KytuPHQ7KXt2YXIgYT1VcihuLGkpLGw9ZVthXTtlW2FdPWVbbl0sZVtuXT1sfXJldHVybiBlLmxlbmd0aD10LGV9dmFyIFBpPWZ1bmN0aW9uKGUpe3ZhciB0PWthKChmdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gNDY9PT1lLmNoYXJDb2RlQXQoMCkmJnQucHVzaChcIlwiKSxlLnJlcGxhY2UoZWUsKGZ1bmN0aW9uKGUsbixyLG8pe3QucHVzaChyP28ucmVwbGFjZSh1ZSxcIiQxXCIpOm58fGUpfSkpLHR9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIDUwMD09PW4uc2l6ZSYmbi5jbGVhcigpLGV9KSksbj10LmNhY2hlO3JldHVybiB0fSgpO2Z1bmN0aW9uIElpKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlfHxvbChlKSlyZXR1cm4gZTt2YXIgdD1lK1wiXCI7cmV0dXJuXCIwXCI9PXQmJjEvZT09LTEvMD9cIi0wXCI6dH1mdW5jdGlvbiBBaShlKXtpZihudWxsIT1lKXt0cnl7cmV0dXJuIFBlLmNhbGwoZSl9Y2F0Y2goZSl7fXRyeXtyZXR1cm4gZStcIlwifWNhdGNoKGUpe319cmV0dXJuXCJcIn1mdW5jdGlvbiBUaShlKXtpZihlIGluc3RhbmNlb2YgJG4pcmV0dXJuIGUuY2xvbmUoKTt2YXIgdD1uZXcgWm4oZS5fX3dyYXBwZWRfXyxlLl9fY2hhaW5fXyk7cmV0dXJuIHQuX19hY3Rpb25zX189RW8oZS5fX2FjdGlvbnNfXyksdC5fX2luZGV4X189ZS5fX2luZGV4X18sdC5fX3ZhbHVlc19fPWUuX192YWx1ZXNfXyx0fXZhciBIaT16cigoZnVuY3Rpb24oZSx0KXtyZXR1cm4gRmEoZSk/c3IoZSxocih0LDEsRmEsITApKTpbXX0pKSxCaT16cigoZnVuY3Rpb24oZSx0KXt2YXIgbj16aSh0KTtyZXR1cm4gRmEobikmJihuPW8pLEZhKGUpP3NyKGUsaHIodCwxLEZhLCEwKSxpaShuLDIpKTpbXX0pKSxWaT16cigoZnVuY3Rpb24oZSx0KXt2YXIgbj16aSh0KTtyZXR1cm4gRmEobikmJihuPW8pLEZhKGUpP3NyKGUsaHIodCwxLEZhLCEwKSxvLG4pOltdfSkpO2Z1bmN0aW9uIERpKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7aWYoIXIpcmV0dXJuLTE7dmFyIG89bnVsbD09bj8wOnVsKG4pO3JldHVybiBvPDAmJihvPWduKHIrbywwKSksVnQoZSxpaSh0LDMpLG8pfWZ1bmN0aW9uIFppKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7aWYoIXIpcmV0dXJuLTE7dmFyIGk9ci0xO3JldHVybiBuIT09byYmKGk9dWwobiksaT1uPDA/Z24ocitpLDApOnZuKGksci0xKSksVnQoZSxpaSh0LDMpLGksITApfWZ1bmN0aW9uICRpKGUpe3JldHVybiBudWxsIT1lJiZlLmxlbmd0aD9ocihlLDEpOltdfWZ1bmN0aW9uIE5pKGUpe3JldHVybiBlJiZlLmxlbmd0aD9lWzBdOm99dmFyIEZpPXpyKChmdW5jdGlvbihlKXt2YXIgdD1SdChlLGhvKTtyZXR1cm4gdC5sZW5ndGgmJnRbMF09PT1lWzBdP0VyKHQpOltdfSkpLFVpPXpyKChmdW5jdGlvbihlKXt2YXIgdD16aShlKSxuPVJ0KGUsaG8pO3JldHVybiB0PT09emkobik/dD1vOm4ucG9wKCksbi5sZW5ndGgmJm5bMF09PT1lWzBdP0VyKG4saWkodCwyKSk6W119KSksV2k9enIoKGZ1bmN0aW9uKGUpe3ZhciB0PXppKGUpLG49UnQoZSxobyk7cmV0dXJuKHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Om8pJiZuLnBvcCgpLG4ubGVuZ3RoJiZuWzBdPT09ZVswXT9FcihuLG8sdCk6W119KSk7ZnVuY3Rpb24gemkoZSl7dmFyIHQ9bnVsbD09ZT8wOmUubGVuZ3RoO3JldHVybiB0P2VbdC0xXTpvfXZhciBHaT16cihxaSk7ZnVuY3Rpb24gcWkoZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGgmJnQmJnQubGVuZ3RoP05yKGUsdCk6ZX12YXIgWWk9UW8oKGZ1bmN0aW9uKGUsdCl7dmFyIG49bnVsbD09ZT8wOmUubGVuZ3RoLHI9cnIoZSx0KTtyZXR1cm4gRnIoZSxSdCh0LChmdW5jdGlvbihlKXtyZXR1cm4gZ2koZSxuKT8rZTplfSkpLnNvcnQoX28pKSxyfSkpO2Z1bmN0aW9uIEtpKGUpe3JldHVybiBudWxsPT1lP2U6d24uY2FsbChlKX12YXIgWGk9enIoKGZ1bmN0aW9uKGUpe3JldHVybiBhbyhocihlLDEsRmEsITApKX0pKSxKaT16cigoZnVuY3Rpb24oZSl7dmFyIHQ9emkoZSk7cmV0dXJuIEZhKHQpJiYodD1vKSxhbyhocihlLDEsRmEsITApLGlpKHQsMikpfSkpLFFpPXpyKChmdW5jdGlvbihlKXt2YXIgdD16aShlKTtyZXR1cm4gdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6byxhbyhocihlLDEsRmEsITApLG8sdCl9KSk7ZnVuY3Rpb24gZWEoZSl7aWYoIWV8fCFlLmxlbmd0aClyZXR1cm5bXTt2YXIgdD0wO3JldHVybiBlPWp0KGUsKGZ1bmN0aW9uKGUpe2lmKEZhKGUpKXJldHVybiB0PWduKGUubGVuZ3RoLHQpLCEwfSkpLEd0KHQsKGZ1bmN0aW9uKHQpe3JldHVybiBSdChlLEZ0KHQpKX0pKX1mdW5jdGlvbiB0YShlLHQpe2lmKCFlfHwhZS5sZW5ndGgpcmV0dXJuW107dmFyIG49ZWEoZSk7cmV0dXJuIG51bGw9PXQ/bjpSdChuLChmdW5jdGlvbihlKXtyZXR1cm4gX3QodCxvLGUpfSkpfXZhciBuYT16cigoZnVuY3Rpb24oZSx0KXtyZXR1cm4gRmEoZSk/c3IoZSx0KTpbXX0pKSxyYT16cigoZnVuY3Rpb24oZSl7cmV0dXJuIGZvKGp0KGUsRmEpKX0pKSxvYT16cigoZnVuY3Rpb24oZSl7dmFyIHQ9emkoZSk7cmV0dXJuIEZhKHQpJiYodD1vKSxmbyhqdChlLEZhKSxpaSh0LDIpKX0pKSxpYT16cigoZnVuY3Rpb24oZSl7dmFyIHQ9emkoZSk7cmV0dXJuIHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Om8sZm8oanQoZSxGYSksbyx0KX0pKSxhYT16cihlYSksbGE9enIoKGZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoLG49dD4xP2VbdC0xXTpvO3JldHVybiBuPVwiZnVuY3Rpb25cIj09dHlwZW9mIG4/KGUucG9wKCksbik6byx0YShlLG4pfSkpO2Z1bmN0aW9uIHNhKGUpe3ZhciB0PUJuKGUpO3JldHVybiB0Ll9fY2hhaW5fXz0hMCx0fWZ1bmN0aW9uIGNhKGUsdCl7cmV0dXJuIHQoZSl9dmFyIHVhPVFvKChmdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aCxuPXQ/ZVswXTowLHI9dGhpcy5fX3dyYXBwZWRfXyxpPWZ1bmN0aW9uKHQpe3JldHVybiBycih0LGUpfTtyZXR1cm4hKHQ+MXx8dGhpcy5fX2FjdGlvbnNfXy5sZW5ndGgpJiZyIGluc3RhbmNlb2YgJG4mJmdpKG4pPygocj1yLnNsaWNlKG4sK24rKHQ/MTowKSkpLl9fYWN0aW9uc19fLnB1c2goe2Z1bmM6Y2EsYXJnczpbaV0sdGhpc0FyZzpvfSksbmV3IFpuKHIsdGhpcy5fX2NoYWluX18pLnRocnUoKGZ1bmN0aW9uKGUpe3JldHVybiB0JiYhZS5sZW5ndGgmJmUucHVzaChvKSxlfSkpKTp0aGlzLnRocnUoaSl9KSksZmE9am8oKGZ1bmN0aW9uKGUsdCxuKXtJZS5jYWxsKGUsbik/KytlW25dOm5yKGUsbiwxKX0pKSxkYT1UbyhEaSkscGE9VG8oWmkpO2Z1bmN0aW9uIGhhKGUsdCl7cmV0dXJuKFphKGUpP0x0OmNyKShlLGlpKHQsMykpfWZ1bmN0aW9uIGdhKGUsdCl7cmV0dXJuKFphKGUpP0V0OnVyKShlLGlpKHQsMykpfXZhciB2YT1qbygoZnVuY3Rpb24oZSx0LG4pe0llLmNhbGwoZSxuKT9lW25dLnB1c2godCk6bnIoZSxuLFt0XSl9KSksbWE9enIoKGZ1bmN0aW9uKGUsdCxuKXt2YXIgbz0tMSxpPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQsYT1OYShlKT9yKGUubGVuZ3RoKTpbXTtyZXR1cm4gY3IoZSwoZnVuY3Rpb24oZSl7YVsrK29dPWk/X3QodCxlLG4pOlNyKGUsdCxuKX0pKSxhfSkpLENhPWpvKChmdW5jdGlvbihlLHQsbil7bnIoZSxuLHQpfSkpO2Z1bmN0aW9uIHlhKGUsdCl7cmV0dXJuKFphKGUpP1J0OlRyKShlLGlpKHQsMykpfXZhciB3YT1qbygoZnVuY3Rpb24oZSx0LG4pe2Vbbj8wOjFdLnB1c2godCl9KSwoZnVuY3Rpb24oKXtyZXR1cm5bW10sW11dfSkpLGJhPXpyKChmdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJuW107dmFyIG49dC5sZW5ndGg7cmV0dXJuIG4+MSYmdmkoZSx0WzBdLHRbMV0pP3Q9W106bj4yJiZ2aSh0WzBdLHRbMV0sdFsyXSkmJih0PVt0WzBdXSksWnIoZSxocih0LDEpLFtdKX0pKSx4YT1jdHx8ZnVuY3Rpb24oKXtyZXR1cm4gZnQuRGF0ZS5ub3coKX07ZnVuY3Rpb24gX2EoZSx0LG4pe3JldHVybiB0PW4/bzp0LHQ9ZSYmbnVsbD09dD9lLmxlbmd0aDp0LHFvKGUsYyxvLG8sbyxvLHQpfWZ1bmN0aW9uIE9hKGUsdCl7dmFyIG47aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBuZXcgU2UoaSk7cmV0dXJuIGU9dWwoZSksZnVuY3Rpb24oKXtyZXR1cm4tLWU+MCYmKG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGU8PTEmJih0PW8pLG59fXZhciBMYT16cigoZnVuY3Rpb24oZSx0LG4pe3ZhciByPTE7aWYobi5sZW5ndGgpe3ZhciBvPWxuKG4sb2koTGEpKTtyfD1zfXJldHVybiBxbyhlLHIsdCxuLG8pfSkpLEVhPXpyKChmdW5jdGlvbihlLHQsbil7dmFyIHI9MztpZihuLmxlbmd0aCl7dmFyIG89bG4obixvaShFYSkpO3J8PXN9cmV0dXJuIHFvKHQscixlLG4sbyl9KSk7ZnVuY3Rpb24gU2EoZSx0LG4pe3ZhciByLGEsbCxzLGMsdSxmPTAsZD0hMSxwPSExLGg9ITA7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgU2UoaSk7ZnVuY3Rpb24gZyh0KXt2YXIgbj1yLGk9YTtyZXR1cm4gcj1hPW8sZj10LHM9ZS5hcHBseShpLG4pfWZ1bmN0aW9uIHYoZSl7dmFyIG49ZS11O3JldHVybiB1PT09b3x8bj49dHx8bjwwfHxwJiZlLWY+PWx9ZnVuY3Rpb24gbSgpe3ZhciBlPXhhKCk7aWYodihlKSlyZXR1cm4gQyhlKTtjPVNpKG0sZnVuY3Rpb24oZSl7dmFyIG49dC0oZS11KTtyZXR1cm4gcD92bihuLGwtKGUtZikpOm59KGUpKX1mdW5jdGlvbiBDKGUpe3JldHVybiBjPW8saCYmcj9nKGUpOihyPWE9byxzKX1mdW5jdGlvbiB5KCl7dmFyIGU9eGEoKSxuPXYoZSk7aWYocj1hcmd1bWVudHMsYT10aGlzLHU9ZSxuKXtpZihjPT09bylyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGY9ZSxjPVNpKG0sdCksZD9nKGUpOnN9KHUpO2lmKHApcmV0dXJuIHlvKGMpLGM9U2kobSx0KSxnKHUpfXJldHVybiBjPT09byYmKGM9U2kobSx0KSksc31yZXR1cm4gdD1kbCh0KXx8MCxLYShuKSYmKGQ9ISFuLmxlYWRpbmcsbD0ocD1cIm1heFdhaXRcImluIG4pP2duKGRsKG4ubWF4V2FpdCl8fDAsdCk6bCxoPVwidHJhaWxpbmdcImluIG4/ISFuLnRyYWlsaW5nOmgpLHkuY2FuY2VsPWZ1bmN0aW9uKCl7YyE9PW8mJnlvKGMpLGY9MCxyPXU9YT1jPW99LHkuZmx1c2g9ZnVuY3Rpb24oKXtyZXR1cm4gYz09PW8/czpDKHhhKCkpfSx5fXZhciBqYT16cigoZnVuY3Rpb24oZSx0KXtyZXR1cm4gbHIoZSwxLHQpfSkpLE1hPXpyKChmdW5jdGlvbihlLHQsbil7cmV0dXJuIGxyKGUsZGwodCl8fDAsbil9KSk7ZnVuY3Rpb24ga2EoZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlfHxudWxsIT10JiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IG5ldyBTZShpKTt2YXIgbj1mdW5jdGlvbigpe3ZhciByPWFyZ3VtZW50cyxvPXQ/dC5hcHBseSh0aGlzLHIpOnJbMF0saT1uLmNhY2hlO2lmKGkuaGFzKG8pKXJldHVybiBpLmdldChvKTt2YXIgYT1lLmFwcGx5KHRoaXMscik7cmV0dXJuIG4uY2FjaGU9aS5zZXQobyxhKXx8aSxhfTtyZXR1cm4gbi5jYWNoZT1uZXcoa2EuQ2FjaGV8fFVuKSxufWZ1bmN0aW9uIFJhKGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFNlKGkpO3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cztzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4hZS5jYWxsKHRoaXMpO2Nhc2UgMTpyZXR1cm4hZS5jYWxsKHRoaXMsdFswXSk7Y2FzZSAyOnJldHVybiFlLmNhbGwodGhpcyx0WzBdLHRbMV0pO2Nhc2UgMzpyZXR1cm4hZS5jYWxsKHRoaXMsdFswXSx0WzFdLHRbMl0pfXJldHVybiFlLmFwcGx5KHRoaXMsdCl9fWthLkNhY2hlPVVuO3ZhciBQYT1tbygoZnVuY3Rpb24oZSx0KXt2YXIgbj0odD0xPT10Lmxlbmd0aCYmWmEodFswXSk/UnQodFswXSxZdChpaSgpKSk6UnQoaHIodCwxKSxZdChpaSgpKSkpLmxlbmd0aDtyZXR1cm4genIoKGZ1bmN0aW9uKHIpe2Zvcih2YXIgbz0tMSxpPXZuKHIubGVuZ3RoLG4pOysrbzxpOylyW29dPXRbb10uY2FsbCh0aGlzLHJbb10pO3JldHVybiBfdChlLHRoaXMscil9KSl9KSksSWE9enIoKGZ1bmN0aW9uKGUsdCl7dmFyIG49bG4odCxvaShJYSkpO3JldHVybiBxbyhlLHMsbyx0LG4pfSkpLEFhPXpyKChmdW5jdGlvbihlLHQpe3ZhciBuPWxuKHQsb2koQWEpKTtyZXR1cm4gcW8oZSw2NCxvLHQsbil9KSksVGE9UW8oKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHFvKGUsMjU2LG8sbyxvLHQpfSkpO2Z1bmN0aW9uIEhhKGUsdCl7cmV0dXJuIGU9PT10fHxlIT1lJiZ0IT10fXZhciBCYT1GbyhfciksVmE9Rm8oKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU+PXR9KSksRGE9anIoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKT9qcjpmdW5jdGlvbihlKXtyZXR1cm4gWGEoZSkmJkllLmNhbGwoZSxcImNhbGxlZVwiKSYmIXplLmNhbGwoZSxcImNhbGxlZVwiKX0sWmE9ci5pc0FycmF5LCRhPW10P1l0KG10KTpmdW5jdGlvbihlKXtyZXR1cm4gWGEoZSkmJnhyKGUpPT1SfTtmdW5jdGlvbiBOYShlKXtyZXR1cm4gbnVsbCE9ZSYmWWEoZS5sZW5ndGgpJiYhR2EoZSl9ZnVuY3Rpb24gRmEoZSl7cmV0dXJuIFhhKGUpJiZOYShlKX12YXIgVWE9dnR8fGRzLFdhPUN0P1l0KEN0KTpmdW5jdGlvbihlKXtyZXR1cm4gWGEoZSkmJnhyKGUpPT1DfTtmdW5jdGlvbiB6YShlKXtpZighWGEoZSkpcmV0dXJuITE7dmFyIHQ9eHIoZSk7cmV0dXJuIHQ9PXl8fFwiW29iamVjdCBET01FeGNlcHRpb25dXCI9PXR8fFwic3RyaW5nXCI9PXR5cGVvZiBlLm1lc3NhZ2UmJlwic3RyaW5nXCI9PXR5cGVvZiBlLm5hbWUmJiFlbChlKX1mdW5jdGlvbiBHYShlKXtpZighS2EoZSkpcmV0dXJuITE7dmFyIHQ9eHIoZSk7cmV0dXJuIHQ9PXd8fHQ9PWJ8fFwiW29iamVjdCBBc3luY0Z1bmN0aW9uXVwiPT10fHxcIltvYmplY3QgUHJveHldXCI9PXR9ZnVuY3Rpb24gcWEoZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGUmJmU9PXVsKGUpfWZ1bmN0aW9uIFlhKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlJiZlPi0xJiZlJTE9PTAmJmU8PWZ9ZnVuY3Rpb24gS2EoZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuIG51bGwhPWUmJihcIm9iamVjdFwiPT10fHxcImZ1bmN0aW9uXCI9PXQpfWZ1bmN0aW9uIFhhKGUpe3JldHVybiBudWxsIT1lJiZcIm9iamVjdFwiPT10eXBlb2YgZX12YXIgSmE9eXQ/WXQoeXQpOmZ1bmN0aW9uKGUpe3JldHVybiBYYShlKSYmZmkoZSk9PXh9O2Z1bmN0aW9uIFFhKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlfHxYYShlKSYmeHIoZSk9PV99ZnVuY3Rpb24gZWwoZSl7aWYoIVhhKGUpfHx4cihlKSE9TylyZXR1cm4hMTt2YXIgdD1VZShlKTtpZihudWxsPT09dClyZXR1cm4hMDt2YXIgbj1JZS5jYWxsKHQsXCJjb25zdHJ1Y3RvclwiKSYmdC5jb25zdHJ1Y3RvcjtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBuJiZuIGluc3RhbmNlb2YgbiYmUGUuY2FsbChuKT09QmV9dmFyIHRsPXd0P1l0KHd0KTpmdW5jdGlvbihlKXtyZXR1cm4gWGEoZSkmJnhyKGUpPT1FfSxubD1idD9ZdChidCk6ZnVuY3Rpb24oZSl7cmV0dXJuIFhhKGUpJiZmaShlKT09U307ZnVuY3Rpb24gcmwoZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGV8fCFaYShlKSYmWGEoZSkmJnhyKGUpPT1qfWZ1bmN0aW9uIG9sKGUpe3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiBlfHxYYShlKSYmeHIoZSk9PU19dmFyIGlsPXh0P1l0KHh0KTpmdW5jdGlvbihlKXtyZXR1cm4gWGEoZSkmJllhKGUubGVuZ3RoKSYmISFvdFt4cihlKV19LGFsPUZvKEFyKSxsbD1GbygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZTw9dH0pKTtmdW5jdGlvbiBzbChlKXtpZighZSlyZXR1cm5bXTtpZihOYShlKSlyZXR1cm4gcmwoZSk/dW4oZSk6RW8oZSk7aWYoWWUmJmVbWWVdKXJldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHQsbj1bXTshKHQ9ZS5uZXh0KCkpLmRvbmU7KW4ucHVzaCh0LnZhbHVlKTtyZXR1cm4gbn0oZVtZZV0oKSk7dmFyIHQ9ZmkoZSk7cmV0dXJuKHQ9PXg/b246dD09Uz9zbjpIbCkoZSl9ZnVuY3Rpb24gY2woZSl7cmV0dXJuIGU/KGU9ZGwoZSkpPT09dXx8ZT09PS0xLzA/MTc5NzY5MzEzNDg2MjMxNTdlMjkyKihlPDA/LTE6MSk6ZT09ZT9lOjA6MD09PWU/ZTowfWZ1bmN0aW9uIHVsKGUpe3ZhciB0PWNsKGUpLG49dCUxO3JldHVybiB0PT10P24/dC1uOnQ6MH1mdW5jdGlvbiBmbChlKXtyZXR1cm4gZT9vcih1bChlKSwwLHApOjB9ZnVuY3Rpb24gZGwoZSl7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpcmV0dXJuIGU7aWYob2woZSkpcmV0dXJuIGQ7aWYoS2EoZSkpe3ZhciB0PVwiZnVuY3Rpb25cIj09dHlwZW9mIGUudmFsdWVPZj9lLnZhbHVlT2YoKTplO2U9S2EodCk/dCtcIlwiOnR9aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpcmV0dXJuIDA9PT1lP2U6K2U7ZT1xdChlKTt2YXIgbj1oZS50ZXN0KGUpO3JldHVybiBufHx2ZS50ZXN0KGUpP3N0KGUuc2xpY2UoMiksbj8yOjgpOnBlLnRlc3QoZSk/ZDorZX1mdW5jdGlvbiBwbChlKXtyZXR1cm4gU28oZSxqbChlKSl9ZnVuY3Rpb24gaGwoZSl7cmV0dXJuIG51bGw9PWU/XCJcIjppbyhlKX12YXIgZ2w9TW8oKGZ1bmN0aW9uKGUsdCl7aWYod2kodCl8fE5hKHQpKVNvKHQsU2wodCksZSk7ZWxzZSBmb3IodmFyIG4gaW4gdClJZS5jYWxsKHQsbikmJkpuKGUsbix0W25dKX0pKSx2bD1NbygoZnVuY3Rpb24oZSx0KXtTbyh0LGpsKHQpLGUpfSkpLG1sPU1vKChmdW5jdGlvbihlLHQsbixyKXtTbyh0LGpsKHQpLGUscil9KSksQ2w9TW8oKGZ1bmN0aW9uKGUsdCxuLHIpe1NvKHQsU2wodCksZSxyKX0pKSx5bD1Rbyhyciksd2w9enIoKGZ1bmN0aW9uKGUsdCl7ZT1PZShlKTt2YXIgbj0tMSxyPXQubGVuZ3RoLGk9cj4yP3RbMl06bztmb3IoaSYmdmkodFswXSx0WzFdLGkpJiYocj0xKTsrK248cjspZm9yKHZhciBhPXRbbl0sbD1qbChhKSxzPS0xLGM9bC5sZW5ndGg7KytzPGM7KXt2YXIgdT1sW3NdLGY9ZVt1XTsoZj09PW98fEhhKGYsa2VbdV0pJiYhSWUuY2FsbChlLHUpKSYmKGVbdV09YVt1XSl9cmV0dXJuIGV9KSksYmw9enIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnB1c2gobyxLbyksX3Qoa2wsbyxlKX0pKTtmdW5jdGlvbiB4bChlLHQsbil7dmFyIHI9bnVsbD09ZT9vOndyKGUsdCk7cmV0dXJuIHI9PT1vP246cn1mdW5jdGlvbiBfbChlLHQpe3JldHVybiBudWxsIT1lJiZkaShlLHQsTHIpfXZhciBPbD1WbygoZnVuY3Rpb24oZSx0LG4pe251bGwhPXQmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHQudG9TdHJpbmcmJih0PUhlLmNhbGwodCkpLGVbdF09bn0pLEtsKFFsKSksTGw9Vm8oKGZ1bmN0aW9uKGUsdCxuKXtudWxsIT10JiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB0LnRvU3RyaW5nJiYodD1IZS5jYWxsKHQpKSxJZS5jYWxsKGUsdCk/ZVt0XS5wdXNoKG4pOmVbdF09W25dfSksaWkpLEVsPXpyKFNyKTtmdW5jdGlvbiBTbChlKXtyZXR1cm4gTmEoZSk/R24oZSk6SXIoZSl9ZnVuY3Rpb24gamwoZSl7cmV0dXJuIE5hKGUpP0duKGUsITApOmZ1bmN0aW9uKGUpe2lmKCFLYShlKSlyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9W107aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gT2UoZSkpdC5wdXNoKG4pO3JldHVybiB0fShlKTt2YXIgdD13aShlKSxuPVtdO2Zvcih2YXIgciBpbiBlKShcImNvbnN0cnVjdG9yXCIhPXJ8fCF0JiZJZS5jYWxsKGUscikpJiZuLnB1c2gocik7cmV0dXJuIG59KGUpfXZhciBNbD1NbygoZnVuY3Rpb24oZSx0LG4pe1ZyKGUsdCxuKX0pKSxrbD1NbygoZnVuY3Rpb24oZSx0LG4scil7VnIoZSx0LG4scil9KSksUmw9UW8oKGZ1bmN0aW9uKGUsdCl7dmFyIG49e307aWYobnVsbD09ZSlyZXR1cm4gbjt2YXIgcj0hMTt0PVJ0KHQsKGZ1bmN0aW9uKHQpe3JldHVybiB0PXZvKHQsZSkscnx8KHI9dC5sZW5ndGg+MSksdH0pKSxTbyhlLHRpKGUpLG4pLHImJihuPWlyKG4sNyxYbykpO2Zvcih2YXIgbz10Lmxlbmd0aDtvLS07KWxvKG4sdFtvXSk7cmV0dXJuIG59KSksUGw9UW8oKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWU/e306ZnVuY3Rpb24oZSx0KXtyZXR1cm4gJHIoZSx0LChmdW5jdGlvbih0LG4pe3JldHVybiBfbChlLG4pfSkpfShlLHQpfSkpO2Z1bmN0aW9uIElsKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbj1SdCh0aShlKSwoZnVuY3Rpb24oZSl7cmV0dXJuW2VdfSkpO3JldHVybiB0PWlpKHQpLCRyKGUsbiwoZnVuY3Rpb24oZSxuKXtyZXR1cm4gdChlLG5bMF0pfSkpfXZhciBBbD1HbyhTbCksVGw9R28oamwpO2Z1bmN0aW9uIEhsKGUpe3JldHVybiBudWxsPT1lP1tdOkt0KGUsU2woZSkpfXZhciBCbD1JbygoZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PXQudG9Mb3dlckNhc2UoKSxlKyhuP1ZsKHQpOnQpfSkpO2Z1bmN0aW9uIFZsKGUpe3JldHVybiB6bChobChlKS50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiBEbChlKXtyZXR1cm4oZT1obChlKSkmJmUucmVwbGFjZShDZSxlbikucmVwbGFjZShYZSxcIlwiKX12YXIgWmw9SW8oKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSsobj9cIi1cIjpcIlwiKSt0LnRvTG93ZXJDYXNlKCl9KSksJGw9SW8oKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSsobj9cIiBcIjpcIlwiKSt0LnRvTG93ZXJDYXNlKCl9KSksTmw9UG8oXCJ0b0xvd2VyQ2FzZVwiKSxGbD1JbygoZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlKyhuP1wiX1wiOlwiXCIpK3QudG9Mb3dlckNhc2UoKX0pKSxVbD1JbygoZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlKyhuP1wiIFwiOlwiXCIpK3psKHQpfSkpLFdsPUlvKChmdW5jdGlvbihlLHQsbil7cmV0dXJuIGUrKG4/XCIgXCI6XCJcIikrdC50b1VwcGVyQ2FzZSgpfSkpLHpsPVBvKFwidG9VcHBlckNhc2VcIik7ZnVuY3Rpb24gR2woZSx0LG4pe3JldHVybiBlPWhsKGUpLCh0PW4/bzp0KT09PW8/ZnVuY3Rpb24oZSl7cmV0dXJuIHR0LnRlc3QoZSl9KGUpP2Z1bmN0aW9uKGUpe3JldHVybiBlLm1hdGNoKFFlKXx8W119KGUpOmZ1bmN0aW9uKGUpe3JldHVybiBlLm1hdGNoKHNlKXx8W119KGUpOmUubWF0Y2godCl8fFtdfXZhciBxbD16cigoZnVuY3Rpb24oZSx0KXt0cnl7cmV0dXJuIF90KGUsbyx0KX1jYXRjaChlKXtyZXR1cm4gemEoZSk/ZTpuZXcgYmUoZSl9fSkpLFlsPVFvKChmdW5jdGlvbihlLHQpe3JldHVybiBMdCh0LChmdW5jdGlvbih0KXt0PUlpKHQpLG5yKGUsdCxMYShlW3RdLGUpKX0pKSxlfSkpO2Z1bmN0aW9uIEtsKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgWGw9SG8oKSxKbD1IbyghMCk7ZnVuY3Rpb24gUWwoZSl7cmV0dXJuIGV9ZnVuY3Rpb24gZXMoZSl7cmV0dXJuIFByKFwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTppcihlLDEpKX12YXIgdHM9enIoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBTcihuLGUsdCl9fSkpLG5zPXpyKChmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gU3IoZSxuLHQpfX0pKTtmdW5jdGlvbiBycyhlLHQsbil7dmFyIHI9U2wodCksbz15cih0LHIpO251bGwhPW58fEthKHQpJiYoby5sZW5ndGh8fCFyLmxlbmd0aCl8fChuPXQsdD1lLGU9dGhpcyxvPXlyKHQsU2wodCkpKTt2YXIgaT0hKEthKG4pJiZcImNoYWluXCJpbiBuJiYhbi5jaGFpbiksYT1HYShlKTtyZXR1cm4gTHQobywoZnVuY3Rpb24obil7dmFyIHI9dFtuXTtlW25dPXIsYSYmKGUucHJvdG90eXBlW25dPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX2NoYWluX187aWYoaXx8dCl7dmFyIG49ZSh0aGlzLl9fd3JhcHBlZF9fKTtyZXR1cm4obi5fX2FjdGlvbnNfXz1Fbyh0aGlzLl9fYWN0aW9uc19fKSkucHVzaCh7ZnVuYzpyLGFyZ3M6YXJndW1lbnRzLHRoaXNBcmc6ZX0pLG4uX19jaGFpbl9fPXQsbn1yZXR1cm4gci5hcHBseShlLFB0KFt0aGlzLnZhbHVlKCldLGFyZ3VtZW50cykpfSl9KSksZX1mdW5jdGlvbiBvcygpe312YXIgaXM9Wm8oUnQpLGFzPVpvKFN0KSxscz1abyhUdCk7ZnVuY3Rpb24gc3MoZSl7cmV0dXJuIG1pKGUpP0Z0KElpKGUpKTpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHdyKHQsZSl9fShlKX12YXIgY3M9Tm8oKSx1cz1ObyghMCk7ZnVuY3Rpb24gZnMoKXtyZXR1cm5bXX1mdW5jdGlvbiBkcygpe3JldHVybiExfXZhciBwcyxocz1EbygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0fSksMCksZ3M9V28oXCJjZWlsXCIpLHZzPURvKChmdW5jdGlvbihlLHQpe3JldHVybiBlL3R9KSwxKSxtcz1XbyhcImZsb29yXCIpLENzPURvKChmdW5jdGlvbihlLHQpe3JldHVybiBlKnR9KSwxKSx5cz1XbyhcInJvdW5kXCIpLHdzPURvKChmdW5jdGlvbihlLHQpe3JldHVybiBlLXR9KSwwKTtyZXR1cm4gQm4uYWZ0ZXI9ZnVuY3Rpb24oZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IG5ldyBTZShpKTtyZXR1cm4gZT11bChlKSxmdW5jdGlvbigpe2lmKC0tZTwxKXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LEJuLmFyeT1fYSxCbi5hc3NpZ249Z2wsQm4uYXNzaWduSW49dmwsQm4uYXNzaWduSW5XaXRoPW1sLEJuLmFzc2lnbldpdGg9Q2wsQm4uYXQ9eWwsQm4uYmVmb3JlPU9hLEJuLmJpbmQ9TGEsQm4uYmluZEFsbD1ZbCxCbi5iaW5kS2V5PUVhLEJuLmNhc3RBcnJheT1mdW5jdGlvbigpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybltdO3ZhciBlPWFyZ3VtZW50c1swXTtyZXR1cm4gWmEoZSk/ZTpbZV19LEJuLmNoYWluPXNhLEJuLmNodW5rPWZ1bmN0aW9uKGUsdCxuKXt0PShuP3ZpKGUsdCxuKTp0PT09byk/MTpnbih1bCh0KSwwKTt2YXIgaT1udWxsPT1lPzA6ZS5sZW5ndGg7aWYoIWl8fHQ8MSlyZXR1cm5bXTtmb3IodmFyIGE9MCxsPTAscz1yKGR0KGkvdCkpO2E8aTspc1tsKytdPVFyKGUsYSxhKz10KTtyZXR1cm4gc30sQm4uY29tcGFjdD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGgscj0wLG89W107Kyt0PG47KXt2YXIgaT1lW3RdO2kmJihvW3IrK109aSl9cmV0dXJuIG99LEJuLmNvbmNhdD1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg7aWYoIWUpcmV0dXJuW107Zm9yKHZhciB0PXIoZS0xKSxuPWFyZ3VtZW50c1swXSxvPWU7by0tOyl0W28tMV09YXJndW1lbnRzW29dO3JldHVybiBQdChaYShuKT9FbyhuKTpbbl0saHIodCwxKSl9LEJuLmNvbmQ9ZnVuY3Rpb24oZSl7dmFyIHQ9bnVsbD09ZT8wOmUubGVuZ3RoLG49aWkoKTtyZXR1cm4gZT10P1J0KGUsKGZ1bmN0aW9uKGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGVbMV0pdGhyb3cgbmV3IFNlKGkpO3JldHVybltuKGVbMF0pLGVbMV1dfSkpOltdLHpyKChmdW5jdGlvbihuKXtmb3IodmFyIHI9LTE7KytyPHQ7KXt2YXIgbz1lW3JdO2lmKF90KG9bMF0sdGhpcyxuKSlyZXR1cm4gX3Qob1sxXSx0aGlzLG4pfX0pKX0sQm4uY29uZm9ybXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PVNsKGUpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gYXIobixlLHQpfX0oaXIoZSwxKSl9LEJuLmNvbnN0YW50PUtsLEJuLmNvdW50Qnk9ZmEsQm4uY3JlYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49Vm4oZSk7cmV0dXJuIG51bGw9PXQ/bjp0cihuLHQpfSxCbi5jdXJyeT1mdW5jdGlvbiBlKHQsbixyKXt2YXIgaT1xbyh0LDgsbyxvLG8sbyxvLG49cj9vOm4pO3JldHVybiBpLnBsYWNlaG9sZGVyPWUucGxhY2Vob2xkZXIsaX0sQm4uY3VycnlSaWdodD1mdW5jdGlvbiBlKHQsbixyKXt2YXIgaT1xbyh0LDE2LG8sbyxvLG8sbyxuPXI/bzpuKTtyZXR1cm4gaS5wbGFjZWhvbGRlcj1lLnBsYWNlaG9sZGVyLGl9LEJuLmRlYm91bmNlPVNhLEJuLmRlZmF1bHRzPXdsLEJuLmRlZmF1bHRzRGVlcD1ibCxCbi5kZWZlcj1qYSxCbi5kZWxheT1NYSxCbi5kaWZmZXJlbmNlPUhpLEJuLmRpZmZlcmVuY2VCeT1CaSxCbi5kaWZmZXJlbmNlV2l0aD1WaSxCbi5kcm9wPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7cmV0dXJuIHI/UXIoZSwodD1ufHx0PT09bz8xOnVsKHQpKTwwPzA6dCxyKTpbXX0sQm4uZHJvcFJpZ2h0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7cmV0dXJuIHI/UXIoZSwwLCh0PXItKHQ9bnx8dD09PW8/MTp1bCh0KSkpPDA/MDp0KTpbXX0sQm4uZHJvcFJpZ2h0V2hpbGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/Y28oZSxpaSh0LDMpLCEwLCEwKTpbXX0sQm4uZHJvcFdoaWxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP2NvKGUsaWkodCwzKSwhMCk6W119LEJuLmZpbGw9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9bnVsbD09ZT8wOmUubGVuZ3RoO3JldHVybiBpPyhuJiZcIm51bWJlclwiIT10eXBlb2YgbiYmdmkoZSx0LG4pJiYobj0wLHI9aSksZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9ZS5sZW5ndGg7Zm9yKChuPXVsKG4pKTwwJiYobj0tbj5pPzA6aStuKSwocj1yPT09b3x8cj5pP2k6dWwocikpPDAmJihyKz1pKSxyPW4+cj8wOmZsKHIpO248cjspZVtuKytdPXQ7cmV0dXJuIGV9KGUsdCxuLHIpKTpbXX0sQm4uZmlsdGVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKFphKGUpP2p0OnByKShlLGlpKHQsMykpfSxCbi5mbGF0TWFwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGhyKHlhKGUsdCksMSl9LEJuLmZsYXRNYXBEZWVwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGhyKHlhKGUsdCksdSl9LEJuLmZsYXRNYXBEZXB0aD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG49bj09PW8/MTp1bChuKSxocih5YShlLHQpLG4pfSxCbi5mbGF0dGVuPSRpLEJuLmZsYXR0ZW5EZWVwPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lJiZlLmxlbmd0aD9ocihlLHUpOltdfSxCbi5mbGF0dGVuRGVwdGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbCE9ZSYmZS5sZW5ndGg/aHIoZSx0PXQ9PT1vPzE6dWwodCkpOltdfSxCbi5mbGlwPWZ1bmN0aW9uKGUpe3JldHVybiBxbyhlLDUxMil9LEJuLmZsb3c9WGwsQm4uZmxvd1JpZ2h0PUpsLEJuLmZyb21QYWlycz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9LTEsbj1udWxsPT1lPzA6ZS5sZW5ndGgscj17fTsrK3Q8bjspe3ZhciBvPWVbdF07cltvWzBdXT1vWzFdfXJldHVybiByfSxCbi5mdW5jdGlvbnM9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/W106eXIoZSxTbChlKSl9LEJuLmZ1bmN0aW9uc0luPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP1tdOnlyKGUsamwoZSkpfSxCbi5ncm91cEJ5PXZhLEJuLmluaXRpYWw9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWUmJmUubGVuZ3RoP1FyKGUsMCwtMSk6W119LEJuLmludGVyc2VjdGlvbj1GaSxCbi5pbnRlcnNlY3Rpb25CeT1VaSxCbi5pbnRlcnNlY3Rpb25XaXRoPVdpLEJuLmludmVydD1PbCxCbi5pbnZlcnRCeT1MbCxCbi5pbnZva2VNYXA9bWEsQm4uaXRlcmF0ZWU9ZXMsQm4ua2V5Qnk9Q2EsQm4ua2V5cz1TbCxCbi5rZXlzSW49amwsQm4ubWFwPXlhLEJuLm1hcEtleXM9ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtyZXR1cm4gdD1paSh0LDMpLG1yKGUsKGZ1bmN0aW9uKGUscixvKXtucihuLHQoZSxyLG8pLGUpfSkpLG59LEJuLm1hcFZhbHVlcz1mdW5jdGlvbihlLHQpe3ZhciBuPXt9O3JldHVybiB0PWlpKHQsMyksbXIoZSwoZnVuY3Rpb24oZSxyLG8pe25yKG4scix0KGUscixvKSl9KSksbn0sQm4ubWF0Y2hlcz1mdW5jdGlvbihlKXtyZXR1cm4gSHIoaXIoZSwxKSl9LEJuLm1hdGNoZXNQcm9wZXJ0eT1mdW5jdGlvbihlLHQpe3JldHVybiBCcihlLGlyKHQsMSkpfSxCbi5tZW1vaXplPWthLEJuLm1lcmdlPU1sLEJuLm1lcmdlV2l0aD1rbCxCbi5tZXRob2Q9dHMsQm4ubWV0aG9kT2Y9bnMsQm4ubWl4aW49cnMsQm4ubmVnYXRlPVJhLEJuLm50aEFyZz1mdW5jdGlvbihlKXtyZXR1cm4gZT11bChlKSx6cigoZnVuY3Rpb24odCl7cmV0dXJuIERyKHQsZSl9KSl9LEJuLm9taXQ9UmwsQm4ub21pdEJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIElsKGUsUmEoaWkodCkpKX0sQm4ub25jZT1mdW5jdGlvbihlKXtyZXR1cm4gT2EoMixlKX0sQm4ub3JkZXJCeT1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbnVsbD09ZT9bXTooWmEodCl8fCh0PW51bGw9PXQ/W106W3RdKSxaYShuPXI/bzpuKXx8KG49bnVsbD09bj9bXTpbbl0pLFpyKGUsdCxuKSl9LEJuLm92ZXI9aXMsQm4ub3ZlckFyZ3M9UGEsQm4ub3ZlckV2ZXJ5PWFzLEJuLm92ZXJTb21lPWxzLEJuLnBhcnRpYWw9SWEsQm4ucGFydGlhbFJpZ2h0PUFhLEJuLnBhcnRpdGlvbj13YSxCbi5waWNrPVBsLEJuLnBpY2tCeT1JbCxCbi5wcm9wZXJ0eT1zcyxCbi5wcm9wZXJ0eU9mPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09ZT9vOndyKGUsdCl9fSxCbi5wdWxsPUdpLEJuLnB1bGxBbGw9cWksQm4ucHVsbEFsbEJ5PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSYmZS5sZW5ndGgmJnQmJnQubGVuZ3RoP05yKGUsdCxpaShuLDIpKTplfSxCbi5wdWxsQWxsV2l0aD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUmJmUubGVuZ3RoJiZ0JiZ0Lmxlbmd0aD9OcihlLHQsbyxuKTplfSxCbi5wdWxsQXQ9WWksQm4ucmFuZ2U9Y3MsQm4ucmFuZ2VSaWdodD11cyxCbi5yZWFyZz1UYSxCbi5yZWplY3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oWmEoZSk/anQ6cHIpKGUsUmEoaWkodCwzKSkpfSxCbi5yZW1vdmU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1bXTtpZighZXx8IWUubGVuZ3RoKXJldHVybiBuO3ZhciByPS0xLG89W10saT1lLmxlbmd0aDtmb3IodD1paSh0LDMpOysrcjxpOyl7dmFyIGE9ZVtyXTt0KGEscixlKSYmKG4ucHVzaChhKSxvLnB1c2gocikpfXJldHVybiBGcihlLG8pLG59LEJuLnJlc3Q9ZnVuY3Rpb24oZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBTZShpKTtyZXR1cm4genIoZSx0PXQ9PT1vP3Q6dWwodCkpfSxCbi5yZXZlcnNlPUtpLEJuLnNhbXBsZVNpemU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PShuP3ZpKGUsdCxuKTp0PT09byk/MTp1bCh0KSwoWmEoZSk/WW46cXIpKGUsdCl9LEJuLnNldD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG51bGw9PWU/ZTpZcihlLHQsbil9LEJuLnNldFdpdGg9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHI9XCJmdW5jdGlvblwiPT10eXBlb2Ygcj9yOm8sbnVsbD09ZT9lOllyKGUsdCxuLHIpfSxCbi5zaHVmZmxlPWZ1bmN0aW9uKGUpe3JldHVybihaYShlKT9LbjpKcikoZSl9LEJuLnNsaWNlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7cmV0dXJuIHI/KG4mJlwibnVtYmVyXCIhPXR5cGVvZiBuJiZ2aShlLHQsbik/KHQ9MCxuPXIpOih0PW51bGw9PXQ/MDp1bCh0KSxuPW49PT1vP3I6dWwobikpLFFyKGUsdCxuKSk6W119LEJuLnNvcnRCeT1iYSxCbi5zb3J0ZWRVbmlxPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmxlbmd0aD9ybyhlKTpbXX0sQm4uc29ydGVkVW5pcUJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP3JvKGUsaWkodCwyKSk6W119LEJuLnNwbGl0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbiYmXCJudW1iZXJcIiE9dHlwZW9mIG4mJnZpKGUsdCxuKSYmKHQ9bj1vKSwobj1uPT09bz9wOm4+Pj4wKT8oZT1obChlKSkmJihcInN0cmluZ1wiPT10eXBlb2YgdHx8bnVsbCE9dCYmIXRsKHQpKSYmISh0PWlvKHQpKSYmcm4oZSk/Q28odW4oZSksMCxuKTplLnNwbGl0KHQsbik6W119LEJuLnNwcmVhZD1mdW5jdGlvbihlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFNlKGkpO3JldHVybiB0PW51bGw9PXQ/MDpnbih1bCh0KSwwKSx6cigoZnVuY3Rpb24obil7dmFyIHI9blt0XSxvPUNvKG4sMCx0KTtyZXR1cm4gciYmUHQobyxyKSxfdChlLHRoaXMsbyl9KSl9LEJuLnRhaWw9ZnVuY3Rpb24oZSl7dmFyIHQ9bnVsbD09ZT8wOmUubGVuZ3RoO3JldHVybiB0P1FyKGUsMSx0KTpbXX0sQm4udGFrZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUmJmUubGVuZ3RoP1FyKGUsMCwodD1ufHx0PT09bz8xOnVsKHQpKTwwPzA6dCk6W119LEJuLnRha2VSaWdodD1mdW5jdGlvbihlLHQsbil7dmFyIHI9bnVsbD09ZT8wOmUubGVuZ3RoO3JldHVybiByP1FyKGUsKHQ9ci0odD1ufHx0PT09bz8xOnVsKHQpKSk8MD8wOnQscik6W119LEJuLnRha2VSaWdodFdoaWxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP2NvKGUsaWkodCwzKSwhMSwhMCk6W119LEJuLnRha2VXaGlsZT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD9jbyhlLGlpKHQsMykpOltdfSxCbi50YXA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdChlKSxlfSxCbi50aHJvdHRsZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9ITAsbz0hMDtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBTZShpKTtyZXR1cm4gS2EobikmJihyPVwibGVhZGluZ1wiaW4gbj8hIW4ubGVhZGluZzpyLG89XCJ0cmFpbGluZ1wiaW4gbj8hIW4udHJhaWxpbmc6byksU2EoZSx0LHtsZWFkaW5nOnIsbWF4V2FpdDp0LHRyYWlsaW5nOm99KX0sQm4udGhydT1jYSxCbi50b0FycmF5PXNsLEJuLnRvUGFpcnM9QWwsQm4udG9QYWlyc0luPVRsLEJuLnRvUGF0aD1mdW5jdGlvbihlKXtyZXR1cm4gWmEoZSk/UnQoZSxJaSk6b2woZSk/W2VdOkVvKFBpKGhsKGUpKSl9LEJuLnRvUGxhaW5PYmplY3Q9cGwsQm4udHJhbnNmb3JtPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1aYShlKSxvPXJ8fFVhKGUpfHxpbChlKTtpZih0PWlpKHQsNCksbnVsbD09bil7dmFyIGk9ZSYmZS5jb25zdHJ1Y3RvcjtuPW8/cj9uZXcgaTpbXTpLYShlKSYmR2EoaSk/Vm4oVWUoZSkpOnt9fXJldHVybihvP0x0Om1yKShlLChmdW5jdGlvbihlLHIsbyl7cmV0dXJuIHQobixlLHIsbyl9KSksbn0sQm4udW5hcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIF9hKGUsMSl9LEJuLnVuaW9uPVhpLEJuLnVuaW9uQnk9SmksQm4udW5pb25XaXRoPVFpLEJuLnVuaXE9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUubGVuZ3RoP2FvKGUpOltdfSxCbi51bmlxQnk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/YW8oZSxpaSh0LDIpKTpbXX0sQm4udW5pcVdpdGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6byxlJiZlLmxlbmd0aD9hbyhlLG8sdCk6W119LEJuLnVuc2V0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWV8fGxvKGUsdCl9LEJuLnVuemlwPWVhLEJuLnVuemlwV2l0aD10YSxCbi51cGRhdGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBudWxsPT1lP2U6c28oZSx0LGdvKG4pKX0sQm4udXBkYXRlV2l0aD1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gcj1cImZ1bmN0aW9uXCI9PXR5cGVvZiByP3I6byxudWxsPT1lP2U6c28oZSx0LGdvKG4pLHIpfSxCbi52YWx1ZXM9SGwsQm4udmFsdWVzSW49ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/W106S3QoZSxqbChlKSl9LEJuLndpdGhvdXQ9bmEsQm4ud29yZHM9R2wsQm4ud3JhcD1mdW5jdGlvbihlLHQpe3JldHVybiBJYShnbyh0KSxlKX0sQm4ueG9yPXJhLEJuLnhvckJ5PW9hLEJuLnhvcldpdGg9aWEsQm4uemlwPWFhLEJuLnppcE9iamVjdD1mdW5jdGlvbihlLHQpe3JldHVybiBwbyhlfHxbXSx0fHxbXSxKbil9LEJuLnppcE9iamVjdERlZXA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcG8oZXx8W10sdHx8W10sWXIpfSxCbi56aXBXaXRoPWxhLEJuLmVudHJpZXM9QWwsQm4uZW50cmllc0luPVRsLEJuLmV4dGVuZD12bCxCbi5leHRlbmRXaXRoPW1sLHJzKEJuLEJuKSxCbi5hZGQ9aHMsQm4uYXR0ZW1wdD1xbCxCbi5jYW1lbENhc2U9QmwsQm4uY2FwaXRhbGl6ZT1WbCxCbi5jZWlsPWdzLEJuLmNsYW1wPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj09PW8mJihuPXQsdD1vKSxuIT09byYmKG49KG49ZGwobikpPT1uP246MCksdCE9PW8mJih0PSh0PWRsKHQpKT09dD90OjApLG9yKGRsKGUpLHQsbil9LEJuLmNsb25lPWZ1bmN0aW9uKGUpe3JldHVybiBpcihlLDQpfSxCbi5jbG9uZURlZXA9ZnVuY3Rpb24oZSl7cmV0dXJuIGlyKGUsNSl9LEJuLmNsb25lRGVlcFdpdGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaXIoZSw1LHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Om8pfSxCbi5jbG9uZVdpdGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaXIoZSw0LHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Om8pfSxCbi5jb25mb3Jtc1RvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PXR8fGFyKGUsdCxTbCh0KSl9LEJuLmRlYnVycj1EbCxCbi5kZWZhdWx0VG89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZXx8ZSE9ZT90OmV9LEJuLmRpdmlkZT12cyxCbi5lbmRzV2l0aD1mdW5jdGlvbihlLHQsbil7ZT1obChlKSx0PWlvKHQpO3ZhciByPWUubGVuZ3RoLGk9bj1uPT09bz9yOm9yKHVsKG4pLDAscik7cmV0dXJuKG4tPXQubGVuZ3RoKT49MCYmZS5zbGljZShuLGkpPT10fSxCbi5lcT1IYSxCbi5lc2NhcGU9ZnVuY3Rpb24oZSl7cmV0dXJuKGU9aGwoZSkpJiZxLnRlc3QoZSk/ZS5yZXBsYWNlKHosdG4pOmV9LEJuLmVzY2FwZVJlZ0V4cD1mdW5jdGlvbihlKXtyZXR1cm4oZT1obChlKSkmJm5lLnRlc3QoZSk/ZS5yZXBsYWNlKHRlLFwiXFxcXCQmXCIpOmV9LEJuLmV2ZXJ5PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1aYShlKT9TdDpmcjtyZXR1cm4gbiYmdmkoZSx0LG4pJiYodD1vKSxyKGUsaWkodCwzKSl9LEJuLmZpbmQ9ZGEsQm4uZmluZEluZGV4PURpLEJuLmZpbmRLZXk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gQnQoZSxpaSh0LDMpLG1yKX0sQm4uZmluZExhc3Q9cGEsQm4uZmluZExhc3RJbmRleD1aaSxCbi5maW5kTGFzdEtleT1mdW5jdGlvbihlLHQpe3JldHVybiBCdChlLGlpKHQsMyksQ3IpfSxCbi5mbG9vcj1tcyxCbi5mb3JFYWNoPWhhLEJuLmZvckVhY2hSaWdodD1nYSxCbi5mb3JJbj1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lP2U6Z3IoZSxpaSh0LDMpLGpsKX0sQm4uZm9ySW5SaWdodD1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lP2U6dnIoZSxpaSh0LDMpLGpsKX0sQm4uZm9yT3duPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJm1yKGUsaWkodCwzKSl9LEJuLmZvck93blJpZ2h0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJkNyKGUsaWkodCwzKSl9LEJuLmdldD14bCxCbi5ndD1CYSxCbi5ndGU9VmEsQm4uaGFzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGwhPWUmJmRpKGUsdCxPcil9LEJuLmhhc0luPV9sLEJuLmhlYWQ9TmksQm4uaWRlbnRpdHk9UWwsQm4uaW5jbHVkZXM9ZnVuY3Rpb24oZSx0LG4scil7ZT1OYShlKT9lOkhsKGUpLG49biYmIXI/dWwobik6MDt2YXIgbz1lLmxlbmd0aDtyZXR1cm4gbjwwJiYobj1nbihvK24sMCkpLHJsKGUpP248PW8mJmUuaW5kZXhPZih0LG4pPi0xOiEhbyYmRHQoZSx0LG4pPi0xfSxCbi5pbmRleE9mPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7aWYoIXIpcmV0dXJuLTE7dmFyIG89bnVsbD09bj8wOnVsKG4pO3JldHVybiBvPDAmJihvPWduKHIrbywwKSksRHQoZSx0LG8pfSxCbi5pblJhbmdlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD1jbCh0KSxuPT09bz8obj10LHQ9MCk6bj1jbChuKSxmdW5jdGlvbihlLHQsbil7cmV0dXJuIGU+PXZuKHQsbikmJmU8Z24odCxuKX0oZT1kbChlKSx0LG4pfSxCbi5pbnZva2U9RWwsQm4uaXNBcmd1bWVudHM9RGEsQm4uaXNBcnJheT1aYSxCbi5pc0FycmF5QnVmZmVyPSRhLEJuLmlzQXJyYXlMaWtlPU5hLEJuLmlzQXJyYXlMaWtlT2JqZWN0PUZhLEJuLmlzQm9vbGVhbj1mdW5jdGlvbihlKXtyZXR1cm4hMD09PWV8fCExPT09ZXx8WGEoZSkmJnhyKGUpPT1tfSxCbi5pc0J1ZmZlcj1VYSxCbi5pc0RhdGU9V2EsQm4uaXNFbGVtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBYYShlKSYmMT09PWUubm9kZVR5cGUmJiFlbChlKX0sQm4uaXNFbXB0eT1mdW5jdGlvbihlKXtpZihudWxsPT1lKXJldHVybiEwO2lmKE5hKGUpJiYoWmEoZSl8fFwic3RyaW5nXCI9PXR5cGVvZiBlfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnNwbGljZXx8VWEoZSl8fGlsKGUpfHxEYShlKSkpcmV0dXJuIWUubGVuZ3RoO3ZhciB0PWZpKGUpO2lmKHQ9PXh8fHQ9PVMpcmV0dXJuIWUuc2l6ZTtpZih3aShlKSlyZXR1cm4hSXIoZSkubGVuZ3RoO2Zvcih2YXIgbiBpbiBlKWlmKEllLmNhbGwoZSxuKSlyZXR1cm4hMTtyZXR1cm4hMH0sQm4uaXNFcXVhbD1mdW5jdGlvbihlLHQpe3JldHVybiBNcihlLHQpfSxCbi5pc0VxdWFsV2l0aD1mdW5jdGlvbihlLHQsbil7dmFyIHI9KG49XCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uOm8pP24oZSx0KTpvO3JldHVybiByPT09bz9NcihlLHQsbyxuKTohIXJ9LEJuLmlzRXJyb3I9emEsQm4uaXNGaW5pdGU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGUmJkh0KGUpfSxCbi5pc0Z1bmN0aW9uPUdhLEJuLmlzSW50ZWdlcj1xYSxCbi5pc0xlbmd0aD1ZYSxCbi5pc01hcD1KYSxCbi5pc01hdGNoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10fHxrcihlLHQsbGkodCkpfSxCbi5pc01hdGNoV2l0aD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG49XCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uOm8sa3IoZSx0LGxpKHQpLG4pfSxCbi5pc05hTj1mdW5jdGlvbihlKXtyZXR1cm4gUWEoZSkmJmUhPStlfSxCbi5pc05hdGl2ZT1mdW5jdGlvbihlKXtpZih5aShlKSl0aHJvdyBuZXcgYmUoXCJVbnN1cHBvcnRlZCBjb3JlLWpzIHVzZS4gVHJ5IGh0dHBzOi8vbnBtcy5pby9zZWFyY2g/cT1wb255ZmlsbC5cIik7cmV0dXJuIFJyKGUpfSxCbi5pc05pbD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZX0sQm4uaXNOdWxsPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZX0sQm4uaXNOdW1iZXI9UWEsQm4uaXNPYmplY3Q9S2EsQm4uaXNPYmplY3RMaWtlPVhhLEJuLmlzUGxhaW5PYmplY3Q9ZWwsQm4uaXNSZWdFeHA9dGwsQm4uaXNTYWZlSW50ZWdlcj1mdW5jdGlvbihlKXtyZXR1cm4gcWEoZSkmJmU+PS05MDA3MTk5MjU0NzQwOTkxJiZlPD1mfSxCbi5pc1NldD1ubCxCbi5pc1N0cmluZz1ybCxCbi5pc1N5bWJvbD1vbCxCbi5pc1R5cGVkQXJyYXk9aWwsQm4uaXNVbmRlZmluZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1vfSxCbi5pc1dlYWtNYXA9ZnVuY3Rpb24oZSl7cmV0dXJuIFhhKGUpJiZmaShlKT09a30sQm4uaXNXZWFrU2V0PWZ1bmN0aW9uKGUpe3JldHVybiBYYShlKSYmXCJbb2JqZWN0IFdlYWtTZXRdXCI9PXhyKGUpfSxCbi5qb2luPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWU/XCJcIjpVdC5jYWxsKGUsdCl9LEJuLmtlYmFiQ2FzZT1abCxCbi5sYXN0PXppLEJuLmxhc3RJbmRleE9mPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1udWxsPT1lPzA6ZS5sZW5ndGg7aWYoIXIpcmV0dXJuLTE7dmFyIGk9cjtyZXR1cm4gbiE9PW8mJihpPShpPXVsKG4pKTwwP2duKHIraSwwKTp2bihpLHItMSkpLHQ9PXQ/ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1uKzE7ci0tOylpZihlW3JdPT09dClyZXR1cm4gcjtyZXR1cm4gcn0oZSx0LGkpOlZ0KGUsJHQsaSwhMCl9LEJuLmxvd2VyQ2FzZT0kbCxCbi5sb3dlckZpcnN0PU5sLEJuLmx0PWFsLEJuLmx0ZT1sbCxCbi5tYXg9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUubGVuZ3RoP2RyKGUsUWwsX3IpOm99LEJuLm1heEJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP2RyKGUsaWkodCwyKSxfcik6b30sQm4ubWVhbj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoZSxRbCl9LEJuLm1lYW5CeT1mdW5jdGlvbihlLHQpe3JldHVybiBOdChlLGlpKHQsMikpfSxCbi5taW49ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUubGVuZ3RoP2RyKGUsUWwsQXIpOm99LEJuLm1pbkJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP2RyKGUsaWkodCwyKSxBcik6b30sQm4uc3R1YkFycmF5PWZzLEJuLnN0dWJGYWxzZT1kcyxCbi5zdHViT2JqZWN0PWZ1bmN0aW9uKCl7cmV0dXJue319LEJuLnN0dWJTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIlwifSxCbi5zdHViVHJ1ZT1mdW5jdGlvbigpe3JldHVybiEwfSxCbi5tdWx0aXBseT1DcyxCbi5udGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/RHIoZSx1bCh0KSk6b30sQm4ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBmdC5fPT09dGhpcyYmKGZ0Ll89VmUpLHRoaXN9LEJuLm5vb3A9b3MsQm4ubm93PXhhLEJuLnBhZD1mdW5jdGlvbihlLHQsbil7ZT1obChlKTt2YXIgcj0odD11bCh0KSk/Y24oZSk6MDtpZighdHx8cj49dClyZXR1cm4gZTt2YXIgbz0odC1yKS8yO3JldHVybiAkbyhwdChvKSxuKStlKyRvKGR0KG8pLG4pfSxCbi5wYWRFbmQ9ZnVuY3Rpb24oZSx0LG4pe2U9aGwoZSk7dmFyIHI9KHQ9dWwodCkpP2NuKGUpOjA7cmV0dXJuIHQmJnI8dD9lKyRvKHQtcixuKTplfSxCbi5wYWRTdGFydD1mdW5jdGlvbihlLHQsbil7ZT1obChlKTt2YXIgcj0odD11bCh0KSk/Y24oZSk6MDtyZXR1cm4gdCYmcjx0PyRvKHQtcixuKStlOmV9LEJuLnBhcnNlSW50PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnx8bnVsbD09dD90PTA6dCYmKHQ9K3QpLENuKGhsKGUpLnJlcGxhY2UocmUsXCJcIiksdHx8MCl9LEJuLnJhbmRvbT1mdW5jdGlvbihlLHQsbil7aWYobiYmXCJib29sZWFuXCIhPXR5cGVvZiBuJiZ2aShlLHQsbikmJih0PW49byksbj09PW8mJihcImJvb2xlYW5cIj09dHlwZW9mIHQ/KG49dCx0PW8pOlwiYm9vbGVhblwiPT10eXBlb2YgZSYmKG49ZSxlPW8pKSxlPT09byYmdD09PW8/KGU9MCx0PTEpOihlPWNsKGUpLHQ9PT1vPyh0PWUsZT0wKTp0PWNsKHQpKSxlPnQpe3ZhciByPWU7ZT10LHQ9cn1pZihufHxlJTF8fHQlMSl7dmFyIGk9eW4oKTtyZXR1cm4gdm4oZStpKih0LWUrbHQoXCIxZS1cIisoKGkrXCJcIikubGVuZ3RoLTEpKSksdCl9cmV0dXJuIFVyKGUsdCl9LEJuLnJlZHVjZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9WmEoZSk/SXQ6V3Qsbz1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIHIoZSxpaSh0LDQpLG4sbyxjcil9LEJuLnJlZHVjZVJpZ2h0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1aYShlKT9BdDpXdCxvPWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gcihlLGlpKHQsNCksbixvLHVyKX0sQm4ucmVwZWF0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD0obj92aShlLHQsbik6dD09PW8pPzE6dWwodCksV3IoaGwoZSksdCl9LEJuLnJlcGxhY2U9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMsdD1obChlWzBdKTtyZXR1cm4gZS5sZW5ndGg8Mz90OnQucmVwbGFjZShlWzFdLGVbMl0pfSxCbi5yZXN1bHQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPS0xLGk9KHQ9dm8odCxlKSkubGVuZ3RoO2ZvcihpfHwoaT0xLGU9byk7KytyPGk7KXt2YXIgYT1udWxsPT1lP286ZVtJaSh0W3JdKV07YT09PW8mJihyPWksYT1uKSxlPUdhKGEpP2EuY2FsbChlKTphfXJldHVybiBlfSxCbi5yb3VuZD15cyxCbi5ydW5JbkNvbnRleHQ9ZSxCbi5zYW1wbGU9ZnVuY3Rpb24oZSl7cmV0dXJuKFphKGUpP3FuOkdyKShlKX0sQm4uc2l6ZT1mdW5jdGlvbihlKXtpZihudWxsPT1lKXJldHVybiAwO2lmKE5hKGUpKXJldHVybiBybChlKT9jbihlKTplLmxlbmd0aDt2YXIgdD1maShlKTtyZXR1cm4gdD09eHx8dD09Uz9lLnNpemU6SXIoZSkubGVuZ3RofSxCbi5zbmFrZUNhc2U9RmwsQm4uc29tZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9WmEoZSk/VHQ6ZW87cmV0dXJuIG4mJnZpKGUsdCxuKSYmKHQ9bykscihlLGlpKHQsMykpfSxCbi5zb3J0ZWRJbmRleD1mdW5jdGlvbihlLHQpe3JldHVybiB0byhlLHQpfSxCbi5zb3J0ZWRJbmRleEJ5PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbm8oZSx0LGlpKG4sMikpfSxCbi5zb3J0ZWRJbmRleE9mPWZ1bmN0aW9uKGUsdCl7dmFyIG49bnVsbD09ZT8wOmUubGVuZ3RoO2lmKG4pe3ZhciByPXRvKGUsdCk7aWYocjxuJiZIYShlW3JdLHQpKXJldHVybiByfXJldHVybi0xfSxCbi5zb3J0ZWRMYXN0SW5kZXg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdG8oZSx0LCEwKX0sQm4uc29ydGVkTGFzdEluZGV4Qnk9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBubyhlLHQsaWkobiwyKSwhMCl9LEJuLnNvcnRlZExhc3RJbmRleE9mPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9ZSYmZS5sZW5ndGgpe3ZhciBuPXRvKGUsdCwhMCktMTtpZihIYShlW25dLHQpKXJldHVybiBufXJldHVybi0xfSxCbi5zdGFydENhc2U9VWwsQm4uc3RhcnRzV2l0aD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9aGwoZSksbj1udWxsPT1uPzA6b3IodWwobiksMCxlLmxlbmd0aCksdD1pbyh0KSxlLnNsaWNlKG4sbit0Lmxlbmd0aCk9PXR9LEJuLnN1YnRyYWN0PXdzLEJuLnN1bT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5sZW5ndGg/enQoZSxRbCk6MH0sQm4uc3VtQnk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5sZW5ndGg/enQoZSxpaSh0LDIpKTowfSxCbi50ZW1wbGF0ZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9Qm4udGVtcGxhdGVTZXR0aW5ncztuJiZ2aShlLHQsbikmJih0PW8pLGU9aGwoZSksdD1tbCh7fSx0LHIsWW8pO3ZhciBpLGEsbD1tbCh7fSx0LmltcG9ydHMsci5pbXBvcnRzLFlvKSxzPVNsKGwpLGM9S3QobCxzKSx1PTAsZj10LmludGVycG9sYXRlfHx5ZSxkPVwiX19wICs9ICdcIixwPUxlKCh0LmVzY2FwZXx8eWUpLnNvdXJjZStcInxcIitmLnNvdXJjZStcInxcIisoZj09PVg/ZmU6eWUpLnNvdXJjZStcInxcIisodC5ldmFsdWF0ZXx8eWUpLnNvdXJjZStcInwkXCIsXCJnXCIpLGg9XCIvLyMgc291cmNlVVJMPVwiKyhJZS5jYWxsKHQsXCJzb3VyY2VVUkxcIik/KHQuc291cmNlVVJMK1wiXCIpLnJlcGxhY2UoL1xccy9nLFwiIFwiKTpcImxvZGFzaC50ZW1wbGF0ZVNvdXJjZXNbXCIrICsrcnQrXCJdXCIpK1wiXFxuXCI7ZS5yZXBsYWNlKHAsKGZ1bmN0aW9uKHQsbixyLG8sbCxzKXtyZXR1cm4gcnx8KHI9byksZCs9ZS5zbGljZSh1LHMpLnJlcGxhY2Uod2Usbm4pLG4mJihpPSEwLGQrPVwiJyArXFxuX19lKFwiK24rXCIpICtcXG4nXCIpLGwmJihhPSEwLGQrPVwiJztcXG5cIitsK1wiO1xcbl9fcCArPSAnXCIpLHImJihkKz1cIicgK1xcbigoX190ID0gKFwiK3IrXCIpKSA9PSBudWxsID8gJycgOiBfX3QpICtcXG4nXCIpLHU9cyt0Lmxlbmd0aCx0fSkpLGQrPVwiJztcXG5cIjt2YXIgZz1JZS5jYWxsKHQsXCJ2YXJpYWJsZVwiKSYmdC52YXJpYWJsZTtpZihnKXtpZihjZS50ZXN0KGcpKXRocm93IG5ldyBiZShcIkludmFsaWQgYHZhcmlhYmxlYCBvcHRpb24gcGFzc2VkIGludG8gYF8udGVtcGxhdGVgXCIpfWVsc2UgZD1cIndpdGggKG9iaikge1xcblwiK2QrXCJcXG59XFxuXCI7ZD0oYT9kLnJlcGxhY2UoTixcIlwiKTpkKS5yZXBsYWNlKEYsXCIkMVwiKS5yZXBsYWNlKFUsXCIkMTtcIiksZD1cImZ1bmN0aW9uKFwiKyhnfHxcIm9ialwiKStcIikge1xcblwiKyhnP1wiXCI6XCJvYmogfHwgKG9iaiA9IHt9KTtcXG5cIikrXCJ2YXIgX190LCBfX3AgPSAnJ1wiKyhpP1wiLCBfX2UgPSBfLmVzY2FwZVwiOlwiXCIpKyhhP1wiLCBfX2ogPSBBcnJheS5wcm90b3R5cGUuam9pbjtcXG5mdW5jdGlvbiBwcmludCgpIHsgX19wICs9IF9fai5jYWxsKGFyZ3VtZW50cywgJycpIH1cXG5cIjpcIjtcXG5cIikrZCtcInJldHVybiBfX3BcXG59XCI7dmFyIHY9cWwoKGZ1bmN0aW9uKCl7cmV0dXJuIHhlKHMsaCtcInJldHVybiBcIitkKS5hcHBseShvLGMpfSkpO2lmKHYuc291cmNlPWQsemEodikpdGhyb3cgdjtyZXR1cm4gdn0sQm4udGltZXM9ZnVuY3Rpb24oZSx0KXtpZigoZT11bChlKSk8MXx8ZT5mKXJldHVybltdO3ZhciBuPXAscj12bihlLHApO3Q9aWkodCksZS09cDtmb3IodmFyIG89R3Qocix0KTsrK248ZTspdChuKTtyZXR1cm4gb30sQm4udG9GaW5pdGU9Y2wsQm4udG9JbnRlZ2VyPXVsLEJuLnRvTGVuZ3RoPWZsLEJuLnRvTG93ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGhsKGUpLnRvTG93ZXJDYXNlKCl9LEJuLnRvTnVtYmVyPWRsLEJuLnRvU2FmZUludGVnZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGU/b3IodWwoZSksLTkwMDcxOTkyNTQ3NDA5OTEsZik6MD09PWU/ZTowfSxCbi50b1N0cmluZz1obCxCbi50b1VwcGVyPWZ1bmN0aW9uKGUpe3JldHVybiBobChlKS50b1VwcGVyQ2FzZSgpfSxCbi50cmltPWZ1bmN0aW9uKGUsdCxuKXtpZigoZT1obChlKSkmJihufHx0PT09bykpcmV0dXJuIHF0KGUpO2lmKCFlfHwhKHQ9aW8odCkpKXJldHVybiBlO3ZhciByPXVuKGUpLGk9dW4odCk7cmV0dXJuIENvKHIsSnQocixpKSxRdChyLGkpKzEpLmpvaW4oXCJcIil9LEJuLnRyaW1FbmQ9ZnVuY3Rpb24oZSx0LG4pe2lmKChlPWhsKGUpKSYmKG58fHQ9PT1vKSlyZXR1cm4gZS5zbGljZSgwLGZuKGUpKzEpO2lmKCFlfHwhKHQ9aW8odCkpKXJldHVybiBlO3ZhciByPXVuKGUpO3JldHVybiBDbyhyLDAsUXQocix1bih0KSkrMSkuam9pbihcIlwiKX0sQm4udHJpbVN0YXJ0PWZ1bmN0aW9uKGUsdCxuKXtpZigoZT1obChlKSkmJihufHx0PT09bykpcmV0dXJuIGUucmVwbGFjZShyZSxcIlwiKTtpZighZXx8ISh0PWlvKHQpKSlyZXR1cm4gZTt2YXIgcj11bihlKTtyZXR1cm4gQ28ocixKdChyLHVuKHQpKSkuam9pbihcIlwiKX0sQm4udHJ1bmNhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj0zMCxyPVwiLi4uXCI7aWYoS2EodCkpe3ZhciBpPVwic2VwYXJhdG9yXCJpbiB0P3Quc2VwYXJhdG9yOmk7bj1cImxlbmd0aFwiaW4gdD91bCh0Lmxlbmd0aCk6bixyPVwib21pc3Npb25cImluIHQ/aW8odC5vbWlzc2lvbik6cn12YXIgYT0oZT1obChlKSkubGVuZ3RoO2lmKHJuKGUpKXt2YXIgbD11bihlKTthPWwubGVuZ3RofWlmKG4+PWEpcmV0dXJuIGU7dmFyIHM9bi1jbihyKTtpZihzPDEpcmV0dXJuIHI7dmFyIGM9bD9DbyhsLDAscykuam9pbihcIlwiKTplLnNsaWNlKDAscyk7aWYoaT09PW8pcmV0dXJuIGMrcjtpZihsJiYocys9Yy5sZW5ndGgtcyksdGwoaSkpe2lmKGUuc2xpY2Uocykuc2VhcmNoKGkpKXt2YXIgdSxmPWM7Zm9yKGkuZ2xvYmFsfHwoaT1MZShpLnNvdXJjZSxobChkZS5leGVjKGkpKStcImdcIikpLGkubGFzdEluZGV4PTA7dT1pLmV4ZWMoZik7KXZhciBkPXUuaW5kZXg7Yz1jLnNsaWNlKDAsZD09PW8/czpkKX19ZWxzZSBpZihlLmluZGV4T2YoaW8oaSkscykhPXMpe3ZhciBwPWMubGFzdEluZGV4T2YoaSk7cD4tMSYmKGM9Yy5zbGljZSgwLHApKX1yZXR1cm4gYytyfSxCbi51bmVzY2FwZT1mdW5jdGlvbihlKXtyZXR1cm4oZT1obChlKSkmJkcudGVzdChlKT9lLnJlcGxhY2UoVyxkbik6ZX0sQm4udW5pcXVlSWQ9ZnVuY3Rpb24oZSl7dmFyIHQ9KytBZTtyZXR1cm4gaGwoZSkrdH0sQm4udXBwZXJDYXNlPVdsLEJuLnVwcGVyRmlyc3Q9emwsQm4uZWFjaD1oYSxCbi5lYWNoUmlnaHQ9Z2EsQm4uZmlyc3Q9TmkscnMoQm4sKHBzPXt9LG1yKEJuLChmdW5jdGlvbihlLHQpe0llLmNhbGwoQm4ucHJvdG90eXBlLHQpfHwocHNbdF09ZSl9KSkscHMpLHtjaGFpbjohMX0pLEJuLlZFUlNJT049XCI0LjE3LjIxXCIsTHQoW1wiYmluZFwiLFwiYmluZEtleVwiLFwiY3VycnlcIixcImN1cnJ5UmlnaHRcIixcInBhcnRpYWxcIixcInBhcnRpYWxSaWdodFwiXSwoZnVuY3Rpb24oZSl7Qm5bZV0ucGxhY2Vob2xkZXI9Qm59KSksTHQoW1wiZHJvcFwiLFwidGFrZVwiXSwoZnVuY3Rpb24oZSx0KXskbi5wcm90b3R5cGVbZV09ZnVuY3Rpb24obil7bj1uPT09bz8xOmduKHVsKG4pLDApO3ZhciByPXRoaXMuX19maWx0ZXJlZF9fJiYhdD9uZXcgJG4odGhpcyk6dGhpcy5jbG9uZSgpO3JldHVybiByLl9fZmlsdGVyZWRfXz9yLl9fdGFrZUNvdW50X189dm4obixyLl9fdGFrZUNvdW50X18pOnIuX192aWV3c19fLnB1c2goe3NpemU6dm4obixwKSx0eXBlOmUrKHIuX19kaXJfXzwwP1wiUmlnaHRcIjpcIlwiKX0pLHJ9LCRuLnByb3RvdHlwZVtlK1wiUmlnaHRcIl09ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpW2VdKHQpLnJldmVyc2UoKX19KSksTHQoW1wiZmlsdGVyXCIsXCJtYXBcIixcInRha2VXaGlsZVwiXSwoZnVuY3Rpb24oZSx0KXt2YXIgbj10KzEscj0xPT1ufHwzPT1uOyRuLnByb3RvdHlwZVtlXT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmNsb25lKCk7cmV0dXJuIHQuX19pdGVyYXRlZXNfXy5wdXNoKHtpdGVyYXRlZTppaShlLDMpLHR5cGU6bn0pLHQuX19maWx0ZXJlZF9fPXQuX19maWx0ZXJlZF9ffHxyLHR9fSkpLEx0KFtcImhlYWRcIixcImxhc3RcIl0sKGZ1bmN0aW9uKGUsdCl7dmFyIG49XCJ0YWtlXCIrKHQ/XCJSaWdodFwiOlwiXCIpOyRuLnByb3RvdHlwZVtlXT1mdW5jdGlvbigpe3JldHVybiB0aGlzW25dKDEpLnZhbHVlKClbMF19fSkpLEx0KFtcImluaXRpYWxcIixcInRhaWxcIl0sKGZ1bmN0aW9uKGUsdCl7dmFyIG49XCJkcm9wXCIrKHQ/XCJcIjpcIlJpZ2h0XCIpOyRuLnByb3RvdHlwZVtlXT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZmlsdGVyZWRfXz9uZXcgJG4odGhpcyk6dGhpc1tuXSgxKX19KSksJG4ucHJvdG90eXBlLmNvbXBhY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWx0ZXIoUWwpfSwkbi5wcm90b3R5cGUuZmluZD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5maWx0ZXIoZSkuaGVhZCgpfSwkbi5wcm90b3R5cGUuZmluZExhc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpLmZpbmQoZSl9LCRuLnByb3RvdHlwZS5pbnZva2VNYXA9enIoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZT9uZXcgJG4odGhpcyk6dGhpcy5tYXAoKGZ1bmN0aW9uKG4pe3JldHVybiBTcihuLGUsdCl9KSl9KSksJG4ucHJvdG90eXBlLnJlamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5maWx0ZXIoUmEoaWkoZSkpKX0sJG4ucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGUsdCl7ZT11bChlKTt2YXIgbj10aGlzO3JldHVybiBuLl9fZmlsdGVyZWRfXyYmKGU+MHx8dDwwKT9uZXcgJG4obik6KGU8MD9uPW4udGFrZVJpZ2h0KC1lKTplJiYobj1uLmRyb3AoZSkpLHQhPT1vJiYobj0odD11bCh0KSk8MD9uLmRyb3BSaWdodCgtdCk6bi50YWtlKHQtZSkpLG4pfSwkbi5wcm90b3R5cGUudGFrZVJpZ2h0V2hpbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpLnRha2VXaGlsZShlKS5yZXZlcnNlKCl9LCRuLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFrZShwKX0sbXIoJG4ucHJvdG90eXBlLChmdW5jdGlvbihlLHQpe3ZhciBuPS9eKD86ZmlsdGVyfGZpbmR8bWFwfHJlamVjdCl8V2hpbGUkLy50ZXN0KHQpLHI9L14oPzpoZWFkfGxhc3QpJC8udGVzdCh0KSxpPUJuW3I/XCJ0YWtlXCIrKFwibGFzdFwiPT10P1wiUmlnaHRcIjpcIlwiKTp0XSxhPXJ8fC9eZmluZC8udGVzdCh0KTtpJiYoQm4ucHJvdG90eXBlW3RdPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX3dyYXBwZWRfXyxsPXI/WzFdOmFyZ3VtZW50cyxzPXQgaW5zdGFuY2VvZiAkbixjPWxbMF0sdT1zfHxaYSh0KSxmPWZ1bmN0aW9uKGUpe3ZhciB0PWkuYXBwbHkoQm4sUHQoW2VdLGwpKTtyZXR1cm4gciYmZD90WzBdOnR9O3UmJm4mJlwiZnVuY3Rpb25cIj09dHlwZW9mIGMmJjEhPWMubGVuZ3RoJiYocz11PSExKTt2YXIgZD10aGlzLl9fY2hhaW5fXyxwPSEhdGhpcy5fX2FjdGlvbnNfXy5sZW5ndGgsaD1hJiYhZCxnPXMmJiFwO2lmKCFhJiZ1KXt0PWc/dDpuZXcgJG4odGhpcyk7dmFyIHY9ZS5hcHBseSh0LGwpO3JldHVybiB2Ll9fYWN0aW9uc19fLnB1c2goe2Z1bmM6Y2EsYXJnczpbZl0sdGhpc0FyZzpvfSksbmV3IFpuKHYsZCl9cmV0dXJuIGgmJmc/ZS5hcHBseSh0aGlzLGwpOih2PXRoaXMudGhydShmKSxoP3I/di52YWx1ZSgpWzBdOnYudmFsdWUoKTp2KX0pfSkpLEx0KFtcInBvcFwiLFwicHVzaFwiLFwic2hpZnRcIixcInNvcnRcIixcInNwbGljZVwiLFwidW5zaGlmdFwiXSwoZnVuY3Rpb24oZSl7dmFyIHQ9amVbZV0sbj0vXig/OnB1c2h8c29ydHx1bnNoaWZ0KSQvLnRlc3QoZSk/XCJ0YXBcIjpcInRocnVcIixyPS9eKD86cG9wfHNoaWZ0KSQvLnRlc3QoZSk7Qm4ucHJvdG90eXBlW2VdPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzO2lmKHImJiF0aGlzLl9fY2hhaW5fXyl7dmFyIG89dGhpcy52YWx1ZSgpO3JldHVybiB0LmFwcGx5KFphKG8pP286W10sZSl9cmV0dXJuIHRoaXNbbl0oKGZ1bmN0aW9uKG4pe3JldHVybiB0LmFwcGx5KFphKG4pP246W10sZSl9KSl9fSkpLG1yKCRuLnByb3RvdHlwZSwoZnVuY3Rpb24oZSx0KXt2YXIgbj1Cblt0XTtpZihuKXt2YXIgcj1uLm5hbWUrXCJcIjtJZS5jYWxsKGpuLHIpfHwoam5bcl09W10pLGpuW3JdLnB1c2goe25hbWU6dCxmdW5jOm59KX19KSksam5bQm8obywyKS5uYW1lXT1be25hbWU6XCJ3cmFwcGVyXCIsZnVuYzpvfV0sJG4ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGU9bmV3ICRuKHRoaXMuX193cmFwcGVkX18pO3JldHVybiBlLl9fYWN0aW9uc19fPUVvKHRoaXMuX19hY3Rpb25zX18pLGUuX19kaXJfXz10aGlzLl9fZGlyX18sZS5fX2ZpbHRlcmVkX189dGhpcy5fX2ZpbHRlcmVkX18sZS5fX2l0ZXJhdGVlc19fPUVvKHRoaXMuX19pdGVyYXRlZXNfXyksZS5fX3Rha2VDb3VudF9fPXRoaXMuX190YWtlQ291bnRfXyxlLl9fdmlld3NfXz1Fbyh0aGlzLl9fdmlld3NfXyksZX0sJG4ucHJvdG90eXBlLnJldmVyc2U9ZnVuY3Rpb24oKXtpZih0aGlzLl9fZmlsdGVyZWRfXyl7dmFyIGU9bmV3ICRuKHRoaXMpO2UuX19kaXJfXz0tMSxlLl9fZmlsdGVyZWRfXz0hMH1lbHNlKGU9dGhpcy5jbG9uZSgpKS5fX2Rpcl9fKj0tMTtyZXR1cm4gZX0sJG4ucHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fX3dyYXBwZWRfXy52YWx1ZSgpLHQ9dGhpcy5fX2Rpcl9fLG49WmEoZSkscj10PDAsbz1uP2UubGVuZ3RoOjAsaT1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPS0xLG89bi5sZW5ndGg7KytyPG87KXt2YXIgaT1uW3JdLGE9aS5zaXplO3N3aXRjaChpLnR5cGUpe2Nhc2VcImRyb3BcIjplKz1hO2JyZWFrO2Nhc2VcImRyb3BSaWdodFwiOnQtPWE7YnJlYWs7Y2FzZVwidGFrZVwiOnQ9dm4odCxlK2EpO2JyZWFrO2Nhc2VcInRha2VSaWdodFwiOmU9Z24oZSx0LWEpfX1yZXR1cm57c3RhcnQ6ZSxlbmQ6dH19KDAsbyx0aGlzLl9fdmlld3NfXyksYT1pLnN0YXJ0LGw9aS5lbmQscz1sLWEsYz1yP2w6YS0xLHU9dGhpcy5fX2l0ZXJhdGVlc19fLGY9dS5sZW5ndGgsZD0wLHA9dm4ocyx0aGlzLl9fdGFrZUNvdW50X18pO2lmKCFufHwhciYmbz09cyYmcD09cylyZXR1cm4gdW8oZSx0aGlzLl9fYWN0aW9uc19fKTt2YXIgaD1bXTtlOmZvcig7cy0tJiZkPHA7KXtmb3IodmFyIGc9LTEsdj1lW2MrPXRdOysrZzxmOyl7dmFyIG09dVtnXSxDPW0uaXRlcmF0ZWUseT1tLnR5cGUsdz1DKHYpO2lmKDI9PXkpdj13O2Vsc2UgaWYoIXcpe2lmKDE9PXkpY29udGludWUgZTticmVhayBlfX1oW2QrK109dn1yZXR1cm4gaH0sQm4ucHJvdG90eXBlLmF0PXVhLEJuLnByb3RvdHlwZS5jaGFpbj1mdW5jdGlvbigpe3JldHVybiBzYSh0aGlzKX0sQm4ucHJvdG90eXBlLmNvbW1pdD1mdW5jdGlvbigpe3JldHVybiBuZXcgWm4odGhpcy52YWx1ZSgpLHRoaXMuX19jaGFpbl9fKX0sQm4ucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXt0aGlzLl9fdmFsdWVzX189PT1vJiYodGhpcy5fX3ZhbHVlc19fPXNsKHRoaXMudmFsdWUoKSkpO3ZhciBlPXRoaXMuX19pbmRleF9fPj10aGlzLl9fdmFsdWVzX18ubGVuZ3RoO3JldHVybntkb25lOmUsdmFsdWU6ZT9vOnRoaXMuX192YWx1ZXNfX1t0aGlzLl9faW5kZXhfXysrXX19LEJuLnByb3RvdHlwZS5wbGFudD1mdW5jdGlvbihlKXtmb3IodmFyIHQsbj10aGlzO24gaW5zdGFuY2VvZiBEbjspe3ZhciByPVRpKG4pO3IuX19pbmRleF9fPTAsci5fX3ZhbHVlc19fPW8sdD9pLl9fd3JhcHBlZF9fPXI6dD1yO3ZhciBpPXI7bj1uLl9fd3JhcHBlZF9ffXJldHVybiBpLl9fd3JhcHBlZF9fPWUsdH0sQm4ucHJvdG90eXBlLnJldmVyc2U9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9fd3JhcHBlZF9fO2lmKGUgaW5zdGFuY2VvZiAkbil7dmFyIHQ9ZTtyZXR1cm4gdGhpcy5fX2FjdGlvbnNfXy5sZW5ndGgmJih0PW5ldyAkbih0aGlzKSksKHQ9dC5yZXZlcnNlKCkpLl9fYWN0aW9uc19fLnB1c2goe2Z1bmM6Y2EsYXJnczpbS2ldLHRoaXNBcmc6b30pLG5ldyBabih0LHRoaXMuX19jaGFpbl9fKX1yZXR1cm4gdGhpcy50aHJ1KEtpKX0sQm4ucHJvdG90eXBlLnRvSlNPTj1Cbi5wcm90b3R5cGUudmFsdWVPZj1Cbi5wcm90b3R5cGUudmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdW8odGhpcy5fX3dyYXBwZWRfXyx0aGlzLl9fYWN0aW9uc19fKX0sQm4ucHJvdG90eXBlLmZpcnN0PUJuLnByb3RvdHlwZS5oZWFkLFllJiYoQm4ucHJvdG90eXBlW1llXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksQm59KCk7ZnQuXz1wbiwocj1mdW5jdGlvbigpe3JldHVybiBwbn0uY2FsbCh0LG4sdCxlKSk9PT1vfHwoZS5leHBvcnRzPXIpfS5jYWxsKHRoaXMpfSwzMDA6KGUsdCxuKT0+e3ZhciByLG87ZT1uLm5tZChlKSxmdW5jdGlvbih0KXt0LnJ1bm5pbmdJbk5vZGVKUz1mdW5jdGlvbigpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiBwcm9jZXNzJiZcIm9iamVjdFwiPT10eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucyYmXCJzdHJpbmdcIj09dHlwZW9mIHByb2Nlc3MudmVyc2lvbnMubm9kZX0sdC5ydW5uaW5nSW5NYWluTm9kZUpTTW9kdWxlPWZ1bmN0aW9uKCl7cmV0dXJuIHQucnVubmluZ0luTm9kZUpTKCkmJm4uY1tuLnNdPT09ZX0sdC5jb21tb25KU0F2YWlsYWJsZT1mdW5jdGlvbigpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiBlLmV4cG9ydHN9LHQucnVubmluZ0luV2ViV29ya2VyPWZ1bmN0aW9uKCl7cmV0dXJuXCJ1bmRlZmluZWRcIj09dHlwZW9mIHdpbmRvdyYmXCJvYmplY3RcIj09dHlwZW9mIHNlbGYmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHNlbGYuYWRkRXZlbnRMaXN0ZW5lciYmXCJmdW5jdGlvblwiPT10eXBlb2Ygc2VsZi5jbG9zZX0sdC5ydW5uaW5nSW5Ob2RlQ2hpbGRQcm9jZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIHQucnVubmluZ0luTm9kZUpTKCkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHByb2Nlc3Muc2VuZH0sdC5ydW5uaW5nSW5OdWxsT3JpZ2luPWZ1bmN0aW9uKCl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdyYmXCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdy5sb2NhdGlvbiYmXCJvYmplY3RcIj09dHlwZW9mIGRvY3VtZW50JiZcImh0dHA6XCIhPT1kb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbCYmXCJodHRwczpcIiE9PWRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sfSx0LndlYldvcmtlcnNBdmFpbGFibGU9ZnVuY3Rpb24oKXtyZXR1cm4hKFwiZnVuY3Rpb25cIiE9dHlwZW9mIFdvcmtlcnx8dC5ydW5uaW5nSW5OdWxsT3JpZ2luKCl8fHQucnVubmluZ0luTm9kZUpTKCl8fG5hdmlnYXRvciYmbmF2aWdhdG9yLnVzZXJBZ2VudCYmbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKFwiQW5kcm9pZCA0LjNcIik+PTApfSx0LmxvZz1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PSExKSxcIm9iamVjdFwiPT10eXBlb2YgY29uc29sZSYmdCYmXCJvYmplY3RcIj09dHlwZW9mIGRvY3VtZW50JiYoZG9jdW1lbnQuYm9keS5pbm5lckhUTUwrPWUrXCI8YnIvPlwiKX0sdC5jcmVhdGVFcnJvck1lc3NhZ2U9ZnVuY3Rpb24oZSxuKXtpZih2b2lkIDA9PT1uJiYobj1cIlVuaGFuZGxlZCBleGNlcHRpb25cIiksbnVsbD09ZSlyZXR1cm4gbjtpZihuKz1cIjogXCIsXCJvYmplY3RcIj09dHlwZW9mIGUuY29udGVudCl7aWYodC5ydW5uaW5nSW5Ob2RlSlMoKSlyZXR1cm4gbitlLmNvbnRlbnQuc3RhY2s7dmFyIHI9SlNPTi5zdHJpbmdpZnkoZS5jb250ZW50KTtyZXR1cm5cInt9XCIhPT1yP24rcjpuK2UuY29udGVudH1yZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZS5jb250ZW50P24rZS5jb250ZW50Om4rZX0sdC5wcmludEV4Y2VwdGlvbkFuZFN0YWNrVHJhY2VUb0NvbnNvbGU9ZnVuY3Rpb24oZSxuKXt2b2lkIDA9PT1uJiYobj1cIlVuaGFuZGxlZCBleGNlcHRpb25cIiksdC5sb2codC5jcmVhdGVFcnJvck1lc3NhZ2UoZSxuKSl9LHQuZ2V0R2xvYmFsT2JqZWN0PWZ1bmN0aW9uKCl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIG4uZz9uLmc6XCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdz93aW5kb3c6XCJvYmplY3RcIj09dHlwZW9mIHNlbGY/c2VsZjp7fX0sdC50b1N0cmluZz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLHQuY29tbW9uSlNBdmFpbGFibGUoKSYmKGUuZXhwb3J0cz10KX0ob3x8KG89e30pKSxmdW5jdGlvbihlKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBVaW50OEFycmF5JiYwIT09bmV3IFVpbnQ4QXJyYXkoMSkuc3ViYXJyYXkoMSkuYnl0ZUxlbmd0aCl7dmFyIHQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU8dD90OmU+bj9uOmV9O2V8PTAsdHw9MCxhcmd1bWVudHMubGVuZ3RoPDEmJihlPTApLGFyZ3VtZW50cy5sZW5ndGg8MiYmKHQ9dGhpcy5sZW5ndGgpLGU8MCYmKGU9dGhpcy5sZW5ndGgrZSksdDwwJiYodD10aGlzLmxlbmd0aCt0KSxlPW4oZSwwLHRoaXMubGVuZ3RoKTt2YXIgcj0odD1uKHQsMCx0aGlzLmxlbmd0aCkpLWU7cmV0dXJuIHI8MCYmKHI9MCksbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5idWZmZXIsdGhpcy5ieXRlT2Zmc2V0K2UqdGhpcy5CWVRFU19QRVJfRUxFTUVOVCxyKX0sbj1bXCJJbnQ4QXJyYXlcIixcIlVpbnQ4QXJyYXlcIixcIlVpbnQ4Q2xhbXBlZEFycmF5XCIsXCJJbnQxNkFycmF5XCIsXCJVaW50MTZBcnJheVwiLFwiSW50MzJBcnJheVwiLFwiVWludDMyQXJyYXlcIixcIkZsb2F0MzJBcnJheVwiLFwiRmxvYXQ2NEFycmF5XCJdLHI9dm9pZCAwO2lmKFwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3c/cj13aW5kb3c6XCJvYmplY3RcIj09dHlwZW9mIHNlbGYmJihyPXNlbGYpLHZvaWQgMCE9PXIpZm9yKHZhciBvPTA7bzxuLmxlbmd0aDtvKyspcltuW29dXSYmKHJbbltvXV0ucHJvdG90eXBlLnN1YmFycmF5PXQpfX0ocnx8KHI9e30pKSxmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuY29tcHJlc3NBc3luYz1mdW5jdGlvbih0LG4scil7dmFyIG89bmV3IGUuVGltZXIsaT1uZXcgZS5Db21wcmVzc29yO2lmKCFyKXRocm93IG5ldyBUeXBlRXJyb3IoXCJjb21wcmVzc0FzeW5jOiBObyBjYWxsYmFjayBhcmd1bWVudCBnaXZlblwiKTtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl0PWUuZW5jb2RlVVRGOCh0KTtlbHNlIGlmKG51bGw9PXR8fCEodCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKXJldHVybiB2b2lkIHIodm9pZCAwLG5ldyBUeXBlRXJyb3IoXCJjb21wcmVzc0FzeW5jOiBJbnZhbGlkIGlucHV0IGFyZ3VtZW50LCBvbmx5ICdzdHJpbmcnIGFuZCAnVWludDhBcnJheScgYXJlIHN1cHBvcnRlZFwiKSk7dmFyIGE9ZS5BcnJheVRvb2xzLnNwbGl0Qnl0ZUFycmF5KHQsbi5ibG9ja1NpemUpLGw9W10scz1mdW5jdGlvbih0KXtpZih0PGEubGVuZ3RoKXt2YXIgYz12b2lkIDA7dHJ5e2M9aS5jb21wcmVzc0Jsb2NrKGFbdF0pfWNhdGNoKGUpe3JldHVybiB2b2lkIHIodm9pZCAwLGUpfWwucHVzaChjKSxvLmdldEVsYXBzZWRUaW1lKCk8PTIwP3ModCsxKTooZS5lbnF1ZXVlSW1tZWRpYXRlKChmdW5jdGlvbigpe3JldHVybiBzKHQrMSl9KSksby5yZXN0YXJ0KCkpfWVsc2V7dmFyIHU9ZS5BcnJheVRvb2xzLmNvbmNhdFVpbnQ4QXJyYXlzKGwpO2UuZW5xdWV1ZUltbWVkaWF0ZSgoZnVuY3Rpb24oKXt2YXIgdDt0cnl7dD1lLkNvbXByZXNzaW9uQ29tbW9uLmVuY29kZUNvbXByZXNzZWRCeXRlcyh1LG4ub3V0cHV0RW5jb2RpbmcpfWNhdGNoKGUpe3JldHVybiB2b2lkIHIodm9pZCAwLGUpfWUuZW5xdWV1ZUltbWVkaWF0ZSgoZnVuY3Rpb24oKXtyZXR1cm4gcih0KX0pKX0pKX19O2UuZW5xdWV1ZUltbWVkaWF0ZSgoZnVuY3Rpb24oKXtyZXR1cm4gcygwKX0pKX0sdC5jcmVhdGVDb21wcmVzc2lvblN0cmVhbT1mdW5jdGlvbigpe3ZhciB0PW5ldyBlLkNvbXByZXNzb3Iscj1uZXcobig5OSkuVHJhbnNmb3JtKSh7ZGVjb2RlU3RyaW5nczohMCxoaWdoV2F0ZXJNYXJrOjY1NTM2fSk7cmV0dXJuIHIuX3RyYW5zZm9ybT1mdW5jdGlvbihuLG8saSl7dmFyIGE7dHJ5e2E9ZS5CdWZmZXJUb29scy51aW50OEFycmF5VG9CdWZmZXIodC5jb21wcmVzc0Jsb2NrKGUuQnVmZmVyVG9vbHMuYnVmZmVyVG9VaW50OEFycmF5KG4pKSl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgci5lbWl0KFwiZXJyb3JcIixlKX1yLnB1c2goYSksaSgpfSxyfSx0fSgpO2UuQXN5bmNDb21wcmVzc29yPXR9KG98fChvPXt9KSksZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LmRlY29tcHJlc3NBc3luYz1mdW5jdGlvbih0LG4scil7aWYoIXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcImRlY29tcHJlc3NBc3luYzogTm8gY2FsbGJhY2sgYXJndW1lbnQgZ2l2ZW5cIik7dmFyIG89bmV3IGUuVGltZXI7dHJ5e3Q9ZS5Db21wcmVzc2lvbkNvbW1vbi5kZWNvZGVDb21wcmVzc2VkQnl0ZXModCxuLmlucHV0RW5jb2RpbmcpfWNhdGNoKGUpe3JldHVybiB2b2lkIHIodm9pZCAwLGUpfXZhciBpPW5ldyBlLkRlY29tcHJlc3NvcixhPWUuQXJyYXlUb29scy5zcGxpdEJ5dGVBcnJheSh0LG4uYmxvY2tTaXplKSxsPVtdLHM9ZnVuY3Rpb24odCl7aWYodDxhLmxlbmd0aCl7dmFyIGM9dm9pZCAwO3RyeXtjPWkuZGVjb21wcmVzc0Jsb2NrKGFbdF0pfWNhdGNoKGUpe3JldHVybiB2b2lkIHIodm9pZCAwLGUpfWwucHVzaChjKSxvLmdldEVsYXBzZWRUaW1lKCk8PTIwP3ModCsxKTooZS5lbnF1ZXVlSW1tZWRpYXRlKChmdW5jdGlvbigpe3JldHVybiBzKHQrMSl9KSksby5yZXN0YXJ0KCkpfWVsc2V7dmFyIHU9ZS5BcnJheVRvb2xzLmNvbmNhdFVpbnQ4QXJyYXlzKGwpO2UuZW5xdWV1ZUltbWVkaWF0ZSgoZnVuY3Rpb24oKXt2YXIgdDt0cnl7dD1lLkNvbXByZXNzaW9uQ29tbW9uLmVuY29kZURlY29tcHJlc3NlZEJ5dGVzKHUsbi5vdXRwdXRFbmNvZGluZyl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcih2b2lkIDAsZSl9ZS5lbnF1ZXVlSW1tZWRpYXRlKChmdW5jdGlvbigpe3JldHVybiByKHQpfSkpfSkpfX07ZS5lbnF1ZXVlSW1tZWRpYXRlKChmdW5jdGlvbigpe3JldHVybiBzKDApfSkpfSx0LmNyZWF0ZURlY29tcHJlc3Npb25TdHJlYW09ZnVuY3Rpb24oKXt2YXIgdD1uZXcgZS5EZWNvbXByZXNzb3Iscj1uZXcobig5OSkuVHJhbnNmb3JtKSh7ZGVjb2RlU3RyaW5nczohMCxoaWdoV2F0ZXJNYXJrOjY1NTM2fSk7cmV0dXJuIHIuX3RyYW5zZm9ybT1mdW5jdGlvbihuLG8saSl7dmFyIGE7dHJ5e2E9ZS5CdWZmZXJUb29scy51aW50OEFycmF5VG9CdWZmZXIodC5kZWNvbXByZXNzQmxvY2soZS5CdWZmZXJUb29scy5idWZmZXJUb1VpbnQ4QXJyYXkobikpKX1jYXRjaChlKXtyZXR1cm4gdm9pZCByLmVtaXQoXCJlcnJvclwiLGUpfXIucHVzaChhKSxpKCl9LHJ9LHR9KCk7ZS5Bc3luY0RlY29tcHJlc3Nvcj10fShvfHwobz17fSkpLGZ1bmN0aW9uKGUpe3ZhciB0OyFmdW5jdGlvbih0KXt0LmNvbXByZXNzQXN5bmM9ZnVuY3Rpb24oZSxuLHIpe2lmKFwiQnl0ZUFycmF5XCIhPW4uaW5wdXRFbmNvZGluZ3x8ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpe3ZhciBvPXt0b2tlbjpNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKCksdHlwZTpcImNvbXByZXNzXCIsZGF0YTplLGlucHV0RW5jb2Rpbmc6bi5pbnB1dEVuY29kaW5nLG91dHB1dEVuY29kaW5nOm4ub3V0cHV0RW5jb2Rpbmd9LGk9ZnVuY3Rpb24oZSl7dmFyIG49ZS5kYXRhO24mJm4udG9rZW49PW8udG9rZW4mJih0Lmdsb2JhbFdvcmtlci5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLGkpLFwiZXJyb3JcIj09bi50eXBlP3Iodm9pZCAwLG5ldyBFcnJvcihuLmVycm9yKSk6cihuLmRhdGEpKX07dC5nbG9iYWxXb3JrZXIuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIixpKSx0Lmdsb2JhbFdvcmtlci5wb3N0TWVzc2FnZShvLFtdKX1lbHNlIHIodm9pZCAwLG5ldyBUeXBlRXJyb3IoXCJjb21wcmVzc0FzeW5jOiBpbnB1dCBpcyBub3QgYSBVaW50OEFycmF5XCIpKX0sdC5kZWNvbXByZXNzQXN5bmM9ZnVuY3Rpb24oZSxuLHIpe3ZhciBvPXt0b2tlbjpNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKCksdHlwZTpcImRlY29tcHJlc3NcIixkYXRhOmUsaW5wdXRFbmNvZGluZzpuLmlucHV0RW5jb2Rpbmcsb3V0cHV0RW5jb2Rpbmc6bi5vdXRwdXRFbmNvZGluZ30saT1mdW5jdGlvbihlKXt2YXIgbj1lLmRhdGE7biYmbi50b2tlbj09by50b2tlbiYmKHQuZ2xvYmFsV29ya2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsaSksXCJlcnJvclwiPT1uLnR5cGU/cih2b2lkIDAsbmV3IEVycm9yKG4uZXJyb3IpKTpyKG4uZGF0YSkpfTt0Lmdsb2JhbFdvcmtlci5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLGkpLHQuZ2xvYmFsV29ya2VyLnBvc3RNZXNzYWdlKG8sW10pfSx0Lmluc3RhbGxXZWJXb3JrZXJJZk5lZWRlZD1mdW5jdGlvbigpe1wib2JqZWN0XCI9PXR5cGVvZiBzZWxmJiZ2b2lkIDA9PT1zZWxmLmRvY3VtZW50JiZudWxsIT1zZWxmLmFkZEV2ZW50TGlzdGVuZXImJihzZWxmLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsKGZ1bmN0aW9uKHQpe3ZhciBuPXQuZGF0YTtpZihcImNvbXByZXNzXCI9PW4udHlwZSl7dmFyIHI9dm9pZCAwO3RyeXtyPWUuY29tcHJlc3Mobi5kYXRhLHtvdXRwdXRFbmNvZGluZzpuLm91dHB1dEVuY29kaW5nfSl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgc2VsZi5wb3N0TWVzc2FnZSh7dG9rZW46bi50b2tlbix0eXBlOlwiZXJyb3JcIixlcnJvcjplLmNyZWF0ZUVycm9yTWVzc2FnZSh0KX0sW10pfShvPXt0b2tlbjpuLnRva2VuLHR5cGU6XCJjb21wcmVzc2lvblJlc3VsdFwiLGRhdGE6cixlbmNvZGluZzpuLm91dHB1dEVuY29kaW5nfSkuZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJi0xPT09bmF2aWdhdG9yLmFwcFZlcnNpb24uaW5kZXhPZihcIk1TSUUgMTBcIik/c2VsZi5wb3N0TWVzc2FnZShvLFtvLmRhdGEuYnVmZmVyXSk6c2VsZi5wb3N0TWVzc2FnZShvLFtdKX1lbHNlIGlmKFwiZGVjb21wcmVzc1wiPT1uLnR5cGUpe3ZhciBvLGk9dm9pZCAwO3RyeXtpPWUuZGVjb21wcmVzcyhuLmRhdGEse2lucHV0RW5jb2Rpbmc6bi5pbnB1dEVuY29kaW5nLG91dHB1dEVuY29kaW5nOm4ub3V0cHV0RW5jb2Rpbmd9KX1jYXRjaCh0KXtyZXR1cm4gdm9pZCBzZWxmLnBvc3RNZXNzYWdlKHt0b2tlbjpuLnRva2VuLHR5cGU6XCJlcnJvclwiLGVycm9yOmUuY3JlYXRlRXJyb3JNZXNzYWdlKHQpfSxbXSl9KG89e3Rva2VuOm4udG9rZW4sdHlwZTpcImRlY29tcHJlc3Npb25SZXN1bHRcIixkYXRhOmksZW5jb2Rpbmc6bi5vdXRwdXRFbmNvZGluZ30pLmRhdGEgaW5zdGFuY2VvZiBVaW50OEFycmF5JiYtMT09PW5hdmlnYXRvci5hcHBWZXJzaW9uLmluZGV4T2YoXCJNU0lFIDEwXCIpP3NlbGYucG9zdE1lc3NhZ2Uobyxbby5kYXRhLmJ1ZmZlcl0pOnNlbGYucG9zdE1lc3NhZ2UobyxbXSl9fSkpLHNlbGYuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsKGZ1bmN0aW9uKHQpe2UubG9nKGUuY3JlYXRlRXJyb3JNZXNzYWdlKHQuZXJyb3IsXCJVbmV4cGVjdGVkIExaVVRGOCBXZWJXb3JrZXIgZXhjZXB0aW9uXCIpKX0pKSl9LHQuY3JlYXRlR2xvYmFsV29ya2VySWZOZWVkZWQ9ZnVuY3Rpb24oKXtpZih0Lmdsb2JhbFdvcmtlcilyZXR1cm4hMDtpZighZS53ZWJXb3JrZXJzQXZhaWxhYmxlKCkpcmV0dXJuITE7aWYoIXQuc2NyaXB0VVJJJiZcIm9iamVjdFwiPT10eXBlb2YgZG9jdW1lbnQpe3ZhciBuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibHp1dGY4XCIpO251bGwhPW4mJih0LnNjcmlwdFVSST1uLmdldEF0dHJpYnV0ZShcInNyY1wiKXx8dm9pZCAwKX1yZXR1cm4hIXQuc2NyaXB0VVJJJiYodC5nbG9iYWxXb3JrZXI9bmV3IFdvcmtlcih0LnNjcmlwdFVSSSksITApfSx0LnRlcm1pbmF0ZT1mdW5jdGlvbigpe3QuZ2xvYmFsV29ya2VyJiYodC5nbG9iYWxXb3JrZXIudGVybWluYXRlKCksdC5nbG9iYWxXb3JrZXI9dm9pZCAwKX19KHQ9ZS5XZWJXb3JrZXJ8fChlLldlYldvcmtlcj17fSkpLHQuaW5zdGFsbFdlYldvcmtlcklmTmVlZGVkKCl9KG98fChvPXt9KSksZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLmNvbnRhaW5lcj1lLHRoaXMuc3RhcnRQb3NpdGlvbj10LHRoaXMubGVuZ3RoPW59cmV0dXJuIGUucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jb250YWluZXJbdGhpcy5zdGFydFBvc2l0aW9uK2VdfSxlLnByb3RvdHlwZS5nZXRJblJldmVyc2VkT3JkZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY29udGFpbmVyW3RoaXMuc3RhcnRQb3NpdGlvbit0aGlzLmxlbmd0aC0xLWVdfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt0aGlzLmNvbnRhaW5lclt0aGlzLnN0YXJ0UG9zaXRpb24rZV09dH0sZX0oKTtlLkFycmF5U2VnbWVudD10fShvfHwobz17fSkpLGZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlKXtlLmNvcHlFbGVtZW50cz1mdW5jdGlvbihlLHQsbixyLG8pe2Zvcig7by0tOyluW3IrK109ZVt0KytdfSxlLnplcm9FbGVtZW50cz1mdW5jdGlvbihlLHQsbil7Zm9yKDtuLS07KWVbdCsrXT0wfSxlLmNvdW50Tm9uemVyb1ZhbHVlc0luQXJyYXk9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsbj0wO248ZS5sZW5ndGg7bisrKWVbbl0mJnQrKztyZXR1cm4gdH0sZS50cnVuY2F0ZVN0YXJ0aW5nRWxlbWVudHM9ZnVuY3Rpb24oZSx0KXtpZihlLmxlbmd0aDw9dCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInRydW5jYXRlU3RhcnRpbmdFbGVtZW50czogUmVxdWVzdGVkIGxlbmd0aCBzaG91bGQgYmUgc21hbGxlciB0aGFuIGFycmF5IGxlbmd0aFwiKTtmb3IodmFyIG49ZS5sZW5ndGgtdCxyPTA7cjx0O3IrKyllW3JdPWVbbityXTtlLmxlbmd0aD10fSxlLmRvdWJsZUJ5dGVBcnJheUNhcGFjaXR5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBVaW50OEFycmF5KDIqZS5sZW5ndGgpO3JldHVybiB0LnNldChlKSx0fSxlLmNvbmNhdFVpbnQ4QXJyYXlzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49MCxyPWU7bjxyLmxlbmd0aDtuKyspdCs9KHM9cltuXSkubGVuZ3RoO2Zvcih2YXIgbz1uZXcgVWludDhBcnJheSh0KSxpPTAsYT0wLGw9ZTthPGwubGVuZ3RoO2ErKyl7dmFyIHM9bFthXTtvLnNldChzLGkpLGkrPXMubGVuZ3RofXJldHVybiBvfSxlLnNwbGl0Qnl0ZUFycmF5PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVtdLHI9MDtyPGUubGVuZ3RoOyl7dmFyIG89TWF0aC5taW4odCxlLmxlbmd0aC1yKTtuLnB1c2goZS5zdWJhcnJheShyLHIrbykpLHIrPW99cmV0dXJuIG59fShlLkFycmF5VG9vbHN8fChlLkFycmF5VG9vbHM9e30pKX0ob3x8KG89e30pKSxmdW5jdGlvbihlKXshZnVuY3Rpb24oZSl7ZS5jb252ZXJ0VG9VaW50OEFycmF5SWZOZWVkZWQ9ZnVuY3Rpb24odCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgQnVmZmVyJiZCdWZmZXIuaXNCdWZmZXIodCk/ZS5idWZmZXJUb1VpbnQ4QXJyYXkodCk6dH0sZS51aW50OEFycmF5VG9CdWZmZXI9ZnVuY3Rpb24oZSl7aWYoQnVmZmVyLnByb3RvdHlwZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpe3ZhciB0PW5ldyBVaW50OEFycmF5KGUuYnVmZmVyLGUuYnl0ZU9mZnNldCxlLmJ5dGVMZW5ndGgpO3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YodCxCdWZmZXIucHJvdG90eXBlKSx0fWZvcih2YXIgbj1lLmxlbmd0aCxyPW5ldyBCdWZmZXIobiksbz0wO288bjtvKyspcltvXT1lW29dO3JldHVybiByfSxlLmJ1ZmZlclRvVWludDhBcnJheT1mdW5jdGlvbihlKXtpZihCdWZmZXIucHJvdG90eXBlIGluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIsZS5ieXRlT2Zmc2V0LGUuYnl0ZUxlbmd0aCk7Zm9yKHZhciB0PWUubGVuZ3RoLG49bmV3IFVpbnQ4QXJyYXkodCkscj0wO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufX0oZS5CdWZmZXJUb29sc3x8KGUuQnVmZmVyVG9vbHM9e30pKX0ob3x8KG89e30pKSxmdW5jdGlvbihlKXshZnVuY3Rpb24odCl7dC5nZXRDcm9wcGVkQnVmZmVyPWZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPTApO3ZhciBvPW5ldyBVaW50OEFycmF5KG4rcik7cmV0dXJuIG8uc2V0KGUuc3ViYXJyYXkodCx0K24pKSxvfSx0LmdldENyb3BwZWRBbmRBcHBlbmRlZEJ5dGVBcnJheT1mdW5jdGlvbih0LG4scixvKXtyZXR1cm4gZS5BcnJheVRvb2xzLmNvbmNhdFVpbnQ4QXJyYXlzKFt0LnN1YmFycmF5KG4sbityKSxvXSl9LHQuZGV0ZWN0Q29tcHJlc3Npb25Tb3VyY2VFbmNvZGluZz1mdW5jdGlvbihlKXtpZihudWxsPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJkZXRlY3RDb21wcmVzc2lvblNvdXJjZUVuY29kaW5nOiBpbnB1dCBpcyBudWxsIG9yIHVuZGVmaW5lZFwiKTtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm5cIlN0cmluZ1wiO2lmKGUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBCdWZmZXImJkJ1ZmZlci5pc0J1ZmZlcihlKSlyZXR1cm5cIkJ5dGVBcnJheVwiO3Rocm93IG5ldyBUeXBlRXJyb3IoXCJkZXRlY3RDb21wcmVzc2lvblNvdXJjZUVuY29kaW5nOiBpbnB1dCBtdXN0IGJlIG9mIHR5cGUgJ3N0cmluZycsICdVaW50OEFycmF5JyBvciAnQnVmZmVyJ1wiKX0sdC5lbmNvZGVDb21wcmVzc2VkQnl0ZXM9ZnVuY3Rpb24odCxuKXtzd2l0Y2gobil7Y2FzZVwiQnl0ZUFycmF5XCI6cmV0dXJuIHQ7Y2FzZVwiQnVmZmVyXCI6cmV0dXJuIGUuQnVmZmVyVG9vbHMudWludDhBcnJheVRvQnVmZmVyKHQpO2Nhc2VcIkJhc2U2NFwiOnJldHVybiBlLmVuY29kZUJhc2U2NCh0KTtjYXNlXCJCaW5hcnlTdHJpbmdcIjpyZXR1cm4gZS5lbmNvZGVCaW5hcnlTdHJpbmcodCk7Y2FzZVwiU3RvcmFnZUJpbmFyeVN0cmluZ1wiOnJldHVybiBlLmVuY29kZVN0b3JhZ2VCaW5hcnlTdHJpbmcodCk7ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKFwiZW5jb2RlQ29tcHJlc3NlZEJ5dGVzOiBpbnZhbGlkIG91dHB1dCBlbmNvZGluZyByZXF1ZXN0ZWRcIil9fSx0LmRlY29kZUNvbXByZXNzZWRCeXRlcz1mdW5jdGlvbih0LG4pe2lmKG51bGw9PW4pdGhyb3cgbmV3IFR5cGVFcnJvcihcImRlY29kZUNvbXByZXNzZWREYXRhOiBJbnB1dCBpcyBudWxsIG9yIHVuZGVmaW5lZFwiKTtzd2l0Y2gobil7Y2FzZVwiQnl0ZUFycmF5XCI6Y2FzZVwiQnVmZmVyXCI6dmFyIHI9ZS5CdWZmZXJUb29scy5jb252ZXJ0VG9VaW50OEFycmF5SWZOZWVkZWQodCk7aWYoIShyIGluc3RhbmNlb2YgVWludDhBcnJheSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcImRlY29kZUNvbXByZXNzZWREYXRhOiAnQnl0ZUFycmF5JyBvciAnQnVmZmVyJyBpbnB1dCB0eXBlIHdhcyBzcGVjaWZpZWQgYnV0IGlucHV0IGlzIG5vdCBhIFVpbnQ4QXJyYXkgb3IgQnVmZmVyXCIpO3JldHVybiByO2Nhc2VcIkJhc2U2NFwiOmlmKFwic3RyaW5nXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJkZWNvZGVDb21wcmVzc2VkRGF0YTogJ0Jhc2U2NCcgaW5wdXQgdHlwZSB3YXMgc3BlY2lmaWVkIGJ1dCBpbnB1dCBpcyBub3QgYSBzdHJpbmdcIik7cmV0dXJuIGUuZGVjb2RlQmFzZTY0KHQpO2Nhc2VcIkJpbmFyeVN0cmluZ1wiOmlmKFwic3RyaW5nXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJkZWNvZGVDb21wcmVzc2VkRGF0YTogJ0JpbmFyeVN0cmluZycgaW5wdXQgdHlwZSB3YXMgc3BlY2lmaWVkIGJ1dCBpbnB1dCBpcyBub3QgYSBzdHJpbmdcIik7cmV0dXJuIGUuZGVjb2RlQmluYXJ5U3RyaW5nKHQpO2Nhc2VcIlN0b3JhZ2VCaW5hcnlTdHJpbmdcIjppZihcInN0cmluZ1wiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiZGVjb2RlQ29tcHJlc3NlZERhdGE6ICdTdG9yYWdlQmluYXJ5U3RyaW5nJyBpbnB1dCB0eXBlIHdhcyBzcGVjaWZpZWQgYnV0IGlucHV0IGlzIG5vdCBhIHN0cmluZ1wiKTtyZXR1cm4gZS5kZWNvZGVTdG9yYWdlQmluYXJ5U3RyaW5nKHQpO2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcihcImRlY29kZUNvbXByZXNzZWREYXRhOiBpbnZhbGlkIGlucHV0IGVuY29kaW5nIHJlcXVlc3RlZDogJ1wiLmNvbmNhdChuLFwiJ1wiKSl9fSx0LmVuY29kZURlY29tcHJlc3NlZEJ5dGVzPWZ1bmN0aW9uKHQsbil7c3dpdGNoKG4pe2Nhc2VcIlN0cmluZ1wiOnJldHVybiBlLmRlY29kZVVURjgodCk7Y2FzZVwiQnl0ZUFycmF5XCI6cmV0dXJuIHQ7Y2FzZVwiQnVmZmVyXCI6aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgQnVmZmVyKXRocm93IG5ldyBUeXBlRXJyb3IoXCJlbmNvZGVEZWNvbXByZXNzZWRCeXRlczogYSAnQnVmZmVyJyB0eXBlIHdhcyBzcGVjaWZpZWQgYnV0IGlzIG5vdCBzdXBwb3J0ZWQgYXQgdGhlIGN1cnJlbnQgZW52aXJubWVudFwiKTtyZXR1cm4gZS5CdWZmZXJUb29scy51aW50OEFycmF5VG9CdWZmZXIodCk7ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKFwiZW5jb2RlRGVjb21wcmVzc2VkQnl0ZXM6IGludmFsaWQgb3V0cHV0IGVuY29kaW5nIHJlcXVlc3RlZFwiKX19fShlLkNvbXByZXNzaW9uQ29tbW9ufHwoZS5Db21wcmVzc2lvbkNvbW1vbj17fSkpfShvfHwobz17fSkpLGZ1bmN0aW9uKGUpe3ZhciB0OyFmdW5jdGlvbih0KXt2YXIgbixyPVtdO3QuZW5xdWV1ZUltbWVkaWF0ZT1mdW5jdGlvbihlKXtyLnB1c2goZSksMT09PXIubGVuZ3RoJiZuKCl9LHQuaW5pdGlhbGl6ZVNjaGVkdWxlcj1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsbj1yO3Q8bi5sZW5ndGg7dCsrKXt2YXIgbz1uW3RdO3RyeXtvLmNhbGwodm9pZCAwKX1jYXRjaCh0KXtlLnByaW50RXhjZXB0aW9uQW5kU3RhY2tUcmFjZVRvQ29uc29sZSh0LFwiZW5xdWV1ZUltbWVkaWF0ZSBleGNlcHRpb25cIil9fXIubGVuZ3RoPTB9O2lmKGUucnVubmluZ0luTm9kZUpTKCkpbj1mdW5jdGlvbigpe3JldHVybiBzZXRJbW1lZGlhdGUoKGZ1bmN0aW9uKCl7cmV0dXJuIHQoKX0pKX07ZWxzZSBpZihcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciYmXCJmdW5jdGlvblwiPT10eXBlb2Ygd2luZG93LnBvc3RNZXNzYWdlKXt2YXIgbyxpPVwiZW5xdWV1ZUltbWVkaWF0ZS1cIitNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKCk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsKGZ1bmN0aW9uKGUpe2UuZGF0YT09PWkmJnQoKX0pKSxvPWUucnVubmluZ0luTnVsbE9yaWdpbigpP1wiKlwiOndpbmRvdy5sb2NhdGlvbi5ocmVmLG49ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnBvc3RNZXNzYWdlKGksbyl9fWVsc2UgaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgTWVzc2FnZUNoYW5uZWwmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE1lc3NhZ2VQb3J0KXt2YXIgYT1uZXcgTWVzc2FnZUNoYW5uZWw7YS5wb3J0MS5vbm1lc3NhZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdCgpfSxuPWZ1bmN0aW9uKCl7cmV0dXJuIGEucG9ydDIucG9zdE1lc3NhZ2UoMCl9fWVsc2Ugbj1mdW5jdGlvbigpe3JldHVybiBzZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiB0KCl9KSwwKX19LHQuaW5pdGlhbGl6ZVNjaGVkdWxlcigpfSh0PWUuRXZlbnRMb29wfHwoZS5FdmVudExvb3A9e30pKSxlLmVucXVldWVJbW1lZGlhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZW5xdWV1ZUltbWVkaWF0ZShlKX19KG98fChvPXt9KSksZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUpe2Uub3ZlcnJpZGU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5leHRlbmQodCxuKX0sZS5leHRlbmQ9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJvYmogaXMgbnVsbCBvciB1bmRlZmluZWRcIik7aWYoXCJvYmplY3RcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIm9iaiBpcyBub3QgYW4gb2JqZWN0XCIpO2lmKG51bGw9PXQmJih0PXt9KSxcIm9iamVjdFwiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwibmV3UHJvcGVydGllcyBpcyBub3QgYW4gb2JqZWN0XCIpO2lmKG51bGwhPXQpZm9yKHZhciBuIGluIHQpZVtuXT10W25dO3JldHVybiBlfX0oZS5PYmplY3RUb29sc3x8KGUuT2JqZWN0VG9vbHM9e30pKX0ob3x8KG89e30pKSxmdW5jdGlvbihlKXtlLmdldFJhbmRvbUludGVnZXJJblJhbmdlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKih0LWUpKX0sZS5nZXRSYW5kb21VVEYxNlN0cmluZ09mTGVuZ3RoPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbj1cIlwiLHI9MDtyPHQ7cisrKXt2YXIgbz12b2lkIDA7ZG97bz1lLmdldFJhbmRvbUludGVnZXJJblJhbmdlKDAsMTExNDExMil9d2hpbGUobz49NTUyOTYmJm88PTU3MzQzKTtuKz1lLkVuY29kaW5nLkNvZGVQb2ludC5kZWNvZGVUb1N0cmluZyhvKX1yZXR1cm4gbn19KG98fChvPXt9KSksZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZvaWQgMD09PWUmJihlPTEwMjQpLHRoaXMub3V0cHV0QnVmZmVyQ2FwYWNpdHk9ZSx0aGlzLm91dHB1dFBvc2l0aW9uPTAsdGhpcy5vdXRwdXRTdHJpbmc9XCJcIix0aGlzLm91dHB1dEJ1ZmZlcj1uZXcgVWludDE2QXJyYXkodGhpcy5vdXRwdXRCdWZmZXJDYXBhY2l0eSl9cmV0dXJuIGUucHJvdG90eXBlLmFwcGVuZENoYXJDb2RlPWZ1bmN0aW9uKGUpe3RoaXMub3V0cHV0QnVmZmVyW3RoaXMub3V0cHV0UG9zaXRpb24rK109ZSx0aGlzLm91dHB1dFBvc2l0aW9uPT09dGhpcy5vdXRwdXRCdWZmZXJDYXBhY2l0eSYmdGhpcy5mbHVzaEJ1ZmZlclRvT3V0cHV0U3RyaW5nKCl9LGUucHJvdG90eXBlLmFwcGVuZENoYXJDb2Rlcz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxuPWUubGVuZ3RoO3Q8bjt0KyspdGhpcy5hcHBlbmRDaGFyQ29kZShlW3RdKX0sZS5wcm90b3R5cGUuYXBwZW5kU3RyaW5nPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49ZS5sZW5ndGg7dDxuO3QrKyl0aGlzLmFwcGVuZENoYXJDb2RlKGUuY2hhckNvZGVBdCh0KSl9LGUucHJvdG90eXBlLmFwcGVuZENvZGVQb2ludD1mdW5jdGlvbihlKXtpZihlPD02NTUzNSl0aGlzLmFwcGVuZENoYXJDb2RlKGUpO2Vsc2V7aWYoIShlPD0xMTE0MTExKSl0aHJvdyBuZXcgRXJyb3IoXCJhcHBlbmRDb2RlUG9pbnQ6IEEgY29kZSBwb2ludCBvZiBcIi5jb25jYXQoZSxcIiBjYW5ub3QgYmUgZW5jb2RlZCBpbiBVVEYtMTZcIikpO3RoaXMuYXBwZW5kQ2hhckNvZGUoNTUyOTYrKGUtNjU1MzY+Pj4xMCkpLHRoaXMuYXBwZW5kQ2hhckNvZGUoNTYzMjArKGUtNjU1MzYmMTAyMykpfX0sZS5wcm90b3R5cGUuZ2V0T3V0cHV0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmx1c2hCdWZmZXJUb091dHB1dFN0cmluZygpLHRoaXMub3V0cHV0U3RyaW5nfSxlLnByb3RvdHlwZS5mbHVzaEJ1ZmZlclRvT3V0cHV0U3RyaW5nPWZ1bmN0aW9uKCl7dGhpcy5vdXRwdXRQb3NpdGlvbj09PXRoaXMub3V0cHV0QnVmZmVyQ2FwYWNpdHk/dGhpcy5vdXRwdXRTdHJpbmcrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCx0aGlzLm91dHB1dEJ1ZmZlcik6dGhpcy5vdXRwdXRTdHJpbmcrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCx0aGlzLm91dHB1dEJ1ZmZlci5zdWJhcnJheSgwLHRoaXMub3V0cHV0UG9zaXRpb24pKSx0aGlzLm91dHB1dFBvc2l0aW9uPTB9LGV9KCk7ZS5TdHJpbmdCdWlsZGVyPXR9KG98fChvPXt9KSksZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5yZXN0YXJ0KCl9cmV0dXJuIHQucHJvdG90eXBlLnJlc3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLnN0YXJ0VGltZT10LmdldFRpbWVzdGFtcCgpfSx0LnByb3RvdHlwZS5nZXRFbGFwc2VkVGltZT1mdW5jdGlvbigpe3JldHVybiB0LmdldFRpbWVzdGFtcCgpLXRoaXMuc3RhcnRUaW1lfSx0LnByb3RvdHlwZS5nZXRFbGFwc2VkVGltZUFuZFJlc3RhcnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldEVsYXBzZWRUaW1lKCk7cmV0dXJuIHRoaXMucmVzdGFydCgpLGV9LHQucHJvdG90eXBlLmxvZ0FuZFJlc3RhcnQ9ZnVuY3Rpb24odCxuKXt2b2lkIDA9PT1uJiYobj0hMCk7dmFyIHI9dGhpcy5nZXRFbGFwc2VkVGltZSgpLG89XCJcIi5jb25jYXQodCxcIjogXCIpLmNvbmNhdChyLnRvRml4ZWQoMyksXCJtc1wiKTtyZXR1cm4gZS5sb2cobyxuKSx0aGlzLnJlc3RhcnQoKSxyfSx0LmdldFRpbWVzdGFtcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRpbWVzdGFtcEZ1bmN8fHRoaXMuY3JlYXRlR2xvYmFsVGltZXN0YW1wRnVuY3Rpb24oKSx0aGlzLnRpbWVzdGFtcEZ1bmMoKX0sdC5nZXRNaWNyb3NlY29uZFRpbWVzdGFtcD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmZsb29yKDFlMyp0LmdldFRpbWVzdGFtcCgpKX0sdC5jcmVhdGVHbG9iYWxUaW1lc3RhbXBGdW5jdGlvbj1mdW5jdGlvbigpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBwcm9jZXNzJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBwcm9jZXNzLmhydGltZSl7dmFyIGU9MDt0aGlzLnRpbWVzdGFtcEZ1bmM9ZnVuY3Rpb24oKXt2YXIgdD1wcm9jZXNzLmhydGltZSgpLG49MWUzKnRbMF0rdFsxXS8xZTY7cmV0dXJuIGUrbn0sZT1EYXRlLm5vdygpLXRoaXMudGltZXN0YW1wRnVuYygpfWVsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIGNocm9tZSYmY2hyb21lLkludGVydmFsKXt2YXIgdD1EYXRlLm5vdygpLG49bmV3IGNocm9tZS5JbnRlcnZhbDtuLnN0YXJ0KCksdGhpcy50aW1lc3RhbXBGdW5jPWZ1bmN0aW9uKCl7cmV0dXJuIHQrbi5taWNyb3NlY29uZHMoKS8xZTN9fWVsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3cpe3ZhciByPURhdGUubm93KCktcGVyZm9ybWFuY2Uubm93KCk7dGhpcy50aW1lc3RhbXBGdW5jPWZ1bmN0aW9uKCl7cmV0dXJuIHIrcGVyZm9ybWFuY2Uubm93KCl9fWVsc2UgRGF0ZS5ub3c/dGhpcy50aW1lc3RhbXBGdW5jPWZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCl9OnRoaXMudGltZXN0YW1wRnVuYz1mdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfX0sdH0oKTtlLlRpbWVyPXR9KG98fChvPXt9KSksZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZvaWQgMD09PXQmJih0PSEwKSx0aGlzLk1pbmltdW1TZXF1ZW5jZUxlbmd0aD00LHRoaXMuTWF4aW11bVNlcXVlbmNlTGVuZ3RoPTMxLHRoaXMuTWF4aW11bU1hdGNoRGlzdGFuY2U9MzI3NjcsdGhpcy5QcmVmaXhIYXNoVGFibGVTaXplPTY1NTM3LHRoaXMuaW5wdXRCdWZmZXJTdHJlYW1PZmZzZXQ9MSx0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBVaW50MzJBcnJheT90aGlzLnByZWZpeEhhc2hUYWJsZT1uZXcgZS5Db21wcmVzc29yQ3VzdG9tSGFzaFRhYmxlKHRoaXMuUHJlZml4SGFzaFRhYmxlU2l6ZSk6dGhpcy5wcmVmaXhIYXNoVGFibGU9bmV3IGUuQ29tcHJlc3NvclNpbXBsZUhhc2hUYWJsZSh0aGlzLlByZWZpeEhhc2hUYWJsZVNpemUpfXJldHVybiB0LnByb3RvdHlwZS5jb21wcmVzc0Jsb2NrPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcImNvbXByZXNzQmxvY2s6IHVuZGVmaW5lZCBvciBudWxsIGlucHV0IHJlY2VpdmVkXCIpO3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1lLmVuY29kZVVURjgodCkpLHQ9ZS5CdWZmZXJUb29scy5jb252ZXJ0VG9VaW50OEFycmF5SWZOZWVkZWQodCksdGhpcy5jb21wcmVzc1V0ZjhCbG9jayh0KX0sdC5wcm90b3R5cGUuY29tcHJlc3NVdGY4QmxvY2s9ZnVuY3Rpb24oZSl7aWYoIWV8fDA9PWUubGVuZ3RoKXJldHVybiBuZXcgVWludDhBcnJheSgwKTt2YXIgdD10aGlzLmNyb3BBbmRBZGROZXdCeXRlc1RvSW5wdXRCdWZmZXIoZSksbj10aGlzLmlucHV0QnVmZmVyLHI9dGhpcy5pbnB1dEJ1ZmZlci5sZW5ndGg7dGhpcy5vdXRwdXRCdWZmZXI9bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgpLHRoaXMub3V0cHV0QnVmZmVyUG9zaXRpb249MDtmb3IodmFyIG89MCxpPXQ7aTxyO2krKyl7dmFyIGE9bltpXSxsPWk8bztpZihpPnItdGhpcy5NaW5pbXVtU2VxdWVuY2VMZW5ndGgpbHx8dGhpcy5vdXRwdXRSYXdCeXRlKGEpO2Vsc2V7dmFyIHM9dGhpcy5nZXRCdWNrZXRJbmRleEZvclByZWZpeChpKTtpZighbCl7dmFyIGM9dGhpcy5maW5kTG9uZ2VzdE1hdGNoKGkscyk7bnVsbCE9YyYmKHRoaXMub3V0cHV0UG9pbnRlckJ5dGVzKGMubGVuZ3RoLGMuZGlzdGFuY2UpLG89aStjLmxlbmd0aCxsPSEwKX1sfHx0aGlzLm91dHB1dFJhd0J5dGUoYSk7dmFyIHU9dGhpcy5pbnB1dEJ1ZmZlclN0cmVhbU9mZnNldCtpO3RoaXMucHJlZml4SGFzaFRhYmxlLmFkZFZhbHVlVG9CdWNrZXQocyx1KX19cmV0dXJuIHRoaXMub3V0cHV0QnVmZmVyLnN1YmFycmF5KDAsdGhpcy5vdXRwdXRCdWZmZXJQb3NpdGlvbil9LHQucHJvdG90eXBlLmZpbmRMb25nZXN0TWF0Y2g9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnByZWZpeEhhc2hUYWJsZS5nZXRBcnJheVNlZ21lbnRGb3JCdWNrZXRJbmRleCh0LHRoaXMucmV1c2FibGVBcnJheVNlZ21lbnRPYmplY3QpO2lmKG51bGw9PW4pcmV0dXJuIG51bGw7Zm9yKHZhciByLG89dGhpcy5pbnB1dEJ1ZmZlcixpPTAsYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgbCxzPW4uZ2V0SW5SZXZlcnNlZE9yZGVyKGEpLXRoaXMuaW5wdXRCdWZmZXJTdHJlYW1PZmZzZXQsYz1lLXM7aWYobD12b2lkIDA9PT1yP3RoaXMuTWluaW11bVNlcXVlbmNlTGVuZ3RoLTE6cjwxMjgmJmM+PTEyOD9pKyhpPj4+MSk6aSxjPnRoaXMuTWF4aW11bU1hdGNoRGlzdGFuY2V8fGw+PXRoaXMuTWF4aW11bVNlcXVlbmNlTGVuZ3RofHxlK2w+PW8ubGVuZ3RoKWJyZWFrO2lmKG9bcytsXT09PW9bZStsXSlmb3IodmFyIHU9MDs7dSsrKXtpZihlK3U9PT1vLmxlbmd0aHx8b1tzK3VdIT09b1tlK3VdKXt1PmwmJihyPWMsaT11KTticmVha31pZih1PT09dGhpcy5NYXhpbXVtU2VxdWVuY2VMZW5ndGgpcmV0dXJue2Rpc3RhbmNlOmMsbGVuZ3RoOnRoaXMuTWF4aW11bVNlcXVlbmNlTGVuZ3RofX19cmV0dXJuIHZvaWQgMCE9PXI/e2Rpc3RhbmNlOnIsbGVuZ3RoOml9Om51bGx9LHQucHJvdG90eXBlLmdldEJ1Y2tldEluZGV4Rm9yUHJlZml4PWZ1bmN0aW9uKGUpe3JldHVybig3ODgwNTk5KnRoaXMuaW5wdXRCdWZmZXJbZV0rMzk2MDEqdGhpcy5pbnB1dEJ1ZmZlcltlKzFdKzE5OSp0aGlzLmlucHV0QnVmZmVyW2UrMl0rdGhpcy5pbnB1dEJ1ZmZlcltlKzNdKSV0aGlzLlByZWZpeEhhc2hUYWJsZVNpemV9LHQucHJvdG90eXBlLm91dHB1dFBvaW50ZXJCeXRlcz1mdW5jdGlvbihlLHQpe3Q8MTI4Pyh0aGlzLm91dHB1dFJhd0J5dGUoMTkyfGUpLHRoaXMub3V0cHV0UmF3Qnl0ZSh0KSk6KHRoaXMub3V0cHV0UmF3Qnl0ZSgyMjR8ZSksdGhpcy5vdXRwdXRSYXdCeXRlKHQ+Pj44KSx0aGlzLm91dHB1dFJhd0J5dGUoMjU1JnQpKX0sdC5wcm90b3R5cGUub3V0cHV0UmF3Qnl0ZT1mdW5jdGlvbihlKXt0aGlzLm91dHB1dEJ1ZmZlclt0aGlzLm91dHB1dEJ1ZmZlclBvc2l0aW9uKytdPWV9LHQucHJvdG90eXBlLmNyb3BBbmRBZGROZXdCeXRlc1RvSW5wdXRCdWZmZXI9ZnVuY3Rpb24odCl7aWYodm9pZCAwPT09dGhpcy5pbnB1dEJ1ZmZlcilyZXR1cm4gdGhpcy5pbnB1dEJ1ZmZlcj10LDA7dmFyIG49TWF0aC5taW4odGhpcy5pbnB1dEJ1ZmZlci5sZW5ndGgsdGhpcy5NYXhpbXVtTWF0Y2hEaXN0YW5jZSkscj10aGlzLmlucHV0QnVmZmVyLmxlbmd0aC1uO3JldHVybiB0aGlzLmlucHV0QnVmZmVyPWUuQ29tcHJlc3Npb25Db21tb24uZ2V0Q3JvcHBlZEFuZEFwcGVuZGVkQnl0ZUFycmF5KHRoaXMuaW5wdXRCdWZmZXIscixuLHQpLHRoaXMuaW5wdXRCdWZmZXJTdHJlYW1PZmZzZXQrPXIsbn0sdH0oKTtlLkNvbXByZXNzb3I9dH0ob3x8KG89e30pKSxmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dGhpcy5taW5pbXVtQnVja2V0Q2FwYWNpdHk9NCx0aGlzLm1heGltdW1CdWNrZXRDYXBhY2l0eT02NCx0aGlzLmJ1Y2tldExvY2F0b3JzPW5ldyBVaW50MzJBcnJheSgyKmUpLHRoaXMuc3RvcmFnZT1uZXcgVWludDMyQXJyYXkoMiplKSx0aGlzLnN0b3JhZ2VJbmRleD0xfXJldHVybiB0LnByb3RvdHlwZS5hZGRWYWx1ZVRvQnVja2V0PWZ1bmN0aW9uKHQsbil7dDw8PTEsdGhpcy5zdG9yYWdlSW5kZXg+PXRoaXMuc3RvcmFnZS5sZW5ndGg+Pj4xJiZ0aGlzLmNvbXBhY3QoKTt2YXIgcixvPXRoaXMuYnVja2V0TG9jYXRvcnNbdF07aWYoMD09PW8pbz10aGlzLnN0b3JhZ2VJbmRleCxyPTEsdGhpcy5zdG9yYWdlW3RoaXMuc3RvcmFnZUluZGV4XT1uLHRoaXMuc3RvcmFnZUluZGV4Kz10aGlzLm1pbmltdW1CdWNrZXRDYXBhY2l0eTtlbHNleyhyPXRoaXMuYnVja2V0TG9jYXRvcnNbdCsxXSk9PT10aGlzLm1heGltdW1CdWNrZXRDYXBhY2l0eS0xJiYocj10aGlzLnRydW5jYXRlQnVja2V0VG9OZXdlckVsZW1lbnRzKG8scix0aGlzLm1heGltdW1CdWNrZXRDYXBhY2l0eS8yKSk7dmFyIGk9bytyOzA9PT10aGlzLnN0b3JhZ2VbaV0/KHRoaXMuc3RvcmFnZVtpXT1uLGk9PT10aGlzLnN0b3JhZ2VJbmRleCYmKHRoaXMuc3RvcmFnZUluZGV4Kz1yKSk6KGUuQXJyYXlUb29scy5jb3B5RWxlbWVudHModGhpcy5zdG9yYWdlLG8sdGhpcy5zdG9yYWdlLHRoaXMuc3RvcmFnZUluZGV4LHIpLG89dGhpcy5zdG9yYWdlSW5kZXgsdGhpcy5zdG9yYWdlSW5kZXgrPXIsdGhpcy5zdG9yYWdlW3RoaXMuc3RvcmFnZUluZGV4KytdPW4sdGhpcy5zdG9yYWdlSW5kZXgrPXIpLHIrK310aGlzLmJ1Y2tldExvY2F0b3JzW3RdPW8sdGhpcy5idWNrZXRMb2NhdG9yc1t0KzFdPXJ9LHQucHJvdG90eXBlLnRydW5jYXRlQnVja2V0VG9OZXdlckVsZW1lbnRzPWZ1bmN0aW9uKHQsbixyKXt2YXIgbz10K24tcjtyZXR1cm4gZS5BcnJheVRvb2xzLmNvcHlFbGVtZW50cyh0aGlzLnN0b3JhZ2Usbyx0aGlzLnN0b3JhZ2UsdCxyKSxlLkFycmF5VG9vbHMuemVyb0VsZW1lbnRzKHRoaXMuc3RvcmFnZSx0K3Isbi1yKSxyfSx0LnByb3RvdHlwZS5jb21wYWN0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5idWNrZXRMb2NhdG9ycyxuPXRoaXMuc3RvcmFnZTt0aGlzLmJ1Y2tldExvY2F0b3JzPW5ldyBVaW50MzJBcnJheSh0aGlzLmJ1Y2tldExvY2F0b3JzLmxlbmd0aCksdGhpcy5zdG9yYWdlSW5kZXg9MTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrPTIpe3ZhciBvPXRbcisxXTswIT09byYmKHRoaXMuYnVja2V0TG9jYXRvcnNbcl09dGhpcy5zdG9yYWdlSW5kZXgsdGhpcy5idWNrZXRMb2NhdG9yc1tyKzFdPW8sdGhpcy5zdG9yYWdlSW5kZXgrPU1hdGgubWF4KE1hdGgubWluKDIqbyx0aGlzLm1heGltdW1CdWNrZXRDYXBhY2l0eSksdGhpcy5taW5pbXVtQnVja2V0Q2FwYWNpdHkpKX1mb3IodGhpcy5zdG9yYWdlPW5ldyBVaW50MzJBcnJheSg4KnRoaXMuc3RvcmFnZUluZGV4KSxyPTA7cjx0Lmxlbmd0aDtyKz0yKXt2YXIgaT10W3JdO2lmKDAhPT1pKXt2YXIgYT10aGlzLmJ1Y2tldExvY2F0b3JzW3JdLGw9dGhpcy5idWNrZXRMb2NhdG9yc1tyKzFdO2UuQXJyYXlUb29scy5jb3B5RWxlbWVudHMobixpLHRoaXMuc3RvcmFnZSxhLGwpfX19LHQucHJvdG90eXBlLmdldEFycmF5U2VnbWVudEZvckJ1Y2tldEluZGV4PWZ1bmN0aW9uKHQsbil7dDw8PTE7dmFyIHI9dGhpcy5idWNrZXRMb2NhdG9yc1t0XTtyZXR1cm4gMD09PXI/bnVsbDoodm9pZCAwPT09biYmKG49bmV3IGUuQXJyYXlTZWdtZW50KHRoaXMuc3RvcmFnZSxyLHRoaXMuYnVja2V0TG9jYXRvcnNbdCsxXSkpLG4pfSx0LnByb3RvdHlwZS5nZXRVc2VkQnVja2V0Q291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5mbG9vcihlLkFycmF5VG9vbHMuY291bnROb256ZXJvVmFsdWVzSW5BcnJheSh0aGlzLmJ1Y2tldExvY2F0b3JzKS8yKX0sdC5wcm90b3R5cGUuZ2V0VG90YWxFbGVtZW50Q291bnQ9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCx0PTA7dDx0aGlzLmJ1Y2tldExvY2F0b3JzLmxlbmd0aDt0Kz0yKWUrPXRoaXMuYnVja2V0TG9jYXRvcnNbdCsxXTtyZXR1cm4gZX0sdH0oKTtlLkNvbXByZXNzb3JDdXN0b21IYXNoVGFibGU9dH0ob3x8KG89e30pKSxmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dGhpcy5tYXhpbXVtQnVja2V0Q2FwYWNpdHk9NjQsdGhpcy5idWNrZXRzPW5ldyBBcnJheShlKX1yZXR1cm4gdC5wcm90b3R5cGUuYWRkVmFsdWVUb0J1Y2tldD1mdW5jdGlvbih0LG4pe3ZhciByPXRoaXMuYnVja2V0c1t0XTt2b2lkIDA9PT1yP3RoaXMuYnVja2V0c1t0XT1bbl06KHIubGVuZ3RoPT09dGhpcy5tYXhpbXVtQnVja2V0Q2FwYWNpdHktMSYmZS5BcnJheVRvb2xzLnRydW5jYXRlU3RhcnRpbmdFbGVtZW50cyhyLHRoaXMubWF4aW11bUJ1Y2tldENhcGFjaXR5LzIpLHIucHVzaChuKSl9LHQucHJvdG90eXBlLmdldEFycmF5U2VnbWVudEZvckJ1Y2tldEluZGV4PWZ1bmN0aW9uKHQsbil7dmFyIHI9dGhpcy5idWNrZXRzW3RdO3JldHVybiB2b2lkIDA9PT1yP251bGw6KHZvaWQgMD09PW4mJihuPW5ldyBlLkFycmF5U2VnbWVudChyLDAsci5sZW5ndGgpKSxuKX0sdC5wcm90b3R5cGUuZ2V0VXNlZEJ1Y2tldENvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIGUuQXJyYXlUb29scy5jb3VudE5vbnplcm9WYWx1ZXNJbkFycmF5KHRoaXMuYnVja2V0cyl9LHQucHJvdG90eXBlLmdldFRvdGFsRWxlbWVudENvdW50PWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTAsdD0wO3Q8dGhpcy5idWNrZXRzLmxlbmd0aDt0Kyspdm9pZCAwIT09dGhpcy5idWNrZXRzW3RdJiYoZSs9dGhpcy5idWNrZXRzW3RdLmxlbmd0aCk7cmV0dXJuIGV9LHR9KCk7ZS5Db21wcmVzc29yU2ltcGxlSGFzaFRhYmxlPXR9KG98fChvPXt9KSksZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5NYXhpbXVtTWF0Y2hEaXN0YW5jZT0zMjc2Nyx0aGlzLm91dHB1dFBvc2l0aW9uPTB9cmV0dXJuIHQucHJvdG90eXBlLmRlY29tcHJlc3NCbG9ja1RvU3RyaW5nPWZ1bmN0aW9uKHQpe3JldHVybiB0PWUuQnVmZmVyVG9vbHMuY29udmVydFRvVWludDhBcnJheUlmTmVlZGVkKHQpLGUuZGVjb2RlVVRGOCh0aGlzLmRlY29tcHJlc3NCbG9jayh0KSl9LHQucHJvdG90eXBlLmRlY29tcHJlc3NCbG9jaz1mdW5jdGlvbih0KXt0aGlzLmlucHV0QnVmZmVyUmVtYWluZGVyJiYodD1lLkFycmF5VG9vbHMuY29uY2F0VWludDhBcnJheXMoW3RoaXMuaW5wdXRCdWZmZXJSZW1haW5kZXIsdF0pLHRoaXMuaW5wdXRCdWZmZXJSZW1haW5kZXI9dm9pZCAwKTtmb3IodmFyIG49dGhpcy5jcm9wT3V0cHV0QnVmZmVyVG9XaW5kb3dBbmRJbml0aWFsaXplKE1hdGgubWF4KDQqdC5sZW5ndGgsMTAyNCkpLHI9MCxvPXQubGVuZ3RoO3I8bztyKyspe3ZhciBpPXRbcl07aWYoaT4+PjY9PTMpe3ZhciBhPWk+Pj41O2lmKHI9PW8tMXx8cj09by0yJiY3PT1hKXt0aGlzLmlucHV0QnVmZmVyUmVtYWluZGVyPXQuc3ViYXJyYXkocik7YnJlYWt9aWYodFtyKzFdPj4+Nz09MSl0aGlzLm91dHB1dEJ5dGUoaSk7ZWxzZXt2YXIgbD0zMSZpLHM9dm9pZCAwOzY9PWE/KHM9dFtyKzFdLHIrPTEpOihzPXRbcisxXTw8OHx0W3IrMl0scis9Mik7Zm9yKHZhciBjPXRoaXMub3V0cHV0UG9zaXRpb24tcyx1PTA7dTxsO3UrKyl0aGlzLm91dHB1dEJ5dGUodGhpcy5vdXRwdXRCdWZmZXJbYyt1XSl9fWVsc2UgdGhpcy5vdXRwdXRCeXRlKGkpfXJldHVybiB0aGlzLnJvbGxCYWNrSWZPdXRwdXRCdWZmZXJFbmRzV2l0aEFUcnVuY2F0ZWRNdWx0aWJ5dGVTZXF1ZW5jZSgpLGUuQ29tcHJlc3Npb25Db21tb24uZ2V0Q3JvcHBlZEJ1ZmZlcih0aGlzLm91dHB1dEJ1ZmZlcixuLHRoaXMub3V0cHV0UG9zaXRpb24tbil9LHQucHJvdG90eXBlLm91dHB1dEJ5dGU9ZnVuY3Rpb24odCl7dGhpcy5vdXRwdXRQb3NpdGlvbj09PXRoaXMub3V0cHV0QnVmZmVyLmxlbmd0aCYmKHRoaXMub3V0cHV0QnVmZmVyPWUuQXJyYXlUb29scy5kb3VibGVCeXRlQXJyYXlDYXBhY2l0eSh0aGlzLm91dHB1dEJ1ZmZlcikpLHRoaXMub3V0cHV0QnVmZmVyW3RoaXMub3V0cHV0UG9zaXRpb24rK109dH0sdC5wcm90b3R5cGUuY3JvcE91dHB1dEJ1ZmZlclRvV2luZG93QW5kSW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtpZighdGhpcy5vdXRwdXRCdWZmZXIpcmV0dXJuIHRoaXMub3V0cHV0QnVmZmVyPW5ldyBVaW50OEFycmF5KHQpLDA7dmFyIG49TWF0aC5taW4odGhpcy5vdXRwdXRQb3NpdGlvbix0aGlzLk1heGltdW1NYXRjaERpc3RhbmNlKTtpZih0aGlzLm91dHB1dEJ1ZmZlcj1lLkNvbXByZXNzaW9uQ29tbW9uLmdldENyb3BwZWRCdWZmZXIodGhpcy5vdXRwdXRCdWZmZXIsdGhpcy5vdXRwdXRQb3NpdGlvbi1uLG4sdCksdGhpcy5vdXRwdXRQb3NpdGlvbj1uLHRoaXMub3V0cHV0QnVmZmVyUmVtYWluZGVyKXtmb3IodmFyIHI9MDtyPHRoaXMub3V0cHV0QnVmZmVyUmVtYWluZGVyLmxlbmd0aDtyKyspdGhpcy5vdXRwdXRCeXRlKHRoaXMub3V0cHV0QnVmZmVyUmVtYWluZGVyW3JdKTt0aGlzLm91dHB1dEJ1ZmZlclJlbWFpbmRlcj12b2lkIDB9cmV0dXJuIG59LHQucHJvdG90eXBlLnJvbGxCYWNrSWZPdXRwdXRCdWZmZXJFbmRzV2l0aEFUcnVuY2F0ZWRNdWx0aWJ5dGVTZXF1ZW5jZT1mdW5jdGlvbigpe2Zvcih2YXIgZT0xO2U8PTQmJnRoaXMub3V0cHV0UG9zaXRpb24tZT49MDtlKyspe3ZhciB0PXRoaXMub3V0cHV0QnVmZmVyW3RoaXMub3V0cHV0UG9zaXRpb24tZV07aWYoZTw0JiZ0Pj4+Mz09MzB8fGU8MyYmdD4+PjQ9PTE0fHxlPDImJnQ+Pj41PT02KXJldHVybiB0aGlzLm91dHB1dEJ1ZmZlclJlbWFpbmRlcj10aGlzLm91dHB1dEJ1ZmZlci5zdWJhcnJheSh0aGlzLm91dHB1dFBvc2l0aW9uLWUsdGhpcy5vdXRwdXRQb3NpdGlvbiksdm9pZCh0aGlzLm91dHB1dFBvc2l0aW9uLT1lKX19LHR9KCk7ZS5EZWNvbXByZXNzb3I9dH0ob3x8KG89e30pKSxmdW5jdGlvbihlKXshZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQpe3ZhciBuPW5ldyBVaW50OEFycmF5KFs2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5Nyw5OCw5OSwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNSwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwxMTIsMTEzLDExNCwxMTUsMTE2LDExNywxMTgsMTE5LDEyMCwxMjEsMTIyLDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDQzLDQ3XSkscj1uZXcgVWludDhBcnJheShbMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDYyLDI1NSwyNTUsMjU1LDYzLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDI1NSwyNTUsMjU1LDAsMjU1LDI1NSwyNTUsMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSwyNTUsMjU1LDI1NSwyNTVdKTt0LmVuY29kZT1mdW5jdGlvbihuKXtyZXR1cm4gbiYmMCE9bi5sZW5ndGg/ZS5ydW5uaW5nSW5Ob2RlSlMoKT9lLkJ1ZmZlclRvb2xzLnVpbnQ4QXJyYXlUb0J1ZmZlcihuKS50b1N0cmluZyhcImJhc2U2NFwiKTp0LmVuY29kZVdpdGhKUyhuKTpcIlwifSx0LmRlY29kZT1mdW5jdGlvbihuKXtyZXR1cm4gbj9lLnJ1bm5pbmdJbk5vZGVKUygpP2UuQnVmZmVyVG9vbHMuYnVmZmVyVG9VaW50OEFycmF5KEJ1ZmZlci5mcm9tKG4sXCJiYXNlNjRcIikpOnQuZGVjb2RlV2l0aEpTKG4pOm5ldyBVaW50OEFycmF5KDApfSx0LmVuY29kZVdpdGhKUz1mdW5jdGlvbih0LHIpe2lmKHZvaWQgMD09PXImJihyPSEwKSwhdHx8MD09dC5sZW5ndGgpcmV0dXJuXCJcIjtmb3IodmFyIG8saT1uLGE9bmV3IGUuU3RyaW5nQnVpbGRlcixsPTAscz10Lmxlbmd0aDtsPHM7bCs9MylsPD1zLTM/KG89dFtsXTw8MTZ8dFtsKzFdPDw4fHRbbCsyXSxhLmFwcGVuZENoYXJDb2RlKGlbbz4+PjE4JjYzXSksYS5hcHBlbmRDaGFyQ29kZShpW28+Pj4xMiY2M10pLGEuYXBwZW5kQ2hhckNvZGUoaVtvPj4+NiY2M10pLGEuYXBwZW5kQ2hhckNvZGUoaVs2MyZvXSksbz0wKTpsPT09cy0yPyhvPXRbbF08PDE2fHRbbCsxXTw8OCxhLmFwcGVuZENoYXJDb2RlKGlbbz4+PjE4JjYzXSksYS5hcHBlbmRDaGFyQ29kZShpW28+Pj4xMiY2M10pLGEuYXBwZW5kQ2hhckNvZGUoaVtvPj4+NiY2M10pLHImJmEuYXBwZW5kQ2hhckNvZGUoNjEpKTpsPT09cy0xJiYobz10W2xdPDwxNixhLmFwcGVuZENoYXJDb2RlKGlbbz4+PjE4JjYzXSksYS5hcHBlbmRDaGFyQ29kZShpW28+Pj4xMiY2M10pLHImJihhLmFwcGVuZENoYXJDb2RlKDYxKSxhLmFwcGVuZENoYXJDb2RlKDYxKSkpO3JldHVybiBhLmdldE91dHB1dFN0cmluZygpfSx0LmRlY29kZVdpdGhKUz1mdW5jdGlvbihlLHQpe2lmKCFlfHwwPT1lLmxlbmd0aClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7dmFyIG49ZS5sZW5ndGglNDtpZigxPT09bil0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIEJhc2U2NCBzdHJpbmc6IGxlbmd0aCAlIDQgPT0gMVwiKTsyPT09bj9lKz1cIj09XCI6Mz09PW4mJihlKz1cIj1cIiksdHx8KHQ9bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgpKTtmb3IodmFyIG89MCxpPWUubGVuZ3RoLGE9MDthPGk7YSs9NCl7dmFyIGw9cltlLmNoYXJDb2RlQXQoYSldPDwxOHxyW2UuY2hhckNvZGVBdChhKzEpXTw8MTJ8cltlLmNoYXJDb2RlQXQoYSsyKV08PDZ8cltlLmNoYXJDb2RlQXQoYSszKV07dFtvKytdPWw+Pj4xNiYyNTUsdFtvKytdPWw+Pj44JjI1NSx0W28rK109MjU1Jmx9cmV0dXJuIDYxPT1lLmNoYXJDb2RlQXQoaS0xKSYmby0tLDYxPT1lLmNoYXJDb2RlQXQoaS0yKSYmby0tLHQuc3ViYXJyYXkoMCxvKX19KHQuQmFzZTY0fHwodC5CYXNlNjQ9e30pKX0oZS5FbmNvZGluZ3x8KGUuRW5jb2Rpbmc9e30pKX0ob3x8KG89e30pKSxmdW5jdGlvbihlKXshZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQpe3QuZW5jb2RlPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkJpbmFyeVN0cmluZy5lbmNvZGU6IHVuZGVmaW5lZCBvciBudWxsIGlucHV0IHJlY2VpdmVkXCIpO2lmKDA9PT10Lmxlbmd0aClyZXR1cm5cIlwiO2Zvcih2YXIgbj10Lmxlbmd0aCxyPW5ldyBlLlN0cmluZ0J1aWxkZXIsbz0wLGk9MSxhPTA7YTxuO2ErPTIpe3ZhciBsO2w9YT09bi0xP3RbYV08PDg6dFthXTw8OHx0W2ErMV0sci5hcHBlbmRDaGFyQ29kZShvPDwxNi1pfGw+Pj5pKSxvPWwmKDE8PGkpLTEsMTU9PT1pPyhyLmFwcGVuZENoYXJDb2RlKG8pLG89MCxpPTEpOmkrPTEsYT49bi0yJiZyLmFwcGVuZENoYXJDb2RlKG88PDE2LWkpfXJldHVybiByLmFwcGVuZENoYXJDb2RlKDMyNzY4fG4lMiksci5nZXRPdXRwdXRTdHJpbmcoKX0sdC5kZWNvZGU9ZnVuY3Rpb24oZSl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkJpbmFyeVN0cmluZy5kZWNvZGU6IGludmFsaWQgaW5wdXQgdHlwZVwiKTtpZihcIlwiPT1lKXJldHVybiBuZXcgVWludDhBcnJheSgwKTtmb3IodmFyIHQ9bmV3IFVpbnQ4QXJyYXkoMyplLmxlbmd0aCksbj0wLHI9ZnVuY3Rpb24oZSl7dFtuKytdPWU+Pj44LHRbbisrXT0yNTUmZX0sbz0wLGk9MCxhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBsPWUuY2hhckNvZGVBdChhKTtsPj0zMjc2OD8oMzI3Njk9PWwmJm4tLSxpPTApOigwPT1pP289bDoocihvPDxpfGw+Pj4xNS1pKSxvPWwmKDE8PDE1LWkpLTEpLDE1PT1pP2k9MDppKz0xKX1yZXR1cm4gdC5zdWJhcnJheSgwLG4pfX0odC5CaW5hcnlTdHJpbmd8fCh0LkJpbmFyeVN0cmluZz17fSkpfShlLkVuY29kaW5nfHwoZS5FbmNvZGluZz17fSkpfShvfHwobz17fSkpLGZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlKXshZnVuY3Rpb24oZSl7ZS5lbmNvZGVGcm9tU3RyaW5nPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5jaGFyQ29kZUF0KHQpO2lmKG48NTUyOTZ8fG4+NTYzMTkpcmV0dXJuIG47dmFyIHI9ZS5jaGFyQ29kZUF0KHQrMSk7aWYocj49NTYzMjAmJnI8PTU3MzQzKXJldHVybiByLTU2MzIwKyhuLTU1Mjk2PDwxMCkrNjU1MzY7dGhyb3cgbmV3IEVycm9yKFwiZ2V0VW5pY29kZUNvZGVQb2ludDogUmVjZWl2ZWQgYSBsZWFkIHN1cnJvZ2F0ZSBjaGFyYWN0ZXIsIGNoYXIgY29kZSBcIi5jb25jYXQobixcIiwgZm9sbG93ZWQgYnkgXCIpLmNvbmNhdChyLFwiLCB3aGljaCBpcyBub3QgYSB0cmFpbGluZyBzdXJyb2dhdGUgY2hhcmFjdGVyIGNvZGUuXCIpKX0sZS5kZWNvZGVUb1N0cmluZz1mdW5jdGlvbihlKXtpZihlPD02NTUzNSlyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShlKTtpZihlPD0xMTE0MTExKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2KyhlLTY1NTM2Pj4+MTApLDU2MzIwKyhlLTY1NTM2JjEwMjMpKTt0aHJvdyBuZXcgRXJyb3IoXCJnZXRTdHJpbmdGcm9tVW5pY29kZUNvZGVQb2ludDogQSBjb2RlIHBvaW50IG9mIFwiLmNvbmNhdChlLFwiIGNhbm5vdCBiZSBlbmNvZGVkIGluIFVURi0xNlwiKSl9fShlLkNvZGVQb2ludHx8KGUuQ29kZVBvaW50PXt9KSl9KGUuRW5jb2Rpbmd8fChlLkVuY29kaW5nPXt9KSl9KG98fChvPXt9KSksZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlKXt2YXIgdD1bXCIwMDBcIixcIjAwMVwiLFwiMDAyXCIsXCIwMDNcIixcIjAwNFwiLFwiMDA1XCIsXCIwMDZcIixcIjAwN1wiLFwiMDA4XCIsXCIwMDlcIixcIjAxMFwiLFwiMDExXCIsXCIwMTJcIixcIjAxM1wiLFwiMDE0XCIsXCIwMTVcIixcIjAxNlwiLFwiMDE3XCIsXCIwMThcIixcIjAxOVwiLFwiMDIwXCIsXCIwMjFcIixcIjAyMlwiLFwiMDIzXCIsXCIwMjRcIixcIjAyNVwiLFwiMDI2XCIsXCIwMjdcIixcIjAyOFwiLFwiMDI5XCIsXCIwMzBcIixcIjAzMVwiLFwiMDMyXCIsXCIwMzNcIixcIjAzNFwiLFwiMDM1XCIsXCIwMzZcIixcIjAzN1wiLFwiMDM4XCIsXCIwMzlcIixcIjA0MFwiLFwiMDQxXCIsXCIwNDJcIixcIjA0M1wiLFwiMDQ0XCIsXCIwNDVcIixcIjA0NlwiLFwiMDQ3XCIsXCIwNDhcIixcIjA0OVwiLFwiMDUwXCIsXCIwNTFcIixcIjA1MlwiLFwiMDUzXCIsXCIwNTRcIixcIjA1NVwiLFwiMDU2XCIsXCIwNTdcIixcIjA1OFwiLFwiMDU5XCIsXCIwNjBcIixcIjA2MVwiLFwiMDYyXCIsXCIwNjNcIixcIjA2NFwiLFwiMDY1XCIsXCIwNjZcIixcIjA2N1wiLFwiMDY4XCIsXCIwNjlcIixcIjA3MFwiLFwiMDcxXCIsXCIwNzJcIixcIjA3M1wiLFwiMDc0XCIsXCIwNzVcIixcIjA3NlwiLFwiMDc3XCIsXCIwNzhcIixcIjA3OVwiLFwiMDgwXCIsXCIwODFcIixcIjA4MlwiLFwiMDgzXCIsXCIwODRcIixcIjA4NVwiLFwiMDg2XCIsXCIwODdcIixcIjA4OFwiLFwiMDg5XCIsXCIwOTBcIixcIjA5MVwiLFwiMDkyXCIsXCIwOTNcIixcIjA5NFwiLFwiMDk1XCIsXCIwOTZcIixcIjA5N1wiLFwiMDk4XCIsXCIwOTlcIixcIjEwMFwiLFwiMTAxXCIsXCIxMDJcIixcIjEwM1wiLFwiMTA0XCIsXCIxMDVcIixcIjEwNlwiLFwiMTA3XCIsXCIxMDhcIixcIjEwOVwiLFwiMTEwXCIsXCIxMTFcIixcIjExMlwiLFwiMTEzXCIsXCIxMTRcIixcIjExNVwiLFwiMTE2XCIsXCIxMTdcIixcIjExOFwiLFwiMTE5XCIsXCIxMjBcIixcIjEyMVwiLFwiMTIyXCIsXCIxMjNcIixcIjEyNFwiLFwiMTI1XCIsXCIxMjZcIixcIjEyN1wiLFwiMTI4XCIsXCIxMjlcIixcIjEzMFwiLFwiMTMxXCIsXCIxMzJcIixcIjEzM1wiLFwiMTM0XCIsXCIxMzVcIixcIjEzNlwiLFwiMTM3XCIsXCIxMzhcIixcIjEzOVwiLFwiMTQwXCIsXCIxNDFcIixcIjE0MlwiLFwiMTQzXCIsXCIxNDRcIixcIjE0NVwiLFwiMTQ2XCIsXCIxNDdcIixcIjE0OFwiLFwiMTQ5XCIsXCIxNTBcIixcIjE1MVwiLFwiMTUyXCIsXCIxNTNcIixcIjE1NFwiLFwiMTU1XCIsXCIxNTZcIixcIjE1N1wiLFwiMTU4XCIsXCIxNTlcIixcIjE2MFwiLFwiMTYxXCIsXCIxNjJcIixcIjE2M1wiLFwiMTY0XCIsXCIxNjVcIixcIjE2NlwiLFwiMTY3XCIsXCIxNjhcIixcIjE2OVwiLFwiMTcwXCIsXCIxNzFcIixcIjE3MlwiLFwiMTczXCIsXCIxNzRcIixcIjE3NVwiLFwiMTc2XCIsXCIxNzdcIixcIjE3OFwiLFwiMTc5XCIsXCIxODBcIixcIjE4MVwiLFwiMTgyXCIsXCIxODNcIixcIjE4NFwiLFwiMTg1XCIsXCIxODZcIixcIjE4N1wiLFwiMTg4XCIsXCIxODlcIixcIjE5MFwiLFwiMTkxXCIsXCIxOTJcIixcIjE5M1wiLFwiMTk0XCIsXCIxOTVcIixcIjE5NlwiLFwiMTk3XCIsXCIxOThcIixcIjE5OVwiLFwiMjAwXCIsXCIyMDFcIixcIjIwMlwiLFwiMjAzXCIsXCIyMDRcIixcIjIwNVwiLFwiMjA2XCIsXCIyMDdcIixcIjIwOFwiLFwiMjA5XCIsXCIyMTBcIixcIjIxMVwiLFwiMjEyXCIsXCIyMTNcIixcIjIxNFwiLFwiMjE1XCIsXCIyMTZcIixcIjIxN1wiLFwiMjE4XCIsXCIyMTlcIixcIjIyMFwiLFwiMjIxXCIsXCIyMjJcIixcIjIyM1wiLFwiMjI0XCIsXCIyMjVcIixcIjIyNlwiLFwiMjI3XCIsXCIyMjhcIixcIjIyOVwiLFwiMjMwXCIsXCIyMzFcIixcIjIzMlwiLFwiMjMzXCIsXCIyMzRcIixcIjIzNVwiLFwiMjM2XCIsXCIyMzdcIixcIjIzOFwiLFwiMjM5XCIsXCIyNDBcIixcIjI0MVwiLFwiMjQyXCIsXCIyNDNcIixcIjI0NFwiLFwiMjQ1XCIsXCIyNDZcIixcIjI0N1wiLFwiMjQ4XCIsXCIyNDlcIixcIjI1MFwiLFwiMjUxXCIsXCIyNTJcIixcIjI1M1wiLFwiMjU0XCIsXCIyNTVcIl07ZS5lbmNvZGU9ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPVtdLHI9MDtyPGUubGVuZ3RoO3IrKyluLnB1c2godFtlW3JdXSk7cmV0dXJuIG4uam9pbihcIiBcIil9fShlLkRlY2ltYWxTdHJpbmd8fChlLkRlY2ltYWxTdHJpbmc9e30pKX0oZS5FbmNvZGluZ3x8KGUuRW5jb2Rpbmc9e30pKX0ob3x8KG89e30pKSxmdW5jdGlvbihlKXshZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKHQpe3QuZW5jb2RlPWZ1bmN0aW9uKHQpe3JldHVybiBlLkJpbmFyeVN0cmluZy5lbmNvZGUodCkucmVwbGFjZSgvXFwwL2csXCLogIJcIil9LHQuZGVjb2RlPWZ1bmN0aW9uKHQpe3JldHVybiBlLkJpbmFyeVN0cmluZy5kZWNvZGUodC5yZXBsYWNlKC9cXHU4MDAyL2csXCJcXDBcIikpfX0oZS5TdG9yYWdlQmluYXJ5U3RyaW5nfHwoZS5TdG9yYWdlQmluYXJ5U3RyaW5nPXt9KSl9KGUuRW5jb2Rpbmd8fChlLkVuY29kaW5nPXt9KSl9KG98fChvPXt9KSksZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKHQpeyFmdW5jdGlvbihuKXt2YXIgcixvO24uZW5jb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0JiYwIT10Lmxlbmd0aD9lLnJ1bm5pbmdJbk5vZGVKUygpP2UuQnVmZmVyVG9vbHMuYnVmZmVyVG9VaW50OEFycmF5KEJ1ZmZlci5mcm9tKHQsXCJ1dGY4XCIpKTpuLmNyZWF0ZU5hdGl2ZVRleHRFbmNvZGVyQW5kRGVjb2RlcklmQXZhaWxhYmxlKCk/ci5lbmNvZGUodCk6bi5lbmNvZGVXaXRoSlModCk6bmV3IFVpbnQ4QXJyYXkoMCl9LG4uZGVjb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0JiYwIT10Lmxlbmd0aD9lLnJ1bm5pbmdJbk5vZGVKUygpP2UuQnVmZmVyVG9vbHMudWludDhBcnJheVRvQnVmZmVyKHQpLnRvU3RyaW5nKFwidXRmOFwiKTpuLmNyZWF0ZU5hdGl2ZVRleHRFbmNvZGVyQW5kRGVjb2RlcklmQXZhaWxhYmxlKCk/by5kZWNvZGUodCk6bi5kZWNvZGVXaXRoSlModCk6XCJcIn0sbi5lbmNvZGVXaXRoSlM9ZnVuY3Rpb24oZSxuKXtpZighZXx8MD09ZS5sZW5ndGgpcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO258fChuPW5ldyBVaW50OEFycmF5KDQqZS5sZW5ndGgpKTtmb3IodmFyIHI9MCxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBpPXQuQ29kZVBvaW50LmVuY29kZUZyb21TdHJpbmcoZSxvKTtpZihpPD0xMjcpbltyKytdPWk7ZWxzZSBpZihpPD0yMDQ3KW5bcisrXT0xOTJ8aT4+PjYsbltyKytdPTEyOHw2MyZpO2Vsc2UgaWYoaTw9NjU1MzUpbltyKytdPTIyNHxpPj4+MTIsbltyKytdPTEyOHxpPj4+NiY2MyxuW3IrK109MTI4fDYzJmk7ZWxzZXtpZighKGk8PTExMTQxMTEpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgVVRGLTE2IHN0cmluZzogRW5jb3VudGVyZWQgYSBjaGFyYWN0ZXIgdW5zdXBwb3J0ZWQgYnkgVVRGLTgvMTYgKFJGQyAzNjI5KVwiKTtuW3IrK109MjQwfGk+Pj4xOCxuW3IrK109MTI4fGk+Pj4xMiY2MyxuW3IrK109MTI4fGk+Pj42JjYzLG5bcisrXT0xMjh8NjMmaSxvKyt9fXJldHVybiBuLnN1YmFycmF5KDAscil9LG4uZGVjb2RlV2l0aEpTPWZ1bmN0aW9uKHQsbixyKXtpZih2b2lkIDA9PT1uJiYobj0wKSwhdHx8MD09dC5sZW5ndGgpcmV0dXJuXCJcIjt2b2lkIDA9PT1yJiYocj10Lmxlbmd0aCk7Zm9yKHZhciBvLGksYT1uZXcgZS5TdHJpbmdCdWlsZGVyLGw9bixzPXI7bDxzOyl7aWYoKGk9dFtsXSk+Pj43PT0wKW89aSxsKz0xO2Vsc2UgaWYoaT4+PjU9PTYpe2lmKGwrMT49cil0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIFVURi04IHN0cmVhbTogVHJ1bmNhdGVkIGNvZGVwb2ludCBzZXF1ZW5jZSBlbmNvdW50ZXJlZCBhdCBwb3NpdGlvbiBcIitsKTtvPSgzMSZpKTw8Nnw2MyZ0W2wrMV0sbCs9Mn1lbHNlIGlmKGk+Pj40PT0xNCl7aWYobCsyPj1yKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgVVRGLTggc3RyZWFtOiBUcnVuY2F0ZWQgY29kZXBvaW50IHNlcXVlbmNlIGVuY291bnRlcmVkIGF0IHBvc2l0aW9uIFwiK2wpO289KDE1JmkpPDwxMnwoNjMmdFtsKzFdKTw8Nnw2MyZ0W2wrMl0sbCs9M31lbHNle2lmKGk+Pj4zIT0zMCl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIFVURi04IHN0cmVhbTogQW4gaW52YWxpZCBsZWFkIGJ5dGUgdmFsdWUgZW5jb3VudGVyZWQgYXQgcG9zaXRpb24gXCIrbCk7aWYobCszPj1yKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgVVRGLTggc3RyZWFtOiBUcnVuY2F0ZWQgY29kZXBvaW50IHNlcXVlbmNlIGVuY291bnRlcmVkIGF0IHBvc2l0aW9uIFwiK2wpO289KDcmaSk8PDE4fCg2MyZ0W2wrMV0pPDwxMnwoNjMmdFtsKzJdKTw8Nnw2MyZ0W2wrM10sbCs9NH1hLmFwcGVuZENvZGVQb2ludChvKX1yZXR1cm4gYS5nZXRPdXRwdXRTdHJpbmcoKX0sbi5jcmVhdGVOYXRpdmVUZXh0RW5jb2RlckFuZERlY29kZXJJZkF2YWlsYWJsZT1mdW5jdGlvbigpe3JldHVybiEhcnx8XCJmdW5jdGlvblwiPT10eXBlb2YgVGV4dEVuY29kZXImJihyPW5ldyBUZXh0RW5jb2RlcihcInV0Zi04XCIpLG89bmV3IFRleHREZWNvZGVyKFwidXRmLThcIiksITApfX0odC5VVEY4fHwodC5VVEY4PXt9KSl9KGUuRW5jb2Rpbmd8fChlLkVuY29kaW5nPXt9KSl9KG98fChvPXt9KSksZnVuY3Rpb24oZSl7ZS5jb21wcmVzcz1mdW5jdGlvbih0LG4pe2lmKHZvaWQgMD09PW4mJihuPXt9KSxudWxsPT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJjb21wcmVzczogdW5kZWZpbmVkIG9yIG51bGwgaW5wdXQgcmVjZWl2ZWRcIik7dmFyIHI9ZS5Db21wcmVzc2lvbkNvbW1vbi5kZXRlY3RDb21wcmVzc2lvblNvdXJjZUVuY29kaW5nKHQpO249ZS5PYmplY3RUb29scy5vdmVycmlkZSh7aW5wdXRFbmNvZGluZzpyLG91dHB1dEVuY29kaW5nOlwiQnl0ZUFycmF5XCJ9LG4pO3ZhciBvPShuZXcgZS5Db21wcmVzc29yKS5jb21wcmVzc0Jsb2NrKHQpO3JldHVybiBlLkNvbXByZXNzaW9uQ29tbW9uLmVuY29kZUNvbXByZXNzZWRCeXRlcyhvLG4ub3V0cHV0RW5jb2RpbmcpfSxlLmRlY29tcHJlc3M9ZnVuY3Rpb24odCxuKXtpZih2b2lkIDA9PT1uJiYobj17fSksbnVsbD09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiZGVjb21wcmVzczogdW5kZWZpbmVkIG9yIG51bGwgaW5wdXQgcmVjZWl2ZWRcIik7bj1lLk9iamVjdFRvb2xzLm92ZXJyaWRlKHtpbnB1dEVuY29kaW5nOlwiQnl0ZUFycmF5XCIsb3V0cHV0RW5jb2Rpbmc6XCJTdHJpbmdcIn0sbik7dmFyIHI9ZS5Db21wcmVzc2lvbkNvbW1vbi5kZWNvZGVDb21wcmVzc2VkQnl0ZXModCxuLmlucHV0RW5jb2RpbmcpLG89KG5ldyBlLkRlY29tcHJlc3NvcikuZGVjb21wcmVzc0Jsb2NrKHIpO3JldHVybiBlLkNvbXByZXNzaW9uQ29tbW9uLmVuY29kZURlY29tcHJlc3NlZEJ5dGVzKG8sbi5vdXRwdXRFbmNvZGluZyl9LGUuY29tcHJlc3NBc3luYz1mdW5jdGlvbih0LG4scil7dmFyIG87bnVsbD09ciYmKHI9ZnVuY3Rpb24oKXt9KTt0cnl7bz1lLkNvbXByZXNzaW9uQ29tbW9uLmRldGVjdENvbXByZXNzaW9uU291cmNlRW5jb2RpbmcodCl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcih2b2lkIDAsZSl9bj1lLk9iamVjdFRvb2xzLm92ZXJyaWRlKHtpbnB1dEVuY29kaW5nOm8sb3V0cHV0RW5jb2Rpbmc6XCJCeXRlQXJyYXlcIix1c2VXZWJXb3JrZXI6ITAsYmxvY2tTaXplOjY1NTM2fSxuKSxlLmVucXVldWVJbW1lZGlhdGUoKGZ1bmN0aW9uKCl7bi51c2VXZWJXb3JrZXImJmUuV2ViV29ya2VyLmNyZWF0ZUdsb2JhbFdvcmtlcklmTmVlZGVkKCk/ZS5XZWJXb3JrZXIuY29tcHJlc3NBc3luYyh0LG4scik6ZS5Bc3luY0NvbXByZXNzb3IuY29tcHJlc3NBc3luYyh0LG4scil9KSl9LGUuZGVjb21wcmVzc0FzeW5jPWZ1bmN0aW9uKHQsbixyKXtpZihudWxsPT1yJiYocj1mdW5jdGlvbigpe30pLG51bGwhPXQpe249ZS5PYmplY3RUb29scy5vdmVycmlkZSh7aW5wdXRFbmNvZGluZzpcIkJ5dGVBcnJheVwiLG91dHB1dEVuY29kaW5nOlwiU3RyaW5nXCIsdXNlV2ViV29ya2VyOiEwLGJsb2NrU2l6ZTo2NTUzNn0sbik7dmFyIG89ZS5CdWZmZXJUb29scy5jb252ZXJ0VG9VaW50OEFycmF5SWZOZWVkZWQodCk7ZS5FdmVudExvb3AuZW5xdWV1ZUltbWVkaWF0ZSgoZnVuY3Rpb24oKXtuLnVzZVdlYldvcmtlciYmZS5XZWJXb3JrZXIuY3JlYXRlR2xvYmFsV29ya2VySWZOZWVkZWQoKT9lLldlYldvcmtlci5kZWNvbXByZXNzQXN5bmMobyxuLHIpOmUuQXN5bmNEZWNvbXByZXNzb3IuZGVjb21wcmVzc0FzeW5jKHQsbixyKX0pKX1lbHNlIHIodm9pZCAwLG5ldyBUeXBlRXJyb3IoXCJkZWNvbXByZXNzQXN5bmM6IHVuZGVmaW5lZCBvciBudWxsIGlucHV0IHJlY2VpdmVkXCIpKX0sZS5jcmVhdGVDb21wcmVzc2lvblN0cmVhbT1mdW5jdGlvbigpe3JldHVybiBlLkFzeW5jQ29tcHJlc3Nvci5jcmVhdGVDb21wcmVzc2lvblN0cmVhbSgpfSxlLmNyZWF0ZURlY29tcHJlc3Npb25TdHJlYW09ZnVuY3Rpb24oKXtyZXR1cm4gZS5Bc3luY0RlY29tcHJlc3Nvci5jcmVhdGVEZWNvbXByZXNzaW9uU3RyZWFtKCl9LGUuZW5jb2RlVVRGOD1mdW5jdGlvbih0KXtyZXR1cm4gZS5FbmNvZGluZy5VVEY4LmVuY29kZSh0KX0sZS5kZWNvZGVVVEY4PWZ1bmN0aW9uKHQpe3JldHVybiBlLkVuY29kaW5nLlVURjguZGVjb2RlKHQpfSxlLmVuY29kZUJhc2U2ND1mdW5jdGlvbih0KXtyZXR1cm4gZS5FbmNvZGluZy5CYXNlNjQuZW5jb2RlKHQpfSxlLmRlY29kZUJhc2U2ND1mdW5jdGlvbih0KXtyZXR1cm4gZS5FbmNvZGluZy5CYXNlNjQuZGVjb2RlKHQpfSxlLmVuY29kZUJpbmFyeVN0cmluZz1mdW5jdGlvbih0KXtyZXR1cm4gZS5FbmNvZGluZy5CaW5hcnlTdHJpbmcuZW5jb2RlKHQpfSxlLmRlY29kZUJpbmFyeVN0cmluZz1mdW5jdGlvbih0KXtyZXR1cm4gZS5FbmNvZGluZy5CaW5hcnlTdHJpbmcuZGVjb2RlKHQpfSxlLmVuY29kZVN0b3JhZ2VCaW5hcnlTdHJpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGUuRW5jb2RpbmcuU3RvcmFnZUJpbmFyeVN0cmluZy5lbmNvZGUodCl9LGUuZGVjb2RlU3RvcmFnZUJpbmFyeVN0cmluZz1mdW5jdGlvbih0KXtyZXR1cm4gZS5FbmNvZGluZy5TdG9yYWdlQmluYXJ5U3RyaW5nLmRlY29kZSh0KX19KG98fChvPXt9KSl9LDM3NDooZSx0LG4pPT57Y29uc3R7QWJvcnRFcnJvcjpyLGNvZGVzOm99PW4oMTQxKSx7aXNOb2RlU3RyZWFtOmksaXNXZWJTdHJlYW06YSxrQ29udHJvbGxlckVycm9yRnVuY3Rpb246bH09bigxMzIpLHM9big4Nikse0VSUl9JTlZBTElEX0FSR19UWVBFOmN9PW87ZS5leHBvcnRzLmFkZEFib3J0U2lnbmFsPWZ1bmN0aW9uKHQsbil7aWYoKChlLHQpPT57aWYoXCJvYmplY3RcIiE9dHlwZW9mIGV8fCEoXCJhYm9ydGVkXCJpbiBlKSl0aHJvdyBuZXcgYyhcInNpZ25hbFwiLFwiQWJvcnRTaWduYWxcIixlKX0pKHQpLCFpKG4pJiYhYShuKSl0aHJvdyBuZXcgYyhcInN0cmVhbVwiLFtcIlJlYWRhYmxlU3RyZWFtXCIsXCJXcml0YWJsZVN0cmVhbVwiLFwiU3RyZWFtXCJdLG4pO3JldHVybiBlLmV4cG9ydHMuYWRkQWJvcnRTaWduYWxOb1ZhbGlkYXRlKHQsbil9LGUuZXhwb3J0cy5hZGRBYm9ydFNpZ25hbE5vVmFsaWRhdGU9ZnVuY3Rpb24oZSx0KXtpZihcIm9iamVjdFwiIT10eXBlb2YgZXx8IShcImFib3J0ZWRcImluIGUpKXJldHVybiB0O2NvbnN0IG49aSh0KT8oKT0+e3QuZGVzdHJveShuZXcgcih2b2lkIDAse2NhdXNlOmUucmVhc29ufSkpfTooKT0+e3RbbF0obmV3IHIodm9pZCAwLHtjYXVzZTplLnJlYXNvbn0pKX07cmV0dXJuIGUuYWJvcnRlZD9uKCk6KGUuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsbikscyh0LCgoKT0+ZS5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIixuKSkpKSx0fX0sNjE2OihlLHQsbik9Pntjb25zdHtTdHJpbmdQcm90b3R5cGVTbGljZTpyLFN5bWJvbEl0ZXJhdG9yOm8sVHlwZWRBcnJheVByb3RvdHlwZVNldDppLFVpbnQ4QXJyYXk6YX09bigxOTEpLHtCdWZmZXI6bH09big0ODUpLHtpbnNwZWN0OnN9PW4oNzc1KTtlLmV4cG9ydHM9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfXB1c2goZSl7Y29uc3QgdD17ZGF0YTplLG5leHQ6bnVsbH07dGhpcy5sZW5ndGg+MD90aGlzLnRhaWwubmV4dD10OnRoaXMuaGVhZD10LHRoaXMudGFpbD10LCsrdGhpcy5sZW5ndGh9dW5zaGlmdChlKXtjb25zdCB0PXtkYXRhOmUsbmV4dDp0aGlzLmhlYWR9OzA9PT10aGlzLmxlbmd0aCYmKHRoaXMudGFpbD10KSx0aGlzLmhlYWQ9dCwrK3RoaXMubGVuZ3RofXNoaWZ0KCl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybjtjb25zdCBlPXRoaXMuaGVhZC5kYXRhO3JldHVybiAxPT09dGhpcy5sZW5ndGg/dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsOnRoaXMuaGVhZD10aGlzLmhlYWQubmV4dCwtLXRoaXMubGVuZ3RoLGV9Y2xlYXIoKXt0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH1qb2luKGUpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm5cIlwiO2xldCB0PXRoaXMuaGVhZCxuPVwiXCIrdC5kYXRhO2Zvcig7bnVsbCE9PSh0PXQubmV4dCk7KW4rPWUrdC5kYXRhO3JldHVybiBufWNvbmNhdChlKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIGwuYWxsb2MoMCk7Y29uc3QgdD1sLmFsbG9jVW5zYWZlKGU+Pj4wKTtsZXQgbj10aGlzLmhlYWQscj0wO2Zvcig7bjspaSh0LG4uZGF0YSxyKSxyKz1uLmRhdGEubGVuZ3RoLG49bi5uZXh0O3JldHVybiB0fWNvbnN1bWUoZSx0KXtjb25zdCBuPXRoaXMuaGVhZC5kYXRhO2lmKGU8bi5sZW5ndGgpe2NvbnN0IHQ9bi5zbGljZSgwLGUpO3JldHVybiB0aGlzLmhlYWQuZGF0YT1uLnNsaWNlKGUpLHR9cmV0dXJuIGU9PT1uLmxlbmd0aD90aGlzLnNoaWZ0KCk6dD90aGlzLl9nZXRTdHJpbmcoZSk6dGhpcy5fZ2V0QnVmZmVyKGUpfWZpcnN0KCl7cmV0dXJuIHRoaXMuaGVhZC5kYXRhfSpbb10oKXtmb3IobGV0IGU9dGhpcy5oZWFkO2U7ZT1lLm5leHQpeWllbGQgZS5kYXRhfV9nZXRTdHJpbmcoZSl7bGV0IHQ9XCJcIixuPXRoaXMuaGVhZCxvPTA7ZG97Y29uc3QgaT1uLmRhdGE7aWYoIShlPmkubGVuZ3RoKSl7ZT09PWkubGVuZ3RoPyh0Kz1pLCsrbyxuLm5leHQ/dGhpcy5oZWFkPW4ubmV4dDp0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwpOih0Kz1yKGksMCxlKSx0aGlzLmhlYWQ9bixuLmRhdGE9cihpLGUpKTticmVha310Kz1pLGUtPWkubGVuZ3RoLCsrb313aGlsZShudWxsIT09KG49bi5uZXh0KSk7cmV0dXJuIHRoaXMubGVuZ3RoLT1vLHR9X2dldEJ1ZmZlcihlKXtjb25zdCB0PWwuYWxsb2NVbnNhZmUoZSksbj1lO2xldCByPXRoaXMuaGVhZCxvPTA7ZG97Y29uc3QgbD1yLmRhdGE7aWYoIShlPmwubGVuZ3RoKSl7ZT09PWwubGVuZ3RoPyhpKHQsbCxuLWUpLCsrbyxyLm5leHQ/dGhpcy5oZWFkPXIubmV4dDp0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwpOihpKHQsbmV3IGEobC5idWZmZXIsbC5ieXRlT2Zmc2V0LGUpLG4tZSksdGhpcy5oZWFkPXIsci5kYXRhPWwuc2xpY2UoZSkpO2JyZWFrfWkodCxsLG4tZSksZS09bC5sZW5ndGgsKytvfXdoaWxlKG51bGwhPT0ocj1yLm5leHQpKTtyZXR1cm4gdGhpcy5sZW5ndGgtPW8sdH1bU3ltYm9sLmZvcihcIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tXCIpXShlLHQpe3JldHVybiBzKHRoaXMsey4uLnQsZGVwdGg6MCxjdXN0b21JbnNwZWN0OiExfSl9fX0sODE4OihlLHQsbik9Pntjb25zdHtwaXBlbGluZTpyfT1uKDc1NCksbz1uKDE4Mikse2Rlc3Ryb3llcjppfT1uKDIzMCkse2lzTm9kZVN0cmVhbTphLGlzUmVhZGFibGU6bCxpc1dyaXRhYmxlOnMsaXNXZWJTdHJlYW06Yyxpc1RyYW5zZm9ybVN0cmVhbTp1LGlzV3JpdGFibGVTdHJlYW06Zixpc1JlYWRhYmxlU3RyZWFtOmR9PW4oMTMyKSx7QWJvcnRFcnJvcjpwLGNvZGVzOntFUlJfSU5WQUxJRF9BUkdfVkFMVUU6aCxFUlJfTUlTU0lOR19BUkdTOmd9fT1uKDE0MSksdj1uKDg2KTtlLmV4cG9ydHM9ZnVuY3Rpb24oLi4uZSl7aWYoMD09PWUubGVuZ3RoKXRocm93IG5ldyBnKFwic3RyZWFtc1wiKTtpZigxPT09ZS5sZW5ndGgpcmV0dXJuIG8uZnJvbShlWzBdKTtjb25zdCB0PVsuLi5lXTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlWzBdJiYoZVswXT1vLmZyb20oZVswXSkpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGVbZS5sZW5ndGgtMV0pe2NvbnN0IHQ9ZS5sZW5ndGgtMTtlW3RdPW8uZnJvbShlW3RdKX1mb3IobGV0IG49MDtuPGUubGVuZ3RoOysrbilpZihhKGVbbl0pfHxjKGVbbl0pKXtpZihuPGUubGVuZ3RoLTEmJiEobChlW25dKXx8ZChlW25dKXx8dShlW25dKSkpdGhyb3cgbmV3IGgoYHN0cmVhbXNbJHtufV1gLHRbbl0sXCJtdXN0IGJlIHJlYWRhYmxlXCIpO2lmKG4+MCYmIShzKGVbbl0pfHxmKGVbbl0pfHx1KGVbbl0pKSl0aHJvdyBuZXcgaChgc3RyZWFtc1ske259XWAsdFtuXSxcIm11c3QgYmUgd3JpdGFibGVcIil9bGV0IG4sbSxDLHksdztjb25zdCBiPWVbMF0seD1yKGUsKGZ1bmN0aW9uKGUpe2NvbnN0IHQ9eTt5PW51bGwsdD90KGUpOmU/dy5kZXN0cm95KGUpOk98fF98fHcuZGVzdHJveSgpfSkpLF89ISEocyhiKXx8ZihiKXx8dShiKSksTz0hIShsKHgpfHxkKHgpfHx1KHgpKTtpZih3PW5ldyBvKHt3cml0YWJsZU9iamVjdE1vZGU6IShudWxsPT1ifHwhYi53cml0YWJsZU9iamVjdE1vZGUpLHJlYWRhYmxlT2JqZWN0TW9kZTohKG51bGw9PXh8fCF4LndyaXRhYmxlT2JqZWN0TW9kZSksd3JpdGFibGU6XyxyZWFkYWJsZTpPfSksXyl7aWYoYShiKSl3Ll93cml0ZT1mdW5jdGlvbihlLHQscil7Yi53cml0ZShlLHQpP3IoKTpuPXJ9LHcuX2ZpbmFsPWZ1bmN0aW9uKGUpe2IuZW5kKCksbT1lfSxiLm9uKFwiZHJhaW5cIiwoZnVuY3Rpb24oKXtpZihuKXtjb25zdCBlPW47bj1udWxsLGUoKX19KSk7ZWxzZSBpZihjKGIpKXtjb25zdCBlPSh1KGIpP2Iud3JpdGFibGU6YikuZ2V0V3JpdGVyKCk7dy5fd3JpdGU9YXN5bmMgZnVuY3Rpb24odCxuLHIpe3RyeXthd2FpdCBlLnJlYWR5LGUud3JpdGUodCkuY2F0Y2goKCgpPT57fSkpLHIoKX1jYXRjaChlKXtyKGUpfX0sdy5fZmluYWw9YXN5bmMgZnVuY3Rpb24odCl7dHJ5e2F3YWl0IGUucmVhZHksZS5jbG9zZSgpLmNhdGNoKCgoKT0+e30pKSxtPXR9Y2F0Y2goZSl7dChlKX19fWNvbnN0IGU9dSh4KT94LnJlYWRhYmxlOng7dihlLCgoKT0+e2lmKG0pe2NvbnN0IGU9bTttPW51bGwsZSgpfX0pKX1pZihPKWlmKGEoeCkpeC5vbihcInJlYWRhYmxlXCIsKGZ1bmN0aW9uKCl7aWYoQyl7Y29uc3QgZT1DO0M9bnVsbCxlKCl9fSkpLHgub24oXCJlbmRcIiwoZnVuY3Rpb24oKXt3LnB1c2gobnVsbCl9KSksdy5fcmVhZD1mdW5jdGlvbigpe2Zvcig7Oyl7Y29uc3QgZT14LnJlYWQoKTtpZihudWxsPT09ZSlyZXR1cm4gdm9pZChDPXcuX3JlYWQpO2lmKCF3LnB1c2goZSkpcmV0dXJufX07ZWxzZSBpZihjKHgpKXtjb25zdCBlPSh1KHgpP3gucmVhZGFibGU6eCkuZ2V0UmVhZGVyKCk7dy5fcmVhZD1hc3luYyBmdW5jdGlvbigpe2Zvcig7Oyl0cnl7Y29uc3R7dmFsdWU6dCxkb25lOm59PWF3YWl0IGUucmVhZCgpO2lmKCF3LnB1c2godCkpcmV0dXJuO2lmKG4pcmV0dXJuIHZvaWQgdy5wdXNoKG51bGwpfWNhdGNoe3JldHVybn19fXJldHVybiB3Ll9kZXN0cm95PWZ1bmN0aW9uKGUsdCl7ZXx8bnVsbD09PXl8fChlPW5ldyBwKSxDPW51bGwsbj1udWxsLG09bnVsbCxudWxsPT09eT90KGUpOih5PXQsYSh4KSYmaSh4LGUpKX0sd319LDIzMDooZSx0LG4pPT57Y29uc3Qgcj1uKDUzMykse2FnZ3JlZ2F0ZVR3b0Vycm9yczpvLGNvZGVzOntFUlJfTVVMVElQTEVfQ0FMTEJBQ0s6aX0sQWJvcnRFcnJvcjphfT1uKDE0MSkse1N5bWJvbDpsfT1uKDE5MSkse2tEZXN0cm95ZWQ6cyxpc0Rlc3Ryb3llZDpjLGlzRmluaXNoZWQ6dSxpc1NlcnZlclJlcXVlc3Q6Zn09bigxMzIpLGQ9bChcImtEZXN0cm95XCIpLHA9bChcImtDb25zdHJ1Y3RcIik7ZnVuY3Rpb24gaChlLHQsbil7ZSYmKGUuc3RhY2ssdCYmIXQuZXJyb3JlZCYmKHQuZXJyb3JlZD1lKSxuJiYhbi5lcnJvcmVkJiYobi5lcnJvcmVkPWUpKX1mdW5jdGlvbiBnKGUsdCxuKXtsZXQgbz0hMTtmdW5jdGlvbiBpKHQpe2lmKG8pcmV0dXJuO289ITA7Y29uc3QgaT1lLl9yZWFkYWJsZVN0YXRlLGE9ZS5fd3JpdGFibGVTdGF0ZTtoKHQsYSxpKSxhJiYoYS5jbG9zZWQ9ITApLGkmJihpLmNsb3NlZD0hMCksXCJmdW5jdGlvblwiPT10eXBlb2YgbiYmbih0KSx0P3IubmV4dFRpY2sodixlLHQpOnIubmV4dFRpY2sobSxlKX10cnl7ZS5fZGVzdHJveSh0fHxudWxsLGkpfWNhdGNoKHQpe2kodCl9fWZ1bmN0aW9uIHYoZSx0KXtDKGUsdCksbShlKX1mdW5jdGlvbiBtKGUpe2NvbnN0IHQ9ZS5fcmVhZGFibGVTdGF0ZSxuPWUuX3dyaXRhYmxlU3RhdGU7biYmKG4uY2xvc2VFbWl0dGVkPSEwKSx0JiYodC5jbG9zZUVtaXR0ZWQ9ITApLChudWxsIT1uJiZuLmVtaXRDbG9zZXx8bnVsbCE9dCYmdC5lbWl0Q2xvc2UpJiZlLmVtaXQoXCJjbG9zZVwiKX1mdW5jdGlvbiBDKGUsdCl7Y29uc3Qgbj1lLl9yZWFkYWJsZVN0YXRlLHI9ZS5fd3JpdGFibGVTdGF0ZTtudWxsIT1yJiZyLmVycm9yRW1pdHRlZHx8bnVsbCE9biYmbi5lcnJvckVtaXR0ZWR8fChyJiYoci5lcnJvckVtaXR0ZWQ9ITApLG4mJihuLmVycm9yRW1pdHRlZD0hMCksZS5lbWl0KFwiZXJyb3JcIix0KSl9ZnVuY3Rpb24geShlLHQsbil7Y29uc3Qgbz1lLl9yZWFkYWJsZVN0YXRlLGk9ZS5fd3JpdGFibGVTdGF0ZTtpZihudWxsIT1pJiZpLmRlc3Ryb3llZHx8bnVsbCE9byYmby5kZXN0cm95ZWQpcmV0dXJuIHRoaXM7bnVsbCE9byYmby5hdXRvRGVzdHJveXx8bnVsbCE9aSYmaS5hdXRvRGVzdHJveT9lLmRlc3Ryb3kodCk6dCYmKHQuc3RhY2ssaSYmIWkuZXJyb3JlZCYmKGkuZXJyb3JlZD10KSxvJiYhby5lcnJvcmVkJiYoby5lcnJvcmVkPXQpLG4/ci5uZXh0VGljayhDLGUsdCk6QyhlLHQpKX1mdW5jdGlvbiB3KGUpe2xldCB0PSExO2Z1bmN0aW9uIG4obil7aWYodClyZXR1cm4gdm9pZCB5KGUsbnVsbCE9bj9uOm5ldyBpKTt0PSEwO2NvbnN0IG89ZS5fcmVhZGFibGVTdGF0ZSxhPWUuX3dyaXRhYmxlU3RhdGUsbD1hfHxvO28mJihvLmNvbnN0cnVjdGVkPSEwKSxhJiYoYS5jb25zdHJ1Y3RlZD0hMCksbC5kZXN0cm95ZWQ/ZS5lbWl0KGQsbik6bj95KGUsbiwhMCk6ci5uZXh0VGljayhiLGUpfXRyeXtlLl9jb25zdHJ1Y3QoKGU9PntyLm5leHRUaWNrKG4sZSl9KSl9Y2F0Y2goZSl7ci5uZXh0VGljayhuLGUpfX1mdW5jdGlvbiBiKGUpe2UuZW1pdChwKX1mdW5jdGlvbiB4KGUpe3JldHVybihudWxsPT1lP3ZvaWQgMDplLnNldEhlYWRlcikmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuYWJvcnR9ZnVuY3Rpb24gXyhlKXtlLmVtaXQoXCJjbG9zZVwiKX1mdW5jdGlvbiBPKGUsdCl7ZS5lbWl0KFwiZXJyb3JcIix0KSxyLm5leHRUaWNrKF8sZSl9ZS5leHBvcnRzPXtjb25zdHJ1Y3Q6ZnVuY3Rpb24oZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlLl9jb25zdHJ1Y3QpcmV0dXJuO2NvbnN0IG49ZS5fcmVhZGFibGVTdGF0ZSxvPWUuX3dyaXRhYmxlU3RhdGU7biYmKG4uY29uc3RydWN0ZWQ9ITEpLG8mJihvLmNvbnN0cnVjdGVkPSExKSxlLm9uY2UocCx0KSxlLmxpc3RlbmVyQ291bnQocCk+MXx8ci5uZXh0VGljayh3LGUpfSxkZXN0cm95ZXI6ZnVuY3Rpb24oZSx0KXtlJiYhYyhlKSYmKHR8fHUoZSl8fCh0PW5ldyBhKSxmKGUpPyhlLnNvY2tldD1udWxsLGUuZGVzdHJveSh0KSk6eChlKT9lLmFib3J0KCk6eChlLnJlcSk/ZS5yZXEuYWJvcnQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmRlc3Ryb3k/ZS5kZXN0cm95KHQpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuY2xvc2U/ZS5jbG9zZSgpOnQ/ci5uZXh0VGljayhPLGUsdCk6ci5uZXh0VGljayhfLGUpLGUuZGVzdHJveWVkfHwoZVtzXT0hMCkpfSxkZXN0cm95OmZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj10aGlzLl9yZWFkYWJsZVN0YXRlLHI9dGhpcy5fd3JpdGFibGVTdGF0ZSxpPXJ8fG47cmV0dXJuIG51bGwhPXImJnIuZGVzdHJveWVkfHxudWxsIT1uJiZuLmRlc3Ryb3llZD8oXCJmdW5jdGlvblwiPT10eXBlb2YgdCYmdCgpLHRoaXMpOihoKGUscixuKSxyJiYoci5kZXN0cm95ZWQ9ITApLG4mJihuLmRlc3Ryb3llZD0hMCksaS5jb25zdHJ1Y3RlZD9nKHRoaXMsZSx0KTp0aGlzLm9uY2UoZCwoZnVuY3Rpb24obil7Zyh0aGlzLG8obixlKSx0KX0pKSx0aGlzKX0sdW5kZXN0cm95OmZ1bmN0aW9uKCl7Y29uc3QgZT10aGlzLl9yZWFkYWJsZVN0YXRlLHQ9dGhpcy5fd3JpdGFibGVTdGF0ZTtlJiYoZS5jb25zdHJ1Y3RlZD0hMCxlLmNsb3NlZD0hMSxlLmNsb3NlRW1pdHRlZD0hMSxlLmRlc3Ryb3llZD0hMSxlLmVycm9yZWQ9bnVsbCxlLmVycm9yRW1pdHRlZD0hMSxlLnJlYWRpbmc9ITEsZS5lbmRlZD0hMT09PWUucmVhZGFibGUsZS5lbmRFbWl0dGVkPSExPT09ZS5yZWFkYWJsZSksdCYmKHQuY29uc3RydWN0ZWQ9ITAsdC5kZXN0cm95ZWQ9ITEsdC5jbG9zZWQ9ITEsdC5jbG9zZUVtaXR0ZWQ9ITEsdC5lcnJvcmVkPW51bGwsdC5lcnJvckVtaXR0ZWQ9ITEsdC5maW5hbENhbGxlZD0hMSx0LnByZWZpbmlzaGVkPSExLHQuZW5kZWQ9ITE9PT10LndyaXRhYmxlLHQuZW5kaW5nPSExPT09dC53cml0YWJsZSx0LmZpbmlzaGVkPSExPT09dC53cml0YWJsZSl9LGVycm9yT3JEZXN0cm95Onl9fSwxODI6KGUsdCxuKT0+e2NvbnN0e09iamVjdERlZmluZVByb3BlcnRpZXM6cixPYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6byxPYmplY3RLZXlzOmksT2JqZWN0U2V0UHJvdG90eXBlT2Y6YX09bigxOTEpO2UuZXhwb3J0cz1jO2NvbnN0IGw9big4NTgpLHM9bigzNzMpO2EoYy5wcm90b3R5cGUsbC5wcm90b3R5cGUpLGEoYyxsKTt7Y29uc3QgZT1pKHMucHJvdG90eXBlKTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7Y29uc3Qgbj1lW3RdO2MucHJvdG90eXBlW25dfHwoYy5wcm90b3R5cGVbbl09cy5wcm90b3R5cGVbbl0pfX1mdW5jdGlvbiBjKGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGMpKXJldHVybiBuZXcgYyhlKTtsLmNhbGwodGhpcyxlKSxzLmNhbGwodGhpcyxlKSxlPyh0aGlzLmFsbG93SGFsZk9wZW49ITEhPT1lLmFsbG93SGFsZk9wZW4sITE9PT1lLnJlYWRhYmxlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkYWJsZT0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkPSEwLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZD0hMCksITE9PT1lLndyaXRhYmxlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS53cml0YWJsZT0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZz0hMCx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkPSEwLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ9ITApKTp0aGlzLmFsbG93SGFsZk9wZW49ITB9bGV0IHUsZjtmdW5jdGlvbiBkKCl7cmV0dXJuIHZvaWQgMD09PXUmJih1PXt9KSx1fXIoYy5wcm90b3R5cGUse3dyaXRhYmxlOntfX3Byb3RvX186bnVsbCwuLi5vKHMucHJvdG90eXBlLFwid3JpdGFibGVcIil9LHdyaXRhYmxlSGlnaFdhdGVyTWFyazp7X19wcm90b19fOm51bGwsLi4ubyhzLnByb3RvdHlwZSxcIndyaXRhYmxlSGlnaFdhdGVyTWFya1wiKX0sd3JpdGFibGVPYmplY3RNb2RlOntfX3Byb3RvX186bnVsbCwuLi5vKHMucHJvdG90eXBlLFwid3JpdGFibGVPYmplY3RNb2RlXCIpfSx3cml0YWJsZUJ1ZmZlcjp7X19wcm90b19fOm51bGwsLi4ubyhzLnByb3RvdHlwZSxcIndyaXRhYmxlQnVmZmVyXCIpfSx3cml0YWJsZUxlbmd0aDp7X19wcm90b19fOm51bGwsLi4ubyhzLnByb3RvdHlwZSxcIndyaXRhYmxlTGVuZ3RoXCIpfSx3cml0YWJsZUZpbmlzaGVkOntfX3Byb3RvX186bnVsbCwuLi5vKHMucHJvdG90eXBlLFwid3JpdGFibGVGaW5pc2hlZFwiKX0sd3JpdGFibGVDb3JrZWQ6e19fcHJvdG9fXzpudWxsLC4uLm8ocy5wcm90b3R5cGUsXCJ3cml0YWJsZUNvcmtlZFwiKX0sd3JpdGFibGVFbmRlZDp7X19wcm90b19fOm51bGwsLi4ubyhzLnByb3RvdHlwZSxcIndyaXRhYmxlRW5kZWRcIil9LHdyaXRhYmxlTmVlZERyYWluOntfX3Byb3RvX186bnVsbCwuLi5vKHMucHJvdG90eXBlLFwid3JpdGFibGVOZWVkRHJhaW5cIil9LGRlc3Ryb3llZDp7X19wcm90b19fOm51bGwsZ2V0KCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0KGUpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD1lLHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPWUpfX19KSxjLmZyb21XZWI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZCgpLm5ld1N0cmVhbUR1cGxleEZyb21SZWFkYWJsZVdyaXRhYmxlUGFpcihlLHQpfSxjLnRvV2ViPWZ1bmN0aW9uKGUpe3JldHVybiBkKCkubmV3UmVhZGFibGVXcml0YWJsZVBhaXJGcm9tRHVwbGV4KGUpfSxjLmZyb209ZnVuY3Rpb24oZSl7cmV0dXJuIGZ8fChmPW4oNzQ5KSksZihlLFwiYm9keVwiKX19LDc0OTooZSx0LG4pPT57Y29uc3Qgcj1uKDUzMyksbz1uKDQ4NSkse2lzUmVhZGFibGU6aSxpc1dyaXRhYmxlOmEsaXNJdGVyYWJsZTpsLGlzTm9kZVN0cmVhbTpzLGlzUmVhZGFibGVOb2RlU3RyZWFtOmMsaXNXcml0YWJsZU5vZGVTdHJlYW06dSxpc0R1cGxleE5vZGVTdHJlYW06Zn09bigxMzIpLGQ9big4Nikse0Fib3J0RXJyb3I6cCxjb2Rlczp7RVJSX0lOVkFMSURfQVJHX1RZUEU6aCxFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUU6Z319PW4oMTQxKSx7ZGVzdHJveWVyOnZ9PW4oMjMwKSxtPW4oMTgyKSxDPW4oODU4KSx7Y3JlYXRlRGVmZXJyZWRQcm9taXNlOnl9PW4oNzc1KSx3PW4oOTEzKSxiPWdsb2JhbFRoaXMuQmxvYnx8by5CbG9iLHg9dm9pZCAwIT09Yj9mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGJ9OmZ1bmN0aW9uKGUpe3JldHVybiExfSxfPWdsb2JhbFRoaXMuQWJvcnRDb250cm9sbGVyfHxuKDg3NikuQWJvcnRDb250cm9sbGVyLHtGdW5jdGlvblByb3RvdHlwZUNhbGw6T309bigxOTEpO2NsYXNzIEwgZXh0ZW5kcyBte2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLCExPT09KG51bGw9PWU/dm9pZCAwOmUucmVhZGFibGUpJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkYWJsZT0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkPSEwLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZD0hMCksITE9PT0obnVsbD09ZT92b2lkIDA6ZS53cml0YWJsZSkmJih0aGlzLl93cml0YWJsZVN0YXRlLndyaXRhYmxlPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nPSEwLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQ9ITAsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZD0hMCl9fWZ1bmN0aW9uIEUoZSl7Y29uc3QgdD1lLnJlYWRhYmxlJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlLnJlYWRhYmxlLnJlYWQ/Qy53cmFwKGUucmVhZGFibGUpOmUucmVhZGFibGUsbj1lLndyaXRhYmxlO2xldCByLG8sbCxzLGMsdT0hIWkodCksZj0hIWEobik7ZnVuY3Rpb24gaChlKXtjb25zdCB0PXM7cz1udWxsLHQ/dChlKTplJiZjLmRlc3Ryb3koZSl9cmV0dXJuIGM9bmV3IEwoe3JlYWRhYmxlT2JqZWN0TW9kZTohKG51bGw9PXR8fCF0LnJlYWRhYmxlT2JqZWN0TW9kZSksd3JpdGFibGVPYmplY3RNb2RlOiEobnVsbD09bnx8IW4ud3JpdGFibGVPYmplY3RNb2RlKSxyZWFkYWJsZTp1LHdyaXRhYmxlOmZ9KSxmJiYoZChuLChlPT57Zj0hMSxlJiZ2KHQsZSksaChlKX0pKSxjLl93cml0ZT1mdW5jdGlvbihlLHQsbyl7bi53cml0ZShlLHQpP28oKTpyPW99LGMuX2ZpbmFsPWZ1bmN0aW9uKGUpe24uZW5kKCksbz1lfSxuLm9uKFwiZHJhaW5cIiwoZnVuY3Rpb24oKXtpZihyKXtjb25zdCBlPXI7cj1udWxsLGUoKX19KSksbi5vbihcImZpbmlzaFwiLChmdW5jdGlvbigpe2lmKG8pe2NvbnN0IGU9bztvPW51bGwsZSgpfX0pKSksdSYmKGQodCwoZT0+e3U9ITEsZSYmdih0LGUpLGgoZSl9KSksdC5vbihcInJlYWRhYmxlXCIsKGZ1bmN0aW9uKCl7aWYobCl7Y29uc3QgZT1sO2w9bnVsbCxlKCl9fSkpLHQub24oXCJlbmRcIiwoZnVuY3Rpb24oKXtjLnB1c2gobnVsbCl9KSksYy5fcmVhZD1mdW5jdGlvbigpe2Zvcig7Oyl7Y29uc3QgZT10LnJlYWQoKTtpZihudWxsPT09ZSlyZXR1cm4gdm9pZChsPWMuX3JlYWQpO2lmKCFjLnB1c2goZSkpcmV0dXJufX0pLGMuX2Rlc3Ryb3k9ZnVuY3Rpb24oZSxpKXtlfHxudWxsPT09c3x8KGU9bmV3IHApLGw9bnVsbCxyPW51bGwsbz1udWxsLG51bGw9PT1zP2koZSk6KHM9aSx2KG4sZSksdih0LGUpKX0sY31lLmV4cG9ydHM9ZnVuY3Rpb24gZSh0LG4pe2lmKGYodCkpcmV0dXJuIHQ7aWYoYyh0KSlyZXR1cm4gRSh7cmVhZGFibGU6dH0pO2lmKHUodCkpcmV0dXJuIEUoe3dyaXRhYmxlOnR9KTtpZihzKHQpKXJldHVybiBFKHt3cml0YWJsZTohMSxyZWFkYWJsZTohMX0pO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpe2NvbnN0e3ZhbHVlOmUsd3JpdGU6byxmaW5hbDppLGRlc3Ryb3k6YX09ZnVuY3Rpb24oZSl7bGV0e3Byb21pc2U6dCxyZXNvbHZlOm59PXkoKTtjb25zdCBvPW5ldyBfLGk9by5zaWduYWwsYT1lKGFzeW5jIGZ1bmN0aW9uKigpe2Zvcig7Oyl7Y29uc3QgZT10O3Q9bnVsbDtjb25zdHtjaHVuazpvLGRvbmU6YSxjYjpsfT1hd2FpdCBlO2lmKHIubmV4dFRpY2sobCksYSlyZXR1cm47aWYoaS5hYm9ydGVkKXRocm93IG5ldyBwKHZvaWQgMCx7Y2F1c2U6aS5yZWFzb259KTsoe3Byb21pc2U6dCxyZXNvbHZlOm59PXkoKSkseWllbGQgb319KCkse3NpZ25hbDppfSk7cmV0dXJue3ZhbHVlOmEsd3JpdGUoZSx0LHIpe2NvbnN0IG89bjtuPW51bGwsbyh7Y2h1bms6ZSxkb25lOiExLGNiOnJ9KX0sZmluYWwoZSl7Y29uc3QgdD1uO249bnVsbCx0KHtkb25lOiEwLGNiOmV9KX0sZGVzdHJveShlLHQpe28uYWJvcnQoKSx0KGUpfX19KHQpO2lmKGwoZSkpcmV0dXJuIHcoTCxlLHtvYmplY3RNb2RlOiEwLHdyaXRlOm8sZmluYWw6aSxkZXN0cm95OmF9KTtjb25zdCBzPW51bGw9PWU/dm9pZCAwOmUudGhlbjtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBzKXtsZXQgdDtjb25zdCBuPU8ocyxlLChlPT57aWYobnVsbCE9ZSl0aHJvdyBuZXcgZyhcIm51bGx5XCIsXCJib2R5XCIsZSl9KSwoZT0+e3YodCxlKX0pKTtyZXR1cm4gdD1uZXcgTCh7b2JqZWN0TW9kZTohMCxyZWFkYWJsZTohMSx3cml0ZTpvLGZpbmFsKGUpe2koKGFzeW5jKCk9Pnt0cnl7YXdhaXQgbixyLm5leHRUaWNrKGUsbnVsbCl9Y2F0Y2godCl7ci5uZXh0VGljayhlLHQpfX0pKX0sZGVzdHJveTphfSl9dGhyb3cgbmV3IGcoXCJJdGVyYWJsZSwgQXN5bmNJdGVyYWJsZSBvciBBc3luY0Z1bmN0aW9uXCIsbixlKX1pZih4KHQpKXJldHVybiBlKHQuYXJyYXlCdWZmZXIoKSk7aWYobCh0KSlyZXR1cm4gdyhMLHQse29iamVjdE1vZGU6ITAsd3JpdGFibGU6ITF9KTtpZihcIm9iamVjdFwiPT10eXBlb2YobnVsbD09dD92b2lkIDA6dC53cml0YWJsZSl8fFwib2JqZWN0XCI9PXR5cGVvZihudWxsPT10P3ZvaWQgMDp0LnJlYWRhYmxlKSlyZXR1cm4gRSh7cmVhZGFibGU6bnVsbCE9dCYmdC5yZWFkYWJsZT9jKG51bGw9PXQ/dm9pZCAwOnQucmVhZGFibGUpP251bGw9PXQ/dm9pZCAwOnQucmVhZGFibGU6ZSh0LnJlYWRhYmxlKTp2b2lkIDAsd3JpdGFibGU6bnVsbCE9dCYmdC53cml0YWJsZT91KG51bGw9PXQ/dm9pZCAwOnQud3JpdGFibGUpP251bGw9PXQ/dm9pZCAwOnQud3JpdGFibGU6ZSh0LndyaXRhYmxlKTp2b2lkIDB9KTtjb25zdCBvPW51bGw9PXQ/dm9pZCAwOnQudGhlbjtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBvKXtsZXQgZTtyZXR1cm4gTyhvLHQsKHQ9PntudWxsIT10JiZlLnB1c2godCksZS5wdXNoKG51bGwpfSksKHQ9Pnt2KGUsdCl9KSksZT1uZXcgTCh7b2JqZWN0TW9kZTohMCx3cml0YWJsZTohMSxyZWFkKCl7fX0pfXRocm93IG5ldyBoKG4sW1wiQmxvYlwiLFwiUmVhZGFibGVTdHJlYW1cIixcIldyaXRhYmxlU3RyZWFtXCIsXCJTdHJlYW1cIixcIkl0ZXJhYmxlXCIsXCJBc3luY0l0ZXJhYmxlXCIsXCJGdW5jdGlvblwiLFwieyByZWFkYWJsZSwgd3JpdGFibGUgfSBwYWlyXCIsXCJQcm9taXNlXCJdLHQpfX0sODY6KGUsdCxuKT0+e2NvbnN0IHI9big1MzMpLHtBYm9ydEVycm9yOm8sY29kZXM6aX09bigxNDEpLHtFUlJfSU5WQUxJRF9BUkdfVFlQRTphLEVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFOmx9PWkse2tFbXB0eU9iamVjdDpzLG9uY2U6Y309big3NzUpLHt2YWxpZGF0ZUFib3J0U2lnbmFsOnUsdmFsaWRhdGVGdW5jdGlvbjpmLHZhbGlkYXRlT2JqZWN0OmQsdmFsaWRhdGVCb29sZWFuOnB9PW4oOTA0KSx7UHJvbWlzZTpoLFByb21pc2VQcm90b3R5cGVUaGVuOmd9PW4oMTkxKSx7aXNDbG9zZWQ6dixpc1JlYWRhYmxlOm0saXNSZWFkYWJsZU5vZGVTdHJlYW06Qyxpc1JlYWRhYmxlU3RyZWFtOnksaXNSZWFkYWJsZUZpbmlzaGVkOncsaXNSZWFkYWJsZUVycm9yZWQ6Yixpc1dyaXRhYmxlOngsaXNXcml0YWJsZU5vZGVTdHJlYW06Xyxpc1dyaXRhYmxlU3RyZWFtOk8saXNXcml0YWJsZUZpbmlzaGVkOkwsaXNXcml0YWJsZUVycm9yZWQ6RSxpc05vZGVTdHJlYW06Uyx3aWxsRW1pdENsb3NlOmosa0lzQ2xvc2VkUHJvbWlzZTpNfT1uKDEzMiksaz0oKT0+e307ZnVuY3Rpb24gUihlLHQsbil7dmFyIGkscDtpZigyPT09YXJndW1lbnRzLmxlbmd0aD8obj10LHQ9cyk6bnVsbD09dD90PXM6ZCh0LFwib3B0aW9uc1wiKSxmKG4sXCJjYWxsYmFja1wiKSx1KHQuc2lnbmFsLFwib3B0aW9ucy5zaWduYWxcIiksbj1jKG4pLHkoZSl8fE8oZSkpcmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtsZXQgaT0hMSxhPWs7aWYodC5zaWduYWwpaWYoYT0oKT0+e2k9ITAsbi5jYWxsKGUsbmV3IG8odm9pZCAwLHtjYXVzZTp0LnNpZ25hbC5yZWFzb259KSl9LHQuc2lnbmFsLmFib3J0ZWQpci5uZXh0VGljayhhKTtlbHNle2NvbnN0IHI9bjtuPWMoKCguLi5uKT0+e3Quc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLGEpLHIuYXBwbHkoZSxuKX0pKSx0LnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIixhKX1jb25zdCBsPSguLi50KT0+e2l8fHIubmV4dFRpY2soKCgpPT5uLmFwcGx5KGUsdCkpKX07cmV0dXJuIGcoZVtNXS5wcm9taXNlLGwsbCksa30oZSx0LG4pO2lmKCFTKGUpKXRocm93IG5ldyBhKFwic3RyZWFtXCIsW1wiUmVhZGFibGVTdHJlYW1cIixcIldyaXRhYmxlU3RyZWFtXCIsXCJTdHJlYW1cIl0sZSk7Y29uc3QgaD1udWxsIT09KGk9dC5yZWFkYWJsZSkmJnZvaWQgMCE9PWk/aTpDKGUpLFI9bnVsbCE9PShwPXQud3JpdGFibGUpJiZ2b2lkIDAhPT1wP3A6XyhlKSxQPWUuX3dyaXRhYmxlU3RhdGUsST1lLl9yZWFkYWJsZVN0YXRlLEE9KCk9PntlLndyaXRhYmxlfHxCKCl9O2xldCBUPWooZSkmJkMoZSk9PT1oJiZfKGUpPT09UixIPUwoZSwhMSk7Y29uc3QgQj0oKT0+e0g9ITAsZS5kZXN0cm95ZWQmJihUPSExKSwoIVR8fGUucmVhZGFibGUmJiFoKSYmKGgmJiFWfHxuLmNhbGwoZSkpfTtsZXQgVj13KGUsITEpO2NvbnN0IEQ9KCk9PntWPSEwLGUuZGVzdHJveWVkJiYoVD0hMSksKCFUfHxlLndyaXRhYmxlJiYhUikmJihSJiYhSHx8bi5jYWxsKGUpKX0sWj10PT57bi5jYWxsKGUsdCl9O2xldCAkPXYoZSk7Y29uc3QgTj0oKT0+eyQ9ITA7Y29uc3QgdD1FKGUpfHxiKGUpO3JldHVybiB0JiZcImJvb2xlYW5cIiE9dHlwZW9mIHQ/bi5jYWxsKGUsdCk6aCYmIVYmJkMoZSwhMCkmJiF3KGUsITEpP24uY2FsbChlLG5ldyBsKTohUnx8SHx8TChlLCExKT92b2lkIG4uY2FsbChlKTpuLmNhbGwoZSxuZXcgbCl9LEY9KCk9PnskPSEwO2NvbnN0IHQ9RShlKXx8YihlKTtpZih0JiZcImJvb2xlYW5cIiE9dHlwZW9mIHQpcmV0dXJuIG4uY2FsbChlLHQpO24uY2FsbChlKX0sVT0oKT0+e2UucmVxLm9uKFwiZmluaXNoXCIsQil9OyFmdW5jdGlvbihlKXtyZXR1cm4gZS5zZXRIZWFkZXImJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuYWJvcnR9KGUpP1ImJiFQJiYoZS5vbihcImVuZFwiLEEpLGUub24oXCJjbG9zZVwiLEEpKTooZS5vbihcImNvbXBsZXRlXCIsQiksVHx8ZS5vbihcImFib3J0XCIsTiksZS5yZXE/VSgpOmUub24oXCJyZXF1ZXN0XCIsVSkpLFR8fFwiYm9vbGVhblwiIT10eXBlb2YgZS5hYm9ydGVkfHxlLm9uKFwiYWJvcnRlZFwiLE4pLGUub24oXCJlbmRcIixEKSxlLm9uKFwiZmluaXNoXCIsQiksITEhPT10LmVycm9yJiZlLm9uKFwiZXJyb3JcIixaKSxlLm9uKFwiY2xvc2VcIixOKSwkP3IubmV4dFRpY2soTik6bnVsbCE9UCYmUC5lcnJvckVtaXR0ZWR8fG51bGwhPUkmJkkuZXJyb3JFbWl0dGVkP1R8fHIubmV4dFRpY2soRik6KGh8fFQmJiFtKGUpfHwhSCYmITEhPT14KGUpKSYmKFJ8fFQmJiF4KGUpfHwhViYmITEhPT1tKGUpKT9JJiZlLnJlcSYmZS5hYm9ydGVkJiZyLm5leHRUaWNrKEYpOnIubmV4dFRpY2soRik7Y29uc3QgVz0oKT0+e249ayxlLnJlbW92ZUxpc3RlbmVyKFwiYWJvcnRlZFwiLE4pLGUucmVtb3ZlTGlzdGVuZXIoXCJjb21wbGV0ZVwiLEIpLGUucmVtb3ZlTGlzdGVuZXIoXCJhYm9ydFwiLE4pLGUucmVtb3ZlTGlzdGVuZXIoXCJyZXF1ZXN0XCIsVSksZS5yZXEmJmUucmVxLnJlbW92ZUxpc3RlbmVyKFwiZmluaXNoXCIsQiksZS5yZW1vdmVMaXN0ZW5lcihcImVuZFwiLEEpLGUucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLEEpLGUucmVtb3ZlTGlzdGVuZXIoXCJmaW5pc2hcIixCKSxlLnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIsRCksZS5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsWiksZS5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsTil9O2lmKHQuc2lnbmFsJiYhJCl7Y29uc3QgaT0oKT0+e2NvbnN0IHI9bjtXKCksci5jYWxsKGUsbmV3IG8odm9pZCAwLHtjYXVzZTp0LnNpZ25hbC5yZWFzb259KSl9O2lmKHQuc2lnbmFsLmFib3J0ZWQpci5uZXh0VGljayhpKTtlbHNle2NvbnN0IHI9bjtuPWMoKCguLi5uKT0+e3Quc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLGkpLHIuYXBwbHkoZSxuKX0pKSx0LnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIixpKX19cmV0dXJuIFd9ZS5leHBvcnRzPVIsZS5leHBvcnRzLmZpbmlzaGVkPWZ1bmN0aW9uKGUsdCl7dmFyIG47bGV0IHI9ITE7cmV0dXJuIG51bGw9PT10JiYodD1zKSxudWxsIT09KG49dCkmJnZvaWQgMCE9PW4mJm4uY2xlYW51cCYmKHAodC5jbGVhbnVwLFwiY2xlYW51cFwiKSxyPXQuY2xlYW51cCksbmV3IGgoKChuLG8pPT57Y29uc3QgaT1SKGUsdCwoZT0+e3ImJmkoKSxlP28oZSk6bigpfSkpfSkpfX0sOTEzOihlLHQsbik9Pntjb25zdCByPW4oNTMzKSx7UHJvbWlzZVByb3RvdHlwZVRoZW46byxTeW1ib2xBc3luY0l0ZXJhdG9yOmksU3ltYm9sSXRlcmF0b3I6YX09bigxOTEpLHtCdWZmZXI6bH09big0ODUpLHtFUlJfSU5WQUxJRF9BUkdfVFlQRTpzLEVSUl9TVFJFQU1fTlVMTF9WQUxVRVM6Y309bigxNDEpLmNvZGVzO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7bGV0IHUsZjtpZihcInN0cmluZ1wiPT10eXBlb2YgdHx8dCBpbnN0YW5jZW9mIGwpcmV0dXJuIG5ldyBlKHtvYmplY3RNb2RlOiEwLC4uLm4scmVhZCgpe3RoaXMucHVzaCh0KSx0aGlzLnB1c2gobnVsbCl9fSk7aWYodCYmdFtpXSlmPSEwLHU9dFtpXSgpO2Vsc2V7aWYoIXR8fCF0W2FdKXRocm93IG5ldyBzKFwiaXRlcmFibGVcIixbXCJJdGVyYWJsZVwiXSx0KTtmPSExLHU9dFthXSgpfWNvbnN0IGQ9bmV3IGUoe29iamVjdE1vZGU6ITAsaGlnaFdhdGVyTWFyazoxLC4uLm59KTtsZXQgcD0hMTtyZXR1cm4gZC5fcmVhZD1mdW5jdGlvbigpe3B8fChwPSEwLGFzeW5jIGZ1bmN0aW9uKCl7Zm9yKDs7KXt0cnl7Y29uc3R7dmFsdWU6ZSxkb25lOnR9PWY/YXdhaXQgdS5uZXh0KCk6dS5uZXh0KCk7aWYodClkLnB1c2gobnVsbCk7ZWxzZXtjb25zdCB0PWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUudGhlbj9hd2FpdCBlOmU7aWYobnVsbD09PXQpdGhyb3cgcD0hMSxuZXcgYztpZihkLnB1c2godCkpY29udGludWU7cD0hMX19Y2F0Y2goZSl7ZC5kZXN0cm95KGUpfWJyZWFrfX0oKSl9LGQuX2Rlc3Ryb3k9ZnVuY3Rpb24oZSx0KXtvKGFzeW5jIGZ1bmN0aW9uKGUpe2NvbnN0IHQ9bnVsbCE9ZSxuPVwiZnVuY3Rpb25cIj09dHlwZW9mIHUudGhyb3c7aWYodCYmbil7Y29uc3R7dmFsdWU6dCxkb25lOm59PWF3YWl0IHUudGhyb3coZSk7aWYoYXdhaXQgdCxuKXJldHVybn1pZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB1LnJldHVybil7Y29uc3R7dmFsdWU6ZX09YXdhaXQgdS5yZXR1cm4oKTthd2FpdCBlfX0oZSksKCgpPT5yLm5leHRUaWNrKHQsZSkpLChuPT5yLm5leHRUaWNrKHQsbnx8ZSkpKX0sZH19LDIwMDooZSx0LG4pPT57Y29uc3R7QXJyYXlJc0FycmF5OnIsT2JqZWN0U2V0UHJvdG90eXBlT2Y6b309bigxOTEpLHtFdmVudEVtaXR0ZXI6aX09big0NjUpO2Z1bmN0aW9uIGEoZSl7aS5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gbChlLHQsbil7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZS5wcmVwZW5kTGlzdGVuZXIpcmV0dXJuIGUucHJlcGVuZExpc3RlbmVyKHQsbik7ZS5fZXZlbnRzJiZlLl9ldmVudHNbdF0/cihlLl9ldmVudHNbdF0pP2UuX2V2ZW50c1t0XS51bnNoaWZ0KG4pOmUuX2V2ZW50c1t0XT1bbixlLl9ldmVudHNbdF1dOmUub24odCxuKX1vKGEucHJvdG90eXBlLGkucHJvdG90eXBlKSxvKGEsaSksYS5wcm90b3R5cGUucGlwZT1mdW5jdGlvbihlLHQpe2NvbnN0IG49dGhpcztmdW5jdGlvbiByKHQpe2Uud3JpdGFibGUmJiExPT09ZS53cml0ZSh0KSYmbi5wYXVzZSYmbi5wYXVzZSgpfWZ1bmN0aW9uIG8oKXtuLnJlYWRhYmxlJiZuLnJlc3VtZSYmbi5yZXN1bWUoKX1uLm9uKFwiZGF0YVwiLHIpLGUub24oXCJkcmFpblwiLG8pLGUuX2lzU3RkaW98fHQmJiExPT09dC5lbmR8fChuLm9uKFwiZW5kXCIscyksbi5vbihcImNsb3NlXCIsYykpO2xldCBhPSExO2Z1bmN0aW9uIHMoKXthfHwoYT0hMCxlLmVuZCgpKX1mdW5jdGlvbiBjKCl7YXx8KGE9ITAsXCJmdW5jdGlvblwiPT10eXBlb2YgZS5kZXN0cm95JiZlLmRlc3Ryb3koKSl9ZnVuY3Rpb24gdShlKXtmKCksMD09PWkubGlzdGVuZXJDb3VudCh0aGlzLFwiZXJyb3JcIikmJnRoaXMuZW1pdChcImVycm9yXCIsZSl9ZnVuY3Rpb24gZigpe24ucmVtb3ZlTGlzdGVuZXIoXCJkYXRhXCIsciksZS5yZW1vdmVMaXN0ZW5lcihcImRyYWluXCIsbyksbi5yZW1vdmVMaXN0ZW5lcihcImVuZFwiLHMpLG4ucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLGMpLG4ucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLHUpLGUucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLHUpLG4ucmVtb3ZlTGlzdGVuZXIoXCJlbmRcIixmKSxuLnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIixmKSxlLnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIixmKX1yZXR1cm4gbChuLFwiZXJyb3JcIix1KSxsKGUsXCJlcnJvclwiLHUpLG4ub24oXCJlbmRcIixmKSxuLm9uKFwiY2xvc2VcIixmKSxlLm9uKFwiY2xvc2VcIixmKSxlLmVtaXQoXCJwaXBlXCIsbiksZX0sZS5leHBvcnRzPXtTdHJlYW06YSxwcmVwZW5kTGlzdGVuZXI6bH19LDU1NDooZSx0LG4pPT57Y29uc3Qgcj1nbG9iYWxUaGlzLkFib3J0Q29udHJvbGxlcnx8big4NzYpLkFib3J0Q29udHJvbGxlcix7Y29kZXM6e0VSUl9JTlZBTElEX0FSR19WQUxVRTpvLEVSUl9JTlZBTElEX0FSR19UWVBFOmksRVJSX01JU1NJTkdfQVJHUzphLEVSUl9PVVRfT0ZfUkFOR0U6bH0sQWJvcnRFcnJvcjpzfT1uKDE0MSkse3ZhbGlkYXRlQWJvcnRTaWduYWw6Yyx2YWxpZGF0ZUludGVnZXI6dSx2YWxpZGF0ZU9iamVjdDpmfT1uKDkwNCksZD1uKDE5MSkuU3ltYm9sKFwia1dlYWtcIikse2ZpbmlzaGVkOnB9PW4oODYpLGg9big4MTgpLHthZGRBYm9ydFNpZ25hbE5vVmFsaWRhdGU6Z309bigzNzQpLHtpc1dyaXRhYmxlOnYsaXNOb2RlU3RyZWFtOm19PW4oMTMyKSx7QXJyYXlQcm90b3R5cGVQdXNoOkMsTWF0aEZsb29yOnksTnVtYmVyOncsTnVtYmVySXNOYU46YixQcm9taXNlOngsUHJvbWlzZVJlamVjdDpfLFByb21pc2VQcm90b3R5cGVUaGVuOk8sU3ltYm9sOkx9PW4oMTkxKSxFPUwoXCJrRW1wdHlcIiksUz1MKFwia0VvZlwiKTtmdW5jdGlvbiBqKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgaShcImZuXCIsW1wiRnVuY3Rpb25cIixcIkFzeW5jRnVuY3Rpb25cIl0sZSk7bnVsbCE9dCYmZih0LFwib3B0aW9uc1wiKSxudWxsIT0obnVsbD09dD92b2lkIDA6dC5zaWduYWwpJiZjKHQuc2lnbmFsLFwib3B0aW9ucy5zaWduYWxcIik7bGV0IG49MTtyZXR1cm4gbnVsbCE9KG51bGw9PXQ/dm9pZCAwOnQuY29uY3VycmVuY3kpJiYobj15KHQuY29uY3VycmVuY3kpKSx1KG4sXCJjb25jdXJyZW5jeVwiLDEpLGFzeW5jIGZ1bmN0aW9uKigpe3ZhciBvLGk7Y29uc3QgYT1uZXcgcixsPXRoaXMsYz1bXSx1PWEuc2lnbmFsLGY9e3NpZ25hbDp1fSxkPSgpPT5hLmFib3J0KCk7bGV0IHAsaDtudWxsIT10JiZudWxsIT09KG89dC5zaWduYWwpJiZ2b2lkIDAhPT1vJiZvLmFib3J0ZWQmJmQoKSxudWxsPT10fHxudWxsPT09KGk9dC5zaWduYWwpfHx2b2lkIDA9PT1pfHxpLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLGQpO2xldCBnPSExO2Z1bmN0aW9uIHYoKXtnPSEwfSFhc3luYyBmdW5jdGlvbigpe3RyeXtmb3IgYXdhaXQobGV0IHQgb2YgbCl7dmFyIHI7aWYoZylyZXR1cm47aWYodS5hYm9ydGVkKXRocm93IG5ldyBzO3RyeXt0PWUodCxmKX1jYXRjaChlKXt0PV8oZSl9dCE9PUUmJihcImZ1bmN0aW9uXCI9PXR5cGVvZihudWxsPT09KHI9dCl8fHZvaWQgMD09PXI/dm9pZCAwOnIuY2F0Y2gpJiZ0LmNhdGNoKHYpLGMucHVzaCh0KSxwJiYocCgpLHA9bnVsbCksIWcmJmMubGVuZ3RoJiZjLmxlbmd0aD49biYmYXdhaXQgbmV3IHgoKGU9PntoPWV9KSkpfWMucHVzaChTKX1jYXRjaChlKXtjb25zdCB0PV8oZSk7Tyh0LHZvaWQgMCx2KSxjLnB1c2godCl9ZmluYWxseXt2YXIgbztnPSEwLHAmJihwKCkscD1udWxsKSxudWxsPT10fHxudWxsPT09KG89dC5zaWduYWwpfHx2b2lkIDA9PT1vfHxvLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLGQpfX0oKTt0cnl7Zm9yKDs7KXtmb3IoO2MubGVuZ3RoPjA7KXtjb25zdCBlPWF3YWl0IGNbMF07aWYoZT09PVMpcmV0dXJuO2lmKHUuYWJvcnRlZCl0aHJvdyBuZXcgcztlIT09RSYmKHlpZWxkIGUpLGMuc2hpZnQoKSxoJiYoaCgpLGg9bnVsbCl9YXdhaXQgbmV3IHgoKGU9PntwPWV9KSl9fWZpbmFsbHl7YS5hYm9ydCgpLGc9ITAsaCYmKGgoKSxoPW51bGwpfX0uY2FsbCh0aGlzKX1hc3luYyBmdW5jdGlvbiBNKGUsdD12b2lkIDApe2ZvciBhd2FpdChjb25zdCBuIG9mIGsuY2FsbCh0aGlzLGUsdCkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gayhlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IGkoXCJmblwiLFtcIkZ1bmN0aW9uXCIsXCJBc3luY0Z1bmN0aW9uXCJdLGUpO3JldHVybiBqLmNhbGwodGhpcywoYXN5bmMgZnVuY3Rpb24odCxuKXtyZXR1cm4gYXdhaXQgZSh0LG4pP3Q6RX0pLHQpfWNsYXNzIFIgZXh0ZW5kcyBhe2NvbnN0cnVjdG9yKCl7c3VwZXIoXCJyZWR1Y2VcIiksdGhpcy5tZXNzYWdlPVwiUmVkdWNlIG9mIGFuIGVtcHR5IHN0cmVhbSByZXF1aXJlcyBhbiBpbml0aWFsIHZhbHVlXCJ9fWZ1bmN0aW9uIFAoZSl7aWYoZT13KGUpLGIoZSkpcmV0dXJuIDA7aWYoZTwwKXRocm93IG5ldyBsKFwibnVtYmVyXCIsXCI+PSAwXCIsZSk7cmV0dXJuIGV9ZS5leHBvcnRzLnN0cmVhbVJldHVybmluZ09wZXJhdG9ycz17YXNJbmRleGVkUGFpcnM6ZnVuY3Rpb24oZT12b2lkIDApe3JldHVybiBudWxsIT1lJiZmKGUsXCJvcHRpb25zXCIpLG51bGwhPShudWxsPT1lP3ZvaWQgMDplLnNpZ25hbCkmJmMoZS5zaWduYWwsXCJvcHRpb25zLnNpZ25hbFwiKSxhc3luYyBmdW5jdGlvbiooKXtsZXQgdD0wO2ZvciBhd2FpdChjb25zdCByIG9mIHRoaXMpe3ZhciBuO2lmKG51bGwhPWUmJm51bGwhPT0obj1lLnNpZ25hbCkmJnZvaWQgMCE9PW4mJm4uYWJvcnRlZCl0aHJvdyBuZXcgcyh7Y2F1c2U6ZS5zaWduYWwucmVhc29ufSk7eWllbGRbdCsrLHJdfX0uY2FsbCh0aGlzKX0sZHJvcDpmdW5jdGlvbihlLHQ9dm9pZCAwKXtyZXR1cm4gbnVsbCE9dCYmZih0LFwib3B0aW9uc1wiKSxudWxsIT0obnVsbD09dD92b2lkIDA6dC5zaWduYWwpJiZjKHQuc2lnbmFsLFwib3B0aW9ucy5zaWduYWxcIiksZT1QKGUpLGFzeW5jIGZ1bmN0aW9uKigpe3ZhciBuO2lmKG51bGwhPXQmJm51bGwhPT0obj10LnNpZ25hbCkmJnZvaWQgMCE9PW4mJm4uYWJvcnRlZCl0aHJvdyBuZXcgcztmb3IgYXdhaXQoY29uc3QgbiBvZiB0aGlzKXt2YXIgcjtpZihudWxsIT10JiZudWxsIT09KHI9dC5zaWduYWwpJiZ2b2lkIDAhPT1yJiZyLmFib3J0ZWQpdGhyb3cgbmV3IHM7ZS0tPD0wJiYoeWllbGQgbil9fS5jYWxsKHRoaXMpfSxmaWx0ZXI6ayxmbGF0TWFwOmZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj1qLmNhbGwodGhpcyxlLHQpO3JldHVybiBhc3luYyBmdW5jdGlvbiooKXtmb3IgYXdhaXQoY29uc3QgZSBvZiBuKXlpZWxkKmV9LmNhbGwodGhpcyl9LG1hcDpqLHRha2U6ZnVuY3Rpb24oZSx0PXZvaWQgMCl7cmV0dXJuIG51bGwhPXQmJmYodCxcIm9wdGlvbnNcIiksbnVsbCE9KG51bGw9PXQ/dm9pZCAwOnQuc2lnbmFsKSYmYyh0LnNpZ25hbCxcIm9wdGlvbnMuc2lnbmFsXCIpLGU9UChlKSxhc3luYyBmdW5jdGlvbiooKXt2YXIgbjtpZihudWxsIT10JiZudWxsIT09KG49dC5zaWduYWwpJiZ2b2lkIDAhPT1uJiZuLmFib3J0ZWQpdGhyb3cgbmV3IHM7Zm9yIGF3YWl0KGNvbnN0IG4gb2YgdGhpcyl7dmFyIHI7aWYobnVsbCE9dCYmbnVsbCE9PShyPXQuc2lnbmFsKSYmdm9pZCAwIT09ciYmci5hYm9ydGVkKXRocm93IG5ldyBzO2lmKCEoZS0tID4wKSlyZXR1cm47eWllbGQgbn19LmNhbGwodGhpcyl9LGNvbXBvc2U6ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10JiZmKHQsXCJvcHRpb25zXCIpLG51bGwhPShudWxsPT10P3ZvaWQgMDp0LnNpZ25hbCkmJmModC5zaWduYWwsXCJvcHRpb25zLnNpZ25hbFwiKSxtKGUpJiYhdihlKSl0aHJvdyBuZXcgbyhcInN0cmVhbVwiLGUsXCJtdXN0IGJlIHdyaXRhYmxlXCIpO2NvbnN0IG49aCh0aGlzLGUpO3JldHVybiBudWxsIT10JiZ0LnNpZ25hbCYmZyh0LnNpZ25hbCxuKSxufX0sZS5leHBvcnRzLnByb21pc2VSZXR1cm5pbmdPcGVyYXRvcnM9e2V2ZXJ5OmFzeW5jIGZ1bmN0aW9uKGUsdD12b2lkIDApe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IGkoXCJmblwiLFtcIkZ1bmN0aW9uXCIsXCJBc3luY0Z1bmN0aW9uXCJdLGUpO3JldHVybiFhd2FpdCBNLmNhbGwodGhpcywoYXN5bmMoLi4udCk9PiFhd2FpdCBlKC4uLnQpKSx0KX0sZm9yRWFjaDphc3luYyBmdW5jdGlvbihlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IGkoXCJmblwiLFtcIkZ1bmN0aW9uXCIsXCJBc3luY0Z1bmN0aW9uXCJdLGUpO2ZvciBhd2FpdChjb25zdCBuIG9mIGouY2FsbCh0aGlzLChhc3luYyBmdW5jdGlvbih0LG4pe3JldHVybiBhd2FpdCBlKHQsbiksRX0pLHQpKTt9LHJlZHVjZTphc3luYyBmdW5jdGlvbihlLHQsbil7dmFyIG87aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgaShcInJlZHVjZXJcIixbXCJGdW5jdGlvblwiLFwiQXN5bmNGdW5jdGlvblwiXSxlKTtudWxsIT1uJiZmKG4sXCJvcHRpb25zXCIpLG51bGwhPShudWxsPT1uP3ZvaWQgMDpuLnNpZ25hbCkmJmMobi5zaWduYWwsXCJvcHRpb25zLnNpZ25hbFwiKTtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjE7aWYobnVsbCE9biYmbnVsbCE9PShvPW4uc2lnbmFsKSYmdm9pZCAwIT09byYmby5hYm9ydGVkKXtjb25zdCBlPW5ldyBzKHZvaWQgMCx7Y2F1c2U6bi5zaWduYWwucmVhc29ufSk7dGhyb3cgdGhpcy5vbmNlKFwiZXJyb3JcIiwoKCk9Pnt9KSksYXdhaXQgcCh0aGlzLmRlc3Ryb3koZSkpLGV9Y29uc3QgbD1uZXcgcix1PWwuc2lnbmFsO2lmKG51bGwhPW4mJm4uc2lnbmFsKXtjb25zdCBlPXtvbmNlOiEwLFtkXTp0aGlzfTtuLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwoKCk9PmwuYWJvcnQoKSksZSl9bGV0IGg9ITE7dHJ5e2ZvciBhd2FpdChjb25zdCByIG9mIHRoaXMpe3ZhciBnO2lmKGg9ITAsbnVsbCE9biYmbnVsbCE9PShnPW4uc2lnbmFsKSYmdm9pZCAwIT09ZyYmZy5hYm9ydGVkKXRocm93IG5ldyBzO2E/dD1hd2FpdCBlKHQscix7c2lnbmFsOnV9KToodD1yLGE9ITApfWlmKCFoJiYhYSl0aHJvdyBuZXcgUn1maW5hbGx5e2wuYWJvcnQoKX1yZXR1cm4gdH0sdG9BcnJheTphc3luYyBmdW5jdGlvbihlKXtudWxsIT1lJiZmKGUsXCJvcHRpb25zXCIpLG51bGwhPShudWxsPT1lP3ZvaWQgMDplLnNpZ25hbCkmJmMoZS5zaWduYWwsXCJvcHRpb25zLnNpZ25hbFwiKTtjb25zdCB0PVtdO2ZvciBhd2FpdChjb25zdCByIG9mIHRoaXMpe3ZhciBuO2lmKG51bGwhPWUmJm51bGwhPT0obj1lLnNpZ25hbCkmJnZvaWQgMCE9PW4mJm4uYWJvcnRlZCl0aHJvdyBuZXcgcyh2b2lkIDAse2NhdXNlOmUuc2lnbmFsLnJlYXNvbn0pO0ModCxyKX1yZXR1cm4gdH0sc29tZTpNLGZpbmQ6YXN5bmMgZnVuY3Rpb24oZSx0KXtmb3IgYXdhaXQoY29uc3QgbiBvZiBrLmNhbGwodGhpcyxlLHQpKXJldHVybiBufX19LDQ2NzooZSx0LG4pPT57Y29uc3R7T2JqZWN0U2V0UHJvdG90eXBlT2Y6cn09bigxOTEpO2UuZXhwb3J0cz1pO2NvbnN0IG89bigyMTApO2Z1bmN0aW9uIGkoZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgaSkpcmV0dXJuIG5ldyBpKGUpO28uY2FsbCh0aGlzLGUpfXIoaS5wcm90b3R5cGUsby5wcm90b3R5cGUpLHIoaSxvKSxpLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKGUsdCxuKXtuKG51bGwsZSl9fSw3NTQ6KGUsdCxuKT0+e2NvbnN0IHI9big1MzMpLHtBcnJheUlzQXJyYXk6byxQcm9taXNlOmksU3ltYm9sQXN5bmNJdGVyYXRvcjphfT1uKDE5MSksbD1uKDg2KSx7b25jZTpzfT1uKDc3NSksYz1uKDIzMCksdT1uKDE4Mikse2FnZ3JlZ2F0ZVR3b0Vycm9yczpmLGNvZGVzOntFUlJfSU5WQUxJRF9BUkdfVFlQRTpkLEVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRTpwLEVSUl9NSVNTSU5HX0FSR1M6aCxFUlJfU1RSRUFNX0RFU1RST1lFRDpnLEVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFOnZ9LEFib3J0RXJyb3I6bX09bigxNDEpLHt2YWxpZGF0ZUZ1bmN0aW9uOkMsdmFsaWRhdGVBYm9ydFNpZ25hbDp5fT1uKDkwNCkse2lzSXRlcmFibGU6dyxpc1JlYWRhYmxlOmIsaXNSZWFkYWJsZU5vZGVTdHJlYW06eCxpc05vZGVTdHJlYW06Xyxpc1RyYW5zZm9ybVN0cmVhbTpPLGlzV2ViU3RyZWFtOkwsaXNSZWFkYWJsZVN0cmVhbTpFLGlzUmVhZGFibGVFbmRlZDpTfT1uKDEzMiksaj1nbG9iYWxUaGlzLkFib3J0Q29udHJvbGxlcnx8big4NzYpLkFib3J0Q29udHJvbGxlcjtsZXQgTSxrO2Z1bmN0aW9uIFIoZSx0LG4pe2xldCByPSExO3JldHVybiBlLm9uKFwiY2xvc2VcIiwoKCk9PntyPSEwfSkpLHtkZXN0cm95OnQ9PntyfHwocj0hMCxjLmRlc3Ryb3llcihlLHR8fG5ldyBnKFwicGlwZVwiKSkpfSxjbGVhbnVwOmwoZSx7cmVhZGFibGU6dCx3cml0YWJsZTpufSwoZT0+e3I9IWV9KSl9fWZ1bmN0aW9uIFAoZSl7aWYodyhlKSlyZXR1cm4gZTtpZih4KGUpKXJldHVybiBhc3luYyBmdW5jdGlvbiooZSl7a3x8KGs9big4NTgpKSx5aWVsZCprLnByb3RvdHlwZVthXS5jYWxsKGUpfShlKTt0aHJvdyBuZXcgZChcInZhbFwiLFtcIlJlYWRhYmxlXCIsXCJJdGVyYWJsZVwiLFwiQXN5bmNJdGVyYWJsZVwiXSxlKX1hc3luYyBmdW5jdGlvbiBJKGUsdCxuLHtlbmQ6cn0pe2xldCBvLGE9bnVsbDtjb25zdCBzPWU9PntpZihlJiYobz1lKSxhKXtjb25zdCBlPWE7YT1udWxsLGUoKX19LGM9KCk9Pm5ldyBpKCgoZSx0KT0+e28/dChvKTphPSgpPT57bz90KG8pOmUoKX19KSk7dC5vbihcImRyYWluXCIscyk7Y29uc3QgdT1sKHQse3JlYWRhYmxlOiExfSxzKTt0cnl7dC53cml0YWJsZU5lZWREcmFpbiYmYXdhaXQgYygpO2ZvciBhd2FpdChjb25zdCBuIG9mIGUpdC53cml0ZShuKXx8YXdhaXQgYygpO3ImJnQuZW5kKCksYXdhaXQgYygpLG4oKX1jYXRjaChlKXtuKG8hPT1lP2YobyxlKTplKX1maW5hbGx5e3UoKSx0Lm9mZihcImRyYWluXCIscyl9fWFzeW5jIGZ1bmN0aW9uIEEoZSx0LG4se2VuZDpyfSl7Tyh0KSYmKHQ9dC53cml0YWJsZSk7Y29uc3Qgbz10LmdldFdyaXRlcigpO3RyeXtmb3IgYXdhaXQoY29uc3QgdCBvZiBlKWF3YWl0IG8ucmVhZHksby53cml0ZSh0KS5jYXRjaCgoKCk9Pnt9KSk7YXdhaXQgby5yZWFkeSxyJiZhd2FpdCBvLmNsb3NlKCksbigpfWNhdGNoKGUpe3RyeXthd2FpdCBvLmFib3J0KGUpLG4oZSl9Y2F0Y2goZSl7bihlKX19fWZ1bmN0aW9uIFQoZSx0LGkpe2lmKDE9PT1lLmxlbmd0aCYmbyhlWzBdKSYmKGU9ZVswXSksZS5sZW5ndGg8Mil0aHJvdyBuZXcgaChcInN0cmVhbXNcIik7Y29uc3QgYT1uZXcgaixsPWEuc2lnbmFsLHM9bnVsbD09aT92b2lkIDA6aS5zaWduYWwsYz1bXTtmdW5jdGlvbiBmKCl7QihuZXcgbSl9bGV0IGcsdjt5KHMsXCJvcHRpb25zLnNpZ25hbFwiKSxudWxsPT1zfHxzLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLGYpO2NvbnN0IEM9W107bGV0IFMsaz0wO2Z1bmN0aW9uIFQoZSl7QihlLDA9PS0tayl9ZnVuY3Rpb24gQihlLG4pe2lmKCFlfHxnJiZcIkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFXCIhPT1nLmNvZGV8fChnPWUpLGd8fG4pe2Zvcig7Qy5sZW5ndGg7KUMuc2hpZnQoKShnKTtudWxsPT1zfHxzLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLGYpLGEuYWJvcnQoKSxuJiYoZ3x8Yy5mb3JFYWNoKChlPT5lKCkpKSxyLm5leHRUaWNrKHQsZyx2KSl9fWZvcihsZXQgWj0wO1o8ZS5sZW5ndGg7WisrKXtjb25zdCAkPWVbWl0sTj1aPGUubGVuZ3RoLTEsRj1aPjAsVT1OfHwhMSE9PShudWxsPT1pP3ZvaWQgMDppLmVuZCksVz1aPT09ZS5sZW5ndGgtMTtpZihfKCQpKXtpZihVKXtjb25zdHtkZXN0cm95OkcsY2xlYW51cDpxfT1SKCQsTixGKTtDLnB1c2goRyksYigkKSYmVyYmYy5wdXNoKHEpfWZ1bmN0aW9uIHooZSl7ZSYmXCJBYm9ydEVycm9yXCIhPT1lLm5hbWUmJlwiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0VcIiE9PWUuY29kZSYmVChlKX0kLm9uKFwiZXJyb3JcIix6KSxiKCQpJiZXJiZjLnB1c2goKCgpPT57JC5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIseil9KSl9aWYoMD09PVopaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgJCl7aWYoUz0kKHtzaWduYWw6bH0pLCF3KFMpKXRocm93IG5ldyBwKFwiSXRlcmFibGUsIEFzeW5jSXRlcmFibGUgb3IgU3RyZWFtXCIsXCJzb3VyY2VcIixTKX1lbHNlIFM9dygkKXx8eCgkKXx8TygkKT8kOnUuZnJvbSgkKTtlbHNlIGlmKFwiZnVuY3Rpb25cIj09dHlwZW9mICQpe3ZhciBWO2lmKFM9TyhTKT9QKG51bGw9PT0oVj1TKXx8dm9pZCAwPT09Vj92b2lkIDA6Vi5yZWFkYWJsZSk6UChTKSxTPSQoUyx7c2lnbmFsOmx9KSxOKXtpZighdyhTLCEwKSl0aHJvdyBuZXcgcChcIkFzeW5jSXRlcmFibGVcIixgdHJhbnNmb3JtWyR7Wi0xfV1gLFMpfWVsc2V7dmFyIEQ7TXx8KE09big0NjcpKTtjb25zdCBZPW5ldyBNKHtvYmplY3RNb2RlOiEwfSksSz1udWxsPT09KEQ9Uyl8fHZvaWQgMD09PUQ/dm9pZCAwOkQudGhlbjtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBLKWsrKyxLLmNhbGwoUywoZT0+e3Y9ZSxudWxsIT1lJiZZLndyaXRlKGUpLFUmJlkuZW5kKCksci5uZXh0VGljayhUKX0pLChlPT57WS5kZXN0cm95KGUpLHIubmV4dFRpY2soVCxlKX0pKTtlbHNlIGlmKHcoUywhMCkpaysrLEkoUyxZLFQse2VuZDpVfSk7ZWxzZXtpZighRShTKSYmIU8oUykpdGhyb3cgbmV3IHAoXCJBc3luY0l0ZXJhYmxlIG9yIFByb21pc2VcIixcImRlc3RpbmF0aW9uXCIsUyk7e2NvbnN0IFE9Uy5yZWFkYWJsZXx8UztrKyssSShRLFksVCx7ZW5kOlV9KX19Uz1ZO2NvbnN0e2Rlc3Ryb3k6WCxjbGVhbnVwOkp9PVIoUywhMSwhMCk7Qy5wdXNoKFgpLFcmJmMucHVzaChKKX19ZWxzZSBpZihfKCQpKXtpZih4KFMpKXtrKz0yO2NvbnN0IGVlPUgoUywkLFQse2VuZDpVfSk7YigkKSYmVyYmYy5wdXNoKGVlKX1lbHNlIGlmKE8oUyl8fEUoUykpe2NvbnN0IHRlPVMucmVhZGFibGV8fFM7aysrLEkodGUsJCxULHtlbmQ6VX0pfWVsc2V7aWYoIXcoUykpdGhyb3cgbmV3IGQoXCJ2YWxcIixbXCJSZWFkYWJsZVwiLFwiSXRlcmFibGVcIixcIkFzeW5jSXRlcmFibGVcIixcIlJlYWRhYmxlU3RyZWFtXCIsXCJUcmFuc2Zvcm1TdHJlYW1cIl0sUyk7aysrLEkoUywkLFQse2VuZDpVfSl9Uz0kfWVsc2UgaWYoTCgkKSl7aWYoeChTKSlrKyssQShQKFMpLCQsVCx7ZW5kOlV9KTtlbHNlIGlmKEUoUyl8fHcoUykpaysrLEEoUywkLFQse2VuZDpVfSk7ZWxzZXtpZighTyhTKSl0aHJvdyBuZXcgZChcInZhbFwiLFtcIlJlYWRhYmxlXCIsXCJJdGVyYWJsZVwiLFwiQXN5bmNJdGVyYWJsZVwiLFwiUmVhZGFibGVTdHJlYW1cIixcIlRyYW5zZm9ybVN0cmVhbVwiXSxTKTtrKyssQShTLnJlYWRhYmxlLCQsVCx7ZW5kOlV9KX1TPSR9ZWxzZSBTPXUuZnJvbSgkKX1yZXR1cm4obnVsbCE9bCYmbC5hYm9ydGVkfHxudWxsIT1zJiZzLmFib3J0ZWQpJiZyLm5leHRUaWNrKGYpLFN9ZnVuY3Rpb24gSChlLHQsbix7ZW5kOm99KXtsZXQgaT0hMTtpZih0Lm9uKFwiY2xvc2VcIiwoKCk9PntpfHxuKG5ldyB2KX0pKSxlLnBpcGUodCx7ZW5kOiExfSksbyl7ZnVuY3Rpb24gYSgpe2k9ITAsdC5lbmQoKX1TKGUpP3IubmV4dFRpY2soYSk6ZS5vbmNlKFwiZW5kXCIsYSl9ZWxzZSBuKCk7cmV0dXJuIGwoZSx7cmVhZGFibGU6ITAsd3JpdGFibGU6ITF9LCh0PT57Y29uc3Qgcj1lLl9yZWFkYWJsZVN0YXRlO3QmJlwiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0VcIj09PXQuY29kZSYmciYmci5lbmRlZCYmIXIuZXJyb3JlZCYmIXIuZXJyb3JFbWl0dGVkP2Uub25jZShcImVuZFwiLG4pLm9uY2UoXCJlcnJvclwiLG4pOm4odCl9KSksbCh0LHtyZWFkYWJsZTohMSx3cml0YWJsZTohMH0sbil9ZS5leHBvcnRzPXtwaXBlbGluZUltcGw6VCxwaXBlbGluZTpmdW5jdGlvbiguLi5lKXtyZXR1cm4gVChlLHMoZnVuY3Rpb24oZSl7cmV0dXJuIEMoZVtlLmxlbmd0aC0xXSxcInN0cmVhbXNbc3RyZWFtLmxlbmd0aCAtIDFdXCIpLGUucG9wKCl9KGUpKSl9fX0sODU4OihlLHQsbik9Pntjb25zdCByPW4oNTMzKSx7QXJyYXlQcm90b3R5cGVJbmRleE9mOm8sTnVtYmVySXNJbnRlZ2VyOmksTnVtYmVySXNOYU46YSxOdW1iZXJQYXJzZUludDpsLE9iamVjdERlZmluZVByb3BlcnRpZXM6cyxPYmplY3RLZXlzOmMsT2JqZWN0U2V0UHJvdG90eXBlT2Y6dSxQcm9taXNlOmYsU2FmZVNldDpkLFN5bWJvbEFzeW5jSXRlcmF0b3I6cCxTeW1ib2w6aH09bigxOTEpO2UuZXhwb3J0cz1ELEQuUmVhZGFibGVTdGF0ZT1WO2NvbnN0e0V2ZW50RW1pdHRlcjpnfT1uKDQ2NSkse1N0cmVhbTp2LHByZXBlbmRMaXN0ZW5lcjptfT1uKDIwMCkse0J1ZmZlcjpDfT1uKDQ4NSkse2FkZEFib3J0U2lnbmFsOnl9PW4oMzc0KSx3PW4oODYpO2xldCBiPW4oNzc1KS5kZWJ1Z2xvZyhcInN0cmVhbVwiLChlPT57Yj1lfSkpO2NvbnN0IHg9big2MTYpLF89bigyMzApLHtnZXRIaWdoV2F0ZXJNYXJrOk8sZ2V0RGVmYXVsdEhpZ2hXYXRlck1hcms6TH09big0OTgpLHthZ2dyZWdhdGVUd29FcnJvcnM6RSxjb2Rlczp7RVJSX0lOVkFMSURfQVJHX1RZUEU6UyxFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRDpqLEVSUl9PVVRfT0ZfUkFOR0U6TSxFUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GOmssRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVDpSfX09bigxNDEpLHt2YWxpZGF0ZU9iamVjdDpQfT1uKDkwNCksST1oKFwia1BhdXNlZFwiKSx7U3RyaW5nRGVjb2RlcjpBfT1uKDQ2NCksVD1uKDkxMyk7dShELnByb3RvdHlwZSx2LnByb3RvdHlwZSksdShELHYpO2NvbnN0IEg9KCk9Pnt9LHtlcnJvck9yRGVzdHJveTpCfT1fO2Z1bmN0aW9uIFYoZSx0LHIpe1wiYm9vbGVhblwiIT10eXBlb2YgciYmKHI9dCBpbnN0YW5jZW9mIG4oMTgyKSksdGhpcy5vYmplY3RNb2RlPSEoIWV8fCFlLm9iamVjdE1vZGUpLHImJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhKCFlfHwhZS5yZWFkYWJsZU9iamVjdE1vZGUpKSx0aGlzLmhpZ2hXYXRlck1hcms9ZT9PKHRoaXMsZSxcInJlYWRhYmxlSGlnaFdhdGVyTWFya1wiLHIpOkwoITEpLHRoaXMuYnVmZmVyPW5ldyB4LHRoaXMubGVuZ3RoPTAsdGhpcy5waXBlcz1bXSx0aGlzLmZsb3dpbmc9bnVsbCx0aGlzLmVuZGVkPSExLHRoaXMuZW5kRW1pdHRlZD0hMSx0aGlzLnJlYWRpbmc9ITEsdGhpcy5jb25zdHJ1Y3RlZD0hMCx0aGlzLnN5bmM9ITAsdGhpcy5uZWVkUmVhZGFibGU9ITEsdGhpcy5lbWl0dGVkUmVhZGFibGU9ITEsdGhpcy5yZWFkYWJsZUxpc3RlbmluZz0hMSx0aGlzLnJlc3VtZVNjaGVkdWxlZD0hMSx0aGlzW0ldPW51bGwsdGhpcy5lcnJvckVtaXR0ZWQ9ITEsdGhpcy5lbWl0Q2xvc2U9IWV8fCExIT09ZS5lbWl0Q2xvc2UsdGhpcy5hdXRvRGVzdHJveT0hZXx8ITEhPT1lLmF1dG9EZXN0cm95LHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZXJyb3JlZD1udWxsLHRoaXMuY2xvc2VkPSExLHRoaXMuY2xvc2VFbWl0dGVkPSExLHRoaXMuZGVmYXVsdEVuY29kaW5nPWUmJmUuZGVmYXVsdEVuY29kaW5nfHxcInV0ZjhcIix0aGlzLmF3YWl0RHJhaW5Xcml0ZXJzPW51bGwsdGhpcy5tdWx0aUF3YWl0RHJhaW49ITEsdGhpcy5yZWFkaW5nTW9yZT0hMSx0aGlzLmRhdGFFbWl0dGVkPSExLHRoaXMuZGVjb2Rlcj1udWxsLHRoaXMuZW5jb2Rpbmc9bnVsbCxlJiZlLmVuY29kaW5nJiYodGhpcy5kZWNvZGVyPW5ldyBBKGUuZW5jb2RpbmcpLHRoaXMuZW5jb2Rpbmc9ZS5lbmNvZGluZyl9ZnVuY3Rpb24gRChlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBEKSlyZXR1cm4gbmV3IEQoZSk7Y29uc3QgdD10aGlzIGluc3RhbmNlb2YgbigxODIpO3RoaXMuX3JlYWRhYmxlU3RhdGU9bmV3IFYoZSx0aGlzLHQpLGUmJihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnJlYWQmJih0aGlzLl9yZWFkPWUucmVhZCksXCJmdW5jdGlvblwiPT10eXBlb2YgZS5kZXN0cm95JiYodGhpcy5fZGVzdHJveT1lLmRlc3Ryb3kpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUuY29uc3RydWN0JiYodGhpcy5fY29uc3RydWN0PWUuY29uc3RydWN0KSxlLnNpZ25hbCYmIXQmJnkoZS5zaWduYWwsdGhpcykpLHYuY2FsbCh0aGlzLGUpLF8uY29uc3RydWN0KHRoaXMsKCgpPT57dGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGUmJlcodGhpcyx0aGlzLl9yZWFkYWJsZVN0YXRlKX0pKX1mdW5jdGlvbiBaKGUsdCxuLHIpe2IoXCJyZWFkYWJsZUFkZENodW5rXCIsdCk7Y29uc3Qgbz1lLl9yZWFkYWJsZVN0YXRlO2xldCBpO2lmKG8ub2JqZWN0TW9kZXx8KFwic3RyaW5nXCI9PXR5cGVvZiB0PyhuPW58fG8uZGVmYXVsdEVuY29kaW5nLG8uZW5jb2RpbmchPT1uJiYociYmby5lbmNvZGluZz90PUMuZnJvbSh0LG4pLnRvU3RyaW5nKG8uZW5jb2RpbmcpOih0PUMuZnJvbSh0LG4pLG49XCJcIikpKTp0IGluc3RhbmNlb2YgQz9uPVwiXCI6di5faXNVaW50OEFycmF5KHQpPyh0PXYuX3VpbnQ4QXJyYXlUb0J1ZmZlcih0KSxuPVwiXCIpOm51bGwhPXQmJihpPW5ldyBTKFwiY2h1bmtcIixbXCJzdHJpbmdcIixcIkJ1ZmZlclwiLFwiVWludDhBcnJheVwiXSx0KSkpLGkpQihlLGkpO2Vsc2UgaWYobnVsbD09PXQpby5yZWFkaW5nPSExLGZ1bmN0aW9uKGUsdCl7aWYoYihcIm9uRW9mQ2h1bmtcIiksIXQuZW5kZWQpe2lmKHQuZGVjb2Rlcil7Y29uc3QgZT10LmRlY29kZXIuZW5kKCk7ZSYmZS5sZW5ndGgmJih0LmJ1ZmZlci5wdXNoKGUpLHQubGVuZ3RoKz10Lm9iamVjdE1vZGU/MTplLmxlbmd0aCl9dC5lbmRlZD0hMCx0LnN5bmM/RihlKToodC5uZWVkUmVhZGFibGU9ITEsdC5lbWl0dGVkUmVhZGFibGU9ITAsVShlKSl9fShlLG8pO2Vsc2UgaWYoby5vYmplY3RNb2RlfHx0JiZ0Lmxlbmd0aD4wKWlmKHIpaWYoby5lbmRFbWl0dGVkKUIoZSxuZXcgUik7ZWxzZXtpZihvLmRlc3Ryb3llZHx8by5lcnJvcmVkKXJldHVybiExOyQoZSxvLHQsITApfWVsc2UgaWYoby5lbmRlZClCKGUsbmV3IGspO2Vsc2V7aWYoby5kZXN0cm95ZWR8fG8uZXJyb3JlZClyZXR1cm4hMTtvLnJlYWRpbmc9ITEsby5kZWNvZGVyJiYhbj8odD1vLmRlY29kZXIud3JpdGUodCksby5vYmplY3RNb2RlfHwwIT09dC5sZW5ndGg/JChlLG8sdCwhMSk6VyhlLG8pKTokKGUsbyx0LCExKX1lbHNlIHJ8fChvLnJlYWRpbmc9ITEsVyhlLG8pKTtyZXR1cm4hby5lbmRlZCYmKG8ubGVuZ3RoPG8uaGlnaFdhdGVyTWFya3x8MD09PW8ubGVuZ3RoKX1mdW5jdGlvbiAkKGUsdCxuLHIpe3QuZmxvd2luZyYmMD09PXQubGVuZ3RoJiYhdC5zeW5jJiZlLmxpc3RlbmVyQ291bnQoXCJkYXRhXCIpPjA/KHQubXVsdGlBd2FpdERyYWluP3QuYXdhaXREcmFpbldyaXRlcnMuY2xlYXIoKTp0LmF3YWl0RHJhaW5Xcml0ZXJzPW51bGwsdC5kYXRhRW1pdHRlZD0hMCxlLmVtaXQoXCJkYXRhXCIsbikpOih0Lmxlbmd0aCs9dC5vYmplY3RNb2RlPzE6bi5sZW5ndGgscj90LmJ1ZmZlci51bnNoaWZ0KG4pOnQuYnVmZmVyLnB1c2gobiksdC5uZWVkUmVhZGFibGUmJkYoZSkpLFcoZSx0KX1mdW5jdGlvbiBOKGUsdCl7cmV0dXJuIGU8PTB8fDA9PT10Lmxlbmd0aCYmdC5lbmRlZD8wOnQub2JqZWN0TW9kZT8xOmEoZSk/dC5mbG93aW5nJiZ0Lmxlbmd0aD90LmJ1ZmZlci5maXJzdCgpLmxlbmd0aDp0Lmxlbmd0aDplPD10Lmxlbmd0aD9lOnQuZW5kZWQ/dC5sZW5ndGg6MH1mdW5jdGlvbiBGKGUpe2NvbnN0IHQ9ZS5fcmVhZGFibGVTdGF0ZTtiKFwiZW1pdFJlYWRhYmxlXCIsdC5uZWVkUmVhZGFibGUsdC5lbWl0dGVkUmVhZGFibGUpLHQubmVlZFJlYWRhYmxlPSExLHQuZW1pdHRlZFJlYWRhYmxlfHwoYihcImVtaXRSZWFkYWJsZVwiLHQuZmxvd2luZyksdC5lbWl0dGVkUmVhZGFibGU9ITAsci5uZXh0VGljayhVLGUpKX1mdW5jdGlvbiBVKGUpe2NvbnN0IHQ9ZS5fcmVhZGFibGVTdGF0ZTtiKFwiZW1pdFJlYWRhYmxlX1wiLHQuZGVzdHJveWVkLHQubGVuZ3RoLHQuZW5kZWQpLHQuZGVzdHJveWVkfHx0LmVycm9yZWR8fCF0Lmxlbmd0aCYmIXQuZW5kZWR8fChlLmVtaXQoXCJyZWFkYWJsZVwiKSx0LmVtaXR0ZWRSZWFkYWJsZT0hMSksdC5uZWVkUmVhZGFibGU9IXQuZmxvd2luZyYmIXQuZW5kZWQmJnQubGVuZ3RoPD10LmhpZ2hXYXRlck1hcmssSyhlKX1mdW5jdGlvbiBXKGUsdCl7IXQucmVhZGluZ01vcmUmJnQuY29uc3RydWN0ZWQmJih0LnJlYWRpbmdNb3JlPSEwLHIubmV4dFRpY2soeixlLHQpKX1mdW5jdGlvbiB6KGUsdCl7Zm9yKDshdC5yZWFkaW5nJiYhdC5lbmRlZCYmKHQubGVuZ3RoPHQuaGlnaFdhdGVyTWFya3x8dC5mbG93aW5nJiYwPT09dC5sZW5ndGgpOyl7Y29uc3Qgbj10Lmxlbmd0aDtpZihiKFwibWF5YmVSZWFkTW9yZSByZWFkIDBcIiksZS5yZWFkKDApLG49PT10Lmxlbmd0aClicmVha310LnJlYWRpbmdNb3JlPSExfWZ1bmN0aW9uIEcoZSl7Y29uc3QgdD1lLl9yZWFkYWJsZVN0YXRlO3QucmVhZGFibGVMaXN0ZW5pbmc9ZS5saXN0ZW5lckNvdW50KFwicmVhZGFibGVcIik+MCx0LnJlc3VtZVNjaGVkdWxlZCYmITE9PT10W0ldP3QuZmxvd2luZz0hMDplLmxpc3RlbmVyQ291bnQoXCJkYXRhXCIpPjA/ZS5yZXN1bWUoKTp0LnJlYWRhYmxlTGlzdGVuaW5nfHwodC5mbG93aW5nPW51bGwpfWZ1bmN0aW9uIHEoZSl7YihcInJlYWRhYmxlIG5leHR0aWNrIHJlYWQgMFwiKSxlLnJlYWQoMCl9ZnVuY3Rpb24gWShlLHQpe2IoXCJyZXN1bWVcIix0LnJlYWRpbmcpLHQucmVhZGluZ3x8ZS5yZWFkKDApLHQucmVzdW1lU2NoZWR1bGVkPSExLGUuZW1pdChcInJlc3VtZVwiKSxLKGUpLHQuZmxvd2luZyYmIXQucmVhZGluZyYmZS5yZWFkKDApfWZ1bmN0aW9uIEsoZSl7Y29uc3QgdD1lLl9yZWFkYWJsZVN0YXRlO2ZvcihiKFwiZmxvd1wiLHQuZmxvd2luZyk7dC5mbG93aW5nJiZudWxsIT09ZS5yZWFkKCk7KTt9ZnVuY3Rpb24gWChlLHQpe1wiZnVuY3Rpb25cIiE9dHlwZW9mIGUucmVhZCYmKGU9RC53cmFwKGUse29iamVjdE1vZGU6ITB9KSk7Y29uc3Qgbj1hc3luYyBmdW5jdGlvbiooZSx0KXtsZXQgbixyPUg7ZnVuY3Rpb24gbyh0KXt0aGlzPT09ZT8ocigpLHI9SCk6cj10fWUub24oXCJyZWFkYWJsZVwiLG8pO2NvbnN0IGk9dyhlLHt3cml0YWJsZTohMX0sKGU9PntuPWU/RShuLGUpOm51bGwscigpLHI9SH0pKTt0cnl7Zm9yKDs7KXtjb25zdCB0PWUuZGVzdHJveWVkP251bGw6ZS5yZWFkKCk7aWYobnVsbCE9PXQpeWllbGQgdDtlbHNle2lmKG4pdGhyb3cgbjtpZihudWxsPT09bilyZXR1cm47YXdhaXQgbmV3IGYobyl9fX1jYXRjaChlKXt0aHJvdyBuPUUobixlKSxufWZpbmFsbHl7IW4mJiExPT09KG51bGw9PXQ/dm9pZCAwOnQuZGVzdHJveU9uUmV0dXJuKXx8dm9pZCAwIT09biYmIWUuX3JlYWRhYmxlU3RhdGUuYXV0b0Rlc3Ryb3k/KGUub2ZmKFwicmVhZGFibGVcIixvKSxpKCkpOl8uZGVzdHJveWVyKGUsbnVsbCl9fShlLHQpO3JldHVybiBuLnN0cmVhbT1lLG59ZnVuY3Rpb24gSihlLHQpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gbnVsbDtsZXQgbjtyZXR1cm4gdC5vYmplY3RNb2RlP249dC5idWZmZXIuc2hpZnQoKTohZXx8ZT49dC5sZW5ndGg/KG49dC5kZWNvZGVyP3QuYnVmZmVyLmpvaW4oXCJcIik6MT09PXQuYnVmZmVyLmxlbmd0aD90LmJ1ZmZlci5maXJzdCgpOnQuYnVmZmVyLmNvbmNhdCh0Lmxlbmd0aCksdC5idWZmZXIuY2xlYXIoKSk6bj10LmJ1ZmZlci5jb25zdW1lKGUsdC5kZWNvZGVyKSxufWZ1bmN0aW9uIFEoZSl7Y29uc3QgdD1lLl9yZWFkYWJsZVN0YXRlO2IoXCJlbmRSZWFkYWJsZVwiLHQuZW5kRW1pdHRlZCksdC5lbmRFbWl0dGVkfHwodC5lbmRlZD0hMCxyLm5leHRUaWNrKGVlLHQsZSkpfWZ1bmN0aW9uIGVlKGUsdCl7aWYoYihcImVuZFJlYWRhYmxlTlRcIixlLmVuZEVtaXR0ZWQsZS5sZW5ndGgpLCFlLmVycm9yZWQmJiFlLmNsb3NlRW1pdHRlZCYmIWUuZW5kRW1pdHRlZCYmMD09PWUubGVuZ3RoKWlmKGUuZW5kRW1pdHRlZD0hMCx0LmVtaXQoXCJlbmRcIiksdC53cml0YWJsZSYmITE9PT10LmFsbG93SGFsZk9wZW4pci5uZXh0VGljayh0ZSx0KTtlbHNlIGlmKGUuYXV0b0Rlc3Ryb3kpe2NvbnN0IGU9dC5fd3JpdGFibGVTdGF0ZTsoIWV8fGUuYXV0b0Rlc3Ryb3kmJihlLmZpbmlzaGVkfHwhMT09PWUud3JpdGFibGUpKSYmdC5kZXN0cm95KCl9fWZ1bmN0aW9uIHRlKGUpe2Uud3JpdGFibGUmJiFlLndyaXRhYmxlRW5kZWQmJiFlLmRlc3Ryb3llZCYmZS5lbmQoKX1sZXQgbmU7ZnVuY3Rpb24gcmUoKXtyZXR1cm4gdm9pZCAwPT09bmUmJihuZT17fSksbmV9RC5wcm90b3R5cGUuZGVzdHJveT1fLmRlc3Ryb3ksRC5wcm90b3R5cGUuX3VuZGVzdHJveT1fLnVuZGVzdHJveSxELnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihlLHQpe3QoZSl9LEQucHJvdG90eXBlW2cuY2FwdHVyZVJlamVjdGlvblN5bWJvbF09ZnVuY3Rpb24oZSl7dGhpcy5kZXN0cm95KGUpfSxELnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIFoodGhpcyxlLHQsITEpfSxELnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIFoodGhpcyxlLHQsITApfSxELnByb3RvdHlwZS5pc1BhdXNlZD1mdW5jdGlvbigpe2NvbnN0IGU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4hMD09PWVbSV18fCExPT09ZS5mbG93aW5nfSxELnByb3RvdHlwZS5zZXRFbmNvZGluZz1mdW5jdGlvbihlKXtjb25zdCB0PW5ldyBBKGUpO3RoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlcj10LHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2Rpbmc9dGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyLmVuY29kaW5nO2NvbnN0IG49dGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXI7bGV0IHI9XCJcIjtmb3IoY29uc3QgZSBvZiBuKXIrPXQud3JpdGUoZSk7cmV0dXJuIG4uY2xlYXIoKSxcIlwiIT09ciYmbi5wdXNoKHIpLHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RoPXIubGVuZ3RoLHRoaXN9LEQucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24oZSl7YihcInJlYWRcIixlKSx2b2lkIDA9PT1lP2U9TmFOOmkoZSl8fChlPWwoZSwxMCkpO2NvbnN0IHQ9dGhpcy5fcmVhZGFibGVTdGF0ZSxuPWU7aWYoZT50LmhpZ2hXYXRlck1hcmsmJih0LmhpZ2hXYXRlck1hcms9ZnVuY3Rpb24oZSl7aWYoZT4xMDczNzQxODI0KXRocm93IG5ldyBNKFwic2l6ZVwiLFwiPD0gMUdpQlwiLGUpO3JldHVybiBlLS0sZXw9ZT4+PjEsZXw9ZT4+PjIsZXw9ZT4+PjQsZXw9ZT4+PjgsZXw9ZT4+PjE2LCsrZX0oZSkpLDAhPT1lJiYodC5lbWl0dGVkUmVhZGFibGU9ITEpLDA9PT1lJiZ0Lm5lZWRSZWFkYWJsZSYmKCgwIT09dC5oaWdoV2F0ZXJNYXJrP3QubGVuZ3RoPj10LmhpZ2hXYXRlck1hcms6dC5sZW5ndGg+MCl8fHQuZW5kZWQpKXJldHVybiBiKFwicmVhZDogZW1pdFJlYWRhYmxlXCIsdC5sZW5ndGgsdC5lbmRlZCksMD09PXQubGVuZ3RoJiZ0LmVuZGVkP1EodGhpcyk6Rih0aGlzKSxudWxsO2lmKDA9PT0oZT1OKGUsdCkpJiZ0LmVuZGVkKXJldHVybiAwPT09dC5sZW5ndGgmJlEodGhpcyksbnVsbDtsZXQgcixvPXQubmVlZFJlYWRhYmxlO2lmKGIoXCJuZWVkIHJlYWRhYmxlXCIsbyksKDA9PT10Lmxlbmd0aHx8dC5sZW5ndGgtZTx0LmhpZ2hXYXRlck1hcmspJiYobz0hMCxiKFwibGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmtcIixvKSksdC5lbmRlZHx8dC5yZWFkaW5nfHx0LmRlc3Ryb3llZHx8dC5lcnJvcmVkfHwhdC5jb25zdHJ1Y3RlZClvPSExLGIoXCJyZWFkaW5nLCBlbmRlZCBvciBjb25zdHJ1Y3RpbmdcIixvKTtlbHNlIGlmKG8pe2IoXCJkbyByZWFkXCIpLHQucmVhZGluZz0hMCx0LnN5bmM9ITAsMD09PXQubGVuZ3RoJiYodC5uZWVkUmVhZGFibGU9ITApO3RyeXt0aGlzLl9yZWFkKHQuaGlnaFdhdGVyTWFyayl9Y2F0Y2goZSl7Qih0aGlzLGUpfXQuc3luYz0hMSx0LnJlYWRpbmd8fChlPU4obix0KSl9cmV0dXJuIHI9ZT4wP0ooZSx0KTpudWxsLG51bGw9PT1yPyh0Lm5lZWRSZWFkYWJsZT10Lmxlbmd0aDw9dC5oaWdoV2F0ZXJNYXJrLGU9MCk6KHQubGVuZ3RoLT1lLHQubXVsdGlBd2FpdERyYWluP3QuYXdhaXREcmFpbldyaXRlcnMuY2xlYXIoKTp0LmF3YWl0RHJhaW5Xcml0ZXJzPW51bGwpLDA9PT10Lmxlbmd0aCYmKHQuZW5kZWR8fCh0Lm5lZWRSZWFkYWJsZT0hMCksbiE9PWUmJnQuZW5kZWQmJlEodGhpcykpLG51bGw9PT1yfHx0LmVycm9yRW1pdHRlZHx8dC5jbG9zZUVtaXR0ZWR8fCh0LmRhdGFFbWl0dGVkPSEwLHRoaXMuZW1pdChcImRhdGFcIixyKSkscn0sRC5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IGooXCJfcmVhZCgpXCIpfSxELnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj10aGlzLG89dGhpcy5fcmVhZGFibGVTdGF0ZTsxPT09by5waXBlcy5sZW5ndGgmJihvLm11bHRpQXdhaXREcmFpbnx8KG8ubXVsdGlBd2FpdERyYWluPSEwLG8uYXdhaXREcmFpbldyaXRlcnM9bmV3IGQoby5hd2FpdERyYWluV3JpdGVycz9bby5hd2FpdERyYWluV3JpdGVyc106W10pKSksby5waXBlcy5wdXNoKGUpLGIoXCJwaXBlIGNvdW50PSVkIG9wdHM9JWpcIixvLnBpcGVzLmxlbmd0aCx0KTtjb25zdCBpPXQmJiExPT09dC5lbmR8fGU9PT1yLnN0ZG91dHx8ZT09PXIuc3RkZXJyP2c6YTtmdW5jdGlvbiBhKCl7YihcIm9uZW5kXCIpLGUuZW5kKCl9bGV0IGw7by5lbmRFbWl0dGVkP3IubmV4dFRpY2soaSk6bi5vbmNlKFwiZW5kXCIsaSksZS5vbihcInVucGlwZVwiLChmdW5jdGlvbiB0KHIsaSl7YihcIm9udW5waXBlXCIpLHI9PT1uJiZpJiYhMT09PWkuaGFzVW5waXBlZCYmKGkuaGFzVW5waXBlZD0hMCxiKFwiY2xlYW51cFwiKSxlLnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIixwKSxlLnJlbW92ZUxpc3RlbmVyKFwiZmluaXNoXCIsaCksbCYmZS5yZW1vdmVMaXN0ZW5lcihcImRyYWluXCIsbCksZS5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsZiksZS5yZW1vdmVMaXN0ZW5lcihcInVucGlwZVwiLHQpLG4ucmVtb3ZlTGlzdGVuZXIoXCJlbmRcIixhKSxuLnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIsZyksbi5yZW1vdmVMaXN0ZW5lcihcImRhdGFcIix1KSxzPSEwLGwmJm8uYXdhaXREcmFpbldyaXRlcnMmJighZS5fd3JpdGFibGVTdGF0ZXx8ZS5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW4pJiZsKCkpfSkpO2xldCBzPSExO2Z1bmN0aW9uIGMoKXtzfHwoMT09PW8ucGlwZXMubGVuZ3RoJiZvLnBpcGVzWzBdPT09ZT8oYihcImZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZVwiLDApLG8uYXdhaXREcmFpbldyaXRlcnM9ZSxvLm11bHRpQXdhaXREcmFpbj0hMSk6by5waXBlcy5sZW5ndGg+MSYmby5waXBlcy5pbmNsdWRlcyhlKSYmKGIoXCJmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2VcIixvLmF3YWl0RHJhaW5Xcml0ZXJzLnNpemUpLG8uYXdhaXREcmFpbldyaXRlcnMuYWRkKGUpKSxuLnBhdXNlKCkpLGx8fChsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7Y29uc3Qgbj1lLl9yZWFkYWJsZVN0YXRlO24uYXdhaXREcmFpbldyaXRlcnM9PT10PyhiKFwicGlwZU9uRHJhaW5cIiwxKSxuLmF3YWl0RHJhaW5Xcml0ZXJzPW51bGwpOm4ubXVsdGlBd2FpdERyYWluJiYoYihcInBpcGVPbkRyYWluXCIsbi5hd2FpdERyYWluV3JpdGVycy5zaXplKSxuLmF3YWl0RHJhaW5Xcml0ZXJzLmRlbGV0ZSh0KSksbi5hd2FpdERyYWluV3JpdGVycyYmMCE9PW4uYXdhaXREcmFpbldyaXRlcnMuc2l6ZXx8IWUubGlzdGVuZXJDb3VudChcImRhdGFcIil8fGUucmVzdW1lKCl9fShuLGUpLGUub24oXCJkcmFpblwiLGwpKX1mdW5jdGlvbiB1KHQpe2IoXCJvbmRhdGFcIik7Y29uc3Qgbj1lLndyaXRlKHQpO2IoXCJkZXN0LndyaXRlXCIsbiksITE9PT1uJiZjKCl9ZnVuY3Rpb24gZih0KXtpZihiKFwib25lcnJvclwiLHQpLGcoKSxlLnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIixmKSwwPT09ZS5saXN0ZW5lckNvdW50KFwiZXJyb3JcIikpe2NvbnN0IG49ZS5fd3JpdGFibGVTdGF0ZXx8ZS5fcmVhZGFibGVTdGF0ZTtuJiYhbi5lcnJvckVtaXR0ZWQ/QihlLHQpOmUuZW1pdChcImVycm9yXCIsdCl9fWZ1bmN0aW9uIHAoKXtlLnJlbW92ZUxpc3RlbmVyKFwiZmluaXNoXCIsaCksZygpfWZ1bmN0aW9uIGgoKXtiKFwib25maW5pc2hcIiksZS5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIscCksZygpfWZ1bmN0aW9uIGcoKXtiKFwidW5waXBlXCIpLG4udW5waXBlKGUpfXJldHVybiBuLm9uKFwiZGF0YVwiLHUpLG0oZSxcImVycm9yXCIsZiksZS5vbmNlKFwiY2xvc2VcIixwKSxlLm9uY2UoXCJmaW5pc2hcIixoKSxlLmVtaXQoXCJwaXBlXCIsbiksITA9PT1lLndyaXRhYmxlTmVlZERyYWluP28uZmxvd2luZyYmYygpOm8uZmxvd2luZ3x8KGIoXCJwaXBlIHJlc3VtZVwiKSxuLnJlc3VtZSgpKSxlfSxELnByb3RvdHlwZS51bnBpcGU9ZnVuY3Rpb24oZSl7Y29uc3QgdD10aGlzLl9yZWFkYWJsZVN0YXRlO2lmKDA9PT10LnBpcGVzLmxlbmd0aClyZXR1cm4gdGhpcztpZighZSl7Y29uc3QgZT10LnBpcGVzO3QucGlwZXM9W10sdGhpcy5wYXVzZSgpO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF0uZW1pdChcInVucGlwZVwiLHRoaXMse2hhc1VucGlwZWQ6ITF9KTtyZXR1cm4gdGhpc31jb25zdCBuPW8odC5waXBlcyxlKTtyZXR1cm4tMT09PW58fCh0LnBpcGVzLnNwbGljZShuLDEpLDA9PT10LnBpcGVzLmxlbmd0aCYmdGhpcy5wYXVzZSgpLGUuZW1pdChcInVucGlwZVwiLHRoaXMse2hhc1VucGlwZWQ6ITF9KSksdGhpc30sRC5wcm90b3R5cGUub249ZnVuY3Rpb24oZSx0KXtjb25zdCBuPXYucHJvdG90eXBlLm9uLmNhbGwodGhpcyxlLHQpLG89dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm5cImRhdGFcIj09PWU/KG8ucmVhZGFibGVMaXN0ZW5pbmc9dGhpcy5saXN0ZW5lckNvdW50KFwicmVhZGFibGVcIik+MCwhMSE9PW8uZmxvd2luZyYmdGhpcy5yZXN1bWUoKSk6XCJyZWFkYWJsZVwiPT09ZSYmKG8uZW5kRW1pdHRlZHx8by5yZWFkYWJsZUxpc3RlbmluZ3x8KG8ucmVhZGFibGVMaXN0ZW5pbmc9by5uZWVkUmVhZGFibGU9ITAsby5mbG93aW5nPSExLG8uZW1pdHRlZFJlYWRhYmxlPSExLGIoXCJvbiByZWFkYWJsZVwiLG8ubGVuZ3RoLG8ucmVhZGluZyksby5sZW5ndGg/Rih0aGlzKTpvLnJlYWRpbmd8fHIubmV4dFRpY2socSx0aGlzKSkpLG59LEQucHJvdG90eXBlLmFkZExpc3RlbmVyPUQucHJvdG90eXBlLm9uLEQucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj12LnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lci5jYWxsKHRoaXMsZSx0KTtyZXR1cm5cInJlYWRhYmxlXCI9PT1lJiZyLm5leHRUaWNrKEcsdGhpcyksbn0sRC5wcm90b3R5cGUub2ZmPUQucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLEQucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbihlKXtjb25zdCB0PXYucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuXCJyZWFkYWJsZVwiIT09ZSYmdm9pZCAwIT09ZXx8ci5uZXh0VGljayhHLHRoaXMpLHR9LEQucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe2NvbnN0IGU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gZS5mbG93aW5nfHwoYihcInJlc3VtZVwiKSxlLmZsb3dpbmc9IWUucmVhZGFibGVMaXN0ZW5pbmcsZnVuY3Rpb24oZSx0KXt0LnJlc3VtZVNjaGVkdWxlZHx8KHQucmVzdW1lU2NoZWR1bGVkPSEwLHIubmV4dFRpY2soWSxlLHQpKX0odGhpcyxlKSksZVtJXT0hMSx0aGlzfSxELnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3JldHVybiBiKFwiY2FsbCBwYXVzZSBmbG93aW5nPSVqXCIsdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKSwhMSE9PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyYmKGIoXCJwYXVzZVwiKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9ITEsdGhpcy5lbWl0KFwicGF1c2VcIikpLHRoaXMuX3JlYWRhYmxlU3RhdGVbSV09ITAsdGhpc30sRC5wcm90b3R5cGUud3JhcD1mdW5jdGlvbihlKXtsZXQgdD0hMTtlLm9uKFwiZGF0YVwiLChuPT57IXRoaXMucHVzaChuKSYmZS5wYXVzZSYmKHQ9ITAsZS5wYXVzZSgpKX0pKSxlLm9uKFwiZW5kXCIsKCgpPT57dGhpcy5wdXNoKG51bGwpfSkpLGUub24oXCJlcnJvclwiLChlPT57Qih0aGlzLGUpfSkpLGUub24oXCJjbG9zZVwiLCgoKT0+e3RoaXMuZGVzdHJveSgpfSkpLGUub24oXCJkZXN0cm95XCIsKCgpPT57dGhpcy5kZXN0cm95KCl9KSksdGhpcy5fcmVhZD0oKT0+e3QmJmUucmVzdW1lJiYodD0hMSxlLnJlc3VtZSgpKX07Y29uc3Qgbj1jKGUpO2ZvcihsZXQgdD0xO3Q8bi5sZW5ndGg7dCsrKXtjb25zdCByPW5bdF07dm9pZCAwPT09dGhpc1tyXSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZVtyXSYmKHRoaXNbcl09ZVtyXS5iaW5kKGUpKX1yZXR1cm4gdGhpc30sRC5wcm90b3R5cGVbcF09ZnVuY3Rpb24oKXtyZXR1cm4gWCh0aGlzKX0sRC5wcm90b3R5cGUuaXRlcmF0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWUmJlAoZSxcIm9wdGlvbnNcIiksWCh0aGlzLGUpfSxzKEQucHJvdG90eXBlLHtyZWFkYWJsZTp7X19wcm90b19fOm51bGwsZ2V0KCl7Y29uc3QgZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiEoIWV8fCExPT09ZS5yZWFkYWJsZXx8ZS5kZXN0cm95ZWR8fGUuZXJyb3JFbWl0dGVkfHxlLmVuZEVtaXR0ZWQpfSxzZXQoZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGFibGU9ISFlKX19LHJlYWRhYmxlRGlkUmVhZDp7X19wcm90b19fOm51bGwsZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5kYXRhRW1pdHRlZH19LHJlYWRhYmxlQWJvcnRlZDp7X19wcm90b19fOm51bGwsZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hKCExPT09dGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkYWJsZXx8IXRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkJiYhdGhpcy5fcmVhZGFibGVTdGF0ZS5lcnJvcmVkfHx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQpfX0scmVhZGFibGVIaWdoV2F0ZXJNYXJrOntfX3Byb3RvX186bnVsbCxlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSxyZWFkYWJsZUJ1ZmZlcjp7X19wcm90b19fOm51bGwsZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXJ9fSxyZWFkYWJsZUZsb3dpbmc6e19fcHJvdG9fXzpudWxsLGVudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZ30sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9ZSl9fSxyZWFkYWJsZUxlbmd0aDp7X19wcm90b19fOm51bGwsZW51bWVyYWJsZTohMSxnZXQoKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGh9fSxyZWFkYWJsZU9iamVjdE1vZGU6e19fcHJvdG9fXzpudWxsLGVudW1lcmFibGU6ITEsZ2V0KCl7cmV0dXJuISF0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLm9iamVjdE1vZGV9fSxyZWFkYWJsZUVuY29kaW5nOntfX3Byb3RvX186bnVsbCxlbnVtZXJhYmxlOiExLGdldCgpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlP3RoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2Rpbmc6bnVsbH19LGVycm9yZWQ6e19fcHJvdG9fXzpudWxsLGVudW1lcmFibGU6ITEsZ2V0KCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGU/dGhpcy5fcmVhZGFibGVTdGF0ZS5lcnJvcmVkOm51bGx9fSxjbG9zZWQ6e19fcHJvdG9fXzpudWxsLGdldCgpe3JldHVybiEhdGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5jbG9zZWR9fSxkZXN0cm95ZWQ6e19fcHJvdG9fXzpudWxsLGVudW1lcmFibGU6ITEsZ2V0KCl7cmV0dXJuISF0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0KGUpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD1lKX19LHJlYWRhYmxlRW5kZWQ6e19fcHJvdG9fXzpudWxsLGVudW1lcmFibGU6ITEsZ2V0KCl7cmV0dXJuISF0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWR9fX0pLHMoVi5wcm90b3R5cGUse3BpcGVzQ291bnQ6e19fcHJvdG9fXzpudWxsLGdldCgpe3JldHVybiB0aGlzLnBpcGVzLmxlbmd0aH19LHBhdXNlZDp7X19wcm90b19fOm51bGwsZ2V0KCl7cmV0dXJuITEhPT10aGlzW0ldfSxzZXQoZSl7dGhpc1tJXT0hIWV9fX0pLEQuX2Zyb21MaXN0PUosRC5mcm9tPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIFQoRCxlLHQpfSxELmZyb21XZWI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcmUoKS5uZXdTdHJlYW1SZWFkYWJsZUZyb21SZWFkYWJsZVN0cmVhbShlLHQpfSxELnRvV2ViPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHJlKCkubmV3UmVhZGFibGVTdHJlYW1Gcm9tU3RyZWFtUmVhZGFibGUoZSx0KX0sRC53cmFwPWZ1bmN0aW9uKGUsdCl7dmFyIG4scjtyZXR1cm4gbmV3IEQoe29iamVjdE1vZGU6bnVsbD09PShuPW51bGwhPT0ocj1lLnJlYWRhYmxlT2JqZWN0TW9kZSkmJnZvaWQgMCE9PXI/cjplLm9iamVjdE1vZGUpfHx2b2lkIDA9PT1ufHxuLC4uLnQsZGVzdHJveSh0LG4pe18uZGVzdHJveWVyKGUsdCksbih0KX19KS53cmFwKGUpfX0sNDk4OihlLHQsbik9Pntjb25zdHtNYXRoRmxvb3I6cixOdW1iZXJJc0ludGVnZXI6b309bigxOTEpLHtFUlJfSU5WQUxJRF9BUkdfVkFMVUU6aX09bigxNDEpLmNvZGVzO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGU/MTY6MTYzODR9ZS5leHBvcnRzPXtnZXRIaWdoV2F0ZXJNYXJrOmZ1bmN0aW9uKGUsdCxuLGwpe2NvbnN0IHM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBudWxsIT1lLmhpZ2hXYXRlck1hcms/ZS5oaWdoV2F0ZXJNYXJrOnQ/ZVtuXTpudWxsfSh0LGwsbik7aWYobnVsbCE9cyl7aWYoIW8ocyl8fHM8MCl0aHJvdyBuZXcgaShsP2BvcHRpb25zLiR7bn1gOlwib3B0aW9ucy5oaWdoV2F0ZXJNYXJrXCIscyk7cmV0dXJuIHIocyl9cmV0dXJuIGEoZS5vYmplY3RNb2RlKX0sZ2V0RGVmYXVsdEhpZ2hXYXRlck1hcms6YX19LDIxMDooZSx0LG4pPT57Y29uc3R7T2JqZWN0U2V0UHJvdG90eXBlT2Y6cixTeW1ib2w6b309bigxOTEpO2UuZXhwb3J0cz1jO2NvbnN0e0VSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEOml9PW4oMTQxKS5jb2RlcyxhPW4oMTgyKSx7Z2V0SGlnaFdhdGVyTWFyazpsfT1uKDQ5OCk7cihjLnByb3RvdHlwZSxhLnByb3RvdHlwZSkscihjLGEpO2NvbnN0IHM9byhcImtDYWxsYmFja1wiKTtmdW5jdGlvbiBjKGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGMpKXJldHVybiBuZXcgYyhlKTtjb25zdCB0PWU/bCh0aGlzLGUsXCJyZWFkYWJsZUhpZ2hXYXRlck1hcmtcIiwhMCk6bnVsbDswPT09dCYmKGU9ey4uLmUsaGlnaFdhdGVyTWFyazpudWxsLHJlYWRhYmxlSGlnaFdhdGVyTWFyazp0LHdyaXRhYmxlSGlnaFdhdGVyTWFyazplLndyaXRhYmxlSGlnaFdhdGVyTWFya3x8MH0pLGEuY2FsbCh0aGlzLGUpLHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYz0hMSx0aGlzW3NdPW51bGwsZSYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUudHJhbnNmb3JtJiYodGhpcy5fdHJhbnNmb3JtPWUudHJhbnNmb3JtKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmZsdXNoJiYodGhpcy5fZmx1c2g9ZS5mbHVzaCkpLHRoaXMub24oXCJwcmVmaW5pc2hcIixmKX1mdW5jdGlvbiB1KGUpe1wiZnVuY3Rpb25cIiE9dHlwZW9mIHRoaXMuX2ZsdXNofHx0aGlzLmRlc3Ryb3llZD8odGhpcy5wdXNoKG51bGwpLGUmJmUoKSk6dGhpcy5fZmx1c2goKCh0LG4pPT57dD9lP2UodCk6dGhpcy5kZXN0cm95KHQpOihudWxsIT1uJiZ0aGlzLnB1c2gobiksdGhpcy5wdXNoKG51bGwpLGUmJmUoKSl9KSl9ZnVuY3Rpb24gZigpe3RoaXMuX2ZpbmFsIT09dSYmdS5jYWxsKHRoaXMpfWMucHJvdG90eXBlLl9maW5hbD11LGMucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oZSx0LG4pe3Rocm93IG5ldyBpKFwiX3RyYW5zZm9ybSgpXCIpfSxjLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oZSx0LG4pe2NvbnN0IHI9dGhpcy5fcmVhZGFibGVTdGF0ZSxvPXRoaXMuX3dyaXRhYmxlU3RhdGUsaT1yLmxlbmd0aDt0aGlzLl90cmFuc2Zvcm0oZSx0LCgoZSx0KT0+e2U/bihlKToobnVsbCE9dCYmdGhpcy5wdXNoKHQpLG8uZW5kZWR8fGk9PT1yLmxlbmd0aHx8ci5sZW5ndGg8ci5oaWdoV2F0ZXJNYXJrP24oKTp0aGlzW3NdPW4pfSkpfSxjLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbigpe2lmKHRoaXNbc10pe2NvbnN0IGU9dGhpc1tzXTt0aGlzW3NdPW51bGwsZSgpfX19LDEzMjooZSx0LG4pPT57Y29uc3R7U3ltYm9sOnIsU3ltYm9sQXN5bmNJdGVyYXRvcjpvLFN5bWJvbEl0ZXJhdG9yOmksU3ltYm9sRm9yOmF9PW4oMTkxKSxsPXIoXCJrRGVzdHJveWVkXCIpLHM9cihcImtJc0Vycm9yZWRcIiksYz1yKFwia0lzUmVhZGFibGVcIiksdT1yKFwia0lzRGlzdHVyYmVkXCIpLGY9YShcIm5vZGVqcy53ZWJzdHJlYW0uaXNDbG9zZWRQcm9taXNlXCIpLGQ9YShcIm5vZGVqcy53ZWJzdHJlYW0uY29udHJvbGxlckVycm9yRnVuY3Rpb25cIik7ZnVuY3Rpb24gcChlLHQ9ITEpe3ZhciBuO3JldHVybiEoIWV8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUucGlwZXx8XCJmdW5jdGlvblwiIT10eXBlb2YgZS5vbnx8dCYmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUucGF1c2V8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUucmVzdW1lKXx8ZS5fd3JpdGFibGVTdGF0ZSYmITE9PT0obnVsbD09PShuPWUuX3JlYWRhYmxlU3RhdGUpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLnJlYWRhYmxlKXx8ZS5fd3JpdGFibGVTdGF0ZSYmIWUuX3JlYWRhYmxlU3RhdGUpfWZ1bmN0aW9uIGgoZSl7dmFyIHQ7cmV0dXJuISghZXx8XCJmdW5jdGlvblwiIT10eXBlb2YgZS53cml0ZXx8XCJmdW5jdGlvblwiIT10eXBlb2YgZS5vbnx8ZS5fcmVhZGFibGVTdGF0ZSYmITE9PT0obnVsbD09PSh0PWUuX3dyaXRhYmxlU3RhdGUpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LndyaXRhYmxlKSl9ZnVuY3Rpb24gZyhlKXtyZXR1cm4gZSYmKGUuX3JlYWRhYmxlU3RhdGV8fGUuX3dyaXRhYmxlU3RhdGV8fFwiZnVuY3Rpb25cIj09dHlwZW9mIGUud3JpdGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUub258fFwiZnVuY3Rpb25cIj09dHlwZW9mIGUucGlwZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5vbil9ZnVuY3Rpb24gdihlKXtyZXR1cm4hKCFlfHxnKGUpfHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBlLnBpcGVUaHJvdWdofHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBlLmdldFJlYWRlcnx8XCJmdW5jdGlvblwiIT10eXBlb2YgZS5jYW5jZWwpfWZ1bmN0aW9uIG0oZSl7cmV0dXJuISghZXx8ZyhlKXx8XCJmdW5jdGlvblwiIT10eXBlb2YgZS5nZXRXcml0ZXJ8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUuYWJvcnQpfWZ1bmN0aW9uIEMoZSl7cmV0dXJuISghZXx8ZyhlKXx8XCJvYmplY3RcIiE9dHlwZW9mIGUucmVhZGFibGV8fFwib2JqZWN0XCIhPXR5cGVvZiBlLndyaXRhYmxlKX1mdW5jdGlvbiB5KGUpe2lmKCFnKGUpKXJldHVybiBudWxsO2NvbnN0IHQ9ZS5fd3JpdGFibGVTdGF0ZSxuPWUuX3JlYWRhYmxlU3RhdGUscj10fHxuO3JldHVybiEhKGUuZGVzdHJveWVkfHxlW2xdfHxudWxsIT1yJiZyLmRlc3Ryb3llZCl9ZnVuY3Rpb24gdyhlKXtpZighaChlKSlyZXR1cm4gbnVsbDtpZighMD09PWUud3JpdGFibGVFbmRlZClyZXR1cm4hMDtjb25zdCB0PWUuX3dyaXRhYmxlU3RhdGU7cmV0dXJuKG51bGw9PXR8fCF0LmVycm9yZWQpJiYoXCJib29sZWFuXCIhPXR5cGVvZihudWxsPT10P3ZvaWQgMDp0LmVuZGVkKT9udWxsOnQuZW5kZWQpfWZ1bmN0aW9uIGIoZSx0KXtpZighcChlKSlyZXR1cm4gbnVsbDtjb25zdCBuPWUuX3JlYWRhYmxlU3RhdGU7cmV0dXJuKG51bGw9PW58fCFuLmVycm9yZWQpJiYoXCJib29sZWFuXCIhPXR5cGVvZihudWxsPT1uP3ZvaWQgMDpuLmVuZEVtaXR0ZWQpP251bGw6ISEobi5lbmRFbWl0dGVkfHwhMT09PXQmJiEwPT09bi5lbmRlZCYmMD09PW4ubGVuZ3RoKSl9ZnVuY3Rpb24geChlKXtyZXR1cm4gZSYmbnVsbCE9ZVtjXT9lW2NdOlwiYm9vbGVhblwiIT10eXBlb2YobnVsbD09ZT92b2lkIDA6ZS5yZWFkYWJsZSk/bnVsbDoheShlKSYmcChlKSYmZS5yZWFkYWJsZSYmIWIoZSl9ZnVuY3Rpb24gXyhlKXtyZXR1cm5cImJvb2xlYW5cIiE9dHlwZW9mKG51bGw9PWU/dm9pZCAwOmUud3JpdGFibGUpP251bGw6IXkoZSkmJmgoZSkmJmUud3JpdGFibGUmJiF3KGUpfWZ1bmN0aW9uIE8oZSl7cmV0dXJuXCJib29sZWFuXCI9PXR5cGVvZiBlLl9jbG9zZWQmJlwiYm9vbGVhblwiPT10eXBlb2YgZS5fZGVmYXVsdEtlZXBBbGl2ZSYmXCJib29sZWFuXCI9PXR5cGVvZiBlLl9yZW1vdmVkQ29ubmVjdGlvbiYmXCJib29sZWFuXCI9PXR5cGVvZiBlLl9yZW1vdmVkQ29udExlbn1mdW5jdGlvbiBMKGUpe3JldHVyblwiYm9vbGVhblwiPT10eXBlb2YgZS5fc2VudDEwMCYmTyhlKX1lLmV4cG9ydHM9e2tEZXN0cm95ZWQ6bCxpc0Rpc3R1cmJlZDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4hKCFlfHwhKG51bGwhPT0odD1lW3VdKSYmdm9pZCAwIT09dD90OmUucmVhZGFibGVEaWRSZWFkfHxlLnJlYWRhYmxlQWJvcnRlZCkpfSxrSXNEaXN0dXJiZWQ6dSxpc0Vycm9yZWQ6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLG8saSxhLGwsYyx1LGY7cmV0dXJuISghZXx8IShudWxsIT09KHQ9bnVsbCE9PShuPW51bGwhPT0ocj1udWxsIT09KG89bnVsbCE9PShpPW51bGwhPT0oYT1lW3NdKSYmdm9pZCAwIT09YT9hOmUucmVhZGFibGVFcnJvcmVkKSYmdm9pZCAwIT09aT9pOmUud3JpdGFibGVFcnJvcmVkKSYmdm9pZCAwIT09bz9vOm51bGw9PT0obD1lLl9yZWFkYWJsZVN0YXRlKXx8dm9pZCAwPT09bD92b2lkIDA6bC5lcnJvckVtaXR0ZWQpJiZ2b2lkIDAhPT1yP3I6bnVsbD09PShjPWUuX3dyaXRhYmxlU3RhdGUpfHx2b2lkIDA9PT1jP3ZvaWQgMDpjLmVycm9yRW1pdHRlZCkmJnZvaWQgMCE9PW4/bjpudWxsPT09KHU9ZS5fcmVhZGFibGVTdGF0ZSl8fHZvaWQgMD09PXU/dm9pZCAwOnUuZXJyb3JlZCkmJnZvaWQgMCE9PXQ/dDpudWxsPT09KGY9ZS5fd3JpdGFibGVTdGF0ZSl8fHZvaWQgMD09PWY/dm9pZCAwOmYuZXJyb3JlZCkpfSxrSXNFcnJvcmVkOnMsaXNSZWFkYWJsZTp4LGtJc1JlYWRhYmxlOmMsa0lzQ2xvc2VkUHJvbWlzZTpmLGtDb250cm9sbGVyRXJyb3JGdW5jdGlvbjpkLGlzQ2xvc2VkOmZ1bmN0aW9uKGUpe2lmKCFnKGUpKXJldHVybiBudWxsO2lmKFwiYm9vbGVhblwiPT10eXBlb2YgZS5jbG9zZWQpcmV0dXJuIGUuY2xvc2VkO2NvbnN0IHQ9ZS5fd3JpdGFibGVTdGF0ZSxuPWUuX3JlYWRhYmxlU3RhdGU7cmV0dXJuXCJib29sZWFuXCI9PXR5cGVvZihudWxsPT10P3ZvaWQgMDp0LmNsb3NlZCl8fFwiYm9vbGVhblwiPT10eXBlb2YobnVsbD09bj92b2lkIDA6bi5jbG9zZWQpPyhudWxsPT10P3ZvaWQgMDp0LmNsb3NlZCl8fChudWxsPT1uP3ZvaWQgMDpuLmNsb3NlZCk6XCJib29sZWFuXCI9PXR5cGVvZiBlLl9jbG9zZWQmJk8oZSk/ZS5fY2xvc2VkOm51bGx9LGlzRGVzdHJveWVkOnksaXNEdXBsZXhOb2RlU3RyZWFtOmZ1bmN0aW9uKGUpe3JldHVybiEoIWV8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUucGlwZXx8IWUuX3JlYWRhYmxlU3RhdGV8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUub258fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUud3JpdGUpfSxpc0ZpbmlzaGVkOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcoZSk/ISgheShlKSYmKCExIT09KG51bGw9PXQ/dm9pZCAwOnQucmVhZGFibGUpJiZ4KGUpfHwhMSE9PShudWxsPT10P3ZvaWQgMDp0LndyaXRhYmxlKSYmXyhlKSkpOm51bGx9LGlzSXRlcmFibGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbCE9ZSYmKCEwPT09dD9cImZ1bmN0aW9uXCI9PXR5cGVvZiBlW29dOiExPT09dD9cImZ1bmN0aW9uXCI9PXR5cGVvZiBlW2ldOlwiZnVuY3Rpb25cIj09dHlwZW9mIGVbb118fFwiZnVuY3Rpb25cIj09dHlwZW9mIGVbaV0pfSxpc1JlYWRhYmxlTm9kZVN0cmVhbTpwLGlzUmVhZGFibGVTdHJlYW06dixpc1JlYWRhYmxlRW5kZWQ6ZnVuY3Rpb24oZSl7aWYoIXAoZSkpcmV0dXJuIG51bGw7aWYoITA9PT1lLnJlYWRhYmxlRW5kZWQpcmV0dXJuITA7Y29uc3QgdD1lLl9yZWFkYWJsZVN0YXRlO3JldHVybiEoIXR8fHQuZXJyb3JlZCkmJihcImJvb2xlYW5cIiE9dHlwZW9mKG51bGw9PXQ/dm9pZCAwOnQuZW5kZWQpP251bGw6dC5lbmRlZCl9LGlzUmVhZGFibGVGaW5pc2hlZDpiLGlzUmVhZGFibGVFcnJvcmVkOmZ1bmN0aW9uKGUpe3ZhciB0LG47cmV0dXJuIGcoZSk/ZS5yZWFkYWJsZUVycm9yZWQ/ZS5yZWFkYWJsZUVycm9yZWQ6bnVsbCE9PSh0PW51bGw9PT0obj1lLl9yZWFkYWJsZVN0YXRlKXx8dm9pZCAwPT09bj92b2lkIDA6bi5lcnJvcmVkKSYmdm9pZCAwIT09dD90Om51bGw6bnVsbH0saXNOb2RlU3RyZWFtOmcsaXNXZWJTdHJlYW06ZnVuY3Rpb24oZSl7cmV0dXJuIHYoZSl8fG0oZSl8fEMoZSl9LGlzV3JpdGFibGU6Xyxpc1dyaXRhYmxlTm9kZVN0cmVhbTpoLGlzV3JpdGFibGVTdHJlYW06bSxpc1dyaXRhYmxlRW5kZWQ6dyxpc1dyaXRhYmxlRmluaXNoZWQ6ZnVuY3Rpb24oZSx0KXtpZighaChlKSlyZXR1cm4gbnVsbDtpZighMD09PWUud3JpdGFibGVGaW5pc2hlZClyZXR1cm4hMDtjb25zdCBuPWUuX3dyaXRhYmxlU3RhdGU7cmV0dXJuKG51bGw9PW58fCFuLmVycm9yZWQpJiYoXCJib29sZWFuXCIhPXR5cGVvZihudWxsPT1uP3ZvaWQgMDpuLmZpbmlzaGVkKT9udWxsOiEhKG4uZmluaXNoZWR8fCExPT09dCYmITA9PT1uLmVuZGVkJiYwPT09bi5sZW5ndGgpKX0saXNXcml0YWJsZUVycm9yZWQ6ZnVuY3Rpb24oZSl7dmFyIHQsbjtyZXR1cm4gZyhlKT9lLndyaXRhYmxlRXJyb3JlZD9lLndyaXRhYmxlRXJyb3JlZDpudWxsIT09KHQ9bnVsbD09PShuPWUuX3dyaXRhYmxlU3RhdGUpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmVycm9yZWQpJiZ2b2lkIDAhPT10P3Q6bnVsbDpudWxsfSxpc1NlcnZlclJlcXVlc3Q6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuXCJib29sZWFuXCI9PXR5cGVvZiBlLl9jb25zdW1pbmcmJlwiYm9vbGVhblwiPT10eXBlb2YgZS5fZHVtcGVkJiZ2b2lkIDA9PT0obnVsbD09PSh0PWUucmVxKXx8dm9pZCAwPT09dD92b2lkIDA6dC51cGdyYWRlT3JDb25uZWN0KX0saXNTZXJ2ZXJSZXNwb25zZTpMLHdpbGxFbWl0Q2xvc2U6ZnVuY3Rpb24oZSl7aWYoIWcoZSkpcmV0dXJuIG51bGw7Y29uc3QgdD1lLl93cml0YWJsZVN0YXRlLG49ZS5fcmVhZGFibGVTdGF0ZSxyPXR8fG47cmV0dXJuIXImJkwoZSl8fCEhKHImJnIuYXV0b0Rlc3Ryb3kmJnIuZW1pdENsb3NlJiYhMT09PXIuY2xvc2VkKX0saXNUcmFuc2Zvcm1TdHJlYW06Q319LDM3MzooZSx0LG4pPT57Y29uc3Qgcj1uKDUzMykse0FycmF5UHJvdG90eXBlU2xpY2U6byxFcnJvcjppLEZ1bmN0aW9uUHJvdG90eXBlU3ltYm9sSGFzSW5zdGFuY2U6YSxPYmplY3REZWZpbmVQcm9wZXJ0eTpsLE9iamVjdERlZmluZVByb3BlcnRpZXM6cyxPYmplY3RTZXRQcm90b3R5cGVPZjpjLFN0cmluZ1Byb3RvdHlwZVRvTG93ZXJDYXNlOnUsU3ltYm9sOmYsU3ltYm9sSGFzSW5zdGFuY2U6ZH09bigxOTEpO2UuZXhwb3J0cz1BLEEuV3JpdGFibGVTdGF0ZT1QO2NvbnN0e0V2ZW50RW1pdHRlcjpwfT1uKDQ2NSksaD1uKDIwMCkuU3RyZWFtLHtCdWZmZXI6Z309big0ODUpLHY9bigyMzApLHthZGRBYm9ydFNpZ25hbDptfT1uKDM3NCkse2dldEhpZ2hXYXRlck1hcms6QyxnZXREZWZhdWx0SGlnaFdhdGVyTWFyazp5fT1uKDQ5OCkse0VSUl9JTlZBTElEX0FSR19UWVBFOncsRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQ6YixFUlJfTVVMVElQTEVfQ0FMTEJBQ0s6eCxFUlJfU1RSRUFNX0NBTk5PVF9QSVBFOl8sRVJSX1NUUkVBTV9ERVNUUk9ZRUQ6TyxFUlJfU1RSRUFNX0FMUkVBRFlfRklOSVNIRUQ6TCxFUlJfU1RSRUFNX05VTExfVkFMVUVTOkUsRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQ6UyxFUlJfVU5LTk9XTl9FTkNPRElORzpqfT1uKDE0MSkuY29kZXMse2Vycm9yT3JEZXN0cm95Ok19PXY7ZnVuY3Rpb24gaygpe31jKEEucHJvdG90eXBlLGgucHJvdG90eXBlKSxjKEEsaCk7Y29uc3QgUj1mKFwia09uRmluaXNoZWRcIik7ZnVuY3Rpb24gUChlLHQscil7XCJib29sZWFuXCIhPXR5cGVvZiByJiYocj10IGluc3RhbmNlb2YgbigxODIpKSx0aGlzLm9iamVjdE1vZGU9ISghZXx8IWUub2JqZWN0TW9kZSksciYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEoIWV8fCFlLndyaXRhYmxlT2JqZWN0TW9kZSkpLHRoaXMuaGlnaFdhdGVyTWFyaz1lP0ModGhpcyxlLFwid3JpdGFibGVIaWdoV2F0ZXJNYXJrXCIscik6eSghMSksdGhpcy5maW5hbENhbGxlZD0hMSx0aGlzLm5lZWREcmFpbj0hMSx0aGlzLmVuZGluZz0hMSx0aGlzLmVuZGVkPSExLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITE7Y29uc3Qgbz0hKCFlfHwhMSE9PWUuZGVjb2RlU3RyaW5ncyk7dGhpcy5kZWNvZGVTdHJpbmdzPSFvLHRoaXMuZGVmYXVsdEVuY29kaW5nPWUmJmUuZGVmYXVsdEVuY29kaW5nfHxcInV0ZjhcIix0aGlzLmxlbmd0aD0wLHRoaXMud3JpdGluZz0hMSx0aGlzLmNvcmtlZD0wLHRoaXMuc3luYz0hMCx0aGlzLmJ1ZmZlclByb2Nlc3Npbmc9ITEsdGhpcy5vbndyaXRlPVYuYmluZCh2b2lkIDAsdCksdGhpcy53cml0ZWNiPW51bGwsdGhpcy53cml0ZWxlbj0wLHRoaXMuYWZ0ZXJXcml0ZVRpY2tJbmZvPW51bGwsSSh0aGlzKSx0aGlzLnBlbmRpbmdjYj0wLHRoaXMuY29uc3RydWN0ZWQ9ITAsdGhpcy5wcmVmaW5pc2hlZD0hMSx0aGlzLmVycm9yRW1pdHRlZD0hMSx0aGlzLmVtaXRDbG9zZT0hZXx8ITEhPT1lLmVtaXRDbG9zZSx0aGlzLmF1dG9EZXN0cm95PSFlfHwhMSE9PWUuYXV0b0Rlc3Ryb3ksdGhpcy5lcnJvcmVkPW51bGwsdGhpcy5jbG9zZWQ9ITEsdGhpcy5jbG9zZUVtaXR0ZWQ9ITEsdGhpc1tSXT1bXX1mdW5jdGlvbiBJKGUpe2UuYnVmZmVyZWQ9W10sZS5idWZmZXJlZEluZGV4PTAsZS5hbGxCdWZmZXJzPSEwLGUuYWxsTm9vcD0hMH1mdW5jdGlvbiBBKGUpe2NvbnN0IHQ9dGhpcyBpbnN0YW5jZW9mIG4oMTgyKTtpZighdCYmIWEoQSx0aGlzKSlyZXR1cm4gbmV3IEEoZSk7dGhpcy5fd3JpdGFibGVTdGF0ZT1uZXcgUChlLHRoaXMsdCksZSYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUud3JpdGUmJih0aGlzLl93cml0ZT1lLndyaXRlKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLndyaXRldiYmKHRoaXMuX3dyaXRldj1lLndyaXRldiksXCJmdW5jdGlvblwiPT10eXBlb2YgZS5kZXN0cm95JiYodGhpcy5fZGVzdHJveT1lLmRlc3Ryb3kpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUuZmluYWwmJih0aGlzLl9maW5hbD1lLmZpbmFsKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmNvbnN0cnVjdCYmKHRoaXMuX2NvbnN0cnVjdD1lLmNvbnN0cnVjdCksZS5zaWduYWwmJm0oZS5zaWduYWwsdGhpcykpLGguY2FsbCh0aGlzLGUpLHYuY29uc3RydWN0KHRoaXMsKCgpPT57Y29uc3QgZT10aGlzLl93cml0YWJsZVN0YXRlO2Uud3JpdGluZ3x8Tih0aGlzLGUpLFUodGhpcyxlKX0pKX1mdW5jdGlvbiBUKGUsdCxuLG8pe2NvbnN0IGk9ZS5fd3JpdGFibGVTdGF0ZTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuKW89bixuPWkuZGVmYXVsdEVuY29kaW5nO2Vsc2V7aWYobil7aWYoXCJidWZmZXJcIiE9PW4mJiFnLmlzRW5jb2RpbmcobikpdGhyb3cgbmV3IGoobil9ZWxzZSBuPWkuZGVmYXVsdEVuY29kaW5nO1wiZnVuY3Rpb25cIiE9dHlwZW9mIG8mJihvPWspfWlmKG51bGw9PT10KXRocm93IG5ldyBFO2lmKCFpLm9iamVjdE1vZGUpaWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpITEhPT1pLmRlY29kZVN0cmluZ3MmJih0PWcuZnJvbSh0LG4pLG49XCJidWZmZXJcIik7ZWxzZSBpZih0IGluc3RhbmNlb2YgZyluPVwiYnVmZmVyXCI7ZWxzZXtpZighaC5faXNVaW50OEFycmF5KHQpKXRocm93IG5ldyB3KFwiY2h1bmtcIixbXCJzdHJpbmdcIixcIkJ1ZmZlclwiLFwiVWludDhBcnJheVwiXSx0KTt0PWguX3VpbnQ4QXJyYXlUb0J1ZmZlcih0KSxuPVwiYnVmZmVyXCJ9bGV0IGE7cmV0dXJuIGkuZW5kaW5nP2E9bmV3IFM6aS5kZXN0cm95ZWQmJihhPW5ldyBPKFwid3JpdGVcIikpLGE/KHIubmV4dFRpY2sobyxhKSxNKGUsYSwhMCksYSk6KGkucGVuZGluZ2NiKyssZnVuY3Rpb24oZSx0LG4scixvKXtjb25zdCBpPXQub2JqZWN0TW9kZT8xOm4ubGVuZ3RoO3QubGVuZ3RoKz1pO2NvbnN0IGE9dC5sZW5ndGg8dC5oaWdoV2F0ZXJNYXJrO3JldHVybiBhfHwodC5uZWVkRHJhaW49ITApLHQud3JpdGluZ3x8dC5jb3JrZWR8fHQuZXJyb3JlZHx8IXQuY29uc3RydWN0ZWQ/KHQuYnVmZmVyZWQucHVzaCh7Y2h1bms6bixlbmNvZGluZzpyLGNhbGxiYWNrOm99KSx0LmFsbEJ1ZmZlcnMmJlwiYnVmZmVyXCIhPT1yJiYodC5hbGxCdWZmZXJzPSExKSx0LmFsbE5vb3AmJm8hPT1rJiYodC5hbGxOb29wPSExKSk6KHQud3JpdGVsZW49aSx0LndyaXRlY2I9byx0LndyaXRpbmc9ITAsdC5zeW5jPSEwLGUuX3dyaXRlKG4scix0Lm9ud3JpdGUpLHQuc3luYz0hMSksYSYmIXQuZXJyb3JlZCYmIXQuZGVzdHJveWVkfShlLGksdCxuLG8pKX1mdW5jdGlvbiBIKGUsdCxuLHIsbyxpLGEpe3Qud3JpdGVsZW49cix0LndyaXRlY2I9YSx0LndyaXRpbmc9ITAsdC5zeW5jPSEwLHQuZGVzdHJveWVkP3Qub253cml0ZShuZXcgTyhcIndyaXRlXCIpKTpuP2UuX3dyaXRldihvLHQub253cml0ZSk6ZS5fd3JpdGUobyxpLHQub253cml0ZSksdC5zeW5jPSExfWZ1bmN0aW9uIEIoZSx0LG4scil7LS10LnBlbmRpbmdjYixyKG4pLCQodCksTShlLG4pfWZ1bmN0aW9uIFYoZSx0KXtjb25zdCBuPWUuX3dyaXRhYmxlU3RhdGUsbz1uLnN5bmMsaT1uLndyaXRlY2I7XCJmdW5jdGlvblwiPT10eXBlb2YgaT8obi53cml0aW5nPSExLG4ud3JpdGVjYj1udWxsLG4ubGVuZ3RoLT1uLndyaXRlbGVuLG4ud3JpdGVsZW49MCx0Pyh0LnN0YWNrLG4uZXJyb3JlZHx8KG4uZXJyb3JlZD10KSxlLl9yZWFkYWJsZVN0YXRlJiYhZS5fcmVhZGFibGVTdGF0ZS5lcnJvcmVkJiYoZS5fcmVhZGFibGVTdGF0ZS5lcnJvcmVkPXQpLG8/ci5uZXh0VGljayhCLGUsbix0LGkpOkIoZSxuLHQsaSkpOihuLmJ1ZmZlcmVkLmxlbmd0aD5uLmJ1ZmZlcmVkSW5kZXgmJk4oZSxuKSxvP251bGwhPT1uLmFmdGVyV3JpdGVUaWNrSW5mbyYmbi5hZnRlcldyaXRlVGlja0luZm8uY2I9PT1pP24uYWZ0ZXJXcml0ZVRpY2tJbmZvLmNvdW50Kys6KG4uYWZ0ZXJXcml0ZVRpY2tJbmZvPXtjb3VudDoxLGNiOmksc3RyZWFtOmUsc3RhdGU6bn0sci5uZXh0VGljayhELG4uYWZ0ZXJXcml0ZVRpY2tJbmZvKSk6WihlLG4sMSxpKSkpOk0oZSxuZXcgeCl9ZnVuY3Rpb24gRCh7c3RyZWFtOmUsc3RhdGU6dCxjb3VudDpuLGNiOnJ9KXtyZXR1cm4gdC5hZnRlcldyaXRlVGlja0luZm89bnVsbCxaKGUsdCxuLHIpfWZ1bmN0aW9uIFooZSx0LG4scil7Zm9yKCF0LmVuZGluZyYmIWUuZGVzdHJveWVkJiYwPT09dC5sZW5ndGgmJnQubmVlZERyYWluJiYodC5uZWVkRHJhaW49ITEsZS5lbWl0KFwiZHJhaW5cIikpO24tLSA+MDspdC5wZW5kaW5nY2ItLSxyKCk7dC5kZXN0cm95ZWQmJiQodCksVShlLHQpfWZ1bmN0aW9uICQoZSl7aWYoZS53cml0aW5nKXJldHVybjtmb3IobGV0IG49ZS5idWZmZXJlZEluZGV4O248ZS5idWZmZXJlZC5sZW5ndGg7KytuKXt2YXIgdDtjb25zdHtjaHVuazpyLGNhbGxiYWNrOm99PWUuYnVmZmVyZWRbbl0saT1lLm9iamVjdE1vZGU/MTpyLmxlbmd0aDtlLmxlbmd0aC09aSxvKG51bGwhPT0odD1lLmVycm9yZWQpJiZ2b2lkIDAhPT10P3Q6bmV3IE8oXCJ3cml0ZVwiKSl9Y29uc3Qgbj1lW1JdLnNwbGljZSgwKTtmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKyl7dmFyIHI7blt0XShudWxsIT09KHI9ZS5lcnJvcmVkKSYmdm9pZCAwIT09cj9yOm5ldyBPKFwiZW5kXCIpKX1JKGUpfWZ1bmN0aW9uIE4oZSx0KXtpZih0LmNvcmtlZHx8dC5idWZmZXJQcm9jZXNzaW5nfHx0LmRlc3Ryb3llZHx8IXQuY29uc3RydWN0ZWQpcmV0dXJuO2NvbnN0e2J1ZmZlcmVkOm4sYnVmZmVyZWRJbmRleDpyLG9iamVjdE1vZGU6aX09dCxhPW4ubGVuZ3RoLXI7aWYoIWEpcmV0dXJuO2xldCBsPXI7aWYodC5idWZmZXJQcm9jZXNzaW5nPSEwLGE+MSYmZS5fd3JpdGV2KXt0LnBlbmRpbmdjYi09YS0xO2NvbnN0IHI9dC5hbGxOb29wP2s6ZT0+e2ZvcihsZXQgdD1sO3Q8bi5sZW5ndGg7Kyt0KW5bdF0uY2FsbGJhY2soZSl9LGk9dC5hbGxOb29wJiYwPT09bD9uOm8obixsKTtpLmFsbEJ1ZmZlcnM9dC5hbGxCdWZmZXJzLEgoZSx0LCEwLHQubGVuZ3RoLGksXCJcIixyKSxJKHQpfWVsc2V7ZG97Y29uc3R7Y2h1bms6cixlbmNvZGluZzpvLGNhbGxiYWNrOmF9PW5bbF07bltsKytdPW51bGwsSChlLHQsITEsaT8xOnIubGVuZ3RoLHIsbyxhKX13aGlsZShsPG4ubGVuZ3RoJiYhdC53cml0aW5nKTtsPT09bi5sZW5ndGg/SSh0KTpsPjI1Nj8obi5zcGxpY2UoMCxsKSx0LmJ1ZmZlcmVkSW5kZXg9MCk6dC5idWZmZXJlZEluZGV4PWx9dC5idWZmZXJQcm9jZXNzaW5nPSExfWZ1bmN0aW9uIEYoZSl7cmV0dXJuIGUuZW5kaW5nJiYhZS5kZXN0cm95ZWQmJmUuY29uc3RydWN0ZWQmJjA9PT1lLmxlbmd0aCYmIWUuZXJyb3JlZCYmMD09PWUuYnVmZmVyZWQubGVuZ3RoJiYhZS5maW5pc2hlZCYmIWUud3JpdGluZyYmIWUuZXJyb3JFbWl0dGVkJiYhZS5jbG9zZUVtaXR0ZWR9ZnVuY3Rpb24gVShlLHQsbil7Rih0KSYmKGZ1bmN0aW9uKGUsdCl7dC5wcmVmaW5pc2hlZHx8dC5maW5hbENhbGxlZHx8KFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUuX2ZpbmFsfHx0LmRlc3Ryb3llZD8odC5wcmVmaW5pc2hlZD0hMCxlLmVtaXQoXCJwcmVmaW5pc2hcIikpOih0LmZpbmFsQ2FsbGVkPSEwLGZ1bmN0aW9uKGUsdCl7bGV0IG49ITE7ZnVuY3Rpb24gbyhvKXtpZihuKU0oZSxudWxsIT1vP286eCgpKTtlbHNlIGlmKG49ITAsdC5wZW5kaW5nY2ItLSxvKXtjb25zdCBuPXRbUl0uc3BsaWNlKDApO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKW5bZV0obyk7TShlLG8sdC5zeW5jKX1lbHNlIEYodCkmJih0LnByZWZpbmlzaGVkPSEwLGUuZW1pdChcInByZWZpbmlzaFwiKSx0LnBlbmRpbmdjYisrLHIubmV4dFRpY2soVyxlLHQpKX10LnN5bmM9ITAsdC5wZW5kaW5nY2IrKzt0cnl7ZS5fZmluYWwobyl9Y2F0Y2goZSl7byhlKX10LnN5bmM9ITF9KGUsdCkpKX0oZSx0KSwwPT09dC5wZW5kaW5nY2ImJihuPyh0LnBlbmRpbmdjYisrLHIubmV4dFRpY2soKChlLHQpPT57Rih0KT9XKGUsdCk6dC5wZW5kaW5nY2ItLX0pLGUsdCkpOkYodCkmJih0LnBlbmRpbmdjYisrLFcoZSx0KSkpKX1mdW5jdGlvbiBXKGUsdCl7dC5wZW5kaW5nY2ItLSx0LmZpbmlzaGVkPSEwO2NvbnN0IG49dFtSXS5zcGxpY2UoMCk7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspbltlXSgpO2lmKGUuZW1pdChcImZpbmlzaFwiKSx0LmF1dG9EZXN0cm95KXtjb25zdCB0PWUuX3JlYWRhYmxlU3RhdGU7KCF0fHx0LmF1dG9EZXN0cm95JiYodC5lbmRFbWl0dGVkfHwhMT09PXQucmVhZGFibGUpKSYmZS5kZXN0cm95KCl9fVAucHJvdG90eXBlLmdldEJ1ZmZlcj1mdW5jdGlvbigpe3JldHVybiBvKHRoaXMuYnVmZmVyZWQsdGhpcy5idWZmZXJlZEluZGV4KX0sbChQLnByb3RvdHlwZSxcImJ1ZmZlcmVkUmVxdWVzdENvdW50XCIse19fcHJvdG9fXzpudWxsLGdldCgpe3JldHVybiB0aGlzLmJ1ZmZlcmVkLmxlbmd0aC10aGlzLmJ1ZmZlcmVkSW5kZXh9fSksbChBLGQse19fcHJvdG9fXzpudWxsLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiEhYSh0aGlzLGUpfHx0aGlzPT09QSYmZSYmZS5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIFB9fSksQS5wcm90b3R5cGUucGlwZT1mdW5jdGlvbigpe00odGhpcyxuZXcgXyl9LEEucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4hMD09PVQodGhpcyxlLHQsbil9LEEucHJvdG90eXBlLmNvcms9ZnVuY3Rpb24oKXt0aGlzLl93cml0YWJsZVN0YXRlLmNvcmtlZCsrfSxBLnByb3RvdHlwZS51bmNvcms9ZnVuY3Rpb24oKXtjb25zdCBlPXRoaXMuX3dyaXRhYmxlU3RhdGU7ZS5jb3JrZWQmJihlLmNvcmtlZC0tLGUud3JpdGluZ3x8Tih0aGlzLGUpKX0sQS5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5nPWZ1bmN0aW9uKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT11KGUpKSwhZy5pc0VuY29kaW5nKGUpKXRocm93IG5ldyBqKGUpO3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmRlZmF1bHRFbmNvZGluZz1lLHRoaXN9LEEucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihlLHQsbil7aWYoIXRoaXMuX3dyaXRldil0aHJvdyBuZXcgYihcIl93cml0ZSgpXCIpO3RoaXMuX3dyaXRldihbe2NodW5rOmUsZW5jb2Rpbmc6dH1dLG4pfSxBLnByb3RvdHlwZS5fd3JpdGV2PW51bGwsQS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKGUsdCxuKXtjb25zdCBvPXRoaXMuX3dyaXRhYmxlU3RhdGU7bGV0IGE7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZT8obj1lLGU9bnVsbCx0PW51bGwpOlwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJihuPXQsdD1udWxsKSxudWxsIT1lKXtjb25zdCBuPVQodGhpcyxlLHQpO24gaW5zdGFuY2VvZiBpJiYoYT1uKX1yZXR1cm4gby5jb3JrZWQmJihvLmNvcmtlZD0xLHRoaXMudW5jb3JrKCkpLGF8fChvLmVycm9yZWR8fG8uZW5kaW5nP28uZmluaXNoZWQ/YT1uZXcgTChcImVuZFwiKTpvLmRlc3Ryb3llZCYmKGE9bmV3IE8oXCJlbmRcIikpOihvLmVuZGluZz0hMCxVKHRoaXMsbywhMCksby5lbmRlZD0hMCkpLFwiZnVuY3Rpb25cIj09dHlwZW9mIG4mJihhfHxvLmZpbmlzaGVkP3IubmV4dFRpY2sobixhKTpvW1JdLnB1c2gobikpLHRoaXN9LHMoQS5wcm90b3R5cGUse2Nsb3NlZDp7X19wcm90b19fOm51bGwsZ2V0KCl7cmV0dXJuISF0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmNsb3NlZH19LGRlc3Ryb3llZDp7X19wcm90b19fOm51bGwsZ2V0KCl7cmV0dXJuISF0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0KGUpe3RoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1lKX19LHdyaXRhYmxlOntfX3Byb3RvX186bnVsbCxnZXQoKXtjb25zdCBlPXRoaXMuX3dyaXRhYmxlU3RhdGU7cmV0dXJuISghZXx8ITE9PT1lLndyaXRhYmxlfHxlLmRlc3Ryb3llZHx8ZS5lcnJvcmVkfHxlLmVuZGluZ3x8ZS5lbmRlZCl9LHNldChlKXt0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS53cml0YWJsZT0hIWUpfX0sd3JpdGFibGVGaW5pc2hlZDp7X19wcm90b19fOm51bGwsZ2V0KCl7cmV0dXJuISF0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkfX0sd3JpdGFibGVPYmplY3RNb2RlOntfX3Byb3RvX186bnVsbCxnZXQoKXtyZXR1cm4hIXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUub2JqZWN0TW9kZX19LHdyaXRhYmxlQnVmZmVyOntfX3Byb3RvX186bnVsbCxnZXQoKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKX19LHdyaXRhYmxlRW5kZWQ6e19fcHJvdG9fXzpudWxsLGdldCgpe3JldHVybiEhdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmd9fSx3cml0YWJsZU5lZWREcmFpbjp7X19wcm90b19fOm51bGwsZ2V0KCl7Y29uc3QgZT10aGlzLl93cml0YWJsZVN0YXRlO3JldHVybiEhZSYmIWUuZGVzdHJveWVkJiYhZS5lbmRpbmcmJmUubmVlZERyYWlufX0sd3JpdGFibGVIaWdoV2F0ZXJNYXJrOntfX3Byb3RvX186bnVsbCxnZXQoKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0sd3JpdGFibGVDb3JrZWQ6e19fcHJvdG9fXzpudWxsLGdldCgpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlP3RoaXMuX3dyaXRhYmxlU3RhdGUuY29ya2VkOjB9fSx3cml0YWJsZUxlbmd0aDp7X19wcm90b19fOm51bGwsZ2V0KCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUubGVuZ3RofX0sZXJyb3JlZDp7X19wcm90b19fOm51bGwsZW51bWVyYWJsZTohMSxnZXQoKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZT90aGlzLl93cml0YWJsZVN0YXRlLmVycm9yZWQ6bnVsbH19LHdyaXRhYmxlQWJvcnRlZDp7X19wcm90b19fOm51bGwsZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hKCExPT09dGhpcy5fd3JpdGFibGVTdGF0ZS53cml0YWJsZXx8IXRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkJiYhdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvcmVkfHx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkKX19fSk7Y29uc3Qgej12LmRlc3Ryb3k7bGV0IEc7ZnVuY3Rpb24gcSgpe3JldHVybiB2b2lkIDA9PT1HJiYoRz17fSksR31BLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj10aGlzLl93cml0YWJsZVN0YXRlO3JldHVybiFuLmRlc3Ryb3llZCYmKG4uYnVmZmVyZWRJbmRleDxuLmJ1ZmZlcmVkLmxlbmd0aHx8bltSXS5sZW5ndGgpJiZyLm5leHRUaWNrKCQsbiksei5jYWxsKHRoaXMsZSx0KSx0aGlzfSxBLnByb3RvdHlwZS5fdW5kZXN0cm95PXYudW5kZXN0cm95LEEucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKGUsdCl7dChlKX0sQS5wcm90b3R5cGVbcC5jYXB0dXJlUmVqZWN0aW9uU3ltYm9sXT1mdW5jdGlvbihlKXt0aGlzLmRlc3Ryb3koZSl9LEEuZnJvbVdlYj1mdW5jdGlvbihlLHQpe3JldHVybiBxKCkubmV3U3RyZWFtV3JpdGFibGVGcm9tV3JpdGFibGVTdHJlYW0oZSx0KX0sQS50b1dlYj1mdW5jdGlvbihlKXtyZXR1cm4gcSgpLm5ld1dyaXRhYmxlU3RyZWFtRnJvbVN0cmVhbVdyaXRhYmxlKGUpfX0sOTA0OihlLHQsbik9Pntjb25zdHtBcnJheUlzQXJyYXk6cixBcnJheVByb3RvdHlwZUluY2x1ZGVzOm8sQXJyYXlQcm90b3R5cGVKb2luOmksQXJyYXlQcm90b3R5cGVNYXA6YSxOdW1iZXJJc0ludGVnZXI6bCxOdW1iZXJJc05hTjpzLE51bWJlck1BWF9TQUZFX0lOVEVHRVI6YyxOdW1iZXJNSU5fU0FGRV9JTlRFR0VSOnUsTnVtYmVyUGFyc2VJbnQ6ZixPYmplY3RQcm90b3R5cGVIYXNPd25Qcm9wZXJ0eTpkLFJlZ0V4cFByb3RvdHlwZUV4ZWM6cCxTdHJpbmc6aCxTdHJpbmdQcm90b3R5cGVUb1VwcGVyQ2FzZTpnLFN0cmluZ1Byb3RvdHlwZVRyaW06dn09bigxOTEpLHtoaWRlU3RhY2tGcmFtZXM6bSxjb2Rlczp7RVJSX1NPQ0tFVF9CQURfUE9SVDpDLEVSUl9JTlZBTElEX0FSR19UWVBFOnksRVJSX0lOVkFMSURfQVJHX1ZBTFVFOncsRVJSX09VVF9PRl9SQU5HRTpiLEVSUl9VTktOT1dOX1NJR05BTDp4fX09bigxNDEpLHtub3JtYWxpemVFbmNvZGluZzpffT1uKDc3NSkse2lzQXN5bmNGdW5jdGlvbjpPLGlzQXJyYXlCdWZmZXJWaWV3Okx9PW4oNzc1KS50eXBlcyxFPXt9LFM9L15bMC03XSskLyxqPW0oKChlLHQsbj11LHI9Yyk9PntpZihcIm51bWJlclwiIT10eXBlb2YgZSl0aHJvdyBuZXcgeSh0LFwibnVtYmVyXCIsZSk7aWYoIWwoZSkpdGhyb3cgbmV3IGIodCxcImFuIGludGVnZXJcIixlKTtpZihlPG58fGU+cil0aHJvdyBuZXcgYih0LGA+PSAke259ICYmIDw9ICR7cn1gLGUpfSkpLE09bSgoKGUsdCxuPS0yMTQ3NDgzNjQ4LHI9MjE0NzQ4MzY0Nyk9PntpZihcIm51bWJlclwiIT10eXBlb2YgZSl0aHJvdyBuZXcgeSh0LFwibnVtYmVyXCIsZSk7aWYoIWwoZSkpdGhyb3cgbmV3IGIodCxcImFuIGludGVnZXJcIixlKTtpZihlPG58fGU+cil0aHJvdyBuZXcgYih0LGA+PSAke259ICYmIDw9ICR7cn1gLGUpfSkpLGs9bSgoKGUsdCxuPSExKT0+e2lmKFwibnVtYmVyXCIhPXR5cGVvZiBlKXRocm93IG5ldyB5KHQsXCJudW1iZXJcIixlKTtpZighbChlKSl0aHJvdyBuZXcgYih0LFwiYW4gaW50ZWdlclwiLGUpO2NvbnN0IHI9bj8xOjAsbz00Mjk0OTY3Mjk1O2lmKGU8cnx8ZT5vKXRocm93IG5ldyBiKHQsYD49ICR7cn0gJiYgPD0gJHtvfWAsZSl9KSk7ZnVuY3Rpb24gUihlLHQpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiBlKXRocm93IG5ldyB5KHQsXCJzdHJpbmdcIixlKX1jb25zdCBQPW0oKChlLHQsbik9PntpZighbyhuLGUpKXtjb25zdCByPWkoYShuLChlPT5cInN0cmluZ1wiPT10eXBlb2YgZT9gJyR7ZX0nYDpoKGUpKSksXCIsIFwiKTt0aHJvdyBuZXcgdyh0LGUsXCJtdXN0IGJlIG9uZSBvZjogXCIrcil9fSkpO2Z1bmN0aW9uIEkoZSx0KXtpZihcImJvb2xlYW5cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IHkodCxcImJvb2xlYW5cIixlKX1mdW5jdGlvbiBBKGUsdCxuKXtyZXR1cm4gbnVsbCE9ZSYmZChlLHQpP2VbdF06bn1jb25zdCBUPW0oKChlLHQsbj1udWxsKT0+e2NvbnN0IG89QShuLFwiYWxsb3dBcnJheVwiLCExKSxpPUEobixcImFsbG93RnVuY3Rpb25cIiwhMSk7aWYoIUEobixcIm51bGxhYmxlXCIsITEpJiZudWxsPT09ZXx8IW8mJnIoZSl8fFwib2JqZWN0XCIhPXR5cGVvZiBlJiYoIWl8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpKXRocm93IG5ldyB5KHQsXCJPYmplY3RcIixlKX0pKSxIPW0oKChlLHQpPT57aWYobnVsbCE9ZSYmXCJvYmplY3RcIiE9dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IHkodCxcImEgZGljdGlvbmFyeVwiLGUpfSkpLEI9bSgoKGUsdCxuPTApPT57aWYoIXIoZSkpdGhyb3cgbmV3IHkodCxcIkFycmF5XCIsZSk7aWYoZS5sZW5ndGg8bil0aHJvdyBuZXcgdyh0LGUsYG11c3QgYmUgbG9uZ2VyIHRoYW4gJHtufWApfSkpLFY9bSgoKGUsdD1cImJ1ZmZlclwiKT0+e2lmKCFMKGUpKXRocm93IG5ldyB5KHQsW1wiQnVmZmVyXCIsXCJUeXBlZEFycmF5XCIsXCJEYXRhVmlld1wiXSxlKX0pKSxEPW0oKChlLHQpPT57aWYodm9pZCAwIT09ZSYmKG51bGw9PT1lfHxcIm9iamVjdFwiIT10eXBlb2YgZXx8IShcImFib3J0ZWRcImluIGUpKSl0aHJvdyBuZXcgeSh0LFwiQWJvcnRTaWduYWxcIixlKX0pKSxaPW0oKChlLHQpPT57aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgeSh0LFwiRnVuY3Rpb25cIixlKX0pKSwkPW0oKChlLHQpPT57aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZXx8TyhlKSl0aHJvdyBuZXcgeSh0LFwiRnVuY3Rpb25cIixlKX0pKSxOPW0oKChlLHQpPT57aWYodm9pZCAwIT09ZSl0aHJvdyBuZXcgeSh0LFwidW5kZWZpbmVkXCIsZSl9KSksRj0vXig/OjxbXj5dKj4pKD86XFxzKjtcXHMqW147XCJcXHNdKyg/Oj0oXCIpP1teO1wiXFxzXSpcXDEpPykqJC87ZnVuY3Rpb24gVShlLHQpe2lmKHZvaWQgMD09PWV8fCFwKEYsZSkpdGhyb3cgbmV3IHcodCxlLCdtdXN0IGJlIGFuIGFycmF5IG9yIHN0cmluZyBvZiBmb3JtYXQgXCI8L3N0eWxlcy5jc3M+OyByZWw9cHJlbG9hZDsgYXM9c3R5bGVcIicpfWUuZXhwb3J0cz17aXNJbnQzMjpmdW5jdGlvbihlKXtyZXR1cm4gZT09PSgwfGUpfSxpc1VpbnQzMjpmdW5jdGlvbihlKXtyZXR1cm4gZT09PWU+Pj4wfSxwYXJzZUZpbGVNb2RlOmZ1bmN0aW9uKGUsdCxuKXtpZih2b2lkIDA9PT1lJiYoZT1uKSxcInN0cmluZ1wiPT10eXBlb2YgZSl7aWYobnVsbD09PXAoUyxlKSl0aHJvdyBuZXcgdyh0LGUsXCJtdXN0IGJlIGEgMzItYml0IHVuc2lnbmVkIGludGVnZXIgb3IgYW4gb2N0YWwgc3RyaW5nXCIpO2U9ZihlLDgpfXJldHVybiBrKGUsdCksZX0sdmFsaWRhdGVBcnJheTpCLHZhbGlkYXRlU3RyaW5nQXJyYXk6ZnVuY3Rpb24oZSx0KXtCKGUsdCk7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspUihlW25dLGAke3R9WyR7bn1dYCl9LHZhbGlkYXRlQm9vbGVhbkFycmF5OmZ1bmN0aW9uKGUsdCl7QihlLHQpO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKUkoZVtuXSxgJHt0fVske259XWApfSx2YWxpZGF0ZUJvb2xlYW46SSx2YWxpZGF0ZUJ1ZmZlcjpWLHZhbGlkYXRlRGljdGlvbmFyeTpILHZhbGlkYXRlRW5jb2Rpbmc6ZnVuY3Rpb24oZSx0KXtjb25zdCBuPV8odCkscj1lLmxlbmd0aDtpZihcImhleFwiPT09biYmciUyIT0wKXRocm93IG5ldyB3KFwiZW5jb2RpbmdcIix0LGBpcyBpbnZhbGlkIGZvciBkYXRhIG9mIGxlbmd0aCAke3J9YCl9LHZhbGlkYXRlRnVuY3Rpb246Wix2YWxpZGF0ZUludDMyOk0sdmFsaWRhdGVJbnRlZ2VyOmosdmFsaWRhdGVOdW1iZXI6ZnVuY3Rpb24oZSx0LG49dm9pZCAwLHIpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiBlKXRocm93IG5ldyB5KHQsXCJudW1iZXJcIixlKTtpZihudWxsIT1uJiZlPG58fG51bGwhPXImJmU+cnx8KG51bGwhPW58fG51bGwhPXIpJiZzKGUpKXRocm93IG5ldyBiKHQsYCR7bnVsbCE9bj9gPj0gJHtufWA6XCJcIn0ke251bGwhPW4mJm51bGwhPXI/XCIgJiYgXCI6XCJcIn0ke251bGwhPXI/YDw9ICR7cn1gOlwiXCJ9YCxlKX0sdmFsaWRhdGVPYmplY3Q6VCx2YWxpZGF0ZU9uZU9mOlAsdmFsaWRhdGVQbGFpbkZ1bmN0aW9uOiQsdmFsaWRhdGVQb3J0OmZ1bmN0aW9uKGUsdD1cIlBvcnRcIixuPSEwKXtpZihcIm51bWJlclwiIT10eXBlb2YgZSYmXCJzdHJpbmdcIiE9dHlwZW9mIGV8fFwic3RyaW5nXCI9PXR5cGVvZiBlJiYwPT09dihlKS5sZW5ndGh8fCtlIT0rZT4+PjB8fGU+NjU1MzV8fDA9PT1lJiYhbil0aHJvdyBuZXcgQyh0LGUsbik7cmV0dXJuIDB8ZX0sdmFsaWRhdGVTaWduYWxOYW1lOmZ1bmN0aW9uKGUsdD1cInNpZ25hbFwiKXtpZihSKGUsdCksdm9pZCAwPT09RVtlXSl7aWYodm9pZCAwIT09RVtnKGUpXSl0aHJvdyBuZXcgeChlK1wiIChzaWduYWxzIG11c3QgdXNlIGFsbCBjYXBpdGFsIGxldHRlcnMpXCIpO3Rocm93IG5ldyB4KGUpfX0sdmFsaWRhdGVTdHJpbmc6Uix2YWxpZGF0ZVVpbnQzMjprLHZhbGlkYXRlVW5kZWZpbmVkOk4sdmFsaWRhdGVVbmlvbjpmdW5jdGlvbihlLHQsbil7aWYoIW8obixlKSl0aHJvdyBuZXcgeSh0LGAoJyR7aShuLFwifFwiKX0nKWAsZSl9LHZhbGlkYXRlQWJvcnRTaWduYWw6RCx2YWxpZGF0ZUxpbmtIZWFkZXJWYWx1ZTpmdW5jdGlvbihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gVShlLFwiaGludHNcIiksZTtpZihyKGUpKXtjb25zdCB0PWUubGVuZ3RoO2xldCBuPVwiXCI7aWYoMD09PXQpcmV0dXJuIG47Zm9yKGxldCByPTA7cjx0O3IrKyl7Y29uc3Qgbz1lW3JdO1UobyxcImhpbnRzXCIpLG4rPW8sciE9PXQtMSYmKG4rPVwiLCBcIil9cmV0dXJuIG59dGhyb3cgbmV3IHcoXCJoaW50c1wiLGUsJ211c3QgYmUgYW4gYXJyYXkgb3Igc3RyaW5nIG9mIGZvcm1hdCBcIjwvc3R5bGVzLmNzcz47IHJlbD1wcmVsb2FkOyBhcz1zdHlsZVwiJyl9fX0sOTk6KGUsdCxuKT0+e2NvbnN0IHI9bigyOTIpLG89big3NjApLGk9ci5SZWFkYWJsZS5kZXN0cm95O2UuZXhwb3J0cz1yLlJlYWRhYmxlLGUuZXhwb3J0cy5fdWludDhBcnJheVRvQnVmZmVyPXIuX3VpbnQ4QXJyYXlUb0J1ZmZlcixlLmV4cG9ydHMuX2lzVWludDhBcnJheT1yLl9pc1VpbnQ4QXJyYXksZS5leHBvcnRzLmlzRGlzdHVyYmVkPXIuaXNEaXN0dXJiZWQsZS5leHBvcnRzLmlzRXJyb3JlZD1yLmlzRXJyb3JlZCxlLmV4cG9ydHMuaXNSZWFkYWJsZT1yLmlzUmVhZGFibGUsZS5leHBvcnRzLlJlYWRhYmxlPXIuUmVhZGFibGUsZS5leHBvcnRzLldyaXRhYmxlPXIuV3JpdGFibGUsZS5leHBvcnRzLkR1cGxleD1yLkR1cGxleCxlLmV4cG9ydHMuVHJhbnNmb3JtPXIuVHJhbnNmb3JtLGUuZXhwb3J0cy5QYXNzVGhyb3VnaD1yLlBhc3NUaHJvdWdoLGUuZXhwb3J0cy5hZGRBYm9ydFNpZ25hbD1yLmFkZEFib3J0U2lnbmFsLGUuZXhwb3J0cy5maW5pc2hlZD1yLmZpbmlzaGVkLGUuZXhwb3J0cy5kZXN0cm95PXIuZGVzdHJveSxlLmV4cG9ydHMuZGVzdHJveT1pLGUuZXhwb3J0cy5waXBlbGluZT1yLnBpcGVsaW5lLGUuZXhwb3J0cy5jb21wb3NlPXIuY29tcG9zZSxPYmplY3QuZGVmaW5lUHJvcGVydHkocixcInByb21pc2VzXCIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDooKT0+b30pLGUuZXhwb3J0cy5TdHJlYW09ci5TdHJlYW0sZS5leHBvcnRzLmRlZmF1bHQ9ZS5leHBvcnRzfSwxNDE6KGUsdCxuKT0+e2NvbnN0e2Zvcm1hdDpyLGluc3BlY3Q6byxBZ2dyZWdhdGVFcnJvcjppfT1uKDc3NSksYT1nbG9iYWxUaGlzLkFnZ3JlZ2F0ZUVycm9yfHxpLGw9U3ltYm9sKFwia0lzTm9kZUVycm9yXCIpLHM9W1wic3RyaW5nXCIsXCJmdW5jdGlvblwiLFwibnVtYmVyXCIsXCJvYmplY3RcIixcIkZ1bmN0aW9uXCIsXCJPYmplY3RcIixcImJvb2xlYW5cIixcImJpZ2ludFwiLFwic3ltYm9sXCJdLGM9L14oW0EtWl1bYS16MC05XSopKyQvLHU9e307ZnVuY3Rpb24gZihlLHQpe2lmKCFlKXRocm93IG5ldyB1LkVSUl9JTlRFUk5BTF9BU1NFUlRJT04odCl9ZnVuY3Rpb24gZChlKXtsZXQgdD1cIlwiLG49ZS5sZW5ndGg7Y29uc3Qgcj1cIi1cIj09PWVbMF0/MTowO2Zvcig7bj49cis0O24tPTMpdD1gXyR7ZS5zbGljZShuLTMsbil9JHt0fWA7cmV0dXJuYCR7ZS5zbGljZSgwLG4pfSR7dH1gfWZ1bmN0aW9uIHAoZSx0LG4pe258fChuPUVycm9yKTtjbGFzcyBvIGV4dGVuZHMgbntjb25zdHJ1Y3RvciguLi5uKXtzdXBlcihmdW5jdGlvbihlLHQsbil7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdClyZXR1cm4gZih0Lmxlbmd0aDw9bi5sZW5ndGgsYENvZGU6ICR7ZX07IFRoZSBwcm92aWRlZCBhcmd1bWVudHMgbGVuZ3RoICgke24ubGVuZ3RofSkgZG9lcyBub3QgbWF0Y2ggdGhlIHJlcXVpcmVkIG9uZXMgKCR7dC5sZW5ndGh9KS5gKSx0KC4uLm4pO2NvbnN0IG89KHQubWF0Y2goLyVbZGZpam9Pc10vZyl8fFtdKS5sZW5ndGg7cmV0dXJuIGYobz09PW4ubGVuZ3RoLGBDb2RlOiAke2V9OyBUaGUgcHJvdmlkZWQgYXJndW1lbnRzIGxlbmd0aCAoJHtuLmxlbmd0aH0pIGRvZXMgbm90IG1hdGNoIHRoZSByZXF1aXJlZCBvbmVzICgke299KS5gKSwwPT09bi5sZW5ndGg/dDpyKHQsLi4ubil9KGUsdCxuKSl9dG9TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLm5hbWV9IFske2V9XTogJHt0aGlzLm1lc3NhZ2V9YH19T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoby5wcm90b3R5cGUse25hbWU6e3ZhbHVlOm4ubmFtZSx3cml0YWJsZTohMCxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0sdG9TdHJpbmc6e3ZhbHVlKCl7cmV0dXJuYCR7dGhpcy5uYW1lfSBbJHtlfV06ICR7dGhpcy5tZXNzYWdlfWB9LHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfX0pLG8ucHJvdG90eXBlLmNvZGU9ZSxvLnByb3RvdHlwZVtsXT0hMCx1W2VdPW99ZnVuY3Rpb24gaChlKXtjb25zdCB0PVwiX19ub2RlX2ludGVybmFsX1wiK2UubmFtZTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJuYW1lXCIse3ZhbHVlOnR9KSxlfWNsYXNzIGcgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlPVwiVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZFwiLHQ9dm9pZCAwKXtpZih2b2lkIDAhPT10JiZcIm9iamVjdFwiIT10eXBlb2YgdCl0aHJvdyBuZXcgdS5FUlJfSU5WQUxJRF9BUkdfVFlQRShcIm9wdGlvbnNcIixcIk9iamVjdFwiLHQpO3N1cGVyKGUsdCksdGhpcy5jb2RlPVwiQUJPUlRfRVJSXCIsdGhpcy5uYW1lPVwiQWJvcnRFcnJvclwifX1wKFwiRVJSX0FTU0VSVElPTlwiLFwiJXNcIixFcnJvcikscChcIkVSUl9JTlZBTElEX0FSR19UWVBFXCIsKChlLHQsbik9PntmKFwic3RyaW5nXCI9PXR5cGVvZiBlLFwiJ25hbWUnIG11c3QgYmUgYSBzdHJpbmdcIiksQXJyYXkuaXNBcnJheSh0KXx8KHQ9W3RdKTtsZXQgcj1cIlRoZSBcIjtlLmVuZHNXaXRoKFwiIGFyZ3VtZW50XCIpP3IrPWAke2V9IGA6cis9YFwiJHtlfVwiICR7ZS5pbmNsdWRlcyhcIi5cIik/XCJwcm9wZXJ0eVwiOlwiYXJndW1lbnRcIn0gYCxyKz1cIm11c3QgYmUgXCI7Y29uc3QgaT1bXSxhPVtdLGw9W107Zm9yKGNvbnN0IGUgb2YgdClmKFwic3RyaW5nXCI9PXR5cGVvZiBlLFwiQWxsIGV4cGVjdGVkIGVudHJpZXMgaGF2ZSB0byBiZSBvZiB0eXBlIHN0cmluZ1wiKSxzLmluY2x1ZGVzKGUpP2kucHVzaChlLnRvTG93ZXJDYXNlKCkpOmMudGVzdChlKT9hLnB1c2goZSk6KGYoXCJvYmplY3RcIiE9PWUsJ1RoZSB2YWx1ZSBcIm9iamVjdFwiIHNob3VsZCBiZSB3cml0dGVuIGFzIFwiT2JqZWN0XCInKSxsLnB1c2goZSkpO2lmKGEubGVuZ3RoPjApe2NvbnN0IGU9aS5pbmRleE9mKFwib2JqZWN0XCIpOy0xIT09ZSYmKGkuc3BsaWNlKGksZSwxKSxhLnB1c2goXCJPYmplY3RcIikpfWlmKGkubGVuZ3RoPjApe3N3aXRjaChpLmxlbmd0aCl7Y2FzZSAxOnIrPWBvZiB0eXBlICR7aVswXX1gO2JyZWFrO2Nhc2UgMjpyKz1gb25lIG9mIHR5cGUgJHtpWzBdfSBvciAke2lbMV19YDticmVhaztkZWZhdWx0Ontjb25zdCBlPWkucG9wKCk7cis9YG9uZSBvZiB0eXBlICR7aS5qb2luKFwiLCBcIil9LCBvciAke2V9YH19KGEubGVuZ3RoPjB8fGwubGVuZ3RoPjApJiYocis9XCIgb3IgXCIpfWlmKGEubGVuZ3RoPjApe3N3aXRjaChhLmxlbmd0aCl7Y2FzZSAxOnIrPWBhbiBpbnN0YW5jZSBvZiAke2FbMF19YDticmVhaztjYXNlIDI6cis9YGFuIGluc3RhbmNlIG9mICR7YVswXX0gb3IgJHthWzFdfWA7YnJlYWs7ZGVmYXVsdDp7Y29uc3QgZT1hLnBvcCgpO3IrPWBhbiBpbnN0YW5jZSBvZiAke2Euam9pbihcIiwgXCIpfSwgb3IgJHtlfWB9fWwubGVuZ3RoPjAmJihyKz1cIiBvciBcIil9c3dpdGNoKGwubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOmxbMF0udG9Mb3dlckNhc2UoKSE9PWxbMF0mJihyKz1cImFuIFwiKSxyKz1gJHtsWzBdfWA7YnJlYWs7Y2FzZSAyOnIrPWBvbmUgb2YgJHtsWzBdfSBvciAke2xbMV19YDticmVhaztkZWZhdWx0Ontjb25zdCBlPWwucG9wKCk7cis9YG9uZSBvZiAke2wuam9pbihcIiwgXCIpfSwgb3IgJHtlfWB9fWlmKG51bGw9PW4pcis9YC4gUmVjZWl2ZWQgJHtufWA7ZWxzZSBpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuJiZuLm5hbWUpcis9YC4gUmVjZWl2ZWQgZnVuY3Rpb24gJHtuLm5hbWV9YDtlbHNlIGlmKFwib2JqZWN0XCI9PXR5cGVvZiBuKXt2YXIgdTtudWxsIT09KHU9bi5jb25zdHJ1Y3RvcikmJnZvaWQgMCE9PXUmJnUubmFtZT9yKz1gLiBSZWNlaXZlZCBhbiBpbnN0YW5jZSBvZiAke24uY29uc3RydWN0b3IubmFtZX1gOnIrPWAuIFJlY2VpdmVkICR7byhuLHtkZXB0aDotMX0pfWB9ZWxzZXtsZXQgZT1vKG4se2NvbG9yczohMX0pO2UubGVuZ3RoPjI1JiYoZT1gJHtlLnNsaWNlKDAsMjUpfS4uLmApLHIrPWAuIFJlY2VpdmVkIHR5cGUgJHt0eXBlb2Ygbn0gKCR7ZX0pYH1yZXR1cm4gcn0pLFR5cGVFcnJvcikscChcIkVSUl9JTlZBTElEX0FSR19WQUxVRVwiLCgoZSx0LG49XCJpcyBpbnZhbGlkXCIpPT57bGV0IHI9byh0KTtyZXR1cm4gci5sZW5ndGg+MTI4JiYocj1yLnNsaWNlKDAsMTI4KStcIi4uLlwiKSxgVGhlICR7ZS5pbmNsdWRlcyhcIi5cIik/XCJwcm9wZXJ0eVwiOlwiYXJndW1lbnRcIn0gJyR7ZX0nICR7bn0uIFJlY2VpdmVkICR7cn1gfSksVHlwZUVycm9yKSxwKFwiRVJSX0lOVkFMSURfUkVUVVJOX1ZBTFVFXCIsKChlLHQsbik9Pnt2YXIgcjtyZXR1cm5gRXhwZWN0ZWQgJHtlfSB0byBiZSByZXR1cm5lZCBmcm9tIHRoZSBcIiR7dH1cIiBmdW5jdGlvbiBidXQgZ290ICR7bnVsbCE9biYmbnVsbCE9PShyPW4uY29uc3RydWN0b3IpJiZ2b2lkIDAhPT1yJiZyLm5hbWU/YGluc3RhbmNlIG9mICR7bi5jb25zdHJ1Y3Rvci5uYW1lfWA6XCJ0eXBlIFwiK3R5cGVvZiBufS5gfSksVHlwZUVycm9yKSxwKFwiRVJSX01JU1NJTkdfQVJHU1wiLCgoLi4uZSk9PntsZXQgdDtmKGUubGVuZ3RoPjAsXCJBdCBsZWFzdCBvbmUgYXJnIG5lZWRzIHRvIGJlIHNwZWNpZmllZFwiKTtjb25zdCBuPWUubGVuZ3RoO3N3aXRjaChlPShBcnJheS5pc0FycmF5KGUpP2U6W2VdKS5tYXAoKGU9PmBcIiR7ZX1cImApKS5qb2luKFwiIG9yIFwiKSxuKXtjYXNlIDE6dCs9YFRoZSAke2VbMF19IGFyZ3VtZW50YDticmVhaztjYXNlIDI6dCs9YFRoZSAke2VbMF19IGFuZCAke2VbMV19IGFyZ3VtZW50c2A7YnJlYWs7ZGVmYXVsdDp7Y29uc3Qgbj1lLnBvcCgpO3QrPWBUaGUgJHtlLmpvaW4oXCIsIFwiKX0sIGFuZCAke259IGFyZ3VtZW50c2B9fXJldHVybmAke3R9IG11c3QgYmUgc3BlY2lmaWVkYH0pLFR5cGVFcnJvcikscChcIkVSUl9PVVRfT0ZfUkFOR0VcIiwoKGUsdCxuKT0+e2xldCByO3JldHVybiBmKHQsJ01pc3NpbmcgXCJyYW5nZVwiIGFyZ3VtZW50JyksTnVtYmVyLmlzSW50ZWdlcihuKSYmTWF0aC5hYnMobik+MioqMzI/cj1kKFN0cmluZyhuKSk6XCJiaWdpbnRcIj09dHlwZW9mIG4/KHI9U3RyaW5nKG4pLChuPjJuKiozMm58fG48LSgybioqMzJuKSkmJihyPWQocikpLHIrPVwiblwiKTpyPW8obiksYFRoZSB2YWx1ZSBvZiBcIiR7ZX1cIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgJHt0fS4gUmVjZWl2ZWQgJHtyfWB9KSxSYW5nZUVycm9yKSxwKFwiRVJSX01VTFRJUExFX0NBTExCQUNLXCIsXCJDYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXNcIixFcnJvcikscChcIkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEXCIsXCJUaGUgJXMgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZFwiLEVycm9yKSxwKFwiRVJSX1NUUkVBTV9BTFJFQURZX0ZJTklTSEVEXCIsXCJDYW5ub3QgY2FsbCAlcyBhZnRlciBhIHN0cmVhbSB3YXMgZmluaXNoZWRcIixFcnJvcikscChcIkVSUl9TVFJFQU1fQ0FOTk9UX1BJUEVcIixcIkNhbm5vdCBwaXBlLCBub3QgcmVhZGFibGVcIixFcnJvcikscChcIkVSUl9TVFJFQU1fREVTVFJPWUVEXCIsXCJDYW5ub3QgY2FsbCAlcyBhZnRlciBhIHN0cmVhbSB3YXMgZGVzdHJveWVkXCIsRXJyb3IpLHAoXCJFUlJfU1RSRUFNX05VTExfVkFMVUVTXCIsXCJNYXkgbm90IHdyaXRlIG51bGwgdmFsdWVzIHRvIHN0cmVhbVwiLFR5cGVFcnJvcikscChcIkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFXCIsXCJQcmVtYXR1cmUgY2xvc2VcIixFcnJvcikscChcIkVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0ZcIixcInN0cmVhbS5wdXNoKCkgYWZ0ZXIgRU9GXCIsRXJyb3IpLHAoXCJFUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UXCIsXCJzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudFwiLEVycm9yKSxwKFwiRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkRcIixcIndyaXRlIGFmdGVyIGVuZFwiLEVycm9yKSxwKFwiRVJSX1VOS05PV05fRU5DT0RJTkdcIixcIlVua25vd24gZW5jb2Rpbmc6ICVzXCIsVHlwZUVycm9yKSxlLmV4cG9ydHM9e0Fib3J0RXJyb3I6ZyxhZ2dyZWdhdGVUd29FcnJvcnM6aCgoZnVuY3Rpb24oZSx0KXtpZihlJiZ0JiZlIT09dCl7aWYoQXJyYXkuaXNBcnJheSh0LmVycm9ycykpcmV0dXJuIHQuZXJyb3JzLnB1c2goZSksdDtjb25zdCBuPW5ldyBhKFt0LGVdLHQubWVzc2FnZSk7cmV0dXJuIG4uY29kZT10LmNvZGUsbn1yZXR1cm4gZXx8dH0pKSxoaWRlU3RhY2tGcmFtZXM6aCxjb2Rlczp1fX0sMTkxOmU9PntlLmV4cG9ydHM9e0FycmF5SXNBcnJheTplPT5BcnJheS5pc0FycmF5KGUpLEFycmF5UHJvdG90eXBlSW5jbHVkZXM6KGUsdCk9PmUuaW5jbHVkZXModCksQXJyYXlQcm90b3R5cGVJbmRleE9mOihlLHQpPT5lLmluZGV4T2YodCksQXJyYXlQcm90b3R5cGVKb2luOihlLHQpPT5lLmpvaW4odCksQXJyYXlQcm90b3R5cGVNYXA6KGUsdCk9PmUubWFwKHQpLEFycmF5UHJvdG90eXBlUG9wOihlLHQpPT5lLnBvcCh0KSxBcnJheVByb3RvdHlwZVB1c2g6KGUsdCk9PmUucHVzaCh0KSxBcnJheVByb3RvdHlwZVNsaWNlOihlLHQsbik9PmUuc2xpY2UodCxuKSxFcnJvcixGdW5jdGlvblByb3RvdHlwZUNhbGw6KGUsdCwuLi5uKT0+ZS5jYWxsKHQsLi4ubiksRnVuY3Rpb25Qcm90b3R5cGVTeW1ib2xIYXNJbnN0YW5jZTooZSx0KT0+RnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0uY2FsbChlLHQpLE1hdGhGbG9vcjpNYXRoLmZsb29yLE51bWJlcixOdW1iZXJJc0ludGVnZXI6TnVtYmVyLmlzSW50ZWdlcixOdW1iZXJJc05hTjpOdW1iZXIuaXNOYU4sTnVtYmVyTUFYX1NBRkVfSU5URUdFUjpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixOdW1iZXJNSU5fU0FGRV9JTlRFR0VSOk51bWJlci5NSU5fU0FGRV9JTlRFR0VSLE51bWJlclBhcnNlSW50Ok51bWJlci5wYXJzZUludCxPYmplY3REZWZpbmVQcm9wZXJ0aWVzOihlLHQpPT5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLHQpLE9iamVjdERlZmluZVByb3BlcnR5OihlLHQsbik9Pk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsbiksT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOihlLHQpPT5PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCksT2JqZWN0S2V5czplPT5PYmplY3Qua2V5cyhlKSxPYmplY3RTZXRQcm90b3R5cGVPZjooZSx0KT0+T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdCksUHJvbWlzZSxQcm9taXNlUHJvdG90eXBlQ2F0Y2g6KGUsdCk9PmUuY2F0Y2godCksUHJvbWlzZVByb3RvdHlwZVRoZW46KGUsdCxuKT0+ZS50aGVuKHQsbiksUHJvbWlzZVJlamVjdDplPT5Qcm9taXNlLnJlamVjdChlKSxSZWZsZWN0QXBwbHk6UmVmbGVjdC5hcHBseSxSZWdFeHBQcm90b3R5cGVUZXN0OihlLHQpPT5lLnRlc3QodCksU2FmZVNldDpTZXQsU3RyaW5nLFN0cmluZ1Byb3RvdHlwZVNsaWNlOihlLHQsbik9PmUuc2xpY2UodCxuKSxTdHJpbmdQcm90b3R5cGVUb0xvd2VyQ2FzZTplPT5lLnRvTG93ZXJDYXNlKCksU3RyaW5nUHJvdG90eXBlVG9VcHBlckNhc2U6ZT0+ZS50b1VwcGVyQ2FzZSgpLFN0cmluZ1Byb3RvdHlwZVRyaW06ZT0+ZS50cmltKCksU3ltYm9sLFN5bWJvbEZvcjpTeW1ib2wuZm9yLFN5bWJvbEFzeW5jSXRlcmF0b3I6U3ltYm9sLmFzeW5jSXRlcmF0b3IsU3ltYm9sSGFzSW5zdGFuY2U6U3ltYm9sLmhhc0luc3RhbmNlLFN5bWJvbEl0ZXJhdG9yOlN5bWJvbC5pdGVyYXRvcixUeXBlZEFycmF5UHJvdG90eXBlU2V0OihlLHQsbik9PmUuc2V0KHQsbiksVWludDhBcnJheX19LDc3NTooZSx0LG4pPT57Y29uc3Qgcj1uKDQ4NSksbz1PYmplY3QuZ2V0UHJvdG90eXBlT2YoKGFzeW5jIGZ1bmN0aW9uKCl7fSkpLmNvbnN0cnVjdG9yLGk9Z2xvYmFsVGhpcy5CbG9ifHxyLkJsb2IsYT12b2lkIDAhPT1pP2Z1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgaX06ZnVuY3Rpb24oZSl7cmV0dXJuITF9O2NsYXNzIGwgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlKXtpZighQXJyYXkuaXNBcnJheShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgaW5wdXQgdG8gYmUgYW4gQXJyYXksIGdvdCBcIit0eXBlb2YgZSk7bGV0IHQ9XCJcIjtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl0Kz1gICAgICR7ZVtuXS5zdGFja31cXG5gO3N1cGVyKHQpLHRoaXMubmFtZT1cIkFnZ3JlZ2F0ZUVycm9yXCIsdGhpcy5lcnJvcnM9ZX19ZS5leHBvcnRzPXtBZ2dyZWdhdGVFcnJvcjpsLGtFbXB0eU9iamVjdDpPYmplY3QuZnJlZXplKHt9KSxvbmNlKGUpe2xldCB0PSExO3JldHVybiBmdW5jdGlvbiguLi5uKXt0fHwodD0hMCxlLmFwcGx5KHRoaXMsbikpfX0sY3JlYXRlRGVmZXJyZWRQcm9taXNlOmZ1bmN0aW9uKCl7bGV0IGUsdDtyZXR1cm57cHJvbWlzZTpuZXcgUHJvbWlzZSgoKG4scik9PntlPW4sdD1yfSkpLHJlc29sdmU6ZSxyZWplY3Q6dH19LHByb21pc2lmeTplPT5uZXcgUHJvbWlzZSgoKHQsbik9PntlKCgoZSwuLi5yKT0+ZT9uKGUpOnQoLi4ucikpKX0pKSxkZWJ1Z2xvZzooKT0+ZnVuY3Rpb24oKXt9LGZvcm1hdDooZSwuLi50KT0+ZS5yZXBsYWNlKC8lKFtzZGlmal0pL2csKGZ1bmN0aW9uKC4uLltlLG5dKXtjb25zdCByPXQuc2hpZnQoKTtyZXR1cm5cImZcIj09PW4/ci50b0ZpeGVkKDYpOlwialwiPT09bj9KU09OLnN0cmluZ2lmeShyKTpcInNcIj09PW4mJlwib2JqZWN0XCI9PXR5cGVvZiByP2Ake3IuY29uc3RydWN0b3IhPT1PYmplY3Q/ci5jb25zdHJ1Y3Rvci5uYW1lOlwiXCJ9IHt9YC50cmltKCk6ci50b1N0cmluZygpfSkpLGluc3BlY3QoZSl7c3dpdGNoKHR5cGVvZiBlKXtjYXNlXCJzdHJpbmdcIjppZihlLmluY2x1ZGVzKFwiJ1wiKSl7aWYoIWUuaW5jbHVkZXMoJ1wiJykpcmV0dXJuYFwiJHtlfVwiYDtpZighZS5pbmNsdWRlcyhcImBcIikmJiFlLmluY2x1ZGVzKFwiJHtcIikpcmV0dXJuYFxcYCR7ZX1cXGBgfXJldHVybmAnJHtlfSdgO2Nhc2VcIm51bWJlclwiOnJldHVybiBpc05hTihlKT9cIk5hTlwiOk9iamVjdC5pcyhlLC0wKT9TdHJpbmcoZSk6ZTtjYXNlXCJiaWdpbnRcIjpyZXR1cm5gJHtTdHJpbmcoZSl9bmA7Y2FzZVwiYm9vbGVhblwiOmNhc2VcInVuZGVmaW5lZFwiOnJldHVybiBTdHJpbmcoZSk7Y2FzZVwib2JqZWN0XCI6cmV0dXJuXCJ7fVwifX0sdHlwZXM6e2lzQXN5bmNGdW5jdGlvbjplPT5lIGluc3RhbmNlb2Ygbyxpc0FycmF5QnVmZmVyVmlldzplPT5BcnJheUJ1ZmZlci5pc1ZpZXcoZSl9LGlzQmxvYjphfSxlLmV4cG9ydHMucHJvbWlzaWZ5LmN1c3RvbT1TeW1ib2wuZm9yKFwibm9kZWpzLnV0aWwucHJvbWlzaWZ5LmN1c3RvbVwiKX0sMjkyOihlLHQsbik9Pntjb25zdHtCdWZmZXI6cn09big0ODUpLHtPYmplY3REZWZpbmVQcm9wZXJ0eTpvLE9iamVjdEtleXM6aSxSZWZsZWN0QXBwbHk6YX09bigxOTEpLHtwcm9taXNpZnk6e2N1c3RvbTpsfX09big3NzUpLHtzdHJlYW1SZXR1cm5pbmdPcGVyYXRvcnM6cyxwcm9taXNlUmV0dXJuaW5nT3BlcmF0b3JzOmN9PW4oNTU0KSx7Y29kZXM6e0VSUl9JTExFR0FMX0NPTlNUUlVDVE9SOnV9fT1uKDE0MSksZj1uKDgxOCkse3BpcGVsaW5lOmR9PW4oNzU0KSx7ZGVzdHJveWVyOnB9PW4oMjMwKSxoPW4oODYpLGc9big3NjApLHY9bigxMzIpLG09ZS5leHBvcnRzPW4oMjAwKS5TdHJlYW07bS5pc0Rpc3R1cmJlZD12LmlzRGlzdHVyYmVkLG0uaXNFcnJvcmVkPXYuaXNFcnJvcmVkLG0uaXNSZWFkYWJsZT12LmlzUmVhZGFibGUsbS5SZWFkYWJsZT1uKDg1OCk7Zm9yKGNvbnN0IHkgb2YgaShzKSl7Y29uc3Qgdz1zW3ldO2Z1bmN0aW9uIGIoLi4uZSl7aWYobmV3LnRhcmdldCl0aHJvdyB1KCk7cmV0dXJuIG0uUmVhZGFibGUuZnJvbShhKHcsdGhpcyxlKSl9byhiLFwibmFtZVwiLHtfX3Byb3RvX186bnVsbCx2YWx1ZTp3Lm5hbWV9KSxvKGIsXCJsZW5ndGhcIix7X19wcm90b19fOm51bGwsdmFsdWU6dy5sZW5ndGh9KSxvKG0uUmVhZGFibGUucHJvdG90eXBlLHkse19fcHJvdG9fXzpudWxsLHZhbHVlOmIsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX1mb3IoY29uc3QgeCBvZiBpKGMpKXtjb25zdCBfPWNbeF07ZnVuY3Rpb24gTyguLi5lKXtpZihuZXcudGFyZ2V0KXRocm93IHUoKTtyZXR1cm4gYShfLHRoaXMsZSl9byhPLFwibmFtZVwiLHtfX3Byb3RvX186bnVsbCx2YWx1ZTpfLm5hbWV9KSxvKE8sXCJsZW5ndGhcIix7X19wcm90b19fOm51bGwsdmFsdWU6Xy5sZW5ndGh9KSxvKG0uUmVhZGFibGUucHJvdG90eXBlLHgse19fcHJvdG9fXzpudWxsLHZhbHVlOk8sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX1tLldyaXRhYmxlPW4oMzczKSxtLkR1cGxleD1uKDE4MiksbS5UcmFuc2Zvcm09bigyMTApLG0uUGFzc1Rocm91Z2g9big0NjcpLG0ucGlwZWxpbmU9ZDtjb25zdHthZGRBYm9ydFNpZ25hbDpDfT1uKDM3NCk7bS5hZGRBYm9ydFNpZ25hbD1DLG0uZmluaXNoZWQ9aCxtLmRlc3Ryb3k9cCxtLmNvbXBvc2U9ZixvKG0sXCJwcm9taXNlc1wiLHtfX3Byb3RvX186bnVsbCxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6KCk9Pmd9KSxvKGQsbCx7X19wcm90b19fOm51bGwsZW51bWVyYWJsZTohMCxnZXQ6KCk9PmcucGlwZWxpbmV9KSxvKGgsbCx7X19wcm90b19fOm51bGwsZW51bWVyYWJsZTohMCxnZXQ6KCk9PmcuZmluaXNoZWR9KSxtLlN0cmVhbT1tLG0uX2lzVWludDhBcnJheT1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl9LG0uX3VpbnQ4QXJyYXlUb0J1ZmZlcj1mdW5jdGlvbihlKXtyZXR1cm4gci5mcm9tKGUuYnVmZmVyLGUuYnl0ZU9mZnNldCxlLmJ5dGVMZW5ndGgpfX0sNzYwOihlLHQsbik9Pntjb25zdHtBcnJheVByb3RvdHlwZVBvcDpyLFByb21pc2U6b309bigxOTEpLHtpc0l0ZXJhYmxlOmksaXNOb2RlU3RyZWFtOmEsaXNXZWJTdHJlYW06bH09bigxMzIpLHtwaXBlbGluZUltcGw6c309big3NTQpLHtmaW5pc2hlZDpjfT1uKDg2KTtuKDkxKSxlLmV4cG9ydHM9e2ZpbmlzaGVkOmMscGlwZWxpbmU6ZnVuY3Rpb24oLi4uZSl7cmV0dXJuIG5ldyBvKCgodCxuKT0+e2xldCBvLGM7Y29uc3QgdT1lW2UubGVuZ3RoLTFdO2lmKHUmJlwib2JqZWN0XCI9PXR5cGVvZiB1JiYhYSh1KSYmIWkodSkmJiFsKHUpKXtjb25zdCB0PXIoZSk7bz10LnNpZ25hbCxjPXQuZW5kfXMoZSwoKGUscik9PntlP24oZSk6dChyKX0pLHtzaWduYWw6byxlbmQ6Y30pfSkpfX19LDUzMzplPT57dmFyIHQsbixyPWUuZXhwb3J0cz17fTtmdW5jdGlvbiBvKCl7dGhyb3cgbmV3IEVycm9yKFwic2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZFwiKX1mdW5jdGlvbiBpKCl7dGhyb3cgbmV3IEVycm9yKFwiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkXCIpfWZ1bmN0aW9uIGEoZSl7aWYodD09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRpbWVvdXQoZSwwKTtpZigodD09PW98fCF0KSYmc2V0VGltZW91dClyZXR1cm4gdD1zZXRUaW1lb3V0LHNldFRpbWVvdXQoZSwwKTt0cnl7cmV0dXJuIHQoZSwwKX1jYXRjaChuKXt0cnl7cmV0dXJuIHQuY2FsbChudWxsLGUsMCl9Y2F0Y2gobil7cmV0dXJuIHQuY2FsbCh0aGlzLGUsMCl9fX0hZnVuY3Rpb24oKXt0cnl7dD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6b31jYXRjaChlKXt0PW99dHJ5e249XCJmdW5jdGlvblwiPT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDppfWNhdGNoKGUpe249aX19KCk7dmFyIGwscz1bXSxjPSExLHU9LTE7ZnVuY3Rpb24gZigpe2MmJmwmJihjPSExLGwubGVuZ3RoP3M9bC5jb25jYXQocyk6dT0tMSxzLmxlbmd0aCYmZCgpKX1mdW5jdGlvbiBkKCl7aWYoIWMpe3ZhciBlPWEoZik7Yz0hMDtmb3IodmFyIHQ9cy5sZW5ndGg7dDspe2ZvcihsPXMscz1bXTsrK3U8dDspbCYmbFt1XS5ydW4oKTt1PS0xLHQ9cy5sZW5ndGh9bD1udWxsLGM9ITEsZnVuY3Rpb24oZSl7aWYobj09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGUpO2lmKChuPT09aXx8IW4pJiZjbGVhclRpbWVvdXQpcmV0dXJuIG49Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dChlKTt0cnl7cmV0dXJuIG4oZSl9Y2F0Y2godCl7dHJ5e3JldHVybiBuLmNhbGwobnVsbCxlKX1jYXRjaCh0KXtyZXR1cm4gbi5jYWxsKHRoaXMsZSl9fX0oZSl9fWZ1bmN0aW9uIHAoZSx0KXt0aGlzLmZ1bj1lLHRoaXMuYXJyYXk9dH1mdW5jdGlvbiBoKCl7fXIubmV4dFRpY2s9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuLTFdPWFyZ3VtZW50c1tuXTtzLnB1c2gobmV3IHAoZSx0KSksMSE9PXMubGVuZ3RofHxjfHxhKGQpfSxwLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfSxyLnRpdGxlPVwiYnJvd3NlclwiLHIuYnJvd3Nlcj0hMCxyLmVudj17fSxyLmFyZ3Y9W10sci52ZXJzaW9uPVwiXCIsci52ZXJzaW9ucz17fSxyLm9uPWgsci5hZGRMaXN0ZW5lcj1oLHIub25jZT1oLHIub2ZmPWgsci5yZW1vdmVMaXN0ZW5lcj1oLHIucmVtb3ZlQWxsTGlzdGVuZXJzPWgsci5lbWl0PWgsci5wcmVwZW5kTGlzdGVuZXI9aCxyLnByZXBlbmRPbmNlTGlzdGVuZXI9aCxyLmxpc3RlbmVycz1mdW5jdGlvbihlKXtyZXR1cm5bXX0sci5iaW5kaW5nPWZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcihcInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkXCIpfSxyLmN3ZD1mdW5jdGlvbigpe3JldHVyblwiL1wifSxyLmNoZGlyPWZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcihcInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZFwiKX0sci51bWFzaz1mdW5jdGlvbigpe3JldHVybiAwfX0sMzc3OihlLHQsbik9Pnt2YXIgcj1uKDQ4NSksbz1yLkJ1ZmZlcjtmdW5jdGlvbiBpKGUsdCl7Zm9yKHZhciBuIGluIGUpdFtuXT1lW25dfWZ1bmN0aW9uIGEoZSx0LG4pe3JldHVybiBvKGUsdCxuKX1vLmZyb20mJm8uYWxsb2MmJm8uYWxsb2NVbnNhZmUmJm8uYWxsb2NVbnNhZmVTbG93P2UuZXhwb3J0cz1yOihpKHIsdCksdC5CdWZmZXI9YSksaShvLGEpLGEuZnJvbT1mdW5jdGlvbihlLHQsbil7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyXCIpO3JldHVybiBvKGUsdCxuKX0sYS5hbGxvYz1mdW5jdGlvbihlLHQsbil7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXJcIik7dmFyIHI9byhlKTtyZXR1cm4gdm9pZCAwIT09dD9cInN0cmluZ1wiPT10eXBlb2Ygbj9yLmZpbGwodCxuKTpyLmZpbGwodCk6ci5maWxsKDApLHJ9LGEuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXJcIik7cmV0dXJuIG8oZSl9LGEuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyXCIpO3JldHVybiByLlNsb3dCdWZmZXIoZSl9fSw0NjQ6KGUsdCxuKT0+e3ZhciByPW4oMzc3KS5CdWZmZXIsbz1yLmlzRW5jb2Rpbmd8fGZ1bmN0aW9uKGUpe3N3aXRjaCgoZT1cIlwiK2UpJiZlLnRvTG93ZXJDYXNlKCkpe2Nhc2VcImhleFwiOmNhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOmNhc2VcImFzY2lpXCI6Y2FzZVwiYmluYXJ5XCI6Y2FzZVwiYmFzZTY0XCI6Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6Y2FzZVwicmF3XCI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19O2Z1bmN0aW9uIGkoZSl7dmFyIHQ7c3dpdGNoKHRoaXMuZW5jb2Rpbmc9ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuXCJ1dGY4XCI7Zm9yKHZhciB0Ozspc3dpdGNoKGUpe2Nhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOnJldHVyblwidXRmOFwiO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVyblwidXRmMTZsZVwiO2Nhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOnJldHVyblwibGF0aW4xXCI7Y2FzZVwiYmFzZTY0XCI6Y2FzZVwiYXNjaWlcIjpjYXNlXCJoZXhcIjpyZXR1cm4gZTtkZWZhdWx0OmlmKHQpcmV0dXJuO2U9KFwiXCIrZSkudG9Mb3dlckNhc2UoKSx0PSEwfX0oZSk7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQmJihyLmlzRW5jb2Rpbmc9PT1vfHwhbyhlKSkpdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrZSk7cmV0dXJuIHR8fGV9KGUpLHRoaXMuZW5jb2Rpbmcpe2Nhc2VcInV0ZjE2bGVcIjp0aGlzLnRleHQ9cyx0aGlzLmVuZD1jLHQ9NDticmVhaztjYXNlXCJ1dGY4XCI6dGhpcy5maWxsTGFzdD1sLHQ9NDticmVhaztjYXNlXCJiYXNlNjRcIjp0aGlzLnRleHQ9dSx0aGlzLmVuZD1mLHQ9MzticmVhaztkZWZhdWx0OnJldHVybiB0aGlzLndyaXRlPWQsdm9pZCh0aGlzLmVuZD1wKX10aGlzLmxhc3ROZWVkPTAsdGhpcy5sYXN0VG90YWw9MCx0aGlzLmxhc3RDaGFyPXIuYWxsb2NVbnNhZmUodCl9ZnVuY3Rpb24gYShlKXtyZXR1cm4gZTw9MTI3PzA6ZT4+NT09Nj8yOmU+PjQ9PTE0PzM6ZT4+Mz09MzA/NDplPj42PT0yPy0xOi0yfWZ1bmN0aW9uIGwoZSl7dmFyIHQ9dGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCxuPWZ1bmN0aW9uKGUsdCxuKXtpZigxMjghPSgxOTImdFswXSkpcmV0dXJuIGUubGFzdE5lZWQ9MCxcIu+/vVwiO2lmKGUubGFzdE5lZWQ+MSYmdC5sZW5ndGg+MSl7aWYoMTI4IT0oMTkyJnRbMV0pKXJldHVybiBlLmxhc3ROZWVkPTEsXCLvv71cIjtpZihlLmxhc3ROZWVkPjImJnQubGVuZ3RoPjImJjEyOCE9KDE5MiZ0WzJdKSlyZXR1cm4gZS5sYXN0TmVlZD0yLFwi77+9XCJ9fSh0aGlzLGUpO3JldHVybiB2b2lkIDAhPT1uP246dGhpcy5sYXN0TmVlZDw9ZS5sZW5ndGg/KGUuY29weSh0aGlzLmxhc3RDaGFyLHQsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCkpOihlLmNvcHkodGhpcy5sYXN0Q2hhcix0LDAsZS5sZW5ndGgpLHZvaWQodGhpcy5sYXN0TmVlZC09ZS5sZW5ndGgpKX1mdW5jdGlvbiBzKGUsdCl7aWYoKGUubGVuZ3RoLXQpJTI9PTApe3ZhciBuPWUudG9TdHJpbmcoXCJ1dGYxNmxlXCIsdCk7aWYobil7dmFyIHI9bi5jaGFyQ29kZUF0KG4ubGVuZ3RoLTEpO2lmKHI+PTU1Mjk2JiZyPD01NjMxOSlyZXR1cm4gdGhpcy5sYXN0TmVlZD0yLHRoaXMubGFzdFRvdGFsPTQsdGhpcy5sYXN0Q2hhclswXT1lW2UubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09ZVtlLmxlbmd0aC0xXSxuLnNsaWNlKDAsLTEpfXJldHVybiBufXJldHVybiB0aGlzLmxhc3ROZWVkPTEsdGhpcy5sYXN0VG90YWw9Mix0aGlzLmxhc3RDaGFyWzBdPWVbZS5sZW5ndGgtMV0sZS50b1N0cmluZyhcInV0ZjE2bGVcIix0LGUubGVuZ3RoLTEpfWZ1bmN0aW9uIGMoZSl7dmFyIHQ9ZSYmZS5sZW5ndGg/dGhpcy53cml0ZShlKTpcIlwiO2lmKHRoaXMubGFzdE5lZWQpe3ZhciBuPXRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQ7cmV0dXJuIHQrdGhpcy5sYXN0Q2hhci50b1N0cmluZyhcInV0ZjE2bGVcIiwwLG4pfXJldHVybiB0fWZ1bmN0aW9uIHUoZSx0KXt2YXIgbj0oZS5sZW5ndGgtdCklMztyZXR1cm4gMD09PW4/ZS50b1N0cmluZyhcImJhc2U2NFwiLHQpOih0aGlzLmxhc3ROZWVkPTMtbix0aGlzLmxhc3RUb3RhbD0zLDE9PT1uP3RoaXMubGFzdENoYXJbMF09ZVtlLmxlbmd0aC0xXToodGhpcy5sYXN0Q2hhclswXT1lW2UubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09ZVtlLmxlbmd0aC0xXSksZS50b1N0cmluZyhcImJhc2U2NFwiLHQsZS5sZW5ndGgtbikpfWZ1bmN0aW9uIGYoZSl7dmFyIHQ9ZSYmZS5sZW5ndGg/dGhpcy53cml0ZShlKTpcIlwiO3JldHVybiB0aGlzLmxhc3ROZWVkP3QrdGhpcy5sYXN0Q2hhci50b1N0cmluZyhcImJhc2U2NFwiLDAsMy10aGlzLmxhc3ROZWVkKTp0fWZ1bmN0aW9uIGQoZSl7cmV0dXJuIGUudG9TdHJpbmcodGhpcy5lbmNvZGluZyl9ZnVuY3Rpb24gcChlKXtyZXR1cm4gZSYmZS5sZW5ndGg/dGhpcy53cml0ZShlKTpcIlwifXQuU3RyaW5nRGVjb2Rlcj1pLGkucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGUpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm5cIlwiO3ZhciB0LG47aWYodGhpcy5sYXN0TmVlZCl7aWYodm9pZCAwPT09KHQ9dGhpcy5maWxsTGFzdChlKSkpcmV0dXJuXCJcIjtuPXRoaXMubGFzdE5lZWQsdGhpcy5sYXN0TmVlZD0wfWVsc2Ugbj0wO3JldHVybiBuPGUubGVuZ3RoP3Q/dCt0aGlzLnRleHQoZSxuKTp0aGlzLnRleHQoZSxuKTp0fHxcIlwifSxpLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZSYmZS5sZW5ndGg/dGhpcy53cml0ZShlKTpcIlwiO3JldHVybiB0aGlzLmxhc3ROZWVkP3QrXCLvv71cIjp0fSxpLnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKGUsdCl7dmFyIG49ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQubGVuZ3RoLTE7aWYocjxuKXJldHVybiAwO3ZhciBvPWEodFtyXSk7cmV0dXJuIG8+PTA/KG8+MCYmKGUubGFzdE5lZWQ9by0xKSxvKTotLXI8bnx8LTI9PT1vPzA6KG89YSh0W3JdKSk+PTA/KG8+MCYmKGUubGFzdE5lZWQ9by0yKSxvKTotLXI8bnx8LTI9PT1vPzA6KG89YSh0W3JdKSk+PTA/KG8+MCYmKDI9PT1vP289MDplLmxhc3ROZWVkPW8tMyksbyk6MH0odGhpcyxlLHQpO2lmKCF0aGlzLmxhc3ROZWVkKXJldHVybiBlLnRvU3RyaW5nKFwidXRmOFwiLHQpO3RoaXMubGFzdFRvdGFsPW47dmFyIHI9ZS5sZW5ndGgtKG4tdGhpcy5sYXN0TmVlZCk7cmV0dXJuIGUuY29weSh0aGlzLmxhc3RDaGFyLDAsciksZS50b1N0cmluZyhcInV0ZjhcIix0LHIpfSxpLnByb3RvdHlwZS5maWxsTGFzdD1mdW5jdGlvbihlKXtpZih0aGlzLmxhc3ROZWVkPD1lLmxlbmd0aClyZXR1cm4gZS5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLHRoaXMubGFzdE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMubGFzdFRvdGFsKTtlLmNvcHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAsZS5sZW5ndGgpLHRoaXMubGFzdE5lZWQtPWUubGVuZ3RofX0sNTQ6KGUsdCxuKT0+e24uZCh0LHtNUzooKT0+ayxjRjooKT0+UixBSzooKT0+UCxNXzooKT0+SSxjWDooKT0+QSxCVDooKT0+cmUsX1c6KCk9PkgsUGc6KCk9PmhlLCRqOigpPT50ZSxVJDooKT0+TixVNzooKT0+Rn0pO3ZhciByPXtkOihlLHQpPT57Zm9yKHZhciBuIGluIHQpci5vKHQsbikmJiFyLm8oZSxuKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6dFtuXX0pfSxvOihlLHQpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX0sbz17fTtyLmQobyx7TVM6KCk9PmksY0Y6KCk9PmEsQUs6KCk9PnMsTV86KCk9PmwsY1g6KCk9PmMsWWQ6KCk9PnYsbmo6KCk9PnUsTzQ6KCk9Pk0sX1c6KCk9PmYsVSQ6KCk9PnAsVTc6KCk9Pmh9KTtjbGFzcyBpIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSx0KXt2YXIgbixyO3N1cGVyKGU9bnVsbCE9PShuPW51bGwhPWU/ZTpudWxsPT10P3ZvaWQgMDp0Lm1lc3NhZ2UpJiZ2b2lkIDAhPT1uP246XCJBbiB1bmV4cGVjdGVkIGVycm9yIGhhcyBvY2N1cnJlZFwiKSx0aGlzLm5hbWU9dGhpcy5jb25zdHJ1Y3Rvci5uYW1lLHRoaXMuc3RhY2s9KGU/dGhpcy5zdGFjazpudWxsIT09KHI9bnVsbD09dD92b2lkIDA6dC5zdGFjaykmJnZvaWQgMCE9PXI/cjp0aGlzLnN0YWNrKS5yZXBsYWNlKC9eKFxcdypFcnJvcikvLGAke3RoaXMuY29uc3RydWN0b3IubmFtZX1gKX19Y2xhc3MgYSBleHRlbmRzIGl7Y29uc3RydWN0b3IoZSx0LG4pe3ZhciByO3N1cGVyKGU9bnVsbCE9PShyPW51bGwhPWU/ZTpudWxsPT1uP3ZvaWQgMDpuLm1lc3NhZ2UpJiZ2b2lkIDAhPT1yP3I6XCJBbiBlcnJvciBvY2N1cnJlZCB3aGVuIGV4ZWN1dGluZyB0aGUgQVBJIHJlcXVlc3RcIixuKSx0aGlzLnN0YXR1cz10fX1jbGFzcyBsIGV4dGVuZHMgaXtjb25zdHJ1Y3RvcihlLHQpe3ZhciBuO3N1cGVyKGU9bnVsbCE9PShuPW51bGwhPWU/ZTpudWxsPT10P3ZvaWQgMDp0Lm1lc3NhZ2UpJiZ2b2lkIDAhPT1uP246XCJBbiBhdXRob3JpemF0aW9uIGVycm9yIG9jY3VycmVkXCIsdCl9fWNsYXNzIHMgZXh0ZW5kcyBpe2NvbnN0cnVjdG9yKGUsdCl7dmFyIG47c3VwZXIoZT1udWxsIT09KG49bnVsbCE9ZT9lOm51bGw9PXQ/dm9pZCAwOnQubWVzc2FnZSkmJnZvaWQgMCE9PW4/bjpcIlRoZSBBUEkgcmVxdWVzdCBmYWlsZWQgYXMgdGhlIGF1dGhvcml6YXRpb24gdG9rZW5zIGhhdmUgZXhwaXJlZFwiLHQpfX1jbGFzcyBjIGV4dGVuZHMgaXtjb25zdHJ1Y3RvcihlLHQpe3ZhciBuO3N1cGVyKGU9bnVsbCE9PShuPW51bGwhPWU/ZTpudWxsPT10P3ZvaWQgMDp0Lm1lc3NhZ2UpJiZ2b2lkIDAhPT1uP246XCJBbiBpbml0aWFsaXphdGlvbiBlcnJvciBvY2N1cnJlZFwiLHQpfX1jbGFzcyB1IGV4dGVuZHMgaXtjb25zdHJ1Y3RvcihlLHQpe3ZhciBuO3N1cGVyKGU9bnVsbCE9PShuPW51bGwhPWU/ZTpudWxsPT10P3ZvaWQgMDp0Lm1lc3NhZ2UpJiZ2b2lkIDAhPT1uP246XCJUaGUgbWV0aG9kIGhhcyBub3QgYmVlbiBpbXBsZW1lbnRlZFwiLHQpfX1jbGFzcyBmIGV4dGVuZHMgaXtjb25zdHJ1Y3RvcihlKXtzdXBlcihlPW51bGwhPWU/ZTpcIkludmFsaWQgcGFyYW1ldGVyIGRldGVjdGVkXCIpfX1jb25zdCBkPWU9PntsZXQgdD1maW4uSW50ZWdyYXRpb25zO3R8fChmaW4uSW50ZWdyYXRpb25zPXt9LHQ9ZmluLkludGVncmF0aW9ucyk7bGV0IG49dFtlXTtyZXR1cm4gbnx8KHRbZV09e30sbj10W2VdKSxufSxwPWU9PntkKGUpLmxvZ2dpbmdFbmFibGVkPSExfSxoPShlLHQ9XCIwLjAuMFwiKT0+e2QoZSkubG9nZ2luZ0VuYWJsZWQ9ITAsZyhlKX0sZz1lPT5gW0BvcGVuZmluLyR7ZS50b0xvd2VyQ2FzZSgpfV1gO2NsYXNzIHZ7Y29uc3RydWN0b3IoZSl7dGhpcy5uYW1lPWUsdGhpcy5wcmVmaXg9ZyhlKSx0aGlzLmlzTG9nZ2luZ0VuYWJsZWQ9dGhpcy5pc0xvZ2dpbmdFbmFibGVkLmJpbmQodGhpcyksdGhpcy5sb2dFcnJvcj10aGlzLmxvZ0Vycm9yLmJpbmQodGhpcyksdGhpcy5sb2dJbmZvPXRoaXMubG9nSW5mby5iaW5kKHRoaXMpLHRoaXMubG9nV2FybmluZz10aGlzLmxvZ1dhcm5pbmcuYmluZCh0aGlzKX1pc0xvZ2dpbmdFbmFibGVkKCl7cmV0dXJuIGQodGhpcy5uYW1lKS5sb2dnaW5nRW5hYmxlZH1sb2dFcnJvcihlKXt0aGlzLmlzTG9nZ2luZ0VuYWJsZWQoKSYmKGUuaW5uZXJFcnJvcj9jb25zb2xlLmVycm9yKHRoaXMucHJlZml4LGUsXCJcXG5cXG4oaW5uZXIpXCIsZS5pbm5lckVycm9yKTpjb25zb2xlLmVycm9yKHRoaXMucHJlZml4LGUpKX1sb2dJbmZvKC4uLmUpe3RoaXMuaXNMb2dnaW5nRW5hYmxlZCgpJiZ0aGlzLnByZWZpeH1sb2dXYXJuaW5nKC4uLmUpe3RoaXMuaXNMb2dnaW5nRW5hYmxlZCgpJiZjb25zb2xlLndhcm4odGhpcy5wcmVmaXgsLi4uZSl9fWNvbnN0IG09XCJvYXV0aC1hcGktYXV0aC1mbG93XCIsQz0oZSx0LG4scixvLGEsbCxzKT0+YXN5bmMgYz0+e2NvbnN0IHU9bmV3IFVSTChjKTtpZigwIT09dS5ocmVmLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihvLnRvTG93ZXJDYXNlKCkpKXJldHVybiExO2lmKHdpbmRvdy5jbGVhckludGVydmFsKHMpLHdpbmRvdy5jbGVhclRpbWVvdXQodCksd2luZG93LmNsZWFyVGltZW91dChuKSxlLnJlbW92ZUFsbExpc3RlbmVycygpLGUuY2xvc2UoITApLHUuc2VhcmNoUGFyYW1zLmdldChcImVycm9yXCIpKXtjb25zdCBlPW5ldyBpKFwiQXV0aG9yaXphdGlvbiBlcnJvclwiKTtyZXR1cm4gZS5kYXRhPXUudG9TdHJpbmcoKSxsKGUpLCEwfWlmKHUuc2VhcmNoUGFyYW1zLmdldChcInN0YXRlXCIpIT09cil7Y29uc3QgZT1uZXcgaShcIlN0YXRlIG1pc21hdGNoXCIpO3JldHVybiBlLmRhdGE9dS50b1N0cmluZygpLGwoZSksITB9Y29uc3QgZj11LnNlYXJjaFBhcmFtcy5nZXQoXCJjb2RlXCIpO2lmKCFmKXtjb25zdCBlPW5ldyBpKFwiQXV0aG9yaXphdGlvbiBjb2RlIG1pc3NpbmdcIik7cmV0dXJuIGUuZGF0YT11LnRvU3RyaW5nKCksbChlKSwhMH1yZXR1cm4gYShmKSwhMH0seT0oZSx0LG4scik9PmFzeW5jKG8sYSk9PntsZXQgbDtjb25zdCBzPXdpbmRvdy5zZXRUaW1lb3V0KCgoKT0+e3dpbmRvdy5jbGVhckludGVydmFsKGwpLHdpbmRvdy5jbGVhclRpbWVvdXQocyksZS5yZW1vdmVBbGxMaXN0ZW5lcnMoKSxlLmNsb3NlKCEwKSxhKG5ldyBpKFwiQXV0aG9yaXphdGlvbiB0aW1lZCBvdXRcIikpfSksM2U1KTtlLmFkZExpc3RlbmVyKFwiY2xvc2luZ1wiLChhc3luYygpPT57ci5sb2dJbmZvKFwiVXNlciBjbG9zZWQgYXV0aCB3aW5kb3dcIiksd2luZG93LmNsZWFySW50ZXJ2YWwobCksd2luZG93LmNsZWFyVGltZW91dChzKSxlLnJlbW92ZUFsbExpc3RlbmVycygpLGEobmV3IGkoXCJGYWlsZWQgdG8gY29tcGxldGUgYXV0aG9yaXphdGlvbiBjb2RlIGZsb3dcIikpfSkpO2NvbnN0IGM9d2luZG93LnNldFRpbWVvdXQoKGFzeW5jKCk9Pnt0cnl7YXdhaXQgZS5pc1Nob3dpbmcoKXx8KHIubG9nSW5mbyhcIlNob3dpbmcgYXV0aCB3aW5kb3dcIiksYXdhaXQgZS5zaG93KCEwKSxhd2FpdCBlLmZvY3VzKCkpfWNhdGNoKGUpe3IubG9nV2FybmluZyhcIlVuYWJsZSB0byBzaG93IGF1dGggd2luZG93XCIpfX0pLDJlMykse3ZlcnNpb246dX09YXdhaXQgZmluLlN5c3RlbS5nZXRSdW50aW1lSW5mbygpO3BhcnNlSW50KHUuc3BsaXQoXCIuXCIpWzBdLDEwKT49MzA/YXdhaXQgQyhlLHMsYyx0LG4sbyxhKSgoYXdhaXQgZS5nZXRJbmZvKCkpLnVybCl8fGF3YWl0IGUuYWRkTGlzdGVuZXIoXCJ1cmwtY2hhbmdlZFwiLChpPT57ci5sb2dJbmZvKFwiQXV0aCB3aW5kb3cgbmF2aWdhdGVkIHRvXCIsaS51cmwpLEMoZSxzLGMsdCxuLG8sYSkoaS51cmwpfSkpOmw9d2luZG93LnNldEludGVydmFsKCgoKT0+KGFzeW5jKGUsdCxuLHIsbyxhLGwscyk9PntsZXQgYzt0cnl7Yz1hd2FpdCBlLmdldEluZm8oKX1jYXRjaChlKXtyZXR1cm4gd2luZG93LmNsZWFySW50ZXJ2YWwodCksd2luZG93LmNsZWFyVGltZW91dChuKSx3aW5kb3cuY2xlYXJUaW1lb3V0KHIpLHMobmV3IGkoXCJDb3VsZCBub3QgbG9jYXRlIGF1dGggd2luZG93XCIpKSwhMX1yZXR1cm4gQyhlLG4scixvLGEsbCxzLHQpKGMudXJsKX0pKGUsbCxzLGMsdCxuLG8sYSkpLDUwMCl9LHc9KCk9PntsZXQgZSx0LG4scjtjb25zdCBvPWFzeW5jKHQsbj0hMSk9Pntjb25zdHtjb21tYW5kOnIsZGF0YTphLGlkOmx9PXQscz17Y29tbWFuZDpyLGlkOmx9O3RyeXtpZighZSl0aHJvdyBuZXcgRXJyb3IoXCJBY2Nlc3MgdG9rZW4gbm90IGZvdW5kXCIpO2NvbnN0e2FwaVJlcXVlc3RVcmw6cixkYXRhOmwsaGVhZGVyczpjLGh0dHBNZXRob2Q6dSxpbmNsdWRlQXV0aG9yaXphdGlvbjpmfT1hLGQ9YXdhaXQoYXN5bmModCxuLHIsbyxpKT0+e3ZhciBhLGw7Y29uc3Qgcz1PYmplY3QuYXNzaWduKHtBY2NlcHQ6XCJhcHBsaWNhdGlvbi9qc29uXCJ9LG8pO1wiUEFUQ0hcIiE9PW4mJlwiUE9TVFwiIT09biYmXCJQVVRcIiE9PW58fC9jb250ZW50LXR5cGUvaS50ZXN0KE9iamVjdC5rZXlzKHMpLmpvaW4oXCIsXCIpKXx8KHNbXCJDb250ZW50LVR5cGVcIl09XCJhcHBsaWNhdGlvbi9qc29uXCIpLGkmJihzLkF1dGhvcml6YXRpb249YEJlYXJlciAke2V9YCk7Y29uc3QgYz1hd2FpdCBmZXRjaCh0LHtib2R5Olwib2JqZWN0XCI9PXR5cGVvZiByP0pTT04uc3RyaW5naWZ5KHIpOnIsaGVhZGVyczpzLG1ldGhvZDpufSk7aWYoIWMub2spe2NvbnN0IGU9e21lc3NhZ2U6XCJGYWlsZWQgdG8gZXhlY3V0ZSBBUEkgcmVxdWVzdFwifTtyZXR1cm4obnVsbD09PShhPWMuaGVhZGVycy5nZXQoXCJDb250ZW50LVR5cGVcIikpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmluY2x1ZGVzKFwiYXBwbGljYXRpb24vanNvblwiKSkmJihlLmRhdGE9YXdhaXQgYy5qc29uKCkpLFtjLnN0YXR1cyx2b2lkIDAsdm9pZCAwLGVdfWxldCB1O2NvbnN0IGY9bnVsbCE9PShsPWMuaGVhZGVycy5nZXQoXCJDb250ZW50LVR5cGVcIikpJiZ2b2lkIDAhPT1sP2w6XCJcIjtzd2l0Y2goITApe2Nhc2UhZjpicmVhaztjYXNlL15hcHBsaWNhdGlvblxcLyhcXHcrXFwrKT9qc29uL2kudGVzdChmKTp1PWF3YWl0IGMuanNvbigpO2JyZWFrO2Nhc2UvXm11bHRpcGFydFxcL2Zvcm0tP2RhdGF8XmFwcGxpY2F0aW9uXFwveC0/d3d3LT9mb3JtLT91cmxlbmNvZGVkL2kudGVzdChmKTp1PWF3YWl0IGMuZm9ybURhdGEoKTticmVhaztjYXNlL15hcHBsaWNhdGlvblxcLygoW14vXSspP3htbHx2bmRcXC5vcGVueG1sZm9ybWF0cyl8XnRleHRcXC98XmltYWdlXFwvc3ZnL2kudGVzdChmKTp1PWF3YWl0IGMudGV4dCgpO2JyZWFrO2RlZmF1bHQ6dT1hd2FpdCBjLmFycmF5QnVmZmVyKCl9cmV0dXJuW2Muc3RhdHVzLHUsZix2b2lkIDBdfSkocix1LGwsYyxmKSxbcCxoLGcsdl09ZDtpZihzLnN0YXR1cz1wLHYpe2lmKCFuJiY0MDE9PT1wKXtjb25zdFtlLG5dPWF3YWl0IGkoKTtyZXR1cm4gbj8ocy5zdGF0dXM9ZSxzLmVycm9yPW4scyk6YXdhaXQgbyh0LCEwKX1zLmVycm9yPXZ9ZWxzZSBoJiYocy5kYXRhPWgscy50eXBlPWcpfWNhdGNoKGUpe2UgaW5zdGFuY2VvZiBFcnJvcj9zLmVycm9yPXttZXNzYWdlOmUubWVzc2FnZX06cy5lcnJvcj17bWVzc2FnZTpcIkZhaWxlZCB0byBleGVjdXRlIEFQSSByZXF1ZXN0XCJ9fXJldHVybiBQcm9taXNlLnJlc29sdmUocyl9LGk9YXN5bmMoKT0+e3ZhciBvO2lmKCFuKXRocm93IG5ldyBFcnJvcihcIkF1dGhvcml6YXRpb24gc2VydmVyIG1ldGFkYXRhIG5vdCBzZXRcIik7aWYoIXQpdGhyb3cgbmV3IEVycm9yKFwiQ2xpZW50IElEIG5vdCBzZXRcIik7Y29uc3QgaT1gZ3JhbnRfdHlwZT1yZWZyZXNoX3Rva2VuJmNsaWVudF9pZD0ke3R9JnJlZnJlc2hfdG9rZW49JHtyfWAsYT1hd2FpdCBmZXRjaChuLnRva2VuX2VuZHBvaW50LHtib2R5OmksaGVhZGVyczp7QWNjZXB0OlwiYXBwbGljYXRpb24vanNvblwiLFwiQ29udGVudC1UeXBlXCI6XCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIn0sbWV0aG9kOlwiUE9TVFwifSk7aWYoIWEub2spe2NvbnN0IGU9e21lc3NhZ2U6XCJGYWlsZWQgdG8gcmVmcmVzaCBhY2Nlc3MgdG9rZW5cIn07cmV0dXJuKG51bGw9PT0obz1hLmhlYWRlcnMuZ2V0KFwiQ29udGVudC1UeXBlXCIpKXx8dm9pZCAwPT09bz92b2lkIDA6by5pbmNsdWRlcyhcImFwcGxpY2F0aW9uL2pzb25cIikpJiYoZS5kYXRhPWF3YWl0IGEuanNvbigpKSxbYS5zdGF0dXMsZV19Y29uc3QgbD1hd2FpdCBhLmpzb24oKTtyZXR1cm4gZT1sLmFjY2Vzc190b2tlbixbYS5zdGF0dXNdfTtzZWxmLm9ubWVzc2FnZT1hc3luYyBpPT57Y29uc3R7Y29tbWFuZDphLGlkOmx9PWkuZGF0YTtsZXQgcz17Y29tbWFuZDphLGlkOmx9O3N3aXRjaChhKXtjYXNlXCJBUElfUkVRVUVTVFwiOnM9YXdhaXQgbyhpLmRhdGEpO2JyZWFrO2Nhc2VcIkNPREVfRVhDSEFOR0VcIjpzPWF3YWl0KGFzeW5jIG89Pnt2YXIgaTtjb25zdHtjb21tYW5kOmEsZGF0YTpsLGlkOnN9PW8sYz17Y29tbWFuZDphLGlkOnN9O3RyeXtpZighbil0aHJvdyBuZXcgRXJyb3IoXCJBdXRob3JpemF0aW9uIHNlcnZlciBtZXRhZGF0YSBub3Qgc2V0XCIpO2lmKCF0KXRocm93IG5ldyBFcnJvcihcIkNsaWVudCBJRCBub3Qgc2V0XCIpO2NvbnN0e2NvZGU6byxjb2RlVmVyaWZpZXI6YSxyZWRpcmVjdFVyaTpzfT1sLHU9YGdyYW50X3R5cGU9YXV0aG9yaXphdGlvbl9jb2RlJmNsaWVudF9pZD0ke3R9JmNvZGU9JHtvfSZjb2RlX3ZlcmlmaWVyPSR7YX0mcmVkaXJlY3RfdXJpPSR7c31gLGY9YXdhaXQgZmV0Y2gobi50b2tlbl9lbmRwb2ludCx7Ym9keTp1LGhlYWRlcnM6e0FjY2VwdDpcImFwcGxpY2F0aW9uL2pzb25cIixcIkNvbnRlbnQtVHlwZVwiOlwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCJ9LG1ldGhvZDpcIlBPU1RcIn0pO2lmKGYub2spe2NvbnN0IHQ9YXdhaXQgZi5qc29uKCk7ZT10LmFjY2Vzc190b2tlbixyPXQucmVmcmVzaF90b2tlbn1lbHNle2NvbnN0IGU9e21lc3NhZ2U6XCJGYWlsZWQgdG8gcmV0cmlldmUgdG9rZW5zXCJ9OyhudWxsPT09KGk9Zi5oZWFkZXJzLmdldChcIkNvbnRlbnQtVHlwZVwiKSl8fHZvaWQgMD09PWk/dm9pZCAwOmkuaW5jbHVkZXMoXCJhcHBsaWNhdGlvbi9qc29uXCIpKSYmKGUuZGF0YT1hd2FpdCBmLmpzb24oKSksYy5lcnJvcj1lfX1jYXRjaChlKXtlIGluc3RhbmNlb2YgRXJyb3I/Yy5lcnJvcj17bWVzc2FnZTplLm1lc3NhZ2V9OmMuZXJyb3I9e21lc3NhZ2U6XCJGYWlsZWQgdG8gcmV0cmlldmUgdG9rZW5zXCJ9fXJldHVybiBQcm9taXNlLnJlc29sdmUoYyl9KShpLmRhdGEpO2JyZWFrO2Nhc2VcIkVYUElSRV9UT0tFTlNcIjpzPWF3YWl0KGFzeW5jIHQ9Pnt2YXIgbztjb25zdHtjb21tYW5kOmksZXhwaXJlQWNjZXNzVG9rZW5Pbmx5OmEsaWQ6bH09dCxzPXtjb21tYW5kOmksaWQ6bH07dHJ5e2lmKCFhJiYhcil0aHJvdyBuZXcgRXJyb3IoXCJSZWZyZXNoIHRva2VuIG5vdCBmb3VuZFwiKTtpZighbil0aHJvdyBuZXcgRXJyb3IoXCJBdXRob3JpemF0aW9uIHNlcnZlciBtZXRhZGF0YSBub3Qgc2V0XCIpO2lmKCFuLnJldm9jYXRpb25fZW5kcG9pbnQpdGhyb3cgbmV3IEVycm9yKFwiUmV2b2NhdGlvbiBlbmRwb2ludCBtaXNzaW5nIGluIGF1dGhvcml6YXRpb24gc2VydmVyIG1ldGFkYXRhXCIpO2NvbnN0IHQ9YT9lOnIsaT1hd2FpdCBmZXRjaChgJHtuLnJldm9jYXRpb25fZW5kcG9pbnR9P3Rva2VuPSR7dH1gLHtoZWFkZXJzOntBY2NlcHQ6XCJhcHBsaWNhdGlvbi9qc29uXCJ9fSk7aWYoIWkub2spe2NvbnN0IGU9e21lc3NhZ2U6XCJGYWlsZWQgdG8gcmV2b2tlIHRva2Vuc1wifTsobnVsbD09PShvPWkuaGVhZGVycy5nZXQoXCJDb250ZW50LVR5cGVcIikpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLmluY2x1ZGVzKFwiYXBwbGljYXRpb24vanNvblwiKSkmJihlLmRhdGE9YXdhaXQgaS5qc29uKCkpLHMuZXJyb3I9ZX19Y2F0Y2goZSl7ZSBpbnN0YW5jZW9mIEVycm9yP3MuZXJyb3I9e21lc3NhZ2U6ZS5tZXNzYWdlfTpzLmVycm9yPXttZXNzYWdlOlwiRmFpbGVkIHRvIHJldm9rZSB0b2tlbnNcIn19cmV0dXJuIFByb21pc2UucmVzb2x2ZShzKX0pKGkuZGF0YSk7YnJlYWs7Y2FzZVwiSU5JVFwiOnM9YXdhaXQoYXN5bmMgZT0+e2NvbnN0e2NvbW1hbmQ6cixkYXRhOm8saWQ6aX09ZSxhPXtjb21tYW5kOnIsaWQ6aX07cmV0dXJuIHQ9by5jbGllbnRJZCxuPW8ubWV0YWRhdGEsUHJvbWlzZS5yZXNvbHZlKGEpfSkoaS5kYXRhKTticmVhaztkZWZhdWx0OnMuZXJyb3I9bmV3IEVycm9yKGBVbmV4cGVjdGVkIG9hdXRoIHdvcmtlciBjb21tYW5kOiAke2F9YCl9c2VsZi5wb3N0TWVzc2FnZShzKX19O3ZhciBiOyFmdW5jdGlvbihlKXtlLkFwaVJlcXVlc3Q9XCJBUElfUkVRVUVTVFwiLGUuQ29kZUV4Y2hhbmdlPVwiQ09ERV9FWENIQU5HRVwiLGUuRXhwaXJlVG9rZW5zPVwiRVhQSVJFX1RPS0VOU1wiLGUuSW5pdD1cIklOSVRcIn0oYnx8KGI9e30pKTtjb25zdCB4PVtdLF89ZT0+e3gucHVzaChlKX0sTz0oZSx0KT0+KG4scixvKT0+bmV3IFByb21pc2UoKChpLGEpPT57Y29uc3QgbD17Y29tbWFuZDpiLkNvZGVFeGNoYW5nZSxkYXRhOntjb2RlOm4sY29kZVZlcmlmaWVyOnIscmVkaXJlY3RVcmk6b30saWQ6RGF0ZS5ub3coKS50b1N0cmluZygpfSx7Y29tbWFuZDpzLGlkOmN9PWw7Xyh7Y29tbWFuZDpzLGlkOmMscmVqZWN0OmEscmVzb2x2ZTppfSksZS5wb3N0TWVzc2FnZShsKSx0LmxvZ0luZm8oXCJXb3JrZXIgcmVxdWVzdCBzZW50XCIsbCl9KSksTD0oZSx0LG4pPT4ocixvLGksYSxsKT0+bmV3IFByb21pc2UoKChzLGMpPT57Y29uc3QgdT17Y29tbWFuZDpiLkFwaVJlcXVlc3QsZGF0YTp7YXBpUmVxdWVzdFVybDpyLGNsaWVudElkOmUsZGF0YTppLGhlYWRlcnM6YSxodHRwTWV0aG9kOm8saW5jbHVkZUF1dGhvcml6YXRpb246bH0saWQ6RGF0ZS5ub3coKS50b1N0cmluZygpfSx7Y29tbWFuZDpmLGlkOmR9PXU7Xyh7Y29tbWFuZDpmLGlkOmQscmVqZWN0OmMscmVzb2x2ZTpzfSksdC5wb3N0TWVzc2FnZSh1KSxuLmxvZ0luZm8oXCJXb3JrZXIgcmVxdWVzdCBzZW50XCIsdSl9KSksRT0oZSx0KT0+bj0+bmV3IFByb21pc2UoKChyLG8pPT57Y29uc3QgaT17Y29tbWFuZDpiLkV4cGlyZVRva2VucyxleHBpcmVBY2Nlc3NUb2tlbk9ubHk6bixpZDpEYXRlLm5vdygpLnRvU3RyaW5nKCl9LHtjb21tYW5kOmEsaWQ6bH09aTtfKHtjb21tYW5kOmEsaWQ6bCxyZWplY3Q6byxyZXNvbHZlOnJ9KSxlLnBvc3RNZXNzYWdlKGkpLHQubG9nSW5mbyhcIldvcmtlciByZXF1ZXN0IHNlbnRcIixpKX0pKSxTPShlLHQpPT57Y29uc3Qgbj14LmZpbmRJbmRleCgobj0+bi5jb21tYW5kPT09dCYmbi5pZD09PWUpKTtuPj0wJiZ4LnNwbGljZShuLDEpfSxqPShlLHQpPT5hc3luYygpPT57dHJ5e2F3YWl0IEUoZSx0KSghMSl9Y2F0Y2goZSl7dC5sb2dXYXJuaW5nKGUubWVzc2FnZSl9ZS50ZXJtaW5hdGUoKSx0LmxvZ0luZm8oXCJXb3JrZXIgdGVybWluYXRlZFwiKX07Y2xhc3MgTXtnZXQgYXBpT3JpZ2luKCl7cmV0dXJuIHRoaXMuX2FwaU9yaWdpbn1nZXQgY2xpZW50SWQoKXtyZXR1cm4gdGhpcy5fY2xpZW50SWR9Z2V0IGxvZ2dlcigpe3JldHVybiB0aGlzLl9sb2dnZXJ9Z2V0IG1ldGFkYXRhKCl7cmV0dXJuIHRoaXMuX21ldGFkYXRhfWdldCB3b3JrZXIoKXtyZXR1cm4gdGhpcy5fd29ya2VyfWNvbnN0cnVjdG9yKGUsdCxuLHIsbyl7aWYodGhpcy5leGVjdXRlQXBpUmVxdWVzdD1hc3luYyhlLHQ9XCJHRVRcIixuLHIsbz0hMCxpPSExKT0+e3RoaXMuX2xvZ2dlci5sb2dJbmZvKFwiRXhlY3V0ZUFwaVJlcXVlc3Qgc3RhcnRlZFwiLGUsdCxuLHIpO3RyeXtjb25zdCBpPWF3YWl0KChlLHQpPT5hc3luYyhuLHIsbyxpLGwpPT57dHJ5e3JldHVybiBhd2FpdCB0LmV4ZWN1dGVBcGlSZXF1ZXN0KGAke2V9JHtufWAscixvLGksbCl9Y2F0Y2goZSl7bGV0IHQ7Y29uc3R7ZGF0YTpuLG1lc3NhZ2U6cixzdGF0dXM6b309ZTt0aHJvdyB0PWUgaW5zdGFuY2VvZiBFcnJvcj9uZXcgYShyLG8pOlwiRmFpbGVkIHRvIHJlZnJlc2ggYWNjZXNzIHRva2VuXCI9PT1yP25ldyBzKHIpOm5ldyBhKHIsbyksdC5kYXRhPW4sdH19KSh0aGlzLl9hcGlPcmlnaW4sdGhpcy5fd29ya2VyKShlLHQsbixyLG8pO3JldHVybiB0aGlzLl9sb2dnZXIubG9nSW5mbyhcIkV4ZWN1dGVBcGlSZXF1ZXN0IGNvbXBsZXRlZFwiLGkpLGl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIGEpe2NvbnN0e2RhdGE6dCxtZXNzYWdlOm4sbmFtZTpyLHN0YWNrOm99PWUsaT10aGlzLmdldEVycm9yTWVzc2FnZUZyb21TZXJ2ZXJSZXNwb25zZSh0KTtpJiYoZS5tZXNzYWdlPWksZS5zdGFjaz1udWxsPT1vP3ZvaWQgMDpvLnJlcGxhY2UoYCR7cn06ICR7bn1gLGAke3J9OiAke2l9YCkpfXRocm93IGkmJnRoaXMubG9nZ2VyLmxvZ0Vycm9yKGUpLGV9fSwhKGUmJnQmJm4mJnImJm8pKXRocm93IG5ldyBjKFwiUHJvdmlkZXIgaGFzIG5vdCBiZWVuIHByb3Blcmx5IGluaXRpYWxpemVkIChjYWxsIGluaXQgdG8gY3JlYXRlIG5ldyBpbnN0YW5jZXMpXCIpO3RoaXMuX2FwaU9yaWdpbj1lLHRoaXMuX2NsaWVudElkPXQsdGhpcy5fbWV0YWRhdGE9bix0aGlzLl93b3JrZXI9cix0aGlzLl9sb2dnZXI9byx0aGlzLmF1dGhvcml6ZT10aGlzLmF1dGhvcml6ZS5iaW5kKHRoaXMpLHRoaXMuY2xvc2U9dGhpcy5jbG9zZS5iaW5kKHRoaXMpLHRoaXMuZXhlY3V0ZUFwaVJlcXVlc3Q9dGhpcy5leGVjdXRlQXBpUmVxdWVzdC5iaW5kKHRoaXMpLHRoaXMuZXhwaXJlVG9rZW5zPXRoaXMuZXhwaXJlVG9rZW5zLmJpbmQodGhpcyksdGhpcy5nZXRFcnJvck1lc3NhZ2VGcm9tU2VydmVyUmVzcG9uc2U9dGhpcy5nZXRFcnJvck1lc3NhZ2VGcm9tU2VydmVyUmVzcG9uc2UuYmluZCh0aGlzKX1hc3luYyBhdXRob3JpemUoZSx0LG4pe2lmKHRoaXMuX2xvZ2dlci5sb2dJbmZvKFwiQXV0aG9yaXplIHN0YXJ0ZWRcIixlLHQsbiksIXRoaXMuX21ldGFkYXRhfHwhdGhpcy5fY2xpZW50SWR8fCF0aGlzLl93b3JrZXIpdGhyb3cgbmV3IGMoXCJQcm92aWRlciBoYXMgbm90IGJlZW4gcHJvcGVybHkgaW5pdGlhbGl6ZWQgKGNhbGwgaW5pdCB0byBjcmVhdGUgbmV3IGluc3RhbmNlcylcIik7dHJ5e2F3YWl0KHI9dGhpcy5fbWV0YWRhdGEsbz10aGlzLl9jbGllbnRJZCxhPXRoaXMuX3dvcmtlcixzPXRoaXMuX2xvZ2dlcixhc3luYyhlLHQsbik9Pntjb25zdHthdXRob3JpemF0aW9uX2VuZHBvaW50Oml9PXIsbD1maW4uQXBwbGljYXRpb24uZ2V0Q3VycmVudFN5bmMoKSxjPShhd2FpdCBsLmdldENoaWxkV2luZG93cygpKS5maW5kKChlPT5lLmlkZW50aXR5Lm5hbWU9PT1tKSk7YyYmYXdhaXQgYy5jbG9zZSghMCk7Y29uc3QgdT0obmV3IERhdGUpLmdldFRpbWUoKS50b1N0cmluZygpLGY9KCgpPT57Y29uc3QgZT1uZXcgVWludDMyQXJyYXkoNjQpO3JldHVybiB3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhlKSxBcnJheS5mcm9tKGUsKGU9PmAwJHtlLnRvU3RyaW5nKDE2KX1gLnNsaWNlKC0yKSkpLmpvaW4oXCJcIil9KSgpLGQ9KGF3YWl0KGFzeW5jIGU9Pntjb25zdCB0PShuZXcgVGV4dEVuY29kZXIpLmVuY29kZShlKSxuPWF3YWl0IHdpbmRvdy5jcnlwdG8uc3VidGxlLmRpZ2VzdChcIlNIQS0yNTZcIix0KSxyPWF3YWl0KGU9Pm5ldyBQcm9taXNlKCgodCxuKT0+e3RyeXtjb25zdCByPW5ldyBCbG9iKFtlXSksbz1uZXcgRmlsZVJlYWRlcjtvLm9ubG9hZD1lPT57dmFyIHIsbztjb25zdCBpPW51bGw9PT0ocj1lLnRhcmdldCl8fHZvaWQgMD09PXI/dm9pZCAwOnIucmVzdWx0O2lmKGkpe2NvbnN0WyxlXT1BcnJheS5mcm9tKG51bGwhPT0obz1pLm1hdGNoKC9iYXNlNjQsKC4qKSQvaSkpJiZ2b2lkIDAhPT1vP286W10pO3QobnVsbCE9ZT9lOlwiXCIpfW4obmV3IEVycm9yKFwiVW5leHBlY3RlZCBlbXB0eSByZXN1bHRcIikpfSxvLnJlYWRBc0RhdGFVUkwocil9Y2F0Y2goZSl7bihlKX19KSkpKG4pO3JldHVybiByLnJlcGxhY2UoL1xcKy9nLFwiLVwiKS5yZXBsYWNlKC9cXC8vZyxcIl9cIil9KShmKSkucmVwbGFjZSgvPSskLyxcIlwiKTtsZXQgcD1cIlwiO3QmJihwPVwiJlwiLHArPU9iamVjdC5lbnRyaWVzKHQpLm1hcCgoZT0+YCR7ZW5jb2RlVVJJQ29tcG9uZW50KGVbMF0pfT0ke2VuY29kZVVSSUNvbXBvbmVudChlWzFdKX1gKSkuam9pbihcIiZcIikpO2NvbnN0IGg9YCR7aX0/Y2xpZW50X2lkPSR7ZW5jb2RlVVJJQ29tcG9uZW50KG8pfSZyZWRpcmVjdF91cmk9JHtlbmNvZGVVUklDb21wb25lbnQoZSl9JnJlc3BvbnNlX3R5cGU9Y29kZSZzdGF0ZT0ke3V9JmNvZGVfY2hhbGxlbmdlPSR7ZH0mY29kZV9jaGFsbGVuZ2VfbWV0aG9kPVMyNTYke3B9YCxnPW51bGwhPW4/bjp7fSx7ZGVmYXVsdEhlaWdodDp2LGRlZmF1bHRXaWR0aDpDfT1nLHc9ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5pbmRleE9mKHIpPDAmJihuW3JdPWVbcl0pO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPTA7Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtvPHIubGVuZ3RoO28rKyl0LmluZGV4T2YocltvXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscltvXSkmJihuW3Jbb11dPWVbcltvXV0pfXJldHVybiBufShnLFtcImRlZmF1bHRIZWlnaHRcIixcImRlZmF1bHRXaWR0aFwiXSk7cy5sb2dJbmZvKFwiU3RhcnRpbmcgT0F1dGggZmxvd1wiLGgpO2NvbnN0IGI9YXdhaXQgZmluLldpbmRvdy5jcmVhdGUoT2JqZWN0LmFzc2lnbih7YWx3YXlzT25Ub3A6ITAsbWF4aW1pemFibGU6ITEsbWluaW1pemFibGU6ITEsYXV0b1Nob3c6ITEsZGVmYXVsdENlbnRlcmVkOiEwLGRlZmF1bHRIZWlnaHQ6bnVsbCE9dj92OjcwMCxkZWZhdWx0V2lkdGg6bnVsbCE9Qz9DOjYwMCxpbmNsdWRlSW5TbmFwc2hvdHM6ITEsbmFtZTptLHJlc2l6YWJsZTohMSxzYXZlV2luZG93U3RhdGU6ITEsc2hvd1Rhc2tiYXJJY29uOiExLHVybDpofSx3KSkseD1hd2FpdCBuZXcgUHJvbWlzZSh5KGIsdSxlLHMpKTtzLmxvZ0luZm8oXCJSZWNlaXZlZCBhdXRob3JpemF0aW9uIGNvZGVcIiksYXdhaXQgYS5leGNoYW5nZUNvZGVGb3JUb2tlbnMoeCxmLGUpLHMubG9nSW5mbyhcIlJlY2VpdmVkIHRva2Vuc1wiKX0pKGUsdCxuKSx0aGlzLl9sb2dnZXIubG9nSW5mbyhcIkF1dGhvcml6ZSBjb21wbGV0ZWRcIil9Y2F0Y2goZSl7bGV0IHQ7aWYoZSBpbnN0YW5jZW9mIGkpe2NvbnN0e2RhdGE6bn09ZSxyPXRoaXMuZ2V0RXJyb3JNZXNzYWdlRnJvbVNlcnZlclJlc3BvbnNlKG4pO3Q9bmV3IGwocixlKSx0LmRhdGE9bn1lbHNlIHQ9bmV3IGwodm9pZCAwLGUpO3Rocm93IHRoaXMubG9nZ2VyLmxvZ0Vycm9yKHQpLHR9dmFyIHIsbyxhLHN9YXN5bmMgY2xvc2UoKXt2YXIgZTt0aGlzLl9sb2dnZXIubG9nSW5mbyhcIkNsb3NlIHN0YXJ0ZWRcIik7dHJ5e2F3YWl0KG51bGw9PT0oZT10aGlzLl93b3JrZXIpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnRlcm1pbmF0ZSgpKSx0aGlzLl93b3JrZXI9dm9pZCAwLHRoaXMuX2FwaU9yaWdpbj12b2lkIDAsdGhpcy5fY2xpZW50SWQ9dm9pZCAwLHRoaXMuX21ldGFkYXRhPXZvaWQgMCx0aGlzLl9sb2dnZXIubG9nSW5mbyhcIkNsb3NlIGNvbXBsZXRlZFwiKX1jYXRjaChlKXtjb25zdCB0PW5ldyBpKHZvaWQgMCxlKTt0aHJvdyB0aGlzLl9sb2dnZXIubG9nRXJyb3IodCksdH19YXN5bmMgZXhwaXJlVG9rZW5zKGU9ITEpe3ZhciB0O3RoaXMuX2xvZ2dlci5sb2dJbmZvKFwiRXhwaXJlVG9rZW5zIHN0YXJ0ZWRcIik7dHJ5e2F3YWl0KG51bGw9PT0odD10aGlzLl93b3JrZXIpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmV4cGlyZVRva2VucyhlKSksdGhpcy5fbG9nZ2VyLmxvZ0luZm8oXCJFeHBpcmVUb2tlbnMgY29tcGxldGVkXCIpfWNhdGNoKGUpe2NvbnN0IHQ9bmV3IGkodm9pZCAwLGUpO3Rocm93IHRoaXMuX2xvZ2dlci5sb2dFcnJvcih0KSx0fX1nZXRFcnJvck1lc3NhZ2VGcm9tU2VydmVyUmVzcG9uc2UoZSl7ZSYmdGhpcy5fbG9nZ2VyLmxvZ1dhcm5pbmcoZSl9c3RhdGljIGFzeW5jIGluaXQoZSx0LG4sciwuLi5vKXtjb25zdCBhPW5ldyB2KHIpO2xldCBsO2EubG9nSW5mbyhcIkluaXQgc3RhcnRlZFwiLGUsdCxuKTt0cnl7bD1uZXcgVVJMKHQpfWNhdGNoKGUpe2NvbnN0IHQ9bmV3IGYoXCJVbmV4cGVjdGVkIGludmFsaWQgQVBJIG9yaWdpblwiKTt0aHJvdyBhLmxvZ0Vycm9yKHQpLHR9dHJ5e2NvbnN0IHQ9YXdhaXQoYXN5bmMgZT0+e2xldCB0O3RyeXt0PW5ldyBVUkwoZSl9Y2F0Y2goZSl7dGhyb3cgbmV3IGYoXCJVbmV4cGVjdGVkIGludmFsaWQgbWV0YWRhdGEgVVJMXCIpfWNvbnN0IG49YXdhaXQgZmV0Y2godCx7aGVhZGVyczp7QWNjZXB0OlwiYXBwbGljYXRpb24vanNvblwifX0pO2lmKCFuLm9rKXRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byByZXRyaWV2ZSBhdXRob3JpemF0aW9uIHNlcnZlciBtZXRhZGF0YVwiKTtjb25zdCByPWF3YWl0IG4uanNvbigpO2lmKCFyKXRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgZW1wdHkgYXV0aG9yaXphdGlvbiBzZXJ2ZXIgbWV0YWRhdGEgcmVzcG9uc2VcIik7aWYoIXIucmVzcG9uc2VfdHlwZXNfc3VwcG9ydGVkLmZpbmQoKGU9PlwiY29kZVwiPT09ZS50b0xvd2VyQ2FzZSgpKSkpdGhyb3cgbmV3IEVycm9yKFwiQXV0aG9yaXphdGlvbiBzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgYXV0aG9yaXphdGlvbiBjb2RlIHJlc3BvbnNlIHR5cGVcIik7cmV0dXJuIHJ9KShlKSxyPWF3YWl0KGFzeW5jKGUsdCxuKT0+e2NvbnN0IHI9bmV3IEJsb2IoW2AoJHt3fSkoKWBdLHt0eXBlOlwidGV4dC9qYXZhc2NyaXB0XCJ9KSxvPVVSTC5jcmVhdGVPYmplY3RVUkwociksaT1uZXcgV29ya2VyKG8pO3JldHVybiBpLm9ubWVzc2FnZT0oZT0+dD0+e2UubG9nSW5mbyhcIldvcmtlciByZXNwb25zZSByZWNlaXZlZFwiLHQuZGF0YSk7Y29uc3Qgbj10LmRhdGEse2NvbW1hbmQ6cixlcnJvcjpvLGlkOml9PW4sYT1mdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO288ci5sZW5ndGg7bysrKXQuaW5kZXhPZihyW29dKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW29dKSYmKG5bcltvXV09ZVtyW29dXSl9cmV0dXJuIG59KG4sW1wiY29tbWFuZFwiLFwiZXJyb3JcIixcImlkXCJdKSxsPSgoZSx0KT0+eC5maW5kKChuPT5uLmNvbW1hbmQ9PT10JiZuLmlkPT09ZSkpKShpLHIpO2w/KG8/KFwic3RhdHVzXCJpbiBhJiZ2b2lkIDAhPT1hLnN0YXR1cyYmKG8uc3RhdHVzPWEuc3RhdHVzKSxsLnJlamVjdChvKSk6bC5yZXNvbHZlKGEpLFMoaSxyKSk6ZS5sb2dFcnJvcihuZXcgRXJyb3IoXCJVbmFibGUgdG8gbG9jYXRlIGF3YWl0ZWQgcmVxdWVzdFwiKSl9KShuKSxhd2FpdCgoZSx0LG4scik9Pm5ldyBQcm9taXNlKCgobyxpKT0+e2NvbnN0IGE9e2NvbW1hbmQ6Yi5Jbml0LGRhdGE6e2NsaWVudElkOnQsbWV0YWRhdGE6ZX0saWQ6RGF0ZS5ub3coKS50b1N0cmluZygpfSx7Y29tbWFuZDpsLGlkOnN9PWE7Xyh7Y29tbWFuZDpsLGlkOnMscmVqZWN0OmkscmVzb2x2ZTpvfSksbi5wb3N0TWVzc2FnZShhKSxyLmxvZ0luZm8oXCJXb3JrZXIgcmVxdWVzdCBzZW50XCIsYSl9KSkpKGUsdCxpLG4pLHtleGNoYW5nZUNvZGVGb3JUb2tlbnM6TyhpLG4pLGV4ZWN1dGVBcGlSZXF1ZXN0OkwodCxpLG4pLGV4cGlyZVRva2VuczpFKGksbiksdGVybWluYXRlOmooaSxuKX19KSh0LG4sYSk7cmV0dXJuIGEubG9nSW5mbyhcIkluaXQgY29tcGxldGVkXCIsdCksbmV3IE0obC5vcmlnaW4sbix0LHIsYSl9Y2F0Y2goZSl7bGV0IHQ7dGhyb3cgdD1lIGluc3RhbmNlb2YgaT9lOm5ldyBjKHZvaWQgMCxlKSxhLmxvZ0Vycm9yKHQpLHR9fX12YXIgaz1vLk1TLFI9by5jRixQPW8uQUssST1vLk1fLEE9by5jWCxUPW8uTzQsSD1vLl9XLEI9by5VJCxWPW8uVTcsRD1uKDk1MSk7Y29uc3QgWj1cIjEuMC4xXCIsJD1cIk1pY3Jvc29mdDM2NVwiLE49KCk9PntCKCQpfSxGPSgpPT57VigkLFopfTtcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGZpbiYmT2JqZWN0LmFzc2lnbih3aW5kb3cse2Zpbjp7fX0pLE9iamVjdC5hc3NpZ24oZmluLHtJbnRlZ3JhdGlvbnM6e01pY3Jvc29mdDM2NTp7ZW5hYmxlTG9nZ2luZzpGLGRpc2FibGVMb2dnaW5nOk59fX0pKTtjb25zdCBVPWU9PmFzeW5jKHQsbixyLG8saSk9Pnt2YXIgYTtyZXR1cm4gdD0oYT10KS5zdGFydHNXaXRoKFwiL1wiKT9hOmAvJHthfWAsZS5leGVjdXRlQXBpUmVxdWVzdCh0LG4scixvLGksITApfSxXPWFzeW5jKGUsdCxuPVtdKT0+e2NvbnN0IHI9W1wiaWRcIixcInVzZXJQcmluY2lwYWxOYW1lXCIsXCJ1c2VyVHlwZVwiLC4uLm5dLmpvaW4oXCIsXCIpLG89YXdhaXQoYXN5bmMoZSx0PVtdKT0+e2lmKCEobnVsbD09dD92b2lkIDA6dC5sZW5ndGgpKXJldHVybltdO2NvbnN0IG49W107Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKz0yMCl7Y29uc3Qgbz17cmVxdWVzdHM6dC5zbGljZShyLHIrMjApLm1hcCgoZT0+KGUuaWQ9Y3J5cHRvLnJhbmRvbVVVSUQoKSxlKSkpfTtuLnB1c2goZS5leGVjdXRlQXBpUmVxdWVzdChcIi92MS4wLyRiYXRjaFwiLFwiUE9TVFwiLG8pKX1jb25zdCByPShhd2FpdCBQcm9taXNlLmFsbChuKSkuZmxhdE1hcCgoZT0+ZS5kYXRhLnJlc3BvbnNlcykpO3JldHVybiB0Lm1hcCgoZT0+e3ZhciB0O3JldHVybiBudWxsPT09KHQ9ci5maW5kKCh0PT50LmlkPT09ZS5pZCkpKXx8dm9pZCAwPT09dD92b2lkIDA6dC5ib2R5fSkpfSkoZSx0Lm1hcCgoZT0+KHttZXRob2Q6XCJHRVRcIix1cmw6YC91c2Vycz8kZmlsdGVyPW1haWwgZXEgJyR7ZW5jb2RlVVJJQ29tcG9uZW50KGUpfScmJHNlbGVjdD0ke3J9YH0pKSkpLGk9by5tYXAoKGU9Pnt2YXIgdDtyZXR1cm4gbnVsbD09PSh0PWUudmFsdWUpfHx2b2lkIDA9PT10P3ZvaWQgMDp0WzBdfSkpO3JldHVybiBlLmxvZ2dlci5sb2dJbmZvKFwiUmVzb2x2ZWQgdXNlcnMgZnJvbSBlbWFpbCBhZGRyZXNzZXNcIixpLHQpLGl9O3ZhciB6PW4oMzAwKTtjb25zdCBHPWU9PmUubWFwKChlPT5lP3tpZDplLnVzZXJQcmluY2lwYWxOYW1lLGVtYWlsQWRkcmVzczplLm1haWwsbmFtZTplLmRpc3BsYXlOYW1lfTp2b2lkIDApKSxxPWFzeW5jKGUsdCk9Pnt0cnl7YXdhaXQgZmluLlN5c3RlbS5yZWdpc3RlclVzYWdlKHt0eXBlOlwiaW50ZWdyYXRpb24tZmVhdHVyZVwiLGRhdGE6e2FwaVZlcnNpb246Wixjb21wb25lbnROYW1lOmV9fSl9Y2F0Y2gobil7dC5sb2dXYXJuaW5nKGBVbmFibGUgdG8gcmVnaXN0ZXIgdXNhZ2UgZm9yIGZlYXR1cmUgJHtlfTogJHtudWxsPT1uP3ZvaWQgMDpuLm1lc3NhZ2V9YCl9fSxZPWU9PntsZXQgdD1lO3JldHVybiBBcnJheS5pc0FycmF5KGUpP2UuZmlsdGVyKEJvb2xlYW4pLm1hcChZKTooXCJvYmplY3RcIj09dHlwZW9mIGUmJih0PU9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhlKS5maWx0ZXIoKChbLGVdKT0+dm9pZCAwIT09KG51bGwhPWU/ZTp2b2lkIDApKSkubWFwKCgoW2UsdF0pPT5bZSxZKHQpXSkpKSksdCl9LEs9ZT0+LyNFWFQjQC8udGVzdChlLnVzZXJQcmluY2lwYWxOYW1lKTt2YXIgWDshZnVuY3Rpb24oZSl7ZS5NUzM2NT1cIk1TLTM2NVwiLGUuVGVhbXM9XCJNUy1URUFNU1wifShYfHwoWD17fSkpO2NsYXNzIEogZXh0ZW5kcyBUe2dldCBjdXJyZW50VXNlcigpe3JldHVybiB0aGlzLl9jdXJyZW50VXNlcn1nZXQgcmVkaXJlY3RVcmkoKXtyZXR1cm4gdGhpcy5fcmVkaXJlY3RVcml9Z2V0IHBlcm1pc3Npb25zKCl7cmV0dXJuIHRoaXMuX3Blcm1pc3Npb25zfWdldCB0ZW5hbnRJZCgpe3JldHVybiB0aGlzLl90ZW5hbnRJZH1jb25zdHJ1Y3RvcihlLHQsbixyLG8saSxhLGwpe3N1cGVyKGUsdCxpLGEsbCksdGhpcy5fcGVybWlzc2lvbnM9byx0aGlzLl9yZWRpcmVjdFVyaT1yLHRoaXMuX3RlbmFudElkPW4scShYLk1TMzY1LGwpfWFzeW5jIGF1dGhvcml6ZShlLHQsbil7YXdhaXQgc3VwZXIuYXV0aG9yaXplKGUsdCxuKTtjb25zdCByPWF3YWl0KGFzeW5jIGU9Pntjb25zdHtkYXRhOnR9PWF3YWl0IGUuZXhlY3V0ZUFwaVJlcXVlc3QoXCIvdjEuMC9tZVwiKTtyZXR1cm4gdH0pKHRoaXMpO3RoaXMuX2N1cnJlbnRVc2VyPXJ9Z2V0RXJyb3JNZXNzYWdlRnJvbVNlcnZlclJlc3BvbnNlKGUpe3ZhciB0LG4scjtpZihcInN0cmluZ1wiPT10eXBlb2YgZSl0cnl7cmV0dXJuIG51bGw9PT0obj1udWxsPT09KHQ9bmV3IFVSTChlKS5zZWFyY2hQYXJhbXMuZ2V0KFwiZXJyb3JfZGVzY3JpcHRpb25cIikpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LnNwbGl0KC9cXHJcXG4vKSl8fHZvaWQgMD09PW4/dm9pZCAwOm5bMF19Y2F0Y2goZSl7cmV0dXJufXJldHVybiBudWxsPT09KHI9bnVsbD09ZT92b2lkIDA6ZS5lcnJvcil8fHZvaWQgMD09PXI/dm9pZCAwOnIubWVzc2FnZX1zdGF0aWMgYXN5bmMgaW5pdChlLHQsbixyLG8saSxhKXtjb25zdCBsPWF3YWl0IHN1cGVyLmluaXQoZSx0LG4scik7cmV0dXJuIG5ldyBKKHQsbixvLGksYSxudWxsPT1sP3ZvaWQgMDpsLm1ldGFkYXRhLG51bGw9PWw/dm9pZCAwOmwud29ya2VyLG51bGw9PWw/dm9pZCAwOmwubG9nZ2VyKX19Y29uc3QgUT1bXCJVc2VyLlJlYWRCYXNpYy5BbGxcIixcIlRlYW0uUmVhZEJhc2ljLkFsbFwiLFwiQ2hhbm5lbC5SZWFkQmFzaWMuQWxsXCIsXCJDaGFubmVsTWVzc2FnZS5TZW5kXCIsXCJDaGF0LkNyZWF0ZVwiLFwiQ2hhdE1lc3NhZ2UuU2VuZFwiLFwib2ZmbGluZV9hY2Nlc3NcIl07bGV0IGVlO2NvbnN0IHRlPWFzeW5jKGUsdCxuLHI9W10sbyxpKT0+e2F3YWl0IG5lKGUsdCxuLHIpO2NvbnN0IGE9T2JqZWN0LmFzc2lnbih7c2NvcGU6Wy4uLlEsLi4ucl0uam9pbihcIiBcIil9LG8pLGw9T2JqZWN0LmFzc2lnbih7ZGVmYXVsdEhlaWdodDo2MDAsZGVmYXVsdFdpZHRoOjU1MH0saSk7cmV0dXJuIGF3YWl0IGVlLmF1dGhvcml6ZShuLGEsbCkse2NsaWVudElkOmUsY3VycmVudFVzZXI6ZWUuY3VycmVudFVzZXIsZGlzY29ubmVjdDplZS5jbG9zZSxleGVjdXRlQXBpUmVxdWVzdDpVKGVlKSxwcm92aWRlcjplZSx0ZW5hbnRJZDp0fX0sbmU9YXN5bmMoZSx0LG4scik9PntpZighZSl0aHJvdyBuZXcgSChcIkludmFsaWQgY2xpZW50IElEXCIpO2lmKCF0KXRocm93IG5ldyBIKFwiSW52YWxpZCB0ZW5hbnQgSURcIik7aWYoIW4pdGhyb3cgbmV3IEgoXCJJbnZhbGlkIHJlZGlyZWN0IFVSSVwiKTtjb25zdCBvPWBodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20vJHt0fS92Mi4wLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uYDsoIWVlfHxlZS5jbGllbnRJZCE9PWV8fGVlLnRlbmFudElkIT09dHx8ZWUucmVkaXJlY3RVcmkhPT1ufHwoMCxELnhvcikoZWUucGVybWlzc2lvbnMscikubGVuZ3RoPjApJiYoZWU9YXdhaXQgSi5pbml0KG8sXCJodHRwczovL2dyYXBoLm1pY3Jvc29mdC5jb21cIixlLCQsdCxuLHIpKX07Y2xhc3MgcmUgZXh0ZW5kcyBre2NvbnN0cnVjdG9yKGUsdCl7dmFyIG47c3VwZXIoZT1udWxsIT09KG49bnVsbCE9ZT9lOm51bGw9PXQ/dm9pZCAwOnQubWVzc2FnZSkmJnZvaWQgMCE9PW4/bjpcIkFuIGludGVyb3AgZXJyb3Igb2NjdXJyZWRcIix0KX19dmFyIG9lLGllLGFlLGxlLHNlLGNlOyFmdW5jdGlvbihlKXtlLkFwcE5vdEZvdW5kPVwiQXBwTm90Rm91bmRcIixlLkVycm9yT25MYXVuY2g9XCJFcnJvck9uTGF1bmNoXCIsZS5BcHBUaW1lb3V0PVwiQXBwVGltZW91dFwiLGUuUmVzb2x2ZXJVbmF2YWlsYWJsZT1cIlJlc29sdmVyVW5hdmFpbGFibGVcIn0ob2V8fChvZT17fSkpLGZ1bmN0aW9uKGUpe2UuTm9BcHBzRm91bmQ9XCJOb0FwcHNGb3VuZFwiLGUuUmVzb2x2ZXJVbmF2YWlsYWJsZT1cIlJlc29sdmVyVW5hdmFpbGFibGVcIixlLlJlc29sdmVyVGltZW91dD1cIlJlc29sdmVyVGltZW91dFwifShpZXx8KGllPXt9KSksZnVuY3Rpb24oZSl7ZS5Ob0NoYW5uZWxGb3VuZD1cIk5vQ2hhbm5lbEZvdW5kXCIsZS5BY2Nlc3NEZW5pZWQ9XCJBY2Nlc3NEZW5pZWRcIixlLkNyZWF0aW9uRmFpbGVkPVwiQ3JlYXRpb25GYWlsZWRcIn0oYWV8fChhZT17fSkpLGxlPWZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKGUpe3ZhciB0LG49T2JqZWN0LnByb3RvdHlwZSxyPW4uaGFzT3duUHJvcGVydHksbz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LGk9by5pdGVyYXRvcnx8XCJAQGl0ZXJhdG9yXCIsYT1vLmFzeW5jSXRlcmF0b3J8fFwiQEBhc3luY0l0ZXJhdG9yXCIsbD1vLnRvU3RyaW5nVGFnfHxcIkBAdG9TdHJpbmdUYWdcIjtmdW5jdGlvbiBzKGUsdCxuKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLGVbdF19dHJ5e3Moe30sXCJcIil9Y2F0Y2goZSl7cz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGVbdF09bn19ZnVuY3Rpb24gYyhlLHQsbixyKXt2YXIgbz10JiZ0LnByb3RvdHlwZSBpbnN0YW5jZW9mIHY/dDp2LGk9T2JqZWN0LmNyZWF0ZShvLnByb3RvdHlwZSksYT1uZXcgaihyfHxbXSk7cmV0dXJuIGkuX2ludm9rZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZjtyZXR1cm4gZnVuY3Rpb24obyxpKXtpZihyPT09cCl0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO2lmKHI9PT1oKXtpZihcInRocm93XCI9PT1vKXRocm93IGk7cmV0dXJuIGsoKX1mb3Iobi5tZXRob2Q9byxuLmFyZz1pOzspe3ZhciBhPW4uZGVsZWdhdGU7aWYoYSl7dmFyIGw9TChhLG4pO2lmKGwpe2lmKGw9PT1nKWNvbnRpbnVlO3JldHVybiBsfX1pZihcIm5leHRcIj09PW4ubWV0aG9kKW4uc2VudD1uLl9zZW50PW4uYXJnO2Vsc2UgaWYoXCJ0aHJvd1wiPT09bi5tZXRob2Qpe2lmKHI9PT1mKXRocm93IHI9aCxuLmFyZztuLmRpc3BhdGNoRXhjZXB0aW9uKG4uYXJnKX1lbHNlXCJyZXR1cm5cIj09PW4ubWV0aG9kJiZuLmFicnVwdChcInJldHVyblwiLG4uYXJnKTtyPXA7dmFyIHM9dShlLHQsbik7aWYoXCJub3JtYWxcIj09PXMudHlwZSl7aWYocj1uLmRvbmU/aDpkLHMuYXJnPT09Zyljb250aW51ZTtyZXR1cm57dmFsdWU6cy5hcmcsZG9uZTpuLmRvbmV9fVwidGhyb3dcIj09PXMudHlwZSYmKHI9aCxuLm1ldGhvZD1cInRocm93XCIsbi5hcmc9cy5hcmcpfX19KGUsbixhKSxpfWZ1bmN0aW9uIHUoZSx0LG4pe3RyeXtyZXR1cm57dHlwZTpcIm5vcm1hbFwiLGFyZzplLmNhbGwodCxuKX19Y2F0Y2goZSl7cmV0dXJue3R5cGU6XCJ0aHJvd1wiLGFyZzplfX19ZS53cmFwPWM7dmFyIGY9XCJzdXNwZW5kZWRTdGFydFwiLGQ9XCJzdXNwZW5kZWRZaWVsZFwiLHA9XCJleGVjdXRpbmdcIixoPVwiY29tcGxldGVkXCIsZz17fTtmdW5jdGlvbiB2KCl7fWZ1bmN0aW9uIG0oKXt9ZnVuY3Rpb24gQygpe312YXIgeT17fTt5W2ldPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O3ZhciB3PU9iamVjdC5nZXRQcm90b3R5cGVPZixiPXcmJncodyhNKFtdKSkpO2ImJmIhPT1uJiZyLmNhbGwoYixpKSYmKHk9Yik7dmFyIHg9Qy5wcm90b3R5cGU9di5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh5KTtmdW5jdGlvbiBfKGUpe1tcIm5leHRcIixcInRocm93XCIsXCJyZXR1cm5cIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7cyhlLHQsKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pbnZva2UodCxlKX0pKX0pKX1mdW5jdGlvbiBPKGUsdCl7ZnVuY3Rpb24gbihvLGksYSxsKXt2YXIgcz11KGVbb10sZSxpKTtpZihcInRocm93XCIhPT1zLnR5cGUpe3ZhciBjPXMuYXJnLGY9Yy52YWx1ZTtyZXR1cm4gZiYmXCJvYmplY3RcIj09dHlwZW9mIGYmJnIuY2FsbChmLFwiX19hd2FpdFwiKT90LnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXtuKFwibmV4dFwiLGUsYSxsKX0pLChmdW5jdGlvbihlKXtuKFwidGhyb3dcIixlLGEsbCl9KSk6dC5yZXNvbHZlKGYpLnRoZW4oKGZ1bmN0aW9uKGUpe2MudmFsdWU9ZSxhKGMpfSksKGZ1bmN0aW9uKGUpe3JldHVybiBuKFwidGhyb3dcIixlLGEsbCl9KSl9bChzLmFyZyl9dmFyIG87dGhpcy5faW52b2tlPWZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gaSgpe3JldHVybiBuZXcgdCgoZnVuY3Rpb24odCxvKXtuKGUscix0LG8pfSkpfXJldHVybiBvPW8/by50aGVuKGksaSk6aSgpfX1mdW5jdGlvbiBMKGUsbil7dmFyIHI9ZS5pdGVyYXRvcltuLm1ldGhvZF07aWYocj09PXQpe2lmKG4uZGVsZWdhdGU9bnVsbCxcInRocm93XCI9PT1uLm1ldGhvZCl7aWYoZS5pdGVyYXRvci5yZXR1cm4mJihuLm1ldGhvZD1cInJldHVyblwiLG4uYXJnPXQsTChlLG4pLFwidGhyb3dcIj09PW4ubWV0aG9kKSlyZXR1cm4gZztuLm1ldGhvZD1cInRocm93XCIsbi5hcmc9bmV3IFR5cGVFcnJvcihcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ3Rocm93JyBtZXRob2RcIil9cmV0dXJuIGd9dmFyIG89dShyLGUuaXRlcmF0b3Isbi5hcmcpO2lmKFwidGhyb3dcIj09PW8udHlwZSlyZXR1cm4gbi5tZXRob2Q9XCJ0aHJvd1wiLG4uYXJnPW8uYXJnLG4uZGVsZWdhdGU9bnVsbCxnO3ZhciBpPW8uYXJnO3JldHVybiBpP2kuZG9uZT8obltlLnJlc3VsdE5hbWVdPWkudmFsdWUsbi5uZXh0PWUubmV4dExvYyxcInJldHVyblwiIT09bi5tZXRob2QmJihuLm1ldGhvZD1cIm5leHRcIixuLmFyZz10KSxuLmRlbGVnYXRlPW51bGwsZyk6aToobi5tZXRob2Q9XCJ0aHJvd1wiLG4uYXJnPW5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKSxuLmRlbGVnYXRlPW51bGwsZyl9ZnVuY3Rpb24gRShlKXt2YXIgdD17dHJ5TG9jOmVbMF19OzEgaW4gZSYmKHQuY2F0Y2hMb2M9ZVsxXSksMiBpbiBlJiYodC5maW5hbGx5TG9jPWVbMl0sdC5hZnRlckxvYz1lWzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaCh0KX1mdW5jdGlvbiBTKGUpe3ZhciB0PWUuY29tcGxldGlvbnx8e307dC50eXBlPVwibm9ybWFsXCIsZGVsZXRlIHQuYXJnLGUuY29tcGxldGlvbj10fWZ1bmN0aW9uIGooZSl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOlwicm9vdFwifV0sZS5mb3JFYWNoKEUsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gTShlKXtpZihlKXt2YXIgbj1lW2ldO2lmKG4pcmV0dXJuIG4uY2FsbChlKTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLm5leHQpcmV0dXJuIGU7aWYoIWlzTmFOKGUubGVuZ3RoKSl7dmFyIG89LTEsYT1mdW5jdGlvbiBuKCl7Zm9yKDsrK288ZS5sZW5ndGg7KWlmKHIuY2FsbChlLG8pKXJldHVybiBuLnZhbHVlPWVbb10sbi5kb25lPSExLG47cmV0dXJuIG4udmFsdWU9dCxuLmRvbmU9ITAsbn07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDprfX1mdW5jdGlvbiBrKCl7cmV0dXJue3ZhbHVlOnQsZG9uZTohMH19cmV0dXJuIG0ucHJvdG90eXBlPXguY29uc3RydWN0b3I9QyxDLmNvbnN0cnVjdG9yPW0sbS5kaXNwbGF5TmFtZT1zKEMsbCxcIkdlbmVyYXRvckZ1bmN0aW9uXCIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZlLmNvbnN0cnVjdG9yO3JldHVybiEhdCYmKHQ9PT1tfHxcIkdlbmVyYXRvckZ1bmN0aW9uXCI9PT0odC5kaXNwbGF5TmFtZXx8dC5uYW1lKSl9LGUubWFyaz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLEMpOihlLl9fcHJvdG9fXz1DLHMoZSxsLFwiR2VuZXJhdG9yRnVuY3Rpb25cIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeCksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sXyhPLnByb3RvdHlwZSksTy5wcm90b3R5cGVbYV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZS5Bc3luY0l0ZXJhdG9yPU8sZS5hc3luYz1mdW5jdGlvbih0LG4scixvLGkpe3ZvaWQgMD09PWkmJihpPVByb21pc2UpO3ZhciBhPW5ldyBPKGModCxuLHIsbyksaSk7cmV0dXJuIGUuaXNHZW5lcmF0b3JGdW5jdGlvbihuKT9hOmEubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRvbmU/ZS52YWx1ZTphLm5leHQoKX0pKX0sXyh4KSxzKHgsbCxcIkdlbmVyYXRvclwiKSx4W2ldPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHgudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIltvYmplY3QgR2VuZXJhdG9yXVwifSxlLmtleXM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107Zm9yKHZhciBuIGluIGUpdC5wdXNoKG4pO3JldHVybiB0LnJldmVyc2UoKSxmdW5jdGlvbiBuKCl7Zm9yKDt0Lmxlbmd0aDspe3ZhciByPXQucG9wKCk7aWYociBpbiBlKXJldHVybiBuLnZhbHVlPXIsbi5kb25lPSExLG59cmV0dXJuIG4uZG9uZT0hMCxufX0sZS52YWx1ZXM9TSxqLnByb3RvdHlwZT17Y29uc3RydWN0b3I6aixyZXNldDpmdW5jdGlvbihlKXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD10LHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9XCJuZXh0XCIsdGhpcy5hcmc9dCx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChTKSwhZSlmb3IodmFyIG4gaW4gdGhpcylcInRcIj09PW4uY2hhckF0KDApJiZyLmNhbGwodGhpcyxuKSYmIWlzTmFOKCtuLnNsaWNlKDEpKSYmKHRoaXNbbl09dCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIGU9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoXCJ0aHJvd1wiPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZG9uZSl0aHJvdyBlO3ZhciBuPXRoaXM7ZnVuY3Rpb24gbyhyLG8pe3JldHVybiBsLnR5cGU9XCJ0aHJvd1wiLGwuYXJnPWUsbi5uZXh0PXIsbyYmKG4ubWV0aG9kPVwibmV4dFwiLG4uYXJnPXQpLCEhb31mb3IodmFyIGk9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2k+PTA7LS1pKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbaV0sbD1hLmNvbXBsZXRpb247aWYoXCJyb290XCI9PT1hLnRyeUxvYylyZXR1cm4gbyhcImVuZFwiKTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoYSxcImNhdGNoTG9jXCIpLGM9ci5jYWxsKGEsXCJmaW5hbGx5TG9jXCIpO2lmKHMmJmMpe2lmKHRoaXMucHJldjxhLmNhdGNoTG9jKXJldHVybiBvKGEuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxhLmZpbmFsbHlMb2MpcmV0dXJuIG8oYS5maW5hbGx5TG9jKX1lbHNlIGlmKHMpe2lmKHRoaXMucHJldjxhLmNhdGNoTG9jKXJldHVybiBvKGEuY2F0Y2hMb2MsITApfWVsc2V7aWYoIWMpdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbyhhLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgbz10aGlzLnRyeUVudHJpZXNbbl07aWYoby50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKG8sXCJmaW5hbGx5TG9jXCIpJiZ0aGlzLnByZXY8by5maW5hbGx5TG9jKXt2YXIgaT1vO2JyZWFrfX1pJiYoXCJicmVha1wiPT09ZXx8XCJjb250aW51ZVwiPT09ZSkmJmkudHJ5TG9jPD10JiZ0PD1pLmZpbmFsbHlMb2MmJihpPW51bGwpO3ZhciBhPWk/aS5jb21wbGV0aW9uOnt9O3JldHVybiBhLnR5cGU9ZSxhLmFyZz10LGk/KHRoaXMubWV0aG9kPVwibmV4dFwiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsZyk6dGhpcy5jb21wbGV0ZShhKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZihcInRocm93XCI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuXCJicmVha1wiPT09ZS50eXBlfHxcImNvbnRpbnVlXCI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOlwicmV0dXJuXCI9PT1lLnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz1lLmFyZyx0aGlzLm1ldGhvZD1cInJldHVyblwiLHRoaXMubmV4dD1cImVuZFwiKTpcIm5vcm1hbFwiPT09ZS50eXBlJiZ0JiYodGhpcy5uZXh0PXQpLGd9LGZpbmlzaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgbj10aGlzLnRyeUVudHJpZXNbdF07aWYobi5maW5hbGx5TG9jPT09ZSlyZXR1cm4gdGhpcy5jb21wbGV0ZShuLmNvbXBsZXRpb24sbi5hZnRlckxvYyksUyhuKSxnfX0sY2F0Y2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIG49dGhpcy50cnlFbnRyaWVzW3RdO2lmKG4udHJ5TG9jPT09ZSl7dmFyIHI9bi5jb21wbGV0aW9uO2lmKFwidGhyb3dcIj09PXIudHlwZSl7dmFyIG89ci5hcmc7UyhuKX1yZXR1cm4gb319dGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6TShlKSxyZXN1bHROYW1lOm4sbmV4dExvYzpyfSxcIm5leHRcIj09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9dCksZ319LGV9KGUuZXhwb3J0cyk7dHJ5e3JlZ2VuZXJhdG9yUnVudGltZT10fWNhdGNoKGUpe0Z1bmN0aW9uKFwiclwiLFwicmVnZW5lcmF0b3JSdW50aW1lID0gclwiKSh0KX19LGxlKHtleHBvcnRzOnt9fSksZnVuY3Rpb24oZSl7ZS5Db250YWN0PVwiZmRjMy5jb250YWN0XCIsZS5Db250YWN0TGlzdD1cImZkYzMuY29udGFjdExpc3RcIixlLkNvdW50cnk9XCJmZGMzLmNvdW50cnlcIixlLkluc3RydW1lbnQ9XCJmZGMzLmluc3RydW1lbnRcIixlLk9yZ2FuaXphdGlvbj1cImZkYzMub3JnYW5pemF0aW9uXCIsZS5Qb3J0Zm9saW89XCJmZGMzLnBvcnRmb2xpb1wiLGUuUG9zaXRpb249XCJmZGMzLnBvc2l0aW9uXCJ9KHNlfHwoc2U9e30pKSxmdW5jdGlvbihlKXtlLlN0YXJ0Q2FsbD1cIlN0YXJ0Q2FsbFwiLGUuU3RhcnRDaGF0PVwiU3RhcnRDaGF0XCIsZS5WaWV3Q2hhcnQ9XCJWaWV3Q2hhcnRcIixlLlZpZXdDb250YWN0PVwiVmlld0NvbnRhY3RcIixlLlZpZXdRdW90ZT1cIlZpZXdRdW90ZVwiLGUuVmlld05ld3M9XCJWaWV3TmV3c1wiLGUuVmlld0luc3RydW1lbnQ9XCJWaWV3SW5zdHJ1bWVudFwiLGUuVmlld0FuYWx5c2lzPVwiVmlld0FuYWx5c2lzXCJ9KGNlfHwoY2U9e30pKTtjb25zdCB1ZT1cIm9mbXMzNjVhY3Rpb25cIixmZT1lPT5lP1wibXN0ZWFtczpcIjpcImh0dHBzOi8vdGVhbXMubWljcm9zb2Z0LmNvbVwiLGRlPWFzeW5jIGU9Pntjb25zdCB0PW51bGw9PWU/dm9pZCAwOmVbdWVdO2lmKHQpdHJ5e2NvbnN0IGU9KGU9Pntjb25zdCB0PSgwLHouZGVjb21wcmVzcykoZSx7aW5wdXRFbmNvZGluZzpcIkJhc2U2NFwiLG91dHB1dEVuY29kaW5nOlwiU3RyaW5nXCJ9KTtyZXR1cm4gSlNPTi5wYXJzZSh0KX0pKHQpLHtjb250ZXh0Om4saW50ZW50OnJ9PWUsbz17Y29udGV4dDpuLG5hbWU6cn07cmV0dXJuIGF3YWl0IGZpbi5tZS5pbnRlcm9wLmZpcmVJbnRlbnQobyksb31jYXRjaChlKXtjb25zdCB0PWUubWVzc2FnZTt0aHJvdyBuZXcgayhcIkZhaWxlZCB0byBkZWNvbXByZXNzIHNoYXJlIHBheWxvYWRcIisodD9gICgke3R9KWA6XCJcIiksZSl9fSxwZT1hc3luYyhlLHQsbik9Pntjb25zdCByPWF3YWl0KGFzeW5jKGUsdCxuPVtdKT0+e3RyeXtjb25zdCByPVtcImlkXCIsLi4ubl0uam9pbihcIixcIikse2RhdGE6b309YXdhaXQgZS5leGVjdXRlQXBpUmVxdWVzdChgL3YxLjAvdGVhbXMvJHtlbmNvZGVVUklDb21wb25lbnQodCl9PyRzZWxlY3Q9JHtyfWApO3JldHVybiBvfWNhdGNoKGUpe2lmKDQwNCE9PWUuc3RhdHVzKXRocm93IGV9fSkoZSx0LFtcImRpc3BsYXlOYW1lXCJdKTtpZighcilyZXR1cm47bGV0IG87aWYoZS5sb2dnZXIubG9nSW5mbyhcIlJlc29sdmVkIHRlYW1cIixyKSxuKXtpZihvPWF3YWl0KGFzeW5jKGUsdCxuLHI9W10pPT57dHJ5e2NvbnN0IG89W1wiaWRcIiwuLi5yXS5qb2luKFwiLFwiKSx7ZGF0YTppfT1hd2FpdCBlLmV4ZWN1dGVBcGlSZXF1ZXN0KGAvdjEuMC90ZWFtcy8ke2VuY29kZVVSSUNvbXBvbmVudChuKX0vY2hhbm5lbHMvJHtlbmNvZGVVUklDb21wb25lbnQodCl9PyRzZWxlY3Q9JHtvfWApO3JldHVybiBpfWNhdGNoKGUpe2lmKDQwNCE9PWUuc3RhdHVzKXRocm93IGV9fSkoZSxuLHQsW1wiZGlzcGxheU5hbWVcIl0pLCFvKXJldHVybiB2b2lkIGUubG9nZ2VyLmxvZ1dhcm5pbmcoYENvdWxkIG5vdCByZXNvbHZlIGNoYW5uZWwgZnJvbSBpZCAke259YCl9ZWxzZXtlLmxvZ2dlci5sb2dJbmZvKFwiTm8gY2hhbm5lbCBpZCBzdXBwbGllZCwgdXNpbmcgcHJpbWFyeSBjaGFubmVsXCIpO2NvbnN0e2RhdGE6bn09YXdhaXQgZS5leGVjdXRlQXBpUmVxdWVzdChgL3YxLjAvdGVhbXMvJHtlbmNvZGVVUklDb21wb25lbnQodCl9L3ByaW1hcnlDaGFubmVsPyRzZWxlY3Q9ZGlzcGxheU5hbWUsaWRgKTtvPW59Y29uc3QgaT17Y2hhbm5lbElkOm8uaWQsY2hhbm5lbE5hbWU6by5kaXNwbGF5TmFtZSx0ZWFtSWQ6ci5pZCx0ZWFtTmFtZTpyLmRpc3BsYXlOYW1lfTtyZXR1cm4gZS5sb2dnZXIubG9nSW5mbyhcIlJlc29sdmVkIHRlYW0gY2hhbm5lbFwiLHQsbixpKSxpfTtjbGFzcyBoZXtjb25zdHJ1Y3RvcihlLHQ9ITApe3RoaXMubG9nZ2VyPWUucHJvdmlkZXIubG9nZ2VyLHRoaXMucHJvdmlkZXI9ZS5wcm92aWRlcix0aGlzLnVzZU1zVGVhbXNQcm90b2NvbD10LHRoaXMucmVnaXN0ZXJJbnRlbnRIYW5kbGVycz10aGlzLnJlZ2lzdGVySW50ZW50SGFuZGxlcnMuYmluZCh0aGlzKSx0aGlzLnNoYXJlPXRoaXMuc2hhcmUuYmluZCh0aGlzKSx0aGlzLnN0YXJ0Q2FsbD10aGlzLnN0YXJ0Q2FsbC5iaW5kKHRoaXMpLHRoaXMuc3RhcnRDaGF0PXRoaXMuc3RhcnRDaGF0LmJpbmQodGhpcyksdGhpcy5lbmFibGVTaGFyZVBheWxvYWRIYW5kbGVyKCkscShYLlRlYW1zLHRoaXMubG9nZ2VyKX1hc3luYyBlbmFibGVTaGFyZVBheWxvYWRIYW5kbGVyKCl7Y29uc3R7aW5pdGlhbE9wdGlvbnM6ZX09YXdhaXQgZmluLkFwcGxpY2F0aW9uLmdldEN1cnJlbnRTeW5jKCkuZ2V0SW5mbygpLHt1c2VyQXBwQ29uZmlnQXJnczp0fT1lLG49YXdhaXQgZGUodCk7biYmdGhpcy5sb2dnZXIubG9nSW5mbyhcIkZpcmluZyBpbnRlbnRcIixuKSxmaW4uQXBwbGljYXRpb24uZ2V0Q3VycmVudFN5bmMoKS5hZGRMaXN0ZW5lcihcInJ1bi1yZXF1ZXN0ZWRcIiwoYXN5bmMgZT0+e3RyeXtjb25zdCB0PWF3YWl0IGRlKGUudXNlckFwcENvbmZpZ0FyZ3MpO3QmJnRoaXMubG9nZ2VyLmxvZ0luZm8oXCJGaXJpbmcgaW50ZW50XCIsdCl9Y2F0Y2goZSl7dGhpcy5sb2dnZXIubG9nRXJyb3IoZSl9fSkpfWFzeW5jIG9wZW5VcmwoZSl7dGhpcy5sb2dnZXIubG9nSW5mbyhcIm9wZW5Vcmwgc3RhcnRlZFwiLGUpO3RyeXtjb25zdCB0PXRoaXMudXNlTXNUZWFtc1Byb3RvY29sP2UucmVwbGFjZSgvXmh0dHBzOlxcL1xcL3RlYW1zLm1pY3Jvc29mdC5jb21cXC8vaSxcIm1zdGVhbXM6XCIpOmU7dGhpcy5sb2dnZXIubG9nSW5mbyhcIk9wZW5pbmcgdXJsXCIsdCksYXdhaXQgZmluLlN5c3RlbS5vcGVuVXJsV2l0aEJyb3dzZXIodCksdGhpcy5sb2dnZXIubG9nSW5mbyhcIm9wZW5VcmwgY29tcGxldGVkXCIpfWNhdGNoKGUpe3Rocm93IHRoaXMubG9nZ2VyLmxvZ0Vycm9yKGUpLGV9fWFzeW5jIHJlZ2lzdGVySW50ZW50SGFuZGxlcnMoKXtpZih0aGlzLmxvZ2dlci5sb2dJbmZvKFwicmVnaXN0ZXJJbnRlbnRIYW5kbGVycyBzdGFydGVkXCIpLHRoaXMudW5zdWJzY3JpYmVJbnRlbnRIYW5kbGVycylyZXR1cm57dW5zdWJzY3JpYmU6dGhpcy51bnN1YnNjcmliZUludGVudEhhbmRsZXJzfTt0cnl7YXdhaXQgZmluLm1lLmludGVyb3AuZ2V0Q29udGV4dEdyb3VwcygpO2NvbnN0IGU9YXdhaXQgZmluLm1lLmludGVyb3AucmVnaXN0ZXJJbnRlbnRIYW5kbGVyKChhc3luYyBlPT57dHJ5e2F3YWl0KChlLHQpPT5hc3luYyBuPT57dmFyIHIsbyxpLGE7aWYoZS5sb2dnZXIubG9nSW5mbyhcImhhbmRsZVN0YXJ0Q2FsbEludGVudCBzdGFydGVkXCIsbiksKG51bGw9PT0ocj1uLm5hbWUpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnRvTG93ZXJDYXNlKCkpIT09Y2UuU3RhcnRDYWxsLnRvTG93ZXJDYXNlKCkpdGhyb3cgbmV3IGsoYFVuZXhwZWN0ZWQgaW50ZW50IHR5cGU6ICR7bi5uYW1lfWApO2NvbnN0e2NvbnRleHQ6bH09bjtpZigobnVsbD09PShvPWwudHlwZSl8fHZvaWQgMD09PW8/dm9pZCAwOm8udG9Mb3dlckNhc2UoKSkhPT1zZS5Db250YWN0LnRvTG93ZXJDYXNlKCkmJihudWxsPT09KGk9bC50eXBlKXx8dm9pZCAwPT09aT92b2lkIDA6aS50b0xvd2VyQ2FzZSgpKSE9PXNlLkNvbnRhY3RMaXN0LnRvTG93ZXJDYXNlKCkpdGhyb3cgbmV3IGsoYFVuZXhwZWN0ZWQgY29udGV4dCB0eXBlOiAke2wudHlwZX1gKTtjb25zdCBzPShudWxsPT09KGE9bC50eXBlKXx8dm9pZCAwPT09YT92b2lkIDA6YS50b0xvd2VyQ2FzZSgpKT09PXNlLkNvbnRhY3RMaXN0LnRvTG93ZXJDYXNlKCk/bC5jb250YWN0cy5tYXAoKGU9PmUuaWQuZW1haWwpKS5maWx0ZXIoQm9vbGVhbik6W2wuaWQuZW1haWxdLGM9YXdhaXQgdChzKTtlLmxvZ2dlci5sb2dJbmZvKFwiaGFuZGxlU3RhcnRDYWxsSW50ZW50IGNvbXBsZXRlZFwiLGMpfSkodGhpcy5wcm92aWRlcix0aGlzLnN0YXJ0Q2FsbCkoZSl9Y2F0Y2goZSl7dGhyb3cgdGhpcy5sb2dnZXIubG9nRXJyb3IoZSksZX19KSxcIlN0YXJ0Q2FsbFwiKSx0PWF3YWl0IGZpbi5tZS5pbnRlcm9wLnJlZ2lzdGVySW50ZW50SGFuZGxlcigoYXN5bmMgZT0+e3RyeXthd2FpdCgoZSx0KT0+YXN5bmMgbj0+e3ZhciByLG8saSxhO2lmKGUubG9nZ2VyLmxvZ0luZm8oXCJoYW5kbGVTdGFydENoYXRJbnRlbnQgc3RhcnRlZFwiLG4pLChudWxsPT09KHI9bi5uYW1lKXx8dm9pZCAwPT09cj92b2lkIDA6ci50b0xvd2VyQ2FzZSgpKSE9PWNlLlN0YXJ0Q2hhdC50b0xvd2VyQ2FzZSgpKXRocm93IG5ldyBrKGBVbmV4cGVjdGVkIGludGVudCB0eXBlOiAke24ubmFtZX1gKTtjb25zdHtjb250ZXh0Omx9PW47aWYoKG51bGw9PT0obz1sLnR5cGUpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLnRvTG93ZXJDYXNlKCkpIT09c2UuQ29udGFjdC50b0xvd2VyQ2FzZSgpJiYobnVsbD09PShpPWwudHlwZSl8fHZvaWQgMD09PWk/dm9pZCAwOmkudG9Mb3dlckNhc2UoKSkhPT1zZS5Db250YWN0TGlzdC50b0xvd2VyQ2FzZSgpKXRocm93IG5ldyBrKGBVbmV4cGVjdGVkIGNvbnRleHQgdHlwZTogJHtsLnR5cGV9YCk7Y29uc3Qgcz0obnVsbD09PShhPWwudHlwZSl8fHZvaWQgMD09PWE/dm9pZCAwOmEudG9Mb3dlckNhc2UoKSk9PT1zZS5Db250YWN0TGlzdC50b0xvd2VyQ2FzZSgpP2wuY29udGFjdHMubWFwKChlPT5lLmlkLmVtYWlsKSkuZmlsdGVyKEJvb2xlYW4pOltsLmlkLmVtYWlsXSxjPWF3YWl0IHQoe2VtYWlsQWRkcmVzc2VzOnMsdG9waWNOYW1lOmwubmFtZX0pO2UubG9nZ2VyLmxvZ0luZm8oXCJoYW5kbGVTdGFydENoYXRJbnRlbnQgY29tcGxldGVkXCIsYyl9KSh0aGlzLnByb3ZpZGVyLHRoaXMuc3RhcnRDaGF0KShlKX1jYXRjaChlKXt0aHJvdyB0aGlzLmxvZ2dlci5sb2dFcnJvcihlKSxlfX0pLFwiU3RhcnRDaGF0XCIpO3JldHVybiB0aGlzLnVuc3Vic2NyaWJlSW50ZW50SGFuZGxlcnM9YXN5bmMoKT0+e3RoaXMubG9nZ2VyLmxvZ0luZm8oXCJ1bnN1YnNjcmliZUludGVudEhhbmRsZXJzIHN0YXJ0ZWRcIiksYXdhaXQgZS51bnN1YnNjcmliZSgpLGF3YWl0IHQudW5zdWJzY3JpYmUoKSx0aGlzLnVuc3Vic2NyaWJlSW50ZW50SGFuZGxlcnM9dm9pZCAwLHRoaXMubG9nZ2VyLmxvZ0luZm8oXCJ1bnN1YnNjcmliZUludGVudEhhbmRsZXJzIGNvbXBsZXRlZFwiKX0sdGhpcy5sb2dnZXIubG9nSW5mbyhcInJlZ2lzdGVySW50ZW50SGFuZGxlcnMgY29tcGxldGVkXCIpLHt1bnN1YnNjcmliZTp0aGlzLnVuc3Vic2NyaWJlSW50ZW50SGFuZGxlcnN9fWNhdGNoKGUpe2NvbnN0IHQ9bmV3IHJlKGUubWVzc2FnZSk7dGhyb3cgdGhpcy5sb2dnZXIubG9nRXJyb3IodCksdH19YXN5bmMgc2hhcmUoZSl7dmFyIHQsbixyLG87dGhpcy5sb2dnZXIubG9nSW5mbyhcInNoYXJlIHN0YXJ0ZWRcIixlKTt0cnl7aWYoIWUudGFyZ2V0KXRocm93IG5ldyBIKFwiVGFyZ2V0IG5vdCBwcm92aWRlZFwiKTtpZigobnVsbD09PSh0PWUuY29udGV4dCl8fHZvaWQgMD09PXQ/dm9pZCAwOnQudHlwZS50b0xvd2VyQ2FzZSgpKSE9PXNlLkluc3RydW1lbnQudG9Mb3dlckNhc2UoKSl0aHJvdyBuZXcgSChcIlVuc3VwcG9ydGVkIGNvbnRleHQgdHlwZVwiKTtpZighKG51bGw9PT0ocj1udWxsPT09KG49ZS5jb250ZXh0KXx8dm9pZCAwPT09bj92b2lkIDA6bi5pZCl8fHZvaWQgMD09PXI/dm9pZCAwOnIudGlja2VyKSl0aHJvdyBuZXcgSChcIlRpY2tlciBub3QgcHJvdmlkZWRcIik7aWYoIWUuY2hhcnRJbWFnZSYmbnVsbD09ZS5wcmljZUN1cnJlbnQpdGhyb3cgbmV3IEgoXCJDdXJyZW50IHByaWNlIG5vdCBwcm92aWRlZFwiKTtjb25zdCBpPW51bGw9PT0obz1lLnNob3dNZXNzYWdlKXx8dm9pZCAwPT09b3x8byxhPWF3YWl0KGFzeW5jKGUsdCk9Pnt2YXIgbixyLG8saTtjb25zdHtjaGFydEltYWdlOmEsY29udGV4dDpsfT10LHtwcmljZUN1cnJlbnQ6cyxwcmljZUhpZ2g6YyxwcmljZUxvdzp1LHByaWNlT3BlbjpmfT10LGQ9KG51bGw9PT0ocj1udWxsPT09KG49bC5pZCl8fHZvaWQgMD09PW4/dm9pZCAwOm4udGlja2VyKXx8dm9pZCAwPT09cj92b2lkIDA6ci50cmltKCkpfHx2b2lkIDAscD0obnVsbD09PShvPWwubmFtZSl8fHZvaWQgMD09PW8/dm9pZCAwOm8udHJpbSgpKXx8dm9pZCAwO2xldCBoLGcsdixtLEMseTtpZihudWxsIT10LnRpbWVzdGFtcHx8IWEpdHJ5e2g9bmV3IERhdGUobnVsbCE9PShpPXQudGltZXN0YW1wKSYmdm9pZCAwIT09aT9pOkRhdGUubm93KCkpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvXFwuXFxkK1okLyxcIiswMDowMFwiKX1jYXRjaChuKXtlLmxvZ2dlci5sb2dXYXJuaW5nKFwiSW52YWxpZCB0aW1lc3RhbXBcIix0LnRpbWVzdGFtcCl9aWYobnVsbCE9cyYmbnVsbCE9ZiYmKGc9cy1mLHY9Zy9mKjEwMCxDPWc+MD9cIuKWslwiOmc8MD9cIuKWvFwiOlwi4pePXCIsbT1nPjA/XCJHb29kXCI6ZzwwP1wiQXR0ZW50aW9uXCI6XCJXYXJuaW5nXCIpLGEpe2lmKCEvXmltYWdlXFwvKGdpZnxqcChlfGU/Zyl8cG5nKSQvaS50ZXN0KGEudHlwZSkpdGhyb3cgbmV3IEgoXCJDaGFydCBpbWFnZSBNSU1FIHR5cGUgbm90IHN1cHBvcnRlZFwiKTt0cnl7eT1hd2FpdChhc3luYyBlPT5uZXcgUHJvbWlzZSgoKHQsbik9Pntjb25zdCByPW5ldyBGaWxlUmVhZGVyO3Iub25sb2FkZW5kPSgpPT50KHIucmVzdWx0KSxyLm9uZXJyb3I9KCk9Pm4obmV3IEVycm9yKFwiRmFpbGVkIHRvIGNvbnZlcnQgYmxvYiB0byBiYXNlNjRcIikpLHIucmVhZEFzRGF0YVVSTChlKX0pKSkoYSl9Y2F0Y2goZSl7dGhyb3cgbmV3IGsoXCJGYWlsZWQgdG8gY29udmVydCBibG9iIHRvIGJhc2U2NFwiLGUpfX1jb25zdCB3PShhd2FpdCBmaW4uU3lzdGVtLmdldFJ1bnRpbWVJbmZvKCkpLm1hbmlmZXN0VXJsLGI9KHg9e2NvbnRleHQ6bCxpbnRlbnQ6YT9jZS5WaWV3Q2hhcnQ6Y2UuVmlld0luc3RydW1lbnQsdmVyc2lvbjpafSwoMCx6LmNvbXByZXNzKShKU09OLnN0cmluZ2lmeSh4KSx7b3V0cHV0RW5jb2Rpbmc6XCJCYXNlNjRcIn0pKTt2YXIgeDtjb25zdCBfPWAke3d9PyQkJHt1ZX09JHtlbmNvZGVVUklDb21wb25lbnQoYil9YCxPPWBodHRwczovL3N0YXJ0Lm9wZW5maW4uY28vP21hbmlmZXN0PSR7ZW5jb2RlVVJJQ29tcG9uZW50KF8pfWAsTD17JHNjaGVtYTpcImh0dHA6Ly9hZGFwdGl2ZWNhcmRzLmlvL3NjaGVtYXMvYWRhcHRpdmUtY2FyZC5qc29uXCIsdHlwZTpcIkFkYXB0aXZlQ2FyZFwiLHZlcnNpb246XCIxLjRcIixib2R5Olt7dHlwZTpcIkNvbHVtblNldFwiLGNvbHVtbnM6W3t0eXBlOlwiQ29sdW1uXCIsd2lkdGg6XCJzdHJldGNoXCIsaXRlbXM6W3t0eXBlOlwiQ29udGFpbmVyXCIsaXRlbXM6W3t0eXBlOlwiVGV4dEJsb2NrXCIsdGV4dDpudWxsIT1wP3A6ZC50b1VwcGVyQ2FzZSgpLHdyYXA6ITAsc2l6ZTpcIkxhcmdlXCIsc3BhY2luZzpcIk5vbmVcIn0scCYme3R5cGU6XCJUZXh0QmxvY2tcIix0ZXh0OmQudG9VcHBlckNhc2UoKSxpc1N1YnRsZTohMCx3cmFwOiEwLHNwYWNpbmc6XCJOb25lXCJ9LGgmJnt0eXBlOlwiVGV4dEJsb2NrXCIsdGV4dDpge3tEQVRFKCR7aH0sIFNIT1JUKX19IHt7VElNRSgke2h9KX19YCx3cmFwOiEwLHNpemU6XCJTbWFsbFwifV19XX0sbnVsbCE9cyYmIXkmJnt0eXBlOlwiQ29sdW1uXCIsd2lkdGg6XCJzdHJldGNoXCIsaXRlbXM6W3t0eXBlOlwiVGV4dEJsb2NrXCIsdGV4dDpzLnRvRml4ZWQoMiksc2l6ZTpcIkV4dHJhTGFyZ2VcIix3cmFwOiEwLGhvcml6b250YWxBbGlnbm1lbnQ6XCJSaWdodFwifSxudWxsIT1nJiZudWxsIT12JiZ7dHlwZTpcIlRleHRCbG9ja1wiLHRleHQ6YCR7Q30gJHtnLnRvRml4ZWQoMil9ICgke3YudG9GaXhlZCgyKX0lKWAsY29sb3I6bSxzcGFjaW5nOlwiTm9uZVwiLHdyYXA6ITAsaG9yaXpvbnRhbEFsaWdubWVudDpcIlJpZ2h0XCJ9LChudWxsIT1mfHxudWxsIT1jfHxudWxsIT11KSYme3R5cGU6XCJDb250YWluZXJcIixob3Jpem9udGFsQWxpZ25tZW50OlwiUmlnaHRcIixpdGVtczpbe3R5cGU6XCJDb2x1bW5TZXRcIixjb2x1bW5zOlt7dHlwZTpcIkNvbHVtblwiLHdpZHRoOlwic3RyZXRjaFwiLGl0ZW1zOltudWxsIT1mJiZ7dHlwZTpcIlRleHRCbG9ja1wiLHRleHQ6XCJPcGVuXCIsd3JhcDohMCxob3Jpem9udGFsQWxpZ25tZW50OlwiUmlnaHRcIixzaXplOlwiU21hbGxcIix3ZWlnaHQ6XCJCb2xkZXJcIixzcGFjaW5nOlwiTm9uZVwifSxudWxsIT1jJiZ7dHlwZTpcIlRleHRCbG9ja1wiLHRleHQ6XCJIaWdoXCIsd3JhcDohMCxzcGFjaW5nOlwiTm9uZVwiLGhvcml6b250YWxBbGlnbm1lbnQ6XCJSaWdodFwiLHNpemU6XCJTbWFsbFwiLHdlaWdodDpcIkJvbGRlclwifSxudWxsIT11JiZ7dHlwZTpcIlRleHRCbG9ja1wiLHRleHQ6XCJMb3dcIix3cmFwOiEwLHNwYWNpbmc6XCJOb25lXCIsaG9yaXpvbnRhbEFsaWdubWVudDpcIlJpZ2h0XCIsc2l6ZTpcIlNtYWxsXCIsd2VpZ2h0OlwiQm9sZGVyXCJ9XX0se3R5cGU6XCJDb2x1bW5cIix3aWR0aDpcImF1dG9cIixpdGVtczpbbnVsbCE9ZiYme3R5cGU6XCJUZXh0QmxvY2tcIix0ZXh0OmYudG9GaXhlZCgyKSx3cmFwOiEwLHNwYWNpbmc6XCJOb25lXCIsaG9yaXpvbnRhbEFsaWdubWVudDpcIlJpZ2h0XCIsc2l6ZTpcIlNtYWxsXCJ9LG51bGwhPWMmJnt0eXBlOlwiVGV4dEJsb2NrXCIsdGV4dDpjLnRvRml4ZWQoMiksd3JhcDohMCxzcGFjaW5nOlwiTm9uZVwiLGhvcml6b250YWxBbGlnbm1lbnQ6XCJSaWdodFwiLHNpemU6XCJTbWFsbFwifSxudWxsIT11JiZ7dHlwZTpcIlRleHRCbG9ja1wiLHRleHQ6dS50b0ZpeGVkKDIpLHdyYXA6ITAsc3BhY2luZzpcIk5vbmVcIixob3Jpem9udGFsQWxpZ25tZW50OlwiUmlnaHRcIixzaXplOlwiU21hbGxcIn1dfV19XSxzcGFjaW5nOlwiU21hbGxcIn1dfV19LHkmJnt0eXBlOlwiSW1hZ2VcIix1cmw6XCIuLi9ob3N0ZWRDb250ZW50cy8xLyR2YWx1ZVwiLHNwYWNpbmc6XCJTbWFsbFwifSx7dHlwZTpcIkFjdGlvblNldFwiLGFjdGlvbnM6W3t0eXBlOlwiQWN0aW9uLk9wZW5VcmxcIix1cmw6Tyx0aXRsZTpcIk9wZW5cIn1dfV19LEU9e2F0dGFjaG1lbnRzOlt7aWQ6XCIxXCIsY29udGVudFR5cGU6XCJhcHBsaWNhdGlvbi92bmQubWljcm9zb2Z0LmNhcmQuYWRhcHRpdmVcIixjb250ZW50OkpTT04uc3RyaW5naWZ5KFkoTCkpfV0sYm9keTp7Y29udGVudFR5cGU6XCJodG1sXCIsY29udGVudDonPGF0dGFjaG1lbnQgaWQ9XCIxXCI+PC9hdHRhY2htZW50Pid9LHN1bW1hcnk6XCJUZXN0IHN1bW1hcnlcIn07aWYoeSl7Y29uc3RbLGUsdF09Wy4uLnkubWF0Y2goL15kYXRhOihbXjtdKyk7YmFzZTY0LCguKykkL2kpXTtFLmhvc3RlZENvbnRlbnRzPVt7XCJAbWljcm9zb2Z0LmdyYXBoLnRlbXBvcmFyeUlkXCI6XCIxXCIsY29udGVudEJ5dGVzOnQsY29udGVudFR5cGU6ZX1dfXJldHVybiBFfSkodGhpcy5wcm92aWRlcixlKTtsZXQgbDtpZihBcnJheS5pc0FycmF5KGUudGFyZ2V0KSl7Y29uc3R7dGFyZ2V0OnR9PWUsbj1hd2FpdCBXKHRoaXMucHJvdmlkZXIsdCxbXCJkaXNwbGF5TmFtZVwiLFwibWFpbFwiXSkscj1uLmZpbHRlcihCb29sZWFuKTtpZighci5sZW5ndGgpcmV0dXJuIHRoaXMubG9nZ2VyLmxvZ1dhcm5pbmcoXCJDb3VsZCBub3QgcmVzb2x2ZSBhbnkgdmFsaWQgdXNlcnMgZnJvbSBlbWFpbCBhZGRyZXNzZXNcIix0KSx0Lm1hcCgoKCk9Pnt9KSk7Y29uc3R7aWQ6byx3ZWJVcmw6c309YXdhaXQoYXN5bmMoZSx0KT0+e2NvbnN0IG49e2NoYXRUeXBlOnQubGVuZ3RoPjI/XCJncm91cFwiOlwib25lT25PbmVcIixtZW1iZXJzOnQubWFwKCh0PT4oe1wiQG9kYXRhLnR5cGVcIjpcIiNtaWNyb3NvZnQuZ3JhcGguYWFkVXNlckNvbnZlcnNhdGlvbk1lbWJlclwiLHJvbGVzOksodCk/W1wiZ3Vlc3RcIl06W1wib3duZXJcIl0sXCJ1c2VyQG9kYXRhLmJpbmRcIjpgJHtlLmFwaU9yaWdpbn0vdjEuMC91c2VycygnJHt0LmlkfScpYH0pKSl9LHtkYXRhOnJ9PWF3YWl0IGUuZXhlY3V0ZUFwaVJlcXVlc3QoXCIvdjEuMC9jaGF0c1wiLFwiUE9TVFwiLG4pO3JldHVybiByfSkodGhpcy5wcm92aWRlcixbdGhpcy5wcm92aWRlci5jdXJyZW50VXNlciwuLi5yXSkse2RhdGE6Y309YXdhaXQgdGhpcy5wcm92aWRlci5leGVjdXRlQXBpUmVxdWVzdChgL3YxLjAvY2hhdHMvJHtlbmNvZGVVUklDb21wb25lbnQobyl9L21lc3NhZ2VzYCxcIlBPU1RcIixhKTt0aGlzLmxvZ2dlci5sb2dJbmZvKFwiU2VudCBjaGF0IG1lc3NhZ2VcIixjKSxpJiZhd2FpdCB0aGlzLm9wZW5VcmwocyksbD1HKG4pfWVsc2V7Y29uc3R7dGFyZ2V0OnR9PWUsbj1hd2FpdCBwZSh0aGlzLnByb3ZpZGVyLHQudGVhbUlkLHQuY2hhbm5lbElkKTtpZighbilyZXR1cm4gdm9pZCB0aGlzLmxvZ2dlci5sb2dXYXJuaW5nKFwiQ291bGQgbm90IHJlc29sdmUgdGVhbS9jaGFubmVsXCIsdC50ZWFtSWQsdC5jaGFubmVsSWQpO2NvbnN0e2NoYW5uZWxJZDpyLHRlYW1JZDpvfT1uLHtkYXRhOnN9PWF3YWl0IHRoaXMucHJvdmlkZXIuZXhlY3V0ZUFwaVJlcXVlc3QoYC92MS4wL3RlYW1zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG8pfS9jaGFubmVscy8ke2VuY29kZVVSSUNvbXBvbmVudChyKX0vbWVzc2FnZXNgLFwiUE9TVFwiLGEpO3RoaXMubG9nZ2VyLmxvZ0luZm8oXCJTZW50IGNoYXQgbWVzc2FnZVwiLHMpLGkmJmF3YWl0IHRoaXMub3BlblVybChzLndlYlVybCksbD1ufXJldHVybiB0aGlzLmxvZ2dlci5sb2dJbmZvKFwic2hhcmUgY29tcGxldGVkXCIsbCksbH1jYXRjaChlKXt0aHJvdyB0aGlzLmxvZ2dlci5sb2dFcnJvcihlKSxlfX1hc3luYyBzdGFydENhbGwoZT1bXSx0PSExKXt0aGlzLmxvZ2dlci5sb2dJbmZvKFwic3RhcnRDYWxsIHN0YXJ0ZWRcIixlKTt0cnl7bGV0IG49YCR7ZmUodGhpcy51c2VNc1RlYW1zUHJvdG9jb2wpfS9sL2NhbGwvMC8wP2A7Y29uc3Qgcj1hd2FpdCBXKHRoaXMucHJvdmlkZXIsZSxbXCJkaXNwbGF5TmFtZVwiLFwibWFpbFwiXSksbz1yLmZpbHRlcihCb29sZWFuKS5tYXAoKGU9PmVuY29kZVVSSUNvbXBvbmVudChlLnVzZXJQcmluY2lwYWxOYW1lKSkpO2lmKCFvLmxlbmd0aClyZXR1cm4gdGhpcy5sb2dnZXIubG9nV2FybmluZyhcIkNvdWxkIG5vdCByZXNvbHZlIGFueSB2YWxpZCB1c2VycyBmcm9tIHN1cHBsaWVkIGVtYWlsc1wiLGUpLGUubWFwKCgoKT0+e30pKTtuKz1gdXNlcnM9JHtvLmpvaW4oXCIsXCIpfSZ3aXRoVmlkZW89JHt0fWAsdGhpcy5sb2dnZXIubG9nSW5mbyhcIk9wZW5pbmcgVGVhbXNcIixuKSxhd2FpdCBmaW4uU3lzdGVtLm9wZW5VcmxXaXRoQnJvd3NlcihuKTtjb25zdCBpPUcocik7cmV0dXJuIHRoaXMubG9nZ2VyLmxvZ0luZm8oXCJzdGFydENhbGwgY29tcGxldGVkXCIsaSksaX1jYXRjaChlKXt0aHJvdyB0aGlzLmxvZ2dlci5sb2dFcnJvcihlKSxlfX1hc3luYyBzdGFydENoYXQoZSl7dGhpcy5sb2dnZXIubG9nSW5mbyhcInN0YXJ0Q2hhdCBzdGFydGVkXCIsZSk7dHJ5e2xldCB0LG47aWYoXCJ0ZWFtSWRcImluIGUpe2NvbnN0e3RlYW1JZDpyLGNoYW5uZWxJZDpvfT1lLGk9YXdhaXQgcGUodGhpcy5wcm92aWRlcixyLG8pO2lmKCFpKXJldHVybiB2b2lkIHRoaXMubG9nZ2VyLmxvZ1dhcm5pbmcoXCJDb3VsZCBub3QgcmVzb2x2ZSB0ZWFtL2NoYW5uZWxcIixyLG8pO3Q9YCR7ZmUodGhpcy51c2VNc1RlYW1zUHJvdG9jb2wpfS9sL2NoYW5uZWwvJHtlbmNvZGVVUklDb21wb25lbnQoaS5jaGFubmVsSWQpfS8ke2VuY29kZVVSSUNvbXBvbmVudChpLmNoYW5uZWxOYW1lKX0/Z3JvdXBJZD0ke2kudGVhbUlkfSZ0ZW5hbnRJZD0ke3RoaXMucHJvdmlkZXIudGVuYW50SWR9YCxuPWl9ZWxzZXtjb25zdHtlbWFpbEFkZHJlc3NlczpyLG1lc3NhZ2U6byx0b3BpY05hbWU6aX09ZTt0PWAke2ZlKHRoaXMudXNlTXNUZWFtc1Byb3RvY29sKX0vbC9jaGF0LzAvMD9gO2NvbnN0IGE9YXdhaXQgVyh0aGlzLnByb3ZpZGVyLHIsW1wiZGlzcGxheU5hbWVcIixcIm1haWxcIl0pLGw9YS5maWx0ZXIoQm9vbGVhbikubWFwKChlPT5lbmNvZGVVUklDb21wb25lbnQoZS51c2VyUHJpbmNpcGFsTmFtZSkpKTtpZighbC5sZW5ndGgpcmV0dXJuIHRoaXMubG9nZ2VyLmxvZ1dhcm5pbmcoXCJDb3VsZCBub3QgcmVzb2x2ZSBhbnkgdmFsaWQgdXNlcnMgZnJvbSBlbWFpbCBhZGRyZXNzZXNcIixyKSxyLm1hcCgoKCk9Pnt9KSk7dCs9YHVzZXJzPSR7bC5qb2luKFwiLFwiKX1gLGkmJih0Kz1gJnRvcGljTmFtZT0ke2VuY29kZVVSSUNvbXBvbmVudChpKX1gKSxvJiYodCs9YCZtZXNzYWdlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KG8pfWApLG49RyhhKX1yZXR1cm4gdGhpcy5sb2dnZXIubG9nSW5mbyhcIk9wZW5pbmcgVGVhbXNcIix0KSxhd2FpdCBmaW4uU3lzdGVtLm9wZW5VcmxXaXRoQnJvd3Nlcih0KSx0aGlzLmxvZ2dlci5sb2dJbmZvKFwic3RhcnRDaGF0IGNvbXBsZXRlZFwiLG4pLG59Y2F0Y2goZSl7dGhyb3cgdGhpcy5sb2dnZXIubG9nRXJyb3IoZSksZX19fX0sOTE6KCk9Pnt9fSx6PXt9O2Z1bmN0aW9uIEcoZSl7dmFyIHQ9eltlXTtpZih2b2lkIDAhPT10KXJldHVybiB0LmV4cG9ydHM7dmFyIG49eltlXT17aWQ6ZSxsb2FkZWQ6ITEsZXhwb3J0czp7fX07cmV0dXJuIFdbZV0uY2FsbChuLmV4cG9ydHMsbixuLmV4cG9ydHMsRyksbi5sb2FkZWQ9ITAsbi5leHBvcnRzfUcuYz16LEcuZD0oZSx0KT0+e2Zvcih2YXIgbiBpbiB0KUcubyh0LG4pJiYhRy5vKGUsbikmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITAsZ2V0OnRbbl19KX0sRy5nPWZ1bmN0aW9uKCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGdsb2JhbFRoaXMpcmV0dXJuIGdsb2JhbFRoaXM7dHJ5e3JldHVybiB0aGlzfHxuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpfWNhdGNoKGUpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvd319KCksRy5vPShlLHQpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KSxHLm5tZD1lPT4oZS5wYXRocz1bXSxlLmNoaWxkcmVufHwoZS5jaGlsZHJlbj1bXSksZSk7dmFyIHE9RyhHLnM9NTQpLFk9KHEuTVMscS5jRixxLkFLKSxLPShxLk1fLHEuY1gscS5CVCxxLl9XLHEuUGcpLFg9cS4kaixKPShxLlUkLHEuVTcpO2xldCBRPTA7Y29uc3QgZWU9e2NoYXRNZXNzYWdlOlwiQ2hhdCBNZXNzYWdlXCIsZXZlbnQ6XCJFdmVudFwiLG1lc3NhZ2U6XCJFbWFpbFwiLGRyaXZlOlwiRG9jdW1lbnRcIixjb250YWN0OlwiQ29udGFjdFwiLHVzZXI6XCJVc2VyXCIsbGlzdDpcIkxpc3RcIn0sdGU9e3BkZjpcIlBERlwiLGRvY3g6XCJXb3JkXCIscHB0eDpcIlBvd2VyUG9pbnRcIix4bHN4OlwiRXhjZWxcIixvbmVub3RlOlwiT25lTm90ZVwifSxuZT17Y2hhdE1lc3NhZ2U6W1wiQ2hhdC5SZWFkXCIsXCJDaGFubmVsTWVzc2FnZS5SZWFkLkFsbFwiXSxsaXN0OltcIlNpdGVzLlJlYWQuQWxsXCJdLGV2ZW50OltcIkNhbGVuZGFycy5SZWFkXCJdLG1lc3NhZ2U6W1wiTWFpbC5SZWFkV3JpdGUuU2hhcmVkXCJdLGNvbnRhY3Q6W1wiQ29udGFjdHMuUmVhZC5TaGFyZWRcIixcIk1haWwuUmVhZFdyaXRlLlNoYXJlZFwiXSx1c2VyOltcIlVzZXIuUmVhZC5BbGxcIixcIlByZXNlbmNlLlJlYWQuQWxsXCJdfSxyZT1cIk1JQ1JPU09GVF8zNjVfU0VBUkNIX1RZUEVfRklMVEVSXCIsb2U9XCJNSUNST1NPRlRfMzY1X1NFQVJDSF9GSUxFX1RZUEVfRklMVEVSXCIsaWU9XCJNSUNST1NPRlRfMzY1X1NFQVJDSF9ERVBBUlRNRU5UX0ZJTFRFUlwiLGFlPVwiTUlDUk9TT0ZUXzM2NV9TRUFSQ0hfSk9CX1RJVExFX0ZJTFRFUlwiLGxlPVwiVGVhbXMgQ2FsbFwiLHNlPVwiVGVhbXMgQ2hhdFwiLGNlPVwiRW1haWxcIix1ZT0oZSx0KT0+e2NvbnN0IG49W10scj17aXRlbTplLmNvbnRleHQuc2VsZWN0ZWRGaWx0ZXJzPy5maW5kKChlPT5lLmlkPT09cmUpKSxkb2N1bWVudFR5cGU6ZS5jb250ZXh0LnNlbGVjdGVkRmlsdGVycz8uZmluZCgoZT0+ZS5pZD09PW9lKSl9LG89W3t2YWx1ZTpcIkRvY3VtZW50XCIsaXNTZWxlY3RlZDohIXIuaXRlbT8ub3B0aW9ucz8uZmluZCgoKHt2YWx1ZTplfSk9PlwiRmlsZVwiPT09ZSkpPy5pc1NlbGVjdGVkfSx7dmFsdWU6XCJDb250YWN0XCIsaXNTZWxlY3RlZDohIXIuaXRlbT8ub3B0aW9ucz8uZmluZCgoKHt2YWx1ZTplfSk9PlwiQ29udGFjdFwiPT09ZSkpPy5pc1NlbGVjdGVkfSx7dmFsdWU6XCJDaGF0IE1lc3NhZ2VcIixpc1NlbGVjdGVkOiEhci5pdGVtPy5vcHRpb25zPy5maW5kKCgoe3ZhbHVlOmV9KT0+XCJDaGF0IE1lc3NhZ2VcIj09PWUpKT8uaXNTZWxlY3RlZH0se3ZhbHVlOlwiRW1haWxcIixpc1NlbGVjdGVkOiEhci5pdGVtPy5vcHRpb25zPy5maW5kKCgoe3ZhbHVlOmV9KT0+XCJFbWFpbFwiPT09ZSkpPy5pc1NlbGVjdGVkfSx7dmFsdWU6XCJFdmVudFwiLGlzU2VsZWN0ZWQ6ISFyLml0ZW0/Lm9wdGlvbnM/LmZpbmQoKCh7dmFsdWU6ZX0pPT5cIkV2ZW50XCI9PT1lKSk/LmlzU2VsZWN0ZWR9LHt2YWx1ZTpcIkxpc3RcIixpc1NlbGVjdGVkOiEhci5pdGVtPy5vcHRpb25zPy5maW5kKCgoe3ZhbHVlOmV9KT0+XCJMaXN0XCI9PT1lKSk/LmlzU2VsZWN0ZWR9XTtyZXR1cm4gbi5wdXNoKHtpZDpyZSx0aXRsZTpcIlR5cGVcIix0eXBlOiQuZWwuTXVsdGlTZWxlY3Qsb3B0aW9uczpvLmZpbHRlcigoZT0+dC5oYXMoZS52YWx1ZSkpKX0pLFwiRG9jdW1lbnRcIj09PXIuaXRlbT8ub3B0aW9ucz8uZmlsdGVyKChlPT5lLmlzU2VsZWN0ZWQpKT8uWzBdLnZhbHVlJiZuLnB1c2goe2lkOm9lLHRpdGxlOlwiRmlsZSBUeXBlXCIsdHlwZTokLmVsLk11bHRpU2VsZWN0LG9wdGlvbnM6T2JqZWN0LmVudHJpZXModGUpLm1hcCgoKFssZV0pPT4oe3ZhbHVlOmUsaXNTZWxlY3RlZDohIXIuZG9jdW1lbnRUeXBlPy5vcHRpb25zPy5maWx0ZXIoKGU9PmUuaXNTZWxlY3RlZCkpPy5maW5kKCgoe3ZhbHVlOmV9KT0+XCJGaWxlXCI9PT1lKSk/LmlzU2VsZWN0ZWR9KSkpfSksbn0sZmU9KGUsdCk9Pntjb25zdCBuPXQuY29udGV4dC5zZWxlY3RlZEZpbHRlcnM/LmZpbmQoKGU9PmUuaWQ9PT1yZSkpPy5vcHRpb25zO2lmKCFBcnJheS5pc0FycmF5KG4pfHwhbi5maW5kKChlPT5cIkNvbnRhY3RcIj09PWUudmFsdWV8fFwiVXNlclwiPT09ZS52YWx1ZSkpPy5pc1NlbGVjdGVkKXJldHVybltdO2NvbnN0e2RlcGFydG1lbnQ6cixqb2JUaXRsZTpvfT1lLnJlZHVjZSgoKGUsdCk9Pih0LmRlcGFydG1lbnQmJmUuZGVwYXJ0bWVudC5hZGQodC5kZXBhcnRtZW50KSx0LmpvYlRpdGxlJiZlLmpvYlRpdGxlLmFkZCh0LmpvYlRpdGxlKSxlKSkse2RlcGFydG1lbnQ6bmV3IFNldCxqb2JUaXRsZTpuZXcgU2V0fSksaT10LmNvbnRleHQuc2VsZWN0ZWRGaWx0ZXJzPy5maW5kKChlPT5lLmlkPT09aWUpKSxhPUFycmF5LmZyb20ocikubWFwKChlPT4oe3ZhbHVlOmUsaXNTZWxlY3RlZDohIWk/Lm9wdGlvbnM/LmZpbmQoKCh7dmFsdWU6dH0pPT50PT09ZSkpPy5pc1NlbGVjdGVkfSkpKSxsPXQuY29udGV4dC5zZWxlY3RlZEZpbHRlcnM/LmZpbmQoKGU9PmUuaWQ9PT1pZSkpLHM9QXJyYXkuZnJvbShvKS5tYXAoKGU9Pih7dmFsdWU6ZSxpc1NlbGVjdGVkOiEhbD8ub3B0aW9ucz8uZmluZCgoKHt2YWx1ZTp0fSk9PnQ9PT1lKSk/LmlzU2VsZWN0ZWR9KSkpO3JldHVyblt7aWQ6aWUsdGl0bGU6XCJEZXBhcnRtZW50XCIsdHlwZTokLmVsLk11bHRpU2VsZWN0LG9wdGlvbnM6YX0se2lkOmFlLHRpdGxlOlwiSm9iIFRpdGxlXCIsdHlwZTokLmVsLk11bHRpU2VsZWN0LG9wdGlvbnM6c31dfSxkZT1lPT57Y29uc3QgdD1lLmNvbnRleHQuc2VsZWN0ZWRGaWx0ZXJzPy5maW5kKChlPT5lLmlkPT09aWUpKSxuPUFycmF5LmlzQXJyYXkodD8ub3B0aW9ucyk/dC5vcHRpb25zLmZpbHRlcigoZT0+ZS5pc1NlbGVjdGVkKSkubWFwKChlPT5lLnZhbHVlKSk6W10scj1lLmNvbnRleHQuc2VsZWN0ZWRGaWx0ZXJzPy5maW5kKChlPT5lLmlkPT09YWUpKSxvPUFycmF5LmlzQXJyYXkocj8ub3B0aW9ucyk/ci5vcHRpb25zLmZpbHRlcigoZT0+ZS5pc1NlbGVjdGVkKSkubWFwKChlPT5lLnZhbHVlKSk6W107cmV0dXJue2RlcGFydG1lbnQ6bixqb2JUaXRsZTpvfX0scGU9KGUsdCk9Pntjb25zdHtkZXBhcnRtZW50Om4sam9iVGl0bGU6cn09dDtyZXR1cm4gZS5maWx0ZXIoKGU9Pighbi5sZW5ndGh8fG4uaW5jbHVkZXMoZS5kZXBhcnRtZW50KSkmJighci5sZW5ndGh8fHIuaW5jbHVkZXMoZS5qb2JUaXRsZSkpKSl9LGhlPWU9Pntjb25zdCB0PUFycmF5LmlzQXJyYXkoZS5jb250ZXh0LnNlbGVjdGVkRmlsdGVycz8uZmluZCgoZT0+ZS5pZD09PW9lKSk/Lm9wdGlvbnMpP2UuY29udGV4dC5zZWxlY3RlZEZpbHRlcnMuZmluZCgoZT0+ZS5pZD09PW9lKSk/Lm9wdGlvbnM6W107cmV0dXJue2ZpbHRlckZpbGVzOnQmJnQuc29tZSgoKHtpc1NlbGVjdGVkOmV9KT0+ZSkpLHNob3dXb3JkOnQuZmluZCgoKHt2YWx1ZTplfSk9PlwiV29yZFwiPT09ZSkpPy5pc1NlbGVjdGVkLHNob3dFeGNlbDp0LmZpbmQoKCh7dmFsdWU6ZX0pPT5cIkV4Y2VsXCI9PT1lKSk/LmlzU2VsZWN0ZWQsc2hvd1Bvd2VyUG9pbnQ6dC5maW5kKCgoe3ZhbHVlOmV9KT0+XCJQb3dlclBvaW50XCI9PT1lKSk/LmlzU2VsZWN0ZWQsc2hvd1BERjp0LmZpbmQoKCh7dmFsdWU6ZX0pPT5cIlBERlwiPT09ZSkpPy5pc1NlbGVjdGVkLHNob3dPbmVOb3RlOnQuZmluZCgoKHt2YWx1ZTplfSk9PlwiT25lTm90ZVwiPT09ZSkpPy5pc1NlbGVjdGVkfX0sZ2U9KGUsdCk9Pntjb25zdCBuPVtdO3JldHVybiB0LnNob3dXb3JkJiZuLnB1c2goXCIuZG9jeFwiKSx0LnNob3dFeGNlbCYmbi5wdXNoKFwiLnhsc3hcIiksdC5zaG93UG93ZXJQb2ludCYmbi5wdXNoKFwiLnBwdHhcIiksdC5zaG93UERGJiZuLnB1c2goXCIucGRmXCIpLHQuc2hvd09uZU5vdGUmJm4ucHVzaChcIi5vbmVcIiksZS5maWx0ZXIoKGU9PntpZihlLmZpbGUpe2NvbnN0IHQ9ZS5uYW1lLnN1YnN0cmluZyhlLm5hbWUubGFzdEluZGV4T2YoXCIuXCIpKTtyZXR1cm4gbi5pbmNsdWRlcyh0KX1yZXR1cm4hMX0pKX0sdmU9KGU9XCJcIik9Pntzd2l0Y2goZS5zcGxpdChcIi5cIikucG9wKCk/LnRvTG93ZXJDYXNlKCk/P1wiXCIpe2Nhc2VcImRvY3hcIjpjYXNlXCJkb2NcIjpyZXR1cm5cIk1pY3Jvc29mdCBXb3JkXCI7Y2FzZVwieGxzeFwiOmNhc2VcInhsc1wiOnJldHVyblwiTWljcm9zb2Z0IEV4Y2VsXCI7Y2FzZVwicHB0eFwiOmNhc2VcInBwdFwiOnJldHVyblwiTWljcm9zb2Z0IFBvd2VyUG9pbnRcIjtjYXNlXCJwZGZcIjpyZXR1cm5cIlBERlwiO2Nhc2VcInBuZ1wiOmNhc2VcImpwZ1wiOmNhc2VcImpwZWdcIjpjYXNlXCJnaWZcIjpyZXR1cm5cIkltYWdlXCI7Y2FzZVwidHh0XCI6cmV0dXJuXCJUZXh0XCI7ZGVmYXVsdDpyZXR1cm5cIkZpbGVcIn19LG1lPShlPVwiXCIpPT57c3dpdGNoKGUuc3BsaXQoXCIuXCIpLnBvcCgpPy50b0xvd2VyQ2FzZSgpPz9cIlwiKXtjYXNlXCJkb2N4XCI6Y2FzZVwiZG9jXCI6cmV0dXJuKDAsVC5LMykoQS5kZS5NaWNyb3NvZnQzNjVBc3NldHMuTWljcm9zb2Z0MzY1RG9jdW1lbnRJY29uKTtjYXNlXCJ4bHN4XCI6Y2FzZVwieGxzXCI6cmV0dXJuKDAsVC5LMykoQS5kZS5NaWNyb3NvZnQzNjVBc3NldHMuTWljcm9zb2Z0MzY1RXhjZWxJY29uKTtjYXNlXCJwcHR4XCI6Y2FzZVwicHB0XCI6cmV0dXJuKDAsVC5LMykoQS5kZS5NaWNyb3NvZnQzNjVBc3NldHMuTWljcm9zb2Z0MzY1UG93ZXJwb2ludEljb24pO2Nhc2VcInBkZlwiOnJldHVybigwLFQuSzMpKEEuZGUuTWljcm9zb2Z0MzY1QXNzZXRzLlBERkZpbGVJY29uKTtkZWZhdWx0OnJldHVybn19LENlPWU9PmUucmVwbGFjZSgvXFwrL2csXCJfXCIpLnJlcGxhY2UoL1xcLy9nLFwiLVwiKTt2YXIgeWUsd2UsYmUseGUsX2UsT2UsTGUsRWUsU2UsamUsTWUsa2UsUmUsUGUsSWUsQWUsVGUsSGUsQmUsVmUsRGUsWmU9ZnVuY3Rpb24oZSx0LG4scil7aWYoXCJhXCI9PT1uJiYhcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/ZSE9PXR8fCFyOiF0LmhhcyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO3JldHVyblwibVwiPT09bj9yOlwiYVwiPT09bj9yLmNhbGwoZSk6cj9yLnZhbHVlOnQuZ2V0KGUpfSwkZT1mdW5jdGlvbihlLHQsbixyLG8pe2lmKFwibVwiPT09cil0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO2lmKFwiYVwiPT09ciYmIW8pdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P2UhPT10fHwhbzohdC5oYXMoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO3JldHVyblwiYVwiPT09cj9vLmNhbGwoZSxuKTpvP28udmFsdWU9bjp0LnNldChlLG4pLG59O2NsYXNzIE5lIGV4dGVuZHMgVXtjb25zdHJ1Y3RvcihlKXtjb25zdCB0PWooe30se3dvcmtmbG93czp7c2VhcmNoOihRKz0xLHtob21lUHJvdmlkZXI6e2Rlc2NyaXB0aW9uOlwiTWljcm9zb2Z0IDM2NSBzZWFyY2ggcmVzdWx0cyBwcm92aWRlclwiLGlkOmBNUzM2NS0ke2Zpbi5tZS5pZGVudGl0eS51dWlkfS0ke1F9YCxsb2dvVXJsOigwLFQuSzMpKEEuZGUuTWljcm9zb2Z0MzY1QXNzZXRzLk1pY3Jvc29mdDM2NUljb24pLGljb246KDAsVC5LMykoQS5kZS5NaWNyb3NvZnQzNjVBc3NldHMuTWljcm9zb2Z0MzY1SWNvbiksdGl0bGU6XCJNaWNyb3NvZnQgMzY1IFNlYXJjaFwiLGlucHV0UGxhY2Vob2xkZXI6XCJXaGF0IHdvdWxkIHlvdSBsaWtlIHRvIHNlYXJjaCBpbiBNaWNyb3NvZnQgMzY1IHRvZGF5P1wiLGRpc3BhdGNoRm9jdXNFdmVudHM6ITB9LG1pY3Jvc29mdEVudGl0eVR5cGVDb25maWc6e21lc3NhZ2U6ITAsY2hhdE1lc3NhZ2U6ITAsZHJpdmU6ITAsZXZlbnQ6ITAsdXNlcjohMCxjb250YWN0OiEwLGxpc3Q6ITB9LHVzZVRlYW1zRGVlcExpbms6ITB9KX19LGUpO3N1cGVyKHQpLHllLmFkZCh0aGlzKSx3ZS5zZXQodGhpcyx2b2lkIDApLHRoaXMud29ya2Zsb3dJbnRlZ3JhdGlvbk5hbWU9XCJNaWNyb3NvZnQgMzY1XCIsYmUuc2V0KHRoaXMsdm9pZCAwKSx4ZS5zZXQodGhpcyx2b2lkIDApLF9lLnNldCh0aGlzLDEpLE9lLnNldCh0aGlzLG5ldyBTZXQpLExlLnNldCh0aGlzLG5ldyBFKDEwMCkpLEVlLnNldCh0aGlzLG5ldyBWKDZlNCkpLHRoaXMuY29ubmVjdD1hc3luYyhlPXRoaXMuY29uZmlnLmNvbm5lY3QpPT57Y29uc3R7Y2xpZW50SWQ6dCx0ZW5hbnRJZDpuLHJlZGlyZWN0VXJpOnJ9PWUsbz10aGlzLmNvbmZpZy53b3JrZmxvd3M/LnNlYXJjaD9PYmplY3QuZW50cmllcyh0aGlzLmNvbmZpZy53b3JrZmxvd3M/LnNlYXJjaD8ubWljcm9zb2Z0RW50aXR5VHlwZUNvbmZpZz8/e30pLmZpbHRlcigoKFtlLHRdKT0+dCkpLm1hcCgoKFtlXSk9Pm5lW2VdKSkuZmlsdGVyKChlPT52b2lkIDAhPT1lKSkuZmxhdCgpOltdO3RoaXMuY29uZmlnLmNvbm5lY3Q9ZSwkZSh0aGlzLHdlLGF3YWl0IFgodCxuLHIsWy4uLm5ldyBTZXQobyldKSxcImZcIil9LFNlLnNldCh0aGlzLCgoKT0+e2lmKCFaZSh0aGlzLHdlLFwiZlwiKSl0aHJvdyBuZXcgRXJyb3IoXCJNaWNyb3NvZnQzNjVXb3JrZmxvd0ludGVncmF0aW9uIG5vdCBjb25uZWN0ZWRcIik7cmV0dXJuIFplKHRoaXMsd2UsXCJmXCIpfSkpLFBlLnNldCh0aGlzLChhc3luYyBlPT57aWYoJGUodGhpcyx4ZSxlLFwiZlwiKSxlLmRhdGE/Lml0ZW0/LmlkKXtjb25zdCB0PVplKHRoaXMsRWUsXCJmXCIpLmdldChlLmRhdGEuaXRlbS5pZCk7aWYodClyZXR1cm4gdm9pZCBaZSh0aGlzLGJlLFwiZlwiKS5yZXNwb25kKFt0XSl9aWYoXCJ1c2VyXCI9PT1lLmRhdGE/LnR5cGUpWmUodGhpcyxCZSxcImZcIikuY2FsbCh0aGlzLGUpfSkpLEllLnNldCh0aGlzLChhc3luYyBlPT57YXdhaXQgZmluLlBsYXRmb3JtLmdldEN1cnJlbnRTeW5jKCkuY3JlYXRlV2luZG93KHtsYXlvdXQ6e2NvbnRlbnQ6W3t0eXBlOlwic3RhY2tcIixjb250ZW50Olt7dHlwZTpcImNvbXBvbmVudFwiLGNvbXBvbmVudE5hbWU6XCJ2aWV3XCIsY29tcG9uZW50U3RhdGU6e3VybDplfX1dfV19LHdvcmtzcGFjZVBsYXRmb3JtOnZvaWQgMH0pfSkpLEFlLnNldCh0aGlzLChhc3luYyBlPT57aWYoZS5kYXRhLml0ZW0uY2hhbm5lbElkZW50aXR5LnRlYW1JZCl7Y29uc3QgdD1uZXcgVVJMKGBtc3RlYW1zOi9sL2NoYW5uZWwvJHtlLmRhdGEuaXRlbS5jaGFubmVsSWRlbnRpdHkuY2hhbm5lbElkfS8ke2UuZGF0YS5pdGVtLmlkfWApO3JldHVybiExPT09dGhpcy5jb25maWcud29ya2Zsb3dzPy5zZWFyY2g/LnVzZVRlYW1zRGVlcExpbmsmJih0LnByb3RvY29sPVwiaHR0cHM6XCIpLHQuc2VhcmNoUGFyYW1zLmFwcGVuZChcImNvbnRleHRcIixKU09OLnN0cmluZ2lmeSh7Y29udGV4dFR5cGU6XCJjaGFubmVsXCJ9KSksdm9pZCBhd2FpdCBmaW4uU3lzdGVtLm9wZW5VcmxXaXRoQnJvd3Nlcih0LnRvU3RyaW5nKCkpfWNvbnN0IHQ9bmV3IFVSTChgbXN0ZWFtczovbC9tZXNzYWdlLyR7ZS5kYXRhLml0ZW0uY2hhdElkfS8ke2UuZGF0YS5pdGVtLmlkfWApOyExPT09dGhpcy5jb25maWcud29ya2Zsb3dzPy5zZWFyY2g/LnVzZVRlYW1zRGVlcExpbmsmJih0LnByb3RvY29sPVwiaHR0cHM6XCIpLHQuc2VhcmNoUGFyYW1zLmFwcGVuZChcImNvbnRleHRcIixKU09OLnN0cmluZ2lmeSh7Y29udGV4dFR5cGU6XCJjaGF0XCJ9KSksYXdhaXQgZmluLlN5c3RlbS5vcGVuVXJsV2l0aEJyb3dzZXIodC50b1N0cmluZygpKX0pKSxUZS5zZXQodGhpcywoYXN5bmMgZT0+e3N3aXRjaChlLmFjdGlvbi5uYW1lKXtjYXNlIGxlOntjb25zdCB0PW5ldyBLKFplKHRoaXMsU2UsXCJmXCIpLmNhbGwodGhpcyksdGhpcy5jb25maWcud29ya2Zsb3dzPy5zZWFyY2g/LnVzZVRlYW1zRGVlcExpbmspO1plKHRoaXMseWUsXCJtXCIsamUpLmNhbGwodGhpcywoKCk9PnQuc3RhcnRDYWxsKFtlLmRhdGEuaXRlbS5tYWlsXSkpKTticmVha31jYXNlIGNlOntjb25zdCB0PWF3YWl0IHRoaXMuZXhlY3V0ZUFwaVJlcXVlc3QoXCIvdjEuMC9tZS9tZXNzYWdlc1wiLFwiUE9TVFwiLHt0b1JlY2lwaWVudHM6W3tlbWFpbEFkZHJlc3M6e2FkZHJlc3M6ZS5kYXRhLml0ZW0ubWFpbH19XX0pO2xldCBuPXQuZGF0YS53ZWJMaW5rO2NvbnN0IHI9bmV3IFVSTCh0LmRhdGEud2ViTGluayk7aWYoXCIvb3dhL1wiPT09ci5wYXRobmFtZSl7Y29uc3QgZT1yLnNlYXJjaC5zbGljZSgxKS5zcGxpdChcIiZcIikucmVkdWNlKCgoZSx0KT0+e2NvbnN0W24scl09dC5zcGxpdChcIj1cIik7cmV0dXJuIGVbbl09cixlfSkse30pO2lmKGUuSXRlbUlEKXtjb25zdCB0PWUuSXRlbUlEO249YCR7ci5vcmlnaW59L21haWwvZGVlcGxpbmsvY29tcG9zZS8ke3R9P0l0ZW1JRD0ke3R9JmV4dnN1cmw9MWB9fWF3YWl0IGZpbi5QbGF0Zm9ybS5nZXRDdXJyZW50U3luYygpLmNyZWF0ZVZpZXcoe3VybDpufSk7YnJlYWt9Y2FzZSBzZTp7Y29uc3QgdD1aZSh0aGlzLFNlLFwiZlwiKS5jYWxsKHRoaXMpLG49bmV3IEsodCx0aGlzLmNvbmZpZy53b3JrZmxvd3M/LnNlYXJjaD8udXNlVGVhbXNEZWVwTGluayk7WmUodGhpcyx5ZSxcIm1cIixqZSkuY2FsbCh0aGlzLCgoKT0+bi5zdGFydENoYXQoe2VtYWlsQWRkcmVzc2VzOlt0LmN1cnJlbnRVc2VyLm1haWwsZS5kYXRhLml0ZW0ubWFpbF19KSkpO2JyZWFrfWRlZmF1bHQ6Y29uc29sZS53YXJuKFwiVW5oYW5kbGVkIHVzZXIgYWN0aW9uIGZvciByZXN1bHQ6XCIsZSxgVW5rbm93biBhY3Rpb24gXCIke2UuYWN0aW9uLm5hbWV9XCJgKX19KSksSGUuc2V0KHRoaXMsKGFzeW5jIGU9Pntzd2l0Y2goZS5kYXRhLnR5cGUpe2Nhc2VcImRyaXZlSXRlbVwiOlplKHRoaXMsSWUsXCJmXCIpLmNhbGwodGhpcyxlLmRhdGEuaXRlbS53ZWJVcmwpO2JyZWFrO2Nhc2VcImV2ZW50XCI6e2NvbnN0IHQ9ZS5kYXRhLml0ZW0sbj1hd2FpdCB0aGlzLmV4ZWN1dGVBcGlSZXF1ZXN0KGAvdjEuMC9tZS9ldmVudHMvJHt0LmlkfWApO1plKHRoaXMsSWUsXCJmXCIpLmNhbGwodGhpcyxuLmRhdGEud2ViTGluayk7YnJlYWt9Y2FzZVwiY2hhdE1lc3NhZ2VcIjpaZSh0aGlzLEFlLFwiZlwiKS5jYWxsKHRoaXMsZSk7YnJlYWs7Y2FzZVwibWVzc2FnZVwiOlplKHRoaXMsSWUsXCJmXCIpLmNhbGwodGhpcyxlLmRhdGEuaXRlbS53ZWJMaW5rKTticmVhaztjYXNlXCJsaXN0XCI6e2NvbnN0IHQ9ZS5kYXRhLml0ZW0sbj1hd2FpdCB0aGlzLmV4ZWN1dGVBcGlSZXF1ZXN0KGAvdjEuMC9zaXRlcy8ke3QucGFyZW50UmVmZXJlbmNlPy5zaXRlSWR9L2xpc3RzLyR7dC5pZH1gKTtaZSh0aGlzLEllLFwiZlwiKS5jYWxsKHRoaXMsbi5kYXRhLndlYlVybCk7YnJlYWt9Y2FzZVwidXNlclwiOlplKHRoaXMsVGUsXCJmXCIpLmNhbGwodGhpcyxlKTticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybihcIlVuaGFuZGxlZCB1c2VyIGFjdGlvbiBmb3IgcmVzdWx0OlwiLGUsYFVua25vd24gcmVzdWx0IHR5cGUgXCIke2UuZGF0YS50eXBlfVwiYCl9fSkpLEJlLnNldCh0aGlzLChhc3luYyBlPT57bGV0IHQsbjtjb25zdCByPVtdLG89ZS5kYXRhLml0ZW07WmUodGhpcyxMZSxcImZcIikuaGFzKG8uaWQpP3Q9WmUodGhpcyxMZSxcImZcIikuZ2V0KG8uaWQpOnIucHVzaCh7aWQ6XCJjb250YWN0UGhvdG9cIixtZXRob2Q6XCJHRVRcIix1cmw6YC91c2Vycy8ke2UuZGF0YS5pdGVtLmlkfS9waG90by8kdmFsdWVgLGhlYWRlcnM6e0NvbnNpc3RlbmN5TGV2ZWw6XCJldmVudHVhbFwifX0pLHIucHVzaCh7aWQ6XCJwcmVzZW5jZVwiLG1ldGhvZDpcIkdFVFwiLHVybDpgL3VzZXJzLyR7ZS5kYXRhLml0ZW0uaWR9L3ByZXNlbmNlYH0pO3RyeXtjb25zdCBlPWF3YWl0IFplKHRoaXMseWUsXCJtXCIsTWUpLmNhbGwodGhpcyxyKSxhPWUuZGF0YT8ucmVzcG9uc2VzLmZpbmQoKGU9PlwiY29udGFjdFBob3RvXCI9PT1lLmlkKSk7YSYmMjAwIT09YS5zdGF0dXMmJmNvbnNvbGUud2FybihcIkVycm9yIGZldGNoaW5nIHVzZXIgcGhvdG9cIixhKSxhPy5ib2R5JiYyMDA9PT1hPy5zdGF0dXMmJih0PWBkYXRhOmltYWdlL2pwZWc7YmFzZTY0LCR7YS5ib2R5fWAsWmUodGhpcyxMZSxcImZcIikucHV0KG8uaWQsdCkpO2NvbnN0IGw9ZS5kYXRhPy5yZXNwb25zZXMuZmluZCgoZT0+XCJwcmVzZW5jZVwiPT09ZS5pZCkpOzIwMCE9PWwuc3RhdHVzJiZjb25zb2xlLndhcm4oXCJFcnJvciBmZXRjaGluZyB1c2VyIHByZXNlbmNlXCIsbCksbD8uYm9keSYmMjAwPT09bC5zdGF0dXMmJihpPWwuYm9keSxuPXthdmFpbGFibGU6XCJhdmFpbGFibGVcIixhdmFpbGFibGVpZGxlOlwiYXZhaWxhYmxlXCIsYXdheTpcImF3YXlcIixiZXJpZ2h0YmFjazpcImF3YXlcIixidXN5OlwiYnVzeVwiLGJ1c3lpZGxlOlwiYnVzeVwiLGRvbm90ZGlzdHVyYjpcImRvLW5vdC1kaXN0dXJiXCIsb2ZmbGluZTpcIm9mZmxpbmVcIixwcmVzZW5jZXVua25vd246XCJvZmZsaW5lXCJ9W2kuYXZhaWxhYmlsaXR5Py50b0xvd2VyQ2FzZSgpXSl9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIHVzZXIgZGF0YVwiLGUpfXZhciBpO2NvbnN0IGE9W1tcIkRlcGFydG1lbnRcIixvLmRlcGFydG1lbnR8fFwiTi9BXCJdLFtcIkVtYWlsXCIsby5tYWlsfHxcIk4vQVwiXSxbXCJXb3JrIFBob25lXCIsby5idXNpbmVzc1Bob25lcz8uWzBdfHxcIk4vQVwiXSxbXCJNb2JpbGVcIixvLm1vYmlsZVBob25lfHxcIk4vQVwiXSxbXCJMb2NhdGlvblwiLG8ub2ZmaWNlTG9jYXRpb258fFwiTi9BXCJdXSxsPXsuLi5lLHRlbXBsYXRlOiQueVcuQ29udGFjdCx0ZW1wbGF0ZUNvbnRlbnQ6e25hbWU6ZS5kYXRhLml0ZW0uZGlzcGxheU5hbWUsdGl0bGU6ZS5kYXRhLml0ZW0uam9iVGl0bGUsZGV0YWlsczpbYV0scGhvdG9Vcmw6dCxvbmxpbmVTdGF0dXM6bixidXR0b25zOlt7dHlwZTpcImJ1dHRvblwiLGljb246e2xpZ2h0OigwLFQuSzMpKEEuZGUuQ2FsbEljb25MaWdodCksZGFyazooMCxULkszKShBLmRlLkNhbGxJY29uRGFyayl9LHRvb2x0aXA6XCJUZWFtcyBDYWxsXCIsYWN0aW9uOmxlfSx7dHlwZTpcImJ1dHRvblwiLGljb246e2xpZ2h0OigwLFQuSzMpKEEuZGUuQ2hhdEljb25MaWdodCksZGFyazooMCxULkszKShBLmRlLkNoYXRJY29uRGFyayl9LHRvb2x0aXA6XCJDaGF0XCIsYWN0aW9uOnNlfSx7dHlwZTpcImJ1dHRvblwiLGljb246e2xpZ2h0OigwLFQuSzMpKEEuZGUuTWVzc2FnZUljb25MaWdodCksZGFyazooMCxULkszKShBLmRlLk1lc3NhZ2VJY29uRGFyayl9LHRvb2x0aXA6XCJFLW1haWxcIixhY3Rpb246Y2V9XX19O1plKHRoaXMsRWUsXCJmXCIpLnB1dChlLmRhdGEuaXRlbS5pZCxsKSxaZSh0aGlzLGJlLFwiZlwiKS5yZXNwb25kKFtsXSl9KSksVmUuc2V0KHRoaXMsKGFzeW5jKGUsdCk9PntpZihaZSh0aGlzLGJlLFwiZlwiKSYmWmUodGhpcyxiZSxcImZcIikuY2xvc2UoKSwkZSh0aGlzLGJlLHQsXCJmXCIpLFplKHRoaXMsYmUsXCJmXCIpLm9wZW4oKSxlLnF1ZXJ5Lmxlbmd0aDxaZSh0aGlzLF9lLFwiZlwiKSlyZXR1cm57cmVzdWx0czpbXX07Y29uc3Qgbj1lbmNvZGVVUklDb21wb25lbnQoZS5xdWVyeSkscj1bXSxvPSgoZSx0KT0+e2NvbnN0IG49QXJyYXkuaXNBcnJheShlLmNvbnRleHQuc2VsZWN0ZWRGaWx0ZXJzPy5maW5kKChlPT5lLmlkPT09cmUpKT8ub3B0aW9ucyk/ZS5jb250ZXh0LnNlbGVjdGVkRmlsdGVycy5maW5kKChlPT5lLmlkPT09cmUpKT8ub3B0aW9uczpbXSxyPW4uZXZlcnkoKCh7aXNTZWxlY3RlZDplfSk9PiFlKSk7cmV0dXJue3Nob3dEb2N1bWVudHM6dC5oYXMoXCJEb2N1bWVudFwiKSYmKHJ8fCEhbi5maW5kKCgoe3ZhbHVlOmV9KT0+XCJEb2N1bWVudFwiPT09ZSkpPy5pc1NlbGVjdGVkKSxzaG93Q29udGFjdHM6dC5oYXMoXCJDb250YWN0XCIpJiYocnx8ISFuLmZpbmQoKCh7dmFsdWU6ZX0pPT5cIkNvbnRhY3RcIj09PWUpKT8uaXNTZWxlY3RlZCksc2hvd0NoYXRNZXNzYWdlczp0LmhhcyhcIkNoYXQgTWVzc2FnZVwiKSYmKHJ8fCEhbi5maW5kKCgoe3ZhbHVlOmV9KT0+XCJDaGF0IE1lc3NhZ2VcIj09PWUpKT8uaXNTZWxlY3RlZCksc2hvd01lc3NhZ2VzOnQuaGFzKFwiRW1haWxcIikmJihyfHwhIW4uZmluZCgoKHt2YWx1ZTplfSk9PlwiRW1haWxcIj09PWUpKT8uaXNTZWxlY3RlZCksc2hvd0V2ZW50czp0LmhhcyhcIkV2ZW50XCIpJiYocnx8ISFuLmZpbmQoKCh7dmFsdWU6ZX0pPT5cIkV2ZW50XCI9PT1lKSk/LmlzU2VsZWN0ZWQpLHNob3dMaXN0czp0LmhhcyhcIkxpc3RcIikmJihyfHwhIW4uZmluZCgoKHt2YWx1ZTplfSk9PlwiTGlzdFwiPT09ZSkpPy5pc1NlbGVjdGVkKX19KShlLFplKHRoaXMsT2UsXCJmXCIpKTtpZihvLnNob3dEb2N1bWVudHMpe2NvbnN0IGU9YCcke259J2A7ci5wdXNoKHtpZDpcImRyaXZlSXRlbVwiLG1ldGhvZDpcIkdFVFwiLHVybDpgL21lL2RyaXZlL3Jvb3Qvc2VhcmNoKHE9JHtlbmNvZGVVUklDb21wb25lbnQoZSl9KWAsaGVhZGVyczp7Q29uc2lzdGVuY3lMZXZlbDpcImV2ZW50dWFsXCJ9fSl9aWYoby5zaG93RXZlbnRzJiZyLnB1c2goe2lkOlwiZXZlbnRcIix1cmw6XCIvc2VhcmNoL3F1ZXJ5XCIsbWV0aG9kOlwiUE9TVFwiLGJvZHk6e3JlcXVlc3RzOlt7ZW50aXR5VHlwZXM6W1wiZXZlbnRcIl0scXVlcnk6e3F1ZXJ5U3RyaW5nOmUucXVlcnl9LGZyb206MCxzaXplOjEwfV19LGhlYWRlcnM6e1wiQ29udGVudC1UeXBlXCI6XCJhcHBsaWNhdGlvbi9qc29uXCJ9fSksby5zaG93Q29udGFjdHMpe2NvbnN0IHQ9YFwiJHtlLnF1ZXJ5fVwiYDtyLnB1c2goe2lkOlwiY29udGFjdFwiLG1ldGhvZDpcIkdFVFwiLHVybDpgL21lL2NvbnRhY3RzPyRzZWFyY2g9JHtlbmNvZGVVUklDb21wb25lbnQodCl9JiR0b3A9MTBgfSk7Y29uc3Qgbj1bXCJkaXNwbGF5TmFtZVwiLFwiZ2l2ZW5OYW1lXCIsXCJzdXJuYW1lXCJdLm1hcCgodD0+YFwiJHt0fToke2UucXVlcnl9XCJgKSkuam9pbihcIiBPUiBcIik7ci5wdXNoKHtpZDpcInVzZXJcIixtZXRob2Q6XCJHRVRcIix1cmw6YC91c2Vycz8kc2VhcmNoPSR7ZW5jb2RlVVJJQ29tcG9uZW50KG4pfSYkdG9wPTEwJiRzZWxlY3Q9aWQsZGlzcGxheU5hbWUsZGVwYXJ0bWVudCxtYWlsLGJ1c2luZXNzUGhvbmVzLG1vYmlsZVBob25lLG9mZmljZUxvY2F0aW9uLGpvYlRpdGxlYCxoZWFkZXJzOntDb25zaXN0ZW5jeUxldmVsOlwiZXZlbnR1YWxcIn19KX1pZihvLnNob3dNZXNzYWdlcyYmci5wdXNoKHtpZDpcIm1lc3NhZ2VcIixtZXRob2Q6XCJHRVRcIix1cmw6YC9tZS9tZXNzYWdlcz8kc2VsZWN0PXNlbmRlcixzdWJqZWN0LGJvZHlQcmV2aWV3LHJlY2VpdmVkRGF0ZVRpbWUsd2ViTGluayYkc2VhcmNoPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGBcIiR7ZS5xdWVyeX1cImApfSYkdG9wPTEwYH0pLG8uc2hvd0NoYXRNZXNzYWdlcyYmci5wdXNoKHtpZDpcImNoYXRNZXNzYWdlXCIsdXJsOlwiL3NlYXJjaC9xdWVyeVwiLG1ldGhvZDpcIlBPU1RcIixib2R5OntyZXF1ZXN0czpbe2VudGl0eVR5cGVzOltcImNoYXRNZXNzYWdlXCJdLHF1ZXJ5OntxdWVyeVN0cmluZzplLnF1ZXJ5fSxmcm9tOjAsc2l6ZToxMH1dfSxoZWFkZXJzOntcIkNvbnRlbnQtVHlwZVwiOlwiYXBwbGljYXRpb24vanNvblwifX0pLG8uc2hvd0xpc3RzJiZyLnB1c2goe2lkOlwibGlzdFwiLHVybDpcIi9zZWFyY2gvcXVlcnlcIixtZXRob2Q6XCJQT1NUXCIsYm9keTp7cmVxdWVzdHM6W3tlbnRpdHlUeXBlczpbXCJsaXN0XCJdLHF1ZXJ5OntxdWVyeVN0cmluZzplLnF1ZXJ5fSxmcm9tOjAsc2l6ZToxMH1dfSxoZWFkZXJzOntcIkNvbnRlbnQtVHlwZVwiOlwiYXBwbGljYXRpb24vanNvblwifX0pLDA9PT1yLmxlbmd0aClyZXR1cm57cmVzdWx0czpbXX07Y29uc3R7cmVzdWx0czppLGZpbHRlcnM6YX09YXdhaXQgWmUodGhpcyx5ZSxcIm1cIixrZSkuY2FsbCh0aGlzLHIsZSk7cmV0dXJuIGkuZmluZCgoZT0+ZS5rZXk9PT1aZSh0aGlzLHhlLFwiZlwiKT8ua2V5KSk/LnRlbXBsYXRlPT09JC55Vy5Mb2FkaW5nJiZaZSh0aGlzLFBlLFwiZlwiKS5jYWxsKHRoaXMsWmUodGhpcyx4ZSxcImZcIikpLHtyZXN1bHRzOmksY29udGV4dDp7ZmlsdGVyczphfX19KSksRGUuc2V0KHRoaXMsKGFzeW5jIGU9Pntzd2l0Y2goZS5hY3Rpb24udHJpZ2dlcil7Y2FzZSBHZS5wLkZvY3VzQ2hhbmdlOlplKHRoaXMsUGUsXCJmXCIpLmNhbGwodGhpcyxlKTticmVhaztjYXNlIEdlLnAuVXNlckFjdGlvbjpaZSh0aGlzLEhlLFwiZlwiKS5jYWxsKHRoaXMsZSk7YnJlYWs7Y2FzZSBHZS5wLlJlbG9hZDpicmVhaztkZWZhdWx0OmNvbnNvbGUud2FybihgVW5rbm93biBhY3Rpb24gdHJpZ2dlcjogJHtlLmFjdGlvbi50cmlnZ2VyfWApfX0pKSx0aGlzLmluaXRpYWxpemVXb3JrZmxvdz1hc3luYyBlPT57aWYoXCJzZWFyY2hcIiE9PWUpdGhyb3cgbmV3IEVycm9yKGBBdHRlbXB0ZWQgdG8gaW5pdGlhbGl6ZSB1bmtub3duIHdvcmtmbG93OiAke2V9YCk7YXdhaXQgXy5yZWdpc3Rlcih7Li4udGhpcy5jb25maWcud29ya2Zsb3dzLnNlYXJjaC5ob21lUHJvdmlkZXIsb25Vc2VySW5wdXQ6WmUodGhpcyxWZSxcImZcIiksb25SZXN1bHREaXNwYXRjaDpaZSh0aGlzLERlLFwiZlwiKX0pLEooKSxhd2FpdCB0aGlzLmNvbm5lY3QoKSxzdXBlci5pbml0aWFsaXplV29ya2Zsb3coZSl9LE9iamVjdC5lbnRyaWVzKHQud29ya2Zsb3dzPy5zZWFyY2g/Lm1pY3Jvc29mdEVudGl0eVR5cGVDb25maWd8fHt9KS5maWx0ZXIoKChbZSx0XSk9PnQpKS5mb3JFYWNoKCgoW2VdKT0+e1plKHRoaXMsT2UsXCJmXCIpLmFkZChlZVtlXSl9KSl9YXN5bmMgZXhlY3V0ZUFwaVJlcXVlc3QoLi4uZSl7cmV0dXJuIFplKHRoaXMseWUsXCJtXCIsamUpLmNhbGwodGhpcywoKCk9PlplKHRoaXMsU2UsXCJmXCIpLmNhbGwodGhpcykuZXhlY3V0ZUFwaVJlcXVlc3QoLi4uZSkpKX19d2U9bmV3IFdlYWtNYXAsYmU9bmV3IFdlYWtNYXAseGU9bmV3IFdlYWtNYXAsX2U9bmV3IFdlYWtNYXAsT2U9bmV3IFdlYWtNYXAsTGU9bmV3IFdlYWtNYXAsRWU9bmV3IFdlYWtNYXAsU2U9bmV3IFdlYWtNYXAsUGU9bmV3IFdlYWtNYXAsSWU9bmV3IFdlYWtNYXAsQWU9bmV3IFdlYWtNYXAsVGU9bmV3IFdlYWtNYXAsSGU9bmV3IFdlYWtNYXAsQmU9bmV3IFdlYWtNYXAsVmU9bmV3IFdlYWtNYXAsRGU9bmV3IFdlYWtNYXAseWU9bmV3IFdlYWtTZXQsamU9YXN5bmMgZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBhd2FpdCBlKCl9Y2F0Y2godCl7aWYodCBpbnN0YW5jZW9mIFkpcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdCgpLGUoKTt0aHJvdyB0fX0sTWU9YXN5bmMgZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZXhlY3V0ZUFwaVJlcXVlc3QoXCIvdjEuMC8kYmF0Y2hcIixcIlBPU1RcIix7cmVxdWVzdHM6ZX0pfSxrZT1hc3luYyBmdW5jdGlvbihlLHQpe3RyeXtjb25zdCBuPWF3YWl0IFplKHRoaXMseWUsXCJtXCIsTWUpLmNhbGwodGhpcyxlKSxyPVsuLi51ZSh0LFplKHRoaXMsT2UsXCJmXCIpKSwuLi5mZShuLmRhdGEucmVzcG9uc2VzLmZpbmQoKGU9PlwidXNlclwiPT09ZS5pZCkpPy5ib2R5Py52YWx1ZXx8W10sdCldO3JldHVybntmaWx0ZXJzOnIscmVzdWx0czpaZSh0aGlzLHllLFwibVwiLFJlKS5jYWxsKHRoaXMsbix0KX19Y2F0Y2goZSl7cmV0dXJuIGNvbnNvbGUud2FybihcIkZhaWxlZCB0byBleGVjdXRlIEJhdGNoIEFQSSByZXF1ZXN0OiBcIixlKSx7ZmlsdGVyczpbXSxyZXN1bHRzOlt7a2V5OigwLFouSCkoKSx0aXRsZTpcIkVycm9yIEZldGNoaW5nIFNlYXJjaCBSZXN1bHRzXCIsZGVzY3JpcHRpb246XCJcIixhY3Rpb25zOltdLHRlbXBsYXRlOiQueVcuRXJyb3IsdGVtcGxhdGVDb250ZW50OmBGYWlsZWQgdG8gZXhlY3V0ZSBCYXRjaCBBUEkgcmVxdWVzdDogJHtKU09OLnN0cmluZ2lmeShlKX1gfV19fX0sUmU9ZnVuY3Rpb24oZSx0KXtsZXQgbj1bXTtmb3IoY29uc3QgciBvZiBlLmRhdGEucmVzcG9uc2VzKWlmKDIwMD09PXIuc3RhdHVzKXN3aXRjaChyLmlkKXtjYXNlXCJkcml2ZUl0ZW1cIjp7Y29uc3QgZT1oZSh0KSxvPWUuZmlsdGVyRmlsZXM/Z2Uoci5ib2R5LnZhbHVlLGUpOnIuYm9keS52YWx1ZTtuLnB1c2goLi4uKG98fFtdKS5tYXAoKGU9Pih7a2V5OmUuaWQ/PygwLFouSCkoKSx0aXRsZTplLm5hbWU/P1wiXCIsZGVzY3JpcHRpb246ZS5maWxlPy5taW1lVHlwZT8/XCJcIixsYWJlbDp2ZShlLm5hbWUpLGljb246bWUoZS5uYW1lKSxkYXRhOnt0eXBlOlwiZHJpdmVJdGVtXCIsaXRlbTplfSxhY3Rpb25zOlt7bmFtZTpcIkxhdW5jaFwifV0sdGVtcGxhdGU6JC55Vy5QbGFpbix0ZW1wbGF0ZUNvbnRlbnQ6dm9pZCAwfSkpKSk7YnJlYWt9Y2FzZVwiZXZlbnRcIjpuLnB1c2goLi4uci5ib2R5Py52YWx1ZT8uWzBdPy5oaXRzQ29udGFpbmVycz8uWzBdPy5oaXRzPy5maWx0ZXIoKGU9PmUucmVzb3VyY2Uuc3ViamVjdCkpLm1hcCgoZT0+e2NvbnN0IHQ9ZS5yZXNvdXJjZSxuPUNlKGUuaGl0SWQpO3JldHVybntrZXk6bix0aXRsZTp0LnN1YmplY3Q/P1wiXCIsbGFiZWw6XCJDYWxlbmRhciBFdmVudFwiLGljb246KDAsVC5LMykoQS5kZS5NaWNyb3NvZnQzNjVBc3NldHMuTWljcm9zb2Z0MzY1T3V0bG9va0ljb24pLGFjdGlvbnM6W3tuYW1lOlwiTGF1bmNoXCJ9XSxkYXRhOnt0eXBlOlwiZXZlbnRcIixpdGVtOnsuLi50LGlkOm59fSx0ZW1wbGF0ZTokLnlXLlBsYWluLHRlbXBsYXRlQ29udGVudDp2b2lkIDB9fSkpfHxbXSk7YnJlYWs7Y2FzZVwiY29udGFjdFwiOntjb25zdCBlPWRlKHQpLG89cGUoci5ib2R5LnZhbHVlfHxbXSxlKTtuLnB1c2goLi4uKG98fFtdKS5tYXAoKGU9Pih7a2V5OmUuaWQ/PygwLFouSCkoKSx0aXRsZTplLmRpc3BsYXlOYW1lPz9cIlwiLGxhYmVsOlwiT3V0bG9vayBjb250YWN0XCIsaWNvbjooMCxULkszKShBLmRlLk1pY3Jvc29mdDM2NUFzc2V0cy5NaWNyb3NvZnQzNjVPdXRsb29rSWNvbiksYWN0aW9uczpbXSxkYXRhOnt0eXBlOlwiY29udGFjdFwiLGl0ZW06ZX0sdGVtcGxhdGU6JC55Vy5QbGFpbix0ZW1wbGF0ZUNvbnRlbnQ6dm9pZCAwfSkpKSk7YnJlYWt9Y2FzZVwidXNlclwiOntjb25zdCBlPWRlKHQpLG89cGUoci5ib2R5LnZhbHVlfHxbXSxlKTtuLnB1c2goLi4uKG98fFtdKS5tYXAoKGU9Pih7a2V5OmUuaWQ/PygwLFouSCkoKSx0aXRsZTplLmRpc3BsYXlOYW1lPz9cIlwiLGxhYmVsOlwiVGVhbXMgY29udGFjdFwiLGljb246KDAsVC5LMykoQS5kZS5NaWNyb3NvZnQzNjVBc3NldHMuTWljcm9zb2Z0MzY1VGVhbXNJY29uKSxhY3Rpb25zOltdLGRhdGE6e3R5cGU6XCJ1c2VyXCIsaXRlbTplfSx0ZW1wbGF0ZTokLnlXLkxvYWRpbmcsdGVtcGxhdGVDb250ZW50OnZvaWQgMH0pKSkpO2JyZWFrfWNhc2VcIm1lc3NhZ2VcIjpuLnB1c2goLi4uKHIuYm9keS52YWx1ZXx8W10pLm1hcCgoZT0+KHtrZXk6ZS5pZD8/KDAsWi5IKSgpLHRpdGxlOmAke2Uuc3ViamVjdD8/XCJVbnRpdGxlZCBNZXNzYWdlXCJ9JHtlLmlzRHJhZnQ/XCIgKERyYWZ0KVwiOlwiXCJ9YCxsYWJlbDpcIkVtYWlsXCIsaWNvbjooMCxULkszKShBLmRlLk1pY3Jvc29mdDM2NUFzc2V0cy5NaWNyb3NvZnQzNjVPdXRsb29rSWNvbiksYWN0aW9uczpbXSxkYXRhOnt0eXBlOlwibWVzc2FnZVwiLGl0ZW06ZX0sdGVtcGxhdGU6JC55Vy5QbGFpbix0ZW1wbGF0ZUNvbnRlbnQ6dm9pZCAwfSkpKSk7YnJlYWs7Y2FzZVwiY2hhdE1lc3NhZ2VcIjpuLnB1c2goLi4uci5ib2R5Py52YWx1ZT8uWzBdPy5oaXRzQ29udGFpbmVycz8uWzBdPy5oaXRzPy5tYXAoKGU9Pntjb25zdCB0PWUucmVzb3VyY2U7cmV0dXJue2tleTp0LmlkPz8oMCxaLkgpKCksdGl0bGU6ZS5zdW1tYXJ5Pz9cIlVudGl0bGVkIE1lc3NhZ2VcIixsYWJlbDpcIkNoYXRcIixpY29uOigwLFQuSzMpKEEuZGUuTWljcm9zb2Z0MzY1QXNzZXRzLk1pY3Jvc29mdDM2NVRlYW1zSWNvbiksYWN0aW9uczpbXSxkYXRhOnt0eXBlOlwiY2hhdE1lc3NhZ2VcIixpdGVtOnR9LHRlbXBsYXRlOiQueVcuUGxhaW4sdGVtcGxhdGVDb250ZW50OnZvaWQgMH19KSl8fFtdKTticmVhaztjYXNlXCJsaXN0XCI6bi5wdXNoKC4uLnIuYm9keT8udmFsdWU/LlswXT8uaGl0c0NvbnRhaW5lcnM/LlswXT8uaGl0cz8ubWFwKChlPT57Y29uc3QgdD1lLnJlc291cmNlLG49Q2UoZS5oaXRJZCk7cmV0dXJue2tleTpuLHRpdGxlOnQuZGlzcGxheU5hbWU/P1wiVW50aXRsZWQgTGlzdFwiLGxhYmVsOlwiTGlzdFwiLGFjdGlvbnM6W3tuYW1lOlwiTGF1bmNoXCJ9XSxkYXRhOnt0eXBlOlwibGlzdFwiLGl0ZW06ey4uLnQsaWQ6bn19LHRlbXBsYXRlOiQueVcuUGxhaW4sdGVtcGxhdGVDb250ZW50OnZvaWQgMH19KSl8fFtdKTticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybihgVW5rbm93biBiYXRjaCByZXNwb25zZSBpZDogJHtyLmlkfWAsci5ib2R5KX1lbHNlIGNvbnNvbGUud2FybihcIkJhdGNoIEFQSSByZXF1ZXN0IGZhaWxlZDogXCIscik7cmV0dXJuIG49bi5tYXAoKGU9PntpZighZS5kYXRhPy5pdGVtPy5pZClyZXR1cm4gZTtjb25zdCB0PVplKHRoaXMsRWUsXCJmXCIpLmdldChlLmRhdGEuaXRlbS5pZCk7cmV0dXJuIHQ/ey4uLmUsdGVtcGxhdGU6dC50ZW1wbGF0ZSx0ZW1wbGF0ZUNvbnRlbnQ6dC50ZW1wbGF0ZUNvbnRlbnR9OmV9KSksbi5zb3J0KCgoZSx0KT0+ZS50aXRsZT50LnRpdGxlPzE6LTEpKX07dmFyIEZlPW4oMzQyMCk7Y29uc3QgVWU9KCk9PkZlLmhkKCksV2U9KCk9Pihhc3luYygpPT4oYXdhaXQoMCxjLkRtKSgpKS5kaXNwYXRjaChcImdldC1sZWdhY3ktd29ya3NwYWNlc1wiLHZvaWQgMCkpKCk7dmFyIHplPW4oMjUyOCksR2U9bigxMjIyKSxxZT1uKDIxMDkpLFllPW4oNjExNCl9KSgpLG1vZHVsZS5leHBvcnRzPXJ9KSgpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydHMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcbmV4cG9ydHMudG9CeXRlQXJyYXkgPSB0b0J5dGVBcnJheVxuZXhwb3J0cy5mcm9tQnl0ZUFycmF5ID0gZnJvbUJ5dGVBcnJheVxuXG52YXIgbG9va3VwID0gW11cbnZhciByZXZMb29rdXAgPSBbXVxudmFyIEFyciA9IHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyA/IFVpbnQ4QXJyYXkgOiBBcnJheVxuXG52YXIgY29kZSA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJ1xuZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNvZGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgbG9va3VwW2ldID0gY29kZVtpXVxuICByZXZMb29rdXBbY29kZS5jaGFyQ29kZUF0KGkpXSA9IGlcbn1cblxuLy8gU3VwcG9ydCBkZWNvZGluZyBVUkwtc2FmZSBiYXNlNjQgc3RyaW5ncywgYXMgTm9kZS5qcyBkb2VzLlxuLy8gU2VlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CYXNlNjQjVVJMX2FwcGxpY2F0aW9uc1xucmV2TG9va3VwWyctJy5jaGFyQ29kZUF0KDApXSA9IDYyXG5yZXZMb29rdXBbJ18nLmNoYXJDb2RlQXQoMCldID0gNjNcblxuZnVuY3Rpb24gZ2V0TGVucyAoYjY0KSB7XG4gIHZhciBsZW4gPSBiNjQubGVuZ3RoXG5cbiAgaWYgKGxlbiAlIDQgPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0JylcbiAgfVxuXG4gIC8vIFRyaW0gb2ZmIGV4dHJhIGJ5dGVzIGFmdGVyIHBsYWNlaG9sZGVyIGJ5dGVzIGFyZSBmb3VuZFxuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9iZWF0Z2FtbWl0L2Jhc2U2NC1qcy9pc3N1ZXMvNDJcbiAgdmFyIHZhbGlkTGVuID0gYjY0LmluZGV4T2YoJz0nKVxuICBpZiAodmFsaWRMZW4gPT09IC0xKSB2YWxpZExlbiA9IGxlblxuXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSB2YWxpZExlbiA9PT0gbGVuXG4gICAgPyAwXG4gICAgOiA0IC0gKHZhbGlkTGVuICUgNClcblxuICByZXR1cm4gW3ZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW5dXG59XG5cbi8vIGJhc2U2NCBpcyA0LzMgKyB1cCB0byB0d28gY2hhcmFjdGVycyBvZiB0aGUgb3JpZ2luYWwgZGF0YVxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoYjY0KSB7XG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cbiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuXG59XG5cbmZ1bmN0aW9uIF9ieXRlTGVuZ3RoIChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pIHtcbiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuXG59XG5cbmZ1bmN0aW9uIHRvQnl0ZUFycmF5IChiNjQpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG5cbiAgdmFyIGFyciA9IG5ldyBBcnIoX2J5dGVMZW5ndGgoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSlcblxuICB2YXIgY3VyQnl0ZSA9IDBcblxuICAvLyBpZiB0aGVyZSBhcmUgcGxhY2Vob2xkZXJzLCBvbmx5IGdldCB1cCB0byB0aGUgbGFzdCBjb21wbGV0ZSA0IGNoYXJzXG4gIHZhciBsZW4gPSBwbGFjZUhvbGRlcnNMZW4gPiAwXG4gICAgPyB2YWxpZExlbiAtIDRcbiAgICA6IHZhbGlkTGVuXG5cbiAgdmFyIGlcbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDE4KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgMTIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA8PCA2KSB8XG4gICAgICByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDMpXVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiAxNikgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMikge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPj4gNClcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDEpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTApIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCA0KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPj4gMilcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICByZXR1cm4gYXJyXG59XG5cbmZ1bmN0aW9uIHRyaXBsZXRUb0Jhc2U2NCAobnVtKSB7XG4gIHJldHVybiBsb29rdXBbbnVtID4+IDE4ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gMTIgJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiA2ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gJiAweDNGXVxufVxuXG5mdW5jdGlvbiBlbmNvZGVDaHVuayAodWludDgsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHRtcFxuICB2YXIgb3V0cHV0ID0gW11cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IDMpIHtcbiAgICB0bXAgPVxuICAgICAgKCh1aW50OFtpXSA8PCAxNikgJiAweEZGMDAwMCkgK1xuICAgICAgKCh1aW50OFtpICsgMV0gPDwgOCkgJiAweEZGMDApICtcbiAgICAgICh1aW50OFtpICsgMl0gJiAweEZGKVxuICAgIG91dHB1dC5wdXNoKHRyaXBsZXRUb0Jhc2U2NCh0bXApKVxuICB9XG4gIHJldHVybiBvdXRwdXQuam9pbignJylcbn1cblxuZnVuY3Rpb24gZnJvbUJ5dGVBcnJheSAodWludDgpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVuID0gdWludDgubGVuZ3RoXG4gIHZhciBleHRyYUJ5dGVzID0gbGVuICUgMyAvLyBpZiB3ZSBoYXZlIDEgYnl0ZSBsZWZ0LCBwYWQgMiBieXRlc1xuICB2YXIgcGFydHMgPSBbXVxuICB2YXIgbWF4Q2h1bmtMZW5ndGggPSAxNjM4MyAvLyBtdXN0IGJlIG11bHRpcGxlIG9mIDNcblxuICAvLyBnbyB0aHJvdWdoIHRoZSBhcnJheSBldmVyeSB0aHJlZSBieXRlcywgd2UnbGwgZGVhbCB3aXRoIHRyYWlsaW5nIHN0dWZmIGxhdGVyXG4gIGZvciAodmFyIGkgPSAwLCBsZW4yID0gbGVuIC0gZXh0cmFCeXRlczsgaSA8IGxlbjI7IGkgKz0gbWF4Q2h1bmtMZW5ndGgpIHtcbiAgICBwYXJ0cy5wdXNoKGVuY29kZUNodW5rKHVpbnQ4LCBpLCAoaSArIG1heENodW5rTGVuZ3RoKSA+IGxlbjIgPyBsZW4yIDogKGkgKyBtYXhDaHVua0xlbmd0aCkpKVxuICB9XG5cbiAgLy8gcGFkIHRoZSBlbmQgd2l0aCB6ZXJvcywgYnV0IG1ha2Ugc3VyZSB0byBub3QgZm9yZ2V0IHRoZSBleHRyYSBieXRlc1xuICBpZiAoZXh0cmFCeXRlcyA9PT0gMSkge1xuICAgIHRtcCA9IHVpbnQ4W2xlbiAtIDFdXG4gICAgcGFydHMucHVzaChcbiAgICAgIGxvb2t1cFt0bXAgPj4gMl0gK1xuICAgICAgbG9va3VwWyh0bXAgPDwgNCkgJiAweDNGXSArXG4gICAgICAnPT0nXG4gICAgKVxuICB9IGVsc2UgaWYgKGV4dHJhQnl0ZXMgPT09IDIpIHtcbiAgICB0bXAgPSAodWludDhbbGVuIC0gMl0gPDwgOCkgKyB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDEwXSArXG4gICAgICBsb29rdXBbKHRtcCA+PiA0KSAmIDB4M0ZdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDIpICYgMHgzRl0gK1xuICAgICAgJz0nXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIHBhcnRzLmpvaW4oJycpXG59XG4iLCIvKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwOi8vZmVyb3NzLm9yZz5cbiAqIEBsaWNlbnNlICBNSVRcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cblxuJ3VzZSBzdHJpY3QnXG5cbnZhciBiYXNlNjQgPSByZXF1aXJlKCdiYXNlNjQtanMnKVxudmFyIGllZWU3NTQgPSByZXF1aXJlKCdpZWVlNzU0JylcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnaXNhcnJheScpXG5cbmV4cG9ydHMuQnVmZmVyID0gQnVmZmVyXG5leHBvcnRzLlNsb3dCdWZmZXIgPSBTbG93QnVmZmVyXG5leHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTID0gNTBcblxuLyoqXG4gKiBJZiBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgOlxuICogICA9PT0gdHJ1ZSAgICBVc2UgVWludDhBcnJheSBpbXBsZW1lbnRhdGlvbiAoZmFzdGVzdClcbiAqICAgPT09IGZhbHNlICAgVXNlIE9iamVjdCBpbXBsZW1lbnRhdGlvbiAobW9zdCBjb21wYXRpYmxlLCBldmVuIElFNilcbiAqXG4gKiBCcm93c2VycyB0aGF0IHN1cHBvcnQgdHlwZWQgYXJyYXlzIGFyZSBJRSAxMCssIEZpcmVmb3ggNCssIENocm9tZSA3KywgU2FmYXJpIDUuMSssXG4gKiBPcGVyYSAxMS42KywgaU9TIDQuMisuXG4gKlxuICogRHVlIHRvIHZhcmlvdXMgYnJvd3NlciBidWdzLCBzb21ldGltZXMgdGhlIE9iamVjdCBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlIHVzZWQgZXZlblxuICogd2hlbiB0aGUgYnJvd3NlciBzdXBwb3J0cyB0eXBlZCBhcnJheXMuXG4gKlxuICogTm90ZTpcbiAqXG4gKiAgIC0gRmlyZWZveCA0LTI5IGxhY2tzIHN1cHBvcnQgZm9yIGFkZGluZyBuZXcgcHJvcGVydGllcyB0byBgVWludDhBcnJheWAgaW5zdGFuY2VzLFxuICogICAgIFNlZTogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk1NDM4LlxuICpcbiAqICAgLSBDaHJvbWUgOS0xMCBpcyBtaXNzaW5nIHRoZSBgVHlwZWRBcnJheS5wcm90b3R5cGUuc3ViYXJyYXlgIGZ1bmN0aW9uLlxuICpcbiAqICAgLSBJRTEwIGhhcyBhIGJyb2tlbiBgVHlwZWRBcnJheS5wcm90b3R5cGUuc3ViYXJyYXlgIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYXJyYXlzIG9mXG4gKiAgICAgaW5jb3JyZWN0IGxlbmd0aCBpbiBzb21lIHNpdHVhdGlvbnMuXG5cbiAqIFdlIGRldGVjdCB0aGVzZSBidWdneSBicm93c2VycyBhbmQgc2V0IGBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVGAgdG8gYGZhbHNlYCBzbyB0aGV5XG4gKiBnZXQgdGhlIE9iamVjdCBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggaXMgc2xvd2VyIGJ1dCBiZWhhdmVzIGNvcnJlY3RseS5cbiAqL1xuQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgPSBnbG9iYWwuVFlQRURfQVJSQVlfU1VQUE9SVCAhPT0gdW5kZWZpbmVkXG4gID8gZ2xvYmFsLlRZUEVEX0FSUkFZX1NVUFBPUlRcbiAgOiB0eXBlZEFycmF5U3VwcG9ydCgpXG5cbi8qXG4gKiBFeHBvcnQga01heExlbmd0aCBhZnRlciB0eXBlZCBhcnJheSBzdXBwb3J0IGlzIGRldGVybWluZWQuXG4gKi9cbmV4cG9ydHMua01heExlbmd0aCA9IGtNYXhMZW5ndGgoKVxuXG5mdW5jdGlvbiB0eXBlZEFycmF5U3VwcG9ydCAoKSB7XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KDEpXG4gICAgYXJyLl9fcHJvdG9fXyA9IHtfX3Byb3RvX186IFVpbnQ4QXJyYXkucHJvdG90eXBlLCBmb286IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDQyIH19XG4gICAgcmV0dXJuIGFyci5mb28oKSA9PT0gNDIgJiYgLy8gdHlwZWQgYXJyYXkgaW5zdGFuY2VzIGNhbiBiZSBhdWdtZW50ZWRcbiAgICAgICAgdHlwZW9mIGFyci5zdWJhcnJheSA9PT0gJ2Z1bmN0aW9uJyAmJiAvLyBjaHJvbWUgOS0xMCBsYWNrIGBzdWJhcnJheWBcbiAgICAgICAgYXJyLnN1YmFycmF5KDEsIDEpLmJ5dGVMZW5ndGggPT09IDAgLy8gaWUxMCBoYXMgYnJva2VuIGBzdWJhcnJheWBcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmZ1bmN0aW9uIGtNYXhMZW5ndGggKCkge1xuICByZXR1cm4gQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRcbiAgICA/IDB4N2ZmZmZmZmZcbiAgICA6IDB4M2ZmZmZmZmZcbn1cblxuZnVuY3Rpb24gY3JlYXRlQnVmZmVyICh0aGF0LCBsZW5ndGgpIHtcbiAgaWYgKGtNYXhMZW5ndGgoKSA8IGxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHR5cGVkIGFycmF5IGxlbmd0aCcpXG4gIH1cbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2UsIGZvciBiZXN0IHBlcmZvcm1hbmNlXG4gICAgdGhhdCA9IG5ldyBVaW50OEFycmF5KGxlbmd0aClcbiAgICB0aGF0Ll9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgfSBlbHNlIHtcbiAgICAvLyBGYWxsYmFjazogUmV0dXJuIGFuIG9iamVjdCBpbnN0YW5jZSBvZiB0aGUgQnVmZmVyIGNsYXNzXG4gICAgaWYgKHRoYXQgPT09IG51bGwpIHtcbiAgICAgIHRoYXQgPSBuZXcgQnVmZmVyKGxlbmd0aClcbiAgICB9XG4gICAgdGhhdC5sZW5ndGggPSBsZW5ndGhcbiAgfVxuXG4gIHJldHVybiB0aGF0XG59XG5cbi8qKlxuICogVGhlIEJ1ZmZlciBjb25zdHJ1Y3RvciByZXR1cm5zIGluc3RhbmNlcyBvZiBgVWludDhBcnJheWAgdGhhdCBoYXZlIHRoZWlyXG4gKiBwcm90b3R5cGUgY2hhbmdlZCB0byBgQnVmZmVyLnByb3RvdHlwZWAuIEZ1cnRoZXJtb3JlLCBgQnVmZmVyYCBpcyBhIHN1YmNsYXNzIG9mXG4gKiBgVWludDhBcnJheWAsIHNvIHRoZSByZXR1cm5lZCBpbnN0YW5jZXMgd2lsbCBoYXZlIGFsbCB0aGUgbm9kZSBgQnVmZmVyYCBtZXRob2RzXG4gKiBhbmQgdGhlIGBVaW50OEFycmF5YCBtZXRob2RzLiBTcXVhcmUgYnJhY2tldCBub3RhdGlvbiB3b3JrcyBhcyBleHBlY3RlZCAtLSBpdFxuICogcmV0dXJucyBhIHNpbmdsZSBvY3RldC5cbiAqXG4gKiBUaGUgYFVpbnQ4QXJyYXlgIHByb3RvdHlwZSByZW1haW5zIHVubW9kaWZpZWQuXG4gKi9cblxuZnVuY3Rpb24gQnVmZmVyIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmICEodGhpcyBpbnN0YW5jZW9mIEJ1ZmZlcikpIHtcbiAgICByZXR1cm4gbmV3IEJ1ZmZlcihhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIC8vIENvbW1vbiBjYXNlLlxuICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAodHlwZW9mIGVuY29kaW5nT3JPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdJZiBlbmNvZGluZyBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZydcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIGFsbG9jVW5zYWZlKHRoaXMsIGFyZylcbiAgfVxuICByZXR1cm4gZnJvbSh0aGlzLCBhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnBvb2xTaXplID0gODE5MiAvLyBub3QgdXNlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uXG5cbi8vIFRPRE86IExlZ2FjeSwgbm90IG5lZWRlZCBhbnltb3JlLiBSZW1vdmUgaW4gbmV4dCBtYWpvciB2ZXJzaW9uLlxuQnVmZmVyLl9hdWdtZW50ID0gZnVuY3Rpb24gKGFycikge1xuICBhcnIuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICByZXR1cm4gYXJyXG59XG5cbmZ1bmN0aW9uIGZyb20gKHRoYXQsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgIHJldHVybiBmcm9tQXJyYXlCdWZmZXIodGhhdCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZyb21TdHJpbmcodGhhdCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQpXG4gIH1cblxuICByZXR1cm4gZnJvbU9iamVjdCh0aGF0LCB2YWx1ZSlcbn1cblxuLyoqXG4gKiBGdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0byBCdWZmZXIoYXJnLCBlbmNvZGluZykgYnV0IHRocm93cyBhIFR5cGVFcnJvclxuICogaWYgdmFsdWUgaXMgYSBudW1iZXIuXG4gKiBCdWZmZXIuZnJvbShzdHJbLCBlbmNvZGluZ10pXG4gKiBCdWZmZXIuZnJvbShhcnJheSlcbiAqIEJ1ZmZlci5mcm9tKGJ1ZmZlcilcbiAqIEJ1ZmZlci5mcm9tKGFycmF5QnVmZmVyWywgYnl0ZU9mZnNldFssIGxlbmd0aF1dKVxuICoqL1xuQnVmZmVyLmZyb20gPSBmdW5jdGlvbiAodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gZnJvbShudWxsLCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5pZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgQnVmZmVyLnByb3RvdHlwZS5fX3Byb3RvX18gPSBVaW50OEFycmF5LnByb3RvdHlwZVxuICBCdWZmZXIuX19wcm90b19fID0gVWludDhBcnJheVxuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnNwZWNpZXMgJiZcbiAgICAgIEJ1ZmZlcltTeW1ib2wuc3BlY2llc10gPT09IEJ1ZmZlcikge1xuICAgIC8vIEZpeCBzdWJhcnJheSgpIGluIEVTMjAxNi4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9wdWxsLzk3XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ1ZmZlciwgU3ltYm9sLnNwZWNpZXMsIHtcbiAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRTaXplIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfSBlbHNlIGlmIChzaXplIDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBuZWdhdGl2ZScpXG4gIH1cbn1cblxuZnVuY3Rpb24gYWxsb2MgKHRoYXQsIHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgaWYgKHNpemUgPD0gMCkge1xuICAgIHJldHVybiBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSlcbiAgfVxuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT25seSBwYXkgYXR0ZW50aW9uIHRvIGVuY29kaW5nIGlmIGl0J3MgYSBzdHJpbmcuIFRoaXNcbiAgICAvLyBwcmV2ZW50cyBhY2NpZGVudGFsbHkgc2VuZGluZyBpbiBhIG51bWJlciB0aGF0IHdvdWxkXG4gICAgLy8gYmUgaW50ZXJwcmV0dGVkIGFzIGEgc3RhcnQgb2Zmc2V0LlxuICAgIHJldHVybiB0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnXG4gICAgICA/IGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKS5maWxsKGZpbGwsIGVuY29kaW5nKVxuICAgICAgOiBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSkuZmlsbChmaWxsKVxuICB9XG4gIHJldHVybiBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSlcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiBhbGxvYyhzaXplWywgZmlsbFssIGVuY29kaW5nXV0pXG4gKiovXG5CdWZmZXIuYWxsb2MgPSBmdW5jdGlvbiAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGFsbG9jKG51bGwsIHNpemUsIGZpbGwsIGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiBhbGxvY1Vuc2FmZSAodGhhdCwgc2l6ZSkge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSA8IDAgPyAwIDogY2hlY2tlZChzaXplKSB8IDApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7ICsraSkge1xuICAgICAgdGhhdFtpXSA9IDBcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIEJ1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShudWxsLCBzaXplKVxufVxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIFNsb3dCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShudWxsLCBzaXplKVxufVxuXG5mdW5jdGlvbiBmcm9tU3RyaW5nICh0aGF0LCBzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnIHx8IGVuY29kaW5nID09PSAnJykge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gIH1cblxuICBpZiAoIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiZW5jb2RpbmdcIiBtdXN0IGJlIGEgdmFsaWQgc3RyaW5nIGVuY29kaW5nJylcbiAgfVxuXG4gIHZhciBsZW5ndGggPSBieXRlTGVuZ3RoKHN0cmluZywgZW5jb2RpbmcpIHwgMFxuICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIGxlbmd0aClcblxuICB2YXIgYWN0dWFsID0gdGhhdC53cml0ZShzdHJpbmcsIGVuY29kaW5nKVxuXG4gIGlmIChhY3R1YWwgIT09IGxlbmd0aCkge1xuICAgIC8vIFdyaXRpbmcgYSBoZXggc3RyaW5nLCBmb3IgZXhhbXBsZSwgdGhhdCBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMgd2lsbFxuICAgIC8vIGNhdXNlIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGZpcnN0IGludmFsaWQgY2hhcmFjdGVyIHRvIGJlIGlnbm9yZWQuIChlLmcuXG4gICAgLy8gJ2FieHhjZCcgd2lsbCBiZSB0cmVhdGVkIGFzICdhYicpXG4gICAgdGhhdCA9IHRoYXQuc2xpY2UoMCwgYWN0dWFsKVxuICB9XG5cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5TGlrZSAodGhhdCwgYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCA8IDAgPyAwIDogY2hlY2tlZChhcnJheS5sZW5ndGgpIHwgMFxuICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIGxlbmd0aClcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgIHRoYXRbaV0gPSBhcnJheVtpXSAmIDI1NVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUJ1ZmZlciAodGhhdCwgYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICBhcnJheS5ieXRlTGVuZ3RoIC8vIHRoaXMgdGhyb3dzIGlmIGBhcnJheWAgaXMgbm90IGEgdmFsaWQgQXJyYXlCdWZmZXJcblxuICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXFwnb2Zmc2V0XFwnIGlzIG91dCBvZiBib3VuZHMnKVxuICB9XG5cbiAgaWYgKGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0ICsgKGxlbmd0aCB8fCAwKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcXCdsZW5ndGhcXCcgaXMgb3V0IG9mIGJvdW5kcycpXG4gIH1cblxuICBpZiAoYnl0ZU9mZnNldCA9PT0gdW5kZWZpbmVkICYmIGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheSlcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQpXG4gIH0gZWxzZSB7XG4gICAgYXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2UsIGZvciBiZXN0IHBlcmZvcm1hbmNlXG4gICAgdGhhdCA9IGFycmF5XG4gICAgdGhhdC5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgLy8gRmFsbGJhY2s6IFJldHVybiBhbiBvYmplY3QgaW5zdGFuY2Ugb2YgdGhlIEJ1ZmZlciBjbGFzc1xuICAgIHRoYXQgPSBmcm9tQXJyYXlMaWtlKHRoYXQsIGFycmF5KVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21PYmplY3QgKHRoYXQsIG9iaikge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKG9iaikpIHtcbiAgICB2YXIgbGVuID0gY2hlY2tlZChvYmoubGVuZ3RoKSB8IDBcbiAgICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIGxlbilcblxuICAgIGlmICh0aGF0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoYXRcbiAgICB9XG5cbiAgICBvYmouY29weSh0aGF0LCAwLCAwLCBsZW4pXG4gICAgcmV0dXJuIHRoYXRcbiAgfVxuXG4gIGlmIChvYmopIHtcbiAgICBpZiAoKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgb2JqLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB8fCAnbGVuZ3RoJyBpbiBvYmopIHtcbiAgICAgIGlmICh0eXBlb2Ygb2JqLmxlbmd0aCAhPT0gJ251bWJlcicgfHwgaXNuYW4ob2JqLmxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcih0aGF0LCAwKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UodGhhdCwgb2JqKVxuICAgIH1cblxuICAgIGlmIChvYmoudHlwZSA9PT0gJ0J1ZmZlcicgJiYgaXNBcnJheShvYmouZGF0YSkpIHtcbiAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKHRoYXQsIG9iai5kYXRhKVxuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBhcnJheS1saWtlIG9iamVjdC4nKVxufVxuXG5mdW5jdGlvbiBjaGVja2VkIChsZW5ndGgpIHtcbiAgLy8gTm90ZTogY2Fubm90IHVzZSBgbGVuZ3RoIDwga01heExlbmd0aCgpYCBoZXJlIGJlY2F1c2UgdGhhdCBmYWlscyB3aGVuXG4gIC8vIGxlbmd0aCBpcyBOYU4gKHdoaWNoIGlzIG90aGVyd2lzZSBjb2VyY2VkIHRvIHplcm8uKVxuICBpZiAobGVuZ3RoID49IGtNYXhMZW5ndGgoKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICdzaXplOiAweCcgKyBrTWF4TGVuZ3RoKCkudG9TdHJpbmcoMTYpICsgJyBieXRlcycpXG4gIH1cbiAgcmV0dXJuIGxlbmd0aCB8IDBcbn1cblxuZnVuY3Rpb24gU2xvd0J1ZmZlciAobGVuZ3RoKSB7XG4gIGlmICgrbGVuZ3RoICE9IGxlbmd0aCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGVxZXFlcVxuICAgIGxlbmd0aCA9IDBcbiAgfVxuICByZXR1cm4gQnVmZmVyLmFsbG9jKCtsZW5ndGgpXG59XG5cbkJ1ZmZlci5pc0J1ZmZlciA9IGZ1bmN0aW9uIGlzQnVmZmVyIChiKSB7XG4gIHJldHVybiAhIShiICE9IG51bGwgJiYgYi5faXNCdWZmZXIpXG59XG5cbkJ1ZmZlci5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSAoYSwgYikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihhKSB8fCAhQnVmZmVyLmlzQnVmZmVyKGIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycycpXG4gIH1cblxuICBpZiAoYSA9PT0gYikgcmV0dXJuIDBcblxuICB2YXIgeCA9IGEubGVuZ3RoXG4gIHZhciB5ID0gYi5sZW5ndGhcblxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gTWF0aC5taW4oeCwgeSk7IGkgPCBsZW47ICsraSkge1xuICAgIGlmIChhW2ldICE9PSBiW2ldKSB7XG4gICAgICB4ID0gYVtpXVxuICAgICAgeSA9IGJbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG5CdWZmZXIuaXNFbmNvZGluZyA9IGZ1bmN0aW9uIGlzRW5jb2RpbmcgKGVuY29kaW5nKSB7XG4gIHN3aXRjaCAoU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnaGV4JzpcbiAgICBjYXNlICd1dGY4JzpcbiAgICBjYXNlICd1dGYtOCc6XG4gICAgY2FzZSAnYXNjaWknOlxuICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgY2FzZSAnYmluYXJ5JzpcbiAgICBjYXNlICdiYXNlNjQnOlxuICAgIGNhc2UgJ3VjczInOlxuICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICBjYXNlICd1dGYxNmxlJzpcbiAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5CdWZmZXIuY29uY2F0ID0gZnVuY3Rpb24gY29uY2F0IChsaXN0LCBsZW5ndGgpIHtcbiAgaWYgKCFpc0FycmF5KGxpc3QpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgfVxuXG4gIGlmIChsaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBCdWZmZXIuYWxsb2MoMClcbiAgfVxuXG4gIHZhciBpXG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGxlbmd0aCA9IDBcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgICAgbGVuZ3RoICs9IGxpc3RbaV0ubGVuZ3RoXG4gICAgfVxuICB9XG5cbiAgdmFyIGJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShsZW5ndGgpXG4gIHZhciBwb3MgPSAwXG4gIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIGJ1ZiA9IGxpc3RbaV1cbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICAgIH1cbiAgICBidWYuY29weShidWZmZXIsIHBvcylcbiAgICBwb3MgKz0gYnVmLmxlbmd0aFxuICB9XG4gIHJldHVybiBidWZmZXJcbn1cblxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHN0cmluZykpIHtcbiAgICByZXR1cm4gc3RyaW5nLmxlbmd0aFxuICB9XG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgIChBcnJheUJ1ZmZlci5pc1ZpZXcoc3RyaW5nKSB8fCBzdHJpbmcgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpIHtcbiAgICByZXR1cm4gc3RyaW5nLmJ5dGVMZW5ndGhcbiAgfVxuICBpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycpIHtcbiAgICBzdHJpbmcgPSAnJyArIHN0cmluZ1xuICB9XG5cbiAgdmFyIGxlbiA9IHN0cmluZy5sZW5ndGhcbiAgaWYgKGxlbiA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBVc2UgYSBmb3IgbG9vcCB0byBhdm9pZCByZWN1cnNpb25cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGVuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiBsZW4gKiAyXG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gbGVuID4+PiAxXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGggLy8gYXNzdW1lIHV0ZjhcbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cbkJ1ZmZlci5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuXG5mdW5jdGlvbiBzbG93VG9TdHJpbmcgKGVuY29kaW5nLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG5cbiAgLy8gTm8gbmVlZCB0byB2ZXJpZnkgdGhhdCBcInRoaXMubGVuZ3RoIDw9IE1BWF9VSU5UMzJcIiBzaW5jZSBpdCdzIGEgcmVhZC1vbmx5XG4gIC8vIHByb3BlcnR5IG9mIGEgdHlwZWQgYXJyYXkuXG5cbiAgLy8gVGhpcyBiZWhhdmVzIG5laXRoZXIgbGlrZSBTdHJpbmcgbm9yIFVpbnQ4QXJyYXkgaW4gdGhhdCB3ZSBzZXQgc3RhcnQvZW5kXG4gIC8vIHRvIHRoZWlyIHVwcGVyL2xvd2VyIGJvdW5kcyBpZiB0aGUgdmFsdWUgcGFzc2VkIGlzIG91dCBvZiByYW5nZS5cbiAgLy8gdW5kZWZpbmVkIGlzIGhhbmRsZWQgc3BlY2lhbGx5IGFzIHBlciBFQ01BLTI2MiA2dGggRWRpdGlvbixcbiAgLy8gU2VjdGlvbiAxMy4zLjMuNyBSdW50aW1lIFNlbWFudGljczogS2V5ZWRCaW5kaW5nSW5pdGlhbGl6YXRpb24uXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkIHx8IHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIC8vIFJldHVybiBlYXJseSBpZiBzdGFydCA+IHRoaXMubGVuZ3RoLiBEb25lIGhlcmUgdG8gcHJldmVudCBwb3RlbnRpYWwgdWludDMyXG4gIC8vIGNvZXJjaW9uIGZhaWwgYmVsb3cuXG4gIGlmIChzdGFydCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoZW5kID09PSB1bmRlZmluZWQgfHwgZW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKGVuZCA8PSAwKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICAvLyBGb3JjZSBjb2Vyc2lvbiB0byB1aW50MzIuIFRoaXMgd2lsbCBhbHNvIGNvZXJjZSBmYWxzZXkvTmFOIHZhbHVlcyB0byAwLlxuICBlbmQgPj4+PSAwXG4gIHN0YXJ0ID4+Pj0gMFxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxhdGluMVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdXRmMTZsZVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9IChlbmNvZGluZyArICcnKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG4vLyBUaGUgcHJvcGVydHkgaXMgdXNlZCBieSBgQnVmZmVyLmlzQnVmZmVyYCBhbmQgYGlzLWJ1ZmZlcmAgKGluIFNhZmFyaSA1LTcpIHRvIGRldGVjdFxuLy8gQnVmZmVyIGluc3RhbmNlcy5cbkJ1ZmZlci5wcm90b3R5cGUuX2lzQnVmZmVyID0gdHJ1ZVxuXG5mdW5jdGlvbiBzd2FwIChiLCBuLCBtKSB7XG4gIHZhciBpID0gYltuXVxuICBiW25dID0gYlttXVxuICBiW21dID0gaVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAxNiA9IGZ1bmN0aW9uIHN3YXAxNiAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgMiAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gMikge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDEpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMzIgPSBmdW5jdGlvbiBzd2FwMzIgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDQgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAzKVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyAyKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDY0ID0gZnVuY3Rpb24gc3dhcDY0ICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA4ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA4KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgNylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgNilcbiAgICBzd2FwKHRoaXMsIGkgKyAyLCBpICsgNSlcbiAgICBzd2FwKHRoaXMsIGkgKyAzLCBpICsgNClcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGggfCAwXG4gIGlmIChsZW5ndGggPT09IDApIHJldHVybiAnJ1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCAwLCBsZW5ndGgpXG4gIHJldHVybiBzbG93VG9TdHJpbmcuYXBwbHkodGhpcywgYXJndW1lbnRzKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyAoYikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIGlmICh0aGlzID09PSBiKSByZXR1cm4gdHJ1ZVxuICByZXR1cm4gQnVmZmVyLmNvbXBhcmUodGhpcywgYikgPT09IDBcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCAoKSB7XG4gIHZhciBzdHIgPSAnJ1xuICB2YXIgbWF4ID0gZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFU1xuICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgc3RyID0gdGhpcy50b1N0cmluZygnaGV4JywgMCwgbWF4KS5tYXRjaCgvLnsyfS9nKS5qb2luKCcgJylcbiAgICBpZiAodGhpcy5sZW5ndGggPiBtYXgpIHN0ciArPSAnIC4uLiAnXG4gIH1cbiAgcmV0dXJuICc8QnVmZmVyICcgKyBzdHIgKyAnPidcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSAodGFyZ2V0LCBzdGFydCwgZW5kLCB0aGlzU3RhcnQsIHRoaXNFbmQpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGFyZ2V0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICB9XG5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICBpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmQgPSB0YXJnZXQgPyB0YXJnZXQubGVuZ3RoIDogMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNTdGFydCA9IDBcbiAgfVxuICBpZiAodGhpc0VuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc0VuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoc3RhcnQgPCAwIHx8IGVuZCA+IHRhcmdldC5sZW5ndGggfHwgdGhpc1N0YXJ0IDwgMCB8fCB0aGlzRW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCAmJiBzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCkge1xuICAgIHJldHVybiAtMVxuICB9XG4gIGlmIChzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMVxuICB9XG5cbiAgc3RhcnQgPj4+PSAwXG4gIGVuZCA+Pj49IDBcbiAgdGhpc1N0YXJ0ID4+Pj0gMFxuICB0aGlzRW5kID4+Pj0gMFxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQpIHJldHVybiAwXG5cbiAgdmFyIHggPSB0aGlzRW5kIC0gdGhpc1N0YXJ0XG4gIHZhciB5ID0gZW5kIC0gc3RhcnRcbiAgdmFyIGxlbiA9IE1hdGgubWluKHgsIHkpXG5cbiAgdmFyIHRoaXNDb3B5ID0gdGhpcy5zbGljZSh0aGlzU3RhcnQsIHRoaXNFbmQpXG4gIHZhciB0YXJnZXRDb3B5ID0gdGFyZ2V0LnNsaWNlKHN0YXJ0LCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIGlmICh0aGlzQ29weVtpXSAhPT0gdGFyZ2V0Q29weVtpXSkge1xuICAgICAgeCA9IHRoaXNDb3B5W2ldXG4gICAgICB5ID0gdGFyZ2V0Q29weVtpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbi8vIEZpbmRzIGVpdGhlciB0aGUgZmlyc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0ID49IGBieXRlT2Zmc2V0YCxcbi8vIE9SIHRoZSBsYXN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA8PSBgYnl0ZU9mZnNldGAuXG4vL1xuLy8gQXJndW1lbnRzOlxuLy8gLSBidWZmZXIgLSBhIEJ1ZmZlciB0byBzZWFyY2hcbi8vIC0gdmFsIC0gYSBzdHJpbmcsIEJ1ZmZlciwgb3IgbnVtYmVyXG4vLyAtIGJ5dGVPZmZzZXQgLSBhbiBpbmRleCBpbnRvIGBidWZmZXJgOyB3aWxsIGJlIGNsYW1wZWQgdG8gYW4gaW50MzJcbi8vIC0gZW5jb2RpbmcgLSBhbiBvcHRpb25hbCBlbmNvZGluZywgcmVsZXZhbnQgaXMgdmFsIGlzIGEgc3RyaW5nXG4vLyAtIGRpciAtIHRydWUgZm9yIGluZGV4T2YsIGZhbHNlIGZvciBsYXN0SW5kZXhPZlxuZnVuY3Rpb24gYmlkaXJlY3Rpb25hbEluZGV4T2YgKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIC8vIEVtcHR5IGJ1ZmZlciBtZWFucyBubyBtYXRjaFxuICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xXG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXRcbiAgaWYgKHR5cGVvZiBieXRlT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gYnl0ZU9mZnNldFxuICAgIGJ5dGVPZmZzZXQgPSAwXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA+IDB4N2ZmZmZmZmYpIHtcbiAgICBieXRlT2Zmc2V0ID0gMHg3ZmZmZmZmZlxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAtMHg4MDAwMDAwMCkge1xuICAgIGJ5dGVPZmZzZXQgPSAtMHg4MDAwMDAwMFxuICB9XG4gIGJ5dGVPZmZzZXQgPSArYnl0ZU9mZnNldCAgLy8gQ29lcmNlIHRvIE51bWJlci5cbiAgaWYgKGlzTmFOKGJ5dGVPZmZzZXQpKSB7XG4gICAgLy8gYnl0ZU9mZnNldDogaXQgaXQncyB1bmRlZmluZWQsIG51bGwsIE5hTiwgXCJmb29cIiwgZXRjLCBzZWFyY2ggd2hvbGUgYnVmZmVyXG4gICAgYnl0ZU9mZnNldCA9IGRpciA/IDAgOiAoYnVmZmVyLmxlbmd0aCAtIDEpXG4gIH1cblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldDogbmVnYXRpdmUgb2Zmc2V0cyBzdGFydCBmcm9tIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlclxuICBpZiAoYnl0ZU9mZnNldCA8IDApIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoICsgYnl0ZU9mZnNldFxuICBpZiAoYnl0ZU9mZnNldCA+PSBidWZmZXIubGVuZ3RoKSB7XG4gICAgaWYgKGRpcikgcmV0dXJuIC0xXG4gICAgZWxzZSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCAtIDFcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgMCkge1xuICAgIGlmIChkaXIpIGJ5dGVPZmZzZXQgPSAwXG4gICAgZWxzZSByZXR1cm4gLTFcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSB2YWxcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsID0gQnVmZmVyLmZyb20odmFsLCBlbmNvZGluZylcbiAgfVxuXG4gIC8vIEZpbmFsbHksIHNlYXJjaCBlaXRoZXIgaW5kZXhPZiAoaWYgZGlyIGlzIHRydWUpIG9yIGxhc3RJbmRleE9mXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIodmFsKSkge1xuICAgIC8vIFNwZWNpYWwgY2FzZTogbG9va2luZyBmb3IgZW1wdHkgc3RyaW5nL2J1ZmZlciBhbHdheXMgZmFpbHNcbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAweEZGIC8vIFNlYXJjaCBmb3IgYSBieXRlIHZhbHVlIFswLTI1NV1cbiAgICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiZcbiAgICAgICAgdHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmIChkaXIpIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgWyB2YWwgXSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlcicpXG59XG5cbmZ1bmN0aW9uIGFycmF5SW5kZXhPZiAoYXJyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgdmFyIGluZGV4U2l6ZSA9IDFcbiAgdmFyIGFyckxlbmd0aCA9IGFyci5sZW5ndGhcbiAgdmFyIHZhbExlbmd0aCA9IHZhbC5sZW5ndGhcblxuICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgaWYgKGVuY29kaW5nID09PSAndWNzMicgfHwgZW5jb2RpbmcgPT09ICd1Y3MtMicgfHxcbiAgICAgICAgZW5jb2RpbmcgPT09ICd1dGYxNmxlJyB8fCBlbmNvZGluZyA9PT0gJ3V0Zi0xNmxlJykge1xuICAgICAgaWYgKGFyci5sZW5ndGggPCAyIHx8IHZhbC5sZW5ndGggPCAyKSB7XG4gICAgICAgIHJldHVybiAtMVxuICAgICAgfVxuICAgICAgaW5kZXhTaXplID0gMlxuICAgICAgYXJyTGVuZ3RoIC89IDJcbiAgICAgIHZhbExlbmd0aCAvPSAyXG4gICAgICBieXRlT2Zmc2V0IC89IDJcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWFkIChidWYsIGkpIHtcbiAgICBpZiAoaW5kZXhTaXplID09PSAxKSB7XG4gICAgICByZXR1cm4gYnVmW2ldXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBidWYucmVhZFVJbnQxNkJFKGkgKiBpbmRleFNpemUpXG4gICAgfVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGRpcikge1xuICAgIHZhciBmb3VuZEluZGV4ID0gLTFcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpIDwgYXJyTGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyZWFkKGFyciwgaSkgPT09IHJlYWQodmFsLCBmb3VuZEluZGV4ID09PSAtMSA/IDAgOiBpIC0gZm91bmRJbmRleCkpIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggPT09IC0xKSBmb3VuZEluZGV4ID0gaVxuICAgICAgICBpZiAoaSAtIGZvdW5kSW5kZXggKyAxID09PSB2YWxMZW5ndGgpIHJldHVybiBmb3VuZEluZGV4ICogaW5kZXhTaXplXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZm91bmRJbmRleCAhPT0gLTEpIGkgLT0gaSAtIGZvdW5kSW5kZXhcbiAgICAgICAgZm91bmRJbmRleCA9IC0xXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChieXRlT2Zmc2V0ICsgdmFsTGVuZ3RoID4gYXJyTGVuZ3RoKSBieXRlT2Zmc2V0ID0gYXJyTGVuZ3RoIC0gdmFsTGVuZ3RoXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBmb3VuZCA9IHRydWVcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFsTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKHJlYWQoYXJyLCBpICsgaikgIT09IHJlYWQodmFsLCBqKSkge1xuICAgICAgICAgIGZvdW5kID0gZmFsc2VcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmQpIHJldHVybiBpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlcyAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gdGhpcy5pbmRleE9mKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpICE9PSAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBpbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCB0cnVlKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmxhc3RJbmRleE9mID0gZnVuY3Rpb24gbGFzdEluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGZhbHNlKVxufVxuXG5mdW5jdGlvbiBoZXhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIG9mZnNldCA9IE51bWJlcihvZmZzZXQpIHx8IDBcbiAgdmFyIHJlbWFpbmluZyA9IGJ1Zi5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgfSBlbHNlIHtcbiAgICBsZW5ndGggPSBOdW1iZXIobGVuZ3RoKVxuICAgIGlmIChsZW5ndGggPiByZW1haW5pbmcpIHtcbiAgICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICAgIH1cbiAgfVxuXG4gIC8vIG11c3QgYmUgYW4gZXZlbiBudW1iZXIgb2YgZGlnaXRzXG4gIHZhciBzdHJMZW4gPSBzdHJpbmcubGVuZ3RoXG4gIGlmIChzdHJMZW4gJSAyICE9PSAwKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGhleCBzdHJpbmcnKVxuXG4gIGlmIChsZW5ndGggPiBzdHJMZW4gLyAyKSB7XG4gICAgbGVuZ3RoID0gc3RyTGVuIC8gMlxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgcGFyc2VkID0gcGFyc2VJbnQoc3RyaW5nLnN1YnN0cihpICogMiwgMiksIDE2KVxuICAgIGlmIChpc05hTihwYXJzZWQpKSByZXR1cm4gaVxuICAgIGJ1ZltvZmZzZXQgKyBpXSA9IHBhcnNlZFxuICB9XG4gIHJldHVybiBpXG59XG5cbmZ1bmN0aW9uIHV0ZjhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjhUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGFzY2lpV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihhc2NpaVRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gbGF0aW4xV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYXNjaWlXcml0ZShidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGJhc2U2NFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYmFzZTY0VG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiB1Y3MyV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGYxNmxlVG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gd3JpdGUgKHN0cmluZywgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKSB7XG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcpXG4gIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIGVuY29kaW5nKVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBvZmZzZXRcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgb2Zmc2V0WywgbGVuZ3RoXVssIGVuY29kaW5nXSlcbiAgfSBlbHNlIGlmIChpc0Zpbml0ZShvZmZzZXQpKSB7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICAgIGlmIChpc0Zpbml0ZShsZW5ndGgpKSB7XG4gICAgICBsZW5ndGggPSBsZW5ndGggfCAwXG4gICAgICBpZiAoZW5jb2RpbmcgPT09IHVuZGVmaW5lZCkgZW5jb2RpbmcgPSAndXRmOCdcbiAgICB9IGVsc2Uge1xuICAgICAgZW5jb2RpbmcgPSBsZW5ndGhcbiAgICAgIGxlbmd0aCA9IHVuZGVmaW5lZFxuICAgIH1cbiAgLy8gbGVnYWN5IHdyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldCwgbGVuZ3RoKSAtIHJlbW92ZSBpbiB2MC4xM1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCdcbiAgICApXG4gIH1cblxuICB2YXIgcmVtYWluaW5nID0gdGhpcy5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkIHx8IGxlbmd0aCA+IHJlbWFpbmluZykgbGVuZ3RoID0gcmVtYWluaW5nXG5cbiAgaWYgKChzdHJpbmcubGVuZ3RoID4gMCAmJiAobGVuZ3RoIDwgMCB8fCBvZmZzZXQgPCAwKSkgfHwgb2Zmc2V0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICAvLyBXYXJuaW5nOiBtYXhMZW5ndGggbm90IHRha2VuIGludG8gYWNjb3VudCBpbiBiYXNlNjRXcml0ZVxuICAgICAgICByZXR1cm4gYmFzZTY0V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHVjczJXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04gKCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdCdWZmZXInLFxuICAgIGRhdGE6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2FyciB8fCB0aGlzLCAwKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKHN0YXJ0ID09PSAwICYmIGVuZCA9PT0gYnVmLmxlbmd0aCkge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1Zi5zbGljZShzdGFydCwgZW5kKSlcbiAgfVxufVxuXG5mdW5jdGlvbiB1dGY4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG4gIHZhciByZXMgPSBbXVxuXG4gIHZhciBpID0gc3RhcnRcbiAgd2hpbGUgKGkgPCBlbmQpIHtcbiAgICB2YXIgZmlyc3RCeXRlID0gYnVmW2ldXG4gICAgdmFyIGNvZGVQb2ludCA9IG51bGxcbiAgICB2YXIgYnl0ZXNQZXJTZXF1ZW5jZSA9IChmaXJzdEJ5dGUgPiAweEVGKSA/IDRcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4REYpID8gM1xuICAgICAgOiAoZmlyc3RCeXRlID4gMHhCRikgPyAyXG4gICAgICA6IDFcblxuICAgIGlmIChpICsgYnl0ZXNQZXJTZXF1ZW5jZSA8PSBlbmQpIHtcbiAgICAgIHZhciBzZWNvbmRCeXRlLCB0aGlyZEJ5dGUsIGZvdXJ0aEJ5dGUsIHRlbXBDb2RlUG9pbnRcblxuICAgICAgc3dpdGNoIChieXRlc1BlclNlcXVlbmNlKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAoZmlyc3RCeXRlIDwgMHg4MCkge1xuICAgICAgICAgICAgY29kZVBvaW50ID0gZmlyc3RCeXRlXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4MUYpIDw8IDB4NiB8IChzZWNvbmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3Rikge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweEMgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4NiB8ICh0aGlyZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGRiAmJiAodGVtcENvZGVQb2ludCA8IDB4RDgwMCB8fCB0ZW1wQ29kZVBvaW50ID4gMHhERkZGKSkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBmb3VydGhCeXRlID0gYnVmW2kgKyAzXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAoZm91cnRoQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHgxMiB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHhDIHwgKHRoaXJkQnl0ZSAmIDB4M0YpIDw8IDB4NiB8IChmb3VydGhCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHhGRkZGICYmIHRlbXBDb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb2RlUG9pbnQgPT09IG51bGwpIHtcbiAgICAgIC8vIHdlIGRpZCBub3QgZ2VuZXJhdGUgYSB2YWxpZCBjb2RlUG9pbnQgc28gaW5zZXJ0IGFcbiAgICAgIC8vIHJlcGxhY2VtZW50IGNoYXIgKFUrRkZGRCkgYW5kIGFkdmFuY2Ugb25seSAxIGJ5dGVcbiAgICAgIGNvZGVQb2ludCA9IDB4RkZGRFxuICAgICAgYnl0ZXNQZXJTZXF1ZW5jZSA9IDFcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA+IDB4RkZGRikge1xuICAgICAgLy8gZW5jb2RlIHRvIHV0ZjE2IChzdXJyb2dhdGUgcGFpciBkYW5jZSlcbiAgICAgIGNvZGVQb2ludCAtPSAweDEwMDAwXG4gICAgICByZXMucHVzaChjb2RlUG9pbnQgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApXG4gICAgICBjb2RlUG9pbnQgPSAweERDMDAgfCBjb2RlUG9pbnQgJiAweDNGRlxuICAgIH1cblxuICAgIHJlcy5wdXNoKGNvZGVQb2ludClcbiAgICBpICs9IGJ5dGVzUGVyU2VxdWVuY2VcbiAgfVxuXG4gIHJldHVybiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkocmVzKVxufVxuXG4vLyBCYXNlZCBvbiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMjc0NzI3Mi82ODA3NDIsIHRoZSBicm93c2VyIHdpdGhcbi8vIHRoZSBsb3dlc3QgbGltaXQgaXMgQ2hyb21lLCB3aXRoIDB4MTAwMDAgYXJncy5cbi8vIFdlIGdvIDEgbWFnbml0dWRlIGxlc3MsIGZvciBzYWZldHlcbnZhciBNQVhfQVJHVU1FTlRTX0xFTkdUSCA9IDB4MTAwMFxuXG5mdW5jdGlvbiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkgKGNvZGVQb2ludHMpIHtcbiAgdmFyIGxlbiA9IGNvZGVQb2ludHMubGVuZ3RoXG4gIGlmIChsZW4gPD0gTUFYX0FSR1VNRU5UU19MRU5HVEgpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNvZGVQb2ludHMpIC8vIGF2b2lkIGV4dHJhIHNsaWNlKClcbiAgfVxuXG4gIC8vIERlY29kZSBpbiBjaHVua3MgdG8gYXZvaWQgXCJjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWRcIi5cbiAgdmFyIHJlcyA9ICcnXG4gIHZhciBpID0gMFxuICB3aGlsZSAoaSA8IGxlbikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFxuICAgICAgU3RyaW5nLFxuICAgICAgY29kZVBvaW50cy5zbGljZShpLCBpICs9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKVxuICAgIClcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldICYgMHg3RilcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGxhdGluMVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGhleFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IGJ1Zi5sZW5ndGhcblxuICBpZiAoIXN0YXJ0IHx8IHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIGlmICghZW5kIHx8IGVuZCA8IDAgfHwgZW5kID4gbGVuKSBlbmQgPSBsZW5cblxuICB2YXIgb3V0ID0gJydcbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICBvdXQgKz0gdG9IZXgoYnVmW2ldKVxuICB9XG4gIHJldHVybiBvdXRcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGJ5dGVzID0gYnVmLnNsaWNlKHN0YXJ0LCBlbmQpXG4gIHZhciByZXMgPSAnJ1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0gKyBieXRlc1tpICsgMV0gKiAyNTYpXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gc2xpY2UgKHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIHN0YXJ0ID0gfn5zdGFydFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IH5+ZW5kXG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ICs9IGxlblxuICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gMFxuICB9IGVsc2UgaWYgKHN0YXJ0ID4gbGVuKSB7XG4gICAgc3RhcnQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCAwKSB7XG4gICAgZW5kICs9IGxlblxuICAgIGlmIChlbmQgPCAwKSBlbmQgPSAwXG4gIH0gZWxzZSBpZiAoZW5kID4gbGVuKSB7XG4gICAgZW5kID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgdmFyIG5ld0J1ZlxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICBuZXdCdWYgPSB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpXG4gICAgbmV3QnVmLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgfSBlbHNlIHtcbiAgICB2YXIgc2xpY2VMZW4gPSBlbmQgLSBzdGFydFxuICAgIG5ld0J1ZiA9IG5ldyBCdWZmZXIoc2xpY2VMZW4sIHVuZGVmaW5lZClcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWNlTGVuOyArK2kpIHtcbiAgICAgIG5ld0J1ZltpXSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdCdWZcbn1cblxuLypcbiAqIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYnVmZmVyIGlzbid0IHRyeWluZyB0byB3cml0ZSBvdXQgb2YgYm91bmRzLlxuICovXG5mdW5jdGlvbiBjaGVja09mZnNldCAob2Zmc2V0LCBleHQsIGxlbmd0aCkge1xuICBpZiAoKG9mZnNldCAlIDEpICE9PSAwIHx8IG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdvZmZzZXQgaXMgbm90IHVpbnQnKVxuICBpZiAob2Zmc2V0ICsgZXh0ID4gbGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCcpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRMRSA9IGZ1bmN0aW9uIHJlYWRVSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRCRSA9IGZ1bmN0aW9uIHJlYWRVSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG4gIH1cblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdXG4gIHZhciBtdWwgPSAxXG4gIHdoaWxlIChieXRlTGVuZ3RoID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDggPSBmdW5jdGlvbiByZWFkVUludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2QkUgPSBmdW5jdGlvbiByZWFkVUludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgOCkgfCB0aGlzW29mZnNldCArIDFdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkxFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICgodGhpc1tvZmZzZXRdKSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikpICtcbiAgICAgICh0aGlzW29mZnNldCArIDNdICogMHgxMDAwMDAwKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdICogMHgxMDAwMDAwKSArXG4gICAgKCh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgIHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludExFID0gZnVuY3Rpb24gcmVhZEludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludEJFID0gZnVuY3Rpb24gcmVhZEludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoXG4gIHZhciBtdWwgPSAxXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIC0taV1cbiAgd2hpbGUgKGkgPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1pXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDggPSBmdW5jdGlvbiByZWFkSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICBpZiAoISh0aGlzW29mZnNldF0gJiAweDgwKSkgcmV0dXJuICh0aGlzW29mZnNldF0pXG4gIHJldHVybiAoKDB4ZmYgLSB0aGlzW29mZnNldF0gKyAxKSAqIC0xKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkxFID0gZnVuY3Rpb24gcmVhZEludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIDFdIHwgKHRoaXNbb2Zmc2V0XSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyTEUgPSBmdW5jdGlvbiByZWFkSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdKSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10gPDwgMjQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyQkUgPSBmdW5jdGlvbiByZWFkSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDI0KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0TEUgPSBmdW5jdGlvbiByZWFkRmxvYXRMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0QkUgPSBmdW5jdGlvbiByZWFkRmxvYXRCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVMRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgNTIsIDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUJFID0gZnVuY3Rpb24gcmVhZERvdWJsZUJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgNTIsIDgpXG59XG5cbmZ1bmN0aW9uIGNoZWNrSW50IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJidWZmZXJcIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJylcbiAgaWYgKHZhbHVlID4gbWF4IHx8IHZhbHVlIDwgbWluKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKVxuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgdmFyIG11bCA9IDFcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50OCA9IGZ1bmN0aW9uIHdyaXRlVUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHhmZiwgMClcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkgdmFsdWUgPSBNYXRoLmZsb29yKHZhbHVlKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5mdW5jdGlvbiBvYmplY3RXcml0ZVVJbnQxNiAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4pIHtcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmYgKyB2YWx1ZSArIDFcbiAgZm9yICh2YXIgaSA9IDAsIGogPSBNYXRoLm1pbihidWYubGVuZ3RoIC0gb2Zmc2V0LCAyKTsgaSA8IGo7ICsraSkge1xuICAgIGJ1ZltvZmZzZXQgKyBpXSA9ICh2YWx1ZSAmICgweGZmIDw8ICg4ICogKGxpdHRsZUVuZGlhbiA/IGkgOiAxIC0gaSkpKSkgPj4+XG4gICAgICAobGl0dGxlRW5kaWFuID8gaSA6IDEgLSBpKSAqIDhcbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5mdW5jdGlvbiBvYmplY3RXcml0ZVVJbnQzMiAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4pIHtcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIGZvciAodmFyIGkgPSAwLCBqID0gTWF0aC5taW4oYnVmLmxlbmd0aCAtIG9mZnNldCwgNCk7IGkgPCBqOyArK2kpIHtcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSAodmFsdWUgPj4+IChsaXR0bGVFbmRpYW4gPyBpIDogMyAtIGkpICogOCkgJiAweGZmXG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50TEUgPSBmdW5jdGlvbiB3cml0ZUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCAtIDEpXG5cbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBsaW1pdCAtIDEsIC1saW1pdClcbiAgfVxuXG4gIHZhciBpID0gMFxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gMFxuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgLSAxXSAhPT0gMCkge1xuICAgICAgc3ViID0gMVxuICAgIH1cbiAgICB0aGlzW29mZnNldCArIGldID0gKCh2YWx1ZSAvIG11bCkgPj4gMCkgLSBzdWIgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50QkUgPSBmdW5jdGlvbiB3cml0ZUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCAtIDEpXG5cbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBsaW1pdCAtIDEsIC1saW1pdClcbiAgfVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgKyAxXSAhPT0gMCkge1xuICAgICAgc3ViID0gMVxuICAgIH1cbiAgICB0aGlzW29mZnNldCArIGldID0gKCh2YWx1ZSAvIG11bCkgPj4gMCkgLSBzdWIgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50OCA9IGZ1bmN0aW9uIHdyaXRlSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweDdmLCAtMHg4MClcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkgdmFsdWUgPSBNYXRoLmZsb29yKHZhbHVlKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmYgKyB2YWx1ZSArIDFcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmZmZmZiArIHZhbHVlICsgMVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuZnVuY3Rpb24gY2hlY2tJRUVFNzU0IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxuICBpZiAob2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRmxvYXQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgNCwgMy40MDI4MjM0NjYzODUyODg2ZSszOCwgLTMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgpXG4gIH1cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgMjMsIDQpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdExFID0gZnVuY3Rpb24gd3JpdGVGbG9hdExFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0QkUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuZnVuY3Rpb24gd3JpdGVEb3VibGUgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgOCwgMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgsIC0xLjc5NzY5MzEzNDg2MjMxNTdFKzMwOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCA1MiwgOClcbiAgcmV0dXJuIG9mZnNldCArIDhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUxFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlQkUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG4vLyBjb3B5KHRhcmdldEJ1ZmZlciwgdGFyZ2V0U3RhcnQ9MCwgc291cmNlU3RhcnQ9MCwgc291cmNlRW5kPWJ1ZmZlci5sZW5ndGgpXG5CdWZmZXIucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiBjb3B5ICh0YXJnZXQsIHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKSB7XG4gIGlmICghc3RhcnQpIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCAmJiBlbmQgIT09IDApIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXRTdGFydCA+PSB0YXJnZXQubGVuZ3RoKSB0YXJnZXRTdGFydCA9IHRhcmdldC5sZW5ndGhcbiAgaWYgKCF0YXJnZXRTdGFydCkgdGFyZ2V0U3RhcnQgPSAwXG4gIGlmIChlbmQgPiAwICYmIGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIC8vIENvcHkgMCBieXRlczsgd2UncmUgZG9uZVxuICBpZiAoZW5kID09PSBzdGFydCkgcmV0dXJuIDBcbiAgaWYgKHRhcmdldC5sZW5ndGggPT09IDAgfHwgdGhpcy5sZW5ndGggPT09IDApIHJldHVybiAwXG5cbiAgLy8gRmF0YWwgZXJyb3IgY29uZGl0aW9uc1xuICBpZiAodGFyZ2V0U3RhcnQgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3RhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICB9XG4gIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzJylcbiAgaWYgKGVuZCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcycpXG5cbiAgLy8gQXJlIHdlIG9vYj9cbiAgaWYgKGVuZCA+IHRoaXMubGVuZ3RoKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0IDwgZW5kIC0gc3RhcnQpIHtcbiAgICBlbmQgPSB0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgKyBzdGFydFxuICB9XG5cbiAgdmFyIGxlbiA9IGVuZCAtIHN0YXJ0XG4gIHZhciBpXG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCAmJiBzdGFydCA8IHRhcmdldFN0YXJ0ICYmIHRhcmdldFN0YXJ0IDwgZW5kKSB7XG4gICAgLy8gZGVzY2VuZGluZyBjb3B5IGZyb20gZW5kXG4gICAgZm9yIChpID0gbGVuIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgIHRhcmdldFtpICsgdGFyZ2V0U3RhcnRdID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9IGVsc2UgaWYgKGxlbiA8IDEwMDAgfHwgIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgLy8gYXNjZW5kaW5nIGNvcHkgZnJvbSBzdGFydFxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgICAgdGFyZ2V0W2kgKyB0YXJnZXRTdGFydF0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoXG4gICAgICB0YXJnZXQsXG4gICAgICB0aGlzLnN1YmFycmF5KHN0YXJ0LCBzdGFydCArIGxlbiksXG4gICAgICB0YXJnZXRTdGFydFxuICAgIClcbiAgfVxuXG4gIHJldHVybiBsZW5cbn1cblxuLy8gVXNhZ2U6XG4vLyAgICBidWZmZXIuZmlsbChudW1iZXJbLCBvZmZzZXRbLCBlbmRdXSlcbi8vICAgIGJ1ZmZlci5maWxsKGJ1ZmZlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoc3RyaW5nWywgb2Zmc2V0WywgZW5kXV1bLCBlbmNvZGluZ10pXG5CdWZmZXIucHJvdG90eXBlLmZpbGwgPSBmdW5jdGlvbiBmaWxsICh2YWwsIHN0YXJ0LCBlbmQsIGVuY29kaW5nKSB7XG4gIC8vIEhhbmRsZSBzdHJpbmcgY2FzZXM6XG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIGlmICh0eXBlb2Ygc3RhcnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IHN0YXJ0XG4gICAgICBzdGFydCA9IDBcbiAgICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZW5kID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBlbmRcbiAgICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gICAgfVxuICAgIGlmICh2YWwubGVuZ3RoID09PSAxKSB7XG4gICAgICB2YXIgY29kZSA9IHZhbC5jaGFyQ29kZUF0KDApXG4gICAgICBpZiAoY29kZSA8IDI1Nikge1xuICAgICAgICB2YWwgPSBjb2RlXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBlbmNvZGluZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2VuY29kaW5nIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJyAmJiAhQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMjU1XG4gIH1cblxuICAvLyBJbnZhbGlkIHJhbmdlcyBhcmUgbm90IHNldCB0byBhIGRlZmF1bHQsIHNvIGNhbiByYW5nZSBjaGVjayBlYXJseS5cbiAgaWYgKHN0YXJ0IDwgMCB8fCB0aGlzLmxlbmd0aCA8IHN0YXJ0IHx8IHRoaXMubGVuZ3RoIDwgZW5kKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ091dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHN0YXJ0ID0gc3RhcnQgPj4+IDBcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyB0aGlzLmxlbmd0aCA6IGVuZCA+Pj4gMFxuXG4gIGlmICghdmFsKSB2YWwgPSAwXG5cbiAgdmFyIGlcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgICAgdGhpc1tpXSA9IHZhbFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgYnl0ZXMgPSBCdWZmZXIuaXNCdWZmZXIodmFsKVxuICAgICAgPyB2YWxcbiAgICAgIDogdXRmOFRvQnl0ZXMobmV3IEJ1ZmZlcih2YWwsIGVuY29kaW5nKS50b1N0cmluZygpKVxuICAgIHZhciBsZW4gPSBieXRlcy5sZW5ndGhcbiAgICBmb3IgKGkgPSAwOyBpIDwgZW5kIC0gc3RhcnQ7ICsraSkge1xuICAgICAgdGhpc1tpICsgc3RhcnRdID0gYnl0ZXNbaSAlIGxlbl1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpc1xufVxuXG4vLyBIRUxQRVIgRlVOQ1RJT05TXG4vLyA9PT09PT09PT09PT09PT09XG5cbnZhciBJTlZBTElEX0JBU0U2NF9SRSA9IC9bXitcXC8wLTlBLVphLXotX10vZ1xuXG5mdW5jdGlvbiBiYXNlNjRjbGVhbiAoc3RyKSB7XG4gIC8vIE5vZGUgc3RyaXBzIG91dCBpbnZhbGlkIGNoYXJhY3RlcnMgbGlrZSBcXG4gYW5kIFxcdCBmcm9tIHRoZSBzdHJpbmcsIGJhc2U2NC1qcyBkb2VzIG5vdFxuICBzdHIgPSBzdHJpbmd0cmltKHN0cikucmVwbGFjZShJTlZBTElEX0JBU0U2NF9SRSwgJycpXG4gIC8vIE5vZGUgY29udmVydHMgc3RyaW5ncyB3aXRoIGxlbmd0aCA8IDIgdG8gJydcbiAgaWYgKHN0ci5sZW5ndGggPCAyKSByZXR1cm4gJydcbiAgLy8gTm9kZSBhbGxvd3MgZm9yIG5vbi1wYWRkZWQgYmFzZTY0IHN0cmluZ3MgKG1pc3NpbmcgdHJhaWxpbmcgPT09KSwgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHdoaWxlIChzdHIubGVuZ3RoICUgNCAhPT0gMCkge1xuICAgIHN0ciA9IHN0ciArICc9J1xuICB9XG4gIHJldHVybiBzdHJcbn1cblxuZnVuY3Rpb24gc3RyaW5ndHJpbSAoc3RyKSB7XG4gIGlmIChzdHIudHJpbSkgcmV0dXJuIHN0ci50cmltKClcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJylcbn1cblxuZnVuY3Rpb24gdG9IZXggKG4pIHtcbiAgaWYgKG4gPCAxNikgcmV0dXJuICcwJyArIG4udG9TdHJpbmcoMTYpXG4gIHJldHVybiBuLnRvU3RyaW5nKDE2KVxufVxuXG5mdW5jdGlvbiB1dGY4VG9CeXRlcyAoc3RyaW5nLCB1bml0cykge1xuICB1bml0cyA9IHVuaXRzIHx8IEluZmluaXR5XG4gIHZhciBjb2RlUG9pbnRcbiAgdmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGhcbiAgdmFyIGxlYWRTdXJyb2dhdGUgPSBudWxsXG4gIHZhciBieXRlcyA9IFtdXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGNvZGVQb2ludCA9IHN0cmluZy5jaGFyQ29kZUF0KGkpXG5cbiAgICAvLyBpcyBzdXJyb2dhdGUgY29tcG9uZW50XG4gICAgaWYgKGNvZGVQb2ludCA+IDB4RDdGRiAmJiBjb2RlUG9pbnQgPCAweEUwMDApIHtcbiAgICAgIC8vIGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoIWxlYWRTdXJyb2dhdGUpIHtcbiAgICAgICAgLy8gbm8gbGVhZCB5ZXRcbiAgICAgICAgaWYgKGNvZGVQb2ludCA+IDB4REJGRikge1xuICAgICAgICAgIC8vIHVuZXhwZWN0ZWQgdHJhaWxcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKGkgKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAvLyB1bnBhaXJlZCBsZWFkXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHZhbGlkIGxlYWRcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIDIgbGVhZHMgaW4gYSByb3dcbiAgICAgIGlmIChjb2RlUG9pbnQgPCAweERDMDApIHtcbiAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gdmFsaWQgc3Vycm9nYXRlIHBhaXJcbiAgICAgIGNvZGVQb2ludCA9IChsZWFkU3Vycm9nYXRlIC0gMHhEODAwIDw8IDEwIHwgY29kZVBvaW50IC0gMHhEQzAwKSArIDB4MTAwMDBcbiAgICB9IGVsc2UgaWYgKGxlYWRTdXJyb2dhdGUpIHtcbiAgICAgIC8vIHZhbGlkIGJtcCBjaGFyLCBidXQgbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgIH1cblxuICAgIGxlYWRTdXJyb2dhdGUgPSBudWxsXG5cbiAgICAvLyBlbmNvZGUgdXRmOFxuICAgIGlmIChjb2RlUG9pbnQgPCAweDgwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDEpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goY29kZVBvaW50KVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHg4MDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiB8IDB4QzAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDMpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgfCAweEUwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSA0KSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHgxMiB8IDB4RjAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29kZSBwb2ludCcpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpVG9CeXRlcyAoc3RyKSB7XG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIC8vIE5vZGUncyBjb2RlIHNlZW1zIHRvIGJlIGRvaW5nIHRoaXMgYW5kIG5vdCAmIDB4N0YuLlxuICAgIGJ5dGVBcnJheS5wdXNoKHN0ci5jaGFyQ29kZUF0KGkpICYgMHhGRilcbiAgfVxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVUb0J5dGVzIChzdHIsIHVuaXRzKSB7XG4gIHZhciBjLCBoaSwgbG9cbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG5cbiAgICBjID0gc3RyLmNoYXJDb2RlQXQoaSlcbiAgICBoaSA9IGMgPj4gOFxuICAgIGxvID0gYyAlIDI1NlxuICAgIGJ5dGVBcnJheS5wdXNoKGxvKVxuICAgIGJ5dGVBcnJheS5wdXNoKGhpKVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiBiYXNlNjRUb0J5dGVzIChzdHIpIHtcbiAgcmV0dXJuIGJhc2U2NC50b0J5dGVBcnJheShiYXNlNjRjbGVhbihzdHIpKVxufVxuXG5mdW5jdGlvbiBibGl0QnVmZmVyIChzcmMsIGRzdCwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGlmICgoaSArIG9mZnNldCA+PSBkc3QubGVuZ3RoKSB8fCAoaSA+PSBzcmMubGVuZ3RoKSkgYnJlYWtcbiAgICBkc3RbaSArIG9mZnNldF0gPSBzcmNbaV1cbiAgfVxuICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiBpc25hbiAodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IHZhbCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxufVxuIiwiZXhwb3J0cy5yZWFkID0gZnVuY3Rpb24gKGJ1ZmZlciwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG1cbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIG5CaXRzID0gLTdcbiAgdmFyIGkgPSBpc0xFID8gKG5CeXRlcyAtIDEpIDogMFxuICB2YXIgZCA9IGlzTEUgPyAtMSA6IDFcbiAgdmFyIHMgPSBidWZmZXJbb2Zmc2V0ICsgaV1cblxuICBpICs9IGRcblxuICBlID0gcyAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBzID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBlTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSAoZSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBtID0gZSAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBlID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBtTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSAobSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXNcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiAoKHMgPyAtMSA6IDEpICogSW5maW5pdHkpXG4gIH0gZWxzZSB7XG4gICAgbSA9IG0gKyBNYXRoLnBvdygyLCBtTGVuKVxuICAgIGUgPSBlIC0gZUJpYXNcbiAgfVxuICByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIE1hdGgucG93KDIsIGUgLSBtTGVuKVxufVxuXG5leHBvcnRzLndyaXRlID0gZnVuY3Rpb24gKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtLCBjXG4gIHZhciBlTGVuID0gKG5CeXRlcyAqIDgpIC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBydCA9IChtTGVuID09PSAyMyA/IE1hdGgucG93KDIsIC0yNCkgLSBNYXRoLnBvdygyLCAtNzcpIDogMClcbiAgdmFyIGkgPSBpc0xFID8gMCA6IChuQnl0ZXMgLSAxKVxuICB2YXIgZCA9IGlzTEUgPyAxIDogLTFcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgKHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDApID8gMSA6IDBcblxuICB2YWx1ZSA9IE1hdGguYWJzKHZhbHVlKVxuXG4gIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgbSA9IGlzTmFOKHZhbHVlKSA/IDEgOiAwXG4gICAgZSA9IGVNYXhcbiAgfSBlbHNlIHtcbiAgICBlID0gTWF0aC5mbG9vcihNYXRoLmxvZyh2YWx1ZSkgLyBNYXRoLkxOMilcbiAgICBpZiAodmFsdWUgKiAoYyA9IE1hdGgucG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS1cbiAgICAgIGMgKj0gMlxuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gY1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIE1hdGgucG93KDIsIDEgLSBlQmlhcylcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKytcbiAgICAgIGMgLz0gMlxuICAgIH1cblxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDBcbiAgICAgIGUgPSBlTWF4XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICgodmFsdWUgKiBjKSAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSBlICsgZUJpYXNcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogTWF0aC5wb3coMiwgZUJpYXMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gMFxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IG0gJiAweGZmLCBpICs9IGQsIG0gLz0gMjU2LCBtTGVuIC09IDgpIHt9XG5cbiAgZSA9IChlIDw8IG1MZW4pIHwgbVxuICBlTGVuICs9IG1MZW5cbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBlICYgMHhmZiwgaSArPSBkLCBlIC89IDI1NiwgZUxlbiAtPSA4KSB7fVxuXG4gIGJ1ZmZlcltvZmZzZXQgKyBpIC0gZF0gfD0gcyAqIDEyOFxufVxuIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoYXJyKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGFycikgPT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG4iLCJpbXBvcnQgdHlwZSBPcGVuRmluIGZyb20gXCJAb3BlbmZpbi9jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IEFwcCwgQXBwSW50ZW50IH0gZnJvbSBcIkBvcGVuZmluL3dvcmtzcGFjZVwiO1xuaW1wb3J0IHsgQXBwTWFuaWZlc3RUeXBlLCBnZXRDdXJyZW50U3luYyB9IGZyb20gXCJAb3BlbmZpbi93b3Jrc3BhY2UtcGxhdGZvcm1cIjtcbmltcG9ydCB0eXBlIHsgQXBwUHJvdmlkZXJTZXR0aW5ncyB9IGZyb20gXCIuL3NoYXBlc1wiO1xuXG5sZXQgbGFzdENhY2hlVXBkYXRlOiBudW1iZXIgPSAwO1xubGV0IGNhY2hlZEFwcHM6IEFwcFtdID0gW107XG5cbi8qKlxuICogTG9hZCB0aGUgYXBwcyBmcm9tIHRoZSBqc29uIGZlZWRzIGNvbmZpZ3VyZWQgaW4gdGhlIGN1c3RvbSBzZXR0aW5ncy5cbiAqIEBwYXJhbSBhcHBTZXR0aW5ncyBUaGUgYXBwIHNldHRpbmdzIGZyb20gdGhlIG1hbmlmZXN0LlxuICogQHJldHVybnMgVGhlIGxpc3Qgb2YgYXBwcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEFwcHMoYXBwU2V0dGluZ3M6IEFwcFByb3ZpZGVyU2V0dGluZ3MgfCB1bmRlZmluZWQpOiBQcm9taXNlPEFwcFtdPiB7XG5cdGlmIChhcHBTZXR0aW5ncykge1xuXHRcdGNvbnN0IGNhY2hlRHVyYXRpb25Jbk1pbnV0ZXMgPSBhcHBTZXR0aW5ncz8uY2FjaGVEdXJhdGlvbkluTWludXRlcyA/PyAxO1xuXHRcdGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cdFx0aWYgKG5vdyAtIGxhc3RDYWNoZVVwZGF0ZSA+IGNhY2hlRHVyYXRpb25Jbk1pbnV0ZXMgKiA2MCAqIDEwMDApIHtcblx0XHRcdGxhc3RDYWNoZVVwZGF0ZSA9IG5vdztcblxuXHRcdFx0Y29uc29sZS5sb2coXCJSZXF1ZXN0aW5nIGFwcHMuXCIpO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bGV0IGFwcHM6IEFwcFtdID0gW107XG5cblx0XHRcdFx0aWYgKGFwcFNldHRpbmdzPy5hcHBTb3VyY2VVcmxzKSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCB1cmwgb2YgYXBwU2V0dGluZ3MuYXBwU291cmNlVXJscykge1xuXHRcdFx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHsgY3JlZGVudGlhbHM6IFwiaW5jbHVkZVwiIH0pO1xuXHRcdFx0XHRcdFx0Y29uc3QganNvbiA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblx0XHRcdFx0XHRcdGFwcHMgPSBhcHBzLmNvbmNhdChqc29uIGFzIEFwcFtdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjYWNoZWRBcHBzID0gYXdhaXQgdmFsaWRhdGVFbnRyaWVzKGFwcFNldHRpbmdzLCBhcHBzKTtcblx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRjb25zb2xlLmVycm9yKFwiRXJyb3IgcmV0cmlldmluZyBhcHBzLiBSZXR1cm5pbmcgZW1wdHkgbGlzdC5cIiwgZXJyKTtcblx0XHRcdFx0Y2FjaGVkQXBwcyA9IFtdO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRjb25zb2xlLndhcm4oXCJObyBhcHBQcm92aWRlciBzZXR0aW5ncyBpbiB0aGUgbWFuaWZlc3RcIik7XG5cdH1cblxuXHRyZXR1cm4gY2FjaGVkQXBwcztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSB0aGF0IHRoZSBhcHBzIGhhdmUgdGhlIGNvcnJlY3QgcGVybWlzc2lvbnMgZW5hYmxlZC5cbiAqIEBwYXJhbSBhcHBTZXR0aW5ncyBUaGUgYXBwIHNldHRpbmdzIGZyb20gdGhlIG1hbmlmZXN0LlxuICogQHBhcmFtIGFwcHMgVGhlIGFwcHMgdGhlIHZhbGlkYXRlLlxuICogQHJldHVybnMgVGhlIGxpc3Qgb2YgdmFsaWRhdGVkIGFwcHMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHZhbGlkYXRlRW50cmllcyhhcHBTZXR0aW5nczogQXBwUHJvdmlkZXJTZXR0aW5ncywgYXBwczogQXBwW10pOiBQcm9taXNlPEFwcFtdPiB7XG5cdGxldCBjYW5MYXVuY2hFeHRlcm5hbFByb2Nlc3NSZXNwb25zZTtcblxuXHR0cnkge1xuXHRcdGNhbkxhdW5jaEV4dGVybmFsUHJvY2Vzc1Jlc3BvbnNlID0gYXdhaXQgZmluLlN5c3RlbS5xdWVyeVBlcm1pc3Npb25Gb3JDdXJyZW50Q29udGV4dChcblx0XHRcdFwiU3lzdGVtLmxhdW5jaEV4dGVybmFsUHJvY2Vzc1wiXG5cdFx0KTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRjb25zb2xlLmVycm9yKFwiRXJyb3Igd2hpbGUgcXVlcnlpbmcgZm9yIFN5c3RlbS5sYXVuY2hFeHRlcm5hbFByb2Nlc3MgcGVybWlzc2lvblwiLCBlcnJvcik7XG5cdH1cblx0Y29uc3QgY2FuTGF1bmNoRXh0ZXJuYWxQcm9jZXNzID0gY2FuTGF1bmNoRXh0ZXJuYWxQcm9jZXNzUmVzcG9uc2U/LmdyYW50ZWQ7XG5cblx0bGV0IGNhbkRvd25sb2FkQXBwQXNzZXRzUmVzcG9uc2U7XG5cdHRyeSB7XG5cdFx0Y2FuRG93bmxvYWRBcHBBc3NldHNSZXNwb25zZSA9IGF3YWl0IGZpbi5TeXN0ZW0ucXVlcnlQZXJtaXNzaW9uRm9yQ3VycmVudENvbnRleHQoXCJTeXN0ZW0uZG93bmxvYWRBc3NldFwiKTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRjb25zb2xlLmVycm9yKFwiRXJyb3Igd2hpbGUgcXVlcnlpbmcgZm9yIFN5c3RlbS5kb3dubG9hZEFzc2V0IHBlcm1pc3Npb25cIiwgZXJyb3IpO1xuXHR9XG5cblx0Y29uc3QgY2FuRG93bmxvYWRBcHBBc3NldHMgPSBjYW5Eb3dubG9hZEFwcEFzc2V0c1Jlc3BvbnNlPy5ncmFudGVkO1xuXG5cdGNvbnN0IHZhbGlkYXRlZEFwcHM6IEFwcFtdID0gW107XG5cdGNvbnN0IHJlamVjdGVkQXBwSWRzID0gW107XG5cdGNvbnN0IGFwcEFzc2V0VGFnID0gXCJhcHBhc3NldFwiO1xuXHRjb25zdCBzdXBwb3J0ZWRNYW5pZmVzdFR5cGVzID0gYXBwU2V0dGluZ3M/Lm1hbmlmZXN0VHlwZXM7XG5cblx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGFwcHMpIHtcblx0XHRjb25zdCBtYW5pZmVzdFR5cGUgPSBlbGVtZW50Lm1hbmlmZXN0VHlwZTtcblx0XHRpZiAobWFuaWZlc3RUeXBlKSB7XG5cdFx0XHRsZXQgdmFsaWRBcHAgPSB0cnVlO1xuXHRcdFx0Y29uc3QgdGFncyA9IGVsZW1lbnQudGFncztcblxuXHRcdFx0aWYgKHN1cHBvcnRlZE1hbmlmZXN0VHlwZXMgIT09IHVuZGVmaW5lZCAmJiBzdXBwb3J0ZWRNYW5pZmVzdFR5cGVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0dmFsaWRBcHAgPSBzdXBwb3J0ZWRNYW5pZmVzdFR5cGVzLmluY2x1ZGVzKG1hbmlmZXN0VHlwZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh2YWxpZEFwcCkge1xuXHRcdFx0XHRpZiAoZWxlbWVudC5tYW5pZmVzdFR5cGUgIT09IFwiZXh0ZXJuYWxcIikge1xuXHRcdFx0XHRcdHZhbGlkYXRlZEFwcHMucHVzaChlbGVtZW50KTtcblx0XHRcdFx0fSBlbHNlIGlmIChjYW5MYXVuY2hFeHRlcm5hbFByb2Nlc3MgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0cmVqZWN0ZWRBcHBJZHMucHVzaChlbGVtZW50LmFwcElkKTtcblx0XHRcdFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRhZ3MpICYmIHRhZ3MuaW5jbHVkZXMoYXBwQXNzZXRUYWcpICYmIGNhbkRvd25sb2FkQXBwQXNzZXRzID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdHJlamVjdGVkQXBwSWRzLnB1c2goZWxlbWVudC5hcHBJZCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFsaWRhdGVkQXBwcy5wdXNoKGVsZW1lbnQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zb2xlLndhcm4oXG5cdFx0XHRcdFx0XCJBcHBzLnRzOiB2YWxpZGF0ZUVudHJpZXM6IEFwcGxpY2F0aW9uIGlzIG5vdCBpbiB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgbWFuaWZlc3QgdHlwZXNcIixcblx0XHRcdFx0XHRlbGVtZW50LmFwcElkLFxuXHRcdFx0XHRcdG1hbmlmZXN0VHlwZVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmIChyZWplY3RlZEFwcElkcy5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc29sZS53YXJuKFxuXHRcdFx0XCJBcHBzLnRzOiB2YWxpZGF0ZUVudHJpZXM6IE5vdCBwYXNzaW5nIHRoZSBmb2xsb3dpbmcgbGlzdCBvZiBhcHBsaWNhdGlvbnMgYXMgdGhleSB3aWxsIG5vdCBiZSBhYmxlIHRvIHJ1biBvbiB0aGlzIG1hY2hpbmUgZHVlIHRvIG1pc3NpbmcgcGVybWlzc2lvbnMuIEFsdGVybmF0aXZlbHkgdGhpcyBsb2dpYyBjb3VsZCBiZSBtb3ZlZCB0byB0aGUgbGF1bmNoIGZ1bmN0aW9uIHdoZXJlIGEgc2VsZWN0aW9uIGlzIG5vdCBsYXVuY2hlZCBidXQgdGhlIHVzZXIgaXMgcHJlc2VudGVkIHdpdGggYSBtb2RhbCBzYXlpbmcgdGhleSBjYW4ndCBsYXVuY2ggaXQgZHVlIHRvIHBlcm1pc3Npb25zLlwiLFxuXHRcdFx0cmVqZWN0ZWRBcHBJZHNcblx0XHQpO1xuXHR9XG5cblx0cmV0dXJuIHZhbGlkYXRlZEFwcHM7XG59XG5cbi8qKlxuICogTGF1bmNoIHRoZSBwYXNzZWQgYXBwIHVzaW5nIGl0cyBtYW5pZmVzdCB0eXBlIHRvIGRldGVybWluZSBob3cgdG8gbGF1bmNoIGl0LlxuICogQHBhcmFtIGFwcCBUaGUgYXBwIHRvIGxhdW5jaC5cbiAqIEByZXR1cm5zIFRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUgbGF1bmNoLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGF1bmNoQXBwKFxuXHRhcHA6IEFwcFxuKTogUHJvbWlzZTxPcGVuRmluLlBsYXRmb3JtIHwgT3BlbkZpbi5JZGVudGl0eSB8IE9wZW5GaW4uVmlldyB8IE9wZW5GaW4uQXBwbGljYXRpb24gfCB1bmRlZmluZWQ+IHtcblx0aWYgKCFhcHAubWFuaWZlc3QpIHtcblx0XHRjb25zb2xlLmVycm9yKGBObyBtYW5pZmVzdCB3YXMgcHJvdmlkZWQgZm9yIHR5cGUgJHthcHAubWFuaWZlc3RUeXBlfWApO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGxldCByZXQ6IE9wZW5GaW4uUGxhdGZvcm0gfCBPcGVuRmluLklkZW50aXR5IHwgT3BlbkZpbi5WaWV3IHwgT3BlbkZpbi5BcHBsaWNhdGlvbiB8IHVuZGVmaW5lZDtcblxuXHRjb25zb2xlLmxvZyhcIkFwcGxpY2F0aW9uIGxhdW5jaCByZXF1ZXN0ZWQ6XCIsIGFwcCk7XG5cblx0c3dpdGNoIChhcHAubWFuaWZlc3RUeXBlKSB7XG5cdFx0Y2FzZSBBcHBNYW5pZmVzdFR5cGUuU25hcHNob3Q6IHtcblx0XHRcdGNvbnN0IHBsYXRmb3JtID0gZ2V0Q3VycmVudFN5bmMoKTtcblx0XHRcdHJldCA9IGF3YWl0IHBsYXRmb3JtLmFwcGx5U25hcHNob3QoYXBwLm1hbmlmZXN0KTtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblxuXHRcdGNhc2UgQXBwTWFuaWZlc3RUeXBlLlZpZXc6IHtcblx0XHRcdGNvbnN0IHBsYXRmb3JtID0gZ2V0Q3VycmVudFN5bmMoKTtcblx0XHRcdHJldCA9IGF3YWl0IHBsYXRmb3JtLmNyZWF0ZVZpZXcoeyBtYW5pZmVzdFVybDogYXBwLm1hbmlmZXN0IH0pO1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXG5cdFx0Y2FzZSBBcHBNYW5pZmVzdFR5cGUuRXh0ZXJuYWw6IHtcblx0XHRcdHJldCA9IGF3YWl0IGZpbi5TeXN0ZW0ubGF1bmNoRXh0ZXJuYWxQcm9jZXNzKHsgcGF0aDogYXBwLm1hbmlmZXN0LCB1dWlkOiBhcHAuYXBwSWQgfSk7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHRjYXNlIFwid2luZG93XCI6IHtcblx0XHRcdGNvbnN0IG1hbmlmZXN0UmVzcG9uc2UgPSBhd2FpdCBmZXRjaChhcHAubWFuaWZlc3QpO1xuXHRcdFx0Y29uc3QgbWFuaWZlc3Q6IE9wZW5GaW4uV2luZG93T3B0aW9ucyA9IGF3YWl0IG1hbmlmZXN0UmVzcG9uc2UuanNvbigpO1xuXHRcdFx0Y29uc3QgcGxhdGZvcm0gPSBnZXRDdXJyZW50U3luYygpO1xuXHRcdFx0cmV0ID0gYXdhaXQgcGxhdGZvcm0uY3JlYXRlV2luZG93KG1hbmlmZXN0KTtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblxuXHRcdGNhc2UgXCJpbmxpbmUtYXBwYXNzZXRcIjoge1xuXHRcdFx0Y29uc3QgYXBwQXNzZXRJbmZvOiBPcGVuRmluLkFwcEFzc2V0SW5mbyA9IGFwcC5tYW5pZmVzdCBhcyB1bmtub3duIGFzIE9wZW5GaW4uQXBwQXNzZXRJbmZvO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgZmluLlN5c3RlbS5kb3dubG9hZEFzc2V0KGFwcEFzc2V0SW5mbywgKHByb2dyZXNzKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgZG93bmxvYWRlZFBlcmNlbnQgPSBNYXRoLmZsb29yKChwcm9ncmVzcy5kb3dubG9hZGVkQnl0ZXMgLyBwcm9ncmVzcy50b3RhbEJ5dGVzKSAqIDEwMCk7XG5cdFx0XHRcdFx0Y29uc29sZS5pbmZvKGBEb3dubG9hZGVkICR7ZG93bmxvYWRlZFBlcmNlbnR9JSBvZiBhcHAgYXNzZXQgd2l0aCBhcHBJZCBvZiAke2FwcC5hcHBJZH1gKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0cmV0ID0gYXdhaXQgZmluLlN5c3RlbS5sYXVuY2hFeHRlcm5hbFByb2Nlc3Moe1xuXHRcdFx0XHRcdGFsaWFzOiBhcHBBc3NldEluZm8uYWxpYXMsXG5cdFx0XHRcdFx0YXJndW1lbnRzOiBhcHBBc3NldEluZm8uYXJnc1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoYEVycm9yIHRyeWluZyB0byBkb3dubG9hZCBhcHAgYXNzZXQgd2l0aCBhcHAgaWQ6ICR7YXBwLmFwcElkfWAsIGVycm9yKTtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdH1cblxuXHRcdGRlZmF1bHQ6IHtcblx0XHRcdHJldCA9IGF3YWl0IGZpbi5BcHBsaWNhdGlvbi5zdGFydEZyb21NYW5pZmVzdChhcHAubWFuaWZlc3QpO1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0Y29uc29sZS5sb2coXCJGaW5pc2hlZCBhcHBsaWNhdGlvbiBsYXVuY2ggcmVxdWVzdFwiKTtcblxuXHRyZXR1cm4gcmV0O1xufVxuXG4vKipcbiAqIEdldCBhIHNpbmdsZSBhcHAgdXNpbmcgaXQncyBpZC5cbiAqIEBwYXJhbSBhcHBQcm92aWRlclNldHRpbmdzIFRoZSBhcHAgcHJvdmlkZXIgZm9yIHJldHJpZXZpbmcgdGhlIGFwcHMuXG4gKiBAcGFyYW0gYXBwSWQgVGhlIGlkIG9mIHRoZSBhcHAgdG8gcmV0cmlldmUuXG4gKiBAcmV0dXJucyBUaGUgYXBwIGlmIGl0IGV4aXN0cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEFwcChcblx0YXBwUHJvdmlkZXJTZXR0aW5nczogQXBwUHJvdmlkZXJTZXR0aW5ncyB8IHVuZGVmaW5lZCxcblx0YXBwSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxBcHAgfCB1bmRlZmluZWQ+IHtcblx0Y29uc3QgYXBwcyA9IGF3YWl0IGdldEFwcHMoYXBwUHJvdmlkZXJTZXR0aW5ncyk7XG5cdHJldHVybiBhcHBzLmZpbmQoKGVudHJ5KSA9PiBlbnRyeS5hcHBJZCA9PT0gYXBwSWQpO1xufVxuXG4vKipcbiAqIEdldCBhbGwgdGhlIGludGVudHMgdGhhdCBzdXBwb3J0IHRoZSByZXF1ZXN0ZWQgY29udGV4dC5cbiAqIEBwYXJhbSBhcHBQcm92aWRlclNldHRpbmdzIFRoZSBhcHAgcHJvdmlkZXIgZm9yIHJldHJpZXZpbmcgdGhlIGFwcHMuXG4gKiBAcGFyYW0gY29udGV4dFR5cGUgVGhlIGNvbnRleHQgdHlwZSB0byBmaW5kIHRoZSBpbnRlbnRzIGZvci5cbiAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIGludGVudHMgc3VwcG9ydGluZyB0aGUgY29udGV4dC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEludGVudHNCeUNvbnRleHQoXG5cdGFwcFByb3ZpZGVyU2V0dGluZ3M6IEFwcFByb3ZpZGVyU2V0dGluZ3MgfCB1bmRlZmluZWQsXG5cdGNvbnRleHRUeXBlOiBzdHJpbmdcbik6IFByb21pc2U8eyBpbnRlbnQ6IHsgbmFtZTogc3RyaW5nOyBkaXNwbGF5TmFtZTogc3RyaW5nIH07IGFwcHM6IEFwcFtdIH1bXT4ge1xuXHRjb25zdCBhcHBzID0gYXdhaXQgZ2V0QXBwcyhhcHBQcm92aWRlclNldHRpbmdzKTtcblxuXHRpZiAoIUFycmF5LmlzQXJyYXkoYXBwcykpIHtcblx0XHRjb25zb2xlLndhcm4oXCJVbmFibGUgdG8gZ2V0IGFwcHMgc28gd2UgY2FuIG5vdCBnZXQgYXBwcyBhbmQgaW50ZW50cyB0aGF0IHN1cHBvcnQgYSBwYXJ0aWN1bGFyIGNvbnRleHRcIik7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cblx0Y29uc3QgaW50ZW50c01hcDoge1xuXHRcdFtrZXk6IHN0cmluZ106IHtcblx0XHRcdGludGVudDogeyBuYW1lOiBzdHJpbmc7IGRpc3BsYXlOYW1lOiBzdHJpbmcgfTtcblx0XHRcdGFwcHM6IEFwcFtdO1xuXHRcdH07XG5cdH0gPSB7fTtcblxuXHRmb3IgKGNvbnN0IGFwcCBvZiBhcHBzKSB7XG5cdFx0aWYgKGFwcC5pbnRlbnRzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGZvciAoY29uc3QgYXBwSW50ZW50IG9mIGFwcC5pbnRlbnRzKSB7XG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGFwcEludGVudC5jb250ZXh0cykgJiYgYXBwSW50ZW50LmNvbnRleHRzLmluY2x1ZGVzKGNvbnRleHRUeXBlKSkge1xuXHRcdFx0XHRcdHVwZGF0ZUFwcEludGVudHNFbnRyeShpbnRlbnRzTWFwLCBhcHBJbnRlbnQsIGFwcCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0LnZhbHVlcyhpbnRlbnRzTWFwKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGxpc3Qgb2YgYXBwcyB0aGF0IHN1cHBvcnQgYSBzcGVjaWZpYyBpbnRlbnQuXG4gKiBAcGFyYW0gYXBwUHJvdmlkZXJTZXR0aW5ncyBUaGUgYXBwIHByb3ZpZGVyIGZvciByZXRyaWV2aW5nIHRoZSBhcHBzLlxuICogQHBhcmFtIGludGVudCBUaGUgaW50ZW50cyB0byBmaW5kIHN1cHBvcnRlZCBhcHBzLlxuICogQHJldHVybnMgVGhlIGxpc3Qgb2YgYXBwIHRoYXQgc3VwcG9ydCB0aGUgaW50ZW50LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QXBwc0J5SW50ZW50KFxuXHRhcHBQcm92aWRlclNldHRpbmdzOiBBcHBQcm92aWRlclNldHRpbmdzIHwgdW5kZWZpbmVkLFxuXHRpbnRlbnQ6IHN0cmluZ1xuKTogUHJvbWlzZTxBcHBbXT4ge1xuXHRjb25zdCBhcHBzID0gYXdhaXQgZ2V0QXBwcyhhcHBQcm92aWRlclNldHRpbmdzKTtcblxuXHRyZXR1cm4gYXBwcy5maWx0ZXIoKHZhbHVlKSA9PiB7XG5cdFx0aWYgKCFBcnJheS5pc0FycmF5KHZhbHVlLmludGVudHMpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGZvciAoY29uc3QgdmFsdWVJbnRlbnQgb2YgdmFsdWUuaW50ZW50cykge1xuXHRcdFx0aWYgKHZhbHVlSW50ZW50Lm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gaW50ZW50LnRvTG93ZXJDYXNlKCkpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59XG5cbi8qKlxuICogR2V0IGFuIGludGVudCBhbmQgdGhlIGFwcHMgdGhhdCBzdXBwb3J0IGl0LlxuICogQHBhcmFtIGFwcFByb3ZpZGVyU2V0dGluZ3MgVGhlIGFwcCBwcm92aWRlciBmb3IgcmV0cmlldmluZyB0aGUgYXBwcy5cbiAqIEBwYXJhbSBpbnRlbnQgVGhlIGludGVudCB0byBsb29rIGZvci5cbiAqIEBwYXJhbSBjb250ZXh0VHlwZSBPcHRpb25hbCBjb250ZXh0IHR5cGUgdG8gbG9vayBmb3IuXG4gKiBAcmV0dXJucyBUaGUgaW50ZW50IGFuZCBpdHMgc3VwcG9ydGluZyBhcHBzIGlmIGZvdW5kLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0SW50ZW50KFxuXHRhcHBQcm92aWRlclNldHRpbmdzOiBBcHBQcm92aWRlclNldHRpbmdzIHwgdW5kZWZpbmVkLFxuXHRpbnRlbnQ6IHN0cmluZyxcblx0Y29udGV4dFR5cGU/OiBzdHJpbmdcbik6IFByb21pc2U8eyBpbnRlbnQ6IHsgbmFtZTogc3RyaW5nOyBkaXNwbGF5TmFtZTogc3RyaW5nIH07IGFwcHM6IEFwcFtdIH0gfCB1bmRlZmluZWQ+IHtcblx0Y29uc3QgYXBwcyA9IGF3YWl0IGdldEFwcHMoYXBwUHJvdmlkZXJTZXR0aW5ncyk7XG5cblx0aWYgKCFBcnJheS5pc0FycmF5KGFwcHMpKSB7XG5cdFx0Y29uc29sZS53YXJuKFwiVGhlcmUgd2FzIG5vIGFwcHMgcmV0dXJuZWQgc28gd2UgYXJlIHVuYWJsZSB0byBmaW5kIGFwcHMgdGhhdCBzdXBwb3J0IGFuIGludGVudC5cIik7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgaW50ZW50c01hcDoge1xuXHRcdFtrZXk6IHN0cmluZ106IHtcblx0XHRcdGludGVudDogeyBuYW1lOiBzdHJpbmc7IGRpc3BsYXlOYW1lOiBzdHJpbmcgfTtcblx0XHRcdGFwcHM6IEFwcFtdO1xuXHRcdH07XG5cdH0gPSB7fTtcblxuXHRmb3IgKGNvbnN0IGFwcCBvZiBhcHBzKSB7XG5cdFx0aWYgKGFwcC5pbnRlbnRzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGZvciAoY29uc3QgYXBwSW50ZW50IG9mIGFwcC5pbnRlbnRzKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRhcHBJbnRlbnQubmFtZSA9PT0gaW50ZW50ICYmXG5cdFx0XHRcdFx0KGNvbnRleHRUeXBlID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0XHRcdChBcnJheS5pc0FycmF5KGFwcEludGVudC5jb250ZXh0cykgJiYgYXBwSW50ZW50LmNvbnRleHRzLmluY2x1ZGVzKGNvbnRleHRUeXBlKSkpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHVwZGF0ZUFwcEludGVudHNFbnRyeShpbnRlbnRzTWFwLCBhcHBJbnRlbnQsIGFwcCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRjb25zdCByZXN1bHRzID0gT2JqZWN0LnZhbHVlcyhpbnRlbnRzTWFwKTtcblx0aWYgKHJlc3VsdHMubGVuZ3RoID09PSAwKSB7XG5cdFx0Y29uc29sZS5sb2coYE5vIHJlc3VsdHMgZm91bmQgZm9yIGZpbmRJbnRlbnQgZm9yIGludGVudCAke2ludGVudH0gYW5kIGNvbnRleHQgJHtjb250ZXh0VHlwZX1gKTtcblx0XHRyZXR1cm47XG5cdH0gZWxzZSBpZiAocmVzdWx0cy5sZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gcmVzdWx0c1swXTtcblx0fVxuXHRjb25zb2xlLndhcm4oXG5cdFx0YFJlY2VpdmVkIG1vcmUgdGhhbiBvbmUgcmVzdWx0IGZvciBmaW5kSW50ZW50IGZvciBpbnRlbnQgJHtpbnRlbnR9IGFuZCBjb250ZXh0ICR7Y29udGV4dFR5cGV9LiBSZXR1cm5pbmcgdGhlIGZpcnN0IGVudHJ5LmBcblx0KTtcblx0cmV0dXJuIHJlc3VsdHNbMF07XG59XG5cbi8qKlxuICogVXBkYXRlIHRoZSBlbnRyeSBmb3Iga2VlcGluZyB0cmFja2luZyBvZiBzdXBwb3J0ZWQgYXBwcyBmb3IgaW50ZW50cy5cbiAqIEBwYXJhbSBpbnRlbnRzTWFwIFRoZSBtYXAgb2YgaW50ZW50cy5cbiAqIEBwYXJhbSBpbnRlbnQgVGhlIGludGVudCB0byBhcHAgYW4gZW50cnkgZm9yLlxuICogQHBhcmFtIGFwcCBUaGUgYXBwbGljYXRpb24gc3VwcG9ydGluZyB0aGUgaW50ZW50LlxuICovXG5mdW5jdGlvbiB1cGRhdGVBcHBJbnRlbnRzRW50cnkoXG5cdGludGVudHNNYXA6IHtcblx0XHRba2V5OiBzdHJpbmddOiB7XG5cdFx0XHRpbnRlbnQ6IHsgbmFtZTogc3RyaW5nOyBkaXNwbGF5TmFtZTogc3RyaW5nIH07XG5cdFx0XHRhcHBzOiBBcHBbXTtcblx0XHR9O1xuXHR9LFxuXHRpbnRlbnQ6IEFwcEludGVudCxcblx0YXBwOiBBcHBcbik6IHZvaWQge1xuXHRpZiAoaW50ZW50c01hcFtpbnRlbnQubmFtZV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdC8vIGluIGEgcHJvZHVjdGlvbiBhcHAgeW91IHdvdWxkIGVpdGhlciBuZWVkIHRvIGVuc3VyZSB0aGF0IGV2ZXJ5IGFwcCB3YXMgcG9wdWxhdGVkIHdpdGggdGhlIHNhbWUgbmFtZSAmIGRpc3BsYXlOYW1lIGZvciBhbiBpbnRlbnQgZnJvbSBhIGdvbGRlbiBzb3VyY2UgKGUuZy4gaW50ZW50cyB0YWJsZSkgc28gcGlja2luZyB0aGUgZmlyc3QgZW50cnkgd291bGRuJ3QgbWFrZSBhIGRpZmZlcmVuY2UuXG5cdFx0Ly8gb3IgeW91IGNvdWxkIHB1bGwgaW4gYSBnb2xkZW4gc291cmNlIG9mIGludGVudHMgZnJvbSBhIHNlcnZpY2UgYW5kIHRoZW4gZG8gYSBsb29rdXAgdXNpbmcgdGhlIGludGVudCBuYW1lIHRvIGdldCBhbiBvYmplY3Qgd2l0aCBpbnRlbnQgbmFtZSBhbmQgb2ZmaWNpYWwgZGlzcGxheSBuYW1lLlxuXHRcdGludGVudHNNYXBbaW50ZW50Lm5hbWVdID0ge1xuXHRcdFx0aW50ZW50OiB7XG5cdFx0XHRcdG5hbWU6IGludGVudC5uYW1lLFxuXHRcdFx0XHRkaXNwbGF5TmFtZTogaW50ZW50LmRpc3BsYXlOYW1lXG5cdFx0XHR9LFxuXHRcdFx0YXBwczogW11cblx0XHR9O1xuXHR9XG5cdGludGVudHNNYXBbaW50ZW50Lm5hbWVdLmFwcHMucHVzaChhcHApO1xufVxuIiwiaW1wb3J0IHR5cGUgT3BlbkZpbiBmcm9tIFwiQG9wZW5maW4vY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tIFwiQG9wZW5maW4vd29ya3NwYWNlXCI7XG5pbXBvcnQge1xuXHRnZXRDdXJyZW50U3luYyxcblx0dHlwZSBBcHBJbnRlbnQsXG5cdHR5cGUgQnJvd3NlclNuYXBzaG90LFxuXHR0eXBlIFBhZ2VMYXlvdXRcbn0gZnJvbSBcIkBvcGVuZmluL3dvcmtzcGFjZS1wbGF0Zm9ybVwiO1xuaW1wb3J0IHsgZ2V0QXBwLCBnZXRBcHBzQnlJbnRlbnQsIGdldEludGVudCwgZ2V0SW50ZW50c0J5Q29udGV4dCB9IGZyb20gXCIuL2FwcHNcIjtcbmltcG9ydCB0eXBlIHsgQ3VzdG9tU2V0dGluZ3MgfSBmcm9tIFwiLi9zaGFwZXNcIjtcblxuY29uc3QgTk9fQVBQU19GT1VORCA9IFwiTm9BcHBzRm91bmRcIjtcbmNvbnN0IFJFU09MVkVSX1RJTUVPVVQgPSBcIlJlc29sdmVyVGltZW91dFwiO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBvdmVycmlkZSBmb3IgdGhlIHBsYXRmb3JtIGludGVyb3AuXG4gKiBAcGFyYW0gY3VzdG9tU2V0dGluZ3MgQ3VzdG9tIHNldHRpbmdzIHRvIGluaXRpYWxpemUgdGhlIHBsYXRmb3JtLlxuICogQHJldHVybnMgVGhlIG92ZXJyaWRlIGZvciB0aGUgaW50ZXJvcCBicm9rZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJbnRlcm9wT3ZlcnJpZGUoXG5cdGN1c3RvbVNldHRpbmdzOiBDdXN0b21TZXR0aW5nc1xuKTogT3BlbkZpbi5Db25zdHJ1Y3Rvck92ZXJyaWRlPE9wZW5GaW4uSW50ZXJvcEJyb2tlcj4ge1xuXHRyZXR1cm4gKEJhc2U6IE9wZW5GaW4uQ29uc3RydWN0b3I8T3BlbkZpbi5JbnRlcm9wQnJva2VyPikgPT5cblx0XHQvKipcblx0XHQgKiBJbiBJbnRlcm9wIEJyb2tlciBJbXBsZW1lbnRhdGlvbiB0aGF0IHN1cHBvcnRzIGZkYzMgMS4yXG5cdFx0ICovXG5cdFx0Y2xhc3MgSW50ZXJvcE92ZXJyaWRlIGV4dGVuZHMgQmFzZSB7XG5cdFx0XHQvKipcblx0XHRcdCAqIExhdW5jaCBhbiBhcHBsaWNhdGlvbnMgd2l0aCBhIHNwZWNpZmljIGludGVudC5cblx0XHRcdCAqIEBwYXJhbSBhcHAgVGhlIGFwcCB0byBsYXVuY2guXG5cdFx0XHQgKiBAcGFyYW0gaW50ZW50IFRoZSBpbnRlbnQgdG8gbGF1bmNoIHRoZSBhcHAgd2l0aC5cblx0XHRcdCAqIEByZXR1cm5zIFRoZSBzb3VyY2UgYW5kIHZlcnNpb24gb2YgdGhlIGFwcCB0aGF0IHdhcyBsYXVuY2hlZCBpZiB0aGVyZSB3YXMgb25lLlxuXHRcdFx0ICovXG5cdFx0XHRwdWJsaWMgYXN5bmMgbGF1bmNoQXBwV2l0aEludGVudChcblx0XHRcdFx0YXBwOiBBcHAsXG5cdFx0XHRcdGludGVudDogT3BlbkZpbi5JbnRlbnRcblx0XHRcdCk6IFByb21pc2U8XG5cdFx0XHRcdHwge1xuXHRcdFx0XHRcdFx0c291cmNlOiBzdHJpbmc7XG5cdFx0XHRcdFx0XHR2ZXJzaW9uPzogc3RyaW5nO1xuXHRcdFx0XHQgIH1cblx0XHRcdFx0fCB1bmRlZmluZWRcblx0XHRcdD4ge1xuXHRcdFx0XHRjb25zb2xlLmxvZyhcIkxhdW5jaGluZyBhcHAgd2l0aCBpbnRlbnQuXCIpO1xuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRhcHAubWFuaWZlc3RUeXBlICE9PSBcInZpZXdcIiAmJlxuXHRcdFx0XHRcdGFwcC5tYW5pZmVzdFR5cGUgIT09IFwiaW5saW5lLXZpZXdcIiAmJlxuXHRcdFx0XHRcdGFwcC5tYW5pZmVzdFR5cGUgIT09IFwic25hcHNob3RcIlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHQvLyBvcHRpb25hbCBsb2dpYyBzaG93IGEgcHJvbXB0IHRvIHRoZSB1c2VyIHRvIGxldCB0aGVtIGtub3dcblx0XHRcdFx0XHRjb25zb2xlLndhcm4oXCJVbmFibGUgdG8gcmFpc2UgaW50ZW50IGFnYWluc3QgYXBwIGFzIG9ubHkgdmlldy9zbmFwc2hvdCBiYXNlZCBhcHBzIGFyZSBzdXBwb3J0ZWQuXCIpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChhcHAubWFuaWZlc3RUeXBlID09PSBcInZpZXdcIiB8fCBhcHAubWFuaWZlc3RUeXBlID09PSBcImlubGluZS12aWV3XCIpIHtcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhgVGhlIHN1cHBvcnRpbmcgYXBwIGlzIGEgdmlldyAoJHthcHAubWFuaWZlc3RUeXBlfSlgKTtcblxuXHRcdFx0XHRcdGNvbnN0IGlkZW50aXR5ID0gYXdhaXQgbGF1bmNoVmlldyhhcHApO1xuXHRcdFx0XHRcdGlmICghaWRlbnRpdHkpIHtcblx0XHRcdFx0XHRcdC8vIG9wdGlvbmFsIGxvZ2ljIHNob3cgYSBwcm9tcHQgdG8gdGhlIHVzZXIgdG8gbGV0IHRoZW0ga25vd1xuXHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKFwiVW5hYmxlIHRvIHJhaXNlIGludGVudCBhZ2FpbnN0IHZpZXcgYXMgbm8gaWRlbnRpdHkgd2FzIHJldHVybmVkLlwiKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YXdhaXQgc3VwZXIuc2V0SW50ZW50VGFyZ2V0KGludGVudCwgaWRlbnRpdHkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGFwcC5tYW5pZmVzdFR5cGUgPT09IFwic25hcHNob3RcIikge1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKFwiVGhlIHN1cHBvcnRpbmcgYXBwIGlzIGEgdmlldy5cIik7XG5cblx0XHRcdFx0XHRjb25zdCBpZGVudGl0aWVzID0gYXdhaXQgbGF1bmNoU25hcHNob3QoYXBwKTtcblx0XHRcdFx0XHRpZiAoIWlkZW50aXRpZXMpIHtcblx0XHRcdFx0XHRcdC8vIG9wdGlvbmFsIGxvZ2ljIHNob3cgYSBwcm9tcHQgdG8gdGhlIHVzZXIgdG8gbGV0IHRoZW0ga25vd1xuXHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKFwiVW5hYmxlIHRvIHJhaXNlIGludGVudCBhZ2FpbnN0IHRhcmdldCBhcyBubyBpZGVudGl0eSB3YXMgcmV0dXJuZWQuXCIpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRmb3IgKGNvbnN0IGlkZW50aXR5IG9mIGlkZW50aXRpZXMpIHtcblx0XHRcdFx0XHRcdGF3YWl0IHN1cGVyLnNldEludGVudFRhcmdldChpbnRlbnQsIGlkZW50aXR5KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdHNvdXJjZTogYXBwLmFwcElkLFxuXHRcdFx0XHRcdHZlcnNpb246IGFwcC52ZXJzaW9uXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdC8qKlxuXHRcdFx0ICogR2V0IHRoZSB0YXJnZXQgaWRlbnRpdHkgb2YgdGhlIHJlcXVlc3RlZCBhcHAuXG5cdFx0XHQgKiBAcGFyYW0gYXBwSWQgVGhlIGFwcCBpZCB0byBnZXQgdGhlIHRhcmdldCBmb3IuXG5cdFx0XHQgKiBAcmV0dXJucyBUaGUgaWRlbnRpdHkgb2YgdGhlIHRhcmdldCBhcHAuXG5cdFx0XHQgKi9cblx0XHRcdHB1YmxpYyBhc3luYyBnZXRUYXJnZXRJZGVudGl0eShhcHBJZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxPcGVuRmluLklkZW50aXR5IHwgdW5kZWZpbmVkPiB7XG5cdFx0XHRcdGlmICghYXBwSWQpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcGFzc2VkSWRlbnRpdHkgPSBhcHBJZC5zcGxpdChcIkBcIik7XG5cdFx0XHRcdGNvbnN0IG5hbWUgPSBwYXNzZWRJZGVudGl0eVswXTtcblx0XHRcdFx0bGV0IHV1aWQgPSBmaW4ubWUuaWRlbnRpdHkudXVpZDtcblx0XHRcdFx0aWYgKHBhc3NlZElkZW50aXR5Lmxlbmd0aCA9PT0gMikge1xuXHRcdFx0XHRcdHV1aWQgPSBwYXNzZWRJZGVudGl0eVsxXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByZXNvbHZlZElkZW50aXR5ID0geyB1dWlkLCBuYW1lIH07XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRjb25zdCB0YXJnZXRWaWV3ID0gYXdhaXQgZmluLlZpZXcud3JhcCh7IHV1aWQsIG5hbWUgfSk7XG5cdFx0XHRcdFx0YXdhaXQgdGFyZ2V0Vmlldy5nZXRJbmZvKCk7XG5cdFx0XHRcdFx0Ly8gcGFzc2VkIGlkZW50aXR5IGZvdW5kXG5cdFx0XHRcdFx0cmV0dXJuIHJlc29sdmVkSWRlbnRpdHk7XG5cdFx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRcdC8vIHBhc3NlZCBpZGVudGl0eSBkb2VzIG5vdCBleGlzdFxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8qKlxuXHRcdFx0ICogTGF1bmNoIGEgcGlja2VyIHRvIGNob3NlIGFuIGFwcGxpY2F0aW9uIGZvciBhbiBpbnRlbnQuXG5cdFx0XHQgKiBAcGFyYW0gbGF1bmNoT3B0aW9ucyBUaGUgbGF1bmNoIG9wdGlvbnMgZm9yIHRoZSBhcHAuXG5cdFx0XHQgKiBAcGFyYW0gbGF1bmNoT3B0aW9ucy5hcHBzIFRoZSBvcHRpb25hbCBsaXN0IG9mIGFwcHMgdG8gZGlzcGxheS5cblx0XHRcdCAqIEBwYXJhbSBsYXVuY2hPcHRpb25zLmludGVudCBUaGUgb3B0aW9uYWwgaW50ZW50IHRvIHN1cHBvcnQuXG5cdFx0XHQgKiBAcGFyYW0gbGF1bmNoT3B0aW9ucy5pbnRlbnRzIFRoZSBvcHRpb25hbCBpbnRlbnRzIHRvIHBpY2sgZnJvbS5cblx0XHRcdCAqIEByZXR1cm5zIFRoZSBwaWNrZWQgYXBwLlxuXHRcdFx0ICovXG5cdFx0XHRwdWJsaWMgYXN5bmMgbGF1bmNoQXBwUGlja2VyKGxhdW5jaE9wdGlvbnM6IHtcblx0XHRcdFx0YXBwcz86IEFwcFtdO1xuXHRcdFx0XHRpbnRlbnQ/OiBQYXJ0aWFsPEFwcEludGVudD47XG5cdFx0XHRcdGludGVudHM/OiB7IGludGVudDogUGFydGlhbDxBcHBJbnRlbnQ+OyBhcHBzOiBBcHBbXSB9W107XG5cdFx0XHR9KTogUHJvbWlzZTxcblx0XHRcdFx0fCB7XG5cdFx0XHRcdFx0XHRhcHBJZDogc3RyaW5nO1xuXHRcdFx0XHRcdFx0aW50ZW50OiBQYXJ0aWFsPEFwcEludGVudD47XG5cdFx0XHRcdCAgfVxuXHRcdFx0XHR8IHVuZGVmaW5lZFxuXHRcdFx0PiB7XG5cdFx0XHRcdC8vIHNob3cgbWVudVxuXHRcdFx0XHQvLyBsYXVuY2ggYSBuZXcgd2luZG93IGFuZCBvcHRpb25hbGx5IHBhc3MgdGhlIGF2YWlsYWJsZSBpbnRlbnRzIGFzIGN1c3RvbURhdGEuYXBwcyBhcyBwYXJ0IG9mIHRoZSB3aW5kb3cgb3B0aW9uc1xuXHRcdFx0XHQvLyB0aGUgd2luZG93IGNhbiB0aGVuIHVzZSByYWlzZUludGVudCBhZ2FpbnN0IGEgc3BlY2lmaWMgYXBwICh0aGUgc2VsZWN0ZWQgb25lKS4gVGhpcyBpcyBhIHZlcnkgYmFzaWMgZXhhbXBsZS5cblx0XHRcdFx0Y29uc3QgaGVpZ2h0ID0gY3VzdG9tU2V0dGluZ3M/LnBsYXRmb3JtUHJvdmlkZXI/LmludGVudFBpY2tlcj8uaGVpZ2h0ID8/IDQwMDtcblx0XHRcdFx0Y29uc3Qgd2lkdGggPSBjdXN0b21TZXR0aW5ncz8ucGxhdGZvcm1Qcm92aWRlcj8uaW50ZW50UGlja2VyPy53aWR0aCA/PyA0MDA7XG5cblx0XHRcdFx0Ly8gdGhpcyBsb2dpYyBydW5zIGluIHRoZSBwcm92aWRlciBzbyB3ZSBhcmUgdXNpbmcgaXQgYXMgYSB3YXkgb2YgZGV0ZXJtaW5pbmcgdGhlIHJvb3QgKHNvIGl0IHdvcmtzIHdpdGggcm9vdCBob3N0aW5nIGFuZCBzdWJkaXJlY3RvcnkgYmFzZWQgaG9zdGluZyBpZiBhIHVybCBpcyBub3QgcHJvdmlkZWQpXG5cdFx0XHRcdGNvbnN0IHVybCA9XG5cdFx0XHRcdFx0Y3VzdG9tU2V0dGluZ3M/LnBsYXRmb3JtUHJvdmlkZXI/LmludGVudFBpY2tlcj8udXJsID8/XG5cdFx0XHRcdFx0XCJodHRwOi8vbG9jYWxob3N0OjgwODAvY29tbW9uL3dpbmRvd3MvaW50ZW50cy9waWNrZXIuaHRtbFwiO1xuXG5cdFx0XHRcdGNvbnN0IHdpbk9wdGlvbjogT3BlbkZpbi5XaW5kb3dDcmVhdGlvbk9wdGlvbnMgPSB7XG5cdFx0XHRcdFx0bmFtZTogXCJpbnRlbnQtcGlja2VyXCIsXG5cdFx0XHRcdFx0aW5jbHVkZUluU25hcHNob3RzOiBmYWxzZSxcblx0XHRcdFx0XHRmZGMzSW50ZXJvcEFwaTogXCIxLjJcIixcblx0XHRcdFx0XHRkZWZhdWx0V2lkdGg6IHdpZHRoLFxuXHRcdFx0XHRcdGRlZmF1bHRIZWlnaHQ6IGhlaWdodCxcblx0XHRcdFx0XHRzaG93VGFza2Jhckljb246IGZhbHNlLFxuXHRcdFx0XHRcdHNhdmVXaW5kb3dTdGF0ZTogZmFsc2UsXG5cdFx0XHRcdFx0ZGVmYXVsdENlbnRlcmVkOiB0cnVlLFxuXHRcdFx0XHRcdGN1c3RvbURhdGE6IHtcblx0XHRcdFx0XHRcdGFwcHM6IGxhdW5jaE9wdGlvbnMuYXBwcyxcblx0XHRcdFx0XHRcdGludGVudDogbGF1bmNoT3B0aW9ucy5pbnRlbnQsXG5cdFx0XHRcdFx0XHRpbnRlbnRzOiBsYXVuY2hPcHRpb25zLmludGVudHNcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHVybCxcblx0XHRcdFx0XHRmcmFtZTogZmFsc2UsXG5cdFx0XHRcdFx0YXV0b1Nob3c6IHRydWUsXG5cdFx0XHRcdFx0YWx3YXlzT25Ub3A6IHRydWVcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRjb25zdCB3aW4gPSBhd2FpdCBmaW4uV2luZG93LmNyZWF0ZSh3aW5PcHRpb24pO1xuXHRcdFx0XHRjb25zdCB3ZWJXaW5kb3cgPSB3aW4uZ2V0V2ViV2luZG93KCk7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblx0XHRcdFx0XHRjb25zdCBnZXRJbnRlbnRTZWxlY3Rpb24gPSAod2ViV2luZG93IGFzIGFueSkuZ2V0SW50ZW50U2VsZWN0aW9uO1xuXG5cdFx0XHRcdFx0aWYgKGdldEludGVudFNlbGVjdGlvbikge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc2VsZWN0ZWRBcHBJZCA9IGF3YWl0IGdldEludGVudFNlbGVjdGlvbigpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNlbGVjdGVkQXBwSWQgYXMge1xuXHRcdFx0XHRcdFx0XHRhcHBJZDogc3RyaW5nO1xuXHRcdFx0XHRcdFx0XHRpbnRlbnQ6IEFwcEludGVudDtcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKFwiQXBwIGZvciBpbnRlbnQgbm90IHNlbGVjdGVkL2xhdW5jaGVkLlwiLCBsYXVuY2hPcHRpb25zLmludGVudCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBJcyB0aGUgY29ubmVjdGlvbiBmb3IgdGhlIHNwZWNpZmljIGlkZW50aXR5IGF1dGhvcml6ZWQuXG5cdFx0XHQgKiBAcGFyYW0gaWRlbnRpdHkgVGhlIGlkZW50aXR5IG9mIHRoZSBjb25uZWN0aW9uIHRvIGNoZWNrLlxuXHRcdFx0ICogQHBhcmFtIHBheWxvYWQgVGhlIG9wdGlvbmFsIHBheWxvYWQuXG5cdFx0XHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBjb25uZWN0aW9uIGlzIGF1dGhvcml6ZWQuXG5cdFx0XHQgKi9cblx0XHRcdHB1YmxpYyBhc3luYyBpc0Nvbm5lY3Rpb25BdXRob3JpemVkKGlkZW50aXR5OiBPcGVuRmluLklkZW50aXR5LCBwYXlsb2FkPzogdW5rbm93bik6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdFx0XHRjb25zb2xlLmxvZyhcblx0XHRcdFx0XHRcIkludGVyb3AgY29ubmVjdGlvbiBiZWluZyBtYWRlIGJ5IHRoZSBmb2xsb3dpbmcgaWRlbnRpdHkgd2l0aCBwYXlsb2FkOlwiLFxuXHRcdFx0XHRcdGlkZW50aXR5LFxuXHRcdFx0XHRcdHBheWxvYWRcblx0XHRcdFx0KTtcblx0XHRcdFx0Ly8gcGVyZm9ybSBjb25uZWN0aW9uIHZhbGlkYXRpb24gY2hlY2tzIGhlcmUgaWYgcmVxdWlyZWQgYW5kIHJldHVybiBmYWxzZSBpZiBpdCBzaG91bGRuJ3QgYmUgYWxsb3dlZC5cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdC8qKlxuXHRcdFx0ICogSXMgdGhlIGFjdGlvbiBhdXRob3JpemVkLlxuXHRcdFx0ICogQHBhcmFtIGFjdGlvbiBUaGUgYWN0aW9uIHRvIHRlc3QgZm9yIGJlaW5nIGF1dGhvcml6ZWQuXG5cdFx0XHQgKiBAcGFyYW0gcGF5bG9hZCBUaGUgcGF5bG9hZCB0byB1c2UgaW4gdGhlIHRlc3QuXG5cdFx0XHQgKiBAcGFyYW0gaWRlbnRpdHkgVGhlIGlkZW50aXR5IG9mIHRoZSBjbGllbnQgYmVpbmcgYXNrZWQgYWJvdXQgdGhlIGFjdGlvbi5cblx0XHRcdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGFjdGlvbiBpcyBhdXRob3JpemVkLlxuXHRcdFx0ICovXG5cdFx0XHRwdWJsaWMgYXN5bmMgaXNBY3Rpb25BdXRob3JpemVkKFxuXHRcdFx0XHRhY3Rpb246IHN0cmluZyxcblx0XHRcdFx0cGF5bG9hZDogdW5rbm93bixcblx0XHRcdFx0aWRlbnRpdHk6IE9wZW5GaW4uQ2xpZW50SWRlbnRpdHlcblx0XHRcdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdFx0XHRjb25zb2xlLmxvZyhcIkludGVyb3AgQnJva2VyIGlzIGFjdGlvbiBhdXRob3JpemVkOlwiLCBhY3Rpb24sIHBheWxvYWQsIGlkZW50aXR5KTtcblx0XHRcdFx0Ly8gcGVyZm9ybSBjaGVjayBoZXJlIGlmIHlvdSB3aXNoIGFuZCByZXR1cm4gdHJ1ZS9mYWxzZSBhY2NvcmRpbmdseVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBHZXQgdGhlIGluZm9ybWF0aW9uIGZvciB0aGUgaW50ZW50cyBieSBjb250ZXh0LlxuXHRcdFx0ICogQHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHQgdG8gZ2V0IHRoZSBpbmZvcm1hdGlvbiBmb3IuXG5cdFx0XHQgKiBAcGFyYW0gY29udGV4dC50eXBlIFRoZSB0eXBlIG9mIHRoZSBjb250ZXh0LlxuXHRcdFx0ICogQHBhcmFtIGNsaWVudElkZW50aXR5IFRoZSBpZGVudGl0eSBvZiB0aGUgY2xpZW50IHRvIGdldCB0aGUgaW5mb3JtYXRpb24gZnJvbS5cblx0XHRcdCAqIEByZXR1cm5zIFRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaW50ZW50cyBmb3IgdGhlIGNvbnRleHQuXG5cdFx0XHQgKi9cblx0XHRcdHB1YmxpYyBhc3luYyBoYW5kbGVJbmZvRm9ySW50ZW50c0J5Q29udGV4dChcblx0XHRcdFx0Y29udGV4dDogeyB0eXBlOiBzdHJpbmcgfSxcblx0XHRcdFx0Y2xpZW50SWRlbnRpdHk6IE9wZW5GaW4uSWRlbnRpdHlcblx0XHRcdCk6IFByb21pc2U8XG5cdFx0XHRcdHtcblx0XHRcdFx0XHRpbnRlbnQ6IHsgbmFtZTogc3RyaW5nOyBkaXNwbGF5TmFtZTogc3RyaW5nIH07XG5cdFx0XHRcdFx0YXBwczogeyBuYW1lOiBzdHJpbmc7IGFwcElkOiBzdHJpbmc7IHRpdGxlOiBzdHJpbmcgfVtdO1xuXHRcdFx0XHR9W11cblx0XHRcdD4ge1xuXHRcdFx0XHRjb25zdCBpbnRlbnRzID0gYXdhaXQgZ2V0SW50ZW50c0J5Q29udGV4dChjdXN0b21TZXR0aW5ncz8uYXBwUHJvdmlkZXIsIGNvbnRleHQudHlwZSk7XG5cblx0XHRcdFx0aWYgKGludGVudHMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKE5PX0FQUFNfRk9VTkQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGludGVudHMubWFwKChlbnRyeSkgPT4gKHtcblx0XHRcdFx0XHRpbnRlbnQ6IGVudHJ5LmludGVudCxcblx0XHRcdFx0XHRhcHBzOiBlbnRyeS5hcHBzLm1hcCgoYXBwKSA9PiAoe1xuXHRcdFx0XHRcdFx0bmFtZTogYXBwLmFwcElkLFxuXHRcdFx0XHRcdFx0YXBwSWQ6IGFwcC5hcHBJZCxcblx0XHRcdFx0XHRcdHRpdGxlOiBhcHAudGl0bGVcblx0XHRcdFx0XHR9KSlcblx0XHRcdFx0fSkpO1xuXHRcdFx0fVxuXG5cdFx0XHQvKipcblx0XHRcdCAqIEdldCB0aGUgaW5mb3JtYXRpb24gZm9yIHRoZSBhcHBzIGJ5IGludGVudC5cblx0XHRcdCAqIEBwYXJhbSBpbnRlbnRPcHRpb25zIFRoZSBvcHRpb25zIGZvciB0aGUgaW50ZW50LlxuXHRcdFx0ICogQHBhcmFtIGludGVudE9wdGlvbnMubmFtZSBUaGUgbmFtZSBvZiB0aGUgaW50ZW50LlxuXHRcdFx0ICogQHBhcmFtIGludGVudE9wdGlvbnMuY29udGV4dCBUaGUgb3B0aW9uYWwgY29udGV4dCBmb3IgdGhlIGludGVudC5cblx0XHRcdCAqIEBwYXJhbSBpbnRlbnRPcHRpb25zLmNvbnRleHQudHlwZSBUaGUgY29udGV4dCB0eXBlLlxuXHRcdFx0ICogQHBhcmFtIGNsaWVudElkZW50aXR5IFRoZSBjbGllbnQgaWRlbnRpdHkgdG8gZ2V0IHRoZSBpbmZvcm1hdGlvbiBmcm9tLlxuXHRcdFx0ICogQHJldHVybnMgVGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbnRlbnRzIGZvciB0aGUgY29udGV4dC5cblx0XHRcdCAqL1xuXHRcdFx0cHVibGljIGFzeW5jIGhhbmRsZUluZm9Gb3JJbnRlbnQoXG5cdFx0XHRcdGludGVudE9wdGlvbnM6IHsgbmFtZTogc3RyaW5nOyBjb250ZXh0PzogeyB0eXBlOiBzdHJpbmcgfSB9LFxuXHRcdFx0XHRjbGllbnRJZGVudGl0eTogT3BlbkZpbi5JZGVudGl0eVxuXHRcdFx0KTogUHJvbWlzZTx7XG5cdFx0XHRcdGludGVudDogeyBuYW1lOiBzdHJpbmc7IGRpc3BsYXlOYW1lOiBzdHJpbmcgfTtcblx0XHRcdFx0YXBwczogeyBuYW1lOiBzdHJpbmc7IGFwcElkOiBzdHJpbmc7IHRpdGxlOiBzdHJpbmcgfVtdO1xuXHRcdFx0fT4ge1xuXHRcdFx0XHRjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRJbnRlbnQoXG5cdFx0XHRcdFx0Y3VzdG9tU2V0dGluZ3M/LmFwcFByb3ZpZGVyLFxuXHRcdFx0XHRcdGludGVudE9wdGlvbnMubmFtZSxcblx0XHRcdFx0XHRpbnRlbnRPcHRpb25zLmNvbnRleHQ/LnR5cGVcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKCFyZXN1bHQpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoTk9fQVBQU19GT1VORCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGludGVudDogcmVzdWx0LmludGVudCxcblx0XHRcdFx0XHRhcHBzOiByZXN1bHQuYXBwcy5tYXAoKGFwcCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgYXBwRW50cnkgPSB7XG5cdFx0XHRcdFx0XHRcdG5hbWU6IGFwcC5hcHBJZCxcblx0XHRcdFx0XHRcdFx0YXBwSWQ6IGFwcC5hcHBJZCxcblx0XHRcdFx0XHRcdFx0dGl0bGU6IGFwcC50aXRsZVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdHJldHVybiBhcHBFbnRyeTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHQvKipcblx0XHRcdCAqIEhhbmRsZSBhbmQgaW50ZW50IGZvciB0aGUgZmlyZWQgY29udGV4dC5cblx0XHRcdCAqIEBwYXJhbSBjb250ZXh0Rm9ySW50ZW50IFRoZSBjb250ZXh0IGZvciB0aGUgaW50ZW50LlxuXHRcdFx0ICogQHBhcmFtIGNvbnRleHRGb3JJbnRlbnQudHlwZSBUaHQgdHlwZSBvZiB0aGUgY29udGV4dC5cblx0XHRcdCAqIEBwYXJhbSBjb250ZXh0Rm9ySW50ZW50Lm1ldGFkYXRhIFRoZSBtZXRhZGF0YSBmb3IgdGhlIGNvbnRleHQuXG5cdFx0XHQgKiBAcGFyYW0gY29udGV4dEZvckludGVudC5tZXRhZGF0YS50YXJnZXQgVGhlIG9wdGlvbmFsIHRhcmdldCBmb3IgdGhlIGNvbnRleHQuXG5cdFx0XHQgKiBAcGFyYW0gY2xpZW50SWRlbnRpdHkgVGhlIGlkZW50aXR5IG9mIHRoZSBjbGllbnQgdG8gaGFuZGxlIHRoZSBpbnRlbnQuXG5cdFx0XHQgKiBAcmV0dXJucyBUaGUgYXBwbGljYXRpb24gZGV0YWlscyBmb3IgdGhlIGFwcCB0aGF0IGhhbmRsZWQgdGhlIGludGVudC5cblx0XHRcdCAqL1xuXHRcdFx0cHVibGljIGFzeW5jIGhhbmRsZUZpcmVkSW50ZW50Rm9yQ29udGV4dChcblx0XHRcdFx0Y29udGV4dEZvckludGVudDogeyB0eXBlOiBzdHJpbmc7IG1ldGFkYXRhPzogeyB0YXJnZXQ/OiBzdHJpbmcgfSB9LFxuXHRcdFx0XHRjbGllbnRJZGVudGl0eTogT3BlbkZpbi5JZGVudGl0eVxuXHRcdFx0KTogUHJvbWlzZTxcblx0XHRcdFx0fCB7XG5cdFx0XHRcdFx0XHRzb3VyY2U6IHN0cmluZztcblx0XHRcdFx0XHRcdHZlcnNpb24/OiBzdHJpbmc7XG5cdFx0XHRcdCAgfVxuXHRcdFx0XHR8IHVuZGVmaW5lZFxuXHRcdFx0PiB7XG5cdFx0XHRcdGNvbnN0IGF2YWlsYWJsZUludGVudHMgPSBhd2FpdCBnZXRJbnRlbnRzQnlDb250ZXh0KFxuXHRcdFx0XHRcdGN1c3RvbVNldHRpbmdzPy5hcHBQcm92aWRlcixcblx0XHRcdFx0XHRjb250ZXh0Rm9ySW50ZW50LnR5cGVcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKGF2YWlsYWJsZUludGVudHMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKE5PX0FQUFNfRk9VTkQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGludGVudDogT3BlbkZpbi5JbnRlbnQgJiB7IGRpc3BsYXlOYW1lPzogc3RyaW5nIH0gPSB7XG5cdFx0XHRcdFx0Y29udGV4dDogY29udGV4dEZvckludGVudCxcblx0XHRcdFx0XHRuYW1lOiBcIlwiLFxuXHRcdFx0XHRcdGRpc3BsYXlOYW1lOiB1bmRlZmluZWRcblx0XHRcdFx0fTtcblx0XHRcdFx0bGV0IHRhcmdldEFwcDogQXBwIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRsZXQgdGFyZ2V0QXBwSW50ZW50O1xuXHRcdFx0XHRsZXQgdGFyZ2V0QXBwSW50ZW50Q291bnQgPSAwO1xuXG5cdFx0XHRcdGlmIChjb250ZXh0Rm9ySW50ZW50Lm1ldGFkYXRhPy50YXJnZXQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHRhcmdldEFwcCA9IGF3YWl0IGdldEFwcChjdXN0b21TZXR0aW5ncz8uYXBwUHJvdmlkZXIsIGNvbnRleHRGb3JJbnRlbnQubWV0YWRhdGE/LnRhcmdldCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodGFyZ2V0QXBwICE9PSB1bmRlZmluZWQgJiYgQXJyYXkuaXNBcnJheSh0YXJnZXRBcHAuaW50ZW50cykpIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGFyZ2V0QXBwLmludGVudHMpIHtcblx0XHRcdFx0XHRcdHRhcmdldEFwcEludGVudCA9IGVsZW1lbnQ7XG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdEFycmF5LmlzQXJyYXkodGFyZ2V0QXBwSW50ZW50LmNvbnRleHRzKSAmJlxuXHRcdFx0XHRcdFx0XHR0YXJnZXRBcHBJbnRlbnQuY29udGV4dHMuaW5jbHVkZXMoY29udGV4dEZvckludGVudC50eXBlKVxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdHRhcmdldEFwcEludGVudENvdW50Kys7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHRhcmdldEFwcCAhPT0gdW5kZWZpbmVkICYmIHRhcmdldEFwcEludGVudCAhPT0gdW5kZWZpbmVkICYmIHRhcmdldEFwcEludGVudENvdW50ID09PSAxKSB7XG5cdFx0XHRcdFx0Ly8gYSBwcmVmZXJyZWQgbmFtZSBmb3IgYW4gYXBwIHdhcyBnaXZlbiB3aXRoIHRoZSBjb250ZXh0IG9iamVjdFxuXHRcdFx0XHRcdC8vIHRoZSBhcHAgZXhpc3RlZCBhbmQgaXQgc3VwcG9ydGVkIHRoZSBjb250ZXh0IHR5cGUgYW5kIHRoZXJlIHdhcyBvbmx5IG9uZSBpbnRlbnQgdGhhdCBzdXBwb3J0ZWRcblx0XHRcdFx0XHQvLyB0aGF0IGNvbnRleHQgdHlwZS4gTGF1bmNoIHRoZSBhcHAgd2l0aCB0aGF0IGludGVudCBvdGhlcndpc2UgcHJlc2VudCB0aGUgdXNlciB3aXRoIGEgbGlzdCBvZlxuXHRcdFx0XHRcdC8vIGV2ZXJ5dGhpbmcgdGhhdCBzdXBwb3J0cyB0aGF0IGNvbnRleHQgdHlwZVxuXHRcdFx0XHRcdGludGVudC5uYW1lID0gdGFyZ2V0QXBwSW50ZW50Lm5hbWU7XG5cdFx0XHRcdFx0aW50ZW50LmRpc3BsYXlOYW1lID0gdGFyZ2V0QXBwSW50ZW50Lm5hbWU7XG5cdFx0XHRcdFx0Y29uc3QgaW50ZW50UmVzb2x2ZXIgPSBhd2FpdCB0aGlzLmxhdW5jaEFwcFdpdGhJbnRlbnQodGFyZ2V0QXBwLCBpbnRlbnQpO1xuXHRcdFx0XHRcdGlmICghaW50ZW50UmVzb2x2ZXIpIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihOT19BUFBTX0ZPVU5EKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIGludGVudFJlc29sdmVyO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGF2YWlsYWJsZUludGVudHMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdFx0aW50ZW50Lm5hbWUgPSBhdmFpbGFibGVJbnRlbnRzWzBdLmludGVudC5uYW1lO1xuXHRcdFx0XHRcdGludGVudC5kaXNwbGF5TmFtZSA9IGF2YWlsYWJsZUludGVudHNbMF0uaW50ZW50Lm5hbWU7XG5cdFx0XHRcdFx0aWYgKGF2YWlsYWJsZUludGVudHNbMF0uYXBwcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGludGVudFJlc29sdmVyID0gYXdhaXQgdGhpcy5sYXVuY2hBcHBXaXRoSW50ZW50KGF2YWlsYWJsZUludGVudHNbMF0uYXBwc1swXSwgaW50ZW50KTtcblx0XHRcdFx0XHRcdGlmICghaW50ZW50UmVzb2x2ZXIpIHtcblx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKE5PX0FQUFNfRk9VTkQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuIGludGVudFJlc29sdmVyO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoYXZhaWxhYmxlSW50ZW50c1swXS5hcHBzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHVzZXJTZWxlY3Rpb24gPSBhd2FpdCB0aGlzLmxhdW5jaEFwcFBpY2tlcih7XG5cdFx0XHRcdFx0XHRcdFx0YXBwczogYXZhaWxhYmxlSW50ZW50c1swXS5hcHBzLFxuXHRcdFx0XHRcdFx0XHRcdGludGVudFxuXHRcdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0XHRpZiAodXNlclNlbGVjdGlvbikge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHNlbGVjdGVkQXBwID0gYXZhaWxhYmxlSW50ZW50c1swXS5hcHBzLmZpbmQoXG5cdFx0XHRcdFx0XHRcdFx0XHQoZW50cnkpID0+IGVudHJ5LmFwcElkID09PSB1c2VyU2VsZWN0aW9uLmFwcElkICYmIGVudHJ5LmFwcElkICE9PSB1bmRlZmluZWRcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChzZWxlY3RlZEFwcCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgaW50ZW50UmVzb2x2ZXIgPSBhd2FpdCB0aGlzLmxhdW5jaEFwcFdpdGhJbnRlbnQoc2VsZWN0ZWRBcHAsIGludGVudCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIWludGVudFJlc29sdmVyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihOT19BUFBTX0ZPVU5EKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBpbnRlbnRSZXNvbHZlcjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcihcIldlIHdlcmUgcmV0dXJuZWQgYSBub24gZXhpc3RlbnQgYXBwSWQgdG8gbGF1bmNoIHdpdGggdGhlIGludGVudC5cIik7XG5cdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihOT19BUFBTX0ZPVU5EKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKFwiQXBwIGZvciBpbnRlbnQgYnkgY29udGV4dCBub3Qgc2VsZWN0ZWQvbGF1bmNoZWQuXCIsIGludGVudCk7XG5cdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihSRVNPTFZFUl9USU1FT1VUKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGNvbnN0IHVzZXJTZWxlY3Rpb24gPSBhd2FpdCB0aGlzLmxhdW5jaEFwcFBpY2tlcih7XG5cdFx0XHRcdFx0XHRcdGludGVudCxcblx0XHRcdFx0XHRcdFx0aW50ZW50czogYXZhaWxhYmxlSW50ZW50c1xuXHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdGlmICh1c2VyU2VsZWN0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNlbGVjdGVkSW50ZW50ID0gYXZhaWxhYmxlSW50ZW50cy5maW5kKFxuXHRcdFx0XHRcdFx0XHRcdChlbnRyeSkgPT4gZW50cnkuaW50ZW50Lm5hbWUgPT09IHVzZXJTZWxlY3Rpb24uaW50ZW50Lm5hbWVcblx0XHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoc2VsZWN0ZWRJbnRlbnQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoXG5cdFx0XHRcdFx0XHRcdFx0XHRcIlRoZSB1c2VyIHNlbGVjdGVkIGFuIGludGVudCBidXQgaXQncyBuYW1lIGRvZXNuJ3QgbWF0Y2ggdGhlIGF2YWlsYWJsZSBpbnRlbnRzLlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0dXNlclNlbGVjdGlvblxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKE5PX0FQUFNfRk9VTkQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNlbGVjdGVkQXBwID0gc2VsZWN0ZWRJbnRlbnQuYXBwcy5maW5kKFxuXHRcdFx0XHRcdFx0XHRcdChlbnRyeSkgPT4gZW50cnkuYXBwSWQgPT09IHVzZXJTZWxlY3Rpb24uYXBwSWQgJiYgZW50cnkuYXBwSWQgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRpZiAoc2VsZWN0ZWRBcHApIHtcblx0XHRcdFx0XHRcdFx0XHRpbnRlbnQuZGlzcGxheU5hbWUgPSB1c2VyU2VsZWN0aW9uLmludGVudC5kaXNwbGF5TmFtZTtcblx0XHRcdFx0XHRcdFx0XHRpbnRlbnQubmFtZSA9IHVzZXJTZWxlY3Rpb24uaW50ZW50Py5uYW1lID8/IFwiXCI7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgaW50ZW50UmVzb2x2ZXIgPSBhd2FpdCB0aGlzLmxhdW5jaEFwcFdpdGhJbnRlbnQoc2VsZWN0ZWRBcHAsIGludGVudCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFpbnRlbnRSZXNvbHZlcikge1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKE5PX0FQUFNfRk9VTkQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gaW50ZW50UmVzb2x2ZXI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoXCJXZSB3ZXJlIHJldHVybmVkIGEgbm9uIGV4aXN0ZW50IGFwcElkIHRvIGxhdW5jaCB3aXRoIHRoZSBpbnRlbnQuXCIpO1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKE5PX0FQUFNfRk9VTkQpO1xuXHRcdFx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcihcIkFwcCBmb3IgaW50ZW50IGJ5IGNvbnRleHQgbm90IHNlbGVjdGVkL2xhdW5jaGVkLlwiLCBpbnRlbnQpO1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFJFU09MVkVSX1RJTUVPVVQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvKipcblx0XHRcdCAqIEhhbmRsZSBhbiBpbnRlbnQgdGhhdCB3YXMgZmlyZWQuXG5cdFx0XHQgKiBAcGFyYW0gaW50ZW50IFRoZSBpbnRlbnQgdGhhdCB3YXMgZmlyZWQuXG5cdFx0XHQgKiBAcmV0dXJucyBUaGUgc291cmNlIGFuZCB2ZXJzaW9uIG9mIHRoZSBhcHBsaWNhdGlvbiB0aGF0IHdhcyBvcGVuZWQuXG5cdFx0XHQgKi9cblx0XHRcdHB1YmxpYyBhc3luYyBoYW5kbGVGaXJlZEludGVudChpbnRlbnQ6IE9wZW5GaW4uSW50ZW50KTogUHJvbWlzZTxcblx0XHRcdFx0fCB7XG5cdFx0XHRcdFx0XHRzb3VyY2U6IHN0cmluZztcblx0XHRcdFx0XHRcdHZlcnNpb24/OiBzdHJpbmc7XG5cdFx0XHRcdCAgfVxuXHRcdFx0XHR8IHVuZGVmaW5lZFxuXHRcdFx0PiB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKFwiUmVjZWl2ZWQgcmVxdWVzdCBmb3IgYSByYWlzZWQgaW50ZW50OlwiLCBpbnRlbnQpO1xuXHRcdFx0XHRsZXQgaW50ZW50QXBwcyA9IGF3YWl0IGdldEFwcHNCeUludGVudChjdXN0b21TZXR0aW5ncz8uYXBwUHJvdmlkZXIsIGludGVudC5uYW1lKTtcblx0XHRcdFx0bGV0IHRhcmdldEFwcDogQXBwIHwgdW5kZWZpbmVkO1xuXG5cdFx0XHRcdGlmIChpbnRlbnQubWV0YWRhdGE/LnRhcmdldCkge1xuXHRcdFx0XHRcdHRhcmdldEFwcCA9IGF3YWl0IGdldEFwcChjdXN0b21TZXR0aW5ncz8uYXBwUHJvdmlkZXIsIGludGVudC5tZXRhZGF0YS50YXJnZXQgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHRpZiAodGFyZ2V0QXBwID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdC8vIGNoZWNrIHRvIHNlZSBpZiB5b3UgaGF2ZSBiZWVuIHBhc3NlZCBhIHNwZWNpZmljIGlkZW50aXR5IGZvciBhIHZpZXcgdGhhdCBzaG91bGQgYmUgdGFyZ2V0ZWQgaW5zdGVhZCBvZiBhbiBhcHBcblx0XHRcdFx0XHRcdGNvbnN0IHRhcmdldElkZW50aXR5ID0gYXdhaXQgdGhpcy5nZXRUYXJnZXRJZGVudGl0eShpbnRlbnQubWV0YWRhdGE/LnRhcmdldCBhcyBzdHJpbmcpO1xuXHRcdFx0XHRcdFx0aWYgKHRhcmdldElkZW50aXR5KSB7XG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKFxuXHRcdFx0XHRcdFx0XHRcdFwiV2Ugd2VyZSBwYXNzZWQgYSB2aWV3IGlkZW50aXR5IGluc3RlYWQgb2YgYW4gYXBwIGVudHJ5IHdoZW4gcmFpc2luZy9maXJpbmcgYW4gaW50ZW50LiBXZSB3aWxsIGZpcmUgdGhlIGludGVudCBhdCB0aGF0IGFzIGl0IGV4aXN0cyBhbmQgbm8gYXBwIGVudHJ5IGV4aXN0cyB3aXRoIHRoYXQgbmFtZS46XCIsXG5cdFx0XHRcdFx0XHRcdFx0dGFyZ2V0SWRlbnRpdHksXG5cdFx0XHRcdFx0XHRcdFx0aW50ZW50XG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdGF3YWl0IHN1cGVyLnNldEludGVudFRhcmdldChpbnRlbnQsIHRhcmdldElkZW50aXR5KTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRzb3VyY2U6IHRhcmdldElkZW50aXR5Lm5hbWVcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoaW50ZW50QXBwcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhcIk5vIGFwcHMgc3VwcG9ydCB0aGlzIGludGVudC5cIik7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKE5PX0FQUFNfRk9VTkQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHRhcmdldEFwcCAhPT0gdW5kZWZpbmVkICYmIGludGVudEFwcHMuaW5jbHVkZXModGFyZ2V0QXBwKSkge1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKFwiQXNzaWduaW5nIHNlbGVjdGVkIGFwcGxpY2F0aW9uIHdpdGggaW50ZW50LlwiLCBpbnRlbnQpO1xuXHRcdFx0XHRcdGludGVudEFwcHMgPSBbdGFyZ2V0QXBwXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChpbnRlbnRBcHBzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRcdC8vIGhhbmRsZSBzaW5nbGUgZW50cnlcblx0XHRcdFx0XHRjb25zdCBpbnRlbnRSZXNvbHZlciA9IGF3YWl0IHRoaXMubGF1bmNoQXBwV2l0aEludGVudChpbnRlbnRBcHBzWzBdLCBpbnRlbnQpO1xuXHRcdFx0XHRcdGlmICghaW50ZW50UmVzb2x2ZXIpIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihOT19BUFBTX0ZPVU5EKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIGludGVudFJlc29sdmVyO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIHNob3cgbWVudVxuXHRcdFx0XHQvLyBsYXVuY2ggYSBuZXcgd2luZG93IGFuZCBvcHRpb25hbGx5IHBhc3MgdGhlIGF2YWlsYWJsZSBpbnRlbnRzIGFzIGN1c3RvbURhdGEuYXBwcyBhcyBwYXJ0IG9mIHRoZSB3aW5kb3cgb3B0aW9uc1xuXHRcdFx0XHQvLyB0aGUgd2luZG93IGNhbiB0aGVuIHVzZSByYWlzZUludGVudCBhZ2FpbnN0IGEgc3BlY2lmaWMgYXBwICh0aGUgc2VsZWN0ZWQgb25lKS4gVGhpcyBpcyBhIHZlcnkgYmFzaWMgZXhhbXBsZS5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRjb25zdCB1c2VyU2VsZWN0aW9uID0gYXdhaXQgdGhpcy5sYXVuY2hBcHBQaWNrZXIoe1xuXHRcdFx0XHRcdFx0YXBwczogaW50ZW50QXBwcyxcblx0XHRcdFx0XHRcdGludGVudFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGlmIChpbnRlbnRBcHBzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdGNvbnNvbGUud2FybihcIldlIHNob3VsZCBoYXZlIGEgbGlzdCBvZiBhcHBzIHRvIHNlYXJjaCBmcm9tLlwiKTtcblx0XHRcdFx0XHRcdGludGVudEFwcHMgPSBbXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3Qgc2VsZWN0ZWRBcHAgPSBpbnRlbnRBcHBzLmZpbmQoXG5cdFx0XHRcdFx0XHQoZW50cnkpID0+IGVudHJ5LmFwcElkID09PSB1c2VyU2VsZWN0aW9uPy5hcHBJZCAmJiBlbnRyeS5hcHBJZCAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRpZiAoc2VsZWN0ZWRBcHApIHtcblx0XHRcdFx0XHRcdGNvbnN0IGludGVudFJlc29sdmVyID0gYXdhaXQgdGhpcy5sYXVuY2hBcHBXaXRoSW50ZW50KHNlbGVjdGVkQXBwLCBpbnRlbnQpO1xuXHRcdFx0XHRcdFx0aWYgKCFpbnRlbnRSZXNvbHZlcikge1xuXHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoTk9fQVBQU19GT1VORCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4gaW50ZW50UmVzb2x2ZXI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoXCJXZSB3ZXJlIHJldHVybmVkIGEgbm9uIGV4aXN0ZW50IGFwcElkIHRvIGxhdW5jaCB3aXRoIHRoZSBpbnRlbnQuXCIpO1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihOT19BUFBTX0ZPVU5EKTtcblx0XHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihcIkFwcCBmb3IgaW50ZW50IG5vdCBzZWxlY3RlZC9sYXVuY2hlZC5cIiwgaW50ZW50KTtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoUkVTT0xWRVJfVElNRU9VVCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xufVxuXG4vKipcbiAqIExhdW5jaCBhbiBhcHBsaWNhdGlvbiBhcyBhIHZpZXcuXG4gKiBAcGFyYW0gdmlld0FwcCBUaGUgYXBwbGljYXRpb24gdG8gbGF1bmNoIGFzIGEgdmlldy5cbiAqIEByZXR1cm5zIFRoZSBpZGVudGl0eSBvZiB0aGUgdmlldyB0aGF0IHdhcyBsYXVuY2hlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gbGF1bmNoVmlldyh2aWV3QXBwOiBBcHApOiBQcm9taXNlPE9wZW5GaW4uSWRlbnRpdHkgfCB1bmRlZmluZWQ+IHtcblx0aWYgKCF2aWV3QXBwKSB7XG5cdFx0Y29uc29sZS53YXJuKFwiTm8gYXBwIHdhcyBwYXNzZWQgdG8gbGF1bmNoVmlld1wiKTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAodmlld0FwcC5tYW5pZmVzdFR5cGUgIT09IFwidmlld1wiICYmIHZpZXdBcHAubWFuaWZlc3RUeXBlICE9PSBcImlubGluZS12aWV3XCIpIHtcblx0XHRjb25zb2xlLndhcm4oXCJUaGUgYXBwIHBhc3NlZCB3YXMgbm90IG9mIG1hbmlmZXN0VHlwZSB2aWV3IG9yIGlubGluZS12aWV3LlwiKTtcblx0XHRyZXR1cm47XG5cdH1cblx0bGV0IG1hbmlmZXN0OiBPcGVuRmluLlZpZXdPcHRpb25zO1xuXG5cdGlmICh2aWV3QXBwLm1hbmlmZXN0VHlwZSA9PT0gXCJ2aWV3XCIpIHtcblx0XHRpZiAoIXZpZXdBcHAubWFuaWZlc3QpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgbWFuaWZlc3RSZXNwb25zZSA9IGF3YWl0IGZldGNoKHZpZXdBcHAubWFuaWZlc3QpO1xuXHRcdG1hbmlmZXN0ID0gYXdhaXQgbWFuaWZlc3RSZXNwb25zZS5qc29uKCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gY29udmVyc2lvbiBiZWNhdXNlIG9mIG1hbmlmZXN0VHlwZS4gSW4gbW9zdCB1c2UgY2FzZXMgbWFuaWZlc3QgaXMgYWx3YXlzIGEgcGF0aCB0byBhbiBleGVjdXRhYmxlIG9yIHRvIGEgbWFuaWZlc3QgZmlsZS4gRm9yIHZpZXdzIHdlIGFyZSBkZW1vbnN0cmF0aW5nIGhvdyBpdCBjb3VsZCBiZSB1c2VkXG5cdFx0Ly8gZm9yIHBhc3NpbmcgdGhlIG1hbmlmZXN0IGlubGluZVxuXHRcdG1hbmlmZXN0ID0gdmlld0FwcC5tYW5pZmVzdCBhcyB1bmtub3duIGFzIE9wZW5GaW4uVmlld09wdGlvbnM7XG5cdH1cblxuXHRjb25zdCBuYW1lID0gbWFuaWZlc3QubmFtZTtcblx0bGV0IGlkZW50aXR5ID0geyB1dWlkOiBmaW4ubWUuaWRlbnRpdHkudXVpZCwgbmFtZSB9O1xuXHRjb25zdCB3YXNOYW1lU3BlY2lmaWVkID0gbmFtZSAhPT0gdW5kZWZpbmVkO1xuXHRsZXQgdmlld0V4aXN0cyA9IGZhbHNlO1xuXG5cdGlmICh3YXNOYW1lU3BlY2lmaWVkKSB7XG5cdFx0dmlld0V4aXN0cyA9IGF3YWl0IGRvZXNWaWV3RXhpc3QoaWRlbnRpdHkpO1xuXHR9XG5cblx0aWYgKCF2aWV3RXhpc3RzKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHBsYXRmb3JtID0gZ2V0Q3VycmVudFN5bmMoKTtcblx0XHRcdGNvbnN0IGNyZWF0ZWRWaWV3ID0gYXdhaXQgcGxhdGZvcm0uY3JlYXRlVmlldyhtYW5pZmVzdCk7XG5cdFx0XHRpZGVudGl0eSA9IGNyZWF0ZWRWaWV3LmlkZW50aXR5O1xuXHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcIkVycm9yIGxhdW5jaGluZyB2aWV3XCIsIGVycik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHR9XG5cdHJldHVybiBpZGVudGl0eTtcbn1cblxuLyoqXG4gKiBMYXVuY2ggYSBzbmFwc2hvdCBiYXNlZCBhcHBsaWNhdGlvbi5cbiAqIEBwYXJhbSBzbmFwc2hvdEFwcCBUaGUgc25hcHNob3QgYXBwbGljYXRpb24gdG8gbGF1bmNoLlxuICogQHJldHVybnMgVGhlIGlkZW50aXR5IG9mIHRoZSB2aWV3cyBpbiB0aGUgc25hcHNob3QgdGhhdCB3YXMgbGF1bmNoZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxhdW5jaFNuYXBzaG90KHNuYXBzaG90QXBwOiBBcHApOiBQcm9taXNlPE9wZW5GaW4uSWRlbnRpdHlbXSB8IHVuZGVmaW5lZD4ge1xuXHRpZiAoIXNuYXBzaG90QXBwKSB7XG5cdFx0Y29uc29sZS53YXJuKFwiTm8gYXBwIHdhcyBwYXNzZWQgdG8gbGF1bmNoU25hcHNob3RcIik7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKHNuYXBzaG90QXBwLm1hbmlmZXN0VHlwZSAhPT0gXCJzbmFwc2hvdFwiKSB7XG5cdFx0Y29uc29sZS53YXJuKFwiVGhlIGFwcCBwYXNzZWQgd2FzIG5vdCBvZiBtYW5pZmVzdFR5cGUgc25hcHNob3QuXCIpO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICghc25hcHNob3RBcHAubWFuaWZlc3QpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCBtYW5pZmVzdFJlc3BvbnNlID0gYXdhaXQgZmV0Y2goc25hcHNob3RBcHAubWFuaWZlc3QpO1xuXHRjb25zdCBtYW5pZmVzdDogQnJvd3NlclNuYXBzaG90ID0gYXdhaXQgbWFuaWZlc3RSZXNwb25zZS5qc29uKCk7XG5cblx0Y29uc3Qgd2luZG93cyA9IG1hbmlmZXN0LndpbmRvd3M7XG5cdGNvbnN0IHdpbmRvd3NUb0NyZWF0ZSA9IFtdO1xuXG5cdGlmIChBcnJheS5pc0FycmF5KHdpbmRvd3MpKSB7XG5cdFx0Y29uc3Qgd2luZG93c1RvR2F0aGVyOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGNvbnN0IHZpZXdJZHM6IE9wZW5GaW4uSWRlbnRpdHlbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCB3aW4gb2Ygd2luZG93cykge1xuXHRcdFx0Y29uc3QgZ2V0Vmlld0lkc0ZvckxheW91dCA9IGZpbmRWaWV3TmFtZXMod2luLmxheW91dCBhcyBQYWdlTGF5b3V0KTtcblx0XHRcdGlmIChnZXRWaWV3SWRzRm9yTGF5b3V0Lmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRjb25zdCB1dWlkID0gcmFuZG9tVVVJRCgpO1xuXHRcdFx0XHRjb25zdCBuYW1lID0gYGludGVybmFsLWdlbmVyYXRlZC13aW5kb3ctJHt1dWlkfWA7XG5cdFx0XHRcdHdpbi5uYW1lID0gbmFtZTtcblx0XHRcdFx0d2luZG93c1RvQ3JlYXRlLnB1c2god2luKTtcblx0XHRcdFx0d2luZG93c1RvR2F0aGVyLnB1c2gobmFtZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyB3ZSBoYXZlIHZpZXdzLiBHcmFiIHRoZSBmaXJzdCBvbmUgdG8gdmFsaWRhdGUgZXhpc3RlbmNlLlxuXHRcdFx0XHRjb25zdCB2aWV3SWQgPSBnZXRWaWV3SWRzRm9yTGF5b3V0WzBdO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgZW50cnkgb2YgZ2V0Vmlld0lkc0ZvckxheW91dCkge1xuXHRcdFx0XHRcdHZpZXdJZHMucHVzaCh7IG5hbWU6IGVudHJ5LCB1dWlkOiBmaW4ubWUuaWRlbnRpdHkudXVpZCB9KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIHRoZXNlIHZpZXdzIHNob3VsZCBiZSByZWFkb25seSBhbmQgY2Fubm90IGJlIHB1bGxlZCBvdXQgb2YgdGhlIHBhZ2Ugb3IgY2xvc2VkXG5cdFx0XHRcdGlmICghKGF3YWl0IGRvZXNWaWV3RXhpc3QoeyBuYW1lOiB2aWV3SWQsIHV1aWQ6IGZpbi5tZS5pZGVudGl0eS51dWlkIH0pKSkge1xuXHRcdFx0XHRcdHdpbmRvd3NUb0NyZWF0ZS5wdXNoKHdpbik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRtYW5pZmVzdC53aW5kb3dzID0gd2luZG93c1RvQ3JlYXRlO1xuXG5cdFx0aWYgKHdpbmRvd3NUb0NyZWF0ZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBwbGF0Zm9ybSA9IGdldEN1cnJlbnRTeW5jKCk7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhd2FpdCBwbGF0Zm9ybS5hcHBseVNuYXBzaG90KG1hbmlmZXN0KTtcblx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRjb25zb2xlLmVycm9yKFwiRXJyb3IgdHJ5aW5nIHRvIGFwcGx5IHNuYXBzaG90IHRvIHBsYXRmb3JtLlwiLCBlcnIsIG1hbmlmZXN0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IHdpbmRvdyBvZiB3aW5kb3dzVG9HYXRoZXIpIHtcblx0XHRcdGNvbnN0IHdpbmRvd1ZpZXdJZHMgPSBhd2FpdCBnZXRWaWV3SWRlbnRpdGllcyh7IG5hbWU6IHdpbmRvdywgdXVpZDogZmluLm1lLmlkZW50aXR5LnV1aWQgfSk7XG5cdFx0XHR2aWV3SWRzLnB1c2goLi4ud2luZG93Vmlld0lkcyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZpZXdJZHM7XG5cdH1cbn1cblxuLyoqXG4gKiBGaW5kIHRoZSBuYW1lcyBvZiBhbGwgdGhlIHZpZXdzIGluIHRoZSBsYXlvdXQuXG4gKiBAcGFyYW0gbGF5b3V0IFRoZSBsYXlvdXQgdG8gZmluZCB0aGUgdmlldyBuYW1lcyBpbi5cbiAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIHZpZXcgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGZpbmRWaWV3TmFtZXMobGF5b3V0OiBQYWdlTGF5b3V0KTogc3RyaW5nW10ge1xuXHRjb25zdCBjb2xsZWN0ZWROYW1lczogc3RyaW5nW10gPSBbXTtcblxuXHRKU09OLnN0cmluZ2lmeShsYXlvdXQsIChfLCBuZXN0ZWRWYWx1ZSkgPT4ge1xuXHRcdC8vIGNoZWNrIHRvIGVuc3VyZSB0aGF0IHdlIGhhdmUgYSBuYW1lIGZpZWxkIGFuZCB0aGF0IHdlIGFsc28gaGF2ZSBhIHVybCBmaWVsZCBpbiB0aGlzIG9iamVjdCAoaW4gY2FzZSBuYW1lIHdhcyBhZGRlZCB0byBhIHJhbmRvbSBwYXJ0IG9mIHRoZSBsYXlvdXQpXG5cdFx0aWYgKG5lc3RlZFZhbHVlPy5uYW1lPy5sZW5ndGggJiYgbmVzdGVkVmFsdWUudXJsICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbGxlY3RlZE5hbWVzLnB1c2gobmVzdGVkVmFsdWUubmFtZSBhcyBzdHJpbmcpO1xuXHRcdH1cblx0XHRyZXR1cm4gbmVzdGVkVmFsdWUgYXMgdW5rbm93bjtcblx0fSk7XG5cblx0cmV0dXJuIGNvbGxlY3RlZE5hbWVzO1xufVxuXG4vKipcbiAqIERvZXMgdGhlIHZpZXcgZXhpc3Q/XG4gKiBAcGFyYW0gaWRlbnRpdHkgVGhlIGlkZW50aXR5IG9mIHRoZSB2aWV3IHRvIGZpbmQuXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB2aWV3IGV4aXN0cy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZG9lc1ZpZXdFeGlzdChpZGVudGl0eTogT3BlbkZpbi5JZGVudGl0eSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRjb25zdCB2aWV3ID0gZmluLlZpZXcud3JhcFN5bmMoaWRlbnRpdHkpO1xuXHRsZXQgZXhpc3RzID0gZmFsc2U7XG5cdHRyeSB7XG5cdFx0YXdhaXQgdmlldy5nZXRJbmZvKCk7XG5cdFx0Y29uc3Qgdmlld0hvc3QgPSBhd2FpdCB2aWV3LmdldEN1cnJlbnRXaW5kb3coKTtcblx0XHRhd2FpdCB2aWV3SG9zdC5icmluZ1RvRnJvbnQoKTtcblx0XHRleGlzdHMgPSB0cnVlO1xuXHR9IGNhdGNoIHtcblx0XHRleGlzdHMgPSBmYWxzZTtcblx0fVxuXHRyZXR1cm4gZXhpc3RzO1xufVxuXG4vKipcbiAqIEdldCBhbGwgdGhlIHZpZXcgaWRlbnRpdGllcyBmb3IgdGhlIHNwZWNpZmllZCB3aW5kb3cuXG4gKiBAcGFyYW0gaWRlbnRpdHkgVGhlIGlkZW50aXR5IG9mIHRoZSB3aW5kb3cgdG8gZmluZCBpdHMgdmlld3MuXG4gKiBAcmV0dXJucyBUaGUgbGlzdCBvZiB2aWV3IGlkZW50aXRpZXMgZm9yIHRoZSB3aW5kb3cuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFZpZXdJZGVudGl0aWVzKGlkZW50aXR5OiBPcGVuRmluLklkZW50aXR5KTogUHJvbWlzZTxPcGVuRmluLklkZW50aXR5W10+IHtcblx0dHJ5IHtcblx0XHRjb25zdCB3aW4gPSBmaW4uV2luZG93LndyYXBTeW5jKGlkZW50aXR5KTtcblx0XHRjb25zdCB2aWV3cyA9IGF3YWl0IHdpbi5nZXRDdXJyZW50Vmlld3MoKTtcblx0XHRjb25zdCB2aWV3SWRlbnRpdGllcyA9IHZpZXdzLm1hcCgodmlldykgPT4gdmlldy5pZGVudGl0eSk7XG5cdFx0YXdhaXQgd2luLnNldEFzRm9yZWdyb3VuZCgpO1xuXHRcdHJldHVybiB2aWV3SWRlbnRpdGllcztcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG59XG5cbi8qKlxuICogUG9seWZpbGxzIHJhbmRvbVVVSUQgaWYgcnVubmluZyBpbiBhIG5vbi1zZWN1cmUgY29udGV4dC5cbiAqIEByZXR1cm5zIFRoZSByYW5kb20gVVVJRC5cbiAqL1xuZnVuY3Rpb24gcmFuZG9tVVVJRCgpOiBzdHJpbmcge1xuXHRpZiAoXCJyYW5kb21VVUlEXCIgaW4gd2luZG93LmNyeXB0bykge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuXHRcdHJldHVybiB3aW5kb3cuY3J5cHRvLnJhbmRvbVVVSUQoKTtcblx0fVxuXHQvLyBQb2x5ZmlsbCB0aGUgd2luZG93LmNyeXB0by5yYW5kb21VVUlEIGlmIHdlIGFyZSBydW5uaW5nIGluIGEgbm9uIHNlY3VyZSBjb250ZXh0IHRoYXQgZG9lc24ndCBoYXZlIGl0XG5cdC8vIHdlIGFyZSBzdGlsbCB1c2luZyB3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyB3aGljaCBpcyBhbHdheXMgYXZhaWxhYmxlXG5cdC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMTE3NTIzLzI4MDAyMThcblx0LyoqXG5cdCAqIEdldCByYW5kb20gaGV4IHZhbHVlLlxuXHQgKiBAcGFyYW0gYyBUaGUgbnVtYmVyIHRvIGJhc2UgdGhlIHJhbmRvbSB2YWx1ZSBvbi5cblx0ICogQHJldHVybnMgVGhlIHJhbmRvbSB2YWx1ZS5cblx0ICovXG5cdGZ1bmN0aW9uIGdldFJhbmRvbUhleChjOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG5cdFx0Y29uc3Qgcm5kID0gd2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMSkpWzBdICYgKDE1ID4+IChOdW1iZXIoYykgLyA0KSk7XG5cdFx0cmV0dXJuIChcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG5cdFx0XHQoTnVtYmVyKGMpIF4gcm5kKS50b1N0cmluZygxNilcblx0XHQpO1xuXHR9XG5cdHJldHVybiBcIjEwMDAwMDAwLTEwMDAtNDAwMC04MDAwLTEwMDAwMDAwMDAwMFwiLnJlcGxhY2UoL1swMThdL2csIGdldFJhbmRvbUhleCk7XG59XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiX193ZWJwYWNrX3JlcXVpcmVfXy5hbWRPID0ge307IiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJpbXBvcnQgeyBjbG91ZEludGVyb3BPdmVycmlkZSB9IGZyb20gXCJAb3BlbmZpbi9jbG91ZC1pbnRlcm9wXCI7XG5pbXBvcnQgdHlwZSBPcGVuRmluIGZyb20gXCJAb3BlbmZpbi9jb3JlXCI7XG5pbXBvcnQgeyBDTElUZW1wbGF0ZSwgSG9tZSwgdHlwZSBBcHAsIHR5cGUgSG9tZVNlYXJjaExpc3RlbmVyUmVxdWVzdCB9IGZyb20gXCJAb3BlbmZpbi93b3Jrc3BhY2VcIjtcbmltcG9ydCB7IGluaXQgfSBmcm9tIFwiQG9wZW5maW4vd29ya3NwYWNlLXBsYXRmb3JtXCI7XG5pbXBvcnQgeyBnZXRBcHBzLCBsYXVuY2hBcHAgfSBmcm9tIFwiLi9hcHBzXCI7XG5pbXBvcnQgeyBjcmVhdGVJbnRlcm9wT3ZlcnJpZGUgfSBmcm9tIFwiLi9pbnRlcm9wYnJva2VyXCI7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbVNldHRpbmdzIH0gZnJvbSBcIi4vc2hhcGVzXCI7XG5cbmNvbnN0IFBMQVRGT1JNX0lEID0gXCJzdXBwb3J0LWNvbnRleHQtYW5kLWludGVudHNcIjtcbmNvbnN0IFBMQVRGT1JNX1RJVExFID0gXCJTdXBwb3J0IENvbnRleHQgYW5kIEludGVudHNcIjtcbmNvbnN0IFBMQVRGT1JNX0lDT04gPSBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9mYXZpY29uLmljb1wiO1xuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgYXN5bmMgKCkgPT4ge1xuXHQvLyBMb2FkIHRoZSBzZXR0aW5ncyBmcm9tIHRoZSBtYW5pZmVzdFxuXHRjb25zdCBjdXN0b21TZXR0aW5ncyA9IGF3YWl0IGdldE1hbmlmZXN0Q3VzdG9tU2V0dGluZ3MoKTtcblxuXHQvLyBXaGVuIHRoZSBwbGF0Zm9ybSBhcGkgaXMgcmVhZHkgd2UgYm9vdHN0cmFwIHRoZSBwbGF0Zm9ybS5cblx0Y29uc3QgcGxhdGZvcm0gPSBmaW4uUGxhdGZvcm0uZ2V0Q3VycmVudFN5bmMoKTtcblx0YXdhaXQgcGxhdGZvcm0ub25jZShcInBsYXRmb3JtLWFwaS1yZWFkeVwiLCBhc3luYyAoKSA9PiBpbml0aWFsaXplV29ya3NwYWNlQ29tcG9uZW50cyhjdXN0b21TZXR0aW5ncykpO1xuXG5cdC8vIFRoZSBET00gaXMgcmVhZHkgc28gaW5pdGlhbGl6ZSB0aGUgcGxhdGZvcm1cblx0Ly8gUHJvdmlkZSBkZWZhdWx0IGljb25zIGFuZCBkZWZhdWx0IHRoZW1lIGZvciB0aGUgYnJvd3NlciB3aW5kb3dzXG5cdGF3YWl0IGluaXRpYWxpemVXb3Jrc3BhY2VQbGF0Zm9ybShjdXN0b21TZXR0aW5ncyk7XG59KTtcblxuLyoqXG4gKiBJbml0aWFsaXplIHRoZSB3b3Jrc3BhY2UgcGxhdGZvcm0uXG4gKiBAcGFyYW0gY3VzdG9tU2V0dGluZ3MgVGhlIGN1c3RvbSBzZXR0aW5ncyBmcm9tIHRoZSBtYW5pZmVzdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW5pdGlhbGl6ZVdvcmtzcGFjZVBsYXRmb3JtKGN1c3RvbVNldHRpbmdzOiBDdXN0b21TZXR0aW5ncyk6IFByb21pc2U8dm9pZD4ge1xuXHRjb25zb2xlLmxvZyhcIkluaXRpYWxpemluZyB3b3Jrc3BhY2UgcGxhdGZvcm1cIik7XG5cblx0Y29uc3QgZGVmYXVsdEJyb2tlciA9IGNyZWF0ZUludGVyb3BPdmVycmlkZShjdXN0b21TZXR0aW5ncyk7XG5cdGNvbnN0IGludGVyb3BPdmVycmlkZTogT3BlbkZpbi5Db25zdHJ1Y3Rvck92ZXJyaWRlPE9wZW5GaW4uSW50ZXJvcEJyb2tlcj5bXSA9IFtkZWZhdWx0QnJva2VyXTtcblxuXHRpZiAoXG5cdFx0Y3VzdG9tU2V0dGluZ3M/LmNsb3VkSW50ZXJvcFByb3ZpZGVyPy5lbmFibGVkID09PSB0cnVlICYmXG5cdFx0Y3VzdG9tU2V0dGluZ3M/LmNsb3VkSW50ZXJvcFByb3ZpZGVyPy5jb25uZWN0UGFyYW1zICE9PSB1bmRlZmluZWRcblx0KSB7XG5cdFx0Y29uc29sZS5sb2coXCJJbml0aWFsaXppbmcgdGhlIGNsb3VkIGludGVyb3Agb3ZlcnJpZGVcIik7XG5cdFx0Y29uc3QgaW5pdGlhbGl6ZWRDbG91ZEludGVyb3BPdmVycmlkZSA9IChhd2FpdCBjbG91ZEludGVyb3BPdmVycmlkZShcblx0XHRcdGN1c3RvbVNldHRpbmdzPy5jbG91ZEludGVyb3BQcm92aWRlcj8uY29ubmVjdFBhcmFtc1xuXHRcdCkpIGFzIHVua25vd24gYXMgT3BlbkZpbi5Db25zdHJ1Y3Rvck92ZXJyaWRlPE9wZW5GaW4uSW50ZXJvcEJyb2tlcj47XG5cdFx0aW50ZXJvcE92ZXJyaWRlLnB1c2goaW5pdGlhbGl6ZWRDbG91ZEludGVyb3BPdmVycmlkZSk7XG5cdH1cblxuXHRhd2FpdCBpbml0KHtcblx0XHRicm93c2VyOiB7XG5cdFx0XHRkZWZhdWx0V2luZG93T3B0aW9uczoge1xuXHRcdFx0XHRpY29uOiBQTEFURk9STV9JQ09OLFxuXHRcdFx0XHR3b3Jrc3BhY2VQbGF0Zm9ybToge1xuXHRcdFx0XHRcdHBhZ2VzOiBbXSxcblx0XHRcdFx0XHRmYXZpY29uOiBQTEFURk9STV9JQ09OXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdHRoZW1lOiBbXG5cdFx0XHR7XG5cdFx0XHRcdGxhYmVsOiBcIkRlZmF1bHRcIixcblx0XHRcdFx0ZGVmYXVsdDogXCJkYXJrXCIsXG5cdFx0XHRcdHBhbGV0dGU6IHtcblx0XHRcdFx0XHRicmFuZFByaW1hcnk6IFwiIzBBNzZEM1wiLFxuXHRcdFx0XHRcdGJyYW5kU2Vjb25kYXJ5OiBcIiMzODNBNDBcIixcblx0XHRcdFx0XHRiYWNrZ3JvdW5kUHJpbWFyeTogXCIjMUUxRjIzXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0Ly8gVXNlIGFuIG92ZXJyaWRlIGZvciB0aGUgcGxhdGZvcm0gaW50ZXJvcCB0byBoYW5kbGUgdGhlIGNvbnRleHQgYW5kIGludGVudHNcblx0XHRpbnRlcm9wT3ZlcnJpZGVcblx0fSk7XG59XG5cbi8qKlxuICogQnJpbmcgdGhlIHBsYXRmb3JtIHRvIGxpZmUuXG4gKiBAcGFyYW0gY3VzdG9tU2V0dGluZ3MgVGhlIGN1c3RvbSBzZXR0aW5ncyBmcm9tIHRoZSBtYW5pZmVzdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW5pdGlhbGl6ZVdvcmtzcGFjZUNvbXBvbmVudHMoY3VzdG9tU2V0dGluZ3M6IEN1c3RvbVNldHRpbmdzKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnNvbGUubG9nKFwiSW5pdGlhbGl6aW5nIHRoZSBib290c3RyYXBwZXJcIik7XG5cblx0Ly8gUmVnaXN0ZXIgd2l0aCBob21lIGFuZCBzaG93IGl0XG5cdGF3YWl0IEhvbWUucmVnaXN0ZXIoe1xuXHRcdHRpdGxlOiBQTEFURk9STV9USVRMRSxcblx0XHRpZDogUExBVEZPUk1fSUQsXG5cdFx0aWNvbjogUExBVEZPUk1fSUNPTixcblx0XHRvblVzZXJJbnB1dDogYXN5bmMgKHJlcXVlc3Q6IEhvbWVTZWFyY2hMaXN0ZW5lclJlcXVlc3QpID0+IHtcblx0XHRcdC8vIEdldCB0aGUgbGlzdCBvZiBhbGwgdGhlIGFwcHNcblx0XHRcdGxldCBhcHBzID0gYXdhaXQgZ2V0QXBwcyhjdXN0b21TZXR0aW5ncy5hcHBQcm92aWRlcik7XG5cblx0XHRcdGlmIChyZXF1ZXN0LnF1ZXJ5Lmxlbmd0aCA+PSAzKSB7XG5cdFx0XHRcdC8vIEZpbHRlciB0aGVtIGJ5IHRpdGxlIGlmIHdlIGhhdmUgYSBxdWVyeVxuXHRcdFx0XHRhcHBzID0gYXBwcy5maWx0ZXIoKGFwcCkgPT4gYXBwLnRpdGxlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocmVxdWVzdC5xdWVyeS50b0xvd2VyQ2FzZSgpKSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdC8vIEFsd2F5cyByZXR1cm4ganVzdCB0aGUgYXBwcyBsaXN0IGluIGhvbWVcblx0XHRcdFx0cmVzdWx0czogYXBwcy5tYXAoKGFwcCkgPT4gKHtcblx0XHRcdFx0XHRrZXk6IGFwcC5hcHBJZCxcblx0XHRcdFx0XHR0aXRsZTogYXBwLnRpdGxlLFxuXHRcdFx0XHRcdGljb246IGFwcC5pY29uc1swXT8uc3JjLFxuXHRcdFx0XHRcdGRhdGE6IGFwcCxcblx0XHRcdFx0XHRsYWJlbDogYXBwLm1hbmlmZXN0VHlwZSA9PT0gXCJpbmxpbmUtYXBwYXNzZXRcIiB8fCBhcHAubWFuaWZlc3RUeXBlID09PSBcImV4dGVybmFsXCIgPyBcIkFwcFwiIDogXCJWaWV3XCIsXG5cdFx0XHRcdFx0YWN0aW9uczogW3sgbmFtZTogXCJMYXVuY2hcIiwgaG90a2V5OiBcImVudGVyXCIgfV0sXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IGFwcC5kZXNjcmlwdGlvbixcblx0XHRcdFx0XHRzaG9ydERlc2NyaXB0aW9uOiBhcHAuZGVzY3JpcHRpb24sXG5cdFx0XHRcdFx0dGVtcGxhdGU6IENMSVRlbXBsYXRlLlNpbXBsZVRleHQsXG5cdFx0XHRcdFx0dGVtcGxhdGVDb250ZW50OiBhcHAuZGVzY3JpcHRpb25cblx0XHRcdFx0fSkpXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0b25SZXN1bHREaXNwYXRjaDogYXN5bmMgKHJlc3VsdCkgPT4ge1xuXHRcdFx0Ly8gV2Ugb25seSBoYXZlIGFwcHMsIHNvIGp1c3QgbGF1bmNoIHRoZW1cblx0XHRcdGF3YWl0IGxhdW5jaEFwcChyZXN1bHQuZGF0YSBhcyBBcHApO1xuXHRcdH1cblx0fSk7XG5cblx0YXdhaXQgSG9tZS5zaG93KCk7XG5cblx0Ly8gV2hlbiB0aGUgcGxhdGZvcm0gcmVxdWVzdHMgdG8gYmUgY2xvc2Ugd2UgZGVyZWdpc3RlciBmcm9tIGhvbWUgYW5kIHF1aXRcblx0Y29uc3QgcHJvdmlkZXJXaW5kb3cgPSBmaW4uV2luZG93LmdldEN1cnJlbnRTeW5jKCk7XG5cdGF3YWl0IHByb3ZpZGVyV2luZG93Lm9uY2UoXCJjbG9zZS1yZXF1ZXN0ZWRcIiwgYXN5bmMgKCkgPT4ge1xuXHRcdGF3YWl0IEhvbWUuZGVyZWdpc3RlcihQTEFURk9STV9JRCk7XG5cdFx0YXdhaXQgZmluLlBsYXRmb3JtLmdldEN1cnJlbnRTeW5jKCkucXVpdCgpO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBSZWFkIHRoZSBjdXN0b20gc2V0dGluZ3MgZnJvbSB0aGUgbWFuaWZlc3QuZmluLmpzb24uXG4gKiBAcmV0dXJucyBUaGUgY3VzdG9tIHNldHRpbmdzIGZyb20gdGhlIG1hbmlmZXN0LlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRNYW5pZmVzdEN1c3RvbVNldHRpbmdzKCk6IFByb21pc2U8Q3VzdG9tU2V0dGluZ3M+IHtcblx0Ly8gR2V0IHRoZSBtYW5pZmVzdCBmb3IgdGhlIGN1cnJlbnQgYXBwbGljYXRpb25cblx0Y29uc3QgYXBwID0gYXdhaXQgZmluLkFwcGxpY2F0aW9uLmdldEN1cnJlbnQoKTtcblxuXHQvLyBFeHRyYWN0IHRoZSBjdXN0b20gc2V0dGluZ3MgZm9yIHRoaXMgYXBwbGljYXRpb25cblx0Y29uc3QgbWFuaWZlc3Q6IE9wZW5GaW4uTWFuaWZlc3QgJiB7IGN1c3RvbVNldHRpbmdzPzogQ3VzdG9tU2V0dGluZ3MgfSA9IGF3YWl0IGFwcC5nZXRNYW5pZmVzdCgpO1xuXHRyZXR1cm4gbWFuaWZlc3QuY3VzdG9tU2V0dGluZ3MgPz8ge307XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/workspace/v20.1.0/support-context-and-intents/manifest.fin.json b/workspace/v20.1.0/support-context-and-intents/manifest.fin.json index 7fef63711..7fb1c3b8a 100644 --- a/workspace/v20.1.0/support-context-and-intents/manifest.fin.json +++ b/workspace/v20.1.0/support-context-and-intents/manifest.fin.json @@ -74,8 +74,11 @@ "enabled": false, "connectParams": { "url": "", - "userId": "", - "password": "", + "authenticationType": "basic", + "basicAuthenticationParameters": { + "username": "", + "password": "" + }, "platformId": "", "sourceId": "", "sourceDisplayName": "", diff --git a/workspace/v20.1.0/support-context-and-intents/second.manifest.fin.json b/workspace/v20.1.0/support-context-and-intents/second.manifest.fin.json index aeeb8162f..c06ae778a 100644 --- a/workspace/v20.1.0/support-context-and-intents/second.manifest.fin.json +++ b/workspace/v20.1.0/support-context-and-intents/second.manifest.fin.json @@ -59,8 +59,11 @@ "enabled": false, "connectParams": { "url": "", - "userId": "", - "password": "", + "authenticationType": "basic", + "basicAuthenticationParameters": { + "username": "", + "password": "" + }, "platformId": "", "sourceId": "", "sourceDisplayName": "", diff --git a/workspace/v20.1.0/workspace-platform-starter/js/modules/interop-override/openfin-cloud-interop.bundle.js b/workspace/v20.1.0/workspace-platform-starter/js/modules/interop-override/openfin-cloud-interop.bundle.js index 38cd6d1ae..d86d34a4b 100644 --- a/workspace/v20.1.0/workspace-platform-starter/js/modules/interop-override/openfin-cloud-interop.bundle.js +++ b/workspace/v20.1.0/workspace-platform-starter/js/modules/interop-override/openfin-cloud-interop.bundle.js @@ -1,3 +1,3 @@ /*! For license information please see openfin-cloud-interop.bundle.js.LICENSE.txt */ -var e={991:(e,t)=>{t.byteLength=function(e){var t=a(e),r=t[0],n=t[1];return 3*(r+n)/4-n},t.toByteArray=function(e){var t,r,o=a(e),s=o[0],l=o[1],u=new i(function(e,t,r){return 3*(t+r)/4-r}(0,s,l)),h=0,c=l>0?s-4:s;for(r=0;r>16&255,u[h++]=t>>8&255,u[h++]=255&t;return 2===l&&(t=n[e.charCodeAt(r)]<<2|n[e.charCodeAt(r+1)]>>4,u[h++]=255&t),1===l&&(t=n[e.charCodeAt(r)]<<10|n[e.charCodeAt(r+1)]<<4|n[e.charCodeAt(r+2)]>>2,u[h++]=t>>8&255,u[h++]=255&t),u},t.fromByteArray=function(e){for(var t,n=e.length,i=n%3,o=[],s=16383,a=0,u=n-i;au?u:a+s));return 1===i?(t=e[n-1],o.push(r[t>>2]+r[t<<4&63]+"==")):2===i&&(t=(e[n-2]<<8)+e[n-1],o.push(r[t>>10]+r[t>>4&63]+r[t<<2&63]+"=")),o.join("")};for(var r=[],n=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0;s<64;++s)r[s]=o[s],n[o.charCodeAt(s)]=s;function a(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=e.indexOf("=");return-1===r&&(r=t),[r,r===t?0:4-r%4]}function l(e,t,n){for(var i,o,s=[],a=t;a>18&63]+r[o>>12&63]+r[o>>6&63]+r[63&o]);return s.join("")}n["-".charCodeAt(0)]=62,n["_".charCodeAt(0)]=63},48:(e,t,r)=>{var n=r(991),i=r(318),o=r(815);function s(){return l.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function a(e,t){if(s()=s())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+s().toString(16)+" bytes");return 0|e}function d(e,t){if(l.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var r=e.length;if(0===r)return 0;for(var n=!1;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return F(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return W(e).length;default:if(n)return F(e).length;t=(""+t).toLowerCase(),n=!0}}function g(e,t,r){var n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return k(this,t,r);case"utf8":case"utf-8":return T(this,t,r);case"ascii":return O(this,t,r);case"latin1":case"binary":return C(this,t,r);case"base64":return I(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return P(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function y(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function m(e,t,r,n,i){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=i?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(i)return-1;r=e.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof t&&(t=l.from(t,n)),l.isBuffer(t))return 0===t.length?-1:b(e,t,r,n,i);if("number"==typeof t)return t&=255,l.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):b(e,[t],r,n,i);throw new TypeError("val must be string, number or Buffer")}function b(e,t,r,n,i){var o,s=1,a=e.length,l=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;s=2,a/=2,l/=2,r/=2}function u(e,t){return 1===s?e[t]:e.readUInt16BE(t*s)}if(i){var h=-1;for(o=r;oa&&(r=a-l),o=r;o>=0;o--){for(var c=!0,f=0;fi&&(n=i):n=i;var o=t.length;if(o%2!=0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var s=0;s>8,i=r%256,o.push(i),o.push(n);return o}(t,e.length-r),e,r,n)}function I(e,t,r){return 0===t&&r===e.length?n.fromByteArray(e):n.fromByteArray(e.slice(t,r))}function T(e,t,r){r=Math.min(e.length,r);for(var n=[],i=t;i239?4:u>223?3:u>191?2:1;if(i+c<=r)switch(c){case 1:u<128&&(h=u);break;case 2:128==(192&(o=e[i+1]))&&(l=(31&u)<<6|63&o)>127&&(h=l);break;case 3:o=e[i+1],s=e[i+2],128==(192&o)&&128==(192&s)&&(l=(15&u)<<12|(63&o)<<6|63&s)>2047&&(l<55296||l>57343)&&(h=l);break;case 4:o=e[i+1],s=e[i+2],a=e[i+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(l=(15&u)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&l<1114112&&(h=l)}null===h?(h=65533,c=1):h>65535&&(h-=65536,n.push(h>>>10&1023|55296),h=56320|1023&h),n.push(h),i+=c}return function(e){var t=e.length;if(t<=R)return String.fromCharCode.apply(String,e);for(var r="",n=0;n0&&(e=this.toString("hex",0,r).match(/.{2}/g).join(" "),this.length>r&&(e+=" ... ")),""},l.prototype.compare=function(e,t,r,n,i){if(!l.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),t<0||r>e.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&t>=r)return 0;if(n>=i)return-1;if(t>=r)return 1;if(this===e)return 0;for(var o=(i>>>=0)-(n>>>=0),s=(r>>>=0)-(t>>>=0),a=Math.min(o,s),u=this.slice(n,i),h=e.slice(t,r),c=0;ci)&&(r=i),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return w(this,e,t,r);case"utf8":case"utf-8":return _(this,e,t,r);case"ascii":return v(this,e,t,r);case"latin1":case"binary":return E(this,e,t,r);case"base64":return S(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return A(this,e,t,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},l.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var R=4096;function O(e,t,r){var n="";r=Math.min(e.length,r);for(var i=t;ii)&&(r=i);for(var o="",s=t;sr)throw new RangeError("Trying to access beyond buffer length")}function x(e,t,r,n,i,o){if(!l.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||te.length)throw new RangeError("Index out of range")}function U(e,t,r,n){t<0&&(t=65535+t+1);for(var i=0,o=Math.min(e.length-r,2);i>>8*(n?i:1-i)}function L(e,t,r,n){t<0&&(t=4294967295+t+1);for(var i=0,o=Math.min(e.length-r,4);i>>8*(n?i:3-i)&255}function M(e,t,r,n,i,o){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function N(e,t,r,n,o){return o||M(e,0,r,4),i.write(e,t,r,n,23,4),r+4}function j(e,t,r,n,o){return o||M(e,0,r,8),i.write(e,t,r,n,52,8),r+8}l.prototype.slice=function(e,t){var r,n=this.length;if((e=~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),(t=void 0===t?n:~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),t0&&(i*=256);)n+=this[e+--t]*i;return n},l.prototype.readUInt8=function(e,t){return t||B(e,1,this.length),this[e]},l.prototype.readUInt16LE=function(e,t){return t||B(e,2,this.length),this[e]|this[e+1]<<8},l.prototype.readUInt16BE=function(e,t){return t||B(e,2,this.length),this[e]<<8|this[e+1]},l.prototype.readUInt32LE=function(e,t){return t||B(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},l.prototype.readUInt32BE=function(e,t){return t||B(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},l.prototype.readIntLE=function(e,t,r){e|=0,t|=0,r||B(e,t,this.length);for(var n=this[e],i=1,o=0;++o=(i*=128)&&(n-=Math.pow(2,8*t)),n},l.prototype.readIntBE=function(e,t,r){e|=0,t|=0,r||B(e,t,this.length);for(var n=t,i=1,o=this[e+--n];n>0&&(i*=256);)o+=this[e+--n]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*t)),o},l.prototype.readInt8=function(e,t){return t||B(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},l.prototype.readInt16LE=function(e,t){t||B(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},l.prototype.readInt16BE=function(e,t){t||B(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},l.prototype.readInt32LE=function(e,t){return t||B(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},l.prototype.readInt32BE=function(e,t){return t||B(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},l.prototype.readFloatLE=function(e,t){return t||B(e,4,this.length),i.read(this,e,!0,23,4)},l.prototype.readFloatBE=function(e,t){return t||B(e,4,this.length),i.read(this,e,!1,23,4)},l.prototype.readDoubleLE=function(e,t){return t||B(e,8,this.length),i.read(this,e,!0,52,8)},l.prototype.readDoubleBE=function(e,t){return t||B(e,8,this.length),i.read(this,e,!1,52,8)},l.prototype.writeUIntLE=function(e,t,r,n){e=+e,t|=0,r|=0,n||x(this,e,t,r,Math.pow(2,8*r)-1,0);var i=1,o=0;for(this[t]=255&e;++o=0&&(o*=256);)this[t+i]=e/o&255;return t+r},l.prototype.writeUInt8=function(e,t,r){return e=+e,t|=0,r||x(this,e,t,1,255,0),l.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},l.prototype.writeUInt16LE=function(e,t,r){return e=+e,t|=0,r||x(this,e,t,2,65535,0),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):U(this,e,t,!0),t+2},l.prototype.writeUInt16BE=function(e,t,r){return e=+e,t|=0,r||x(this,e,t,2,65535,0),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):U(this,e,t,!1),t+2},l.prototype.writeUInt32LE=function(e,t,r){return e=+e,t|=0,r||x(this,e,t,4,4294967295,0),l.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):L(this,e,t,!0),t+4},l.prototype.writeUInt32BE=function(e,t,r){return e=+e,t|=0,r||x(this,e,t,4,4294967295,0),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):L(this,e,t,!1),t+4},l.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t|=0,!n){var i=Math.pow(2,8*r-1);x(this,e,t,r,i-1,-i)}var o=0,s=1,a=0;for(this[t]=255&e;++o=0&&(s*=256);)e<0&&0===a&&0!==this[t+o+1]&&(a=1),this[t+o]=(e/s|0)-a&255;return t+r},l.prototype.writeInt8=function(e,t,r){return e=+e,t|=0,r||x(this,e,t,1,127,-128),l.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},l.prototype.writeInt16LE=function(e,t,r){return e=+e,t|=0,r||x(this,e,t,2,32767,-32768),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):U(this,e,t,!0),t+2},l.prototype.writeInt16BE=function(e,t,r){return e=+e,t|=0,r||x(this,e,t,2,32767,-32768),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):U(this,e,t,!1),t+2},l.prototype.writeInt32LE=function(e,t,r){return e=+e,t|=0,r||x(this,e,t,4,2147483647,-2147483648),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):L(this,e,t,!0),t+4},l.prototype.writeInt32BE=function(e,t,r){return e=+e,t|=0,r||x(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):L(this,e,t,!1),t+4},l.prototype.writeFloatLE=function(e,t,r){return N(this,e,t,!0,r)},l.prototype.writeFloatBE=function(e,t,r){return N(this,e,t,!1,r)},l.prototype.writeDoubleLE=function(e,t,r){return j(this,e,t,!0,r)},l.prototype.writeDoubleBE=function(e,t,r){return j(this,e,t,!1,r)},l.prototype.copy=function(e,t,r,n){if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t=0;--i)e[i+t]=this[i+r];else if(o<1e3||!l.TYPED_ARRAY_SUPPORT)for(i=0;i>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(o=t;o55295&&r<57344){if(!i){if(r>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(s+1===n){(t-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(t-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(t-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((t-=1)<0)break;o.push(r)}else if(r<2048){if((t-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function W(e){return n.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(D,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function q(e,t,r,n){for(var i=0;i=t.length||i>=e.length);++i)t[i+r]=e[i];return i}},318:(e,t)=>{t.read=function(e,t,r,n,i){var o,s,a=8*i-n-1,l=(1<>1,h=-7,c=r?i-1:0,f=r?-1:1,p=e[t+c];for(c+=f,o=p&(1<<-h)-1,p>>=-h,h+=a;h>0;o=256*o+e[t+c],c+=f,h-=8);for(s=o&(1<<-h)-1,o>>=-h,h+=n;h>0;s=256*s+e[t+c],c+=f,h-=8);if(0===o)o=1-u;else{if(o===l)return s?NaN:1/0*(p?-1:1);s+=Math.pow(2,n),o-=u}return(p?-1:1)*s*Math.pow(2,o-n)},t.write=function(e,t,r,n,i,o){var s,a,l,u=8*o-i-1,h=(1<>1,f=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:o-1,d=n?1:-1,g=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(a=isNaN(t)?1:0,s=h):(s=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-s))<1&&(s--,l*=2),(t+=s+c>=1?f/l:f*Math.pow(2,1-c))*l>=2&&(s++,l/=2),s+c>=h?(a=0,s=h):s+c>=1?(a=(t*l-1)*Math.pow(2,i),s+=c):(a=t*Math.pow(2,c-1)*Math.pow(2,i),s=0));i>=8;e[r+p]=255&a,p+=d,a/=256,i-=8);for(s=s<0;e[r+p]=255&s,p+=d,s/=256,u-=8);e[r+p-d]|=128*g}},815:e=>{var t={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==t.call(e)}}},t={};function r(n){var i=t[n];if(void 0!==i)return i.exports;var o=t[n]={exports:{}};return e[n](o,o.exports,r),o.exports}r.amdO={},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var n={};r.d(n,{k:()=>Tl});var i=r(48);function o(e,t){return function(){return e.apply(t,arguments)}}const{toString:s}=Object.prototype,{getPrototypeOf:a}=Object,l=(u=Object.create(null),e=>{const t=s.call(e);return u[t]||(u[t]=t.slice(8,-1).toLowerCase())});var u;const h=e=>(e=e.toLowerCase(),t=>l(t)===e),c=e=>t=>typeof t===e,{isArray:f}=Array,p=c("undefined"),d=h("ArrayBuffer"),g=c("string"),y=c("function"),m=c("number"),b=e=>null!==e&&"object"==typeof e,w=e=>{if("object"!==l(e))return!1;const t=a(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||Symbol.toStringTag in e||Symbol.iterator in e)},_=h("Date"),v=h("File"),E=h("Blob"),S=h("FileList"),A=h("URLSearchParams");function I(e,t,{allOwnKeys:r=!1}={}){if(null==e)return;let n,i;if("object"!=typeof e&&(e=[e]),f(e))for(n=0,i=e.length;n0;)if(n=r[i],t===n.toLowerCase())return n;return null}const R="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:r.g,O=e=>!p(e)&&e!==R,C=(k="undefined"!=typeof Uint8Array&&a(Uint8Array),e=>k&&e instanceof k);var k;const P=h("HTMLFormElement"),B=(({hasOwnProperty:e})=>(t,r)=>e.call(t,r))(Object.prototype),x=h("RegExp"),U=(e,t)=>{const r=Object.getOwnPropertyDescriptors(e),n={};I(r,((r,i)=>{let o;!1!==(o=t(r,i,e))&&(n[i]=o||r)})),Object.defineProperties(e,n)},L="abcdefghijklmnopqrstuvwxyz",M="0123456789",N={DIGIT:M,ALPHA:L,ALPHA_DIGIT:L+L.toUpperCase()+M},j=h("AsyncFunction");var D={isArray:f,isArrayBuffer:d,isBuffer:function(e){return null!==e&&!p(e)&&null!==e.constructor&&!p(e.constructor)&&y(e.constructor.isBuffer)&&e.constructor.isBuffer(e)},isFormData:e=>{let t;return e&&("function"==typeof FormData&&e instanceof FormData||y(e.append)&&("formdata"===(t=l(e))||"object"===t&&y(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&d(e.buffer),t},isString:g,isNumber:m,isBoolean:e=>!0===e||!1===e,isObject:b,isPlainObject:w,isUndefined:p,isDate:_,isFile:v,isBlob:E,isRegExp:x,isFunction:y,isStream:e=>b(e)&&y(e.pipe),isURLSearchParams:A,isTypedArray:C,isFileList:S,forEach:I,merge:function e(){const{caseless:t}=O(this)&&this||{},r={},n=(n,i)=>{const o=t&&T(r,i)||i;w(r[o])&&w(n)?r[o]=e(r[o],n):w(n)?r[o]=e({},n):f(n)?r[o]=n.slice():r[o]=n};for(let e=0,t=arguments.length;e(I(t,((t,n)=>{r&&y(t)?e[n]=o(t,r):e[n]=t}),{allOwnKeys:n}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,r,n)=>{e.prototype=Object.create(t.prototype,n),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),r&&Object.assign(e.prototype,r)},toFlatObject:(e,t,r,n)=>{let i,o,s;const l={};if(t=t||{},null==e)return t;do{for(i=Object.getOwnPropertyNames(e),o=i.length;o-- >0;)s=i[o],n&&!n(s,e,t)||l[s]||(t[s]=e[s],l[s]=!0);e=!1!==r&&a(e)}while(e&&(!r||r(e,t))&&e!==Object.prototype);return t},kindOf:l,kindOfTest:h,endsWith:(e,t,r)=>{e=String(e),(void 0===r||r>e.length)&&(r=e.length),r-=t.length;const n=e.indexOf(t,r);return-1!==n&&n===r},toArray:e=>{if(!e)return null;if(f(e))return e;let t=e.length;if(!m(t))return null;const r=new Array(t);for(;t-- >0;)r[t]=e[t];return r},forEachEntry:(e,t)=>{const r=(e&&e[Symbol.iterator]).call(e);let n;for(;(n=r.next())&&!n.done;){const r=n.value;t.call(e,r[0],r[1])}},matchAll:(e,t)=>{let r;const n=[];for(;null!==(r=e.exec(t));)n.push(r);return n},isHTMLForm:P,hasOwnProperty:B,hasOwnProp:B,reduceDescriptors:U,freezeMethods:e=>{U(e,((t,r)=>{if(y(e)&&-1!==["arguments","caller","callee"].indexOf(r))return!1;const n=e[r];y(n)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+r+"'")}))}))},toObjectSet:(e,t)=>{const r={},n=e=>{e.forEach((e=>{r[e]=!0}))};return f(e)?n(e):n(String(e).split(t)),r},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(e,t,r){return t.toUpperCase()+r})),noop:()=>{},toFiniteNumber:(e,t)=>(e=+e,Number.isFinite(e)?e:t),findKey:T,global:R,isContextDefined:O,ALPHABET:N,generateString:(e=16,t=N.ALPHA_DIGIT)=>{let r="";const{length:n}=t;for(;e--;)r+=t[Math.random()*n|0];return r},isSpecCompliantForm:function(e){return!!(e&&y(e.append)&&"FormData"===e[Symbol.toStringTag]&&e[Symbol.iterator])},toJSONObject:e=>{const t=new Array(10),r=(e,n)=>{if(b(e)){if(t.indexOf(e)>=0)return;if(!("toJSON"in e)){t[n]=e;const i=f(e)?[]:{};return I(e,((e,t)=>{const o=r(e,n+1);!p(o)&&(i[t]=o)})),t[n]=void 0,i}}return e};return r(e,0)},isAsyncFn:j,isThenable:e=>e&&(b(e)||y(e))&&y(e.then)&&y(e.catch)};function F(e,t,r,n,i){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),r&&(this.config=r),n&&(this.request=n),i&&(this.response=i)}D.inherits(F,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:D.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const W=F.prototype,q={};function $(e){return D.isPlainObject(e)||D.isArray(e)}function V(e){return D.endsWith(e,"[]")?e.slice(0,-2):e}function H(e,t,r){return e?e.concat(t).map((function(e,t){return e=V(e),!r&&t?"["+e+"]":e})).join(r?".":""):t}["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=>{q[e]={value:e}})),Object.defineProperties(F,q),Object.defineProperty(W,"isAxiosError",{value:!0}),F.from=(e,t,r,n,i,o)=>{const s=Object.create(W);return D.toFlatObject(e,s,(function(e){return e!==Error.prototype}),(e=>"isAxiosError"!==e)),F.call(s,e.message,t,r,n,i),s.cause=e,s.name=e.name,o&&Object.assign(s,o),s};const z=D.toFlatObject(D,{},null,(function(e){return/^is[A-Z]/.test(e)}));function Y(e,t,r){if(!D.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const n=(r=D.toFlatObject(r,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!D.isUndefined(t[e])}))).metaTokens,o=r.visitor||h,s=r.dots,a=r.indexes,l=(r.Blob||"undefined"!=typeof Blob&&Blob)&&D.isSpecCompliantForm(t);if(!D.isFunction(o))throw new TypeError("visitor must be a function");function u(e){if(null===e)return"";if(D.isDate(e))return e.toISOString();if(!l&&D.isBlob(e))throw new F("Blob is not supported. Use a Buffer instead.");return D.isArrayBuffer(e)||D.isTypedArray(e)?l&&"function"==typeof Blob?new Blob([e]):i.hp.from(e):e}function h(e,r,i){let o=e;if(e&&!i&&"object"==typeof e)if(D.endsWith(r,"{}"))r=n?r:r.slice(0,-2),e=JSON.stringify(e);else if(D.isArray(e)&&function(e){return D.isArray(e)&&!e.some($)}(e)||(D.isFileList(e)||D.endsWith(r,"[]"))&&(o=D.toArray(e)))return r=V(r),o.forEach((function(e,n){!D.isUndefined(e)&&null!==e&&t.append(!0===a?H([r],n,s):null===a?r:r+"[]",u(e))})),!1;return!!$(e)||(t.append(H(i,r,s),u(e)),!1)}const c=[],f=Object.assign(z,{defaultVisitor:h,convertValue:u,isVisitable:$});if(!D.isObject(e))throw new TypeError("data must be an object");return function e(r,n){if(!D.isUndefined(r)){if(-1!==c.indexOf(r))throw Error("Circular reference detected in "+n.join("."));c.push(r),D.forEach(r,(function(r,i){!0===(!(D.isUndefined(r)||null===r)&&o.call(t,r,D.isString(i)?i.trim():i,n,f))&&e(r,n?n.concat(i):[i])})),c.pop()}}(e),t}function K(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,(function(e){return t[e]}))}function G(e,t){this._pairs=[],e&&Y(e,this,t)}const Q=G.prototype;function J(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function X(e,t,r){if(!t)return e;const n=r&&r.encode||J,i=r&&r.serialize;let o;if(o=i?i(t,r):D.isURLSearchParams(t)?t.toString():new G(t,r).toString(n),o){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+o}return e}Q.append=function(e,t){this._pairs.push([e,t])},Q.toString=function(e){const t=e?function(t){return e.call(this,t,K)}:K;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")};class Z{constructor(){this.handlers=[]}use(e,t,r){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!r&&r.synchronous,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){D.forEach(this.handlers,(function(t){null!==t&&e(t)}))}}var ee={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},te={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:G,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]};const re="undefined"!=typeof window&&"undefined"!=typeof document,ne=(ie="undefined"!=typeof navigator&&navigator.product,re&&["ReactNative","NativeScript","NS"].indexOf(ie)<0);var ie;const oe="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts;var se={...Object.freeze({__proto__:null,hasBrowserEnv:re,hasStandardBrowserEnv:ne,hasStandardBrowserWebWorkerEnv:oe}),...te};function ae(e){function t(e,r,n,i){let o=e[i++];if("__proto__"===o)return!0;const s=Number.isFinite(+o),a=i>=e.length;return o=!o&&D.isArray(n)?n.length:o,a?(D.hasOwnProp(n,o)?n[o]=[n[o],r]:n[o]=r,!s):(n[o]&&D.isObject(n[o])||(n[o]=[]),t(e,r,n[o],i)&&D.isArray(n[o])&&(n[o]=function(e){const t={},r=Object.keys(e);let n;const i=r.length;let o;for(n=0;n{t(function(e){return D.matchAll(/\w+|\[(\w*)]/g,e).map((e=>"[]"===e[0]?"":e[1]||e[0]))}(e),n,r,0)})),r}return null}const le={transitional:ee,adapter:["xhr","http"],transformRequest:[function(e,t){const r=t.getContentType()||"",n=r.indexOf("application/json")>-1,i=D.isObject(e);if(i&&D.isHTMLForm(e)&&(e=new FormData(e)),D.isFormData(e))return n?JSON.stringify(ae(e)):e;if(D.isArrayBuffer(e)||D.isBuffer(e)||D.isStream(e)||D.isFile(e)||D.isBlob(e))return e;if(D.isArrayBufferView(e))return e.buffer;if(D.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let o;if(i){if(r.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return Y(e,new se.classes.URLSearchParams,Object.assign({visitor:function(e,t,r,n){return se.isNode&&D.isBuffer(e)?(this.append(t,e.toString("base64")),!1):n.defaultVisitor.apply(this,arguments)}},t))}(e,this.formSerializer).toString();if((o=D.isFileList(e))||r.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return Y(o?{"files[]":e}:e,t&&new t,this.formSerializer)}}return i||n?(t.setContentType("application/json",!1),function(e){if(D.isString(e))try{return(0,JSON.parse)(e),D.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(0,JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||le.transitional,r=t&&t.forcedJSONParsing,n="json"===this.responseType;if(e&&D.isString(e)&&(r&&!this.responseType||n)){const r=!(t&&t.silentJSONParsing)&&n;try{return JSON.parse(e)}catch(e){if(r){if("SyntaxError"===e.name)throw F.from(e,F.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:se.classes.FormData,Blob:se.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};D.forEach(["delete","get","head","post","put","patch"],(e=>{le.headers[e]={}}));var ue=le;const he=D.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"]),ce=Symbol("internals");function fe(e){return e&&String(e).trim().toLowerCase()}function pe(e){return!1===e||null==e?e:D.isArray(e)?e.map(pe):String(e)}function de(e,t,r,n,i){return D.isFunction(n)?n.call(this,t,r):(i&&(t=r),D.isString(t)?D.isString(n)?-1!==t.indexOf(n):D.isRegExp(n)?n.test(t):void 0:void 0)}class ge{constructor(e){e&&this.set(e)}set(e,t,r){const n=this;function i(e,t,r){const i=fe(t);if(!i)throw new Error("header name must be a non-empty string");const o=D.findKey(n,i);(!o||void 0===n[o]||!0===r||void 0===r&&!1!==n[o])&&(n[o||t]=pe(e))}const o=(e,t)=>D.forEach(e,((e,r)=>i(e,r,t)));return D.isPlainObject(e)||e instanceof this.constructor?o(e,t):D.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim())?o((e=>{const t={};let r,n,i;return e&&e.split("\n").forEach((function(e){i=e.indexOf(":"),r=e.substring(0,i).trim().toLowerCase(),n=e.substring(i+1).trim(),!r||t[r]&&he[r]||("set-cookie"===r?t[r]?t[r].push(n):t[r]=[n]:t[r]=t[r]?t[r]+", "+n:n)})),t})(e),t):null!=e&&i(t,e,r),this}get(e,t){if(e=fe(e)){const r=D.findKey(this,e);if(r){const e=this[r];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),r=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let n;for(;n=r.exec(e);)t[n[1]]=n[2];return t}(e);if(D.isFunction(t))return t.call(this,e,r);if(D.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=fe(e)){const r=D.findKey(this,e);return!(!r||void 0===this[r]||t&&!de(0,this[r],r,t))}return!1}delete(e,t){const r=this;let n=!1;function i(e){if(e=fe(e)){const i=D.findKey(r,e);!i||t&&!de(0,r[i],i,t)||(delete r[i],n=!0)}}return D.isArray(e)?e.forEach(i):i(e),n}clear(e){const t=Object.keys(this);let r=t.length,n=!1;for(;r--;){const i=t[r];e&&!de(0,this[i],i,e,!0)||(delete this[i],n=!0)}return n}normalize(e){const t=this,r={};return D.forEach(this,((n,i)=>{const o=D.findKey(r,i);if(o)return t[o]=pe(n),void delete t[i];const s=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((e,t,r)=>t.toUpperCase()+r))}(i):String(i).trim();s!==i&&delete t[i],t[s]=pe(n),r[s]=!0})),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return D.forEach(this,((r,n)=>{null!=r&&!1!==r&&(t[n]=e&&D.isArray(r)?r.join(", "):r)})),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map((([e,t])=>e+": "+t)).join("\n")}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const r=new this(e);return t.forEach((e=>r.set(e))),r}static accessor(e){const t=(this[ce]=this[ce]={accessors:{}}).accessors,r=this.prototype;function n(e){const n=fe(e);t[n]||(function(e,t){const r=D.toCamelCase(" "+t);["get","set","has"].forEach((n=>{Object.defineProperty(e,n+r,{value:function(e,r,i){return this[n].call(this,t,e,r,i)},configurable:!0})}))}(r,e),t[n]=!0)}return D.isArray(e)?e.forEach(n):n(e),this}}ge.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),D.reduceDescriptors(ge.prototype,(({value:e},t)=>{let r=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[r]=e}}})),D.freezeMethods(ge);var ye=ge;function me(e,t){const r=this||ue,n=t||r,i=ye.from(n.headers);let o=n.data;return D.forEach(e,(function(e){o=e.call(r,o,i.normalize(),t?t.status:void 0)})),i.normalize(),o}function be(e){return!(!e||!e.__CANCEL__)}function we(e,t,r){F.call(this,null==e?"canceled":e,F.ERR_CANCELED,t,r),this.name="CanceledError"}D.inherits(we,F,{__CANCEL__:!0});var _e=se.hasStandardBrowserEnv?{write(e,t,r,n,i,o){const s=[e+"="+encodeURIComponent(t)];D.isNumber(r)&&s.push("expires="+new Date(r).toGMTString()),D.isString(n)&&s.push("path="+n),D.isString(i)&&s.push("domain="+i),!0===o&&s.push("secure"),document.cookie=s.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read:()=>null,remove(){}};function ve(e,t){return e&&!/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)?function(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}var Ee=se.hasStandardBrowserEnv?function(){const e=/(msie|trident)/i.test(navigator.userAgent),t=document.createElement("a");let r;function n(r){let n=r;return e&&(t.setAttribute("href",n),n=t.href),t.setAttribute("href",n),{href:t.href,protocol:t.protocol?t.protocol.replace(/:$/,""):"",host:t.host,search:t.search?t.search.replace(/^\?/,""):"",hash:t.hash?t.hash.replace(/^#/,""):"",hostname:t.hostname,port:t.port,pathname:"/"===t.pathname.charAt(0)?t.pathname:"/"+t.pathname}}return r=n(window.location.href),function(e){const t=D.isString(e)?n(e):e;return t.protocol===r.protocol&&t.host===r.host}}():function(){return!0};function Se(e,t){let r=0;const n=function(e,t){e=e||10;const r=new Array(e),n=new Array(e);let i,o=0,s=0;return t=void 0!==t?t:1e3,function(a){const l=Date.now(),u=n[s];i||(i=l),r[o]=a,n[o]=l;let h=s,c=0;for(;h!==o;)c+=r[h++],h%=e;if(o=(o+1)%e,o===s&&(s=(s+1)%e),l-i{const o=i.loaded,s=i.lengthComputable?i.total:void 0,a=o-r,l=n(a);r=o;const u={loaded:o,total:s,progress:s?o/s:void 0,bytes:a,rate:l||void 0,estimated:l&&s&&o<=s?(s-o)/l:void 0,event:i};u[t?"download":"upload"]=!0,e(u)}}const Ae={http:null,xhr:"undefined"!=typeof XMLHttpRequest&&function(e){return new Promise((function(t,r){let n=e.data;const i=ye.from(e.headers).normalize();let o,s,{responseType:a,withXSRFToken:l}=e;function u(){e.cancelToken&&e.cancelToken.unsubscribe(o),e.signal&&e.signal.removeEventListener("abort",o)}if(D.isFormData(n))if(se.hasStandardBrowserEnv||se.hasStandardBrowserWebWorkerEnv)i.setContentType(!1);else if(!1!==(s=i.getContentType())){const[e,...t]=s?s.split(";").map((e=>e.trim())).filter(Boolean):[];i.setContentType([e||"multipart/form-data",...t].join("; "))}let h=new XMLHttpRequest;if(e.auth){const t=e.auth.username||"",r=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";i.set("Authorization","Basic "+btoa(t+":"+r))}const c=ve(e.baseURL,e.url);function f(){if(!h)return;const n=ye.from("getAllResponseHeaders"in h&&h.getAllResponseHeaders());!function(e,t,r){const n=r.config.validateStatus;r.status&&n&&!n(r.status)?t(new F("Request failed with status code "+r.status,[F.ERR_BAD_REQUEST,F.ERR_BAD_RESPONSE][Math.floor(r.status/100)-4],r.config,r.request,r)):e(r)}((function(e){t(e),u()}),(function(e){r(e),u()}),{data:a&&"text"!==a&&"json"!==a?h.response:h.responseText,status:h.status,statusText:h.statusText,headers:n,config:e,request:h}),h=null}if(h.open(e.method.toUpperCase(),X(c,e.params,e.paramsSerializer),!0),h.timeout=e.timeout,"onloadend"in h?h.onloadend=f:h.onreadystatechange=function(){h&&4===h.readyState&&(0!==h.status||h.responseURL&&0===h.responseURL.indexOf("file:"))&&setTimeout(f)},h.onabort=function(){h&&(r(new F("Request aborted",F.ECONNABORTED,e,h)),h=null)},h.onerror=function(){r(new F("Network Error",F.ERR_NETWORK,e,h)),h=null},h.ontimeout=function(){let t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded";const n=e.transitional||ee;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),r(new F(t,n.clarifyTimeoutError?F.ETIMEDOUT:F.ECONNABORTED,e,h)),h=null},se.hasStandardBrowserEnv&&(l&&D.isFunction(l)&&(l=l(e)),l||!1!==l&&Ee(c))){const t=e.xsrfHeaderName&&e.xsrfCookieName&&_e.read(e.xsrfCookieName);t&&i.set(e.xsrfHeaderName,t)}void 0===n&&i.setContentType(null),"setRequestHeader"in h&&D.forEach(i.toJSON(),(function(e,t){h.setRequestHeader(t,e)})),D.isUndefined(e.withCredentials)||(h.withCredentials=!!e.withCredentials),a&&"json"!==a&&(h.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&h.addEventListener("progress",Se(e.onDownloadProgress,!0)),"function"==typeof e.onUploadProgress&&h.upload&&h.upload.addEventListener("progress",Se(e.onUploadProgress)),(e.cancelToken||e.signal)&&(o=t=>{h&&(r(!t||t.type?new we(null,e,h):t),h.abort(),h=null)},e.cancelToken&&e.cancelToken.subscribe(o),e.signal&&(e.signal.aborted?o():e.signal.addEventListener("abort",o)));const p=function(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(c);p&&-1===se.protocols.indexOf(p)?r(new F("Unsupported protocol "+p+":",F.ERR_BAD_REQUEST,e)):h.send(n||null)}))}};D.forEach(Ae,((e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(e){}Object.defineProperty(e,"adapterName",{value:t})}}));const Ie=e=>`- ${e}`,Te=e=>D.isFunction(e)||null===e||!1===e;var Re=e=>{e=D.isArray(e)?e:[e];const{length:t}=e;let r,n;const i={};for(let o=0;o`adapter ${e} `+(!1===t?"is not supported by the environment":"is not available in the build")));throw new F("There is no suitable adapter to dispatch the request "+(t?e.length>1?"since :\n"+e.map(Ie).join("\n"):" "+Ie(e[0]):"as no adapter specified"),"ERR_NOT_SUPPORT")}return n};function Oe(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new we(null,e)}function Ce(e){return Oe(e),e.headers=ye.from(e.headers),e.data=me.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1),Re(e.adapter||ue.adapter)(e).then((function(t){return Oe(e),t.data=me.call(e,e.transformResponse,t),t.headers=ye.from(t.headers),t}),(function(t){return be(t)||(Oe(e),t&&t.response&&(t.response.data=me.call(e,e.transformResponse,t.response),t.response.headers=ye.from(t.response.headers))),Promise.reject(t)}))}const ke=e=>e instanceof ye?{...e}:e;function Pe(e,t){t=t||{};const r={};function n(e,t,r){return D.isPlainObject(e)&&D.isPlainObject(t)?D.merge.call({caseless:r},e,t):D.isPlainObject(t)?D.merge({},t):D.isArray(t)?t.slice():t}function i(e,t,r){return D.isUndefined(t)?D.isUndefined(e)?void 0:n(void 0,e,r):n(e,t,r)}function o(e,t){if(!D.isUndefined(t))return n(void 0,t)}function s(e,t){return D.isUndefined(t)?D.isUndefined(e)?void 0:n(void 0,e):n(void 0,t)}function a(r,i,o){return o in t?n(r,i):o in e?n(void 0,r):void 0}const l={url:o,method:o,data:o,baseURL:s,transformRequest:s,transformResponse:s,paramsSerializer:s,timeout:s,timeoutMessage:s,withCredentials:s,withXSRFToken:s,adapter:s,responseType:s,xsrfCookieName:s,xsrfHeaderName:s,onUploadProgress:s,onDownloadProgress:s,decompress:s,maxContentLength:s,maxBodyLength:s,beforeRedirect:s,transport:s,httpAgent:s,httpsAgent:s,cancelToken:s,socketPath:s,responseEncoding:s,validateStatus:a,headers:(e,t)=>i(ke(e),ke(t),!0)};return D.forEach(Object.keys(Object.assign({},e,t)),(function(n){const o=l[n]||i,s=o(e[n],t[n],n);D.isUndefined(s)&&o!==a||(r[n]=s)})),r}const Be={};["object","boolean","number","function","string","symbol"].forEach(((e,t)=>{Be[e]=function(r){return typeof r===e||"a"+(t<1?"n ":" ")+e}}));const xe={};Be.transitional=function(e,t,r){function n(e,t){return"[Axios v1.6.8] Transitional option '"+e+"'"+t+(r?". "+r:"")}return(r,i,o)=>{if(!1===e)throw new F(n(i," has been removed"+(t?" in "+t:"")),F.ERR_DEPRECATED);return t&&!xe[i]&&(xe[i]=!0,console.warn(n(i," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(r,i,o)}};var Ue={assertOptions:function(e,t,r){if("object"!=typeof e)throw new F("options must be an object",F.ERR_BAD_OPTION_VALUE);const n=Object.keys(e);let i=n.length;for(;i-- >0;){const o=n[i],s=t[o];if(s){const t=e[o],r=void 0===t||s(t,o,e);if(!0!==r)throw new F("option "+o+" must be "+r,F.ERR_BAD_OPTION_VALUE)}else if(!0!==r)throw new F("Unknown option "+o,F.ERR_BAD_OPTION)}},validators:Be};const Le=Ue.validators;class Me{constructor(e){this.defaults=e,this.interceptors={request:new Z,response:new Z}}async request(e,t){try{return await this._request(e,t)}catch(e){if(e instanceof Error){let t;Error.captureStackTrace?Error.captureStackTrace(t={}):t=new Error;const r=t.stack?t.stack.replace(/^.+\n/,""):"";e.stack?r&&!String(e.stack).endsWith(r.replace(/^.+\n.+\n/,""))&&(e.stack+="\n"+r):e.stack=r}throw e}}_request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=Pe(this.defaults,t);const{transitional:r,paramsSerializer:n,headers:i}=t;void 0!==r&&Ue.assertOptions(r,{silentJSONParsing:Le.transitional(Le.boolean),forcedJSONParsing:Le.transitional(Le.boolean),clarifyTimeoutError:Le.transitional(Le.boolean)},!1),null!=n&&(D.isFunction(n)?t.paramsSerializer={serialize:n}:Ue.assertOptions(n,{encode:Le.function,serialize:Le.function},!0)),t.method=(t.method||this.defaults.method||"get").toLowerCase();let o=i&&D.merge(i.common,i[t.method]);i&&D.forEach(["delete","get","head","post","put","patch","common"],(e=>{delete i[e]})),t.headers=ye.concat(o,i);const s=[];let a=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(a=a&&e.synchronous,s.unshift(e.fulfilled,e.rejected))}));const l=[];let u;this.interceptors.response.forEach((function(e){l.push(e.fulfilled,e.rejected)}));let h,c=0;if(!a){const e=[Ce.bind(this),void 0];for(e.unshift.apply(e,s),e.push.apply(e,l),h=e.length,u=Promise.resolve(t);c{if(!r._listeners)return;let t=r._listeners.length;for(;t-- >0;)r._listeners[t](e);r._listeners=null})),this.promise.then=e=>{let t;const n=new Promise((e=>{r.subscribe(e),t=e})).then(e);return n.cancel=function(){r.unsubscribe(t)},n},e((function(e,n,i){r.reason||(r.reason=new we(e,n,i),t(r.reason))}))}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}static source(){let e;return{token:new je((function(t){e=t})),cancel:e}}}var De=je;const Fe={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(Fe).forEach((([e,t])=>{Fe[t]=e}));var We=Fe;const qe=function e(t){const r=new Ne(t),n=o(Ne.prototype.request,r);return D.extend(n,Ne.prototype,r,{allOwnKeys:!0}),D.extend(n,r,null,{allOwnKeys:!0}),n.create=function(r){return e(Pe(t,r))},n}(ue);qe.Axios=Ne,qe.CanceledError=we,qe.CancelToken=De,qe.isCancel=be,qe.VERSION="1.6.8",qe.toFormData=Y,qe.AxiosError=F,qe.Cancel=qe.CanceledError,qe.all=function(e){return Promise.all(e)},qe.spread=function(e){return function(t){return e.apply(null,t)}},qe.isAxiosError=function(e){return D.isObject(e)&&!0===e.isAxiosError},qe.mergeConfig=Pe,qe.AxiosHeaders=ye,qe.formToJSON=e=>ae(D.isHTMLForm(e)?new FormData(e):e),qe.getAdapter=Re,qe.HttpStatusCode=We,qe.default=qe;var $e,Ve=Object.defineProperty,He=Object.getOwnPropertyDescriptor,ze=Object.getOwnPropertyNames,Ye=Object.prototype.hasOwnProperty,Ke=(e,t)=>()=>(e&&(t=e(e=0)),t),Ge=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Qe=(e,t)=>{for(var r in t)Ve(e,r,{get:t[r],enumerable:!0})},Je=e=>((e,t,r,n)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let r of ze(t))!Ye.call(e,r)&&undefined!==r&&Ve(e,r,{get:()=>t[r],enumerable:!(n=He(t,r))||n.enumerable});return e})(Ve({},"__esModule",{value:!0}),e),Xe=Ke((()=>{$e={deviceMemory:8,hardwareConcurrency:8,language:"en-US"}})),Ze={};function et(e){throw new Error("Node.js process "+e+" is not supported by JSPM core outside of Node.js")}function tt(){!mt||!bt||(mt=!1,bt.length?yt=bt.concat(yt):wt=-1,yt.length&&rt())}function rt(){if(!mt){var e=setTimeout(tt,0);mt=!0;for(var t=yt.length;t;){for(bt=yt,yt=[];++wt1)for(var r=1;rZt,_debugProcess:()=>Xt,_events:()=>mr,_eventsCount:()=>br,_exiting:()=>Nt,_fatalExceptions:()=>Gt,_getActiveHandles:()=>ut,_getActiveRequests:()=>lt,_kill:()=>Ft,_linkedBinding:()=>st,_maxListeners:()=>yr,_preload_modules:()=>cr,_rawDebug:()=>Ut,_startProfilerIdleNotifier:()=>er,_stopProfilerIdleNotifier:()=>tr,_tickCallback:()=>Jt,abort:()=>or,addListener:()=>wr,allowedNodeEnvironmentFlags:()=>Yt,arch:()=>vt,argv:()=>At,argv0:()=>hr,assert:()=>ht,binding:()=>Ct,chdir:()=>Bt,config:()=>jt,cpuUsage:()=>Wt,cwd:()=>Pt,debugPort:()=>ur,default:()=>Rr,dlopen:()=>at,domain:()=>Mt,emit:()=>Ar,emitWarning:()=>Ot,env:()=>St,execArgv:()=>It,execPath:()=>lr,exit:()=>Ht,features:()=>Kt,hasUncaughtExceptionCaptureCallback:()=>ct,hrtime:()=>pt,kill:()=>Vt,listeners:()=>gt,memoryUsage:()=>$t,moduleLoadList:()=>Lt,nextTick:()=>nt,off:()=>vr,on:()=>dt,once:()=>_r,openStdin:()=>zt,pid:()=>sr,platform:()=>Et,ppid:()=>ar,prependListener:()=>Ir,prependOnceListener:()=>Tr,reallyExit:()=>Dt,release:()=>xt,removeAllListeners:()=>Sr,removeListener:()=>Er,resourceUsage:()=>qt,setSourceMapsEnabled:()=>fr,setUncaughtExceptionCaptureCallback:()=>Qt,stderr:()=>nr,stdin:()=>ir,stdout:()=>rr,title:()=>_t,umask:()=>kt,uptime:()=>ft,version:()=>Tt,versions:()=>Rt});var yt,mt,bt,wt,_t,vt,Et,St,At,It,Tt,Rt,Ot,Ct,kt,Pt,Bt,xt,Ut,Lt,Mt,Nt,jt,Dt,Ft,Wt,qt,$t,Vt,Ht,zt,Yt,Kt,Gt,Qt,Jt,Xt,Zt,er,tr,rr,nr,ir,or,sr,ar,lr,ur,hr,cr,fr,pr,dr,gr,yr,mr,br,wr,_r,vr,Er,Sr,Ar,Ir,Tr,Rr,Or=Ke((()=>{$r(),Cr(),Xe(),yt=[],mt=!1,wt=-1,it.prototype.run=function(){this.fun.apply(null,this.array)},_t="browser",vt="x64",Et="browser",St={PATH:"/usr/bin",LANG:$e.language+".UTF-8",PWD:"/",HOME:"/home",TMP:"/tmp"},At=["/usr/bin/node"],It=[],Tt="v16.8.0",Rt={},Ot=function(e,t){console.warn((t?t+": ":"")+e)},Ct=function(e){et("binding")},kt=function(e){return 0},Pt=function(){return"/"},Bt=function(e){},xt={name:"node",sourceUrl:"",headersUrl:"",libUrl:""},Ut=ot,Lt=[],Mt={},Nt=!1,jt={},Dt=ot,Ft=ot,qt=Wt=function(){return{}},$t=Wt,Vt=ot,Ht=ot,zt=ot,Yt={},Kt={inspector:!1,debug:!1,uv:!1,ipv6:!1,tls_alpn:!1,tls_sni:!1,tls_ocsp:!1,tls:!1,cached_builtins:!0},Gt=ot,Qt=ot,Jt=ot,Xt=ot,Zt=ot,er=ot,tr=ot,rr=void 0,nr=void 0,ir=void 0,or=ot,sr=2,ar=1,lr="/bin/usr/node",ur=9229,hr="node",cr=[],fr=ot,void 0===(pr={now:typeof performance<"u"?performance.now.bind(performance):void 0,timing:typeof performance<"u"?performance.timing:void 0}).now&&(dr=Date.now(),pr.timing&&pr.timing.navigationStart&&(dr=pr.timing.navigationStart),pr.now=()=>Date.now()-dr),gr=1e9,pt.bigint=function(e){var t=pt(e);return typeof BigInt>"u"?t[0]*gr+t[1]:BigInt(t[0]*gr)+BigInt(t[1])},Rr={version:Tt,versions:Rt,arch:vt,platform:Et,release:xt,_rawDebug:Ut,moduleLoadList:Lt,binding:Ct,_linkedBinding:st,_events:mr={},_eventsCount:br=0,_maxListeners:yr=10,on:dt,addListener:wr=dt,once:_r=dt,off:vr=dt,removeListener:Er=dt,removeAllListeners:Sr=dt,emit:Ar=ot,prependListener:Ir=dt,prependOnceListener:Tr=dt,listeners:gt,domain:Mt,_exiting:Nt,config:jt,dlopen:at,uptime:ft,_getActiveRequests:lt,_getActiveHandles:ut,reallyExit:Dt,_kill:Ft,cpuUsage:Wt,resourceUsage:qt,memoryUsage:$t,kill:Vt,exit:Ht,openStdin:zt,allowedNodeEnvironmentFlags:Yt,assert:ht,features:Kt,_fatalExceptions:Gt,setUncaughtExceptionCaptureCallback:Qt,hasUncaughtExceptionCaptureCallback:ct,emitWarning:Ot,nextTick:nt,_tickCallback:Jt,_debugProcess:Xt,_debugEnd:Zt,_startProfilerIdleNotifier:er,_stopProfilerIdleNotifier:tr,stdout:rr,stdin:ir,stderr:nr,abort:or,umask:kt,chdir:Bt,cwd:Pt,env:St,title:_t,argv:At,execArgv:It,pid:sr,ppid:ar,execPath:lr,debugPort:ur,hrtime:pt,argv0:hr,_preload_modules:cr,setSourceMapsEnabled:fr}})),Cr=Ke((()=>{Or()})),kr={};function Pr(){if(Nr)return Mr;Nr=!0;let e=function(){if(xr)return Br;xr=!0,Br.byteLength=function(e){var t=o(e),r=t[0],n=t[1];return 3*(r+n)/4-n},Br.toByteArray=function(e){var n,i,s=o(e),a=s[0],l=s[1],u=new r(function(e,t,r){return 3*(t+r)/4-r}(0,a,l)),h=0,c=l>0?a-4:a;for(i=0;i>16&255,u[h++]=n>>8&255,u[h++]=255&n;return 2===l&&(n=t[e.charCodeAt(i)]<<2|t[e.charCodeAt(i+1)]>>4,u[h++]=255&n),1===l&&(n=t[e.charCodeAt(i)]<<10|t[e.charCodeAt(i+1)]<<4|t[e.charCodeAt(i+2)]>>2,u[h++]=n>>8&255,u[h++]=255&n),u},Br.fromByteArray=function(t){for(var r,n=t.length,i=n%3,o=[],s=16383,l=0,u=n-i;lu?u:l+s));return 1===i?(r=t[n-1],o.push(e[r>>2]+e[r<<4&63]+"==")):2===i&&(r=(t[n-2]<<8)+t[n-1],o.push(e[r>>10]+e[r>>4&63]+e[r<<2&63]+"=")),o.join("")};for(var e=[],t=[],r=typeof Uint8Array<"u"?Uint8Array:Array,n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",i=0;i<64;++i)e[i]=n[i],t[n.charCodeAt(i)]=i;function o(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=e.indexOf("=");return-1===r&&(r=t),[r,r===t?0:4-r%4]}function s(t){return e[t>>18&63]+e[t>>12&63]+e[t>>6&63]+e[63&t]}function a(e,t,r){for(var n,i=[],o=t;o>1,h=-7,c=r?i-1:0,f=r?-1:1,p=e[t+c];for(c+=f,o=p&(1<<-h)-1,p>>=-h,h+=a;h>0;o=256*o+e[t+c],c+=f,h-=8);for(s=o&(1<<-h)-1,o>>=-h,h+=n;h>0;s=256*s+e[t+c],c+=f,h-=8);if(0===o)o=1-u;else{if(o===l)return s?NaN:1/0*(p?-1:1);s+=Math.pow(2,n),o-=u}return(p?-1:1)*s*Math.pow(2,o-n)},Ur.write=function(e,t,r,n,i,o){var s,a,l,u=8*o-i-1,h=(1<>1,f=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:o-1,d=n?1:-1,g=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(a=isNaN(t)?1:0,s=h):(s=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-s))<1&&(s--,l*=2),(t+=s+c>=1?f/l:f*Math.pow(2,1-c))*l>=2&&(s++,l/=2),s+c>=h?(a=0,s=h):s+c>=1?(a=(t*l-1)*Math.pow(2,i),s+=c):(a=t*Math.pow(2,c-1)*Math.pow(2,i),s=0));i>=8;e[r+p]=255&a,p+=d,a/=256,i-=8);for(s=s<0;e[r+p]=255&s,p+=d,s/=256,u-=8);e[r+p-d]|=128*g}),Ur),r="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;Mr.Buffer=o,Mr.SlowBuffer=function(e){return+e!=e&&(e=0),o.alloc(+e)},Mr.INSPECT_MAX_BYTES=50;let n=2147483647;function i(e){if(e>n)throw new RangeError('The value "'+e+'" is invalid for option "size"');let t=new Uint8Array(e);return Object.setPrototypeOf(t,o.prototype),t}function o(e,t,r){if("number"==typeof e){if("string"==typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return l(e)}return s(e,t,r)}function s(e,t,r){if("string"==typeof e)return function(e,t){if(("string"!=typeof t||""===t)&&(t="utf8"),!o.isEncoding(t))throw new TypeError("Unknown encoding: "+t);let r=0|f(e,t),n=i(r),s=n.write(e,t);return s!==r&&(n=n.slice(0,s)),n}(e,t);if(ArrayBuffer.isView(e))return function(e){if(z(e,Uint8Array)){let t=new Uint8Array(e);return h(t.buffer,t.byteOffset,t.byteLength)}return u(e)}(e);if(null==e)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(z(e,ArrayBuffer)||e&&z(e.buffer,ArrayBuffer)||typeof SharedArrayBuffer<"u"&&(z(e,SharedArrayBuffer)||e&&z(e.buffer,SharedArrayBuffer)))return h(e,t,r);if("number"==typeof e)throw new TypeError('The "value" argument must not be of type number. Received type number');let n=e.valueOf&&e.valueOf();if(null!=n&&n!==e)return o.from(n,t,r);let s=function(e){if(o.isBuffer(e)){let t=0|c(e.length),r=i(t);return 0===r.length||e.copy(r,0,0,t),r}return void 0!==e.length?"number"!=typeof e.length||Y(e.length)?i(0):u(e):"Buffer"===e.type&&Array.isArray(e.data)?u(e.data):void 0}(e);if(s)return s;if(typeof Symbol<"u"&&null!=Symbol.toPrimitive&&"function"==typeof e[Symbol.toPrimitive])return o.from(e[Symbol.toPrimitive]("string"),t,r);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e)}function a(e){if("number"!=typeof e)throw new TypeError('"size" argument must be of type number');if(e<0)throw new RangeError('The value "'+e+'" is invalid for option "size"')}function l(e){return a(e),i(e<0?0:0|c(e))}function u(e){let t=e.length<0?0:0|c(e.length),r=i(t);for(let n=0;n=n)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+n.toString(16)+" bytes");return 0|e}function f(e,t){if(o.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||z(e,ArrayBuffer))return e.byteLength;if("string"!=typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);let r=e.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;let i=!1;for(;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return $(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return V(e).length;default:if(i)return n?-1:$(e).length;t=(""+t).toLowerCase(),i=!0}}function p(e,t,r){let n=!1;if((void 0===t||t<0)&&(t=0),t>this.length||((void 0===r||r>this.length)&&(r=this.length),r<=0)||(r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return R(this,t,r);case"utf8":case"utf-8":return S(this,t,r);case"ascii":return I(this,t,r);case"latin1":case"binary":return T(this,t,r);case"base64":return E(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function d(e,t,r){let n=e[t];e[t]=e[r],e[r]=n}function g(e,t,r,n,i){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),Y(r=+r)&&(r=i?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(i)return-1;r=e.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof t&&(t=o.from(t,n)),o.isBuffer(t))return 0===t.length?-1:y(e,t,r,n,i);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):y(e,[t],r,n,i);throw new TypeError("val must be string, number or Buffer")}function y(e,t,r,n,i){let o,s=1,a=e.length,l=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;s=2,a/=2,l/=2,r/=2}function u(e,t){return 1===s?e[t]:e.readUInt16BE(t*s)}if(i){let n=-1;for(o=r;oa&&(r=a-l),o=r;o>=0;o--){let r=!0;for(let n=0;ni&&(n=i):n=i;let o,s=t.length;for(n>s/2&&(n=s/2),o=0;o>8,i=r%256,o.push(i),o.push(n);return o}(t,e.length-r),e,r,n)}function E(t,r,n){return 0===r&&n===t.length?e.fromByteArray(t):e.fromByteArray(t.slice(r,n))}function S(e,t,r){r=Math.min(e.length,r);let n=[],i=t;for(;i239?4:t>223?3:t>191?2:1;if(i+s<=r){let r,n,a,l;switch(s){case 1:t<128&&(o=t);break;case 2:r=e[i+1],128==(192&r)&&(l=(31&t)<<6|63&r,l>127&&(o=l));break;case 3:r=e[i+1],n=e[i+2],128==(192&r)&&128==(192&n)&&(l=(15&t)<<12|(63&r)<<6|63&n,l>2047&&(l<55296||l>57343)&&(o=l));break;case 4:r=e[i+1],n=e[i+2],a=e[i+3],128==(192&r)&&128==(192&n)&&128==(192&a)&&(l=(15&t)<<18|(63&r)<<12|(63&n)<<6|63&a,l>65535&&l<1114112&&(o=l))}}null===o?(o=65533,s=1):o>65535&&(o-=65536,n.push(o>>>10&1023|55296),o=56320|1023&o),n.push(o),i+=s}return function(e){let t=e.length;if(t<=A)return String.fromCharCode.apply(String,e);let r="",n=0;for(;nn.length?(o.isBuffer(t)||(t=o.from(t)),t.copy(n,i)):Uint8Array.prototype.set.call(n,t,i);else{if(!o.isBuffer(t))throw new TypeError('"list" argument must be an Array of Buffers');t.copy(n,i)}i+=t.length}return n},o.byteLength=f,o.prototype._isBuffer=!0,o.prototype.swap16=function(){let e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let t=0;tt&&(e+=" ... "),""},r&&(o.prototype[r]=o.prototype.inspect),o.prototype.compare=function(e,t,r,n,i){if(z(e,Uint8Array)&&(e=o.from(e,e.offset,e.byteLength)),!o.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),t<0||r>e.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&t>=r)return 0;if(n>=i)return-1;if(t>=r)return 1;if(this===e)return 0;let s=(i>>>=0)-(n>>>=0),a=(r>>>=0)-(t>>>=0),l=Math.min(s,a),u=this.slice(n,i),h=e.slice(t,r);for(let e=0;e>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}let i=this.length-t;if((void 0===r||r>i)&&(r=i),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");let o=!1;for(;;)switch(n){case"hex":return m(this,e,t,r);case"utf8":case"utf-8":return b(this,e,t,r);case"ascii":case"latin1":case"binary":return w(this,e,t,r);case"base64":return _(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return v(this,e,t,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},o.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};let A=4096;function I(e,t,r){let n="";r=Math.min(e.length,r);for(let i=t;in)&&(r=n);let i="";for(let n=t;nr)throw new RangeError("Trying to access beyond buffer length")}function k(e,t,r,n,i,s){if(!o.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||te.length)throw new RangeError("Index out of range")}function P(e,t,r,n,i){D(t,n,i,e,r,7);let o=Number(t&BigInt(4294967295));e[r++]=o,o>>=8,e[r++]=o,o>>=8,e[r++]=o,o>>=8,e[r++]=o;let s=Number(t>>BigInt(32)&BigInt(4294967295));return e[r++]=s,s>>=8,e[r++]=s,s>>=8,e[r++]=s,s>>=8,e[r++]=s,r}function B(e,t,r,n,i){D(t,n,i,e,r,7);let o=Number(t&BigInt(4294967295));e[r+7]=o,o>>=8,e[r+6]=o,o>>=8,e[r+5]=o,o>>=8,e[r+4]=o;let s=Number(t>>BigInt(32)&BigInt(4294967295));return e[r+3]=s,s>>=8,e[r+2]=s,s>>=8,e[r+1]=s,s>>=8,e[r]=s,r+8}function x(e,t,r,n,i,o){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function U(e,r,n,i,o){return r=+r,n>>>=0,o||x(e,0,n,4),t.write(e,r,n,i,23,4),n+4}function L(e,r,n,i,o){return r=+r,n>>>=0,o||x(e,0,n,8),t.write(e,r,n,i,52,8),n+8}o.prototype.slice=function(e,t){let r=this.length;(e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t>>=0,t>>>=0,r||C(e,t,this.length);let n=this[e],i=1,o=0;for(;++o>>=0,t>>>=0,r||C(e,t,this.length);let n=this[e+--t],i=1;for(;t>0&&(i*=256);)n+=this[e+--t]*i;return n},o.prototype.readUint8=o.prototype.readUInt8=function(e,t){return e>>>=0,t||C(e,1,this.length),this[e]},o.prototype.readUint16LE=o.prototype.readUInt16LE=function(e,t){return e>>>=0,t||C(e,2,this.length),this[e]|this[e+1]<<8},o.prototype.readUint16BE=o.prototype.readUInt16BE=function(e,t){return e>>>=0,t||C(e,2,this.length),this[e]<<8|this[e+1]},o.prototype.readUint32LE=o.prototype.readUInt32LE=function(e,t){return e>>>=0,t||C(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},o.prototype.readUint32BE=o.prototype.readUInt32BE=function(e,t){return e>>>=0,t||C(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},o.prototype.readBigUInt64LE=G((function(e){F(e>>>=0,"offset");let t=this[e],r=this[e+7];(void 0===t||void 0===r)&&W(e,this.length-8);let n=t+256*this[++e]+65536*this[++e]+this[++e]*2**24,i=this[++e]+256*this[++e]+65536*this[++e]+r*2**24;return BigInt(n)+(BigInt(i)<>>=0,"offset");let t=this[e],r=this[e+7];(void 0===t||void 0===r)&&W(e,this.length-8);let n=t*2**24+65536*this[++e]+256*this[++e]+this[++e],i=this[++e]*2**24+65536*this[++e]+256*this[++e]+r;return(BigInt(n)<>>=0,t>>>=0,r||C(e,t,this.length);let n=this[e],i=1,o=0;for(;++o=i&&(n-=Math.pow(2,8*t)),n},o.prototype.readIntBE=function(e,t,r){e>>>=0,t>>>=0,r||C(e,t,this.length);let n=t,i=1,o=this[e+--n];for(;n>0&&(i*=256);)o+=this[e+--n]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*t)),o},o.prototype.readInt8=function(e,t){return e>>>=0,t||C(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},o.prototype.readInt16LE=function(e,t){e>>>=0,t||C(e,2,this.length);let r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},o.prototype.readInt16BE=function(e,t){e>>>=0,t||C(e,2,this.length);let r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},o.prototype.readInt32LE=function(e,t){return e>>>=0,t||C(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},o.prototype.readInt32BE=function(e,t){return e>>>=0,t||C(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},o.prototype.readBigInt64LE=G((function(e){F(e>>>=0,"offset");let t=this[e],r=this[e+7];(void 0===t||void 0===r)&&W(e,this.length-8);let n=this[e+4]+256*this[e+5]+65536*this[e+6]+(r<<24);return(BigInt(n)<>>=0,"offset");let t=this[e],r=this[e+7];(void 0===t||void 0===r)&&W(e,this.length-8);let n=(t<<24)+65536*this[++e]+256*this[++e]+this[++e];return(BigInt(n)<>>=0,r||C(e,4,this.length),t.read(this,e,!0,23,4)},o.prototype.readFloatBE=function(e,r){return e>>>=0,r||C(e,4,this.length),t.read(this,e,!1,23,4)},o.prototype.readDoubleLE=function(e,r){return e>>>=0,r||C(e,8,this.length),t.read(this,e,!0,52,8)},o.prototype.readDoubleBE=function(e,r){return e>>>=0,r||C(e,8,this.length),t.read(this,e,!1,52,8)},o.prototype.writeUintLE=o.prototype.writeUIntLE=function(e,t,r,n){e=+e,t>>>=0,r>>>=0,n||k(this,e,t,r,Math.pow(2,8*r)-1,0);let i=1,o=0;for(this[t]=255&e;++o>>=0,r>>>=0,n||k(this,e,t,r,Math.pow(2,8*r)-1,0);let i=r-1,o=1;for(this[t+i]=255&e;--i>=0&&(o*=256);)this[t+i]=e/o&255;return t+r},o.prototype.writeUint8=o.prototype.writeUInt8=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,1,255,0),this[t]=255&e,t+1},o.prototype.writeUint16LE=o.prototype.writeUInt16LE=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},o.prototype.writeUint16BE=o.prototype.writeUInt16BE=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},o.prototype.writeUint32LE=o.prototype.writeUInt32LE=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},o.prototype.writeUint32BE=o.prototype.writeUInt32BE=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},o.prototype.writeBigUInt64LE=G((function(e,t=0){return P(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),o.prototype.writeBigUInt64BE=G((function(e,t=0){return B(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),o.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t>>>=0,!n){let n=Math.pow(2,8*r-1);k(this,e,t,r,n-1,-n)}let i=0,o=1,s=0;for(this[t]=255&e;++i>>=0,!n){let n=Math.pow(2,8*r-1);k(this,e,t,r,n-1,-n)}let i=r-1,o=1,s=0;for(this[t+i]=255&e;--i>=0&&(o*=256);)e<0&&0===s&&0!==this[t+i+1]&&(s=1),this[t+i]=(e/o|0)-s&255;return t+r},o.prototype.writeInt8=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},o.prototype.writeInt16LE=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},o.prototype.writeInt16BE=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},o.prototype.writeInt32LE=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},o.prototype.writeInt32BE=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},o.prototype.writeBigInt64LE=G((function(e,t=0){return P(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),o.prototype.writeBigInt64BE=G((function(e,t=0){return B(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),o.prototype.writeFloatLE=function(e,t,r){return U(this,e,t,!0,r)},o.prototype.writeFloatBE=function(e,t,r){return U(this,e,t,!1,r)},o.prototype.writeDoubleLE=function(e,t,r){return L(this,e,t,!0,r)},o.prototype.writeDoubleBE=function(e,t,r){return L(this,e,t,!1,r)},o.prototype.copy=function(e,t,r,n){if(!o.isBuffer(e))throw new TypeError("argument should be a Buffer");if(r||(r=0),!n&&0!==n&&(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(i=t;i=n+4;r-=3)t=`_${e.slice(r-3,r)}${t}`;return`${e.slice(0,r)}${t}`}function D(e,t,r,n,i,o){if(e>r||e3?0===t||t===BigInt(0)?`>= 0${i} and < 2${i} ** ${8*(o+1)}${i}`:`>= -(2${i} ** ${8*(o+1)-1}${i}) and < 2 ** ${8*(o+1)-1}${i}`:`>= ${t}${i} and <= ${r}${i}`,new M.ERR_OUT_OF_RANGE("value",n,e)}!function(e,t,r){F(t,"offset"),(void 0===e[t]||void 0===e[t+r])&&W(t,e.length-(r+1))}(n,i,o)}function F(e,t){if("number"!=typeof e)throw new M.ERR_INVALID_ARG_TYPE(t,"number",e)}function W(e,t,r){throw Math.floor(e)!==e?(F(e,r),new M.ERR_OUT_OF_RANGE(r||"offset","an integer",e)):t<0?new M.ERR_BUFFER_OUT_OF_BOUNDS:new M.ERR_OUT_OF_RANGE(r||"offset",`>= ${r?1:0} and <= ${t}`,e)}N("ERR_BUFFER_OUT_OF_BOUNDS",(function(e){return e?`${e} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"}),RangeError),N("ERR_INVALID_ARG_TYPE",(function(e,t){return`The "${e}" argument must be of type number. Received type ${typeof t}`}),TypeError),N("ERR_OUT_OF_RANGE",(function(e,t,r){let n=`The value of "${e}" is out of range.`,i=r;return Number.isInteger(r)&&Math.abs(r)>2**32?i=j(String(r)):"bigint"==typeof r&&(i=String(r),(r>BigInt(2)**BigInt(32)||r<-(BigInt(2)**BigInt(32)))&&(i=j(i)),i+="n"),n+=` It must be ${t}. Received ${i}`,n}),RangeError);let q=/[^+/0-9A-Za-z-_]/g;function $(e,t){t=t||1/0;let r,n=e.length,i=null,o=[];for(let s=0;s55295&&r<57344){if(!i){if(r>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(s+1===n){(t-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(t-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(t-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((t-=1)<0)break;o.push(r)}else if(r<2048){if((t-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function V(t){return e.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(q,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(t))}function H(e,t,r,n){let i;for(i=0;i=t.length||i>=e.length);++i)t[i+r]=e[i];return i}function z(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function Y(e){return e!=e}let K=function(){let e="0123456789abcdef",t=new Array(256);for(let r=0;r<16;++r){let n=16*r;for(let i=0;i<16;++i)t[n+i]=e[r]+e[i]}return t}();function G(e){return typeof BigInt>"u"?Q:e}function Q(){throw new Error("BigInt not supported")}return Mr}Qe(kr,{Buffer:()=>Dr,INSPECT_MAX_BYTES:()=>Fr,default:()=>jr,kMaxLength:()=>Wr});var Br,xr,Ur,Lr,Mr,Nr,jr,Dr,Fr,Wr,qr=Ke((()=>{$r(),Cr(),Xe(),Br={},xr=!1,Ur={},Lr=!1,Mr={},Nr=!1,(jr=Pr()).Buffer,jr.SlowBuffer,jr.INSPECT_MAX_BYTES,jr.kMaxLength,Dr=jr.Buffer,Fr=jr.INSPECT_MAX_BYTES,Wr=jr.kMaxLength})),$r=Ke((()=>{qr()})),Vr=Ge((e=>{$r(),Cr(),Xe(),Object.defineProperty(e,"__esModule",{value:!0}),e.default=class{constructor(e){this.aliasToTopic={},this.max=e}put(e,t){return!(0===t||t>this.max||(this.aliasToTopic[t]=e,this.length=Object.keys(this.aliasToTopic).length,0))}getTopicByAlias(e){return this.aliasToTopic[e]}clear(){this.aliasToTopic={}}}})),Hr=Ge(((e,t)=>{$r(),Cr(),Xe(),t.exports={ArrayIsArray:e=>Array.isArray(e),ArrayPrototypeIncludes:(e,t)=>e.includes(t),ArrayPrototypeIndexOf:(e,t)=>e.indexOf(t),ArrayPrototypeJoin:(e,t)=>e.join(t),ArrayPrototypeMap:(e,t)=>e.map(t),ArrayPrototypePop:(e,t)=>e.pop(t),ArrayPrototypePush:(e,t)=>e.push(t),ArrayPrototypeSlice:(e,t,r)=>e.slice(t,r),Error,FunctionPrototypeCall:(e,t,...r)=>e.call(t,...r),FunctionPrototypeSymbolHasInstance:(e,t)=>Function.prototype[Symbol.hasInstance].call(e,t),MathFloor:Math.floor,Number,NumberIsInteger:Number.isInteger,NumberIsNaN:Number.isNaN,NumberMAX_SAFE_INTEGER:Number.MAX_SAFE_INTEGER,NumberMIN_SAFE_INTEGER:Number.MIN_SAFE_INTEGER,NumberParseInt:Number.parseInt,ObjectDefineProperties:(e,t)=>Object.defineProperties(e,t),ObjectDefineProperty:(e,t,r)=>Object.defineProperty(e,t,r),ObjectGetOwnPropertyDescriptor:(e,t)=>Object.getOwnPropertyDescriptor(e,t),ObjectKeys:e=>Object.keys(e),ObjectSetPrototypeOf:(e,t)=>Object.setPrototypeOf(e,t),Promise,PromisePrototypeCatch:(e,t)=>e.catch(t),PromisePrototypeThen:(e,t,r)=>e.then(t,r),PromiseReject:e=>Promise.reject(e),ReflectApply:Reflect.apply,RegExpPrototypeTest:(e,t)=>e.test(t),SafeSet:Set,String,StringPrototypeSlice:(e,t,r)=>e.slice(t,r),StringPrototypeToLowerCase:e=>e.toLowerCase(),StringPrototypeToUpperCase:e=>e.toUpperCase(),StringPrototypeTrim:e=>e.trim(),Symbol,SymbolFor:Symbol.for,SymbolAsyncIterator:Symbol.asyncIterator,SymbolHasInstance:Symbol.hasInstance,SymbolIterator:Symbol.iterator,TypedArrayPrototypeSet:(e,t,r)=>e.set(t,r),Uint8Array}})),zr=Ge(((e,t)=>{$r(),Cr(),Xe();var r=(qr(),Je(kr)),n=Object.getPrototypeOf((async function(){})).constructor,i=globalThis.Blob||r.Blob,o=typeof i<"u"?function(e){return e instanceof i}:function(e){return!1},s=class extends Error{constructor(e){if(!Array.isArray(e))throw new TypeError("Expected input to be an Array, got "+typeof e);let t="";for(let r=0;r{e=r,t=n})),resolve:e,reject:t}},promisify:e=>new Promise(((t,r)=>{e(((e,...n)=>e?r(e):t(...n)))})),debuglog:()=>function(){},format:(e,...t)=>e.replace(/%([sdifj])/g,(function(...[e,r]){let n=t.shift();return"f"===r?n.toFixed(6):"j"===r?JSON.stringify(n):"s"===r&&"object"==typeof n?`${n.constructor!==Object?n.constructor.name:""} {}`.trim():n.toString()})),inspect(e){switch(typeof e){case"string":if(e.includes("'")){if(!e.includes('"'))return`"${e}"`;if(!e.includes("`")&&!e.includes("${"))return`\`${e}\``}return`'${e}'`;case"number":return isNaN(e)?"NaN":Object.is(e,-0)?String(e):e;case"bigint":return`${String(e)}n`;case"boolean":case"undefined":return String(e);case"object":return"{}"}},types:{isAsyncFunction:e=>e instanceof n,isArrayBufferView:e=>ArrayBuffer.isView(e)},isBlob:o},t.exports.promisify.custom=Symbol.for("nodejs.util.promisify.custom")})),Yr=Ge(((e,t)=>{$r(),Cr(),Xe();var{AbortController:r,AbortSignal:n}=typeof self<"u"?self:typeof window<"u"?window:void 0;t.exports=r,t.exports.AbortSignal=n,t.exports.default=r})),Kr=Ge(((e,t)=>{$r(),Cr(),Xe();var{format:r,inspect:n,AggregateError:i}=zr(),o=globalThis.AggregateError||i,s=Symbol("kIsNodeError"),a=["string","function","number","object","Function","Object","boolean","bigint","symbol"],l=/^([A-Z][a-z0-9]*)+$/,u={};function h(e,t){if(!e)throw new u.ERR_INTERNAL_ASSERTION(t)}function c(e){let t="",r=e.length,n="-"===e[0]?1:0;for(;r>=n+4;r-=3)t=`_${e.slice(r-3,r)}${t}`;return`${e.slice(0,r)}${t}`}function f(e,t,n){n||(n=Error);class i extends n{constructor(...n){super(function(e,t,n){if("function"==typeof t)return h(t.length<=n.length,`Code: ${e}; The provided arguments length (${n.length}) does not match the required ones (${t.length}).`),t(...n);let i=(t.match(/%[dfijoOs]/g)||[]).length;return h(i===n.length,`Code: ${e}; The provided arguments length (${n.length}) does not match the required ones (${i}).`),0===n.length?t:r(t,...n)}(e,t,n))}toString(){return`${this.name} [${e}]: ${this.message}`}}Object.defineProperties(i.prototype,{name:{value:n.name,writable:!0,enumerable:!1,configurable:!0},toString:{value(){return`${this.name} [${e}]: ${this.message}`},writable:!0,enumerable:!1,configurable:!0}}),i.prototype.code=e,i.prototype[s]=!0,u[e]=i}function p(e){let t="__node_internal_"+e.name;return Object.defineProperty(e,"name",{value:t}),e}var d=class extends Error{constructor(e="The operation was aborted",t=void 0){if(void 0!==t&&"object"!=typeof t)throw new u.ERR_INVALID_ARG_TYPE("options","Object",t);super(e,t),this.code="ABORT_ERR",this.name="AbortError"}};f("ERR_ASSERTION","%s",Error),f("ERR_INVALID_ARG_TYPE",((e,t,r)=>{h("string"==typeof e,"'name' must be a string"),Array.isArray(t)||(t=[t]);let i="The ";e.endsWith(" argument")?i+=`${e} `:i+=`"${e}" ${e.includes(".")?"property":"argument"} `,i+="must be ";let o=[],s=[],u=[];for(let e of t)h("string"==typeof e,"All expected entries have to be of type string"),a.includes(e)?o.push(e.toLowerCase()):l.test(e)?s.push(e):(h("object"!==e,'The value "object" should be written as "Object"'),u.push(e));if(s.length>0){let e=o.indexOf("object");-1!==e&&(o.splice(o,e,1),s.push("Object"))}if(o.length>0){switch(o.length){case 1:i+=`of type ${o[0]}`;break;case 2:i+=`one of type ${o[0]} or ${o[1]}`;break;default:{let e=o.pop();i+=`one of type ${o.join(", ")}, or ${e}`}}(s.length>0||u.length>0)&&(i+=" or ")}if(s.length>0){switch(s.length){case 1:i+=`an instance of ${s[0]}`;break;case 2:i+=`an instance of ${s[0]} or ${s[1]}`;break;default:{let e=s.pop();i+=`an instance of ${s.join(", ")}, or ${e}`}}u.length>0&&(i+=" or ")}switch(u.length){case 0:break;case 1:u[0].toLowerCase()!==u[0]&&(i+="an "),i+=`${u[0]}`;break;case 2:i+=`one of ${u[0]} or ${u[1]}`;break;default:{let e=u.pop();i+=`one of ${u.join(", ")}, or ${e}`}}if(null==r)i+=`. Received ${r}`;else if("function"==typeof r&&r.name)i+=`. Received function ${r.name}`;else if("object"==typeof r){var c;null!==(c=r.constructor)&&void 0!==c&&c.name?i+=`. Received an instance of ${r.constructor.name}`:i+=`. Received ${n(r,{depth:-1})}`}else{let e=n(r,{colors:!1});e.length>25&&(e=`${e.slice(0,25)}...`),i+=`. Received type ${typeof r} (${e})`}return i}),TypeError),f("ERR_INVALID_ARG_VALUE",((e,t,r="is invalid")=>{let i=n(t);return i.length>128&&(i=i.slice(0,128)+"..."),`The ${e.includes(".")?"property":"argument"} '${e}' ${r}. Received ${i}`}),TypeError),f("ERR_INVALID_RETURN_VALUE",((e,t,r)=>{var n;return`Expected ${e} to be returned from the "${t}" function but got ${null!=r&&null!==(n=r.constructor)&&void 0!==n&&n.name?`instance of ${r.constructor.name}`:"type "+typeof r}.`}),TypeError),f("ERR_MISSING_ARGS",((...e)=>{h(e.length>0,"At least one arg needs to be specified");let t,r=e.length;switch(e=(Array.isArray(e)?e:[e]).map((e=>`"${e}"`)).join(" or "),r){case 1:t+=`The ${e[0]} argument`;break;case 2:t+=`The ${e[0]} and ${e[1]} arguments`;break;default:{let r=e.pop();t+=`The ${e.join(", ")}, and ${r} arguments`}}return`${t} must be specified`}),TypeError),f("ERR_OUT_OF_RANGE",((e,t,r)=>{let i;return h(t,'Missing "range" argument'),Number.isInteger(r)&&Math.abs(r)>2**32?i=c(String(r)):"bigint"==typeof r?(i=String(r),(r>2n**32n||r<-(2n**32n))&&(i=c(i)),i+="n"):i=n(r),`The value of "${e}" is out of range. It must be ${t}. Received ${i}`}),RangeError),f("ERR_MULTIPLE_CALLBACK","Callback called multiple times",Error),f("ERR_METHOD_NOT_IMPLEMENTED","The %s method is not implemented",Error),f("ERR_STREAM_ALREADY_FINISHED","Cannot call %s after a stream was finished",Error),f("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable",Error),f("ERR_STREAM_DESTROYED","Cannot call %s after a stream was destroyed",Error),f("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError),f("ERR_STREAM_PREMATURE_CLOSE","Premature close",Error),f("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF",Error),f("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event",Error),f("ERR_STREAM_WRITE_AFTER_END","write after end",Error),f("ERR_UNKNOWN_ENCODING","Unknown encoding: %s",TypeError),t.exports={AbortError:d,aggregateTwoErrors:p((function(e,t){if(e&&t&&e!==t){if(Array.isArray(t.errors))return t.errors.push(e),t;let r=new o([t,e],t.message);return r.code=t.code,r}return e||t})),hideStackFrames:p,codes:u}})),Gr=Ge(((e,t)=>{$r(),Cr(),Xe();var{ArrayIsArray:r,ArrayPrototypeIncludes:n,ArrayPrototypeJoin:i,ArrayPrototypeMap:o,NumberIsInteger:s,NumberIsNaN:a,NumberMAX_SAFE_INTEGER:l,NumberMIN_SAFE_INTEGER:u,NumberParseInt:h,ObjectPrototypeHasOwnProperty:c,RegExpPrototypeExec:f,String:p,StringPrototypeToUpperCase:d,StringPrototypeTrim:g}=Hr(),{hideStackFrames:y,codes:{ERR_SOCKET_BAD_PORT:m,ERR_INVALID_ARG_TYPE:b,ERR_INVALID_ARG_VALUE:w,ERR_OUT_OF_RANGE:_,ERR_UNKNOWN_SIGNAL:v}}=Kr(),{normalizeEncoding:E}=zr(),{isAsyncFunction:S,isArrayBufferView:A}=zr().types,I={},T=/^[0-7]+$/,R=y(((e,t,r=u,n=l)=>{if("number"!=typeof e)throw new b(t,"number",e);if(!s(e))throw new _(t,"an integer",e);if(en)throw new _(t,`>= ${r} && <= ${n}`,e)})),O=y(((e,t,r=-2147483648,n=2147483647)=>{if("number"!=typeof e)throw new b(t,"number",e);if(!s(e))throw new _(t,"an integer",e);if(en)throw new _(t,`>= ${r} && <= ${n}`,e)})),C=y(((e,t,r=!1)=>{if("number"!=typeof e)throw new b(t,"number",e);if(!s(e))throw new _(t,"an integer",e);let n=r?1:0,i=4294967295;if(ei)throw new _(t,`>= ${n} && <= ${i}`,e)}));function k(e,t){if("string"!=typeof e)throw new b(t,"string",e)}var P=y(((e,t,r)=>{if(!n(r,e)){let n="must be one of: "+i(o(r,(e=>"string"==typeof e?`'${e}'`:p(e))),", ");throw new w(t,e,n)}}));function B(e,t){if("boolean"!=typeof e)throw new b(t,"boolean",e)}function x(e,t,r){return null!=e&&c(e,t)?e[t]:r}var U=y(((e,t,n=null)=>{let i=x(n,"allowArray",!1),o=x(n,"allowFunction",!1);if(!x(n,"nullable",!1)&&null===e||!i&&r(e)||"object"!=typeof e&&(!o||"function"!=typeof e))throw new b(t,"Object",e)})),L=y(((e,t)=>{if(null!=e&&"object"!=typeof e&&"function"!=typeof e)throw new b(t,"a dictionary",e)})),M=y(((e,t,n=0)=>{if(!r(e))throw new b(t,"Array",e);if(e.length{if(!A(e))throw new b(t,["Buffer","TypedArray","DataView"],e)})),j=y(((e,t)=>{if(void 0!==e&&(null===e||"object"!=typeof e||!("aborted"in e)))throw new b(t,"AbortSignal",e)})),D=y(((e,t)=>{if("function"!=typeof e)throw new b(t,"Function",e)})),F=y(((e,t)=>{if("function"!=typeof e||S(e))throw new b(t,"Function",e)})),W=y(((e,t)=>{if(void 0!==e)throw new b(t,"undefined",e)})),q=/^(?:<[^>]*>)(?:\s*;\s*[^;"\s]+(?:=(")?[^;"\s]*\1)?)*$/;function $(e,t){if(typeof e>"u"||!f(q,e))throw new w(t,e,'must be an array or string of format "; rel=preload; as=style"')}t.exports={isInt32:function(e){return e===(0|e)},isUint32:function(e){return e===e>>>0},parseFileMode:function(e,t,r){if(typeof e>"u"&&(e=r),"string"==typeof e){if(null===f(T,e))throw new w(t,e,"must be a 32-bit unsigned integer or an octal string");e=h(e,8)}return C(e,t),e},validateArray:M,validateStringArray:function(e,t){M(e,t);for(let r=0;rn||(null!=r||null!=n)&&a(e))throw new _(t,`${null!=r?`>= ${r}`:""}${null!=r&&null!=n?" && ":""}${null!=n?`<= ${n}`:""}`,e)},validateObject:U,validateOneOf:P,validatePlainFunction:F,validatePort:function(e,t="Port",r=!0){if("number"!=typeof e&&"string"!=typeof e||"string"==typeof e&&0===g(e).length||+e!=+e>>>0||e>65535||0===e&&!r)throw new m(t,e,r);return 0|e},validateSignalName:function(e,t="signal"){if(k(e,t),void 0===I[e])throw void 0!==I[d(e)]?new v(e+" (signals must use all capital letters)"):new v(e)},validateString:k,validateUint32:C,validateUndefined:W,validateUnion:function(e,t,r){if(!n(r,e))throw new b(t,`('${i(r,"|")}')`,e)},validateAbortSignal:j,validateLinkHeaderValue:function(e){if("string"==typeof e)return $(e,"hints"),e;if(r(e)){let t=e.length,r="";if(0===t)return r;for(let n=0;n; rel=preload; as=style"')}}})),Qr=Ge(((e,t)=>{$r(),Cr(),Xe();var r,n,i=t.exports={};function o(){throw new Error("setTimeout has not been defined")}function s(){throw new Error("clearTimeout has not been defined")}function a(e){if(r===setTimeout)return setTimeout(e,0);if((r===o||!r)&&setTimeout)return r=setTimeout,setTimeout(e,0);try{return r(e,0)}catch{try{return r.call(null,e,0)}catch{return r.call(this,e,0)}}}!function(){try{r="function"==typeof setTimeout?setTimeout:o}catch{r=o}try{n="function"==typeof clearTimeout?clearTimeout:s}catch{n=s}}();var l,u=[],h=!1,c=-1;function f(){!h||!l||(h=!1,l.length?u=l.concat(u):c=-1,u.length&&p())}function p(){if(!h){var e=a(f);h=!0;for(var t=u.length;t;){for(l=u,u=[];++c1)for(var r=1;r{$r(),Cr(),Xe();var{Symbol:r,SymbolAsyncIterator:n,SymbolIterator:i,SymbolFor:o}=Hr(),s=r("kDestroyed"),a=r("kIsErrored"),l=r("kIsReadable"),u=r("kIsDisturbed"),h=o("nodejs.webstream.isClosedPromise"),c=o("nodejs.webstream.controllerErrorFunction");function f(e,t=!1){var r;return!(!e||"function"!=typeof e.pipe||"function"!=typeof e.on||t&&("function"!=typeof e.pause||"function"!=typeof e.resume)||e._writableState&&!1===(null===(r=e._readableState)||void 0===r?void 0:r.readable)||e._writableState&&!e._readableState)}function p(e){var t;return!(!e||"function"!=typeof e.write||"function"!=typeof e.on||e._readableState&&!1===(null===(t=e._writableState)||void 0===t?void 0:t.writable))}function d(e){return e&&(e._readableState||e._writableState||"function"==typeof e.write&&"function"==typeof e.on||"function"==typeof e.pipe&&"function"==typeof e.on)}function g(e){return!(!e||d(e)||"function"!=typeof e.pipeThrough||"function"!=typeof e.getReader||"function"!=typeof e.cancel)}function y(e){return!(!e||d(e)||"function"!=typeof e.getWriter||"function"!=typeof e.abort)}function m(e){return!(!e||d(e)||"object"!=typeof e.readable||"object"!=typeof e.writable)}function b(e){if(!d(e))return null;let t=e._writableState,r=e._readableState,n=t||r;return!!(e.destroyed||e[s]||null!=n&&n.destroyed)}function w(e){if(!p(e))return null;if(!0===e.writableEnded)return!0;let t=e._writableState;return(null==t||!t.errored)&&("boolean"!=typeof t?.ended?null:t.ended)}function _(e,t){if(!f(e))return null;let r=e._readableState;return(null==r||!r.errored)&&("boolean"!=typeof r?.endEmitted?null:!!(r.endEmitted||!1===t&&!0===r.ended&&0===r.length))}function v(e){return e&&null!=e[l]?e[l]:"boolean"!=typeof e?.readable?null:!b(e)&&f(e)&&e.readable&&!_(e)}function E(e){return"boolean"!=typeof e?.writable?null:!b(e)&&p(e)&&e.writable&&!w(e)}function S(e){return"boolean"==typeof e._closed&&"boolean"==typeof e._defaultKeepAlive&&"boolean"==typeof e._removedConnection&&"boolean"==typeof e._removedContLen}function A(e){return"boolean"==typeof e._sent100&&S(e)}t.exports={kDestroyed:s,isDisturbed:function(e){var t;return!(!e||!(null!==(t=e[u])&&void 0!==t?t:e.readableDidRead||e.readableAborted))},kIsDisturbed:u,isErrored:function(e){var t,r,n,i,o,s,l,u,h,c;return!(!e||!(null!==(t=null!==(r=null!==(n=null!==(i=null!==(o=null!==(s=e[a])&&void 0!==s?s:e.readableErrored)&&void 0!==o?o:e.writableErrored)&&void 0!==i?i:null===(l=e._readableState)||void 0===l?void 0:l.errorEmitted)&&void 0!==n?n:null===(u=e._writableState)||void 0===u?void 0:u.errorEmitted)&&void 0!==r?r:null===(h=e._readableState)||void 0===h?void 0:h.errored)&&void 0!==t?t:null!==(c=e._writableState)&&void 0!==c&&c.errored))},kIsErrored:a,isReadable:v,kIsReadable:l,kIsClosedPromise:h,kControllerErrorFunction:c,isClosed:function(e){if(!d(e))return null;if("boolean"==typeof e.closed)return e.closed;let t=e._writableState,r=e._readableState;return"boolean"==typeof t?.closed||"boolean"==typeof r?.closed?t?.closed||r?.closed:"boolean"==typeof e._closed&&S(e)?e._closed:null},isDestroyed:b,isDuplexNodeStream:function(e){return!(!e||"function"!=typeof e.pipe||!e._readableState||"function"!=typeof e.on||"function"!=typeof e.write)},isFinished:function(e,t){return d(e)?!!b(e)||!(!1!==t?.readable&&v(e)||!1!==t?.writable&&E(e)):null},isIterable:function(e,t){return null!=e&&(!0===t?"function"==typeof e[n]:!1===t?"function"==typeof e[i]:"function"==typeof e[n]||"function"==typeof e[i])},isReadableNodeStream:f,isReadableStream:g,isReadableEnded:function(e){if(!f(e))return null;if(!0===e.readableEnded)return!0;let t=e._readableState;return!(!t||t.errored)&&("boolean"!=typeof t?.ended?null:t.ended)},isReadableFinished:_,isReadableErrored:function(e){var t,r;return d(e)?e.readableErrored?e.readableErrored:null!==(t=null===(r=e._readableState)||void 0===r?void 0:r.errored)&&void 0!==t?t:null:null},isNodeStream:d,isWebStream:function(e){return g(e)||y(e)||m(e)},isWritable:E,isWritableNodeStream:p,isWritableStream:y,isWritableEnded:w,isWritableFinished:function(e,t){if(!p(e))return null;if(!0===e.writableFinished)return!0;let r=e._writableState;return(null==r||!r.errored)&&("boolean"!=typeof r?.finished?null:!!(r.finished||!1===t&&!0===r.ended&&0===r.length))},isWritableErrored:function(e){var t,r;return d(e)?e.writableErrored?e.writableErrored:null!==(t=null===(r=e._writableState)||void 0===r?void 0:r.errored)&&void 0!==t?t:null:null},isServerRequest:function(e){var t;return"boolean"==typeof e._consuming&&"boolean"==typeof e._dumped&&void 0===(null===(t=e.req)||void 0===t?void 0:t.upgradeOrConnect)},isServerResponse:A,willEmitClose:function(e){if(!d(e))return null;let t=e._writableState,r=e._readableState,n=t||r;return!n&&A(e)||!!(n&&n.autoDestroy&&n.emitClose&&!1===n.closed)},isTransformStream:m}})),Xr=Ge(((e,t)=>{$r(),Cr(),Xe();var r=Qr(),{AbortError:n,codes:i}=Kr(),{ERR_INVALID_ARG_TYPE:o,ERR_STREAM_PREMATURE_CLOSE:s}=i,{kEmptyObject:a,once:l}=zr(),{validateAbortSignal:u,validateFunction:h,validateObject:c,validateBoolean:f}=Gr(),{Promise:p,PromisePrototypeThen:d}=Hr(),{isClosed:g,isReadable:y,isReadableNodeStream:m,isReadableStream:b,isReadableFinished:w,isReadableErrored:_,isWritable:v,isWritableNodeStream:E,isWritableStream:S,isWritableFinished:A,isWritableErrored:I,isNodeStream:T,willEmitClose:R,kIsClosedPromise:O}=Jr(),C=()=>{};function k(e,t,i){var f,p;if(2===arguments.length?(i=t,t=a):null==t?t=a:c(t,"options"),h(i,"callback"),u(t.signal,"options.signal"),i=l(i),b(e)||S(e))return function(e,t,i){let o=!1,s=C;if(t.signal)if(s=()=>{o=!0,i.call(e,new n(void 0,{cause:t.signal.reason}))},t.signal.aborted)r.nextTick(s);else{let r=i;i=l(((...n)=>{t.signal.removeEventListener("abort",s),r.apply(e,n)})),t.signal.addEventListener("abort",s)}let a=(...t)=>{o||r.nextTick((()=>i.apply(e,t)))};return d(e[O].promise,a,a),C}(e,t,i);if(!T(e))throw new o("stream",["ReadableStream","WritableStream","Stream"],e);let k=null!==(f=t.readable)&&void 0!==f?f:m(e),P=null!==(p=t.writable)&&void 0!==p?p:E(e),B=e._writableState,x=e._readableState,U=()=>{e.writable||N()},L=R(e)&&m(e)===k&&E(e)===P,M=A(e,!1),N=()=>{M=!0,e.destroyed&&(L=!1),(!L||e.readable&&!k)&&(!k||j)&&i.call(e)},j=w(e,!1),D=()=>{j=!0,e.destroyed&&(L=!1),(!L||e.writable&&!P)&&(!P||M)&&i.call(e)},F=t=>{i.call(e,t)},W=g(e),q=()=>{W=!0;let t=I(e)||_(e);return t&&"boolean"!=typeof t?i.call(e,t):k&&!j&&m(e,!0)&&!w(e,!1)?i.call(e,new s):!P||M||A(e,!1)?void i.call(e):i.call(e,new s)},$=()=>{W=!0;let t=I(e)||_(e);if(t&&"boolean"!=typeof t)return i.call(e,t);i.call(e)},V=()=>{e.req.on("finish",N)};!function(e){return e.setHeader&&"function"==typeof e.abort}(e)?P&&!B&&(e.on("end",U),e.on("close",U)):(e.on("complete",N),L||e.on("abort",q),e.req?V():e.on("request",V)),!L&&"boolean"==typeof e.aborted&&e.on("aborted",q),e.on("end",D),e.on("finish",N),!1!==t.error&&e.on("error",F),e.on("close",q),W?r.nextTick(q):null!=B&&B.errorEmitted||null!=x&&x.errorEmitted?L||r.nextTick($):(!k&&(!L||y(e))&&(M||!1===v(e))||!P&&(!L||v(e))&&(j||!1===y(e))||x&&e.req&&e.aborted)&&r.nextTick($);let H=()=>{i=C,e.removeListener("aborted",q),e.removeListener("complete",N),e.removeListener("abort",q),e.removeListener("request",V),e.req&&e.req.removeListener("finish",N),e.removeListener("end",U),e.removeListener("close",U),e.removeListener("finish",N),e.removeListener("end",D),e.removeListener("error",F),e.removeListener("close",q)};if(t.signal&&!W){let o=()=>{let r=i;H(),r.call(e,new n(void 0,{cause:t.signal.reason}))};if(t.signal.aborted)r.nextTick(o);else{let r=i;i=l(((...n)=>{t.signal.removeEventListener("abort",o),r.apply(e,n)})),t.signal.addEventListener("abort",o)}}return H}t.exports=k,t.exports.finished=function(e,t){var r;let n=!1;return null===t&&(t=a),null!==(r=t)&&void 0!==r&&r.cleanup&&(f(t.cleanup,"cleanup"),n=t.cleanup),new p(((r,i)=>{let o=k(e,t,(e=>{n&&o(),e?i(e):r()}))}))}})),Zr=Ge(((e,t)=>{$r(),Cr(),Xe();var r=Qr(),{aggregateTwoErrors:n,codes:{ERR_MULTIPLE_CALLBACK:i},AbortError:o}=Kr(),{Symbol:s}=Hr(),{kDestroyed:a,isDestroyed:l,isFinished:u,isServerRequest:h}=Jr(),c=s("kDestroy"),f=s("kConstruct");function p(e,t,r){e&&(e.stack,t&&!t.errored&&(t.errored=e),r&&!r.errored&&(r.errored=e))}function d(e,t,n){let i=!1;function o(t){if(i)return;i=!0;let o=e._readableState,s=e._writableState;p(t,s,o),s&&(s.closed=!0),o&&(o.closed=!0),"function"==typeof n&&n(t),t?r.nextTick(g,e,t):r.nextTick(y,e)}try{e._destroy(t||null,o)}catch(e){o(e)}}function g(e,t){m(e,t),y(e)}function y(e){let t=e._readableState,r=e._writableState;r&&(r.closeEmitted=!0),t&&(t.closeEmitted=!0),(null!=r&&r.emitClose||null!=t&&t.emitClose)&&e.emit("close")}function m(e,t){let r=e._readableState,n=e._writableState;null!=n&&n.errorEmitted||null!=r&&r.errorEmitted||(n&&(n.errorEmitted=!0),r&&(r.errorEmitted=!0),e.emit("error",t))}function b(e,t,n){let i=e._readableState,o=e._writableState;if(null!=o&&o.destroyed||null!=i&&i.destroyed)return this;null!=i&&i.autoDestroy||null!=o&&o.autoDestroy?e.destroy(t):t&&(t.stack,o&&!o.errored&&(o.errored=t),i&&!i.errored&&(i.errored=t),n?r.nextTick(m,e,t):m(e,t))}function w(e){let t=!1;function n(n){if(t)return void b(e,n??new i);t=!0;let o=e._readableState,s=e._writableState,a=s||o;o&&(o.constructed=!0),s&&(s.constructed=!0),a.destroyed?e.emit(c,n):n?b(e,n,!0):r.nextTick(_,e)}try{e._construct((e=>{r.nextTick(n,e)}))}catch(e){r.nextTick(n,e)}}function _(e){e.emit(f)}function v(e){return e?.setHeader&&"function"==typeof e.abort}function E(e){e.emit("close")}function S(e,t){e.emit("error",t),r.nextTick(E,e)}t.exports={construct:function(e,t){if("function"!=typeof e._construct)return;let n=e._readableState,i=e._writableState;n&&(n.constructed=!1),i&&(i.constructed=!1),e.once(f,t),!(e.listenerCount(f)>1)&&r.nextTick(w,e)},destroyer:function(e,t){!e||l(e)||(!t&&!u(e)&&(t=new o),h(e)?(e.socket=null,e.destroy(t)):v(e)?e.abort():v(e.req)?e.req.abort():"function"==typeof e.destroy?e.destroy(t):"function"==typeof e.close?e.close():t?r.nextTick(S,e,t):r.nextTick(E,e),e.destroyed||(e[a]=!0))},destroy:function(e,t){let r=this._readableState,i=this._writableState,o=i||r;return null!=i&&i.destroyed||null!=r&&r.destroyed?("function"==typeof t&&t(),this):(p(e,i,r),i&&(i.destroyed=!0),r&&(r.destroyed=!0),o.constructed?d(this,e,t):this.once(c,(function(r){d(this,n(r,e),t)})),this)},undestroy:function(){let e=this._readableState,t=this._writableState;e&&(e.constructed=!0,e.closed=!1,e.closeEmitted=!1,e.destroyed=!1,e.errored=null,e.errorEmitted=!1,e.reading=!1,e.ended=!1===e.readable,e.endEmitted=!1===e.readable),t&&(t.constructed=!0,t.destroyed=!1,t.closed=!1,t.closeEmitted=!1,t.errored=null,t.errorEmitted=!1,t.finalCalled=!1,t.prefinished=!1,t.ended=!1===t.writable,t.ending=!1===t.writable,t.finished=!1===t.writable)},errorOrDestroy:b}}));function en(){en.init.call(this)}function tn(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function rn(e){return void 0===e._maxListeners?en.defaultMaxListeners:e._maxListeners}function nn(e,t,r,n){var i,o,s,a;if(tn(r),void 0===(o=e._events)?(o=e._events=Object.create(null),e._eventsCount=0):(void 0!==o.newListener&&(e.emit("newListener",t,r.listener?r.listener:r),o=e._events),s=o[t]),void 0===s)s=o[t]=r,++e._eventsCount;else if("function"==typeof s?s=o[t]=n?[r,s]:[s,r]:n?s.unshift(r):s.push(r),(i=rn(e))>0&&s.length>i&&!s.warned){s.warned=!0;var l=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");l.name="MaxListenersExceededWarning",l.emitter=e,l.type=t,l.count=s.length,a=l,console&&console.warn&&console.warn(a)}return e}function on(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function sn(e,t,r){var n={fired:!1,wrapFn:void 0,target:e,type:t,listener:r},i=on.bind(n);return i.listener=r,n.wrapFn=i,i}function an(e,t,r){var n=e._events;if(void 0===n)return[];var i=n[t];return void 0===i?[]:"function"==typeof i?r?[i.listener||i]:[i]:r?function(e){for(var t=new Array(e.length),r=0;r{$r(),Cr(),Xe(),fn="object"==typeof Reflect?Reflect:null,pn=fn&&"function"==typeof fn.apply?fn.apply:function(e,t,r){return Function.prototype.apply.call(e,t,r)},cn=fn&&"function"==typeof fn.ownKeys?fn.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)},dn=Number.isNaN||function(e){return e!=e},hn=en,en.EventEmitter=en,en.prototype._events=void 0,en.prototype._eventsCount=0,en.prototype._maxListeners=void 0,gn=10,Object.defineProperty(en,"defaultMaxListeners",{enumerable:!0,get:function(){return gn},set:function(e){if("number"!=typeof e||e<0||dn(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");gn=e}}),en.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},en.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||dn(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},en.prototype.getMaxListeners=function(){return rn(this)},en.prototype.emit=function(e){for(var t=[],r=1;r0&&(o=t[0]),o instanceof Error)throw o;var s=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw s.context=o,s}var a=i[e];if(void 0===a)return!1;if("function"==typeof a)pn(a,this,t);else{var l=a.length,u=un(a,l);for(r=0;r=0;o--)if(r[o]===t||r[o].listener===t){s=r[o].listener,i=o;break}if(i<0)return this;0===i?r.shift():function(e,t){for(;t+1=0;n--)this.removeListener(e,t[n]);return this},en.prototype.listeners=function(e){return an(this,e,!0)},en.prototype.rawListeners=function(e){return an(this,e,!1)},en.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):ln.call(e,t)},en.prototype.listenerCount=ln,en.prototype.eventNames=function(){return this._eventsCount>0?cn(this._events):[]},(yn=hn).EventEmitter,yn.defaultMaxListeners,yn.init,yn.listenerCount,yn.EventEmitter,yn.defaultMaxListeners,yn.init,yn.listenerCount})),bn={};Qe(bn,{EventEmitter:()=>wn,default:()=>yn,defaultMaxListeners:()=>_n,init:()=>vn,listenerCount:()=>En,on:()=>Sn,once:()=>An});var wn,_n,vn,En,Sn,An,In=Ke((()=>{$r(),Cr(),Xe(),mn(),mn(),yn.once=function(e,t){return new Promise(((r,n)=>{function i(...t){void 0!==o&&e.removeListener("error",o),r(t)}let o;"error"!==t&&(o=t=>{e.removeListener(name,i),n(t)},e.once("error",o)),e.once(t,i)}))},yn.on=function(e,t){let r=[],n=[],i=null,o=!1,s={async next(){let e=r.shift();if(e)return createIterResult(e,!1);if(i){let e=Promise.reject(i);return i=null,e}return o?createIterResult(void 0,!0):new Promise(((e,t)=>n.push({resolve:e,reject:t})))},async return(){e.removeListener(t,a),e.removeListener("error",l),o=!0;for(let e of n)e.resolve(createIterResult(void 0,!0));return createIterResult(void 0,!0)},throw(r){i=r,e.removeListener(t,a),e.removeListener("error",l)},[Symbol.asyncIterator](){return this}};return e.on(t,a),e.on("error",l),s;function a(...e){let t=n.shift();t?t.resolve(createIterResult(e,!1)):r.push(e)}function l(e){o=!0;let t=n.shift();t?t.reject(e):i=e,s.return()}},({EventEmitter:wn,defaultMaxListeners:_n,init:vn,listenerCount:En,on:Sn,once:An}=yn)})),Tn=Ge(((e,t)=>{$r(),Cr(),Xe();var{ArrayIsArray:r,ObjectSetPrototypeOf:n}=Hr(),{EventEmitter:i}=(In(),Je(bn));function o(e){i.call(this,e)}function s(e,t,n){if("function"==typeof e.prependListener)return e.prependListener(t,n);e._events&&e._events[t]?r(e._events[t])?e._events[t].unshift(n):e._events[t]=[n,e._events[t]]:e.on(t,n)}n(o.prototype,i.prototype),n(o,i),o.prototype.pipe=function(e,t){let r=this;function n(t){e.writable&&!1===e.write(t)&&r.pause&&r.pause()}function o(){r.readable&&r.resume&&r.resume()}r.on("data",n),e.on("drain",o),!e._isStdio&&(!t||!1!==t.end)&&(r.on("end",l),r.on("close",u));let a=!1;function l(){a||(a=!0,e.end())}function u(){a||(a=!0,"function"==typeof e.destroy&&e.destroy())}function h(e){c(),0===i.listenerCount(this,"error")&&this.emit("error",e)}function c(){r.removeListener("data",n),e.removeListener("drain",o),r.removeListener("end",l),r.removeListener("close",u),r.removeListener("error",h),e.removeListener("error",h),r.removeListener("end",c),r.removeListener("close",c),e.removeListener("close",c)}return s(r,"error",h),s(e,"error",h),r.on("end",c),r.on("close",c),e.on("close",c),e.emit("pipe",r),e},t.exports={Stream:o,prependListener:s}})),Rn=Ge(((e,t)=>{$r(),Cr(),Xe();var{AbortError:r,codes:n}=Kr(),{isNodeStream:i,isWebStream:o,kControllerErrorFunction:s}=Jr(),a=Xr(),{ERR_INVALID_ARG_TYPE:l}=n;t.exports.addAbortSignal=function(e,r){if((e=>{if("object"!=typeof e||!("aborted"in e))throw new l("signal","AbortSignal",e)})(e),!i(r)&&!o(r))throw new l("stream",["ReadableStream","WritableStream","Stream"],r);return t.exports.addAbortSignalNoValidate(e,r)},t.exports.addAbortSignalNoValidate=function(e,t){if("object"!=typeof e||!("aborted"in e))return t;let n=i(t)?()=>{t.destroy(new r(void 0,{cause:e.reason}))}:()=>{t[s](new r(void 0,{cause:e.reason}))};return e.aborted?n():(e.addEventListener("abort",n),a(t,(()=>e.removeEventListener("abort",n)))),t}})),On=Ge(((e,t)=>{$r(),Cr(),Xe();var{StringPrototypeSlice:r,SymbolIterator:n,TypedArrayPrototypeSet:i,Uint8Array:o}=Hr(),{Buffer:s}=(qr(),Je(kr)),{inspect:a}=zr();t.exports=class{constructor(){this.head=null,this.tail=null,this.length=0}push(e){let t={data:e,next:null};this.length>0?this.tail.next=t:this.head=t,this.tail=t,++this.length}unshift(e){let t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length}shift(){if(0===this.length)return;let e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}clear(){this.head=this.tail=null,this.length=0}join(e){if(0===this.length)return"";let t=this.head,r=""+t.data;for(;null!==(t=t.next);)r+=e+t.data;return r}concat(e){if(0===this.length)return s.alloc(0);let t=s.allocUnsafe(e>>>0),r=this.head,n=0;for(;r;)i(t,r.data,n),n+=r.data.length,r=r.next;return t}consume(e,t){let r=this.head.data;if(eo.length)){e===o.length?(t+=o,++i,n.next?this.head=n.next:this.head=this.tail=null):(t+=r(o,0,e),this.head=n,n.data=r(o,e));break}t+=o,e-=o.length,++i}while(null!==(n=n.next));return this.length-=i,t}_getBuffer(e){let t=s.allocUnsafe(e),r=e,n=this.head,a=0;do{let s=n.data;if(!(e>s.length)){e===s.length?(i(t,s,r-e),++a,n.next?this.head=n.next:this.head=this.tail=null):(i(t,new o(s.buffer,s.byteOffset,e),r-e),this.head=n,n.data=s.slice(e));break}i(t,s,r-e),e-=s.length,++a}while(null!==(n=n.next));return this.length-=a,t}[Symbol.for("nodejs.util.inspect.custom")](e,t){return a(this,{...t,depth:0,customInspect:!1})}}})),Cn=Ge(((e,t)=>{$r(),Cr(),Xe();var{MathFloor:r,NumberIsInteger:n}=Hr(),{ERR_INVALID_ARG_VALUE:i}=Kr().codes;function o(e){return e?16:16384}t.exports={getHighWaterMark:function(e,t,s,a){let l=function(e,t,r){return null!=e.highWaterMark?e.highWaterMark:t?e[r]:null}(t,a,s);if(null!=l){if(!n(l)||l<0)throw new i(a?`options.${s}`:"options.highWaterMark",l);return r(l)}return o(e.objectMode)},getDefaultHighWaterMark:o}}));function kn(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=e.indexOf("=");return-1===r&&(r=t),[r,r===t?0:4-r%4]}function Pn(e,t,r){for(var n,i,o=[],s=t;s>18&63]+Ai[i>>12&63]+Ai[i>>6&63]+Ai[63&i]);return o.join("")}function Bn(e){if(e>2147483647)throw new RangeError('The value "'+e+'" is invalid for option "size"');var t=new Uint8Array(e);return Object.setPrototypeOf(t,xn.prototype),t}function xn(e,t,r){if("number"==typeof e){if("string"==typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return Mn(e)}return Un(e,t,r)}function Un(e,t,r){if("string"==typeof e)return function(e,t){if("string"==typeof t&&""!==t||(t="utf8"),!xn.isEncoding(t))throw new TypeError("Unknown encoding: "+t);var r=0|Dn(e,t),n=Bn(r),i=n.write(e,t);return i!==r&&(n=n.slice(0,i)),n}(e,t);if(ArrayBuffer.isView(e))return Nn(e);if(null==e)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(hi(e,ArrayBuffer)||e&&hi(e.buffer,ArrayBuffer)||typeof SharedArrayBuffer<"u"&&(hi(e,SharedArrayBuffer)||e&&hi(e.buffer,SharedArrayBuffer)))return function(e,t,r){if(t<0||e.byteLength=2147483647)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+2147483647..toString(16)+" bytes");return 0|e}function Dn(e,t){if(xn.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||hi(e,ArrayBuffer))return e.byteLength;if("string"!=typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);var r=e.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;for(var i=!1;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return ai(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return li(e).length;default:if(i)return n?-1:ai(e).length;t=(""+t).toLowerCase(),i=!0}}function Fn(e,t,r){var n=!1;if((void 0===t||t<0)&&(t=0),t>this.length||((void 0===r||r>this.length)&&(r=this.length),r<=0)||(r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return ei(this,t,r);case"utf8":case"utf-8":return Jn(this,t,r);case"ascii":return Xn(this,t,r);case"latin1":case"binary":return Zn(this,t,r);case"base64":return Qn(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ti(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function Wn(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function qn(e,t,r,n,i){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),ci(r=+r)&&(r=i?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(i)return-1;r=e.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof t&&(t=xn.from(t,n)),xn.isBuffer(t))return 0===t.length?-1:$n(e,t,r,n,i);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):$n(e,[t],r,n,i);throw new TypeError("val must be string, number or Buffer")}function $n(e,t,r,n,i){var o,s=1,a=e.length,l=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;s=2,a/=2,l/=2,r/=2}function u(e,t){return 1===s?e[t]:e.readUInt16BE(t*s)}if(i){var h=-1;for(o=r;oa&&(r=a-l),o=r;o>=0;o--){for(var c=!0,f=0;fi&&(n=i):n=i;var o=t.length;n>o/2&&(n=o/2);for(var s=0;s>8,i=r%256,o.push(i),o.push(n);return o}(t,e.length-r),e,r,n)}function Qn(e,t,r){return 0===t&&r===e.length?ki.fromByteArray(e):ki.fromByteArray(e.slice(t,r))}function Jn(e,t,r){r=Math.min(e.length,r);for(var n=[],i=t;i239?4:u>223?3:u>191?2:1;if(i+c<=r)switch(c){case 1:u<128&&(h=u);break;case 2:128==(192&(o=e[i+1]))&&(l=(31&u)<<6|63&o)>127&&(h=l);break;case 3:o=e[i+1],s=e[i+2],128==(192&o)&&128==(192&s)&&(l=(15&u)<<12|(63&o)<<6|63&s)>2047&&(l<55296||l>57343)&&(h=l);break;case 4:o=e[i+1],s=e[i+2],a=e[i+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(l=(15&u)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&l<1114112&&(h=l)}null===h?(h=65533,c=1):h>65535&&(h-=65536,n.push(h>>>10&1023|55296),h=56320|1023&h),n.push(h),i+=c}return function(e){var t=e.length;if(t<=4096)return String.fromCharCode.apply(String,e);for(var r="",n=0;nn)&&(r=n);for(var i="",o=t;or)throw new RangeError("Trying to access beyond buffer length")}function ni(e,t,r,n,i,o){if(!xn.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||te.length)throw new RangeError("Index out of range")}function ii(e,t,r,n,i,o){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function oi(e,t,r,n,i){return t=+t,r>>>=0,i||ii(e,0,r,4),Pi.write(e,t,r,n,23,4),r+4}function si(e,t,r,n,i){return t=+t,r>>>=0,i||ii(e,0,r,8),Pi.write(e,t,r,n,52,8),r+8}function ai(e,t){var r;t=t||1/0;for(var n=e.length,i=null,o=[],s=0;s55295&&r<57344){if(!i){if(r>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(s+1===n){(t-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(t-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(t-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((t-=1)<0)break;o.push(r)}else if(r<2048){if((t-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function li(e){return ki.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(xi,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function ui(e,t,r,n){for(var i=0;i=t.length||i>=e.length);++i)t[i+r]=e[i];return i}function hi(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function ci(e){return e!=e}function fi(e,t){for(var r in e)t[r]=e[r]}function pi(e,t,r){return Ni(e,t,r)}function di(e){var t;switch(this.encoding=function(e){var t=function(e){if(!e)return"utf8";for(var t;;)switch(e){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return e;default:if(t)return;e=(""+e).toLowerCase(),t=!0}}(e);if("string"!=typeof t&&(Di.isEncoding===Fi||!Fi(e)))throw new Error("Unknown encoding: "+e);return t||e}(e),this.encoding){case"utf16le":this.text=mi,this.end=bi,t=4;break;case"utf8":this.fillLast=yi,t=4;break;case"base64":this.text=wi,this.end=_i,t=3;break;default:return this.write=vi,void(this.end=Ei)}this.lastNeed=0,this.lastTotal=0,this.lastChar=Di.allocUnsafe(t)}function gi(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function yi(e){var t=this.lastTotal-this.lastNeed,r=function(e,t){if(128!=(192&t[0]))return e.lastNeed=0,"�";if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,"�";if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,"�"}}(this,e);return void 0!==r?r:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function mi(e,t){if((e.length-t)%2==0){var r=e.toString("utf16le",t);if(r){var n=r.charCodeAt(r.length-1);if(n>=55296&&n<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",t,e.length-1)}function bi(e){var t=e&&e.length?this.write(e):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return t+this.lastChar.toString("utf16le",0,r)}return t}function wi(e,t){var r=(e.length-t)%3;return 0===r?e.toString("base64",t):(this.lastNeed=3-r,this.lastTotal=3,1===r?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",t,e.length-r))}function _i(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+this.lastChar.toString("base64",0,3-this.lastNeed):t}function vi(e){return e.toString(this.encoding)}function Ei(e){return e&&e.length?this.write(e):""}var Si,Ai,Ii,Ti,Ri,Oi,Ci,ki,Pi,Bi,xi,Ui,Li,Mi,Ni,ji,Di,Fi,Wi=Ke((()=>{for($r(),Cr(),Xe(),Si={byteLength:function(e){var t=kn(e),r=t[0],n=t[1];return 3*(r+n)/4-n},toByteArray:function(e){var t,r,n,i=kn(e),o=i[0],s=i[1],a=new Ti(3*(o+(n=s))/4-n),l=0,u=s>0?o-4:o;for(r=0;r>16&255,a[l++]=t>>8&255,a[l++]=255&t;return 2===s&&(t=Ii[e.charCodeAt(r)]<<2|Ii[e.charCodeAt(r+1)]>>4,a[l++]=255&t),1===s&&(t=Ii[e.charCodeAt(r)]<<10|Ii[e.charCodeAt(r+1)]<<4|Ii[e.charCodeAt(r+2)]>>2,a[l++]=t>>8&255,a[l++]=255&t),a},fromByteArray:function(e){for(var t,r=e.length,n=r%3,i=[],o=0,s=r-n;os?s:o+16383));return 1===n?(t=e[r-1],i.push(Ai[t>>2]+Ai[t<<4&63]+"==")):2===n&&(t=(e[r-2]<<8)+e[r-1],i.push(Ai[t>>10]+Ai[t>>4&63]+Ai[t<<2&63]+"=")),i.join("")}},Ai=[],Ii=[],Ti=typeof Uint8Array<"u"?Uint8Array:Array,Ri="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",Oi=0;Oi<64;++Oi)Ai[Oi]=Ri[Oi],Ii[Ri.charCodeAt(Oi)]=Oi;Ii["-".charCodeAt(0)]=62,Ii["_".charCodeAt(0)]=63,Ci={},ki=Si,Pi={read:function(e,t,r,n,i){var o,s,a=8*i-n-1,l=(1<>1,h=-7,c=r?i-1:0,f=r?-1:1,p=e[t+c];for(c+=f,o=p&(1<<-h)-1,p>>=-h,h+=a;h>0;o=256*o+e[t+c],c+=f,h-=8);for(s=o&(1<<-h)-1,o>>=-h,h+=n;h>0;s=256*s+e[t+c],c+=f,h-=8);if(0===o)o=1-u;else{if(o===l)return s?NaN:1/0*(p?-1:1);s+=Math.pow(2,n),o-=u}return(p?-1:1)*s*Math.pow(2,o-n)},write:function(e,t,r,n,i,o){var s,a,l,u=8*o-i-1,h=(1<>1,f=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:o-1,d=n?1:-1,g=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(a=isNaN(t)?1:0,s=h):(s=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-s))<1&&(s--,l*=2),(t+=s+c>=1?f/l:f*Math.pow(2,1-c))*l>=2&&(s++,l/=2),s+c>=h?(a=0,s=h):s+c>=1?(a=(t*l-1)*Math.pow(2,i),s+=c):(a=t*Math.pow(2,c-1)*Math.pow(2,i),s=0));i>=8;e[r+p]=255&a,p+=d,a/=256,i-=8);for(s=s<0;e[r+p]=255&s,p+=d,s/=256,u-=8);e[r+p-d]|=128*g}},Bi="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null,Ci.Buffer=xn,Ci.SlowBuffer=function(e){return+e!=e&&(e=0),xn.alloc(+e)},Ci.INSPECT_MAX_BYTES=50,Ci.kMaxLength=2147483647,xn.TYPED_ARRAY_SUPPORT=function(){try{var e=new Uint8Array(1),t={foo:function(){return 42}};return Object.setPrototypeOf(t,Uint8Array.prototype),Object.setPrototypeOf(e,t),42===e.foo()}catch{return!1}}(),xn.TYPED_ARRAY_SUPPORT||typeof console>"u"||"function"!=typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),Object.defineProperty(xn.prototype,"parent",{enumerable:!0,get:function(){if(xn.isBuffer(this))return this.buffer}}),Object.defineProperty(xn.prototype,"offset",{enumerable:!0,get:function(){if(xn.isBuffer(this))return this.byteOffset}}),xn.poolSize=8192,xn.from=function(e,t,r){return Un(e,t,r)},Object.setPrototypeOf(xn.prototype,Uint8Array.prototype),Object.setPrototypeOf(xn,Uint8Array),xn.alloc=function(e,t,r){return i=t,o=r,Ln(n=e),n<=0?Bn(n):void 0!==i?"string"==typeof o?Bn(n).fill(i,o):Bn(n).fill(i):Bn(n);var n,i,o},xn.allocUnsafe=function(e){return Mn(e)},xn.allocUnsafeSlow=function(e){return Mn(e)},xn.isBuffer=function(e){return null!=e&&!0===e._isBuffer&&e!==xn.prototype},xn.compare=function(e,t){if(hi(e,Uint8Array)&&(e=xn.from(e,e.offset,e.byteLength)),hi(t,Uint8Array)&&(t=xn.from(t,t.offset,t.byteLength)),!xn.isBuffer(e)||!xn.isBuffer(t))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(e===t)return 0;for(var r=e.length,n=t.length,i=0,o=Math.min(r,n);it&&(e+=" ... "),""},Bi&&(xn.prototype[Bi]=xn.prototype.inspect),xn.prototype.compare=function(e,t,r,n,i){if(hi(e,Uint8Array)&&(e=xn.from(e,e.offset,e.byteLength)),!xn.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),t<0||r>e.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&t>=r)return 0;if(n>=i)return-1;if(t>=r)return 1;if(this===e)return 0;for(var o=(i>>>=0)-(n>>>=0),s=(r>>>=0)-(t>>>=0),a=Math.min(o,s),l=this.slice(n,i),u=e.slice(t,r),h=0;h>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}var i=this.length-t;if((void 0===r||r>i)&&(r=i),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return Vn(this,e,t,r);case"utf8":case"utf-8":return Hn(this,e,t,r);case"ascii":return zn(this,e,t,r);case"latin1":case"binary":return Yn(this,e,t,r);case"base64":return Kn(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Gn(this,e,t,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},xn.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},xn.prototype.slice=function(e,t){var r=this.length;(e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t>>=0,t>>>=0,r||ri(e,t,this.length);for(var n=this[e],i=1,o=0;++o>>=0,t>>>=0,r||ri(e,t,this.length);for(var n=this[e+--t],i=1;t>0&&(i*=256);)n+=this[e+--t]*i;return n},xn.prototype.readUInt8=function(e,t){return e>>>=0,t||ri(e,1,this.length),this[e]},xn.prototype.readUInt16LE=function(e,t){return e>>>=0,t||ri(e,2,this.length),this[e]|this[e+1]<<8},xn.prototype.readUInt16BE=function(e,t){return e>>>=0,t||ri(e,2,this.length),this[e]<<8|this[e+1]},xn.prototype.readUInt32LE=function(e,t){return e>>>=0,t||ri(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},xn.prototype.readUInt32BE=function(e,t){return e>>>=0,t||ri(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},xn.prototype.readIntLE=function(e,t,r){e>>>=0,t>>>=0,r||ri(e,t,this.length);for(var n=this[e],i=1,o=0;++o=(i*=128)&&(n-=Math.pow(2,8*t)),n},xn.prototype.readIntBE=function(e,t,r){e>>>=0,t>>>=0,r||ri(e,t,this.length);for(var n=t,i=1,o=this[e+--n];n>0&&(i*=256);)o+=this[e+--n]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*t)),o},xn.prototype.readInt8=function(e,t){return e>>>=0,t||ri(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},xn.prototype.readInt16LE=function(e,t){e>>>=0,t||ri(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},xn.prototype.readInt16BE=function(e,t){e>>>=0,t||ri(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},xn.prototype.readInt32LE=function(e,t){return e>>>=0,t||ri(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},xn.prototype.readInt32BE=function(e,t){return e>>>=0,t||ri(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},xn.prototype.readFloatLE=function(e,t){return e>>>=0,t||ri(e,4,this.length),Pi.read(this,e,!0,23,4)},xn.prototype.readFloatBE=function(e,t){return e>>>=0,t||ri(e,4,this.length),Pi.read(this,e,!1,23,4)},xn.prototype.readDoubleLE=function(e,t){return e>>>=0,t||ri(e,8,this.length),Pi.read(this,e,!0,52,8)},xn.prototype.readDoubleBE=function(e,t){return e>>>=0,t||ri(e,8,this.length),Pi.read(this,e,!1,52,8)},xn.prototype.writeUIntLE=function(e,t,r,n){e=+e,t>>>=0,r>>>=0,n||ni(this,e,t,r,Math.pow(2,8*r)-1,0);var i=1,o=0;for(this[t]=255&e;++o>>=0,r>>>=0,n||ni(this,e,t,r,Math.pow(2,8*r)-1,0);var i=r-1,o=1;for(this[t+i]=255&e;--i>=0&&(o*=256);)this[t+i]=e/o&255;return t+r},xn.prototype.writeUInt8=function(e,t,r){return e=+e,t>>>=0,r||ni(this,e,t,1,255,0),this[t]=255&e,t+1},xn.prototype.writeUInt16LE=function(e,t,r){return e=+e,t>>>=0,r||ni(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},xn.prototype.writeUInt16BE=function(e,t,r){return e=+e,t>>>=0,r||ni(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},xn.prototype.writeUInt32LE=function(e,t,r){return e=+e,t>>>=0,r||ni(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},xn.prototype.writeUInt32BE=function(e,t,r){return e=+e,t>>>=0,r||ni(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},xn.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t>>>=0,!n){var i=Math.pow(2,8*r-1);ni(this,e,t,r,i-1,-i)}var o=0,s=1,a=0;for(this[t]=255&e;++o>>=0,!n){var i=Math.pow(2,8*r-1);ni(this,e,t,r,i-1,-i)}var o=r-1,s=1,a=0;for(this[t+o]=255&e;--o>=0&&(s*=256);)e<0&&0===a&&0!==this[t+o+1]&&(a=1),this[t+o]=(e/s|0)-a&255;return t+r},xn.prototype.writeInt8=function(e,t,r){return e=+e,t>>>=0,r||ni(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},xn.prototype.writeInt16LE=function(e,t,r){return e=+e,t>>>=0,r||ni(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},xn.prototype.writeInt16BE=function(e,t,r){return e=+e,t>>>=0,r||ni(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},xn.prototype.writeInt32LE=function(e,t,r){return e=+e,t>>>=0,r||ni(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},xn.prototype.writeInt32BE=function(e,t,r){return e=+e,t>>>=0,r||ni(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},xn.prototype.writeFloatLE=function(e,t,r){return oi(this,e,t,!0,r)},xn.prototype.writeFloatBE=function(e,t,r){return oi(this,e,t,!1,r)},xn.prototype.writeDoubleLE=function(e,t,r){return si(this,e,t,!0,r)},xn.prototype.writeDoubleBE=function(e,t,r){return si(this,e,t,!1,r)},xn.prototype.copy=function(e,t,r,n){if(!xn.isBuffer(e))throw new TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t=0;--o)e[o+t]=this[o+r];else Uint8Array.prototype.set.call(e,this.subarray(r,n),t);return i},xn.prototype.fill=function(e,t,r,n){if("string"==typeof e){if("string"==typeof t?(n=t,t=0,r=this.length):"string"==typeof r&&(n=r,r=this.length),void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!xn.isEncoding(n))throw new TypeError("Unknown encoding: "+n);if(1===e.length){var i=e.charCodeAt(0);("utf8"===n&&i<128||"latin1"===n)&&(e=i)}}else"number"==typeof e?e&=255:"boolean"==typeof e&&(e=Number(e));if(t<0||this.length>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(o=t;o=0?(i>0&&(e.lastNeed=i-1),i):--n=0?(i>0&&(e.lastNeed=i-2),i):--n=0?(i>0&&(2===i?i=0:e.lastNeed=i-3),i):0}(this,e,t);if(!this.lastNeed)return e.toString("utf8",t);this.lastTotal=r;var n=e.length-(r-this.lastNeed);return e.copy(this.lastChar,0,n),e.toString("utf8",t,n)},di.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length},ji.StringDecoder,ji.StringDecoder})),qi={};Qe(qi,{StringDecoder:()=>$i,default:()=>ji});var $i,Vi=Ke((()=>{$r(),Cr(),Xe(),Wi(),Wi(),$i=ji.StringDecoder})),Hi=Ge(((e,t)=>{$r(),Cr(),Xe();var r=Qr(),{PromisePrototypeThen:n,SymbolAsyncIterator:i,SymbolIterator:o}=Hr(),{Buffer:s}=(qr(),Je(kr)),{ERR_INVALID_ARG_TYPE:a,ERR_STREAM_NULL_VALUES:l}=Kr().codes;t.exports=function(e,t,u){let h,c;if("string"==typeof t||t instanceof s)return new e({objectMode:!0,...u,read(){this.push(t),this.push(null)}});if(t&&t[i])c=!0,h=t[i]();else{if(!t||!t[o])throw new a("iterable",["Iterable"],t);c=!1,h=t[o]()}let f=new e({objectMode:!0,highWaterMark:1,...u}),p=!1;return f._read=function(){p||(p=!0,async function(){for(;;){try{let{value:e,done:t}=c?await h.next():h.next();if(t)f.push(null);else{let t=e&&"function"==typeof e.then?await e:e;if(null===t)throw p=!1,new l;if(f.push(t))continue;p=!1}}catch(e){f.destroy(e)}break}}())},f._destroy=function(e,t){n(async function(e){let t=null!=e,r="function"==typeof h.throw;if(t&&r){let{value:t,done:r}=await h.throw(e);if(await t,r)return}if("function"==typeof h.return){let{value:e}=await h.return();await e}}(e),(()=>r.nextTick(t,e)),(n=>r.nextTick(t,n||e)))},f}})),zi=Ge(((e,t)=>{$r(),Cr(),Xe();var r=Qr(),{ArrayPrototypeIndexOf:n,NumberIsInteger:i,NumberIsNaN:o,NumberParseInt:s,ObjectDefineProperties:a,ObjectKeys:l,ObjectSetPrototypeOf:u,Promise:h,SafeSet:c,SymbolAsyncIterator:f,Symbol:p}=Hr();t.exports=D,D.ReadableState=j;var{EventEmitter:d}=(In(),Je(bn)),{Stream:g,prependListener:y}=Tn(),{Buffer:m}=(qr(),Je(kr)),{addAbortSignal:b}=Rn(),w=Xr(),_=zr().debuglog("stream",(e=>{_=e})),v=On(),E=Zr(),{getHighWaterMark:S,getDefaultHighWaterMark:A}=Cn(),{aggregateTwoErrors:I,codes:{ERR_INVALID_ARG_TYPE:T,ERR_METHOD_NOT_IMPLEMENTED:R,ERR_OUT_OF_RANGE:O,ERR_STREAM_PUSH_AFTER_EOF:C,ERR_STREAM_UNSHIFT_AFTER_END_EVENT:k}}=Kr(),{validateObject:P}=Gr(),B=p("kPaused"),{StringDecoder:x}=(Vi(),Je(qi)),U=Hi();u(D.prototype,g.prototype),u(D,g);var L,M=()=>{},{errorOrDestroy:N}=E;function j(e,t,r){"boolean"!=typeof r&&(r=t instanceof Gi()),this.objectMode=!(!e||!e.objectMode),r&&(this.objectMode=this.objectMode||!(!e||!e.readableObjectMode)),this.highWaterMark=e?S(this,e,"readableHighWaterMark",r):A(!1),this.buffer=new v,this.length=0,this.pipes=[],this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.constructed=!0,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this[B]=null,this.errorEmitted=!1,this.emitClose=!e||!1!==e.emitClose,this.autoDestroy=!e||!1!==e.autoDestroy,this.destroyed=!1,this.errored=null,this.closed=!1,this.closeEmitted=!1,this.defaultEncoding=e&&e.defaultEncoding||"utf8",this.awaitDrainWriters=null,this.multiAwaitDrain=!1,this.readingMore=!1,this.dataEmitted=!1,this.decoder=null,this.encoding=null,e&&e.encoding&&(this.decoder=new x(e.encoding),this.encoding=e.encoding)}function D(e){if(!(this instanceof D))return new D(e);let t=this instanceof Gi();this._readableState=new j(e,this,t),e&&("function"==typeof e.read&&(this._read=e.read),"function"==typeof e.destroy&&(this._destroy=e.destroy),"function"==typeof e.construct&&(this._construct=e.construct),e.signal&&!t&&b(e.signal,this)),g.call(this,e),E.construct(this,(()=>{this._readableState.needReadable&&H(this,this._readableState)}))}function F(e,t,r,n){_("readableAddChunk",t);let i,o=e._readableState;if(o.objectMode||("string"==typeof t?(r=r||o.defaultEncoding,o.encoding!==r&&(n&&o.encoding?t=m.from(t,r).toString(o.encoding):(t=m.from(t,r),r=""))):t instanceof m?r="":g._isUint8Array(t)?(t=g._uint8ArrayToBuffer(t),r=""):null!=t&&(i=new T("chunk",["string","Buffer","Uint8Array"],t))),i)N(e,i);else if(null===t)o.reading=!1,function(e,t){if(_("onEofChunk"),!t.ended){if(t.decoder){let e=t.decoder.end();e&&e.length&&(t.buffer.push(e),t.length+=t.objectMode?1:e.length)}t.ended=!0,t.sync?$(e):(t.needReadable=!1,t.emittedReadable=!0,V(e))}}(e,o);else if(o.objectMode||t&&t.length>0)if(n)if(o.endEmitted)N(e,new k);else{if(o.destroyed||o.errored)return!1;W(e,o,t,!0)}else if(o.ended)N(e,new C);else{if(o.destroyed||o.errored)return!1;o.reading=!1,o.decoder&&!r?(t=o.decoder.write(t),o.objectMode||0!==t.length?W(e,o,t,!1):H(e,o)):W(e,o,t,!1)}else n||(o.reading=!1,H(e,o));return!o.ended&&(o.length0?(t.multiAwaitDrain?t.awaitDrainWriters.clear():t.awaitDrainWriters=null,t.dataEmitted=!0,e.emit("data",r)):(t.length+=t.objectMode?1:r.length,n?t.buffer.unshift(r):t.buffer.push(r),t.needReadable&&$(e)),H(e,t)}function q(e,t){return e<=0||0===t.length&&t.ended?0:t.objectMode?1:o(e)?t.flowing&&t.length?t.buffer.first().length:t.length:e<=t.length?e:t.ended?t.length:0}function $(e){let t=e._readableState;_("emitReadable",t.needReadable,t.emittedReadable),t.needReadable=!1,t.emittedReadable||(_("emitReadable",t.flowing),t.emittedReadable=!0,r.nextTick(V,e))}function V(e){let t=e._readableState;_("emitReadable_",t.destroyed,t.length,t.ended),!t.destroyed&&!t.errored&&(t.length||t.ended)&&(e.emit("readable"),t.emittedReadable=!1),t.needReadable=!t.flowing&&!t.ended&&t.length<=t.highWaterMark,Q(e)}function H(e,t){!t.readingMore&&t.constructed&&(t.readingMore=!0,r.nextTick(z,e,t))}function z(e,t){for(;!t.reading&&!t.ended&&(t.length0,t.resumeScheduled&&!1===t[B]?t.flowing=!0:e.listenerCount("data")>0?e.resume():t.readableListening||(t.flowing=null)}function K(e){_("readable nexttick read 0"),e.read(0)}function G(e,t){_("resume",t.reading),t.reading||e.read(0),t.resumeScheduled=!1,e.emit("resume"),Q(e),t.flowing&&!t.reading&&e.read(0)}function Q(e){let t=e._readableState;for(_("flow",t.flowing);t.flowing&&null!==e.read(););}function J(e,t){"function"!=typeof e.read&&(e=D.wrap(e,{objectMode:!0}));let r=async function*(e,t){let r=M;function n(t){this===e?(r(),r=M):r=t}e.on("readable",n);let i,o=w(e,{writable:!1},(e=>{i=e?I(i,e):null,r(),r=M}));try{for(;;){let t=e.destroyed?null:e.read();if(null!==t)yield t;else{if(i)throw i;if(null===i)return;await new h(n)}}}catch(e){throw i=I(i,e),i}finally{!i&&!1===t?.destroyOnReturn||void 0!==i&&!e._readableState.autoDestroy?(e.off("readable",n),o()):E.destroyer(e,null)}}(e,t);return r.stream=e,r}function X(e,t){if(0===t.length)return null;let r;return t.objectMode?r=t.buffer.shift():!e||e>=t.length?(r=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.first():t.buffer.concat(t.length),t.buffer.clear()):r=t.buffer.consume(e,t.decoder),r}function Z(e){let t=e._readableState;_("endReadable",t.endEmitted),t.endEmitted||(t.ended=!0,r.nextTick(ee,t,e))}function ee(e,t){if(_("endReadableNT",e.endEmitted,e.length),!e.errored&&!e.closeEmitted&&!e.endEmitted&&0===e.length)if(e.endEmitted=!0,t.emit("end"),t.writable&&!1===t.allowHalfOpen)r.nextTick(te,t);else if(e.autoDestroy){let e=t._writableState;(!e||e.autoDestroy&&(e.finished||!1===e.writable))&&t.destroy()}}function te(e){e.writable&&!e.writableEnded&&!e.destroyed&&e.end()}function re(){return void 0===L&&(L={}),L}D.prototype.destroy=E.destroy,D.prototype._undestroy=E.undestroy,D.prototype._destroy=function(e,t){t(e)},D.prototype[d.captureRejectionSymbol]=function(e){this.destroy(e)},D.prototype.push=function(e,t){return F(this,e,t,!1)},D.prototype.unshift=function(e,t){return F(this,e,t,!0)},D.prototype.isPaused=function(){let e=this._readableState;return!0===e[B]||!1===e.flowing},D.prototype.setEncoding=function(e){let t=new x(e);this._readableState.decoder=t,this._readableState.encoding=this._readableState.decoder.encoding;let r=this._readableState.buffer,n="";for(let e of r)n+=t.write(e);return r.clear(),""!==n&&r.push(n),this._readableState.length=n.length,this},D.prototype.read=function(e){_("read",e),void 0===e?e=NaN:i(e)||(e=s(e,10));let t=this._readableState,r=e;if(e>t.highWaterMark&&(t.highWaterMark=function(e){if(e>1073741824)throw new O("size","<= 1GiB",e);return e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,++e}(e)),0!==e&&(t.emittedReadable=!1),0===e&&t.needReadable&&((0!==t.highWaterMark?t.length>=t.highWaterMark:t.length>0)||t.ended))return _("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?Z(this):$(this),null;if(0===(e=q(e,t))&&t.ended)return 0===t.length&&Z(this),null;let n,o=t.needReadable;if(_("need readable",o),(0===t.length||t.length-e0?X(e,t):null,null===n?(t.needReadable=t.length<=t.highWaterMark,e=0):(t.length-=e,t.multiAwaitDrain?t.awaitDrainWriters.clear():t.awaitDrainWriters=null),0===t.length&&(t.ended||(t.needReadable=!0),r!==e&&t.ended&&Z(this)),null!==n&&!t.errorEmitted&&!t.closeEmitted&&(t.dataEmitted=!0,this.emit("data",n)),n},D.prototype._read=function(e){throw new R("_read()")},D.prototype.pipe=function(e,t){let n=this,i=this._readableState;1===i.pipes.length&&(i.multiAwaitDrain||(i.multiAwaitDrain=!0,i.awaitDrainWriters=new c(i.awaitDrainWriters?[i.awaitDrainWriters]:[]))),i.pipes.push(e),_("pipe count=%d opts=%j",i.pipes.length,t);let o=t&&!1===t.end||e===r.stdout||e===r.stderr?g:s;function s(){_("onend"),e.end()}i.endEmitted?r.nextTick(o):n.once("end",o),e.on("unpipe",(function t(r,o){_("onunpipe"),r===n&&o&&!1===o.hasUnpiped&&(o.hasUnpiped=!0,_("cleanup"),e.removeListener("close",p),e.removeListener("finish",d),a&&e.removeListener("drain",a),e.removeListener("error",f),e.removeListener("unpipe",t),n.removeListener("end",s),n.removeListener("end",g),n.removeListener("data",h),l=!0,a&&i.awaitDrainWriters&&(!e._writableState||e._writableState.needDrain)&&a())}));let a,l=!1;function u(){l||(1===i.pipes.length&&i.pipes[0]===e?(_("false write response, pause",0),i.awaitDrainWriters=e,i.multiAwaitDrain=!1):i.pipes.length>1&&i.pipes.includes(e)&&(_("false write response, pause",i.awaitDrainWriters.size),i.awaitDrainWriters.add(e)),n.pause()),a||(a=function(e,t){return function(){let r=e._readableState;r.awaitDrainWriters===t?(_("pipeOnDrain",1),r.awaitDrainWriters=null):r.multiAwaitDrain&&(_("pipeOnDrain",r.awaitDrainWriters.size),r.awaitDrainWriters.delete(t)),(!r.awaitDrainWriters||0===r.awaitDrainWriters.size)&&e.listenerCount("data")&&e.resume()}}(n,e),e.on("drain",a))}function h(t){_("ondata");let r=e.write(t);_("dest.write",r),!1===r&&u()}function f(t){if(_("onerror",t),g(),e.removeListener("error",f),0===e.listenerCount("error")){let r=e._writableState||e._readableState;r&&!r.errorEmitted?N(e,t):e.emit("error",t)}}function p(){e.removeListener("finish",d),g()}function d(){_("onfinish"),e.removeListener("close",p),g()}function g(){_("unpipe"),n.unpipe(e)}return n.on("data",h),y(e,"error",f),e.once("close",p),e.once("finish",d),e.emit("pipe",n),!0===e.writableNeedDrain?i.flowing&&u():i.flowing||(_("pipe resume"),n.resume()),e},D.prototype.unpipe=function(e){let t=this._readableState;if(0===t.pipes.length)return this;if(!e){let e=t.pipes;t.pipes=[],this.pause();for(let t=0;t0,!1!==i.flowing&&this.resume()):"readable"===e&&!i.endEmitted&&!i.readableListening&&(i.readableListening=i.needReadable=!0,i.flowing=!1,i.emittedReadable=!1,_("on readable",i.length,i.reading),i.length?$(this):i.reading||r.nextTick(K,this)),n},D.prototype.addListener=D.prototype.on,D.prototype.removeListener=function(e,t){let n=g.prototype.removeListener.call(this,e,t);return"readable"===e&&r.nextTick(Y,this),n},D.prototype.off=D.prototype.removeListener,D.prototype.removeAllListeners=function(e){let t=g.prototype.removeAllListeners.apply(this,arguments);return("readable"===e||void 0===e)&&r.nextTick(Y,this),t},D.prototype.resume=function(){let e=this._readableState;return e.flowing||(_("resume"),e.flowing=!e.readableListening,function(e,t){t.resumeScheduled||(t.resumeScheduled=!0,r.nextTick(G,e,t))}(this,e)),e[B]=!1,this},D.prototype.pause=function(){return _("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(_("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState[B]=!0,this},D.prototype.wrap=function(e){let t=!1;e.on("data",(r=>{!this.push(r)&&e.pause&&(t=!0,e.pause())})),e.on("end",(()=>{this.push(null)})),e.on("error",(e=>{N(this,e)})),e.on("close",(()=>{this.destroy()})),e.on("destroy",(()=>{this.destroy()})),this._read=()=>{t&&e.resume&&(t=!1,e.resume())};let r=l(e);for(let t=1;t{$r(),Cr(),Xe();var r=Qr(),{ArrayPrototypeSlice:n,Error:i,FunctionPrototypeSymbolHasInstance:o,ObjectDefineProperty:s,ObjectDefineProperties:a,ObjectSetPrototypeOf:l,StringPrototypeToLowerCase:u,Symbol:h,SymbolHasInstance:c}=Hr();t.exports=x,x.WritableState=P;var{EventEmitter:f}=(In(),Je(bn)),p=Tn().Stream,{Buffer:d}=(qr(),Je(kr)),g=Zr(),{addAbortSignal:y}=Rn(),{getHighWaterMark:m,getDefaultHighWaterMark:b}=Cn(),{ERR_INVALID_ARG_TYPE:w,ERR_METHOD_NOT_IMPLEMENTED:_,ERR_MULTIPLE_CALLBACK:v,ERR_STREAM_CANNOT_PIPE:E,ERR_STREAM_DESTROYED:S,ERR_STREAM_ALREADY_FINISHED:A,ERR_STREAM_NULL_VALUES:I,ERR_STREAM_WRITE_AFTER_END:T,ERR_UNKNOWN_ENCODING:R}=Kr().codes,{errorOrDestroy:O}=g;function C(){}l(x.prototype,p.prototype),l(x,p);var k=h("kOnFinished");function P(e,t,r){"boolean"!=typeof r&&(r=t instanceof Gi()),this.objectMode=!(!e||!e.objectMode),r&&(this.objectMode=this.objectMode||!(!e||!e.writableObjectMode)),this.highWaterMark=e?m(this,e,"writableHighWaterMark",r):b(!1),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;let n=!(!e||!1!==e.decodeStrings);this.decodeStrings=!n,this.defaultEncoding=e&&e.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=N.bind(void 0,t),this.writecb=null,this.writelen=0,this.afterWriteTickInfo=null,B(this),this.pendingcb=0,this.constructed=!0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=!e||!1!==e.emitClose,this.autoDestroy=!e||!1!==e.autoDestroy,this.errored=null,this.closed=!1,this.closeEmitted=!1,this[k]=[]}function B(e){e.buffered=[],e.bufferedIndex=0,e.allBuffers=!0,e.allNoop=!0}function x(e){let t=this instanceof Gi();if(!t&&!o(x,this))return new x(e);this._writableState=new P(e,this,t),e&&("function"==typeof e.write&&(this._write=e.write),"function"==typeof e.writev&&(this._writev=e.writev),"function"==typeof e.destroy&&(this._destroy=e.destroy),"function"==typeof e.final&&(this._final=e.final),"function"==typeof e.construct&&(this._construct=e.construct),e.signal&&y(e.signal,this)),p.call(this,e),g.construct(this,(()=>{let e=this._writableState;e.writing||W(this,e),$(this,e)}))}function U(e,t,n,i){let o,s=e._writableState;if("function"==typeof n)i=n,n=s.defaultEncoding;else{if(n){if("buffer"!==n&&!d.isEncoding(n))throw new R(n)}else n=s.defaultEncoding;"function"!=typeof i&&(i=C)}if(null===t)throw new I;if(!s.objectMode)if("string"==typeof t)!1!==s.decodeStrings&&(t=d.from(t,n),n="buffer");else if(t instanceof d)n="buffer";else{if(!p._isUint8Array(t))throw new w("chunk",["string","Buffer","Uint8Array"],t);t=p._uint8ArrayToBuffer(t),n="buffer"}return s.ending?o=new T:s.destroyed&&(o=new S("write")),o?(r.nextTick(i,o),O(e,o,!0),o):(s.pendingcb++,function(e,t,r,n,i){let o=t.objectMode?1:r.length;t.length+=o;let s=t.lengthn.bufferedIndex&&W(e,n),i?null!==n.afterWriteTickInfo&&n.afterWriteTickInfo.cb===o?n.afterWriteTickInfo.count++:(n.afterWriteTickInfo={count:1,cb:o,stream:e,state:n},r.nextTick(j,n.afterWriteTickInfo)):D(e,n,1,o))):O(e,new v)}function j({stream:e,state:t,count:r,cb:n}){return t.afterWriteTickInfo=null,D(e,t,r,n)}function D(e,t,r,n){for(!t.ending&&!e.destroyed&&0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit("drain"));r-- >0;)t.pendingcb--,n();t.destroyed&&F(t),$(e,t)}function F(e){if(e.writing)return;for(let r=e.bufferedIndex;r1&&e._writev){t.pendingcb-=s-1;let i=t.allNoop?C:e=>{for(let t=a;t256?(r.splice(0,a),t.bufferedIndex=0):t.bufferedIndex=a}t.bufferProcessing=!1}function q(e){return e.ending&&!e.destroyed&&e.constructed&&0===e.length&&!e.errored&&0===e.buffered.length&&!e.finished&&!e.writing&&!e.errorEmitted&&!e.closeEmitted}function $(e,t,n){q(t)&&(function(e,t){!t.prefinished&&!t.finalCalled&&("function"!=typeof e._final||t.destroyed?(t.prefinished=!0,e.emit("prefinish")):(t.finalCalled=!0,function(e,t){let n=!1;function i(i){if(n)O(e,i??v());else if(n=!0,t.pendingcb--,i){let r=t[k].splice(0);for(let e=0;e{q(t)?V(e,t):t.pendingcb--}),e,t)):q(t)&&(t.pendingcb++,V(e,t))))}function V(e,t){t.pendingcb--,t.finished=!0;let r=t[k].splice(0);for(let e=0;e{$r(),Cr(),Xe();var r=Qr(),n=(qr(),Je(kr)),{isReadable:i,isWritable:o,isIterable:s,isNodeStream:a,isReadableNodeStream:l,isWritableNodeStream:u,isDuplexNodeStream:h}=Jr(),c=Xr(),{AbortError:f,codes:{ERR_INVALID_ARG_TYPE:p,ERR_INVALID_RETURN_VALUE:d}}=Kr(),{destroyer:g}=Zr(),y=Gi(),m=zi(),{createDeferredPromise:b}=zr(),w=Hi(),_=globalThis.Blob||n.Blob,v=typeof _<"u"?function(e){return e instanceof _}:function(e){return!1},E=globalThis.AbortController||Yr().AbortController,{FunctionPrototypeCall:S}=Hr(),A=class extends y{constructor(e){super(e),!1===e?.readable&&(this._readableState.readable=!1,this._readableState.ended=!0,this._readableState.endEmitted=!0),!1===e?.writable&&(this._writableState.writable=!1,this._writableState.ending=!0,this._writableState.ended=!0,this._writableState.finished=!0)}};function I(e){let t,r,n,s,a,l=e.readable&&"function"!=typeof e.readable.read?m.wrap(e.readable):e.readable,u=e.writable,h=!!i(l),p=!!o(u);function d(e){let t=s;s=null,t?t(e):e&&a.destroy(e)}return a=new A({readableObjectMode:!(null==l||!l.readableObjectMode),writableObjectMode:!(null==u||!u.writableObjectMode),readable:h,writable:p}),p&&(c(u,(e=>{p=!1,e&&g(l,e),d(e)})),a._write=function(e,r,n){u.write(e,r)?n():t=n},a._final=function(e){u.end(),r=e},u.on("drain",(function(){if(t){let e=t;t=null,e()}})),u.on("finish",(function(){if(r){let e=r;r=null,e()}}))),h&&(c(l,(e=>{h=!1,e&&g(l,e),d(e)})),l.on("readable",(function(){if(n){let e=n;n=null,e()}})),l.on("end",(function(){a.push(null)})),a._read=function(){for(;;){let e=l.read();if(null===e)return void(n=a._read);if(!a.push(e))return}}),a._destroy=function(e,i){!e&&null!==s&&(e=new f),n=null,t=null,r=null,null===s?i(e):(s=i,g(u,e),g(l,e))},a}t.exports=function e(t,n){if(h(t))return t;if(l(t))return I({readable:t});if(u(t))return I({writable:t});if(a(t))return I({writable:!1,readable:!1});if("function"==typeof t){let{value:e,write:i,final:o,destroy:a}=function(e){let{promise:t,resolve:n}=b(),i=new E,o=i.signal;return{value:e(async function*(){for(;;){let e=t;t=null;let{chunk:i,done:s,cb:a}=await e;if(r.nextTick(a),s)return;if(o.aborted)throw new f(void 0,{cause:o.reason});({promise:t,resolve:n}=b()),yield i}}(),{signal:o}),write(e,t,r){let i=n;n=null,i({chunk:e,done:!1,cb:r})},final(e){let t=n;n=null,t({done:!0,cb:e})},destroy(e,t){i.abort(),t(e)}}}(t);if(s(e))return w(A,e,{objectMode:!0,write:i,final:o,destroy:a});let l=e?.then;if("function"==typeof l){let t,n=S(l,e,(e=>{if(null!=e)throw new d("nully","body",e)}),(e=>{g(t,e)}));return t=new A({objectMode:!0,readable:!1,write:i,final(e){o((async()=>{try{await n,r.nextTick(e,null)}catch(t){r.nextTick(e,t)}}))},destroy:a})}throw new d("Iterable, AsyncIterable or AsyncFunction",n,e)}if(v(t))return e(t.arrayBuffer());if(s(t))return w(A,t,{objectMode:!0,writable:!1});if("object"==typeof t?.writable||"object"==typeof t?.readable)return I({readable:null!=t&&t.readable?l(t?.readable)?t?.readable:e(t.readable):void 0,writable:null!=t&&t.writable?u(t?.writable)?t?.writable:e(t.writable):void 0});let i=t?.then;if("function"==typeof i){let e;return S(i,t,(t=>{null!=t&&e.push(t),e.push(null)}),(t=>{g(e,t)})),e=new A({objectMode:!0,writable:!1,read(){}})}throw new p(n,["Blob","ReadableStream","WritableStream","Stream","Iterable","AsyncIterable","Function","{ readable, writable } pair","Promise"],t)}})),Gi=Ge(((e,t)=>{$r(),Cr(),Xe();var{ObjectDefineProperties:r,ObjectGetOwnPropertyDescriptor:n,ObjectKeys:i,ObjectSetPrototypeOf:o}=Hr();t.exports=h;var s,a,l=zi(),u=Yi();o(h.prototype,l.prototype),o(h,l);{let e=i(u.prototype);for(let t=0;t{$r(),Cr(),Xe();var{ObjectSetPrototypeOf:r,Symbol:n}=Hr();t.exports=l;var{ERR_METHOD_NOT_IMPLEMENTED:i}=Kr().codes,o=Gi(),{getHighWaterMark:s}=Cn();r(l.prototype,o.prototype),r(l,o);var a=n("kCallback");function l(e){if(!(this instanceof l))return new l(e);let t=e?s(this,e,"readableHighWaterMark",!0):null;0===t&&(e={...e,highWaterMark:null,readableHighWaterMark:t,writableHighWaterMark:e.writableHighWaterMark||0}),o.call(this,e),this._readableState.sync=!1,this[a]=null,e&&("function"==typeof e.transform&&(this._transform=e.transform),"function"==typeof e.flush&&(this._flush=e.flush)),this.on("prefinish",h)}function u(e){"function"!=typeof this._flush||this.destroyed?(this.push(null),e&&e()):this._flush(((t,r)=>{t?e?e(t):this.destroy(t):(null!=r&&this.push(r),this.push(null),e&&e())}))}function h(){this._final!==u&&u.call(this)}l.prototype._final=u,l.prototype._transform=function(e,t,r){throw new i("_transform()")},l.prototype._write=function(e,t,r){let n=this._readableState,i=this._writableState,o=n.length;this._transform(e,t,((e,t)=>{e?r(e):(null!=t&&this.push(t),i.ended||o===n.length||n.length{$r(),Cr(),Xe();var{ObjectSetPrototypeOf:r}=Hr();t.exports=i;var n=Qi();function i(e){if(!(this instanceof i))return new i(e);n.call(this,e)}r(i.prototype,n.prototype),r(i,n),i.prototype._transform=function(e,t,r){r(null,e)}})),Xi=Ge(((e,t)=>{$r(),Cr(),Xe();var r,n,i=Qr(),{ArrayIsArray:o,Promise:s,SymbolAsyncIterator:a}=Hr(),l=Xr(),{once:u}=zr(),h=Zr(),c=Gi(),{aggregateTwoErrors:f,codes:{ERR_INVALID_ARG_TYPE:p,ERR_INVALID_RETURN_VALUE:d,ERR_MISSING_ARGS:g,ERR_STREAM_DESTROYED:y,ERR_STREAM_PREMATURE_CLOSE:m},AbortError:b}=Kr(),{validateFunction:w,validateAbortSignal:_}=Gr(),{isIterable:v,isReadable:E,isReadableNodeStream:S,isNodeStream:A,isTransformStream:I,isWebStream:T,isReadableStream:R,isReadableEnded:O}=Jr(),C=globalThis.AbortController||Yr().AbortController;function k(e,t,r){let n=!1;return e.on("close",(()=>{n=!0})),{destroy:t=>{n||(n=!0,h.destroyer(e,t||new y("pipe")))},cleanup:l(e,{readable:t,writable:r},(e=>{n=!e}))}}function P(e){if(v(e))return e;if(S(e))return async function*(e){n||(n=zi()),yield*n.prototype[a].call(e)}(e);throw new p("val",["Readable","Iterable","AsyncIterable"],e)}async function B(e,t,r,{end:n}){let i,o=null,a=e=>{if(e&&(i=e),o){let e=o;o=null,e()}},u=()=>new s(((e,t)=>{i?t(i):o=()=>{i?t(i):e()}}));t.on("drain",a);let h=l(t,{readable:!1},a);try{t.writableNeedDrain&&await u();for await(let r of e)t.write(r)||await u();n&&t.end(),await u(),r()}catch(e){r(i!==e?f(i,e):e)}finally{h(),t.off("drain",a)}}async function x(e,t,r,{end:n}){I(t)&&(t=t.writable);let i=t.getWriter();try{for await(let t of e)await i.ready,i.write(t).catch((()=>{}));await i.ready,n&&await i.close(),r()}catch(e){try{await i.abort(e),r(e)}catch(e){r(e)}}}function U(e,t,n){if(1===e.length&&o(e[0])&&(e=e[0]),e.length<2)throw new g("streams");let s=new C,a=s.signal,l=n?.signal,u=[];function h(){M(new b)}_(l,"options.signal"),l?.addEventListener("abort",h);let f,y,m,w=[],O=0;function U(e){M(e,0==--O)}function M(e,r){if(e&&(!f||"ERR_STREAM_PREMATURE_CLOSE"===f.code)&&(f=e),f||r){for(;w.length;)w.shift()(f);l?.removeEventListener("abort",h),s.abort(),r&&(f||u.forEach((e=>e())),i.nextTick(t,f,y))}}for(let t=0;t0,h=s||!1!==n?.end,f=t===e.length-1;if(A(o)){let e=function(e){e&&"AbortError"!==e.name&&"ERR_STREAM_PREMATURE_CLOSE"!==e.code&&U(e)};if(h){let{destroy:e,cleanup:t}=k(o,s,l);w.push(e),E(o)&&f&&u.push(t)}o.on("error",e),E(o)&&f&&u.push((()=>{o.removeListener("error",e)}))}if(0===t)if("function"==typeof o){if(m=o({signal:a}),!v(m))throw new d("Iterable, AsyncIterable or Stream","source",m)}else m=v(o)||S(o)||I(o)?o:c.from(o);else if("function"==typeof o){var N;if(m=I(m)?P(null===(N=m)||void 0===N?void 0:N.readable):P(m),m=o(m,{signal:a}),s){if(!v(m,!0))throw new d("AsyncIterable",`transform[${t-1}]`,m)}else{var j;r||(r=Ji());let e=new r({objectMode:!0}),t=null===(j=m)||void 0===j?void 0:j.then;if("function"==typeof t)O++,t.call(m,(t=>{y=t,null!=t&&e.write(t),h&&e.end(),i.nextTick(U)}),(t=>{e.destroy(t),i.nextTick(U,t)}));else if(v(m,!0))O++,B(m,e,U,{end:h});else{if(!R(m)&&!I(m))throw new d("AsyncIterable or Promise","destination",m);{let t=m.readable||m;O++,B(t,e,U,{end:h})}}m=e;let{destroy:n,cleanup:o}=k(m,!1,!0);w.push(n),f&&u.push(o)}}else if(A(o)){if(S(m)){O+=2;let e=L(m,o,U,{end:h});E(o)&&f&&u.push(e)}else if(I(m)||R(m)){let e=m.readable||m;O++,B(e,o,U,{end:h})}else{if(!v(m))throw new p("val",["Readable","Iterable","AsyncIterable","ReadableStream","TransformStream"],m);O++,B(m,o,U,{end:h})}m=o}else if(T(o)){if(S(m))O++,x(P(m),o,U,{end:h});else if(R(m)||v(m))O++,x(m,o,U,{end:h});else{if(!I(m))throw new p("val",["Readable","Iterable","AsyncIterable","ReadableStream","TransformStream"],m);O++,x(m.readable,o,U,{end:h})}m=o}else m=c.from(o)}return(null!=a&&a.aborted||null!=l&&l.aborted)&&i.nextTick(h),m}function L(e,t,r,{end:n}){let o=!1;if(t.on("close",(()=>{o||r(new m)})),e.pipe(t,{end:!1}),n){let r=function(){o=!0,t.end()};O(e)?i.nextTick(r):e.once("end",r)}else r();return l(e,{readable:!0,writable:!1},(t=>{let n=e._readableState;t&&"ERR_STREAM_PREMATURE_CLOSE"===t.code&&n&&n.ended&&!n.errored&&!n.errorEmitted?e.once("end",r).once("error",r):r(t)})),l(t,{readable:!1,writable:!0},r)}t.exports={pipelineImpl:U,pipeline:function(...e){return U(e,u(function(e){return w(e[e.length-1],"streams[stream.length - 1]"),e.pop()}(e)))}}})),Zi=Ge(((e,t)=>{$r(),Cr(),Xe();var{pipeline:r}=Xi(),n=Gi(),{destroyer:i}=Zr(),{isNodeStream:o,isReadable:s,isWritable:a,isWebStream:l,isTransformStream:u,isWritableStream:h,isReadableStream:c}=Jr(),{AbortError:f,codes:{ERR_INVALID_ARG_VALUE:p,ERR_MISSING_ARGS:d}}=Kr(),g=Xr();t.exports=function(...e){if(0===e.length)throw new d("streams");if(1===e.length)return n.from(e[0]);let t,y,m,b,w,_=[...e];if("function"==typeof e[0]&&(e[0]=n.from(e[0])),"function"==typeof e[e.length-1]){let t=e.length-1;e[t]=n.from(e[t])}for(let t=0;t0&&!(a(e[t])||h(e[t])||u(e[t])))throw new p(`streams[${t}]`,_[t],"must be writable")}let v=e[0],E=r(e,(function(e){let t=b;b=null,t?t(e):e?w.destroy(e):!A&&!S&&w.destroy()})),S=!!(a(v)||h(v)||u(v)),A=!!(s(E)||c(E)||u(E));if(w=new n({writableObjectMode:!(null==v||!v.writableObjectMode),readableObjectMode:!(null==E||!E.writableObjectMode),writable:S,readable:A}),S){if(o(v))w._write=function(e,r,n){v.write(e,r)?n():t=n},w._final=function(e){v.end(),y=e},v.on("drain",(function(){if(t){let e=t;t=null,e()}}));else if(l(v)){let e=(u(v)?v.writable:v).getWriter();w._write=async function(t,r,n){try{await e.ready,e.write(t).catch((()=>{})),n()}catch(e){n(e)}},w._final=async function(t){try{await e.ready,e.close().catch((()=>{})),y=t}catch(e){t(e)}}}let e=u(E)?E.readable:E;g(e,(()=>{if(y){let e=y;y=null,e()}}))}if(A)if(o(E))E.on("readable",(function(){if(m){let e=m;m=null,e()}})),E.on("end",(function(){w.push(null)})),w._read=function(){for(;;){let e=E.read();if(null===e)return void(m=w._read);if(!w.push(e))return}};else if(l(E)){let e=(u(E)?E.readable:E).getReader();w._read=async function(){for(;;)try{let{value:t,done:r}=await e.read();if(!w.push(t))return;if(r)return void w.push(null)}catch{return}}}return w._destroy=function(e,r){!e&&null!==b&&(e=new f),m=null,t=null,y=null,null===b?r(e):(b=r,o(E)&&i(E,e))},w}})),eo=Ge(((e,t)=>{$r(),Cr(),Xe();var r=globalThis.AbortController||Yr().AbortController,{codes:{ERR_INVALID_ARG_VALUE:n,ERR_INVALID_ARG_TYPE:i,ERR_MISSING_ARGS:o,ERR_OUT_OF_RANGE:s},AbortError:a}=Kr(),{validateAbortSignal:l,validateInteger:u,validateObject:h}=Gr(),c=Hr().Symbol("kWeak"),{finished:f}=Xr(),p=Zi(),{addAbortSignalNoValidate:d}=Rn(),{isWritable:g,isNodeStream:y}=Jr(),{ArrayPrototypePush:m,MathFloor:b,Number:w,NumberIsNaN:_,Promise:v,PromiseReject:E,PromisePrototypeThen:S,Symbol:A}=Hr(),I=A("kEmpty"),T=A("kEof");function R(e,t){if("function"!=typeof e)throw new i("fn",["Function","AsyncFunction"],e);null!=t&&h(t,"options"),null!=t?.signal&&l(t.signal,"options.signal");let n=1;return null!=t?.concurrency&&(n=b(t.concurrency)),u(n,"concurrency",1),async function*(){var i,o;let s=new r,l=this,u=[],h=s.signal,c={signal:h},f=()=>s.abort();null!=t&&null!==(i=t.signal)&&void 0!==i&&i.aborted&&f(),null==t||null===(o=t.signal)||void 0===o||o.addEventListener("abort",f);let p,d,g=!1;function y(){g=!0}!async function(){try{for await(let t of l){var r;if(g)return;if(h.aborted)throw new a;try{t=e(t,c)}catch(e){t=E(e)}t!==I&&("function"==typeof(null===(r=t)||void 0===r?void 0:r.catch)&&t.catch(y),u.push(t),p&&(p(),p=null),!g&&u.length&&u.length>=n&&await new v((e=>{d=e})))}u.push(T)}catch(e){let t=E(e);S(t,void 0,y),u.push(t)}finally{var i;g=!0,p&&(p(),p=null),null==t||null===(i=t.signal)||void 0===i||i.removeEventListener("abort",f)}}();try{for(;;){for(;u.length>0;){let e=await u[0];if(e===T)return;if(h.aborted)throw new a;e!==I&&(yield e),u.shift(),d&&(d(),d=null)}await new v((e=>{p=e}))}}finally{s.abort(),g=!0,d&&(d(),d=null)}}.call(this)}async function O(e,t=void 0){for await(let r of C.call(this,e,t))return!0;return!1}function C(e,t){if("function"!=typeof e)throw new i("fn",["Function","AsyncFunction"],e);return R.call(this,(async function(t,r){return await e(t,r)?t:I}),t)}var k=class extends o{constructor(){super("reduce"),this.message="Reduce of an empty stream requires an initial value"}};function P(e){if(e=w(e),_(e))return 0;if(e<0)throw new s("number",">= 0",e);return e}t.exports.streamReturningOperators={asIndexedPairs:function(e=void 0){return null!=e&&h(e,"options"),null!=e?.signal&&l(e.signal,"options.signal"),async function*(){let t=0;for await(let n of this){var r;if(null!=e&&null!==(r=e.signal)&&void 0!==r&&r.aborted)throw new a({cause:e.signal.reason});yield[t++,n]}}.call(this)},drop:function(e,t=void 0){return null!=t&&h(t,"options"),null!=t?.signal&&l(t.signal,"options.signal"),e=P(e),async function*(){var r;if(null!=t&&null!==(r=t.signal)&&void 0!==r&&r.aborted)throw new a;for await(let r of this){var n;if(null!=t&&null!==(n=t.signal)&&void 0!==n&&n.aborted)throw new a;e--<=0&&(yield r)}}.call(this)},filter:C,flatMap:function(e,t){let r=R.call(this,e,t);return async function*(){for await(let e of r)yield*e}.call(this)},map:R,take:function(e,t=void 0){return null!=t&&h(t,"options"),null!=t?.signal&&l(t.signal,"options.signal"),e=P(e),async function*(){var r;if(null!=t&&null!==(r=t.signal)&&void 0!==r&&r.aborted)throw new a;for await(let r of this){var n;if(null!=t&&null!==(n=t.signal)&&void 0!==n&&n.aborted)throw new a;if(!(e-- >0))return;yield r}}.call(this)},compose:function(e,t){if(null!=t&&h(t,"options"),null!=t?.signal&&l(t.signal,"options.signal"),y(e)&&!g(e))throw new n("stream",e,"must be writable");let r=p(this,e);return null!=t&&t.signal&&d(t.signal,r),r}},t.exports.promiseReturningOperators={every:async function(e,t=void 0){if("function"!=typeof e)throw new i("fn",["Function","AsyncFunction"],e);return!await O.call(this,(async(...t)=>!await e(...t)),t)},forEach:async function(e,t){if("function"!=typeof e)throw new i("fn",["Function","AsyncFunction"],e);for await(let r of R.call(this,(async function(t,r){return await e(t,r),I}),t));},reduce:async function(e,t,n){var o;if("function"!=typeof e)throw new i("reducer",["Function","AsyncFunction"],e);null!=n&&h(n,"options"),null!=n?.signal&&l(n.signal,"options.signal");let s=arguments.length>1;if(null!=n&&null!==(o=n.signal)&&void 0!==o&&o.aborted){let e=new a(void 0,{cause:n.signal.reason});throw this.once("error",(()=>{})),await f(this.destroy(e)),e}let u=new r,p=u.signal;if(null!=n&&n.signal){let e={once:!0,[c]:this};n.signal.addEventListener("abort",(()=>u.abort()),e)}let d=!1;try{for await(let r of this){var g;if(d=!0,null!=n&&null!==(g=n.signal)&&void 0!==g&&g.aborted)throw new a;s?t=await e(t,r,{signal:p}):(t=r,s=!0)}if(!d&&!s)throw new k}finally{u.abort()}return t},toArray:async function(e){null!=e&&h(e,"options"),null!=e?.signal&&l(e.signal,"options.signal");let t=[];for await(let n of this){var r;if(null!=e&&null!==(r=e.signal)&&void 0!==r&&r.aborted)throw new a(void 0,{cause:e.signal.reason});m(t,n)}return t},some:O,find:async function(e,t){for await(let r of C.call(this,e,t))return r}}})),to=Ge(((e,t)=>{$r(),Cr(),Xe();var{ArrayPrototypePop:r,Promise:n}=Hr(),{isIterable:i,isNodeStream:o,isWebStream:s}=Jr(),{pipelineImpl:a}=Xi(),{finished:l}=Xr();ro(),t.exports={finished:l,pipeline:function(...e){return new n(((t,n)=>{let l,u,h=e[e.length-1];if(h&&"object"==typeof h&&!o(h)&&!i(h)&&!s(h)){let t=r(e);l=t.signal,u=t.end}a(e,((e,r)=>{e?n(e):t(r)}),{signal:l,end:u})}))}}})),ro=Ge(((e,t)=>{$r(),Cr(),Xe();var{Buffer:r}=(qr(),Je(kr)),{ObjectDefineProperty:n,ObjectKeys:i,ReflectApply:o}=Hr(),{promisify:{custom:s}}=zr(),{streamReturningOperators:a,promiseReturningOperators:l}=eo(),{codes:{ERR_ILLEGAL_CONSTRUCTOR:u}}=Kr(),h=Zi(),{pipeline:c}=Xi(),{destroyer:f}=Zr(),p=Xr(),d=to(),g=Jr(),y=t.exports=Tn().Stream;y.isDisturbed=g.isDisturbed,y.isErrored=g.isErrored,y.isReadable=g.isReadable,y.Readable=zi();for(let e of i(a)){let t=function(...e){if(new.target)throw u();return y.Readable.from(o(r,this,e))},r=a[e];n(t,"name",{__proto__:null,value:r.name}),n(t,"length",{__proto__:null,value:r.length}),n(y.Readable.prototype,e,{__proto__:null,value:t,enumerable:!1,configurable:!0,writable:!0})}for(let e of i(l)){let t=function(...e){if(new.target)throw u();return o(r,this,e)},r=l[e];n(t,"name",{__proto__:null,value:r.name}),n(t,"length",{__proto__:null,value:r.length}),n(y.Readable.prototype,e,{__proto__:null,value:t,enumerable:!1,configurable:!0,writable:!0})}y.Writable=Yi(),y.Duplex=Gi(),y.Transform=Qi(),y.PassThrough=Ji(),y.pipeline=c;var{addAbortSignal:m}=Rn();y.addAbortSignal=m,y.finished=p,y.destroy=f,y.compose=h,n(y,"promises",{__proto__:null,configurable:!0,enumerable:!0,get:()=>d}),n(c,s,{__proto__:null,enumerable:!0,get:()=>d.pipeline}),n(p,s,{__proto__:null,enumerable:!0,get:()=>d.finished}),y.Stream=y,y._isUint8Array=function(e){return e instanceof Uint8Array},y._uint8ArrayToBuffer=function(e){return r.from(e.buffer,e.byteOffset,e.byteLength)}})),no=Ge(((e,t)=>{$r(),Cr(),Xe();var r=ro(),n=to(),i=r.Readable.destroy;t.exports=r.Readable,t.exports._uint8ArrayToBuffer=r._uint8ArrayToBuffer,t.exports._isUint8Array=r._isUint8Array,t.exports.isDisturbed=r.isDisturbed,t.exports.isErrored=r.isErrored,t.exports.isReadable=r.isReadable,t.exports.Readable=r.Readable,t.exports.Writable=r.Writable,t.exports.Duplex=r.Duplex,t.exports.Transform=r.Transform,t.exports.PassThrough=r.PassThrough,t.exports.addAbortSignal=r.addAbortSignal,t.exports.finished=r.finished,t.exports.destroy=r.destroy,t.exports.destroy=i,t.exports.pipeline=r.pipeline,t.exports.compose=r.compose,Object.defineProperty(r,"promises",{configurable:!0,enumerable:!0,get:()=>n}),t.exports.Stream=r.Stream,t.exports.default=t.exports})),io=Ge(((e,t)=>{$r(),Cr(),Xe(),"function"==typeof Object.create?t.exports=function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:t.exports=function(e,t){if(t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}}})),oo=Ge(((e,t)=>{$r(),Cr(),Xe();var{Buffer:r}=(qr(),Je(kr)),n=Symbol.for("BufferList");function i(e){if(!(this instanceof i))return new i(e);i._init.call(this,e)}i._init=function(e){Object.defineProperty(this,n,{value:!0}),this._bufs=[],this.length=0,e&&this.append(e)},i.prototype._new=function(e){return new i(e)},i.prototype._offset=function(e){if(0===e)return[0,0];let t=0;for(let r=0;rthis.length||e<0)return;let t=this._offset(e);return this._bufs[t[0]][t[1]]},i.prototype.slice=function(e,t){return"number"==typeof e&&e<0&&(e+=this.length),"number"==typeof t&&t<0&&(t+=this.length),this.copy(null,0,e,t)},i.prototype.copy=function(e,t,n,i){if(("number"!=typeof n||n<0)&&(n=0),("number"!=typeof i||i>this.length)&&(i=this.length),n>=this.length||i<=0)return e||r.alloc(0);let o=!!e,s=this._offset(n),a=i-n,l=a,u=o&&t||0,h=s[1];if(0===n&&i===this.length){if(!o)return 1===this._bufs.length?this._bufs[0]:r.concat(this._bufs,this.length);for(let t=0;tr)){this._bufs[t].copy(e,u,h,h+l),u+=r;break}this._bufs[t].copy(e,u,h),u+=r,l-=r,h&&(h=0)}return e.length>u?e.slice(0,u):e},i.prototype.shallowSlice=function(e,t){if(e=e||0,t="number"!=typeof t?this.length:t,e<0&&(e+=this.length),t<0&&(t+=this.length),e===t)return this._new();let r=this._offset(e),n=this._offset(t),i=this._bufs.slice(r[0],n[0]+1);return 0===n[1]?i.pop():i[i.length-1]=i[i.length-1].slice(0,n[1]),0!==r[1]&&(i[0]=i[0].slice(r[1])),this._new(i)},i.prototype.toString=function(e,t,r){return this.slice(t,r).toString(e)},i.prototype.consume=function(e){if(e=Math.trunc(e),Number.isNaN(e)||e<=0)return this;for(;this._bufs.length;){if(!(e>=this._bufs[0].length)){this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift()}return this},i.prototype.duplicate=function(){let e=this._new();for(let t=0;tthis.length?this.length:t;let i=this._offset(t),o=i[0],s=i[1];for(;o=e.length){let r=t.indexOf(e,s);if(-1!==r)return this._reverseOffset([o,r]);s=t.length-e.length+1}else{let t=this._reverseOffset([o,s]);if(this._match(t,e))return t;s++}s=0}return-1},i.prototype._match=function(e,t){if(this.length-e{$r(),Cr(),Xe();var r=no().Duplex,n=io(),i=oo();function o(e){if(!(this instanceof o))return new o(e);if("function"==typeof e){this._callback=e;let t=function(e){this._callback&&(this._callback(e),this._callback=null)}.bind(this);this.on("pipe",(function(e){e.on("error",t)})),this.on("unpipe",(function(e){e.removeListener("error",t)})),e=null}i._init.call(this,e),r.call(this)}n(o,r),Object.assign(o.prototype,i.prototype),o.prototype._new=function(e){return new o(e)},o.prototype._write=function(e,t,r){this._appendBuffer(e),"function"==typeof r&&r()},o.prototype._read=function(e){if(!this.length)return this.push(null);e=Math.min(e,this.length),this.push(this.slice(0,e)),this.consume(e)},o.prototype.end=function(e){r.prototype.end.call(this,e),this._callback&&(this._callback(null,this.slice()),this._callback=null)},o.prototype._destroy=function(e,t){this._bufs.length=0,this.length=0,t(e)},o.prototype._isBufferList=function(e){return e instanceof o||e instanceof i||o.isBufferList(e)},o.isBufferList=i.isBufferList,t.exports=o,t.exports.BufferListStream=o,t.exports.BufferList=i})),ao=Ge(((e,t)=>{$r(),Cr(),Xe(),t.exports=class{constructor(){this.cmd=null,this.retain=!1,this.qos=0,this.dup=!1,this.length=-1,this.topic=null,this.payload=null}}})),lo=Ge(((e,t)=>{$r(),Cr(),Xe();var r=t.exports,{Buffer:n}=(qr(),Je(kr));r.types={0:"reserved",1:"connect",2:"connack",3:"publish",4:"puback",5:"pubrec",6:"pubrel",7:"pubcomp",8:"subscribe",9:"suback",10:"unsubscribe",11:"unsuback",12:"pingreq",13:"pingresp",14:"disconnect",15:"auth"},r.requiredHeaderFlags={1:0,2:0,4:0,5:0,6:2,7:0,8:2,9:0,10:2,11:0,12:0,13:0,14:0,15:0},r.requiredHeaderFlagsErrors={};for(let e in r.requiredHeaderFlags){let t=r.requiredHeaderFlags[e];r.requiredHeaderFlagsErrors[e]="Invalid header flag bits, must be 0x"+t.toString(16)+" for "+r.types[e]+" packet"}r.codes={};for(let e in r.types){let t=r.types[e];r.codes[t]=e}r.CMD_SHIFT=4,r.CMD_MASK=240,r.DUP_MASK=8,r.QOS_MASK=3,r.QOS_SHIFT=1,r.RETAIN_MASK=1,r.VARBYTEINT_MASK=127,r.VARBYTEINT_FIN_MASK=128,r.VARBYTEINT_MAX=268435455,r.SESSIONPRESENT_MASK=1,r.SESSIONPRESENT_HEADER=n.from([r.SESSIONPRESENT_MASK]),r.CONNACK_HEADER=n.from([r.codes.connack<[0,1].map((i=>[0,1].map((o=>{let s=n.alloc(1);return s.writeUInt8(r.codes[e]<n.from([e]))),r.EMPTY={pingreq:n.from([r.codes.pingreq<<4,0]),pingresp:n.from([r.codes.pingresp<<4,0]),disconnect:n.from([r.codes.disconnect<<4,0])},r.MQTT5_PUBACK_PUBREC_CODES={0:"Success",16:"No matching subscribers",128:"Unspecified error",131:"Implementation specific error",135:"Not authorized",144:"Topic Name invalid",145:"Packet identifier in use",151:"Quota exceeded",153:"Payload format invalid"},r.MQTT5_PUBREL_PUBCOMP_CODES={0:"Success",146:"Packet Identifier not found"},r.MQTT5_SUBACK_CODES={0:"Granted QoS 0",1:"Granted QoS 1",2:"Granted QoS 2",128:"Unspecified error",131:"Implementation specific error",135:"Not authorized",143:"Topic Filter invalid",145:"Packet Identifier in use",151:"Quota exceeded",158:"Shared Subscriptions not supported",161:"Subscription Identifiers not supported",162:"Wildcard Subscriptions not supported"},r.MQTT5_UNSUBACK_CODES={0:"Success",17:"No subscription existed",128:"Unspecified error",131:"Implementation specific error",135:"Not authorized",143:"Topic Filter invalid",145:"Packet Identifier in use"},r.MQTT5_DISCONNECT_CODES={0:"Normal disconnection",4:"Disconnect with Will Message",128:"Unspecified error",129:"Malformed Packet",130:"Protocol Error",131:"Implementation specific error",135:"Not authorized",137:"Server busy",139:"Server shutting down",141:"Keep Alive timeout",142:"Session taken over",143:"Topic Filter invalid",144:"Topic Name invalid",147:"Receive Maximum exceeded",148:"Topic Alias invalid",149:"Packet too large",150:"Message rate too high",151:"Quota exceeded",152:"Administrative action",153:"Payload format invalid",154:"Retain not supported",155:"QoS not supported",156:"Use another server",157:"Server moved",158:"Shared Subscriptions not supported",159:"Connection rate exceeded",160:"Maximum connect time",161:"Subscription Identifiers not supported",162:"Wildcard Subscriptions not supported"},r.MQTT5_AUTH_CODES={0:"Success",24:"Continue authentication",25:"Re-authenticate"}})),uo=Ge(((e,t)=>{$r(),Cr(),Xe();var r=1e3,n=6e4,i=60*n,o=24*i,s=7*o;function a(e,t,r,n){var i=t>=1.5*r;return Math.round(e/r)+" "+n+(i?"s":"")}t.exports=function(e,t){t=t||{};var l=typeof e;if("string"===l&&e.length>0)return function(e){if(!((e=String(e)).length>100)){var t=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(t){var a=parseFloat(t[1]);switch((t[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return 315576e5*a;case"weeks":case"week":case"w":return a*s;case"days":case"day":case"d":return a*o;case"hours":case"hour":case"hrs":case"hr":case"h":return a*i;case"minutes":case"minute":case"mins":case"min":case"m":return a*n;case"seconds":case"second":case"secs":case"sec":case"s":return a*r;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return a;default:return}}}}(e);if("number"===l&&isFinite(e))return t.long?function(e){var t=Math.abs(e);return t>=o?a(e,t,o,"day"):t>=i?a(e,t,i,"hour"):t>=n?a(e,t,n,"minute"):t>=r?a(e,t,r,"second"):e+" ms"}(e):function(e){var t=Math.abs(e);return t>=o?Math.round(e/o)+"d":t>=i?Math.round(e/i)+"h":t>=n?Math.round(e/n)+"m":t>=r?Math.round(e/r)+"s":e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}})),ho=Ge(((e,t)=>{$r(),Cr(),Xe(),t.exports=function(e){function t(e){let n,i,o,s=null;function a(...e){if(!a.enabled)return;let r=a,i=Number(new Date),o=i-(n||i);r.diff=o,r.prev=n,r.curr=i,n=i,e[0]=t.coerce(e[0]),"string"!=typeof e[0]&&e.unshift("%O");let s=0;e[0]=e[0].replace(/%([a-zA-Z%])/g,((n,i)=>{if("%%"===n)return"%";s++;let o=t.formatters[i];if("function"==typeof o){let t=e[s];n=o.call(r,t),e.splice(s,1),s--}return n})),t.formatArgs.call(r,e),(r.log||t.log).apply(r,e)}return a.namespace=e,a.useColors=t.useColors(),a.color=t.selectColor(e),a.extend=r,a.destroy=t.destroy,Object.defineProperty(a,"enabled",{enumerable:!0,configurable:!1,get:()=>null!==s?s:(i!==t.namespaces&&(i=t.namespaces,o=t.enabled(e)),o),set:e=>{s=e}}),"function"==typeof t.init&&t.init(a),a}function r(e,r){let n=t(this.namespace+(typeof r>"u"?":":r)+e);return n.log=this.log,n}function n(e){return e.toString().substring(2,e.toString().length-2).replace(/\.\*\?$/,"*")}return t.debug=t,t.default=t,t.coerce=function(e){return e instanceof Error?e.stack||e.message:e},t.disable=function(){let e=[...t.names.map(n),...t.skips.map(n).map((e=>"-"+e))].join(",");return t.enable(""),e},t.enable=function(e){t.save(e),t.namespaces=e,t.names=[],t.skips=[];let r,n=("string"==typeof e?e:"").split(/[\s,]+/),i=n.length;for(r=0;r{t[r]=e[r]})),t.names=[],t.skips=[],t.formatters={},t.selectColor=function(e){let r=0;for(let t=0;t{$r(),Cr(),Xe(),e.formatArgs=function(e){if(e[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+e[0]+(this.useColors?"%c ":" ")+"+"+t.exports.humanize(this.diff),!this.useColors)return;let r="color: "+this.color;e.splice(1,0,r,"color: inherit");let n=0,i=0;e[0].replace(/%[a-zA-Z%]/g,(e=>{"%%"!==e&&(n++,"%c"===e&&(i=n))})),e.splice(i,0,r)},e.save=function(t){try{t?e.storage.setItem("debug",t):e.storage.removeItem("debug")}catch{}},e.load=function(){let t;try{t=e.storage.getItem("debug")}catch{}return!t&&typeof Ze<"u"&&"env"in Ze&&(t=Ze.env.DEBUG),t},e.useColors=function(){return!(!(typeof window<"u"&&window.process)||"renderer"!==window.process.type&&!window.process.__nwjs)||!(typeof $e<"u"&&$e.userAgent&&$e.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))&&(typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof $e<"u"&&$e.userAgent&&$e.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof $e<"u"&&$e.userAgent&&$e.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))},e.storage=function(){try{return localStorage}catch{}}(),e.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),e.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],e.log=console.debug||console.log||(()=>{}),t.exports=ho()(e);var{formatters:r}=t.exports;r.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}})),fo=Ge(((e,t)=>{$r(),Cr(),Xe();var r=so(),{EventEmitter:n}=(In(),Je(bn)),i=ao(),o=lo(),s=co()("mqtt-packet:parser");t.exports=class e extends n{constructor(){super(),this.parser=this.constructor.parser}static parser(t){return this instanceof e?(this.settings=t||{},this._states=["_parseHeader","_parseLength","_parsePayload","_newPacket"],this._resetState(),this):(new e).parser(t)}_resetState(){s("_resetState: resetting packet, error, _list, and _stateCounter"),this.packet=new i,this.error=null,this._list=r(),this._stateCounter=0}parse(e){for(this.error&&this._resetState(),this._list.append(e),s("parse: current state: %s",this._states[this._stateCounter]);(-1!==this.packet.length||this._list.length>0)&&this[this._states[this._stateCounter]]()&&!this.error;)this._stateCounter++,s("parse: state complete. _stateCounter is now: %d",this._stateCounter),s("parse: packet.length: %d, buffer list length: %d",this.packet.length,this._list.length),this._stateCounter>=this._states.length&&(this._stateCounter=0);return s("parse: exited while loop. packet: %d, buffer list length: %d",this.packet.length,this._list.length),this._list.length}_parseHeader(){let e=this._list.readUInt8(0),t=e>>o.CMD_SHIFT;this.packet.cmd=o.types[t];let r=15&e,n=o.requiredHeaderFlags[t];return null!=n&&r!==n?this._emitError(new Error(o.requiredHeaderFlagsErrors[t])):(this.packet.retain=!!(e&o.RETAIN_MASK),this.packet.qos=e>>o.QOS_SHIFT&o.QOS_MASK,this.packet.qos>2?this._emitError(new Error("Packet must not have both QoS bits set to 1")):(this.packet.dup=!!(e&o.DUP_MASK),s("_parseHeader: packet: %o",this.packet),this._list.consume(1),!0))}_parseLength(){let e=this._parseVarByteNum(!0);return e&&(this.packet.length=e.value,this._list.consume(e.bytes)),s("_parseLength %d",e.value),!!e}_parsePayload(){s("_parsePayload: payload %O",this._list);let e=!1;if(0===this.packet.length||this._list.length>=this.packet.length){switch(this._pos=0,this.packet.cmd){case"connect":this._parseConnect();break;case"connack":this._parseConnack();break;case"publish":this._parsePublish();break;case"puback":case"pubrec":case"pubrel":case"pubcomp":this._parseConfirmation();break;case"subscribe":this._parseSubscribe();break;case"suback":this._parseSuback();break;case"unsubscribe":this._parseUnsubscribe();break;case"unsuback":this._parseUnsuback();break;case"pingreq":case"pingresp":break;case"disconnect":this._parseDisconnect();break;case"auth":this._parseAuth();break;default:this._emitError(new Error("Not supported"))}e=!0}return s("_parsePayload complete result: %s",e),e}_parseConnect(){s("_parseConnect");let e,t,r,n,i={},a=this.packet,l=this._parseString();if(null===l)return this._emitError(new Error("Cannot parse protocolId"));if("MQTT"!==l&&"MQIsdp"!==l)return this._emitError(new Error("Invalid protocolId"));if(a.protocolId=l,this._pos>=this._list.length)return this._emitError(new Error("Packet too short"));if(a.protocolVersion=this._list.readUInt8(this._pos),a.protocolVersion>=128&&(a.bridgeMode=!0,a.protocolVersion=a.protocolVersion-128),3!==a.protocolVersion&&4!==a.protocolVersion&&5!==a.protocolVersion)return this._emitError(new Error("Invalid protocol version"));if(this._pos++,this._pos>=this._list.length)return this._emitError(new Error("Packet too short"));if(1&this._list.readUInt8(this._pos))return this._emitError(new Error("Connect flag bit 0 must be 0, but got 1"));i.username=this._list.readUInt8(this._pos)&o.USERNAME_MASK,i.password=this._list.readUInt8(this._pos)&o.PASSWORD_MASK,i.will=this._list.readUInt8(this._pos)&o.WILL_FLAG_MASK;let u=!!(this._list.readUInt8(this._pos)&o.WILL_RETAIN_MASK),h=(this._list.readUInt8(this._pos)&o.WILL_QOS_MASK)>>o.WILL_QOS_SHIFT;if(i.will)a.will={},a.will.retain=u,a.will.qos=h;else{if(u)return this._emitError(new Error("Will Retain Flag must be set to zero when Will Flag is set to 0"));if(h)return this._emitError(new Error("Will QoS must be set to zero when Will Flag is set to 0"))}if(a.clean=!!(this._list.readUInt8(this._pos)&o.CLEAN_SESSION_MASK),this._pos++,a.keepalive=this._parseNum(),-1===a.keepalive)return this._emitError(new Error("Packet too short"));if(5===a.protocolVersion){let e=this._parseProperties();Object.getOwnPropertyNames(e).length&&(a.properties=e)}let c=this._parseString();if(null===c)return this._emitError(new Error("Packet too short"));if(a.clientId=c,s("_parseConnect: packet.clientId: %s",a.clientId),i.will){if(5===a.protocolVersion){let e=this._parseProperties();Object.getOwnPropertyNames(e).length&&(a.will.properties=e)}if(e=this._parseString(),null===e)return this._emitError(new Error("Cannot parse will topic"));if(a.will.topic=e,s("_parseConnect: packet.will.topic: %s",a.will.topic),t=this._parseBuffer(),null===t)return this._emitError(new Error("Cannot parse will payload"));a.will.payload=t,s("_parseConnect: packet.will.paylaod: %s",a.will.payload)}if(i.username){if(n=this._parseString(),null===n)return this._emitError(new Error("Cannot parse username"));a.username=n,s("_parseConnect: packet.username: %s",a.username)}if(i.password){if(r=this._parseBuffer(),null===r)return this._emitError(new Error("Cannot parse password"));a.password=r}return this.settings=a,s("_parseConnect: complete"),a}_parseConnack(){s("_parseConnack");let e=this.packet;if(this._list.length<1)return null;let t=this._list.readUInt8(this._pos++);if(t>1)return this._emitError(new Error("Invalid connack flags, bits 7-1 must be set to 0"));if(e.sessionPresent=!!(t&o.SESSIONPRESENT_MASK),5===this.settings.protocolVersion)this._list.length>=2?e.reasonCode=this._list.readUInt8(this._pos++):e.reasonCode=0;else{if(this._list.length<2)return null;e.returnCode=this._list.readUInt8(this._pos++)}if(-1===e.returnCode||-1===e.reasonCode)return this._emitError(new Error("Cannot parse return code"));if(5===this.settings.protocolVersion){let t=this._parseProperties();Object.getOwnPropertyNames(t).length&&(e.properties=t)}s("_parseConnack: complete")}_parsePublish(){s("_parsePublish");let e=this.packet;if(e.topic=this._parseString(),null===e.topic)return this._emitError(new Error("Cannot parse topic"));if(!(e.qos>0)||this._parseMessageId()){if(5===this.settings.protocolVersion){let t=this._parseProperties();Object.getOwnPropertyNames(t).length&&(e.properties=t)}e.payload=this._list.slice(this._pos,e.length),s("_parsePublish: payload from buffer list: %o",e.payload)}}_parseSubscribe(){s("_parseSubscribe");let e,t,r,n,i,a,l,u=this.packet;if(u.subscriptions=[],this._parseMessageId()){if(5===this.settings.protocolVersion){let e=this._parseProperties();Object.getOwnPropertyNames(e).length&&(u.properties=e)}if(u.length<=0)return this._emitError(new Error("Malformed subscribe, no payload specified"));for(;this._pos=u.length)return this._emitError(new Error("Malformed Subscribe Payload"));if(t=this._parseByte(),5===this.settings.protocolVersion){if(192&t)return this._emitError(new Error("Invalid subscribe topic flag bits, bits 7-6 must be 0"))}else if(252&t)return this._emitError(new Error("Invalid subscribe topic flag bits, bits 7-2 must be 0"));if(r=t&o.SUBSCRIBE_OPTIONS_QOS_MASK,r>2)return this._emitError(new Error("Invalid subscribe QoS, must be <= 2"));if(a=!!(t>>o.SUBSCRIBE_OPTIONS_NL_SHIFT&o.SUBSCRIBE_OPTIONS_NL_MASK),i=!!(t>>o.SUBSCRIBE_OPTIONS_RAP_SHIFT&o.SUBSCRIBE_OPTIONS_RAP_MASK),n=t>>o.SUBSCRIBE_OPTIONS_RH_SHIFT&o.SUBSCRIBE_OPTIONS_RH_MASK,n>2)return this._emitError(new Error("Invalid retain handling, must be <= 2"));l={topic:e,qos:r},5===this.settings.protocolVersion?(l.nl=a,l.rap=i,l.rh=n):this.settings.bridgeMode&&(l.rh=0,l.rap=!0,l.nl=!0),s("_parseSubscribe: push subscription `%s` to subscription",l),u.subscriptions.push(l)}}}_parseSuback(){s("_parseSuback");let e=this.packet;if(this.packet.granted=[],this._parseMessageId()){if(5===this.settings.protocolVersion){let t=this._parseProperties();Object.getOwnPropertyNames(t).length&&(e.properties=t)}if(e.length<=0)return this._emitError(new Error("Malformed suback, no payload specified"));for(;this._pos2&&128!==e)return this._emitError(new Error("Invalid suback QoS, must be 0, 1, 2 or 128"));this.packet.granted.push(e)}}}_parseUnsubscribe(){s("_parseUnsubscribe");let e=this.packet;if(e.unsubscriptions=[],this._parseMessageId()){if(5===this.settings.protocolVersion){let t=this._parseProperties();Object.getOwnPropertyNames(t).length&&(e.properties=t)}if(e.length<=0)return this._emitError(new Error("Malformed unsubscribe, no payload specified"));for(;this._pos2){switch(e.reasonCode=this._parseByte(),this.packet.cmd){case"puback":case"pubrec":if(!o.MQTT5_PUBACK_PUBREC_CODES[e.reasonCode])return this._emitError(new Error("Invalid "+this.packet.cmd+" reason code"));break;case"pubrel":case"pubcomp":if(!o.MQTT5_PUBREL_PUBCOMP_CODES[e.reasonCode])return this._emitError(new Error("Invalid "+this.packet.cmd+" reason code"))}s("_parseConfirmation: packet.reasonCode `%d`",e.reasonCode)}else e.reasonCode=0;if(e.length>3){let t=this._parseProperties();Object.getOwnPropertyNames(t).length&&(e.properties=t)}}return!0}_parseDisconnect(){let e=this.packet;if(s("_parseDisconnect"),5===this.settings.protocolVersion){this._list.length>0?(e.reasonCode=this._parseByte(),o.MQTT5_DISCONNECT_CODES[e.reasonCode]||this._emitError(new Error("Invalid disconnect reason code"))):e.reasonCode=0;let t=this._parseProperties();Object.getOwnPropertyNames(t).length&&(e.properties=t)}return s("_parseDisconnect result: true"),!0}_parseAuth(){s("_parseAuth");let e=this.packet;if(5!==this.settings.protocolVersion)return this._emitError(new Error("Not supported auth packet for this version MQTT"));if(e.reasonCode=this._parseByte(),!o.MQTT5_AUTH_CODES[e.reasonCode])return this._emitError(new Error("Invalid auth reason code"));let t=this._parseProperties();return Object.getOwnPropertyNames(t).length&&(e.properties=t),s("_parseAuth: result: true"),!0}_parseMessageId(){let e=this.packet;return e.messageId=this._parseNum(),null===e.messageId?(this._emitError(new Error("Cannot parse messageId")),!1):(s("_parseMessageId: packet.messageId %d",e.messageId),!0)}_parseString(e){let t=this._parseNum(),r=t+this._pos;if(-1===t||r>this._list.length||r>this.packet.length)return null;let n=this._list.toString("utf8",this._pos,r);return this._pos+=t,s("_parseString: result: %s",n),n}_parseStringPair(){return s("_parseStringPair"),{name:this._parseString(),value:this._parseString()}}_parseBuffer(){let e=this._parseNum(),t=e+this._pos;if(-1===e||t>this._list.length||t>this.packet.length)return null;let r=this._list.slice(this._pos,t);return this._pos+=e,s("_parseBuffer: result: %o",r),r}_parseNum(){if(this._list.length-this._pos<2)return-1;let e=this._list.readUInt16BE(this._pos);return this._pos+=2,s("_parseNum: result: %s",e),e}_parse4ByteNum(){if(this._list.length-this._pos<4)return-1;let e=this._list.readUInt32BE(this._pos);return this._pos+=4,s("_parse4ByteNum: result: %s",e),e}_parseVarByteNum(e){s("_parseVarByteNum");let t,r=0,n=1,i=0,a=!1,l=this._pos?this._pos:0;for(;r<4&&l+r=r&&this._emitError(new Error("Invalid variable byte integer")),l&&(this._pos+=r),a=!!a&&(e?{bytes:r,value:i}:i),s("_parseVarByteNum: result: %o",a),a}_parseByte(){let e;return this._pos{$r(),Cr(),Xe();var{Buffer:r}=(qr(),Je(kr)),n={},i=r.isBuffer(r.from([1,2]).subarray(0,1));function o(e){let t=r.allocUnsafe(2);return t.writeUInt8(e>>8,0),t.writeUInt8(255&e,1),t}t.exports={cache:n,generateCache:function(){for(let e=0;e<65536;e++)n[e]=o(e)},generateNumber:o,genBufVariableByteInt:function(e){let t=0,n=0,o=r.allocUnsafe(4);do{t=e%128|0,(e=e/128|0)>0&&(t|=128),o.writeUInt8(t,n++)}while(e>0&&n<4);return e>0&&(n=0),i?o.subarray(0,n):o.slice(0,n)},generate4ByteBuffer:function(e){let t=r.allocUnsafe(4);return t.writeUInt32BE(e,0),t}}})),go=Ge(((e,t)=>{$r(),Cr(),Xe(),typeof Ze>"u"||!Ze.version||0===Ze.version.indexOf("v0.")||0===Ze.version.indexOf("v1.")&&0!==Ze.version.indexOf("v1.8.")?t.exports={nextTick:function(e,t,r,n){if("function"!=typeof e)throw new TypeError('"callback" argument must be a function');var i,o,s=arguments.length;switch(s){case 0:case 1:return Ze.nextTick(e);case 2:return Ze.nextTick((function(){e.call(null,t)}));case 3:return Ze.nextTick((function(){e.call(null,t,r)}));case 4:return Ze.nextTick((function(){e.call(null,t,r,n)}));default:for(i=new Array(s-1),o=0;o{$r(),Cr(),Xe();var r=lo(),{Buffer:n}=(qr(),Je(kr)),i=n.allocUnsafe(0),o=n.from([0]),s=po(),a=go().nextTick,l=co()("mqtt-packet:writeToStream"),u=s.cache,h=s.generateNumber,c=s.generateCache,f=s.genBufVariableByteInt,p=s.generate4ByteBuffer,d=E,g=!0;function y(e,t,s){switch(l("generate called"),t.cork&&(t.cork(),a(m,t)),g&&(g=!1,c()),l("generate: packet.cmd: %s",e.cmd),e.cmd){case"connect":return function(e,t){let i=e||{},o=i.protocolId||"MQTT",s=i.protocolVersion||4,a=i.will,l=i.clean,u=i.keepalive||0,h=i.clientId||"",c=i.username,f=i.password,p=i.properties;void 0===l&&(l=!0);let g,y,m=0;if(!o||"string"!=typeof o&&!n.isBuffer(o))return t.destroy(new Error("Invalid protocolId")),!1;if(m+=o.length+2,3!==s&&4!==s&&5!==s)return t.destroy(new Error("Invalid protocol version")),!1;if(m+=1,("string"==typeof h||n.isBuffer(h))&&(h||s>=4)&&(h||l))m+=n.byteLength(h)+2;else{if(s<4)return t.destroy(new Error("clientId must be supplied before 3.1.1")),!1;if(1*l==0)return t.destroy(new Error("clientId must be given if cleanSession set to 0")),!1}if("number"!=typeof u||u<0||u>65535||u%1!=0)return t.destroy(new Error("Invalid keepalive")),!1;if(m+=2,m+=1,5===s){if(g=I(t,p),!g)return!1;m+=g.length}if(a){if("object"!=typeof a)return t.destroy(new Error("Invalid will")),!1;if(!a.topic||"string"!=typeof a.topic)return t.destroy(new Error("Invalid will topic")),!1;if(m+=n.byteLength(a.topic)+2,m+=2,a.payload){if(!(a.payload.length>=0))return t.destroy(new Error("Invalid will payload")),!1;"string"==typeof a.payload?m+=n.byteLength(a.payload):m+=a.payload.length}if(y={},5===s){if(y=I(t,a.properties),!y)return!1;m+=y.length}}let b=!1;if(null!=c){if(!k(c))return t.destroy(new Error("Invalid username")),!1;b=!0,m+=n.byteLength(c)+2}if(null!=f){if(!b)return t.destroy(new Error("Username is required to use password")),!1;if(!k(f))return t.destroy(new Error("Invalid password")),!1;m+=C(f)+2}t.write(r.CONNECT_HEADER),w(t,m),A(t,o),i.bridgeMode&&(s+=128),t.write(131===s?r.VERSION131:132===s?r.VERSION132:4===s?r.VERSION4:5===s?r.VERSION5:r.VERSION3);let v=0;return v|=null!=c?r.USERNAME_MASK:0,v|=null!=f?r.PASSWORD_MASK:0,v|=a&&a.retain?r.WILL_RETAIN_MASK:0,v|=a&&a.qos?a.qos<0&&d(t,p),m?.write(),l("publish: payload: %o",f),t.write(f)}(e,t,s);case"puback":case"pubrec":case"pubrel":case"pubcomp":return function(e,t,i){let o=i?i.protocolVersion:4,s=e||{},a=s.cmd||"puback",l=s.messageId,u=s.dup&&"pubrel"===a?r.DUP_MASK:0,h=0,c=s.reasonCode,f=s.properties,p=5===o?3:2;if("pubrel"===a&&(h=1),"number"!=typeof l)return t.destroy(new Error("Invalid messageId")),!1;let g=null;if(5===o&&"object"==typeof f){if(g=T(t,f,i,p),!g)return!1;p+=g.length}return t.write(r.ACKS[a][h][u][0]),3===p&&(p+=0!==c?1:-1),w(t,p),d(t,l),5===o&&2!==p&&t.write(n.from([c])),null!==g?g.write():4===p&&t.write(n.from([0])),!0}(e,t,s);case"subscribe":return function(e,t,i){l("subscribe: packet: ");let o=i?i.protocolVersion:4,s=e||{},a=s.dup?r.DUP_MASK:0,u=s.messageId,h=s.subscriptions,c=s.properties,f=0;if("number"!=typeof u)return t.destroy(new Error("Invalid messageId")),!1;f+=2;let p=null;if(5===o){if(p=I(t,c),!p)return!1;f+=p.length}if("object"!=typeof h||!h.length)return t.destroy(new Error("Invalid subscriptions")),!1;for(let e=0;e2)return t.destroy(new Error("Invalid subscriptions - invalid Retain Handling")),!1}f+=n.byteLength(r)+2+1}l("subscribe: writing to stream: %o",r.SUBSCRIBE_HEADER),t.write(r.SUBSCRIBE_HEADER[1][a?1:0][0]),w(t,f),d(t,u),null!==p&&p.write();let g=!0;for(let e of h){let i,s=e.topic,a=e.qos,l=+e.nl,u=+e.rap,h=e.rh;_(t,s),i=r.SUBSCRIBE_OPTIONS_QOS[a],5===o&&(i|=l?r.SUBSCRIBE_OPTIONS_NL:0,i|=u?r.SUBSCRIBE_OPTIONS_RAP:0,i|=h?r.SUBSCRIBE_OPTIONS_RH[h]:0),g=t.write(n.from([i]))}return g}(e,t,s);case"suback":return function(e,t,i){let o=i?i.protocolVersion:4,s=e||{},a=s.messageId,l=s.granted,u=s.properties,h=0;if("number"!=typeof a)return t.destroy(new Error("Invalid messageId")),!1;if(h+=2,"object"!=typeof l||!l.length)return t.destroy(new Error("Invalid qos vector")),!1;for(let e=0;ed===E,set(e){e?((!u||0===Object.keys(u).length)&&(g=!0),d=E):(g=!1,d=S)}});var b={};function w(e,t){if(t>r.VARBYTEINT_MAX)return e.destroy(new Error(`Invalid variable byte integer: ${t}`)),!1;let n=b[t];return n||(n=f(t),t<16384&&(b[t]=n)),l("writeVarByteInt: writing to stream: %o",n),e.write(n)}function _(e,t){let r=n.byteLength(t);return d(e,r),l("writeString: %s",t),e.write(t,"utf8")}function v(e,t,r){_(e,t),_(e,r)}function E(e,t){return l("writeNumberCached: number: %d",t),l("writeNumberCached: %o",u[t]),e.write(u[t])}function S(e,t){let r=h(t);return l("writeNumberGenerated: %o",r),e.write(r)}function A(e,t){"string"==typeof t?_(e,t):t?(d(e,t.length),e.write(t)):d(e,0)}function I(e,t){if("object"!=typeof t||null!=t.length)return{length:1,write(){O(e,{},0)}};let i=0;function o(t,i){let o=0;switch(r.propertiesTypes[t]){case"byte":if("boolean"!=typeof i)return e.destroy(new Error(`Invalid ${t}: ${i}`)),!1;o+=2;break;case"int8":if("number"!=typeof i||i<0||i>255)return e.destroy(new Error(`Invalid ${t}: ${i}`)),!1;o+=2;break;case"binary":if(i&&null===i)return e.destroy(new Error(`Invalid ${t}: ${i}`)),!1;o+=1+n.byteLength(i)+2;break;case"int16":if("number"!=typeof i||i<0||i>65535)return e.destroy(new Error(`Invalid ${t}: ${i}`)),!1;o+=3;break;case"int32":if("number"!=typeof i||i<0||i>4294967295)return e.destroy(new Error(`Invalid ${t}: ${i}`)),!1;o+=5;break;case"var":if("number"!=typeof i||i<0||i>268435455)return e.destroy(new Error(`Invalid ${t}: ${i}`)),!1;o+=1+n.byteLength(f(i));break;case"string":if("string"!=typeof i)return e.destroy(new Error(`Invalid ${t}: ${i}`)),!1;o+=3+n.byteLength(i.toString());break;case"pair":if("object"!=typeof i)return e.destroy(new Error(`Invalid ${t}: ${i}`)),!1;o+=Object.getOwnPropertyNames(i).reduce(((e,t)=>{let r=i[t];return Array.isArray(r)?e+=r.reduce(((e,r)=>e+(3+n.byteLength(t.toString())+2+n.byteLength(r.toString()))),0):e+=3+n.byteLength(t.toString())+2+n.byteLength(i[t].toString()),e}),0);break;default:return e.destroy(new Error(`Invalid property ${t}: ${i}`)),!1}return o}if(t)for(let e in t){let r=0,n=0,s=t[e];if(Array.isArray(s))for(let t=0;to;){let r=i.shift();if(!r||!t[r])return!1;delete t[r],s=I(e,t)}return s}function R(e,t,i){switch(r.propertiesTypes[t]){case"byte":e.write(n.from([r.properties[t]])),e.write(n.from([+i]));break;case"int8":e.write(n.from([r.properties[t]])),e.write(n.from([i]));break;case"binary":e.write(n.from([r.properties[t]])),A(e,i);break;case"int16":e.write(n.from([r.properties[t]])),d(e,i);break;case"int32":e.write(n.from([r.properties[t]])),function(e,t){let r=p(t);l("write4ByteNumber: %o",r),e.write(r)}(e,i);break;case"var":e.write(n.from([r.properties[t]])),w(e,i);break;case"string":e.write(n.from([r.properties[t]])),_(e,i);break;case"pair":Object.getOwnPropertyNames(i).forEach((o=>{let s=i[o];Array.isArray(s)?s.forEach((i=>{e.write(n.from([r.properties[t]])),v(e,o.toString(),i.toString())})):(e.write(n.from([r.properties[t]])),v(e,o.toString(),s.toString()))}));break;default:return e.destroy(new Error(`Invalid property ${t} value: ${i}`)),!1}}function O(e,t,r){w(e,r);for(let r in t)if(Object.prototype.hasOwnProperty.call(t,r)&&null!==t[r]){let n=t[r];if(Array.isArray(n))for(let t=0;t{$r(),Cr(),Xe();var r=yo(),{EventEmitter:n}=(In(),Je(bn)),{Buffer:i}=(qr(),Je(kr)),o=class extends n{constructor(){super(),this._array=new Array(20),this._i=0}write(e){return this._array[this._i++]=e,!0}concat(){let e,t=0,r=new Array(this._array.length),n=this._array,o=0;for(e=0;e{$r(),Cr(),Xe(),e.parser=fo().parser,e.generate=mo(),e.writeToStream=yo()})),wo=Ge((e=>{$r(),Cr(),Xe(),Object.defineProperty(e,"__esModule",{value:!0}),e.default=class{constructor(){this.nextId=Math.max(1,Math.floor(65535*Math.random()))}allocate(){let e=this.nextId++;return 65536===this.nextId&&(this.nextId=1),e}getLastAllocated(){return 1===this.nextId?65535:this.nextId-1}register(e){return!0}deallocate(e){}clear(){}}})),_o=Ge(((e,t)=>{function r(e){return e instanceof Dr?Dr.from(e):new e.constructor(e.buffer.slice(),e.byteOffset,e.length)}$r(),Cr(),Xe(),t.exports=function(e){return(e=e||{}).circles?function(e){var t=[],n=[];return e.proto?function e(o){if("object"!=typeof o||null===o)return o;if(o instanceof Date)return new Date(o);if(Array.isArray(o))return i(o,e);if(o instanceof Map)return new Map(i(Array.from(o),e));if(o instanceof Set)return new Set(i(Array.from(o),e));var s={};for(var a in t.push(o),n.push(s),o){var l=o[a];if("object"!=typeof l||null===l)s[a]=l;else if(l instanceof Date)s[a]=new Date(l);else if(l instanceof Map)s[a]=new Map(i(Array.from(l),e));else if(l instanceof Set)s[a]=new Set(i(Array.from(l),e));else if(ArrayBuffer.isView(l))s[a]=r(l);else{var u=t.indexOf(l);s[a]=-1!==u?n[u]:e(l)}}return t.pop(),n.pop(),s}:function e(o){if("object"!=typeof o||null===o)return o;if(o instanceof Date)return new Date(o);if(Array.isArray(o))return i(o,e);if(o instanceof Map)return new Map(i(Array.from(o),e));if(o instanceof Set)return new Set(i(Array.from(o),e));var s={};for(var a in t.push(o),n.push(s),o)if(!1!==Object.hasOwnProperty.call(o,a)){var l=o[a];if("object"!=typeof l||null===l)s[a]=l;else if(l instanceof Date)s[a]=new Date(l);else if(l instanceof Map)s[a]=new Map(i(Array.from(l),e));else if(l instanceof Set)s[a]=new Set(i(Array.from(l),e));else if(ArrayBuffer.isView(l))s[a]=r(l);else{var u=t.indexOf(l);s[a]=-1!==u?n[u]:e(l)}}return t.pop(),n.pop(),s};function i(e,i){for(var o=Object.keys(e),s=new Array(o.length),a=0;a{$r(),Cr(),Xe(),t.exports=_o()()})),Eo=Ge((e=>{function t(e){let t=e.split("/");for(let e=0;e{$r(),Cr(),Xe(),Object.defineProperty(e,"__esModule",{value:!0});var t=no(),r={objectMode:!0},n={clean:!0};e.default=class{constructor(e){this.options=e||{},this.options=Object.assign(Object.assign({},n),e),this._inflights=new Map}put(e,t){return this._inflights.set(e.messageId,e),t&&t(),this}createStream(){let e=new t.Readable(r),n=[],i=!1,o=0;return this._inflights.forEach(((e,t)=>{n.push(e)})),e._read=()=>{!i&&o{if(!i)return i=!0,setTimeout((()=>{e.emit("close")}),0),e},e}del(e,t){let r=this._inflights.get(e.messageId);return r?(this._inflights.delete(e.messageId),t(null,r)):t&&t(new Error("missing packet")),this}get(e,t){let r=this._inflights.get(e.messageId);return r?t(null,r):t&&t(new Error("missing packet")),this}close(e){this.options.clean&&(this._inflights=null),e&&e()}}})),Ao=Ge((e=>{$r(),Cr(),Xe(),Object.defineProperty(e,"__esModule",{value:!0});var t=[0,16,128,131,135,144,145,151,153];e.default=(e,r,n)=>{e.log("handlePublish: packet %o",r),n=typeof n<"u"?n:e.noop;let i=r.topic.toString(),o=r.payload,{qos:s}=r,{messageId:a}=r,{options:l}=e;if(5===e.options.protocolVersion){let t;if(r.properties&&(t=r.properties.topicAlias),typeof t<"u")if(0===i.length){if(!(t>0&&t<=65535))return e.log("handlePublish :: topic alias out of range. alias: %d",t),void e.emit("error",new Error("Received Topic Alias is out of range"));{let r=e.topicAliasRecv.getTopicByAlias(t);if(!r)return e.log("handlePublish :: unregistered topic alias. alias: %d",t),void e.emit("error",new Error("Received unregistered Topic Alias"));i=r,e.log("handlePublish :: topic complemented by alias. topic: %s - alias: %d",i,t)}}else{if(!e.topicAliasRecv.put(i,t))return e.log("handlePublish :: topic alias out of range. alias: %d",t),void e.emit("error",new Error("Received Topic Alias is out of range"));e.log("handlePublish :: registered topic: %s - alias: %d",i,t)}}switch(e.log("handlePublish: qos %d",s),s){case 2:l.customHandleAcks(i,o,r,((i,o)=>("number"==typeof i&&(o=i,i=null),i?e.emit("error",i):-1===t.indexOf(o)?e.emit("error",new Error("Wrong reason code for pubrec")):void(o?e._sendPacket({cmd:"pubrec",messageId:a,reasonCode:o},n):e.incomingStore.put(r,(()=>{e._sendPacket({cmd:"pubrec",messageId:a},n)}))))));break;case 1:l.customHandleAcks(i,o,r,((s,l)=>("number"==typeof s&&(l=s,s=null),s?e.emit("error",s):-1===t.indexOf(l)?e.emit("error",new Error("Wrong reason code for puback")):(l||e.emit("message",i,o,r),void e.handleMessage(r,(t=>{if(t)return n&&n(t);e._sendPacket({cmd:"puback",messageId:a,reasonCode:l},n)}))))));break;case 0:e.emit("message",i,o,r),e.handleMessage(r,n);break;default:e.log("handlePublish: unknown QoS. Doing nothing.")}}})),Io=Ge((e=>{$r(),Cr(),Xe(),Object.defineProperty(e,"__esModule",{value:!0}),e.nextTick=e.applyMixin=e.ErrorWithReasonCode=void 0;var t=class e extends Error{constructor(t,r){super(t),this.code=r,Object.setPrototypeOf(this,e.prototype),Object.getPrototypeOf(this).name="ErrorWithReasonCode"}};e.ErrorWithReasonCode=t,e.applyMixin=function(e,t,r=!1){var n;let i=[t];for(;;){let e=i[0],t=Object.getPrototypeOf(e);if(!t?.prototype)break;i.unshift(t)}for(let t of i)for(let i of Object.getOwnPropertyNames(t.prototype))(r||"constructor"!==i)&&Object.defineProperty(e.prototype,i,null!==(n=Object.getOwnPropertyDescriptor(t.prototype,i))&&void 0!==n?n:Object.create(null))},e.nextTick="function"==typeof(null==Ze?void 0:Ze.nextTick)?Ze.nextTick:e=>{setTimeout(e,0)}})),To=Ge((e=>{$r(),Cr(),Xe(),Object.defineProperty(e,"__esModule",{value:!0}),e.ReasonCodes=void 0,e.ReasonCodes={0:"",1:"Unacceptable protocol version",2:"Identifier rejected",3:"Server unavailable",4:"Bad username or password",5:"Not authorized",16:"No matching subscribers",17:"No subscription existed",128:"Unspecified error",129:"Malformed Packet",130:"Protocol Error",131:"Implementation specific error",132:"Unsupported Protocol Version",133:"Client Identifier not valid",134:"Bad User Name or Password",135:"Not authorized",136:"Server unavailable",137:"Server busy",138:"Banned",139:"Server shutting down",140:"Bad authentication method",141:"Keep Alive timeout",142:"Session taken over",143:"Topic Filter invalid",144:"Topic Name invalid",145:"Packet identifier in use",146:"Packet Identifier not found",147:"Receive Maximum exceeded",148:"Topic Alias invalid",149:"Packet too large",150:"Message rate too high",151:"Quota exceeded",152:"Administrative action",153:"Payload format invalid",154:"Retain not supported",155:"QoS not supported",156:"Use another server",157:"Server moved",158:"Shared Subscriptions not supported",159:"Connection rate exceeded",160:"Maximum connect time",161:"Subscription Identifiers not supported",162:"Wildcard Subscriptions not supported"},e.default=(t,r)=>{let n,{messageId:i}=r,o=r.cmd,s=null,a=t.outgoing[i]?t.outgoing[i].cb:null;if(a){switch(t.log("_handleAck :: packet type",o),o){case"pubcomp":case"puback":{let o=r.reasonCode;o&&o>0&&16!==o?(n=new Error(`Publish error: ${e.ReasonCodes[o]}`),n.code=o,t._removeOutgoingAndStoreMessage(i,(()=>{a(n,r)}))):t._removeOutgoingAndStoreMessage(i,a);break}case"pubrec":{s={cmd:"pubrel",qos:2,messageId:i};let o=r.reasonCode;o&&o>0&&16!==o?(n=new Error(`Publish error: ${e.ReasonCodes[o]}`),n.code=o,t._removeOutgoingAndStoreMessage(i,(()=>{a(n,r)}))):t._sendPacket(s);break}case"suback":{delete t.outgoing[i],t.messageIdProvider.deallocate(i);let e=r.granted;for(let r=0;r{delete t._resubscribeTopics[e]}))}delete t.messageIdToTopic[i],t._invokeStoreProcessingQueue(),a(null,r);break}case"unsuback":delete t.outgoing[i],t.messageIdProvider.deallocate(i),t._invokeStoreProcessingQueue(),a(null);break;default:t.emit("error",new Error("unrecognized packet type"))}t.disconnecting&&0===Object.keys(t.outgoing).length&&t.emit("outgoingEmpty")}else t.log("_handleAck :: Server sent an ack in error. Ignoring.")}})),Ro=Ge((e=>{$r(),Cr(),Xe(),Object.defineProperty(e,"__esModule",{value:!0});var t=Io(),r=To();e.default=(e,n)=>{let{options:i}=e,o=i.protocolVersion,s=5===o?n.reasonCode:n.returnCode;if(5===o)e.handleAuth(n,((n,i)=>{if(n)e.emit("error",n);else if(24===s)e.reconnecting=!1,e._sendPacket(i);else{let n=new t.ErrorWithReasonCode(`Connection refused: ${r.ReasonCodes[s]}`,s);e.emit("error",n)}}));else{let r=new t.ErrorWithReasonCode(`Protocol error: Auth packets are only supported in MQTT 5. Your version:${o}`,s);e.emit("error",r)}}})),Oo=Ge((e=>{$r(),Cr(),Xe(),Object.defineProperty(e,"__esModule",{value:!0}),e.LRUCache=void 0;var t="object"==typeof performance&&performance&&"function"==typeof performance.now?performance:Date,r=new Set,n="object"==typeof Ze&&Ze?Ze:{},i=(e,t,r,i)=>{"function"==typeof n.emitWarning?n.emitWarning(e,t,r,i):console.error(`[${r}] ${t}: ${e}`)},o=globalThis.AbortController,s=globalThis.AbortSignal;if(typeof o>"u"){s=class{onabort;_onabort=[];reason;aborted=!1;addEventListener(e,t){this._onabort.push(t)}},o=class{constructor(){t()}signal=new s;abort(e){if(!this.signal.aborted){this.signal.reason=e,this.signal.aborted=!0;for(let t of this.signal._onabort)t(e);this.signal.onabort?.(e)}}};let e="1"!==n.env?.LRU_CACHE_IGNORE_AC_WARNING,t=()=>{e&&(e=!1,i("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.","NO_ABORT_CONTROLLER","ENOTSUP",t))}}var a=e=>e&&e===Math.floor(e)&&e>0&&isFinite(e),l=e=>a(e)?e<=Math.pow(2,8)?Uint8Array:e<=Math.pow(2,16)?Uint16Array:e<=Math.pow(2,32)?Uint32Array:e<=Number.MAX_SAFE_INTEGER?u:null:null,u=class extends Array{constructor(e){super(e),this.fill(0)}},h=class e{heap;length;static#e=!1;static create(t){let r=l(t);if(!r)return[];e.#e=!0;let n=new e(t,r);return e.#e=!1,n}constructor(t,r){if(!e.#e)throw new TypeError("instantiate Stack using Stack.create(n)");this.heap=new r(t),this.length=0}push(e){this.heap[this.length++]=e}pop(){return this.heap[--this.length]}},c=class e{#e;#t;#r;#n;#i;ttl;ttlResolution;ttlAutopurge;updateAgeOnGet;updateAgeOnHas;allowStale;noDisposeOnSet;noUpdateTTL;maxEntrySize;sizeCalculation;noDeleteOnFetchRejection;noDeleteOnStaleGet;allowStaleOnFetchAbort;allowStaleOnFetchRejection;ignoreFetchAbort;#o;#s;#a;#l;#u;#h;#c;#f;#p;#d;#g;#y;#m;#b;#w;#_;#v;static unsafeExposeInternals(e){return{starts:e.#m,ttls:e.#b,sizes:e.#y,keyMap:e.#a,keyList:e.#l,valList:e.#u,next:e.#h,prev:e.#c,get head(){return e.#f},get tail(){return e.#p},free:e.#d,isBackgroundFetch:t=>e.#E(t),backgroundFetch:(t,r,n,i)=>e.#S(t,r,n,i),moveToTail:t=>e.#A(t),indexes:t=>e.#I(t),rindexes:t=>e.#T(t),isStale:t=>e.#R(t)}}get max(){return this.#e}get maxSize(){return this.#t}get calculatedSize(){return this.#s}get size(){return this.#o}get fetchMethod(){return this.#i}get dispose(){return this.#r}get disposeAfter(){return this.#n}constructor(t){let{max:n=0,ttl:o,ttlResolution:s=1,ttlAutopurge:u,updateAgeOnGet:c,updateAgeOnHas:f,allowStale:p,dispose:d,disposeAfter:g,noDisposeOnSet:y,noUpdateTTL:m,maxSize:b=0,maxEntrySize:w=0,sizeCalculation:_,fetchMethod:v,noDeleteOnFetchRejection:E,noDeleteOnStaleGet:S,allowStaleOnFetchRejection:A,allowStaleOnFetchAbort:I,ignoreFetchAbort:T}=t;if(0!==n&&!a(n))throw new TypeError("max option must be a nonnegative integer");let R=n?l(n):Array;if(!R)throw new Error("invalid max value: "+n);if(this.#e=n,this.#t=b,this.maxEntrySize=w||this.#t,this.sizeCalculation=_,this.sizeCalculation){if(!this.#t&&!this.maxEntrySize)throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize");if("function"!=typeof this.sizeCalculation)throw new TypeError("sizeCalculation set to non-function")}if(void 0!==v&&"function"!=typeof v)throw new TypeError("fetchMethod must be a function if specified");if(this.#i=v,this.#_=!!v,this.#a=new Map,this.#l=new Array(n).fill(void 0),this.#u=new Array(n).fill(void 0),this.#h=new R(n),this.#c=new R(n),this.#f=0,this.#p=0,this.#d=h.create(n),this.#o=0,this.#s=0,"function"==typeof d&&(this.#r=d),"function"==typeof g?(this.#n=g,this.#g=[]):(this.#n=void 0,this.#g=void 0),this.#w=!!this.#r,this.#v=!!this.#n,this.noDisposeOnSet=!!y,this.noUpdateTTL=!!m,this.noDeleteOnFetchRejection=!!E,this.allowStaleOnFetchRejection=!!A,this.allowStaleOnFetchAbort=!!I,this.ignoreFetchAbort=!!T,0!==this.maxEntrySize){if(0!==this.#t&&!a(this.#t))throw new TypeError("maxSize must be a positive integer if specified");if(!a(this.maxEntrySize))throw new TypeError("maxEntrySize must be a positive integer if specified");this.#O()}if(this.allowStale=!!p,this.noDeleteOnStaleGet=!!S,this.updateAgeOnGet=!!c,this.updateAgeOnHas=!!f,this.ttlResolution=a(s)||0===s?s:1,this.ttlAutopurge=!!u,this.ttl=o||0,this.ttl){if(!a(this.ttl))throw new TypeError("ttl must be a positive integer if specified");this.#C()}if(0===this.#e&&0===this.ttl&&0===this.#t)throw new TypeError("At least one of max, maxSize, or ttl is required");if(!this.ttlAutopurge&&!this.#e&&!this.#t){let t="LRU_CACHE_UNBOUNDED";(e=>!r.has(e))(t)&&(r.add(t),i("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",t,e))}}getRemainingTTL(e){return this.#a.has(e)?1/0:0}#C(){let e=new u(this.#e),r=new u(this.#e);this.#b=e,this.#m=r,this.#k=(n,i,o=t.now())=>{if(r[n]=0!==i?o:0,e[n]=i,0!==i&&this.ttlAutopurge){let e=setTimeout((()=>{this.#R(n)&&this.delete(this.#l[n])}),i+1);e.unref&&e.unref()}},this.#P=n=>{r[n]=0!==e[n]?t.now():0},this.#B=(t,o)=>{if(e[o]){let s=e[o],a=r[o];t.ttl=s,t.start=a,t.now=n||i();let l=t.now-a;t.remainingTTL=s-l}};let n=0,i=()=>{let e=t.now();if(this.ttlResolution>0){n=e;let t=setTimeout((()=>n=0),this.ttlResolution);t.unref&&t.unref()}return e};this.getRemainingTTL=t=>{let o=this.#a.get(t);if(void 0===o)return 0;let s=e[o],a=r[o];return 0===s||0===a?1/0:s-((n||i())-a)},this.#R=t=>0!==e[t]&&0!==r[t]&&(n||i())-r[t]>e[t]}#P=()=>{};#B=()=>{};#k=()=>{};#R=()=>!1;#O(){let e=new u(this.#e);this.#s=0,this.#y=e,this.#x=t=>{this.#s-=e[t],e[t]=0},this.#U=(e,t,r,n)=>{if(this.#E(t))return 0;if(!a(r)){if(!n)throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.");if("function"!=typeof n)throw new TypeError("sizeCalculation must be a function");if(r=n(t,e),!a(r))throw new TypeError("sizeCalculation return invalid (expect positive integer)")}return r},this.#L=(t,r,n)=>{if(e[t]=r,this.#t){let r=this.#t-e[t];for(;this.#s>r;)this.#M(!0)}this.#s+=e[t],n&&(n.entrySize=r,n.totalCalculatedSize=this.#s)}}#x=e=>{};#L=(e,t,r)=>{};#U=(e,t,r,n)=>{if(r||n)throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");return 0};*#I({allowStale:e=this.allowStale}={}){if(this.#o)for(let t=this.#p;this.#N(t)&&((e||!this.#R(t))&&(yield t),t!==this.#f);)t=this.#c[t]}*#T({allowStale:e=this.allowStale}={}){if(this.#o)for(let t=this.#f;this.#N(t)&&((e||!this.#R(t))&&(yield t),t!==this.#p);)t=this.#h[t]}#N(e){return void 0!==e&&this.#a.get(this.#l[e])===e}*entries(){for(let e of this.#I())void 0!==this.#u[e]&&void 0!==this.#l[e]&&!this.#E(this.#u[e])&&(yield[this.#l[e],this.#u[e]])}*rentries(){for(let e of this.#T())void 0!==this.#u[e]&&void 0!==this.#l[e]&&!this.#E(this.#u[e])&&(yield[this.#l[e],this.#u[e]])}*keys(){for(let e of this.#I()){let t=this.#l[e];void 0!==t&&!this.#E(this.#u[e])&&(yield t)}}*rkeys(){for(let e of this.#T()){let t=this.#l[e];void 0!==t&&!this.#E(this.#u[e])&&(yield t)}}*values(){for(let e of this.#I())void 0!==this.#u[e]&&!this.#E(this.#u[e])&&(yield this.#u[e])}*rvalues(){for(let e of this.#T())void 0!==this.#u[e]&&!this.#E(this.#u[e])&&(yield this.#u[e])}[Symbol.iterator](){return this.entries()}find(e,t={}){for(let r of this.#I()){let n=this.#u[r],i=this.#E(n)?n.__staleWhileFetching:n;if(void 0!==i&&e(i,this.#l[r],this))return this.get(this.#l[r],t)}}forEach(e,t=this){for(let r of this.#I()){let n=this.#u[r],i=this.#E(n)?n.__staleWhileFetching:n;void 0!==i&&e.call(t,i,this.#l[r],this)}}rforEach(e,t=this){for(let r of this.#T()){let n=this.#u[r],i=this.#E(n)?n.__staleWhileFetching:n;void 0!==i&&e.call(t,i,this.#l[r],this)}}purgeStale(){let e=!1;for(let t of this.#T({allowStale:!0}))this.#R(t)&&(this.delete(this.#l[t]),e=!0);return e}dump(){let e=[];for(let r of this.#I({allowStale:!0})){let n=this.#l[r],i=this.#u[r],o=this.#E(i)?i.__staleWhileFetching:i;if(void 0===o||void 0===n)continue;let s={value:o};if(this.#b&&this.#m){s.ttl=this.#b[r];let e=t.now()-this.#m[r];s.start=Math.floor(Date.now()-e)}this.#y&&(s.size=this.#y[r]),e.unshift([n,s])}return e}load(e){this.clear();for(let[r,n]of e){if(n.start){let e=Date.now()-n.start;n.start=t.now()-e}this.set(r,n.value,n)}}set(e,t,r={}){if(void 0===t)return this.delete(e),this;let{ttl:n=this.ttl,start:i,noDisposeOnSet:o=this.noDisposeOnSet,sizeCalculation:s=this.sizeCalculation,status:a}=r,{noUpdateTTL:l=this.noUpdateTTL}=r,u=this.#U(e,t,r.size||0,s);if(this.maxEntrySize&&u>this.maxEntrySize)return a&&(a.set="miss",a.maxEntrySizeExceeded=!0),this.delete(e),this;let h=0===this.#o?void 0:this.#a.get(e);if(void 0===h)h=0===this.#o?this.#p:0!==this.#d.length?this.#d.pop():this.#o===this.#e?this.#M(!1):this.#o,this.#l[h]=e,this.#u[h]=t,this.#a.set(e,h),this.#h[this.#p]=h,this.#c[h]=this.#p,this.#p=h,this.#o++,this.#L(h,u,a),a&&(a.set="add"),l=!1;else{this.#A(h);let r=this.#u[h];if(t!==r){if(this.#_&&this.#E(r)){r.__abortController.abort(new Error("replaced"));let{__staleWhileFetching:t}=r;void 0!==t&&!o&&(this.#w&&this.#r?.(t,e,"set"),this.#v&&this.#g?.push([t,e,"set"]))}else o||(this.#w&&this.#r?.(r,e,"set"),this.#v&&this.#g?.push([r,e,"set"]));if(this.#x(h),this.#L(h,u,a),this.#u[h]=t,a){a.set="replace";let e=r&&this.#E(r)?r.__staleWhileFetching:r;void 0!==e&&(a.oldValue=e)}}else a&&(a.set="update")}if(0!==n&&!this.#b&&this.#C(),this.#b&&(l||this.#k(h,n,i),a&&this.#B(a,h)),!o&&this.#v&&this.#g){let e,t=this.#g;for(;e=t?.shift();)this.#n?.(...e)}return this}pop(){try{for(;this.#o;){let e=this.#u[this.#f];if(this.#M(!0),this.#E(e)){if(e.__staleWhileFetching)return e.__staleWhileFetching}else if(void 0!==e)return e}}finally{if(this.#v&&this.#g){let e,t=this.#g;for(;e=t?.shift();)this.#n?.(...e)}}}#M(e){let t=this.#f,r=this.#l[t],n=this.#u[t];return this.#_&&this.#E(n)?n.__abortController.abort(new Error("evicted")):(this.#w||this.#v)&&(this.#w&&this.#r?.(n,r,"evict"),this.#v&&this.#g?.push([n,r,"evict"])),this.#x(t),e&&(this.#l[t]=void 0,this.#u[t]=void 0,this.#d.push(t)),1===this.#o?(this.#f=this.#p=0,this.#d.length=0):this.#f=this.#h[t],this.#a.delete(r),this.#o--,t}has(e,t={}){let{updateAgeOnHas:r=this.updateAgeOnHas,status:n}=t,i=this.#a.get(e);if(void 0!==i){let e=this.#u[i];if(this.#E(e)&&void 0===e.__staleWhileFetching)return!1;if(!this.#R(i))return r&&this.#P(i),n&&(n.has="hit",this.#B(n,i)),!0;n&&(n.has="stale",this.#B(n,i))}else n&&(n.has="miss");return!1}peek(e,t={}){let{allowStale:r=this.allowStale}=t,n=this.#a.get(e);if(void 0!==n&&(r||!this.#R(n))){let e=this.#u[n];return this.#E(e)?e.__staleWhileFetching:e}}#S(e,t,r,n){let i=void 0===t?void 0:this.#u[t];if(this.#E(i))return i;let s=new o,{signal:a}=r;a?.addEventListener("abort",(()=>s.abort(a.reason)),{signal:s.signal});let l={signal:s.signal,options:r,context:n},u=(n,i=!1)=>{let{aborted:o}=s.signal,a=r.ignoreFetchAbort&&void 0!==n;if(r.status&&(o&&!i?(r.status.fetchAborted=!0,r.status.fetchError=s.signal.reason,a&&(r.status.fetchAbortIgnored=!0)):r.status.fetchResolved=!0),o&&!a&&!i)return h(s.signal.reason);let u=c;return this.#u[t]===c&&(void 0===n?u.__staleWhileFetching?this.#u[t]=u.__staleWhileFetching:this.delete(e):(r.status&&(r.status.fetchUpdated=!0),this.set(e,n,l.options))),n},h=n=>{let{aborted:i}=s.signal,o=i&&r.allowStaleOnFetchAbort,a=o||r.allowStaleOnFetchRejection,l=a||r.noDeleteOnFetchRejection,u=c;if(this.#u[t]===c&&(l&&void 0!==u.__staleWhileFetching?o||(this.#u[t]=u.__staleWhileFetching):this.delete(e)),a)return r.status&&void 0!==u.__staleWhileFetching&&(r.status.returnedStale=!0),u.__staleWhileFetching;if(u.__returned===u)throw n};r.status&&(r.status.fetchDispatched=!0);let c=new Promise(((t,n)=>{let o=this.#i?.(e,i,l);o&&o instanceof Promise&&o.then((e=>t(void 0===e?void 0:e)),n),s.signal.addEventListener("abort",(()=>{(!r.ignoreFetchAbort||r.allowStaleOnFetchAbort)&&(t(void 0),r.allowStaleOnFetchAbort&&(t=e=>u(e,!0)))}))})).then(u,(e=>(r.status&&(r.status.fetchRejected=!0,r.status.fetchError=e),h(e)))),f=Object.assign(c,{__abortController:s,__staleWhileFetching:i,__returned:void 0});return void 0===t?(this.set(e,f,{...l.options,status:void 0}),t=this.#a.get(e)):this.#u[t]=f,f}#E(e){if(!this.#_)return!1;let t=e;return!!t&&t instanceof Promise&&t.hasOwnProperty("__staleWhileFetching")&&t.__abortController instanceof o}async fetch(e,t={}){let{allowStale:r=this.allowStale,updateAgeOnGet:n=this.updateAgeOnGet,noDeleteOnStaleGet:i=this.noDeleteOnStaleGet,ttl:o=this.ttl,noDisposeOnSet:s=this.noDisposeOnSet,size:a=0,sizeCalculation:l=this.sizeCalculation,noUpdateTTL:u=this.noUpdateTTL,noDeleteOnFetchRejection:h=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:c=this.allowStaleOnFetchRejection,ignoreFetchAbort:f=this.ignoreFetchAbort,allowStaleOnFetchAbort:p=this.allowStaleOnFetchAbort,context:d,forceRefresh:g=!1,status:y,signal:m}=t;if(!this.#_)return y&&(y.fetch="get"),this.get(e,{allowStale:r,updateAgeOnGet:n,noDeleteOnStaleGet:i,status:y});let b={allowStale:r,updateAgeOnGet:n,noDeleteOnStaleGet:i,ttl:o,noDisposeOnSet:s,size:a,sizeCalculation:l,noUpdateTTL:u,noDeleteOnFetchRejection:h,allowStaleOnFetchRejection:c,allowStaleOnFetchAbort:p,ignoreFetchAbort:f,status:y,signal:m},w=this.#a.get(e);if(void 0===w){y&&(y.fetch="miss");let t=this.#S(e,w,b,d);return t.__returned=t}{let t=this.#u[w];if(this.#E(t)){let e=r&&void 0!==t.__staleWhileFetching;return y&&(y.fetch="inflight",e&&(y.returnedStale=!0)),e?t.__staleWhileFetching:t.__returned=t}let i=this.#R(w);if(!g&&!i)return y&&(y.fetch="hit"),this.#A(w),n&&this.#P(w),y&&this.#B(y,w),t;let o=this.#S(e,w,b,d),s=void 0!==o.__staleWhileFetching&&r;return y&&(y.fetch=i?"stale":"refresh",s&&i&&(y.returnedStale=!0)),s?o.__staleWhileFetching:o.__returned=o}}get(e,t={}){let{allowStale:r=this.allowStale,updateAgeOnGet:n=this.updateAgeOnGet,noDeleteOnStaleGet:i=this.noDeleteOnStaleGet,status:o}=t,s=this.#a.get(e);if(void 0!==s){let t=this.#u[s],a=this.#E(t);return o&&this.#B(o,s),this.#R(s)?(o&&(o.get="stale"),a?(o&&r&&void 0!==t.__staleWhileFetching&&(o.returnedStale=!0),r?t.__staleWhileFetching:void 0):(i||this.delete(e),o&&r&&(o.returnedStale=!0),r?t:void 0)):(o&&(o.get="hit"),a?t.__staleWhileFetching:(this.#A(s),n&&this.#P(s),t))}o&&(o.get="miss")}#j(e,t){this.#c[t]=e,this.#h[e]=t}#A(e){e!==this.#p&&(e===this.#f?this.#f=this.#h[e]:this.#j(this.#c[e],this.#h[e]),this.#j(this.#p,e),this.#p=e)}delete(e){let t=!1;if(0!==this.#o){let r=this.#a.get(e);if(void 0!==r)if(t=!0,1===this.#o)this.clear();else{this.#x(r);let t=this.#u[r];this.#E(t)?t.__abortController.abort(new Error("deleted")):(this.#w||this.#v)&&(this.#w&&this.#r?.(t,e,"delete"),this.#v&&this.#g?.push([t,e,"delete"])),this.#a.delete(e),this.#l[r]=void 0,this.#u[r]=void 0,r===this.#p?this.#p=this.#c[r]:r===this.#f?this.#f=this.#h[r]:(this.#h[this.#c[r]]=this.#h[r],this.#c[this.#h[r]]=this.#c[r]),this.#o--,this.#d.push(r)}}if(this.#v&&this.#g?.length){let e,t=this.#g;for(;e=t?.shift();)this.#n?.(...e)}return t}clear(){for(let e of this.#T({allowStale:!0})){let t=this.#u[e];if(this.#E(t))t.__abortController.abort(new Error("deleted"));else{let r=this.#l[e];this.#w&&this.#r?.(t,r,"delete"),this.#v&&this.#g?.push([t,r,"delete"])}}if(this.#a.clear(),this.#u.fill(void 0),this.#l.fill(void 0),this.#b&&this.#m&&(this.#b.fill(0),this.#m.fill(0)),this.#y&&this.#y.fill(0),this.#f=0,this.#p=0,this.#d.length=0,this.#s=0,this.#o=0,this.#v&&this.#g){let e,t=this.#g;for(;e=t?.shift();)this.#n?.(...e)}}};e.LRUCache=c})),Co=Ge((e=>{$r(),Cr(),Xe(),Object.defineProperty(e,"t",{value:!0}),e.ContainerIterator=e.Container=e.Base=void 0,e.ContainerIterator=class{constructor(e=0){this.iteratorType=e}equals(e){return this.o===e.o}};var t=class{constructor(){this.i=0}get length(){return this.i}size(){return this.i}empty(){return 0===this.i}};e.Base=t,e.Container=class extends t{}})),ko=Ge((e=>{$r(),Cr(),Xe(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var t=Co(),r=class extends t.Base{constructor(e=[]){super(),this.S=[];let t=this;e.forEach((function(e){t.push(e)}))}clear(){this.i=0,this.S=[]}push(e){return this.S.push(e),this.i+=1,this.i}pop(){if(0!==this.i)return this.i-=1,this.S.pop()}top(){return this.S[this.i-1]}};e.default=r})),Po=Ge((e=>{$r(),Cr(),Xe(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var t=Co(),r=class extends t.Base{constructor(e=[]){super(),this.j=0,this.q=[];let t=this;e.forEach((function(e){t.push(e)}))}clear(){this.q=[],this.i=this.j=0}push(e){let t=this.q.length;if(this.j/t>.5&&this.j+this.i>=t&&t>4096){let t=this.i;for(let e=0;e{$r(),Cr(),Xe(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var t=Co(),r=class extends t.Base{constructor(e=[],t=function(e,t){return e>t?-1:e>1;for(let e=this.i-1>>1;e>=0;--e)this.k(e,n)}m(e){let t=this.C[e];for(;e>0;){let r=e-1>>1,n=this.C[r];if(this.v(n,t)<=0)break;this.C[e]=n,e=r}this.C[e]=t}k(e,t){let r=this.C[e];for(;e0&&(t=n,i=this.C[n]),this.v(i,r)>=0)break;this.C[e]=i,e=t}this.C[e]=r}clear(){this.i=0,this.C.length=0}push(e){this.C.push(e),this.m(this.i),this.i+=1}pop(){if(0===this.i)return;let e=this.C[0],t=this.C.pop();return this.i-=1,this.i&&(this.C[0]=t,this.k(0,this.i>>1)),e}top(){return this.C[0]}find(e){return this.C.indexOf(e)>=0}remove(e){let t=this.C.indexOf(e);return!(t<0||(0===t?this.pop():t===this.i-1?(this.C.pop(),this.i-=1):(this.C.splice(t,1,this.C.pop()),this.i-=1,this.m(t),this.k(t,this.i>>1)),0))}updateItem(e){let t=this.C.indexOf(e);return!(t<0||(this.m(t),this.k(t,this.i>>1),0))}toArray(){return[...this.C]}};e.default=r})),xo=Ge((e=>{$r(),Cr(),Xe(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var t=Co(),r=class extends t.Container{};e.default=r})),Uo=Ge((e=>{$r(),Cr(),Xe(),Object.defineProperty(e,"t",{value:!0}),e.throwIteratorAccessError=function(){throw new RangeError("Iterator access denied!")}})),Lo=Ge((e=>{$r(),Cr(),Xe(),Object.defineProperty(e,"t",{value:!0}),e.RandomIterator=void 0;var t=Co(),r=Uo(),n=class extends t.ContainerIterator{constructor(e,t){super(t),this.o=e,0===this.iteratorType?(this.pre=function(){return 0===this.o&&(0,r.throwIteratorAccessError)(),this.o-=1,this},this.next=function(){return this.o===this.container.size()&&(0,r.throwIteratorAccessError)(),this.o+=1,this}):(this.pre=function(){return this.o===this.container.size()-1&&(0,r.throwIteratorAccessError)(),this.o+=1,this},this.next=function(){return-1===this.o&&(0,r.throwIteratorAccessError)(),this.o-=1,this})}get pointer(){return this.container.getElementByPos(this.o)}set pointer(e){this.container.setElementByPos(this.o,e)}};e.RandomIterator=n})),Mo=Ge((e=>{$r(),Cr(),Xe(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var t,r=(t=xo())&&t.t?t:{default:t},n=Lo(),i=class e extends n.RandomIterator{constructor(e,t,r){super(e,r),this.container=t}copy(){return new e(this.o,this.container,this.iteratorType)}},o=class extends r.default{constructor(e=[],t=!0){if(super(),Array.isArray(e))this.J=t?[...e]:e,this.i=e.length;else{this.J=[];let t=this;e.forEach((function(e){t.pushBack(e)}))}}clear(){this.i=0,this.J.length=0}begin(){return new i(0,this)}end(){return new i(this.i,this)}rBegin(){return new i(this.i-1,this,1)}rEnd(){return new i(-1,this,1)}front(){return this.J[0]}back(){return this.J[this.i-1]}getElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;return this.J[e]}eraseElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;return this.J.splice(e,1),this.i-=1,this.i}eraseElementByValue(e){let t=0;for(let r=0;rthis.i-1)throw new RangeError;this.J[e]=t}insert(e,t,r=1){if(e<0||e>this.i)throw new RangeError;return this.J.splice(e,0,...new Array(r).fill(t)),this.i+=r,this.i}find(e){for(let t=0;t{$r(),Cr(),Xe(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var t,r=(t=xo())&&t.t?t:{default:t},n=Co(),i=Uo(),o=class e extends n.ContainerIterator{constructor(e,t,r,n){super(n),this.o=e,this.h=t,this.container=r,0===this.iteratorType?(this.pre=function(){return this.o.L===this.h&&(0,i.throwIteratorAccessError)(),this.o=this.o.L,this},this.next=function(){return this.o===this.h&&(0,i.throwIteratorAccessError)(),this.o=this.o.B,this}):(this.pre=function(){return this.o.B===this.h&&(0,i.throwIteratorAccessError)(),this.o=this.o.B,this},this.next=function(){return this.o===this.h&&(0,i.throwIteratorAccessError)(),this.o=this.o.L,this})}get pointer(){return this.o===this.h&&(0,i.throwIteratorAccessError)(),this.o.l}set pointer(e){this.o===this.h&&(0,i.throwIteratorAccessError)(),this.o.l=e}copy(){return new e(this.o,this.h,this.container,this.iteratorType)}},s=class extends r.default{constructor(e=[]){super(),this.h={},this.p=this._=this.h.L=this.h.B=this.h;let t=this;e.forEach((function(e){t.pushBack(e)}))}V(e){let{L:t,B:r}=e;t.B=r,r.L=t,e===this.p&&(this.p=r),e===this._&&(this._=t),this.i-=1}G(e,t){let r=t.B,n={l:e,L:t,B:r};t.B=n,r.L=n,t===this.h&&(this.p=n),r===this.h&&(this._=n),this.i+=1}clear(){this.i=0,this.p=this._=this.h.L=this.h.B=this.h}begin(){return new o(this.p,this.h,this)}end(){return new o(this.h,this.h,this)}rBegin(){return new o(this._,this.h,this,1)}rEnd(){return new o(this.h,this.h,this,1)}front(){return this.p.l}back(){return this._.l}getElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let t=this.p;for(;e--;)t=t.B;return t.l}eraseElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let t=this.p;for(;e--;)t=t.B;return this.V(t),this.i}eraseElementByValue(e){let t=this.p;for(;t!==this.h;)t.l===e&&this.V(t),t=t.B;return this.i}eraseElementByIterator(e){let t=e.o;return t===this.h&&(0,i.throwIteratorAccessError)(),e=e.next(),this.V(t),e}pushBack(e){return this.G(e,this._),this.i}popBack(){if(0===this.i)return;let e=this._.l;return this.V(this._),e}pushFront(e){return this.G(e,this.h),this.i}popFront(){if(0===this.i)return;let e=this.p.l;return this.V(this.p),e}setElementByPos(e,t){if(e<0||e>this.i-1)throw new RangeError;let r=this.p;for(;e--;)r=r.B;r.l=t}insert(e,t,r=1){if(e<0||e>this.i)throw new RangeError;if(r<=0)return this.i;if(0===e)for(;r--;)this.pushFront(t);else if(e===this.i)for(;r--;)this.pushBack(t);else{let n=this.p;for(let t=1;t{$r(),Cr(),Xe(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var t,r=(t=xo())&&t.t?t:{default:t},n=Lo(),i=class e extends n.RandomIterator{constructor(e,t,r){super(e,r),this.container=t}copy(){return new e(this.o,this.container,this.iteratorType)}},o=class extends r.default{constructor(e=[],t=4096){super(),this.j=0,this.D=0,this.R=0,this.N=0,this.P=0,this.A=[];let r=(()=>{if("number"==typeof e.length)return e.length;if("number"==typeof e.size)return e.size;if("function"==typeof e.size)return e.size();throw new TypeError("Cannot get the length or size of the container")})();this.F=t,this.P=Math.max(Math.ceil(r/this.F),1);for(let e=0;e>1)-(n>>1),this.D=this.N=this.F-r%this.F>>1;let i=this;e.forEach((function(e){i.pushBack(e)}))}T(){let e=[],t=Math.max(this.P>>1,1);for(let r=0;r>1}begin(){return new i(0,this)}end(){return new i(this.i,this)}rBegin(){return new i(this.i-1,this,1)}rEnd(){return new i(-1,this,1)}front(){if(0!==this.i)return this.A[this.j][this.D]}back(){if(0!==this.i)return this.A[this.R][this.N]}pushBack(e){return this.i&&(this.N0?this.N-=1:this.R>0?(this.R-=1,this.N=this.F-1):(this.R=this.P-1,this.N=this.F-1)),this.i-=1,e}pushFront(e){return this.i&&(this.D>0?this.D-=1:this.j>0?(this.j-=1,this.D=this.F-1):(this.j=this.P-1,this.D=this.F-1),this.j===this.R&&this.D===this.N&&this.T()),this.i+=1,this.A[this.j][this.D]=e,this.i}popFront(){if(0===this.i)return;let e=this.A[this.j][this.D];return 1!==this.i&&(this.Dthis.i-1)throw new RangeError;let{curNodeBucketIndex:t,curNodePointerIndex:r}=this.O(e);return this.A[t][r]}setElementByPos(e,t){if(e<0||e>this.i-1)throw new RangeError;let{curNodeBucketIndex:r,curNodePointerIndex:n}=this.O(e);this.A[r][n]=t}insert(e,t,r=1){if(e<0||e>this.i)throw new RangeError;if(0===e)for(;r--;)this.pushFront(t);else if(e===this.i)for(;r--;)this.pushBack(t);else{let n=[];for(let t=e;tthis.i-1)throw new RangeError;if(0===e)this.popFront();else if(e===this.i-1)this.popBack();else{let t=[];for(let r=e+1;re;)this.popBack();return this.i}sort(e){let t=[];for(let e=0;e{$r(),Cr(),Xe(),Object.defineProperty(e,"t",{value:!0}),e.TreeNodeEnableIndex=e.TreeNode=void 0;var t=class{constructor(e,t){this.ee=1,this.u=void 0,this.l=void 0,this.U=void 0,this.W=void 0,this.tt=void 0,this.u=e,this.l=t}L(){let e=this;if(1===e.ee&&e.tt.tt===e)e=e.W;else if(e.U)for(e=e.U;e.W;)e=e.W;else{let t=e.tt;for(;t.U===e;)e=t,t=e.tt;e=t}return e}B(){let e=this;if(e.W){for(e=e.W;e.U;)e=e.U;return e}{let t=e.tt;for(;t.W===e;)e=t,t=e.tt;return e.W!==t?t:e}}te(){let e=this.tt,t=this.W,r=t.U;return e.tt===this?e.tt=t:e.U===this?e.U=t:e.W=t,t.tt=e,t.U=this,this.tt=t,this.W=r,r&&(r.tt=this),t}se(){let e=this.tt,t=this.U,r=t.W;return e.tt===this?e.tt=t:e.U===this?e.U=t:e.W=t,t.tt=e,t.W=this,this.tt=t,this.U=r,r&&(r.tt=this),t}};e.TreeNode=t,e.TreeNodeEnableIndex=class extends t{constructor(){super(...arguments),this.rt=1}te(){let e=super.te();return this.ie(),e.ie(),e}se(){let e=super.se();return this.ie(),e.ie(),e}ie(){this.rt=1,this.U&&(this.rt+=this.U.rt),this.W&&(this.rt+=this.W.rt)}}})),Fo=Ge((e=>{$r(),Cr(),Xe(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var t=Do(),r=Co(),n=Uo(),i=class extends r.Container{constructor(e=function(e,t){return et?1:0},r=!1){super(),this.Y=void 0,this.v=e,r?(this.re=t.TreeNodeEnableIndex,this.M=function(e,t,r){let n=this.ne(e,t,r);if(n){let e=n.tt;for(;e!==this.h;)e.rt+=1,e=e.tt;let t=this.he(n);if(t){let{parentNode:e,grandParent:r,curNode:n}=t;e.ie(),r.ie(),n.ie()}}return this.i},this.V=function(e){let t=this.fe(e);for(;t!==this.h;)t.rt-=1,t=t.tt}):(this.re=t.TreeNode,this.M=function(e,t,r){let n=this.ne(e,t,r);return n&&this.he(n),this.i},this.V=this.fe),this.h=new this.re}X(e,t){let r=this.h;for(;e;){let n=this.v(e.u,t);if(n<0)e=e.W;else{if(!(n>0))return e;r=e,e=e.U}}return r}Z(e,t){let r=this.h;for(;e;)this.v(e.u,t)<=0?e=e.W:(r=e,e=e.U);return r}$(e,t){let r=this.h;for(;e;){let n=this.v(e.u,t);if(n<0)r=e,e=e.W;else{if(!(n>0))return e;e=e.U}}return r}rr(e,t){let r=this.h;for(;e;)this.v(e.u,t)<0?(r=e,e=e.W):e=e.U;return r}ue(e){for(;;){let t=e.tt;if(t===this.h)return;if(1===e.ee)return void(e.ee=0);if(e===t.U){let r=t.W;if(1===r.ee)r.ee=0,t.ee=1,t===this.Y?this.Y=t.te():t.te();else{if(r.W&&1===r.W.ee)return r.ee=t.ee,t.ee=0,r.W.ee=0,void(t===this.Y?this.Y=t.te():t.te());r.U&&1===r.U.ee?(r.ee=1,r.U.ee=0,r.se()):(r.ee=1,e=t)}}else{let r=t.U;if(1===r.ee)r.ee=0,t.ee=1,t===this.Y?this.Y=t.se():t.se();else{if(r.U&&1===r.U.ee)return r.ee=t.ee,t.ee=0,r.U.ee=0,void(t===this.Y?this.Y=t.se():t.se());r.W&&1===r.W.ee?(r.ee=1,r.W.ee=0,r.te()):(r.ee=1,e=t)}}}}fe(e){if(1===this.i)return this.clear(),this.h;let t=e;for(;t.U||t.W;){if(t.W)for(t=t.W;t.U;)t=t.U;else t=t.U;[e.u,t.u]=[t.u,e.u],[e.l,t.l]=[t.l,e.l],e=t}this.h.U===t?this.h.U=t.tt:this.h.W===t&&(this.h.W=t.tt),this.ue(t);let r=t.tt;return t===r.U?r.U=void 0:r.W=void 0,this.i-=1,this.Y.ee=0,r}oe(e,t){return void 0!==e&&(!(!this.oe(e.U,t)&&!t(e))||this.oe(e.W,t))}he(e){for(;;){let t=e.tt;if(0===t.ee)return;let r=t.tt;if(t===r.U){let n=r.W;if(n&&1===n.ee){if(n.ee=t.ee=0,r===this.Y)return;r.ee=1,e=r;continue}if(e===t.W){if(e.ee=0,e.U&&(e.U.tt=t),e.W&&(e.W.tt=r),t.W=e.U,r.U=e.W,e.U=t,e.W=r,r===this.Y)this.Y=e,this.h.tt=e;else{let t=r.tt;t.U===r?t.U=e:t.W=e}return e.tt=r.tt,t.tt=e,r.tt=e,r.ee=1,{parentNode:t,grandParent:r,curNode:e}}t.ee=0,r===this.Y?this.Y=r.se():r.se(),r.ee=1}else{let n=r.U;if(n&&1===n.ee){if(n.ee=t.ee=0,r===this.Y)return;r.ee=1,e=r;continue}if(e===t.U){if(e.ee=0,e.U&&(e.U.tt=r),e.W&&(e.W.tt=t),r.W=e.U,t.U=e.W,e.U=r,e.W=t,r===this.Y)this.Y=e,this.h.tt=e;else{let t=r.tt;t.U===r?t.U=e:t.W=e}return e.tt=r.tt,t.tt=e,r.tt=e,r.ee=1,{parentNode:t,grandParent:r,curNode:e}}t.ee=0,r===this.Y?this.Y=r.te():r.te(),r.ee=1}return}}ne(e,t,r){if(void 0===this.Y)return this.i+=1,this.Y=new this.re(e,t),this.Y.ee=0,this.Y.tt=this.h,this.h.tt=this.Y,this.h.U=this.Y,void(this.h.W=this.Y);let n,i=this.h.U,o=this.v(i.u,e);if(0!==o){if(o>0)i.U=new this.re(e,t),i.U.tt=i,n=i.U,this.h.U=n;else{let i=this.h.W,o=this.v(i.u,e);if(0===o)return void(i.l=t);if(o<0)i.W=new this.re(e,t),i.W.tt=i,n=i.W,this.h.W=n;else{if(void 0!==r){let i=r.o;if(i!==this.h){let r=this.v(i.u,e);if(0===r)return void(i.l=t);if(r>0){let r=i.L(),o=this.v(r.u,e);if(0===o)return void(r.l=t);o<0&&(n=new this.re(e,t),void 0===r.W?(r.W=n,n.tt=r):(i.U=n,n.tt=i))}}}if(void 0===n)for(n=this.Y;;){let r=this.v(n.u,e);if(r>0){if(void 0===n.U){n.U=new this.re(e,t),n.U.tt=n,n=n.U;break}n=n.U}else{if(!(r<0))return void(n.l=t);if(void 0===n.W){n.W=new this.re(e,t),n.W.tt=n,n=n.W;break}n=n.W}}}}return this.i+=1,n}i.l=t}I(e,t){for(;e;){let r=this.v(e.u,t);if(r<0)e=e.W;else{if(!(r>0))return e;e=e.U}}return e||this.h}clear(){this.i=0,this.Y=void 0,this.h.tt=void 0,this.h.U=this.h.W=void 0}updateKeyByIterator(e,t){let r=e.o;if(r===this.h&&(0,n.throwIteratorAccessError)(),1===this.i)return r.u=t,!0;if(r===this.h.U)return this.v(r.B().u,t)>0&&(r.u=t,!0);if(r===this.h.W)return this.v(r.L().u,t)<0&&(r.u=t,!0);let i=r.L().u;if(this.v(i,t)>=0)return!1;let o=r.B().u;return!(this.v(o,t)<=0||(r.u=t,0))}eraseElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let t=0,r=this;return this.oe(this.Y,(function(n){return e===t?(r.V(n),!0):(t+=1,!1)})),this.i}eraseElementByKey(e){if(0===this.i)return!1;let t=this.I(this.Y,e);return t!==this.h&&(this.V(t),!0)}eraseElementByIterator(e){let t=e.o;t===this.h&&(0,n.throwIteratorAccessError)();let r=void 0===t.W;return 0===e.iteratorType?r&&e.next():(!r||void 0===t.U)&&e.next(),this.V(t),e}forEach(e){let t=0;for(let r of this)e(r,t++,this)}getElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let t,r=0;for(let n of this){if(r===e){t=n;break}r+=1}return t}getHeight(){if(0===this.i)return 0;let e=function(t){return t?Math.max(e(t.U),e(t.W))+1:0};return e(this.Y)}};e.default=i})),Wo=Ge((e=>{$r(),Cr(),Xe(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var t=Co(),r=Uo(),n=class extends t.ContainerIterator{constructor(e,t,n){super(n),this.o=e,this.h=t,0===this.iteratorType?(this.pre=function(){return this.o===this.h.U&&(0,r.throwIteratorAccessError)(),this.o=this.o.L(),this},this.next=function(){return this.o===this.h&&(0,r.throwIteratorAccessError)(),this.o=this.o.B(),this}):(this.pre=function(){return this.o===this.h.W&&(0,r.throwIteratorAccessError)(),this.o=this.o.B(),this},this.next=function(){return this.o===this.h&&(0,r.throwIteratorAccessError)(),this.o=this.o.L(),this})}get index(){let e=this.o,t=this.h.tt;if(e===this.h)return t?t.rt-1:0;let r=0;for(e.U&&(r+=e.U.rt);e!==t;){let t=e.tt;e===t.W&&(r+=1,t.U&&(r+=t.U.rt)),e=t}return r}};e.default=n})),qo=Ge((e=>{$r(),Cr(),Xe(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var t=i(Fo()),r=i(Wo()),n=Uo();function i(e){return e&&e.t?e:{default:e}}var o=class e extends r.default{constructor(e,t,r,n){super(e,t,n),this.container=r}get pointer(){return this.o===this.h&&(0,n.throwIteratorAccessError)(),this.o.u}copy(){return new e(this.o,this.h,this.container,this.iteratorType)}},s=class extends t.default{constructor(e=[],t,r){super(t,r);let n=this;e.forEach((function(e){n.insert(e)}))}*K(e){void 0!==e&&(yield*this.K(e.U),yield e.u,yield*this.K(e.W))}begin(){return new o(this.h.U||this.h,this.h,this)}end(){return new o(this.h,this.h,this)}rBegin(){return new o(this.h.W||this.h,this.h,this,1)}rEnd(){return new o(this.h,this.h,this,1)}front(){return this.h.U?this.h.U.u:void 0}back(){return this.h.W?this.h.W.u:void 0}insert(e,t){return this.M(e,void 0,t)}find(e){let t=this.I(this.Y,e);return new o(t,this.h,this)}lowerBound(e){let t=this.X(this.Y,e);return new o(t,this.h,this)}upperBound(e){let t=this.Z(this.Y,e);return new o(t,this.h,this)}reverseLowerBound(e){let t=this.$(this.Y,e);return new o(t,this.h,this)}reverseUpperBound(e){let t=this.rr(this.Y,e);return new o(t,this.h,this)}union(e){let t=this;return e.forEach((function(e){t.insert(e)})),this.i}[Symbol.iterator](){return this.K(this.Y)}};e.default=s})),$o=Ge((e=>{$r(),Cr(),Xe(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var t=i(Fo()),r=i(Wo()),n=Uo();function i(e){return e&&e.t?e:{default:e}}var o=class e extends r.default{constructor(e,t,r,n){super(e,t,n),this.container=r}get pointer(){this.o===this.h&&(0,n.throwIteratorAccessError)();let e=this;return new Proxy([],{get:(t,r)=>"0"===r?e.o.u:"1"===r?e.o.l:void 0,set(t,r,n){if("1"!==r)throw new TypeError("props must be 1");return e.o.l=n,!0}})}copy(){return new e(this.o,this.h,this.container,this.iteratorType)}},s=class extends t.default{constructor(e=[],t,r){super(t,r);let n=this;e.forEach((function(e){n.setElement(e[0],e[1])}))}*K(e){void 0!==e&&(yield*this.K(e.U),yield[e.u,e.l],yield*this.K(e.W))}begin(){return new o(this.h.U||this.h,this.h,this)}end(){return new o(this.h,this.h,this)}rBegin(){return new o(this.h.W||this.h,this.h,this,1)}rEnd(){return new o(this.h,this.h,this,1)}front(){if(0===this.i)return;let e=this.h.U;return[e.u,e.l]}back(){if(0===this.i)return;let e=this.h.W;return[e.u,e.l]}lowerBound(e){let t=this.X(this.Y,e);return new o(t,this.h,this)}upperBound(e){let t=this.Z(this.Y,e);return new o(t,this.h,this)}reverseLowerBound(e){let t=this.$(this.Y,e);return new o(t,this.h,this)}reverseUpperBound(e){let t=this.rr(this.Y,e);return new o(t,this.h,this)}setElement(e,t,r){return this.M(e,t,r)}find(e){let t=this.I(this.Y,e);return new o(t,this.h,this)}getElementByKey(e){return this.I(this.Y,e).l}union(e){let t=this;return e.forEach((function(e){t.setElement(e[0],e[1])})),this.i}[Symbol.iterator](){return this.K(this.Y)}};e.default=s})),Vo=Ge((e=>{$r(),Cr(),Xe(),Object.defineProperty(e,"t",{value:!0}),e.default=function(e){let t=typeof e;return"object"===t&&null!==e||"function"===t}})),Ho=Ge((e=>{$r(),Cr(),Xe(),Object.defineProperty(e,"t",{value:!0}),e.HashContainerIterator=e.HashContainer=void 0;var t,r=Co(),n=(t=Vo())&&t.t?t:{default:t},i=Uo(),o=class extends r.ContainerIterator{constructor(e,t,r){super(r),this.o=e,this.h=t,0===this.iteratorType?(this.pre=function(){return this.o.L===this.h&&(0,i.throwIteratorAccessError)(),this.o=this.o.L,this},this.next=function(){return this.o===this.h&&(0,i.throwIteratorAccessError)(),this.o=this.o.B,this}):(this.pre=function(){return this.o.B===this.h&&(0,i.throwIteratorAccessError)(),this.o=this.o.B,this},this.next=function(){return this.o===this.h&&(0,i.throwIteratorAccessError)(),this.o=this.o.L,this})}};e.HashContainerIterator=o;var s=class extends r.Container{constructor(){super(),this.H=[],this.g={},this.HASH_TAG=Symbol("@@HASH_TAG"),Object.setPrototypeOf(this.g,null),this.h={},this.h.L=this.h.B=this.p=this._=this.h}V(e){let{L:t,B:r}=e;t.B=r,r.L=t,e===this.p&&(this.p=r),e===this._&&(this._=t),this.i-=1}M(e,t,r){let i;if(void 0===r&&(r=(0,n.default)(e)),r){let r=e[this.HASH_TAG];if(void 0!==r)return this.H[r].l=t,this.i;Object.defineProperty(e,this.HASH_TAG,{value:this.H.length,configurable:!0}),i={u:e,l:t,L:this._,B:this.h},this.H.push(i)}else{let r=this.g[e];if(r)return r.l=t,this.i;i={u:e,l:t,L:this._,B:this.h},this.g[e]=i}return 0===this.i?(this.p=i,this.h.B=i):this._.B=i,this._=i,this.h.L=i,++this.i}I(e,t){if(void 0===t&&(t=(0,n.default)(e)),t){let t=e[this.HASH_TAG];return void 0===t?this.h:this.H[t]}return this.g[e]||this.h}clear(){let e=this.HASH_TAG;this.H.forEach((function(t){delete t.u[e]})),this.H=[],this.g={},Object.setPrototypeOf(this.g,null),this.i=0,this.p=this._=this.h.L=this.h.B=this.h}eraseElementByKey(e,t){let r;if(void 0===t&&(t=(0,n.default)(e)),t){let t=e[this.HASH_TAG];if(void 0===t)return!1;delete e[this.HASH_TAG],r=this.H[t],delete this.H[t]}else{if(r=this.g[e],void 0===r)return!1;delete this.g[e]}return this.V(r),!0}eraseElementByIterator(e){let t=e.o;return t===this.h&&(0,i.throwIteratorAccessError)(),this.V(t),e.next()}eraseElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let t=this.p;for(;e--;)t=t.B;return this.V(t),this.i}};e.HashContainer=s})),zo=Ge((e=>{$r(),Cr(),Xe(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var t=Ho(),r=Uo(),n=class e extends t.HashContainerIterator{constructor(e,t,r,n){super(e,t,n),this.container=r}get pointer(){return this.o===this.h&&(0,r.throwIteratorAccessError)(),this.o.u}copy(){return new e(this.o,this.h,this.container,this.iteratorType)}},i=class extends t.HashContainer{constructor(e=[]){super();let t=this;e.forEach((function(e){t.insert(e)}))}begin(){return new n(this.p,this.h,this)}end(){return new n(this.h,this.h,this)}rBegin(){return new n(this._,this.h,this,1)}rEnd(){return new n(this.h,this.h,this,1)}front(){return this.p.u}back(){return this._.u}insert(e,t){return this.M(e,void 0,t)}getElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let t=this.p;for(;e--;)t=t.B;return t.u}find(e,t){let r=this.I(e,t);return new n(r,this.h,this)}forEach(e){let t=0,r=this.p;for(;r!==this.h;)e(r.u,t++,this),r=r.B}[Symbol.iterator](){return function*(){let e=this.p;for(;e!==this.h;)yield e.u,e=e.B}.bind(this)()}};e.default=i})),Yo=Ge((e=>{$r(),Cr(),Xe(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var t,r=Ho(),n=(t=Vo())&&t.t?t:{default:t},i=Uo(),o=class e extends r.HashContainerIterator{constructor(e,t,r,n){super(e,t,n),this.container=r}get pointer(){this.o===this.h&&(0,i.throwIteratorAccessError)();let e=this;return new Proxy([],{get:(t,r)=>"0"===r?e.o.u:"1"===r?e.o.l:void 0,set(t,r,n){if("1"!==r)throw new TypeError("props must be 1");return e.o.l=n,!0}})}copy(){return new e(this.o,this.h,this.container,this.iteratorType)}},s=class extends r.HashContainer{constructor(e=[]){super();let t=this;e.forEach((function(e){t.setElement(e[0],e[1])}))}begin(){return new o(this.p,this.h,this)}end(){return new o(this.h,this.h,this)}rBegin(){return new o(this._,this.h,this,1)}rEnd(){return new o(this.h,this.h,this,1)}front(){if(0!==this.i)return[this.p.u,this.p.l]}back(){if(0!==this.i)return[this._.u,this._.l]}setElement(e,t,r){return this.M(e,t,r)}getElementByKey(e,t){if(void 0===t&&(t=(0,n.default)(e)),t){let t=e[this.HASH_TAG];return void 0!==t?this.H[t].l:void 0}let r=this.g[e];return r?r.l:void 0}getElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let t=this.p;for(;e--;)t=t.B;return[t.u,t.l]}find(e,t){let r=this.I(e,t);return new o(r,this.h,this)}forEach(e){let t=0,r=this.p;for(;r!==this.h;)e([r.u,r.l],t++,this),r=r.B}[Symbol.iterator](){return function*(){let e=this.p;for(;e!==this.h;)yield[e.u,e.l],e=e.B}.bind(this)()}};e.default=s})),Ko=Ge((e=>{$r(),Cr(),Xe(),Object.defineProperty(e,"t",{value:!0}),Object.defineProperty(e,"Deque",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(e,"HashMap",{enumerable:!0,get:function(){return h.default}}),Object.defineProperty(e,"HashSet",{enumerable:!0,get:function(){return u.default}}),Object.defineProperty(e,"LinkList",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(e,"OrderedMap",{enumerable:!0,get:function(){return l.default}}),Object.defineProperty(e,"OrderedSet",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(e,"PriorityQueue",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(e,"Queue",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(e,"Stack",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"Vector",{enumerable:!0,get:function(){return i.default}});var t=c(ko()),r=c(Po()),n=c(Bo()),i=c(Mo()),o=c(No()),s=c(jo()),a=c(qo()),l=c($o()),u=c(zo()),h=c(Yo());function c(e){return e&&e.t?e:{default:e}}})),Go=Ge(((e,t)=>{$r(),Cr(),Xe();var r=Ko().OrderedSet,n=co()("number-allocator:trace"),i=co()("number-allocator:error");function o(e,t){this.low=e,this.high=t}function s(e,t){if(!(this instanceof s))return new s(e,t);this.min=e,this.max=t,this.ss=new r([],((e,t)=>e.compare(t))),n("Create"),this.clear()}o.prototype.equals=function(e){return this.low===e.low&&this.high===e.high},o.prototype.compare=function(e){return this.lowe||(i===e?(this.ss.updateKeyByIterator(r,new o(i+1,s)),n("use():"+e),0):s===e?(this.ss.updateKeyByIterator(r,new o(i,s-1)),n("use():"+e),0):(this.ss.updateKeyByIterator(r,new o(e+1,s)),this.ss.insert(new o(i,e-1)),n("use():"+e),0)))}return n("use():failed"),!1},s.prototype.free=function(e){if(ethis.max)return void i("free():"+e+" is out of range");let t=new o(e,e),r=this.ss.upperBound(t);if(r.equals(this.ss.end())){if(r.equals(this.ss.begin()))return void this.ss.insert(t);r.pre();let n=r.pointer.high;r.pointer.high+1===e?this.ss.updateKeyByIterator(r,new o(n,e)):this.ss.insert(t)}else if(r.equals(this.ss.begin()))if(e+1===r.pointer.low){let t=r.pointer.high;this.ss.updateKeyByIterator(r,new o(e,t))}else this.ss.insert(t);else{let n=r.pointer.low,i=r.pointer.high;r.pre();let s=r.pointer.low;r.pointer.high+1===e?e+1===n?(this.ss.eraseElementByIterator(r),this.ss.updateKeyByIterator(r,new o(s,i))):this.ss.updateKeyByIterator(r,new o(s,e)):e+1===n?(this.ss.eraseElementByIterator(r.next()),this.ss.insert(new o(e,i))):this.ss.insert(t)}n("free():"+e)},s.prototype.clear=function(){n("clear()"),this.ss.clear(),this.ss.insert(new o(this.min,this.max))},s.prototype.intervalCount=function(){return this.ss.size()},s.prototype.dump=function(){console.log("length:"+this.ss.size());for(let e of this.ss)console.log(e)},t.exports=s})),Qo=Ge(((e,t)=>{$r(),Cr(),Xe();var r=Go();t.exports.NumberAllocator=r})),Jo=Ge((e=>{$r(),Cr(),Xe(),Object.defineProperty(e,"__esModule",{value:!0});var t=Oo(),r=Qo();e.default=class{constructor(e){e>0&&(this.aliasToTopic=new t.LRUCache({max:e}),this.topicToAlias={},this.numberAllocator=new r.NumberAllocator(1,e),this.max=e,this.length=0)}put(e,t){if(0===t||t>this.max)return!1;let r=this.aliasToTopic.get(t);return r&&delete this.topicToAlias[r],this.aliasToTopic.set(t,e),this.topicToAlias[e]=t,this.numberAllocator.use(t),this.length=this.aliasToTopic.size,!0}getTopicByAlias(e){return this.aliasToTopic.get(e)}getAliasByTopic(e){let t=this.topicToAlias[e];return typeof t<"u"&&this.aliasToTopic.get(t),t}clear(){this.aliasToTopic.clear(),this.topicToAlias={},this.numberAllocator.clear(),this.length=0}getLruAlias(){return this.numberAllocator.firstVacant()||[...this.aliasToTopic.keys()][this.aliasToTopic.size-1]}}})),Xo=Ge((e=>{$r(),Cr(),Xe();var t=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0});var r=To(),n=t(Jo()),i=Io();e.default=(e,t)=>{e.log("_handleConnack");let{options:o}=e,s=5===o.protocolVersion?t.reasonCode:t.returnCode;if(clearTimeout(e.connackTimer),delete e.topicAliasSend,t.properties){if(t.properties.topicAliasMaximum){if(t.properties.topicAliasMaximum>65535)return void e.emit("error",new Error("topicAliasMaximum from broker is out of range"));t.properties.topicAliasMaximum>0&&(e.topicAliasSend=new n.default(t.properties.topicAliasMaximum))}t.properties.serverKeepAlive&&o.keepalive&&(o.keepalive=t.properties.serverKeepAlive,e._shiftPingInterval()),t.properties.maximumPacketSize&&(o.properties||(o.properties={}),o.properties.maximumPacketSize=t.properties.maximumPacketSize)}if(0===s)e.reconnecting=!1,e._onConnect(t);else if(s>0){let t=new i.ErrorWithReasonCode(`Connection refused: ${r.ReasonCodes[s]}`,s);e.emit("error",t)}}})),Zo=Ge((e=>{$r(),Cr(),Xe(),Object.defineProperty(e,"__esModule",{value:!0}),e.default=(e,t,r)=>{e.log("handling pubrel packet");let n=typeof r<"u"?r:e.noop,{messageId:i}=t,o={cmd:"pubcomp",messageId:i};e.incomingStore.get(t,((t,r)=>{t?e._sendPacket(o,n):(e.emit("message",r.topic,r.payload,r),e.handleMessage(r,(t=>{if(t)return n(t);e.incomingStore.del(r,e.noop),e._sendPacket(o,n)})))}))}})),es=Ge((e=>{$r(),Cr(),Xe();var t=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0});var r=t(Ao()),n=t(Ro()),i=t(Xo()),o=t(To()),s=t(Zo());e.default=(e,t,a)=>{let{options:l}=e;if(5===l.protocolVersion&&l.properties&&l.properties.maximumPacketSize&&l.properties.maximumPacketSize{$r(),Cr(),Xe();var t=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0}),e.TypedEventEmitter=void 0;var r=t((In(),Je(bn))),n=Io(),i=class{};e.TypedEventEmitter=i,(0,n.applyMixin)(i,r.default)})),rs=Ge((e=>{$r(),Cr(),Xe(),Object.defineProperty(e,"__esModule",{value:!0}),e.isReactNativeBrowser=e.isWebWorker=void 0;var t=()=>{var e,t;return!("object"!=typeof self||null===(t=null===(e=self?.constructor)||void 0===e?void 0:e.name)||void 0===t||!t.includes("WorkerGlobalScope"))},r=()=>typeof $e<"u"&&"ReactNative"===$e.product,n=typeof window<"u"&&typeof window.document<"u"||t()||r();e.isWebWorker=t(),e.isReactNativeBrowser=r(),e.default=n})),ns=Ge(((e,t)=>{var n,i;$r(),Cr(),Xe(),n=e,i=function(e){var t,r=void 0===Number.MAX_SAFE_INTEGER?9007199254740991:Number.MAX_SAFE_INTEGER,n=536870912,i=2*n,o=new WeakMap,s=function(e,t){return function(o){var s=t.get(o),a=void 0===s?o.size:sr)throw new Error("Congratulations, you created a collection of unique numbers which uses all available integers!");for(;o.has(a);)a=Math.floor(Math.random()*r);return e(o,a)}}((t=o,function(e,r){return t.set(e,r),r}),o),a=function(e){return function(t){var r=e(t);return t.add(r),r}}(s);e.addUniqueNumber=a,e.generateUniqueNumber=s},"object"==typeof e&&typeof t<"u"?i(e):"function"==typeof define&&r.amdO?define(["exports"],i):i((n=typeof globalThis<"u"?globalThis:n||self).fastUniqueNumbers={})})),is=Ge(((e,t)=>{var n,i;$r(),Cr(),Xe(),n=e,i=function(e,t){e.load=function(e){var r=new Map([[0,function(){}]]),n=new Map([[0,function(){}]]),i=new Map,o=new Worker(e);return o.addEventListener("message",(function(e){var t=e.data;if(function(e){return void 0!==e.method&&"call"===e.method}(t)){var o=t.params,s=o.timerId,a=o.timerType;if("interval"===a){var l=r.get(s);if("number"==typeof l){var u=i.get(l);if(void 0===u||u.timerId!==s||u.timerType!==a)throw new Error("The timer is in an undefined state.")}else{if(!(typeof l<"u"))throw new Error("The timer is in an undefined state.");l()}}else if("timeout"===a){var h=n.get(s);if("number"==typeof h){var c=i.get(h);if(void 0===c||c.timerId!==s||c.timerType!==a)throw new Error("The timer is in an undefined state.")}else{if(!(typeof h<"u"))throw new Error("The timer is in an undefined state.");h(),n.delete(s)}}}else{if(!function(e){return null===e.error&&"number"==typeof e.id}(t)){var f=t.error.message;throw new Error(f)}var p=t.id,d=i.get(p);if(void 0===d)throw new Error("The timer is in an undefined state.");var g=d.timerId,y=d.timerType;i.delete(p),"interval"===y?r.delete(g):n.delete(g)}})),{clearInterval:function(e){var n=t.generateUniqueNumber(i);i.set(n,{timerId:e,timerType:"interval"}),r.set(e,n),o.postMessage({id:n,method:"clear",params:{timerId:e,timerType:"interval"}})},clearTimeout:function(e){var r=t.generateUniqueNumber(i);i.set(r,{timerId:e,timerType:"timeout"}),n.set(e,r),o.postMessage({id:r,method:"clear",params:{timerId:e,timerType:"timeout"}})},setInterval:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=t.generateUniqueNumber(r);return r.set(i,(function(){e(),"function"==typeof r.get(i)&&o.postMessage({id:null,method:"set",params:{delay:n,now:performance.now(),timerId:i,timerType:"interval"}})})),o.postMessage({id:null,method:"set",params:{delay:n,now:performance.now(),timerId:i,timerType:"interval"}}),i},setTimeout:function(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=t.generateUniqueNumber(n);return n.set(i,e),o.postMessage({id:null,method:"set",params:{delay:r,now:performance.now(),timerId:i,timerType:"timeout"}}),i}}}},"object"==typeof e&&typeof t<"u"?i(e,ns()):"function"==typeof define&&r.amdO?define(["exports","fast-unique-numbers"],i):i((n=typeof globalThis<"u"?globalThis:n||self).workerTimersBroker={},n.fastUniqueNumbers)})),os=Ge(((e,t)=>{var n,i;$r(),Cr(),Xe(),n=e,i=function(e,t){var r,n,i=(r=t.load,n=null,function(){if(null!==n)return n;var e=new Blob(['(()=>{var e={472:(e,t,r)=>{var o,i;void 0===(i="function"==typeof(o=function(){"use strict";var e=new Map,t=new Map,r=function(t){var r=e.get(t);if(void 0===r)throw new Error(\'There is no interval scheduled with the given id "\'.concat(t,\'".\'));clearTimeout(r),e.delete(t)},o=function(e){var r=t.get(e);if(void 0===r)throw new Error(\'There is no timeout scheduled with the given id "\'.concat(e,\'".\'));clearTimeout(r),t.delete(e)},i=function(e,t){var r,o=performance.now();return{expected:o+(r=e-Math.max(0,o-t)),remainingDelay:r}},n=function e(t,r,o,i){var n=performance.now();n>o?postMessage({id:null,method:"call",params:{timerId:r,timerType:i}}):t.set(r,setTimeout(e,o-n,t,r,o,i))},a=function(t,r,o){var a=i(t,o),s=a.expected,d=a.remainingDelay;e.set(r,setTimeout(n,d,e,r,s,"interval"))},s=function(e,r,o){var a=i(e,o),s=a.expected,d=a.remainingDelay;t.set(r,setTimeout(n,d,t,r,s,"timeout"))};addEventListener("message",(function(e){var t=e.data;try{if("clear"===t.method){var i=t.id,n=t.params,d=n.timerId,c=n.timerType;if("interval"===c)r(d),postMessage({error:null,id:i});else{if("timeout"!==c)throw new Error(\'The given type "\'.concat(c,\'" is not supported\'));o(d),postMessage({error:null,id:i})}}else{if("set"!==t.method)throw new Error(\'The given method "\'.concat(t.method,\'" is not supported\'));var u=t.params,l=u.delay,p=u.now,m=u.timerId,v=u.timerType;if("interval"===v)a(l,m,p);else{if("timeout"!==v)throw new Error(\'The given type "\'.concat(v,\'" is not supported\'));s(l,m,p)}}}catch(e){postMessage({error:{message:e.message},id:t.id,result:null})}}))})?o.call(t,r,t,e):o)||(e.exports=i)}},t={};function r(o){var i=t[o];if(void 0!==i)return i.exports;var n=t[o]={exports:{}};return e[o](n,n.exports,r),n.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var o in t)r.o(t,o)&&!r.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{"use strict";r(472)})()})();'],{type:"application/javascript; charset=utf-8"}),t=URL.createObjectURL(e);return n=r(t),setTimeout((function(){return URL.revokeObjectURL(t)})),n});e.clearInterval=function(e){return i().clearInterval(e)},e.clearTimeout=function(e){return i().clearTimeout(e)},e.setInterval=function(){var e;return(e=i()).setInterval.apply(e,arguments)},e.setTimeout=function(){var e;return(e=i()).setTimeout.apply(e,arguments)}},"object"==typeof e&&typeof t<"u"?i(e,is()):"function"==typeof define&&r.amdO?define(["exports","worker-timers-broker"],i):i((n=typeof globalThis<"u"?globalThis:n||self).workerTimers={},n.workerTimersBroker)})),ss=Ge((e=>{$r(),Cr(),Xe();var t=e&&e.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),r=e&&e.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=e&&e.__importStar||function(e){if(e&&e.__esModule)return e;var n={};if(null!=e)for(var i in e)"default"!==i&&Object.prototype.hasOwnProperty.call(e,i)&&t(n,e,i);return r(n,e),n};Object.defineProperty(e,"__esModule",{value:!0});var i=n(rs()),o=os(),s={set:o.setTimeout,clear:o.clearTimeout},a={set:(e,t)=>setTimeout(e,t),clear:e=>clearTimeout(e)};e.default=e=>{switch(e){case"native":return a;case"worker":return s;default:return!i.default||i.isWebWorker||i.isReactNativeBrowser?a:s}}})),as=Ge((e=>{$r(),Cr(),Xe();var t=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0});var r=t(ss());e.default=class{constructor(e,t,n){this.keepalive=1e3*e,this.checkPing=t,this.timer=(0,r.default)(n),this.reschedule()}clear(){this.timerId&&(this.timer.clear(this.timerId),this.timerId=null)}reschedule(){this.clear(),this.timerId=this.timer.set((()=>{this.checkPing(),this.timerId&&this.reschedule()}),this.keepalive)}}})),ls=Ge((e=>{$r(),Cr(),Xe();var t=e&&e.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),r=e&&e.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=e&&e.__importStar||function(e){if(e&&e.__esModule)return e;var n={};if(null!=e)for(var i in e)"default"!==i&&Object.prototype.hasOwnProperty.call(e,i)&&t(n,e,i);return r(n,e),n},i=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0});var o=i(Vr()),s=i(bo()),a=i(wo()),l=no(),u=i(vo()),h=n(Eo()),c=i(co()),f=i(So()),p=i(es()),d=Io(),g=ts(),y=i(as()),m=n(rs()),b=globalThis.setImmediate||((...e)=>{let t=e.shift();(0,d.nextTick)((()=>{t(...e)}))}),w={keepalive:60,reschedulePings:!0,protocolId:"MQTT",protocolVersion:4,reconnectPeriod:1e3,connectTimeout:3e4,clean:!0,resubscribe:!0,writeCache:!0,timerVariant:"auto"},_=class e extends g.TypedEventEmitter{static defaultId(){return`mqttjs_${Math.random().toString(16).substr(2,8)}`}constructor(t,r){super(),this.options=r||{};for(let e in w)typeof this.options[e]>"u"?this.options[e]=w[e]:this.options[e]=r[e];this.log=this.options.log||(0,c.default)("mqttjs:client"),this.noop=this._noop.bind(this),this.log("MqttClient :: version:",e.VERSION),m.isWebWorker?this.log("MqttClient :: environment","webworker"):this.log("MqttClient :: environment",m.default?"browser":"node"),this.log("MqttClient :: options.protocol",r.protocol),this.log("MqttClient :: options.protocolVersion",r.protocolVersion),this.log("MqttClient :: options.username",r.username),this.log("MqttClient :: options.keepalive",r.keepalive),this.log("MqttClient :: options.reconnectPeriod",r.reconnectPeriod),this.log("MqttClient :: options.rejectUnauthorized",r.rejectUnauthorized),this.log("MqttClient :: options.properties.topicAliasMaximum",r.properties?r.properties.topicAliasMaximum:void 0),this.options.clientId="string"==typeof r.clientId?r.clientId:e.defaultId(),this.log("MqttClient :: clientId",this.options.clientId),this.options.customHandleAcks=5===r.protocolVersion&&r.customHandleAcks?r.customHandleAcks:(...e)=>{e[3](null,0)},this.options.writeCache||(s.default.writeToStream.cacheNumbers=!1),this.streamBuilder=t,this.messageIdProvider=typeof this.options.messageIdProvider>"u"?new a.default:this.options.messageIdProvider,this.outgoingStore=r.outgoingStore||new f.default,this.incomingStore=r.incomingStore||new f.default,this.queueQoSZero=void 0===r.queueQoSZero||r.queueQoSZero,this._resubscribeTopics={},this.messageIdToTopic={},this.pingTimer=null,this.connected=!1,this.disconnecting=!1,this.reconnecting=!1,this.queue=[],this.connackTimer=null,this.reconnectTimer=null,this._storeProcessing=!1,this._packetIdsDuringStoreProcessing={},this._storeProcessingQueue=[],this.outgoing={},this._firstConnection=!0,r.properties&&r.properties.topicAliasMaximum>0&&(r.properties.topicAliasMaximum>65535?this.log("MqttClient :: options.properties.topicAliasMaximum is out of range"):this.topicAliasRecv=new o.default(r.properties.topicAliasMaximum)),this.on("connect",(()=>{let{queue:e}=this,t=()=>{let r=e.shift();this.log("deliver :: entry %o",r);let n=null;if(!r)return void this._resubscribe();n=r.packet,this.log("deliver :: call _sendPacket for %o",n);let i=!0;n.messageId&&0!==n.messageId&&(this.messageIdProvider.register(n.messageId)||(i=!1)),i?this._sendPacket(n,(e=>{r.cb&&r.cb(e),t()})):(this.log("messageId: %d has already used. The message is skipped and removed.",n.messageId),t())};this.log("connect :: sending queued packets"),t()})),this.on("close",(()=>{this.log("close :: connected set to `false`"),this.connected=!1,this.log("close :: clearing connackTimer"),clearTimeout(this.connackTimer),this.log("close :: clearing ping timer"),this.pingTimer&&(this.pingTimer.clear(),this.pingTimer=null),this.topicAliasRecv&&this.topicAliasRecv.clear(),this.log("close :: calling _setupReconnect"),this._setupReconnect()})),this.options.manualConnect||(this.log("MqttClient :: setting up stream"),this.connect())}handleAuth(e,t){t()}handleMessage(e,t){t()}_nextId(){return this.messageIdProvider.allocate()}getLastMessageId(){return this.messageIdProvider.getLastAllocated()}connect(){var e;let t=new l.Writable,r=s.default.parser(this.options),n=null,i=[];this.log("connect :: calling method to clear reconnect"),this._clearReconnect(),this.log("connect :: using streamBuilder provided to client to create stream"),this.stream=this.streamBuilder(this),r.on("packet",(e=>{this.log("parser :: on packet push to packets array."),i.push(e)}));let o=()=>{this.log("work :: getting next packet in queue");let e=i.shift();if(e)this.log("work :: packet pulled from queue"),(0,p.default)(this,e,a);else{this.log("work :: no packets in queue");let e=n;n=null,this.log("work :: done flag is %s",!!e),e&&e()}},a=()=>{if(i.length)(0,d.nextTick)(o);else{let e=n;n=null,e()}};t._write=(e,t,i)=>{n=i,this.log("writable stream :: parsing buffer"),r.parse(e),o()},this.log("connect :: pipe stream to writable stream"),this.stream.pipe(t),this.stream.on("error",(e=>{this.log("streamErrorHandler :: error",e.message),e.code?(this.log("streamErrorHandler :: emitting error"),this.emit("error",e)):this.noop(e)})),this.stream.on("close",(()=>{this.log("(%s)stream :: on close",this.options.clientId),this._flushVolatile(),this.log("stream: emit close to MqttClient"),this.emit("close")})),this.log("connect: sending packet `connect`");let u={cmd:"connect",protocolId:this.options.protocolId,protocolVersion:this.options.protocolVersion,clean:this.options.clean,clientId:this.options.clientId,keepalive:this.options.keepalive,username:this.options.username,password:this.options.password,properties:this.options.properties};if(this.options.will&&(u.will=Object.assign(Object.assign({},this.options.will),{payload:null===(e=this.options.will)||void 0===e?void 0:e.payload})),this.topicAliasRecv&&(u.properties||(u.properties={}),this.topicAliasRecv&&(u.properties.topicAliasMaximum=this.topicAliasRecv.max)),this._writePacket(u),r.on("error",this.emit.bind(this,"error")),this.options.properties){if(!this.options.properties.authenticationMethod&&this.options.properties.authenticationData)return this.end((()=>this.emit("error",new Error("Packet has no Authentication Method")))),this;if(this.options.properties.authenticationMethod&&this.options.authPacket&&"object"==typeof this.options.authPacket){let e=Object.assign({cmd:"auth",reasonCode:0},this.options.authPacket);this._writePacket(e)}}return this.stream.setMaxListeners(1e3),clearTimeout(this.connackTimer),this.connackTimer=setTimeout((()=>{this.log("!!connectTimeout hit!! Calling _cleanUp with force `true`"),this.emit("error",new Error("connack timeout")),this._cleanUp(!0)}),this.options.connectTimeout),this}publish(e,t,r,n){this.log("publish :: message `%s` to topic `%s`",t,e);let{options:i}=this;"function"==typeof r&&(n=r,r=null),r=r||{},r=Object.assign(Object.assign({},{qos:0,retain:!1,dup:!1}),r);let{qos:o,retain:s,dup:a,properties:l,cbStorePut:u}=r;if(this._checkDisconnecting(n))return this;let h=()=>{let r=0;if((1===o||2===o)&&(r=this._nextId(),null===r))return this.log("No messageId left"),!1;let h={cmd:"publish",topic:e,payload:t,qos:o,retain:s,messageId:r,dup:a};switch(5===i.protocolVersion&&(h.properties=l),this.log("publish :: qos",o),o){case 1:case 2:this.outgoing[h.messageId]={volatile:!1,cb:n||this.noop},this.log("MqttClient:publish: packet cmd: %s",h.cmd),this._sendPacket(h,void 0,u);break;default:this.log("MqttClient:publish: packet cmd: %s",h.cmd),this._sendPacket(h,n,u)}return!0};return(this._storeProcessing||this._storeProcessingQueue.length>0||!h())&&this._storeProcessingQueue.push({invoke:h,cbStorePut:r.cbStorePut,callback:n}),this}publishAsync(e,t,r){return new Promise(((n,i)=>{this.publish(e,t,r,((e,t)=>{e?i(e):n(t)}))}))}subscribe(e,t,r){let n=this.options.protocolVersion;"function"==typeof t&&(r=t),r=r||this.noop;let i=!1,o=[];"string"==typeof e?o=e=[e]:Array.isArray(e)?o=e:"object"==typeof e&&(i=e.resubscribe,delete e.resubscribe,o=Object.keys(e));let s=h.validateTopics(o);if(null!==s)return b(r,new Error(`Invalid topic ${s}`)),this;if(this._checkDisconnecting(r))return this.log("subscribe: discconecting true"),this;let a={qos:0};5===n&&(a.nl=!1,a.rap=!1,a.rh=0);let l=(t=Object.assign(Object.assign({},a),t)).properties,u=[],c=(e,r)=>{if(r=r||t,!Object.prototype.hasOwnProperty.call(this._resubscribeTopics,e)||this._resubscribeTopics[e].qos{this.log("subscribe: array topic %s",e),c(e)})):Object.keys(e).forEach((t=>{this.log("subscribe: object topic %s, %o",t,e[t]),c(t,e[t])})),!u.length)return r(null,[]),this;let f=()=>{let e=this._nextId();if(null===e)return this.log("No messageId left"),!1;let t={cmd:"subscribe",subscriptions:u,messageId:e};if(l&&(t.properties=l),this.options.resubscribe){this.log("subscribe :: resubscribe true");let e=[];u.forEach((t=>{if(this.options.reconnectPeriod>0){let r={qos:t.qos};5===n&&(r.nl=t.nl||!1,r.rap=t.rap||!1,r.rh=t.rh||0,r.properties=t.properties),this._resubscribeTopics[t.topic]=r,e.push(t.topic)}})),this.messageIdToTopic[t.messageId]=e}return this.outgoing[t.messageId]={volatile:!0,cb(e,t){if(!e){let{granted:e}=t;for(let t=0;t0||!f())&&this._storeProcessingQueue.push({invoke:f,callback:r}),this}subscribeAsync(e,t){return new Promise(((r,n)=>{this.subscribe(e,t,((e,t)=>{e?n(e):r(t)}))}))}unsubscribe(e,t,r){"string"==typeof e&&(e=[e]),"function"==typeof t&&(r=t),r=r||this.noop;let n=h.validateTopics(e);if(null!==n)return b(r,new Error(`Invalid topic ${n}`)),this;if(this._checkDisconnecting(r))return this;let i=()=>{let n=this._nextId();if(null===n)return this.log("No messageId left"),!1;let i={cmd:"unsubscribe",messageId:n,unsubscriptions:[]};return"string"==typeof e?i.unsubscriptions=[e]:Array.isArray(e)&&(i.unsubscriptions=e),this.options.resubscribe&&i.unsubscriptions.forEach((e=>{delete this._resubscribeTopics[e]})),"object"==typeof t&&t.properties&&(i.properties=t.properties),this.outgoing[i.messageId]={volatile:!0,cb:r},this.log("unsubscribe: call _sendPacket"),this._sendPacket(i),!0};return(this._storeProcessing||this._storeProcessingQueue.length>0||!i())&&this._storeProcessingQueue.push({invoke:i,callback:r}),this}unsubscribeAsync(e,t){return new Promise(((r,n)=>{this.unsubscribe(e,t,((e,t)=>{e?n(e):r(t)}))}))}end(e,t,r){this.log("end :: (%s)",this.options.clientId),(null==e||"boolean"!=typeof e)&&(r=r||t,t=e,e=!1),"object"!=typeof t&&(r=r||t,t=null),this.log("end :: cb? %s",!!r),(!r||"function"!=typeof r)&&(r=this.noop);let n=()=>{this.log("end :: closeStores: closing incoming and outgoing stores"),this.disconnected=!0,this.incomingStore.close((e=>{this.outgoingStore.close((t=>{if(this.log("end :: closeStores: emitting end"),this.emit("end"),r){let n=e||t;this.log("end :: closeStores: invoking callback with args"),r(n)}}))})),this._deferredReconnect&&this._deferredReconnect()},i=()=>{this.log("end :: (%s) :: finish :: calling _cleanUp with force %s",this.options.clientId,e),this._cleanUp(e,(()=>{this.log("end :: finish :: calling process.nextTick on closeStores"),(0,d.nextTick)(n)}),t)};return this.disconnecting?(r(),this):(this._clearReconnect(),this.disconnecting=!0,!e&&Object.keys(this.outgoing).length>0?(this.log("end :: (%s) :: calling finish in 10ms once outgoing is empty",this.options.clientId),this.once("outgoingEmpty",setTimeout.bind(null,i,10))):(this.log("end :: (%s) :: immediately calling finish",this.options.clientId),i()),this)}endAsync(e,t){return new Promise(((r,n)=>{this.end(e,t,(e=>{e?n(e):r()}))}))}removeOutgoingMessage(e){if(this.outgoing[e]){let{cb:t}=this.outgoing[e];this._removeOutgoingAndStoreMessage(e,(()=>{t(new Error("Message removed"))}))}return this}reconnect(e){this.log("client reconnect");let t=()=>{e?(this.options.incomingStore=e.incomingStore,this.options.outgoingStore=e.outgoingStore):(this.options.incomingStore=null,this.options.outgoingStore=null),this.incomingStore=this.options.incomingStore||new f.default,this.outgoingStore=this.options.outgoingStore||new f.default,this.disconnecting=!1,this.disconnected=!1,this._deferredReconnect=null,this._reconnect()};return this.disconnecting&&!this.disconnected?this._deferredReconnect=t:t(),this}_flushVolatile(){this.outgoing&&(this.log("_flushVolatile :: deleting volatile messages from the queue and setting their callbacks as error function"),Object.keys(this.outgoing).forEach((e=>{this.outgoing[e].volatile&&"function"==typeof this.outgoing[e].cb&&(this.outgoing[e].cb(new Error("Connection closed")),delete this.outgoing[e])})))}_flush(){this.outgoing&&(this.log("_flush: queue exists? %b",!!this.outgoing),Object.keys(this.outgoing).forEach((e=>{"function"==typeof this.outgoing[e].cb&&(this.outgoing[e].cb(new Error("Connection closed")),delete this.outgoing[e])})))}_removeTopicAliasAndRecoverTopicName(e){let t;e.properties&&(t=e.properties.topicAlias);let r=e.topic.toString();if(this.log("_removeTopicAliasAndRecoverTopicName :: alias %d, topic %o",t,r),0===r.length){if(typeof t>"u")return new Error("Unregistered Topic Alias");if(r=this.topicAliasSend.getTopicByAlias(t),typeof r>"u")return new Error("Unregistered Topic Alias");e.topic=r}t&&delete e.properties.topicAlias}_checkDisconnecting(e){return this.disconnecting&&(e&&e!==this.noop?e(new Error("client disconnecting")):this.emit("error",new Error("client disconnecting"))),this.disconnecting}_reconnect(){this.log("_reconnect: emitting reconnect to client"),this.emit("reconnect"),this.connected?(this.end((()=>{this.connect()})),this.log("client already connected. disconnecting first.")):(this.log("_reconnect: calling connect"),this.connect())}_setupReconnect(){!this.disconnecting&&!this.reconnectTimer&&this.options.reconnectPeriod>0?(this.reconnecting||(this.log("_setupReconnect :: emit `offline` state"),this.emit("offline"),this.log("_setupReconnect :: set `reconnecting` to `true`"),this.reconnecting=!0),this.log("_setupReconnect :: setting reconnectTimer for %d ms",this.options.reconnectPeriod),this.reconnectTimer=setInterval((()=>{this.log("reconnectTimer :: reconnect triggered!"),this._reconnect()}),this.options.reconnectPeriod)):this.log("_setupReconnect :: doing nothing...")}_clearReconnect(){this.log("_clearReconnect : clearing reconnect timer"),this.reconnectTimer&&(clearInterval(this.reconnectTimer),this.reconnectTimer=null)}_cleanUp(e,t,r={}){if(t&&(this.log("_cleanUp :: done callback provided for on stream close"),this.stream.on("close",t)),this.log("_cleanUp :: forced? %s",e),e)0===this.options.reconnectPeriod&&this.options.clean&&this._flush(),this.log("_cleanUp :: (%s) :: destroying stream",this.options.clientId),this.stream.destroy();else{let e=Object.assign({cmd:"disconnect"},r);this.log("_cleanUp :: (%s) :: call _sendPacket with disconnect packet",this.options.clientId),this._sendPacket(e,(()=>{this.log("_cleanUp :: (%s) :: destroying stream",this.options.clientId),b((()=>{this.stream.end((()=>{this.log("_cleanUp :: (%s) :: stream destroyed",this.options.clientId)}))}))}))}!this.disconnecting&&!this.reconnecting&&(this.log("_cleanUp :: client not disconnecting/reconnecting. Clearing and resetting reconnect."),this._clearReconnect(),this._setupReconnect()),this.pingTimer&&(this.log("_cleanUp :: clearing pingTimer"),this.pingTimer.clear(),this.pingTimer=null),t&&!this.connected&&(this.log("_cleanUp :: (%s) :: removing stream `done` callback `close` listener",this.options.clientId),this.stream.removeListener("close",t),t())}_storeAndSend(e,t,r){this.log("storeAndSend :: store packet with cmd %s to outgoingStore",e.cmd);let n,i=e;if("publish"===i.cmd&&(i=(0,u.default)(e),n=this._removeTopicAliasAndRecoverTopicName(i),n))return t&&t(n);this.outgoingStore.put(i,(n=>{if(n)return t&&t(n);r(),this._writePacket(e,t)}))}_applyTopicAlias(e){if(5===this.options.protocolVersion&&"publish"===e.cmd){let t;e.properties&&(t=e.properties.topicAlias);let r=e.topic.toString();if(this.topicAliasSend)if(t){if(0!==r.length&&(this.log("applyTopicAlias :: register topic: %s - alias: %d",r,t),!this.topicAliasSend.put(r,t)))return this.log("applyTopicAlias :: error out of range. topic: %s - alias: %d",r,t),new Error("Sending Topic Alias out of range")}else 0!==r.length&&(this.options.autoAssignTopicAlias?(t=this.topicAliasSend.getAliasByTopic(r),t?(e.topic="",e.properties=Object.assign(Object.assign({},e.properties),{topicAlias:t}),this.log("applyTopicAlias :: auto assign(use) topic: %s - alias: %d",r,t)):(t=this.topicAliasSend.getLruAlias(),this.topicAliasSend.put(r,t),e.properties=Object.assign(Object.assign({},e.properties),{topicAlias:t}),this.log("applyTopicAlias :: auto assign topic: %s - alias: %d",r,t))):this.options.autoUseTopicAlias&&(t=this.topicAliasSend.getAliasByTopic(r),t&&(e.topic="",e.properties=Object.assign(Object.assign({},e.properties),{topicAlias:t}),this.log("applyTopicAlias :: auto use topic: %s - alias: %d",r,t))));else if(t)return this.log("applyTopicAlias :: error out of range. topic: %s - alias: %d",r,t),new Error("Sending Topic Alias out of range")}}_noop(e){this.log("noop ::",e)}_writePacket(e,t){this.log("_writePacket :: packet: %O",e),this.log("_writePacket :: emitting `packetsend`"),this.emit("packetsend",e),this._shiftPingInterval(),this.log("_writePacket :: writing to stream");let r=s.default.writeToStream(e,this.stream,this.options);this.log("_writePacket :: writeToStream result %s",r),!r&&t&&t!==this.noop?(this.log("_writePacket :: handle events on `drain` once through callback."),this.stream.once("drain",t)):t&&(this.log("_writePacket :: invoking cb"),t())}_sendPacket(e,t,r,n){this.log("_sendPacket :: (%s) :: start",this.options.clientId),r=r||this.noop,t=t||this.noop;let i=this._applyTopicAlias(e);if(i)t(i);else{if(!this.connected)return"auth"===e.cmd?void this._writePacket(e,t):(this.log("_sendPacket :: client not connected. Storing packet offline."),void this._storePacket(e,t,r));if(n)this._writePacket(e,t);else{switch(e.cmd){case"publish":break;case"pubrel":return void this._storeAndSend(e,t,r);default:return void this._writePacket(e,t)}switch(e.qos){case 2:case 1:this._storeAndSend(e,t,r);break;default:this._writePacket(e,t)}this.log("_sendPacket :: (%s) :: end",this.options.clientId)}}}_storePacket(e,t,r){this.log("_storePacket :: packet: %o",e),this.log("_storePacket :: cb? %s",!!t),r=r||this.noop;let n=e;if("publish"===n.cmd){n=(0,u.default)(e);let r=this._removeTopicAliasAndRecoverTopicName(n);if(r)return t&&t(r)}let i=n.qos||0;0===i&&this.queueQoSZero||"publish"!==n.cmd?this.queue.push({packet:n,cb:t}):i>0?(t=this.outgoing[n.messageId]?this.outgoing[n.messageId].cb:null,this.outgoingStore.put(n,(e=>{if(e)return t&&t(e);r()}))):t&&t(new Error("No connection to broker"))}_setupPingTimer(){this.log("_setupPingTimer :: keepalive %d (seconds)",this.options.keepalive),!this.pingTimer&&this.options.keepalive&&(this.pingResp=!0,this.pingTimer=new y.default(this.options.keepalive,(()=>{this._checkPing()}),this.options.timerVariant))}_shiftPingInterval(){this.pingTimer&&this.options.keepalive&&this.options.reschedulePings&&this.pingTimer.reschedule()}_checkPing(){this.log("_checkPing :: checking ping..."),this.pingResp?(this.log("_checkPing :: ping response received. Clearing flag and sending `pingreq`"),this.pingResp=!1,this._sendPacket({cmd:"pingreq"})):(this.emit("error",new Error("Keepalive timeout")),this.log("_checkPing :: calling _cleanUp with force true"),this._cleanUp(!0))}_resubscribe(){this.log("_resubscribe");let e=Object.keys(this._resubscribeTopics);if(!this._firstConnection&&(this.options.clean||this.options.protocolVersion>=4&&!this.connackPacket.sessionPresent)&&e.length>0)if(this.options.resubscribe)if(5===this.options.protocolVersion){this.log("_resubscribe: protocolVersion 5");for(let t=0;t{let r=this.outgoingStore.createStream(),n=()=>{r.destroy(),r=null,this._flushStoreProcessingQueue(),i()},i=()=>{this._storeProcessing=!1,this._packetIdsDuringStoreProcessing={}};this.once("close",n),r.on("error",(e=>{i(),this._flushStoreProcessingQueue(),this.removeListener("close",n),this.emit("error",e)}));let o=()=>{if(!r)return;let e,t=r.read(1);t?(this._storeProcessing=!0,this._packetIdsDuringStoreProcessing[t.messageId]?o():this.disconnecting||this.reconnectTimer?r.destroy&&r.destroy():(e=this.outgoing[t.messageId]?this.outgoing[t.messageId].cb:null,this.outgoing[t.messageId]={volatile:!1,cb(t,r){e&&e(t,r),o()}},this._packetIdsDuringStoreProcessing[t.messageId]=!0,this.messageIdProvider.register(t.messageId)?this._sendPacket(t,void 0,void 0,!0):this.log("messageId: %d has already used.",t.messageId))):r.once("readable",o)};r.on("end",(()=>{let r=!0;for(let e in this._packetIdsDuringStoreProcessing)if(!this._packetIdsDuringStoreProcessing[e]){r=!1;break}this.removeListener("close",n),r?(i(),this._invokeAllStoreProcessingQueue(),this.emit("connect",e)):t()})),o()};t()}_invokeStoreProcessingQueue(){if(!this._storeProcessing&&this._storeProcessingQueue.length>0){let e=this._storeProcessingQueue[0];if(e&&e.invoke())return this._storeProcessingQueue.shift(),!0}return!1}_invokeAllStoreProcessingQueue(){for(;this._invokeStoreProcessingQueue(););}_flushStoreProcessingQueue(){for(let e of this._storeProcessingQueue)e.cbStorePut&&e.cbStorePut(new Error("Connection closed")),e.callback&&e.callback(new Error("Connection closed"));this._storeProcessingQueue.splice(0)}_removeOutgoingAndStoreMessage(e,t){delete this.outgoing[e],this.outgoingStore.del({messageId:e},((r,n)=>{t(r,n),this.messageIdProvider.deallocate(e),this._invokeStoreProcessingQueue()}))}};_.VERSION="5.5.2",e.default=_})),us=Ge((e=>{$r(),Cr(),Xe(),Object.defineProperty(e,"__esModule",{value:!0});var t=Qo();e.default=class{constructor(){this.numberAllocator=new t.NumberAllocator(1,65535)}allocate(){return this.lastId=this.numberAllocator.alloc(),this.lastId}getLastAllocated(){return this.lastId}register(e){return this.numberAllocator.use(e)}deallocate(e){this.numberAllocator.free(e)}clear(){this.numberAllocator.clear()}}}));function hs(e){throw new RangeError(ys[e])}function cs(e,t){let r=e.split("@"),n="";return r.length>1&&(n=r[0]+"@",e=r[1]),n+function(e,t){let r=[],n=e.length;for(;n--;)r[n]=t(e[n]);return r}((e=e.replace(gs,".")).split("."),t).join(".")}function fs(e){let t=[],r=0,n=e.length;for(;r=55296&&i<=56319&&r{$r(),Cr(),Xe(),ps=/^xn--/,ds=/[^\0-\x7E]/,gs=/[\x2E\u3002\uFF0E\uFF61]/g,ys={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},ms=Math.floor,bs=String.fromCharCode,ws=function(e,t){return e+22+75*(e<26)-((0!=t)<<5)},_s=function(e,t,r){let n=0;for(e=r?ms(e/700):e>>1,e+=ms(e/t);e>455;n+=36)e=ms(e/35);return ms(n+36*e/(e+38))},Es=function(e){let t=[],r=(e=fs(e)).length,n=128,i=0,o=72;for(let r of e)r<128&&t.push(bs(r));let s=t.length,a=s;for(s&&t.push("-");a=n&&tms((2147483647-i)/l)&&hs("overflow"),i+=(r-n)*l,n=r;for(let r of e)if(r2147483647&&hs("overflow"),r==n){let e=i;for(let r=36;;r+=36){let n=r<=o?1:r>=o+26?26:r-o;if(eString.fromCodePoint(...e)},decode:vs=function(e){let t=[],r=e.length,n=0,i=128,o=72,s=e.lastIndexOf("-");s<0&&(s=0);for(let r=0;r=128&&hs("not-basic"),t.push(e.charCodeAt(r));for(let l=s>0?s+1:0;l=r&&hs("invalid-input");let s=(a=e.charCodeAt(l++))-48<10?a-22:a-65<26?a-65:a-97<26?a-97:36;(s>=36||s>ms((2147483647-n)/t))&&hs("overflow"),n+=s*t;let u=i<=o?1:i>=o+26?26:i-o;if(sms(2147483647/h)&&hs("overflow"),t*=h}let u=t.length+1;o=_s(n-s,u,0==s),ms(n/u)>2147483647-i&&hs("overflow"),i+=ms(n/u),n%=u,t.splice(n++,0,i)}var a;return String.fromCodePoint(...t)},encode:Es,toASCII:function(e){return cs(e,(function(e){return ds.test(e)?"xn--"+Es(e):e}))},toUnicode:function(e){return cs(e,(function(e){return ps.test(e)?vs(e.slice(4).toLowerCase()):e}))}}).encode,Ss.toASCII,Ss.toUnicode,Ss.ucs2,Ss.version}));function Is(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var Ts,Rs,Os,Cs,ks=Ke((()=>{$r(),Cr(),Xe(),Ts=function(e,t,r,n){t=t||"&",r=r||"=";var i={};if("string"!=typeof e||0===e.length)return i;var o=/\+/g;e=e.split(t);var s=1e3;n&&"number"==typeof n.maxKeys&&(s=n.maxKeys);var a=e.length;s>0&&a>s&&(a=s);for(var l=0;l=0?(u=p.substr(0,d),h=p.substr(d+1)):(u=p,h=""),c=decodeURIComponent(u),f=decodeURIComponent(h),Is(i,c)?Array.isArray(i[c])?i[c].push(f):i[c]=[i[c],f]:i[c]=f}return i},Rs=function(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}},Os=function(e,t,r,n){return t=t||"&",r=r||"=",null===e&&(e=void 0),"object"==typeof e?Object.keys(e).map((function(n){var i=encodeURIComponent(Rs(n))+r;return Array.isArray(e[n])?e[n].map((function(e){return i+encodeURIComponent(Rs(e))})).join(t):i+encodeURIComponent(Rs(e[n]))})).join(t):n?encodeURIComponent(Rs(n))+r+encodeURIComponent(Rs(e)):""},(Cs={}).decode=Cs.parse=Ts,Cs.encode=Cs.stringify=Os,Cs.decode,Cs.encode,Cs.parse,Cs.stringify}));function Ps(){throw new Error("setTimeout has not been defined")}function Bs(){throw new Error("clearTimeout has not been defined")}function xs(e){if(Ds===setTimeout)return setTimeout(e,0);if((Ds===Ps||!Ds)&&setTimeout)return Ds=setTimeout,setTimeout(e,0);try{return Ds(e,0)}catch{try{return Ds.call(null,e,0)}catch{return Ds.call(this||Ws,e,0)}}}function Us(){Hs&&$s&&(Hs=!1,$s.length?Vs=$s.concat(Vs):zs=-1,Vs.length&&Ls())}function Ls(){if(!Hs){var e=xs(Us);Hs=!0;for(var t=Vs.length;t;){for($s=Vs,Vs=[];++zs{$r(),Cr(),Xe(),Ws=typeof globalThis<"u"?globalThis:typeof self<"u"?self:r.g,qs=js={},function(){try{Ds="function"==typeof setTimeout?setTimeout:Ps}catch{Ds=Ps}try{Fs="function"==typeof clearTimeout?clearTimeout:Bs}catch{Fs=Bs}}(),Vs=[],Hs=!1,zs=-1,qs.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r{$r(),Cr(),Xe(),Gs={},Qs=!1,Js=typeof globalThis<"u"?globalThis:typeof self<"u"?self:r.g,(Xs=function(){if(Qs)return Gs;Qs=!0;var e,t,r=Gs={};function n(){throw new Error("setTimeout has not been defined")}function i(){throw new Error("clearTimeout has not been defined")}function o(t){if(e===setTimeout)return setTimeout(t,0);if((e===n||!e)&&setTimeout)return e=setTimeout,setTimeout(t,0);try{return e(t,0)}catch{try{return e.call(null,t,0)}catch{return e.call(this||Js,t,0)}}}!function(){try{e="function"==typeof setTimeout?setTimeout:n}catch{e=n}try{t="function"==typeof clearTimeout?clearTimeout:i}catch{t=i}}();var s,a=[],l=!1,u=-1;function h(){!l||!s||(l=!1,s.length?a=s.concat(a):u=-1,a.length&&c())}function c(){if(!l){var e=o(h);l=!0;for(var r=a.length;r;){for(s=a,a=[];++u1)for(var r=1;r{$r(),Cr(),Xe(),ra(),Zs={},ea=!1,ta=function(){if(ea)return Zs;ea=!0;var e=Xs;function t(e){if("string"!=typeof e)throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}function r(e,t){for(var r,n="",i=0,o=-1,s=0,a=0;a<=e.length;++a){if(a2){var l=n.lastIndexOf("/");if(l!==n.length-1){-1===l?(n="",i=0):i=(n=n.slice(0,l)).length-1-n.lastIndexOf("/"),o=a,s=0;continue}}else if(2===n.length||1===n.length){n="",i=0,o=a,s=0;continue}t&&(n.length>0?n+="/..":n="..",i=2)}else n.length>0?n+="/"+e.slice(o+1,a):n=e.slice(o+1,a),i=a-o-1;o=a,s=0}else 46===r&&-1!==s?++s:s=-1}return n}var n={resolve:function(){for(var n,i="",o=!1,s=arguments.length-1;s>=-1&&!o;s--){var a;s>=0?a=arguments[s]:(void 0===n&&(n=e.cwd()),a=n),t(a),0!==a.length&&(i=a+"/"+i,o=47===a.charCodeAt(0))}return i=r(i,!o),o?i.length>0?"/"+i:"/":i.length>0?i:"."},normalize:function(e){if(t(e),0===e.length)return".";var n=47===e.charCodeAt(0),i=47===e.charCodeAt(e.length-1);return 0===(e=r(e,!n)).length&&!n&&(e="."),e.length>0&&i&&(e+="/"),n?"/"+e:e},isAbsolute:function(e){return t(e),e.length>0&&47===e.charCodeAt(0)},join:function(){if(0===arguments.length)return".";for(var e,r=0;r0&&(void 0===e?e=i:e+="/"+i)}return void 0===e?".":n.normalize(e)},relative:function(e,r){if(t(e),t(r),e===r||(e=n.resolve(e))===(r=n.resolve(r)))return"";for(var i=1;iu){if(47===r.charCodeAt(a+c))return r.slice(a+c+1);if(0===c)return r.slice(a+c)}else s>u&&(47===e.charCodeAt(i+c)?h=c:0===c&&(h=0));break}var f=e.charCodeAt(i+c);if(f!==r.charCodeAt(a+c))break;47===f&&(h=c)}var p="";for(c=i+h+1;c<=o;++c)(c===o||47===e.charCodeAt(c))&&(0===p.length?p+="..":p+="/..");return p.length>0?p+r.slice(a+h):(a+=h,47===r.charCodeAt(a)&&++a,r.slice(a))},_makeLong:function(e){return e},dirname:function(e){if(t(e),0===e.length)return".";for(var r=e.charCodeAt(0),n=47===r,i=-1,o=!0,s=e.length-1;s>=1;--s)if(47===(r=e.charCodeAt(s))){if(!o){i=s;break}}else o=!1;return-1===i?n?"/":".":n&&1===i?"//":e.slice(0,i)},basename:function(e,r){if(void 0!==r&&"string"!=typeof r)throw new TypeError('"ext" argument must be a string');t(e);var n,i=0,o=-1,s=!0;if(void 0!==r&&r.length>0&&r.length<=e.length){if(r.length===e.length&&r===e)return"";var a=r.length-1,l=-1;for(n=e.length-1;n>=0;--n){var u=e.charCodeAt(n);if(47===u){if(!s){i=n+1;break}}else-1===l&&(s=!1,l=n+1),a>=0&&(u===r.charCodeAt(a)?-1==--a&&(o=n):(a=-1,o=l))}return i===o?o=l:-1===o&&(o=e.length),e.slice(i,o)}for(n=e.length-1;n>=0;--n)if(47===e.charCodeAt(n)){if(!s){i=n+1;break}}else-1===o&&(s=!1,o=n+1);return-1===o?"":e.slice(i,o)},extname:function(e){t(e);for(var r=-1,n=0,i=-1,o=!0,s=0,a=e.length-1;a>=0;--a){var l=e.charCodeAt(a);if(47!==l)-1===i&&(o=!1,i=a+1),46===l?-1===r?r=a:1!==s&&(s=1):-1!==r&&(s=-1);else if(!o){n=a+1;break}}return-1===r||-1===i||0===s||1===s&&r===i-1&&r===n+1?"":e.slice(r,i)},format:function(e){if(null===e||"object"!=typeof e)throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof e);return function(e,t){var r=t.dir||t.root,n=t.base||(t.name||"")+(t.ext||"");return r?r===t.root?r+n:r+"/"+n:n}(0,e)},parse:function(e){t(e);var r={root:"",dir:"",base:"",ext:"",name:""};if(0===e.length)return r;var n,i=e.charCodeAt(0),o=47===i;o?(r.root="/",n=1):n=0;for(var s=-1,a=0,l=-1,u=!0,h=e.length-1,c=0;h>=n;--h)if(47!==(i=e.charCodeAt(h)))-1===l&&(u=!1,l=h+1),46===i?-1===s?s=h:1!==c&&(c=1):-1!==s&&(c=-1);else if(!u){a=h+1;break}return-1===s||-1===l||0===c||1===c&&s===l-1&&s===a+1?-1!==l&&(r.base=r.name=0===a&&o?e.slice(1,l):e.slice(a,l)):(0===a&&o?(r.name=e.slice(1,s),r.base=e.slice(1,l)):(r.name=e.slice(a,s),r.base=e.slice(a,l)),r.ext=e.slice(s,l)),a>0?r.dir=e.slice(0,a-1):o&&(r.dir="/"),r},sep:"/",delimiter:":",win32:null,posix:null};return n.posix=n,Zs=n}()})),ia={};function oa(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}function sa(e,t,r){if(e&&pa.isObject(e)&&e instanceof oa)return e;var n=new oa;return n.parse(e,t,r),n}function aa(e){if("string"==typeof e)e=new URL(e);else if(!(e instanceof URL))throw new Deno.errors.InvalidData("invalid argument path , must be a string or URL");if("file:"!==e.protocol)throw new Deno.errors.InvalidData("invalid url scheme");return La?function(e){let t=e.hostname,r=e.pathname;for(let e=0;eUa||":"!==t)throw new Deno.errors.InvalidData("file url path must be absolute");return r.slice(1)}}(e):function(e){if(""!==e.hostname)throw new Deno.errors.InvalidData("invalid file url hostname");let t=e.pathname;for(let e=0;eXa||":"!==t)throw new Deno.errors.InvalidData("file url path must be absolute");return r.slice(1)}}(e):function(e){if(""!==e.hostname)throw new Deno.errors.InvalidData("invalid file url hostname");let t=e.pathname;for(let e=0;eKa,Url:()=>$a,default:()=>ca,fileURLToPath:()=>ua,format:()=>Va,parse:()=>Ya,pathToFileURL:()=>ha,resolve:()=>Ha,resolveObject:()=>za});var ca,fa,pa,da,ga,ya,ma,ba,wa,_a,va,Ea,Sa,Aa,Ia,Ta,Ra,Oa,Ca,ka,Pa,Ba,xa,Ua,La,Ma,Na,ja,Da,Fa,Wa,qa,$a,Va,Ha,za,Ya,Ka,Ga,Qa,Ja,Xa,Za,el,tl,rl,nl,il,ol,sl=Ke((()=>{$r(),Cr(),Xe(),As(),ks(),Ks(),na(),ra(),fa=Ss,pa={isString:function(e){return"string"==typeof e},isObject:function(e){return"object"==typeof e&&null!==e},isNull:function(e){return null===e},isNullOrUndefined:function(e){return null==e}},(ca={}).parse=sa,ca.resolve=function(e,t){return sa(e,!1,!0).resolve(t)},ca.resolveObject=function(e,t){return e?sa(e,!1,!0).resolveObject(t):t},ca.format=function(e){return pa.isString(e)&&(e=sa(e)),e instanceof oa?e.format():oa.prototype.format.call(e)},ca.Url=oa,da=/^([a-z0-9.+-]+:)/i,ga=/:[0-9]*$/,ya=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,ma=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),ba=["'"].concat(ma),wa=["%","/","?",";","#"].concat(ba),_a=["/","?","#"],va=/^[+a-z0-9A-Z_-]{0,63}$/,Ea=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,Sa={javascript:!0,"javascript:":!0},Aa={javascript:!0,"javascript:":!0},Ia={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},Ta=Cs,oa.prototype.parse=function(e,t,r){if(!pa.isString(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var n=e.indexOf("?"),i=-1!==n&&n127?_+="x":_+=w[v];if(!_.match(va)){var S=m.slice(0,d),A=m.slice(d+1),I=w.match(Ea);I&&(S.push(I[1]),A.unshift(I[2])),A.length&&(s="/"+A.join(".")+s),this.hostname=S.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),y||(this.hostname=fa.toASCII(this.hostname));var T=this.port?":"+this.port:"",R=this.hostname||"";this.host=R+T,this.href+=this.host,y&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==s[0]&&(s="/"+s))}if(!Sa[u])for(d=0,b=ba.length;d0)&&r.host.split("@"))&&(r.auth=I.shift(),r.host=r.hostname=I.shift())),r.search=e.search,r.query=e.query,pa.isNull(r.pathname)&&pa.isNull(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r;if(!w.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var v=w.slice(-1)[0],E=(r.host||e.host||w.length>1)&&("."===v||".."===v)||""===v,S=0,A=w.length;A>=0;A--)"."===(v=w[A])?w.splice(A,1):".."===v?(w.splice(A,1),S++):S&&(w.splice(A,1),S--);if(!m&&!b)for(;S--;S)w.unshift("..");!m||""===w[0]||w[0]&&"/"===w[0].charAt(0)||w.unshift(""),E&&"/"!==w.join("/").substr(-1)&&w.push("");var I,T=""===w[0]||w[0]&&"/"===w[0].charAt(0);return _&&(r.hostname=r.host=T?"":w.length?w.shift():"",(I=!!(r.host&&r.host.indexOf("@")>0)&&r.host.split("@"))&&(r.auth=I.shift(),r.host=r.hostname=I.shift())),(m=m||r.host&&w.length)&&!T&&w.unshift(""),w.length?r.pathname=w.join("/"):(r.pathname=null,r.path=null),pa.isNull(r.pathname)&&pa.isNull(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=e.auth||r.auth,r.slashes=r.slashes||e.slashes,r.href=r.format(),r},oa.prototype.parseHost=function(){var e=this.host,t=ga.exec(e);t&&(":"!==(t=t[0])&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)},ca.Url,ca.format,ca.resolve,ca.resolveObject,Ra={},Oa=!1,Ca=function(){if(Oa)return Ra;Oa=!0;var e=Ys;function t(e){if("string"!=typeof e)throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}function r(e,t){for(var r,n="",i=0,o=-1,s=0,a=0;a<=e.length;++a){if(a2){var l=n.lastIndexOf("/");if(l!==n.length-1){-1===l?(n="",i=0):i=(n=n.slice(0,l)).length-1-n.lastIndexOf("/"),o=a,s=0;continue}}else if(2===n.length||1===n.length){n="",i=0,o=a,s=0;continue}t&&(n.length>0?n+="/..":n="..",i=2)}else n.length>0?n+="/"+e.slice(o+1,a):n=e.slice(o+1,a),i=a-o-1;o=a,s=0}else 46===r&&-1!==s?++s:s=-1}return n}var n={resolve:function(){for(var n,i="",o=!1,s=arguments.length-1;s>=-1&&!o;s--){var a;s>=0?a=arguments[s]:(void 0===n&&(n=e.cwd()),a=n),t(a),0!==a.length&&(i=a+"/"+i,o=47===a.charCodeAt(0))}return i=r(i,!o),o?i.length>0?"/"+i:"/":i.length>0?i:"."},normalize:function(e){if(t(e),0===e.length)return".";var n=47===e.charCodeAt(0),i=47===e.charCodeAt(e.length-1);return 0===(e=r(e,!n)).length&&!n&&(e="."),e.length>0&&i&&(e+="/"),n?"/"+e:e},isAbsolute:function(e){return t(e),e.length>0&&47===e.charCodeAt(0)},join:function(){if(0===arguments.length)return".";for(var e,r=0;r0&&(void 0===e?e=i:e+="/"+i)}return void 0===e?".":n.normalize(e)},relative:function(e,r){if(t(e),t(r),e===r||(e=n.resolve(e))===(r=n.resolve(r)))return"";for(var i=1;iu){if(47===r.charCodeAt(a+c))return r.slice(a+c+1);if(0===c)return r.slice(a+c)}else s>u&&(47===e.charCodeAt(i+c)?h=c:0===c&&(h=0));break}var f=e.charCodeAt(i+c);if(f!==r.charCodeAt(a+c))break;47===f&&(h=c)}var p="";for(c=i+h+1;c<=o;++c)(c===o||47===e.charCodeAt(c))&&(0===p.length?p+="..":p+="/..");return p.length>0?p+r.slice(a+h):(a+=h,47===r.charCodeAt(a)&&++a,r.slice(a))},_makeLong:function(e){return e},dirname:function(e){if(t(e),0===e.length)return".";for(var r=e.charCodeAt(0),n=47===r,i=-1,o=!0,s=e.length-1;s>=1;--s)if(47===(r=e.charCodeAt(s))){if(!o){i=s;break}}else o=!1;return-1===i?n?"/":".":n&&1===i?"//":e.slice(0,i)},basename:function(e,r){if(void 0!==r&&"string"!=typeof r)throw new TypeError('"ext" argument must be a string');t(e);var n,i=0,o=-1,s=!0;if(void 0!==r&&r.length>0&&r.length<=e.length){if(r.length===e.length&&r===e)return"";var a=r.length-1,l=-1;for(n=e.length-1;n>=0;--n){var u=e.charCodeAt(n);if(47===u){if(!s){i=n+1;break}}else-1===l&&(s=!1,l=n+1),a>=0&&(u===r.charCodeAt(a)?-1==--a&&(o=n):(a=-1,o=l))}return i===o?o=l:-1===o&&(o=e.length),e.slice(i,o)}for(n=e.length-1;n>=0;--n)if(47===e.charCodeAt(n)){if(!s){i=n+1;break}}else-1===o&&(s=!1,o=n+1);return-1===o?"":e.slice(i,o)},extname:function(e){t(e);for(var r=-1,n=0,i=-1,o=!0,s=0,a=e.length-1;a>=0;--a){var l=e.charCodeAt(a);if(47!==l)-1===i&&(o=!1,i=a+1),46===l?-1===r?r=a:1!==s&&(s=1):-1!==r&&(s=-1);else if(!o){n=a+1;break}}return-1===r||-1===i||0===s||1===s&&r===i-1&&r===n+1?"":e.slice(r,i)},format:function(e){if(null===e||"object"!=typeof e)throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof e);return function(e,t){var r=t.dir||t.root,n=t.base||(t.name||"")+(t.ext||"");return r?r===t.root?r+n:r+"/"+n:n}(0,e)},parse:function(e){t(e);var r={root:"",dir:"",base:"",ext:"",name:""};if(0===e.length)return r;var n,i=e.charCodeAt(0),o=47===i;o?(r.root="/",n=1):n=0;for(var s=-1,a=0,l=-1,u=!0,h=e.length-1,c=0;h>=n;--h)if(47!==(i=e.charCodeAt(h)))-1===l&&(u=!1,l=h+1),46===i?-1===s?s=h:1!==c&&(c=1):-1!==s&&(c=-1);else if(!u){a=h+1;break}return-1===s||-1===l||0===c||1===c&&s===l-1&&s===a+1?-1!==l&&(r.base=r.name=0===a&&o?e.slice(1,l):e.slice(a,l)):(0===a&&o?(r.name=e.slice(1,s),r.base=e.slice(1,l)):(r.name=e.slice(a,s),r.base=e.slice(a,l)),r.ext=e.slice(s,l)),a>0?r.dir=e.slice(0,a-1):o&&(r.dir="/"),r},sep:"/",delimiter:":",win32:null,posix:null};return n.posix=n,Ra=n}(),ka=typeof Deno<"u"?"windows"===Deno.build.os?"win32":Deno.build.os:void 0,ca.URL=typeof URL<"u"?URL:null,ca.pathToFileURL=la,ca.fileURLToPath=aa,ca.Url,ca.format,ca.resolve,ca.resolveObject,ca.URL,Pa=92,Ba=47,xa=97,Ua=122,La="win32"===ka,Ma=/\//g,Na=/%/g,ja=/\\/g,Da=/\n/g,Fa=/\r/g,Wa=/\t/g,qa=typeof Deno<"u"?"windows"===Deno.build.os?"win32":Deno.build.os:void 0,ca.URL=typeof URL<"u"?URL:null,ca.pathToFileURL=ha,ca.fileURLToPath=ua,$a=ca.Url,Va=ca.format,Ha=ca.resolve,za=ca.resolveObject,Ya=ca.parse,Ka=ca.URL,Ga=92,Qa=47,Ja=97,Xa=122,Za="win32"===qa,el=/\//g,tl=/%/g,rl=/\\/g,nl=/\n/g,il=/\r/g,ol=/\t/g})),al={};function ll(){throw new Error("Node.js net module is not supported by JSPM core outside of Node.js")}Qe(al,{Server:()=>ll,Socket:()=>ll,Stream:()=>ll,_createServerHandle:()=>ll,_normalizeArgs:()=>ll,_setSimultaneousAccepts:()=>ll,connect:()=>ll,createConnection:()=>ll,createServer:()=>ll,default:()=>ul,isIP:()=>ll,isIPv4:()=>ll,isIPv6:()=>ll});var ul,hl=Ke((()=>{$r(),Cr(),Xe(),ul={_createServerHandle:ll,_normalizeArgs:ll,_setSimultaneousAccepts:ll,connect:ll,createConnection:ll,createServer:ll,isIP:ll,isIPv4:ll,isIPv6:ll,Server:ll,Socket:ll,Stream:ll}})),cl=Ge((e=>{$r(),Cr(),Xe();var t=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0});var r=t((hl(),Je(al))),n=(0,t(co()).default)("mqttjs:tcp");e.default=(e,t)=>{t.port=t.port||1883,t.hostname=t.hostname||t.host||"localhost";let{port:i}=t,o=t.hostname;return n("port %d and host %s",i,o),r.default.createConnection(i,o)}})),fl={};Qe(fl,{default:()=>pl});var pl,dl=Ke((()=>{$r(),Cr(),Xe(),pl={}})),gl=Ge((e=>{$r(),Cr(),Xe();var t=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0});var r=t((dl(),Je(fl))),n=t((hl(),Je(al))),i=(0,t(co()).default)("mqttjs:tls");e.default=(e,t)=>{t.port=t.port||8883,t.host=t.hostname||t.host||"localhost",0===n.default.isIP(t.host)&&(t.servername=t.host),t.rejectUnauthorized=!1!==t.rejectUnauthorized,delete t.path,i("port %d host %s rejectUnauthorized %b",t.port,t.host,t.rejectUnauthorized);let o=r.default.connect(t);function s(r){t.rejectUnauthorized&&e.emit("error",r),o.end()}return o.on("secureConnect",(()=>{t.rejectUnauthorized&&!o.authorized?o.emit("error",new Error("TLS not authorized")):o.removeListener("error",s)})),o.on("error",s),o}})),yl=Ge((e=>{$r(),Cr(),Xe(),Object.defineProperty(e,"__esModule",{value:!0}),e.BufferedDuplex=e.writev=void 0;var t=no(),r=(qr(),Je(kr));function n(e,t){let n=new Array(e.length);for(let t=0;t{this.push(e)}))}_read(e){this.proxy.read(e)}_write(e,t,r){this.isSocketOpen?this.writeToProxy(e,t,r):this.writeQueue.push({chunk:e,encoding:t,cb:r})}_final(e){this.writeQueue=[],this.proxy.end(e)}_destroy(e,t){this.writeQueue=[],this.proxy.destroy(),t(e)}socketReady(){this.emit("connect"),this.isSocketOpen=!0,this.processWriteQueue()}writeToProxy(e,t,r){!1===this.proxy.write(e,t)?this.proxy.once("drain",r):r()}processWriteQueue(){for(;this.writeQueue.length>0;){let{chunk:e,encoding:t,cb:r}=this.writeQueue.shift();this.writeToProxy(e,t,r)}}};e.BufferedDuplex=i})),ml=Ge((e=>{$r(),Cr(),Xe(),Object.defineProperty(e,"__esModule",{value:!0});var t,r,n,i=(qr(),Je(kr)),o=no(),s=yl();e.default=(e,a)=>{if(a.hostname=a.hostname||a.host,!a.hostname)throw new Error("Could not determine host. Specify host manually.");let l="MQIsdp"===a.protocolId&&3===a.protocolVersion?"mqttv3.1":"mqtt";!function(e){e.hostname||(e.hostname="localhost"),e.path||(e.path="/"),e.wsOptions||(e.wsOptions={})}(a);let u=function(e,t){let r="wxs"===e.protocol?"wss":"ws",n=`${r}://${e.hostname}${e.path}`;return e.port&&80!==e.port&&443!==e.port&&(n=`${r}://${e.hostname}:${e.port}${e.path}`),"function"==typeof e.transformWsUrl&&(n=e.transformWsUrl(n,e,t)),n}(a,e);t=wx.connectSocket({url:u,protocols:[l]}),r=function(){let e=new o.Transform;return e._write=(e,r,n)=>{t.send({data:e.buffer,success(){n()},fail(e){n(new Error(e))}})},e._flush=e=>{t.close({success(){e()}})},e}(),(n=new s.BufferedDuplex(a,r,t))._destroy=(e,r)=>{t.close({success(){r&&r(e)}})};let h=n.destroy;return n.destroy=(e,r)=>(n.destroy=h,setTimeout((()=>{t.close({fail(){n._destroy(e,r)}})}),0),n),t.onOpen((()=>{n.socketReady()})),t.onMessage((e=>{let{data:t}=e;t=t instanceof ArrayBuffer?i.Buffer.from(t):i.Buffer.from(t,"utf8"),r.push(t)})),t.onClose((()=>{n.emit("close"),n.end(),n.destroy()})),t.onError((e=>{let t=new Error(e.errMsg);n.destroy(t)})),n}})),bl=Ge((e=>{$r(),Cr(),Xe(),Object.defineProperty(e,"__esModule",{value:!0});var t,r,n,i=(qr(),Je(kr)),o=no(),s=yl(),a=!1;e.default=(e,l)=>{if(l.hostname=l.hostname||l.host,!l.hostname)throw new Error("Could not determine host. Specify host manually.");let u="MQIsdp"===l.protocolId&&3===l.protocolVersion?"mqttv3.1":"mqtt";!function(e){e.hostname||(e.hostname="localhost"),e.path||(e.path="/"),e.wsOptions||(e.wsOptions={})}(l);let h=function(e,t){let r="alis"===e.protocol?"wss":"ws",n=`${r}://${e.hostname}${e.path}`;return e.port&&80!==e.port&&443!==e.port&&(n=`${r}://${e.hostname}:${e.port}${e.path}`),"function"==typeof e.transformWsUrl&&(n=e.transformWsUrl(n,e,t)),n}(l,e);return(t=l.my).connectSocket({url:h,protocols:u}),r=function(){let e=new o.Transform;return e._write=(e,r,n)=>{t.sendSocketMessage({data:e.buffer,success(){n()},fail(){n(new Error)}})},e._flush=e=>{t.closeSocket({success(){e()}})},e}(),n=new s.BufferedDuplex(l,r,t),a||(a=!0,t.onSocketOpen((()=>{n.socketReady()})),t.onSocketMessage((e=>{if("string"==typeof e.data){let t=i.Buffer.from(e.data,"base64");r.push(t)}else{let t=new FileReader;t.addEventListener("load",(()=>{let e=t.result;e=e instanceof ArrayBuffer?i.Buffer.from(e):i.Buffer.from(e,"utf8"),r.push(e)})),t.readAsArrayBuffer(e.data)}})),t.onSocketClose((()=>{n.end(),n.destroy()})),t.onSocketError((e=>{n.destroy(e)}))),n}})),wl=Ge(((e,t)=>{$r(),Cr(),Xe(),t.exports=function(){throw new Error("ws does not work in the browser. Browser clients must use the native WebSocket object")}})),_l=Ge((e=>{$r(),Cr(),Xe();var t=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0});var r=(qr(),Je(kr)),n=t(wl()),i=t(co()),o=no(),s=t(rs()),a=yl(),l=(0,i.default)("mqttjs:ws"),u=["rejectUnauthorized","ca","cert","key","pfx","passphrase"];function h(e,t){let r=`${e.protocol}://${e.hostname}:${e.port}${e.path}`;return"function"==typeof e.transformWsUrl&&(r=e.transformWsUrl(r,e,t)),r}function c(e){let t=e;return e.hostname||(t.hostname="localhost"),e.port||("wss"===e.protocol?t.port=443:t.port=80),e.path||(t.path="/"),e.wsOptions||(t.wsOptions={}),!s.default&&"wss"===e.protocol&&u.forEach((r=>{Object.prototype.hasOwnProperty.call(e,r)&&!Object.prototype.hasOwnProperty.call(e.wsOptions,r)&&(t.wsOptions[r]=e[r])})),t}e.default=s.default?(e,t)=>{l("browserStreamBuilder");let n,i=function(e){let t=c(e);if(t.hostname||(t.hostname=t.host),!t.hostname){if(typeof document>"u")throw new Error("Could not determine host. Specify host manually.");let e=new URL(document.URL);t.hostname=e.hostname,t.port||(t.port=Number(e.port))}return void 0===t.objectMode&&(t.objectMode=!(!0===t.binary||void 0===t.binary)),t}(t).browserBufferSize||524288,s=t.browserBufferTimeout||1e3,u=!t.objectMode,f=function(e,t){let r,n="MQIsdp"===t.protocolId&&3===t.protocolVersion?"mqttv3.1":"mqtt",i=h(t,e);return r=t.createWebsocket?t.createWebsocket(i,[n],t):new WebSocket(i,[n]),r.binaryType="arraybuffer",r}(e,t),p=function(e){let t=new o.Transform({objectMode:e.objectMode});return t._write=function e(t,n,o){if(f.bufferedAmount>i)return void setTimeout(e,s,t,n,o);u&&"string"==typeof t&&(t=r.Buffer.from(t,"utf8"));try{f.send(t)}catch(e){return o(e)}o()},t._flush=function(e){f.close(),e()},t}(t);t.objectMode||(p._writev=a.writev.bind(p)),p.on("close",(()=>{f.close()}));let d=typeof f.addEventListener<"u";function g(){l("WebSocket onOpen"),n instanceof a.BufferedDuplex&&n.socketReady()}function y(e){l("WebSocket onClose",e),n.end(),n.destroy()}function m(e){l("WebSocket onError",e);let t=new Error("WebSocket error");t.event=e,n.destroy(t)}function b(e){let{data:t}=e;t=t instanceof ArrayBuffer?r.Buffer.from(t):r.Buffer.from(t,"utf8"),p.push(t)}return f.readyState===f.OPEN?(n=p,n.socket=f):(n=new a.BufferedDuplex(t,p,f),d?f.addEventListener("open",g):f.onopen=g),d?(f.addEventListener("close",y),f.addEventListener("error",m),f.addEventListener("message",b)):(f.onclose=y,f.onerror=m,f.onmessage=b),n}:(e,t)=>{l("streamBuilder");let r=c(t),i=h(r,e),o=function(e,t,r){l("createWebSocket"),l(`protocol: ${r.protocolId} ${r.protocolVersion}`);let i,o="MQIsdp"===r.protocolId&&3===r.protocolVersion?"mqttv3.1":"mqtt";return l(`creating new Websocket for url: ${t} and protocol: ${o}`),i=r.createWebsocket?r.createWebsocket(t,[o],r):new n.default(t,[o],r.wsOptions),i}(0,i,r),s=n.default.createWebSocketStream(o,r.wsOptions);return s.url=i,o.on("close",(()=>{s.destroy()})),s}})),vl=Ge((e=>{$r(),Cr(),Xe();var t=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0}),e.connectAsync=void 0;var r=t(co()),n=t((sl(),Je(ia))),i=t(ls()),o=t(rs()),s=(0,r.default)("mqttjs"),a={};function l(e,t){if(s("connecting to an MQTT broker..."),"object"==typeof e&&!t&&(t=e,e=""),t=t||{},e&&"string"==typeof e){let r=n.default.parse(e,!0);if(null!=r.port&&(r.port=Number(r.port)),null===(t=Object.assign(Object.assign({},r),t)).protocol)throw new Error("Missing protocol");t.protocol=t.protocol.replace(/:$/,"")}if(function(e){let t;e.auth&&(t=e.auth.match(/^(.+):(.+)$/),t?(e.username=t[1],e.password=t[2]):e.username=e.auth)}(t),t.query&&"string"==typeof t.query.clientId&&(t.clientId=t.query.clientId),t.cert&&t.key){if(!t.protocol)throw new Error("Missing secure protocol key");if(-1===["mqtts","wss","wxs","alis"].indexOf(t.protocol))switch(t.protocol){case"mqtt":t.protocol="mqtts";break;case"ws":t.protocol="wss";break;case"wx":t.protocol="wxs";break;case"ali":t.protocol="alis";break;default:throw new Error(`Unknown protocol for secure connection: "${t.protocol}"!`)}}if(!a[t.protocol]){let e=-1!==["mqtts","wss"].indexOf(t.protocol);t.protocol=["mqtt","mqtts","ws","wss","wx","wxs","ali","alis"].filter(((t,r)=>(!e||r%2!=0)&&"function"==typeof a[t]))[0]}if(!1===t.clean&&!t.clientId)throw new Error("Missing clientId for unclean clients");t.protocol&&(t.defaultProtocol=t.protocol);let r=new i.default((function(e){return t.servers&&((!e._reconnectCount||e._reconnectCount===t.servers.length)&&(e._reconnectCount=0),t.host=t.servers[e._reconnectCount].host,t.port=t.servers[e._reconnectCount].port,t.protocol=t.servers[e._reconnectCount].protocol?t.servers[e._reconnectCount].protocol:t.defaultProtocol,t.hostname=t.host,e._reconnectCount++),s("calling streambuilder for",t.protocol),a[t.protocol](e,t)}),t);return r.on("error",(()=>{})),r}o.default?(a.wx=ml().default,a.wxs=ml().default,a.ali=bl().default,a.alis=bl().default):(a.mqtt=cl().default,a.tcp=cl().default,a.ssl=gl().default,a.tls=a.ssl,a.mqtts=gl().default),a.ws=_l().default,a.wss=_l().default,e.connectAsync=function(e,t,r=!0){return new Promise(((n,i)=>{let o=l(e,t),s={connect:e=>{a(),n(o)},end:()=>{a(),n(o)},error:e=>{a(),o.end(),i(e)}};function a(){Object.keys(s).forEach((e=>{o.off(e,s[e])}))}!1===r&&(s.close=()=>{s.error(new Error("Couldn't connect to server"))}),Object.keys(s).forEach((e=>{o.on(e,s[e])}))}))},e.default=l})),El=Ge((e=>{$r(),Cr(),Xe();var t=e&&e.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),r=e&&e.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=e&&e.__importStar||function(e){if(e&&e.__esModule)return e;var n={};if(null!=e)for(var i in e)"default"!==i&&Object.prototype.hasOwnProperty.call(e,i)&&t(n,e,i);return r(n,e),n},i=e&&e.__exportStar||function(e,r){for(var n in e)"default"!==n&&!Object.prototype.hasOwnProperty.call(r,n)&&t(r,e,n)},o=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0}),e.ReasonCodes=e.PingTimer=e.UniqueMessageIdProvider=e.DefaultMessageIdProvider=e.Store=e.MqttClient=e.connectAsync=e.connect=e.Client=void 0;var s=o(ls());e.MqttClient=s.default;var a=o(wo());e.DefaultMessageIdProvider=a.default;var l=o(us());e.UniqueMessageIdProvider=l.default;var u=o(So());e.Store=u.default;var h=n(vl());e.connect=h.default,Object.defineProperty(e,"connectAsync",{enumerable:!0,get:function(){return h.connectAsync}});var c=o(as());e.PingTimer=c.default,e.Client=s.default,i(ls(),e),i(Io(),e);var f=To();Object.defineProperty(e,"ReasonCodes",{enumerable:!0,get:function(){return f.ReasonCodes}})})),Sl=Ge((e=>{$r(),Cr(),Xe();var t=e&&e.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),r=e&&e.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=e&&e.__importStar||function(e){if(e&&e.__esModule)return e;var n={};if(null!=e)for(var i in e)"default"!==i&&Object.prototype.hasOwnProperty.call(e,i)&&t(n,e,i);return r(n,e),n},i=e&&e.__exportStar||function(e,r){for(var n in e)"default"!==n&&!Object.prototype.hasOwnProperty.call(r,n)&&t(r,e,n)};Object.defineProperty(e,"__esModule",{value:!0});var o=n(El());e.default=o,i(El(),e)}))();class Al{connectParams;_sessionDetails;_mqttClient;reconnectRetryLimit=30;reconnectRetries=0;contextListener;constructor(e){this.connectParams=e}get sessionDetails(){return this._sessionDetails}get mqttClient(){return this._mqttClient}async connect(e){const{userId:t,password:r,sourceId:n,platformId:o}=e;let s;try{if(s=await qe.post(`${this.connectParams.url}/sessions`,{userId:t,sourceId:n,platformId:o}),200!==s.status)throw new Error(`Failed to connect to Cloud Interop url: ${this.connectParams.url}`);const{sessionRootTopic:e}=s.data,a={userId:t,sourceId:n,platformId:o,sessionId:s.data.sessionId},l={clientId:s.data.sessionId,clean:!0,protocolVersion:5,will:{topic:"interop/lastwill",payload:i.hp.from(JSON.stringify(a)),qos:0,retain:!1},username:t,password:r};this._mqttClient=await Sl.connectAsync(s.data.mqttUrl,l),this._sessionDetails=s.data,console.log(`Cloud Interop successfully connected to ${this.connectParams.url}`),this._mqttClient.on("error",(e=>{console.error(`Cloud Interop Error: ${e}`)})),this._mqttClient.stream.on("error",(e=>{console.error(`Cloud Interop Connection Error: ${e}`)})),this._mqttClient.on("reconnect",(()=>{console.warn("Cloud Interop attempting reconnection..."),this.reconnectRetries+=1,this.reconnectRetries===this.reconnectRetryLimit&&(console.warn("Cloud Interop reached max reconnection attempts..."),this.disconnect())})),this._mqttClient.on("connect",(()=>{console.log("Cloud Interop successfully reconnected"),this.reconnectRetries=0})),this._mqttClient.on("message",((e,t)=>{this.handleCommand(e,t,this._sessionDetails)})),this._mqttClient.subscribe(`${e}/context-groups/#`),this._mqttClient.subscribe(`${e}/commands`)}catch(e){console.warn(`Failed to connect to Cloud Interop at ${this.connectParams.url}`,e)}}async disconnect(){if(this._sessionDetails)try{const e=await qe.delete(`${this.connectParams.url}/sessions/${this._sessionDetails.sessionId}`);200!==e.status&&console.warn("Cloud Interop disconnection failed",e)}catch(e){console.warn("Cloud Interop error during disconnection",e)}finally{this._mqttClient?.removeAllListeners(),this._mqttClient?.end(!0),this._sessionDetails=void 0,this._mqttClient=void 0,this.reconnectRetries=0}}async setContext(e,t){if(!this._sessionDetails)return;const{userId:r,sourceId:n}=this.connectParams,i={userId:r,sourceId:n,context:t};await qe.post(`${this.connectParams.url}/context-groups/${this._sessionDetails.sessionId}/${e}`,i)}addContextListener(e){this.contextListener=e}startIntentDiscovery(e,t){throw new Error("Method not implemented.")}endIntentDiscovery(e){throw new Error("Method not implemented.")}sendIntentDetail(e,t){throw new Error("Method not implemented.")}raiseIntent(e,t,r){throw new Error("Method not implemented.")}addIntentDetailListener(e){throw new Error("Method not implemented.")}handleCommand(e,t,r){if(0===t.length||!r)return;const n=JSON.parse(t.toString());if(e.startsWith(`${r.sessionRootTopic}/context-groups/`)){if(n.source.sessionId===r.sessionId)return;if(this.contextListener){const{channelName:e,payload:t,source:r}=n;this.contextListener(e,t,r)}}}}function Il(e){return function(e){return null!=e&&"string"==typeof e}(e)&&e.trim().length>0}const Tl={interopOverride:new class{async initialize(e,t,r){this._definition=e;const n=e.data?.loggerName??"OpenfinCloudInterop";this._logger=t(n),this._helpers=r,this._logger.info("Initializing")}async closedown(){this._logger?.info("Closedown")}async getConstructorOverride(e){if(!(Il(this._definition?.data?.userId)&&Il(this._definition?.data?.password)&&Il(this._definition?.data?.platformId)&&Il(this._definition?.data?.url))){const e=`The data setting for the interopOverride module ${this._definition?.id} is missing one of the following settings: userId, password, platformId, url.`;throw this._logger?.error(e),new Error(e)}const t={userId:this._definition?.data?.userId,password:this._definition?.data?.password,platformId:this._definition?.data?.platformId,url:this._definition?.data?.url,realm:this._definition?.data?.realm,sourceDisplayName:this._definition.data.sourceDisplayName,sourceId:Il(this._definition?.data?.sourceId)?this._definition?.data?.sourceId:fin.me.identity.uuid};return await async function(e){const t=new Al(e);try{await t.connect(e)}catch(e){return console.warn(e),e=>class extends e{constructor(){super()}}}return r=>class extends r{constructor(){super(),t.addContextListener(((e,r,n)=>{this.getContextGroups().map((({id:e})=>e)).includes(e)&&t.sessionDetails?.sessionId!==n.sessionId&&super.setContextForGroup({context:r},e)}))}async setContextForGroup({context:e},r){t.setContext(r,e),super.setContextForGroup({context:e},r)}async cloudReconnect(){await t.connect(e)}get cloudConnectionState(){return t.mqttClient?.connected?"connected":t.mqttClient?.reconnecting?"reconnecting":"disconnected"}}}(t)}}};var Rl=n.k;export{Rl as entryPoints}; +var e={991:(e,t)=>{t.byteLength=function(e){var t=a(e),r=t[0],n=t[1];return 3*(r+n)/4-n},t.toByteArray=function(e){var t,r,o=a(e),s=o[0],l=o[1],u=new i(function(e,t,r){return 3*(t+r)/4-r}(0,s,l)),h=0,c=l>0?s-4:s;for(r=0;r>16&255,u[h++]=t>>8&255,u[h++]=255&t;return 2===l&&(t=n[e.charCodeAt(r)]<<2|n[e.charCodeAt(r+1)]>>4,u[h++]=255&t),1===l&&(t=n[e.charCodeAt(r)]<<10|n[e.charCodeAt(r+1)]<<4|n[e.charCodeAt(r+2)]>>2,u[h++]=t>>8&255,u[h++]=255&t),u},t.fromByteArray=function(e){for(var t,n=e.length,i=n%3,o=[],s=16383,a=0,u=n-i;au?u:a+s));return 1===i?(t=e[n-1],o.push(r[t>>2]+r[t<<4&63]+"==")):2===i&&(t=(e[n-2]<<8)+e[n-1],o.push(r[t>>10]+r[t>>4&63]+r[t<<2&63]+"=")),o.join("")};for(var r=[],n=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0;s<64;++s)r[s]=o[s],n[o.charCodeAt(s)]=s;function a(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=e.indexOf("=");return-1===r&&(r=t),[r,r===t?0:4-r%4]}function l(e,t,n){for(var i,o,s=[],a=t;a>18&63]+r[o>>12&63]+r[o>>6&63]+r[63&o]);return s.join("")}n["-".charCodeAt(0)]=62,n["_".charCodeAt(0)]=63},48:(e,t,r)=>{var n=r(991),i=r(318),o=r(815);function s(){return l.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function a(e,t){if(s()=s())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+s().toString(16)+" bytes");return 0|e}function p(e,t){if(l.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var r=e.length;if(0===r)return 0;for(var n=!1;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return F(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return W(e).length;default:if(n)return F(e).length;t=(""+t).toLowerCase(),n=!0}}function g(e,t,r){var n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return k(this,t,r);case"utf8":case"utf-8":return I(this,t,r);case"ascii":return O(this,t,r);case"latin1":case"binary":return C(this,t,r);case"base64":return T(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return P(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function y(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function m(e,t,r,n,i){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=i?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(i)return-1;r=e.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof t&&(t=l.from(t,n)),l.isBuffer(t))return 0===t.length?-1:b(e,t,r,n,i);if("number"==typeof t)return t&=255,l.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):b(e,[t],r,n,i);throw new TypeError("val must be string, number or Buffer")}function b(e,t,r,n,i){var o,s=1,a=e.length,l=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;s=2,a/=2,l/=2,r/=2}function u(e,t){return 1===s?e[t]:e.readUInt16BE(t*s)}if(i){var h=-1;for(o=r;oa&&(r=a-l),o=r;o>=0;o--){for(var c=!0,f=0;fi&&(n=i):n=i;var o=t.length;if(o%2!=0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var s=0;s>8,i=r%256,o.push(i),o.push(n);return o}(t,e.length-r),e,r,n)}function T(e,t,r){return 0===t&&r===e.length?n.fromByteArray(e):n.fromByteArray(e.slice(t,r))}function I(e,t,r){r=Math.min(e.length,r);for(var n=[],i=t;i239?4:u>223?3:u>191?2:1;if(i+c<=r)switch(c){case 1:u<128&&(h=u);break;case 2:128==(192&(o=e[i+1]))&&(l=(31&u)<<6|63&o)>127&&(h=l);break;case 3:o=e[i+1],s=e[i+2],128==(192&o)&&128==(192&s)&&(l=(15&u)<<12|(63&o)<<6|63&s)>2047&&(l<55296||l>57343)&&(h=l);break;case 4:o=e[i+1],s=e[i+2],a=e[i+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(l=(15&u)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&l<1114112&&(h=l)}null===h?(h=65533,c=1):h>65535&&(h-=65536,n.push(h>>>10&1023|55296),h=56320|1023&h),n.push(h),i+=c}return function(e){var t=e.length;if(t<=R)return String.fromCharCode.apply(String,e);for(var r="",n=0;n0&&(e=this.toString("hex",0,r).match(/.{2}/g).join(" "),this.length>r&&(e+=" ... ")),""},l.prototype.compare=function(e,t,r,n,i){if(!l.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),t<0||r>e.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&t>=r)return 0;if(n>=i)return-1;if(t>=r)return 1;if(this===e)return 0;for(var o=(i>>>=0)-(n>>>=0),s=(r>>>=0)-(t>>>=0),a=Math.min(o,s),u=this.slice(n,i),h=e.slice(t,r),c=0;ci)&&(r=i),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return w(this,e,t,r);case"utf8":case"utf-8":return v(this,e,t,r);case"ascii":return _(this,e,t,r);case"latin1":case"binary":return E(this,e,t,r);case"base64":return S(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return A(this,e,t,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},l.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var R=4096;function O(e,t,r){var n="";r=Math.min(e.length,r);for(var i=t;ii)&&(r=i);for(var o="",s=t;sr)throw new RangeError("Trying to access beyond buffer length")}function x(e,t,r,n,i,o){if(!l.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||te.length)throw new RangeError("Index out of range")}function U(e,t,r,n){t<0&&(t=65535+t+1);for(var i=0,o=Math.min(e.length-r,2);i>>8*(n?i:1-i)}function L(e,t,r,n){t<0&&(t=4294967295+t+1);for(var i=0,o=Math.min(e.length-r,4);i>>8*(n?i:3-i)&255}function M(e,t,r,n,i,o){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function N(e,t,r,n,o){return o||M(e,0,r,4),i.write(e,t,r,n,23,4),r+4}function j(e,t,r,n,o){return o||M(e,0,r,8),i.write(e,t,r,n,52,8),r+8}l.prototype.slice=function(e,t){var r,n=this.length;if((e=~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),(t=void 0===t?n:~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),t0&&(i*=256);)n+=this[e+--t]*i;return n},l.prototype.readUInt8=function(e,t){return t||B(e,1,this.length),this[e]},l.prototype.readUInt16LE=function(e,t){return t||B(e,2,this.length),this[e]|this[e+1]<<8},l.prototype.readUInt16BE=function(e,t){return t||B(e,2,this.length),this[e]<<8|this[e+1]},l.prototype.readUInt32LE=function(e,t){return t||B(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},l.prototype.readUInt32BE=function(e,t){return t||B(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},l.prototype.readIntLE=function(e,t,r){e|=0,t|=0,r||B(e,t,this.length);for(var n=this[e],i=1,o=0;++o=(i*=128)&&(n-=Math.pow(2,8*t)),n},l.prototype.readIntBE=function(e,t,r){e|=0,t|=0,r||B(e,t,this.length);for(var n=t,i=1,o=this[e+--n];n>0&&(i*=256);)o+=this[e+--n]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*t)),o},l.prototype.readInt8=function(e,t){return t||B(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},l.prototype.readInt16LE=function(e,t){t||B(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},l.prototype.readInt16BE=function(e,t){t||B(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},l.prototype.readInt32LE=function(e,t){return t||B(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},l.prototype.readInt32BE=function(e,t){return t||B(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},l.prototype.readFloatLE=function(e,t){return t||B(e,4,this.length),i.read(this,e,!0,23,4)},l.prototype.readFloatBE=function(e,t){return t||B(e,4,this.length),i.read(this,e,!1,23,4)},l.prototype.readDoubleLE=function(e,t){return t||B(e,8,this.length),i.read(this,e,!0,52,8)},l.prototype.readDoubleBE=function(e,t){return t||B(e,8,this.length),i.read(this,e,!1,52,8)},l.prototype.writeUIntLE=function(e,t,r,n){e=+e,t|=0,r|=0,n||x(this,e,t,r,Math.pow(2,8*r)-1,0);var i=1,o=0;for(this[t]=255&e;++o=0&&(o*=256);)this[t+i]=e/o&255;return t+r},l.prototype.writeUInt8=function(e,t,r){return e=+e,t|=0,r||x(this,e,t,1,255,0),l.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},l.prototype.writeUInt16LE=function(e,t,r){return e=+e,t|=0,r||x(this,e,t,2,65535,0),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):U(this,e,t,!0),t+2},l.prototype.writeUInt16BE=function(e,t,r){return e=+e,t|=0,r||x(this,e,t,2,65535,0),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):U(this,e,t,!1),t+2},l.prototype.writeUInt32LE=function(e,t,r){return e=+e,t|=0,r||x(this,e,t,4,4294967295,0),l.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):L(this,e,t,!0),t+4},l.prototype.writeUInt32BE=function(e,t,r){return e=+e,t|=0,r||x(this,e,t,4,4294967295,0),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):L(this,e,t,!1),t+4},l.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t|=0,!n){var i=Math.pow(2,8*r-1);x(this,e,t,r,i-1,-i)}var o=0,s=1,a=0;for(this[t]=255&e;++o=0&&(s*=256);)e<0&&0===a&&0!==this[t+o+1]&&(a=1),this[t+o]=(e/s|0)-a&255;return t+r},l.prototype.writeInt8=function(e,t,r){return e=+e,t|=0,r||x(this,e,t,1,127,-128),l.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},l.prototype.writeInt16LE=function(e,t,r){return e=+e,t|=0,r||x(this,e,t,2,32767,-32768),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):U(this,e,t,!0),t+2},l.prototype.writeInt16BE=function(e,t,r){return e=+e,t|=0,r||x(this,e,t,2,32767,-32768),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):U(this,e,t,!1),t+2},l.prototype.writeInt32LE=function(e,t,r){return e=+e,t|=0,r||x(this,e,t,4,2147483647,-2147483648),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):L(this,e,t,!0),t+4},l.prototype.writeInt32BE=function(e,t,r){return e=+e,t|=0,r||x(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):L(this,e,t,!1),t+4},l.prototype.writeFloatLE=function(e,t,r){return N(this,e,t,!0,r)},l.prototype.writeFloatBE=function(e,t,r){return N(this,e,t,!1,r)},l.prototype.writeDoubleLE=function(e,t,r){return j(this,e,t,!0,r)},l.prototype.writeDoubleBE=function(e,t,r){return j(this,e,t,!1,r)},l.prototype.copy=function(e,t,r,n){if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t=0;--i)e[i+t]=this[i+r];else if(o<1e3||!l.TYPED_ARRAY_SUPPORT)for(i=0;i>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(o=t;o55295&&r<57344){if(!i){if(r>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(s+1===n){(t-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(t-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(t-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((t-=1)<0)break;o.push(r)}else if(r<2048){if((t-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function W(e){return n.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(D,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function q(e,t,r,n){for(var i=0;i=t.length||i>=e.length);++i)t[i+r]=e[i];return i}},318:(e,t)=>{t.read=function(e,t,r,n,i){var o,s,a=8*i-n-1,l=(1<>1,h=-7,c=r?i-1:0,f=r?-1:1,d=e[t+c];for(c+=f,o=d&(1<<-h)-1,d>>=-h,h+=a;h>0;o=256*o+e[t+c],c+=f,h-=8);for(s=o&(1<<-h)-1,o>>=-h,h+=n;h>0;s=256*s+e[t+c],c+=f,h-=8);if(0===o)o=1-u;else{if(o===l)return s?NaN:1/0*(d?-1:1);s+=Math.pow(2,n),o-=u}return(d?-1:1)*s*Math.pow(2,o-n)},t.write=function(e,t,r,n,i,o){var s,a,l,u=8*o-i-1,h=(1<>1,f=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,d=n?0:o-1,p=n?1:-1,g=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(a=isNaN(t)?1:0,s=h):(s=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-s))<1&&(s--,l*=2),(t+=s+c>=1?f/l:f*Math.pow(2,1-c))*l>=2&&(s++,l/=2),s+c>=h?(a=0,s=h):s+c>=1?(a=(t*l-1)*Math.pow(2,i),s+=c):(a=t*Math.pow(2,c-1)*Math.pow(2,i),s=0));i>=8;e[r+d]=255&a,d+=p,a/=256,i-=8);for(s=s<0;e[r+d]=255&s,d+=p,s/=256,u-=8);e[r+d-p]|=128*g}},815:e=>{var t={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==t.call(e)}}},t={};function r(n){var i=t[n];if(void 0!==i)return i.exports;var o=t[n]={exports:{}};return e[n](o,o.exports,r),o.exports}r.amdO={},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var n={};r.d(n,{k:()=>fu});var i=r(48);function o(e,t){return function(){return e.apply(t,arguments)}}const{toString:s}=Object.prototype,{getPrototypeOf:a}=Object,l=(u=Object.create(null),e=>{const t=s.call(e);return u[t]||(u[t]=t.slice(8,-1).toLowerCase())});var u;const h=e=>(e=e.toLowerCase(),t=>l(t)===e),c=e=>t=>typeof t===e,{isArray:f}=Array,d=c("undefined"),p=h("ArrayBuffer"),g=c("string"),y=c("function"),m=c("number"),b=e=>null!==e&&"object"==typeof e,w=e=>{if("object"!==l(e))return!1;const t=a(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||Symbol.toStringTag in e||Symbol.iterator in e)},v=h("Date"),_=h("File"),E=h("Blob"),S=h("FileList"),A=h("URLSearchParams"),[T,I,R,O]=["ReadableStream","Request","Response","Headers"].map(h);function C(e,t,{allOwnKeys:r=!1}={}){if(null==e)return;let n,i;if("object"!=typeof e&&(e=[e]),f(e))for(n=0,i=e.length;n0;)if(n=r[i],t===n.toLowerCase())return n;return null}const P="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:r.g,B=e=>!d(e)&&e!==P,x=(U="undefined"!=typeof Uint8Array&&a(Uint8Array),e=>U&&e instanceof U);var U;const L=h("HTMLFormElement"),M=(({hasOwnProperty:e})=>(t,r)=>e.call(t,r))(Object.prototype),N=h("RegExp"),j=(e,t)=>{const r=Object.getOwnPropertyDescriptors(e),n={};C(r,((r,i)=>{let o;!1!==(o=t(r,i,e))&&(n[i]=o||r)})),Object.defineProperties(e,n)},D="abcdefghijklmnopqrstuvwxyz",F="0123456789",W={DIGIT:F,ALPHA:D,ALPHA_DIGIT:D+D.toUpperCase()+F},q=h("AsyncFunction"),$=(H="function"==typeof setImmediate,V=y(P.postMessage),H?setImmediate:V?(z=`axios@${Math.random()}`,K=[],P.addEventListener("message",(({source:e,data:t})=>{e===P&&t===z&&K.length&&K.shift()()}),!1),e=>{K.push(e),P.postMessage(z,"*")}):e=>setTimeout(e));var H,V,z,K;const Y="undefined"!=typeof queueMicrotask?queueMicrotask.bind(P):"undefined"!=typeof process&&process.nextTick||$;var G={isArray:f,isArrayBuffer:p,isBuffer:function(e){return null!==e&&!d(e)&&null!==e.constructor&&!d(e.constructor)&&y(e.constructor.isBuffer)&&e.constructor.isBuffer(e)},isFormData:e=>{let t;return e&&("function"==typeof FormData&&e instanceof FormData||y(e.append)&&("formdata"===(t=l(e))||"object"===t&&y(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&p(e.buffer),t},isString:g,isNumber:m,isBoolean:e=>!0===e||!1===e,isObject:b,isPlainObject:w,isReadableStream:T,isRequest:I,isResponse:R,isHeaders:O,isUndefined:d,isDate:v,isFile:_,isBlob:E,isRegExp:N,isFunction:y,isStream:e=>b(e)&&y(e.pipe),isURLSearchParams:A,isTypedArray:x,isFileList:S,forEach:C,merge:function e(){const{caseless:t}=B(this)&&this||{},r={},n=(n,i)=>{const o=t&&k(r,i)||i;w(r[o])&&w(n)?r[o]=e(r[o],n):w(n)?r[o]=e({},n):f(n)?r[o]=n.slice():r[o]=n};for(let e=0,t=arguments.length;e(C(t,((t,n)=>{r&&y(t)?e[n]=o(t,r):e[n]=t}),{allOwnKeys:n}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,r,n)=>{e.prototype=Object.create(t.prototype,n),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),r&&Object.assign(e.prototype,r)},toFlatObject:(e,t,r,n)=>{let i,o,s;const l={};if(t=t||{},null==e)return t;do{for(i=Object.getOwnPropertyNames(e),o=i.length;o-- >0;)s=i[o],n&&!n(s,e,t)||l[s]||(t[s]=e[s],l[s]=!0);e=!1!==r&&a(e)}while(e&&(!r||r(e,t))&&e!==Object.prototype);return t},kindOf:l,kindOfTest:h,endsWith:(e,t,r)=>{e=String(e),(void 0===r||r>e.length)&&(r=e.length),r-=t.length;const n=e.indexOf(t,r);return-1!==n&&n===r},toArray:e=>{if(!e)return null;if(f(e))return e;let t=e.length;if(!m(t))return null;const r=new Array(t);for(;t-- >0;)r[t]=e[t];return r},forEachEntry:(e,t)=>{const r=(e&&e[Symbol.iterator]).call(e);let n;for(;(n=r.next())&&!n.done;){const r=n.value;t.call(e,r[0],r[1])}},matchAll:(e,t)=>{let r;const n=[];for(;null!==(r=e.exec(t));)n.push(r);return n},isHTMLForm:L,hasOwnProperty:M,hasOwnProp:M,reduceDescriptors:j,freezeMethods:e=>{j(e,((t,r)=>{if(y(e)&&-1!==["arguments","caller","callee"].indexOf(r))return!1;const n=e[r];y(n)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+r+"'")}))}))},toObjectSet:(e,t)=>{const r={},n=e=>{e.forEach((e=>{r[e]=!0}))};return f(e)?n(e):n(String(e).split(t)),r},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(e,t,r){return t.toUpperCase()+r})),noop:()=>{},toFiniteNumber:(e,t)=>null!=e&&Number.isFinite(e=+e)?e:t,findKey:k,global:P,isContextDefined:B,ALPHABET:W,generateString:(e=16,t=W.ALPHA_DIGIT)=>{let r="";const{length:n}=t;for(;e--;)r+=t[Math.random()*n|0];return r},isSpecCompliantForm:function(e){return!!(e&&y(e.append)&&"FormData"===e[Symbol.toStringTag]&&e[Symbol.iterator])},toJSONObject:e=>{const t=new Array(10),r=(e,n)=>{if(b(e)){if(t.indexOf(e)>=0)return;if(!("toJSON"in e)){t[n]=e;const i=f(e)?[]:{};return C(e,((e,t)=>{const o=r(e,n+1);!d(o)&&(i[t]=o)})),t[n]=void 0,i}}return e};return r(e,0)},isAsyncFn:q,isThenable:e=>e&&(b(e)||y(e))&&y(e.then)&&y(e.catch),setImmediate:$,asap:Y};function Q(e,t,r,n,i){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),r&&(this.config=r),n&&(this.request=n),i&&(this.response=i,this.status=i.status?i.status:null)}G.inherits(Q,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:G.toJSONObject(this.config),code:this.code,status:this.status}}});const J=Q.prototype,X={};function Z(e){return G.isPlainObject(e)||G.isArray(e)}function ee(e){return G.endsWith(e,"[]")?e.slice(0,-2):e}function te(e,t,r){return e?e.concat(t).map((function(e,t){return e=ee(e),!r&&t?"["+e+"]":e})).join(r?".":""):t}["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=>{X[e]={value:e}})),Object.defineProperties(Q,X),Object.defineProperty(J,"isAxiosError",{value:!0}),Q.from=(e,t,r,n,i,o)=>{const s=Object.create(J);return G.toFlatObject(e,s,(function(e){return e!==Error.prototype}),(e=>"isAxiosError"!==e)),Q.call(s,e.message,t,r,n,i),s.cause=e,s.name=e.name,o&&Object.assign(s,o),s};const re=G.toFlatObject(G,{},null,(function(e){return/^is[A-Z]/.test(e)}));function ne(e,t,r){if(!G.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const n=(r=G.toFlatObject(r,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!G.isUndefined(t[e])}))).metaTokens,o=r.visitor||h,s=r.dots,a=r.indexes,l=(r.Blob||"undefined"!=typeof Blob&&Blob)&&G.isSpecCompliantForm(t);if(!G.isFunction(o))throw new TypeError("visitor must be a function");function u(e){if(null===e)return"";if(G.isDate(e))return e.toISOString();if(!l&&G.isBlob(e))throw new Q("Blob is not supported. Use a Buffer instead.");return G.isArrayBuffer(e)||G.isTypedArray(e)?l&&"function"==typeof Blob?new Blob([e]):i.hp.from(e):e}function h(e,r,i){let o=e;if(e&&!i&&"object"==typeof e)if(G.endsWith(r,"{}"))r=n?r:r.slice(0,-2),e=JSON.stringify(e);else if(G.isArray(e)&&function(e){return G.isArray(e)&&!e.some(Z)}(e)||(G.isFileList(e)||G.endsWith(r,"[]"))&&(o=G.toArray(e)))return r=ee(r),o.forEach((function(e,n){!G.isUndefined(e)&&null!==e&&t.append(!0===a?te([r],n,s):null===a?r:r+"[]",u(e))})),!1;return!!Z(e)||(t.append(te(i,r,s),u(e)),!1)}const c=[],f=Object.assign(re,{defaultVisitor:h,convertValue:u,isVisitable:Z});if(!G.isObject(e))throw new TypeError("data must be an object");return function e(r,n){if(!G.isUndefined(r)){if(-1!==c.indexOf(r))throw Error("Circular reference detected in "+n.join("."));c.push(r),G.forEach(r,(function(r,i){!0===(!(G.isUndefined(r)||null===r)&&o.call(t,r,G.isString(i)?i.trim():i,n,f))&&e(r,n?n.concat(i):[i])})),c.pop()}}(e),t}function ie(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,(function(e){return t[e]}))}function oe(e,t){this._pairs=[],e&&ne(e,this,t)}const se=oe.prototype;function ae(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function le(e,t,r){if(!t)return e;const n=r&&r.encode||ae,i=r&&r.serialize;let o;if(o=i?i(t,r):G.isURLSearchParams(t)?t.toString():new oe(t,r).toString(n),o){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+o}return e}se.append=function(e,t){this._pairs.push([e,t])},se.toString=function(e){const t=e?function(t){return e.call(this,t,ie)}:ie;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")};class ue{constructor(){this.handlers=[]}use(e,t,r){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!r&&r.synchronous,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){G.forEach(this.handlers,(function(t){null!==t&&e(t)}))}}var he={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},ce={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:oe,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]};const fe="undefined"!=typeof window&&"undefined"!=typeof document,de="object"==typeof navigator&&navigator||void 0,pe=fe&&(!de||["ReactNative","NativeScript","NS"].indexOf(de.product)<0),ge="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,ye=fe&&window.location.href||"http://localhost";var me={...Object.freeze({__proto__:null,hasBrowserEnv:fe,hasStandardBrowserEnv:pe,hasStandardBrowserWebWorkerEnv:ge,navigator:de,origin:ye}),...ce};function be(e){function t(e,r,n,i){let o=e[i++];if("__proto__"===o)return!0;const s=Number.isFinite(+o),a=i>=e.length;return o=!o&&G.isArray(n)?n.length:o,a?(G.hasOwnProp(n,o)?n[o]=[n[o],r]:n[o]=r,!s):(n[o]&&G.isObject(n[o])||(n[o]=[]),t(e,r,n[o],i)&&G.isArray(n[o])&&(n[o]=function(e){const t={},r=Object.keys(e);let n;const i=r.length;let o;for(n=0;n{t(function(e){return G.matchAll(/\w+|\[(\w*)]/g,e).map((e=>"[]"===e[0]?"":e[1]||e[0]))}(e),n,r,0)})),r}return null}const we={transitional:he,adapter:["xhr","http","fetch"],transformRequest:[function(e,t){const r=t.getContentType()||"",n=r.indexOf("application/json")>-1,i=G.isObject(e);if(i&&G.isHTMLForm(e)&&(e=new FormData(e)),G.isFormData(e))return n?JSON.stringify(be(e)):e;if(G.isArrayBuffer(e)||G.isBuffer(e)||G.isStream(e)||G.isFile(e)||G.isBlob(e)||G.isReadableStream(e))return e;if(G.isArrayBufferView(e))return e.buffer;if(G.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let o;if(i){if(r.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return ne(e,new me.classes.URLSearchParams,Object.assign({visitor:function(e,t,r,n){return me.isNode&&G.isBuffer(e)?(this.append(t,e.toString("base64")),!1):n.defaultVisitor.apply(this,arguments)}},t))}(e,this.formSerializer).toString();if((o=G.isFileList(e))||r.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return ne(o?{"files[]":e}:e,t&&new t,this.formSerializer)}}return i||n?(t.setContentType("application/json",!1),function(e){if(G.isString(e))try{return(0,JSON.parse)(e),G.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(0,JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||we.transitional,r=t&&t.forcedJSONParsing,n="json"===this.responseType;if(G.isResponse(e)||G.isReadableStream(e))return e;if(e&&G.isString(e)&&(r&&!this.responseType||n)){const r=!(t&&t.silentJSONParsing)&&n;try{return JSON.parse(e)}catch(e){if(r){if("SyntaxError"===e.name)throw Q.from(e,Q.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:me.classes.FormData,Blob:me.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};G.forEach(["delete","get","head","post","put","patch"],(e=>{we.headers[e]={}}));const ve=G.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"]),_e=Symbol("internals");function Ee(e){return e&&String(e).trim().toLowerCase()}function Se(e){return!1===e||null==e?e:G.isArray(e)?e.map(Se):String(e)}function Ae(e,t,r,n,i){return G.isFunction(n)?n.call(this,t,r):(i&&(t=r),G.isString(t)?G.isString(n)?-1!==t.indexOf(n):G.isRegExp(n)?n.test(t):void 0:void 0)}let Te=class{constructor(e){e&&this.set(e)}set(e,t,r){const n=this;function i(e,t,r){const i=Ee(t);if(!i)throw new Error("header name must be a non-empty string");const o=G.findKey(n,i);(!o||void 0===n[o]||!0===r||void 0===r&&!1!==n[o])&&(n[o||t]=Se(e))}const o=(e,t)=>G.forEach(e,((e,r)=>i(e,r,t)));if(G.isPlainObject(e)||e instanceof this.constructor)o(e,t);else if(G.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim()))o((e=>{const t={};let r,n,i;return e&&e.split("\n").forEach((function(e){i=e.indexOf(":"),r=e.substring(0,i).trim().toLowerCase(),n=e.substring(i+1).trim(),!r||t[r]&&ve[r]||("set-cookie"===r?t[r]?t[r].push(n):t[r]=[n]:t[r]=t[r]?t[r]+", "+n:n)})),t})(e),t);else if(G.isHeaders(e))for(const[t,n]of e.entries())i(n,t,r);else null!=e&&i(t,e,r);return this}get(e,t){if(e=Ee(e)){const r=G.findKey(this,e);if(r){const e=this[r];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),r=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let n;for(;n=r.exec(e);)t[n[1]]=n[2];return t}(e);if(G.isFunction(t))return t.call(this,e,r);if(G.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=Ee(e)){const r=G.findKey(this,e);return!(!r||void 0===this[r]||t&&!Ae(0,this[r],r,t))}return!1}delete(e,t){const r=this;let n=!1;function i(e){if(e=Ee(e)){const i=G.findKey(r,e);!i||t&&!Ae(0,r[i],i,t)||(delete r[i],n=!0)}}return G.isArray(e)?e.forEach(i):i(e),n}clear(e){const t=Object.keys(this);let r=t.length,n=!1;for(;r--;){const i=t[r];e&&!Ae(0,this[i],i,e,!0)||(delete this[i],n=!0)}return n}normalize(e){const t=this,r={};return G.forEach(this,((n,i)=>{const o=G.findKey(r,i);if(o)return t[o]=Se(n),void delete t[i];const s=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((e,t,r)=>t.toUpperCase()+r))}(i):String(i).trim();s!==i&&delete t[i],t[s]=Se(n),r[s]=!0})),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return G.forEach(this,((r,n)=>{null!=r&&!1!==r&&(t[n]=e&&G.isArray(r)?r.join(", "):r)})),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map((([e,t])=>e+": "+t)).join("\n")}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const r=new this(e);return t.forEach((e=>r.set(e))),r}static accessor(e){const t=(this[_e]=this[_e]={accessors:{}}).accessors,r=this.prototype;function n(e){const n=Ee(e);t[n]||(function(e,t){const r=G.toCamelCase(" "+t);["get","set","has"].forEach((n=>{Object.defineProperty(e,n+r,{value:function(e,r,i){return this[n].call(this,t,e,r,i)},configurable:!0})}))}(r,e),t[n]=!0)}return G.isArray(e)?e.forEach(n):n(e),this}};function Ie(e,t){const r=this||we,n=t||r,i=Te.from(n.headers);let o=n.data;return G.forEach(e,(function(e){o=e.call(r,o,i.normalize(),t?t.status:void 0)})),i.normalize(),o}function Re(e){return!(!e||!e.__CANCEL__)}function Oe(e,t,r){Q.call(this,null==e?"canceled":e,Q.ERR_CANCELED,t,r),this.name="CanceledError"}function Ce(e,t,r){const n=r.config.validateStatus;r.status&&n&&!n(r.status)?t(new Q("Request failed with status code "+r.status,[Q.ERR_BAD_REQUEST,Q.ERR_BAD_RESPONSE][Math.floor(r.status/100)-4],r.config,r.request,r)):e(r)}Te.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),G.reduceDescriptors(Te.prototype,(({value:e},t)=>{let r=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[r]=e}}})),G.freezeMethods(Te),G.inherits(Oe,Q,{__CANCEL__:!0});const ke=(e,t,r=3)=>{let n=0;const i=function(e,t){e=e||10;const r=new Array(e),n=new Array(e);let i,o=0,s=0;return t=void 0!==t?t:1e3,function(a){const l=Date.now(),u=n[s];i||(i=l),r[o]=a,n[o]=l;let h=s,c=0;for(;h!==o;)c+=r[h++],h%=e;if(o=(o+1)%e,o===s&&(s=(s+1)%e),l-i{i=o,r=null,n&&(clearTimeout(n),n=null),e.apply(null,t)};return[(...e)=>{const t=Date.now(),a=t-i;a>=o?s(e,t):(r=e,n||(n=setTimeout((()=>{n=null,s(r)}),o-a)))},()=>r&&s(r)]}((r=>{const o=r.loaded,s=r.lengthComputable?r.total:void 0,a=o-n,l=i(a);n=o,e({loaded:o,total:s,progress:s?o/s:void 0,bytes:a,rate:l||void 0,estimated:l&&s&&o<=s?(s-o)/l:void 0,event:r,lengthComputable:null!=s,[t?"download":"upload"]:!0})}),r)},Pe=(e,t)=>{const r=null!=e;return[n=>t[0]({lengthComputable:r,total:e,loaded:n}),t[1]]},Be=e=>(...t)=>G.asap((()=>e(...t)));var xe=me.hasStandardBrowserEnv?function(){const e=me.navigator&&/(msie|trident)/i.test(me.navigator.userAgent),t=document.createElement("a");let r;function n(r){let n=r;return e&&(t.setAttribute("href",n),n=t.href),t.setAttribute("href",n),{href:t.href,protocol:t.protocol?t.protocol.replace(/:$/,""):"",host:t.host,search:t.search?t.search.replace(/^\?/,""):"",hash:t.hash?t.hash.replace(/^#/,""):"",hostname:t.hostname,port:t.port,pathname:"/"===t.pathname.charAt(0)?t.pathname:"/"+t.pathname}}return r=n(window.location.href),function(e){const t=G.isString(e)?n(e):e;return t.protocol===r.protocol&&t.host===r.host}}():function(){return!0},Ue=me.hasStandardBrowserEnv?{write(e,t,r,n,i,o){const s=[e+"="+encodeURIComponent(t)];G.isNumber(r)&&s.push("expires="+new Date(r).toGMTString()),G.isString(n)&&s.push("path="+n),G.isString(i)&&s.push("domain="+i),!0===o&&s.push("secure"),document.cookie=s.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read:()=>null,remove(){}};function Le(e,t){return e&&!/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)?function(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}const Me=e=>e instanceof Te?{...e}:e;function Ne(e,t){t=t||{};const r={};function n(e,t,r){return G.isPlainObject(e)&&G.isPlainObject(t)?G.merge.call({caseless:r},e,t):G.isPlainObject(t)?G.merge({},t):G.isArray(t)?t.slice():t}function i(e,t,r){return G.isUndefined(t)?G.isUndefined(e)?void 0:n(void 0,e,r):n(e,t,r)}function o(e,t){if(!G.isUndefined(t))return n(void 0,t)}function s(e,t){return G.isUndefined(t)?G.isUndefined(e)?void 0:n(void 0,e):n(void 0,t)}function a(r,i,o){return o in t?n(r,i):o in e?n(void 0,r):void 0}const l={url:o,method:o,data:o,baseURL:s,transformRequest:s,transformResponse:s,paramsSerializer:s,timeout:s,timeoutMessage:s,withCredentials:s,withXSRFToken:s,adapter:s,responseType:s,xsrfCookieName:s,xsrfHeaderName:s,onUploadProgress:s,onDownloadProgress:s,decompress:s,maxContentLength:s,maxBodyLength:s,beforeRedirect:s,transport:s,httpAgent:s,httpsAgent:s,cancelToken:s,socketPath:s,responseEncoding:s,validateStatus:a,headers:(e,t)=>i(Me(e),Me(t),!0)};return G.forEach(Object.keys(Object.assign({},e,t)),(function(n){const o=l[n]||i,s=o(e[n],t[n],n);G.isUndefined(s)&&o!==a||(r[n]=s)})),r}var je=e=>{const t=Ne({},e);let r,{data:n,withXSRFToken:i,xsrfHeaderName:o,xsrfCookieName:s,headers:a,auth:l}=t;if(t.headers=a=Te.from(a),t.url=le(Le(t.baseURL,t.url),e.params,e.paramsSerializer),l&&a.set("Authorization","Basic "+btoa((l.username||"")+":"+(l.password?unescape(encodeURIComponent(l.password)):""))),G.isFormData(n))if(me.hasStandardBrowserEnv||me.hasStandardBrowserWebWorkerEnv)a.setContentType(void 0);else if(!1!==(r=a.getContentType())){const[e,...t]=r?r.split(";").map((e=>e.trim())).filter(Boolean):[];a.setContentType([e||"multipart/form-data",...t].join("; "))}if(me.hasStandardBrowserEnv&&(i&&G.isFunction(i)&&(i=i(t)),i||!1!==i&&xe(t.url))){const e=o&&s&&Ue.read(s);e&&a.set(o,e)}return t},De="undefined"!=typeof XMLHttpRequest&&function(e){return new Promise((function(t,r){const n=je(e);let i=n.data;const o=Te.from(n.headers).normalize();let s,a,l,u,h,{responseType:c,onUploadProgress:f,onDownloadProgress:d}=n;function p(){u&&u(),h&&h(),n.cancelToken&&n.cancelToken.unsubscribe(s),n.signal&&n.signal.removeEventListener("abort",s)}let g=new XMLHttpRequest;function y(){if(!g)return;const n=Te.from("getAllResponseHeaders"in g&&g.getAllResponseHeaders());Ce((function(e){t(e),p()}),(function(e){r(e),p()}),{data:c&&"text"!==c&&"json"!==c?g.response:g.responseText,status:g.status,statusText:g.statusText,headers:n,config:e,request:g}),g=null}g.open(n.method.toUpperCase(),n.url,!0),g.timeout=n.timeout,"onloadend"in g?g.onloadend=y:g.onreadystatechange=function(){g&&4===g.readyState&&(0!==g.status||g.responseURL&&0===g.responseURL.indexOf("file:"))&&setTimeout(y)},g.onabort=function(){g&&(r(new Q("Request aborted",Q.ECONNABORTED,e,g)),g=null)},g.onerror=function(){r(new Q("Network Error",Q.ERR_NETWORK,e,g)),g=null},g.ontimeout=function(){let t=n.timeout?"timeout of "+n.timeout+"ms exceeded":"timeout exceeded";const i=n.transitional||he;n.timeoutErrorMessage&&(t=n.timeoutErrorMessage),r(new Q(t,i.clarifyTimeoutError?Q.ETIMEDOUT:Q.ECONNABORTED,e,g)),g=null},void 0===i&&o.setContentType(null),"setRequestHeader"in g&&G.forEach(o.toJSON(),(function(e,t){g.setRequestHeader(t,e)})),G.isUndefined(n.withCredentials)||(g.withCredentials=!!n.withCredentials),c&&"json"!==c&&(g.responseType=n.responseType),d&&([l,h]=ke(d,!0),g.addEventListener("progress",l)),f&&g.upload&&([a,u]=ke(f),g.upload.addEventListener("progress",a),g.upload.addEventListener("loadend",u)),(n.cancelToken||n.signal)&&(s=t=>{g&&(r(!t||t.type?new Oe(null,e,g):t),g.abort(),g=null)},n.cancelToken&&n.cancelToken.subscribe(s),n.signal&&(n.signal.aborted?s():n.signal.addEventListener("abort",s)));const m=function(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(n.url);m&&-1===me.protocols.indexOf(m)?r(new Q("Unsupported protocol "+m+":",Q.ERR_BAD_REQUEST,e)):g.send(i||null)}))};const Fe=(e,t)=>{const{length:r}=e=e?e.filter(Boolean):[];if(t||r){let r,n=new AbortController;const i=function(e){if(!r){r=!0,s();const t=e instanceof Error?e:this.reason;n.abort(t instanceof Q?t:new Oe(t instanceof Error?t.message:t))}};let o=t&&setTimeout((()=>{o=null,i(new Q(`timeout ${t} of ms exceeded`,Q.ETIMEDOUT))}),t);const s=()=>{e&&(o&&clearTimeout(o),o=null,e.forEach((e=>{e.unsubscribe?e.unsubscribe(i):e.removeEventListener("abort",i)})),e=null)};e.forEach((e=>e.addEventListener("abort",i)));const{signal:a}=n;return a.unsubscribe=()=>G.asap(s),a}},We=function*(e,t){let r=e.byteLength;if(r{const i=async function*(e,t){for await(const r of async function*(e){if(e[Symbol.asyncIterator])return void(yield*e);const t=e.getReader();try{for(;;){const{done:e,value:r}=await t.read();if(e)break;yield r}}finally{await t.cancel()}}(e))yield*We(r,t)}(e,t);let o,s=0,a=e=>{o||(o=!0,n&&n(e))};return new ReadableStream({async pull(e){try{const{done:t,value:n}=await i.next();if(t)return a(),void e.close();let o=n.byteLength;if(r){let e=s+=o;r(e)}e.enqueue(new Uint8Array(n))}catch(e){throw a(e),e}},cancel:e=>(a(e),i.return())},{highWaterMark:2})},$e="function"==typeof fetch&&"function"==typeof Request&&"function"==typeof Response,He=$e&&"function"==typeof ReadableStream,Ve=$e&&("function"==typeof TextEncoder?(ze=new TextEncoder,e=>ze.encode(e)):async e=>new Uint8Array(await new Response(e).arrayBuffer()));var ze;const Ke=(e,...t)=>{try{return!!e(...t)}catch(e){return!1}},Ye=He&&Ke((()=>{let e=!1;const t=new Request(me.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t})),Ge=He&&Ke((()=>G.isReadableStream(new Response("").body))),Qe={stream:Ge&&(e=>e.body)};var Je;$e&&(Je=new Response,["text","arrayBuffer","blob","formData","stream"].forEach((e=>{!Qe[e]&&(Qe[e]=G.isFunction(Je[e])?t=>t[e]():(t,r)=>{throw new Q(`Response type '${e}' is not supported`,Q.ERR_NOT_SUPPORT,r)})})));const Xe={http:null,xhr:De,fetch:$e&&(async e=>{let{url:t,method:r,data:n,signal:i,cancelToken:o,timeout:s,onDownloadProgress:a,onUploadProgress:l,responseType:u,headers:h,withCredentials:c="same-origin",fetchOptions:f}=je(e);u=u?(u+"").toLowerCase():"text";let d,p=Fe([i,o&&o.toAbortSignal()],s);const g=p&&p.unsubscribe&&(()=>{p.unsubscribe()});let y;try{if(l&&Ye&&"get"!==r&&"head"!==r&&0!==(y=await(async(e,t)=>{const r=G.toFiniteNumber(e.getContentLength());return null==r?(async e=>{if(null==e)return 0;if(G.isBlob(e))return e.size;if(G.isSpecCompliantForm(e)){const t=new Request(me.origin,{method:"POST",body:e});return(await t.arrayBuffer()).byteLength}return G.isArrayBufferView(e)||G.isArrayBuffer(e)?e.byteLength:(G.isURLSearchParams(e)&&(e+=""),G.isString(e)?(await Ve(e)).byteLength:void 0)})(t):r})(h,n))){let e,r=new Request(t,{method:"POST",body:n,duplex:"half"});if(G.isFormData(n)&&(e=r.headers.get("content-type"))&&h.setContentType(e),r.body){const[e,t]=Pe(y,ke(Be(l)));n=qe(r.body,65536,e,t)}}G.isString(c)||(c=c?"include":"omit");const i="credentials"in Request.prototype;d=new Request(t,{...f,signal:p,method:r.toUpperCase(),headers:h.normalize().toJSON(),body:n,duplex:"half",credentials:i?c:void 0});let o=await fetch(d);const s=Ge&&("stream"===u||"response"===u);if(Ge&&(a||s&&g)){const e={};["status","statusText","headers"].forEach((t=>{e[t]=o[t]}));const t=G.toFiniteNumber(o.headers.get("content-length")),[r,n]=a&&Pe(t,ke(Be(a),!0))||[];o=new Response(qe(o.body,65536,r,(()=>{n&&n(),g&&g()})),e)}u=u||"text";let m=await Qe[G.findKey(Qe,u)||"text"](o,e);return!s&&g&&g(),await new Promise(((t,r)=>{Ce(t,r,{data:m,headers:Te.from(o.headers),status:o.status,statusText:o.statusText,config:e,request:d})}))}catch(t){if(g&&g(),t&&"TypeError"===t.name&&/fetch/i.test(t.message))throw Object.assign(new Q("Network Error",Q.ERR_NETWORK,e,d),{cause:t.cause||t});throw Q.from(t,t&&t.code,e,d)}})};G.forEach(Xe,((e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(e){}Object.defineProperty(e,"adapterName",{value:t})}}));const Ze=e=>`- ${e}`,et=e=>G.isFunction(e)||null===e||!1===e;var tt=e=>{e=G.isArray(e)?e:[e];const{length:t}=e;let r,n;const i={};for(let o=0;o`adapter ${e} `+(!1===t?"is not supported by the environment":"is not available in the build")));throw new Q("There is no suitable adapter to dispatch the request "+(t?e.length>1?"since :\n"+e.map(Ze).join("\n"):" "+Ze(e[0]):"as no adapter specified"),"ERR_NOT_SUPPORT")}return n};function rt(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Oe(null,e)}function nt(e){return rt(e),e.headers=Te.from(e.headers),e.data=Ie.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1),tt(e.adapter||we.adapter)(e).then((function(t){return rt(e),t.data=Ie.call(e,e.transformResponse,t),t.headers=Te.from(t.headers),t}),(function(t){return Re(t)||(rt(e),t&&t.response&&(t.response.data=Ie.call(e,e.transformResponse,t.response),t.response.headers=Te.from(t.response.headers))),Promise.reject(t)}))}const it={};["object","boolean","number","function","string","symbol"].forEach(((e,t)=>{it[e]=function(r){return typeof r===e||"a"+(t<1?"n ":" ")+e}}));const ot={};it.transitional=function(e,t,r){function n(e,t){return"[Axios v1.7.7] Transitional option '"+e+"'"+t+(r?". "+r:"")}return(r,i,o)=>{if(!1===e)throw new Q(n(i," has been removed"+(t?" in "+t:"")),Q.ERR_DEPRECATED);return t&&!ot[i]&&(ot[i]=!0,console.warn(n(i," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(r,i,o)}};var st={assertOptions:function(e,t,r){if("object"!=typeof e)throw new Q("options must be an object",Q.ERR_BAD_OPTION_VALUE);const n=Object.keys(e);let i=n.length;for(;i-- >0;){const o=n[i],s=t[o];if(s){const t=e[o],r=void 0===t||s(t,o,e);if(!0!==r)throw new Q("option "+o+" must be "+r,Q.ERR_BAD_OPTION_VALUE)}else if(!0!==r)throw new Q("Unknown option "+o,Q.ERR_BAD_OPTION)}},validators:it};const at=st.validators;let lt=class{constructor(e){this.defaults=e,this.interceptors={request:new ue,response:new ue}}async request(e,t){try{return await this._request(e,t)}catch(e){if(e instanceof Error){let t;Error.captureStackTrace?Error.captureStackTrace(t={}):t=new Error;const r=t.stack?t.stack.replace(/^.+\n/,""):"";try{e.stack?r&&!String(e.stack).endsWith(r.replace(/^.+\n.+\n/,""))&&(e.stack+="\n"+r):e.stack=r}catch(e){}}throw e}}_request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=Ne(this.defaults,t);const{transitional:r,paramsSerializer:n,headers:i}=t;void 0!==r&&st.assertOptions(r,{silentJSONParsing:at.transitional(at.boolean),forcedJSONParsing:at.transitional(at.boolean),clarifyTimeoutError:at.transitional(at.boolean)},!1),null!=n&&(G.isFunction(n)?t.paramsSerializer={serialize:n}:st.assertOptions(n,{encode:at.function,serialize:at.function},!0)),t.method=(t.method||this.defaults.method||"get").toLowerCase();let o=i&&G.merge(i.common,i[t.method]);i&&G.forEach(["delete","get","head","post","put","patch","common"],(e=>{delete i[e]})),t.headers=Te.concat(o,i);const s=[];let a=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(a=a&&e.synchronous,s.unshift(e.fulfilled,e.rejected))}));const l=[];let u;this.interceptors.response.forEach((function(e){l.push(e.fulfilled,e.rejected)}));let h,c=0;if(!a){const e=[nt.bind(this),void 0];for(e.unshift.apply(e,s),e.push.apply(e,l),h=e.length,u=Promise.resolve(t);c{ut[t]=e}));const ht=function e(t){const r=new lt(t),n=o(lt.prototype.request,r);return G.extend(n,lt.prototype,r,{allOwnKeys:!0}),G.extend(n,r,null,{allOwnKeys:!0}),n.create=function(r){return e(Ne(t,r))},n}(we);ht.Axios=lt,ht.CanceledError=Oe,ht.CancelToken=class e{constructor(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");let t;this.promise=new Promise((function(e){t=e}));const r=this;this.promise.then((e=>{if(!r._listeners)return;let t=r._listeners.length;for(;t-- >0;)r._listeners[t](e);r._listeners=null})),this.promise.then=e=>{let t;const n=new Promise((e=>{r.subscribe(e),t=e})).then(e);return n.cancel=function(){r.unsubscribe(t)},n},e((function(e,n,i){r.reason||(r.reason=new Oe(e,n,i),t(r.reason))}))}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}toAbortSignal(){const e=new AbortController,t=t=>{e.abort(t)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let t;return{token:new e((function(e){t=e})),cancel:t}}},ht.isCancel=Re,ht.VERSION="1.7.7",ht.toFormData=ne,ht.AxiosError=Q,ht.Cancel=ht.CanceledError,ht.all=function(e){return Promise.all(e)},ht.spread=function(e){return function(t){return e.apply(null,t)}},ht.isAxiosError=function(e){return G.isObject(e)&&!0===e.isAxiosError},ht.mergeConfig=Ne,ht.AxiosHeaders=Te,ht.formToJSON=e=>be(G.isHTMLForm(e)?new FormData(e):e),ht.getAdapter=tt,ht.HttpStatusCode=ut,ht.default=ht;const{Axios:ct,AxiosError:ft,CanceledError:dt,isCancel:pt,CancelToken:gt,VERSION:yt,all:mt,Cancel:bt,isAxiosError:wt,spread:vt,toFormData:_t,AxiosHeaders:Et,HttpStatusCode:St,formToJSON:At,getAdapter:Tt,mergeConfig:It}=ht;var Rt=Object.defineProperty,Ot=Object.getOwnPropertyDescriptor,Ct=Object.getOwnPropertyNames,kt=Object.prototype.hasOwnProperty,Pt=(e,t)=>()=>(e&&(t=e(e=0)),t),Bt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),xt=(e,t)=>{for(var r in t)Rt(e,r,{get:t[r],enumerable:!0})},Ut=e=>((e,t,r,n)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let r of Ct(t))!kt.call(e,r)&&undefined!==r&&Rt(e,r,{get:()=>t[r],enumerable:!(n=Ot(t,r))||n.enumerable});return e})(Rt({},"__esModule",{value:!0}),e),Lt=Pt((()=>{})),Mt={};function Nt(e){throw new Error("Node.js process "+e+" is not supported by JSPM core outside of Node.js")}function jt(){!er||!tr||(er=!1,tr.length?Zt=tr.concat(Zt):rr=-1,Zt.length&&Dt())}function Dt(){if(!er){var e=setTimeout(jt,0);er=!0;for(var t=Zt.length;t;){for(tr=Zt,Zt=[];++rr1)for(var r=1;rMr,_debugProcess:()=>Lr,_events:()=>en,_eventsCount:()=>tn,_exiting:()=>vr,_fatalExceptions:()=>Br,_getActiveHandles:()=>zt,_getActiveRequests:()=>Vt,_kill:()=>Sr,_linkedBinding:()=>$t,_maxListeners:()=>Zr,_preload_modules:()=>Yr,_rawDebug:()=>mr,_startProfilerIdleNotifier:()=>Nr,_stopProfilerIdleNotifier:()=>jr,_tickCallback:()=>Ur,abort:()=>qr,addListener:()=>rn,allowedNodeEnvironmentFlags:()=>kr,arch:()=>ir,argv:()=>ar,argv0:()=>Kr,assert:()=>Kt,binding:()=>fr,chdir:()=>gr,config:()=>_r,cpuUsage:()=>Ar,cwd:()=>pr,debugPort:()=>zr,default:()=>cn,dlopen:()=>Ht,domain:()=>wr,emit:()=>ln,emitWarning:()=>cr,env:()=>sr,execArgv:()=>lr,execPath:()=>Vr,exit:()=>Or,features:()=>Pr,hasUncaughtExceptionCaptureCallback:()=>Yt,hrtime:()=>Qt,kill:()=>Rr,listeners:()=>Xt,memoryUsage:()=>Ir,moduleLoadList:()=>br,nextTick:()=>Ft,off:()=>on,on:()=>Jt,once:()=>nn,openStdin:()=>Cr,pid:()=>$r,platform:()=>or,ppid:()=>Hr,prependListener:()=>un,prependOnceListener:()=>hn,reallyExit:()=>Er,release:()=>yr,removeAllListeners:()=>an,removeListener:()=>sn,resourceUsage:()=>Tr,setSourceMapsEnabled:()=>Gr,setUncaughtExceptionCaptureCallback:()=>xr,stderr:()=>Fr,stdin:()=>Wr,stdout:()=>Dr,title:()=>nr,umask:()=>dr,uptime:()=>Gt,version:()=>ur,versions:()=>hr});var Zt,er,tr,rr,nr,ir,or,sr,ar,lr,ur,hr,cr,fr,dr,pr,gr,yr,mr,br,wr,vr,_r,Er,Sr,Ar,Tr,Ir,Rr,Or,Cr,kr,Pr,Br,xr,Ur,Lr,Mr,Nr,jr,Dr,Fr,Wr,qr,$r,Hr,Vr,zr,Kr,Yr,Gr,Qr,Jr,Xr,Zr,en,tn,rn,nn,on,sn,an,ln,un,hn,cn,fn=Pt((()=>{Lt(),Rn(),dn(),Zt=[],er=!1,rr=-1,Wt.prototype.run=function(){this.fun.apply(null,this.array)},nr="browser",ir="x64",or="browser",sr={PATH:"/usr/bin",LANG:navigator.language+".UTF-8",PWD:"/",HOME:"/home",TMP:"/tmp"},ar=["/usr/bin/node"],lr=[],ur="v16.8.0",hr={},cr=function(e,t){console.warn((t?t+": ":"")+e)},fr=function(e){Nt("binding")},dr=function(e){return 0},pr=function(){return"/"},gr=function(e){},yr={name:"node",sourceUrl:"",headersUrl:"",libUrl:""},mr=qt,br=[],wr={},vr=!1,_r={},Er=qt,Sr=qt,Tr=Ar=function(){return{}},Ir=Ar,Rr=qt,Or=qt,Cr=qt,kr={},Pr={inspector:!1,debug:!1,uv:!1,ipv6:!1,tls_alpn:!1,tls_sni:!1,tls_ocsp:!1,tls:!1,cached_builtins:!0},Br=qt,xr=qt,Ur=qt,Lr=qt,Mr=qt,Nr=qt,jr=qt,Dr=void 0,Fr=void 0,Wr=void 0,qr=qt,$r=2,Hr=1,Vr="/bin/usr/node",zr=9229,Kr="node",Yr=[],Gr=qt,void 0===(Qr={now:typeof performance<"u"?performance.now.bind(performance):void 0,timing:typeof performance<"u"?performance.timing:void 0}).now&&(Jr=Date.now(),Qr.timing&&Qr.timing.navigationStart&&(Jr=Qr.timing.navigationStart),Qr.now=()=>Date.now()-Jr),Xr=1e9,Qt.bigint=function(e){var t=Qt(e);return typeof BigInt>"u"?t[0]*Xr+t[1]:BigInt(t[0]*Xr)+BigInt(t[1])},cn={version:ur,versions:hr,arch:ir,platform:or,release:yr,_rawDebug:mr,moduleLoadList:br,binding:fr,_linkedBinding:$t,_events:en={},_eventsCount:tn=0,_maxListeners:Zr=10,on:Jt,addListener:rn=Jt,once:nn=Jt,off:on=Jt,removeListener:sn=Jt,removeAllListeners:an=Jt,emit:ln=qt,prependListener:un=Jt,prependOnceListener:hn=Jt,listeners:Xt,domain:wr,_exiting:vr,config:_r,dlopen:Ht,uptime:Gt,_getActiveRequests:Vt,_getActiveHandles:zt,reallyExit:Er,_kill:Sr,cpuUsage:Ar,resourceUsage:Tr,memoryUsage:Ir,kill:Rr,exit:Or,openStdin:Cr,allowedNodeEnvironmentFlags:kr,assert:Kt,features:Pr,_fatalExceptions:Br,setUncaughtExceptionCaptureCallback:xr,hasUncaughtExceptionCaptureCallback:Yt,emitWarning:cr,nextTick:Ft,_tickCallback:Ur,_debugProcess:Lr,_debugEnd:Mr,_startProfilerIdleNotifier:Nr,_stopProfilerIdleNotifier:jr,stdout:Dr,stdin:Wr,stderr:Fr,abort:qr,umask:dr,chdir:gr,cwd:pr,env:sr,title:nr,argv:ar,execArgv:lr,pid:$r,ppid:Hr,execPath:Vr,debugPort:zr,hrtime:Qt,argv0:Kr,_preload_modules:Yr,setSourceMapsEnabled:Gr}})),dn=Pt((()=>{fn()})),pn={};function gn(){if(_n)return vn;_n=!0;let e=function(){if(mn)return yn;mn=!0,yn.byteLength=function(e){var t=o(e),r=t[0],n=t[1];return 3*(r+n)/4-n},yn.toByteArray=function(e){var n,i,s=o(e),a=s[0],l=s[1],u=new r(function(e,t,r){return 3*(t+r)/4-r}(0,a,l)),h=0,c=l>0?a-4:a;for(i=0;i>16&255,u[h++]=n>>8&255,u[h++]=255&n;return 2===l&&(n=t[e.charCodeAt(i)]<<2|t[e.charCodeAt(i+1)]>>4,u[h++]=255&n),1===l&&(n=t[e.charCodeAt(i)]<<10|t[e.charCodeAt(i+1)]<<4|t[e.charCodeAt(i+2)]>>2,u[h++]=n>>8&255,u[h++]=255&n),u},yn.fromByteArray=function(t){for(var r,n=t.length,i=n%3,o=[],s=16383,l=0,u=n-i;lu?u:l+s));return 1===i?(r=t[n-1],o.push(e[r>>2]+e[r<<4&63]+"==")):2===i&&(r=(t[n-2]<<8)+t[n-1],o.push(e[r>>10]+e[r>>4&63]+e[r<<2&63]+"=")),o.join("")};for(var e=[],t=[],r=typeof Uint8Array<"u"?Uint8Array:Array,n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",i=0;i<64;++i)e[i]=n[i],t[n.charCodeAt(i)]=i;function o(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=e.indexOf("=");return-1===r&&(r=t),[r,r===t?0:4-r%4]}function s(t){return e[t>>18&63]+e[t>>12&63]+e[t>>6&63]+e[63&t]}function a(e,t,r){for(var n,i=[],o=t;o>1,h=-7,c=r?i-1:0,f=r?-1:1,d=e[t+c];for(c+=f,o=d&(1<<-h)-1,d>>=-h,h+=a;h>0;o=256*o+e[t+c],c+=f,h-=8);for(s=o&(1<<-h)-1,o>>=-h,h+=n;h>0;s=256*s+e[t+c],c+=f,h-=8);if(0===o)o=1-u;else{if(o===l)return s?NaN:1/0*(d?-1:1);s+=Math.pow(2,n),o-=u}return(d?-1:1)*s*Math.pow(2,o-n)},bn.write=function(e,t,r,n,i,o){var s,a,l,u=8*o-i-1,h=(1<>1,f=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,d=n?0:o-1,p=n?1:-1,g=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(a=isNaN(t)?1:0,s=h):(s=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-s))<1&&(s--,l*=2),(t+=s+c>=1?f/l:f*Math.pow(2,1-c))*l>=2&&(s++,l/=2),s+c>=h?(a=0,s=h):s+c>=1?(a=(t*l-1)*Math.pow(2,i),s+=c):(a=t*Math.pow(2,c-1)*Math.pow(2,i),s=0));i>=8;e[r+d]=255&a,d+=p,a/=256,i-=8);for(s=s<0;e[r+d]=255&s,d+=p,s/=256,u-=8);e[r+d-p]|=128*g}),bn),r="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;vn.Buffer=o,vn.SlowBuffer=function(e){return+e!=e&&(e=0),o.alloc(+e)},vn.INSPECT_MAX_BYTES=50;let n=2147483647;function i(e){if(e>n)throw new RangeError('The value "'+e+'" is invalid for option "size"');let t=new Uint8Array(e);return Object.setPrototypeOf(t,o.prototype),t}function o(e,t,r){if("number"==typeof e){if("string"==typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return l(e)}return s(e,t,r)}function s(e,t,r){if("string"==typeof e)return function(e,t){if(("string"!=typeof t||""===t)&&(t="utf8"),!o.isEncoding(t))throw new TypeError("Unknown encoding: "+t);let r=0|f(e,t),n=i(r),s=n.write(e,t);return s!==r&&(n=n.slice(0,s)),n}(e,t);if(ArrayBuffer.isView(e))return function(e){if(z(e,Uint8Array)){let t=new Uint8Array(e);return h(t.buffer,t.byteOffset,t.byteLength)}return u(e)}(e);if(null==e)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(z(e,ArrayBuffer)||e&&z(e.buffer,ArrayBuffer)||typeof SharedArrayBuffer<"u"&&(z(e,SharedArrayBuffer)||e&&z(e.buffer,SharedArrayBuffer)))return h(e,t,r);if("number"==typeof e)throw new TypeError('The "value" argument must not be of type number. Received type number');let n=e.valueOf&&e.valueOf();if(null!=n&&n!==e)return o.from(n,t,r);let s=function(e){if(o.isBuffer(e)){let t=0|c(e.length),r=i(t);return 0===r.length||e.copy(r,0,0,t),r}return void 0!==e.length?"number"!=typeof e.length||K(e.length)?i(0):u(e):"Buffer"===e.type&&Array.isArray(e.data)?u(e.data):void 0}(e);if(s)return s;if(typeof Symbol<"u"&&null!=Symbol.toPrimitive&&"function"==typeof e[Symbol.toPrimitive])return o.from(e[Symbol.toPrimitive]("string"),t,r);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e)}function a(e){if("number"!=typeof e)throw new TypeError('"size" argument must be of type number');if(e<0)throw new RangeError('The value "'+e+'" is invalid for option "size"')}function l(e){return a(e),i(e<0?0:0|c(e))}function u(e){let t=e.length<0?0:0|c(e.length),r=i(t);for(let n=0;n=n)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+n.toString(16)+" bytes");return 0|e}function f(e,t){if(o.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||z(e,ArrayBuffer))return e.byteLength;if("string"!=typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);let r=e.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;let i=!1;for(;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return $(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return H(e).length;default:if(i)return n?-1:$(e).length;t=(""+t).toLowerCase(),i=!0}}function d(e,t,r){let n=!1;if((void 0===t||t<0)&&(t=0),t>this.length||((void 0===r||r>this.length)&&(r=this.length),r<=0)||(r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return R(this,t,r);case"utf8":case"utf-8":return S(this,t,r);case"ascii":return T(this,t,r);case"latin1":case"binary":return I(this,t,r);case"base64":return E(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function p(e,t,r){let n=e[t];e[t]=e[r],e[r]=n}function g(e,t,r,n,i){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),K(r=+r)&&(r=i?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(i)return-1;r=e.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof t&&(t=o.from(t,n)),o.isBuffer(t))return 0===t.length?-1:y(e,t,r,n,i);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):y(e,[t],r,n,i);throw new TypeError("val must be string, number or Buffer")}function y(e,t,r,n,i){let o,s=1,a=e.length,l=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;s=2,a/=2,l/=2,r/=2}function u(e,t){return 1===s?e[t]:e.readUInt16BE(t*s)}if(i){let n=-1;for(o=r;oa&&(r=a-l),o=r;o>=0;o--){let r=!0;for(let n=0;ni&&(n=i):n=i;let o,s=t.length;for(n>s/2&&(n=s/2),o=0;o>8,i=r%256,o.push(i),o.push(n);return o}(t,e.length-r),e,r,n)}function E(t,r,n){return 0===r&&n===t.length?e.fromByteArray(t):e.fromByteArray(t.slice(r,n))}function S(e,t,r){r=Math.min(e.length,r);let n=[],i=t;for(;i239?4:t>223?3:t>191?2:1;if(i+s<=r){let r,n,a,l;switch(s){case 1:t<128&&(o=t);break;case 2:r=e[i+1],128==(192&r)&&(l=(31&t)<<6|63&r,l>127&&(o=l));break;case 3:r=e[i+1],n=e[i+2],128==(192&r)&&128==(192&n)&&(l=(15&t)<<12|(63&r)<<6|63&n,l>2047&&(l<55296||l>57343)&&(o=l));break;case 4:r=e[i+1],n=e[i+2],a=e[i+3],128==(192&r)&&128==(192&n)&&128==(192&a)&&(l=(15&t)<<18|(63&r)<<12|(63&n)<<6|63&a,l>65535&&l<1114112&&(o=l))}}null===o?(o=65533,s=1):o>65535&&(o-=65536,n.push(o>>>10&1023|55296),o=56320|1023&o),n.push(o),i+=s}return function(e){let t=e.length;if(t<=A)return String.fromCharCode.apply(String,e);let r="",n=0;for(;nn.length?(o.isBuffer(t)||(t=o.from(t)),t.copy(n,i)):Uint8Array.prototype.set.call(n,t,i);else{if(!o.isBuffer(t))throw new TypeError('"list" argument must be an Array of Buffers');t.copy(n,i)}i+=t.length}return n},o.byteLength=f,o.prototype._isBuffer=!0,o.prototype.swap16=function(){let e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let t=0;tt&&(e+=" ... "),""},r&&(o.prototype[r]=o.prototype.inspect),o.prototype.compare=function(e,t,r,n,i){if(z(e,Uint8Array)&&(e=o.from(e,e.offset,e.byteLength)),!o.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),t<0||r>e.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&t>=r)return 0;if(n>=i)return-1;if(t>=r)return 1;if(this===e)return 0;let s=(i>>>=0)-(n>>>=0),a=(r>>>=0)-(t>>>=0),l=Math.min(s,a),u=this.slice(n,i),h=e.slice(t,r);for(let e=0;e>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}let i=this.length-t;if((void 0===r||r>i)&&(r=i),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");let o=!1;for(;;)switch(n){case"hex":return m(this,e,t,r);case"utf8":case"utf-8":return b(this,e,t,r);case"ascii":case"latin1":case"binary":return w(this,e,t,r);case"base64":return v(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return _(this,e,t,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},o.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};let A=4096;function T(e,t,r){let n="";r=Math.min(e.length,r);for(let i=t;in)&&(r=n);let i="";for(let n=t;nr)throw new RangeError("Trying to access beyond buffer length")}function k(e,t,r,n,i,s){if(!o.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||te.length)throw new RangeError("Index out of range")}function P(e,t,r,n,i){D(t,n,i,e,r,7);let o=Number(t&BigInt(4294967295));e[r++]=o,o>>=8,e[r++]=o,o>>=8,e[r++]=o,o>>=8,e[r++]=o;let s=Number(t>>BigInt(32)&BigInt(4294967295));return e[r++]=s,s>>=8,e[r++]=s,s>>=8,e[r++]=s,s>>=8,e[r++]=s,r}function B(e,t,r,n,i){D(t,n,i,e,r,7);let o=Number(t&BigInt(4294967295));e[r+7]=o,o>>=8,e[r+6]=o,o>>=8,e[r+5]=o,o>>=8,e[r+4]=o;let s=Number(t>>BigInt(32)&BigInt(4294967295));return e[r+3]=s,s>>=8,e[r+2]=s,s>>=8,e[r+1]=s,s>>=8,e[r]=s,r+8}function x(e,t,r,n,i,o){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function U(e,r,n,i,o){return r=+r,n>>>=0,o||x(e,0,n,4),t.write(e,r,n,i,23,4),n+4}function L(e,r,n,i,o){return r=+r,n>>>=0,o||x(e,0,n,8),t.write(e,r,n,i,52,8),n+8}o.prototype.slice=function(e,t){let r=this.length;(e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t>>=0,t>>>=0,r||C(e,t,this.length);let n=this[e],i=1,o=0;for(;++o>>=0,t>>>=0,r||C(e,t,this.length);let n=this[e+--t],i=1;for(;t>0&&(i*=256);)n+=this[e+--t]*i;return n},o.prototype.readUint8=o.prototype.readUInt8=function(e,t){return e>>>=0,t||C(e,1,this.length),this[e]},o.prototype.readUint16LE=o.prototype.readUInt16LE=function(e,t){return e>>>=0,t||C(e,2,this.length),this[e]|this[e+1]<<8},o.prototype.readUint16BE=o.prototype.readUInt16BE=function(e,t){return e>>>=0,t||C(e,2,this.length),this[e]<<8|this[e+1]},o.prototype.readUint32LE=o.prototype.readUInt32LE=function(e,t){return e>>>=0,t||C(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},o.prototype.readUint32BE=o.prototype.readUInt32BE=function(e,t){return e>>>=0,t||C(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},o.prototype.readBigUInt64LE=G((function(e){F(e>>>=0,"offset");let t=this[e],r=this[e+7];(void 0===t||void 0===r)&&W(e,this.length-8);let n=t+256*this[++e]+65536*this[++e]+this[++e]*2**24,i=this[++e]+256*this[++e]+65536*this[++e]+r*2**24;return BigInt(n)+(BigInt(i)<>>=0,"offset");let t=this[e],r=this[e+7];(void 0===t||void 0===r)&&W(e,this.length-8);let n=t*2**24+65536*this[++e]+256*this[++e]+this[++e],i=this[++e]*2**24+65536*this[++e]+256*this[++e]+r;return(BigInt(n)<>>=0,t>>>=0,r||C(e,t,this.length);let n=this[e],i=1,o=0;for(;++o=i&&(n-=Math.pow(2,8*t)),n},o.prototype.readIntBE=function(e,t,r){e>>>=0,t>>>=0,r||C(e,t,this.length);let n=t,i=1,o=this[e+--n];for(;n>0&&(i*=256);)o+=this[e+--n]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*t)),o},o.prototype.readInt8=function(e,t){return e>>>=0,t||C(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},o.prototype.readInt16LE=function(e,t){e>>>=0,t||C(e,2,this.length);let r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},o.prototype.readInt16BE=function(e,t){e>>>=0,t||C(e,2,this.length);let r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},o.prototype.readInt32LE=function(e,t){return e>>>=0,t||C(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},o.prototype.readInt32BE=function(e,t){return e>>>=0,t||C(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},o.prototype.readBigInt64LE=G((function(e){F(e>>>=0,"offset");let t=this[e],r=this[e+7];(void 0===t||void 0===r)&&W(e,this.length-8);let n=this[e+4]+256*this[e+5]+65536*this[e+6]+(r<<24);return(BigInt(n)<>>=0,"offset");let t=this[e],r=this[e+7];(void 0===t||void 0===r)&&W(e,this.length-8);let n=(t<<24)+65536*this[++e]+256*this[++e]+this[++e];return(BigInt(n)<>>=0,r||C(e,4,this.length),t.read(this,e,!0,23,4)},o.prototype.readFloatBE=function(e,r){return e>>>=0,r||C(e,4,this.length),t.read(this,e,!1,23,4)},o.prototype.readDoubleLE=function(e,r){return e>>>=0,r||C(e,8,this.length),t.read(this,e,!0,52,8)},o.prototype.readDoubleBE=function(e,r){return e>>>=0,r||C(e,8,this.length),t.read(this,e,!1,52,8)},o.prototype.writeUintLE=o.prototype.writeUIntLE=function(e,t,r,n){e=+e,t>>>=0,r>>>=0,n||k(this,e,t,r,Math.pow(2,8*r)-1,0);let i=1,o=0;for(this[t]=255&e;++o>>=0,r>>>=0,n||k(this,e,t,r,Math.pow(2,8*r)-1,0);let i=r-1,o=1;for(this[t+i]=255&e;--i>=0&&(o*=256);)this[t+i]=e/o&255;return t+r},o.prototype.writeUint8=o.prototype.writeUInt8=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,1,255,0),this[t]=255&e,t+1},o.prototype.writeUint16LE=o.prototype.writeUInt16LE=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},o.prototype.writeUint16BE=o.prototype.writeUInt16BE=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},o.prototype.writeUint32LE=o.prototype.writeUInt32LE=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},o.prototype.writeUint32BE=o.prototype.writeUInt32BE=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},o.prototype.writeBigUInt64LE=G((function(e,t=0){return P(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),o.prototype.writeBigUInt64BE=G((function(e,t=0){return B(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),o.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t>>>=0,!n){let n=Math.pow(2,8*r-1);k(this,e,t,r,n-1,-n)}let i=0,o=1,s=0;for(this[t]=255&e;++i>>=0,!n){let n=Math.pow(2,8*r-1);k(this,e,t,r,n-1,-n)}let i=r-1,o=1,s=0;for(this[t+i]=255&e;--i>=0&&(o*=256);)e<0&&0===s&&0!==this[t+i+1]&&(s=1),this[t+i]=(e/o|0)-s&255;return t+r},o.prototype.writeInt8=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},o.prototype.writeInt16LE=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},o.prototype.writeInt16BE=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},o.prototype.writeInt32LE=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},o.prototype.writeInt32BE=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},o.prototype.writeBigInt64LE=G((function(e,t=0){return P(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),o.prototype.writeBigInt64BE=G((function(e,t=0){return B(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),o.prototype.writeFloatLE=function(e,t,r){return U(this,e,t,!0,r)},o.prototype.writeFloatBE=function(e,t,r){return U(this,e,t,!1,r)},o.prototype.writeDoubleLE=function(e,t,r){return L(this,e,t,!0,r)},o.prototype.writeDoubleBE=function(e,t,r){return L(this,e,t,!1,r)},o.prototype.copy=function(e,t,r,n){if(!o.isBuffer(e))throw new TypeError("argument should be a Buffer");if(r||(r=0),!n&&0!==n&&(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(i=t;i=n+4;r-=3)t=`_${e.slice(r-3,r)}${t}`;return`${e.slice(0,r)}${t}`}function D(e,t,r,n,i,o){if(e>r||e= 0${n} and < 2${n} ** ${8*(o+1)}${n}`:`>= -(2${n} ** ${8*(o+1)-1}${n}) and < 2 ** ${8*(o+1)-1}${n}`,new M.ERR_OUT_OF_RANGE("value",r,e)}!function(e,t,r){F(t,"offset"),(void 0===e[t]||void 0===e[t+r])&&W(t,e.length-(r+1))}(n,i,o)}function F(e,t){if("number"!=typeof e)throw new M.ERR_INVALID_ARG_TYPE(t,"number",e)}function W(e,t,r){throw Math.floor(e)!==e?(F(e,r),new M.ERR_OUT_OF_RANGE("offset","an integer",e)):t<0?new M.ERR_BUFFER_OUT_OF_BOUNDS:new M.ERR_OUT_OF_RANGE("offset",`>= 0 and <= ${t}`,e)}N("ERR_BUFFER_OUT_OF_BOUNDS",(function(e){return e?`${e} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"}),RangeError),N("ERR_INVALID_ARG_TYPE",(function(e,t){return`The "${e}" argument must be of type number. Received type ${typeof t}`}),TypeError),N("ERR_OUT_OF_RANGE",(function(e,t,r){let n=`The value of "${e}" is out of range.`,i=r;return Number.isInteger(r)&&Math.abs(r)>2**32?i=j(String(r)):"bigint"==typeof r&&(i=String(r),(r>BigInt(2)**BigInt(32)||r<-(BigInt(2)**BigInt(32)))&&(i=j(i)),i+="n"),n+=` It must be ${t}. Received ${i}`,n}),RangeError);let q=/[^+/0-9A-Za-z-_]/g;function $(e,t){t=t||1/0;let r,n=e.length,i=null,o=[];for(let s=0;s55295&&r<57344){if(!i){if(r>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(s+1===n){(t-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(t-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(t-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((t-=1)<0)break;o.push(r)}else if(r<2048){if((t-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function H(t){return e.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(q,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(t))}function V(e,t,r,n){let i;for(i=0;i=t.length||i>=e.length);++i)t[i+r]=e[i];return i}function z(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function K(e){return e!=e}let Y=function(){let e="0123456789abcdef",t=new Array(256);for(let r=0;r<16;++r){let n=16*r;for(let i=0;i<16;++i)t[n+i]=e[r]+e[i]}return t}();function G(e){return typeof BigInt>"u"?Q:e}function Q(){throw new Error("BigInt not supported")}return vn}xt(pn,{Buffer:()=>Sn,INSPECT_MAX_BYTES:()=>An,default:()=>En,kMaxLength:()=>Tn});var yn,mn,bn,wn,vn,_n,En,Sn,An,Tn,In=Pt((()=>{Lt(),Rn(),dn(),yn={},mn=!1,bn={},wn=!1,vn={},_n=!1,(En=gn()).Buffer,En.SlowBuffer,En.INSPECT_MAX_BYTES,En.kMaxLength,Sn=En.Buffer,An=En.INSPECT_MAX_BYTES,Tn=En.kMaxLength})),Rn=Pt((()=>{In()})),On=Bt((e=>{Lt(),Rn(),dn(),Object.defineProperty(e,"__esModule",{value:!0}),e.default=class{constructor(e){this.aliasToTopic={},this.max=e}put(e,t){return!(0===t||t>this.max||(this.aliasToTopic[t]=e,this.length=Object.keys(this.aliasToTopic).length,0))}getTopicByAlias(e){return this.aliasToTopic[e]}clear(){this.aliasToTopic={}}}})),Cn=Bt(((e,t)=>{Lt(),Rn(),dn(),t.exports={ArrayIsArray:e=>Array.isArray(e),ArrayPrototypeIncludes:(e,t)=>e.includes(t),ArrayPrototypeIndexOf:(e,t)=>e.indexOf(t),ArrayPrototypeJoin:(e,t)=>e.join(t),ArrayPrototypeMap:(e,t)=>e.map(t),ArrayPrototypePop:(e,t)=>e.pop(t),ArrayPrototypePush:(e,t)=>e.push(t),ArrayPrototypeSlice:(e,t,r)=>e.slice(t,r),Error,FunctionPrototypeCall:(e,t,...r)=>e.call(t,...r),FunctionPrototypeSymbolHasInstance:(e,t)=>Function.prototype[Symbol.hasInstance].call(e,t),MathFloor:Math.floor,Number,NumberIsInteger:Number.isInteger,NumberIsNaN:Number.isNaN,NumberMAX_SAFE_INTEGER:Number.MAX_SAFE_INTEGER,NumberMIN_SAFE_INTEGER:Number.MIN_SAFE_INTEGER,NumberParseInt:Number.parseInt,ObjectDefineProperties:(e,t)=>Object.defineProperties(e,t),ObjectDefineProperty:(e,t,r)=>Object.defineProperty(e,t,r),ObjectGetOwnPropertyDescriptor:(e,t)=>Object.getOwnPropertyDescriptor(e,t),ObjectKeys:e=>Object.keys(e),ObjectSetPrototypeOf:(e,t)=>Object.setPrototypeOf(e,t),Promise,PromisePrototypeCatch:(e,t)=>e.catch(t),PromisePrototypeThen:(e,t,r)=>e.then(t,r),PromiseReject:e=>Promise.reject(e),ReflectApply:Reflect.apply,RegExpPrototypeTest:(e,t)=>e.test(t),SafeSet:Set,String,StringPrototypeSlice:(e,t,r)=>e.slice(t,r),StringPrototypeToLowerCase:e=>e.toLowerCase(),StringPrototypeToUpperCase:e=>e.toUpperCase(),StringPrototypeTrim:e=>e.trim(),Symbol,SymbolFor:Symbol.for,SymbolAsyncIterator:Symbol.asyncIterator,SymbolHasInstance:Symbol.hasInstance,SymbolIterator:Symbol.iterator,TypedArrayPrototypeSet:(e,t,r)=>e.set(t,r),Uint8Array}})),kn=Bt(((e,t)=>{Lt(),Rn(),dn();var r=(In(),Ut(pn)),n=Object.getPrototypeOf((async function(){})).constructor,i=globalThis.Blob||r.Blob,o=typeof i<"u"?function(e){return e instanceof i}:function(e){return!1},s=class extends Error{constructor(e){if(!Array.isArray(e))throw new TypeError("Expected input to be an Array, got "+typeof e);let t="";for(let r=0;r{e=r,t=n})),resolve:e,reject:t}},promisify:e=>new Promise(((t,r)=>{e(((e,...n)=>e?r(e):t(...n)))})),debuglog:()=>function(){},format:(e,...t)=>e.replace(/%([sdifj])/g,(function(...[e,r]){let n=t.shift();return"f"===r?n.toFixed(6):"j"===r?JSON.stringify(n):"s"===r&&"object"==typeof n?`${n.constructor!==Object?n.constructor.name:""} {}`.trim():n.toString()})),inspect(e){switch(typeof e){case"string":if(e.includes("'")){if(!e.includes('"'))return`"${e}"`;if(!e.includes("`")&&!e.includes("${"))return`\`${e}\``}return`'${e}'`;case"number":return isNaN(e)?"NaN":Object.is(e,-0)?String(e):e;case"bigint":return`${String(e)}n`;case"boolean":case"undefined":return String(e);case"object":return"{}"}},types:{isAsyncFunction:e=>e instanceof n,isArrayBufferView:e=>ArrayBuffer.isView(e)},isBlob:o},t.exports.promisify.custom=Symbol.for("nodejs.util.promisify.custom")})),Pn=Bt(((e,t)=>{Lt(),Rn(),dn();var{AbortController:r,AbortSignal:n}=typeof self<"u"?self:typeof window<"u"?window:void 0;t.exports=r,t.exports.AbortSignal=n,t.exports.default=r})),Bn=Bt(((e,t)=>{Lt(),Rn(),dn();var{format:r,inspect:n,AggregateError:i}=kn(),o=globalThis.AggregateError||i,s=Symbol("kIsNodeError"),a=["string","function","number","object","Function","Object","boolean","bigint","symbol"],l=/^([A-Z][a-z0-9]*)+$/,u={};function h(e,t){if(!e)throw new u.ERR_INTERNAL_ASSERTION(t)}function c(e){let t="",r=e.length,n="-"===e[0]?1:0;for(;r>=n+4;r-=3)t=`_${e.slice(r-3,r)}${t}`;return`${e.slice(0,r)}${t}`}function f(e,t,n){n||(n=Error);class i extends n{constructor(...n){super(function(e,t,n){if("function"==typeof t)return h(t.length<=n.length,`Code: ${e}; The provided arguments length (${n.length}) does not match the required ones (${t.length}).`),t(...n);let i=(t.match(/%[dfijoOs]/g)||[]).length;return h(i===n.length,`Code: ${e}; The provided arguments length (${n.length}) does not match the required ones (${i}).`),0===n.length?t:r(t,...n)}(e,t,n))}toString(){return`${this.name} [${e}]: ${this.message}`}}Object.defineProperties(i.prototype,{name:{value:n.name,writable:!0,enumerable:!1,configurable:!0},toString:{value(){return`${this.name} [${e}]: ${this.message}`},writable:!0,enumerable:!1,configurable:!0}}),i.prototype.code=e,i.prototype[s]=!0,u[e]=i}function d(e){let t="__node_internal_"+e.name;return Object.defineProperty(e,"name",{value:t}),e}var p=class extends Error{constructor(e="The operation was aborted",t=void 0){if(void 0!==t&&"object"!=typeof t)throw new u.ERR_INVALID_ARG_TYPE("options","Object",t);super(e,t),this.code="ABORT_ERR",this.name="AbortError"}};f("ERR_ASSERTION","%s",Error),f("ERR_INVALID_ARG_TYPE",((e,t,r)=>{h("string"==typeof e,"'name' must be a string"),Array.isArray(t)||(t=[t]);let i="The ";e.endsWith(" argument")?i+=`${e} `:i+=`"${e}" ${e.includes(".")?"property":"argument"} `,i+="must be ";let o=[],s=[],u=[];for(let e of t)h("string"==typeof e,"All expected entries have to be of type string"),a.includes(e)?o.push(e.toLowerCase()):l.test(e)?s.push(e):(h("object"!==e,'The value "object" should be written as "Object"'),u.push(e));if(s.length>0){let e=o.indexOf("object");-1!==e&&(o.splice(o,e,1),s.push("Object"))}if(o.length>0){switch(o.length){case 1:i+=`of type ${o[0]}`;break;case 2:i+=`one of type ${o[0]} or ${o[1]}`;break;default:{let e=o.pop();i+=`one of type ${o.join(", ")}, or ${e}`}}(s.length>0||u.length>0)&&(i+=" or ")}if(s.length>0){switch(s.length){case 1:i+=`an instance of ${s[0]}`;break;case 2:i+=`an instance of ${s[0]} or ${s[1]}`;break;default:{let e=s.pop();i+=`an instance of ${s.join(", ")}, or ${e}`}}u.length>0&&(i+=" or ")}switch(u.length){case 0:break;case 1:u[0].toLowerCase()!==u[0]&&(i+="an "),i+=`${u[0]}`;break;case 2:i+=`one of ${u[0]} or ${u[1]}`;break;default:{let e=u.pop();i+=`one of ${u.join(", ")}, or ${e}`}}if(null==r)i+=`. Received ${r}`;else if("function"==typeof r&&r.name)i+=`. Received function ${r.name}`;else if("object"==typeof r){var c;null!==(c=r.constructor)&&void 0!==c&&c.name?i+=`. Received an instance of ${r.constructor.name}`:i+=`. Received ${n(r,{depth:-1})}`}else{let e=n(r,{colors:!1});e.length>25&&(e=`${e.slice(0,25)}...`),i+=`. Received type ${typeof r} (${e})`}return i}),TypeError),f("ERR_INVALID_ARG_VALUE",((e,t,r="is invalid")=>{let i=n(t);return i.length>128&&(i=i.slice(0,128)+"..."),`The ${e.includes(".")?"property":"argument"} '${e}' ${r}. Received ${i}`}),TypeError),f("ERR_INVALID_RETURN_VALUE",((e,t,r)=>{var n;return`Expected ${e} to be returned from the "${t}" function but got ${null!=r&&null!==(n=r.constructor)&&void 0!==n&&n.name?`instance of ${r.constructor.name}`:"type "+typeof r}.`}),TypeError),f("ERR_MISSING_ARGS",((...e)=>{h(e.length>0,"At least one arg needs to be specified");let t,r=e.length;switch(e=(Array.isArray(e)?e:[e]).map((e=>`"${e}"`)).join(" or "),r){case 1:t+=`The ${e[0]} argument`;break;case 2:t+=`The ${e[0]} and ${e[1]} arguments`;break;default:{let r=e.pop();t+=`The ${e.join(", ")}, and ${r} arguments`}}return`${t} must be specified`}),TypeError),f("ERR_OUT_OF_RANGE",((e,t,r)=>{let i;return h(t,'Missing "range" argument'),Number.isInteger(r)&&Math.abs(r)>2**32?i=c(String(r)):"bigint"==typeof r?(i=String(r),(r>2n**32n||r<-(2n**32n))&&(i=c(i)),i+="n"):i=n(r),`The value of "${e}" is out of range. It must be ${t}. Received ${i}`}),RangeError),f("ERR_MULTIPLE_CALLBACK","Callback called multiple times",Error),f("ERR_METHOD_NOT_IMPLEMENTED","The %s method is not implemented",Error),f("ERR_STREAM_ALREADY_FINISHED","Cannot call %s after a stream was finished",Error),f("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable",Error),f("ERR_STREAM_DESTROYED","Cannot call %s after a stream was destroyed",Error),f("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError),f("ERR_STREAM_PREMATURE_CLOSE","Premature close",Error),f("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF",Error),f("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event",Error),f("ERR_STREAM_WRITE_AFTER_END","write after end",Error),f("ERR_UNKNOWN_ENCODING","Unknown encoding: %s",TypeError),t.exports={AbortError:p,aggregateTwoErrors:d((function(e,t){if(e&&t&&e!==t){if(Array.isArray(t.errors))return t.errors.push(e),t;let r=new o([t,e],t.message);return r.code=t.code,r}return e||t})),hideStackFrames:d,codes:u}})),xn=Bt(((e,t)=>{Lt(),Rn(),dn();var{ArrayIsArray:r,ArrayPrototypeIncludes:n,ArrayPrototypeJoin:i,ArrayPrototypeMap:o,NumberIsInteger:s,NumberIsNaN:a,NumberMAX_SAFE_INTEGER:l,NumberMIN_SAFE_INTEGER:u,NumberParseInt:h,ObjectPrototypeHasOwnProperty:c,RegExpPrototypeExec:f,String:d,StringPrototypeToUpperCase:p,StringPrototypeTrim:g}=Cn(),{hideStackFrames:y,codes:{ERR_SOCKET_BAD_PORT:m,ERR_INVALID_ARG_TYPE:b,ERR_INVALID_ARG_VALUE:w,ERR_OUT_OF_RANGE:v,ERR_UNKNOWN_SIGNAL:_}}=Bn(),{normalizeEncoding:E}=kn(),{isAsyncFunction:S,isArrayBufferView:A}=kn().types,T={},I=/^[0-7]+$/,R=y(((e,t,r=u,n=l)=>{if("number"!=typeof e)throw new b(t,"number",e);if(!s(e))throw new v(t,"an integer",e);if(en)throw new v(t,`>= ${r} && <= ${n}`,e)})),O=y(((e,t,r=-2147483648,n=2147483647)=>{if("number"!=typeof e)throw new b(t,"number",e);if(!s(e))throw new v(t,"an integer",e);if(en)throw new v(t,`>= ${r} && <= ${n}`,e)})),C=y(((e,t,r=!1)=>{if("number"!=typeof e)throw new b(t,"number",e);if(!s(e))throw new v(t,"an integer",e);let n=r?1:0,i=4294967295;if(ei)throw new v(t,`>= ${n} && <= ${i}`,e)}));function k(e,t){if("string"!=typeof e)throw new b(t,"string",e)}var P=y(((e,t,r)=>{if(!n(r,e)){let n="must be one of: "+i(o(r,(e=>"string"==typeof e?`'${e}'`:d(e))),", ");throw new w(t,e,n)}}));function B(e,t){if("boolean"!=typeof e)throw new b(t,"boolean",e)}function x(e,t,r){return null!=e&&c(e,t)?e[t]:r}var U=y(((e,t,n=null)=>{let i=x(n,"allowArray",!1),o=x(n,"allowFunction",!1);if(!x(n,"nullable",!1)&&null===e||!i&&r(e)||"object"!=typeof e&&(!o||"function"!=typeof e))throw new b(t,"Object",e)})),L=y(((e,t)=>{if(null!=e&&"object"!=typeof e&&"function"!=typeof e)throw new b(t,"a dictionary",e)})),M=y(((e,t,n=0)=>{if(!r(e))throw new b(t,"Array",e);if(e.length{if(!A(e))throw new b(t,["Buffer","TypedArray","DataView"],e)})),j=y(((e,t)=>{if(void 0!==e&&(null===e||"object"!=typeof e||!("aborted"in e)))throw new b(t,"AbortSignal",e)})),D=y(((e,t)=>{if("function"!=typeof e)throw new b(t,"Function",e)})),F=y(((e,t)=>{if("function"!=typeof e||S(e))throw new b(t,"Function",e)})),W=y(((e,t)=>{if(void 0!==e)throw new b(t,"undefined",e)})),q=/^(?:<[^>]*>)(?:\s*;\s*[^;"\s]+(?:=(")?[^;"\s]*\1)?)*$/;function $(e,t){if(typeof e>"u"||!f(q,e))throw new w(t,e,'must be an array or string of format "; rel=preload; as=style"')}t.exports={isInt32:function(e){return e===(0|e)},isUint32:function(e){return e===e>>>0},parseFileMode:function(e,t,r){if(typeof e>"u"&&(e=r),"string"==typeof e){if(null===f(I,e))throw new w(t,e,"must be a 32-bit unsigned integer or an octal string");e=h(e,8)}return C(e,t),e},validateArray:M,validateStringArray:function(e,t){M(e,t);for(let r=0;rn||(null!=r||null!=n)&&a(e))throw new v(t,`${null!=r?`>= ${r}`:""}${null!=r&&null!=n?" && ":""}${null!=n?`<= ${n}`:""}`,e)},validateObject:U,validateOneOf:P,validatePlainFunction:F,validatePort:function(e,t="Port",r=!0){if("number"!=typeof e&&"string"!=typeof e||"string"==typeof e&&0===g(e).length||+e!=+e>>>0||e>65535||0===e&&!r)throw new m(t,e,r);return 0|e},validateSignalName:function(e,t="signal"){if(k(e,t),void 0===T[e])throw void 0!==T[p(e)]?new _(e+" (signals must use all capital letters)"):new _(e)},validateString:k,validateUint32:C,validateUndefined:W,validateUnion:function(e,t,r){if(!n(r,e))throw new b(t,`('${i(r,"|")}')`,e)},validateAbortSignal:j,validateLinkHeaderValue:function(e){if("string"==typeof e)return $(e,"hints"),e;if(r(e)){let t=e.length,r="";if(0===t)return r;for(let n=0;n; rel=preload; as=style"')}}})),Un=Bt(((e,t)=>{Lt(),Rn(),dn();var r,n,i=t.exports={};function o(){throw new Error("setTimeout has not been defined")}function s(){throw new Error("clearTimeout has not been defined")}function a(e){if(r===setTimeout)return setTimeout(e,0);if((r===o||!r)&&setTimeout)return r=setTimeout,setTimeout(e,0);try{return r(e,0)}catch{try{return r.call(null,e,0)}catch{return r.call(this,e,0)}}}!function(){try{r="function"==typeof setTimeout?setTimeout:o}catch{r=o}try{n="function"==typeof clearTimeout?clearTimeout:s}catch{n=s}}();var l,u=[],h=!1,c=-1;function f(){!h||!l||(h=!1,l.length?u=l.concat(u):c=-1,u.length&&d())}function d(){if(!h){var e=a(f);h=!0;for(var t=u.length;t;){for(l=u,u=[];++c1)for(var r=1;r{Lt(),Rn(),dn();var{Symbol:r,SymbolAsyncIterator:n,SymbolIterator:i,SymbolFor:o}=Cn(),s=r("kDestroyed"),a=r("kIsErrored"),l=r("kIsReadable"),u=r("kIsDisturbed"),h=o("nodejs.webstream.isClosedPromise"),c=o("nodejs.webstream.controllerErrorFunction");function f(e,t=!1){var r;return!(!e||"function"!=typeof e.pipe||"function"!=typeof e.on||t&&("function"!=typeof e.pause||"function"!=typeof e.resume)||e._writableState&&!1===(null===(r=e._readableState)||void 0===r?void 0:r.readable)||e._writableState&&!e._readableState)}function d(e){var t;return!(!e||"function"!=typeof e.write||"function"!=typeof e.on||e._readableState&&!1===(null===(t=e._writableState)||void 0===t?void 0:t.writable))}function p(e){return e&&(e._readableState||e._writableState||"function"==typeof e.write&&"function"==typeof e.on||"function"==typeof e.pipe&&"function"==typeof e.on)}function g(e){return!(!e||p(e)||"function"!=typeof e.pipeThrough||"function"!=typeof e.getReader||"function"!=typeof e.cancel)}function y(e){return!(!e||p(e)||"function"!=typeof e.getWriter||"function"!=typeof e.abort)}function m(e){return!(!e||p(e)||"object"!=typeof e.readable||"object"!=typeof e.writable)}function b(e){if(!p(e))return null;let t=e._writableState,r=e._readableState,n=t||r;return!!(e.destroyed||e[s]||null!=n&&n.destroyed)}function w(e){if(!d(e))return null;if(!0===e.writableEnded)return!0;let t=e._writableState;return(null==t||!t.errored)&&("boolean"!=typeof t?.ended?null:t.ended)}function v(e,t){if(!f(e))return null;let r=e._readableState;return(null==r||!r.errored)&&("boolean"!=typeof r?.endEmitted?null:!!(r.endEmitted||!1===t&&!0===r.ended&&0===r.length))}function _(e){return e&&null!=e[l]?e[l]:"boolean"!=typeof e?.readable?null:!b(e)&&f(e)&&e.readable&&!v(e)}function E(e){return"boolean"!=typeof e?.writable?null:!b(e)&&d(e)&&e.writable&&!w(e)}function S(e){return"boolean"==typeof e._closed&&"boolean"==typeof e._defaultKeepAlive&&"boolean"==typeof e._removedConnection&&"boolean"==typeof e._removedContLen}function A(e){return"boolean"==typeof e._sent100&&S(e)}t.exports={kDestroyed:s,isDisturbed:function(e){var t;return!(!e||!(null!==(t=e[u])&&void 0!==t?t:e.readableDidRead||e.readableAborted))},kIsDisturbed:u,isErrored:function(e){var t,r,n,i,o,s,l,u,h,c;return!(!e||!(null!==(t=null!==(r=null!==(n=null!==(i=null!==(o=null!==(s=e[a])&&void 0!==s?s:e.readableErrored)&&void 0!==o?o:e.writableErrored)&&void 0!==i?i:null===(l=e._readableState)||void 0===l?void 0:l.errorEmitted)&&void 0!==n?n:null===(u=e._writableState)||void 0===u?void 0:u.errorEmitted)&&void 0!==r?r:null===(h=e._readableState)||void 0===h?void 0:h.errored)&&void 0!==t?t:null!==(c=e._writableState)&&void 0!==c&&c.errored))},kIsErrored:a,isReadable:_,kIsReadable:l,kIsClosedPromise:h,kControllerErrorFunction:c,isClosed:function(e){if(!p(e))return null;if("boolean"==typeof e.closed)return e.closed;let t=e._writableState,r=e._readableState;return"boolean"==typeof t?.closed||"boolean"==typeof r?.closed?t?.closed||r?.closed:"boolean"==typeof e._closed&&S(e)?e._closed:null},isDestroyed:b,isDuplexNodeStream:function(e){return!(!e||"function"!=typeof e.pipe||!e._readableState||"function"!=typeof e.on||"function"!=typeof e.write)},isFinished:function(e,t){return p(e)?!!b(e)||!(!1!==t?.readable&&_(e)||!1!==t?.writable&&E(e)):null},isIterable:function(e,t){return null!=e&&(!0===t?"function"==typeof e[n]:!1===t?"function"==typeof e[i]:"function"==typeof e[n]||"function"==typeof e[i])},isReadableNodeStream:f,isReadableStream:g,isReadableEnded:function(e){if(!f(e))return null;if(!0===e.readableEnded)return!0;let t=e._readableState;return!(!t||t.errored)&&("boolean"!=typeof t?.ended?null:t.ended)},isReadableFinished:v,isReadableErrored:function(e){var t,r;return p(e)?e.readableErrored?e.readableErrored:null!==(t=null===(r=e._readableState)||void 0===r?void 0:r.errored)&&void 0!==t?t:null:null},isNodeStream:p,isWebStream:function(e){return g(e)||y(e)||m(e)},isWritable:E,isWritableNodeStream:d,isWritableStream:y,isWritableEnded:w,isWritableFinished:function(e,t){if(!d(e))return null;if(!0===e.writableFinished)return!0;let r=e._writableState;return(null==r||!r.errored)&&("boolean"!=typeof r?.finished?null:!!(r.finished||!1===t&&!0===r.ended&&0===r.length))},isWritableErrored:function(e){var t,r;return p(e)?e.writableErrored?e.writableErrored:null!==(t=null===(r=e._writableState)||void 0===r?void 0:r.errored)&&void 0!==t?t:null:null},isServerRequest:function(e){var t;return"boolean"==typeof e._consuming&&"boolean"==typeof e._dumped&&void 0===(null===(t=e.req)||void 0===t?void 0:t.upgradeOrConnect)},isServerResponse:A,willEmitClose:function(e){if(!p(e))return null;let t=e._writableState,r=e._readableState,n=t||r;return!n&&A(e)||!!(n&&n.autoDestroy&&n.emitClose&&!1===n.closed)},isTransformStream:m}})),Mn=Bt(((e,t)=>{Lt(),Rn(),dn();var r=Un(),{AbortError:n,codes:i}=Bn(),{ERR_INVALID_ARG_TYPE:o,ERR_STREAM_PREMATURE_CLOSE:s}=i,{kEmptyObject:a,once:l}=kn(),{validateAbortSignal:u,validateFunction:h,validateObject:c,validateBoolean:f}=xn(),{Promise:d,PromisePrototypeThen:p}=Cn(),{isClosed:g,isReadable:y,isReadableNodeStream:m,isReadableStream:b,isReadableFinished:w,isReadableErrored:v,isWritable:_,isWritableNodeStream:E,isWritableStream:S,isWritableFinished:A,isWritableErrored:T,isNodeStream:I,willEmitClose:R,kIsClosedPromise:O}=Ln(),C=()=>{};function k(e,t,i){var f,d;if(2===arguments.length?(i=t,t=a):null==t?t=a:c(t,"options"),h(i,"callback"),u(t.signal,"options.signal"),i=l(i),b(e)||S(e))return function(e,t,i){let o=!1,s=C;if(t.signal)if(s=()=>{o=!0,i.call(e,new n(void 0,{cause:t.signal.reason}))},t.signal.aborted)r.nextTick(s);else{let r=i;i=l(((...n)=>{t.signal.removeEventListener("abort",s),r.apply(e,n)})),t.signal.addEventListener("abort",s)}let a=(...t)=>{o||r.nextTick((()=>i.apply(e,t)))};return p(e[O].promise,a,a),C}(e,t,i);if(!I(e))throw new o("stream",["ReadableStream","WritableStream","Stream"],e);let k=null!==(f=t.readable)&&void 0!==f?f:m(e),P=null!==(d=t.writable)&&void 0!==d?d:E(e),B=e._writableState,x=e._readableState,U=()=>{e.writable||N()},L=R(e)&&m(e)===k&&E(e)===P,M=A(e,!1),N=()=>{M=!0,e.destroyed&&(L=!1),(!L||e.readable&&!k)&&(!k||j)&&i.call(e)},j=w(e,!1),D=()=>{j=!0,e.destroyed&&(L=!1),(!L||e.writable&&!P)&&(!P||M)&&i.call(e)},F=t=>{i.call(e,t)},W=g(e),q=()=>{W=!0;let t=T(e)||v(e);return t&&"boolean"!=typeof t?i.call(e,t):k&&!j&&m(e,!0)&&!w(e,!1)?i.call(e,new s):!P||M||A(e,!1)?void i.call(e):i.call(e,new s)},$=()=>{W=!0;let t=T(e)||v(e);if(t&&"boolean"!=typeof t)return i.call(e,t);i.call(e)},H=()=>{e.req.on("finish",N)};!function(e){return e.setHeader&&"function"==typeof e.abort}(e)?P&&!B&&(e.on("end",U),e.on("close",U)):(e.on("complete",N),L||e.on("abort",q),e.req?H():e.on("request",H)),!L&&"boolean"==typeof e.aborted&&e.on("aborted",q),e.on("end",D),e.on("finish",N),!1!==t.error&&e.on("error",F),e.on("close",q),W?r.nextTick(q):null!=B&&B.errorEmitted||null!=x&&x.errorEmitted?L||r.nextTick($):(!k&&(!L||y(e))&&(M||!1===_(e))||!P&&(!L||_(e))&&(j||!1===y(e))||x&&e.req&&e.aborted)&&r.nextTick($);let V=()=>{i=C,e.removeListener("aborted",q),e.removeListener("complete",N),e.removeListener("abort",q),e.removeListener("request",H),e.req&&e.req.removeListener("finish",N),e.removeListener("end",U),e.removeListener("close",U),e.removeListener("finish",N),e.removeListener("end",D),e.removeListener("error",F),e.removeListener("close",q)};if(t.signal&&!W){let o=()=>{let r=i;V(),r.call(e,new n(void 0,{cause:t.signal.reason}))};if(t.signal.aborted)r.nextTick(o);else{let r=i;i=l(((...n)=>{t.signal.removeEventListener("abort",o),r.apply(e,n)})),t.signal.addEventListener("abort",o)}}return V}t.exports=k,t.exports.finished=function(e,t){var r;let n=!1;return null===t&&(t=a),null!==(r=t)&&void 0!==r&&r.cleanup&&(f(t.cleanup,"cleanup"),n=t.cleanup),new d(((r,i)=>{let o=k(e,t,(e=>{n&&o(),e?i(e):r()}))}))}})),Nn=Bt(((e,t)=>{Lt(),Rn(),dn();var r=Un(),{aggregateTwoErrors:n,codes:{ERR_MULTIPLE_CALLBACK:i},AbortError:o}=Bn(),{Symbol:s}=Cn(),{kDestroyed:a,isDestroyed:l,isFinished:u,isServerRequest:h}=Ln(),c=s("kDestroy"),f=s("kConstruct");function d(e,t,r){e&&(e.stack,t&&!t.errored&&(t.errored=e),r&&!r.errored&&(r.errored=e))}function p(e,t,n){let i=!1;function o(t){if(i)return;i=!0;let o=e._readableState,s=e._writableState;d(t,s,o),s&&(s.closed=!0),o&&(o.closed=!0),"function"==typeof n&&n(t),t?r.nextTick(g,e,t):r.nextTick(y,e)}try{e._destroy(t||null,o)}catch(e){o(e)}}function g(e,t){m(e,t),y(e)}function y(e){let t=e._readableState,r=e._writableState;r&&(r.closeEmitted=!0),t&&(t.closeEmitted=!0),(null!=r&&r.emitClose||null!=t&&t.emitClose)&&e.emit("close")}function m(e,t){let r=e._readableState,n=e._writableState;null!=n&&n.errorEmitted||null!=r&&r.errorEmitted||(n&&(n.errorEmitted=!0),r&&(r.errorEmitted=!0),e.emit("error",t))}function b(e,t,n){let i=e._readableState,o=e._writableState;if(null!=o&&o.destroyed||null!=i&&i.destroyed)return this;null!=i&&i.autoDestroy||null!=o&&o.autoDestroy?e.destroy(t):t&&(t.stack,o&&!o.errored&&(o.errored=t),i&&!i.errored&&(i.errored=t),n?r.nextTick(m,e,t):m(e,t))}function w(e){let t=!1;function n(n){if(t)return void b(e,n??new i);t=!0;let o=e._readableState,s=e._writableState,a=s||o;o&&(o.constructed=!0),s&&(s.constructed=!0),a.destroyed?e.emit(c,n):n?b(e,n,!0):r.nextTick(v,e)}try{e._construct((e=>{r.nextTick(n,e)}))}catch(e){r.nextTick(n,e)}}function v(e){e.emit(f)}function _(e){return e?.setHeader&&"function"==typeof e.abort}function E(e){e.emit("close")}function S(e,t){e.emit("error",t),r.nextTick(E,e)}t.exports={construct:function(e,t){if("function"!=typeof e._construct)return;let n=e._readableState,i=e._writableState;n&&(n.constructed=!1),i&&(i.constructed=!1),e.once(f,t),!(e.listenerCount(f)>1)&&r.nextTick(w,e)},destroyer:function(e,t){!e||l(e)||(!t&&!u(e)&&(t=new o),h(e)?(e.socket=null,e.destroy(t)):_(e)?e.abort():_(e.req)?e.req.abort():"function"==typeof e.destroy?e.destroy(t):"function"==typeof e.close?e.close():t?r.nextTick(S,e,t):r.nextTick(E,e),e.destroyed||(e[a]=!0))},destroy:function(e,t){let r=this._readableState,i=this._writableState,o=i||r;return null!=i&&i.destroyed||null!=r&&r.destroyed?("function"==typeof t&&t(),this):(d(e,i,r),i&&(i.destroyed=!0),r&&(r.destroyed=!0),o.constructed?p(this,e,t):this.once(c,(function(r){p(this,n(r,e),t)})),this)},undestroy:function(){let e=this._readableState,t=this._writableState;e&&(e.constructed=!0,e.closed=!1,e.closeEmitted=!1,e.destroyed=!1,e.errored=null,e.errorEmitted=!1,e.reading=!1,e.ended=!1===e.readable,e.endEmitted=!1===e.readable),t&&(t.constructed=!0,t.destroyed=!1,t.closed=!1,t.closeEmitted=!1,t.errored=null,t.errorEmitted=!1,t.finalCalled=!1,t.prefinished=!1,t.ended=!1===t.writable,t.ending=!1===t.writable,t.finished=!1===t.writable)},errorOrDestroy:b}}));function jn(){jn.init.call(this)}function Dn(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function Fn(e){return void 0===e._maxListeners?jn.defaultMaxListeners:e._maxListeners}function Wn(e,t,r,n){var i,o,s,a;if(Dn(r),void 0===(o=e._events)?(o=e._events=Object.create(null),e._eventsCount=0):(void 0!==o.newListener&&(e.emit("newListener",t,r.listener?r.listener:r),o=e._events),s=o[t]),void 0===s)s=o[t]=r,++e._eventsCount;else if("function"==typeof s?s=o[t]=n?[r,s]:[s,r]:n?s.unshift(r):s.push(r),(i=Fn(e))>0&&s.length>i&&!s.warned){s.warned=!0;var l=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");l.name="MaxListenersExceededWarning",l.emitter=e,l.type=t,l.count=s.length,a=l,console&&console.warn&&console.warn(a)}return e}function qn(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function $n(e,t,r){var n={fired:!1,wrapFn:void 0,target:e,type:t,listener:r},i=qn.bind(n);return i.listener=r,n.wrapFn=i,i}function Hn(e,t,r){var n=e._events;if(void 0===n)return[];var i=n[t];return void 0===i?[]:"function"==typeof i?r?[i.listener||i]:[i]:r?function(e){for(var t=new Array(e.length),r=0;r{Lt(),Rn(),dn(),Gn="object"==typeof Reflect?Reflect:null,Qn=Gn&&"function"==typeof Gn.apply?Gn.apply:function(e,t,r){return Function.prototype.apply.call(e,t,r)},Yn=Gn&&"function"==typeof Gn.ownKeys?Gn.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)},Jn=Number.isNaN||function(e){return e!=e},Kn=jn,jn.EventEmitter=jn,jn.prototype._events=void 0,jn.prototype._eventsCount=0,jn.prototype._maxListeners=void 0,Xn=10,Object.defineProperty(jn,"defaultMaxListeners",{enumerable:!0,get:function(){return Xn},set:function(e){if("number"!=typeof e||e<0||Jn(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");Xn=e}}),jn.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},jn.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||Jn(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},jn.prototype.getMaxListeners=function(){return Fn(this)},jn.prototype.emit=function(e){for(var t=[],r=1;r0&&(o=t[0]),o instanceof Error)throw o;var s=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw s.context=o,s}var a=i[e];if(void 0===a)return!1;if("function"==typeof a)Qn(a,this,t);else{var l=a.length,u=zn(a,l);for(r=0;r=0;o--)if(r[o]===t||r[o].listener===t){s=r[o].listener,i=o;break}if(i<0)return this;0===i?r.shift():function(e,t){for(;t+1=0;n--)this.removeListener(e,t[n]);return this},jn.prototype.listeners=function(e){return Hn(this,e,!0)},jn.prototype.rawListeners=function(e){return Hn(this,e,!1)},jn.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):Vn.call(e,t)},jn.prototype.listenerCount=Vn,jn.prototype.eventNames=function(){return this._eventsCount>0?Yn(this._events):[]},(Zn=Kn).EventEmitter,Zn.defaultMaxListeners,Zn.init,Zn.listenerCount,Zn.EventEmitter,Zn.defaultMaxListeners,Zn.init,Zn.listenerCount})),ti={};xt(ti,{EventEmitter:()=>ri,default:()=>Zn,defaultMaxListeners:()=>ni,init:()=>ii,listenerCount:()=>oi,on:()=>si,once:()=>ai});var ri,ni,ii,oi,si,ai,li=Pt((()=>{Lt(),Rn(),dn(),ei(),ei(),Zn.once=function(e,t){return new Promise(((r,n)=>{function i(...t){void 0!==o&&e.removeListener("error",o),r(t)}let o;"error"!==t&&(o=t=>{e.removeListener(name,i),n(t)},e.once("error",o)),e.once(t,i)}))},Zn.on=function(e,t){let r=[],n=[],i=null,o=!1,s={async next(){let e=r.shift();if(e)return createIterResult(e,!1);if(i){let e=Promise.reject(i);return i=null,e}return o?createIterResult(void 0,!0):new Promise(((e,t)=>n.push({resolve:e,reject:t})))},async return(){e.removeListener(t,a),e.removeListener("error",l),o=!0;for(let e of n)e.resolve(createIterResult(void 0,!0));return createIterResult(void 0,!0)},throw(r){i=r,e.removeListener(t,a),e.removeListener("error",l)},[Symbol.asyncIterator](){return this}};return e.on(t,a),e.on("error",l),s;function a(...e){let t=n.shift();t?t.resolve(createIterResult(e,!1)):r.push(e)}function l(e){o=!0;let t=n.shift();t?t.reject(e):i=e,s.return()}},({EventEmitter:ri,defaultMaxListeners:ni,init:ii,listenerCount:oi,on:si,once:ai}=Zn)})),ui=Bt(((e,t)=>{Lt(),Rn(),dn();var{ArrayIsArray:r,ObjectSetPrototypeOf:n}=Cn(),{EventEmitter:i}=(li(),Ut(ti));function o(e){i.call(this,e)}function s(e,t,n){if("function"==typeof e.prependListener)return e.prependListener(t,n);e._events&&e._events[t]?r(e._events[t])?e._events[t].unshift(n):e._events[t]=[n,e._events[t]]:e.on(t,n)}n(o.prototype,i.prototype),n(o,i),o.prototype.pipe=function(e,t){let r=this;function n(t){e.writable&&!1===e.write(t)&&r.pause&&r.pause()}function o(){r.readable&&r.resume&&r.resume()}r.on("data",n),e.on("drain",o),!e._isStdio&&(!t||!1!==t.end)&&(r.on("end",l),r.on("close",u));let a=!1;function l(){a||(a=!0,e.end())}function u(){a||(a=!0,"function"==typeof e.destroy&&e.destroy())}function h(e){c(),0===i.listenerCount(this,"error")&&this.emit("error",e)}function c(){r.removeListener("data",n),e.removeListener("drain",o),r.removeListener("end",l),r.removeListener("close",u),r.removeListener("error",h),e.removeListener("error",h),r.removeListener("end",c),r.removeListener("close",c),e.removeListener("close",c)}return s(r,"error",h),s(e,"error",h),r.on("end",c),r.on("close",c),e.on("close",c),e.emit("pipe",r),e},t.exports={Stream:o,prependListener:s}})),hi=Bt(((e,t)=>{Lt(),Rn(),dn();var{AbortError:r,codes:n}=Bn(),{isNodeStream:i,isWebStream:o,kControllerErrorFunction:s}=Ln(),a=Mn(),{ERR_INVALID_ARG_TYPE:l}=n;t.exports.addAbortSignal=function(e,r){if((e=>{if("object"!=typeof e||!("aborted"in e))throw new l("signal","AbortSignal",e)})(e),!i(r)&&!o(r))throw new l("stream",["ReadableStream","WritableStream","Stream"],r);return t.exports.addAbortSignalNoValidate(e,r)},t.exports.addAbortSignalNoValidate=function(e,t){if("object"!=typeof e||!("aborted"in e))return t;let n=i(t)?()=>{t.destroy(new r(void 0,{cause:e.reason}))}:()=>{t[s](new r(void 0,{cause:e.reason}))};return e.aborted?n():(e.addEventListener("abort",n),a(t,(()=>e.removeEventListener("abort",n)))),t}})),ci=Bt(((e,t)=>{Lt(),Rn(),dn();var{StringPrototypeSlice:r,SymbolIterator:n,TypedArrayPrototypeSet:i,Uint8Array:o}=Cn(),{Buffer:s}=(In(),Ut(pn)),{inspect:a}=kn();t.exports=class{constructor(){this.head=null,this.tail=null,this.length=0}push(e){let t={data:e,next:null};this.length>0?this.tail.next=t:this.head=t,this.tail=t,++this.length}unshift(e){let t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length}shift(){if(0===this.length)return;let e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}clear(){this.head=this.tail=null,this.length=0}join(e){if(0===this.length)return"";let t=this.head,r=""+t.data;for(;null!==(t=t.next);)r+=e+t.data;return r}concat(e){if(0===this.length)return s.alloc(0);let t=s.allocUnsafe(e>>>0),r=this.head,n=0;for(;r;)i(t,r.data,n),n+=r.data.length,r=r.next;return t}consume(e,t){let r=this.head.data;if(eo.length)){e===o.length?(t+=o,++i,n.next?this.head=n.next:this.head=this.tail=null):(t+=r(o,0,e),this.head=n,n.data=r(o,e));break}t+=o,e-=o.length,++i}while(null!==(n=n.next));return this.length-=i,t}_getBuffer(e){let t=s.allocUnsafe(e),r=e,n=this.head,a=0;do{let s=n.data;if(!(e>s.length)){e===s.length?(i(t,s,r-e),++a,n.next?this.head=n.next:this.head=this.tail=null):(i(t,new o(s.buffer,s.byteOffset,e),r-e),this.head=n,n.data=s.slice(e));break}i(t,s,r-e),e-=s.length,++a}while(null!==(n=n.next));return this.length-=a,t}[Symbol.for("nodejs.util.inspect.custom")](e,t){return a(this,{...t,depth:0,customInspect:!1})}}})),fi=Bt(((e,t)=>{Lt(),Rn(),dn();var{MathFloor:r,NumberIsInteger:n}=Cn(),{ERR_INVALID_ARG_VALUE:i}=Bn().codes;function o(e){return e?16:16384}t.exports={getHighWaterMark:function(e,t,s,a){let l=function(e,t,r){return null!=e.highWaterMark?e.highWaterMark:t?e[r]:null}(t,a,s);if(null!=l){if(!n(l)||l<0)throw new i(a?`options.${s}`:"options.highWaterMark",l);return r(l)}return o(e.objectMode)},getDefaultHighWaterMark:o}}));function di(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=e.indexOf("=");return-1===r&&(r=t),[r,r===t?0:4-r%4]}function pi(e,t,r){for(var n,i,o=[],s=t;s>18&63]+ao[i>>12&63]+ao[i>>6&63]+ao[63&i]);return o.join("")}function gi(e){if(e>2147483647)throw new RangeError('The value "'+e+'" is invalid for option "size"');var t=new Uint8Array(e);return Object.setPrototypeOf(t,yi.prototype),t}function yi(e,t,r){if("number"==typeof e){if("string"==typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return wi(e)}return mi(e,t,r)}function mi(e,t,r){if("string"==typeof e)return function(e,t){if("string"==typeof t&&""!==t||(t="utf8"),!yi.isEncoding(t))throw new TypeError("Unknown encoding: "+t);var r=0|Ei(e,t),n=gi(r),i=n.write(e,t);return i!==r&&(n=n.slice(0,i)),n}(e,t);if(ArrayBuffer.isView(e))return vi(e);if(null==e)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(Ki(e,ArrayBuffer)||e&&Ki(e.buffer,ArrayBuffer)||typeof SharedArrayBuffer<"u"&&(Ki(e,SharedArrayBuffer)||e&&Ki(e.buffer,SharedArrayBuffer)))return function(e,t,r){if(t<0||e.byteLength=2147483647)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+2147483647..toString(16)+" bytes");return 0|e}function Ei(e,t){if(yi.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||Ki(e,ArrayBuffer))return e.byteLength;if("string"!=typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);var r=e.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;for(var i=!1;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return Hi(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return Vi(e).length;default:if(i)return n?-1:Hi(e).length;t=(""+t).toLowerCase(),i=!0}}function Si(e,t,r){var n=!1;if((void 0===t||t<0)&&(t=0),t>this.length||((void 0===r||r>this.length)&&(r=this.length),r<=0)||(r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return Ni(this,t,r);case"utf8":case"utf-8":return Ui(this,t,r);case"ascii":return Li(this,t,r);case"latin1":case"binary":return Mi(this,t,r);case"base64":return xi(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ji(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function Ai(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function Ti(e,t,r,n,i){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),Yi(r=+r)&&(r=i?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(i)return-1;r=e.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof t&&(t=yi.from(t,n)),yi.isBuffer(t))return 0===t.length?-1:Ii(e,t,r,n,i);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):Ii(e,[t],r,n,i);throw new TypeError("val must be string, number or Buffer")}function Ii(e,t,r,n,i){var o,s=1,a=e.length,l=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;s=2,a/=2,l/=2,r/=2}function u(e,t){return 1===s?e[t]:e.readUInt16BE(t*s)}if(i){var h=-1;for(o=r;oa&&(r=a-l),o=r;o>=0;o--){for(var c=!0,f=0;fi&&(n=i):n=i;var o=t.length;n>o/2&&(n=o/2);for(var s=0;s>8,i=r%256,o.push(i),o.push(n);return o}(t,e.length-r),e,r,n)}function xi(e,t,r){return 0===t&&r===e.length?po.fromByteArray(e):po.fromByteArray(e.slice(t,r))}function Ui(e,t,r){r=Math.min(e.length,r);for(var n=[],i=t;i239?4:u>223?3:u>191?2:1;if(i+c<=r)switch(c){case 1:u<128&&(h=u);break;case 2:128==(192&(o=e[i+1]))&&(l=(31&u)<<6|63&o)>127&&(h=l);break;case 3:o=e[i+1],s=e[i+2],128==(192&o)&&128==(192&s)&&(l=(15&u)<<12|(63&o)<<6|63&s)>2047&&(l<55296||l>57343)&&(h=l);break;case 4:o=e[i+1],s=e[i+2],a=e[i+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(l=(15&u)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&l<1114112&&(h=l)}null===h?(h=65533,c=1):h>65535&&(h-=65536,n.push(h>>>10&1023|55296),h=56320|1023&h),n.push(h),i+=c}return function(e){var t=e.length;if(t<=4096)return String.fromCharCode.apply(String,e);for(var r="",n=0;nn)&&(r=n);for(var i="",o=t;or)throw new RangeError("Trying to access beyond buffer length")}function Fi(e,t,r,n,i,o){if(!yi.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||te.length)throw new RangeError("Index out of range")}function Wi(e,t,r,n,i,o){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function qi(e,t,r,n,i){return t=+t,r>>>=0,i||Wi(e,0,r,4),go.write(e,t,r,n,23,4),r+4}function $i(e,t,r,n,i){return t=+t,r>>>=0,i||Wi(e,0,r,8),go.write(e,t,r,n,52,8),r+8}function Hi(e,t){var r;t=t||1/0;for(var n=e.length,i=null,o=[],s=0;s55295&&r<57344){if(!i){if(r>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(s+1===n){(t-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(t-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(t-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((t-=1)<0)break;o.push(r)}else if(r<2048){if((t-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function Vi(e){return po.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(mo,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function zi(e,t,r,n){for(var i=0;i=t.length||i>=e.length);++i)t[i+r]=e[i];return i}function Ki(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function Yi(e){return e!=e}function Gi(e,t){for(var r in e)t[r]=e[r]}function Qi(e,t,r){return _o(e,t,r)}function Ji(e){var t;switch(this.encoding=function(e){var t=function(e){if(!e)return"utf8";for(var t;;)switch(e){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return e;default:if(t)return;e=(""+e).toLowerCase(),t=!0}}(e);if("string"!=typeof t&&(So.isEncoding===Ao||!Ao(e)))throw new Error("Unknown encoding: "+e);return t||e}(e),this.encoding){case"utf16le":this.text=eo,this.end=to,t=4;break;case"utf8":this.fillLast=Zi,t=4;break;case"base64":this.text=ro,this.end=no,t=3;break;default:return this.write=io,void(this.end=oo)}this.lastNeed=0,this.lastTotal=0,this.lastChar=So.allocUnsafe(t)}function Xi(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function Zi(e){var t=this.lastTotal-this.lastNeed,r=function(e,t){if(128!=(192&t[0]))return e.lastNeed=0,"�";if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,"�";if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,"�"}}(this,e);return void 0!==r?r:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function eo(e,t){if((e.length-t)%2==0){var r=e.toString("utf16le",t);if(r){var n=r.charCodeAt(r.length-1);if(n>=55296&&n<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",t,e.length-1)}function to(e){var t=e&&e.length?this.write(e):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return t+this.lastChar.toString("utf16le",0,r)}return t}function ro(e,t){var r=(e.length-t)%3;return 0===r?e.toString("base64",t):(this.lastNeed=3-r,this.lastTotal=3,1===r?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",t,e.length-r))}function no(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+this.lastChar.toString("base64",0,3-this.lastNeed):t}function io(e){return e.toString(this.encoding)}function oo(e){return e&&e.length?this.write(e):""}var so,ao,lo,uo,ho,co,fo,po,go,yo,mo,bo,wo,vo,_o,Eo,So,Ao,To=Pt((()=>{for(Lt(),Rn(),dn(),so={byteLength:function(e){var t=di(e),r=t[0],n=t[1];return 3*(r+n)/4-n},toByteArray:function(e){var t,r,n,i=di(e),o=i[0],s=i[1],a=new uo(3*(o+(n=s))/4-n),l=0,u=s>0?o-4:o;for(r=0;r>16&255,a[l++]=t>>8&255,a[l++]=255&t;return 2===s&&(t=lo[e.charCodeAt(r)]<<2|lo[e.charCodeAt(r+1)]>>4,a[l++]=255&t),1===s&&(t=lo[e.charCodeAt(r)]<<10|lo[e.charCodeAt(r+1)]<<4|lo[e.charCodeAt(r+2)]>>2,a[l++]=t>>8&255,a[l++]=255&t),a},fromByteArray:function(e){for(var t,r=e.length,n=r%3,i=[],o=0,s=r-n;os?s:o+16383));return 1===n?(t=e[r-1],i.push(ao[t>>2]+ao[t<<4&63]+"==")):2===n&&(t=(e[r-2]<<8)+e[r-1],i.push(ao[t>>10]+ao[t>>4&63]+ao[t<<2&63]+"=")),i.join("")}},ao=[],lo=[],uo=typeof Uint8Array<"u"?Uint8Array:Array,ho="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",co=0;co<64;++co)ao[co]=ho[co],lo[ho.charCodeAt(co)]=co;lo["-".charCodeAt(0)]=62,lo["_".charCodeAt(0)]=63,fo={},po=so,go={read:function(e,t,r,n,i){var o,s,a=8*i-n-1,l=(1<>1,h=-7,c=r?i-1:0,f=r?-1:1,d=e[t+c];for(c+=f,o=d&(1<<-h)-1,d>>=-h,h+=a;h>0;o=256*o+e[t+c],c+=f,h-=8);for(s=o&(1<<-h)-1,o>>=-h,h+=n;h>0;s=256*s+e[t+c],c+=f,h-=8);if(0===o)o=1-u;else{if(o===l)return s?NaN:1/0*(d?-1:1);s+=Math.pow(2,n),o-=u}return(d?-1:1)*s*Math.pow(2,o-n)},write:function(e,t,r,n,i,o){var s,a,l,u=8*o-i-1,h=(1<>1,f=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,d=n?0:o-1,p=n?1:-1,g=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(a=isNaN(t)?1:0,s=h):(s=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-s))<1&&(s--,l*=2),(t+=s+c>=1?f/l:f*Math.pow(2,1-c))*l>=2&&(s++,l/=2),s+c>=h?(a=0,s=h):s+c>=1?(a=(t*l-1)*Math.pow(2,i),s+=c):(a=t*Math.pow(2,c-1)*Math.pow(2,i),s=0));i>=8;e[r+d]=255&a,d+=p,a/=256,i-=8);for(s=s<0;e[r+d]=255&s,d+=p,s/=256,u-=8);e[r+d-p]|=128*g}},yo="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null,fo.Buffer=yi,fo.SlowBuffer=function(e){return+e!=e&&(e=0),yi.alloc(+e)},fo.INSPECT_MAX_BYTES=50,fo.kMaxLength=2147483647,yi.TYPED_ARRAY_SUPPORT=function(){try{var e=new Uint8Array(1),t={foo:function(){return 42}};return Object.setPrototypeOf(t,Uint8Array.prototype),Object.setPrototypeOf(e,t),42===e.foo()}catch{return!1}}(),yi.TYPED_ARRAY_SUPPORT||typeof console>"u"||"function"!=typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),Object.defineProperty(yi.prototype,"parent",{enumerable:!0,get:function(){if(yi.isBuffer(this))return this.buffer}}),Object.defineProperty(yi.prototype,"offset",{enumerable:!0,get:function(){if(yi.isBuffer(this))return this.byteOffset}}),yi.poolSize=8192,yi.from=function(e,t,r){return mi(e,t,r)},Object.setPrototypeOf(yi.prototype,Uint8Array.prototype),Object.setPrototypeOf(yi,Uint8Array),yi.alloc=function(e,t,r){return i=t,o=r,bi(n=e),n<=0?gi(n):void 0!==i?"string"==typeof o?gi(n).fill(i,o):gi(n).fill(i):gi(n);var n,i,o},yi.allocUnsafe=function(e){return wi(e)},yi.allocUnsafeSlow=function(e){return wi(e)},yi.isBuffer=function(e){return null!=e&&!0===e._isBuffer&&e!==yi.prototype},yi.compare=function(e,t){if(Ki(e,Uint8Array)&&(e=yi.from(e,e.offset,e.byteLength)),Ki(t,Uint8Array)&&(t=yi.from(t,t.offset,t.byteLength)),!yi.isBuffer(e)||!yi.isBuffer(t))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(e===t)return 0;for(var r=e.length,n=t.length,i=0,o=Math.min(r,n);it&&(e+=" ... "),""},yo&&(yi.prototype[yo]=yi.prototype.inspect),yi.prototype.compare=function(e,t,r,n,i){if(Ki(e,Uint8Array)&&(e=yi.from(e,e.offset,e.byteLength)),!yi.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),t<0||r>e.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&t>=r)return 0;if(n>=i)return-1;if(t>=r)return 1;if(this===e)return 0;for(var o=(i>>>=0)-(n>>>=0),s=(r>>>=0)-(t>>>=0),a=Math.min(o,s),l=this.slice(n,i),u=e.slice(t,r),h=0;h>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}var i=this.length-t;if((void 0===r||r>i)&&(r=i),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return Ri(this,e,t,r);case"utf8":case"utf-8":return Oi(this,e,t,r);case"ascii":return Ci(this,e,t,r);case"latin1":case"binary":return ki(this,e,t,r);case"base64":return Pi(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Bi(this,e,t,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},yi.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},yi.prototype.slice=function(e,t){var r=this.length;(e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t>>=0,t>>>=0,r||Di(e,t,this.length);for(var n=this[e],i=1,o=0;++o>>=0,t>>>=0,r||Di(e,t,this.length);for(var n=this[e+--t],i=1;t>0&&(i*=256);)n+=this[e+--t]*i;return n},yi.prototype.readUInt8=function(e,t){return e>>>=0,t||Di(e,1,this.length),this[e]},yi.prototype.readUInt16LE=function(e,t){return e>>>=0,t||Di(e,2,this.length),this[e]|this[e+1]<<8},yi.prototype.readUInt16BE=function(e,t){return e>>>=0,t||Di(e,2,this.length),this[e]<<8|this[e+1]},yi.prototype.readUInt32LE=function(e,t){return e>>>=0,t||Di(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},yi.prototype.readUInt32BE=function(e,t){return e>>>=0,t||Di(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},yi.prototype.readIntLE=function(e,t,r){e>>>=0,t>>>=0,r||Di(e,t,this.length);for(var n=this[e],i=1,o=0;++o=(i*=128)&&(n-=Math.pow(2,8*t)),n},yi.prototype.readIntBE=function(e,t,r){e>>>=0,t>>>=0,r||Di(e,t,this.length);for(var n=t,i=1,o=this[e+--n];n>0&&(i*=256);)o+=this[e+--n]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*t)),o},yi.prototype.readInt8=function(e,t){return e>>>=0,t||Di(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},yi.prototype.readInt16LE=function(e,t){e>>>=0,t||Di(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},yi.prototype.readInt16BE=function(e,t){e>>>=0,t||Di(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},yi.prototype.readInt32LE=function(e,t){return e>>>=0,t||Di(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},yi.prototype.readInt32BE=function(e,t){return e>>>=0,t||Di(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},yi.prototype.readFloatLE=function(e,t){return e>>>=0,t||Di(e,4,this.length),go.read(this,e,!0,23,4)},yi.prototype.readFloatBE=function(e,t){return e>>>=0,t||Di(e,4,this.length),go.read(this,e,!1,23,4)},yi.prototype.readDoubleLE=function(e,t){return e>>>=0,t||Di(e,8,this.length),go.read(this,e,!0,52,8)},yi.prototype.readDoubleBE=function(e,t){return e>>>=0,t||Di(e,8,this.length),go.read(this,e,!1,52,8)},yi.prototype.writeUIntLE=function(e,t,r,n){e=+e,t>>>=0,r>>>=0,n||Fi(this,e,t,r,Math.pow(2,8*r)-1,0);var i=1,o=0;for(this[t]=255&e;++o>>=0,r>>>=0,n||Fi(this,e,t,r,Math.pow(2,8*r)-1,0);var i=r-1,o=1;for(this[t+i]=255&e;--i>=0&&(o*=256);)this[t+i]=e/o&255;return t+r},yi.prototype.writeUInt8=function(e,t,r){return e=+e,t>>>=0,r||Fi(this,e,t,1,255,0),this[t]=255&e,t+1},yi.prototype.writeUInt16LE=function(e,t,r){return e=+e,t>>>=0,r||Fi(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},yi.prototype.writeUInt16BE=function(e,t,r){return e=+e,t>>>=0,r||Fi(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},yi.prototype.writeUInt32LE=function(e,t,r){return e=+e,t>>>=0,r||Fi(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},yi.prototype.writeUInt32BE=function(e,t,r){return e=+e,t>>>=0,r||Fi(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},yi.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t>>>=0,!n){var i=Math.pow(2,8*r-1);Fi(this,e,t,r,i-1,-i)}var o=0,s=1,a=0;for(this[t]=255&e;++o>>=0,!n){var i=Math.pow(2,8*r-1);Fi(this,e,t,r,i-1,-i)}var o=r-1,s=1,a=0;for(this[t+o]=255&e;--o>=0&&(s*=256);)e<0&&0===a&&0!==this[t+o+1]&&(a=1),this[t+o]=(e/s|0)-a&255;return t+r},yi.prototype.writeInt8=function(e,t,r){return e=+e,t>>>=0,r||Fi(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},yi.prototype.writeInt16LE=function(e,t,r){return e=+e,t>>>=0,r||Fi(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},yi.prototype.writeInt16BE=function(e,t,r){return e=+e,t>>>=0,r||Fi(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},yi.prototype.writeInt32LE=function(e,t,r){return e=+e,t>>>=0,r||Fi(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},yi.prototype.writeInt32BE=function(e,t,r){return e=+e,t>>>=0,r||Fi(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},yi.prototype.writeFloatLE=function(e,t,r){return qi(this,e,t,!0,r)},yi.prototype.writeFloatBE=function(e,t,r){return qi(this,e,t,!1,r)},yi.prototype.writeDoubleLE=function(e,t,r){return $i(this,e,t,!0,r)},yi.prototype.writeDoubleBE=function(e,t,r){return $i(this,e,t,!1,r)},yi.prototype.copy=function(e,t,r,n){if(!yi.isBuffer(e))throw new TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t=0;--o)e[o+t]=this[o+r];else Uint8Array.prototype.set.call(e,this.subarray(r,n),t);return i},yi.prototype.fill=function(e,t,r,n){if("string"==typeof e){if("string"==typeof t?(n=t,t=0,r=this.length):"string"==typeof r&&(n=r,r=this.length),void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!yi.isEncoding(n))throw new TypeError("Unknown encoding: "+n);if(1===e.length){var i=e.charCodeAt(0);("utf8"===n&&i<128||"latin1"===n)&&(e=i)}}else"number"==typeof e?e&=255:"boolean"==typeof e&&(e=Number(e));if(t<0||this.length>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(o=t;o=0?(i>0&&(e.lastNeed=i-1),i):--n=0?(i>0&&(e.lastNeed=i-2),i):--n=0?(i>0&&(2===i?i=0:e.lastNeed=i-3),i):0}(this,e,t);if(!this.lastNeed)return e.toString("utf8",t);this.lastTotal=r;var n=e.length-(r-this.lastNeed);return e.copy(this.lastChar,0,n),e.toString("utf8",t,n)},Ji.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length},Eo.StringDecoder,Eo.StringDecoder})),Io={};xt(Io,{StringDecoder:()=>Ro,default:()=>Eo});var Ro,Oo=Pt((()=>{Lt(),Rn(),dn(),To(),To(),Ro=Eo.StringDecoder})),Co=Bt(((e,t)=>{Lt(),Rn(),dn();var r=Un(),{PromisePrototypeThen:n,SymbolAsyncIterator:i,SymbolIterator:o}=Cn(),{Buffer:s}=(In(),Ut(pn)),{ERR_INVALID_ARG_TYPE:a,ERR_STREAM_NULL_VALUES:l}=Bn().codes;t.exports=function(e,t,u){let h,c;if("string"==typeof t||t instanceof s)return new e({objectMode:!0,...u,read(){this.push(t),this.push(null)}});if(t&&t[i])c=!0,h=t[i]();else{if(!t||!t[o])throw new a("iterable",["Iterable"],t);c=!1,h=t[o]()}let f=new e({objectMode:!0,highWaterMark:1,...u}),d=!1;return f._read=function(){d||(d=!0,async function(){for(;;){try{let{value:e,done:t}=c?await h.next():h.next();if(t)f.push(null);else{let t=e&&"function"==typeof e.then?await e:e;if(null===t)throw d=!1,new l;if(f.push(t))continue;d=!1}}catch(e){f.destroy(e)}break}}())},f._destroy=function(e,t){n(async function(e){let t=null!=e,r="function"==typeof h.throw;if(t&&r){let{value:t,done:r}=await h.throw(e);if(await t,r)return}if("function"==typeof h.return){let{value:e}=await h.return();await e}}(e),(()=>r.nextTick(t,e)),(n=>r.nextTick(t,n||e)))},f}})),ko=Bt(((e,t)=>{Lt(),Rn(),dn();var r=Un(),{ArrayPrototypeIndexOf:n,NumberIsInteger:i,NumberIsNaN:o,NumberParseInt:s,ObjectDefineProperties:a,ObjectKeys:l,ObjectSetPrototypeOf:u,Promise:h,SafeSet:c,SymbolAsyncIterator:f,Symbol:d}=Cn();t.exports=D,D.ReadableState=j;var{EventEmitter:p}=(li(),Ut(ti)),{Stream:g,prependListener:y}=ui(),{Buffer:m}=(In(),Ut(pn)),{addAbortSignal:b}=hi(),w=Mn(),v=kn().debuglog("stream",(e=>{v=e})),_=ci(),E=Nn(),{getHighWaterMark:S,getDefaultHighWaterMark:A}=fi(),{aggregateTwoErrors:T,codes:{ERR_INVALID_ARG_TYPE:I,ERR_METHOD_NOT_IMPLEMENTED:R,ERR_OUT_OF_RANGE:O,ERR_STREAM_PUSH_AFTER_EOF:C,ERR_STREAM_UNSHIFT_AFTER_END_EVENT:k}}=Bn(),{validateObject:P}=xn(),B=d("kPaused"),{StringDecoder:x}=(Oo(),Ut(Io)),U=Co();u(D.prototype,g.prototype),u(D,g);var L,M=()=>{},{errorOrDestroy:N}=E;function j(e,t,r){"boolean"!=typeof r&&(r=t instanceof xo()),this.objectMode=!(!e||!e.objectMode),r&&(this.objectMode=this.objectMode||!(!e||!e.readableObjectMode)),this.highWaterMark=e?S(this,e,"readableHighWaterMark",r):A(!1),this.buffer=new _,this.length=0,this.pipes=[],this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.constructed=!0,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this[B]=null,this.errorEmitted=!1,this.emitClose=!e||!1!==e.emitClose,this.autoDestroy=!e||!1!==e.autoDestroy,this.destroyed=!1,this.errored=null,this.closed=!1,this.closeEmitted=!1,this.defaultEncoding=e&&e.defaultEncoding||"utf8",this.awaitDrainWriters=null,this.multiAwaitDrain=!1,this.readingMore=!1,this.dataEmitted=!1,this.decoder=null,this.encoding=null,e&&e.encoding&&(this.decoder=new x(e.encoding),this.encoding=e.encoding)}function D(e){if(!(this instanceof D))return new D(e);let t=this instanceof xo();this._readableState=new j(e,this,t),e&&("function"==typeof e.read&&(this._read=e.read),"function"==typeof e.destroy&&(this._destroy=e.destroy),"function"==typeof e.construct&&(this._construct=e.construct),e.signal&&!t&&b(e.signal,this)),g.call(this,e),E.construct(this,(()=>{this._readableState.needReadable&&V(this,this._readableState)}))}function F(e,t,r,n){v("readableAddChunk",t);let i,o=e._readableState;if(o.objectMode||("string"==typeof t?(r=r||o.defaultEncoding,o.encoding!==r&&(n&&o.encoding?t=m.from(t,r).toString(o.encoding):(t=m.from(t,r),r=""))):t instanceof m?r="":g._isUint8Array(t)?(t=g._uint8ArrayToBuffer(t),r=""):null!=t&&(i=new I("chunk",["string","Buffer","Uint8Array"],t))),i)N(e,i);else if(null===t)o.reading=!1,function(e,t){if(v("onEofChunk"),!t.ended){if(t.decoder){let e=t.decoder.end();e&&e.length&&(t.buffer.push(e),t.length+=t.objectMode?1:e.length)}t.ended=!0,t.sync?$(e):(t.needReadable=!1,t.emittedReadable=!0,H(e))}}(e,o);else if(o.objectMode||t&&t.length>0)if(n)if(o.endEmitted)N(e,new k);else{if(o.destroyed||o.errored)return!1;W(e,o,t,!0)}else if(o.ended)N(e,new C);else{if(o.destroyed||o.errored)return!1;o.reading=!1,o.decoder&&!r?(t=o.decoder.write(t),o.objectMode||0!==t.length?W(e,o,t,!1):V(e,o)):W(e,o,t,!1)}else n||(o.reading=!1,V(e,o));return!o.ended&&(o.length0?(t.multiAwaitDrain?t.awaitDrainWriters.clear():t.awaitDrainWriters=null,t.dataEmitted=!0,e.emit("data",r)):(t.length+=t.objectMode?1:r.length,n?t.buffer.unshift(r):t.buffer.push(r),t.needReadable&&$(e)),V(e,t)}function q(e,t){return e<=0||0===t.length&&t.ended?0:t.objectMode?1:o(e)?t.flowing&&t.length?t.buffer.first().length:t.length:e<=t.length?e:t.ended?t.length:0}function $(e){let t=e._readableState;v("emitReadable",t.needReadable,t.emittedReadable),t.needReadable=!1,t.emittedReadable||(v("emitReadable",t.flowing),t.emittedReadable=!0,r.nextTick(H,e))}function H(e){let t=e._readableState;v("emitReadable_",t.destroyed,t.length,t.ended),!t.destroyed&&!t.errored&&(t.length||t.ended)&&(e.emit("readable"),t.emittedReadable=!1),t.needReadable=!t.flowing&&!t.ended&&t.length<=t.highWaterMark,Q(e)}function V(e,t){!t.readingMore&&t.constructed&&(t.readingMore=!0,r.nextTick(z,e,t))}function z(e,t){for(;!t.reading&&!t.ended&&(t.length0,t.resumeScheduled&&!1===t[B]?t.flowing=!0:e.listenerCount("data")>0?e.resume():t.readableListening||(t.flowing=null)}function Y(e){v("readable nexttick read 0"),e.read(0)}function G(e,t){v("resume",t.reading),t.reading||e.read(0),t.resumeScheduled=!1,e.emit("resume"),Q(e),t.flowing&&!t.reading&&e.read(0)}function Q(e){let t=e._readableState;for(v("flow",t.flowing);t.flowing&&null!==e.read(););}function J(e,t){"function"!=typeof e.read&&(e=D.wrap(e,{objectMode:!0}));let r=async function*(e,t){let r=M;function n(t){this===e?(r(),r=M):r=t}e.on("readable",n);let i,o=w(e,{writable:!1},(e=>{i=e?T(i,e):null,r(),r=M}));try{for(;;){let t=e.destroyed?null:e.read();if(null!==t)yield t;else{if(i)throw i;if(null===i)return;await new h(n)}}}catch(e){throw i=T(i,e),i}finally{!i&&!1===t?.destroyOnReturn||void 0!==i&&!e._readableState.autoDestroy?(e.off("readable",n),o()):E.destroyer(e,null)}}(e,t);return r.stream=e,r}function X(e,t){if(0===t.length)return null;let r;return t.objectMode?r=t.buffer.shift():!e||e>=t.length?(r=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.first():t.buffer.concat(t.length),t.buffer.clear()):r=t.buffer.consume(e,t.decoder),r}function Z(e){let t=e._readableState;v("endReadable",t.endEmitted),t.endEmitted||(t.ended=!0,r.nextTick(ee,t,e))}function ee(e,t){if(v("endReadableNT",e.endEmitted,e.length),!e.errored&&!e.closeEmitted&&!e.endEmitted&&0===e.length)if(e.endEmitted=!0,t.emit("end"),t.writable&&!1===t.allowHalfOpen)r.nextTick(te,t);else if(e.autoDestroy){let e=t._writableState;(!e||e.autoDestroy&&(e.finished||!1===e.writable))&&t.destroy()}}function te(e){e.writable&&!e.writableEnded&&!e.destroyed&&e.end()}function re(){return void 0===L&&(L={}),L}D.prototype.destroy=E.destroy,D.prototype._undestroy=E.undestroy,D.prototype._destroy=function(e,t){t(e)},D.prototype[p.captureRejectionSymbol]=function(e){this.destroy(e)},D.prototype.push=function(e,t){return F(this,e,t,!1)},D.prototype.unshift=function(e,t){return F(this,e,t,!0)},D.prototype.isPaused=function(){let e=this._readableState;return!0===e[B]||!1===e.flowing},D.prototype.setEncoding=function(e){let t=new x(e);this._readableState.decoder=t,this._readableState.encoding=this._readableState.decoder.encoding;let r=this._readableState.buffer,n="";for(let e of r)n+=t.write(e);return r.clear(),""!==n&&r.push(n),this._readableState.length=n.length,this},D.prototype.read=function(e){v("read",e),void 0===e?e=NaN:i(e)||(e=s(e,10));let t=this._readableState,r=e;if(e>t.highWaterMark&&(t.highWaterMark=function(e){if(e>1073741824)throw new O("size","<= 1GiB",e);return e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,++e}(e)),0!==e&&(t.emittedReadable=!1),0===e&&t.needReadable&&((0!==t.highWaterMark?t.length>=t.highWaterMark:t.length>0)||t.ended))return v("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?Z(this):$(this),null;if(0===(e=q(e,t))&&t.ended)return 0===t.length&&Z(this),null;let n,o=t.needReadable;if(v("need readable",o),(0===t.length||t.length-e0?X(e,t):null,null===n?(t.needReadable=t.length<=t.highWaterMark,e=0):(t.length-=e,t.multiAwaitDrain?t.awaitDrainWriters.clear():t.awaitDrainWriters=null),0===t.length&&(t.ended||(t.needReadable=!0),r!==e&&t.ended&&Z(this)),null!==n&&!t.errorEmitted&&!t.closeEmitted&&(t.dataEmitted=!0,this.emit("data",n)),n},D.prototype._read=function(e){throw new R("_read()")},D.prototype.pipe=function(e,t){let n=this,i=this._readableState;1===i.pipes.length&&(i.multiAwaitDrain||(i.multiAwaitDrain=!0,i.awaitDrainWriters=new c(i.awaitDrainWriters?[i.awaitDrainWriters]:[]))),i.pipes.push(e),v("pipe count=%d opts=%j",i.pipes.length,t);let o=t&&!1===t.end||e===r.stdout||e===r.stderr?g:s;function s(){v("onend"),e.end()}i.endEmitted?r.nextTick(o):n.once("end",o),e.on("unpipe",(function t(r,o){v("onunpipe"),r===n&&o&&!1===o.hasUnpiped&&(o.hasUnpiped=!0,v("cleanup"),e.removeListener("close",d),e.removeListener("finish",p),a&&e.removeListener("drain",a),e.removeListener("error",f),e.removeListener("unpipe",t),n.removeListener("end",s),n.removeListener("end",g),n.removeListener("data",h),l=!0,a&&i.awaitDrainWriters&&(!e._writableState||e._writableState.needDrain)&&a())}));let a,l=!1;function u(){l||(1===i.pipes.length&&i.pipes[0]===e?(v("false write response, pause",0),i.awaitDrainWriters=e,i.multiAwaitDrain=!1):i.pipes.length>1&&i.pipes.includes(e)&&(v("false write response, pause",i.awaitDrainWriters.size),i.awaitDrainWriters.add(e)),n.pause()),a||(a=function(e,t){return function(){let r=e._readableState;r.awaitDrainWriters===t?(v("pipeOnDrain",1),r.awaitDrainWriters=null):r.multiAwaitDrain&&(v("pipeOnDrain",r.awaitDrainWriters.size),r.awaitDrainWriters.delete(t)),(!r.awaitDrainWriters||0===r.awaitDrainWriters.size)&&e.listenerCount("data")&&e.resume()}}(n,e),e.on("drain",a))}function h(t){v("ondata");let r=e.write(t);v("dest.write",r),!1===r&&u()}function f(t){if(v("onerror",t),g(),e.removeListener("error",f),0===e.listenerCount("error")){let r=e._writableState||e._readableState;r&&!r.errorEmitted?N(e,t):e.emit("error",t)}}function d(){e.removeListener("finish",p),g()}function p(){v("onfinish"),e.removeListener("close",d),g()}function g(){v("unpipe"),n.unpipe(e)}return n.on("data",h),y(e,"error",f),e.once("close",d),e.once("finish",p),e.emit("pipe",n),!0===e.writableNeedDrain?i.flowing&&u():i.flowing||(v("pipe resume"),n.resume()),e},D.prototype.unpipe=function(e){let t=this._readableState;if(0===t.pipes.length)return this;if(!e){let e=t.pipes;t.pipes=[],this.pause();for(let t=0;t0,!1!==i.flowing&&this.resume()):"readable"===e&&!i.endEmitted&&!i.readableListening&&(i.readableListening=i.needReadable=!0,i.flowing=!1,i.emittedReadable=!1,v("on readable",i.length,i.reading),i.length?$(this):i.reading||r.nextTick(Y,this)),n},D.prototype.addListener=D.prototype.on,D.prototype.removeListener=function(e,t){let n=g.prototype.removeListener.call(this,e,t);return"readable"===e&&r.nextTick(K,this),n},D.prototype.off=D.prototype.removeListener,D.prototype.removeAllListeners=function(e){let t=g.prototype.removeAllListeners.apply(this,arguments);return("readable"===e||void 0===e)&&r.nextTick(K,this),t},D.prototype.resume=function(){let e=this._readableState;return e.flowing||(v("resume"),e.flowing=!e.readableListening,function(e,t){t.resumeScheduled||(t.resumeScheduled=!0,r.nextTick(G,e,t))}(this,e)),e[B]=!1,this},D.prototype.pause=function(){return v("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(v("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState[B]=!0,this},D.prototype.wrap=function(e){let t=!1;e.on("data",(r=>{!this.push(r)&&e.pause&&(t=!0,e.pause())})),e.on("end",(()=>{this.push(null)})),e.on("error",(e=>{N(this,e)})),e.on("close",(()=>{this.destroy()})),e.on("destroy",(()=>{this.destroy()})),this._read=()=>{t&&e.resume&&(t=!1,e.resume())};let r=l(e);for(let t=1;t{Lt(),Rn(),dn();var r=Un(),{ArrayPrototypeSlice:n,Error:i,FunctionPrototypeSymbolHasInstance:o,ObjectDefineProperty:s,ObjectDefineProperties:a,ObjectSetPrototypeOf:l,StringPrototypeToLowerCase:u,Symbol:h,SymbolHasInstance:c}=Cn();t.exports=x,x.WritableState=P;var{EventEmitter:f}=(li(),Ut(ti)),d=ui().Stream,{Buffer:p}=(In(),Ut(pn)),g=Nn(),{addAbortSignal:y}=hi(),{getHighWaterMark:m,getDefaultHighWaterMark:b}=fi(),{ERR_INVALID_ARG_TYPE:w,ERR_METHOD_NOT_IMPLEMENTED:v,ERR_MULTIPLE_CALLBACK:_,ERR_STREAM_CANNOT_PIPE:E,ERR_STREAM_DESTROYED:S,ERR_STREAM_ALREADY_FINISHED:A,ERR_STREAM_NULL_VALUES:T,ERR_STREAM_WRITE_AFTER_END:I,ERR_UNKNOWN_ENCODING:R}=Bn().codes,{errorOrDestroy:O}=g;function C(){}l(x.prototype,d.prototype),l(x,d);var k=h("kOnFinished");function P(e,t,r){"boolean"!=typeof r&&(r=t instanceof xo()),this.objectMode=!(!e||!e.objectMode),r&&(this.objectMode=this.objectMode||!(!e||!e.writableObjectMode)),this.highWaterMark=e?m(this,e,"writableHighWaterMark",r):b(!1),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;let n=!(!e||!1!==e.decodeStrings);this.decodeStrings=!n,this.defaultEncoding=e&&e.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=N.bind(void 0,t),this.writecb=null,this.writelen=0,this.afterWriteTickInfo=null,B(this),this.pendingcb=0,this.constructed=!0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=!e||!1!==e.emitClose,this.autoDestroy=!e||!1!==e.autoDestroy,this.errored=null,this.closed=!1,this.closeEmitted=!1,this[k]=[]}function B(e){e.buffered=[],e.bufferedIndex=0,e.allBuffers=!0,e.allNoop=!0}function x(e){let t=this instanceof xo();if(!t&&!o(x,this))return new x(e);this._writableState=new P(e,this,t),e&&("function"==typeof e.write&&(this._write=e.write),"function"==typeof e.writev&&(this._writev=e.writev),"function"==typeof e.destroy&&(this._destroy=e.destroy),"function"==typeof e.final&&(this._final=e.final),"function"==typeof e.construct&&(this._construct=e.construct),e.signal&&y(e.signal,this)),d.call(this,e),g.construct(this,(()=>{let e=this._writableState;e.writing||W(this,e),$(this,e)}))}function U(e,t,n,i){let o,s=e._writableState;if("function"==typeof n)i=n,n=s.defaultEncoding;else{if(n){if("buffer"!==n&&!p.isEncoding(n))throw new R(n)}else n=s.defaultEncoding;"function"!=typeof i&&(i=C)}if(null===t)throw new T;if(!s.objectMode)if("string"==typeof t)!1!==s.decodeStrings&&(t=p.from(t,n),n="buffer");else if(t instanceof p)n="buffer";else{if(!d._isUint8Array(t))throw new w("chunk",["string","Buffer","Uint8Array"],t);t=d._uint8ArrayToBuffer(t),n="buffer"}return s.ending?o=new I:s.destroyed&&(o=new S("write")),o?(r.nextTick(i,o),O(e,o,!0),o):(s.pendingcb++,function(e,t,r,n,i){let o=t.objectMode?1:r.length;t.length+=o;let s=t.lengthn.bufferedIndex&&W(e,n),i?null!==n.afterWriteTickInfo&&n.afterWriteTickInfo.cb===o?n.afterWriteTickInfo.count++:(n.afterWriteTickInfo={count:1,cb:o,stream:e,state:n},r.nextTick(j,n.afterWriteTickInfo)):D(e,n,1,o))):O(e,new _)}function j({stream:e,state:t,count:r,cb:n}){return t.afterWriteTickInfo=null,D(e,t,r,n)}function D(e,t,r,n){for(!t.ending&&!e.destroyed&&0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit("drain"));r-- >0;)t.pendingcb--,n();t.destroyed&&F(t),$(e,t)}function F(e){if(e.writing)return;for(let r=e.bufferedIndex;r1&&e._writev){t.pendingcb-=s-1;let i=t.allNoop?C:e=>{for(let t=a;t256?(r.splice(0,a),t.bufferedIndex=0):t.bufferedIndex=a}t.bufferProcessing=!1}function q(e){return e.ending&&!e.destroyed&&e.constructed&&0===e.length&&!e.errored&&0===e.buffered.length&&!e.finished&&!e.writing&&!e.errorEmitted&&!e.closeEmitted}function $(e,t,n){q(t)&&(function(e,t){!t.prefinished&&!t.finalCalled&&("function"!=typeof e._final||t.destroyed?(t.prefinished=!0,e.emit("prefinish")):(t.finalCalled=!0,function(e,t){let n=!1;function i(i){if(n)O(e,i??_());else if(n=!0,t.pendingcb--,i){let r=t[k].splice(0);for(let e=0;e{q(t)?H(e,t):t.pendingcb--}),e,t)):q(t)&&(t.pendingcb++,H(e,t))))}function H(e,t){t.pendingcb--,t.finished=!0;let r=t[k].splice(0);for(let e=0;e{Lt(),Rn(),dn();var r=Un(),n=(In(),Ut(pn)),{isReadable:i,isWritable:o,isIterable:s,isNodeStream:a,isReadableNodeStream:l,isWritableNodeStream:u,isDuplexNodeStream:h}=Ln(),c=Mn(),{AbortError:f,codes:{ERR_INVALID_ARG_TYPE:d,ERR_INVALID_RETURN_VALUE:p}}=Bn(),{destroyer:g}=Nn(),y=xo(),m=ko(),{createDeferredPromise:b}=kn(),w=Co(),v=globalThis.Blob||n.Blob,_=typeof v<"u"?function(e){return e instanceof v}:function(e){return!1},E=globalThis.AbortController||Pn().AbortController,{FunctionPrototypeCall:S}=Cn(),A=class extends y{constructor(e){super(e),!1===e?.readable&&(this._readableState.readable=!1,this._readableState.ended=!0,this._readableState.endEmitted=!0),!1===e?.writable&&(this._writableState.writable=!1,this._writableState.ending=!0,this._writableState.ended=!0,this._writableState.finished=!0)}};function T(e){let t,r,n,s,a,l=e.readable&&"function"!=typeof e.readable.read?m.wrap(e.readable):e.readable,u=e.writable,h=!!i(l),d=!!o(u);function p(e){let t=s;s=null,t?t(e):e&&a.destroy(e)}return a=new A({readableObjectMode:!(null==l||!l.readableObjectMode),writableObjectMode:!(null==u||!u.writableObjectMode),readable:h,writable:d}),d&&(c(u,(e=>{d=!1,e&&g(l,e),p(e)})),a._write=function(e,r,n){u.write(e,r)?n():t=n},a._final=function(e){u.end(),r=e},u.on("drain",(function(){if(t){let e=t;t=null,e()}})),u.on("finish",(function(){if(r){let e=r;r=null,e()}}))),h&&(c(l,(e=>{h=!1,e&&g(l,e),p(e)})),l.on("readable",(function(){if(n){let e=n;n=null,e()}})),l.on("end",(function(){a.push(null)})),a._read=function(){for(;;){let e=l.read();if(null===e)return void(n=a._read);if(!a.push(e))return}}),a._destroy=function(e,i){!e&&null!==s&&(e=new f),n=null,t=null,r=null,null===s?i(e):(s=i,g(u,e),g(l,e))},a}t.exports=function e(t,n){if(h(t))return t;if(l(t))return T({readable:t});if(u(t))return T({writable:t});if(a(t))return T({writable:!1,readable:!1});if("function"==typeof t){let{value:e,write:i,final:o,destroy:a}=function(e){let{promise:t,resolve:n}=b(),i=new E,o=i.signal;return{value:e(async function*(){for(;;){let e=t;t=null;let{chunk:i,done:s,cb:a}=await e;if(r.nextTick(a),s)return;if(o.aborted)throw new f(void 0,{cause:o.reason});({promise:t,resolve:n}=b()),yield i}}(),{signal:o}),write(e,t,r){let i=n;n=null,i({chunk:e,done:!1,cb:r})},final(e){let t=n;n=null,t({done:!0,cb:e})},destroy(e,t){i.abort(),t(e)}}}(t);if(s(e))return w(A,e,{objectMode:!0,write:i,final:o,destroy:a});let l=e?.then;if("function"==typeof l){let t,n=S(l,e,(e=>{if(null!=e)throw new p("nully","body",e)}),(e=>{g(t,e)}));return t=new A({objectMode:!0,readable:!1,write:i,final(e){o((async()=>{try{await n,r.nextTick(e,null)}catch(t){r.nextTick(e,t)}}))},destroy:a})}throw new p("Iterable, AsyncIterable or AsyncFunction",n,e)}if(_(t))return e(t.arrayBuffer());if(s(t))return w(A,t,{objectMode:!0,writable:!1});if("object"==typeof t?.writable||"object"==typeof t?.readable)return T({readable:null!=t&&t.readable?l(t?.readable)?t?.readable:e(t.readable):void 0,writable:null!=t&&t.writable?u(t?.writable)?t?.writable:e(t.writable):void 0});let i=t?.then;if("function"==typeof i){let e;return S(i,t,(t=>{null!=t&&e.push(t),e.push(null)}),(t=>{g(e,t)})),e=new A({objectMode:!0,writable:!1,read(){}})}throw new d(n,["Blob","ReadableStream","WritableStream","Stream","Iterable","AsyncIterable","Function","{ readable, writable } pair","Promise"],t)}})),xo=Bt(((e,t)=>{Lt(),Rn(),dn();var{ObjectDefineProperties:r,ObjectGetOwnPropertyDescriptor:n,ObjectKeys:i,ObjectSetPrototypeOf:o}=Cn();t.exports=h;var s,a,l=ko(),u=Po();o(h.prototype,l.prototype),o(h,l);{let e=i(u.prototype);for(let t=0;t{Lt(),Rn(),dn();var{ObjectSetPrototypeOf:r,Symbol:n}=Cn();t.exports=l;var{ERR_METHOD_NOT_IMPLEMENTED:i}=Bn().codes,o=xo(),{getHighWaterMark:s}=fi();r(l.prototype,o.prototype),r(l,o);var a=n("kCallback");function l(e){if(!(this instanceof l))return new l(e);let t=e?s(this,e,"readableHighWaterMark",!0):null;0===t&&(e={...e,highWaterMark:null,readableHighWaterMark:t,writableHighWaterMark:e.writableHighWaterMark||0}),o.call(this,e),this._readableState.sync=!1,this[a]=null,e&&("function"==typeof e.transform&&(this._transform=e.transform),"function"==typeof e.flush&&(this._flush=e.flush)),this.on("prefinish",h)}function u(e){"function"!=typeof this._flush||this.destroyed?(this.push(null),e&&e()):this._flush(((t,r)=>{t?e?e(t):this.destroy(t):(null!=r&&this.push(r),this.push(null),e&&e())}))}function h(){this._final!==u&&u.call(this)}l.prototype._final=u,l.prototype._transform=function(e,t,r){throw new i("_transform()")},l.prototype._write=function(e,t,r){let n=this._readableState,i=this._writableState,o=n.length;this._transform(e,t,((e,t)=>{e?r(e):(null!=t&&this.push(t),i.ended||o===n.length||n.length{Lt(),Rn(),dn();var{ObjectSetPrototypeOf:r}=Cn();t.exports=i;var n=Uo();function i(e){if(!(this instanceof i))return new i(e);n.call(this,e)}r(i.prototype,n.prototype),r(i,n),i.prototype._transform=function(e,t,r){r(null,e)}})),Mo=Bt(((e,t)=>{Lt(),Rn(),dn();var r,n,i=Un(),{ArrayIsArray:o,Promise:s,SymbolAsyncIterator:a}=Cn(),l=Mn(),{once:u}=kn(),h=Nn(),c=xo(),{aggregateTwoErrors:f,codes:{ERR_INVALID_ARG_TYPE:d,ERR_INVALID_RETURN_VALUE:p,ERR_MISSING_ARGS:g,ERR_STREAM_DESTROYED:y,ERR_STREAM_PREMATURE_CLOSE:m},AbortError:b}=Bn(),{validateFunction:w,validateAbortSignal:v}=xn(),{isIterable:_,isReadable:E,isReadableNodeStream:S,isNodeStream:A,isTransformStream:T,isWebStream:I,isReadableStream:R,isReadableEnded:O}=Ln(),C=globalThis.AbortController||Pn().AbortController;function k(e,t,r){let n=!1;return e.on("close",(()=>{n=!0})),{destroy:t=>{n||(n=!0,h.destroyer(e,t||new y("pipe")))},cleanup:l(e,{readable:t,writable:r},(e=>{n=!e}))}}function P(e){if(_(e))return e;if(S(e))return async function*(e){n||(n=ko()),yield*n.prototype[a].call(e)}(e);throw new d("val",["Readable","Iterable","AsyncIterable"],e)}async function B(e,t,r,{end:n}){let i,o=null,a=e=>{if(e&&(i=e),o){let e=o;o=null,e()}},u=()=>new s(((e,t)=>{i?t(i):o=()=>{i?t(i):e()}}));t.on("drain",a);let h=l(t,{readable:!1},a);try{t.writableNeedDrain&&await u();for await(let r of e)t.write(r)||await u();n&&t.end(),await u(),r()}catch(e){r(i!==e?f(i,e):e)}finally{h(),t.off("drain",a)}}async function x(e,t,r,{end:n}){T(t)&&(t=t.writable);let i=t.getWriter();try{for await(let t of e)await i.ready,i.write(t).catch((()=>{}));await i.ready,n&&await i.close(),r()}catch(e){try{await i.abort(e),r(e)}catch(e){r(e)}}}function U(e,t,n){if(1===e.length&&o(e[0])&&(e=e[0]),e.length<2)throw new g("streams");let s=new C,a=s.signal,l=n?.signal,u=[];function h(){M(new b)}v(l,"options.signal"),l?.addEventListener("abort",h);let f,y,m,w=[],O=0;function U(e){M(e,0==--O)}function M(e,r){if(e&&(!f||"ERR_STREAM_PREMATURE_CLOSE"===f.code)&&(f=e),f||r){for(;w.length;)w.shift()(f);l?.removeEventListener("abort",h),s.abort(),r&&(f||u.forEach((e=>e())),i.nextTick(t,f,y))}}for(let t=0;t0,h=s||!1!==n?.end,f=t===e.length-1;if(A(o)){let e=function(e){e&&"AbortError"!==e.name&&"ERR_STREAM_PREMATURE_CLOSE"!==e.code&&U(e)};if(h){let{destroy:e,cleanup:t}=k(o,s,l);w.push(e),E(o)&&f&&u.push(t)}o.on("error",e),E(o)&&f&&u.push((()=>{o.removeListener("error",e)}))}if(0===t)if("function"==typeof o){if(m=o({signal:a}),!_(m))throw new p("Iterable, AsyncIterable or Stream","source",m)}else m=_(o)||S(o)||T(o)?o:c.from(o);else if("function"==typeof o){var N;if(m=T(m)?P(null===(N=m)||void 0===N?void 0:N.readable):P(m),m=o(m,{signal:a}),s){if(!_(m,!0))throw new p("AsyncIterable",`transform[${t-1}]`,m)}else{var j;r||(r=Lo());let e=new r({objectMode:!0}),t=null===(j=m)||void 0===j?void 0:j.then;if("function"==typeof t)O++,t.call(m,(t=>{y=t,null!=t&&e.write(t),h&&e.end(),i.nextTick(U)}),(t=>{e.destroy(t),i.nextTick(U,t)}));else if(_(m,!0))O++,B(m,e,U,{end:h});else{if(!R(m)&&!T(m))throw new p("AsyncIterable or Promise","destination",m);{let t=m.readable||m;O++,B(t,e,U,{end:h})}}m=e;let{destroy:n,cleanup:o}=k(m,!1,!0);w.push(n),f&&u.push(o)}}else if(A(o)){if(S(m)){O+=2;let e=L(m,o,U,{end:h});E(o)&&f&&u.push(e)}else if(T(m)||R(m)){let e=m.readable||m;O++,B(e,o,U,{end:h})}else{if(!_(m))throw new d("val",["Readable","Iterable","AsyncIterable","ReadableStream","TransformStream"],m);O++,B(m,o,U,{end:h})}m=o}else if(I(o)){if(S(m))O++,x(P(m),o,U,{end:h});else if(R(m)||_(m))O++,x(m,o,U,{end:h});else{if(!T(m))throw new d("val",["Readable","Iterable","AsyncIterable","ReadableStream","TransformStream"],m);O++,x(m.readable,o,U,{end:h})}m=o}else m=c.from(o)}return(null!=a&&a.aborted||null!=l&&l.aborted)&&i.nextTick(h),m}function L(e,t,r,{end:n}){let o=!1;if(t.on("close",(()=>{o||r(new m)})),e.pipe(t,{end:!1}),n){let r=function(){o=!0,t.end()};O(e)?i.nextTick(r):e.once("end",r)}else r();return l(e,{readable:!0,writable:!1},(t=>{let n=e._readableState;t&&"ERR_STREAM_PREMATURE_CLOSE"===t.code&&n&&n.ended&&!n.errored&&!n.errorEmitted?e.once("end",r).once("error",r):r(t)})),l(t,{readable:!1,writable:!0},r)}t.exports={pipelineImpl:U,pipeline:function(...e){return U(e,u(function(e){return w(e[e.length-1],"streams[stream.length - 1]"),e.pop()}(e)))}}})),No=Bt(((e,t)=>{Lt(),Rn(),dn();var{pipeline:r}=Mo(),n=xo(),{destroyer:i}=Nn(),{isNodeStream:o,isReadable:s,isWritable:a,isWebStream:l,isTransformStream:u,isWritableStream:h,isReadableStream:c}=Ln(),{AbortError:f,codes:{ERR_INVALID_ARG_VALUE:d,ERR_MISSING_ARGS:p}}=Bn(),g=Mn();t.exports=function(...e){if(0===e.length)throw new p("streams");if(1===e.length)return n.from(e[0]);let t,y,m,b,w,v=[...e];if("function"==typeof e[0]&&(e[0]=n.from(e[0])),"function"==typeof e[e.length-1]){let t=e.length-1;e[t]=n.from(e[t])}for(let t=0;t0&&!(a(e[t])||h(e[t])||u(e[t])))throw new d(`streams[${t}]`,v[t],"must be writable")}let _=e[0],E=r(e,(function(e){let t=b;b=null,t?t(e):e?w.destroy(e):!A&&!S&&w.destroy()})),S=!!(a(_)||h(_)||u(_)),A=!!(s(E)||c(E)||u(E));if(w=new n({writableObjectMode:!(null==_||!_.writableObjectMode),readableObjectMode:!(null==E||!E.writableObjectMode),writable:S,readable:A}),S){if(o(_))w._write=function(e,r,n){_.write(e,r)?n():t=n},w._final=function(e){_.end(),y=e},_.on("drain",(function(){if(t){let e=t;t=null,e()}}));else if(l(_)){let e=(u(_)?_.writable:_).getWriter();w._write=async function(t,r,n){try{await e.ready,e.write(t).catch((()=>{})),n()}catch(e){n(e)}},w._final=async function(t){try{await e.ready,e.close().catch((()=>{})),y=t}catch(e){t(e)}}}let e=u(E)?E.readable:E;g(e,(()=>{if(y){let e=y;y=null,e()}}))}if(A)if(o(E))E.on("readable",(function(){if(m){let e=m;m=null,e()}})),E.on("end",(function(){w.push(null)})),w._read=function(){for(;;){let e=E.read();if(null===e)return void(m=w._read);if(!w.push(e))return}};else if(l(E)){let e=(u(E)?E.readable:E).getReader();w._read=async function(){for(;;)try{let{value:t,done:r}=await e.read();if(!w.push(t))return;if(r)return void w.push(null)}catch{return}}}return w._destroy=function(e,r){!e&&null!==b&&(e=new f),m=null,t=null,y=null,null===b?r(e):(b=r,o(E)&&i(E,e))},w}})),jo=Bt(((e,t)=>{Lt(),Rn(),dn();var r=globalThis.AbortController||Pn().AbortController,{codes:{ERR_INVALID_ARG_VALUE:n,ERR_INVALID_ARG_TYPE:i,ERR_MISSING_ARGS:o,ERR_OUT_OF_RANGE:s},AbortError:a}=Bn(),{validateAbortSignal:l,validateInteger:u,validateObject:h}=xn(),c=Cn().Symbol("kWeak"),{finished:f}=Mn(),d=No(),{addAbortSignalNoValidate:p}=hi(),{isWritable:g,isNodeStream:y}=Ln(),{ArrayPrototypePush:m,MathFloor:b,Number:w,NumberIsNaN:v,Promise:_,PromiseReject:E,PromisePrototypeThen:S,Symbol:A}=Cn(),T=A("kEmpty"),I=A("kEof");function R(e,t){if("function"!=typeof e)throw new i("fn",["Function","AsyncFunction"],e);null!=t&&h(t,"options"),null!=t?.signal&&l(t.signal,"options.signal");let n=1;return null!=t?.concurrency&&(n=b(t.concurrency)),u(n,"concurrency",1),async function*(){var i,o;let s=new r,l=this,u=[],h=s.signal,c={signal:h},f=()=>s.abort();null!=t&&null!==(i=t.signal)&&void 0!==i&&i.aborted&&f(),null==t||null===(o=t.signal)||void 0===o||o.addEventListener("abort",f);let d,p,g=!1;function y(){g=!0}!async function(){try{for await(let t of l){var r;if(g)return;if(h.aborted)throw new a;try{t=e(t,c)}catch(e){t=E(e)}t!==T&&("function"==typeof(null===(r=t)||void 0===r?void 0:r.catch)&&t.catch(y),u.push(t),d&&(d(),d=null),!g&&u.length&&u.length>=n&&await new _((e=>{p=e})))}u.push(I)}catch(e){let t=E(e);S(t,void 0,y),u.push(t)}finally{var i;g=!0,d&&(d(),d=null),null==t||null===(i=t.signal)||void 0===i||i.removeEventListener("abort",f)}}();try{for(;;){for(;u.length>0;){let e=await u[0];if(e===I)return;if(h.aborted)throw new a;e!==T&&(yield e),u.shift(),p&&(p(),p=null)}await new _((e=>{d=e}))}}finally{s.abort(),g=!0,p&&(p(),p=null)}}.call(this)}async function O(e,t=void 0){for await(let r of C.call(this,e,t))return!0;return!1}function C(e,t){if("function"!=typeof e)throw new i("fn",["Function","AsyncFunction"],e);return R.call(this,(async function(t,r){return await e(t,r)?t:T}),t)}var k=class extends o{constructor(){super("reduce"),this.message="Reduce of an empty stream requires an initial value"}};function P(e){if(e=w(e),v(e))return 0;if(e<0)throw new s("number",">= 0",e);return e}t.exports.streamReturningOperators={asIndexedPairs:function(e=void 0){return null!=e&&h(e,"options"),null!=e?.signal&&l(e.signal,"options.signal"),async function*(){let t=0;for await(let n of this){var r;if(null!=e&&null!==(r=e.signal)&&void 0!==r&&r.aborted)throw new a({cause:e.signal.reason});yield[t++,n]}}.call(this)},drop:function(e,t=void 0){return null!=t&&h(t,"options"),null!=t?.signal&&l(t.signal,"options.signal"),e=P(e),async function*(){var r;if(null!=t&&null!==(r=t.signal)&&void 0!==r&&r.aborted)throw new a;for await(let r of this){var n;if(null!=t&&null!==(n=t.signal)&&void 0!==n&&n.aborted)throw new a;e--<=0&&(yield r)}}.call(this)},filter:C,flatMap:function(e,t){let r=R.call(this,e,t);return async function*(){for await(let e of r)yield*e}.call(this)},map:R,take:function(e,t=void 0){return null!=t&&h(t,"options"),null!=t?.signal&&l(t.signal,"options.signal"),e=P(e),async function*(){var r;if(null!=t&&null!==(r=t.signal)&&void 0!==r&&r.aborted)throw new a;for await(let r of this){var n;if(null!=t&&null!==(n=t.signal)&&void 0!==n&&n.aborted)throw new a;if(!(e-- >0))return;yield r}}.call(this)},compose:function(e,t){if(null!=t&&h(t,"options"),null!=t?.signal&&l(t.signal,"options.signal"),y(e)&&!g(e))throw new n("stream",e,"must be writable");let r=d(this,e);return null!=t&&t.signal&&p(t.signal,r),r}},t.exports.promiseReturningOperators={every:async function(e,t=void 0){if("function"!=typeof e)throw new i("fn",["Function","AsyncFunction"],e);return!await O.call(this,(async(...t)=>!await e(...t)),t)},forEach:async function(e,t){if("function"!=typeof e)throw new i("fn",["Function","AsyncFunction"],e);for await(let r of R.call(this,(async function(t,r){return await e(t,r),T}),t));},reduce:async function(e,t,n){var o;if("function"!=typeof e)throw new i("reducer",["Function","AsyncFunction"],e);null!=n&&h(n,"options"),null!=n?.signal&&l(n.signal,"options.signal");let s=arguments.length>1;if(null!=n&&null!==(o=n.signal)&&void 0!==o&&o.aborted){let e=new a(void 0,{cause:n.signal.reason});throw this.once("error",(()=>{})),await f(this.destroy(e)),e}let u=new r,d=u.signal;if(null!=n&&n.signal){let e={once:!0,[c]:this};n.signal.addEventListener("abort",(()=>u.abort()),e)}let p=!1;try{for await(let r of this){var g;if(p=!0,null!=n&&null!==(g=n.signal)&&void 0!==g&&g.aborted)throw new a;s?t=await e(t,r,{signal:d}):(t=r,s=!0)}if(!p&&!s)throw new k}finally{u.abort()}return t},toArray:async function(e){null!=e&&h(e,"options"),null!=e?.signal&&l(e.signal,"options.signal");let t=[];for await(let n of this){var r;if(null!=e&&null!==(r=e.signal)&&void 0!==r&&r.aborted)throw new a(void 0,{cause:e.signal.reason});m(t,n)}return t},some:O,find:async function(e,t){for await(let r of C.call(this,e,t))return r}}})),Do=Bt(((e,t)=>{Lt(),Rn(),dn();var{ArrayPrototypePop:r,Promise:n}=Cn(),{isIterable:i,isNodeStream:o,isWebStream:s}=Ln(),{pipelineImpl:a}=Mo(),{finished:l}=Mn();Fo(),t.exports={finished:l,pipeline:function(...e){return new n(((t,n)=>{let l,u,h=e[e.length-1];if(h&&"object"==typeof h&&!o(h)&&!i(h)&&!s(h)){let t=r(e);l=t.signal,u=t.end}a(e,((e,r)=>{e?n(e):t(r)}),{signal:l,end:u})}))}}})),Fo=Bt(((e,t)=>{Lt(),Rn(),dn();var{Buffer:r}=(In(),Ut(pn)),{ObjectDefineProperty:n,ObjectKeys:i,ReflectApply:o}=Cn(),{promisify:{custom:s}}=kn(),{streamReturningOperators:a,promiseReturningOperators:l}=jo(),{codes:{ERR_ILLEGAL_CONSTRUCTOR:u}}=Bn(),h=No(),{pipeline:c}=Mo(),{destroyer:f}=Nn(),d=Mn(),p=Do(),g=Ln(),y=t.exports=ui().Stream;y.isDisturbed=g.isDisturbed,y.isErrored=g.isErrored,y.isReadable=g.isReadable,y.Readable=ko();for(let e of i(a)){let t=function(...e){if(new.target)throw u();return y.Readable.from(o(r,this,e))},r=a[e];n(t,"name",{__proto__:null,value:r.name}),n(t,"length",{__proto__:null,value:r.length}),n(y.Readable.prototype,e,{__proto__:null,value:t,enumerable:!1,configurable:!0,writable:!0})}for(let e of i(l)){let t=function(...e){if(new.target)throw u();return o(r,this,e)},r=l[e];n(t,"name",{__proto__:null,value:r.name}),n(t,"length",{__proto__:null,value:r.length}),n(y.Readable.prototype,e,{__proto__:null,value:t,enumerable:!1,configurable:!0,writable:!0})}y.Writable=Po(),y.Duplex=xo(),y.Transform=Uo(),y.PassThrough=Lo(),y.pipeline=c;var{addAbortSignal:m}=hi();y.addAbortSignal=m,y.finished=d,y.destroy=f,y.compose=h,n(y,"promises",{__proto__:null,configurable:!0,enumerable:!0,get:()=>p}),n(c,s,{__proto__:null,enumerable:!0,get:()=>p.pipeline}),n(d,s,{__proto__:null,enumerable:!0,get:()=>p.finished}),y.Stream=y,y._isUint8Array=function(e){return e instanceof Uint8Array},y._uint8ArrayToBuffer=function(e){return r.from(e.buffer,e.byteOffset,e.byteLength)}})),Wo=Bt(((e,t)=>{Lt(),Rn(),dn();var r=Fo(),n=Do(),i=r.Readable.destroy;t.exports=r.Readable,t.exports._uint8ArrayToBuffer=r._uint8ArrayToBuffer,t.exports._isUint8Array=r._isUint8Array,t.exports.isDisturbed=r.isDisturbed,t.exports.isErrored=r.isErrored,t.exports.isReadable=r.isReadable,t.exports.Readable=r.Readable,t.exports.Writable=r.Writable,t.exports.Duplex=r.Duplex,t.exports.Transform=r.Transform,t.exports.PassThrough=r.PassThrough,t.exports.addAbortSignal=r.addAbortSignal,t.exports.finished=r.finished,t.exports.destroy=r.destroy,t.exports.destroy=i,t.exports.pipeline=r.pipeline,t.exports.compose=r.compose,Object.defineProperty(r,"promises",{configurable:!0,enumerable:!0,get:()=>n}),t.exports.Stream=r.Stream,t.exports.default=t.exports})),qo=Bt(((e,t)=>{Lt(),Rn(),dn(),"function"==typeof Object.create?t.exports=function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:t.exports=function(e,t){if(t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}}})),$o=Bt(((e,t)=>{Lt(),Rn(),dn();var{Buffer:r}=(In(),Ut(pn)),n=Symbol.for("BufferList");function i(e){if(!(this instanceof i))return new i(e);i._init.call(this,e)}i._init=function(e){Object.defineProperty(this,n,{value:!0}),this._bufs=[],this.length=0,e&&this.append(e)},i.prototype._new=function(e){return new i(e)},i.prototype._offset=function(e){if(0===e)return[0,0];let t=0;for(let r=0;rthis.length||e<0)return;let t=this._offset(e);return this._bufs[t[0]][t[1]]},i.prototype.slice=function(e,t){return"number"==typeof e&&e<0&&(e+=this.length),"number"==typeof t&&t<0&&(t+=this.length),this.copy(null,0,e,t)},i.prototype.copy=function(e,t,n,i){if(("number"!=typeof n||n<0)&&(n=0),("number"!=typeof i||i>this.length)&&(i=this.length),n>=this.length||i<=0)return e||r.alloc(0);let o=!!e,s=this._offset(n),a=i-n,l=a,u=o&&t||0,h=s[1];if(0===n&&i===this.length){if(!o)return 1===this._bufs.length?this._bufs[0]:r.concat(this._bufs,this.length);for(let t=0;tr)){this._bufs[t].copy(e,u,h,h+l),u+=r;break}this._bufs[t].copy(e,u,h),u+=r,l-=r,h&&(h=0)}return e.length>u?e.slice(0,u):e},i.prototype.shallowSlice=function(e,t){if(e=e||0,t="number"!=typeof t?this.length:t,e<0&&(e+=this.length),t<0&&(t+=this.length),e===t)return this._new();let r=this._offset(e),n=this._offset(t),i=this._bufs.slice(r[0],n[0]+1);return 0===n[1]?i.pop():i[i.length-1]=i[i.length-1].slice(0,n[1]),0!==r[1]&&(i[0]=i[0].slice(r[1])),this._new(i)},i.prototype.toString=function(e,t,r){return this.slice(t,r).toString(e)},i.prototype.consume=function(e){if(e=Math.trunc(e),Number.isNaN(e)||e<=0)return this;for(;this._bufs.length;){if(!(e>=this._bufs[0].length)){this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift()}return this},i.prototype.duplicate=function(){let e=this._new();for(let t=0;tthis.length?this.length:t;let i=this._offset(t),o=i[0],s=i[1];for(;o=e.length){let r=t.indexOf(e,s);if(-1!==r)return this._reverseOffset([o,r]);s=t.length-e.length+1}else{let t=this._reverseOffset([o,s]);if(this._match(t,e))return t;s++}s=0}return-1},i.prototype._match=function(e,t){if(this.length-e{Lt(),Rn(),dn();var r=Wo().Duplex,n=qo(),i=$o();function o(e){if(!(this instanceof o))return new o(e);if("function"==typeof e){this._callback=e;let t=function(e){this._callback&&(this._callback(e),this._callback=null)}.bind(this);this.on("pipe",(function(e){e.on("error",t)})),this.on("unpipe",(function(e){e.removeListener("error",t)})),e=null}i._init.call(this,e),r.call(this)}n(o,r),Object.assign(o.prototype,i.prototype),o.prototype._new=function(e){return new o(e)},o.prototype._write=function(e,t,r){this._appendBuffer(e),"function"==typeof r&&r()},o.prototype._read=function(e){if(!this.length)return this.push(null);e=Math.min(e,this.length),this.push(this.slice(0,e)),this.consume(e)},o.prototype.end=function(e){r.prototype.end.call(this,e),this._callback&&(this._callback(null,this.slice()),this._callback=null)},o.prototype._destroy=function(e,t){this._bufs.length=0,this.length=0,t(e)},o.prototype._isBufferList=function(e){return e instanceof o||e instanceof i||o.isBufferList(e)},o.isBufferList=i.isBufferList,t.exports=o,t.exports.BufferListStream=o,t.exports.BufferList=i})),Vo=Bt(((e,t)=>{Lt(),Rn(),dn(),t.exports=class{constructor(){this.cmd=null,this.retain=!1,this.qos=0,this.dup=!1,this.length=-1,this.topic=null,this.payload=null}}})),zo=Bt(((e,t)=>{Lt(),Rn(),dn();var r=t.exports,{Buffer:n}=(In(),Ut(pn));r.types={0:"reserved",1:"connect",2:"connack",3:"publish",4:"puback",5:"pubrec",6:"pubrel",7:"pubcomp",8:"subscribe",9:"suback",10:"unsubscribe",11:"unsuback",12:"pingreq",13:"pingresp",14:"disconnect",15:"auth"},r.requiredHeaderFlags={1:0,2:0,4:0,5:0,6:2,7:0,8:2,9:0,10:2,11:0,12:0,13:0,14:0,15:0},r.requiredHeaderFlagsErrors={};for(let e in r.requiredHeaderFlags){let t=r.requiredHeaderFlags[e];r.requiredHeaderFlagsErrors[e]="Invalid header flag bits, must be 0x"+t.toString(16)+" for "+r.types[e]+" packet"}r.codes={};for(let e in r.types){let t=r.types[e];r.codes[t]=e}r.CMD_SHIFT=4,r.CMD_MASK=240,r.DUP_MASK=8,r.QOS_MASK=3,r.QOS_SHIFT=1,r.RETAIN_MASK=1,r.VARBYTEINT_MASK=127,r.VARBYTEINT_FIN_MASK=128,r.VARBYTEINT_MAX=268435455,r.SESSIONPRESENT_MASK=1,r.SESSIONPRESENT_HEADER=n.from([r.SESSIONPRESENT_MASK]),r.CONNACK_HEADER=n.from([r.codes.connack<[0,1].map((i=>[0,1].map((o=>{let s=n.alloc(1);return s.writeUInt8(r.codes[e]<n.from([e]))),r.EMPTY={pingreq:n.from([r.codes.pingreq<<4,0]),pingresp:n.from([r.codes.pingresp<<4,0]),disconnect:n.from([r.codes.disconnect<<4,0])},r.MQTT5_PUBACK_PUBREC_CODES={0:"Success",16:"No matching subscribers",128:"Unspecified error",131:"Implementation specific error",135:"Not authorized",144:"Topic Name invalid",145:"Packet identifier in use",151:"Quota exceeded",153:"Payload format invalid"},r.MQTT5_PUBREL_PUBCOMP_CODES={0:"Success",146:"Packet Identifier not found"},r.MQTT5_SUBACK_CODES={0:"Granted QoS 0",1:"Granted QoS 1",2:"Granted QoS 2",128:"Unspecified error",131:"Implementation specific error",135:"Not authorized",143:"Topic Filter invalid",145:"Packet Identifier in use",151:"Quota exceeded",158:"Shared Subscriptions not supported",161:"Subscription Identifiers not supported",162:"Wildcard Subscriptions not supported"},r.MQTT5_UNSUBACK_CODES={0:"Success",17:"No subscription existed",128:"Unspecified error",131:"Implementation specific error",135:"Not authorized",143:"Topic Filter invalid",145:"Packet Identifier in use"},r.MQTT5_DISCONNECT_CODES={0:"Normal disconnection",4:"Disconnect with Will Message",128:"Unspecified error",129:"Malformed Packet",130:"Protocol Error",131:"Implementation specific error",135:"Not authorized",137:"Server busy",139:"Server shutting down",141:"Keep Alive timeout",142:"Session taken over",143:"Topic Filter invalid",144:"Topic Name invalid",147:"Receive Maximum exceeded",148:"Topic Alias invalid",149:"Packet too large",150:"Message rate too high",151:"Quota exceeded",152:"Administrative action",153:"Payload format invalid",154:"Retain not supported",155:"QoS not supported",156:"Use another server",157:"Server moved",158:"Shared Subscriptions not supported",159:"Connection rate exceeded",160:"Maximum connect time",161:"Subscription Identifiers not supported",162:"Wildcard Subscriptions not supported"},r.MQTT5_AUTH_CODES={0:"Success",24:"Continue authentication",25:"Re-authenticate"}})),Ko=Bt(((e,t)=>{Lt(),Rn(),dn();var r=1e3,n=6e4,i=60*n,o=24*i,s=7*o;function a(e,t,r,n){var i=t>=1.5*r;return Math.round(e/r)+" "+n+(i?"s":"")}t.exports=function(e,t){t=t||{};var l=typeof e;if("string"===l&&e.length>0)return function(e){if(!((e=String(e)).length>100)){var t=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(t){var a=parseFloat(t[1]);switch((t[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return 315576e5*a;case"weeks":case"week":case"w":return a*s;case"days":case"day":case"d":return a*o;case"hours":case"hour":case"hrs":case"hr":case"h":return a*i;case"minutes":case"minute":case"mins":case"min":case"m":return a*n;case"seconds":case"second":case"secs":case"sec":case"s":return a*r;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return a;default:return}}}}(e);if("number"===l&&isFinite(e))return t.long?function(e){var t=Math.abs(e);return t>=o?a(e,t,o,"day"):t>=i?a(e,t,i,"hour"):t>=n?a(e,t,n,"minute"):t>=r?a(e,t,r,"second"):e+" ms"}(e):function(e){var t=Math.abs(e);return t>=o?Math.round(e/o)+"d":t>=i?Math.round(e/i)+"h":t>=n?Math.round(e/n)+"m":t>=r?Math.round(e/r)+"s":e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}})),Yo=Bt(((e,t)=>{Lt(),Rn(),dn(),t.exports=function(e){function t(e){let n,i,o,s=null;function a(...e){if(!a.enabled)return;let r=a,i=Number(new Date),o=i-(n||i);r.diff=o,r.prev=n,r.curr=i,n=i,e[0]=t.coerce(e[0]),"string"!=typeof e[0]&&e.unshift("%O");let s=0;e[0]=e[0].replace(/%([a-zA-Z%])/g,((n,i)=>{if("%%"===n)return"%";s++;let o=t.formatters[i];if("function"==typeof o){let t=e[s];n=o.call(r,t),e.splice(s,1),s--}return n})),t.formatArgs.call(r,e),(r.log||t.log).apply(r,e)}return a.namespace=e,a.useColors=t.useColors(),a.color=t.selectColor(e),a.extend=r,a.destroy=t.destroy,Object.defineProperty(a,"enabled",{enumerable:!0,configurable:!1,get:()=>null!==s?s:(i!==t.namespaces&&(i=t.namespaces,o=t.enabled(e)),o),set:e=>{s=e}}),"function"==typeof t.init&&t.init(a),a}function r(e,r){let n=t(this.namespace+(typeof r>"u"?":":r)+e);return n.log=this.log,n}function n(e){return e.toString().substring(2,e.toString().length-2).replace(/\.\*\?$/,"*")}return t.debug=t,t.default=t,t.coerce=function(e){return e instanceof Error?e.stack||e.message:e},t.disable=function(){let e=[...t.names.map(n),...t.skips.map(n).map((e=>"-"+e))].join(",");return t.enable(""),e},t.enable=function(e){t.save(e),t.namespaces=e,t.names=[],t.skips=[];let r,n=("string"==typeof e?e:"").split(/[\s,]+/),i=n.length;for(r=0;r{t[r]=e[r]})),t.names=[],t.skips=[],t.formatters={},t.selectColor=function(e){let r=0;for(let t=0;t{Lt(),Rn(),dn(),e.formatArgs=function(e){if(e[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+e[0]+(this.useColors?"%c ":" ")+"+"+t.exports.humanize(this.diff),!this.useColors)return;let r="color: "+this.color;e.splice(1,0,r,"color: inherit");let n=0,i=0;e[0].replace(/%[a-zA-Z%]/g,(e=>{"%%"!==e&&(n++,"%c"===e&&(i=n))})),e.splice(i,0,r)},e.save=function(t){try{t?e.storage.setItem("debug",t):e.storage.removeItem("debug")}catch{}},e.load=function(){let t;try{t=e.storage.getItem("debug")}catch{}return!t&&typeof Mt<"u"&&"env"in Mt&&(t=Mt.env.DEBUG),t},e.useColors=function(){return!(!(typeof window<"u"&&window.process)||"renderer"!==window.process.type&&!window.process.__nwjs)||!(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))&&(typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))},e.storage=function(){try{return localStorage}catch{}}(),e.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),e.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],e.log=console.debug||console.log||(()=>{}),t.exports=Yo()(e);var{formatters:r}=t.exports;r.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}})),Qo=Bt(((e,t)=>{Lt(),Rn(),dn();var r=Ho(),{EventEmitter:n}=(li(),Ut(ti)),i=Vo(),o=zo(),s=Go()("mqtt-packet:parser");t.exports=class e extends n{constructor(){super(),this.parser=this.constructor.parser}static parser(t){return this instanceof e?(this.settings=t||{},this._states=["_parseHeader","_parseLength","_parsePayload","_newPacket"],this._resetState(),this):(new e).parser(t)}_resetState(){s("_resetState: resetting packet, error, _list, and _stateCounter"),this.packet=new i,this.error=null,this._list=r(),this._stateCounter=0}parse(e){for(this.error&&this._resetState(),this._list.append(e),s("parse: current state: %s",this._states[this._stateCounter]);(-1!==this.packet.length||this._list.length>0)&&this[this._states[this._stateCounter]]()&&!this.error;)this._stateCounter++,s("parse: state complete. _stateCounter is now: %d",this._stateCounter),s("parse: packet.length: %d, buffer list length: %d",this.packet.length,this._list.length),this._stateCounter>=this._states.length&&(this._stateCounter=0);return s("parse: exited while loop. packet: %d, buffer list length: %d",this.packet.length,this._list.length),this._list.length}_parseHeader(){let e=this._list.readUInt8(0),t=e>>o.CMD_SHIFT;this.packet.cmd=o.types[t];let r=15&e,n=o.requiredHeaderFlags[t];return null!=n&&r!==n?this._emitError(new Error(o.requiredHeaderFlagsErrors[t])):(this.packet.retain=!!(e&o.RETAIN_MASK),this.packet.qos=e>>o.QOS_SHIFT&o.QOS_MASK,this.packet.qos>2?this._emitError(new Error("Packet must not have both QoS bits set to 1")):(this.packet.dup=!!(e&o.DUP_MASK),s("_parseHeader: packet: %o",this.packet),this._list.consume(1),!0))}_parseLength(){let e=this._parseVarByteNum(!0);return e&&(this.packet.length=e.value,this._list.consume(e.bytes)),s("_parseLength %d",e.value),!!e}_parsePayload(){s("_parsePayload: payload %O",this._list);let e=!1;if(0===this.packet.length||this._list.length>=this.packet.length){switch(this._pos=0,this.packet.cmd){case"connect":this._parseConnect();break;case"connack":this._parseConnack();break;case"publish":this._parsePublish();break;case"puback":case"pubrec":case"pubrel":case"pubcomp":this._parseConfirmation();break;case"subscribe":this._parseSubscribe();break;case"suback":this._parseSuback();break;case"unsubscribe":this._parseUnsubscribe();break;case"unsuback":this._parseUnsuback();break;case"pingreq":case"pingresp":break;case"disconnect":this._parseDisconnect();break;case"auth":this._parseAuth();break;default:this._emitError(new Error("Not supported"))}e=!0}return s("_parsePayload complete result: %s",e),e}_parseConnect(){s("_parseConnect");let e,t,r,n,i={},a=this.packet,l=this._parseString();if(null===l)return this._emitError(new Error("Cannot parse protocolId"));if("MQTT"!==l&&"MQIsdp"!==l)return this._emitError(new Error("Invalid protocolId"));if(a.protocolId=l,this._pos>=this._list.length)return this._emitError(new Error("Packet too short"));if(a.protocolVersion=this._list.readUInt8(this._pos),a.protocolVersion>=128&&(a.bridgeMode=!0,a.protocolVersion=a.protocolVersion-128),3!==a.protocolVersion&&4!==a.protocolVersion&&5!==a.protocolVersion)return this._emitError(new Error("Invalid protocol version"));if(this._pos++,this._pos>=this._list.length)return this._emitError(new Error("Packet too short"));if(1&this._list.readUInt8(this._pos))return this._emitError(new Error("Connect flag bit 0 must be 0, but got 1"));i.username=this._list.readUInt8(this._pos)&o.USERNAME_MASK,i.password=this._list.readUInt8(this._pos)&o.PASSWORD_MASK,i.will=this._list.readUInt8(this._pos)&o.WILL_FLAG_MASK;let u=!!(this._list.readUInt8(this._pos)&o.WILL_RETAIN_MASK),h=(this._list.readUInt8(this._pos)&o.WILL_QOS_MASK)>>o.WILL_QOS_SHIFT;if(i.will)a.will={},a.will.retain=u,a.will.qos=h;else{if(u)return this._emitError(new Error("Will Retain Flag must be set to zero when Will Flag is set to 0"));if(h)return this._emitError(new Error("Will QoS must be set to zero when Will Flag is set to 0"))}if(a.clean=!!(this._list.readUInt8(this._pos)&o.CLEAN_SESSION_MASK),this._pos++,a.keepalive=this._parseNum(),-1===a.keepalive)return this._emitError(new Error("Packet too short"));if(5===a.protocolVersion){let e=this._parseProperties();Object.getOwnPropertyNames(e).length&&(a.properties=e)}let c=this._parseString();if(null===c)return this._emitError(new Error("Packet too short"));if(a.clientId=c,s("_parseConnect: packet.clientId: %s",a.clientId),i.will){if(5===a.protocolVersion){let e=this._parseProperties();Object.getOwnPropertyNames(e).length&&(a.will.properties=e)}if(e=this._parseString(),null===e)return this._emitError(new Error("Cannot parse will topic"));if(a.will.topic=e,s("_parseConnect: packet.will.topic: %s",a.will.topic),t=this._parseBuffer(),null===t)return this._emitError(new Error("Cannot parse will payload"));a.will.payload=t,s("_parseConnect: packet.will.paylaod: %s",a.will.payload)}if(i.username){if(n=this._parseString(),null===n)return this._emitError(new Error("Cannot parse username"));a.username=n,s("_parseConnect: packet.username: %s",a.username)}if(i.password){if(r=this._parseBuffer(),null===r)return this._emitError(new Error("Cannot parse password"));a.password=r}return this.settings=a,s("_parseConnect: complete"),a}_parseConnack(){s("_parseConnack");let e=this.packet;if(this._list.length<1)return null;let t=this._list.readUInt8(this._pos++);if(t>1)return this._emitError(new Error("Invalid connack flags, bits 7-1 must be set to 0"));if(e.sessionPresent=!!(t&o.SESSIONPRESENT_MASK),5===this.settings.protocolVersion)this._list.length>=2?e.reasonCode=this._list.readUInt8(this._pos++):e.reasonCode=0;else{if(this._list.length<2)return null;e.returnCode=this._list.readUInt8(this._pos++)}if(-1===e.returnCode||-1===e.reasonCode)return this._emitError(new Error("Cannot parse return code"));if(5===this.settings.protocolVersion){let t=this._parseProperties();Object.getOwnPropertyNames(t).length&&(e.properties=t)}s("_parseConnack: complete")}_parsePublish(){s("_parsePublish");let e=this.packet;if(e.topic=this._parseString(),null===e.topic)return this._emitError(new Error("Cannot parse topic"));if(!(e.qos>0)||this._parseMessageId()){if(5===this.settings.protocolVersion){let t=this._parseProperties();Object.getOwnPropertyNames(t).length&&(e.properties=t)}e.payload=this._list.slice(this._pos,e.length),s("_parsePublish: payload from buffer list: %o",e.payload)}}_parseSubscribe(){s("_parseSubscribe");let e,t,r,n,i,a,l,u=this.packet;if(u.subscriptions=[],this._parseMessageId()){if(5===this.settings.protocolVersion){let e=this._parseProperties();Object.getOwnPropertyNames(e).length&&(u.properties=e)}if(u.length<=0)return this._emitError(new Error("Malformed subscribe, no payload specified"));for(;this._pos=u.length)return this._emitError(new Error("Malformed Subscribe Payload"));if(t=this._parseByte(),5===this.settings.protocolVersion){if(192&t)return this._emitError(new Error("Invalid subscribe topic flag bits, bits 7-6 must be 0"))}else if(252&t)return this._emitError(new Error("Invalid subscribe topic flag bits, bits 7-2 must be 0"));if(r=t&o.SUBSCRIBE_OPTIONS_QOS_MASK,r>2)return this._emitError(new Error("Invalid subscribe QoS, must be <= 2"));if(a=!!(t>>o.SUBSCRIBE_OPTIONS_NL_SHIFT&o.SUBSCRIBE_OPTIONS_NL_MASK),i=!!(t>>o.SUBSCRIBE_OPTIONS_RAP_SHIFT&o.SUBSCRIBE_OPTIONS_RAP_MASK),n=t>>o.SUBSCRIBE_OPTIONS_RH_SHIFT&o.SUBSCRIBE_OPTIONS_RH_MASK,n>2)return this._emitError(new Error("Invalid retain handling, must be <= 2"));l={topic:e,qos:r},5===this.settings.protocolVersion?(l.nl=a,l.rap=i,l.rh=n):this.settings.bridgeMode&&(l.rh=0,l.rap=!0,l.nl=!0),s("_parseSubscribe: push subscription `%s` to subscription",l),u.subscriptions.push(l)}}}_parseSuback(){s("_parseSuback");let e=this.packet;if(this.packet.granted=[],this._parseMessageId()){if(5===this.settings.protocolVersion){let t=this._parseProperties();Object.getOwnPropertyNames(t).length&&(e.properties=t)}if(e.length<=0)return this._emitError(new Error("Malformed suback, no payload specified"));for(;this._pos2&&128!==e)return this._emitError(new Error("Invalid suback QoS, must be 0, 1, 2 or 128"));this.packet.granted.push(e)}}}_parseUnsubscribe(){s("_parseUnsubscribe");let e=this.packet;if(e.unsubscriptions=[],this._parseMessageId()){if(5===this.settings.protocolVersion){let t=this._parseProperties();Object.getOwnPropertyNames(t).length&&(e.properties=t)}if(e.length<=0)return this._emitError(new Error("Malformed unsubscribe, no payload specified"));for(;this._pos2){switch(e.reasonCode=this._parseByte(),this.packet.cmd){case"puback":case"pubrec":if(!o.MQTT5_PUBACK_PUBREC_CODES[e.reasonCode])return this._emitError(new Error("Invalid "+this.packet.cmd+" reason code"));break;case"pubrel":case"pubcomp":if(!o.MQTT5_PUBREL_PUBCOMP_CODES[e.reasonCode])return this._emitError(new Error("Invalid "+this.packet.cmd+" reason code"))}s("_parseConfirmation: packet.reasonCode `%d`",e.reasonCode)}else e.reasonCode=0;if(e.length>3){let t=this._parseProperties();Object.getOwnPropertyNames(t).length&&(e.properties=t)}}return!0}_parseDisconnect(){let e=this.packet;if(s("_parseDisconnect"),5===this.settings.protocolVersion){this._list.length>0?(e.reasonCode=this._parseByte(),o.MQTT5_DISCONNECT_CODES[e.reasonCode]||this._emitError(new Error("Invalid disconnect reason code"))):e.reasonCode=0;let t=this._parseProperties();Object.getOwnPropertyNames(t).length&&(e.properties=t)}return s("_parseDisconnect result: true"),!0}_parseAuth(){s("_parseAuth");let e=this.packet;if(5!==this.settings.protocolVersion)return this._emitError(new Error("Not supported auth packet for this version MQTT"));if(e.reasonCode=this._parseByte(),!o.MQTT5_AUTH_CODES[e.reasonCode])return this._emitError(new Error("Invalid auth reason code"));let t=this._parseProperties();return Object.getOwnPropertyNames(t).length&&(e.properties=t),s("_parseAuth: result: true"),!0}_parseMessageId(){let e=this.packet;return e.messageId=this._parseNum(),null===e.messageId?(this._emitError(new Error("Cannot parse messageId")),!1):(s("_parseMessageId: packet.messageId %d",e.messageId),!0)}_parseString(e){let t=this._parseNum(),r=t+this._pos;if(-1===t||r>this._list.length||r>this.packet.length)return null;let n=this._list.toString("utf8",this._pos,r);return this._pos+=t,s("_parseString: result: %s",n),n}_parseStringPair(){return s("_parseStringPair"),{name:this._parseString(),value:this._parseString()}}_parseBuffer(){let e=this._parseNum(),t=e+this._pos;if(-1===e||t>this._list.length||t>this.packet.length)return null;let r=this._list.slice(this._pos,t);return this._pos+=e,s("_parseBuffer: result: %o",r),r}_parseNum(){if(this._list.length-this._pos<2)return-1;let e=this._list.readUInt16BE(this._pos);return this._pos+=2,s("_parseNum: result: %s",e),e}_parse4ByteNum(){if(this._list.length-this._pos<4)return-1;let e=this._list.readUInt32BE(this._pos);return this._pos+=4,s("_parse4ByteNum: result: %s",e),e}_parseVarByteNum(e){s("_parseVarByteNum");let t,r=0,n=1,i=0,a=!1,l=this._pos?this._pos:0;for(;r<4&&l+r=r&&this._emitError(new Error("Invalid variable byte integer")),l&&(this._pos+=r),a=!!a&&(e?{bytes:r,value:i}:i),s("_parseVarByteNum: result: %o",a),a}_parseByte(){let e;return this._pos{Lt(),Rn(),dn();var{Buffer:r}=(In(),Ut(pn)),n={},i=r.isBuffer(r.from([1,2]).subarray(0,1));function o(e){let t=r.allocUnsafe(2);return t.writeUInt8(e>>8,0),t.writeUInt8(255&e,1),t}t.exports={cache:n,generateCache:function(){for(let e=0;e<65536;e++)n[e]=o(e)},generateNumber:o,genBufVariableByteInt:function(e){let t=0,n=0,o=r.allocUnsafe(4);do{t=e%128|0,(e=e/128|0)>0&&(t|=128),o.writeUInt8(t,n++)}while(e>0&&n<4);return e>0&&(n=0),i?o.subarray(0,n):o.slice(0,n)},generate4ByteBuffer:function(e){let t=r.allocUnsafe(4);return t.writeUInt32BE(e,0),t}}})),Xo=Bt(((e,t)=>{Lt(),Rn(),dn(),typeof Mt>"u"||!Mt.version||0===Mt.version.indexOf("v0.")||0===Mt.version.indexOf("v1.")&&0!==Mt.version.indexOf("v1.8.")?t.exports={nextTick:function(e,t,r,n){if("function"!=typeof e)throw new TypeError('"callback" argument must be a function');var i,o,s=arguments.length;switch(s){case 0:case 1:return Mt.nextTick(e);case 2:return Mt.nextTick((function(){e.call(null,t)}));case 3:return Mt.nextTick((function(){e.call(null,t,r)}));case 4:return Mt.nextTick((function(){e.call(null,t,r,n)}));default:for(i=new Array(s-1),o=0;o{Lt(),Rn(),dn();var r=zo(),{Buffer:n}=(In(),Ut(pn)),i=n.allocUnsafe(0),o=n.from([0]),s=Jo(),a=Xo().nextTick,l=Go()("mqtt-packet:writeToStream"),u=s.cache,h=s.generateNumber,c=s.generateCache,f=s.genBufVariableByteInt,d=s.generate4ByteBuffer,p=E,g=!0;function y(e,t,s){switch(l("generate called"),t.cork&&(t.cork(),a(m,t)),g&&(g=!1,c()),l("generate: packet.cmd: %s",e.cmd),e.cmd){case"connect":return function(e,t){let i=e||{},o=i.protocolId||"MQTT",s=i.protocolVersion||4,a=i.will,l=i.clean,u=i.keepalive||0,h=i.clientId||"",c=i.username,f=i.password,d=i.properties;void 0===l&&(l=!0);let g,y,m=0;if(!o||"string"!=typeof o&&!n.isBuffer(o))return t.destroy(new Error("Invalid protocolId")),!1;if(m+=o.length+2,3!==s&&4!==s&&5!==s)return t.destroy(new Error("Invalid protocol version")),!1;if(m+=1,("string"==typeof h||n.isBuffer(h))&&(h||s>=4)&&(h||l))m+=n.byteLength(h)+2;else{if(s<4)return t.destroy(new Error("clientId must be supplied before 3.1.1")),!1;if(1*l==0)return t.destroy(new Error("clientId must be given if cleanSession set to 0")),!1}if("number"!=typeof u||u<0||u>65535||u%1!=0)return t.destroy(new Error("Invalid keepalive")),!1;if(m+=2,m+=1,5===s){if(g=T(t,d),!g)return!1;m+=g.length}if(a){if("object"!=typeof a)return t.destroy(new Error("Invalid will")),!1;if(!a.topic||"string"!=typeof a.topic)return t.destroy(new Error("Invalid will topic")),!1;if(m+=n.byteLength(a.topic)+2,m+=2,a.payload){if(!(a.payload.length>=0))return t.destroy(new Error("Invalid will payload")),!1;"string"==typeof a.payload?m+=n.byteLength(a.payload):m+=a.payload.length}if(y={},5===s){if(y=T(t,a.properties),!y)return!1;m+=y.length}}let b=!1;if(null!=c){if(!k(c))return t.destroy(new Error("Invalid username")),!1;b=!0,m+=n.byteLength(c)+2}if(null!=f){if(!b)return t.destroy(new Error("Username is required to use password")),!1;if(!k(f))return t.destroy(new Error("Invalid password")),!1;m+=C(f)+2}t.write(r.CONNECT_HEADER),w(t,m),A(t,o),i.bridgeMode&&(s+=128),t.write(131===s?r.VERSION131:132===s?r.VERSION132:4===s?r.VERSION4:5===s?r.VERSION5:r.VERSION3);let _=0;return _|=null!=c?r.USERNAME_MASK:0,_|=null!=f?r.PASSWORD_MASK:0,_|=a&&a.retain?r.WILL_RETAIN_MASK:0,_|=a&&a.qos?a.qos<0&&p(t,d),m?.write(),l("publish: payload: %o",f),t.write(f)}(e,t,s);case"puback":case"pubrec":case"pubrel":case"pubcomp":return function(e,t,i){let o=i?i.protocolVersion:4,s=e||{},a=s.cmd||"puback",l=s.messageId,u=s.dup&&"pubrel"===a?r.DUP_MASK:0,h=0,c=s.reasonCode,f=s.properties,d=5===o?3:2;if("pubrel"===a&&(h=1),"number"!=typeof l)return t.destroy(new Error("Invalid messageId")),!1;let g=null;if(5===o&&"object"==typeof f){if(g=I(t,f,i,d),!g)return!1;d+=g.length}return t.write(r.ACKS[a][h][u][0]),3===d&&(d+=0!==c?1:-1),w(t,d),p(t,l),5===o&&2!==d&&t.write(n.from([c])),null!==g?g.write():4===d&&t.write(n.from([0])),!0}(e,t,s);case"subscribe":return function(e,t,i){l("subscribe: packet: ");let o=i?i.protocolVersion:4,s=e||{},a=s.dup?r.DUP_MASK:0,u=s.messageId,h=s.subscriptions,c=s.properties,f=0;if("number"!=typeof u)return t.destroy(new Error("Invalid messageId")),!1;f+=2;let d=null;if(5===o){if(d=T(t,c),!d)return!1;f+=d.length}if("object"!=typeof h||!h.length)return t.destroy(new Error("Invalid subscriptions")),!1;for(let e=0;e2)return t.destroy(new Error("Invalid subscriptions - invalid Retain Handling")),!1}f+=n.byteLength(r)+2+1}l("subscribe: writing to stream: %o",r.SUBSCRIBE_HEADER),t.write(r.SUBSCRIBE_HEADER[1][a?1:0][0]),w(t,f),p(t,u),null!==d&&d.write();let g=!0;for(let e of h){let i,s=e.topic,a=e.qos,l=+e.nl,u=+e.rap,h=e.rh;v(t,s),i=r.SUBSCRIBE_OPTIONS_QOS[a],5===o&&(i|=l?r.SUBSCRIBE_OPTIONS_NL:0,i|=u?r.SUBSCRIBE_OPTIONS_RAP:0,i|=h?r.SUBSCRIBE_OPTIONS_RH[h]:0),g=t.write(n.from([i]))}return g}(e,t,s);case"suback":return function(e,t,i){let o=i?i.protocolVersion:4,s=e||{},a=s.messageId,l=s.granted,u=s.properties,h=0;if("number"!=typeof a)return t.destroy(new Error("Invalid messageId")),!1;if(h+=2,"object"!=typeof l||!l.length)return t.destroy(new Error("Invalid qos vector")),!1;for(let e=0;ep===E,set(e){e?((!u||0===Object.keys(u).length)&&(g=!0),p=E):(g=!1,p=S)}});var b={};function w(e,t){if(t>r.VARBYTEINT_MAX)return e.destroy(new Error(`Invalid variable byte integer: ${t}`)),!1;let n=b[t];return n||(n=f(t),t<16384&&(b[t]=n)),l("writeVarByteInt: writing to stream: %o",n),e.write(n)}function v(e,t){let r=n.byteLength(t);return p(e,r),l("writeString: %s",t),e.write(t,"utf8")}function _(e,t,r){v(e,t),v(e,r)}function E(e,t){return l("writeNumberCached: number: %d",t),l("writeNumberCached: %o",u[t]),e.write(u[t])}function S(e,t){let r=h(t);return l("writeNumberGenerated: %o",r),e.write(r)}function A(e,t){"string"==typeof t?v(e,t):t?(p(e,t.length),e.write(t)):p(e,0)}function T(e,t){if("object"!=typeof t||null!=t.length)return{length:1,write(){O(e,{},0)}};let i=0;function o(t,i){let o=0;switch(r.propertiesTypes[t]){case"byte":if("boolean"!=typeof i)return e.destroy(new Error(`Invalid ${t}: ${i}`)),!1;o+=2;break;case"int8":if("number"!=typeof i||i<0||i>255)return e.destroy(new Error(`Invalid ${t}: ${i}`)),!1;o+=2;break;case"binary":if(i&&null===i)return e.destroy(new Error(`Invalid ${t}: ${i}`)),!1;o+=1+n.byteLength(i)+2;break;case"int16":if("number"!=typeof i||i<0||i>65535)return e.destroy(new Error(`Invalid ${t}: ${i}`)),!1;o+=3;break;case"int32":if("number"!=typeof i||i<0||i>4294967295)return e.destroy(new Error(`Invalid ${t}: ${i}`)),!1;o+=5;break;case"var":if("number"!=typeof i||i<0||i>268435455)return e.destroy(new Error(`Invalid ${t}: ${i}`)),!1;o+=1+n.byteLength(f(i));break;case"string":if("string"!=typeof i)return e.destroy(new Error(`Invalid ${t}: ${i}`)),!1;o+=3+n.byteLength(i.toString());break;case"pair":if("object"!=typeof i)return e.destroy(new Error(`Invalid ${t}: ${i}`)),!1;o+=Object.getOwnPropertyNames(i).reduce(((e,t)=>{let r=i[t];return Array.isArray(r)?e+=r.reduce(((e,r)=>e+(3+n.byteLength(t.toString())+2+n.byteLength(r.toString()))),0):e+=3+n.byteLength(t.toString())+2+n.byteLength(i[t].toString()),e}),0);break;default:return e.destroy(new Error(`Invalid property ${t}: ${i}`)),!1}return o}if(t)for(let e in t){let r=0,n=0,s=t[e];if(Array.isArray(s))for(let t=0;to;){let r=i.shift();if(!r||!t[r])return!1;delete t[r],s=T(e,t)}return s}function R(e,t,i){switch(r.propertiesTypes[t]){case"byte":e.write(n.from([r.properties[t]])),e.write(n.from([+i]));break;case"int8":e.write(n.from([r.properties[t]])),e.write(n.from([i]));break;case"binary":e.write(n.from([r.properties[t]])),A(e,i);break;case"int16":e.write(n.from([r.properties[t]])),p(e,i);break;case"int32":e.write(n.from([r.properties[t]])),function(e,t){let r=d(t);l("write4ByteNumber: %o",r),e.write(r)}(e,i);break;case"var":e.write(n.from([r.properties[t]])),w(e,i);break;case"string":e.write(n.from([r.properties[t]])),v(e,i);break;case"pair":Object.getOwnPropertyNames(i).forEach((o=>{let s=i[o];Array.isArray(s)?s.forEach((i=>{e.write(n.from([r.properties[t]])),_(e,o.toString(),i.toString())})):(e.write(n.from([r.properties[t]])),_(e,o.toString(),s.toString()))}));break;default:return e.destroy(new Error(`Invalid property ${t} value: ${i}`)),!1}}function O(e,t,r){w(e,r);for(let r in t)if(Object.prototype.hasOwnProperty.call(t,r)&&null!==t[r]){let n=t[r];if(Array.isArray(n))for(let t=0;t{Lt(),Rn(),dn();var r=Zo(),{EventEmitter:n}=(li(),Ut(ti)),{Buffer:i}=(In(),Ut(pn)),o=class extends n{constructor(){super(),this._array=new Array(20),this._i=0}write(e){return this._array[this._i++]=e,!0}concat(){let e,t=0,r=new Array(this._array.length),n=this._array,o=0;for(e=0;e{Lt(),Rn(),dn(),e.parser=Qo().parser,e.generate=es(),e.writeToStream=Zo()})),rs=Bt((e=>{Lt(),Rn(),dn(),Object.defineProperty(e,"__esModule",{value:!0}),e.default=class{constructor(){this.nextId=Math.max(1,Math.floor(65535*Math.random()))}allocate(){let e=this.nextId++;return 65536===this.nextId&&(this.nextId=1),e}getLastAllocated(){return 1===this.nextId?65535:this.nextId-1}register(e){return!0}deallocate(e){}clear(){}}})),ns=Bt(((e,t)=>{function r(e){return e instanceof Sn?Sn.from(e):new e.constructor(e.buffer.slice(),e.byteOffset,e.length)}Lt(),Rn(),dn(),t.exports=function(e){return(e=e||{}).circles?function(e){var t=[],n=[];return e.proto?function e(o){if("object"!=typeof o||null===o)return o;if(o instanceof Date)return new Date(o);if(Array.isArray(o))return i(o,e);if(o instanceof Map)return new Map(i(Array.from(o),e));if(o instanceof Set)return new Set(i(Array.from(o),e));var s={};for(var a in t.push(o),n.push(s),o){var l=o[a];if("object"!=typeof l||null===l)s[a]=l;else if(l instanceof Date)s[a]=new Date(l);else if(l instanceof Map)s[a]=new Map(i(Array.from(l),e));else if(l instanceof Set)s[a]=new Set(i(Array.from(l),e));else if(ArrayBuffer.isView(l))s[a]=r(l);else{var u=t.indexOf(l);s[a]=-1!==u?n[u]:e(l)}}return t.pop(),n.pop(),s}:function e(o){if("object"!=typeof o||null===o)return o;if(o instanceof Date)return new Date(o);if(Array.isArray(o))return i(o,e);if(o instanceof Map)return new Map(i(Array.from(o),e));if(o instanceof Set)return new Set(i(Array.from(o),e));var s={};for(var a in t.push(o),n.push(s),o)if(!1!==Object.hasOwnProperty.call(o,a)){var l=o[a];if("object"!=typeof l||null===l)s[a]=l;else if(l instanceof Date)s[a]=new Date(l);else if(l instanceof Map)s[a]=new Map(i(Array.from(l),e));else if(l instanceof Set)s[a]=new Set(i(Array.from(l),e));else if(ArrayBuffer.isView(l))s[a]=r(l);else{var u=t.indexOf(l);s[a]=-1!==u?n[u]:e(l)}}return t.pop(),n.pop(),s};function i(e,i){for(var o=Object.keys(e),s=new Array(o.length),a=0;a{Lt(),Rn(),dn(),t.exports=ns()()})),os=Bt((e=>{function t(e){let t=e.split("/");for(let e=0;e{Lt(),Rn(),dn(),Object.defineProperty(e,"__esModule",{value:!0});var t=Wo(),r={objectMode:!0},n={clean:!0};e.default=class{constructor(e){this.options=e||{},this.options=Object.assign(Object.assign({},n),e),this._inflights=new Map}put(e,t){return this._inflights.set(e.messageId,e),t&&t(),this}createStream(){let e=new t.Readable(r),n=[],i=!1,o=0;return this._inflights.forEach(((e,t)=>{n.push(e)})),e._read=()=>{!i&&o{if(!i)return i=!0,setTimeout((()=>{e.emit("close")}),0),e},e}del(e,t){let r=this._inflights.get(e.messageId);return r?(this._inflights.delete(e.messageId),t(null,r)):t&&t(new Error("missing packet")),this}get(e,t){let r=this._inflights.get(e.messageId);return r?t(null,r):t&&t(new Error("missing packet")),this}close(e){this.options.clean&&(this._inflights=null),e&&e()}}})),as=Bt((e=>{Lt(),Rn(),dn(),Object.defineProperty(e,"__esModule",{value:!0});var t=[0,16,128,131,135,144,145,151,153];e.default=(e,r,n)=>{e.log("handlePublish: packet %o",r),n=typeof n<"u"?n:e.noop;let i=r.topic.toString(),o=r.payload,{qos:s}=r,{messageId:a}=r,{options:l}=e;if(5===e.options.protocolVersion){let t;if(r.properties&&(t=r.properties.topicAlias),typeof t<"u")if(0===i.length){if(!(t>0&&t<=65535))return e.log("handlePublish :: topic alias out of range. alias: %d",t),void e.emit("error",new Error("Received Topic Alias is out of range"));{let r=e.topicAliasRecv.getTopicByAlias(t);if(!r)return e.log("handlePublish :: unregistered topic alias. alias: %d",t),void e.emit("error",new Error("Received unregistered Topic Alias"));i=r,e.log("handlePublish :: topic complemented by alias. topic: %s - alias: %d",i,t)}}else{if(!e.topicAliasRecv.put(i,t))return e.log("handlePublish :: topic alias out of range. alias: %d",t),void e.emit("error",new Error("Received Topic Alias is out of range"));e.log("handlePublish :: registered topic: %s - alias: %d",i,t)}}switch(e.log("handlePublish: qos %d",s),s){case 2:l.customHandleAcks(i,o,r,((i,o)=>("number"==typeof i&&(o=i,i=null),i?e.emit("error",i):-1===t.indexOf(o)?e.emit("error",new Error("Wrong reason code for pubrec")):void(o?e._sendPacket({cmd:"pubrec",messageId:a,reasonCode:o},n):e.incomingStore.put(r,(()=>{e._sendPacket({cmd:"pubrec",messageId:a},n)}))))));break;case 1:l.customHandleAcks(i,o,r,((s,l)=>("number"==typeof s&&(l=s,s=null),s?e.emit("error",s):-1===t.indexOf(l)?e.emit("error",new Error("Wrong reason code for puback")):(l||e.emit("message",i,o,r),void e.handleMessage(r,(t=>{if(t)return n&&n(t);e._sendPacket({cmd:"puback",messageId:a,reasonCode:l},n)}))))));break;case 0:e.emit("message",i,o,r),e.handleMessage(r,n);break;default:e.log("handlePublish: unknown QoS. Doing nothing.")}}})),ls=Bt(((e,t)=>{t.exports={version:"5.10.1"}})),us=Bt((e=>{Lt(),Rn(),dn(),Object.defineProperty(e,"__esModule",{value:!0}),e.MQTTJS_VERSION=e.nextTick=e.applyMixin=e.ErrorWithReasonCode=void 0;var t=class e extends Error{constructor(t,r){super(t),this.code=r,Object.setPrototypeOf(this,e.prototype),Object.getPrototypeOf(this).name="ErrorWithReasonCode"}};e.ErrorWithReasonCode=t,e.applyMixin=function(e,t,r=!1){var n;let i=[t];for(;;){let e=i[0],t=Object.getPrototypeOf(e);if(!t?.prototype)break;i.unshift(t)}for(let t of i)for(let i of Object.getOwnPropertyNames(t.prototype))(r||"constructor"!==i)&&Object.defineProperty(e.prototype,i,null!==(n=Object.getOwnPropertyDescriptor(t.prototype,i))&&void 0!==n?n:Object.create(null))},e.nextTick="function"==typeof(null==Mt?void 0:Mt.nextTick)?Mt.nextTick:e=>{setTimeout(e,0)},e.MQTTJS_VERSION=ls().version})),hs=Bt((e=>{Lt(),Rn(),dn(),Object.defineProperty(e,"__esModule",{value:!0}),e.ReasonCodes=void 0;var t=us();e.ReasonCodes={0:"",1:"Unacceptable protocol version",2:"Identifier rejected",3:"Server unavailable",4:"Bad username or password",5:"Not authorized",16:"No matching subscribers",17:"No subscription existed",128:"Unspecified error",129:"Malformed Packet",130:"Protocol Error",131:"Implementation specific error",132:"Unsupported Protocol Version",133:"Client Identifier not valid",134:"Bad User Name or Password",135:"Not authorized",136:"Server unavailable",137:"Server busy",138:"Banned",139:"Server shutting down",140:"Bad authentication method",141:"Keep Alive timeout",142:"Session taken over",143:"Topic Filter invalid",144:"Topic Name invalid",145:"Packet identifier in use",146:"Packet Identifier not found",147:"Receive Maximum exceeded",148:"Topic Alias invalid",149:"Packet too large",150:"Message rate too high",151:"Quota exceeded",152:"Administrative action",153:"Payload format invalid",154:"Retain not supported",155:"QoS not supported",156:"Use another server",157:"Server moved",158:"Shared Subscriptions not supported",159:"Connection rate exceeded",160:"Maximum connect time",161:"Subscription Identifiers not supported",162:"Wildcard Subscriptions not supported"},e.default=(r,n)=>{let{messageId:i}=n,o=n.cmd,s=null,a=r.outgoing[i]?r.outgoing[i].cb:null,l=null;if(a){switch(r.log("_handleAck :: packet type",o),o){case"pubcomp":case"puback":{let o=n.reasonCode;o&&o>0&&16!==o?(l=new t.ErrorWithReasonCode(`Publish error: ${e.ReasonCodes[o]}`,o),r._removeOutgoingAndStoreMessage(i,(()=>{a(l,n)}))):r._removeOutgoingAndStoreMessage(i,a);break}case"pubrec":{s={cmd:"pubrel",qos:2,messageId:i};let o=n.reasonCode;o&&o>0&&16!==o?(l=new t.ErrorWithReasonCode(`Publish error: ${e.ReasonCodes[o]}`,o),r._removeOutgoingAndStoreMessage(i,(()=>{a(l,n)}))):r._sendPacket(s);break}case"suback":{delete r.outgoing[i],r.messageIdProvider.deallocate(i);let t=n.granted;for(let n=0;n{delete r._resubscribeTopics[e]}))}}delete r.messageIdToTopic[i],r._invokeStoreProcessingQueue(),a(l,n);break}case"unsuback":delete r.outgoing[i],r.messageIdProvider.deallocate(i),r._invokeStoreProcessingQueue(),a(null,n);break;default:r.emit("error",new Error("unrecognized packet type"))}r.disconnecting&&0===Object.keys(r.outgoing).length&&r.emit("outgoingEmpty")}else r.log("_handleAck :: Server sent an ack in error. Ignoring.")}})),cs=Bt((e=>{Lt(),Rn(),dn(),Object.defineProperty(e,"__esModule",{value:!0});var t=us(),r=hs();e.default=(e,n)=>{let{options:i}=e,o=i.protocolVersion,s=5===o?n.reasonCode:n.returnCode;if(5===o)e.handleAuth(n,((n,i)=>{if(n)e.emit("error",n);else if(24===s)e.reconnecting=!1,e._sendPacket(i);else{let n=new t.ErrorWithReasonCode(`Connection refused: ${r.ReasonCodes[s]}`,s);e.emit("error",n)}}));else{let r=new t.ErrorWithReasonCode(`Protocol error: Auth packets are only supported in MQTT 5. Your version:${o}`,s);e.emit("error",r)}}})),fs=Bt((e=>{Lt(),Rn(),dn(),Object.defineProperty(e,"__esModule",{value:!0}),e.LRUCache=void 0;var t="object"==typeof performance&&performance&&"function"==typeof performance.now?performance:Date,r=new Set,n="object"==typeof Mt&&Mt?Mt:{},i=(e,t,r,i)=>{"function"==typeof n.emitWarning?n.emitWarning(e,t,r,i):console.error(`[${r}] ${t}: ${e}`)},o=globalThis.AbortController,s=globalThis.AbortSignal;if(typeof o>"u"){s=class{onabort;_onabort=[];reason;aborted=!1;addEventListener(e,t){this._onabort.push(t)}},o=class{constructor(){t()}signal=new s;abort(e){if(!this.signal.aborted){this.signal.reason=e,this.signal.aborted=!0;for(let t of this.signal._onabort)t(e);this.signal.onabort?.(e)}}};let e="1"!==n.env?.LRU_CACHE_IGNORE_AC_WARNING,t=()=>{e&&(e=!1,i("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.","NO_ABORT_CONTROLLER","ENOTSUP",t))}}var a=e=>e&&e===Math.floor(e)&&e>0&&isFinite(e),l=e=>a(e)?e<=Math.pow(2,8)?Uint8Array:e<=Math.pow(2,16)?Uint16Array:e<=Math.pow(2,32)?Uint32Array:e<=Number.MAX_SAFE_INTEGER?u:null:null,u=class extends Array{constructor(e){super(e),this.fill(0)}},h=class e{heap;length;static#e=!1;static create(t){let r=l(t);if(!r)return[];e.#e=!0;let n=new e(t,r);return e.#e=!1,n}constructor(t,r){if(!e.#e)throw new TypeError("instantiate Stack using Stack.create(n)");this.heap=new r(t),this.length=0}push(e){this.heap[this.length++]=e}pop(){return this.heap[--this.length]}},c=class e{#e;#t;#r;#n;#i;ttl;ttlResolution;ttlAutopurge;updateAgeOnGet;updateAgeOnHas;allowStale;noDisposeOnSet;noUpdateTTL;maxEntrySize;sizeCalculation;noDeleteOnFetchRejection;noDeleteOnStaleGet;allowStaleOnFetchAbort;allowStaleOnFetchRejection;ignoreFetchAbort;#o;#s;#a;#l;#u;#h;#c;#f;#d;#p;#g;#y;#m;#b;#w;#v;#_;static unsafeExposeInternals(e){return{starts:e.#m,ttls:e.#b,sizes:e.#y,keyMap:e.#a,keyList:e.#l,valList:e.#u,next:e.#h,prev:e.#c,get head(){return e.#f},get tail(){return e.#d},free:e.#p,isBackgroundFetch:t=>e.#E(t),backgroundFetch:(t,r,n,i)=>e.#S(t,r,n,i),moveToTail:t=>e.#A(t),indexes:t=>e.#T(t),rindexes:t=>e.#I(t),isStale:t=>e.#R(t)}}get max(){return this.#e}get maxSize(){return this.#t}get calculatedSize(){return this.#s}get size(){return this.#o}get fetchMethod(){return this.#i}get dispose(){return this.#r}get disposeAfter(){return this.#n}constructor(t){let{max:n=0,ttl:o,ttlResolution:s=1,ttlAutopurge:u,updateAgeOnGet:c,updateAgeOnHas:f,allowStale:d,dispose:p,disposeAfter:g,noDisposeOnSet:y,noUpdateTTL:m,maxSize:b=0,maxEntrySize:w=0,sizeCalculation:v,fetchMethod:_,noDeleteOnFetchRejection:E,noDeleteOnStaleGet:S,allowStaleOnFetchRejection:A,allowStaleOnFetchAbort:T,ignoreFetchAbort:I}=t;if(0!==n&&!a(n))throw new TypeError("max option must be a nonnegative integer");let R=n?l(n):Array;if(!R)throw new Error("invalid max value: "+n);if(this.#e=n,this.#t=b,this.maxEntrySize=w||this.#t,this.sizeCalculation=v,this.sizeCalculation){if(!this.#t&&!this.maxEntrySize)throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize");if("function"!=typeof this.sizeCalculation)throw new TypeError("sizeCalculation set to non-function")}if(void 0!==_&&"function"!=typeof _)throw new TypeError("fetchMethod must be a function if specified");if(this.#i=_,this.#v=!!_,this.#a=new Map,this.#l=new Array(n).fill(void 0),this.#u=new Array(n).fill(void 0),this.#h=new R(n),this.#c=new R(n),this.#f=0,this.#d=0,this.#p=h.create(n),this.#o=0,this.#s=0,"function"==typeof p&&(this.#r=p),"function"==typeof g?(this.#n=g,this.#g=[]):(this.#n=void 0,this.#g=void 0),this.#w=!!this.#r,this.#_=!!this.#n,this.noDisposeOnSet=!!y,this.noUpdateTTL=!!m,this.noDeleteOnFetchRejection=!!E,this.allowStaleOnFetchRejection=!!A,this.allowStaleOnFetchAbort=!!T,this.ignoreFetchAbort=!!I,0!==this.maxEntrySize){if(0!==this.#t&&!a(this.#t))throw new TypeError("maxSize must be a positive integer if specified");if(!a(this.maxEntrySize))throw new TypeError("maxEntrySize must be a positive integer if specified");this.#O()}if(this.allowStale=!!d,this.noDeleteOnStaleGet=!!S,this.updateAgeOnGet=!!c,this.updateAgeOnHas=!!f,this.ttlResolution=a(s)||0===s?s:1,this.ttlAutopurge=!!u,this.ttl=o||0,this.ttl){if(!a(this.ttl))throw new TypeError("ttl must be a positive integer if specified");this.#C()}if(0===this.#e&&0===this.ttl&&0===this.#t)throw new TypeError("At least one of max, maxSize, or ttl is required");if(!this.ttlAutopurge&&!this.#e&&!this.#t){let t="LRU_CACHE_UNBOUNDED";(e=>!r.has(e))(t)&&(r.add(t),i("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",t,e))}}getRemainingTTL(e){return this.#a.has(e)?1/0:0}#C(){let e=new u(this.#e),r=new u(this.#e);this.#b=e,this.#m=r,this.#k=(n,i,o=t.now())=>{if(r[n]=0!==i?o:0,e[n]=i,0!==i&&this.ttlAutopurge){let e=setTimeout((()=>{this.#R(n)&&this.delete(this.#l[n])}),i+1);e.unref&&e.unref()}},this.#P=n=>{r[n]=0!==e[n]?t.now():0},this.#B=(t,o)=>{if(e[o]){let s=e[o],a=r[o];t.ttl=s,t.start=a,t.now=n||i();let l=t.now-a;t.remainingTTL=s-l}};let n=0,i=()=>{let e=t.now();if(this.ttlResolution>0){n=e;let t=setTimeout((()=>n=0),this.ttlResolution);t.unref&&t.unref()}return e};this.getRemainingTTL=t=>{let o=this.#a.get(t);if(void 0===o)return 0;let s=e[o],a=r[o];return 0===s||0===a?1/0:s-((n||i())-a)},this.#R=t=>0!==e[t]&&0!==r[t]&&(n||i())-r[t]>e[t]}#P=()=>{};#B=()=>{};#k=()=>{};#R=()=>!1;#O(){let e=new u(this.#e);this.#s=0,this.#y=e,this.#x=t=>{this.#s-=e[t],e[t]=0},this.#U=(e,t,r,n)=>{if(this.#E(t))return 0;if(!a(r)){if(!n)throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.");if("function"!=typeof n)throw new TypeError("sizeCalculation must be a function");if(r=n(t,e),!a(r))throw new TypeError("sizeCalculation return invalid (expect positive integer)")}return r},this.#L=(t,r,n)=>{if(e[t]=r,this.#t){let r=this.#t-e[t];for(;this.#s>r;)this.#M(!0)}this.#s+=e[t],n&&(n.entrySize=r,n.totalCalculatedSize=this.#s)}}#x=e=>{};#L=(e,t,r)=>{};#U=(e,t,r,n)=>{if(r||n)throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");return 0};*#T({allowStale:e=this.allowStale}={}){if(this.#o)for(let t=this.#d;this.#N(t)&&((e||!this.#R(t))&&(yield t),t!==this.#f);)t=this.#c[t]}*#I({allowStale:e=this.allowStale}={}){if(this.#o)for(let t=this.#f;this.#N(t)&&((e||!this.#R(t))&&(yield t),t!==this.#d);)t=this.#h[t]}#N(e){return void 0!==e&&this.#a.get(this.#l[e])===e}*entries(){for(let e of this.#T())void 0!==this.#u[e]&&void 0!==this.#l[e]&&!this.#E(this.#u[e])&&(yield[this.#l[e],this.#u[e]])}*rentries(){for(let e of this.#I())void 0!==this.#u[e]&&void 0!==this.#l[e]&&!this.#E(this.#u[e])&&(yield[this.#l[e],this.#u[e]])}*keys(){for(let e of this.#T()){let t=this.#l[e];void 0!==t&&!this.#E(this.#u[e])&&(yield t)}}*rkeys(){for(let e of this.#I()){let t=this.#l[e];void 0!==t&&!this.#E(this.#u[e])&&(yield t)}}*values(){for(let e of this.#T())void 0!==this.#u[e]&&!this.#E(this.#u[e])&&(yield this.#u[e])}*rvalues(){for(let e of this.#I())void 0!==this.#u[e]&&!this.#E(this.#u[e])&&(yield this.#u[e])}[Symbol.iterator](){return this.entries()}find(e,t={}){for(let r of this.#T()){let n=this.#u[r],i=this.#E(n)?n.__staleWhileFetching:n;if(void 0!==i&&e(i,this.#l[r],this))return this.get(this.#l[r],t)}}forEach(e,t=this){for(let r of this.#T()){let n=this.#u[r],i=this.#E(n)?n.__staleWhileFetching:n;void 0!==i&&e.call(t,i,this.#l[r],this)}}rforEach(e,t=this){for(let r of this.#I()){let n=this.#u[r],i=this.#E(n)?n.__staleWhileFetching:n;void 0!==i&&e.call(t,i,this.#l[r],this)}}purgeStale(){let e=!1;for(let t of this.#I({allowStale:!0}))this.#R(t)&&(this.delete(this.#l[t]),e=!0);return e}dump(){let e=[];for(let r of this.#T({allowStale:!0})){let n=this.#l[r],i=this.#u[r],o=this.#E(i)?i.__staleWhileFetching:i;if(void 0===o||void 0===n)continue;let s={value:o};if(this.#b&&this.#m){s.ttl=this.#b[r];let e=t.now()-this.#m[r];s.start=Math.floor(Date.now()-e)}this.#y&&(s.size=this.#y[r]),e.unshift([n,s])}return e}load(e){this.clear();for(let[r,n]of e){if(n.start){let e=Date.now()-n.start;n.start=t.now()-e}this.set(r,n.value,n)}}set(e,t,r={}){if(void 0===t)return this.delete(e),this;let{ttl:n=this.ttl,start:i,noDisposeOnSet:o=this.noDisposeOnSet,sizeCalculation:s=this.sizeCalculation,status:a}=r,{noUpdateTTL:l=this.noUpdateTTL}=r,u=this.#U(e,t,r.size||0,s);if(this.maxEntrySize&&u>this.maxEntrySize)return a&&(a.set="miss",a.maxEntrySizeExceeded=!0),this.delete(e),this;let h=0===this.#o?void 0:this.#a.get(e);if(void 0===h)h=0===this.#o?this.#d:0!==this.#p.length?this.#p.pop():this.#o===this.#e?this.#M(!1):this.#o,this.#l[h]=e,this.#u[h]=t,this.#a.set(e,h),this.#h[this.#d]=h,this.#c[h]=this.#d,this.#d=h,this.#o++,this.#L(h,u,a),a&&(a.set="add"),l=!1;else{this.#A(h);let r=this.#u[h];if(t!==r){if(this.#v&&this.#E(r)){r.__abortController.abort(new Error("replaced"));let{__staleWhileFetching:t}=r;void 0!==t&&!o&&(this.#w&&this.#r?.(t,e,"set"),this.#_&&this.#g?.push([t,e,"set"]))}else o||(this.#w&&this.#r?.(r,e,"set"),this.#_&&this.#g?.push([r,e,"set"]));if(this.#x(h),this.#L(h,u,a),this.#u[h]=t,a){a.set="replace";let e=r&&this.#E(r)?r.__staleWhileFetching:r;void 0!==e&&(a.oldValue=e)}}else a&&(a.set="update")}if(0!==n&&!this.#b&&this.#C(),this.#b&&(l||this.#k(h,n,i),a&&this.#B(a,h)),!o&&this.#_&&this.#g){let e,t=this.#g;for(;e=t?.shift();)this.#n?.(...e)}return this}pop(){try{for(;this.#o;){let e=this.#u[this.#f];if(this.#M(!0),this.#E(e)){if(e.__staleWhileFetching)return e.__staleWhileFetching}else if(void 0!==e)return e}}finally{if(this.#_&&this.#g){let e,t=this.#g;for(;e=t?.shift();)this.#n?.(...e)}}}#M(e){let t=this.#f,r=this.#l[t],n=this.#u[t];return this.#v&&this.#E(n)?n.__abortController.abort(new Error("evicted")):(this.#w||this.#_)&&(this.#w&&this.#r?.(n,r,"evict"),this.#_&&this.#g?.push([n,r,"evict"])),this.#x(t),e&&(this.#l[t]=void 0,this.#u[t]=void 0,this.#p.push(t)),1===this.#o?(this.#f=this.#d=0,this.#p.length=0):this.#f=this.#h[t],this.#a.delete(r),this.#o--,t}has(e,t={}){let{updateAgeOnHas:r=this.updateAgeOnHas,status:n}=t,i=this.#a.get(e);if(void 0!==i){let e=this.#u[i];if(this.#E(e)&&void 0===e.__staleWhileFetching)return!1;if(!this.#R(i))return r&&this.#P(i),n&&(n.has="hit",this.#B(n,i)),!0;n&&(n.has="stale",this.#B(n,i))}else n&&(n.has="miss");return!1}peek(e,t={}){let{allowStale:r=this.allowStale}=t,n=this.#a.get(e);if(void 0!==n&&(r||!this.#R(n))){let e=this.#u[n];return this.#E(e)?e.__staleWhileFetching:e}}#S(e,t,r,n){let i=void 0===t?void 0:this.#u[t];if(this.#E(i))return i;let s=new o,{signal:a}=r;a?.addEventListener("abort",(()=>s.abort(a.reason)),{signal:s.signal});let l={signal:s.signal,options:r,context:n},u=(n,i=!1)=>{let{aborted:o}=s.signal,a=r.ignoreFetchAbort&&void 0!==n;if(r.status&&(o&&!i?(r.status.fetchAborted=!0,r.status.fetchError=s.signal.reason,a&&(r.status.fetchAbortIgnored=!0)):r.status.fetchResolved=!0),o&&!a&&!i)return h(s.signal.reason);let u=c;return this.#u[t]===c&&(void 0===n?u.__staleWhileFetching?this.#u[t]=u.__staleWhileFetching:this.delete(e):(r.status&&(r.status.fetchUpdated=!0),this.set(e,n,l.options))),n},h=n=>{let{aborted:i}=s.signal,o=i&&r.allowStaleOnFetchAbort,a=o||r.allowStaleOnFetchRejection,l=a||r.noDeleteOnFetchRejection,u=c;if(this.#u[t]===c&&(l&&void 0!==u.__staleWhileFetching?o||(this.#u[t]=u.__staleWhileFetching):this.delete(e)),a)return r.status&&void 0!==u.__staleWhileFetching&&(r.status.returnedStale=!0),u.__staleWhileFetching;if(u.__returned===u)throw n};r.status&&(r.status.fetchDispatched=!0);let c=new Promise(((t,n)=>{let o=this.#i?.(e,i,l);o&&o instanceof Promise&&o.then((e=>t(void 0===e?void 0:e)),n),s.signal.addEventListener("abort",(()=>{(!r.ignoreFetchAbort||r.allowStaleOnFetchAbort)&&(t(void 0),r.allowStaleOnFetchAbort&&(t=e=>u(e,!0)))}))})).then(u,(e=>(r.status&&(r.status.fetchRejected=!0,r.status.fetchError=e),h(e)))),f=Object.assign(c,{__abortController:s,__staleWhileFetching:i,__returned:void 0});return void 0===t?(this.set(e,f,{...l.options,status:void 0}),t=this.#a.get(e)):this.#u[t]=f,f}#E(e){if(!this.#v)return!1;let t=e;return!!t&&t instanceof Promise&&t.hasOwnProperty("__staleWhileFetching")&&t.__abortController instanceof o}async fetch(e,t={}){let{allowStale:r=this.allowStale,updateAgeOnGet:n=this.updateAgeOnGet,noDeleteOnStaleGet:i=this.noDeleteOnStaleGet,ttl:o=this.ttl,noDisposeOnSet:s=this.noDisposeOnSet,size:a=0,sizeCalculation:l=this.sizeCalculation,noUpdateTTL:u=this.noUpdateTTL,noDeleteOnFetchRejection:h=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:c=this.allowStaleOnFetchRejection,ignoreFetchAbort:f=this.ignoreFetchAbort,allowStaleOnFetchAbort:d=this.allowStaleOnFetchAbort,context:p,forceRefresh:g=!1,status:y,signal:m}=t;if(!this.#v)return y&&(y.fetch="get"),this.get(e,{allowStale:r,updateAgeOnGet:n,noDeleteOnStaleGet:i,status:y});let b={allowStale:r,updateAgeOnGet:n,noDeleteOnStaleGet:i,ttl:o,noDisposeOnSet:s,size:a,sizeCalculation:l,noUpdateTTL:u,noDeleteOnFetchRejection:h,allowStaleOnFetchRejection:c,allowStaleOnFetchAbort:d,ignoreFetchAbort:f,status:y,signal:m},w=this.#a.get(e);if(void 0===w){y&&(y.fetch="miss");let t=this.#S(e,w,b,p);return t.__returned=t}{let t=this.#u[w];if(this.#E(t)){let e=r&&void 0!==t.__staleWhileFetching;return y&&(y.fetch="inflight",e&&(y.returnedStale=!0)),e?t.__staleWhileFetching:t.__returned=t}let i=this.#R(w);if(!g&&!i)return y&&(y.fetch="hit"),this.#A(w),n&&this.#P(w),y&&this.#B(y,w),t;let o=this.#S(e,w,b,p),s=void 0!==o.__staleWhileFetching&&r;return y&&(y.fetch=i?"stale":"refresh",s&&i&&(y.returnedStale=!0)),s?o.__staleWhileFetching:o.__returned=o}}get(e,t={}){let{allowStale:r=this.allowStale,updateAgeOnGet:n=this.updateAgeOnGet,noDeleteOnStaleGet:i=this.noDeleteOnStaleGet,status:o}=t,s=this.#a.get(e);if(void 0!==s){let t=this.#u[s],a=this.#E(t);return o&&this.#B(o,s),this.#R(s)?(o&&(o.get="stale"),a?(o&&r&&void 0!==t.__staleWhileFetching&&(o.returnedStale=!0),r?t.__staleWhileFetching:void 0):(i||this.delete(e),o&&r&&(o.returnedStale=!0),r?t:void 0)):(o&&(o.get="hit"),a?t.__staleWhileFetching:(this.#A(s),n&&this.#P(s),t))}o&&(o.get="miss")}#j(e,t){this.#c[t]=e,this.#h[e]=t}#A(e){e!==this.#d&&(e===this.#f?this.#f=this.#h[e]:this.#j(this.#c[e],this.#h[e]),this.#j(this.#d,e),this.#d=e)}delete(e){let t=!1;if(0!==this.#o){let r=this.#a.get(e);if(void 0!==r)if(t=!0,1===this.#o)this.clear();else{this.#x(r);let t=this.#u[r];this.#E(t)?t.__abortController.abort(new Error("deleted")):(this.#w||this.#_)&&(this.#w&&this.#r?.(t,e,"delete"),this.#_&&this.#g?.push([t,e,"delete"])),this.#a.delete(e),this.#l[r]=void 0,this.#u[r]=void 0,r===this.#d?this.#d=this.#c[r]:r===this.#f?this.#f=this.#h[r]:(this.#h[this.#c[r]]=this.#h[r],this.#c[this.#h[r]]=this.#c[r]),this.#o--,this.#p.push(r)}}if(this.#_&&this.#g?.length){let e,t=this.#g;for(;e=t?.shift();)this.#n?.(...e)}return t}clear(){for(let e of this.#I({allowStale:!0})){let t=this.#u[e];if(this.#E(t))t.__abortController.abort(new Error("deleted"));else{let r=this.#l[e];this.#w&&this.#r?.(t,r,"delete"),this.#_&&this.#g?.push([t,r,"delete"])}}if(this.#a.clear(),this.#u.fill(void 0),this.#l.fill(void 0),this.#b&&this.#m&&(this.#b.fill(0),this.#m.fill(0)),this.#y&&this.#y.fill(0),this.#f=0,this.#d=0,this.#p.length=0,this.#s=0,this.#o=0,this.#_&&this.#g){let e,t=this.#g;for(;e=t?.shift();)this.#n?.(...e)}}};e.LRUCache=c})),ds=Bt((e=>{Lt(),Rn(),dn(),Object.defineProperty(e,"t",{value:!0}),e.ContainerIterator=e.Container=e.Base=void 0,e.ContainerIterator=class{constructor(e=0){this.iteratorType=e}equals(e){return this.o===e.o}};var t=class{constructor(){this.i=0}get length(){return this.i}size(){return this.i}empty(){return 0===this.i}};e.Base=t,e.Container=class extends t{}})),ps=Bt((e=>{Lt(),Rn(),dn(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var t=ds(),r=class extends t.Base{constructor(e=[]){super(),this.S=[];let t=this;e.forEach((function(e){t.push(e)}))}clear(){this.i=0,this.S=[]}push(e){return this.S.push(e),this.i+=1,this.i}pop(){if(0!==this.i)return this.i-=1,this.S.pop()}top(){return this.S[this.i-1]}};e.default=r})),gs=Bt((e=>{Lt(),Rn(),dn(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var t=ds(),r=class extends t.Base{constructor(e=[]){super(),this.j=0,this.q=[];let t=this;e.forEach((function(e){t.push(e)}))}clear(){this.q=[],this.i=this.j=0}push(e){let t=this.q.length;if(this.j/t>.5&&this.j+this.i>=t&&t>4096){let t=this.i;for(let e=0;e{Lt(),Rn(),dn(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var t=ds(),r=class extends t.Base{constructor(e=[],t=function(e,t){return e>t?-1:e>1;for(let e=this.i-1>>1;e>=0;--e)this.k(e,n)}m(e){let t=this.C[e];for(;e>0;){let r=e-1>>1,n=this.C[r];if(this.v(n,t)<=0)break;this.C[e]=n,e=r}this.C[e]=t}k(e,t){let r=this.C[e];for(;e0&&(t=n,i=this.C[n]),this.v(i,r)>=0)break;this.C[e]=i,e=t}this.C[e]=r}clear(){this.i=0,this.C.length=0}push(e){this.C.push(e),this.m(this.i),this.i+=1}pop(){if(0===this.i)return;let e=this.C[0],t=this.C.pop();return this.i-=1,this.i&&(this.C[0]=t,this.k(0,this.i>>1)),e}top(){return this.C[0]}find(e){return this.C.indexOf(e)>=0}remove(e){let t=this.C.indexOf(e);return!(t<0||(0===t?this.pop():t===this.i-1?(this.C.pop(),this.i-=1):(this.C.splice(t,1,this.C.pop()),this.i-=1,this.m(t),this.k(t,this.i>>1)),0))}updateItem(e){let t=this.C.indexOf(e);return!(t<0||(this.m(t),this.k(t,this.i>>1),0))}toArray(){return[...this.C]}};e.default=r})),ms=Bt((e=>{Lt(),Rn(),dn(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var t=ds(),r=class extends t.Container{};e.default=r})),bs=Bt((e=>{Lt(),Rn(),dn(),Object.defineProperty(e,"t",{value:!0}),e.throwIteratorAccessError=function(){throw new RangeError("Iterator access denied!")}})),ws=Bt((e=>{Lt(),Rn(),dn(),Object.defineProperty(e,"t",{value:!0}),e.RandomIterator=void 0;var t=ds(),r=bs(),n=class extends t.ContainerIterator{constructor(e,t){super(t),this.o=e,0===this.iteratorType?(this.pre=function(){return 0===this.o&&(0,r.throwIteratorAccessError)(),this.o-=1,this},this.next=function(){return this.o===this.container.size()&&(0,r.throwIteratorAccessError)(),this.o+=1,this}):(this.pre=function(){return this.o===this.container.size()-1&&(0,r.throwIteratorAccessError)(),this.o+=1,this},this.next=function(){return-1===this.o&&(0,r.throwIteratorAccessError)(),this.o-=1,this})}get pointer(){return this.container.getElementByPos(this.o)}set pointer(e){this.container.setElementByPos(this.o,e)}};e.RandomIterator=n})),vs=Bt((e=>{Lt(),Rn(),dn(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var t,r=(t=ms())&&t.t?t:{default:t},n=ws(),i=class e extends n.RandomIterator{constructor(e,t,r){super(e,r),this.container=t}copy(){return new e(this.o,this.container,this.iteratorType)}},o=class extends r.default{constructor(e=[],t=!0){if(super(),Array.isArray(e))this.J=t?[...e]:e,this.i=e.length;else{this.J=[];let t=this;e.forEach((function(e){t.pushBack(e)}))}}clear(){this.i=0,this.J.length=0}begin(){return new i(0,this)}end(){return new i(this.i,this)}rBegin(){return new i(this.i-1,this,1)}rEnd(){return new i(-1,this,1)}front(){return this.J[0]}back(){return this.J[this.i-1]}getElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;return this.J[e]}eraseElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;return this.J.splice(e,1),this.i-=1,this.i}eraseElementByValue(e){let t=0;for(let r=0;rthis.i-1)throw new RangeError;this.J[e]=t}insert(e,t,r=1){if(e<0||e>this.i)throw new RangeError;return this.J.splice(e,0,...new Array(r).fill(t)),this.i+=r,this.i}find(e){for(let t=0;t{Lt(),Rn(),dn(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var t,r=(t=ms())&&t.t?t:{default:t},n=ds(),i=bs(),o=class e extends n.ContainerIterator{constructor(e,t,r,n){super(n),this.o=e,this.h=t,this.container=r,0===this.iteratorType?(this.pre=function(){return this.o.L===this.h&&(0,i.throwIteratorAccessError)(),this.o=this.o.L,this},this.next=function(){return this.o===this.h&&(0,i.throwIteratorAccessError)(),this.o=this.o.B,this}):(this.pre=function(){return this.o.B===this.h&&(0,i.throwIteratorAccessError)(),this.o=this.o.B,this},this.next=function(){return this.o===this.h&&(0,i.throwIteratorAccessError)(),this.o=this.o.L,this})}get pointer(){return this.o===this.h&&(0,i.throwIteratorAccessError)(),this.o.l}set pointer(e){this.o===this.h&&(0,i.throwIteratorAccessError)(),this.o.l=e}copy(){return new e(this.o,this.h,this.container,this.iteratorType)}},s=class extends r.default{constructor(e=[]){super(),this.h={},this.p=this._=this.h.L=this.h.B=this.h;let t=this;e.forEach((function(e){t.pushBack(e)}))}V(e){let{L:t,B:r}=e;t.B=r,r.L=t,e===this.p&&(this.p=r),e===this._&&(this._=t),this.i-=1}G(e,t){let r=t.B,n={l:e,L:t,B:r};t.B=n,r.L=n,t===this.h&&(this.p=n),r===this.h&&(this._=n),this.i+=1}clear(){this.i=0,this.p=this._=this.h.L=this.h.B=this.h}begin(){return new o(this.p,this.h,this)}end(){return new o(this.h,this.h,this)}rBegin(){return new o(this._,this.h,this,1)}rEnd(){return new o(this.h,this.h,this,1)}front(){return this.p.l}back(){return this._.l}getElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let t=this.p;for(;e--;)t=t.B;return t.l}eraseElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let t=this.p;for(;e--;)t=t.B;return this.V(t),this.i}eraseElementByValue(e){let t=this.p;for(;t!==this.h;)t.l===e&&this.V(t),t=t.B;return this.i}eraseElementByIterator(e){let t=e.o;return t===this.h&&(0,i.throwIteratorAccessError)(),e=e.next(),this.V(t),e}pushBack(e){return this.G(e,this._),this.i}popBack(){if(0===this.i)return;let e=this._.l;return this.V(this._),e}pushFront(e){return this.G(e,this.h),this.i}popFront(){if(0===this.i)return;let e=this.p.l;return this.V(this.p),e}setElementByPos(e,t){if(e<0||e>this.i-1)throw new RangeError;let r=this.p;for(;e--;)r=r.B;r.l=t}insert(e,t,r=1){if(e<0||e>this.i)throw new RangeError;if(r<=0)return this.i;if(0===e)for(;r--;)this.pushFront(t);else if(e===this.i)for(;r--;)this.pushBack(t);else{let n=this.p;for(let t=1;t{Lt(),Rn(),dn(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var t,r=(t=ms())&&t.t?t:{default:t},n=ws(),i=class e extends n.RandomIterator{constructor(e,t,r){super(e,r),this.container=t}copy(){return new e(this.o,this.container,this.iteratorType)}},o=class extends r.default{constructor(e=[],t=4096){super(),this.j=0,this.D=0,this.R=0,this.N=0,this.P=0,this.A=[];let r=(()=>{if("number"==typeof e.length)return e.length;if("number"==typeof e.size)return e.size;if("function"==typeof e.size)return e.size();throw new TypeError("Cannot get the length or size of the container")})();this.F=t,this.P=Math.max(Math.ceil(r/this.F),1);for(let e=0;e>1)-(n>>1),this.D=this.N=this.F-r%this.F>>1;let i=this;e.forEach((function(e){i.pushBack(e)}))}T(){let e=[],t=Math.max(this.P>>1,1);for(let r=0;r>1}begin(){return new i(0,this)}end(){return new i(this.i,this)}rBegin(){return new i(this.i-1,this,1)}rEnd(){return new i(-1,this,1)}front(){if(0!==this.i)return this.A[this.j][this.D]}back(){if(0!==this.i)return this.A[this.R][this.N]}pushBack(e){return this.i&&(this.N0?this.N-=1:this.R>0?(this.R-=1,this.N=this.F-1):(this.R=this.P-1,this.N=this.F-1)),this.i-=1,e}pushFront(e){return this.i&&(this.D>0?this.D-=1:this.j>0?(this.j-=1,this.D=this.F-1):(this.j=this.P-1,this.D=this.F-1),this.j===this.R&&this.D===this.N&&this.T()),this.i+=1,this.A[this.j][this.D]=e,this.i}popFront(){if(0===this.i)return;let e=this.A[this.j][this.D];return 1!==this.i&&(this.Dthis.i-1)throw new RangeError;let{curNodeBucketIndex:t,curNodePointerIndex:r}=this.O(e);return this.A[t][r]}setElementByPos(e,t){if(e<0||e>this.i-1)throw new RangeError;let{curNodeBucketIndex:r,curNodePointerIndex:n}=this.O(e);this.A[r][n]=t}insert(e,t,r=1){if(e<0||e>this.i)throw new RangeError;if(0===e)for(;r--;)this.pushFront(t);else if(e===this.i)for(;r--;)this.pushBack(t);else{let n=[];for(let t=e;tthis.i-1)throw new RangeError;if(0===e)this.popFront();else if(e===this.i-1)this.popBack();else{let t=[];for(let r=e+1;re;)this.popBack();return this.i}sort(e){let t=[];for(let e=0;e{Lt(),Rn(),dn(),Object.defineProperty(e,"t",{value:!0}),e.TreeNodeEnableIndex=e.TreeNode=void 0;var t=class{constructor(e,t){this.ee=1,this.u=void 0,this.l=void 0,this.U=void 0,this.W=void 0,this.tt=void 0,this.u=e,this.l=t}L(){let e=this;if(1===e.ee&&e.tt.tt===e)e=e.W;else if(e.U)for(e=e.U;e.W;)e=e.W;else{let t=e.tt;for(;t.U===e;)e=t,t=e.tt;e=t}return e}B(){let e=this;if(e.W){for(e=e.W;e.U;)e=e.U;return e}{let t=e.tt;for(;t.W===e;)e=t,t=e.tt;return e.W!==t?t:e}}te(){let e=this.tt,t=this.W,r=t.U;return e.tt===this?e.tt=t:e.U===this?e.U=t:e.W=t,t.tt=e,t.U=this,this.tt=t,this.W=r,r&&(r.tt=this),t}se(){let e=this.tt,t=this.U,r=t.W;return e.tt===this?e.tt=t:e.U===this?e.U=t:e.W=t,t.tt=e,t.W=this,this.tt=t,this.U=r,r&&(r.tt=this),t}};e.TreeNode=t,e.TreeNodeEnableIndex=class extends t{constructor(){super(...arguments),this.rt=1}te(){let e=super.te();return this.ie(),e.ie(),e}se(){let e=super.se();return this.ie(),e.ie(),e}ie(){this.rt=1,this.U&&(this.rt+=this.U.rt),this.W&&(this.rt+=this.W.rt)}}})),As=Bt((e=>{Lt(),Rn(),dn(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var t=Ss(),r=ds(),n=bs(),i=class extends r.Container{constructor(e=function(e,t){return et?1:0},r=!1){super(),this.Y=void 0,this.v=e,r?(this.re=t.TreeNodeEnableIndex,this.M=function(e,t,r){let n=this.ne(e,t,r);if(n){let e=n.tt;for(;e!==this.h;)e.rt+=1,e=e.tt;let t=this.he(n);if(t){let{parentNode:e,grandParent:r,curNode:n}=t;e.ie(),r.ie(),n.ie()}}return this.i},this.V=function(e){let t=this.fe(e);for(;t!==this.h;)t.rt-=1,t=t.tt}):(this.re=t.TreeNode,this.M=function(e,t,r){let n=this.ne(e,t,r);return n&&this.he(n),this.i},this.V=this.fe),this.h=new this.re}X(e,t){let r=this.h;for(;e;){let n=this.v(e.u,t);if(n<0)e=e.W;else{if(!(n>0))return e;r=e,e=e.U}}return r}Z(e,t){let r=this.h;for(;e;)this.v(e.u,t)<=0?e=e.W:(r=e,e=e.U);return r}$(e,t){let r=this.h;for(;e;){let n=this.v(e.u,t);if(n<0)r=e,e=e.W;else{if(!(n>0))return e;e=e.U}}return r}rr(e,t){let r=this.h;for(;e;)this.v(e.u,t)<0?(r=e,e=e.W):e=e.U;return r}ue(e){for(;;){let t=e.tt;if(t===this.h)return;if(1===e.ee)return void(e.ee=0);if(e===t.U){let r=t.W;if(1===r.ee)r.ee=0,t.ee=1,t===this.Y?this.Y=t.te():t.te();else{if(r.W&&1===r.W.ee)return r.ee=t.ee,t.ee=0,r.W.ee=0,void(t===this.Y?this.Y=t.te():t.te());r.U&&1===r.U.ee?(r.ee=1,r.U.ee=0,r.se()):(r.ee=1,e=t)}}else{let r=t.U;if(1===r.ee)r.ee=0,t.ee=1,t===this.Y?this.Y=t.se():t.se();else{if(r.U&&1===r.U.ee)return r.ee=t.ee,t.ee=0,r.U.ee=0,void(t===this.Y?this.Y=t.se():t.se());r.W&&1===r.W.ee?(r.ee=1,r.W.ee=0,r.te()):(r.ee=1,e=t)}}}}fe(e){if(1===this.i)return this.clear(),this.h;let t=e;for(;t.U||t.W;){if(t.W)for(t=t.W;t.U;)t=t.U;else t=t.U;[e.u,t.u]=[t.u,e.u],[e.l,t.l]=[t.l,e.l],e=t}this.h.U===t?this.h.U=t.tt:this.h.W===t&&(this.h.W=t.tt),this.ue(t);let r=t.tt;return t===r.U?r.U=void 0:r.W=void 0,this.i-=1,this.Y.ee=0,r}oe(e,t){return void 0!==e&&(!(!this.oe(e.U,t)&&!t(e))||this.oe(e.W,t))}he(e){for(;;){let t=e.tt;if(0===t.ee)return;let r=t.tt;if(t===r.U){let n=r.W;if(n&&1===n.ee){if(n.ee=t.ee=0,r===this.Y)return;r.ee=1,e=r;continue}if(e===t.W){if(e.ee=0,e.U&&(e.U.tt=t),e.W&&(e.W.tt=r),t.W=e.U,r.U=e.W,e.U=t,e.W=r,r===this.Y)this.Y=e,this.h.tt=e;else{let t=r.tt;t.U===r?t.U=e:t.W=e}return e.tt=r.tt,t.tt=e,r.tt=e,r.ee=1,{parentNode:t,grandParent:r,curNode:e}}t.ee=0,r===this.Y?this.Y=r.se():r.se(),r.ee=1}else{let n=r.U;if(n&&1===n.ee){if(n.ee=t.ee=0,r===this.Y)return;r.ee=1,e=r;continue}if(e===t.U){if(e.ee=0,e.U&&(e.U.tt=r),e.W&&(e.W.tt=t),r.W=e.U,t.U=e.W,e.U=r,e.W=t,r===this.Y)this.Y=e,this.h.tt=e;else{let t=r.tt;t.U===r?t.U=e:t.W=e}return e.tt=r.tt,t.tt=e,r.tt=e,r.ee=1,{parentNode:t,grandParent:r,curNode:e}}t.ee=0,r===this.Y?this.Y=r.te():r.te(),r.ee=1}return}}ne(e,t,r){if(void 0===this.Y)return this.i+=1,this.Y=new this.re(e,t),this.Y.ee=0,this.Y.tt=this.h,this.h.tt=this.Y,this.h.U=this.Y,void(this.h.W=this.Y);let n,i=this.h.U,o=this.v(i.u,e);if(0!==o){if(o>0)i.U=new this.re(e,t),i.U.tt=i,n=i.U,this.h.U=n;else{let i=this.h.W,o=this.v(i.u,e);if(0===o)return void(i.l=t);if(o<0)i.W=new this.re(e,t),i.W.tt=i,n=i.W,this.h.W=n;else{if(void 0!==r){let i=r.o;if(i!==this.h){let r=this.v(i.u,e);if(0===r)return void(i.l=t);if(r>0){let r=i.L(),o=this.v(r.u,e);if(0===o)return void(r.l=t);o<0&&(n=new this.re(e,t),void 0===r.W?(r.W=n,n.tt=r):(i.U=n,n.tt=i))}}}if(void 0===n)for(n=this.Y;;){let r=this.v(n.u,e);if(r>0){if(void 0===n.U){n.U=new this.re(e,t),n.U.tt=n,n=n.U;break}n=n.U}else{if(!(r<0))return void(n.l=t);if(void 0===n.W){n.W=new this.re(e,t),n.W.tt=n,n=n.W;break}n=n.W}}}}return this.i+=1,n}i.l=t}I(e,t){for(;e;){let r=this.v(e.u,t);if(r<0)e=e.W;else{if(!(r>0))return e;e=e.U}}return e||this.h}clear(){this.i=0,this.Y=void 0,this.h.tt=void 0,this.h.U=this.h.W=void 0}updateKeyByIterator(e,t){let r=e.o;if(r===this.h&&(0,n.throwIteratorAccessError)(),1===this.i)return r.u=t,!0;if(r===this.h.U)return this.v(r.B().u,t)>0&&(r.u=t,!0);if(r===this.h.W)return this.v(r.L().u,t)<0&&(r.u=t,!0);let i=r.L().u;if(this.v(i,t)>=0)return!1;let o=r.B().u;return!(this.v(o,t)<=0||(r.u=t,0))}eraseElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let t=0,r=this;return this.oe(this.Y,(function(n){return e===t?(r.V(n),!0):(t+=1,!1)})),this.i}eraseElementByKey(e){if(0===this.i)return!1;let t=this.I(this.Y,e);return t!==this.h&&(this.V(t),!0)}eraseElementByIterator(e){let t=e.o;t===this.h&&(0,n.throwIteratorAccessError)();let r=void 0===t.W;return 0===e.iteratorType?r&&e.next():(!r||void 0===t.U)&&e.next(),this.V(t),e}forEach(e){let t=0;for(let r of this)e(r,t++,this)}getElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let t,r=0;for(let n of this){if(r===e){t=n;break}r+=1}return t}getHeight(){if(0===this.i)return 0;let e=function(t){return t?Math.max(e(t.U),e(t.W))+1:0};return e(this.Y)}};e.default=i})),Ts=Bt((e=>{Lt(),Rn(),dn(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var t=ds(),r=bs(),n=class extends t.ContainerIterator{constructor(e,t,n){super(n),this.o=e,this.h=t,0===this.iteratorType?(this.pre=function(){return this.o===this.h.U&&(0,r.throwIteratorAccessError)(),this.o=this.o.L(),this},this.next=function(){return this.o===this.h&&(0,r.throwIteratorAccessError)(),this.o=this.o.B(),this}):(this.pre=function(){return this.o===this.h.W&&(0,r.throwIteratorAccessError)(),this.o=this.o.B(),this},this.next=function(){return this.o===this.h&&(0,r.throwIteratorAccessError)(),this.o=this.o.L(),this})}get index(){let e=this.o,t=this.h.tt;if(e===this.h)return t?t.rt-1:0;let r=0;for(e.U&&(r+=e.U.rt);e!==t;){let t=e.tt;e===t.W&&(r+=1,t.U&&(r+=t.U.rt)),e=t}return r}};e.default=n})),Is=Bt((e=>{Lt(),Rn(),dn(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var t=i(As()),r=i(Ts()),n=bs();function i(e){return e&&e.t?e:{default:e}}var o=class e extends r.default{constructor(e,t,r,n){super(e,t,n),this.container=r}get pointer(){return this.o===this.h&&(0,n.throwIteratorAccessError)(),this.o.u}copy(){return new e(this.o,this.h,this.container,this.iteratorType)}},s=class extends t.default{constructor(e=[],t,r){super(t,r);let n=this;e.forEach((function(e){n.insert(e)}))}*K(e){void 0!==e&&(yield*this.K(e.U),yield e.u,yield*this.K(e.W))}begin(){return new o(this.h.U||this.h,this.h,this)}end(){return new o(this.h,this.h,this)}rBegin(){return new o(this.h.W||this.h,this.h,this,1)}rEnd(){return new o(this.h,this.h,this,1)}front(){return this.h.U?this.h.U.u:void 0}back(){return this.h.W?this.h.W.u:void 0}insert(e,t){return this.M(e,void 0,t)}find(e){let t=this.I(this.Y,e);return new o(t,this.h,this)}lowerBound(e){let t=this.X(this.Y,e);return new o(t,this.h,this)}upperBound(e){let t=this.Z(this.Y,e);return new o(t,this.h,this)}reverseLowerBound(e){let t=this.$(this.Y,e);return new o(t,this.h,this)}reverseUpperBound(e){let t=this.rr(this.Y,e);return new o(t,this.h,this)}union(e){let t=this;return e.forEach((function(e){t.insert(e)})),this.i}[Symbol.iterator](){return this.K(this.Y)}};e.default=s})),Rs=Bt((e=>{Lt(),Rn(),dn(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var t=i(As()),r=i(Ts()),n=bs();function i(e){return e&&e.t?e:{default:e}}var o=class e extends r.default{constructor(e,t,r,n){super(e,t,n),this.container=r}get pointer(){this.o===this.h&&(0,n.throwIteratorAccessError)();let e=this;return new Proxy([],{get:(t,r)=>"0"===r?e.o.u:"1"===r?e.o.l:void 0,set(t,r,n){if("1"!==r)throw new TypeError("props must be 1");return e.o.l=n,!0}})}copy(){return new e(this.o,this.h,this.container,this.iteratorType)}},s=class extends t.default{constructor(e=[],t,r){super(t,r);let n=this;e.forEach((function(e){n.setElement(e[0],e[1])}))}*K(e){void 0!==e&&(yield*this.K(e.U),yield[e.u,e.l],yield*this.K(e.W))}begin(){return new o(this.h.U||this.h,this.h,this)}end(){return new o(this.h,this.h,this)}rBegin(){return new o(this.h.W||this.h,this.h,this,1)}rEnd(){return new o(this.h,this.h,this,1)}front(){if(0===this.i)return;let e=this.h.U;return[e.u,e.l]}back(){if(0===this.i)return;let e=this.h.W;return[e.u,e.l]}lowerBound(e){let t=this.X(this.Y,e);return new o(t,this.h,this)}upperBound(e){let t=this.Z(this.Y,e);return new o(t,this.h,this)}reverseLowerBound(e){let t=this.$(this.Y,e);return new o(t,this.h,this)}reverseUpperBound(e){let t=this.rr(this.Y,e);return new o(t,this.h,this)}setElement(e,t,r){return this.M(e,t,r)}find(e){let t=this.I(this.Y,e);return new o(t,this.h,this)}getElementByKey(e){return this.I(this.Y,e).l}union(e){let t=this;return e.forEach((function(e){t.setElement(e[0],e[1])})),this.i}[Symbol.iterator](){return this.K(this.Y)}};e.default=s})),Os=Bt((e=>{Lt(),Rn(),dn(),Object.defineProperty(e,"t",{value:!0}),e.default=function(e){let t=typeof e;return"object"===t&&null!==e||"function"===t}})),Cs=Bt((e=>{Lt(),Rn(),dn(),Object.defineProperty(e,"t",{value:!0}),e.HashContainerIterator=e.HashContainer=void 0;var t,r=ds(),n=(t=Os())&&t.t?t:{default:t},i=bs(),o=class extends r.ContainerIterator{constructor(e,t,r){super(r),this.o=e,this.h=t,0===this.iteratorType?(this.pre=function(){return this.o.L===this.h&&(0,i.throwIteratorAccessError)(),this.o=this.o.L,this},this.next=function(){return this.o===this.h&&(0,i.throwIteratorAccessError)(),this.o=this.o.B,this}):(this.pre=function(){return this.o.B===this.h&&(0,i.throwIteratorAccessError)(),this.o=this.o.B,this},this.next=function(){return this.o===this.h&&(0,i.throwIteratorAccessError)(),this.o=this.o.L,this})}};e.HashContainerIterator=o;var s=class extends r.Container{constructor(){super(),this.H=[],this.g={},this.HASH_TAG=Symbol("@@HASH_TAG"),Object.setPrototypeOf(this.g,null),this.h={},this.h.L=this.h.B=this.p=this._=this.h}V(e){let{L:t,B:r}=e;t.B=r,r.L=t,e===this.p&&(this.p=r),e===this._&&(this._=t),this.i-=1}M(e,t,r){let i;if(void 0===r&&(r=(0,n.default)(e)),r){let r=e[this.HASH_TAG];if(void 0!==r)return this.H[r].l=t,this.i;Object.defineProperty(e,this.HASH_TAG,{value:this.H.length,configurable:!0}),i={u:e,l:t,L:this._,B:this.h},this.H.push(i)}else{let r=this.g[e];if(r)return r.l=t,this.i;i={u:e,l:t,L:this._,B:this.h},this.g[e]=i}return 0===this.i?(this.p=i,this.h.B=i):this._.B=i,this._=i,this.h.L=i,++this.i}I(e,t){if(void 0===t&&(t=(0,n.default)(e)),t){let t=e[this.HASH_TAG];return void 0===t?this.h:this.H[t]}return this.g[e]||this.h}clear(){let e=this.HASH_TAG;this.H.forEach((function(t){delete t.u[e]})),this.H=[],this.g={},Object.setPrototypeOf(this.g,null),this.i=0,this.p=this._=this.h.L=this.h.B=this.h}eraseElementByKey(e,t){let r;if(void 0===t&&(t=(0,n.default)(e)),t){let t=e[this.HASH_TAG];if(void 0===t)return!1;delete e[this.HASH_TAG],r=this.H[t],delete this.H[t]}else{if(r=this.g[e],void 0===r)return!1;delete this.g[e]}return this.V(r),!0}eraseElementByIterator(e){let t=e.o;return t===this.h&&(0,i.throwIteratorAccessError)(),this.V(t),e.next()}eraseElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let t=this.p;for(;e--;)t=t.B;return this.V(t),this.i}};e.HashContainer=s})),ks=Bt((e=>{Lt(),Rn(),dn(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var t=Cs(),r=bs(),n=class e extends t.HashContainerIterator{constructor(e,t,r,n){super(e,t,n),this.container=r}get pointer(){return this.o===this.h&&(0,r.throwIteratorAccessError)(),this.o.u}copy(){return new e(this.o,this.h,this.container,this.iteratorType)}},i=class extends t.HashContainer{constructor(e=[]){super();let t=this;e.forEach((function(e){t.insert(e)}))}begin(){return new n(this.p,this.h,this)}end(){return new n(this.h,this.h,this)}rBegin(){return new n(this._,this.h,this,1)}rEnd(){return new n(this.h,this.h,this,1)}front(){return this.p.u}back(){return this._.u}insert(e,t){return this.M(e,void 0,t)}getElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let t=this.p;for(;e--;)t=t.B;return t.u}find(e,t){let r=this.I(e,t);return new n(r,this.h,this)}forEach(e){let t=0,r=this.p;for(;r!==this.h;)e(r.u,t++,this),r=r.B}[Symbol.iterator](){return function*(){let e=this.p;for(;e!==this.h;)yield e.u,e=e.B}.bind(this)()}};e.default=i})),Ps=Bt((e=>{Lt(),Rn(),dn(),Object.defineProperty(e,"t",{value:!0}),e.default=void 0;var t,r=Cs(),n=(t=Os())&&t.t?t:{default:t},i=bs(),o=class e extends r.HashContainerIterator{constructor(e,t,r,n){super(e,t,n),this.container=r}get pointer(){this.o===this.h&&(0,i.throwIteratorAccessError)();let e=this;return new Proxy([],{get:(t,r)=>"0"===r?e.o.u:"1"===r?e.o.l:void 0,set(t,r,n){if("1"!==r)throw new TypeError("props must be 1");return e.o.l=n,!0}})}copy(){return new e(this.o,this.h,this.container,this.iteratorType)}},s=class extends r.HashContainer{constructor(e=[]){super();let t=this;e.forEach((function(e){t.setElement(e[0],e[1])}))}begin(){return new o(this.p,this.h,this)}end(){return new o(this.h,this.h,this)}rBegin(){return new o(this._,this.h,this,1)}rEnd(){return new o(this.h,this.h,this,1)}front(){if(0!==this.i)return[this.p.u,this.p.l]}back(){if(0!==this.i)return[this._.u,this._.l]}setElement(e,t,r){return this.M(e,t,r)}getElementByKey(e,t){if(void 0===t&&(t=(0,n.default)(e)),t){let t=e[this.HASH_TAG];return void 0!==t?this.H[t].l:void 0}let r=this.g[e];return r?r.l:void 0}getElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let t=this.p;for(;e--;)t=t.B;return[t.u,t.l]}find(e,t){let r=this.I(e,t);return new o(r,this.h,this)}forEach(e){let t=0,r=this.p;for(;r!==this.h;)e([r.u,r.l],t++,this),r=r.B}[Symbol.iterator](){return function*(){let e=this.p;for(;e!==this.h;)yield[e.u,e.l],e=e.B}.bind(this)()}};e.default=s})),Bs=Bt((e=>{Lt(),Rn(),dn(),Object.defineProperty(e,"t",{value:!0}),Object.defineProperty(e,"Deque",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(e,"HashMap",{enumerable:!0,get:function(){return h.default}}),Object.defineProperty(e,"HashSet",{enumerable:!0,get:function(){return u.default}}),Object.defineProperty(e,"LinkList",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(e,"OrderedMap",{enumerable:!0,get:function(){return l.default}}),Object.defineProperty(e,"OrderedSet",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(e,"PriorityQueue",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(e,"Queue",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(e,"Stack",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"Vector",{enumerable:!0,get:function(){return i.default}});var t=c(ps()),r=c(gs()),n=c(ys()),i=c(vs()),o=c(_s()),s=c(Es()),a=c(Is()),l=c(Rs()),u=c(ks()),h=c(Ps());function c(e){return e&&e.t?e:{default:e}}})),xs=Bt(((e,t)=>{Lt(),Rn(),dn();var r=Bs().OrderedSet,n=Go()("number-allocator:trace"),i=Go()("number-allocator:error");function o(e,t){this.low=e,this.high=t}function s(e,t){if(!(this instanceof s))return new s(e,t);this.min=e,this.max=t,this.ss=new r([],((e,t)=>e.compare(t))),n("Create"),this.clear()}o.prototype.equals=function(e){return this.low===e.low&&this.high===e.high},o.prototype.compare=function(e){return this.lowe||(i===e?(this.ss.updateKeyByIterator(r,new o(i+1,s)),n("use():"+e),0):s===e?(this.ss.updateKeyByIterator(r,new o(i,s-1)),n("use():"+e),0):(this.ss.updateKeyByIterator(r,new o(e+1,s)),this.ss.insert(new o(i,e-1)),n("use():"+e),0)))}return n("use():failed"),!1},s.prototype.free=function(e){if(ethis.max)return void i("free():"+e+" is out of range");let t=new o(e,e),r=this.ss.upperBound(t);if(r.equals(this.ss.end())){if(r.equals(this.ss.begin()))return void this.ss.insert(t);r.pre();let n=r.pointer.high;r.pointer.high+1===e?this.ss.updateKeyByIterator(r,new o(n,e)):this.ss.insert(t)}else if(r.equals(this.ss.begin()))if(e+1===r.pointer.low){let t=r.pointer.high;this.ss.updateKeyByIterator(r,new o(e,t))}else this.ss.insert(t);else{let n=r.pointer.low,i=r.pointer.high;r.pre();let s=r.pointer.low;r.pointer.high+1===e?e+1===n?(this.ss.eraseElementByIterator(r),this.ss.updateKeyByIterator(r,new o(s,i))):this.ss.updateKeyByIterator(r,new o(s,e)):e+1===n?(this.ss.eraseElementByIterator(r.next()),this.ss.insert(new o(e,i))):this.ss.insert(t)}n("free():"+e)},s.prototype.clear=function(){n("clear()"),this.ss.clear(),this.ss.insert(new o(this.min,this.max))},s.prototype.intervalCount=function(){return this.ss.size()},s.prototype.dump=function(){console.log("length:"+this.ss.size());for(let e of this.ss)console.log(e)},t.exports=s})),Us=Bt(((e,t)=>{Lt(),Rn(),dn();var r=xs();t.exports.NumberAllocator=r})),Ls=Bt((e=>{Lt(),Rn(),dn(),Object.defineProperty(e,"__esModule",{value:!0});var t=fs(),r=Us();e.default=class{constructor(e){e>0&&(this.aliasToTopic=new t.LRUCache({max:e}),this.topicToAlias={},this.numberAllocator=new r.NumberAllocator(1,e),this.max=e,this.length=0)}put(e,t){if(0===t||t>this.max)return!1;let r=this.aliasToTopic.get(t);return r&&delete this.topicToAlias[r],this.aliasToTopic.set(t,e),this.topicToAlias[e]=t,this.numberAllocator.use(t),this.length=this.aliasToTopic.size,!0}getTopicByAlias(e){return this.aliasToTopic.get(e)}getAliasByTopic(e){let t=this.topicToAlias[e];return typeof t<"u"&&this.aliasToTopic.get(t),t}clear(){this.aliasToTopic.clear(),this.topicToAlias={},this.numberAllocator.clear(),this.length=0}getLruAlias(){return this.numberAllocator.firstVacant()||[...this.aliasToTopic.keys()][this.aliasToTopic.size-1]}}})),Ms=Bt((e=>{Lt(),Rn(),dn();var t=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0});var r=hs(),n=t(Ls()),i=us();e.default=(e,t)=>{e.log("_handleConnack");let{options:o}=e,s=5===o.protocolVersion?t.reasonCode:t.returnCode;if(clearTimeout(e.connackTimer),delete e.topicAliasSend,t.properties){if(t.properties.topicAliasMaximum){if(t.properties.topicAliasMaximum>65535)return void e.emit("error",new Error("topicAliasMaximum from broker is out of range"));t.properties.topicAliasMaximum>0&&(e.topicAliasSend=new n.default(t.properties.topicAliasMaximum))}t.properties.serverKeepAlive&&o.keepalive&&(o.keepalive=t.properties.serverKeepAlive),t.properties.maximumPacketSize&&(o.properties||(o.properties={}),o.properties.maximumPacketSize=t.properties.maximumPacketSize)}if(0===s)e.reconnecting=!1,e._onConnect(t);else if(s>0){let t=new i.ErrorWithReasonCode(`Connection refused: ${r.ReasonCodes[s]}`,s);e.emit("error",t)}}})),Ns=Bt((e=>{Lt(),Rn(),dn(),Object.defineProperty(e,"__esModule",{value:!0}),e.default=(e,t,r)=>{e.log("handling pubrel packet");let n=typeof r<"u"?r:e.noop,{messageId:i}=t,o={cmd:"pubcomp",messageId:i};e.incomingStore.get(t,((t,r)=>{t?e._sendPacket(o,n):(e.emit("message",r.topic,r.payload,r),e.handleMessage(r,(t=>{if(t)return n(t);e.incomingStore.del(r,e.noop),e._sendPacket(o,n)})))}))}})),js=Bt((e=>{Lt(),Rn(),dn();var t=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0});var r=t(as()),n=t(cs()),i=t(Ms()),o=t(hs()),s=t(Ns());e.default=(e,t,a)=>{let{options:l}=e;if(5===l.protocolVersion&&l.properties&&l.properties.maximumPacketSize&&l.properties.maximumPacketSize{Lt(),Rn(),dn();var t=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0}),e.TypedEventEmitter=void 0;var r=t((li(),Ut(ti))),n=us(),i=class{};e.TypedEventEmitter=i,(0,n.applyMixin)(i,r.default)})),Fs=Bt((e=>{Lt(),Rn(),dn(),Object.defineProperty(e,"__esModule",{value:!0}),e.isReactNativeBrowser=e.isWebWorker=void 0;var t,r=()=>{var e,t;return!("object"!=typeof self||null===(t=null===(e=self?.constructor)||void 0===e?void 0:e.name)||void 0===t||!t.includes("WorkerGlobalScope"))},n=()=>typeof navigator<"u"&&"ReactNative"===navigator.product,i=typeof window<"u"&&(typeof navigator<"u"&&(null===(t=navigator.userAgent)||void 0===t?void 0:t.toLowerCase().indexOf(" electron/"))>-1&&null!=Mt&&Mt.versions?!Object.prototype.hasOwnProperty.call(Mt.versions,"electron"):typeof window.document<"u")||r()||n();e.isWebWorker=r(),e.isReactNativeBrowser=n(),e.default=i})),Ws=Bt(((e,t)=>{var n,i;Lt(),Rn(),dn(),n=e,i=function(e){var t,r=void 0===Number.MAX_SAFE_INTEGER?9007199254740991:Number.MAX_SAFE_INTEGER,n=536870912,i=2*n,o=new WeakMap,s=function(e,t){return function(o){var s=t.get(o),a=void 0===s?o.size:sr)throw new Error("Congratulations, you created a collection of unique numbers which uses all available integers!");for(;o.has(a);)a=Math.floor(Math.random()*r);return e(o,a)}}((t=o,function(e,r){return t.set(e,r),r}),o),a=function(e){return function(t){var r=e(t);return t.add(r),r}}(s);e.addUniqueNumber=a,e.generateUniqueNumber=s},"object"==typeof e&&typeof t<"u"?i(e):"function"==typeof define&&r.amdO?define(["exports"],i):i((n=typeof globalThis<"u"?globalThis:n||self).fastUniqueNumbers={})})),qs=Bt(((e,t)=>{var n,i;Lt(),Rn(),dn(),n=e,i=function(e,t){e.load=function(e){var r=new Map([[0,function(){}]]),n=new Map([[0,function(){}]]),i=new Map,o=new Worker(e);return o.addEventListener("message",(function(e){var t=e.data;if(function(e){return void 0!==e.method&&"call"===e.method}(t)){var o=t.params,s=o.timerId,a=o.timerType;if("interval"===a){var l=r.get(s);if("number"==typeof l){var u=i.get(l);if(void 0===u||u.timerId!==s||u.timerType!==a)throw new Error("The timer is in an undefined state.")}else{if(!(typeof l<"u"))throw new Error("The timer is in an undefined state.");l()}}else if("timeout"===a){var h=n.get(s);if("number"==typeof h){var c=i.get(h);if(void 0===c||c.timerId!==s||c.timerType!==a)throw new Error("The timer is in an undefined state.")}else{if(!(typeof h<"u"))throw new Error("The timer is in an undefined state.");h(),n.delete(s)}}}else{if(!function(e){return null===e.error&&"number"==typeof e.id}(t)){var f=t.error.message;throw new Error(f)}var d=t.id,p=i.get(d);if(void 0===p)throw new Error("The timer is in an undefined state.");var g=p.timerId,y=p.timerType;i.delete(d),"interval"===y?r.delete(g):n.delete(g)}})),{clearInterval:function(e){var n=t.generateUniqueNumber(i);i.set(n,{timerId:e,timerType:"interval"}),r.set(e,n),o.postMessage({id:n,method:"clear",params:{timerId:e,timerType:"interval"}})},clearTimeout:function(e){var r=t.generateUniqueNumber(i);i.set(r,{timerId:e,timerType:"timeout"}),n.set(e,r),o.postMessage({id:r,method:"clear",params:{timerId:e,timerType:"timeout"}})},setInterval:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=t.generateUniqueNumber(r);return r.set(i,(function(){e(),"function"==typeof r.get(i)&&o.postMessage({id:null,method:"set",params:{delay:n,now:performance.now(),timerId:i,timerType:"interval"}})})),o.postMessage({id:null,method:"set",params:{delay:n,now:performance.now(),timerId:i,timerType:"interval"}}),i},setTimeout:function(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=t.generateUniqueNumber(n);return n.set(i,e),o.postMessage({id:null,method:"set",params:{delay:r,now:performance.now(),timerId:i,timerType:"timeout"}}),i}}}},"object"==typeof e&&typeof t<"u"?i(e,Ws()):"function"==typeof define&&r.amdO?define(["exports","fast-unique-numbers"],i):i((n=typeof globalThis<"u"?globalThis:n||self).workerTimersBroker={},n.fastUniqueNumbers)})),$s=Bt(((e,t)=>{var n,i;Lt(),Rn(),dn(),n=e,i=function(e,t){var r,n,i=(r=t.load,n=null,function(){if(null!==n)return n;var e=new Blob(['(()=>{var e={472:(e,t,r)=>{var o,i;void 0===(i="function"==typeof(o=function(){"use strict";var e=new Map,t=new Map,r=function(t){var r=e.get(t);if(void 0===r)throw new Error(\'There is no interval scheduled with the given id "\'.concat(t,\'".\'));clearTimeout(r),e.delete(t)},o=function(e){var r=t.get(e);if(void 0===r)throw new Error(\'There is no timeout scheduled with the given id "\'.concat(e,\'".\'));clearTimeout(r),t.delete(e)},i=function(e,t){var r,o=performance.now();return{expected:o+(r=e-Math.max(0,o-t)),remainingDelay:r}},n=function e(t,r,o,i){var n=performance.now();n>o?postMessage({id:null,method:"call",params:{timerId:r,timerType:i}}):t.set(r,setTimeout(e,o-n,t,r,o,i))},a=function(t,r,o){var a=i(t,o),s=a.expected,d=a.remainingDelay;e.set(r,setTimeout(n,d,e,r,s,"interval"))},s=function(e,r,o){var a=i(e,o),s=a.expected,d=a.remainingDelay;t.set(r,setTimeout(n,d,t,r,s,"timeout"))};addEventListener("message",(function(e){var t=e.data;try{if("clear"===t.method){var i=t.id,n=t.params,d=n.timerId,c=n.timerType;if("interval"===c)r(d),postMessage({error:null,id:i});else{if("timeout"!==c)throw new Error(\'The given type "\'.concat(c,\'" is not supported\'));o(d),postMessage({error:null,id:i})}}else{if("set"!==t.method)throw new Error(\'The given method "\'.concat(t.method,\'" is not supported\'));var u=t.params,l=u.delay,p=u.now,m=u.timerId,v=u.timerType;if("interval"===v)a(l,m,p);else{if("timeout"!==v)throw new Error(\'The given type "\'.concat(v,\'" is not supported\'));s(l,m,p)}}}catch(e){postMessage({error:{message:e.message},id:t.id,result:null})}}))})?o.call(t,r,t,e):o)||(e.exports=i)}},t={};function r(o){var i=t[o];if(void 0!==i)return i.exports;var n=t[o]={exports:{}};return e[o](n,n.exports,r),n.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var o in t)r.o(t,o)&&!r.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{"use strict";r(472)})()})();'],{type:"application/javascript; charset=utf-8"}),t=URL.createObjectURL(e);return n=r(t),setTimeout((function(){return URL.revokeObjectURL(t)})),n});e.clearInterval=function(e){return i().clearInterval(e)},e.clearTimeout=function(e){return i().clearTimeout(e)},e.setInterval=function(){var e;return(e=i()).setInterval.apply(e,arguments)},e.setTimeout=function(){var e;return(e=i()).setTimeout.apply(e,arguments)}},"object"==typeof e&&typeof t<"u"?i(e,qs()):"function"==typeof define&&r.amdO?define(["exports","worker-timers-broker"],i):i((n=typeof globalThis<"u"?globalThis:n||self).workerTimers={},n.workerTimersBroker)})),Hs=Bt((e=>{Lt(),Rn(),dn();var t=e&&e.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),r=e&&e.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=e&&e.__importStar||function(e){if(e&&e.__esModule)return e;var n={};if(null!=e)for(var i in e)"default"!==i&&Object.prototype.hasOwnProperty.call(e,i)&&t(n,e,i);return r(n,e),n};Object.defineProperty(e,"__esModule",{value:!0});var i=n(Fs()),o=$s(),s={set:o.setInterval,clear:o.clearInterval},a={set:(e,t)=>setInterval(e,t),clear:e=>clearInterval(e)};e.default=e=>{switch(e){case"native":return a;case"worker":return s;default:return!i.default||i.isWebWorker||i.isReactNativeBrowser?a:s}}})),Vs=Bt((e=>{Lt(),Rn(),dn();var t=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0});var r=t(Hs());e.default=class{get keepaliveTimeoutTimestamp(){return this._keepaliveTimeoutTimestamp}get intervalEvery(){return this._intervalEvery}get keepalive(){return this._keepalive}constructor(e,t){this.destroyed=!1,this.client=e,this.timer="object"==typeof t&&"set"in t&&"clear"in t?t:(0,r.default)(t),this.setKeepalive(e.options.keepalive)}clear(){this.timerId&&(this.timer.clear(this.timerId),this.timerId=null)}setKeepalive(e){if(e*=1e3,isNaN(e)||e<=0||e>2147483647)throw new Error(`Keepalive value must be an integer between 0 and 2147483647. Provided value is ${e}`);this._keepalive=e,this.reschedule(),this.client.log(`KeepaliveManager: set keepalive to ${e}ms`)}destroy(){this.clear(),this.destroyed=!0}reschedule(){if(this.destroyed)return;this.clear(),this.counter=0;let e=Math.ceil(1.5*this._keepalive);this._keepaliveTimeoutTimestamp=Date.now()+e,this._intervalEvery=Math.ceil(this._keepalive/2),this.timerId=this.timer.set((()=>{this.destroyed||(this.counter+=1,2===this.counter?this.client.sendPing():this.counter>2&&this.client.onKeepaliveTimeout())}),this._intervalEvery)}}})),zs=Bt((e=>{Lt(),Rn(),dn();var t=e&&e.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),r=e&&e.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=e&&e.__importStar||function(e){if(e&&e.__esModule)return e;var n={};if(null!=e)for(var i in e)"default"!==i&&Object.prototype.hasOwnProperty.call(e,i)&&t(n,e,i);return r(n,e),n},i=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0});var o=i(On()),s=i(ts()),a=i(rs()),l=Wo(),u=i(is()),h=n(os()),c=i(Go()),f=i(ss()),d=i(js()),p=us(),g=Ds(),y=i(Vs()),m=n(Fs()),b=globalThis.setImmediate||((...e)=>{let t=e.shift();(0,p.nextTick)((()=>{t(...e)}))}),w={keepalive:60,reschedulePings:!0,protocolId:"MQTT",protocolVersion:4,reconnectPeriod:1e3,connectTimeout:3e4,clean:!0,resubscribe:!0,writeCache:!0,timerVariant:"auto"},v=class e extends g.TypedEventEmitter{static defaultId(){return`mqttjs_${Math.random().toString(16).substr(2,8)}`}constructor(t,r){super(),this.options=r||{};for(let e in w)typeof this.options[e]>"u"?this.options[e]=w[e]:this.options[e]=r[e];this.log=this.options.log||(0,c.default)("mqttjs:client"),this.noop=this._noop.bind(this),this.log("MqttClient :: version:",e.VERSION),m.isWebWorker?this.log("MqttClient :: environment","webworker"):this.log("MqttClient :: environment",m.default?"browser":"node"),this.log("MqttClient :: options.protocol",r.protocol),this.log("MqttClient :: options.protocolVersion",r.protocolVersion),this.log("MqttClient :: options.username",r.username),this.log("MqttClient :: options.keepalive",r.keepalive),this.log("MqttClient :: options.reconnectPeriod",r.reconnectPeriod),this.log("MqttClient :: options.rejectUnauthorized",r.rejectUnauthorized),this.log("MqttClient :: options.properties.topicAliasMaximum",r.properties?r.properties.topicAliasMaximum:void 0),this.options.clientId="string"==typeof r.clientId?r.clientId:e.defaultId(),this.log("MqttClient :: clientId",this.options.clientId),this.options.customHandleAcks=5===r.protocolVersion&&r.customHandleAcks?r.customHandleAcks:(...e)=>{e[3](null,0)},this.options.writeCache||(s.default.writeToStream.cacheNumbers=!1),this.streamBuilder=t,this.messageIdProvider=typeof this.options.messageIdProvider>"u"?new a.default:this.options.messageIdProvider,this.outgoingStore=r.outgoingStore||new f.default,this.incomingStore=r.incomingStore||new f.default,this.queueQoSZero=void 0===r.queueQoSZero||r.queueQoSZero,this._resubscribeTopics={},this.messageIdToTopic={},this.keepaliveManager=null,this.connected=!1,this.disconnecting=!1,this.reconnecting=!1,this.queue=[],this.connackTimer=null,this.reconnectTimer=null,this._storeProcessing=!1,this._packetIdsDuringStoreProcessing={},this._storeProcessingQueue=[],this.outgoing={},this._firstConnection=!0,r.properties&&r.properties.topicAliasMaximum>0&&(r.properties.topicAliasMaximum>65535?this.log("MqttClient :: options.properties.topicAliasMaximum is out of range"):this.topicAliasRecv=new o.default(r.properties.topicAliasMaximum)),this.on("connect",(()=>{let{queue:e}=this,t=()=>{let r=e.shift();this.log("deliver :: entry %o",r);let n=null;if(!r)return void this._resubscribe();n=r.packet,this.log("deliver :: call _sendPacket for %o",n);let i=!0;n.messageId&&0!==n.messageId&&(this.messageIdProvider.register(n.messageId)||(i=!1)),i?this._sendPacket(n,(e=>{r.cb&&r.cb(e),t()})):(this.log("messageId: %d has already used. The message is skipped and removed.",n.messageId),t())};this.log("connect :: sending queued packets"),t()})),this.on("close",(()=>{this.log("close :: connected set to `false`"),this.connected=!1,this.log("close :: clearing connackTimer"),clearTimeout(this.connackTimer),this._destroyKeepaliveManager(),this.topicAliasRecv&&this.topicAliasRecv.clear(),this.log("close :: calling _setupReconnect"),this._setupReconnect()})),this.options.manualConnect||(this.log("MqttClient :: setting up stream"),this.connect())}handleAuth(e,t){t()}handleMessage(e,t){t()}_nextId(){return this.messageIdProvider.allocate()}getLastMessageId(){return this.messageIdProvider.getLastAllocated()}connect(){var e;let t=new l.Writable,r=s.default.parser(this.options),n=null,i=[];this.log("connect :: calling method to clear reconnect"),this._clearReconnect(),this.disconnected&&!this.reconnecting&&(this.incomingStore=this.options.incomingStore||new f.default,this.outgoingStore=this.options.outgoingStore||new f.default,this.disconnecting=!1,this.disconnected=!1),this.log("connect :: using streamBuilder provided to client to create stream"),this.stream=this.streamBuilder(this),r.on("packet",(e=>{this.log("parser :: on packet push to packets array."),i.push(e)}));let o=()=>{this.log("work :: getting next packet in queue");let e=i.shift();if(e)this.log("work :: packet pulled from queue"),(0,d.default)(this,e,a);else{this.log("work :: no packets in queue");let e=n;n=null,this.log("work :: done flag is %s",!!e),e&&e()}},a=()=>{if(i.length)(0,p.nextTick)(o);else{let e=n;n=null,e()}};t._write=(e,t,i)=>{n=i,this.log("writable stream :: parsing buffer"),r.parse(e),o()},this.log("connect :: pipe stream to writable stream"),this.stream.pipe(t),this.stream.on("error",(e=>{this.log("streamErrorHandler :: error",e.message),e.code?(this.log("streamErrorHandler :: emitting error"),this.emit("error",e)):this.noop(e)})),this.stream.on("close",(()=>{this.log("(%s)stream :: on close",this.options.clientId),this._flushVolatile(),this.log("stream: emit close to MqttClient"),this.emit("close")})),this.log("connect: sending packet `connect`");let u={cmd:"connect",protocolId:this.options.protocolId,protocolVersion:this.options.protocolVersion,clean:this.options.clean,clientId:this.options.clientId,keepalive:this.options.keepalive,username:this.options.username,password:this.options.password,properties:this.options.properties};if(this.options.will&&(u.will=Object.assign(Object.assign({},this.options.will),{payload:null===(e=this.options.will)||void 0===e?void 0:e.payload})),this.topicAliasRecv&&(u.properties||(u.properties={}),this.topicAliasRecv&&(u.properties.topicAliasMaximum=this.topicAliasRecv.max)),this._writePacket(u),r.on("error",this.emit.bind(this,"error")),this.options.properties){if(!this.options.properties.authenticationMethod&&this.options.properties.authenticationData)return this.end((()=>this.emit("error",new Error("Packet has no Authentication Method")))),this;if(this.options.properties.authenticationMethod&&this.options.authPacket&&"object"==typeof this.options.authPacket){let e=Object.assign({cmd:"auth",reasonCode:0},this.options.authPacket);this._writePacket(e)}}return this.stream.setMaxListeners(1e3),clearTimeout(this.connackTimer),this.connackTimer=setTimeout((()=>{this.log("!!connectTimeout hit!! Calling _cleanUp with force `true`"),this.emit("error",new Error("connack timeout")),this._cleanUp(!0)}),this.options.connectTimeout),this}publish(e,t,r,n){this.log("publish :: message `%s` to topic `%s`",t,e);let{options:i}=this;"function"==typeof r&&(n=r,r=null),r=r||{},r=Object.assign(Object.assign({},{qos:0,retain:!1,dup:!1}),r);let{qos:o,retain:s,dup:a,properties:l,cbStorePut:u}=r;if(this._checkDisconnecting(n))return this;let h=()=>{let r=0;if((1===o||2===o)&&(r=this._nextId(),null===r))return this.log("No messageId left"),!1;let h={cmd:"publish",topic:e,payload:t,qos:o,retain:s,messageId:r,dup:a};switch(5===i.protocolVersion&&(h.properties=l),this.log("publish :: qos",o),o){case 1:case 2:this.outgoing[h.messageId]={volatile:!1,cb:n||this.noop},this.log("MqttClient:publish: packet cmd: %s",h.cmd),this._sendPacket(h,void 0,u);break;default:this.log("MqttClient:publish: packet cmd: %s",h.cmd),this._sendPacket(h,n,u)}return!0};return(this._storeProcessing||this._storeProcessingQueue.length>0||!h())&&this._storeProcessingQueue.push({invoke:h,cbStorePut:r.cbStorePut,callback:n}),this}publishAsync(e,t,r){return new Promise(((n,i)=>{this.publish(e,t,r,((e,t)=>{e?i(e):n(t)}))}))}subscribe(e,t,r){let n=this.options.protocolVersion;"function"==typeof t&&(r=t),r=r||this.noop;let i=!1,o=[];"string"==typeof e?o=e=[e]:Array.isArray(e)?o=e:"object"==typeof e&&(i=e.resubscribe,delete e.resubscribe,o=Object.keys(e));let s=h.validateTopics(o);if(null!==s)return b(r,new Error(`Invalid topic ${s}`)),this;if(this._checkDisconnecting(r))return this.log("subscribe: discconecting true"),this;let a={qos:0};5===n&&(a.nl=!1,a.rap=!1,a.rh=0);let l=(t=Object.assign(Object.assign({},a),t)).properties,u=[],c=(e,r)=>{if(r=r||t,!Object.prototype.hasOwnProperty.call(this._resubscribeTopics,e)||this._resubscribeTopics[e].qos{this.log("subscribe: array topic %s",e),c(e)})):Object.keys(e).forEach((t=>{this.log("subscribe: object topic %s, %o",t,e[t]),c(t,e[t])})),!u.length)return r(null,[]),this;let f=()=>{let e=this._nextId();if(null===e)return this.log("No messageId left"),!1;let t={cmd:"subscribe",subscriptions:u,messageId:e};if(l&&(t.properties=l),this.options.resubscribe){this.log("subscribe :: resubscribe true");let e=[];u.forEach((t=>{if(this.options.reconnectPeriod>0){let r={qos:t.qos};5===n&&(r.nl=t.nl||!1,r.rap=t.rap||!1,r.rh=t.rh||0,r.properties=t.properties),this._resubscribeTopics[t.topic]=r,e.push(t.topic)}})),this.messageIdToTopic[t.messageId]=e}return this.outgoing[t.messageId]={volatile:!0,cb(e,t){if(!e){let{granted:e}=t;for(let t=0;t0||!f())&&this._storeProcessingQueue.push({invoke:f,callback:r}),this}subscribeAsync(e,t){return new Promise(((r,n)=>{this.subscribe(e,t,((e,t)=>{e?n(e):r(t)}))}))}unsubscribe(e,t,r){"string"==typeof e&&(e=[e]),"function"==typeof t&&(r=t),r=r||this.noop;let n=h.validateTopics(e);if(null!==n)return b(r,new Error(`Invalid topic ${n}`)),this;if(this._checkDisconnecting(r))return this;let i=()=>{let n=this._nextId();if(null===n)return this.log("No messageId left"),!1;let i={cmd:"unsubscribe",messageId:n,unsubscriptions:[]};return"string"==typeof e?i.unsubscriptions=[e]:Array.isArray(e)&&(i.unsubscriptions=e),this.options.resubscribe&&i.unsubscriptions.forEach((e=>{delete this._resubscribeTopics[e]})),"object"==typeof t&&t.properties&&(i.properties=t.properties),this.outgoing[i.messageId]={volatile:!0,cb:r},this.log("unsubscribe: call _sendPacket"),this._sendPacket(i),!0};return(this._storeProcessing||this._storeProcessingQueue.length>0||!i())&&this._storeProcessingQueue.push({invoke:i,callback:r}),this}unsubscribeAsync(e,t){return new Promise(((r,n)=>{this.unsubscribe(e,t,((e,t)=>{e?n(e):r(t)}))}))}end(e,t,r){this.log("end :: (%s)",this.options.clientId),(null==e||"boolean"!=typeof e)&&(r=r||t,t=e,e=!1),"object"!=typeof t&&(r=r||t,t=null),this.log("end :: cb? %s",!!r),(!r||"function"!=typeof r)&&(r=this.noop);let n=()=>{this.log("end :: closeStores: closing incoming and outgoing stores"),this.disconnected=!0,this.incomingStore.close((e=>{this.outgoingStore.close((t=>{if(this.log("end :: closeStores: emitting end"),this.emit("end"),r){let n=e||t;this.log("end :: closeStores: invoking callback with args"),r(n)}}))})),this._deferredReconnect?this._deferredReconnect():(0===this.options.reconnectPeriod||this.options.manualConnect)&&(this.disconnecting=!1)},i=()=>{this.log("end :: (%s) :: finish :: calling _cleanUp with force %s",this.options.clientId,e),this._cleanUp(e,(()=>{this.log("end :: finish :: calling process.nextTick on closeStores"),(0,p.nextTick)(n)}),t)};return this.disconnecting?(r(),this):(this._clearReconnect(),this.disconnecting=!0,!e&&Object.keys(this.outgoing).length>0?(this.log("end :: (%s) :: calling finish in 10ms once outgoing is empty",this.options.clientId),this.once("outgoingEmpty",setTimeout.bind(null,i,10))):(this.log("end :: (%s) :: immediately calling finish",this.options.clientId),i()),this)}endAsync(e,t){return new Promise(((r,n)=>{this.end(e,t,(e=>{e?n(e):r()}))}))}removeOutgoingMessage(e){if(this.outgoing[e]){let{cb:t}=this.outgoing[e];this._removeOutgoingAndStoreMessage(e,(()=>{t(new Error("Message removed"))}))}return this}reconnect(e){this.log("client reconnect");let t=()=>{e?(this.options.incomingStore=e.incomingStore,this.options.outgoingStore=e.outgoingStore):(this.options.incomingStore=null,this.options.outgoingStore=null),this.incomingStore=this.options.incomingStore||new f.default,this.outgoingStore=this.options.outgoingStore||new f.default,this.disconnecting=!1,this.disconnected=!1,this._deferredReconnect=null,this._reconnect()};return this.disconnecting&&!this.disconnected?this._deferredReconnect=t:t(),this}_flushVolatile(){this.outgoing&&(this.log("_flushVolatile :: deleting volatile messages from the queue and setting their callbacks as error function"),Object.keys(this.outgoing).forEach((e=>{this.outgoing[e].volatile&&"function"==typeof this.outgoing[e].cb&&(this.outgoing[e].cb(new Error("Connection closed")),delete this.outgoing[e])})))}_flush(){this.outgoing&&(this.log("_flush: queue exists? %b",!!this.outgoing),Object.keys(this.outgoing).forEach((e=>{"function"==typeof this.outgoing[e].cb&&(this.outgoing[e].cb(new Error("Connection closed")),delete this.outgoing[e])})))}_removeTopicAliasAndRecoverTopicName(e){let t;e.properties&&(t=e.properties.topicAlias);let r=e.topic.toString();if(this.log("_removeTopicAliasAndRecoverTopicName :: alias %d, topic %o",t,r),0===r.length){if(typeof t>"u")return new Error("Unregistered Topic Alias");if(r=this.topicAliasSend.getTopicByAlias(t),typeof r>"u")return new Error("Unregistered Topic Alias");e.topic=r}t&&delete e.properties.topicAlias}_checkDisconnecting(e){return this.disconnecting&&(e&&e!==this.noop?e(new Error("client disconnecting")):this.emit("error",new Error("client disconnecting"))),this.disconnecting}_reconnect(){this.log("_reconnect: emitting reconnect to client"),this.emit("reconnect"),this.connected?(this.end((()=>{this.connect()})),this.log("client already connected. disconnecting first.")):(this.log("_reconnect: calling connect"),this.connect())}_setupReconnect(){!this.disconnecting&&!this.reconnectTimer&&this.options.reconnectPeriod>0?(this.reconnecting||(this.log("_setupReconnect :: emit `offline` state"),this.emit("offline"),this.log("_setupReconnect :: set `reconnecting` to `true`"),this.reconnecting=!0),this.log("_setupReconnect :: setting reconnectTimer for %d ms",this.options.reconnectPeriod),this.reconnectTimer=setInterval((()=>{this.log("reconnectTimer :: reconnect triggered!"),this._reconnect()}),this.options.reconnectPeriod)):this.log("_setupReconnect :: doing nothing...")}_clearReconnect(){this.log("_clearReconnect : clearing reconnect timer"),this.reconnectTimer&&(clearInterval(this.reconnectTimer),this.reconnectTimer=null)}_cleanUp(e,t,r={}){if(t&&(this.log("_cleanUp :: done callback provided for on stream close"),this.stream.on("close",t)),this.log("_cleanUp :: forced? %s",e),e)0===this.options.reconnectPeriod&&this.options.clean&&this._flush(),this.log("_cleanUp :: (%s) :: destroying stream",this.options.clientId),this.stream.destroy();else{let e=Object.assign({cmd:"disconnect"},r);this.log("_cleanUp :: (%s) :: call _sendPacket with disconnect packet",this.options.clientId),this._sendPacket(e,(()=>{this.log("_cleanUp :: (%s) :: destroying stream",this.options.clientId),b((()=>{this.stream.end((()=>{this.log("_cleanUp :: (%s) :: stream destroyed",this.options.clientId)}))}))}))}!this.disconnecting&&!this.reconnecting&&(this.log("_cleanUp :: client not disconnecting/reconnecting. Clearing and resetting reconnect."),this._clearReconnect(),this._setupReconnect()),this._destroyKeepaliveManager(),t&&!this.connected&&(this.log("_cleanUp :: (%s) :: removing stream `done` callback `close` listener",this.options.clientId),this.stream.removeListener("close",t),t())}_storeAndSend(e,t,r){this.log("storeAndSend :: store packet with cmd %s to outgoingStore",e.cmd);let n,i=e;if("publish"===i.cmd&&(i=(0,u.default)(e),n=this._removeTopicAliasAndRecoverTopicName(i),n))return t&&t(n);this.outgoingStore.put(i,(n=>{if(n)return t&&t(n);r(),this._writePacket(e,t)}))}_applyTopicAlias(e){if(5===this.options.protocolVersion&&"publish"===e.cmd){let t;e.properties&&(t=e.properties.topicAlias);let r=e.topic.toString();if(this.topicAliasSend)if(t){if(0!==r.length&&(this.log("applyTopicAlias :: register topic: %s - alias: %d",r,t),!this.topicAliasSend.put(r,t)))return this.log("applyTopicAlias :: error out of range. topic: %s - alias: %d",r,t),new Error("Sending Topic Alias out of range")}else 0!==r.length&&(this.options.autoAssignTopicAlias?(t=this.topicAliasSend.getAliasByTopic(r),t?(e.topic="",e.properties=Object.assign(Object.assign({},e.properties),{topicAlias:t}),this.log("applyTopicAlias :: auto assign(use) topic: %s - alias: %d",r,t)):(t=this.topicAliasSend.getLruAlias(),this.topicAliasSend.put(r,t),e.properties=Object.assign(Object.assign({},e.properties),{topicAlias:t}),this.log("applyTopicAlias :: auto assign topic: %s - alias: %d",r,t))):this.options.autoUseTopicAlias&&(t=this.topicAliasSend.getAliasByTopic(r),t&&(e.topic="",e.properties=Object.assign(Object.assign({},e.properties),{topicAlias:t}),this.log("applyTopicAlias :: auto use topic: %s - alias: %d",r,t))));else if(t)return this.log("applyTopicAlias :: error out of range. topic: %s - alias: %d",r,t),new Error("Sending Topic Alias out of range")}}_noop(e){this.log("noop ::",e)}_writePacket(e,t){this.log("_writePacket :: packet: %O",e),this.log("_writePacket :: emitting `packetsend`"),this.emit("packetsend",e),this.log("_writePacket :: writing to stream");let r=s.default.writeToStream(e,this.stream,this.options);this.log("_writePacket :: writeToStream result %s",r),!r&&t&&t!==this.noop?(this.log("_writePacket :: handle events on `drain` once through callback."),this.stream.once("drain",t)):t&&(this.log("_writePacket :: invoking cb"),t())}_sendPacket(e,t,r,n){this.log("_sendPacket :: (%s) :: start",this.options.clientId),r=r||this.noop,t=t||this.noop;let i=this._applyTopicAlias(e);if(i)t(i);else{if(!this.connected)return"auth"===e.cmd?void this._writePacket(e,t):(this.log("_sendPacket :: client not connected. Storing packet offline."),void this._storePacket(e,t,r));if(n)this._writePacket(e,t);else{switch(e.cmd){case"publish":break;case"pubrel":return void this._storeAndSend(e,t,r);default:return void this._writePacket(e,t)}switch(e.qos){case 2:case 1:this._storeAndSend(e,t,r);break;default:this._writePacket(e,t)}this.log("_sendPacket :: (%s) :: end",this.options.clientId)}}}_storePacket(e,t,r){this.log("_storePacket :: packet: %o",e),this.log("_storePacket :: cb? %s",!!t),r=r||this.noop;let n=e;if("publish"===n.cmd){n=(0,u.default)(e);let r=this._removeTopicAliasAndRecoverTopicName(n);if(r)return t&&t(r)}let i=n.qos||0;0===i&&this.queueQoSZero||"publish"!==n.cmd?this.queue.push({packet:n,cb:t}):i>0?(t=this.outgoing[n.messageId]?this.outgoing[n.messageId].cb:null,this.outgoingStore.put(n,(e=>{if(e)return t&&t(e);r()}))):t&&t(new Error("No connection to broker"))}_setupKeepaliveManager(){this.log("_setupKeepaliveManager :: keepalive %d (seconds)",this.options.keepalive),!this.keepaliveManager&&this.options.keepalive&&(this.keepaliveManager=new y.default(this,this.options.timerVariant))}_destroyKeepaliveManager(){this.keepaliveManager&&(this.log("_destroyKeepaliveManager :: destroying keepalive manager"),this.keepaliveManager.destroy(),this.keepaliveManager=null)}reschedulePing(e=!1){this.keepaliveManager&&this.options.keepalive&&(e||this.options.reschedulePings)&&this._reschedulePing()}_reschedulePing(){this.log("_reschedulePing :: rescheduling ping"),this.keepaliveManager.reschedule()}sendPing(){this.log("_sendPing :: sending pingreq"),this._sendPacket({cmd:"pingreq"})}onKeepaliveTimeout(){this.emit("error",new Error("Keepalive timeout")),this.log("onKeepaliveTimeout :: calling _cleanUp with force true"),this._cleanUp(!0)}_resubscribe(){this.log("_resubscribe");let e=Object.keys(this._resubscribeTopics);if(!this._firstConnection&&(this.options.clean||this.options.protocolVersion>=4&&!this.connackPacket.sessionPresent)&&e.length>0)if(this.options.resubscribe)if(5===this.options.protocolVersion){this.log("_resubscribe: protocolVersion 5");for(let t=0;t{let r=this.outgoingStore.createStream(),n=()=>{r.destroy(),r=null,this._flushStoreProcessingQueue(),i()},i=()=>{this._storeProcessing=!1,this._packetIdsDuringStoreProcessing={}};this.once("close",n),r.on("error",(e=>{i(),this._flushStoreProcessingQueue(),this.removeListener("close",n),this.emit("error",e)}));let o=()=>{if(!r)return;let e,t=r.read(1);t?(this._storeProcessing=!0,this._packetIdsDuringStoreProcessing[t.messageId]?o():this.disconnecting||this.reconnectTimer?r.destroy&&r.destroy():(e=this.outgoing[t.messageId]?this.outgoing[t.messageId].cb:null,this.outgoing[t.messageId]={volatile:!1,cb(t,r){e&&e(t,r),o()}},this._packetIdsDuringStoreProcessing[t.messageId]=!0,this.messageIdProvider.register(t.messageId)?this._sendPacket(t,void 0,void 0,!0):this.log("messageId: %d has already used.",t.messageId))):r.once("readable",o)};r.on("end",(()=>{let r=!0;for(let e in this._packetIdsDuringStoreProcessing)if(!this._packetIdsDuringStoreProcessing[e]){r=!1;break}this.removeListener("close",n),r?(i(),this._invokeAllStoreProcessingQueue(),this.emit("connect",e)):t()})),o()};t()}_invokeStoreProcessingQueue(){if(!this._storeProcessing&&this._storeProcessingQueue.length>0){let e=this._storeProcessingQueue[0];if(e&&e.invoke())return this._storeProcessingQueue.shift(),!0}return!1}_invokeAllStoreProcessingQueue(){for(;this._invokeStoreProcessingQueue(););}_flushStoreProcessingQueue(){for(let e of this._storeProcessingQueue)e.cbStorePut&&e.cbStorePut(new Error("Connection closed")),e.callback&&e.callback(new Error("Connection closed"));this._storeProcessingQueue.splice(0)}_removeOutgoingAndStoreMessage(e,t){delete this.outgoing[e],this.outgoingStore.del({messageId:e},((r,n)=>{t(r,n),this.messageIdProvider.deallocate(e),this._invokeStoreProcessingQueue()}))}};v.VERSION=p.MQTTJS_VERSION,e.default=v})),Ks=Bt((e=>{Lt(),Rn(),dn(),Object.defineProperty(e,"__esModule",{value:!0});var t=Us();e.default=class{constructor(){this.numberAllocator=new t.NumberAllocator(1,65535)}allocate(){return this.lastId=this.numberAllocator.alloc(),this.lastId}getLastAllocated(){return this.lastId}register(e){return this.numberAllocator.use(e)}deallocate(e){this.numberAllocator.free(e)}clear(){this.numberAllocator.clear()}}}));function Ys(e){throw new RangeError(ea[e])}function Gs(e,t){let r=e.split("@"),n="";return r.length>1&&(n=r[0]+"@",e=r[1]),n+function(e,t){let r=[],n=e.length;for(;n--;)r[n]=t(e[n]);return r}((e=e.replace(Zs,".")).split("."),t).join(".")}function Qs(e){let t=[],r=0,n=e.length;for(;r=55296&&i<=56319&&r{Lt(),Rn(),dn(),Js=/^xn--/,Xs=/[^\0-\x7E]/,Zs=/[\x2E\u3002\uFF0E\uFF61]/g,ea={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},ta=Math.floor,ra=String.fromCharCode,na=function(e,t){return e+22+75*(e<26)-((0!=t)<<5)},ia=function(e,t,r){let n=0;for(e=r?ta(e/700):e>>1,e+=ta(e/t);e>455;n+=36)e=ta(e/35);return ta(n+36*e/(e+38))},sa=function(e){let t=[],r=(e=Qs(e)).length,n=128,i=0,o=72;for(let r of e)r<128&&t.push(ra(r));let s=t.length,a=s;for(s&&t.push("-");a=n&&tta((2147483647-i)/l)&&Ys("overflow"),i+=(r-n)*l,n=r;for(let r of e)if(r2147483647&&Ys("overflow"),r==n){let e=i;for(let r=36;;r+=36){let n=r<=o?1:r>=o+26?26:r-o;if(eString.fromCodePoint(...e)},decode:oa=function(e){let t=[],r=e.length,n=0,i=128,o=72,s=e.lastIndexOf("-");s<0&&(s=0);for(let r=0;r=128&&Ys("not-basic"),t.push(e.charCodeAt(r));for(let l=s>0?s+1:0;l=r&&Ys("invalid-input");let s=(a=e.charCodeAt(l++))-48<10?a-22:a-65<26?a-65:a-97<26?a-97:36;(s>=36||s>ta((2147483647-n)/t))&&Ys("overflow"),n+=s*t;let u=i<=o?1:i>=o+26?26:i-o;if(sta(2147483647/h)&&Ys("overflow"),t*=h}let u=t.length+1;o=ia(n-s,u,0==s),ta(n/u)>2147483647-i&&Ys("overflow"),i+=ta(n/u),n%=u,t.splice(n++,0,i)}var a;return String.fromCodePoint(...t)},encode:sa,toASCII:function(e){return Gs(e,(function(e){return Xs.test(e)?"xn--"+sa(e):e}))},toUnicode:function(e){return Gs(e,(function(e){return Js.test(e)?oa(e.slice(4).toLowerCase()):e}))}}).encode,aa.toASCII,aa.toUnicode,aa.ucs2,aa.version}));function ua(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var ha,ca,fa,da,pa=Pt((()=>{Lt(),Rn(),dn(),ha=function(e,t,r,n){t=t||"&",r=r||"=";var i={};if("string"!=typeof e||0===e.length)return i;var o=/\+/g;e=e.split(t);var s=1e3;n&&"number"==typeof n.maxKeys&&(s=n.maxKeys);var a=e.length;s>0&&a>s&&(a=s);for(var l=0;l=0?(u=d.substr(0,p),h=d.substr(p+1)):(u=d,h=""),c=decodeURIComponent(u),f=decodeURIComponent(h),ua(i,c)?Array.isArray(i[c])?i[c].push(f):i[c]=[i[c],f]:i[c]=f}return i},ca=function(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}},fa=function(e,t,r,n){return t=t||"&",r=r||"=",null===e&&(e=void 0),"object"==typeof e?Object.keys(e).map((function(n){var i=encodeURIComponent(ca(n))+r;return Array.isArray(e[n])?e[n].map((function(e){return i+encodeURIComponent(ca(e))})).join(t):i+encodeURIComponent(ca(e[n]))})).join(t):n?encodeURIComponent(ca(n))+r+encodeURIComponent(ca(e)):""},(da={}).decode=da.parse=ha,da.encode=da.stringify=fa,da.decode,da.encode,da.parse,da.stringify}));function ga(){throw new Error("setTimeout has not been defined")}function ya(){throw new Error("clearTimeout has not been defined")}function ma(e){if(Sa===setTimeout)return setTimeout(e,0);if((Sa===ga||!Sa)&&setTimeout)return Sa=setTimeout,setTimeout(e,0);try{return Sa(e,0)}catch{try{return Sa.call(null,e,0)}catch{return Sa.call(this||Ta,e,0)}}}function ba(){Ca&&Ra&&(Ca=!1,Ra.length?Oa=Ra.concat(Oa):ka=-1,Oa.length&&wa())}function wa(){if(!Ca){var e=ma(ba);Ca=!0;for(var t=Oa.length;t;){for(Ra=Oa,Oa=[];++ka{Lt(),Rn(),dn(),Ta=typeof globalThis<"u"?globalThis:typeof self<"u"?self:r.g,Ia=Ea={},function(){try{Sa="function"==typeof setTimeout?setTimeout:ga}catch{Sa=ga}try{Aa="function"==typeof clearTimeout?clearTimeout:ya}catch{Aa=ya}}(),Oa=[],Ca=!1,ka=-1,Ia.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r{Lt(),Rn(),dn(),xa={},Ua=!1,La=typeof globalThis<"u"?globalThis:typeof self<"u"?self:r.g,(Ma=function(){if(Ua)return xa;Ua=!0;var e,t,r=xa={};function n(){throw new Error("setTimeout has not been defined")}function i(){throw new Error("clearTimeout has not been defined")}function o(t){if(e===setTimeout)return setTimeout(t,0);if((e===n||!e)&&setTimeout)return e=setTimeout,setTimeout(t,0);try{return e(t,0)}catch{try{return e.call(null,t,0)}catch{return e.call(this||La,t,0)}}}!function(){try{e="function"==typeof setTimeout?setTimeout:n}catch{e=n}try{t="function"==typeof clearTimeout?clearTimeout:i}catch{t=i}}();var s,a=[],l=!1,u=-1;function h(){!l||!s||(l=!1,s.length?a=s.concat(a):u=-1,a.length&&c())}function c(){if(!l){var e=o(h);l=!0;for(var r=a.length;r;){for(s=a,a=[];++u1)for(var r=1;r{Lt(),Rn(),dn(),Fa(),Na={},ja=!1,Da=function(){if(ja)return Na;ja=!0;var e=Ma;function t(e){if("string"!=typeof e)throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}function r(e,t){for(var r,n="",i=0,o=-1,s=0,a=0;a<=e.length;++a){if(a2){var l=n.lastIndexOf("/");if(l!==n.length-1){-1===l?(n="",i=0):i=(n=n.slice(0,l)).length-1-n.lastIndexOf("/"),o=a,s=0;continue}}else if(2===n.length||1===n.length){n="",i=0,o=a,s=0;continue}t&&(n.length>0?n+="/..":n="..",i=2)}else n.length>0?n+="/"+e.slice(o+1,a):n=e.slice(o+1,a),i=a-o-1;o=a,s=0}else 46===r&&-1!==s?++s:s=-1}return n}var n={resolve:function(){for(var n,i="",o=!1,s=arguments.length-1;s>=-1&&!o;s--){var a;s>=0?a=arguments[s]:(void 0===n&&(n=e.cwd()),a=n),t(a),0!==a.length&&(i=a+"/"+i,o=47===a.charCodeAt(0))}return i=r(i,!o),o?i.length>0?"/"+i:"/":i.length>0?i:"."},normalize:function(e){if(t(e),0===e.length)return".";var n=47===e.charCodeAt(0),i=47===e.charCodeAt(e.length-1);return 0===(e=r(e,!n)).length&&!n&&(e="."),e.length>0&&i&&(e+="/"),n?"/"+e:e},isAbsolute:function(e){return t(e),e.length>0&&47===e.charCodeAt(0)},join:function(){if(0===arguments.length)return".";for(var e,r=0;r0&&(void 0===e?e=i:e+="/"+i)}return void 0===e?".":n.normalize(e)},relative:function(e,r){if(t(e),t(r),e===r||(e=n.resolve(e))===(r=n.resolve(r)))return"";for(var i=1;iu){if(47===r.charCodeAt(a+c))return r.slice(a+c+1);if(0===c)return r.slice(a+c)}else s>u&&(47===e.charCodeAt(i+c)?h=c:0===c&&(h=0));break}var f=e.charCodeAt(i+c);if(f!==r.charCodeAt(a+c))break;47===f&&(h=c)}var d="";for(c=i+h+1;c<=o;++c)(c===o||47===e.charCodeAt(c))&&(0===d.length?d+="..":d+="/..");return d.length>0?d+r.slice(a+h):(a+=h,47===r.charCodeAt(a)&&++a,r.slice(a))},_makeLong:function(e){return e},dirname:function(e){if(t(e),0===e.length)return".";for(var r=e.charCodeAt(0),n=47===r,i=-1,o=!0,s=e.length-1;s>=1;--s)if(47===(r=e.charCodeAt(s))){if(!o){i=s;break}}else o=!1;return-1===i?n?"/":".":n&&1===i?"//":e.slice(0,i)},basename:function(e,r){if(void 0!==r&&"string"!=typeof r)throw new TypeError('"ext" argument must be a string');t(e);var n,i=0,o=-1,s=!0;if(void 0!==r&&r.length>0&&r.length<=e.length){if(r.length===e.length&&r===e)return"";var a=r.length-1,l=-1;for(n=e.length-1;n>=0;--n){var u=e.charCodeAt(n);if(47===u){if(!s){i=n+1;break}}else-1===l&&(s=!1,l=n+1),a>=0&&(u===r.charCodeAt(a)?-1==--a&&(o=n):(a=-1,o=l))}return i===o?o=l:-1===o&&(o=e.length),e.slice(i,o)}for(n=e.length-1;n>=0;--n)if(47===e.charCodeAt(n)){if(!s){i=n+1;break}}else-1===o&&(s=!1,o=n+1);return-1===o?"":e.slice(i,o)},extname:function(e){t(e);for(var r=-1,n=0,i=-1,o=!0,s=0,a=e.length-1;a>=0;--a){var l=e.charCodeAt(a);if(47!==l)-1===i&&(o=!1,i=a+1),46===l?-1===r?r=a:1!==s&&(s=1):-1!==r&&(s=-1);else if(!o){n=a+1;break}}return-1===r||-1===i||0===s||1===s&&r===i-1&&r===n+1?"":e.slice(r,i)},format:function(e){if(null===e||"object"!=typeof e)throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof e);return function(e,t){var r=t.dir||t.root,n=t.base||(t.name||"")+(t.ext||"");return r?r===t.root?r+n:r+"/"+n:n}(0,e)},parse:function(e){t(e);var r={root:"",dir:"",base:"",ext:"",name:""};if(0===e.length)return r;var n,i=e.charCodeAt(0),o=47===i;o?(r.root="/",n=1):n=0;for(var s=-1,a=0,l=-1,u=!0,h=e.length-1,c=0;h>=n;--h)if(47!==(i=e.charCodeAt(h)))-1===l&&(u=!1,l=h+1),46===i?-1===s?s=h:1!==c&&(c=1):-1!==s&&(c=-1);else if(!u){a=h+1;break}return-1===s||-1===l||0===c||1===c&&s===l-1&&s===a+1?-1!==l&&(r.base=r.name=0===a&&o?e.slice(1,l):e.slice(a,l)):(0===a&&o?(r.name=e.slice(1,s),r.base=e.slice(1,l)):(r.name=e.slice(a,s),r.base=e.slice(a,l)),r.ext=e.slice(s,l)),a>0?r.dir=e.slice(0,a-1):o&&(r.dir="/"),r},sep:"/",delimiter:":",win32:null,posix:null};return n.posix=n,Na=n}()})),qa={};function $a(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}function Ha(e,t,r){if(e&&Ja.isObject(e)&&e instanceof $a)return e;var n=new $a;return n.parse(e,t,r),n}function Va(e){if("string"==typeof e)e=new URL(e);else if(!(e instanceof URL))throw new Deno.errors.InvalidData("invalid argument path , must be a string or URL");if("file:"!==e.protocol)throw new Deno.errors.InvalidData("invalid url scheme");return wl?function(e){let t=e.hostname,r=e.pathname;for(let e=0;ebl||":"!==t)throw new Deno.errors.InvalidData("file url path must be absolute");return r.slice(1)}}(e):function(e){if(""!==e.hostname)throw new Deno.errors.InvalidData("invalid file url hostname");let t=e.pathname;for(let e=0;eMl||":"!==t)throw new Deno.errors.InvalidData("file url path must be absolute");return r.slice(1)}}(e):function(e){if(""!==e.hostname)throw new Deno.errors.InvalidData("invalid file url hostname");let t=e.pathname;for(let e=0;eBl,Url:()=>Rl,default:()=>Ga,fileURLToPath:()=>Ka,format:()=>Ol,parse:()=>Pl,pathToFileURL:()=>Ya,resolve:()=>Cl,resolveObject:()=>kl});var Ga,Qa,Ja,Xa,Za,el,tl,rl,nl,il,ol,sl,al,ll,ul,hl,cl,fl,dl,pl,gl,yl,ml,bl,wl,vl,_l,El,Sl,Al,Tl,Il,Rl,Ol,Cl,kl,Pl,Bl,xl,Ul,Ll,Ml,Nl,jl,Dl,Fl,Wl,ql,$l,Hl=Pt((()=>{Lt(),Rn(),dn(),la(),pa(),Ba(),Wa(),Fa(),Qa=aa,Ja={isString:function(e){return"string"==typeof e},isObject:function(e){return"object"==typeof e&&null!==e},isNull:function(e){return null===e},isNullOrUndefined:function(e){return null==e}},(Ga={}).parse=Ha,Ga.resolve=function(e,t){return Ha(e,!1,!0).resolve(t)},Ga.resolveObject=function(e,t){return e?Ha(e,!1,!0).resolveObject(t):t},Ga.format=function(e){return Ja.isString(e)&&(e=Ha(e)),e instanceof $a?e.format():$a.prototype.format.call(e)},Ga.Url=$a,Xa=/^([a-z0-9.+-]+:)/i,Za=/:[0-9]*$/,el=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,tl=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),rl=["'"].concat(tl),nl=["%","/","?",";","#"].concat(rl),il=["/","?","#"],ol=/^[+a-z0-9A-Z_-]{0,63}$/,sl=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,al={javascript:!0,"javascript:":!0},ll={javascript:!0,"javascript:":!0},ul={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},hl=da,$a.prototype.parse=function(e,t,r){if(!Ja.isString(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var n=e.indexOf("?"),i=-1!==n&&n127?v+="x":v+=w[_];if(!v.match(ol)){var S=m.slice(0,p),A=m.slice(p+1),T=w.match(sl);T&&(S.push(T[1]),A.unshift(T[2])),A.length&&(s="/"+A.join(".")+s),this.hostname=S.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),y||(this.hostname=Qa.toASCII(this.hostname));var I=this.port?":"+this.port:"",R=this.hostname||"";this.host=R+I,this.href+=this.host,y&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==s[0]&&(s="/"+s))}if(!al[u])for(p=0,b=rl.length;p0)&&r.host.split("@"))&&(r.auth=T.shift(),r.host=r.hostname=T.shift())),r.search=e.search,r.query=e.query,Ja.isNull(r.pathname)&&Ja.isNull(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r;if(!w.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var _=w.slice(-1)[0],E=(r.host||e.host||w.length>1)&&("."===_||".."===_)||""===_,S=0,A=w.length;A>=0;A--)"."===(_=w[A])?w.splice(A,1):".."===_?(w.splice(A,1),S++):S&&(w.splice(A,1),S--);if(!m&&!b)for(;S--;S)w.unshift("..");!m||""===w[0]||w[0]&&"/"===w[0].charAt(0)||w.unshift(""),E&&"/"!==w.join("/").substr(-1)&&w.push("");var T,I=""===w[0]||w[0]&&"/"===w[0].charAt(0);return v&&(r.hostname=r.host=I?"":w.length?w.shift():"",(T=!!(r.host&&r.host.indexOf("@")>0)&&r.host.split("@"))&&(r.auth=T.shift(),r.host=r.hostname=T.shift())),(m=m||r.host&&w.length)&&!I&&w.unshift(""),w.length?r.pathname=w.join("/"):(r.pathname=null,r.path=null),Ja.isNull(r.pathname)&&Ja.isNull(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=e.auth||r.auth,r.slashes=r.slashes||e.slashes,r.href=r.format(),r},$a.prototype.parseHost=function(){var e=this.host,t=Za.exec(e);t&&(":"!==(t=t[0])&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)},Ga.Url,Ga.format,Ga.resolve,Ga.resolveObject,cl={},fl=!1,dl=function(){if(fl)return cl;fl=!0;var e=Pa;function t(e){if("string"!=typeof e)throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}function r(e,t){for(var r,n="",i=0,o=-1,s=0,a=0;a<=e.length;++a){if(a2){var l=n.lastIndexOf("/");if(l!==n.length-1){-1===l?(n="",i=0):i=(n=n.slice(0,l)).length-1-n.lastIndexOf("/"),o=a,s=0;continue}}else if(2===n.length||1===n.length){n="",i=0,o=a,s=0;continue}t&&(n.length>0?n+="/..":n="..",i=2)}else n.length>0?n+="/"+e.slice(o+1,a):n=e.slice(o+1,a),i=a-o-1;o=a,s=0}else 46===r&&-1!==s?++s:s=-1}return n}var n={resolve:function(){for(var n,i="",o=!1,s=arguments.length-1;s>=-1&&!o;s--){var a;s>=0?a=arguments[s]:(void 0===n&&(n=e.cwd()),a=n),t(a),0!==a.length&&(i=a+"/"+i,o=47===a.charCodeAt(0))}return i=r(i,!o),o?i.length>0?"/"+i:"/":i.length>0?i:"."},normalize:function(e){if(t(e),0===e.length)return".";var n=47===e.charCodeAt(0),i=47===e.charCodeAt(e.length-1);return 0===(e=r(e,!n)).length&&!n&&(e="."),e.length>0&&i&&(e+="/"),n?"/"+e:e},isAbsolute:function(e){return t(e),e.length>0&&47===e.charCodeAt(0)},join:function(){if(0===arguments.length)return".";for(var e,r=0;r0&&(void 0===e?e=i:e+="/"+i)}return void 0===e?".":n.normalize(e)},relative:function(e,r){if(t(e),t(r),e===r||(e=n.resolve(e))===(r=n.resolve(r)))return"";for(var i=1;iu){if(47===r.charCodeAt(a+c))return r.slice(a+c+1);if(0===c)return r.slice(a+c)}else s>u&&(47===e.charCodeAt(i+c)?h=c:0===c&&(h=0));break}var f=e.charCodeAt(i+c);if(f!==r.charCodeAt(a+c))break;47===f&&(h=c)}var d="";for(c=i+h+1;c<=o;++c)(c===o||47===e.charCodeAt(c))&&(0===d.length?d+="..":d+="/..");return d.length>0?d+r.slice(a+h):(a+=h,47===r.charCodeAt(a)&&++a,r.slice(a))},_makeLong:function(e){return e},dirname:function(e){if(t(e),0===e.length)return".";for(var r=e.charCodeAt(0),n=47===r,i=-1,o=!0,s=e.length-1;s>=1;--s)if(47===(r=e.charCodeAt(s))){if(!o){i=s;break}}else o=!1;return-1===i?n?"/":".":n&&1===i?"//":e.slice(0,i)},basename:function(e,r){if(void 0!==r&&"string"!=typeof r)throw new TypeError('"ext" argument must be a string');t(e);var n,i=0,o=-1,s=!0;if(void 0!==r&&r.length>0&&r.length<=e.length){if(r.length===e.length&&r===e)return"";var a=r.length-1,l=-1;for(n=e.length-1;n>=0;--n){var u=e.charCodeAt(n);if(47===u){if(!s){i=n+1;break}}else-1===l&&(s=!1,l=n+1),a>=0&&(u===r.charCodeAt(a)?-1==--a&&(o=n):(a=-1,o=l))}return i===o?o=l:-1===o&&(o=e.length),e.slice(i,o)}for(n=e.length-1;n>=0;--n)if(47===e.charCodeAt(n)){if(!s){i=n+1;break}}else-1===o&&(s=!1,o=n+1);return-1===o?"":e.slice(i,o)},extname:function(e){t(e);for(var r=-1,n=0,i=-1,o=!0,s=0,a=e.length-1;a>=0;--a){var l=e.charCodeAt(a);if(47!==l)-1===i&&(o=!1,i=a+1),46===l?-1===r?r=a:1!==s&&(s=1):-1!==r&&(s=-1);else if(!o){n=a+1;break}}return-1===r||-1===i||0===s||1===s&&r===i-1&&r===n+1?"":e.slice(r,i)},format:function(e){if(null===e||"object"!=typeof e)throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof e);return function(e,t){var r=t.dir||t.root,n=t.base||(t.name||"")+(t.ext||"");return r?r===t.root?r+n:r+"/"+n:n}(0,e)},parse:function(e){t(e);var r={root:"",dir:"",base:"",ext:"",name:""};if(0===e.length)return r;var n,i=e.charCodeAt(0),o=47===i;o?(r.root="/",n=1):n=0;for(var s=-1,a=0,l=-1,u=!0,h=e.length-1,c=0;h>=n;--h)if(47!==(i=e.charCodeAt(h)))-1===l&&(u=!1,l=h+1),46===i?-1===s?s=h:1!==c&&(c=1):-1!==s&&(c=-1);else if(!u){a=h+1;break}return-1===s||-1===l||0===c||1===c&&s===l-1&&s===a+1?-1!==l&&(r.base=r.name=0===a&&o?e.slice(1,l):e.slice(a,l)):(0===a&&o?(r.name=e.slice(1,s),r.base=e.slice(1,l)):(r.name=e.slice(a,s),r.base=e.slice(a,l)),r.ext=e.slice(s,l)),a>0?r.dir=e.slice(0,a-1):o&&(r.dir="/"),r},sep:"/",delimiter:":",win32:null,posix:null};return n.posix=n,cl=n}(),pl=typeof Deno<"u"?"windows"===Deno.build.os?"win32":Deno.build.os:void 0,Ga.URL=typeof URL<"u"?URL:null,Ga.pathToFileURL=za,Ga.fileURLToPath=Va,Ga.Url,Ga.format,Ga.resolve,Ga.resolveObject,Ga.URL,gl=92,yl=47,ml=97,bl=122,wl="win32"===pl,vl=/\//g,_l=/%/g,El=/\\/g,Sl=/\n/g,Al=/\r/g,Tl=/\t/g,Il=typeof Deno<"u"?"windows"===Deno.build.os?"win32":Deno.build.os:void 0,Ga.URL=typeof URL<"u"?URL:null,Ga.pathToFileURL=Ya,Ga.fileURLToPath=Ka,Rl=Ga.Url,Ol=Ga.format,Cl=Ga.resolve,kl=Ga.resolveObject,Pl=Ga.parse,Bl=Ga.URL,xl=92,Ul=47,Ll=97,Ml=122,Nl="win32"===Il,jl=/\//g,Dl=/%/g,Fl=/\\/g,Wl=/\n/g,ql=/\r/g,$l=/\t/g})),Vl=Bt(((e,t)=>{Lt(),Rn(),dn(),t.exports=function(){throw new Error("ws does not work in the browser. Browser clients must use the native WebSocket object")}})),zl=Bt((e=>{Lt(),Rn(),dn(),Object.defineProperty(e,"__esModule",{value:!0}),e.BufferedDuplex=e.writev=void 0;var t=Wo(),r=(In(),Ut(pn));function n(e,t){let n=new Array(e.length);for(let t=0;t{this.destroyed||this.push(e)}))}_read(e){this.proxy.read(e)}_write(e,t,r){this.isSocketOpen?this.writeToProxy(e,t,r):this.writeQueue.push({chunk:e,encoding:t,cb:r})}_final(e){this.writeQueue=[],this.proxy.end(e)}_destroy(e,t){this.writeQueue=[],this.proxy.destroy(),t(e)}socketReady(){this.emit("connect"),this.isSocketOpen=!0,this.processWriteQueue()}writeToProxy(e,t,r){!1===this.proxy.write(e,t)?this.proxy.once("drain",r):r()}processWriteQueue(){for(;this.writeQueue.length>0;){let{chunk:e,encoding:t,cb:r}=this.writeQueue.shift();this.writeToProxy(e,t,r)}}};e.BufferedDuplex=i})),Kl=Bt((e=>{Lt(),Rn(),dn();var t=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0}),e.streamBuilder=e.browserStreamBuilder=void 0;var r=(In(),Ut(pn)),n=t(Vl()),i=t(Go()),o=Wo(),s=t(Fs()),a=zl(),l=(0,i.default)("mqttjs:ws"),u=["rejectUnauthorized","ca","cert","key","pfx","passphrase"];function h(e,t){let r=`${e.protocol}://${e.hostname}:${e.port}${e.path}`;return"function"==typeof e.transformWsUrl&&(r=e.transformWsUrl(r,e,t)),r}function c(e){let t=e;return e.port||("wss"===e.protocol?t.port=443:t.port=80),e.path||(t.path="/"),e.wsOptions||(t.wsOptions={}),!s.default&&!e.forceNativeWebSocket&&"wss"===e.protocol&&u.forEach((r=>{Object.prototype.hasOwnProperty.call(e,r)&&!Object.prototype.hasOwnProperty.call(e.wsOptions,r)&&(t.wsOptions[r]=e[r])})),t}e.streamBuilder=(e,t)=>{l("streamBuilder");let r=c(t);r.hostname=r.hostname||r.host||"localhost";let i=h(r,e),o=function(e,t,r){l("createWebSocket"),l(`protocol: ${r.protocolId} ${r.protocolVersion}`);let i,o="MQIsdp"===r.protocolId&&3===r.protocolVersion?"mqttv3.1":"mqtt";return l(`creating new Websocket for url: ${t} and protocol: ${o}`),i=r.createWebsocket?r.createWebsocket(t,[o],r):new n.default(t,[o],r.wsOptions),i}(0,i,r),s=n.default.createWebSocketStream(o,r.wsOptions);return s.url=i,o.on("close",(()=>{s.destroy()})),s},e.browserStreamBuilder=(e,t)=>{l("browserStreamBuilder");let n,i=function(e){let t=c(e);if(t.hostname||(t.hostname=t.host),!t.hostname){if(typeof document>"u")throw new Error("Could not determine host. Specify host manually.");let e=new URL(document.URL);t.hostname=e.hostname,t.port||(t.port=Number(e.port))}return void 0===t.objectMode&&(t.objectMode=!(!0===t.binary||void 0===t.binary)),t}(t).browserBufferSize||524288,s=t.browserBufferTimeout||1e3,u=!t.objectMode,f=function(e,t){let r,n="MQIsdp"===t.protocolId&&3===t.protocolVersion?"mqttv3.1":"mqtt",i=h(t,e);return r=t.createWebsocket?t.createWebsocket(i,[n],t):new WebSocket(i,[n]),r.binaryType="arraybuffer",r}(e,t),d=function(e){let t=new o.Transform({objectMode:e.objectMode});return t._write=function e(t,n,o){if(f.bufferedAmount>i)return void setTimeout(e,s,t,n,o);u&&"string"==typeof t&&(t=r.Buffer.from(t,"utf8"));try{f.send(t)}catch(e){return o(e)}o()},t._flush=function(e){f.close(),e()},t}(t);t.objectMode||(d._writev=a.writev.bind(d)),d.on("close",(()=>{f.close()}));let p=typeof f.addEventListener<"u";function g(){l("WebSocket onOpen"),n instanceof a.BufferedDuplex&&n.socketReady()}function y(e){l("WebSocket onClose",e),n.end(),n.destroy()}function m(e){l("WebSocket onError",e);let t=new Error("WebSocket error");t.event=e,n.destroy(t)}async function b(e){let{data:t}=e;t=t instanceof ArrayBuffer?r.Buffer.from(t):t instanceof Blob?r.Buffer.from(await new Response(t).arrayBuffer()):r.Buffer.from(t,"utf8"),d&&!d.destroyed&&d.push(t)}return f.readyState===f.OPEN?(n=d,n.socket=f):(n=new a.BufferedDuplex(t,d,f),p?f.addEventListener("open",g):f.onopen=g),p?(f.addEventListener("close",y),f.addEventListener("error",m),f.addEventListener("message",b)):(f.onclose=y,f.onerror=m,f.onmessage=b),n}})),Yl={};function Gl(){throw new Error("Node.js net module is not supported by JSPM core outside of Node.js")}xt(Yl,{Server:()=>Gl,Socket:()=>Gl,Stream:()=>Gl,_createServerHandle:()=>Gl,_normalizeArgs:()=>Gl,_setSimultaneousAccepts:()=>Gl,connect:()=>Gl,createConnection:()=>Gl,createServer:()=>Gl,default:()=>Ql,isIP:()=>Gl,isIPv4:()=>Gl,isIPv6:()=>Gl});var Ql,Jl=Pt((()=>{Lt(),Rn(),dn(),Ql={_createServerHandle:Gl,_normalizeArgs:Gl,_setSimultaneousAccepts:Gl,connect:Gl,createConnection:Gl,createServer:Gl,isIP:Gl,isIPv4:Gl,isIPv6:Gl,Server:Gl,Socket:Gl,Stream:Gl}})),Xl=Bt((e=>{Lt(),Rn(),dn();var t=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0});var r=t((Jl(),Ut(Yl))),n=(0,t(Go()).default)("mqttjs:tcp");e.default=(e,t)=>{t.port=t.port||1883,t.hostname=t.hostname||t.host||"localhost";let{port:i,path:o}=t,s=t.hostname;return n("port %d and host %s",i,s),r.default.createConnection({port:i,host:s,path:o})}})),Zl={};xt(Zl,{default:()=>eu});var eu,tu=Pt((()=>{Lt(),Rn(),dn(),eu={}})),ru=Bt((e=>{Lt(),Rn(),dn();var t=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0});var r=t((tu(),Ut(Zl))),n=t((Jl(),Ut(Yl))),i=(0,t(Go()).default)("mqttjs:tls");e.default=(e,t)=>{t.port=t.port||8883,t.host=t.hostname||t.host||"localhost",0===n.default.isIP(t.host)&&(t.servername=t.host),t.rejectUnauthorized=!1!==t.rejectUnauthorized,delete t.path,i("port %d host %s rejectUnauthorized %b",t.port,t.host,t.rejectUnauthorized);let o=r.default.connect(t);function s(r){t.rejectUnauthorized&&e.emit("error",r),o.end()}return o.on("secureConnect",(()=>{t.rejectUnauthorized&&!o.authorized?o.emit("error",new Error("TLS not authorized")):o.removeListener("error",s)})),o.on("error",s),o}})),nu=Bt((e=>{Lt(),Rn(),dn(),Object.defineProperty(e,"__esModule",{value:!0});var t,r,n,i=(In(),Ut(pn)),o=Wo(),s=zl();e.default=(e,a)=>{if(a.hostname=a.hostname||a.host,!a.hostname)throw new Error("Could not determine host. Specify host manually.");let l="MQIsdp"===a.protocolId&&3===a.protocolVersion?"mqttv3.1":"mqtt";!function(e){e.hostname||(e.hostname="localhost"),e.path||(e.path="/"),e.wsOptions||(e.wsOptions={})}(a);let u=function(e,t){let r="wxs"===e.protocol?"wss":"ws",n=`${r}://${e.hostname}${e.path}`;return e.port&&80!==e.port&&443!==e.port&&(n=`${r}://${e.hostname}:${e.port}${e.path}`),"function"==typeof e.transformWsUrl&&(n=e.transformWsUrl(n,e,t)),n}(a,e);t=wx.connectSocket({url:u,protocols:[l]}),r=function(){let e=new o.Transform;return e._write=(e,r,n)=>{t.send({data:e.buffer,success(){n()},fail(e){n(new Error(e))}})},e._flush=e=>{t.close({success(){e()}})},e}(),(n=new s.BufferedDuplex(a,r,t))._destroy=(e,r)=>{t.close({success(){r&&r(e)}})};let h=n.destroy;return n.destroy=(e,r)=>(n.destroy=h,setTimeout((()=>{t.close({fail(){n._destroy(e,r)}})}),0),n),t.onOpen((()=>{n.socketReady()})),t.onMessage((e=>{let{data:t}=e;t=t instanceof ArrayBuffer?i.Buffer.from(t):i.Buffer.from(t,"utf8"),r.push(t)})),t.onClose((()=>{n.emit("close"),n.end(),n.destroy()})),t.onError((e=>{let t=new Error(e.errMsg);n.destroy(t)})),n}})),iu=Bt((e=>{Lt(),Rn(),dn(),Object.defineProperty(e,"__esModule",{value:!0});var t,r,n,i=(In(),Ut(pn)),o=Wo(),s=zl(),a=!1;e.default=(e,l)=>{if(l.hostname=l.hostname||l.host,!l.hostname)throw new Error("Could not determine host. Specify host manually.");let u="MQIsdp"===l.protocolId&&3===l.protocolVersion?"mqttv3.1":"mqtt";!function(e){e.hostname||(e.hostname="localhost"),e.path||(e.path="/"),e.wsOptions||(e.wsOptions={})}(l);let h=function(e,t){let r="alis"===e.protocol?"wss":"ws",n=`${r}://${e.hostname}${e.path}`;return e.port&&80!==e.port&&443!==e.port&&(n=`${r}://${e.hostname}:${e.port}${e.path}`),"function"==typeof e.transformWsUrl&&(n=e.transformWsUrl(n,e,t)),n}(l,e);return(t=l.my).connectSocket({url:h,protocols:u}),r=function(){let e=new o.Transform;return e._write=(e,r,n)=>{t.sendSocketMessage({data:e.buffer,success(){n()},fail(){n(new Error)}})},e._flush=e=>{t.closeSocket({success(){e()}})},e}(),n=new s.BufferedDuplex(l,r,t),a||(a=!0,t.onSocketOpen((()=>{n.socketReady()})),t.onSocketMessage((e=>{if("string"==typeof e.data){let t=i.Buffer.from(e.data,"base64");r.push(t)}else{let t=new FileReader;t.addEventListener("load",(()=>{let e=t.result;e=e instanceof ArrayBuffer?i.Buffer.from(e):i.Buffer.from(e,"utf8"),r.push(e)})),t.readAsArrayBuffer(e.data)}})),t.onSocketClose((()=>{n.end(),n.destroy()})),t.onSocketError((e=>{n.destroy(e)}))),n}})),ou=Bt((e=>{Lt(),Rn(),dn();var t=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0}),e.connectAsync=void 0;var r=t(Go()),n=t((Hl(),Ut(qa))),i=t(zs()),o=t(Fs());"function"!=typeof(null==Mt?void 0:Mt.nextTick)&&(Mt.nextTick=setImmediate);var s=(0,r.default)("mqttjs"),a=null;function l(e,t){var r,l,u,h;if(s("connecting to an MQTT broker..."),"object"==typeof e&&!t&&(t=e,e=""),t=t||{},e&&"string"==typeof e){let i=n.default.parse(e,!0),o={};if(null!=i.port&&(o.port=Number(i.port)),o.host=i.hostname,o.query=i.query,o.auth=i.auth,o.protocol=i.protocol,o.path=i.path,o.protocol=null===(r=o.protocol)||void 0===r?void 0:r.replace(/:$/,""),!(t=Object.assign(Object.assign({},o),t)).protocol)throw new Error("Missing protocol")}if(t.unixSocket=t.unixSocket||(null===(l=t.protocol)||void 0===l?void 0:l.includes("+unix")),t.unixSocket?t.protocol=t.protocol.replace("+unix",""):null!==(u=t.protocol)&&void 0!==u&&u.startsWith("ws")||null!==(h=t.protocol)&&void 0!==h&&h.startsWith("wx")||delete t.path,function(e){let t;e.auth&&(t=e.auth.match(/^(.+):(.+)$/),t?(e.username=t[1],e.password=t[2]):e.username=e.auth)}(t),t.query&&"string"==typeof t.query.clientId&&(t.clientId=t.query.clientId),t.cert&&t.key){if(!t.protocol)throw new Error("Missing secure protocol key");if(-1===["mqtts","wss","wxs","alis"].indexOf(t.protocol))switch(t.protocol){case"mqtt":t.protocol="mqtts";break;case"ws":t.protocol="wss";break;case"wx":t.protocol="wxs";break;case"ali":t.protocol="alis";break;default:throw new Error(`Unknown protocol for secure connection: "${t.protocol}"!`)}}if(a||(a={},o.default||t.forceNativeWebSocket?(a.ws=Kl().browserStreamBuilder,a.wss=Kl().browserStreamBuilder,a.wx=nu().default,a.wxs=nu().default,a.ali=iu().default,a.alis=iu().default):(a.ws=Kl().streamBuilder,a.wss=Kl().streamBuilder,a.mqtt=Xl().default,a.tcp=Xl().default,a.ssl=ru().default,a.tls=a.ssl,a.mqtts=ru().default)),!a[t.protocol]){let e=-1!==["mqtts","wss"].indexOf(t.protocol);t.protocol=["mqtt","mqtts","ws","wss","wx","wxs","ali","alis"].filter(((t,r)=>(!e||r%2!=0)&&"function"==typeof a[t]))[0]}if(!1===t.clean&&!t.clientId)throw new Error("Missing clientId for unclean clients");t.protocol&&(t.defaultProtocol=t.protocol);let c=new i.default((function(e){return t.servers&&((!e._reconnectCount||e._reconnectCount===t.servers.length)&&(e._reconnectCount=0),t.host=t.servers[e._reconnectCount].host,t.port=t.servers[e._reconnectCount].port,t.protocol=t.servers[e._reconnectCount].protocol?t.servers[e._reconnectCount].protocol:t.defaultProtocol,t.hostname=t.host,e._reconnectCount++),s("calling streambuilder for",t.protocol),a[t.protocol](e,t)}),t);return c.on("error",(()=>{})),c}e.connectAsync=function(e,t,r=!0){return new Promise(((n,i)=>{let o=l(e,t),s={connect:e=>{a(),n(o)},end:()=>{a(),n(o)},error:e=>{a(),o.end(),i(e)}};function a(){Object.keys(s).forEach((e=>{o.off(e,s[e])}))}!1===r&&(s.close=()=>{s.error(new Error("Couldn't connect to server"))}),Object.keys(s).forEach((e=>{o.on(e,s[e])}))}))},e.default=l})),su=Bt((e=>{Lt(),Rn(),dn();var t=e&&e.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),r=e&&e.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=e&&e.__importStar||function(e){if(e&&e.__esModule)return e;var n={};if(null!=e)for(var i in e)"default"!==i&&Object.prototype.hasOwnProperty.call(e,i)&&t(n,e,i);return r(n,e),n},i=e&&e.__exportStar||function(e,r){for(var n in e)"default"!==n&&!Object.prototype.hasOwnProperty.call(r,n)&&t(r,e,n)},o=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0}),e.ReasonCodes=e.KeepaliveManager=e.UniqueMessageIdProvider=e.DefaultMessageIdProvider=e.Store=e.MqttClient=e.connectAsync=e.connect=e.Client=void 0;var s=o(zs());e.MqttClient=s.default;var a=o(rs());e.DefaultMessageIdProvider=a.default;var l=o(Ks());e.UniqueMessageIdProvider=l.default;var u=o(ss());e.Store=u.default;var h=n(ou());e.connect=h.default,Object.defineProperty(e,"connectAsync",{enumerable:!0,get:function(){return h.connectAsync}});var c=o(Vs());e.KeepaliveManager=c.default,e.Client=s.default,i(zs(),e),i(us(),e);var f=hs();Object.defineProperty(e,"ReasonCodes",{enumerable:!0,get:function(){return f.ReasonCodes}})})),au=Bt((e=>{Lt(),Rn(),dn();var t=e&&e.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),r=e&&e.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=e&&e.__importStar||function(e){if(e&&e.__esModule)return e;var n={};if(null!=e)for(var i in e)"default"!==i&&Object.prototype.hasOwnProperty.call(e,i)&&t(n,e,i);return r(n,e),n},i=e&&e.__exportStar||function(e,r){for(var n in e)"default"!==n&&!Object.prototype.hasOwnProperty.call(r,n)&&t(r,e,n)};Object.defineProperty(e,"__esModule",{value:!0});var o=n(su());e.default=o,i(su(),e)}))();class lu extends Error{code;constructor(e="An unexpected error has occurred",t="UNEXPECTED_ERROR",r){super(e,{cause:r}),this.name=this.constructor.name,this.code=t}}class uu extends lu{constructor(e="Not authorized",t="ERR_UNAUTHORIZED"){super(e,t,void 0)}}class hu{#D;#F;#W;#q=30;#$=30;#H=(e,t)=>{console[e](t)};#V=0;#z;#K=new Map;#Y=!1;constructor(e){this.#D=e}get sessionDetails(){return this.#F}get mqttClient(){return this.#W}async connect(e){this.#G(e),this.#z=e,this.#q=e.reconnectRetryLimit||this.#q,this.#$=e.keepAliveIntervalSeconds||this.#$,this.#H=e.logger||this.#H;const{sourceId:t,platformId:r}=this.#z;try{const e=await ht.post(`${this.#D.url}/api/sessions`,{sourceId:t,platformId:r},{headers:this.#Q()});if(201!==e.status)throw new lu(`Failed to connect to the Cloud Interop service: ${this.#D.url}`,"ERR_CONNECT",e.status);this.#F=e.data;const n=this.#F.sessionRootTopic,o={keepalive:this.#$,clientId:this.#F.sessionId,clean:!0,protocolVersion:5,will:{topic:"interop/lastwill",payload:i.hp.from(JSON.stringify(this.#F)),qos:0,retain:!1,properties:{willDelayInterval:10}},username:this.#F.token};this.#W=await au.connectAsync(this.#F.url,o),this.#H("log",`Cloud Interop successfully connected to ${this.#D.url}`),this.#W.on("error",(async e=>{if(this.#Y||await this.#J(!1),e instanceof au.ErrorWithReasonCode)switch(e.code){case 134:return await this.#J(!1),this.#H("warn","Session expired"),void this.#X("session-expired");default:if(this.#H("error",`Unknown Infrastructure Error Code ${e.code} : ${e.message}${this.#Y?" during reconnection attempt":""}`),!this.#Y){this.#X("error",new lu(`Unknown Infrastructure Error Code ${e.code} : ${e.message}`,"ERR_INFRASTRUCTURE",e));break}}else this.#H("error",`Unknown Error${this.#Y?" during reconnection attempt":""}: ${e}`),this.#Y||this.#X("error",new lu("Unknown Error","ERR_UNKNOWN",e))})),this.#W.on("reconnect",(()=>{this.#Y=!0,this.#V+=1,this.#H("debug",`Cloud Interop attempting reconnection - ${this.#V}...`),this.#V===this.#q&&(this.#H("warn",`Cloud Interop reached max reconnection attempts - ${this.#q}...`),this.#J(!0)),this.#X("reconnecting",this.#V)})),this.#W.on("connect",(()=>{this.#H("debug",`Cloud Interop successfully reconnected after ${this.#V} attempts`),this.#V=0,this.#Y=!1,this.#X("reconnected")})),this.#W.on("message",((e,t)=>{this.#F?this.#Z(e,t,this.#F):this.#H("warn","Received message when session not connected")})),this.#W.subscribe(`${n}/context-groups/#`),this.#W.subscribe(`${n}/commands`)}catch(e){if(ht.isAxiosError(e)){if(401===e.response?.status||403===e.response?.status)throw new uu;throw new lu}throw e}}async disconnect(){await this.#J(!0)}async setContext(e,t){if(!this.#F||!this.#z)throw new Error("Session not connected");const r={context:t,timestamp:Date.now()};await ht.post(`${this.#D.url}/api/context-groups/${this.#F.sessionId}/${e}`,r,{headers:this.#Q()})}addEventListener(e,t){const r=this.#K.get(e)||[];r.push(t),this.#K.set(e,r)}removeEventListener(e,t){const r=this.#K.get(e)||[],n=r.indexOf(t);-1!==n&&r.splice(n,1),this.#K.set(e,r)}async#J(e){if(this.#F)try{const e=await ht.delete(`${this.#D.url}/api/sessions/${this.#F.sessionId}`,{headers:this.#Q()});if(200!==e.status)throw new lu("Error during session tear down - unexpected status","ERR_DISCONNECT",e.status)}catch{throw new lu("Error during disconnection","ERR_DISCONNECT")}finally{this.#W?.removeAllListeners(),await(this.#W?.endAsync(!0)),this.#F=void 0,this.#W=void 0,this.#V=0,this.#Y=!1,e&&this.#X("disconnected")}}#Z(e,t,r){if(0===t.length||!r)return;const n=JSON.parse(t.toString());if(e.startsWith(`${r.sessionRootTopic}/context-groups/`)){if(n.source.sessionId===r.sessionId)return;const{channelName:e,payload:t,source:i,history:o}=n;this.#X("context",{contextGroup:e,context:t,source:i,history:{...o,clientReceived:Date.now()}})}}#X(e,...t){(this.#K.get(e)||[]).forEach((e=>e(...t)))}#G=e=>{if(!e)throw new Error("Connect parameters must be provided");if(!("jwt"!==e.authenticationType||e.jwtAuthenticationParameters?.jwtRequestCallback&&e.jwtAuthenticationParameters?.authenticationId))throw new Error("jwtAuthenticationParameters must be provided when using jwt authentication");if(!("basic"!==e.authenticationType||e.basicAuthenticationParameters?.username&&e.basicAuthenticationParameters?.password))throw new Error("basicAuthenticationParameters must be provided when using basic authentication")};#Q=()=>{if(!this.#z)throw new Error("Connect parameters must be provided");const e=new Et;if(e["Content-Type"]="application/json","jwt"===this.#z.authenticationType&&this.#z.jwtAuthenticationParameters){const t=this.#z.jwtAuthenticationParameters.jwtRequestCallback();if(!t)throw new Error("jwtRequestCallback must return a token");e["x-of-auth-id"]=this.#z.jwtAuthenticationParameters.authenticationId,e.Authorization="string"==typeof t?`Bearer ${t}`:`Bearer ${i.hp.from(JSON.stringify(t)).toString("base64")}`}if("basic"===this.#z.authenticationType&&this.#z.basicAuthenticationParameters){const{username:t,password:r}=this.#z.basicAuthenticationParameters;e.Authorization=`Basic ${i.hp.from(`${t}:${r}`).toString("base64")}`}return e}}function cu(e){return function(e){return null!=e&&"string"==typeof e}(e)&&e.trim().length>0}const fu={interopOverride:new class{async initialize(e,t,r){this._definition=e;const n=e.data?.loggerName??"OpenfinCloudInterop";this._logger=t(n),this._helpers=r,this._logger.info("Initializing")}async closedown(){this._logger?.info("Closedown")}async getConstructorOverride(e){if(!cu(this._definition?.data?.platformId)||!cu(this._definition?.data?.url)){const e=`The data setting for the interopOverride module ${this._definition?.id} is missing one of the following settings: platformId, url.`;throw this._logger?.error(e),new Error(e)}const t=this._definition.data;if(!("basic"!==t.authenticationType||cu(t.basicAuthenticationParameters?.username)&&cu(t.basicAuthenticationParameters?.password))){const e=`The data setting for the interopOverride module ${this._definition?.id} is missing one of the following settings: username, password as ${t.authenticationType} authentication has been specified.`;throw this._logger?.error(e),new Error(e)}if("jwt"===t.authenticationType){if(!cu(t.jwtAuthenticationParameters?.authenticationId)){const e=`The data setting for the interopOverride module ${this._definition?.id} specified ${t.authenticationType} authentication and we need jwtAuthenticationParameters with a Here provided authenticated Id.`;throw this._logger?.error(e),new Error(e)}const e="cloud-jwt-callback";if(!this._helpers?.getEndpointClient){const r=`The data setting for the interopOverride module ${this._definition?.id} specified ${t.authenticationType} authentication and we need to see if logic exposed as an endpoint ${e} is available. The helper function getEndpointClient is unavailable.`;throw this._logger?.error(r),new Error(r)}{const r=await this._helpers.getEndpointClient();if(!r){const r=`The data setting for the interopOverride module ${this._definition?.id} specified ${t.authenticationType} authentication and we need to see if logic exposed as an endpoint ${e} is available. The getEndpointClient helper didn't return a client.`;throw this._logger?.error(r),new Error(r)}if(!r.hasEndpoint(e)){const r=`The data setting for the interopOverride module ${this._definition?.id} specified ${t.authenticationType} authentication. It requires an endpoint called ${e} and this endpoint is not available.`;throw this._logger?.error(r),new Error(r)}let n;const i=await r.requestStream(e);if(i){const e=i.getReader(),t=this._logger;this._logger?.info("Reading from jwt stream"),e.read().then((function r({done:i,value:o}){if(!i)return n=o,e.read().then(r);t?.info("JWT Stream ended.")})).catch((e=>{t?.error(`Error reading JWT stream: ${e}`)}))}t.jwtAuthenticationParameters.jwtRequestCallback=()=>n}}const r={...t,sourceId:t.sourceId??fin.me.identity.uuid};return await async function(e){const{url:t,...r}=e,n=new hu({url:t});try{await n.connect(r)}catch(e){console.warn("[CloudInteropOverride] Failed to connect to Cloud Interop Service. Call interopBroker.cloudReconnect() to attempt reconnection",e)}return t=>class extends t{contextListener;setContextFilter=e=>!0;constructor(){super(),this.contextListener=e=>{const{contextGroup:t,context:r,source:i}=e;this.getContextGroups().map((({id:e})=>e)).includes(t)&&n.sessionDetails?.sessionId!==i.sessionId&&super.setContextForGroup({context:r},t)},n.addEventListener("context",this.contextListener)}async setContextForGroup({context:e},t){"connected"===this.cloudConnectionState&&this.setContextFilter(e)&&n.setContext(t,e),super.setContextForGroup({context:e},t)}async cloudReconnect(t){try{"connected"===this.cloudConnectionState&&await n.disconnect(),await n.connect(t||e)}catch(e){console.warn("[CloudInteropOverride] Failed reconnection to Cloud Interop Service.",e)}}setCloudContextListener(e){n.removeEventListener("context",this.contextListener),this.contextListener=e,n.addEventListener("context",this.contextListener)}setCloudSetContextFilter(e){this.setContextFilter=e}get cloudConnectionState(){return n.mqttClient?.connected?"connected":n.mqttClient?.reconnecting?"reconnecting":"disconnected"}}}(r)}}};var du=n.k;export{du as entryPoints}; //# sourceMappingURL=openfin-cloud-interop.bundle.js.map \ No newline at end of file diff --git a/workspace/v20.1.0/workspace-platform-starter/js/modules/interop-override/openfin-cloud-interop.bundle.js.map b/workspace/v20.1.0/workspace-platform-starter/js/modules/interop-override/openfin-cloud-interop.bundle.js.map index 914e958e6..028d229de 100644 --- a/workspace/v20.1.0/workspace-platform-starter/js/modules/interop-override/openfin-cloud-interop.bundle.js.map +++ b/workspace/v20.1.0/workspace-platform-starter/js/modules/interop-override/openfin-cloud-interop.bundle.js.map @@ -1 +1 @@ -{"version":3,"file":"openfin-cloud-interop.bundle.js","mappings":"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","sources":["webpack://openfin-workspace--workspace-platform-starter/../../node_modules/base64-js/index.js","webpack://openfin-workspace--workspace-platform-starter/../../node_modules/buffer/index.js","webpack://openfin-workspace--workspace-platform-starter/../../node_modules/ieee754/index.js","webpack://openfin-workspace--workspace-platform-starter/../../node_modules/isarray/index.js","webpack://openfin-workspace--workspace-platform-starter/webpack/bootstrap","webpack://openfin-workspace--workspace-platform-starter/webpack/runtime/amd options","webpack://openfin-workspace--workspace-platform-starter/webpack/runtime/define property getters","webpack://openfin-workspace--workspace-platform-starter/webpack/runtime/global","webpack://openfin-workspace--workspace-platform-starter/webpack/runtime/hasOwnProperty shorthand","webpack://openfin-workspace--workspace-platform-starter/../../node_modules/@openfin/cloud-interop/out/index.js","webpack://openfin-workspace--workspace-platform-starter/./client/src/framework/utils.ts","webpack://openfin-workspace--workspace-platform-starter/./client/src/modules/interop-override/openfin-cloud-interop/index.ts","webpack://openfin-workspace--workspace-platform-starter/./client/src/modules/interop-override/openfin-cloud-interop/interop-override.ts"],"sourcesContent":["'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.amdO = {};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","import { Buffer } from 'buffer';\n\nfunction bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n};\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);\n};\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n};\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n };\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n};\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n};\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n};\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n};\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n};\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n};\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[Symbol.iterator];\n\n const iterator = generator.call(obj);\n\n let result;\n\n while ((result = iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n};\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n};\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n};\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n};\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n };\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n};\n\nconst noop = () => {};\n\nconst toFiniteNumber = (value, defaultValue) => {\n value = +value;\n return Number.isFinite(value) ? value : defaultValue;\n};\n\nconst ALPHA = 'abcdefghijklmnopqrstuvwxyz';\n\nconst DIGIT = '0123456789';\n\nconst ALPHABET = {\n DIGIT,\n ALPHA,\n ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT\n};\n\nconst generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {\n let str = '';\n const {length} = alphabet;\n while (size--) {\n str += alphabet[Math.random() * length|0];\n }\n\n return str;\n};\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n };\n\n return visit(obj, 0);\n};\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\nvar utils$1 = {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n ALPHABET,\n generateString,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable\n};\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n response && (this.response = response);\n}\n\nutils$1.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils$1.toJSONObject(this.config),\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n }\n});\n\nconst prototype$1 = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype$1, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype$1);\n\n utils$1.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.cause = error;\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\n// eslint-disable-next-line strict\nvar httpAdapter = null;\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils$1.isPlainObject(thing) || utils$1.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils$1.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils$1.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils$1.toFlatObject(utils$1, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils$1.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils$1.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils$1.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils$1.isSpecCompliantForm(formData);\n\n if (!utils$1.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils$1.isDate(value)) {\n return value.toISOString();\n }\n\n if (!useBlob && utils$1.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils$1.isArrayBuffer(value) || utils$1.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils$1.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils$1.isArray(value) && isFlatArray(value)) ||\n ((utils$1.isFileList(value) || utils$1.endsWith(key, '[]')) && (arr = utils$1.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils$1.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils$1.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils$1.forEach(value, function each(el, key) {\n const result = !(utils$1.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils$1.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils$1.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode$1(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object} params - The parameters to be converted to a FormData object.\n * @param {Object} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode$1);\n } : encode$1;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?object} options\n *\n * @returns {string} The formatted url\n */\nfunction buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils$1.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils$1.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nvar transitionalDefaults = {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n\nvar URLSearchParams$1 = typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n\nvar FormData$1 = typeof FormData !== 'undefined' ? FormData : null;\n\nvar Blob$1 = typeof Blob !== 'undefined' ? Blob : null;\n\nvar platform$1 = {\n isBrowser: true,\n classes: {\n URLSearchParams: URLSearchParams$1,\n FormData: FormData$1,\n Blob: Blob$1\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n\nconst hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = (\n (product) => {\n return hasBrowserEnv && ['ReactNative', 'NativeScript', 'NS'].indexOf(product) < 0\n })(typeof navigator !== 'undefined' && navigator.product);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nvar utils = /*#__PURE__*/Object.freeze({\n __proto__: null,\n hasBrowserEnv: hasBrowserEnv,\n hasStandardBrowserEnv: hasStandardBrowserEnv,\n hasStandardBrowserWebWorkerEnv: hasStandardBrowserWebWorkerEnv\n});\n\nvar platform = {\n ...utils,\n ...platform$1\n};\n\nfunction toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils$1.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils$1.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils$1.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils$1.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils$1.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils$1.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils$1.isFormData(formData) && utils$1.isFunction(formData.entries)) {\n const obj = {};\n\n utils$1.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils$1.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils$1.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils$1.isObject(data);\n\n if (isObjectPayload && utils$1.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils$1.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils$1.isArrayBuffer(data) ||\n utils$1.isBuffer(data) ||\n utils$1.isStream(data) ||\n utils$1.isFile(data) ||\n utils$1.isBlob(data)\n ) {\n return data;\n }\n if (utils$1.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils$1.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils$1.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (data && utils$1.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils$1.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nvar defaults$1 = defaults;\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils$1.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nvar parseHeaders = rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils$1.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils$1.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils$1.isString(value)) return;\n\n if (utils$1.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils$1.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils$1.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils$1.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils$1.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils$1.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite);\n } else if(utils$1.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils$1.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils$1.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils$1.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils$1.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils$1.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils$1.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils$1.forEach(this, (value, header) => {\n const key = utils$1.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils$1.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils$1.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils$1.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils$1.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils$1.freezeMethods(AxiosHeaders);\n\nvar AxiosHeaders$1 = AxiosHeaders;\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nfunction transformData(fns, response) {\n const config = this || defaults$1;\n const context = response || config;\n const headers = AxiosHeaders$1.from(context.headers);\n let data = context.data;\n\n utils$1.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n\nfunction isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils$1.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nfunction settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n\nvar cookies = platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n\n utils$1.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n utils$1.isString(path) && cookie.push('path=' + path);\n\n utils$1.isString(domain) && cookie.push('domain=' + domain);\n\n secure === true && cookie.push('secure');\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nfunction isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nfunction combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nfunction buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n\nvar isURLSameOrigin = platform.hasStandardBrowserEnv ?\n\n// Standard browser envs have full support of the APIs needed to test\n// whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n const msie = /(msie|trident)/i.test(navigator.userAgent);\n const urlParsingNode = document.createElement('a');\n let originURL;\n\n /**\n * Parse a URL to discover its components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n let href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n const parsed = (utils$1.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })();\n\nfunction parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nfunction progressEventReducer(listener, isDownloadStream) {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e\n };\n\n data[isDownloadStream ? 'download' : 'upload'] = true;\n\n listener(data);\n };\n}\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nvar xhrAdapter = isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n let requestData = config.data;\n const requestHeaders = AxiosHeaders$1.from(config.headers).normalize();\n let {responseType, withXSRFToken} = config;\n let onCanceled;\n function done() {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(onCanceled);\n }\n\n if (config.signal) {\n config.signal.removeEventListener('abort', onCanceled);\n }\n }\n\n let contentType;\n\n if (utils$1.isFormData(requestData)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n requestHeaders.setContentType(false); // Let the browser set it\n } else if ((contentType = requestHeaders.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n requestHeaders.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n }\n }\n\n let request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n const username = config.auth.username || '';\n const password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.set('Authorization', 'Basic ' + btoa(username + ':' + password));\n }\n\n const fullPath = buildFullPath(config.baseURL, config.url);\n\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders$1.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = config.transitional || transitionalDefaults;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if(platform.hasStandardBrowserEnv) {\n withXSRFToken && utils$1.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(config));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(fullPath))) {\n // Add xsrf header\n const xsrfValue = config.xsrfHeaderName && config.xsrfCookieName && cookies.read(config.xsrfCookieName);\n\n if (xsrfValue) {\n requestHeaders.set(config.xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils$1.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils$1.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', progressEventReducer(config.onDownloadProgress, true));\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', progressEventReducer(config.onUploadProgress));\n }\n\n if (config.cancelToken || config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\n if (config.signal) {\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(fullPath);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n};\n\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter\n};\n\nutils$1.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils$1.isFunction(adapter) || adapter === null || adapter === false;\n\nvar adapters = {\n getAdapter: (adapters) => {\n adapters = utils$1.isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n },\n adapters: knownAdapters\n};\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nfunction dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders$1.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults$1.adapter);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders$1.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders$1.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders$1 ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nfunction mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, caseless) {\n if (utils$1.isPlainObject(target) && utils$1.isPlainObject(source)) {\n return utils$1.merge.call({caseless}, target, source);\n } else if (utils$1.isPlainObject(source)) {\n return utils$1.merge({}, source);\n } else if (utils$1.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, caseless) {\n if (!utils$1.isUndefined(b)) {\n return getMergedValue(a, b, caseless);\n } else if (!utils$1.isUndefined(a)) {\n return getMergedValue(undefined, a, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils$1.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils$1.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils$1.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b) => mergeDeepProperties(headersToObject(a), headersToObject(b), true)\n };\n\n utils$1.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils$1.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n\nconst VERSION = \"1.6.8\";\n\nconst validators$1 = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators$1[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators$1.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nvar validator = {\n assertOptions,\n validators: validators$1\n};\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy;\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy = {}) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack;\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils$1.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n };\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils$1.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils$1.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders$1.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n i = 0;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils$1.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils$1.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nvar Axios$1 = Axios;\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nvar CancelToken$1 = CancelToken;\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nfunction spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nfunction isAxiosError(payload) {\n return utils$1.isObject(payload) && (payload.isAxiosError === true);\n}\n\nconst HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nvar HttpStatusCode$1 = HttpStatusCode;\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios$1(defaultConfig);\n const instance = bind(Axios$1.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils$1.extend(instance, Axios$1.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils$1.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults$1);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios$1;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken$1;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders$1;\n\naxios.formToJSON = thing => formDataToJSON(utils$1.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode$1;\n\naxios.default = axios;\n\nvar ds=Object.defineProperty;var zg=Object.getOwnPropertyDescriptor;var Kg=Object.getOwnPropertyNames;var Gg=Object.prototype.hasOwnProperty;var we=(t,e)=>()=>(t&&(e=t(t=0)),e);var M=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),Qt=(t,e)=>{for(var r in e)ds(t,r,{get:e[r],enumerable:!0});},Qg=(t,e,r,i)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let n of Kg(e))!Gg.call(t,n)&&n!==r&&ds(t,n,{get:()=>e[n],enumerable:!(i=zg(e,n))||i.enumerable});return t};var X=t=>Qg(ds({},\"__esModule\",{value:!0}),t);var B,_=we(()=>{B={deviceMemory:8,hardwareConcurrency:8,language:\"en-US\"};});var P={};Qt(P,{_debugEnd:()=>yu,_debugProcess:()=>gu,_events:()=>ku,_eventsCount:()=>xu,_exiting:()=>Yl,_fatalExceptions:()=>cu,_getActiveHandles:()=>eu,_getActiveRequests:()=>Zl,_kill:()=>ru,_linkedBinding:()=>Gl,_maxListeners:()=>Ou,_preload_modules:()=>Cu,_rawDebug:()=>zl,_startProfilerIdleNotifier:()=>bu,_stopProfilerIdleNotifier:()=>wu,_tickCallback:()=>pu,abort:()=>Eu,addListener:()=>Mu,allowedNodeEnvironmentFlags:()=>lu,arch:()=>xl,argv:()=>Ul,argv0:()=>Ru,assert:()=>uu,binding:()=>Fl,chdir:()=>Hl,config:()=>Jl,cpuUsage:()=>Fi,cwd:()=>$l,debugPort:()=>Tu,default:()=>$u,dlopen:()=>Xl,domain:()=>Ql,emit:()=>Du,emitWarning:()=>jl,env:()=>Ll,execArgv:()=>Nl,execPath:()=>Iu,exit:()=>ou,features:()=>fu,hasUncaughtExceptionCaptureCallback:()=>du,hrtime:()=>ji,kill:()=>su,listeners:()=>Wu,memoryUsage:()=>nu,moduleLoadList:()=>Kl,nextTick:()=>Pl,off:()=>Uu,on:()=>bt,once:()=>Lu,openStdin:()=>au,pid:()=>Su,platform:()=>Ml,ppid:()=>Au,prependListener:()=>ju,prependOnceListener:()=>Fu,reallyExit:()=>tu,release:()=>Vl,removeAllListeners:()=>qu,removeListener:()=>Nu,resourceUsage:()=>iu,setSourceMapsEnabled:()=>Bu,setUncaughtExceptionCaptureCallback:()=>hu,stderr:()=>mu,stdin:()=>vu,stdout:()=>_u,title:()=>kl,umask:()=>Wl,uptime:()=>Pu,version:()=>ql,versions:()=>Dl});function ys(t){throw new Error(\"Node.js process \"+t+\" is not supported by JSPM core outside of Node.js\")}function Yg(){!xr||!Yt||(xr=!1,Yt.length?yt=Yt.concat(yt):Di=-1,yt.length&&Bl());}function Bl(){if(!xr){var t=setTimeout(Yg,0);xr=!0;for(var e=yt.length;e;){for(Yt=yt,yt=[];++Di1)for(var r=1;r{v();m();_();yt=[],xr=!1,Di=-1;Ol.prototype.run=function(){this.fun.apply(null,this.array);};kl=\"browser\",xl=\"x64\",Ml=\"browser\",Ll={PATH:\"/usr/bin\",LANG:B.language+\".UTF-8\",PWD:\"/\",HOME:\"/home\",TMP:\"/tmp\"},Ul=[\"/usr/bin/node\"],Nl=[],ql=\"v16.8.0\",Dl={},jl=function(t,e){console.warn((e?e+\": \":\"\")+t);},Fl=function(t){ys(\"binding\");},Wl=function(t){return 0},$l=function(){return \"/\"},Hl=function(t){},Vl={name:\"node\",sourceUrl:\"\",headersUrl:\"\",libUrl:\"\"};zl=ve,Kl=[];Ql={},Yl=!1,Jl={};tu=ve,ru=ve,Fi=function(){return {}},iu=Fi,nu=Fi,su=ve,ou=ve,au=ve,lu={};fu={inspector:!1,debug:!1,uv:!1,ipv6:!1,tls_alpn:!1,tls_sni:!1,tls_ocsp:!1,tls:!1,cached_builtins:!0},cu=ve,hu=ve;pu=ve,gu=ve,yu=ve,bu=ve,wu=ve,_u=void 0,mu=void 0,vu=void 0,Eu=ve,Su=2,Au=1,Iu=\"/bin/usr/node\",Tu=9229,Ru=\"node\",Cu=[],Bu=ve,Mt={now:typeof performance<\"u\"?performance.now.bind(performance):void 0,timing:typeof performance<\"u\"?performance.timing:void 0};Mt.now===void 0&&(ps=Date.now(),Mt.timing&&Mt.timing.navigationStart&&(ps=Mt.timing.navigationStart),Mt.now=()=>Date.now()-ps);gs=1e9;ji.bigint=function(t){var e=ji(t);return typeof BigInt>\"u\"?e[0]*gs+e[1]:BigInt(e[0]*gs)+BigInt(e[1])};Ou=10,ku={},xu=0;Mu=bt,Lu=bt,Uu=bt,Nu=bt,qu=bt,Du=ve,ju=bt,Fu=bt;$u={version:ql,versions:Dl,arch:xl,platform:Ml,release:Vl,_rawDebug:zl,moduleLoadList:Kl,binding:Fl,_linkedBinding:Gl,_events:ku,_eventsCount:xu,_maxListeners:Ou,on:bt,addListener:Mu,once:Lu,off:Uu,removeListener:Nu,removeAllListeners:qu,emit:Du,prependListener:ju,prependOnceListener:Fu,listeners:Wu,domain:Ql,_exiting:Yl,config:Jl,dlopen:Xl,uptime:Pu,_getActiveRequests:Zl,_getActiveHandles:eu,reallyExit:tu,_kill:ru,cpuUsage:Fi,resourceUsage:iu,memoryUsage:nu,kill:su,exit:ou,openStdin:au,allowedNodeEnvironmentFlags:lu,assert:uu,features:fu,_fatalExceptions:cu,setUncaughtExceptionCaptureCallback:hu,hasUncaughtExceptionCaptureCallback:du,emitWarning:jl,nextTick:Pl,_tickCallback:pu,_debugProcess:gu,_debugEnd:yu,_startProfilerIdleNotifier:bu,_stopProfilerIdleNotifier:wu,stdout:_u,stdin:vu,stderr:mu,abort:Eu,umask:Wl,chdir:Hl,cwd:$l,env:Ll,title:kl,argv:Ul,execArgv:Nl,pid:Su,ppid:Au,execPath:Iu,debugPort:Tu,hrtime:ji,argv0:Ru,_preload_modules:Cu,setSourceMapsEnabled:Bu};});var m=we(()=>{Hu();});var _e={};Qt(_e,{Buffer:()=>x,INSPECT_MAX_BYTES:()=>ey,default:()=>Lt,kMaxLength:()=>ty});function Jg(){if(Vu)return ui;Vu=!0,ui.byteLength=a,ui.toByteArray=c,ui.fromByteArray=g;for(var t=[],e=[],r=typeof Uint8Array<\"u\"?Uint8Array:Array,i=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",n=0,o=i.length;n0)throw new Error(\"Invalid string. Length must be a multiple of 4\");var E=y.indexOf(\"=\");E===-1&&(E=w);var S=E===w?0:4-E%4;return [E,S]}function a(y){var w=s(y),E=w[0],S=w[1];return (E+S)*3/4-S}function u(y,w,E){return (w+E)*3/4-E}function c(y){var w,E=s(y),S=E[0],I=E[1],C=new r(u(y,S,I)),R=0,U=I>0?S-4:S,N;for(N=0;N>16&255,C[R++]=w>>8&255,C[R++]=w&255;return I===2&&(w=e[y.charCodeAt(N)]<<2|e[y.charCodeAt(N+1)]>>4,C[R++]=w&255),I===1&&(w=e[y.charCodeAt(N)]<<10|e[y.charCodeAt(N+1)]<<4|e[y.charCodeAt(N+2)]>>2,C[R++]=w>>8&255,C[R++]=w&255),C}function h(y){return t[y>>18&63]+t[y>>12&63]+t[y>>6&63]+t[y&63]}function d(y,w,E){for(var S,I=[],C=w;CU?U:R+C));return S===1?(w=y[E-1],I.push(t[w>>2]+t[w<<4&63]+\"==\")):S===2&&(w=(y[E-2]<<8)+y[E-1],I.push(t[w>>10]+t[w>>4&63]+t[w<<2&63]+\"=\")),I.join(\"\")}return ui}function Xg(){if(zu)return Wi;zu=!0;return Wi.read=function(t,e,r,i,n){var o,s,a=n*8-i-1,u=(1<>1,h=-7,d=r?n-1:0,g=r?-1:1,y=t[e+d];for(d+=g,o=y&(1<<-h)-1,y>>=-h,h+=a;h>0;o=o*256+t[e+d],d+=g,h-=8);for(s=o&(1<<-h)-1,o>>=-h,h+=i;h>0;s=s*256+t[e+d],d+=g,h-=8);if(o===0)o=1-c;else {if(o===u)return s?NaN:(y?-1:1)*(1/0);s=s+Math.pow(2,i),o=o-c;}return (y?-1:1)*s*Math.pow(2,o-i)},Wi.write=function(t,e,r,i,n,o){var s,a,u,c=o*8-n-1,h=(1<>1,g=n===23?Math.pow(2,-24)-Math.pow(2,-77):0,y=i?0:o-1,w=i?1:-1,E=e<0||e===0&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=h):(s=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-s))<1&&(s--,u*=2),s+d>=1?e+=g/u:e+=g*Math.pow(2,1-d),e*u>=2&&(s++,u/=2),s+d>=h?(a=0,s=h):s+d>=1?(a=(e*u-1)*Math.pow(2,n),s=s+d):(a=e*Math.pow(2,d-1)*Math.pow(2,n),s=0));n>=8;t[r+y]=a&255,y+=w,a/=256,n-=8);for(s=s<0;t[r+y]=s&255,y+=w,s/=256,c-=8);t[r+y-w]|=E*128;},Wi}function Zg(){if(Ku)return Jt;Ku=!0;let t=Jg(),e=Xg(),r=typeof Symbol==\"function\"&&typeof Symbol.for==\"function\"?Symbol.for(\"nodejs.util.inspect.custom\"):null;Jt.Buffer=s,Jt.SlowBuffer=I,Jt.INSPECT_MAX_BYTES=50;let i=2147483647;Jt.kMaxLength=i,s.TYPED_ARRAY_SUPPORT=n(),!s.TYPED_ARRAY_SUPPORT&&typeof console<\"u\"&&typeof console.error==\"function\"&&console.error(\"This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.\");function n(){try{let p=new Uint8Array(1),l={foo:function(){return 42}};return Object.setPrototypeOf(l,Uint8Array.prototype),Object.setPrototypeOf(p,l),p.foo()===42}catch{return !1}}Object.defineProperty(s.prototype,\"parent\",{enumerable:!0,get:function(){if(s.isBuffer(this))return this.buffer}}),Object.defineProperty(s.prototype,\"offset\",{enumerable:!0,get:function(){if(s.isBuffer(this))return this.byteOffset}});function o(p){if(p>i)throw new RangeError('The value \"'+p+'\" is invalid for option \"size\"');let l=new Uint8Array(p);return Object.setPrototypeOf(l,s.prototype),l}function s(p,l,f){if(typeof p==\"number\"){if(typeof l==\"string\")throw new TypeError('The \"string\" argument must be of type string. Received type number');return h(p)}return a(p,l,f)}s.poolSize=8192;function a(p,l,f){if(typeof p==\"string\")return d(p,l);if(ArrayBuffer.isView(p))return y(p);if(p==null)throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof p);if(Ye(p,ArrayBuffer)||p&&Ye(p.buffer,ArrayBuffer)||typeof SharedArrayBuffer<\"u\"&&(Ye(p,SharedArrayBuffer)||p&&Ye(p.buffer,SharedArrayBuffer)))return w(p,l,f);if(typeof p==\"number\")throw new TypeError('The \"value\" argument must not be of type number. Received type number');let b=p.valueOf&&p.valueOf();if(b!=null&&b!==p)return s.from(b,l,f);let A=E(p);if(A)return A;if(typeof Symbol<\"u\"&&Symbol.toPrimitive!=null&&typeof p[Symbol.toPrimitive]==\"function\")return s.from(p[Symbol.toPrimitive](\"string\"),l,f);throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof p)}s.from=function(p,l,f){return a(p,l,f)},Object.setPrototypeOf(s.prototype,Uint8Array.prototype),Object.setPrototypeOf(s,Uint8Array);function u(p){if(typeof p!=\"number\")throw new TypeError('\"size\" argument must be of type number');if(p<0)throw new RangeError('The value \"'+p+'\" is invalid for option \"size\"')}function c(p,l,f){return u(p),p<=0?o(p):l!==void 0?typeof f==\"string\"?o(p).fill(l,f):o(p).fill(l):o(p)}s.alloc=function(p,l,f){return c(p,l,f)};function h(p){return u(p),o(p<0?0:S(p)|0)}s.allocUnsafe=function(p){return h(p)},s.allocUnsafeSlow=function(p){return h(p)};function d(p,l){if((typeof l!=\"string\"||l===\"\")&&(l=\"utf8\"),!s.isEncoding(l))throw new TypeError(\"Unknown encoding: \"+l);let f=C(p,l)|0,b=o(f),A=b.write(p,l);return A!==f&&(b=b.slice(0,A)),b}function g(p){let l=p.length<0?0:S(p.length)|0,f=o(l);for(let b=0;b=i)throw new RangeError(\"Attempt to allocate Buffer larger than maximum size: 0x\"+i.toString(16)+\" bytes\");return p|0}function I(p){return +p!=p&&(p=0),s.alloc(+p)}s.isBuffer=function(l){return l!=null&&l._isBuffer===!0&&l!==s.prototype},s.compare=function(l,f){if(Ye(l,Uint8Array)&&(l=s.from(l,l.offset,l.byteLength)),Ye(f,Uint8Array)&&(f=s.from(f,f.offset,f.byteLength)),!s.isBuffer(l)||!s.isBuffer(f))throw new TypeError('The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array');if(l===f)return 0;let b=l.length,A=f.length;for(let T=0,O=Math.min(b,A);TA.length?(s.isBuffer(O)||(O=s.from(O)),O.copy(A,T)):Uint8Array.prototype.set.call(A,O,T);else if(s.isBuffer(O))O.copy(A,T);else throw new TypeError('\"list\" argument must be an Array of Buffers');T+=O.length;}return A};function C(p,l){if(s.isBuffer(p))return p.length;if(ArrayBuffer.isView(p)||Ye(p,ArrayBuffer))return p.byteLength;if(typeof p!=\"string\")throw new TypeError('The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof p);let f=p.length,b=arguments.length>2&&arguments[2]===!0;if(!b&&f===0)return 0;let A=!1;for(;;)switch(l){case\"ascii\":case\"latin1\":case\"binary\":return f;case\"utf8\":case\"utf-8\":return cs(p).length;case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return f*2;case\"hex\":return f>>>1;case\"base64\":return Cl(p).length;default:if(A)return b?-1:cs(p).length;l=(\"\"+l).toLowerCase(),A=!0;}}s.byteLength=C;function R(p,l,f){let b=!1;if((l===void 0||l<0)&&(l=0),l>this.length||((f===void 0||f>this.length)&&(f=this.length),f<=0)||(f>>>=0,l>>>=0,f<=l))return \"\";for(p||(p=\"utf8\");;)switch(p){case\"hex\":return Ng(this,l,f);case\"utf8\":case\"utf-8\":return Cr(this,l,f);case\"ascii\":return us(this,l,f);case\"latin1\":case\"binary\":return Ug(this,l,f);case\"base64\":return pe(this,l,f);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return qg(this,l,f);default:if(b)throw new TypeError(\"Unknown encoding: \"+p);p=(p+\"\").toLowerCase(),b=!0;}}s.prototype._isBuffer=!0;function U(p,l,f){let b=p[l];p[l]=p[f],p[f]=b;}s.prototype.swap16=function(){let l=this.length;if(l%2!==0)throw new RangeError(\"Buffer size must be a multiple of 16-bits\");for(let f=0;ff&&(l+=\" ... \"),\"\"},r&&(s.prototype[r]=s.prototype.inspect),s.prototype.compare=function(l,f,b,A,T){if(Ye(l,Uint8Array)&&(l=s.from(l,l.offset,l.byteLength)),!s.isBuffer(l))throw new TypeError('The \"target\" argument must be one of type Buffer or Uint8Array. Received type '+typeof l);if(f===void 0&&(f=0),b===void 0&&(b=l?l.length:0),A===void 0&&(A=0),T===void 0&&(T=this.length),f<0||b>l.length||A<0||T>this.length)throw new RangeError(\"out of range index\");if(A>=T&&f>=b)return 0;if(A>=T)return -1;if(f>=b)return 1;if(f>>>=0,b>>>=0,A>>>=0,T>>>=0,this===l)return 0;let O=T-A,$=b-f,se=Math.min(O,$),te=this.slice(A,T),oe=l.slice(f,b);for(let J=0;J2147483647?f=2147483647:f<-2147483648&&(f=-2147483648),f=+f,hs(f)&&(f=A?0:p.length-1),f<0&&(f=p.length+f),f>=p.length){if(A)return -1;f=p.length-1;}else if(f<0)if(A)f=0;else return -1;if(typeof l==\"string\"&&(l=s.from(l,b)),s.isBuffer(l))return l.length===0?-1:W(p,l,f,b,A);if(typeof l==\"number\")return l=l&255,typeof Uint8Array.prototype.indexOf==\"function\"?A?Uint8Array.prototype.indexOf.call(p,l,f):Uint8Array.prototype.lastIndexOf.call(p,l,f):W(p,[l],f,b,A);throw new TypeError(\"val must be string, number or Buffer\")}function W(p,l,f,b,A){let T=1,O=p.length,$=l.length;if(b!==void 0&&(b=String(b).toLowerCase(),b===\"ucs2\"||b===\"ucs-2\"||b===\"utf16le\"||b===\"utf-16le\")){if(p.length<2||l.length<2)return -1;T=2,O/=2,$/=2,f/=2;}function se(oe,J){return T===1?oe[J]:oe.readUInt16BE(J*T)}let te;if(A){let oe=-1;for(te=f;teO&&(f=O-$),te=f;te>=0;te--){let oe=!0;for(let J=0;J<$;J++)if(se(p,te+J)!==se(l,J)){oe=!1;break}if(oe)return te}return -1}s.prototype.includes=function(l,f,b){return this.indexOf(l,f,b)!==-1},s.prototype.indexOf=function(l,f,b){return N(this,l,f,b,!0)},s.prototype.lastIndexOf=function(l,f,b){return N(this,l,f,b,!1)};function K(p,l,f,b){f=Number(f)||0;let A=p.length-f;b?(b=Number(b),b>A&&(b=A)):b=A;let T=l.length;b>T/2&&(b=T/2);let O;for(O=0;O>>0,isFinite(b)?(b=b>>>0,A===void 0&&(A=\"utf8\")):(A=b,b=void 0);else throw new Error(\"Buffer.write(string, encoding, offset[, length]) is no longer supported\");let T=this.length-f;if((b===void 0||b>T)&&(b=T),l.length>0&&(b<0||f<0)||f>this.length)throw new RangeError(\"Attempt to write outside buffer bounds\");A||(A=\"utf8\");let O=!1;for(;;)switch(A){case\"hex\":return K(this,l,f,b);case\"utf8\":case\"utf-8\":return z(this,l,f,b);case\"ascii\":case\"latin1\":case\"binary\":return Q(this,l,f,b);case\"base64\":return de(this,l,f,b);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return Gt(this,l,f,b);default:if(O)throw new TypeError(\"Unknown encoding: \"+A);A=(\"\"+A).toLowerCase(),O=!0;}},s.prototype.toJSON=function(){return {type:\"Buffer\",data:Array.prototype.slice.call(this._arr||this,0)}};function pe(p,l,f){return l===0&&f===p.length?t.fromByteArray(p):t.fromByteArray(p.slice(l,f))}function Cr(p,l,f){f=Math.min(p.length,f);let b=[],A=l;for(;A239?4:T>223?3:T>191?2:1;if(A+$<=f){let se,te,oe,J;switch($){case 1:T<128&&(O=T);break;case 2:se=p[A+1],(se&192)===128&&(J=(T&31)<<6|se&63,J>127&&(O=J));break;case 3:se=p[A+1],te=p[A+2],(se&192)===128&&(te&192)===128&&(J=(T&15)<<12|(se&63)<<6|te&63,J>2047&&(J<55296||J>57343)&&(O=J));break;case 4:se=p[A+1],te=p[A+2],oe=p[A+3],(se&192)===128&&(te&192)===128&&(oe&192)===128&&(J=(T&15)<<18|(se&63)<<12|(te&63)<<6|oe&63,J>65535&&J<1114112&&(O=J));}}O===null?(O=65533,$=1):O>65535&&(O-=65536,b.push(O>>>10&1023|55296),O=56320|O&1023),b.push(O),A+=$;}return Pr(b)}let Br=4096;function Pr(p){let l=p.length;if(l<=Br)return String.fromCharCode.apply(String,p);let f=\"\",b=0;for(;bb)&&(f=b);let A=\"\";for(let T=l;Tb&&(l=b),f<0?(f+=b,f<0&&(f=0)):f>b&&(f=b),ff)throw new RangeError(\"Trying to access beyond buffer length\")}s.prototype.readUintLE=s.prototype.readUIntLE=function(l,f,b){l=l>>>0,f=f>>>0,b||ge(l,f,this.length);let A=this[l],T=1,O=0;for(;++O>>0,f=f>>>0,b||ge(l,f,this.length);let A=this[l+--f],T=1;for(;f>0&&(T*=256);)A+=this[l+--f]*T;return A},s.prototype.readUint8=s.prototype.readUInt8=function(l,f){return l=l>>>0,f||ge(l,1,this.length),this[l]},s.prototype.readUint16LE=s.prototype.readUInt16LE=function(l,f){return l=l>>>0,f||ge(l,2,this.length),this[l]|this[l+1]<<8},s.prototype.readUint16BE=s.prototype.readUInt16BE=function(l,f){return l=l>>>0,f||ge(l,2,this.length),this[l]<<8|this[l+1]},s.prototype.readUint32LE=s.prototype.readUInt32LE=function(l,f){return l=l>>>0,f||ge(l,4,this.length),(this[l]|this[l+1]<<8|this[l+2]<<16)+this[l+3]*16777216},s.prototype.readUint32BE=s.prototype.readUInt32BE=function(l,f){return l=l>>>0,f||ge(l,4,this.length),this[l]*16777216+(this[l+1]<<16|this[l+2]<<8|this[l+3])},s.prototype.readBigUInt64LE=xt(function(l){l=l>>>0,kr(l,\"offset\");let f=this[l],b=this[l+7];(f===void 0||b===void 0)&&li(l,this.length-8);let A=f+this[++l]*2**8+this[++l]*2**16+this[++l]*2**24,T=this[++l]+this[++l]*2**8+this[++l]*2**16+b*2**24;return BigInt(A)+(BigInt(T)<>>0,kr(l,\"offset\");let f=this[l],b=this[l+7];(f===void 0||b===void 0)&&li(l,this.length-8);let A=f*2**24+this[++l]*2**16+this[++l]*2**8+this[++l],T=this[++l]*2**24+this[++l]*2**16+this[++l]*2**8+b;return (BigInt(A)<>>0,f=f>>>0,b||ge(l,f,this.length);let A=this[l],T=1,O=0;for(;++O=T&&(A-=Math.pow(2,8*f)),A},s.prototype.readIntBE=function(l,f,b){l=l>>>0,f=f>>>0,b||ge(l,f,this.length);let A=f,T=1,O=this[l+--A];for(;A>0&&(T*=256);)O+=this[l+--A]*T;return T*=128,O>=T&&(O-=Math.pow(2,8*f)),O},s.prototype.readInt8=function(l,f){return l=l>>>0,f||ge(l,1,this.length),this[l]&128?(255-this[l]+1)*-1:this[l]},s.prototype.readInt16LE=function(l,f){l=l>>>0,f||ge(l,2,this.length);let b=this[l]|this[l+1]<<8;return b&32768?b|4294901760:b},s.prototype.readInt16BE=function(l,f){l=l>>>0,f||ge(l,2,this.length);let b=this[l+1]|this[l]<<8;return b&32768?b|4294901760:b},s.prototype.readInt32LE=function(l,f){return l=l>>>0,f||ge(l,4,this.length),this[l]|this[l+1]<<8|this[l+2]<<16|this[l+3]<<24},s.prototype.readInt32BE=function(l,f){return l=l>>>0,f||ge(l,4,this.length),this[l]<<24|this[l+1]<<16|this[l+2]<<8|this[l+3]},s.prototype.readBigInt64LE=xt(function(l){l=l>>>0,kr(l,\"offset\");let f=this[l],b=this[l+7];(f===void 0||b===void 0)&&li(l,this.length-8);let A=this[l+4]+this[l+5]*2**8+this[l+6]*2**16+(b<<24);return (BigInt(A)<>>0,kr(l,\"offset\");let f=this[l],b=this[l+7];(f===void 0||b===void 0)&&li(l,this.length-8);let A=(f<<24)+this[++l]*2**16+this[++l]*2**8+this[++l];return (BigInt(A)<>>0,f||ge(l,4,this.length),e.read(this,l,!0,23,4)},s.prototype.readFloatBE=function(l,f){return l=l>>>0,f||ge(l,4,this.length),e.read(this,l,!1,23,4)},s.prototype.readDoubleLE=function(l,f){return l=l>>>0,f||ge(l,8,this.length),e.read(this,l,!0,52,8)},s.prototype.readDoubleBE=function(l,f){return l=l>>>0,f||ge(l,8,this.length),e.read(this,l,!1,52,8)};function Ce(p,l,f,b,A,T){if(!s.isBuffer(p))throw new TypeError('\"buffer\" argument must be a Buffer instance');if(l>A||lp.length)throw new RangeError(\"Index out of range\")}s.prototype.writeUintLE=s.prototype.writeUIntLE=function(l,f,b,A){if(l=+l,f=f>>>0,b=b>>>0,!A){let $=Math.pow(2,8*b)-1;Ce(this,l,f,b,$,0);}let T=1,O=0;for(this[f]=l&255;++O>>0,b=b>>>0,!A){let $=Math.pow(2,8*b)-1;Ce(this,l,f,b,$,0);}let T=b-1,O=1;for(this[f+T]=l&255;--T>=0&&(O*=256);)this[f+T]=l/O&255;return f+b},s.prototype.writeUint8=s.prototype.writeUInt8=function(l,f,b){return l=+l,f=f>>>0,b||Ce(this,l,f,1,255,0),this[f]=l&255,f+1},s.prototype.writeUint16LE=s.prototype.writeUInt16LE=function(l,f,b){return l=+l,f=f>>>0,b||Ce(this,l,f,2,65535,0),this[f]=l&255,this[f+1]=l>>>8,f+2},s.prototype.writeUint16BE=s.prototype.writeUInt16BE=function(l,f,b){return l=+l,f=f>>>0,b||Ce(this,l,f,2,65535,0),this[f]=l>>>8,this[f+1]=l&255,f+2},s.prototype.writeUint32LE=s.prototype.writeUInt32LE=function(l,f,b){return l=+l,f=f>>>0,b||Ce(this,l,f,4,4294967295,0),this[f+3]=l>>>24,this[f+2]=l>>>16,this[f+1]=l>>>8,this[f]=l&255,f+4},s.prototype.writeUint32BE=s.prototype.writeUInt32BE=function(l,f,b){return l=+l,f=f>>>0,b||Ce(this,l,f,4,4294967295,0),this[f]=l>>>24,this[f+1]=l>>>16,this[f+2]=l>>>8,this[f+3]=l&255,f+4};function vl(p,l,f,b,A){Rl(l,b,A,p,f,7);let T=Number(l&BigInt(4294967295));p[f++]=T,T=T>>8,p[f++]=T,T=T>>8,p[f++]=T,T=T>>8,p[f++]=T;let O=Number(l>>BigInt(32)&BigInt(4294967295));return p[f++]=O,O=O>>8,p[f++]=O,O=O>>8,p[f++]=O,O=O>>8,p[f++]=O,f}function El(p,l,f,b,A){Rl(l,b,A,p,f,7);let T=Number(l&BigInt(4294967295));p[f+7]=T,T=T>>8,p[f+6]=T,T=T>>8,p[f+5]=T,T=T>>8,p[f+4]=T;let O=Number(l>>BigInt(32)&BigInt(4294967295));return p[f+3]=O,O=O>>8,p[f+2]=O,O=O>>8,p[f+1]=O,O=O>>8,p[f]=O,f+8}s.prototype.writeBigUInt64LE=xt(function(l,f=0){return vl(this,l,f,BigInt(0),BigInt(\"0xffffffffffffffff\"))}),s.prototype.writeBigUInt64BE=xt(function(l,f=0){return El(this,l,f,BigInt(0),BigInt(\"0xffffffffffffffff\"))}),s.prototype.writeIntLE=function(l,f,b,A){if(l=+l,f=f>>>0,!A){let se=Math.pow(2,8*b-1);Ce(this,l,f,b,se-1,-se);}let T=0,O=1,$=0;for(this[f]=l&255;++T>0)-$&255;return f+b},s.prototype.writeIntBE=function(l,f,b,A){if(l=+l,f=f>>>0,!A){let se=Math.pow(2,8*b-1);Ce(this,l,f,b,se-1,-se);}let T=b-1,O=1,$=0;for(this[f+T]=l&255;--T>=0&&(O*=256);)l<0&&$===0&&this[f+T+1]!==0&&($=1),this[f+T]=(l/O>>0)-$&255;return f+b},s.prototype.writeInt8=function(l,f,b){return l=+l,f=f>>>0,b||Ce(this,l,f,1,127,-128),l<0&&(l=255+l+1),this[f]=l&255,f+1},s.prototype.writeInt16LE=function(l,f,b){return l=+l,f=f>>>0,b||Ce(this,l,f,2,32767,-32768),this[f]=l&255,this[f+1]=l>>>8,f+2},s.prototype.writeInt16BE=function(l,f,b){return l=+l,f=f>>>0,b||Ce(this,l,f,2,32767,-32768),this[f]=l>>>8,this[f+1]=l&255,f+2},s.prototype.writeInt32LE=function(l,f,b){return l=+l,f=f>>>0,b||Ce(this,l,f,4,2147483647,-2147483648),this[f]=l&255,this[f+1]=l>>>8,this[f+2]=l>>>16,this[f+3]=l>>>24,f+4},s.prototype.writeInt32BE=function(l,f,b){return l=+l,f=f>>>0,b||Ce(this,l,f,4,2147483647,-2147483648),l<0&&(l=4294967295+l+1),this[f]=l>>>24,this[f+1]=l>>>16,this[f+2]=l>>>8,this[f+3]=l&255,f+4},s.prototype.writeBigInt64LE=xt(function(l,f=0){return vl(this,l,f,-BigInt(\"0x8000000000000000\"),BigInt(\"0x7fffffffffffffff\"))}),s.prototype.writeBigInt64BE=xt(function(l,f=0){return El(this,l,f,-BigInt(\"0x8000000000000000\"),BigInt(\"0x7fffffffffffffff\"))});function Sl(p,l,f,b,A,T){if(f+b>p.length)throw new RangeError(\"Index out of range\");if(f<0)throw new RangeError(\"Index out of range\")}function Al(p,l,f,b,A){return l=+l,f=f>>>0,A||Sl(p,l,f,4),e.write(p,l,f,b,23,4),f+4}s.prototype.writeFloatLE=function(l,f,b){return Al(this,l,f,!0,b)},s.prototype.writeFloatBE=function(l,f,b){return Al(this,l,f,!1,b)};function Il(p,l,f,b,A){return l=+l,f=f>>>0,A||Sl(p,l,f,8),e.write(p,l,f,b,52,8),f+8}s.prototype.writeDoubleLE=function(l,f,b){return Il(this,l,f,!0,b)},s.prototype.writeDoubleBE=function(l,f,b){return Il(this,l,f,!1,b)},s.prototype.copy=function(l,f,b,A){if(!s.isBuffer(l))throw new TypeError(\"argument should be a Buffer\");if(b||(b=0),!A&&A!==0&&(A=this.length),f>=l.length&&(f=l.length),f||(f=0),A>0&&A=this.length)throw new RangeError(\"Index out of range\");if(A<0)throw new RangeError(\"sourceEnd out of bounds\");A>this.length&&(A=this.length),l.length-f>>0,b=b===void 0?this.length:b>>>0,l||(l=0);let T;if(typeof l==\"number\")for(T=f;T2**32?A=Tl(String(f)):typeof f==\"bigint\"&&(A=String(f),(f>BigInt(2)**BigInt(32)||f<-(BigInt(2)**BigInt(32)))&&(A=Tl(A)),A+=\"n\"),b+=` It must be ${l}. Received ${A}`,b},RangeError);function Tl(p){let l=\"\",f=p.length,b=p[0]===\"-\"?1:0;for(;f>=b+4;f-=3)l=`_${p.slice(f-3,f)}${l}`;return `${p.slice(0,f)}${l}`}function Dg(p,l,f){kr(l,\"offset\"),(p[l]===void 0||p[l+f]===void 0)&&li(l,p.length-(f+1));}function Rl(p,l,f,b,A,T){if(p>f||p3?l===0||l===BigInt(0)?$=`>= 0${O} and < 2${O} ** ${(T+1)*8}${O}`:$=`>= -(2${O} ** ${(T+1)*8-1}${O}) and < 2 ** ${(T+1)*8-1}${O}`:$=`>= ${l}${O} and <= ${f}${O}`,new Or.ERR_OUT_OF_RANGE(\"value\",$,p)}Dg(b,A,T);}function kr(p,l){if(typeof p!=\"number\")throw new Or.ERR_INVALID_ARG_TYPE(l,\"number\",p)}function li(p,l,f){throw Math.floor(p)!==p?(kr(p,f),new Or.ERR_OUT_OF_RANGE(f||\"offset\",\"an integer\",p)):l<0?new Or.ERR_BUFFER_OUT_OF_BOUNDS:new Or.ERR_OUT_OF_RANGE(f||\"offset\",`>= ${f?1:0} and <= ${l}`,p)}let jg=/[^+/0-9A-Za-z-_]/g;function Fg(p){if(p=p.split(\"=\")[0],p=p.trim().replace(jg,\"\"),p.length<2)return \"\";for(;p.length%4!==0;)p=p+\"=\";return p}function cs(p,l){l=l||1/0;let f,b=p.length,A=null,T=[];for(let O=0;O55295&&f<57344){if(!A){if(f>56319){(l-=3)>-1&&T.push(239,191,189);continue}else if(O+1===b){(l-=3)>-1&&T.push(239,191,189);continue}A=f;continue}if(f<56320){(l-=3)>-1&&T.push(239,191,189),A=f;continue}f=(A-55296<<10|f-56320)+65536;}else A&&(l-=3)>-1&&T.push(239,191,189);if(A=null,f<128){if((l-=1)<0)break;T.push(f);}else if(f<2048){if((l-=2)<0)break;T.push(f>>6|192,f&63|128);}else if(f<65536){if((l-=3)<0)break;T.push(f>>12|224,f>>6&63|128,f&63|128);}else if(f<1114112){if((l-=4)<0)break;T.push(f>>18|240,f>>12&63|128,f>>6&63|128,f&63|128);}else throw new Error(\"Invalid code point\")}return T}function Wg(p){let l=[];for(let f=0;f>8,A=f%256,T.push(A),T.push(b);return T}function Cl(p){return t.toByteArray(Fg(p))}function qi(p,l,f,b){let A;for(A=0;A=l.length||A>=p.length);++A)l[A+f]=p[A];return A}function Ye(p,l){return p instanceof l||p!=null&&p.constructor!=null&&p.constructor.name!=null&&p.constructor.name===l.name}function hs(p){return p!==p}let Hg=function(){let p=\"0123456789abcdef\",l=new Array(256);for(let f=0;f<16;++f){let b=f*16;for(let A=0;A<16;++A)l[b+A]=p[f]+p[A];}return l}();function xt(p){return typeof BigInt>\"u\"?Vg:p}function Vg(){throw new Error(\"BigInt not supported\")}return Jt}var ui,Vu,Wi,zu,Jt,Ku,Lt,x,ey,ty,ye=we(()=>{v();m();_();ui={},Vu=!1;Wi={},zu=!1;Jt={},Ku=!1;Lt=Zg();Lt.Buffer;Lt.SlowBuffer;Lt.INSPECT_MAX_BYTES;Lt.kMaxLength;x=Lt.Buffer,ey=Lt.INSPECT_MAX_BYTES,ty=Lt.kMaxLength;});var v=we(()=>{ye();});var Gu=M(ws=>{v();m();_();Object.defineProperty(ws,\"__esModule\",{value:!0});var bs=class{constructor(e){this.aliasToTopic={},this.max=e;}put(e,r){return r===0||r>this.max?!1:(this.aliasToTopic[r]=e,this.length=Object.keys(this.aliasToTopic).length,!0)}getTopicByAlias(e){return this.aliasToTopic[e]}clear(){this.aliasToTopic={};}};ws.default=bs;});var ce=M((PA,Qu)=>{v();m();_();Qu.exports={ArrayIsArray(t){return Array.isArray(t)},ArrayPrototypeIncludes(t,e){return t.includes(e)},ArrayPrototypeIndexOf(t,e){return t.indexOf(e)},ArrayPrototypeJoin(t,e){return t.join(e)},ArrayPrototypeMap(t,e){return t.map(e)},ArrayPrototypePop(t,e){return t.pop(e)},ArrayPrototypePush(t,e){return t.push(e)},ArrayPrototypeSlice(t,e,r){return t.slice(e,r)},Error,FunctionPrototypeCall(t,e,...r){return t.call(e,...r)},FunctionPrototypeSymbolHasInstance(t,e){return Function.prototype[Symbol.hasInstance].call(t,e)},MathFloor:Math.floor,Number,NumberIsInteger:Number.isInteger,NumberIsNaN:Number.isNaN,NumberMAX_SAFE_INTEGER:Number.MAX_SAFE_INTEGER,NumberMIN_SAFE_INTEGER:Number.MIN_SAFE_INTEGER,NumberParseInt:Number.parseInt,ObjectDefineProperties(t,e){return Object.defineProperties(t,e)},ObjectDefineProperty(t,e,r){return Object.defineProperty(t,e,r)},ObjectGetOwnPropertyDescriptor(t,e){return Object.getOwnPropertyDescriptor(t,e)},ObjectKeys(t){return Object.keys(t)},ObjectSetPrototypeOf(t,e){return Object.setPrototypeOf(t,e)},Promise,PromisePrototypeCatch(t,e){return t.catch(e)},PromisePrototypeThen(t,e,r){return t.then(e,r)},PromiseReject(t){return Promise.reject(t)},ReflectApply:Reflect.apply,RegExpPrototypeTest(t,e){return t.test(e)},SafeSet:Set,String,StringPrototypeSlice(t,e,r){return t.slice(e,r)},StringPrototypeToLowerCase(t){return t.toLowerCase()},StringPrototypeToUpperCase(t){return t.toUpperCase()},StringPrototypeTrim(t){return t.trim()},Symbol,SymbolFor:Symbol.for,SymbolAsyncIterator:Symbol.asyncIterator,SymbolHasInstance:Symbol.hasInstance,SymbolIterator:Symbol.iterator,TypedArrayPrototypeSet(t,e,r){return t.set(e,r)},Uint8Array};});var Je=M((jA,ms)=>{v();m();_();var ry=(ye(),X(_e)),iy=Object.getPrototypeOf(async function(){}).constructor,Yu=globalThis.Blob||ry.Blob,ny=typeof Yu<\"u\"?function(e){return e instanceof Yu}:function(e){return !1},_s=class extends Error{constructor(e){if(!Array.isArray(e))throw new TypeError(`Expected input to be an Array, got ${typeof e}`);let r=\"\";for(let i=0;i{t=i,e=n;}),resolve:t,reject:e}},promisify(t){return new Promise((e,r)=>{t((i,...n)=>i?r(i):e(...n));})},debuglog(){return function(){}},format(t,...e){return t.replace(/%([sdifj])/g,function(...[r,i]){let n=e.shift();return i===\"f\"?n.toFixed(6):i===\"j\"?JSON.stringify(n):i===\"s\"&&typeof n==\"object\"?`${n.constructor!==Object?n.constructor.name:\"\"} {}`.trim():n.toString()})},inspect(t){switch(typeof t){case\"string\":if(t.includes(\"'\"))if(t.includes('\"')){if(!t.includes(\"`\")&&!t.includes(\"${\"))return `\\`${t}\\``}else return `\"${t}\"`;return `'${t}'`;case\"number\":return isNaN(t)?\"NaN\":Object.is(t,-0)?String(t):t;case\"bigint\":return `${String(t)}n`;case\"boolean\":case\"undefined\":return String(t);case\"object\":return \"{}\"}},types:{isAsyncFunction(t){return t instanceof iy},isArrayBufferView(t){return ArrayBuffer.isView(t)}},isBlob:ny};ms.exports.promisify.custom=Symbol.for(\"nodejs.util.promisify.custom\");});var Hi=M((YA,$i)=>{v();m();_();var{AbortController:Ju,AbortSignal:sy}=typeof self<\"u\"?self:typeof window<\"u\"?window:void 0;$i.exports=Ju;$i.exports.AbortSignal=sy;$i.exports.default=Ju;});var Se=M((oI,ef)=>{v();m();_();var{format:oy,inspect:Vi,AggregateError:ay}=Je(),ly=globalThis.AggregateError||ay,uy=Symbol(\"kIsNodeError\"),fy=[\"string\",\"function\",\"number\",\"object\",\"Function\",\"Object\",\"boolean\",\"bigint\",\"symbol\"],cy=/^([A-Z][a-z0-9]*)+$/,hy=\"__node_internal_\",zi={};function Xt(t,e){if(!t)throw new zi.ERR_INTERNAL_ASSERTION(e)}function Xu(t){let e=\"\",r=t.length,i=t[0]===\"-\"?1:0;for(;r>=i+4;r-=3)e=`_${t.slice(r-3,r)}${e}`;return `${t.slice(0,r)}${e}`}function dy(t,e,r){if(typeof e==\"function\")return Xt(e.length<=r.length,`Code: ${t}; The provided arguments length (${r.length}) does not match the required ones (${e.length}).`),e(...r);let i=(e.match(/%[dfijoOs]/g)||[]).length;return Xt(i===r.length,`Code: ${t}; The provided arguments length (${r.length}) does not match the required ones (${i}).`),r.length===0?e:oy(e,...r)}function me(t,e,r){r||(r=Error);class i extends r{constructor(...o){super(dy(t,e,o));}toString(){return `${this.name} [${t}]: ${this.message}`}}Object.defineProperties(i.prototype,{name:{value:r.name,writable:!0,enumerable:!1,configurable:!0},toString:{value(){return `${this.name} [${t}]: ${this.message}`},writable:!0,enumerable:!1,configurable:!0}}),i.prototype.code=t,i.prototype[uy]=!0,zi[t]=i;}function Zu(t){let e=hy+t.name;return Object.defineProperty(t,\"name\",{value:e}),t}function py(t,e){if(t&&e&&t!==e){if(Array.isArray(e.errors))return e.errors.push(t),e;let r=new ly([e,t],e.message);return r.code=e.code,r}return t||e}var vs=class extends Error{constructor(e=\"The operation was aborted\",r=void 0){if(r!==void 0&&typeof r!=\"object\")throw new zi.ERR_INVALID_ARG_TYPE(\"options\",\"Object\",r);super(e,r),this.code=\"ABORT_ERR\",this.name=\"AbortError\";}};me(\"ERR_ASSERTION\",\"%s\",Error);me(\"ERR_INVALID_ARG_TYPE\",(t,e,r)=>{Xt(typeof t==\"string\",\"'name' must be a string\"),Array.isArray(e)||(e=[e]);let i=\"The \";t.endsWith(\" argument\")?i+=`${t} `:i+=`\"${t}\" ${t.includes(\".\")?\"property\":\"argument\"} `,i+=\"must be \";let n=[],o=[],s=[];for(let u of e)Xt(typeof u==\"string\",\"All expected entries have to be of type string\"),fy.includes(u)?n.push(u.toLowerCase()):cy.test(u)?o.push(u):(Xt(u!==\"object\",'The value \"object\" should be written as \"Object\"'),s.push(u));if(o.length>0){let u=n.indexOf(\"object\");u!==-1&&(n.splice(n,u,1),o.push(\"Object\"));}if(n.length>0){switch(n.length){case 1:i+=`of type ${n[0]}`;break;case 2:i+=`one of type ${n[0]} or ${n[1]}`;break;default:{let u=n.pop();i+=`one of type ${n.join(\", \")}, or ${u}`;}}(o.length>0||s.length>0)&&(i+=\" or \");}if(o.length>0){switch(o.length){case 1:i+=`an instance of ${o[0]}`;break;case 2:i+=`an instance of ${o[0]} or ${o[1]}`;break;default:{let u=o.pop();i+=`an instance of ${o.join(\", \")}, or ${u}`;}}s.length>0&&(i+=\" or \");}switch(s.length){case 0:break;case 1:s[0].toLowerCase()!==s[0]&&(i+=\"an \"),i+=`${s[0]}`;break;case 2:i+=`one of ${s[0]} or ${s[1]}`;break;default:{let u=s.pop();i+=`one of ${s.join(\", \")}, or ${u}`;}}if(r==null)i+=`. Received ${r}`;else if(typeof r==\"function\"&&r.name)i+=`. Received function ${r.name}`;else if(typeof r==\"object\"){var a;if((a=r.constructor)!==null&&a!==void 0&&a.name)i+=`. Received an instance of ${r.constructor.name}`;else {let u=Vi(r,{depth:-1});i+=`. Received ${u}`;}}else {let u=Vi(r,{colors:!1});u.length>25&&(u=`${u.slice(0,25)}...`),i+=`. Received type ${typeof r} (${u})`;}return i},TypeError);me(\"ERR_INVALID_ARG_VALUE\",(t,e,r=\"is invalid\")=>{let i=Vi(e);return i.length>128&&(i=i.slice(0,128)+\"...\"),`The ${t.includes(\".\")?\"property\":\"argument\"} '${t}' ${r}. Received ${i}`},TypeError);me(\"ERR_INVALID_RETURN_VALUE\",(t,e,r)=>{var i;let n=r!=null&&(i=r.constructor)!==null&&i!==void 0&&i.name?`instance of ${r.constructor.name}`:`type ${typeof r}`;return `Expected ${t} to be returned from the \"${e}\" function but got ${n}.`},TypeError);me(\"ERR_MISSING_ARGS\",(...t)=>{Xt(t.length>0,\"At least one arg needs to be specified\");let e,r=t.length;switch(t=(Array.isArray(t)?t:[t]).map(i=>`\"${i}\"`).join(\" or \"),r){case 1:e+=`The ${t[0]} argument`;break;case 2:e+=`The ${t[0]} and ${t[1]} arguments`;break;default:{let i=t.pop();e+=`The ${t.join(\", \")}, and ${i} arguments`;}break}return `${e} must be specified`},TypeError);me(\"ERR_OUT_OF_RANGE\",(t,e,r)=>{Xt(e,'Missing \"range\" argument');let i;return Number.isInteger(r)&&Math.abs(r)>2**32?i=Xu(String(r)):typeof r==\"bigint\"?(i=String(r),(r>2n**32n||r<-(2n**32n))&&(i=Xu(i)),i+=\"n\"):i=Vi(r),`The value of \"${t}\" is out of range. It must be ${e}. Received ${i}`},RangeError);me(\"ERR_MULTIPLE_CALLBACK\",\"Callback called multiple times\",Error);me(\"ERR_METHOD_NOT_IMPLEMENTED\",\"The %s method is not implemented\",Error);me(\"ERR_STREAM_ALREADY_FINISHED\",\"Cannot call %s after a stream was finished\",Error);me(\"ERR_STREAM_CANNOT_PIPE\",\"Cannot pipe, not readable\",Error);me(\"ERR_STREAM_DESTROYED\",\"Cannot call %s after a stream was destroyed\",Error);me(\"ERR_STREAM_NULL_VALUES\",\"May not write null values to stream\",TypeError);me(\"ERR_STREAM_PREMATURE_CLOSE\",\"Premature close\",Error);me(\"ERR_STREAM_PUSH_AFTER_EOF\",\"stream.push() after EOF\",Error);me(\"ERR_STREAM_UNSHIFT_AFTER_END_EVENT\",\"stream.unshift() after end event\",Error);me(\"ERR_STREAM_WRITE_AFTER_END\",\"write after end\",Error);me(\"ERR_UNKNOWN_ENCODING\",\"Unknown encoding: %s\",TypeError);ef.exports={AbortError:vs,aggregateTwoErrors:Zu(py),hideStackFrames:Zu,codes:zi};});var fi=M((yI,ff)=>{v();m();_();var{ArrayIsArray:Ss,ArrayPrototypeIncludes:sf,ArrayPrototypeJoin:of,ArrayPrototypeMap:gy,NumberIsInteger:As,NumberIsNaN:yy,NumberMAX_SAFE_INTEGER:by,NumberMIN_SAFE_INTEGER:wy,NumberParseInt:_y,ObjectPrototypeHasOwnProperty:my,RegExpPrototypeExec:af,String:vy,StringPrototypeToUpperCase:Ey,StringPrototypeTrim:Sy}=ce(),{hideStackFrames:Ue,codes:{ERR_SOCKET_BAD_PORT:Ay,ERR_INVALID_ARG_TYPE:Ae,ERR_INVALID_ARG_VALUE:Mr,ERR_OUT_OF_RANGE:Zt,ERR_UNKNOWN_SIGNAL:tf}}=Se(),{normalizeEncoding:Iy}=Je(),{isAsyncFunction:Ty,isArrayBufferView:Ry}=Je().types,rf={};function Cy(t){return t===(t|0)}function By(t){return t===t>>>0}var Py=/^[0-7]+$/,Oy=\"must be a 32-bit unsigned integer or an octal string\";function ky(t,e,r){if(typeof t>\"u\"&&(t=r),typeof t==\"string\"){if(af(Py,t)===null)throw new Mr(e,t,Oy);t=_y(t,8);}return lf(t,e),t}var xy=Ue((t,e,r=wy,i=by)=>{if(typeof t!=\"number\")throw new Ae(e,\"number\",t);if(!As(t))throw new Zt(e,\"an integer\",t);if(ti)throw new Zt(e,`>= ${r} && <= ${i}`,t)}),My=Ue((t,e,r=-2147483648,i=2147483647)=>{if(typeof t!=\"number\")throw new Ae(e,\"number\",t);if(!As(t))throw new Zt(e,\"an integer\",t);if(ti)throw new Zt(e,`>= ${r} && <= ${i}`,t)}),lf=Ue((t,e,r=!1)=>{if(typeof t!=\"number\")throw new Ae(e,\"number\",t);if(!As(t))throw new Zt(e,\"an integer\",t);let i=r?1:0,n=4294967295;if(tn)throw new Zt(e,`>= ${i} && <= ${n}`,t)});function Is(t,e){if(typeof t!=\"string\")throw new Ae(e,\"string\",t)}function Ly(t,e,r=void 0,i){if(typeof t!=\"number\")throw new Ae(e,\"number\",t);if(r!=null&&ti||(r!=null||i!=null)&&yy(t))throw new Zt(e,`${r!=null?`>= ${r}`:\"\"}${r!=null&&i!=null?\" && \":\"\"}${i!=null?`<= ${i}`:\"\"}`,t)}var Uy=Ue((t,e,r)=>{if(!sf(r,t)){let n=\"must be one of: \"+of(gy(r,o=>typeof o==\"string\"?`'${o}'`:vy(o)),\", \");throw new Mr(e,t,n)}});function uf(t,e){if(typeof t!=\"boolean\")throw new Ae(e,\"boolean\",t)}function Es(t,e,r){return t==null||!my(t,e)?r:t[e]}var Ny=Ue((t,e,r=null)=>{let i=Es(r,\"allowArray\",!1),n=Es(r,\"allowFunction\",!1);if(!Es(r,\"nullable\",!1)&&t===null||!i&&Ss(t)||typeof t!=\"object\"&&(!n||typeof t!=\"function\"))throw new Ae(e,\"Object\",t)}),qy=Ue((t,e)=>{if(t!=null&&typeof t!=\"object\"&&typeof t!=\"function\")throw new Ae(e,\"a dictionary\",t)}),Ts=Ue((t,e,r=0)=>{if(!Ss(t))throw new Ae(e,\"Array\",t);if(t.length{if(!Ry(t))throw new Ae(e,[\"Buffer\",\"TypedArray\",\"DataView\"],t)});function $y(t,e){let r=Iy(e),i=t.length;if(r===\"hex\"&&i%2!==0)throw new Mr(\"encoding\",e,`is invalid for data of length ${i}`)}function Hy(t,e=\"Port\",r=!0){if(typeof t!=\"number\"&&typeof t!=\"string\"||typeof t==\"string\"&&Sy(t).length===0||+t!==+t>>>0||t>65535||t===0&&!r)throw new Ay(e,t,r);return t|0}var Vy=Ue((t,e)=>{if(t!==void 0&&(t===null||typeof t!=\"object\"||!(\"aborted\"in t)))throw new Ae(e,\"AbortSignal\",t)}),zy=Ue((t,e)=>{if(typeof t!=\"function\")throw new Ae(e,\"Function\",t)}),Ky=Ue((t,e)=>{if(typeof t!=\"function\"||Ty(t))throw new Ae(e,\"Function\",t)}),Gy=Ue((t,e)=>{if(t!==void 0)throw new Ae(e,\"undefined\",t)});function Qy(t,e,r){if(!sf(r,t))throw new Ae(e,`('${of(r,\"|\")}')`,t)}var Yy=/^(?:<[^>]*>)(?:\\s*;\\s*[^;\"\\s]+(?:=(\")?[^;\"\\s]*\\1)?)*$/;function nf(t,e){if(typeof t>\"u\"||!af(Yy,t))throw new Mr(e,t,'must be an array or string of format \"; rel=preload; as=style\"')}function Jy(t){if(typeof t==\"string\")return nf(t,\"hints\"),t;if(Ss(t)){let e=t.length,r=\"\";if(e===0)return r;for(let i=0;i; rel=preload; as=style\"')}ff.exports={isInt32:Cy,isUint32:By,parseFileMode:ky,validateArray:Ts,validateStringArray:Dy,validateBooleanArray:jy,validateBoolean:uf,validateBuffer:Wy,validateDictionary:qy,validateEncoding:$y,validateFunction:zy,validateInt32:My,validateInteger:xy,validateNumber:Ly,validateObject:Ny,validateOneOf:Uy,validatePlainFunction:Ky,validatePort:Hy,validateSignalName:Fy,validateString:Is,validateUint32:lf,validateUndefined:Gy,validateUnion:Qy,validateAbortSignal:Vy,validateLinkHeaderValue:Jy};});var Ut=M((TI,pf)=>{v();m();_();var ae=pf.exports={},Xe,Ze;function Rs(){throw new Error(\"setTimeout has not been defined\")}function Cs(){throw new Error(\"clearTimeout has not been defined\")}(function(){try{typeof setTimeout==\"function\"?Xe=setTimeout:Xe=Rs;}catch{Xe=Rs;}try{typeof clearTimeout==\"function\"?Ze=clearTimeout:Ze=Cs;}catch{Ze=Cs;}})();function cf(t){if(Xe===setTimeout)return setTimeout(t,0);if((Xe===Rs||!Xe)&&setTimeout)return Xe=setTimeout,setTimeout(t,0);try{return Xe(t,0)}catch{try{return Xe.call(null,t,0)}catch{return Xe.call(this,t,0)}}}function Xy(t){if(Ze===clearTimeout)return clearTimeout(t);if((Ze===Cs||!Ze)&&clearTimeout)return Ze=clearTimeout,clearTimeout(t);try{return Ze(t)}catch{try{return Ze.call(null,t)}catch{return Ze.call(this,t)}}}var wt=[],Lr=!1,er,Ki=-1;function Zy(){!Lr||!er||(Lr=!1,er.length?wt=er.concat(wt):Ki=-1,wt.length&&hf());}function hf(){if(!Lr){var t=cf(Zy);Lr=!0;for(var e=wt.length;e;){for(er=wt,wt=[];++Ki1)for(var r=1;r{v();m();_();var{Symbol:Gi,SymbolAsyncIterator:gf,SymbolIterator:yf,SymbolFor:bf}=ce(),wf=Gi(\"kDestroyed\"),_f=Gi(\"kIsErrored\"),Bs=Gi(\"kIsReadable\"),mf=Gi(\"kIsDisturbed\"),eb=bf(\"nodejs.webstream.isClosedPromise\"),tb=bf(\"nodejs.webstream.controllerErrorFunction\");function Qi(t,e=!1){var r;return !!(t&&typeof t.pipe==\"function\"&&typeof t.on==\"function\"&&(!e||typeof t.pause==\"function\"&&typeof t.resume==\"function\")&&(!t._writableState||((r=t._readableState)===null||r===void 0?void 0:r.readable)!==!1)&&(!t._writableState||t._readableState))}function Yi(t){var e;return !!(t&&typeof t.write==\"function\"&&typeof t.on==\"function\"&&(!t._readableState||((e=t._writableState)===null||e===void 0?void 0:e.writable)!==!1))}function rb(t){return !!(t&&typeof t.pipe==\"function\"&&t._readableState&&typeof t.on==\"function\"&&typeof t.write==\"function\")}function et(t){return t&&(t._readableState||t._writableState||typeof t.write==\"function\"&&typeof t.on==\"function\"||typeof t.pipe==\"function\"&&typeof t.on==\"function\")}function vf(t){return !!(t&&!et(t)&&typeof t.pipeThrough==\"function\"&&typeof t.getReader==\"function\"&&typeof t.cancel==\"function\")}function Ef(t){return !!(t&&!et(t)&&typeof t.getWriter==\"function\"&&typeof t.abort==\"function\")}function Sf(t){return !!(t&&!et(t)&&typeof t.readable==\"object\"&&typeof t.writable==\"object\")}function ib(t){return vf(t)||Ef(t)||Sf(t)}function nb(t,e){return t==null?!1:e===!0?typeof t[gf]==\"function\":e===!1?typeof t[yf]==\"function\":typeof t[gf]==\"function\"||typeof t[yf]==\"function\"}function Ji(t){if(!et(t))return null;let e=t._writableState,r=t._readableState,i=e||r;return !!(t.destroyed||t[wf]||i!=null&&i.destroyed)}function Af(t){if(!Yi(t))return null;if(t.writableEnded===!0)return !0;let e=t._writableState;return e!=null&&e.errored?!1:typeof e?.ended!=\"boolean\"?null:e.ended}function sb(t,e){if(!Yi(t))return null;if(t.writableFinished===!0)return !0;let r=t._writableState;return r!=null&&r.errored?!1:typeof r?.finished!=\"boolean\"?null:!!(r.finished||e===!1&&r.ended===!0&&r.length===0)}function ob(t){if(!Qi(t))return null;if(t.readableEnded===!0)return !0;let e=t._readableState;return !e||e.errored?!1:typeof e?.ended!=\"boolean\"?null:e.ended}function If(t,e){if(!Qi(t))return null;let r=t._readableState;return r!=null&&r.errored?!1:typeof r?.endEmitted!=\"boolean\"?null:!!(r.endEmitted||e===!1&&r.ended===!0&&r.length===0)}function Tf(t){return t&&t[Bs]!=null?t[Bs]:typeof t?.readable!=\"boolean\"?null:Ji(t)?!1:Qi(t)&&t.readable&&!If(t)}function Rf(t){return typeof t?.writable!=\"boolean\"?null:Ji(t)?!1:Yi(t)&&t.writable&&!Af(t)}function ab(t,e){return et(t)?Ji(t)?!0:!(e?.readable!==!1&&Tf(t)||e?.writable!==!1&&Rf(t)):null}function lb(t){var e,r;return et(t)?t.writableErrored?t.writableErrored:(e=(r=t._writableState)===null||r===void 0?void 0:r.errored)!==null&&e!==void 0?e:null:null}function ub(t){var e,r;return et(t)?t.readableErrored?t.readableErrored:(e=(r=t._readableState)===null||r===void 0?void 0:r.errored)!==null&&e!==void 0?e:null:null}function fb(t){if(!et(t))return null;if(typeof t.closed==\"boolean\")return t.closed;let e=t._writableState,r=t._readableState;return typeof e?.closed==\"boolean\"||typeof r?.closed==\"boolean\"?e?.closed||r?.closed:typeof t._closed==\"boolean\"&&Cf(t)?t._closed:null}function Cf(t){return typeof t._closed==\"boolean\"&&typeof t._defaultKeepAlive==\"boolean\"&&typeof t._removedConnection==\"boolean\"&&typeof t._removedContLen==\"boolean\"}function Bf(t){return typeof t._sent100==\"boolean\"&&Cf(t)}function cb(t){var e;return typeof t._consuming==\"boolean\"&&typeof t._dumped==\"boolean\"&&((e=t.req)===null||e===void 0?void 0:e.upgradeOrConnect)===void 0}function hb(t){if(!et(t))return null;let e=t._writableState,r=t._readableState,i=e||r;return !i&&Bf(t)||!!(i&&i.autoDestroy&&i.emitClose&&i.closed===!1)}function db(t){var e;return !!(t&&((e=t[mf])!==null&&e!==void 0?e:t.readableDidRead||t.readableAborted))}function pb(t){var e,r,i,n,o,s,a,u,c,h;return !!(t&&((e=(r=(i=(n=(o=(s=t[_f])!==null&&s!==void 0?s:t.readableErrored)!==null&&o!==void 0?o:t.writableErrored)!==null&&n!==void 0?n:(a=t._readableState)===null||a===void 0?void 0:a.errorEmitted)!==null&&i!==void 0?i:(u=t._writableState)===null||u===void 0?void 0:u.errorEmitted)!==null&&r!==void 0?r:(c=t._readableState)===null||c===void 0?void 0:c.errored)!==null&&e!==void 0?e:!((h=t._writableState)===null||h===void 0)&&h.errored))}Pf.exports={kDestroyed:wf,isDisturbed:db,kIsDisturbed:mf,isErrored:pb,kIsErrored:_f,isReadable:Tf,kIsReadable:Bs,kIsClosedPromise:eb,kControllerErrorFunction:tb,isClosed:fb,isDestroyed:Ji,isDuplexNodeStream:rb,isFinished:ab,isIterable:nb,isReadableNodeStream:Qi,isReadableStream:vf,isReadableEnded:ob,isReadableFinished:If,isReadableErrored:ub,isNodeStream:et,isWebStream:ib,isWritable:Rf,isWritableNodeStream:Yi,isWritableStream:Ef,isWritableEnded:Af,isWritableFinished:sb,isWritableErrored:lb,isServerRequest:cb,isServerResponse:Bf,willEmitClose:hb,isTransformStream:Sf};});var mt=M((zI,Ms)=>{v();m();_();var Nt=Ut(),{AbortError:Df,codes:gb}=Se(),{ERR_INVALID_ARG_TYPE:yb,ERR_STREAM_PREMATURE_CLOSE:Of}=gb,{kEmptyObject:Os,once:ks}=Je(),{validateAbortSignal:bb,validateFunction:wb,validateObject:_b,validateBoolean:mb}=fi(),{Promise:vb,PromisePrototypeThen:Eb}=ce(),{isClosed:Sb,isReadable:kf,isReadableNodeStream:Ps,isReadableStream:Ab,isReadableFinished:xf,isReadableErrored:Mf,isWritable:Lf,isWritableNodeStream:Uf,isWritableStream:Ib,isWritableFinished:Nf,isWritableErrored:qf,isNodeStream:Tb,willEmitClose:Rb,kIsClosedPromise:Cb}=tt();function Bb(t){return t.setHeader&&typeof t.abort==\"function\"}var xs=()=>{};function jf(t,e,r){var i,n;if(arguments.length===2?(r=e,e=Os):e==null?e=Os:_b(e,\"options\"),wb(r,\"callback\"),bb(e.signal,\"options.signal\"),r=ks(r),Ab(t)||Ib(t))return Pb(t,e,r);if(!Tb(t))throw new yb(\"stream\",[\"ReadableStream\",\"WritableStream\",\"Stream\"],t);let o=(i=e.readable)!==null&&i!==void 0?i:Ps(t),s=(n=e.writable)!==null&&n!==void 0?n:Uf(t),a=t._writableState,u=t._readableState,c=()=>{t.writable||g();},h=Rb(t)&&Ps(t)===o&&Uf(t)===s,d=Nf(t,!1),g=()=>{d=!0,t.destroyed&&(h=!1),!(h&&(!t.readable||o))&&(!o||y)&&r.call(t);},y=xf(t,!1),w=()=>{y=!0,t.destroyed&&(h=!1),!(h&&(!t.writable||s))&&(!s||d)&&r.call(t);},E=N=>{r.call(t,N);},S=Sb(t),I=()=>{S=!0;let N=qf(t)||Mf(t);if(N&&typeof N!=\"boolean\")return r.call(t,N);if(o&&!y&&Ps(t,!0)&&!xf(t,!1))return r.call(t,new Of);if(s&&!d&&!Nf(t,!1))return r.call(t,new Of);r.call(t);},C=()=>{S=!0;let N=qf(t)||Mf(t);if(N&&typeof N!=\"boolean\")return r.call(t,N);r.call(t);},R=()=>{t.req.on(\"finish\",g);};Bb(t)?(t.on(\"complete\",g),h||t.on(\"abort\",I),t.req?R():t.on(\"request\",R)):s&&!a&&(t.on(\"end\",c),t.on(\"close\",c)),!h&&typeof t.aborted==\"boolean\"&&t.on(\"aborted\",I),t.on(\"end\",w),t.on(\"finish\",g),e.error!==!1&&t.on(\"error\",E),t.on(\"close\",I),S?Nt.nextTick(I):a!=null&&a.errorEmitted||u!=null&&u.errorEmitted?h||Nt.nextTick(C):(!o&&(!h||kf(t))&&(d||Lf(t)===!1)||!s&&(!h||Lf(t))&&(y||kf(t)===!1)||u&&t.req&&t.aborted)&&Nt.nextTick(C);let U=()=>{r=xs,t.removeListener(\"aborted\",I),t.removeListener(\"complete\",g),t.removeListener(\"abort\",I),t.removeListener(\"request\",R),t.req&&t.req.removeListener(\"finish\",g),t.removeListener(\"end\",c),t.removeListener(\"close\",c),t.removeListener(\"finish\",g),t.removeListener(\"end\",w),t.removeListener(\"error\",E),t.removeListener(\"close\",I);};if(e.signal&&!S){let N=()=>{let W=r;U(),W.call(t,new Df(void 0,{cause:e.signal.reason}));};if(e.signal.aborted)Nt.nextTick(N);else {let W=r;r=ks((...K)=>{e.signal.removeEventListener(\"abort\",N),W.apply(t,K);}),e.signal.addEventListener(\"abort\",N);}}return U}function Pb(t,e,r){let i=!1,n=xs;if(e.signal)if(n=()=>{i=!0,r.call(t,new Df(void 0,{cause:e.signal.reason}));},e.signal.aborted)Nt.nextTick(n);else {let s=r;r=ks((...a)=>{e.signal.removeEventListener(\"abort\",n),s.apply(t,a);}),e.signal.addEventListener(\"abort\",n);}let o=(...s)=>{i||Nt.nextTick(()=>r.apply(t,s));};return Eb(t[Cb].promise,o,o),xs}function Ob(t,e){var r;let i=!1;return e===null&&(e=Os),(r=e)!==null&&r!==void 0&&r.cleanup&&(mb(e.cleanup,\"cleanup\"),i=e.cleanup),new vb((n,o)=>{let s=jf(t,e,a=>{i&&s(),a?o(a):n();});})}Ms.exports=jf;Ms.exports.finished=Ob;});var tr=M((rT,Gf)=>{v();m();_();var rt=Ut(),{aggregateTwoErrors:kb,codes:{ERR_MULTIPLE_CALLBACK:xb},AbortError:Mb}=Se(),{Symbol:$f}=ce(),{kDestroyed:Lb,isDestroyed:Ub,isFinished:Nb,isServerRequest:qb}=tt(),Hf=$f(\"kDestroy\"),Ls=$f(\"kConstruct\");function Vf(t,e,r){t&&(t.stack,e&&!e.errored&&(e.errored=t),r&&!r.errored&&(r.errored=t));}function Db(t,e){let r=this._readableState,i=this._writableState,n=i||r;return i!=null&&i.destroyed||r!=null&&r.destroyed?(typeof e==\"function\"&&e(),this):(Vf(t,i,r),i&&(i.destroyed=!0),r&&(r.destroyed=!0),n.constructed?Ff(this,t,e):this.once(Hf,function(o){Ff(this,kb(o,t),e);}),this)}function Ff(t,e,r){let i=!1;function n(o){if(i)return;i=!0;let s=t._readableState,a=t._writableState;Vf(o,a,s),a&&(a.closed=!0),s&&(s.closed=!0),typeof r==\"function\"&&r(o),o?rt.nextTick(jb,t,o):rt.nextTick(zf,t);}try{t._destroy(e||null,n);}catch(o){n(o);}}function jb(t,e){Us(t,e),zf(t);}function zf(t){let e=t._readableState,r=t._writableState;r&&(r.closeEmitted=!0),e&&(e.closeEmitted=!0),(r!=null&&r.emitClose||e!=null&&e.emitClose)&&t.emit(\"close\");}function Us(t,e){let r=t._readableState,i=t._writableState;i!=null&&i.errorEmitted||r!=null&&r.errorEmitted||(i&&(i.errorEmitted=!0),r&&(r.errorEmitted=!0),t.emit(\"error\",e));}function Fb(){let t=this._readableState,e=this._writableState;t&&(t.constructed=!0,t.closed=!1,t.closeEmitted=!1,t.destroyed=!1,t.errored=null,t.errorEmitted=!1,t.reading=!1,t.ended=t.readable===!1,t.endEmitted=t.readable===!1),e&&(e.constructed=!0,e.destroyed=!1,e.closed=!1,e.closeEmitted=!1,e.errored=null,e.errorEmitted=!1,e.finalCalled=!1,e.prefinished=!1,e.ended=e.writable===!1,e.ending=e.writable===!1,e.finished=e.writable===!1);}function Ns(t,e,r){let i=t._readableState,n=t._writableState;if(n!=null&&n.destroyed||i!=null&&i.destroyed)return this;i!=null&&i.autoDestroy||n!=null&&n.autoDestroy?t.destroy(e):e&&(e.stack,n&&!n.errored&&(n.errored=e),i&&!i.errored&&(i.errored=e),r?rt.nextTick(Us,t,e):Us(t,e));}function Wb(t,e){if(typeof t._construct!=\"function\")return;let r=t._readableState,i=t._writableState;r&&(r.constructed=!1),i&&(i.constructed=!1),t.once(Ls,e),!(t.listenerCount(Ls)>1)&&rt.nextTick($b,t);}function $b(t){let e=!1;function r(i){if(e){Ns(t,i??new xb);return}e=!0;let n=t._readableState,o=t._writableState,s=o||n;n&&(n.constructed=!0),o&&(o.constructed=!0),s.destroyed?t.emit(Hf,i):i?Ns(t,i,!0):rt.nextTick(Hb,t);}try{t._construct(i=>{rt.nextTick(r,i);});}catch(i){rt.nextTick(r,i);}}function Hb(t){t.emit(Ls);}function Wf(t){return t?.setHeader&&typeof t.abort==\"function\"}function Kf(t){t.emit(\"close\");}function Vb(t,e){t.emit(\"error\",e),rt.nextTick(Kf,t);}function zb(t,e){!t||Ub(t)||(!e&&!Nb(t)&&(e=new Mb),qb(t)?(t.socket=null,t.destroy(e)):Wf(t)?t.abort():Wf(t.req)?t.req.abort():typeof t.destroy==\"function\"?t.destroy(e):typeof t.close==\"function\"?t.close():e?rt.nextTick(Vb,t,e):rt.nextTick(Kf,t),t.destroyed||(t[Lb]=!0));}Gf.exports={construct:Wb,destroyer:zb,destroy:Db,undestroy:Fb,errorOrDestroy:Ns};});function Y(){Y.init.call(this);}function Xi(t){if(typeof t!=\"function\")throw new TypeError('The \"listener\" argument must be of type Function. Received type '+typeof t)}function nc(t){return t._maxListeners===void 0?Y.defaultMaxListeners:t._maxListeners}function Xf(t,e,r,i){var n,o,s,a;if(Xi(r),(o=t._events)===void 0?(o=t._events=Object.create(null),t._eventsCount=0):(o.newListener!==void 0&&(t.emit(\"newListener\",e,r.listener?r.listener:r),o=t._events),s=o[e]),s===void 0)s=o[e]=r,++t._eventsCount;else if(typeof s==\"function\"?s=o[e]=i?[r,s]:[s,r]:i?s.unshift(r):s.push(r),(n=nc(t))>0&&s.length>n&&!s.warned){s.warned=!0;var u=new Error(\"Possible EventEmitter memory leak detected. \"+s.length+\" \"+String(e)+\" listeners added. Use emitter.setMaxListeners() to increase limit\");u.name=\"MaxListenersExceededWarning\",u.emitter=t,u.type=e,u.count=s.length,a=u,console&&console.warn&&console.warn(a);}return t}function Kb(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function Zf(t,e,r){var i={fired:!1,wrapFn:void 0,target:t,type:e,listener:r},n=Kb.bind(i);return n.listener=r,i.wrapFn=n,n}function ec(t,e,r){var i=t._events;if(i===void 0)return [];var n=i[e];return n===void 0?[]:typeof n==\"function\"?r?[n.listener||n]:[n]:r?function(o){for(var s=new Array(o.length),a=0;a{v();m();_();Ur=typeof Reflect==\"object\"?Reflect:null,Qf=Ur&&typeof Ur.apply==\"function\"?Ur.apply:function(t,e,r){return Function.prototype.apply.call(t,e,r)};ic=Ur&&typeof Ur.ownKeys==\"function\"?Ur.ownKeys:Object.getOwnPropertySymbols?function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:function(t){return Object.getOwnPropertyNames(t)};Yf=Number.isNaN||function(t){return t!=t};rc=Y,Y.EventEmitter=Y,Y.prototype._events=void 0,Y.prototype._eventsCount=0,Y.prototype._maxListeners=void 0;Jf=10;Object.defineProperty(Y,\"defaultMaxListeners\",{enumerable:!0,get:function(){return Jf},set:function(t){if(typeof t!=\"number\"||t<0||Yf(t))throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received '+t+\".\");Jf=t;}}),Y.init=function(){this._events!==void 0&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0;},Y.prototype.setMaxListeners=function(t){if(typeof t!=\"number\"||t<0||Yf(t))throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received '+t+\".\");return this._maxListeners=t,this},Y.prototype.getMaxListeners=function(){return nc(this)},Y.prototype.emit=function(t){for(var e=[],r=1;r0&&(o=e[0]),o instanceof Error)throw o;var s=new Error(\"Unhandled error.\"+(o?\" (\"+o.message+\")\":\"\"));throw s.context=o,s}var a=n[t];if(a===void 0)return !1;if(typeof a==\"function\")Qf(a,this,e);else {var u=a.length,c=sc(a,u);for(r=0;r=0;o--)if(r[o]===e||r[o].listener===e){s=r[o].listener,n=o;break}if(n<0)return this;n===0?r.shift():function(a,u){for(;u+1=0;i--)this.removeListener(t,e[i]);return this},Y.prototype.listeners=function(t){return ec(this,t,!0)},Y.prototype.rawListeners=function(t){return ec(this,t,!1)},Y.listenerCount=function(t,e){return typeof t.listenerCount==\"function\"?t.listenerCount(e):tc.call(t,e)},Y.prototype.listenerCount=tc,Y.prototype.eventNames=function(){return this._eventsCount>0?ic(this._events):[]};Be=rc;Be.EventEmitter;Be.defaultMaxListeners;Be.init;Be.listenerCount;Be.EventEmitter;Be.defaultMaxListeners;Be.init;Be.listenerCount;});var rr={};Qt(rr,{EventEmitter:()=>Gb,default:()=>Be,defaultMaxListeners:()=>Qb,init:()=>Yb,listenerCount:()=>Jb,on:()=>Xb,once:()=>Zb});var Gb,Qb,Yb,Jb,Xb,Zb,ir=we(()=>{v();m();_();qs();qs();Be.once=function(t,e){return new Promise((r,i)=>{function n(...s){o!==void 0&&t.removeListener(\"error\",o),r(s);}let o;e!==\"error\"&&(o=s=>{t.removeListener(name,n),i(s);},t.once(\"error\",o)),t.once(e,n);})};Be.on=function(t,e){let r=[],i=[],n=null,o=!1,s={async next(){let c=r.shift();if(c)return createIterResult(c,!1);if(n){let h=Promise.reject(n);return n=null,h}return o?createIterResult(void 0,!0):new Promise((h,d)=>i.push({resolve:h,reject:d}))},async return(){t.removeListener(e,a),t.removeListener(\"error\",u),o=!0;for(let c of i)c.resolve(createIterResult(void 0,!0));return createIterResult(void 0,!0)},throw(c){n=c,t.removeListener(e,a),t.removeListener(\"error\",u);},[Symbol.asyncIterator](){return this}};return t.on(e,a),t.on(\"error\",u),s;function a(...c){let h=i.shift();h?h.resolve(createIterResult(c,!1)):r.push(c);}function u(c){o=!0;let h=i.shift();h?h.reject(c):n=c,s.return();}};({EventEmitter:Gb,defaultMaxListeners:Qb,init:Yb,listenerCount:Jb,on:Xb,once:Zb}=Be);});var tn=M((xT,ac)=>{v();m();_();var{ArrayIsArray:ew,ObjectSetPrototypeOf:oc}=ce(),{EventEmitter:Zi}=(ir(),X(rr));function en(t){Zi.call(this,t);}oc(en.prototype,Zi.prototype);oc(en,Zi);en.prototype.pipe=function(t,e){let r=this;function i(h){t.writable&&t.write(h)===!1&&r.pause&&r.pause();}r.on(\"data\",i);function n(){r.readable&&r.resume&&r.resume();}t.on(\"drain\",n),!t._isStdio&&(!e||e.end!==!1)&&(r.on(\"end\",s),r.on(\"close\",a));let o=!1;function s(){o||(o=!0,t.end());}function a(){o||(o=!0,typeof t.destroy==\"function\"&&t.destroy());}function u(h){c(),Zi.listenerCount(this,\"error\")===0&&this.emit(\"error\",h);}Ds(r,\"error\",u),Ds(t,\"error\",u);function c(){r.removeListener(\"data\",i),t.removeListener(\"drain\",n),r.removeListener(\"end\",s),r.removeListener(\"close\",a),r.removeListener(\"error\",u),t.removeListener(\"error\",u),r.removeListener(\"end\",c),r.removeListener(\"close\",c),t.removeListener(\"close\",c);}return r.on(\"end\",c),r.on(\"close\",c),t.on(\"close\",c),t.emit(\"pipe\",r),t};function Ds(t,e,r){if(typeof t.prependListener==\"function\")return t.prependListener(e,r);!t._events||!t._events[e]?t.on(e,r):ew(t._events[e])?t._events[e].unshift(r):t._events[e]=[r,t._events[e]];}ac.exports={Stream:en,prependListener:Ds};});var ci=M(($T,rn)=>{v();m();_();var{AbortError:lc,codes:tw}=Se(),{isNodeStream:uc,isWebStream:rw,kControllerErrorFunction:iw}=tt(),nw=mt(),{ERR_INVALID_ARG_TYPE:fc}=tw,sw=(t,e)=>{if(typeof t!=\"object\"||!(\"aborted\"in t))throw new fc(e,\"AbortSignal\",t)};rn.exports.addAbortSignal=function(e,r){if(sw(e,\"signal\"),!uc(r)&&!rw(r))throw new fc(\"stream\",[\"ReadableStream\",\"WritableStream\",\"Stream\"],r);return rn.exports.addAbortSignalNoValidate(e,r)};rn.exports.addAbortSignalNoValidate=function(t,e){if(typeof t!=\"object\"||!(\"aborted\"in t))return e;let r=uc(e)?()=>{e.destroy(new lc(void 0,{cause:t.reason}));}:()=>{e[iw](new lc(void 0,{cause:t.reason}));};return t.aborted?r():(t.addEventListener(\"abort\",r),nw(e,()=>t.removeEventListener(\"abort\",r))),e};});var dc=M((e2,hc)=>{v();m();_();var{StringPrototypeSlice:cc,SymbolIterator:ow,TypedArrayPrototypeSet:nn,Uint8Array:aw}=ce(),{Buffer:js}=(ye(),X(_e)),{inspect:lw}=Je();hc.exports=class{constructor(){this.head=null,this.tail=null,this.length=0;}push(e){let r={data:e,next:null};this.length>0?this.tail.next=r:this.head=r,this.tail=r,++this.length;}unshift(e){let r={data:e,next:this.head};this.length===0&&(this.tail=r),this.head=r,++this.length;}shift(){if(this.length===0)return;let e=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,e}clear(){this.head=this.tail=null,this.length=0;}join(e){if(this.length===0)return \"\";let r=this.head,i=\"\"+r.data;for(;(r=r.next)!==null;)i+=e+r.data;return i}concat(e){if(this.length===0)return js.alloc(0);let r=js.allocUnsafe(e>>>0),i=this.head,n=0;for(;i;)nn(r,i.data,n),n+=i.data.length,i=i.next;return r}consume(e,r){let i=this.head.data;if(eo.length)r+=o,e-=o.length;else {e===o.length?(r+=o,++n,i.next?this.head=i.next:this.head=this.tail=null):(r+=cc(o,0,e),this.head=i,i.data=cc(o,e));break}++n;}while((i=i.next)!==null);return this.length-=n,r}_getBuffer(e){let r=js.allocUnsafe(e),i=e,n=this.head,o=0;do{let s=n.data;if(e>s.length)nn(r,s,i-e),e-=s.length;else {e===s.length?(nn(r,s,i-e),++o,n.next?this.head=n.next:this.head=this.tail=null):(nn(r,new aw(s.buffer,s.byteOffset,e),i-e),this.head=n,n.data=s.slice(e));break}++o;}while((n=n.next)!==null);return this.length-=o,r}[Symbol.for(\"nodejs.util.inspect.custom\")](e,r){return lw(this,{...r,depth:0,customInspect:!1})}};});var sn=M((f2,gc)=>{v();m();_();var{MathFloor:uw,NumberIsInteger:fw}=ce(),{ERR_INVALID_ARG_VALUE:cw}=Se().codes;function hw(t,e,r){return t.highWaterMark!=null?t.highWaterMark:e?t[r]:null}function pc(t){return t?16:16*1024}function dw(t,e,r,i){let n=hw(e,i,r);if(n!=null){if(!fw(n)||n<0){let o=i?`options.${r}`:\"options.highWaterMark\";throw new cw(o,n)}return uw(n)}return pc(t.objectMode)}gc.exports={getHighWaterMark:dw,getDefaultHighWaterMark:pc};});function wc(t){var e=t.length;if(e%4>0)throw new Error(\"Invalid string. Length must be a multiple of 4\");var r=t.indexOf(\"=\");return r===-1&&(r=e),[r,r===e?0:4-r%4]}function pw(t,e,r){for(var i,n,o=[],s=e;s>18&63]+$e[n>>12&63]+$e[n>>6&63]+$e[63&n]);return o.join(\"\")}function vt(t){if(t>2147483647)throw new RangeError('The value \"'+t+'\" is invalid for option \"size\"');var e=new Uint8Array(t);return Object.setPrototypeOf(e,k.prototype),e}function k(t,e,r){if(typeof t==\"number\"){if(typeof e==\"string\")throw new TypeError('The \"string\" argument must be of type string. Received type number');return Hs(t)}return Cc(t,e,r)}function Cc(t,e,r){if(typeof t==\"string\")return function(o,s){if(typeof s==\"string\"&&s!==\"\"||(s=\"utf8\"),!k.isEncoding(s))throw new TypeError(\"Unknown encoding: \"+s);var a=0|Pc(o,s),u=vt(a),c=u.write(o,s);return c!==a&&(u=u.slice(0,c)),u}(t,e);if(ArrayBuffer.isView(t))return Fs(t);if(t==null)throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof t);if(Et(t,ArrayBuffer)||t&&Et(t.buffer,ArrayBuffer)||typeof SharedArrayBuffer<\"u\"&&(Et(t,SharedArrayBuffer)||t&&Et(t.buffer,SharedArrayBuffer)))return mc(t,e,r);if(typeof t==\"number\")throw new TypeError('The \"value\" argument must not be of type number. Received type number');var i=t.valueOf&&t.valueOf();if(i!=null&&i!==t)return k.from(i,e,r);var n=function(o){if(k.isBuffer(o)){var s=0|Ks(o.length),a=vt(s);return a.length===0||o.copy(a,0,0,s),a}if(o.length!==void 0)return typeof o.length!=\"number\"||Gs(o.length)?vt(0):Fs(o);if(o.type===\"Buffer\"&&Array.isArray(o.data))return Fs(o.data)}(t);if(n)return n;if(typeof Symbol<\"u\"&&Symbol.toPrimitive!=null&&typeof t[Symbol.toPrimitive]==\"function\")return k.from(t[Symbol.toPrimitive](\"string\"),e,r);throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof t)}function Bc(t){if(typeof t!=\"number\")throw new TypeError('\"size\" argument must be of type number');if(t<0)throw new RangeError('The value \"'+t+'\" is invalid for option \"size\"')}function Hs(t){return Bc(t),vt(t<0?0:0|Ks(t))}function Fs(t){for(var e=t.length<0?0:0|Ks(t.length),r=vt(e),i=0;i=2147483647)throw new RangeError(\"Attempt to allocate Buffer larger than maximum size: 0x\"+2147483647 .toString(16)+\" bytes\");return 0|t}function Pc(t,e){if(k.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||Et(t,ArrayBuffer))return t.byteLength;if(typeof t!=\"string\")throw new TypeError('The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);var r=t.length,i=arguments.length>2&&arguments[2]===!0;if(!i&&r===0)return 0;for(var n=!1;;)switch(e){case\"ascii\":case\"latin1\":case\"binary\":return r;case\"utf8\":case\"utf-8\":return Vs(t).length;case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return 2*r;case\"hex\":return r>>>1;case\"base64\":return Mc(t).length;default:if(n)return i?-1:Vs(t).length;e=(\"\"+e).toLowerCase(),n=!0;}}function yw(t,e,r){var i=!1;if((e===void 0||e<0)&&(e=0),e>this.length||((r===void 0||r>this.length)&&(r=this.length),r<=0)||(r>>>=0)<=(e>>>=0))return \"\";for(t||(t=\"utf8\");;)switch(t){case\"hex\":return Iw(this,e,r);case\"utf8\":case\"utf-8\":return kc(this,e,r);case\"ascii\":return Sw(this,e,r);case\"latin1\":case\"binary\":return Aw(this,e,r);case\"base64\":return Ew(this,e,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return Tw(this,e,r);default:if(i)throw new TypeError(\"Unknown encoding: \"+t);t=(t+\"\").toLowerCase(),i=!0;}}function sr(t,e,r){var i=t[e];t[e]=t[r],t[r]=i;}function vc(t,e,r,i,n){if(t.length===0)return -1;if(typeof r==\"string\"?(i=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),Gs(r=+r)&&(r=n?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(n)return -1;r=t.length-1;}else if(r<0){if(!n)return -1;r=0;}if(typeof e==\"string\"&&(e=k.from(e,i)),k.isBuffer(e))return e.length===0?-1:Ec(t,e,r,i,n);if(typeof e==\"number\")return e&=255,typeof Uint8Array.prototype.indexOf==\"function\"?n?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):Ec(t,[e],r,i,n);throw new TypeError(\"val must be string, number or Buffer\")}function Ec(t,e,r,i,n){var o,s=1,a=t.length,u=e.length;if(i!==void 0&&((i=String(i).toLowerCase())===\"ucs2\"||i===\"ucs-2\"||i===\"utf16le\"||i===\"utf-16le\")){if(t.length<2||e.length<2)return -1;s=2,a/=2,u/=2,r/=2;}function c(y,w){return s===1?y[w]:y.readUInt16BE(w*s)}if(n){var h=-1;for(o=r;oa&&(r=a-u),o=r;o>=0;o--){for(var d=!0,g=0;gn&&(i=n):i=n;var o=e.length;i>o/2&&(i=o/2);for(var s=0;s>8,u=s%256,c.push(u),c.push(a);return c}(e,t.length-r),t,r,i)}function Ew(t,e,r){return e===0&&r===t.length?$s.fromByteArray(t):$s.fromByteArray(t.slice(e,r))}function kc(t,e,r){r=Math.min(t.length,r);for(var i=[],n=e;n239?4:c>223?3:c>191?2:1;if(n+d<=r)switch(d){case 1:c<128&&(h=c);break;case 2:(192&(o=t[n+1]))==128&&(u=(31&c)<<6|63&o)>127&&(h=u);break;case 3:o=t[n+1],s=t[n+2],(192&o)==128&&(192&s)==128&&(u=(15&c)<<12|(63&o)<<6|63&s)>2047&&(u<55296||u>57343)&&(h=u);break;case 4:o=t[n+1],s=t[n+2],a=t[n+3],(192&o)==128&&(192&s)==128&&(192&a)==128&&(u=(15&c)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&u<1114112&&(h=u);}h===null?(h=65533,d=1):h>65535&&(h-=65536,i.push(h>>>10&1023|55296),h=56320|1023&h),i.push(h),n+=d;}return function(g){var y=g.length;if(y<=4096)return String.fromCharCode.apply(String,g);for(var w=\"\",E=0;Ei)&&(r=i);for(var n=\"\",o=e;or)throw new RangeError(\"Trying to access beyond buffer length\")}function Pe(t,e,r,i,n,o){if(!k.isBuffer(t))throw new TypeError('\"buffer\" argument must be a Buffer instance');if(e>n||et.length)throw new RangeError(\"Index out of range\")}function xc(t,e,r,i,n,o){if(r+i>t.length)throw new RangeError(\"Index out of range\");if(r<0)throw new RangeError(\"Index out of range\")}function Sc(t,e,r,i,n){return e=+e,r>>>=0,n||xc(t,0,r,4),Nr.write(t,e,r,i,23,4),r+4}function Ac(t,e,r,i,n){return e=+e,r>>>=0,n||xc(t,0,r,8),Nr.write(t,e,r,i,52,8),r+8}function Vs(t,e){var r;e=e||1/0;for(var i=t.length,n=null,o=[],s=0;s55295&&r<57344){if(!n){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===i){(e-=3)>-1&&o.push(239,191,189);continue}n=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),n=r;continue}r=65536+(n-55296<<10|r-56320);}else n&&(e-=3)>-1&&o.push(239,191,189);if(n=null,r<128){if((e-=1)<0)break;o.push(r);}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128);}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128);}else {if(!(r<1114112))throw new Error(\"Invalid code point\");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128);}}return o}function Mc(t){return $s.toByteArray(function(e){if((e=(e=e.split(\"=\")[0]).trim().replace(Rw,\"\")).length<2)return \"\";for(;e.length%4!=0;)e+=\"=\";return e}(t))}function un(t,e,r,i){for(var n=0;n=e.length||n>=t.length);++n)e[n+r]=t[n];return n}function Et(t,e){return t instanceof e||t!=null&&t.constructor!=null&&t.constructor.name!=null&&t.constructor.name===e.name}function Gs(t){return t!=t}function Ic(t,e){for(var r in t)e[r]=t[r];}function or(t,e,r){return it(t,e,r)}function hi(t){var e;switch(this.encoding=function(r){var i=function(n){if(!n)return \"utf8\";for(var o;;)switch(n){case\"utf8\":case\"utf-8\":return \"utf8\";case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return \"utf16le\";case\"latin1\":case\"binary\":return \"latin1\";case\"base64\":case\"ascii\":case\"hex\":return n;default:if(o)return;n=(\"\"+n).toLowerCase(),o=!0;}}(r);if(typeof i!=\"string\"&&(zs.isEncoding===Tc||!Tc(r)))throw new Error(\"Unknown encoding: \"+r);return i||r}(t),this.encoding){case\"utf16le\":this.text=Ow,this.end=kw,e=4;break;case\"utf8\":this.fillLast=Pw,e=4;break;case\"base64\":this.text=xw,this.end=Mw,e=3;break;default:return this.write=Lw,this.end=Uw,void 0}this.lastNeed=0,this.lastTotal=0,this.lastChar=zs.allocUnsafe(e);}function Ws(t){return t<=127?0:t>>5==6?2:t>>4==14?3:t>>3==30?4:t>>6==2?-1:-2}function Pw(t){var e=this.lastTotal-this.lastNeed,r=function(i,n,o){if((192&n[0])!=128)return i.lastNeed=0,\"\\uFFFD\";if(i.lastNeed>1&&n.length>1){if((192&n[1])!=128)return i.lastNeed=1,\"\\uFFFD\";if(i.lastNeed>2&&n.length>2&&(192&n[2])!=128)return i.lastNeed=2,\"\\uFFFD\"}}(this,t);return r!==void 0?r:this.lastNeed<=t.length?(t.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(t.copy(this.lastChar,e,0,t.length),this.lastNeed-=t.length,void 0)}function Ow(t,e){if((t.length-e)%2==0){var r=t.toString(\"utf16le\",e);if(r){var i=r.charCodeAt(r.length-1);if(i>=55296&&i<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=t[t.length-1],t.toString(\"utf16le\",e,t.length-1)}function kw(t){var e=t&&t.length?this.write(t):\"\";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return e+this.lastChar.toString(\"utf16le\",0,r)}return e}function xw(t,e){var r=(t.length-e)%3;return r===0?t.toString(\"base64\",e):(this.lastNeed=3-r,this.lastTotal=3,r===1?this.lastChar[0]=t[t.length-1]:(this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1]),t.toString(\"base64\",e,t.length-r))}function Mw(t){var e=t&&t.length?this.write(t):\"\";return this.lastNeed?e+this.lastChar.toString(\"base64\",0,3-this.lastNeed):e}function Lw(t){return t.toString(this.encoding)}function Uw(t){return t&&t.length?this.write(t):\"\"}var Rc,$e,ke,yc,on,nr,bc,gw,St,$s,Nr,_c,Rw,Cw,an,ln,it,Bw,ar,zs,Tc,Qs=we(()=>{v();m();_();for(Rc={byteLength:function(t){var e=wc(t),r=e[0],i=e[1];return 3*(r+i)/4-i},toByteArray:function(t){var e,r,i=wc(t),n=i[0],o=i[1],s=new yc(function(c,h,d){return 3*(h+d)/4-d}(0,n,o)),a=0,u=o>0?n-4:n;for(r=0;r>16&255,s[a++]=e>>8&255,s[a++]=255&e;return o===2&&(e=ke[t.charCodeAt(r)]<<2|ke[t.charCodeAt(r+1)]>>4,s[a++]=255&e),o===1&&(e=ke[t.charCodeAt(r)]<<10|ke[t.charCodeAt(r+1)]<<4|ke[t.charCodeAt(r+2)]>>2,s[a++]=e>>8&255,s[a++]=255&e),s},fromByteArray:function(t){for(var e,r=t.length,i=r%3,n=[],o=0,s=r-i;os?s:o+16383));return i===1?(e=t[r-1],n.push($e[e>>2]+$e[e<<4&63]+\"==\")):i===2&&(e=(t[r-2]<<8)+t[r-1],n.push($e[e>>10]+$e[e>>4&63]+$e[e<<2&63]+\"=\")),n.join(\"\")}},$e=[],ke=[],yc=typeof Uint8Array<\"u\"?Uint8Array:Array,on=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",nr=0,bc=on.length;nr>1,h=-7,d=r?n-1:0,g=r?-1:1,y=t[e+d];for(d+=g,o=y&(1<<-h)-1,y>>=-h,h+=a;h>0;o=256*o+t[e+d],d+=g,h-=8);for(s=o&(1<<-h)-1,o>>=-h,h+=i;h>0;s=256*s+t[e+d],d+=g,h-=8);if(o===0)o=1-c;else {if(o===u)return s?NaN:1/0*(y?-1:1);s+=Math.pow(2,i),o-=c;}return (y?-1:1)*s*Math.pow(2,o-i)},write:function(t,e,r,i,n,o){var s,a,u,c=8*o-n-1,h=(1<>1,g=n===23?Math.pow(2,-24)-Math.pow(2,-77):0,y=i?0:o-1,w=i?1:-1,E=e<0||e===0&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=h):(s=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-s))<1&&(s--,u*=2),(e+=s+d>=1?g/u:g*Math.pow(2,1-d))*u>=2&&(s++,u/=2),s+d>=h?(a=0,s=h):s+d>=1?(a=(e*u-1)*Math.pow(2,n),s+=d):(a=e*Math.pow(2,d-1)*Math.pow(2,n),s=0));n>=8;t[r+y]=255&a,y+=w,a/=256,n-=8);for(s=s<0;t[r+y]=255&s,y+=w,s/=256,c-=8);t[r+y-w]|=128*E;}},St={},$s=Rc,Nr=gw,_c=typeof Symbol==\"function\"&&typeof Symbol.for==\"function\"?Symbol.for(\"nodejs.util.inspect.custom\"):null;St.Buffer=k,St.SlowBuffer=function(t){return +t!=t&&(t=0),k.alloc(+t)},St.INSPECT_MAX_BYTES=50;St.kMaxLength=2147483647,k.TYPED_ARRAY_SUPPORT=function(){try{var t=new Uint8Array(1),e={foo:function(){return 42}};return Object.setPrototypeOf(e,Uint8Array.prototype),Object.setPrototypeOf(t,e),t.foo()===42}catch{return !1}}(),k.TYPED_ARRAY_SUPPORT||typeof console>\"u\"||typeof console.error!=\"function\"||console.error(\"This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.\"),Object.defineProperty(k.prototype,\"parent\",{enumerable:!0,get:function(){if(k.isBuffer(this))return this.buffer}}),Object.defineProperty(k.prototype,\"offset\",{enumerable:!0,get:function(){if(k.isBuffer(this))return this.byteOffset}}),k.poolSize=8192,k.from=function(t,e,r){return Cc(t,e,r)},Object.setPrototypeOf(k.prototype,Uint8Array.prototype),Object.setPrototypeOf(k,Uint8Array),k.alloc=function(t,e,r){return function(i,n,o){return Bc(i),i<=0?vt(i):n!==void 0?typeof o==\"string\"?vt(i).fill(n,o):vt(i).fill(n):vt(i)}(t,e,r)},k.allocUnsafe=function(t){return Hs(t)},k.allocUnsafeSlow=function(t){return Hs(t)},k.isBuffer=function(t){return t!=null&&t._isBuffer===!0&&t!==k.prototype},k.compare=function(t,e){if(Et(t,Uint8Array)&&(t=k.from(t,t.offset,t.byteLength)),Et(e,Uint8Array)&&(e=k.from(e,e.offset,e.byteLength)),!k.isBuffer(t)||!k.isBuffer(e))throw new TypeError('The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array');if(t===e)return 0;for(var r=t.length,i=e.length,n=0,o=Math.min(r,i);ne&&(t+=\" ... \"),\"\"},_c&&(k.prototype[_c]=k.prototype.inspect),k.prototype.compare=function(t,e,r,i,n){if(Et(t,Uint8Array)&&(t=k.from(t,t.offset,t.byteLength)),!k.isBuffer(t))throw new TypeError('The \"target\" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(e===void 0&&(e=0),r===void 0&&(r=t?t.length:0),i===void 0&&(i=0),n===void 0&&(n=this.length),e<0||r>t.length||i<0||n>this.length)throw new RangeError(\"out of range index\");if(i>=n&&e>=r)return 0;if(i>=n)return -1;if(e>=r)return 1;if(this===t)return 0;for(var o=(n>>>=0)-(i>>>=0),s=(r>>>=0)-(e>>>=0),a=Math.min(o,s),u=this.slice(i,n),c=t.slice(e,r),h=0;h>>=0,isFinite(r)?(r>>>=0,i===void 0&&(i=\"utf8\")):(i=r,r=void 0);}var n=this.length-e;if((r===void 0||r>n)&&(r=n),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError(\"Attempt to write outside buffer bounds\");i||(i=\"utf8\");for(var o=!1;;)switch(i){case\"hex\":return bw(this,t,e,r);case\"utf8\":case\"utf-8\":return ww(this,t,e,r);case\"ascii\":return Oc(this,t,e,r);case\"latin1\":case\"binary\":return _w(this,t,e,r);case\"base64\":return mw(this,t,e,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return vw(this,t,e,r);default:if(o)throw new TypeError(\"Unknown encoding: \"+i);i=(\"\"+i).toLowerCase(),o=!0;}},k.prototype.toJSON=function(){return {type:\"Buffer\",data:Array.prototype.slice.call(this._arr||this,0)}};k.prototype.slice=function(t,e){var r=this.length;(t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=e===void 0?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e>>=0,e>>>=0,r||be(t,e,this.length);for(var i=this[t],n=1,o=0;++o>>=0,e>>>=0,r||be(t,e,this.length);for(var i=this[t+--e],n=1;e>0&&(n*=256);)i+=this[t+--e]*n;return i},k.prototype.readUInt8=function(t,e){return t>>>=0,e||be(t,1,this.length),this[t]},k.prototype.readUInt16LE=function(t,e){return t>>>=0,e||be(t,2,this.length),this[t]|this[t+1]<<8},k.prototype.readUInt16BE=function(t,e){return t>>>=0,e||be(t,2,this.length),this[t]<<8|this[t+1]},k.prototype.readUInt32LE=function(t,e){return t>>>=0,e||be(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},k.prototype.readUInt32BE=function(t,e){return t>>>=0,e||be(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},k.prototype.readIntLE=function(t,e,r){t>>>=0,e>>>=0,r||be(t,e,this.length);for(var i=this[t],n=1,o=0;++o=(n*=128)&&(i-=Math.pow(2,8*e)),i},k.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||be(t,e,this.length);for(var i=e,n=1,o=this[t+--i];i>0&&(n*=256);)o+=this[t+--i]*n;return o>=(n*=128)&&(o-=Math.pow(2,8*e)),o},k.prototype.readInt8=function(t,e){return t>>>=0,e||be(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},k.prototype.readInt16LE=function(t,e){t>>>=0,e||be(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},k.prototype.readInt16BE=function(t,e){t>>>=0,e||be(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},k.prototype.readInt32LE=function(t,e){return t>>>=0,e||be(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},k.prototype.readInt32BE=function(t,e){return t>>>=0,e||be(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},k.prototype.readFloatLE=function(t,e){return t>>>=0,e||be(t,4,this.length),Nr.read(this,t,!0,23,4)},k.prototype.readFloatBE=function(t,e){return t>>>=0,e||be(t,4,this.length),Nr.read(this,t,!1,23,4)},k.prototype.readDoubleLE=function(t,e){return t>>>=0,e||be(t,8,this.length),Nr.read(this,t,!0,52,8)},k.prototype.readDoubleBE=function(t,e){return t>>>=0,e||be(t,8,this.length),Nr.read(this,t,!1,52,8)},k.prototype.writeUIntLE=function(t,e,r,i){t=+t,e>>>=0,r>>>=0,i||Pe(this,t,e,r,Math.pow(2,8*r)-1,0);var n=1,o=0;for(this[e]=255&t;++o>>=0,r>>>=0,i||Pe(this,t,e,r,Math.pow(2,8*r)-1,0);var n=r-1,o=1;for(this[e+n]=255&t;--n>=0&&(o*=256);)this[e+n]=t/o&255;return e+r},k.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,1,255,0),this[e]=255&t,e+1},k.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},k.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},k.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},k.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},k.prototype.writeIntLE=function(t,e,r,i){if(t=+t,e>>>=0,!i){var n=Math.pow(2,8*r-1);Pe(this,t,e,r,n-1,-n);}var o=0,s=1,a=0;for(this[e]=255&t;++o>0)-a&255;return e+r},k.prototype.writeIntBE=function(t,e,r,i){if(t=+t,e>>>=0,!i){var n=Math.pow(2,8*r-1);Pe(this,t,e,r,n-1,-n);}var o=r-1,s=1,a=0;for(this[e+o]=255&t;--o>=0&&(s*=256);)t<0&&a===0&&this[e+o+1]!==0&&(a=1),this[e+o]=(t/s>>0)-a&255;return e+r},k.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},k.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},k.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},k.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},k.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},k.prototype.writeFloatLE=function(t,e,r){return Sc(this,t,e,!0,r)},k.prototype.writeFloatBE=function(t,e,r){return Sc(this,t,e,!1,r)},k.prototype.writeDoubleLE=function(t,e,r){return Ac(this,t,e,!0,r)},k.prototype.writeDoubleBE=function(t,e,r){return Ac(this,t,e,!1,r)},k.prototype.copy=function(t,e,r,i){if(!k.isBuffer(t))throw new TypeError(\"argument should be a Buffer\");if(r||(r=0),i||i===0||(i=this.length),e>=t.length&&(e=t.length),e||(e=0),i>0&&i=this.length)throw new RangeError(\"Index out of range\");if(i<0)throw new RangeError(\"sourceEnd out of bounds\");i>this.length&&(i=this.length),t.length-e=0;--o)t[o+e]=this[o+r];else Uint8Array.prototype.set.call(t,this.subarray(r,i),e);return n},k.prototype.fill=function(t,e,r,i){if(typeof t==\"string\"){if(typeof e==\"string\"?(i=e,e=0,r=this.length):typeof r==\"string\"&&(i=r,r=this.length),i!==void 0&&typeof i!=\"string\")throw new TypeError(\"encoding must be a string\");if(typeof i==\"string\"&&!k.isEncoding(i))throw new TypeError(\"Unknown encoding: \"+i);if(t.length===1){var n=t.charCodeAt(0);(i===\"utf8\"&&n<128||i===\"latin1\")&&(t=n);}}else typeof t==\"number\"?t&=255:typeof t==\"boolean\"&&(t=Number(t));if(e<0||this.length>>=0,r=r===void 0?this.length:r>>>0,t||(t=0),typeof t==\"number\")for(o=e;o=0?(u>0&&(n.lastNeed=u-1),u):--a=0?(u>0&&(n.lastNeed=u-2),u):--a=0?(u>0&&(u===2?u=0:n.lastNeed=u-3),u):0}(this,t,e);if(!this.lastNeed)return t.toString(\"utf8\",e);this.lastTotal=r;var i=t.length-(r-this.lastNeed);return t.copy(this.lastChar,0,i),t.toString(\"utf8\",e,i)},hi.prototype.fillLast=function(t){if(this.lastNeed<=t.length)return t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,t.length),this.lastNeed-=t.length;};ar.StringDecoder;ar.StringDecoder;});var Lc={};Qt(Lc,{StringDecoder:()=>Nw,default:()=>ar});var Nw,Uc=we(()=>{v();m();_();Qs();Qs();Nw=ar.StringDecoder;});var Ys=M((F2,jc)=>{v();m();_();var Nc=Ut(),{PromisePrototypeThen:qw,SymbolAsyncIterator:qc,SymbolIterator:Dc}=ce(),{Buffer:Dw}=(ye(),X(_e)),{ERR_INVALID_ARG_TYPE:jw,ERR_STREAM_NULL_VALUES:Fw}=Se().codes;function Ww(t,e,r){let i;if(typeof e==\"string\"||e instanceof Dw)return new t({objectMode:!0,...r,read(){this.push(e),this.push(null);}});let n;if(e&&e[qc])n=!0,i=e[qc]();else if(e&&e[Dc])n=!1,i=e[Dc]();else throw new jw(\"iterable\",[\"Iterable\"],e);let o=new t({objectMode:!0,highWaterMark:1,...r}),s=!1;o._read=function(){s||(s=!0,u());},o._destroy=function(c,h){qw(a(c),()=>Nc.nextTick(h,c),d=>Nc.nextTick(h,d||c));};async function a(c){let h=c!=null,d=typeof i.throw==\"function\";if(h&&d){let{value:g,done:y}=await i.throw(c);if(await g,y)return}if(typeof i.return==\"function\"){let{value:g}=await i.return();await g;}}async function u(){for(;;){try{let{value:c,done:h}=n?await i.next():i.next();if(h)o.push(null);else {let d=c&&typeof c.then==\"function\"?await c:c;if(d===null)throw s=!1,new Fw;if(o.push(d))continue;s=!1;}}catch(c){o.destroy(c);}break}}return o}jc.exports=Ww;});var di=M((J2,Zc)=>{v();m();_();var He=Ut(),{ArrayPrototypeIndexOf:$w,NumberIsInteger:Hw,NumberIsNaN:Vw,NumberParseInt:zw,ObjectDefineProperties:$c,ObjectKeys:Kw,ObjectSetPrototypeOf:Hc,Promise:Gw,SafeSet:Qw,SymbolAsyncIterator:Yw,Symbol:Jw}=ce();Zc.exports=F;F.ReadableState=ro;var{EventEmitter:Xw}=(ir(),X(rr)),{Stream:qt,prependListener:Zw}=tn(),{Buffer:Js}=(ye(),X(_e)),{addAbortSignal:e_}=ci(),t_=mt(),H=Je().debuglog(\"stream\",t=>{H=t;}),r_=dc(),Dr=tr(),{getHighWaterMark:i_,getDefaultHighWaterMark:n_}=sn(),{aggregateTwoErrors:Fc,codes:{ERR_INVALID_ARG_TYPE:s_,ERR_METHOD_NOT_IMPLEMENTED:o_,ERR_OUT_OF_RANGE:a_,ERR_STREAM_PUSH_AFTER_EOF:l_,ERR_STREAM_UNSHIFT_AFTER_END_EVENT:u_}}=Se(),{validateObject:f_}=fi(),lr=Jw(\"kPaused\"),{StringDecoder:Vc}=(Uc(),X(Lc)),c_=Ys();Hc(F.prototype,qt.prototype);Hc(F,qt);var Xs=()=>{},{errorOrDestroy:qr}=Dr;function ro(t,e,r){typeof r!=\"boolean\"&&(r=e instanceof nt()),this.objectMode=!!(t&&t.objectMode),r&&(this.objectMode=this.objectMode||!!(t&&t.readableObjectMode)),this.highWaterMark=t?i_(this,t,\"readableHighWaterMark\",r):n_(!1),this.buffer=new r_,this.length=0,this.pipes=[],this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.constructed=!0,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this[lr]=null,this.errorEmitted=!1,this.emitClose=!t||t.emitClose!==!1,this.autoDestroy=!t||t.autoDestroy!==!1,this.destroyed=!1,this.errored=null,this.closed=!1,this.closeEmitted=!1,this.defaultEncoding=t&&t.defaultEncoding||\"utf8\",this.awaitDrainWriters=null,this.multiAwaitDrain=!1,this.readingMore=!1,this.dataEmitted=!1,this.decoder=null,this.encoding=null,t&&t.encoding&&(this.decoder=new Vc(t.encoding),this.encoding=t.encoding);}function F(t){if(!(this instanceof F))return new F(t);let e=this instanceof nt();this._readableState=new ro(t,this,e),t&&(typeof t.read==\"function\"&&(this._read=t.read),typeof t.destroy==\"function\"&&(this._destroy=t.destroy),typeof t.construct==\"function\"&&(this._construct=t.construct),t.signal&&!e&&e_(t.signal,this)),qt.call(this,t),Dr.construct(this,()=>{this._readableState.needReadable&&fn(this,this._readableState);});}F.prototype.destroy=Dr.destroy;F.prototype._undestroy=Dr.undestroy;F.prototype._destroy=function(t,e){e(t);};F.prototype[Xw.captureRejectionSymbol]=function(t){this.destroy(t);};F.prototype.push=function(t,e){return zc(this,t,e,!1)};F.prototype.unshift=function(t,e){return zc(this,t,e,!0)};function zc(t,e,r,i){H(\"readableAddChunk\",e);let n=t._readableState,o;if(n.objectMode||(typeof e==\"string\"?(r=r||n.defaultEncoding,n.encoding!==r&&(i&&n.encoding?e=Js.from(e,r).toString(n.encoding):(e=Js.from(e,r),r=\"\"))):e instanceof Js?r=\"\":qt._isUint8Array(e)?(e=qt._uint8ArrayToBuffer(e),r=\"\"):e!=null&&(o=new s_(\"chunk\",[\"string\",\"Buffer\",\"Uint8Array\"],e))),o)qr(t,o);else if(e===null)n.reading=!1,p_(t,n);else if(n.objectMode||e&&e.length>0)if(i)if(n.endEmitted)qr(t,new u_);else {if(n.destroyed||n.errored)return !1;Zs(t,n,e,!0);}else if(n.ended)qr(t,new l_);else {if(n.destroyed||n.errored)return !1;n.reading=!1,n.decoder&&!r?(e=n.decoder.write(e),n.objectMode||e.length!==0?Zs(t,n,e,!1):fn(t,n)):Zs(t,n,e,!1);}else i||(n.reading=!1,fn(t,n));return !n.ended&&(n.length0?(e.multiAwaitDrain?e.awaitDrainWriters.clear():e.awaitDrainWriters=null,e.dataEmitted=!0,t.emit(\"data\",r)):(e.length+=e.objectMode?1:r.length,i?e.buffer.unshift(r):e.buffer.push(r),e.needReadable&&cn(t)),fn(t,e);}F.prototype.isPaused=function(){let t=this._readableState;return t[lr]===!0||t.flowing===!1};F.prototype.setEncoding=function(t){let e=new Vc(t);this._readableState.decoder=e,this._readableState.encoding=this._readableState.decoder.encoding;let r=this._readableState.buffer,i=\"\";for(let n of r)i+=e.write(n);return r.clear(),i!==\"\"&&r.push(i),this._readableState.length=i.length,this};var h_=1073741824;function d_(t){if(t>h_)throw new a_(\"size\",\"<= 1GiB\",t);return t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++,t}function Wc(t,e){return t<=0||e.length===0&&e.ended?0:e.objectMode?1:Vw(t)?e.flowing&&e.length?e.buffer.first().length:e.length:t<=e.length?t:e.ended?e.length:0}F.prototype.read=function(t){H(\"read\",t),t===void 0?t=NaN:Hw(t)||(t=zw(t,10));let e=this._readableState,r=t;if(t>e.highWaterMark&&(e.highWaterMark=d_(t)),t!==0&&(e.emittedReadable=!1),t===0&&e.needReadable&&((e.highWaterMark!==0?e.length>=e.highWaterMark:e.length>0)||e.ended))return H(\"read: emitReadable\",e.length,e.ended),e.length===0&&e.ended?eo(this):cn(this),null;if(t=Wc(t,e),t===0&&e.ended)return e.length===0&&eo(this),null;let i=e.needReadable;if(H(\"need readable\",i),(e.length===0||e.length-t0?n=Jc(t,e):n=null,n===null?(e.needReadable=e.length<=e.highWaterMark,t=0):(e.length-=t,e.multiAwaitDrain?e.awaitDrainWriters.clear():e.awaitDrainWriters=null),e.length===0&&(e.ended||(e.needReadable=!0),r!==t&&e.ended&&eo(this)),n!==null&&!e.errorEmitted&&!e.closeEmitted&&(e.dataEmitted=!0,this.emit(\"data\",n)),n};function p_(t,e){if(H(\"onEofChunk\"),!e.ended){if(e.decoder){let r=e.decoder.end();r&&r.length&&(e.buffer.push(r),e.length+=e.objectMode?1:r.length);}e.ended=!0,e.sync?cn(t):(e.needReadable=!1,e.emittedReadable=!0,Kc(t));}}function cn(t){let e=t._readableState;H(\"emitReadable\",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||(H(\"emitReadable\",e.flowing),e.emittedReadable=!0,He.nextTick(Kc,t));}function Kc(t){let e=t._readableState;H(\"emitReadable_\",e.destroyed,e.length,e.ended),!e.destroyed&&!e.errored&&(e.length||e.ended)&&(t.emit(\"readable\"),e.emittedReadable=!1),e.needReadable=!e.flowing&&!e.ended&&e.length<=e.highWaterMark,Qc(t);}function fn(t,e){!e.readingMore&&e.constructed&&(e.readingMore=!0,He.nextTick(g_,t,e));}function g_(t,e){for(;!e.reading&&!e.ended&&(e.length1&&i.pipes.includes(t)&&(H(\"false write response, pause\",i.awaitDrainWriters.size),i.awaitDrainWriters.add(t)),r.pause()),u||(u=y_(r,t),t.on(\"drain\",u));}r.on(\"data\",g);function g(I){H(\"ondata\");let C=t.write(I);H(\"dest.write\",C),C===!1&&d();}function y(I){if(H(\"onerror\",I),S(),t.removeListener(\"error\",y),t.listenerCount(\"error\")===0){let C=t._writableState||t._readableState;C&&!C.errorEmitted?qr(t,I):t.emit(\"error\",I);}}Zw(t,\"error\",y);function w(){t.removeListener(\"finish\",E),S();}t.once(\"close\",w);function E(){H(\"onfinish\"),t.removeListener(\"close\",w),S();}t.once(\"finish\",E);function S(){H(\"unpipe\"),r.unpipe(t);}return t.emit(\"pipe\",r),t.writableNeedDrain===!0?i.flowing&&d():i.flowing||(H(\"pipe resume\"),r.resume()),t};function y_(t,e){return function(){let i=t._readableState;i.awaitDrainWriters===e?(H(\"pipeOnDrain\",1),i.awaitDrainWriters=null):i.multiAwaitDrain&&(H(\"pipeOnDrain\",i.awaitDrainWriters.size),i.awaitDrainWriters.delete(e)),(!i.awaitDrainWriters||i.awaitDrainWriters.size===0)&&t.listenerCount(\"data\")&&t.resume();}}F.prototype.unpipe=function(t){let e=this._readableState,r={hasUnpiped:!1};if(e.pipes.length===0)return this;if(!t){let n=e.pipes;e.pipes=[],this.pause();for(let o=0;o0,i.flowing!==!1&&this.resume()):t===\"readable\"&&!i.endEmitted&&!i.readableListening&&(i.readableListening=i.needReadable=!0,i.flowing=!1,i.emittedReadable=!1,H(\"on readable\",i.length,i.reading),i.length?cn(this):i.reading||He.nextTick(b_,this)),r};F.prototype.addListener=F.prototype.on;F.prototype.removeListener=function(t,e){let r=qt.prototype.removeListener.call(this,t,e);return t===\"readable\"&&He.nextTick(Gc,this),r};F.prototype.off=F.prototype.removeListener;F.prototype.removeAllListeners=function(t){let e=qt.prototype.removeAllListeners.apply(this,arguments);return (t===\"readable\"||t===void 0)&&He.nextTick(Gc,this),e};function Gc(t){let e=t._readableState;e.readableListening=t.listenerCount(\"readable\")>0,e.resumeScheduled&&e[lr]===!1?e.flowing=!0:t.listenerCount(\"data\")>0?t.resume():e.readableListening||(e.flowing=null);}function b_(t){H(\"readable nexttick read 0\"),t.read(0);}F.prototype.resume=function(){let t=this._readableState;return t.flowing||(H(\"resume\"),t.flowing=!t.readableListening,w_(this,t)),t[lr]=!1,this};function w_(t,e){e.resumeScheduled||(e.resumeScheduled=!0,He.nextTick(__,t,e));}function __(t,e){H(\"resume\",e.reading),e.reading||t.read(0),e.resumeScheduled=!1,t.emit(\"resume\"),Qc(t),e.flowing&&!e.reading&&t.read(0);}F.prototype.pause=function(){return H(\"call pause flowing=%j\",this._readableState.flowing),this._readableState.flowing!==!1&&(H(\"pause\"),this._readableState.flowing=!1,this.emit(\"pause\")),this._readableState[lr]=!0,this};function Qc(t){let e=t._readableState;for(H(\"flow\",e.flowing);e.flowing&&t.read()!==null;);}F.prototype.wrap=function(t){let e=!1;t.on(\"data\",i=>{!this.push(i)&&t.pause&&(e=!0,t.pause());}),t.on(\"end\",()=>{this.push(null);}),t.on(\"error\",i=>{qr(this,i);}),t.on(\"close\",()=>{this.destroy();}),t.on(\"destroy\",()=>{this.destroy();}),this._read=()=>{e&&t.resume&&(e=!1,t.resume());};let r=Kw(t);for(let i=1;i{n=s?Fc(n,s):null,r(),r=Xs;});try{for(;;){let s=t.destroyed?null:t.read();if(s!==null)yield s;else {if(n)throw n;if(n===null)return;await new Gw(i);}}}catch(s){throw n=Fc(n,s),n}finally{(n||e?.destroyOnReturn!==!1)&&(n===void 0||t._readableState.autoDestroy)?Dr.destroyer(t,null):(t.off(\"readable\",i),o());}}$c(F.prototype,{readable:{__proto__:null,get(){let t=this._readableState;return !!t&&t.readable!==!1&&!t.destroyed&&!t.errorEmitted&&!t.endEmitted},set(t){this._readableState&&(this._readableState.readable=!!t);}},readableDidRead:{__proto__:null,enumerable:!1,get:function(){return this._readableState.dataEmitted}},readableAborted:{__proto__:null,enumerable:!1,get:function(){return !!(this._readableState.readable!==!1&&(this._readableState.destroyed||this._readableState.errored)&&!this._readableState.endEmitted)}},readableHighWaterMark:{__proto__:null,enumerable:!1,get:function(){return this._readableState.highWaterMark}},readableBuffer:{__proto__:null,enumerable:!1,get:function(){return this._readableState&&this._readableState.buffer}},readableFlowing:{__proto__:null,enumerable:!1,get:function(){return this._readableState.flowing},set:function(t){this._readableState&&(this._readableState.flowing=t);}},readableLength:{__proto__:null,enumerable:!1,get(){return this._readableState.length}},readableObjectMode:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.objectMode:!1}},readableEncoding:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.encoding:null}},errored:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.errored:null}},closed:{__proto__:null,get(){return this._readableState?this._readableState.closed:!1}},destroyed:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.destroyed:!1},set(t){this._readableState&&(this._readableState.destroyed=t);}},readableEnded:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.endEmitted:!1}}});$c(ro.prototype,{pipesCount:{__proto__:null,get(){return this.pipes.length}},paused:{__proto__:null,get(){return this[lr]!==!1},set(t){this[lr]=!!t;}}});F._fromList=Jc;function Jc(t,e){if(e.length===0)return null;let r;return e.objectMode?r=e.buffer.shift():!t||t>=e.length?(e.decoder?r=e.buffer.join(\"\"):e.buffer.length===1?r=e.buffer.first():r=e.buffer.concat(e.length),e.buffer.clear()):r=e.buffer.consume(t,e.decoder),r}function eo(t){let e=t._readableState;H(\"endReadable\",e.endEmitted),e.endEmitted||(e.ended=!0,He.nextTick(v_,e,t));}function v_(t,e){if(H(\"endReadableNT\",t.endEmitted,t.length),!t.errored&&!t.closeEmitted&&!t.endEmitted&&t.length===0){if(t.endEmitted=!0,e.emit(\"end\"),e.writable&&e.allowHalfOpen===!1)He.nextTick(E_,e);else if(t.autoDestroy){let r=e._writableState;(!r||r.autoDestroy&&(r.finished||r.writable===!1))&&e.destroy();}}}function E_(t){t.writable&&!t.writableEnded&&!t.destroyed&&t.end();}F.from=function(t,e){return c_(F,t,e)};var to;function Xc(){return to===void 0&&(to={}),to}F.fromWeb=function(t,e){return Xc().newStreamReadableFromReadableStream(t,e)};F.toWeb=function(t,e){return Xc().newReadableStreamFromStreamReadable(t,e)};F.wrap=function(t,e){var r,i;return new F({objectMode:(r=(i=t.readableObjectMode)!==null&&i!==void 0?i:t.objectMode)!==null&&r!==void 0?r:!0,...e,destroy(n,o){Dr.destroyer(t,n),o(n);}}).wrap(t)};});var uo=M((aR,ch)=>{v();m();_();var ur=Ut(),{ArrayPrototypeSlice:rh,Error:S_,FunctionPrototypeSymbolHasInstance:ih,ObjectDefineProperty:nh,ObjectDefineProperties:A_,ObjectSetPrototypeOf:sh,StringPrototypeToLowerCase:I_,Symbol:T_,SymbolHasInstance:R_}=ce();ch.exports=ie;ie.WritableState=yi;var{EventEmitter:C_}=(ir(),X(rr)),pi=tn().Stream,{Buffer:hn}=(ye(),X(_e)),gn=tr(),{addAbortSignal:B_}=ci(),{getHighWaterMark:P_,getDefaultHighWaterMark:O_}=sn(),{ERR_INVALID_ARG_TYPE:k_,ERR_METHOD_NOT_IMPLEMENTED:x_,ERR_MULTIPLE_CALLBACK:oh,ERR_STREAM_CANNOT_PIPE:M_,ERR_STREAM_DESTROYED:gi,ERR_STREAM_ALREADY_FINISHED:L_,ERR_STREAM_NULL_VALUES:U_,ERR_STREAM_WRITE_AFTER_END:N_,ERR_UNKNOWN_ENCODING:ah}=Se().codes,{errorOrDestroy:jr}=gn;sh(ie.prototype,pi.prototype);sh(ie,pi);function so(){}var Fr=T_(\"kOnFinished\");function yi(t,e,r){typeof r!=\"boolean\"&&(r=e instanceof nt()),this.objectMode=!!(t&&t.objectMode),r&&(this.objectMode=this.objectMode||!!(t&&t.writableObjectMode)),this.highWaterMark=t?P_(this,t,\"writableHighWaterMark\",r):O_(!1),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;let i=!!(t&&t.decodeStrings===!1);this.decodeStrings=!i,this.defaultEncoding=t&&t.defaultEncoding||\"utf8\",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=D_.bind(void 0,e),this.writecb=null,this.writelen=0,this.afterWriteTickInfo=null,pn(this),this.pendingcb=0,this.constructed=!0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=!t||t.emitClose!==!1,this.autoDestroy=!t||t.autoDestroy!==!1,this.errored=null,this.closed=!1,this.closeEmitted=!1,this[Fr]=[];}function pn(t){t.buffered=[],t.bufferedIndex=0,t.allBuffers=!0,t.allNoop=!0;}yi.prototype.getBuffer=function(){return rh(this.buffered,this.bufferedIndex)};nh(yi.prototype,\"bufferedRequestCount\",{__proto__:null,get(){return this.buffered.length-this.bufferedIndex}});function ie(t){let e=this instanceof nt();if(!e&&!ih(ie,this))return new ie(t);this._writableState=new yi(t,this,e),t&&(typeof t.write==\"function\"&&(this._write=t.write),typeof t.writev==\"function\"&&(this._writev=t.writev),typeof t.destroy==\"function\"&&(this._destroy=t.destroy),typeof t.final==\"function\"&&(this._final=t.final),typeof t.construct==\"function\"&&(this._construct=t.construct),t.signal&&B_(t.signal,this)),pi.call(this,t),gn.construct(this,()=>{let r=this._writableState;r.writing||ao(this,r),lo(this,r);});}nh(ie,R_,{__proto__:null,value:function(t){return ih(this,t)?!0:this!==ie?!1:t&&t._writableState instanceof yi}});ie.prototype.pipe=function(){jr(this,new M_);};function lh(t,e,r,i){let n=t._writableState;if(typeof r==\"function\")i=r,r=n.defaultEncoding;else {if(!r)r=n.defaultEncoding;else if(r!==\"buffer\"&&!hn.isEncoding(r))throw new ah(r);typeof i!=\"function\"&&(i=so);}if(e===null)throw new U_;if(!n.objectMode)if(typeof e==\"string\")n.decodeStrings!==!1&&(e=hn.from(e,r),r=\"buffer\");else if(e instanceof hn)r=\"buffer\";else if(pi._isUint8Array(e))e=pi._uint8ArrayToBuffer(e),r=\"buffer\";else throw new k_(\"chunk\",[\"string\",\"Buffer\",\"Uint8Array\"],e);let o;return n.ending?o=new N_:n.destroyed&&(o=new gi(\"write\")),o?(ur.nextTick(i,o),jr(t,o,!0),o):(n.pendingcb++,q_(t,n,e,r,i))}ie.prototype.write=function(t,e,r){return lh(this,t,e,r)===!0};ie.prototype.cork=function(){this._writableState.corked++;};ie.prototype.uncork=function(){let t=this._writableState;t.corked&&(t.corked--,t.writing||ao(this,t));};ie.prototype.setDefaultEncoding=function(e){if(typeof e==\"string\"&&(e=I_(e)),!hn.isEncoding(e))throw new ah(e);return this._writableState.defaultEncoding=e,this};function q_(t,e,r,i,n){let o=e.objectMode?1:r.length;e.length+=o;let s=e.lengthr.bufferedIndex&&ao(t,r),i?r.afterWriteTickInfo!==null&&r.afterWriteTickInfo.cb===n?r.afterWriteTickInfo.count++:(r.afterWriteTickInfo={count:1,cb:n,stream:t,state:r},ur.nextTick(j_,r.afterWriteTickInfo)):uh(t,r,1,n));}function j_({stream:t,state:e,count:r,cb:i}){return e.afterWriteTickInfo=null,uh(t,e,r,i)}function uh(t,e,r,i){for(!e.ending&&!t.destroyed&&e.length===0&&e.needDrain&&(e.needDrain=!1,t.emit(\"drain\"));r-- >0;)e.pendingcb--,i();e.destroyed&&oo(e),lo(t,e);}function oo(t){if(t.writing)return;for(let n=t.bufferedIndex;n1&&t._writev){e.pendingcb-=o-1;let a=e.allNoop?so:c=>{for(let h=s;h256?(r.splice(0,s),e.bufferedIndex=0):e.bufferedIndex=s;}e.bufferProcessing=!1;}ie.prototype._write=function(t,e,r){if(this._writev)this._writev([{chunk:t,encoding:e}],r);else throw new x_(\"_write()\")};ie.prototype._writev=null;ie.prototype.end=function(t,e,r){let i=this._writableState;typeof t==\"function\"?(r=t,t=null,e=null):typeof e==\"function\"&&(r=e,e=null);let n;if(t!=null){let o=lh(this,t,e);o instanceof S_&&(n=o);}return i.corked&&(i.corked=1,this.uncork()),n||(!i.errored&&!i.ending?(i.ending=!0,lo(this,i,!0),i.ended=!0):i.finished?n=new L_(\"end\"):i.destroyed&&(n=new gi(\"end\"))),typeof r==\"function\"&&(n||i.finished?ur.nextTick(r,n):i[Fr].push(r)),this};function dn(t){return t.ending&&!t.destroyed&&t.constructed&&t.length===0&&!t.errored&&t.buffered.length===0&&!t.finished&&!t.writing&&!t.errorEmitted&&!t.closeEmitted}function F_(t,e){let r=!1;function i(n){if(r){jr(t,n??oh());return}if(r=!0,e.pendingcb--,n){let o=e[Fr].splice(0);for(let s=0;s{dn(n)?no(i,n):n.pendingcb--;},t,e)):dn(e)&&(e.pendingcb++,no(t,e))));}function no(t,e){e.pendingcb--,e.finished=!0;let r=e[Fr].splice(0);for(let i=0;i{v();m();_();var fo=Ut(),H_=(ye(),X(_e)),{isReadable:V_,isWritable:z_,isIterable:hh,isNodeStream:K_,isReadableNodeStream:dh,isWritableNodeStream:ph,isDuplexNodeStream:G_}=tt(),gh=mt(),{AbortError:vh,codes:{ERR_INVALID_ARG_TYPE:Q_,ERR_INVALID_RETURN_VALUE:yh}}=Se(),{destroyer:Wr}=tr(),Y_=nt(),J_=di(),{createDeferredPromise:bh}=Je(),wh=Ys(),_h=globalThis.Blob||H_.Blob,X_=typeof _h<\"u\"?function(e){return e instanceof _h}:function(e){return !1},Z_=globalThis.AbortController||Hi().AbortController,{FunctionPrototypeCall:mh}=ce(),fr=class extends Y_{constructor(e){super(e),e?.readable===!1&&(this._readableState.readable=!1,this._readableState.ended=!0,this._readableState.endEmitted=!0),e?.writable===!1&&(this._writableState.writable=!1,this._writableState.ending=!0,this._writableState.ended=!0,this._writableState.finished=!0);}};Eh.exports=function t(e,r){if(G_(e))return e;if(dh(e))return yn({readable:e});if(ph(e))return yn({writable:e});if(K_(e))return yn({writable:!1,readable:!1});if(typeof e==\"function\"){let{value:n,write:o,final:s,destroy:a}=e0(e);if(hh(n))return wh(fr,n,{objectMode:!0,write:o,final:s,destroy:a});let u=n?.then;if(typeof u==\"function\"){let c,h=mh(u,n,d=>{if(d!=null)throw new yh(\"nully\",\"body\",d)},d=>{Wr(c,d);});return c=new fr({objectMode:!0,readable:!1,write:o,final(d){s(async()=>{try{await h,fo.nextTick(d,null);}catch(g){fo.nextTick(d,g);}});},destroy:a})}throw new yh(\"Iterable, AsyncIterable or AsyncFunction\",r,n)}if(X_(e))return t(e.arrayBuffer());if(hh(e))return wh(fr,e,{objectMode:!0,writable:!1});if(typeof e?.writable==\"object\"||typeof e?.readable==\"object\"){let n=e!=null&&e.readable?dh(e?.readable)?e?.readable:t(e.readable):void 0,o=e!=null&&e.writable?ph(e?.writable)?e?.writable:t(e.writable):void 0;return yn({readable:n,writable:o})}let i=e?.then;if(typeof i==\"function\"){let n;return mh(i,e,o=>{o!=null&&n.push(o),n.push(null);},o=>{Wr(n,o);}),n=new fr({objectMode:!0,writable:!1,read(){}})}throw new Q_(r,[\"Blob\",\"ReadableStream\",\"WritableStream\",\"Stream\",\"Iterable\",\"AsyncIterable\",\"Function\",\"{ readable, writable } pair\",\"Promise\"],e)};function e0(t){let{promise:e,resolve:r}=bh(),i=new Z_,n=i.signal;return {value:t(async function*(){for(;;){let s=e;e=null;let{chunk:a,done:u,cb:c}=await s;if(fo.nextTick(c),u)return;if(n.aborted)throw new vh(void 0,{cause:n.reason});(({promise:e,resolve:r}=bh())),yield a;}}(),{signal:n}),write(s,a,u){let c=r;r=null,c({chunk:s,done:!1,cb:u});},final(s){let a=r;r=null,a({done:!0,cb:s});},destroy(s,a){i.abort(),a(s);}}}function yn(t){let e=t.readable&&typeof t.readable.read!=\"function\"?J_.wrap(t.readable):t.readable,r=t.writable,i=!!V_(e),n=!!z_(r),o,s,a,u,c;function h(d){let g=u;u=null,g?g(d):d&&c.destroy(d);}return c=new fr({readableObjectMode:!!(e!=null&&e.readableObjectMode),writableObjectMode:!!(r!=null&&r.writableObjectMode),readable:i,writable:n}),n&&(gh(r,d=>{n=!1,d&&Wr(e,d),h(d);}),c._write=function(d,g,y){r.write(d,g)?y():o=y;},c._final=function(d){r.end(),s=d;},r.on(\"drain\",function(){if(o){let d=o;o=null,d();}}),r.on(\"finish\",function(){if(s){let d=s;s=null,d();}})),i&&(gh(e,d=>{i=!1,d&&Wr(e,d),h(d);}),e.on(\"readable\",function(){if(a){let d=a;a=null,d();}}),e.on(\"end\",function(){c.push(null);}),c._read=function(){for(;;){let d=e.read();if(d===null){a=c._read;return}if(!c.push(d))return}}),c._destroy=function(d,g){!d&&u!==null&&(d=new vh),a=null,o=null,s=null,u===null?g(d):(u=g,Wr(r,d),Wr(e,d));},c}});var nt=M((RR,Th)=>{v();m();_();var{ObjectDefineProperties:t0,ObjectGetOwnPropertyDescriptor:At,ObjectKeys:r0,ObjectSetPrototypeOf:Ah}=ce();Th.exports=Ve;var po=di(),Ne=uo();Ah(Ve.prototype,po.prototype);Ah(Ve,po);{let t=r0(Ne.prototype);for(let e=0;e{v();m();_();var{ObjectSetPrototypeOf:Rh,Symbol:i0}=ce();Ch.exports=It;var{ERR_METHOD_NOT_IMPLEMENTED:n0}=Se().codes,yo=nt(),{getHighWaterMark:s0}=sn();Rh(It.prototype,yo.prototype);Rh(It,yo);var bi=i0(\"kCallback\");function It(t){if(!(this instanceof It))return new It(t);let e=t?s0(this,t,\"readableHighWaterMark\",!0):null;e===0&&(t={...t,highWaterMark:null,readableHighWaterMark:e,writableHighWaterMark:t.writableHighWaterMark||0}),yo.call(this,t),this._readableState.sync=!1,this[bi]=null,t&&(typeof t.transform==\"function\"&&(this._transform=t.transform),typeof t.flush==\"function\"&&(this._flush=t.flush)),this.on(\"prefinish\",o0);}function go(t){typeof this._flush==\"function\"&&!this.destroyed?this._flush((e,r)=>{if(e){t?t(e):this.destroy(e);return}r!=null&&this.push(r),this.push(null),t&&t();}):(this.push(null),t&&t());}function o0(){this._final!==go&&go.call(this);}It.prototype._final=go;It.prototype._transform=function(t,e,r){throw new n0(\"_transform()\")};It.prototype._write=function(t,e,r){let i=this._readableState,n=this._writableState,o=i.length;this._transform(t,e,(s,a)=>{if(s){r(s);return}a!=null&&this.push(a),n.ended||o===i.length||i.length{v();m();_();var{ObjectSetPrototypeOf:Bh}=ce();Ph.exports=$r;var wo=bo();Bh($r.prototype,wo.prototype);Bh($r,wo);function $r(t){if(!(this instanceof $r))return new $r(t);wo.call(this,t);}$r.prototype._transform=function(t,e,r){r(null,t);};});var mn=M((iC,Lh)=>{v();m();_();var wi=Ut(),{ArrayIsArray:a0,Promise:l0,SymbolAsyncIterator:u0}=ce(),_n=mt(),{once:f0}=Je(),c0=tr(),Oh=nt(),{aggregateTwoErrors:h0,codes:{ERR_INVALID_ARG_TYPE:Ro,ERR_INVALID_RETURN_VALUE:mo,ERR_MISSING_ARGS:d0,ERR_STREAM_DESTROYED:p0,ERR_STREAM_PREMATURE_CLOSE:g0},AbortError:y0}=Se(),{validateFunction:b0,validateAbortSignal:w0}=fi(),{isIterable:cr,isReadable:vo,isReadableNodeStream:wn,isNodeStream:kh,isTransformStream:Hr,isWebStream:_0,isReadableStream:Eo,isReadableEnded:m0}=tt(),v0=globalThis.AbortController||Hi().AbortController,So,Ao;function xh(t,e,r){let i=!1;t.on(\"close\",()=>{i=!0;});let n=_n(t,{readable:e,writable:r},o=>{i=!o;});return {destroy:o=>{i||(i=!0,c0.destroyer(t,o||new p0(\"pipe\")));},cleanup:n}}function E0(t){return b0(t[t.length-1],\"streams[stream.length - 1]\"),t.pop()}function Io(t){if(cr(t))return t;if(wn(t))return S0(t);throw new Ro(\"val\",[\"Readable\",\"Iterable\",\"AsyncIterable\"],t)}async function*S0(t){Ao||(Ao=di()),yield*Ao.prototype[u0].call(t);}async function bn(t,e,r,{end:i}){let n,o=null,s=c=>{if(c&&(n=c),o){let h=o;o=null,h();}},a=()=>new l0((c,h)=>{n?h(n):o=()=>{n?h(n):c();};});e.on(\"drain\",s);let u=_n(e,{readable:!1},s);try{e.writableNeedDrain&&await a();for await(let c of t)e.write(c)||await a();i&&e.end(),await a(),r();}catch(c){r(n!==c?h0(n,c):c);}finally{u(),e.off(\"drain\",s);}}async function To(t,e,r,{end:i}){Hr(e)&&(e=e.writable);let n=e.getWriter();try{for await(let o of t)await n.ready,n.write(o).catch(()=>{});await n.ready,i&&await n.close(),r();}catch(o){try{await n.abort(o),r(o);}catch(s){r(s);}}}function A0(...t){return Mh(t,f0(E0(t)))}function Mh(t,e,r){if(t.length===1&&a0(t[0])&&(t=t[0]),t.length<2)throw new d0(\"streams\");let i=new v0,n=i.signal,o=r?.signal,s=[];w0(o,\"options.signal\");function a(){y(new y0);}o?.addEventListener(\"abort\",a);let u,c,h=[],d=0;function g(C){y(C,--d===0);}function y(C,R){if(C&&(!u||u.code===\"ERR_STREAM_PREMATURE_CLOSE\")&&(u=C),!(!u&&!R)){for(;h.length;)h.shift()(u);o?.removeEventListener(\"abort\",a),i.abort(),R&&(u||s.forEach(U=>U()),wi.nextTick(e,u,c));}}let w;for(let C=0;C0,W=U||r?.end!==!1,K=C===t.length-1;if(kh(R)){let z=function(Q){Q&&Q.name!==\"AbortError\"&&Q.code!==\"ERR_STREAM_PREMATURE_CLOSE\"&&g(Q);};if(W){let{destroy:Q,cleanup:de}=xh(R,U,N);h.push(Q),vo(R)&&K&&s.push(de);}R.on(\"error\",z),vo(R)&&K&&s.push(()=>{R.removeListener(\"error\",z);});}if(C===0)if(typeof R==\"function\"){if(w=R({signal:n}),!cr(w))throw new mo(\"Iterable, AsyncIterable or Stream\",\"source\",w)}else cr(R)||wn(R)||Hr(R)?w=R:w=Oh.from(R);else if(typeof R==\"function\"){if(Hr(w)){var E;w=Io((E=w)===null||E===void 0?void 0:E.readable);}else w=Io(w);if(w=R(w,{signal:n}),U){if(!cr(w,!0))throw new mo(\"AsyncIterable\",`transform[${C-1}]`,w)}else {var S;So||(So=_o());let z=new So({objectMode:!0}),Q=(S=w)===null||S===void 0?void 0:S.then;if(typeof Q==\"function\")d++,Q.call(w,pe=>{c=pe,pe!=null&&z.write(pe),W&&z.end(),wi.nextTick(g);},pe=>{z.destroy(pe),wi.nextTick(g,pe);});else if(cr(w,!0))d++,bn(w,z,g,{end:W});else if(Eo(w)||Hr(w)){let pe=w.readable||w;d++,bn(pe,z,g,{end:W});}else throw new mo(\"AsyncIterable or Promise\",\"destination\",w);w=z;let{destroy:de,cleanup:Gt}=xh(w,!1,!0);h.push(de),K&&s.push(Gt);}}else if(kh(R)){if(wn(w)){d+=2;let z=I0(w,R,g,{end:W});vo(R)&&K&&s.push(z);}else if(Hr(w)||Eo(w)){let z=w.readable||w;d++,bn(z,R,g,{end:W});}else if(cr(w))d++,bn(w,R,g,{end:W});else throw new Ro(\"val\",[\"Readable\",\"Iterable\",\"AsyncIterable\",\"ReadableStream\",\"TransformStream\"],w);w=R;}else if(_0(R)){if(wn(w))d++,To(Io(w),R,g,{end:W});else if(Eo(w)||cr(w))d++,To(w,R,g,{end:W});else if(Hr(w))d++,To(w.readable,R,g,{end:W});else throw new Ro(\"val\",[\"Readable\",\"Iterable\",\"AsyncIterable\",\"ReadableStream\",\"TransformStream\"],w);w=R;}else w=Oh.from(R);}return (n!=null&&n.aborted||o!=null&&o.aborted)&&wi.nextTick(a),w}function I0(t,e,r,{end:i}){let n=!1;if(e.on(\"close\",()=>{n||r(new g0);}),t.pipe(e,{end:!1}),i){let s=function(){n=!0,e.end();};m0(t)?wi.nextTick(s):t.once(\"end\",s);}else r();return _n(t,{readable:!0,writable:!1},s=>{let a=t._readableState;s&&s.code===\"ERR_STREAM_PREMATURE_CLOSE\"&&a&&a.ended&&!a.errored&&!a.errorEmitted?t.once(\"end\",r).once(\"error\",r):r(s);}),_n(e,{readable:!1,writable:!0},r)}Lh.exports={pipelineImpl:Mh,pipeline:A0};});var Bo=M((dC,Fh)=>{v();m();_();var{pipeline:T0}=mn(),vn=nt(),{destroyer:R0}=tr(),{isNodeStream:En,isReadable:Uh,isWritable:Nh,isWebStream:Co,isTransformStream:hr,isWritableStream:qh,isReadableStream:Dh}=tt(),{AbortError:C0,codes:{ERR_INVALID_ARG_VALUE:jh,ERR_MISSING_ARGS:B0}}=Se(),P0=mt();Fh.exports=function(...e){if(e.length===0)throw new B0(\"streams\");if(e.length===1)return vn.from(e[0]);let r=[...e];if(typeof e[0]==\"function\"&&(e[0]=vn.from(e[0])),typeof e[e.length-1]==\"function\"){let y=e.length-1;e[y]=vn.from(e[y]);}for(let y=0;y0&&!(Nh(e[y])||qh(e[y])||hr(e[y])))throw new jh(`streams[${y}]`,r[y],\"must be writable\")}let i,n,o,s,a;function u(y){let w=s;s=null,w?w(y):y?a.destroy(y):!g&&!d&&a.destroy();}let c=e[0],h=T0(e,u),d=!!(Nh(c)||qh(c)||hr(c)),g=!!(Uh(h)||Dh(h)||hr(h));if(a=new vn({writableObjectMode:!!(c!=null&&c.writableObjectMode),readableObjectMode:!!(h!=null&&h.writableObjectMode),writable:d,readable:g}),d){if(En(c))a._write=function(w,E,S){c.write(w,E)?S():i=S;},a._final=function(w){c.end(),n=w;},c.on(\"drain\",function(){if(i){let w=i;i=null,w();}});else if(Co(c)){let E=(hr(c)?c.writable:c).getWriter();a._write=async function(S,I,C){try{await E.ready,E.write(S).catch(()=>{}),C();}catch(R){C(R);}},a._final=async function(S){try{await E.ready,E.close().catch(()=>{}),n=S;}catch(I){S(I);}};}let y=hr(h)?h.readable:h;P0(y,()=>{if(n){let w=n;n=null,w();}});}if(g){if(En(h))h.on(\"readable\",function(){if(o){let y=o;o=null,y();}}),h.on(\"end\",function(){a.push(null);}),a._read=function(){for(;;){let y=h.read();if(y===null){o=a._read;return}if(!a.push(y))return}};else if(Co(h)){let w=(hr(h)?h.readable:h).getReader();a._read=async function(){for(;;)try{let{value:E,done:S}=await w.read();if(!a.push(E))return;if(S){a.push(null);return}}catch{return}};}}return a._destroy=function(y,w){!y&&s!==null&&(y=new C0),o=null,i=null,n=null,s===null?w(y):(s=w,En(h)&&R0(h,y));},a};});var Qh=M((SC,ko)=>{v();m();_();var Vh=globalThis.AbortController||Hi().AbortController,{codes:{ERR_INVALID_ARG_VALUE:O0,ERR_INVALID_ARG_TYPE:_i,ERR_MISSING_ARGS:k0,ERR_OUT_OF_RANGE:x0},AbortError:st}=Se(),{validateAbortSignal:dr,validateInteger:M0,validateObject:pr}=fi(),L0=ce().Symbol(\"kWeak\"),{finished:U0}=mt(),N0=Bo(),{addAbortSignalNoValidate:q0}=ci(),{isWritable:D0,isNodeStream:j0}=tt(),{ArrayPrototypePush:F0,MathFloor:W0,Number:$0,NumberIsNaN:H0,Promise:Wh,PromiseReject:$h,PromisePrototypeThen:V0,Symbol:zh}=ce(),Sn=zh(\"kEmpty\"),Hh=zh(\"kEof\");function z0(t,e){if(e!=null&&pr(e,\"options\"),e?.signal!=null&&dr(e.signal,\"options.signal\"),j0(t)&&!D0(t))throw new O0(\"stream\",t,\"must be writable\");let r=N0(this,t);return e!=null&&e.signal&&q0(e.signal,r),r}function An(t,e){if(typeof t!=\"function\")throw new _i(\"fn\",[\"Function\",\"AsyncFunction\"],t);e!=null&&pr(e,\"options\"),e?.signal!=null&&dr(e.signal,\"options.signal\");let r=1;return e?.concurrency!=null&&(r=W0(e.concurrency)),M0(r,\"concurrency\",1),async function*(){var n,o;let s=new Vh,a=this,u=[],c=s.signal,h={signal:c},d=()=>s.abort();e!=null&&(n=e.signal)!==null&&n!==void 0&&n.aborted&&d(),e==null||(o=e.signal)===null||o===void 0||o.addEventListener(\"abort\",d);let g,y,w=!1;function E(){w=!0;}async function S(){try{for await(let R of a){var I;if(w)return;if(c.aborted)throw new st;try{R=t(R,h);}catch(U){R=$h(U);}R!==Sn&&(typeof((I=R)===null||I===void 0?void 0:I.catch)==\"function\"&&R.catch(E),u.push(R),g&&(g(),g=null),!w&&u.length&&u.length>=r&&await new Wh(U=>{y=U;}));}u.push(Hh);}catch(R){let U=$h(R);V0(U,void 0,E),u.push(U);}finally{var C;w=!0,g&&(g(),g=null),e==null||(C=e.signal)===null||C===void 0||C.removeEventListener(\"abort\",d);}}S();try{for(;;){for(;u.length>0;){let I=await u[0];if(I===Hh)return;if(c.aborted)throw new st;I!==Sn&&(yield I),u.shift(),y&&(y(),y=null);}await new Wh(I=>{g=I;});}}finally{s.abort(),w=!0,y&&(y(),y=null);}}.call(this)}function K0(t=void 0){return t!=null&&pr(t,\"options\"),t?.signal!=null&&dr(t.signal,\"options.signal\"),async function*(){let r=0;for await(let n of this){var i;if(t!=null&&(i=t.signal)!==null&&i!==void 0&&i.aborted)throw new st({cause:t.signal.reason});yield [r++,n];}}.call(this)}async function Kh(t,e=void 0){for await(let r of Oo.call(this,t,e))return !0;return !1}async function G0(t,e=void 0){if(typeof t!=\"function\")throw new _i(\"fn\",[\"Function\",\"AsyncFunction\"],t);return !await Kh.call(this,async(...r)=>!await t(...r),e)}async function Q0(t,e){for await(let r of Oo.call(this,t,e))return r}async function Y0(t,e){if(typeof t!=\"function\")throw new _i(\"fn\",[\"Function\",\"AsyncFunction\"],t);async function r(i,n){return await t(i,n),Sn}for await(let i of An.call(this,r,e));}function Oo(t,e){if(typeof t!=\"function\")throw new _i(\"fn\",[\"Function\",\"AsyncFunction\"],t);async function r(i,n){return await t(i,n)?i:Sn}return An.call(this,r,e)}var Po=class extends k0{constructor(){super(\"reduce\"),this.message=\"Reduce of an empty stream requires an initial value\";}};async function J0(t,e,r){var i;if(typeof t!=\"function\")throw new _i(\"reducer\",[\"Function\",\"AsyncFunction\"],t);r!=null&&pr(r,\"options\"),r?.signal!=null&&dr(r.signal,\"options.signal\");let n=arguments.length>1;if(r!=null&&(i=r.signal)!==null&&i!==void 0&&i.aborted){let c=new st(void 0,{cause:r.signal.reason});throw this.once(\"error\",()=>{}),await U0(this.destroy(c)),c}let o=new Vh,s=o.signal;if(r!=null&&r.signal){let c={once:!0,[L0]:this};r.signal.addEventListener(\"abort\",()=>o.abort(),c);}let a=!1;try{for await(let c of this){var u;if(a=!0,r!=null&&(u=r.signal)!==null&&u!==void 0&&u.aborted)throw new st;n?e=await t(e,c,{signal:s}):(e=c,n=!0);}if(!a&&!n)throw new Po}finally{o.abort();}return e}async function X0(t){t!=null&&pr(t,\"options\"),t?.signal!=null&&dr(t.signal,\"options.signal\");let e=[];for await(let i of this){var r;if(t!=null&&(r=t.signal)!==null&&r!==void 0&&r.aborted)throw new st(void 0,{cause:t.signal.reason});F0(e,i);}return e}function Z0(t,e){let r=An.call(this,t,e);return async function*(){for await(let n of r)yield*n;}.call(this)}function Gh(t){if(t=$0(t),H0(t))return 0;if(t<0)throw new x0(\"number\",\">= 0\",t);return t}function em(t,e=void 0){return e!=null&&pr(e,\"options\"),e?.signal!=null&&dr(e.signal,\"options.signal\"),t=Gh(t),async function*(){var i;if(e!=null&&(i=e.signal)!==null&&i!==void 0&&i.aborted)throw new st;for await(let o of this){var n;if(e!=null&&(n=e.signal)!==null&&n!==void 0&&n.aborted)throw new st;t--<=0&&(yield o);}}.call(this)}function tm(t,e=void 0){return e!=null&&pr(e,\"options\"),e?.signal!=null&&dr(e.signal,\"options.signal\"),t=Gh(t),async function*(){var i;if(e!=null&&(i=e.signal)!==null&&i!==void 0&&i.aborted)throw new st;for await(let o of this){var n;if(e!=null&&(n=e.signal)!==null&&n!==void 0&&n.aborted)throw new st;if(t-- >0)yield o;else return}}.call(this)}ko.exports.streamReturningOperators={asIndexedPairs:K0,drop:em,filter:Oo,flatMap:Z0,map:An,take:tm,compose:z0};ko.exports.promiseReturningOperators={every:G0,forEach:Y0,reduce:J0,toArray:X0,some:Kh,find:Q0};});var xo=M((xC,Yh)=>{v();m();_();var{ArrayPrototypePop:rm,Promise:im}=ce(),{isIterable:nm,isNodeStream:sm,isWebStream:om}=tt(),{pipelineImpl:am}=mn(),{finished:lm}=mt();Mo();function um(...t){return new im((e,r)=>{let i,n,o=t[t.length-1];if(o&&typeof o==\"object\"&&!sm(o)&&!nm(o)&&!om(o)){let s=rm(t);i=s.signal,n=s.end;}am(t,(s,a)=>{s?r(s):e(a);},{signal:i,end:n});})}Yh.exports={finished:lm,pipeline:um};});var Mo=M(($C,sd)=>{v();m();_();var{Buffer:fm}=(ye(),X(_e)),{ObjectDefineProperty:Tt,ObjectKeys:Zh,ReflectApply:ed}=ce(),{promisify:{custom:td}}=Je(),{streamReturningOperators:Jh,promiseReturningOperators:Xh}=Qh(),{codes:{ERR_ILLEGAL_CONSTRUCTOR:rd}}=Se(),cm=Bo(),{pipeline:id}=mn(),{destroyer:hm}=tr(),nd=mt(),Lo=xo(),Uo=tt(),le=sd.exports=tn().Stream;le.isDisturbed=Uo.isDisturbed;le.isErrored=Uo.isErrored;le.isReadable=Uo.isReadable;le.Readable=di();for(let t of Zh(Jh)){let r=function(...i){if(new.target)throw rd();return le.Readable.from(ed(e,this,i))};let e=Jh[t];Tt(r,\"name\",{__proto__:null,value:e.name}),Tt(r,\"length\",{__proto__:null,value:e.length}),Tt(le.Readable.prototype,t,{__proto__:null,value:r,enumerable:!1,configurable:!0,writable:!0});}for(let t of Zh(Xh)){let r=function(...n){if(new.target)throw rd();return ed(e,this,n)};let e=Xh[t];Tt(r,\"name\",{__proto__:null,value:e.name}),Tt(r,\"length\",{__proto__:null,value:e.length}),Tt(le.Readable.prototype,t,{__proto__:null,value:r,enumerable:!1,configurable:!0,writable:!0});}le.Writable=uo();le.Duplex=nt();le.Transform=bo();le.PassThrough=_o();le.pipeline=id;var{addAbortSignal:dm}=ci();le.addAbortSignal=dm;le.finished=nd;le.destroy=hm;le.compose=cm;Tt(le,\"promises\",{__proto__:null,configurable:!0,enumerable:!0,get(){return Lo}});Tt(id,td,{__proto__:null,enumerable:!0,get(){return Lo.pipeline}});Tt(nd,td,{__proto__:null,enumerable:!0,get(){return Lo.finished}});le.Stream=le;le._isUint8Array=function(e){return e instanceof Uint8Array};le._uint8ArrayToBuffer=function(e){return fm.from(e.buffer,e.byteOffset,e.byteLength)};});var Dt=M((ZC,ue)=>{v();m();_();var he=Mo(),pm=xo(),gm=he.Readable.destroy;ue.exports=he.Readable;ue.exports._uint8ArrayToBuffer=he._uint8ArrayToBuffer;ue.exports._isUint8Array=he._isUint8Array;ue.exports.isDisturbed=he.isDisturbed;ue.exports.isErrored=he.isErrored;ue.exports.isReadable=he.isReadable;ue.exports.Readable=he.Readable;ue.exports.Writable=he.Writable;ue.exports.Duplex=he.Duplex;ue.exports.Transform=he.Transform;ue.exports.PassThrough=he.PassThrough;ue.exports.addAbortSignal=he.addAbortSignal;ue.exports.finished=he.finished;ue.exports.destroy=he.destroy;ue.exports.destroy=gm;ue.exports.pipeline=he.pipeline;ue.exports.compose=he.compose;Object.defineProperty(he,\"promises\",{configurable:!0,enumerable:!0,get(){return pm}});ue.exports.Stream=he.Stream;ue.exports.default=ue.exports;});var od=M((uB,qo)=>{v();m();_();typeof Object.create==\"function\"?qo.exports=function(e,r){r&&(e.super_=r,e.prototype=Object.create(r.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}));}:qo.exports=function(e,r){if(r){e.super_=r;var i=function(){};i.prototype=r.prototype,e.prototype=new i,e.prototype.constructor=e;}};});var ud=M((_B,ld)=>{v();m();_();var{Buffer:ze}=(ye(),X(_e)),ad=Symbol.for(\"BufferList\");function ee(t){if(!(this instanceof ee))return new ee(t);ee._init.call(this,t);}ee._init=function(e){Object.defineProperty(this,ad,{value:!0}),this._bufs=[],this.length=0,e&&this.append(e);};ee.prototype._new=function(e){return new ee(e)};ee.prototype._offset=function(e){if(e===0)return [0,0];let r=0;for(let i=0;ithis.length||e<0)return;let r=this._offset(e);return this._bufs[r[0]][r[1]]};ee.prototype.slice=function(e,r){return typeof e==\"number\"&&e<0&&(e+=this.length),typeof r==\"number\"&&r<0&&(r+=this.length),this.copy(null,0,e,r)};ee.prototype.copy=function(e,r,i,n){if((typeof i!=\"number\"||i<0)&&(i=0),(typeof n!=\"number\"||n>this.length)&&(n=this.length),i>=this.length||n<=0)return e||ze.alloc(0);let o=!!e,s=this._offset(i),a=n-i,u=a,c=o&&r||0,h=s[1];if(i===0&&n===this.length){if(!o)return this._bufs.length===1?this._bufs[0]:ze.concat(this._bufs,this.length);for(let d=0;dg)this._bufs[d].copy(e,c,h),c+=g;else {this._bufs[d].copy(e,c,h,h+u),c+=g;break}u-=g,h&&(h=0);}return e.length>c?e.slice(0,c):e};ee.prototype.shallowSlice=function(e,r){if(e=e||0,r=typeof r!=\"number\"?this.length:r,e<0&&(e+=this.length),r<0&&(r+=this.length),e===r)return this._new();let i=this._offset(e),n=this._offset(r),o=this._bufs.slice(i[0],n[0]+1);return n[1]===0?o.pop():o[o.length-1]=o[o.length-1].slice(0,n[1]),i[1]!==0&&(o[0]=o[0].slice(i[1])),this._new(o)};ee.prototype.toString=function(e,r,i){return this.slice(r,i).toString(e)};ee.prototype.consume=function(e){if(e=Math.trunc(e),Number.isNaN(e)||e<=0)return this;for(;this._bufs.length;)if(e>=this._bufs[0].length)e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift();else {this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}return this};ee.prototype.duplicate=function(){let e=this._new();for(let r=0;rthis.length?this.length:e;let i=this._offset(e),n=i[0],o=i[1];for(;n=t.length){let u=s.indexOf(t,o);if(u!==-1)return this._reverseOffset([n,u]);o=s.length-t.length+1;}else {let u=this._reverseOffset([n,o]);if(this._match(u,t))return u;o++;}o=0;}return -1};ee.prototype._match=function(t,e){if(this.length-t{v();m();_();var Do=Dt().Duplex,ym=od(),mi=ud();function Ee(t){if(!(this instanceof Ee))return new Ee(t);if(typeof t==\"function\"){this._callback=t;let e=function(i){this._callback&&(this._callback(i),this._callback=null);}.bind(this);this.on(\"pipe\",function(i){i.on(\"error\",e);}),this.on(\"unpipe\",function(i){i.removeListener(\"error\",e);}),t=null;}mi._init.call(this,t),Do.call(this);}ym(Ee,Do);Object.assign(Ee.prototype,mi.prototype);Ee.prototype._new=function(e){return new Ee(e)};Ee.prototype._write=function(e,r,i){this._appendBuffer(e),typeof i==\"function\"&&i();};Ee.prototype._read=function(e){if(!this.length)return this.push(null);e=Math.min(e,this.length),this.push(this.slice(0,e)),this.consume(e);};Ee.prototype.end=function(e){Do.prototype.end.call(this,e),this._callback&&(this._callback(null,this.slice()),this._callback=null);};Ee.prototype._destroy=function(e,r){this._bufs.length=0,this.length=0,r(e);};Ee.prototype._isBufferList=function(e){return e instanceof Ee||e instanceof mi||Ee.isBufferList(e)};Ee.isBufferList=mi.isBufferList;In.exports=Ee;In.exports.BufferListStream=Ee;In.exports.BufferList=mi;});var hd=M((DB,cd)=>{v();m();_();var jo=class{constructor(){this.cmd=null,this.retain=!1,this.qos=0,this.dup=!1,this.length=-1,this.topic=null,this.payload=null;}};cd.exports=jo;});var Fo=M((QB,dd)=>{v();m();_();var L=dd.exports,{Buffer:Oe}=(ye(),X(_e));L.types={0:\"reserved\",1:\"connect\",2:\"connack\",3:\"publish\",4:\"puback\",5:\"pubrec\",6:\"pubrel\",7:\"pubcomp\",8:\"subscribe\",9:\"suback\",10:\"unsubscribe\",11:\"unsuback\",12:\"pingreq\",13:\"pingresp\",14:\"disconnect\",15:\"auth\"};L.requiredHeaderFlags={1:0,2:0,4:0,5:0,6:2,7:0,8:2,9:0,10:2,11:0,12:0,13:0,14:0,15:0};L.requiredHeaderFlagsErrors={};for(let t in L.requiredHeaderFlags){let e=L.requiredHeaderFlags[t];L.requiredHeaderFlagsErrors[t]=\"Invalid header flag bits, must be 0x\"+e.toString(16)+\" for \"+L.types[t]+\" packet\";}L.codes={};for(let t in L.types){let e=L.types[t];L.codes[e]=t;}L.CMD_SHIFT=4;L.CMD_MASK=240;L.DUP_MASK=8;L.QOS_MASK=3;L.QOS_SHIFT=1;L.RETAIN_MASK=1;L.VARBYTEINT_MASK=127;L.VARBYTEINT_FIN_MASK=128;L.VARBYTEINT_MAX=268435455;L.SESSIONPRESENT_MASK=1;L.SESSIONPRESENT_HEADER=Oe.from([L.SESSIONPRESENT_MASK]);L.CONNACK_HEADER=Oe.from([L.codes.connack<[0,1].map(r=>[0,1].map(i=>{let n=Oe.alloc(1);return n.writeUInt8(L.codes[t]<Oe.from([t]));L.EMPTY={pingreq:Oe.from([L.codes.pingreq<<4,0]),pingresp:Oe.from([L.codes.pingresp<<4,0]),disconnect:Oe.from([L.codes.disconnect<<4,0])};L.MQTT5_PUBACK_PUBREC_CODES={0:\"Success\",16:\"No matching subscribers\",128:\"Unspecified error\",131:\"Implementation specific error\",135:\"Not authorized\",144:\"Topic Name invalid\",145:\"Packet identifier in use\",151:\"Quota exceeded\",153:\"Payload format invalid\"};L.MQTT5_PUBREL_PUBCOMP_CODES={0:\"Success\",146:\"Packet Identifier not found\"};L.MQTT5_SUBACK_CODES={0:\"Granted QoS 0\",1:\"Granted QoS 1\",2:\"Granted QoS 2\",128:\"Unspecified error\",131:\"Implementation specific error\",135:\"Not authorized\",143:\"Topic Filter invalid\",145:\"Packet Identifier in use\",151:\"Quota exceeded\",158:\"Shared Subscriptions not supported\",161:\"Subscription Identifiers not supported\",162:\"Wildcard Subscriptions not supported\"};L.MQTT5_UNSUBACK_CODES={0:\"Success\",17:\"No subscription existed\",128:\"Unspecified error\",131:\"Implementation specific error\",135:\"Not authorized\",143:\"Topic Filter invalid\",145:\"Packet Identifier in use\"};L.MQTT5_DISCONNECT_CODES={0:\"Normal disconnection\",4:\"Disconnect with Will Message\",128:\"Unspecified error\",129:\"Malformed Packet\",130:\"Protocol Error\",131:\"Implementation specific error\",135:\"Not authorized\",137:\"Server busy\",139:\"Server shutting down\",141:\"Keep Alive timeout\",142:\"Session taken over\",143:\"Topic Filter invalid\",144:\"Topic Name invalid\",147:\"Receive Maximum exceeded\",148:\"Topic Alias invalid\",149:\"Packet too large\",150:\"Message rate too high\",151:\"Quota exceeded\",152:\"Administrative action\",153:\"Payload format invalid\",154:\"Retain not supported\",155:\"QoS not supported\",156:\"Use another server\",157:\"Server moved\",158:\"Shared Subscriptions not supported\",159:\"Connection rate exceeded\",160:\"Maximum connect time\",161:\"Subscription Identifiers not supported\",162:\"Wildcard Subscriptions not supported\"};L.MQTT5_AUTH_CODES={0:\"Success\",24:\"Continue authentication\",25:\"Re-authenticate\"};});var gd=M((sP,pd)=>{v();m();_();var Vr=1e3,zr=Vr*60,Kr=zr*60,gr=Kr*24,bm=gr*7,wm=gr*365.25;pd.exports=function(t,e){e=e||{};var r=typeof t;if(r===\"string\"&&t.length>0)return _m(t);if(r===\"number\"&&isFinite(t))return e.long?vm(t):mm(t);throw new Error(\"val is not a non-empty string or a valid number. val=\"+JSON.stringify(t))};function _m(t){if(t=String(t),!(t.length>100)){var e=/^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(t);if(e){var r=parseFloat(e[1]),i=(e[2]||\"ms\").toLowerCase();switch(i){case\"years\":case\"year\":case\"yrs\":case\"yr\":case\"y\":return r*wm;case\"weeks\":case\"week\":case\"w\":return r*bm;case\"days\":case\"day\":case\"d\":return r*gr;case\"hours\":case\"hour\":case\"hrs\":case\"hr\":case\"h\":return r*Kr;case\"minutes\":case\"minute\":case\"mins\":case\"min\":case\"m\":return r*zr;case\"seconds\":case\"second\":case\"secs\":case\"sec\":case\"s\":return r*Vr;case\"milliseconds\":case\"millisecond\":case\"msecs\":case\"msec\":case\"ms\":return r;default:return}}}}function mm(t){var e=Math.abs(t);return e>=gr?Math.round(t/gr)+\"d\":e>=Kr?Math.round(t/Kr)+\"h\":e>=zr?Math.round(t/zr)+\"m\":e>=Vr?Math.round(t/Vr)+\"s\":t+\"ms\"}function vm(t){var e=Math.abs(t);return e>=gr?Tn(t,e,gr,\"day\"):e>=Kr?Tn(t,e,Kr,\"hour\"):e>=zr?Tn(t,e,zr,\"minute\"):e>=Vr?Tn(t,e,Vr,\"second\"):t+\" ms\"}function Tn(t,e,r,i){var n=e>=r*1.5;return Math.round(t/r)+\" \"+i+(n?\"s\":\"\")}});var bd=M((gP,yd)=>{v();m();_();function Em(t){r.debug=r,r.default=r,r.coerce=u,r.disable=o,r.enable=n,r.enabled=s,r.humanize=gd(),r.destroy=c,Object.keys(t).forEach(h=>{r[h]=t[h];}),r.names=[],r.skips=[],r.formatters={};function e(h){let d=0;for(let g=0;g{if(W===\"%%\")return \"%\";U++;let z=r.formatters[K];if(typeof z==\"function\"){let Q=S[U];W=z.call(I,Q),S.splice(U,1),U--;}return W}),r.formatArgs.call(I,S),(I.log||r.log).apply(I,S);}return E.namespace=h,E.useColors=r.useColors(),E.color=r.selectColor(h),E.extend=i,E.destroy=r.destroy,Object.defineProperty(E,\"enabled\",{enumerable:!0,configurable:!1,get:()=>g!==null?g:(y!==r.namespaces&&(y=r.namespaces,w=r.enabled(h)),w),set:S=>{g=S;}}),typeof r.init==\"function\"&&r.init(E),E}function i(h,d){let g=r(this.namespace+(typeof d>\"u\"?\":\":d)+h);return g.log=this.log,g}function n(h){r.save(h),r.namespaces=h,r.names=[],r.skips=[];let d,g=(typeof h==\"string\"?h:\"\").split(/[\\s,]+/),y=g.length;for(d=0;d\"-\"+d)].join(\",\");return r.enable(\"\"),h}function s(h){if(h[h.length-1]===\"*\")return !0;let d,g;for(d=0,g=r.skips.length;d{v();m();_();xe.formatArgs=Am;xe.save=Im;xe.load=Tm;xe.useColors=Sm;xe.storage=Rm();xe.destroy=(()=>{let t=!1;return ()=>{t||(t=!0,console.warn(\"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.\"));}})();xe.colors=[\"#0000CC\",\"#0000FF\",\"#0033CC\",\"#0033FF\",\"#0066CC\",\"#0066FF\",\"#0099CC\",\"#0099FF\",\"#00CC00\",\"#00CC33\",\"#00CC66\",\"#00CC99\",\"#00CCCC\",\"#00CCFF\",\"#3300CC\",\"#3300FF\",\"#3333CC\",\"#3333FF\",\"#3366CC\",\"#3366FF\",\"#3399CC\",\"#3399FF\",\"#33CC00\",\"#33CC33\",\"#33CC66\",\"#33CC99\",\"#33CCCC\",\"#33CCFF\",\"#6600CC\",\"#6600FF\",\"#6633CC\",\"#6633FF\",\"#66CC00\",\"#66CC33\",\"#9900CC\",\"#9900FF\",\"#9933CC\",\"#9933FF\",\"#99CC00\",\"#99CC33\",\"#CC0000\",\"#CC0033\",\"#CC0066\",\"#CC0099\",\"#CC00CC\",\"#CC00FF\",\"#CC3300\",\"#CC3333\",\"#CC3366\",\"#CC3399\",\"#CC33CC\",\"#CC33FF\",\"#CC6600\",\"#CC6633\",\"#CC9900\",\"#CC9933\",\"#CCCC00\",\"#CCCC33\",\"#FF0000\",\"#FF0033\",\"#FF0066\",\"#FF0099\",\"#FF00CC\",\"#FF00FF\",\"#FF3300\",\"#FF3333\",\"#FF3366\",\"#FF3399\",\"#FF33CC\",\"#FF33FF\",\"#FF6600\",\"#FF6633\",\"#FF9900\",\"#FF9933\",\"#FFCC00\",\"#FFCC33\"];function Sm(){return typeof window<\"u\"&&window.process&&(window.process.type===\"renderer\"||window.process.__nwjs)?!0:typeof B<\"u\"&&B.userAgent&&B.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)?!1:typeof document<\"u\"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<\"u\"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof B<\"u\"&&B.userAgent&&B.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof B<\"u\"&&B.userAgent&&B.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/)}function Am(t){if(t[0]=(this.useColors?\"%c\":\"\")+this.namespace+(this.useColors?\" %c\":\" \")+t[0]+(this.useColors?\"%c \":\" \")+\"+\"+Rn.exports.humanize(this.diff),!this.useColors)return;let e=\"color: \"+this.color;t.splice(1,0,e,\"color: inherit\");let r=0,i=0;t[0].replace(/%[a-zA-Z%]/g,n=>{n!==\"%%\"&&(r++,n===\"%c\"&&(i=r));}),t.splice(i,0,e);}xe.log=console.debug||console.log||(()=>{});function Im(t){try{t?xe.storage.setItem(\"debug\",t):xe.storage.removeItem(\"debug\");}catch{}}function Tm(){let t;try{t=xe.storage.getItem(\"debug\");}catch{}return !t&&typeof P<\"u\"&&\"env\"in P&&(t=P.env.DEBUG),t}function Rm(){try{return localStorage}catch{}}Rn.exports=bd()(xe);var{formatters:Cm}=Rn.exports;Cm.j=function(t){try{return JSON.stringify(t)}catch(e){return \"[UnexpectedJSONParseError]: \"+e.message}};});var md=M((MP,_d)=>{v();m();_();var Bm=fd(),{EventEmitter:Pm}=(ir(),X(rr)),wd=hd(),V=Fo(),D=ot()(\"mqtt-packet:parser\"),Wo=class t extends Pm{constructor(){super(),this.parser=this.constructor.parser;}static parser(e){return this instanceof t?(this.settings=e||{},this._states=[\"_parseHeader\",\"_parseLength\",\"_parsePayload\",\"_newPacket\"],this._resetState(),this):new t().parser(e)}_resetState(){D(\"_resetState: resetting packet, error, _list, and _stateCounter\"),this.packet=new wd,this.error=null,this._list=Bm(),this._stateCounter=0;}parse(e){for(this.error&&this._resetState(),this._list.append(e),D(\"parse: current state: %s\",this._states[this._stateCounter]);(this.packet.length!==-1||this._list.length>0)&&this[this._states[this._stateCounter]]()&&!this.error;)this._stateCounter++,D(\"parse: state complete. _stateCounter is now: %d\",this._stateCounter),D(\"parse: packet.length: %d, buffer list length: %d\",this.packet.length,this._list.length),this._stateCounter>=this._states.length&&(this._stateCounter=0);return D(\"parse: exited while loop. packet: %d, buffer list length: %d\",this.packet.length,this._list.length),this._list.length}_parseHeader(){let e=this._list.readUInt8(0),r=e>>V.CMD_SHIFT;this.packet.cmd=V.types[r];let i=e&15,n=V.requiredHeaderFlags[r];return n!=null&&i!==n?this._emitError(new Error(V.requiredHeaderFlagsErrors[r])):(this.packet.retain=(e&V.RETAIN_MASK)!==0,this.packet.qos=e>>V.QOS_SHIFT&V.QOS_MASK,this.packet.qos>2?this._emitError(new Error(\"Packet must not have both QoS bits set to 1\")):(this.packet.dup=(e&V.DUP_MASK)!==0,D(\"_parseHeader: packet: %o\",this.packet),this._list.consume(1),!0))}_parseLength(){let e=this._parseVarByteNum(!0);return e&&(this.packet.length=e.value,this._list.consume(e.bytes)),D(\"_parseLength %d\",e.value),!!e}_parsePayload(){D(\"_parsePayload: payload %O\",this._list);let e=!1;if(this.packet.length===0||this._list.length>=this.packet.length){switch(this._pos=0,this.packet.cmd){case\"connect\":this._parseConnect();break;case\"connack\":this._parseConnack();break;case\"publish\":this._parsePublish();break;case\"puback\":case\"pubrec\":case\"pubrel\":case\"pubcomp\":this._parseConfirmation();break;case\"subscribe\":this._parseSubscribe();break;case\"suback\":this._parseSuback();break;case\"unsubscribe\":this._parseUnsubscribe();break;case\"unsuback\":this._parseUnsuback();break;case\"pingreq\":case\"pingresp\":break;case\"disconnect\":this._parseDisconnect();break;case\"auth\":this._parseAuth();break;default:this._emitError(new Error(\"Not supported\"));}e=!0;}return D(\"_parsePayload complete result: %s\",e),e}_parseConnect(){D(\"_parseConnect\");let e,r,i,n,o={},s=this.packet,a=this._parseString();if(a===null)return this._emitError(new Error(\"Cannot parse protocolId\"));if(a!==\"MQTT\"&&a!==\"MQIsdp\")return this._emitError(new Error(\"Invalid protocolId\"));if(s.protocolId=a,this._pos>=this._list.length)return this._emitError(new Error(\"Packet too short\"));if(s.protocolVersion=this._list.readUInt8(this._pos),s.protocolVersion>=128&&(s.bridgeMode=!0,s.protocolVersion=s.protocolVersion-128),s.protocolVersion!==3&&s.protocolVersion!==4&&s.protocolVersion!==5)return this._emitError(new Error(\"Invalid protocol version\"));if(this._pos++,this._pos>=this._list.length)return this._emitError(new Error(\"Packet too short\"));if(this._list.readUInt8(this._pos)&1)return this._emitError(new Error(\"Connect flag bit 0 must be 0, but got 1\"));o.username=this._list.readUInt8(this._pos)&V.USERNAME_MASK,o.password=this._list.readUInt8(this._pos)&V.PASSWORD_MASK,o.will=this._list.readUInt8(this._pos)&V.WILL_FLAG_MASK;let u=!!(this._list.readUInt8(this._pos)&V.WILL_RETAIN_MASK),c=(this._list.readUInt8(this._pos)&V.WILL_QOS_MASK)>>V.WILL_QOS_SHIFT;if(o.will)s.will={},s.will.retain=u,s.will.qos=c;else {if(u)return this._emitError(new Error(\"Will Retain Flag must be set to zero when Will Flag is set to 0\"));if(c)return this._emitError(new Error(\"Will QoS must be set to zero when Will Flag is set to 0\"))}if(s.clean=(this._list.readUInt8(this._pos)&V.CLEAN_SESSION_MASK)!==0,this._pos++,s.keepalive=this._parseNum(),s.keepalive===-1)return this._emitError(new Error(\"Packet too short\"));if(s.protocolVersion===5){let d=this._parseProperties();Object.getOwnPropertyNames(d).length&&(s.properties=d);}let h=this._parseString();if(h===null)return this._emitError(new Error(\"Packet too short\"));if(s.clientId=h,D(\"_parseConnect: packet.clientId: %s\",s.clientId),o.will){if(s.protocolVersion===5){let d=this._parseProperties();Object.getOwnPropertyNames(d).length&&(s.will.properties=d);}if(e=this._parseString(),e===null)return this._emitError(new Error(\"Cannot parse will topic\"));if(s.will.topic=e,D(\"_parseConnect: packet.will.topic: %s\",s.will.topic),r=this._parseBuffer(),r===null)return this._emitError(new Error(\"Cannot parse will payload\"));s.will.payload=r,D(\"_parseConnect: packet.will.paylaod: %s\",s.will.payload);}if(o.username){if(n=this._parseString(),n===null)return this._emitError(new Error(\"Cannot parse username\"));s.username=n,D(\"_parseConnect: packet.username: %s\",s.username);}if(o.password){if(i=this._parseBuffer(),i===null)return this._emitError(new Error(\"Cannot parse password\"));s.password=i;}return this.settings=s,D(\"_parseConnect: complete\"),s}_parseConnack(){D(\"_parseConnack\");let e=this.packet;if(this._list.length<1)return null;let r=this._list.readUInt8(this._pos++);if(r>1)return this._emitError(new Error(\"Invalid connack flags, bits 7-1 must be set to 0\"));if(e.sessionPresent=!!(r&V.SESSIONPRESENT_MASK),this.settings.protocolVersion===5)this._list.length>=2?e.reasonCode=this._list.readUInt8(this._pos++):e.reasonCode=0;else {if(this._list.length<2)return null;e.returnCode=this._list.readUInt8(this._pos++);}if(e.returnCode===-1||e.reasonCode===-1)return this._emitError(new Error(\"Cannot parse return code\"));if(this.settings.protocolVersion===5){let i=this._parseProperties();Object.getOwnPropertyNames(i).length&&(e.properties=i);}D(\"_parseConnack: complete\");}_parsePublish(){D(\"_parsePublish\");let e=this.packet;if(e.topic=this._parseString(),e.topic===null)return this._emitError(new Error(\"Cannot parse topic\"));if(!(e.qos>0&&!this._parseMessageId())){if(this.settings.protocolVersion===5){let r=this._parseProperties();Object.getOwnPropertyNames(r).length&&(e.properties=r);}e.payload=this._list.slice(this._pos,e.length),D(\"_parsePublish: payload from buffer list: %o\",e.payload);}}_parseSubscribe(){D(\"_parseSubscribe\");let e=this.packet,r,i,n,o,s,a,u;if(e.subscriptions=[],!!this._parseMessageId()){if(this.settings.protocolVersion===5){let c=this._parseProperties();Object.getOwnPropertyNames(c).length&&(e.properties=c);}if(e.length<=0)return this._emitError(new Error(\"Malformed subscribe, no payload specified\"));for(;this._pos=e.length)return this._emitError(new Error(\"Malformed Subscribe Payload\"));if(i=this._parseByte(),this.settings.protocolVersion===5){if(i&192)return this._emitError(new Error(\"Invalid subscribe topic flag bits, bits 7-6 must be 0\"))}else if(i&252)return this._emitError(new Error(\"Invalid subscribe topic flag bits, bits 7-2 must be 0\"));if(n=i&V.SUBSCRIBE_OPTIONS_QOS_MASK,n>2)return this._emitError(new Error(\"Invalid subscribe QoS, must be <= 2\"));if(a=(i>>V.SUBSCRIBE_OPTIONS_NL_SHIFT&V.SUBSCRIBE_OPTIONS_NL_MASK)!==0,s=(i>>V.SUBSCRIBE_OPTIONS_RAP_SHIFT&V.SUBSCRIBE_OPTIONS_RAP_MASK)!==0,o=i>>V.SUBSCRIBE_OPTIONS_RH_SHIFT&V.SUBSCRIBE_OPTIONS_RH_MASK,o>2)return this._emitError(new Error(\"Invalid retain handling, must be <= 2\"));u={topic:r,qos:n},this.settings.protocolVersion===5?(u.nl=a,u.rap=s,u.rh=o):this.settings.bridgeMode&&(u.rh=0,u.rap=!0,u.nl=!0),D(\"_parseSubscribe: push subscription `%s` to subscription\",u),e.subscriptions.push(u);}}}_parseSuback(){D(\"_parseSuback\");let e=this.packet;if(this.packet.granted=[],!!this._parseMessageId()){if(this.settings.protocolVersion===5){let r=this._parseProperties();Object.getOwnPropertyNames(r).length&&(e.properties=r);}if(e.length<=0)return this._emitError(new Error(\"Malformed suback, no payload specified\"));for(;this._pos2&&r!==128)return this._emitError(new Error(\"Invalid suback QoS, must be 0, 1, 2 or 128\"));this.packet.granted.push(r);}}}_parseUnsubscribe(){D(\"_parseUnsubscribe\");let e=this.packet;if(e.unsubscriptions=[],!!this._parseMessageId()){if(this.settings.protocolVersion===5){let r=this._parseProperties();Object.getOwnPropertyNames(r).length&&(e.properties=r);}if(e.length<=0)return this._emitError(new Error(\"Malformed unsubscribe, no payload specified\"));for(;this._pos2){switch(e.reasonCode=this._parseByte(),this.packet.cmd){case\"puback\":case\"pubrec\":if(!V.MQTT5_PUBACK_PUBREC_CODES[e.reasonCode])return this._emitError(new Error(\"Invalid \"+this.packet.cmd+\" reason code\"));break;case\"pubrel\":case\"pubcomp\":if(!V.MQTT5_PUBREL_PUBCOMP_CODES[e.reasonCode])return this._emitError(new Error(\"Invalid \"+this.packet.cmd+\" reason code\"));break}D(\"_parseConfirmation: packet.reasonCode `%d`\",e.reasonCode);}else e.reasonCode=0;if(e.length>3){let r=this._parseProperties();Object.getOwnPropertyNames(r).length&&(e.properties=r);}}return !0}_parseDisconnect(){let e=this.packet;if(D(\"_parseDisconnect\"),this.settings.protocolVersion===5){this._list.length>0?(e.reasonCode=this._parseByte(),V.MQTT5_DISCONNECT_CODES[e.reasonCode]||this._emitError(new Error(\"Invalid disconnect reason code\"))):e.reasonCode=0;let r=this._parseProperties();Object.getOwnPropertyNames(r).length&&(e.properties=r);}return D(\"_parseDisconnect result: true\"),!0}_parseAuth(){D(\"_parseAuth\");let e=this.packet;if(this.settings.protocolVersion!==5)return this._emitError(new Error(\"Not supported auth packet for this version MQTT\"));if(e.reasonCode=this._parseByte(),!V.MQTT5_AUTH_CODES[e.reasonCode])return this._emitError(new Error(\"Invalid auth reason code\"));let r=this._parseProperties();return Object.getOwnPropertyNames(r).length&&(e.properties=r),D(\"_parseAuth: result: true\"),!0}_parseMessageId(){let e=this.packet;return e.messageId=this._parseNum(),e.messageId===null?(this._emitError(new Error(\"Cannot parse messageId\")),!1):(D(\"_parseMessageId: packet.messageId %d\",e.messageId),!0)}_parseString(e){let r=this._parseNum(),i=r+this._pos;if(r===-1||i>this._list.length||i>this.packet.length)return null;let n=this._list.toString(\"utf8\",this._pos,i);return this._pos+=r,D(\"_parseString: result: %s\",n),n}_parseStringPair(){return D(\"_parseStringPair\"),{name:this._parseString(),value:this._parseString()}}_parseBuffer(){let e=this._parseNum(),r=e+this._pos;if(e===-1||r>this._list.length||r>this.packet.length)return null;let i=this._list.slice(this._pos,r);return this._pos+=e,D(\"_parseBuffer: result: %o\",i),i}_parseNum(){if(this._list.length-this._pos<2)return -1;let e=this._list.readUInt16BE(this._pos);return this._pos+=2,D(\"_parseNum: result: %s\",e),e}_parse4ByteNum(){if(this._list.length-this._pos<4)return -1;let e=this._list.readUInt32BE(this._pos);return this._pos+=4,D(\"_parse4ByteNum: result: %s\",e),e}_parseVarByteNum(e){D(\"_parseVarByteNum\");let r=4,i=0,n=1,o=0,s=!1,a,u=this._pos?this._pos:0;for(;i=i&&this._emitError(new Error(\"Invalid variable byte integer\")),u&&(this._pos+=i),s?e?s={bytes:i,value:o}:s=o:s=!1,D(\"_parseVarByteNum: result: %o\",s),s}_parseByte(){let e;return this._pos{v();m();_();var{Buffer:vi}=(ye(),X(_e)),Om=65536,vd={},km=vi.isBuffer(vi.from([1,2]).subarray(0,1));function Ed(t){let e=vi.allocUnsafe(2);return e.writeUInt8(t>>8,0),e.writeUInt8(t&255,0+1),e}function xm(){for(let t=0;t0&&(r=r|128),n.writeUInt8(r,i++);while(t>0&&i<4);return t>0&&(i=0),km?n.subarray(0,i):n.slice(0,i)}function Lm(t){let e=vi.allocUnsafe(4);return e.writeUInt32BE(t,0),e}Sd.exports={cache:vd,generateCache:xm,generateNumber:Ed,genBufVariableByteInt:Mm,generate4ByteBuffer:Lm};});var Id=M((eO,$o)=>{v();m();_();typeof P>\"u\"||!P.version||P.version.indexOf(\"v0.\")===0||P.version.indexOf(\"v1.\")===0&&P.version.indexOf(\"v1.8.\")!==0?$o.exports={nextTick:Um}:$o.exports=P;function Um(t,e,r,i){if(typeof t!=\"function\")throw new TypeError('\"callback\" argument must be a function');var n=arguments.length,o,s;switch(n){case 0:case 1:return P.nextTick(t);case 2:return P.nextTick(function(){t.call(null,e);});case 3:return P.nextTick(function(){t.call(null,e,r);});case 4:return P.nextTick(function(){t.call(null,e,r,i);});default:for(o=new Array(n-1),s=0;s{v();m();_();var j=Fo(),{Buffer:q}=(ye(),X(_e)),Nm=q.allocUnsafe(0),qm=q.from([0]),Ei=Ad(),Dm=Id().nextTick,qe=ot()(\"mqtt-packet:writeToStream\"),Cn=Ei.cache,jm=Ei.generateNumber,Fm=Ei.generateCache,Ho=Ei.genBufVariableByteInt,Wm=Ei.generate4ByteBuffer,Ie=Vo,Bn=!0;function Od(t,e,r){switch(qe(\"generate called\"),e.cork&&(e.cork(),Dm($m,e)),Bn&&(Bn=!1,Fm()),qe(\"generate: packet.cmd: %s\",t.cmd),t.cmd){case\"connect\":return Hm(t,e);case\"connack\":return Vm(t,e,r);case\"publish\":return zm(t,e,r);case\"puback\":case\"pubrec\":case\"pubrel\":case\"pubcomp\":return Km(t,e,r);case\"subscribe\":return Gm(t,e,r);case\"suback\":return Qm(t,e,r);case\"unsubscribe\":return Ym(t,e,r);case\"unsuback\":return Jm(t,e,r);case\"pingreq\":case\"pingresp\":return Xm(t,e);case\"disconnect\":return Zm(t,e,r);case\"auth\":return e1(t,e,r);default:return e.destroy(new Error(\"Unknown command\")),!1}}Object.defineProperty(Od,\"cacheNumbers\",{get(){return Ie===Vo},set(t){t?((!Cn||Object.keys(Cn).length===0)&&(Bn=!0),Ie=Vo):(Bn=!1,Ie=t1);}});function $m(t){t.uncork();}function Hm(t,e,r){let i=t||{},n=i.protocolId||\"MQTT\",o=i.protocolVersion||4,s=i.will,a=i.clean,u=i.keepalive||0,c=i.clientId||\"\",h=i.username,d=i.password,g=i.properties;a===void 0&&(a=!0);let y=0;if(!n||typeof n!=\"string\"&&!q.isBuffer(n))return e.destroy(new Error(\"Invalid protocolId\")),!1;if(y+=n.length+2,o!==3&&o!==4&&o!==5)return e.destroy(new Error(\"Invalid protocol version\")),!1;if(y+=1,(typeof c==\"string\"||q.isBuffer(c))&&(c||o>=4)&&(c||a))y+=q.byteLength(c)+2;else {if(o<4)return e.destroy(new Error(\"clientId must be supplied before 3.1.1\")),!1;if(a*1===0)return e.destroy(new Error(\"clientId must be given if cleanSession set to 0\")),!1}if(typeof u!=\"number\"||u<0||u>65535||u%1!==0)return e.destroy(new Error(\"Invalid keepalive\")),!1;y+=2,y+=1;let w,E;if(o===5){if(w=Ft(e,g),!w)return !1;y+=w.length;}if(s){if(typeof s!=\"object\")return e.destroy(new Error(\"Invalid will\")),!1;if(!s.topic||typeof s.topic!=\"string\")return e.destroy(new Error(\"Invalid will topic\")),!1;if(y+=q.byteLength(s.topic)+2,y+=2,s.payload)if(s.payload.length>=0)typeof s.payload==\"string\"?y+=q.byteLength(s.payload):y+=s.payload.length;else return e.destroy(new Error(\"Invalid will payload\")),!1;if(E={},o===5){if(E=Ft(e,s.properties),!E)return !1;y+=E.length;}}let S=!1;if(h!=null)if(Pd(h))S=!0,y+=q.byteLength(h)+2;else return e.destroy(new Error(\"Invalid username\")),!1;if(d!=null){if(!S)return e.destroy(new Error(\"Username is required to use password\")),!1;if(Pd(d))y+=kd(d)+2;else return e.destroy(new Error(\"Invalid password\")),!1}e.write(j.CONNECT_HEADER),De(e,y),Gr(e,n),i.bridgeMode&&(o+=128),e.write(o===131?j.VERSION131:o===132?j.VERSION132:o===4?j.VERSION4:o===5?j.VERSION5:j.VERSION3);let I=0;return I|=h!=null?j.USERNAME_MASK:0,I|=d!=null?j.PASSWORD_MASK:0,I|=s&&s.retain?j.WILL_RETAIN_MASK:0,I|=s&&s.qos?s.qos<0&&Ie(e,c),g?.write(),qe(\"publish: payload: %o\",u),e.write(u)}function Km(t,e,r){let i=r?r.protocolVersion:4,n=t||{},o=n.cmd||\"puback\",s=n.messageId,a=n.dup&&o===\"pubrel\"?j.DUP_MASK:0,u=0,c=n.reasonCode,h=n.properties,d=i===5?3:2;if(o===\"pubrel\"&&(u=1),typeof s!=\"number\")return e.destroy(new Error(\"Invalid messageId\")),!1;let g=null;if(i===5&&typeof h==\"object\"){if(g=Si(e,h,r,d),!g)return !1;d+=g.length;}return e.write(j.ACKS[o][u][a][0]),d===3&&(d+=c!==0?1:-1),De(e,d),Ie(e,s),i===5&&d!==2&&e.write(q.from([c])),g!==null?g.write():d===4&&e.write(q.from([0])),!0}function Gm(t,e,r){qe(\"subscribe: packet: \");let i=r?r.protocolVersion:4,n=t||{},o=n.dup?j.DUP_MASK:0,s=n.messageId,a=n.subscriptions,u=n.properties,c=0;if(typeof s!=\"number\")return e.destroy(new Error(\"Invalid messageId\")),!1;c+=2;let h=null;if(i===5){if(h=Ft(e,u),!h)return !1;c+=h.length;}if(typeof a==\"object\"&&a.length)for(let g=0;g2)return e.destroy(new Error(\"Invalid subscriptions - invalid Retain Handling\")),!1}c+=q.byteLength(y)+2+1;}else return e.destroy(new Error(\"Invalid subscriptions\")),!1;qe(\"subscribe: writing to stream: %o\",j.SUBSCRIBE_HEADER),e.write(j.SUBSCRIBE_HEADER[1][o?1:0][0]),De(e,c),Ie(e,s),h!==null&&h.write();let d=!0;for(let g of a){let y=g.topic,w=g.qos,E=+g.nl,S=+g.rap,I=g.rh,C;yr(e,y),C=j.SUBSCRIBE_OPTIONS_QOS[w],i===5&&(C|=E?j.SUBSCRIBE_OPTIONS_NL:0,C|=S?j.SUBSCRIBE_OPTIONS_RAP:0,C|=I?j.SUBSCRIBE_OPTIONS_RH[I]:0),d=e.write(q.from([C]));}return d}function Qm(t,e,r){let i=r?r.protocolVersion:4,n=t||{},o=n.messageId,s=n.granted,a=n.properties,u=0;if(typeof o!=\"number\")return e.destroy(new Error(\"Invalid messageId\")),!1;if(u+=2,typeof s==\"object\"&&s.length)for(let h=0;hj.VARBYTEINT_MAX)return t.destroy(new Error(`Invalid variable byte integer: ${e}`)),!1;let r=Td[e];return r||(r=Ho(e),e<16384&&(Td[e]=r)),qe(\"writeVarByteInt: writing to stream: %o\",r),t.write(r)}function yr(t,e){let r=q.byteLength(e);return Ie(t,r),qe(\"writeString: %s\",e),t.write(e,\"utf8\")}function Rd(t,e,r){yr(t,e),yr(t,r);}function Vo(t,e){return qe(\"writeNumberCached: number: %d\",e),qe(\"writeNumberCached: %o\",Cn[e]),t.write(Cn[e])}function t1(t,e){let r=jm(e);return qe(\"writeNumberGenerated: %o\",r),t.write(r)}function r1(t,e){let r=Wm(e);return qe(\"write4ByteNumber: %o\",r),t.write(r)}function Gr(t,e){typeof e==\"string\"?yr(t,e):e?(Ie(t,e.length),t.write(e)):Ie(t,0);}function Ft(t,e){if(typeof e!=\"object\"||e.length!=null)return {length:1,write(){Bd(t,{},0);}};let r=0;function i(o,s){let a=j.propertiesTypes[o],u=0;switch(a){case\"byte\":{if(typeof s!=\"boolean\")return t.destroy(new Error(`Invalid ${o}: ${s}`)),!1;u+=1+1;break}case\"int8\":{if(typeof s!=\"number\"||s<0||s>255)return t.destroy(new Error(`Invalid ${o}: ${s}`)),!1;u+=1+1;break}case\"binary\":{if(s&&s===null)return t.destroy(new Error(`Invalid ${o}: ${s}`)),!1;u+=1+q.byteLength(s)+2;break}case\"int16\":{if(typeof s!=\"number\"||s<0||s>65535)return t.destroy(new Error(`Invalid ${o}: ${s}`)),!1;u+=1+2;break}case\"int32\":{if(typeof s!=\"number\"||s<0||s>4294967295)return t.destroy(new Error(`Invalid ${o}: ${s}`)),!1;u+=1+4;break}case\"var\":{if(typeof s!=\"number\"||s<0||s>268435455)return t.destroy(new Error(`Invalid ${o}: ${s}`)),!1;u+=1+q.byteLength(Ho(s));break}case\"string\":{if(typeof s!=\"string\")return t.destroy(new Error(`Invalid ${o}: ${s}`)),!1;u+=1+2+q.byteLength(s.toString());break}case\"pair\":{if(typeof s!=\"object\")return t.destroy(new Error(`Invalid ${o}: ${s}`)),!1;u+=Object.getOwnPropertyNames(s).reduce((c,h)=>{let d=s[h];return Array.isArray(d)?c+=d.reduce((g,y)=>(g+=1+2+q.byteLength(h.toString())+2+q.byteLength(y.toString()),g),0):c+=1+2+q.byteLength(h.toString())+2+q.byteLength(s[h].toString()),c},0);break}default:return t.destroy(new Error(`Invalid property ${o}: ${s}`)),!1}return u}if(e)for(let o in e){let s=0,a=0,u=e[o];if(Array.isArray(u))for(let c=0;co;){let a=n.shift();if(a&&e[a])delete e[a],s=Ft(t,e);else return !1}return s}function Cd(t,e,r){switch(j.propertiesTypes[e]){case\"byte\":{t.write(q.from([j.properties[e]])),t.write(q.from([+r]));break}case\"int8\":{t.write(q.from([j.properties[e]])),t.write(q.from([r]));break}case\"binary\":{t.write(q.from([j.properties[e]])),Gr(t,r);break}case\"int16\":{t.write(q.from([j.properties[e]])),Ie(t,r);break}case\"int32\":{t.write(q.from([j.properties[e]])),r1(t,r);break}case\"var\":{t.write(q.from([j.properties[e]])),De(t,r);break}case\"string\":{t.write(q.from([j.properties[e]])),yr(t,r);break}case\"pair\":{Object.getOwnPropertyNames(r).forEach(n=>{let o=r[n];Array.isArray(o)?o.forEach(s=>{t.write(q.from([j.properties[e]])),Rd(t,n.toString(),s.toString());}):(t.write(q.from([j.properties[e]])),Rd(t,n.toString(),o.toString()));});break}default:return t.destroy(new Error(`Invalid property ${e} value: ${r}`)),!1}}function Bd(t,e,r){De(t,r);for(let i in e)if(Object.prototype.hasOwnProperty.call(e,i)&&e[i]!==null){let n=e[i];if(Array.isArray(n))for(let o=0;o{v();m();_();var i1=zo(),{EventEmitter:n1}=(ir(),X(rr)),{Buffer:Md}=(ye(),X(_e));function s1(t,e){let r=new Ko;return i1(t,r,e),r.concat()}var Ko=class extends n1{constructor(){super(),this._array=new Array(20),this._i=0;}write(e){return this._array[this._i++]=e,!0}concat(){let e=0,r=new Array(this._array.length),i=this._array,n=0,o;for(o=0;o{v();m();_();Pn.parser=md().parser;Pn.generate=Ud();Pn.writeToStream=zo();});var Yo=M(Qo=>{v();m();_();Object.defineProperty(Qo,\"__esModule\",{value:!0});var Go=class{constructor(){this.nextId=Math.max(1,Math.floor(Math.random()*65535));}allocate(){let e=this.nextId++;return this.nextId===65536&&(this.nextId=1),e}getLastAllocated(){return this.nextId===1?65535:this.nextId-1}register(e){return !0}deallocate(e){}clear(){}};Qo.default=Go;});var Dd=M((YO,qd)=>{v();m();_();qd.exports=o1;function Qr(t){return t instanceof x?x.from(t):new t.constructor(t.buffer.slice(),t.byteOffset,t.length)}function o1(t){if(t=t||{},t.circles)return a1(t);return t.proto?i:r;function e(n,o){for(var s=Object.keys(n),a=new Array(s.length),u=0;u{v();m();_();jd.exports=Dd()();});var $d=M(Yr=>{v();m();_();Object.defineProperty(Yr,\"__esModule\",{value:!0});Yr.validateTopics=Yr.validateTopic=void 0;function Wd(t){let e=t.split(\"/\");for(let r=0;r{v();m();_();Object.defineProperty(Xo,\"__esModule\",{value:!0});var u1=Dt(),f1={objectMode:!0},c1={clean:!0},Jo=class{constructor(e){this.options=e||{},this.options=Object.assign(Object.assign({},c1),e),this._inflights=new Map;}put(e,r){return this._inflights.set(e.messageId,e),r&&r(),this}createStream(){let e=new u1.Readable(f1),r=[],i=!1,n=0;return this._inflights.forEach((o,s)=>{r.push(o);}),e._read=()=>{!i&&n{if(!i)return i=!0,setTimeout(()=>{e.emit(\"close\");},0),e},e}del(e,r){let i=this._inflights.get(e.messageId);return i?(this._inflights.delete(e.messageId),r(null,i)):r&&r(new Error(\"missing packet\")),this}get(e,r){let i=this._inflights.get(e.messageId);return i?r(null,i):r&&r(new Error(\"missing packet\")),this}close(e){this.options.clean&&(this._inflights=null),e&&e();}};Xo.default=Jo;});var Vd=M(ea=>{v();m();_();Object.defineProperty(ea,\"__esModule\",{value:!0});var Hd=[0,16,128,131,135,144,145,151,153],h1=(t,e,r)=>{t.log(\"handlePublish: packet %o\",e),r=typeof r<\"u\"?r:t.noop;let i=e.topic.toString(),n=e.payload,{qos:o}=e,{messageId:s}=e,{options:a}=t;if(t.options.protocolVersion===5){let u;if(e.properties&&(u=e.properties.topicAlias),typeof u<\"u\")if(i.length===0)if(u>0&&u<=65535){let c=t.topicAliasRecv.getTopicByAlias(u);if(c)i=c,t.log(\"handlePublish :: topic complemented by alias. topic: %s - alias: %d\",i,u);else {t.log(\"handlePublish :: unregistered topic alias. alias: %d\",u),t.emit(\"error\",new Error(\"Received unregistered Topic Alias\"));return}}else {t.log(\"handlePublish :: topic alias out of range. alias: %d\",u),t.emit(\"error\",new Error(\"Received Topic Alias is out of range\"));return}else if(t.topicAliasRecv.put(i,u))t.log(\"handlePublish :: registered topic: %s - alias: %d\",i,u);else {t.log(\"handlePublish :: topic alias out of range. alias: %d\",u),t.emit(\"error\",new Error(\"Received Topic Alias is out of range\"));return}}switch(t.log(\"handlePublish: qos %d\",o),o){case 2:{a.customHandleAcks(i,n,e,(u,c)=>{if(typeof u==\"number\"&&(c=u,u=null),u)return t.emit(\"error\",u);if(Hd.indexOf(c)===-1)return t.emit(\"error\",new Error(\"Wrong reason code for pubrec\"));c?t._sendPacket({cmd:\"pubrec\",messageId:s,reasonCode:c},r):t.incomingStore.put(e,()=>{t._sendPacket({cmd:\"pubrec\",messageId:s},r);});});break}case 1:{a.customHandleAcks(i,n,e,(u,c)=>{if(typeof u==\"number\"&&(c=u,u=null),u)return t.emit(\"error\",u);if(Hd.indexOf(c)===-1)return t.emit(\"error\",new Error(\"Wrong reason code for puback\"));c||t.emit(\"message\",i,n,e),t.handleMessage(e,h=>{if(h)return r&&r(h);t._sendPacket({cmd:\"puback\",messageId:s,reasonCode:c},r);});});break}case 0:t.emit(\"message\",i,n,e),t.handleMessage(e,r);break;default:t.log(\"handlePublish: unknown QoS. Doing nothing.\");break}};ea.default=h1;});var Jr=M(Wt=>{v();m();_();Object.defineProperty(Wt,\"__esModule\",{value:!0});Wt.nextTick=Wt.applyMixin=Wt.ErrorWithReasonCode=void 0;var ta=class t extends Error{constructor(e,r){super(e),this.code=r,Object.setPrototypeOf(this,t.prototype),Object.getPrototypeOf(this).name=\"ErrorWithReasonCode\";}};Wt.ErrorWithReasonCode=ta;function d1(t,e,r=!1){var i;let n=[e];for(;;){let o=n[0],s=Object.getPrototypeOf(o);if(s?.prototype)n.unshift(s);else break}for(let o of n)for(let s of Object.getOwnPropertyNames(o.prototype))(r||s!==\"constructor\")&&Object.defineProperty(t.prototype,s,(i=Object.getOwnPropertyDescriptor(o.prototype,s))!==null&&i!==void 0?i:Object.create(null));}Wt.applyMixin=d1;Wt.nextTick=typeof(P===null||P===void 0?void 0:P.nextTick)==\"function\"?P.nextTick:t=>{setTimeout(t,0);};});var Ai=M(br=>{v();m();_();Object.defineProperty(br,\"__esModule\",{value:!0});br.ReasonCodes=void 0;br.ReasonCodes={0:\"\",1:\"Unacceptable protocol version\",2:\"Identifier rejected\",3:\"Server unavailable\",4:\"Bad username or password\",5:\"Not authorized\",16:\"No matching subscribers\",17:\"No subscription existed\",128:\"Unspecified error\",129:\"Malformed Packet\",130:\"Protocol Error\",131:\"Implementation specific error\",132:\"Unsupported Protocol Version\",133:\"Client Identifier not valid\",134:\"Bad User Name or Password\",135:\"Not authorized\",136:\"Server unavailable\",137:\"Server busy\",138:\"Banned\",139:\"Server shutting down\",140:\"Bad authentication method\",141:\"Keep Alive timeout\",142:\"Session taken over\",143:\"Topic Filter invalid\",144:\"Topic Name invalid\",145:\"Packet identifier in use\",146:\"Packet Identifier not found\",147:\"Receive Maximum exceeded\",148:\"Topic Alias invalid\",149:\"Packet too large\",150:\"Message rate too high\",151:\"Quota exceeded\",152:\"Administrative action\",153:\"Payload format invalid\",154:\"Retain not supported\",155:\"QoS not supported\",156:\"Use another server\",157:\"Server moved\",158:\"Shared Subscriptions not supported\",159:\"Connection rate exceeded\",160:\"Maximum connect time\",161:\"Subscription Identifiers not supported\",162:\"Wildcard Subscriptions not supported\"};var p1=(t,e)=>{let{messageId:r}=e,i=e.cmd,n=null,o=t.outgoing[r]?t.outgoing[r].cb:null,s;if(!o){t.log(\"_handleAck :: Server sent an ack in error. Ignoring.\");return}switch(t.log(\"_handleAck :: packet type\",i),i){case\"pubcomp\":case\"puback\":{let a=e.reasonCode;a&&a>0&&a!==16?(s=new Error(`Publish error: ${br.ReasonCodes[a]}`),s.code=a,t._removeOutgoingAndStoreMessage(r,()=>{o(s,e);})):t._removeOutgoingAndStoreMessage(r,o);break}case\"pubrec\":{n={cmd:\"pubrel\",qos:2,messageId:r};let a=e.reasonCode;a&&a>0&&a!==16?(s=new Error(`Publish error: ${br.ReasonCodes[a]}`),s.code=a,t._removeOutgoingAndStoreMessage(r,()=>{o(s,e);})):t._sendPacket(n);break}case\"suback\":{delete t.outgoing[r],t.messageIdProvider.deallocate(r);let a=e.granted;for(let u=0;u{delete t._resubscribeTopics[h];});}delete t.messageIdToTopic[r],t._invokeStoreProcessingQueue(),o(null,e);break}case\"unsuback\":{delete t.outgoing[r],t.messageIdProvider.deallocate(r),t._invokeStoreProcessingQueue(),o(null);break}default:t.emit(\"error\",new Error(\"unrecognized packet type\"));}t.disconnecting&&Object.keys(t.outgoing).length===0&&t.emit(\"outgoingEmpty\");};br.default=p1;});var Kd=M(ra=>{v();m();_();Object.defineProperty(ra,\"__esModule\",{value:!0});var zd=Jr(),g1=Ai(),y1=(t,e)=>{let{options:r}=t,i=r.protocolVersion,n=i===5?e.reasonCode:e.returnCode;if(i!==5){let o=new zd.ErrorWithReasonCode(`Protocol error: Auth packets are only supported in MQTT 5. Your version:${i}`,n);t.emit(\"error\",o);return}t.handleAuth(e,(o,s)=>{if(o){t.emit(\"error\",o);return}if(n===24)t.reconnecting=!1,t._sendPacket(s);else {let a=new zd.ErrorWithReasonCode(`Connection refused: ${g1.ReasonCodes[n]}`,n);t.emit(\"error\",a);}});};ra.default=y1;});var Xd=M(kn=>{v();m();_();Object.defineProperty(kn,\"__esModule\",{value:!0});kn.LRUCache=void 0;var Ii=typeof performance==\"object\"&&performance&&typeof performance.now==\"function\"?performance:Date,Qd=new Set,ia=typeof P==\"object\"&&P?P:{},Yd=(t,e,r,i)=>{typeof ia.emitWarning==\"function\"?ia.emitWarning(t,e,r,i):console.error(`[${r}] ${e}: ${t}`);},On=globalThis.AbortController,Gd=globalThis.AbortSignal;if(typeof On>\"u\"){Gd=class{onabort;_onabort=[];reason;aborted=!1;addEventListener(i,n){this._onabort.push(n);}},On=class{constructor(){e();}signal=new Gd;abort(i){if(!this.signal.aborted){this.signal.reason=i,this.signal.aborted=!0;for(let n of this.signal._onabort)n(i);this.signal.onabort?.(i);}}};let t=ia.env?.LRU_CACHE_IGNORE_AC_WARNING!==\"1\",e=()=>{t&&(t=!1,Yd(\"AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.\",\"NO_ABORT_CONTROLLER\",\"ENOTSUP\",e));};}var b1=t=>!Qd.has(t),$t=t=>t&&t===Math.floor(t)&&t>0&&isFinite(t),Jd=t=>$t(t)?t<=Math.pow(2,8)?Uint8Array:t<=Math.pow(2,16)?Uint16Array:t<=Math.pow(2,32)?Uint32Array:t<=Number.MAX_SAFE_INTEGER?Xr:null:null,Xr=class extends Array{constructor(e){super(e),this.fill(0);}},na=class t{heap;length;static#l=!1;static create(e){let r=Jd(e);if(!r)return [];t.#l=!0;let i=new t(e,r);return t.#l=!1,i}constructor(e,r){if(!t.#l)throw new TypeError(\"instantiate Stack using Stack.create(n)\");this.heap=new r(e),this.length=0;}push(e){this.heap[this.length++]=e;}pop(){return this.heap[--this.length]}},sa=class t{#l;#c;#p;#g;#B;ttl;ttlResolution;ttlAutopurge;updateAgeOnGet;updateAgeOnHas;allowStale;noDisposeOnSet;noUpdateTTL;maxEntrySize;sizeCalculation;noDeleteOnFetchRejection;noDeleteOnStaleGet;allowStaleOnFetchAbort;allowStaleOnFetchRejection;ignoreFetchAbort;#i;#y;#n;#r;#e;#u;#h;#a;#s;#b;#o;#E;#S;#w;#_;#I;#f;static unsafeExposeInternals(e){return {starts:e.#S,ttls:e.#w,sizes:e.#E,keyMap:e.#n,keyList:e.#r,valList:e.#e,next:e.#u,prev:e.#h,get head(){return e.#a},get tail(){return e.#s},free:e.#b,isBackgroundFetch:r=>e.#t(r),backgroundFetch:(r,i,n,o)=>e.#k(r,i,n,o),moveToTail:r=>e.#C(r),indexes:r=>e.#m(r),rindexes:r=>e.#v(r),isStale:r=>e.#d(r)}}get max(){return this.#l}get maxSize(){return this.#c}get calculatedSize(){return this.#y}get size(){return this.#i}get fetchMethod(){return this.#B}get dispose(){return this.#p}get disposeAfter(){return this.#g}constructor(e){let{max:r=0,ttl:i,ttlResolution:n=1,ttlAutopurge:o,updateAgeOnGet:s,updateAgeOnHas:a,allowStale:u,dispose:c,disposeAfter:h,noDisposeOnSet:d,noUpdateTTL:g,maxSize:y=0,maxEntrySize:w=0,sizeCalculation:E,fetchMethod:S,noDeleteOnFetchRejection:I,noDeleteOnStaleGet:C,allowStaleOnFetchRejection:R,allowStaleOnFetchAbort:U,ignoreFetchAbort:N}=e;if(r!==0&&!$t(r))throw new TypeError(\"max option must be a nonnegative integer\");let W=r?Jd(r):Array;if(!W)throw new Error(\"invalid max value: \"+r);if(this.#l=r,this.#c=y,this.maxEntrySize=w||this.#c,this.sizeCalculation=E,this.sizeCalculation){if(!this.#c&&!this.maxEntrySize)throw new TypeError(\"cannot set sizeCalculation without setting maxSize or maxEntrySize\");if(typeof this.sizeCalculation!=\"function\")throw new TypeError(\"sizeCalculation set to non-function\")}if(S!==void 0&&typeof S!=\"function\")throw new TypeError(\"fetchMethod must be a function if specified\");if(this.#B=S,this.#I=!!S,this.#n=new Map,this.#r=new Array(r).fill(void 0),this.#e=new Array(r).fill(void 0),this.#u=new W(r),this.#h=new W(r),this.#a=0,this.#s=0,this.#b=na.create(r),this.#i=0,this.#y=0,typeof c==\"function\"&&(this.#p=c),typeof h==\"function\"?(this.#g=h,this.#o=[]):(this.#g=void 0,this.#o=void 0),this.#_=!!this.#p,this.#f=!!this.#g,this.noDisposeOnSet=!!d,this.noUpdateTTL=!!g,this.noDeleteOnFetchRejection=!!I,this.allowStaleOnFetchRejection=!!R,this.allowStaleOnFetchAbort=!!U,this.ignoreFetchAbort=!!N,this.maxEntrySize!==0){if(this.#c!==0&&!$t(this.#c))throw new TypeError(\"maxSize must be a positive integer if specified\");if(!$t(this.maxEntrySize))throw new TypeError(\"maxEntrySize must be a positive integer if specified\");this.#q();}if(this.allowStale=!!u,this.noDeleteOnStaleGet=!!C,this.updateAgeOnGet=!!s,this.updateAgeOnHas=!!a,this.ttlResolution=$t(n)||n===0?n:1,this.ttlAutopurge=!!o,this.ttl=i||0,this.ttl){if(!$t(this.ttl))throw new TypeError(\"ttl must be a positive integer if specified\");this.#x();}if(this.#l===0&&this.ttl===0&&this.#c===0)throw new TypeError(\"At least one of max, maxSize, or ttl is required\");if(!this.ttlAutopurge&&!this.#l&&!this.#c){let K=\"LRU_CACHE_UNBOUNDED\";b1(K)&&(Qd.add(K),Yd(\"TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.\",\"UnboundedCacheWarning\",K,t));}}getRemainingTTL(e){return this.#n.has(e)?1/0:0}#x(){let e=new Xr(this.#l),r=new Xr(this.#l);this.#w=e,this.#S=r,this.#M=(o,s,a=Ii.now())=>{if(r[o]=s!==0?a:0,e[o]=s,s!==0&&this.ttlAutopurge){let u=setTimeout(()=>{this.#d(o)&&this.delete(this.#r[o]);},s+1);u.unref&&u.unref();}},this.#T=o=>{r[o]=e[o]!==0?Ii.now():0;},this.#A=(o,s)=>{if(e[s]){let a=e[s],u=r[s];o.ttl=a,o.start=u,o.now=i||n();let c=o.now-u;o.remainingTTL=a-c;}};let i=0,n=()=>{let o=Ii.now();if(this.ttlResolution>0){i=o;let s=setTimeout(()=>i=0,this.ttlResolution);s.unref&&s.unref();}return o};this.getRemainingTTL=o=>{let s=this.#n.get(o);if(s===void 0)return 0;let a=e[s],u=r[s];if(a===0||u===0)return 1/0;let c=(i||n())-u;return a-c},this.#d=o=>e[o]!==0&&r[o]!==0&&(i||n())-r[o]>e[o];}#T=()=>{};#A=()=>{};#M=()=>{};#d=()=>!1;#q(){let e=new Xr(this.#l);this.#y=0,this.#E=e,this.#R=r=>{this.#y-=e[r],e[r]=0;},this.#L=(r,i,n,o)=>{if(this.#t(i))return 0;if(!$t(n))if(o){if(typeof o!=\"function\")throw new TypeError(\"sizeCalculation must be a function\");if(n=o(i,r),!$t(n))throw new TypeError(\"sizeCalculation return invalid (expect positive integer)\")}else throw new TypeError(\"invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.\");return n},this.#P=(r,i,n)=>{if(e[r]=i,this.#c){let o=this.#c-e[r];for(;this.#y>o;)this.#O(!0);}this.#y+=e[r],n&&(n.entrySize=i,n.totalCalculatedSize=this.#y);};}#R=e=>{};#P=(e,r,i)=>{};#L=(e,r,i,n)=>{if(i||n)throw new TypeError(\"cannot set size without setting maxSize or maxEntrySize on cache\");return 0};*#m({allowStale:e=this.allowStale}={}){if(this.#i)for(let r=this.#s;!(!this.#U(r)||((e||!this.#d(r))&&(yield r),r===this.#a));)r=this.#h[r];}*#v({allowStale:e=this.allowStale}={}){if(this.#i)for(let r=this.#a;!(!this.#U(r)||((e||!this.#d(r))&&(yield r),r===this.#s));)r=this.#u[r];}#U(e){return e!==void 0&&this.#n.get(this.#r[e])===e}*entries(){for(let e of this.#m())this.#e[e]!==void 0&&this.#r[e]!==void 0&&!this.#t(this.#e[e])&&(yield [this.#r[e],this.#e[e]]);}*rentries(){for(let e of this.#v())this.#e[e]!==void 0&&this.#r[e]!==void 0&&!this.#t(this.#e[e])&&(yield [this.#r[e],this.#e[e]]);}*keys(){for(let e of this.#m()){let r=this.#r[e];r!==void 0&&!this.#t(this.#e[e])&&(yield r);}}*rkeys(){for(let e of this.#v()){let r=this.#r[e];r!==void 0&&!this.#t(this.#e[e])&&(yield r);}}*values(){for(let e of this.#m())this.#e[e]!==void 0&&!this.#t(this.#e[e])&&(yield this.#e[e]);}*rvalues(){for(let e of this.#v())this.#e[e]!==void 0&&!this.#t(this.#e[e])&&(yield this.#e[e]);}[Symbol.iterator](){return this.entries()}find(e,r={}){for(let i of this.#m()){let n=this.#e[i],o=this.#t(n)?n.__staleWhileFetching:n;if(o!==void 0&&e(o,this.#r[i],this))return this.get(this.#r[i],r)}}forEach(e,r=this){for(let i of this.#m()){let n=this.#e[i],o=this.#t(n)?n.__staleWhileFetching:n;o!==void 0&&e.call(r,o,this.#r[i],this);}}rforEach(e,r=this){for(let i of this.#v()){let n=this.#e[i],o=this.#t(n)?n.__staleWhileFetching:n;o!==void 0&&e.call(r,o,this.#r[i],this);}}purgeStale(){let e=!1;for(let r of this.#v({allowStale:!0}))this.#d(r)&&(this.delete(this.#r[r]),e=!0);return e}dump(){let e=[];for(let r of this.#m({allowStale:!0})){let i=this.#r[r],n=this.#e[r],o=this.#t(n)?n.__staleWhileFetching:n;if(o===void 0||i===void 0)continue;let s={value:o};if(this.#w&&this.#S){s.ttl=this.#w[r];let a=Ii.now()-this.#S[r];s.start=Math.floor(Date.now()-a);}this.#E&&(s.size=this.#E[r]),e.unshift([i,s]);}return e}load(e){this.clear();for(let[r,i]of e){if(i.start){let n=Date.now()-i.start;i.start=Ii.now()-n;}this.set(r,i.value,i);}}set(e,r,i={}){if(r===void 0)return this.delete(e),this;let{ttl:n=this.ttl,start:o,noDisposeOnSet:s=this.noDisposeOnSet,sizeCalculation:a=this.sizeCalculation,status:u}=i,{noUpdateTTL:c=this.noUpdateTTL}=i,h=this.#L(e,r,i.size||0,a);if(this.maxEntrySize&&h>this.maxEntrySize)return u&&(u.set=\"miss\",u.maxEntrySizeExceeded=!0),this.delete(e),this;let d=this.#i===0?void 0:this.#n.get(e);if(d===void 0)d=this.#i===0?this.#s:this.#b.length!==0?this.#b.pop():this.#i===this.#l?this.#O(!1):this.#i,this.#r[d]=e,this.#e[d]=r,this.#n.set(e,d),this.#u[this.#s]=d,this.#h[d]=this.#s,this.#s=d,this.#i++,this.#P(d,h,u),u&&(u.set=\"add\"),c=!1;else {this.#C(d);let g=this.#e[d];if(r!==g){if(this.#I&&this.#t(g)){g.__abortController.abort(new Error(\"replaced\"));let{__staleWhileFetching:y}=g;y!==void 0&&!s&&(this.#_&&this.#p?.(y,e,\"set\"),this.#f&&this.#o?.push([y,e,\"set\"]));}else s||(this.#_&&this.#p?.(g,e,\"set\"),this.#f&&this.#o?.push([g,e,\"set\"]));if(this.#R(d),this.#P(d,h,u),this.#e[d]=r,u){u.set=\"replace\";let y=g&&this.#t(g)?g.__staleWhileFetching:g;y!==void 0&&(u.oldValue=y);}}else u&&(u.set=\"update\");}if(n!==0&&!this.#w&&this.#x(),this.#w&&(c||this.#M(d,n,o),u&&this.#A(u,d)),!s&&this.#f&&this.#o){let g=this.#o,y;for(;y=g?.shift();)this.#g?.(...y);}return this}pop(){try{for(;this.#i;){let e=this.#e[this.#a];if(this.#O(!0),this.#t(e)){if(e.__staleWhileFetching)return e.__staleWhileFetching}else if(e!==void 0)return e}}finally{if(this.#f&&this.#o){let e=this.#o,r;for(;r=e?.shift();)this.#g?.(...r);}}}#O(e){let r=this.#a,i=this.#r[r],n=this.#e[r];return this.#I&&this.#t(n)?n.__abortController.abort(new Error(\"evicted\")):(this.#_||this.#f)&&(this.#_&&this.#p?.(n,i,\"evict\"),this.#f&&this.#o?.push([n,i,\"evict\"])),this.#R(r),e&&(this.#r[r]=void 0,this.#e[r]=void 0,this.#b.push(r)),this.#i===1?(this.#a=this.#s=0,this.#b.length=0):this.#a=this.#u[r],this.#n.delete(i),this.#i--,r}has(e,r={}){let{updateAgeOnHas:i=this.updateAgeOnHas,status:n}=r,o=this.#n.get(e);if(o!==void 0){let s=this.#e[o];if(this.#t(s)&&s.__staleWhileFetching===void 0)return !1;if(this.#d(o))n&&(n.has=\"stale\",this.#A(n,o));else return i&&this.#T(o),n&&(n.has=\"hit\",this.#A(n,o)),!0}else n&&(n.has=\"miss\");return !1}peek(e,r={}){let{allowStale:i=this.allowStale}=r,n=this.#n.get(e);if(n!==void 0&&(i||!this.#d(n))){let o=this.#e[n];return this.#t(o)?o.__staleWhileFetching:o}}#k(e,r,i,n){let o=r===void 0?void 0:this.#e[r];if(this.#t(o))return o;let s=new On,{signal:a}=i;a?.addEventListener(\"abort\",()=>s.abort(a.reason),{signal:s.signal});let u={signal:s.signal,options:i,context:n},c=(E,S=!1)=>{let{aborted:I}=s.signal,C=i.ignoreFetchAbort&&E!==void 0;if(i.status&&(I&&!S?(i.status.fetchAborted=!0,i.status.fetchError=s.signal.reason,C&&(i.status.fetchAbortIgnored=!0)):i.status.fetchResolved=!0),I&&!C&&!S)return d(s.signal.reason);let R=y;return this.#e[r]===y&&(E===void 0?R.__staleWhileFetching?this.#e[r]=R.__staleWhileFetching:this.delete(e):(i.status&&(i.status.fetchUpdated=!0),this.set(e,E,u.options))),E},h=E=>(i.status&&(i.status.fetchRejected=!0,i.status.fetchError=E),d(E)),d=E=>{let{aborted:S}=s.signal,I=S&&i.allowStaleOnFetchAbort,C=I||i.allowStaleOnFetchRejection,R=C||i.noDeleteOnFetchRejection,U=y;if(this.#e[r]===y&&(!R||U.__staleWhileFetching===void 0?this.delete(e):I||(this.#e[r]=U.__staleWhileFetching)),C)return i.status&&U.__staleWhileFetching!==void 0&&(i.status.returnedStale=!0),U.__staleWhileFetching;if(U.__returned===U)throw E},g=(E,S)=>{let I=this.#B?.(e,o,u);I&&I instanceof Promise&&I.then(C=>E(C===void 0?void 0:C),S),s.signal.addEventListener(\"abort\",()=>{(!i.ignoreFetchAbort||i.allowStaleOnFetchAbort)&&(E(void 0),i.allowStaleOnFetchAbort&&(E=C=>c(C,!0)));});};i.status&&(i.status.fetchDispatched=!0);let y=new Promise(g).then(c,h),w=Object.assign(y,{__abortController:s,__staleWhileFetching:o,__returned:void 0});return r===void 0?(this.set(e,w,{...u.options,status:void 0}),r=this.#n.get(e)):this.#e[r]=w,w}#t(e){if(!this.#I)return !1;let r=e;return !!r&&r instanceof Promise&&r.hasOwnProperty(\"__staleWhileFetching\")&&r.__abortController instanceof On}async fetch(e,r={}){let{allowStale:i=this.allowStale,updateAgeOnGet:n=this.updateAgeOnGet,noDeleteOnStaleGet:o=this.noDeleteOnStaleGet,ttl:s=this.ttl,noDisposeOnSet:a=this.noDisposeOnSet,size:u=0,sizeCalculation:c=this.sizeCalculation,noUpdateTTL:h=this.noUpdateTTL,noDeleteOnFetchRejection:d=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:g=this.allowStaleOnFetchRejection,ignoreFetchAbort:y=this.ignoreFetchAbort,allowStaleOnFetchAbort:w=this.allowStaleOnFetchAbort,context:E,forceRefresh:S=!1,status:I,signal:C}=r;if(!this.#I)return I&&(I.fetch=\"get\"),this.get(e,{allowStale:i,updateAgeOnGet:n,noDeleteOnStaleGet:o,status:I});let R={allowStale:i,updateAgeOnGet:n,noDeleteOnStaleGet:o,ttl:s,noDisposeOnSet:a,size:u,sizeCalculation:c,noUpdateTTL:h,noDeleteOnFetchRejection:d,allowStaleOnFetchRejection:g,allowStaleOnFetchAbort:w,ignoreFetchAbort:y,status:I,signal:C},U=this.#n.get(e);if(U===void 0){I&&(I.fetch=\"miss\");let N=this.#k(e,U,R,E);return N.__returned=N}else {let N=this.#e[U];if(this.#t(N)){let de=i&&N.__staleWhileFetching!==void 0;return I&&(I.fetch=\"inflight\",de&&(I.returnedStale=!0)),de?N.__staleWhileFetching:N.__returned=N}let W=this.#d(U);if(!S&&!W)return I&&(I.fetch=\"hit\"),this.#C(U),n&&this.#T(U),I&&this.#A(I,U),N;let K=this.#k(e,U,R,E),Q=K.__staleWhileFetching!==void 0&&i;return I&&(I.fetch=W?\"stale\":\"refresh\",Q&&W&&(I.returnedStale=!0)),Q?K.__staleWhileFetching:K.__returned=K}}get(e,r={}){let{allowStale:i=this.allowStale,updateAgeOnGet:n=this.updateAgeOnGet,noDeleteOnStaleGet:o=this.noDeleteOnStaleGet,status:s}=r,a=this.#n.get(e);if(a!==void 0){let u=this.#e[a],c=this.#t(u);return s&&this.#A(s,a),this.#d(a)?(s&&(s.get=\"stale\"),c?(s&&i&&u.__staleWhileFetching!==void 0&&(s.returnedStale=!0),i?u.__staleWhileFetching:void 0):(o||this.delete(e),s&&i&&(s.returnedStale=!0),i?u:void 0)):(s&&(s.get=\"hit\"),c?u.__staleWhileFetching:(this.#C(a),n&&this.#T(a),u))}else s&&(s.get=\"miss\");}#N(e,r){this.#h[r]=e,this.#u[e]=r;}#C(e){e!==this.#s&&(e===this.#a?this.#a=this.#u[e]:this.#N(this.#h[e],this.#u[e]),this.#N(this.#s,e),this.#s=e);}delete(e){let r=!1;if(this.#i!==0){let i=this.#n.get(e);if(i!==void 0)if(r=!0,this.#i===1)this.clear();else {this.#R(i);let n=this.#e[i];this.#t(n)?n.__abortController.abort(new Error(\"deleted\")):(this.#_||this.#f)&&(this.#_&&this.#p?.(n,e,\"delete\"),this.#f&&this.#o?.push([n,e,\"delete\"])),this.#n.delete(e),this.#r[i]=void 0,this.#e[i]=void 0,i===this.#s?this.#s=this.#h[i]:i===this.#a?this.#a=this.#u[i]:(this.#u[this.#h[i]]=this.#u[i],this.#h[this.#u[i]]=this.#h[i]),this.#i--,this.#b.push(i);}}if(this.#f&&this.#o?.length){let i=this.#o,n;for(;n=i?.shift();)this.#g?.(...n);}return r}clear(){for(let e of this.#v({allowStale:!0})){let r=this.#e[e];if(this.#t(r))r.__abortController.abort(new Error(\"deleted\"));else {let i=this.#r[e];this.#_&&this.#p?.(r,i,\"delete\"),this.#f&&this.#o?.push([r,i,\"delete\"]);}}if(this.#n.clear(),this.#e.fill(void 0),this.#r.fill(void 0),this.#w&&this.#S&&(this.#w.fill(0),this.#S.fill(0)),this.#E&&this.#E.fill(0),this.#a=0,this.#s=0,this.#b.length=0,this.#y=0,this.#i=0,this.#f&&this.#o){let e=this.#o,r;for(;r=e?.shift();)this.#g?.(...r);}}};kn.LRUCache=sa;});var at=M(Ht=>{v();m();_();Object.defineProperty(Ht,\"t\",{value:!0});Ht.ContainerIterator=Ht.Container=Ht.Base=void 0;var oa=class{constructor(e=0){this.iteratorType=e;}equals(e){return this.o===e.o}};Ht.ContainerIterator=oa;var xn=class{constructor(){this.i=0;}get length(){return this.i}size(){return this.i}empty(){return this.i===0}};Ht.Base=xn;var aa=class extends xn{};Ht.Container=aa;});var Zd=M(Mn=>{v();m();_();Object.defineProperty(Mn,\"t\",{value:!0});Mn.default=void 0;var w1=at(),la=class extends w1.Base{constructor(e=[]){super(),this.S=[];let r=this;e.forEach(function(i){r.push(i);});}clear(){this.i=0,this.S=[];}push(e){return this.S.push(e),this.i+=1,this.i}pop(){if(this.i!==0)return this.i-=1,this.S.pop()}top(){return this.S[this.i-1]}},_1=la;Mn.default=_1;});var ep=M(Ln=>{v();m();_();Object.defineProperty(Ln,\"t\",{value:!0});Ln.default=void 0;var m1=at(),ua=class extends m1.Base{constructor(e=[]){super(),this.j=0,this.q=[];let r=this;e.forEach(function(i){r.push(i);});}clear(){this.q=[],this.i=this.j=0;}push(e){let r=this.q.length;if(this.j/r>.5&&this.j+this.i>=r&&r>4096){let i=this.i;for(let n=0;n{v();m();_();Object.defineProperty(Un,\"t\",{value:!0});Un.default=void 0;var E1=at(),fa=class extends E1.Base{constructor(e=[],r=function(n,o){return n>o?-1:n>1;for(let o=this.i-1>>1;o>=0;--o)this.k(o,n);}m(e){let r=this.C[e];for(;e>0;){let i=e-1>>1,n=this.C[i];if(this.v(n,r)<=0)break;this.C[e]=n,e=i;}this.C[e]=r;}k(e,r){let i=this.C[e];for(;e0&&(n=o,s=this.C[o]),this.v(s,i)>=0)break;this.C[e]=s,e=n;}this.C[e]=i;}clear(){this.i=0,this.C.length=0;}push(e){this.C.push(e),this.m(this.i),this.i+=1;}pop(){if(this.i===0)return;let e=this.C[0],r=this.C.pop();return this.i-=1,this.i&&(this.C[0]=r,this.k(0,this.i>>1)),e}top(){return this.C[0]}find(e){return this.C.indexOf(e)>=0}remove(e){let r=this.C.indexOf(e);return r<0?!1:(r===0?this.pop():r===this.i-1?(this.C.pop(),this.i-=1):(this.C.splice(r,1,this.C.pop()),this.i-=1,this.m(r),this.k(r,this.i>>1)),!0)}updateItem(e){let r=this.C.indexOf(e);return r<0?!1:(this.m(r),this.k(r,this.i>>1),!0)}toArray(){return [...this.C]}},S1=fa;Un.default=S1;});var qn=M(Nn=>{v();m();_();Object.defineProperty(Nn,\"t\",{value:!0});Nn.default=void 0;var A1=at(),ca=class extends A1.Container{},I1=ca;Nn.default=I1;});var lt=M(ha=>{v();m();_();Object.defineProperty(ha,\"t\",{value:!0});ha.throwIteratorAccessError=T1;function T1(){throw new RangeError(\"Iterator access denied!\")}});var pa=M(jn=>{v();m();_();Object.defineProperty(jn,\"t\",{value:!0});jn.RandomIterator=void 0;var R1=at(),Dn=lt(),da=class extends R1.ContainerIterator{constructor(e,r){super(r),this.o=e,this.iteratorType===0?(this.pre=function(){return this.o===0&&(0, Dn.throwIteratorAccessError)(),this.o-=1,this},this.next=function(){return this.o===this.container.size()&&(0, Dn.throwIteratorAccessError)(),this.o+=1,this}):(this.pre=function(){return this.o===this.container.size()-1&&(0, Dn.throwIteratorAccessError)(),this.o+=1,this},this.next=function(){return this.o===-1&&(0, Dn.throwIteratorAccessError)(),this.o-=1,this});}get pointer(){return this.container.getElementByPos(this.o)}set pointer(e){this.container.setElementByPos(this.o,e);}};jn.RandomIterator=da;});var rp=M(Fn=>{v();m();_();Object.defineProperty(Fn,\"t\",{value:!0});Fn.default=void 0;var C1=P1(qn()),B1=pa();function P1(t){return t&&t.t?t:{default:t}}var wr=class t extends B1.RandomIterator{constructor(e,r,i){super(e,i),this.container=r;}copy(){return new t(this.o,this.container,this.iteratorType)}},ga=class extends C1.default{constructor(e=[],r=!0){if(super(),Array.isArray(e))this.J=r?[...e]:e,this.i=e.length;else {this.J=[];let i=this;e.forEach(function(n){i.pushBack(n);});}}clear(){this.i=0,this.J.length=0;}begin(){return new wr(0,this)}end(){return new wr(this.i,this)}rBegin(){return new wr(this.i-1,this,1)}rEnd(){return new wr(-1,this,1)}front(){return this.J[0]}back(){return this.J[this.i-1]}getElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;return this.J[e]}eraseElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;return this.J.splice(e,1),this.i-=1,this.i}eraseElementByValue(e){let r=0;for(let i=0;ithis.i-1)throw new RangeError;this.J[e]=r;}insert(e,r,i=1){if(e<0||e>this.i)throw new RangeError;return this.J.splice(e,0,...new Array(i).fill(r)),this.i+=i,this.i}find(e){for(let r=0;r{v();m();_();Object.defineProperty(Wn,\"t\",{value:!0});Wn.default=void 0;var k1=M1(qn()),x1=at(),_r=lt();function M1(t){return t&&t.t?t:{default:t}}var mr=class t extends x1.ContainerIterator{constructor(e,r,i,n){super(n),this.o=e,this.h=r,this.container=i,this.iteratorType===0?(this.pre=function(){return this.o.L===this.h&&(0, _r.throwIteratorAccessError)(),this.o=this.o.L,this},this.next=function(){return this.o===this.h&&(0, _r.throwIteratorAccessError)(),this.o=this.o.B,this}):(this.pre=function(){return this.o.B===this.h&&(0, _r.throwIteratorAccessError)(),this.o=this.o.B,this},this.next=function(){return this.o===this.h&&(0, _r.throwIteratorAccessError)(),this.o=this.o.L,this});}get pointer(){return this.o===this.h&&(0, _r.throwIteratorAccessError)(),this.o.l}set pointer(e){this.o===this.h&&(0, _r.throwIteratorAccessError)(),this.o.l=e;}copy(){return new t(this.o,this.h,this.container,this.iteratorType)}},ya=class extends k1.default{constructor(e=[]){super(),this.h={},this.p=this._=this.h.L=this.h.B=this.h;let r=this;e.forEach(function(i){r.pushBack(i);});}V(e){let{L:r,B:i}=e;r.B=i,i.L=r,e===this.p&&(this.p=i),e===this._&&(this._=r),this.i-=1;}G(e,r){let i=r.B,n={l:e,L:r,B:i};r.B=n,i.L=n,r===this.h&&(this.p=n),i===this.h&&(this._=n),this.i+=1;}clear(){this.i=0,this.p=this._=this.h.L=this.h.B=this.h;}begin(){return new mr(this.p,this.h,this)}end(){return new mr(this.h,this.h,this)}rBegin(){return new mr(this._,this.h,this,1)}rEnd(){return new mr(this.h,this.h,this,1)}front(){return this.p.l}back(){return this._.l}getElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let r=this.p;for(;e--;)r=r.B;return r.l}eraseElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let r=this.p;for(;e--;)r=r.B;return this.V(r),this.i}eraseElementByValue(e){let r=this.p;for(;r!==this.h;)r.l===e&&this.V(r),r=r.B;return this.i}eraseElementByIterator(e){let r=e.o;return r===this.h&&(0, _r.throwIteratorAccessError)(),e=e.next(),this.V(r),e}pushBack(e){return this.G(e,this._),this.i}popBack(){if(this.i===0)return;let e=this._.l;return this.V(this._),e}pushFront(e){return this.G(e,this.h),this.i}popFront(){if(this.i===0)return;let e=this.p.l;return this.V(this.p),e}setElementByPos(e,r){if(e<0||e>this.i-1)throw new RangeError;let i=this.p;for(;e--;)i=i.B;i.l=r;}insert(e,r,i=1){if(e<0||e>this.i)throw new RangeError;if(i<=0)return this.i;if(e===0)for(;i--;)this.pushFront(r);else if(e===this.i)for(;i--;)this.pushBack(r);else {let n=this.p;for(let s=1;s{v();m();_();Object.defineProperty($n,\"t\",{value:!0});$n.default=void 0;var U1=q1(qn()),N1=pa();function q1(t){return t&&t.t?t:{default:t}}var vr=class t extends N1.RandomIterator{constructor(e,r,i){super(e,i),this.container=r;}copy(){return new t(this.o,this.container,this.iteratorType)}},ba=class extends U1.default{constructor(e=[],r=4096){super(),this.j=0,this.D=0,this.R=0,this.N=0,this.P=0,this.A=[];let i=(()=>{if(typeof e.length==\"number\")return e.length;if(typeof e.size==\"number\")return e.size;if(typeof e.size==\"function\")return e.size();throw new TypeError(\"Cannot get the length or size of the container\")})();this.F=r,this.P=Math.max(Math.ceil(i/this.F),1);for(let s=0;s>1)-(n>>1),this.D=this.N=this.F-i%this.F>>1;let o=this;e.forEach(function(s){o.pushBack(s);});}T(){let e=[],r=Math.max(this.P>>1,1);for(let i=0;i>1;}begin(){return new vr(0,this)}end(){return new vr(this.i,this)}rBegin(){return new vr(this.i-1,this,1)}rEnd(){return new vr(-1,this,1)}front(){if(this.i!==0)return this.A[this.j][this.D]}back(){if(this.i!==0)return this.A[this.R][this.N]}pushBack(e){return this.i&&(this.N0?this.N-=1:this.R>0?(this.R-=1,this.N=this.F-1):(this.R=this.P-1,this.N=this.F-1)),this.i-=1,e}pushFront(e){return this.i&&(this.D>0?this.D-=1:this.j>0?(this.j-=1,this.D=this.F-1):(this.j=this.P-1,this.D=this.F-1),this.j===this.R&&this.D===this.N&&this.T()),this.i+=1,this.A[this.j][this.D]=e,this.i}popFront(){if(this.i===0)return;let e=this.A[this.j][this.D];return this.i!==1&&(this.Dthis.i-1)throw new RangeError;let{curNodeBucketIndex:r,curNodePointerIndex:i}=this.O(e);return this.A[r][i]}setElementByPos(e,r){if(e<0||e>this.i-1)throw new RangeError;let{curNodeBucketIndex:i,curNodePointerIndex:n}=this.O(e);this.A[i][n]=r;}insert(e,r,i=1){if(e<0||e>this.i)throw new RangeError;if(e===0)for(;i--;)this.pushFront(r);else if(e===this.i)for(;i--;)this.pushBack(r);else {let n=[];for(let o=e;othis.i-1)throw new RangeError;if(e===0)this.popFront();else if(e===this.i-1)this.popBack();else {let r=[];for(let n=e+1;ne;)this.popBack();return this.i}sort(e){let r=[];for(let i=0;i{v();m();_();Object.defineProperty(Zr,\"t\",{value:!0});Zr.TreeNodeEnableIndex=Zr.TreeNode=void 0;var Hn=class{constructor(e,r){this.ee=1,this.u=void 0,this.l=void 0,this.U=void 0,this.W=void 0,this.tt=void 0,this.u=e,this.l=r;}L(){let e=this;if(e.ee===1&&e.tt.tt===e)e=e.W;else if(e.U)for(e=e.U;e.W;)e=e.W;else {let r=e.tt;for(;r.U===e;)e=r,r=e.tt;e=r;}return e}B(){let e=this;if(e.W){for(e=e.W;e.U;)e=e.U;return e}else {let r=e.tt;for(;r.W===e;)e=r,r=e.tt;return e.W!==r?r:e}}te(){let e=this.tt,r=this.W,i=r.U;return e.tt===this?e.tt=r:e.U===this?e.U=r:e.W=r,r.tt=e,r.U=this,this.tt=r,this.W=i,i&&(i.tt=this),r}se(){let e=this.tt,r=this.U,i=r.W;return e.tt===this?e.tt=r:e.U===this?e.U=r:e.W=r,r.tt=e,r.W=this,this.tt=r,this.U=i,i&&(i.tt=this),r}};Zr.TreeNode=Hn;var wa=class extends Hn{constructor(){super(...arguments),this.rt=1;}te(){let e=super.te();return this.ie(),e.ie(),e}se(){let e=super.se();return this.ie(),e.ie(),e}ie(){this.rt=1,this.U&&(this.rt+=this.U.rt),this.W&&(this.rt+=this.W.rt);}};Zr.TreeNodeEnableIndex=wa;});var ma=M(Vn=>{v();m();_();Object.defineProperty(Vn,\"t\",{value:!0});Vn.default=void 0;var op=sp(),j1=at(),ap=lt(),_a=class extends j1.Container{constructor(e=function(i,n){return in?1:0},r=!1){super(),this.Y=void 0,this.v=e,r?(this.re=op.TreeNodeEnableIndex,this.M=function(i,n,o){let s=this.ne(i,n,o);if(s){let a=s.tt;for(;a!==this.h;)a.rt+=1,a=a.tt;let u=this.he(s);if(u){let{parentNode:c,grandParent:h,curNode:d}=u;c.ie(),h.ie(),d.ie();}}return this.i},this.V=function(i){let n=this.fe(i);for(;n!==this.h;)n.rt-=1,n=n.tt;}):(this.re=op.TreeNode,this.M=function(i,n,o){let s=this.ne(i,n,o);return s&&this.he(s),this.i},this.V=this.fe),this.h=new this.re;}X(e,r){let i=this.h;for(;e;){let n=this.v(e.u,r);if(n<0)e=e.W;else if(n>0)i=e,e=e.U;else return e}return i}Z(e,r){let i=this.h;for(;e;)this.v(e.u,r)<=0?e=e.W:(i=e,e=e.U);return i}$(e,r){let i=this.h;for(;e;){let n=this.v(e.u,r);if(n<0)i=e,e=e.W;else if(n>0)e=e.U;else return e}return i}rr(e,r){let i=this.h;for(;e;)this.v(e.u,r)<0?(i=e,e=e.W):e=e.U;return i}ue(e){for(;;){let r=e.tt;if(r===this.h)return;if(e.ee===1){e.ee=0;return}if(e===r.U){let i=r.W;if(i.ee===1)i.ee=0,r.ee=1,r===this.Y?this.Y=r.te():r.te();else if(i.W&&i.W.ee===1){i.ee=r.ee,r.ee=0,i.W.ee=0,r===this.Y?this.Y=r.te():r.te();return}else i.U&&i.U.ee===1?(i.ee=1,i.U.ee=0,i.se()):(i.ee=1,e=r);}else {let i=r.U;if(i.ee===1)i.ee=0,r.ee=1,r===this.Y?this.Y=r.se():r.se();else if(i.U&&i.U.ee===1){i.ee=r.ee,r.ee=0,i.U.ee=0,r===this.Y?this.Y=r.se():r.se();return}else i.W&&i.W.ee===1?(i.ee=1,i.W.ee=0,i.te()):(i.ee=1,e=r);}}}fe(e){if(this.i===1)return this.clear(),this.h;let r=e;for(;r.U||r.W;){if(r.W)for(r=r.W;r.U;)r=r.U;else r=r.U;[e.u,r.u]=[r.u,e.u],[e.l,r.l]=[r.l,e.l],e=r;}this.h.U===r?this.h.U=r.tt:this.h.W===r&&(this.h.W=r.tt),this.ue(r);let i=r.tt;return r===i.U?i.U=void 0:i.W=void 0,this.i-=1,this.Y.ee=0,i}oe(e,r){return e===void 0?!1:this.oe(e.U,r)||r(e)?!0:this.oe(e.W,r)}he(e){for(;;){let r=e.tt;if(r.ee===0)return;let i=r.tt;if(r===i.U){let n=i.W;if(n&&n.ee===1){if(n.ee=r.ee=0,i===this.Y)return;i.ee=1,e=i;continue}else if(e===r.W){if(e.ee=0,e.U&&(e.U.tt=r),e.W&&(e.W.tt=i),r.W=e.U,i.U=e.W,e.U=r,e.W=i,i===this.Y)this.Y=e,this.h.tt=e;else {let o=i.tt;o.U===i?o.U=e:o.W=e;}return e.tt=i.tt,r.tt=e,i.tt=e,i.ee=1,{parentNode:r,grandParent:i,curNode:e}}else r.ee=0,i===this.Y?this.Y=i.se():i.se(),i.ee=1;}else {let n=i.U;if(n&&n.ee===1){if(n.ee=r.ee=0,i===this.Y)return;i.ee=1,e=i;continue}else if(e===r.U){if(e.ee=0,e.U&&(e.U.tt=i),e.W&&(e.W.tt=r),i.W=e.U,r.U=e.W,e.U=i,e.W=r,i===this.Y)this.Y=e,this.h.tt=e;else {let o=i.tt;o.U===i?o.U=e:o.W=e;}return e.tt=i.tt,r.tt=e,i.tt=e,i.ee=1,{parentNode:r,grandParent:i,curNode:e}}else r.ee=0,i===this.Y?this.Y=i.te():i.te(),i.ee=1;}return}}ne(e,r,i){if(this.Y===void 0){this.i+=1,this.Y=new this.re(e,r),this.Y.ee=0,this.Y.tt=this.h,this.h.tt=this.Y,this.h.U=this.Y,this.h.W=this.Y;return}let n,o=this.h.U,s=this.v(o.u,e);if(s===0){o.l=r;return}else if(s>0)o.U=new this.re(e,r),o.U.tt=o,n=o.U,this.h.U=n;else {let a=this.h.W,u=this.v(a.u,e);if(u===0){a.l=r;return}else if(u<0)a.W=new this.re(e,r),a.W.tt=a,n=a.W,this.h.W=n;else {if(i!==void 0){let c=i.o;if(c!==this.h){let h=this.v(c.u,e);if(h===0){c.l=r;return}else if(h>0){let d=c.L(),g=this.v(d.u,e);if(g===0){d.l=r;return}else g<0&&(n=new this.re(e,r),d.W===void 0?(d.W=n,n.tt=d):(c.U=n,n.tt=c));}}}if(n===void 0)for(n=this.Y;;){let c=this.v(n.u,e);if(c>0){if(n.U===void 0){n.U=new this.re(e,r),n.U.tt=n,n=n.U;break}n=n.U;}else if(c<0){if(n.W===void 0){n.W=new this.re(e,r),n.W.tt=n,n=n.W;break}n=n.W;}else {n.l=r;return}}}}return this.i+=1,n}I(e,r){for(;e;){let i=this.v(e.u,r);if(i<0)e=e.W;else if(i>0)e=e.U;else return e}return e||this.h}clear(){this.i=0,this.Y=void 0,this.h.tt=void 0,this.h.U=this.h.W=void 0;}updateKeyByIterator(e,r){let i=e.o;if(i===this.h&&(0, ap.throwIteratorAccessError)(),this.i===1)return i.u=r,!0;if(i===this.h.U)return this.v(i.B().u,r)>0?(i.u=r,!0):!1;if(i===this.h.W)return this.v(i.L().u,r)<0?(i.u=r,!0):!1;let n=i.L().u;if(this.v(n,r)>=0)return !1;let o=i.B().u;return this.v(o,r)<=0?!1:(i.u=r,!0)}eraseElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let r=0,i=this;return this.oe(this.Y,function(n){return e===r?(i.V(n),!0):(r+=1,!1)}),this.i}eraseElementByKey(e){if(this.i===0)return !1;let r=this.I(this.Y,e);return r===this.h?!1:(this.V(r),!0)}eraseElementByIterator(e){let r=e.o;r===this.h&&(0, ap.throwIteratorAccessError)();let i=r.W===void 0;return e.iteratorType===0?i&&e.next():(!i||r.U===void 0)&&e.next(),this.V(r),e}forEach(e){let r=0;for(let i of this)e(i,r++,this);}getElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let r,i=0;for(let n of this){if(i===e){r=n;break}i+=1;}return r}getHeight(){if(this.i===0)return 0;let e=function(r){return r?Math.max(e(r.U),e(r.W))+1:0};return e(this.Y)}},F1=_a;Vn.default=F1;});var Ea=M(Kn=>{v();m();_();Object.defineProperty(Kn,\"t\",{value:!0});Kn.default=void 0;var W1=at(),zn=lt(),va=class extends W1.ContainerIterator{constructor(e,r,i){super(i),this.o=e,this.h=r,this.iteratorType===0?(this.pre=function(){return this.o===this.h.U&&(0, zn.throwIteratorAccessError)(),this.o=this.o.L(),this},this.next=function(){return this.o===this.h&&(0, zn.throwIteratorAccessError)(),this.o=this.o.B(),this}):(this.pre=function(){return this.o===this.h.W&&(0, zn.throwIteratorAccessError)(),this.o=this.o.B(),this},this.next=function(){return this.o===this.h&&(0, zn.throwIteratorAccessError)(),this.o=this.o.L(),this});}get index(){let e=this.o,r=this.h.tt;if(e===this.h)return r?r.rt-1:0;let i=0;for(e.U&&(i+=e.U.rt);e!==r;){let n=e.tt;e===n.W&&(i+=1,n.U&&(i+=n.U.rt)),e=n;}return i}},$1=va;Kn.default=$1;});var up=M(Gn=>{v();m();_();Object.defineProperty(Gn,\"t\",{value:!0});Gn.default=void 0;var H1=lp(ma()),V1=lp(Ea()),z1=lt();function lp(t){return t&&t.t?t:{default:t}}var Ke=class t extends V1.default{constructor(e,r,i,n){super(e,r,n),this.container=i;}get pointer(){return this.o===this.h&&(0, z1.throwIteratorAccessError)(),this.o.u}copy(){return new t(this.o,this.h,this.container,this.iteratorType)}},Sa=class extends H1.default{constructor(e=[],r,i){super(r,i);let n=this;e.forEach(function(o){n.insert(o);});}*K(e){e!==void 0&&(yield*this.K(e.U),yield e.u,yield*this.K(e.W));}begin(){return new Ke(this.h.U||this.h,this.h,this)}end(){return new Ke(this.h,this.h,this)}rBegin(){return new Ke(this.h.W||this.h,this.h,this,1)}rEnd(){return new Ke(this.h,this.h,this,1)}front(){return this.h.U?this.h.U.u:void 0}back(){return this.h.W?this.h.W.u:void 0}insert(e,r){return this.M(e,void 0,r)}find(e){let r=this.I(this.Y,e);return new Ke(r,this.h,this)}lowerBound(e){let r=this.X(this.Y,e);return new Ke(r,this.h,this)}upperBound(e){let r=this.Z(this.Y,e);return new Ke(r,this.h,this)}reverseLowerBound(e){let r=this.$(this.Y,e);return new Ke(r,this.h,this)}reverseUpperBound(e){let r=this.rr(this.Y,e);return new Ke(r,this.h,this)}union(e){let r=this;return e.forEach(function(i){r.insert(i);}),this.i}[Symbol.iterator](){return this.K(this.Y)}},K1=Sa;Gn.default=K1;});var cp=M(Qn=>{v();m();_();Object.defineProperty(Qn,\"t\",{value:!0});Qn.default=void 0;var G1=fp(ma()),Q1=fp(Ea()),Y1=lt();function fp(t){return t&&t.t?t:{default:t}}var Ge=class t extends Q1.default{constructor(e,r,i,n){super(e,r,n),this.container=i;}get pointer(){this.o===this.h&&(0, Y1.throwIteratorAccessError)();let e=this;return new Proxy([],{get(r,i){if(i===\"0\")return e.o.u;if(i===\"1\")return e.o.l},set(r,i,n){if(i!==\"1\")throw new TypeError(\"props must be 1\");return e.o.l=n,!0}})}copy(){return new t(this.o,this.h,this.container,this.iteratorType)}},Aa=class extends G1.default{constructor(e=[],r,i){super(r,i);let n=this;e.forEach(function(o){n.setElement(o[0],o[1]);});}*K(e){e!==void 0&&(yield*this.K(e.U),yield [e.u,e.l],yield*this.K(e.W));}begin(){return new Ge(this.h.U||this.h,this.h,this)}end(){return new Ge(this.h,this.h,this)}rBegin(){return new Ge(this.h.W||this.h,this.h,this,1)}rEnd(){return new Ge(this.h,this.h,this,1)}front(){if(this.i===0)return;let e=this.h.U;return [e.u,e.l]}back(){if(this.i===0)return;let e=this.h.W;return [e.u,e.l]}lowerBound(e){let r=this.X(this.Y,e);return new Ge(r,this.h,this)}upperBound(e){let r=this.Z(this.Y,e);return new Ge(r,this.h,this)}reverseLowerBound(e){let r=this.$(this.Y,e);return new Ge(r,this.h,this)}reverseUpperBound(e){let r=this.rr(this.Y,e);return new Ge(r,this.h,this)}setElement(e,r,i){return this.M(e,r,i)}find(e){let r=this.I(this.Y,e);return new Ge(r,this.h,this)}getElementByKey(e){return this.I(this.Y,e).l}union(e){let r=this;return e.forEach(function(i){r.setElement(i[0],i[1]);}),this.i}[Symbol.iterator](){return this.K(this.Y)}},J1=Aa;Qn.default=J1;});var Ta=M(Ia=>{v();m();_();Object.defineProperty(Ia,\"t\",{value:!0});Ia.default=X1;function X1(t){let e=typeof t;return e===\"object\"&&t!==null||e===\"function\"}});var Pa=M(ei=>{v();m();_();Object.defineProperty(ei,\"t\",{value:!0});ei.HashContainerIterator=ei.HashContainer=void 0;var hp=at(),Ra=Z1(Ta()),Ti=lt();function Z1(t){return t&&t.t?t:{default:t}}var Ca=class extends hp.ContainerIterator{constructor(e,r,i){super(i),this.o=e,this.h=r,this.iteratorType===0?(this.pre=function(){return this.o.L===this.h&&(0, Ti.throwIteratorAccessError)(),this.o=this.o.L,this},this.next=function(){return this.o===this.h&&(0, Ti.throwIteratorAccessError)(),this.o=this.o.B,this}):(this.pre=function(){return this.o.B===this.h&&(0, Ti.throwIteratorAccessError)(),this.o=this.o.B,this},this.next=function(){return this.o===this.h&&(0, Ti.throwIteratorAccessError)(),this.o=this.o.L,this});}};ei.HashContainerIterator=Ca;var Ba=class extends hp.Container{constructor(){super(),this.H=[],this.g={},this.HASH_TAG=Symbol(\"@@HASH_TAG\"),Object.setPrototypeOf(this.g,null),this.h={},this.h.L=this.h.B=this.p=this._=this.h;}V(e){let{L:r,B:i}=e;r.B=i,i.L=r,e===this.p&&(this.p=i),e===this._&&(this._=r),this.i-=1;}M(e,r,i){i===void 0&&(i=(0, Ra.default)(e));let n;if(i){let o=e[this.HASH_TAG];if(o!==void 0)return this.H[o].l=r,this.i;Object.defineProperty(e,this.HASH_TAG,{value:this.H.length,configurable:!0}),n={u:e,l:r,L:this._,B:this.h},this.H.push(n);}else {let o=this.g[e];if(o)return o.l=r,this.i;n={u:e,l:r,L:this._,B:this.h},this.g[e]=n;}return this.i===0?(this.p=n,this.h.B=n):this._.B=n,this._=n,this.h.L=n,++this.i}I(e,r){if(r===void 0&&(r=(0, Ra.default)(e)),r){let i=e[this.HASH_TAG];return i===void 0?this.h:this.H[i]}else return this.g[e]||this.h}clear(){let e=this.HASH_TAG;this.H.forEach(function(r){delete r.u[e];}),this.H=[],this.g={},Object.setPrototypeOf(this.g,null),this.i=0,this.p=this._=this.h.L=this.h.B=this.h;}eraseElementByKey(e,r){let i;if(r===void 0&&(r=(0, Ra.default)(e)),r){let n=e[this.HASH_TAG];if(n===void 0)return !1;delete e[this.HASH_TAG],i=this.H[n],delete this.H[n];}else {if(i=this.g[e],i===void 0)return !1;delete this.g[e];}return this.V(i),!0}eraseElementByIterator(e){let r=e.o;return r===this.h&&(0, Ti.throwIteratorAccessError)(),this.V(r),e.next()}eraseElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let r=this.p;for(;e--;)r=r.B;return this.V(r),this.i}};ei.HashContainer=Ba;});var pp=M(Yn=>{v();m();_();Object.defineProperty(Yn,\"t\",{value:!0});Yn.default=void 0;var dp=Pa(),ev=lt(),Er=class t extends dp.HashContainerIterator{constructor(e,r,i,n){super(e,r,n),this.container=i;}get pointer(){return this.o===this.h&&(0, ev.throwIteratorAccessError)(),this.o.u}copy(){return new t(this.o,this.h,this.container,this.iteratorType)}},Oa=class extends dp.HashContainer{constructor(e=[]){super();let r=this;e.forEach(function(i){r.insert(i);});}begin(){return new Er(this.p,this.h,this)}end(){return new Er(this.h,this.h,this)}rBegin(){return new Er(this._,this.h,this,1)}rEnd(){return new Er(this.h,this.h,this,1)}front(){return this.p.u}back(){return this._.u}insert(e,r){return this.M(e,void 0,r)}getElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let r=this.p;for(;e--;)r=r.B;return r.u}find(e,r){let i=this.I(e,r);return new Er(i,this.h,this)}forEach(e){let r=0,i=this.p;for(;i!==this.h;)e(i.u,r++,this),i=i.B;}[Symbol.iterator](){return function*(){let e=this.p;for(;e!==this.h;)yield e.u,e=e.B;}.bind(this)()}},tv=Oa;Yn.default=tv;});var yp=M(Jn=>{v();m();_();Object.defineProperty(Jn,\"t\",{value:!0});Jn.default=void 0;var gp=Pa(),rv=nv(Ta()),iv=lt();function nv(t){return t&&t.t?t:{default:t}}var Sr=class t extends gp.HashContainerIterator{constructor(e,r,i,n){super(e,r,n),this.container=i;}get pointer(){this.o===this.h&&(0, iv.throwIteratorAccessError)();let e=this;return new Proxy([],{get(r,i){if(i===\"0\")return e.o.u;if(i===\"1\")return e.o.l},set(r,i,n){if(i!==\"1\")throw new TypeError(\"props must be 1\");return e.o.l=n,!0}})}copy(){return new t(this.o,this.h,this.container,this.iteratorType)}},ka=class extends gp.HashContainer{constructor(e=[]){super();let r=this;e.forEach(function(i){r.setElement(i[0],i[1]);});}begin(){return new Sr(this.p,this.h,this)}end(){return new Sr(this.h,this.h,this)}rBegin(){return new Sr(this._,this.h,this,1)}rEnd(){return new Sr(this.h,this.h,this,1)}front(){if(this.i!==0)return [this.p.u,this.p.l]}back(){if(this.i!==0)return [this._.u,this._.l]}setElement(e,r,i){return this.M(e,r,i)}getElementByKey(e,r){if(r===void 0&&(r=(0, rv.default)(e)),r){let n=e[this.HASH_TAG];return n!==void 0?this.H[n].l:void 0}let i=this.g[e];return i?i.l:void 0}getElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let r=this.p;for(;e--;)r=r.B;return [r.u,r.l]}find(e,r){let i=this.I(e,r);return new Sr(i,this.h,this)}forEach(e){let r=0,i=this.p;for(;i!==this.h;)e([i.u,i.l],r++,this),i=i.B;}[Symbol.iterator](){return function*(){let e=this.p;for(;e!==this.h;)yield [e.u,e.l],e=e.B;}.bind(this)()}},sv=ka;Jn.default=sv;});var bp=M(je=>{v();m();_();Object.defineProperty(je,\"t\",{value:!0});Object.defineProperty(je,\"Deque\",{enumerable:!0,get:function(){return cv.default}});Object.defineProperty(je,\"HashMap\",{enumerable:!0,get:function(){return gv.default}});Object.defineProperty(je,\"HashSet\",{enumerable:!0,get:function(){return pv.default}});Object.defineProperty(je,\"LinkList\",{enumerable:!0,get:function(){return fv.default}});Object.defineProperty(je,\"OrderedMap\",{enumerable:!0,get:function(){return dv.default}});Object.defineProperty(je,\"OrderedSet\",{enumerable:!0,get:function(){return hv.default}});Object.defineProperty(je,\"PriorityQueue\",{enumerable:!0,get:function(){return lv.default}});Object.defineProperty(je,\"Queue\",{enumerable:!0,get:function(){return av.default}});Object.defineProperty(je,\"Stack\",{enumerable:!0,get:function(){return ov.default}});Object.defineProperty(je,\"Vector\",{enumerable:!0,get:function(){return uv.default}});var ov=ut(Zd()),av=ut(ep()),lv=ut(tp()),uv=ut(rp()),fv=ut(ip()),cv=ut(np()),hv=ut(up()),dv=ut(cp()),pv=ut(pp()),gv=ut(yp());function ut(t){return t&&t.t?t:{default:t}}});var _p=M((mN,wp)=>{v();m();_();var yv=bp().OrderedSet,ft=ot()(\"number-allocator:trace\"),bv=ot()(\"number-allocator:error\");function Te(t,e){this.low=t,this.high=e;}Te.prototype.equals=function(t){return this.low===t.low&&this.high===t.high};Te.prototype.compare=function(t){return this.lowr.compare(i)),ft(\"Create\"),this.clear();}ct.prototype.firstVacant=function(){return this.ss.size()===0?null:this.ss.front().low};ct.prototype.alloc=function(){if(this.ss.size()===0)return ft(\"alloc():empty\"),null;let t=this.ss.begin(),e=t.pointer.low,r=t.pointer.high,i=e;return i+1<=r?this.ss.updateKeyByIterator(t,new Te(e+1,r)):this.ss.eraseElementByPos(0),ft(\"alloc():\"+i),i};ct.prototype.use=function(t){let e=new Te(t,t),r=this.ss.lowerBound(e);if(!r.equals(this.ss.end())){let i=r.pointer.low,n=r.pointer.high;return r.pointer.equals(e)?(this.ss.eraseElementByIterator(r),ft(\"use():\"+t),!0):i>t?!1:i===t?(this.ss.updateKeyByIterator(r,new Te(i+1,n)),ft(\"use():\"+t),!0):n===t?(this.ss.updateKeyByIterator(r,new Te(i,n-1)),ft(\"use():\"+t),!0):(this.ss.updateKeyByIterator(r,new Te(t+1,n)),this.ss.insert(new Te(i,t-1)),ft(\"use():\"+t),!0)}return ft(\"use():failed\"),!1};ct.prototype.free=function(t){if(tthis.max){bv(\"free():\"+t+\" is out of range\");return}let e=new Te(t,t),r=this.ss.upperBound(e);if(r.equals(this.ss.end())){if(r.equals(this.ss.begin())){this.ss.insert(e);return}r.pre();let i=r.pointer.high;r.pointer.high+1===t?this.ss.updateKeyByIterator(r,new Te(i,t)):this.ss.insert(e);}else if(r.equals(this.ss.begin()))if(t+1===r.pointer.low){let i=r.pointer.high;this.ss.updateKeyByIterator(r,new Te(t,i));}else this.ss.insert(e);else {let i=r.pointer.low,n=r.pointer.high;r.pre();let o=r.pointer.low;r.pointer.high+1===t?t+1===i?(this.ss.eraseElementByIterator(r),this.ss.updateKeyByIterator(r,new Te(o,n))):this.ss.updateKeyByIterator(r,new Te(o,t)):t+1===i?(this.ss.eraseElementByIterator(r.next()),this.ss.insert(new Te(t,n))):this.ss.insert(e);}ft(\"free():\"+t);};ct.prototype.clear=function(){ft(\"clear()\"),this.ss.clear(),this.ss.insert(new Te(this.min,this.max));};ct.prototype.intervalCount=function(){return this.ss.size()};ct.prototype.dump=function(){console.log(\"length:\"+this.ss.size());for(let t of this.ss)console.log(t);};wp.exports=ct;});var xa=M((PN,mp)=>{v();m();_();var wv=_p();mp.exports.NumberAllocator=wv;});var vp=M(La=>{v();m();_();Object.defineProperty(La,\"__esModule\",{value:!0});var _v=Xd(),mv=xa(),Ma=class{constructor(e){e>0&&(this.aliasToTopic=new _v.LRUCache({max:e}),this.topicToAlias={},this.numberAllocator=new mv.NumberAllocator(1,e),this.max=e,this.length=0);}put(e,r){if(r===0||r>this.max)return !1;let i=this.aliasToTopic.get(r);return i&&delete this.topicToAlias[i],this.aliasToTopic.set(r,e),this.topicToAlias[e]=r,this.numberAllocator.use(r),this.length=this.aliasToTopic.size,!0}getTopicByAlias(e){return this.aliasToTopic.get(e)}getAliasByTopic(e){let r=this.topicToAlias[e];return typeof r<\"u\"&&this.aliasToTopic.get(r),r}clear(){this.aliasToTopic.clear(),this.topicToAlias={},this.numberAllocator.clear(),this.length=0;}getLruAlias(){let e=this.numberAllocator.firstVacant();return e||[...this.aliasToTopic.keys()][this.aliasToTopic.size-1]}};La.default=Ma;});var Ep=M(Ri=>{v();m();_();var vv=Ri&&Ri.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Ri,\"__esModule\",{value:!0});var Ev=Ai(),Sv=vv(vp()),Av=Jr(),Iv=(t,e)=>{t.log(\"_handleConnack\");let{options:r}=t,n=r.protocolVersion===5?e.reasonCode:e.returnCode;if(clearTimeout(t.connackTimer),delete t.topicAliasSend,e.properties){if(e.properties.topicAliasMaximum){if(e.properties.topicAliasMaximum>65535){t.emit(\"error\",new Error(\"topicAliasMaximum from broker is out of range\"));return}e.properties.topicAliasMaximum>0&&(t.topicAliasSend=new Sv.default(e.properties.topicAliasMaximum));}e.properties.serverKeepAlive&&r.keepalive&&(r.keepalive=e.properties.serverKeepAlive,t._shiftPingInterval()),e.properties.maximumPacketSize&&(r.properties||(r.properties={}),r.properties.maximumPacketSize=e.properties.maximumPacketSize);}if(n===0)t.reconnecting=!1,t._onConnect(e);else if(n>0){let o=new Av.ErrorWithReasonCode(`Connection refused: ${Ev.ReasonCodes[n]}`,n);t.emit(\"error\",o);}};Ri.default=Iv;});var Sp=M(Ua=>{v();m();_();Object.defineProperty(Ua,\"__esModule\",{value:!0});var Tv=(t,e,r)=>{t.log(\"handling pubrel packet\");let i=typeof r<\"u\"?r:t.noop,{messageId:n}=e,o={cmd:\"pubcomp\",messageId:n};t.incomingStore.get(e,(s,a)=>{s?t._sendPacket(o,i):(t.emit(\"message\",a.topic,a.payload,a),t.handleMessage(a,u=>{if(u)return i(u);t.incomingStore.del(a,t.noop),t._sendPacket(o,i);}));});};Ua.default=Tv;});var Ap=M(Ci=>{v();m();_();var Bi=Ci&&Ci.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Ci,\"__esModule\",{value:!0});var Rv=Bi(Vd()),Cv=Bi(Kd()),Bv=Bi(Ep()),Pv=Bi(Ai()),Ov=Bi(Sp()),kv=(t,e,r)=>{let{options:i}=t;if(i.protocolVersion===5&&i.properties&&i.properties.maximumPacketSize&&i.properties.maximumPacketSize{v();m();_();var xv=ti&&ti.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(ti,\"__esModule\",{value:!0});ti.TypedEventEmitter=void 0;var Mv=xv((ir(),X(rr))),Lv=Jr(),Xn=class{};ti.TypedEventEmitter=Xn;(0, Lv.applyMixin)(Xn,Mv.default);});var Pi=M(Ar=>{v();m();_();Object.defineProperty(Ar,\"__esModule\",{value:!0});Ar.isReactNativeBrowser=Ar.isWebWorker=void 0;var Uv=()=>typeof window<\"u\"&&typeof window.document<\"u\",Tp=()=>{var t,e;return !!(typeof self==\"object\"&&(!((e=(t=self?.constructor)===null||t===void 0?void 0:t.name)===null||e===void 0)&&e.includes(\"WorkerGlobalScope\")))},Rp=()=>typeof B<\"u\"&&B.product===\"ReactNative\",Nv=Uv()||Tp()||Rp();Ar.isWebWorker=Tp();Ar.isReactNativeBrowser=Rp();Ar.default=Nv;});var Bp=M((Zn,Cp)=>{v();m();_();(function(t,e){typeof Zn==\"object\"&&typeof Cp<\"u\"?e(Zn):typeof define==\"function\"&&define.amd?define([\"exports\"],e):(t=typeof globalThis<\"u\"?globalThis:t||self,e(t.fastUniqueNumbers={}));})(Zn,function(t){var e=function(g){return function(y){var w=g(y);return y.add(w),w}},r=function(g){return function(y,w){return g.set(y,w),w}},i=Number.MAX_SAFE_INTEGER===void 0?9007199254740991:Number.MAX_SAFE_INTEGER,n=536870912,o=n*2,s=function(g,y){return function(w){var E=y.get(w),S=E===void 0?w.size:Ei)throw new Error(\"Congratulations, you created a collection of unique numbers which uses all available integers!\");for(;w.has(S);)S=Math.floor(Math.random()*i);return g(w,S)}},a=new WeakMap,u=r(a),c=s(u,a),h=e(c);t.addUniqueNumber=h,t.generateUniqueNumber=c;});});var Op=M((es,Pp)=>{v();m();_();(function(t,e){typeof es==\"object\"&&typeof Pp<\"u\"?e(es,Bp()):typeof define==\"function\"&&define.amd?define([\"exports\",\"fast-unique-numbers\"],e):(t=typeof globalThis<\"u\"?globalThis:t||self,e(t.workerTimersBroker={},t.fastUniqueNumbers));})(es,function(t,e){var r=function(s){return s.method!==void 0&&s.method===\"call\"},i=function(s){return s.error===null&&typeof s.id==\"number\"},n=function(s){var a=new Map([[0,function(){}]]),u=new Map([[0,function(){}]]),c=new Map,h=new Worker(s);h.addEventListener(\"message\",function(E){var S=E.data;if(r(S)){var I=S.params,C=I.timerId,R=I.timerType;if(R===\"interval\"){var U=a.get(C);if(typeof U==\"number\"){var N=c.get(U);if(N===void 0||N.timerId!==C||N.timerType!==R)throw new Error(\"The timer is in an undefined state.\")}else if(typeof U<\"u\")U();else throw new Error(\"The timer is in an undefined state.\")}else if(R===\"timeout\"){var W=u.get(C);if(typeof W==\"number\"){var K=c.get(W);if(K===void 0||K.timerId!==C||K.timerType!==R)throw new Error(\"The timer is in an undefined state.\")}else if(typeof W<\"u\")W(),u.delete(C);else throw new Error(\"The timer is in an undefined state.\")}}else if(i(S)){var z=S.id,Q=c.get(z);if(Q===void 0)throw new Error(\"The timer is in an undefined state.\");var de=Q.timerId,Gt=Q.timerType;c.delete(z),Gt===\"interval\"?a.delete(de):u.delete(de);}else {var pe=S.error.message;throw new Error(pe)}});var d=function(S){var I=e.generateUniqueNumber(c);c.set(I,{timerId:S,timerType:\"interval\"}),a.set(S,I),h.postMessage({id:I,method:\"clear\",params:{timerId:S,timerType:\"interval\"}});},g=function(S){var I=e.generateUniqueNumber(c);c.set(I,{timerId:S,timerType:\"timeout\"}),u.set(S,I),h.postMessage({id:I,method:\"clear\",params:{timerId:S,timerType:\"timeout\"}});},y=function(S){var I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,C=e.generateUniqueNumber(a);return a.set(C,function(){S(),typeof a.get(C)==\"function\"&&h.postMessage({id:null,method:\"set\",params:{delay:I,now:performance.now(),timerId:C,timerType:\"interval\"}});}),h.postMessage({id:null,method:\"set\",params:{delay:I,now:performance.now(),timerId:C,timerType:\"interval\"}}),C},w=function(S){var I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,C=e.generateUniqueNumber(u);return u.set(C,S),h.postMessage({id:null,method:\"set\",params:{delay:I,now:performance.now(),timerId:C,timerType:\"timeout\"}}),C};return {clearInterval:d,clearTimeout:g,setInterval:y,setTimeout:w}};t.load=n;});});var xp=M((ts,kp)=>{v();m();_();(function(t,e){typeof ts==\"object\"&&typeof kp<\"u\"?e(ts,Op()):typeof define==\"function\"&&define.amd?define([\"exports\",\"worker-timers-broker\"],e):(t=typeof globalThis<\"u\"?globalThis:t||self,e(t.workerTimers={},t.workerTimersBroker));})(ts,function(t,e){var r=function(h,d){var g=null;return function(){if(g!==null)return g;var y=new Blob([d],{type:\"application/javascript; charset=utf-8\"}),w=URL.createObjectURL(y);return g=h(w),setTimeout(function(){return URL.revokeObjectURL(w)}),g}},i=`(()=>{var e={472:(e,t,r)=>{var o,i;void 0===(i=\"function\"==typeof(o=function(){\"use strict\";var e=new Map,t=new Map,r=function(t){var r=e.get(t);if(void 0===r)throw new Error('There is no interval scheduled with the given id \"'.concat(t,'\".'));clearTimeout(r),e.delete(t)},o=function(e){var r=t.get(e);if(void 0===r)throw new Error('There is no timeout scheduled with the given id \"'.concat(e,'\".'));clearTimeout(r),t.delete(e)},i=function(e,t){var r,o=performance.now();return{expected:o+(r=e-Math.max(0,o-t)),remainingDelay:r}},n=function e(t,r,o,i){var n=performance.now();n>o?postMessage({id:null,method:\"call\",params:{timerId:r,timerType:i}}):t.set(r,setTimeout(e,o-n,t,r,o,i))},a=function(t,r,o){var a=i(t,o),s=a.expected,d=a.remainingDelay;e.set(r,setTimeout(n,d,e,r,s,\"interval\"))},s=function(e,r,o){var a=i(e,o),s=a.expected,d=a.remainingDelay;t.set(r,setTimeout(n,d,t,r,s,\"timeout\"))};addEventListener(\"message\",(function(e){var t=e.data;try{if(\"clear\"===t.method){var i=t.id,n=t.params,d=n.timerId,c=n.timerType;if(\"interval\"===c)r(d),postMessage({error:null,id:i});else{if(\"timeout\"!==c)throw new Error('The given type \"'.concat(c,'\" is not supported'));o(d),postMessage({error:null,id:i})}}else{if(\"set\"!==t.method)throw new Error('The given method \"'.concat(t.method,'\" is not supported'));var u=t.params,l=u.delay,p=u.now,m=u.timerId,v=u.timerType;if(\"interval\"===v)a(l,m,p);else{if(\"timeout\"!==v)throw new Error('The given type \"'.concat(v,'\" is not supported'));s(l,m,p)}}}catch(e){postMessage({error:{message:e.message},id:t.id,result:null})}}))})?o.call(t,r,t,e):o)||(e.exports=i)}},t={};function r(o){var i=t[o];if(void 0!==i)return i.exports;var n=t[o]={exports:{}};return e[o](n,n.exports,r),n.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var o in t)r.o(t,o)&&!r.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{\"use strict\";r(472)})()})();`,n=r(e.load,i),o=function(h){return n().clearInterval(h)},s=function(h){return n().clearTimeout(h)},a=function(){var h;return (h=n()).setInterval.apply(h,arguments)},u=function(){var h;return (h=n()).setTimeout.apply(h,arguments)};t.clearInterval=o,t.clearTimeout=s,t.setInterval=a,t.setTimeout=u;});});var Np=M(Rt=>{v();m();_();var qv=Rt&&Rt.__createBinding||(Object.create?function(t,e,r,i){i===void 0&&(i=r);var n=Object.getOwnPropertyDescriptor(e,r);(!n||(\"get\"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,i,n);}:function(t,e,r,i){i===void 0&&(i=r),t[i]=e[r];}),Dv=Rt&&Rt.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,\"default\",{enumerable:!0,value:e});}:function(t,e){t.default=e;}),jv=Rt&&Rt.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!==\"default\"&&Object.prototype.hasOwnProperty.call(t,r)&&qv(e,t,r);return Dv(e,t),e};Object.defineProperty(Rt,\"__esModule\",{value:!0});var Na=jv(Pi()),Mp=xp(),Lp={set:Mp.setTimeout,clear:Mp.clearTimeout},Up={set:(t,e)=>setTimeout(t,e),clear:t=>clearTimeout(t)},Fv=t=>{switch(t){case\"native\":return Up;case\"worker\":return Lp;case\"auto\":default:return Na.default&&!Na.isWebWorker&&!Na.isReactNativeBrowser?Lp:Up}};Rt.default=Fv;});var Da=M(Oi=>{v();m();_();var Wv=Oi&&Oi.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Oi,\"__esModule\",{value:!0});var $v=Wv(Np()),qa=class{constructor(e,r,i){this.keepalive=e*1e3,this.checkPing=r,this.timer=(0, $v.default)(i),this.reschedule();}clear(){this.timerId&&(this.timer.clear(this.timerId),this.timerId=null);}reschedule(){this.clear(),this.timerId=this.timer.set(()=>{this.checkPing(),this.timerId&&this.reschedule();},this.keepalive);}};Oi.default=qa;});var ns=M(Qe=>{v();m();_();var Hv=Qe&&Qe.__createBinding||(Object.create?function(t,e,r,i){i===void 0&&(i=r);var n=Object.getOwnPropertyDescriptor(e,r);(!n||(\"get\"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,i,n);}:function(t,e,r,i){i===void 0&&(i=r),t[i]=e[r];}),Vv=Qe&&Qe.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,\"default\",{enumerable:!0,value:e});}:function(t,e){t.default=e;}),Wp=Qe&&Qe.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!==\"default\"&&Object.prototype.hasOwnProperty.call(t,r)&&Hv(e,t,r);return Vv(e,t),e},Vt=Qe&&Qe.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Qe,\"__esModule\",{value:!0});var zv=Vt(Gu()),ja=Vt(Nd()),Kv=Vt(Yo()),Gv=Dt(),qp=Vt(Fd()),Dp=Wp($d()),Qv=Vt(ot()),rs=Vt(Zo()),Yv=Vt(Ap()),Wa=Jr(),Jv=Ip(),Xv=Vt(Da()),jp=Wp(Pi()),Fa=globalThis.setImmediate||((...t)=>{let e=t.shift();(0, Wa.nextTick)(()=>{e(...t);});}),Fp={keepalive:60,reschedulePings:!0,protocolId:\"MQTT\",protocolVersion:4,reconnectPeriod:1e3,connectTimeout:30*1e3,clean:!0,resubscribe:!0,writeCache:!0,timerVariant:\"auto\"},is=class t extends Jv.TypedEventEmitter{static defaultId(){return `mqttjs_${Math.random().toString(16).substr(2,8)}`}constructor(e,r){super(),this.options=r||{};for(let i in Fp)typeof this.options[i]>\"u\"?this.options[i]=Fp[i]:this.options[i]=r[i];this.log=this.options.log||(0, Qv.default)(\"mqttjs:client\"),this.noop=this._noop.bind(this),this.log(\"MqttClient :: version:\",t.VERSION),jp.isWebWorker?this.log(\"MqttClient :: environment\",\"webworker\"):this.log(\"MqttClient :: environment\",jp.default?\"browser\":\"node\"),this.log(\"MqttClient :: options.protocol\",r.protocol),this.log(\"MqttClient :: options.protocolVersion\",r.protocolVersion),this.log(\"MqttClient :: options.username\",r.username),this.log(\"MqttClient :: options.keepalive\",r.keepalive),this.log(\"MqttClient :: options.reconnectPeriod\",r.reconnectPeriod),this.log(\"MqttClient :: options.rejectUnauthorized\",r.rejectUnauthorized),this.log(\"MqttClient :: options.properties.topicAliasMaximum\",r.properties?r.properties.topicAliasMaximum:void 0),this.options.clientId=typeof r.clientId==\"string\"?r.clientId:t.defaultId(),this.log(\"MqttClient :: clientId\",this.options.clientId),this.options.customHandleAcks=r.protocolVersion===5&&r.customHandleAcks?r.customHandleAcks:(...i)=>{i[3](null,0);},this.options.writeCache||(ja.default.writeToStream.cacheNumbers=!1),this.streamBuilder=e,this.messageIdProvider=typeof this.options.messageIdProvider>\"u\"?new Kv.default:this.options.messageIdProvider,this.outgoingStore=r.outgoingStore||new rs.default,this.incomingStore=r.incomingStore||new rs.default,this.queueQoSZero=r.queueQoSZero===void 0?!0:r.queueQoSZero,this._resubscribeTopics={},this.messageIdToTopic={},this.pingTimer=null,this.connected=!1,this.disconnecting=!1,this.reconnecting=!1,this.queue=[],this.connackTimer=null,this.reconnectTimer=null,this._storeProcessing=!1,this._packetIdsDuringStoreProcessing={},this._storeProcessingQueue=[],this.outgoing={},this._firstConnection=!0,r.properties&&r.properties.topicAliasMaximum>0&&(r.properties.topicAliasMaximum>65535?this.log(\"MqttClient :: options.properties.topicAliasMaximum is out of range\"):this.topicAliasRecv=new zv.default(r.properties.topicAliasMaximum)),this.on(\"connect\",()=>{let{queue:i}=this,n=()=>{let o=i.shift();this.log(\"deliver :: entry %o\",o);let s=null;if(!o){this._resubscribe();return}s=o.packet,this.log(\"deliver :: call _sendPacket for %o\",s);let a=!0;s.messageId&&s.messageId!==0&&(this.messageIdProvider.register(s.messageId)||(a=!1)),a?this._sendPacket(s,u=>{o.cb&&o.cb(u),n();}):(this.log(\"messageId: %d has already used. The message is skipped and removed.\",s.messageId),n());};this.log(\"connect :: sending queued packets\"),n();}),this.on(\"close\",()=>{this.log(\"close :: connected set to `false`\"),this.connected=!1,this.log(\"close :: clearing connackTimer\"),clearTimeout(this.connackTimer),this.log(\"close :: clearing ping timer\"),this.pingTimer&&(this.pingTimer.clear(),this.pingTimer=null),this.topicAliasRecv&&this.topicAliasRecv.clear(),this.log(\"close :: calling _setupReconnect\"),this._setupReconnect();}),this.options.manualConnect||(this.log(\"MqttClient :: setting up stream\"),this.connect());}handleAuth(e,r){r();}handleMessage(e,r){r();}_nextId(){return this.messageIdProvider.allocate()}getLastMessageId(){return this.messageIdProvider.getLastAllocated()}connect(){var e;let r=new Gv.Writable,i=ja.default.parser(this.options),n=null,o=[];this.log(\"connect :: calling method to clear reconnect\"),this._clearReconnect(),this.log(\"connect :: using streamBuilder provided to client to create stream\"),this.stream=this.streamBuilder(this),i.on(\"packet\",h=>{this.log(\"parser :: on packet push to packets array.\"),o.push(h);});let s=()=>{this.log(\"work :: getting next packet in queue\");let h=o.shift();if(h)this.log(\"work :: packet pulled from queue\"),(0, Yv.default)(this,h,a);else {this.log(\"work :: no packets in queue\");let d=n;n=null,this.log(\"work :: done flag is %s\",!!d),d&&d();}},a=()=>{if(o.length)(0, Wa.nextTick)(s);else {let h=n;n=null,h();}};r._write=(h,d,g)=>{n=g,this.log(\"writable stream :: parsing buffer\"),i.parse(h),s();};let u=h=>{this.log(\"streamErrorHandler :: error\",h.message),h.code?(this.log(\"streamErrorHandler :: emitting error\"),this.emit(\"error\",h)):this.noop(h);};this.log(\"connect :: pipe stream to writable stream\"),this.stream.pipe(r),this.stream.on(\"error\",u),this.stream.on(\"close\",()=>{this.log(\"(%s)stream :: on close\",this.options.clientId),this._flushVolatile(),this.log(\"stream: emit close to MqttClient\"),this.emit(\"close\");}),this.log(\"connect: sending packet `connect`\");let c={cmd:\"connect\",protocolId:this.options.protocolId,protocolVersion:this.options.protocolVersion,clean:this.options.clean,clientId:this.options.clientId,keepalive:this.options.keepalive,username:this.options.username,password:this.options.password,properties:this.options.properties};if(this.options.will&&(c.will=Object.assign(Object.assign({},this.options.will),{payload:(e=this.options.will)===null||e===void 0?void 0:e.payload})),this.topicAliasRecv&&(c.properties||(c.properties={}),this.topicAliasRecv&&(c.properties.topicAliasMaximum=this.topicAliasRecv.max)),this._writePacket(c),i.on(\"error\",this.emit.bind(this,\"error\")),this.options.properties){if(!this.options.properties.authenticationMethod&&this.options.properties.authenticationData)return this.end(()=>this.emit(\"error\",new Error(\"Packet has no Authentication Method\"))),this;if(this.options.properties.authenticationMethod&&this.options.authPacket&&typeof this.options.authPacket==\"object\"){let h=Object.assign({cmd:\"auth\",reasonCode:0},this.options.authPacket);this._writePacket(h);}}return this.stream.setMaxListeners(1e3),clearTimeout(this.connackTimer),this.connackTimer=setTimeout(()=>{this.log(\"!!connectTimeout hit!! Calling _cleanUp with force `true`\"),this.emit(\"error\",new Error(\"connack timeout\")),this._cleanUp(!0);},this.options.connectTimeout),this}publish(e,r,i,n){this.log(\"publish :: message `%s` to topic `%s`\",r,e);let{options:o}=this;typeof i==\"function\"&&(n=i,i=null),i=i||{},i=Object.assign(Object.assign({},{qos:0,retain:!1,dup:!1}),i);let{qos:a,retain:u,dup:c,properties:h,cbStorePut:d}=i;if(this._checkDisconnecting(n))return this;let g=()=>{let y=0;if((a===1||a===2)&&(y=this._nextId(),y===null))return this.log(\"No messageId left\"),!1;let w={cmd:\"publish\",topic:e,payload:r,qos:a,retain:u,messageId:y,dup:c};switch(o.protocolVersion===5&&(w.properties=h),this.log(\"publish :: qos\",a),a){case 1:case 2:this.outgoing[w.messageId]={volatile:!1,cb:n||this.noop},this.log(\"MqttClient:publish: packet cmd: %s\",w.cmd),this._sendPacket(w,void 0,d);break;default:this.log(\"MqttClient:publish: packet cmd: %s\",w.cmd),this._sendPacket(w,n,d);break}return !0};return (this._storeProcessing||this._storeProcessingQueue.length>0||!g())&&this._storeProcessingQueue.push({invoke:g,cbStorePut:i.cbStorePut,callback:n}),this}publishAsync(e,r,i){return new Promise((n,o)=>{this.publish(e,r,i,(s,a)=>{s?o(s):n(a);});})}subscribe(e,r,i){let n=this.options.protocolVersion;typeof r==\"function\"&&(i=r),i=i||this.noop;let o=!1,s=[];typeof e==\"string\"?(e=[e],s=e):Array.isArray(e)?s=e:typeof e==\"object\"&&(o=e.resubscribe,delete e.resubscribe,s=Object.keys(e));let a=Dp.validateTopics(s);if(a!==null)return Fa(i,new Error(`Invalid topic ${a}`)),this;if(this._checkDisconnecting(i))return this.log(\"subscribe: discconecting true\"),this;let u={qos:0};n===5&&(u.nl=!1,u.rap=!1,u.rh=0),r=Object.assign(Object.assign({},u),r);let c=r.properties,h=[],d=(y,w)=>{if(w=w||r,!Object.prototype.hasOwnProperty.call(this._resubscribeTopics,y)||this._resubscribeTopics[y].qos{this.log(\"subscribe: array topic %s\",y),d(y);}):Object.keys(e).forEach(y=>{this.log(\"subscribe: object topic %s, %o\",y,e[y]),d(y,e[y]);}),!h.length)return i(null,[]),this;let g=()=>{let y=this._nextId();if(y===null)return this.log(\"No messageId left\"),!1;let w={cmd:\"subscribe\",subscriptions:h,messageId:y};if(c&&(w.properties=c),this.options.resubscribe){this.log(\"subscribe :: resubscribe true\");let E=[];h.forEach(S=>{if(this.options.reconnectPeriod>0){let I={qos:S.qos};n===5&&(I.nl=S.nl||!1,I.rap=S.rap||!1,I.rh=S.rh||0,I.properties=S.properties),this._resubscribeTopics[S.topic]=I,E.push(S.topic);}}),this.messageIdToTopic[w.messageId]=E;}return this.outgoing[w.messageId]={volatile:!0,cb(E,S){if(!E){let{granted:I}=S;for(let C=0;C0||!g())&&this._storeProcessingQueue.push({invoke:g,callback:i}),this}subscribeAsync(e,r){return new Promise((i,n)=>{this.subscribe(e,r,(o,s)=>{o?n(o):i(s);});})}unsubscribe(e,r,i){typeof e==\"string\"&&(e=[e]),typeof r==\"function\"&&(i=r),i=i||this.noop;let n=Dp.validateTopics(e);if(n!==null)return Fa(i,new Error(`Invalid topic ${n}`)),this;if(this._checkDisconnecting(i))return this;let o=()=>{let s=this._nextId();if(s===null)return this.log(\"No messageId left\"),!1;let a={cmd:\"unsubscribe\",messageId:s,unsubscriptions:[]};return typeof e==\"string\"?a.unsubscriptions=[e]:Array.isArray(e)&&(a.unsubscriptions=e),this.options.resubscribe&&a.unsubscriptions.forEach(u=>{delete this._resubscribeTopics[u];}),typeof r==\"object\"&&r.properties&&(a.properties=r.properties),this.outgoing[a.messageId]={volatile:!0,cb:i},this.log(\"unsubscribe: call _sendPacket\"),this._sendPacket(a),!0};return (this._storeProcessing||this._storeProcessingQueue.length>0||!o())&&this._storeProcessingQueue.push({invoke:o,callback:i}),this}unsubscribeAsync(e,r){return new Promise((i,n)=>{this.unsubscribe(e,r,(o,s)=>{o?n(o):i(s);});})}end(e,r,i){this.log(\"end :: (%s)\",this.options.clientId),(e==null||typeof e!=\"boolean\")&&(i=i||r,r=e,e=!1),typeof r!=\"object\"&&(i=i||r,r=null),this.log(\"end :: cb? %s\",!!i),(!i||typeof i!=\"function\")&&(i=this.noop);let n=()=>{this.log(\"end :: closeStores: closing incoming and outgoing stores\"),this.disconnected=!0,this.incomingStore.close(s=>{this.outgoingStore.close(a=>{if(this.log(\"end :: closeStores: emitting end\"),this.emit(\"end\"),i){let u=s||a;this.log(\"end :: closeStores: invoking callback with args\"),i(u);}});}),this._deferredReconnect&&this._deferredReconnect();},o=()=>{this.log(\"end :: (%s) :: finish :: calling _cleanUp with force %s\",this.options.clientId,e),this._cleanUp(e,()=>{this.log(\"end :: finish :: calling process.nextTick on closeStores\"),(0, Wa.nextTick)(n);},r);};return this.disconnecting?(i(),this):(this._clearReconnect(),this.disconnecting=!0,!e&&Object.keys(this.outgoing).length>0?(this.log(\"end :: (%s) :: calling finish in 10ms once outgoing is empty\",this.options.clientId),this.once(\"outgoingEmpty\",setTimeout.bind(null,o,10))):(this.log(\"end :: (%s) :: immediately calling finish\",this.options.clientId),o()),this)}endAsync(e,r){return new Promise((i,n)=>{this.end(e,r,o=>{o?n(o):i();});})}removeOutgoingMessage(e){if(this.outgoing[e]){let{cb:r}=this.outgoing[e];this._removeOutgoingAndStoreMessage(e,()=>{r(new Error(\"Message removed\"));});}return this}reconnect(e){this.log(\"client reconnect\");let r=()=>{e?(this.options.incomingStore=e.incomingStore,this.options.outgoingStore=e.outgoingStore):(this.options.incomingStore=null,this.options.outgoingStore=null),this.incomingStore=this.options.incomingStore||new rs.default,this.outgoingStore=this.options.outgoingStore||new rs.default,this.disconnecting=!1,this.disconnected=!1,this._deferredReconnect=null,this._reconnect();};return this.disconnecting&&!this.disconnected?this._deferredReconnect=r:r(),this}_flushVolatile(){this.outgoing&&(this.log(\"_flushVolatile :: deleting volatile messages from the queue and setting their callbacks as error function\"),Object.keys(this.outgoing).forEach(e=>{this.outgoing[e].volatile&&typeof this.outgoing[e].cb==\"function\"&&(this.outgoing[e].cb(new Error(\"Connection closed\")),delete this.outgoing[e]);}));}_flush(){this.outgoing&&(this.log(\"_flush: queue exists? %b\",!!this.outgoing),Object.keys(this.outgoing).forEach(e=>{typeof this.outgoing[e].cb==\"function\"&&(this.outgoing[e].cb(new Error(\"Connection closed\")),delete this.outgoing[e]);}));}_removeTopicAliasAndRecoverTopicName(e){let r;e.properties&&(r=e.properties.topicAlias);let i=e.topic.toString();if(this.log(\"_removeTopicAliasAndRecoverTopicName :: alias %d, topic %o\",r,i),i.length===0){if(typeof r>\"u\")return new Error(\"Unregistered Topic Alias\");if(i=this.topicAliasSend.getTopicByAlias(r),typeof i>\"u\")return new Error(\"Unregistered Topic Alias\");e.topic=i;}r&&delete e.properties.topicAlias;}_checkDisconnecting(e){return this.disconnecting&&(e&&e!==this.noop?e(new Error(\"client disconnecting\")):this.emit(\"error\",new Error(\"client disconnecting\"))),this.disconnecting}_reconnect(){this.log(\"_reconnect: emitting reconnect to client\"),this.emit(\"reconnect\"),this.connected?(this.end(()=>{this.connect();}),this.log(\"client already connected. disconnecting first.\")):(this.log(\"_reconnect: calling connect\"),this.connect());}_setupReconnect(){!this.disconnecting&&!this.reconnectTimer&&this.options.reconnectPeriod>0?(this.reconnecting||(this.log(\"_setupReconnect :: emit `offline` state\"),this.emit(\"offline\"),this.log(\"_setupReconnect :: set `reconnecting` to `true`\"),this.reconnecting=!0),this.log(\"_setupReconnect :: setting reconnectTimer for %d ms\",this.options.reconnectPeriod),this.reconnectTimer=setInterval(()=>{this.log(\"reconnectTimer :: reconnect triggered!\"),this._reconnect();},this.options.reconnectPeriod)):this.log(\"_setupReconnect :: doing nothing...\");}_clearReconnect(){this.log(\"_clearReconnect : clearing reconnect timer\"),this.reconnectTimer&&(clearInterval(this.reconnectTimer),this.reconnectTimer=null);}_cleanUp(e,r,i={}){if(r&&(this.log(\"_cleanUp :: done callback provided for on stream close\"),this.stream.on(\"close\",r)),this.log(\"_cleanUp :: forced? %s\",e),e)this.options.reconnectPeriod===0&&this.options.clean&&this._flush(),this.log(\"_cleanUp :: (%s) :: destroying stream\",this.options.clientId),this.stream.destroy();else {let n=Object.assign({cmd:\"disconnect\"},i);this.log(\"_cleanUp :: (%s) :: call _sendPacket with disconnect packet\",this.options.clientId),this._sendPacket(n,()=>{this.log(\"_cleanUp :: (%s) :: destroying stream\",this.options.clientId),Fa(()=>{this.stream.end(()=>{this.log(\"_cleanUp :: (%s) :: stream destroyed\",this.options.clientId);});});});}!this.disconnecting&&!this.reconnecting&&(this.log(\"_cleanUp :: client not disconnecting/reconnecting. Clearing and resetting reconnect.\"),this._clearReconnect(),this._setupReconnect()),this.pingTimer&&(this.log(\"_cleanUp :: clearing pingTimer\"),this.pingTimer.clear(),this.pingTimer=null),r&&!this.connected&&(this.log(\"_cleanUp :: (%s) :: removing stream `done` callback `close` listener\",this.options.clientId),this.stream.removeListener(\"close\",r),r());}_storeAndSend(e,r,i){this.log(\"storeAndSend :: store packet with cmd %s to outgoingStore\",e.cmd);let n=e,o;if(n.cmd===\"publish\"&&(n=(0, qp.default)(e),o=this._removeTopicAliasAndRecoverTopicName(n),o))return r&&r(o);this.outgoingStore.put(n,s=>{if(s)return r&&r(s);i(),this._writePacket(e,r);});}_applyTopicAlias(e){if(this.options.protocolVersion===5&&e.cmd===\"publish\"){let r;e.properties&&(r=e.properties.topicAlias);let i=e.topic.toString();if(this.topicAliasSend)if(r){if(i.length!==0&&(this.log(\"applyTopicAlias :: register topic: %s - alias: %d\",i,r),!this.topicAliasSend.put(i,r)))return this.log(\"applyTopicAlias :: error out of range. topic: %s - alias: %d\",i,r),new Error(\"Sending Topic Alias out of range\")}else i.length!==0&&(this.options.autoAssignTopicAlias?(r=this.topicAliasSend.getAliasByTopic(i),r?(e.topic=\"\",e.properties=Object.assign(Object.assign({},e.properties),{topicAlias:r}),this.log(\"applyTopicAlias :: auto assign(use) topic: %s - alias: %d\",i,r)):(r=this.topicAliasSend.getLruAlias(),this.topicAliasSend.put(i,r),e.properties=Object.assign(Object.assign({},e.properties),{topicAlias:r}),this.log(\"applyTopicAlias :: auto assign topic: %s - alias: %d\",i,r))):this.options.autoUseTopicAlias&&(r=this.topicAliasSend.getAliasByTopic(i),r&&(e.topic=\"\",e.properties=Object.assign(Object.assign({},e.properties),{topicAlias:r}),this.log(\"applyTopicAlias :: auto use topic: %s - alias: %d\",i,r))));else if(r)return this.log(\"applyTopicAlias :: error out of range. topic: %s - alias: %d\",i,r),new Error(\"Sending Topic Alias out of range\")}}_noop(e){this.log(\"noop ::\",e);}_writePacket(e,r){this.log(\"_writePacket :: packet: %O\",e),this.log(\"_writePacket :: emitting `packetsend`\"),this.emit(\"packetsend\",e),this._shiftPingInterval(),this.log(\"_writePacket :: writing to stream\");let i=ja.default.writeToStream(e,this.stream,this.options);this.log(\"_writePacket :: writeToStream result %s\",i),!i&&r&&r!==this.noop?(this.log(\"_writePacket :: handle events on `drain` once through callback.\"),this.stream.once(\"drain\",r)):r&&(this.log(\"_writePacket :: invoking cb\"),r());}_sendPacket(e,r,i,n){this.log(\"_sendPacket :: (%s) :: start\",this.options.clientId),i=i||this.noop,r=r||this.noop;let o=this._applyTopicAlias(e);if(o){r(o);return}if(!this.connected){if(e.cmd===\"auth\"){this._writePacket(e,r);return}this.log(\"_sendPacket :: client not connected. Storing packet offline.\"),this._storePacket(e,r,i);return}if(n){this._writePacket(e,r);return}switch(e.cmd){case\"publish\":break;case\"pubrel\":this._storeAndSend(e,r,i);return;default:this._writePacket(e,r);return}switch(e.qos){case 2:case 1:this._storeAndSend(e,r,i);break;case 0:default:this._writePacket(e,r);break}this.log(\"_sendPacket :: (%s) :: end\",this.options.clientId);}_storePacket(e,r,i){this.log(\"_storePacket :: packet: %o\",e),this.log(\"_storePacket :: cb? %s\",!!r),i=i||this.noop;let n=e;if(n.cmd===\"publish\"){n=(0, qp.default)(e);let s=this._removeTopicAliasAndRecoverTopicName(n);if(s)return r&&r(s)}let o=n.qos||0;o===0&&this.queueQoSZero||n.cmd!==\"publish\"?this.queue.push({packet:n,cb:r}):o>0?(r=this.outgoing[n.messageId]?this.outgoing[n.messageId].cb:null,this.outgoingStore.put(n,s=>{if(s)return r&&r(s);i();})):r&&r(new Error(\"No connection to broker\"));}_setupPingTimer(){this.log(\"_setupPingTimer :: keepalive %d (seconds)\",this.options.keepalive),!this.pingTimer&&this.options.keepalive&&(this.pingResp=!0,this.pingTimer=new Xv.default(this.options.keepalive,()=>{this._checkPing();},this.options.timerVariant));}_shiftPingInterval(){this.pingTimer&&this.options.keepalive&&this.options.reschedulePings&&this.pingTimer.reschedule();}_checkPing(){this.log(\"_checkPing :: checking ping...\"),this.pingResp?(this.log(\"_checkPing :: ping response received. Clearing flag and sending `pingreq`\"),this.pingResp=!1,this._sendPacket({cmd:\"pingreq\"})):(this.emit(\"error\",new Error(\"Keepalive timeout\")),this.log(\"_checkPing :: calling _cleanUp with force true\"),this._cleanUp(!0));}_resubscribe(){this.log(\"_resubscribe\");let e=Object.keys(this._resubscribeTopics);if(!this._firstConnection&&(this.options.clean||this.options.protocolVersion>=4&&!this.connackPacket.sessionPresent)&&e.length>0)if(this.options.resubscribe)if(this.options.protocolVersion===5){this.log(\"_resubscribe: protocolVersion 5\");for(let r=0;r{let i=this.outgoingStore.createStream(),n=()=>{i.destroy(),i=null,this._flushStoreProcessingQueue(),o();},o=()=>{this._storeProcessing=!1,this._packetIdsDuringStoreProcessing={};};this.once(\"close\",n),i.on(\"error\",a=>{o(),this._flushStoreProcessingQueue(),this.removeListener(\"close\",n),this.emit(\"error\",a);});let s=()=>{if(!i)return;let a=i.read(1),u;if(!a){i.once(\"readable\",s);return}if(this._storeProcessing=!0,this._packetIdsDuringStoreProcessing[a.messageId]){s();return}!this.disconnecting&&!this.reconnectTimer?(u=this.outgoing[a.messageId]?this.outgoing[a.messageId].cb:null,this.outgoing[a.messageId]={volatile:!1,cb(c,h){u&&u(c,h),s();}},this._packetIdsDuringStoreProcessing[a.messageId]=!0,this.messageIdProvider.register(a.messageId)?this._sendPacket(a,void 0,void 0,!0):this.log(\"messageId: %d has already used.\",a.messageId)):i.destroy&&i.destroy();};i.on(\"end\",()=>{let a=!0;for(let u in this._packetIdsDuringStoreProcessing)if(!this._packetIdsDuringStoreProcessing[u]){a=!1;break}this.removeListener(\"close\",n),a?(o(),this._invokeAllStoreProcessingQueue(),this.emit(\"connect\",e)):r();}),s();};r();}_invokeStoreProcessingQueue(){if(!this._storeProcessing&&this._storeProcessingQueue.length>0){let e=this._storeProcessingQueue[0];if(e&&e.invoke())return this._storeProcessingQueue.shift(),!0}return !1}_invokeAllStoreProcessingQueue(){for(;this._invokeStoreProcessingQueue(););}_flushStoreProcessingQueue(){for(let e of this._storeProcessingQueue)e.cbStorePut&&e.cbStorePut(new Error(\"Connection closed\")),e.callback&&e.callback(new Error(\"Connection closed\"));this._storeProcessingQueue.splice(0);}_removeOutgoingAndStoreMessage(e,r){delete this.outgoing[e],this.outgoingStore.del({messageId:e},(i,n)=>{r(i,n),this.messageIdProvider.deallocate(e),this._invokeStoreProcessingQueue();});}};is.VERSION=\"5.5.2\";Qe.default=is;});var $p=M(Ha=>{v();m();_();Object.defineProperty(Ha,\"__esModule\",{value:!0});var Zv=xa(),$a=class{constructor(){this.numberAllocator=new Zv.NumberAllocator(1,65535);}allocate(){return this.lastId=this.numberAllocator.alloc(),this.lastId}getLastAllocated(){return this.lastId}register(e){return this.numberAllocator.use(e)}deallocate(e){this.numberAllocator.free(e);}clear(){this.numberAllocator.clear();}};Ha.default=$a;});function Ir(t){throw new RangeError(iE[t])}function Hp(t,e){let r=t.split(\"@\"),i=\"\";r.length>1&&(i=r[0]+\"@\",t=r[1]);let n=function(o,s){let a=[],u=o.length;for(;u--;)a[u]=s(o[u]);return a}((t=t.replace(rE,\".\")).split(\".\"),e).join(\".\");return i+n}function Gp(t){let e=[],r=0,i=t.length;for(;r=55296&&n<=56319&&r{v();m();_();eE=/^xn--/,tE=/[^\\0-\\x7E]/,rE=/[\\x2E\\u3002\\uFF0E\\uFF61]/g,iE={overflow:\"Overflow: input needs wider integers to process\",\"not-basic\":\"Illegal input >= 0x80 (not a basic code point)\",\"invalid-input\":\"Invalid input\"},ht=Math.floor,Va=String.fromCharCode;Vp=function(t,e){return t+22+75*(t<26)-((e!=0)<<5)},Qp=function(t,e,r){let i=0;for(t=r?ht(t/700):t>>1,t+=ht(t/e);t>455;i+=36)t=ht(t/35);return ht(i+36*t/(t+38))},zp=function(t){let e=[],r=t.length,i=0,n=128,o=72,s=t.lastIndexOf(\"-\");s<0&&(s=0);for(let u=0;u=128&&Ir(\"not-basic\"),e.push(t.charCodeAt(u));for(let u=s>0?s+1:0;u=r&&Ir(\"invalid-input\");let y=(a=t.charCodeAt(u++))-48<10?a-22:a-65<26?a-65:a-97<26?a-97:36;(y>=36||y>ht((2147483647-i)/d))&&Ir(\"overflow\"),i+=y*d;let w=g<=o?1:g>=o+26?26:g-o;if(yht(2147483647/E)&&Ir(\"overflow\"),d*=E;}let h=e.length+1;o=Qp(i-c,h,c==0),ht(i/h)>2147483647-n&&Ir(\"overflow\"),n+=ht(i/h),i%=h,e.splice(i++,0,n);}var a;return String.fromCodePoint(...e)},Kp=function(t){let e=[],r=(t=Gp(t)).length,i=128,n=0,o=72;for(let u of t)u<128&&e.push(Va(u));let s=e.length,a=s;for(s&&e.push(\"-\");a=i&&hht((2147483647-n)/c)&&Ir(\"overflow\"),n+=(u-i)*c,i=u;for(let h of t)if(h2147483647&&Ir(\"overflow\"),h==i){let d=n;for(let g=36;;g+=36){let y=g<=o?1:g>=o+26?26:g-o;if(dString.fromCodePoint(...t)},decode:zp,encode:Kp,toASCII:function(t){return Hp(t,function(e){return tE.test(e)?\"xn--\"+Kp(e):e})},toUnicode:function(t){return Hp(t,function(e){return eE.test(e)?zp(e.slice(4).toLowerCase()):e})}};zt.decode;zt.encode;zt.toASCII;zt.toUnicode;zt.ucs2;zt.version;});function nE(t,e){return Object.prototype.hasOwnProperty.call(t,e)}var sE,ki,oE,dt,Jp=we(()=>{v();m();_();sE=function(t,e,r,i){e=e||\"&\",r=r||\"=\";var n={};if(typeof t!=\"string\"||t.length===0)return n;var o=/\\+/g;t=t.split(e);var s=1e3;i&&typeof i.maxKeys==\"number\"&&(s=i.maxKeys);var a=t.length;s>0&&a>s&&(a=s);for(var u=0;u=0?(c=y.substr(0,w),h=y.substr(w+1)):(c=y,h=\"\"),d=decodeURIComponent(c),g=decodeURIComponent(h),nE(n,d)?Array.isArray(n[d])?n[d].push(g):n[d]=[n[d],g]:n[d]=g;}return n},ki=function(t){switch(typeof t){case\"string\":return t;case\"boolean\":return t?\"true\":\"false\";case\"number\":return isFinite(t)?t:\"\";default:return \"\"}},oE=function(t,e,r,i){return e=e||\"&\",r=r||\"=\",t===null&&(t=void 0),typeof t==\"object\"?Object.keys(t).map(function(n){var o=encodeURIComponent(ki(n))+r;return Array.isArray(t[n])?t[n].map(function(s){return o+encodeURIComponent(ki(s))}).join(e):o+encodeURIComponent(ki(t[n]))}).join(e):i?encodeURIComponent(ki(i))+r+encodeURIComponent(ki(t)):\"\"},dt={};dt.decode=dt.parse=sE,dt.encode=dt.stringify=oE;dt.decode;dt.encode;dt.parse;dt.stringify;});function za(){throw new Error(\"setTimeout has not been defined\")}function Ka(){throw new Error(\"clearTimeout has not been defined\")}function eg(t){if(Bt===setTimeout)return setTimeout(t,0);if((Bt===za||!Bt)&&setTimeout)return Bt=setTimeout,setTimeout(t,0);try{return Bt(t,0)}catch{try{return Bt.call(null,t,0)}catch{return Bt.call(this||ii,t,0)}}}function aE(){ri&&Tr&&(ri=!1,Tr.length?Ot=Tr.concat(Ot):ss=-1,Ot.length&&tg());}function tg(){if(!ri){var t=eg(aE);ri=!0;for(var e=Ot.length;e;){for(Tr=Ot,Ot=[];++ss{v();m();_();ii=typeof globalThis<\"u\"?globalThis:typeof self<\"u\"?self:global,fe=Zp={};(function(){try{Bt=typeof setTimeout==\"function\"?setTimeout:za;}catch{Bt=za;}try{Pt=typeof clearTimeout==\"function\"?clearTimeout:Ka;}catch{Pt=Ka;}})();Ot=[],ri=!1,ss=-1;fe.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r1)for(var I=1;I{v();m();_();Ga={},ig=!1,ni=typeof globalThis<\"u\"?globalThis:typeof self<\"u\"?self:global;re=lE();re.platform=\"browser\";re.addListener;re.argv;re.binding;re.browser;re.chdir;re.cwd;re.emit;re.env;re.listeners;re.nextTick;re.off;re.on;re.once;re.prependListener;re.prependOnceListener;re.removeAllListeners;re.removeListener;re.title;re.umask;re.version;re.versions;});function uE(){if(ng)return Ya;ng=!0;var t=re;function e(o){if(typeof o!=\"string\")throw new TypeError(\"Path must be a string. Received \"+JSON.stringify(o))}function r(o,s){for(var a=\"\",u=0,c=-1,h=0,d,g=0;g<=o.length;++g){if(g2){var y=a.lastIndexOf(\"/\");if(y!==a.length-1){y===-1?(a=\"\",u=0):(a=a.slice(0,y),u=a.length-1-a.lastIndexOf(\"/\")),c=g,h=0;continue}}else if(a.length===2||a.length===1){a=\"\",u=0,c=g,h=0;continue}}s&&(a.length>0?a+=\"/..\":a=\"..\",u=2);}else a.length>0?a+=\"/\"+o.slice(c+1,g):a=o.slice(c+1,g),u=g-c-1;c=g,h=0;}else d===46&&h!==-1?++h:h=-1;}return a}function i(o,s){var a=s.dir||s.root,u=s.base||(s.name||\"\")+(s.ext||\"\");return a?a===s.root?a+u:a+o+u:u}var n={resolve:function(){for(var s=\"\",a=!1,u,c=arguments.length-1;c>=-1&&!a;c--){var h;c>=0?h=arguments[c]:(u===void 0&&(u=t.cwd()),h=u),e(h),h.length!==0&&(s=h+\"/\"+s,a=h.charCodeAt(0)===47);}return s=r(s,!a),a?s.length>0?\"/\"+s:\"/\":s.length>0?s:\".\"},normalize:function(s){if(e(s),s.length===0)return \".\";var a=s.charCodeAt(0)===47,u=s.charCodeAt(s.length-1)===47;return s=r(s,!a),s.length===0&&!a&&(s=\".\"),s.length>0&&u&&(s+=\"/\"),a?\"/\"+s:s},isAbsolute:function(s){return e(s),s.length>0&&s.charCodeAt(0)===47},join:function(){if(arguments.length===0)return \".\";for(var s,a=0;a0&&(s===void 0?s=u:s+=\"/\"+u);}return s===void 0?\".\":n.normalize(s)},relative:function(s,a){if(e(s),e(a),s===a||(s=n.resolve(s),a=n.resolve(a),s===a))return \"\";for(var u=1;uw){if(a.charCodeAt(d+S)===47)return a.slice(d+S+1);if(S===0)return a.slice(d+S)}else h>w&&(s.charCodeAt(u+S)===47?E=S:S===0&&(E=0));break}var I=s.charCodeAt(u+S),C=a.charCodeAt(d+S);if(I!==C)break;I===47&&(E=S);}var R=\"\";for(S=u+E+1;S<=c;++S)(S===c||s.charCodeAt(S)===47)&&(R.length===0?R+=\"..\":R+=\"/..\");return R.length>0?R+a.slice(d+E):(d+=E,a.charCodeAt(d)===47&&++d,a.slice(d))},_makeLong:function(s){return s},dirname:function(s){if(e(s),s.length===0)return \".\";for(var a=s.charCodeAt(0),u=a===47,c=-1,h=!0,d=s.length-1;d>=1;--d)if(a=s.charCodeAt(d),a===47){if(!h){c=d;break}}else h=!1;return c===-1?u?\"/\":\".\":u&&c===1?\"//\":s.slice(0,c)},basename:function(s,a){if(a!==void 0&&typeof a!=\"string\")throw new TypeError('\"ext\" argument must be a string');e(s);var u=0,c=-1,h=!0,d;if(a!==void 0&&a.length>0&&a.length<=s.length){if(a.length===s.length&&a===s)return \"\";var g=a.length-1,y=-1;for(d=s.length-1;d>=0;--d){var w=s.charCodeAt(d);if(w===47){if(!h){u=d+1;break}}else y===-1&&(h=!1,y=d+1),g>=0&&(w===a.charCodeAt(g)?--g===-1&&(c=d):(g=-1,c=y));}return u===c?c=y:c===-1&&(c=s.length),s.slice(u,c)}else {for(d=s.length-1;d>=0;--d)if(s.charCodeAt(d)===47){if(!h){u=d+1;break}}else c===-1&&(h=!1,c=d+1);return c===-1?\"\":s.slice(u,c)}},extname:function(s){e(s);for(var a=-1,u=0,c=-1,h=!0,d=0,g=s.length-1;g>=0;--g){var y=s.charCodeAt(g);if(y===47){if(!h){u=g+1;break}continue}c===-1&&(h=!1,c=g+1),y===46?a===-1?a=g:d!==1&&(d=1):a!==-1&&(d=-1);}return a===-1||c===-1||d===0||d===1&&a===c-1&&a===u+1?\"\":s.slice(a,c)},format:function(s){if(s===null||typeof s!=\"object\")throw new TypeError('The \"pathObject\" argument must be of type Object. Received type '+typeof s);return i(\"/\",s)},parse:function(s){e(s);var a={root:\"\",dir:\"\",base:\"\",ext:\"\",name:\"\"};if(s.length===0)return a;var u=s.charCodeAt(0),c=u===47,h;c?(a.root=\"/\",h=1):h=0;for(var d=-1,g=0,y=-1,w=!0,E=s.length-1,S=0;E>=h;--E){if(u=s.charCodeAt(E),u===47){if(!w){g=E+1;break}continue}y===-1&&(w=!1,y=E+1),u===46?d===-1?d=E:S!==1&&(S=1):d!==-1&&(S=-1);}return d===-1||y===-1||S===0||S===1&&d===y-1&&d===g+1?y!==-1&&(g===0&&c?a.base=a.name=s.slice(1,y):a.base=a.name=s.slice(g,y)):(g===0&&c?(a.name=s.slice(1,d),a.base=s.slice(1,y)):(a.name=s.slice(g,d),a.base=s.slice(g,y)),a.ext=s.slice(d,y)),g>0?a.dir=s.slice(0,g-1):c&&(a.dir=\"/\"),a},sep:\"/\",delimiter:\":\",win32:null,posix:null};return n.posix=n,Ya=n,Ya}var Ya,ng,Ja,sg=we(()=>{v();m();_();Qa();Ya={},ng=!1;Ja=uE();});var dg={};Qt(dg,{URL:()=>DE,Url:()=>ME,default:()=>Z,fileURLToPath:()=>cg,format:()=>LE,parse:()=>qE,pathToFileURL:()=>hg,resolve:()=>UE,resolveObject:()=>NE});function Fe(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null;}function xi(t,e,r){if(t&&pt.isObject(t)&&t instanceof Fe)return t;var i=new Fe;return i.parse(t,e,r),i}function bE(){if(ug)return el;ug=!0;var t=ne;function e(o){if(typeof o!=\"string\")throw new TypeError(\"Path must be a string. Received \"+JSON.stringify(o))}function r(o,s){for(var a=\"\",u=0,c=-1,h=0,d,g=0;g<=o.length;++g){if(g2){var y=a.lastIndexOf(\"/\");if(y!==a.length-1){y===-1?(a=\"\",u=0):(a=a.slice(0,y),u=a.length-1-a.lastIndexOf(\"/\")),c=g,h=0;continue}}else if(a.length===2||a.length===1){a=\"\",u=0,c=g,h=0;continue}}s&&(a.length>0?a+=\"/..\":a=\"..\",u=2);}else a.length>0?a+=\"/\"+o.slice(c+1,g):a=o.slice(c+1,g),u=g-c-1;c=g,h=0;}else d===46&&h!==-1?++h:h=-1;}return a}function i(o,s){var a=s.dir||s.root,u=s.base||(s.name||\"\")+(s.ext||\"\");return a?a===s.root?a+u:a+o+u:u}var n={resolve:function(){for(var s=\"\",a=!1,u,c=arguments.length-1;c>=-1&&!a;c--){var h;c>=0?h=arguments[c]:(u===void 0&&(u=t.cwd()),h=u),e(h),h.length!==0&&(s=h+\"/\"+s,a=h.charCodeAt(0)===47);}return s=r(s,!a),a?s.length>0?\"/\"+s:\"/\":s.length>0?s:\".\"},normalize:function(s){if(e(s),s.length===0)return \".\";var a=s.charCodeAt(0)===47,u=s.charCodeAt(s.length-1)===47;return s=r(s,!a),s.length===0&&!a&&(s=\".\"),s.length>0&&u&&(s+=\"/\"),a?\"/\"+s:s},isAbsolute:function(s){return e(s),s.length>0&&s.charCodeAt(0)===47},join:function(){if(arguments.length===0)return \".\";for(var s,a=0;a0&&(s===void 0?s=u:s+=\"/\"+u);}return s===void 0?\".\":n.normalize(s)},relative:function(s,a){if(e(s),e(a),s===a||(s=n.resolve(s),a=n.resolve(a),s===a))return \"\";for(var u=1;uw){if(a.charCodeAt(d+S)===47)return a.slice(d+S+1);if(S===0)return a.slice(d+S)}else h>w&&(s.charCodeAt(u+S)===47?E=S:S===0&&(E=0));break}var I=s.charCodeAt(u+S),C=a.charCodeAt(d+S);if(I!==C)break;I===47&&(E=S);}var R=\"\";for(S=u+E+1;S<=c;++S)(S===c||s.charCodeAt(S)===47)&&(R.length===0?R+=\"..\":R+=\"/..\");return R.length>0?R+a.slice(d+E):(d+=E,a.charCodeAt(d)===47&&++d,a.slice(d))},_makeLong:function(s){return s},dirname:function(s){if(e(s),s.length===0)return \".\";for(var a=s.charCodeAt(0),u=a===47,c=-1,h=!0,d=s.length-1;d>=1;--d)if(a=s.charCodeAt(d),a===47){if(!h){c=d;break}}else h=!1;return c===-1?u?\"/\":\".\":u&&c===1?\"//\":s.slice(0,c)},basename:function(s,a){if(a!==void 0&&typeof a!=\"string\")throw new TypeError('\"ext\" argument must be a string');e(s);var u=0,c=-1,h=!0,d;if(a!==void 0&&a.length>0&&a.length<=s.length){if(a.length===s.length&&a===s)return \"\";var g=a.length-1,y=-1;for(d=s.length-1;d>=0;--d){var w=s.charCodeAt(d);if(w===47){if(!h){u=d+1;break}}else y===-1&&(h=!1,y=d+1),g>=0&&(w===a.charCodeAt(g)?--g===-1&&(c=d):(g=-1,c=y));}return u===c?c=y:c===-1&&(c=s.length),s.slice(u,c)}else {for(d=s.length-1;d>=0;--d)if(s.charCodeAt(d)===47){if(!h){u=d+1;break}}else c===-1&&(h=!1,c=d+1);return c===-1?\"\":s.slice(u,c)}},extname:function(s){e(s);for(var a=-1,u=0,c=-1,h=!0,d=0,g=s.length-1;g>=0;--g){var y=s.charCodeAt(g);if(y===47){if(!h){u=g+1;break}continue}c===-1&&(h=!1,c=g+1),y===46?a===-1?a=g:d!==1&&(d=1):a!==-1&&(d=-1);}return a===-1||c===-1||d===0||d===1&&a===c-1&&a===u+1?\"\":s.slice(a,c)},format:function(s){if(s===null||typeof s!=\"object\")throw new TypeError('The \"pathObject\" argument must be of type Object. Received type '+typeof s);return i(\"/\",s)},parse:function(s){e(s);var a={root:\"\",dir:\"\",base:\"\",ext:\"\",name:\"\"};if(s.length===0)return a;var u=s.charCodeAt(0),c=u===47,h;c?(a.root=\"/\",h=1):h=0;for(var d=-1,g=0,y=-1,w=!0,E=s.length-1,S=0;E>=h;--E){if(u=s.charCodeAt(E),u===47){if(!w){g=E+1;break}continue}y===-1&&(w=!1,y=E+1),u===46?d===-1?d=E:S!==1&&(S=1):d!==-1&&(S=-1);}return d===-1||y===-1||S===0||S===1&&d===y-1&&d===g+1?y!==-1&&(g===0&&c?a.base=a.name=s.slice(1,y):a.base=a.name=s.slice(g,y)):(g===0&&c?(a.name=s.slice(1,d),a.base=s.slice(1,y)):(a.name=s.slice(g,d),a.base=s.slice(g,y)),a.ext=s.slice(d,y)),g>0?a.dir=s.slice(0,g-1):c&&(a.dir=\"/\"),a},sep:\"/\",delimiter:\":\",win32:null,posix:null};return n.posix=n,el=n,el}function BE(t){if(typeof t==\"string\")t=new URL(t);else if(!(t instanceof URL))throw new Deno.errors.InvalidData(\"invalid argument path , must be a string or URL\");if(t.protocol!==\"file:\")throw new Deno.errors.InvalidData(\"invalid url scheme\");return rl?PE(t):OE(t)}function PE(t){let e=t.hostname,r=t.pathname;for(let i=0;iEE||n!==\":\")throw new Deno.errors.InvalidData(\"file url path must be absolute\");return r.slice(1)}}function OE(t){if(t.hostname!==\"\")throw new Deno.errors.InvalidData(\"invalid file url hostname\");let e=t.pathname;for(let r=0;r$E||n!==\":\")throw new Deno.errors.InvalidData(\"file url path must be absolute\");return r.slice(1)}}function JE(t){if(t.hostname!==\"\")throw new Deno.errors.InvalidData(\"invalid file url hostname\");let e=t.pathname;for(let r=0;r{v();m();_();Yp();Jp();rg();sg();Qa();Z={},fE=zt,pt={isString:function(t){return typeof t==\"string\"},isObject:function(t){return typeof t==\"object\"&&t!==null},isNull:function(t){return t===null},isNullOrUndefined:function(t){return t==null}};Z.parse=xi,Z.resolve=function(t,e){return xi(t,!1,!0).resolve(e)},Z.resolveObject=function(t,e){return t?xi(t,!1,!0).resolveObject(e):e},Z.format=function(t){return pt.isString(t)&&(t=xi(t)),t instanceof Fe?t.format():Fe.prototype.format.call(t)},Z.Url=Fe;cE=/^([a-z0-9.+-]+:)/i,hE=/:[0-9]*$/,dE=/^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,pE=[\"{\",\"}\",\"|\",\"\\\\\",\"^\",\"`\"].concat([\"<\",\">\",'\"',\"`\",\" \",\"\\r\",`\n`,\"\t\"]),tl=[\"'\"].concat(pE),og=[\"%\",\"/\",\"?\",\";\",\"#\"].concat(tl),ag=[\"/\",\"?\",\"#\"],lg=/^[+a-z0-9A-Z_-]{0,63}$/,gE=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,yE={javascript:!0,\"javascript:\":!0},Xa={javascript:!0,\"javascript:\":!0},si={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,\"http:\":!0,\"https:\":!0,\"ftp:\":!0,\"gopher:\":!0,\"file:\":!0},Za=dt;Fe.prototype.parse=function(t,e,r){if(!pt.isString(t))throw new TypeError(\"Parameter 'url' must be a string, not \"+typeof t);var i=t.indexOf(\"?\"),n=i!==-1&&i127?U+=\"x\":U+=R[N];if(!U.match(lg)){var K=I.slice(0,w),z=I.slice(w+1),Q=R.match(gE);Q&&(K.push(Q[1]),z.unshift(Q[2])),z.length&&(s=\"/\"+z.join(\".\")+s),this.hostname=K.join(\".\");break}}}this.hostname.length>255?this.hostname=\"\":this.hostname=this.hostname.toLowerCase(),S||(this.hostname=fE.toASCII(this.hostname));var de=this.port?\":\"+this.port:\"\",Gt=this.hostname||\"\";this.host=Gt+de,this.href+=this.host,S&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),s[0]!==\"/\"&&(s=\"/\"+s));}if(!yE[c])for(w=0,C=tl.length;w0)&&r.host.split(\"@\"))&&(r.auth=Q.shift(),r.host=r.hostname=Q.shift())),r.search=t.search,r.query=t.query,pt.isNull(r.pathname)&&pt.isNull(r.search)||(r.path=(r.pathname?r.pathname:\"\")+(r.search?r.search:\"\")),r.href=r.format(),r;if(!R.length)return r.pathname=null,r.search?r.path=\"/\"+r.search:r.path=null,r.href=r.format(),r;for(var N=R.slice(-1)[0],W=(r.host||t.host||R.length>1)&&(N===\".\"||N===\"..\")||N===\"\",K=0,z=R.length;z>=0;z--)(N=R[z])===\".\"?R.splice(z,1):N===\"..\"?(R.splice(z,1),K++):K&&(R.splice(z,1),K--);if(!I&&!C)for(;K--;K)R.unshift(\"..\");!I||R[0]===\"\"||R[0]&&R[0].charAt(0)===\"/\"||R.unshift(\"\"),W&&R.join(\"/\").substr(-1)!==\"/\"&&R.push(\"\");var Q,de=R[0]===\"\"||R[0]&&R[0].charAt(0)===\"/\";return U&&(r.hostname=r.host=de?\"\":R.length?R.shift():\"\",(Q=!!(r.host&&r.host.indexOf(\"@\")>0)&&r.host.split(\"@\"))&&(r.auth=Q.shift(),r.host=r.hostname=Q.shift())),(I=I||r.host&&R.length)&&!de&&R.unshift(\"\"),R.length?r.pathname=R.join(\"/\"):(r.pathname=null,r.path=null),pt.isNull(r.pathname)&&pt.isNull(r.search)||(r.path=(r.pathname?r.pathname:\"\")+(r.search?r.search:\"\")),r.auth=t.auth||r.auth,r.slashes=r.slashes||t.slashes,r.href=r.format(),r},Fe.prototype.parseHost=function(){var t=this.host,e=hE.exec(t);e&&((e=e[0])!==\":\"&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t);};Z.Url;Z.format;Z.resolve;Z.resolveObject;el={},ug=!1;fg=bE(),wE=typeof Deno<\"u\"?Deno.build.os===\"windows\"?\"win32\":Deno.build.os:void 0;Z.URL=typeof URL<\"u\"?URL:null;Z.pathToFileURL=kE;Z.fileURLToPath=BE;Z.Url;Z.format;Z.resolve;Z.resolveObject;Z.URL;_E=92,mE=47,vE=97,EE=122,rl=wE===\"win32\",SE=/\\//g,AE=/%/g,IE=/\\\\/g,TE=/\\n/g,RE=/\\r/g,CE=/\\t/g;xE=typeof Deno<\"u\"?Deno.build.os===\"windows\"?\"win32\":Deno.build.os:void 0;Z.URL=typeof URL<\"u\"?URL:null;Z.pathToFileURL=hg;Z.fileURLToPath=cg;ME=Z.Url,LE=Z.format,UE=Z.resolve,NE=Z.resolveObject,qE=Z.parse,DE=Z.URL,jE=92,FE=47,WE=97,$E=122,il=xE===\"win32\",HE=/\\//g,VE=/%/g,zE=/\\\\/g,KE=/\\n/g,GE=/\\r/g,QE=/\\t/g;});var nl={};Qt(nl,{Server:()=>Me,Socket:()=>Me,Stream:()=>Me,_createServerHandle:()=>Me,_normalizeArgs:()=>Me,_setSimultaneousAccepts:()=>Me,connect:()=>Me,createConnection:()=>Me,createServer:()=>Me,default:()=>XE,isIP:()=>Me,isIPv4:()=>Me,isIPv6:()=>Me});function Me(){throw new Error(\"Node.js net module is not supported by JSPM core outside of Node.js\")}var XE,sl=we(()=>{v();m();_();XE={_createServerHandle:Me,_normalizeArgs:Me,_setSimultaneousAccepts:Me,connect:Me,createConnection:Me,createServer:Me,isIP:Me,isIPv4:Me,isIPv6:Me,Server:Me,Socket:Me,Stream:Me};});var ol=M(Mi=>{v();m();_();var gg=Mi&&Mi.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Mi,\"__esModule\",{value:!0});var ZE=gg((sl(),X(nl))),eS=gg(ot()),tS=(0, eS.default)(\"mqttjs:tcp\"),rS=(t,e)=>{e.port=e.port||1883,e.hostname=e.hostname||e.host||\"localhost\";let{port:r}=e,i=e.hostname;return tS(\"port %d and host %s\",r,i),ZE.default.createConnection(r,i)};Mi.default=rS;});var yg={};Qt(yg,{default:()=>iS});var iS,bg=we(()=>{v();m();_();iS={};});var ll=M(Li=>{v();m();_();var al=Li&&Li.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Li,\"__esModule\",{value:!0});var nS=al((bg(),X(yg))),sS=al((sl(),X(nl))),oS=al(ot()),aS=(0, oS.default)(\"mqttjs:tls\"),lS=(t,e)=>{e.port=e.port||8883,e.host=e.hostname||e.host||\"localhost\",sS.default.isIP(e.host)===0&&(e.servername=e.host),e.rejectUnauthorized=e.rejectUnauthorized!==!1,delete e.path,aS(\"port %d host %s rejectUnauthorized %b\",e.port,e.host,e.rejectUnauthorized);let r=nS.default.connect(e);r.on(\"secureConnect\",()=>{e.rejectUnauthorized&&!r.authorized?r.emit(\"error\",new Error(\"TLS not authorized\")):r.removeListener(\"error\",i);});function i(n){e.rejectUnauthorized&&t.emit(\"error\",n),r.end();}return r.on(\"error\",i),r};Li.default=lS;});var os=M(oi=>{v();m();_();Object.defineProperty(oi,\"__esModule\",{value:!0});oi.BufferedDuplex=oi.writev=void 0;var uS=Dt(),wg=(ye(),X(_e));function _g(t,e){let r=new Array(t.length);for(let i=0;i{this.push(n);});}_read(e){this.proxy.read(e);}_write(e,r,i){this.isSocketOpen?this.writeToProxy(e,r,i):this.writeQueue.push({chunk:e,encoding:r,cb:i});}_final(e){this.writeQueue=[],this.proxy.end(e);}_destroy(e,r){this.writeQueue=[],this.proxy.destroy(),r(e);}socketReady(){this.emit(\"connect\"),this.isSocketOpen=!0,this.processWriteQueue();}writeToProxy(e,r,i){this.proxy.write(e,r)===!1?this.proxy.once(\"drain\",i):i();}processWriteQueue(){for(;this.writeQueue.length>0;){let{chunk:e,encoding:r,cb:i}=this.writeQueue.shift();this.writeToProxy(e,r,i);}}};oi.BufferedDuplex=ul;});var hl=M(cl=>{v();m();_();Object.defineProperty(cl,\"__esModule\",{value:!0});var mg=(ye(),X(_e)),fS=Dt(),cS=os(),gt,fl,Le;function hS(){let t=new fS.Transform;return t._write=(e,r,i)=>{gt.send({data:e.buffer,success(){i();},fail(n){i(new Error(n));}});},t._flush=e=>{gt.close({success(){e();}});},t}function dS(t){t.hostname||(t.hostname=\"localhost\"),t.path||(t.path=\"/\"),t.wsOptions||(t.wsOptions={});}function pS(t,e){let r=t.protocol===\"wxs\"?\"wss\":\"ws\",i=`${r}://${t.hostname}${t.path}`;return t.port&&t.port!==80&&t.port!==443&&(i=`${r}://${t.hostname}:${t.port}${t.path}`),typeof t.transformWsUrl==\"function\"&&(i=t.transformWsUrl(i,t,e)),i}function gS(){gt.onOpen(()=>{Le.socketReady();}),gt.onMessage(t=>{let{data:e}=t;e instanceof ArrayBuffer?e=mg.Buffer.from(e):e=mg.Buffer.from(e,\"utf8\"),fl.push(e);}),gt.onClose(()=>{Le.emit(\"close\"),Le.end(),Le.destroy();}),gt.onError(t=>{let e=new Error(t.errMsg);Le.destroy(e);});}var yS=(t,e)=>{if(e.hostname=e.hostname||e.host,!e.hostname)throw new Error(\"Could not determine host. Specify host manually.\");let r=e.protocolId===\"MQIsdp\"&&e.protocolVersion===3?\"mqttv3.1\":\"mqtt\";dS(e);let i=pS(e,t);gt=wx.connectSocket({url:i,protocols:[r]}),fl=hS(),Le=new cS.BufferedDuplex(e,fl,gt),Le._destroy=(o,s)=>{gt.close({success(){s&&s(o);}});};let n=Le.destroy;return Le.destroy=(o,s)=>(Le.destroy=n,setTimeout(()=>{gt.close({fail(){Le._destroy(o,s);}});},0),Le),gS(),Le};cl.default=yS;});var gl=M(pl=>{v();m();_();Object.defineProperty(pl,\"__esModule\",{value:!0});var dl=(ye(),X(_e)),bS=Dt(),wS=os(),kt,as,ai,vg=!1;function _S(){let t=new bS.Transform;return t._write=(e,r,i)=>{kt.sendSocketMessage({data:e.buffer,success(){i();},fail(){i(new Error);}});},t._flush=e=>{kt.closeSocket({success(){e();}});},t}function mS(t){t.hostname||(t.hostname=\"localhost\"),t.path||(t.path=\"/\"),t.wsOptions||(t.wsOptions={});}function vS(t,e){let r=t.protocol===\"alis\"?\"wss\":\"ws\",i=`${r}://${t.hostname}${t.path}`;return t.port&&t.port!==80&&t.port!==443&&(i=`${r}://${t.hostname}:${t.port}${t.path}`),typeof t.transformWsUrl==\"function\"&&(i=t.transformWsUrl(i,t,e)),i}function ES(){vg||(vg=!0,kt.onSocketOpen(()=>{ai.socketReady();}),kt.onSocketMessage(t=>{if(typeof t.data==\"string\"){let e=dl.Buffer.from(t.data,\"base64\");as.push(e);}else {let e=new FileReader;e.addEventListener(\"load\",()=>{let r=e.result;r instanceof ArrayBuffer?r=dl.Buffer.from(r):r=dl.Buffer.from(r,\"utf8\"),as.push(r);}),e.readAsArrayBuffer(t.data);}}),kt.onSocketClose(()=>{ai.end(),ai.destroy();}),kt.onSocketError(t=>{ai.destroy(t);}));}var SS=(t,e)=>{if(e.hostname=e.hostname||e.host,!e.hostname)throw new Error(\"Could not determine host. Specify host manually.\");let r=e.protocolId===\"MQIsdp\"&&e.protocolVersion===3?\"mqttv3.1\":\"mqtt\";mS(e);let i=vS(e,t);return kt=e.my,kt.connectSocket({url:i,protocols:r}),as=_S(),ai=new wS.BufferedDuplex(e,as,kt),ES(),ai};pl.default=SS;});var Sg=M((PD,Eg)=>{v();m();_();Eg.exports=function(){throw new Error(\"ws does not work in the browser. Browser clients must use the native WebSocket object\")};});var _l=M(Ui=>{v();m();_();var wl=Ui&&Ui.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Ui,\"__esModule\",{value:!0});var yl=(ye(),X(_e)),Ag=wl(Sg()),AS=wl(ot()),IS=Dt(),Ig=wl(Pi()),bl=os(),Kt=(0, AS.default)(\"mqttjs:ws\"),TS=[\"rejectUnauthorized\",\"ca\",\"cert\",\"key\",\"pfx\",\"passphrase\"];function Tg(t,e){let r=`${t.protocol}://${t.hostname}:${t.port}${t.path}`;return typeof t.transformWsUrl==\"function\"&&(r=t.transformWsUrl(r,t,e)),r}function Rg(t){let e=t;return t.hostname||(e.hostname=\"localhost\"),t.port||(t.protocol===\"wss\"?e.port=443:e.port=80),t.path||(e.path=\"/\"),t.wsOptions||(e.wsOptions={}),!Ig.default&&t.protocol===\"wss\"&&TS.forEach(r=>{Object.prototype.hasOwnProperty.call(t,r)&&!Object.prototype.hasOwnProperty.call(t.wsOptions,r)&&(e.wsOptions[r]=t[r]);}),e}function RS(t){let e=Rg(t);if(e.hostname||(e.hostname=e.host),!e.hostname){if(typeof document>\"u\")throw new Error(\"Could not determine host. Specify host manually.\");let r=new URL(document.URL);e.hostname=r.hostname,e.port||(e.port=Number(r.port));}return e.objectMode===void 0&&(e.objectMode=!(e.binary===!0||e.binary===void 0)),e}function CS(t,e,r){Kt(\"createWebSocket\"),Kt(`protocol: ${r.protocolId} ${r.protocolVersion}`);let i=r.protocolId===\"MQIsdp\"&&r.protocolVersion===3?\"mqttv3.1\":\"mqtt\";Kt(`creating new Websocket for url: ${e} and protocol: ${i}`);let n;return r.createWebsocket?n=r.createWebsocket(e,[i],r):n=new Ag.default(e,[i],r.wsOptions),n}function BS(t,e){let r=e.protocolId===\"MQIsdp\"&&e.protocolVersion===3?\"mqttv3.1\":\"mqtt\",i=Tg(e,t),n;return e.createWebsocket?n=e.createWebsocket(i,[r],e):n=new WebSocket(i,[r]),n.binaryType=\"arraybuffer\",n}var PS=(t,e)=>{Kt(\"streamBuilder\");let r=Rg(e),i=Tg(r,t),n=CS(t,i,r),o=Ag.default.createWebSocketStream(n,r.wsOptions);return o.url=i,n.on(\"close\",()=>{o.destroy();}),o},OS=(t,e)=>{Kt(\"browserStreamBuilder\");let r,n=RS(e).browserBufferSize||1024*512,o=e.browserBufferTimeout||1e3,s=!e.objectMode,a=BS(t,e),u=h(e,E,S);e.objectMode||(u._writev=bl.writev.bind(u)),u.on(\"close\",()=>{a.close();});let c=typeof a.addEventListener<\"u\";a.readyState===a.OPEN?(r=u,r.socket=a):(r=new bl.BufferedDuplex(e,u,a),c?a.addEventListener(\"open\",d):a.onopen=d),c?(a.addEventListener(\"close\",g),a.addEventListener(\"error\",y),a.addEventListener(\"message\",w)):(a.onclose=g,a.onerror=y,a.onmessage=w);function h(I,C,R){let U=new IS.Transform({objectMode:I.objectMode});return U._write=C,U._flush=R,U}function d(){Kt(\"WebSocket onOpen\"),r instanceof bl.BufferedDuplex&&r.socketReady();}function g(I){Kt(\"WebSocket onClose\",I),r.end(),r.destroy();}function y(I){Kt(\"WebSocket onError\",I);let C=new Error(\"WebSocket error\");C.event=I,r.destroy(C);}function w(I){let{data:C}=I;C instanceof ArrayBuffer?C=yl.Buffer.from(C):C=yl.Buffer.from(C,\"utf8\"),u.push(C);}function E(I,C,R){if(a.bufferedAmount>n){setTimeout(E,o,I,C,R);return}s&&typeof I==\"string\"&&(I=yl.Buffer.from(I,\"utf8\"));try{a.send(I);}catch(U){return R(U)}R();}function S(I){a.close(),I();}return r};Ui.default=Ig.default?OS:PS;});var Pg=M(Rr=>{v();m();_();var ls=Rr&&Rr.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Rr,\"__esModule\",{value:!0});Rr.connectAsync=void 0;var kS=ls(ot()),xS=ls((pg(),X(dg))),MS=ls(ns()),LS=ls(Pi()),Cg=(0, kS.default)(\"mqttjs\"),Re={};LS.default?(Re.wx=hl().default,Re.wxs=hl().default,Re.ali=gl().default,Re.alis=gl().default):(Re.mqtt=ol().default,Re.tcp=ol().default,Re.ssl=ll().default,Re.tls=Re.ssl,Re.mqtts=ll().default);Re.ws=_l().default;Re.wss=_l().default;function US(t){let e;t.auth&&(e=t.auth.match(/^(.+):(.+)$/),e?(t.username=e[1],t.password=e[2]):t.username=t.auth);}function Bg(t,e){if(Cg(\"connecting to an MQTT broker...\"),typeof t==\"object\"&&!e&&(e=t,t=\"\"),e=e||{},t&&typeof t==\"string\"){let n=xS.default.parse(t,!0);if(n.port!=null&&(n.port=Number(n.port)),e=Object.assign(Object.assign({},n),e),e.protocol===null)throw new Error(\"Missing protocol\");e.protocol=e.protocol.replace(/:$/,\"\");}if(US(e),e.query&&typeof e.query.clientId==\"string\"&&(e.clientId=e.query.clientId),e.cert&&e.key)if(e.protocol){if([\"mqtts\",\"wss\",\"wxs\",\"alis\"].indexOf(e.protocol)===-1)switch(e.protocol){case\"mqtt\":e.protocol=\"mqtts\";break;case\"ws\":e.protocol=\"wss\";break;case\"wx\":e.protocol=\"wxs\";break;case\"ali\":e.protocol=\"alis\";break;default:throw new Error(`Unknown protocol for secure connection: \"${e.protocol}\"!`)}}else throw new Error(\"Missing secure protocol key\");if(!Re[e.protocol]){let n=[\"mqtts\",\"wss\"].indexOf(e.protocol)!==-1;e.protocol=[\"mqtt\",\"mqtts\",\"ws\",\"wss\",\"wx\",\"wxs\",\"ali\",\"alis\"].filter((o,s)=>n&&s%2===0?!1:typeof Re[o]==\"function\")[0];}if(e.clean===!1&&!e.clientId)throw new Error(\"Missing clientId for unclean clients\");e.protocol&&(e.defaultProtocol=e.protocol);function r(n){return e.servers&&((!n._reconnectCount||n._reconnectCount===e.servers.length)&&(n._reconnectCount=0),e.host=e.servers[n._reconnectCount].host,e.port=e.servers[n._reconnectCount].port,e.protocol=e.servers[n._reconnectCount].protocol?e.servers[n._reconnectCount].protocol:e.defaultProtocol,e.hostname=e.host,n._reconnectCount++),Cg(\"calling streambuilder for\",e.protocol),Re[e.protocol](n,e)}let i=new MS.default(r,e);return i.on(\"error\",()=>{}),i}function NS(t,e,r=!0){return new Promise((i,n)=>{let o=Bg(t,e),s={connect:u=>{a(),i(o);},end:()=>{a(),i(o);},error:u=>{a(),o.end(),n(u);}};r===!1&&(s.close=()=>{s.error(new Error(\"Couldn't connect to server\"));});function a(){Object.keys(s).forEach(u=>{o.off(u,s[u]);});}Object.keys(s).forEach(u=>{o.on(u,s[u]);});})}Rr.connectAsync=NS;Rr.default=Bg;});var ml=M(G=>{v();m();_();var Og=G&&G.__createBinding||(Object.create?function(t,e,r,i){i===void 0&&(i=r);var n=Object.getOwnPropertyDescriptor(e,r);(!n||(\"get\"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,i,n);}:function(t,e,r,i){i===void 0&&(i=r),t[i]=e[r];}),qS=G&&G.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,\"default\",{enumerable:!0,value:e});}:function(t,e){t.default=e;}),DS=G&&G.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!==\"default\"&&Object.prototype.hasOwnProperty.call(t,r)&&Og(e,t,r);return qS(e,t),e},kg=G&&G.__exportStar||function(t,e){for(var r in t)r!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,r)&&Og(e,t,r);},Ni=G&&G.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(G,\"__esModule\",{value:!0});G.ReasonCodes=G.PingTimer=G.UniqueMessageIdProvider=G.DefaultMessageIdProvider=G.Store=G.MqttClient=G.connectAsync=G.connect=G.Client=void 0;var xg=Ni(ns());G.MqttClient=xg.default;var jS=Ni(Yo());G.DefaultMessageIdProvider=jS.default;var FS=Ni($p());G.UniqueMessageIdProvider=FS.default;var WS=Ni(Zo());G.Store=WS.default;var Mg=DS(Pg());G.connect=Mg.default;Object.defineProperty(G,\"connectAsync\",{enumerable:!0,get:function(){return Mg.connectAsync}});var $S=Ni(Da());G.PingTimer=$S.default;G.Client=xg.default;kg(ns(),G);kg(Jr(),G);var HS=Ai();Object.defineProperty(G,\"ReasonCodes\",{enumerable:!0,get:function(){return HS.ReasonCodes}});});var QS=M(We=>{v();m();_();var Lg=We&&We.__createBinding||(Object.create?function(t,e,r,i){i===void 0&&(i=r);var n=Object.getOwnPropertyDescriptor(e,r);(!n||(\"get\"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,i,n);}:function(t,e,r,i){i===void 0&&(i=r),t[i]=e[r];}),VS=We&&We.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,\"default\",{enumerable:!0,value:e});}:function(t,e){t.default=e;}),zS=We&&We.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!==\"default\"&&Object.prototype.hasOwnProperty.call(t,r)&&Lg(e,t,r);return VS(e,t),e},KS=We&&We.__exportStar||function(t,e){for(var r in t)r!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,r)&&Lg(e,t,r);};Object.defineProperty(We,\"__esModule\",{value:!0});var GS=zS(ml());We.default=GS;KS(ml(),We);});var mqtt = QS();\n/*! Bundled license information:\n\n@jspm/core/nodelibs/browser/buffer.js:\n (*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh *)\n*/\n\nclass CloudInteropAPI {\n connectParams;\n _sessionDetails;\n _mqttClient;\n reconnectRetryLimit = 30;\n reconnectRetries = 0;\n contextListener;\n constructor(connectParams) {\n this.connectParams = connectParams;\n }\n get sessionDetails() {\n return this._sessionDetails;\n }\n get mqttClient() {\n return this._mqttClient;\n }\n async connect(params) {\n const { userId, password, sourceId, platformId } = params;\n let connectResponse;\n try {\n connectResponse = await axios.post(`${this.connectParams.url}/sessions`, {\n userId,\n sourceId,\n platformId\n });\n if (connectResponse.status !== 200) {\n throw new Error(`Failed to connect to Cloud Interop url: ${this.connectParams.url}`);\n }\n const { sessionRootTopic } = connectResponse.data;\n const lastWillPayload = {\n userId,\n sourceId,\n platformId,\n sessionId: connectResponse.data.sessionId\n };\n const clientOptions = {\n clientId: connectResponse.data.sessionId,\n clean: true,\n protocolVersion: 5,\n will: {\n topic: 'interop/lastwill',\n payload: Buffer.from(JSON.stringify(lastWillPayload)),\n qos: 0,\n retain: false\n },\n username: userId,\n password\n };\n this._mqttClient = await mqtt.connectAsync(connectResponse.data.mqttUrl, clientOptions);\n this._sessionDetails = connectResponse.data;\n console.log(`Cloud Interop successfully connected to ${this.connectParams.url}`);\n this._mqttClient.on('error', (error) => {\n console.error(`Cloud Interop Error: ${error}`);\n });\n this._mqttClient.stream.on('error', (error) => {\n console.error(`Cloud Interop Connection Error: ${error}`);\n });\n this._mqttClient.on('reconnect', () => {\n console.warn(`Cloud Interop attempting reconnection...`);\n // Default reconnectPeriod = 30 seconds\n // Attempt reconnection 30 times before ending session\n this.reconnectRetries += 1;\n if (this.reconnectRetries === this.reconnectRetryLimit) {\n console.warn(`Cloud Interop reached max reconnection attempts...`);\n this.disconnect();\n }\n });\n // Does not fire on initial connection, only successful reconnection attempts\n this._mqttClient.on('connect', () => {\n console.log(`Cloud Interop successfully reconnected`);\n this.reconnectRetries = 0;\n });\n this._mqttClient.on('message', (topic, message) => {\n this.handleCommand(topic, message, this._sessionDetails);\n });\n // Subscribe to all context groups\n this._mqttClient.subscribe(`${sessionRootTopic}/context-groups/#`);\n // Listen out for global commands\n this._mqttClient.subscribe(`${sessionRootTopic}/commands`);\n }\n catch (error) {\n console.warn(`Failed to connect to Cloud Interop at ${this.connectParams.url}`, error);\n }\n }\n async disconnect() {\n if (!this._sessionDetails) {\n return;\n }\n try {\n const disconnectResponse = await axios.delete(`${this.connectParams.url}/sessions/${this._sessionDetails.sessionId}`);\n if (disconnectResponse.status !== 200) {\n console.warn(`Cloud Interop disconnection failed`, disconnectResponse);\n }\n }\n catch (error) {\n console.warn(`Cloud Interop error during disconnection`, error);\n }\n finally {\n this._mqttClient?.removeAllListeners();\n this._mqttClient?.end(true);\n this._sessionDetails = undefined;\n this._mqttClient = undefined;\n this.reconnectRetries = 0;\n }\n }\n async setContext(contextGroup, context) {\n if (!this._sessionDetails) {\n return;\n }\n const { userId, sourceId } = this.connectParams;\n const payload = {\n userId,\n sourceId,\n context\n };\n await axios.post(`${this.connectParams.url}/context-groups/${this._sessionDetails.sessionId}/${contextGroup}`, payload);\n }\n addContextListener(callback) {\n this.contextListener = callback;\n }\n startIntentDiscovery(intentName, context) {\n throw new Error('Method not implemented.');\n }\n endIntentDiscovery(discoveryId) {\n throw new Error('Method not implemented.');\n }\n sendIntentDetail(discoveryId, intentDetail) {\n throw new Error('Method not implemented.');\n }\n raiseIntent(targetSession, intentInstanceId, context) {\n throw new Error('Method not implemented.');\n }\n addIntentDetailListener(callback) {\n throw new Error('Method not implemented.');\n }\n handleCommand(topic, message, sessionDetails) {\n if (message.length === 0 || !sessionDetails) {\n // Ignore clean up messages\n return;\n }\n const messageEnvelope = JSON.parse(message.toString());\n if (topic.startsWith(`${sessionDetails.sessionRootTopic}/context-groups/`)) {\n if (messageEnvelope.source.sessionId === sessionDetails.sessionId) {\n return;\n }\n if (this.contextListener) {\n const { channelName: contextGroup, payload: context, source } = messageEnvelope;\n this.contextListener(contextGroup, context, source);\n }\n }\n }\n}\n\nasync function cloudInteropOverride(config) {\n const client = new CloudInteropAPI(config);\n try {\n await client.connect(config);\n }\n catch (err) {\n console.warn(err);\n return (Base) => {\n return class NoOpOverride extends Base {\n constructor() {\n super();\n }\n };\n };\n }\n return (Base) => {\n return class CloudInteropOverride extends Base {\n constructor() {\n super();\n client.addContextListener((contextGroup, context, source) => {\n if (this.getContextGroups()\n .map(({ id }) => id)\n .includes(contextGroup) &&\n client.sessionDetails?.sessionId !== source.sessionId) {\n super.setContextForGroup({ context: context }, contextGroup);\n }\n });\n }\n async setContextForGroup({ context }, contextGroupId) {\n client.setContext(contextGroupId, context);\n super.setContextForGroup({ context }, contextGroupId);\n }\n async cloudReconnect() {\n await client.connect(config);\n }\n get cloudConnectionState() {\n if (client.mqttClient?.connected) {\n return 'connected';\n }\n if (client.mqttClient?.reconnecting) {\n return 'reconnecting';\n }\n return 'disconnected';\n }\n };\n };\n}\n\nexport { cloudInteropOverride };\n","/**\n * Test if a value is a undefined or null.\n * @param value The value to test.\n * @returns True if the value is null or undefined.\n */\nexport function isEmpty(value: unknown): value is null | undefined {\n\t// eslint-disable-next-line no-restricted-syntax\n\treturn value === undefined || value === null;\n}\n\n/**\n * Test if a value is an object.\n * @param value The value to test.\n * @returns True if the value is an object.\n */\nexport function isObject(value: unknown): value is object {\n\t// eslint-disable-next-line no-restricted-syntax\n\treturn value !== undefined && value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\n/**\n * Test if a value is a string.\n * @param value The value to test.\n * @returns True if the value is a string.\n */\nexport function isString(value: unknown): value is string {\n\t// eslint-disable-next-line no-restricted-syntax\n\treturn value !== undefined && value !== null && typeof value === \"string\";\n}\n\n/**\n * Test if a value is a string that is not empty.\n * @param value The value to test.\n * @returns True if the value is a string that is not empty.\n */\nexport function isStringValue(value: unknown): value is string {\n\treturn isString(value) && value.trim().length > 0;\n}\n\n/**\n * Test if a value is a number.\n * @param value The value to test.\n * @returns True if the value is a number.\n */\nexport function isNumber(value: unknown): value is number {\n\t// eslint-disable-next-line no-restricted-syntax\n\treturn value !== undefined && value !== null && typeof value === \"number\";\n}\n\n/**\n * Test if a value is a number with a real value i.e. not NaN or Infinite.\n * @param value The value to test.\n * @returns True if the value is a number.\n */\nexport function isNumberValue(value: unknown): value is number {\n\treturn isNumber(value) && !Number.isNaN(value) && Number.isFinite(value);\n}\n\n/**\n * Test if a value is a boolean.\n * @param value The value to test.\n * @returns True if the value is a boolean.\n */\nexport function isBoolean(value: unknown): value is boolean {\n\t// eslint-disable-next-line no-restricted-syntax\n\treturn value !== undefined && value !== null && typeof value === \"boolean\";\n}\n\n/**\n * Test if a value is an integer.\n * @param value The value to test.\n * @returns True if the value is an integer.\n */\nexport function isInteger(value: unknown): value is number {\n\treturn isNumber(value) && Number.isInteger(value);\n}\n\n/**\n * Deep clone an object.\n * @param obj The object to clone.\n * @returns The clone of the object.\n */\nexport function objectClone(obj: T): T {\n\t// eslint-disable-next-line no-restricted-syntax\n\treturn obj === undefined ? undefined : JSON.parse(JSON.stringify(obj));\n}\n\n/**\n * Do a deep comparison of the objects.\n * @param obj1 The first object to compare.\n * @param obj2 The second object to compare.\n * @param matchPropertyOrder If true the properties must be in the same order.\n * @returns True if the objects are the same.\n */\nexport function deepEqual(obj1: unknown, obj2: unknown, matchPropertyOrder: boolean = true): boolean {\n\tif (isObject(obj1) && isObject(obj2)) {\n\t\tconst objKeys1 = Object.keys(obj1);\n\t\tconst objKeys2 = Object.keys(obj2);\n\n\t\tif (objKeys1.length !== objKeys2.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (matchPropertyOrder && JSON.stringify(objKeys1) !== JSON.stringify(objKeys2)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tfor (const key of objKeys1) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\tconst value1 = (obj1 as any)[key];\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\tconst value2 = (obj2 as any)[key];\n\n\t\t\tif (!deepEqual(value1, value2, matchPropertyOrder)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t} else if (Array.isArray(obj1) && Array.isArray(obj2)) {\n\t\tif (obj1.length !== obj2.length) {\n\t\t\treturn false;\n\t\t}\n\t\tfor (let i = 0; i < obj1.length; i++) {\n\t\t\tif (!deepEqual(obj1[i], obj2[i], matchPropertyOrder)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn JSON.stringify(obj1) === JSON.stringify(obj2);\n}\n\n/**\n * Deep merge two objects.\n * @param target The object to be merged into.\n * @param sources The objects to merge into the target.\n * @returns The merged object.\n */\nexport function deepMerge(target: T, ...sources: T[]): T {\n\tif (!Array.isArray(sources) || sources.length === 0) {\n\t\treturn target;\n\t}\n\n\tconst targetAsMap = target as { [id: string]: unknown };\n\tconst source = sources.shift();\n\n\tlet keys;\n\tif (isObject(targetAsMap) && isObject(source)) {\n\t\tkeys = Object.keys(source);\n\t} else if (Array.isArray(source)) {\n\t\tif (!Array.isArray(target)) {\n\t\t\treturn source;\n\t\t}\n\t\tkeys = Object.keys(source).map((k) => Number.parseInt(k, 10));\n\t}\n\n\tif (keys) {\n\t\tconst sourceAsMap = source as { [id: string]: unknown };\n\t\tfor (const key of keys) {\n\t\t\tconst value = sourceAsMap[key];\n\t\t\tif (isObject(value)) {\n\t\t\t\tif (isEmpty(targetAsMap[key])) {\n\t\t\t\t\ttargetAsMap[key] = {};\n\t\t\t\t}\n\t\t\t\tdeepMerge(targetAsMap[key], value);\n\t\t\t} else if (Array.isArray(value)) {\n\t\t\t\tif (isEmpty(targetAsMap[key])) {\n\t\t\t\t\ttargetAsMap[key] = [];\n\t\t\t\t}\n\t\t\t\tdeepMerge(targetAsMap[key], value);\n\t\t\t} else {\n\t\t\t\ttargetAsMap[key] = value;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn deepMerge(target, ...sources);\n}\n\n/**\n * Polyfills randomUUID if running in a non-secure context.\n * @returns The random UUID.\n */\nexport function randomUUID(): string {\n\tif (\"randomUUID\" in globalThis.crypto) {\n\t\t// eslint-disable-next-line no-restricted-syntax\n\t\treturn globalThis.crypto.randomUUID();\n\t}\n\t// Polyfill the window.crypto.randomUUID if we are running in a non secure context that doesn't have it\n\t// we are still using window.crypto.getRandomValues which is always available\n\t// https://stackoverflow.com/a/2117523/2800218\n\t/**\n\t * Get random hex value.\n\t * @param c The number to base the random value on.\n\t * @returns The random value.\n\t */\n\tfunction getRandomHex(c: string): string {\n\t\t// eslint-disable-next-line no-bitwise\n\t\tconst rnd = globalThis.crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (Number(c) / 4));\n\t\treturn (\n\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t(Number(c) ^ rnd).toString(16)\n\t\t);\n\t}\n\treturn \"10000000-1000-4000-8000-100000000000\".replace(/[018]/g, getRandomHex);\n}\n\n/**\n * Format an error to a readable string.\n * @param err The error to format.\n * @returns The formatted error.\n */\nexport function formatError(err: unknown): string {\n\tif (isEmpty(err)) {\n\t\treturn \"\";\n\t} else if (err instanceof Error) {\n\t\treturn err.message;\n\t} else if (isStringValue(err)) {\n\t\treturn err;\n\t} else if (isObject(err) && \"message\" in err && isString(err.message)) {\n\t\treturn err.message;\n\t}\n\treturn JSON.stringify(err);\n}\n\n/**\n * A basic string sanitize function that removes angle brackets <> from a string.\n * @param content the content to sanitize\n * @returns a string without angle brackets <>\n */\nexport function sanitizeString(content: unknown): string {\n\tif (isStringValue(content)) {\n\t\treturn content\n\t\t\t.replace(/<[^>]*>?/gm, \"\")\n\t\t\t.replace(/>/g, \">\")\n\t\t\t.replace(/</g, \"<\")\n\t\t\t.replace(/&/g, \"&\")\n\t\t\t.replace(/ /g, \" \")\n\t\t\t.replace(/\\n\\s*\\n/g, \"\\n\");\n\t}\n\treturn \"\";\n}\n\n/**\n * Get the command line arguments from a command line string.\n * Examples of command line strings: arg1 key1=value1 key2=\"value with spaces\" key3='value3' key4='value with more spaces'`.\n * @param commandLine The command line string.\n * @returns The command line arguments or an empty array if none\n */\nexport function getCommandLineArgs(commandLine: string): string[] {\n\tif (!isStringValue(commandLine)) {\n\t\treturn [];\n\t}\n\tconst matches = commandLine.match(/(\\w+=)?(\"[^\"]*\"|'[^']*'|[^ ]+)/g);\n\tif (isEmpty(matches)) {\n\t\treturn [];\n\t}\n\treturn matches;\n}\n","import type { ModuleImplementation, ModuleTypes } from \"workspace-platform-starter/shapes/module-shapes\";\nimport { OpenFinCloudInterop } from \"./interop-override\";\n\n/**\n * Define the entry points for the module.\n */\nexport const entryPoints: { [type in ModuleTypes]?: ModuleImplementation } = {\n\tinteropOverride: new OpenFinCloudInterop()\n};\n","// eslint-disable-next-line max-classes-per-file\nimport { cloudInteropOverride } from \"@openfin/cloud-interop\";\nimport type OpenFin from \"@openfin/core\";\nimport type {\n\tPlatformInteropOverride,\n\tPlatformInteropOverrideOptions,\n\tPlatformInteropBrokerHelpers\n} from \"workspace-platform-starter/shapes/interopbroker-shapes\";\nimport type { Logger, LoggerCreator } from \"workspace-platform-starter/shapes/logger-shapes\";\nimport type { ModuleDefinition } from \"workspace-platform-starter/shapes/module-shapes\";\nimport { isStringValue } from \"workspace-platform-starter/utils\";\nimport type { OpenFinCloudInteropOptions } from \"./shapes\";\n\n/**\n * Implementation for the openfin cloud interop interop override.\n */\nexport class OpenFinCloudInterop implements PlatformInteropOverride {\n\t/**\n\t * The module definition including settings.\n\t * @internal\n\t */\n\tprivate _definition: ModuleDefinition | undefined;\n\n\t/**\n\t * The logger for displaying information from the module.\n\t * @internal\n\t */\n\tprivate _logger?: Logger;\n\n\t/**\n\t * Helper methods for the module.\n\t * @internal\n\t */\n\tprivate _helpers: PlatformInteropBrokerHelpers | undefined;\n\n\t/**\n\t * Initialize the module.\n\t * @param definition The definition of the module from configuration include custom options.\n\t * @param loggerCreator For logging entries.\n\t * @param helpers Helper methods for the module to interact with the application core.\n\t * @returns Nothing.\n\t */\n\tpublic async initialize(\n\t\tdefinition: ModuleDefinition,\n\t\tloggerCreator: LoggerCreator,\n\t\thelpers: PlatformInteropBrokerHelpers\n\t): Promise {\n\t\tthis._definition = definition;\n\t\tconst loggerName = definition.data?.loggerName ?? \"OpenfinCloudInterop\";\n\t\tthis._logger = loggerCreator(loggerName);\n\t\tthis._helpers = helpers;\n\n\t\tthis._logger.info(\"Initializing\");\n\t}\n\n\t/**\n\t * Close down any resources being used by the module.\n\t * @returns Nothing.\n\t */\n\tpublic async closedown(): Promise {\n\t\tthis._logger?.info(\"Closedown\");\n\t}\n\n\t/**\n\t * Get the override constructor for the interop broker (useful if you wish this implementation to be layered with other implementations and passed to the platform's initialization object as part of an array).\n\t * @param options The options for the interop broker defined as part of the platform.\n\t * @returns The override constructor to be used in an array.\n\t */\n\tpublic async getConstructorOverride(\n\t\toptions: PlatformInteropOverrideOptions\n\t): Promise> {\n\t\tif (\n\t\t\t!isStringValue(this._definition?.data?.userId) ||\n\t\t\t!isStringValue(this._definition?.data?.password) ||\n\t\t\t!isStringValue(this._definition?.data?.platformId) ||\n\t\t\t!isStringValue(this._definition?.data?.url)\n\t\t) {\n\t\t\tconst errorMessage = `The data setting for the interopOverride module ${this._definition?.id} is missing one of the following settings: userId, password, platformId, url.`;\n\t\t\tthis._logger?.error(errorMessage);\n\t\t\tthrow new Error(errorMessage);\n\t\t}\n\t\tconst cloudConfig: OpenFinCloudInteropOptions = {\n\t\t\tuserId: this._definition?.data?.userId,\n\t\t\tpassword: this._definition?.data?.password,\n\t\t\tplatformId: this._definition?.data?.platformId,\n\t\t\turl: this._definition?.data?.url,\n\t\t\trealm: this._definition?.data?.realm,\n\t\t\tsourceDisplayName: this._definition.data.sourceDisplayName,\n\t\t\tsourceId: isStringValue(this._definition?.data?.sourceId)\n\t\t\t\t? this._definition?.data?.sourceId\n\t\t\t\t: fin.me.identity.uuid\n\t\t};\n\t\tconst initializedCloudInteropOverride = (await cloudInteropOverride(\n\t\t\tcloudConfig\n\t\t)) as unknown as OpenFin.ConstructorOverride;\n\t\treturn initializedCloudInteropOverride;\n\t}\n}\n"],"names":["exports","byteLength","b64","lens","getLens","validLen","placeHoldersLen","toByteArray","tmp","i","arr","Arr","_byteLength","curByte","len","revLookup","charCodeAt","fromByteArray","uint8","length","extraBytes","parts","maxChunkLength","len2","push","encodeChunk","lookup","join","Uint8Array","Array","code","Error","indexOf","start","end","num","output","base64","ieee754","isArray","kMaxLength","Buffer","TYPED_ARRAY_SUPPORT","createBuffer","that","RangeError","__proto__","prototype","arg","encodingOrOffset","this","allocUnsafe","from","value","TypeError","ArrayBuffer","array","byteOffset","undefined","fromArrayLike","fromArrayBuffer","string","encoding","isEncoding","actual","write","slice","fromString","obj","isBuffer","checked","copy","buffer","val","type","data","fromObject","assertSize","size","toString","isView","loweredCase","utf8ToBytes","base64ToBytes","toLowerCase","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","b","n","m","bidirectionalIndexOf","dir","isNaN","arrayIndexOf","call","lastIndexOf","indexSize","arrLength","valLength","String","read","buf","readUInt16BE","foundIndex","found","j","hexWrite","offset","Number","remaining","strLen","parsed","parseInt","substr","utf8Write","blitBuffer","asciiWrite","str","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","units","c","hi","lo","utf16leToBytes","Math","min","res","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","MAX_ARGUMENTS_LENGTH","fromCharCode","apply","decodeCodePointsArray","g","foo","subarray","e","typedArraySupport","poolSize","_augment","Symbol","species","Object","defineProperty","configurable","alloc","fill","allocUnsafeSlow","_isBuffer","compare","a","x","y","concat","list","pos","swap16","swap32","swap64","arguments","equals","inspect","max","match","target","thisStart","thisEnd","thisCopy","targetCopy","includes","isFinite","toJSON","_arr","ret","out","bytes","checkOffset","ext","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","pow","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","floor","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","set","INVALID_BASE64_RE","Infinity","leadSurrogate","trim","replace","stringtrim","base64clean","src","dst","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","d","s","NaN","rt","abs","log","LN2","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","amdO","definition","key","o","enumerable","get","globalThis","Function","window","prop","hasOwnProperty","bind","fn","thisArg","getPrototypeOf","kindOf","cache","create","thing","kindOfTest","typeOfTest","isUndefined","isArrayBuffer","isString","isFunction","isNumber","isObject","isPlainObject","toStringTag","iterator","isDate","isFile","isBlob","isFileList","isURLSearchParams","forEach","allOwnKeys","l","keys","getOwnPropertyNames","findKey","_key","_global","self","isContextDefined","context","isTypedArray","TypedArray","isHTMLForm","isRegExp","reduceDescriptors","reducer","descriptors","getOwnPropertyDescriptors","reducedDescriptors","descriptor","name","defineProperties","ALPHA","DIGIT","ALPHABET","ALPHA_DIGIT","toUpperCase","isAsyncFn","utils$1","constructor","isFormData","kind","FormData","append","isArrayBufferView","result","isBoolean","isStream","pipe","merge","caseless","assignValue","targetKey","extend","stripBOM","content","inherits","superConstructor","props","assign","toFlatObject","sourceObj","destObj","filter","propFilter","merged","endsWith","searchString","position","lastIndex","toArray","forEachEntry","next","done","pair","matchAll","regExp","matches","exec","hasOwnProp","freezeMethods","writable","toObjectSet","arrayOrString","delimiter","define","split","toCamelCase","p1","p2","noop","toFiniteNumber","defaultValue","global","generateString","alphabet","random","isSpecCompliantForm","toJSONObject","stack","visit","source","reducedValue","isThenable","then","catch","AxiosError","message","config","request","response","captureStackTrace","description","number","fileName","lineNumber","columnNumber","status","prototype$1","isVisitable","removeBrackets","renderKey","path","dots","map","token","error","customProps","axiosError","cause","predicates","test","toFormData","formData","options","metaTokens","indexes","option","visitor","defaultVisitor","useBlob","Blob","convertValue","toISOString","JSON","stringify","some","isFlatArray","el","index","exposedHelpers","build","pop","encode$1","charMap","encodeURIComponent","AxiosURLSearchParams","params","_pairs","encode","buildURL","url","_encode","serializeFn","serialize","serializedParams","hashmarkIndex","encoder","InterceptorManager","handlers","use","fulfilled","rejected","synchronous","runWhen","eject","id","clear","h","transitionalDefaults","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","platform$1","isBrowser","classes","URLSearchParams","protocols","hasBrowserEnv","document","hasStandardBrowserEnv","product","navigator","hasStandardBrowserWebWorkerEnv","WorkerGlobalScope","importScripts","platform","freeze","formDataToJSON","buildPath","isNumericKey","isLast","arrayToObject","entries","parsePropPath","defaults","transitional","adapter","transformRequest","headers","contentType","getContentType","hasJSONContentType","isObjectPayload","setContentType","helpers","isNode","toURLEncodedForm","formSerializer","_FormData","env","rawValue","parse","stringifySafely","transformResponse","JSONRequested","responseType","strictJSONParsing","ERR_BAD_RESPONSE","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","common","method","defaults$1","ignoreDuplicateOf","$internals","normalizeHeader","header","normalizeValue","matchHeaderValue","isHeaderNameFilter","AxiosHeaders","valueOrRewrite","rewrite","setHeader","_value","_header","_rewrite","lHeader","setHeaders","rawHeaders","line","substring","parseHeaders","parser","tokens","tokensRE","parseTokens","has","matcher","deleted","deleteHeader","normalize","format","normalized","w","char","formatHeader","targets","asStrings","first","computed","accessor","accessors","defineAccessor","accessorName","methodName","arg1","arg2","arg3","buildAccessors","mapped","headerValue","AxiosHeaders$1","transformData","fns","isCancel","__CANCEL__","CanceledError","ERR_CANCELED","cookies","expires","domain","secure","cookie","Date","toGMTString","RegExp","decodeURIComponent","remove","now","buildFullPath","baseURL","requestedURL","relativeURL","combineURLs","isURLSameOrigin","msie","userAgent","urlParsingNode","createElement","originURL","resolveURL","href","setAttribute","protocol","host","search","hash","hostname","port","pathname","charAt","location","requestURL","progressEventReducer","listener","isDownloadStream","bytesNotified","_speedometer","samplesCount","timestamps","firstSampleTS","head","tail","chunkLength","startedAt","bytesCount","passed","round","speedometer","loaded","total","lengthComputable","progressBytes","rate","progress","estimated","event","knownAdapters","http","xhr","XMLHttpRequest","Promise","resolve","reject","requestData","requestHeaders","onCanceled","withXSRFToken","cancelToken","unsubscribe","signal","removeEventListener","Boolean","auth","username","password","unescape","btoa","fullPath","onloadend","responseHeaders","getAllResponseHeaders","ERR_BAD_REQUEST","settle","err","responseText","statusText","open","paramsSerializer","onreadystatechange","readyState","responseURL","setTimeout","onabort","ECONNABORTED","onerror","ERR_NETWORK","ontimeout","timeoutErrorMessage","ETIMEDOUT","xsrfValue","setRequestHeader","withCredentials","onDownloadProgress","addEventListener","onUploadProgress","upload","cancel","abort","subscribe","aborted","parseProtocol","send","renderReason","reason","isResolvedHandle","adapters","nameOrAdapter","rejectedReasons","reasons","state","throwIfCancellationRequested","throwIfRequested","dispatchRequest","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","timeoutMessage","decompress","beforeRedirect","transport","httpAgent","httpsAgent","socketPath","responseEncoding","configValue","validators$1","deprecatedWarnings","validator","version","formatMessage","opt","desc","opts","ERR_DEPRECATED","console","warn","assertOptions","schema","allowUnknown","ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","validators","Axios","instanceConfig","interceptors","configOrUrl","_request","dummy","boolean","function","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","interceptor","unshift","responseInterceptorChain","promise","chain","newConfig","onFulfilled","onRejected","getUri","generateHTTPMethod","isForm","Axios$1","CancelToken","executor","resolvePromise","_listeners","onfulfilled","_resolve","splice","CancelToken$1","HttpStatusCode","Continue","SwitchingProtocols","Processing","EarlyHints","Ok","Created","Accepted","NonAuthoritativeInformation","NoContent","ResetContent","PartialContent","MultiStatus","AlreadyReported","ImUsed","MultipleChoices","MovedPermanently","Found","SeeOther","NotModified","UseProxy","Unused","TemporaryRedirect","PermanentRedirect","BadRequest","Unauthorized","PaymentRequired","Forbidden","NotFound","MethodNotAllowed","NotAcceptable","ProxyAuthenticationRequired","RequestTimeout","Conflict","Gone","LengthRequired","PreconditionFailed","PayloadTooLarge","UriTooLong","UnsupportedMediaType","RangeNotSatisfiable","ExpectationFailed","ImATeapot","MisdirectedRequest","UnprocessableEntity","Locked","FailedDependency","TooEarly","UpgradeRequired","PreconditionRequired","TooManyRequests","RequestHeaderFieldsTooLarge","UnavailableForLegalReasons","InternalServerError","NotImplemented","BadGateway","ServiceUnavailable","GatewayTimeout","HttpVersionNotSupported","VariantAlsoNegotiates","InsufficientStorage","LoopDetected","NotExtended","NetworkAuthenticationRequired","HttpStatusCode$1","axios","createInstance","defaultConfig","instance","VERSION","Cancel","all","promises","spread","callback","isAxiosError","payload","formToJSON","getAdapter","default","B","ds","zg","getOwnPropertyDescriptor","Kg","Gg","we","t","M","Qt","r","X","Qg","_","deviceMemory","hardwareConcurrency","language","P","ys","Yg","xr","Yt","yt","Di","Bl","run","clearTimeout","Pl","Ol","fun","ve","Gl","Xl","Zl","eu","uu","du","Pu","Mt","ji","gs","bt","$u","Wu","_debugEnd","yu","_debugProcess","gu","_events","ku","_eventsCount","xu","_exiting","Yl","_fatalExceptions","cu","_getActiveHandles","_getActiveRequests","_kill","ru","_linkedBinding","_maxListeners","Ou","_preload_modules","Cu","_rawDebug","zl","_startProfilerIdleNotifier","bu","_stopProfilerIdleNotifier","wu","_tickCallback","pu","Eu","addListener","Mu","allowedNodeEnvironmentFlags","lu","arch","xl","argv","Ul","argv0","Ru","assert","binding","Fl","chdir","Hl","Jl","cpuUsage","Fi","cwd","$l","debugPort","Tu","dlopen","Ql","emit","Du","emitWarning","jl","Ll","execArgv","Nl","execPath","Iu","exit","ou","features","fu","hasUncaughtExceptionCaptureCallback","hrtime","kill","su","listeners","memoryUsage","nu","moduleLoadList","Kl","nextTick","off","Uu","on","once","Lu","openStdin","au","pid","Su","Ml","ppid","Au","prependListener","ju","prependOnceListener","Fu","reallyExit","tu","release","Vl","removeAllListeners","qu","removeListener","Nu","resourceUsage","iu","setSourceMapsEnabled","Bu","setUncaughtExceptionCaptureCallback","hu","stderr","mu","stdin","vu","stdout","_u","title","kl","umask","Wl","uptime","ql","versions","Dl","ps","Hu","v","PATH","LANG","PWD","HOME","TMP","sourceUrl","headersUrl","libUrl","inspector","debug","uv","ipv6","tls_alpn","tls_sni","tls_ocsp","tls","cached_builtins","performance","timing","navigationStart","bigint","BigInt","_e","Zg","Ku","Jt","Vu","ui","E","S","N","I","C","u","R","U","Jg","zu","Wi","for","SlowBuffer","p","INSPECT_MAX_BYTES","setPrototypeOf","f","A","Ye","SharedArrayBuffer","valueOf","hs","toPrimitive","cs","Cl","Ng","Cr","us","Ug","pe","qg","W","te","T","O","$","se","oe","J","K","z","qi","Q","Wg","de","Gt","$g","Br","Pr","toLocaleString","Hg","ge","Ce","vl","Rl","El","Sl","Al","Il","readUintLE","readUintBE","readUint8","readUint16LE","readUint16BE","readUint32LE","readUint32BE","readBigUInt64LE","xt","kr","li","readBigUInt64BE","readBigInt64LE","readBigInt64BE","writeUintLE","writeUintBE","writeUint8","writeUint16LE","writeUint16BE","writeUint32LE","writeUint32BE","writeBigUInt64LE","writeBigUInt64BE","writeBigInt64LE","writeBigInt64BE","copyWithin","Or","fs","super","Tl","ERR_OUT_OF_RANGE","Dg","ERR_INVALID_ARG_TYPE","ERR_BUFFER_OUT_OF_BOUNDS","isInteger","jg","Fg","Vg","ey","Lt","ty","ye","Gu","ws","aliasToTopic","put","getTopicByAlias","ce","PA","Qu","ArrayIsArray","ArrayPrototypeIncludes","ArrayPrototypeIndexOf","ArrayPrototypeJoin","ArrayPrototypeMap","ArrayPrototypePop","ArrayPrototypePush","ArrayPrototypeSlice","FunctionPrototypeCall","FunctionPrototypeSymbolHasInstance","hasInstance","MathFloor","NumberIsInteger","NumberIsNaN","NumberMAX_SAFE_INTEGER","MAX_SAFE_INTEGER","NumberMIN_SAFE_INTEGER","MIN_SAFE_INTEGER","NumberParseInt","ObjectDefineProperties","ObjectDefineProperty","ObjectGetOwnPropertyDescriptor","ObjectKeys","ObjectSetPrototypeOf","PromisePrototypeCatch","PromisePrototypeThen","PromiseReject","ReflectApply","Reflect","RegExpPrototypeTest","SafeSet","Set","StringPrototypeSlice","StringPrototypeToLowerCase","StringPrototypeToUpperCase","StringPrototypeTrim","SymbolFor","SymbolAsyncIterator","asyncIterator","SymbolHasInstance","SymbolIterator","TypedArrayPrototypeSet","Je","jA","ms","ry","iy","async","Yu","ny","_s","errors","AggregateError","kEmptyObject","createDeferredPromise","promisify","debuglog","shift","toFixed","is","types","isAsyncFunction","custom","Hi","YA","$i","AbortController","Ju","AbortSignal","sy","Se","oI","ef","oy","Vi","ay","ly","uy","fy","cy","zi","Xt","ERR_INTERNAL_ASSERTION","Xu","me","dy","Zu","vs","depth","colors","AbortError","aggregateTwoErrors","hideStackFrames","codes","fi","yI","ff","Ss","sf","of","gy","As","yy","by","wy","_y","ObjectPrototypeHasOwnProperty","my","RegExpPrototypeExec","af","vy","Ey","Sy","Ue","ERR_SOCKET_BAD_PORT","Ay","Ae","ERR_INVALID_ARG_VALUE","Mr","Zt","ERR_UNKNOWN_SIGNAL","tf","normalizeEncoding","Iy","Ty","Ry","rf","Py","xy","My","lf","Is","Uy","uf","Es","Ny","qy","Ts","Wy","Vy","zy","Ky","Gy","Yy","nf","isInt32","isUint32","parseFileMode","validateArray","validateStringArray","validateBooleanArray","validateBoolean","validateBuffer","validateDictionary","validateEncoding","validateFunction","validateInt32","validateInteger","validateNumber","validateObject","validateOneOf","validatePlainFunction","validatePort","validateSignalName","validateString","validateUint32","validateUndefined","validateUnion","validateAbortSignal","validateLinkHeaderValue","Ut","TI","pf","Xe","Ze","ae","Rs","Cs","cf","er","wt","Lr","Ki","Zy","hf","Xy","df","_t","browser","tt","UI","Pf","Gi","gf","yf","bf","wf","_f","Bs","mf","eb","tb","Qi","pause","resume","_writableState","_readableState","readable","Yi","et","vf","pipeThrough","getReader","Ef","getWriter","Sf","Ji","destroyed","Af","writableEnded","errored","ended","If","endEmitted","Tf","Rf","Cf","_closed","_defaultKeepAlive","_removedConnection","_removedContLen","Bf","_sent100","kDestroyed","isDisturbed","readableDidRead","readableAborted","kIsDisturbed","isErrored","readableErrored","writableErrored","errorEmitted","kIsErrored","isReadable","kIsReadable","kIsClosedPromise","kControllerErrorFunction","isClosed","closed","isDestroyed","isDuplexNodeStream","isFinished","isIterable","isReadableNodeStream","isReadableStream","isReadableEnded","readableEnded","isReadableFinished","isReadableErrored","isNodeStream","isWebStream","isWritable","isWritableNodeStream","isWritableStream","isWritableEnded","isWritableFinished","writableFinished","finished","isWritableErrored","isServerRequest","_consuming","_dumped","req","upgradeOrConnect","isServerResponse","willEmitClose","autoDestroy","emitClose","isTransformStream","mt","zI","Ms","Nt","Df","gb","yb","ERR_STREAM_PREMATURE_CLOSE","Of","Os","ks","bb","wb","_b","mb","vb","Eb","Sb","kf","Ps","Ab","xf","Mf","Lf","Uf","Ib","Nf","qf","Tb","Rb","Cb","xs","jf","Pb","Bb","cleanup","tr","rT","Gf","kb","ERR_MULTIPLE_CALLBACK","xb","Mb","$f","Lb","Ub","Nb","qb","Hf","Ls","Vf","Ff","jb","zf","_destroy","Us","closeEmitted","Ns","destroy","$b","constructed","Hb","_construct","Wf","Kf","Vb","construct","listenerCount","destroyer","socket","close","undestroy","reading","finalCalled","prefinished","ending","errorOrDestroy","Y","init","Xi","nc","defaultMaxListeners","Xf","newListener","warned","emitter","count","Kb","fired","wrapFn","Zf","ec","sc","tc","rc","ic","Ur","Qf","Yf","Jf","Be","qs","ownKeys","getOwnPropertySymbols","EventEmitter","setMaxListeners","getMaxListeners","rawListeners","eventNames","rr","Gb","Qb","Yb","Jb","Xb","Zb","ir","createIterResult","return","tn","xT","ac","ew","oc","Zi","en","Ds","_isStdio","Stream","ci","$T","rn","lc","tw","uc","rw","iw","nw","fc","addAbortSignal","sw","addAbortSignalNoValidate","dc","e2","hc","cc","ow","nn","aw","js","lw","consume","_getString","_getBuffer","customInspect","sn","f2","gc","uw","fw","cw","pc","getHighWaterMark","highWaterMark","hw","objectMode","getDefaultHighWaterMark","wc","pw","$e","vt","k","Hs","Cc","Pc","Fs","Et","mc","Ks","Gs","Bc","Vs","Mc","yw","Iw","kc","Sw","Aw","Ew","Tw","sr","vc","Ec","bw","ww","un","Oc","_w","mw","vw","$s","Cw","be","Pe","xc","Sc","Nr","Ac","Rw","Ic","or","it","zs","Tc","text","Ow","kw","fillLast","Pw","xw","Mw","Lw","Uw","lastNeed","lastTotal","lastChar","Ws","Rc","ke","yc","nr","St","_c","an","ln","ar","Qs","StringDecoder","Lc","Nw","Uc","Ys","F2","jc","Nc","qw","qc","Dc","Dw","jw","ERR_STREAM_NULL_VALUES","Fw","_read","throw","di","J2","Zc","He","$w","Hw","Vw","zw","$c","Kw","Hc","Gw","Qw","Yw","Jw","F","ReadableState","ro","Xw","qt","Zw","Js","e_","t_","H","r_","Dr","i_","n_","Fc","s_","ERR_METHOD_NOT_IMPLEMENTED","o_","a_","ERR_STREAM_PUSH_AFTER_EOF","l_","ERR_STREAM_UNSHIFT_AFTER_END_EVENT","u_","f_","lr","Vc","c_","to","Xs","qr","nt","readableObjectMode","pipes","flowing","sync","needReadable","emittedReadable","readableListening","resumeScheduled","defaultEncoding","awaitDrainWriters","multiAwaitDrain","readingMore","dataEmitted","decoder","zc","_isUint8Array","_uint8ArrayToBuffer","cn","Kc","p_","Zs","Wc","Qc","g_","Gc","b_","__","Yc","wrap","destroyOnReturn","m_","stream","Jc","eo","v_","allowHalfOpen","E_","Xc","_undestroy","captureRejectionSymbol","isPaused","setEncoding","d_","hasUnpiped","needDrain","add","delete","y_","unpipe","writableNeedDrain","w_","readableHighWaterMark","readableBuffer","readableFlowing","readableLength","readableEncoding","pipesCount","paused","_fromList","fromWeb","newStreamReadableFromReadableStream","toWeb","newReadableStreamFromStreamReadable","uo","aR","ch","ur","rh","S_","ih","nh","A_","sh","I_","T_","R_","ie","WritableState","yi","C_","pi","hn","gn","B_","P_","O_","k_","x_","oh","ERR_STREAM_CANNOT_PIPE","M_","ERR_STREAM_DESTROYED","gi","ERR_STREAM_ALREADY_FINISHED","L_","U_","ERR_STREAM_WRITE_AFTER_END","N_","ERR_UNKNOWN_ENCODING","ah","jr","so","Fr","writableObjectMode","decodeStrings","writing","corked","bufferProcessing","onwrite","D_","writecb","writelen","afterWriteTickInfo","pn","pendingcb","buffered","bufferedIndex","allBuffers","allNoop","_write","writev","_writev","final","_final","ao","lh","chunk","q_","eh","th","oo","cb","j_","uh","dn","no","F_","W_","getBuffer","cork","uncork","setDefaultEncoding","writableBuffer","writableHighWaterMark","writableCorked","writableLength","writableAborted","io","$_","fh","newStreamWritableFromWritableStream","newWritableStreamFromStreamWritable","Sh","bR","Eh","fo","H_","V_","z_","hh","K_","dh","ph","G_","gh","vh","Q_","ERR_INVALID_RETURN_VALUE","yh","Wr","Y_","J_","bh","wh","_h","X_","Z_","mh","fr","yn","e0","arrayBuffer","RR","Th","t0","At","r0","Ah","Ve","co","ho","po","Ne","Ih","newStreamDuplexFromReadableWritablePair","newReadableWritablePairFromDuplex","bo","NR","Ch","Rh","i0","It","n0","yo","s0","bi","transform","_transform","flush","_flush","o0","go","_o","KR","Ph","Bh","$r","wo","mn","iC","Lh","So","Ao","wi","a0","l0","u0","_n","f0","c0","Oh","h0","Ro","mo","ERR_MISSING_ARGS","d0","p0","g0","y0","b0","w0","cr","vo","wn","kh","Hr","_0","Eo","m0","v0","xh","Io","S0","bn","To","ready","Mh","I0","pipelineImpl","pipeline","E0","Bo","dC","Fh","T0","vn","R0","En","Uh","Nh","Co","hr","qh","Dh","C0","jh","B0","P0","Qh","SC","ko","Vh","O0","_i","k0","x0","st","dr","M0","pr","L0","U0","N0","q0","D0","j0","F0","W0","$0","H0","Wh","$h","V0","zh","Sn","Hh","An","concurrency","Kh","Oo","Po","Gh","streamReturningOperators","asIndexedPairs","drop","flatMap","take","compose","promiseReturningOperators","every","reduce","find","xo","xC","Yh","rm","im","nm","sm","om","am","lm","Mo","$C","sd","fm","Tt","Zh","ed","td","Jh","Xh","ERR_ILLEGAL_CONSTRUCTOR","rd","cm","hm","nd","Lo","Uo","le","Readable","Writable","Duplex","Transform","PassThrough","dm","Dt","ZC","ue","he","pm","gm","od","uB","qo","super_","ud","_B","ld","ze","ad","ee","_init","_bufs","_new","_offset","_reverseOffset","shallowSlice","trunc","duplicate","_appendBuffer","_isBufferList","_match","isBufferList","fd","BB","In","Do","ym","mi","Ee","_callback","BufferListStream","BufferList","hd","DB","cd","cmd","retain","qos","dup","topic","Fo","QB","dd","L","Oe","requiredHeaderFlags","requiredHeaderFlagsErrors","CMD_SHIFT","CMD_MASK","DUP_MASK","QOS_MASK","QOS_SHIFT","RETAIN_MASK","VARBYTEINT_MASK","VARBYTEINT_FIN_MASK","VARBYTEINT_MAX","SESSIONPRESENT_MASK","SESSIONPRESENT_HEADER","CONNACK_HEADER","connack","USERNAME_MASK","PASSWORD_MASK","WILL_RETAIN_MASK","WILL_QOS_MASK","WILL_QOS_SHIFT","WILL_FLAG_MASK","CLEAN_SESSION_MASK","CONNECT_HEADER","connect","properties","sessionExpiryInterval","willDelayInterval","receiveMaximum","maximumPacketSize","topicAliasMaximum","requestResponseInformation","requestProblemInformation","userProperties","authenticationMethod","authenticationData","payloadFormatIndicator","messageExpiryInterval","responseTopic","correlationData","maximumQoS","retainAvailable","assignedClientIdentifier","reasonString","wildcardSubscriptionAvailable","subscriptionIdentifiersAvailable","sharedSubscriptionAvailable","serverKeepAlive","responseInformation","serverReference","topicAlias","subscriptionIdentifier","propertiesCodes","jt","propertiesTypes","PUBLISH_HEADER","SUBSCRIBE_HEADER","SUBSCRIBE_OPTIONS_QOS_MASK","SUBSCRIBE_OPTIONS_NL_MASK","SUBSCRIBE_OPTIONS_NL_SHIFT","SUBSCRIBE_OPTIONS_RAP_MASK","SUBSCRIBE_OPTIONS_RAP_SHIFT","SUBSCRIBE_OPTIONS_RH_MASK","SUBSCRIBE_OPTIONS_RH_SHIFT","SUBSCRIBE_OPTIONS_RH","SUBSCRIBE_OPTIONS_NL","SUBSCRIBE_OPTIONS_RAP","SUBSCRIBE_OPTIONS_QOS","UNSUBSCRIBE_HEADER","ACKS","unsuback","puback","pubcomp","pubrel","pubrec","SUBACK_HEADER","suback","VERSION3","VERSION4","VERSION5","VERSION131","VERSION132","QOS","EMPTY","pingreq","pingresp","disconnect","MQTT5_PUBACK_PUBREC_CODES","MQTT5_PUBREL_PUBCOMP_CODES","MQTT5_SUBACK_CODES","MQTT5_UNSUBACK_CODES","MQTT5_DISCONNECT_CODES","MQTT5_AUTH_CODES","gd","sP","pd","Vr","zr","Kr","gr","bm","Tn","parseFloat","_m","long","vm","mm","bd","gP","yd","enabled","diff","prev","curr","coerce","formatters","formatArgs","namespace","useColors","color","selectColor","namespaces","disable","names","skips","enable","save","humanize","load","ot","xe","Rn","storage","setItem","removeItem","getItem","DEBUG","process","__nwjs","documentElement","style","WebkitAppearance","firebug","exception","table","$1","localStorage","Rm","Cm","md","MP","_d","Bm","Pm","wd","V","D","settings","_states","_resetState","packet","_list","_stateCounter","_parseHeader","_emitError","_parseLength","_parseVarByteNum","_parsePayload","_pos","_parseConnect","_parseConnack","_parsePublish","_parseConfirmation","_parseSubscribe","_parseSuback","_parseUnsubscribe","_parseUnsuback","_parseDisconnect","_parseAuth","_parseString","protocolId","protocolVersion","bridgeMode","will","clean","keepalive","_parseNum","_parseProperties","clientId","_parseBuffer","sessionPresent","reasonCode","returnCode","_parseMessageId","subscriptions","_parseByte","nl","rap","granted","unsubscriptions","messageId","_parseStringPair","_parse4ByteNum","_parseByType","_newPacket","Ad","HP","Sd","vi","vd","km","Ed","generateCache","generateNumber","genBufVariableByteInt","generate4ByteBuffer","Id","eO","$o","zo","fO","xd","q","Nm","qm","Ei","Dm","qe","Cn","jm","Fm","Ho","Wm","Ie","Vo","Bn","Od","$m","Ft","Pd","kd","De","Gr","yr","Hm","Vm","zm","Si","Km","Gm","Qm","Ym","Jm","Xm","Zm","e1","t1","Td","Rd","Bd","Cd","r1","Ud","mO","Ld","i1","n1","Md","Ko","_array","Nd","Pn","generate","writeToStream","Yo","Qo","nextId","allocate","getLastAllocated","register","deallocate","Dd","YO","qd","Qr","circles","proto","Map","a1","Fd","ok","jd","$d","Yr","Wd","validateTopics","validateTopic","Zo","Xo","u1","f1","c1","_inflights","createStream","del","Vd","ea","Hd","topicAliasRecv","customHandleAcks","_sendPacket","incomingStore","handleMessage","Jr","Wt","applyMixin","ErrorWithReasonCode","ta","Ai","br","ReasonCodes","outgoing","_removeOutgoingAndStoreMessage","messageIdProvider","messageIdToTopic","_resubscribeTopics","_invokeStoreProcessingQueue","disconnecting","Kd","ra","zd","g1","handleAuth","reconnecting","Xd","kn","LRUCache","Ii","Qd","ia","Yd","On","Gd","_onabort","LRU_CACHE_IGNORE_AC_WARNING","$t","Jd","Uint16Array","Uint32Array","Xr","na","heap","static","sa","ttl","ttlResolution","ttlAutopurge","updateAgeOnGet","updateAgeOnHas","allowStale","noDisposeOnSet","noUpdateTTL","maxEntrySize","sizeCalculation","noDeleteOnFetchRejection","noDeleteOnStaleGet","allowStaleOnFetchAbort","allowStaleOnFetchRejection","ignoreFetchAbort","unsafeExposeInternals","starts","ttls","sizes","keyMap","keyList","valList","free","isBackgroundFetch","backgroundFetch","moveToTail","rindexes","isStale","maxSize","calculatedSize","fetchMethod","dispose","disposeAfter","b1","getRemainingTTL","unref","remainingTTL","entrySize","totalCalculatedSize","rentries","rkeys","values","rvalues","__staleWhileFetching","rforEach","purgeStale","dump","maxEntrySizeExceeded","__abortController","oldValue","peek","fetchAborted","fetchError","fetchAbortIgnored","fetchResolved","fetchUpdated","returnedStale","__returned","fetchDispatched","fetchRejected","fetch","forceRefresh","at","Ht","ContainerIterator","Container","Base","iteratorType","xn","empty","Zd","Mn","w1","_1","top","ep","Ln","m1","v1","front","tp","Un","E1","S1","updateItem","qn","Nn","A1","I1","lt","ha","throwIteratorAccessError","pa","jn","RandomIterator","R1","Dn","da","pre","container","pointer","getElementByPos","setElementByPos","rp","Fn","C1","B1","wr","O1","pushBack","begin","rBegin","rEnd","back","eraseElementByPos","eraseElementByValue","eraseElementByIterator","popBack","insert","reverse","unique","sort","ip","Wn","k1","x1","_r","mr","L1","G","pushFront","popFront","np","$n","U1","N1","vr","D1","ceil","curNodeBucketIndex","curNodePointerIndex","cut","shrinkToFit","sp","Zr","TreeNodeEnableIndex","TreeNode","Hn","ma","Vn","op","j1","ap","F1","re","ne","parentNode","grandParent","curNode","fe","Z","updateKeyByIterator","eraseElementByKey","getHeight","Ea","Kn","W1","zn","up","Gn","H1","lp","V1","z1","Ke","K1","lowerBound","upperBound","reverseLowerBound","reverseUpperBound","union","cp","Qn","G1","fp","Q1","Y1","Ge","Proxy","J1","setElement","getElementByKey","Ta","Ia","Pa","ei","HashContainerIterator","HashContainer","hp","Ra","Ti","Ca","Ba","HASH_TAG","pp","Yn","dp","ev","Er","tv","yp","Jn","gp","rv","iv","Sr","sv","bp","je","cv","gv","pv","fv","dv","hv","lv","av","ov","ut","_p","mN","wp","yv","OrderedSet","ft","bv","Te","low","high","ct","ss","firstVacant","intervalCount","xa","PN","mp","wv","NumberAllocator","vp","La","_v","mv","topicToAlias","numberAllocator","getAliasByTopic","getLruAlias","Ep","Ri","vv","__importDefault","__esModule","Ev","Sv","Av","connackTimer","topicAliasSend","_shiftPingInterval","_onConnect","Sp","Ua","Ap","Ci","Bi","Rv","Cv","Bv","Pv","Ov","pingResp","Ip","ti","xv","TypedEventEmitter","Mv","Lv","Xn","Pi","Ar","isReactNativeBrowser","isWebWorker","Tp","Rp","Nv","Bp","Zn","Cp","WeakMap","addUniqueNumber","generateUniqueNumber","fastUniqueNumbers","Op","es","Pp","Worker","timerId","timerType","clearInterval","postMessage","setInterval","delay","workerTimersBroker","xp","ts","kp","URL","createObjectURL","revokeObjectURL","workerTimers","Np","Rt","qv","__createBinding","Dv","__setModuleDefault","jv","__importStar","Na","Mp","Lp","Up","Da","Oi","Wv","$v","checkPing","timer","reschedule","ns","Qe","Hv","Vv","Wp","Vt","zv","ja","Kv","Gv","qp","Dp","Qv","rs","Yv","Wa","Jv","Xv","jp","Fa","setImmediate","Fp","reschedulePings","reconnectPeriod","connectTimeout","resubscribe","writeCache","timerVariant","defaultId","_noop","rejectUnauthorized","cacheNumbers","streamBuilder","outgoingStore","queueQoSZero","pingTimer","connected","queue","reconnectTimer","_storeProcessing","_packetIdsDuringStoreProcessing","_storeProcessingQueue","_firstConnection","_resubscribe","_setupReconnect","manualConnect","_nextId","getLastMessageId","_clearReconnect","_flushVolatile","_writePacket","authPacket","_cleanUp","publish","cbStorePut","_checkDisconnecting","volatile","invoke","publishAsync","subscribeAsync","unsubscribeAsync","disconnected","_deferredReconnect","endAsync","removeOutgoingMessage","reconnect","_reconnect","_removeTopicAliasAndRecoverTopicName","_storeAndSend","_applyTopicAlias","autoAssignTopicAlias","autoUseTopicAlias","_storePacket","_setupPingTimer","_checkPing","connackPacket","_flushStoreProcessingQueue","_invokeAllStoreProcessingQueue","$p","Ha","Zv","lastId","Ir","iE","Hp","rE","Gp","eE","tE","ht","Va","Vp","Qp","zp","Kp","zt","Yp","overflow","ucs2","decode","fromCodePoint","toASCII","toUnicode","nE","sE","ki","oE","dt","Jp","maxKeys","za","Ka","eg","Bt","ii","aE","ri","Tr","Ot","tg","Pt","Xp","Ct","Zp","rg","Ga","ig","ni","Ya","ng","Ja","Qa","lE","sg","isAbsolute","relative","_makeLong","dirname","basename","extname","root","base","sep","win32","posix","uE","dg","Fe","slashes","query","xi","pt","BE","Deno","InvalidData","rl","codePointAt","SE","vE","EE","PE","OE","kE","fg","mE","_E","AE","IE","TE","RE","CE","cg","il","HE","WE","$E","YE","JE","hg","FE","jE","VE","zE","KE","GE","QE","DE","Url","ME","fileURLToPath","LE","qE","pathToFileURL","UE","resolveObject","NE","fE","cE","hE","dE","pE","tl","og","ag","lg","gE","yE","Xa","si","Za","ug","wE","xE","pg","isNull","isNullOrUndefined","javascript","https","ftp","gopher","file","parseHost","escape","bE","os","Me","Server","Socket","_createServerHandle","_normalizeArgs","_setSimultaneousAccepts","createConnection","createServer","XE","isIP","isIPv4","isIPv6","sl","ol","Mi","gg","ZE","tS","yg","iS","bg","ll","Li","al","nS","sS","aS","servername","authorized","oi","BufferedDuplex","uS","wg","_g","ul","proxy","writeQueue","isSocketOpen","writeToProxy","socketReady","processWriteQueue","hl","cl","gt","fl","Le","mg","fS","cS","wsOptions","dS","transformWsUrl","pS","wx","connectSocket","success","fail","hS","onOpen","onMessage","onClose","onError","errMsg","gl","pl","kt","as","ai","dl","bS","wS","vg","mS","vS","sendSocketMessage","closeSocket","_S","onSocketOpen","onSocketMessage","FileReader","readAsArrayBuffer","onSocketClose","onSocketError","Sg","PD","Eg","_l","Ui","wl","yl","Ag","AS","IS","Ig","bl","Kt","TS","Tg","Rg","binary","RS","browserBufferSize","browserBufferTimeout","createWebsocket","WebSocket","binaryType","BS","bufferedAmount","OPEN","onopen","onclose","onmessage","CS","createWebSocketStream","Pg","Rr","ls","connectAsync","kS","xS","MS","LS","Cg","Re","Bg","US","cert","defaultProtocol","servers","_reconnectCount","wxs","ali","alis","mqtt","tcp","ssl","mqtts","wss","ml","Og","qS","DS","kg","__exportStar","Ni","PingTimer","UniqueMessageIdProvider","DefaultMessageIdProvider","Store","MqttClient","Client","xg","jS","FS","WS","Mg","$S","HS","We","Lg","VS","zS","KS","GS","QS","CloudInteropAPI","connectParams","_sessionDetails","_mqttClient","reconnectRetryLimit","reconnectRetries","contextListener","sessionDetails","mqttClient","userId","sourceId","platformId","connectResponse","post","sessionRootTopic","lastWillPayload","sessionId","clientOptions","mqttUrl","handleCommand","disconnectResponse","setContext","contextGroup","addContextListener","startIntentDiscovery","intentName","endIntentDiscovery","discoveryId","sendIntentDetail","intentDetail","raiseIntent","targetSession","intentInstanceId","addIntentDetailListener","messageEnvelope","startsWith","channelName","isStringValue","entryPoints","interopOverride","initialize","loggerCreator","_definition","loggerName","_logger","_helpers","info","closedown","getConstructorOverride","errorMessage","cloudConfig","realm","sourceDisplayName","fin","identity","uuid","client","getContextGroups","setContextForGroup","contextGroupId","cloudReconnect","cloudConnectionState","cloudInteropOverride"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"openfin-cloud-interop.bundle.js","mappings":"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","sources":["webpack://openfin-workspace--workspace-platform-starter/../../node_modules/base64-js/index.js","webpack://openfin-workspace--workspace-platform-starter/../../node_modules/buffer/index.js","webpack://openfin-workspace--workspace-platform-starter/../../node_modules/ieee754/index.js","webpack://openfin-workspace--workspace-platform-starter/../../node_modules/isarray/index.js","webpack://openfin-workspace--workspace-platform-starter/webpack/bootstrap","webpack://openfin-workspace--workspace-platform-starter/webpack/runtime/amd options","webpack://openfin-workspace--workspace-platform-starter/webpack/runtime/define property getters","webpack://openfin-workspace--workspace-platform-starter/webpack/runtime/global","webpack://openfin-workspace--workspace-platform-starter/webpack/runtime/hasOwnProperty shorthand","webpack://openfin-workspace--workspace-platform-starter/../../node_modules/@openfin/cloud-interop/out/index.js","webpack://openfin-workspace--workspace-platform-starter/./client/src/framework/utils.ts","webpack://openfin-workspace--workspace-platform-starter/./client/src/modules/interop-override/openfin-cloud-interop/index.ts","webpack://openfin-workspace--workspace-platform-starter/./client/src/modules/interop-override/openfin-cloud-interop/interop-override.ts"],"sourcesContent":["'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.amdO = {};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","import { Buffer } from 'buffer';\n\nfunction bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n};\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);\n};\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n};\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n };\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n};\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n};\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n};\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n};\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n};\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n};\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[Symbol.iterator];\n\n const iterator = generator.call(obj);\n\n let result;\n\n while ((result = iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n};\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n};\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n};\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n};\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n };\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n};\n\nconst noop = () => {};\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n};\n\nconst ALPHA = 'abcdefghijklmnopqrstuvwxyz';\n\nconst DIGIT = '0123456789';\n\nconst ALPHABET = {\n DIGIT,\n ALPHA,\n ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT\n};\n\nconst generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {\n let str = '';\n const {length} = alphabet;\n while (size--) {\n str += alphabet[Math.random() * length|0];\n }\n\n return str;\n};\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n };\n\n return visit(obj, 0);\n};\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported ? ((token, callbacks) => {\n _global.addEventListener(\"message\", ({source, data}) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n }\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n typeof setImmediate === 'function',\n isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\nvar utils$1 = {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n ALPHABET,\n generateString,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap\n};\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError$1(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n if (response) {\n this.response = response;\n this.status = response.status ? response.status : null;\n }\n}\n\nutils$1.inherits(AxiosError$1, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils$1.toJSONObject(this.config),\n code: this.code,\n status: this.status\n };\n }\n});\n\nconst prototype$1 = AxiosError$1.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError$1, descriptors);\nObject.defineProperty(prototype$1, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError$1.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype$1);\n\n utils$1.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n AxiosError$1.call(axiosError, error.message, code, config, request, response);\n\n axiosError.cause = error;\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\n// eslint-disable-next-line strict\nvar httpAdapter = null;\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils$1.isPlainObject(thing) || utils$1.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils$1.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils$1.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils$1.toFlatObject(utils$1, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object} options\n *\n * @returns\n */\nfunction toFormData$1(obj, formData, options) {\n if (!utils$1.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils$1.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils$1.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils$1.isSpecCompliantForm(formData);\n\n if (!utils$1.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils$1.isDate(value)) {\n return value.toISOString();\n }\n\n if (!useBlob && utils$1.isBlob(value)) {\n throw new AxiosError$1('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils$1.isArrayBuffer(value) || utils$1.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils$1.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils$1.isArray(value) && isFlatArray(value)) ||\n ((utils$1.isFileList(value) || utils$1.endsWith(key, '[]')) && (arr = utils$1.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils$1.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils$1.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils$1.forEach(value, function each(el, key) {\n const result = !(utils$1.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils$1.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils$1.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode$1(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object} params - The parameters to be converted to a FormData object.\n * @param {Object} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData$1(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode$1);\n } : encode$1;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?object} options\n *\n * @returns {string} The formatted url\n */\nfunction buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils$1.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils$1.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nvar transitionalDefaults = {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n\nvar URLSearchParams$1 = typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n\nvar FormData$1 = typeof FormData !== 'undefined' ? FormData : null;\n\nvar Blob$1 = typeof Blob !== 'undefined' ? Blob : null;\n\nvar platform$1 = {\n isBrowser: true,\n classes: {\n URLSearchParams: URLSearchParams$1,\n FormData: FormData$1,\n Blob: Blob$1\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n\nconst hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nvar utils = /*#__PURE__*/Object.freeze({\n __proto__: null,\n hasBrowserEnv: hasBrowserEnv,\n hasStandardBrowserEnv: hasStandardBrowserEnv,\n hasStandardBrowserWebWorkerEnv: hasStandardBrowserWebWorkerEnv,\n navigator: _navigator,\n origin: origin\n});\n\nvar platform = {\n ...utils,\n ...platform$1\n};\n\nfunction toURLEncodedForm(data, options) {\n return toFormData$1(data, new platform.classes.URLSearchParams(), Object.assign({\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils$1.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils$1.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils$1.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils$1.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils$1.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils$1.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils$1.isFormData(formData) && utils$1.isFunction(formData.entries)) {\n const obj = {};\n\n utils$1.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils$1.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils$1.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (0, JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils$1.isObject(data);\n\n if (isObjectPayload && utils$1.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils$1.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils$1.isArrayBuffer(data) ||\n utils$1.isBuffer(data) ||\n utils$1.isStream(data) ||\n utils$1.isFile(data) ||\n utils$1.isBlob(data) ||\n utils$1.isReadableStream(data)\n ) {\n return data;\n }\n if (utils$1.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils$1.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils$1.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData$1(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils$1.isResponse(data) || utils$1.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils$1.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError$1.from(e, AxiosError$1.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils$1.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils$1.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nvar parseHeaders = rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils$1.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils$1.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils$1.isString(value)) return;\n\n if (utils$1.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils$1.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils$1.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nlet AxiosHeaders$1 = class AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils$1.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils$1.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils$1.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite);\n } else if(utils$1.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils$1.isHeaders(header)) {\n for (const [key, value] of header.entries()) {\n setHeader(value, key, rewrite);\n }\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils$1.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils$1.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils$1.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils$1.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils$1.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils$1.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils$1.forEach(this, (value, header) => {\n const key = utils$1.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils$1.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils$1.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils$1.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n};\n\nAxiosHeaders$1.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils$1.reduceDescriptors(AxiosHeaders$1.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils$1.freezeMethods(AxiosHeaders$1);\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nfunction transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders$1.from(context.headers);\n let data = context.data;\n\n utils$1.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n\nfunction isCancel$1(value) {\n return !!(value && value.__CANCEL__);\n}\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError$1(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError$1.call(this, message == null ? 'canceled' : message, AxiosError$1.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils$1.inherits(CanceledError$1, AxiosError$1, {\n __CANCEL__: true\n});\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nfunction settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError$1(\n 'Request failed with status code ' + response.status,\n [AxiosError$1.ERR_BAD_REQUEST, AxiosError$1.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n\nfunction parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\n/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn.apply(null, args);\n };\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs);\n }, threshold - passed);\n }\n }\n };\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nconst progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n};\n\nconst progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n};\n\nconst asyncDecorator = (fn) => (...args) => utils$1.asap(() => fn(...args));\n\nvar isURLSameOrigin = platform.hasStandardBrowserEnv ?\n\n// Standard browser envs have full support of the APIs needed to test\n// whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n const msie = platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent);\n const urlParsingNode = document.createElement('a');\n let originURL;\n\n /**\n * Parse a URL to discover its components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n let href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n const parsed = (utils$1.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })();\n\nvar cookies = platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n\n utils$1.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n utils$1.isString(path) && cookie.push('path=' + path);\n\n utils$1.isString(domain) && cookie.push('domain=' + domain);\n\n secure === true && cookie.push('secure');\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nfunction isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nfunction combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nfunction buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders$1 ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nfunction mergeConfig$1(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, caseless) {\n if (utils$1.isPlainObject(target) && utils$1.isPlainObject(source)) {\n return utils$1.merge.call({caseless}, target, source);\n } else if (utils$1.isPlainObject(source)) {\n return utils$1.merge({}, source);\n } else if (utils$1.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, caseless) {\n if (!utils$1.isUndefined(b)) {\n return getMergedValue(a, b, caseless);\n } else if (!utils$1.isUndefined(a)) {\n return getMergedValue(undefined, a, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils$1.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils$1.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils$1.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b) => mergeDeepProperties(headersToObject(a), headersToObject(b), true)\n };\n\n utils$1.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils$1.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n\nvar resolveConfig = (config) => {\n const newConfig = mergeConfig$1({}, config);\n\n let {data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth} = newConfig;\n\n newConfig.headers = headers = AxiosHeaders$1.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n let contentType;\n\n if (utils$1.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // Let the browser set it\n } else if ((contentType = headers.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n headers.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n }\n }\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils$1.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n};\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nvar xhrAdapter = isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders$1.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders$1.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError$1('Request aborted', AxiosError$1.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError$1('Network Error', AxiosError$1.ERR_NETWORK, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError$1(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError$1.ETIMEDOUT : AxiosError$1.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils$1.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils$1.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError$1(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError$1('Unsupported protocol ' + protocol + ':', AxiosError$1.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n};\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof AxiosError$1 ? err : new CanceledError$1(err instanceof Error ? err.message : err));\n }\n };\n\n let timer = timeout && setTimeout(() => {\n timer = null;\n onabort(new AxiosError$1(`timeout ${timeout} of ms exceeded`, AxiosError$1.ETIMEDOUT));\n }, timeout);\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n };\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => utils$1.asap(unsubscribe);\n\n return signal;\n }\n};\n\nconst streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n};\n\nconst readBytes = async function* (iterable, chunkSize) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n};\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n};\n\nconst trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n };\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n};\n\nconst isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function';\nconst isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function';\n\n// used only inside the fetch adapter\nconst encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Response(str).arrayBuffer())\n);\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n};\n\nconst supportsRequestStream = isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n});\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst supportsResponseStream = isReadableStreamSupported &&\n test(() => utils$1.isReadableStream(new Response('').body));\n\n\nconst resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n};\n\nisFetchSupported && (((res) => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = utils$1.isFunction(res[type]) ? (res) => res[type]() :\n (_, config) => {\n throw new AxiosError$1(`Response type '${type}' is not supported`, AxiosError$1.ERR_NOT_SUPPORT, config);\n });\n });\n})(new Response));\n\nconst getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if(utils$1.isBlob(body)) {\n return body.size;\n }\n\n if(utils$1.isSpecCompliantForm(body)) {\n const _request = new Request(platform.origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if(utils$1.isArrayBufferView(body) || utils$1.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if(utils$1.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if(utils$1.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n};\n\nconst resolveBodyLength = async (headers, body) => {\n const length = utils$1.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n};\n\nvar fetchAdapter = isFetchSupported && (async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\n });\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils$1.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader);\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!utils$1.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = \"credentials\" in Request.prototype;\n request = new Request(url, {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: isCredentialsSupported ? withCredentials : undefined\n });\n\n let response = await fetch(request);\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils$1.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils$1.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders$1.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n });\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError$1('Network Error', AxiosError$1.ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError$1.from(err, err && err.code, config, request);\n }\n});\n\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: fetchAdapter\n};\n\nutils$1.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils$1.isFunction(adapter) || adapter === null || adapter === false;\n\nvar adapters = {\n getAdapter: (adapters) => {\n adapters = utils$1.isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError$1(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError$1(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n },\n adapters: knownAdapters\n};\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError$1(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nfunction dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders$1.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders$1.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel$1(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders$1.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n\nconst VERSION$1 = \"1.7.7\";\n\nconst validators$1 = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators$1[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators$1.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION$1 + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError$1(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError$1.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError$1('options must be an object', AxiosError$1.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError$1('option ' + opt + ' must be ' + result, AxiosError$1.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError$1('Unknown option ' + opt, AxiosError$1.ERR_BAD_OPTION);\n }\n }\n}\n\nvar validator = {\n assertOptions,\n validators: validators$1\n};\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nlet Axios$1 = class Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy;\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy = {}) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack;\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig$1(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils$1.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n };\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils$1.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils$1.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders$1.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n i = 0;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig$1(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n};\n\n// Provide aliases for supported request methods\nutils$1.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios$1.prototype[method] = function(url, config) {\n return this.request(mergeConfig$1(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils$1.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig$1(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios$1.prototype[method] = generateHTTPMethod();\n\n Axios$1.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nlet CancelToken$1 = class CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError$1(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n};\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nfunction spread$1(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nfunction isAxiosError$1(payload) {\n return utils$1.isObject(payload) && (payload.isAxiosError === true);\n}\n\nconst HttpStatusCode$1 = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode$1).forEach(([key, value]) => {\n HttpStatusCode$1[value] = key;\n});\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios$1(defaultConfig);\n const instance = bind(Axios$1.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils$1.extend(instance, Axios$1.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils$1.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig$1(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios$1;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError$1;\naxios.CancelToken = CancelToken$1;\naxios.isCancel = isCancel$1;\naxios.VERSION = VERSION$1;\naxios.toFormData = toFormData$1;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError$1;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread$1;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError$1;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig$1;\n\naxios.AxiosHeaders = AxiosHeaders$1;\n\naxios.formToJSON = thing => formDataToJSON(utils$1.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode$1;\n\naxios.default = axios;\n\n// This module is intended to unwrap Axios default export as named.\n// Keep top-level export same with static properties\n// so that it can keep same with es module or cjs\nconst {\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n} = axios;\n\nvar ys=Object.defineProperty;var Kg=Object.getOwnPropertyDescriptor;var Gg=Object.getOwnPropertyNames;var Qg=Object.prototype.hasOwnProperty;var _e=(t,e)=>()=>(t&&(e=t(t=0)),e);var M=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),Jt=(t,e)=>{for(var r in e)ys(t,r,{get:e[r],enumerable:!0});},Yg=(t,e,r,i)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let n of Gg(e))!Qg.call(t,n)&&n!==r&&ys(t,n,{get:()=>e[n],enumerable:!(i=Kg(e,n))||i.enumerable});return t};var X=t=>Yg(ys({},\"__esModule\",{value:!0}),t);var _=_e(()=>{});var B={};Jt(B,{_debugEnd:()=>yu,_debugProcess:()=>gu,_events:()=>Ou,_eventsCount:()=>xu,_exiting:()=>Yl,_fatalExceptions:()=>cu,_getActiveHandles:()=>eu,_getActiveRequests:()=>Zl,_kill:()=>ru,_linkedBinding:()=>Gl,_maxListeners:()=>ku,_preload_modules:()=>Cu,_rawDebug:()=>zl,_startProfilerIdleNotifier:()=>bu,_stopProfilerIdleNotifier:()=>wu,_tickCallback:()=>pu,abort:()=>Eu,addListener:()=>Mu,allowedNodeEnvironmentFlags:()=>lu,arch:()=>xl,argv:()=>Ul,argv0:()=>Ru,assert:()=>uu,binding:()=>Fl,chdir:()=>Hl,config:()=>Jl,cpuUsage:()=>$i,cwd:()=>$l,debugPort:()=>Tu,default:()=>$u,dlopen:()=>Xl,domain:()=>Ql,emit:()=>Du,emitWarning:()=>jl,env:()=>Ll,execArgv:()=>Nl,execPath:()=>Iu,exit:()=>ou,features:()=>fu,hasUncaughtExceptionCaptureCallback:()=>du,hrtime:()=>Wi,kill:()=>su,listeners:()=>Wu,memoryUsage:()=>nu,moduleLoadList:()=>Kl,nextTick:()=>Pl,off:()=>Uu,on:()=>wt,once:()=>Lu,openStdin:()=>au,pid:()=>Su,platform:()=>Ml,ppid:()=>Au,prependListener:()=>ju,prependOnceListener:()=>Fu,reallyExit:()=>tu,release:()=>Vl,removeAllListeners:()=>qu,removeListener:()=>Nu,resourceUsage:()=>iu,setSourceMapsEnabled:()=>Bu,setUncaughtExceptionCaptureCallback:()=>hu,stderr:()=>mu,stdin:()=>vu,stdout:()=>_u,title:()=>Ol,umask:()=>Wl,uptime:()=>Pu,version:()=>ql,versions:()=>Dl});function _s(t){throw new Error(\"Node.js process \"+t+\" is not supported by JSPM core outside of Node.js\")}function Jg(){!Lr||!Xt||(Lr=!1,Xt.length?bt=Xt.concat(bt):Fi=-1,bt.length&&Bl());}function Bl(){if(!Lr){var t=setTimeout(Jg,0);Lr=!0;for(var e=bt.length;e;){for(Xt=bt,bt=[];++Fi1)for(var r=1;r{_();v();m();bt=[],Lr=!1,Fi=-1;kl.prototype.run=function(){this.fun.apply(null,this.array);};Ol=\"browser\",xl=\"x64\",Ml=\"browser\",Ll={PATH:\"/usr/bin\",LANG:navigator.language+\".UTF-8\",PWD:\"/\",HOME:\"/home\",TMP:\"/tmp\"},Ul=[\"/usr/bin/node\"],Nl=[],ql=\"v16.8.0\",Dl={},jl=function(t,e){console.warn((e?e+\": \":\"\")+t);},Fl=function(t){_s(\"binding\");},Wl=function(t){return 0},$l=function(){return \"/\"},Hl=function(t){},Vl={name:\"node\",sourceUrl:\"\",headersUrl:\"\",libUrl:\"\"};zl=Ee,Kl=[];Ql={},Yl=!1,Jl={};tu=Ee,ru=Ee,$i=function(){return {}},iu=$i,nu=$i,su=Ee,ou=Ee,au=Ee,lu={};fu={inspector:!1,debug:!1,uv:!1,ipv6:!1,tls_alpn:!1,tls_sni:!1,tls_ocsp:!1,tls:!1,cached_builtins:!0},cu=Ee,hu=Ee;pu=Ee,gu=Ee,yu=Ee,bu=Ee,wu=Ee,_u=void 0,mu=void 0,vu=void 0,Eu=Ee,Su=2,Au=1,Iu=\"/bin/usr/node\",Tu=9229,Ru=\"node\",Cu=[],Bu=Ee,Lt={now:typeof performance<\"u\"?performance.now.bind(performance):void 0,timing:typeof performance<\"u\"?performance.timing:void 0};Lt.now===void 0&&(bs=Date.now(),Lt.timing&&Lt.timing.navigationStart&&(bs=Lt.timing.navigationStart),Lt.now=()=>Date.now()-bs);ws=1e9;Wi.bigint=function(t){var e=Wi(t);return typeof BigInt>\"u\"?e[0]*ws+e[1]:BigInt(e[0]*ws)+BigInt(e[1])};ku=10,Ou={},xu=0;Mu=wt,Lu=wt,Uu=wt,Nu=wt,qu=wt,Du=Ee,ju=wt,Fu=wt;$u={version:ql,versions:Dl,arch:xl,platform:Ml,release:Vl,_rawDebug:zl,moduleLoadList:Kl,binding:Fl,_linkedBinding:Gl,_events:Ou,_eventsCount:xu,_maxListeners:ku,on:wt,addListener:Mu,once:Lu,off:Uu,removeListener:Nu,removeAllListeners:qu,emit:Du,prependListener:ju,prependOnceListener:Fu,listeners:Wu,domain:Ql,_exiting:Yl,config:Jl,dlopen:Xl,uptime:Pu,_getActiveRequests:Zl,_getActiveHandles:eu,reallyExit:tu,_kill:ru,cpuUsage:$i,resourceUsage:iu,memoryUsage:nu,kill:su,exit:ou,openStdin:au,allowedNodeEnvironmentFlags:lu,assert:uu,features:fu,_fatalExceptions:cu,setUncaughtExceptionCaptureCallback:hu,hasUncaughtExceptionCaptureCallback:du,emitWarning:jl,nextTick:Pl,_tickCallback:pu,_debugProcess:gu,_debugEnd:yu,_startProfilerIdleNotifier:bu,_stopProfilerIdleNotifier:wu,stdout:_u,stdin:vu,stderr:mu,abort:Eu,umask:Wl,chdir:Hl,cwd:$l,env:Ll,title:Ol,argv:Ul,execArgv:Nl,pid:Su,ppid:Au,execPath:Iu,debugPort:Tu,hrtime:Wi,argv0:Ru,_preload_modules:Cu,setSourceMapsEnabled:Bu};});var m=_e(()=>{Hu();});var me={};Jt(me,{Buffer:()=>x,INSPECT_MAX_BYTES:()=>ty,default:()=>Ut,kMaxLength:()=>ry});function Xg(){if(Vu)return ci;Vu=!0,ci.byteLength=a,ci.toByteArray=c,ci.fromByteArray=g;for(var t=[],e=[],r=typeof Uint8Array<\"u\"?Uint8Array:Array,i=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",n=0,o=i.length;n0)throw new Error(\"Invalid string. Length must be a multiple of 4\");var S=y.indexOf(\"=\");S===-1&&(S=w);var E=S===w?0:4-S%4;return [S,E]}function a(y){var w=s(y),S=w[0],E=w[1];return (S+E)*3/4-E}function l(y,w,S){return (w+S)*3/4-S}function c(y){var w,S=s(y),E=S[0],I=S[1],C=new r(l(y,E,I)),R=0,U=I>0?E-4:E,N;for(N=0;N>16&255,C[R++]=w>>8&255,C[R++]=w&255;return I===2&&(w=e[y.charCodeAt(N)]<<2|e[y.charCodeAt(N+1)]>>4,C[R++]=w&255),I===1&&(w=e[y.charCodeAt(N)]<<10|e[y.charCodeAt(N+1)]<<4|e[y.charCodeAt(N+2)]>>2,C[R++]=w>>8&255,C[R++]=w&255),C}function h(y){return t[y>>18&63]+t[y>>12&63]+t[y>>6&63]+t[y&63]}function d(y,w,S){for(var E,I=[],C=w;CU?U:R+C));return E===1?(w=y[S-1],I.push(t[w>>2]+t[w<<4&63]+\"==\")):E===2&&(w=(y[S-2]<<8)+y[S-1],I.push(t[w>>10]+t[w>>4&63]+t[w<<2&63]+\"=\")),I.join(\"\")}return ci}function Zg(){if(zu)return Hi;zu=!0;return Hi.read=function(t,e,r,i,n){var o,s,a=n*8-i-1,l=(1<>1,h=-7,d=r?n-1:0,g=r?-1:1,y=t[e+d];for(d+=g,o=y&(1<<-h)-1,y>>=-h,h+=a;h>0;o=o*256+t[e+d],d+=g,h-=8);for(s=o&(1<<-h)-1,o>>=-h,h+=i;h>0;s=s*256+t[e+d],d+=g,h-=8);if(o===0)o=1-c;else {if(o===l)return s?NaN:(y?-1:1)*(1/0);s=s+Math.pow(2,i),o=o-c;}return (y?-1:1)*s*Math.pow(2,o-i)},Hi.write=function(t,e,r,i,n,o){var s,a,l,c=o*8-n-1,h=(1<>1,g=n===23?Math.pow(2,-24)-Math.pow(2,-77):0,y=i?0:o-1,w=i?1:-1,S=e<0||e===0&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=h):(s=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-s))<1&&(s--,l*=2),s+d>=1?e+=g/l:e+=g*Math.pow(2,1-d),e*l>=2&&(s++,l/=2),s+d>=h?(a=0,s=h):s+d>=1?(a=(e*l-1)*Math.pow(2,n),s=s+d):(a=e*Math.pow(2,d-1)*Math.pow(2,n),s=0));n>=8;t[r+y]=a&255,y+=w,a/=256,n-=8);for(s=s<0;t[r+y]=s&255,y+=w,s/=256,c-=8);t[r+y-w]|=S*128;},Hi}function ey(){if(Ku)return Zt;Ku=!0;let t=Xg(),e=Zg(),r=typeof Symbol==\"function\"&&typeof Symbol.for==\"function\"?Symbol.for(\"nodejs.util.inspect.custom\"):null;Zt.Buffer=s,Zt.SlowBuffer=I,Zt.INSPECT_MAX_BYTES=50;let i=2147483647;Zt.kMaxLength=i,s.TYPED_ARRAY_SUPPORT=n(),!s.TYPED_ARRAY_SUPPORT&&typeof console<\"u\"&&typeof console.error==\"function\"&&console.error(\"This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.\");function n(){try{let p=new Uint8Array(1),u={foo:function(){return 42}};return Object.setPrototypeOf(u,Uint8Array.prototype),Object.setPrototypeOf(p,u),p.foo()===42}catch{return !1}}Object.defineProperty(s.prototype,\"parent\",{enumerable:!0,get:function(){if(s.isBuffer(this))return this.buffer}}),Object.defineProperty(s.prototype,\"offset\",{enumerable:!0,get:function(){if(s.isBuffer(this))return this.byteOffset}});function o(p){if(p>i)throw new RangeError('The value \"'+p+'\" is invalid for option \"size\"');let u=new Uint8Array(p);return Object.setPrototypeOf(u,s.prototype),u}function s(p,u,f){if(typeof p==\"number\"){if(typeof u==\"string\")throw new TypeError('The \"string\" argument must be of type string. Received type number');return h(p)}return a(p,u,f)}s.poolSize=8192;function a(p,u,f){if(typeof p==\"string\")return d(p,u);if(ArrayBuffer.isView(p))return y(p);if(p==null)throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof p);if(Ye(p,ArrayBuffer)||p&&Ye(p.buffer,ArrayBuffer)||typeof SharedArrayBuffer<\"u\"&&(Ye(p,SharedArrayBuffer)||p&&Ye(p.buffer,SharedArrayBuffer)))return w(p,u,f);if(typeof p==\"number\")throw new TypeError('The \"value\" argument must not be of type number. Received type number');let b=p.valueOf&&p.valueOf();if(b!=null&&b!==p)return s.from(b,u,f);let A=S(p);if(A)return A;if(typeof Symbol<\"u\"&&Symbol.toPrimitive!=null&&typeof p[Symbol.toPrimitive]==\"function\")return s.from(p[Symbol.toPrimitive](\"string\"),u,f);throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof p)}s.from=function(p,u,f){return a(p,u,f)},Object.setPrototypeOf(s.prototype,Uint8Array.prototype),Object.setPrototypeOf(s,Uint8Array);function l(p){if(typeof p!=\"number\")throw new TypeError('\"size\" argument must be of type number');if(p<0)throw new RangeError('The value \"'+p+'\" is invalid for option \"size\"')}function c(p,u,f){return l(p),p<=0?o(p):u!==void 0?typeof f==\"string\"?o(p).fill(u,f):o(p).fill(u):o(p)}s.alloc=function(p,u,f){return c(p,u,f)};function h(p){return l(p),o(p<0?0:E(p)|0)}s.allocUnsafe=function(p){return h(p)},s.allocUnsafeSlow=function(p){return h(p)};function d(p,u){if((typeof u!=\"string\"||u===\"\")&&(u=\"utf8\"),!s.isEncoding(u))throw new TypeError(\"Unknown encoding: \"+u);let f=C(p,u)|0,b=o(f),A=b.write(p,u);return A!==f&&(b=b.slice(0,A)),b}function g(p){let u=p.length<0?0:E(p.length)|0,f=o(u);for(let b=0;b=i)throw new RangeError(\"Attempt to allocate Buffer larger than maximum size: 0x\"+i.toString(16)+\" bytes\");return p|0}function I(p){return +p!=p&&(p=0),s.alloc(+p)}s.isBuffer=function(u){return u!=null&&u._isBuffer===!0&&u!==s.prototype},s.compare=function(u,f){if(Ye(u,Uint8Array)&&(u=s.from(u,u.offset,u.byteLength)),Ye(f,Uint8Array)&&(f=s.from(f,f.offset,f.byteLength)),!s.isBuffer(u)||!s.isBuffer(f))throw new TypeError('The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array');if(u===f)return 0;let b=u.length,A=f.length;for(let T=0,P=Math.min(b,A);TA.length?(s.isBuffer(P)||(P=s.from(P)),P.copy(A,T)):Uint8Array.prototype.set.call(A,P,T);else if(s.isBuffer(P))P.copy(A,T);else throw new TypeError('\"list\" argument must be an Array of Buffers');T+=P.length;}return A};function C(p,u){if(s.isBuffer(p))return p.length;if(ArrayBuffer.isView(p)||Ye(p,ArrayBuffer))return p.byteLength;if(typeof p!=\"string\")throw new TypeError('The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof p);let f=p.length,b=arguments.length>2&&arguments[2]===!0;if(!b&&f===0)return 0;let A=!1;for(;;)switch(u){case\"ascii\":case\"latin1\":case\"binary\":return f;case\"utf8\":case\"utf-8\":return ps(p).length;case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return f*2;case\"hex\":return f>>>1;case\"base64\":return Cl(p).length;default:if(A)return b?-1:ps(p).length;u=(\"\"+u).toLowerCase(),A=!0;}}s.byteLength=C;function R(p,u,f){let b=!1;if((u===void 0||u<0)&&(u=0),u>this.length||((f===void 0||f>this.length)&&(f=this.length),f<=0)||(f>>>=0,u>>>=0,f<=u))return \"\";for(p||(p=\"utf8\");;)switch(p){case\"hex\":return qg(this,u,f);case\"utf8\":case\"utf-8\":return Pr(this,u,f);case\"ascii\":return hs(this,u,f);case\"latin1\":case\"binary\":return Ng(this,u,f);case\"base64\":return ge(this,u,f);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return Dg(this,u,f);default:if(b)throw new TypeError(\"Unknown encoding: \"+p);p=(p+\"\").toLowerCase(),b=!0;}}s.prototype._isBuffer=!0;function U(p,u,f){let b=p[u];p[u]=p[f],p[f]=b;}s.prototype.swap16=function(){let u=this.length;if(u%2!==0)throw new RangeError(\"Buffer size must be a multiple of 16-bits\");for(let f=0;ff&&(u+=\" ... \"),\"\"},r&&(s.prototype[r]=s.prototype.inspect),s.prototype.compare=function(u,f,b,A,T){if(Ye(u,Uint8Array)&&(u=s.from(u,u.offset,u.byteLength)),!s.isBuffer(u))throw new TypeError('The \"target\" argument must be one of type Buffer or Uint8Array. Received type '+typeof u);if(f===void 0&&(f=0),b===void 0&&(b=u?u.length:0),A===void 0&&(A=0),T===void 0&&(T=this.length),f<0||b>u.length||A<0||T>this.length)throw new RangeError(\"out of range index\");if(A>=T&&f>=b)return 0;if(A>=T)return -1;if(f>=b)return 1;if(f>>>=0,b>>>=0,A>>>=0,T>>>=0,this===u)return 0;let P=T-A,$=b-f,se=Math.min(P,$),te=this.slice(A,T),oe=u.slice(f,b);for(let J=0;J2147483647?f=2147483647:f<-2147483648&&(f=-2147483648),f=+f,gs(f)&&(f=A?0:p.length-1),f<0&&(f=p.length+f),f>=p.length){if(A)return -1;f=p.length-1;}else if(f<0)if(A)f=0;else return -1;if(typeof u==\"string\"&&(u=s.from(u,b)),s.isBuffer(u))return u.length===0?-1:W(p,u,f,b,A);if(typeof u==\"number\")return u=u&255,typeof Uint8Array.prototype.indexOf==\"function\"?A?Uint8Array.prototype.indexOf.call(p,u,f):Uint8Array.prototype.lastIndexOf.call(p,u,f):W(p,[u],f,b,A);throw new TypeError(\"val must be string, number or Buffer\")}function W(p,u,f,b,A){let T=1,P=p.length,$=u.length;if(b!==void 0&&(b=String(b).toLowerCase(),b===\"ucs2\"||b===\"ucs-2\"||b===\"utf16le\"||b===\"utf-16le\")){if(p.length<2||u.length<2)return -1;T=2,P/=2,$/=2,f/=2;}function se(oe,J){return T===1?oe[J]:oe.readUInt16BE(J*T)}let te;if(A){let oe=-1;for(te=f;teP&&(f=P-$),te=f;te>=0;te--){let oe=!0;for(let J=0;J<$;J++)if(se(p,te+J)!==se(u,J)){oe=!1;break}if(oe)return te}return -1}s.prototype.includes=function(u,f,b){return this.indexOf(u,f,b)!==-1},s.prototype.indexOf=function(u,f,b){return N(this,u,f,b,!0)},s.prototype.lastIndexOf=function(u,f,b){return N(this,u,f,b,!1)};function K(p,u,f,b){f=Number(f)||0;let A=p.length-f;b?(b=Number(b),b>A&&(b=A)):b=A;let T=u.length;b>T/2&&(b=T/2);let P;for(P=0;P>>0,isFinite(b)?(b=b>>>0,A===void 0&&(A=\"utf8\")):(A=b,b=void 0);else throw new Error(\"Buffer.write(string, encoding, offset[, length]) is no longer supported\");let T=this.length-f;if((b===void 0||b>T)&&(b=T),u.length>0&&(b<0||f<0)||f>this.length)throw new RangeError(\"Attempt to write outside buffer bounds\");A||(A=\"utf8\");let P=!1;for(;;)switch(A){case\"hex\":return K(this,u,f,b);case\"utf8\":case\"utf-8\":return z(this,u,f,b);case\"ascii\":case\"latin1\":case\"binary\":return Q(this,u,f,b);case\"base64\":return pe(this,u,f,b);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return Yt(this,u,f,b);default:if(P)throw new TypeError(\"Unknown encoding: \"+A);A=(\"\"+A).toLowerCase(),P=!0;}},s.prototype.toJSON=function(){return {type:\"Buffer\",data:Array.prototype.slice.call(this._arr||this,0)}};function ge(p,u,f){return u===0&&f===p.length?t.fromByteArray(p):t.fromByteArray(p.slice(u,f))}function Pr(p,u,f){f=Math.min(p.length,f);let b=[],A=u;for(;A239?4:T>223?3:T>191?2:1;if(A+$<=f){let se,te,oe,J;switch($){case 1:T<128&&(P=T);break;case 2:se=p[A+1],(se&192)===128&&(J=(T&31)<<6|se&63,J>127&&(P=J));break;case 3:se=p[A+1],te=p[A+2],(se&192)===128&&(te&192)===128&&(J=(T&15)<<12|(se&63)<<6|te&63,J>2047&&(J<55296||J>57343)&&(P=J));break;case 4:se=p[A+1],te=p[A+2],oe=p[A+3],(se&192)===128&&(te&192)===128&&(oe&192)===128&&(J=(T&15)<<18|(se&63)<<12|(te&63)<<6|oe&63,J>65535&&J<1114112&&(P=J));}}P===null?(P=65533,$=1):P>65535&&(P-=65536,b.push(P>>>10&1023|55296),P=56320|P&1023),b.push(P),A+=$;}return Or(b)}let kr=4096;function Or(p){let u=p.length;if(u<=kr)return String.fromCharCode.apply(String,p);let f=\"\",b=0;for(;bb)&&(f=b);let A=\"\";for(let T=u;Tb&&(u=b),f<0?(f+=b,f<0&&(f=0)):f>b&&(f=b),ff)throw new RangeError(\"Trying to access beyond buffer length\")}s.prototype.readUintLE=s.prototype.readUIntLE=function(u,f,b){u=u>>>0,f=f>>>0,b||ye(u,f,this.length);let A=this[u],T=1,P=0;for(;++P>>0,f=f>>>0,b||ye(u,f,this.length);let A=this[u+--f],T=1;for(;f>0&&(T*=256);)A+=this[u+--f]*T;return A},s.prototype.readUint8=s.prototype.readUInt8=function(u,f){return u=u>>>0,f||ye(u,1,this.length),this[u]},s.prototype.readUint16LE=s.prototype.readUInt16LE=function(u,f){return u=u>>>0,f||ye(u,2,this.length),this[u]|this[u+1]<<8},s.prototype.readUint16BE=s.prototype.readUInt16BE=function(u,f){return u=u>>>0,f||ye(u,2,this.length),this[u]<<8|this[u+1]},s.prototype.readUint32LE=s.prototype.readUInt32LE=function(u,f){return u=u>>>0,f||ye(u,4,this.length),(this[u]|this[u+1]<<8|this[u+2]<<16)+this[u+3]*16777216},s.prototype.readUint32BE=s.prototype.readUInt32BE=function(u,f){return u=u>>>0,f||ye(u,4,this.length),this[u]*16777216+(this[u+1]<<16|this[u+2]<<8|this[u+3])},s.prototype.readBigUInt64LE=Mt(function(u){u=u>>>0,Mr(u,\"offset\");let f=this[u],b=this[u+7];(f===void 0||b===void 0)&&fi(u,this.length-8);let A=f+this[++u]*2**8+this[++u]*2**16+this[++u]*2**24,T=this[++u]+this[++u]*2**8+this[++u]*2**16+b*2**24;return BigInt(A)+(BigInt(T)<>>0,Mr(u,\"offset\");let f=this[u],b=this[u+7];(f===void 0||b===void 0)&&fi(u,this.length-8);let A=f*2**24+this[++u]*2**16+this[++u]*2**8+this[++u],T=this[++u]*2**24+this[++u]*2**16+this[++u]*2**8+b;return (BigInt(A)<>>0,f=f>>>0,b||ye(u,f,this.length);let A=this[u],T=1,P=0;for(;++P=T&&(A-=Math.pow(2,8*f)),A},s.prototype.readIntBE=function(u,f,b){u=u>>>0,f=f>>>0,b||ye(u,f,this.length);let A=f,T=1,P=this[u+--A];for(;A>0&&(T*=256);)P+=this[u+--A]*T;return T*=128,P>=T&&(P-=Math.pow(2,8*f)),P},s.prototype.readInt8=function(u,f){return u=u>>>0,f||ye(u,1,this.length),this[u]&128?(255-this[u]+1)*-1:this[u]},s.prototype.readInt16LE=function(u,f){u=u>>>0,f||ye(u,2,this.length);let b=this[u]|this[u+1]<<8;return b&32768?b|4294901760:b},s.prototype.readInt16BE=function(u,f){u=u>>>0,f||ye(u,2,this.length);let b=this[u+1]|this[u]<<8;return b&32768?b|4294901760:b},s.prototype.readInt32LE=function(u,f){return u=u>>>0,f||ye(u,4,this.length),this[u]|this[u+1]<<8|this[u+2]<<16|this[u+3]<<24},s.prototype.readInt32BE=function(u,f){return u=u>>>0,f||ye(u,4,this.length),this[u]<<24|this[u+1]<<16|this[u+2]<<8|this[u+3]},s.prototype.readBigInt64LE=Mt(function(u){u=u>>>0,Mr(u,\"offset\");let f=this[u],b=this[u+7];(f===void 0||b===void 0)&&fi(u,this.length-8);let A=this[u+4]+this[u+5]*2**8+this[u+6]*2**16+(b<<24);return (BigInt(A)<>>0,Mr(u,\"offset\");let f=this[u],b=this[u+7];(f===void 0||b===void 0)&&fi(u,this.length-8);let A=(f<<24)+this[++u]*2**16+this[++u]*2**8+this[++u];return (BigInt(A)<>>0,f||ye(u,4,this.length),e.read(this,u,!0,23,4)},s.prototype.readFloatBE=function(u,f){return u=u>>>0,f||ye(u,4,this.length),e.read(this,u,!1,23,4)},s.prototype.readDoubleLE=function(u,f){return u=u>>>0,f||ye(u,8,this.length),e.read(this,u,!0,52,8)},s.prototype.readDoubleBE=function(u,f){return u=u>>>0,f||ye(u,8,this.length),e.read(this,u,!1,52,8)};function Ce(p,u,f,b,A,T){if(!s.isBuffer(p))throw new TypeError('\"buffer\" argument must be a Buffer instance');if(u>A||up.length)throw new RangeError(\"Index out of range\")}s.prototype.writeUintLE=s.prototype.writeUIntLE=function(u,f,b,A){if(u=+u,f=f>>>0,b=b>>>0,!A){let $=Math.pow(2,8*b)-1;Ce(this,u,f,b,$,0);}let T=1,P=0;for(this[f]=u&255;++P>>0,b=b>>>0,!A){let $=Math.pow(2,8*b)-1;Ce(this,u,f,b,$,0);}let T=b-1,P=1;for(this[f+T]=u&255;--T>=0&&(P*=256);)this[f+T]=u/P&255;return f+b},s.prototype.writeUint8=s.prototype.writeUInt8=function(u,f,b){return u=+u,f=f>>>0,b||Ce(this,u,f,1,255,0),this[f]=u&255,f+1},s.prototype.writeUint16LE=s.prototype.writeUInt16LE=function(u,f,b){return u=+u,f=f>>>0,b||Ce(this,u,f,2,65535,0),this[f]=u&255,this[f+1]=u>>>8,f+2},s.prototype.writeUint16BE=s.prototype.writeUInt16BE=function(u,f,b){return u=+u,f=f>>>0,b||Ce(this,u,f,2,65535,0),this[f]=u>>>8,this[f+1]=u&255,f+2},s.prototype.writeUint32LE=s.prototype.writeUInt32LE=function(u,f,b){return u=+u,f=f>>>0,b||Ce(this,u,f,4,4294967295,0),this[f+3]=u>>>24,this[f+2]=u>>>16,this[f+1]=u>>>8,this[f]=u&255,f+4},s.prototype.writeUint32BE=s.prototype.writeUInt32BE=function(u,f,b){return u=+u,f=f>>>0,b||Ce(this,u,f,4,4294967295,0),this[f]=u>>>24,this[f+1]=u>>>16,this[f+2]=u>>>8,this[f+3]=u&255,f+4};function vl(p,u,f,b,A){Rl(u,b,A,p,f,7);let T=Number(u&BigInt(4294967295));p[f++]=T,T=T>>8,p[f++]=T,T=T>>8,p[f++]=T,T=T>>8,p[f++]=T;let P=Number(u>>BigInt(32)&BigInt(4294967295));return p[f++]=P,P=P>>8,p[f++]=P,P=P>>8,p[f++]=P,P=P>>8,p[f++]=P,f}function El(p,u,f,b,A){Rl(u,b,A,p,f,7);let T=Number(u&BigInt(4294967295));p[f+7]=T,T=T>>8,p[f+6]=T,T=T>>8,p[f+5]=T,T=T>>8,p[f+4]=T;let P=Number(u>>BigInt(32)&BigInt(4294967295));return p[f+3]=P,P=P>>8,p[f+2]=P,P=P>>8,p[f+1]=P,P=P>>8,p[f]=P,f+8}s.prototype.writeBigUInt64LE=Mt(function(u,f=0){return vl(this,u,f,BigInt(0),BigInt(\"0xffffffffffffffff\"))}),s.prototype.writeBigUInt64BE=Mt(function(u,f=0){return El(this,u,f,BigInt(0),BigInt(\"0xffffffffffffffff\"))}),s.prototype.writeIntLE=function(u,f,b,A){if(u=+u,f=f>>>0,!A){let se=Math.pow(2,8*b-1);Ce(this,u,f,b,se-1,-se);}let T=0,P=1,$=0;for(this[f]=u&255;++T>0)-$&255;return f+b},s.prototype.writeIntBE=function(u,f,b,A){if(u=+u,f=f>>>0,!A){let se=Math.pow(2,8*b-1);Ce(this,u,f,b,se-1,-se);}let T=b-1,P=1,$=0;for(this[f+T]=u&255;--T>=0&&(P*=256);)u<0&&$===0&&this[f+T+1]!==0&&($=1),this[f+T]=(u/P>>0)-$&255;return f+b},s.prototype.writeInt8=function(u,f,b){return u=+u,f=f>>>0,b||Ce(this,u,f,1,127,-128),u<0&&(u=255+u+1),this[f]=u&255,f+1},s.prototype.writeInt16LE=function(u,f,b){return u=+u,f=f>>>0,b||Ce(this,u,f,2,32767,-32768),this[f]=u&255,this[f+1]=u>>>8,f+2},s.prototype.writeInt16BE=function(u,f,b){return u=+u,f=f>>>0,b||Ce(this,u,f,2,32767,-32768),this[f]=u>>>8,this[f+1]=u&255,f+2},s.prototype.writeInt32LE=function(u,f,b){return u=+u,f=f>>>0,b||Ce(this,u,f,4,2147483647,-2147483648),this[f]=u&255,this[f+1]=u>>>8,this[f+2]=u>>>16,this[f+3]=u>>>24,f+4},s.prototype.writeInt32BE=function(u,f,b){return u=+u,f=f>>>0,b||Ce(this,u,f,4,2147483647,-2147483648),u<0&&(u=4294967295+u+1),this[f]=u>>>24,this[f+1]=u>>>16,this[f+2]=u>>>8,this[f+3]=u&255,f+4},s.prototype.writeBigInt64LE=Mt(function(u,f=0){return vl(this,u,f,-BigInt(\"0x8000000000000000\"),BigInt(\"0x7fffffffffffffff\"))}),s.prototype.writeBigInt64BE=Mt(function(u,f=0){return El(this,u,f,-BigInt(\"0x8000000000000000\"),BigInt(\"0x7fffffffffffffff\"))});function Sl(p,u,f,b,A,T){if(f+b>p.length)throw new RangeError(\"Index out of range\");if(f<0)throw new RangeError(\"Index out of range\")}function Al(p,u,f,b,A){return u=+u,f=f>>>0,A||Sl(p,u,f,4),e.write(p,u,f,b,23,4),f+4}s.prototype.writeFloatLE=function(u,f,b){return Al(this,u,f,!0,b)},s.prototype.writeFloatBE=function(u,f,b){return Al(this,u,f,!1,b)};function Il(p,u,f,b,A){return u=+u,f=f>>>0,A||Sl(p,u,f,8),e.write(p,u,f,b,52,8),f+8}s.prototype.writeDoubleLE=function(u,f,b){return Il(this,u,f,!0,b)},s.prototype.writeDoubleBE=function(u,f,b){return Il(this,u,f,!1,b)},s.prototype.copy=function(u,f,b,A){if(!s.isBuffer(u))throw new TypeError(\"argument should be a Buffer\");if(b||(b=0),!A&&A!==0&&(A=this.length),f>=u.length&&(f=u.length),f||(f=0),A>0&&A=this.length)throw new RangeError(\"Index out of range\");if(A<0)throw new RangeError(\"sourceEnd out of bounds\");A>this.length&&(A=this.length),u.length-f>>0,b=b===void 0?this.length:b>>>0,u||(u=0);let T;if(typeof u==\"number\")for(T=f;T2**32?A=Tl(String(f)):typeof f==\"bigint\"&&(A=String(f),(f>BigInt(2)**BigInt(32)||f<-(BigInt(2)**BigInt(32)))&&(A=Tl(A)),A+=\"n\"),b+=` It must be ${u}. Received ${A}`,b},RangeError);function Tl(p){let u=\"\",f=p.length,b=p[0]===\"-\"?1:0;for(;f>=b+4;f-=3)u=`_${p.slice(f-3,f)}${u}`;return `${p.slice(0,f)}${u}`}function jg(p,u,f){Mr(u,\"offset\"),(p[u]===void 0||p[u+f]===void 0)&&fi(u,p.length-(f+1));}function Rl(p,u,f,b,A,T){if(p>f||p= 0${P} and < 2${P} ** ${(T+1)*8}${P}`:$=`>= -(2${P} ** ${(T+1)*8-1}${P}) and < 2 ** ${(T+1)*8-1}${P}`,new xr.ERR_OUT_OF_RANGE(\"value\",$,p)}jg(b,A,T);}function Mr(p,u){if(typeof p!=\"number\")throw new xr.ERR_INVALID_ARG_TYPE(u,\"number\",p)}function fi(p,u,f){throw Math.floor(p)!==p?(Mr(p,f),new xr.ERR_OUT_OF_RANGE(\"offset\",\"an integer\",p)):u<0?new xr.ERR_BUFFER_OUT_OF_BOUNDS:new xr.ERR_OUT_OF_RANGE(\"offset\",`>= ${0} and <= ${u}`,p)}let Fg=/[^+/0-9A-Za-z-_]/g;function Wg(p){if(p=p.split(\"=\")[0],p=p.trim().replace(Fg,\"\"),p.length<2)return \"\";for(;p.length%4!==0;)p=p+\"=\";return p}function ps(p,u){u=u||1/0;let f,b=p.length,A=null,T=[];for(let P=0;P55295&&f<57344){if(!A){if(f>56319){(u-=3)>-1&&T.push(239,191,189);continue}else if(P+1===b){(u-=3)>-1&&T.push(239,191,189);continue}A=f;continue}if(f<56320){(u-=3)>-1&&T.push(239,191,189),A=f;continue}f=(A-55296<<10|f-56320)+65536;}else A&&(u-=3)>-1&&T.push(239,191,189);if(A=null,f<128){if((u-=1)<0)break;T.push(f);}else if(f<2048){if((u-=2)<0)break;T.push(f>>6|192,f&63|128);}else if(f<65536){if((u-=3)<0)break;T.push(f>>12|224,f>>6&63|128,f&63|128);}else if(f<1114112){if((u-=4)<0)break;T.push(f>>18|240,f>>12&63|128,f>>6&63|128,f&63|128);}else throw new Error(\"Invalid code point\")}return T}function $g(p){let u=[];for(let f=0;f>8,A=f%256,T.push(A),T.push(b);return T}function Cl(p){return t.toByteArray(Wg(p))}function ji(p,u,f,b){let A;for(A=0;A=u.length||A>=p.length);++A)u[A+f]=p[A];return A}function Ye(p,u){return p instanceof u||p!=null&&p.constructor!=null&&p.constructor.name!=null&&p.constructor.name===u.name}function gs(p){return p!==p}let Vg=function(){let p=\"0123456789abcdef\",u=new Array(256);for(let f=0;f<16;++f){let b=f*16;for(let A=0;A<16;++A)u[b+A]=p[f]+p[A];}return u}();function Mt(p){return typeof BigInt>\"u\"?zg:p}function zg(){throw new Error(\"BigInt not supported\")}return Zt}var ci,Vu,Hi,zu,Zt,Ku,Ut,x,ty,ry,be=_e(()=>{_();v();m();ci={},Vu=!1;Hi={},zu=!1;Zt={},Ku=!1;Ut=ey();Ut.Buffer;Ut.SlowBuffer;Ut.INSPECT_MAX_BYTES;Ut.kMaxLength;x=Ut.Buffer,ty=Ut.INSPECT_MAX_BYTES,ry=Ut.kMaxLength;});var v=_e(()=>{be();});var Gu=M(vs=>{_();v();m();Object.defineProperty(vs,\"__esModule\",{value:!0});var ms=class{constructor(e){this.aliasToTopic={},this.max=e;}put(e,r){return r===0||r>this.max?!1:(this.aliasToTopic[r]=e,this.length=Object.keys(this.aliasToTopic).length,!0)}getTopicByAlias(e){return this.aliasToTopic[e]}clear(){this.aliasToTopic={};}};vs.default=ms;});var ce=M((xA,Qu)=>{_();v();m();Qu.exports={ArrayIsArray(t){return Array.isArray(t)},ArrayPrototypeIncludes(t,e){return t.includes(e)},ArrayPrototypeIndexOf(t,e){return t.indexOf(e)},ArrayPrototypeJoin(t,e){return t.join(e)},ArrayPrototypeMap(t,e){return t.map(e)},ArrayPrototypePop(t,e){return t.pop(e)},ArrayPrototypePush(t,e){return t.push(e)},ArrayPrototypeSlice(t,e,r){return t.slice(e,r)},Error,FunctionPrototypeCall(t,e,...r){return t.call(e,...r)},FunctionPrototypeSymbolHasInstance(t,e){return Function.prototype[Symbol.hasInstance].call(t,e)},MathFloor:Math.floor,Number,NumberIsInteger:Number.isInteger,NumberIsNaN:Number.isNaN,NumberMAX_SAFE_INTEGER:Number.MAX_SAFE_INTEGER,NumberMIN_SAFE_INTEGER:Number.MIN_SAFE_INTEGER,NumberParseInt:Number.parseInt,ObjectDefineProperties(t,e){return Object.defineProperties(t,e)},ObjectDefineProperty(t,e,r){return Object.defineProperty(t,e,r)},ObjectGetOwnPropertyDescriptor(t,e){return Object.getOwnPropertyDescriptor(t,e)},ObjectKeys(t){return Object.keys(t)},ObjectSetPrototypeOf(t,e){return Object.setPrototypeOf(t,e)},Promise,PromisePrototypeCatch(t,e){return t.catch(e)},PromisePrototypeThen(t,e,r){return t.then(e,r)},PromiseReject(t){return Promise.reject(t)},ReflectApply:Reflect.apply,RegExpPrototypeTest(t,e){return t.test(e)},SafeSet:Set,String,StringPrototypeSlice(t,e,r){return t.slice(e,r)},StringPrototypeToLowerCase(t){return t.toLowerCase()},StringPrototypeToUpperCase(t){return t.toUpperCase()},StringPrototypeTrim(t){return t.trim()},Symbol,SymbolFor:Symbol.for,SymbolAsyncIterator:Symbol.asyncIterator,SymbolHasInstance:Symbol.hasInstance,SymbolIterator:Symbol.iterator,TypedArrayPrototypeSet(t,e,r){return t.set(e,r)},Uint8Array};});var Je=M(($A,Ss)=>{_();v();m();var iy=(be(),X(me)),ny=Object.getPrototypeOf(async function(){}).constructor,Yu=globalThis.Blob||iy.Blob,sy=typeof Yu<\"u\"?function(e){return e instanceof Yu}:function(e){return !1},Es=class extends Error{constructor(e){if(!Array.isArray(e))throw new TypeError(`Expected input to be an Array, got ${typeof e}`);let r=\"\";for(let i=0;i{t=i,e=n;}),resolve:t,reject:e}},promisify(t){return new Promise((e,r)=>{t((i,...n)=>i?r(i):e(...n));})},debuglog(){return function(){}},format(t,...e){return t.replace(/%([sdifj])/g,function(...[r,i]){let n=e.shift();return i===\"f\"?n.toFixed(6):i===\"j\"?JSON.stringify(n):i===\"s\"&&typeof n==\"object\"?`${n.constructor!==Object?n.constructor.name:\"\"} {}`.trim():n.toString()})},inspect(t){switch(typeof t){case\"string\":if(t.includes(\"'\"))if(t.includes('\"')){if(!t.includes(\"`\")&&!t.includes(\"${\"))return `\\`${t}\\``}else return `\"${t}\"`;return `'${t}'`;case\"number\":return isNaN(t)?\"NaN\":Object.is(t,-0)?String(t):t;case\"bigint\":return `${String(t)}n`;case\"boolean\":case\"undefined\":return String(t);case\"object\":return \"{}\"}},types:{isAsyncFunction(t){return t instanceof ny},isArrayBufferView(t){return ArrayBuffer.isView(t)}},isBlob:sy};Ss.exports.promisify.custom=Symbol.for(\"nodejs.util.promisify.custom\");});var zi=M((ZA,Vi)=>{_();v();m();var{AbortController:Ju,AbortSignal:oy}=typeof self<\"u\"?self:typeof window<\"u\"?window:void 0;Vi.exports=Ju;Vi.exports.AbortSignal=oy;Vi.exports.default=Ju;});var Ae=M((uI,ef)=>{_();v();m();var{format:ay,inspect:Ki,AggregateError:ly}=Je(),uy=globalThis.AggregateError||ly,fy=Symbol(\"kIsNodeError\"),cy=[\"string\",\"function\",\"number\",\"object\",\"Function\",\"Object\",\"boolean\",\"bigint\",\"symbol\"],hy=/^([A-Z][a-z0-9]*)+$/,dy=\"__node_internal_\",Gi={};function er(t,e){if(!t)throw new Gi.ERR_INTERNAL_ASSERTION(e)}function Xu(t){let e=\"\",r=t.length,i=t[0]===\"-\"?1:0;for(;r>=i+4;r-=3)e=`_${t.slice(r-3,r)}${e}`;return `${t.slice(0,r)}${e}`}function py(t,e,r){if(typeof e==\"function\")return er(e.length<=r.length,`Code: ${t}; The provided arguments length (${r.length}) does not match the required ones (${e.length}).`),e(...r);let i=(e.match(/%[dfijoOs]/g)||[]).length;return er(i===r.length,`Code: ${t}; The provided arguments length (${r.length}) does not match the required ones (${i}).`),r.length===0?e:ay(e,...r)}function ve(t,e,r){r||(r=Error);class i extends r{constructor(...o){super(py(t,e,o));}toString(){return `${this.name} [${t}]: ${this.message}`}}Object.defineProperties(i.prototype,{name:{value:r.name,writable:!0,enumerable:!1,configurable:!0},toString:{value(){return `${this.name} [${t}]: ${this.message}`},writable:!0,enumerable:!1,configurable:!0}}),i.prototype.code=t,i.prototype[fy]=!0,Gi[t]=i;}function Zu(t){let e=dy+t.name;return Object.defineProperty(t,\"name\",{value:e}),t}function gy(t,e){if(t&&e&&t!==e){if(Array.isArray(e.errors))return e.errors.push(t),e;let r=new uy([e,t],e.message);return r.code=e.code,r}return t||e}var As=class extends Error{constructor(e=\"The operation was aborted\",r=void 0){if(r!==void 0&&typeof r!=\"object\")throw new Gi.ERR_INVALID_ARG_TYPE(\"options\",\"Object\",r);super(e,r),this.code=\"ABORT_ERR\",this.name=\"AbortError\";}};ve(\"ERR_ASSERTION\",\"%s\",Error);ve(\"ERR_INVALID_ARG_TYPE\",(t,e,r)=>{er(typeof t==\"string\",\"'name' must be a string\"),Array.isArray(e)||(e=[e]);let i=\"The \";t.endsWith(\" argument\")?i+=`${t} `:i+=`\"${t}\" ${t.includes(\".\")?\"property\":\"argument\"} `,i+=\"must be \";let n=[],o=[],s=[];for(let l of e)er(typeof l==\"string\",\"All expected entries have to be of type string\"),cy.includes(l)?n.push(l.toLowerCase()):hy.test(l)?o.push(l):(er(l!==\"object\",'The value \"object\" should be written as \"Object\"'),s.push(l));if(o.length>0){let l=n.indexOf(\"object\");l!==-1&&(n.splice(n,l,1),o.push(\"Object\"));}if(n.length>0){switch(n.length){case 1:i+=`of type ${n[0]}`;break;case 2:i+=`one of type ${n[0]} or ${n[1]}`;break;default:{let l=n.pop();i+=`one of type ${n.join(\", \")}, or ${l}`;}}(o.length>0||s.length>0)&&(i+=\" or \");}if(o.length>0){switch(o.length){case 1:i+=`an instance of ${o[0]}`;break;case 2:i+=`an instance of ${o[0]} or ${o[1]}`;break;default:{let l=o.pop();i+=`an instance of ${o.join(\", \")}, or ${l}`;}}s.length>0&&(i+=\" or \");}switch(s.length){case 0:break;case 1:s[0].toLowerCase()!==s[0]&&(i+=\"an \"),i+=`${s[0]}`;break;case 2:i+=`one of ${s[0]} or ${s[1]}`;break;default:{let l=s.pop();i+=`one of ${s.join(\", \")}, or ${l}`;}}if(r==null)i+=`. Received ${r}`;else if(typeof r==\"function\"&&r.name)i+=`. Received function ${r.name}`;else if(typeof r==\"object\"){var a;if((a=r.constructor)!==null&&a!==void 0&&a.name)i+=`. Received an instance of ${r.constructor.name}`;else {let l=Ki(r,{depth:-1});i+=`. Received ${l}`;}}else {let l=Ki(r,{colors:!1});l.length>25&&(l=`${l.slice(0,25)}...`),i+=`. Received type ${typeof r} (${l})`;}return i},TypeError);ve(\"ERR_INVALID_ARG_VALUE\",(t,e,r=\"is invalid\")=>{let i=Ki(e);return i.length>128&&(i=i.slice(0,128)+\"...\"),`The ${t.includes(\".\")?\"property\":\"argument\"} '${t}' ${r}. Received ${i}`},TypeError);ve(\"ERR_INVALID_RETURN_VALUE\",(t,e,r)=>{var i;let n=r!=null&&(i=r.constructor)!==null&&i!==void 0&&i.name?`instance of ${r.constructor.name}`:`type ${typeof r}`;return `Expected ${t} to be returned from the \"${e}\" function but got ${n}.`},TypeError);ve(\"ERR_MISSING_ARGS\",(...t)=>{er(t.length>0,\"At least one arg needs to be specified\");let e,r=t.length;switch(t=(Array.isArray(t)?t:[t]).map(i=>`\"${i}\"`).join(\" or \"),r){case 1:e+=`The ${t[0]} argument`;break;case 2:e+=`The ${t[0]} and ${t[1]} arguments`;break;default:{let i=t.pop();e+=`The ${t.join(\", \")}, and ${i} arguments`;}break}return `${e} must be specified`},TypeError);ve(\"ERR_OUT_OF_RANGE\",(t,e,r)=>{er(e,'Missing \"range\" argument');let i;return Number.isInteger(r)&&Math.abs(r)>2**32?i=Xu(String(r)):typeof r==\"bigint\"?(i=String(r),(r>2n**32n||r<-(2n**32n))&&(i=Xu(i)),i+=\"n\"):i=Ki(r),`The value of \"${t}\" is out of range. It must be ${e}. Received ${i}`},RangeError);ve(\"ERR_MULTIPLE_CALLBACK\",\"Callback called multiple times\",Error);ve(\"ERR_METHOD_NOT_IMPLEMENTED\",\"The %s method is not implemented\",Error);ve(\"ERR_STREAM_ALREADY_FINISHED\",\"Cannot call %s after a stream was finished\",Error);ve(\"ERR_STREAM_CANNOT_PIPE\",\"Cannot pipe, not readable\",Error);ve(\"ERR_STREAM_DESTROYED\",\"Cannot call %s after a stream was destroyed\",Error);ve(\"ERR_STREAM_NULL_VALUES\",\"May not write null values to stream\",TypeError);ve(\"ERR_STREAM_PREMATURE_CLOSE\",\"Premature close\",Error);ve(\"ERR_STREAM_PUSH_AFTER_EOF\",\"stream.push() after EOF\",Error);ve(\"ERR_STREAM_UNSHIFT_AFTER_END_EVENT\",\"stream.unshift() after end event\",Error);ve(\"ERR_STREAM_WRITE_AFTER_END\",\"write after end\",Error);ve(\"ERR_UNKNOWN_ENCODING\",\"Unknown encoding: %s\",TypeError);ef.exports={AbortError:As,aggregateTwoErrors:Zu(gy),hideStackFrames:Zu,codes:Gi};});var hi=M((_I,ff)=>{_();v();m();var{ArrayIsArray:Ts,ArrayPrototypeIncludes:sf,ArrayPrototypeJoin:of,ArrayPrototypeMap:yy,NumberIsInteger:Rs,NumberIsNaN:by,NumberMAX_SAFE_INTEGER:wy,NumberMIN_SAFE_INTEGER:_y,NumberParseInt:my,ObjectPrototypeHasOwnProperty:vy,RegExpPrototypeExec:af,String:Ey,StringPrototypeToUpperCase:Sy,StringPrototypeTrim:Ay}=ce(),{hideStackFrames:Ue,codes:{ERR_SOCKET_BAD_PORT:Iy,ERR_INVALID_ARG_TYPE:Ie,ERR_INVALID_ARG_VALUE:Ur,ERR_OUT_OF_RANGE:tr,ERR_UNKNOWN_SIGNAL:tf}}=Ae(),{normalizeEncoding:Ty}=Je(),{isAsyncFunction:Ry,isArrayBufferView:Cy}=Je().types,rf={};function By(t){return t===(t|0)}function Py(t){return t===t>>>0}var ky=/^[0-7]+$/,Oy=\"must be a 32-bit unsigned integer or an octal string\";function xy(t,e,r){if(typeof t>\"u\"&&(t=r),typeof t==\"string\"){if(af(ky,t)===null)throw new Ur(e,t,Oy);t=my(t,8);}return lf(t,e),t}var My=Ue((t,e,r=_y,i=wy)=>{if(typeof t!=\"number\")throw new Ie(e,\"number\",t);if(!Rs(t))throw new tr(e,\"an integer\",t);if(ti)throw new tr(e,`>= ${r} && <= ${i}`,t)}),Ly=Ue((t,e,r=-2147483648,i=2147483647)=>{if(typeof t!=\"number\")throw new Ie(e,\"number\",t);if(!Rs(t))throw new tr(e,\"an integer\",t);if(ti)throw new tr(e,`>= ${r} && <= ${i}`,t)}),lf=Ue((t,e,r=!1)=>{if(typeof t!=\"number\")throw new Ie(e,\"number\",t);if(!Rs(t))throw new tr(e,\"an integer\",t);let i=r?1:0,n=4294967295;if(tn)throw new tr(e,`>= ${i} && <= ${n}`,t)});function Cs(t,e){if(typeof t!=\"string\")throw new Ie(e,\"string\",t)}function Uy(t,e,r=void 0,i){if(typeof t!=\"number\")throw new Ie(e,\"number\",t);if(r!=null&&ti||(r!=null||i!=null)&&by(t))throw new tr(e,`${r!=null?`>= ${r}`:\"\"}${r!=null&&i!=null?\" && \":\"\"}${i!=null?`<= ${i}`:\"\"}`,t)}var Ny=Ue((t,e,r)=>{if(!sf(r,t)){let n=\"must be one of: \"+of(yy(r,o=>typeof o==\"string\"?`'${o}'`:Ey(o)),\", \");throw new Ur(e,t,n)}});function uf(t,e){if(typeof t!=\"boolean\")throw new Ie(e,\"boolean\",t)}function Is(t,e,r){return t==null||!vy(t,e)?r:t[e]}var qy=Ue((t,e,r=null)=>{let i=Is(r,\"allowArray\",!1),n=Is(r,\"allowFunction\",!1);if(!Is(r,\"nullable\",!1)&&t===null||!i&&Ts(t)||typeof t!=\"object\"&&(!n||typeof t!=\"function\"))throw new Ie(e,\"Object\",t)}),Dy=Ue((t,e)=>{if(t!=null&&typeof t!=\"object\"&&typeof t!=\"function\")throw new Ie(e,\"a dictionary\",t)}),Bs=Ue((t,e,r=0)=>{if(!Ts(t))throw new Ie(e,\"Array\",t);if(t.length{if(!Cy(t))throw new Ie(e,[\"Buffer\",\"TypedArray\",\"DataView\"],t)});function Hy(t,e){let r=Ty(e),i=t.length;if(r===\"hex\"&&i%2!==0)throw new Ur(\"encoding\",e,`is invalid for data of length ${i}`)}function Vy(t,e=\"Port\",r=!0){if(typeof t!=\"number\"&&typeof t!=\"string\"||typeof t==\"string\"&&Ay(t).length===0||+t!==+t>>>0||t>65535||t===0&&!r)throw new Iy(e,t,r);return t|0}var zy=Ue((t,e)=>{if(t!==void 0&&(t===null||typeof t!=\"object\"||!(\"aborted\"in t)))throw new Ie(e,\"AbortSignal\",t)}),Ky=Ue((t,e)=>{if(typeof t!=\"function\")throw new Ie(e,\"Function\",t)}),Gy=Ue((t,e)=>{if(typeof t!=\"function\"||Ry(t))throw new Ie(e,\"Function\",t)}),Qy=Ue((t,e)=>{if(t!==void 0)throw new Ie(e,\"undefined\",t)});function Yy(t,e,r){if(!sf(r,t))throw new Ie(e,`('${of(r,\"|\")}')`,t)}var Jy=/^(?:<[^>]*>)(?:\\s*;\\s*[^;\"\\s]+(?:=(\")?[^;\"\\s]*\\1)?)*$/;function nf(t,e){if(typeof t>\"u\"||!af(Jy,t))throw new Ur(e,t,'must be an array or string of format \"; rel=preload; as=style\"')}function Xy(t){if(typeof t==\"string\")return nf(t,\"hints\"),t;if(Ts(t)){let e=t.length,r=\"\";if(e===0)return r;for(let i=0;i; rel=preload; as=style\"')}ff.exports={isInt32:By,isUint32:Py,parseFileMode:xy,validateArray:Bs,validateStringArray:jy,validateBooleanArray:Fy,validateBoolean:uf,validateBuffer:$y,validateDictionary:Dy,validateEncoding:Hy,validateFunction:Ky,validateInt32:Ly,validateInteger:My,validateNumber:Uy,validateObject:qy,validateOneOf:Ny,validatePlainFunction:Gy,validatePort:Vy,validateSignalName:Wy,validateString:Cs,validateUint32:lf,validateUndefined:Qy,validateUnion:Yy,validateAbortSignal:zy,validateLinkHeaderValue:Xy};});var Nt=M((BI,pf)=>{_();v();m();var ae=pf.exports={},Xe,Ze;function Ps(){throw new Error(\"setTimeout has not been defined\")}function ks(){throw new Error(\"clearTimeout has not been defined\")}(function(){try{typeof setTimeout==\"function\"?Xe=setTimeout:Xe=Ps;}catch{Xe=Ps;}try{typeof clearTimeout==\"function\"?Ze=clearTimeout:Ze=ks;}catch{Ze=ks;}})();function cf(t){if(Xe===setTimeout)return setTimeout(t,0);if((Xe===Ps||!Xe)&&setTimeout)return Xe=setTimeout,setTimeout(t,0);try{return Xe(t,0)}catch{try{return Xe.call(null,t,0)}catch{return Xe.call(this,t,0)}}}function Zy(t){if(Ze===clearTimeout)return clearTimeout(t);if((Ze===ks||!Ze)&&clearTimeout)return Ze=clearTimeout,clearTimeout(t);try{return Ze(t)}catch{try{return Ze.call(null,t)}catch{return Ze.call(this,t)}}}var _t=[],Nr=!1,rr,Qi=-1;function eb(){!Nr||!rr||(Nr=!1,rr.length?_t=rr.concat(_t):Qi=-1,_t.length&&hf());}function hf(){if(!Nr){var t=cf(eb);Nr=!0;for(var e=_t.length;e;){for(rr=_t,_t=[];++Qi1)for(var r=1;r{_();v();m();var{Symbol:Yi,SymbolAsyncIterator:gf,SymbolIterator:yf,SymbolFor:bf}=ce(),wf=Yi(\"kDestroyed\"),_f=Yi(\"kIsErrored\"),Os=Yi(\"kIsReadable\"),mf=Yi(\"kIsDisturbed\"),tb=bf(\"nodejs.webstream.isClosedPromise\"),rb=bf(\"nodejs.webstream.controllerErrorFunction\");function Ji(t,e=!1){var r;return !!(t&&typeof t.pipe==\"function\"&&typeof t.on==\"function\"&&(!e||typeof t.pause==\"function\"&&typeof t.resume==\"function\")&&(!t._writableState||((r=t._readableState)===null||r===void 0?void 0:r.readable)!==!1)&&(!t._writableState||t._readableState))}function Xi(t){var e;return !!(t&&typeof t.write==\"function\"&&typeof t.on==\"function\"&&(!t._readableState||((e=t._writableState)===null||e===void 0?void 0:e.writable)!==!1))}function ib(t){return !!(t&&typeof t.pipe==\"function\"&&t._readableState&&typeof t.on==\"function\"&&typeof t.write==\"function\")}function et(t){return t&&(t._readableState||t._writableState||typeof t.write==\"function\"&&typeof t.on==\"function\"||typeof t.pipe==\"function\"&&typeof t.on==\"function\")}function vf(t){return !!(t&&!et(t)&&typeof t.pipeThrough==\"function\"&&typeof t.getReader==\"function\"&&typeof t.cancel==\"function\")}function Ef(t){return !!(t&&!et(t)&&typeof t.getWriter==\"function\"&&typeof t.abort==\"function\")}function Sf(t){return !!(t&&!et(t)&&typeof t.readable==\"object\"&&typeof t.writable==\"object\")}function nb(t){return vf(t)||Ef(t)||Sf(t)}function sb(t,e){return t==null?!1:e===!0?typeof t[gf]==\"function\":e===!1?typeof t[yf]==\"function\":typeof t[gf]==\"function\"||typeof t[yf]==\"function\"}function Zi(t){if(!et(t))return null;let e=t._writableState,r=t._readableState,i=e||r;return !!(t.destroyed||t[wf]||i!=null&&i.destroyed)}function Af(t){if(!Xi(t))return null;if(t.writableEnded===!0)return !0;let e=t._writableState;return e!=null&&e.errored?!1:typeof e?.ended!=\"boolean\"?null:e.ended}function ob(t,e){if(!Xi(t))return null;if(t.writableFinished===!0)return !0;let r=t._writableState;return r!=null&&r.errored?!1:typeof r?.finished!=\"boolean\"?null:!!(r.finished||e===!1&&r.ended===!0&&r.length===0)}function ab(t){if(!Ji(t))return null;if(t.readableEnded===!0)return !0;let e=t._readableState;return !e||e.errored?!1:typeof e?.ended!=\"boolean\"?null:e.ended}function If(t,e){if(!Ji(t))return null;let r=t._readableState;return r!=null&&r.errored?!1:typeof r?.endEmitted!=\"boolean\"?null:!!(r.endEmitted||e===!1&&r.ended===!0&&r.length===0)}function Tf(t){return t&&t[Os]!=null?t[Os]:typeof t?.readable!=\"boolean\"?null:Zi(t)?!1:Ji(t)&&t.readable&&!If(t)}function Rf(t){return typeof t?.writable!=\"boolean\"?null:Zi(t)?!1:Xi(t)&&t.writable&&!Af(t)}function lb(t,e){return et(t)?Zi(t)?!0:!(e?.readable!==!1&&Tf(t)||e?.writable!==!1&&Rf(t)):null}function ub(t){var e,r;return et(t)?t.writableErrored?t.writableErrored:(e=(r=t._writableState)===null||r===void 0?void 0:r.errored)!==null&&e!==void 0?e:null:null}function fb(t){var e,r;return et(t)?t.readableErrored?t.readableErrored:(e=(r=t._readableState)===null||r===void 0?void 0:r.errored)!==null&&e!==void 0?e:null:null}function cb(t){if(!et(t))return null;if(typeof t.closed==\"boolean\")return t.closed;let e=t._writableState,r=t._readableState;return typeof e?.closed==\"boolean\"||typeof r?.closed==\"boolean\"?e?.closed||r?.closed:typeof t._closed==\"boolean\"&&Cf(t)?t._closed:null}function Cf(t){return typeof t._closed==\"boolean\"&&typeof t._defaultKeepAlive==\"boolean\"&&typeof t._removedConnection==\"boolean\"&&typeof t._removedContLen==\"boolean\"}function Bf(t){return typeof t._sent100==\"boolean\"&&Cf(t)}function hb(t){var e;return typeof t._consuming==\"boolean\"&&typeof t._dumped==\"boolean\"&&((e=t.req)===null||e===void 0?void 0:e.upgradeOrConnect)===void 0}function db(t){if(!et(t))return null;let e=t._writableState,r=t._readableState,i=e||r;return !i&&Bf(t)||!!(i&&i.autoDestroy&&i.emitClose&&i.closed===!1)}function pb(t){var e;return !!(t&&((e=t[mf])!==null&&e!==void 0?e:t.readableDidRead||t.readableAborted))}function gb(t){var e,r,i,n,o,s,a,l,c,h;return !!(t&&((e=(r=(i=(n=(o=(s=t[_f])!==null&&s!==void 0?s:t.readableErrored)!==null&&o!==void 0?o:t.writableErrored)!==null&&n!==void 0?n:(a=t._readableState)===null||a===void 0?void 0:a.errorEmitted)!==null&&i!==void 0?i:(l=t._writableState)===null||l===void 0?void 0:l.errorEmitted)!==null&&r!==void 0?r:(c=t._readableState)===null||c===void 0?void 0:c.errored)!==null&&e!==void 0?e:!((h=t._writableState)===null||h===void 0)&&h.errored))}Pf.exports={kDestroyed:wf,isDisturbed:pb,kIsDisturbed:mf,isErrored:gb,kIsErrored:_f,isReadable:Tf,kIsReadable:Os,kIsClosedPromise:tb,kControllerErrorFunction:rb,isClosed:cb,isDestroyed:Zi,isDuplexNodeStream:ib,isFinished:lb,isIterable:sb,isReadableNodeStream:Ji,isReadableStream:vf,isReadableEnded:ab,isReadableFinished:If,isReadableErrored:fb,isNodeStream:et,isWebStream:nb,isWritable:Rf,isWritableNodeStream:Xi,isWritableStream:Ef,isWritableEnded:Af,isWritableFinished:ob,isWritableErrored:ub,isServerRequest:hb,isServerResponse:Bf,willEmitClose:db,isTransformStream:Sf};});var vt=M((QI,Ns)=>{_();v();m();var qt=Nt(),{AbortError:Df,codes:yb}=Ae(),{ERR_INVALID_ARG_TYPE:bb,ERR_STREAM_PREMATURE_CLOSE:kf}=yb,{kEmptyObject:Ms,once:Ls}=Je(),{validateAbortSignal:wb,validateFunction:_b,validateObject:mb,validateBoolean:vb}=hi(),{Promise:Eb,PromisePrototypeThen:Sb}=ce(),{isClosed:Ab,isReadable:Of,isReadableNodeStream:xs,isReadableStream:Ib,isReadableFinished:xf,isReadableErrored:Mf,isWritable:Lf,isWritableNodeStream:Uf,isWritableStream:Tb,isWritableFinished:Nf,isWritableErrored:qf,isNodeStream:Rb,willEmitClose:Cb,kIsClosedPromise:Bb}=tt();function Pb(t){return t.setHeader&&typeof t.abort==\"function\"}var Us=()=>{};function jf(t,e,r){var i,n;if(arguments.length===2?(r=e,e=Ms):e==null?e=Ms:mb(e,\"options\"),_b(r,\"callback\"),wb(e.signal,\"options.signal\"),r=Ls(r),Ib(t)||Tb(t))return kb(t,e,r);if(!Rb(t))throw new bb(\"stream\",[\"ReadableStream\",\"WritableStream\",\"Stream\"],t);let o=(i=e.readable)!==null&&i!==void 0?i:xs(t),s=(n=e.writable)!==null&&n!==void 0?n:Uf(t),a=t._writableState,l=t._readableState,c=()=>{t.writable||g();},h=Cb(t)&&xs(t)===o&&Uf(t)===s,d=Nf(t,!1),g=()=>{d=!0,t.destroyed&&(h=!1),!(h&&(!t.readable||o))&&(!o||y)&&r.call(t);},y=xf(t,!1),w=()=>{y=!0,t.destroyed&&(h=!1),!(h&&(!t.writable||s))&&(!s||d)&&r.call(t);},S=N=>{r.call(t,N);},E=Ab(t),I=()=>{E=!0;let N=qf(t)||Mf(t);if(N&&typeof N!=\"boolean\")return r.call(t,N);if(o&&!y&&xs(t,!0)&&!xf(t,!1))return r.call(t,new kf);if(s&&!d&&!Nf(t,!1))return r.call(t,new kf);r.call(t);},C=()=>{E=!0;let N=qf(t)||Mf(t);if(N&&typeof N!=\"boolean\")return r.call(t,N);r.call(t);},R=()=>{t.req.on(\"finish\",g);};Pb(t)?(t.on(\"complete\",g),h||t.on(\"abort\",I),t.req?R():t.on(\"request\",R)):s&&!a&&(t.on(\"end\",c),t.on(\"close\",c)),!h&&typeof t.aborted==\"boolean\"&&t.on(\"aborted\",I),t.on(\"end\",w),t.on(\"finish\",g),e.error!==!1&&t.on(\"error\",S),t.on(\"close\",I),E?qt.nextTick(I):a!=null&&a.errorEmitted||l!=null&&l.errorEmitted?h||qt.nextTick(C):(!o&&(!h||Of(t))&&(d||Lf(t)===!1)||!s&&(!h||Lf(t))&&(y||Of(t)===!1)||l&&t.req&&t.aborted)&&qt.nextTick(C);let U=()=>{r=Us,t.removeListener(\"aborted\",I),t.removeListener(\"complete\",g),t.removeListener(\"abort\",I),t.removeListener(\"request\",R),t.req&&t.req.removeListener(\"finish\",g),t.removeListener(\"end\",c),t.removeListener(\"close\",c),t.removeListener(\"finish\",g),t.removeListener(\"end\",w),t.removeListener(\"error\",S),t.removeListener(\"close\",I);};if(e.signal&&!E){let N=()=>{let W=r;U(),W.call(t,new Df(void 0,{cause:e.signal.reason}));};if(e.signal.aborted)qt.nextTick(N);else {let W=r;r=Ls((...K)=>{e.signal.removeEventListener(\"abort\",N),W.apply(t,K);}),e.signal.addEventListener(\"abort\",N);}}return U}function kb(t,e,r){let i=!1,n=Us;if(e.signal)if(n=()=>{i=!0,r.call(t,new Df(void 0,{cause:e.signal.reason}));},e.signal.aborted)qt.nextTick(n);else {let s=r;r=Ls((...a)=>{e.signal.removeEventListener(\"abort\",n),s.apply(t,a);}),e.signal.addEventListener(\"abort\",n);}let o=(...s)=>{i||qt.nextTick(()=>r.apply(t,s));};return Sb(t[Bb].promise,o,o),Us}function Ob(t,e){var r;let i=!1;return e===null&&(e=Ms),(r=e)!==null&&r!==void 0&&r.cleanup&&(vb(e.cleanup,\"cleanup\"),i=e.cleanup),new Eb((n,o)=>{let s=jf(t,e,a=>{i&&s(),a?o(a):n();});})}Ns.exports=jf;Ns.exports.finished=Ob;});var ir=M((sT,Gf)=>{_();v();m();var rt=Nt(),{aggregateTwoErrors:xb,codes:{ERR_MULTIPLE_CALLBACK:Mb},AbortError:Lb}=Ae(),{Symbol:$f}=ce(),{kDestroyed:Ub,isDestroyed:Nb,isFinished:qb,isServerRequest:Db}=tt(),Hf=$f(\"kDestroy\"),qs=$f(\"kConstruct\");function Vf(t,e,r){t&&(t.stack,e&&!e.errored&&(e.errored=t),r&&!r.errored&&(r.errored=t));}function jb(t,e){let r=this._readableState,i=this._writableState,n=i||r;return i!=null&&i.destroyed||r!=null&&r.destroyed?(typeof e==\"function\"&&e(),this):(Vf(t,i,r),i&&(i.destroyed=!0),r&&(r.destroyed=!0),n.constructed?Ff(this,t,e):this.once(Hf,function(o){Ff(this,xb(o,t),e);}),this)}function Ff(t,e,r){let i=!1;function n(o){if(i)return;i=!0;let s=t._readableState,a=t._writableState;Vf(o,a,s),a&&(a.closed=!0),s&&(s.closed=!0),typeof r==\"function\"&&r(o),o?rt.nextTick(Fb,t,o):rt.nextTick(zf,t);}try{t._destroy(e||null,n);}catch(o){n(o);}}function Fb(t,e){Ds(t,e),zf(t);}function zf(t){let e=t._readableState,r=t._writableState;r&&(r.closeEmitted=!0),e&&(e.closeEmitted=!0),(r!=null&&r.emitClose||e!=null&&e.emitClose)&&t.emit(\"close\");}function Ds(t,e){let r=t._readableState,i=t._writableState;i!=null&&i.errorEmitted||r!=null&&r.errorEmitted||(i&&(i.errorEmitted=!0),r&&(r.errorEmitted=!0),t.emit(\"error\",e));}function Wb(){let t=this._readableState,e=this._writableState;t&&(t.constructed=!0,t.closed=!1,t.closeEmitted=!1,t.destroyed=!1,t.errored=null,t.errorEmitted=!1,t.reading=!1,t.ended=t.readable===!1,t.endEmitted=t.readable===!1),e&&(e.constructed=!0,e.destroyed=!1,e.closed=!1,e.closeEmitted=!1,e.errored=null,e.errorEmitted=!1,e.finalCalled=!1,e.prefinished=!1,e.ended=e.writable===!1,e.ending=e.writable===!1,e.finished=e.writable===!1);}function js(t,e,r){let i=t._readableState,n=t._writableState;if(n!=null&&n.destroyed||i!=null&&i.destroyed)return this;i!=null&&i.autoDestroy||n!=null&&n.autoDestroy?t.destroy(e):e&&(e.stack,n&&!n.errored&&(n.errored=e),i&&!i.errored&&(i.errored=e),r?rt.nextTick(Ds,t,e):Ds(t,e));}function $b(t,e){if(typeof t._construct!=\"function\")return;let r=t._readableState,i=t._writableState;r&&(r.constructed=!1),i&&(i.constructed=!1),t.once(qs,e),!(t.listenerCount(qs)>1)&&rt.nextTick(Hb,t);}function Hb(t){let e=!1;function r(i){if(e){js(t,i??new Mb);return}e=!0;let n=t._readableState,o=t._writableState,s=o||n;n&&(n.constructed=!0),o&&(o.constructed=!0),s.destroyed?t.emit(Hf,i):i?js(t,i,!0):rt.nextTick(Vb,t);}try{t._construct(i=>{rt.nextTick(r,i);});}catch(i){rt.nextTick(r,i);}}function Vb(t){t.emit(qs);}function Wf(t){return t?.setHeader&&typeof t.abort==\"function\"}function Kf(t){t.emit(\"close\");}function zb(t,e){t.emit(\"error\",e),rt.nextTick(Kf,t);}function Kb(t,e){!t||Nb(t)||(!e&&!qb(t)&&(e=new Lb),Db(t)?(t.socket=null,t.destroy(e)):Wf(t)?t.abort():Wf(t.req)?t.req.abort():typeof t.destroy==\"function\"?t.destroy(e):typeof t.close==\"function\"?t.close():e?rt.nextTick(zb,t,e):rt.nextTick(Kf,t),t.destroyed||(t[Ub]=!0));}Gf.exports={construct:$b,destroyer:Kb,destroy:jb,undestroy:Wb,errorOrDestroy:js};});function Y(){Y.init.call(this);}function en(t){if(typeof t!=\"function\")throw new TypeError('The \"listener\" argument must be of type Function. Received type '+typeof t)}function nc(t){return t._maxListeners===void 0?Y.defaultMaxListeners:t._maxListeners}function Xf(t,e,r,i){var n,o,s,a;if(en(r),(o=t._events)===void 0?(o=t._events=Object.create(null),t._eventsCount=0):(o.newListener!==void 0&&(t.emit(\"newListener\",e,r.listener?r.listener:r),o=t._events),s=o[e]),s===void 0)s=o[e]=r,++t._eventsCount;else if(typeof s==\"function\"?s=o[e]=i?[r,s]:[s,r]:i?s.unshift(r):s.push(r),(n=nc(t))>0&&s.length>n&&!s.warned){s.warned=!0;var l=new Error(\"Possible EventEmitter memory leak detected. \"+s.length+\" \"+String(e)+\" listeners added. Use emitter.setMaxListeners() to increase limit\");l.name=\"MaxListenersExceededWarning\",l.emitter=t,l.type=e,l.count=s.length,a=l,console&&console.warn&&console.warn(a);}return t}function Gb(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function Zf(t,e,r){var i={fired:!1,wrapFn:void 0,target:t,type:e,listener:r},n=Gb.bind(i);return n.listener=r,i.wrapFn=n,n}function ec(t,e,r){var i=t._events;if(i===void 0)return [];var n=i[e];return n===void 0?[]:typeof n==\"function\"?r?[n.listener||n]:[n]:r?function(o){for(var s=new Array(o.length),a=0;a{_();v();m();qr=typeof Reflect==\"object\"?Reflect:null,Qf=qr&&typeof qr.apply==\"function\"?qr.apply:function(t,e,r){return Function.prototype.apply.call(t,e,r)};ic=qr&&typeof qr.ownKeys==\"function\"?qr.ownKeys:Object.getOwnPropertySymbols?function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:function(t){return Object.getOwnPropertyNames(t)};Yf=Number.isNaN||function(t){return t!=t};rc=Y,Y.EventEmitter=Y,Y.prototype._events=void 0,Y.prototype._eventsCount=0,Y.prototype._maxListeners=void 0;Jf=10;Object.defineProperty(Y,\"defaultMaxListeners\",{enumerable:!0,get:function(){return Jf},set:function(t){if(typeof t!=\"number\"||t<0||Yf(t))throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received '+t+\".\");Jf=t;}}),Y.init=function(){this._events!==void 0&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0;},Y.prototype.setMaxListeners=function(t){if(typeof t!=\"number\"||t<0||Yf(t))throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received '+t+\".\");return this._maxListeners=t,this},Y.prototype.getMaxListeners=function(){return nc(this)},Y.prototype.emit=function(t){for(var e=[],r=1;r0&&(o=e[0]),o instanceof Error)throw o;var s=new Error(\"Unhandled error.\"+(o?\" (\"+o.message+\")\":\"\"));throw s.context=o,s}var a=n[t];if(a===void 0)return !1;if(typeof a==\"function\")Qf(a,this,e);else {var l=a.length,c=sc(a,l);for(r=0;r=0;o--)if(r[o]===e||r[o].listener===e){s=r[o].listener,n=o;break}if(n<0)return this;n===0?r.shift():function(a,l){for(;l+1=0;i--)this.removeListener(t,e[i]);return this},Y.prototype.listeners=function(t){return ec(this,t,!0)},Y.prototype.rawListeners=function(t){return ec(this,t,!1)},Y.listenerCount=function(t,e){return typeof t.listenerCount==\"function\"?t.listenerCount(e):tc.call(t,e)},Y.prototype.listenerCount=tc,Y.prototype.eventNames=function(){return this._eventsCount>0?ic(this._events):[]};Be=rc;Be.EventEmitter;Be.defaultMaxListeners;Be.init;Be.listenerCount;Be.EventEmitter;Be.defaultMaxListeners;Be.init;Be.listenerCount;});var nr={};Jt(nr,{EventEmitter:()=>Qb,default:()=>Be,defaultMaxListeners:()=>Yb,init:()=>Jb,listenerCount:()=>Xb,on:()=>Zb,once:()=>ew});var Qb,Yb,Jb,Xb,Zb,ew,sr=_e(()=>{_();v();m();Fs();Fs();Be.once=function(t,e){return new Promise((r,i)=>{function n(...s){o!==void 0&&t.removeListener(\"error\",o),r(s);}let o;e!==\"error\"&&(o=s=>{t.removeListener(name,n),i(s);},t.once(\"error\",o)),t.once(e,n);})};Be.on=function(t,e){let r=[],i=[],n=null,o=!1,s={async next(){let c=r.shift();if(c)return createIterResult(c,!1);if(n){let h=Promise.reject(n);return n=null,h}return o?createIterResult(void 0,!0):new Promise((h,d)=>i.push({resolve:h,reject:d}))},async return(){t.removeListener(e,a),t.removeListener(\"error\",l),o=!0;for(let c of i)c.resolve(createIterResult(void 0,!0));return createIterResult(void 0,!0)},throw(c){n=c,t.removeListener(e,a),t.removeListener(\"error\",l);},[Symbol.asyncIterator](){return this}};return t.on(e,a),t.on(\"error\",l),s;function a(...c){let h=i.shift();h?h.resolve(createIterResult(c,!1)):r.push(c);}function l(c){o=!0;let h=i.shift();h?h.reject(c):n=c,s.return();}};({EventEmitter:Qb,defaultMaxListeners:Yb,init:Jb,listenerCount:Xb,on:Zb,once:ew}=Be);});var nn=M((UT,ac)=>{_();v();m();var{ArrayIsArray:tw,ObjectSetPrototypeOf:oc}=ce(),{EventEmitter:tn}=(sr(),X(nr));function rn(t){tn.call(this,t);}oc(rn.prototype,tn.prototype);oc(rn,tn);rn.prototype.pipe=function(t,e){let r=this;function i(h){t.writable&&t.write(h)===!1&&r.pause&&r.pause();}r.on(\"data\",i);function n(){r.readable&&r.resume&&r.resume();}t.on(\"drain\",n),!t._isStdio&&(!e||e.end!==!1)&&(r.on(\"end\",s),r.on(\"close\",a));let o=!1;function s(){o||(o=!0,t.end());}function a(){o||(o=!0,typeof t.destroy==\"function\"&&t.destroy());}function l(h){c(),tn.listenerCount(this,\"error\")===0&&this.emit(\"error\",h);}Ws(r,\"error\",l),Ws(t,\"error\",l);function c(){r.removeListener(\"data\",i),t.removeListener(\"drain\",n),r.removeListener(\"end\",s),r.removeListener(\"close\",a),r.removeListener(\"error\",l),t.removeListener(\"error\",l),r.removeListener(\"end\",c),r.removeListener(\"close\",c),t.removeListener(\"close\",c);}return r.on(\"end\",c),r.on(\"close\",c),t.on(\"close\",c),t.emit(\"pipe\",r),t};function Ws(t,e,r){if(typeof t.prependListener==\"function\")return t.prependListener(e,r);!t._events||!t._events[e]?t.on(e,r):tw(t._events[e])?t._events[e].unshift(r):t._events[e]=[r,t._events[e]];}ac.exports={Stream:rn,prependListener:Ws};});var di=M((zT,sn)=>{_();v();m();var{AbortError:lc,codes:rw}=Ae(),{isNodeStream:uc,isWebStream:iw,kControllerErrorFunction:nw}=tt(),sw=vt(),{ERR_INVALID_ARG_TYPE:fc}=rw,ow=(t,e)=>{if(typeof t!=\"object\"||!(\"aborted\"in t))throw new fc(e,\"AbortSignal\",t)};sn.exports.addAbortSignal=function(e,r){if(ow(e,\"signal\"),!uc(r)&&!iw(r))throw new fc(\"stream\",[\"ReadableStream\",\"WritableStream\",\"Stream\"],r);return sn.exports.addAbortSignalNoValidate(e,r)};sn.exports.addAbortSignalNoValidate=function(t,e){if(typeof t!=\"object\"||!(\"aborted\"in t))return e;let r=uc(e)?()=>{e.destroy(new lc(void 0,{cause:t.reason}));}:()=>{e[nw](new lc(void 0,{cause:t.reason}));};return t.aborted?r():(t.addEventListener(\"abort\",r),sw(e,()=>t.removeEventListener(\"abort\",r))),e};});var dc=M((i2,hc)=>{_();v();m();var{StringPrototypeSlice:cc,SymbolIterator:aw,TypedArrayPrototypeSet:on,Uint8Array:lw}=ce(),{Buffer:$s}=(be(),X(me)),{inspect:uw}=Je();hc.exports=class{constructor(){this.head=null,this.tail=null,this.length=0;}push(e){let r={data:e,next:null};this.length>0?this.tail.next=r:this.head=r,this.tail=r,++this.length;}unshift(e){let r={data:e,next:this.head};this.length===0&&(this.tail=r),this.head=r,++this.length;}shift(){if(this.length===0)return;let e=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,e}clear(){this.head=this.tail=null,this.length=0;}join(e){if(this.length===0)return \"\";let r=this.head,i=\"\"+r.data;for(;(r=r.next)!==null;)i+=e+r.data;return i}concat(e){if(this.length===0)return $s.alloc(0);let r=$s.allocUnsafe(e>>>0),i=this.head,n=0;for(;i;)on(r,i.data,n),n+=i.data.length,i=i.next;return r}consume(e,r){let i=this.head.data;if(eo.length)r+=o,e-=o.length;else {e===o.length?(r+=o,++n,i.next?this.head=i.next:this.head=this.tail=null):(r+=cc(o,0,e),this.head=i,i.data=cc(o,e));break}++n;}while((i=i.next)!==null);return this.length-=n,r}_getBuffer(e){let r=$s.allocUnsafe(e),i=e,n=this.head,o=0;do{let s=n.data;if(e>s.length)on(r,s,i-e),e-=s.length;else {e===s.length?(on(r,s,i-e),++o,n.next?this.head=n.next:this.head=this.tail=null):(on(r,new lw(s.buffer,s.byteOffset,e),i-e),this.head=n,n.data=s.slice(e));break}++o;}while((n=n.next)!==null);return this.length-=o,r}[Symbol.for(\"nodejs.util.inspect.custom\")](e,r){return uw(this,{...r,depth:0,customInspect:!1})}};});var an=M((d2,gc)=>{_();v();m();var{MathFloor:fw,NumberIsInteger:cw}=ce(),{ERR_INVALID_ARG_VALUE:hw}=Ae().codes;function dw(t,e,r){return t.highWaterMark!=null?t.highWaterMark:e?t[r]:null}function pc(t){return t?16:16*1024}function pw(t,e,r,i){let n=dw(e,i,r);if(n!=null){if(!cw(n)||n<0){let o=i?`options.${r}`:\"options.highWaterMark\";throw new hw(o,n)}return fw(n)}return pc(t.objectMode)}gc.exports={getHighWaterMark:pw,getDefaultHighWaterMark:pc};});function wc(t){var e=t.length;if(e%4>0)throw new Error(\"Invalid string. Length must be a multiple of 4\");var r=t.indexOf(\"=\");return r===-1&&(r=e),[r,r===e?0:4-r%4]}function gw(t,e,r){for(var i,n,o=[],s=e;s>18&63]+$e[n>>12&63]+$e[n>>6&63]+$e[63&n]);return o.join(\"\")}function Et(t){if(t>2147483647)throw new RangeError('The value \"'+t+'\" is invalid for option \"size\"');var e=new Uint8Array(t);return Object.setPrototypeOf(e,O.prototype),e}function O(t,e,r){if(typeof t==\"number\"){if(typeof e==\"string\")throw new TypeError('The \"string\" argument must be of type string. Received type number');return Ks(t)}return Cc(t,e,r)}function Cc(t,e,r){if(typeof t==\"string\")return function(o,s){if(typeof s==\"string\"&&s!==\"\"||(s=\"utf8\"),!O.isEncoding(s))throw new TypeError(\"Unknown encoding: \"+s);var a=0|Pc(o,s),l=Et(a),c=l.write(o,s);return c!==a&&(l=l.slice(0,c)),l}(t,e);if(ArrayBuffer.isView(t))return Hs(t);if(t==null)throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof t);if(St(t,ArrayBuffer)||t&&St(t.buffer,ArrayBuffer)||typeof SharedArrayBuffer<\"u\"&&(St(t,SharedArrayBuffer)||t&&St(t.buffer,SharedArrayBuffer)))return mc(t,e,r);if(typeof t==\"number\")throw new TypeError('The \"value\" argument must not be of type number. Received type number');var i=t.valueOf&&t.valueOf();if(i!=null&&i!==t)return O.from(i,e,r);var n=function(o){if(O.isBuffer(o)){var s=0|Ys(o.length),a=Et(s);return a.length===0||o.copy(a,0,0,s),a}if(o.length!==void 0)return typeof o.length!=\"number\"||Js(o.length)?Et(0):Hs(o);if(o.type===\"Buffer\"&&Array.isArray(o.data))return Hs(o.data)}(t);if(n)return n;if(typeof Symbol<\"u\"&&Symbol.toPrimitive!=null&&typeof t[Symbol.toPrimitive]==\"function\")return O.from(t[Symbol.toPrimitive](\"string\"),e,r);throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof t)}function Bc(t){if(typeof t!=\"number\")throw new TypeError('\"size\" argument must be of type number');if(t<0)throw new RangeError('The value \"'+t+'\" is invalid for option \"size\"')}function Ks(t){return Bc(t),Et(t<0?0:0|Ys(t))}function Hs(t){for(var e=t.length<0?0:0|Ys(t.length),r=Et(e),i=0;i=2147483647)throw new RangeError(\"Attempt to allocate Buffer larger than maximum size: 0x\"+2147483647 .toString(16)+\" bytes\");return 0|t}function Pc(t,e){if(O.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||St(t,ArrayBuffer))return t.byteLength;if(typeof t!=\"string\")throw new TypeError('The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);var r=t.length,i=arguments.length>2&&arguments[2]===!0;if(!i&&r===0)return 0;for(var n=!1;;)switch(e){case\"ascii\":case\"latin1\":case\"binary\":return r;case\"utf8\":case\"utf-8\":return Gs(t).length;case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return 2*r;case\"hex\":return r>>>1;case\"base64\":return Mc(t).length;default:if(n)return i?-1:Gs(t).length;e=(\"\"+e).toLowerCase(),n=!0;}}function bw(t,e,r){var i=!1;if((e===void 0||e<0)&&(e=0),e>this.length||((r===void 0||r>this.length)&&(r=this.length),r<=0)||(r>>>=0)<=(e>>>=0))return \"\";for(t||(t=\"utf8\");;)switch(t){case\"hex\":return Tw(this,e,r);case\"utf8\":case\"utf-8\":return Oc(this,e,r);case\"ascii\":return Aw(this,e,r);case\"latin1\":case\"binary\":return Iw(this,e,r);case\"base64\":return Sw(this,e,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return Rw(this,e,r);default:if(i)throw new TypeError(\"Unknown encoding: \"+t);t=(t+\"\").toLowerCase(),i=!0;}}function ar(t,e,r){var i=t[e];t[e]=t[r],t[r]=i;}function vc(t,e,r,i,n){if(t.length===0)return -1;if(typeof r==\"string\"?(i=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),Js(r=+r)&&(r=n?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(n)return -1;r=t.length-1;}else if(r<0){if(!n)return -1;r=0;}if(typeof e==\"string\"&&(e=O.from(e,i)),O.isBuffer(e))return e.length===0?-1:Ec(t,e,r,i,n);if(typeof e==\"number\")return e&=255,typeof Uint8Array.prototype.indexOf==\"function\"?n?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):Ec(t,[e],r,i,n);throw new TypeError(\"val must be string, number or Buffer\")}function Ec(t,e,r,i,n){var o,s=1,a=t.length,l=e.length;if(i!==void 0&&((i=String(i).toLowerCase())===\"ucs2\"||i===\"ucs-2\"||i===\"utf16le\"||i===\"utf-16le\")){if(t.length<2||e.length<2)return -1;s=2,a/=2,l/=2,r/=2;}function c(y,w){return s===1?y[w]:y.readUInt16BE(w*s)}if(n){var h=-1;for(o=r;oa&&(r=a-l),o=r;o>=0;o--){for(var d=!0,g=0;gn&&(i=n):i=n;var o=e.length;i>o/2&&(i=o/2);for(var s=0;s>8,l=s%256,c.push(l),c.push(a);return c}(e,t.length-r),t,r,i)}function Sw(t,e,r){return e===0&&r===t.length?zs.fromByteArray(t):zs.fromByteArray(t.slice(e,r))}function Oc(t,e,r){r=Math.min(t.length,r);for(var i=[],n=e;n239?4:c>223?3:c>191?2:1;if(n+d<=r)switch(d){case 1:c<128&&(h=c);break;case 2:(192&(o=t[n+1]))==128&&(l=(31&c)<<6|63&o)>127&&(h=l);break;case 3:o=t[n+1],s=t[n+2],(192&o)==128&&(192&s)==128&&(l=(15&c)<<12|(63&o)<<6|63&s)>2047&&(l<55296||l>57343)&&(h=l);break;case 4:o=t[n+1],s=t[n+2],a=t[n+3],(192&o)==128&&(192&s)==128&&(192&a)==128&&(l=(15&c)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&l<1114112&&(h=l);}h===null?(h=65533,d=1):h>65535&&(h-=65536,i.push(h>>>10&1023|55296),h=56320|1023&h),i.push(h),n+=d;}return function(g){var y=g.length;if(y<=4096)return String.fromCharCode.apply(String,g);for(var w=\"\",S=0;Si)&&(r=i);for(var n=\"\",o=e;or)throw new RangeError(\"Trying to access beyond buffer length\")}function Pe(t,e,r,i,n,o){if(!O.isBuffer(t))throw new TypeError('\"buffer\" argument must be a Buffer instance');if(e>n||et.length)throw new RangeError(\"Index out of range\")}function xc(t,e,r,i,n,o){if(r+i>t.length)throw new RangeError(\"Index out of range\");if(r<0)throw new RangeError(\"Index out of range\")}function Sc(t,e,r,i,n){return e=+e,r>>>=0,n||xc(t,0,r,4),Dr.write(t,e,r,i,23,4),r+4}function Ac(t,e,r,i,n){return e=+e,r>>>=0,n||xc(t,0,r,8),Dr.write(t,e,r,i,52,8),r+8}function Gs(t,e){var r;e=e||1/0;for(var i=t.length,n=null,o=[],s=0;s55295&&r<57344){if(!n){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===i){(e-=3)>-1&&o.push(239,191,189);continue}n=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),n=r;continue}r=65536+(n-55296<<10|r-56320);}else n&&(e-=3)>-1&&o.push(239,191,189);if(n=null,r<128){if((e-=1)<0)break;o.push(r);}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128);}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128);}else {if(!(r<1114112))throw new Error(\"Invalid code point\");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128);}}return o}function Mc(t){return zs.toByteArray(function(e){if((e=(e=e.split(\"=\")[0]).trim().replace(Cw,\"\")).length<2)return \"\";for(;e.length%4!=0;)e+=\"=\";return e}(t))}function cn(t,e,r,i){for(var n=0;n=e.length||n>=t.length);++n)e[n+r]=t[n];return n}function St(t,e){return t instanceof e||t!=null&&t.constructor!=null&&t.constructor.name!=null&&t.constructor.name===e.name}function Js(t){return t!=t}function Ic(t,e){for(var r in t)e[r]=t[r];}function lr(t,e,r){return it(t,e,r)}function pi(t){var e;switch(this.encoding=function(r){var i=function(n){if(!n)return \"utf8\";for(var o;;)switch(n){case\"utf8\":case\"utf-8\":return \"utf8\";case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return \"utf16le\";case\"latin1\":case\"binary\":return \"latin1\";case\"base64\":case\"ascii\":case\"hex\":return n;default:if(o)return;n=(\"\"+n).toLowerCase(),o=!0;}}(r);if(typeof i!=\"string\"&&(Qs.isEncoding===Tc||!Tc(r)))throw new Error(\"Unknown encoding: \"+r);return i||r}(t),this.encoding){case\"utf16le\":this.text=Ow,this.end=xw,e=4;break;case\"utf8\":this.fillLast=kw,e=4;break;case\"base64\":this.text=Mw,this.end=Lw,e=3;break;default:return this.write=Uw,this.end=Nw,void 0}this.lastNeed=0,this.lastTotal=0,this.lastChar=Qs.allocUnsafe(e);}function Vs(t){return t<=127?0:t>>5==6?2:t>>4==14?3:t>>3==30?4:t>>6==2?-1:-2}function kw(t){var e=this.lastTotal-this.lastNeed,r=function(i,n,o){if((192&n[0])!=128)return i.lastNeed=0,\"\\uFFFD\";if(i.lastNeed>1&&n.length>1){if((192&n[1])!=128)return i.lastNeed=1,\"\\uFFFD\";if(i.lastNeed>2&&n.length>2&&(192&n[2])!=128)return i.lastNeed=2,\"\\uFFFD\"}}(this,t);return r!==void 0?r:this.lastNeed<=t.length?(t.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(t.copy(this.lastChar,e,0,t.length),this.lastNeed-=t.length,void 0)}function Ow(t,e){if((t.length-e)%2==0){var r=t.toString(\"utf16le\",e);if(r){var i=r.charCodeAt(r.length-1);if(i>=55296&&i<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=t[t.length-1],t.toString(\"utf16le\",e,t.length-1)}function xw(t){var e=t&&t.length?this.write(t):\"\";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return e+this.lastChar.toString(\"utf16le\",0,r)}return e}function Mw(t,e){var r=(t.length-e)%3;return r===0?t.toString(\"base64\",e):(this.lastNeed=3-r,this.lastTotal=3,r===1?this.lastChar[0]=t[t.length-1]:(this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1]),t.toString(\"base64\",e,t.length-r))}function Lw(t){var e=t&&t.length?this.write(t):\"\";return this.lastNeed?e+this.lastChar.toString(\"base64\",0,3-this.lastNeed):e}function Uw(t){return t.toString(this.encoding)}function Nw(t){return t&&t.length?this.write(t):\"\"}var Rc,$e,Oe,yc,ln,or,bc,yw,At,zs,Dr,_c,Cw,Bw,un,fn,it,Pw,ur,Qs,Tc,Xs=_e(()=>{_();v();m();for(Rc={byteLength:function(t){var e=wc(t),r=e[0],i=e[1];return 3*(r+i)/4-i},toByteArray:function(t){var e,r,i=wc(t),n=i[0],o=i[1],s=new yc(function(c,h,d){return 3*(h+d)/4-d}(0,n,o)),a=0,l=o>0?n-4:n;for(r=0;r>16&255,s[a++]=e>>8&255,s[a++]=255&e;return o===2&&(e=Oe[t.charCodeAt(r)]<<2|Oe[t.charCodeAt(r+1)]>>4,s[a++]=255&e),o===1&&(e=Oe[t.charCodeAt(r)]<<10|Oe[t.charCodeAt(r+1)]<<4|Oe[t.charCodeAt(r+2)]>>2,s[a++]=e>>8&255,s[a++]=255&e),s},fromByteArray:function(t){for(var e,r=t.length,i=r%3,n=[],o=0,s=r-i;os?s:o+16383));return i===1?(e=t[r-1],n.push($e[e>>2]+$e[e<<4&63]+\"==\")):i===2&&(e=(t[r-2]<<8)+t[r-1],n.push($e[e>>10]+$e[e>>4&63]+$e[e<<2&63]+\"=\")),n.join(\"\")}},$e=[],Oe=[],yc=typeof Uint8Array<\"u\"?Uint8Array:Array,ln=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",or=0,bc=ln.length;or>1,h=-7,d=r?n-1:0,g=r?-1:1,y=t[e+d];for(d+=g,o=y&(1<<-h)-1,y>>=-h,h+=a;h>0;o=256*o+t[e+d],d+=g,h-=8);for(s=o&(1<<-h)-1,o>>=-h,h+=i;h>0;s=256*s+t[e+d],d+=g,h-=8);if(o===0)o=1-c;else {if(o===l)return s?NaN:1/0*(y?-1:1);s+=Math.pow(2,i),o-=c;}return (y?-1:1)*s*Math.pow(2,o-i)},write:function(t,e,r,i,n,o){var s,a,l,c=8*o-n-1,h=(1<>1,g=n===23?Math.pow(2,-24)-Math.pow(2,-77):0,y=i?0:o-1,w=i?1:-1,S=e<0||e===0&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=h):(s=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-s))<1&&(s--,l*=2),(e+=s+d>=1?g/l:g*Math.pow(2,1-d))*l>=2&&(s++,l/=2),s+d>=h?(a=0,s=h):s+d>=1?(a=(e*l-1)*Math.pow(2,n),s+=d):(a=e*Math.pow(2,d-1)*Math.pow(2,n),s=0));n>=8;t[r+y]=255&a,y+=w,a/=256,n-=8);for(s=s<0;t[r+y]=255&s,y+=w,s/=256,c-=8);t[r+y-w]|=128*S;}},At={},zs=Rc,Dr=yw,_c=typeof Symbol==\"function\"&&typeof Symbol.for==\"function\"?Symbol.for(\"nodejs.util.inspect.custom\"):null;At.Buffer=O,At.SlowBuffer=function(t){return +t!=t&&(t=0),O.alloc(+t)},At.INSPECT_MAX_BYTES=50;At.kMaxLength=2147483647,O.TYPED_ARRAY_SUPPORT=function(){try{var t=new Uint8Array(1),e={foo:function(){return 42}};return Object.setPrototypeOf(e,Uint8Array.prototype),Object.setPrototypeOf(t,e),t.foo()===42}catch{return !1}}(),O.TYPED_ARRAY_SUPPORT||typeof console>\"u\"||typeof console.error!=\"function\"||console.error(\"This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.\"),Object.defineProperty(O.prototype,\"parent\",{enumerable:!0,get:function(){if(O.isBuffer(this))return this.buffer}}),Object.defineProperty(O.prototype,\"offset\",{enumerable:!0,get:function(){if(O.isBuffer(this))return this.byteOffset}}),O.poolSize=8192,O.from=function(t,e,r){return Cc(t,e,r)},Object.setPrototypeOf(O.prototype,Uint8Array.prototype),Object.setPrototypeOf(O,Uint8Array),O.alloc=function(t,e,r){return function(i,n,o){return Bc(i),i<=0?Et(i):n!==void 0?typeof o==\"string\"?Et(i).fill(n,o):Et(i).fill(n):Et(i)}(t,e,r)},O.allocUnsafe=function(t){return Ks(t)},O.allocUnsafeSlow=function(t){return Ks(t)},O.isBuffer=function(t){return t!=null&&t._isBuffer===!0&&t!==O.prototype},O.compare=function(t,e){if(St(t,Uint8Array)&&(t=O.from(t,t.offset,t.byteLength)),St(e,Uint8Array)&&(e=O.from(e,e.offset,e.byteLength)),!O.isBuffer(t)||!O.isBuffer(e))throw new TypeError('The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array');if(t===e)return 0;for(var r=t.length,i=e.length,n=0,o=Math.min(r,i);ne&&(t+=\" ... \"),\"\"},_c&&(O.prototype[_c]=O.prototype.inspect),O.prototype.compare=function(t,e,r,i,n){if(St(t,Uint8Array)&&(t=O.from(t,t.offset,t.byteLength)),!O.isBuffer(t))throw new TypeError('The \"target\" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(e===void 0&&(e=0),r===void 0&&(r=t?t.length:0),i===void 0&&(i=0),n===void 0&&(n=this.length),e<0||r>t.length||i<0||n>this.length)throw new RangeError(\"out of range index\");if(i>=n&&e>=r)return 0;if(i>=n)return -1;if(e>=r)return 1;if(this===t)return 0;for(var o=(n>>>=0)-(i>>>=0),s=(r>>>=0)-(e>>>=0),a=Math.min(o,s),l=this.slice(i,n),c=t.slice(e,r),h=0;h>>=0,isFinite(r)?(r>>>=0,i===void 0&&(i=\"utf8\")):(i=r,r=void 0);}var n=this.length-e;if((r===void 0||r>n)&&(r=n),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError(\"Attempt to write outside buffer bounds\");i||(i=\"utf8\");for(var o=!1;;)switch(i){case\"hex\":return ww(this,t,e,r);case\"utf8\":case\"utf-8\":return _w(this,t,e,r);case\"ascii\":return kc(this,t,e,r);case\"latin1\":case\"binary\":return mw(this,t,e,r);case\"base64\":return vw(this,t,e,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return Ew(this,t,e,r);default:if(o)throw new TypeError(\"Unknown encoding: \"+i);i=(\"\"+i).toLowerCase(),o=!0;}},O.prototype.toJSON=function(){return {type:\"Buffer\",data:Array.prototype.slice.call(this._arr||this,0)}};O.prototype.slice=function(t,e){var r=this.length;(t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=e===void 0?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e>>=0,e>>>=0,r||we(t,e,this.length);for(var i=this[t],n=1,o=0;++o>>=0,e>>>=0,r||we(t,e,this.length);for(var i=this[t+--e],n=1;e>0&&(n*=256);)i+=this[t+--e]*n;return i},O.prototype.readUInt8=function(t,e){return t>>>=0,e||we(t,1,this.length),this[t]},O.prototype.readUInt16LE=function(t,e){return t>>>=0,e||we(t,2,this.length),this[t]|this[t+1]<<8},O.prototype.readUInt16BE=function(t,e){return t>>>=0,e||we(t,2,this.length),this[t]<<8|this[t+1]},O.prototype.readUInt32LE=function(t,e){return t>>>=0,e||we(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},O.prototype.readUInt32BE=function(t,e){return t>>>=0,e||we(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},O.prototype.readIntLE=function(t,e,r){t>>>=0,e>>>=0,r||we(t,e,this.length);for(var i=this[t],n=1,o=0;++o=(n*=128)&&(i-=Math.pow(2,8*e)),i},O.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||we(t,e,this.length);for(var i=e,n=1,o=this[t+--i];i>0&&(n*=256);)o+=this[t+--i]*n;return o>=(n*=128)&&(o-=Math.pow(2,8*e)),o},O.prototype.readInt8=function(t,e){return t>>>=0,e||we(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},O.prototype.readInt16LE=function(t,e){t>>>=0,e||we(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},O.prototype.readInt16BE=function(t,e){t>>>=0,e||we(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},O.prototype.readInt32LE=function(t,e){return t>>>=0,e||we(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},O.prototype.readInt32BE=function(t,e){return t>>>=0,e||we(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},O.prototype.readFloatLE=function(t,e){return t>>>=0,e||we(t,4,this.length),Dr.read(this,t,!0,23,4)},O.prototype.readFloatBE=function(t,e){return t>>>=0,e||we(t,4,this.length),Dr.read(this,t,!1,23,4)},O.prototype.readDoubleLE=function(t,e){return t>>>=0,e||we(t,8,this.length),Dr.read(this,t,!0,52,8)},O.prototype.readDoubleBE=function(t,e){return t>>>=0,e||we(t,8,this.length),Dr.read(this,t,!1,52,8)},O.prototype.writeUIntLE=function(t,e,r,i){t=+t,e>>>=0,r>>>=0,i||Pe(this,t,e,r,Math.pow(2,8*r)-1,0);var n=1,o=0;for(this[e]=255&t;++o>>=0,r>>>=0,i||Pe(this,t,e,r,Math.pow(2,8*r)-1,0);var n=r-1,o=1;for(this[e+n]=255&t;--n>=0&&(o*=256);)this[e+n]=t/o&255;return e+r},O.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,1,255,0),this[e]=255&t,e+1},O.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},O.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},O.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},O.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},O.prototype.writeIntLE=function(t,e,r,i){if(t=+t,e>>>=0,!i){var n=Math.pow(2,8*r-1);Pe(this,t,e,r,n-1,-n);}var o=0,s=1,a=0;for(this[e]=255&t;++o>0)-a&255;return e+r},O.prototype.writeIntBE=function(t,e,r,i){if(t=+t,e>>>=0,!i){var n=Math.pow(2,8*r-1);Pe(this,t,e,r,n-1,-n);}var o=r-1,s=1,a=0;for(this[e+o]=255&t;--o>=0&&(s*=256);)t<0&&a===0&&this[e+o+1]!==0&&(a=1),this[e+o]=(t/s>>0)-a&255;return e+r},O.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},O.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},O.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},O.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},O.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||Pe(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},O.prototype.writeFloatLE=function(t,e,r){return Sc(this,t,e,!0,r)},O.prototype.writeFloatBE=function(t,e,r){return Sc(this,t,e,!1,r)},O.prototype.writeDoubleLE=function(t,e,r){return Ac(this,t,e,!0,r)},O.prototype.writeDoubleBE=function(t,e,r){return Ac(this,t,e,!1,r)},O.prototype.copy=function(t,e,r,i){if(!O.isBuffer(t))throw new TypeError(\"argument should be a Buffer\");if(r||(r=0),i||i===0||(i=this.length),e>=t.length&&(e=t.length),e||(e=0),i>0&&i=this.length)throw new RangeError(\"Index out of range\");if(i<0)throw new RangeError(\"sourceEnd out of bounds\");i>this.length&&(i=this.length),t.length-e=0;--o)t[o+e]=this[o+r];else Uint8Array.prototype.set.call(t,this.subarray(r,i),e);return n},O.prototype.fill=function(t,e,r,i){if(typeof t==\"string\"){if(typeof e==\"string\"?(i=e,e=0,r=this.length):typeof r==\"string\"&&(i=r,r=this.length),i!==void 0&&typeof i!=\"string\")throw new TypeError(\"encoding must be a string\");if(typeof i==\"string\"&&!O.isEncoding(i))throw new TypeError(\"Unknown encoding: \"+i);if(t.length===1){var n=t.charCodeAt(0);(i===\"utf8\"&&n<128||i===\"latin1\")&&(t=n);}}else typeof t==\"number\"?t&=255:typeof t==\"boolean\"&&(t=Number(t));if(e<0||this.length>>=0,r=r===void 0?this.length:r>>>0,t||(t=0),typeof t==\"number\")for(o=e;o=0?(l>0&&(n.lastNeed=l-1),l):--a=0?(l>0&&(n.lastNeed=l-2),l):--a=0?(l>0&&(l===2?l=0:n.lastNeed=l-3),l):0}(this,t,e);if(!this.lastNeed)return t.toString(\"utf8\",e);this.lastTotal=r;var i=t.length-(r-this.lastNeed);return t.copy(this.lastChar,0,i),t.toString(\"utf8\",e,i)},pi.prototype.fillLast=function(t){if(this.lastNeed<=t.length)return t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,t.length),this.lastNeed-=t.length;};ur.StringDecoder;ur.StringDecoder;});var Lc={};Jt(Lc,{StringDecoder:()=>qw,default:()=>ur});var qw,Uc=_e(()=>{_();v();m();Xs();Xs();qw=ur.StringDecoder;});var Zs=M((H2,jc)=>{_();v();m();var Nc=Nt(),{PromisePrototypeThen:Dw,SymbolAsyncIterator:qc,SymbolIterator:Dc}=ce(),{Buffer:jw}=(be(),X(me)),{ERR_INVALID_ARG_TYPE:Fw,ERR_STREAM_NULL_VALUES:Ww}=Ae().codes;function $w(t,e,r){let i;if(typeof e==\"string\"||e instanceof jw)return new t({objectMode:!0,...r,read(){this.push(e),this.push(null);}});let n;if(e&&e[qc])n=!0,i=e[qc]();else if(e&&e[Dc])n=!1,i=e[Dc]();else throw new Fw(\"iterable\",[\"Iterable\"],e);let o=new t({objectMode:!0,highWaterMark:1,...r}),s=!1;o._read=function(){s||(s=!0,l());},o._destroy=function(c,h){Dw(a(c),()=>Nc.nextTick(h,c),d=>Nc.nextTick(h,d||c));};async function a(c){let h=c!=null,d=typeof i.throw==\"function\";if(h&&d){let{value:g,done:y}=await i.throw(c);if(await g,y)return}if(typeof i.return==\"function\"){let{value:g}=await i.return();await g;}}async function l(){for(;;){try{let{value:c,done:h}=n?await i.next():i.next();if(h)o.push(null);else {let d=c&&typeof c.then==\"function\"?await c:c;if(d===null)throw s=!1,new Ww;if(o.push(d))continue;s=!1;}}catch(c){o.destroy(c);}break}}return o}jc.exports=$w;});var gi=M((eR,Zc)=>{_();v();m();var He=Nt(),{ArrayPrototypeIndexOf:Hw,NumberIsInteger:Vw,NumberIsNaN:zw,NumberParseInt:Kw,ObjectDefineProperties:$c,ObjectKeys:Gw,ObjectSetPrototypeOf:Hc,Promise:Qw,SafeSet:Yw,SymbolAsyncIterator:Jw,Symbol:Xw}=ce();Zc.exports=F;F.ReadableState=so;var{EventEmitter:Zw}=(sr(),X(nr)),{Stream:Dt,prependListener:e_}=nn(),{Buffer:eo}=(be(),X(me)),{addAbortSignal:t_}=di(),r_=vt(),H=Je().debuglog(\"stream\",t=>{H=t;}),i_=dc(),Fr=ir(),{getHighWaterMark:n_,getDefaultHighWaterMark:s_}=an(),{aggregateTwoErrors:Fc,codes:{ERR_INVALID_ARG_TYPE:o_,ERR_METHOD_NOT_IMPLEMENTED:a_,ERR_OUT_OF_RANGE:l_,ERR_STREAM_PUSH_AFTER_EOF:u_,ERR_STREAM_UNSHIFT_AFTER_END_EVENT:f_}}=Ae(),{validateObject:c_}=hi(),fr=Xw(\"kPaused\"),{StringDecoder:Vc}=(Uc(),X(Lc)),h_=Zs();Hc(F.prototype,Dt.prototype);Hc(F,Dt);var to=()=>{},{errorOrDestroy:jr}=Fr;function so(t,e,r){typeof r!=\"boolean\"&&(r=e instanceof nt()),this.objectMode=!!(t&&t.objectMode),r&&(this.objectMode=this.objectMode||!!(t&&t.readableObjectMode)),this.highWaterMark=t?n_(this,t,\"readableHighWaterMark\",r):s_(!1),this.buffer=new i_,this.length=0,this.pipes=[],this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.constructed=!0,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this[fr]=null,this.errorEmitted=!1,this.emitClose=!t||t.emitClose!==!1,this.autoDestroy=!t||t.autoDestroy!==!1,this.destroyed=!1,this.errored=null,this.closed=!1,this.closeEmitted=!1,this.defaultEncoding=t&&t.defaultEncoding||\"utf8\",this.awaitDrainWriters=null,this.multiAwaitDrain=!1,this.readingMore=!1,this.dataEmitted=!1,this.decoder=null,this.encoding=null,t&&t.encoding&&(this.decoder=new Vc(t.encoding),this.encoding=t.encoding);}function F(t){if(!(this instanceof F))return new F(t);let e=this instanceof nt();this._readableState=new so(t,this,e),t&&(typeof t.read==\"function\"&&(this._read=t.read),typeof t.destroy==\"function\"&&(this._destroy=t.destroy),typeof t.construct==\"function\"&&(this._construct=t.construct),t.signal&&!e&&t_(t.signal,this)),Dt.call(this,t),Fr.construct(this,()=>{this._readableState.needReadable&&hn(this,this._readableState);});}F.prototype.destroy=Fr.destroy;F.prototype._undestroy=Fr.undestroy;F.prototype._destroy=function(t,e){e(t);};F.prototype[Zw.captureRejectionSymbol]=function(t){this.destroy(t);};F.prototype.push=function(t,e){return zc(this,t,e,!1)};F.prototype.unshift=function(t,e){return zc(this,t,e,!0)};function zc(t,e,r,i){H(\"readableAddChunk\",e);let n=t._readableState,o;if(n.objectMode||(typeof e==\"string\"?(r=r||n.defaultEncoding,n.encoding!==r&&(i&&n.encoding?e=eo.from(e,r).toString(n.encoding):(e=eo.from(e,r),r=\"\"))):e instanceof eo?r=\"\":Dt._isUint8Array(e)?(e=Dt._uint8ArrayToBuffer(e),r=\"\"):e!=null&&(o=new o_(\"chunk\",[\"string\",\"Buffer\",\"Uint8Array\"],e))),o)jr(t,o);else if(e===null)n.reading=!1,g_(t,n);else if(n.objectMode||e&&e.length>0)if(i)if(n.endEmitted)jr(t,new f_);else {if(n.destroyed||n.errored)return !1;ro(t,n,e,!0);}else if(n.ended)jr(t,new u_);else {if(n.destroyed||n.errored)return !1;n.reading=!1,n.decoder&&!r?(e=n.decoder.write(e),n.objectMode||e.length!==0?ro(t,n,e,!1):hn(t,n)):ro(t,n,e,!1);}else i||(n.reading=!1,hn(t,n));return !n.ended&&(n.length0?(e.multiAwaitDrain?e.awaitDrainWriters.clear():e.awaitDrainWriters=null,e.dataEmitted=!0,t.emit(\"data\",r)):(e.length+=e.objectMode?1:r.length,i?e.buffer.unshift(r):e.buffer.push(r),e.needReadable&&dn(t)),hn(t,e);}F.prototype.isPaused=function(){let t=this._readableState;return t[fr]===!0||t.flowing===!1};F.prototype.setEncoding=function(t){let e=new Vc(t);this._readableState.decoder=e,this._readableState.encoding=this._readableState.decoder.encoding;let r=this._readableState.buffer,i=\"\";for(let n of r)i+=e.write(n);return r.clear(),i!==\"\"&&r.push(i),this._readableState.length=i.length,this};var d_=1073741824;function p_(t){if(t>d_)throw new l_(\"size\",\"<= 1GiB\",t);return t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++,t}function Wc(t,e){return t<=0||e.length===0&&e.ended?0:e.objectMode?1:zw(t)?e.flowing&&e.length?e.buffer.first().length:e.length:t<=e.length?t:e.ended?e.length:0}F.prototype.read=function(t){H(\"read\",t),t===void 0?t=NaN:Vw(t)||(t=Kw(t,10));let e=this._readableState,r=t;if(t>e.highWaterMark&&(e.highWaterMark=p_(t)),t!==0&&(e.emittedReadable=!1),t===0&&e.needReadable&&((e.highWaterMark!==0?e.length>=e.highWaterMark:e.length>0)||e.ended))return H(\"read: emitReadable\",e.length,e.ended),e.length===0&&e.ended?io(this):dn(this),null;if(t=Wc(t,e),t===0&&e.ended)return e.length===0&&io(this),null;let i=e.needReadable;if(H(\"need readable\",i),(e.length===0||e.length-t0?n=Jc(t,e):n=null,n===null?(e.needReadable=e.length<=e.highWaterMark,t=0):(e.length-=t,e.multiAwaitDrain?e.awaitDrainWriters.clear():e.awaitDrainWriters=null),e.length===0&&(e.ended||(e.needReadable=!0),r!==t&&e.ended&&io(this)),n!==null&&!e.errorEmitted&&!e.closeEmitted&&(e.dataEmitted=!0,this.emit(\"data\",n)),n};function g_(t,e){if(H(\"onEofChunk\"),!e.ended){if(e.decoder){let r=e.decoder.end();r&&r.length&&(e.buffer.push(r),e.length+=e.objectMode?1:r.length);}e.ended=!0,e.sync?dn(t):(e.needReadable=!1,e.emittedReadable=!0,Kc(t));}}function dn(t){let e=t._readableState;H(\"emitReadable\",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||(H(\"emitReadable\",e.flowing),e.emittedReadable=!0,He.nextTick(Kc,t));}function Kc(t){let e=t._readableState;H(\"emitReadable_\",e.destroyed,e.length,e.ended),!e.destroyed&&!e.errored&&(e.length||e.ended)&&(t.emit(\"readable\"),e.emittedReadable=!1),e.needReadable=!e.flowing&&!e.ended&&e.length<=e.highWaterMark,Qc(t);}function hn(t,e){!e.readingMore&&e.constructed&&(e.readingMore=!0,He.nextTick(y_,t,e));}function y_(t,e){for(;!e.reading&&!e.ended&&(e.length1&&i.pipes.includes(t)&&(H(\"false write response, pause\",i.awaitDrainWriters.size),i.awaitDrainWriters.add(t)),r.pause()),l||(l=b_(r,t),t.on(\"drain\",l));}r.on(\"data\",g);function g(I){H(\"ondata\");let C=t.write(I);H(\"dest.write\",C),C===!1&&d();}function y(I){if(H(\"onerror\",I),E(),t.removeListener(\"error\",y),t.listenerCount(\"error\")===0){let C=t._writableState||t._readableState;C&&!C.errorEmitted?jr(t,I):t.emit(\"error\",I);}}e_(t,\"error\",y);function w(){t.removeListener(\"finish\",S),E();}t.once(\"close\",w);function S(){H(\"onfinish\"),t.removeListener(\"close\",w),E();}t.once(\"finish\",S);function E(){H(\"unpipe\"),r.unpipe(t);}return t.emit(\"pipe\",r),t.writableNeedDrain===!0?i.flowing&&d():i.flowing||(H(\"pipe resume\"),r.resume()),t};function b_(t,e){return function(){let i=t._readableState;i.awaitDrainWriters===e?(H(\"pipeOnDrain\",1),i.awaitDrainWriters=null):i.multiAwaitDrain&&(H(\"pipeOnDrain\",i.awaitDrainWriters.size),i.awaitDrainWriters.delete(e)),(!i.awaitDrainWriters||i.awaitDrainWriters.size===0)&&t.listenerCount(\"data\")&&t.resume();}}F.prototype.unpipe=function(t){let e=this._readableState,r={hasUnpiped:!1};if(e.pipes.length===0)return this;if(!t){let n=e.pipes;e.pipes=[],this.pause();for(let o=0;o0,i.flowing!==!1&&this.resume()):t===\"readable\"&&!i.endEmitted&&!i.readableListening&&(i.readableListening=i.needReadable=!0,i.flowing=!1,i.emittedReadable=!1,H(\"on readable\",i.length,i.reading),i.length?dn(this):i.reading||He.nextTick(w_,this)),r};F.prototype.addListener=F.prototype.on;F.prototype.removeListener=function(t,e){let r=Dt.prototype.removeListener.call(this,t,e);return t===\"readable\"&&He.nextTick(Gc,this),r};F.prototype.off=F.prototype.removeListener;F.prototype.removeAllListeners=function(t){let e=Dt.prototype.removeAllListeners.apply(this,arguments);return (t===\"readable\"||t===void 0)&&He.nextTick(Gc,this),e};function Gc(t){let e=t._readableState;e.readableListening=t.listenerCount(\"readable\")>0,e.resumeScheduled&&e[fr]===!1?e.flowing=!0:t.listenerCount(\"data\")>0?t.resume():e.readableListening||(e.flowing=null);}function w_(t){H(\"readable nexttick read 0\"),t.read(0);}F.prototype.resume=function(){let t=this._readableState;return t.flowing||(H(\"resume\"),t.flowing=!t.readableListening,__(this,t)),t[fr]=!1,this};function __(t,e){e.resumeScheduled||(e.resumeScheduled=!0,He.nextTick(m_,t,e));}function m_(t,e){H(\"resume\",e.reading),e.reading||t.read(0),e.resumeScheduled=!1,t.emit(\"resume\"),Qc(t),e.flowing&&!e.reading&&t.read(0);}F.prototype.pause=function(){return H(\"call pause flowing=%j\",this._readableState.flowing),this._readableState.flowing!==!1&&(H(\"pause\"),this._readableState.flowing=!1,this.emit(\"pause\")),this._readableState[fr]=!0,this};function Qc(t){let e=t._readableState;for(H(\"flow\",e.flowing);e.flowing&&t.read()!==null;);}F.prototype.wrap=function(t){let e=!1;t.on(\"data\",i=>{!this.push(i)&&t.pause&&(e=!0,t.pause());}),t.on(\"end\",()=>{this.push(null);}),t.on(\"error\",i=>{jr(this,i);}),t.on(\"close\",()=>{this.destroy();}),t.on(\"destroy\",()=>{this.destroy();}),this._read=()=>{e&&t.resume&&(e=!1,t.resume());};let r=Gw(t);for(let i=1;i{n=s?Fc(n,s):null,r(),r=to;});try{for(;;){let s=t.destroyed?null:t.read();if(s!==null)yield s;else {if(n)throw n;if(n===null)return;await new Qw(i);}}}catch(s){throw n=Fc(n,s),n}finally{(n||e?.destroyOnReturn!==!1)&&(n===void 0||t._readableState.autoDestroy)?Fr.destroyer(t,null):(t.off(\"readable\",i),o());}}$c(F.prototype,{readable:{__proto__:null,get(){let t=this._readableState;return !!t&&t.readable!==!1&&!t.destroyed&&!t.errorEmitted&&!t.endEmitted},set(t){this._readableState&&(this._readableState.readable=!!t);}},readableDidRead:{__proto__:null,enumerable:!1,get:function(){return this._readableState.dataEmitted}},readableAborted:{__proto__:null,enumerable:!1,get:function(){return !!(this._readableState.readable!==!1&&(this._readableState.destroyed||this._readableState.errored)&&!this._readableState.endEmitted)}},readableHighWaterMark:{__proto__:null,enumerable:!1,get:function(){return this._readableState.highWaterMark}},readableBuffer:{__proto__:null,enumerable:!1,get:function(){return this._readableState&&this._readableState.buffer}},readableFlowing:{__proto__:null,enumerable:!1,get:function(){return this._readableState.flowing},set:function(t){this._readableState&&(this._readableState.flowing=t);}},readableLength:{__proto__:null,enumerable:!1,get(){return this._readableState.length}},readableObjectMode:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.objectMode:!1}},readableEncoding:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.encoding:null}},errored:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.errored:null}},closed:{__proto__:null,get(){return this._readableState?this._readableState.closed:!1}},destroyed:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.destroyed:!1},set(t){this._readableState&&(this._readableState.destroyed=t);}},readableEnded:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.endEmitted:!1}}});$c(so.prototype,{pipesCount:{__proto__:null,get(){return this.pipes.length}},paused:{__proto__:null,get(){return this[fr]!==!1},set(t){this[fr]=!!t;}}});F._fromList=Jc;function Jc(t,e){if(e.length===0)return null;let r;return e.objectMode?r=e.buffer.shift():!t||t>=e.length?(e.decoder?r=e.buffer.join(\"\"):e.buffer.length===1?r=e.buffer.first():r=e.buffer.concat(e.length),e.buffer.clear()):r=e.buffer.consume(t,e.decoder),r}function io(t){let e=t._readableState;H(\"endReadable\",e.endEmitted),e.endEmitted||(e.ended=!0,He.nextTick(E_,e,t));}function E_(t,e){if(H(\"endReadableNT\",t.endEmitted,t.length),!t.errored&&!t.closeEmitted&&!t.endEmitted&&t.length===0){if(t.endEmitted=!0,e.emit(\"end\"),e.writable&&e.allowHalfOpen===!1)He.nextTick(S_,e);else if(t.autoDestroy){let r=e._writableState;(!r||r.autoDestroy&&(r.finished||r.writable===!1))&&e.destroy();}}}function S_(t){t.writable&&!t.writableEnded&&!t.destroyed&&t.end();}F.from=function(t,e){return h_(F,t,e)};var no;function Xc(){return no===void 0&&(no={}),no}F.fromWeb=function(t,e){return Xc().newStreamReadableFromReadableStream(t,e)};F.toWeb=function(t,e){return Xc().newReadableStreamFromStreamReadable(t,e)};F.wrap=function(t,e){var r,i;return new F({objectMode:(r=(i=t.readableObjectMode)!==null&&i!==void 0?i:t.objectMode)!==null&&r!==void 0?r:!0,...e,destroy(n,o){Fr.destroyer(t,n),o(n);}}).wrap(t)};});var ho=M((fR,ch)=>{_();v();m();var cr=Nt(),{ArrayPrototypeSlice:rh,Error:A_,FunctionPrototypeSymbolHasInstance:ih,ObjectDefineProperty:nh,ObjectDefineProperties:I_,ObjectSetPrototypeOf:sh,StringPrototypeToLowerCase:T_,Symbol:R_,SymbolHasInstance:C_}=ce();ch.exports=ie;ie.WritableState=wi;var{EventEmitter:B_}=(sr(),X(nr)),yi=nn().Stream,{Buffer:pn}=(be(),X(me)),bn=ir(),{addAbortSignal:P_}=di(),{getHighWaterMark:k_,getDefaultHighWaterMark:O_}=an(),{ERR_INVALID_ARG_TYPE:x_,ERR_METHOD_NOT_IMPLEMENTED:M_,ERR_MULTIPLE_CALLBACK:oh,ERR_STREAM_CANNOT_PIPE:L_,ERR_STREAM_DESTROYED:bi,ERR_STREAM_ALREADY_FINISHED:U_,ERR_STREAM_NULL_VALUES:N_,ERR_STREAM_WRITE_AFTER_END:q_,ERR_UNKNOWN_ENCODING:ah}=Ae().codes,{errorOrDestroy:Wr}=bn;sh(ie.prototype,yi.prototype);sh(ie,yi);function lo(){}var $r=R_(\"kOnFinished\");function wi(t,e,r){typeof r!=\"boolean\"&&(r=e instanceof nt()),this.objectMode=!!(t&&t.objectMode),r&&(this.objectMode=this.objectMode||!!(t&&t.writableObjectMode)),this.highWaterMark=t?k_(this,t,\"writableHighWaterMark\",r):O_(!1),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;let i=!!(t&&t.decodeStrings===!1);this.decodeStrings=!i,this.defaultEncoding=t&&t.defaultEncoding||\"utf8\",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=j_.bind(void 0,e),this.writecb=null,this.writelen=0,this.afterWriteTickInfo=null,yn(this),this.pendingcb=0,this.constructed=!0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=!t||t.emitClose!==!1,this.autoDestroy=!t||t.autoDestroy!==!1,this.errored=null,this.closed=!1,this.closeEmitted=!1,this[$r]=[];}function yn(t){t.buffered=[],t.bufferedIndex=0,t.allBuffers=!0,t.allNoop=!0;}wi.prototype.getBuffer=function(){return rh(this.buffered,this.bufferedIndex)};nh(wi.prototype,\"bufferedRequestCount\",{__proto__:null,get(){return this.buffered.length-this.bufferedIndex}});function ie(t){let e=this instanceof nt();if(!e&&!ih(ie,this))return new ie(t);this._writableState=new wi(t,this,e),t&&(typeof t.write==\"function\"&&(this._write=t.write),typeof t.writev==\"function\"&&(this._writev=t.writev),typeof t.destroy==\"function\"&&(this._destroy=t.destroy),typeof t.final==\"function\"&&(this._final=t.final),typeof t.construct==\"function\"&&(this._construct=t.construct),t.signal&&P_(t.signal,this)),yi.call(this,t),bn.construct(this,()=>{let r=this._writableState;r.writing||fo(this,r),co(this,r);});}nh(ie,C_,{__proto__:null,value:function(t){return ih(this,t)?!0:this!==ie?!1:t&&t._writableState instanceof wi}});ie.prototype.pipe=function(){Wr(this,new L_);};function lh(t,e,r,i){let n=t._writableState;if(typeof r==\"function\")i=r,r=n.defaultEncoding;else {if(!r)r=n.defaultEncoding;else if(r!==\"buffer\"&&!pn.isEncoding(r))throw new ah(r);typeof i!=\"function\"&&(i=lo);}if(e===null)throw new N_;if(!n.objectMode)if(typeof e==\"string\")n.decodeStrings!==!1&&(e=pn.from(e,r),r=\"buffer\");else if(e instanceof pn)r=\"buffer\";else if(yi._isUint8Array(e))e=yi._uint8ArrayToBuffer(e),r=\"buffer\";else throw new x_(\"chunk\",[\"string\",\"Buffer\",\"Uint8Array\"],e);let o;return n.ending?o=new q_:n.destroyed&&(o=new bi(\"write\")),o?(cr.nextTick(i,o),Wr(t,o,!0),o):(n.pendingcb++,D_(t,n,e,r,i))}ie.prototype.write=function(t,e,r){return lh(this,t,e,r)===!0};ie.prototype.cork=function(){this._writableState.corked++;};ie.prototype.uncork=function(){let t=this._writableState;t.corked&&(t.corked--,t.writing||fo(this,t));};ie.prototype.setDefaultEncoding=function(e){if(typeof e==\"string\"&&(e=T_(e)),!pn.isEncoding(e))throw new ah(e);return this._writableState.defaultEncoding=e,this};function D_(t,e,r,i,n){let o=e.objectMode?1:r.length;e.length+=o;let s=e.lengthr.bufferedIndex&&fo(t,r),i?r.afterWriteTickInfo!==null&&r.afterWriteTickInfo.cb===n?r.afterWriteTickInfo.count++:(r.afterWriteTickInfo={count:1,cb:n,stream:t,state:r},cr.nextTick(F_,r.afterWriteTickInfo)):uh(t,r,1,n));}function F_({stream:t,state:e,count:r,cb:i}){return e.afterWriteTickInfo=null,uh(t,e,r,i)}function uh(t,e,r,i){for(!e.ending&&!t.destroyed&&e.length===0&&e.needDrain&&(e.needDrain=!1,t.emit(\"drain\"));r-- >0;)e.pendingcb--,i();e.destroyed&&uo(e),co(t,e);}function uo(t){if(t.writing)return;for(let n=t.bufferedIndex;n1&&t._writev){e.pendingcb-=o-1;let a=e.allNoop?lo:c=>{for(let h=s;h256?(r.splice(0,s),e.bufferedIndex=0):e.bufferedIndex=s;}e.bufferProcessing=!1;}ie.prototype._write=function(t,e,r){if(this._writev)this._writev([{chunk:t,encoding:e}],r);else throw new M_(\"_write()\")};ie.prototype._writev=null;ie.prototype.end=function(t,e,r){let i=this._writableState;typeof t==\"function\"?(r=t,t=null,e=null):typeof e==\"function\"&&(r=e,e=null);let n;if(t!=null){let o=lh(this,t,e);o instanceof A_&&(n=o);}return i.corked&&(i.corked=1,this.uncork()),n||(!i.errored&&!i.ending?(i.ending=!0,co(this,i,!0),i.ended=!0):i.finished?n=new U_(\"end\"):i.destroyed&&(n=new bi(\"end\"))),typeof r==\"function\"&&(n||i.finished?cr.nextTick(r,n):i[$r].push(r)),this};function gn(t){return t.ending&&!t.destroyed&&t.constructed&&t.length===0&&!t.errored&&t.buffered.length===0&&!t.finished&&!t.writing&&!t.errorEmitted&&!t.closeEmitted}function W_(t,e){let r=!1;function i(n){if(r){Wr(t,n??oh());return}if(r=!0,e.pendingcb--,n){let o=e[$r].splice(0);for(let s=0;s{gn(n)?ao(i,n):n.pendingcb--;},t,e)):gn(e)&&(e.pendingcb++,ao(t,e))));}function ao(t,e){e.pendingcb--,e.finished=!0;let r=e[$r].splice(0);for(let i=0;i{_();v();m();var po=Nt(),V_=(be(),X(me)),{isReadable:z_,isWritable:K_,isIterable:hh,isNodeStream:G_,isReadableNodeStream:dh,isWritableNodeStream:ph,isDuplexNodeStream:Q_}=tt(),gh=vt(),{AbortError:vh,codes:{ERR_INVALID_ARG_TYPE:Y_,ERR_INVALID_RETURN_VALUE:yh}}=Ae(),{destroyer:Hr}=ir(),J_=nt(),X_=gi(),{createDeferredPromise:bh}=Je(),wh=Zs(),_h=globalThis.Blob||V_.Blob,Z_=typeof _h<\"u\"?function(e){return e instanceof _h}:function(e){return !1},e0=globalThis.AbortController||zi().AbortController,{FunctionPrototypeCall:mh}=ce(),hr=class extends J_{constructor(e){super(e),e?.readable===!1&&(this._readableState.readable=!1,this._readableState.ended=!0,this._readableState.endEmitted=!0),e?.writable===!1&&(this._writableState.writable=!1,this._writableState.ending=!0,this._writableState.ended=!0,this._writableState.finished=!0);}};Eh.exports=function t(e,r){if(Q_(e))return e;if(dh(e))return wn({readable:e});if(ph(e))return wn({writable:e});if(G_(e))return wn({writable:!1,readable:!1});if(typeof e==\"function\"){let{value:n,write:o,final:s,destroy:a}=t0(e);if(hh(n))return wh(hr,n,{objectMode:!0,write:o,final:s,destroy:a});let l=n?.then;if(typeof l==\"function\"){let c,h=mh(l,n,d=>{if(d!=null)throw new yh(\"nully\",\"body\",d)},d=>{Hr(c,d);});return c=new hr({objectMode:!0,readable:!1,write:o,final(d){s(async()=>{try{await h,po.nextTick(d,null);}catch(g){po.nextTick(d,g);}});},destroy:a})}throw new yh(\"Iterable, AsyncIterable or AsyncFunction\",r,n)}if(Z_(e))return t(e.arrayBuffer());if(hh(e))return wh(hr,e,{objectMode:!0,writable:!1});if(typeof e?.writable==\"object\"||typeof e?.readable==\"object\"){let n=e!=null&&e.readable?dh(e?.readable)?e?.readable:t(e.readable):void 0,o=e!=null&&e.writable?ph(e?.writable)?e?.writable:t(e.writable):void 0;return wn({readable:n,writable:o})}let i=e?.then;if(typeof i==\"function\"){let n;return mh(i,e,o=>{o!=null&&n.push(o),n.push(null);},o=>{Hr(n,o);}),n=new hr({objectMode:!0,writable:!1,read(){}})}throw new Y_(r,[\"Blob\",\"ReadableStream\",\"WritableStream\",\"Stream\",\"Iterable\",\"AsyncIterable\",\"Function\",\"{ readable, writable } pair\",\"Promise\"],e)};function t0(t){let{promise:e,resolve:r}=bh(),i=new e0,n=i.signal;return {value:t(async function*(){for(;;){let s=e;e=null;let{chunk:a,done:l,cb:c}=await s;if(po.nextTick(c),l)return;if(n.aborted)throw new vh(void 0,{cause:n.reason});((({promise:e,resolve:r}=bh()))),yield a;}}(),{signal:n}),write(s,a,l){let c=r;r=null,c({chunk:s,done:!1,cb:l});},final(s){let a=r;r=null,a({done:!0,cb:s});},destroy(s,a){i.abort(),a(s);}}}function wn(t){let e=t.readable&&typeof t.readable.read!=\"function\"?X_.wrap(t.readable):t.readable,r=t.writable,i=!!z_(e),n=!!K_(r),o,s,a,l,c;function h(d){let g=l;l=null,g?g(d):d&&c.destroy(d);}return c=new hr({readableObjectMode:!!(e!=null&&e.readableObjectMode),writableObjectMode:!!(r!=null&&r.writableObjectMode),readable:i,writable:n}),n&&(gh(r,d=>{n=!1,d&&Hr(e,d),h(d);}),c._write=function(d,g,y){r.write(d,g)?y():o=y;},c._final=function(d){r.end(),s=d;},r.on(\"drain\",function(){if(o){let d=o;o=null,d();}}),r.on(\"finish\",function(){if(s){let d=s;s=null,d();}})),i&&(gh(e,d=>{i=!1,d&&Hr(e,d),h(d);}),e.on(\"readable\",function(){if(a){let d=a;a=null,d();}}),e.on(\"end\",function(){c.push(null);}),c._read=function(){for(;;){let d=e.read();if(d===null){a=c._read;return}if(!c.push(d))return}}),c._destroy=function(d,g){!d&&l!==null&&(d=new vh),a=null,o=null,s=null,l===null?g(d):(l=g,Hr(r,d),Hr(e,d));},c}});var nt=M((PR,Th)=>{_();v();m();var{ObjectDefineProperties:r0,ObjectGetOwnPropertyDescriptor:It,ObjectKeys:i0,ObjectSetPrototypeOf:Ah}=ce();Th.exports=Ve;var bo=gi(),Ne=ho();Ah(Ve.prototype,bo.prototype);Ah(Ve,bo);{let t=i0(Ne.prototype);for(let e=0;e{_();v();m();var{ObjectSetPrototypeOf:Rh,Symbol:n0}=ce();Ch.exports=Tt;var{ERR_METHOD_NOT_IMPLEMENTED:s0}=Ae().codes,_o=nt(),{getHighWaterMark:o0}=an();Rh(Tt.prototype,_o.prototype);Rh(Tt,_o);var _i=n0(\"kCallback\");function Tt(t){if(!(this instanceof Tt))return new Tt(t);let e=t?o0(this,t,\"readableHighWaterMark\",!0):null;e===0&&(t={...t,highWaterMark:null,readableHighWaterMark:e,writableHighWaterMark:t.writableHighWaterMark||0}),_o.call(this,t),this._readableState.sync=!1,this[_i]=null,t&&(typeof t.transform==\"function\"&&(this._transform=t.transform),typeof t.flush==\"function\"&&(this._flush=t.flush)),this.on(\"prefinish\",a0);}function wo(t){typeof this._flush==\"function\"&&!this.destroyed?this._flush((e,r)=>{if(e){t?t(e):this.destroy(e);return}r!=null&&this.push(r),this.push(null),t&&t();}):(this.push(null),t&&t());}function a0(){this._final!==wo&&wo.call(this);}Tt.prototype._final=wo;Tt.prototype._transform=function(t,e,r){throw new s0(\"_transform()\")};Tt.prototype._write=function(t,e,r){let i=this._readableState,n=this._writableState,o=i.length;this._transform(t,e,(s,a)=>{if(s){r(s);return}a!=null&&this.push(a),n.ended||o===i.length||i.length{_();v();m();var{ObjectSetPrototypeOf:Bh}=ce();Ph.exports=Vr;var vo=mo();Bh(Vr.prototype,vo.prototype);Bh(Vr,vo);function Vr(t){if(!(this instanceof Vr))return new Vr(t);vo.call(this,t);}Vr.prototype._transform=function(t,e,r){r(null,t);};});var En=M((oC,Lh)=>{_();v();m();var mi=Nt(),{ArrayIsArray:l0,Promise:u0,SymbolAsyncIterator:f0}=ce(),vn=vt(),{once:c0}=Je(),h0=ir(),kh=nt(),{aggregateTwoErrors:d0,codes:{ERR_INVALID_ARG_TYPE:Po,ERR_INVALID_RETURN_VALUE:So,ERR_MISSING_ARGS:p0,ERR_STREAM_DESTROYED:g0,ERR_STREAM_PREMATURE_CLOSE:y0},AbortError:b0}=Ae(),{validateFunction:w0,validateAbortSignal:_0}=hi(),{isIterable:dr,isReadable:Ao,isReadableNodeStream:mn,isNodeStream:Oh,isTransformStream:zr,isWebStream:m0,isReadableStream:Io,isReadableEnded:v0}=tt(),E0=globalThis.AbortController||zi().AbortController,To,Ro;function xh(t,e,r){let i=!1;t.on(\"close\",()=>{i=!0;});let n=vn(t,{readable:e,writable:r},o=>{i=!o;});return {destroy:o=>{i||(i=!0,h0.destroyer(t,o||new g0(\"pipe\")));},cleanup:n}}function S0(t){return w0(t[t.length-1],\"streams[stream.length - 1]\"),t.pop()}function Co(t){if(dr(t))return t;if(mn(t))return A0(t);throw new Po(\"val\",[\"Readable\",\"Iterable\",\"AsyncIterable\"],t)}async function*A0(t){Ro||(Ro=gi()),yield*Ro.prototype[f0].call(t);}async function _n(t,e,r,{end:i}){let n,o=null,s=c=>{if(c&&(n=c),o){let h=o;o=null,h();}},a=()=>new u0((c,h)=>{n?h(n):o=()=>{n?h(n):c();};});e.on(\"drain\",s);let l=vn(e,{readable:!1},s);try{e.writableNeedDrain&&await a();for await(let c of t)e.write(c)||await a();i&&e.end(),await a(),r();}catch(c){r(n!==c?d0(n,c):c);}finally{l(),e.off(\"drain\",s);}}async function Bo(t,e,r,{end:i}){zr(e)&&(e=e.writable);let n=e.getWriter();try{for await(let o of t)await n.ready,n.write(o).catch(()=>{});await n.ready,i&&await n.close(),r();}catch(o){try{await n.abort(o),r(o);}catch(s){r(s);}}}function I0(...t){return Mh(t,c0(S0(t)))}function Mh(t,e,r){if(t.length===1&&l0(t[0])&&(t=t[0]),t.length<2)throw new p0(\"streams\");let i=new E0,n=i.signal,o=r?.signal,s=[];_0(o,\"options.signal\");function a(){y(new b0);}o?.addEventListener(\"abort\",a);let l,c,h=[],d=0;function g(C){y(C,--d===0);}function y(C,R){if(C&&(!l||l.code===\"ERR_STREAM_PREMATURE_CLOSE\")&&(l=C),!(!l&&!R)){for(;h.length;)h.shift()(l);o?.removeEventListener(\"abort\",a),i.abort(),R&&(l||s.forEach(U=>U()),mi.nextTick(e,l,c));}}let w;for(let C=0;C0,W=U||r?.end!==!1,K=C===t.length-1;if(Oh(R)){let z=function(Q){Q&&Q.name!==\"AbortError\"&&Q.code!==\"ERR_STREAM_PREMATURE_CLOSE\"&&g(Q);};if(W){let{destroy:Q,cleanup:pe}=xh(R,U,N);h.push(Q),Ao(R)&&K&&s.push(pe);}R.on(\"error\",z),Ao(R)&&K&&s.push(()=>{R.removeListener(\"error\",z);});}if(C===0)if(typeof R==\"function\"){if(w=R({signal:n}),!dr(w))throw new So(\"Iterable, AsyncIterable or Stream\",\"source\",w)}else dr(R)||mn(R)||zr(R)?w=R:w=kh.from(R);else if(typeof R==\"function\"){if(zr(w)){var S;w=Co((S=w)===null||S===void 0?void 0:S.readable);}else w=Co(w);if(w=R(w,{signal:n}),U){if(!dr(w,!0))throw new So(\"AsyncIterable\",`transform[${C-1}]`,w)}else {var E;To||(To=Eo());let z=new To({objectMode:!0}),Q=(E=w)===null||E===void 0?void 0:E.then;if(typeof Q==\"function\")d++,Q.call(w,ge=>{c=ge,ge!=null&&z.write(ge),W&&z.end(),mi.nextTick(g);},ge=>{z.destroy(ge),mi.nextTick(g,ge);});else if(dr(w,!0))d++,_n(w,z,g,{end:W});else if(Io(w)||zr(w)){let ge=w.readable||w;d++,_n(ge,z,g,{end:W});}else throw new So(\"AsyncIterable or Promise\",\"destination\",w);w=z;let{destroy:pe,cleanup:Yt}=xh(w,!1,!0);h.push(pe),K&&s.push(Yt);}}else if(Oh(R)){if(mn(w)){d+=2;let z=T0(w,R,g,{end:W});Ao(R)&&K&&s.push(z);}else if(zr(w)||Io(w)){let z=w.readable||w;d++,_n(z,R,g,{end:W});}else if(dr(w))d++,_n(w,R,g,{end:W});else throw new Po(\"val\",[\"Readable\",\"Iterable\",\"AsyncIterable\",\"ReadableStream\",\"TransformStream\"],w);w=R;}else if(m0(R)){if(mn(w))d++,Bo(Co(w),R,g,{end:W});else if(Io(w)||dr(w))d++,Bo(w,R,g,{end:W});else if(zr(w))d++,Bo(w.readable,R,g,{end:W});else throw new Po(\"val\",[\"Readable\",\"Iterable\",\"AsyncIterable\",\"ReadableStream\",\"TransformStream\"],w);w=R;}else w=kh.from(R);}return (n!=null&&n.aborted||o!=null&&o.aborted)&&mi.nextTick(a),w}function T0(t,e,r,{end:i}){let n=!1;if(e.on(\"close\",()=>{n||r(new y0);}),t.pipe(e,{end:!1}),i){let s=function(){n=!0,e.end();};v0(t)?mi.nextTick(s):t.once(\"end\",s);}else r();return vn(t,{readable:!0,writable:!1},s=>{let a=t._readableState;s&&s.code===\"ERR_STREAM_PREMATURE_CLOSE\"&&a&&a.ended&&!a.errored&&!a.errorEmitted?t.once(\"end\",r).once(\"error\",r):r(s);}),vn(e,{readable:!1,writable:!0},r)}Lh.exports={pipelineImpl:Mh,pipeline:I0};});var Oo=M((yC,Fh)=>{_();v();m();var{pipeline:R0}=En(),Sn=nt(),{destroyer:C0}=ir(),{isNodeStream:An,isReadable:Uh,isWritable:Nh,isWebStream:ko,isTransformStream:pr,isWritableStream:qh,isReadableStream:Dh}=tt(),{AbortError:B0,codes:{ERR_INVALID_ARG_VALUE:jh,ERR_MISSING_ARGS:P0}}=Ae(),k0=vt();Fh.exports=function(...e){if(e.length===0)throw new P0(\"streams\");if(e.length===1)return Sn.from(e[0]);let r=[...e];if(typeof e[0]==\"function\"&&(e[0]=Sn.from(e[0])),typeof e[e.length-1]==\"function\"){let y=e.length-1;e[y]=Sn.from(e[y]);}for(let y=0;y0&&!(Nh(e[y])||qh(e[y])||pr(e[y])))throw new jh(`streams[${y}]`,r[y],\"must be writable\")}let i,n,o,s,a;function l(y){let w=s;s=null,w?w(y):y?a.destroy(y):!g&&!d&&a.destroy();}let c=e[0],h=R0(e,l),d=!!(Nh(c)||qh(c)||pr(c)),g=!!(Uh(h)||Dh(h)||pr(h));if(a=new Sn({writableObjectMode:!!(c!=null&&c.writableObjectMode),readableObjectMode:!!(h!=null&&h.writableObjectMode),writable:d,readable:g}),d){if(An(c))a._write=function(w,S,E){c.write(w,S)?E():i=E;},a._final=function(w){c.end(),n=w;},c.on(\"drain\",function(){if(i){let w=i;i=null,w();}});else if(ko(c)){let S=(pr(c)?c.writable:c).getWriter();a._write=async function(E,I,C){try{await S.ready,S.write(E).catch(()=>{}),C();}catch(R){C(R);}},a._final=async function(E){try{await S.ready,S.close().catch(()=>{}),n=E;}catch(I){E(I);}};}let y=pr(h)?h.readable:h;k0(y,()=>{if(n){let w=n;n=null,w();}});}if(g){if(An(h))h.on(\"readable\",function(){if(o){let y=o;o=null,y();}}),h.on(\"end\",function(){a.push(null);}),a._read=function(){for(;;){let y=h.read();if(y===null){o=a._read;return}if(!a.push(y))return}};else if(ko(h)){let w=(pr(h)?h.readable:h).getReader();a._read=async function(){for(;;)try{let{value:S,done:E}=await w.read();if(!a.push(S))return;if(E){a.push(null);return}}catch{return}};}}return a._destroy=function(y,w){!y&&s!==null&&(y=new B0),o=null,i=null,n=null,s===null?w(y):(s=w,An(h)&&C0(h,y));},a};});var Qh=M((TC,Lo)=>{_();v();m();var Vh=globalThis.AbortController||zi().AbortController,{codes:{ERR_INVALID_ARG_VALUE:O0,ERR_INVALID_ARG_TYPE:vi,ERR_MISSING_ARGS:x0,ERR_OUT_OF_RANGE:M0},AbortError:st}=Ae(),{validateAbortSignal:gr,validateInteger:L0,validateObject:yr}=hi(),U0=ce().Symbol(\"kWeak\"),{finished:N0}=vt(),q0=Oo(),{addAbortSignalNoValidate:D0}=di(),{isWritable:j0,isNodeStream:F0}=tt(),{ArrayPrototypePush:W0,MathFloor:$0,Number:H0,NumberIsNaN:V0,Promise:Wh,PromiseReject:$h,PromisePrototypeThen:z0,Symbol:zh}=ce(),In=zh(\"kEmpty\"),Hh=zh(\"kEof\");function K0(t,e){if(e!=null&&yr(e,\"options\"),e?.signal!=null&&gr(e.signal,\"options.signal\"),F0(t)&&!j0(t))throw new O0(\"stream\",t,\"must be writable\");let r=q0(this,t);return e!=null&&e.signal&&D0(e.signal,r),r}function Tn(t,e){if(typeof t!=\"function\")throw new vi(\"fn\",[\"Function\",\"AsyncFunction\"],t);e!=null&&yr(e,\"options\"),e?.signal!=null&&gr(e.signal,\"options.signal\");let r=1;return e?.concurrency!=null&&(r=$0(e.concurrency)),L0(r,\"concurrency\",1),async function*(){var n,o;let s=new Vh,a=this,l=[],c=s.signal,h={signal:c},d=()=>s.abort();e!=null&&(n=e.signal)!==null&&n!==void 0&&n.aborted&&d(),e==null||(o=e.signal)===null||o===void 0||o.addEventListener(\"abort\",d);let g,y,w=!1;function S(){w=!0;}async function E(){try{for await(let R of a){var I;if(w)return;if(c.aborted)throw new st;try{R=t(R,h);}catch(U){R=$h(U);}R!==In&&(typeof((I=R)===null||I===void 0?void 0:I.catch)==\"function\"&&R.catch(S),l.push(R),g&&(g(),g=null),!w&&l.length&&l.length>=r&&await new Wh(U=>{y=U;}));}l.push(Hh);}catch(R){let U=$h(R);z0(U,void 0,S),l.push(U);}finally{var C;w=!0,g&&(g(),g=null),e==null||(C=e.signal)===null||C===void 0||C.removeEventListener(\"abort\",d);}}E();try{for(;;){for(;l.length>0;){let I=await l[0];if(I===Hh)return;if(c.aborted)throw new st;I!==In&&(yield I),l.shift(),y&&(y(),y=null);}await new Wh(I=>{g=I;});}}finally{s.abort(),w=!0,y&&(y(),y=null);}}.call(this)}function G0(t=void 0){return t!=null&&yr(t,\"options\"),t?.signal!=null&&gr(t.signal,\"options.signal\"),async function*(){let r=0;for await(let n of this){var i;if(t!=null&&(i=t.signal)!==null&&i!==void 0&&i.aborted)throw new st({cause:t.signal.reason});yield [r++,n];}}.call(this)}async function Kh(t,e=void 0){for await(let r of Mo.call(this,t,e))return !0;return !1}async function Q0(t,e=void 0){if(typeof t!=\"function\")throw new vi(\"fn\",[\"Function\",\"AsyncFunction\"],t);return !await Kh.call(this,async(...r)=>!await t(...r),e)}async function Y0(t,e){for await(let r of Mo.call(this,t,e))return r}async function J0(t,e){if(typeof t!=\"function\")throw new vi(\"fn\",[\"Function\",\"AsyncFunction\"],t);async function r(i,n){return await t(i,n),In}for await(let i of Tn.call(this,r,e));}function Mo(t,e){if(typeof t!=\"function\")throw new vi(\"fn\",[\"Function\",\"AsyncFunction\"],t);async function r(i,n){return await t(i,n)?i:In}return Tn.call(this,r,e)}var xo=class extends x0{constructor(){super(\"reduce\"),this.message=\"Reduce of an empty stream requires an initial value\";}};async function X0(t,e,r){var i;if(typeof t!=\"function\")throw new vi(\"reducer\",[\"Function\",\"AsyncFunction\"],t);r!=null&&yr(r,\"options\"),r?.signal!=null&&gr(r.signal,\"options.signal\");let n=arguments.length>1;if(r!=null&&(i=r.signal)!==null&&i!==void 0&&i.aborted){let c=new st(void 0,{cause:r.signal.reason});throw this.once(\"error\",()=>{}),await N0(this.destroy(c)),c}let o=new Vh,s=o.signal;if(r!=null&&r.signal){let c={once:!0,[U0]:this};r.signal.addEventListener(\"abort\",()=>o.abort(),c);}let a=!1;try{for await(let c of this){var l;if(a=!0,r!=null&&(l=r.signal)!==null&&l!==void 0&&l.aborted)throw new st;n?e=await t(e,c,{signal:s}):(e=c,n=!0);}if(!a&&!n)throw new xo}finally{o.abort();}return e}async function Z0(t){t!=null&&yr(t,\"options\"),t?.signal!=null&&gr(t.signal,\"options.signal\");let e=[];for await(let i of this){var r;if(t!=null&&(r=t.signal)!==null&&r!==void 0&&r.aborted)throw new st(void 0,{cause:t.signal.reason});W0(e,i);}return e}function em(t,e){let r=Tn.call(this,t,e);return async function*(){for await(let n of r)yield*n;}.call(this)}function Gh(t){if(t=H0(t),V0(t))return 0;if(t<0)throw new M0(\"number\",\">= 0\",t);return t}function tm(t,e=void 0){return e!=null&&yr(e,\"options\"),e?.signal!=null&&gr(e.signal,\"options.signal\"),t=Gh(t),async function*(){var i;if(e!=null&&(i=e.signal)!==null&&i!==void 0&&i.aborted)throw new st;for await(let o of this){var n;if(e!=null&&(n=e.signal)!==null&&n!==void 0&&n.aborted)throw new st;t--<=0&&(yield o);}}.call(this)}function rm(t,e=void 0){return e!=null&&yr(e,\"options\"),e?.signal!=null&&gr(e.signal,\"options.signal\"),t=Gh(t),async function*(){var i;if(e!=null&&(i=e.signal)!==null&&i!==void 0&&i.aborted)throw new st;for await(let o of this){var n;if(e!=null&&(n=e.signal)!==null&&n!==void 0&&n.aborted)throw new st;if(t-- >0)yield o;else return}}.call(this)}Lo.exports.streamReturningOperators={asIndexedPairs:G0,drop:tm,filter:Mo,flatMap:em,map:Tn,take:rm,compose:K0};Lo.exports.promiseReturningOperators={every:Q0,forEach:J0,reduce:X0,toArray:Z0,some:Kh,find:Y0};});var Uo=M((UC,Yh)=>{_();v();m();var{ArrayPrototypePop:im,Promise:nm}=ce(),{isIterable:sm,isNodeStream:om,isWebStream:am}=tt(),{pipelineImpl:lm}=En(),{finished:um}=vt();No();function fm(...t){return new nm((e,r)=>{let i,n,o=t[t.length-1];if(o&&typeof o==\"object\"&&!om(o)&&!sm(o)&&!am(o)){let s=im(t);i=s.signal,n=s.end;}lm(t,(s,a)=>{s?r(s):e(a);},{signal:i,end:n});})}Yh.exports={finished:um,pipeline:fm};});var No=M((zC,sd)=>{_();v();m();var{Buffer:cm}=(be(),X(me)),{ObjectDefineProperty:Rt,ObjectKeys:Zh,ReflectApply:ed}=ce(),{promisify:{custom:td}}=Je(),{streamReturningOperators:Jh,promiseReturningOperators:Xh}=Qh(),{codes:{ERR_ILLEGAL_CONSTRUCTOR:rd}}=Ae(),hm=Oo(),{pipeline:id}=En(),{destroyer:dm}=ir(),nd=vt(),qo=Uo(),Do=tt(),le=sd.exports=nn().Stream;le.isDisturbed=Do.isDisturbed;le.isErrored=Do.isErrored;le.isReadable=Do.isReadable;le.Readable=gi();for(let t of Zh(Jh)){let r=function(...i){if(new.target)throw rd();return le.Readable.from(ed(e,this,i))};let e=Jh[t];Rt(r,\"name\",{__proto__:null,value:e.name}),Rt(r,\"length\",{__proto__:null,value:e.length}),Rt(le.Readable.prototype,t,{__proto__:null,value:r,enumerable:!1,configurable:!0,writable:!0});}for(let t of Zh(Xh)){let r=function(...n){if(new.target)throw rd();return ed(e,this,n)};let e=Xh[t];Rt(r,\"name\",{__proto__:null,value:e.name}),Rt(r,\"length\",{__proto__:null,value:e.length}),Rt(le.Readable.prototype,t,{__proto__:null,value:r,enumerable:!1,configurable:!0,writable:!0});}le.Writable=ho();le.Duplex=nt();le.Transform=mo();le.PassThrough=Eo();le.pipeline=id;var{addAbortSignal:pm}=di();le.addAbortSignal=pm;le.finished=nd;le.destroy=dm;le.compose=hm;Rt(le,\"promises\",{__proto__:null,configurable:!0,enumerable:!0,get(){return qo}});Rt(id,td,{__proto__:null,enumerable:!0,get(){return qo.pipeline}});Rt(nd,td,{__proto__:null,enumerable:!0,get(){return qo.finished}});le.Stream=le;le._isUint8Array=function(e){return e instanceof Uint8Array};le._uint8ArrayToBuffer=function(e){return cm.from(e.buffer,e.byteOffset,e.byteLength)};});var jt=M((rB,ue)=>{_();v();m();var he=No(),gm=Uo(),ym=he.Readable.destroy;ue.exports=he.Readable;ue.exports._uint8ArrayToBuffer=he._uint8ArrayToBuffer;ue.exports._isUint8Array=he._isUint8Array;ue.exports.isDisturbed=he.isDisturbed;ue.exports.isErrored=he.isErrored;ue.exports.isReadable=he.isReadable;ue.exports.Readable=he.Readable;ue.exports.Writable=he.Writable;ue.exports.Duplex=he.Duplex;ue.exports.Transform=he.Transform;ue.exports.PassThrough=he.PassThrough;ue.exports.addAbortSignal=he.addAbortSignal;ue.exports.finished=he.finished;ue.exports.destroy=he.destroy;ue.exports.destroy=ym;ue.exports.pipeline=he.pipeline;ue.exports.compose=he.compose;Object.defineProperty(he,\"promises\",{configurable:!0,enumerable:!0,get(){return gm}});ue.exports.Stream=he.Stream;ue.exports.default=ue.exports;});var od=M((hB,Fo)=>{_();v();m();typeof Object.create==\"function\"?Fo.exports=function(e,r){r&&(e.super_=r,e.prototype=Object.create(r.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}));}:Fo.exports=function(e,r){if(r){e.super_=r;var i=function(){};i.prototype=r.prototype,e.prototype=new i,e.prototype.constructor=e;}};});var ud=M((EB,ld)=>{_();v();m();var{Buffer:ze}=(be(),X(me)),ad=Symbol.for(\"BufferList\");function ee(t){if(!(this instanceof ee))return new ee(t);ee._init.call(this,t);}ee._init=function(e){Object.defineProperty(this,ad,{value:!0}),this._bufs=[],this.length=0,e&&this.append(e);};ee.prototype._new=function(e){return new ee(e)};ee.prototype._offset=function(e){if(e===0)return [0,0];let r=0;for(let i=0;ithis.length||e<0)return;let r=this._offset(e);return this._bufs[r[0]][r[1]]};ee.prototype.slice=function(e,r){return typeof e==\"number\"&&e<0&&(e+=this.length),typeof r==\"number\"&&r<0&&(r+=this.length),this.copy(null,0,e,r)};ee.prototype.copy=function(e,r,i,n){if((typeof i!=\"number\"||i<0)&&(i=0),(typeof n!=\"number\"||n>this.length)&&(n=this.length),i>=this.length||n<=0)return e||ze.alloc(0);let o=!!e,s=this._offset(i),a=n-i,l=a,c=o&&r||0,h=s[1];if(i===0&&n===this.length){if(!o)return this._bufs.length===1?this._bufs[0]:ze.concat(this._bufs,this.length);for(let d=0;dg)this._bufs[d].copy(e,c,h),c+=g;else {this._bufs[d].copy(e,c,h,h+l),c+=g;break}l-=g,h&&(h=0);}return e.length>c?e.slice(0,c):e};ee.prototype.shallowSlice=function(e,r){if(e=e||0,r=typeof r!=\"number\"?this.length:r,e<0&&(e+=this.length),r<0&&(r+=this.length),e===r)return this._new();let i=this._offset(e),n=this._offset(r),o=this._bufs.slice(i[0],n[0]+1);return n[1]===0?o.pop():o[o.length-1]=o[o.length-1].slice(0,n[1]),i[1]!==0&&(o[0]=o[0].slice(i[1])),this._new(o)};ee.prototype.toString=function(e,r,i){return this.slice(r,i).toString(e)};ee.prototype.consume=function(e){if(e=Math.trunc(e),Number.isNaN(e)||e<=0)return this;for(;this._bufs.length;)if(e>=this._bufs[0].length)e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift();else {this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}return this};ee.prototype.duplicate=function(){let e=this._new();for(let r=0;rthis.length?this.length:e;let i=this._offset(e),n=i[0],o=i[1];for(;n=t.length){let l=s.indexOf(t,o);if(l!==-1)return this._reverseOffset([n,l]);o=s.length-t.length+1;}else {let l=this._reverseOffset([n,o]);if(this._match(l,t))return l;o++;}o=0;}return -1};ee.prototype._match=function(t,e){if(this.length-t{_();v();m();var Wo=jt().Duplex,bm=od(),Ei=ud();function Se(t){if(!(this instanceof Se))return new Se(t);if(typeof t==\"function\"){this._callback=t;let e=function(i){this._callback&&(this._callback(i),this._callback=null);}.bind(this);this.on(\"pipe\",function(i){i.on(\"error\",e);}),this.on(\"unpipe\",function(i){i.removeListener(\"error\",e);}),t=null;}Ei._init.call(this,t),Wo.call(this);}bm(Se,Wo);Object.assign(Se.prototype,Ei.prototype);Se.prototype._new=function(e){return new Se(e)};Se.prototype._write=function(e,r,i){this._appendBuffer(e),typeof i==\"function\"&&i();};Se.prototype._read=function(e){if(!this.length)return this.push(null);e=Math.min(e,this.length),this.push(this.slice(0,e)),this.consume(e);};Se.prototype.end=function(e){Wo.prototype.end.call(this,e),this._callback&&(this._callback(null,this.slice()),this._callback=null);};Se.prototype._destroy=function(e,r){this._bufs.length=0,this.length=0,r(e);};Se.prototype._isBufferList=function(e){return e instanceof Se||e instanceof Ei||Se.isBufferList(e)};Se.isBufferList=Ei.isBufferList;Rn.exports=Se;Rn.exports.BufferListStream=Se;Rn.exports.BufferList=Ei;});var hd=M((WB,cd)=>{_();v();m();var $o=class{constructor(){this.cmd=null,this.retain=!1,this.qos=0,this.dup=!1,this.length=-1,this.topic=null,this.payload=null;}};cd.exports=$o;});var Ho=M((XB,dd)=>{_();v();m();var L=dd.exports,{Buffer:ke}=(be(),X(me));L.types={0:\"reserved\",1:\"connect\",2:\"connack\",3:\"publish\",4:\"puback\",5:\"pubrec\",6:\"pubrel\",7:\"pubcomp\",8:\"subscribe\",9:\"suback\",10:\"unsubscribe\",11:\"unsuback\",12:\"pingreq\",13:\"pingresp\",14:\"disconnect\",15:\"auth\"};L.requiredHeaderFlags={1:0,2:0,4:0,5:0,6:2,7:0,8:2,9:0,10:2,11:0,12:0,13:0,14:0,15:0};L.requiredHeaderFlagsErrors={};for(let t in L.requiredHeaderFlags){let e=L.requiredHeaderFlags[t];L.requiredHeaderFlagsErrors[t]=\"Invalid header flag bits, must be 0x\"+e.toString(16)+\" for \"+L.types[t]+\" packet\";}L.codes={};for(let t in L.types){let e=L.types[t];L.codes[e]=t;}L.CMD_SHIFT=4;L.CMD_MASK=240;L.DUP_MASK=8;L.QOS_MASK=3;L.QOS_SHIFT=1;L.RETAIN_MASK=1;L.VARBYTEINT_MASK=127;L.VARBYTEINT_FIN_MASK=128;L.VARBYTEINT_MAX=268435455;L.SESSIONPRESENT_MASK=1;L.SESSIONPRESENT_HEADER=ke.from([L.SESSIONPRESENT_MASK]);L.CONNACK_HEADER=ke.from([L.codes.connack<[0,1].map(r=>[0,1].map(i=>{let n=ke.alloc(1);return n.writeUInt8(L.codes[t]<ke.from([t]));L.EMPTY={pingreq:ke.from([L.codes.pingreq<<4,0]),pingresp:ke.from([L.codes.pingresp<<4,0]),disconnect:ke.from([L.codes.disconnect<<4,0])};L.MQTT5_PUBACK_PUBREC_CODES={0:\"Success\",16:\"No matching subscribers\",128:\"Unspecified error\",131:\"Implementation specific error\",135:\"Not authorized\",144:\"Topic Name invalid\",145:\"Packet identifier in use\",151:\"Quota exceeded\",153:\"Payload format invalid\"};L.MQTT5_PUBREL_PUBCOMP_CODES={0:\"Success\",146:\"Packet Identifier not found\"};L.MQTT5_SUBACK_CODES={0:\"Granted QoS 0\",1:\"Granted QoS 1\",2:\"Granted QoS 2\",128:\"Unspecified error\",131:\"Implementation specific error\",135:\"Not authorized\",143:\"Topic Filter invalid\",145:\"Packet Identifier in use\",151:\"Quota exceeded\",158:\"Shared Subscriptions not supported\",161:\"Subscription Identifiers not supported\",162:\"Wildcard Subscriptions not supported\"};L.MQTT5_UNSUBACK_CODES={0:\"Success\",17:\"No subscription existed\",128:\"Unspecified error\",131:\"Implementation specific error\",135:\"Not authorized\",143:\"Topic Filter invalid\",145:\"Packet Identifier in use\"};L.MQTT5_DISCONNECT_CODES={0:\"Normal disconnection\",4:\"Disconnect with Will Message\",128:\"Unspecified error\",129:\"Malformed Packet\",130:\"Protocol Error\",131:\"Implementation specific error\",135:\"Not authorized\",137:\"Server busy\",139:\"Server shutting down\",141:\"Keep Alive timeout\",142:\"Session taken over\",143:\"Topic Filter invalid\",144:\"Topic Name invalid\",147:\"Receive Maximum exceeded\",148:\"Topic Alias invalid\",149:\"Packet too large\",150:\"Message rate too high\",151:\"Quota exceeded\",152:\"Administrative action\",153:\"Payload format invalid\",154:\"Retain not supported\",155:\"QoS not supported\",156:\"Use another server\",157:\"Server moved\",158:\"Shared Subscriptions not supported\",159:\"Connection rate exceeded\",160:\"Maximum connect time\",161:\"Subscription Identifiers not supported\",162:\"Wildcard Subscriptions not supported\"};L.MQTT5_AUTH_CODES={0:\"Success\",24:\"Continue authentication\",25:\"Re-authenticate\"};});var gd=M((lP,pd)=>{_();v();m();var Kr=1e3,Gr=Kr*60,Qr=Gr*60,br=Qr*24,wm=br*7,_m=br*365.25;pd.exports=function(t,e){e=e||{};var r=typeof t;if(r===\"string\"&&t.length>0)return mm(t);if(r===\"number\"&&isFinite(t))return e.long?Em(t):vm(t);throw new Error(\"val is not a non-empty string or a valid number. val=\"+JSON.stringify(t))};function mm(t){if(t=String(t),!(t.length>100)){var e=/^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(t);if(e){var r=parseFloat(e[1]),i=(e[2]||\"ms\").toLowerCase();switch(i){case\"years\":case\"year\":case\"yrs\":case\"yr\":case\"y\":return r*_m;case\"weeks\":case\"week\":case\"w\":return r*wm;case\"days\":case\"day\":case\"d\":return r*br;case\"hours\":case\"hour\":case\"hrs\":case\"hr\":case\"h\":return r*Qr;case\"minutes\":case\"minute\":case\"mins\":case\"min\":case\"m\":return r*Gr;case\"seconds\":case\"second\":case\"secs\":case\"sec\":case\"s\":return r*Kr;case\"milliseconds\":case\"millisecond\":case\"msecs\":case\"msec\":case\"ms\":return r;default:return}}}}function vm(t){var e=Math.abs(t);return e>=br?Math.round(t/br)+\"d\":e>=Qr?Math.round(t/Qr)+\"h\":e>=Gr?Math.round(t/Gr)+\"m\":e>=Kr?Math.round(t/Kr)+\"s\":t+\"ms\"}function Em(t){var e=Math.abs(t);return e>=br?Cn(t,e,br,\"day\"):e>=Qr?Cn(t,e,Qr,\"hour\"):e>=Gr?Cn(t,e,Gr,\"minute\"):e>=Kr?Cn(t,e,Kr,\"second\"):t+\" ms\"}function Cn(t,e,r,i){var n=e>=r*1.5;return Math.round(t/r)+\" \"+i+(n?\"s\":\"\")}});var bd=M((wP,yd)=>{_();v();m();function Sm(t){r.debug=r,r.default=r,r.coerce=l,r.disable=o,r.enable=n,r.enabled=s,r.humanize=gd(),r.destroy=c,Object.keys(t).forEach(h=>{r[h]=t[h];}),r.names=[],r.skips=[],r.formatters={};function e(h){let d=0;for(let g=0;g{if(W===\"%%\")return \"%\";U++;let z=r.formatters[K];if(typeof z==\"function\"){let Q=E[U];W=z.call(I,Q),E.splice(U,1),U--;}return W}),r.formatArgs.call(I,E),(I.log||r.log).apply(I,E);}return S.namespace=h,S.useColors=r.useColors(),S.color=r.selectColor(h),S.extend=i,S.destroy=r.destroy,Object.defineProperty(S,\"enabled\",{enumerable:!0,configurable:!1,get:()=>g!==null?g:(y!==r.namespaces&&(y=r.namespaces,w=r.enabled(h)),w),set:E=>{g=E;}}),typeof r.init==\"function\"&&r.init(S),S}function i(h,d){let g=r(this.namespace+(typeof d>\"u\"?\":\":d)+h);return g.log=this.log,g}function n(h){r.save(h),r.namespaces=h,r.names=[],r.skips=[];let d,g=(typeof h==\"string\"?h:\"\").split(/[\\s,]+/),y=g.length;for(d=0;d\"-\"+d)].join(\",\");return r.enable(\"\"),h}function s(h){if(h[h.length-1]===\"*\")return !0;let d,g;for(d=0,g=r.skips.length;d{_();v();m();xe.formatArgs=Im;xe.save=Tm;xe.load=Rm;xe.useColors=Am;xe.storage=Cm();xe.destroy=(()=>{let t=!1;return ()=>{t||(t=!0,console.warn(\"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.\"));}})();xe.colors=[\"#0000CC\",\"#0000FF\",\"#0033CC\",\"#0033FF\",\"#0066CC\",\"#0066FF\",\"#0099CC\",\"#0099FF\",\"#00CC00\",\"#00CC33\",\"#00CC66\",\"#00CC99\",\"#00CCCC\",\"#00CCFF\",\"#3300CC\",\"#3300FF\",\"#3333CC\",\"#3333FF\",\"#3366CC\",\"#3366FF\",\"#3399CC\",\"#3399FF\",\"#33CC00\",\"#33CC33\",\"#33CC66\",\"#33CC99\",\"#33CCCC\",\"#33CCFF\",\"#6600CC\",\"#6600FF\",\"#6633CC\",\"#6633FF\",\"#66CC00\",\"#66CC33\",\"#9900CC\",\"#9900FF\",\"#9933CC\",\"#9933FF\",\"#99CC00\",\"#99CC33\",\"#CC0000\",\"#CC0033\",\"#CC0066\",\"#CC0099\",\"#CC00CC\",\"#CC00FF\",\"#CC3300\",\"#CC3333\",\"#CC3366\",\"#CC3399\",\"#CC33CC\",\"#CC33FF\",\"#CC6600\",\"#CC6633\",\"#CC9900\",\"#CC9933\",\"#CCCC00\",\"#CCCC33\",\"#FF0000\",\"#FF0033\",\"#FF0066\",\"#FF0099\",\"#FF00CC\",\"#FF00FF\",\"#FF3300\",\"#FF3333\",\"#FF3366\",\"#FF3399\",\"#FF33CC\",\"#FF33FF\",\"#FF6600\",\"#FF6633\",\"#FF9900\",\"#FF9933\",\"#FFCC00\",\"#FFCC33\"];function Am(){return typeof window<\"u\"&&window.process&&(window.process.type===\"renderer\"||window.process.__nwjs)?!0:typeof navigator<\"u\"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)?!1:typeof document<\"u\"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<\"u\"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<\"u\"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof navigator<\"u\"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/)}function Im(t){if(t[0]=(this.useColors?\"%c\":\"\")+this.namespace+(this.useColors?\" %c\":\" \")+t[0]+(this.useColors?\"%c \":\" \")+\"+\"+Bn.exports.humanize(this.diff),!this.useColors)return;let e=\"color: \"+this.color;t.splice(1,0,e,\"color: inherit\");let r=0,i=0;t[0].replace(/%[a-zA-Z%]/g,n=>{n!==\"%%\"&&(r++,n===\"%c\"&&(i=r));}),t.splice(i,0,e);}xe.log=console.debug||console.log||(()=>{});function Tm(t){try{t?xe.storage.setItem(\"debug\",t):xe.storage.removeItem(\"debug\");}catch{}}function Rm(){let t;try{t=xe.storage.getItem(\"debug\");}catch{}return !t&&typeof B<\"u\"&&\"env\"in B&&(t=B.env.DEBUG),t}function Cm(){try{return localStorage}catch{}}Bn.exports=bd()(xe);var{formatters:Bm}=Bn.exports;Bm.j=function(t){try{return JSON.stringify(t)}catch(e){return \"[UnexpectedJSONParseError]: \"+e.message}};});var md=M((NP,_d)=>{_();v();m();var Pm=fd(),{EventEmitter:km}=(sr(),X(nr)),wd=hd(),V=Ho(),D=ot()(\"mqtt-packet:parser\"),Vo=class t extends km{constructor(){super(),this.parser=this.constructor.parser;}static parser(e){return this instanceof t?(this.settings=e||{},this._states=[\"_parseHeader\",\"_parseLength\",\"_parsePayload\",\"_newPacket\"],this._resetState(),this):new t().parser(e)}_resetState(){D(\"_resetState: resetting packet, error, _list, and _stateCounter\"),this.packet=new wd,this.error=null,this._list=Pm(),this._stateCounter=0;}parse(e){for(this.error&&this._resetState(),this._list.append(e),D(\"parse: current state: %s\",this._states[this._stateCounter]);(this.packet.length!==-1||this._list.length>0)&&this[this._states[this._stateCounter]]()&&!this.error;)this._stateCounter++,D(\"parse: state complete. _stateCounter is now: %d\",this._stateCounter),D(\"parse: packet.length: %d, buffer list length: %d\",this.packet.length,this._list.length),this._stateCounter>=this._states.length&&(this._stateCounter=0);return D(\"parse: exited while loop. packet: %d, buffer list length: %d\",this.packet.length,this._list.length),this._list.length}_parseHeader(){let e=this._list.readUInt8(0),r=e>>V.CMD_SHIFT;this.packet.cmd=V.types[r];let i=e&15,n=V.requiredHeaderFlags[r];return n!=null&&i!==n?this._emitError(new Error(V.requiredHeaderFlagsErrors[r])):(this.packet.retain=(e&V.RETAIN_MASK)!==0,this.packet.qos=e>>V.QOS_SHIFT&V.QOS_MASK,this.packet.qos>2?this._emitError(new Error(\"Packet must not have both QoS bits set to 1\")):(this.packet.dup=(e&V.DUP_MASK)!==0,D(\"_parseHeader: packet: %o\",this.packet),this._list.consume(1),!0))}_parseLength(){let e=this._parseVarByteNum(!0);return e&&(this.packet.length=e.value,this._list.consume(e.bytes)),D(\"_parseLength %d\",e.value),!!e}_parsePayload(){D(\"_parsePayload: payload %O\",this._list);let e=!1;if(this.packet.length===0||this._list.length>=this.packet.length){switch(this._pos=0,this.packet.cmd){case\"connect\":this._parseConnect();break;case\"connack\":this._parseConnack();break;case\"publish\":this._parsePublish();break;case\"puback\":case\"pubrec\":case\"pubrel\":case\"pubcomp\":this._parseConfirmation();break;case\"subscribe\":this._parseSubscribe();break;case\"suback\":this._parseSuback();break;case\"unsubscribe\":this._parseUnsubscribe();break;case\"unsuback\":this._parseUnsuback();break;case\"pingreq\":case\"pingresp\":break;case\"disconnect\":this._parseDisconnect();break;case\"auth\":this._parseAuth();break;default:this._emitError(new Error(\"Not supported\"));}e=!0;}return D(\"_parsePayload complete result: %s\",e),e}_parseConnect(){D(\"_parseConnect\");let e,r,i,n,o={},s=this.packet,a=this._parseString();if(a===null)return this._emitError(new Error(\"Cannot parse protocolId\"));if(a!==\"MQTT\"&&a!==\"MQIsdp\")return this._emitError(new Error(\"Invalid protocolId\"));if(s.protocolId=a,this._pos>=this._list.length)return this._emitError(new Error(\"Packet too short\"));if(s.protocolVersion=this._list.readUInt8(this._pos),s.protocolVersion>=128&&(s.bridgeMode=!0,s.protocolVersion=s.protocolVersion-128),s.protocolVersion!==3&&s.protocolVersion!==4&&s.protocolVersion!==5)return this._emitError(new Error(\"Invalid protocol version\"));if(this._pos++,this._pos>=this._list.length)return this._emitError(new Error(\"Packet too short\"));if(this._list.readUInt8(this._pos)&1)return this._emitError(new Error(\"Connect flag bit 0 must be 0, but got 1\"));o.username=this._list.readUInt8(this._pos)&V.USERNAME_MASK,o.password=this._list.readUInt8(this._pos)&V.PASSWORD_MASK,o.will=this._list.readUInt8(this._pos)&V.WILL_FLAG_MASK;let l=!!(this._list.readUInt8(this._pos)&V.WILL_RETAIN_MASK),c=(this._list.readUInt8(this._pos)&V.WILL_QOS_MASK)>>V.WILL_QOS_SHIFT;if(o.will)s.will={},s.will.retain=l,s.will.qos=c;else {if(l)return this._emitError(new Error(\"Will Retain Flag must be set to zero when Will Flag is set to 0\"));if(c)return this._emitError(new Error(\"Will QoS must be set to zero when Will Flag is set to 0\"))}if(s.clean=(this._list.readUInt8(this._pos)&V.CLEAN_SESSION_MASK)!==0,this._pos++,s.keepalive=this._parseNum(),s.keepalive===-1)return this._emitError(new Error(\"Packet too short\"));if(s.protocolVersion===5){let d=this._parseProperties();Object.getOwnPropertyNames(d).length&&(s.properties=d);}let h=this._parseString();if(h===null)return this._emitError(new Error(\"Packet too short\"));if(s.clientId=h,D(\"_parseConnect: packet.clientId: %s\",s.clientId),o.will){if(s.protocolVersion===5){let d=this._parseProperties();Object.getOwnPropertyNames(d).length&&(s.will.properties=d);}if(e=this._parseString(),e===null)return this._emitError(new Error(\"Cannot parse will topic\"));if(s.will.topic=e,D(\"_parseConnect: packet.will.topic: %s\",s.will.topic),r=this._parseBuffer(),r===null)return this._emitError(new Error(\"Cannot parse will payload\"));s.will.payload=r,D(\"_parseConnect: packet.will.paylaod: %s\",s.will.payload);}if(o.username){if(n=this._parseString(),n===null)return this._emitError(new Error(\"Cannot parse username\"));s.username=n,D(\"_parseConnect: packet.username: %s\",s.username);}if(o.password){if(i=this._parseBuffer(),i===null)return this._emitError(new Error(\"Cannot parse password\"));s.password=i;}return this.settings=s,D(\"_parseConnect: complete\"),s}_parseConnack(){D(\"_parseConnack\");let e=this.packet;if(this._list.length<1)return null;let r=this._list.readUInt8(this._pos++);if(r>1)return this._emitError(new Error(\"Invalid connack flags, bits 7-1 must be set to 0\"));if(e.sessionPresent=!!(r&V.SESSIONPRESENT_MASK),this.settings.protocolVersion===5)this._list.length>=2?e.reasonCode=this._list.readUInt8(this._pos++):e.reasonCode=0;else {if(this._list.length<2)return null;e.returnCode=this._list.readUInt8(this._pos++);}if(e.returnCode===-1||e.reasonCode===-1)return this._emitError(new Error(\"Cannot parse return code\"));if(this.settings.protocolVersion===5){let i=this._parseProperties();Object.getOwnPropertyNames(i).length&&(e.properties=i);}D(\"_parseConnack: complete\");}_parsePublish(){D(\"_parsePublish\");let e=this.packet;if(e.topic=this._parseString(),e.topic===null)return this._emitError(new Error(\"Cannot parse topic\"));if(!(e.qos>0&&!this._parseMessageId())){if(this.settings.protocolVersion===5){let r=this._parseProperties();Object.getOwnPropertyNames(r).length&&(e.properties=r);}e.payload=this._list.slice(this._pos,e.length),D(\"_parsePublish: payload from buffer list: %o\",e.payload);}}_parseSubscribe(){D(\"_parseSubscribe\");let e=this.packet,r,i,n,o,s,a,l;if(e.subscriptions=[],!!this._parseMessageId()){if(this.settings.protocolVersion===5){let c=this._parseProperties();Object.getOwnPropertyNames(c).length&&(e.properties=c);}if(e.length<=0)return this._emitError(new Error(\"Malformed subscribe, no payload specified\"));for(;this._pos=e.length)return this._emitError(new Error(\"Malformed Subscribe Payload\"));if(i=this._parseByte(),this.settings.protocolVersion===5){if(i&192)return this._emitError(new Error(\"Invalid subscribe topic flag bits, bits 7-6 must be 0\"))}else if(i&252)return this._emitError(new Error(\"Invalid subscribe topic flag bits, bits 7-2 must be 0\"));if(n=i&V.SUBSCRIBE_OPTIONS_QOS_MASK,n>2)return this._emitError(new Error(\"Invalid subscribe QoS, must be <= 2\"));if(a=(i>>V.SUBSCRIBE_OPTIONS_NL_SHIFT&V.SUBSCRIBE_OPTIONS_NL_MASK)!==0,s=(i>>V.SUBSCRIBE_OPTIONS_RAP_SHIFT&V.SUBSCRIBE_OPTIONS_RAP_MASK)!==0,o=i>>V.SUBSCRIBE_OPTIONS_RH_SHIFT&V.SUBSCRIBE_OPTIONS_RH_MASK,o>2)return this._emitError(new Error(\"Invalid retain handling, must be <= 2\"));l={topic:r,qos:n},this.settings.protocolVersion===5?(l.nl=a,l.rap=s,l.rh=o):this.settings.bridgeMode&&(l.rh=0,l.rap=!0,l.nl=!0),D(\"_parseSubscribe: push subscription `%s` to subscription\",l),e.subscriptions.push(l);}}}_parseSuback(){D(\"_parseSuback\");let e=this.packet;if(this.packet.granted=[],!!this._parseMessageId()){if(this.settings.protocolVersion===5){let r=this._parseProperties();Object.getOwnPropertyNames(r).length&&(e.properties=r);}if(e.length<=0)return this._emitError(new Error(\"Malformed suback, no payload specified\"));for(;this._pos2&&r!==128)return this._emitError(new Error(\"Invalid suback QoS, must be 0, 1, 2 or 128\"));this.packet.granted.push(r);}}}_parseUnsubscribe(){D(\"_parseUnsubscribe\");let e=this.packet;if(e.unsubscriptions=[],!!this._parseMessageId()){if(this.settings.protocolVersion===5){let r=this._parseProperties();Object.getOwnPropertyNames(r).length&&(e.properties=r);}if(e.length<=0)return this._emitError(new Error(\"Malformed unsubscribe, no payload specified\"));for(;this._pos2){switch(e.reasonCode=this._parseByte(),this.packet.cmd){case\"puback\":case\"pubrec\":if(!V.MQTT5_PUBACK_PUBREC_CODES[e.reasonCode])return this._emitError(new Error(\"Invalid \"+this.packet.cmd+\" reason code\"));break;case\"pubrel\":case\"pubcomp\":if(!V.MQTT5_PUBREL_PUBCOMP_CODES[e.reasonCode])return this._emitError(new Error(\"Invalid \"+this.packet.cmd+\" reason code\"));break}D(\"_parseConfirmation: packet.reasonCode `%d`\",e.reasonCode);}else e.reasonCode=0;if(e.length>3){let r=this._parseProperties();Object.getOwnPropertyNames(r).length&&(e.properties=r);}}return !0}_parseDisconnect(){let e=this.packet;if(D(\"_parseDisconnect\"),this.settings.protocolVersion===5){this._list.length>0?(e.reasonCode=this._parseByte(),V.MQTT5_DISCONNECT_CODES[e.reasonCode]||this._emitError(new Error(\"Invalid disconnect reason code\"))):e.reasonCode=0;let r=this._parseProperties();Object.getOwnPropertyNames(r).length&&(e.properties=r);}return D(\"_parseDisconnect result: true\"),!0}_parseAuth(){D(\"_parseAuth\");let e=this.packet;if(this.settings.protocolVersion!==5)return this._emitError(new Error(\"Not supported auth packet for this version MQTT\"));if(e.reasonCode=this._parseByte(),!V.MQTT5_AUTH_CODES[e.reasonCode])return this._emitError(new Error(\"Invalid auth reason code\"));let r=this._parseProperties();return Object.getOwnPropertyNames(r).length&&(e.properties=r),D(\"_parseAuth: result: true\"),!0}_parseMessageId(){let e=this.packet;return e.messageId=this._parseNum(),e.messageId===null?(this._emitError(new Error(\"Cannot parse messageId\")),!1):(D(\"_parseMessageId: packet.messageId %d\",e.messageId),!0)}_parseString(e){let r=this._parseNum(),i=r+this._pos;if(r===-1||i>this._list.length||i>this.packet.length)return null;let n=this._list.toString(\"utf8\",this._pos,i);return this._pos+=r,D(\"_parseString: result: %s\",n),n}_parseStringPair(){return D(\"_parseStringPair\"),{name:this._parseString(),value:this._parseString()}}_parseBuffer(){let e=this._parseNum(),r=e+this._pos;if(e===-1||r>this._list.length||r>this.packet.length)return null;let i=this._list.slice(this._pos,r);return this._pos+=e,D(\"_parseBuffer: result: %o\",i),i}_parseNum(){if(this._list.length-this._pos<2)return -1;let e=this._list.readUInt16BE(this._pos);return this._pos+=2,D(\"_parseNum: result: %s\",e),e}_parse4ByteNum(){if(this._list.length-this._pos<4)return -1;let e=this._list.readUInt32BE(this._pos);return this._pos+=4,D(\"_parse4ByteNum: result: %s\",e),e}_parseVarByteNum(e){D(\"_parseVarByteNum\");let r=4,i=0,n=1,o=0,s=!1,a,l=this._pos?this._pos:0;for(;i=i&&this._emitError(new Error(\"Invalid variable byte integer\")),l&&(this._pos+=i),s?e?s={bytes:i,value:o}:s=o:s=!1,D(\"_parseVarByteNum: result: %o\",s),s}_parseByte(){let e;return this._pos{_();v();m();var{Buffer:Si}=(be(),X(me)),Om=65536,vd={},xm=Si.isBuffer(Si.from([1,2]).subarray(0,1));function Ed(t){let e=Si.allocUnsafe(2);return e.writeUInt8(t>>8,0),e.writeUInt8(t&255,0+1),e}function Mm(){for(let t=0;t0&&(r=r|128),n.writeUInt8(r,i++);while(t>0&&i<4);return t>0&&(i=0),xm?n.subarray(0,i):n.slice(0,i)}function Um(t){let e=Si.allocUnsafe(4);return e.writeUInt32BE(t,0),e}Sd.exports={cache:vd,generateCache:Mm,generateNumber:Ed,genBufVariableByteInt:Lm,generate4ByteBuffer:Um};});var Id=M((ik,zo)=>{_();v();m();typeof B>\"u\"||!B.version||B.version.indexOf(\"v0.\")===0||B.version.indexOf(\"v1.\")===0&&B.version.indexOf(\"v1.8.\")!==0?zo.exports={nextTick:Nm}:zo.exports=B;function Nm(t,e,r,i){if(typeof t!=\"function\")throw new TypeError('\"callback\" argument must be a function');var n=arguments.length,o,s;switch(n){case 0:case 1:return B.nextTick(t);case 2:return B.nextTick(function(){t.call(null,e);});case 3:return B.nextTick(function(){t.call(null,e,r);});case 4:return B.nextTick(function(){t.call(null,e,r,i);});default:for(o=new Array(n-1),s=0;s{_();v();m();var j=Ho(),{Buffer:q}=(be(),X(me)),qm=q.allocUnsafe(0),Dm=q.from([0]),Ai=Ad(),jm=Id().nextTick,qe=ot()(\"mqtt-packet:writeToStream\"),Pn=Ai.cache,Fm=Ai.generateNumber,Wm=Ai.generateCache,Ko=Ai.genBufVariableByteInt,$m=Ai.generate4ByteBuffer,Te=Go,kn=!0;function kd(t,e,r){switch(qe(\"generate called\"),e.cork&&(e.cork(),jm(Hm,e)),kn&&(kn=!1,Wm()),qe(\"generate: packet.cmd: %s\",t.cmd),t.cmd){case\"connect\":return Vm(t,e);case\"connack\":return zm(t,e,r);case\"publish\":return Km(t,e,r);case\"puback\":case\"pubrec\":case\"pubrel\":case\"pubcomp\":return Gm(t,e,r);case\"subscribe\":return Qm(t,e,r);case\"suback\":return Ym(t,e,r);case\"unsubscribe\":return Jm(t,e,r);case\"unsuback\":return Xm(t,e,r);case\"pingreq\":case\"pingresp\":return Zm(t,e);case\"disconnect\":return e1(t,e,r);case\"auth\":return t1(t,e,r);default:return e.destroy(new Error(\"Unknown command\")),!1}}Object.defineProperty(kd,\"cacheNumbers\",{get(){return Te===Go},set(t){t?((!Pn||Object.keys(Pn).length===0)&&(kn=!0),Te=Go):(kn=!1,Te=r1);}});function Hm(t){t.uncork();}function Vm(t,e,r){let i=t||{},n=i.protocolId||\"MQTT\",o=i.protocolVersion||4,s=i.will,a=i.clean,l=i.keepalive||0,c=i.clientId||\"\",h=i.username,d=i.password,g=i.properties;a===void 0&&(a=!0);let y=0;if(!n||typeof n!=\"string\"&&!q.isBuffer(n))return e.destroy(new Error(\"Invalid protocolId\")),!1;if(y+=n.length+2,o!==3&&o!==4&&o!==5)return e.destroy(new Error(\"Invalid protocol version\")),!1;if(y+=1,(typeof c==\"string\"||q.isBuffer(c))&&(c||o>=4)&&(c||a))y+=q.byteLength(c)+2;else {if(o<4)return e.destroy(new Error(\"clientId must be supplied before 3.1.1\")),!1;if(a*1===0)return e.destroy(new Error(\"clientId must be given if cleanSession set to 0\")),!1}if(typeof l!=\"number\"||l<0||l>65535||l%1!==0)return e.destroy(new Error(\"Invalid keepalive\")),!1;y+=2,y+=1;let w,S;if(o===5){if(w=Wt(e,g),!w)return !1;y+=w.length;}if(s){if(typeof s!=\"object\")return e.destroy(new Error(\"Invalid will\")),!1;if(!s.topic||typeof s.topic!=\"string\")return e.destroy(new Error(\"Invalid will topic\")),!1;if(y+=q.byteLength(s.topic)+2,y+=2,s.payload)if(s.payload.length>=0)typeof s.payload==\"string\"?y+=q.byteLength(s.payload):y+=s.payload.length;else return e.destroy(new Error(\"Invalid will payload\")),!1;if(S={},o===5){if(S=Wt(e,s.properties),!S)return !1;y+=S.length;}}let E=!1;if(h!=null)if(Pd(h))E=!0,y+=q.byteLength(h)+2;else return e.destroy(new Error(\"Invalid username\")),!1;if(d!=null){if(!E)return e.destroy(new Error(\"Username is required to use password\")),!1;if(Pd(d))y+=Od(d)+2;else return e.destroy(new Error(\"Invalid password\")),!1}e.write(j.CONNECT_HEADER),De(e,y),Yr(e,n),i.bridgeMode&&(o+=128),e.write(o===131?j.VERSION131:o===132?j.VERSION132:o===4?j.VERSION4:o===5?j.VERSION5:j.VERSION3);let I=0;return I|=h!=null?j.USERNAME_MASK:0,I|=d!=null?j.PASSWORD_MASK:0,I|=s&&s.retain?j.WILL_RETAIN_MASK:0,I|=s&&s.qos?s.qos<0&&Te(e,c),g?.write(),qe(\"publish: payload: %o\",l),e.write(l)}function Gm(t,e,r){let i=r?r.protocolVersion:4,n=t||{},o=n.cmd||\"puback\",s=n.messageId,a=n.dup&&o===\"pubrel\"?j.DUP_MASK:0,l=0,c=n.reasonCode,h=n.properties,d=i===5?3:2;if(o===\"pubrel\"&&(l=1),typeof s!=\"number\")return e.destroy(new Error(\"Invalid messageId\")),!1;let g=null;if(i===5&&typeof h==\"object\"){if(g=Ii(e,h,r,d),!g)return !1;d+=g.length;}return e.write(j.ACKS[o][l][a][0]),d===3&&(d+=c!==0?1:-1),De(e,d),Te(e,s),i===5&&d!==2&&e.write(q.from([c])),g!==null?g.write():d===4&&e.write(q.from([0])),!0}function Qm(t,e,r){qe(\"subscribe: packet: \");let i=r?r.protocolVersion:4,n=t||{},o=n.dup?j.DUP_MASK:0,s=n.messageId,a=n.subscriptions,l=n.properties,c=0;if(typeof s!=\"number\")return e.destroy(new Error(\"Invalid messageId\")),!1;c+=2;let h=null;if(i===5){if(h=Wt(e,l),!h)return !1;c+=h.length;}if(typeof a==\"object\"&&a.length)for(let g=0;g2)return e.destroy(new Error(\"Invalid subscriptions - invalid Retain Handling\")),!1}c+=q.byteLength(y)+2+1;}else return e.destroy(new Error(\"Invalid subscriptions\")),!1;qe(\"subscribe: writing to stream: %o\",j.SUBSCRIBE_HEADER),e.write(j.SUBSCRIBE_HEADER[1][o?1:0][0]),De(e,c),Te(e,s),h!==null&&h.write();let d=!0;for(let g of a){let y=g.topic,w=g.qos,S=+g.nl,E=+g.rap,I=g.rh,C;wr(e,y),C=j.SUBSCRIBE_OPTIONS_QOS[w],i===5&&(C|=S?j.SUBSCRIBE_OPTIONS_NL:0,C|=E?j.SUBSCRIBE_OPTIONS_RAP:0,C|=I?j.SUBSCRIBE_OPTIONS_RH[I]:0),d=e.write(q.from([C]));}return d}function Ym(t,e,r){let i=r?r.protocolVersion:4,n=t||{},o=n.messageId,s=n.granted,a=n.properties,l=0;if(typeof o!=\"number\")return e.destroy(new Error(\"Invalid messageId\")),!1;if(l+=2,typeof s==\"object\"&&s.length)for(let h=0;hj.VARBYTEINT_MAX)return t.destroy(new Error(`Invalid variable byte integer: ${e}`)),!1;let r=Td[e];return r||(r=Ko(e),e<16384&&(Td[e]=r)),qe(\"writeVarByteInt: writing to stream: %o\",r),t.write(r)}function wr(t,e){let r=q.byteLength(e);return Te(t,r),qe(\"writeString: %s\",e),t.write(e,\"utf8\")}function Rd(t,e,r){wr(t,e),wr(t,r);}function Go(t,e){return qe(\"writeNumberCached: number: %d\",e),qe(\"writeNumberCached: %o\",Pn[e]),t.write(Pn[e])}function r1(t,e){let r=Fm(e);return qe(\"writeNumberGenerated: %o\",r),t.write(r)}function i1(t,e){let r=$m(e);return qe(\"write4ByteNumber: %o\",r),t.write(r)}function Yr(t,e){typeof e==\"string\"?wr(t,e):e?(Te(t,e.length),t.write(e)):Te(t,0);}function Wt(t,e){if(typeof e!=\"object\"||e.length!=null)return {length:1,write(){Bd(t,{},0);}};let r=0;function i(o,s){let a=j.propertiesTypes[o],l=0;switch(a){case\"byte\":{if(typeof s!=\"boolean\")return t.destroy(new Error(`Invalid ${o}: ${s}`)),!1;l+=1+1;break}case\"int8\":{if(typeof s!=\"number\"||s<0||s>255)return t.destroy(new Error(`Invalid ${o}: ${s}`)),!1;l+=1+1;break}case\"binary\":{if(s&&s===null)return t.destroy(new Error(`Invalid ${o}: ${s}`)),!1;l+=1+q.byteLength(s)+2;break}case\"int16\":{if(typeof s!=\"number\"||s<0||s>65535)return t.destroy(new Error(`Invalid ${o}: ${s}`)),!1;l+=1+2;break}case\"int32\":{if(typeof s!=\"number\"||s<0||s>4294967295)return t.destroy(new Error(`Invalid ${o}: ${s}`)),!1;l+=1+4;break}case\"var\":{if(typeof s!=\"number\"||s<0||s>268435455)return t.destroy(new Error(`Invalid ${o}: ${s}`)),!1;l+=1+q.byteLength(Ko(s));break}case\"string\":{if(typeof s!=\"string\")return t.destroy(new Error(`Invalid ${o}: ${s}`)),!1;l+=1+2+q.byteLength(s.toString());break}case\"pair\":{if(typeof s!=\"object\")return t.destroy(new Error(`Invalid ${o}: ${s}`)),!1;l+=Object.getOwnPropertyNames(s).reduce((c,h)=>{let d=s[h];return Array.isArray(d)?c+=d.reduce((g,y)=>(g+=1+2+q.byteLength(h.toString())+2+q.byteLength(y.toString()),g),0):c+=1+2+q.byteLength(h.toString())+2+q.byteLength(s[h].toString()),c},0);break}default:return t.destroy(new Error(`Invalid property ${o}: ${s}`)),!1}return l}if(e)for(let o in e){let s=0,a=0,l=e[o];if(Array.isArray(l))for(let c=0;co;){let a=n.shift();if(a&&e[a])delete e[a],s=Wt(t,e);else return !1}return s}function Cd(t,e,r){switch(j.propertiesTypes[e]){case\"byte\":{t.write(q.from([j.properties[e]])),t.write(q.from([+r]));break}case\"int8\":{t.write(q.from([j.properties[e]])),t.write(q.from([r]));break}case\"binary\":{t.write(q.from([j.properties[e]])),Yr(t,r);break}case\"int16\":{t.write(q.from([j.properties[e]])),Te(t,r);break}case\"int32\":{t.write(q.from([j.properties[e]])),i1(t,r);break}case\"var\":{t.write(q.from([j.properties[e]])),De(t,r);break}case\"string\":{t.write(q.from([j.properties[e]])),wr(t,r);break}case\"pair\":{Object.getOwnPropertyNames(r).forEach(n=>{let o=r[n];Array.isArray(o)?o.forEach(s=>{t.write(q.from([j.properties[e]])),Rd(t,n.toString(),s.toString());}):(t.write(q.from([j.properties[e]])),Rd(t,n.toString(),o.toString()));});break}default:return t.destroy(new Error(`Invalid property ${e} value: ${r}`)),!1}}function Bd(t,e,r){De(t,r);for(let i in e)if(Object.prototype.hasOwnProperty.call(e,i)&&e[i]!==null){let n=e[i];if(Array.isArray(n))for(let o=0;o{_();v();m();var n1=Qo(),{EventEmitter:s1}=(sr(),X(nr)),{Buffer:Md}=(be(),X(me));function o1(t,e){let r=new Yo;return n1(t,r,e),r.concat()}var Yo=class extends s1{constructor(){super(),this._array=new Array(20),this._i=0;}write(e){return this._array[this._i++]=e,!0}concat(){let e=0,r=new Array(this._array.length),i=this._array,n=0,o;for(o=0;o{_();v();m();On.parser=md().parser;On.generate=Ud();On.writeToStream=Qo();});var Zo=M(Xo=>{_();v();m();Object.defineProperty(Xo,\"__esModule\",{value:!0});var Jo=class{constructor(){this.nextId=Math.max(1,Math.floor(Math.random()*65535));}allocate(){let e=this.nextId++;return this.nextId===65536&&(this.nextId=1),e}getLastAllocated(){return this.nextId===1?65535:this.nextId-1}register(e){return !0}deallocate(e){}clear(){}};Xo.default=Jo;});var Dd=M((Zk,qd)=>{_();v();m();qd.exports=a1;function Jr(t){return t instanceof x?x.from(t):new t.constructor(t.buffer.slice(),t.byteOffset,t.length)}function a1(t){if(t=t||{},t.circles)return l1(t);return t.proto?i:r;function e(n,o){for(var s=Object.keys(n),a=new Array(s.length),l=0;l{_();v();m();jd.exports=Dd()();});var $d=M(Xr=>{_();v();m();Object.defineProperty(Xr,\"__esModule\",{value:!0});Xr.validateTopics=Xr.validateTopic=void 0;function Wd(t){let e=t.split(\"/\");for(let r=0;r{_();v();m();Object.defineProperty(ta,\"__esModule\",{value:!0});var f1=jt(),c1={objectMode:!0},h1={clean:!0},ea=class{constructor(e){this.options=e||{},this.options=Object.assign(Object.assign({},h1),e),this._inflights=new Map;}put(e,r){return this._inflights.set(e.messageId,e),r&&r(),this}createStream(){let e=new f1.Readable(c1),r=[],i=!1,n=0;return this._inflights.forEach((o,s)=>{r.push(o);}),e._read=()=>{!i&&n{if(!i)return i=!0,setTimeout(()=>{e.emit(\"close\");},0),e},e}del(e,r){let i=this._inflights.get(e.messageId);return i?(this._inflights.delete(e.messageId),r(null,i)):r&&r(new Error(\"missing packet\")),this}get(e,r){let i=this._inflights.get(e.messageId);return i?r(null,i):r&&r(new Error(\"missing packet\")),this}close(e){this.options.clean&&(this._inflights=null),e&&e();}};ta.default=ea;});var Vd=M(ia=>{_();v();m();Object.defineProperty(ia,\"__esModule\",{value:!0});var Hd=[0,16,128,131,135,144,145,151,153],d1=(t,e,r)=>{t.log(\"handlePublish: packet %o\",e),r=typeof r<\"u\"?r:t.noop;let i=e.topic.toString(),n=e.payload,{qos:o}=e,{messageId:s}=e,{options:a}=t;if(t.options.protocolVersion===5){let l;if(e.properties&&(l=e.properties.topicAlias),typeof l<\"u\")if(i.length===0)if(l>0&&l<=65535){let c=t.topicAliasRecv.getTopicByAlias(l);if(c)i=c,t.log(\"handlePublish :: topic complemented by alias. topic: %s - alias: %d\",i,l);else {t.log(\"handlePublish :: unregistered topic alias. alias: %d\",l),t.emit(\"error\",new Error(\"Received unregistered Topic Alias\"));return}}else {t.log(\"handlePublish :: topic alias out of range. alias: %d\",l),t.emit(\"error\",new Error(\"Received Topic Alias is out of range\"));return}else if(t.topicAliasRecv.put(i,l))t.log(\"handlePublish :: registered topic: %s - alias: %d\",i,l);else {t.log(\"handlePublish :: topic alias out of range. alias: %d\",l),t.emit(\"error\",new Error(\"Received Topic Alias is out of range\"));return}}switch(t.log(\"handlePublish: qos %d\",o),o){case 2:{a.customHandleAcks(i,n,e,(l,c)=>{if(typeof l==\"number\"&&(c=l,l=null),l)return t.emit(\"error\",l);if(Hd.indexOf(c)===-1)return t.emit(\"error\",new Error(\"Wrong reason code for pubrec\"));c?t._sendPacket({cmd:\"pubrec\",messageId:s,reasonCode:c},r):t.incomingStore.put(e,()=>{t._sendPacket({cmd:\"pubrec\",messageId:s},r);});});break}case 1:{a.customHandleAcks(i,n,e,(l,c)=>{if(typeof l==\"number\"&&(c=l,l=null),l)return t.emit(\"error\",l);if(Hd.indexOf(c)===-1)return t.emit(\"error\",new Error(\"Wrong reason code for puback\"));c||t.emit(\"message\",i,n,e),t.handleMessage(e,h=>{if(h)return r&&r(h);t._sendPacket({cmd:\"puback\",messageId:s,reasonCode:c},r);});});break}case 0:t.emit(\"message\",i,n,e),t.handleMessage(e,r);break;default:t.log(\"handlePublish: unknown QoS. Doing nothing.\");break}};ia.default=d1;});var zd=M((QO,p1)=>{p1.exports={version:\"5.10.1\"};});var _r=M(at=>{_();v();m();Object.defineProperty(at,\"__esModule\",{value:!0});at.MQTTJS_VERSION=at.nextTick=at.applyMixin=at.ErrorWithReasonCode=void 0;var na=class t extends Error{constructor(e,r){super(e),this.code=r,Object.setPrototypeOf(this,t.prototype),Object.getPrototypeOf(this).name=\"ErrorWithReasonCode\";}};at.ErrorWithReasonCode=na;function g1(t,e,r=!1){var i;let n=[e];for(;;){let o=n[0],s=Object.getPrototypeOf(o);if(s?.prototype)n.unshift(s);else break}for(let o of n)for(let s of Object.getOwnPropertyNames(o.prototype))(r||s!==\"constructor\")&&Object.defineProperty(t.prototype,s,(i=Object.getOwnPropertyDescriptor(o.prototype,s))!==null&&i!==void 0?i:Object.create(null));}at.applyMixin=g1;at.nextTick=typeof(B===null||B===void 0?void 0:B.nextTick)==\"function\"?B.nextTick:t=>{setTimeout(t,0);};at.MQTTJS_VERSION=zd().version;});var Ti=M($t=>{_();v();m();Object.defineProperty($t,\"__esModule\",{value:!0});$t.ReasonCodes=void 0;var Kd=_r();$t.ReasonCodes={0:\"\",1:\"Unacceptable protocol version\",2:\"Identifier rejected\",3:\"Server unavailable\",4:\"Bad username or password\",5:\"Not authorized\",16:\"No matching subscribers\",17:\"No subscription existed\",128:\"Unspecified error\",129:\"Malformed Packet\",130:\"Protocol Error\",131:\"Implementation specific error\",132:\"Unsupported Protocol Version\",133:\"Client Identifier not valid\",134:\"Bad User Name or Password\",135:\"Not authorized\",136:\"Server unavailable\",137:\"Server busy\",138:\"Banned\",139:\"Server shutting down\",140:\"Bad authentication method\",141:\"Keep Alive timeout\",142:\"Session taken over\",143:\"Topic Filter invalid\",144:\"Topic Name invalid\",145:\"Packet identifier in use\",146:\"Packet Identifier not found\",147:\"Receive Maximum exceeded\",148:\"Topic Alias invalid\",149:\"Packet too large\",150:\"Message rate too high\",151:\"Quota exceeded\",152:\"Administrative action\",153:\"Payload format invalid\",154:\"Retain not supported\",155:\"QoS not supported\",156:\"Use another server\",157:\"Server moved\",158:\"Shared Subscriptions not supported\",159:\"Connection rate exceeded\",160:\"Maximum connect time\",161:\"Subscription Identifiers not supported\",162:\"Wildcard Subscriptions not supported\"};var y1=(t,e)=>{let{messageId:r}=e,i=e.cmd,n=null,o=t.outgoing[r]?t.outgoing[r].cb:null,s=null;if(!o){t.log(\"_handleAck :: Server sent an ack in error. Ignoring.\");return}switch(t.log(\"_handleAck :: packet type\",i),i){case\"pubcomp\":case\"puback\":{let a=e.reasonCode;a&&a>0&&a!==16?(s=new Kd.ErrorWithReasonCode(`Publish error: ${$t.ReasonCodes[a]}`,a),t._removeOutgoingAndStoreMessage(r,()=>{o(s,e);})):t._removeOutgoingAndStoreMessage(r,o);break}case\"pubrec\":{n={cmd:\"pubrel\",qos:2,messageId:r};let a=e.reasonCode;a&&a>0&&a!==16?(s=new Kd.ErrorWithReasonCode(`Publish error: ${$t.ReasonCodes[a]}`,a),t._removeOutgoingAndStoreMessage(r,()=>{o(s,e);})):t._sendPacket(n);break}case\"suback\":{delete t.outgoing[r],t.messageIdProvider.deallocate(r);let a=e.granted;for(let l=0;l{delete t._resubscribeTopics[d];});}}delete t.messageIdToTopic[r],t._invokeStoreProcessingQueue(),o(s,e);break}case\"unsuback\":{delete t.outgoing[r],t.messageIdProvider.deallocate(r),t._invokeStoreProcessingQueue(),o(null,e);break}default:t.emit(\"error\",new Error(\"unrecognized packet type\"));}t.disconnecting&&Object.keys(t.outgoing).length===0&&t.emit(\"outgoingEmpty\");};$t.default=y1;});var Qd=M(sa=>{_();v();m();Object.defineProperty(sa,\"__esModule\",{value:!0});var Gd=_r(),b1=Ti(),w1=(t,e)=>{let{options:r}=t,i=r.protocolVersion,n=i===5?e.reasonCode:e.returnCode;if(i!==5){let o=new Gd.ErrorWithReasonCode(`Protocol error: Auth packets are only supported in MQTT 5. Your version:${i}`,n);t.emit(\"error\",o);return}t.handleAuth(e,(o,s)=>{if(o){t.emit(\"error\",o);return}if(n===24)t.reconnecting=!1,t._sendPacket(s);else {let a=new Gd.ErrorWithReasonCode(`Connection refused: ${b1.ReasonCodes[n]}`,n);t.emit(\"error\",a);}});};sa.default=w1;});var ep=M(Mn=>{_();v();m();Object.defineProperty(Mn,\"__esModule\",{value:!0});Mn.LRUCache=void 0;var Ri=typeof performance==\"object\"&&performance&&typeof performance.now==\"function\"?performance:Date,Jd=new Set,oa=typeof B==\"object\"&&B?B:{},Xd=(t,e,r,i)=>{typeof oa.emitWarning==\"function\"?oa.emitWarning(t,e,r,i):console.error(`[${r}] ${e}: ${t}`);},xn=globalThis.AbortController,Yd=globalThis.AbortSignal;if(typeof xn>\"u\"){Yd=class{onabort;_onabort=[];reason;aborted=!1;addEventListener(i,n){this._onabort.push(n);}},xn=class{constructor(){e();}signal=new Yd;abort(i){if(!this.signal.aborted){this.signal.reason=i,this.signal.aborted=!0;for(let n of this.signal._onabort)n(i);this.signal.onabort?.(i);}}};let t=oa.env?.LRU_CACHE_IGNORE_AC_WARNING!==\"1\",e=()=>{t&&(t=!1,Xd(\"AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.\",\"NO_ABORT_CONTROLLER\",\"ENOTSUP\",e));};}var _1=t=>!Jd.has(t),Ht=t=>t&&t===Math.floor(t)&&t>0&&isFinite(t),Zd=t=>Ht(t)?t<=Math.pow(2,8)?Uint8Array:t<=Math.pow(2,16)?Uint16Array:t<=Math.pow(2,32)?Uint32Array:t<=Number.MAX_SAFE_INTEGER?Zr:null:null,Zr=class extends Array{constructor(e){super(e),this.fill(0);}},aa=class t{heap;length;static#l=!1;static create(e){let r=Zd(e);if(!r)return [];t.#l=!0;let i=new t(e,r);return t.#l=!1,i}constructor(e,r){if(!t.#l)throw new TypeError(\"instantiate Stack using Stack.create(n)\");this.heap=new r(e),this.length=0;}push(e){this.heap[this.length++]=e;}pop(){return this.heap[--this.length]}},la=class t{#l;#c;#p;#g;#B;ttl;ttlResolution;ttlAutopurge;updateAgeOnGet;updateAgeOnHas;allowStale;noDisposeOnSet;noUpdateTTL;maxEntrySize;sizeCalculation;noDeleteOnFetchRejection;noDeleteOnStaleGet;allowStaleOnFetchAbort;allowStaleOnFetchRejection;ignoreFetchAbort;#i;#y;#n;#r;#e;#u;#h;#a;#s;#b;#o;#E;#S;#w;#_;#I;#f;static unsafeExposeInternals(e){return {starts:e.#S,ttls:e.#w,sizes:e.#E,keyMap:e.#n,keyList:e.#r,valList:e.#e,next:e.#u,prev:e.#h,get head(){return e.#a},get tail(){return e.#s},free:e.#b,isBackgroundFetch:r=>e.#t(r),backgroundFetch:(r,i,n,o)=>e.#O(r,i,n,o),moveToTail:r=>e.#C(r),indexes:r=>e.#m(r),rindexes:r=>e.#v(r),isStale:r=>e.#d(r)}}get max(){return this.#l}get maxSize(){return this.#c}get calculatedSize(){return this.#y}get size(){return this.#i}get fetchMethod(){return this.#B}get dispose(){return this.#p}get disposeAfter(){return this.#g}constructor(e){let{max:r=0,ttl:i,ttlResolution:n=1,ttlAutopurge:o,updateAgeOnGet:s,updateAgeOnHas:a,allowStale:l,dispose:c,disposeAfter:h,noDisposeOnSet:d,noUpdateTTL:g,maxSize:y=0,maxEntrySize:w=0,sizeCalculation:S,fetchMethod:E,noDeleteOnFetchRejection:I,noDeleteOnStaleGet:C,allowStaleOnFetchRejection:R,allowStaleOnFetchAbort:U,ignoreFetchAbort:N}=e;if(r!==0&&!Ht(r))throw new TypeError(\"max option must be a nonnegative integer\");let W=r?Zd(r):Array;if(!W)throw new Error(\"invalid max value: \"+r);if(this.#l=r,this.#c=y,this.maxEntrySize=w||this.#c,this.sizeCalculation=S,this.sizeCalculation){if(!this.#c&&!this.maxEntrySize)throw new TypeError(\"cannot set sizeCalculation without setting maxSize or maxEntrySize\");if(typeof this.sizeCalculation!=\"function\")throw new TypeError(\"sizeCalculation set to non-function\")}if(E!==void 0&&typeof E!=\"function\")throw new TypeError(\"fetchMethod must be a function if specified\");if(this.#B=E,this.#I=!!E,this.#n=new Map,this.#r=new Array(r).fill(void 0),this.#e=new Array(r).fill(void 0),this.#u=new W(r),this.#h=new W(r),this.#a=0,this.#s=0,this.#b=aa.create(r),this.#i=0,this.#y=0,typeof c==\"function\"&&(this.#p=c),typeof h==\"function\"?(this.#g=h,this.#o=[]):(this.#g=void 0,this.#o=void 0),this.#_=!!this.#p,this.#f=!!this.#g,this.noDisposeOnSet=!!d,this.noUpdateTTL=!!g,this.noDeleteOnFetchRejection=!!I,this.allowStaleOnFetchRejection=!!R,this.allowStaleOnFetchAbort=!!U,this.ignoreFetchAbort=!!N,this.maxEntrySize!==0){if(this.#c!==0&&!Ht(this.#c))throw new TypeError(\"maxSize must be a positive integer if specified\");if(!Ht(this.maxEntrySize))throw new TypeError(\"maxEntrySize must be a positive integer if specified\");this.#q();}if(this.allowStale=!!l,this.noDeleteOnStaleGet=!!C,this.updateAgeOnGet=!!s,this.updateAgeOnHas=!!a,this.ttlResolution=Ht(n)||n===0?n:1,this.ttlAutopurge=!!o,this.ttl=i||0,this.ttl){if(!Ht(this.ttl))throw new TypeError(\"ttl must be a positive integer if specified\");this.#x();}if(this.#l===0&&this.ttl===0&&this.#c===0)throw new TypeError(\"At least one of max, maxSize, or ttl is required\");if(!this.ttlAutopurge&&!this.#l&&!this.#c){let K=\"LRU_CACHE_UNBOUNDED\";_1(K)&&(Jd.add(K),Xd(\"TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.\",\"UnboundedCacheWarning\",K,t));}}getRemainingTTL(e){return this.#n.has(e)?1/0:0}#x(){let e=new Zr(this.#l),r=new Zr(this.#l);this.#w=e,this.#S=r,this.#M=(o,s,a=Ri.now())=>{if(r[o]=s!==0?a:0,e[o]=s,s!==0&&this.ttlAutopurge){let l=setTimeout(()=>{this.#d(o)&&this.delete(this.#r[o]);},s+1);l.unref&&l.unref();}},this.#T=o=>{r[o]=e[o]!==0?Ri.now():0;},this.#A=(o,s)=>{if(e[s]){let a=e[s],l=r[s];o.ttl=a,o.start=l,o.now=i||n();let c=o.now-l;o.remainingTTL=a-c;}};let i=0,n=()=>{let o=Ri.now();if(this.ttlResolution>0){i=o;let s=setTimeout(()=>i=0,this.ttlResolution);s.unref&&s.unref();}return o};this.getRemainingTTL=o=>{let s=this.#n.get(o);if(s===void 0)return 0;let a=e[s],l=r[s];if(a===0||l===0)return 1/0;let c=(i||n())-l;return a-c},this.#d=o=>e[o]!==0&&r[o]!==0&&(i||n())-r[o]>e[o];}#T=()=>{};#A=()=>{};#M=()=>{};#d=()=>!1;#q(){let e=new Zr(this.#l);this.#y=0,this.#E=e,this.#R=r=>{this.#y-=e[r],e[r]=0;},this.#L=(r,i,n,o)=>{if(this.#t(i))return 0;if(!Ht(n))if(o){if(typeof o!=\"function\")throw new TypeError(\"sizeCalculation must be a function\");if(n=o(i,r),!Ht(n))throw new TypeError(\"sizeCalculation return invalid (expect positive integer)\")}else throw new TypeError(\"invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.\");return n},this.#P=(r,i,n)=>{if(e[r]=i,this.#c){let o=this.#c-e[r];for(;this.#y>o;)this.#k(!0);}this.#y+=e[r],n&&(n.entrySize=i,n.totalCalculatedSize=this.#y);};}#R=e=>{};#P=(e,r,i)=>{};#L=(e,r,i,n)=>{if(i||n)throw new TypeError(\"cannot set size without setting maxSize or maxEntrySize on cache\");return 0};*#m({allowStale:e=this.allowStale}={}){if(this.#i)for(let r=this.#s;!(!this.#U(r)||((e||!this.#d(r))&&(yield r),r===this.#a));)r=this.#h[r];}*#v({allowStale:e=this.allowStale}={}){if(this.#i)for(let r=this.#a;!(!this.#U(r)||((e||!this.#d(r))&&(yield r),r===this.#s));)r=this.#u[r];}#U(e){return e!==void 0&&this.#n.get(this.#r[e])===e}*entries(){for(let e of this.#m())this.#e[e]!==void 0&&this.#r[e]!==void 0&&!this.#t(this.#e[e])&&(yield [this.#r[e],this.#e[e]]);}*rentries(){for(let e of this.#v())this.#e[e]!==void 0&&this.#r[e]!==void 0&&!this.#t(this.#e[e])&&(yield [this.#r[e],this.#e[e]]);}*keys(){for(let e of this.#m()){let r=this.#r[e];r!==void 0&&!this.#t(this.#e[e])&&(yield r);}}*rkeys(){for(let e of this.#v()){let r=this.#r[e];r!==void 0&&!this.#t(this.#e[e])&&(yield r);}}*values(){for(let e of this.#m())this.#e[e]!==void 0&&!this.#t(this.#e[e])&&(yield this.#e[e]);}*rvalues(){for(let e of this.#v())this.#e[e]!==void 0&&!this.#t(this.#e[e])&&(yield this.#e[e]);}[Symbol.iterator](){return this.entries()}find(e,r={}){for(let i of this.#m()){let n=this.#e[i],o=this.#t(n)?n.__staleWhileFetching:n;if(o!==void 0&&e(o,this.#r[i],this))return this.get(this.#r[i],r)}}forEach(e,r=this){for(let i of this.#m()){let n=this.#e[i],o=this.#t(n)?n.__staleWhileFetching:n;o!==void 0&&e.call(r,o,this.#r[i],this);}}rforEach(e,r=this){for(let i of this.#v()){let n=this.#e[i],o=this.#t(n)?n.__staleWhileFetching:n;o!==void 0&&e.call(r,o,this.#r[i],this);}}purgeStale(){let e=!1;for(let r of this.#v({allowStale:!0}))this.#d(r)&&(this.delete(this.#r[r]),e=!0);return e}dump(){let e=[];for(let r of this.#m({allowStale:!0})){let i=this.#r[r],n=this.#e[r],o=this.#t(n)?n.__staleWhileFetching:n;if(o===void 0||i===void 0)continue;let s={value:o};if(this.#w&&this.#S){s.ttl=this.#w[r];let a=Ri.now()-this.#S[r];s.start=Math.floor(Date.now()-a);}this.#E&&(s.size=this.#E[r]),e.unshift([i,s]);}return e}load(e){this.clear();for(let[r,i]of e){if(i.start){let n=Date.now()-i.start;i.start=Ri.now()-n;}this.set(r,i.value,i);}}set(e,r,i={}){if(r===void 0)return this.delete(e),this;let{ttl:n=this.ttl,start:o,noDisposeOnSet:s=this.noDisposeOnSet,sizeCalculation:a=this.sizeCalculation,status:l}=i,{noUpdateTTL:c=this.noUpdateTTL}=i,h=this.#L(e,r,i.size||0,a);if(this.maxEntrySize&&h>this.maxEntrySize)return l&&(l.set=\"miss\",l.maxEntrySizeExceeded=!0),this.delete(e),this;let d=this.#i===0?void 0:this.#n.get(e);if(d===void 0)d=this.#i===0?this.#s:this.#b.length!==0?this.#b.pop():this.#i===this.#l?this.#k(!1):this.#i,this.#r[d]=e,this.#e[d]=r,this.#n.set(e,d),this.#u[this.#s]=d,this.#h[d]=this.#s,this.#s=d,this.#i++,this.#P(d,h,l),l&&(l.set=\"add\"),c=!1;else {this.#C(d);let g=this.#e[d];if(r!==g){if(this.#I&&this.#t(g)){g.__abortController.abort(new Error(\"replaced\"));let{__staleWhileFetching:y}=g;y!==void 0&&!s&&(this.#_&&this.#p?.(y,e,\"set\"),this.#f&&this.#o?.push([y,e,\"set\"]));}else s||(this.#_&&this.#p?.(g,e,\"set\"),this.#f&&this.#o?.push([g,e,\"set\"]));if(this.#R(d),this.#P(d,h,l),this.#e[d]=r,l){l.set=\"replace\";let y=g&&this.#t(g)?g.__staleWhileFetching:g;y!==void 0&&(l.oldValue=y);}}else l&&(l.set=\"update\");}if(n!==0&&!this.#w&&this.#x(),this.#w&&(c||this.#M(d,n,o),l&&this.#A(l,d)),!s&&this.#f&&this.#o){let g=this.#o,y;for(;y=g?.shift();)this.#g?.(...y);}return this}pop(){try{for(;this.#i;){let e=this.#e[this.#a];if(this.#k(!0),this.#t(e)){if(e.__staleWhileFetching)return e.__staleWhileFetching}else if(e!==void 0)return e}}finally{if(this.#f&&this.#o){let e=this.#o,r;for(;r=e?.shift();)this.#g?.(...r);}}}#k(e){let r=this.#a,i=this.#r[r],n=this.#e[r];return this.#I&&this.#t(n)?n.__abortController.abort(new Error(\"evicted\")):(this.#_||this.#f)&&(this.#_&&this.#p?.(n,i,\"evict\"),this.#f&&this.#o?.push([n,i,\"evict\"])),this.#R(r),e&&(this.#r[r]=void 0,this.#e[r]=void 0,this.#b.push(r)),this.#i===1?(this.#a=this.#s=0,this.#b.length=0):this.#a=this.#u[r],this.#n.delete(i),this.#i--,r}has(e,r={}){let{updateAgeOnHas:i=this.updateAgeOnHas,status:n}=r,o=this.#n.get(e);if(o!==void 0){let s=this.#e[o];if(this.#t(s)&&s.__staleWhileFetching===void 0)return !1;if(this.#d(o))n&&(n.has=\"stale\",this.#A(n,o));else return i&&this.#T(o),n&&(n.has=\"hit\",this.#A(n,o)),!0}else n&&(n.has=\"miss\");return !1}peek(e,r={}){let{allowStale:i=this.allowStale}=r,n=this.#n.get(e);if(n!==void 0&&(i||!this.#d(n))){let o=this.#e[n];return this.#t(o)?o.__staleWhileFetching:o}}#O(e,r,i,n){let o=r===void 0?void 0:this.#e[r];if(this.#t(o))return o;let s=new xn,{signal:a}=i;a?.addEventListener(\"abort\",()=>s.abort(a.reason),{signal:s.signal});let l={signal:s.signal,options:i,context:n},c=(S,E=!1)=>{let{aborted:I}=s.signal,C=i.ignoreFetchAbort&&S!==void 0;if(i.status&&(I&&!E?(i.status.fetchAborted=!0,i.status.fetchError=s.signal.reason,C&&(i.status.fetchAbortIgnored=!0)):i.status.fetchResolved=!0),I&&!C&&!E)return d(s.signal.reason);let R=y;return this.#e[r]===y&&(S===void 0?R.__staleWhileFetching?this.#e[r]=R.__staleWhileFetching:this.delete(e):(i.status&&(i.status.fetchUpdated=!0),this.set(e,S,l.options))),S},h=S=>(i.status&&(i.status.fetchRejected=!0,i.status.fetchError=S),d(S)),d=S=>{let{aborted:E}=s.signal,I=E&&i.allowStaleOnFetchAbort,C=I||i.allowStaleOnFetchRejection,R=C||i.noDeleteOnFetchRejection,U=y;if(this.#e[r]===y&&(!R||U.__staleWhileFetching===void 0?this.delete(e):I||(this.#e[r]=U.__staleWhileFetching)),C)return i.status&&U.__staleWhileFetching!==void 0&&(i.status.returnedStale=!0),U.__staleWhileFetching;if(U.__returned===U)throw S},g=(S,E)=>{let I=this.#B?.(e,o,l);I&&I instanceof Promise&&I.then(C=>S(C===void 0?void 0:C),E),s.signal.addEventListener(\"abort\",()=>{(!i.ignoreFetchAbort||i.allowStaleOnFetchAbort)&&(S(void 0),i.allowStaleOnFetchAbort&&(S=C=>c(C,!0)));});};i.status&&(i.status.fetchDispatched=!0);let y=new Promise(g).then(c,h),w=Object.assign(y,{__abortController:s,__staleWhileFetching:o,__returned:void 0});return r===void 0?(this.set(e,w,{...l.options,status:void 0}),r=this.#n.get(e)):this.#e[r]=w,w}#t(e){if(!this.#I)return !1;let r=e;return !!r&&r instanceof Promise&&r.hasOwnProperty(\"__staleWhileFetching\")&&r.__abortController instanceof xn}async fetch(e,r={}){let{allowStale:i=this.allowStale,updateAgeOnGet:n=this.updateAgeOnGet,noDeleteOnStaleGet:o=this.noDeleteOnStaleGet,ttl:s=this.ttl,noDisposeOnSet:a=this.noDisposeOnSet,size:l=0,sizeCalculation:c=this.sizeCalculation,noUpdateTTL:h=this.noUpdateTTL,noDeleteOnFetchRejection:d=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:g=this.allowStaleOnFetchRejection,ignoreFetchAbort:y=this.ignoreFetchAbort,allowStaleOnFetchAbort:w=this.allowStaleOnFetchAbort,context:S,forceRefresh:E=!1,status:I,signal:C}=r;if(!this.#I)return I&&(I.fetch=\"get\"),this.get(e,{allowStale:i,updateAgeOnGet:n,noDeleteOnStaleGet:o,status:I});let R={allowStale:i,updateAgeOnGet:n,noDeleteOnStaleGet:o,ttl:s,noDisposeOnSet:a,size:l,sizeCalculation:c,noUpdateTTL:h,noDeleteOnFetchRejection:d,allowStaleOnFetchRejection:g,allowStaleOnFetchAbort:w,ignoreFetchAbort:y,status:I,signal:C},U=this.#n.get(e);if(U===void 0){I&&(I.fetch=\"miss\");let N=this.#O(e,U,R,S);return N.__returned=N}else {let N=this.#e[U];if(this.#t(N)){let pe=i&&N.__staleWhileFetching!==void 0;return I&&(I.fetch=\"inflight\",pe&&(I.returnedStale=!0)),pe?N.__staleWhileFetching:N.__returned=N}let W=this.#d(U);if(!E&&!W)return I&&(I.fetch=\"hit\"),this.#C(U),n&&this.#T(U),I&&this.#A(I,U),N;let K=this.#O(e,U,R,S),Q=K.__staleWhileFetching!==void 0&&i;return I&&(I.fetch=W?\"stale\":\"refresh\",Q&&W&&(I.returnedStale=!0)),Q?K.__staleWhileFetching:K.__returned=K}}get(e,r={}){let{allowStale:i=this.allowStale,updateAgeOnGet:n=this.updateAgeOnGet,noDeleteOnStaleGet:o=this.noDeleteOnStaleGet,status:s}=r,a=this.#n.get(e);if(a!==void 0){let l=this.#e[a],c=this.#t(l);return s&&this.#A(s,a),this.#d(a)?(s&&(s.get=\"stale\"),c?(s&&i&&l.__staleWhileFetching!==void 0&&(s.returnedStale=!0),i?l.__staleWhileFetching:void 0):(o||this.delete(e),s&&i&&(s.returnedStale=!0),i?l:void 0)):(s&&(s.get=\"hit\"),c?l.__staleWhileFetching:(this.#C(a),n&&this.#T(a),l))}else s&&(s.get=\"miss\");}#N(e,r){this.#h[r]=e,this.#u[e]=r;}#C(e){e!==this.#s&&(e===this.#a?this.#a=this.#u[e]:this.#N(this.#h[e],this.#u[e]),this.#N(this.#s,e),this.#s=e);}delete(e){let r=!1;if(this.#i!==0){let i=this.#n.get(e);if(i!==void 0)if(r=!0,this.#i===1)this.clear();else {this.#R(i);let n=this.#e[i];this.#t(n)?n.__abortController.abort(new Error(\"deleted\")):(this.#_||this.#f)&&(this.#_&&this.#p?.(n,e,\"delete\"),this.#f&&this.#o?.push([n,e,\"delete\"])),this.#n.delete(e),this.#r[i]=void 0,this.#e[i]=void 0,i===this.#s?this.#s=this.#h[i]:i===this.#a?this.#a=this.#u[i]:(this.#u[this.#h[i]]=this.#u[i],this.#h[this.#u[i]]=this.#h[i]),this.#i--,this.#b.push(i);}}if(this.#f&&this.#o?.length){let i=this.#o,n;for(;n=i?.shift();)this.#g?.(...n);}return r}clear(){for(let e of this.#v({allowStale:!0})){let r=this.#e[e];if(this.#t(r))r.__abortController.abort(new Error(\"deleted\"));else {let i=this.#r[e];this.#_&&this.#p?.(r,i,\"delete\"),this.#f&&this.#o?.push([r,i,\"delete\"]);}}if(this.#n.clear(),this.#e.fill(void 0),this.#r.fill(void 0),this.#w&&this.#S&&(this.#w.fill(0),this.#S.fill(0)),this.#E&&this.#E.fill(0),this.#a=0,this.#s=0,this.#b.length=0,this.#y=0,this.#i=0,this.#f&&this.#o){let e=this.#o,r;for(;r=e?.shift();)this.#g?.(...r);}}};Mn.LRUCache=la;});var lt=M(Vt=>{_();v();m();Object.defineProperty(Vt,\"t\",{value:!0});Vt.ContainerIterator=Vt.Container=Vt.Base=void 0;var ua=class{constructor(e=0){this.iteratorType=e;}equals(e){return this.o===e.o}};Vt.ContainerIterator=ua;var Ln=class{constructor(){this.i=0;}get length(){return this.i}size(){return this.i}empty(){return this.i===0}};Vt.Base=Ln;var fa=class extends Ln{};Vt.Container=fa;});var tp=M(Un=>{_();v();m();Object.defineProperty(Un,\"t\",{value:!0});Un.default=void 0;var m1=lt(),ca=class extends m1.Base{constructor(e=[]){super(),this.S=[];let r=this;e.forEach(function(i){r.push(i);});}clear(){this.i=0,this.S=[];}push(e){return this.S.push(e),this.i+=1,this.i}pop(){if(this.i!==0)return this.i-=1,this.S.pop()}top(){return this.S[this.i-1]}},v1=ca;Un.default=v1;});var rp=M(Nn=>{_();v();m();Object.defineProperty(Nn,\"t\",{value:!0});Nn.default=void 0;var E1=lt(),ha=class extends E1.Base{constructor(e=[]){super(),this.j=0,this.q=[];let r=this;e.forEach(function(i){r.push(i);});}clear(){this.q=[],this.i=this.j=0;}push(e){let r=this.q.length;if(this.j/r>.5&&this.j+this.i>=r&&r>4096){let i=this.i;for(let n=0;n{_();v();m();Object.defineProperty(qn,\"t\",{value:!0});qn.default=void 0;var A1=lt(),da=class extends A1.Base{constructor(e=[],r=function(n,o){return n>o?-1:n>1;for(let o=this.i-1>>1;o>=0;--o)this.k(o,n);}m(e){let r=this.C[e];for(;e>0;){let i=e-1>>1,n=this.C[i];if(this.v(n,r)<=0)break;this.C[e]=n,e=i;}this.C[e]=r;}k(e,r){let i=this.C[e];for(;e0&&(n=o,s=this.C[o]),this.v(s,i)>=0)break;this.C[e]=s,e=n;}this.C[e]=i;}clear(){this.i=0,this.C.length=0;}push(e){this.C.push(e),this.m(this.i),this.i+=1;}pop(){if(this.i===0)return;let e=this.C[0],r=this.C.pop();return this.i-=1,this.i&&(this.C[0]=r,this.k(0,this.i>>1)),e}top(){return this.C[0]}find(e){return this.C.indexOf(e)>=0}remove(e){let r=this.C.indexOf(e);return r<0?!1:(r===0?this.pop():r===this.i-1?(this.C.pop(),this.i-=1):(this.C.splice(r,1,this.C.pop()),this.i-=1,this.m(r),this.k(r,this.i>>1)),!0)}updateItem(e){let r=this.C.indexOf(e);return r<0?!1:(this.m(r),this.k(r,this.i>>1),!0)}toArray(){return [...this.C]}},I1=da;qn.default=I1;});var jn=M(Dn=>{_();v();m();Object.defineProperty(Dn,\"t\",{value:!0});Dn.default=void 0;var T1=lt(),pa=class extends T1.Container{},R1=pa;Dn.default=R1;});var ut=M(ga=>{_();v();m();Object.defineProperty(ga,\"t\",{value:!0});ga.throwIteratorAccessError=C1;function C1(){throw new RangeError(\"Iterator access denied!\")}});var ba=M(Wn=>{_();v();m();Object.defineProperty(Wn,\"t\",{value:!0});Wn.RandomIterator=void 0;var B1=lt(),Fn=ut(),ya=class extends B1.ContainerIterator{constructor(e,r){super(r),this.o=e,this.iteratorType===0?(this.pre=function(){return this.o===0&&(0, Fn.throwIteratorAccessError)(),this.o-=1,this},this.next=function(){return this.o===this.container.size()&&(0, Fn.throwIteratorAccessError)(),this.o+=1,this}):(this.pre=function(){return this.o===this.container.size()-1&&(0, Fn.throwIteratorAccessError)(),this.o+=1,this},this.next=function(){return this.o===-1&&(0, Fn.throwIteratorAccessError)(),this.o-=1,this});}get pointer(){return this.container.getElementByPos(this.o)}set pointer(e){this.container.setElementByPos(this.o,e);}};Wn.RandomIterator=ya;});var np=M($n=>{_();v();m();Object.defineProperty($n,\"t\",{value:!0});$n.default=void 0;var P1=O1(jn()),k1=ba();function O1(t){return t&&t.t?t:{default:t}}var mr=class t extends k1.RandomIterator{constructor(e,r,i){super(e,i),this.container=r;}copy(){return new t(this.o,this.container,this.iteratorType)}},wa=class extends P1.default{constructor(e=[],r=!0){if(super(),Array.isArray(e))this.J=r?[...e]:e,this.i=e.length;else {this.J=[];let i=this;e.forEach(function(n){i.pushBack(n);});}}clear(){this.i=0,this.J.length=0;}begin(){return new mr(0,this)}end(){return new mr(this.i,this)}rBegin(){return new mr(this.i-1,this,1)}rEnd(){return new mr(-1,this,1)}front(){return this.J[0]}back(){return this.J[this.i-1]}getElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;return this.J[e]}eraseElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;return this.J.splice(e,1),this.i-=1,this.i}eraseElementByValue(e){let r=0;for(let i=0;ithis.i-1)throw new RangeError;this.J[e]=r;}insert(e,r,i=1){if(e<0||e>this.i)throw new RangeError;return this.J.splice(e,0,...new Array(i).fill(r)),this.i+=i,this.i}find(e){for(let r=0;r{_();v();m();Object.defineProperty(Hn,\"t\",{value:!0});Hn.default=void 0;var M1=U1(jn()),L1=lt(),vr=ut();function U1(t){return t&&t.t?t:{default:t}}var Er=class t extends L1.ContainerIterator{constructor(e,r,i,n){super(n),this.o=e,this.h=r,this.container=i,this.iteratorType===0?(this.pre=function(){return this.o.L===this.h&&(0, vr.throwIteratorAccessError)(),this.o=this.o.L,this},this.next=function(){return this.o===this.h&&(0, vr.throwIteratorAccessError)(),this.o=this.o.B,this}):(this.pre=function(){return this.o.B===this.h&&(0, vr.throwIteratorAccessError)(),this.o=this.o.B,this},this.next=function(){return this.o===this.h&&(0, vr.throwIteratorAccessError)(),this.o=this.o.L,this});}get pointer(){return this.o===this.h&&(0, vr.throwIteratorAccessError)(),this.o.l}set pointer(e){this.o===this.h&&(0, vr.throwIteratorAccessError)(),this.o.l=e;}copy(){return new t(this.o,this.h,this.container,this.iteratorType)}},_a=class extends M1.default{constructor(e=[]){super(),this.h={},this.p=this._=this.h.L=this.h.B=this.h;let r=this;e.forEach(function(i){r.pushBack(i);});}V(e){let{L:r,B:i}=e;r.B=i,i.L=r,e===this.p&&(this.p=i),e===this._&&(this._=r),this.i-=1;}G(e,r){let i=r.B,n={l:e,L:r,B:i};r.B=n,i.L=n,r===this.h&&(this.p=n),i===this.h&&(this._=n),this.i+=1;}clear(){this.i=0,this.p=this._=this.h.L=this.h.B=this.h;}begin(){return new Er(this.p,this.h,this)}end(){return new Er(this.h,this.h,this)}rBegin(){return new Er(this._,this.h,this,1)}rEnd(){return new Er(this.h,this.h,this,1)}front(){return this.p.l}back(){return this._.l}getElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let r=this.p;for(;e--;)r=r.B;return r.l}eraseElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let r=this.p;for(;e--;)r=r.B;return this.V(r),this.i}eraseElementByValue(e){let r=this.p;for(;r!==this.h;)r.l===e&&this.V(r),r=r.B;return this.i}eraseElementByIterator(e){let r=e.o;return r===this.h&&(0, vr.throwIteratorAccessError)(),e=e.next(),this.V(r),e}pushBack(e){return this.G(e,this._),this.i}popBack(){if(this.i===0)return;let e=this._.l;return this.V(this._),e}pushFront(e){return this.G(e,this.h),this.i}popFront(){if(this.i===0)return;let e=this.p.l;return this.V(this.p),e}setElementByPos(e,r){if(e<0||e>this.i-1)throw new RangeError;let i=this.p;for(;e--;)i=i.B;i.l=r;}insert(e,r,i=1){if(e<0||e>this.i)throw new RangeError;if(i<=0)return this.i;if(e===0)for(;i--;)this.pushFront(r);else if(e===this.i)for(;i--;)this.pushBack(r);else {let n=this.p;for(let s=1;s{_();v();m();Object.defineProperty(Vn,\"t\",{value:!0});Vn.default=void 0;var q1=j1(jn()),D1=ba();function j1(t){return t&&t.t?t:{default:t}}var Sr=class t extends D1.RandomIterator{constructor(e,r,i){super(e,i),this.container=r;}copy(){return new t(this.o,this.container,this.iteratorType)}},ma=class extends q1.default{constructor(e=[],r=4096){super(),this.j=0,this.D=0,this.R=0,this.N=0,this.P=0,this.A=[];let i=(()=>{if(typeof e.length==\"number\")return e.length;if(typeof e.size==\"number\")return e.size;if(typeof e.size==\"function\")return e.size();throw new TypeError(\"Cannot get the length or size of the container\")})();this.F=r,this.P=Math.max(Math.ceil(i/this.F),1);for(let s=0;s>1)-(n>>1),this.D=this.N=this.F-i%this.F>>1;let o=this;e.forEach(function(s){o.pushBack(s);});}T(){let e=[],r=Math.max(this.P>>1,1);for(let i=0;i>1;}begin(){return new Sr(0,this)}end(){return new Sr(this.i,this)}rBegin(){return new Sr(this.i-1,this,1)}rEnd(){return new Sr(-1,this,1)}front(){if(this.i!==0)return this.A[this.j][this.D]}back(){if(this.i!==0)return this.A[this.R][this.N]}pushBack(e){return this.i&&(this.N0?this.N-=1:this.R>0?(this.R-=1,this.N=this.F-1):(this.R=this.P-1,this.N=this.F-1)),this.i-=1,e}pushFront(e){return this.i&&(this.D>0?this.D-=1:this.j>0?(this.j-=1,this.D=this.F-1):(this.j=this.P-1,this.D=this.F-1),this.j===this.R&&this.D===this.N&&this.T()),this.i+=1,this.A[this.j][this.D]=e,this.i}popFront(){if(this.i===0)return;let e=this.A[this.j][this.D];return this.i!==1&&(this.Dthis.i-1)throw new RangeError;let{curNodeBucketIndex:r,curNodePointerIndex:i}=this.O(e);return this.A[r][i]}setElementByPos(e,r){if(e<0||e>this.i-1)throw new RangeError;let{curNodeBucketIndex:i,curNodePointerIndex:n}=this.O(e);this.A[i][n]=r;}insert(e,r,i=1){if(e<0||e>this.i)throw new RangeError;if(e===0)for(;i--;)this.pushFront(r);else if(e===this.i)for(;i--;)this.pushBack(r);else {let n=[];for(let o=e;othis.i-1)throw new RangeError;if(e===0)this.popFront();else if(e===this.i-1)this.popBack();else {let r=[];for(let n=e+1;ne;)this.popBack();return this.i}sort(e){let r=[];for(let i=0;i{_();v();m();Object.defineProperty(ei,\"t\",{value:!0});ei.TreeNodeEnableIndex=ei.TreeNode=void 0;var zn=class{constructor(e,r){this.ee=1,this.u=void 0,this.l=void 0,this.U=void 0,this.W=void 0,this.tt=void 0,this.u=e,this.l=r;}L(){let e=this;if(e.ee===1&&e.tt.tt===e)e=e.W;else if(e.U)for(e=e.U;e.W;)e=e.W;else {let r=e.tt;for(;r.U===e;)e=r,r=e.tt;e=r;}return e}B(){let e=this;if(e.W){for(e=e.W;e.U;)e=e.U;return e}else {let r=e.tt;for(;r.W===e;)e=r,r=e.tt;return e.W!==r?r:e}}te(){let e=this.tt,r=this.W,i=r.U;return e.tt===this?e.tt=r:e.U===this?e.U=r:e.W=r,r.tt=e,r.U=this,this.tt=r,this.W=i,i&&(i.tt=this),r}se(){let e=this.tt,r=this.U,i=r.W;return e.tt===this?e.tt=r:e.U===this?e.U=r:e.W=r,r.tt=e,r.W=this,this.tt=r,this.U=i,i&&(i.tt=this),r}};ei.TreeNode=zn;var va=class extends zn{constructor(){super(...arguments),this.rt=1;}te(){let e=super.te();return this.ie(),e.ie(),e}se(){let e=super.se();return this.ie(),e.ie(),e}ie(){this.rt=1,this.U&&(this.rt+=this.U.rt),this.W&&(this.rt+=this.W.rt);}};ei.TreeNodeEnableIndex=va;});var Sa=M(Kn=>{_();v();m();Object.defineProperty(Kn,\"t\",{value:!0});Kn.default=void 0;var lp=ap(),W1=lt(),up=ut(),Ea=class extends W1.Container{constructor(e=function(i,n){return in?1:0},r=!1){super(),this.Y=void 0,this.v=e,r?(this.re=lp.TreeNodeEnableIndex,this.M=function(i,n,o){let s=this.ne(i,n,o);if(s){let a=s.tt;for(;a!==this.h;)a.rt+=1,a=a.tt;let l=this.he(s);if(l){let{parentNode:c,grandParent:h,curNode:d}=l;c.ie(),h.ie(),d.ie();}}return this.i},this.V=function(i){let n=this.fe(i);for(;n!==this.h;)n.rt-=1,n=n.tt;}):(this.re=lp.TreeNode,this.M=function(i,n,o){let s=this.ne(i,n,o);return s&&this.he(s),this.i},this.V=this.fe),this.h=new this.re;}X(e,r){let i=this.h;for(;e;){let n=this.v(e.u,r);if(n<0)e=e.W;else if(n>0)i=e,e=e.U;else return e}return i}Z(e,r){let i=this.h;for(;e;)this.v(e.u,r)<=0?e=e.W:(i=e,e=e.U);return i}$(e,r){let i=this.h;for(;e;){let n=this.v(e.u,r);if(n<0)i=e,e=e.W;else if(n>0)e=e.U;else return e}return i}rr(e,r){let i=this.h;for(;e;)this.v(e.u,r)<0?(i=e,e=e.W):e=e.U;return i}ue(e){for(;;){let r=e.tt;if(r===this.h)return;if(e.ee===1){e.ee=0;return}if(e===r.U){let i=r.W;if(i.ee===1)i.ee=0,r.ee=1,r===this.Y?this.Y=r.te():r.te();else if(i.W&&i.W.ee===1){i.ee=r.ee,r.ee=0,i.W.ee=0,r===this.Y?this.Y=r.te():r.te();return}else i.U&&i.U.ee===1?(i.ee=1,i.U.ee=0,i.se()):(i.ee=1,e=r);}else {let i=r.U;if(i.ee===1)i.ee=0,r.ee=1,r===this.Y?this.Y=r.se():r.se();else if(i.U&&i.U.ee===1){i.ee=r.ee,r.ee=0,i.U.ee=0,r===this.Y?this.Y=r.se():r.se();return}else i.W&&i.W.ee===1?(i.ee=1,i.W.ee=0,i.te()):(i.ee=1,e=r);}}}fe(e){if(this.i===1)return this.clear(),this.h;let r=e;for(;r.U||r.W;){if(r.W)for(r=r.W;r.U;)r=r.U;else r=r.U;[e.u,r.u]=[r.u,e.u],[e.l,r.l]=[r.l,e.l],e=r;}this.h.U===r?this.h.U=r.tt:this.h.W===r&&(this.h.W=r.tt),this.ue(r);let i=r.tt;return r===i.U?i.U=void 0:i.W=void 0,this.i-=1,this.Y.ee=0,i}oe(e,r){return e===void 0?!1:this.oe(e.U,r)||r(e)?!0:this.oe(e.W,r)}he(e){for(;;){let r=e.tt;if(r.ee===0)return;let i=r.tt;if(r===i.U){let n=i.W;if(n&&n.ee===1){if(n.ee=r.ee=0,i===this.Y)return;i.ee=1,e=i;continue}else if(e===r.W){if(e.ee=0,e.U&&(e.U.tt=r),e.W&&(e.W.tt=i),r.W=e.U,i.U=e.W,e.U=r,e.W=i,i===this.Y)this.Y=e,this.h.tt=e;else {let o=i.tt;o.U===i?o.U=e:o.W=e;}return e.tt=i.tt,r.tt=e,i.tt=e,i.ee=1,{parentNode:r,grandParent:i,curNode:e}}else r.ee=0,i===this.Y?this.Y=i.se():i.se(),i.ee=1;}else {let n=i.U;if(n&&n.ee===1){if(n.ee=r.ee=0,i===this.Y)return;i.ee=1,e=i;continue}else if(e===r.U){if(e.ee=0,e.U&&(e.U.tt=i),e.W&&(e.W.tt=r),i.W=e.U,r.U=e.W,e.U=i,e.W=r,i===this.Y)this.Y=e,this.h.tt=e;else {let o=i.tt;o.U===i?o.U=e:o.W=e;}return e.tt=i.tt,r.tt=e,i.tt=e,i.ee=1,{parentNode:r,grandParent:i,curNode:e}}else r.ee=0,i===this.Y?this.Y=i.te():i.te(),i.ee=1;}return}}ne(e,r,i){if(this.Y===void 0){this.i+=1,this.Y=new this.re(e,r),this.Y.ee=0,this.Y.tt=this.h,this.h.tt=this.Y,this.h.U=this.Y,this.h.W=this.Y;return}let n,o=this.h.U,s=this.v(o.u,e);if(s===0){o.l=r;return}else if(s>0)o.U=new this.re(e,r),o.U.tt=o,n=o.U,this.h.U=n;else {let a=this.h.W,l=this.v(a.u,e);if(l===0){a.l=r;return}else if(l<0)a.W=new this.re(e,r),a.W.tt=a,n=a.W,this.h.W=n;else {if(i!==void 0){let c=i.o;if(c!==this.h){let h=this.v(c.u,e);if(h===0){c.l=r;return}else if(h>0){let d=c.L(),g=this.v(d.u,e);if(g===0){d.l=r;return}else g<0&&(n=new this.re(e,r),d.W===void 0?(d.W=n,n.tt=d):(c.U=n,n.tt=c));}}}if(n===void 0)for(n=this.Y;;){let c=this.v(n.u,e);if(c>0){if(n.U===void 0){n.U=new this.re(e,r),n.U.tt=n,n=n.U;break}n=n.U;}else if(c<0){if(n.W===void 0){n.W=new this.re(e,r),n.W.tt=n,n=n.W;break}n=n.W;}else {n.l=r;return}}}}return this.i+=1,n}I(e,r){for(;e;){let i=this.v(e.u,r);if(i<0)e=e.W;else if(i>0)e=e.U;else return e}return e||this.h}clear(){this.i=0,this.Y=void 0,this.h.tt=void 0,this.h.U=this.h.W=void 0;}updateKeyByIterator(e,r){let i=e.o;if(i===this.h&&(0, up.throwIteratorAccessError)(),this.i===1)return i.u=r,!0;if(i===this.h.U)return this.v(i.B().u,r)>0?(i.u=r,!0):!1;if(i===this.h.W)return this.v(i.L().u,r)<0?(i.u=r,!0):!1;let n=i.L().u;if(this.v(n,r)>=0)return !1;let o=i.B().u;return this.v(o,r)<=0?!1:(i.u=r,!0)}eraseElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let r=0,i=this;return this.oe(this.Y,function(n){return e===r?(i.V(n),!0):(r+=1,!1)}),this.i}eraseElementByKey(e){if(this.i===0)return !1;let r=this.I(this.Y,e);return r===this.h?!1:(this.V(r),!0)}eraseElementByIterator(e){let r=e.o;r===this.h&&(0, up.throwIteratorAccessError)();let i=r.W===void 0;return e.iteratorType===0?i&&e.next():(!i||r.U===void 0)&&e.next(),this.V(r),e}forEach(e){let r=0;for(let i of this)e(i,r++,this);}getElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let r,i=0;for(let n of this){if(i===e){r=n;break}i+=1;}return r}getHeight(){if(this.i===0)return 0;let e=function(r){return r?Math.max(e(r.U),e(r.W))+1:0};return e(this.Y)}},$1=Ea;Kn.default=$1;});var Ia=M(Qn=>{_();v();m();Object.defineProperty(Qn,\"t\",{value:!0});Qn.default=void 0;var H1=lt(),Gn=ut(),Aa=class extends H1.ContainerIterator{constructor(e,r,i){super(i),this.o=e,this.h=r,this.iteratorType===0?(this.pre=function(){return this.o===this.h.U&&(0, Gn.throwIteratorAccessError)(),this.o=this.o.L(),this},this.next=function(){return this.o===this.h&&(0, Gn.throwIteratorAccessError)(),this.o=this.o.B(),this}):(this.pre=function(){return this.o===this.h.W&&(0, Gn.throwIteratorAccessError)(),this.o=this.o.B(),this},this.next=function(){return this.o===this.h&&(0, Gn.throwIteratorAccessError)(),this.o=this.o.L(),this});}get index(){let e=this.o,r=this.h.tt;if(e===this.h)return r?r.rt-1:0;let i=0;for(e.U&&(i+=e.U.rt);e!==r;){let n=e.tt;e===n.W&&(i+=1,n.U&&(i+=n.U.rt)),e=n;}return i}},V1=Aa;Qn.default=V1;});var cp=M(Yn=>{_();v();m();Object.defineProperty(Yn,\"t\",{value:!0});Yn.default=void 0;var z1=fp(Sa()),K1=fp(Ia()),G1=ut();function fp(t){return t&&t.t?t:{default:t}}var Ke=class t extends K1.default{constructor(e,r,i,n){super(e,r,n),this.container=i;}get pointer(){return this.o===this.h&&(0, G1.throwIteratorAccessError)(),this.o.u}copy(){return new t(this.o,this.h,this.container,this.iteratorType)}},Ta=class extends z1.default{constructor(e=[],r,i){super(r,i);let n=this;e.forEach(function(o){n.insert(o);});}*K(e){e!==void 0&&(yield*this.K(e.U),yield e.u,yield*this.K(e.W));}begin(){return new Ke(this.h.U||this.h,this.h,this)}end(){return new Ke(this.h,this.h,this)}rBegin(){return new Ke(this.h.W||this.h,this.h,this,1)}rEnd(){return new Ke(this.h,this.h,this,1)}front(){return this.h.U?this.h.U.u:void 0}back(){return this.h.W?this.h.W.u:void 0}insert(e,r){return this.M(e,void 0,r)}find(e){let r=this.I(this.Y,e);return new Ke(r,this.h,this)}lowerBound(e){let r=this.X(this.Y,e);return new Ke(r,this.h,this)}upperBound(e){let r=this.Z(this.Y,e);return new Ke(r,this.h,this)}reverseLowerBound(e){let r=this.$(this.Y,e);return new Ke(r,this.h,this)}reverseUpperBound(e){let r=this.rr(this.Y,e);return new Ke(r,this.h,this)}union(e){let r=this;return e.forEach(function(i){r.insert(i);}),this.i}[Symbol.iterator](){return this.K(this.Y)}},Q1=Ta;Yn.default=Q1;});var dp=M(Jn=>{_();v();m();Object.defineProperty(Jn,\"t\",{value:!0});Jn.default=void 0;var Y1=hp(Sa()),J1=hp(Ia()),X1=ut();function hp(t){return t&&t.t?t:{default:t}}var Ge=class t extends J1.default{constructor(e,r,i,n){super(e,r,n),this.container=i;}get pointer(){this.o===this.h&&(0, X1.throwIteratorAccessError)();let e=this;return new Proxy([],{get(r,i){if(i===\"0\")return e.o.u;if(i===\"1\")return e.o.l},set(r,i,n){if(i!==\"1\")throw new TypeError(\"props must be 1\");return e.o.l=n,!0}})}copy(){return new t(this.o,this.h,this.container,this.iteratorType)}},Ra=class extends Y1.default{constructor(e=[],r,i){super(r,i);let n=this;e.forEach(function(o){n.setElement(o[0],o[1]);});}*K(e){e!==void 0&&(yield*this.K(e.U),yield [e.u,e.l],yield*this.K(e.W));}begin(){return new Ge(this.h.U||this.h,this.h,this)}end(){return new Ge(this.h,this.h,this)}rBegin(){return new Ge(this.h.W||this.h,this.h,this,1)}rEnd(){return new Ge(this.h,this.h,this,1)}front(){if(this.i===0)return;let e=this.h.U;return [e.u,e.l]}back(){if(this.i===0)return;let e=this.h.W;return [e.u,e.l]}lowerBound(e){let r=this.X(this.Y,e);return new Ge(r,this.h,this)}upperBound(e){let r=this.Z(this.Y,e);return new Ge(r,this.h,this)}reverseLowerBound(e){let r=this.$(this.Y,e);return new Ge(r,this.h,this)}reverseUpperBound(e){let r=this.rr(this.Y,e);return new Ge(r,this.h,this)}setElement(e,r,i){return this.M(e,r,i)}find(e){let r=this.I(this.Y,e);return new Ge(r,this.h,this)}getElementByKey(e){return this.I(this.Y,e).l}union(e){let r=this;return e.forEach(function(i){r.setElement(i[0],i[1]);}),this.i}[Symbol.iterator](){return this.K(this.Y)}},Z1=Ra;Jn.default=Z1;});var Ba=M(Ca=>{_();v();m();Object.defineProperty(Ca,\"t\",{value:!0});Ca.default=ev;function ev(t){let e=typeof t;return e===\"object\"&&t!==null||e===\"function\"}});var xa=M(ti=>{_();v();m();Object.defineProperty(ti,\"t\",{value:!0});ti.HashContainerIterator=ti.HashContainer=void 0;var pp=lt(),Pa=tv(Ba()),Ci=ut();function tv(t){return t&&t.t?t:{default:t}}var ka=class extends pp.ContainerIterator{constructor(e,r,i){super(i),this.o=e,this.h=r,this.iteratorType===0?(this.pre=function(){return this.o.L===this.h&&(0, Ci.throwIteratorAccessError)(),this.o=this.o.L,this},this.next=function(){return this.o===this.h&&(0, Ci.throwIteratorAccessError)(),this.o=this.o.B,this}):(this.pre=function(){return this.o.B===this.h&&(0, Ci.throwIteratorAccessError)(),this.o=this.o.B,this},this.next=function(){return this.o===this.h&&(0, Ci.throwIteratorAccessError)(),this.o=this.o.L,this});}};ti.HashContainerIterator=ka;var Oa=class extends pp.Container{constructor(){super(),this.H=[],this.g={},this.HASH_TAG=Symbol(\"@@HASH_TAG\"),Object.setPrototypeOf(this.g,null),this.h={},this.h.L=this.h.B=this.p=this._=this.h;}V(e){let{L:r,B:i}=e;r.B=i,i.L=r,e===this.p&&(this.p=i),e===this._&&(this._=r),this.i-=1;}M(e,r,i){i===void 0&&(i=(0, Pa.default)(e));let n;if(i){let o=e[this.HASH_TAG];if(o!==void 0)return this.H[o].l=r,this.i;Object.defineProperty(e,this.HASH_TAG,{value:this.H.length,configurable:!0}),n={u:e,l:r,L:this._,B:this.h},this.H.push(n);}else {let o=this.g[e];if(o)return o.l=r,this.i;n={u:e,l:r,L:this._,B:this.h},this.g[e]=n;}return this.i===0?(this.p=n,this.h.B=n):this._.B=n,this._=n,this.h.L=n,++this.i}I(e,r){if(r===void 0&&(r=(0, Pa.default)(e)),r){let i=e[this.HASH_TAG];return i===void 0?this.h:this.H[i]}else return this.g[e]||this.h}clear(){let e=this.HASH_TAG;this.H.forEach(function(r){delete r.u[e];}),this.H=[],this.g={},Object.setPrototypeOf(this.g,null),this.i=0,this.p=this._=this.h.L=this.h.B=this.h;}eraseElementByKey(e,r){let i;if(r===void 0&&(r=(0, Pa.default)(e)),r){let n=e[this.HASH_TAG];if(n===void 0)return !1;delete e[this.HASH_TAG],i=this.H[n],delete this.H[n];}else {if(i=this.g[e],i===void 0)return !1;delete this.g[e];}return this.V(i),!0}eraseElementByIterator(e){let r=e.o;return r===this.h&&(0, Ci.throwIteratorAccessError)(),this.V(r),e.next()}eraseElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let r=this.p;for(;e--;)r=r.B;return this.V(r),this.i}};ti.HashContainer=Oa;});var yp=M(Xn=>{_();v();m();Object.defineProperty(Xn,\"t\",{value:!0});Xn.default=void 0;var gp=xa(),rv=ut(),Ar=class t extends gp.HashContainerIterator{constructor(e,r,i,n){super(e,r,n),this.container=i;}get pointer(){return this.o===this.h&&(0, rv.throwIteratorAccessError)(),this.o.u}copy(){return new t(this.o,this.h,this.container,this.iteratorType)}},Ma=class extends gp.HashContainer{constructor(e=[]){super();let r=this;e.forEach(function(i){r.insert(i);});}begin(){return new Ar(this.p,this.h,this)}end(){return new Ar(this.h,this.h,this)}rBegin(){return new Ar(this._,this.h,this,1)}rEnd(){return new Ar(this.h,this.h,this,1)}front(){return this.p.u}back(){return this._.u}insert(e,r){return this.M(e,void 0,r)}getElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let r=this.p;for(;e--;)r=r.B;return r.u}find(e,r){let i=this.I(e,r);return new Ar(i,this.h,this)}forEach(e){let r=0,i=this.p;for(;i!==this.h;)e(i.u,r++,this),i=i.B;}[Symbol.iterator](){return function*(){let e=this.p;for(;e!==this.h;)yield e.u,e=e.B;}.bind(this)()}},iv=Ma;Xn.default=iv;});var wp=M(Zn=>{_();v();m();Object.defineProperty(Zn,\"t\",{value:!0});Zn.default=void 0;var bp=xa(),nv=ov(Ba()),sv=ut();function ov(t){return t&&t.t?t:{default:t}}var Ir=class t extends bp.HashContainerIterator{constructor(e,r,i,n){super(e,r,n),this.container=i;}get pointer(){this.o===this.h&&(0, sv.throwIteratorAccessError)();let e=this;return new Proxy([],{get(r,i){if(i===\"0\")return e.o.u;if(i===\"1\")return e.o.l},set(r,i,n){if(i!==\"1\")throw new TypeError(\"props must be 1\");return e.o.l=n,!0}})}copy(){return new t(this.o,this.h,this.container,this.iteratorType)}},La=class extends bp.HashContainer{constructor(e=[]){super();let r=this;e.forEach(function(i){r.setElement(i[0],i[1]);});}begin(){return new Ir(this.p,this.h,this)}end(){return new Ir(this.h,this.h,this)}rBegin(){return new Ir(this._,this.h,this,1)}rEnd(){return new Ir(this.h,this.h,this,1)}front(){if(this.i!==0)return [this.p.u,this.p.l]}back(){if(this.i!==0)return [this._.u,this._.l]}setElement(e,r,i){return this.M(e,r,i)}getElementByKey(e,r){if(r===void 0&&(r=(0, nv.default)(e)),r){let n=e[this.HASH_TAG];return n!==void 0?this.H[n].l:void 0}let i=this.g[e];return i?i.l:void 0}getElementByPos(e){if(e<0||e>this.i-1)throw new RangeError;let r=this.p;for(;e--;)r=r.B;return [r.u,r.l]}find(e,r){let i=this.I(e,r);return new Ir(i,this.h,this)}forEach(e){let r=0,i=this.p;for(;i!==this.h;)e([i.u,i.l],r++,this),i=i.B;}[Symbol.iterator](){return function*(){let e=this.p;for(;e!==this.h;)yield [e.u,e.l],e=e.B;}.bind(this)()}},av=La;Zn.default=av;});var _p=M(je=>{_();v();m();Object.defineProperty(je,\"t\",{value:!0});Object.defineProperty(je,\"Deque\",{enumerable:!0,get:function(){return dv.default}});Object.defineProperty(je,\"HashMap\",{enumerable:!0,get:function(){return bv.default}});Object.defineProperty(je,\"HashSet\",{enumerable:!0,get:function(){return yv.default}});Object.defineProperty(je,\"LinkList\",{enumerable:!0,get:function(){return hv.default}});Object.defineProperty(je,\"OrderedMap\",{enumerable:!0,get:function(){return gv.default}});Object.defineProperty(je,\"OrderedSet\",{enumerable:!0,get:function(){return pv.default}});Object.defineProperty(je,\"PriorityQueue\",{enumerable:!0,get:function(){return fv.default}});Object.defineProperty(je,\"Queue\",{enumerable:!0,get:function(){return uv.default}});Object.defineProperty(je,\"Stack\",{enumerable:!0,get:function(){return lv.default}});Object.defineProperty(je,\"Vector\",{enumerable:!0,get:function(){return cv.default}});var lv=ft(tp()),uv=ft(rp()),fv=ft(ip()),cv=ft(np()),hv=ft(sp()),dv=ft(op()),pv=ft(cp()),gv=ft(dp()),yv=ft(yp()),bv=ft(wp());function ft(t){return t&&t.t?t:{default:t}}});var vp=M((AN,mp)=>{_();v();m();var wv=_p().OrderedSet,ct=ot()(\"number-allocator:trace\"),_v=ot()(\"number-allocator:error\");function Re(t,e){this.low=t,this.high=e;}Re.prototype.equals=function(t){return this.low===t.low&&this.high===t.high};Re.prototype.compare=function(t){return this.lowr.compare(i)),ct(\"Create\"),this.clear();}ht.prototype.firstVacant=function(){return this.ss.size()===0?null:this.ss.front().low};ht.prototype.alloc=function(){if(this.ss.size()===0)return ct(\"alloc():empty\"),null;let t=this.ss.begin(),e=t.pointer.low,r=t.pointer.high,i=e;return i+1<=r?this.ss.updateKeyByIterator(t,new Re(e+1,r)):this.ss.eraseElementByPos(0),ct(\"alloc():\"+i),i};ht.prototype.use=function(t){let e=new Re(t,t),r=this.ss.lowerBound(e);if(!r.equals(this.ss.end())){let i=r.pointer.low,n=r.pointer.high;return r.pointer.equals(e)?(this.ss.eraseElementByIterator(r),ct(\"use():\"+t),!0):i>t?!1:i===t?(this.ss.updateKeyByIterator(r,new Re(i+1,n)),ct(\"use():\"+t),!0):n===t?(this.ss.updateKeyByIterator(r,new Re(i,n-1)),ct(\"use():\"+t),!0):(this.ss.updateKeyByIterator(r,new Re(t+1,n)),this.ss.insert(new Re(i,t-1)),ct(\"use():\"+t),!0)}return ct(\"use():failed\"),!1};ht.prototype.free=function(t){if(tthis.max){_v(\"free():\"+t+\" is out of range\");return}let e=new Re(t,t),r=this.ss.upperBound(e);if(r.equals(this.ss.end())){if(r.equals(this.ss.begin())){this.ss.insert(e);return}r.pre();let i=r.pointer.high;r.pointer.high+1===t?this.ss.updateKeyByIterator(r,new Re(i,t)):this.ss.insert(e);}else if(r.equals(this.ss.begin()))if(t+1===r.pointer.low){let i=r.pointer.high;this.ss.updateKeyByIterator(r,new Re(t,i));}else this.ss.insert(e);else {let i=r.pointer.low,n=r.pointer.high;r.pre();let o=r.pointer.low;r.pointer.high+1===t?t+1===i?(this.ss.eraseElementByIterator(r),this.ss.updateKeyByIterator(r,new Re(o,n))):this.ss.updateKeyByIterator(r,new Re(o,t)):t+1===i?(this.ss.eraseElementByIterator(r.next()),this.ss.insert(new Re(t,n))):this.ss.insert(e);}ct(\"free():\"+t);};ht.prototype.clear=function(){ct(\"clear()\"),this.ss.clear(),this.ss.insert(new Re(this.min,this.max));};ht.prototype.intervalCount=function(){return this.ss.size()};ht.prototype.dump=function(){console.log(\"length:\"+this.ss.size());for(let t of this.ss)console.log(t);};mp.exports=ht;});var Ua=M((MN,Ep)=>{_();v();m();var mv=vp();Ep.exports.NumberAllocator=mv;});var Sp=M(qa=>{_();v();m();Object.defineProperty(qa,\"__esModule\",{value:!0});var vv=ep(),Ev=Ua(),Na=class{constructor(e){e>0&&(this.aliasToTopic=new vv.LRUCache({max:e}),this.topicToAlias={},this.numberAllocator=new Ev.NumberAllocator(1,e),this.max=e,this.length=0);}put(e,r){if(r===0||r>this.max)return !1;let i=this.aliasToTopic.get(r);return i&&delete this.topicToAlias[i],this.aliasToTopic.set(r,e),this.topicToAlias[e]=r,this.numberAllocator.use(r),this.length=this.aliasToTopic.size,!0}getTopicByAlias(e){return this.aliasToTopic.get(e)}getAliasByTopic(e){let r=this.topicToAlias[e];return typeof r<\"u\"&&this.aliasToTopic.get(r),r}clear(){this.aliasToTopic.clear(),this.topicToAlias={},this.numberAllocator.clear(),this.length=0;}getLruAlias(){let e=this.numberAllocator.firstVacant();return e||[...this.aliasToTopic.keys()][this.aliasToTopic.size-1]}};qa.default=Na;});var Ap=M(Bi=>{_();v();m();var Sv=Bi&&Bi.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Bi,\"__esModule\",{value:!0});var Av=Ti(),Iv=Sv(Sp()),Tv=_r(),Rv=(t,e)=>{t.log(\"_handleConnack\");let{options:r}=t,n=r.protocolVersion===5?e.reasonCode:e.returnCode;if(clearTimeout(t.connackTimer),delete t.topicAliasSend,e.properties){if(e.properties.topicAliasMaximum){if(e.properties.topicAliasMaximum>65535){t.emit(\"error\",new Error(\"topicAliasMaximum from broker is out of range\"));return}e.properties.topicAliasMaximum>0&&(t.topicAliasSend=new Iv.default(e.properties.topicAliasMaximum));}e.properties.serverKeepAlive&&r.keepalive&&(r.keepalive=e.properties.serverKeepAlive),e.properties.maximumPacketSize&&(r.properties||(r.properties={}),r.properties.maximumPacketSize=e.properties.maximumPacketSize);}if(n===0)t.reconnecting=!1,t._onConnect(e);else if(n>0){let o=new Tv.ErrorWithReasonCode(`Connection refused: ${Av.ReasonCodes[n]}`,n);t.emit(\"error\",o);}};Bi.default=Rv;});var Ip=M(Da=>{_();v();m();Object.defineProperty(Da,\"__esModule\",{value:!0});var Cv=(t,e,r)=>{t.log(\"handling pubrel packet\");let i=typeof r<\"u\"?r:t.noop,{messageId:n}=e,o={cmd:\"pubcomp\",messageId:n};t.incomingStore.get(e,(s,a)=>{s?t._sendPacket(o,i):(t.emit(\"message\",a.topic,a.payload,a),t.handleMessage(a,l=>{if(l)return i(l);t.incomingStore.del(a,t.noop),t._sendPacket(o,i);}));});};Da.default=Cv;});var Tp=M(Pi=>{_();v();m();var ki=Pi&&Pi.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Pi,\"__esModule\",{value:!0});var Bv=ki(Vd()),Pv=ki(Qd()),kv=ki(Ap()),Ov=ki(Ti()),xv=ki(Ip()),Mv=(t,e,r)=>{let{options:i}=t;if(i.protocolVersion===5&&i.properties&&i.properties.maximumPacketSize&&i.properties.maximumPacketSize{_();v();m();var Lv=ri&&ri.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(ri,\"__esModule\",{value:!0});ri.TypedEventEmitter=void 0;var Uv=Lv((sr(),X(nr))),Nv=_r(),es=class{};ri.TypedEventEmitter=es;(0, Nv.applyMixin)(es,Uv.default);});var Oi=M(Tr=>{_();v();m();Object.defineProperty(Tr,\"__esModule\",{value:!0});Tr.isReactNativeBrowser=Tr.isWebWorker=void 0;var qv=()=>{var t;return typeof window<\"u\"?typeof navigator<\"u\"&&((t=navigator.userAgent)===null||t===void 0?void 0:t.toLowerCase().indexOf(\" electron/\"))>-1&&(!(B===null||B===void 0)&&B.versions)?!Object.prototype.hasOwnProperty.call(B.versions,\"electron\"):typeof window.document<\"u\":!1},Cp=()=>{var t,e;return !!(typeof self==\"object\"&&(!((e=(t=self?.constructor)===null||t===void 0?void 0:t.name)===null||e===void 0)&&e.includes(\"WorkerGlobalScope\")))},Bp=()=>typeof navigator<\"u\"&&navigator.product===\"ReactNative\",Dv=qv()||Cp()||Bp();Tr.isWebWorker=Cp();Tr.isReactNativeBrowser=Bp();Tr.default=Dv;});var kp=M((ts,Pp)=>{_();v();m();(function(t,e){typeof ts==\"object\"&&typeof Pp<\"u\"?e(ts):typeof define==\"function\"&&define.amd?define([\"exports\"],e):(t=typeof globalThis<\"u\"?globalThis:t||self,e(t.fastUniqueNumbers={}));})(ts,function(t){var e=function(g){return function(y){var w=g(y);return y.add(w),w}},r=function(g){return function(y,w){return g.set(y,w),w}},i=Number.MAX_SAFE_INTEGER===void 0?9007199254740991:Number.MAX_SAFE_INTEGER,n=536870912,o=n*2,s=function(g,y){return function(w){var S=y.get(w),E=S===void 0?w.size:Si)throw new Error(\"Congratulations, you created a collection of unique numbers which uses all available integers!\");for(;w.has(E);)E=Math.floor(Math.random()*i);return g(w,E)}},a=new WeakMap,l=r(a),c=s(l,a),h=e(c);t.addUniqueNumber=h,t.generateUniqueNumber=c;});});var xp=M((rs,Op)=>{_();v();m();(function(t,e){typeof rs==\"object\"&&typeof Op<\"u\"?e(rs,kp()):typeof define==\"function\"&&define.amd?define([\"exports\",\"fast-unique-numbers\"],e):(t=typeof globalThis<\"u\"?globalThis:t||self,e(t.workerTimersBroker={},t.fastUniqueNumbers));})(rs,function(t,e){var r=function(s){return s.method!==void 0&&s.method===\"call\"},i=function(s){return s.error===null&&typeof s.id==\"number\"},n=function(s){var a=new Map([[0,function(){}]]),l=new Map([[0,function(){}]]),c=new Map,h=new Worker(s);h.addEventListener(\"message\",function(S){var E=S.data;if(r(E)){var I=E.params,C=I.timerId,R=I.timerType;if(R===\"interval\"){var U=a.get(C);if(typeof U==\"number\"){var N=c.get(U);if(N===void 0||N.timerId!==C||N.timerType!==R)throw new Error(\"The timer is in an undefined state.\")}else if(typeof U<\"u\")U();else throw new Error(\"The timer is in an undefined state.\")}else if(R===\"timeout\"){var W=l.get(C);if(typeof W==\"number\"){var K=c.get(W);if(K===void 0||K.timerId!==C||K.timerType!==R)throw new Error(\"The timer is in an undefined state.\")}else if(typeof W<\"u\")W(),l.delete(C);else throw new Error(\"The timer is in an undefined state.\")}}else if(i(E)){var z=E.id,Q=c.get(z);if(Q===void 0)throw new Error(\"The timer is in an undefined state.\");var pe=Q.timerId,Yt=Q.timerType;c.delete(z),Yt===\"interval\"?a.delete(pe):l.delete(pe);}else {var ge=E.error.message;throw new Error(ge)}});var d=function(E){var I=e.generateUniqueNumber(c);c.set(I,{timerId:E,timerType:\"interval\"}),a.set(E,I),h.postMessage({id:I,method:\"clear\",params:{timerId:E,timerType:\"interval\"}});},g=function(E){var I=e.generateUniqueNumber(c);c.set(I,{timerId:E,timerType:\"timeout\"}),l.set(E,I),h.postMessage({id:I,method:\"clear\",params:{timerId:E,timerType:\"timeout\"}});},y=function(E){var I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,C=e.generateUniqueNumber(a);return a.set(C,function(){E(),typeof a.get(C)==\"function\"&&h.postMessage({id:null,method:\"set\",params:{delay:I,now:performance.now(),timerId:C,timerType:\"interval\"}});}),h.postMessage({id:null,method:\"set\",params:{delay:I,now:performance.now(),timerId:C,timerType:\"interval\"}}),C},w=function(E){var I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,C=e.generateUniqueNumber(l);return l.set(C,E),h.postMessage({id:null,method:\"set\",params:{delay:I,now:performance.now(),timerId:C,timerType:\"timeout\"}}),C};return {clearInterval:d,clearTimeout:g,setInterval:y,setTimeout:w}};t.load=n;});});var Lp=M((is,Mp)=>{_();v();m();(function(t,e){typeof is==\"object\"&&typeof Mp<\"u\"?e(is,xp()):typeof define==\"function\"&&define.amd?define([\"exports\",\"worker-timers-broker\"],e):(t=typeof globalThis<\"u\"?globalThis:t||self,e(t.workerTimers={},t.workerTimersBroker));})(is,function(t,e){var r=function(h,d){var g=null;return function(){if(g!==null)return g;var y=new Blob([d],{type:\"application/javascript; charset=utf-8\"}),w=URL.createObjectURL(y);return g=h(w),setTimeout(function(){return URL.revokeObjectURL(w)}),g}},i=`(()=>{var e={472:(e,t,r)=>{var o,i;void 0===(i=\"function\"==typeof(o=function(){\"use strict\";var e=new Map,t=new Map,r=function(t){var r=e.get(t);if(void 0===r)throw new Error('There is no interval scheduled with the given id \"'.concat(t,'\".'));clearTimeout(r),e.delete(t)},o=function(e){var r=t.get(e);if(void 0===r)throw new Error('There is no timeout scheduled with the given id \"'.concat(e,'\".'));clearTimeout(r),t.delete(e)},i=function(e,t){var r,o=performance.now();return{expected:o+(r=e-Math.max(0,o-t)),remainingDelay:r}},n=function e(t,r,o,i){var n=performance.now();n>o?postMessage({id:null,method:\"call\",params:{timerId:r,timerType:i}}):t.set(r,setTimeout(e,o-n,t,r,o,i))},a=function(t,r,o){var a=i(t,o),s=a.expected,d=a.remainingDelay;e.set(r,setTimeout(n,d,e,r,s,\"interval\"))},s=function(e,r,o){var a=i(e,o),s=a.expected,d=a.remainingDelay;t.set(r,setTimeout(n,d,t,r,s,\"timeout\"))};addEventListener(\"message\",(function(e){var t=e.data;try{if(\"clear\"===t.method){var i=t.id,n=t.params,d=n.timerId,c=n.timerType;if(\"interval\"===c)r(d),postMessage({error:null,id:i});else{if(\"timeout\"!==c)throw new Error('The given type \"'.concat(c,'\" is not supported'));o(d),postMessage({error:null,id:i})}}else{if(\"set\"!==t.method)throw new Error('The given method \"'.concat(t.method,'\" is not supported'));var u=t.params,l=u.delay,p=u.now,m=u.timerId,v=u.timerType;if(\"interval\"===v)a(l,m,p);else{if(\"timeout\"!==v)throw new Error('The given type \"'.concat(v,'\" is not supported'));s(l,m,p)}}}catch(e){postMessage({error:{message:e.message},id:t.id,result:null})}}))})?o.call(t,r,t,e):o)||(e.exports=i)}},t={};function r(o){var i=t[o];if(void 0!==i)return i.exports;var n=t[o]={exports:{}};return e[o](n,n.exports,r),n.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var o in t)r.o(t,o)&&!r.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{\"use strict\";r(472)})()})();`,n=r(e.load,i),o=function(h){return n().clearInterval(h)},s=function(h){return n().clearTimeout(h)},a=function(){var h;return (h=n()).setInterval.apply(h,arguments)},l=function(){var h;return (h=n()).setTimeout.apply(h,arguments)};t.clearInterval=o,t.clearTimeout=s,t.setInterval=a,t.setTimeout=l;});});var Dp=M(Ct=>{_();v();m();var jv=Ct&&Ct.__createBinding||(Object.create?function(t,e,r,i){i===void 0&&(i=r);var n=Object.getOwnPropertyDescriptor(e,r);(!n||(\"get\"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,i,n);}:function(t,e,r,i){i===void 0&&(i=r),t[i]=e[r];}),Fv=Ct&&Ct.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,\"default\",{enumerable:!0,value:e});}:function(t,e){t.default=e;}),Wv=Ct&&Ct.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!==\"default\"&&Object.prototype.hasOwnProperty.call(t,r)&&jv(e,t,r);return Fv(e,t),e};Object.defineProperty(Ct,\"__esModule\",{value:!0});var ja=Wv(Oi()),Up=Lp(),Np={set:Up.setInterval,clear:Up.clearInterval},qp={set:(t,e)=>setInterval(t,e),clear:t=>clearInterval(t)},$v=t=>{switch(t){case\"native\":return qp;case\"worker\":return Np;case\"auto\":default:return ja.default&&!ja.isWebWorker&&!ja.isReactNativeBrowser?Np:qp}};Ct.default=$v;});var Wa=M(xi=>{_();v();m();var Hv=xi&&xi.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(xi,\"__esModule\",{value:!0});var Vv=Hv(Dp()),Fa=class{get keepaliveTimeoutTimestamp(){return this._keepaliveTimeoutTimestamp}get intervalEvery(){return this._intervalEvery}get keepalive(){return this._keepalive}constructor(e,r){this.destroyed=!1,this.client=e,this.timer=typeof r==\"object\"&&\"set\"in r&&\"clear\"in r?r:(0, Vv.default)(r),this.setKeepalive(e.options.keepalive);}clear(){this.timerId&&(this.timer.clear(this.timerId),this.timerId=null);}setKeepalive(e){if(e*=1e3,isNaN(e)||e<=0||e>2147483647)throw new Error(`Keepalive value must be an integer between 0 and 2147483647. Provided value is ${e}`);this._keepalive=e,this.reschedule(),this.client.log(`KeepaliveManager: set keepalive to ${e}ms`);}destroy(){this.clear(),this.destroyed=!0;}reschedule(){if(this.destroyed)return;this.clear(),this.counter=0;let e=Math.ceil(this._keepalive*1.5);this._keepaliveTimeoutTimestamp=Date.now()+e,this._intervalEvery=Math.ceil(this._keepalive/2),this.timerId=this.timer.set(()=>{this.destroyed||(this.counter+=1,this.counter===2?this.client.sendPing():this.counter>2&&this.client.onKeepaliveTimeout());},this._intervalEvery);}};xi.default=Fa;});var os=M(Qe=>{_();v();m();var zv=Qe&&Qe.__createBinding||(Object.create?function(t,e,r,i){i===void 0&&(i=r);var n=Object.getOwnPropertyDescriptor(e,r);(!n||(\"get\"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,i,n);}:function(t,e,r,i){i===void 0&&(i=r),t[i]=e[r];}),Kv=Qe&&Qe.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,\"default\",{enumerable:!0,value:e});}:function(t,e){t.default=e;}),Hp=Qe&&Qe.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!==\"default\"&&Object.prototype.hasOwnProperty.call(t,r)&&zv(e,t,r);return Kv(e,t),e},zt=Qe&&Qe.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Qe,\"__esModule\",{value:!0});var Gv=zt(Gu()),$a=zt(Nd()),Qv=zt(Zo()),Yv=jt(),jp=zt(Fd()),Fp=Hp($d()),Jv=zt(ot()),ii=zt(ra()),Xv=zt(Tp()),ns=_r(),Zv=Rp(),eE=zt(Wa()),Wp=Hp(Oi()),Ha=globalThis.setImmediate||((...t)=>{let e=t.shift();(0, ns.nextTick)(()=>{e(...t);});}),$p={keepalive:60,reschedulePings:!0,protocolId:\"MQTT\",protocolVersion:4,reconnectPeriod:1e3,connectTimeout:30*1e3,clean:!0,resubscribe:!0,writeCache:!0,timerVariant:\"auto\"},ss=class t extends Zv.TypedEventEmitter{static defaultId(){return `mqttjs_${Math.random().toString(16).substr(2,8)}`}constructor(e,r){super(),this.options=r||{};for(let i in $p)typeof this.options[i]>\"u\"?this.options[i]=$p[i]:this.options[i]=r[i];this.log=this.options.log||(0, Jv.default)(\"mqttjs:client\"),this.noop=this._noop.bind(this),this.log(\"MqttClient :: version:\",t.VERSION),Wp.isWebWorker?this.log(\"MqttClient :: environment\",\"webworker\"):this.log(\"MqttClient :: environment\",Wp.default?\"browser\":\"node\"),this.log(\"MqttClient :: options.protocol\",r.protocol),this.log(\"MqttClient :: options.protocolVersion\",r.protocolVersion),this.log(\"MqttClient :: options.username\",r.username),this.log(\"MqttClient :: options.keepalive\",r.keepalive),this.log(\"MqttClient :: options.reconnectPeriod\",r.reconnectPeriod),this.log(\"MqttClient :: options.rejectUnauthorized\",r.rejectUnauthorized),this.log(\"MqttClient :: options.properties.topicAliasMaximum\",r.properties?r.properties.topicAliasMaximum:void 0),this.options.clientId=typeof r.clientId==\"string\"?r.clientId:t.defaultId(),this.log(\"MqttClient :: clientId\",this.options.clientId),this.options.customHandleAcks=r.protocolVersion===5&&r.customHandleAcks?r.customHandleAcks:(...i)=>{i[3](null,0);},this.options.writeCache||($a.default.writeToStream.cacheNumbers=!1),this.streamBuilder=e,this.messageIdProvider=typeof this.options.messageIdProvider>\"u\"?new Qv.default:this.options.messageIdProvider,this.outgoingStore=r.outgoingStore||new ii.default,this.incomingStore=r.incomingStore||new ii.default,this.queueQoSZero=r.queueQoSZero===void 0?!0:r.queueQoSZero,this._resubscribeTopics={},this.messageIdToTopic={},this.keepaliveManager=null,this.connected=!1,this.disconnecting=!1,this.reconnecting=!1,this.queue=[],this.connackTimer=null,this.reconnectTimer=null,this._storeProcessing=!1,this._packetIdsDuringStoreProcessing={},this._storeProcessingQueue=[],this.outgoing={},this._firstConnection=!0,r.properties&&r.properties.topicAliasMaximum>0&&(r.properties.topicAliasMaximum>65535?this.log(\"MqttClient :: options.properties.topicAliasMaximum is out of range\"):this.topicAliasRecv=new Gv.default(r.properties.topicAliasMaximum)),this.on(\"connect\",()=>{let{queue:i}=this,n=()=>{let o=i.shift();this.log(\"deliver :: entry %o\",o);let s=null;if(!o){this._resubscribe();return}s=o.packet,this.log(\"deliver :: call _sendPacket for %o\",s);let a=!0;s.messageId&&s.messageId!==0&&(this.messageIdProvider.register(s.messageId)||(a=!1)),a?this._sendPacket(s,l=>{o.cb&&o.cb(l),n();}):(this.log(\"messageId: %d has already used. The message is skipped and removed.\",s.messageId),n());};this.log(\"connect :: sending queued packets\"),n();}),this.on(\"close\",()=>{this.log(\"close :: connected set to `false`\"),this.connected=!1,this.log(\"close :: clearing connackTimer\"),clearTimeout(this.connackTimer),this._destroyKeepaliveManager(),this.topicAliasRecv&&this.topicAliasRecv.clear(),this.log(\"close :: calling _setupReconnect\"),this._setupReconnect();}),this.options.manualConnect||(this.log(\"MqttClient :: setting up stream\"),this.connect());}handleAuth(e,r){r();}handleMessage(e,r){r();}_nextId(){return this.messageIdProvider.allocate()}getLastMessageId(){return this.messageIdProvider.getLastAllocated()}connect(){var e;let r=new Yv.Writable,i=$a.default.parser(this.options),n=null,o=[];this.log(\"connect :: calling method to clear reconnect\"),this._clearReconnect(),this.disconnected&&!this.reconnecting&&(this.incomingStore=this.options.incomingStore||new ii.default,this.outgoingStore=this.options.outgoingStore||new ii.default,this.disconnecting=!1,this.disconnected=!1),this.log(\"connect :: using streamBuilder provided to client to create stream\"),this.stream=this.streamBuilder(this),i.on(\"packet\",h=>{this.log(\"parser :: on packet push to packets array.\"),o.push(h);});let s=()=>{this.log(\"work :: getting next packet in queue\");let h=o.shift();if(h)this.log(\"work :: packet pulled from queue\"),(0, Xv.default)(this,h,a);else {this.log(\"work :: no packets in queue\");let d=n;n=null,this.log(\"work :: done flag is %s\",!!d),d&&d();}},a=()=>{if(o.length)(0, ns.nextTick)(s);else {let h=n;n=null,h();}};r._write=(h,d,g)=>{n=g,this.log(\"writable stream :: parsing buffer\"),i.parse(h),s();};let l=h=>{this.log(\"streamErrorHandler :: error\",h.message),h.code?(this.log(\"streamErrorHandler :: emitting error\"),this.emit(\"error\",h)):this.noop(h);};this.log(\"connect :: pipe stream to writable stream\"),this.stream.pipe(r),this.stream.on(\"error\",l),this.stream.on(\"close\",()=>{this.log(\"(%s)stream :: on close\",this.options.clientId),this._flushVolatile(),this.log(\"stream: emit close to MqttClient\"),this.emit(\"close\");}),this.log(\"connect: sending packet `connect`\");let c={cmd:\"connect\",protocolId:this.options.protocolId,protocolVersion:this.options.protocolVersion,clean:this.options.clean,clientId:this.options.clientId,keepalive:this.options.keepalive,username:this.options.username,password:this.options.password,properties:this.options.properties};if(this.options.will&&(c.will=Object.assign(Object.assign({},this.options.will),{payload:(e=this.options.will)===null||e===void 0?void 0:e.payload})),this.topicAliasRecv&&(c.properties||(c.properties={}),this.topicAliasRecv&&(c.properties.topicAliasMaximum=this.topicAliasRecv.max)),this._writePacket(c),i.on(\"error\",this.emit.bind(this,\"error\")),this.options.properties){if(!this.options.properties.authenticationMethod&&this.options.properties.authenticationData)return this.end(()=>this.emit(\"error\",new Error(\"Packet has no Authentication Method\"))),this;if(this.options.properties.authenticationMethod&&this.options.authPacket&&typeof this.options.authPacket==\"object\"){let h=Object.assign({cmd:\"auth\",reasonCode:0},this.options.authPacket);this._writePacket(h);}}return this.stream.setMaxListeners(1e3),clearTimeout(this.connackTimer),this.connackTimer=setTimeout(()=>{this.log(\"!!connectTimeout hit!! Calling _cleanUp with force `true`\"),this.emit(\"error\",new Error(\"connack timeout\")),this._cleanUp(!0);},this.options.connectTimeout),this}publish(e,r,i,n){this.log(\"publish :: message `%s` to topic `%s`\",r,e);let{options:o}=this;typeof i==\"function\"&&(n=i,i=null),i=i||{},i=Object.assign(Object.assign({},{qos:0,retain:!1,dup:!1}),i);let{qos:a,retain:l,dup:c,properties:h,cbStorePut:d}=i;if(this._checkDisconnecting(n))return this;let g=()=>{let y=0;if((a===1||a===2)&&(y=this._nextId(),y===null))return this.log(\"No messageId left\"),!1;let w={cmd:\"publish\",topic:e,payload:r,qos:a,retain:l,messageId:y,dup:c};switch(o.protocolVersion===5&&(w.properties=h),this.log(\"publish :: qos\",a),a){case 1:case 2:this.outgoing[w.messageId]={volatile:!1,cb:n||this.noop},this.log(\"MqttClient:publish: packet cmd: %s\",w.cmd),this._sendPacket(w,void 0,d);break;default:this.log(\"MqttClient:publish: packet cmd: %s\",w.cmd),this._sendPacket(w,n,d);break}return !0};return (this._storeProcessing||this._storeProcessingQueue.length>0||!g())&&this._storeProcessingQueue.push({invoke:g,cbStorePut:i.cbStorePut,callback:n}),this}publishAsync(e,r,i){return new Promise((n,o)=>{this.publish(e,r,i,(s,a)=>{s?o(s):n(a);});})}subscribe(e,r,i){let n=this.options.protocolVersion;typeof r==\"function\"&&(i=r),i=i||this.noop;let o=!1,s=[];typeof e==\"string\"?(e=[e],s=e):Array.isArray(e)?s=e:typeof e==\"object\"&&(o=e.resubscribe,delete e.resubscribe,s=Object.keys(e));let a=Fp.validateTopics(s);if(a!==null)return Ha(i,new Error(`Invalid topic ${a}`)),this;if(this._checkDisconnecting(i))return this.log(\"subscribe: discconecting true\"),this;let l={qos:0};n===5&&(l.nl=!1,l.rap=!1,l.rh=0),r=Object.assign(Object.assign({},l),r);let c=r.properties,h=[],d=(y,w)=>{if(w=w||r,!Object.prototype.hasOwnProperty.call(this._resubscribeTopics,y)||this._resubscribeTopics[y].qos{this.log(\"subscribe: array topic %s\",y),d(y);}):Object.keys(e).forEach(y=>{this.log(\"subscribe: object topic %s, %o\",y,e[y]),d(y,e[y]);}),!h.length)return i(null,[]),this;let g=()=>{let y=this._nextId();if(y===null)return this.log(\"No messageId left\"),!1;let w={cmd:\"subscribe\",subscriptions:h,messageId:y};if(c&&(w.properties=c),this.options.resubscribe){this.log(\"subscribe :: resubscribe true\");let S=[];h.forEach(E=>{if(this.options.reconnectPeriod>0){let I={qos:E.qos};n===5&&(I.nl=E.nl||!1,I.rap=E.rap||!1,I.rh=E.rh||0,I.properties=E.properties),this._resubscribeTopics[E.topic]=I,S.push(E.topic);}}),this.messageIdToTopic[w.messageId]=S;}return this.outgoing[w.messageId]={volatile:!0,cb(S,E){if(!S){let{granted:I}=E;for(let C=0;C0||!g())&&this._storeProcessingQueue.push({invoke:g,callback:i}),this}subscribeAsync(e,r){return new Promise((i,n)=>{this.subscribe(e,r,(o,s)=>{o?n(o):i(s);});})}unsubscribe(e,r,i){typeof e==\"string\"&&(e=[e]),typeof r==\"function\"&&(i=r),i=i||this.noop;let n=Fp.validateTopics(e);if(n!==null)return Ha(i,new Error(`Invalid topic ${n}`)),this;if(this._checkDisconnecting(i))return this;let o=()=>{let s=this._nextId();if(s===null)return this.log(\"No messageId left\"),!1;let a={cmd:\"unsubscribe\",messageId:s,unsubscriptions:[]};return typeof e==\"string\"?a.unsubscriptions=[e]:Array.isArray(e)&&(a.unsubscriptions=e),this.options.resubscribe&&a.unsubscriptions.forEach(l=>{delete this._resubscribeTopics[l];}),typeof r==\"object\"&&r.properties&&(a.properties=r.properties),this.outgoing[a.messageId]={volatile:!0,cb:i},this.log(\"unsubscribe: call _sendPacket\"),this._sendPacket(a),!0};return (this._storeProcessing||this._storeProcessingQueue.length>0||!o())&&this._storeProcessingQueue.push({invoke:o,callback:i}),this}unsubscribeAsync(e,r){return new Promise((i,n)=>{this.unsubscribe(e,r,(o,s)=>{o?n(o):i(s);});})}end(e,r,i){this.log(\"end :: (%s)\",this.options.clientId),(e==null||typeof e!=\"boolean\")&&(i=i||r,r=e,e=!1),typeof r!=\"object\"&&(i=i||r,r=null),this.log(\"end :: cb? %s\",!!i),(!i||typeof i!=\"function\")&&(i=this.noop);let n=()=>{this.log(\"end :: closeStores: closing incoming and outgoing stores\"),this.disconnected=!0,this.incomingStore.close(s=>{this.outgoingStore.close(a=>{if(this.log(\"end :: closeStores: emitting end\"),this.emit(\"end\"),i){let l=s||a;this.log(\"end :: closeStores: invoking callback with args\"),i(l);}});}),this._deferredReconnect?this._deferredReconnect():(this.options.reconnectPeriod===0||this.options.manualConnect)&&(this.disconnecting=!1);},o=()=>{this.log(\"end :: (%s) :: finish :: calling _cleanUp with force %s\",this.options.clientId,e),this._cleanUp(e,()=>{this.log(\"end :: finish :: calling process.nextTick on closeStores\"),(0, ns.nextTick)(n);},r);};return this.disconnecting?(i(),this):(this._clearReconnect(),this.disconnecting=!0,!e&&Object.keys(this.outgoing).length>0?(this.log(\"end :: (%s) :: calling finish in 10ms once outgoing is empty\",this.options.clientId),this.once(\"outgoingEmpty\",setTimeout.bind(null,o,10))):(this.log(\"end :: (%s) :: immediately calling finish\",this.options.clientId),o()),this)}endAsync(e,r){return new Promise((i,n)=>{this.end(e,r,o=>{o?n(o):i();});})}removeOutgoingMessage(e){if(this.outgoing[e]){let{cb:r}=this.outgoing[e];this._removeOutgoingAndStoreMessage(e,()=>{r(new Error(\"Message removed\"));});}return this}reconnect(e){this.log(\"client reconnect\");let r=()=>{e?(this.options.incomingStore=e.incomingStore,this.options.outgoingStore=e.outgoingStore):(this.options.incomingStore=null,this.options.outgoingStore=null),this.incomingStore=this.options.incomingStore||new ii.default,this.outgoingStore=this.options.outgoingStore||new ii.default,this.disconnecting=!1,this.disconnected=!1,this._deferredReconnect=null,this._reconnect();};return this.disconnecting&&!this.disconnected?this._deferredReconnect=r:r(),this}_flushVolatile(){this.outgoing&&(this.log(\"_flushVolatile :: deleting volatile messages from the queue and setting their callbacks as error function\"),Object.keys(this.outgoing).forEach(e=>{this.outgoing[e].volatile&&typeof this.outgoing[e].cb==\"function\"&&(this.outgoing[e].cb(new Error(\"Connection closed\")),delete this.outgoing[e]);}));}_flush(){this.outgoing&&(this.log(\"_flush: queue exists? %b\",!!this.outgoing),Object.keys(this.outgoing).forEach(e=>{typeof this.outgoing[e].cb==\"function\"&&(this.outgoing[e].cb(new Error(\"Connection closed\")),delete this.outgoing[e]);}));}_removeTopicAliasAndRecoverTopicName(e){let r;e.properties&&(r=e.properties.topicAlias);let i=e.topic.toString();if(this.log(\"_removeTopicAliasAndRecoverTopicName :: alias %d, topic %o\",r,i),i.length===0){if(typeof r>\"u\")return new Error(\"Unregistered Topic Alias\");if(i=this.topicAliasSend.getTopicByAlias(r),typeof i>\"u\")return new Error(\"Unregistered Topic Alias\");e.topic=i;}r&&delete e.properties.topicAlias;}_checkDisconnecting(e){return this.disconnecting&&(e&&e!==this.noop?e(new Error(\"client disconnecting\")):this.emit(\"error\",new Error(\"client disconnecting\"))),this.disconnecting}_reconnect(){this.log(\"_reconnect: emitting reconnect to client\"),this.emit(\"reconnect\"),this.connected?(this.end(()=>{this.connect();}),this.log(\"client already connected. disconnecting first.\")):(this.log(\"_reconnect: calling connect\"),this.connect());}_setupReconnect(){!this.disconnecting&&!this.reconnectTimer&&this.options.reconnectPeriod>0?(this.reconnecting||(this.log(\"_setupReconnect :: emit `offline` state\"),this.emit(\"offline\"),this.log(\"_setupReconnect :: set `reconnecting` to `true`\"),this.reconnecting=!0),this.log(\"_setupReconnect :: setting reconnectTimer for %d ms\",this.options.reconnectPeriod),this.reconnectTimer=setInterval(()=>{this.log(\"reconnectTimer :: reconnect triggered!\"),this._reconnect();},this.options.reconnectPeriod)):this.log(\"_setupReconnect :: doing nothing...\");}_clearReconnect(){this.log(\"_clearReconnect : clearing reconnect timer\"),this.reconnectTimer&&(clearInterval(this.reconnectTimer),this.reconnectTimer=null);}_cleanUp(e,r,i={}){if(r&&(this.log(\"_cleanUp :: done callback provided for on stream close\"),this.stream.on(\"close\",r)),this.log(\"_cleanUp :: forced? %s\",e),e)this.options.reconnectPeriod===0&&this.options.clean&&this._flush(),this.log(\"_cleanUp :: (%s) :: destroying stream\",this.options.clientId),this.stream.destroy();else {let n=Object.assign({cmd:\"disconnect\"},i);this.log(\"_cleanUp :: (%s) :: call _sendPacket with disconnect packet\",this.options.clientId),this._sendPacket(n,()=>{this.log(\"_cleanUp :: (%s) :: destroying stream\",this.options.clientId),Ha(()=>{this.stream.end(()=>{this.log(\"_cleanUp :: (%s) :: stream destroyed\",this.options.clientId);});});});}!this.disconnecting&&!this.reconnecting&&(this.log(\"_cleanUp :: client not disconnecting/reconnecting. Clearing and resetting reconnect.\"),this._clearReconnect(),this._setupReconnect()),this._destroyKeepaliveManager(),r&&!this.connected&&(this.log(\"_cleanUp :: (%s) :: removing stream `done` callback `close` listener\",this.options.clientId),this.stream.removeListener(\"close\",r),r());}_storeAndSend(e,r,i){this.log(\"storeAndSend :: store packet with cmd %s to outgoingStore\",e.cmd);let n=e,o;if(n.cmd===\"publish\"&&(n=(0, jp.default)(e),o=this._removeTopicAliasAndRecoverTopicName(n),o))return r&&r(o);this.outgoingStore.put(n,s=>{if(s)return r&&r(s);i(),this._writePacket(e,r);});}_applyTopicAlias(e){if(this.options.protocolVersion===5&&e.cmd===\"publish\"){let r;e.properties&&(r=e.properties.topicAlias);let i=e.topic.toString();if(this.topicAliasSend)if(r){if(i.length!==0&&(this.log(\"applyTopicAlias :: register topic: %s - alias: %d\",i,r),!this.topicAliasSend.put(i,r)))return this.log(\"applyTopicAlias :: error out of range. topic: %s - alias: %d\",i,r),new Error(\"Sending Topic Alias out of range\")}else i.length!==0&&(this.options.autoAssignTopicAlias?(r=this.topicAliasSend.getAliasByTopic(i),r?(e.topic=\"\",e.properties=Object.assign(Object.assign({},e.properties),{topicAlias:r}),this.log(\"applyTopicAlias :: auto assign(use) topic: %s - alias: %d\",i,r)):(r=this.topicAliasSend.getLruAlias(),this.topicAliasSend.put(i,r),e.properties=Object.assign(Object.assign({},e.properties),{topicAlias:r}),this.log(\"applyTopicAlias :: auto assign topic: %s - alias: %d\",i,r))):this.options.autoUseTopicAlias&&(r=this.topicAliasSend.getAliasByTopic(i),r&&(e.topic=\"\",e.properties=Object.assign(Object.assign({},e.properties),{topicAlias:r}),this.log(\"applyTopicAlias :: auto use topic: %s - alias: %d\",i,r))));else if(r)return this.log(\"applyTopicAlias :: error out of range. topic: %s - alias: %d\",i,r),new Error(\"Sending Topic Alias out of range\")}}_noop(e){this.log(\"noop ::\",e);}_writePacket(e,r){this.log(\"_writePacket :: packet: %O\",e),this.log(\"_writePacket :: emitting `packetsend`\"),this.emit(\"packetsend\",e),this.log(\"_writePacket :: writing to stream\");let i=$a.default.writeToStream(e,this.stream,this.options);this.log(\"_writePacket :: writeToStream result %s\",i),!i&&r&&r!==this.noop?(this.log(\"_writePacket :: handle events on `drain` once through callback.\"),this.stream.once(\"drain\",r)):r&&(this.log(\"_writePacket :: invoking cb\"),r());}_sendPacket(e,r,i,n){this.log(\"_sendPacket :: (%s) :: start\",this.options.clientId),i=i||this.noop,r=r||this.noop;let o=this._applyTopicAlias(e);if(o){r(o);return}if(!this.connected){if(e.cmd===\"auth\"){this._writePacket(e,r);return}this.log(\"_sendPacket :: client not connected. Storing packet offline.\"),this._storePacket(e,r,i);return}if(n){this._writePacket(e,r);return}switch(e.cmd){case\"publish\":break;case\"pubrel\":this._storeAndSend(e,r,i);return;default:this._writePacket(e,r);return}switch(e.qos){case 2:case 1:this._storeAndSend(e,r,i);break;case 0:default:this._writePacket(e,r);break}this.log(\"_sendPacket :: (%s) :: end\",this.options.clientId);}_storePacket(e,r,i){this.log(\"_storePacket :: packet: %o\",e),this.log(\"_storePacket :: cb? %s\",!!r),i=i||this.noop;let n=e;if(n.cmd===\"publish\"){n=(0, jp.default)(e);let s=this._removeTopicAliasAndRecoverTopicName(n);if(s)return r&&r(s)}let o=n.qos||0;o===0&&this.queueQoSZero||n.cmd!==\"publish\"?this.queue.push({packet:n,cb:r}):o>0?(r=this.outgoing[n.messageId]?this.outgoing[n.messageId].cb:null,this.outgoingStore.put(n,s=>{if(s)return r&&r(s);i();})):r&&r(new Error(\"No connection to broker\"));}_setupKeepaliveManager(){this.log(\"_setupKeepaliveManager :: keepalive %d (seconds)\",this.options.keepalive),!this.keepaliveManager&&this.options.keepalive&&(this.keepaliveManager=new eE.default(this,this.options.timerVariant));}_destroyKeepaliveManager(){this.keepaliveManager&&(this.log(\"_destroyKeepaliveManager :: destroying keepalive manager\"),this.keepaliveManager.destroy(),this.keepaliveManager=null);}reschedulePing(e=!1){this.keepaliveManager&&this.options.keepalive&&(e||this.options.reschedulePings)&&this._reschedulePing();}_reschedulePing(){this.log(\"_reschedulePing :: rescheduling ping\"),this.keepaliveManager.reschedule();}sendPing(){this.log(\"_sendPing :: sending pingreq\"),this._sendPacket({cmd:\"pingreq\"});}onKeepaliveTimeout(){this.emit(\"error\",new Error(\"Keepalive timeout\")),this.log(\"onKeepaliveTimeout :: calling _cleanUp with force true\"),this._cleanUp(!0);}_resubscribe(){this.log(\"_resubscribe\");let e=Object.keys(this._resubscribeTopics);if(!this._firstConnection&&(this.options.clean||this.options.protocolVersion>=4&&!this.connackPacket.sessionPresent)&&e.length>0)if(this.options.resubscribe)if(this.options.protocolVersion===5){this.log(\"_resubscribe: protocolVersion 5\");for(let r=0;r{let i=this.outgoingStore.createStream(),n=()=>{i.destroy(),i=null,this._flushStoreProcessingQueue(),o();},o=()=>{this._storeProcessing=!1,this._packetIdsDuringStoreProcessing={};};this.once(\"close\",n),i.on(\"error\",a=>{o(),this._flushStoreProcessingQueue(),this.removeListener(\"close\",n),this.emit(\"error\",a);});let s=()=>{if(!i)return;let a=i.read(1),l;if(!a){i.once(\"readable\",s);return}if(this._storeProcessing=!0,this._packetIdsDuringStoreProcessing[a.messageId]){s();return}!this.disconnecting&&!this.reconnectTimer?(l=this.outgoing[a.messageId]?this.outgoing[a.messageId].cb:null,this.outgoing[a.messageId]={volatile:!1,cb(c,h){l&&l(c,h),s();}},this._packetIdsDuringStoreProcessing[a.messageId]=!0,this.messageIdProvider.register(a.messageId)?this._sendPacket(a,void 0,void 0,!0):this.log(\"messageId: %d has already used.\",a.messageId)):i.destroy&&i.destroy();};i.on(\"end\",()=>{let a=!0;for(let l in this._packetIdsDuringStoreProcessing)if(!this._packetIdsDuringStoreProcessing[l]){a=!1;break}this.removeListener(\"close\",n),a?(o(),this._invokeAllStoreProcessingQueue(),this.emit(\"connect\",e)):r();}),s();};r();}_invokeStoreProcessingQueue(){if(!this._storeProcessing&&this._storeProcessingQueue.length>0){let e=this._storeProcessingQueue[0];if(e&&e.invoke())return this._storeProcessingQueue.shift(),!0}return !1}_invokeAllStoreProcessingQueue(){for(;this._invokeStoreProcessingQueue(););}_flushStoreProcessingQueue(){for(let e of this._storeProcessingQueue)e.cbStorePut&&e.cbStorePut(new Error(\"Connection closed\")),e.callback&&e.callback(new Error(\"Connection closed\"));this._storeProcessingQueue.splice(0);}_removeOutgoingAndStoreMessage(e,r){delete this.outgoing[e],this.outgoingStore.del({messageId:e},(i,n)=>{r(i,n),this.messageIdProvider.deallocate(e),this._invokeStoreProcessingQueue();});}};ss.VERSION=ns.MQTTJS_VERSION;Qe.default=ss;});var Vp=M(za=>{_();v();m();Object.defineProperty(za,\"__esModule\",{value:!0});var tE=Ua(),Va=class{constructor(){this.numberAllocator=new tE.NumberAllocator(1,65535);}allocate(){return this.lastId=this.numberAllocator.alloc(),this.lastId}getLastAllocated(){return this.lastId}register(e){return this.numberAllocator.use(e)}deallocate(e){this.numberAllocator.free(e);}clear(){this.numberAllocator.clear();}};za.default=Va;});function Rr(t){throw new RangeError(sE[t])}function zp(t,e){let r=t.split(\"@\"),i=\"\";r.length>1&&(i=r[0]+\"@\",t=r[1]);let n=function(o,s){let a=[],l=o.length;for(;l--;)a[l]=s(o[l]);return a}((t=t.replace(nE,\".\")).split(\".\"),e).join(\".\");return i+n}function Yp(t){let e=[],r=0,i=t.length;for(;r=55296&&n<=56319&&r{_();v();m();rE=/^xn--/,iE=/[^\\0-\\x7E]/,nE=/[\\x2E\\u3002\\uFF0E\\uFF61]/g,sE={overflow:\"Overflow: input needs wider integers to process\",\"not-basic\":\"Illegal input >= 0x80 (not a basic code point)\",\"invalid-input\":\"Invalid input\"},dt=Math.floor,Ka=String.fromCharCode;Kp=function(t,e){return t+22+75*(t<26)-((e!=0)<<5)},Jp=function(t,e,r){let i=0;for(t=r?dt(t/700):t>>1,t+=dt(t/e);t>455;i+=36)t=dt(t/35);return dt(i+36*t/(t+38))},Gp=function(t){let e=[],r=t.length,i=0,n=128,o=72,s=t.lastIndexOf(\"-\");s<0&&(s=0);for(let l=0;l=128&&Rr(\"not-basic\"),e.push(t.charCodeAt(l));for(let l=s>0?s+1:0;l=r&&Rr(\"invalid-input\");let y=(a=t.charCodeAt(l++))-48<10?a-22:a-65<26?a-65:a-97<26?a-97:36;(y>=36||y>dt((2147483647-i)/d))&&Rr(\"overflow\"),i+=y*d;let w=g<=o?1:g>=o+26?26:g-o;if(ydt(2147483647/S)&&Rr(\"overflow\"),d*=S;}let h=e.length+1;o=Jp(i-c,h,c==0),dt(i/h)>2147483647-n&&Rr(\"overflow\"),n+=dt(i/h),i%=h,e.splice(i++,0,n);}var a;return String.fromCodePoint(...e)},Qp=function(t){let e=[],r=(t=Yp(t)).length,i=128,n=0,o=72;for(let l of t)l<128&&e.push(Ka(l));let s=e.length,a=s;for(s&&e.push(\"-\");a=i&&hdt((2147483647-n)/c)&&Rr(\"overflow\"),n+=(l-i)*c,i=l;for(let h of t)if(h2147483647&&Rr(\"overflow\"),h==i){let d=n;for(let g=36;;g+=36){let y=g<=o?1:g>=o+26?26:g-o;if(dString.fromCodePoint(...t)},decode:Gp,encode:Qp,toASCII:function(t){return zp(t,function(e){return iE.test(e)?\"xn--\"+Qp(e):e})},toUnicode:function(t){return zp(t,function(e){return rE.test(e)?Gp(e.slice(4).toLowerCase()):e})}};Kt.decode;Kt.encode;Kt.toASCII;Kt.toUnicode;Kt.ucs2;Kt.version;});function oE(t,e){return Object.prototype.hasOwnProperty.call(t,e)}var aE,Mi,lE,pt,Zp=_e(()=>{_();v();m();aE=function(t,e,r,i){e=e||\"&\",r=r||\"=\";var n={};if(typeof t!=\"string\"||t.length===0)return n;var o=/\\+/g;t=t.split(e);var s=1e3;i&&typeof i.maxKeys==\"number\"&&(s=i.maxKeys);var a=t.length;s>0&&a>s&&(a=s);for(var l=0;l=0?(c=y.substr(0,w),h=y.substr(w+1)):(c=y,h=\"\"),d=decodeURIComponent(c),g=decodeURIComponent(h),oE(n,d)?Array.isArray(n[d])?n[d].push(g):n[d]=[n[d],g]:n[d]=g;}return n},Mi=function(t){switch(typeof t){case\"string\":return t;case\"boolean\":return t?\"true\":\"false\";case\"number\":return isFinite(t)?t:\"\";default:return \"\"}},lE=function(t,e,r,i){return e=e||\"&\",r=r||\"=\",t===null&&(t=void 0),typeof t==\"object\"?Object.keys(t).map(function(n){var o=encodeURIComponent(Mi(n))+r;return Array.isArray(t[n])?t[n].map(function(s){return o+encodeURIComponent(Mi(s))}).join(e):o+encodeURIComponent(Mi(t[n]))}).join(e):i?encodeURIComponent(Mi(i))+r+encodeURIComponent(Mi(t)):\"\"},pt={};pt.decode=pt.parse=aE,pt.encode=pt.stringify=lE;pt.decode;pt.encode;pt.parse;pt.stringify;});function Ga(){throw new Error(\"setTimeout has not been defined\")}function Qa(){throw new Error(\"clearTimeout has not been defined\")}function rg(t){if(Pt===setTimeout)return setTimeout(t,0);if((Pt===Ga||!Pt)&&setTimeout)return Pt=setTimeout,setTimeout(t,0);try{return Pt(t,0)}catch{try{return Pt.call(null,t,0)}catch{return Pt.call(this||si,t,0)}}}function uE(){ni&&Cr&&(ni=!1,Cr.length?Ot=Cr.concat(Ot):as=-1,Ot.length&&ig());}function ig(){if(!ni){var t=rg(uE);ni=!0;for(var e=Ot.length;e;){for(Cr=Ot,Ot=[];++as{_();v();m();si=typeof globalThis<\"u\"?globalThis:typeof self<\"u\"?self:global,fe=tg={};(function(){try{Pt=typeof setTimeout==\"function\"?setTimeout:Ga;}catch{Pt=Ga;}try{kt=typeof clearTimeout==\"function\"?clearTimeout:Qa;}catch{kt=Qa;}})();Ot=[],ni=!1,as=-1;fe.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r1)for(var I=1;I{_();v();m();Ya={},sg=!1,oi=typeof globalThis<\"u\"?globalThis:typeof self<\"u\"?self:global;re=fE();re.platform=\"browser\";re.addListener;re.argv;re.binding;re.browser;re.chdir;re.cwd;re.emit;re.env;re.listeners;re.nextTick;re.off;re.on;re.once;re.prependListener;re.prependOnceListener;re.removeAllListeners;re.removeListener;re.title;re.umask;re.version;re.versions;});function cE(){if(og)return Xa;og=!0;var t=re;function e(o){if(typeof o!=\"string\")throw new TypeError(\"Path must be a string. Received \"+JSON.stringify(o))}function r(o,s){for(var a=\"\",l=0,c=-1,h=0,d,g=0;g<=o.length;++g){if(g2){var y=a.lastIndexOf(\"/\");if(y!==a.length-1){y===-1?(a=\"\",l=0):(a=a.slice(0,y),l=a.length-1-a.lastIndexOf(\"/\")),c=g,h=0;continue}}else if(a.length===2||a.length===1){a=\"\",l=0,c=g,h=0;continue}}s&&(a.length>0?a+=\"/..\":a=\"..\",l=2);}else a.length>0?a+=\"/\"+o.slice(c+1,g):a=o.slice(c+1,g),l=g-c-1;c=g,h=0;}else d===46&&h!==-1?++h:h=-1;}return a}function i(o,s){var a=s.dir||s.root,l=s.base||(s.name||\"\")+(s.ext||\"\");return a?a===s.root?a+l:a+o+l:l}var n={resolve:function(){for(var s=\"\",a=!1,l,c=arguments.length-1;c>=-1&&!a;c--){var h;c>=0?h=arguments[c]:(l===void 0&&(l=t.cwd()),h=l),e(h),h.length!==0&&(s=h+\"/\"+s,a=h.charCodeAt(0)===47);}return s=r(s,!a),a?s.length>0?\"/\"+s:\"/\":s.length>0?s:\".\"},normalize:function(s){if(e(s),s.length===0)return \".\";var a=s.charCodeAt(0)===47,l=s.charCodeAt(s.length-1)===47;return s=r(s,!a),s.length===0&&!a&&(s=\".\"),s.length>0&&l&&(s+=\"/\"),a?\"/\"+s:s},isAbsolute:function(s){return e(s),s.length>0&&s.charCodeAt(0)===47},join:function(){if(arguments.length===0)return \".\";for(var s,a=0;a0&&(s===void 0?s=l:s+=\"/\"+l);}return s===void 0?\".\":n.normalize(s)},relative:function(s,a){if(e(s),e(a),s===a||(s=n.resolve(s),a=n.resolve(a),s===a))return \"\";for(var l=1;lw){if(a.charCodeAt(d+E)===47)return a.slice(d+E+1);if(E===0)return a.slice(d+E)}else h>w&&(s.charCodeAt(l+E)===47?S=E:E===0&&(S=0));break}var I=s.charCodeAt(l+E),C=a.charCodeAt(d+E);if(I!==C)break;I===47&&(S=E);}var R=\"\";for(E=l+S+1;E<=c;++E)(E===c||s.charCodeAt(E)===47)&&(R.length===0?R+=\"..\":R+=\"/..\");return R.length>0?R+a.slice(d+S):(d+=S,a.charCodeAt(d)===47&&++d,a.slice(d))},_makeLong:function(s){return s},dirname:function(s){if(e(s),s.length===0)return \".\";for(var a=s.charCodeAt(0),l=a===47,c=-1,h=!0,d=s.length-1;d>=1;--d)if(a=s.charCodeAt(d),a===47){if(!h){c=d;break}}else h=!1;return c===-1?l?\"/\":\".\":l&&c===1?\"//\":s.slice(0,c)},basename:function(s,a){if(a!==void 0&&typeof a!=\"string\")throw new TypeError('\"ext\" argument must be a string');e(s);var l=0,c=-1,h=!0,d;if(a!==void 0&&a.length>0&&a.length<=s.length){if(a.length===s.length&&a===s)return \"\";var g=a.length-1,y=-1;for(d=s.length-1;d>=0;--d){var w=s.charCodeAt(d);if(w===47){if(!h){l=d+1;break}}else y===-1&&(h=!1,y=d+1),g>=0&&(w===a.charCodeAt(g)?--g===-1&&(c=d):(g=-1,c=y));}return l===c?c=y:c===-1&&(c=s.length),s.slice(l,c)}else {for(d=s.length-1;d>=0;--d)if(s.charCodeAt(d)===47){if(!h){l=d+1;break}}else c===-1&&(h=!1,c=d+1);return c===-1?\"\":s.slice(l,c)}},extname:function(s){e(s);for(var a=-1,l=0,c=-1,h=!0,d=0,g=s.length-1;g>=0;--g){var y=s.charCodeAt(g);if(y===47){if(!h){l=g+1;break}continue}c===-1&&(h=!1,c=g+1),y===46?a===-1?a=g:d!==1&&(d=1):a!==-1&&(d=-1);}return a===-1||c===-1||d===0||d===1&&a===c-1&&a===l+1?\"\":s.slice(a,c)},format:function(s){if(s===null||typeof s!=\"object\")throw new TypeError('The \"pathObject\" argument must be of type Object. Received type '+typeof s);return i(\"/\",s)},parse:function(s){e(s);var a={root:\"\",dir:\"\",base:\"\",ext:\"\",name:\"\"};if(s.length===0)return a;var l=s.charCodeAt(0),c=l===47,h;c?(a.root=\"/\",h=1):h=0;for(var d=-1,g=0,y=-1,w=!0,S=s.length-1,E=0;S>=h;--S){if(l=s.charCodeAt(S),l===47){if(!w){g=S+1;break}continue}y===-1&&(w=!1,y=S+1),l===46?d===-1?d=S:E!==1&&(E=1):d!==-1&&(E=-1);}return d===-1||y===-1||E===0||E===1&&d===y-1&&d===g+1?y!==-1&&(g===0&&c?a.base=a.name=s.slice(1,y):a.base=a.name=s.slice(g,y)):(g===0&&c?(a.name=s.slice(1,d),a.base=s.slice(1,y)):(a.name=s.slice(g,d),a.base=s.slice(g,y)),a.ext=s.slice(d,y)),g>0?a.dir=s.slice(0,g-1):c&&(a.dir=\"/\"),a},sep:\"/\",delimiter:\":\",win32:null,posix:null};return n.posix=n,Xa=n,Xa}var Xa,og,Za,ag=_e(()=>{_();v();m();Ja();Xa={},og=!1;Za=cE();});var gg={};Jt(gg,{URL:()=>FE,Url:()=>UE,default:()=>Z,fileURLToPath:()=>dg,format:()=>NE,parse:()=>jE,pathToFileURL:()=>pg,resolve:()=>qE,resolveObject:()=>DE});function Fe(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null;}function Li(t,e,r){if(t&>.isObject(t)&&t instanceof Fe)return t;var i=new Fe;return i.parse(t,e,r),i}function _E(){if(cg)return rl;cg=!0;var t=ne;function e(o){if(typeof o!=\"string\")throw new TypeError(\"Path must be a string. Received \"+JSON.stringify(o))}function r(o,s){for(var a=\"\",l=0,c=-1,h=0,d,g=0;g<=o.length;++g){if(g2){var y=a.lastIndexOf(\"/\");if(y!==a.length-1){y===-1?(a=\"\",l=0):(a=a.slice(0,y),l=a.length-1-a.lastIndexOf(\"/\")),c=g,h=0;continue}}else if(a.length===2||a.length===1){a=\"\",l=0,c=g,h=0;continue}}s&&(a.length>0?a+=\"/..\":a=\"..\",l=2);}else a.length>0?a+=\"/\"+o.slice(c+1,g):a=o.slice(c+1,g),l=g-c-1;c=g,h=0;}else d===46&&h!==-1?++h:h=-1;}return a}function i(o,s){var a=s.dir||s.root,l=s.base||(s.name||\"\")+(s.ext||\"\");return a?a===s.root?a+l:a+o+l:l}var n={resolve:function(){for(var s=\"\",a=!1,l,c=arguments.length-1;c>=-1&&!a;c--){var h;c>=0?h=arguments[c]:(l===void 0&&(l=t.cwd()),h=l),e(h),h.length!==0&&(s=h+\"/\"+s,a=h.charCodeAt(0)===47);}return s=r(s,!a),a?s.length>0?\"/\"+s:\"/\":s.length>0?s:\".\"},normalize:function(s){if(e(s),s.length===0)return \".\";var a=s.charCodeAt(0)===47,l=s.charCodeAt(s.length-1)===47;return s=r(s,!a),s.length===0&&!a&&(s=\".\"),s.length>0&&l&&(s+=\"/\"),a?\"/\"+s:s},isAbsolute:function(s){return e(s),s.length>0&&s.charCodeAt(0)===47},join:function(){if(arguments.length===0)return \".\";for(var s,a=0;a0&&(s===void 0?s=l:s+=\"/\"+l);}return s===void 0?\".\":n.normalize(s)},relative:function(s,a){if(e(s),e(a),s===a||(s=n.resolve(s),a=n.resolve(a),s===a))return \"\";for(var l=1;lw){if(a.charCodeAt(d+E)===47)return a.slice(d+E+1);if(E===0)return a.slice(d+E)}else h>w&&(s.charCodeAt(l+E)===47?S=E:E===0&&(S=0));break}var I=s.charCodeAt(l+E),C=a.charCodeAt(d+E);if(I!==C)break;I===47&&(S=E);}var R=\"\";for(E=l+S+1;E<=c;++E)(E===c||s.charCodeAt(E)===47)&&(R.length===0?R+=\"..\":R+=\"/..\");return R.length>0?R+a.slice(d+S):(d+=S,a.charCodeAt(d)===47&&++d,a.slice(d))},_makeLong:function(s){return s},dirname:function(s){if(e(s),s.length===0)return \".\";for(var a=s.charCodeAt(0),l=a===47,c=-1,h=!0,d=s.length-1;d>=1;--d)if(a=s.charCodeAt(d),a===47){if(!h){c=d;break}}else h=!1;return c===-1?l?\"/\":\".\":l&&c===1?\"//\":s.slice(0,c)},basename:function(s,a){if(a!==void 0&&typeof a!=\"string\")throw new TypeError('\"ext\" argument must be a string');e(s);var l=0,c=-1,h=!0,d;if(a!==void 0&&a.length>0&&a.length<=s.length){if(a.length===s.length&&a===s)return \"\";var g=a.length-1,y=-1;for(d=s.length-1;d>=0;--d){var w=s.charCodeAt(d);if(w===47){if(!h){l=d+1;break}}else y===-1&&(h=!1,y=d+1),g>=0&&(w===a.charCodeAt(g)?--g===-1&&(c=d):(g=-1,c=y));}return l===c?c=y:c===-1&&(c=s.length),s.slice(l,c)}else {for(d=s.length-1;d>=0;--d)if(s.charCodeAt(d)===47){if(!h){l=d+1;break}}else c===-1&&(h=!1,c=d+1);return c===-1?\"\":s.slice(l,c)}},extname:function(s){e(s);for(var a=-1,l=0,c=-1,h=!0,d=0,g=s.length-1;g>=0;--g){var y=s.charCodeAt(g);if(y===47){if(!h){l=g+1;break}continue}c===-1&&(h=!1,c=g+1),y===46?a===-1?a=g:d!==1&&(d=1):a!==-1&&(d=-1);}return a===-1||c===-1||d===0||d===1&&a===c-1&&a===l+1?\"\":s.slice(a,c)},format:function(s){if(s===null||typeof s!=\"object\")throw new TypeError('The \"pathObject\" argument must be of type Object. Received type '+typeof s);return i(\"/\",s)},parse:function(s){e(s);var a={root:\"\",dir:\"\",base:\"\",ext:\"\",name:\"\"};if(s.length===0)return a;var l=s.charCodeAt(0),c=l===47,h;c?(a.root=\"/\",h=1):h=0;for(var d=-1,g=0,y=-1,w=!0,S=s.length-1,E=0;S>=h;--S){if(l=s.charCodeAt(S),l===47){if(!w){g=S+1;break}continue}y===-1&&(w=!1,y=S+1),l===46?d===-1?d=S:E!==1&&(E=1):d!==-1&&(E=-1);}return d===-1||y===-1||E===0||E===1&&d===y-1&&d===g+1?y!==-1&&(g===0&&c?a.base=a.name=s.slice(1,y):a.base=a.name=s.slice(g,y)):(g===0&&c?(a.name=s.slice(1,d),a.base=s.slice(1,y)):(a.name=s.slice(g,d),a.base=s.slice(g,y)),a.ext=s.slice(d,y)),g>0?a.dir=s.slice(0,g-1):c&&(a.dir=\"/\"),a},sep:\"/\",delimiter:\":\",win32:null,posix:null};return n.posix=n,rl=n,rl}function kE(t){if(typeof t==\"string\")t=new URL(t);else if(!(t instanceof URL))throw new Deno.errors.InvalidData(\"invalid argument path , must be a string or URL\");if(t.protocol!==\"file:\")throw new Deno.errors.InvalidData(\"invalid url scheme\");return nl?OE(t):xE(t)}function OE(t){let e=t.hostname,r=t.pathname;for(let i=0;iAE||n!==\":\")throw new Deno.errors.InvalidData(\"file url path must be absolute\");return r.slice(1)}}function xE(t){if(t.hostname!==\"\")throw new Deno.errors.InvalidData(\"invalid file url hostname\");let e=t.pathname;for(let r=0;rVE||n!==\":\")throw new Deno.errors.InvalidData(\"file url path must be absolute\");return r.slice(1)}}function ZE(t){if(t.hostname!==\"\")throw new Deno.errors.InvalidData(\"invalid file url hostname\");let e=t.pathname;for(let r=0;r{_();v();m();Xp();Zp();ng();ag();Ja();Z={},hE=Kt,gt={isString:function(t){return typeof t==\"string\"},isObject:function(t){return typeof t==\"object\"&&t!==null},isNull:function(t){return t===null},isNullOrUndefined:function(t){return t==null}};Z.parse=Li,Z.resolve=function(t,e){return Li(t,!1,!0).resolve(e)},Z.resolveObject=function(t,e){return t?Li(t,!1,!0).resolveObject(e):e},Z.format=function(t){return gt.isString(t)&&(t=Li(t)),t instanceof Fe?t.format():Fe.prototype.format.call(t)},Z.Url=Fe;dE=/^([a-z0-9.+-]+:)/i,pE=/:[0-9]*$/,gE=/^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,yE=[\"{\",\"}\",\"|\",\"\\\\\",\"^\",\"`\"].concat([\"<\",\">\",'\"',\"`\",\" \",\"\\r\",`\n`,\"\t\"]),il=[\"'\"].concat(yE),lg=[\"%\",\"/\",\"?\",\";\",\"#\"].concat(il),ug=[\"/\",\"?\",\"#\"],fg=/^[+a-z0-9A-Z_-]{0,63}$/,bE=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,wE={javascript:!0,\"javascript:\":!0},el={javascript:!0,\"javascript:\":!0},ai={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,\"http:\":!0,\"https:\":!0,\"ftp:\":!0,\"gopher:\":!0,\"file:\":!0},tl=pt;Fe.prototype.parse=function(t,e,r){if(!gt.isString(t))throw new TypeError(\"Parameter 'url' must be a string, not \"+typeof t);var i=t.indexOf(\"?\"),n=i!==-1&&i127?U+=\"x\":U+=R[N];if(!U.match(fg)){var K=I.slice(0,w),z=I.slice(w+1),Q=R.match(bE);Q&&(K.push(Q[1]),z.unshift(Q[2])),z.length&&(s=\"/\"+z.join(\".\")+s),this.hostname=K.join(\".\");break}}}this.hostname.length>255?this.hostname=\"\":this.hostname=this.hostname.toLowerCase(),E||(this.hostname=hE.toASCII(this.hostname));var pe=this.port?\":\"+this.port:\"\",Yt=this.hostname||\"\";this.host=Yt+pe,this.href+=this.host,E&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),s[0]!==\"/\"&&(s=\"/\"+s));}if(!wE[c])for(w=0,C=il.length;w0)&&r.host.split(\"@\"))&&(r.auth=Q.shift(),r.host=r.hostname=Q.shift())),r.search=t.search,r.query=t.query,gt.isNull(r.pathname)&>.isNull(r.search)||(r.path=(r.pathname?r.pathname:\"\")+(r.search?r.search:\"\")),r.href=r.format(),r;if(!R.length)return r.pathname=null,r.search?r.path=\"/\"+r.search:r.path=null,r.href=r.format(),r;for(var N=R.slice(-1)[0],W=(r.host||t.host||R.length>1)&&(N===\".\"||N===\"..\")||N===\"\",K=0,z=R.length;z>=0;z--)(N=R[z])===\".\"?R.splice(z,1):N===\"..\"?(R.splice(z,1),K++):K&&(R.splice(z,1),K--);if(!I&&!C)for(;K--;K)R.unshift(\"..\");!I||R[0]===\"\"||R[0]&&R[0].charAt(0)===\"/\"||R.unshift(\"\"),W&&R.join(\"/\").substr(-1)!==\"/\"&&R.push(\"\");var Q,pe=R[0]===\"\"||R[0]&&R[0].charAt(0)===\"/\";return U&&(r.hostname=r.host=pe?\"\":R.length?R.shift():\"\",(Q=!!(r.host&&r.host.indexOf(\"@\")>0)&&r.host.split(\"@\"))&&(r.auth=Q.shift(),r.host=r.hostname=Q.shift())),(I=I||r.host&&R.length)&&!pe&&R.unshift(\"\"),R.length?r.pathname=R.join(\"/\"):(r.pathname=null,r.path=null),gt.isNull(r.pathname)&>.isNull(r.search)||(r.path=(r.pathname?r.pathname:\"\")+(r.search?r.search:\"\")),r.auth=t.auth||r.auth,r.slashes=r.slashes||t.slashes,r.href=r.format(),r},Fe.prototype.parseHost=function(){var t=this.host,e=pE.exec(t);e&&((e=e[0])!==\":\"&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t);};Z.Url;Z.format;Z.resolve;Z.resolveObject;rl={},cg=!1;hg=_E(),mE=typeof Deno<\"u\"?Deno.build.os===\"windows\"?\"win32\":Deno.build.os:void 0;Z.URL=typeof URL<\"u\"?URL:null;Z.pathToFileURL=ME;Z.fileURLToPath=kE;Z.Url;Z.format;Z.resolve;Z.resolveObject;Z.URL;vE=92,EE=47,SE=97,AE=122,nl=mE===\"win32\",IE=/\\//g,TE=/%/g,RE=/\\\\/g,CE=/\\n/g,BE=/\\r/g,PE=/\\t/g;LE=typeof Deno<\"u\"?Deno.build.os===\"windows\"?\"win32\":Deno.build.os:void 0;Z.URL=typeof URL<\"u\"?URL:null;Z.pathToFileURL=pg;Z.fileURLToPath=dg;UE=Z.Url,NE=Z.format,qE=Z.resolve,DE=Z.resolveObject,jE=Z.parse,FE=Z.URL,WE=92,$E=47,HE=97,VE=122,sl=LE===\"win32\",zE=/\\//g,KE=/%/g,GE=/\\\\/g,QE=/\\n/g,YE=/\\r/g,JE=/\\t/g;});var wg=M((m8,bg)=>{_();v();m();bg.exports=function(){throw new Error(\"ws does not work in the browser. Browser clients must use the native WebSocket object\")};});var ls=M(li=>{_();v();m();Object.defineProperty(li,\"__esModule\",{value:!0});li.BufferedDuplex=li.writev=void 0;var eS=jt(),_g=(be(),X(me));function mg(t,e){let r=new Array(t.length);for(let i=0;i{this.destroyed||this.push(n);});}_read(e){this.proxy.read(e);}_write(e,r,i){this.isSocketOpen?this.writeToProxy(e,r,i):this.writeQueue.push({chunk:e,encoding:r,cb:i});}_final(e){this.writeQueue=[],this.proxy.end(e);}_destroy(e,r){this.writeQueue=[],this.proxy.destroy(),r(e);}socketReady(){this.emit(\"connect\"),this.isSocketOpen=!0,this.processWriteQueue();}writeToProxy(e,r,i){this.proxy.write(e,r)===!1?this.proxy.once(\"drain\",i):i();}processWriteQueue(){for(;this.writeQueue.length>0;){let{chunk:e,encoding:r,cb:i}=this.writeQueue.shift();this.writeToProxy(e,r,i);}}};li.BufferedDuplex=ol;});var Ui=M(Qt=>{_();v();m();var ll=Qt&&Qt.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Qt,\"__esModule\",{value:!0});Qt.streamBuilder=Qt.browserStreamBuilder=void 0;var us=(be(),X(me)),vg=ll(wg()),tS=ll(ot()),rS=jt(),iS=ll(Oi()),al=ls(),Gt=(0, tS.default)(\"mqttjs:ws\"),nS=[\"rejectUnauthorized\",\"ca\",\"cert\",\"key\",\"pfx\",\"passphrase\"];function Eg(t,e){let r=`${t.protocol}://${t.hostname}:${t.port}${t.path}`;return typeof t.transformWsUrl==\"function\"&&(r=t.transformWsUrl(r,t,e)),r}function Sg(t){let e=t;return t.port||(t.protocol===\"wss\"?e.port=443:e.port=80),t.path||(e.path=\"/\"),t.wsOptions||(e.wsOptions={}),!iS.default&&!t.forceNativeWebSocket&&t.protocol===\"wss\"&&nS.forEach(r=>{Object.prototype.hasOwnProperty.call(t,r)&&!Object.prototype.hasOwnProperty.call(t.wsOptions,r)&&(e.wsOptions[r]=t[r]);}),e}function sS(t){let e=Sg(t);if(e.hostname||(e.hostname=e.host),!e.hostname){if(typeof document>\"u\")throw new Error(\"Could not determine host. Specify host manually.\");let r=new URL(document.URL);e.hostname=r.hostname,e.port||(e.port=Number(r.port));}return e.objectMode===void 0&&(e.objectMode=!(e.binary===!0||e.binary===void 0)),e}function oS(t,e,r){Gt(\"createWebSocket\"),Gt(`protocol: ${r.protocolId} ${r.protocolVersion}`);let i=r.protocolId===\"MQIsdp\"&&r.protocolVersion===3?\"mqttv3.1\":\"mqtt\";Gt(`creating new Websocket for url: ${e} and protocol: ${i}`);let n;return r.createWebsocket?n=r.createWebsocket(e,[i],r):n=new vg.default(e,[i],r.wsOptions),n}function aS(t,e){let r=e.protocolId===\"MQIsdp\"&&e.protocolVersion===3?\"mqttv3.1\":\"mqtt\",i=Eg(e,t),n;return e.createWebsocket?n=e.createWebsocket(i,[r],e):n=new WebSocket(i,[r]),n.binaryType=\"arraybuffer\",n}var lS=(t,e)=>{Gt(\"streamBuilder\");let r=Sg(e);r.hostname=r.hostname||r.host||\"localhost\";let i=Eg(r,t),n=oS(t,i,r),o=vg.default.createWebSocketStream(n,r.wsOptions);return o.url=i,n.on(\"close\",()=>{o.destroy();}),o};Qt.streamBuilder=lS;var uS=(t,e)=>{Gt(\"browserStreamBuilder\");let r,n=sS(e).browserBufferSize||1024*512,o=e.browserBufferTimeout||1e3,s=!e.objectMode,a=aS(t,e),l=h(e,S,E);e.objectMode||(l._writev=al.writev.bind(l)),l.on(\"close\",()=>{a.close();});let c=typeof a.addEventListener<\"u\";a.readyState===a.OPEN?(r=l,r.socket=a):(r=new al.BufferedDuplex(e,l,a),c?a.addEventListener(\"open\",d):a.onopen=d),c?(a.addEventListener(\"close\",g),a.addEventListener(\"error\",y),a.addEventListener(\"message\",w)):(a.onclose=g,a.onerror=y,a.onmessage=w);function h(I,C,R){let U=new rS.Transform({objectMode:I.objectMode});return U._write=C,U._flush=R,U}function d(){Gt(\"WebSocket onOpen\"),r instanceof al.BufferedDuplex&&r.socketReady();}function g(I){Gt(\"WebSocket onClose\",I),r.end(),r.destroy();}function y(I){Gt(\"WebSocket onError\",I);let C=new Error(\"WebSocket error\");C.event=I,r.destroy(C);}async function w(I){let{data:C}=I;C instanceof ArrayBuffer?C=us.Buffer.from(C):C instanceof Blob?C=us.Buffer.from(await new Response(C).arrayBuffer()):C=us.Buffer.from(C,\"utf8\"),l&&!l.destroyed&&l.push(C);}function S(I,C,R){if(a.bufferedAmount>n){setTimeout(S,o,I,C,R);return}s&&typeof I==\"string\"&&(I=us.Buffer.from(I,\"utf8\"));try{a.send(I);}catch(U){return R(U)}R();}function E(I){a.close(),I();}return r};Qt.browserStreamBuilder=uS;});var ul={};Jt(ul,{Server:()=>Me,Socket:()=>Me,Stream:()=>Me,_createServerHandle:()=>Me,_normalizeArgs:()=>Me,_setSimultaneousAccepts:()=>Me,connect:()=>Me,createConnection:()=>Me,createServer:()=>Me,default:()=>fS,isIP:()=>Me,isIPv4:()=>Me,isIPv6:()=>Me});function Me(){throw new Error(\"Node.js net module is not supported by JSPM core outside of Node.js\")}var fS,fl=_e(()=>{_();v();m();fS={_createServerHandle:Me,_normalizeArgs:Me,_setSimultaneousAccepts:Me,connect:Me,createConnection:Me,createServer:Me,isIP:Me,isIPv4:Me,isIPv6:Me,Server:Me,Socket:Me,Stream:Me};});var cl=M(Ni=>{_();v();m();var Ag=Ni&&Ni.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Ni,\"__esModule\",{value:!0});var cS=Ag((fl(),X(ul))),hS=Ag(ot()),dS=(0, hS.default)(\"mqttjs:tcp\"),pS=(t,e)=>{e.port=e.port||1883,e.hostname=e.hostname||e.host||\"localhost\";let{port:r,path:i}=e,n=e.hostname;return dS(\"port %d and host %s\",r,n),cS.default.createConnection({port:r,host:n,path:i})};Ni.default=pS;});var Ig={};Jt(Ig,{default:()=>gS});var gS,Tg=_e(()=>{_();v();m();gS={};});var dl=M(qi=>{_();v();m();var hl=qi&&qi.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(qi,\"__esModule\",{value:!0});var yS=hl((Tg(),X(Ig))),bS=hl((fl(),X(ul))),wS=hl(ot()),_S=(0, wS.default)(\"mqttjs:tls\"),mS=(t,e)=>{e.port=e.port||8883,e.host=e.hostname||e.host||\"localhost\",bS.default.isIP(e.host)===0&&(e.servername=e.host),e.rejectUnauthorized=e.rejectUnauthorized!==!1,delete e.path,_S(\"port %d host %s rejectUnauthorized %b\",e.port,e.host,e.rejectUnauthorized);let r=yS.default.connect(e);r.on(\"secureConnect\",()=>{e.rejectUnauthorized&&!r.authorized?r.emit(\"error\",new Error(\"TLS not authorized\")):r.removeListener(\"error\",i);});function i(n){e.rejectUnauthorized&&t.emit(\"error\",n),r.end();}return r.on(\"error\",i),r};qi.default=mS;});var yl=M(gl=>{_();v();m();Object.defineProperty(gl,\"__esModule\",{value:!0});var Rg=(be(),X(me)),vS=jt(),ES=ls(),yt,pl,Le;function SS(){let t=new vS.Transform;return t._write=(e,r,i)=>{yt.send({data:e.buffer,success(){i();},fail(n){i(new Error(n));}});},t._flush=e=>{yt.close({success(){e();}});},t}function AS(t){t.hostname||(t.hostname=\"localhost\"),t.path||(t.path=\"/\"),t.wsOptions||(t.wsOptions={});}function IS(t,e){let r=t.protocol===\"wxs\"?\"wss\":\"ws\",i=`${r}://${t.hostname}${t.path}`;return t.port&&t.port!==80&&t.port!==443&&(i=`${r}://${t.hostname}:${t.port}${t.path}`),typeof t.transformWsUrl==\"function\"&&(i=t.transformWsUrl(i,t,e)),i}function TS(){yt.onOpen(()=>{Le.socketReady();}),yt.onMessage(t=>{let{data:e}=t;e instanceof ArrayBuffer?e=Rg.Buffer.from(e):e=Rg.Buffer.from(e,\"utf8\"),pl.push(e);}),yt.onClose(()=>{Le.emit(\"close\"),Le.end(),Le.destroy();}),yt.onError(t=>{let e=new Error(t.errMsg);Le.destroy(e);});}var RS=(t,e)=>{if(e.hostname=e.hostname||e.host,!e.hostname)throw new Error(\"Could not determine host. Specify host manually.\");let r=e.protocolId===\"MQIsdp\"&&e.protocolVersion===3?\"mqttv3.1\":\"mqtt\";AS(e);let i=IS(e,t);yt=wx.connectSocket({url:i,protocols:[r]}),pl=SS(),Le=new ES.BufferedDuplex(e,pl,yt),Le._destroy=(o,s)=>{yt.close({success(){s&&s(o);}});};let n=Le.destroy;return Le.destroy=(o,s)=>(Le.destroy=n,setTimeout(()=>{yt.close({fail(){Le._destroy(o,s);}});},0),Le),TS(),Le};gl.default=RS;});var _l=M(wl=>{_();v();m();Object.defineProperty(wl,\"__esModule\",{value:!0});var bl=(be(),X(me)),CS=jt(),BS=ls(),xt,fs,ui,Cg=!1;function PS(){let t=new CS.Transform;return t._write=(e,r,i)=>{xt.sendSocketMessage({data:e.buffer,success(){i();},fail(){i(new Error);}});},t._flush=e=>{xt.closeSocket({success(){e();}});},t}function kS(t){t.hostname||(t.hostname=\"localhost\"),t.path||(t.path=\"/\"),t.wsOptions||(t.wsOptions={});}function OS(t,e){let r=t.protocol===\"alis\"?\"wss\":\"ws\",i=`${r}://${t.hostname}${t.path}`;return t.port&&t.port!==80&&t.port!==443&&(i=`${r}://${t.hostname}:${t.port}${t.path}`),typeof t.transformWsUrl==\"function\"&&(i=t.transformWsUrl(i,t,e)),i}function xS(){Cg||(Cg=!0,xt.onSocketOpen(()=>{ui.socketReady();}),xt.onSocketMessage(t=>{if(typeof t.data==\"string\"){let e=bl.Buffer.from(t.data,\"base64\");fs.push(e);}else {let e=new FileReader;e.addEventListener(\"load\",()=>{let r=e.result;r instanceof ArrayBuffer?r=bl.Buffer.from(r):r=bl.Buffer.from(r,\"utf8\"),fs.push(r);}),e.readAsArrayBuffer(t.data);}}),xt.onSocketClose(()=>{ui.end(),ui.destroy();}),xt.onSocketError(t=>{ui.destroy(t);}));}var MS=(t,e)=>{if(e.hostname=e.hostname||e.host,!e.hostname)throw new Error(\"Could not determine host. Specify host manually.\");let r=e.protocolId===\"MQIsdp\"&&e.protocolVersion===3?\"mqttv3.1\":\"mqtt\";kS(e);let i=OS(e,t);return xt=e.my,xt.connectSocket({url:i,protocols:r}),fs=PS(),ui=new BS.BufferedDuplex(e,fs,xt),xS(),ui};wl.default=MS;});var kg=M(Br=>{_();v();m();var cs=Br&&Br.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Br,\"__esModule\",{value:!0});Br.connectAsync=void 0;var LS=cs(ot()),US=cs((yg(),X(gg))),NS=cs(os()),qS=cs(Oi());typeof(B===null||B===void 0?void 0:B.nextTick)!=\"function\"&&(B.nextTick=setImmediate);var Bg=(0, LS.default)(\"mqttjs\"),de=null;function DS(t){let e;t.auth&&(e=t.auth.match(/^(.+):(.+)$/),e?(t.username=e[1],t.password=e[2]):t.username=t.auth);}function Pg(t,e){var r,i,n,o;if(Bg(\"connecting to an MQTT broker...\"),typeof t==\"object\"&&!e&&(e=t,t=\"\"),e=e||{},t&&typeof t==\"string\"){let l=US.default.parse(t,!0),c={};if(l.port!=null&&(c.port=Number(l.port)),c.host=l.hostname,c.query=l.query,c.auth=l.auth,c.protocol=l.protocol,c.path=l.path,c.protocol=(r=c.protocol)===null||r===void 0?void 0:r.replace(/:$/,\"\"),e=Object.assign(Object.assign({},c),e),!e.protocol)throw new Error(\"Missing protocol\")}if(e.unixSocket=e.unixSocket||((i=e.protocol)===null||i===void 0?void 0:i.includes(\"+unix\")),e.unixSocket?e.protocol=e.protocol.replace(\"+unix\",\"\"):!(!((n=e.protocol)===null||n===void 0)&&n.startsWith(\"ws\"))&&!(!((o=e.protocol)===null||o===void 0)&&o.startsWith(\"wx\"))&&delete e.path,DS(e),e.query&&typeof e.query.clientId==\"string\"&&(e.clientId=e.query.clientId),e.cert&&e.key)if(e.protocol){if([\"mqtts\",\"wss\",\"wxs\",\"alis\"].indexOf(e.protocol)===-1)switch(e.protocol){case\"mqtt\":e.protocol=\"mqtts\";break;case\"ws\":e.protocol=\"wss\";break;case\"wx\":e.protocol=\"wxs\";break;case\"ali\":e.protocol=\"alis\";break;default:throw new Error(`Unknown protocol for secure connection: \"${e.protocol}\"!`)}}else throw new Error(\"Missing secure protocol key\");if(de||(de={},!qS.default&&!e.forceNativeWebSocket?(de.ws=Ui().streamBuilder,de.wss=Ui().streamBuilder,de.mqtt=cl().default,de.tcp=cl().default,de.ssl=dl().default,de.tls=de.ssl,de.mqtts=dl().default):(de.ws=Ui().browserStreamBuilder,de.wss=Ui().browserStreamBuilder,de.wx=yl().default,de.wxs=yl().default,de.ali=_l().default,de.alis=_l().default)),!de[e.protocol]){let l=[\"mqtts\",\"wss\"].indexOf(e.protocol)!==-1;e.protocol=[\"mqtt\",\"mqtts\",\"ws\",\"wss\",\"wx\",\"wxs\",\"ali\",\"alis\"].filter((c,h)=>l&&h%2===0?!1:typeof de[c]==\"function\")[0];}if(e.clean===!1&&!e.clientId)throw new Error(\"Missing clientId for unclean clients\");e.protocol&&(e.defaultProtocol=e.protocol);function s(l){return e.servers&&((!l._reconnectCount||l._reconnectCount===e.servers.length)&&(l._reconnectCount=0),e.host=e.servers[l._reconnectCount].host,e.port=e.servers[l._reconnectCount].port,e.protocol=e.servers[l._reconnectCount].protocol?e.servers[l._reconnectCount].protocol:e.defaultProtocol,e.hostname=e.host,l._reconnectCount++),Bg(\"calling streambuilder for\",e.protocol),de[e.protocol](l,e)}let a=new NS.default(s,e);return a.on(\"error\",()=>{}),a}function jS(t,e,r=!0){return new Promise((i,n)=>{let o=Pg(t,e),s={connect:l=>{a(),i(o);},end:()=>{a(),i(o);},error:l=>{a(),o.end(),n(l);}};r===!1&&(s.close=()=>{s.error(new Error(\"Couldn't connect to server\"));});function a(){Object.keys(s).forEach(l=>{o.off(l,s[l]);});}Object.keys(s).forEach(l=>{o.on(l,s[l]);});})}Br.connectAsync=jS;Br.default=Pg;});var ml=M(G=>{_();v();m();var Og=G&&G.__createBinding||(Object.create?function(t,e,r,i){i===void 0&&(i=r);var n=Object.getOwnPropertyDescriptor(e,r);(!n||(\"get\"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,i,n);}:function(t,e,r,i){i===void 0&&(i=r),t[i]=e[r];}),FS=G&&G.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,\"default\",{enumerable:!0,value:e});}:function(t,e){t.default=e;}),WS=G&&G.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!==\"default\"&&Object.prototype.hasOwnProperty.call(t,r)&&Og(e,t,r);return FS(e,t),e},xg=G&&G.__exportStar||function(t,e){for(var r in t)r!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,r)&&Og(e,t,r);},Di=G&&G.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(G,\"__esModule\",{value:!0});G.ReasonCodes=G.KeepaliveManager=G.UniqueMessageIdProvider=G.DefaultMessageIdProvider=G.Store=G.MqttClient=G.connectAsync=G.connect=G.Client=void 0;var Mg=Di(os());G.MqttClient=Mg.default;var $S=Di(Zo());G.DefaultMessageIdProvider=$S.default;var HS=Di(Vp());G.UniqueMessageIdProvider=HS.default;var VS=Di(ra());G.Store=VS.default;var Lg=WS(kg());G.connect=Lg.default;Object.defineProperty(G,\"connectAsync\",{enumerable:!0,get:function(){return Lg.connectAsync}});var zS=Di(Wa());G.KeepaliveManager=zS.default;G.Client=Mg.default;xg(os(),G);xg(_r(),G);var KS=Ti();Object.defineProperty(G,\"ReasonCodes\",{enumerable:!0,get:function(){return KS.ReasonCodes}});});var XS=M(We=>{_();v();m();var Ug=We&&We.__createBinding||(Object.create?function(t,e,r,i){i===void 0&&(i=r);var n=Object.getOwnPropertyDescriptor(e,r);(!n||(\"get\"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,i,n);}:function(t,e,r,i){i===void 0&&(i=r),t[i]=e[r];}),GS=We&&We.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,\"default\",{enumerable:!0,value:e});}:function(t,e){t.default=e;}),QS=We&&We.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!==\"default\"&&Object.prototype.hasOwnProperty.call(t,r)&&Ug(e,t,r);return GS(e,t),e},YS=We&&We.__exportStar||function(t,e){for(var r in t)r!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,r)&&Ug(e,t,r);};Object.defineProperty(We,\"__esModule\",{value:!0});var JS=QS(ml());We.default=JS;YS(ml(),We);});var mqtt = XS();\n/*! Bundled license information:\n\n@jspm/core/nodelibs/browser/buffer.js:\n (*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh *)\n*/\n\nclass CloudInteropAPIError extends Error {\n code;\n constructor(message = 'An unexpected error has occurred', code = 'UNEXPECTED_ERROR', cause) {\n super(message, { cause: cause });\n this.name = this.constructor.name;\n this.code = code;\n }\n}\nclass AuthorizationError extends CloudInteropAPIError {\n constructor(message = 'Not authorized', code = 'ERR_UNAUTHORIZED') {\n super(message, code, undefined);\n }\n}\n\n// Error codes as defined in https://docs.emqx.com/en/cloud/latest/connect_to_deployments/mqtt_client_error_codes.html\nconst BadUserNamePasswordError = 134;\n/**\n * Represents a single connection to a Cloud Interop service\n *\n * @export\n * @class CloudInteropAPI\n * @implements {Client}\n */\nclass CloudInteropAPI {\n #cloudInteropSettings;\n #sessionDetails;\n #mqttClient;\n #reconnectRetryLimit = 30;\n #keepAliveIntervalSeconds = 30;\n #logger = (level, message) => {\n console[level](message);\n };\n #reconnectRetries = 0;\n #connectionParams;\n #eventListeners = new Map();\n #attemptingToReconnect = false;\n constructor(cloudInteropSettings) {\n this.#cloudInteropSettings = cloudInteropSettings;\n }\n get sessionDetails() {\n return this.#sessionDetails;\n }\n get mqttClient() {\n return this.#mqttClient;\n }\n /**\n * Connects and creates a session on the Cloud Interop service\n *\n * @param {ConnectParameters} parameters - The parameters to use to connect\n * @return {*} {Promise}\n * @memberof CloudInteropAPI\n * @throws {CloudInteropAPIError} - If an error occurs during connection\n * @throws {AuthorizationError} - If the connection is unauthorized\n */\n async connect(parameters) {\n this.#validateConnectParams(parameters);\n this.#connectionParams = parameters;\n this.#reconnectRetryLimit = parameters.reconnectRetryLimit || this.#reconnectRetryLimit;\n this.#keepAliveIntervalSeconds = parameters.keepAliveIntervalSeconds || this.#keepAliveIntervalSeconds;\n this.#logger = parameters.logger || this.#logger;\n const { sourceId, platformId } = this.#connectionParams;\n try {\n const createSessionResponse = await axios.post(`${this.#cloudInteropSettings.url}/api/sessions`, {\n sourceId,\n platformId,\n }, {\n headers: this.#getRequestHeaders(),\n });\n if (createSessionResponse.status !== 201) {\n throw new CloudInteropAPIError(`Failed to connect to the Cloud Interop service: ${this.#cloudInteropSettings.url}`, 'ERR_CONNECT', createSessionResponse.status);\n }\n this.#sessionDetails = createSessionResponse.data;\n const sessionRootTopic = this.#sessionDetails.sessionRootTopic;\n const clientOptions = {\n keepalive: this.#keepAliveIntervalSeconds,\n clientId: this.#sessionDetails.sessionId,\n clean: true,\n protocolVersion: 5,\n // The \"will\" message will be published on an unexpected disconnection\n // The server can then tidy up. So it needs every for this client to do that, the session details is perfect\n will: {\n topic: 'interop/lastwill',\n payload: Buffer.from(JSON.stringify(this.#sessionDetails)),\n qos: 0,\n retain: false,\n properties: {\n willDelayInterval: 10,\n },\n },\n username: this.#sessionDetails.token,\n };\n this.#mqttClient = await mqtt.connectAsync(this.#sessionDetails.url, clientOptions);\n this.#logger('log', `Cloud Interop successfully connected to ${this.#cloudInteropSettings.url}`);\n this.#mqttClient.on('error', async (error) => {\n // We will receive errors for each failed reconnection attempt\n // We don't won't to disconnect on these else we will never reconnect\n if (!this.#attemptingToReconnect) {\n await this.#disconnect(false);\n }\n if (error instanceof mqtt.ErrorWithReasonCode) {\n switch (error.code) {\n case BadUserNamePasswordError: {\n await this.#disconnect(false);\n this.#logger('warn', `Session expired`);\n this.#emitEvent('session-expired');\n return;\n }\n default: {\n this.#logger('error', `Unknown Infrastructure Error Code ${error.code} : ${error.message}${this.#attemptingToReconnect ? ' during reconnection attempt' : ''}`);\n // As we are in the middle of a reconnect, lets not emit an error to cut down on the event noise\n if (!this.#attemptingToReconnect) {\n this.#emitEvent('error', new CloudInteropAPIError(`Unknown Infrastructure Error Code ${error.code} : ${error.message}`, 'ERR_INFRASTRUCTURE', error));\n break;\n }\n }\n }\n }\n else {\n this.#logger('error', `Unknown Error${this.#attemptingToReconnect ? ' during reconnection attempt' : ''}: ${error}`);\n // As we are in the middle of a reconnect, lets not emit an error to cut down on the event noise\n if (!this.#attemptingToReconnect) {\n this.#emitEvent('error', new CloudInteropAPIError(`Unknown Error`, 'ERR_UNKNOWN', error));\n }\n }\n });\n this.#mqttClient.on('reconnect', () => {\n this.#attemptingToReconnect = true;\n this.#reconnectRetries += 1;\n this.#logger('debug', `Cloud Interop attempting reconnection - ${this.#reconnectRetries}...`);\n if (this.#reconnectRetries === this.#reconnectRetryLimit) {\n this.#logger('warn', `Cloud Interop reached max reconnection attempts - ${this.#reconnectRetryLimit}...`);\n this.#disconnect(true);\n }\n this.#emitEvent('reconnecting', this.#reconnectRetries);\n });\n // Does not fire on initial connection, only successful reconnection attempts\n this.#mqttClient.on('connect', () => {\n this.#logger('debug', `Cloud Interop successfully reconnected after ${this.#reconnectRetries} attempts`);\n this.#reconnectRetries = 0;\n this.#attemptingToReconnect = false;\n this.#emitEvent('reconnected');\n });\n this.#mqttClient.on('message', (topic, message) => {\n if (!this.#sessionDetails) {\n this.#logger('warn', 'Received message when session not connected');\n return;\n }\n this.#handleCommand(topic, message, this.#sessionDetails);\n });\n // Subscribe to all context groups\n this.#mqttClient.subscribe(`${sessionRootTopic}/context-groups/#`);\n // Listen out for global commands\n this.#mqttClient.subscribe(`${sessionRootTopic}/commands`);\n }\n catch (error) {\n if (axios.isAxiosError(error)) {\n if (error.response?.status === 401 || error.response?.status === 403) {\n throw new AuthorizationError();\n }\n throw new CloudInteropAPIError();\n }\n throw error;\n }\n }\n /**\n * Disconnects from the Cloud Interop service\n *\n * @return {*} {Promise}\n * @memberof CloudInteropAPI\n * @throws {CloudInteropAPIError} - If an error occurs during disconnection\n */\n async disconnect() {\n await this.#disconnect(true);\n }\n /**\n * Publishes a new context for the given context group to the other connected sessions\n *\n * @param {string} contextGroup - The context group to publish to\n * @param {object} context - The context to publish\n * @return {*} {Promise}\n * @memberof CloudInteropAPI\n */\n async setContext(contextGroup, context) {\n if (!this.#sessionDetails || !this.#connectionParams) {\n throw new Error('Session not connected');\n }\n const payload = {\n context,\n timestamp: Date.now(),\n };\n await axios.post(`${this.#cloudInteropSettings.url}/api/context-groups/${this.#sessionDetails.sessionId}/${contextGroup}`, payload, {\n headers: this.#getRequestHeaders(),\n });\n }\n addEventListener(type, callback) {\n const listeners = this.#eventListeners.get(type) || [];\n listeners.push(callback);\n this.#eventListeners.set(type, listeners);\n }\n removeEventListener(type, callback) {\n const listeners = this.#eventListeners.get(type) || [];\n const index = listeners.indexOf(callback);\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n this.#eventListeners.set(type, listeners);\n }\n async #disconnect(fireDisconnectedEvent) {\n if (!this.#sessionDetails) {\n return;\n }\n try {\n const disconnectResponse = await axios.delete(`${this.#cloudInteropSettings.url}/api/sessions/${this.#sessionDetails.sessionId}`, {\n headers: this.#getRequestHeaders(),\n });\n if (disconnectResponse.status !== 200) {\n throw new CloudInteropAPIError('Error during session tear down - unexpected status', 'ERR_DISCONNECT', disconnectResponse.status);\n }\n }\n catch {\n throw new CloudInteropAPIError('Error during disconnection', 'ERR_DISCONNECT');\n }\n finally {\n this.#mqttClient?.removeAllListeners();\n await this.#mqttClient?.endAsync(true);\n this.#sessionDetails = undefined;\n this.#mqttClient = undefined;\n this.#reconnectRetries = 0;\n this.#attemptingToReconnect = false;\n if (fireDisconnectedEvent) {\n this.#emitEvent('disconnected');\n }\n }\n }\n #handleCommand(topic, message, sessionDetails) {\n if (message.length === 0 || !sessionDetails) {\n // Ignore clean up messages\n return;\n }\n const messageEnvelope = JSON.parse(message.toString());\n if (topic.startsWith(`${sessionDetails.sessionRootTopic}/context-groups/`)) {\n if (messageEnvelope.source.sessionId === sessionDetails.sessionId) {\n return;\n }\n const { channelName: contextGroup, payload: context, source, history } = messageEnvelope;\n this.#emitEvent('context', { contextGroup, context, source, history: { ...history, clientReceived: Date.now() } });\n }\n }\n #emitEvent(type, ...args) {\n const listeners = this.#eventListeners.get(type) || [];\n listeners.forEach((listener) => listener(...args));\n }\n #validateConnectParams = (parameters) => {\n if (!parameters) {\n throw new Error('Connect parameters must be provided');\n }\n if (parameters.authenticationType === 'jwt' &&\n (!parameters.jwtAuthenticationParameters?.jwtRequestCallback || !parameters.jwtAuthenticationParameters?.authenticationId)) {\n throw new Error('jwtAuthenticationParameters must be provided when using jwt authentication');\n }\n if (parameters.authenticationType === 'basic' &&\n (!parameters.basicAuthenticationParameters?.username || !parameters.basicAuthenticationParameters?.password)) {\n throw new Error('basicAuthenticationParameters must be provided when using basic authentication');\n }\n };\n #getRequestHeaders = () => {\n if (!this.#connectionParams) {\n throw new Error('Connect parameters must be provided');\n }\n const headers = new AxiosHeaders();\n headers['Content-Type'] = 'application/json';\n if (this.#connectionParams.authenticationType === 'jwt' && this.#connectionParams.jwtAuthenticationParameters) {\n const tokenResult = this.#connectionParams.jwtAuthenticationParameters.jwtRequestCallback();\n if (!tokenResult) {\n throw new Error('jwtRequestCallback must return a token');\n }\n headers['x-of-auth-id'] = this.#connectionParams.jwtAuthenticationParameters.authenticationId;\n headers['Authorization'] =\n typeof tokenResult === 'string' ? `Bearer ${tokenResult}` : `Bearer ${Buffer.from(JSON.stringify(tokenResult)).toString('base64')}`;\n }\n if (this.#connectionParams.authenticationType === 'basic' && this.#connectionParams.basicAuthenticationParameters) {\n const { username, password } = this.#connectionParams.basicAuthenticationParameters;\n headers['Authorization'] = `Basic ${Buffer.from(`${username}:${password}`).toString('base64')}`;\n }\n return headers;\n };\n}\n\n/**\n * Enhances InteropBroker with Cloud Interop functionality\n * @param {CloudInteropOverrideParams} config Configuration to connect to the Cloud Interop service\n */\nasync function cloudInteropOverride(config) {\n const { url, ...settings } = config;\n const client = new CloudInteropAPI({ url });\n try {\n await client.connect(settings);\n }\n catch (err) {\n // eslint-disable-next-line no-console\n console.warn(`[CloudInteropOverride] Failed to connect to Cloud Interop Service. Call interopBroker.cloudReconnect() to attempt reconnection`, err);\n }\n return (Base) => {\n return class CloudInteropOverride extends Base {\n contextListener;\n setContextFilter = (context) => true;\n constructor() {\n super();\n this.contextListener = (event) => {\n const { contextGroup, context, source } = event;\n if (this.getContextGroups()\n .map(({ id }) => id)\n .includes(contextGroup) &&\n client.sessionDetails?.sessionId !== source.sessionId) {\n super.setContextForGroup({ context: context }, contextGroup);\n }\n };\n client.addEventListener('context', this.contextListener);\n }\n async setContextForGroup({ context }, contextGroupId) {\n if (this.cloudConnectionState === 'connected' && this.setContextFilter(context)) {\n client.setContext(contextGroupId, context);\n }\n super.setContextForGroup({ context }, contextGroupId);\n }\n /**\n * Attempts reconnection to the Cloud Interop service\n * @param {ConnectParameters} settings Parameters for connecting to the Interop Service\n * @return {*} {Promise}\n * @throws {CloudInteropAPIError}\n * @throws {AuthorizationError}\n * @memberof CloudInteropOverride\n */\n async cloudReconnect(settings) {\n try {\n if (this.cloudConnectionState === 'connected') {\n await client.disconnect();\n }\n await client.connect(settings || config);\n }\n catch (err) {\n console.warn(`[CloudInteropOverride] Failed reconnection to Cloud Interop Service.`, err);\n }\n }\n /**\n * Sets the listener for context events coming from the Cloud Interop service\n * @param listener Context event listener\n * @return {*} {void}\n * @memberof CloudInteropOverride\n */\n setCloudContextListener(listener) {\n client.removeEventListener('context', this.contextListener);\n this.contextListener = listener;\n client.addEventListener('context', this.contextListener);\n }\n /**\n * Sets a filter that is applied to local context before it is forwarded to the Cloud Interop service\n * @param filter\n * @return {*} {void}\n * @memberof CloudInteropOverride\n */\n setCloudSetContextFilter(filter) {\n this.setContextFilter = filter;\n }\n get cloudConnectionState() {\n if (client.mqttClient?.connected) {\n return 'connected';\n }\n if (client.mqttClient?.reconnecting) {\n return 'reconnecting';\n }\n return 'disconnected';\n }\n };\n };\n}\n\nexport { cloudInteropOverride };\n","/**\n * Test if a value is a undefined or null.\n * @param value The value to test.\n * @returns True if the value is null or undefined.\n */\nexport function isEmpty(value: unknown): value is null | undefined {\n\t// eslint-disable-next-line no-restricted-syntax\n\treturn value === undefined || value === null;\n}\n\n/**\n * Test if a value is an object.\n * @param value The value to test.\n * @returns True if the value is an object.\n */\nexport function isObject(value: unknown): value is object {\n\t// eslint-disable-next-line no-restricted-syntax\n\treturn value !== undefined && value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\n/**\n * Test if a value is a string.\n * @param value The value to test.\n * @returns True if the value is a string.\n */\nexport function isString(value: unknown): value is string {\n\t// eslint-disable-next-line no-restricted-syntax\n\treturn value !== undefined && value !== null && typeof value === \"string\";\n}\n\n/**\n * Test if a value is a string that is not empty.\n * @param value The value to test.\n * @returns True if the value is a string that is not empty.\n */\nexport function isStringValue(value: unknown): value is string {\n\treturn isString(value) && value.trim().length > 0;\n}\n\n/**\n * Test if a value is a number.\n * @param value The value to test.\n * @returns True if the value is a number.\n */\nexport function isNumber(value: unknown): value is number {\n\t// eslint-disable-next-line no-restricted-syntax\n\treturn value !== undefined && value !== null && typeof value === \"number\";\n}\n\n/**\n * Test if a value is a number with a real value i.e. not NaN or Infinite.\n * @param value The value to test.\n * @returns True if the value is a number.\n */\nexport function isNumberValue(value: unknown): value is number {\n\treturn isNumber(value) && !Number.isNaN(value) && Number.isFinite(value);\n}\n\n/**\n * Test if a value is a boolean.\n * @param value The value to test.\n * @returns True if the value is a boolean.\n */\nexport function isBoolean(value: unknown): value is boolean {\n\t// eslint-disable-next-line no-restricted-syntax\n\treturn value !== undefined && value !== null && typeof value === \"boolean\";\n}\n\n/**\n * Test if a value is an integer.\n * @param value The value to test.\n * @returns True if the value is an integer.\n */\nexport function isInteger(value: unknown): value is number {\n\treturn isNumber(value) && Number.isInteger(value);\n}\n\n/**\n * Deep clone an object.\n * @param obj The object to clone.\n * @returns The clone of the object.\n */\nexport function objectClone(obj: T): T {\n\t// eslint-disable-next-line no-restricted-syntax\n\treturn obj === undefined ? undefined : JSON.parse(JSON.stringify(obj));\n}\n\n/**\n * Do a deep comparison of the objects.\n * @param obj1 The first object to compare.\n * @param obj2 The second object to compare.\n * @param matchPropertyOrder If true the properties must be in the same order.\n * @returns True if the objects are the same.\n */\nexport function deepEqual(obj1: unknown, obj2: unknown, matchPropertyOrder: boolean = true): boolean {\n\tif (isObject(obj1) && isObject(obj2)) {\n\t\tconst objKeys1 = Object.keys(obj1);\n\t\tconst objKeys2 = Object.keys(obj2);\n\n\t\tif (objKeys1.length !== objKeys2.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (matchPropertyOrder && JSON.stringify(objKeys1) !== JSON.stringify(objKeys2)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tfor (const key of objKeys1) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\tconst value1 = (obj1 as any)[key];\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\tconst value2 = (obj2 as any)[key];\n\n\t\t\tif (!deepEqual(value1, value2, matchPropertyOrder)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t} else if (Array.isArray(obj1) && Array.isArray(obj2)) {\n\t\tif (obj1.length !== obj2.length) {\n\t\t\treturn false;\n\t\t}\n\t\tfor (let i = 0; i < obj1.length; i++) {\n\t\t\tif (!deepEqual(obj1[i], obj2[i], matchPropertyOrder)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn JSON.stringify(obj1) === JSON.stringify(obj2);\n}\n\n/**\n * Deep merge two objects.\n * @param target The object to be merged into.\n * @param sources The objects to merge into the target.\n * @returns The merged object.\n */\nexport function deepMerge(target: T, ...sources: T[]): T {\n\tif (!Array.isArray(sources) || sources.length === 0) {\n\t\treturn target;\n\t}\n\n\tconst targetAsMap = target as { [id: string]: unknown };\n\tconst source = sources.shift();\n\n\tlet keys;\n\tif (isObject(targetAsMap) && isObject(source)) {\n\t\tkeys = Object.keys(source);\n\t} else if (Array.isArray(source)) {\n\t\tif (!Array.isArray(target)) {\n\t\t\treturn source;\n\t\t}\n\t\tkeys = Object.keys(source).map((k) => Number.parseInt(k, 10));\n\t}\n\n\tif (keys) {\n\t\tconst sourceAsMap = source as { [id: string]: unknown };\n\t\tfor (const key of keys) {\n\t\t\tconst value = sourceAsMap[key];\n\t\t\tif (isObject(value)) {\n\t\t\t\tif (isEmpty(targetAsMap[key])) {\n\t\t\t\t\ttargetAsMap[key] = {};\n\t\t\t\t}\n\t\t\t\tdeepMerge(targetAsMap[key], value);\n\t\t\t} else if (Array.isArray(value)) {\n\t\t\t\tif (isEmpty(targetAsMap[key])) {\n\t\t\t\t\ttargetAsMap[key] = [];\n\t\t\t\t}\n\t\t\t\tdeepMerge(targetAsMap[key], value);\n\t\t\t} else {\n\t\t\t\ttargetAsMap[key] = value;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn deepMerge(target, ...sources);\n}\n\n/**\n * Polyfills randomUUID if running in a non-secure context.\n * @returns The random UUID.\n */\nexport function randomUUID(): string {\n\tif (\"randomUUID\" in globalThis.crypto) {\n\t\t// eslint-disable-next-line no-restricted-syntax\n\t\treturn globalThis.crypto.randomUUID();\n\t}\n\t// Polyfill the window.crypto.randomUUID if we are running in a non secure context that doesn't have it\n\t// we are still using window.crypto.getRandomValues which is always available\n\t// https://stackoverflow.com/a/2117523/2800218\n\t/**\n\t * Get random hex value.\n\t * @param c The number to base the random value on.\n\t * @returns The random value.\n\t */\n\tfunction getRandomHex(c: string): string {\n\t\t// eslint-disable-next-line no-bitwise\n\t\tconst rnd = globalThis.crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (Number(c) / 4));\n\t\treturn (\n\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t(Number(c) ^ rnd).toString(16)\n\t\t);\n\t}\n\treturn \"10000000-1000-4000-8000-100000000000\".replace(/[018]/g, getRandomHex);\n}\n\n/**\n * Format an error to a readable string.\n * @param err The error to format.\n * @returns The formatted error.\n */\nexport function formatError(err: unknown): string {\n\tif (isEmpty(err)) {\n\t\treturn \"\";\n\t} else if (err instanceof Error) {\n\t\treturn err.message;\n\t} else if (isStringValue(err)) {\n\t\treturn err;\n\t} else if (isObject(err) && \"message\" in err && isString(err.message)) {\n\t\treturn err.message;\n\t}\n\treturn JSON.stringify(err);\n}\n\n/**\n * A basic string sanitize function that removes angle brackets <> from a string.\n * @param content the content to sanitize\n * @returns a string without angle brackets <>\n */\nexport function sanitizeString(content: unknown): string {\n\tif (isStringValue(content)) {\n\t\treturn content\n\t\t\t.replace(/<[^>]*>?/gm, \"\")\n\t\t\t.replace(/>/g, \">\")\n\t\t\t.replace(/</g, \"<\")\n\t\t\t.replace(/&/g, \"&\")\n\t\t\t.replace(/ /g, \" \")\n\t\t\t.replace(/\\n\\s*\\n/g, \"\\n\");\n\t}\n\treturn \"\";\n}\n\n/**\n * Get the command line arguments from a command line string.\n * Examples of command line strings: arg1 key1=value1 key2=\"value with spaces\" key3='value3' key4='value with more spaces'`.\n * @param commandLine The command line string.\n * @returns The command line arguments or an empty array if none\n */\nexport function getCommandLineArgs(commandLine: string): string[] {\n\tif (!isStringValue(commandLine)) {\n\t\treturn [];\n\t}\n\tconst matches = commandLine.match(/(\\w+=)?(\"[^\"]*\"|'[^']*'|[^ ]+)/g);\n\tif (isEmpty(matches)) {\n\t\treturn [];\n\t}\n\treturn matches;\n}\n","import type { ModuleImplementation, ModuleTypes } from \"workspace-platform-starter/shapes/module-shapes\";\nimport { OpenFinCloudInterop } from \"./interop-override\";\n\n/**\n * Define the entry points for the module.\n */\nexport const entryPoints: { [type in ModuleTypes]?: ModuleImplementation } = {\n\tinteropOverride: new OpenFinCloudInterop()\n};\n","// eslint-disable-next-line max-classes-per-file\nimport { cloudInteropOverride } from \"@openfin/cloud-interop\";\nimport type OpenFin from \"@openfin/core\";\nimport type {\n\tPlatformInteropOverride,\n\tPlatformInteropOverrideOptions,\n\tPlatformInteropBrokerHelpers\n} from \"workspace-platform-starter/shapes/interopbroker-shapes\";\nimport type { Logger, LoggerCreator } from \"workspace-platform-starter/shapes/logger-shapes\";\nimport type { ModuleDefinition } from \"workspace-platform-starter/shapes/module-shapes\";\nimport { isStringValue } from \"workspace-platform-starter/utils\";\nimport type { OpenFinCloudInteropOptions } from \"./shapes\";\n\n/**\n * Implementation for the openfin cloud interop interop override.\n */\nexport class OpenFinCloudInterop implements PlatformInteropOverride {\n\t/**\n\t * The module definition including settings.\n\t * @internal\n\t */\n\tprivate _definition: ModuleDefinition | undefined;\n\n\t/**\n\t * The logger for displaying information from the module.\n\t * @internal\n\t */\n\tprivate _logger?: Logger;\n\n\t/**\n\t * Helper methods for the module.\n\t * @internal\n\t */\n\tprivate _helpers: PlatformInteropBrokerHelpers | undefined;\n\n\t/**\n\t * Initialize the module.\n\t * @param definition The definition of the module from configuration include custom options.\n\t * @param loggerCreator For logging entries.\n\t * @param helpers Helper methods for the module to interact with the application core.\n\t * @returns Nothing.\n\t */\n\tpublic async initialize(\n\t\tdefinition: ModuleDefinition,\n\t\tloggerCreator: LoggerCreator,\n\t\thelpers: PlatformInteropBrokerHelpers\n\t): Promise {\n\t\tthis._definition = definition;\n\t\tconst loggerName = definition.data?.loggerName ?? \"OpenfinCloudInterop\";\n\t\tthis._logger = loggerCreator(loggerName);\n\t\tthis._helpers = helpers;\n\n\t\tthis._logger.info(\"Initializing\");\n\t}\n\n\t/**\n\t * Close down any resources being used by the module.\n\t * @returns Nothing.\n\t */\n\tpublic async closedown(): Promise {\n\t\tthis._logger?.info(\"Closedown\");\n\t}\n\n\t/**\n\t * Get the override constructor for the interop broker (useful if you wish this implementation to be layered with other implementations and passed to the platform's initialization object as part of an array).\n\t * @param options The options for the interop broker defined as part of the platform.\n\t * @returns The override constructor to be used in an array.\n\t */\n\tpublic async getConstructorOverride(\n\t\toptions: PlatformInteropOverrideOptions\n\t): Promise> {\n\t\tif (!isStringValue(this._definition?.data?.platformId) || !isStringValue(this._definition?.data?.url)) {\n\t\t\tconst errorMessage = `The data setting for the interopOverride module ${this._definition?.id} is missing one of the following settings: platformId, url.`;\n\t\t\tthis._logger?.error(errorMessage);\n\t\t\tthrow new Error(errorMessage);\n\t\t}\n\t\tconst cloudInteropConfig = this._definition.data;\n\n\t\t// validate basic authentication parameters if specified\n\t\tif (\n\t\t\tcloudInteropConfig.authenticationType === \"basic\" &&\n\t\t\t(!isStringValue(cloudInteropConfig.basicAuthenticationParameters?.username) ||\n\t\t\t\t!isStringValue(cloudInteropConfig.basicAuthenticationParameters?.password))\n\t\t) {\n\t\t\tconst errorMessage = `The data setting for the interopOverride module ${this._definition?.id} is missing one of the following settings: username, password as ${cloudInteropConfig.authenticationType} authentication has been specified.`;\n\t\t\tthis._logger?.error(errorMessage);\n\t\t\tthrow new Error(errorMessage);\n\t\t}\n\n\t\t// validate jwt authentication parameters if specified\n\t\tif (cloudInteropConfig.authenticationType === \"jwt\") {\n\t\t\tif (!isStringValue(cloudInteropConfig.jwtAuthenticationParameters?.authenticationId)) {\n\t\t\t\tconst errorMessage = `The data setting for the interopOverride module ${this._definition?.id} specified ${cloudInteropConfig.authenticationType} authentication and we need jwtAuthenticationParameters with a Here provided authenticated Id.`;\n\t\t\t\tthis._logger?.error(errorMessage);\n\t\t\t\tthrow new Error(errorMessage);\n\t\t\t}\n\t\t\tconst jwtEndpointId = \"cloud-jwt-callback\";\n\t\t\t// if we have an id we need to assign a callback that will return the jwt token to the cloud interop code\n\t\t\t// as this is a module this code can be edited directly but for a configuration based approach we will see if an endpoint called cloud-jwt-callback is available\n\t\t\tif (!this._helpers?.getEndpointClient) {\n\t\t\t\t// throw an error. This module should have permission to get the endpoint client\n\t\t\t\tconst errorMessage = `The data setting for the interopOverride module ${this._definition?.id} specified ${cloudInteropConfig.authenticationType} authentication and we need to see if logic exposed as an endpoint ${jwtEndpointId} is available. The helper function getEndpointClient is unavailable.`;\n\t\t\t\tthis._logger?.error(errorMessage);\n\t\t\t\tthrow new Error(errorMessage);\n\t\t\t} else {\n\t\t\t\tconst endpointClient = await this._helpers.getEndpointClient();\n\t\t\t\tif (!endpointClient) {\n\t\t\t\t\t// throw an error. This module should have permission to get the endpoint client\n\t\t\t\t\tconst errorMessage = `The data setting for the interopOverride module ${this._definition?.id} specified ${cloudInteropConfig.authenticationType} authentication and we need to see if logic exposed as an endpoint ${jwtEndpointId} is available. The getEndpointClient helper didn't return a client.`;\n\t\t\t\t\tthis._logger?.error(errorMessage);\n\t\t\t\t\tthrow new Error(errorMessage);\n\t\t\t\t}\n\t\t\t\tif (!endpointClient.hasEndpoint(jwtEndpointId)) {\n\t\t\t\t\t// throw an error. An endpoint should exist to support this behavior\n\t\t\t\t\tconst errorMessage = `The data setting for the interopOverride module ${this._definition?.id} specified ${cloudInteropConfig.authenticationType} authentication. It requires an endpoint called ${jwtEndpointId} and this endpoint is not available.`;\n\t\t\t\t\tthis._logger?.error(errorMessage);\n\t\t\t\t\tthrow new Error(errorMessage);\n\t\t\t\t}\n\n\t\t\t\t// use the endpoint to request the jwt token and update it when it is refreshed so that it can be passed to the cloud interop code.\n\t\t\t\t// this is just an example using our modular approach to let you plug in an implementation.\n\t\t\t\t// You may have the refresh logic exposed in this module or a composite module if you are building your own\n\t\t\t\t// or you may have a different approach to get the jwt token and make it available to the cloud interop jwt callback.\n\t\t\t\t// to see an example of a requestStream see the example-notification-source endpoint in the modules/endpoint folder.\n\t\t\t\t// https://developer.mozilla.org/en-US/docs/Web/API/Streams_API/Using_readable_streams\n\t\t\t\tlet platformJWTToken: string | object;\n\n\t\t\t\tconst jwtStream = await endpointClient.requestStream(jwtEndpointId);\n\t\t\t\tif (jwtStream) {\n\t\t\t\t\tconst reader = jwtStream.getReader();\n\t\t\t\t\tconst logger = this._logger;\n\t\t\t\t\tthis._logger?.info(\"Reading from jwt stream\");\n\t\t\t\t\treader\n\t\t\t\t\t\t.read()\n\t\t\t\t\t\t.then(function pump({ done, value }: ReadableStreamReadResult): unknown {\n\t\t\t\t\t\t\tif (done) {\n\t\t\t\t\t\t\t\tlogger?.info(\"JWT Stream ended.\");\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tplatformJWTToken = value;\n\t\t\t\t\t\t\t// eslint-disable-next-line promise/no-nesting\n\t\t\t\t\t\t\treturn reader.read().then(pump);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch((error: string) => {\n\t\t\t\t\t\t\tlogger?.error(`Error reading JWT stream: ${error}`);\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n\t\t\t\tcloudInteropConfig.jwtAuthenticationParameters.jwtRequestCallback = () => platformJWTToken;\n\t\t\t}\n\t\t}\n\t\tconst cloudConfig: OpenFinCloudInteropOptions = {\n\t\t\t...cloudInteropConfig,\n\t\t\tsourceId: cloudInteropConfig.sourceId ?? fin.me.identity.uuid\n\t\t};\n\t\tconst initializedCloudInteropOverride = (await cloudInteropOverride(\n\t\t\tcloudConfig\n\t\t)) as unknown as OpenFin.ConstructorOverride;\n\n\t\treturn initializedCloudInteropOverride;\n\t}\n}\n"],"names":["exports","byteLength","b64","lens","getLens","validLen","placeHoldersLen","toByteArray","tmp","i","arr","Arr","_byteLength","curByte","len","revLookup","charCodeAt","fromByteArray","uint8","length","extraBytes","parts","maxChunkLength","len2","push","encodeChunk","lookup","join","Uint8Array","Array","code","Error","indexOf","start","end","num","output","base64","ieee754","isArray","kMaxLength","Buffer","TYPED_ARRAY_SUPPORT","createBuffer","that","RangeError","__proto__","prototype","arg","encodingOrOffset","this","allocUnsafe","from","value","TypeError","ArrayBuffer","array","byteOffset","undefined","fromArrayLike","fromArrayBuffer","string","encoding","isEncoding","actual","write","slice","fromString","obj","isBuffer","checked","copy","buffer","val","type","data","fromObject","assertSize","size","toString","isView","loweredCase","utf8ToBytes","base64ToBytes","toLowerCase","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","b","n","m","bidirectionalIndexOf","dir","isNaN","arrayIndexOf","call","lastIndexOf","indexSize","arrLength","valLength","String","read","buf","readUInt16BE","foundIndex","found","j","hexWrite","offset","Number","remaining","strLen","parsed","parseInt","substr","utf8Write","blitBuffer","asciiWrite","str","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","units","c","hi","lo","utf16leToBytes","Math","min","res","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","MAX_ARGUMENTS_LENGTH","fromCharCode","apply","decodeCodePointsArray","g","foo","subarray","e","typedArraySupport","poolSize","_augment","Symbol","species","Object","defineProperty","configurable","alloc","fill","allocUnsafeSlow","_isBuffer","compare","a","x","y","concat","list","pos","swap16","swap32","swap64","arguments","equals","inspect","max","match","target","thisStart","thisEnd","thisCopy","targetCopy","includes","isFinite","toJSON","_arr","ret","out","bytes","checkOffset","ext","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","pow","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","floor","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","set","INVALID_BASE64_RE","Infinity","leadSurrogate","trim","replace","stringtrim","base64clean","src","dst","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","d","s","NaN","rt","abs","log","LN2","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","amdO","definition","key","o","enumerable","get","globalThis","Function","window","prop","hasOwnProperty","bind","fn","thisArg","getPrototypeOf","kindOf","cache","create","thing","kindOfTest","typeOfTest","isUndefined","isArrayBuffer","isString","isFunction","isNumber","isObject","isPlainObject","toStringTag","iterator","isDate","isFile","isBlob","isFileList","isURLSearchParams","isReadableStream","isRequest","isResponse","isHeaders","map","forEach","allOwnKeys","l","keys","getOwnPropertyNames","findKey","_key","_global","self","isContextDefined","context","isTypedArray","TypedArray","isHTMLForm","isRegExp","reduceDescriptors","reducer","descriptors","getOwnPropertyDescriptors","reducedDescriptors","descriptor","name","defineProperties","ALPHA","DIGIT","ALPHABET","ALPHA_DIGIT","toUpperCase","isAsyncFn","_setImmediate","setImmediateSupported","setImmediate","postMessageSupported","postMessage","token","random","callbacks","addEventListener","source","shift","cb","setTimeout","asap","queueMicrotask","process","nextTick","utils$1","constructor","isFormData","kind","FormData","append","isArrayBufferView","result","isBoolean","isStream","pipe","merge","caseless","assignValue","targetKey","extend","stripBOM","content","inherits","superConstructor","props","assign","toFlatObject","sourceObj","destObj","filter","propFilter","merged","endsWith","searchString","position","lastIndex","toArray","forEachEntry","next","done","pair","matchAll","regExp","matches","exec","hasOwnProp","freezeMethods","writable","toObjectSet","arrayOrString","delimiter","define","split","toCamelCase","p1","p2","noop","toFiniteNumber","defaultValue","global","generateString","alphabet","isSpecCompliantForm","toJSONObject","stack","visit","reducedValue","isThenable","then","catch","AxiosError$1","message","config","request","response","captureStackTrace","status","description","number","fileName","lineNumber","columnNumber","prototype$1","isVisitable","removeBrackets","renderKey","path","dots","error","customProps","axiosError","cause","predicates","test","toFormData$1","formData","options","metaTokens","indexes","option","visitor","defaultVisitor","useBlob","Blob","convertValue","toISOString","JSON","stringify","some","isFlatArray","el","index","exposedHelpers","build","pop","encode$1","charMap","encodeURIComponent","AxiosURLSearchParams","params","_pairs","encode","buildURL","url","_encode","serializeFn","serialize","serializedParams","hashmarkIndex","encoder","InterceptorManager","handlers","use","fulfilled","rejected","synchronous","runWhen","eject","id","clear","h","transitionalDefaults","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","platform$1","isBrowser","classes","URLSearchParams","protocols","hasBrowserEnv","document","_navigator","navigator","hasStandardBrowserEnv","product","hasStandardBrowserWebWorkerEnv","WorkerGlobalScope","importScripts","origin","location","href","platform","freeze","formDataToJSON","buildPath","isNumericKey","isLast","arrayToObject","entries","parsePropPath","defaults","transitional","adapter","transformRequest","headers","contentType","getContentType","hasJSONContentType","isObjectPayload","setContentType","helpers","isNode","toURLEncodedForm","formSerializer","_FormData","env","rawValue","parse","stringifySafely","transformResponse","JSONRequested","responseType","strictJSONParsing","ERR_BAD_RESPONSE","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","common","method","ignoreDuplicateOf","$internals","normalizeHeader","header","normalizeValue","matchHeaderValue","isHeaderNameFilter","AxiosHeaders$1","valueOrRewrite","rewrite","setHeader","_value","_header","_rewrite","lHeader","setHeaders","rawHeaders","line","substring","parseHeaders","parser","tokens","tokensRE","parseTokens","has","matcher","deleted","deleteHeader","normalize","format","normalized","w","char","formatHeader","targets","asStrings","first","computed","accessor","accessors","defineAccessor","accessorName","methodName","arg1","arg2","arg3","buildAccessors","transformData","fns","isCancel$1","__CANCEL__","CanceledError$1","ERR_CANCELED","settle","resolve","reject","ERR_BAD_REQUEST","mapped","headerValue","progressEventReducer","listener","isDownloadStream","freq","bytesNotified","_speedometer","samplesCount","timestamps","firstSampleTS","head","tail","chunkLength","now","Date","startedAt","bytesCount","passed","round","speedometer","lastArgs","timer","timestamp","threshold","invoke","args","clearTimeout","throttle","loaded","total","lengthComputable","progressBytes","rate","progress","estimated","event","progressEventDecorator","throttled","asyncDecorator","isURLSameOrigin","msie","userAgent","urlParsingNode","createElement","originURL","resolveURL","setAttribute","protocol","host","search","hash","hostname","port","pathname","charAt","requestURL","cookies","expires","domain","secure","cookie","toGMTString","RegExp","decodeURIComponent","remove","buildFullPath","baseURL","requestedURL","relativeURL","combineURLs","headersToObject","mergeConfig$1","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","paramsSerializer","timeoutMessage","withCredentials","withXSRFToken","onUploadProgress","onDownloadProgress","decompress","beforeRedirect","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding","configValue","resolveConfig","newConfig","auth","btoa","username","password","unescape","Boolean","xsrfValue","xhrAdapter","XMLHttpRequest","Promise","_config","requestData","requestHeaders","onCanceled","uploadThrottled","downloadThrottled","flushUpload","flushDownload","unsubscribe","signal","removeEventListener","onloadend","responseHeaders","getAllResponseHeaders","err","responseText","statusText","open","onreadystatechange","readyState","responseURL","onabort","ECONNABORTED","onerror","ERR_NETWORK","ontimeout","timeoutErrorMessage","ETIMEDOUT","setRequestHeader","upload","cancel","abort","subscribe","aborted","parseProtocol","send","composeSignals","signals","controller","AbortController","reason","streamChunk","chunk","chunkSize","trackStream","stream","onProgress","onFinish","async","iterable","asyncIterator","reader","getReader","readStream","readBytes","_onFinish","ReadableStream","pull","close","loadedBytes","enqueue","return","highWaterMark","isFetchSupported","fetch","Request","Response","isReadableStreamSupported","encodeText","TextEncoder","arrayBuffer","supportsRequestStream","duplexAccessed","hasContentType","body","duplex","supportsResponseStream","resolvers","_","ERR_NOT_SUPPORT","knownAdapters","http","xhr","fetchOptions","composedSignal","toAbortSignal","requestContentLength","getContentLength","_request","getBodyLength","resolveBodyLength","contentTypeHeader","flush","isCredentialsSupported","credentials","isStreamResponse","responseContentLength","responseData","renderReason","isResolvedHandle","adapters","nameOrAdapter","rejectedReasons","reasons","state","throwIfCancellationRequested","throwIfRequested","dispatchRequest","validators$1","deprecatedWarnings","validator","version","formatMessage","opt","desc","opts","ERR_DEPRECATED","console","warn","assertOptions","schema","allowUnknown","ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","validators","Axios$1","instanceConfig","interceptors","configOrUrl","dummy","boolean","function","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","interceptor","unshift","responseInterceptorChain","promise","chain","onFulfilled","onRejected","getUri","generateHTTPMethod","isForm","HttpStatusCode$1","Continue","SwitchingProtocols","Processing","EarlyHints","Ok","Created","Accepted","NonAuthoritativeInformation","NoContent","ResetContent","PartialContent","MultiStatus","AlreadyReported","ImUsed","MultipleChoices","MovedPermanently","Found","SeeOther","NotModified","UseProxy","Unused","TemporaryRedirect","PermanentRedirect","BadRequest","Unauthorized","PaymentRequired","Forbidden","NotFound","MethodNotAllowed","NotAcceptable","ProxyAuthenticationRequired","RequestTimeout","Conflict","Gone","LengthRequired","PreconditionFailed","PayloadTooLarge","UriTooLong","UnsupportedMediaType","RangeNotSatisfiable","ExpectationFailed","ImATeapot","MisdirectedRequest","UnprocessableEntity","Locked","FailedDependency","TooEarly","UpgradeRequired","PreconditionRequired","TooManyRequests","RequestHeaderFieldsTooLarge","UnavailableForLegalReasons","InternalServerError","NotImplemented","BadGateway","ServiceUnavailable","GatewayTimeout","HttpVersionNotSupported","VariantAlsoNegotiates","InsufficientStorage","LoopDetected","NotExtended","NetworkAuthenticationRequired","axios","createInstance","defaultConfig","instance","Axios","CanceledError","CancelToken","executor","resolvePromise","_listeners","onfulfilled","_resolve","splice","isCancel","VERSION","toFormData","AxiosError","Cancel","all","promises","spread","callback","isAxiosError","payload","mergeConfig","AxiosHeaders","formToJSON","getAdapter","HttpStatusCode","default","ys","Kg","getOwnPropertyDescriptor","Gg","Qg","_e","t","M","Jt","r","X","Yg","B","_s","Jg","Lr","Xt","bt","Fi","Bl","run","Pl","kl","fun","Ee","Gl","Xl","Zl","eu","uu","du","Pu","Lt","Wi","ws","wt","$u","Wu","_debugEnd","yu","_debugProcess","gu","_events","Ou","_eventsCount","xu","_exiting","Yl","_fatalExceptions","cu","_getActiveHandles","_getActiveRequests","_kill","ru","_linkedBinding","_maxListeners","ku","_preload_modules","Cu","_rawDebug","zl","_startProfilerIdleNotifier","bu","_stopProfilerIdleNotifier","wu","_tickCallback","pu","Eu","addListener","Mu","allowedNodeEnvironmentFlags","lu","arch","xl","argv","Ul","argv0","Ru","assert","binding","Fl","chdir","Hl","Jl","cpuUsage","$i","cwd","$l","debugPort","Tu","dlopen","Ql","emit","Du","emitWarning","jl","Ll","execArgv","Nl","execPath","Iu","exit","ou","features","fu","hasUncaughtExceptionCaptureCallback","hrtime","kill","su","listeners","memoryUsage","nu","moduleLoadList","Kl","off","Uu","on","once","Lu","openStdin","au","pid","Su","Ml","ppid","Au","prependListener","ju","prependOnceListener","Fu","reallyExit","tu","release","Vl","removeAllListeners","qu","removeListener","Nu","resourceUsage","iu","setSourceMapsEnabled","Bu","setUncaughtExceptionCaptureCallback","hu","stderr","mu","stdin","vu","stdout","_u","title","Ol","umask","Wl","uptime","ql","versions","Dl","bs","Hu","v","PATH","LANG","language","PWD","HOME","TMP","sourceUrl","headersUrl","libUrl","inspector","debug","uv","ipv6","tls_alpn","tls_sni","tls_ocsp","tls","cached_builtins","performance","timing","navigationStart","bigint","BigInt","me","ey","Ku","Zt","Vu","ci","S","E","N","I","C","R","U","Xg","zu","Hi","for","SlowBuffer","p","INSPECT_MAX_BYTES","u","setPrototypeOf","f","A","Ye","SharedArrayBuffer","valueOf","gs","toPrimitive","ps","Cl","qg","Pr","hs","Ng","ge","Dg","W","te","T","P","$","se","oe","J","K","z","ji","Q","$g","pe","Yt","Hg","kr","Or","toLocaleString","Vg","ye","Ce","vl","Rl","El","Sl","Al","Il","readUintLE","readUintBE","readUint8","readUint16LE","readUint16BE","readUint32LE","readUint32BE","readBigUInt64LE","Mt","Mr","fi","readBigUInt64BE","readBigInt64LE","readBigInt64BE","writeUintLE","writeUintBE","writeUint8","writeUint16LE","writeUint16BE","writeUint32LE","writeUint32BE","writeBigUInt64LE","writeBigUInt64BE","writeBigInt64LE","writeBigInt64BE","copyWithin","xr","ds","super","Tl","ERR_OUT_OF_RANGE","jg","ERR_INVALID_ARG_TYPE","ERR_BUFFER_OUT_OF_BOUNDS","isInteger","Fg","Wg","zg","ty","Ut","ry","be","Gu","vs","aliasToTopic","put","getTopicByAlias","ce","xA","Qu","ArrayIsArray","ArrayPrototypeIncludes","ArrayPrototypeIndexOf","ArrayPrototypeJoin","ArrayPrototypeMap","ArrayPrototypePop","ArrayPrototypePush","ArrayPrototypeSlice","FunctionPrototypeCall","FunctionPrototypeSymbolHasInstance","hasInstance","MathFloor","NumberIsInteger","NumberIsNaN","NumberMAX_SAFE_INTEGER","MAX_SAFE_INTEGER","NumberMIN_SAFE_INTEGER","MIN_SAFE_INTEGER","NumberParseInt","ObjectDefineProperties","ObjectDefineProperty","ObjectGetOwnPropertyDescriptor","ObjectKeys","ObjectSetPrototypeOf","PromisePrototypeCatch","PromisePrototypeThen","PromiseReject","ReflectApply","Reflect","RegExpPrototypeTest","SafeSet","Set","StringPrototypeSlice","StringPrototypeToLowerCase","StringPrototypeToUpperCase","StringPrototypeTrim","SymbolFor","SymbolAsyncIterator","SymbolHasInstance","SymbolIterator","TypedArrayPrototypeSet","Je","$A","Ss","iy","ny","Yu","sy","Es","errors","AggregateError","kEmptyObject","createDeferredPromise","promisify","debuglog","toFixed","is","types","isAsyncFunction","custom","zi","ZA","Vi","Ju","AbortSignal","oy","Ae","uI","ef","ay","Ki","ly","uy","fy","cy","hy","Gi","er","ERR_INTERNAL_ASSERTION","Xu","ve","py","Zu","As","depth","colors","AbortError","aggregateTwoErrors","hideStackFrames","codes","_I","ff","Ts","sf","of","yy","Rs","by","wy","_y","my","ObjectPrototypeHasOwnProperty","vy","RegExpPrototypeExec","af","Ey","Sy","Ay","Ue","ERR_SOCKET_BAD_PORT","Iy","Ie","ERR_INVALID_ARG_VALUE","Ur","tr","ERR_UNKNOWN_SIGNAL","tf","normalizeEncoding","Ty","Ry","Cy","rf","ky","My","Ly","lf","Cs","Ny","uf","Is","qy","Dy","Bs","$y","zy","Ky","Gy","Qy","Jy","nf","isInt32","isUint32","parseFileMode","validateArray","validateStringArray","validateBooleanArray","validateBoolean","validateBuffer","validateDictionary","validateEncoding","validateFunction","validateInt32","validateInteger","validateNumber","validateObject","validateOneOf","validatePlainFunction","validatePort","validateSignalName","validateString","validateUint32","validateUndefined","validateUnion","validateAbortSignal","validateLinkHeaderValue","Nt","BI","pf","Xe","Ze","ae","Ps","ks","cf","rr","_t","Nr","Qi","eb","hf","Zy","df","mt","browser","tt","DI","Pf","Yi","gf","yf","bf","wf","_f","Os","mf","tb","rb","Ji","pause","resume","_writableState","_readableState","readable","Xi","et","vf","pipeThrough","Ef","getWriter","Sf","Zi","destroyed","Af","writableEnded","errored","ended","If","endEmitted","Tf","Rf","Cf","_closed","_defaultKeepAlive","_removedConnection","_removedContLen","Bf","_sent100","kDestroyed","isDisturbed","readableDidRead","readableAborted","kIsDisturbed","isErrored","readableErrored","writableErrored","errorEmitted","kIsErrored","isReadable","kIsReadable","kIsClosedPromise","kControllerErrorFunction","isClosed","closed","isDestroyed","isDuplexNodeStream","isFinished","isIterable","isReadableNodeStream","isReadableEnded","readableEnded","isReadableFinished","isReadableErrored","isNodeStream","isWebStream","isWritable","isWritableNodeStream","isWritableStream","isWritableEnded","isWritableFinished","writableFinished","finished","isWritableErrored","isServerRequest","_consuming","_dumped","req","upgradeOrConnect","isServerResponse","willEmitClose","autoDestroy","emitClose","isTransformStream","vt","QI","Ns","qt","Df","yb","bb","ERR_STREAM_PREMATURE_CLOSE","kf","Ms","Ls","wb","_b","mb","vb","Eb","Sb","Ab","Of","xs","Ib","xf","Mf","Lf","Uf","Tb","Nf","qf","Rb","Cb","Bb","Us","jf","kb","Pb","cleanup","ir","sT","Gf","xb","ERR_MULTIPLE_CALLBACK","Mb","Lb","$f","Ub","Nb","qb","Db","Hf","qs","Vf","Ff","Fb","zf","_destroy","Ds","closeEmitted","js","destroy","Hb","constructed","Vb","_construct","Wf","Kf","zb","construct","listenerCount","destroyer","socket","undestroy","reading","finalCalled","prefinished","ending","errorOrDestroy","Y","init","en","nc","defaultMaxListeners","Xf","newListener","warned","emitter","count","Gb","fired","wrapFn","Zf","ec","sc","tc","rc","ic","qr","Qf","Yf","Jf","Be","Fs","ownKeys","getOwnPropertySymbols","EventEmitter","setMaxListeners","getMaxListeners","rawListeners","eventNames","nr","Qb","Yb","Jb","Xb","Zb","ew","sr","createIterResult","nn","UT","ac","tw","oc","tn","rn","Ws","_isStdio","Stream","di","zT","sn","lc","rw","uc","iw","nw","sw","fc","addAbortSignal","ow","addAbortSignalNoValidate","dc","i2","hc","cc","aw","lw","$s","uw","consume","_getString","_getBuffer","customInspect","an","d2","gc","fw","cw","hw","pc","getHighWaterMark","dw","objectMode","getDefaultHighWaterMark","wc","gw","$e","Et","O","Ks","Cc","Pc","Hs","St","mc","Ys","Js","Bc","Gs","Mc","bw","Tw","Oc","Aw","Iw","Sw","Rw","ar","vc","Ec","ww","_w","cn","kc","mw","vw","Ew","zs","Bw","we","Pe","xc","Sc","Dr","Ac","Cw","Ic","lr","it","pi","Qs","Tc","text","Ow","xw","fillLast","kw","Mw","Lw","Uw","Nw","lastNeed","lastTotal","lastChar","Vs","Rc","Oe","yc","ln","or","At","_c","un","ur","Xs","StringDecoder","Lc","qw","Uc","Zs","H2","jc","Nc","Dw","qc","Dc","jw","Fw","ERR_STREAM_NULL_VALUES","Ww","_read","throw","gi","eR","Zc","He","Hw","Vw","zw","Kw","$c","Gw","Hc","Qw","Yw","Jw","Xw","F","ReadableState","so","Zw","Dt","e_","eo","t_","r_","H","i_","Fr","n_","s_","Fc","o_","ERR_METHOD_NOT_IMPLEMENTED","a_","l_","ERR_STREAM_PUSH_AFTER_EOF","u_","ERR_STREAM_UNSHIFT_AFTER_END_EVENT","f_","c_","fr","Vc","h_","no","to","jr","nt","readableObjectMode","pipes","flowing","sync","needReadable","emittedReadable","readableListening","resumeScheduled","defaultEncoding","awaitDrainWriters","multiAwaitDrain","readingMore","dataEmitted","decoder","hn","zc","_isUint8Array","_uint8ArrayToBuffer","dn","Kc","g_","ro","Wc","Qc","y_","Gc","w_","m_","Yc","wrap","destroyOnReturn","v_","Jc","io","E_","allowHalfOpen","S_","Xc","_undestroy","captureRejectionSymbol","isPaused","setEncoding","p_","hasUnpiped","needDrain","add","delete","b_","unpipe","writableNeedDrain","__","readableHighWaterMark","readableBuffer","readableFlowing","readableLength","readableEncoding","pipesCount","paused","_fromList","fromWeb","newStreamReadableFromReadableStream","toWeb","newReadableStreamFromStreamReadable","ho","fR","ch","cr","rh","A_","ih","nh","I_","sh","T_","R_","C_","ie","WritableState","wi","B_","yi","pn","bn","P_","k_","O_","x_","M_","oh","ERR_STREAM_CANNOT_PIPE","L_","ERR_STREAM_DESTROYED","bi","ERR_STREAM_ALREADY_FINISHED","U_","N_","ERR_STREAM_WRITE_AFTER_END","q_","ERR_UNKNOWN_ENCODING","ah","Wr","$r","writableObjectMode","decodeStrings","writing","corked","bufferProcessing","onwrite","j_","writecb","writelen","afterWriteTickInfo","yn","pendingcb","buffered","bufferedIndex","allBuffers","allNoop","_write","writev","_writev","final","_final","fo","co","lh","D_","eh","th","uo","F_","uh","gn","ao","W_","$_","getBuffer","cork","uncork","setDefaultEncoding","writableBuffer","writableHighWaterMark","writableCorked","writableLength","writableAborted","oo","H_","fh","newStreamWritableFromWritableStream","newWritableStreamFromStreamWritable","Sh","mR","Eh","po","V_","z_","K_","hh","G_","dh","ph","Q_","gh","vh","Y_","ERR_INVALID_RETURN_VALUE","yh","Hr","J_","X_","bh","wh","_h","Z_","e0","mh","hr","wn","t0","PR","Th","r0","It","i0","Ah","Ve","go","yo","bo","Ne","Ih","newStreamDuplexFromReadableWritablePair","newReadableWritablePairFromDuplex","mo","jR","Ch","Rh","n0","Tt","s0","_o","o0","_i","transform","_transform","_flush","a0","wo","Eo","YR","Ph","Bh","Vr","vo","En","oC","Lh","To","Ro","mi","l0","u0","f0","vn","c0","h0","kh","d0","Po","So","ERR_MISSING_ARGS","p0","g0","y0","b0","w0","_0","dr","Ao","mn","Oh","zr","m0","Io","v0","E0","xh","Co","A0","_n","Bo","ready","Mh","T0","pipelineImpl","pipeline","S0","Oo","yC","Fh","R0","Sn","C0","An","Uh","Nh","ko","pr","qh","Dh","B0","jh","P0","k0","Qh","TC","Lo","Vh","O0","vi","x0","M0","st","gr","L0","yr","U0","N0","q0","D0","j0","F0","W0","$0","H0","V0","Wh","$h","z0","zh","In","Hh","Tn","concurrency","Kh","Mo","xo","Gh","streamReturningOperators","asIndexedPairs","drop","flatMap","take","compose","promiseReturningOperators","every","reduce","find","Uo","UC","Yh","im","nm","sm","om","am","lm","um","No","zC","sd","cm","Rt","Zh","ed","td","Jh","Xh","ERR_ILLEGAL_CONSTRUCTOR","rd","hm","dm","nd","qo","Do","le","Readable","Writable","Duplex","Transform","PassThrough","pm","jt","rB","ue","he","gm","ym","od","hB","Fo","super_","ud","EB","ld","ze","ad","ee","_init","_bufs","_new","_offset","_reverseOffset","shallowSlice","trunc","duplicate","_appendBuffer","_isBufferList","_match","isBufferList","fd","OB","Rn","Wo","bm","Ei","Se","_callback","BufferListStream","BufferList","hd","WB","cd","cmd","retain","qos","dup","topic","Ho","XB","dd","L","ke","requiredHeaderFlags","requiredHeaderFlagsErrors","CMD_SHIFT","CMD_MASK","DUP_MASK","QOS_MASK","QOS_SHIFT","RETAIN_MASK","VARBYTEINT_MASK","VARBYTEINT_FIN_MASK","VARBYTEINT_MAX","SESSIONPRESENT_MASK","SESSIONPRESENT_HEADER","CONNACK_HEADER","connack","USERNAME_MASK","PASSWORD_MASK","WILL_RETAIN_MASK","WILL_QOS_MASK","WILL_QOS_SHIFT","WILL_FLAG_MASK","CLEAN_SESSION_MASK","CONNECT_HEADER","connect","properties","sessionExpiryInterval","willDelayInterval","receiveMaximum","maximumPacketSize","topicAliasMaximum","requestResponseInformation","requestProblemInformation","userProperties","authenticationMethod","authenticationData","payloadFormatIndicator","messageExpiryInterval","responseTopic","correlationData","maximumQoS","retainAvailable","assignedClientIdentifier","reasonString","wildcardSubscriptionAvailable","subscriptionIdentifiersAvailable","sharedSubscriptionAvailable","serverKeepAlive","responseInformation","serverReference","topicAlias","subscriptionIdentifier","propertiesCodes","Ft","propertiesTypes","PUBLISH_HEADER","SUBSCRIBE_HEADER","SUBSCRIBE_OPTIONS_QOS_MASK","SUBSCRIBE_OPTIONS_NL_MASK","SUBSCRIBE_OPTIONS_NL_SHIFT","SUBSCRIBE_OPTIONS_RAP_MASK","SUBSCRIBE_OPTIONS_RAP_SHIFT","SUBSCRIBE_OPTIONS_RH_MASK","SUBSCRIBE_OPTIONS_RH_SHIFT","SUBSCRIBE_OPTIONS_RH","SUBSCRIBE_OPTIONS_NL","SUBSCRIBE_OPTIONS_RAP","SUBSCRIBE_OPTIONS_QOS","UNSUBSCRIBE_HEADER","ACKS","unsuback","puback","pubcomp","pubrel","pubrec","SUBACK_HEADER","suback","VERSION3","VERSION4","VERSION5","VERSION131","VERSION132","QOS","EMPTY","pingreq","pingresp","disconnect","MQTT5_PUBACK_PUBREC_CODES","MQTT5_PUBREL_PUBCOMP_CODES","MQTT5_SUBACK_CODES","MQTT5_UNSUBACK_CODES","MQTT5_DISCONNECT_CODES","MQTT5_AUTH_CODES","gd","lP","pd","Kr","Gr","Qr","br","wm","Cn","parseFloat","mm","long","Em","vm","bd","wP","yd","enabled","diff","prev","curr","coerce","formatters","formatArgs","namespace","useColors","color","selectColor","namespaces","disable","names","skips","enable","save","humanize","load","ot","xe","Bn","storage","setItem","removeItem","getItem","DEBUG","__nwjs","documentElement","style","WebkitAppearance","firebug","exception","table","$1","localStorage","Cm","Bm","md","NP","_d","Pm","km","wd","V","D","settings","_states","_resetState","packet","_list","_stateCounter","_parseHeader","_emitError","_parseLength","_parseVarByteNum","_parsePayload","_pos","_parseConnect","_parseConnack","_parsePublish","_parseConfirmation","_parseSubscribe","_parseSuback","_parseUnsubscribe","_parseUnsuback","_parseDisconnect","_parseAuth","_parseString","protocolId","protocolVersion","bridgeMode","will","clean","keepalive","_parseNum","_parseProperties","clientId","_parseBuffer","sessionPresent","reasonCode","returnCode","_parseMessageId","subscriptions","_parseByte","nl","rap","granted","unsubscriptions","messageId","_parseStringPair","_parse4ByteNum","_parseByType","_newPacket","Ad","KP","Sd","Si","vd","xm","Ed","generateCache","generateNumber","genBufVariableByteInt","generate4ByteBuffer","Id","ik","zo","Qo","dk","xd","q","qm","Dm","Ai","jm","qe","Pn","Fm","Wm","Ko","$m","Te","Go","kn","kd","Hm","Wt","Pd","Od","De","Yr","wr","Vm","zm","Km","Ii","Gm","Qm","Ym","Jm","Xm","Zm","e1","t1","r1","Td","Rd","Bd","Cd","i1","Ud","Sk","Ld","n1","s1","Md","Yo","_array","Nd","On","generate","writeToStream","Zo","Xo","nextId","allocate","getLastAllocated","register","deallocate","Dd","Zk","qd","Jr","circles","proto","Map","l1","Fd","uO","jd","$d","Xr","Wd","validateTopics","validateTopic","ra","ta","f1","c1","h1","_inflights","createStream","del","Vd","ia","Hd","topicAliasRecv","customHandleAcks","_sendPacket","incomingStore","handleMessage","zd","QO","_r","at","MQTTJS_VERSION","applyMixin","ErrorWithReasonCode","na","Ti","$t","ReasonCodes","Kd","outgoing","_removeOutgoingAndStoreMessage","messageIdProvider","messageIdToTopic","_resubscribeTopics","_invokeStoreProcessingQueue","disconnecting","Qd","sa","Gd","b1","handleAuth","reconnecting","ep","Mn","LRUCache","Ri","Jd","oa","Xd","xn","Yd","_onabort","LRU_CACHE_IGNORE_AC_WARNING","Ht","Zd","Uint16Array","Uint32Array","Zr","aa","heap","static","la","ttl","ttlResolution","ttlAutopurge","updateAgeOnGet","updateAgeOnHas","allowStale","noDisposeOnSet","noUpdateTTL","maxEntrySize","sizeCalculation","noDeleteOnFetchRejection","noDeleteOnStaleGet","allowStaleOnFetchAbort","allowStaleOnFetchRejection","ignoreFetchAbort","unsafeExposeInternals","starts","ttls","sizes","keyMap","keyList","valList","free","isBackgroundFetch","backgroundFetch","moveToTail","rindexes","isStale","maxSize","calculatedSize","fetchMethod","dispose","disposeAfter","_1","getRemainingTTL","unref","remainingTTL","entrySize","totalCalculatedSize","rentries","rkeys","values","rvalues","__staleWhileFetching","rforEach","purgeStale","dump","maxEntrySizeExceeded","__abortController","oldValue","peek","fetchAborted","fetchError","fetchAbortIgnored","fetchResolved","fetchUpdated","returnedStale","__returned","fetchDispatched","fetchRejected","forceRefresh","lt","Vt","ContainerIterator","Container","Base","iteratorType","Ln","empty","tp","Un","m1","v1","top","rp","Nn","E1","S1","front","ip","qn","A1","I1","k","updateItem","jn","Dn","T1","R1","ut","ga","throwIteratorAccessError","ba","Wn","RandomIterator","B1","Fn","ya","pre","container","pointer","getElementByPos","setElementByPos","np","$n","P1","k1","mr","x1","pushBack","begin","rBegin","rEnd","back","eraseElementByPos","eraseElementByValue","eraseElementByIterator","popBack","insert","reverse","unique","sort","sp","Hn","M1","L1","vr","Er","N1","G","pushFront","popFront","op","Vn","q1","D1","Sr","F1","ceil","curNodeBucketIndex","curNodePointerIndex","cut","shrinkToFit","ap","ei","TreeNodeEnableIndex","TreeNode","zn","Sa","Kn","lp","W1","up","re","ne","parentNode","grandParent","curNode","fe","Z","updateKeyByIterator","eraseElementByKey","getHeight","Ia","Qn","H1","Gn","V1","cp","Yn","z1","fp","K1","G1","Ke","Q1","lowerBound","upperBound","reverseLowerBound","reverseUpperBound","union","dp","Jn","Y1","hp","J1","X1","Ge","Proxy","Z1","setElement","getElementByKey","Ba","Ca","xa","ti","HashContainerIterator","HashContainer","pp","Pa","Ci","ka","Oa","HASH_TAG","yp","Xn","gp","rv","Ar","iv","wp","Zn","bp","nv","sv","Ir","av","_p","je","dv","bv","yv","hv","gv","pv","fv","lv","cv","ft","vp","AN","mp","wv","OrderedSet","ct","_v","Re","low","high","ht","ss","firstVacant","intervalCount","Ua","MN","Ep","mv","NumberAllocator","Sp","qa","vv","Ev","topicToAlias","numberAllocator","getAliasByTopic","getLruAlias","Ap","Bi","Sv","__importDefault","__esModule","Av","Iv","Tv","connackTimer","topicAliasSend","_onConnect","Ip","Da","Tp","Pi","ki","Bv","Pv","kv","Ov","xv","reschedulePing","Rp","ri","Lv","TypedEventEmitter","Uv","Nv","es","Oi","Tr","isReactNativeBrowser","isWebWorker","Cp","Bp","Dv","kp","ts","Pp","WeakMap","addUniqueNumber","generateUniqueNumber","fastUniqueNumbers","xp","rs","Op","Worker","timerId","timerType","clearInterval","setInterval","delay","workerTimersBroker","Lp","Mp","URL","createObjectURL","revokeObjectURL","workerTimers","Dp","Ct","jv","__createBinding","Fv","__setModuleDefault","Wv","__importStar","ja","Up","Np","qp","Wa","xi","Hv","Vv","keepaliveTimeoutTimestamp","_keepaliveTimeoutTimestamp","intervalEvery","_intervalEvery","_keepalive","client","setKeepalive","reschedule","counter","sendPing","onKeepaliveTimeout","os","Qe","zv","Kv","Hp","zt","Gv","$a","Qv","Yv","jp","Fp","Jv","ii","Xv","ns","Zv","eE","Wp","Ha","$p","reschedulePings","reconnectPeriod","connectTimeout","resubscribe","writeCache","timerVariant","defaultId","_noop","rejectUnauthorized","cacheNumbers","streamBuilder","outgoingStore","queueQoSZero","keepaliveManager","connected","queue","reconnectTimer","_storeProcessing","_packetIdsDuringStoreProcessing","_storeProcessingQueue","_firstConnection","_resubscribe","_destroyKeepaliveManager","_setupReconnect","manualConnect","_nextId","getLastMessageId","_clearReconnect","disconnected","_flushVolatile","_writePacket","authPacket","_cleanUp","publish","cbStorePut","_checkDisconnecting","volatile","publishAsync","subscribeAsync","unsubscribeAsync","_deferredReconnect","endAsync","removeOutgoingMessage","reconnect","_reconnect","_removeTopicAliasAndRecoverTopicName","_storeAndSend","_applyTopicAlias","autoAssignTopicAlias","autoUseTopicAlias","_storePacket","_setupKeepaliveManager","_reschedulePing","connackPacket","_flushStoreProcessingQueue","_invokeAllStoreProcessingQueue","Vp","za","tE","lastId","Rr","sE","zp","nE","Yp","rE","iE","dt","Ka","Kp","Jp","Gp","Qp","Kt","Xp","overflow","ucs2","decode","fromCodePoint","toASCII","toUnicode","oE","aE","Mi","lE","pt","Zp","maxKeys","Ga","Qa","rg","Pt","si","uE","ni","Cr","Ot","as","ig","kt","eg","Bt","tg","ng","Ya","sg","oi","Xa","og","Za","Ja","fE","ag","isAbsolute","relative","_makeLong","dirname","basename","extname","root","base","sep","win32","posix","cE","gg","Fe","slashes","query","Li","gt","kE","Deno","InvalidData","codePointAt","IE","SE","AE","OE","xE","ME","hg","EE","vE","TE","RE","CE","BE","PE","dg","sl","zE","HE","VE","XE","ZE","pg","$E","WE","KE","GE","QE","YE","JE","FE","Url","UE","fileURLToPath","NE","jE","pathToFileURL","qE","resolveObject","DE","hE","dE","pE","gE","yE","il","lg","ug","fg","bE","wE","ai","tl","rl","cg","mE","LE","yg","isNull","isNullOrUndefined","javascript","https","ftp","gopher","file","parseHost","escape","_E","wg","m8","bg","ls","li","BufferedDuplex","eS","_g","mg","ol","proxy","writeQueue","isSocketOpen","writeToProxy","socketReady","processWriteQueue","Ui","Qt","ll","browserStreamBuilder","us","vg","tS","rS","iS","al","Gt","nS","Eg","transformWsUrl","Sg","wsOptions","forceNativeWebSocket","createWebsocket","oS","createWebSocketStream","binary","sS","browserBufferSize","browserBufferTimeout","WebSocket","binaryType","aS","bufferedAmount","OPEN","onopen","onclose","onmessage","ul","Me","Server","Socket","_createServerHandle","_normalizeArgs","_setSimultaneousAccepts","createConnection","createServer","fS","isIP","isIPv4","isIPv6","fl","cl","Ni","Ag","cS","dS","Ig","gS","Tg","dl","qi","hl","yS","bS","_S","servername","authorized","yl","gl","yt","pl","Le","Rg","vS","ES","AS","IS","wx","connectSocket","success","fail","SS","onOpen","onMessage","onClose","onError","errMsg","_l","wl","xt","fs","ui","bl","CS","BS","Cg","kS","OS","sendSocketMessage","closeSocket","PS","onSocketOpen","onSocketMessage","FileReader","readAsArrayBuffer","onSocketClose","onSocketError","kg","Br","cs","connectAsync","LS","US","NS","qS","Bg","de","Pg","unixSocket","startsWith","DS","cert","wss","wxs","ali","alis","mqtt","tcp","ssl","mqtts","defaultProtocol","servers","_reconnectCount","ml","Og","FS","WS","xg","__exportStar","Di","KeepaliveManager","UniqueMessageIdProvider","DefaultMessageIdProvider","Store","MqttClient","Client","Mg","$S","HS","VS","Lg","zS","KS","We","Ug","GS","QS","YS","JS","XS","CloudInteropAPIError","AuthorizationError","CloudInteropAPI","level","cloudInteropSettings","sessionDetails","mqttClient","parameters","reconnectRetryLimit","keepAliveIntervalSeconds","logger","sourceId","platformId","createSessionResponse","post","sessionRootTopic","clientOptions","sessionId","setContext","contextGroup","fireDisconnectedEvent","disconnectResponse","messageEnvelope","channelName","history","clientReceived","authenticationType","jwtAuthenticationParameters","jwtRequestCallback","authenticationId","basicAuthenticationParameters","tokenResult","isStringValue","entryPoints","interopOverride","initialize","loggerCreator","_definition","loggerName","_logger","_helpers","info","closedown","getConstructorOverride","errorMessage","cloudInteropConfig","jwtEndpointId","getEndpointClient","endpointClient","hasEndpoint","platformJWTToken","jwtStream","requestStream","pump","cloudConfig","fin","identity","uuid","contextListener","setContextFilter","getContextGroups","setContextForGroup","contextGroupId","cloudConnectionState","cloudReconnect","setCloudContextListener","setCloudSetContextFilter","cloudInteropOverride"],"sourceRoot":""} \ No newline at end of file diff --git a/workspace/v20.1.0/workspace-platform-starter/manifest.fin.json b/workspace/v20.1.0/workspace-platform-starter/manifest.fin.json index 8ee3708b1..33d8c5ecd 100644 --- a/workspace/v20.1.0/workspace-platform-starter/manifest.fin.json +++ b/workspace/v20.1.0/workspace-platform-starter/manifest.fin.json @@ -209,8 +209,11 @@ "enabled": false, "url": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.1.0/workspace-platform-starter/js/modules/interop-override/openfin-cloud-interop.bundle.js", "data": { - "userId": "", - "password": "", + "authenticationType": "basic", + "basicAuthenticationParameters": { + "username": "", + "password": "" + }, "platformId": "", "url": "", "sourceDisplayName": "", diff --git a/workspace/v20.1.0/workspace-platform-starter/settings.json b/workspace/v20.1.0/workspace-platform-starter/settings.json index 0be9d1eb5..dcae0bfc4 100644 --- a/workspace/v20.1.0/workspace-platform-starter/settings.json +++ b/workspace/v20.1.0/workspace-platform-starter/settings.json @@ -133,8 +133,11 @@ "enabled": false, "url": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.1.0/workspace-platform-starter/js/modules/interop-override/openfin-cloud-interop.bundle.js", "data": { - "userId": "", - "password": "", + "authenticationType": "basic", + "basicAuthenticationParameters": { + "username": "", + "password": "" + }, "platformId": "", "url": "", "sourceDisplayName": "",